ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggYWRhOGFkNi4uZDM1N2UxYiAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTUxLDYgKzUxLDcgQEAKIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CiBIZW5rIFZlcmdvbmV0IDxIZW5rLlZlcmdvbmV0QGdtYWlsLmNvbT4KIEhlbnJpayBLcmV0enNjaG1hciA8aGVubmVAbmFjaHR3aW5kaGVpbS5kZT4KK0hlbnJpayBSeWRiZXJnIDxyeWRiZXJnQGJpdG1hdGgub3JnPgogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgogSmFjb2IgU2hpbiA8SmFjb2IuU2hpbkBhbWQuY29tPgogSmFtZXMgQm90dG9tbGV5IDxqZWpiQG11bGdyYXZlLihub25lKT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbWVpIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1tZWkKaW5kZXggMGVjOGI4MS4uODBkOTg4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1tZWkKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1tZWkKQEAgLTE0LDMgKzE0LDE4IEBACiAJCVRoZSAvc3lzL2NsYXNzL21laS9tZWlOIGRpcmVjdG9yeSBpcyBjcmVhdGVkIGZvcgogCQllYWNoIHByb2JlZCBtZWkgZGV2aWNlCiAKK1doYXQ6CQkvc3lzL2NsYXNzL21laS9tZWlOL2Z3X3N0YXR1cworRGF0ZToJCU5vdiAyMDE0CitLZXJuZWxWZXJzaW9uOgkzLjE5CitDb250YWN0OglUb21hcyBXaW5rbGVyIDx0b21hcy53aW5rbGVyQGludGVsLmNvbT4KK0Rlc2NyaXB0aW9uOglEaXNwbGF5IGZ3IHN0YXR1cyByZWdpc3RlcnMgY29udGVudAorCisJCVRoZSBNRSBGVyB3cml0ZXMgaXRzIHN0YXR1cyBpbmZvcm1hdGlvbiBpbnRvIGZ3IHN0YXR1cworCQlyZWdpc3RlcnMgZm9yIEJJT1MgYW5kIE9TIHRvIG1vbml0b3IgZncgaGVhbHRoLgorCisJCVRoZSByZWdpc3RlciBjb250YWlucyBydW5uaW5nIHN0YXRlLCBwb3dlciBtYW5hZ2VtZW50CisJCXN0YXRlLCBlcnJvciBjb2RlcywgYW5kIG90aGVycy4gVGhlIHdheSB0aGUgcmVnaXN0ZXJzCisJCWFyZSBkZWNvZGVkIGRlcGVuZHMgb24gUENIIG9yIFNvQyBnZW5lcmF0aW9uLgorCQlBbHNvIG51bWJlciBvZiByZWdpc3RlcnMgdmFyaWVzIGJldHdlZW4gMSBhbmQgNgorCQlkZXBlbmRpbmcgb24gZ2VuZXJhdGlvbi4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1kZWxsLWxhcHRvcCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tZGVsbC1sYXB0b3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5Njk0NDMuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1kZWxsLWxhcHRvcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLVdoYXQ6CQkvc3lzL2NsYXNzL2xlZHMvZGVsbDo6a2JkX2JhY2tsaWdodC9hbHNfc2V0dGluZwotRGF0ZToJCURlY2VtYmVyIDIwMTQKLUtlcm5lbFZlcnNpb246CTMuMTkKLUNvbnRhY3Q6CUdhYnJpZWxlIE1henpvdHRhIDxnYWJyaWVsZS5tenRAZ21haWwuY29tPiwKLQkJUGFsaSBSb2jDoXIgPHBhbGkucm9oYXJAZ21haWwuY29tPgotRGVzY3JpcHRpb246Ci0JCVRoaXMgZmlsZSBhbGxvd3MgdG8gY29udHJvbCB0aGUgYXV0b21hdGljIGtleWJvYXJkCi0JCWlsbHVtaW5hdGlvbiBtb2RlIG9uIHNvbWUgc3lzdGVtcyB0aGF0IGhhdmUgYW4gYW1iaWVudAotCQlsaWdodCBzZW5zb3IuIFdyaXRlIDEgdG8gdGhpcyBmaWxlIHRvIGVuYWJsZSB0aGUgYXV0bwotCQltb2RlLCAwIHRvIGRpc2FibGUgaXQuCi0KLVdoYXQ6CQkvc3lzL2NsYXNzL2xlZHMvZGVsbDo6a2JkX2JhY2tsaWdodC9zdGFydF90cmlnZ2VycwotRGF0ZToJCURlY2VtYmVyIDIwMTQKLUtlcm5lbFZlcnNpb246CTMuMTkKLUNvbnRhY3Q6CUdhYnJpZWxlIE1henpvdHRhIDxnYWJyaWVsZS5tenRAZ21haWwuY29tPiwKLQkJUGFsaSBSb2jDoXIgPHBhbGkucm9oYXJAZ21haWwuY29tPgotRGVzY3JpcHRpb246Ci0JCVRoaXMgZmlsZSBhbGxvd3MgdG8gY29udHJvbCB0aGUgaW5wdXQgdHJpZ2dlcnMgdGhhdAotCQl0dXJuIG9uIHRoZSBrZXlib2FyZCBiYWNrbGlnaHQgaWxsdW1pbmF0aW9uIHRoYXQgaXMKLQkJZGlzYWJsZWQgYmVjYXVzZSBvZiBpbmFjdGl2aXR5LgotCQlSZWFkIHRoZSBmaWxlIHRvIHNlZSB0aGUgdHJpZ2dlcnMgYXZhaWxhYmxlLiBUaGUgb25lcwotCQllbmFibGVkIGFyZSBwcmVjZWRlZCBieSAnKycsIHRob3NlIGRpc2FibGVkIGJ5ICctJy4KLQotCQlUbyBlbmFibGUgYSB0cmlnZ2VyLCB3cml0ZSBpdHMgbmFtZSBwcmVjZWRlZCBieSAnKycgdG8KLQkJdGhpcyBmaWxlLiBUbyBkaXNhYmxlIGEgdHJpZ2dlciwgd3JpdGUgaXRzIG5hbWUgcHJlY2VkZWQKLQkJYnkgJy0nIGluc3RlYWQuCi0KLQkJRm9yIGV4YW1wbGUsIHRvIGVuYWJsZSB0aGUga2V5Ym9hcmQgYXMgdHJpZ2dlciBydW46Ci0JCSAgICBlY2hvICtrZXlib2FyZCA+IC9zeXMvY2xhc3MvbGVkcy9kZWxsOjprYmRfYmFja2xpZ2h0L3N0YXJ0X3RyaWdnZXJzCi0JCVRvIGRpc2FibGUgaXQ6Ci0JCSAgICBlY2hvIC1rZXlib2FyZCA+IC9zeXMvY2xhc3MvbGVkcy9kZWxsOjprYmRfYmFja2xpZ2h0L3N0YXJ0X3RyaWdnZXJzCi0KLQkJTm90ZSB0aGF0IG5vdCBhbGwgdGhlIGF2YWlsYWJsZSB0cmlnZ2VycyBjYW4gYmUgY29uZmlndXJlZC4KLQotV2hhdDoJCS9zeXMvY2xhc3MvbGVkcy9kZWxsOjprYmRfYmFja2xpZ2h0L3N0b3BfdGltZW91dAotRGF0ZToJCURlY2VtYmVyIDIwMTQKLUtlcm5lbFZlcnNpb246CTMuMTkKLUNvbnRhY3Q6CUdhYnJpZWxlIE1henpvdHRhIDxnYWJyaWVsZS5tenRAZ21haWwuY29tPiwKLQkJUGFsaSBSb2jDoXIgPHBhbGkucm9oYXJAZ21haWwuY29tPgotRGVzY3JpcHRpb246Ci0JCVRoaXMgZmlsZSBhbGxvd3MgdG8gc3BlY2lmeSB0aGUgaW50ZXJ2YWwgYWZ0ZXIgd2hpY2ggdGhlCi0JCWtleWJvYXJkIGlsbHVtaW5hdGlvbiBpcyBkaXNhYmxlZCBiZWNhdXNlIG9mIGluYWN0aXZpdHkuCi0JCVRoZSB0aW1lb3V0cyBhcmUgZXhwcmVzc2VkIGluIHNlY29uZHMsIG1pbnV0ZXMsIGhvdXJzIGFuZAotCQlkYXlzLCBmb3Igd2hpY2ggdGhlIHN5bWJvbHMgYXJlICdzJywgJ20nLCAnaCcgYW5kICdkJwotCQlyZXNwZWN0aXZlbHkuCi0KLQkJVG8gY29uZmlndXJlIHRoZSB0aW1lb3V0LCB3cml0ZSB0byB0aGlzIGZpbGUgYSB2YWx1ZSBhbG9uZwotCQl3aXRoIGFueSB0aGUgYWJvdmUgdW5pdHMuIElmIG5vIHVuaXQgaXMgc3BlY2lmaWVkLCB0aGUgdmFsdWUKLQkJaXMgYXNzdW1lZCB0byBiZSBleHByZXNzZWQgaW4gc2Vjb25kcy4KLQotCQlGb3IgZXhhbXBsZSwgdG8gc2V0IHRoZSB0aW1lb3V0IHRvIDEwIG1pbnV0ZXMgcnVuOgotCQkgICAgZWNobyAxMG0gPiAvc3lzL2NsYXNzL2xlZHMvZGVsbDo6a2JkX2JhY2tsaWdodC9zdG9wX3RpbWVvdXQKLQotCQlOb3RlIHRoYXQgd2hlbiB0aGlzIGZpbGUgaXMgcmVhZCwgdGhlIHJldHVybmVkIHZhbHVlIG1pZ2h0IGJlCi0JCWV4cHJlc3NlZCBpbiBhIGRpZmZlcmVudCB1bml0IHRoYW4gdGhlIG9uZSB1c2VkIHdoZW4gdGhlIHRpbWVvdXQKLQkJd2FzIHNldC4KLQotCQlBbHNvIG5vdGUgdGhhdCBvbmx5IHNvbWUgdGltZW91dHMgYXJlIHN1cHBvcnRlZCBhbmQgdGhhdAotCQlzb21lIHN5c3RlbXMgbWlnaHQgZmFsbCBiYWNrIHRvIGEgc3BlY2lmaWMgdGltZW91dCBpbiBjYXNlCi0JCWFuIGludmFsaWQgdGltZW91dCBpcyB3cml0dGVuIHRvIHRoaXMgZmlsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtLWJvYXJkcyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtLWJvYXJkcwppbmRleCA1NTZjODY2Li5iNzg1NjRiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcm0tYm9hcmRzCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtLWJvYXJkcwpAQCAtMjMsNyArMjMsNyBAQAogICAgIHJhbmdlIG9mIDB4MjAwIGJ5dGVzLgogCiAtIHN5c2NvbjogdGhlIHJvb3Qgbm9kZSBvZiB0aGUgSW50ZWdyYXRvciBwbGF0Zm9ybXMgbXVzdCBoYXZlIGEKLSAgc3lzdGVtIGNvbnRyb2xsZXIgbm9kZSBwb2ludG9uZyB0byB0aGUgY29udHJvbCByZWdpc3RlcnMsCisgIHN5c3RlbSBjb250cm9sbGVyIG5vZGUgcG9pbnRpbmcgdG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXJzLAogICB3aXRoIHRoZSBjb21wYXRpYmxlIHN0cmluZwogICAiYXJtLGludGVncmF0b3ItYXAtc3lzY29uIgogICAiYXJtLGludGVncmF0b3ItY3Atc3lzY29uIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9mdy1jZmcudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9mdy1jZmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1M2ZiNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2Z3LWNmZy50eHQKQEAgLTAsMCArMSw3MiBAQAorKiBRRU1VIEZpcm13YXJlIENvbmZpZ3VyYXRpb24gYmluZGluZ3MgZm9yIEFSTQorCitRRU1VJ3MgYXJtLXNvZnRtbXUgYW5kIGFhcmNoNjQtc29mdG1tdSBlbXVsYXRpb24gLyB2aXJ0dWFsaXphdGlvbiB0YXJnZXRzCitwcm92aWRlIHRoZSBmb2xsb3dpbmcgRmlybXdhcmUgQ29uZmlndXJhdGlvbiBpbnRlcmZhY2Ugb24gdGhlICJ2aXJ0IiBtYWNoaW5lCit0eXBlOgorCistIEEgd3JpdGUtb25seSwgMTYtYml0IHdpZGUgc2VsZWN0b3IgKG9yIGNvbnRyb2wpIHJlZ2lzdGVyLAorLSBhIHJlYWQtd3JpdGUsIDY0LWJpdCB3aWRlIGRhdGEgcmVnaXN0ZXIuCisKK1FFTVUgZXhwb3NlcyB0aGUgY29udHJvbCBhbmQgZGF0YSByZWdpc3RlciB0byBBUk0gZ3Vlc3RzIGFzIG1lbW9yeSBtYXBwZWQKK3JlZ2lzdGVyczsgdGhlaXIgbG9jYXRpb24gaXMgY29tbXVuaWNhdGVkIHRvIHRoZSBndWVzdCdzIFVFRkkgZmlybXdhcmUgaW4gdGhlCitEVEIgdGhhdCBRRU1VIHBsYWNlcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBndWVzdCdzIERSQU0uCisKK1RoZSBndWVzdCB3cml0ZXMgYSBzZWxlY3RvciB2YWx1ZSAoYSBrZXkpIHRvIHRoZSBzZWxlY3RvciByZWdpc3RlciwgYW5kIHRoZW4KK2NhbiByZWFkIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgKHByb2R1Y2VkIGJ5IFFFTVUpIHZpYSB0aGUgZGF0YSByZWdpc3Rlci4gSWYKK3RoZSBzZWxlY3RlZCBlbnRyeSBpcyB3cml0YWJsZSwgdGhlIGd1ZXN0IGNhbiByZXdyaXRlIGl0IHRocm91Z2ggdGhlIGRhdGEKK3JlZ2lzdGVyLgorCitUaGUgc2VsZWN0b3IgcmVnaXN0ZXIgdGFrZXMga2V5cyBpbiBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuCisKK1RoZSBkYXRhIHJlZ2lzdGVyIGFsbG93cyBhY2Nlc3NlcyB3aXRoIDgsIDE2LCAzMiBhbmQgNjQtYml0IHdpZHRoIChvbmx5IGF0CitvZmZzZXQgMCBvZiB0aGUgcmVnaXN0ZXIpLiBBY2Nlc3NlcyBsYXJnZXIgdGhhbiBhIGJ5dGUgYXJlIGludGVycHJldGVkIGFzCithcnJheXMsIGJ1bmRsZWQgdG9nZXRoZXIgb25seSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLiBUaGUgYnl0ZXMgY29uc3RpdHV0aW5nCitzdWNoIGEgd29yZCwgaW4gaW5jcmVhc2luZyBhZGRyZXNzIG9yZGVyLCBjb3JyZXNwb25kIHRvIHRoZSBieXRlcyB0aGF0IHdvdWxkCitoYXZlIGJlZW4gdHJhbnNmZXJyZWQgYnkgYnl0ZS13aWRlIGFjY2Vzc2VzIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKK1RoZSBpbnRlcmZhY2UgYWxsb3dzIGd1ZXN0IGZpcm13YXJlIHRvIGRvd25sb2FkIHZhcmlvdXMgcGFyYW1ldGVycyBhbmQgYmxvYnMKK3RoYXQgYWZmZWN0IGhvdyB0aGUgZmlybXdhcmUgd29ya3MgYW5kIHdoYXQgdGFibGVzIGl0IGluc3RhbGxzIGZvciB0aGUgZ3Vlc3QKK09TLiBGb3IgZXhhbXBsZSwgYm9vdCBvcmRlciBvZiBkZXZpY2VzLCBBQ1BJIHRhYmxlcywgU01CSU9TIHRhYmxlcywga2VybmVsIGFuZAoraW5pdHJkIGltYWdlcyBmb3IgZGlyZWN0IGtlcm5lbCBib290aW5nLCB2aXJ0dWFsIG1hY2hpbmUgVVVJRCwgU01QIGluZm9ybWF0aW9uLAordmlydHVhbCBOVU1BIHRvcG9sb2d5LCBhbmQgc28gb24uCisKK1RoZSBhdXRob3JpdGF0aXZlIHJlZ2lzdHJ5IG9mIHRoZSB2YWxpZCBzZWxlY3RvciB2YWx1ZXMgYW5kIHRoZWlyIG1lYW5pbmdzIGlzCit0aGUgUUVNVSBzb3VyY2UgY29kZTsgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSBibG9icyBjb3JyZXNwb25kaW5nIHRvIHRoZQoraW5kaXZpZHVhbCBrZXkgdmFsdWVzIGlzIGFsc28gZGVmaW5lZCBpbiB0aGUgUUVNVSBzb3VyY2UgY29kZS4KKworVGhlIHByZXNlbmNlIG9mIHRoZSByZWdpc3RlcnMgY2FuIGJlIHZlcmlmaWVkIGJ5IHNlbGVjdGluZyB0aGUgInNpZ25hdHVyZSIgYmxvYgord2l0aCBrZXkgMHgwMDAwLCBhbmQgcmVhZGluZyBmb3VyIGJ5dGVzIGZyb20gdGhlIGRhdGEgcmVnaXN0ZXIuIFRoZSByZXR1cm5lZAorc2lnbmF0dXJlIGlzICJRRU1VIi4KKworVGhlIG91dGVybW9zdCBwcm90b2NvbCAoaW52b2x2aW5nIHRoZSB3cml0ZSAvIHJlYWQgc2VxdWVuY2VzIG9mIHRoZSBjb250cm9sIGFuZAorZGF0YSByZWdpc3RlcnMpIGlzIGV4cGVjdGVkIHRvIGJlIHZlcnNpb25lZCwgYW5kL29yIGRlc2NyaWJlZCBieSBmZWF0dXJlIGJpdHMuCitUaGUgaW50ZXJmYWNlIHJldmlzaW9uIC8gZmVhdHVyZSBiaXRtYXAgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGtleSAweDAwMDEuIFRoZQorYmxvYiB0byBiZSByZWFkIGZyb20gdGhlIGRhdGEgcmVnaXN0ZXIgaGFzIHNpemUgNCwgYW5kIGl0IGlzIHRvIGJlIGludGVycHJldGVkCithcyBhIHVpbnQzMl90IHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci4gVGhlIGN1cnJlbnQgdmFsdWUKKyhjb3JyZXNwb25kaW5nIHRvIHRoZSBhYm92ZSBvdXRlciBwcm90b2NvbCkgaXMgemVyby4KKworVGhlIGd1ZXN0IGtlcm5lbCBpcyBub3QgZXhwZWN0ZWQgdG8gdXNlIHRoZXNlIHJlZ2lzdGVycyAoYWx0aG91Z2ggaXQgaXMKK2NlcnRhaW5seSBhbGxvd2VkIHRvKTsgdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzIGFyZSBkb2N1bWVudGVkIGhlcmUgYmVjYXVzZQordGhpcyBpcyB3aGVyZSBkZXZpY2UgdHJlZSBiaW5kaW5ncyByZXNpZGUgaW4gZ2VuZXJhbC4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKworLSBjb21wYXRpYmxlOiAicWVtdSxmdy1jZmctbW1pbyIuCisKKy0gcmVnOiB0aGUgTU1JTyByZWdpb24gdXNlZCBieSB0aGUgZGV2aWNlLgorICAqIEJ5dGVzIDB4MCB0byAweDcgY292ZXIgdGhlIGRhdGEgcmVnaXN0ZXIuCisgICogQnl0ZXMgMHg4IHRvIDB4OSBjb3ZlciB0aGUgc2VsZWN0b3IgcmVnaXN0ZXIuCisgICogRnVydGhlciByZWdpc3RlcnMgbWF5IGJlIGFwcGVuZGVkIHRvIHRoZSByZWdpb24gaW4gY2FzZSBvZiBmdXR1cmUgaW50ZXJmYWNlCisgICAgcmV2aXNpb25zIC8gZmVhdHVyZSBiaXRzLgorCitFeGFtcGxlOgorCisvIHsKKwkjc2l6ZS1jZWxscyA9IDwweDI+OworCSNhZGRyZXNzLWNlbGxzID0gPDB4Mj47CisKKwlmdy1jZmdAOTAyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicWVtdSxmdy1jZmctbW1pbyI7CisJCXJlZyA9IDwweDAgMHg5MDIwMDAwIDB4MCAweGE+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dyYXBoLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncmFwaC50eHQKaW5kZXggMWE2OWMwNy4uZmNiMWM2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dyYXBoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3JhcGgudHh0CkBAIC0xOSw3ICsxOSw3IEBACiBtYXkgYmUgZGVzY3JpYmVkIGJ5IHNwZWNpYWxpemVkIGJpbmRpbmdzIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBjb25uZWN0aW9uLgogCiBUbyBzZWUgaG93IHRoaXMgYmluZGluZyBhcHBsaWVzIHRvIHZpZGVvIHBpcGVsaW5lcywgZm9yIGV4YW1wbGUsIHNlZQotRG9jdW1lbnRhdGlvbi9kZXZpY2UtdHJlZS9iaW5kaW5ncy9tZWRpYS92aWRlby1pbnRlcmZhY2VzLnR4dC4KK0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS92aWRlby1pbnRlcmZhY2VzLnR4dC4KIEhlcmUgdGhlIHBvcnRzIGRlc2NyaWJlIGRhdGEgaW50ZXJmYWNlcywgYW5kIHRoZSBsaW5rcyBiZXR3ZWVuIHRoZW0gYXJlCiB0aGUgY29ubmVjdGluZyBkYXRhIGJ1c2VzLiBBIHNpbmdsZSBwb3J0IHdpdGggbXVsdGlwbGUgY29ubmVjdGlvbnMgY2FuCiBjb3JyZXNwb25kIHRvIG11bHRpcGxlIGRldmljZXMgYmVpbmcgY29ubmVjdGVkIHRvIHRoZSBzYW1lIHBoeXNpY2FsIGJ1cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvaTJjLXN0LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvaTJjLXN0LnR4dAppbmRleCA0MzdlMGRiLi40YzI2ZmRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2kyYy1zdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9pMmMtc3QudHh0CkBAIC0zMSw3ICszMSw3IEBACiAJY29tcGF0aWJsZQk9ICJzdCxjb21tcy1zc2M0LWkyYyI7CiAJcmVnCQk9IDwweGZlZDQwMDAwIDB4MTEwPjsKIAlpbnRlcnJ1cHRzCT0gIDxHSUNfU1BJIDE4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQljbG9ja3MJCT0gPCZDTEtfU19JQ05fUkVHXzA+OworCWNsb2NrcwkJPSA8JmNsa19zX2EwX2xzIENMS19JQ05fUkVHPjsKIAljbG9jay1uYW1lcwk9ICJzc2MiOwogCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCXBpbmN0cmwtbmFtZXMJPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2aWNlcy50eHQKaW5kZXggOWY0ZTM4Mi4uOWY0MWQwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZpY2VzLnR4dApAQCAtNDcsNiArNDcsNyBAQAogZGFsbGFzLGRzNDUxMAkJQ1BVIFN1cGVydmlzb3Igd2l0aCBOb252b2xhdGlsZSBNZW1vcnkgYW5kIFByb2dyYW1tYWJsZSBJL08KIGRhbGxhcyxkczc1CQlEaWdpdGFsIFRoZXJtb21ldGVyIGFuZCBUaGVybW9zdGF0CiBkbGcsZGE5MDUzCQlEQTkwNTM6IGZsZXhpYmxlIHN5c3RlbSBsZXZlbCBQTUlDIHdpdGggbXVsdGljb3JlIHN1cHBvcnQKK2RsZyxkYTkwNjMJCURBOTA2Mzogc3lzdGVtIFBNSUMgZm9yIHF1YWQtY29yZSBhcHBsaWNhdGlvbiBwcm9jZXNzb3JzCiBlcHNvbixyeDgwMjUJCUhpZ2gtU3RhYmlsaXR5LiBJMkMtQnVzIElOVEVSRkFDRSBSRUFMIFRJTUUgQ0xPQ0sgTU9EVUxFCiBlcHNvbixyeDg1ODEJCUkyQy1CVVMgSU5URVJGQUNFIFJFQUwgVElNRSBDTE9DSyBNT0RVTEUKIGZzbCxtYWczMTEwCQlNQUczMTEwOiBYdHJpbnNpYyBIaWdoIEFjY3VyYWN5LCAzRCBNYWduZXRvbWV0ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnB1dC9ncGlvLWtleXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L2dwaW8ta2V5cy50eHQKaW5kZXggYTRhMzhmYy4uNDRiNzA1NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L2dwaW8ta2V5cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L2dwaW8ta2V5cy50eHQKQEAgLTEwLDEyICsxMCwxMyBAQAogRWFjaCBidXR0b24gKGtleSkgaXMgcmVwcmVzZW50ZWQgYXMgYSBzdWItbm9kZSBvZiAiZ3Bpby1rZXlzIjoKIFN1Ym5vZGUgcHJvcGVydGllczoKIAorCS0gZ3Bpb3M6IE9GIGRldmljZS10cmVlIGdwaW8gc3BlY2lmaWNhdGlvbi4KKwktIGludGVycnVwdHM6IHRoZSBpbnRlcnJ1cHQgbGluZSBmb3IgdGhhdCBpbnB1dC4KIAktIGxhYmVsOiBEZXNjcmlwdGl2ZSBuYW1lIG9mIHRoZSBrZXkuCiAJLSBsaW51eCxjb2RlOiBLZXljb2RlIHRvIGVtaXQuCiAKLVJlcXVpcmVkIG11dHVhbCBleGNsdXNpdmUgc3Vibm9kZS1wcm9wZXJ0aWVzOgotCS0gZ3Bpb3M6IE9GIGRldmljZS10cmVlIGdwaW8gc3BlY2lmaWNhdGlvbi4KLQktIGludGVycnVwdHM6IHRoZSBpbnRlcnJ1cHQgbGluZSBmb3IgdGhhdCBpbnB1dAorTm90ZSB0aGF0IGVpdGhlciAiaW50ZXJydXB0cyIgb3IgImdwaW9zIiBwcm9wZXJ0aWVzIGNhbiBiZSBvbWl0dGVkLCBidXQgbm90Citib3RoIGF0IHRoZSBzYW1lIHRpbWUuIFNwZWNpZnlpbmcgYm90aCBwcm9wZXJ0aWVzIGlzIGFsbG93ZWQuCiAKIE9wdGlvbmFsIHN1Ym5vZGUtcHJvcGVydGllczoKIAktIGxpbnV4LGlucHV0LXR5cGU6IFNwZWNpZnkgZXZlbnQgdHlwZSB0aGlzIGJ1dHRvbi9rZXkgZ2VuZXJhdGVzLgpAQCAtMjMsNiArMjQsOSBAQAogCS0gZGVib3VuY2UtaW50ZXJ2YWw6IERlYm91bmNpbmcgaW50ZXJ2YWwgdGltZSBpbiBtaWxsaXNlY29uZHMuCiAJICBJZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRzIHRvIDUuCiAJLSBncGlvLWtleSx3YWtldXA6IEJvb2xlYW4sIGJ1dHRvbiBjYW4gd2FrZS11cCB0aGUgc3lzdGVtLgorCS0gbGludXgsY2FuLWRpc2FibGU6IEJvb2xlYW4sIGluZGljYXRlcyB0aGF0IGJ1dHRvbiBpcyBjb25uZWN0ZWQKKwkgIHRvIGRlZGljYXRlZCAobm90IHNoYXJlZCkgaW50ZXJydXB0IHdoaWNoIGNhbiBiZSBkaXNhYmxlZCB0bworCSAgc3VwcHJlc3MgZXZlbnRzIGZyb20gdGhlIGJ1dHRvbi4KIAogRXhhbXBsZSBub2RlczoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3N0bXBlLWtleXBhZC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvc3RtcGUta2V5cGFkLnR4dAppbmRleCAxYjk3MjIyLi4xMmJiNzcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvc3RtcGUta2V5cGFkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvc3RtcGUta2V5cGFkLnR4dApAQCAtOCw2ICs4LDggQEAKICAtIGRlYm91bmNlLWludGVydmFsICAgICAgICA6IERlYm91bmNpbmcgaW50ZXJ2YWwgdGltZSBpbiBtaWxsaXNlY29uZHMKICAtIHN0LHNjYW4tY291bnQgICAgICAgICAgICA6IFNjYW5uaW5nIGN5Y2xlcyBlbGFwc2VkIGJlZm9yZSBrZXkgZGF0YSBpcyB1cGRhdGVkCiAgLSBzdCxuby1hdXRvcmVwZWF0ICAgICAgICAgOiBJZiBzcGVjaWZpZWQgZGV2aWNlIHdpbGwgbm90IGF1dG9yZXBlYXQKKyAtIGtleXBhZCxudW0tcm93cyAgICAgICAgICA6IFNlZSAuL21hdHJpeC1rZXltYXAudHh0CisgLSBrZXlwYWQsbnVtLWNvbHVtbnMgICAgICAgOiBTZWUgLi9tYXRyaXgta2V5bWFwLnR4dAogCiBFeGFtcGxlOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RhdmluY2lfZW1hYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RhdmluY2lfZW1hYy50eHQKaW5kZXggMDMyODA4OC4uMjRjNWNkYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kYXZpbmNpX2VtYWMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGF2aW5jaV9lbWFjLnR4dApAQCAtNCw3ICs0LDggQEAKIGZvciB0aGUgZGF2aW5jaV9lbWFjIGludGVyZmFjZSBjb250YWlucy4KIAogUmVxdWlyZWQgcHJvcGVydGllczoKLS0gY29tcGF0aWJsZTogInRpLGRhdmluY2ktZG02NDY3LWVtYWMiIG9yICJ0aSxhbTM1MTctZW1hYyIKKy0gY29tcGF0aWJsZTogInRpLGRhdmluY2ktZG02NDY3LWVtYWMiLCAidGksYW0zNTE3LWVtYWMiIG9yCisgICJ0aSxkbTgxNi1lbWFjIgogLSByZWc6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UKIC0gdGksZGF2aW5jaS1jdHJsLXJlZy1vZmZzZXQ6IG9mZnNldCB0byBjb250cm9sIHJlZ2lzdGVyCiAtIHRpLGRhdmluY2ktY3RybC1tb2QtcmVnLW9mZnNldDogb2Zmc2V0IHRvIGNvbnRyb2wgbW9kdWxlIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92ZW5kb3ItcHJlZml4ZXMudHh0CmluZGV4IGIxZGYwYWQuLmQ0NDMyNzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92ZW5kb3ItcHJlZml4ZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92ZW5kb3ItcHJlZml4ZXMudHh0CkBAIC05LDcgKzksNiBAQAogYWRhcHRldmEJQWRhcHRldmEsIEluYy4KIGFkaQlBbmFsb2cgRGV2aWNlcywgSW5jLgogYWVyb2ZsZXhnYWlzbGVyCUFlcm9mbGV4IEdhaXNsZXIgQUIKLWFrCUFzYWhpIEthc2VpIENvcnAuCiBhbGx3aW5uZXIJQWxsd2lubmVyIFRlY2hub2xvZ3kgQ28uLCBMdGQuCiBhbHRyCUFsdGVyYSBDb3JwLgogYW1jYwlBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uIChBUE0sIGZvcm1hbGx5IEFNQ0MpCkBAIC0yMCw2ICsxOSw3IEBACiBhcG0JQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbiAoQVBNKQogYXJtCUFSTSBMdGQuCiBhcm1hZGV1cwlBUk1hZGV1cyBTeXN0ZW1zIFNBUkwKK2FzYWhpLWthc2VpCUFzYWhpIEthc2VpIENvcnAuCiBhdG1lbAlBdG1lbCBDb3Jwb3JhdGlvbgogYXVvCUFVIE9wdHJvbmljcyBDb3Jwb3JhdGlvbgogYXZhZ28JQXZhZ28gVGVjaG5vbG9naWVzCkBAIC0xMjcsNiArMTI3LDcgQEAKIHBvd2VydnIJUG93ZXJWUiAoZGVwcmVjYXRlZCwgdXNlIGltZykKIHFjYQlRdWFsY29tbSBBdGhlcm9zLCBJbmMuCiBxY29tCVF1YWxjb21tIFRlY2hub2xvZ2llcywgSW5jCitxZW11CVFFTVUsIGEgZ2VuZXJpYyBhbmQgb3BlbiBzb3VyY2UgbWFjaGluZSBlbXVsYXRvciBhbmQgdmlydHVhbGl6ZXIKIHFuYXAJUU5BUCBTeXN0ZW1zLCBJbmMuCiByYWR4YQlSYWR4YQogcmFpZHNvbmljCVJhaWRTb25pYyBUZWNobm9sb2d5IEdtYkgKQEAgLTE2OCw2ICsxNjksNyBAQAogdjMJVjMgU2VtaWNvbmR1Y3RvcgogdmFyaXNjaXRlCVZhcmlzY2l0ZSBMdGQuCiB2aWEJVklBIFRlY2hub2xvZ2llcywgSW5jLgordmlydGlvCVZpcnR1YWwgSS9PIERldmljZSBTcGVjaWZpY2F0aW9uLCBkZXZlbG9wZWQgYnkgdGhlIE9BU0lTIGNvbnNvcnRpdW0KIHZvaXBhYwlWb2lwYWMgVGVjaG5vbG9naWVzIHMuci5vLgogd2luYm9uZCBXaW5ib25kIEVsZWN0cm9uaWNzIGNvcnAuCiB3bGYJV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDRkZjczZGExLi4xNzZkNGZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMTI3Nyw2ICsxMjc3LDcgQEAKIAlpODA0Mi5ub3RpbWVvdXQJW0hXXSBJZ25vcmUgdGltZW91dCBjb25kaXRpb24gc2lnbmFsbGVkIGJ5IGNvbnRyb2xsZXIKIAlpODA0Mi5yZXNldAlbSFddIFJlc2V0IHRoZSBjb250cm9sbGVyIGR1cmluZyBpbml0IGFuZCBjbGVhbnVwCiAJaTgwNDIudW5sb2NrCVtIV10gVW5sb2NrIChpZ25vcmUpIHRoZSBrZXlsb2NrCisJaTgwNDIua2JkcmVzZXQgIFtIV10gUmVzZXQgZGV2aWNlIGNvbm5lY3RlZCB0byBLQkQgcG9ydAogCiAJaTgxMD0JCVtIVyxEUk1dCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggOWJmZmRmYy4uODViMDIyMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTY2LDYgKzY2LDggQEAKIHJvdXRlL21heF9zaXplIC0gSU5URUdFUgogCU1heGltdW0gbnVtYmVyIG9mIHJvdXRlcyBhbGxvd2VkIGluIHRoZSBrZXJuZWwuICBJbmNyZWFzZQogCXRoaXMgd2hlbiB1c2luZyBsYXJnZSBudW1iZXJzIG9mIGludGVyZmFjZXMgYW5kL29yIHJvdXRlcy4KKwlGcm9tIGxpbnV4IGtlcm5lbCAzLjYgb253YXJkcywgdGhpcyBpcyBkZXByZWNhdGVkIGZvciBpcHY0CisJYXMgcm91dGUgY2FjaGUgaXMgbm8gbG9uZ2VyIHVzZWQuCiAKIG5laWdoL2RlZmF1bHQvZ2NfdGhyZXNoMSAtIElOVEVHRVIKIAlNaW5pbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIGtlZXAuICBHYXJiYWdlIGNvbGxlY3RvciB3aWxsIG5vdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90YXJnZXQvdGNtX21vZF9idWlsZGVyLnB5IGIvRG9jdW1lbnRhdGlvbi90YXJnZXQvdGNtX21vZF9idWlsZGVyLnB5CmluZGV4IDIzMGNlNzEuLjJiNDc3MDQgMTAwNzU1Ci0tLSBhL0RvY3VtZW50YXRpb24vdGFyZ2V0L3RjbV9tb2RfYnVpbGRlci5weQorKysgYi9Eb2N1bWVudGF0aW9uL3RhcmdldC90Y21fbW9kX2J1aWxkZXIucHkKQEAgLTM4OSw5ICszODksNiBAQAogCWJ1ZiArPSAiCS5yZWxlYXNlX2NtZAkJCT0gIiArIGZhYnJpY19tb2RfbmFtZSArICJfcmVsZWFzZV9jbWQsXG4iCiAJYnVmICs9ICIJLnNodXRkb3duX3Nlc3Npb24JCT0gIiArIGZhYnJpY19tb2RfbmFtZSArICJfc2h1dGRvd25fc2Vzc2lvbixcbiIKIAlidWYgKz0gIgkuY2xvc2Vfc2Vzc2lvbgkJCT0gIiArIGZhYnJpY19tb2RfbmFtZSArICJfY2xvc2Vfc2Vzc2lvbixcbiIKLQlidWYgKz0gIgkuc3RvcF9zZXNzaW9uCQkJPSAiICsgZmFicmljX21vZF9uYW1lICsgIl9zdG9wX3Nlc3Npb24sXG4iCi0JYnVmICs9ICIJLmZhbGxfYmFja190b19lcmwwCQk9ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3Jlc2V0X25leHVzLFxuIgotCWJ1ZiArPSAiCS5zZXNzX2xvZ2dlZF9pbgkJCT0gIiArIGZhYnJpY19tb2RfbmFtZSArICJfc2Vzc19sb2dnZWRfaW4sXG4iCiAJYnVmICs9ICIJLnNlc3NfZ2V0X2luZGV4CQkJPSAiICsgZmFicmljX21vZF9uYW1lICsgIl9zZXNzX2dldF9pbmRleCxcbiIKIAlidWYgKz0gIgkuc2Vzc19nZXRfaW5pdGlhdG9yX3NpZAkJPSBOVUxMLFxuIgogCWJ1ZiArPSAiCS53cml0ZV9wZW5kaW5nCQkJPSAiICsgZmFicmljX21vZF9uYW1lICsgIl93cml0ZV9wZW5kaW5nLFxuIgpAQCAtNDAyLDcgKzM5OSw3IEBACiAJYnVmICs9ICIJLnF1ZXVlX2RhdGFfaW4JCQk9ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3F1ZXVlX2RhdGFfaW4sXG4iCiAJYnVmICs9ICIJLnF1ZXVlX3N0YXR1cwkJCT0gIiArIGZhYnJpY19tb2RfbmFtZSArICJfcXVldWVfc3RhdHVzLFxuIgogCWJ1ZiArPSAiCS5xdWV1ZV90bV9yc3AJCQk9ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3F1ZXVlX3RtX3JzcCxcbiIKLQlidWYgKz0gIgkuaXNfc3RhdGVfcmVtb3ZlCQk9ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX2lzX3N0YXRlX3JlbW92ZSxcbiIKKwlidWYgKz0gIgkuYWJvcnRlZF90YXNrCQkJPSAiICsgZmFicmljX21vZF9uYW1lICsgIl9hYm9ydGVkX3Rhc2ssXG4iCiAJYnVmICs9ICIJLypcbiIKIAlidWYgKz0gIgkgKiBTZXR1cCBmdW5jdGlvbiBwb2ludGVycyBmb3IgZ2VuZXJpYyBsb2dpYyBpbiB0YXJnZXRfY29yZV9mYWJyaWNfY29uZmlnZnMuY1xuIgogCWJ1ZiArPSAiCSAqL1xuIgpAQCAtNDI4LDcgKzQyNSw3IEBACiAJYnVmICs9ICIJLypcbiIKIAlidWYgKz0gIgkgKiBSZWdpc3RlciB0aGUgdG9wIGxldmVsIHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHdpdGggVENNIGNvcmVcbiIKIAlidWYgKz0gIgkgKi9cbiIKLQlidWYgKz0gIglmYWJyaWMgPSB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzX2luaXQoVEhJU19NT0RVTEUsIFwiIiArIGZhYnJpY19tb2RfbmFtZVs0Ol0gKyAiXCIpO1xuIgorCWJ1ZiArPSAiCWZhYnJpYyA9IHRhcmdldF9mYWJyaWNfY29uZmlnZnNfaW5pdChUSElTX01PRFVMRSwgXCIiICsgZmFicmljX21vZF9uYW1lICsgIlwiKTtcbiIKIAlidWYgKz0gIglpZiAoSVNfRVJSKGZhYnJpYykpIHtcbiIKIAlidWYgKz0gIgkJcHJpbnRrKEtFUk5fRVJSIFwidGFyZ2V0X2ZhYnJpY19jb25maWdmc19pbml0KCkgZmFpbGVkXFxuXCIpO1xuIgogCWJ1ZiArPSAiCQlyZXR1cm4gUFRSX0VSUihmYWJyaWMpO1xuIgpAQCAtNTk1LDcgKzU5Miw3IEBACiAJCWlmIHJlLnNlYXJjaCgnZ2V0X2ZhYnJpY19uYW1lJywgZm8pOgogCQkJYnVmICs9ICJjaGFyICoiICsgZmFicmljX21vZF9uYW1lICsgIl9nZXRfZmFicmljX25hbWUodm9pZClcbiIKIAkJCWJ1ZiArPSAie1xuIgotCQkJYnVmICs9ICIJcmV0dXJuIFwiIiArIGZhYnJpY19tb2RfbmFtZVs0Ol0gKyAiXCI7XG4iCisJCQlidWYgKz0gIglyZXR1cm4gXCIiICsgZmFicmljX21vZF9uYW1lICsgIlwiO1xuIgogCQkJYnVmICs9ICJ9XG5cbiIKIAkJCWJ1ZmkgKz0gImNoYXIgKiIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX2dldF9mYWJyaWNfbmFtZSh2b2lkKTtcbiIKIAkJCWNvbnRpbnVlCkBAIC04MjAsMjcgKzgxNyw2IEBACiAJCQlidWYgKz0gIn1cblxuIgogCQkJYnVmaSArPSAidm9pZCAiICsgZmFicmljX21vZF9uYW1lICsgIl9jbG9zZV9zZXNzaW9uKHN0cnVjdCBzZV9zZXNzaW9uICopO1xuIgogCi0JCWlmIHJlLnNlYXJjaCgnc3RvcF9zZXNzaW9uXClcKCcsIGZvKToKLQkJCWJ1ZiArPSAidm9pZCAiICsgZmFicmljX21vZF9uYW1lICsgIl9zdG9wX3Nlc3Npb24oc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MsIGludCBzZXNzX3NsZWVwICwgaW50IGNvbm5fc2xlZXApXG4iCi0JCQlidWYgKz0gIntcbiIKLQkJCWJ1ZiArPSAiCXJldHVybjtcbiIKLQkJCWJ1ZiArPSAifVxuXG4iCi0JCQlidWZpICs9ICJ2b2lkICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3N0b3Bfc2Vzc2lvbihzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqLCBpbnQsIGludCk7XG4iCi0KLQkJaWYgcmUuc2VhcmNoKCdmYWxsX2JhY2tfdG9fZXJsMFwpXCgnLCBmbyk6Ci0JCQlidWYgKz0gInZvaWQgIiArIGZhYnJpY19tb2RfbmFtZSArICJfcmVzZXRfbmV4dXMoc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MpXG4iCi0JCQlidWYgKz0gIntcbiIKLQkJCWJ1ZiArPSAiCXJldHVybjtcbiIKLQkJCWJ1ZiArPSAifVxuXG4iCi0JCQlidWZpICs9ICJ2b2lkICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3Jlc2V0X25leHVzKHN0cnVjdCBzZV9zZXNzaW9uICopO1xuIgotCi0JCWlmIHJlLnNlYXJjaCgnc2Vzc19sb2dnZWRfaW5cKVwoJywgZm8pOgotCQkJYnVmICs9ICJpbnQgIiArIGZhYnJpY19tb2RfbmFtZSArICJfc2Vzc19sb2dnZWRfaW4oc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MpXG4iCi0JCQlidWYgKz0gIntcbiIKLQkJCWJ1ZiArPSAiCXJldHVybiAwO1xuIgotCQkJYnVmICs9ICJ9XG5cbiIKLQkJCWJ1ZmkgKz0gImludCAiICsgZmFicmljX21vZF9uYW1lICsgIl9zZXNzX2xvZ2dlZF9pbihzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqKTtcbiIKLQogCQlpZiByZS5zZWFyY2goJ3Nlc3NfZ2V0X2luZGV4XClcKCcsIGZvKToKIAkJCWJ1ZiArPSAidTMyICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3Nlc3NfZ2V0X2luZGV4KHN0cnVjdCBzZV9zZXNzaW9uICpzZV9zZXNzKVxuIgogCQkJYnVmICs9ICJ7XG4iCkBAIC04OTgsMTkgKzg3NCwxOCBAQAogCQkJYnVmaSArPSAiaW50ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3F1ZXVlX3N0YXR1cyhzdHJ1Y3Qgc2VfY21kICopO1xuIgogCiAJCWlmIHJlLnNlYXJjaCgncXVldWVfdG1fcnNwXClcKCcsIGZvKToKLQkJCWJ1ZiArPSAiaW50ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3F1ZXVlX3RtX3JzcChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG4iCisJCQlidWYgKz0gInZvaWQgIiArIGZhYnJpY19tb2RfbmFtZSArICJfcXVldWVfdG1fcnNwKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcbiIKIAkJCWJ1ZiArPSAie1xuIgotCQkJYnVmICs9ICIJcmV0dXJuIDA7XG4iCisJCQlidWYgKz0gIglyZXR1cm47XG4iCiAJCQlidWYgKz0gIn1cblxuIgotCQkJYnVmaSArPSAiaW50ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX3F1ZXVlX3RtX3JzcChzdHJ1Y3Qgc2VfY21kICopO1xuIgorCQkJYnVmaSArPSAidm9pZCAiICsgZmFicmljX21vZF9uYW1lICsgIl9xdWV1ZV90bV9yc3Aoc3RydWN0IHNlX2NtZCAqKTtcbiIKIAotCQlpZiByZS5zZWFyY2goJ2lzX3N0YXRlX3JlbW92ZVwpXCgnLCBmbyk6Ci0JCQlidWYgKz0gImludCAiICsgZmFicmljX21vZF9uYW1lICsgIl9pc19zdGF0ZV9yZW1vdmUoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuIgorCQlpZiByZS5zZWFyY2goJ2Fib3J0ZWRfdGFza1wpXCgnLCBmbyk6CisJCQlidWYgKz0gInZvaWQgIiArIGZhYnJpY19tb2RfbmFtZSArICJfYWJvcnRlZF90YXNrKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcbiIKIAkJCWJ1ZiArPSAie1xuIgotCQkJYnVmICs9ICIJcmV0dXJuIDA7XG4iCisJCQlidWYgKz0gIglyZXR1cm47XG4iCiAJCQlidWYgKz0gIn1cblxuIgotCQkJYnVmaSArPSAiaW50ICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX2lzX3N0YXRlX3JlbW92ZShzdHJ1Y3Qgc2VfY21kICopO1xuIgotCisJCQlidWZpICs9ICJ2b2lkICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiX2Fib3J0ZWRfdGFzayhzdHJ1Y3Qgc2VfY21kICopO1xuIgogCiAJcmV0ID0gcC53cml0ZShidWYpCiAJaWYgcmV0OgpAQCAtMTAxOCwxMSArOTkzLDExIEBACiAJdGNtX21vZF9idWlsZF9rYnVpbGQoZmFicmljX21vZF9kaXIsIGZhYnJpY19tb2RfbmFtZSkKIAl0Y21fbW9kX2J1aWxkX2tjb25maWcoZmFicmljX21vZF9kaXIsIGZhYnJpY19tb2RfbmFtZSkKIAotCWlucHV0ID0gcmF3X2lucHV0KCJXb3VsZCB5b3UgbGlrZSB0byBhZGQgIiArIGZhYnJpY19tb2RfbmFtZSArICJ0byBkcml2ZXJzL3RhcmdldC9NYWtlZmlsZS4uPyBbeWVzLG5vXTogIikKKwlpbnB1dCA9IHJhd19pbnB1dCgiV291bGQgeW91IGxpa2UgdG8gYWRkICIgKyBmYWJyaWNfbW9kX25hbWUgKyAiIHRvIGRyaXZlcnMvdGFyZ2V0L01ha2VmaWxlLi4/IFt5ZXMsbm9dOiAiKQogCWlmIGlucHV0ID09ICJ5ZXMiIG9yIGlucHV0ID09ICJ5IjoKIAkJdGNtX21vZF9hZGRfa2J1aWxkKHRjbV9kaXIsIGZhYnJpY19tb2RfbmFtZSkKIAotCWlucHV0ID0gcmF3X2lucHV0KCJXb3VsZCB5b3UgbGlrZSB0byBhZGQgIiArIGZhYnJpY19tb2RfbmFtZSArICJ0byBkcml2ZXJzL3RhcmdldC9LY29uZmlnLi4/IFt5ZXMsbm9dOiAiKQorCWlucHV0ID0gcmF3X2lucHV0KCJXb3VsZCB5b3UgbGlrZSB0byBhZGQgIiArIGZhYnJpY19tb2RfbmFtZSArICIgdG8gZHJpdmVycy90YXJnZXQvS2NvbmZpZy4uPyBbeWVzLG5vXTogIikKIAlpZiBpbnB1dCA9PSAieWVzIiBvciBpbnB1dCA9PSAieSI6CiAJCXRjbV9tb2RfYWRkX2tjb25maWcodGNtX2RpciwgZmFicmljX21vZF9uYW1lKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvY3B1LWNvb2xpbmctYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vdGhlcm1hbC9jcHUtY29vbGluZy1hcGkudHh0CmluZGV4IGZjYTI0YzkuLjc1M2U0N2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGhlcm1hbC9jcHUtY29vbGluZy1hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGhlcm1hbC9jcHUtY29vbGluZy1hcGkudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBXcml0dGVuIGJ5IEFtaXQgRGFuaWVsIEthY2hoYXAgPGFtaXQua2FjaGhhcEBsaW5hcm8ub3JnPgogCi1VcGRhdGVkOiAxMiBNYXkgMjAxMgorVXBkYXRlZDogNiBKYW4gMjAxNQogCiBDb3B5cmlnaHQgKGMpICAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQoaHR0cDovL3d3dy5zYW1zdW5nLmNvbSkKIApAQCAtMjUsNyArMjUsMTggQEAKIAogICAgY2xpcF9jcHVzOiBjcHVtYXNrIG9mIGNwdXMgd2hlcmUgdGhlIGZyZXF1ZW5jeSBjb25zdHJhaW50cyB3aWxsIGhhcHBlbi4KIAotMS4xLjIgdm9pZCBjcHVmcmVxX2Nvb2xpbmdfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldikKKzEuMS4yIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpvZl9jcHVmcmVxX2Nvb2xpbmdfcmVnaXN0ZXIoCisJc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNsaXBfY3B1cykKKworICAgIFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHJlZ2lzdGVycyB0aGUgY3B1ZnJlcSBjb29saW5nIGRldmljZSB3aXRoCisgICAgdGhlIG5hbWUgInRoZXJtYWwtY3B1ZnJlcS0leCIgbGlua2luZyBpdCB3aXRoIGEgZGV2aWNlIHRyZWUgbm9kZSwgaW4KKyAgICBvcmRlciB0byBiaW5kIGl0IHZpYSB0aGUgdGhlcm1hbCBEVCBjb2RlLiBUaGlzIGFwaSBjYW4gc3VwcG9ydCBtdWx0aXBsZQorICAgIGluc3RhbmNlcyBvZiBjcHVmcmVxIGNvb2xpbmcgZGV2aWNlcy4KKworICAgIG5wOiBwb2ludGVyIHRvIHRoZSBjb29saW5nIGRldmljZSBkZXZpY2UgdHJlZSBub2RlCisgICAgY2xpcF9jcHVzOiBjcHVtYXNrIG9mIGNwdXMgd2hlcmUgdGhlIGZyZXF1ZW5jeSBjb25zdHJhaW50cyB3aWxsIGhhcHBlbi4KKworMS4xLjMgdm9pZCBjcHVmcmVxX2Nvb2xpbmdfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldikKIAogICAgIFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIHRoZSAidGhlcm1hbC1jcHVmcmVxLSV4IiBjb29saW5nIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBkZGI5YWM4Li40ODcxNjM5IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNjk2LDcgKzY5Niw3IEBACiBXOglodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiBTOglTdXBwb3J0ZWQKIEY6CXNvdW5kL3NvYy9ibGFja2Zpbi8qCi0gCisKIEFOQUxPRyBERVZJQ0VTIElOQyBJSU8gRFJJVkVSUwogTToJTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CiBNOglNaWNoYWVsIEhlbm5lcmljaCA8TWljaGFlbC5IZW5uZXJpY2hAYW5hbG9nLmNvbT4KQEAgLTcwOCw2ICs3MDgsMTYgQEAKIEY6CWRyaXZlcnMvc3RhZ2luZy9paW8vKi9hZCoKIEY6CXN0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctYmZpbi10aW1lci5jCiAKK0FORFJPSUQgRFJJVkVSUworTToJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KK006CUFydmUgSGr4bm5lduVnIDxhcnZlQGFuZHJvaWQuY29tPgorTToJUmlsZXkgQW5kcmV3cyA8cmlhbmRyZXdzQGFuZHJvaWQuY29tPgorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dyZWdraC9zdGFnaW5nLmdpdAorTDoJZGV2ZWxAZHJpdmVyZGV2Lm9zdW9zbC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9hbmRyb2lkLworRjoJZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvCisKIEFPQSAoQXBwbGUgT25ib2FyZCBBdWRpbykgQUxTQSBEUklWRVIKIE06CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiBMOglsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwpAQCAtNzI0LDE1ICs3MzQsMTUgQEAKIEY6CWRyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMKIAogQVBQTEUgQkNNNTk3NCBNVUxUSVRPVUNIIERSSVZFUgotTToJSGVucmlrIFJ5ZGJlcmcgPHJ5ZGJlcmdAZXVyb21haWwuc2U+CitNOglIZW5yaWsgUnlkYmVyZyA8cnlkYmVyZ0BiaXRtYXRoLm9yZz4KIEw6CWxpbnV4LWlucHV0QHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAorUzoJT2RkIGZpeGVzCiBGOglkcml2ZXJzL2lucHV0L21vdXNlL2JjbTU5NzQuYwogCiBBUFBMRSBTTUMgRFJJVkVSCi1NOglIZW5yaWsgUnlkYmVyZyA8cnlkYmVyZ0BldXJvbWFpbC5zZT4KK006CUhlbnJpayBSeWRiZXJnIDxyeWRiZXJnQGJpdG1hdGgub3JnPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwotUzoJTWFpbnRhaW5lZAorUzoJT2RkIGZpeGVzCiBGOglkcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKIAogQVBQTEVUQUxLIE5FVFdPUksgTEFZRVIKQEAgLTc1NCwxMyArNzY0LDYgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbWVkaWEvaTJjL2FwdGluYS1wbGwuKgogCi1BUkFTQU4gQ09NUEFDVCBGTEFTSCBQQVRBIENPTlRST0xMRVIKLU06CVZpcmVzaCBLdW1hciA8dmlyZXNoLmxpbnV4QGdtYWlsLmNvbT4KLUw6CWxpbnV4LWlkZUB2Z2VyLmtlcm5lbC5vcmcKLVM6CU1haW50YWluZWQKLUY6CWluY2x1ZGUvbGludXgvcGF0YV9hcmFzYW5fY2ZfZGF0YS5oCi1GOglkcml2ZXJzL2F0YS9wYXRhX2FyYXNhbl9jZi5jCi0KIEFSQyBGUkFNRUJVRkZFUiBEUklWRVIKIE06CUpheWEgS3VtYXIgPGpheWFsa0BpbnR3b3Jrcy5iaXo+CiBTOglNYWludGFpbmVkCkBAIC0yMjU5LDYgKzIyNjIsNyBAQAogQlRSRlMgRklMRSBTWVNURU0KIE06CUNocmlzIE1hc29uIDxjbG1AZmIuY29tPgogTToJSm9zZWYgQmFjaWsgPGpiYWNpa0BmYi5jb20+CitNOglEYXZpZCBTdGVyYmEgPGRzdGVyYmFAc3VzZS5jej4KIEw6CWxpbnV4LWJ0cmZzQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2J0cmZzLndpa2kua2VybmVsLm9yZy8KIFE6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LWJ0cmZzL2xpc3QvCkBAIC0yMzQ1LDcgKzIzNDksOCBAQAogTToJT2xpdmVyIEhhcnRrb3BwIDxzb2NrZXRjYW5AaGFydGtvcHAubmV0PgogTDoJbGludXgtY2FuQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2dpdG9yaW91cy5vcmcvbGludXgtY2FuCi1UOglnaXQgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9saW51eC1jYW4vbGludXgtY2FuLW5leHQuZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21rbC9saW51eC1jYW4uZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21rbC9saW51eC1jYW4tbmV4dC5naXQKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4udHh0CiBGOgluZXQvY2FuLwpAQCAtMjM2MCw3ICsyMzY1LDggQEAKIE06CU1hcmMgS2xlaW5lLUJ1ZGRlIDxta2xAcGVuZ3V0cm9uaXguZGU+CiBMOglsaW51eC1jYW5Admdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vZ2l0b3Jpb3VzLm9yZy9saW51eC1jYW4KLVQ6CWdpdCBnaXQ6Ly9naXRvcmlvdXMub3JnL2xpbnV4LWNhbi9saW51eC1jYW4tbmV4dC5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWtsL2xpbnV4LWNhbi5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWtsL2xpbnV4LWNhbi1uZXh0LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9uZXQvY2FuLwogRjoJaW5jbHVkZS9saW51eC9jYW4vZGV2LmgKQEAgLTMxODIsNyArMzE4OCw3IEBACiBROglodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtZG1hZW5naW5lL2xpc3QvCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2RtYS8KLUY6CWluY2x1ZGUvbGludXgvZG1hKgorRjoJaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaAogRjoJRG9jdW1lbnRhdGlvbi9kbWFlbmdpbmUvCiBUOglnaXQgZ2l0Oi8vZ2l0LmluZnJhZGVhZC5vcmcvdXNlcnMvdmtvdWwvc2xhdmUtZG1hLmdpdAogCkBAIC00NzQ4LDIwICs0NzU0LDIwIEBACiBGOglkcml2ZXJzL3Njc2kvaXByLioKIAogSUJNIFBvd2VyIFZpcnR1YWwgRXRoZXJuZXQgRGV2aWNlIERyaXZlcgotTToJU2FudGlhZ28gTGVvbiA8c2FudGlsQGxpbnV4LnZuZXQuaWJtLmNvbT4KK006CVRob21hcyBGYWxjb24gPHRsZmFsY29uQGxpbnV4LnZuZXQuaWJtLmNvbT4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguKgogCiBJQk0gUG93ZXIgVmlydHVhbCBTQ1NJIERldmljZSBEcml2ZXJzCi1NOglOYXRoYW4gRm9udGVub3QgPG5mb250QGxpbnV4LnZuZXQuaWJtLmNvbT4KK006CVR5cmVsIERhdHd5bGVyIDx0eXJlbGRAbGludXgudm5ldC5pYm0uY29tPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpKgogRjoJZHJpdmVycy9zY3NpL2libXZzY3NpL3Zpb3NycC5oCiAKIElCTSBQb3dlciBWaXJ0dWFsIEZDIERldmljZSBEcml2ZXJzCi1NOglCcmlhbiBLaW5nIDxicmtpbmdAbGludXgudm5ldC5pYm0uY29tPgorTToJVHlyZWwgRGF0d3lsZXIgPHR5cmVsZEBsaW51eC52bmV0LmlibS5jb20+CiBMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjKgpAQCAtNDkyOSw3ICs0OTM1LDYgQEAKIAogSU5QVVQgKEtFWUJPQVJELCBNT1VTRSwgSk9ZU1RJQ0ssIFRPVUNIU0NSRUVOKSBEUklWRVJTCiBNOglEbWl0cnkgVG9yb2tob3YgPGRtaXRyeS50b3Jva2hvdkBnbWFpbC5jb20+Ci1NOglEbWl0cnkgVG9yb2tob3YgPGR0b3JAbWFpbC5ydT4KIEw6CWxpbnV4LWlucHV0QHZnZXIua2VybmVsLm9yZwogUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtaW5wdXQvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZHRvci9pbnB1dC5naXQKQEAgLTQ5NDAsMTggKzQ5NDUsMjcgQEAKIEY6CWluY2x1ZGUvbGludXgvaW5wdXQvCiAKIElOUFVUIE1VTFRJVE9VQ0ggKE1UKSBQUk9UT0NPTAotTToJSGVucmlrIFJ5ZGJlcmcgPHJ5ZGJlcmdAZXVyb21haWwuc2U+CitNOglIZW5yaWsgUnlkYmVyZyA8cnlkYmVyZ0BiaXRtYXRoLm9yZz4KIEw6CWxpbnV4LWlucHV0QHZnZXIua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9yeWRiZXJnL2lucHV0LW10LmdpdAotUzoJTWFpbnRhaW5lZAorUzoJT2RkIGZpeGVzCiBGOglEb2N1bWVudGF0aW9uL2lucHV0L211bHRpLXRvdWNoLXByb3RvY29sLnR4dAogRjoJZHJpdmVycy9pbnB1dC9pbnB1dC1tdC5jCiBLOglcYihBQlN8U1lOKV9NVF8KIAorSU5URUwgQVNvQyBCRFcvSFNXIERSSVZFUlMKK006CUppZSBZYW5nIDx5YW5nLmppZUBsaW51eC5pbnRlbC5jb20+CitMOglhbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJc291bmQvc29jL2ludGVsL3NzdC1oYXN3ZWxsKgorRjoJc291bmQvc29jL2ludGVsL3NzdC1kc3AqCitGOglzb3VuZC9zb2MvaW50ZWwvc3N0LWZpcm13YXJlLmMKK0Y6CXNvdW5kL3NvYy9pbnRlbC9icm9hZHdlbGwuYworRjoJc291bmQvc29jL2ludGVsL2hhc3dlbGwuYworCiBJTlRFTCBDNjAwIFNFUklFUyBTQVMgQ09OVFJPTExFUiBEUklWRVIKIE06CUludGVsIFNDVSBMaW51eCBzdXBwb3J0IDxpbnRlbC1saW51eC1zY3VAaW50ZWwuY29tPgogTToJQXJ0dXIgUGFzemtpZXdpY3ogPGFydHVyLnBhc3praWV3aWN6QGludGVsLmNvbT4KLU06CURhdmUgSmlhbmcgPGRhdmUuamlhbmdAaW50ZWwuY29tPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQuY29kZS5zZi5uZXQvcC9pbnRlbC1zYXMvaXNjaQogUzoJU3VwcG9ydGVkCkBAIC01Mjc5LDYgKzUyOTMsMTUgQEAKIFE6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LXJkbWEvbGlzdC8KIEY6CWRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci8KIAorSVNDU0kgRVhURU5TSU9OUyBGT1IgUkRNQSAoSVNFUikgVEFSR0VUCitNOglTYWdpIEdyaW1iZXJnIDxzYWdpZ0BtZWxsYW5veC5jb20+CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L25hYi90YXJnZXQtcGVuZGluZy5naXQgbWFzdGVyCitMOglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZworTDoJdGFyZ2V0LWRldmVsQHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCitXOglodHRwOi8vd3d3LmxpbnV4LWlzY3NpLm9yZworRjoJZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VydAorCiBJU0ROIFNVQlNZU1RFTQogTToJS2Fyc3RlbiBLZWlsIDxpc2RuQGxpbnV4LXBpbmdpLmRlPgogTDoJaXNkbjRsaW51eEBsaXN0c2Vydi5pc2RuNGxpbnV4LmRlIChzdWJzY3JpYmVycy1vbmx5KQpAQCAtNTY5Myw2ICs1NzE2LDQ5IEBACiBGOglpbmNsdWRlL2xpbnV4L2xndWVzdCouaAogRjoJdG9vbHMvbGd1ZXN0LwogCitMSUJBVEEgU1VCU1lTVEVNIChTZXJpYWwgYW5kIFBhcmFsbGVsIEFUQSBkcml2ZXJzKQorTToJVGVqdW4gSGVvIDx0akBrZXJuZWwub3JnPgorTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9saWJhdGEuZ2l0CitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL2F0YS8KK0Y6CWluY2x1ZGUvbGludXgvYXRhLmgKK0Y6CWluY2x1ZGUvbGludXgvbGliYXRhLmgKKworTElCQVRBIFBBVEEgQVJBU0FOIENPTVBBQ1QgRkxBU0ggQ09OVFJPTExFUgorTToJVmlyZXNoIEt1bWFyIDx2aXJlc2gubGludXhAZ21haWwuY29tPgorTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9saWJhdGEuZ2l0CitTOglNYWludGFpbmVkCitGOglpbmNsdWRlL2xpbnV4L3BhdGFfYXJhc2FuX2NmX2RhdGEuaAorRjoJZHJpdmVycy9hdGEvcGF0YV9hcmFzYW5fY2YuYworCitMSUJBVEEgUEFUQSBEUklWRVJTCitNOglCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6IDxiLnpvbG5pZXJraWVAc2Ftc3VuZy5jb20+CitNOglUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CitMOglsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RqL2xpYmF0YS5naXQKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvYXRhL3BhdGFfKi5jCitGOglkcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCisKK0xJQkFUQSBTQVRBIEFIQ0kgUExBVEZPUk0gZGV2aWNlcyBzdXBwb3J0CitNOglIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorTToJVGVqdW4gSGVvIDx0akBrZXJuZWwub3JnPgorTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9saWJhdGEuZ2l0CitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL2F0YS9haGNpX3BsYXRmb3JtLmMKK0Y6CWRyaXZlcnMvYXRhL2xpYmFoY2lfcGxhdGZvcm0uYworRjoJaW5jbHVkZS9saW51eC9haGNpX3BsYXRmb3JtLmgKKworTElCQVRBIFNBVEEgUFJPTUlTRSBUWDIvVFg0IENPTlRST0xMRVIgRFJJVkVSCitNOglNaWthZWwgUGV0dGVyc3NvbiA8bWlrcGVsaW51eEBnbWFpbC5jb20+CitMOglsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RqL2xpYmF0YS5naXQKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS4qCisKIExJQkxPQ0tERVAKIE06CVNhc2hhIExldmluIDxzYXNoYS5sZXZpbkBvcmFjbGUuY29tPgogUzoJTWFpbnRhaW5lZApAQCAtNjk3NywxNCArNzA0MywxMiBAQAogTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAbGluYXJvLm9yZz4KIE06CVJvYiBIZXJyaW5nIDxyb2JoK2R0QGtlcm5lbC5vcmc+CiBMOglkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL2ZkdC5zZWNyZXRsYWIuY2EKLVQ6CWdpdCBnaXQ6Ly9naXQuc2VjcmV0bGFiLmNhL2dpdC9saW51eC0yLjYuZ2l0CitXOglodHRwOi8vd3d3LmRldmljZXRyZWUub3JnLworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9nbGlrZWx5L2xpbnV4LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9vZi8KIEY6CWluY2x1ZGUvbGludXgvb2YqLmgKIEY6CXNjcmlwdHMvZHRjLwotSzoJb2ZfZ2V0X3Byb3BlcnR5Ci1LOglvZl9tYXRjaF90YWJsZQogCiBPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUUgQklORElOR1MKIE06CVJvYiBIZXJyaW5nIDxyb2JoK2R0QGtlcm5lbC5vcmc+CkBAIC03MjI5LDcgKzcyOTMsNyBAQAogRjoJZHJpdmVycy9wY2kvaG9zdC8qbGF5ZXJzY2FwZSoKIAogUENJIERSSVZFUiBGT1IgSU1YNgotTToJUmljaGFyZCBaaHUgPHI2NTAzN0BmcmVlc2NhbGUuY29tPgorTToJUmljaGFyZCBaaHUgPFJpY2hhcmQuWmh1QGZyZWVzY2FsZS5jb20+CiBNOglMdWNhcyBTdGFjaCA8bC5zdGFjaEBwZW5ndXRyb25peC5kZT4KIEw6CWxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCkBAIC03Mzk5LDYgKzc0NjMsNyBAQAogUElOIENPTlRST0wgU1VCU1lTVEVNCiBNOglMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CiBMOglsaW51eC1ncGlvQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saW51c3cvbGludXgtcGluY3RybC5naXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGluY3RybC8KIEY6CWluY2x1ZGUvbGludXgvcGluY3RybC8KQEAgLTc1NjYsMTIgKzc2MzEsNiBAQAogUzoJT2Jzb2xldGUKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvCiAKLVBST01JU0UgU0FUQSBUWDIvVFg0IENPTlRST0xMRVIgTElCQVRBIERSSVZFUgotTToJTWlrYWVsIFBldHRlcnNzb24gPG1pa3BlbGludXhAZ21haWwuY29tPgotTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLioKLQogUFMzIE5FVFdPUksgU1VQUE9SVAogTToJR2VvZmYgTGV2YW5kIDxnZW9mZkBpbmZyYWRlYWQub3JnPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpAQCAtNzczNyw4ICs3Nzk2LDcgQEAKIEY6CWRyaXZlcnMvc2NzaS9xbGEyeHh4LwogCiBRTE9HSUMgUUxBNFhYWCBpU0NTSSBEUklWRVIKLU06CVZpa2FzIENoYXVkaGFyeSA8dmlrYXMuY2hhdWRoYXJ5QHFsb2dpYy5jb20+Ci1NOglpc2NzaS1kcml2ZXJAcWxvZ2ljLmNvbQorTToJUUxvZ2ljLVN0b3JhZ2UtVXBzdHJlYW1AcWxvZ2ljLmNvbQogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJRG9jdW1lbnRhdGlvbi9zY3NpL0xJQ0VOU0UucWxhNHh4eApAQCAtODU0NiwyNSArODYwNCw2IEBACiBGOglkcml2ZXJzL21pc2MvcGhhbnRvbS5jCiBGOglpbmNsdWRlL3VhcGkvbGludXgvcGhhbnRvbS5oCiAKLVNFUklBTCBBVEEgKFNBVEEpIFNVQlNZU1RFTQotTToJVGVqdW4gSGVvIDx0akBrZXJuZWwub3JnPgotTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZwotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9saWJhdGEuZ2l0Ci1TOglTdXBwb3J0ZWQKLUY6CWRyaXZlcnMvYXRhLwotRjoJaW5jbHVkZS9saW51eC9hdGEuaAotRjoJaW5jbHVkZS9saW51eC9saWJhdGEuaAotCi1TRVJJQUwgQVRBIEFIQ0kgUExBVEZPUk0gZGV2aWNlcyBzdXBwb3J0Ci1NOglIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgotTToJVGVqdW4gSGVvIDx0akBrZXJuZWwub3JnPgotTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZwotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9saWJhdGEuZ2l0Ci1TOglTdXBwb3J0ZWQKLUY6CWRyaXZlcnMvYXRhL2FoY2lfcGxhdGZvcm0uYwotRjoJZHJpdmVycy9hdGEvbGliYWhjaV9wbGF0Zm9ybS5jCi1GOglpbmNsdWRlL2xpbnV4L2FoY2lfcGxhdGZvcm0uaAotCiBTRVJWRVIgRU5HSU5FUyAxMEdicHMgaVNDU0kgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgogTToJSmF5YW1vaGFuIEthbGxpY2thbCA8amF5YW1vaGFuLmthbGxpY2thbEBlbXVsZXguY29tPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTk1MzMsNyArOTU3Miw4IEBACiBUSSBCQU5ER0FQIEFORCBUSEVSTUFMIERSSVZFUgogTToJRWR1YXJkbyBWYWxlbnRpbiA8ZWR1YmV6dmFsQGdtYWlsLmNvbT4KIEw6CWxpbnV4LXBtQHZnZXIua2VybmVsLm9yZwotUzoJU3VwcG9ydGVkCitMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy90aGVybWFsL3RpLXNvYy10aGVybWFsLwogCiBUSSBDTE9DSyBEUklWRVIKQEAgLTEwMTQ2LDYgKzEwMTg2LDcgQEAKIE06CSJIYW5zIEouIEtvY2giIDxoamtAaGFuc2prb2NoLmRlPgogTToJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KIFM6CU1haW50YWluZWQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ3JlZ2toL2NoYXItbWlzYy5naXQKIEY6CURvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbAogRjoJZHJpdmVycy91aW8vCiBGOglpbmNsdWRlL2xpbnV4L3VpbyouaApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBiMWMzMjU0Li5jOGUxN2MwIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAzCiBQQVRDSExFVkVMID0gMTkKIFNVQkxFVkVMID0gMAotRVhUUkFWRVJTSU9OID0gLXJjMQorRVhUUkFWRVJTSU9OID0gLXJjNwogTkFNRSA9IERpc2Vhc2VkIE5ld3QKIAogIyAqRE9DVU1FTlRBVElPTioKQEAgLTM5MSw2ICszOTEsNyBAQAogIyBOZWVkZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBPPSBvcHRpb24KIExJTlVYSU5DTFVERSAgICA6PSBcCiAJCS1JJChzcmN0cmVlKS9hcmNoLyQoaGRyLWFyY2gpL2luY2x1ZGUgXAorCQktSWFyY2gvJChoZHItYXJjaCkvaW5jbHVkZS9nZW5lcmF0ZWQvdWFwaSBcCiAJCS1JYXJjaC8kKGhkci1hcmNoKS9pbmNsdWRlL2dlbmVyYXRlZCBcCiAJCSQoaWYgJChLQlVJTERfU1JDKSwgLUkkKHNyY3RyZWUpL2luY2x1ZGUpIFwKIAkJLUlpbmNsdWRlIFwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKaW5kZXggMDc2YzM1Yy4uOThhMTUyNSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKQEAgLTI4NSw4ICsyODUsMTIgQEAKIAkJCWlmIChyLT5wYXJlbnQgfHwgIXItPnN0YXJ0IHx8ICFyLT5mbGFncykKIAkJCQljb250aW51ZTsKIAkJCWlmIChwY2lfaGFzX2ZsYWcoUENJX1BST0JFX09OTFkpIHx8Ci0JCQkgICAgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9QQ0lfRklYRUQpKQotCQkJCXBjaV9jbGFpbV9yZXNvdXJjZShkZXYsIGkpOworCQkJICAgIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfUENJX0ZJWEVEKSkgeworCQkJCWlmIChwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpKSA9PSAwKQorCQkJCQljb250aW51ZTsKKworCQkJCXBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LCBpKTsKKwkJCX0KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9tbS9mYXVsdC5jIGIvYXJjaC9hbHBoYS9tbS9mYXVsdC5jCmluZGV4IDk4ODM4YTAuLjlkMGFjMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvbW0vZmF1bHQuYworKysgYi9hcmNoL2FscGhhL21tL2ZhdWx0LmMKQEAgLTE1Niw2ICsxNTYsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvbW0vZmF1bHQuYyBiL2FyY2gvYXJjL21tL2ZhdWx0LmMKaW5kZXggNmY3ZTNhNi4uNTYzY2IyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvbW0vZmF1bHQuYworKysgYi9hcmNoL2FyYy9tbS9mYXVsdC5jCkBAIC0xNjEsNiArMTYxLDggQEAKIAogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJZ290byBvdXRfb2ZfbWVtb3J5OworCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJZ290byBiYWRfYXJlYTsKIAllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJZ290byBkb19zaWdidXM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtZGIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMKaW5kZXggMTQ2NjU4MC4uNzBiMTk0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMKQEAgLTIwMywyNyArMjAzLDMgQEAKIAkJY29tcGF0aWJsZSA9ICJsaW51eCxzcGRpZi1kaXIiOwogCX07CiB9OwotCi0mcGluY3RybCB7Ci0JLyoKLQkgKiBUaGVzZSBwaW5zIG1pZ2h0IGJlIG11eGVkIGFzIEkyUyBieQotCSAqIHRoZSBib290bG9hZGVyLCBidXQgaXQgY29uZmxpY3RzCi0JICogd2l0aCB0aGUgcmVhbCBJMlMgcGlucyB0aGF0IGFyZQotCSAqIG11eGVkIHVzaW5nIGkyc19waW5zLiBXZSBtdXN0IG11eAotCSAqIHRob3NlIHBpbnMgdG8gYSBmdW5jdGlvbiBvdGhlciB0aGFuCi0JICogSTJTLgotCSAqLwotCXBpbmN0cmwtMCA9IDwmaG9nX3BpbnMxICZob2dfcGluczI+OwotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0KLQlob2dfcGluczE6IGhvZy1waW5zMSB7Ci0JCW1hcnZlbGwscGlucyA9ICJtcHA2IiwgICJtcHA4IiwgIm1wcDEwIiwKLQkJCSAgICAgICAibXBwMTIiLCAibXBwMTMiOwotCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCX07Ci0KLQlob2dfcGluczI6IGhvZy1waW5zMiB7Ci0JCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDciLCAibXBwOSI7Ci0JCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKLQl9OwotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05MjYzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOTI2My5kdHNpCmluZGV4IDE0Njc3NTAuLmU4YzZjNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05MjYzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjMuZHRzaQpAQCAtOTUzLDYgKzk1Myw4IEBACiAJCQlpbnRlcnJ1cHRzID0gPDI2IElSUV9UWVBFX0xFVkVMX0hJR0ggMz47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZiPjsKKwkJCWNsb2NrcyA9IDwmbGNkX2Nsaz4sIDwmbGNkX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJsY2RjX2NsayIsICJoY2xrIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLW1hcnZlbGwtZG1wLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLW1hcnZlbGwtZG1wLmR0cwppbmRleCAyOGU3ZTIwLi5hOThhYzFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS1tYXJ2ZWxsLWRtcC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEtbWFydmVsbC1kbXAuZHRzCkBAIC02NSw2ICs2NSw4IEBACiB9OwogCiAmc2RoY2kyIHsKKwlicm9rZW4tY2Q7CisJYnVzLXdpZHRoID0gPDg+OwogCW5vbi1yZW1vdmFibGU7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS5kdHNpCmluZGV4IDM1MjUzYzkuLmUyZjYxZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEuZHRzaQpAQCAtODMsNyArODMsOCBAQAogCQkJY29tcGF0aWJsZSA9ICJtcnZsLHB4YXYzLW1tYyI7CiAJCQlyZWcgPSA8MHhhYjEwMDAgMHgyMDA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1NESU8xWElOPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9ORkNfRUNDPiwgPCZjaGlwIENMS0lEX05GQz47CisJCQljbG9jay1uYW1lcyA9ICJpbyIsICJjb3JlIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKQEAgLTM0OCwzNiArMzQ5LDYgQEAKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OwogCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJfTsKLQotCQkJZ3BpbzQ6IGdwaW9ANTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKLQkJCQlyZWcgPSA8MHg1MDAwIDB4NDAwPjsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQkJCXBvcnRlOiBncGlvLXBvcnRANCB7Ci0JCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKLQkJCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQkJc25wcyxuci1ncGlvcyA9IDwzMj47Ci0JCQkJCXJlZyA9IDwwPjsKLQkJCQl9OwotCQkJfTsKLQotCQkJZ3BpbzU6IGdwaW9AYzAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKLQkJCQlyZWcgPSA8MHhjMDAwIDB4NDAwPjsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQkJCXBvcnRmOiBncGlvLXBvcnRANSB7Ci0JCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKLQkJCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQkJc25wcyxuci1ncGlvcyA9IDwzMj47Ci0JCQkJCXJlZyA9IDwwPjsKLQkJCQl9OwotCQkJfTsKIAkJfTsKIAogCQljaGlwOiBjaGlwLWNvbnRyb2xAZWEwMDAwIHsKQEAgLTQ2Niw2ICs0MzcsMjEgQEAKIAkJCXJhbmdlcyA9IDwwIDB4ZmMwMDAwIDB4MTAwMDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc2ljPjsKIAorCQkJc21fZ3BpbzE6IGdwaW9ANTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi1ncGlvIjsKKwkJCQlyZWcgPSA8MHg1MDAwIDB4NDAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRmOiBncGlvLXBvcnRANSB7CisJCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJc25wcyxuci1ncGlvcyA9IDwzMj47CisJCQkJCXJlZyA9IDwwPjsKKwkJCQl9OworCQkJfTsKKwogCQkJaTJjMjogaTJjQDcwMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkyYyI7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC01MTYsNiArNTAyLDIxIEBACiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKKwkJCXNtX2dwaW8wOiBncGlvQGMwMDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3BpbyI7CisJCQkJcmVnID0gPDB4YzAwMCAweDQwMD47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0ZTogZ3Bpby1wb3J0QDQgeworCQkJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLWdwaW8tcG9ydCI7CisJCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJCXNucHMsbnItZ3Bpb3MgPSA8MzI+OworCQkJCQlyZWcgPSA8MD47CisJCQkJfTsKKwkJCX07CisKIAkJCXN5c2N0cmw6IHBpbi1jb250cm9sbGVyQGQwMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4ycS1zeXN0ZW0tY3RybCI7CiAJCQkJcmVnID0gPDB4ZDAwMCAweDEwMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9kcmE3LWV2bS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3LWV2bS5kdHMKaW5kZXggMTBiNzI1Yy4uYWQ0MTE4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTctZXZtLmR0cwpAQCAtNDk5LDIzICs0OTksMjMgQEAKIAkJfTsKIAkJcGFydGl0aW9uQDUgewogCQkJbGFiZWwgPSAiUVNQSS51LWJvb3Qtc3BsLW9zIjsKLQkJCXJlZyA9IDwweDAwMTQwMDAwIDB4MDAwMTAwMDA+OworCQkJcmVnID0gPDB4MDAxNDAwMDAgMHgwMDA4MDAwMD47CiAJCX07CiAJCXBhcnRpdGlvbkA2IHsKIAkJCWxhYmVsID0gIlFTUEkudS1ib290LWVudiI7Ci0JCQlyZWcgPSA8MHgwMDE1MDAwMCAweDAwMDEwMDAwPjsKKwkJCXJlZyA9IDwweDAwMWMwMDAwIDB4MDAwMTAwMDA+OwogCQl9OwogCQlwYXJ0aXRpb25ANyB7CiAJCQlsYWJlbCA9ICJRU1BJLnUtYm9vdC1lbnYuYmFja3VwMSI7Ci0JCQlyZWcgPSA8MHgwMDE2MDAwMCAweDAwMTAwMDA+OworCQkJcmVnID0gPDB4MDAxZDAwMDAgMHgwMDEwMDAwPjsKIAkJfTsKIAkJcGFydGl0aW9uQDggewogCQkJbGFiZWwgPSAiUVNQSS5rZXJuZWwiOwotCQkJcmVnID0gPDB4MDAxNzAwMDAgMHgwODAwMDAwPjsKKwkJCXJlZyA9IDwweDAwMWUwMDAwIDB4MDgwMDAwMD47CiAJCX07CiAJCXBhcnRpdGlvbkA5IHsKIAkJCWxhYmVsID0gIlFTUEkuZmlsZS1zeXN0ZW0iOwotCQkJcmVnID0gPDB4MDA5NzAwMDAgMHgwMTY5MDAwMD47CisJCQlyZWcgPSA8MHgwMDllMDAwMCAweDAxNjIwMDAwPjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcuZHRzaQppbmRleCAyMjc3MWJjLi42M2Y4YjAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9kcmE3LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy5kdHNpCkBAIC0xMjU3LDYgKzEyNTcsOCBAQAogCQkJCXR4LWZpZm8tcmVzaXplOwogCQkJCW1heGltdW0tc3BlZWQgPSAic3VwZXItc3BlZWQiOwogCQkJCWRyX21vZGUgPSAib3RnIjsKKwkJCQlzbnBzLGRpc191M19zdXNwaHlfcXVpcms7CisJCQkJc25wcyxkaXNfdTJfc3VzcGh5X3F1aXJrOwogCQkJfTsKIAkJfTsKIApAQCAtMTI3OCw2ICsxMjgwLDggQEAKIAkJCQl0eC1maWZvLXJlc2l6ZTsKIAkJCQltYXhpbXVtLXNwZWVkID0gImhpZ2gtc3BlZWQiOwogCQkJCWRyX21vZGUgPSAib3RnIjsKKwkJCQlzbnBzLGRpc191M19zdXNwaHlfcXVpcms7CisJCQkJc25wcyxkaXNfdTJfc3VzcGh5X3F1aXJrOwogCQkJfTsKIAkJfTsKIApAQCAtMTI5OSw2ICsxMzAzLDggQEAKIAkJCQl0eC1maWZvLXJlc2l6ZTsKIAkJCQltYXhpbXVtLXNwZWVkID0gImhpZ2gtc3BlZWQiOwogCQkJCWRyX21vZGUgPSAib3RnIjsKKwkJCQlzbnBzLGRpc191M19zdXNwaHlfcXVpcms7CisJCQkJc25wcyxkaXNfdTJfc3VzcGh5X3F1aXJrOwogCQkJfTsKIAkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpCmluZGV4IDBhMjI5ZmMuLmQ3NWM4OWQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpCkBAIC03MzYsNyArNzM2LDcgQEAKIAogCWRwX3BoeTogdmlkZW8tcGh5QDEwMDQwNzIwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtZHAtdmlkZW8tcGh5IjsKLQkJcmVnID0gPDB4MTAwNDA3MjAgND47CisJCXNhbXN1bmcscG11LXN5c2NvbiA9IDwmcG11X3N5c3RlbV9jb250cm9sbGVyPjsKIAkJI3BoeS1jZWxscyA9IDwwPjsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLWFybmRhbGUtb2N0YS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLWFybmRhbGUtb2N0YS5kdHMKaW5kZXggYWE3YTdkNy4uZGIyYzFjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC1hcm5kYWxlLW9jdGEuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtYXJuZGFsZS1vY3RhLmR0cwpAQCAtMzcyLDMgKzM3Miw3IEBACiAmdXNiZHJkX2R3YzNfMSB7CiAJZHJfbW9kZSA9ICJob3N0IjsKIH07CisKKyZjY2kgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC5kdHNpCmluZGV4IDUxN2U1MGYuLjZkMzhmOGJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC5kdHNpCkBAIC0xMjAsNyArMTIwLDcgQEAKIAkJfTsKIAl9OwogCi0JY2NpQDEwZDIwMDAwIHsKKwljY2k6IGNjaUAxMGQyMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGNjaS00MDAiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CkBAIC01MDMsOCArNTAzLDggQEAKIAl9OwogCiAJZHBfcGh5OiB2aWRlby1waHlAMTAwNDA3MjggewotCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC1kcC12aWRlby1waHkiOwotCQlyZWcgPSA8MHgxMDA0MDcyOCA0PjsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MjAtZHAtdmlkZW8tcGh5IjsKKwkJc2Ftc3VuZyxwbXUtc3lzY29uID0gPCZwbXVfc3lzdGVtX2NvbnRyb2xsZXI+OwogCQkjcGh5LWNlbGxzID0gPDA+OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXgyNS5kdHNpCmluZGV4IDU4ZDNjM2MuLmU0ZDNhZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjUuZHRzaQpAQCAtMTYyLDcgKzE2Miw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjUtY3NwaSIsICJmc2wsaW14MzUtY3NwaSI7CiAJCQkJcmVnID0gPDB4NDNmYTQwMDAgMHg0MDAwPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgNjI+LCA8JmNsa3MgNjI+OworCQkJCWNsb2NrcyA9IDwmY2xrcyA3OD4sIDwmY2xrcyA3OD47CiAJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7CiAJCQkJaW50ZXJydXB0cyA9IDwxND47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTM2OSw3ICszNjksNyBAQAogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDI1LXB3bSIsICJmc2wsaW14MjctcHdtIjsKIAkJCQkjcHdtLWNlbGxzID0gPDI+OwogCQkJCXJlZyA9IDwweDUzZmEwMDAwIDB4NDAwMD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIDEwNj4sIDwmY2xrcyAzNj47CisJCQkJY2xvY2tzID0gPCZjbGtzIDEwNj4sIDwmY2xrcyA1Mj47CiAJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7CiAJCQkJaW50ZXJydXB0cyA9IDwzNj47CiAJCQl9OwpAQCAtMzg4LDcgKzM4OCw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjUtcHdtIiwgImZzbCxpbXgyNy1wd20iOwogCQkJCSNwd20tY2VsbHMgPSA8Mj47CiAJCQkJcmVnID0gPDB4NTNmYTgwMDAgMHg0MDAwPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgMTA3PiwgPCZjbGtzIDM2PjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgMTA3PiwgPCZjbGtzIDUyPjsKIAkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAicGVyIjsKIAkJCQlpbnRlcnJ1cHRzID0gPDQxPjsKIAkJCX07CkBAIC00MjksNyArNDI5LDcgQEAKIAkJCXB3bTQ6IHB3bUA1M2ZjODAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjUtcHdtIiwgImZzbCxpbXgyNy1wd20iOwogCQkJCXJlZyA9IDwweDUzZmM4MDAwIDB4NDAwMD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIDEwOD4sIDwmY2xrcyAzNj47CisJCQkJY2xvY2tzID0gPCZjbGtzIDEwOD4sIDwmY2xrcyA1Mj47CiAJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7CiAJCQkJaW50ZXJydXB0cyA9IDw0Mj47CiAJCQl9OwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjUtcHdtIiwgImZzbCxpbXgyNy1wd20iOwogCQkJCSNwd20tY2VsbHMgPSA8Mj47CiAJCQkJcmVnID0gPDB4NTNmZTAwMDAgMHg0MDAwPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgMTA1PiwgPCZjbGtzIDM2PjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgMTA1PiwgPCZjbGtzIDUyPjsKIAkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAicGVyIjsKIAkJCQlpbnRlcnJ1cHRzID0gPDI2PjsKIAkJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg1MS1iYWJiYWdlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLWJhYmJhZ2UuZHRzCmluZGV4IDU2NTY5Y2UuLjY0OWJlZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLWJhYmJhZ2UuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLWJhYmJhZ2UuZHRzCkBAIC0xMjcsMjQgKzEyNywxMiBAQAogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAKLQkJcmVnX3VzYmgxX3ZidXM6IHJlZ3VsYXRvckAwIHsKLQkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNiaDFyZWc+OwotCQkJcmVnID0gPDA+OwotCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiaDFfdmJ1cyI7Ci0JCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKLQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OwotCQkJZ3BpbyA9IDwmZ3BpbzIgNSBHUElPX0FDVElWRV9ISUdIPjsKLQkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKLQkJfTsKLQotCQlyZWdfdXNib3RnX3ZidXM6IHJlZ3VsYXRvckAxIHsKKwkJcmVnX2h1Yl9yZXNldDogcmVndWxhdG9yQDAgewogCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2JvdGdyZWc+OwotCQkJcmVnID0gPDE+OwotCQkJcmVndWxhdG9yLW5hbWUgPSAidXNib3RnX3ZidXMiOworCQkJcmVnID0gPDA+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiaHViX3Jlc2V0IjsKIAkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OwogCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CiAJCQlncGlvID0gPCZncGlvMSA3IEdQSU9fQUNUSVZFX0hJR0g+OwpAQCAtMTc2LDYgKzE2NCw3IEBACiAJCQlyZWcgPSA8MD47CiAJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfRFVNTVk+OwogCQkJY2xvY2stbmFtZXMgPSAibWFpbl9jbGsiOworCQkJcmVzZXQtZ3Bpb3MgPSA8JmdwaW8yIDUgR1BJT19BQ1RJVkVfTE9XPjsKIAkJfTsKIAl9OwogfTsKQEAgLTQxOSw3ICs0MDgsNyBAQAogJnVzYmgxIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2JoMT47Ci0JdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2JoMV92YnVzPjsKKwl2YnVzLXN1cHBseSA9IDwmcmVnX2h1Yl9yZXNldD47CiAJZnNsLHVzYnBoeSA9IDwmdXNiaDFwaHk+OwogCXBoeV90eXBlID0gInVscGkiOwogCXN0YXR1cyA9ICJva2F5IjsKQEAgLTQyOSw3ICs0MTgsNiBAQAogCWRyX21vZGUgPSAib3RnIjsKIAlkaXNhYmxlLW92ZXItY3VycmVudDsKIAlwaHlfdHlwZSA9ICJ1dG1pX3dpZGUiOwotCXZidXMtc3VwcGx5ID0gPCZyZWdfdXNib3RnX3ZidXM+OwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwuZHRzaQppbmRleCA0ZmMwM2I3Li4yMTA5ZDA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC5kdHNpCkBAIC0zMzUsOCArMzM1LDggQEAKIAkJCXZwdTogdnB1QDAyMDQwMDAwIHsKIAkJCQljb21wYXRpYmxlID0gImNubSxjb2RhOTYwIjsKIAkJCQlyZWcgPSA8MHgwMjA0MDAwMCAweDNjMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgMyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCQkgICAgICAgICAgICAgPDAgMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDwwIDMgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQkJaW50ZXJydXB0LW5hbWVzID0gImJpdCIsICJqcGVnIjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNlFETF9DTEtfVlBVX0FYST4sCiAJCQkJCSA8JmNsa3MgSU1YNlFETF9DTEtfTU1EQ19DSDBfQVhJPiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC1zZGIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LXNkYi5kdHMKaW5kZXggMWU2ZTVjYy4uYzEwOGJiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LXNkYi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LXNkYi5kdHMKQEAgLTE1OSwxMyArMTU5LDI4IEBACiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2VuZXQxPjsKIAlwaHktc3VwcGx5ID0gPCZyZWdfZW5ldF8zdjM+OwogCXBoeS1tb2RlID0gInJnbWlpIjsKKwlwaHktaGFuZGxlID0gPCZldGhwaHkxPjsKIAlzdGF0dXMgPSAib2theSI7CisKKwltZGlvIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWV0aHBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCXJlZyA9IDwxPjsKKwkJfTsKKworCQlldGhwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQlyZWcgPSA8Mj47CisJCX07CisJfTsKIH07CiAKICZmZWMyIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0Mj47CiAJcGh5LW1vZGUgPSAicmdtaWkiOworCXBoeS1oYW5kbGUgPSA8JmV0aHBoeTI+OwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEuZHRzaQppbmRleCA2NTdkYTE0Li5jNzBiYjI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbHMxMDIxYS5kdHNpCkBAIC0xNDIsNiArMTQyLDcgQEAKIAkJc2NmZzogc2NmZ0AxNTcwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtc2NmZyIsICJzeXNjb24iOwogCQkJcmVnID0gPDB4MCAweDE1NzAwMDAgMHgwIDB4MTAwMDA+OworCQkJYmlnLWVuZGlhbjsKIAkJfTsKIAogCQljbG9ja2dlbjogY2xvY2tpbmdAMWVlMTAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1uOTAwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45MDAuZHRzCmluZGV4IDUzZjNjYTAuLmI1NTBjNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45MDAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45MDAuZHRzCkBAIC03MDAsMTEgKzcwMCw5IEBACiAJCX07CiAJfTsKIAorCS8qIEV0aGVybmV0IGlzIG9uIHNvbWUgZWFybHkgZGV2ZWxvcG1lbnQgYm9hcmRzIGFuZCBxZW11ICovCiAJZXRoZXJuZXRAZ3BtYyB7CiAJCWNvbXBhdGlibGUgPSAic21zYyxsYW45MWM5NCI7Ci0KLQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMj47CiAJCWludGVycnVwdHMgPSA8MjIgSVJRX1RZUEVfTEVWRUxfSElHSD47CS8qIGdwaW81NCAqLwogCQlyZWcgPSA8MSAweDMwMCAweGY+OwkJLyogMTYgYnl0ZSBJTyByYW5nZSBhdCBvZmZzZXQgMHgzMDAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmIuZHRzaQppbmRleCAzZTA2N2RkLi42MTk0ZDY3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmIuZHRzaQpAQCAtMTU1LDYgKzE1NSwxNSBAQAogfTsKIAogJnBpbmN0cmwgeworCXBjZmdfcHVsbF9ub25lX2Rydl84bWE6IHBjZmctcHVsbC1ub25lLWRydi04bWEgeworCQlkcml2ZS1zdHJlbmd0aCA9IDw4PjsKKwl9OworCisJcGNmZ19wdWxsX3VwX2Rydl84bWE6IHBjZmctcHVsbC11cC1kcnYtOG1hIHsKKwkJYmlhcy1wdWxsLXVwOworCQlkcml2ZS1zdHJlbmd0aCA9IDw4PjsKKwl9OworCiAJYmFja2xpZ2h0IHsKIAkJYmxfZW46IGJsLWVuIHsKIAkJCXJvY2tjaGlwLHBpbnMgPSA8NyAyIFJLX0ZVTkNfR1BJTyAmcGNmZ19wdWxsX25vbmU+OwpAQCAtMTczLDYgKzE4MiwyNyBAQAogCQl9OwogCX07CiAKKwlzZG1tYyB7CisJCS8qCisJCSAqIERlZmF1bHQgZHJpdmUgc3RyZW5ndGggaXNuJ3QgZW5vdWdoIHRvIGFjaGlldmUgZXZlbgorCQkgKiBoaWdoLXNwZWVkIG1vZGUgb24gRVZCIGJvYXJkIHNvIGJ1bXAgdXAgdG8gOG1hLgorCQkgKi8KKwkJc2RtbWNfYnVzNDogc2RtbWMtYnVzNCB7CisJCQlyb2NrY2hpcCxwaW5zID0gPDYgMTYgUktfRlVOQ18xICZwY2ZnX3B1bGxfdXBfZHJ2XzhtYT4sCisJCQkJCTw2IDE3IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX3VwX2Rydl84bWE+LAorCQkJCQk8NiAxOCBSS19GVU5DXzEgJnBjZmdfcHVsbF91cF9kcnZfOG1hPiwKKwkJCQkJPDYgMTkgUktfRlVOQ18xICZwY2ZnX3B1bGxfdXBfZHJ2XzhtYT47CisJCX07CisKKwkJc2RtbWNfY2xrOiBzZG1tYy1jbGsgeworCQkJcm9ja2NoaXAscGlucyA9IDw2IDIwIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX25vbmVfZHJ2XzhtYT47CisJCX07CisKKwkJc2RtbWNfY21kOiBzZG1tYy1jbWQgeworCQkJcm9ja2NoaXAscGlucyA9IDw2IDIxIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX3VwX2Rydl84bWE+OworCQl9OworCX07CisKIAl1c2IgewogCQlob3N0X3ZidXNfZHJ2OiBob3N0LXZidXMtZHJ2IHsKIAkJCXJvY2tjaGlwLHBpbnMgPSA8MCAxNCBSS19GVU5DX0dQSU8gJnBjZmdfcHVsbF9ub25lPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDN4bWIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDN4bWIuZHRzaQppbmRleCA0OWMxMGQzLi43N2UwMzY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzeG1iLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkM3htYi5kdHNpCkBAIC0xNzYsNyArMTc2LDcgQEAKIAkJCSJIZWFkcGhvbmUgSmFjayIsICJIUE9VVFIiLAogCQkJIklOMkwiLCAiTGluZSBJbiBKYWNrIiwKIAkJCSJJTjJSIiwgIkxpbmUgSW4gSmFjayIsCi0JCQkiTUlDQklBUyIsICJJTjFMIiwKKwkJCSJNaWMiLCAiTUlDQklBUyIsCiAJCQkiSU4xTCIsICJNaWMiOwogCiAJCWF0bWVsLHNzYy1jb250cm9sbGVyID0gPCZzc2MwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDQuZHRzaQppbmRleCAxYjBmMzBjLi5iOTQ5OTVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQ0LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkNC5kdHNpCkBAIC0xMDA4LDcgKzEwMDgsNyBAQAogCiAJCQlwaXQ6IHRpbWVyQGZjMDY4NjMwIHsKIAkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLXBpdCI7Ci0JCQkJcmVnID0gPDB4ZmMwNjg2MzAgMHhmPjsKKwkJCQlyZWcgPSA8MHhmYzA2ODYzMCAweDEwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDMgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQljbG9ja3MgPSA8JmgzMmNrPjsKIAkJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1uaGsxNS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1uaGsxNS5kdHMKaW5kZXggYThjMDBlZS4uM2QwYjg3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstbmhrMTUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLW5oazE1LmR0cwpAQCAtMjUsMTEgKzI1LDExIEBACiAJCXN0bXBlMjQwMV8xIHsKIAkJCXN0bXBlMjQwMV8xX25oa19tb2RlOiBzdG1wZTI0MDFfMV9uaGsgewogCQkJCW5oa19jZmcxIHsKLQkJCQkJc3RlLHBpbnMgPSAiR1BJTzc2X0IyMCI7IC8vIElSUSBsaW5lCisJCQkJCXBpbnMgPSAiR1BJTzc2X0IyMCI7IC8vIElSUSBsaW5lCiAJCQkJCXN0ZSxpbnB1dCA9IDwwPjsKIAkJCQl9OwogCQkJCW5oa19jZmcyIHsKLQkJCQkJc3RlLHBpbnMgPSAiR1BJTzc3X0I4IjsgLy8gcmVzZXQgbGluZQorCQkJCQlwaW5zID0gIkdQSU83N19COCI7IC8vIHJlc2V0IGxpbmUKIAkJCQkJc3RlLG91dHB1dCA9IDwxPjsKIAkJCQl9OwogCQkJfTsKQEAgLTM3LDExICszNywxMSBAQAogCQlzdG1wZTI0MDFfMiB7CiAJCQlzdG1wZTI0MDFfMl9uaGtfbW9kZTogc3RtcGUyNDAxXzJfbmhrIHsKIAkJCQluaGtfY2ZnMSB7Ci0JCQkJCXN0ZSxwaW5zID0gIkdQSU83OF9BOCI7IC8vIElSUSBsaW5lCisJCQkJCXBpbnMgPSAiR1BJTzc4X0E4IjsgLy8gSVJRIGxpbmUKIAkJCQkJc3RlLGlucHV0ID0gPDA+OwogCQkJCX07CiAJCQkJbmhrX2NmZzIgewotCQkJCQlzdGUscGlucyA9ICJHUElPNzlfQzkiOyAvLyByZXNldCBsaW5lCisJCQkJCXBpbnMgPSAiR1BJTzc5X0M5IjsgLy8gcmVzZXQgbGluZQogCQkJCQlzdGUsb3V0cHV0ID0gPDE+OwogCQkJCX07CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQppbmRleCA3YjQwOTlmLi5kNWM0NjY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQpAQCAtMTcsMTQgKzE3LDYgQEAKIAogCWFsaWFzZXMgewogCQlldGhlcm5ldDAgPSAmZW1hYzsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKLQkJc2VyaWFsNCA9ICZ1YXJ0NDsKLQkJc2VyaWFsNSA9ICZ1YXJ0NTsKLQkJc2VyaWFsNiA9ICZ1YXJ0NjsKLQkJc2VyaWFsNyA9ICZ1YXJ0NzsKIAl9OwogCiAJY2hvc2VuIHsKQEAgLTM5LDYgKzMxLDE0IEBACiAJCQkJIDwmYWhiX2dhdGVzIDQ0PjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CisKKwkJZnJhbWVidWZmZXJAMSB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzaW1wbGUtZnJhbWVidWZmZXIiLCAic2ltcGxlLWZyYW1lYnVmZmVyIjsKKwkJCWFsbHdpbm5lcixwaXBlbGluZSA9ICJkZV9mZTAtZGVfYmUwLWxjZDAtaGRtaSI7CisJCQljbG9ja3MgPSA8JnBsbDUgMT4sIDwmYWhiX2dhdGVzIDM2PiwgPCZhaGJfZ2F0ZXMgNDM+LAorCQkJCSA8JmFoYl9nYXRlcyA0ND4sIDwmYWhiX2dhdGVzIDQ2PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CiAJfTsKIAogCWNwdXMgewpAQCAtNDM4LDggKzQzOCw4IEBACiAJCQlyZWctbmFtZXMgPSAicGh5X2N0cmwiLCAicG11MSIsICJwbXUyIjsKIAkJCWNsb2NrcyA9IDwmdXNiX2NsayA4PjsKIAkJCWNsb2NrLW5hbWVzID0gInVzYl9waHkiOwotCQkJcmVzZXRzID0gPCZ1c2JfY2xrIDE+LCA8JnVzYl9jbGsgMj47Ci0JCQlyZXNldC1uYW1lcyA9ICJ1c2IxX3Jlc2V0IiwgInVzYjJfcmVzZXQiOworCQkJcmVzZXRzID0gPCZ1c2JfY2xrIDA+LCA8JnVzYl9jbGsgMT4sIDwmdXNiX2NsayAyPjsKKwkJCXJlc2V0LW5hbWVzID0gInVzYjBfcmVzZXQiLCAidXNiMV9yZXNldCIsICJ1c2IyX3Jlc2V0IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtb2xpbnV4aW5vLW1pY3JvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtb2xpbnV4aW5vLW1pY3JvLmR0cwppbmRleCBmZTNjNTU5Li5iZmE3NDI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLW9saW51eGluby1taWNyby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1vbGludXhpbm8tbWljcm8uZHRzCkBAIC01NSw2ICs1NSwxMiBAQAogCW1vZGVsID0gIk9saW1leCBBMTBzLU9saW51eGlubyBNaWNybyI7CiAJY29tcGF0aWJsZSA9ICJvbGltZXgsYTEwcy1vbGludXhpbm8tbWljcm8iLCAiYWxsd2lubmVyLHN1bjVpLWExMHMiOwogCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDI7CisJCXNlcmlhbDIgPSAmdWFydDM7CisJfTsKKwogCXNvY0AwMWMwMDAwMCB7CiAJCWVtYWM6IGV0aGVybmV0QDAxYzBiMDAwIHsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLmR0c2kKaW5kZXggMWI3NjY2Ny4uMmU3ZDgyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMuZHRzaQpAQCAtMTgsMTAgKzE4LDYgQEAKIAogCWFsaWFzZXMgewogCQlldGhlcm5ldDAgPSAmZW1hYzsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKIAl9OwogCiAJY2hvc2VuIHsKQEAgLTM5MCw4ICszODYsOCBAQAogCQkJcmVnLW5hbWVzID0gInBoeV9jdHJsIiwgInBtdTEiOwogCQkJY2xvY2tzID0gPCZ1c2JfY2xrIDg+OwogCQkJY2xvY2stbmFtZXMgPSAidXNiX3BoeSI7Ci0JCQlyZXNldHMgPSA8JnVzYl9jbGsgMT47Ci0JCQlyZXNldC1uYW1lcyA9ICJ1c2IxX3Jlc2V0IjsKKwkJCXJlc2V0cyA9IDwmdXNiX2NsayAwPiwgPCZ1c2JfY2xrIDE+OworCQkJcmVzZXQtbmFtZXMgPSAidXNiMF9yZXNldCIsICJ1c2IxX3Jlc2V0IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1oc2ctaDcwMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtaHNnLWg3MDIuZHRzCmluZGV4IGVlZWQxZjIuLmM3YmUzYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1oc2ctaDcwMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLWhzZy1oNzAyLmR0cwpAQCAtNTMsNiArNTMsMTAgQEAKIAltb2RlbCA9ICJIU0cgSDcwMiI7CiAJY29tcGF0aWJsZSA9ICJoc2csaDcwMiIsICJhbGx3aW5uZXIsc3VuNWktYTEzIjsKIAorCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJnVhcnQxOworCX07CisKIAlzb2NAMDFjMDAwMDAgewogCQltbWMwOiBtbWNAMDFjMGYwMDAgewogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8tbWljcm8uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKaW5kZXggOTE2ZWU4Yi4uM2RlY2VmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKQEAgLTU0LDYgKzU0LDEwIEBACiAJbW9kZWwgPSAiT2xpbWV4IEExMy1PbGludXhpbm8gTWljcm8iOwogCWNvbXBhdGlibGUgPSAib2xpbWV4LGExMy1vbGludXhpbm8tbWljcm8iLCAiYWxsd2lubmVyLHN1bjVpLWExMyI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MTsKKwl9OworCiAJc29jQDAxYzAwMDAwIHsKIAkJbW1jMDogbW1jQDAxYzBmMDAwIHsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCmluZGV4IGUzMWQyOTEuLmI0MjFmN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCkBAIC01NSw2ICs1NSwxMCBAQAogCW1vZGVsID0gIk9saW1leCBBMTMtT2xpbnV4aW5vIjsKIAljb21wYXRpYmxlID0gIm9saW1leCxhMTMtb2xpbnV4aW5vIiwgImFsbHdpbm5lcixzdW41aS1hMTMiOwogCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDE7CisJfTsKKwogCXNvY0AwMWMwMDAwMCB7CiAJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMuZHRzaQppbmRleCBjMzUyMTdlLi5jNTU2Njg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMuZHRzaQpAQCAtMTYsMTEgKzE2LDYgQEAKIC8gewogCWludGVycnVwdC1wYXJlbnQgPSA8JmludGM+OwogCi0JYWxpYXNlcyB7Ci0JCXNlcmlhbDAgPSAmdWFydDE7Ci0JCXNlcmlhbDEgPSAmdWFydDM7Ci0JfTsKLQogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0zNDksOCArMzQ0LDggQEAKIAkJCXJlZy1uYW1lcyA9ICJwaHlfY3RybCIsICJwbXUxIjsKIAkJCWNsb2NrcyA9IDwmdXNiX2NsayA4PjsKIAkJCWNsb2NrLW5hbWVzID0gInVzYl9waHkiOwotCQkJcmVzZXRzID0gPCZ1c2JfY2xrIDE+OwotCQkJcmVzZXQtbmFtZXMgPSAidXNiMV9yZXNldCI7CisJCQlyZXNldHMgPSA8JnVzYl9jbGsgMD4sIDwmdXNiX2NsayAxPjsKKwkJCXJlc2V0LW5hbWVzID0gInVzYjBfcmVzZXQiLCAidXNiMV9yZXNldCI7CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCmluZGV4IGY0NzE1NmIuLjFlN2U3YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCkBAIC01MywxMiArNTMsNiBAQAogCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAKIAlhbGlhc2VzIHsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKLQkJc2VyaWFsNCA9ICZ1YXJ0NDsKLQkJc2VyaWFsNSA9ICZ1YXJ0NTsKIAkJZXRoZXJuZXQwID0gJmdtYWM7CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWJhbmFuYXBpLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1iYW5hbmFwaS5kdHMKaW5kZXggMWNmMTIxNC4uYmQ3YjE1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWJhbmFuYXBpLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtYmFuYW5hcGkuZHRzCkBAIC01NSw2ICs1NSwxMiBAQAogCW1vZGVsID0gIkxlTWFrZXIgQmFuYW5hIFBpIjsKIAljb21wYXRpYmxlID0gImxlbWFrZXIsYmFuYW5hcGkiLCAiYWxsd2lubmVyLHN1bjdpLWEyMCI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0MzsKKwkJc2VyaWFsMiA9ICZ1YXJ0NzsKKwl9OworCiAJc29jQDAxYzAwMDAwIHsKIAkJc3BpMDogc3BpQDAxYzA1MDAwIHsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaHVtbWluZ2JpcmQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWh1bW1pbmdiaXJkLmR0cwppbmRleCAwZTRiZmEzLi4wYmNlZmNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaHVtbWluZ2JpcmQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1odW1taW5nYmlyZC5kdHMKQEAgLTE5LDYgKzE5LDE0IEBACiAJbW9kZWwgPSAiTWVycmlpIEEyMCBIdW1taW5nYmlyZCI7CiAJY29tcGF0aWJsZSA9ICJtZXJyaWksYTIwLWh1bW1pbmdiaXJkIiwgImFsbHdpbm5lcixzdW43aS1hMjAiOwogCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDI7CisJCXNlcmlhbDIgPSAmdWFydDM7CisJCXNlcmlhbDMgPSAmdWFydDQ7CisJCXNlcmlhbDQgPSAmdWFydDU7CisJfTsKKwogCXNvY0AwMWMwMDAwMCB7CiAJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1taWNyby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLW1pY3JvLmR0cwppbmRleCA5ZDY2OWNkZi4uNjZjYzc3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1taWNyby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1taWNyby5kdHMKQEAgLTIwLDYgKzIwLDkgQEAKIAljb21wYXRpYmxlID0gIm9saW1leCxhMjAtb2xpbnV4aW5vLW1pY3JvIiwgImFsbHdpbm5lcixzdW43aS1hMjAiOwogCiAJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDY7CisJCXNlcmlhbDIgPSAmdWFydDc7CiAJCXNwaTAgPSAmc3BpMTsKIAkJc3BpMSA9ICZzcGkyOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCmluZGV4IGUyMWNlNTkuLjg5NzQ5Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCkBAIC01NCwxNCArNTQsNiBAQAogCiAJYWxpYXNlcyB7CiAJCWV0aGVybmV0MCA9ICZnbWFjOwotCQlzZXJpYWwwID0gJnVhcnQwOwotCQlzZXJpYWwxID0gJnVhcnQxOwotCQlzZXJpYWwyID0gJnVhcnQyOwotCQlzZXJpYWwzID0gJnVhcnQzOwotCQlzZXJpYWw0ID0gJnVhcnQ0OwotCQlzZXJpYWw1ID0gJnVhcnQ1OwotCQlzZXJpYWw2ID0gJnVhcnQ2OwotCQlzZXJpYWw3ID0gJnVhcnQ3OwogCX07CiAKIAljaG9zZW4gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLWlwcG8tcThoLXY1LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy1pcHBvLXE4aC12NS5kdHMKaW5kZXggN2YyMTE3Yy4uMzJhZDgwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLWlwcG8tcThoLXY1LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hMjMtaXBwby1xOGgtdjUuZHRzCkBAIC01NSw2ICs1NSwxMCBAQAogCW1vZGVsID0gIklwcG8gUThIIER1YWwgQ29yZSBUYWJsZXQgKHY1KSI7CiAJY29tcGF0aWJsZSA9ICJpcHBvLHE4aC12NSIsICJhbGx3aW5uZXIsc3VuOGktYTIzIjsKIAorCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJnJfdWFydDsKKwl9OworCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiZWFybHlwcmludGsgY29uc29sZT10dHlTMCwxMTUyMDAiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hMjMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCmluZGV4IDA3NDZjZDEuLjg2NTg0ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCkBAIC01MiwxNSArNTIsNiBAQAogLyB7CiAJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAotCWFsaWFzZXMgewotCQlzZXJpYWwwID0gJnVhcnQwOwotCQlzZXJpYWwxID0gJnVhcnQxOwotCQlzZXJpYWwyID0gJnVhcnQyOwotCQlzZXJpYWwzID0gJnVhcnQzOwotCQlzZXJpYWw0ID0gJnVhcnQ0OwotCQlzZXJpYWw1ID0gJnJfdWFydDsKLQl9OwotCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC1vcHRpbXVzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC1vcHRpbXVzLmR0cwppbmRleCA1MDY5NDhmLi4xMWVjNzEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAtb3B0aW11cy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOWktYTgwLW9wdGltdXMuZHRzCkBAIC01NCw2ICs1NCwxMSBAQAogCW1vZGVsID0gIk1lcnJpaSBBODAgT3B0aW11cyBCb2FyZCI7CiAJY29tcGF0aWJsZSA9ICJtZXJyaWksYTgwLW9wdGltdXMiLCAiYWxsd2lubmVyLHN1bjlpLWE4MCI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0NDsKKwl9OworCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiZWFybHlwcmludGsgY29uc29sZT10dHlTMCwxMTUyMDAiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC5kdHNpCmluZGV4IDQ5NDcxNGYuLjllZjQ0MzgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAuZHRzaQpAQCAtNTIsMTYgKzUyLDYgQEAKIC8gewogCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAKLQlhbGlhc2VzIHsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKLQkJc2VyaWFsNCA9ICZ1YXJ0NDsKLQkJc2VyaWFsNSA9ICZ1YXJ0NTsKLQkJc2VyaWFsNiA9ICZyX3VhcnQ7Ci0JfTsKLQogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTIwLXNlYWJvYXJkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtc2VhYm9hcmQuZHRzCmluZGV4IGVhMjgyYzcuLmUyZmVkMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtc2VhYm9hcmQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMjAtc2VhYm9hcmQuZHRzCkBAIC00MDYsNyArNDA2LDcgQEAKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAKIAkJbWFnbmV0b21ldGVyQGMgewotCQkJY29tcGF0aWJsZSA9ICJhayxhazg5NzUiOworCQkJY29tcGF0aWJsZSA9ICJhc2FoaS1rYXNlaSxhazg5NzUiOwogCQkJcmVnID0gPDB4Yz47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvPjsKIAkJCWludGVycnVwdHMgPSA8VEVHUkFfR1BJTyhOLCA1KSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLXR3ci5kdHMgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC10d3IuZHRzCmluZGV4IGEwZjc2MjEuLmYyYjY0YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLXR3ci5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtdHdyLmR0cwpAQCAtMTI5LDEzICsxMjksMjggQEAKIAogJmZlYzAgewogCXBoeS1tb2RlID0gInJtaWkiOworCXBoeS1oYW5kbGUgPSA8JmV0aHBoeTA+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYzA+OwogCXN0YXR1cyA9ICJva2F5IjsKKworCW1kaW8geworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJZXRocGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJcmVnID0gPDA+OworCQl9OworCisJCWV0aHBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCXJlZyA9IDwxPjsKKwkJfTsKKwl9OwogfTsKIAogJmZlYzEgewogCXBoeS1tb2RlID0gInJtaWkiOworCXBoeS1oYW5kbGUgPSA8JmV0aHBoeTE+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYzE+OwogCXN0YXR1cyA9ICJva2F5IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZwppbmRleCA1ZWYxNGRlLi4zZDBjNWQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnCkBAIC04NCw3ICs4NCw4IEBACiBDT05GSUdfUE9XRVJfU1VQUExZPXkKIENPTkZJR19CQVRURVJZX1NCUz15CiBDT05GSUdfQ0hBUkdFUl9UUFM2NTA5MD15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorQ09ORklHX1NFTlNPUlNfTE05MD15CiBDT05GSUdfVEhFUk1BTD15CiBDT05GSUdfRVhZTk9TX1RIRVJNQUw9eQogQ09ORklHX0VYWU5PU19USEVSTUFMX0NPUkU9eQpAQCAtMTA5LDExICsxMTAsMjYgQEAKIENPTkZJR19SRUdVTEFUT1JfUzJNUFMxMT15CiBDT05GSUdfUkVHVUxBVE9SX1M1TTg3Njc9eQogQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA5MD15CitDT05GSUdfRFJNPXkKK0NPTkZJR19EUk1fQlJJREdFPXkKK0NPTkZJR19EUk1fUFROMzQ2MD15CitDT05GSUdfRFJNX1BTODYyMj15CitDT05GSUdfRFJNX0VYWU5PUz15CitDT05GSUdfRFJNX0VYWU5PU19GSU1EPXkKK0NPTkZJR19EUk1fRVhZTk9TX0RQPXkKK0NPTkZJR19EUk1fUEFORUw9eQorQ09ORklHX0RSTV9QQU5FTF9TSU1QTEU9eQogQ09ORklHX0ZCPXkKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1NJTVBMRT15CiBDT05GSUdfRVhZTk9TX1ZJREVPPXkKIENPTkZJR19FWFlOT1NfTUlQSV9EU0k9eQorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CitDT05GSUdfTENEX1BMQVRGT1JNPXkKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CitDT05GSUdfQkFDS0xJR0hUX1BXTT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfRk9OVFM9eQogQ09ORklHX0ZPTlRfN3gxND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCmluZGV4IDIzMjhmZTc1Li5iYzM5M2I3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWcKQEAgLTMzOCw2ICszMzgsNyBAQAogQ09ORklHX1VTQl9YSENJX0hDRD15CiBDT05GSUdfVVNCX1hIQ0lfTVZFQlU9eQogQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfRVhZTk9TPXkKIENPTkZJR19VU0JfRUhDSV9URUdSQT15CiBDT05GSUdfVVNCX0VIQ0lfSENEX1NUST15CiBDT05GSUdfVVNCX0VIQ0lfSENEX1BMQVRGT1JNPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZwppbmRleCBjMmMzYTg1Li42NjdkOWQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnCkBAIC02OCw3ICs2OCw3IEBACiBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT15Ci1DT05GSUdfR0VORVJJQ19DUFVGUkVRX0NQVTA9eQorQ09ORklHX0NQVUZSRVFfRFQ9eQogIyBDT05GSUdfQVJNX09NQVAyUExVU19DUFVGUkVRIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQklORk1UX01JU0M9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKaW5kZXggNjZjZTE3Ni4uN2IwMTUyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCkBAIC0zOCw2ICszOCwxNiBAQAogCXZjcHUtPmFyY2guaGNyID0gSENSX0dVRVNUX01BU0s7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2Y3B1X2dldF9oY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiB2Y3B1LT5hcmNoLmhjcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZjcHVfc2V0X2hjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgaGNyKQoreworCXZjcHUtPmFyY2guaGNyID0gaGNyOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9tb2RlX2lzXzMyYml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDI1NGUwNjUuLjA0YjRlYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTI1LDkgKzEyNSw2IEBACiAJICogQW55dGhpbmcgdGhhdCBpcyBub3QgdXNlZCBkaXJlY3RseSBmcm9tIGFzc2VtYmx5IGNvZGUgZ29lcwogCSAqIGhlcmUuCiAJICovCi0JLyogZGNhY2hlIHNldC93YXkgb3BlcmF0aW9uIHBlbmRpbmcgKi8KLQlpbnQgbGFzdF9wY3B1OwotCWNwdW1hc2tfdCByZXF1aXJlX2RjYWNoZV9mbHVzaDsKIAogCS8qIERvbid0IHJ1biB0aGUgZ3Vlc3Qgb24gdGhpcyB2Y3B1ICovCiAJYm9vbCBwYXVzZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9tbXUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9tbXUuaAppbmRleCA2M2UwZWNjLi4xYmNhOGY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1fbW11LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX21tdS5oCkBAIC00NCw2ICs0NCw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogCkBAIC0xNjEsMTMgKzE2MiwxMCBAQAogCXJldHVybiAodmNwdS0+YXJjaC5jcDE1W2MxX1NDVExSXSAmIDBiMTAxKSA9PSAwYjEwMTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvaGVyZW50X2NhY2hlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBodmFfdCBodmEsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQkgICAgIGJvb2wgaXBhX3VuY2FjaGVkKQorc3RhdGljIGlubGluZSB2b2lkIF9fY29oZXJlbnRfY2FjaGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBmbl90IHBmbiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJICAgICAgIGJvb2wgaXBhX3VuY2FjaGVkKQogewotCWlmICghdmNwdV9oYXNfY2FjaGVfZW5hYmxlZCh2Y3B1KSB8fCBpcGFfdW5jYWNoZWQpCi0JCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKCh2b2lkICopaHZhLCBzaXplKTsKLQkKIAkvKgogCSAqIElmIHdlIGFyZSBnb2luZyB0byBpbnNlcnQgYW4gaW5zdHJ1Y3Rpb24gcGFnZSBhbmQgdGhlIGljYWNoZSBpcwogCSAqIGVpdGhlciBWSVBUIG9yIFBJUFQsIHRoZXJlIGlzIGEgcG90ZW50aWFsIHByb2JsZW0gd2hlcmUgdGhlIGhvc3QKQEAgLTE3OSwxOCArMTc3LDc3IEBACiAJICoKIAkgKiBWSVZUIGNhY2hlcyBhcmUgdGFnZ2VkIHVzaW5nIGJvdGggdGhlIEFTSUQgYW5kIHRoZSBWTUlEIGFuZCBkb2Vzbid0CiAJICogbmVlZCBhbnkga2luZCBvZiBmbHVzaGluZyAoRERJIDA0MDZDLmIgLSBQYWdlIEIzLTEzOTIpLgorCSAqCisJICogV2UgbmVlZCB0byBkbyB0aGlzIHRocm91Z2ggYSBrZXJuZWwgbWFwcGluZyAodXNpbmcgdGhlCisJICogdXNlci1zcGFjZSBtYXBwaW5nIGhhcyBwcm92ZWQgdG8gYmUgdGhlIHdyb25nCisJICogc29sdXRpb24pLiBGb3IgdGhhdCwgd2UgbmVlZCB0byBrbWFwIG9uZSBwYWdlIGF0IGEgdGltZSwKKwkgKiBhbmQgaXRlcmF0ZSBvdmVyIHRoZSByYW5nZS4KIAkgKi8KLQlpZiAoaWNhY2hlX2lzX3BpcHQoKSkgewotCQlfX2NwdWNfY29oZXJlbnRfdXNlcl9yYW5nZShodmEsIGh2YSArIHNpemUpOwotCX0gZWxzZSBpZiAoIWljYWNoZV9pc192aXZ0X2FzaWRfdGFnZ2VkKCkpIHsKKworCWJvb2wgbmVlZF9mbHVzaCA9ICF2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpIHx8IGlwYV91bmNhY2hlZDsKKworCVZNX0JVR19PTihzaXplICYgUEFHRV9NQVNLKTsKKworCWlmICghbmVlZF9mbHVzaCAmJiAhaWNhY2hlX2lzX3BpcHQoKSkKKwkJZ290byB2aXB0X2NhY2hlOworCisJd2hpbGUgKHNpemUpIHsKKwkJdm9pZCAqdmEgPSBrbWFwX2F0b21pY19wZm4ocGZuKTsKKworCQlpZiAobmVlZF9mbHVzaCkKKwkJCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKHZhLCBQQUdFX1NJWkUpOworCisJCWlmIChpY2FjaGVfaXNfcGlwdCgpKQorCQkJX19jcHVjX2NvaGVyZW50X3VzZXJfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdmEsCisJCQkJCQkgICAodW5zaWduZWQgbG9uZyl2YSArIFBBR0VfU0laRSk7CisKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJCXBmbisrOworCisJCWt1bm1hcF9hdG9taWModmEpOworCX0KKwordmlwdF9jYWNoZToKKwlpZiAoIWljYWNoZV9pc19waXB0KCkgJiYgIWljYWNoZV9pc192aXZ0X2FzaWRfdGFnZ2VkKCkpIHsKIAkJLyogYW55IGtpbmQgb2YgVklQVCBjYWNoZSAqLwogCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV9mbHVzaF9kY2FjaGVfcHRlKHB0ZV90IHB0ZSkKK3sKKwl2b2lkICp2YSA9IGttYXBfYXRvbWljKHB0ZV9wYWdlKHB0ZSkpOworCisJa3ZtX2ZsdXNoX2RjYWNoZV90b19wb2ModmEsIFBBR0VfU0laRSk7CisKKwlrdW5tYXBfYXRvbWljKHZhKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX2ZsdXNoX2RjYWNoZV9wbWQocG1kX3QgcG1kKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBNRF9TSVpFOworCXBmbl90IHBmbiA9IHBtZF9wZm4ocG1kKTsKKworCXdoaWxlIChzaXplKSB7CisJCXZvaWQgKnZhID0ga21hcF9hdG9taWNfcGZuKHBmbik7CisKKwkJa3ZtX2ZsdXNoX2RjYWNoZV90b19wb2ModmEsIFBBR0VfU0laRSk7CisKKwkJcGZuKys7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCisJCWt1bm1hcF9hdG9taWModmEpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX2ZsdXNoX2RjYWNoZV9wdWQocHVkX3QgcHVkKQoreworfQorCiAjZGVmaW5lIGt2bV92aXJ0X3RvX3BoeXMoeCkJCXZpcnRfdG9faWRtYXAoKHVuc2lnbmVkIGxvbmcpKHgpKQogCi12b2lkIHN0YWdlMl9mbHVzaF92bShzdHJ1Y3Qga3ZtICprdm0pOwordm9pZCBrdm1fc2V0X3dheV9mbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1fdG9nZ2xlX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YXNfZW5hYmxlZCk7CiAKICNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL2FybS9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCmluZGV4IDcwNWJiNzYuLjBjM2Y1YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtNDEzLDYgKzQxMyw3IEBACiAjZGVmaW5lIF9fTlJfZ2V0cmFuZG9tCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM4NCkKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJCShfX05SX1NZU0NBTExfQkFTRSszODUpCiAjZGVmaW5lIF9fTlJfYnBmCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM4NikKKyNkZWZpbmUgX19OUl9leGVjdmVhdAkJCShfX05SX1NZU0NBTExfQkFTRSszODcpCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIFNXSXMgYXJlIEFSTSBwcml2YXRlLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMgYi9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUwppbmRleCBlNTE4MzNmLi4wNTc0NWViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUwpAQCAtMzk2LDYgKzM5Niw3IEBACiAJCUNBTEwoc3lzX2dldHJhbmRvbSkKIC8qIDM4NSAqLwlDQUxMKHN5c19tZW1mZF9jcmVhdGUpCiAJCUNBTEwoc3lzX2JwZikKKwkJQ0FMTChzeXNfZXhlY3ZlYXQpCiAjaWZuZGVmIHN5c2NhbGxzX2NvdW50ZWQKIC5lcXUgc3lzY2FsbHNfcGFkZGluZywgKChOUl9zeXNjYWxscyArIDMpICYgfjMpIC0gTlJfc3lzY2FsbHMKICNkZWZpbmUgc3lzY2FsbHNfY291bnRlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCmluZGV4IDQxNzZkZjcuLjFhMDA0NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKQEAgLTI1MywyMSArMjUzLDIyIEBACiAJLmVuZG0KIAogCS5tYWNybwlyZXN0b3JlX3VzZXJfcmVncywgZmFzdCA9IDAsIG9mZnNldCA9IDAKLQlsZHIJcjEsIFtzcCwgI1xvZmZzZXQgKyBTX1BTUl0JQCBnZXQgY2FsbGluZyBjcHNyCi0JbGRyCWxyLCBbc3AsICNcb2Zmc2V0ICsgU19QQ10hCUAgZ2V0IHBjCisJbW92CXIyLCBzcAorCWxkcglyMSwgW3IyLCAjXG9mZnNldCArIFNfUFNSXQlAIGdldCBjYWxsaW5nIGNwc3IKKwlsZHIJbHIsIFtyMiwgI1xvZmZzZXQgKyBTX1BDXSEJQCBnZXQgcGMKIAltc3IJc3Bzcl9jeHNmLCByMQkJCUAgc2F2ZSBpbiBzcHNyX3N2YwogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9WNikgfHwgZGVmaW5lZChDT05GSUdfQ1BVXzMydjZLKQogCUAgV2UgbXVzdCBhdm9pZCBjbHJleCBkdWUgdG8gQ29ydGV4LUExNSBlcnJhdHVtICM4MzAzMjEKLQlzdHJleAlyMSwgcjIsIFtzcF0JCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgorCXN0cmV4CXIxLCByMiwgW3IyXQkJCUAgY2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCiAjZW5kaWYKIAkuaWYJXGZhc3QKLQlsZG1kYglzcCwge3IxIC0gbHJ9XgkJCUAgZ2V0IGNhbGxpbmcgcjEgLSBscgorCWxkbWRiCXIyLCB7cjEgLSBscn1eCQkJQCBnZXQgY2FsbGluZyByMSAtIGxyCiAJLmVsc2UKLQlsZG1kYglzcCwge3IwIC0gbHJ9XgkJCUAgZ2V0IGNhbGxpbmcgcjAgLSBscgorCWxkbWRiCXIyLCB7cjAgLSBscn1eCQkJQCBnZXQgY2FsbGluZyByMCAtIGxyCiAJLmVuZGlmCiAJbW92CXIwLCByMAkJCQlAIEFSTXY1VCBhbmQgZWFybGllciByZXF1aXJlIGEgbm9wCiAJCQkJCQlAIGFmdGVyIGxkbSB7fV4KLQlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFIC0gU19QQworCWFkZAlzcCwgc3AsICNcb2Zmc2V0ICsgU19GUkFNRV9TSVpFCiAJbW92cwlwYywgbHIJCQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgogCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGY3YzY1YWQuLjU1N2UxMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTE2LDggKzExNiwxNCBAQAogCQlyZXQgPSAxOwogCX0KIAotCWlmIChsZWZ0ID4gKHM2NClhcm1wbXUtPm1heF9wZXJpb2QpCi0JCWxlZnQgPSBhcm1wbXUtPm1heF9wZXJpb2Q7CisJLyoKKwkgKiBMaW1pdCB0aGUgbWF4aW11bSBwZXJpb2QgdG8gcHJldmVudCB0aGUgY291bnRlciB2YWx1ZQorCSAqIGZyb20gb3ZlcnRha2luZyB0aGUgb25lIHdlIGFyZSBhYm91dCB0byBwcm9ncmFtLiBJbgorCSAqIGVmZmVjdCB3ZSBhcmUgcmVkdWNpbmcgbWF4X3BlcmlvZCB0byBhY2NvdW50IGZvcgorCSAqIGludGVycnVwdCBsYXRlbmN5IChhbmQgd2UgYXJlIGJlaW5nIHZlcnkgY29uc2VydmF0aXZlKS4KKwkgKi8KKwlpZiAobGVmdCA+IChhcm1wbXUtPm1heF9wZXJpb2QgPj4gMSkpCisJCWxlZnQgPSBhcm1wbXUtPm1heF9wZXJpb2QgPj4gMTsKIAogCWxvY2FsNjRfc2V0KCZod2MtPnByZXZfY291bnQsICh1NjQpLWxlZnQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9yZWdzLmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9yZWdzLmMKaW5kZXggNmU0Mzc5Yy4uNTkyZGRhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfcmVncy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX3JlZ3MuYwpAQCAtMjgsMyArMjgsMTEgQEAKIHsKIAlyZXR1cm4gUEVSRl9TQU1QTEVfUkVHU19BQklfMzI7CiB9CisKK3ZvaWQgcGVyZl9nZXRfcmVnc191c2VyKHN0cnVjdCBwZXJmX3JlZ3MgKnJlZ3NfdXNlciwKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3NfdXNlcl9jb3B5KQoreworCXJlZ3NfdXNlci0+cmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKKwlyZWdzX3VzZXItPmFiaSA9IHBlcmZfcmVnX2FiaShjdXJyZW50KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggZjljODYzOS4uZTU1NDA4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTY1NywxMCArNjU3LDEzIEBACiAKIAkvKgogCSAqIEVuc3VyZSB0aGF0IHN0YXJ0L3NpemUgYXJlIGFsaWduZWQgdG8gYSBwYWdlIGJvdW5kYXJ5LgotCSAqIFNpemUgaXMgYXBwcm9wcmlhdGVseSByb3VuZGVkIGRvd24sIHN0YXJ0IGlzIHJvdW5kZWQgdXAuCisJICogU2l6ZSBpcyByb3VuZGVkIGRvd24sIHN0YXJ0IGlzIHJvdW5kZWQgdXAuCiAJICovCi0Jc2l6ZSAtPSBzdGFydCAmIH5QQUdFX01BU0s7CiAJYWxpZ25lZF9zdGFydCA9IFBBR0VfQUxJR04oc3RhcnQpOworCWlmIChhbGlnbmVkX3N0YXJ0ID4gc3RhcnQgKyBzaXplKQorCQlzaXplID0gMDsKKwllbHNlCisJCXNpemUgLT0gYWxpZ25lZF9zdGFydCAtIHN0YXJ0OwogCiAjaWZuZGVmIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUCiAJaWYgKGFsaWduZWRfc3RhcnQgPiBVTE9OR19NQVgpIHsKQEAgLTEwNDYsNiArMTA0OSwxNSBAQAogCQlzZXFfcHJpbnRmKG0sICJtb2RlbCBuYW1lXHQ6ICVzIHJldiAlZCAoJXMpXG4iLAogCQkJICAgY3B1X25hbWUsIGNwdWlkICYgMTUsIGVsZl9wbGF0Zm9ybSk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApCisJCXNlcV9wcmludGYobSwgIkJvZ29NSVBTXHQ6ICVsdS4lMDJsdVxuIiwKKwkJCSAgIHBlcl9jcHUoY3B1X2RhdGEsIGkpLmxvb3BzX3Blcl9qaWZmeSAvICg1MDAwMDBVTC9IWiksCisJCQkgICAocGVyX2NwdShjcHVfZGF0YSwgaSkubG9vcHNfcGVyX2ppZmZ5IC8gKDUwMDBVTC9IWikpICUgMTAwKTsKKyNlbHNlCisJCXNlcV9wcmludGYobSwgIkJvZ29NSVBTXHQ6ICVsdS4lMDJsdVxuIiwKKwkJCSAgIGxvb3BzX3Blcl9qaWZmeSAvICg1MDAwMDAvSFopLAorCQkJICAgKGxvb3BzX3Blcl9qaWZmeSAvICg1MDAwL0haKSkgJSAxMDApOworI2VuZGlmCiAJCS8qIGR1bXAgb3V0IHRoZSBwcm9jZXNzb3IgZmVhdHVyZXMgKi8KIAkJc2VxX3B1dHMobSwgIkZlYXR1cmVzXHQ6ICIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKaW5kZXggNWU2MDUyZS4uODZlZjI0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwpAQCAtMzg3LDYgKzM4NywxOCBAQAogCiB2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgYm9nb3N1bSA9IDA7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJYm9nb3N1bSArPSBwZXJfY3B1KGNwdV9kYXRhLCBjcHUpLmxvb3BzX3Blcl9qaWZmeTsKKworCXByaW50ayhLRVJOX0lORk8gIlNNUDogVG90YWwgb2YgJWQgcHJvY2Vzc29ycyBhY3RpdmF0ZWQgIgorCSAgICAgICAiKCVsdS4lMDJsdSBCb2dvTUlQUykuXG4iLAorCSAgICAgICBudW1fb25saW5lX2NwdXMoKSwKKwkgICAgICAgYm9nb3N1bSAvICg1MDAwMDAvSFopLAorCSAgICAgICAoYm9nb3N1bSAvICg1MDAwL0haKSkgJSAxMDApOworCiAJaHlwX21vZGVfY2hlY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL2FybS5jIGIvYXJjaC9hcm0va3ZtL2FybS5jCmluZGV4IDJkNmQ5MTAuLjBiMGQ1OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2t2bS9hcm0uYworKysgYi9hcmNoL2FybS9rdm0vYXJtLmMKQEAgLTI4MSwxNSArMjgxLDYgQEAKIAl2Y3B1LT5jcHUgPSBjcHU7CiAJdmNwdS0+YXJjaC5ob3N0X2NwdV9jb250ZXh0ID0gdGhpc19jcHVfcHRyKGt2bV9ob3N0X2NwdV9zdGF0ZSk7CiAKLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhpcyB2Y3B1IHJlcXVpcmVzIHRoZSBjYWNoZSB0byBiZSBmbHVzaGVkIG9uCi0JICogdGhpcyBwaHlzaWNhbCBDUFUuIFRoaXMgaXMgYSBjb25zZXF1ZW5jZSBvZiBkb2luZyBkY2FjaGUKLQkgKiBvcGVyYXRpb25zIGJ5IHNldC93YXkgb24gdGhpcyB2Y3B1LiBXZSBkbyBpdCBoZXJlIHRvIGJlIGluCi0JICogYSBub24tcHJlZW1wdGlibGUgc2VjdGlvbi4KLQkgKi8KLQlpZiAoY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoY3B1LCAmdmNwdS0+YXJjaC5yZXF1aXJlX2RjYWNoZV9mbHVzaCkpCi0JCWZsdXNoX2NhY2hlX2FsbCgpOyAvKiBXZSdkIHJlYWxseSB3YW50IHY3X2ZsdXNoX2RjYWNoZV9hbGwoKSAqLwotCiAJa3ZtX2FybV9zZXRfcnVubmluZ192Y3B1KHZjcHUpOwogfQogCkBAIC01NDEsNyArNTMyLDYgQEAKIAkJcmV0ID0ga3ZtX2NhbGxfaHlwKF9fa3ZtX3ZjcHVfcnVuLCB2Y3B1KTsKIAogCQl2Y3B1LT5tb2RlID0gT1VUU0lERV9HVUVTVF9NT0RFOwotCQl2Y3B1LT5hcmNoLmxhc3RfcGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkJa3ZtX2d1ZXN0X2V4aXQoKTsKIAkJdHJhY2Vfa3ZtX2V4aXQoKnZjcHVfcGModmNwdSkpOwogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL2NvcHJvYy5jIGIvYXJjaC9hcm0va3ZtL2NvcHJvYy5jCmluZGV4IDc5MjhkYmQuLmYzZDg4ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2t2bS9jb3Byb2MuYworKysgYi9hcmNoL2FybS9rdm0vY29wcm9jLmMKQEAgLTE4OSw4MiArMTg5LDQwIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qIFNlZSBub3RlIGF0IEFSTSBBUk0gQjEuMTQuNCAqLworLyoKKyAqIFNlZSBub3RlIGF0IEFSTXY3IEFSTSBCMS4xNC40IChUTDtEUjogUy9XIG9wcyBhcmUgbm90IGVhc2lseSB2aXJ0dWFsaXplZCkuCisgKi8KIHN0YXRpYyBib29sIGFjY2Vzc19kY3N3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCWNvbnN0IHN0cnVjdCBjb3Byb2NfcGFyYW1zICpwLAogCQkJY29uc3Qgc3RydWN0IGNvcHJvY19yZWcgKnIpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JaW50IGNwdTsKLQogCWlmICghcC0+aXNfd3JpdGUpCiAJCXJldHVybiByZWFkX2Zyb21fd3JpdGVfb25seSh2Y3B1LCBwKTsKIAotCWNwdSA9IGdldF9jcHUoKTsKLQotCWNwdW1hc2tfc2V0YWxsKCZ2Y3B1LT5hcmNoLnJlcXVpcmVfZGNhY2hlX2ZsdXNoKTsKLQljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZ2Y3B1LT5hcmNoLnJlcXVpcmVfZGNhY2hlX2ZsdXNoKTsKLQotCS8qIElmIHdlIHdlcmUgYWxyZWFkeSBwcmVlbXB0ZWQsIHRha2UgdGhlIGxvbmcgd2F5IGFyb3VuZCAqLwotCWlmIChjcHUgIT0gdmNwdS0+YXJjaC5sYXN0X3BjcHUpIHsKLQkJZmx1c2hfY2FjaGVfYWxsKCk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQl2YWwgPSAqdmNwdV9yZWcodmNwdSwgcC0+UnQxKTsKLQotCXN3aXRjaCAocC0+Q1JtKSB7Ci0JY2FzZSA2OgkJCS8qIFVwZ3JhZGUgRENJU1cgdG8gRENDSVNXLCBhcyBwZXIgSENSLlNXSU8gKi8KLQljYXNlIDE0OgkJLyogRENDSVNXICovCi0JCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTQsIDIiIDogOiAiciIgKHZhbCkpOwotCQlicmVhazsKLQotCWNhc2UgMTA6CQkvKiBEQ0NTVyAqLwotCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCAyIiA6IDogInIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JfQotCi1kb25lOgotCXB1dF9jcHUoKTsKLQorCWt2bV9zZXRfd2F5X2ZsdXNoKHZjcHUpOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICogR2VuZXJpYyBhY2Nlc3NvciBmb3IgVk0gcmVnaXN0ZXJzLiBPbmx5IGNhbGxlZCBhcyBsb25nIGFzIEhDUl9UVk0KLSAqIGlzIHNldC4KKyAqIGlzIHNldC4gIElmIHRoZSBndWVzdCBlbmFibGVzIHRoZSBNTVUsIHdlIHN0b3AgdHJhcHBpbmcgdGhlIFZNCisgKiBzeXNfcmVncyBhbmQgbGVhdmUgaXQgaW4gY29tcGxldGUgY29udHJvbCBvZiB0aGUgY2FjaGVzLgorICoKKyAqIFVzZWQgYnkgdGhlIGNwdS1zcGVjaWZpYyBjb2RlLgogICovCi1zdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCSAgY29uc3Qgc3RydWN0IGNvcHJvY19wYXJhbXMgKnAsCi0JCQkgIGNvbnN0IHN0cnVjdCBjb3Byb2NfcmVnICpyKQorYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJICAgY29uc3Qgc3RydWN0IGNvcHJvY19wYXJhbXMgKnAsCisJCSAgIGNvbnN0IHN0cnVjdCBjb3Byb2NfcmVnICpyKQogeworCWJvb2wgd2FzX2VuYWJsZWQgPSB2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpOworCiAJQlVHX09OKCFwLT5pc193cml0ZSk7CiAKIAl2Y3B1LT5hcmNoLmNwMTVbci0+cmVnXSA9ICp2Y3B1X3JlZyh2Y3B1LCBwLT5SdDEpOwogCWlmIChwLT5pc182NGJpdCkKIAkJdmNwdS0+YXJjaC5jcDE1W3ItPnJlZyArIDFdID0gKnZjcHVfcmVnKHZjcHUsIHAtPlJ0Mik7CiAKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFNDVExSIGFjY2Vzc29yLiBPbmx5IGNhbGxlZCBhcyBsb25nIGFzIEhDUl9UVk0gaXMgc2V0LiAgSWYgdGhlCi0gKiBndWVzdCBlbmFibGVzIHRoZSBNTVUsIHdlIHN0b3AgdHJhcHBpbmcgdGhlIFZNIHN5c19yZWdzIGFuZCBsZWF2ZQotICogaXQgaW4gY29tcGxldGUgY29udHJvbCBvZiB0aGUgY2FjaGVzLgotICoKLSAqIFVzZWQgYnkgdGhlIGNwdS1zcGVjaWZpYyBjb2RlLgotICovCi1ib29sIGFjY2Vzc19zY3RscihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCSAgY29uc3Qgc3RydWN0IGNvcHJvY19wYXJhbXMgKnAsCi0JCSAgY29uc3Qgc3RydWN0IGNvcHJvY19yZWcgKnIpCi17Ci0JYWNjZXNzX3ZtX3JlZyh2Y3B1LCBwLCByKTsKLQotCWlmICh2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpKSB7CS8qIE1NVStDYWNoZXMgZW5hYmxlZD8gKi8KLQkJdmNwdS0+YXJjaC5oY3IgJj0gfkhDUl9UVk07Ci0JCXN0YWdlMl9mbHVzaF92bSh2Y3B1LT5rdm0pOwotCX0KLQorCWt2bV90b2dnbGVfY2FjaGUodmNwdSwgd2FzX2VuYWJsZWQpOwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vY29wcm9jLmggYi9hcmNoL2FybS9rdm0vY29wcm9jLmgKaW5kZXggMWE0NGJiZS4uODhkMjRhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va3ZtL2NvcHJvYy5oCisrKyBiL2FyY2gvYXJtL2t2bS9jb3Byb2MuaApAQCAtMTUzLDggKzE1Myw4IEBACiAjZGVmaW5lIGlzNjQJCS5pc182NCA9IHRydWUKICNkZWZpbmUgaXMzMgkJLmlzXzY0ID0gZmFsc2UKIAotYm9vbCBhY2Nlc3Nfc2N0bHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkgIGNvbnN0IHN0cnVjdCBjb3Byb2NfcGFyYW1zICpwLAotCQkgIGNvbnN0IHN0cnVjdCBjb3Byb2NfcmVnICpyKTsKK2Jvb2wgYWNjZXNzX3ZtX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCSAgIGNvbnN0IHN0cnVjdCBjb3Byb2NfcGFyYW1zICpwLAorCQkgICBjb25zdCBzdHJ1Y3QgY29wcm9jX3JlZyAqcik7CiAKICNlbmRpZiAvKiBfX0FSTV9LVk1fQ09QUk9DX0xPQ0FMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL2NvcHJvY19hMTUuYyBiL2FyY2gvYXJtL2t2bS9jb3Byb2NfYTE1LmMKaW5kZXggZTZmNGFlNC4uYTcxMzY3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va3ZtL2NvcHJvY19hMTUuYworKysgYi9hcmNoL2FybS9rdm0vY29wcm9jX2ExNS5jCkBAIC0zNCw3ICszNCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvcHJvY19yZWcgYTE1X3JlZ3NbXSA9IHsKIAkvKiBTQ1RMUjogc3dhcHBlZCBieSBpbnRlcnJ1cHQuUy4gKi8KIAl7IENSbiggMSksIENSbSggMCksIE9wMSggMCksIE9wMiggMCksIGlzMzIsCi0JCQlhY2Nlc3Nfc2N0bHIsIHJlc2V0X3ZhbCwgYzFfU0NUTFIsIDB4MDBDNTAwNzggfSwKKwkJCWFjY2Vzc192bV9yZWcsIHJlc2V0X3ZhbCwgYzFfU0NUTFIsIDB4MDBDNTAwNzggfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qga3ZtX2NvcHJvY190YXJnZXRfdGFibGUgYTE1X3RhcmdldF90YWJsZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2t2bS9jb3Byb2NfYTcuYyBiL2FyY2gvYXJtL2t2bS9jb3Byb2NfYTcuYwppbmRleCAxN2ZjN2NkLi5iMTllNDZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rdm0vY29wcm9jX2E3LmMKKysrIGIvYXJjaC9hcm0va3ZtL2NvcHJvY19hNy5jCkBAIC0zNyw3ICszNyw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvcHJvY19yZWcgYTdfcmVnc1tdID0gewogCS8qIFNDVExSOiBzd2FwcGVkIGJ5IGludGVycnVwdC5TLiAqLwogCXsgQ1JuKCAxKSwgQ1JtKCAwKSwgT3AxKCAwKSwgT3AyKCAwKSwgaXMzMiwKLQkJCWFjY2Vzc19zY3RsciwgcmVzZXRfdmFsLCBjMV9TQ1RMUiwgMHgwMEM1MDg3OCB9LAorCQkJYWNjZXNzX3ZtX3JlZywgcmVzZXRfdmFsLCBjMV9TQ1RMUiwgMHgwMEM1MDg3OCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBrdm1fY29wcm9jX3RhcmdldF90YWJsZSBhN190YXJnZXRfdGFibGUgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vbW11LmMgYi9hcmNoL2FybS9rdm0vbW11LmMKaW5kZXggMWRjOTc3OC4uMTM2NjYyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va3ZtL21tdS5jCisrKyBiL2FyY2gvYXJtL2t2bS9tbXUuYwpAQCAtNTgsNiArNTgsMjYgQEAKIAkJa3ZtX2NhbGxfaHlwKF9fa3ZtX3RsYl9mbHVzaF92bWlkX2lwYSwga3ZtLCBpcGEpOwogfQogCisvKgorICogRC1DYWNoZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhleSB0YWtlIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgYnkKKyAqIHZhbHVlLCBhcyB0aGV5IGFyZSBmbHVzaGluZyB0aGUgY2FjaGUgdXNpbmcgdGhlIGtlcm5lbCBtYXBwaW5nIChvcgorICoga21hcCBvbiAzMmJpdCkuCisgKi8KK3N0YXRpYyB2b2lkIGt2bV9mbHVzaF9kY2FjaGVfcHRlKHB0ZV90IHB0ZSkKK3sKKwlfX2t2bV9mbHVzaF9kY2FjaGVfcHRlKHB0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9mbHVzaF9kY2FjaGVfcG1kKHBtZF90IHBtZCkKK3sKKwlfX2t2bV9mbHVzaF9kY2FjaGVfcG1kKHBtZCk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9mbHVzaF9kY2FjaGVfcHVkKHB1ZF90IHB1ZCkKK3sKKwlfX2t2bV9mbHVzaF9kY2FjaGVfcHVkKHB1ZCk7Cit9CisKIHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZShzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlLAogCQkJCSAgaW50IG1pbiwgaW50IG1heCkKIHsKQEAgLTExOSw2ICsxMzksMjYgQEAKIAlwdXRfcGFnZSh2aXJ0X3RvX3BhZ2UocG1kKSk7CiB9CiAKKy8qCisgKiBVbm1hcHBpbmcgdnMgZGNhY2hlIG1hbmFnZW1lbnQ6CisgKgorICogSWYgYSBndWVzdCBtYXBzIGNlcnRhaW4gbWVtb3J5IHBhZ2VzIGFzIHVuY2FjaGVkLCBhbGwgd3JpdGVzIHdpbGwKKyAqIGJ5cGFzcyB0aGUgZGF0YSBjYWNoZSBhbmQgZ28gZGlyZWN0bHkgdG8gUkFNLiAgSG93ZXZlciwgdGhlIENQVXMKKyAqIGNhbiBzdGlsbCBzcGVjdWxhdGUgcmVhZHMgKG5vdCB3cml0ZXMpIGFuZCBmaWxsIGNhY2hlIGxpbmVzIHdpdGgKKyAqIGRhdGEuCisgKgorICogVGhvc2UgY2FjaGUgbGluZXMgd2lsbCBiZSAqY2xlYW4qIGNhY2hlIGxpbmVzIHRob3VnaCwgc28gYQorICogY2xlYW4raW52YWxpZGF0ZSBvcGVyYXRpb24gaXMgZXF1aXZhbGVudCB0byBhbiBpbnZhbGlkYXRlCisgKiBvcGVyYXRpb24sIGJlY2F1c2Ugbm8gY2FjaGUgbGluZXMgYXJlIG1hcmtlZCBkaXJ0eS4KKyAqCisgKiBUaG9zZSBjbGVhbiBjYWNoZSBsaW5lcyBjb3VsZCBiZSBmaWxsZWQgcHJpb3IgdG8gYW4gdW5jYWNoZWQgd3JpdGUKKyAqIGJ5IHRoZSBndWVzdCwgYW5kIHRoZSBjYWNoZSBjb2hlcmVudCBJTyBzdWJzeXN0ZW0gd291bGQgdGhlcmVmb3JlCisgKiBlbmQgdXAgd3JpdGluZyBvbGQgZGF0YSB0byBkaXNrLgorICoKKyAqIFRoaXMgaXMgd2h5IHJpZ2h0IGFmdGVyIHVubWFwcGluZyBhIHBhZ2Uvc2VjdGlvbiBhbmQgaW52YWxpZGF0aW5nCisgKiB0aGUgY29ycmVzcG9uZGluZyBUTEJzLCB3ZSBjYWxsIGt2bV9mbHVzaF9kY2FjaGVfcCooKSB0byBtYWtlIHN1cmUKKyAqIHRoZSBJTyBzdWJzeXN0ZW0gd2lsbCBuZXZlciBoaXQgaW4gdGhlIGNhY2hlLgorICovCiBzdGF0aWMgdm9pZCB1bm1hcF9wdGVzKHN0cnVjdCBrdm0gKmt2bSwgcG1kX3QgKnBtZCwKIAkJICAgICAgIHBoeXNfYWRkcl90IGFkZHIsIHBoeXNfYWRkcl90IGVuZCkKIHsKQEAgLTEyOCw5ICsxNjgsMTYgQEAKIAlzdGFydF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpOwogCWRvIHsKIAkJaWYgKCFwdGVfbm9uZSgqcHRlKSkgeworCQkJcHRlX3Qgb2xkX3B0ZSA9ICpwdGU7CisKIAkJCWt2bV9zZXRfcHRlKHB0ZSwgX19wdGUoMCkpOwotCQkJcHV0X3BhZ2UodmlydF90b19wYWdlKHB0ZSkpOwogCQkJa3ZtX3RsYl9mbHVzaF92bWlkX2lwYShrdm0sIGFkZHIpOworCisJCQkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlIGZvciBkZXZpY2UgbWFwcGluZ3MgKi8KKwkJCWlmICgocHRlX3ZhbChvbGRfcHRlKSAmIFBBR0VfUzJfREVWSUNFKSAhPSBQQUdFX1MyX0RFVklDRSkKKwkJCQlrdm1fZmx1c2hfZGNhY2hlX3B0ZShvbGRfcHRlKTsKKworCQkJcHV0X3BhZ2UodmlydF90b19wYWdlKHB0ZSkpOwogCQl9CiAJfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CiAKQEAgLTE0OSw4ICsxOTYsMTMgQEAKIAkJbmV4dCA9IGt2bV9wbWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKIAkJaWYgKCFwbWRfbm9uZSgqcG1kKSkgewogCQkJaWYgKGt2bV9wbWRfaHVnZSgqcG1kKSkgeworCQkJCXBtZF90IG9sZF9wbWQgPSAqcG1kOworCiAJCQkJcG1kX2NsZWFyKHBtZCk7CiAJCQkJa3ZtX3RsYl9mbHVzaF92bWlkX2lwYShrdm0sIGFkZHIpOworCisJCQkJa3ZtX2ZsdXNoX2RjYWNoZV9wbWQob2xkX3BtZCk7CisKIAkJCQlwdXRfcGFnZSh2aXJ0X3RvX3BhZ2UocG1kKSk7CiAJCQl9IGVsc2UgewogCQkJCXVubWFwX3B0ZXMoa3ZtLCBwbWQsIGFkZHIsIG5leHQpOwpAQCAtMTczLDggKzIyNSwxMyBAQAogCQluZXh0ID0ga3ZtX3B1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAoIXB1ZF9ub25lKCpwdWQpKSB7CiAJCQlpZiAocHVkX2h1Z2UoKnB1ZCkpIHsKKwkJCQlwdWRfdCBvbGRfcHVkID0gKnB1ZDsKKwogCQkJCXB1ZF9jbGVhcihwdWQpOwogCQkJCWt2bV90bGJfZmx1c2hfdm1pZF9pcGEoa3ZtLCBhZGRyKTsKKworCQkJCWt2bV9mbHVzaF9kY2FjaGVfcHVkKG9sZF9wdWQpOworCiAJCQkJcHV0X3BhZ2UodmlydF90b19wYWdlKHB1ZCkpOwogCQkJfSBlbHNlIHsKIAkJCQl1bm1hcF9wbWRzKGt2bSwgcHVkLCBhZGRyLCBuZXh0KTsKQEAgLTIwOSwxMCArMjY2LDkgQEAKIAogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7CiAJZG8gewotCQlpZiAoIXB0ZV9ub25lKCpwdGUpKSB7Ci0JCQlodmFfdCBodmEgPSBnZm5fdG9faHZhKGt2bSwgYWRkciA+PiBQQUdFX1NISUZUKTsKLQkJCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKCh2b2lkKilodmEsIFBBR0VfU0laRSk7Ci0JCX0KKwkJaWYgKCFwdGVfbm9uZSgqcHRlKSAmJgorCQkgICAgKHB0ZV92YWwoKnB0ZSkgJiBQQUdFX1MyX0RFVklDRSkgIT0gUEFHRV9TMl9ERVZJQ0UpCisJCQlrdm1fZmx1c2hfZGNhY2hlX3B0ZSgqcHRlKTsKIAl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKIH0KIApAQCAtMjI2LDEyICsyODIsMTAgQEAKIAlkbyB7CiAJCW5leHQgPSBrdm1fcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCWlmICghcG1kX25vbmUoKnBtZCkpIHsKLQkJCWlmIChrdm1fcG1kX2h1Z2UoKnBtZCkpIHsKLQkJCQlodmFfdCBodmEgPSBnZm5fdG9faHZhKGt2bSwgYWRkciA+PiBQQUdFX1NISUZUKTsKLQkJCQlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYygodm9pZCopaHZhLCBQTURfU0laRSk7Ci0JCQl9IGVsc2UgeworCQkJaWYgKGt2bV9wbWRfaHVnZSgqcG1kKSkKKwkJCQlrdm1fZmx1c2hfZGNhY2hlX3BtZCgqcG1kKTsKKwkJCWVsc2UKIAkJCQlzdGFnZTJfZmx1c2hfcHRlcyhrdm0sIHBtZCwgYWRkciwgbmV4dCk7Ci0JCQl9CiAJCX0KIAl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIH0KQEAgLTI0NiwxMiArMzAwLDEwIEBACiAJZG8gewogCQluZXh0ID0ga3ZtX3B1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAoIXB1ZF9ub25lKCpwdWQpKSB7Ci0JCQlpZiAocHVkX2h1Z2UoKnB1ZCkpIHsKLQkJCQlodmFfdCBodmEgPSBnZm5fdG9faHZhKGt2bSwgYWRkciA+PiBQQUdFX1NISUZUKTsKLQkJCQlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYygodm9pZCopaHZhLCBQVURfU0laRSk7Ci0JCQl9IGVsc2UgeworCQkJaWYgKHB1ZF9odWdlKCpwdWQpKQorCQkJCWt2bV9mbHVzaF9kY2FjaGVfcHVkKCpwdWQpOworCQkJZWxzZQogCQkJCXN0YWdlMl9mbHVzaF9wbWRzKGt2bSwgcHVkLCBhZGRyLCBuZXh0KTsKLQkJCX0KIAkJfQogCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogfQpAQCAtMjc4LDcgKzMzMCw3IEBACiAgKiBHbyB0aHJvdWdoIHRoZSBzdGFnZSAyIHBhZ2UgdGFibGVzIGFuZCBpbnZhbGlkYXRlIGFueSBjYWNoZSBsaW5lcwogICogYmFja2luZyBtZW1vcnkgYWxyZWFkeSBtYXBwZWQgdG8gdGhlIFZNLgogICovCi12b2lkIHN0YWdlMl9mbHVzaF92bShzdHJ1Y3Qga3ZtICprdm0pCitzdGF0aWMgdm9pZCBzdGFnZTJfZmx1c2hfdm0oc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzOwogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CkBAIC05MDUsNiArOTU3LDEyIEBACiAJcmV0dXJuICFwZm5fdmFsaWQocGZuKTsKIH0KIAorc3RhdGljIHZvaWQgY29oZXJlbnRfY2FjaGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBmbl90IHBmbiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIGJvb2wgdW5jYWNoZWQpCit7CisJX19jb2hlcmVudF9jYWNoZV9ndWVzdF9wYWdlKHZjcHUsIHBmbiwgc2l6ZSwgdW5jYWNoZWQpOworfQorCiBzdGF0aWMgaW50IHVzZXJfbWVtX2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgZmF1bHRfaXBhLAogCQkJICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LCB1bnNpZ25lZCBsb25nIGh2YSwKIAkJCSAgdW5zaWduZWQgbG9uZyBmYXVsdF9zdGF0dXMpCkBAIC05OTQsOCArMTA1Miw3IEBACiAJCQlrdm1fc2V0X3MycG1kX3dyaXRhYmxlKCZuZXdfcG1kKTsKIAkJCWt2bV9zZXRfcGZuX2RpcnR5KHBmbik7CiAJCX0KLQkJY29oZXJlbnRfY2FjaGVfZ3Vlc3RfcGFnZSh2Y3B1LCBodmEgJiBQTURfTUFTSywgUE1EX1NJWkUsCi0JCQkJCSAgZmF1bHRfaXBhX3VuY2FjaGVkKTsKKwkJY29oZXJlbnRfY2FjaGVfZ3Vlc3RfcGFnZSh2Y3B1LCBwZm4sIFBNRF9TSVpFLCBmYXVsdF9pcGFfdW5jYWNoZWQpOwogCQlyZXQgPSBzdGFnZTJfc2V0X3BtZF9odWdlKGt2bSwgbWVtY2FjaGUsIGZhdWx0X2lwYSwgJm5ld19wbWQpOwogCX0gZWxzZSB7CiAJCXB0ZV90IG5ld19wdGUgPSBwZm5fcHRlKHBmbiwgbWVtX3R5cGUpOwpAQCAtMTAwMyw4ICsxMDYwLDcgQEAKIAkJCWt2bV9zZXRfczJwdGVfd3JpdGFibGUoJm5ld19wdGUpOwogCQkJa3ZtX3NldF9wZm5fZGlydHkocGZuKTsKIAkJfQotCQljb2hlcmVudF9jYWNoZV9ndWVzdF9wYWdlKHZjcHUsIGh2YSwgUEFHRV9TSVpFLAotCQkJCQkgIGZhdWx0X2lwYV91bmNhY2hlZCk7CisJCWNvaGVyZW50X2NhY2hlX2d1ZXN0X3BhZ2UodmNwdSwgcGZuLCBQQUdFX1NJWkUsIGZhdWx0X2lwYV91bmNhY2hlZCk7CiAJCXJldCA9IHN0YWdlMl9zZXRfcHRlKGt2bSwgbWVtY2FjaGUsIGZhdWx0X2lwYSwgJm5ld19wdGUsCiAJCQlwZ3Byb3RfdmFsKG1lbV90eXBlKSA9PSBwZ3Byb3RfdmFsKFBBR0VfUzJfREVWSUNFKSk7CiAJfQpAQCAtMTQxMSwzICsxNDY3LDcxIEBACiAJdW5tYXBfc3RhZ2UyX3JhbmdlKGt2bSwgZ3BhLCBzaXplKTsKIAlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7CiB9CisKKy8qCisgKiBTZWUgbm90ZSBhdCBBUk12NyBBUk0gQjEuMTQuNCAoVEw7RFI6IFMvVyBvcHMgYXJlIG5vdCBlYXNpbHkgdmlydHVhbGl6ZWQpLgorICoKKyAqIE1haW4gcHJvYmxlbXM6CisgKiAtIFMvVyBvcHMgYXJlIGxvY2FsIHRvIGEgQ1BVIChub3QgYnJvYWRjYXN0KQorICogLSBXZSBoYXZlIGxpbmUgbWlncmF0aW9uIGJlaGluZCBvdXIgYmFjayAoc3BlY3VsYXRpb24pCisgKiAtIFN5c3RlbSBjYWNoZXMgZG9uJ3Qgc3VwcG9ydCBTL1cgYXQgYWxsIChkYW1uISkKKyAqCisgKiBJbiB0aGUgZmFjZSBvZiB0aGUgYWJvdmUsIHRoZSBiZXN0IHdlIGNhbiBkbyBpcyB0byB0cnkgYW5kIGNvbnZlcnQKKyAqIFMvVyBvcHMgdG8gVkEgb3BzLiBCZWNhdXNlIHRoZSBndWVzdCBpcyBub3QgYWxsb3dlZCB0byBpbmZlciB0aGUKKyAqIFMvVyB0byBQQSBtYXBwaW5nLCBpdCBjYW4gb25seSB1c2UgUy9XIHRvIG51a2UgdGhlIHdob2xlIGNhY2hlLAorICogd2hpY2ggaXMgYSByYXRoZXIgZ29vZCB0aGluZyBmb3IgdXMuCisgKgorICogQWxzbywgaXQgaXMgb25seSB1c2VkIHdoZW4gdHVybmluZyBjYWNoZXMgb24vb2ZmICgiVGhlIGV4cGVjdGVkCisgKiB1c2FnZSBvZiB0aGUgY2FjaGUgbWFpbnRlbmFuY2UgaW5zdHJ1Y3Rpb25zIHRoYXQgb3BlcmF0ZSBieSBzZXQvd2F5CisgKiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNhY2hlIG1haW50ZW5hbmNlIGluc3RydWN0aW9ucyBhc3NvY2lhdGVkCisgKiB3aXRoIHRoZSBwb3dlcmRvd24gYW5kIHBvd2VydXAgb2YgY2FjaGVzLCBpZiB0aGlzIGlzIHJlcXVpcmVkIGJ5CisgKiB0aGUgaW1wbGVtZW50YXRpb24uIikuCisgKgorICogV2UgdXNlIHRoZSBmb2xsb3dpbmcgcG9saWN5OgorICoKKyAqIC0gSWYgd2UgdHJhcCBhIFMvVyBvcGVyYXRpb24sIHdlIGVuYWJsZSBWTSB0cmFwcGluZyB0byBkZXRlY3QKKyAqICAgY2FjaGVzIGJlaW5nIHR1cm5lZCBvbi9vZmYsIGFuZCBkbyBhIGZ1bGwgY2xlYW4uCisgKgorICogLSBXZSBmbHVzaCB0aGUgY2FjaGVzIG9uIGJvdGggY2FjaGVzIGJlaW5nIHR1cm5lZCBvbiBhbmQgb2ZmLgorICoKKyAqIC0gT25jZSB0aGUgY2FjaGVzIGFyZSBlbmFibGVkLCB3ZSBzdG9wIHRyYXBwaW5nIFZNIG9wcy4KKyAqLwordm9pZCBrdm1fc2V0X3dheV9mbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgbG9uZyBoY3IgPSB2Y3B1X2dldF9oY3IodmNwdSk7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UgZG8gYSBTL1cgb3BlcmF0aW9uCisJICogKGkuZS4gSENSX1RWTSBub3Qgc2V0KSBmbHVzaCB0aGUgd2hvbGUgbWVtb3J5LCBhbmQgc2V0IHRoZQorCSAqIFZNIHRyYXBwaW5nLgorCSAqCisJICogT3RoZXJ3aXNlLCByZWx5IG9uIHRoZSBWTSB0cmFwcGluZyB0byB3YWl0IGZvciB0aGUgTU1VICsKKwkgKiBDYWNoZXMgdG8gYmUgdHVybmVkIG9mZi4gQXQgdGhhdCBwb2ludCwgd2UnbGwgYmUgYWJsZSB0bworCSAqIGNsZWFuIHRoZSBjYWNoZXMgYWdhaW4uCisJICovCisJaWYgKCEoaGNyICYgSENSX1RWTSkpIHsKKwkJdHJhY2Vfa3ZtX3NldF93YXlfZmx1c2goKnZjcHVfcGModmNwdSksCisJCQkJCXZjcHVfaGFzX2NhY2hlX2VuYWJsZWQodmNwdSkpOworCQlzdGFnZTJfZmx1c2hfdm0odmNwdS0+a3ZtKTsKKwkJdmNwdV9zZXRfaGNyKHZjcHUsIGhjciB8IEhDUl9UVk0pOworCX0KK30KKwordm9pZCBrdm1fdG9nZ2xlX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YXNfZW5hYmxlZCkKK3sKKwlib29sIG5vd19lbmFibGVkID0gdmNwdV9oYXNfY2FjaGVfZW5hYmxlZCh2Y3B1KTsKKworCS8qCisJICogSWYgc3dpdGNoaW5nIHRoZSBNTVUrY2FjaGVzIG9uLCBuZWVkIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlcy4KKwkgKiBJZiBzd2l0Y2hpbmcgaXQgb2ZmLCBuZWVkIHRvIGNsZWFuIHRoZSBjYWNoZXMuCisJICogQ2xlYW4gKyBpbnZhbGlkYXRlIGRvZXMgdGhlIHRyaWNrIGFsd2F5cy4KKwkgKi8KKwlpZiAobm93X2VuYWJsZWQgIT0gd2FzX2VuYWJsZWQpCisJCXN0YWdlMl9mbHVzaF92bSh2Y3B1LT5rdm0pOworCisJLyogQ2FjaGVzIGFyZSBub3cgb24sIHN0b3AgdHJhcHBpbmcgVk0gb3BzICh1bnRpbCBhIFMvVyBvcCkgKi8KKwlpZiAobm93X2VuYWJsZWQpCisJCXZjcHVfc2V0X2hjcih2Y3B1LCB2Y3B1X2dldF9oY3IodmNwdSkgJiB+SENSX1RWTSk7CisKKwl0cmFjZV9rdm1fdG9nZ2xlX2NhY2hlKCp2Y3B1X3BjKHZjcHUpLCB3YXNfZW5hYmxlZCwgbm93X2VuYWJsZWQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL3RyYWNlLmggYi9hcmNoL2FybS9rdm0vdHJhY2UuaAppbmRleCBiMWQ2NDBmLi5iNmE2ZTcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rdm0vdHJhY2UuaAorKysgYi9hcmNoL2FybS9rdm0vdHJhY2UuaApAQCAtMjIzLDYgKzIyMyw0NSBAQAogCQkgIF9fZW50cnktPnZjcHVfcGMsIF9fZW50cnktPnIwLCBfX2VudHJ5LT5pbW0pCiApOwogCitUUkFDRV9FVkVOVChrdm1fc2V0X3dheV9mbHVzaCwKKwkgICAgVFBfUFJPVE8odW5zaWduZWQgbG9uZyB2Y3B1X3BjLCBib29sIGNhY2hlKSwKKwkgICAgVFBfQVJHUyh2Y3B1X3BjLCBjYWNoZSksCisKKwkgICAgVFBfU1RSVUNUX19lbnRyeSgKKwkJICAgIF9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXZjcHVfcGMJCSkKKwkJICAgIF9fZmllbGQoCWJvb2wsCQljYWNoZQkJKQorCSAgICApLAorCisJICAgIFRQX2Zhc3RfYXNzaWduKAorCQkgICAgX19lbnRyeS0+dmNwdV9wYwkJPSB2Y3B1X3BjOworCQkgICAgX19lbnRyeS0+Y2FjaGUJCT0gY2FjaGU7CisJICAgICksCisKKwkgICAgVFBfcHJpbnRrKCJTL1cgZmx1c2ggYXQgMHglMDE2bHggKGNhY2hlICVzKSIsCisJCSAgICAgIF9fZW50cnktPnZjcHVfcGMsIF9fZW50cnktPmNhY2hlID8gIm9uIiA6ICJvZmYiKQorKTsKKworVFJBQ0VfRVZFTlQoa3ZtX3RvZ2dsZV9jYWNoZSwKKwkgICAgVFBfUFJPVE8odW5zaWduZWQgbG9uZyB2Y3B1X3BjLCBib29sIHdhcywgYm9vbCBub3cpLAorCSAgICBUUF9BUkdTKHZjcHVfcGMsIHdhcywgbm93KSwKKworCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAorCQkgICAgX19maWVsZCgJdW5zaWduZWQgbG9uZywJdmNwdV9wYwkJKQorCQkgICAgX19maWVsZCgJYm9vbCwJCXdhcwkJKQorCQkgICAgX19maWVsZCgJYm9vbCwJCW5vdwkJKQorCSAgICApLAorCisJICAgIFRQX2Zhc3RfYXNzaWduKAorCQkgICAgX19lbnRyeS0+dmNwdV9wYwkJPSB2Y3B1X3BjOworCQkgICAgX19lbnRyeS0+d2FzCQk9IHdhczsKKwkJICAgIF9fZW50cnktPm5vdwkJPSBub3c7CisJICAgICksCisKKwkgICAgVFBfcHJpbnRrKCJWTSBvcCBhdCAweCUwMTZseCAoY2FjaGUgd2FzICVzLCBub3cgJXMpIiwKKwkJICAgICAgX19lbnRyeS0+dmNwdV9wYywgX19lbnRyeS0+d2FzID8gIm9uIiA6ICJvZmYiLAorCQkgICAgICBfX2VudHJ5LT5ub3cgPyAib24iIDogIm9mZiIpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0tWTV9IICovCiAKICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1zYW1hNS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbWE1LmMKaW5kZXggOGZiOWVmNS4uOTdmNzM2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbWE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbWE1LmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMjYsOCArMjcsMjUgQEAKIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAorc3RhdGljIGludCBrc3o4MDgxX3BoeV9maXh1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQoreworCWludCB2YWx1ZTsKKworCXZhbHVlID0gcGh5X3JlYWQocGh5LCAweDE2KTsKKwl2YWx1ZSAmPSB+MHgyMDsKKwlwaHlfd3JpdGUocGh5LCAweDE2LCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHNhbWE1X2R0X2RldmljZV9pbml0KHZvaWQpCiB7CisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiYXRtZWwsc2FtYTVkNGVrIikgJiYKKwkgICBJU19FTkFCTEVEKENPTkZJR19QSFlMSUIpKSB7CisJCXBoeV9yZWdpc3Rlcl9maXh1cF9mb3JfaWQoImZjMDI4MDAwLmV0aGVybmU6MDAiLAorCQkJCQkJa3N6ODA4MV9waHlfZml4dXApOworCX0KKwogCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZxLmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnEuYwppbmRleCA1OTUxNjYwLi4yZGFlZjYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnEuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCXBvc3RfZGl2X3RhYmxlWzFdLmRpdiA9IDE7CiAJCXBvc3RfZGl2X3RhYmxlWzJdLmRpdiA9IDE7CiAJCXZpZGVvX2Rpdl90YWJsZVsxXS5kaXYgPSAxOwotCQl2aWRlb19kaXZfdGFibGVbMl0uZGl2ID0gMTsKKwkJdmlkZW9fZGl2X3RhYmxlWzNdLmRpdiA9IDE7CiAJfQogCiAJY2xrW0lNWDZRRExfUExMMV9CWVBBU1NfU1JDXSA9IGlteF9jbGtfbXV4KCJwbGwxX2J5cGFzc19zcmMiLCBiYXNlICsgMHgwMCwgMTQsIDIsIHBsbF9ieXBhc3Nfc3JjX3NlbHMsIEFSUkFZX1NJWkUocGxsX2J5cGFzc19zcmNfc2VscykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZzeC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZzeC5jCmluZGV4IDE3MzU0YTEuLjVhM2U1YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2c3guYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstaW14NnN4LmMKQEAgLTU1OCw2ICs1NTgsOSBAQAogCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19HUFVfQ09SRV9TRUxdLCBjbGtzW0lNWDZTWF9DTEtfUExMM19QRkQwXSk7CiAJY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xLX0dQVV9BWElfU0VMXSwgY2xrc1tJTVg2U1hfQ0xLX1BMTDNfUEZEMF0pOwogCisJY2xrX3NldF9wYXJlbnQoY2xrc1tJTVg2U1hfQ0xLX1FTUEkxX1NFTF0sIGNsa3NbSU1YNlNYX0NMS19QTEwyX0JVU10pOworCWNsa19zZXRfcGFyZW50KGNsa3NbSU1YNlNYX0NMS19RU1BJMl9TRUxdLCBjbGtzW0lNWDZTWF9DTEtfUExMMl9CVVNdKTsKKwogCS8qIFNldCBpbml0aWFsIHBvd2VyIG1vZGUgKi8KIAlpbXg2cV9zZXRfbHBtKFdBSVRfQ0xPQ0tFRCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYwppbmRleCAzNTg1Y2IzLi5jY2VmODgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMKQEAgLTE5MCw2ICsxOTAsMTMgQEAKIAlhcmNoX2lvcmVtYXBfY2FsbGVyID0gYXJtYWRhX3BjaWVfd2FfaW9yZW1hcF9jYWxsZXI7CiAKIAkvKgorCSAqIFdlIHNob3VsZCBzd2l0Y2ggdGhlIFBMMzEwIHRvIEkvTyBjb2hlcmVuY3kgbW9kZSBvbmx5IGlmCisJICogSS9PIGNvaGVyZW5jeSBpcyBhY3R1YWxseSBlbmFibGVkLgorCSAqLworCWlmICghY29oZXJlbmN5X2F2YWlsYWJsZSgpKQorCQlyZXR1cm47CisKKwkvKgogCSAqIEFkZCB0aGUgUEwzMTAgcHJvcGVydHkgImFybSxpby1jb2hlcmVudCIuIFRoaXMgbWFrZXMgc3VyZSB0aGUKIAkgKiBvdXRlciBzeW5jIG9wZXJhdGlvbiBpcyBub3QgdXNlZCwgd2hpY2ggYWxsb3dzIHRvCiAJICogd29ya2Fyb3VuZCB0aGUgc3lzdGVtIGVycmF0dW0gdGhhdCBjYXVzZXMgZGVhZGxvY2tzIHdoZW4KQEAgLTI0Niw5ICsyNTMsMTQgQEAKIAlyZXR1cm4gdHlwZTsKIH0KIAorLyoKKyAqIEFzIGEgcHJlY2F1dGlvbiwgd2UgY3VycmVudGx5IGNvbXBsZXRlbHkgZGlzYWJsZSBoYXJkd2FyZSBJL08KKyAqIGNvaGVyZW5jeSwgdW50aWwgZW5vdWdoIHRlc3RpbmcgaXMgZG9uZSB3aXRoIGF1dG9tYXRpYyBJL08KKyAqIHN5bmNocm9uaXphdGlvbiBiYXJyaWVycyB0byB2YWxpZGF0ZSB0aGF0IGl0IGlzIGEgcHJvcGVyIHNvbHV0aW9uLgorICovCiBpbnQgY29oZXJlbmN5X2F2YWlsYWJsZSh2b2lkKQogewotCXJldHVybiBjb2hlcmVuY3lfdHlwZSgpICE9IENPSEVSRU5DWV9GQUJSSUNfVFlQRV9OT05FOworCXJldHVybiBmYWxzZTsKIH0KIAogaW50IF9faW5pdCBjb2hlcmVuY3lfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwppbmRleCA2MDgwNzlhLi5iNjFjMDQ5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKQEAgLTc3LDYgKzc3LDI0IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCisvKiBTb21lIGJvYXJkcyBuZWVkIGJvYXJkIG5hbWUgZm9yIGxlZ2FjeSB1c2Vyc3BhY2UgaW4gL3Byb2MvY3B1aW5mbyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG45MDBfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0geworCSJub2tpYSxvbWFwMy1uOTAwIiwKKwlOVUxMLAorfTsKKworRFRfTUFDSElORV9TVEFSVChPTUFQM19OOTAwX0RULCAiTm9raWEgUlgtNTEgYm9hcmQiKQorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAorCS5tYXBfaW8JCT0gb21hcDNfbWFwX2lvLAorCS5pbml0X2Vhcmx5CT0gb21hcDM0MzBfaW5pdF9lYXJseSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcF9nZW5lcmljX2luaXQsCisJLmluaXRfbGF0ZQk9IG9tYXAzX2luaXRfbGF0ZSwKKwkuaW5pdF90aW1lCT0gb21hcDNfc3luYzMya190aW1lcl9pbml0LAorCS5kdF9jb21wYXQJPSBuOTAwX2JvYXJkc19jb21wYXQsCisJLnJlc3RhcnQJPSBvbWFwM3h4eF9yZXN0YXJ0LAorTUFDSElORV9FTkQKKworLyogR2VuZXJpYyBvbWFwMyBib2FyZHMsIG1vc3QgYm9hcmRzIGNhbiB1c2UgdGhlc2UgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBvbWFwM19ib2FyZHNfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CiAJInRpLG9tYXAzNDMwIiwKIAkidGksb21hcDMiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLmgKaW5kZXggMzc3ZWVhOC4uNjRlNDRkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi5oCkBAIC0yMTEsNiArMjExLDcgQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlICpvbWFwMl9nZXRfbDNfZGV2aWNlKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKm9tYXA0X2dldF9kc3BfZGV2aWNlKHZvaWQpOwogCit1bnNpZ25lZCBpbnQgb21hcDRfeGxhdGVfaXJxKHVuc2lnbmVkIGludCBod2lycSk7CiB2b2lkIG9tYXBfZ2ljX29mX2luaXQodm9pZCk7CiAKICNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMApAQCAtMjQ5LDYgKzI1MCw3IEBACiBleHRlcm4gc3RydWN0IHNtcF9vcGVyYXRpb25zIG9tYXA0X3NtcF9vcHM7CiAKIGV4dGVybiB2b2lkIG9tYXA1X3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcDVfc2Vjb25kYXJ5X2h5cF9zdGFydHVwKHZvaWQpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX1BNKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuaAppbmRleCBhM2MwMTMzLi5hODBhYzJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuaApAQCAtMjg2LDYgKzI4NiwxMCBAQAogI2RlZmluZSBPTUFQNVhYWF9DT05UUk9MX1NUQVRVUyAgICAgICAgICAgICAgICAweDEzNAogI2RlZmluZSBPTUFQNV9ERVZJQ0VUWVBFX01BU0sgICAgICAgICAgKDB4NyA8PCA2KQogCisvKiBEUkE3WFggQ09OVFJPTCBDT1JFIEJPT1RTVFJBUCAqLworI2RlZmluZSBEUkE3X0NUUkxfQ09SRV9CT09UU1RSQVAJMHg2YzQKKyNkZWZpbmUgRFJBN19TUEVFRFNFTEVDVF9NQVNLCQkoMHgzIDw8IDgpCisKIC8qCiAgKiBSRVZJU0lUOiBUaGlzIGxpc3Qgb2YgcmVnaXN0ZXJzIGlzIG5vdCBjb21wcmVoZW5zaXZlIC0gdGhlcmUgYXJlIG1vcmUKICAqIHRoYXQgc2hvdWxkIGJlIGFkZGVkLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWhlYWRzbXAuUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1oZWFkc21wLlMKaW5kZXggNDk5M2Q0YmYuLjZkMWRmZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1oZWFkc21wLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWhlYWRzbXAuUwpAQCAtMjIsNiArMjIsNyBAQAogCiAvKiBQaHlzaWNhbCBhZGRyZXNzIG5lZWRlZCBzaW5jZSBNTVUgbm90IGVuYWJsZWQgeWV0IG9uIHNlY29uZGFyeSBjb3JlICovCiAjZGVmaW5lIEFVWF9DT1JFX0JPT1QwX1BBCQkJMHg0ODI4MTgwMAorI2RlZmluZSBBUElfSFlQX0VOVFJZCQkJCTB4MTAyCiAKIC8qCiAgKiBPTUFQNSBzcGVjaWZpYyBlbnRyeSBwb2ludCBmb3Igc2Vjb25kYXJ5IENQVSB0byBqdW1wIGZyb20gUk9NCkBAIC00MSw2ICs0MiwyNiBAQAogCWIJc2Vjb25kYXJ5X3N0YXJ0dXAKIEVORFBST0Mob21hcDVfc2Vjb25kYXJ5X3N0YXJ0dXApCiAvKgorICogU2FtZSBhcyBvbWFwNV9zZWNvbmRhcnlfc3RhcnR1cCBleGNlcHQgd2UgY2FsbCBpbnRvIHRoZSBST00gdG8KKyAqIGVuYWJsZSBIWVAgbW9kZSBmaXJzdC4gIFRoaXMgaXMgY2FsbGVkIGluc3RlYWQgb2YKKyAqIG9tYXA1X3NlY29uZGFyeV9zdGFydHVwIGlmIHRoZSBwcmltYXJ5IENQVSB3YXMgcHV0IGludG8gSFlQIG1vZGUgYnkKKyAqIHRoZSBib290IGxvYWRlci4KKyAqLworRU5UUlkob21hcDVfc2Vjb25kYXJ5X2h5cF9zdGFydHVwKQord2FpdF8yOglsZHIJcjIsID1BVVhfQ09SRV9CT09UMF9QQQlAIHJlYWQgZnJvbSBBdXhDb3JlQm9vdDAKKwlsZHIJcjAsIFtyMl0KKwltb3YJcjAsIHIwLCBsc3IgIzUKKwltcmMJcDE1LCAwLCByNCwgYzAsIGMwLCA1CisJYW5kCXI0LCByNCwgIzB4MGYKKwljbXAJcjAsIHI0CisJYm5lCXdhaXRfMgorCWxkcglyMTIsID1BUElfSFlQX0VOVFJZCisJYWRyCXIwLCBoeXBfYm9vdAorCXNtYwkjMAoraHlwX2Jvb3Q6CisJYglzZWNvbmRhcnlfc3RhcnR1cAorRU5EUFJPQyhvbWFwNV9zZWNvbmRhcnlfaHlwX3N0YXJ0dXApCisvKgogICogT01BUDQgc3BlY2lmaWMgZW50cnkgcG9pbnQgZm9yIHNlY29uZGFyeSBDUFUgdG8ganVtcCBmcm9tIFJPTQogICogY29kZS4gIFRoaXMgcm91dGluZSBhbHNvIHByb3ZpZGVzIGEgaG9sZGluZyBmbGFnIGludG8gd2hpY2gKICAqIHNlY29uZGFyeSBjb3JlIGlzIGhlbGQgdW50aWwgd2UncmUgcmVhZHkgZm9yIGl0IHRvIGluaXRpYWxpc2UuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMKaW5kZXggMjU2ZTg0ZS4uNTMwNWVjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLXNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1zbXAuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvYXJtLWdpYy5oPgogCiAjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KKyNpbmNsdWRlIDxhc20vdmlydC5oPgogCiAjaW5jbHVkZSAib21hcC1zZWN1cmUuaCIKICNpbmNsdWRlICJvbWFwLXdha2V1cGdlbi5oIgpAQCAtMjI3LDggKzIyOCwxNiBAQAogCWlmIChvbWFwX3NlY3VyZV9hcGlzX3N1cHBvcnQoKSkKIAkJb21hcF9hdXhjb3JlYm9vdF9hZGRyKHZpcnRfdG9fcGh5cyhzdGFydHVwX2FkZHIpKTsKIAllbHNlCi0JCXdyaXRlbF9yZWxheGVkKHZpcnRfdG9fcGh5cyhvbWFwNV9zZWNvbmRhcnlfc3RhcnR1cCksCi0JCQkgICAgICAgYmFzZSArIE9NQVBfQVVYX0NPUkVfQk9PVF8xKTsKKwkJLyoKKwkJICogSWYgdGhlIGJvb3QgQ1BVIGlzIGluIEhZUCBtb2RlIHRoZW4gc3RhcnQgc2Vjb25kYXJ5CisJCSAqIENQVSBpbiBIWVAgbW9kZSBhcyB3ZWxsLgorCQkgKi8KKwkJaWYgKChfX2Jvb3RfY3B1X21vZGUgJiBNT0RFX01BU0spID09IEhZUF9NT0RFKQorCQkJd3JpdGVsX3JlbGF4ZWQodmlydF90b19waHlzKG9tYXA1X3NlY29uZGFyeV9oeXBfc3RhcnR1cCksCisJCQkJICAgICAgIGJhc2UgKyBPTUFQX0FVWF9DT1JFX0JPT1RfMSk7CisJCWVsc2UKKwkJCXdyaXRlbF9yZWxheGVkKHZpcnRfdG9fcGh5cyhvbWFwNV9zZWNvbmRhcnlfc3RhcnR1cCksCisJCQkJICAgICAgIGJhc2UgKyBPTUFQX0FVWF9DT1JFX0JPT1RfMSk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtY29tbW9uLmMKaW5kZXggYjdjYjQ0YS4uY2MzMGU0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LWNvbW1vbi5jCkBAIC0yNTYsNiArMjU2LDM4IEBACiB9CiBvbWFwX2Vhcmx5X2luaXRjYWxsKG9tYXA0X3Nhcl9yYW1faW5pdCk7CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGdpY19tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1naWMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUtZ2ljIiwgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpnaWNfbm9kZTsKKwordW5zaWduZWQgaW50IG9tYXA0X3hsYXRlX2lycSh1bnNpZ25lZCBpbnQgaHdpcnEpCit7CisJc3RydWN0IG9mX3BoYW5kbGVfYXJncyBpcnFfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaWYgKCFnaWNfbm9kZSkKKwkJZ2ljX25vZGUgPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgZ2ljX21hdGNoKTsKKworCWlmIChXQVJOX09OKCFnaWNfbm9kZSkpCisJCXJldHVybiBod2lycTsKKworCWlycV9kYXRhLm5wID0gZ2ljX25vZGU7CisJaXJxX2RhdGEuYXJnc19jb3VudCA9IDM7CisJaXJxX2RhdGEuYXJnc1swXSA9IDA7CisJaXJxX2RhdGEuYXJnc1sxXSA9IGh3aXJxIC0gT01BUDQ0WFhfSVJRX0dJQ19TVEFSVDsKKwlpcnFfZGF0YS5hcmdzWzJdID0gSVJRX1RZUEVfTEVWRUxfSElHSDsKKworCWlycSA9IGlycV9jcmVhdGVfb2ZfbWFwcGluZygmaXJxX2RhdGEpOworCWlmIChXQVJOX09OKCFpcnEpKQorCQlpcnEgPSBod2lycTsKKworCXJldHVybiBpcnE7Cit9CisKIHZvaWQgX19pbml0IG9tYXBfZ2ljX29mX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwppbmRleCBjYmI5MDhkLi45MDI1ZmZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwpAQCAtMzUzNCw5ICszNTM0LDE1IEBACiAKIAltcHVfaXJxc19jbnQgPSBfY291bnRfbXB1X2lycXMob2gpOwogCWZvciAoaSA9IDA7IGkgPCBtcHVfaXJxc19jbnQ7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgaXJxOworCisJCWlmIChvaC0+eGxhdGVfaXJxKQorCQkJaXJxID0gb2gtPnhsYXRlX2lycSgob2gtPm1wdV9pcnFzICsgaSktPmlycSk7CisJCWVsc2UKKwkJCWlycSA9IChvaC0+bXB1X2lycXMgKyBpKS0+aXJxOwogCQkocmVzICsgciktPm5hbWUgPSAob2gtPm1wdV9pcnFzICsgaSktPm5hbWU7Ci0JCShyZXMgKyByKS0+c3RhcnQgPSAob2gtPm1wdV9pcnFzICsgaSktPmlycTsKLQkJKHJlcyArIHIpLT5lbmQgPSAob2gtPm1wdV9pcnFzICsgaSktPmlycTsKKwkJKHJlcyArIHIpLT5zdGFydCA9IGlycTsKKwkJKHJlcyArIHIpLT5lbmQgPSBpcnE7CiAJCShyZXMgKyByKS0+ZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTsKIAkJcisrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgKaW5kZXggMzVjYTZlZi4uNWI0MmZhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgKQEAgLTY3Niw2ICs2NzYsNyBAQAogCXNwaW5sb2NrX3QJCQlfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlub2RlOwogCXN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZgkqX21wdV9wb3J0OworCXVuc2lnbmVkIGludAkJCSgqeGxhdGVfaXJxKSh1bnNpZ25lZCBpbnQpOwogCXUxNgkJCQlmbGFnczsKIAl1OAkJCQltcHVfcnRfaWR4OwogCXU4CQkJCXJlc3BvbnNlX2xhdDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYwppbmRleCBjMzE0YjNjLi5mNWU2OGE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCkBAIC00NzksNiArNDc5LDcgQEAKIAkuY2xhc3MJCT0gJm9tYXA0NHh4X2RtYV9od21vZF9jbGFzcywKIAkuY2xrZG1fbmFtZQk9ICJsM19kbWFfY2xrZG0iLAogCS5tcHVfaXJxcwk9IG9tYXA0NHh4X2RtYV9zeXN0ZW1faXJxcywKKwkueGxhdGVfaXJxCT0gb21hcDRfeGxhdGVfaXJxLAogCS5tYWluX2Nsawk9ICJsM19kaXZfY2siLAogCS5wcmNtID0gewogCQkub21hcDQgPSB7CkBAIC02NDAsNiArNjQxLDcgQEAKIAkuY2xhc3MJCT0gJm9tYXA0NHh4X2Rpc3BjX2h3bW9kX2NsYXNzLAogCS5jbGtkbV9uYW1lCT0gImwzX2Rzc19jbGtkbSIsCiAJLm1wdV9pcnFzCT0gb21hcDQ0eHhfZHNzX2Rpc3BjX2lycXMsCisJLnhsYXRlX2lycQk9IG9tYXA0X3hsYXRlX2lycSwKIAkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfZHNzX2Rpc3BjX3NkbWFfcmVxcywKIAkubWFpbl9jbGsJPSAiZHNzX2Rzc19jbGsiLAogCS5wcmNtID0gewpAQCAtNjkzLDYgKzY5NSw3IEBACiAJLmNsYXNzCQk9ICZvbWFwNDR4eF9kc2lfaHdtb2RfY2xhc3MsCiAJLmNsa2RtX25hbWUJPSAibDNfZHNzX2Nsa2RtIiwKIAkubXB1X2lycXMJPSBvbWFwNDR4eF9kc3NfZHNpMV9pcnFzLAorCS54bGF0ZV9pcnEJPSBvbWFwNF94bGF0ZV9pcnEsCiAJLnNkbWFfcmVxcwk9IG9tYXA0NHh4X2Rzc19kc2kxX3NkbWFfcmVxcywKIAkubWFpbl9jbGsJPSAiZHNzX2Rzc19jbGsiLAogCS5wcmNtID0gewpAQCAtNzI2LDYgKzcyOSw3IEBACiAJLmNsYXNzCQk9ICZvbWFwNDR4eF9kc2lfaHdtb2RfY2xhc3MsCiAJLmNsa2RtX25hbWUJPSAibDNfZHNzX2Nsa2RtIiwKIAkubXB1X2lycXMJPSBvbWFwNDR4eF9kc3NfZHNpMl9pcnFzLAorCS54bGF0ZV9pcnEJPSBvbWFwNF94bGF0ZV9pcnEsCiAJLnNkbWFfcmVxcwk9IG9tYXA0NHh4X2Rzc19kc2kyX3NkbWFfcmVxcywKIAkubWFpbl9jbGsJPSAiZHNzX2Rzc19jbGsiLAogCS5wcmNtID0gewpAQCAtNzg0LDYgKzc4OCw3IEBACiAJICovCiAJLmZsYWdzCQk9IEhXTU9EX1NXU1VQX1NJRExFLAogCS5tcHVfaXJxcwk9IG9tYXA0NHh4X2Rzc19oZG1pX2lycXMsCisJLnhsYXRlX2lycQk9IG9tYXA0X3hsYXRlX2lycSwKIAkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfZHNzX2hkbWlfc2RtYV9yZXFzLAogCS5tYWluX2Nsawk9ICJkc3NfNDhtaHpfY2xrIiwKIAkucHJjbSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF81NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF81NHh4X2RhdGEuYwppbmRleCAzZTk1MjMwLi43YzNmYWMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNTR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzU0eHhfZGF0YS5jCkBAIC0yODgsNiArMjg4LDcgQEAKIAkuY2xhc3MJCT0gJm9tYXA1NHh4X2RtYV9od21vZF9jbGFzcywKIAkuY2xrZG1fbmFtZQk9ICJkbWFfY2xrZG0iLAogCS5tcHVfaXJxcwk9IG9tYXA1NHh4X2RtYV9zeXN0ZW1faXJxcywKKwkueGxhdGVfaXJxCT0gb21hcDRfeGxhdGVfaXJxLAogCS5tYWluX2Nsawk9ICJsM19pY2xrX2RpdiIsCiAJLnByY20gPSB7CiAJCS5vbWFwNCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAppbmRleCBhOGU0YjU4Li42MTYzZDY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCkBAIC00OTgsNiArNDk4LDcgQEAKIAl1OCBucl9pcnFzOwogCWNvbnN0IHN0cnVjdCBvbWFwX3ByY21faXJxICppcnFzOwogCWludCBpcnE7CisJdW5zaWduZWQgaW50ICgqeGxhdGVfaXJxKSh1bnNpZ25lZCBpbnQpOwogCXZvaWQgKCpyZWFkX3BlbmRpbmdfaXJxcykodW5zaWduZWQgbG9uZyAqZXZlbnRzKTsKIAl2b2lkICgqb2NwX2JhcnJpZXIpKHZvaWQpOwogCXZvaWQgKCpzYXZlX2FuZF9jbGVhcl9pcnFlbikodTMyICpzYXZlZF9tYXNrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmMKaW5kZXggY2MxNzBmYi4uNDA4YzY0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAkuaXJxcwkJCT0gb21hcDRfcHJjbV9pcnFzLAogCS5ucl9pcnFzCQk9IEFSUkFZX1NJWkUob21hcDRfcHJjbV9pcnFzKSwKIAkuaXJxCQkJPSAxMSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQsCisJLnhsYXRlX2lycQkJPSBvbWFwNF94bGF0ZV9pcnEsCiAJLnJlYWRfcGVuZGluZ19pcnFzCT0gJm9tYXA0NHh4X3BybV9yZWFkX3BlbmRpbmdfaXJxcywKIAkub2NwX2JhcnJpZXIJCT0gJm9tYXA0NHh4X3BybV9vY3BfYmFycmllciwKIAkuc2F2ZV9hbmRfY2xlYXJfaXJxZW4JPSAmb21hcDQ0eHhfcHJtX3NhdmVfYW5kX2NsZWFyX2lycWVuLApAQCAtNzUxLDggKzc1MiwxMCBAQAogCQl9CiAKIAkJLyogT25jZSBPTUFQNCBEVCBpcyBmaWxsZWQgYXMgd2VsbCAqLwotCQlpZiAoaXJxX251bSA+PSAwKQorCQlpZiAoaXJxX251bSA+PSAwKSB7CiAJCQlvbWFwNF9wcmNtX2lycV9zZXR1cC5pcnEgPSBpcnFfbnVtOworCQkJb21hcDRfcHJjbV9pcnFfc2V0dXAueGxhdGVfaXJxID0gTlVMTDsKKwkJfQogCX0KIAogCW9tYXA0NHh4X3BybV9lbmFibGVfaW9fd2FrZXVwKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybV9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCmluZGV4IDc3OTk0MGMuLmRlYTI4MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCkBAIC0xODcsNiArMTg3LDcgQEAKICAqLwogdm9pZCBvbWFwX3ByY21faXJxX2NsZWFudXAodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxOwogCWludCBpOwogCiAJaWYgKCFwcmNtX2lycV9zZXR1cCkgewpAQCAtMjExLDcgKzIxMiwxMSBAQAogCWtmcmVlKHByY21faXJxX3NldHVwLT5wcmlvcml0eV9tYXNrKTsKIAlwcmNtX2lycV9zZXR1cC0+cHJpb3JpdHlfbWFzayA9IE5VTEw7CiAKLQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihwcmNtX2lycV9zZXR1cC0+aXJxLCBOVUxMKTsKKwlpZiAocHJjbV9pcnFfc2V0dXAtPnhsYXRlX2lycSkKKwkJaXJxID0gcHJjbV9pcnFfc2V0dXAtPnhsYXRlX2lycShwcmNtX2lycV9zZXR1cC0+aXJxKTsKKwllbHNlCisJCWlycSA9IHByY21faXJxX3NldHVwLT5pcnE7CisJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoaXJxLCBOVUxMKTsKIAogCWlmIChwcmNtX2lycV9zZXR1cC0+YmFzZV9pcnEgPiAwKQogCQlpcnFfZnJlZV9kZXNjcyhwcmNtX2lycV9zZXR1cC0+YmFzZV9pcnEsCkBAIC0yNTksNiArMjY0LDcgQEAKIAlpbnQgb2Zmc2V0LCBpOwogCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYzsKIAlzdHJ1Y3QgaXJxX2NoaXBfdHlwZSAqY3Q7CisJdW5zaWduZWQgaW50IGlycTsKIAogCWlmICghaXJxX3NldHVwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI5OCw3ICszMDQsMTEgQEAKIAkJCQkxIDw8IChvZmZzZXQgJiAweDFmKTsKIAl9CiAKLQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihpcnFfc2V0dXAtPmlycSwgb21hcF9wcmNtX2lycV9oYW5kbGVyKTsKKwlpZiAoaXJxX3NldHVwLT54bGF0ZV9pcnEpCisJCWlycSA9IGlycV9zZXR1cC0+eGxhdGVfaXJxKGlycV9zZXR1cC0+aXJxKTsKKwllbHNlCisJCWlycSA9IGlycV9zZXR1cC0+aXJxOworCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKGlycSwgb21hcF9wcmNtX2lycV9oYW5kbGVyKTsKIAogCWlycV9zZXR1cC0+YmFzZV9pcnEgPSBpcnFfYWxsb2NfZGVzY3MoLTEsIDAsIGlycV9zZXR1cC0+bnJfcmVncyAqIDMyLAogCQkwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXIuYwppbmRleCA0ZjYxMTQ4Li43ZDQ1Yzg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci5jCkBAIC01NCw2ICs1NCw3IEBACiAKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJjb250cm9sLmgiCiAjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKICNpbmNsdWRlICJvbWFwLXNlY3VyZS5oIgogCkBAIC00OTYsNyArNDk3LDggQEAKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJc3RhdGljIHN0cnVjdCBjbGsgKnN5c19jbGs7CiAJdW5zaWduZWQgbG9uZyByYXRlOwotCXVuc2lnbmVkIGludCByZWcsIG51bSwgZGVuOworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgbG9uZyBsb25nIG51bSwgZGVuOwogCiAJYmFzZSA9IGlvcmVtYXAoUkVBTFRJTUVfQ09VTlRFUl9CQVNFLCBTWl8zMik7CiAJaWYgKCFiYXNlKSB7CkBAIC01MTEsMTMgKzUxMyw0MiBAQAogCX0KIAogCXJhdGUgPSBjbGtfZ2V0X3JhdGUoc3lzX2Nsayk7CisKKwlpZiAoc29jX2lzX2RyYTd4eCgpKSB7CisJCS8qCisJCSAqIEVycmF0YSBpODU2IHNheXMgdGhlIDMyLjc2OEtIeiBjcnlzdGFsIGRvZXMgbm90IHN0YXJ0IGF0CisJCSAqIHBvd2VyIG9uLCBzbyB0aGUgQ1BVIGZhbGxzIGJhY2sgdG8gYW4gZW11bGF0ZWQgMzJLSHogY2xvY2sKKwkJICogYmFzZWQgb24gc3lzY2xrIC8gNjEwIGluc3RlYWQuIFRoaXMgY2F1c2VzIHRoZSBtYXN0ZXIgY291bnRlcgorCQkgKiBmcmVxdWVuY3kgdG8gbm90IGJlIDYuMTQ0TUh6IGJ1dCBhdCBzeXNjbGsgLyA2MTAgKiAzNzUgLyAyCisJCSAqIChPUiBzeXNjbGsgKiA3NSAvIDI0NCkKKwkJICoKKwkJICogVGhpcyBhZmZlY3RzIGF0IGxlYXN0IHRoZSBEUkE3L0FNNTcyeCAxLjAsIDEuMSByZXZpc2lvbnMuCisJCSAqIE9mIGNvdXJzZSBhbnkgYm9hcmQgYnVpbHQgd2l0aG91dCBhIHBvcHVsYXRlZCAzMi43NjhLSHoKKwkJICogY3J5c3RhbCB3b3VsZCBhbHNvIG5lZWQgdGhpcyBmaXggZXZlbiBpZiB0aGUgQ1BVIGlzIGZpeGVkCisJCSAqIGxhdGVyLgorCQkgKgorCQkgKiBFaXRoZXIgY2FzZSBjYW4gYmUgZGV0ZWN0ZWQgYnkgdXNpbmcgdGhlIHR3byBzcGVlZHNlbGVjdCBiaXRzCisJCSAqIElmIHRoZXkgYXJlIG5vdCAwLCB0aGVuIHRoZSAzMi43NjhLSHogY2xvY2sgZHJpdmluZyB0aGUKKwkJICogY29hcnNlIGNvdW50ZXIgdGhhdCBjb3JyZWN0cyB0aGUgZmluZSBjb3VudGVyIGV2ZXJ5IHRpbWUgaXQKKwkJICogdGlja3MgaXMgYWN0dWFsbHkgcmF0ZS82MTAgcmF0aGVyIHRoYW4gMzIuNzY4S0h6IGFuZCB3ZQorCQkgKiBzaG91bGQgY29tcGVuc2F0ZSB0byBhdm9pZCB0aGUgNTcwcHBtIChhdCAyME1IeiwgbXVjaCB3b3JzZQorCQkgKiBhdCBvdGhlciByYXRlcykgdG9vIGZhc3Qgc3lzdGVtIHRpbWUuCisJCSAqLworCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoRFJBN19DVFJMX0NPUkVfQk9PVFNUUkFQKTsKKwkJaWYgKHJlZyAmIERSQTdfU1BFRURTRUxFQ1RfTUFTSykgeworCQkJbnVtID0gNzU7CisJCQlkZW4gPSAyNDQ7CisJCQlnb3RvIHN5c2NsazFfYmFzZWQ7CisJCX0KKwl9CisKIAkvKiBOdW1lcmF0b3IvZGVudW1lcmF0b3IgdmFsdWVzIHJlZmVyIFRSTSBSZWFsdGltZSBDb3VudGVyIHNlY3Rpb24gKi8KIAlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIDEyMDAwMDA6CisJY2FzZSAxMjAwMDAwMDoKIAkJbnVtID0gNjQ7CiAJCWRlbiA9IDEyNTsKIAkJYnJlYWs7Ci0JY2FzZSAxMzAwMDAwOgorCWNhc2UgMTMwMDAwMDA6CiAJCW51bSA9IDc2ODsKIAkJZGVuID0gMTYyNTsKIAkJYnJlYWs7CkBAIC01MjksMTEgKzU2MCwxMSBAQAogCQludW0gPSAxOTI7CiAJCWRlbiA9IDYyNTsKIAkJYnJlYWs7Ci0JY2FzZSAyNjAwMDAwOgorCWNhc2UgMjYwMDAwMDA6CiAJCW51bSA9IDM4NDsKIAkJZGVuID0gMTYyNTsKIAkJYnJlYWs7Ci0JY2FzZSAyNzAwMDAwOgorCWNhc2UgMjcwMDAwMDA6CiAJCW51bSA9IDI1NjsKIAkJZGVuID0gMTEyNTsKIAkJYnJlYWs7CkBAIC01NDUsNiArNTc2LDcgQEAKIAkJYnJlYWs7CiAJfQogCitzeXNjbGsxX2Jhc2VkOgogCS8qIFByb2dyYW0gbnVtZXJhdG9yIGFuZCBkZW51bWVyYXRvciByZWdpc3RlcnMgKi8KIAlyZWcgPSByZWFkbF9yZWxheGVkKGJhc2UgKyBJTkNSRU1FTlRFUl9OVU1FUkFUT1JfT0ZGU0VUKSAmCiAJCQlOVU1FUkFUT1JfREVOVU1FUkFUT1JfTUFTSzsKQEAgLTU1Niw3ICs1ODgsNyBAQAogCXJlZyB8PSBkZW47CiAJd3JpdGVsX3JlbGF4ZWQocmVnLCBiYXNlICsgSU5DUkVNRU5URVJfREVOVU1FUkFUT1JfUkVMT0FEX09GRlNFVCk7CiAKLQlhcmNoX3RpbWVyX2ZyZXEgPSAocmF0ZSAvIGRlbikgKiBudW07CisJYXJjaF90aW1lcl9mcmVxID0gRElWX1JPVU5EX1VQX1VMTChyYXRlICogbnVtLCBkZW4pOwogCXNldF9jbnRmcmVxKCk7CiAKIAlpb3VubWFwKGJhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90d2wtY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3R3bC1jb21tb24uYwppbmRleCA0NDU3ZTczLi4yOTJlY2EwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3R3bC1jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3R3bC1jb21tb24uYwpAQCAtNjYsMTkgKzY2LDI0IEBACiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKGJ1cywgY2xrcmF0ZSwgJnBtaWNfaTJjX2JvYXJkX2luZm8sIDEpOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKIHZvaWQgX19pbml0IG9tYXA0X3BtaWNfaW5pdChjb25zdCBjaGFyICpwbWljX3R5cGUsCiAJCSAgICBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhICpwbWljX2RhdGEsCiAJCSAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQogewogCS8qIFBNSUMgcGFydCovCisJdW5zaWduZWQgaW50IGlycTsKKwogCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzeXNfbmlycTEiLCBPTUFQX1BJTl9JTlBVVF9QVUxMVVAgfCBPTUFQX1BJTl9PRkZfV0FLRVVQRU5BQkxFKTsKIAlvbWFwX211eF9pbml0X3NpZ25hbCgiZnJlZl9jbGswX291dC5zeXNfZHJtX21zZWN1cmUiLCBPTUFQX1BJTl9PVVRQVVQpOwotCW9tYXBfcG1pY19pbml0KDEsIDQwMCwgcG1pY190eXBlLCA3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCwgcG1pY19kYXRhKTsKKwlpcnEgPSBvbWFwNF94bGF0ZV9pcnEoNyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpOworCW9tYXBfcG1pY19pbml0KDEsIDQwMCwgcG1pY190eXBlLCBpcnEsIHBtaWNfZGF0YSk7CiAKIAkvKiBSZWdpc3RlciBhZGRpdGlvbmFsIGRldmljZXMgb24gaTJjMSBidXMgaWYgbmVlZGVkICovCiAJaWYgKGRldmljZXMpCiAJCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGRldmljZXMsIG5yX2RldmljZXMpOwogfQorI2VuZGlmCiAKIHZvaWQgX19pbml0IG9tYXBfcG1pY19sYXRlX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcm9ja2NoaXAuYyBiL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcm9ja2NoaXAuYwppbmRleCBkMjI2YjcxLi5hNjExZjQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3JvY2tjaGlwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9yb2NrY2hpcC5jCkBAIC0xOSwxMSArMTksMzcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CiAjaW5jbHVkZSAiY29yZS5oIgogCisjZGVmaW5lIFJLMzI4OF9HUkZfU09DX0NPTjAgMHgyNDQKKworc3RhdGljIHZvaWQgX19pbml0IHJvY2tjaGlwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJyb2NrY2hpcCxyazMyODgiKSkgeworCQlzdHJ1Y3QgcmVnbWFwICpncmY7CisKKwkJLyoKKwkJICogRGlzYWJsZSBhdXRvIGp0YWcvc2RtbWMgc3dpdGNoaW5nIHRoYXQgY2F1c2VzIGlzc3VlcworCQkgKiB3aXRoIHRoZSBtbWMgY29udHJvbGxlcnMgbWFraW5nIHRoZW0gdW5yZWxpYWJsZQorCQkgKi8KKwkJZ3JmID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZSgicm9ja2NoaXAscmszMjg4LWdyZiIpOworCQlpZiAoIUlTX0VSUihncmYpKQorCQkJcmVnbWFwX3dyaXRlKGdyZiwgUkszMjg4X0dSRl9TT0NfQ09OMCwgMHgxMDAwMDAwMCk7CisJCWVsc2UKKwkJCXByX2Vycigicm9ja2NoaXA6IGNvdWxkIG5vdCBnZXQgZ3JmIHN5c2NvblxuIik7CisJfQorCisJb2ZfY2xrX2luaXQoTlVMTCk7CisJY2xvY2tzb3VyY2Vfb2ZfaW5pdCgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcm9ja2NoaXBfZHRfaW5pdCh2b2lkKQogewogCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKQEAgLTQyLDYgKzY4LDcgQEAKIERUX01BQ0hJTkVfU1RBUlQoUk9DS0NISVBfRFQsICJSb2NrY2hpcCBDb3J0ZXgtQTkgKERldmljZSBUcmVlKSIpCiAJLmwyY19hdXhfdmFsCT0gMCwKIAkubDJjX2F1eF9tYXNrCT0gfjAsCisJLmluaXRfdGltZQk9IHJvY2tjaGlwX3RpbWVyX2luaXQsCiAJLmR0X2NvbXBhdAk9IHJvY2tjaGlwX2JvYXJkX2R0X2NvbXBhdCwKIAkuaW5pdF9tYWNoaW5lCT0gcm9ja2NoaXBfZHRfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwZTZldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCmluZGV4IDY2ZjY3ODEuLjQ0NGYyMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFjaGlwLmg+CisjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9hcm0tZ2ljLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgpAQCAtMjczLDYgKzI3NSwyMiBAQAogCQkJCSAgICAgIHNpemVvZihhcGU2ZXZtX2xlZHNfcGRhdGEpKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGFwZTZldm1fbGVnYWN5X2luaXRfdGltZSh2b2lkKQoreworCS8qIERvIG5vdCBpbnZva2UgRFQtYmFzZWQgdGltZXJzIHZpYSBjbG9ja3NvdXJjZV9vZl9pbml0KCkgKi8KK30KKworc3RhdGljIHZvaWQgX19pbml0IGFwZTZldm1fbGVnYWN5X2luaXRfaXJxKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKDB4ZjEwMDEwMDAsIDB4MTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmMTAwMjAwMCwgMHgxMDAwKTsKKworCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOworCisJLyogRG8gbm90IGludm9rZSBEVC1iYXNlZCBpbnRlcnJ1cHQgY29kZSB2aWEgaXJxY2hpcF9pbml0KCkgKi8KK30KKworCiBzdGF0aWMgY29uc3QgY2hhciAqYXBlNmV2bV9ib2FyZHNfY29tcGF0X2R0W10gX19pbml0ZGF0YSA9IHsKIAkicmVuZXNhcyxhcGU2ZXZtIiwKIAlOVUxMLApAQCAtMjgwLDcgKzI5OCw5IEBACiAKIERUX01BQ0hJTkVfU1RBUlQoQVBFNkVWTV9EVCwgImFwZTZldm0iKQogCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKKwkuaW5pdF9pcnEgICAgICAgPSBhcGU2ZXZtX2xlZ2FjeV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gYXBlNmV2bV9hZGRfc3RhbmRhcmRfZGV2aWNlcywKIAkuaW5pdF9sYXRlCT0gc2htb2JpbGVfaW5pdF9sYXRlLAogCS5kdF9jb21wYXQJPSBhcGU2ZXZtX2JvYXJkc19jb21wYXRfZHQsCisJLmluaXRfdGltZQk9IGFwZTZldm1fbGVnYWN5X2luaXRfdGltZSwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMKaW5kZXggZjgxOTdlYi4uNjViMTI4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXIuYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxY2hpcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvYXJtLWdpYy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgpAQCAtODExLDYgKzgxMywxNiBAQAogCQkJCQkgIGxhZ2VyX2tzejgwNDFfZml4dXApOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgbGFnZXJfbGVnYWN5X2luaXRfaXJxKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKDB4ZjEwMDEwMDAsIDB4MTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmMTAwMjAwMCwgMHgxMDAwKTsKKworCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOworCisJLyogRG8gbm90IGludm9rZSBEVC1iYXNlZCBpbnRlcnJ1cHQgY29kZSB2aWEgaXJxY2hpcF9pbml0KCkgKi8KK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsYWdlcl9ib2FyZHNfY29tcGF0X2R0W10gX19pbml0Y29uc3QgPSB7CiAJInJlbmVzYXMsbGFnZXIiLAogCU5VTEwsCkBAIC04MTksNiArODMxLDcgQEAKIERUX01BQ0hJTkVfU1RBUlQoTEFHRVJfRFQsICJsYWdlciIpCiAJLnNtcAkJPSBzbXBfb3BzKHI4YTc3OTBfc21wX29wcyksCiAJLmluaXRfZWFybHkJPSBzaG1vYmlsZV9pbml0X2RlbGF5LAorCS5pbml0X2lycQk9IGxhZ2VyX2xlZ2FjeV9pbml0X2lycSwKIAkuaW5pdF90aW1lCT0gcmNhcl9nZW4yX3RpbWVyX2luaXQsCiAJLmluaXRfbWFjaGluZQk9IGxhZ2VyX2luaXQsCiAJLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc0MC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKaW5kZXggNzlhZDkzZC4uZDE5MWNmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKQEAgLTgwMCw3ICs4MDAsMTQgQEAKIAl2b2lkIF9faW9tZW0gKmludGNfbXNrX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhlNjkwMDA0MCwgMHgxMCk7CiAJdm9pZCBfX2lvbWVtICpwZmNfaW50YV9jdHJsID0gaW9yZW1hcF9ub2NhY2hlKDB4ZTYwNTgwN2MsIDB4NCk7CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9TSE1PQklMRV9MRUdBQ1kKKwl2b2lkIF9faW9tZW0gKmdpY19kaXN0X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhjMjgwMDAwMCwgMHgxMDAwKTsKKwl2b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZSgweGMyMDAwMDAwLCAweDEwMDApOworCisJZ2ljX2luaXQoMCwgMjksIGdpY19kaXN0X2Jhc2UsIGdpY19jcHVfYmFzZSk7CisjZWxzZQogCWlycWNoaXBfaW5pdCgpOworI2VuZGlmCiAKIAkvKiByb3V0ZSBzaWduYWxzIHRvIEdJQyAqLwogCWlvd3JpdGUzMigweDAsIHBmY19pbnRhX2N0cmwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3Nzc4LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYwppbmRleCAxNzBiZDE0Li5jZWY4ODk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYwpAQCAtNTc2LDExICs1NzYsMTggQEAKIHZvaWQgX19pbml0IHI4YTc3NzhfaW5pdF9pcnFfZHQodm9pZCkKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmZTcwMDAwMCwgMHgwMDEwMDAwMCk7CisjaWZkZWYgQ09ORklHX0FSQ0hfU0hNT0JJTEVfTEVHQUNZCisJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKDB4ZmU0MzgwMDAsIDB4MTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmZTQzMDAwMCwgMHgxMDAwKTsKKyNlbmRpZgogCiAJQlVHX09OKCFiYXNlKTsKIAorI2lmZGVmIENPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWQorCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOworI2Vsc2UKIAlpcnFjaGlwX2luaXQoKTsKLQorI2VuZGlmCiAJLyogcm91dGUgYWxsIGludGVycnVwdHMgdG8gQVJNICovCiAJX19yYXdfd3JpdGVsKDB4NzNmZmZmZmYsIGJhc2UgKyBJTlQyTlRTUjApOwogCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYXNlICsgSU5UMk5UU1IxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3Nzc5LmMKaW5kZXggNjE1NmQxNy4uMjdkY2VhZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCkBAIC03MjAsMTAgKzcyMCwxNyBAQAogCiB2b2lkIF9faW5pdCByOGE3Nzc5X2luaXRfaXJxX2R0KHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0FSQ0hfU0hNT0JJTEVfTEVHQUNZCisJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKDB4ZjAwMDEwMDAsIDB4MTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmMDAwMDEwMCwgMHgxMDAwKTsKKyNlbmRpZgogCWdpY19hcmNoX2V4dG4uaXJxX3NldF93YWtlID0gcjhhNzc3OV9zZXRfd2FrZTsKIAorI2lmZGVmIENPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWQorCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOworI2Vsc2UKIAlpcnFjaGlwX2luaXQoKTsKLQorI2VuZGlmCiAJLyogcm91dGUgYWxsIGludGVycnVwdHMgdG8gQVJNICovCiAJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIElOVDJOVFNSMCk7CiAJX19yYXdfd3JpdGVsKDB4M2ZmZmZmZmYsIElOVDJOVFNSMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yY2FyLWdlbjIuYwppbmRleCAzZGQ2ZWRkLi5jYzk0NzBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcmNhci1nZW4yLmMKQEAgLTEzMyw3ICsxMzMsOSBAQAogI2lmZGVmIENPTkZJR19DT01NT05fQ0xLCiAJcmNhcl9nZW4yX2Nsb2Nrc19pbml0KG1vZGUpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfU0hNT0JJTEVfTVVMVEkKIAljbG9ja3NvdXJjZV9vZl9pbml0KCk7CisjZW5kaWYKIH0KIAogc3RydWN0IG1lbW9yeV9yZXNlcnZlX2NvbmZpZyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczYTAuYwppbmRleCA5M2ViZTM0Li5mYjVlMWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3M2EwLmMKQEAgLTU5NSw2ICs1OTUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlbmVzYXNfaW50Y19pcnFwaW5fY29uZmlnIGlycXBpbjBfcGxhdGZvcm1fZGF0YSA9IHsKIAkuaXJxX2Jhc2UgPSBpcnFfcGluKDApLCAvKiBJUlEwIC0+IElSUTcgKi8KKwkuY29udHJvbF9wYXJlbnQgPSB0cnVlLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcnFwaW4wX3Jlc291cmNlc1tdID0gewpAQCAtNjU2LDYgKzY1Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVuZXNhc19pbnRjX2lycXBpbl9jb25maWcgaXJxcGluMl9wbGF0Zm9ybV9kYXRhID0gewogCS5pcnFfYmFzZSA9IGlycV9waW4oMTYpLCAvKiBJUlExNiAtPiBJUlEyMyAqLworCS5jb250cm9sX3BhcmVudCA9IHRydWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlycXBpbjJfcmVzb3VyY2VzW10gPSB7CkBAIC02ODYsNiArNjg4LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZW5lc2FzX2ludGNfaXJxcGluX2NvbmZpZyBpcnFwaW4zX3BsYXRmb3JtX2RhdGEgPSB7CiAJLmlycV9iYXNlID0gaXJxX3BpbigyNCksIC8qIElSUTI0IC0+IElSUTMxICovCisJLmNvbnRyb2xfcGFyZW50ID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJxcGluM19yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYwppbmRleCBmMWQwMjdhLi4wZWRmMmE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS90aW1lci5jCkBAIC03MCw2ICs3MCwxOCBAQAogCWlmICghbWF4X2ZyZXEpCiAJCXJldHVybjsKIAorI2lmZGVmIENPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWQorCS8qIE5vbi1tdWx0aXBsYXRmb3JtIHI4YTczYTQgU29DIGNhbm5vdCB1c2UgYXJjaCB0aW1lciBkdWUKKwkgKiB0byBHSUMgYmVpbmcgaW5pdGlhbGl6ZWQgZnJvbSBDIGFuZCBhcmNoIHRpbWVyIHZpYSBEVCAqLworCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInJlbmVzYXMscjhhNzNhNCIpKQorCQloYXNfYXJjaF90aW1lciA9IGZhbHNlOworCisJLyogTm9uLW11bHRpcGxhdGZvcm0gcjhhNzc5MCBTb0MgY2Fubm90IHVzZSBhcmNoIHRpbWVyIGR1ZQorCSAqIHRvIEdJQyBiZWluZyBpbml0aWFsaXplZCBmcm9tIEMgYW5kIGFyY2ggdGltZXIgdmlhIERUICovCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgicmVuZXNhcyxyOGE3NzkwIikpCisJCWhhc19hcmNoX3RpbWVyID0gZmFsc2U7CisjZW5kaWYKKwogCWlmICghaGFzX2FyY2hfdGltZXIgfHwgIUlTX0VOQUJMRUQoQ09ORklHX0FSTV9BUkNIX1RJTUVSKSkgewogCQlpZiAoaXNfYTdfYThfYTkpCiAJCQlzaG1vYmlsZV9zZXR1cF9kZWxheV9oeihtYXhfZnJlcSwgMSwgMyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwppbmRleCA3ODY0Nzk3Li5hNjczYzdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCisrKyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKQEAgLTE5NDAsMTggKzE5NDAsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXJtX2lvbW11X3JlbGVhc2VfbWFwcGluZyk7CiAKLS8qKgotICogYXJtX2lvbW11X2F0dGFjaF9kZXZpY2UKLSAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlcgotICogQG1hcHBpbmc6IGlvIGFkZHJlc3Mgc3BhY2UgbWFwcGluZyBzdHJ1Y3R1cmUgKHJldHVybmVkIGZyb20KLSAqCWFybV9pb21tdV9jcmVhdGVfbWFwcGluZykKLSAqCi0gKiBBdHRhY2hlcyBzcGVjaWZpZWQgaW8gYWRkcmVzcyBzcGFjZSBtYXBwaW5nIHRvIHRoZSBwcm92aWRlZCBkZXZpY2UsCi0gKiBNb3JlIHRoYW4gb25lIGNsaWVudCBtaWdodCBiZSBhdHRhY2hlZCB0byB0aGUgc2FtZSBpbyBhZGRyZXNzIHNwYWNlCi0gKiBtYXBwaW5nLgotICovCi1pbnQgYXJtX2lvbW11X2F0dGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyAqbWFwcGluZykKK3N0YXRpYyBpbnQgX19hcm1faW9tbXVfYXR0YWNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcgKm1hcHBpbmcpCiB7CiAJaW50IGVycjsKIApAQCAtMTk2NSwxNSArMTk1NSwzNSBAQAogCXByX2RlYnVnKCJBdHRhY2hlZCBJT01NVSBjb250cm9sbGVyIHRvICVzIGRldmljZS5cbiIsIGRldl9uYW1lKGRldikpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoYXJtX2lvbW11X2F0dGFjaF9kZXZpY2UpOwogCiAvKioKLSAqIGFybV9pb21tdV9kZXRhY2hfZGV2aWNlCisgKiBhcm1faW9tbXVfYXR0YWNoX2RldmljZQogICogQGRldjogdmFsaWQgc3RydWN0IGRldmljZSBwb2ludGVyCisgKiBAbWFwcGluZzogaW8gYWRkcmVzcyBzcGFjZSBtYXBwaW5nIHN0cnVjdHVyZSAocmV0dXJuZWQgZnJvbQorICoJYXJtX2lvbW11X2NyZWF0ZV9tYXBwaW5nKQogICoKLSAqIERldGFjaGVzIHRoZSBwcm92aWRlZCBkZXZpY2UgZnJvbSBhIHByZXZpb3VzbHkgYXR0YWNoZWQgbWFwLgorICogQXR0YWNoZXMgc3BlY2lmaWVkIGlvIGFkZHJlc3Mgc3BhY2UgbWFwcGluZyB0byB0aGUgcHJvdmlkZWQgZGV2aWNlLgorICogVGhpcyByZXBsYWNlcyB0aGUgZG1hIG9wZXJhdGlvbnMgKGRtYV9tYXBfb3BzIHBvaW50ZXIpIHdpdGggdGhlCisgKiBJT01NVSBhd2FyZSB2ZXJzaW9uLgorICoKKyAqIE1vcmUgdGhhbiBvbmUgY2xpZW50IG1pZ2h0IGJlIGF0dGFjaGVkIHRvIHRoZSBzYW1lIGlvIGFkZHJlc3Mgc3BhY2UKKyAqIG1hcHBpbmcuCiAgKi8KLXZvaWQgYXJtX2lvbW11X2RldGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGFybV9pb21tdV9hdHRhY2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcgKm1hcHBpbmcpCit7CisJaW50IGVycjsKKworCWVyciA9IF9fYXJtX2lvbW11X2F0dGFjaF9kZXZpY2UoZGV2LCBtYXBwaW5nKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2V0X2RtYV9vcHMoZGV2LCAmaW9tbXVfb3BzKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFybV9pb21tdV9hdHRhY2hfZGV2aWNlKTsKKworc3RhdGljIHZvaWQgX19hcm1faW9tbXVfZGV0YWNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRtYV9pb21tdV9tYXBwaW5nICptYXBwaW5nOwogCkBAIC0xOTg5LDYgKzE5OTksMTkgQEAKIAogCXByX2RlYnVnKCJEZXRhY2hlZCBJT01NVSBjb250cm9sbGVyIGZyb20gJXMgZGV2aWNlLlxuIiwgZGV2X25hbWUoZGV2KSk7CiB9CisKKy8qKgorICogYXJtX2lvbW11X2RldGFjaF9kZXZpY2UKKyAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlcgorICoKKyAqIERldGFjaGVzIHRoZSBwcm92aWRlZCBkZXZpY2UgZnJvbSBhIHByZXZpb3VzbHkgYXR0YWNoZWQgbWFwLgorICogVGhpcyB2b2lkcyB0aGUgZG1hIG9wZXJhdGlvbnMgKGRtYV9tYXBfb3BzIHBvaW50ZXIpCisgKi8KK3ZvaWQgYXJtX2lvbW11X2RldGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCV9fYXJtX2lvbW11X2RldGFjaF9kZXZpY2UoZGV2KTsKKwlzZXRfZG1hX29wcyhkZXYsIE5VTEwpOworfQogRVhQT1JUX1NZTUJPTF9HUEwoYXJtX2lvbW11X2RldGFjaF9kZXZpY2UpOwogCiBzdGF0aWMgc3RydWN0IGRtYV9tYXBfb3BzICphcm1fZ2V0X2lvbW11X2RtYV9tYXBfb3BzKGJvb2wgY29oZXJlbnQpCkBAIC0yMDExLDcgKzIwMzQsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKGFybV9pb21tdV9hdHRhY2hfZGV2aWNlKGRldiwgbWFwcGluZykpIHsKKwlpZiAoX19hcm1faW9tbXVfYXR0YWNoX2RldmljZShkZXYsIG1hcHBpbmcpKSB7CiAJCXByX3dhcm4oIkZhaWxlZCB0byBhdHRhY2hlZCBkZXZpY2UgJXMgdG8gSU9NTVVfbWFwcGluZ1xuIiwKIAkJCQlkZXZfbmFtZShkZXYpKTsKIAkJYXJtX2lvbW11X3JlbGVhc2VfbWFwcGluZyhtYXBwaW5nKTsKQEAgLTIwMjUsNyArMjA0OCw3IEBACiB7CiAJc3RydWN0IGRtYV9pb21tdV9tYXBwaW5nICptYXBwaW5nID0gZGV2LT5hcmNoZGF0YS5tYXBwaW5nOwogCi0JYXJtX2lvbW11X2RldGFjaF9kZXZpY2UoZGV2KTsKKwlfX2FybV9pb21tdV9kZXRhY2hfZGV2aWNlKGRldik7CiAJYXJtX2lvbW11X3JlbGVhc2VfbWFwcGluZyhtYXBwaW5nKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZHVtcC5jIGIvYXJjaC9hcm0vbW0vZHVtcC5jCmluZGV4IDU5NDI0OTMuLjlmZThlMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2R1bXAuYworKysgYi9hcmNoL2FybS9tbS9kdW1wLmMKQEAgLTIyMCw5ICsyMjAsNiBAQAogCXN0YXRpYyBjb25zdCBjaGFyIHVuaXRzW10gPSAiS01HVFBFIjsKIAl1NjQgcHJvdCA9IHZhbCAmIHBnX2xldmVsW2xldmVsXS5tYXNrOwogCi0JaWYgKGFkZHIgPCBVU0VSX1BHVEFCTEVTX0NFSUxJTkcpCi0JCXJldHVybjsKLQogCWlmICghc3QtPmxldmVsKSB7CiAJCXN0LT5sZXZlbCA9IGxldmVsOwogCQlzdC0+Y3VycmVudF9wcm90ID0gcHJvdDsKQEAgLTMwOCwxNSArMzA1LDEzIEBACiAJcGdkX3QgKnBnZCA9IHN3YXBwZXJfcGdfZGlyOwogCXN0cnVjdCBwZ19zdGF0ZSBzdDsKIAl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgaSwgcGdkb2ZmID0gVVNFUl9QR1RBQkxFU19DRUlMSU5HIC8gUEdESVJfU0laRTsKKwl1bnNpZ25lZCBpOwogCiAJbWVtc2V0KCZzdCwgMCwgc2l6ZW9mKHN0KSk7CiAJc3Quc2VxID0gbTsKIAlzdC5tYXJrZXIgPSBhZGRyZXNzX21hcmtlcnM7CiAKLQlwZ2QgKz0gcGdkb2ZmOwotCi0JZm9yIChpID0gcGdkb2ZmOyBpIDwgUFRSU19QRVJfUEdEOyBpKyssIHBnZCsrKSB7CisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BHRDsgaSsrLCBwZ2QrKykgewogCQlhZGRyID0gaSAqIFBHRElSX1NJWkU7CiAJCWlmICghcGdkX25vbmUoKnBnZCkpIHsKIAkJCXdhbGtfcHVkKCZzdCwgcGdkLCBhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2luaXQuYyBiL2FyY2gvYXJtL21tL2luaXQuYwppbmRleCA5OGFkOWM3Li4yNDk1YzhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC02NTgsOCArNjU4LDggQEAKIAkJLnN0YXJ0ICA9ICh1bnNpZ25lZCBsb25nKV9zdGV4dCwKIAkJLmVuZCAgICA9ICh1bnNpZ25lZCBsb25nKV9faW5pdF9iZWdpbiwKICNpZmRlZiBDT05GSUdfQVJNX0xQQUUKLQkJLm1hc2sgICA9IH5QTURfU0VDVF9SRE9OTFksCi0JCS5wcm90ICAgPSBQTURfU0VDVF9SRE9OTFksCisJCS5tYXNrICAgPSB+TF9QTURfU0VDVF9SRE9OTFksCisJCS5wcm90ICAgPSBMX1BNRF9TRUNUX1JET05MWSwKICNlbHNlCiAJCS5tYXNrICAgPSB+KFBNRF9TRUNUX0FQWCB8IFBNRF9TRUNUX0FQX1dSSVRFKSwKIAkJLnByb3QgICA9IFBNRF9TRUNUX0FQWCB8IFBNRF9TRUNUX0FQX1dSSVRFLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW11LmMgYi9hcmNoL2FybS9tbS9tbXUuYwppbmRleCBjZGE3YzQwLi40ZTZlZjg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbXUuYworKysgYi9hcmNoL2FybS9tbS9tbXUuYwpAQCAtMTMyOSw4ICsxMzI5LDggQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBtYXBfbG93bWVtKHZvaWQpCiB7CiAJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnOwotCXVuc2lnbmVkIGxvbmcga2VybmVsX3hfc3RhcnQgPSByb3VuZF9kb3duKF9fcGEoX3N0ZXh0KSwgU0VDVElPTl9TSVpFKTsKLQl1bnNpZ25lZCBsb25nIGtlcm5lbF94X2VuZCA9IHJvdW5kX3VwKF9fcGEoX19pbml0X2VuZCksIFNFQ1RJT05fU0laRSk7CisJcGh5c19hZGRyX3Qga2VybmVsX3hfc3RhcnQgPSByb3VuZF9kb3duKF9fcGEoX3N0ZXh0KSwgU0VDVElPTl9TSVpFKTsKKwlwaHlzX2FkZHJfdCBrZXJuZWxfeF9lbmQgPSByb3VuZF91cChfX3BhKF9faW5pdF9lbmQpLCBTRUNUSU9OX1NJWkUpOwogCiAJLyogTWFwIGFsbCB0aGUgbG93bWVtIG1lbW9yeSBiYW5rcy4gKi8KIAlmb3JfZWFjaF9tZW1ibG9jayhtZW1vcnksIHJlZykgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvTWFrZWZpbGUKaW5kZXggMWM0M2NlYy4uMDY2Njg4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L01ha2VmaWxlCkBAIC04NSw2ICs4NSw3IEBACiAjIFdlIHVzZSBNUlBST1BFUl9GSUxFUyBhbmQgQ0xFQU5fRklMRVMgbm93CiBhcmNoY2xlYW46CiAJJChRKSQoTUFLRSkgJChjbGVhbik9JChib290KQorCSQoUSkkKE1BS0UpICQoY2xlYW4pPSQoYm9vdCkvZHRzCiAKIGRlZmluZSBhcmNoaGVscAogICBlY2hvICAnKiBJbWFnZS5neiAgICAgIC0gQ29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UgKGFyY2gvJChBUkNIKS9ib290L0ltYWdlLmd6KScKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvTWFrZWZpbGUgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL01ha2VmaWxlCmluZGV4IDNiOGQ0MjcuLmM2MmIwZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9NYWtlZmlsZQpAQCAtMyw2ICszLDQgQEAKIGR0cy1kaXJzICs9IGFybQogZHRzLWRpcnMgKz0gY2F2aXVtCiAKLWFsd2F5cwkJOj0gJChkdGIteSkKIHN1YmRpci15CTo9ICQoZHRzLWRpcnMpCi1jbGVhbi1maWxlcwk6PSAqLmR0YgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vanVuby5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLmR0cwppbmRleCBjYjMwNzNlLi5kNDI5MTI5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLmR0cworKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLmR0cwpAQCAtMjIsNyArMjIsNyBAQAogCX07CiAKIAljaG9zZW4gewotCQlzdGRvdXQtcGF0aCA9ICZzb2NfdWFydDA7CisJCXN0ZG91dC1wYXRoID0gInNlcmlhbDA6MTE1MjAwbjgiOwogCX07CiAKIAlwc2NpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWcgYi9hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnCmluZGV4IGRkMzAxYmUuLjUzNzZkOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWcKKysrIGIvYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZwpAQCAtMSw2ICsxLDcgQEAKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0ZIQU5ETEU9eQogQ09ORklHX0FVRElUPXkKIENPTkZJR19OT19IWl9JRExFPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQpAQCAtMTMsMTQgKzE0LDEyIEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19SRVNPVVJDRV9DT1VOVEVSUz15CiBDT05GSUdfTUVNQ0c9eQogQ09ORklHX01FTUNHX1NXQVA9eQogQ09ORklHX01FTUNHX0tNRU09eQogQ09ORklHX0NHUk9VUF9IVUdFVExCPXkKICMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NIRURfQVVUT0dST1VQPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CkBAIC05Miw3ICs5MSw2IEBACiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKIENPTkZJR19WSVJUSU9fQ09OU09MRT15CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfSE1DX0RSViBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKIENPTkZJR19TUElfUEwwMjI9eQogQ09ORklHX0dQSU9fUEwwNjE9eQpAQCAtMTMzLDYgKzEzMSw4IEBACiBDT05GSUdfRVhUNF9GUz15CiBDT05GSUdfRkFOT1RJRlk9eQogQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUz15CitDT05GSUdfUVVPVEE9eQorQ09ORklHX0FVVE9GUzRfRlM9eQogQ09ORklHX0ZVU0VfRlM9eQogQ09ORklHX0NVU0U9eQogQ09ORklHX1ZGQVRfRlM9eQpAQCAtMTUyLDE0ICsxNTIsMTUgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUj15CiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfS0VZUz15CiBDT05GSUdfU0VDVVJJVFk9eQogQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPXkKIENPTkZJR19BUk02NF9DUllQVE89eQogQ09ORklHX0NSWVBUT19TSEExX0FSTTY0X0NFPXkKIENPTkZJR19DUllQVE9fU0hBMl9BUk02NF9DRT15CiBDT05GSUdfQ1JZUFRPX0dIQVNIX0FSTTY0X0NFPXkKLUNPTkZJR19DUllQVE9fQUVTX0FSTTY0X0NFPXkKIENPTkZJR19DUllQVE9fQUVTX0FSTTY0X0NFX0NDTT15CiBDT05GSUdfQ1JZUFRPX0FFU19BUk02NF9DRV9CTEs9eQogQ09ORklHX0NSWVBUT19BRVNfQVJNNjRfTkVPTl9CTEs9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hcmNoX3RpbWVyLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaAppbmRleCBiMWZhNGU2Li5mYmUwY2EzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaApAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHUuaAppbmRleCBhY2U3MDY4Li44ZTc5N2IyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1LmgKQEAgLTM5LDYgKzM5LDcgQEAKIAl1NjQJCXJlZ19pZF9hYTY0cGZyMDsKIAl1NjQJCXJlZ19pZF9hYTY0cGZyMTsKIAorCXUzMgkJcmVnX2lkX2RmcjA7CiAJdTMyCQlyZWdfaWRfaXNhcjA7CiAJdTMyCQlyZWdfaWRfaXNhcjE7CiAJdTMyCQlyZWdfaWRfaXNhcjI7CkBAIC01MSw2ICs1MiwxMCBAQAogCXUzMgkJcmVnX2lkX21tZnIzOwogCXUzMgkJcmVnX2lkX3BmcjA7CiAJdTMyCQlyZWdfaWRfcGZyMTsKKworCXUzMgkJcmVnX212ZnIwOworCXUzMgkJcmVnX212ZnIxOworCXUzMgkJcmVnX212ZnIyOwogfTsKIAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBjcHVpbmZvX2FybTY0LCBjcHVfZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggZDM0MTg5Yi4uOWNlM2U2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtNTIsMTMgKzUyLDE0IEBACiAJZGV2LT5hcmNoZGF0YS5kbWFfb3BzID0gb3BzOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZXRfYXJjaF9kbWFfY29oZXJlbnRfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NldHVwX2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX2Jhc2UsIHU2NCBzaXplLAorCQkJCSAgICAgIHN0cnVjdCBpb21tdV9vcHMgKmlvbW11LCBib29sIGNvaGVyZW50KQogewotCWRldi0+YXJjaGRhdGEuZG1hX2NvaGVyZW50ID0gdHJ1ZTsKLQlzZXRfZG1hX29wcyhkZXYsICZjb2hlcmVudF9zd2lvdGxiX2RtYV9vcHMpOwotCXJldHVybiAwOworCWRldi0+YXJjaGRhdGEuZG1hX2NvaGVyZW50ID0gY29oZXJlbnQ7CisJaWYgKGNvaGVyZW50KQorCQlzZXRfZG1hX29wcyhkZXYsICZjb2hlcmVudF9zd2lvdGxiX2RtYV9vcHMpOwogfQotI2RlZmluZSBzZXRfYXJjaF9kbWFfY29oZXJlbnRfb3BzCXNldF9hcmNoX2RtYV9jb2hlcmVudF9vcHMKKyNkZWZpbmUgYXJjaF9zZXR1cF9kbWFfb3BzCWFyY2hfc2V0dXBfZG1hX29wcwogCiAvKiBkbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaW4gYSBkcml2ZXIgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZXZpY2VfZG1hX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAppbmRleCA4MTI3ZTQ1Li4zY2I0Yzg1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCkBAIC00MSw2ICs0MSwxOCBAQAogc3RhdGljIGlubGluZSB2b2lkIHZjcHVfcmVzZXRfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl2Y3B1LT5hcmNoLmhjcl9lbDIgPSBIQ1JfR1VFU1RfRkxBR1M7CisJaWYgKHRlc3RfYml0KEtWTV9BUk1fVkNQVV9FTDFfMzJCSVQsIHZjcHUtPmFyY2guZmVhdHVyZXMpKQorCQl2Y3B1LT5hcmNoLmhjcl9lbDIgJj0gfkhDUl9SVzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZjcHVfZ2V0X2hjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUtPmFyY2guaGNyX2VsMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZjcHVfc2V0X2hjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgaGNyKQoreworCXZjcHUtPmFyY2guaGNyX2VsMiA9IGhjcjsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICp2Y3B1X3BjKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAwYjdkZmRiLi5hY2QxMDFhIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xMTYsOSArMTE2LDYgQEAKIAkgKiBBbnl0aGluZyB0aGF0IGlzIG5vdCB1c2VkIGRpcmVjdGx5IGZyb20gYXNzZW1ibHkgY29kZSBnb2VzCiAJICogaGVyZS4KIAkgKi8KLQkvKiBkY2FjaGUgc2V0L3dheSBvcGVyYXRpb24gcGVuZGluZyAqLwotCWludCBsYXN0X3BjcHU7Ci0JY3B1bWFza190IHJlcXVpcmVfZGNhY2hlX2ZsdXNoOwogCiAJLyogRG9uJ3QgcnVuIHRoZSBndWVzdCAqLwogCWJvb2wgcGF1c2U7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oCmluZGV4IDE0YTc0ZjEuLmFkY2Y0OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oCkBAIC0yNDMsMjQgKzI0Myw0NiBAQAogCXJldHVybiAodmNwdV9zeXNfcmVnKHZjcHUsIFNDVExSX0VMMSkgJiAwYjEwMSkgPT0gMGIxMDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb2hlcmVudF9jYWNoZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHZhX3QgaHZhLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkJICAgICBib29sIGlwYV91bmNhY2hlZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NvaGVyZW50X2NhY2hlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwZm5fdCBwZm4sCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCSAgICAgICBib29sIGlwYV91bmNhY2hlZCkKIHsKKwl2b2lkICp2YSA9IHBhZ2VfYWRkcmVzcyhwZm5fdG9fcGFnZShwZm4pKTsKKwogCWlmICghdmNwdV9oYXNfY2FjaGVfZW5hYmxlZCh2Y3B1KSB8fCBpcGFfdW5jYWNoZWQpCi0JCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKCh2b2lkICopaHZhLCBzaXplKTsKKwkJa3ZtX2ZsdXNoX2RjYWNoZV90b19wb2ModmEsIHNpemUpOwogCiAJaWYgKCFpY2FjaGVfaXNfYWxpYXNpbmcoKSkgewkJLyogUElQVCAqLwotCQlmbHVzaF9pY2FjaGVfcmFuZ2UoaHZhLCBodmEgKyBzaXplKTsKKwkJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXZhLAorCQkJCSAgICh1bnNpZ25lZCBsb25nKXZhICsgc2l6ZSk7CiAJfSBlbHNlIGlmICghaWNhY2hlX2lzX2Fpdml2dCgpKSB7CS8qIG5vbiBBU0lELXRhZ2dlZCBWSVZUICovCiAJCS8qIGFueSBraW5kIG9mIFZJUFQgY2FjaGUgKi8KIAkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAJfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fZmx1c2hfZGNhY2hlX3B0ZShwdGVfdCBwdGUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZShwdGUpOworCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKHBhZ2VfYWRkcmVzcyhwYWdlKSwgUEFHRV9TSVpFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX2ZsdXNoX2RjYWNoZV9wbWQocG1kX3QgcG1kKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gcG1kX3BhZ2UocG1kKTsKKwlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYyhwYWdlX2FkZHJlc3MocGFnZSksIFBNRF9TSVpFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX2ZsdXNoX2RjYWNoZV9wdWQocHVkX3QgcHVkKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gcHVkX3BhZ2UocHVkKTsKKwlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYyhwYWdlX2FkZHJlc3MocGFnZSksIFBVRF9TSVpFKTsKK30KKwogI2RlZmluZSBrdm1fdmlydF90b19waHlzKHgpCQlfX3ZpcnRfdG9fcGh5cygodW5zaWduZWQgbG9uZykoeCkpCiAKLXZvaWQgc3RhZ2UyX2ZsdXNoX3ZtKHN0cnVjdCBrdm0gKmt2bSk7Cit2b2lkIGt2bV9zZXRfd2F5X2ZsdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cit2b2lkIGt2bV90b2dnbGVfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHdhc19lbmFibGVkKTsKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX01NVV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZGYyMjMxNC4uMjEwZDYzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTI5OCw3ICsyOTgsNiBAQAogI2RlZmluZSBwZm5fcG1kKHBmbixwcm90KQkoX19wbWQoKChwaHlzX2FkZHJfdCkocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpKQogI2RlZmluZSBta19wbWQocGFnZSxwcm90KQlwZm5fcG1kKHBhZ2VfdG9fcGZuKHBhZ2UpLHByb3QpCiAKLSNkZWZpbmUgcG1kX3BhZ2UocG1kKSAgICAgICAgICAgcGZuX3RvX3BhZ2UoX19waHlzX3RvX3BmbihwbWRfdmFsKHBtZCkgJiBQSFlTX01BU0spKQogI2RlZmluZSBwdWRfd3JpdGUocHVkKQkJcHRlX3dyaXRlKHB1ZF9wdGUocHVkKSkKICNkZWZpbmUgcHVkX3BmbihwdWQpCQkoKChwdWRfdmFsKHB1ZCkgJiBQVURfTUFTSykgJiBQSFlTX01BU0spID4+IFBBR0VfU0hJRlQpCiAKQEAgLTQwMSw3ICs0MDAsNyBAQAogCXJldHVybiAocG1kX3QgKilwdWRfcGFnZV92YWRkcigqcHVkKSArIHBtZF9pbmRleChhZGRyKTsKIH0KIAotI2RlZmluZSBwdWRfcGFnZShwdWQpICAgICAgICAgICBwbWRfcGFnZShwdWRfcG1kKHB1ZCkpCisjZGVmaW5lIHB1ZF9wYWdlKHB1ZCkJCXBmbl90b19wYWdlKF9fcGh5c190b19wZm4ocHVkX3ZhbChwdWQpICYgUEhZU19NQVNLKSkKIAogI2VuZGlmCS8qIENPTkZJR19BUk02NF9QR1RBQkxFX0xFVkVMUyA+IDIgKi8KIApAQCAtNDM3LDYgKzQzNiw4IEBACiAJcmV0dXJuIChwdWRfdCAqKXBnZF9wYWdlX3ZhZGRyKCpwZ2QpICsgcHVkX2luZGV4KGFkZHIpOwogfQogCisjZGVmaW5lIHBnZF9wYWdlKHBnZCkJCXBmbl90b19wYWdlKF9fcGh5c190b19wZm4ocGdkX3ZhbChwZ2QpICYgUEhZU19NQVNLKSkKKwogI2VuZGlmICAvKiBDT05GSUdfQVJNNjRfUEdUQUJMRV9MRVZFTFMgPiAzICovCiAKICNkZWZpbmUgcGdkX0VSUk9SKHBnZCkJCV9fcGdkX2Vycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChwZ2QpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMjg2YjFiZS4uZjliZTMwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlIDxhc20vZnBzaW1kLmg+CiAjaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1od2RlZi5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIApAQCAtMTIzLDkgKzEyNCw2IEBACiAvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KIGV4dGVybiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIAotLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KLSNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQotCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCiAjZGVmaW5lIGNwdV9yZWxheCgpCQkJYmFycmllcigpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA0OWM5YWVmLi4yM2U5NDMyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICNkZWZpbmUgX19BUk1fTlJfY29tcGF0X2NhY2hlZmx1c2gJKF9fQVJNX05SX0NPTVBBVF9CQVNFKzIpCiAjZGVmaW5lIF9fQVJNX05SX2NvbXBhdF9zZXRfdGxzCQkoX19BUk1fTlJfQ09NUEFUX0JBU0UrNSkKIAotI2RlZmluZSBfX05SX2NvbXBhdF9zeXNjYWxscwkJMzg2CisjZGVmaW5lIF9fTlJfY29tcGF0X3N5c2NhbGxzCQkzODgKICNlbmRpZgogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19DTE9ORQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQzMi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQzMi5oCmluZGV4IDg4OTNjZWIuLjI3MjI0NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdW5pc3RkMzIuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZDMyLmgKQEAgLTc5NSwzICs3OTUsNSBAQAogX19TWVNDQUxMKF9fTlJfbWVtZmRfY3JlYXRlLCBzeXNfbWVtZmRfY3JlYXRlKQogI2RlZmluZSBfX05SX2JwZiAzODYKIF9fU1lTQ0FMTChfX05SX2JwZiwgc3lzX2JwZikKKyNkZWZpbmUgX19OUl9leGVjdmVhdCAzODcKK19fU1lTQ0FMTChfX05SX2V4ZWN2ZWF0LCBjb21wYXRfc3lzX2V4ZWN2ZWF0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1aW5mby5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1aW5mby5jCmluZGV4IDU3YjY0MTcuLjA3ZDQzNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWluZm8uYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVpbmZvLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCSAqIElmIHdlIGhhdmUgQUFyY2gzMiwgd2UgY2FyZSBhYm91dCAzMi1iaXQgZmVhdHVyZXMgZm9yIGNvbXBhdC4gVGhlc2UKIAkgKiByZWdpc3RlcnMgc2hvdWxkIGJlIFJFUzAgb3RoZXJ3aXNlLgogCSAqLworCWRpZmYgfD0gQ0hFQ0soaWRfZGZyMCwgYm9vdCwgY3VyLCBjcHUpOwogCWRpZmYgfD0gQ0hFQ0soaWRfaXNhcjAsIGJvb3QsIGN1ciwgY3B1KTsKIAlkaWZmIHw9IENIRUNLKGlkX2lzYXIxLCBib290LCBjdXIsIGNwdSk7CiAJZGlmZiB8PSBDSEVDSyhpZF9pc2FyMiwgYm9vdCwgY3VyLCBjcHUpOwpAQCAtMTY1LDYgKzE2NiwxMCBAQAogCWRpZmYgfD0gQ0hFQ0soaWRfcGZyMCwgYm9vdCwgY3VyLCBjcHUpOwogCWRpZmYgfD0gQ0hFQ0soaWRfcGZyMSwgYm9vdCwgY3VyLCBjcHUpOwogCisJZGlmZiB8PSBDSEVDSyhtdmZyMCwgYm9vdCwgY3VyLCBjcHUpOworCWRpZmYgfD0gQ0hFQ0sobXZmcjEsIGJvb3QsIGN1ciwgY3B1KTsKKwlkaWZmIHw9IENIRUNLKG12ZnIyLCBib290LCBjdXIsIGNwdSk7CisKIAkvKgogCSAqIE1pc21hdGNoZWQgQ1BVIGZlYXR1cmVzIGFyZSBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIuIERvbid0IGV2ZW4KIAkgKiBwcmV0ZW5kIHRvIHN1cHBvcnQgdGhlbS4KQEAgLTE4OSw2ICsxOTQsNyBAQAogCWluZm8tPnJlZ19pZF9hYTY0cGZyMCA9IHJlYWRfY3B1aWQoSURfQUE2NFBGUjBfRUwxKTsKIAlpbmZvLT5yZWdfaWRfYWE2NHBmcjEgPSByZWFkX2NwdWlkKElEX0FBNjRQRlIxX0VMMSk7CiAKKwlpbmZvLT5yZWdfaWRfZGZyMCA9IHJlYWRfY3B1aWQoSURfREZSMF9FTDEpOwogCWluZm8tPnJlZ19pZF9pc2FyMCA9IHJlYWRfY3B1aWQoSURfSVNBUjBfRUwxKTsKIAlpbmZvLT5yZWdfaWRfaXNhcjEgPSByZWFkX2NwdWlkKElEX0lTQVIxX0VMMSk7CiAJaW5mby0+cmVnX2lkX2lzYXIyID0gcmVhZF9jcHVpZChJRF9JU0FSMl9FTDEpOwpAQCAtMjAyLDYgKzIwOCwxMCBAQAogCWluZm8tPnJlZ19pZF9wZnIwID0gcmVhZF9jcHVpZChJRF9QRlIwX0VMMSk7CiAJaW5mby0+cmVnX2lkX3BmcjEgPSByZWFkX2NwdWlkKElEX1BGUjFfRUwxKTsKIAorCWluZm8tPnJlZ19tdmZyMCA9IHJlYWRfY3B1aWQoTVZGUjBfRUwxKTsKKwlpbmZvLT5yZWdfbXZmcjEgPSByZWFkX2NwdWlkKE1WRlIxX0VMMSk7CisJaW5mby0+cmVnX212ZnIyID0gcmVhZF9jcHVpZChNVkZSMl9FTDEpOworCiAJY3B1aW5mb19kZXRlY3RfaWNhY2hlX3BvbGljeShpbmZvKTsKIAogCWNoZWNrX2xvY2FsX2NwdV9lcnJhdGEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2VmaS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMKaW5kZXggNmZhYzI1My4uMmJiNDM0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMKQEAgLTMyNiw2ICszMjYsNyBAQAogCiAJLyogYm9vdCB0aW1lIGlkbWFwX3BnX2RpciBpcyBpbmNvbXBsZXRlLCBzbyBmaWxsIGluIG1pc3NpbmcgcGFydHMgKi8KIAllZmlfc2V0dXBfaWRtYXAoKTsKKwllYXJseV9tZW11bm1hcChtZW1tYXAubWFwLCBtZW1tYXAubWFwX2VuZCAtIG1lbW1hcC5tYXApOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCByZW1hcF9yZWdpb24oZWZpX21lbW9yeV9kZXNjX3QgKm1kLCB2b2lkICoqbmV3KQpAQCAtMzgwLDcgKzM4MSw2IEBACiAJfQogCiAJbWFwc2l6ZSA9IG1lbW1hcC5tYXBfZW5kIC0gbWVtbWFwLm1hcDsKLQllYXJseV9tZW11bm1hcChtZW1tYXAubWFwLCBtYXBzaXplKTsKIAogCWlmIChlZmlfcnVudGltZV9kaXNhYmxlZCgpKSB7CiAJCXByX2luZm8oIkVGSSBydW50aW1lIHNlcnZpY2VzIHdpbGwgYmUgZGlzYWJsZWQuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZmQwMjdiMS4uOWI2ZjcxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KICNpbmNsdWRlIDxhc20vaW5zbi5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wZXJmX3JlZ3MuYyBiL2FyY2gvYXJtNjQva2VybmVsL3BlcmZfcmVncy5jCmluZGV4IDY3NjJhZDcuLjNmNjJiMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3BlcmZfcmVncy5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3BlcmZfcmVncy5jCkBAIC01MCwzICs1MCwxMSBAQAogCWVsc2UKIAkJcmV0dXJuIFBFUkZfU0FNUExFX1JFR1NfQUJJXzY0OwogfQorCit2b2lkIHBlcmZfZ2V0X3JlZ3NfdXNlcihzdHJ1Y3QgcGVyZl9yZWdzICpyZWdzX3VzZXIsCisJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzX3VzZXJfY29weSkKK3sKKwlyZWdzX3VzZXItPnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisJcmVnc191c2VyLT5hYmkgPSBwZXJmX3JlZ19hYmkoY3VycmVudCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYwppbmRleCBiODA5OTExLi4yMGZlMjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmMKQEAgLTQwMiw2ICs0MDIsNyBAQAogCXJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKCk7CiAKIAllZmlfaWRtYXBfaW5pdCgpOworCWVhcmx5X2lvcmVtYXBfcmVzZXQoKTsKIAogCXVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zbXBfc3Bpbl90YWJsZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wX3NwaW5fdGFibGUuYwppbmRleCA0ZjkzYzY3Li4xNDk0NGU1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zbXBfc3Bpbl90YWJsZS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NtcF9zcGluX3RhYmxlLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9jcHVfb3BzLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KIAogZXh0ZXJuIHZvaWQgc2Vjb25kYXJ5X2hvbGRpbmdfcGVuKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc3VzcGVuZC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc3VzcGVuZC5jCmluZGV4IDM3NzFiNzIuLjJkNmI2MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3N1c3BlbmQuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zdXNwZW5kLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8YXNtL2RlYnVnLW1vbml0b3JzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KQEAgLTk4LDcgKzk5LDE4IEBACiAJICovCiAJcmV0ID0gX19jcHVfc3VzcGVuZF9lbnRlcihhcmcsIGZuKTsKIAlpZiAocmV0ID09IDApIHsKLQkJY3B1X3N3aXRjaF9tbShtbS0+cGdkLCBtbSk7CisJCS8qCisJCSAqIFdlIGFyZSByZXN1bWluZyBmcm9tIHJlc2V0IHdpdGggVFRCUjBfRUwxIHNldCB0byB0aGUKKwkJICogaWRtYXAgdG8gZW5hYmxlIHRoZSBNTVU7IHJlc3RvcmUgdGhlIGFjdGl2ZV9tbSBtYXBwaW5ncyBpbgorCQkgKiBUVEJSMF9FTDEgdW5sZXNzIHRoZSBhY3RpdmVfbW0gPT0gJmluaXRfbW0sIGluIHdoaWNoIGNhc2UKKwkJICogdGhlIHRocmVhZCBlbnRlcmVkIF9fY3B1X3N1c3BlbmQgd2l0aCBUVEJSMF9FTDEgc2V0IHRvCisJCSAqIHJlc2VydmVkIFRUQlIwIHBhZ2UgdGFibGVzIGFuZCBzaG91bGQgYmUgcmVzdG9yZWQgYXMgc3VjaC4KKwkJICovCisJCWlmIChtbSA9PSAmaW5pdF9tbSkKKwkJCWNwdV9zZXRfcmVzZXJ2ZWRfdHRicjAoKTsKKwkJZWxzZQorCQkJY3B1X3N3aXRjaF9tbShtbS0+cGdkLCBtbSk7CisKIAkJZmx1c2hfdGxiX2FsbCgpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAuUyBiL2FyY2gvYXJtNjQva3ZtL2h5cC5TCmluZGV4IGZiZTkwOWYuLmMzY2E4OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC5TCisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC5TCkBAIC0xMDE0LDYgKzEwMTQsNyBAQAogCSAqIEluc3RlYWQsIHdlIGludmFsaWRhdGUgU3RhZ2UtMiBmb3IgdGhpcyBJUEEsIGFuZCB0aGUKIAkgKiB3aG9sZSBvZiBTdGFnZS0xLiBXZWVwLi4uCiAJICovCisJbHNyCXgxLCB4MSwgIzEyCiAJdGxiaQlpcGFzMmUxaXMsIHgxCiAJLyoKIAkgKiBXZSBoYXZlIHRvIGVuc3VyZSBjb21wbGV0aW9uIG9mIHRoZSBpbnZhbGlkYXRpb24gYXQgU3RhZ2UtMiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jCmluZGV4IDcwYTc4MTYuLjBiNDMyNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMKKysrIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuYwpAQCAtOTAsNyArOTAsNiBAQAogCQkJaWYgKCFjcHVfaGFzXzMyYml0X2VsMSgpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJY3B1X3Jlc2V0ID0gJmRlZmF1bHRfcmVnc19yZXNldDMyOwotCQkJdmNwdS0+YXJjaC5oY3JfZWwyICY9IH5IQ1JfUlc7CiAJCX0gZWxzZSB7CiAJCQljcHVfcmVzZXQgPSAmZGVmYXVsdF9yZWdzX3Jlc2V0OwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwppbmRleCAzZDdjMmRmLi5mMzFlOGJiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCisrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKQEAgLTY5LDY4ICs2OSwzMSBAQAogCXJldHVybiBjY3NpZHI7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX2RjX2Npc3codTMyIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUoImRjIGNpc3csICV4MCIgOiA6ICJyIiAodmFsKSk7Ci0JZHNiKGlzaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX2RjX2Nzdyh1MzIgdmFsKQotewotCWFzbSB2b2xhdGlsZSgiZGMgY3N3LCAleDAiIDogOiAiciIgKHZhbCkpOwotCWRzYihpc2gpOwotfQotCi0vKiBTZWUgbm90ZSBhdCBBUk0gQVJNIEIxLjE0LjQgKi8KKy8qCisgKiBTZWUgbm90ZSBhdCBBUk12NyBBUk0gQjEuMTQuNCAoVEw7RFI6IFMvVyBvcHMgYXJlIG5vdCBlYXNpbHkgdmlydHVhbGl6ZWQpLgorICovCiBzdGF0aWMgYm9vbCBhY2Nlc3NfZGNzdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQljb25zdCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCiAJCQljb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQogewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWludCBjcHU7Ci0KIAlpZiAoIXAtPmlzX3dyaXRlKQogCQlyZXR1cm4gcmVhZF9mcm9tX3dyaXRlX29ubHkodmNwdSwgcCk7CiAKLQljcHUgPSBnZXRfY3B1KCk7Ci0KLQljcHVtYXNrX3NldGFsbCgmdmNwdS0+YXJjaC5yZXF1aXJlX2RjYWNoZV9mbHVzaCk7Ci0JY3B1bWFza19jbGVhcl9jcHUoY3B1LCAmdmNwdS0+YXJjaC5yZXF1aXJlX2RjYWNoZV9mbHVzaCk7Ci0KLQkvKiBJZiB3ZSB3ZXJlIGFscmVhZHkgcHJlZW1wdGVkLCB0YWtlIHRoZSBsb25nIHdheSBhcm91bmQgKi8KLQlpZiAoY3B1ICE9IHZjcHUtPmFyY2gubGFzdF9wY3B1KSB7Ci0JCWZsdXNoX2NhY2hlX2FsbCgpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JdmFsID0gKnZjcHVfcmVnKHZjcHUsIHAtPlJ0KTsKLQotCXN3aXRjaCAocC0+Q1JtKSB7Ci0JY2FzZSA2OgkJCS8qIFVwZ3JhZGUgRENJU1cgdG8gRENDSVNXLCBhcyBwZXIgSENSLlNXSU8gKi8KLQljYXNlIDE0OgkJLyogRENDSVNXICovCi0JCWRvX2RjX2Npc3codmFsKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDEwOgkJLyogRENDU1cgKi8KLQkJZG9fZGNfY3N3KHZhbCk7Ci0JCWJyZWFrOwotCX0KLQotZG9uZToKLQlwdXRfY3B1KCk7Ci0KKwlrdm1fc2V0X3dheV9mbHVzaCh2Y3B1KTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKICAqIEdlbmVyaWMgYWNjZXNzb3IgZm9yIFZNIHJlZ2lzdGVycy4gT25seSBjYWxsZWQgYXMgbG9uZyBhcyBIQ1JfVFZNCi0gKiBpcyBzZXQuCisgKiBpcyBzZXQuIElmIHRoZSBndWVzdCBlbmFibGVzIHRoZSBNTVUsIHdlIHN0b3AgdHJhcHBpbmcgdGhlIFZNCisgKiBzeXNfcmVncyBhbmQgbGVhdmUgaXQgaW4gY29tcGxldGUgY29udHJvbCBvZiB0aGUgY2FjaGVzLgogICovCiBzdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSAgY29uc3Qgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAogCQkJICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOworCWJvb2wgd2FzX2VuYWJsZWQgPSB2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpOwogCiAJQlVHX09OKCFwLT5pc193cml0ZSk7CiAKQEAgLTE0MywyNSArMTA2LDcgQEAKIAkJdmNwdV9jcDE1XzY0X2xvdyh2Y3B1LCByLT5yZWcpID0gdmFsICYgMHhmZmZmZmZmZlVMOwogCX0KIAotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogU0NUTFJfRUwxIGFjY2Vzc29yLiBPbmx5IGNhbGxlZCBhcyBsb25nIGFzIEhDUl9UVk0gaXMgc2V0LiAgSWYgdGhlCi0gKiBndWVzdCBlbmFibGVzIHRoZSBNTVUsIHdlIHN0b3AgdHJhcHBpbmcgdGhlIFZNIHN5c19yZWdzIGFuZCBsZWF2ZQotICogaXQgaW4gY29tcGxldGUgY29udHJvbCBvZiB0aGUgY2FjaGVzLgotICovCi1zdGF0aWMgYm9vbCBhY2Nlc3Nfc2N0bHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJIGNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKLQkJCSBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQotewotCWFjY2Vzc192bV9yZWcodmNwdSwgcCwgcik7Ci0KLQlpZiAodmNwdV9oYXNfY2FjaGVfZW5hYmxlZCh2Y3B1KSkgewkvKiBNTVUrQ2FjaGVzIGVuYWJsZWQ/ICovCi0JCXZjcHUtPmFyY2guaGNyX2VsMiAmPSB+SENSX1RWTTsKLQkJc3RhZ2UyX2ZsdXNoX3ZtKHZjcHUtPmt2bSk7Ci0JfQotCisJa3ZtX3RvZ2dsZV9jYWNoZSh2Y3B1LCB3YXNfZW5hYmxlZCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM3Nyw3ICszMjIsNyBAQAogCSAgTlVMTCwgcmVzZXRfbXBpZHIsIE1QSURSX0VMMSB9LAogCS8qIFNDVExSX0VMMSAqLwogCXsgT3AwKDBiMTEpLCBPcDEoMGIwMDApLCBDUm4oMGIwMDAxKSwgQ1JtKDBiMDAwMCksIE9wMigwYjAwMCksCi0JICBhY2Nlc3Nfc2N0bHIsIHJlc2V0X3ZhbCwgU0NUTFJfRUwxLCAweDAwQzUwMDc4IH0sCisJICBhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIFNDVExSX0VMMSwgMHgwMEM1MDA3OCB9LAogCS8qIENQQUNSX0VMMSAqLwogCXsgT3AwKDBiMTEpLCBPcDEoMGIwMDApLCBDUm4oMGIwMDAxKSwgQ1JtKDBiMDAwMCksIE9wMigwYjAxMCksCiAJICBOVUxMLCByZXNldF92YWwsIENQQUNSX0VMMSwgMCB9LApAQCAtNjU3LDcgKzYwMiw3IEBACiAgKiByZWdpc3RlcikuCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIGNwMTVfcmVnc1tdID0gewotCXsgT3AxKCAwKSwgQ1JuKCAxKSwgQ1JtKCAwKSwgT3AyKCAwKSwgYWNjZXNzX3NjdGxyLCBOVUxMLCBjMV9TQ1RMUiB9LAorCXsgT3AxKCAwKSwgQ1JuKCAxKSwgQ1JtKCAwKSwgT3AyKCAwKSwgYWNjZXNzX3ZtX3JlZywgTlVMTCwgYzFfU0NUTFIgfSwKIAl7IE9wMSggMCksIENSbiggMiksIENSbSggMCksIE9wMiggMCksIGFjY2Vzc192bV9yZWcsIE5VTEwsIGMyX1RUQlIwIH0sCiAJeyBPcDEoIDApLCBDUm4oIDIpLCBDUm0oIDApLCBPcDIoIDEpLCBhY2Nlc3Nfdm1fcmVnLCBOVUxMLCBjMl9UVEJSMSB9LAogCXsgT3AxKCAwKSwgQ1JuKCAyKSwgQ1JtKCAwKSwgT3AyKCAyKSwgYWNjZXNzX3ZtX3JlZywgTlVMTCwgYzJfVFRCQ1IgfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9kdW1wLmMKaW5kZXggY2YzM2YzMy4uZDU0ZGM5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9kdW1wLmMKKysrIGIvYXJjaC9hcm02NC9tbS9kdW1wLmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2luaXQuYyBiL2FyY2gvYXJtNjQvbW0vaW5pdC5jCmluZGV4IGJhYzQ5MmMuLmM5NTQ2NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtNjQvbW0vaW5pdC5jCkBAIC0zMzUsMTQgKzMzNSw4IEBACiAKIHZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCWlmICgha2VlcF9pbml0cmQpIHsKLQkJaWYgKHN0YXJ0ID09IGluaXRyZF9zdGFydCkKLQkJCXN0YXJ0ID0gcm91bmRfZG93bihzdGFydCwgUEFHRV9TSVpFKTsKLQkJaWYgKGVuZCA9PSBpbml0cmRfZW5kKQotCQkJZW5kID0gcm91bmRfdXAoZW5kLCBQQUdFX1NJWkUpOwotCisJaWYgKCFrZWVwX2luaXRyZCkKIAkJZnJlZV9yZXNlcnZlZF9hcmVhKCh2b2lkICopc3RhcnQsICh2b2lkICopZW5kLCAwLCAiaW5pdHJkIik7Ci0JfQogfQogCiBzdGF0aWMgaW50IF9faW5pdCBrZWVwaW5pdHJkX3NldHVwKGNoYXIgKl9fdW51c2VkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9tb2R1bGUuYwppbmRleCAyYzk0MTI5Li4xNjRlZmEwMCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvbW9kdWxlLmMKQEAgLTE5LDEyICsxOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAotdm9pZCBtb2R1bGVfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pCit2b2lkIG1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJdmZyZWUobW9kLT5hcmNoLnN5bWluZm8pOwogCW1vZC0+YXJjaC5zeW1pbmZvID0gTlVMTDsKLQotCXZmcmVlKG1vZHVsZV9yZWdpb24pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjaGVja19yZWxhKEVsZjMyX1JlbGEgKnJlbGEsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwKQEAgLTI5MSwxMiArMjg5LDMgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KLWludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKmhkciwgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCi0JCSAgICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCi17Ci0JdmZyZWUobW9kdWxlLT5hcmNoLnN5bWluZm8pOwotCW1vZHVsZS0+YXJjaC5zeW1pbmZvID0gTlVMTDsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS9mYXVsdC5jIGIvYXJjaC9hdnIzMi9tbS9mYXVsdC5jCmluZGV4IDBlY2E5MzMuLmQyMjNhOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbW0vZmF1bHQuYworKysgYi9hcmNoL2F2cjMyL21tL2ZhdWx0LmMKQEAgLTE0Miw2ICsxNDIsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jCmluZGV4IDZmNGJhYzkuLjIzZWFkYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMKQEAgLTcsNiArNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9zeW5jX3NlcmlhbC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvc3luY19zZXJpYWwuYwppbmRleCAwOGEzMTNmLi5mNzcyMDY4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9zeW5jX3NlcmlhbC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKQEAgLTYwNCw3ICs2MDQsNyBAQAogCQkJCSAgc3RydWN0IHRpbWVzcGVjICp0cykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBkZXYgPSBNSU5PUihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKKwlpbnQgZGV2ID0gTUlOT1IoZmlsZV9pbm9kZShmaWxlKS0+aV9yZGV2KTsKIAlpbnQgYXZhaWw7CiAJc3RydWN0IHN5bmNfcG9ydCAqcG9ydDsKIAl1bnNpZ25lZCBjaGFyICpzdGFydDsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2NyaXMva2VybmVsL21vZHVsZS5jCmluZGV4IDUxMTIzZjkuLmFmMDRjYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9tb2R1bGUuYwpAQCAtMzYsNyArMzYsNyBAQAogfQogCiAvKiBGcmVlIG1lbW9yeSByZXR1cm5lZCBmcm9tIG1vZHVsZV9hbGxvYyAqLwotdm9pZCBtb2R1bGVfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pCit2b2lkIG1vZHVsZV9tZW1mcmVlKHZvaWQgKm1vZHVsZV9yZWdpb24pCiB7CiAJa2ZyZWUobW9kdWxlX3JlZ2lvbik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvbW0vZmF1bHQuYyBiL2FyY2gvY3Jpcy9tbS9mYXVsdC5jCmluZGV4IDE3OTBmMjIuLjI2ODZhN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvY3Jpcy9tbS9mYXVsdC5jCkBAIC0xNzYsNiArMTc2LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jCmluZGV4IDY3YjFkMTYuLjA2MzViZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYwpAQCAtOTQsNyArOTQsNyBAQAogCQkJCXIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOwogCQkJCWlmICghci0+c3RhcnQpCiAJCQkJCWNvbnRpbnVlOwotCQkJCXBjaV9jbGFpbV9yZXNvdXJjZShkZXYsIGlkeCk7CisJCQkJcGNpX2NsYWltX2JyaWRnZV9yZXNvdXJjZShkZXYsIGlkeCk7CiAJCQl9CiAJCX0KIAkJcGNpYmlvc19hbGxvY2F0ZV9idXNfcmVzb3VyY2VzKCZidXMtPmNoaWxkcmVuKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21tL2ZhdWx0LmMgYi9hcmNoL2Zydi9tbS9mYXVsdC5jCmluZGV4IDlhNjYzNzIuLmVjNDkxN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21tL2ZhdWx0LmMKKysrIGIvYXJjaC9mcnYvbW0vZmF1bHQuYwpAQCAtMTY4LDYgKzE2OCw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGRvX3NpZ2J1czsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggZjNiNTFiNS4uOTVjMzliOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMTEsNyArMTEsNyBAQAogCiAKIAotI2RlZmluZSBOUl9zeXNjYWxscwkJCTMxOCAvKiBsZW5ndGggb2Ygc3lzY2FsbCB0YWJsZSAqLworI2RlZmluZSBOUl9zeXNjYWxscwkJCTMxOSAvKiBsZW5ndGggb2Ygc3lzY2FsbCB0YWJsZSAqLwogCiAvKgogICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIHN0b3Agc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoIGZyb20gY29tcGxhaW5pbmcgYWJvdXQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKaW5kZXggNGMyMjQwYy4uNDYxMDc5NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKQEAgLTMzMSw1ICszMzEsNiBAQAogI2RlZmluZSBfX05SX2dldHJhbmRvbQkJCTEzMzkKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJCTEzNDAKICNkZWZpbmUgX19OUl9icGYJCQkxMzQxCisjZGVmaW5lIF9fTlJfZXhlY3ZlYXQJCQkxMzQyCiAKICNlbmRpZiAvKiBfVUFQSV9BU01fSUE2NF9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwppbmRleCA2MTVlZjgxLi5lNzk1Y2I4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwpAQCAtODkzLDEzICs4OTMsMTMgQEAKIH0KIAogLyogd3JhcHBlciB0byBzaWxlbmNlIHNlY3Rpb24gbWlzbWF0Y2ggd2FybmluZyAqLwotaW50IF9fcmVmIGFjcGlfbWFwX2xzYXBpYyhhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBwaHlzaWQsIGludCAqcGNwdSkKK2ludCBfX3JlZiBhY3BpX21hcF9jcHUoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgcGh5c2lkLCBpbnQgKnBjcHUpCiB7CiAJcmV0dXJuIF9hY3BpX21hcF9sc2FwaWMoaGFuZGxlLCBwaHlzaWQsIHBjcHUpOwogfQotRVhQT1JUX1NZTUJPTChhY3BpX21hcF9sc2FwaWMpOworRVhQT1JUX1NZTUJPTChhY3BpX21hcF9jcHUpOwogCi1pbnQgYWNwaV91bm1hcF9sc2FwaWMoaW50IGNwdSkKK2ludCBhY3BpX3VubWFwX2NwdShpbnQgY3B1KQogewogCWlhNjRfY3B1X3RvX3NhcGljaWRbY3B1XSA9IC0xOwogCXNldF9jcHVfcHJlc2VudChjcHUsIGZhbHNlKTsKQEAgLTkxMCw4ICs5MTAsNyBAQAogCiAJcmV0dXJuICgwKTsKIH0KLQotRVhQT1JUX1NZTUJPTChhY3BpX3VubWFwX2xzYXBpYyk7CitFWFBPUlRfU1lNQk9MKGFjcGlfdW5tYXBfY3B1KTsKICNlbmRpZgkJCQkvKiBDT05GSUdfQUNQSV9IT1RQTFVHX0NQVSAqLwogCiAjaWZkZWYgQ09ORklHX0FDUElfTlVNQQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IGY1ZTk2ZGYuLmZjZjhiOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKQEAgLTE3NzksNiArMTc3OSw3IEBACiAJZGF0YTggc3lzX2dldHJhbmRvbQogCWRhdGE4IHN5c19tZW1mZF9jcmVhdGUJCQkvLyAxMzQwCiAJZGF0YTggc3lzX2JwZgorCWRhdGE4IHN5c19leGVjdmVhdAogCiAJLm9yZyBzeXNfY2FsbF90YWJsZSArIDgqTlJfc3lzY2FsbHMJLy8gZ3VhcmQgYWdhaW5zdCBmYWlsdXJlcyB0byBpbmNyZWFzZSBOUl9zeXNjYWxscwogI2VuZGlmIC8qIF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX05BVElWRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMjQ2MDNiZS4uMjk3NTRhYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCkBAIC0zMDUsMTQgKzMwNSwxMiBAQAogI2VuZGlmIC8qICFVU0VfQlJMICovCiAKIHZvaWQKLW1vZHVsZV9mcmVlIChzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pCittb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQgKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKLQlpZiAobW9kICYmIG1vZC0+YXJjaC5pbml0X3Vud190YWJsZSAmJgotCSAgICBtb2R1bGVfcmVnaW9uID09IG1vZC0+bW9kdWxlX2luaXQpIHsKKwlpZiAobW9kLT5hcmNoLmluaXRfdW53X3RhYmxlKSB7CiAJCXVud19yZW1vdmVfdW53aW5kX3RhYmxlKG1vZC0+YXJjaC5pbml0X3Vud190YWJsZSk7CiAJCW1vZC0+YXJjaC5pbml0X3Vud190YWJsZSA9IE5VTEw7CiAJfQotCXZmcmVlKG1vZHVsZV9yZWdpb24pOwogfQogCiAvKiBIYXZlIHdlIGFscmVhZHkgc2VlbiBvbmUgb2YgdGhlc2UgcmVsb2NhdGlvbnM/ICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZmF1bHQuYyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCmluZGV4IDcyMjVkYWQuLmJhNWJhN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCkBAIC0xNzIsNiArMTcyLDggQEAKIAkJICovCiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkgewogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQl9IGVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikgeworCQkJZ290byBiYWRfYXJlYTsKIAkJfSBlbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykgewogCQkJc2lnbmFsID0gU0lHQlVTOwogCQkJZ290byBiYWRfYXJlYTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IDI5MWE1ODI3Ny4uOTAwY2M5MyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC00ODcsNDUgKzQ4NywzOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlzX3ZhbGlkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZHgpCi17Ci0JdW5zaWduZWQgaW50IGksIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmRldnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdLCAqYnVzcjsKLQotCWlmICghZGV2LT5idXMpCi0JCXJldHVybiAwOwotCi0JcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShkZXYtPmJ1cywgYnVzciwgaSkgewotCQlpZiAoIWJ1c3IgfHwgKChidXNyLT5mbGFncyBeIGRldnItPmZsYWdzKSAmIHR5cGVfbWFzaykpCi0JCQljb250aW51ZTsKLQkJaWYgKChkZXZyLT5zdGFydCkgJiYgKGRldnItPnN0YXJ0ID49IGJ1c3ItPnN0YXJ0KSAmJgotCQkJCShkZXZyLT5lbmQgPD0gYnVzci0+ZW5kKSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcGNpYmlvc19maXh1cF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHN0YXJ0LCBpbnQgbGltaXQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSBzdGFydDsgaSA8IGxpbWl0OyBpKyspIHsKLQkJaWYgKCFkZXYtPnJlc291cmNlW2ldLmZsYWdzKQotCQkJY29udGludWU7Ci0JCWlmICgoaXNfdmFsaWRfcmVzb3VyY2UoZGV2LCBpKSkpCi0JCQlwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpKTsKLQl9Ci19Ci0KIHZvaWQgcGNpYmlvc19maXh1cF9kZXZpY2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JcGNpYmlvc19maXh1cF9yZXNvdXJjZXMoZGV2LCAwLCBQQ0lfQlJJREdFX1JFU09VUkNFUyk7CisJaW50IGlkeDsKKworCWlmICghZGV2LT5idXMpCisJCXJldHVybjsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgUENJX0JSSURHRV9SRVNPVVJDRVM7IGlkeCsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZkZXYtPnJlc291cmNlW2lkeF07CisKKwkJaWYgKCFyLT5mbGFncyB8fCByLT5wYXJlbnQgfHwgIXItPnN0YXJ0KQorCQkJY29udGludWU7CisKKwkJcGNpX2NsYWltX3Jlc291cmNlKGRldiwgaWR4KTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2liaW9zX2ZpeHVwX2RldmljZV9yZXNvdXJjZXMpOwogCiBzdGF0aWMgdm9pZCBwY2liaW9zX2ZpeHVwX2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlwY2liaW9zX2ZpeHVwX3Jlc291cmNlcyhkZXYsIFBDSV9CUklER0VfUkVTT1VSQ0VTLCBQQ0lfTlVNX1JFU09VUkNFUyk7CisJaW50IGlkeDsKKworCWlmICghZGV2LT5idXMpCisJCXJldHVybjsKKworCWZvciAoaWR4ID0gUENJX0JSSURHRV9SRVNPVVJDRVM7IGlkeCA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpZHgrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOworCisJCWlmICghci0+ZmxhZ3MgfHwgci0+cGFyZW50IHx8ICFyLT5zdGFydCkKKwkJCWNvbnRpbnVlOworCisJCXBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LCBpZHgpOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9mYXVsdC5jIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKaW5kZXggZTljNmE4MC4uZTNkNGQ0ODkwMSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKQEAgLTIwMCw2ICsyMDAsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDc1ZTc1ZDcuLjI0NGUwZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8dWFwaS9hc20vdW5pc3RkLmg+CiAKIAotI2RlZmluZSBOUl9zeXNjYWxscwkJMzU1CisjZGVmaW5lIE5SX3N5c2NhbGxzCQkzNTYKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL202OGsvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAppbmRleCAyYzFiZWM5Li42MWZiNmNiIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtMzYwLDUgKzM2MCw2IEBACiAjZGVmaW5lIF9fTlJfZ2V0cmFuZG9tCQkzNTIKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJMzUzCiAjZGVmaW5lIF9fTlJfYnBmCQkzNTQKKyNkZWZpbmUgX19OUl9leGVjdmVhdAkJMzU1CiAKICNlbmRpZiAvKiBfVUFQSV9BU01fTTY4S19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TCmluZGV4IDJjYTIxOWUuLmEwZWM0MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUwpAQCAtMzc1LDQgKzM3NSw1IEBACiAJLmxvbmcgc3lzX2dldHJhbmRvbQogCS5sb25nIHN5c19tZW1mZF9jcmVhdGUKIAkubG9uZyBzeXNfYnBmCisJLmxvbmcgc3lzX2V4ZWN2ZWF0CQkvKiAzNTUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2ZhdWx0LmMgYi9hcmNoL202OGsvbW0vZmF1bHQuYwppbmRleCAyYmQ3NDg3Li5iMmYwNGFlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vZmF1bHQuYworKysgYi9hcmNoL202OGsvbW0vZmF1bHQuYwpAQCAtMTQ1LDYgKzE0NSw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBtYXBfZXJyOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gYnVzX2VycjsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL21ldGFnL21tL2ZhdWx0LmMgYi9hcmNoL21ldGFnL21tL2ZhdWx0LmMKaW5kZXggMzMyNjgwZS4uMmRlNWRjNiAxMDA2NDQKLS0tIGEvYXJjaC9tZXRhZy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbWV0YWcvbW0vZmF1bHQuYwpAQCAtMTQxLDYgKzE0MSw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGRvX3NpZ2J1czsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvbW0vZmF1bHQuYyBiL2FyY2gvbWljcm9ibGF6ZS9tbS9mYXVsdC5jCmluZGV4IGZhNGNmNTIuLmQ0NmE1ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9tbS9mYXVsdC5jCkBAIC0yMjQsNiArMjI0LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9wY2kvcGNpLWNvbW1vbi5jIGIvYXJjaC9taWNyb2JsYXplL3BjaS9wY2ktY29tbW9uLmMKaW5kZXggYjMwZTQxYy4uNDg1MjhmYiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL3BjaS9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL3BjaS9wY2ktY29tbW9uLmMKQEAgLTEwMjYsNiArMTAyNiw4IEBACiAJCQkgcHIsIChwciAmJiBwci0+bmFtZSkgPyBwci0+bmFtZSA6ICJuaWwiKTsKIAogCQlpZiAocHIgJiYgIShwci0+ZmxhZ3MgJiBJT1JFU09VUkNFX1VOU0VUKSkgeworCQkJc3RydWN0IHBjaV9kZXYgKmRldiA9IGJ1cy0+c2VsZjsKKwogCQkJaWYgKHJlcXVlc3RfcmVzb3VyY2UocHIsIHJlcykgPT0gMCkKIAkJCQljb250aW51ZTsKIAkJCS8qCkBAIC0xMDM1LDYgKzEwMzcsMTIgQEAKIAkJCSAqLwogCQkJaWYgKHJlcGFyZW50X3Jlc291cmNlcyhwciwgcmVzKSA9PSAwKQogCQkJCWNvbnRpbnVlOworCisJCQlpZiAoZGV2ICYmIGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTSAmJgorCQkJICAgIHBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LAorCQkJCQkJIGkgKyBQQ0lfQlJJREdFX1JFU09VUkNFUykgPT0gMCkKKwkJCQljb250aW51ZTsKKwogCQl9CiAJCXByX3dhcm4oIlBDSTogQ2Fubm90IGFsbG9jYXRlIHJlc291cmNlIHJlZ2lvbiAiKTsKIAkJcHJfY29udCgiJWQgb2YgUENJIGJyaWRnZSAlZCwgd2lsbCByZW1hcFxuIiwgaSwgYnVzLT5udW1iZXIpOwpAQCAtMTIyNyw3ICsxMjM1LDEwIEBACiAJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpci0+ZW5kLAogCQkJCSAodW5zaWduZWQgaW50KXItPmZsYWdzKTsKIAotCQkJcGNpX2NsYWltX3Jlc291cmNlKGRldiwgaSk7CisJCQlpZiAocGNpX2NsYWltX3Jlc291cmNlKGRldiwgaSkgPT0gMCkKKwkJCQljb250aW51ZTsKKworCQkJcGNpX2NsYWltX2JyaWRnZV9yZXNvdXJjZShkZXYsIGkpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vZmF1bHQuYyBiL2FyY2gvbWlwcy9tbS9mYXVsdC5jCmluZGV4IGJlY2M0MmIuLjcwYWI1ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9mYXVsdC5jCkBAIC0xNTgsNiArMTU4LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9uZXQvYnBmX2ppdC5jIGIvYXJjaC9taXBzL25ldC9icGZfaml0LmMKaW5kZXggOWZkNjgzNC4uNWQ2MTM5MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL25ldC9icGZfaml0LmMKKysrIGIvYXJjaC9taXBzL25ldC9icGZfaml0LmMKQEAgLTEzODgsNyArMTM4OCw3IEBACiB2b2lkIGJwZl9qaXRfZnJlZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKQogewogCWlmIChmcC0+aml0ZWQpCi0JCW1vZHVsZV9mcmVlKE5VTEwsIGZwLT5icGZfZnVuYyk7CisJCW1vZHVsZV9tZW1mcmVlKGZwLT5icGZfZnVuYyk7CiAKIAlicGZfcHJvZ191bmxvY2tfZnJlZShmcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvbW0vZmF1bHQuYyBiL2FyY2gvbW4xMDMwMC9tbS9mYXVsdC5jCmluZGV4IDM1MTZjYmQuLjBjMmNjNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbW4xMDMwMC9tbS9mYXVsdC5jCkBAIC0yNjIsNiArMjYyLDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYwppbmRleCBmZWJiOWNkLi5iNWIwMzZmIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmMKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkJCQlpZiAoIXItPmZsYWdzKQogCQkJCQljb250aW51ZTsKIAkJCQlpZiAoIXItPnN0YXJ0IHx8Ci0JCQkJICAgIHBjaV9jbGFpbV9yZXNvdXJjZShkZXYsIGlkeCkgPCAwKSB7CisJCQkJICAgIHBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LCBpZHgpIDwgMCkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIlBDSToiCiAJCQkJCSAgICAgICAiIENhbm5vdCBhbGxvY2F0ZSByZXNvdXJjZSIKIAkJCQkJICAgICAgICIgcmVnaW9uICVkIG9mIGJyaWRnZSAlc1xuIiwKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jCmluZGV4IDZiNDMzOWYuLjQ3MWZmMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYwpAQCAtMjgxLDQyICsyODEsMzcgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBpc192YWxpZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWR4KQotewotCXVuc2lnbmVkIGludCBpLCB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU07Ci0Jc3RydWN0IHJlc291cmNlICpkZXZyID0gJmRldi0+cmVzb3VyY2VbaWR4XSwgKmJ1c3I7Ci0KLQlpZiAoZGV2LT5idXMpIHsKLQkJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShkZXYtPmJ1cywgYnVzciwgaSkgewotCQkJaWYgKCFidXNyIHx8IChidXNyLT5mbGFncyBeIGRldnItPmZsYWdzKSAmIHR5cGVfbWFzaykKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKGRldnItPnN0YXJ0ICYmCi0JCQkgICAgZGV2ci0+c3RhcnQgPj0gYnVzci0+c3RhcnQgJiYKLQkJCSAgICBkZXZyLT5lbmQgPD0gYnVzci0+ZW5kKQotCQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHBjaWJpb3NfZml4dXBfZGV2aWNlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCWludCBsaW1pdCwgaTsKKwlpbnQgaWR4OwogCi0JaWYgKGRldi0+YnVzLT5udW1iZXIgIT0gMCkKKwlpZiAoIWRldi0+YnVzKQogCQlyZXR1cm47CiAKLQlsaW1pdCA9IChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9OT1JNQUwpID8KLQkJUENJX0JSSURHRV9SRVNPVVJDRVMgOiBQQ0lfTlVNX1JFU09VUkNFUzsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IFBDSV9CUklER0VfUkVTT1VSQ0VTOyBpZHgrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOwogCi0JZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKLQkJaWYgKCFkZXYtPnJlc291cmNlW2ldLmZsYWdzKQorCQlpZiAoIXItPmZsYWdzIHx8IHItPnBhcmVudCB8fCAhci0+c3RhcnQpCiAJCQljb250aW51ZTsKIAotCQlpZiAoaXNfdmFsaWRfcmVzb3VyY2UoZGV2LCBpKSkKLQkJCXBjaV9jbGFpbV9yZXNvdXJjZShkZXYsIGkpOworCQlwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpZHgpOworCX0KK30KKworc3RhdGljIHZvaWQgcGNpYmlvc19maXh1cF9icmlkZ2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IGlkeDsKKworCWlmICghZGV2LT5idXMpCisJCXJldHVybjsKKworCWZvciAoaWR4ID0gUENJX0JSSURHRV9SRVNPVVJDRVM7IGlkeCA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpZHgrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOworCisJCWlmICghci0+ZmxhZ3MgfHwgci0+cGFyZW50IHx8ICFyLT5zdGFydCkKKwkJCWNvbnRpbnVlOworCisJCXBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LCBpZHgpOwogCX0KIH0KIApAQCAtMzMwLDcgKzMyNSw3IEBACiAKIAlpZiAoYnVzLT5zZWxmKSB7CiAJCXBjaV9yZWFkX2JyaWRnZV9iYXNlcyhidXMpOwotCQlwY2liaW9zX2ZpeHVwX2RldmljZV9yZXNvdXJjZXMoYnVzLT5zZWxmKTsKKwkJcGNpYmlvc19maXh1cF9icmlkZ2VfcmVzb3VyY2VzKGJ1cy0+c2VsZik7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvY3B1aW5mby5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvY3B1aW5mby5jCmluZGV4IDUxZDViYjkuLmEyMjM2OTFkIDEwMDY0NAotLS0gYS9hcmNoL25pb3MyL2tlcm5lbC9jcHVpbmZvLmMKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvY3B1aW5mby5jCkBAIC03Miw2ICs3Miw3IEBACiAJY3B1aW5mby5oYXNfZGl2ID0gZmNwdV9oYXMoY3B1LCAiYWx0cixoYXMtZGl2Iik7CiAJY3B1aW5mby5oYXNfbXVsID0gZmNwdV9oYXMoY3B1LCAiYWx0cixoYXMtbXVsIik7CiAJY3B1aW5mby5oYXNfbXVseCA9IGZjcHVfaGFzKGNwdSwgImFsdHIsaGFzLW11bHgiKTsKKwljcHVpbmZvLm1tdSA9IGZjcHVfaGFzKGNwdSwgImFsdHIsaGFzLW1tdSIpOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX05JT1MyX0hXX0RJVl9TVVBQT1JUKSAmJiAhY3B1aW5mby5oYXNfZGl2KQogCQllcnJfY3B1KCJESVYiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL2VudHJ5LlMgYi9hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TCmluZGV4IDgzYmNhMTcuLjBiZGZkMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbmlvczIva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvZW50cnkuUwpAQCAtMzY1LDMwICszNjUsMTQgQEAKIAlHRVRfVEhSRUFEX0lORk8JcjEKIAlsZHcJcjQsIFRJX1BSRUVNUFRfQ09VTlQocjEpCiAJYm5lCXI0LCByMCwgcmVzdG9yZV9hbGwKLQotbmVlZF9yZXNjaGVkOgogCWxkdwlyNCwgVElfRkxBR1MocjEpCQkvKiA/IE5lZWQgcmVzY2hlZCBzZXQgKi8KIAlCVEJaCXIxMCwgcjQsIFRJRl9ORUVEX1JFU0NIRUQsIHJlc3RvcmVfYWxsCiAJbGR3CXI0LCBQVF9FU1RBVFVTKHNwKQkvKiA/IEludGVycnVwdHMgb2ZmICovCiAJYW5kaQlyMTAsIHI0LCBFU1RBVFVTX0VQSUUKIAliZXEJcjEwLCByMCwgcmVzdG9yZV9hbGwKLQltb3ZpYQlyNCwgUFJFRU1QVF9BQ1RJVkUKLQlzdHcJcjQsIFRJX1BSRUVNUFRfQ09VTlQocjEpCi0JcmRjdGwJcjEwLCBzdGF0dXMJCS8qIGVuYWJsZSBpbnRycyBhZ2FpbiAqLwotCW9yaQlyMTAsIHIxMCAsU1RBVFVTX1BJRQotCXdyY3RsCXN0YXR1cywgcjEwCi0JUFVTSAlyMQotCWNhbGwJc2NoZWR1bGUKLQlQT1AJcjEKLQltb3YJcjQsIHIwCi0Jc3R3CXI0LCBUSV9QUkVFTVBUX0NPVU5UKHIxKQotCXJkY3RsCXIxMCwgc3RhdHVzCQkvKiBkaXNhYmxlIGludHJzICovCi0JYW5kaQlyMTAsIHIxMCwgJWxvKH5TVEFUVVNfUElFKQotCXdyY3RsCXN0YXR1cywgcjEwCi0JYnIJbmVlZF9yZXNjaGVkCi0jZWxzZQotCWJyCXJlc3RvcmVfYWxsCisJY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQogI2VuZGlmCisJYnIJcmVzdG9yZV9hbGwKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBBIGZldyBzeXNjYWxsIHdyYXBwZXJzCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvbmlvczIva2VybmVsL21vZHVsZS5jCmluZGV4IGNjOTI0YTMuLmUyZTNmMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbmlvczIva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvbmlvczIva2VybmVsL21vZHVsZS5jCkBAIC0zNiw3ICszNiw3IEBACiB9CiAKIC8qIEZyZWUgbWVtb3J5IHJldHVybmVkIGZyb20gbW9kdWxlX2FsbG9jICovCi12b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3ZvaWQgbW9kdWxlX21lbWZyZWUodm9pZCAqbW9kdWxlX3JlZ2lvbikKIHsKIAlrZnJlZShtb2R1bGVfcmVnaW9uKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZjlkMjc4OC4uMmQwZWEyNSAxMDA2NDQKLS0tIGEvYXJjaC9uaW9zMi9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvc2lnbmFsLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCiAJLyogU2V0IHVwIHRvIHJldHVybiBmcm9tIHVzZXJzcGFjZTsganVtcCB0byBmaXhlZCBhZGRyZXNzIHNpZ3JldHVybgogCSAgIHRyYW1wb2xpbmUgb24ga3VzZXIgcGFnZS4gICovCi0JcmVncy0+cmEgPSAodW5zaWduZWQgbG9uZykgKDB4MTA0MCk7CisJcmVncy0+cmEgPSAodW5zaWduZWQgbG9uZykgKDB4MTA0NCk7CiAKIAkvKiBTZXQgdXAgcmVnaXN0ZXJzIGZvciBzaWduYWwgaGFuZGxlciAqLwogCXJlZ3MtPnNwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9mYXVsdC5jIGIvYXJjaC9uaW9zMi9tbS9mYXVsdC5jCmluZGV4IDE1YTBiYjUuLjM0NDI5ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbmlvczIvbW0vZmF1bHQuYworKysgYi9hcmNoL25pb3MyL21tL2ZhdWx0LmMKQEAgLTEzNSw2ICsxMzUsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9vcGVucmlzYy9tbS9mYXVsdC5jIGIvYXJjaC9vcGVucmlzYy9tbS9mYXVsdC5jCmluZGV4IDA3MDNhY2YuLjIzMGFjMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvb3BlbnJpc2MvbW0vZmF1bHQuYworKysgYi9hcmNoL29wZW5yaXNjL21tL2ZhdWx0LmMKQEAgLTE3MSw2ICsxNzEsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbGRjdy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbGRjdy5oCmluZGV4IGQyZDExYjcuLjgxMjFhYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2xkY3cuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9sZGN3LmgKQEAgLTMzLDExICszMywxOCBAQAogCiAjZW5kaWYgLyohQ09ORklHX1BBMjAqLwogCi0vKiBMRENXLCB0aGUgb25seSBhdG9taWMgcmVhZC13cml0ZSBvcGVyYXRpb24gUEEtUklTQyBoYXMuICpzaWdoKi4gICovCisvKiBMRENXLCB0aGUgb25seSBhdG9taWMgcmVhZC13cml0ZSBvcGVyYXRpb24gUEEtUklTQyBoYXMuICpzaWdoKi4KKyAgIFdlIGRvbid0IGV4cGxpY2l0bHkgZXhwb3NlIHRoYXQgIiphIiBtYXkgYmUgd3JpdHRlbiBhcyByZWxvYWQKKyAgIGZhaWxzIHRvIGZpbmQgYSByZWdpc3RlciBpbiBjbGFzcyBSMV9SRUdTIHdoZW4gImEiIG5lZWRzIHRvIGJlCisgICByZWxvYWRlZCB3aGVuIGdlbmVyYXRpbmcgNjQtYml0IFBJQyBjb2RlLiAgSW5zdGVhZCwgd2UgY2xvYmJlcgorICAgbWVtb3J5IHRvIGluZGljYXRlIHRvIHRoZSBjb21waWxlciB0aGF0IHRoZSBhc3NlbWJseSBjb2RlIHJlYWRzCisgICBvciB3cml0ZXMgdG8gaXRlbXMgb3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaW4gdGhlIGlucHV0IGFuZCBvdXRwdXQKKyAgIG9wZXJhbmRzLiAgVGhpcyBtYXkgcGVzc2ltaXplIHRoZSBjb2RlIHNvbWV3aGF0IGJ1dCBfX2xkY3cgaXMKKyAgIHVzdWFsbHkgdXNlZCB3aXRoaW4gY29kZSBibG9ja3Mgc3Vycm91bmRlZCBieSBtZW1vcnkgYmFycmlvcnMuICAqLwogI2RlZmluZSBfX2xkY3coYSkgKHsJCQkJCQlcCiAJdW5zaWduZWQgX19yZXQ7CQkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKF9fTERDVyAiIDAoJTIpLCUwIgkJCVwKLQkJOiAiPXIiIChfX3JldCksICIrbSIgKCooYSkpIDogInIiIChhKSk7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oX19MRENXICIgMCglMSksJTAiCQkJXAorCQk6ICI9ciIgKF9fcmV0KSA6ICJyIiAoYSkgOiAibWVtb3J5Iik7CQlcCiAJX19yZXQ7CQkJCQkJCVwKIH0pCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwppbmRleCA1MGRmYWZjLi41ODIyZThlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCkBAIC0yOTgsMTQgKzI5OCwxMCBAQAogfQogI2VuZGlmCiAKLQotLyogRnJlZSBtZW1vcnkgcmV0dXJuZWQgZnJvbSBtb2R1bGVfYWxsb2MgKi8KLXZvaWQgbW9kdWxlX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKQordm9pZCBtb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCWtmcmVlKG1vZC0+YXJjaC5zZWN0aW9uKTsKIAltb2QtPmFyY2guc2VjdGlvbiA9IE5VTEw7Ci0KLQl2ZnJlZShtb2R1bGVfcmVnaW9uKTsKIH0KIAogLyogQWRkaXRpb25hbCBieXRlcyBuZWVkZWQgaW4gZnJvbnQgb2YgaW5kaXZpZHVhbCBzZWN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbW0vZmF1bHQuYyBiL2FyY2gvcGFyaXNjL21tL2ZhdWx0LmMKaW5kZXggM2NhOWMxMS4uZTUxMjBlNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vZmF1bHQuYwpAQCAtMjU2LDYgKzI1Niw4IEBACiAJCSAqLwogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBiYWRfYXJlYTsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3J5cHRvL3NoYTEuYyBiL2FyY2gvcG93ZXJwYy9jcnlwdG8vc2hhMS5jCmluZGV4IGQzZmViYTVhMi4uYzE1NGNlYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NyeXB0by9zaGExLmMKKysrIGIvYXJjaC9wb3dlcnBjL2NyeXB0by9zaGExLmMKQEAgLTE1NCw0ICsxNTQsNSBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTSEExIFNlY3VyZSBIYXNoIEFsZ29yaXRobSIpOwogCitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJzaGExIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJzaGExLXBvd2VycGMiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rZXhlYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2tleGVjLmgKaW5kZXggMTljMzZjYi4uYTQ2ZjVmNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2tleGVjLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2tleGVjLmgKQEAgLTg2LDYgKzg2LDExIEBACiBleHRlcm4gdm9pZCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpOwogZXh0ZXJuIHZvaWQgbWFjaGluZV9rZXhlY19tYXNrX2ludGVycnVwdHModm9pZCk7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBrZHVtcF9pbl9wcm9ncmVzcyh2b2lkKQoreworCXJldHVybiBjcmFzaGluZ19jcHUgPj0gMDsKK30KKwogI2Vsc2UgLyogIUNPTkZJR19LRVhFQyAqLwogc3RhdGljIGlubGluZSB2b2lkIGNyYXNoX2tleGVjX3NlY29uZGFyeShzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9CiAKQEAgLTEwNiw2ICsxMTEsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGtkdW1wX2luX3Byb2dyZXNzKHZvaWQpCit7CisJcmV0dXJuIGZhbHNlOworfQorCiAjZW5kaWYgLyogQ09ORklHX0tFWEVDICovCiAjZW5kaWYgLyogISBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKaW5kZXggY2U5NTc3ZC4uOTEwNjJlZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaApAQCAtMzY2LDMgKzM2Niw0IEBACiBTWVNDQUxMX1NQVShnZXRyYW5kb20pCiBTWVNDQUxMX1NQVShtZW1mZF9jcmVhdGUpCiBTWVNDQUxMX1NQVShicGYpCitDT01QQVRfU1lTKGV4ZWN2ZWF0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBlYmM0ZjE2Li4wYmU2YzY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMjMsOSArMjMsOSBAQAogI2RlZmluZSBUSFJFQURfU0laRQkJKDEgPDwgVEhSRUFEX1NISUZUKQogCiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0jZGVmaW5lIENVUlJFTlRfVEhSRUFEX0lORk8oZGVzdCwgc3ApCWNscnJkaSBkZXN0LCBzcCwgVEhSRUFEX1NISUZUCisjZGVmaW5lIENVUlJFTlRfVEhSRUFEX0lORk8oZGVzdCwgc3ApCXN0cmluZ2lmeV9pbl9jKGNscnJkaSBkZXN0LCBzcCwgVEhSRUFEX1NISUZUKQogI2Vsc2UKLSNkZWZpbmUgQ1VSUkVOVF9USFJFQURfSU5GTyhkZXN0LCBzcCkJcmx3aW5tIGRlc3QsIHNwLCAwLCAwLCAzMS1USFJFQURfU0hJRlQKKyNkZWZpbmUgQ1VSUkVOVF9USFJFQURfSU5GTyhkZXN0LCBzcCkJc3RyaW5naWZ5X2luX2Mocmx3aW5tIGRlc3QsIHNwLCAwLCAwLCAzMS1USFJFQURfU0hJRlQpCiAjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KQEAgLTcxLDEyICs3MSwxMyBAQAogI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoVEhSRUFEX1NISUZUIC0gUEFHRV9TSElGVCkKIAogLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KLXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19jdXJyZW50X3IxIGFzbSgicjEiKTsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvKHZvaWQpCiB7Ci0JLyogZ2NjNCwgYXQgbGVhc3QsIGlzIHNtYXJ0IGVub3VnaCB0byB0dXJuIHRoaXMgaW50byBhIHNpbmdsZQotCSAqIHJsd2lubSBmb3IgcHBjMzIgYW5kIGNscnJkaSBmb3IgcHBjNjQgKi8KLQlyZXR1cm4gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKShfX2N1cnJlbnRfcjEgJiB+KFRIUkVBRF9TSVpFLTEpKTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWFzbSAoQ1VSUkVOVF9USFJFQURfSU5GTyglMCwxKSA6ICI9ciIgKHZhbCkpOworCisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKil2YWw7CiB9CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCBlMGRhMDIxLi4zNmI3OWMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8dWFwaS9hc20vdW5pc3RkLmg+CiAKIAotI2RlZmluZSBfX05SX3N5c2NhbGxzCQkzNjIKKyNkZWZpbmUgX19OUl9zeXNjYWxscwkJMzYzCiAKICNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKICNkZWZpbmUgTlJfc3lzY2FsbHMJX19OUl9zeXNjYWxscwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAppbmRleCBmNTUzNTFmLi5lZjViNWIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtMzg0LDUgKzM4NCw2IEBACiAjZGVmaW5lIF9fTlJfZ2V0cmFuZG9tCQkzNTkKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJMzYwCiAjZGVmaW5lIF9fTlJfYnBmCQkzNjEKKyNkZWZpbmUgX19OUl9leGVjdmVhdAkJMzYyCiAKICNlbmRpZiAvKiBfVUFQSV9BU01fUE9XRVJQQ19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKaW5kZXggODc5YjNhYS4uZjk2ZDFlYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKQEAgLTMzMCw3ICszMzAsNyBAQAogICAgICAgICAqIHVzaW5nIGRlYnVnZ2VyIElQSS4KICAgICAgICAgKi8KIAotCWlmIChjcmFzaGluZ19jcHUgPT0gLTEpCisJaWYgKCFrZHVtcF9pbl9wcm9ncmVzcygpKQogCQlrZXhlY19wcmVwYXJlX2NwdXMoKTsKIAogCXByX2RlYnVnKCJrZXhlYzogU3RhcnRpbmcgc3dpdGNob3ZlciBzZXF1ZW5jZS5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCAzN2Q1MTJkLi4yYTUyNWM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwpAQCAtMTE4NCw2ICsxMTg0LDggQEAKIAkJCSBwciwgKHByICYmIHByLT5uYW1lKSA/IHByLT5uYW1lIDogIm5pbCIpOwogCiAJCWlmIChwciAmJiAhKHByLT5mbGFncyAmIElPUkVTT1VSQ0VfVU5TRVQpKSB7CisJCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gYnVzLT5zZWxmOworCiAJCQlpZiAocmVxdWVzdF9yZXNvdXJjZShwciwgcmVzKSA9PSAwKQogCQkJCWNvbnRpbnVlOwogCQkJLyoKQEAgLTExOTMsNiArMTE5NSwxMSBAQAogCQkJICovCiAJCQlpZiAocmVwYXJlbnRfcmVzb3VyY2VzKHByLCByZXMpID09IDApCiAJCQkJY29udGludWU7CisKKwkJCWlmIChkZXYgJiYgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNICYmCisJCQkgICAgcGNpX2NsYWltX2JyaWRnZV9yZXNvdXJjZShkZXYsCisJCQkJCQlpICsgUENJX0JSSURHRV9SRVNPVVJDRVMpID09IDApCisJCQkJY29udGludWU7CiAJCX0KIAkJcHJfd2FybmluZygiUENJOiBDYW5ub3QgYWxsb2NhdGUgcmVzb3VyY2UgcmVnaW9uICIKIAkJCSAgICIlZCBvZiBQQ0kgYnJpZGdlICVkLCB3aWxsIHJlbWFwXG4iLCBpLCBidXMtPm51bWJlcik7CkBAIC0xNDAxLDcgKzE0MDgsMTAgQEAKIAkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5lbmQsCiAJCQkJICh1bnNpZ25lZCBpbnQpci0+ZmxhZ3MpOwogCi0JCQlwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpKTsKKwkJCWlmIChwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQlwY2lfY2xhaW1fYnJpZGdlX3Jlc291cmNlKGRldiwgaSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCmluZGV4IDhlYzAxN2MuLjhiMmQyZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwpAQCAtNzAwLDYgKzcwMCw3IEBACiAJc21wX3N0b3JlX2NwdV9pbmZvKGNwdSk7CiAJc2V0X2RlYyh0Yl90aWNrc19wZXJfamlmZnkpOwogCXByZWVtcHRfZGlzYWJsZSgpOworCWNwdV9jYWxsaW5fbWFwW2NwdV0gPSAxOwogCiAJaWYgKHNtcF9vcHMtPnNldHVwX2NwdSkKIAkJc21wX29wcy0+c2V0dXBfY3B1KGNwdSk7CkBAIC03MzgsMTQgKzczOSw2IEBACiAJbm90aWZ5X2NwdV9zdGFydGluZyhjcHUpOwogCXNldF9jcHVfb25saW5lKGNwdSwgdHJ1ZSk7CiAKLQkvKgotCSAqIENQVSBtdXN0IGJlIG1hcmtlZCBhY3RpdmUgYW5kIG9ubGluZSBiZWZvcmUgd2Ugc2lnbmFsIGJhY2sgdG8gdGhlCi0JICogbWFzdGVyLCBiZWNhdXNlIHRoZSBzY2hlZHVsZXIgbmVlZHMgdG8gc2VlIHRoZSBjcHVfb25saW5lIGFuZAotCSAqIGNwdV9hY3RpdmUgYml0cyBzZXQuCi0JICovCi0Jc21wX3dtYigpOwotCWNwdV9jYWxsaW5fbWFwW2NwdV0gPSAxOwotCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJY3B1X3N0YXJ0dXBfZW50cnkoQ1BVSFBfT05MSU5FKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9jb3Byb19mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL21tL2NvcHJvX2ZhdWx0LmMKaW5kZXggNWEyMzZmMC4uMWI1MzA1ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2NvcHJvX2ZhdWx0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2NvcHJvX2ZhdWx0LmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJaWYgKCpmbHQgJiBWTV9GQVVMVF9PT00pIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0gZWxzZSBpZiAoKmZsdCAmIFZNX0ZBVUxUX1NJR0JVUykgeworCQl9IGVsc2UgaWYgKCpmbHQgJiAoVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfU0lHU0VHVikpIHsKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKaW5kZXggZWI3OTkwNy4uNjE1NGIwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKQEAgLTQzNyw2ICs0MzcsOCBAQAogCSAqLwogCWZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHJlc3MsIGZsYWdzKTsKIAlpZiAodW5saWtlbHkoZmF1bHQgJiAoVk1fRkFVTFRfUkVUUll8Vk1fRkFVTFRfRVJST1IpKSkgeworCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJcmMgPSBtbV9mYXVsdF9lcnJvcihyZWdzLCBhZGRyZXNzLCBmYXVsdCk7CiAJCWlmIChyYyA+PSBNTV9GQVVMVF9SRVRVUk4pCiAJCQlnb3RvIGJhaWw7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYwppbmRleCAxY2ExMjViLi5kMTkxNmI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTY5OSw3ICs2OTksNyBAQAogdm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpmcCkKIHsKIAlpZiAoZnAtPmppdGVkKQotCQltb2R1bGVfZnJlZShOVUxMLCBmcC0+YnBmX2Z1bmMpOworCQltb2R1bGVfbWVtZnJlZShmcC0+YnBmX2Z1bmMpOwogCiAJYnBmX3Byb2dfdW5sb2NrX2ZyZWUoZnApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtd3JhcHBlcnMuUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLXdyYXBwZXJzLlMKaW5kZXggNTRlY2E4Yi4uMDUwOWJjYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtd3JhcHBlcnMuUworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC13cmFwcGVycy5TCkBAIC00MCw3ICs0MCw2IEBACiAJYgkxZjsJCQkJCQlcCiBFTkRfRlRSX1NFQ1RJT04oMCwgMSk7CQkJCQkJXAogCWxkCXIxMixvcGFsX3RyYWNlcG9pbnRfcmVmY291bnRAdG9jKHIyKTsJCVwKLQlzdGQJcjEyLDMyKHIxKTsJCQkJCVwKIAljbXBkaQlyMTIsMDsJCQkJCQlcCiAJYm5lLQlMQUJFTDsJCQkJCQlcCiAxOgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvc2V0dXAuYwppbmRleCBiNzAwYTMyLi5kMmRlN2Q1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvc2V0dXAuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJICogYWxsIGNwdXMgYXQgYm9vdC4gR2V0IHRoZXNlIHJlZyB2YWx1ZXMgb2YgY3VycmVudCBjcHUgYW5kIHVzZSB0aGUKIAkgKiBzYW1lIGFjY3Jvc3MgYWxsIGNwdXMuCiAJICovCi0JdWludDY0X3QgbHBjcl92YWwgPSBtZnNwcihTUFJOX0xQQ1IpOworCXVpbnQ2NF90IGxwY3JfdmFsID0gbWZzcHIoU1BSTl9MUENSKSAmIH4odTY0KUxQQ1JfUEVDRTE7CiAJdWludDY0X3QgaGlkMF92YWwgPSBtZnNwcihTUFJOX0hJRDApOwogCXVpbnQ2NF90IGhpZDFfdmFsID0gbWZzcHIoU1BSTl9ISUQxKTsKIAl1aW50NjRfdCBoaWQ0X3ZhbCA9IG1mc3ByKFNQUk5fSElENCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwppbmRleCA0Njk3NTFkLi5iNTY4MmZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxhc20vdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vcGxwYXJfd3JhcHBlcnMuaD4KKyNpbmNsdWRlIDxhc20va2V4ZWMuaD4KICNpbmNsdWRlIDxhc20vZmFkdW1wLmg+CiAKICNpbmNsdWRlICJwc2VyaWVzLmgiCkBAIC0yNjcsOCArMjY4LDEzIEBACiAJCSAqIG91dCB0byB0aGUgdXNlciwgYnV0IGF0IGxlYXN0IHRoaXMgd2lsbCBzdG9wIHVzIGZyb20KIAkJICogY29udGludWluZyBvbiBmdXJ0aGVyIGFuZCBjcmVhdGluZyBhbiBldmVuIG1vcmUKIAkJICogZGlmZmljdWx0IHRvIGRlYnVnIHNpdHVhdGlvbi4KKwkJICoKKwkJICogVGhlcmUgaXMgYSBrbm93biBwcm9ibGVtIHdoZW4ga2R1bXAnaW5nLCBpZiBjcHVzIGFyZSBvZmZsaW5lCisJCSAqIHRoZSBhYm92ZSBjYWxsIHdpbGwgZmFpbC4gUmF0aGVyIHRoYW4gcGFuaWNraW5nIGFnYWluLCBrZWVwCisJCSAqIGdvaW5nIGFuZCBob3BlIHRoZSBrZHVtcCBrZXJuZWwgaXMgYWxzbyBsaXR0bGUgZW5kaWFuLCB3aGljaAorCQkgKiBpdCB1c3VhbGx5IGlzLgogCQkgKi8KLQkJaWYgKHJjKQorCQlpZiAocmMgJiYgIWtkdW1wX2luX3Byb2dyZXNzKCkpCiAJCQlwYW5pYygiQ291bGQgbm90IGVuYWJsZSBiaWcgZW5kaWFuIGV4Y2VwdGlvbnMiKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCA1YjE1MGYwLi4xM2M2ZTIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCkBAIC0zMzcsNiArMzM3LDcgQEAKIAlhcmdzLnRva2VuID0gcnRhc190b2tlbigic2V0LWluZGljYXRvciIpOwogCWlmIChhcmdzLnRva2VuID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKQogCQlyZXR1cm47CisJYXJncy50b2tlbiA9IGNwdV90b19iZTMyKGFyZ3MudG9rZW4pOwogCWFyZ3MubmFyZ3MgPSBjcHVfdG9fYmUzMigzKTsKIAlhcmdzLm5yZXQgPSBjcHVfdG9fYmUzMigxKTsKIAlhcmdzLnJldHMgPSAmYXJncy5hcmdzWzNdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYwppbmRleCAzMjA0MGFjLi5hZmJlMDc5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYwpAQCAtMjMxLDcgKzIzMSw3IEBACiBzdHJ1Y3QgZGJmc19kMmZjX2hkciB7CiAJdTY0CWxlbjsJCS8qIExlbmd0aCBvZiBkMmZjIGJ1ZmZlciB3aXRob3V0IGhlYWRlciAqLwogCXUxNgl2ZXJzaW9uOwkvKiBWZXJzaW9uIG9mIGhlYWRlciAqLwotCWNoYXIJdG9kX2V4dFsxNl07CS8qIFRPRCBjbG9jayBmb3IgZDJmYyAqLworCWNoYXIJdG9kX2V4dFtTVE9SRV9DTE9DS19FWFRfU0laRV07IC8qIFRPRCBjbG9jayBmb3IgZDJmYyAqLwogCXU2NAljb3VudDsJCS8qIE51bWJlciBvZiBWTSBndWVzdHMgaW4gZDJmYyBidWZmZXIgKi8KIAljaGFyCXJlc2VydmVkWzMwXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAppbmRleCAzN2I5MDkxLi4xNmFhMGM3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaApAQCAtMzYsNyArMzYsNyBAQAogCiBzdGF0aWMgaW5saW5lIG5vdHJhY2UgdW5zaWduZWQgbG9uZyBhcmNoX2xvY2FsX3NhdmVfZmxhZ3Modm9pZCkKIHsKLQlyZXR1cm4gX19hcmNoX2xvY2FsX2lycV9zdG9zbSgweDAwKTsKKwlyZXR1cm4gX19hcmNoX2xvY2FsX2lycV9zdG5zbSgweGZmKTsKIH0KIAogc3RhdGljIGlubGluZSBub3RyYWNlIHVuc2lnbmVkIGxvbmcgYXJjaF9sb2NhbF9pcnFfc2F2ZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RpbWV4LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAppbmRleCA4YmVlZTFjLi45OGViMmE1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaApAQCAtNjcsMjAgKzY3LDIyIEBACiAJc2V0X2Nsb2NrX2NvbXBhcmF0b3IoUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IpOwogfQogCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkxMTkzMTgwIC8qIFVuZGVybHlpbmcgSFogKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMTkzMTgwIC8qIFVuZGVybHlpbmcgSFogKi8KKyNkZWZpbmUgU1RPUkVfQ0xPQ0tfRVhUX1NJWkUJMTYJLyogc3Rja2Ugd3JpdGVzIDE2IGJ5dGVzICovCiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGN5Y2xlc190OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X3RvZF9jbG9ja19leHQoY2hhciBjbGtbMTZdKQorc3RhdGljIGlubGluZSB2b2lkIGdldF90b2RfY2xvY2tfZXh0KGNoYXIgKmNsaykKIHsKLQl0eXBlZGVmIHN0cnVjdCB7IGNoYXIgX1tzaXplb2YoY2xrKV07IH0gYWRkcnR5cGU7CisJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bU1RPUkVfQ0xPQ0tfRVhUX1NJWkVdOyB9IGFkZHJ0eXBlOwogCiAJYXNtIHZvbGF0aWxlKCJzdGNrZSAlMCIgOiAiPVEiICgqKGFkZHJ0eXBlICopIGNsaykgOiA6ICJjYyIpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRfdG9kX2Nsb2NrKHZvaWQpCiB7Ci0JdW5zaWduZWQgY2hhciBjbGtbMTZdOworCXVuc2lnbmVkIGNoYXIgY2xrW1NUT1JFX0NMT0NLX0VYVF9TSVpFXTsKKwogCWdldF90b2RfY2xvY2tfZXh0KGNsayk7CiAJcmV0dXJuICooKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSZjbGtbMV0pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAppbmRleCAyYjQ0NmNmLi42Nzg3OGFmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtMjg5LDcgKzI4OSw4IEBACiAjZGVmaW5lIF9fTlJfYnBmCQkzNTEKICNkZWZpbmUgX19OUl9zMzkwX3BjaV9tbWlvX3dyaXRlCTM1MgogI2RlZmluZSBfX05SX3MzOTBfcGNpX21taW9fcmVhZAkJMzUzCi0jZGVmaW5lIE5SX3N5c2NhbGxzIDM1NAorI2RlZmluZSBfX05SX2V4ZWN2ZWF0CQkzNTQKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzU1CiAKIC8qIAogICogVGhlcmUgYXJlIHNvbWUgc3lzdGVtIGNhbGxzIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9uIDY0IGJpdCwgc29tZQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYjg5YjU5MS4uNDA5ZDE1MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCkBAIC01NSwxNCArNTUsMTAgQEAKIH0KICNlbmRpZgogCi0vKiBGcmVlIG1lbW9yeSByZXR1cm5lZCBmcm9tIG1vZHVsZV9hbGxvYyAqLwotdm9pZCBtb2R1bGVfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pCit2b2lkIG1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JaWYgKG1vZCkgewotCQl2ZnJlZShtb2QtPmFyY2guc3ltaW5mbyk7Ci0JCW1vZC0+YXJjaC5zeW1pbmZvID0gTlVMTDsKLQl9Ci0JdmZyZWUobW9kdWxlX3JlZ2lvbik7CisJdmZyZWUobW9kLT5hcmNoLnN5bWluZm8pOworCW1vZC0+YXJjaC5zeW1pbmZvID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgY2hlY2tfcmVsYShFbGZfUmVsYSAqcmVsYSwgc3RydWN0IG1vZHVsZSAqbWUpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMgYi9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKaW5kZXggYTI5ODcyNC4uOTM5ZWM0NyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUwpAQCAtMzYyLDMgKzM2Miw0IEBACiBTWVNDQUxMKHN5c19icGYsc3lzX2JwZixjb21wYXRfc3lzX2JwZikKIFNZU0NBTEwoc3lzX25pX3N5c2NhbGwsc3lzX3MzOTBfcGNpX21taW9fd3JpdGUsY29tcGF0X3N5c19zMzkwX3BjaV9tbWlvX3dyaXRlKQogU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCxzeXNfczM5MF9wY2lfbW1pb19yZWFkLGNvbXBhdF9zeXNfczM5MF9wY2lfbW1pb19yZWFkKQorU1lTQ0FMTChzeXNfZXhlY3ZlYXQsc3lzX2V4ZWN2ZWF0LGNvbXBhdF9zeXNfZXhlY3ZlYXQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Vwcm9iZXMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXByb2Jlcy5jCmluZGV4IGY2YjNjZDAuLmNjNzMyODAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdXByb2Jlcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdXByb2Jlcy5jCkBAIC00OCw2ICs0OCwzMCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGludCBjaGVja19wZXJfZXZlbnQodW5zaWduZWQgc2hvcnQgY2F1c2UsIHVuc2lnbmVkIGxvbmcgY29udHJvbCwKKwkJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmICghKHJlZ3MtPnBzdy5tYXNrICYgUFNXX01BU0tfUEVSKSkKKwkJcmV0dXJuIDA7CisJLyogdXNlciBzcGFjZSBzaW5nbGUgc3RlcCAqLworCWlmIChjb250cm9sID09IDApCisJCXJldHVybiAxOworCS8qIG92ZXIgaW5kaWNhdGlvbiBmb3Igc3RvcmFnZSBhbHRlcmF0aW9uICovCisJaWYgKChjb250cm9sICYgMHgyMDIwMDAwMCkgJiYgKGNhdXNlICYgMHgyMDAwKSkKKwkJcmV0dXJuIDE7CisJaWYgKGNhdXNlICYgMHg4MDAwKSB7CisJCS8qIGFsbCBicmFuY2hlcyAqLworCQlpZiAoKGNvbnRyb2wgJiAweDgwODAwMDAwKSA9PSAweDgwMDAwMDAwKQorCQkJcmV0dXJuIDE7CisJCS8qIGJyYW5jaCBpbnRvIHNlbGVjdGVkIHJhbmdlICovCisJCWlmICgoKGNvbnRyb2wgJiAweDgwODAwMDAwKSA9PSAweDgwODAwMDAwKSAmJgorCQkgICAgcmVncy0+cHN3LmFkZHIgPj0gY3VycmVudC0+dGhyZWFkLnBlcl91c2VyLnN0YXJ0ICYmCisJCSAgICByZWdzLT5wc3cuYWRkciA8PSBjdXJyZW50LT50aHJlYWQucGVyX3VzZXIuZW5kKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiBpbnQgYXJjaF91cHJvYmVfcG9zdF94b2woc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgZml4dXAgPSBwcm9iZV9nZXRfZml4dXBfdHlwZShhdXByb2JlLT5pbnNuKTsKQEAgLTcxLDkgKzk1LDEzIEBACiAJCWlmIChyZWdzLT5wc3cuYWRkciAtIHV0YXNrLT54b2xfdmFkZHIgPT0gaWxlbikKIAkJCXJlZ3MtPnBzdy5hZGRyID0gdXRhc2stPnZhZGRyICsgaWxlbjsKIAl9Ci0JLyogSWYgcGVyIHRyYWNpbmcgd2FzIGFjdGl2ZSBnZW5lcmF0ZSB0cmFwICovCi0JaWYgKHJlZ3MtPnBzdy5tYXNrICYgUFNXX01BU0tfUEVSKQotCQlkb19wZXJfdHJhcChyZWdzKTsKKwlpZiAoY2hlY2tfcGVyX2V2ZW50KGN1cnJlbnQtPnRocmVhZC5wZXJfZXZlbnQuY2F1c2UsCisJCQkgICAgY3VycmVudC0+dGhyZWFkLnBlcl91c2VyLmNvbnRyb2wsIHJlZ3MpKSB7CisJCS8qIGZpeCBwZXIgYWRkcmVzcyAqLworCQljdXJyZW50LT50aHJlYWQucGVyX2V2ZW50LmFkZHJlc3MgPSB1dGFzay0+dmFkZHI7CisJCS8qIHRyaWdnZXIgcGVyIGV2ZW50ICovCisJCXNldF9wdF9yZWdzX2ZsYWcocmVncywgUElGX1BFUl9UUkFQKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNiw2ICsxMzQsNyBAQAogCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9VUFJPQkVfU0lOR0xFU1RFUCk7CiAJcmVncy0+aW50X2NvZGUgPSBhdXByb2JlLT5zYXZlZF9pbnRfY29kZTsKIAlyZWdzLT5wc3cuYWRkciA9IGN1cnJlbnQtPnV0YXNrLT52YWRkcjsKKwljdXJyZW50LT50aHJlYWQucGVyX2V2ZW50LmFkZHJlc3MgPSBjdXJyZW50LT51dGFzay0+dmFkZHI7CiB9CiAKIHVuc2lnbmVkIGxvbmcgYXJjaF91cmV0cHJvYmVfaGlqYWNrX3JldHVybl9hZGRyKHVuc2lnbmVkIGxvbmcgdHJhbXBvbGluZSwKQEAgLTE0NiwxNyArMTc1LDIwIEBACiAJX19yYzsJCQkJCQlcCiB9KQogCi0jZGVmaW5lIGVtdV9zdG9yZV9yaWwocHRyLCBpbnB1dCkJCQlcCisjZGVmaW5lIGVtdV9zdG9yZV9yaWwocmVncywgcHRyLCBpbnB1dCkJCQlcCiAoewkJCQkJCQlcCiAJdW5zaWduZWQgaW50IG1hc2sgPSBzaXplb2YoKihwdHIpKSAtIDE7CQlcCisJX190eXBlb2ZfXyhwdHIpIF9fcHRyID0gKHB0cik7CQkJXAogCWludCBfX3JjID0gMDsJCQkJCVwKIAkJCQkJCQlcCiAJaWYgKCF0ZXN0X2ZhY2lsaXR5KDM0KSkJCQkJXAogCQlfX3JjID0gRU1VX0lMTEVHQUxfT1A7CQkJXAotCWVsc2UgaWYgKCh1NjQgX19mb3JjZSlwdHIgJiBtYXNrKQkJXAorCWVsc2UgaWYgKCh1NjQgX19mb3JjZSlfX3B0ciAmIG1hc2spCQlcCiAJCV9fcmMgPSBFTVVfU1BFQ0lGSUNBVElPTjsJCVwKLQllbHNlIGlmIChwdXRfdXNlcigqKGlucHV0KSwgcHRyKSkJCVwKKwllbHNlIGlmIChwdXRfdXNlcigqKGlucHV0KSwgX19wdHIpKQkJXAogCQlfX3JjID0gRU1VX0FERFJFU1NJTkc7CQkJXAorCWlmIChfX3JjID09IDApCQkJCQlcCisJCXNpbV9zdG9yX2V2ZW50KHJlZ3MsIF9fcHRyLCBtYXNrICsgMSk7CVwKIAlfX3JjOwkJCQkJCVwKIH0pCiAKQEAgLTE5OCw2ICsyMzAsMjUgQEAKIH07CiAKIC8qCisgKiBJZiB1c2VyIHBlciByZWdpc3RlcnMgYXJlIHNldHVwIHRvIHRyYWNlIHN0b3JhZ2UgYWx0ZXJhdGlvbnMgYW5kIGFuCisgKiBlbXVsYXRlZCBzdG9yZSB0b29rIHBsYWNlIG9uIGEgZml0dGluZyBhZGRyZXNzIGEgdXNlciB0cmFwIGlzIGdlbmVyYXRlZC4KKyAqLworc3RhdGljIHZvaWQgc2ltX3N0b3JfZXZlbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmFkZHIsIGludCBsZW4pCit7CisJaWYgKCEocmVncy0+cHN3Lm1hc2sgJiBQU1dfTUFTS19QRVIpKQorCQlyZXR1cm47CisJaWYgKCEoY3VycmVudC0+dGhyZWFkLnBlcl91c2VyLmNvbnRyb2wgJiBQRVJfRVZFTlRfU1RPUkUpKQorCQlyZXR1cm47CisJaWYgKCh2b2lkICopY3VycmVudC0+dGhyZWFkLnBlcl91c2VyLnN0YXJ0ID4gKGFkZHIgKyBsZW4pKQorCQlyZXR1cm47CisJaWYgKCh2b2lkICopY3VycmVudC0+dGhyZWFkLnBlcl91c2VyLmVuZCA8IGFkZHIpCisJCXJldHVybjsKKwljdXJyZW50LT50aHJlYWQucGVyX2V2ZW50LmFkZHJlc3MgPSByZWdzLT5wc3cuYWRkcjsKKwljdXJyZW50LT50aHJlYWQucGVyX2V2ZW50LmNhdXNlID0gUEVSX0VWRU5UX1NUT1JFID4+IDE2OworCXNldF9wdF9yZWdzX2ZsYWcocmVncywgUElGX1BFUl9UUkFQKTsKK30KKworLyoKICAqIHBjIHJlbGF0aXZlIGluc3RydWN0aW9ucyBhcmUgZW11bGF0ZWQsIHNpbmNlIHBhcmFtZXRlcnMgbWF5IG5vdCBiZQogICogYWNjZXNzaWJsZSBmcm9tIHRoZSB4b2wgYXJlYSBkdWUgdG8gcmFuZ2UgbGltaXRhdGlvbnMuCiAgKi8KQEAgLTI0OSwxMyArMzAwLDEzIEBACiAJCQlyYyA9IGVtdV9sb2FkX3JpbCgodTMyIF9fdXNlciAqKXVwdHIsICZyeC0+dTY0KTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6IC8qIHN0aHJsICovCi0JCQlyYyA9IGVtdV9zdG9yZV9yaWwoKHUxNiBfX3VzZXIgKil1cHRyLCAmcngtPnUxNlszXSk7CisJCQlyYyA9IGVtdV9zdG9yZV9yaWwocmVncywgKHUxNiBfX3VzZXIgKil1cHRyLCAmcngtPnUxNlszXSk7CiAJCQlicmVhazsKIAkJY2FzZSAweDBiOiAvKiBzdGdybCAqLwotCQkJcmMgPSBlbXVfc3RvcmVfcmlsKCh1NjQgX191c2VyICopdXB0ciwgJnJ4LT51NjQpOworCQkJcmMgPSBlbXVfc3RvcmVfcmlsKHJlZ3MsICh1NjQgX191c2VyICopdXB0ciwgJnJ4LT51NjQpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwZjogLyogc3RybCAqLwotCQkJcmMgPSBlbXVfc3RvcmVfcmlsKCh1MzIgX191c2VyICopdXB0ciwgJnJ4LT51MzJbMV0pOworCQkJcmMgPSBlbXVfc3RvcmVfcmlsKHJlZ3MsICh1MzIgX191c2VyICopdXB0ciwgJnJ4LT51MzJbMV0pOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMKaW5kZXggN2YwMDg5ZC4uZTM0MTIyZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMKQEAgLTEyOCw4ICsxMjgsNiBAQAogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGkgPSB0YXNrX3RocmVhZF9pbmZvKHRzayk7CiAJdTY0IHRpbWVyLCBzeXN0ZW07CiAKLQlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7Ci0KIAl0aW1lciA9IFMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV90aW1lcjsKIAlTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfdGltZXIgPSBnZXRfdnRpbWVyKCk7CiAJUzM5MF9sb3djb3JlLnN5c3RlbV90aW1lciArPSB0aW1lciAtIFMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV90aW1lcjsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggODExOTM3Yi4uOTA2NWQ1YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTM3NCw2ICszNzQsMTIgQEAKIAkJCQlkb19ub19jb250ZXh0KHJlZ3MpOwogCQkJZWxzZQogCQkJCXBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KCk7CisJCX0gZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKSB7CisJCQkvKiBLZXJuZWwgbW9kZT8gSGFuZGxlIGV4Y2VwdGlvbnMgb3IgZGllICovCisJCQlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJCQlkb19ub19jb250ZXh0KHJlZ3MpOworCQkJZWxzZQorCQkJCWRvX3NpZ3NlZ3YocmVncywgU0VHVl9NQVBFUlIpOwogCQl9IGVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKSB7CiAJCQkvKiBLZXJuZWwgbW9kZT8gSGFuZGxlIGV4Y2VwdGlvbnMgb3IgZGllICovCiAJCQlpZiAoIXVzZXJfbW9kZShyZWdzKSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IGJlOTkzNTcuLjNjZjhjYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMzIyLDExICszMjIsMTIgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZ21hcF9zZWdtZW50X2dhZGRyKHVuc2lnbmVkIGxvbmcgKmVudHJ5KQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBtYXNrOwogCiAJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpIGVudHJ5IC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCW9mZnNldCA9IChvZmZzZXQgJiAoUFRSU19QRVJfUE1EIC0gMSkpICogUE1EX1NJWkU7Ci0JcGFnZSA9IHBtZF90b19wYWdlKChwbWRfdCAqKSBlbnRyeSk7CisJbWFzayA9IH4oUFRSU19QRVJfUE1EICogc2l6ZW9mKHBtZF90KSAtIDEpOworCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpIGVudHJ5ICYgbWFzaykpOwogCXJldHVybiBwYWdlLT5pbmRleCArIG9mZnNldDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL25ldC9icGZfaml0LlMgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXQuUwppbmRleCA3ZTQ1ZDEzLi5iYTQ0YzlmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXQuUworKysgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXQuUwpAQCAtMjIsOCArMjIsOCBAQAogICogc2tiX2NvcHlfYml0cyB0YWtlcyA0IHBhcmFtZXRlcnM6CiAgKiAgICVyMiA9IHNrYiBwb2ludGVyCiAgKiAgICVyMyA9IG9mZnNldCBpbnRvIHNrYiBkYXRhCi0gKiAgICVyNCA9IGxlbmd0aCB0byBjb3B5Ci0gKiAgICVyNSA9IHBvaW50ZXIgdG8gdGVtcCBidWZmZXIKKyAqICAgJXI0ID0gcG9pbnRlciB0byB0ZW1wIGJ1ZmZlcgorICogICAlcjUgPSBsZW5ndGggdG8gY29weQogICovCiAjZGVmaW5lIFNLQkRBVEEJJXI4CiAKQEAgLTQ0LDggKzQ0LDkgQEAKIAogc2tfbG9hZF93b3JkX3Nsb3c6CiAJbGdyCSVyOSwlcjIJCQkjIHNhdmUgJXIyCi0JbGhpCSVyNCw0CQkJIyA0IGJ5dGVzCi0JbGEJJXI1LDE2MCglcjE1KQkJIyBwb2ludGVyIHRvIHRlbXAgYnVmZmVyCisJbGdyCSVyMywlcjEJCQkjIG9mZnNldAorCWxhCSVyNCwxNjAoJXIxNSkJCSMgcG9pbnRlciB0byB0ZW1wIGJ1ZmZlcgorCWxnaGkJJXI1LDQJCQkjIDQgYnl0ZXMKIAlicmFzbAklcjE0LHNrYl9jb3B5X2JpdHMJIyBnZXQgZGF0YSBmcm9tIHNrYgogCWwJJXI1LDE2MCglcjE1KQkJIyBsb2FkIHJlc3VsdCBmcm9tIHRlbXAgYnVmZmVyCiAJbHRncgklcjIsJXIyCQkJIyBzZXQgY2MgdG8gKCVyMiAhPSAwKQpAQCAtNjksOCArNzAsOSBAQAogCiBza19sb2FkX2hhbGZfc2xvdzoKIAlsZ3IJJXI5LCVyMgkJCSMgc2F2ZSAlcjIKLQlsaGkJJXI0LDIJCQkjIDIgYnl0ZXMKLQlsYQklcjUsMTYyKCVyMTUpCQkjIHBvaW50ZXIgdG8gdGVtcCBidWZmZXIKKwlsZ3IJJXIzLCVyMQkJCSMgb2Zmc2V0CisJbGEJJXI0LDE2MiglcjE1KQkJIyBwb2ludGVyIHRvIHRlbXAgYnVmZmVyCisJbGdoaQklcjUsMgkJCSMgMiBieXRlcwogCWJyYXNsCSVyMTQsc2tiX2NvcHlfYml0cwkjIGdldCBkYXRhIGZyb20gc2tiCiAJeGMJMTYwKDIsJXIxNSksMTYwKCVyMTUpCiAJbAklcjUsMTYwKCVyMTUpCQkjIGxvYWQgcmVzdWx0IGZyb20gdGVtcCBidWZmZXIKQEAgLTk1LDggKzk3LDkgQEAKIAogc2tfbG9hZF9ieXRlX3Nsb3c6CiAJbGdyCSVyOSwlcjIJCQkjIHNhdmUgJXIyCi0JbGhpCSVyNCwxCQkJIyAxIGJ5dGVzCi0JbGEJJXI1LDE2MyglcjE1KQkJIyBwb2ludGVyIHRvIHRlbXAgYnVmZmVyCisJbGdyCSVyMywlcjEJCQkjIG9mZnNldAorCWxhCSVyNCwxNjMoJXIxNSkJCSMgcG9pbnRlciB0byB0ZW1wIGJ1ZmZlcgorCWxnaGkJJXI1LDEJCQkjIDEgYnl0ZQogCWJyYXNsCSVyMTQsc2tiX2NvcHlfYml0cwkjIGdldCBkYXRhIGZyb20gc2tiCiAJeGMJMTYwKDMsJXIxNSksMTYwKCVyMTUpCiAJbAklcjUsMTYwKCVyMTUpCQkjIGxvYWQgcmVzdWx0IGZyb20gdGVtcCBidWZmZXIKQEAgLTEwNCwxMSArMTA3LDExIEBACiAJbGdyCSVyMiwlcjkJCQkjIHJlc3RvcmUgJXIyCiAJYnIJJXI4CiAKLQkvKiBBID0gKCoodTggKikoc2tiLT5kYXRhK0spICYgMHhmKSA8PCAyICovCisJLyogWCA9ICgqKHU4ICopKHNrYi0+ZGF0YStLKSAmIDB4ZikgPDwgMiAqLwogRU5UUlkoc2tfbG9hZF9ieXRlX21zaCkKIAlsbGdmcgklcjEsJXIzCQkJIyBleHRlbmQgb2Zmc2V0CiAJY2xyCSVyMTEsJXIzCQkjIGhsZW4gPCBvZmZzZXQgPwotCWpsZQlza19sb2FkX2J5dGVfc2xvdworCWpsZQlza19sb2FkX2J5dGVfbXNoX3Nsb3cKIAlsaGkJJXIxMiwwCiAJaWMJJXIxMiwwKCVyMSwlcjEwKQkjIGdldCBieXRlIGZyb20gc2tiCiAJbmlsbAklcjEyLDB4MGYKQEAgLTExOCw4ICsxMjEsOSBAQAogCiBza19sb2FkX2J5dGVfbXNoX3Nsb3c6CiAJbGdyCSVyOSwlcjIJCQkjIHNhdmUgJXIyCi0JbGhpCSVyNCwyCQkJIyAyIGJ5dGVzCi0JbGEJJXI1LDE2MiglcjE1KQkJIyBwb2ludGVyIHRvIHRlbXAgYnVmZmVyCisJbGdyCSVyMywlcjEJCQkjIG9mZnNldAorCWxhCSVyNCwxNjMoJXIxNSkJCSMgcG9pbnRlciB0byB0ZW1wIGJ1ZmZlcgorCWxnaGkJJXI1LDEJCQkjIDEgYnl0ZQogCWJyYXNsCSVyMTQsc2tiX2NvcHlfYml0cwkjIGdldCBkYXRhIGZyb20gc2tiCiAJeGMJMTYwKDMsJXIxNSksMTYwKCVyMTUpCiAJbAklcjEyLDE2MCglcjE1KQkJIyBsb2FkIHJlc3VsdCBmcm9tIHRlbXAgYnVmZmVyCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwppbmRleCBjNTJhYzc3Li5iYmQxOTgxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jCisrKyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTQzMSw4ICs0MzEsOCBAQAogCQlFTUlUNF9ESVNQKDB4ODg1MDAwMDAsIEspOwogCQlicmVhazsKIAljYXNlIEJQRl9BTFUgfCBCUEZfTkVHOiAvKiBBID0gLUEgKi8KLQkJLyogbG5yICVyNSwlcjUgKi8KLQkJRU1JVDIoMHgxMTU1KTsKKwkJLyogbGNyICVyNSwlcjUgKi8KKwkJRU1JVDIoMHgxMzU1KTsKIAkJYnJlYWs7CiAJY2FzZSBCUEZfSk1QIHwgQlBGX0pBOiAvKiBpcCArPSBLICovCiAJCW9mZnNldCA9IGFkZHJzW2kgKyBLXSArIGppdC0+c3RhcnQgLSBqaXQtPnByZzsKQEAgLTQ0OCwxNSArNDQ4LDEyIEBACiAJCW1hc2sgPSAweDgwMDAwMDsgLyogamUgKi8KIGticmFuY2g6CS8qIEVtaXQgY29tcGFyZSBpZiB0aGUgYnJhbmNoIHRhcmdldHMgYXJlIGRpZmZlcmVudCAqLwogCQlpZiAoZmlsdGVyLT5qdCAhPSBmaWx0ZXItPmpmKSB7Ci0JCQlpZiAoSyA8PSAxNjM4MykKLQkJCQkvKiBjaGkgJXI1LDxLPiAqLwotCQkJCUVNSVQ0X0lNTSgweGE3NWUwMDAwLCBLKTsKLQkJCWVsc2UgaWYgKHRlc3RfZmFjaWxpdHkoMjEpKQorCQkJaWYgKHRlc3RfZmFjaWxpdHkoMjEpKQogCQkJCS8qIGNsZmkgJXI1LDxLPiAqLwogCQkJCUVNSVQ2X0lNTSgweGMyNWYwMDAwLCBLKTsKIAkJCWVsc2UKLQkJCQkvKiBjICVyNSw8ZChLKT4oJXIxMykgKi8KLQkJCQlFTUlUNF9ESVNQKDB4NTk1MGQwMDAsIEVNSVRfQ09OU1QoSykpOworCQkJCS8qIGNsICVyNSw8ZChLKT4oJXIxMykgKi8KKwkJCQlFTUlUNF9ESVNQKDB4NTU1MGQwMDAsIEVNSVRfQ09OU1QoSykpOwogCQl9CiBicmFuY2g6CQlpZiAoZmlsdGVyLT5qdCA9PSBmaWx0ZXItPmpmKSB7CiAJCQlpZiAoZmlsdGVyLT5qdCA9PSAwKQpAQCAtNTAyLDggKzQ5OSw4IEBACiB4YnJhbmNoOgkvKiBFbWl0IGNvbXBhcmUgaWYgdGhlIGJyYW5jaCB0YXJnZXRzIGFyZSBkaWZmZXJlbnQgKi8KIAkJaWYgKGZpbHRlci0+anQgIT0gZmlsdGVyLT5qZikgewogCQkJaml0LT5zZWVuIHw9IFNFRU5fWFJFRzsKLQkJCS8qIGNyICVyNSwlcjEyICovCi0JCQlFTUlUMigweDE5NWMpOworCQkJLyogY2xyICVyNSwlcjEyICovCisJCQlFTUlUMigweDE1NWMpOwogCQl9CiAJCWdvdG8gYnJhbmNoOwogCWNhc2UgQlBGX0pNUCB8IEJQRl9KU0VUIHwgQlBGX1g6IC8qIGlwICs9IChBICYgWCkgPyBqdCA6IGpmICovCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL21tL2ZhdWx0LmMgYi9hcmNoL3Njb3JlL21tL2ZhdWx0LmMKaW5kZXggNTIyMzg5ODMuLjY4NjBiZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUvbW0vZmF1bHQuYworKysgYi9hcmNoL3Njb3JlL21tL2ZhdWx0LmMKQEAgLTExNCw2ICsxMTQsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9mYXVsdC5jIGIvYXJjaC9zaC9tbS9mYXVsdC5jCmluZGV4IDU0MWRjNjEuLmE1OGZlYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vZmF1bHQuYworKysgYi9hcmNoL3NoL21tL2ZhdWx0LmMKQEAgLTM1Myw2ICszNTMsOCBAQAogCX0gZWxzZSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWRvX3NpZ2J1cyhyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJYmFkX2FyZWEocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CiAJCWVsc2UKIAkJCUJVRygpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKaW5kZXggYjM2MzY1Zi4uOWNlNWFmZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKQEAgLTYzOSw3ICs2MzksMTAgQEAKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5lbmQsCiAJCQkJICAgICAgICh1bnNpZ25lZCBpbnQpci0+ZmxhZ3MpOwogCi0JCQlwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpKTsKKwkJCWlmIChwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQlwY2lfY2xhaW1fYnJpZGdlX3Jlc291cmNlKGRldiwgaSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYwppbmRleCA5MDhlOGMxLi43MGQ4MTcxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jCkBAIC0yNDksNiArMjQ5LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYwppbmRleCAxOGZjZDcxLi40Nzk4MjMyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jCkBAIC00NDYsNiArNDQ2LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggZjMzZTdjNy4uNzkzMWVlZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wLmMKKysrIGIvYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTc3Niw3ICs3NzYsNyBAQAogCQkJCWlmICh1bmxpa2VseShwcm9nbGVuICsgaWxlbiA+IG9sZHByb2dsZW4pKSB7CiAJCQkJCXByX2VycigiYnBiX2ppdF9jb21waWxlIGZhdGFsIGVycm9yXG4iKTsKIAkJCQkJa2ZyZWUoYWRkcnMpOwotCQkJCQltb2R1bGVfZnJlZShOVUxMLCBpbWFnZSk7CisJCQkJCW1vZHVsZV9tZW1mcmVlKGltYWdlKTsKIAkJCQkJcmV0dXJuOwogCQkJCX0KIAkJCQltZW1jcHkoaW1hZ2UgKyBwcm9nbGVuLCB0ZW1wLCBpbGVuKTsKQEAgLTgyMiw3ICs4MjIsNyBAQAogdm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpmcCkKIHsKIAlpZiAoZnAtPmppdGVkKQotCQltb2R1bGVfZnJlZShOVUxMLCBmcC0+YnBmX2Z1bmMpOworCQltb2R1bGVfbWVtZnJlZShmcC0+YnBmX2Z1bmMpOwogCiAJYnBmX3Byb2dfdW5sb2NrX2ZyZWUoZnApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvdGlsZS9rZXJuZWwvbW9kdWxlLmMKaW5kZXggOTY0NDdjOS4uMjMwNTA4NCAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3RpbGUva2VybmVsL21vZHVsZS5jCkBAIC03NCw3ICs3NCw3IEBACiAKIAogLyogRnJlZSBtZW1vcnkgcmV0dXJuZWQgZnJvbSBtb2R1bGVfYWxsb2MgKi8KLXZvaWQgbW9kdWxlX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKQordm9pZCBtb2R1bGVfbWVtZnJlZSh2b2lkICptb2R1bGVfcmVnaW9uKQogewogCXZmcmVlKG1vZHVsZV9yZWdpb24pOwogCkBAIC04Myw3ICs4Myw3IEBACiAJCSAgICAgMCwgMCwgMCwgTlVMTCwgTlVMTCwgMCk7CiAKIAkvKgotCSAqIEZJWE1FOiBJZiBtb2R1bGVfcmVnaW9uID09IG1vZC0+bW9kdWxlX2luaXQsIHRyaW0gZXhjZXB0aW9uCisJICogRklYTUU6IEFkZCBtb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQgdG8gdHJpbSBleGNlcHRpb24KIAkgKiB0YWJsZSBlbnRyaWVzLgogCSAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL21tL2ZhdWx0LmMgYi9hcmNoL3RpbGUvbW0vZmF1bHQuYwppbmRleCA1NjVlMjVhLi4wZjYxYTczIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvbW0vZmF1bHQuYworKysgYi9hcmNoL3RpbGUvbW0vZmF1bHQuYwpAQCAtNDQyLDYgKzQ0Miw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGRvX3NpZ2J1czsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcuY29tbW9uIGIvYXJjaC91bS9LY29uZmlnLmNvbW1vbgppbmRleCA4N2JjODY4Li5kMTk1YTg3IDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcuY29tbW9uCisrKyBiL2FyY2gvdW0vS2NvbmZpZy5jb21tb24KQEAgLTMsNiArMyw3IEBACiAJZGVmYXVsdCB5CiAJc2VsZWN0IEhBVkVfQVJDSF9BVURJVFNZU0NBTEwKIAlzZWxlY3QgSEFWRV9VSUQxNgorCXNlbGVjdCBIQVZFX0ZVVEVYX0NNUFhDSEcgaWYgRlVURVgKIAlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVwogCXNlbGVjdCBHRU5FUklDX0NQVV9ERVZJQ0VTCiAJc2VsZWN0IEdFTkVSSUNfSU8KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RyYXAuYyBiL2FyY2gvdW0va2VybmVsL3RyYXAuYwppbmRleCA1Njc4YzM1Li4yMDk2MTczIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90cmFwLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdHJhcC5jCkBAIC04MCw2ICs4MCw4IEBACiAJCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKSB7CiAJCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQkJfSBlbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpIHsKKwkJCQlnb3RvIG91dDsKIAkJCX0gZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKIAkJCQllcnIgPSAtRUFDQ0VTOwogCQkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggYmEzOTdiZC4uMGRjOWQwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC04NTcsNyArODU3LDcgQEAKIAogY29uZmlnIFg4Nl9VUF9BUElDCiAJYm9vbCAiTG9jYWwgQVBJQyBzdXBwb3J0IG9uIHVuaXByb2Nlc3NvcnMiCi0JZGVwZW5kcyBvbiBYODZfMzIgJiYgIVNNUCAmJiAhWDg2XzMyX05PTl9TVEFOREFSRCAmJiAhUENJX01TSQorCWRlcGVuZHMgb24gWDg2XzMyICYmICFTTVAgJiYgIVg4Nl8zMl9OT05fU1RBTkRBUkQKIAktLS1oZWxwLS0tCiAJICBBIGxvY2FsIEFQSUMgKEFkdmFuY2VkIFByb2dyYW1tYWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlcikgaXMgYW4KIAkgIGludGVncmF0ZWQgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW4gdGhlIENQVS4gSWYgeW91IGhhdmUgYSBzaW5nbGUtQ1BVCkBAIC04NjgsNiArODY4LDEwIEBACiAJICBwZXJmb3JtYW5jZSBjb3VudGVycyksIGFuZCB0aGUgTk1JIHdhdGNoZG9nIHdoaWNoIGRldGVjdHMgaGFyZAogCSAgbG9ja3Vwcy4KIAorY29uZmlnIFg4Nl9VUF9BUElDX01TSQorCWRlZl9ib29sIHkKKwlzZWxlY3QgWDg2X1VQX0FQSUMgaWYgWDg2XzMyICYmICFTTVAgJiYgIVg4Nl8zMl9OT05fU1RBTkRBUkQgJiYgUENJX01TSQorCiBjb25maWcgWDg2X1VQX0lPQVBJQwogCWJvb2wgIklPLUFQSUMgc3VwcG9ydCBvbiB1bmlwcm9jZXNzb3JzIgogCWRlcGVuZHMgb24gWDg2X1VQX0FQSUMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCmluZGV4IDViMDE2ZTIuLjNkYjA3ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQpAQCAtNTEsNiArNTEsNyBAQAogJChvYmopL2NwdXN0ci5oOiAkKG9iaikvbWtjcHVzdHIgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxjcHVzdHIpCiBlbmRpZgorY2xlYW4tZmlsZXMgKz0gY3B1c3RyLmgKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IGQ5OTkzOTguLmFkNzU0YjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTkwLDcgKzkwLDcgQEAKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFo0KSAJOj0gbHo0CiAKIFJVTl9TSVpFID0gJChzaGVsbCAkKE9CSkRVTVApIC1oIHZtbGludXggfCBcCi0JICAgICBwZXJsICQoc3JjdHJlZSkvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5wbCkKKwkgICAgICQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL2FyY2gveDg2L3Rvb2xzL2NhbGNfcnVuX3NpemUuc2gpCiBxdWlldF9jbWRfbWtwaWdneSA9IE1LUElHR1kgJEAKICAgICAgIGNtZF9ta3BpZ2d5ID0gJChvYmopL21rcGlnZ3kgJDwgJChSVU5fU0laRSkgPiAkQCB8fCAoIHJtIC1mICRAIDsgZmFsc2UgKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCBkY2MxYzUzLi5hOTUwODY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTM3Myw2ICszNzMsOCBAQAogCQkJCSAgdW5zaWduZWQgbG9uZyBvdXRwdXRfbGVuLAogCQkJCSAgdW5zaWduZWQgbG9uZyBydW5fc2l6ZSkKIHsKKwl1bnNpZ25lZCBjaGFyICpvdXRwdXRfb3JpZyA9IG91dHB1dDsKKwogCXJlYWxfbW9kZSA9IHJtb2RlOwogCiAJc2FuaXRpemVfYm9vdF9wYXJhbXMocmVhbF9tb2RlKTsKQEAgLTQyMSw3ICs0MjMsMTIgQEAKIAlkZWJ1Z19wdXRzdHIoIlxuRGVjb21wcmVzc2luZyBMaW51eC4uLiAiKTsKIAlkZWNvbXByZXNzKGlucHV0X2RhdGEsIGlucHV0X2xlbiwgTlVMTCwgTlVMTCwgb3V0cHV0LCBOVUxMLCBlcnJvcik7CiAJcGFyc2VfZWxmKG91dHB1dCk7Ci0JaGFuZGxlX3JlbG9jYXRpb25zKG91dHB1dCwgb3V0cHV0X2xlbik7CisJLyoKKwkgKiAzMi1iaXQgYWx3YXlzIHBlcmZvcm1zIHJlbG9jYXRpb25zLiA2NC1iaXQgcmVsb2NhdGlvbnMgYXJlIG9ubHkKKwkgKiBuZWVkZWQgaWYga0FTTFIgaGFzIGNob3NlbiBhIGRpZmZlcmVudCBsb2FkIGFkZHJlc3MuCisJICovCisJaWYgKCFJU19FTkFCTEVEKENPTkZJR19YODZfNjQpIHx8IG91dHB1dCAhPSBvdXRwdXRfb3JpZykKKwkJaGFuZGxlX3JlbG9jYXRpb25zKG91dHB1dCwgb3V0cHV0X2xlbik7CiAJZGVidWdfcHV0c3RyKCJkb25lLlxuQm9vdGluZyB0aGUga2VybmVsLlxuIik7CiAJcmV0dXJuIG91dHB1dDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZSBiL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZQppbmRleCBmZDBmODQ4Li41YTRhMDg5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCkBAIC0yNiw3ICsyNiw2IEBACiAKIG9iai0kKENPTkZJR19DUllQVE9fQ1JDMzJDX0lOVEVMKSArPSBjcmMzMmMtaW50ZWwubwogb2JqLSQoQ09ORklHX0NSWVBUT19TSEExX1NTU0UzKSArPSBzaGExLXNzc2UzLm8KLW9iai0kKENPTkZJR19DUllQVE9fU0hBMV9NQikgKz0gc2hhLW1iLwogb2JqLSQoQ09ORklHX0NSWVBUT19DUkMzMl9QQ0xNVUwpICs9IGNyYzMyLXBjbG11bC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1NIQTI1Nl9TU1NFMykgKz0gc2hhMjU2LXNzc2UzLm8KIG9iai0kKENPTkZJR19DUllQVE9fU0hBNTEyX1NTU0UzKSArPSBzaGE1MTItc3NzZTMubwpAQCAtNDYsNiArNDUsNyBAQAogaWZlcSAoJChhdngyX3N1cHBvcnRlZCkseWVzKQogCW9iai0kKENPTkZJR19DUllQVE9fQ0FNRUxMSUFfQUVTTklfQVZYMl9YODZfNjQpICs9IGNhbWVsbGlhLWFlc25pLWF2eDIubwogCW9iai0kKENPTkZJR19DUllQVE9fU0VSUEVOVF9BVlgyX1g4Nl82NCkgKz0gc2VycGVudC1hdngyLm8KKwlvYmotJChDT05GSUdfQ1JZUFRPX1NIQTFfTUIpICs9IHNoYS1tYi8KIGVuZGlmCiAKIGFlcy1pNTg2LXkgOj0gYWVzLWk1ODYtYXNtXzMyLm8gYWVzX2dsdWUubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc19jdHJieThfYXZ4LXg4Nl82NC5TIGIvYXJjaC94ODYvY3J5cHRvL2Flc19jdHJieThfYXZ4LXg4Nl82NC5TCmluZGV4IDJkZjJhMDI5Li5hOTE2YzRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vYWVzX2N0cmJ5OF9hdngteDg2XzY0LlMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flc19jdHJieThfYXZ4LXg4Nl82NC5TCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogCS5pZiAoa2xlbiA9PSBLRVlfMTI4KQogCQkuaWYgKGxvYWRfa2V5cykKLQkJCXZtb3ZkcWEJMyoxNihwX2tleXMpLCB4a2V5QQorCQkJdm1vdmRxYQkzKjE2KHBfa2V5cyksIHhrZXk0CiAJCS5lbmRpZgogCS5lbHNlCiAJCXZtb3ZkcWEJMyoxNihwX2tleXMpLCB4a2V5QQpAQCAtMjI0LDcgKzIyNCw3IEBACiAJYWRkCSQoMTYqYnkpLCBwX2luCiAKIAkuaWYgKGtsZW4gPT0gS0VZXzEyOCkKLQkJdm1vdmRxYQk0KjE2KHBfa2V5cyksIHhrZXk0CisJCXZtb3ZkcWEJNCoxNihwX2tleXMpLCB4a2V5QgogCS5lbHNlCiAJCS5pZiAobG9hZF9rZXlzKQogCQkJdm1vdmRxYQk0KjE2KHBfa2V5cyksIHhrZXk0CkBAIC0yMzQsNyArMjM0LDEyIEBACiAJLnNldCBpLCAwCiAJLnJlcHQgYnkKIAkJY2x1YiBYREFUQSwgaQotCQl2YWVzZW5jCXhrZXlBLCB2YXJfeGRhdGEsIHZhcl94ZGF0YQkJLyoga2V5IDMgKi8KKwkJLyoga2V5IDMgKi8KKwkJLmlmIChrbGVuID09IEtFWV8xMjgpCisJCQl2YWVzZW5jCXhrZXk0LCB2YXJfeGRhdGEsIHZhcl94ZGF0YQorCQkuZWxzZQorCQkJdmFlc2VuYwl4a2V5QSwgdmFyX3hkYXRhLCB2YXJfeGRhdGEKKwkJLmVuZGlmCiAJCS5zZXQgaSwgKGkgKzEpCiAJLmVuZHIKIApAQCAtMjQzLDEzICsyNDgsMTggQEAKIAkuc2V0IGksIDAKIAkucmVwdCBieQogCQljbHViIFhEQVRBLCBpCi0JCXZhZXNlbmMJeGtleTQsIHZhcl94ZGF0YSwgdmFyX3hkYXRhCQkvKiBrZXkgNCAqLworCQkvKiBrZXkgNCAqLworCQkuaWYgKGtsZW4gPT0gS0VZXzEyOCkKKwkJCXZhZXNlbmMJeGtleUIsIHZhcl94ZGF0YSwgdmFyX3hkYXRhCisJCS5lbHNlCisJCQl2YWVzZW5jCXhrZXk0LCB2YXJfeGRhdGEsIHZhcl94ZGF0YQorCQkuZW5kaWYKIAkJLnNldCBpLCAoaSArMSkKIAkuZW5kcgogCiAJLmlmIChrbGVuID09IEtFWV8xMjgpCiAJCS5pZiAobG9hZF9rZXlzKQotCQkJdm1vdmRxYQk2KjE2KHBfa2V5cyksIHhrZXlCCisJCQl2bW92ZHFhCTYqMTYocF9rZXlzKSwgeGtleTgKIAkJLmVuZGlmCiAJLmVsc2UKIAkJdm1vdmRxYQk2KjE2KHBfa2V5cyksIHhrZXlCCkBAIC0yNjcsMTIgKzI3NywxNyBAQAogCS5zZXQgaSwgMAogCS5yZXB0IGJ5CiAJCWNsdWIgWERBVEEsIGkKLQkJdmFlc2VuYwl4a2V5QiwgdmFyX3hkYXRhLCB2YXJfeGRhdGEJCS8qIGtleSA2ICovCisJCS8qIGtleSA2ICovCisJCS5pZiAoa2xlbiA9PSBLRVlfMTI4KQorCQkJdmFlc2VuYwl4a2V5OCwgdmFyX3hkYXRhLCB2YXJfeGRhdGEKKwkJLmVsc2UKKwkJCXZhZXNlbmMJeGtleUIsIHZhcl94ZGF0YSwgdmFyX3hkYXRhCisJCS5lbmRpZgogCQkuc2V0IGksIChpICsxKQogCS5lbmRyCiAKIAkuaWYgKGtsZW4gPT0gS0VZXzEyOCkKLQkJdm1vdmRxYQk4KjE2KHBfa2V5cyksIHhrZXk4CisJCXZtb3ZkcWEJOCoxNihwX2tleXMpLCB4a2V5QgogCS5lbHNlCiAJCS5pZiAobG9hZF9rZXlzKQogCQkJdm1vdmRxYQk4KjE2KHBfa2V5cyksIHhrZXk4CkBAIC0yODgsNyArMzAzLDcgQEAKIAogCS5pZiAoa2xlbiA9PSBLRVlfMTI4KQogCQkuaWYgKGxvYWRfa2V5cykKLQkJCXZtb3ZkcWEJOSoxNihwX2tleXMpLCB4a2V5QQorCQkJdm1vdmRxYQk5KjE2KHBfa2V5cyksIHhrZXkxMgogCQkuZW5kaWYKIAkuZWxzZQogCQl2bW92ZHFhCTkqMTYocF9rZXlzKSwgeGtleUEKQEAgLTI5Nyw3ICszMTIsMTIgQEAKIAkuc2V0IGksIDAKIAkucmVwdCBieQogCQljbHViIFhEQVRBLCBpCi0JCXZhZXNlbmMJeGtleTgsIHZhcl94ZGF0YSwgdmFyX3hkYXRhCQkvKiBrZXkgOCAqLworCQkvKiBrZXkgOCAqLworCQkuaWYgKGtsZW4gPT0gS0VZXzEyOCkKKwkJCXZhZXNlbmMJeGtleUIsIHZhcl94ZGF0YSwgdmFyX3hkYXRhCisJCS5lbHNlCisJCQl2YWVzZW5jCXhrZXk4LCB2YXJfeGRhdGEsIHZhcl94ZGF0YQorCQkuZW5kaWYKIAkJLnNldCBpLCAoaSArMSkKIAkuZW5kcgogCkBAIC0zMDYsNyArMzI2LDEyIEBACiAJLnNldCBpLCAwCiAJLnJlcHQgYnkKIAkJY2x1YiBYREFUQSwgaQotCQl2YWVzZW5jCXhrZXlBLCB2YXJfeGRhdGEsIHZhcl94ZGF0YQkJLyoga2V5IDkgKi8KKwkJLyoga2V5IDkgKi8KKwkJLmlmIChrbGVuID09IEtFWV8xMjgpCisJCQl2YWVzZW5jCXhrZXkxMiwgdmFyX3hkYXRhLCB2YXJfeGRhdGEKKwkJLmVsc2UKKwkJCXZhZXNlbmMJeGtleUEsIHZhcl94ZGF0YSwgdmFyX3hkYXRhCisJCS5lbmRpZgogCQkuc2V0IGksIChpICsxKQogCS5lbmRyCiAKQEAgLTQxMiw3ICs0MzcsNiBAQAogLyogbWFpbiBib2R5IG9mIGFlcyBjdHIgbG9hZCAqLwogCiAubWFjcm8gZG9fYWVzX2N0cm1haW4ga2V5X2xlbgotCiAJY21wCSQxNiwgbnVtX2J5dGVzCiAJamIJLkxkb19yZXR1cm4yXGtleV9sZW4KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL3NoYS1tYi9zaGExX21iLmMgYi9hcmNoL3g4Ni9jcnlwdG8vc2hhLW1iL3NoYTFfbWIuYwppbmRleCBhMjI1YTVjYS4uZmQ5ZjZiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL3NoYS1tYi9zaGExX21iLmMKKysrIGIvYXJjaC94ODYvY3J5cHRvL3NoYS1tYi9zaGExX21iLmMKQEAgLTkzMSw0ICs5MzEsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTSEExIFNlY3VyZSBIYXNoIEFsZ29yaXRobSwgbXVsdGkgYnVmZmVyIGFjY2VsZXJhdGVkIik7CiAKLU1PRFVMRV9BTElBUygic2hhMSIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygic2hhMSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDBhYjRmOWYuLjNhNDU2NjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTUwLDYgKzUwLDcgQEAKIAogZXh0ZXJuIGludCAoKl9fYWNwaV9yZWdpc3Rlcl9nc2kpKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGdzaSwKIAkJCQkgIGludCB0cmlnZ2VyLCBpbnQgcG9sYXJpdHkpOworZXh0ZXJuIHZvaWQgKCpfX2FjcGlfdW5yZWdpc3Rlcl9nc2kpKHUzMiBnc2kpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9hY3BpKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKaW5kZXggNTBkMDMzYS4uYTk0YjgyZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaApAQCAtMjUxLDcgKzI1MSw4IEBACiAJCWdkdFtHRFRfRU5UUllfVExTX01JTiArIGldID0gdC0+dGxzX2FycmF5W2ldOwogfQogCi0jZGVmaW5lIF9MRFRfZW1wdHkoaW5mbykJCQkJXAorLyogVGhpcyBpbnRlbnRpb25hbGx5IGlnbm9yZXMgbG0sIHNpbmNlIDMyLWJpdCBhcHBzIGRvbid0IGhhdmUgdGhhdCBmaWVsZC4gKi8KKyNkZWZpbmUgTERUX2VtcHR5KGluZm8pCQkJCQlcCiAJKChpbmZvKS0+YmFzZV9hZGRyCQk9PSAwCSYmCVwKIAkgKGluZm8pLT5saW1pdAkJCT09IDAJJiYJXAogCSAoaW5mbyktPmNvbnRlbnRzCQk9PSAwCSYmCVwKQEAgLTI2MSwxMSArMjYyLDE4IEBACiAJIChpbmZvKS0+c2VnX25vdF9wcmVzZW50CT09IDEJJiYJXAogCSAoaW5mbyktPnVzZWFibGUJCT09IDApCiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIExEVF9lbXB0eShpbmZvKSAoX0xEVF9lbXB0eShpbmZvKSAmJiAoKGluZm8pLT5sbSA9PSAwKSkKLSNlbHNlCi0jZGVmaW5lIExEVF9lbXB0eShpbmZvKSAoX0xEVF9lbXB0eShpbmZvKSkKLSNlbmRpZgorLyogTG90cyBvZiBwcm9ncmFtcyBleHBlY3QgYW4gYWxsLXplcm8gdXNlcl9kZXNjIHRvIG1lYW4gIm5vIHNlZ21lbnQgYXQgYWxsIi4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBMRFRfemVybyhjb25zdCBzdHJ1Y3QgdXNlcl9kZXNjICppbmZvKQoreworCXJldHVybiAoaW5mby0+YmFzZV9hZGRyCQk9PSAwICYmCisJCWluZm8tPmxpbWl0CQk9PSAwICYmCisJCWluZm8tPmNvbnRlbnRzCQk9PSAwICYmCisJCWluZm8tPnJlYWRfZXhlY19vbmx5CT09IDAgJiYKKwkJaW5mby0+c2VnXzMyYml0CQk9PSAwICYmCisJCWluZm8tPmxpbWl0X2luX3BhZ2VzCT09IDAgJiYKKwkJaW5mby0+c2VnX25vdF9wcmVzZW50CT09IDAgJiYKKwkJaW5mby0+dXNlYWJsZQkJPT0gMCk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9MRFQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDQwMjY5YTIuLjRiNzVkNTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTMwLDcgKzEzMCwyNSBAQAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfdW5tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JbXB4X25vdGlmeV91bm1hcChtbSwgdm1hLCBzdGFydCwgZW5kKTsKKwkvKgorCSAqIG1weF9ub3RpZnlfdW5tYXAoKSBnb2VzIGFuZCByZWFkcyBhIHJhcmVseS1ob3QKKwkgKiBjYWNoZWxpbmUgaW4gdGhlIG1tX3N0cnVjdC4gIFRoYXQgY2FuIGJlIGV4cGVuc2l2ZQorCSAqIGVub3VnaCB0byBiZSBzZWVuIGluIHByb2ZpbGVzLgorCSAqCisJICogVGhlIG1weF9ub3RpZnlfdW5tYXAoKSBjYWxsIGFuZCBpdHMgY29udGVudHMgaGF2ZSBiZWVuCisJICogb2JzZXJ2ZWQgdG8gYWZmZWN0IG11bm1hcCgpIHBlcmZvcm1hbmNlIG9uIGhhcmR3YXJlCisJICogd2hlcmUgTVBYIGlzIG5vdCBwcmVzZW50LgorCSAqCisJICogVGhlIHVubGlrZWx5KCkgb3B0aW1pemVzIGZvciB0aGUgZmFzdCBjYXNlOiBubyBNUFgKKwkgKiBpbiB0aGUgQ1BVLCBvciBubyBNUFggdXNlIGluIHRoZSBwcm9jZXNzLiAgRXZlbiBpZgorCSAqIHdlIGdldCB0aGlzIHdyb25nIChpbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBNUFgKKwkgKiBpcyB3aWRlbHkgZW5hYmxlZCBvbiBzb21lIHN5c3RlbSkgdGhlIG92ZXJoZWFkIG9mCisJICogTVBYIGl0c2VsZiAocmVhZGluZyBib3VuZHMgdGFibGVzKSBpcyBleHBlY3RlZCB0bworCSAqIG92ZXJ3aGVsbSB0aGUgb3ZlcmhlYWQgb2YgZ2V0dGluZyB0aGlzIHVubGlrZWx5KCkKKwkgKiBjb25zaXN0ZW50bHkgd3JvbmcuCisJICovCisJaWYgKHVubGlrZWx5KGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfTVBYKSkpCisJCW1weF9ub3RpZnlfdW5tYXAobW0sIHZtYSwgc3RhcnQsIGVuZCk7CiB9CiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z3RvZC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmd0b2QuaAppbmRleCBlN2U5NjgyLi5mNTU2YzQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z3RvZC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZndG9kLmgKQEAgLTgwLDkgKzgwLDExIEBACiAKIAkvKgogCSAqIExvYWQgcGVyIENQVSBkYXRhIGZyb20gR0RULiAgTFNMIGlzIGZhc3RlciB0aGFuIFJEVFNDUCBhbmQKLQkgKiB3b3JrcyBvbiBhbGwgQ1BVcy4KKwkgKiB3b3JrcyBvbiBhbGwgQ1BVcy4gIFRoaXMgaXMgdm9sYXRpbGUgc28gdGhhdCBpdCBvcmRlcnMKKwkgKiBjb3JyZWN0bHkgd3J0IGJhcnJpZXIoKSBhbmQgdG8ga2VlcCBnY2MgZnJvbSBjbGV2ZXJseQorCSAqIGhvaXN0aW5nIGl0IG91dCBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbi4KIAkgKi8KLQlhc20oImxzbCAlMSwlMCIgOiAiPXIiIChwKSA6ICJyIiAoX19QRVJfQ1BVX1NFRykpOworCWFzbSB2b2xhdGlsZSAoImxzbCAlMSwlMCIgOiAiPXIiIChwKSA6ICJyIiAoX19QRVJfQ1BVX1NFRykpOwogCiAJcmV0dXJuIHA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggNDQzM2E0Yi4uYjllMzBkYWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTYxMSwyMCArNjExLDIwIEBACiAKIGludCBhY3BpX2dzaV90b19pcnEodTMyIGdzaSwgdW5zaWduZWQgaW50ICppcnFwKQogewotCWludCBpcnE7CisJaW50IHJjLCBpcnEsIHRyaWdnZXIsIHBvbGFyaXR5OwogCi0JaWYgKGFjcGlfaXJxX21vZGVsID09IEFDUElfSVJRX01PREVMX1BJQykgewotCQkqaXJxcCA9IGdzaTsKLQl9IGVsc2UgewotCQltdXRleF9sb2NrKCZhY3BpX2lvYXBpY19sb2NrKTsKLQkJaXJxID0gbXBfbWFwX2dzaV90b19pcnEoZ3NpLAotCQkJCQlJT0FQSUNfTUFQX0FMTE9DIHwgSU9BUElDX01BUF9DSEVDSyk7Ci0JCW11dGV4X3VubG9jaygmYWNwaV9pb2FwaWNfbG9jayk7Ci0JCWlmIChpcnEgPCAwKQotCQkJcmV0dXJuIC0xOwotCQkqaXJxcCA9IGlycTsKKwlyYyA9IGFjcGlfZ2V0X292ZXJyaWRlX2lycShnc2ksICZ0cmlnZ2VyLCAmcG9sYXJpdHkpOworCWlmIChyYyA9PSAwKSB7CisJCXRyaWdnZXIgPSB0cmlnZ2VyID8gQUNQSV9MRVZFTF9TRU5TSVRJVkUgOiBBQ1BJX0VER0VfU0VOU0lUSVZFOworCQlwb2xhcml0eSA9IHBvbGFyaXR5ID8gQUNQSV9BQ1RJVkVfTE9XIDogQUNQSV9BQ1RJVkVfSElHSDsKKwkJaXJxID0gYWNwaV9yZWdpc3Rlcl9nc2koTlVMTCwgZ3NpLCB0cmlnZ2VyLCBwb2xhcml0eSk7CisJCWlmIChpcnEgPj0gMCkgeworCQkJKmlycXAgPSBpcnE7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KLQlyZXR1cm4gMDsKKworCXJldHVybiAtMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjcGlfZ3NpX3RvX2lycSk7CiAKQEAgLTc1MCwxMyArNzUwLDEzIEBACiB9CiAKIC8qIHdyYXBwZXIgdG8gc2lsZW5jZSBzZWN0aW9uIG1pc21hdGNoIHdhcm5pbmcgKi8KLWludCBfX3JlZiBhY3BpX21hcF9sc2FwaWMoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgcGh5c2lkLCBpbnQgKnBjcHUpCitpbnQgX19yZWYgYWNwaV9tYXBfY3B1KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHBoeXNpZCwgaW50ICpwY3B1KQogewogCXJldHVybiBfYWNwaV9tYXBfbHNhcGljKGhhbmRsZSwgcGh5c2lkLCBwY3B1KTsKIH0KLUVYUE9SVF9TWU1CT0woYWNwaV9tYXBfbHNhcGljKTsKK0VYUE9SVF9TWU1CT0woYWNwaV9tYXBfY3B1KTsKIAotaW50IGFjcGlfdW5tYXBfbHNhcGljKGludCBjcHUpCitpbnQgYWNwaV91bm1hcF9jcHUoaW50IGNwdSkKIHsKICNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCiAJc2V0X2FwaWNpZF90b19ub2RlKHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSksIE5VTUFfTk9fTk9ERSk7CkBAIC03NjgsOCArNzY4LDcgQEAKIAogCXJldHVybiAoMCk7CiB9Ci0KLUVYUE9SVF9TWU1CT0woYWNwaV91bm1hcF9sc2FwaWMpOworRVhQT1JUX1NZTUJPTChhY3BpX3VubWFwX2NwdSk7CiAjZW5kaWYJCQkJLyogQ09ORklHX0FDUElfSE9UUExVR19DUFUgKi8KIAogaW50IGFjcGlfcmVnaXN0ZXJfaW9hcGljKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTY0IHBoeXNfYWRkciwgdTMyIGdzaV9iYXNlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKaW5kZXggZTI3YjQ5ZC4uODAwOTFhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC02NiwzICs2Niw0IEBACiAkKG9iaikvY2FwZmxhZ3MuYzogJChjcHVmZWF0dXJlKSAkKHNyYykvbWtjYXBmbGFncy5zaCBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLG1rY2FwZmxhZ3MpCiBlbmRpZgorY2xlYW4tZmlsZXMgKz0gY2FwZmxhZ3MuYwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9ta2NhcGZsYWdzLnNoIGIvYXJjaC94ODYva2VybmVsL2NwdS9ta2NhcGZsYWdzLnNoCmluZGV4IGUyYjIyZGYuLjM2ZDk5YTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWtjYXBmbGFncy5zaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21rY2FwZmxhZ3Muc2gKQEAgLTI4LDcgKzI4LDcgQEAKIAkJIyBJZiB0aGUgLyogY29tbWVudCAqLyBzdGFydHMgd2l0aCBhIHF1b3RlIHN0cmluZywgZ3JhYiB0aGF0LgogCQlWQUxVRT0iJChlY2hvICIkaSIgfCBzZWQgLW4gJ3NALiovXCogKlwoIlteIl0qIlwpLipcKi9AXDFAcCcpIgogCQlbIC16ICIkVkFMVUUiIF0gJiYgVkFMVUU9IlwiJE5BTUVcIiIKLQkJWyAiJFZBTFVFIiA9PSAnIiInIF0gJiYgY29udGludWUKKwkJWyAiJFZBTFVFIiA9ICciIicgXSAmJiBjb250aW51ZQogCiAJCSMgTmFtZSBpcyB1cHBlcmNhc2UsIFZBTFVFIGlzIGFsbCBsb3dlcmNhc2UKIAkJVkFMVUU9IiQoZWNobyAiJFZBTFVFIiB8IHRyIEEtWiBhLXopIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jCmluZGV4IGE0NTAzNzMuLjkzOTE1NWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmMKQEAgLTEwNyw2ICsxMDcsNyBAQAogCS5yYXRpbmcJCT0gNDAwLCAvKiB1c2UgdGhpcyB3aGVuIHJ1bm5pbmcgb24gSHlwZXJ2Ki8KIAkucmVhZAkJPSByZWFkX2h2X2Nsb2NrLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soNjQpLAorCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtc19oeXBlcnZfaW5pdF9wbGF0Zm9ybSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYwppbmRleCA5NDRiZjAxLi40OThiNmQ5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYwpAQCAtMjQzMSw2ICsyNDMxLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDU1OiAvKiAyMm5tIEF0b20gIlNpbHZlcm1vbnQiICAgICAgICAgICAgICAgICovCisJY2FzZSA3NjogLyogMTRubSBBdG9tICJBaXJtb250IiAgICAgICAgICAgICAgICAgICAqLwogCWNhc2UgNzc6IC8qIDIybm0gQXRvbSAiU2lsdmVybW9udCBBdm90b24vUmFuZ2VseSIgKi8KIAkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgc2xtX2h3X2NhY2hlX2V2ZW50X2lkcywKIAkJCXNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9kcy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2RzLmMKaW5kZXggM2M4OTVkNC4uMDczOTgzMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2RzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2RzLmMKQEAgLTU2OCw4ICs1NjgsOCBAQAogfTsKIAogc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfc2xtX3BlYnNfZXZlbnRfY29uc3RyYWludHNbXSA9IHsKLQkvKiBVT1BTX1JFVElSRUQuQUxMLCBpbnY9MSwgY21hc2s9MTYgKGN5Y2xlczpwKS4gKi8KLQlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4MTA4MDAxYzIsIDB4ZiksCisJLyogSU5TVF9SRVRJUkVELkFOWV9QLCBpbnY9MSwgY21hc2s9MTYgKGN5Y2xlczpwKS4gKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4MTA4MDAwYzAsIDB4MSksCiAJLyogQWxsb3cgYWxsIGV2ZW50cyBhcyBQRUJTIHdpdGggbm8gZmxhZ3MgKi8KIAlJTlRFTF9BTExfRVZFTlRfQ09OU1RSQUlOVCgwLCAweDEpLAogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfcmFwbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3JhcGwuYwppbmRleCA2NzNmOTMwLi5jNGJiOGI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfcmFwbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9yYXBsLmMKQEAgLTEwMyw2ICsxMDMsMTMgQEAKIAogI2RlZmluZSBSQVBMX0NOVFJfV0lEVEggMzIgLyogMzItYml0IHJhcGwgY291bnRlcnMgKi8KIAorI2RlZmluZSBSQVBMX0VWRU5UX0FUVFJfU1RSKF9uYW1lLCB2LCBzdHIpCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9wbXVfZXZlbnRzX2F0dHIgZXZlbnRfYXR0cl8jI3YgPSB7CQkJXAorCS5hdHRyCQk9IF9fQVRUUihfbmFtZSwgMDQ0NCwgcmFwbF9zeXNmc19zaG93LCBOVUxMKSwJXAorCS5pZAkJPSAwLAkJCQkJCVwKKwkuZXZlbnRfc3RyCT0gc3RyLAkJCQkJCVwKK307CisKIHN0cnVjdCByYXBsX3BtdSB7CiAJc3BpbmxvY2tfdAkgbG9jazsKIAlpbnQJCSBod191bml0OyAgLyogMS8yXmh3X3VuaXQgSm91bGUgKi8KQEAgLTEzNSw3ICsxNDIsNyBAQAogCSAqIG9yIHVzZSBsZGV4cChjb3VudCwgLTMyKS4KIAkgKiBXYXR0cyA9IEpvdWxlcy9UaW1lIGRlbHRhCiAJICovCi0JcmV0dXJuIHYgPDwgKDMyIC0gX190aGlzX2NwdV9yZWFkKHJhcGxfcG11LT5od191bml0KSk7CisJcmV0dXJuIHYgPDwgKDMyIC0gX190aGlzX2NwdV9yZWFkKHJhcGxfcG11KS0+aHdfdW5pdCk7CiB9CiAKIHN0YXRpYyB1NjQgcmFwbF9ldmVudF91cGRhdGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtMzc5LDIzICszODYsMzYgQEAKIAkuYXR0cnMgPSByYXBsX3BtdV9hdHRycywKIH07CiAKLUVWRU5UX0FUVFJfU1RSKGVuZXJneS1jb3JlcywgcmFwbF9jb3JlcywgImV2ZW50PTB4MDEiKTsKLUVWRU5UX0FUVFJfU1RSKGVuZXJneS1wa2cgICwgICByYXBsX3BrZywgImV2ZW50PTB4MDIiKTsKLUVWRU5UX0FUVFJfU1RSKGVuZXJneS1yYW0gICwgICByYXBsX3JhbSwgImV2ZW50PTB4MDMiKTsKLUVWRU5UX0FUVFJfU1RSKGVuZXJneS1ncHUgICwgICByYXBsX2dwdSwgImV2ZW50PTB4MDQiKTsKK3N0YXRpYyBzc2l6ZV90IHJhcGxfc3lzZnNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY2hhciAqcGFnZSkKK3sKKwlzdHJ1Y3QgcGVyZl9wbXVfZXZlbnRzX2F0dHIgKnBtdV9hdHRyID0gXAorCQljb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHBlcmZfcG11X2V2ZW50c19hdHRyLCBhdHRyKTsKIAotRVZFTlRfQVRUUl9TVFIoZW5lcmd5LWNvcmVzLnVuaXQsIHJhcGxfY29yZXNfdW5pdCwgIkpvdWxlcyIpOwotRVZFTlRfQVRUUl9TVFIoZW5lcmd5LXBrZy51bml0ICAsICAgcmFwbF9wa2dfdW5pdCwgIkpvdWxlcyIpOwotRVZFTlRfQVRUUl9TVFIoZW5lcmd5LXJhbS51bml0ICAsICAgcmFwbF9yYW1fdW5pdCwgIkpvdWxlcyIpOwotRVZFTlRfQVRUUl9TVFIoZW5lcmd5LWdwdS51bml0ICAsICAgcmFwbF9ncHVfdW5pdCwgIkpvdWxlcyIpOworCWlmIChwbXVfYXR0ci0+ZXZlbnRfc3RyKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXMiLCBwbXVfYXR0ci0+ZXZlbnRfc3RyKTsKKworCXJldHVybiAwOworfQorCitSQVBMX0VWRU5UX0FUVFJfU1RSKGVuZXJneS1jb3JlcywgcmFwbF9jb3JlcywgImV2ZW50PTB4MDEiKTsKK1JBUExfRVZFTlRfQVRUUl9TVFIoZW5lcmd5LXBrZyAgLCAgIHJhcGxfcGtnLCAiZXZlbnQ9MHgwMiIpOworUkFQTF9FVkVOVF9BVFRSX1NUUihlbmVyZ3ktcmFtICAsICAgcmFwbF9yYW0sICJldmVudD0weDAzIik7CitSQVBMX0VWRU5UX0FUVFJfU1RSKGVuZXJneS1ncHUgICwgICByYXBsX2dwdSwgImV2ZW50PTB4MDQiKTsKKworUkFQTF9FVkVOVF9BVFRSX1NUUihlbmVyZ3ktY29yZXMudW5pdCwgcmFwbF9jb3Jlc191bml0LCAiSm91bGVzIik7CitSQVBMX0VWRU5UX0FUVFJfU1RSKGVuZXJneS1wa2cudW5pdCAgLCAgIHJhcGxfcGtnX3VuaXQsICJKb3VsZXMiKTsKK1JBUExfRVZFTlRfQVRUUl9TVFIoZW5lcmd5LXJhbS51bml0ICAsICAgcmFwbF9yYW1fdW5pdCwgIkpvdWxlcyIpOworUkFQTF9FVkVOVF9BVFRSX1NUUihlbmVyZ3ktZ3B1LnVuaXQgICwgICByYXBsX2dwdV91bml0LCAiSm91bGVzIik7CiAKIC8qCiAgKiB3ZSBjb21wdXRlIGluIDAuMjMgbkogaW5jcmVtZW50cyByZWdhcmRsZXNzIG9mIE1TUgogICovCi1FVkVOVF9BVFRSX1NUUihlbmVyZ3ktY29yZXMuc2NhbGUsIHJhcGxfY29yZXNfc2NhbGUsICIyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwIik7Ci1FVkVOVF9BVFRSX1NUUihlbmVyZ3ktcGtnLnNjYWxlLCAgICAgcmFwbF9wa2dfc2NhbGUsICIyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwIik7Ci1FVkVOVF9BVFRSX1NUUihlbmVyZ3ktcmFtLnNjYWxlLCAgICAgcmFwbF9yYW1fc2NhbGUsICIyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwIik7Ci1FVkVOVF9BVFRSX1NUUihlbmVyZ3ktZ3B1LnNjYWxlLCAgICAgcmFwbF9ncHVfc2NhbGUsICIyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwIik7CitSQVBMX0VWRU5UX0FUVFJfU1RSKGVuZXJneS1jb3Jlcy5zY2FsZSwgcmFwbF9jb3Jlc19zY2FsZSwgIjIuMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNWUtMTAiKTsKK1JBUExfRVZFTlRfQVRUUl9TVFIoZW5lcmd5LXBrZy5zY2FsZSwgICAgIHJhcGxfcGtnX3NjYWxlLCAiMi4zMjgzMDY0MzY1Mzg2OTYyODkwNjI1ZS0xMCIpOworUkFQTF9FVkVOVF9BVFRSX1NUUihlbmVyZ3ktcmFtLnNjYWxlLCAgICAgcmFwbF9yYW1fc2NhbGUsICIyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwIik7CitSQVBMX0VWRU5UX0FUVFJfU1RSKGVuZXJneS1ncHUuc2NhbGUsICAgICByYXBsX2dwdV9zY2FsZSwgIjIuMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNWUtMTAiKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJhcGxfZXZlbnRzX3Nydl9hdHRyW10gPSB7CiAJRVZFTlRfUFRSKHJhcGxfY29yZXMpLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZS5jCmluZGV4IDEwYjhkM2UuLmM2MzViOGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlLmMKQEAgLTg0MCw3ICs4NDAsNiBAQAogCWJveC0+cGh5c19pZCA9IHBoeXNfaWQ7CiAJYm94LT5wY2lfZGV2ID0gcGRldjsKIAlib3gtPnBtdSA9IHBtdTsKLQl1bmNvcmVfYm94X2luaXQoYm94KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgYm94KTsKIAogCXJhd19zcGluX2xvY2soJnVuY29yZV9ib3hfbG9jayk7CkBAIC0xMDA0LDEwICsxMDAzLDggQEAKIAkJCXBtdSA9ICZ0eXBlLT5wbXVzW2pdOwogCQkJYm94ID0gKnBlcl9jcHVfcHRyKHBtdS0+Ym94LCBjcHUpOwogCQkJLyogY2FsbGVkIGJ5IHVuY29yZV9jcHVfaW5pdD8gKi8KLQkJCWlmIChib3ggJiYgYm94LT5waHlzX2lkID49IDApIHsKLQkJCQl1bmNvcmVfYm94X2luaXQoYm94KTsKKwkJCWlmIChib3ggJiYgYm94LT5waHlzX2lkID49IDApCiAJCQkJY29udGludWU7Ci0JCQl9CiAKIAkJCWZvcl9lYWNoX29ubGluZV9jcHUoaykgewogCQkJCWV4aXN0ID0gKnBlcl9jcHVfcHRyKHBtdS0+Ym94LCBrKTsKQEAgLTEwMjMsMTAgKzEwMjAsOCBAQAogCQkJCX0KIAkJCX0KIAotCQkJaWYgKGJveCkgeworCQkJaWYgKGJveCkKIAkJCQlib3gtPnBoeXNfaWQgPSBwaHlzX2lkOwotCQkJCXVuY29yZV9ib3hfaW5pdChib3gpOwotCQkJfQogCQl9CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZS5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZS5oCmluZGV4IDE4ZWI3OGIuLjZjOGMxZTdlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlLmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZS5oCkBAIC0xNyw3ICsxNyw3IEBACiAjZGVmaW5lIFVOQ09SRV9QQ0lfREVWX1RZUEUoZGF0YSkJKChkYXRhID4+IDgpICYgMHhmZikKICNkZWZpbmUgVU5DT1JFX1BDSV9ERVZfSURYKGRhdGEpCShkYXRhICYgMHhmZikKICNkZWZpbmUgVU5DT1JFX0VYVFJBX1BDSV9ERVYJCTB4ZmYKLSNkZWZpbmUgVU5DT1JFX0VYVFJBX1BDSV9ERVZfTUFYCTIKKyNkZWZpbmUgVU5DT1JFX0VYVFJBX1BDSV9ERVZfTUFYCTMKIAogLyogc3VwcG9ydCB1cCB0byA4IHNvY2tldHMgKi8KICNkZWZpbmUgVU5DT1JFX1NPQ0tFVF9NQVgJCTgKQEAgLTI1Nyw2ICsyNTcsMTQgQEAKIAlyZXR1cm4gYm94LT5wbXUtPnR5cGUtPm51bV9jb3VudGVyczsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHVuY29yZV9ib3hfaW5pdChzdHJ1Y3QgaW50ZWxfdW5jb3JlX2JveCAqYm94KQoreworCWlmICghdGVzdF9hbmRfc2V0X2JpdChVTkNPUkVfQk9YX0ZMQUdfSU5JVElBVEVELCAmYm94LT5mbGFncykpIHsKKwkJaWYgKGJveC0+cG11LT50eXBlLT5vcHMtPmluaXRfYm94KQorCQkJYm94LT5wbXUtPnR5cGUtPm9wcy0+aW5pdF9ib3goYm94KTsKKwl9Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmNvcmVfZGlzYWJsZV9ib3goc3RydWN0IGludGVsX3VuY29yZV9ib3ggKmJveCkKIHsKIAlpZiAoYm94LT5wbXUtPnR5cGUtPm9wcy0+ZGlzYWJsZV9ib3gpCkBAIC0yNjUsNiArMjczLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHVuY29yZV9lbmFibGVfYm94KHN0cnVjdCBpbnRlbF91bmNvcmVfYm94ICpib3gpCiB7CisJdW5jb3JlX2JveF9pbml0KGJveCk7CisKIAlpZiAoYm94LT5wbXUtPnR5cGUtPm9wcy0+ZW5hYmxlX2JveCkKIAkJYm94LT5wbXUtPnR5cGUtPm9wcy0+ZW5hYmxlX2JveChib3gpOwogfQpAQCAtMjg3LDE0ICsyOTcsNiBAQAogCXJldHVybiBib3gtPnBtdS0+dHlwZS0+b3BzLT5yZWFkX2NvdW50ZXIoYm94LCBldmVudCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmNvcmVfYm94X2luaXQoc3RydWN0IGludGVsX3VuY29yZV9ib3ggKmJveCkKLXsKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoVU5DT1JFX0JPWF9GTEFHX0lOSVRJQVRFRCwgJmJveC0+ZmxhZ3MpKSB7Ci0JCWlmIChib3gtPnBtdS0+dHlwZS0+b3BzLT5pbml0X2JveCkKLQkJCWJveC0+cG11LT50eXBlLT5vcHMtPmluaXRfYm94KGJveCk7Ci0JfQotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgdW5jb3JlX2JveF9pc19mYWtlKHN0cnVjdCBpbnRlbF91bmNvcmVfYm94ICpib3gpCiB7CiAJcmV0dXJuIChib3gtPnBoeXNfaWQgPCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmVfc25iZXAuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmVfc25iZXAuYwppbmRleCA3NDViMTU4Li4yMWFmNjE0OWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmVfc25iZXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlX3NuYmVwLmMKQEAgLTg5MSw2ICs4OTEsNyBAQAogZW51bSB7CiAJU05CRVBfUENJX1FQSV9QT1JUMF9GSUxURVIsCiAJU05CRVBfUENJX1FQSV9QT1JUMV9GSUxURVIsCisJSFNXRVBfUENJX1BDVV8zLAogfTsKIAogc3RhdGljIGludCBzbmJlcF9xcGlfaHdfY29uZmlnKHN0cnVjdCBpbnRlbF91bmNvcmVfYm94ICpib3gsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKQEAgLTIwMjYsNiArMjAyNywxNyBAQAogewogCWlmIChoc3dlcF91bmNvcmVfY2JveC5udW1fYm94ZXMgPiBib290X2NwdV9kYXRhLng4Nl9tYXhfY29yZXMpCiAJCWhzd2VwX3VuY29yZV9jYm94Lm51bV9ib3hlcyA9IGJvb3RfY3B1X2RhdGEueDg2X21heF9jb3JlczsKKworCS8qIERldGVjdCA2LTggY29yZSBzeXN0ZW1zIHdpdGggb25seSB0d28gU0JPWGVzICovCisJaWYgKHVuY29yZV9leHRyYV9wY2lfZGV2WzBdW0hTV0VQX1BDSV9QQ1VfM10pIHsKKwkJdTMyIGNhcGlkNDsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodW5jb3JlX2V4dHJhX3BjaV9kZXZbMF1bSFNXRVBfUENJX1BDVV8zXSwKKwkJCQkgICAgICAweDk0LCAmY2FwaWQ0KTsKKwkJaWYgKCgoY2FwaWQ0ID4+IDYpICYgMHgzKSA9PSAwKQorCQkJaHN3ZXBfdW5jb3JlX3Nib3gubnVtX2JveGVzID0gMjsKKwl9CisKIAl1bmNvcmVfbXNyX3VuY29yZXMgPSBoc3dlcF9tc3JfdW5jb3JlczsKIH0KIApAQCAtMjI4Nyw2ICsyMjk5LDExIEBACiAJCS5kcml2ZXJfZGF0YSA9IFVOQ09SRV9QQ0lfREVWX0RBVEEoVU5DT1JFX0VYVFJBX1BDSV9ERVYsCiAJCQkJCQkgICBTTkJFUF9QQ0lfUVBJX1BPUlQxX0ZJTFRFUiksCiAJfSwKKwl7IC8qIFBDVS4zIChmb3IgQ2FwYWJpbGl0eSByZWdpc3RlcnMpICovCisJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyZmMwKSwKKwkJLmRyaXZlcl9kYXRhID0gVU5DT1JFX1BDSV9ERVZfREFUQShVTkNPUkVfRVhUUkFfUENJX0RFViwKKwkJCQkJCSAgIEhTV0VQX1BDSV9QQ1VfMyksCisJfSwKIAl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKaW5kZXggMjE0MjM3Ni4uOGI3YjBhNTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKQEAgLTY3NCw3ICs2NzQsNyBAQAogfQogc3RhdGljIGlubGluZSB2b2lkIHRyYW1wX2ZyZWUodm9pZCAqdHJhbXApCiB7Ci0JbW9kdWxlX2ZyZWUoTlVMTCwgdHJhbXApOworCW1vZHVsZV9tZW1mcmVlKHRyYW1wKTsKIH0KICNlbHNlCiAvKiBUcmFtcG9saW5lcyBjYW4gb25seSBiZSBjcmVhdGVkIGlmIG1vZHVsZXMgYXJlIHN1cHBvcnRlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycS5jIGIvYXJjaC94ODYva2VybmVsL2lycS5jCmluZGV4IDYzMDdhMGYuLjcwNWVmOGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCXNlcV9wdXRzKHAsICIgIE1hY2hpbmUgY2hlY2sgcG9sbHNcbiIpOwogI2VuZGlmCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSFlQRVJWKSB8fCBkZWZpbmVkKENPTkZJR19YRU4pCi0Jc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVEhSIik7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiSFlQIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX2h2X2NhbGxiYWNrX2NvdW50KTsKIAlzZXFfcHV0cyhwLCAiICBIeXBlcnZpc29yIGNhbGxiYWNrIGludGVycnVwdHNcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMvY29yZS5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMvY29yZS5jCmluZGV4IGY3ZTNjZDUuLjk4ZjY1NGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL2NvcmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmMKQEAgLTEwMjAsNiArMTAyMCwxNSBAQAogCXJlZ3MtPmZsYWdzICY9IH5YODZfRUZMQUdTX0lGOwogCXRyYWNlX2hhcmRpcnFzX29mZigpOwogCXJlZ3MtPmlwID0gKHVuc2lnbmVkIGxvbmcpKGpwLT5lbnRyeSk7CisKKwkvKgorCSAqIGpwcm9iZXMgdXNlIGpwcm9iZV9yZXR1cm4oKSB3aGljaCBza2lwcyB0aGUgbm9ybWFsIHJldHVybgorCSAqIHBhdGggb2YgdGhlIGZ1bmN0aW9uLCBhbmQgdGhpcyBtZXNzZXMgdXAgdGhlIGFjY291bnRpbmcgb2YgdGhlCisJICogZnVuY3Rpb24gZ3JhcGggdHJhY2VyIHRvIGdldCBtZXNzZWQgdXAuCisJICoKKwkgKiBQYXVzZSBmdW5jdGlvbiBncmFwaCB0cmFjaW5nIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGpwcm9iZSBmdW5jdGlvbi4KKwkgKi8KKwlwYXVzZV9ncmFwaF90cmFjaW5nKCk7CiAJcmV0dXJuIDE7CiB9CiBOT0tQUk9CRV9TWU1CT0woc2V0am1wX3ByZV9oYW5kbGVyKTsKQEAgLTEwNDgsMjQgKzEwNTcsMjUgQEAKIAlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKIAl1OCAqYWRkciA9ICh1OCAqKSAocmVncy0+aXAgLSAxKTsKIAlzdHJ1Y3QganByb2JlICpqcCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QganByb2JlLCBrcCk7CisJdm9pZCAqc2F2ZWRfc3AgPSBrY2ItPmpwcm9iZV9zYXZlZF9zcDsKIAogCWlmICgoYWRkciA+ICh1OCAqKSBqcHJvYmVfcmV0dXJuKSAmJgogCSAgICAoYWRkciA8ICh1OCAqKSBqcHJvYmVfcmV0dXJuX2VuZCkpIHsKLQkJaWYgKHN0YWNrX2FkZHIocmVncykgIT0ga2NiLT5qcHJvYmVfc2F2ZWRfc3ApIHsKKwkJaWYgKHN0YWNrX2FkZHIocmVncykgIT0gc2F2ZWRfc3ApIHsKIAkJCXN0cnVjdCBwdF9yZWdzICpzYXZlZF9yZWdzID0gJmtjYi0+anByb2JlX3NhdmVkX3JlZ3M7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiY3VycmVudCBzcCAlcCBkb2VzIG5vdCBtYXRjaCBzYXZlZCBzcCAlcFxuIiwKLQkJCSAgICAgICBzdGFja19hZGRyKHJlZ3MpLCBrY2ItPmpwcm9iZV9zYXZlZF9zcCk7CisJCQkgICAgICAgc3RhY2tfYWRkcihyZWdzKSwgc2F2ZWRfc3ApOwogCQkJcHJpbnRrKEtFUk5fRVJSICJTYXZlZCByZWdpc3RlcnMgZm9yIGpwcm9iZSAlcFxuIiwganApOwogCQkJc2hvd19yZWdzKHNhdmVkX3JlZ3MpOwogCQkJcHJpbnRrKEtFUk5fRVJSICJDdXJyZW50IHJlZ2lzdGVyc1xuIik7CiAJCQlzaG93X3JlZ3MocmVncyk7CiAJCQlCVUcoKTsKIAkJfQorCQkvKiBJdCdzIE9LIHRvIHN0YXJ0IGZ1bmN0aW9uIGdyYXBoIHRyYWNpbmcgYWdhaW4gKi8KKwkJdW5wYXVzZV9ncmFwaF90cmFjaW5nKCk7CiAJCSpyZWdzID0ga2NiLT5qcHJvYmVfc2F2ZWRfcmVnczsKLQkJbWVtY3B5KChrcHJvYmVfb3Bjb2RlX3QgKikoa2NiLT5qcHJvYmVfc2F2ZWRfc3ApLAotCQkgICAgICAga2NiLT5qcHJvYmVzX3N0YWNrLAotCQkgICAgICAgTUlOX1NUQUNLX1NJWkUoa2NiLT5qcHJvYmVfc2F2ZWRfc3ApKTsKKwkJbWVtY3B5KHNhdmVkX3NwLCBrY2ItPmpwcm9iZXNfc3RhY2ssIE1JTl9TVEFDS19TSVpFKHNhdmVkX3NwKSk7CiAJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BlcmZfcmVncy5jIGIvYXJjaC94ODYva2VybmVsL3BlcmZfcmVncy5jCmluZGV4IGUzMDljYzUuLjc4MTg2MWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wZXJmX3JlZ3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGVyZl9yZWdzLmMKQEAgLTc4LDYgKzc4LDE0IEBACiB7CiAJcmV0dXJuIFBFUkZfU0FNUExFX1JFR1NfQUJJXzMyOwogfQorCit2b2lkIHBlcmZfZ2V0X3JlZ3NfdXNlcihzdHJ1Y3QgcGVyZl9yZWdzICpyZWdzX3VzZXIsCisJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzX3VzZXJfY29weSkKK3sKKwlyZWdzX3VzZXItPnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisJcmVnc191c2VyLT5hYmkgPSBwZXJmX3JlZ19hYmkoY3VycmVudCk7Cit9CiAjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCiAjZGVmaW5lIFJFR19OT1NVUFBPUlQgKCgxVUxMIDw8IFBFUkZfUkVHX1g4Nl9EUykgfCBcCiAJCSAgICAgICAoMVVMTCA8PCBQRVJGX1JFR19YODZfRVMpIHwgXApAQCAtMTAyLDQgKzExMCw4NiBAQAogCWVsc2UKIAkJcmV0dXJuIFBFUkZfU0FNUExFX1JFR1NfQUJJXzY0OwogfQorCit2b2lkIHBlcmZfZ2V0X3JlZ3NfdXNlcihzdHJ1Y3QgcGVyZl9yZWdzICpyZWdzX3VzZXIsCisJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzX3VzZXJfY29weSkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqdXNlcl9yZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBpbiBhbiBOTUkgdGhhdCBpbnRlcnJ1cHRlZCB0YXNrX3B0X3JlZ3Mgc2V0dXAsIHRoZW4KKwkgKiB3ZSBjYW4ndCBzYW1wbGUgdXNlciByZWdzIGF0IGFsbC4gIFRoaXMgY2hlY2sgaXNuJ3QgcmVhbGx5CisJICogc3VmZmljaWVudCwgdGhvdWdoLCBhcyB3ZSBjb3VsZCBiZSBpbiBhbiBOTUkgaW5zaWRlIGFuIGludGVycnVwdAorCSAqIHRoYXQgaGFwcGVuZWQgZHVyaW5nIHRhc2tfcHRfcmVncyBzZXR1cC4KKwkgKi8KKwlpZiAocmVncy0+c3AgPiAodW5zaWduZWQgbG9uZykmdXNlcl9yZWdzLT5yMTEgJiYKKwkgICAgcmVncy0+c3AgPD0gKHVuc2lnbmVkIGxvbmcpKHVzZXJfcmVncyArIDEpKSB7CisJCXJlZ3NfdXNlci0+YWJpID0gUEVSRl9TQU1QTEVfUkVHU19BQklfTk9ORTsKKwkJcmVnc191c2VyLT5yZWdzID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogUklQLCBmbGFncywgYW5kIHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXJlIHVzdWFsbHkgc2F2ZWQuCisJICogb3JpZ19heCBpcyBwcm9iYWJseSBva2F5LCB0b28uCisJICovCisJcmVnc191c2VyX2NvcHktPmlwID0gdXNlcl9yZWdzLT5pcDsKKwlyZWdzX3VzZXJfY29weS0+Y3ggPSB1c2VyX3JlZ3MtPmN4OworCXJlZ3NfdXNlcl9jb3B5LT5keCA9IHVzZXJfcmVncy0+ZHg7CisJcmVnc191c2VyX2NvcHktPnNpID0gdXNlcl9yZWdzLT5zaTsKKwlyZWdzX3VzZXJfY29weS0+ZGkgPSB1c2VyX3JlZ3MtPmRpOworCXJlZ3NfdXNlcl9jb3B5LT5yOCA9IHVzZXJfcmVncy0+cjg7CisJcmVnc191c2VyX2NvcHktPnI5ID0gdXNlcl9yZWdzLT5yOTsKKwlyZWdzX3VzZXJfY29weS0+cjEwID0gdXNlcl9yZWdzLT5yMTA7CisJcmVnc191c2VyX2NvcHktPnIxMSA9IHVzZXJfcmVncy0+cjExOworCXJlZ3NfdXNlcl9jb3B5LT5vcmlnX2F4ID0gdXNlcl9yZWdzLT5vcmlnX2F4OworCXJlZ3NfdXNlcl9jb3B5LT5mbGFncyA9IHVzZXJfcmVncy0+ZmxhZ3M7CisKKwkvKgorCSAqIERvbid0IGV2ZW4gdHJ5IHRvIHJlcG9ydCB0aGUgInJlc3QiIHJlZ3MuCisJICovCisJcmVnc191c2VyX2NvcHktPmJ4ID0gLTE7CisJcmVnc191c2VyX2NvcHktPmJwID0gLTE7CisJcmVnc191c2VyX2NvcHktPnIxMiA9IC0xOworCXJlZ3NfdXNlcl9jb3B5LT5yMTMgPSAtMTsKKwlyZWdzX3VzZXJfY29weS0+cjE0ID0gLTE7CisJcmVnc191c2VyX2NvcHktPnIxNSA9IC0xOworCisJLyoKKwkgKiBGb3IgdGhpcyB0byBiZSBhdCBhbGwgdXNlZnVsLCB3ZSBuZWVkIGEgcmVhc29uYWJsZSBndWVzcyBmb3IKKwkgKiBzcCBhbmQgdGhlIEFCSS4gIEJlIGNhcmVmdWw6IHdlJ3JlIGluIE5NSSBjb250ZXh0LCBhbmQgd2UncmUKKwkgKiBjb25zaWRlcmluZyBjdXJyZW50IHRvIGJlIHRoZSBjdXJyZW50IHRhc2ssIHNvIHdlIHNob3VsZAorCSAqIGJlIGNhcmVmdWwgbm90IHRvIGxvb2sgYXQgYW55IG90aGVyIHBlcmNwdSB2YXJpYWJsZXMgdGhhdCBtaWdodAorCSAqIGNoYW5nZSBkdXJpbmcgY29udGV4dCBzd2l0Y2hlcy4KKwkgKi8KKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfSUEzMl9FTVVMQVRJT04pICYmCisJICAgIHRhc2tfdGhyZWFkX2luZm8oY3VycmVudCktPnN0YXR1cyAmIFRTX0NPTVBBVCkgeworCQkvKiBFYXN5IGNhc2U6IHdlJ3JlIGluIGEgY29tcGF0IHN5c2NhbGwuICovCisJCXJlZ3NfdXNlci0+YWJpID0gUEVSRl9TQU1QTEVfUkVHU19BQklfMzI7CisJCXJlZ3NfdXNlcl9jb3B5LT5zcCA9IHVzZXJfcmVncy0+c3A7CisJCXJlZ3NfdXNlcl9jb3B5LT5jcyA9IHVzZXJfcmVncy0+Y3M7CisJCXJlZ3NfdXNlcl9jb3B5LT5zcyA9IHVzZXJfcmVncy0+c3M7CisJfSBlbHNlIGlmICh1c2VyX3JlZ3MtPm9yaWdfYXggIT0gLTEpIHsKKwkJLyoKKwkJICogV2UncmUgcHJvYmFibHkgaW4gYSA2NC1iaXQgc3lzY2FsbC4KKwkJICogV2FybmluZzogdGhpcyBjb2RlIGlzIHNldmVyZWx5IHJhY3kuICBBdCBsZWFzdCBpdCdzIGJldHRlcgorCQkgKiB0aGFuIGp1c3QgYmxpbmRseSBjb3B5aW5nIHVzZXJfcmVncy4KKwkJICovCisJCXJlZ3NfdXNlci0+YWJpID0gUEVSRl9TQU1QTEVfUkVHU19BQklfNjQ7CisJCXJlZ3NfdXNlcl9jb3B5LT5zcCA9IHRoaXNfY3B1X3JlYWQob2xkX3JzcCk7CisJCXJlZ3NfdXNlcl9jb3B5LT5jcyA9IF9fVVNFUl9DUzsKKwkJcmVnc191c2VyX2NvcHktPnNzID0gX19VU0VSX0RTOworCQlyZWdzX3VzZXJfY29weS0+Y3ggPSAtMTsgIC8qIHVzdWFsbHkgY29udGFpbnMgZ2FyYmFnZSAqLworCX0gZWxzZSB7CisJCS8qIFdlJ3JlIHByb2JhYmx5IGluIGFuIGludGVycnVwdCBvciBleGNlcHRpb24uICovCisJCXJlZ3NfdXNlci0+YWJpID0gdXNlcl82NGJpdF9tb2RlKHVzZXJfcmVncykgPworCQkJUEVSRl9TQU1QTEVfUkVHU19BQklfNjQgOiBQRVJGX1NBTVBMRV9SRUdTX0FCSV8zMjsKKwkJcmVnc191c2VyX2NvcHktPnNwID0gdXNlcl9yZWdzLT5zcDsKKwkJcmVnc191c2VyX2NvcHktPmNzID0gdXNlcl9yZWdzLT5jczsKKwkJcmVnc191c2VyX2NvcHktPnNzID0gdXNlcl9yZWdzLT5zczsKKwl9CisKKwlyZWdzX3VzZXItPnJlZ3MgPSByZWdzX3VzZXJfY29weTsKK30KICNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGxzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGxzLmMKaW5kZXggNGU5NDJmMy4uN2ZjNWU4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Rscy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90bHMuYwpAQCAtMjksNyArMjksMjggQEAKIAogc3RhdGljIGJvb2wgdGxzX2Rlc2Nfb2theShjb25zdCBzdHJ1Y3QgdXNlcl9kZXNjICppbmZvKQogewotCWlmIChMRFRfZW1wdHkoaW5mbykpCisJLyoKKwkgKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zIChpLmUuIG5vIG9uZSBldmVyIGRvY3VtZW50ZWQgaG93IGFueQorCSAqIG9mIHRoZSBzZWdtZW50YXRpb24gQVBJcyB3b3JrKSwgdXNlciBwcm9ncmFtcyBjYW4gYW5kIGRvCisJICogYXNzdW1lIHRoYXQgYSBzdHJ1Y3QgdXNlcl9kZXNjIHRoYXQncyBhbGwgemVyb3MgZXhjZXB0IGZvcgorCSAqIGVudHJ5X251bWJlciBtZWFucyAibm8gc2VnbWVudCBhdCBhbGwiLiAgVGhpcyBuZXZlciBhY3R1YWxseQorCSAqIHdvcmtlZC4gIEluIGZhY3QsIHVwIHRvIExpbnV4IDMuMTksIGEgc3RydWN0IHVzZXJfZGVzYyBsaWtlCisJICogdGhpcyB3b3VsZCBjcmVhdGUgYSAxNi1iaXQgcmVhZC13cml0ZSBzZWdtZW50IHdpdGggYmFzZSBhbmQKKwkgKiBsaW1pdCBib3RoIGVxdWFsIHRvIHplcm8uCisJICoKKwkgKiBUaGF0IHdhcyBjbG9zZSBlbm91Z2ggdG8gIm5vIHNlZ21lbnQgYXQgYWxsIiB1bnRpbCB3ZQorCSAqIGhhcmRlbmVkIHRoaXMgZnVuY3Rpb24gdG8gZGlzYWxsb3cgMTYtYml0IFRMUyBzZWdtZW50cy4gIEZpeAorCSAqIGl0IHVwIGJ5IGludGVycHJldGluZyB0aGVzZSB6ZXJvZWQgc2VnbWVudHMgdGhlIHdheSB0aGF0IHRoZXkKKwkgKiB3ZXJlIGFsbW9zdCBjZXJ0YWlubHkgaW50ZW5kZWQgdG8gYmUgaW50ZXJwcmV0ZWQuCisJICoKKwkgKiBUaGUgY29ycmVjdCB3YXkgdG8gYXNrIGZvciAibm8gc2VnbWVudCBhdCBhbGwiIGlzIHRvIHNwZWNpZnkKKwkgKiBhIHVzZXJfZGVzYyB0aGF0IHNhdGlzZmllcyBMRFRfZW1wdHkuICBUbyBrZWVwIGV2ZXJ5dGhpbmcKKwkgKiB3b3JraW5nLCB3ZSBhY2NlcHQgYm90aC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGVyZSdzIGEgc2ltaWxhciBrbHVkZ2UgaW4gbW9kaWZ5X2xkdCAtLSBsb29rIGF0CisJICogdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gbW9kZXMgMSBhbmQgMHgxMS4KKwkgKi8KKwlpZiAoTERUX2VtcHR5KGluZm8pIHx8IExEVF96ZXJvKGluZm8pKQogCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCkBAIC03MSw3ICs5Miw3IEBACiAJY3B1ID0gZ2V0X2NwdSgpOwogCiAJd2hpbGUgKG4tLSA+IDApIHsKLQkJaWYgKExEVF9lbXB0eShpbmZvKSkKKwkJaWYgKExEVF9lbXB0eShpbmZvKSB8fCBMRFRfemVybyhpbmZvKSkKIAkJCWRlc2MtPmEgPSBkZXNjLT5iID0gMDsKIAkJZWxzZQogCQkJZmlsbF9sZHQoZGVzYywgaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggYjdlNTBiYi4uNTA1NDQ5NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtNjE3LDcgKzYxNyw3IEBACiAJCQlnb3RvIHN1Y2Nlc3M7CiAJCX0KIAl9Ci0JcHJfZXJyKCJGYXN0IFRTQyBjYWxpYnJhdGlvbiBmYWlsZWRcbiIpOworCXByX2luZm8oIkZhc3QgVFNDIGNhbGlicmF0aW9uIGZhaWxlZFxuIik7CiAJcmV0dXJuIDA7CiAKIHN1Y2Nlc3M6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwppbmRleCAxNjliMDlkLi5kZTEyYzFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCisrKyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKQEAgLTIzNDgsNyArMjM0OCw3IEBACiAJICogTm90IHJlY29nbml6ZWQgb24gQU1EIGluIGNvbXBhdCBtb2RlIChidXQgaXMgcmVjb2duaXplZCBpbiBsZWdhY3kKIAkgKiBtb2RlKS4KIAkgKi8KLQlpZiAoKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1QzMikgJiYgKGVmZXIgJiBFRkVSX0xNQSkKKwlpZiAoKGN0eHQtPm1vZGUgIT0gWDg2RU1VTF9NT0RFX1BST1Q2NCkgJiYgKGVmZXIgJiBFRkVSX0xNQSkKIAkgICAgJiYgIXZlbmRvcl9pbnRlbChjdHh0KSkKIAkJcmV0dXJuIGVtdWxhdGVfdWQoY3R4dCk7CiAKQEAgLTIzNTksMjUgKzIzNTksMTMgQEAKIAlzZXR1cF9zeXNjYWxsc19zZWdtZW50cyhjdHh0LCAmY3MsICZzcyk7CiAKIAlvcHMtPmdldF9tc3IoY3R4dCwgTVNSX0lBMzJfU1lTRU5URVJfQ1MsICZtc3JfZGF0YSk7Ci0Jc3dpdGNoIChjdHh0LT5tb2RlKSB7Ci0JY2FzZSBYODZFTVVMX01PREVfUFJPVDMyOgotCQlpZiAoKG1zcl9kYXRhICYgMHhmZmZjKSA9PSAweDApCi0JCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKLQkJYnJlYWs7Ci0JY2FzZSBYODZFTVVMX01PREVfUFJPVDY0OgotCQlpZiAobXNyX2RhdGEgPT0gMHgwKQotCQkJcmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KKwlpZiAoKG1zcl9kYXRhICYgMHhmZmZjKSA9PSAweDApCisJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOwogCiAJY3R4dC0+ZWZsYWdzICY9IH4oRUZMR19WTSB8IEVGTEdfSUYpOwotCWNzX3NlbCA9ICh1MTYpbXNyX2RhdGE7Ci0JY3Nfc2VsICY9IH5TRUxFQ1RPUl9SUExfTUFTSzsKKwljc19zZWwgPSAodTE2KW1zcl9kYXRhICYgflNFTEVDVE9SX1JQTF9NQVNLOwogCXNzX3NlbCA9IGNzX3NlbCArIDg7Ci0Jc3Nfc2VsICY9IH5TRUxFQ1RPUl9SUExfTUFTSzsKLQlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0IHx8IChlZmVyICYgRUZFUl9MTUEpKSB7CisJaWYgKGVmZXIgJiBFRkVSX0xNQSkgewogCQljcy5kID0gMDsKIAkJY3MubCA9IDE7CiAJfQpAQCAtMjM4NiwxMCArMjM3NCwxMSBAQAogCW9wcy0+c2V0X3NlZ21lbnQoY3R4dCwgc3Nfc2VsLCAmc3MsIDAsIFZDUFVfU1JFR19TUyk7CiAKIAlvcHMtPmdldF9tc3IoY3R4dCwgTVNSX0lBMzJfU1lTRU5URVJfRUlQLCAmbXNyX2RhdGEpOwotCWN0eHQtPl9laXAgPSBtc3JfZGF0YTsKKwljdHh0LT5fZWlwID0gKGVmZXIgJiBFRkVSX0xNQSkgPyBtc3JfZGF0YSA6ICh1MzIpbXNyX2RhdGE7CiAKIAlvcHMtPmdldF9tc3IoY3R4dCwgTVNSX0lBMzJfU1lTRU5URVJfRVNQLCAmbXNyX2RhdGEpOwotCSpyZWdfd3JpdGUoY3R4dCwgVkNQVV9SRUdTX1JTUCkgPSBtc3JfZGF0YTsKKwkqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SU1ApID0gKGVmZXIgJiBFRkVSX0xNQSkgPyBtc3JfZGF0YSA6CisJCQkJCQkJICAgICAgKHUzMiltc3JfZGF0YTsKIAogCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogfQpAQCAtMzc5MSw4ICszNzgwLDggQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlIGdyb3VwNltdID0gewotCURJKFByb3QsCXNsZHQpLAotCURJKFByb3QsCXN0ciksCisJREkoUHJvdCB8IERzdE1lbSwJc2xkdCksCisJREkoUHJvdCB8IERzdE1lbSwJc3RyKSwKIAlJSShQcm90IHwgUHJpdiB8IFNyY01lbTE2LCBlbV9sbGR0LCBsbGR0KSwKIAlJSShQcm90IHwgUHJpdiB8IFNyY01lbTE2LCBlbV9sdHIsIGx0ciksCiAJTiwgTiwgTiwgTiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggNGYwYzBiOS4uZDUyZGNmMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTE5Miw2ICsxOTIsOSBAQAogCQl1MTYgY2lkLCBsaWQ7CiAJCXUzMiBsZHIsIGFpZDsKIAorCQlpZiAoIWt2bV9hcGljX3ByZXNlbnQodmNwdSkpCisJCQljb250aW51ZTsKKwogCQlhaWQgPSBrdm1fYXBpY19pZChhcGljKTsKIAkJbGRyID0ga3ZtX2FwaWNfZ2V0X3JlZyhhcGljLCBBUElDX0xEUik7CiAJCWNpZCA9IGFwaWNfY2x1c3Rlcl9pZChuZXcsIGxkcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11LmMKaW5kZXggMTBmYmVkMS4uZjgzZmM2YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS5jCisrKyBiL2FyY2gveDg2L2t2bS9tbXUuYwpAQCAtNDQ0OCw3ICs0NDQ4LDcgQEAKIAkgKiB6YXAgYWxsIHNoYWRvdyBwYWdlcy4KIAkgKi8KIAlpZiAodW5saWtlbHkoa3ZtX2N1cnJlbnRfbW1pb19nZW5lcmF0aW9uKGt2bSkgPT0gMCkpIHsKLQkJcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fSU5GTyAia3ZtOiB6YXBwaW5nIHNoYWRvdyBwYWdlcyBmb3IgbW1pbyBnZW5lcmF0aW9uIHdyYXBhcm91bmRcbiIpOworCQlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9ERUJVRyAia3ZtOiB6YXBwaW5nIHNoYWRvdyBwYWdlcyBmb3IgbW1pbyBnZW5lcmF0aW9uIHdyYXBhcm91bmRcbiIpOwogCQlrdm1fbW11X2ludmFsaWRhdGVfemFwX2FsbF9wYWdlcyhrdm0pOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXguYyBiL2FyY2gveDg2L2t2bS92bXguYwppbmRleCBmZWI4NTJiLi5kNGM1OGQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5jCkBAIC01ODQwLDUzICs1ODQwLDEwIEBACiAJbWVtc2V0KHZteF9tc3JfYml0bWFwX2xlZ2FjeSwgMHhmZiwgUEFHRV9TSVpFKTsKIAltZW1zZXQodm14X21zcl9iaXRtYXBfbG9uZ21vZGUsIDB4ZmYsIFBBR0VfU0laRSk7CiAKLQl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihNU1JfRlNfQkFTRSwgZmFsc2UpOwotCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9HU19CQVNFLCBmYWxzZSk7Ci0Jdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IoTVNSX0tFUk5FTF9HU19CQVNFLCB0cnVlKTsKLQl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihNU1JfSUEzMl9TWVNFTlRFUl9DUywgZmFsc2UpOwotCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgZmFsc2UpOwotCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9JQTMyX1NZU0VOVEVSX0VJUCwgZmFsc2UpOwotCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9JQTMyX0JORENGR1MsIHRydWUpOwotCi0JbWVtY3B5KHZteF9tc3JfYml0bWFwX2xlZ2FjeV94MmFwaWMsCi0JCQl2bXhfbXNyX2JpdG1hcF9sZWdhY3ksIFBBR0VfU0laRSk7Ci0JbWVtY3B5KHZteF9tc3JfYml0bWFwX2xvbmdtb2RlX3gyYXBpYywKLQkJCXZteF9tc3JfYml0bWFwX2xvbmdtb2RlLCBQQUdFX1NJWkUpOwotCi0JaWYgKGVuYWJsZV9hcGljdikgewotCQlmb3IgKG1zciA9IDB4ODAwOyBtc3IgPD0gMHg4ZmY7IG1zcisrKQotCQkJdm14X2Rpc2FibGVfaW50ZXJjZXB0X21zcl9yZWFkX3gyYXBpYyhtc3IpOwotCi0JCS8qIEFjY29yZGluZyBTRE0sIGluIHgyYXBpYyBtb2RlLCB0aGUgd2hvbGUgaWQgcmVnIGlzIHVzZWQuCi0JCSAqIEJ1dCBpbiBLVk0sIGl0IG9ubHkgdXNlIHRoZSBoaWdoZXN0IGVpZ2h0IGJpdHMuIE5lZWQgdG8KLQkJICogaW50ZXJjZXB0IGl0ICovCi0JCXZteF9lbmFibGVfaW50ZXJjZXB0X21zcl9yZWFkX3gyYXBpYygweDgwMik7Ci0JCS8qIFRNQ0NUICovCi0JCXZteF9lbmFibGVfaW50ZXJjZXB0X21zcl9yZWFkX3gyYXBpYygweDgzOSk7Ci0JCS8qIFRQUiAqLwotCQl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfbXNyX3dyaXRlX3gyYXBpYygweDgwOCk7Ci0JCS8qIEVPSSAqLwotCQl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfbXNyX3dyaXRlX3gyYXBpYygweDgwYik7Ci0JCS8qIFNFTEYtSVBJICovCi0JCXZteF9kaXNhYmxlX2ludGVyY2VwdF9tc3Jfd3JpdGVfeDJhcGljKDB4ODNmKTsKLQl9Ci0KLQlpZiAoZW5hYmxlX2VwdCkgewotCQlrdm1fbW11X3NldF9tYXNrX3B0ZXMoMHVsbCwKLQkJCShlbmFibGVfZXB0X2FkX2JpdHMpID8gVk1YX0VQVF9BQ0NFU1NfQklUIDogMHVsbCwKLQkJCShlbmFibGVfZXB0X2FkX2JpdHMpID8gVk1YX0VQVF9ESVJUWV9CSVQgOiAwdWxsLAotCQkJMHVsbCwgVk1YX0VQVF9FWEVDVVRBQkxFX01BU0spOwotCQllcHRfc2V0X21taW9fc3B0ZV9tYXNrKCk7Ci0JCWt2bV9lbmFibGVfdGRwKCk7Ci0JfSBlbHNlCi0JCWt2bV9kaXNhYmxlX3RkcCgpOwotCi0JdXBkYXRlX3BsZV93aW5kb3dfYWN0dWFsX21heCgpOwotCiAJaWYgKHNldHVwX3ZtY3NfY29uZmlnKCZ2bWNzX2NvbmZpZykgPCAwKSB7CiAJCXIgPSAtRUlPOwogCQlnb3RvIG91dDc7Ci0gICAgfQorCX0KIAogCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTlgpKQogCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX05YKTsKQEAgLTU5NDUsNiArNTkwMiw0OSBAQAogCWlmIChuZXN0ZWQpCiAJCW5lc3RlZF92bXhfc2V0dXBfY3Rsc19tc3JzKCk7CiAKKwl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihNU1JfRlNfQkFTRSwgZmFsc2UpOworCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9HU19CQVNFLCBmYWxzZSk7CisJdm14X2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IoTVNSX0tFUk5FTF9HU19CQVNFLCB0cnVlKTsKKwl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcihNU1JfSUEzMl9TWVNFTlRFUl9DUywgZmFsc2UpOworCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgZmFsc2UpOworCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9JQTMyX1NZU0VOVEVSX0VJUCwgZmFsc2UpOworCXZteF9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKE1TUl9JQTMyX0JORENGR1MsIHRydWUpOworCisJbWVtY3B5KHZteF9tc3JfYml0bWFwX2xlZ2FjeV94MmFwaWMsCisJCQl2bXhfbXNyX2JpdG1hcF9sZWdhY3ksIFBBR0VfU0laRSk7CisJbWVtY3B5KHZteF9tc3JfYml0bWFwX2xvbmdtb2RlX3gyYXBpYywKKwkJCXZteF9tc3JfYml0bWFwX2xvbmdtb2RlLCBQQUdFX1NJWkUpOworCisJaWYgKGVuYWJsZV9hcGljdikgeworCQlmb3IgKG1zciA9IDB4ODAwOyBtc3IgPD0gMHg4ZmY7IG1zcisrKQorCQkJdm14X2Rpc2FibGVfaW50ZXJjZXB0X21zcl9yZWFkX3gyYXBpYyhtc3IpOworCisJCS8qIEFjY29yZGluZyBTRE0sIGluIHgyYXBpYyBtb2RlLCB0aGUgd2hvbGUgaWQgcmVnIGlzIHVzZWQuCisJCSAqIEJ1dCBpbiBLVk0sIGl0IG9ubHkgdXNlIHRoZSBoaWdoZXN0IGVpZ2h0IGJpdHMuIE5lZWQgdG8KKwkJICogaW50ZXJjZXB0IGl0ICovCisJCXZteF9lbmFibGVfaW50ZXJjZXB0X21zcl9yZWFkX3gyYXBpYygweDgwMik7CisJCS8qIFRNQ0NUICovCisJCXZteF9lbmFibGVfaW50ZXJjZXB0X21zcl9yZWFkX3gyYXBpYygweDgzOSk7CisJCS8qIFRQUiAqLworCQl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfbXNyX3dyaXRlX3gyYXBpYygweDgwOCk7CisJCS8qIEVPSSAqLworCQl2bXhfZGlzYWJsZV9pbnRlcmNlcHRfbXNyX3dyaXRlX3gyYXBpYygweDgwYik7CisJCS8qIFNFTEYtSVBJICovCisJCXZteF9kaXNhYmxlX2ludGVyY2VwdF9tc3Jfd3JpdGVfeDJhcGljKDB4ODNmKTsKKwl9CisKKwlpZiAoZW5hYmxlX2VwdCkgeworCQlrdm1fbW11X3NldF9tYXNrX3B0ZXMoMHVsbCwKKwkJCShlbmFibGVfZXB0X2FkX2JpdHMpID8gVk1YX0VQVF9BQ0NFU1NfQklUIDogMHVsbCwKKwkJCShlbmFibGVfZXB0X2FkX2JpdHMpID8gVk1YX0VQVF9ESVJUWV9CSVQgOiAwdWxsLAorCQkJMHVsbCwgVk1YX0VQVF9FWEVDVVRBQkxFX01BU0spOworCQllcHRfc2V0X21taW9fc3B0ZV9tYXNrKCk7CisJCWt2bV9lbmFibGVfdGRwKCk7CisJfSBlbHNlCisJCWt2bV9kaXNhYmxlX3RkcCgpOworCisJdXBkYXRlX3BsZV93aW5kb3dfYWN0dWFsX21heCgpOworCiAJcmV0dXJuIGFsbG9jX2t2bV9hcmVhKCk7CiAKIG91dDc6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvaW5zbi5jIGIvYXJjaC94ODYvbGliL2luc24uYwppbmRleCAyNDgwOTc4Yi4uMTMxM2FlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL2luc24uYworKysgYi9hcmNoL3g4Ni9saWIvaW5zbi5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIC8qIFZlcmlmeSBuZXh0IHNpemVvZih0KSBieXRlcyBjYW4gYmUgb24gdGhlIHNhbWUgaW5zdHJ1Y3Rpb24gKi8KICNkZWZpbmUgdmFsaWRhdGVfbmV4dCh0LCBpbnNuLCBuKQlcCi0JKChpbnNuKS0+bmV4dF9ieXRlICsgc2l6ZW9mKHQpICsgbiA8IChpbnNuKS0+ZW5kX2thZGRyKQorCSgoaW5zbiktPm5leHRfYnl0ZSArIHNpemVvZih0KSArIG4gPD0gKGluc24pLT5lbmRfa2FkZHIpCiAKICNkZWZpbmUgX19nZXRfbmV4dCh0LCBpbnNuKQlcCiAJKHsgdCByID0gKih0KilpbnNuLT5uZXh0X2J5dGU7IGluc24tPm5leHRfYnl0ZSArPSBzaXplb2YodCk7IHI7IH0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9mYXVsdC5jIGIvYXJjaC94ODYvbW0vZmF1bHQuYwppbmRleCAzOGRjZWM0Li5lM2ZmMjdhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9mYXVsdC5jCisrKyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKQEAgLTg5OCw2ICs4OTgsOCBAQAogCQlpZiAoZmF1bHQgJiAoVk1fRkFVTFRfU0lHQlVTfFZNX0ZBVUxUX0hXUE9JU09OfAogCQkJICAgICBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSkpCiAJCQlkb19zaWdidXMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcywgZmF1bHQpOworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQliYWRfYXJlYV9ub3NlbWFwaG9yZShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKIAkJZWxzZQogCQkJQlVHKCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IGE5N2VlMDguLjA3OWMzYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTQzLDcgKzQzLDcgQEAKIAlbX1BBR0VfQ0FDSEVfTU9ERV9XVF0JCT0gX1BBR0VfUENELAogCVtfUEFHRV9DQUNIRV9NT0RFX1dQXQkJPSBfUEFHRV9QQ0QsCiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoX19jYWNoZW1vZGUycHRlX3RibCk7CitFWFBPUlRfU1lNQk9MKF9fY2FjaGVtb2RlMnB0ZV90YmwpOwogdWludDhfdCBfX3B0ZTJjYWNoZW1vZGVfdGJsWzhdID0gewogCVtfX3B0ZTJjbV9pZHgoMCldID0gX1BBR0VfQ0FDSEVfTU9ERV9XQiwKIAlbX19wdGUyY21faWR4KF9QQUdFX1BXVCldID0gX1BBR0VfQ0FDSEVfTU9ERV9XQywKQEAgLTU0LDcgKzU0LDcgQEAKIAlbX19wdGUyY21faWR4KF9QQUdFX1BDRCB8IF9QQUdFX1BBVCldID0gX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUywKIAlbX19wdGUyY21faWR4KF9QQUdFX1BXVCB8IF9QQUdFX1BDRCB8IF9QQUdFX1BBVCldID0gX1BBR0VfQ0FDSEVfTU9ERV9VQywKIH07Ci1FWFBPUlRfU1lNQk9MX0dQTChfX3B0ZTJjYWNoZW1vZGVfdGJsKTsKK0VYUE9SVF9TWU1CT0woX19wdGUyY2FjaGVtb2RlX3RibCk7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcGd0X2J1Zl9zdGFydDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcGd0X2J1Zl9lbmQ7CkBAIC00MzgsMjAgKzQzOCwyMCBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGdldF9uZXdfc3RlcF9zaXplKHVuc2lnbmVkIGxvbmcgc3RlcF9zaXplKQogewogCS8qCi0JICogRXhwbGFpbiB3aHkgd2Ugc2hpZnQgYnkgNSBhbmQgd2h5IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQKLQkgKiAnc3RlcF9zaXplIDw8IDUnIG92ZXJmbG93aW5nOgotCSAqCi0JICogaW5pdGlhbCBtYXBwZWQgc2l6ZSBpcyBQTURfU0laRSAoMk0pLgorCSAqIEluaXRpYWwgbWFwcGVkIHNpemUgaXMgUE1EX1NJWkUgKDJNKS4KIAkgKiBXZSBjYW4gbm90IHNldCBzdGVwX3NpemUgdG8gYmUgUFVEX1NJWkUgKDFHKSB5ZXQuCiAJICogSW4gd29yc2UgY2FzZSwgd2hlbiB3ZSBjcm9zcyB0aGUgMUcgYm91bmRhcnksIGFuZAogCSAqIFBHX0xFVkVMXzJNIGlzIG5vdCBzZXQsIHdlIHdpbGwgbmVlZCAxKzErNTEyIHBhZ2VzICgyTSArIDhrKQotCSAqIHRvIG1hcCAxRyByYW5nZSB3aXRoIFBURS4gVXNlIDUgYXMgc2hpZnQgZm9yIG5vdy4KKwkgKiB0byBtYXAgMUcgcmFuZ2Ugd2l0aCBQVEUuIEhlbmNlIHdlIHVzZSBvbmUgbGVzcyB0aGFuIHRoZQorCSAqIGRpZmZlcmVuY2Ugb2YgcGFnZSB0YWJsZSBsZXZlbCBzaGlmdHMuCiAJICoKLQkgKiBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IG92ZXJmbG93LCBvbiAzMmJpdCwgd2hlbiBzdGVwX3NpemUKLQkgKiBpcyAwLCByb3VuZF9kb3duKCkgcmV0dXJucyAwIGZvciBzdGFydCwgYW5kIHRoYXQgdHVybnMgaXQKLQkgKiBpbnRvIDB4MTAwMDAwMDAwVUxMLgorCSAqIERvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgb3ZlcmZsb3cgaW4gdGhlIHRvcC1kb3duIGNhc2UsIG9uIDMyYml0LAorCSAqIHdoZW4gc3RlcF9zaXplIGlzIDAsIHJvdW5kX2Rvd24oKSByZXR1cm5zIDAgZm9yIHN0YXJ0LCBhbmQgdGhhdAorCSAqIHR1cm5zIGl0IGludG8gMHgxMDAwMDAwMDBVTEwuCisJICogSW4gdGhlIGJvdHRvbS11cCBjYXNlLCByb3VuZF91cCh4LCAwKSByZXR1cm5zIDAgdGhvdWdoIHRvbywgd2hpY2gKKwkgKiBuZWVkcyB0byBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gYnkgdGhlIGNvZGUgYmVsb3cuCiAJICovCi0JcmV0dXJuIHN0ZXBfc2l6ZSA8PCA1OworCXJldHVybiBzdGVwX3NpemUgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQgLSAxKTsKIH0KIAogLyoqCkBAIC00NzEsNyArNDcxLDYgQEAKIAl1bnNpZ25lZCBsb25nIHN0ZXBfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJdW5zaWduZWQgbG9uZyBtYXBwZWRfcmFtX3NpemUgPSAwOwotCXVuc2lnbmVkIGxvbmcgbmV3X21hcHBlZF9yYW1fc2l6ZTsKIAogCS8qIHhlbiBoYXMgYmlnIHJhbmdlIGluIHJlc2VydmVkIG5lYXIgZW5kIG9mIHJhbSwgc2tpcCBpdCBhdCBmaXJzdC4qLwogCWFkZHIgPSBtZW1ibG9ja19maW5kX2luX3JhbmdlKG1hcF9zdGFydCwgbWFwX2VuZCwgUE1EX1NJWkUsIFBNRF9TSVpFKTsKQEAgLTQ5NiwxNCArNDk1LDEyIEBACiAJCQkJc3RhcnQgPSBtYXBfc3RhcnQ7CiAJCX0gZWxzZQogCQkJc3RhcnQgPSBtYXBfc3RhcnQ7Ci0JCW5ld19tYXBwZWRfcmFtX3NpemUgPSBpbml0X3JhbmdlX21lbW9yeV9tYXBwaW5nKHN0YXJ0LAorCQltYXBwZWRfcmFtX3NpemUgKz0gaW5pdF9yYW5nZV9tZW1vcnlfbWFwcGluZyhzdGFydCwKIAkJCQkJCQlsYXN0X3N0YXJ0KTsKIAkJbGFzdF9zdGFydCA9IHN0YXJ0OwogCQltaW5fcGZuX21hcHBlZCA9IGxhc3Rfc3RhcnQgPj4gUEFHRV9TSElGVDsKLQkJLyogb25seSBpbmNyZWFzZSBzdGVwX3NpemUgYWZ0ZXIgYmlnIHJhbmdlIGdldCBtYXBwZWQgKi8KLQkJaWYgKG5ld19tYXBwZWRfcmFtX3NpemUgPiBtYXBwZWRfcmFtX3NpemUpCisJCWlmIChtYXBwZWRfcmFtX3NpemUgPj0gc3RlcF9zaXplKQogCQkJc3RlcF9zaXplID0gZ2V0X25ld19zdGVwX3NpemUoc3RlcF9zaXplKTsKLQkJbWFwcGVkX3JhbV9zaXplICs9IG5ld19tYXBwZWRfcmFtX3NpemU7CiAJfQogCiAJaWYgKHJlYWxfZW5kIDwgbWFwX2VuZCkKQEAgLTUyNCw3ICs1MjEsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG1lbW9yeV9tYXBfYm90dG9tX3VwKHVuc2lnbmVkIGxvbmcgbWFwX3N0YXJ0LAogCQkJCQl1bnNpZ25lZCBsb25nIG1hcF9lbmQpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXh0LCBuZXdfbWFwcGVkX3JhbV9zaXplLCBzdGFydDsKKwl1bnNpZ25lZCBsb25nIG5leHQsIHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgbWFwcGVkX3JhbV9zaXplID0gMDsKIAkvKiBzdGVwX3NpemUgbmVlZCB0byBiZSBzbWFsbCBzbyBwZ3RfYnVmIGZyb20gQlJLIGNvdWxkIGNvdmVyIGl0ICovCiAJdW5zaWduZWQgbG9uZyBzdGVwX3NpemUgPSBQTURfU0laRTsKQEAgLTUzOSwxOSArNTM2LDE5IEBACiAJICogZm9yIHBhZ2UgdGFibGUuCiAJICovCiAJd2hpbGUgKHN0YXJ0IDwgbWFwX2VuZCkgewotCQlpZiAobWFwX2VuZCAtIHN0YXJ0ID4gc3RlcF9zaXplKSB7CisJCWlmIChzdGVwX3NpemUgJiYgbWFwX2VuZCAtIHN0YXJ0ID4gc3RlcF9zaXplKSB7CiAJCQluZXh0ID0gcm91bmRfdXAoc3RhcnQgKyAxLCBzdGVwX3NpemUpOwogCQkJaWYgKG5leHQgPiBtYXBfZW5kKQogCQkJCW5leHQgPSBtYXBfZW5kOwotCQl9IGVsc2UKKwkJfSBlbHNlIHsKIAkJCW5leHQgPSBtYXBfZW5kOworCQl9CiAKLQkJbmV3X21hcHBlZF9yYW1fc2l6ZSA9IGluaXRfcmFuZ2VfbWVtb3J5X21hcHBpbmcoc3RhcnQsIG5leHQpOworCQltYXBwZWRfcmFtX3NpemUgKz0gaW5pdF9yYW5nZV9tZW1vcnlfbWFwcGluZyhzdGFydCwgbmV4dCk7CiAJCXN0YXJ0ID0gbmV4dDsKIAotCQlpZiAobmV3X21hcHBlZF9yYW1fc2l6ZSA+IG1hcHBlZF9yYW1fc2l6ZSkKKwkJaWYgKG1hcHBlZF9yYW1fc2l6ZSA+PSBzdGVwX3NpemUpCiAJCQlzdGVwX3NpemUgPSBnZXRfbmV3X3N0ZXBfc2l6ZShzdGVwX3NpemUpOwotCQltYXBwZWRfcmFtX3NpemUgKz0gbmV3X21hcHBlZF9yYW1fc2l6ZTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21weC5jIGIvYXJjaC94ODYvbW0vbXB4LmMKaW5kZXggNjdlYmY1Ny4uYzQzOWVjNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbXB4LmMKKysrIGIvYXJjaC94ODYvbW0vbXB4LmMKQEAgLTM0OSw2ICszNDksMTIgQEAKIAkJcmV0dXJuIE1QWF9JTlZBTElEX0JPVU5EU19ESVI7CiAKIAkvKgorCSAqIDMyLWJpdCBiaW5hcmllcyBvbiA2NC1iaXQga2VybmVscyBhcmUgY3VycmVudGx5CisJICogdW5zdXBwb3J0ZWQuCisJICovCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl82NCkgJiYgdGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikpCisJCXJldHVybiBNUFhfSU5WQUxJRF9CT1VORFNfRElSOworCS8qCiAJICogVGhlIGJvdW5kcyBkaXJlY3RvcnkgcG9pbnRlciBpcyBzdG9yZWQgaW4gYSByZWdpc3RlcgogCSAqIG9ubHkgYWNjZXNzaWJsZSBpZiB3ZSBmaXJzdCBkbyBhbiB4c2F2ZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC5jIGIvYXJjaC94ODYvbW0vcGF0LmMKaW5kZXggZWRmMjk5Yy4uN2FjNjg2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0LmMKKysrIGIvYXJjaC94ODYvbW0vcGF0LmMKQEAgLTIzNCw4ICsyMzQsMTMgQEAKIAkgICAgICBQQVQoNCwgV0IpIHwgUEFUKDUsIFdDKSB8IFBBVCg2LCBVQ19NSU5VUykgfCBQQVQoNywgVUMpOwogCiAJLyogQm9vdCBDUFUgY2hlY2sgKi8KLQlpZiAoIWJvb3RfcGF0X3N0YXRlKQorCWlmICghYm9vdF9wYXRfc3RhdGUpIHsKIAkJcmRtc3JsKE1TUl9JQTMyX0NSX1BBVCwgYm9vdF9wYXRfc3RhdGUpOworCQlpZiAoIWJvb3RfcGF0X3N0YXRlKSB7CisJCQlwYXRfZGlzYWJsZSgiUEFUIHJlYWQgcmV0dXJucyBhbHdheXMgemVybywgZGlzYWJsZWQuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CiAKIAl3cm1zcmwoTVNSX0lBMzJfQ1JfUEFULCBwYXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jIGIvYXJjaC94ODYvcGNpL2kzODYuYwppbmRleCA5YjE4ZWYzLi4zNDljMGQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jCisrKyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogCQkJY29udGludWU7CiAJCWlmIChyLT5wYXJlbnQpCS8qIEFscmVhZHkgYWxsb2NhdGVkICovCiAJCQljb250aW51ZTsKLQkJaWYgKCFyLT5zdGFydCB8fCBwY2lfY2xhaW1fcmVzb3VyY2UoZGV2LCBpZHgpIDwgMCkgeworCQlpZiAoIXItPnN0YXJ0IHx8IHBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2UoZGV2LCBpZHgpIDwgMCkgewogCQkJLyoKIAkJCSAqIFNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHRoZSByZWdpb24uCiAJCQkgKiBJbnZhbGlkYXRlIHRoZSByZXNvdXJjZSB0byBwcmV2ZW50CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kveGVuLmMgYi9hcmNoL3g4Ni9wY2kveGVuLmMKaW5kZXggYzQ4OWVmMi4uOTA5OGQ4OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL3hlbi5jCisrKyBiL2FyY2gveDg2L3BjaS94ZW4uYwpAQCAtNDU4LDYgKzQ1OCw3IEBACiAJICoganVzdCBob3cgR1NJcyBnZXQgcmVnaXN0ZXJlZC4KIAkgKi8KIAlfX2FjcGlfcmVnaXN0ZXJfZ3NpID0gYWNwaV9yZWdpc3Rlcl9nc2lfeGVuX2h2bTsKKwlfX2FjcGlfdW5yZWdpc3Rlcl9nc2kgPSBOVUxMOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUENJX01TSQpAQCAtNDcxLDUyICs0NzIsNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1hFTl9ET00wCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3NldHVwX2FjcGlfc2NpKHZvaWQpCi17Ci0JaW50IHJjOwotCWludCB0cmlnZ2VyLCBwb2xhcml0eTsKLQlpbnQgZ3NpID0gYWNwaV9zY2lfb3ZlcnJpZGVfZ3NpOwotCWludCBpcnEgPSAtMTsKLQlpbnQgZ3NpX292ZXJyaWRlID0gLTE7Ci0KLQlpZiAoIWdzaSkKLQkJcmV0dXJuOwotCi0JcmMgPSBhY3BpX2dldF9vdmVycmlkZV9pcnEoZ3NpLCAmdHJpZ2dlciwgJnBvbGFyaXR5KTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAieGVuOiBhY3BpX2dldF9vdmVycmlkZV9pcnEgZmFpbGVkIGZvciBhY3BpIgotCQkJCSIgc2NpLCByYz0lZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCXRyaWdnZXIgPSB0cmlnZ2VyID8gQUNQSV9MRVZFTF9TRU5TSVRJVkUgOiBBQ1BJX0VER0VfU0VOU0lUSVZFOwotCXBvbGFyaXR5ID0gcG9sYXJpdHkgPyBBQ1BJX0FDVElWRV9MT1cgOiBBQ1BJX0FDVElWRV9ISUdIOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAieGVuOiBzY2kgb3ZlcnJpZGU6IGdsb2JhbF9pcnE9JWQgdHJpZ2dlcj0lZCAiCi0JCQkicG9sYXJpdHk9JWRcbiIsIGdzaSwgdHJpZ2dlciwgcG9sYXJpdHkpOwotCi0JLyogQmVmb3JlIHdlIGJpbmQgdGhlIEdTSSB0byBhIExpbnV4IElSUSwgY2hlY2sgd2hldGhlcgotCSAqIHdlIG5lZWQgdG8gb3ZlcnJpZGUgaXQgd2l0aCBidXNfaXJxIChJUlEpIHZhbHVlLiBVc3VhbGx5IGZvcgotCSAqIElSUXMgYmVsb3cgSVJRX0xFR0FDWV9JUlEgdGhpcyBob2xkcyBJUlEgPT0gR1NJLCBhcyBzbzoKLQkgKiAgQUNQSTogSU5UX1NSQ19PVlIgKGJ1cyAwIGJ1c19pcnEgOSBnbG9iYWxfaXJxIDkgbG93IGxldmVsKQotCSAqIGJ1dCB0aGVyZSBhcmUgb2RkYmFsbHMgd2hlcmUgdGhlIElSUSAhPSBHU0k6Ci0JICogIEFDUEk6IElOVF9TUkNfT1ZSIChidXMgMCBidXNfaXJxIDkgZ2xvYmFsX2lycSAyMCBsb3cgbGV2ZWwpCi0JICogd2hpY2ggZW5kcyB1cCBiZWluZzogZ3NpX3RvX2lycVs5XSA9PSAyMAotCSAqICh3aGljaCBpcyB3aGF0IGFjcGlfZ3NpX3RvX2lycSBlbmRzIHVwIGNhbGxpbmcgd2hlbiBzdGFydGluZyB0aGUKLQkgKiB0aGUgQUNQSSBpbnRlcnByZXRlciBhbmQga2VlbHMgb3ZlciBzaW5jZSBJUlEgOSBoYXMgbm90IGJlZW4KLQkgKiBzZXR1cCBhcyB3ZSBoYWQgc2V0dXAgSVJRIDIwIGZvciBpdCkuCi0JICovCi0JaWYgKGFjcGlfZ3NpX3RvX2lycShnc2ksICZpcnEpID09IDApIHsKLQkJLyogVXNlIHRoZSBwcm92aWRlZCB2YWx1ZSBpZiBpdCdzIHZhbGlkLiAqLwotCQlpZiAoaXJxID49IDApCi0JCQlnc2lfb3ZlcnJpZGUgPSBpcnE7Ci0JfQotCi0JZ3NpID0geGVuX3JlZ2lzdGVyX2dzaShnc2ksIGdzaV9vdmVycmlkZSwgdHJpZ2dlciwgcG9sYXJpdHkpOwotCXByaW50ayhLRVJOX0lORk8gInhlbjogYWNwaSBzY2kgJWRcbiIsIGdzaSk7Ci0KLQlyZXR1cm47Ci19Ci0KIGludCBfX2luaXQgcGNpX3hlbl9pbml0aWFsX2RvbWFpbih2b2lkKQogewogCWludCBpcnE7CkBAIC01MjcsOCArNDgyLDggQEAKIAl4ODZfbXNpLnJlc3RvcmVfbXNpX2lycXMgPSB4ZW5faW5pdGRvbV9yZXN0b3JlX21zaV9pcnFzOwogCXBjaV9tc2lfaWdub3JlX21hc2sgPSAxOwogI2VuZGlmCi0JeGVuX3NldHVwX2FjcGlfc2NpKCk7CiAJX19hY3BpX3JlZ2lzdGVyX2dzaSA9IGFjcGlfcmVnaXN0ZXJfZ3NpX3hlbjsKKwlfX2FjcGlfdW5yZWdpc3Rlcl9nc2kgPSBOVUxMOwogCS8qIFByZS1hbGxvY2F0ZSBsZWdhY3kgaXJxcyAqLwogCWZvciAoaXJxID0gMDsgaXJxIDwgbnJfbGVnYWN5X2lycXMoKTsgaXJxKyspIHsKIAkJaW50IHRyaWdnZXIsIHBvbGFyaXR5OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5wbCBiL2FyY2gveDg2L3Rvb2xzL2NhbGNfcnVuX3NpemUucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMjEwYmEuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5wbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybAotIwotIyBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQgdG8gcnVuIHRoZSBrZXJuZWwsIGluY2x1ZGluZyByb29tIGZvcgotIyB0aGUgLmJzcyBhbmQgLmJyayBzZWN0aW9ucy4KLSMKLSMgVXNhZ2U6Ci0jIG9iamR1bXAgLWggYS5vdXQgfCBwZXJsIGNhbGNfcnVuX3NpemUucGwKLXVzZSBzdHJpY3Q7Ci0KLW15ICRtZW1fc2l6ZSA9IDA7Ci1teSAkZmlsZV9vZmZzZXQgPSAwOwotCi1teSAkc2VjdGlvbnM9IiAqWzAtOV0rIFwuKD86YnNzfGJyaykgKyI7Ci13aGlsZSAoPD4pIHsKLQlpZiAoL14kc2VjdGlvbnMoWzAtOWEtZl0rKSArKD86WzAtOWEtZl0rICspezJ9KFswLTlhLWZdKykvKSB7Ci0JCW15ICRzaXplID0gaGV4KCQxKTsKLQkJbXkgJG9mZnNldCA9IGhleCgkMik7Ci0JCSRtZW1fc2l6ZSArPSAkc2l6ZTsKLQkJaWYgKCRmaWxlX29mZnNldCA9PSAwKSB7Ci0JCQkkZmlsZV9vZmZzZXQgPSAkb2Zmc2V0OwotCQl9IGVsc2lmICgkZmlsZV9vZmZzZXQgIT0gJG9mZnNldCkgewotCQkJIyBCRkQgbGlua2VyIHNob3dzIHRoZSBzYW1lIGZpbGUgb2Zmc2V0IGluIEVMRi4KLQkJCSMgR29sZCBsaW5rZXIgc2hvd3MgdGhlbSBhcyBjb25zZWN1dGl2ZS4KLQkJCW5leHQgaWYgKCRmaWxlX29mZnNldCArICRtZW1fc2l6ZSA9PSAkb2Zmc2V0ICsgJHNpemUpOwotCi0JCQlwcmludGYgU1RERVJSICJmaWxlX29mZnNldDogMHglbHhcbiIsICRmaWxlX29mZnNldDsKLQkJCXByaW50ZiBTVERFUlIgIm1lbV9zaXplOiAweCVseFxuIiwgJG1lbV9zaXplOwotCQkJcHJpbnRmIFNUREVSUiAib2Zmc2V0OiAweCVseFxuIiwgJG9mZnNldDsKLQkJCXByaW50ZiBTVERFUlIgInNpemU6IDB4JWx4XG4iLCAkc2l6ZTsKLQotCQkJZGllICIuYnNzIGFuZCAuYnJrIGFyZSBub24tY29udGlndW91c1xuIjsKLQkJfQotCX0KLX0KLQotaWYgKCRmaWxlX29mZnNldCA9PSAwKSB7Ci0JZGllICJOZXZlciBmb3VuZCAuYnNzIG9yIC5icmsgZmlsZSBvZmZzZXRcbiI7Ci19Ci1wcmludGYoIiVkXG4iLCAkbWVtX3NpemUgKyAkZmlsZV9vZmZzZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5zaCBiL2FyY2gveDg2L3Rvb2xzL2NhbGNfcnVuX3NpemUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0YzE3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L3Rvb2xzL2NhbGNfcnVuX3NpemUuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisjCisjIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCB0byBydW4gdGhlIGtlcm5lbCwgaW5jbHVkaW5nIHJvb20gZm9yCisjIHRoZSAuYnNzIGFuZCAuYnJrIHNlY3Rpb25zLgorIworIyBVc2FnZToKKyMgb2JqZHVtcCAtaCBhLm91dCB8IHNoIGNhbGNfcnVuX3NpemUuc2gKKworTlVNPSdcKFswLTlhLWZBLUZdKlsgXHRdKlwpJworT1VUPSQoc2VkIC1uICdzL15bIFx0MC05XSouYltzcl1bc2tdWyBcdF0qJyIkTlVNJE5VTSROVU0kTlVNIicuKi9cMVw0L3AnKQoraWYgWyAteiAiJE9VVCIgXSA7IHRoZW4KKwllY2hvICJOZXZlciBmb3VuZCAuYnNzIG9yIC5icmsgZmlsZSBvZmZzZXQiID4mMgorCWV4aXQgMQorZmkKKworT1VUPSQoZWNobyAke09VVCMgfSkKK3NpemVBPSQocHJpbnRmICIlZCIgMHgke09VVCUlICp9KQorT1VUPSR7T1VUIyogfQorb2Zmc2V0QT0kKHByaW50ZiAiJWQiIDB4JHtPVVQlJSAqfSkKK09VVD0ke09VVCMqIH0KK3NpemVCPSQocHJpbnRmICIlZCIgMHgke09VVCUlICp9KQorT1VUPSR7T1VUIyogfQorb2Zmc2V0Qj0kKHByaW50ZiAiJWQiIDB4JHtPVVQlJSAqfSkKKworcnVuX3NpemU9JCgoICRvZmZzZXRBICsgJHNpemVBICsgJHNpemVCICkpCisKKyMgQkZEIGxpbmtlciBzaG93cyB0aGUgc2FtZSBmaWxlIG9mZnNldCBpbiBFTEYuCitpZiBbICIkb2Zmc2V0QSIgLW5lICIkb2Zmc2V0QiIgXSA7IHRoZW4KKwkjIEdvbGQgbGlua2VyIHNob3dzIHRoZW0gYXMgY29uc2VjdXRpdmUuCisJZW5kQj0kKCggJG9mZnNldEIgKyAkc2l6ZUIgKSkKKwlpZiBbICIkZW5kQiIgIT0gIiRydW5fc2l6ZSIgXSA7IHRoZW4KKwkJcHJpbnRmICJzaXplQTogMHgleFxuIiAkc2l6ZUEgPiYyCisJCXByaW50ZiAib2Zmc2V0QTogMHgleFxuIiAkb2Zmc2V0QSA+JjIKKwkJcHJpbnRmICJzaXplQjogMHgleFxuIiAkc2l6ZUIgPiYyCisJCXByaW50ZiAib2Zmc2V0QjogMHgleFxuIiAkb2Zmc2V0QiA+JjIKKwkJZWNobyAiLmJzcyBhbmQgLmJyayBhcmUgbm9uLWNvbnRpZ3VvdXMiID4mMgorCQlleGl0IDEKKwlmaQorZmkKKworcHJpbnRmICIlZFxuIiAkcnVuX3NpemUKK2V4aXQgMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdW0vc3lzX2NhbGxfdGFibGVfMzIuYyBiL2FyY2gveDg2L3VtL3N5c19jYWxsX3RhYmxlXzMyLmMKaW5kZXggNTMxZDQyNi4uYmQxNmQ2YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdW0vc3lzX2NhbGxfdGFibGVfMzIuYworKysgYi9hcmNoL3g4Ni91bS9zeXNfY2FsbF90YWJsZV8zMi5jCkBAIC0zNCw3ICszNCw3IEBACiAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgc3lzX25pX3N5c2NhbGwodm9pZCk7CiAKLWNvbnN0IHN5c19jYWxsX3B0cl90IHN5c19jYWxsX3RhYmxlW10gX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsKK2NvbnN0IHN5c19jYWxsX3B0cl90IHN5c19jYWxsX3RhYmxlW10gX19fX2NhY2hlbGluZV9hbGlnbmVkID0gewogCS8qCiAJICogU21lbGxzIGxpa2UgYSBjb21waWxlciBidWcgLS0gaXQgZG9lc24ndCB3b3JrCiAJICogd2hlbiB0aGUgJiBiZWxvdyBpcyByZW1vdmVkLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdW0vc3lzX2NhbGxfdGFibGVfNjQuYyBiL2FyY2gveDg2L3VtL3N5c19jYWxsX3RhYmxlXzY0LmMKaW5kZXggMjBjMzY0OS4uNWNkZmE5ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdW0vc3lzX2NhbGxfdGFibGVfNjQuYworKysgYi9hcmNoL3g4Ni91bS9zeXNfY2FsbF90YWJsZV82NC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAKIGV4dGVybiB2b2lkIHN5c19uaV9zeXNjYWxsKHZvaWQpOwogCi1jb25zdCBzeXNfY2FsbF9wdHJfdCBzeXNfY2FsbF90YWJsZVtdIF9fY2FjaGVsaW5lX2FsaWduZWQgPSB7Citjb25zdCBzeXNfY2FsbF9wdHJfdCBzeXNfY2FsbF90YWJsZVtdIF9fX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsKIAkvKgogCSAqIFNtZWxscyBsaWtlIGEgY29tcGlsZXIgYnVnIC0tIGl0IGRvZXNuJ3Qgd29yawogCSAqIHdoZW4gdGhlICYgYmVsb3cgaXMgcmVtb3ZlZC4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vdm1hLmMgYi9hcmNoL3g4Ni92ZHNvL3ZtYS5jCmluZGV4IDAwOTQ5NWIuLjFjOWY3NTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Zkc28vdm1hLmMKKysrIGIvYXJjaC94ODYvdmRzby92bWEuYwpAQCAtNDEsMTIgKzQxLDE3IEBACiAKIHN0cnVjdCBsaW51eF9iaW5wcm07CiAKLS8qIFB1dCB0aGUgdmRzbyBhYm92ZSB0aGUgKHJhbmRvbWl6ZWQpIHN0YWNrIHdpdGggYW5vdGhlciByYW5kb21pemVkIG9mZnNldC4KLSAgIFRoaXMgd2F5IHRoZXJlIGlzIG5vIGhvbGUgaW4gdGhlIG1pZGRsZSBvZiBhZGRyZXNzIHNwYWNlLgotICAgVG8gc2F2ZSBtZW1vcnkgbWFrZSBzdXJlIGl0IGlzIHN0aWxsIGluIHRoZSBzYW1lIFBURSBhcyB0aGUgc3RhY2sgdG9wLgotICAgVGhpcyBkb2Vzbid0IGdpdmUgdGhhdCBtYW55IHJhbmRvbSBiaXRzLgotCi0gICBPbmx5IHVzZWQgZm9yIHRoZSA2NC1iaXQgYW5kIHgzMiB2ZHNvcy4gKi8KKy8qCisgKiBQdXQgdGhlIHZkc28gYWJvdmUgdGhlIChyYW5kb21pemVkKSBzdGFjayB3aXRoIGFub3RoZXIgcmFuZG9taXplZAorICogb2Zmc2V0LiAgVGhpcyB3YXkgdGhlcmUgaXMgbm8gaG9sZSBpbiB0aGUgbWlkZGxlIG9mIGFkZHJlc3Mgc3BhY2UuCisgKiBUbyBzYXZlIG1lbW9yeSBtYWtlIHN1cmUgaXQgaXMgc3RpbGwgaW4gdGhlIHNhbWUgUFRFIGFzIHRoZSBzdGFjaworICogdG9wLiAgVGhpcyBkb2Vzbid0IGdpdmUgdGhhdCBtYW55IHJhbmRvbSBiaXRzLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGFsZ29yaXRobSBpcyBpbXBlcmZlY3Q6IHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHZkc28KKyAqIHN0YXJ0IGFkZHJlc3Mgd2l0aGluIGEgUE1EIGlzIGJpYXNlZCB0b3dhcmQgdGhlIGVuZC4KKyAqCisgKiBPbmx5IHVzZWQgZm9yIHRoZSA2NC1iaXQgYW5kIHgzMiB2ZHNvcy4KKyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgdmRzb19hZGRyKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxlbikKIHsKICNpZmRlZiBDT05GSUdfWDg2XzMyCkBAIC01NCwyMiArNTksMzAgQEAKICNlbHNlCiAJdW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7CiAJdW5zaWduZWQgb2Zmc2V0OwotCWVuZCA9IChzdGFydCArIFBNRF9TSVpFIC0gMSkgJiBQTURfTUFTSzsKKworCS8qCisJICogUm91bmQgdXAgdGhlIHN0YXJ0IGFkZHJlc3MuICBJdCBjYW4gc3RhcnQgb3V0IHVuYWxpZ25lZCBhcyBhIHJlc3VsdAorCSAqIG9mIHN0YWNrIHN0YXJ0IHJhbmRvbWl6YXRpb24uCisJICovCisJc3RhcnQgPSBQQUdFX0FMSUdOKHN0YXJ0KTsKKworCS8qIFJvdW5kIHRoZSBsb3dlc3QgcG9zc2libGUgZW5kIGFkZHJlc3MgdXAgdG8gYSBQTUQgYm91bmRhcnkuICovCisJZW5kID0gKHN0YXJ0ICsgbGVuICsgUE1EX1NJWkUgLSAxKSAmIFBNRF9NQVNLOwogCWlmIChlbmQgPj0gVEFTS19TSVpFX01BWCkKIAkJZW5kID0gVEFTS19TSVpFX01BWDsKIAllbmQgLT0gbGVuOwotCS8qIFRoaXMgbG9zZXMgc29tZSBtb3JlIGJpdHMgdGhhbiBhIG1vZHVsbywgYnV0IGlzIGNoZWFwZXIgKi8KLQlvZmZzZXQgPSBnZXRfcmFuZG9tX2ludCgpICYgKFBUUlNfUEVSX1BURSAtIDEpOwotCWFkZHIgPSBzdGFydCArIChvZmZzZXQgPDwgUEFHRV9TSElGVCk7Ci0JaWYgKGFkZHIgPj0gZW5kKQotCQlhZGRyID0gZW5kOworCisJaWYgKGVuZCA+IHN0YXJ0KSB7CisJCW9mZnNldCA9IGdldF9yYW5kb21faW50KCkgJSAoKChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCkgKyAxKTsKKwkJYWRkciA9IHN0YXJ0ICsgKG9mZnNldCA8PCBQQUdFX1NISUZUKTsKKwl9IGVsc2UgeworCQlhZGRyID0gc3RhcnQ7CisJfQogCiAJLyoKLQkgKiBwYWdlLWFsaWduIGl0IGhlcmUgc28gdGhhdCBnZXRfdW5tYXBwZWRfYXJlYSBkb2Vzbid0Ci0JICogYWxpZ24gaXQgd3JvbmdmdWxseSBhZ2FpbiB0byB0aGUgbmV4dCBwYWdlLiBhZGRyIGNhbiBjb21lIGluIDRLCi0JICogdW5hbGlnbmVkIGhlcmUgYXMgYSByZXN1bHQgb2Ygc3RhY2sgc3RhcnQgcmFuZG9taXphdGlvbi4KKwkgKiBGb3JjaWJseSBhbGlnbiB0aGUgZmluYWwgYWRkcmVzcyBpbiBjYXNlIHdlIGhhdmUgYSBoYXJkd2FyZQorCSAqIGlzc3VlIHRoYXQgcmVxdWlyZXMgYWxpZ25tZW50IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgogCSAqLwotCWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOwogCWFkZHIgPSBhbGlnbl92ZHNvX2FkZHIoYWRkcik7CiAKIAlyZXR1cm4gYWRkcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCA2YmYzYTEzLi43OGE4ODFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9waHlzZGV2Lmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS92Y3B1Lmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9tZW1vcnkuaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL25taS5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLW1jYS5oPgogI2luY2x1ZGUgPHhlbi9mZWF0dXJlcy5oPgogI2luY2x1ZGUgPHhlbi9wYWdlLmg+CkBAIC02Niw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9zdGFja3Byb3RlY3Rvci5oPgogI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8YXNtL21hY2hfdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vbXdhaXQuaD4KICNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgogI2luY2x1ZGUgPGFzbS9wYXQuaD4KQEAgLTEzNTEsNiArMTM1MywyMSBAQAogCS5lbWVyZ2VuY3lfcmVzdGFydCA9IHhlbl9lbWVyZ2VuY3lfcmVzdGFydCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHhlbl9nZXRfbm1pX3JlYXNvbih2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgcmVhc29uID0gMDsKKworCS8qIENvbnN0cnVjdCBhIHZhbHVlIHdoaWNoIGxvb2tzIGxpa2UgaXQgY2FtZSBmcm9tIHBvcnQgMHg2MS4gKi8KKwlpZiAodGVzdF9iaXQoX1hFTl9OTUlSRUFTT05faW9fZXJyb3IsCisJCSAgICAgJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPmFyY2gubm1pX3JlYXNvbikpCisJCXJlYXNvbiB8PSBOTUlfUkVBU09OX0lPQ0hLOworCWlmICh0ZXN0X2JpdChfWEVOX05NSVJFQVNPTl9wY2lfc2VyciwKKwkJICAgICAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+YXJjaC5ubWlfcmVhc29uKSkKKwkJcmVhc29uIHw9IE5NSV9SRUFTT05fU0VSUjsKKworCXJldHVybiByZWFzb247Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCB4ZW5fYm9vdF9wYXJhbXNfaW5pdF9lZGQodm9pZCkKIHsKICNpZiBJU19FTkFCTEVEKENPTkZJR19FREQpCkBAIC0xNTM1LDkgKzE1NTIsMTIgQEAKIAlwdl9pbmZvID0geGVuX2luZm87CiAJcHZfaW5pdF9vcHMgPSB4ZW5faW5pdF9vcHM7CiAJcHZfYXBpY19vcHMgPSB4ZW5fYXBpY19vcHM7Ci0JaWYgKCF4ZW5fcHZoX2RvbWFpbigpKQorCWlmICgheGVuX3B2aF9kb21haW4oKSkgewogCQlwdl9jcHVfb3BzID0geGVuX2NwdV9vcHM7CiAKKwkJeDg2X3BsYXRmb3JtLmdldF9ubWlfcmVhc29uID0geGVuX2dldF9ubWlfcmVhc29uOworCX0KKwogCWlmICh4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkKIAkJeDg2X2luaXQucmVzb3VyY2VzLm1lbW9yeV9zZXR1cCA9IHhlbl9hdXRvX3hsYXRlZF9tZW1vcnlfc2V0dXA7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3AybS5jIGIvYXJjaC94ODYveGVuL3AybS5jCmluZGV4IGVkYmM3YTYuLjcwZmI1MDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9wMm0uYworKysgYi9hcmNoL3g4Ni94ZW4vcDJtLmMKQEAgLTE2NywxMCArMTY3LDEzIEBACiAJcmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9SRVBFQVQpOwogfQogCi0vKiBPbmx5IHRvIGJlIGNhbGxlZCBpbiBjYXNlIG9mIGEgcmFjZSBmb3IgYSBwYWdlIGp1c3QgYWxsb2NhdGVkISAqLwotc3RhdGljIHZvaWQgZnJlZV9wMm1fcGFnZSh2b2lkICpwKQorc3RhdGljIHZvaWQgX19yZWYgZnJlZV9wMm1fcGFnZSh2b2lkICpwKQogewotCUJVR19PTighc2xhYl9pc19hdmFpbGFibGUoKSk7CisJaWYgKHVubGlrZWx5KCFzbGFiX2lzX2F2YWlsYWJsZSgpKSkgeworCQlmcmVlX2Jvb3RtZW0oKHVuc2lnbmVkIGxvbmcpcCwgUEFHRV9TSVpFKTsKKwkJcmV0dXJuOworCX0KKwogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwKTsKIH0KIApAQCAtMzc1LDcgKzM3OCw3IEBACiAJCQlwMm1fbWlzc2luZ19wdGUgOiBwMm1faWRlbnRpdHlfcHRlOwogCQlmb3IgKGkgPSAwOyBpIDwgUE1EU19QRVJfTUlEX1BBR0U7IGkrKykgewogCQkJcG1kcCA9IHBvcHVsYXRlX2V4dHJhX3BtZCgKLQkJCQkodW5zaWduZWQgbG9uZykocDJtICsgcGZuICsgaSAqIFBUUlNfUEVSX1BURSkpOworCQkJCSh1bnNpZ25lZCBsb25nKShwMm0gKyBwZm4pICsgaSAqIFBNRF9TSVpFKTsKIAkJCXNldF9wbWQocG1kcCwgX19wbWQoX19wYShwdGVwKSB8IF9LRVJOUEdfVEFCTEUpKTsKIAkJfQogCX0KQEAgLTQzNiwxMCArNDM5LDkgQEAKICAqIGEgbmV3IHBtZCBpcyB0byByZXBsYWNlIHAybV9taXNzaW5nX3B0ZSBvciBwMm1faWRlbnRpdHlfcHRlIGJ5IGEgaW5kaXZpZHVhbAogICogcG1kLiBJbiBjYXNlIG9mIFBBRS94ODYtMzIgdGhlcmUgYXJlIG11bHRpcGxlIHBtZHMgdG8gYWxsb2NhdGUhCiAgKi8KLXN0YXRpYyBwdGVfdCAqYWxsb2NfcDJtX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcHRlX3BnKQorc3RhdGljIHB0ZV90ICphbGxvY19wMm1fcG1kKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZV9wZykKIHsKIAlwdGVfdCAqcHRlY2hrOwotCXB0ZV90ICpwdGVyZXQgPSBwdGVwOwogCXB0ZV90ICpwdGVfbmV3cGdbUE1EU19QRVJfTUlEX1BBR0VdOwogCXBtZF90ICpwbWRwOwogCXVuc2lnbmVkIGludCBsZXZlbDsKQEAgLTQ3Myw4ICs0NzUsNiBAQAogCQlpZiAocHRlY2hrID09IHB0ZV9wZykgewogCQkJc2V0X3BtZChwbWRwLAogCQkJCV9fcG1kKF9fcGEocHRlX25ld3BnW2ldKSB8IF9LRVJOUEdfVEFCTEUpKTsKLQkJCWlmICh2YWRkciA9PSAoYWRkciAmIH4oUE1EX1NJWkUgLSAxKSkpCi0JCQkJcHRlcmV0ID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkcik7CiAJCQlwdGVfbmV3cGdbaV0gPSBOVUxMOwogCQl9CiAKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCQl2YWRkciArPSBQTURfU0laRTsKIAl9CiAKLQlyZXR1cm4gcHRlcmV0OworCXJldHVybiBsb29rdXBfYWRkcmVzcyhhZGRyLCAmbGV2ZWwpOwogfQogCiAvKgpAQCAtNTE3LDcgKzUxNyw3IEBACiAKIAlpZiAocHRlX3BnID09IHAybV9taXNzaW5nX3B0ZSB8fCBwdGVfcGcgPT0gcDJtX2lkZW50aXR5X3B0ZSkgewogCQkvKiBQTUQgbGV2ZWwgaXMgbWlzc2luZywgYWxsb2NhdGUgYSBuZXcgb25lICovCi0JCXB0ZXAgPSBhbGxvY19wMm1fcG1kKGFkZHIsIHB0ZXAsIHB0ZV9wZyk7CisJCXB0ZXAgPSBhbGxvY19wMm1fcG1kKGFkZHIsIHB0ZV9wZyk7CiAJCWlmICghcHRlcCkKIAkJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc2V0dXAuYyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCmluZGV4IGRmZDc3ZGUuLjg2NWU1NmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zZXR1cC5jCisrKyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIHVuc2lnbmVkIGxvbmcgX19yZWYgeGVuX2Noa19leHRyYV9tZW0odW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gUEZOX1BIWVMocGZuKTsKKwlwaHlzX2FkZHJfdCBhZGRyID0gUEZOX1BIWVMocGZuKTsKIAogCWZvciAoaSA9IDA7IGkgPCBYRU5fRVhUUkFfTUVNX01BWF9SRUdJT05TOyBpKyspIHsKIAkJaWYgKGFkZHIgPj0geGVuX2V4dHJhX21lbVtpXS5zdGFydCAmJgpAQCAtMTYwLDYgKzE2MCw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgWEVOX0VYVFJBX01FTV9NQVhfUkVHSU9OUzsgaSsrKSB7CisJCWlmICgheGVuX2V4dHJhX21lbVtpXS5zaXplKQorCQkJY29udGludWU7CiAJCXBmbl9zID0gUEZOX0RPV04oeGVuX2V4dHJhX21lbVtpXS5zdGFydCk7CiAJCXBmbl9lID0gUEZOX1VQKHhlbl9leHRyYV9tZW1baV0uc3RhcnQgKyB4ZW5fZXh0cmFfbWVtW2ldLnNpemUpOwogCQlmb3IgKHBmbiA9IHBmbl9zOyBwZm4gPCBwZm5fZTsgcGZuKyspCkBAIC0yMjksMTUgKzIzMSwxNCBAQAogICogYXMgYSBmYWxsYmFjayBpZiB0aGUgcmVtYXBwaW5nIGZhaWxzLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3NldF9pZGVudGl0eV9hbmRfcmVsZWFzZV9jaHVuayh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKLQl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHVuc2lnbmVkIGxvbmcgKmlkZW50aXR5LAotCXVuc2lnbmVkIGxvbmcgKnJlbGVhc2VkKQorCXVuc2lnbmVkIGxvbmcgZW5kX3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdW5zaWduZWQgbG9uZyAqcmVsZWFzZWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsZW4gPSAwOwogCXVuc2lnbmVkIGxvbmcgcGZuLCBlbmQ7CiAJaW50IHJldDsKIAogCVdBUk5fT04oc3RhcnRfcGZuID4gZW5kX3Bmbik7CiAKKwkvKiBSZWxlYXNlIHBhZ2VzIGZpcnN0LiAqLwogCWVuZCA9IG1pbihlbmRfcGZuLCBucl9wYWdlcyk7CiAJZm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiA8IGVuZDsgcGZuKyspIHsKIAkJdW5zaWduZWQgbG9uZyBtZm4gPSBwZm5fdG9fbWZuKHBmbik7CkBAIC0yNTAsMTYgKzI1MSwxNCBAQAogCQlXQVJOKHJldCAhPSAxLCAiRmFpbGVkIHRvIHJlbGVhc2UgcGZuICVseCBlcnI9JWRcbiIsIHBmbiwgcmV0KTsKIAogCQlpZiAocmV0ID09IDEpIHsKKwkJCSgqcmVsZWFzZWQpKys7CiAJCQlpZiAoIV9fc2V0X3BoeXNfdG9fbWFjaGluZShwZm4sIElOVkFMSURfUDJNX0VOVFJZKSkKIAkJCQlicmVhazsKLQkJCWxlbisrOwogCQl9IGVsc2UKIAkJCWJyZWFrOwogCX0KIAotCS8qIE5lZWQgdG8gcmVsZWFzZSBwYWdlcyBmaXJzdCAqLwotCSpyZWxlYXNlZCArPSBsZW47Ci0JKmlkZW50aXR5ICs9IHNldF9waHlzX3JhbmdlX2lkZW50aXR5KHN0YXJ0X3BmbiwgZW5kX3Bmbik7CisJc2V0X3BoeXNfcmFuZ2VfaWRlbnRpdHkoc3RhcnRfcGZuLCBlbmRfcGZuKTsKIH0KIAogLyoKQEAgLTI4Nyw3ICsyODYsNyBAQAogCX0KIAogCS8qIFVwZGF0ZSBrZXJuZWwgbWFwcGluZywgYnV0IG5vdCBmb3IgaGlnaG1lbS4gKi8KLQlpZiAoKHBmbiA8PCBQQUdFX1NISUZUKSA+PSBfX3BhKGhpZ2hfbWVtb3J5KSkKKwlpZiAocGZuID49IFBGTl9VUChfX3BhKGhpZ2hfbWVtb3J5IC0gMSkpKQogCQlyZXR1cm47CiAKIAlpZiAoSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZygodW5zaWduZWQgbG9uZylfX3ZhKHBmbiA8PCBQQUdFX1NISUZUKSwKQEAgLTMxOCw3ICszMTcsNiBAQAogCXVuc2lnbmVkIGxvbmcgaWRlbnRfcGZuX2l0ZXIsIHJlbWFwX3Bmbl9pdGVyOwogCXVuc2lnbmVkIGxvbmcgaWRlbnRfZW5kX3BmbiA9IHN0YXJ0X3BmbiArIHNpemU7CiAJdW5zaWduZWQgbG9uZyBsZWZ0ID0gc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGlkZW50X2NudCA9IDA7CiAJdW5zaWduZWQgaW50IGksIGNodW5rOwogCiAJV0FSTl9PTihzaXplID09IDApOwpAQCAtMzQ3LDggKzM0NSw3IEBACiAJCXhlbl9yZW1hcF9tZm4gPSBtZm47CiAKIAkJLyogU2V0IGlkZW50aXR5IG1hcCAqLwotCQlpZGVudF9jbnQgKz0gc2V0X3BoeXNfcmFuZ2VfaWRlbnRpdHkoaWRlbnRfcGZuX2l0ZXIsCi0JCQlpZGVudF9wZm5faXRlciArIGNodW5rKTsKKwkJc2V0X3BoeXNfcmFuZ2VfaWRlbnRpdHkoaWRlbnRfcGZuX2l0ZXIsIGlkZW50X3Bmbl9pdGVyICsgY2h1bmspOwogCiAJCWxlZnQgLT0gY2h1bms7CiAJfQpAQCAtMzcxLDcgKzM2OCw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgeGVuX3NldF9pZGVudGl0eV9hbmRfcmVtYXBfY2h1bmsoCiAgICAgICAgIGNvbnN0IHN0cnVjdCBlODIwZW50cnkgKmxpc3QsIHNpemVfdCBtYXBfc2l6ZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJdW5zaWduZWQgbG9uZyBlbmRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCB1bnNpZ25lZCBsb25nIHJlbWFwX3BmbiwKLQl1bnNpZ25lZCBsb25nICppZGVudGl0eSwgdW5zaWduZWQgbG9uZyAqcmVsZWFzZWQpCisJdW5zaWduZWQgbG9uZyAqcmVsZWFzZWQsIHVuc2lnbmVkIGxvbmcgKnJlbWFwcGVkKQogewogCXVuc2lnbmVkIGxvbmcgcGZuOwogCXVuc2lnbmVkIGxvbmcgaSA9IDA7CkBAIC0zODYsOCArMzgzLDcgQEAKIAkJLyogRG8gbm90IHJlbWFwIHBhZ2VzIGJleW9uZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uICovCiAJCWlmIChjdXJfcGZuID49IG5yX3BhZ2VzKSB7CiAJCQkvKiBJZGVudGl0eSBtYXAgcmVtYWluaW5nIHBhZ2VzICovCi0JCQkqaWRlbnRpdHkgKz0gc2V0X3BoeXNfcmFuZ2VfaWRlbnRpdHkoY3VyX3BmbiwKLQkJCQljdXJfcGZuICsgc2l6ZSk7CisJCQlzZXRfcGh5c19yYW5nZV9pZGVudGl0eShjdXJfcGZuLCBjdXJfcGZuICsgc2l6ZSk7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoY3VyX3BmbiArIHNpemUgPiBucl9wYWdlcykKQEAgLTM5OCw3ICszOTQsNyBAQAogCQlpZiAoIXJlbWFwX3JhbmdlX3NpemUpIHsKIAkJCXByX3dhcm5pbmcoIlVuYWJsZSB0byBmaW5kIGF2YWlsYWJsZSBwZm4gcmFuZ2UsIG5vdCByZW1hcHBpbmcgaWRlbnRpdHkgcGFnZXNcbiIpOwogCQkJeGVuX3NldF9pZGVudGl0eV9hbmRfcmVsZWFzZV9jaHVuayhjdXJfcGZuLAotCQkJCWN1cl9wZm4gKyBsZWZ0LCBucl9wYWdlcywgaWRlbnRpdHksIHJlbGVhc2VkKTsKKwkJCQljdXJfcGZuICsgbGVmdCwgbnJfcGFnZXMsIHJlbGVhc2VkKTsKIAkJCWJyZWFrOwogCQl9CiAJCS8qIEFkanVzdCBzaXplIHRvIGZpdCBpbiBjdXJyZW50IGU4MjAgUkFNIHJlZ2lvbiAqLwpAQCAtNDEwLDcgKzQwNiw3IEBACiAJCS8qIFVwZGF0ZSB2YXJpYWJsZXMgdG8gcmVmbGVjdCBuZXcgbWFwcGluZ3MuICovCiAJCWkgKz0gc2l6ZTsKIAkJcmVtYXBfcGZuICs9IHNpemU7Ci0JCSppZGVudGl0eSArPSBzaXplOworCQkqcmVtYXBwZWQgKz0gc2l6ZTsKIAl9CiAKIAkvKgpAQCAtNDI3LDEzICs0MjMsMTMgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHhlbl9zZXRfaWRlbnRpdHlfYW5kX3JlbWFwKAogCWNvbnN0IHN0cnVjdCBlODIwZW50cnkgKmxpc3QsIHNpemVfdCBtYXBfc2l6ZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKLQl1bnNpZ25lZCBsb25nICpyZWxlYXNlZCkKKwl1bnNpZ25lZCBsb25nICpyZWxlYXNlZCwgdW5zaWduZWQgbG9uZyAqcmVtYXBwZWQpCiB7CiAJcGh5c19hZGRyX3Qgc3RhcnQgPSAwOwotCXVuc2lnbmVkIGxvbmcgaWRlbnRpdHkgPSAwOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9wZm4gPSBucl9wYWdlczsKIAljb25zdCBzdHJ1Y3QgZTgyMGVudHJ5ICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIG51bV9yZWxlYXNlZCA9IDA7CisJdW5zaWduZWQgbG9uZyBudW1fcmVtYXBwZWQgPSAwOwogCWludCBpOwogCiAJLyoKQEAgLTQ2MCwxNCArNDU2LDE0IEBACiAJCQkJbGFzdF9wZm4gPSB4ZW5fc2V0X2lkZW50aXR5X2FuZF9yZW1hcF9jaHVuaygKIAkJCQkJCWxpc3QsIG1hcF9zaXplLCBzdGFydF9wZm4sCiAJCQkJCQllbmRfcGZuLCBucl9wYWdlcywgbGFzdF9wZm4sCi0JCQkJCQkmaWRlbnRpdHksICZudW1fcmVsZWFzZWQpOworCQkJCQkJJm51bV9yZWxlYXNlZCwgJm51bV9yZW1hcHBlZCk7CiAJCQlzdGFydCA9IGVuZDsKIAkJfQogCX0KIAogCSpyZWxlYXNlZCA9IG51bV9yZWxlYXNlZDsKKwkqcmVtYXBwZWQgPSBudW1fcmVtYXBwZWQ7CiAKLQlwcl9pbmZvKCJTZXQgJWxkIHBhZ2UocykgdG8gMS0xIG1hcHBpbmdcbiIsIGlkZW50aXR5KTsKIAlwcl9pbmZvKCJSZWxlYXNlZCAlbGQgcGFnZShzKVxuIiwgbnVtX3JlbGVhc2VkKTsKIH0KIApAQCAtNTg2LDYgKzU4Miw3IEBACiAJc3RydWN0IHhlbl9tZW1vcnlfbWFwIG1lbW1hcDsKIAl1bnNpZ25lZCBsb25nIG1heF9wYWdlczsKIAl1bnNpZ25lZCBsb25nIGV4dHJhX3BhZ2VzID0gMDsKKwl1bnNpZ25lZCBsb25nIHJlbWFwcGVkX3BhZ2VzOwogCWludCBpOwogCWludCBvcDsKIApAQCAtNjM1LDkgKzYzMiwxMCBAQAogCSAqIHVuZGVybHlpbmcgUkFNLgogCSAqLwogCXhlbl9zZXRfaWRlbnRpdHlfYW5kX3JlbWFwKG1hcCwgbWVtbWFwLm5yX2VudHJpZXMsIG1heF9wZm4sCi0JCQkJICAgJnhlbl9yZWxlYXNlZF9wYWdlcyk7CisJCQkJICAgJnhlbl9yZWxlYXNlZF9wYWdlcywgJnJlbWFwcGVkX3BhZ2VzKTsKIAogCWV4dHJhX3BhZ2VzICs9IHhlbl9yZWxlYXNlZF9wYWdlczsKKwlleHRyYV9wYWdlcyArPSByZW1hcHBlZF9wYWdlczsKIAogCS8qCiAJICogQ2xhbXAgdGhlIGFtb3VudCBvZiBleHRyYSBtZW1vcnkgdG8gYSBFWFRSQV9NRU1fUkFUSU8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi90aW1lLmMgYi9hcmNoL3g4Ni94ZW4vdGltZS5jCmluZGV4IGY0NzNkMjYuLjY5MDg3MzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi90aW1lLmMKKysrIGIvYXJjaC94ODYveGVuL3RpbWUuYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAKIHN0cnVjdCB4ZW5fY2xvY2tfZXZlbnRfZGV2aWNlIHsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGV2dDsKLQljaGFyICpuYW1lOworCWNoYXIgbmFtZVsxNl07CiB9Owogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB4ZW5fY2xvY2tfZXZlbnRfZGV2aWNlLCB4ZW5fY2xvY2tfZXZlbnRzKSA9IHsgLmV2dC5pcnEgPSAtMSB9OwogCkBAIC00MjAsNDYgKzQyMCwzOCBAQAogCWlmIChldnQtPmlycSA+PSAwKSB7CiAJCXVuYmluZF9mcm9tX2lycWhhbmRsZXIoZXZ0LT5pcnEsIE5VTEwpOwogCQlldnQtPmlycSA9IC0xOwotCQlrZnJlZShwZXJfY3B1KHhlbl9jbG9ja19ldmVudHMsIGNwdSkubmFtZSk7Ci0JCXBlcl9jcHUoeGVuX2Nsb2NrX2V2ZW50cywgY3B1KS5uYW1lID0gTlVMTDsKIAl9CiB9CiAKIHZvaWQgeGVuX3NldHVwX3RpbWVyKGludCBjcHUpCiB7Ci0JY2hhciAqbmFtZTsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQ7CisJc3RydWN0IHhlbl9jbG9ja19ldmVudF9kZXZpY2UgKnhldnQgPSAmcGVyX2NwdSh4ZW5fY2xvY2tfZXZlbnRzLCBjcHUpOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZ4ZXZ0LT5ldnQ7CiAJaW50IGlycTsKIAotCWV2dCA9ICZwZXJfY3B1KHhlbl9jbG9ja19ldmVudHMsIGNwdSkuZXZ0OwogCVdBUk4oZXZ0LT5pcnEgPj0gMCwgIklSUSVkIGZvciBDUFUlZCBpcyBhbHJlYWR5IGFsbG9jYXRlZFxuIiwgZXZ0LT5pcnEsIGNwdSk7CiAJaWYgKGV2dC0+aXJxID49IDApCiAJCXhlbl90ZWFyZG93bl90aW1lcihjcHUpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaW5zdGFsbGluZyBYZW4gdGltZXIgZm9yIENQVSAlZFxuIiwgY3B1KTsKIAotCW5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInRpbWVyJWQiLCBjcHUpOwotCWlmICghbmFtZSkKLQkJbmFtZSA9ICI8dGltZXIga2FzcHJpbnRmIGZhaWxlZD4iOworCXNucHJpbnRmKHhldnQtPm5hbWUsIHNpemVvZih4ZXZ0LT5uYW1lKSwgInRpbWVyJWQiLCBjcHUpOwogCiAJaXJxID0gYmluZF92aXJxX3RvX2lycWhhbmRsZXIoVklSUV9USU1FUiwgY3B1LCB4ZW5fdGltZXJfaW50ZXJydXB0LAogCQkJCSAgICAgIElSUUZfUEVSQ1BVfElSUUZfTk9CQUxBTkNJTkd8SVJRRl9USU1FUnwKIAkJCQkgICAgICBJUlFGX0ZPUkNFX1JFU1VNRXxJUlFGX0VBUkxZX1JFU1VNRSwKLQkJCQkgICAgICBuYW1lLCBOVUxMKTsKKwkJCQkgICAgICB4ZXZ0LT5uYW1lLCBOVUxMKTsKIAkodm9pZCl4ZW5fc2V0X2lycV9wcmlvcml0eShpcnEsIFhFTl9JUlFfUFJJT1JJVFlfTUFYKTsKIAogCW1lbWNweShldnQsIHhlbl9jbG9ja2V2ZW50LCBzaXplb2YoKmV2dCkpOwogCiAJZXZ0LT5jcHVtYXNrID0gY3B1bWFza19vZihjcHUpOwogCWV2dC0+aXJxID0gaXJxOwotCXBlcl9jcHUoeGVuX2Nsb2NrX2V2ZW50cywgY3B1KS5uYW1lID0gbmFtZTsKIH0KIAogCiB2b2lkIHhlbl9zZXR1cF9jcHVfY2xvY2tldmVudHModm9pZCkKIHsKLQlCVUdfT04ocHJlZW1wdGlibGUoKSk7Ci0KIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UodGhpc19jcHVfcHRyKCZ4ZW5fY2xvY2tfZXZlbnRzLmV2dCkpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9mYXVsdC5jIGIvYXJjaC94dGVuc2EvbW0vZmF1bHQuYwppbmRleCBiNTdjNGY5Li45ZTM1NzFhIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9mYXVsdC5jCisrKyBiL2FyY2gveHRlbnNhL21tL2ZhdWx0LmMKQEAgLTExNyw2ICsxMTcsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggMzBmNjE1My4uM2FkNDA1NSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC00NzMsNiArNDczLDI1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChibGtfcXVldWVfYnlwYXNzX2VuZCk7CiAKK3ZvaWQgYmxrX3NldF9xdWV1ZV9keWluZyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX0RZSU5HLCBxKTsKKworCWlmIChxLT5tcV9vcHMpCisJCWJsa19tcV93YWtlX3dhaXRlcnMocSk7CisJZWxzZSB7CisJCXN0cnVjdCByZXF1ZXN0X2xpc3QgKnJsOworCisJCWJsa19xdWV1ZV9mb3JfZWFjaF9ybChybCwgcSkgeworCQkJaWYgKHJsLT5ycV9wb29sKSB7CisJCQkJd2FrZV91cCgmcmwtPndhaXRbQkxLX1JXX1NZTkNdKTsKKwkJCQl3YWtlX3VwKCZybC0+d2FpdFtCTEtfUldfQVNZTkNdKTsKKwkJCX0KKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa19zZXRfcXVldWVfZHlpbmcpOworCiAvKioKICAqIGJsa19jbGVhbnVwX3F1ZXVlIC0gc2h1dGRvd24gYSByZXF1ZXN0IHF1ZXVlCiAgKiBAcTogcmVxdWVzdCBxdWV1ZSB0byBzaHV0ZG93bgpAQCAtNDg2LDcgKzUwNSw3IEBACiAKIAkvKiBtYXJrIEBxIERZSU5HLCBubyBuZXcgcmVxdWVzdCBvciBtZXJnZXMgd2lsbCBiZSBhbGxvd2VkIGFmdGVyd2FyZHMgKi8KIAltdXRleF9sb2NrKCZxLT5zeXNmc19sb2NrKTsKLQlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX0RZSU5HLCBxKTsKKwlibGtfc2V0X3F1ZXVlX2R5aW5nKHEpOwogCXNwaW5fbG9ja19pcnEobG9jayk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLXN5c2ZzLmMgYi9ibG9jay9ibGstbXEtc3lzZnMuYwppbmRleCAxNjMwYTIwLi42Nzc0YTBlIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEtc3lzZnMuYworKysgYi9ibG9jay9ibGstbXEtc3lzZnMuYwpAQCAtMTUsNiArMTUsMjYgQEAKIAogc3RhdGljIHZvaWQgYmxrX21xX3N5c2ZzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCiB7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CisKKwlxID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCByZXF1ZXN0X3F1ZXVlLCBtcV9rb2JqKTsKKwlmcmVlX3BlcmNwdShxLT5xdWV1ZV9jdHgpOworfQorCitzdGF0aWMgdm9pZCBibGtfbXFfY3R4X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IGJsa19tcV9jdHggKmN0eDsKKworCWN0eCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgYmxrX21xX2N0eCwga29iaik7CisJa29iamVjdF9wdXQoJmN0eC0+cXVldWUtPm1xX2tvYmopOworfQorCitzdGF0aWMgdm9pZCBibGtfbXFfaGN0eF9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQoreworCXN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4OworCisJaGN0eCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgYmxrX21xX2h3X2N0eCwga29iaik7CisJa2ZyZWUoaGN0eCk7CiB9CiAKIHN0cnVjdCBibGtfbXFfY3R4X3N5c2ZzX2VudHJ5IHsKQEAgLTMxOCwxMyArMzM4LDEzIEBACiBzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBibGtfbXFfY3R4X2t0eXBlID0gewogCS5zeXNmc19vcHMJPSAmYmxrX21xX3N5c2ZzX29wcywKIAkuZGVmYXVsdF9hdHRycwk9IGRlZmF1bHRfY3R4X2F0dHJzLAotCS5yZWxlYXNlCT0gYmxrX21xX3N5c2ZzX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBibGtfbXFfY3R4X3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBibGtfbXFfaHdfa3R5cGUgPSB7CiAJLnN5c2ZzX29wcwk9ICZibGtfbXFfaHdfc3lzZnNfb3BzLAogCS5kZWZhdWx0X2F0dHJzCT0gZGVmYXVsdF9od19jdHhfYXR0cnMsCi0JLnJlbGVhc2UJPSBibGtfbXFfc3lzZnNfcmVsZWFzZSwKKwkucmVsZWFzZQk9IGJsa19tcV9oY3R4X3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgdm9pZCBibGtfbXFfdW5yZWdpc3Rlcl9oY3R4KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KQpAQCAtMzU1LDYgKzM3NSw3IEBACiAJCXJldHVybiByZXQ7CiAKIAloY3R4X2Zvcl9lYWNoX2N0eChoY3R4LCBjdHgsIGkpIHsKKwkJa29iamVjdF9nZXQoJnEtPm1xX2tvYmopOwogCQlyZXQgPSBrb2JqZWN0X2FkZCgmY3R4LT5rb2JqLCAmaGN0eC0+a29iaiwgImNwdSV1IiwgY3R4LT5jcHUpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEtdGFnLmMgYi9ibG9jay9ibGstbXEtdGFnLmMKaW5kZXggMzJlOGRiYi4uNjBjOWQ0YSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1xLXRhZy5jCisrKyBiL2Jsb2NrL2Jsay1tcS10YWcuYwpAQCAtNjgsOSArNjgsOSBAQAogfQogCiAvKgotICogV2FrZXVwIGFsbCBwb3RlbnRpYWxseSBzbGVlcGluZyBvbiBub3JtYWwgKG5vbi1yZXNlcnZlZCkgdGFncworICogV2FrZXVwIGFsbCBwb3RlbnRpYWxseSBzbGVlcGluZyBvbiB0YWdzCiAgKi8KLXN0YXRpYyB2b2lkIGJsa19tcV90YWdfd2FrZXVwX2FsbChzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MpCit2b2lkIGJsa19tcV90YWdfd2FrZXVwX2FsbChzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIGJvb2wgaW5jbHVkZV9yZXNlcnZlKQogewogCXN0cnVjdCBibGtfbXFfYml0bWFwX3RhZ3MgKmJ0OwogCWludCBpLCB3YWtlX2luZGV4OwpAQCAtODUsNiArODUsMTIgQEAKIAogCQl3YWtlX2luZGV4ID0gYnRfaW5kZXhfaW5jKHdha2VfaW5kZXgpOwogCX0KKworCWlmIChpbmNsdWRlX3Jlc2VydmUpIHsKKwkJYnQgPSAmdGFncy0+YnJlc2VydmVkX3RhZ3M7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZidC0+YnNbMF0ud2FpdCkpCisJCQl3YWtlX3VwKCZidC0+YnNbMF0ud2FpdCk7CisJfQogfQogCiAvKgpAQCAtMTAwLDcgKzEwNiw3IEBACiAKIAlhdG9taWNfZGVjKCZ0YWdzLT5hY3RpdmVfcXVldWVzKTsKIAotCWJsa19tcV90YWdfd2FrZXVwX2FsbCh0YWdzKTsKKwlibGtfbXFfdGFnX3dha2V1cF9hbGwodGFncywgZmFsc2UpOwogfQogCiAvKgpAQCAtNTg0LDcgKzU5MCw3IEBACiAJICogc3RhdGljIGFuZCBzaG91bGQgbmV2ZXIgbmVlZCByZXNpemluZy4KIAkgKi8KIAlidF91cGRhdGVfY291bnQoJnRhZ3MtPmJpdG1hcF90YWdzLCB0ZGVwdGgpOwotCWJsa19tcV90YWdfd2FrZXVwX2FsbCh0YWdzKTsKKwlibGtfbXFfdGFnX3dha2V1cF9hbGwodGFncywgZmFsc2UpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEtdGFnLmggYi9ibG9jay9ibGstbXEtdGFnLmgKaW5kZXggNjIwNmVkMS4uYTZmYTBmYyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1xLXRhZy5oCisrKyBiL2Jsb2NrL2Jsay1tcS10YWcuaApAQCAtNTQsNiArNTQsNyBAQAogZXh0ZXJuIHNzaXplX3QgYmxrX21xX3RhZ19zeXNmc19zaG93KHN0cnVjdCBibGtfbXFfdGFncyAqdGFncywgY2hhciAqcGFnZSk7CiBleHRlcm4gdm9pZCBibGtfbXFfdGFnX2luaXRfbGFzdF90YWcoc3RydWN0IGJsa19tcV90YWdzICp0YWdzLCB1bnNpZ25lZCBpbnQgKmxhc3RfdGFnKTsKIGV4dGVybiBpbnQgYmxrX21xX3RhZ191cGRhdGVfZGVwdGgoc3RydWN0IGJsa19tcV90YWdzICp0YWdzLCB1bnNpZ25lZCBpbnQgZGVwdGgpOworZXh0ZXJuIHZvaWQgYmxrX21xX3RhZ193YWtldXBfYWxsKHN0cnVjdCBibGtfbXFfdGFncyAqdGFncywgYm9vbCk7CiAKIGVudW0gewogCUJMS19NUV9UQUdfQ0FDSEVfTUlOCT0gMSwKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS5jIGIvYmxvY2svYmxrLW1xLmMKaW5kZXggZGExYWI1Ni4uOWVlM2I4NyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1xLmMKKysrIGIvYmxvY2svYmxrLW1xLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCXdha2VfdXBfYWxsKCZxLT5tcV9mcmVlemVfd3EpOwogfQogCi1zdGF0aWMgdm9pZCBibGtfbXFfZnJlZXplX3F1ZXVlX3N0YXJ0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQordm9pZCBibGtfbXFfZnJlZXplX3F1ZXVlX3N0YXJ0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCWJvb2wgZnJlZXplOwogCkBAIC0xMjAsNiArMTIwLDcgQEAKIAkJYmxrX21xX3J1bl9xdWV1ZXMocSwgZmFsc2UpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV9mcmVlemVfcXVldWVfc3RhcnQpOwogCiBzdGF0aWMgdm9pZCBibGtfbXFfZnJlZXplX3F1ZXVlX3dhaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CkBAIC0xMzYsNyArMTM3LDcgQEAKIAlibGtfbXFfZnJlZXplX3F1ZXVlX3dhaXQocSk7CiB9CiAKLXN0YXRpYyB2b2lkIGJsa19tcV91bmZyZWV6ZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3ZvaWQgYmxrX21xX3VuZnJlZXplX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCWJvb2wgd2FrZTsKIApAQCAtMTQ5LDYgKzE1MCwyNCBAQAogCQl3YWtlX3VwX2FsbCgmcS0+bXFfZnJlZXplX3dxKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChibGtfbXFfdW5mcmVlemVfcXVldWUpOworCit2b2lkIGJsa19tcV93YWtlX3dhaXRlcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7CisJdW5zaWduZWQgaW50IGk7CisKKwlxdWV1ZV9mb3JfZWFjaF9od19jdHgocSwgaGN0eCwgaSkKKwkJaWYgKGJsa19tcV9od19xdWV1ZV9tYXBwZWQoaGN0eCkpCisJCQlibGtfbXFfdGFnX3dha2V1cF9hbGwoaGN0eC0+dGFncywgdHJ1ZSk7CisKKwkvKgorCSAqIElmIHdlIGFyZSBjYWxsZWQgYmVjYXVzZSB0aGUgcXVldWUgaGFzIG5vdyBiZWVuIG1hcmtlZCBhcworCSAqIGR5aW5nLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHByb2Nlc3NlcyBjdXJyZW50bHkgd2FpdGluZyBvbgorCSAqIHRoZSBxdWV1ZSBhcmUgbm90aWZpZWQgYXMgd2VsbC4KKwkgKi8KKwl3YWtlX3VwX2FsbCgmcS0+bXFfZnJlZXplX3dxKTsKK30KIAogYm9vbCBibGtfbXFfY2FuX3F1ZXVlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KQogewpAQCAtMjU4LDggKzI3NywxMCBAQAogCQljdHggPSBhbGxvY19kYXRhLmN0eDsKIAl9CiAJYmxrX21xX3B1dF9jdHgoY3R4KTsKLQlpZiAoIXJxKQorCWlmICghcnEpIHsKKwkJYmxrX21xX3F1ZXVlX2V4aXQocSk7CiAJCXJldHVybiBFUlJfUFRSKC1FV09VTERCTE9DSyk7CisJfQogCXJldHVybiBycTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX21xX2FsbG9jX3JlcXVlc3QpOwpAQCAtMzgzLDYgKzQwNCwxMiBAQAogfQogRVhQT1JUX1NZTUJPTChibGtfbXFfY29tcGxldGVfcmVxdWVzdCk7CiAKK2ludCBibGtfbXFfcmVxdWVzdF9zdGFydGVkKHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoUkVRX0FUT01fU1RBUlRFRCwgJnJxLT5hdG9taWNfZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX3JlcXVlc3Rfc3RhcnRlZCk7CisKIHZvaWQgYmxrX21xX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcnEtPnE7CkBAIC01MDAsMTIgKzUyNywzOCBAQAogfQogRVhQT1JUX1NZTUJPTChibGtfbXFfYWRkX3RvX3JlcXVldWVfbGlzdCk7CiAKK3ZvaWQgYmxrX21xX2NhbmNlbF9yZXF1ZXVlX3dvcmsoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJY2FuY2VsX3dvcmtfc3luYygmcS0+cmVxdWV1ZV93b3JrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV9jYW5jZWxfcmVxdWV1ZV93b3JrKTsKKwogdm9pZCBibGtfbXFfa2lja19yZXF1ZXVlX2xpc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJa2Jsb2NrZF9zY2hlZHVsZV93b3JrKCZxLT5yZXF1ZXVlX3dvcmspOwogfQogRVhQT1JUX1NZTUJPTChibGtfbXFfa2lja19yZXF1ZXVlX2xpc3QpOwogCit2b2lkIGJsa19tcV9hYm9ydF9yZXF1ZXVlX2xpc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlMSVNUX0hFQUQocnFfbGlzdCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+cmVxdWV1ZV9sb2NrLCBmbGFncyk7CisJbGlzdF9zcGxpY2VfaW5pdCgmcS0+cmVxdWV1ZV9saXN0LCAmcnFfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+cmVxdWV1ZV9sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJxX2xpc3QpKSB7CisJCXN0cnVjdCByZXF1ZXN0ICpycTsKKworCQlycSA9IGxpc3RfZmlyc3RfZW50cnkoJnJxX2xpc3QsIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZycS0+cXVldWVsaXN0KTsKKwkJcnEtPmVycm9ycyA9IC1FSU87CisJCWJsa19tcV9lbmRfcmVxdWVzdChycSwgcnEtPmVycm9ycyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChibGtfbXFfYWJvcnRfcmVxdWV1ZV9saXN0KTsKKwogc3RhdGljIGlubGluZSBib29sIGlzX2ZsdXNoX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLAogCQlzdHJ1Y3QgYmxrX2ZsdXNoX3F1ZXVlICpmcSwgdW5zaWduZWQgaW50IHRhZykKIHsKQEAgLTU2NiwxMyArNjE5LDI0IEBACiAJCWJyZWFrOwogCX0KIH0KLQkJCisKIHN0YXRpYyB2b2lkIGJsa19tcV9jaGVja19leHBpcmVkKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAogCQlzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKnByaXYsIGJvb2wgcmVzZXJ2ZWQpCiB7CiAJc3RydWN0IGJsa19tcV90aW1lb3V0X2RhdGEgKmRhdGEgPSBwcml2OwogCi0JaWYgKCF0ZXN0X2JpdChSRVFfQVRPTV9TVEFSVEVELCAmcnEtPmF0b21pY19mbGFncykpCisJaWYgKCF0ZXN0X2JpdChSRVFfQVRPTV9TVEFSVEVELCAmcnEtPmF0b21pY19mbGFncykpIHsKKwkJLyoKKwkJICogSWYgYSByZXF1ZXN0IHdhc24ndCBzdGFydGVkIGJlZm9yZSB0aGUgcXVldWUgd2FzCisJCSAqIG1hcmtlZCBkeWluZywga2lsbCBpdCBoZXJlIG9yIGl0J2xsIGdvIHVubm90aWNlZC4KKwkJICovCisJCWlmICh1bmxpa2VseShibGtfcXVldWVfZHlpbmcocnEtPnEpKSkgeworCQkJcnEtPmVycm9ycyA9IC1FSU87CisJCQlibGtfbXFfY29tcGxldGVfcmVxdWVzdChycSk7CisJCX0KKwkJcmV0dXJuOworCX0KKwlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9OT19USU1FT1VUKQogCQlyZXR1cm47CiAKIAlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBycS0+ZGVhZGxpbmUpKSB7CkBAIC0xNTc3LDEwICsxNjQxLDggQEAKIAlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXF1ZXVlX2Zvcl9lYWNoX2h3X2N0eChxLCBoY3R4LCBpKSB7CisJcXVldWVfZm9yX2VhY2hfaHdfY3R4KHEsIGhjdHgsIGkpCiAJCWZyZWVfY3B1bWFza192YXIoaGN0eC0+Y3B1bWFzayk7Ci0JCWtmcmVlKGhjdHgpOwotCX0KIH0KIAogc3RhdGljIGludCBibGtfbXFfaW5pdF9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLApAQCAtMTYwMSw3ICsxNjYzLDYgQEAKIAloY3R4LT5xdWV1ZSA9IHE7CiAJaGN0eC0+cXVldWVfbnVtID0gaGN0eF9pZHg7CiAJaGN0eC0+ZmxhZ3MgPSBzZXQtPmZsYWdzOwotCWhjdHgtPmNtZF9zaXplID0gc2V0LT5jbWRfc2l6ZTsKIAogCWJsa19tcV9pbml0X2NwdV9ub3RpZmllcigmaGN0eC0+Y3B1X25vdGlmaWVyLAogCQkJCQlibGtfbXFfaGN0eF9ub3RpZnksIGhjdHgpOwpAQCAtMTkzOSwxMSArMjAwMCw5IEBACiAKIAlwZXJjcHVfcmVmX2V4aXQoJnEtPm1xX3VzYWdlX2NvdW50ZXIpOwogCi0JZnJlZV9wZXJjcHUocS0+cXVldWVfY3R4KTsKIAlrZnJlZShxLT5xdWV1ZV9od19jdHgpOwogCWtmcmVlKHEtPm1xX21hcCk7CiAKLQlxLT5xdWV1ZV9jdHggPSBOVUxMOwogCXEtPnF1ZXVlX2h3X2N0eCA9IE5VTEw7CiAJcS0+bXFfbWFwID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmggYi9ibG9jay9ibGstbXEuaAppbmRleCAyMDYyMzBlLi40ZjRmOTQzIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuaAorKysgYi9ibG9jay9ibGstbXEuaApAQCAtMzIsNiArMzIsNyBAQAogdm9pZCBibGtfbXFfY2xvbmVfZmx1c2hfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqZmx1c2hfcnEsCiAJCXN0cnVjdCByZXF1ZXN0ICpvcmlnX3JxKTsKIGludCBibGtfbXFfdXBkYXRlX25yX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgbnIpOwordm9pZCBibGtfbXFfd2FrZV93YWl0ZXJzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIAogLyoKICAqIENQVSBob3RwbHVnIGhlbHBlcnMKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aW1lb3V0LmMgYi9ibG9jay9ibGstdGltZW91dC5jCmluZGV4IDU2YzAyNTguLjI0NmRmYjEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay10aW1lb3V0LmMKKysrIGIvYmxvY2svYmxrLXRpbWVvdXQuYwpAQCAtMTkwLDYgKzE5MCw5IEBACiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSByZXEtPnE7CiAJdW5zaWduZWQgbG9uZyBleHBpcnk7CiAKKwlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfTk9fVElNRU9VVCkKKwkJcmV0dXJuOworCiAJLyogYmxrLW1xIGhhcyBpdHMgb3duIGhhbmRsZXIsIHNvIHdlIGRvbid0IG5lZWQgLT5ycV90aW1lZF9vdXRfZm4gKi8KIAlpZiAoIXEtPm1xX29wcyAmJiAhcS0+cnFfdGltZWRfb3V0X2ZuKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzX2dlbmVyaWMuYyBiL2NyeXB0by9hZXNfZ2VuZXJpYy5jCmluZGV4IDliM2M1NGMuLjNkZDEwMTEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXNfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9hZXNfZ2VuZXJpYy5jCkBAIC0xNDc1LDMgKzE0NzUsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJSaWpuZGFlbCAoQUVTKSBDaXBoZXIgQWxnb3JpdGhtIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJhZXMiKTsKK01PRFVMRV9BTElBU19DUllQVE8oImFlcy1nZW5lcmljIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vYWZfYWxnLmMgYi9jcnlwdG8vYWZfYWxnLmMKaW5kZXggMWZhN2JjMy4uNDY2NWI3OSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FmX2FsZy5jCisrKyBiL2NyeXB0by9hZl9hbGcuYwpAQCAtNDU1LDYgKzQ1NSw5IEBACiB7CiAJc3RydWN0IGFmX2FsZ19jb21wbGV0aW9uICpjb21wbGV0aW9uID0gcmVxLT5kYXRhOwogCisJaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpCisJCXJldHVybjsKKwogCWNvbXBsZXRpb24tPmVyciA9IGVycjsKIAljb21wbGV0ZSgmY29tcGxldGlvbi0+Y29tcGxldGlvbik7CiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vYW5zaV9jcHJuZy5jIGIvY3J5cHRvL2Fuc2lfY3BybmcuYwppbmRleCBiNDQ4NWExLi42ZjViZWJjIDEwMDY0NAotLS0gYS9jcnlwdG8vYW5zaV9jcHJuZy5jCisrKyBiL2NyeXB0by9hbnNpX2Nwcm5nLmMKQEAgLTQ3NywzICs0NzcsNCBAQAogbW9kdWxlX2luaXQocHJuZ19tb2RfaW5pdCk7CiBtb2R1bGVfZXhpdChwcm5nX21vZF9maW5pKTsKIE1PRFVMRV9BTElBU19DUllQVE8oInN0ZHJuZyIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygiYW5zaV9jcHJuZyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jsb3dmaXNoX2dlbmVyaWMuYyBiL2NyeXB0by9ibG93ZmlzaF9nZW5lcmljLmMKaW5kZXggN2JkNzFmMC4uODdiMzkyYSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Jsb3dmaXNoX2dlbmVyaWMuYworKysgYi9jcnlwdG8vYmxvd2Zpc2hfZ2VuZXJpYy5jCkBAIC0xMzksMyArMTM5LDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQmxvd2Zpc2ggQ2lwaGVyIEFsZ29yaXRobSIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygiYmxvd2Zpc2giKTsKK01PRFVMRV9BTElBU19DUllQVE8oImJsb3dmaXNoLWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMgYi9jcnlwdG8vY2FtZWxsaWFfZ2VuZXJpYy5jCmluZGV4IDFiNzRjNWEuLmEwMjI4NmIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMKKysrIGIvY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYwpAQCAtMTA5OSwzICsxMDk5LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQ2FtZWxsaWEgQ2lwaGVyIEFsZ29yaXRobSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygiY2FtZWxsaWEiKTsKK01PRFVMRV9BTElBU19DUllQVE8oImNhbWVsbGlhLWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9jYXN0NV9nZW5lcmljLmMgYi9jcnlwdG8vY2FzdDVfZ2VuZXJpYy5jCmluZGV4IDg0Yzg2ZGIuLmRmNWM3MjYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jYXN0NV9nZW5lcmljLmMKKysrIGIvY3J5cHRvL2Nhc3Q1X2dlbmVyaWMuYwpAQCAtNTUwLDMgKzU1MCw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNhc3Q1IENpcGhlciBBbGdvcml0aG0iKTsKIE1PRFVMRV9BTElBU19DUllQVE8oImNhc3Q1Iik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJjYXN0NS1nZW5lcmljIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vY2FzdDZfZ2VuZXJpYy5jIGIvY3J5cHRvL2Nhc3Q2X2dlbmVyaWMuYwppbmRleCBmNDA4ZjBiLi4wNThjOGQ3IDEwMDY0NAotLS0gYS9jcnlwdG8vY2FzdDZfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9jYXN0Nl9nZW5lcmljLmMKQEAgLTI5MiwzICsyOTIsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJDYXN0NiBDaXBoZXIgQWxnb3JpdGhtIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJjYXN0NiIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygiY2FzdDYtZ2VuZXJpYyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyYzMyY19nZW5lcmljLmMgYi9jcnlwdG8vY3JjMzJjX2dlbmVyaWMuYwppbmRleCAyYTA2MjAyLi4wNmYxYjYwIDEwMDY0NAotLS0gYS9jcnlwdG8vY3JjMzJjX2dlbmVyaWMuYworKysgYi9jcnlwdG8vY3JjMzJjX2dlbmVyaWMuYwpAQCAtMTcxLDQgKzE3MSw1IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkNSQzMyYyAoQ2FzdGFnbm9saSkgY2FsY3VsYXRpb25zIHdyYXBwZXIgZm9yIGxpYi9jcmMzMmMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19DUllQVE8oImNyYzMyYyIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygiY3JjMzJjLWdlbmVyaWMiKTsKIE1PRFVMRV9TT0ZUREVQKCJwcmU6IGNyYzMyYyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyY3QxMGRpZl9nZW5lcmljLmMgYi9jcnlwdG8vY3JjdDEwZGlmX2dlbmVyaWMuYwppbmRleCAwOGJiNGY1Li5jMTIyOTYxNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyY3QxMGRpZl9nZW5lcmljLmMKKysrIGIvY3J5cHRvL2NyY3QxMGRpZl9nZW5lcmljLmMKQEAgLTEyNSwzICsxMjUsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJUMTAgRElGIENSQyBjYWxjdWxhdGlvbi4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19DUllQVE8oImNyY3QxMGRpZiIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygiY3JjdDEwZGlmLWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9kZXNfZ2VuZXJpYy5jIGIvY3J5cHRvL2Rlc19nZW5lcmljLmMKaW5kZXggNDI5MTI5NC4uYTcxNzIwNSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Rlc19nZW5lcmljLmMKKysrIGIvY3J5cHRvL2Rlc19nZW5lcmljLmMKQEAgLTk4Myw4ICs5ODMsNiBAQAogCS5jaWFfZGVjcnlwdAkJPQlkZXMzX2VkZV9kZWNyeXB0IH0gfQogfSB9OwogCi1NT0RVTEVfQUxJQVNfQ1JZUFRPKCJkZXMzX2VkZSIpOwotCiBzdGF0aWMgaW50IF9faW5pdCBkZXNfZ2VuZXJpY19tb2RfaW5pdCh2b2lkKQogewogCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxncyhkZXNfYWxncywgQVJSQVlfU0laRShkZXNfYWxncykpOwpAQCAtMTAwMSw0ICs5OTksNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJERVMgJiBUcmlwbGUgREVTIEVERSBDaXBoZXIgQWxnb3JpdGhtcyIpOwogTU9EVUxFX0FVVEhPUigiRGFnIEFybmUgT3N2aWsgPGRhQG9zdmlrLm5vPiIpOwotTU9EVUxFX0FMSUFTKCJkZXMiKTsKK01PRFVMRV9BTElBU19DUllQVE8oImRlcyIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygiZGVzLWdlbmVyaWMiKTsKK01PRFVMRV9BTElBU19DUllQVE8oImRlczNfZWRlIik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJkZXMzX2VkZS1nZW5lcmljIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vZ2hhc2gtZ2VuZXJpYy5jIGIvY3J5cHRvL2doYXNoLWdlbmVyaWMuYwppbmRleCA0ZTk3ZmFlLi5iYWM3MDk5IDEwMDY0NAotLS0gYS9jcnlwdG8vZ2hhc2gtZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9naGFzaC1nZW5lcmljLmMKQEAgLTE3MywzICsxNzMsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJHSEFTSCBNZXNzYWdlIERpZ2VzdCBBbGdvcml0aG0iKTsKIE1PRFVMRV9BTElBU19DUllQVE8oImdoYXNoIik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJnaGFzaC1nZW5lcmljIik7CmRpZmYgLS1naXQgYS9jcnlwdG8va3JuZy5jIGIvY3J5cHRvL2tybmcuYwppbmRleCA2N2M4OGIzLi4wMjI0ODQxIDEwMDY0NAotLS0gYS9jcnlwdG8va3JuZy5jCisrKyBiL2NyeXB0by9rcm5nLmMKQEAgLTYzLDMgKzYzLDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiS2VybmVsIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJzdGRybmciKTsKK01PRFVMRV9BTElBU19DUllQVE8oImtybmciKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zYWxzYTIwX2dlbmVyaWMuYyBiL2NyeXB0by9zYWxzYTIwX2dlbmVyaWMuYwppbmRleCAzZDBmOWRmLi5mNTUwYjVkIDEwMDY0NAotLS0gYS9jcnlwdG8vc2Fsc2EyMF9nZW5lcmljLmMKKysrIGIvY3J5cHRvL3NhbHNhMjBfZ2VuZXJpYy5jCkBAIC0yNDksMyArMjQ5LDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTiAoIlNhbHNhMjAgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0iKTsKIE1PRFVMRV9BTElBU19DUllQVE8oInNhbHNhMjAiKTsKK01PRFVMRV9BTElBU19DUllQVE8oInNhbHNhMjAtZ2VuZXJpYyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NlcnBlbnRfZ2VuZXJpYy5jIGIvY3J5cHRvL3NlcnBlbnRfZ2VuZXJpYy5jCmluZGV4IGE1M2I1ZTIuLjk0OTcwYTcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zZXJwZW50X2dlbmVyaWMuYworKysgYi9jcnlwdG8vc2VycGVudF9nZW5lcmljLmMKQEAgLTY2NywzICs2NjcsNCBAQAogTU9EVUxFX0FVVEhPUigiRGFnIEFybmUgT3N2aWsgPG9zdmlrQGlpLnVpYi5ubz4iKTsKIE1PRFVMRV9BTElBU19DUllQVE8oInRuZXByZXMiKTsKIE1PRFVMRV9BTElBU19DUllQVE8oInNlcnBlbnQiKTsKK01PRFVMRV9BTElBU19DUllQVE8oInNlcnBlbnQtZ2VuZXJpYyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYTFfZ2VuZXJpYy5jIGIvY3J5cHRvL3NoYTFfZ2VuZXJpYy5jCmluZGV4IDAzOWU1OGMuLmEzZTUwYzMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGExX2dlbmVyaWMuYworKysgYi9jcnlwdG8vc2hhMV9nZW5lcmljLmMKQEAgLTE1NCwzICsxNTQsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTSEExIFNlY3VyZSBIYXNoIEFsZ29yaXRobSIpOwogCiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJzaGExIik7CitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJzaGExLWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jIGIvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKaW5kZXggNWViMjFiMS4uYjAwMWZmNSAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKKysrIGIvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKQEAgLTM4NSw0ICszODUsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTSEEtMjI0IGFuZCBTSEEtMjU2IFNlY3VyZSBIYXNoIEFsZ29yaXRobSIpOwogCiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJzaGEyMjQiKTsKK01PRFVMRV9BTElBU19DUllQVE8oInNoYTIyNC1nZW5lcmljIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJzaGEyNTYiKTsKK01PRFVMRV9BTElBU19DUllQVE8oInNoYTI1Ni1nZW5lcmljIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhNTEyX2dlbmVyaWMuYyBiL2NyeXB0by9zaGE1MTJfZ2VuZXJpYy5jCmluZGV4IDhkMGIxOWUuLjFjM2MzNzYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGE1MTJfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9zaGE1MTJfZ2VuZXJpYy5jCkBAIC0yODksNCArMjg5LDYgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU0hBLTUxMiBhbmQgU0hBLTM4NCBTZWN1cmUgSGFzaCBBbGdvcml0aG1zIik7CiAKIE1PRFVMRV9BTElBU19DUllQVE8oInNoYTM4NCIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygic2hhMzg0LWdlbmVyaWMiKTsKIE1PRFVMRV9BTElBU19DUllQVE8oInNoYTUxMiIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygic2hhNTEyLWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by90ZWEuYyBiL2NyeXB0by90ZWEuYwppbmRleCA0OTViZTJkLi5iNzBiNDQxIDEwMDY0NAotLS0gYS9jcnlwdG8vdGVhLmMKKysrIGIvY3J5cHRvL3RlYS5jCkBAIC0yNzAsNiArMjcwLDcgQEAKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGdzKHRlYV9hbGdzLCBBUlJBWV9TSVpFKHRlYV9hbGdzKSk7CiB9CiAKK01PRFVMRV9BTElBU19DUllQVE8oInRlYSIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygieHRlYSIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygieGV0YSIpOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vdGdyMTkyLmMgYi9jcnlwdG8vdGdyMTkyLmMKaW5kZXggNmU1NjUxYy4uMzIxYmM2ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL3RncjE5Mi5jCisrKyBiL2NyeXB0by90Z3IxOTIuYwpAQCAtNjc2LDYgKzY3Niw3IEBACiAJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2hlcyh0Z3JfYWxncywgQVJSQVlfU0laRSh0Z3JfYWxncykpOwogfQogCitNT0RVTEVfQUxJQVNfQ1JZUFRPKCJ0Z3IxOTIiKTsKIE1PRFVMRV9BTElBU19DUllQVE8oInRncjE2MCIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygidGdyMTI4Iik7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by90d29maXNoX2dlbmVyaWMuYyBiL2NyeXB0by90d29maXNoX2dlbmVyaWMuYwppbmRleCA1MjNhZDhjLi5lYmY3YTNlIDEwMDY0NAotLS0gYS9jcnlwdG8vdHdvZmlzaF9nZW5lcmljLmMKKysrIGIvY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jCkBAIC0yMTIsMyArMjEyLDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTiAoIlR3b2Zpc2ggQ2lwaGVyIEFsZ29yaXRobSIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygidHdvZmlzaCIpOworTU9EVUxFX0FMSUFTX0NSWVBUTygidHdvZmlzaC1nZW5lcmljIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vd3A1MTIuYyBiL2NyeXB0by93cDUxMi5jCmluZGV4IDBkZTQyZWIuLjdlZTVhMDQgMTAwNjQ0Ci0tLSBhL2NyeXB0by93cDUxMi5jCisrKyBiL2NyeXB0by93cDUxMi5jCkBAIC0xMTY3LDYgKzExNjcsNyBAQAogCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoZXMod3BfYWxncywgQVJSQVlfU0laRSh3cF9hbGdzKSk7CiB9CiAKK01PRFVMRV9BTElBU19DUllQVE8oIndwNTEyIik7CiBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJ3cDM4NCIpOwogTU9EVUxFX0FMSUFTX0NSWVBUTygid3AyNTYiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IDY5NGQ1YTcuLmM3MGQ2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTEzNCw4ICsxMzQsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvcGxhdGZvcm0vS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3NvYy9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvY2xrL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9od3NwaW5sb2NrL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCA2N2QyMzM0Li41MjdhNmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTUwLDcgKzUwLDEwIEBACiBvYmoteQkJCQkrPSB0dHkvCiBvYmoteQkJCQkrPSBjaGFyLwogCi0jIGdwdS8gY29tZXMgYWZ0ZXIgY2hhciBmb3IgQUdQIHZzIERSTSBzdGFydHVwCisjIGlvbW11LyBjb21lcyBiZWZvcmUgZ3B1IGFzIGdwdSBhcmUgdXNpbmcgaW9tbXUgY29udHJvbGxlcnMKK29iai0kKENPTkZJR19JT01NVV9TVVBQT1JUKQkrPSBpb21tdS8KKworIyBncHUvIGNvbWVzIGFmdGVyIGNoYXIgZm9yIEFHUCB2cyBEUk0gc3RhcnR1cCBhbmQgYWZ0ZXIgaW9tbXUKIG9iai15CQkJCSs9IGdwdS8KIAogb2JqLSQoQ09ORklHX0NPTk5FQ1RPUikJCSs9IGNvbm5lY3Rvci8KQEAgLTE0MSw3ICsxNDQsNiBAQAogCiBvYmotJChDT05GSUdfTUFJTEJPWCkJCSs9IG1haWxib3gvCiBvYmotJChDT05GSUdfSFdTUElOTE9DSykJKz0gaHdzcGlubG9jay8KLW9iai0kKENPTkZJR19JT01NVV9TVVBQT1JUKQkrPSBpb21tdS8KIG9iai0kKENPTkZJR19SRU1PVEVQUk9DKQkrPSByZW1vdGVwcm9jLwogb2JqLSQoQ09ORklHX1JQTVNHKQkJKz0gcnBtc2cvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX3Byb2Nlc3Nvci5jIGIvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKaW5kZXggMWZkZjVlMC4uMTAyMGIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlpbnQgcmV0OwogCi0JaWYgKHByLT5hcGljX2lkID09IC0xKQorCWlmIChwci0+cGh5c19pZCA9PSAtMSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIocHItPmhhbmRsZSwgIl9TVEEiLCBOVUxMLCAmc3RhKTsKQEAgLTE4MCwxMyArMTgwLDEzIEBACiAJY3B1X21hcHNfdXBkYXRlX2JlZ2luKCk7CiAJY3B1X2hvdHBsdWdfYmVnaW4oKTsKIAotCXJldCA9IGFjcGlfbWFwX2xzYXBpYyhwci0+aGFuZGxlLCBwci0+YXBpY19pZCwgJnByLT5pZCk7CisJcmV0ID0gYWNwaV9tYXBfY3B1KHByLT5oYW5kbGUsIHByLT5waHlzX2lkLCAmcHItPmlkKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAogCXJldCA9IGFyY2hfcmVnaXN0ZXJfY3B1KHByLT5pZCk7CiAJaWYgKHJldCkgewotCQlhY3BpX3VubWFwX2xzYXBpYyhwci0+aWQpOworCQlhY3BpX3VubWFwX2NwdShwci0+aWQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXVuaW9uIGFjcGlfb2JqZWN0IG9iamVjdCA9IHsgMCB9OwogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IHNpemVvZih1bmlvbiBhY3BpX29iamVjdCksICZvYmplY3QgfTsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCWludCBhcGljX2lkLCBjcHVfaW5kZXgsIGRldmljZV9kZWNsYXJhdGlvbiA9IDA7CisJaW50IHBoeXNfaWQsIGNwdV9pbmRleCwgZGV2aWNlX2RlY2xhcmF0aW9uID0gMDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdGF0aWMgaW50IGNwdTBfaW5pdGlhbGl6ZWQ7CiAJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOwpAQCAtMjYyLDE1ICsyNjIsMTggQEAKIAkJcHItPmFjcGlfaWQgPSB2YWx1ZTsKIAl9CiAKLQlhcGljX2lkID0gYWNwaV9nZXRfYXBpY2lkKHByLT5oYW5kbGUsIGRldmljZV9kZWNsYXJhdGlvbiwgcHItPmFjcGlfaWQpOwotCWlmIChhcGljX2lkIDwgMCkKLQkJYWNwaV9oYW5kbGVfZGVidWcocHItPmhhbmRsZSwgImZhaWxlZCB0byBnZXQgQ1BVIEFQSUMgSUQuXG4iKTsKLQlwci0+YXBpY19pZCA9IGFwaWNfaWQ7CisJcGh5c19pZCA9IGFjcGlfZ2V0X3BoeXNfaWQocHItPmhhbmRsZSwgZGV2aWNlX2RlY2xhcmF0aW9uLCBwci0+YWNwaV9pZCk7CisJaWYgKHBoeXNfaWQgPCAwKQorCQlhY3BpX2hhbmRsZV9kZWJ1Zyhwci0+aGFuZGxlLCAiZmFpbGVkIHRvIGdldCBDUFUgcGh5c2ljYWwgSUQuXG4iKTsKKwlwci0+cGh5c19pZCA9IHBoeXNfaWQ7CiAKLQljcHVfaW5kZXggPSBhY3BpX21hcF9jcHVpZChwci0+YXBpY19pZCwgcHItPmFjcGlfaWQpOworCWNwdV9pbmRleCA9IGFjcGlfbWFwX2NwdWlkKHByLT5waHlzX2lkLCBwci0+YWNwaV9pZCk7CiAJaWYgKCFjcHUwX2luaXRpYWxpemVkICYmICFhY3BpX2hhc19jcHVfaW5fbWFkdCgpKSB7CiAJCWNwdTBfaW5pdGlhbGl6ZWQgPSAxOwotCQkvKiBIYW5kbGUgVVAgc3lzdGVtIHJ1bm5pbmcgU01QIGtlcm5lbCwgd2l0aCBubyBMQVBJQyBpbiBNQURUICovCisJCS8qCisJCSAqIEhhbmRsZSBVUCBzeXN0ZW0gcnVubmluZyBTTVAga2VybmVsLCB3aXRoIG5vIENQVQorCQkgKiBlbnRyeSBpbiBNQURUCisJCSAqLwogCQlpZiAoKGNwdV9pbmRleCA9PSAtMSkgJiYgKG51bV9vbmxpbmVfY3B1cygpID09IDEpKQogCQkJY3B1X2luZGV4ID0gMDsKIAl9CkBAIC00NTgsNyArNDYxLDcgQEAKIAogCS8qIFJlbW92ZSB0aGUgQ1BVLiAqLwogCWFyY2hfdW5yZWdpc3Rlcl9jcHUocHItPmlkKTsKLQlhY3BpX3VubWFwX2xzYXBpYyhwci0+aWQpOworCWFjcGlfdW5tYXBfY3B1KHByLT5pZCk7CiAKIAljcHVfaG90cGx1Z19kb25lKCk7CiAJY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kZXZpY2VfcG0uYyBiL2RyaXZlcnMvYWNwaS9kZXZpY2VfcG0uYwppbmRleCBjMmRhYTg1Li5jMGQ0NGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMKKysrIGIvZHJpdmVycy9hY3BpL2RldmljZV9wbS5jCkBAIC0yNTcsNyArMjU3LDcgQEAKIAogCWRldmljZS0+cG93ZXIuc3RhdGUgPSBBQ1BJX1NUQVRFX1VOS05PV047CiAJaWYgKCFhY3BpX2RldmljZV9pc19wcmVzZW50KGRldmljZSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOWElPOwogCiAJcmVzdWx0ID0gYWNwaV9kZXZpY2VfZ2V0X3Bvd2VyKGRldmljZSwgJnN0YXRlKTsKIAlpZiAocmVzdWx0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2ludDM0MHhfdGhlcm1hbC5jIGIvZHJpdmVycy9hY3BpL2ludDM0MHhfdGhlcm1hbC5jCmluZGV4IGEyN2QzMWQuLjlkY2Y4MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9pbnQzNDB4X3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvaW50MzQweF90aGVybWFsLmMKQEAgLTE0LDEwICsxNCwxMCBAQAogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotI2RlZmluZSBET19FTlVNRVJBVElPTiAweDAxCisjZGVmaW5lIElOVDM0MDFfREVWSUNFIDBYMDEKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgaW50MzQweF90aGVybWFsX2RldmljZV9pZHNbXSA9IHsKLQl7IklOVDM0MDAiLCBET19FTlVNRVJBVElPTiB9LAotCXsiSU5UMzQwMSJ9LAorCXsiSU5UMzQwMCJ9LAorCXsiSU5UMzQwMSIsIElOVDM0MDFfREVWSUNFfSwKIAl7IklOVDM0MDIifSwKIAl7IklOVDM0MDMifSwKIAl7IklOVDM0MDQifSwKQEAgLTM0LDcgKzM0LDEwIEBACiAJCQkJCWNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCAqaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfSU5UMzQwWF9USEVSTUFMKSB8fCBkZWZpbmVkKENPTkZJR19JTlQzNDBYX1RIRVJNQUxfTU9EVUxFKQotCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gRE9fRU5VTUVSQVRJT04pCisJYWNwaV9jcmVhdGVfcGxhdGZvcm1fZGV2aWNlKGFkZXYpOworI2VsaWYgZGVmaW5lZChJTlRFTF9TT0NfRFRTX1RIRVJNQUwpIHx8IGRlZmluZWQoSU5URUxfU09DX0RUU19USEVSTUFMX01PRFVMRSkKKwkvKiBJbnRlbCBTb0MgRFRTIHRoZXJtYWwgZHJpdmVyIG5lZWRzIElOVDM0MDEgdG8gc2V0IElSUSBkZXNjcmlwdG9yICovCisJaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSBJTlQzNDAxX0RFVklDRSkKIAkJYWNwaV9jcmVhdGVfcGxhdGZvcm1fZGV2aWNlKGFkZXYpOwogI2VuZGlmCiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX2lycS5jIGIvZHJpdmVycy9hY3BpL3BjaV9pcnEuYwppbmRleCA1Mjc3YTBlLi5iMWRlZjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKQEAgLTUxMiw3ICs1MTIsNiBAQAogCWRldl9kYmcoJmRldi0+ZGV2LCAiUENJIElOVCAlYyBkaXNhYmxlZFxuIiwgcGluX25hbWUocGluKSk7CiAJaWYgKGdzaSA+PSAwKSB7CiAJCWFjcGlfdW5yZWdpc3Rlcl9nc2koZ3NpKTsKLQkJZGV2LT5pcnEgPSAwOwogCQlkZXYtPmlycV9tYW5hZ2VkID0gMDsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IDM0Mjk0MmYuLjAyZTQ4MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCkBAIC02OSw3ICs2OSw3IEBACiAJdW5zaWduZWQgbG9uZyBtYWR0X2VuZCwgZW50cnk7CiAJc3RhdGljIHN0cnVjdCBhY3BpX3RhYmxlX21hZHQgKm1hZHQ7CiAJc3RhdGljIGludCByZWFkX21hZHQ7Ci0JaW50IGFwaWNfaWQgPSAtMTsKKwlpbnQgcGh5c19pZCA9IC0xOwkvKiBDUFUgaGFyZHdhcmUgSUQgKi8KIAogCWlmICghcmVhZF9tYWR0KSB7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfTUFEVCwgMCwKQEAgLTc5LDcgKzc5LDcgQEAKIAl9CiAKIAlpZiAoIW1hZHQpCi0JCXJldHVybiBhcGljX2lkOworCQlyZXR1cm4gcGh5c19pZDsKIAogCWVudHJ5ID0gKHVuc2lnbmVkIGxvbmcpbWFkdDsKIAltYWR0X2VuZCA9IGVudHJ5ICsgbWFkdC0+aGVhZGVyLmxlbmd0aDsKQEAgLTkxLDE4ICs5MSwxOCBAQAogCQlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRlciA9CiAJCQkoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICopZW50cnk7CiAJCWlmIChoZWFkZXItPnR5cGUgPT0gQUNQSV9NQURUX1RZUEVfTE9DQUxfQVBJQykgewotCQkJaWYgKCFtYXBfbGFwaWNfaWQoaGVhZGVyLCBhY3BpX2lkLCAmYXBpY19pZCkpCisJCQlpZiAoIW1hcF9sYXBpY19pZChoZWFkZXIsIGFjcGlfaWQsICZwaHlzX2lkKSkKIAkJCQlicmVhazsKIAkJfSBlbHNlIGlmIChoZWFkZXItPnR5cGUgPT0gQUNQSV9NQURUX1RZUEVfTE9DQUxfWDJBUElDKSB7Ci0JCQlpZiAoIW1hcF94MmFwaWNfaWQoaGVhZGVyLCB0eXBlLCBhY3BpX2lkLCAmYXBpY19pZCkpCisJCQlpZiAoIW1hcF94MmFwaWNfaWQoaGVhZGVyLCB0eXBlLCBhY3BpX2lkLCAmcGh5c19pZCkpCiAJCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoaGVhZGVyLT50eXBlID09IEFDUElfTUFEVF9UWVBFX0xPQ0FMX1NBUElDKSB7Ci0JCQlpZiAoIW1hcF9sc2FwaWNfaWQoaGVhZGVyLCB0eXBlLCBhY3BpX2lkLCAmYXBpY19pZCkpCisJCQlpZiAoIW1hcF9sc2FwaWNfaWQoaGVhZGVyLCB0eXBlLCBhY3BpX2lkLCAmcGh5c19pZCkpCiAJCQkJYnJlYWs7CiAJCX0KIAkJZW50cnkgKz0gaGVhZGVyLT5sZW5ndGg7CiAJfQotCXJldHVybiBhcGljX2lkOworCXJldHVybiBwaHlzX2lkOwogfQogCiBzdGF0aWMgaW50IG1hcF9tYXRfZW50cnkoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSwgdTMyIGFjcGlfaWQpCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwogCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CiAJc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICpoZWFkZXI7Ci0JaW50IGFwaWNfaWQgPSAtMTsKKwlpbnQgcGh5c19pZCA9IC0xOwogCiAJaWYgKEFDUElfRkFJTFVSRShhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfTUFUIiwgTlVMTCwgJmJ1ZmZlcikpKQogCQlnb3RvIGV4aXQ7CkBAIC0xMjYsMzggKzEyNiwzOCBAQAogCiAJaGVhZGVyID0gKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqKW9iai0+YnVmZmVyLnBvaW50ZXI7CiAJaWYgKGhlYWRlci0+dHlwZSA9PSBBQ1BJX01BRFRfVFlQRV9MT0NBTF9BUElDKQotCQltYXBfbGFwaWNfaWQoaGVhZGVyLCBhY3BpX2lkLCAmYXBpY19pZCk7CisJCW1hcF9sYXBpY19pZChoZWFkZXIsIGFjcGlfaWQsICZwaHlzX2lkKTsKIAllbHNlIGlmIChoZWFkZXItPnR5cGUgPT0gQUNQSV9NQURUX1RZUEVfTE9DQUxfU0FQSUMpCi0JCW1hcF9sc2FwaWNfaWQoaGVhZGVyLCB0eXBlLCBhY3BpX2lkLCAmYXBpY19pZCk7CisJCW1hcF9sc2FwaWNfaWQoaGVhZGVyLCB0eXBlLCBhY3BpX2lkLCAmcGh5c19pZCk7CiAJZWxzZSBpZiAoaGVhZGVyLT50eXBlID09IEFDUElfTUFEVF9UWVBFX0xPQ0FMX1gyQVBJQykKLQkJbWFwX3gyYXBpY19pZChoZWFkZXIsIHR5cGUsIGFjcGlfaWQsICZhcGljX2lkKTsKKwkJbWFwX3gyYXBpY19pZChoZWFkZXIsIHR5cGUsIGFjcGlfaWQsICZwaHlzX2lkKTsKIAogZXhpdDoKIAlrZnJlZShidWZmZXIucG9pbnRlcik7Ci0JcmV0dXJuIGFwaWNfaWQ7CisJcmV0dXJuIHBoeXNfaWQ7CiB9CiAKLWludCBhY3BpX2dldF9hcGljaWQoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSwgdTMyIGFjcGlfaWQpCitpbnQgYWNwaV9nZXRfcGh5c19pZChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlLCB1MzIgYWNwaV9pZCkKIHsKLQlpbnQgYXBpY19pZDsKKwlpbnQgcGh5c19pZDsKIAotCWFwaWNfaWQgPSBtYXBfbWF0X2VudHJ5KGhhbmRsZSwgdHlwZSwgYWNwaV9pZCk7Ci0JaWYgKGFwaWNfaWQgPT0gLTEpCi0JCWFwaWNfaWQgPSBtYXBfbWFkdF9lbnRyeSh0eXBlLCBhY3BpX2lkKTsKKwlwaHlzX2lkID0gbWFwX21hdF9lbnRyeShoYW5kbGUsIHR5cGUsIGFjcGlfaWQpOworCWlmIChwaHlzX2lkID09IC0xKQorCQlwaHlzX2lkID0gbWFwX21hZHRfZW50cnkodHlwZSwgYWNwaV9pZCk7CiAKLQlyZXR1cm4gYXBpY19pZDsKKwlyZXR1cm4gcGh5c19pZDsKIH0KIAotaW50IGFjcGlfbWFwX2NwdWlkKGludCBhcGljX2lkLCB1MzIgYWNwaV9pZCkKK2ludCBhY3BpX21hcF9jcHVpZChpbnQgcGh5c19pZCwgdTMyIGFjcGlfaWQpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAogCWludCBpOwogI2VuZGlmCiAKLQlpZiAoYXBpY19pZCA9PSAtMSkgeworCWlmIChwaHlzX2lkID09IC0xKSB7CiAJCS8qCiAJCSAqIE9uIFVQIHByb2Nlc3NvciwgdGhlcmUgaXMgbm8gX01BVCBvciBNQURUIHRhYmxlLgotCQkgKiBTbyBhYm92ZSBhcGljX2lkIGlzIGFsd2F5cyBzZXQgdG8gLTEuCisJCSAqIFNvIGFib3ZlIHBoeXNfaWQgaXMgYWx3YXlzIHNldCB0byAtMS4KIAkJICoKIAkJICogQklPUyBtYXkgZGVmaW5lIG11bHRpcGxlIENQVSBoYW5kbGVzIGV2ZW4gZm9yIFVQIHByb2Nlc3Nvci4KIAkJICogRm9yIGV4YW1wbGUsCkBAIC0xNzAsNyArMTcwLDcgQEAKIAkJICogICAgIFByb2Nlc3NvciAoQ1BVMywgMHgwMywgMHgwMDAwMDQxMCwgMHgwNikge30KIAkJICogfQogCQkgKgotCQkgKiBJZ25vcmVzIGFwaWNfaWQgYW5kIGFsd2F5cyByZXR1cm5zIDAgZm9yIHRoZSBwcm9jZXNzb3IKKwkJICogSWdub3JlcyBwaHlzX2lkIGFuZCBhbHdheXMgcmV0dXJucyAwIGZvciB0aGUgcHJvY2Vzc29yCiAJCSAqIGhhbmRsZSB3aXRoIGFjcGkgaWQgMCBpZiBucl9jcHVfaWRzIGlzIDEuCiAJCSAqIFRoaXMgc2hvdWxkIGJlIHRoZSBjYXNlIGlmIFNNUCB0YWJsZXMgYXJlIG5vdCBmb3VuZC4KIAkJICogUmV0dXJuIC0xIGZvciBvdGhlciBDUFUncyBoYW5kbGUuCkBAIC0xNzgsMjggKzE3OCwyOCBAQAogCQlpZiAobnJfY3B1X2lkcyA8PSAxICYmIGFjcGlfaWQgPT0gMCkKIAkJCXJldHVybiBhY3BpX2lkOwogCQllbHNlCi0JCQlyZXR1cm4gYXBpY19pZDsKKwkJCXJldHVybiBwaHlzX2lkOwogCX0KIAogI2lmZGVmIENPTkZJR19TTVAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlpZiAoY3B1X3BoeXNpY2FsX2lkKGkpID09IGFwaWNfaWQpCisJCWlmIChjcHVfcGh5c2ljYWxfaWQoaSkgPT0gcGh5c19pZCkKIAkJCXJldHVybiBpOwogCX0KICNlbHNlCiAJLyogSW4gVVAga2VybmVsLCBvbmx5IHByb2Nlc3NvciAwIGlzIHZhbGlkICovCi0JaWYgKGFwaWNfaWQgPT0gMCkKLQkJcmV0dXJuIGFwaWNfaWQ7CisJaWYgKHBoeXNfaWQgPT0gMCkKKwkJcmV0dXJuIHBoeXNfaWQ7CiAjZW5kaWYKIAlyZXR1cm4gLTE7CiB9CiAKIGludCBhY3BpX2dldF9jcHVpZChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlLCB1MzIgYWNwaV9pZCkKIHsKLQlpbnQgYXBpY19pZDsKKwlpbnQgcGh5c19pZDsKIAotCWFwaWNfaWQgPSBhY3BpX2dldF9hcGljaWQoaGFuZGxlLCB0eXBlLCBhY3BpX2lkKTsKKwlwaHlzX2lkID0gYWNwaV9nZXRfcGh5c19pZChoYW5kbGUsIHR5cGUsIGFjcGlfaWQpOwogCi0JcmV0dXJuIGFjcGlfbWFwX2NwdWlkKGFwaWNfaWQsIGFjcGlfaWQpOworCXJldHVybiBhY3BpX21hcF9jcHVpZChwaHlzX2lkLCBhY3BpX2lkKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjcGlfZ2V0X2NwdWlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggNDk5NTM2NS4uODdiNzA0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTk4NSw4ICs5ODUsNiBAQAogCQlzdGF0ZS0+ZmxhZ3MgPSAwOwogCQlzd2l0Y2ggKGN4LT50eXBlKSB7CiAJCQljYXNlIEFDUElfU1RBVEVfQzE6Ci0JCQlpZiAoY3gtPmVudHJ5X21ldGhvZCAhPSBBQ1BJX0NTVEFURV9GRkgpCi0JCQkJc3RhdGUtPmZsYWdzIHw9IENQVUlETEVfRkxBR19USU1FX0lOVkFMSUQ7CiAKIAkJCXN0YXRlLT5lbnRlciA9IGFjcGlfaWRsZV9lbnRlcl9jMTsKIAkJCXN0YXRlLT5lbnRlcl9kZWFkID0gYWNwaV9pZGxlX3BsYXlfZGVhZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IDE2OTE0Y2MuLmRjNGQ4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtMTAwMSw3ICsxMDAxLDcgQEAKIAlpZiAoZGV2aWNlLT53YWtldXAuZmxhZ3MudmFsaWQpCiAJCWFjcGlfcG93ZXJfcmVzb3VyY2VzX2xpc3RfZnJlZSgmZGV2aWNlLT53YWtldXAucmVzb3VyY2VzKTsKIAotCWlmICghZGV2aWNlLT5mbGFncy5wb3dlcl9tYW5hZ2VhYmxlKQorCWlmICghZGV2aWNlLT5wb3dlci5mbGFncy5wb3dlcl9yZXNvdXJjZXMpCiAJCXJldHVybjsKIAogCWZvciAoaSA9IEFDUElfU1RBVEVfRDA7IGkgPD0gQUNQSV9TVEFURV9EM19IT1Q7IGkrKykgewpAQCAtMTc0NCwxMCArMTc0NCw4IEBACiAJCQlkZXZpY2UtPnBvd2VyLmZsYWdzLnBvd2VyX3Jlc291cmNlcykKIAkJZGV2aWNlLT5wb3dlci5zdGF0ZXNbQUNQSV9TVEFURV9EM19DT0xEXS5mbGFncy5vc19hY2Nlc3NpYmxlID0gMTsKIAotCWlmIChhY3BpX2J1c19pbml0X3Bvd2VyKGRldmljZSkpIHsKLQkJYWNwaV9mcmVlX3Bvd2VyX3Jlc291cmNlc19saXN0cyhkZXZpY2UpOworCWlmIChhY3BpX2J1c19pbml0X3Bvd2VyKGRldmljZSkpCiAJCWRldmljZS0+ZmxhZ3MucG93ZXJfbWFuYWdlYWJsZSA9IDA7Ci0JfQogfQogCiBzdGF0aWMgdm9pZCBhY3BpX2J1c19nZXRfZmxhZ3Moc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCkBAIC0yMzcxLDEzICsyMzY5LDE4IEBACiAJLyogU2tpcCBkZXZpY2VzIHRoYXQgYXJlIG5vdCBwcmVzZW50LiAqLwogCWlmICghYWNwaV9kZXZpY2VfaXNfcHJlc2VudChkZXZpY2UpKSB7CiAJCWRldmljZS0+ZmxhZ3MudmlzaXRlZCA9IGZhbHNlOworCQlkZXZpY2UtPmZsYWdzLnBvd2VyX21hbmFnZWFibGUgPSAwOwogCQlyZXR1cm47CiAJfQogCWlmIChkZXZpY2UtPmhhbmRsZXIpCiAJCWdvdG8gb2s7CiAKIAlpZiAoIWRldmljZS0+ZmxhZ3MuaW5pdGlhbGl6ZWQpIHsKLQkJYWNwaV9idXNfdXBkYXRlX3Bvd2VyKGRldmljZSwgTlVMTCk7CisJCWRldmljZS0+ZmxhZ3MucG93ZXJfbWFuYWdlYWJsZSA9CisJCQlkZXZpY2UtPnBvd2VyLnN0YXRlc1tBQ1BJX1NUQVRFX0QwXS5mbGFncy52YWxpZDsKKwkJaWYgKGFjcGlfYnVzX2luaXRfcG93ZXIoZGV2aWNlKSkKKwkJCWRldmljZS0+ZmxhZ3MucG93ZXJfbWFuYWdlYWJsZSA9IDA7CisKIAkJZGV2aWNlLT5mbGFncy5pbml0aWFsaXplZCA9IHRydWU7CiAJfQogCWRldmljZS0+ZmxhZ3MudmlzaXRlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCAxZWFhZGZmLi4wMzJkYjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtNTA1LDYgKzUwNSwzMyBAQAogCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkhQIEVOVlkgMTUgTm90ZWJvb2sgUEMiKSwKIAkJfSwKIAl9LAorCisJeworCSAuY2FsbGJhY2sgPSB2aWRlb19kaXNhYmxlX25hdGl2ZV9iYWNrbGlnaHQsCisJIC5pZGVudCA9ICJTQU1TVU5HIDg3MFo1RS84ODBaNUUvNjgwWjVFIiwKKwkgLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiODcwWjVFLzg4MFo1RS82ODBaNUUiKSwKKwkJfSwKKwl9LAorCXsKKwkgLmNhbGxiYWNrID0gdmlkZW9fZGlzYWJsZV9uYXRpdmVfYmFja2xpZ2h0LAorCSAuaWRlbnQgPSAiU0FNU1VORyAzNzBSNEUvMzcwUjRWLzM3MFI1RS8zNTcwUkUvMzcwUjVWIiwKKwkgLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiMzcwUjRFLzM3MFI0Vi8zNzBSNUUvMzU3MFJFLzM3MFI1ViIpLAorCQl9LAorCX0sCisKKwl7CisJIC8qIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTE2MzU3NCAqLworCSAuY2FsbGJhY2sgPSB2aWRlb19kaXNhYmxlX25hdGl2ZV9iYWNrbGlnaHQsCisJIC5pZGVudCA9ICJEZWxsIFhQUzE1IEw1MjFYIiwKKwkgLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlhQUyBMNTIxWCIpLAorCQl9LAorCX0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL0tjb25maWcgYi9kcml2ZXJzL2F0YS9LY29uZmlnCmluZGV4IGEzYTEzNjAuLjVmNjAxNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL0tjb25maWcKKysrIGIvZHJpdmVycy9hdGEvS2NvbmZpZwpAQCAtODM1LDYgKzgzNSw3IEBACiBjb25maWcgUEFUQV9BVDkxCiAJdHJpc3RhdGUgIlBBVEEgc3VwcG9ydCBmb3IgQVQ5MVNBTTkyNjAiCiAJZGVwZW5kcyBvbiBBUk0gJiYgU09DX0FUOTFTQU05CisJZGVwZW5kcyBvbiAhQVJDSF9NVUxUSVBMQVRGT1JNCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBJREUgZGV2aWNlcyBvbiB0aGUgQXRtZWwgQVQ5MVNBTTkyNjAgU29DLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggNDlmMWU2OC4uMzNiYjA2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtMzI1LDcgKzMyNSw2IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHg5ZDA1KSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUxQIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDlkMDcpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtTFAgUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4YTEwMyksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1IIEFIQ0kgKi8KLQl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExMDMpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtSCBSQUlEICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMTA1KSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUggUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4YTEwNyksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1IIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExMGYpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtSCBSQUlEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpX3hnZW5lLmMgYi9kcml2ZXJzL2F0YS9haGNpX3hnZW5lLmMKaW5kZXggZmVlYjhmMS4uY2JjZDIwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2lfeGdlbmUuYworKysgYi9kcml2ZXJzL2F0YS9haGNpX3hnZW5lLmMKQEAgLTEyNSwxMCArMTI1LDExIEBACiAgKiB4Z2VuZV9haGNpX3FjX2lzc3VlIC0gSXNzdWUgY29tbWFuZHMgdG8gdGhlIGRldmljZQogICogQHFjOiBDb21tYW5kIHRvIGlzc3VlCiAgKgotICogRHVlIHRvIEhhcmR3YXJlIGVycmF0YSBmb3IgSURFTlRJRlkgREVWSUNFIGNvbW1hbmQsIHRoZSBjb250cm9sbGVyIGNhbm5vdAotICogY2xlYXIgdGhlIEJTWSBiaXQgYWZ0ZXIgcmVjZWl2aW5nIHRoZSBQSU8gc2V0dXAgRklTLiBUaGlzIHJlc3VsdHMgaW4gdGhlIGRtYQotICogc3RhdGUgbWFjaGluZSBnb2VzIGludG8gdGhlIENNRmF0YWxFcnJvclVwZGF0ZSBzdGF0ZSBhbmQgbG9ja3MgdXAuIEJ5Ci0gKiByZXN0YXJ0aW5nIHRoZSBkbWEgZW5naW5lLCBpdCByZW1vdmVzIHRoZSBjb250cm9sbGVyIG91dCBvZiBsb2NrIHVwIHN0YXRlLgorICogRHVlIHRvIEhhcmR3YXJlIGVycmF0YSBmb3IgSURFTlRJRlkgREVWSUNFIGNvbW1hbmQgYW5kIFBBQ0tFVAorICogY29tbWFuZCBvZiBBVEFQSSBwcm90b2NvbCBzZXQsIHRoZSBjb250cm9sbGVyIGNhbm5vdCBjbGVhciB0aGUgQlNZIGJpdAorICogYWZ0ZXIgcmVjZWl2aW5nIHRoZSBQSU8gc2V0dXAgRklTLiBUaGlzIHJlc3VsdHMgaW4gdGhlIERNQSBzdGF0ZSBtYWNoaW5lCisgKiBnb2luZyBpbnRvIHRoZSBDTUZhdGFsRXJyb3JVcGRhdGUgc3RhdGUgYW5kIGxvY2tzIHVwLiBCeSByZXN0YXJ0aW5nIHRoZQorICogRE1BIGVuZ2luZSwgaXQgcmVtb3ZlcyB0aGUgY29udHJvbGxlciBvdXQgb2YgbG9jayB1cCBzdGF0ZS4KICAqLwogc3RhdGljIHVuc2lnbmVkIGludCB4Z2VuZV9haGNpX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CkBAIC0xMzcsNyArMTM4LDggQEAKIAlzdHJ1Y3QgeGdlbmVfYWhjaV9jb250ZXh0ICpjdHggPSBocHJpdi0+cGxhdF9kYXRhOwogCWludCByYyA9IDA7CiAKLQlpZiAodW5saWtlbHkoY3R4LT5sYXN0X2NtZFthcC0+cG9ydF9ub10gPT0gQVRBX0NNRF9JRF9BVEEpKQorCWlmICh1bmxpa2VseSgoY3R4LT5sYXN0X2NtZFthcC0+cG9ydF9ub10gPT0gQVRBX0NNRF9JRF9BVEEpIHx8CisJICAgIChjdHgtPmxhc3RfY21kW2FwLT5wb3J0X25vXSA9PSBBVEFfQ01EX1BBQ0tFVCkpKQogCQl4Z2VuZV9haGNpX3Jlc3RhcnRfZW5naW5lKGFwKTsKIAogCXJjID0gYWhjaV9xY19pc3N1ZShxYyk7CkBAIC0xODgsNyArMTkwLDcgQEAKIAkgKgogCSAqIENsZWFyIHJlc2VydmVkIGJpdCA4IChERVZTTFAgYml0KSBhcyB3ZSBkb24ndCBzdXBwb3J0IERFVlNMUAogCSAqLwotCWlkW0FUQV9JRF9GRUFUVVJFX1NVUFBdICY9IH4oMSA8PCA4KTsKKwlpZFtBVEFfSURfRkVBVFVSRV9TVVBQXSAmPSBjcHVfdG9fbGUxNih+KDEgPDwgOCkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhaGNpLmMgYi9kcml2ZXJzL2F0YS9saWJhaGNpLmMKaW5kZXggOTc2ODNlNC4uNjFhOWMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmFoY2kuYwpAQCAtMjAwMyw3ICsyMDAzLDcgQEAKIAogCWRldnNscCA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfREVWU0xQKTsKIAlpZiAoIShkZXZzbHAgJiBQT1JUX0RFVlNMUF9EU1ApKSB7Ci0JCWRldl9lcnIoYXAtPmhvc3QtPmRldiwgInBvcnQgZG9lcyBub3Qgc3VwcG9ydCBkZXZpY2Ugc2xlZXBcbiIpOworCQlkZXZfaW5mbyhhcC0+aG9zdC0+ZGV2LCAicG9ydCBkb2VzIG5vdCBzdXBwb3J0IGRldmljZSBzbGVlcFxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IDVjODRmYjUuLmQxYTA1ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtNDIzMywxMCArNDIzMywzMyBAQAogCXsgIlBJT05FRVIgRFZELVJXICBEVlItMjE2RCIsCU5VTEwsCUFUQV9IT1JLQUdFX05PU0VUWEZFUiB9LAogCiAJLyogZGV2aWNlcyB0aGF0IGRvbid0IHByb3Blcmx5IGhhbmRsZSBxdWV1ZWQgVFJJTSBjb21tYW5kcyAqLwotCXsgIk1pY3Jvbl9NNTAwKiIsCQlOVUxMLAlBVEFfSE9SS0FHRV9OT19OQ1FfVFJJTSwgfSwKLQl7ICJDcnVjaWFsX0NUPz8/TTUwMFNTRCoiLAlOVUxMLAlBVEFfSE9SS0FHRV9OT19OQ1FfVFJJTSwgfSwKLQl7ICJNaWNyb25fTTU1MCoiLAkJTlVMTCwJQVRBX0hPUktBR0VfTk9fTkNRX1RSSU0sIH0sCi0JeyAiQ3J1Y2lhbF9DVCpNNTUwU1NEKiIsCU5VTEwsCUFUQV9IT1JLQUdFX05PX05DUV9UUklNLCB9LAorCXsgIk1pY3Jvbl9NWzU2XSoiLAkJTlVMTCwJQVRBX0hPUktBR0VfTk9fTkNRX1RSSU0gfAorCQkJCQkJQVRBX0hPUktBR0VfWkVST19BRlRFUl9UUklNLCB9LAorCXsgIkNydWNpYWxfQ1QqU1NEKiIsCQlOVUxMLAlBVEFfSE9SS0FHRV9OT19OQ1FfVFJJTSwgfSwKKworCS8qCisJICogQXMgZGVmaW5lZCwgdGhlIERSQVQgKERldGVybWluaXN0aWMgUmVhZCBBZnRlciBUcmltKSBhbmQgUlpBVAorCSAqIChSZXR1cm4gWmVybyBBZnRlciBUcmltKSBmbGFncyBpbiB0aGUgQVRBIENvbW1hbmQgU2V0IGFyZQorCSAqIHVucmVsaWFibGUgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBvbmx5IGRlZmluZSB3aGF0IGhhcHBlbnMgaWYKKwkgKiB0aGUgZGV2aWNlIHN1Y2Nlc3NmdWxseSBleGVjdXRlZCB0aGUgRFNNIFRSSU0gY29tbWFuZC4gVFJJTQorCSAqIGlzIG9ubHkgYWR2aXNvcnksIGhvd2V2ZXIsIGFuZCB0aGUgZGV2aWNlIGlzIGZyZWUgdG8gc2lsZW50bHkKKwkgKiBpZ25vcmUgYWxsIG9yIHBhcnRzIG9mIHRoZSByZXF1ZXN0LgorCSAqCisJICogV2hpdGVsaXN0IGRyaXZlcyB0aGF0IGFyZSBrbm93biB0byByZWxpYWJseSByZXR1cm4gemVyb2VzCisJICogYWZ0ZXIgVFJJTS4KKwkgKi8KKworCS8qCisJICogVGhlIGludGVsIDUxMCBkcml2ZSBoYXMgYnVnZ3kgRFJBVC9SWkFULiBFeHBsaWNpdGx5IGV4Y2x1ZGUKKwkgKiB0aGF0IG1vZGVsIGJlZm9yZSB3aGl0ZWxpc3RpbmcgYWxsIG90aGVyIGludGVsIFNTRHMuCisJICovCisJeyAiSU5URUwqU1NEU0MyTUgqIiwJCU5VTEwsCTAsIH0sCisKKwl7ICJJTlRFTCpTU0QqIiwgCQlOVUxMLAlBVEFfSE9SS0FHRV9aRVJPX0FGVEVSX1RSSU0sIH0sCisJeyAiU1NEKklOVEVMKiIsCQkJTlVMTCwJQVRBX0hPUktBR0VfWkVST19BRlRFUl9UUklNLCB9LAorCXsgIlNhbXN1bmcqU1NEKiIsCQlOVUxMLAlBVEFfSE9SS0FHRV9aRVJPX0FGVEVSX1RSSU0sIH0sCisJeyAiU0FNU1VORypTU0QqIiwJCU5VTEwsCUFUQV9IT1JLQUdFX1pFUk9fQUZURVJfVFJJTSwgfSwKKwl7ICJTVFsxMjQ4XVswMjQ4XTBbRkhdKiIsCU5VTEwsCUFUQV9IT1JLQUdFX1pFUk9fQUZURVJfVFJJTSwgfSwKIAogCS8qCiAJICogU29tZSBXRCBTQVRBLUkgZHJpdmVzIHNwaW4gdXAgYW5kIGRvd24gZXJyYXRpY2FsbHkgd2hlbiB0aGUgbGluawpAQCAtNDc0OCw3ICs0NzcxLDEwIEBACiAJCXJldHVybiBOVUxMOwogCiAJZm9yIChpID0gMCwgdGFnID0gYXAtPmxhc3RfdGFnICsgMTsgaSA8IG1heF9xdWV1ZTsgaSsrLCB0YWcrKykgewotCQl0YWcgPSB0YWcgPCBtYXhfcXVldWUgPyB0YWcgOiAwOworCQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfTE9XVEFHKQorCQkJdGFnID0gaTsKKwkJZWxzZQorCQkJdGFnID0gdGFnIDwgbWF4X3F1ZXVlID8gdGFnIDogMDsKIAogCQkvKiB0aGUgbGFzdCB0YWcgaXMgcmVzZXJ2ZWQgZm9yIGludGVybmFsIGNvbW1hbmQuICovCiAJCWlmICh0YWcgPT0gQVRBX1RBR19JTlRFUk5BTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKaW5kZXggM2RiZWM4OS4uOGQwMGMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKQEAgLTIzODksNiArMjM4OSw3IEBACiAKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9nZXRfY21kX2Rlc2NyaXB0KTsKIAogLyoqCiAgKglhdGFfZWhfbGlua19yZXBvcnQgLSByZXBvcnQgZXJyb3IgaGFuZGxpbmcgdG8gdXNlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKaW5kZXggZTM2NGU4Ni4uNmFiZDE3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC0yNTMyLDEzICsyNTMyLDE1IEBACiAJCXJidWZbMTVdID0gbG93ZXN0X2FsaWduZWQ7CiAKIAkJaWYgKGF0YV9pZF9oYXNfdHJpbShhcmdzLT5pZCkpIHsKLQkJCXJidWZbMTRdIHw9IDB4ODA7IC8qIFRQRSAqLworCQkJcmJ1ZlsxNF0gfD0gMHg4MDsgLyogTEJQTUUgKi8KIAotCQkJaWYgKGF0YV9pZF9oYXNfemVyb19hZnRlcl90cmltKGFyZ3MtPmlkKSkKLQkJCQlyYnVmWzE0XSB8PSAweDQwOyAvKiBUUFJaICovCisJCQlpZiAoYXRhX2lkX2hhc196ZXJvX2FmdGVyX3RyaW0oYXJncy0+aWQpICYmCisJCQkgICAgZGV2LT5ob3JrYWdlICYgQVRBX0hPUktBR0VfWkVST19BRlRFUl9UUklNKSB7CisJCQkJYXRhX2Rldl9pbmZvKGRldiwgIkVuYWJsaW5nIGRpc2NhcmRfemVyb2VzX2RhdGFcbiIpOworCQkJCXJidWZbMTRdIHw9IDB4NDA7IC8qIExCUFJaICovCisJCQl9CiAJCX0KIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCmluZGV4IGRiOTBhYTMuLjJlODZlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKQEAgLTEzMzMsNyArMTMzMywxOSBAQAogCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYXAtPnNmZl9waW9fdGFzayk7CisKKwkvKgorCSAqIFdlIHdhbm5hIHJlc2V0IHRoZSBIU00gc3RhdGUgdG8gSURMRS4gIElmIHdlIGRvIHNvIHdpdGhvdXQKKwkgKiBncmFiYmluZyB0aGUgcG9ydCBsb2NrLCBjcml0aWNhbCBzZWN0aW9ucyBwcm90ZWN0ZWQgYnkgaXQgd2hpY2gKKwkgKiBleHBlY3QgdGhlIEhTTSBzdGF0ZSB0byBzdGF5IHN0YWJsZSBtYXkgZ2V0IHN1cnByaXNlZC4gIEZvcgorCSAqIGV4YW1wbGUsIHdlIG1heSBzZXQgSURMRSBpbiBiZXR3ZWVuIHRoZSB0aW1lCisJICogX19hdGFfc2ZmX3BvcnRfaW50cigpIGNoZWNrcyBmb3IgSFNNX1NUX0lETEUgYW5kIGJlZm9yZSBpdCBjYWxscworCSAqIGF0YV9zZmZfaHNtX21vdmUoKSBjYXVzaW5nIGF0YV9zZmZfaHNtX21vdmUoKSB0byBCVUcoKS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKGFwLT5sb2NrKTsKIAlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfSURMRTsKKwlzcGluX3VubG9ja19pcnEoYXAtPmxvY2spOworCiAJYXAtPnNmZl9waW9fdGFza19saW5rID0gTlVMTDsKIAogCWlmIChhdGFfbXNnX2N0bChhcCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2R3Y180NjBleC5jIGIvZHJpdmVycy9hdGEvc2F0YV9kd2NfNDYwZXguYwppbmRleCBjN2RkZWY4Li44ZTgyNDgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9kd2NfNDYwZXguYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX2R3Y180NjBleC5jCkBAIC03OTcsNyArNzk3LDcgQEAKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoaG9zdF9wdnQuZHdjX2RldiwgIiVzOiBkbWFfcmVxdWVzdF9pbnRlcnJ1cHRzIHJldHVybnMiCiAJCQkiICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKLQkJZ290byBlcnJvcl9vdXQ7CisJCXJldHVybiBlcnI7CiAJfQogCiAJLyogRW5hYmUgRE1BICovCkBAIC04MDgsMTEgKzgwOCw2IEBACiAJCXNhdGFfZG1hX3JlZ3MpOwogCiAJcmV0dXJuIDA7Ci0KLWVycm9yX291dDoKLQlkbWFfZHdjX2V4aXQoaHNkZXYpOwotCi0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBzYXRhX2R3Y19zY3JfcmVhZChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCBzY3IsIHUzMiAqdmFsKQpAQCAtMTY2Miw3ICsxNjU3LDcgQEAKIAljaGFyICp2ZXIgPSAoY2hhciAqKSZ2ZXJzaW9ucjsKIAl1OCAqYmFzZSA9IE5VTEw7CiAJaW50IGVyciA9IDA7Ci0JaW50IGlycSwgcmM7CisJaW50IGlycTsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7CiAJc3RydWN0IGF0YV9wb3J0X2luZm8gcGkgPSBzYXRhX2R3Y19wb3J0X2luZm9bMF07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmcGksIE5VTEwgfTsKQEAgLTE3MjUsNyArMTcyMCw3IEBACiAJaWYgKGlycSA9PSBOT19JUlEpIHsKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwgIm5vIFNBVEEgRE1BIGlycVxuIik7CiAJCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3Jfb3V0OworCQlnb3RvIGVycm9yX2lvbWFwOwogCX0KIAogCS8qIEdldCBwaHlzaWNhbCBTQVRBIERNQSByZWdpc3RlciBiYXNlIGFkZHJlc3MgKi8KQEAgLTE3MzQsMTQgKzE3MjksMTYgQEAKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkIGZvciBBSEJETUEgcmVnaXN0ZXIiCiAJCQkiIGFkZHJlc3NcbiIpOwogCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm9yX291dDsKKwkJZ290byBlcnJvcl9pb21hcDsKIAl9CiAKIAkvKiBTYXZlIGRldiBmb3IgbGF0ZXIgdXNlIGluIGRldl94eHgoKSByb3V0aW5lcyAqLwogCWhvc3RfcHZ0LmR3Y19kZXYgPSAmb2ZkZXYtPmRldjsKIAogCS8qIEluaXRpYWxpemUgQUhCIERNQUMgKi8KLQlkbWFfZHdjX2luaXQoaHNkZXYsIGlycSk7CisJZXJyID0gZG1hX2R3Y19pbml0KGhzZGV2LCBpcnEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3JfZG1hX2lvbWFwOwogCiAJLyogRW5hYmxlIFNBVEEgSW50ZXJydXB0cyAqLwogCXNhdGFfZHdjX2VuYWJsZV9pbnRlcnJ1cHRzKGhzZGV2KTsKQEAgLTE3NTksOSArMTc1Niw4IEBACiAJICogZGV2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLCBpbnZva2luZyBvdXIgcG9ydF9zdGFydCgpIGhhbmRsZXIgJgogCSAqIGVycm9yX2hhbmRsZXIoKSB0byBleGVjdXRlIGEgZHVtbXkgU29mdHJlc2V0IEVIIHNlc3Npb24KIAkgKi8KLQlyYyA9IGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIGlycSwgc2F0YV9kd2NfaXNyLCAwLCAmc2F0YV9kd2Nfc2h0KTsKLQotCWlmIChyYyAhPSAwKQorCWVyciA9IGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIGlycSwgc2F0YV9kd2NfaXNyLCAwLCAmc2F0YV9kd2Nfc2h0KTsKKwlpZiAoZXJyKQogCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiZmFpbGVkIHRvIGFjdGl2YXRlIGhvc3QiKTsKIAogCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgaG9zdCk7CkBAIC0xNzcwLDcgKzE3NjYsOCBAQAogZXJyb3Jfb3V0OgogCS8qIEZyZWUgU0FUQSBETUEgcmVzb3VyY2VzICovCiAJZG1hX2R3Y19leGl0KGhzZGV2KTsKLQorZXJyb3JfZG1hX2lvbWFwOgorCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MpOwogZXJyb3JfaW9tYXA6CiAJaW91bm1hcChiYXNlKTsKIGVycm9yX2ttYWxsb2M6CkBAIC0xNzkxLDYgKzE3ODgsNyBAQAogCS8qIEZyZWUgU0FUQSBETUEgcmVzb3VyY2VzICovCiAJZG1hX2R3Y19leGl0KGhzZGV2KTsKIAorCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MpOwogCWlvdW5tYXAoaHNkZXYtPnJlZ19iYXNlKTsKIAlrZnJlZShoc2Rldik7CiAJa2ZyZWUoaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKaW5kZXggZDgxYjIwZC4uZWE2NTU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJLyogaG9zdCBmbGFncyAqLwogCVNJTDI0X0NPTU1PTl9GTEFHUwk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19QSU9fRE1BIHwKIAkJCQkgIEFUQV9GTEFHX05DUSB8IEFUQV9GTEFHX0FDUElfU0FUQSB8Ci0JCQkJICBBVEFfRkxBR19BTiB8IEFUQV9GTEFHX1BNUCwKKwkJCQkgIEFUQV9GTEFHX0FOIHwgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfTE9XVEFHLAogCVNJTDI0X0ZMQUdfUENJWF9JUlFfV09DCT0gKDEgPDwgMjQpLCAvKiBJUlEgbG9zcyBlcnJhdGEgb24gUENJLVggKi8KIAogCUlSUV9TVEFUXzRQT1JUUwkJPSAweGYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluLmMKaW5kZXggNmExMDNhMy4uMGQ4NzgwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW4uYwpAQCAtMjA4OCw3ICsyMDg4LDcgQEAKICAqIFJldHVybnMgYSB2YWxpZCBwb2ludGVyIHRvIHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiBvbiBzdWNjZXNzIG9yIEVSUl9QVFIoKQogICogb24gZmFpbHVyZS4KICAqLwotc3RhdGljIHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqb2ZfZ2VucGRfZ2V0X2Zyb21fcHJvdmlkZXIoCitzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKm9mX2dlbnBkX2dldF9mcm9tX3Byb3ZpZGVyKAogCQkJCQlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpnZW5wZHNwZWMpCiB7CiAJc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCA9IEVSUl9QVFIoLUVOT0VOVCk7CkBAIC0yMTA4LDYgKzIxMDgsNyBAQAogCiAJcmV0dXJuIGdlbnBkOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob2ZfZ2VucGRfZ2V0X2Zyb21fcHJvdmlkZXIpOwogCiAvKioKICAqIGdlbnBkX2Rldl9wbV9kZXRhY2ggLSBEZXRhY2ggYSBkZXZpY2UgZnJvbSBpdHMgUE0gZG9tYWluLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL29wcC5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL29wcC5jCmluZGV4IGQyNGRkNjE0YS4uMTA2YzY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL29wcC5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9vcHAuYwpAQCAtMTA4LDYgKzEwOCwxNCBAQAogLyogTG9jayB0byBhbGxvdyBleGNsdXNpdmUgbW9kaWZpY2F0aW9uIHRvIHRoZSBkZXZpY2UgYW5kIG9wcCBsaXN0cyAqLwogc3RhdGljIERFRklORV9NVVRFWChkZXZfb3BwX2xpc3RfbG9jayk7CiAKKyNkZWZpbmUgb3BwX3JjdV9sb2NrZGVwX2Fzc2VydCgpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXJjdV9sb2NrZGVwX2Fzc2VydChyY3VfcmVhZF9sb2NrX2hlbGQoKSB8fAkJCVwKKwkJCQlsb2NrZGVwX2lzX2hlbGQoJmRldl9vcHBfbGlzdF9sb2NrKSwJXAorCQkJICAgIk1pc3NpbmcgcmN1X3JlYWRfbG9jaygpIG9yICIJCVwKKwkJCSAgICJkZXZfb3BwX2xpc3RfbG9jayBwcm90ZWN0aW9uIik7CQlcCit9IHdoaWxlICgwKQorCiAvKioKICAqIGZpbmRfZGV2aWNlX29wcCgpIC0gZmluZCBkZXZpY2Vfb3BwIHN0cnVjdCB1c2luZyBkZXZpY2UgcG9pbnRlcgogICogQGRldjoJZGV2aWNlIHBvaW50ZXIgdXNlZCB0byBsb29rdXAgZGV2aWNlIE9QUHMKQEAgLTIwOCw5ICsyMTYsNyBAQAogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIG9wcHMgaWYgdGhlcmUgYXJlIGFueSwKICAqIGVsc2UgcmV0dXJucyAwIGlmIG5vbmUgb3IgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IgdmFsdWUuCiAgKgotICogTG9ja2luZzogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkuIFRoaXMgZnVuY3Rpb24KLSAqIGludGVybmFsbHkgcmVmZXJlbmNlcyB0d28gUkNVIHByb3RlY3RlZCBzdHJ1Y3R1cmVzOiBkZXZpY2Vfb3BwIGFuZCBvcHAgd2hpY2gKLSAqIGFyZSBzYWZlIGFzIGxvbmcgYXMgd2UgYXJlIHVuZGVyIGEgY29tbW9uIFJDVSBsb2NrZWQgc2VjdGlvbi4KKyAqIExvY2tpbmc6IFRoaXMgZnVuY3Rpb24gdGFrZXMgcmN1X3JlYWRfbG9jaygpLgogICovCiBpbnQgZGV2X3BtX29wcF9nZXRfb3BwX2NvdW50KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTIxOCwxMSArMjI0LDE0IEBACiAJc3RydWN0IGRldl9wbV9vcHAgKnRlbXBfb3BwOwogCWludCBjb3VudCA9IDA7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CisKIAlkZXZfb3BwID0gZmluZF9kZXZpY2Vfb3BwKGRldik7CiAJaWYgKElTX0VSUihkZXZfb3BwKSkgewotCQlpbnQgciA9IFBUUl9FUlIoZGV2X29wcCk7Ci0JCWRldl9lcnIoZGV2LCAiJXM6IGRldmljZSBPUFAgbm90IGZvdW5kICglZClcbiIsIF9fZnVuY19fLCByKTsKLQkJcmV0dXJuIHI7CisJCWNvdW50ID0gUFRSX0VSUihkZXZfb3BwKTsKKwkJZGV2X2VycihkZXYsICIlczogZGV2aWNlIE9QUCBub3QgZm91bmQgKCVkKVxuIiwKKwkJCV9fZnVuY19fLCBjb3VudCk7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0ZW1wX29wcCwgJmRldl9vcHAtPm9wcF9saXN0LCBub2RlKSB7CkBAIC0yMzAsNiArMjM5LDggQEAKIAkJCWNvdW50Kys7CiAJfQogCitvdXRfdW5sb2NrOgorCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBjb3VudDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9wbV9vcHBfZ2V0X29wcF9jb3VudCk7CkBAIC0yNjcsNiArMjc4LDggQEAKIAlzdHJ1Y3QgZGV2aWNlX29wcCAqZGV2X29wcDsKIAlzdHJ1Y3QgZGV2X3BtX29wcCAqdGVtcF9vcHAsICpvcHAgPSBFUlJfUFRSKC1FUkFOR0UpOwogCisJb3BwX3JjdV9sb2NrZGVwX2Fzc2VydCgpOworCiAJZGV2X29wcCA9IGZpbmRfZGV2aWNlX29wcChkZXYpOwogCWlmIChJU19FUlIoZGV2X29wcCkpIHsKIAkJaW50IHIgPSBQVFJfRVJSKGRldl9vcHApOwpAQCAtMzEzLDYgKzMyNiw4IEBACiAJc3RydWN0IGRldmljZV9vcHAgKmRldl9vcHA7CiAJc3RydWN0IGRldl9wbV9vcHAgKnRlbXBfb3BwLCAqb3BwID0gRVJSX1BUUigtRVJBTkdFKTsKIAorCW9wcF9yY3VfbG9ja2RlcF9hc3NlcnQoKTsKKwogCWlmICghZGV2IHx8ICFmcmVxKSB7CiAJCWRldl9lcnIoZGV2LCAiJXM6IEludmFsaWQgYXJndW1lbnQgZnJlcT0lcFxuIiwgX19mdW5jX18sIGZyZXEpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTM2MSw2ICszNzYsOCBAQAogCXN0cnVjdCBkZXZpY2Vfb3BwICpkZXZfb3BwOwogCXN0cnVjdCBkZXZfcG1fb3BwICp0ZW1wX29wcCwgKm9wcCA9IEVSUl9QVFIoLUVSQU5HRSk7CiAKKwlvcHBfcmN1X2xvY2tkZXBfYXNzZXJ0KCk7CisKIAlpZiAoIWRldiB8fCAhZnJlcSkgewogCQlkZXZfZXJyKGRldiwgIiVzOiBJbnZhbGlkIGFyZ3VtZW50IGZyZXE9JXBcbiIsIF9fZnVuY19fLCBmcmVxKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC03ODMsOSArODAwLDE1IEBACiAKIAkvKiBDaGVjayBmb3IgZXhpc3RpbmcgbGlzdCBmb3IgJ2RldicgKi8KIAlkZXZfb3BwID0gZmluZF9kZXZpY2Vfb3BwKGRldik7Ci0JaWYgKFdBUk4oSVNfRVJSKGRldl9vcHApLCAiJXM6IGRldl9vcHA6ICVsZFxuIiwgZGV2X25hbWUoZGV2KSwKLQkJIFBUUl9FUlIoZGV2X29wcCkpKQorCWlmIChJU19FUlIoZGV2X29wcCkpIHsKKwkJaW50IGVycm9yID0gUFRSX0VSUihkZXZfb3BwKTsKKwkJaWYgKGVycm9yICE9IC1FTk9ERVYpCisJCQlXQVJOKDEsICIlczogZGV2X29wcDogJWRcbiIsCisJCQkgICAgIElTX0VSUl9PUl9OVUxMKGRldikgPworCQkJCQkiSW52YWxpZCBkZXZpY2UiIDogZGV2X25hbWUoZGV2KSwKKwkJCSAgICAgZXJyb3IpOwogCQlyZXR1cm47CisJfQogCiAJLyogSG9sZCBvdXIgbGlzdCBtb2RpZmljYXRpb24gbG9jayBoZXJlICovCiAJbXV0ZXhfbG9jaygmZGV2X29wcF9saXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay5jIGIvZHJpdmVycy9ibG9jay9udWxsX2Jsay5jCmluZGV4IGFlOWY2MTUuLmFhMjIyNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrLmMKQEAgLTUzMCw3ICs1MzAsNyBAQAogCQkJZ290byBvdXRfY2xlYW51cF9xdWV1ZXM7CiAKIAkJbnVsbGItPnEgPSBibGtfbXFfaW5pdF9xdWV1ZSgmbnVsbGItPnRhZ19zZXQpOwotCQlpZiAoIW51bGxiLT5xKSB7CisJCWlmIChJU19FUlIobnVsbGItPnEpKSB7CiAJCQlydiA9IC1FTk9NRU07CiAJCQlnb3RvIG91dF9jbGVhbnVwX3RhZ3M7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbnZtZS1jb3JlLmMgYi9kcml2ZXJzL2Jsb2NrL252bWUtY29yZS5jCmluZGV4IGIxZDVkODcuLmQ4MjZiZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbnZtZS1jb3JlLmMKKysrIGIvZHJpdmVycy9ibG9jay9udm1lLWNvcmUuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJZG1hX2FkZHJfdCBjcV9kbWFfYWRkcjsKIAl1MzIgX19pb21lbSAqcV9kYjsKIAl1MTYgcV9kZXB0aDsKLQl1MTYgY3FfdmVjdG9yOworCXMxNiBjcV92ZWN0b3I7CiAJdTE2IHNxX2hlYWQ7CiAJdTE2IHNxX3RhaWw7CiAJdTE2IGNxX2hlYWQ7CkBAIC0yMTUsNiArMjE1LDcgQEAKIAljbWQtPmZuID0gaGFuZGxlcjsKIAljbWQtPmN0eCA9IGN0eDsKIAljbWQtPmFib3J0ZWQgPSAwOworCWJsa19tcV9zdGFydF9yZXF1ZXN0KGJsa19tcV9ycV9mcm9tX3BkdShjbWQpKTsKIH0KIAogLyogU3BlY2lhbCB2YWx1ZXMgbXVzdCBiZSBsZXNzIHRoYW4gMHgxMDAwICovCkBAIC00MzEsOCArNDMyLDEzIEBACiAJaWYgKHVubGlrZWx5KHN0YXR1cykpIHsKIAkJaWYgKCEoc3RhdHVzICYgTlZNRV9TQ19ETlIgfHwgYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpKQogCQkgICAgJiYgKGppZmZpZXMgLSByZXEtPnN0YXJ0X3RpbWUpIDwgcmVxLT50aW1lb3V0KSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJCQlibGtfbXFfcmVxdWV1ZV9yZXF1ZXN0KHJlcSk7Ci0JCQlibGtfbXFfa2lja19yZXF1ZXVlX2xpc3QocmVxLT5xKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKHJlcS0+cS0+cXVldWVfbG9jaywgZmxhZ3MpOworCQkJaWYgKCFibGtfcXVldWVfc3RvcHBlZChyZXEtPnEpKQorCQkJCWJsa19tcV9raWNrX3JlcXVldWVfbGlzdChyZXEtPnEpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShyZXEtPnEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCQlyZXEtPmVycm9ycyA9IG52bWVfZXJyb3Jfc3RhdHVzKHN0YXR1cyk7CkBAIC02NjQsOCArNjcwLDYgQEAKIAkJfQogCX0KIAotCWJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7Ci0KIAludm1lX3NldF9pbmZvKGNtZCwgaW9kLCByZXFfY29tcGxldGlvbik7CiAJc3Bpbl9sb2NrX2lycSgmbnZtZXEtPnFfbG9jayk7CiAJaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpCkBAIC04MzUsNiArODM5LDcgQEAKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKKwlyZXEtPmNtZF9mbGFncyB8PSBSRVFfTk9fVElNRU9VVDsKIAljbWRfaW5mbyA9IGJsa19tcV9ycV90b19wZHUocmVxKTsKIAludm1lX3NldF9pbmZvKGNtZF9pbmZvLCByZXEsIGFzeW5jX3JlcV9jb21wbGV0aW9uKTsKIApAQCAtMTAxNiwxNCArMTAyMSwxOSBAQAogCXN0cnVjdCBudm1lX2NvbW1hbmQgY21kOwogCiAJaWYgKCFudm1lcS0+cWlkIHx8IGNtZF9ycS0+YWJvcnRlZCkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfbGlzdF9sb2NrLCBmbGFncyk7CiAJCWlmICh3b3JrX2J1c3koJmRldi0+cmVzZXRfd29yaykpCi0JCQlyZXR1cm47CisJCQlnb3RvIG91dDsKIAkJbGlzdF9kZWxfaW5pdCgmZGV2LT5ub2RlKTsKIAkJZGV2X3dhcm4oJmRldi0+cGNpX2Rldi0+ZGV2LAogCQkJIkkvTyAlZCBRSUQgJWQgdGltZW91dCwgcmVzZXQgY29udHJvbGxlclxuIiwKIAkJCQkJCQlyZXEtPnRhZywgbnZtZXEtPnFpZCk7CiAJCWRldi0+cmVzZXRfd29ya2ZuID0gbnZtZV9yZXNldF9mYWlsZWRfZGV2OwogCQlxdWV1ZV93b3JrKG52bWVfd29ya3EsICZkZXYtPnJlc2V0X3dvcmspOworIG91dDoKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDY0LDE1ICsxMDc0LDIyIEBACiAJdm9pZCAqY3R4OwogCW52bWVfY29tcGxldGlvbl9mbiBmbjsKIAlzdHJ1Y3QgbnZtZV9jbWRfaW5mbyAqY21kOwotCXN0YXRpYyBzdHJ1Y3QgbnZtZV9jb21wbGV0aW9uIGNxZSA9IHsKLQkJLnN0YXR1cyA9IGNwdV90b19sZTE2KE5WTUVfU0NfQUJPUlRfUkVRIDw8IDEpLAotCX07CisJc3RydWN0IG52bWVfY29tcGxldGlvbiBjcWU7CisKKwlpZiAoIWJsa19tcV9yZXF1ZXN0X3N0YXJ0ZWQocmVxKSkKKwkJcmV0dXJuOwogCiAJY21kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpOwogCiAJaWYgKGNtZC0+Y3R4ID09IENNRF9DVFhfQ0FOQ0VMTEVEKQogCQlyZXR1cm47CiAKKwlpZiAoYmxrX3F1ZXVlX2R5aW5nKHJlcS0+cSkpCisJCWNxZS5zdGF0dXMgPSBjcHVfdG9fbGUxNigoTlZNRV9TQ19BQk9SVF9SRVEgfCBOVk1FX1NDX0ROUikgPDwgMSk7CisJZWxzZQorCQljcWUuc3RhdHVzID0gY3B1X3RvX2xlMTYoTlZNRV9TQ19BQk9SVF9SRVEgPDwgMSk7CisKKwogCWRldl93YXJuKG52bWVxLT5xX2RtYWRldiwgIkNhbmNlbGxpbmcgSS9PICVkIFFJRCAlZFxuIiwKIAkJCQkJCXJlcS0+dGFnLCBudm1lcS0+cWlkKTsKIAljdHggPSBjYW5jZWxfY21kX2luZm8oY21kLCAmZm4pOwpAQCAtMTA4NCwxNyArMTEwMSwyOSBAQAogCXN0cnVjdCBudm1lX2NtZF9pbmZvICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7CiAJc3RydWN0IG52bWVfcXVldWUgKm52bWVxID0gY21kLT5udm1lcTsKIAotCWRldl93YXJuKG52bWVxLT5xX2RtYWRldiwgIlRpbWVvdXQgSS9PICVkIFFJRCAlZFxuIiwgcmVxLT50YWcsCi0JCQkJCQkJbnZtZXEtPnFpZCk7Ci0JaWYgKG52bWVxLT5kZXYtPmluaXRpYWxpemVkKQotCQludm1lX2Fib3J0X3JlcShyZXEpOwotCiAJLyoKIAkgKiBUaGUgYWJvcnRlZCByZXEgd2lsbCBiZSBjb21wbGV0ZWQgb24gcmVjZWl2aW5nIHRoZSBhYm9ydCByZXEuCiAJICogV2UgZW5hYmxlIHRoZSB0aW1lciBhZ2Fpbi4gSWYgaGl0IHR3aWNlLCBpdCdsbCBjYXVzZSBhIGRldmljZSByZXNldCwKIAkgKiBhcyB0aGUgZGV2aWNlIHRoZW4gaXMgaW4gYSBmYXVsdHkgc3RhdGUuCiAJICovCi0JcmV0dXJuIEJMS19FSF9SRVNFVF9USU1FUjsKKwlpbnQgcmV0ID0gQkxLX0VIX1JFU0VUX1RJTUVSOworCisJZGV2X3dhcm4obnZtZXEtPnFfZG1hZGV2LCAiVGltZW91dCBJL08gJWQgUUlEICVkXG4iLCByZXEtPnRhZywKKwkJCQkJCQludm1lcS0+cWlkKTsKKworCXNwaW5fbG9ja19pcnEoJm52bWVxLT5xX2xvY2spOworCWlmICghbnZtZXEtPmRldi0+aW5pdGlhbGl6ZWQpIHsKKwkJLyoKKwkJICogRm9yY2UgY2FuY2VsbGVkIGNvbW1hbmQgZnJlZXMgdGhlIHJlcXVlc3QsIHdoaWNoIHJlcXVpcmVzIHdlCisJCSAqIHJldHVybiBCTEtfRUhfTk9UX0hBTkRMRUQuCisJCSAqLworCQludm1lX2NhbmNlbF9xdWV1ZV9pb3MobnZtZXEtPmhjdHgsIHJlcSwgbnZtZXEsIHJlc2VydmVkKTsKKwkJcmV0ID0gQkxLX0VIX05PVF9IQU5ETEVEOworCX0gZWxzZQorCQludm1lX2Fib3J0X3JlcShyZXEpOworCXNwaW5fdW5sb2NrX2lycSgmbnZtZXEtPnFfbG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBudm1lX2ZyZWVfcXVldWUoc3RydWN0IG52bWVfcXVldWUgKm52bWVxKQpAQCAtMTEzMSwxMCArMTE2MCwxNiBAQAogICovCiBzdGF0aWMgaW50IG52bWVfc3VzcGVuZF9xdWV1ZShzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEpCiB7Ci0JaW50IHZlY3RvciA9IG52bWVxLT5kZXYtPmVudHJ5W252bWVxLT5jcV92ZWN0b3JdLnZlY3RvcjsKKwlpbnQgdmVjdG9yOwogCiAJc3Bpbl9sb2NrX2lycSgmbnZtZXEtPnFfbG9jayk7CisJaWYgKG52bWVxLT5jcV92ZWN0b3IgPT0gLTEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZudm1lcS0+cV9sb2NrKTsKKwkJcmV0dXJuIDE7CisJfQorCXZlY3RvciA9IG52bWVxLT5kZXYtPmVudHJ5W252bWVxLT5jcV92ZWN0b3JdLnZlY3RvcjsKIAludm1lcS0+ZGV2LT5vbmxpbmVfcXVldWVzLS07CisJbnZtZXEtPmNxX3ZlY3RvciA9IC0xOwogCXNwaW5fdW5sb2NrX2lycSgmbnZtZXEtPnFfbG9jayk7CiAKIAlpcnFfc2V0X2FmZmluaXR5X2hpbnQodmVjdG9yLCBOVUxMKTsKQEAgLTExNjksMTEgKzEyMDQsMTMgQEAKIAkJYWRhcHRlcl9kZWxldGVfc3EoZGV2LCBxaWQpOwogCQlhZGFwdGVyX2RlbGV0ZV9jcShkZXYsIHFpZCk7CiAJfQorCWlmICghcWlkICYmIGRldi0+YWRtaW5fcSkKKwkJYmxrX21xX2ZyZWV6ZV9xdWV1ZV9zdGFydChkZXYtPmFkbWluX3EpOwogCW52bWVfY2xlYXJfcXVldWUobnZtZXEpOwogfQogCiBzdGF0aWMgc3RydWN0IG52bWVfcXVldWUgKm52bWVfYWxsb2NfcXVldWUoc3RydWN0IG52bWVfZGV2ICpkZXYsIGludCBxaWQsCi0JCQkJCQkJaW50IGRlcHRoLCBpbnQgdmVjdG9yKQorCQkJCQkJCWludCBkZXB0aCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkbWFkZXYgPSAmZGV2LT5wY2lfZGV2LT5kZXY7CiAJc3RydWN0IG52bWVfcXVldWUgKm52bWVxID0ga3phbGxvYyhzaXplb2YoKm52bWVxKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMTk5LDcgKzEyMzYsNiBAQAogCW52bWVxLT5jcV9waGFzZSA9IDE7CiAJbnZtZXEtPnFfZGIgPSAmZGV2LT5kYnNbcWlkICogMiAqIGRldi0+ZGJfc3RyaWRlXTsKIAludm1lcS0+cV9kZXB0aCA9IGRlcHRoOwotCW52bWVxLT5jcV92ZWN0b3IgPSB2ZWN0b3I7CiAJbnZtZXEtPnFpZCA9IHFpZDsKIAlkZXYtPnF1ZXVlX2NvdW50Kys7CiAJZGV2LT5xdWV1ZXNbcWlkXSA9IG52bWVxOwpAQCAtMTI0NCw2ICsxMjgwLDcgQEAKIAlzdHJ1Y3QgbnZtZV9kZXYgKmRldiA9IG52bWVxLT5kZXY7CiAJaW50IHJlc3VsdDsKIAorCW52bWVxLT5jcV92ZWN0b3IgPSBxaWQgLSAxOwogCXJlc3VsdCA9IGFkYXB0ZXJfYWxsb2NfY3EoZGV2LCBxaWQsIG52bWVxKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJcmV0dXJuIHJlc3VsdDsKQEAgLTEzNTUsNiArMTM5MiwxNCBAQAogCS50aW1lb3V0CT0gbnZtZV90aW1lb3V0LAogfTsKIAorc3RhdGljIHZvaWQgbnZtZV9kZXZfcmVtb3ZlX2FkbWluKHN0cnVjdCBudm1lX2RldiAqZGV2KQoreworCWlmIChkZXYtPmFkbWluX3EgJiYgIWJsa19xdWV1ZV9keWluZyhkZXYtPmFkbWluX3EpKSB7CisJCWJsa19jbGVhbnVwX3F1ZXVlKGRldi0+YWRtaW5fcSk7CisJCWJsa19tcV9mcmVlX3RhZ19zZXQoJmRldi0+YWRtaW5fdGFnc2V0KTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgbnZtZV9hbGxvY19hZG1pbl90YWdzKHN0cnVjdCBudm1lX2RldiAqZGV2KQogewogCWlmICghZGV2LT5hZG1pbl9xKSB7CkBAIC0xMzcwLDIxICsxNDE1LDIwIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlkZXYtPmFkbWluX3EgPSBibGtfbXFfaW5pdF9xdWV1ZSgmZGV2LT5hZG1pbl90YWdzZXQpOwotCQlpZiAoIWRldi0+YWRtaW5fcSkgeworCQlpZiAoSVNfRVJSKGRldi0+YWRtaW5fcSkpIHsKIAkJCWJsa19tcV9mcmVlX3RhZ19zZXQoJmRldi0+YWRtaW5fdGFnc2V0KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JfQorCQlpZiAoIWJsa19nZXRfcXVldWUoZGV2LT5hZG1pbl9xKSkgeworCQkJbnZtZV9kZXZfcmVtb3ZlX2FkbWluKGRldik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0gZWxzZQorCQlibGtfbXFfdW5mcmVlemVfcXVldWUoZGV2LT5hZG1pbl9xKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBudm1lX2ZyZWVfYWRtaW5fdGFncyhzdHJ1Y3QgbnZtZV9kZXYgKmRldikKLXsKLQlpZiAoZGV2LT5hZG1pbl9xKQotCQlibGtfbXFfZnJlZV90YWdfc2V0KCZkZXYtPmFkbWluX3RhZ3NldCk7Ci19Ci0KIHN0YXRpYyBpbnQgbnZtZV9jb25maWd1cmVfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfZGV2ICpkZXYpCiB7CiAJaW50IHJlc3VsdDsKQEAgLTE0MTYsNyArMTQ2MCw3IEBACiAKIAludm1lcSA9IGRldi0+cXVldWVzWzBdOwogCWlmICghbnZtZXEpIHsKLQkJbnZtZXEgPSBudm1lX2FsbG9jX3F1ZXVlKGRldiwgMCwgTlZNRV9BUV9ERVBUSCwgMCk7CisJCW52bWVxID0gbnZtZV9hbGxvY19xdWV1ZShkZXYsIDAsIE5WTUVfQVFfREVQVEgpOwogCQlpZiAoIW52bWVxKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTQzOSwxOCArMTQ4MywxMyBAQAogCWlmIChyZXN1bHQpCiAJCWdvdG8gZnJlZV9udm1lcTsKIAotCXJlc3VsdCA9IG52bWVfYWxsb2NfYWRtaW5fdGFncyhkZXYpOworCW52bWVxLT5jcV92ZWN0b3IgPSAwOworCXJlc3VsdCA9IHF1ZXVlX3JlcXVlc3RfaXJxKGRldiwgbnZtZXEsIG52bWVxLT5pcnFuYW1lKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZyZWVfbnZtZXE7CiAKLQlyZXN1bHQgPSBxdWV1ZV9yZXF1ZXN0X2lycShkZXYsIG52bWVxLCBudm1lcS0+aXJxbmFtZSk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBmcmVlX3RhZ3M7Ci0KIAlyZXR1cm4gcmVzdWx0OwogCi0gZnJlZV90YWdzOgotCW52bWVfZnJlZV9hZG1pbl90YWdzKGRldik7CiAgZnJlZV9udm1lcToKIAludm1lX2ZyZWVfcXVldWVzKGRldiwgMCk7CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTE5NDQsNyArMTk4Myw3IEBACiAJdW5zaWduZWQgaTsKIAogCWZvciAoaSA9IGRldi0+cXVldWVfY291bnQ7IGkgPD0gZGV2LT5tYXhfcWlkOyBpKyspCi0JCWlmICghbnZtZV9hbGxvY19xdWV1ZShkZXYsIGksIGRldi0+cV9kZXB0aCwgaSAtIDEpKQorCQlpZiAoIW52bWVfYWxsb2NfcXVldWUoZGV2LCBpLCBkZXYtPnFfZGVwdGgpKQogCQkJYnJlYWs7CiAKIAlmb3IgKGkgPSBkZXYtPm9ubGluZV9xdWV1ZXM7IGkgPD0gZGV2LT5xdWV1ZV9jb3VudCAtIDE7IGkrKykKQEAgLTIyMzUsMTMgKzIyNzQsMTggQEAKIAkJCWJyZWFrOwogCQlpZiAoIXNjaGVkdWxlX3RpbWVvdXQoQURNSU5fVElNRU9VVCkgfHwKIAkJCQkJZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCS8qCisJCQkgKiBEaXNhYmxlIHRoZSBjb250cm9sbGVyIGZpcnN0IHNpbmNlIHdlIGNhbid0IHRydXN0IGl0CisJCQkgKiBhdCB0aGlzIHBvaW50LCBidXQgbGVhdmUgdGhlIGFkbWluIHF1ZXVlIGVuYWJsZWQKKwkJCSAqIHVudGlsIGFsbCBxdWV1ZSBkZWxldGlvbiByZXF1ZXN0cyBhcmUgZmx1c2hlZC4KKwkJCSAqIEZJWE1FOiBUaGlzIG1heSB0YWtlIGEgd2hpbGUgaWYgdGhlcmUgYXJlIG1vcmUgaC93CisJCQkgKiBxdWV1ZXMgdGhhbiBhZG1pbiB0YWdzLgorCQkJICovCiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCiAJCQludm1lX2Rpc2FibGVfY3RybChkZXYsIHJlYWRxKCZkZXYtPmJhci0+Y2FwKSk7Ci0JCQludm1lX2Rpc2FibGVfcXVldWUoZGV2LCAwKTsKLQotCQkJc2VuZF9zaWcoU0lHS0lMTCwgZHEtPndvcmtlci0+dGFzaywgMSk7CisJCQludm1lX2NsZWFyX3F1ZXVlKGRldi0+cXVldWVzWzBdKTsKIAkJCWZsdXNoX2t0aHJlYWRfd29ya2VyKGRxLT53b3JrZXIpOworCQkJbnZtZV9kaXNhYmxlX3F1ZXVlKGRldiwgMCk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0yMzE4LDcgKzIzNjIsNiBAQAogewogCXN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbnZtZV9xdWV1ZSwKIAkJCQkJCQljbWRpbmZvLndvcmspOwotCWFsbG93X3NpZ25hbChTSUdLSUxMKTsKIAlpZiAobnZtZV9kZWxldGVfc3EobnZtZXEpKQogCQludm1lX2RlbF9xdWV1ZV9lbmQobnZtZXEpOwogfQpAQCAtMjM3Niw2ICsyNDE5LDM0IEBACiAJCWt0aHJlYWRfc3RvcCh0bXApOwogfQogCitzdGF0aWMgdm9pZCBudm1lX2ZyZWV6ZV9xdWV1ZXMoc3RydWN0IG52bWVfZGV2ICpkZXYpCit7CisJc3RydWN0IG52bWVfbnMgKm5zOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShucywgJmRldi0+bmFtZXNwYWNlcywgbGlzdCkgeworCQlibGtfbXFfZnJlZXplX3F1ZXVlX3N0YXJ0KG5zLT5xdWV1ZSk7CisKKwkJc3Bpbl9sb2NrKG5zLT5xdWV1ZS0+cXVldWVfbG9jayk7CisJCXF1ZXVlX2ZsYWdfc2V0KFFVRVVFX0ZMQUdfU1RPUFBFRCwgbnMtPnF1ZXVlKTsKKwkJc3Bpbl91bmxvY2sobnMtPnF1ZXVlLT5xdWV1ZV9sb2NrKTsKKworCQlibGtfbXFfY2FuY2VsX3JlcXVldWVfd29yayhucy0+cXVldWUpOworCQlibGtfbXFfc3RvcF9od19xdWV1ZXMobnMtPnF1ZXVlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG52bWVfdW5mcmVlemVfcXVldWVzKHN0cnVjdCBudm1lX2RldiAqZGV2KQoreworCXN0cnVjdCBudm1lX25zICpuczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobnMsICZkZXYtPm5hbWVzcGFjZXMsIGxpc3QpIHsKKwkJcXVldWVfZmxhZ19jbGVhcl91bmxvY2tlZChRVUVVRV9GTEFHX1NUT1BQRUQsIG5zLT5xdWV1ZSk7CisJCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShucy0+cXVldWUpOworCQlibGtfbXFfc3RhcnRfc3RvcHBlZF9od19xdWV1ZXMobnMtPnF1ZXVlLCB0cnVlKTsKKwkJYmxrX21xX2tpY2tfcmVxdWV1ZV9saXN0KG5zLT5xdWV1ZSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBudm1lX2Rldl9zaHV0ZG93bihzdHJ1Y3QgbnZtZV9kZXYgKmRldikKIHsKIAlpbnQgaTsKQEAgLTIzODQsOCArMjQ1NSwxMCBAQAogCWRldi0+aW5pdGlhbGl6ZWQgPSAwOwogCW52bWVfZGV2X2xpc3RfcmVtb3ZlKGRldik7CiAKLQlpZiAoZGV2LT5iYXIpCisJaWYgKGRldi0+YmFyKSB7CisJCW52bWVfZnJlZXplX3F1ZXVlcyhkZXYpOwogCQljc3RzID0gcmVhZGwoJmRldi0+YmFyLT5jc3RzKTsKKwl9CiAJaWYgKGNzdHMgJiBOVk1FX0NTVFNfQ0ZTIHx8ICEoY3N0cyAmIE5WTUVfQ1NUU19SRFkpKSB7CiAJCWZvciAoaSA9IGRldi0+cXVldWVfY291bnQgLSAxOyBpID49IDA7IGktLSkgewogCQkJc3RydWN0IG52bWVfcXVldWUgKm52bWVxID0gZGV2LT5xdWV1ZXNbaV07CkBAIC0yNDAwLDEyICsyNDczLDYgQEAKIAludm1lX2Rldl91bm1hcChkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBudm1lX2Rldl9yZW1vdmVfYWRtaW4oc3RydWN0IG52bWVfZGV2ICpkZXYpCi17Ci0JaWYgKGRldi0+YWRtaW5fcSAmJiAhYmxrX3F1ZXVlX2R5aW5nKGRldi0+YWRtaW5fcSkpCi0JCWJsa19jbGVhbnVwX3F1ZXVlKGRldi0+YWRtaW5fcSk7Ci19Ci0KIHN0YXRpYyB2b2lkIG52bWVfZGV2X3JlbW92ZShzdHJ1Y3QgbnZtZV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbnZtZV9ucyAqbnM7CkBAIC0yNDEzLDggKzI0ODAsMTAgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5zLCAmZGV2LT5uYW1lc3BhY2VzLCBsaXN0KSB7CiAJCWlmIChucy0+ZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkKIAkJCWRlbF9nZW5kaXNrKG5zLT5kaXNrKTsKLQkJaWYgKCFibGtfcXVldWVfZHlpbmcobnMtPnF1ZXVlKSkKKwkJaWYgKCFibGtfcXVldWVfZHlpbmcobnMtPnF1ZXVlKSkgeworCQkJYmxrX21xX2Fib3J0X3JlcXVldWVfbGlzdChucy0+cXVldWUpOwogCQkJYmxrX2NsZWFudXBfcXVldWUobnMtPnF1ZXVlKTsKKwkJfQogCX0KIH0KIApAQCAtMjQ5NSw2ICsyNTY0LDcgQEAKIAludm1lX2ZyZWVfbmFtZXNwYWNlcyhkZXYpOwogCW52bWVfcmVsZWFzZV9pbnN0YW5jZShkZXYpOwogCWJsa19tcV9mcmVlX3RhZ19zZXQoJmRldi0+dGFnc2V0KTsKKwlibGtfcHV0X3F1ZXVlKGRldi0+YWRtaW5fcSk7CiAJa2ZyZWUoZGV2LT5xdWV1ZXMpOwogCWtmcmVlKGRldi0+ZW50cnkpOwogCWtmcmVlKGRldik7CkBAIC0yNTkxLDE1ICsyNjYxLDIwIEBACiAJfQogCiAJbnZtZV9pbml0X3F1ZXVlKGRldi0+cXVldWVzWzBdLCAwKTsKKwlyZXN1bHQgPSBudm1lX2FsbG9jX2FkbWluX3RhZ3MoZGV2KTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGRpc2FibGU7CiAKIAlyZXN1bHQgPSBudm1lX3NldHVwX2lvX3F1ZXVlcyhkZXYpOwogCWlmIChyZXN1bHQpCi0JCWdvdG8gZGlzYWJsZTsKKwkJZ290byBmcmVlX3RhZ3M7CiAKIAludm1lX3NldF9pcnFfaGludHMoZGV2KTsKIAogCXJldHVybiByZXN1bHQ7CiAKKyBmcmVlX3RhZ3M6CisJbnZtZV9kZXZfcmVtb3ZlX2FkbWluKGRldik7CiAgZGlzYWJsZToKIAludm1lX2Rpc2FibGVfcXVldWUoZGV2LCAwKTsKIAludm1lX2Rldl9saXN0X3JlbW92ZShkZXYpOwpAQCAtMjYzOSw2ICsyNzE0LDkgQEAKIAkJZGV2LT5yZXNldF93b3JrZm4gPSBudm1lX3JlbW92ZV9kaXNrczsKIAkJcXVldWVfd29yayhudm1lX3dvcmtxLCAmZGV2LT5yZXNldF93b3JrKTsKIAkJc3Bpbl91bmxvY2soJmRldl9saXN0X2xvY2spOworCX0gZWxzZSB7CisJCW52bWVfdW5mcmVlemVfcXVldWVzKGRldik7CisJCW52bWVfc2V0X2lycV9oaW50cyhkZXYpOwogCX0KIAlkZXYtPmluaXRpYWxpemVkID0gMTsKIAlyZXR1cm4gMDsKQEAgLTI3NzYsMTEgKzI4NTQsMTAgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZmx1c2hfd29yaygmZGV2LT5yZXNldF93b3JrKTsKIAltaXNjX2RlcmVnaXN0ZXIoJmRldi0+bWlzY2Rldik7Ci0JbnZtZV9kZXZfcmVtb3ZlKGRldik7CiAJbnZtZV9kZXZfc2h1dGRvd24oZGV2KTsKKwludm1lX2Rldl9yZW1vdmUoZGV2KTsKIAludm1lX2Rldl9yZW1vdmVfYWRtaW4oZGV2KTsKIAludm1lX2ZyZWVfcXVldWVzKGRldiwgMCk7Ci0JbnZtZV9mcmVlX2FkbWluX3RhZ3MoZGV2KTsKIAludm1lX3JlbGVhc2VfcHJwX3Bvb2xzKGRldik7CiAJa3JlZl9wdXQoJmRldi0+a3JlZiwgbnZtZV9mcmVlX2Rldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3JiZC5jIGIvZHJpdmVycy9ibG9jay9yYmQuYwppbmRleCAzZWM4NWRmLi44YTg2YjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3JiZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcmJkLmMKQEAgLTIwOTgsMzIgKzIwOTgsMjYgQEAKICAqIElmIGFuIGltYWdlIGhhcyBhIG5vbi16ZXJvIHBhcmVudCBvdmVybGFwLCBnZXQgYSByZWZlcmVuY2UgdG8gaXRzCiAgKiBwYXJlbnQuCiAgKgotICogV2UgbXVzdCBnZXQgdGhlIHJlZmVyZW5jZSBiZWZvcmUgY2hlY2tpbmcgZm9yIHRoZSBvdmVybGFwIHRvCi0gKiBjb29yZGluYXRlIHByb3Blcmx5IHdpdGggemVyb2luZyB0aGUgcGFyZW50IG92ZXJsYXAgaW4KLSAqIHJiZF9kZXZfdjJfcGFyZW50X2luZm8oKSB3aGVuIGFuIGltYWdlIGdldHMgZmxhdHRlbmVkLiAgV2UKLSAqIGRyb3AgaXQgYWdhaW4gaWYgdGhlcmUgaXMgbm8gb3ZlcmxhcC4KLSAqCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJiZCBkZXZpY2UgaGFzIGEgcGFyZW50IHdpdGggYSBub24temVybwogICogb3ZlcmxhcCBhbmQgYSByZWZlcmVuY2UgZm9yIGl0IHdhcyBzdWNjZXNzZnVsbHkgdGFrZW4sIG9yCiAgKiBmYWxzZSBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBib29sIHJiZF9kZXZfcGFyZW50X2dldChzdHJ1Y3QgcmJkX2RldmljZSAqcmJkX2RldikKIHsKLQlpbnQgY291bnRlcjsKKwlpbnQgY291bnRlciA9IDA7CiAKIAlpZiAoIXJiZF9kZXYtPnBhcmVudF9zcGVjKQogCQlyZXR1cm4gZmFsc2U7CiAKLQljb3VudGVyID0gYXRvbWljX2luY19yZXR1cm5fc2FmZSgmcmJkX2Rldi0+cGFyZW50X3JlZik7Ci0JaWYgKGNvdW50ZXIgPiAwICYmIHJiZF9kZXYtPnBhcmVudF9vdmVybGFwKQotCQlyZXR1cm4gdHJ1ZTsKLQotCS8qIEltYWdlIHdhcyBmbGF0dGVuZWQsIGJ1dCBwYXJlbnQgaXMgbm90IHlldCB0b3JuIGRvd24gKi8KKwlkb3duX3JlYWQoJnJiZF9kZXYtPmhlYWRlcl9yd3NlbSk7CisJaWYgKHJiZF9kZXYtPnBhcmVudF9vdmVybGFwKQorCQljb3VudGVyID0gYXRvbWljX2luY19yZXR1cm5fc2FmZSgmcmJkX2Rldi0+cGFyZW50X3JlZik7CisJdXBfcmVhZCgmcmJkX2Rldi0+aGVhZGVyX3J3c2VtKTsKIAogCWlmIChjb3VudGVyIDwgMCkKIAkJcmJkX3dhcm4ocmJkX2RldiwgInBhcmVudCByZWZlcmVuY2Ugb3ZlcmZsb3ciKTsKIAotCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gY291bnRlciA+IDA7CiB9CiAKIC8qCkBAIC00MjM5LDcgKzQyMzMsNiBAQAogCQkgKi8KIAkJaWYgKHJiZF9kZXYtPnBhcmVudF9vdmVybGFwKSB7CiAJCQlyYmRfZGV2LT5wYXJlbnRfb3ZlcmxhcCA9IDA7Ci0JCQlzbXBfbWIoKTsKIAkJCXJiZF9kZXZfcGFyZW50X3B1dChyYmRfZGV2KTsKIAkJCXByX2luZm8oIiVzOiBjbG9uZSBpbWFnZSBoYXMgYmVlbiBmbGF0dGVuZWRcbiIsCiAJCQkJcmJkX2Rldi0+ZGlzay0+ZGlza19uYW1lKTsKQEAgLTQyODUsNyArNDI3OCw2IEBACiAJICogdHJlYXQgaXQgc3BlY2lhbGx5LgogCSAqLwogCXJiZF9kZXYtPnBhcmVudF9vdmVybGFwID0gb3ZlcmxhcDsKLQlzbXBfbWIoKTsKIAlpZiAoIW92ZXJsYXApIHsKIAogCQkvKiBBIG51bGwgcGFyZW50X3NwZWMgaW5kaWNhdGVzIGl0J3MgdGhlIGluaXRpYWwgcHJvYmUgKi8KQEAgLTUxMTQsMTAgKzUxMDYsNyBAQAogewogCXN0cnVjdCByYmRfaW1hZ2VfaGVhZGVyCSpoZWFkZXI7CiAKLQkvKiBEcm9wIHBhcmVudCByZWZlcmVuY2UgdW5sZXNzIGl0J3MgYWxyZWFkeSBiZWVuIGRvbmUgKG9yIG5vbmUpICovCi0KLQlpZiAocmJkX2Rldi0+cGFyZW50X292ZXJsYXApCi0JCXJiZF9kZXZfcGFyZW50X3B1dChyYmRfZGV2KTsKKwlyYmRfZGV2X3BhcmVudF9wdXQocmJkX2Rldik7CiAKIAkvKiBGcmVlIGR5bmFtaWMgZmllbGRzIGZyb20gdGhlIGhlYWRlciwgdGhlbiB6ZXJvIGl0IG91dCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCmluZGV4IDdlZjdjMDkuLmNkZmJkMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCkBAIC02MzgsNyArNjM4LDcgQEAKIAkJZ290byBvdXRfcHV0X2Rpc2s7CiAKIAlxID0gdmJsay0+ZGlzay0+cXVldWUgPSBibGtfbXFfaW5pdF9xdWV1ZSgmdmJsay0+dGFnX3NldCk7Ci0JaWYgKCFxKSB7CisJaWYgKElTX0VSUihxKSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3RhZ3M7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvYXJtLWNjaS5jIGIvZHJpdmVycy9idXMvYXJtLWNjaS5jCmluZGV4IDg2MGRhNDAuLjBjZTVlMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL2FybS1jY2kuYworKysgYi9kcml2ZXJzL2J1cy9hcm0tY2NpLmMKQEAgLTEzMTIsNiArMTMxMiw5IEBACiAJaWYgKCFucCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWNjaV9jb25maWcgPSBvZl9tYXRjaF9ub2RlKGFybV9jY2lfbWF0Y2hlcywgbnApLT5kYXRhOwogCWlmICghY2NpX2NvbmZpZykKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9tdmVidS1tYnVzLmMgYi9kcml2ZXJzL2J1cy9tdmVidS1tYnVzLmMKaW5kZXggZWI3NjgyZC4uODFiZjI5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jCisrKyBiL2RyaXZlcnMvYnVzL212ZWJ1LW1idXMuYwpAQCAtMjEwLDEyICsyMTAsMjUgQEAKIH0KIAogLyogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHdpbmRvdyBudW1iZXIgaXMgYXZhaWxhYmxlICovCisKKy8qIE9uIEFybWFkYSBYUCwgMzc1IGFuZCAzOHggdGhlIE1CdXMgd2luZG93IDEzIGhhcyB0aGUgcmVtYXAKKyAqIGNhcGFiaWxpdHksIGxpa2Ugd2luZG93cyAwIHRvIDcuIEhvd2V2ZXIsIHRoZSBtdmVidS1tYnVzIGRyaXZlcgorICogaXNuJ3QgY3VycmVudGx5IHRha2luZyBpbnRvIGFjY291bnQgdGhpcyBzcGVjaWFsIGNhc2UsIHdoaWNoIG1lYW5zCisgKiB0aGF0IHdoZW4gd2luZG93IDEzIGlzIGFjdHVhbGx5IHVzZWQsIHRoZSByZW1hcCByZWdpc3RlcnMgYXJlIGxlZnQKKyAqIHRvIDAsIG1ha2luZyB0aGUgZGV2aWNlIHVzaW5nIHRoaXMgTUJ1cyB3aW5kb3cgdW5hdmFpbGFibGUuIFRoZQorICogcXVpY2sgZml4IGZvciBzdGFibGUgaXMgdG8gbm90IHVzZSB3aW5kb3cgMTMuIEEgZm9sbG93IHVwIHBhdGNoCisgKiB3aWxsIGNvcnJlY3RseSBoYW5kbGUgdGhpcyB3aW5kb3cuCisqLwogc3RhdGljIGludCBtdmVidV9tYnVzX3dpbmRvd19pc19mcmVlKHN0cnVjdCBtdmVidV9tYnVzX3N0YXRlICptYnVzLAogCQkJCSAgICAgY29uc3QgaW50IHdpbikKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHIgPSBtYnVzLT5tYnVzd2luc19iYXNlICsKIAkJbWJ1cy0+c29jLT53aW5fY2ZnX29mZnNldCh3aW4pOwogCXUzMiBjdHJsID0gcmVhZGwoYWRkciArIFdJTl9DVFJMX09GRik7CisKKwlpZiAod2luID09IDEzKQorCQlyZXR1cm4gZmFsc2U7CisKIAlyZXR1cm4gIShjdHJsICYgV0lOX0NUUkxfRU5BQkxFKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYwppbmRleCAxOWRiMDM2Li5kY2JiYjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYwpAQCAtNDE3LDYgKzQxNyw2IEBACiBtb2R1bGVfaW5pdChhZ3BfYWxpX2luaXQpOwogbW9kdWxlX2V4aXQoYWdwX2FsaV9jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCmluZGV4IDNiNDdlZDAuLjBlZjM1MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwpAQCAtODEzLDYgKzgxMyw2IEBACiBtb2R1bGVfaW5pdChhZ3BfYW1kNjRfbW9kX2luaXQpOwogbW9kdWxlX2V4aXQoYWdwX2FtZDY0X2NsZWFudXApOwogCi1NT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgQW5kaSBLbGVlbiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcywgQW5kaSBLbGVlbiIpOwogbW9kdWxlX3BhcmFtKGFncF90cnlfdW5zdXBwb3J0ZWQsIGJvb2wsIDApOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwppbmRleCAxOGE3YTZiLi43NWE5Nzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwpAQCAtNTc5LDYgKzU3OSw2IEBACiBtb2R1bGVfaW5pdChhZ3BfYXRpX2luaXQpOwogbW9kdWxlX2V4aXQoYWdwX2F0aV9jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKaW5kZXggMzE3YzI4Yy4uMzhmZmIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKQEAgLTM1Niw3ICszNTYsNyBAQAogX19zZXR1cCgiYWdwPSIsIGFncF9zZXR1cCk7CiAjZW5kaWYKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMsIEplZmYgSGFydG1hbm4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUdQIEdBUlQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoQUdQR0FSVF9NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCBmOWI5Y2E1Li4wYTIxZGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTkyMCw1ICs5MjAsNSBAQAogbW9kdWxlX2luaXQoYWdwX2ludGVsX2luaXQpOwogbW9kdWxlX2V4aXQoYWdwX2ludGVsX2NsZWFudXApOwogCi1NT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcywgVmFyaW91cyBASW50ZWwiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYwppbmRleCBmMzMzNDgyLi45MmFhNDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMKQEAgLTE0MzgsNSArMTQzOCw1IEBACiB9CiBFWFBPUlRfU1lNQk9MKGludGVsX2dtY2hfcmVtb3ZlKTsKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMsIFZhcmlvdXMgQEludGVsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYwppbmRleCBhMTg2MWI3Li42YzhkMzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBOdmlkaWEgQUdQR0FSVCByb3V0aW5lcy4KICAqIEJhc2VkIHVwb24gYSAyLjQgYWdwZ2FydCBkaWZmIGJ5IHRoZSBmb2xrcyBmcm9tIE5WSURJQSwgYW5kIGhhY2tlZCB1cAotICogdG8gd29yayBpbiAyLjUgYnkgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4KKyAqIHRvIHdvcmsgaW4gMi41IGJ5IERhdmUgSm9uZXMuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwppbmRleCAyMjhmMjBjLi5hNDk2MWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwpAQCAtNTk1LDQgKzU5NSw0IEBACiBtb2R1bGVfZXhpdChhZ3BfdmlhX2NsZWFudXApOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwppbmRleCA1ZmE4M2Y3Li42YjY1ZmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwpAQCAtMTk5LDE4ICsxOTksNiBAQAogCWludCAgICAgICAgICAgICAgICAgICAgZ3VpZF9zZXQ7CiAJY2hhciAgICAgICAgICAgICAgICAgICBuYW1lWzE2XTsKIAlzdHJ1Y3Qga3JlZgkgICAgICAgdXNlY291bnQ7Ci0KLQkvKiBibWMgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZpY2VfaWRfYXR0cjsKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwcm92aWRlc19kZXZfc2Ryc19hdHRyOwotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHJldmlzaW9uX2F0dHI7Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZmlybXdhcmVfcmV2X2F0dHI7Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdmVyc2lvbl9hdHRyOwotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFkZF9kZXZfc3VwcG9ydF9hdHRyOwotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIG1hbnVmYWN0dXJlcl9pZF9hdHRyOwotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHByb2R1Y3RfaWRfYXR0cjsKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBndWlkX2F0dHI7Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXV4X2Zpcm13YXJlX3Jldl9hdHRyOwogfTsKICNkZWZpbmUgdG9fYm1jX2RldmljZSh4KSBjb250YWluZXJfb2YoKHgpLCBzdHJ1Y3QgYm1jX2RldmljZSwgcGRldi5kZXYpCiAKQEAgLTIyNTIsNyArMjI0MCw3IEBACiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCAxMCwgIiV1XG4iLCBibWMtPmlkLmRldmljZV9pZCk7CiB9Ci1ERVZJQ0VfQVRUUihkZXZpY2VfaWQsIFNfSVJVR08sIGRldmljZV9pZF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZXZpY2VfaWQsIFNfSVJVR08sIGRldmljZV9pZF9zaG93LCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgcHJvdmlkZXNfZGV2aWNlX3NkcnNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTIyNjMsNyArMjI1MSw4IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMTAsICIldVxuIiwKIAkJCShibWMtPmlkLmRldmljZV9yZXZpc2lvbiAmIDB4ODApID4+IDcpOwogfQotREVWSUNFX0FUVFIocHJvdmlkZXNfZGV2aWNlX3NkcnMsIFNfSVJVR08sIHByb3ZpZGVzX2RldmljZV9zZHJzX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHByb3ZpZGVzX2RldmljZV9zZHJzLCBTX0lSVUdPLCBwcm92aWRlc19kZXZpY2Vfc2Ryc19zaG93LAorCQkgICBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgcmV2aXNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICBjaGFyICpidWYpCkBAIC0yMjczLDcgKzIyNjIsNyBAQAogCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJXVcbiIsCiAJCQlibWMtPmlkLmRldmljZV9yZXZpc2lvbiAmIDB4MEYpOwogfQotREVWSUNFX0FUVFIocmV2aXNpb24sIFNfSVJVR08sIHJldmlzaW9uX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHJldmlzaW9uLCBTX0lSVUdPLCByZXZpc2lvbl9zaG93LCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QgZmlybXdhcmVfcmV2aXNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yMjg0LDcgKzIyNzMsNyBAQAogCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJXUuJXhcbiIsIGJtYy0+aWQuZmlybXdhcmVfcmV2aXNpb25fMSwKIAkJCWJtYy0+aWQuZmlybXdhcmVfcmV2aXNpb25fMik7CiB9Ci1ERVZJQ0VfQVRUUihmaXJtd2FyZV9yZXZpc2lvbiwgU19JUlVHTywgZmlybXdhcmVfcmV2aXNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZmlybXdhcmVfcmV2aXNpb24sIFNfSVJVR08sIGZpcm13YXJlX3JldmlzaW9uX3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBpcG1pX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMjI5Niw3ICsyMjg1LDcgQEAKIAkJCWlwbWlfdmVyc2lvbl9tYWpvcigmYm1jLT5pZCksCiAJCQlpcG1pX3ZlcnNpb25fbWlub3IoJmJtYy0+aWQpKTsKIH0KLURFVklDRV9BVFRSKGlwbWlfdmVyc2lvbiwgU19JUlVHTywgaXBtaV92ZXJzaW9uX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGlwbWlfdmVyc2lvbiwgU19JUlVHTywgaXBtaV92ZXJzaW9uX3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBhZGRfZGV2X3N1cHBvcnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMjMwNyw3ICsyMjk2LDggQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCAxMCwgIjB4JTAyeFxuIiwKIAkJCWJtYy0+aWQuYWRkaXRpb25hbF9kZXZpY2Vfc3VwcG9ydCk7CiB9Ci1ERVZJQ0VfQVRUUihhZGRpdGlvbmFsX2RldmljZV9zdXBwb3J0LCBTX0lSVUdPLCBhZGRfZGV2X3N1cHBvcnRfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYWRkaXRpb25hbF9kZXZpY2Vfc3VwcG9ydCwgU19JUlVHTywgYWRkX2Rldl9zdXBwb3J0X3Nob3csCisJCSAgIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBtYW51ZmFjdHVyZXJfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMjMxNyw3ICsyMzA3LDcgQEAKIAogCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiMHglNi42eFxuIiwgYm1jLT5pZC5tYW51ZmFjdHVyZXJfaWQpOwogfQotREVWSUNFX0FUVFIobWFudWZhY3R1cmVyX2lkLCBTX0lSVUdPLCBtYW51ZmFjdHVyZXJfaWRfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobWFudWZhY3R1cmVyX2lkLCBTX0lSVUdPLCBtYW51ZmFjdHVyZXJfaWRfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHByb2R1Y3RfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yMzI3LDcgKzIzMTcsNyBAQAogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMTAsICIweCU0LjR4XG4iLCBibWMtPmlkLnByb2R1Y3RfaWQpOwogfQotREVWSUNFX0FUVFIocHJvZHVjdF9pZCwgU19JUlVHTywgcHJvZHVjdF9pZF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwcm9kdWN0X2lkLCBTX0lSVUdPLCBwcm9kdWN0X2lkX3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBhdXhfZmlybXdhcmVfcmV2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yMzQxLDcgKzIzMzEsNyBAQAogCQkJYm1jLT5pZC5hdXhfZmlybXdhcmVfcmV2aXNpb25bMV0sCiAJCQlibWMtPmlkLmF1eF9maXJtd2FyZV9yZXZpc2lvblswXSk7CiB9Ci1ERVZJQ0VfQVRUUihhdXhfZmlybXdhcmVfcmV2aXNpb24sIFNfSVJVR08sIGF1eF9maXJtd2FyZV9yZXZfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYXV4X2Zpcm13YXJlX3JldmlzaW9uLCBTX0lSVUdPLCBhdXhfZmlybXdhcmVfcmV2X3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBndWlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSBjaGFyICpidWYpCkBAIC0yMzUyLDcgKzIzNDIsNyBAQAogCQkJKGxvbmcgbG9uZykgYm1jLT5ndWlkWzBdLAogCQkJKGxvbmcgbG9uZykgYm1jLT5ndWlkWzhdKTsKIH0KLURFVklDRV9BVFRSKGd1aWQsIFNfSVJVR08sIGd1aWRfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZ3VpZCwgU19JUlVHTywgZ3VpZF9zaG93LCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmJtY19kZXZfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfZGV2aWNlX2lkLmF0dHIsCkBAIC0yMzkyLDEwICsyMzgyLDEwIEBACiAKIAlpZiAoYm1jLT5pZC5hdXhfZmlybXdhcmVfcmV2aXNpb25fc2V0KQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmJtYy0+cGRldi5kZXYsCi0JCQkJICAgJmJtYy0+YXV4X2Zpcm13YXJlX3Jldl9hdHRyKTsKKwkJCQkgICAmZGV2X2F0dHJfYXV4X2Zpcm13YXJlX3JldmlzaW9uKTsKIAlpZiAoYm1jLT5ndWlkX3NldCkKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZibWMtPnBkZXYuZGV2LAotCQkJCSAgICZibWMtPmd1aWRfYXR0cik7CisJCQkJICAgJmRldl9hdHRyX2d1aWQpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmJtYy0+cGRldik7CiB9CkBAIC0yNDIyLDE2ICsyNDEyLDE0IEBACiAJaW50IGVycjsKIAogCWlmIChibWMtPmlkLmF1eF9maXJtd2FyZV9yZXZpc2lvbl9zZXQpIHsKLQkJYm1jLT5hdXhfZmlybXdhcmVfcmV2X2F0dHIuYXR0ci5uYW1lID0gImF1eF9maXJtd2FyZV9yZXZpc2lvbiI7CiAJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmYm1jLT5wZGV2LmRldiwKLQkJCQkgICAmYm1jLT5hdXhfZmlybXdhcmVfcmV2X2F0dHIpOworCQkJCQkgJmRldl9hdHRyX2F1eF9maXJtd2FyZV9yZXZpc2lvbik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAl9CiAJaWYgKGJtYy0+Z3VpZF9zZXQpIHsKLQkJYm1jLT5ndWlkX2F0dHIuYXR0ci5uYW1lID0gImd1aWQiOwogCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmJtYy0+cGRldi5kZXYsCi0JCQkJICAgJmJtYy0+Z3VpZF9hdHRyKTsKKwkJCQkJICZkZXZfYXR0cl9ndWlkKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2F1eF9maXJtOwogCX0KQEAgLTI0NDEsNyArMjQyOSw3IEBACiBvdXRfYXV4X2Zpcm06CiAJaWYgKGJtYy0+aWQuYXV4X2Zpcm13YXJlX3JldmlzaW9uX3NldCkKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZibWMtPnBkZXYuZGV2LAotCQkJCSAgICZibWMtPmF1eF9maXJtd2FyZV9yZXZfYXR0cik7CisJCQkJICAgJmRldl9hdHRyX2F1eF9maXJtd2FyZV9yZXZpc2lvbik7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc3NpZi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zc2lmLmMKaW5kZXggZTE3OGFjMi4uOTgyYjk2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zc2lmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zc2lmLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKICNkZWZpbmUgUEZYICJpcG1pX3NzaWY6ICIKICNkZWZpbmUgREVWSUNFX05BTUUgImlwbWlfc3NpZiIKQEAgLTk2OCw3ICs5NjksOCBAQAogCiAJCWRvX2dldHRpbWVvZmRheSgmdCk7CiAJCXByX2luZm8oIioqRW5xdWV1ZSAlMDJ4ICUwMng6ICVsZC4lNi42bGRcbiIsCi0JCSAgICAgICBtc2ctPmRhdGFbMF0sIG1zZy0+ZGF0YVsxXSwgdC50dl9zZWMsIHQudHZfdXNlYyk7CisJCSAgICAgICBtc2ctPmRhdGFbMF0sIG1zZy0+ZGF0YVsxXSwKKwkJICAgICAgIChsb25nKSB0LnR2X3NlYywgKGxvbmcpIHQudHZfdXNlYyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9hdDkxL2Nsay1zbG93LmMgYi9kcml2ZXJzL2Nsay9hdDkxL2Nsay1zbG93LmMKaW5kZXggMzJmN2MxYi4uMmYxM2JkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvYXQ5MS9jbGstc2xvdy5jCisrKyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXNsb3cuYwpAQCAtNzAsNiArNzAsNyBAQAogCiAjZGVmaW5lIHRvX2Nsa19zYW05eDVfc2xvdyhodykgY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgY2xrX3NhbTl4NV9zbG93LCBodykKIAorc3RhdGljIHN0cnVjdCBjbGsgKnNsb3dfY2xrOwogCiBzdGF0aWMgaW50IGNsa19zbG93X29zY19wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQogewpAQCAtMzU3LDYgKzM1OCw4IEBACiAJY2xrID0gY2xrX3JlZ2lzdGVyKE5VTEwsICZzbG93Y2stPmh3KTsKIAlpZiAoSVNfRVJSKGNsaykpCiAJCWtmcmVlKHNsb3djayk7CisJZWxzZQorCQlzbG93X2NsayA9IGNsazsKIAogCXJldHVybiBjbGs7CiB9CkBAIC00MzMsNiArNDM2LDggQEAKIAljbGsgPSBjbGtfcmVnaXN0ZXIoTlVMTCwgJnNsb3djay0+aHcpOwogCWlmIChJU19FUlIoY2xrKSkKIAkJa2ZyZWUoc2xvd2NrKTsKKwllbHNlCisJCXNsb3dfY2xrID0gY2xrOwogCiAJcmV0dXJuIGNsazsKIH0KQEAgLTQ2NSwzICs0NzAsMjUgQEAKIAogCW9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIG9mX2Nsa19zcmNfc2ltcGxlX2dldCwgY2xrKTsKIH0KKworLyoKKyAqIEZJWE1FOiBBbGwgc2xvdyBjbGsgdXNlcnMgYXJlIG5vdCBwcm9wZXJseSBjbGFpbWluZyBpdCAoZ2V0ICsgcHJlcGFyZSArCisgKiBlbmFibGUpIGJlZm9yZSB1c2luZyBpdC4KKyAqIElmIGFsbCB1c2VycyBwcm9wZXJseSBjbGFpbWluZyB0aGlzIGNsb2NrIGRlY2lkZSB0aGF0IHRoZXkgZG9uJ3QgbmVlZCBpdAorICogYW55bW9yZSAob3IgYXJlIHJlbW92ZWQpLCBpdCBpcyBkaXNhYmxlZCB3aGlsZSBmYXVsdHkgdXNlcnMgYXJlIHN0aWxsCisgKiByZXF1aXJpbmcgaXQsIGFuZCB0aGUgc3lzdGVtIGhhbmdzLgorICogUHJldmVudCB0aGlzIGNsb2NrIGZyb20gYmVpbmcgZGlzYWJsZWQgdW50aWwgYWxsIHVzZXJzIGFyZSBwcm9wZXJseQorICogcmVxdWVzdGluZyBpdC4KKyAqIE9uY2UgdGhpcyBpcyBkb25lIHdlIHNob3VsZCByZW1vdmUgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIHNsb3dfY2xrIHZhcmlhYmxlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvZl9hdDkxX2Nsa19zbG93X3JldGFpbih2b2lkKQoreworCWlmICghc2xvd19jbGspCisJCXJldHVybiAwOworCisJX19jbGtfZ2V0KHNsb3dfY2xrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoc2xvd19jbGspOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG9mX2F0OTFfY2xrX3Nsb3dfcmV0YWluKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Jlcmxpbi9iZzJxLmMgYi9kcml2ZXJzL2Nsay9iZXJsaW4vYmcycS5jCmluZGV4IDIxNzg0ZTQuLjQ0MGVmODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Jlcmxpbi9iZzJxLmMKKysrIGIvZHJpdmVycy9jbGsvYmVybGluL2JnMnEuYwpAQCAtMjg1LDcgKzI4NSw2IEBACiAJeyAicGJyaWRnZSIsCSJwZXJpZiIsCTE1LCBDTEtfSUdOT1JFX1VOVVNFRCB9LAogCXsgInNkaW8iLAkicGVyaWYiLAkxNiwgQ0xLX0lHTk9SRV9VTlVTRUQgfSwKIAl7ICJuZmMiLAkicGVyaWYiLAkxOCB9LAotCXsgInNtZW1jIiwJInBlcmlmIiwJMTkgfSwKIAl7ICJwY2llIiwJInBlcmlmIiwJMjIgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1wcGMtY29yZW5ldC5jIGIvZHJpdmVycy9jbGsvY2xrLXBwYy1jb3JlbmV0LmMKaW5kZXggYjZlNmM4NS4uMGE0N2Q2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLXBwYy1jb3JlbmV0LmMKKysrIGIvZHJpdmVycy9jbGsvY2xrLXBwYy1jb3JlbmV0LmMKQEAgLTI5MSw3ICsyOTEsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwcGNfY29yZW5ldF9jbGtfZHJpdmVyIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwcGNfY29yZW5ldF9jbGtfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInBwY19jb3JlbmV0X2Nsb2NrIiwKIAkJLm9mX21hdGNoX3RhYmxlID0gcHBjX2Nsa19pZHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9jbGsuYyBiL2RyaXZlcnMvY2xrL2Nsay5jCmluZGV4IGY0OTYzYjcuLmQ0OGFjNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsay5jCisrKyBiL2RyaXZlcnMvY2xrL2Nsay5jCkBAIC0xMzY2LDcgKzEzNjYsNyBAQAogCQluZXdfcmF0ZSA9IGNsay0+b3BzLT5kZXRlcm1pbmVfcmF0ZShjbGstPmh3LCByYXRlLAogCQkJCQkJICAgICZiZXN0X3BhcmVudF9yYXRlLAogCQkJCQkJICAgICZwYXJlbnRfaHcpOwotCQlwYXJlbnQgPSBwYXJlbnRfaHctPmNsazsKKwkJcGFyZW50ID0gcGFyZW50X2h3ID8gcGFyZW50X2h3LT5jbGsgOiBOVUxMOwogCX0gZWxzZSBpZiAoY2xrLT5vcHMtPnJvdW5kX3JhdGUpIHsKIAkJbmV3X3JhdGUgPSBjbGstPm9wcy0+cm91bmRfcmF0ZShjbGstPmh3LCByYXRlLAogCQkJCQkJJmJlc3RfcGFyZW50X3JhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLWNwdS5jIGIvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLWNwdS5jCmluZGV4IDc1YzhjNDUuLjg1MzljNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1jcHUuYworKysgYi9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstY3B1LmMKQEAgLTEyNCwxMCArMTI0LDExIEBACiB7CiAJY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NwdWNsa19yZWdfZGF0YSAqcmVnX2RhdGEgPSBjcHVjbGstPnJlZ19kYXRhOwogCXVuc2lnbmVkIGxvbmcgYWx0X3ByYXRlLCBhbHRfZGl2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlhbHRfcHJhdGUgPSBjbGtfZ2V0X3JhdGUoY3B1Y2xrLT5hbHRfcGFyZW50KTsKIAotCXNwaW5fbG9jayhjcHVjbGstPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKGNwdWNsay0+bG9jaywgZmxhZ3MpOwogCiAJLyoKIAkgKiBJZiB0aGUgb2xkIHBhcmVudCBjbG9jayBzcGVlZCBpcyBsZXNzIHRoYW4gdGhlIGNsb2NrIHNwZWVkCkBAIC0xNjQsNyArMTY1LDcgQEAKIAkJCWNwdWNsay0+cmVnX2Jhc2UgKyByZWdfZGF0YS0+Y29yZV9yZWcpOwogCX0KIAotCXNwaW5fdW5sb2NrKGNwdWNsay0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjcHVjbGstPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTczLDYgKzE3NCw3IEBACiB7CiAJY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NwdWNsa19yZWdfZGF0YSAqcmVnX2RhdGEgPSBjcHVjbGstPnJlZ19kYXRhOwogCWNvbnN0IHN0cnVjdCByb2NrY2hpcF9jcHVjbGtfcmF0ZV90YWJsZSAqcmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmF0ZSA9IHJvY2tjaGlwX2dldF9jcHVjbGtfc2V0dGluZ3MoY3B1Y2xrLCBuZGF0YS0+bmV3X3JhdGUpOwogCWlmICghcmF0ZSkgewpAQCAtMTgxLDcgKzE4Myw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXNwaW5fbG9jayhjcHVjbGstPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKGNwdWNsay0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKG5kYXRhLT5vbGRfcmF0ZSA8IG5kYXRhLT5uZXdfcmF0ZSkKIAkJcm9ja2NoaXBfY3B1Y2xrX3NldF9kaXZpZGVycyhjcHVjbGssIHJhdGUpOwpAQCAtMjAxLDcgKzIwMyw3IEBACiAJaWYgKG5kYXRhLT5vbGRfcmF0ZSA+IG5kYXRhLT5uZXdfcmF0ZSkKIAkJcm9ja2NoaXBfY3B1Y2xrX3NldF9kaXZpZGVycyhjcHVjbGssIHJhdGUpOwogCi0Jc3Bpbl91bmxvY2soY3B1Y2xrLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNwdWNsay0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszMTg4LmMgYi9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszMTg4LmMKaW5kZXggYzU0MDc4OS4uN2ViNjg0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzE4OC5jCisrKyBiL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMxODguYwpAQCAtMjEwLDYgKzIxMCwxNyBAQAogUE5BTUUobXV4X21hY19wKQkJPSB7ICJncGxsIiwgImRwbGwiIH07CiBQTkFNRShtdXhfc2Nsa19tYWNyZWZfcCkJPSB7ICJtYWNfc3JjIiwgImV4dF9ybWlpIiB9OwogCitzdGF0aWMgc3RydWN0IHJvY2tjaGlwX3BsbF9jbG9jayByazMwNjZfcGxsX2Nsa3NbXSBfX2luaXRkYXRhID0geworCVthcGxsXSA9IFBMTChwbGxfcmszMDY2LCBQTExfQVBMTCwgImFwbGwiLCBtdXhfcGxsX3AsIDAsIFJLMjkyOF9QTExfQ09OKDApLAorCQkgICAgIFJLMjkyOF9NT0RFX0NPTiwgMCwgNSwgMCwgcmszMTg4X3BsbF9yYXRlcyksCisJW2RwbGxdID0gUExMKHBsbF9yazMwNjYsIFBMTF9EUExMLCAiZHBsbCIsIG11eF9wbGxfcCwgMCwgUksyOTI4X1BMTF9DT04oNCksCisJCSAgICAgUksyOTI4X01PREVfQ09OLCA0LCA0LCAwLCBOVUxMKSwKKwlbY3BsbF0gPSBQTEwocGxsX3JrMzA2NiwgUExMX0NQTEwsICJjcGxsIiwgbXV4X3BsbF9wLCAwLCBSSzI5MjhfUExMX0NPTig4KSwKKwkJICAgICBSSzI5MjhfTU9ERV9DT04sIDgsIDYsIFJPQ0tDSElQX1BMTF9TWU5DX1JBVEUsIHJrMzE4OF9wbGxfcmF0ZXMpLAorCVtncGxsXSA9IFBMTChwbGxfcmszMDY2LCBQTExfR1BMTCwgImdwbGwiLCBtdXhfcGxsX3AsIDAsIFJLMjkyOF9QTExfQ09OKDEyKSwKKwkJICAgICBSSzI5MjhfTU9ERV9DT04sIDEyLCA3LCBST0NLQ0hJUF9QTExfU1lOQ19SQVRFLCByazMxODhfcGxsX3JhdGVzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgcm9ja2NoaXBfcGxsX2Nsb2NrIHJrMzE4OF9wbGxfY2xrc1tdIF9faW5pdGRhdGEgPSB7CiAJW2FwbGxdID0gUExMKHBsbF9yazMwNjYsIFBMTF9BUExMLCAiYXBsbCIsIG11eF9wbGxfcCwgMCwgUksyOTI4X1BMTF9DT04oMCksCiAJCSAgICAgUksyOTI4X01PREVfQ09OLCAwLCA2LCAwLCByazMxODhfcGxsX3JhdGVzKSwKQEAgLTQyNywxMSArNDM4LDExIEBACiAJLyogaGNsa19wZXJpIGdhdGVzICovCiAJR0FURSgwLCAiaGNsa19wZXJpX2F4aV9tYXRyaXgiLCAiaGNsa19wZXJpIiwgQ0xLX0lHTk9SRV9VTlVTRUQsIFJLMjkyOF9DTEtHQVRFX0NPTig0KSwgMCwgR0ZMQUdTKSwKIAlHQVRFKDAsICJoY2xrX3BlcmlfYWhiX2FyYmkiLCAiaGNsa19wZXJpIiwgQ0xLX0lHTk9SRV9VTlVTRUQsIFJLMjkyOF9DTEtHQVRFX0NPTig0KSwgNiwgR0ZMQUdTKSwKLQlHQVRFKDAsICJoY2xrX2VtZW1fcGVyaSIsICJoY2xrX3BlcmkiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNCksIDcsIEdGTEFHUyksCisJR0FURSgwLCAiaGNsa19lbWVtX3BlcmkiLCAiaGNsa19wZXJpIiwgQ0xLX0lHTk9SRV9VTlVTRUQsIFJLMjkyOF9DTEtHQVRFX0NPTig0KSwgNywgR0ZMQUdTKSwKIAlHQVRFKEhDTEtfRU1BQywgImhjbGtfZW1hYyIsICJoY2xrX3BlcmkiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNyksIDAsIEdGTEFHUyksCiAJR0FURShIQ0xLX05BTkRDMCwgImhjbGtfbmFuZGMwIiwgImhjbGtfcGVyaSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig1KSwgOSwgR0ZMQUdTKSwKLQlHQVRFKDAsICJoY2xrX3VzYl9wZXJpIiwgImhjbGtfcGVyaSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig0KSwgNSwgR0ZMQUdTKSwKLQlHQVRFKEhDTEtfT1RHMCwgImhjbGtfdXNib3RnMCIsICJoY2xrX3BlcmkiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNSksIDEzLCBHRkxBR1MpLAorCUdBVEUoMCwgImhjbGtfdXNiX3BlcmkiLCAiaGNsa19wZXJpIiwgQ0xLX0lHTk9SRV9VTlVTRUQsIFJLMjkyOF9DTEtHQVRFX0NPTig0KSwgNSwgR0ZMQUdTKSwKKwlHQVRFKEhDTEtfT1RHMCwgImhjbGtfdXNib3RnMCIsICJoY2xrX3BlcmkiLCBDTEtfSUdOT1JFX1VOVVNFRCwgUksyOTI4X0NMS0dBVEVfQ09OKDUpLCAxMywgR0ZMQUdTKSwKIAlHQVRFKEhDTEtfSFNBREMsICJoY2xrX2hzYWRjIiwgImhjbGtfcGVyaSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig3KSwgNSwgR0ZMQUdTKSwKIAlHQVRFKEhDTEtfUElERiwgImhjbGtfcGlkZmlsdGVyIiwgImhjbGtfcGVyaSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig3KSwgNiwgR0ZMQUdTKSwKIAlHQVRFKEhDTEtfU0RNTUMsICJoY2xrX3NkbW1jIiwgImhjbGtfcGVyaSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig1KSwgMTAsIEdGTEFHUyksCkBAIC01OTIsNyArNjAzLDggQEAKIAlHQVRFKDAsICJoY2xrX2NpZjEiLCAiaGNsa19jcHUiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNiksIDYsIEdGTEFHUyksCiAJR0FURSgwLCAiaGNsa19oZG1pIiwgImhjbGtfY3B1IiwgMCwgUksyOTI4X0NMS0dBVEVfQ09OKDQpLCAxNCwgR0ZMQUdTKSwKIAotCUdBVEUoSENMS19PVEcxLCAiaGNsa191c2JvdGcxIiwgImhjbGtfcGVyaSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig1KSwgMTQsIEdGTEFHUyksCisJR0FURShIQ0xLX09URzEsICJoY2xrX3VzYm90ZzEiLCAiaGNsa19wZXJpIiwgQ0xLX0lHTk9SRV9VTlVTRUQsCisJCQlSSzI5MjhfQ0xLR0FURV9DT04oNSksIDE0LCBHRkxBR1MpLAogCiAJR0FURSgwLCAiYWNsa19jaWYxIiwgImFjbGtfdmlvMSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig2KSwgNywgR0ZMQUdTKSwKIApAQCAtNjgwLDcgKzY5Miw4IEBACiAJR0FURSgwLCAiaGNsa19pbWVtMCIsICJoY2xrX2NwdSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig0KSwgMTQsIEdGTEFHUyksCiAJR0FURSgwLCAiaGNsa19pbWVtMSIsICJoY2xrX2NwdSIsIDAsIFJLMjkyOF9DTEtHQVRFX0NPTig0KSwgMTUsIEdGTEFHUyksCiAKLQlHQVRFKEhDTEtfT1RHMSwgImhjbGtfdXNib3RnMSIsICJoY2xrX3BlcmkiLCAwLCBSSzI5MjhfQ0xLR0FURV9DT04oNyksIDMsIEdGTEFHUyksCisJR0FURShIQ0xLX09URzEsICJoY2xrX3VzYm90ZzEiLCAiaGNsa19wZXJpIiwgQ0xLX0lHTk9SRV9VTlVTRUQsCisJCQlSSzI5MjhfQ0xLR0FURV9DT04oNyksIDMsIEdGTEFHUyksCiAJR0FURShIQ0xLX0hTSUMsICJoY2xrX2hzaWMiLCAiaGNsa19wZXJpIiwgMCwgUksyOTI4X0NMS0dBVEVfQ09OKDcpLCA0LCBHRkxBR1MpLAogCiAJR0FURShQQ0xLX1RJTUVSMywgInBjbGtfdGltZXIzIiwgInBjbGtfY3B1IiwgMCwgUksyOTI4X0NMS0dBVEVfQ09OKDcpLCA5LCBHRkxBR1MpLApAQCAtNzM1LDggKzc0OCw4IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcmszMDY2YV9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewogCXJrMzE4OF9jb21tb25fY2xrX2luaXQobnApOwotCXJvY2tjaGlwX2Nsa19yZWdpc3Rlcl9wbGxzKHJrMzE4OF9wbGxfY2xrcywKLQkJCQkgICBBUlJBWV9TSVpFKHJrMzE4OF9wbGxfY2xrcyksCisJcm9ja2NoaXBfY2xrX3JlZ2lzdGVyX3BsbHMocmszMDY2X3BsbF9jbGtzLAorCQkJCSAgIEFSUkFZX1NJWkUocmszMDY2X3BsbF9jbGtzKSwKIAkJCQkgICBSSzMwNjZfR1JGX1NPQ19TVEFUVVMpOwogCXJvY2tjaGlwX2Nsa19yZWdpc3Rlcl9icmFuY2hlcyhyazMwNjZhX2Nsa19icmFuY2hlcywKIAkJCQkgIEFSUkFZX1NJWkUocmszMDY2YV9jbGtfYnJhbmNoZXMpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMyODguYyBiL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMyODguYwppbmRleCBhYzZiZTdjLi4xMTE5NGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszMjg4LmMKKysrIGIvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzI4OC5jCkBAIC0xNDUsMjAgKzE0NSwyMCBAQAogCX0KIAogc3RhdGljIHN0cnVjdCByb2NrY2hpcF9jcHVjbGtfcmF0ZV90YWJsZSByazMyODhfY3B1Y2xrX3JhdGVzW10gX19pbml0ZGF0YSA9IHsKLQlSSzMyODhfQ1BVQ0xLX1JBVEUoMTgwMDAwMDAwMCwgMiwgNCwgMiwgNCwgNCksCi0JUkszMjg4X0NQVUNMS19SQVRFKDE3MDQwMDAwMDAsIDIsIDQsIDIsIDQsIDQpLAotCVJLMzI4OF9DUFVDTEtfUkFURSgxNjA4MDAwMDAwLCAyLCA0LCAyLCA0LCA0KSwKLQlSSzMyODhfQ1BVQ0xLX1JBVEUoMTUxMjAwMDAwMCwgMiwgNCwgMiwgNCwgNCksCi0JUkszMjg4X0NQVUNMS19SQVRFKDE0MTYwMDAwMDAsIDIsIDQsIDIsIDQsIDQpLAotCVJLMzI4OF9DUFVDTEtfUkFURSgxMjAwMDAwMDAwLCAyLCA0LCAyLCA0LCA0KSwKLQlSSzMyODhfQ1BVQ0xLX1JBVEUoMTAwODAwMDAwMCwgMiwgNCwgMiwgNCwgNCksCi0JUkszMjg4X0NQVUNMS19SQVRFKCA4MTYwMDAwMDAsIDIsIDQsIDIsIDQsIDQpLAotCVJLMzI4OF9DUFVDTEtfUkFURSggNjk2MDAwMDAwLCAyLCA0LCAyLCA0LCA0KSwKLQlSSzMyODhfQ1BVQ0xLX1JBVEUoIDYwMDAwMDAwMCwgMiwgNCwgMiwgNCwgNCksCi0JUkszMjg4X0NQVUNMS19SQVRFKCA0MDgwMDAwMDAsIDIsIDQsIDIsIDQsIDQpLAotCVJLMzI4OF9DUFVDTEtfUkFURSggMzEyMDAwMDAwLCAyLCA0LCAyLCA0LCA0KSwKLQlSSzMyODhfQ1BVQ0xLX1JBVEUoIDIxNjAwMDAwMCwgMiwgNCwgMiwgNCwgNCksCi0JUkszMjg4X0NQVUNMS19SQVRFKCAxMjYwMDAwMDAsIDIsIDQsIDIsIDQsIDQpLAorCVJLMzI4OF9DUFVDTEtfUkFURSgxODAwMDAwMDAwLCAxLCAzLCAxLCAzLCAzKSwKKwlSSzMyODhfQ1BVQ0xLX1JBVEUoMTcwNDAwMDAwMCwgMSwgMywgMSwgMywgMyksCisJUkszMjg4X0NQVUNMS19SQVRFKDE2MDgwMDAwMDAsIDEsIDMsIDEsIDMsIDMpLAorCVJLMzI4OF9DUFVDTEtfUkFURSgxNTEyMDAwMDAwLCAxLCAzLCAxLCAzLCAzKSwKKwlSSzMyODhfQ1BVQ0xLX1JBVEUoMTQxNjAwMDAwMCwgMSwgMywgMSwgMywgMyksCisJUkszMjg4X0NQVUNMS19SQVRFKDEyMDAwMDAwMDAsIDEsIDMsIDEsIDMsIDMpLAorCVJLMzI4OF9DUFVDTEtfUkFURSgxMDA4MDAwMDAwLCAxLCAzLCAxLCAzLCAzKSwKKwlSSzMyODhfQ1BVQ0xLX1JBVEUoIDgxNjAwMDAwMCwgMSwgMywgMSwgMywgMyksCisJUkszMjg4X0NQVUNMS19SQVRFKCA2OTYwMDAwMDAsIDEsIDMsIDEsIDMsIDMpLAorCVJLMzI4OF9DUFVDTEtfUkFURSggNjAwMDAwMDAwLCAxLCAzLCAxLCAzLCAzKSwKKwlSSzMyODhfQ1BVQ0xLX1JBVEUoIDQwODAwMDAwMCwgMSwgMywgMSwgMywgMyksCisJUkszMjg4X0NQVUNMS19SQVRFKCAzMTIwMDAwMDAsIDEsIDMsIDEsIDMsIDMpLAorCVJLMzI4OF9DUFVDTEtfUkFURSggMjE2MDAwMDAwLCAxLCAzLCAxLCAzLCAzKSwKKwlSSzMyODhfQ1BVQ0xLX1JBVEUoIDEyNjAwMDAwMCwgMSwgMywgMSwgMywgMyksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NwdWNsa19yZWdfZGF0YSByazMyODhfY3B1Y2xrX2RhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FybV9hcmNoX3RpbWVyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FybV9hcmNoX3RpbWVyLmMKaW5kZXggNmE3OWZjNC4uMDk1YzE3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hcm1fYXJjaF90aW1lci5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYXJtX2FyY2hfdGltZXIuYwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAKIAkvKiBSZWdpc3RlciB0aGUgQ1AxNSBiYXNlZCBjb3VudGVyIGlmIHdlIGhhdmUgb25lICovCiAJaWYgKHR5cGUgJiBBUkNIX0NQMTVfVElNRVIpIHsKLQkJaWYgKGFyY2hfdGltZXJfdXNlX3ZpcnR1YWwpCisJCWlmIChJU19FTkFCTEVEKENPTkZJR19BUk02NCkgfHwgYXJjaF90aW1lcl91c2VfdmlydHVhbCkKIAkJCWFyY2hfdGltZXJfcmVhZF9jb3VudGVyID0gYXJjaF9jb3VudGVyX2dldF9jbnR2Y3Q7CiAJCWVsc2UKIAkJCWFyY2hfdGltZXJfcmVhZF9jb3VudGVyID0gYXJjaF9jb3VudGVyX2dldF9jbnRwY3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2JjbV9rb25hX3RpbWVyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2JjbV9rb25hX3RpbWVyLmMKaW5kZXggMDU5NWRjNi4uZjFlMzNkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9iY21fa29uYV90aW1lci5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYmNtX2tvbmFfdGltZXIuYwpAQCAtNjgsOSArNjgsOCBAQAogfQogCiBzdGF0aWMgdm9pZAota29uYV90aW1lcl9nZXRfY291bnRlcih2b2lkICp0aW1lcl9iYXNlLCB1aW50MzJfdCAqbXN3LCB1aW50MzJfdCAqbHN3KQora29uYV90aW1lcl9nZXRfY291bnRlcih2b2lkIF9faW9tZW0gKnRpbWVyX2Jhc2UsIHVpbnQzMl90ICptc3csIHVpbnQzMl90ICpsc3cpCiB7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gSU9NRU0odGltZXJfYmFzZSk7CiAJaW50IGxvb3BfbGltaXQgPSA0OwogCiAJLyoKQEAgLTg2LDkgKzg1LDkgQEAKIAkgKi8KIAogCXdoaWxlICgtLWxvb3BfbGltaXQpIHsKLQkJKm1zdyA9IHJlYWRsKGJhc2UgKyBLT05BX0dQVElNRVJfU1RDSElfT0ZGU0VUKTsKLQkJKmxzdyA9IHJlYWRsKGJhc2UgKyBLT05BX0dQVElNRVJfU1RDTE9fT0ZGU0VUKTsKLQkJaWYgKCptc3cgPT0gcmVhZGwoYmFzZSArIEtPTkFfR1BUSU1FUl9TVENISV9PRkZTRVQpKQorCQkqbXN3ID0gcmVhZGwodGltZXJfYmFzZSArIEtPTkFfR1BUSU1FUl9TVENISV9PRkZTRVQpOworCQkqbHN3ID0gcmVhZGwodGltZXJfYmFzZSArIEtPTkFfR1BUSU1FUl9TVENMT19PRkZTRVQpOworCQlpZiAoKm1zdyA9PSByZWFkbCh0aW1lcl9iYXNlICsgS09OQV9HUFRJTUVSX1NUQ0hJX09GRlNFVCkpCiAJCQlicmVhazsKIAl9CiAJaWYgKCFsb29wX2xpbWl0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2V4eW5vc19tY3QuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvZXh5bm9zX21jdC5jCmluZGV4IDk0MDMwNjEuLjgzNTY0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvZXh5bm9zX21jdC5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvZXh5bm9zX21jdC5jCkBAIC05Nyw4ICs5Nyw4IEBACiAJd3JpdGVsX3JlbGF4ZWQodmFsdWUsIHJlZ19iYXNlICsgb2Zmc2V0KTsKIAogCWlmIChsaWtlbHkob2Zmc2V0ID49IEVYWU5PUzRfTUNUX0xfQkFTRSgwKSkpIHsKLQkJc3RhdF9hZGRyID0gKG9mZnNldCAmIH5FWFlOT1M0X01DVF9MX01BU0spICsgTUNUX0xfV1NUQVRfT0ZGU0VUOwotCQlzd2l0Y2ggKG9mZnNldCAmIEVYWU5PUzRfTUNUX0xfTUFTSykgeworCQlzdGF0X2FkZHIgPSAob2Zmc2V0ICYgRVhZTk9TNF9NQ1RfTF9NQVNLKSArIE1DVF9MX1dTVEFUX09GRlNFVDsKKwkJc3dpdGNoIChvZmZzZXQgJiB+RVhZTk9TNF9NQ1RfTF9NQVNLKSB7CiAJCWNhc2UgTUNUX0xfVENPTl9PRkZTRVQ6CiAJCQltYXNrID0gMSA8PCAzOwkJLyogTF9UQ09OIHdyaXRlIHN0YXR1cyAqLwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX3RtdS5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYwppbmRleCAwZjY2NWI4Li5mMTUwY2E4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX3RtdS5jCkBAIC00MjgsNyArNDI4LDcgQEAKIAljZWQtPmZlYXR1cmVzID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUM7CiAJY2VkLT5mZWF0dXJlcyB8PSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UOwogCWNlZC0+cmF0aW5nID0gMjAwOwotCWNlZC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisJY2VkLT5jcHVtYXNrID0gY3B1X3Bvc3NpYmxlX21hc2s7CiAJY2VkLT5zZXRfbmV4dF9ldmVudCA9IHNoX3RtdV9jbG9ja19ldmVudF9uZXh0OwogCWNlZC0+c2V0X21vZGUgPSBzaF90bXVfY2xvY2tfZXZlbnRfbW9kZTsKIAljZWQtPnN1c3BlbmQgPSBzaF90bXVfY2xvY2tfZXZlbnRfc3VzcGVuZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLWR0LmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS1kdC5jCmluZGV4IGY1NjE0N2EuLmZkZTk3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLWR0LmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEtZHQuYwpAQCAtMjExLDYgKzIxMSwxNyBAQAogCS8qIE9QUHMgbWlnaHQgYmUgcG9wdWxhdGVkIGF0IHJ1bnRpbWUsIGRvbid0IGNoZWNrIGZvciBlcnJvciBoZXJlICovCiAJb2ZfaW5pdF9vcHBfdGFibGUoY3B1X2Rldik7CiAKKwkvKgorCSAqIEJ1dCB3ZSBuZWVkIE9QUCB0YWJsZSB0byBmdW5jdGlvbiBzbyBpZiBpdCBpcyBub3QgdGhlcmUgbGV0J3MKKwkgKiBnaXZlIHBsYXRmb3JtIGNvZGUgY2hhbmNlIHRvIHByb3ZpZGUgaXQgZm9yIHVzLgorCSAqLworCXJldCA9IGRldl9wbV9vcHBfZ2V0X29wcF9jb3VudChjcHVfZGV2KTsKKwlpZiAocmV0IDw9IDApIHsKKwkJcHJfZGVidWcoIk9QUCB0YWJsZSBpcyBub3QgcmVhZHksIGRlZmVycmluZyBwcm9iZVxuIik7CisJCXJldCA9IC1FUFJPQkVfREVGRVI7CisJCWdvdG8gb3V0X2ZyZWVfb3BwOworCX0KKwogCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikgewogCQlyZXQgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggYTA5YTI5Yy4uNDZiZWQ0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0yMDI4LDYgKzIwMjgsMTIgQEAKIAkvKiBEb24ndCBzdGFydCBhbnkgZ292ZXJub3Igb3BlcmF0aW9ucyBpZiB3ZSBhcmUgZW50ZXJpbmcgc3VzcGVuZCAqLwogCWlmIChjcHVmcmVxX3N1c3BlbmRlZCkKIAkJcmV0dXJuIDA7CisJLyoKKwkgKiBHb3Zlcm5vciBtaWdodCBub3QgYmUgaW5pdGlhdGVkIGhlcmUgaWYgQUNQSSBfUFBDIGNoYW5nZWQKKwkgKiBub3RpZmljYXRpb24gaGFwcGVuZWQsIHNvIGNoZWNrIGl0LgorCSAqLworCWlmICghcG9saWN5LT5nb3Zlcm5vcikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocG9saWN5LT5nb3Zlcm5vci0+bWF4X3RyYW5zaXRpb25fbGF0ZW5jeSAmJgogCSAgICBwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbGFkZGVyLmMgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL2xhZGRlci5jCmluZGV4IDM3MjYzZDkuLjQwMWMwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbGFkZGVyLmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9sYWRkZXIuYwpAQCAtNzksMTIgKzc5LDcgQEAKIAogCWxhc3Rfc3RhdGUgPSAmbGRldi0+c3RhdGVzW2xhc3RfaWR4XTsKIAotCWlmICghKGRydi0+c3RhdGVzW2xhc3RfaWR4XS5mbGFncyAmIENQVUlETEVfRkxBR19USU1FX0lOVkFMSUQpKSB7Ci0JCWxhc3RfcmVzaWRlbmN5ID0gY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3koZGV2KSAtIFwKLQkJCQkJIGRydi0+c3RhdGVzW2xhc3RfaWR4XS5leGl0X2xhdGVuY3k7Ci0JfQotCWVsc2UKLQkJbGFzdF9yZXNpZGVuY3kgPSBsYXN0X3N0YXRlLT50aHJlc2hvbGQucHJvbW90aW9uX3RpbWUgKyAxOworCWxhc3RfcmVzaWRlbmN5ID0gY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3koZGV2KSAtIGRydi0+c3RhdGVzW2xhc3RfaWR4XS5leGl0X2xhdGVuY3k7CiAKIAkvKiBjb25zaWRlciBwcm9tb3Rpb24gKi8KIAlpZiAobGFzdF9pZHggPCBkcnYtPnN0YXRlX2NvdW50IC0gMSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYwppbmRleCA2NTlkN2IwLi40MDU4MDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYwpAQCAtMzk2LDggKzM5Niw4IEBACiAJICogcG93ZXIgc3RhdGUgYW5kIG9jY3VycmVuY2Ugb2YgdGhlIHdha2V1cCBldmVudC4KIAkgKgogCSAqIElmIHRoZSBlbnRlcmVkIGlkbGUgc3RhdGUgZGlkbid0IHN1cHBvcnQgcmVzaWRlbmN5IG1lYXN1cmVtZW50cywKLQkgKiB3ZSBhcmUgYmFzaWNhbGx5IGxvc3QgaW4gdGhlIGRhcmsgaG93IG11Y2ggdGltZSBwYXNzZWQuCi0JICogQXMgYSBjb21wcm9taXNlLCBhc3N1bWUgd2Ugc2xlcHQgZm9yIHRoZSB3aG9sZSBleHBlY3RlZCB0aW1lLgorCSAqIHdlIHVzZSB0aGVtIGFueXdheSBpZiB0aGV5IGFyZSBzaG9ydCwgYW5kIGlmIGxvbmcsCisJICogdHJ1bmNhdGUgdG8gdGhlIHdob2xlIGV4cGVjdGVkIHRpbWUuCiAJICoKIAkgKiBBbnkgbWVhc3VyZWQgYW1vdW50IG9mIHRpbWUgd2lsbCBpbmNsdWRlIHRoZSBleGl0IGxhdGVuY3kuCiAJICogU2luY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4gd2hlbiB0aGUgd2FrZXVwIGJlZ3VuLCBub3Qgd2hlbiBpdApAQCAtNDA1LDIzICs0MDUsMTggQEAKIAkgKiB0aGUgbWVhc3VyZWQgYW1vdW50IG9mIHRpbWUgaXMgbGVzcyB0aGFuIHRoZSBleGl0IGxhdGVuY3ksCiAJICogYXNzdW1lIHRoZSBzdGF0ZSB3YXMgbmV2ZXIgcmVhY2hlZCBhbmQgdGhlIGV4aXQgbGF0ZW5jeSBpcyAwLgogCSAqLwotCWlmICh1bmxpa2VseSh0YXJnZXQtPmZsYWdzICYgQ1BVSURMRV9GTEFHX1RJTUVfSU5WQUxJRCkpIHsKLQkJLyogVXNlIHRpbWVyIHZhbHVlIGFzIGlzICovCisKKwkvKiBtZWFzdXJlZCB2YWx1ZSAqLworCW1lYXN1cmVkX3VzID0gY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3koZGV2KTsKKworCS8qIERlZHVjdCBleGl0IGxhdGVuY3kgKi8KKwlpZiAobWVhc3VyZWRfdXMgPiB0YXJnZXQtPmV4aXRfbGF0ZW5jeSkKKwkJbWVhc3VyZWRfdXMgLT0gdGFyZ2V0LT5leGl0X2xhdGVuY3k7CisKKwkvKiBNYWtlIHN1cmUgb3VyIGNvZWZmaWNpZW50cyBkbyBub3QgZXhjZWVkIHVuaXR5ICovCisJaWYgKG1lYXN1cmVkX3VzID4gZGF0YS0+bmV4dF90aW1lcl91cykKIAkJbWVhc3VyZWRfdXMgPSBkYXRhLT5uZXh0X3RpbWVyX3VzOwogCi0JfSBlbHNlIHsKLQkJLyogVXNlIG1lYXN1cmVkIHZhbHVlICovCi0JCW1lYXN1cmVkX3VzID0gY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3koZGV2KTsKLQotCQkvKiBEZWR1Y3QgZXhpdCBsYXRlbmN5ICovCi0JCWlmIChtZWFzdXJlZF91cyA+IHRhcmdldC0+ZXhpdF9sYXRlbmN5KQotCQkJbWVhc3VyZWRfdXMgLT0gdGFyZ2V0LT5leGl0X2xhdGVuY3k7Ci0KLQkJLyogTWFrZSBzdXJlIG91ciBjb2VmZmljaWVudHMgZG8gbm90IGV4Y2VlZCB1bml0eSAqLwotCQlpZiAobWVhc3VyZWRfdXMgPiBkYXRhLT5uZXh0X3RpbWVyX3VzKQotCQkJbWVhc3VyZWRfdXMgPSBkYXRhLT5uZXh0X3RpbWVyX3VzOwotCX0KLQogCS8qIFVwZGF0ZSBvdXIgY29ycmVjdGlvbiByYXRpbyAqLwogCW5ld19mYWN0b3IgPSBkYXRhLT5jb3JyZWN0aW9uX2ZhY3RvcltkYXRhLT5idWNrZXRdOwogCW5ld19mYWN0b3IgLT0gbmV3X2ZhY3RvciAvIERFQ0FZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHcvY29yZS5jIGIvZHJpdmVycy9kbWEvZHcvY29yZS5jCmluZGV4IDM4MDQ3ODUuLjVjMDYyNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2R3L2NvcmUuYworKysgYi9kcml2ZXJzL2RtYS9kdy9jb3JlLmMKQEAgLTE1MDUsNyArMTUwNSw2IEBACiAJZHctPnJlZ3MgPSBjaGlwLT5yZWdzOwogCWNoaXAtPmR3ID0gZHc7CiAKLQlwbV9ydW50aW1lX2VuYWJsZShjaGlwLT5kZXYpOwogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoY2hpcC0+ZGV2KTsKIAogCWR3X3BhcmFtcyA9IGRtYV9yZWFkX2J5YWRkcihjaGlwLT5yZWdzLCBEV19QQVJBTVMpOwpAQCAtMTcwMyw3ICsxNzAyLDYgQEAKIAl9CiAKIAlwbV9ydW50aW1lX3B1dF9zeW5jX3N1c3BlbmQoY2hpcC0+ZGV2KTsKLQlwbV9ydW50aW1lX2Rpc2FibGUoY2hpcC0+ZGV2KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGR3X2RtYV9yZW1vdmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHcvcGxhdGZvcm0uYyBiL2RyaXZlcnMvZG1hL2R3L3BsYXRmb3JtLmMKaW5kZXggYTYzMDE2MS4uMzJlYTFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZHcvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2RtYS9kdy9wbGF0Zm9ybS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CkBAIC0xODUsNiArMTg2LDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisKIAllcnIgPSBkd19kbWFfcHJvYmUoY2hpcCwgcGRhdGEpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2R3X2RtYV9wcm9iZTsKQEAgLTIwNSw2ICsyMDgsNyBAQAogCXJldHVybiAwOwogCiBlcnJfZHdfZG1hX3Byb2JlOgorCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoY2hpcC0+Y2xrKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjE3LDYgKzIyMSw3IEBACiAJCW9mX2RtYV9jb250cm9sbGVyX2ZyZWUocGRldi0+ZGV2Lm9mX25vZGUpOwogCiAJZHdfZG1hX3JlbW92ZShjaGlwKTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNoaXAtPmNsayk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWNyeXN0YWxjb3ZlLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1jcnlzdGFsY292ZS5jCmluZGV4IDU1ZDQ4MDMuLjNkOWUwOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLWNyeXN0YWxjb3ZlLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tY3J5c3RhbGNvdmUuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJZm9yIChncGlvID0gMDsgZ3BpbyA8IENSWVNUQUxDT1ZFX0dQSU9fTlVNOyBncGlvKyspIHsKIAkJaWYgKHBlbmRpbmcgJiBCSVQoZ3BpbykpIHsKIAkJCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKGNnLT5jaGlwLmlycWRvbWFpbiwgZ3Bpbyk7Ci0JCQlnZW5lcmljX2hhbmRsZV9pcnEodmlycSk7CisJCQloYW5kbGVfbmVzdGVkX2lycSh2aXJxKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tZGxuMi5jIGIvZHJpdmVycy9ncGlvL2dwaW8tZGxuMi5jCmluZGV4IDk3OGI1MWUuLmNlM2MxNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLWRsbjIuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1kbG4yLmMKQEAgLTQ3LDEzICs0Nyw2IEBACiAKICNkZWZpbmUgRExOMl9HUElPX01BWF9QSU5TIDMyCiAKLXN0cnVjdCBkbG4yX2lycV93b3JrIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yOwotCWludCBwaW47Ci0JaW50IHR5cGU7Ci19OwotCiBzdHJ1Y3QgZGxuMl9ncGlvIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCBncGlvX2NoaXAgZ3BpbzsKQEAgLTY0LDEwICs1NywxMiBAQAogCSAqLwogCURFQ0xBUkVfQklUTUFQKG91dHB1dF9lbmFibGVkLCBETE4yX0dQSU9fTUFYX1BJTlMpOwogCi0JREVDTEFSRV9CSVRNQVAoaXJxc19tYXNrZWQsIERMTjJfR1BJT19NQVhfUElOUyk7Ci0JREVDTEFSRV9CSVRNQVAoaXJxc19lbmFibGVkLCBETE4yX0dQSU9fTUFYX1BJTlMpOwotCURFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZywgRExOMl9HUElPX01BWF9QSU5TKTsKLQlzdHJ1Y3QgZGxuMl9pcnFfd29yayAqaXJxX3dvcms7CisJLyogYWN0aXZlIElSUXMgLSBub3Qgc3luY2VkIHRvIGhhcmR3YXJlICovCisJREVDTEFSRV9CSVRNQVAodW5tYXNrZWRfaXJxcywgRExOMl9HUElPX01BWF9QSU5TKTsKKwkvKiBhY3RpdmUgSVJRUyAtIHN5bmNlZCB0byBoYXJkd2FyZSAqLworCURFQ0xBUkVfQklUTUFQKGVuYWJsZWRfaXJxcywgRExOMl9HUElPX01BWF9QSU5TKTsKKwlpbnQgaXJxX3R5cGVbRExOMl9HUElPX01BWF9QSU5TXTsKKwlzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7CiB9OwogCiBzdHJ1Y3QgZGxuMl9ncGlvX3BpbiB7CkBAIC0xNDEsMTYgKzEzNiwxNiBAQAogCXJldHVybiAhIXJldDsKIH0KIAotc3RhdGljIHZvaWQgZGxuMl9ncGlvX3Bpbl9zZXRfb3V0X3ZhbChzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBwaW4sIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3Bpbl9zZXRfb3V0X3ZhbChzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHBpbiwgaW50IHZhbHVlKQogewogCXN0cnVjdCBkbG4yX2dwaW9fcGluX3ZhbCByZXEgPSB7CiAJCS5waW4gPSBjcHVfdG9fbGUxNihwaW4pLAogCQkudmFsdWUgPSB2YWx1ZSwKIAl9OwogCi0JZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBETE4yX0dQSU9fUElOX1NFVF9PVVRfVkFMLCAmcmVxLAotCQkJIHNpemVvZihyZXEpKTsKKwlyZXR1cm4gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBETE4yX0dQSU9fUElOX1NFVF9PVVRfVkFMLCAmcmVxLAorCQkJCXNpemVvZihyZXEpKTsKIH0KIAogI2RlZmluZSBETE4yX0dQSU9fRElSRUNUSU9OX0lOCQkwCkBAIC0yNjcsNiArMjYyLDEzIEBACiBzdGF0aWMgaW50IGRsbjJfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKIAkJCQkgICAgICBpbnQgdmFsdWUpCiB7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKwlpbnQgcmV0OworCisJcmV0ID0gZGxuMl9ncGlvX3Bpbl9zZXRfb3V0X3ZhbChkbG4yLCBvZmZzZXQsIHZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCXJldHVybiBkbG4yX2dwaW9fc2V0X2RpcmVjdGlvbihjaGlwLCBvZmZzZXQsIERMTjJfR1BJT19ESVJFQ1RJT05fT1VUKTsKIH0KIApAQCAtMjk3LDM2ICsyOTksMTMgQEAKIAkJCQkmcmVxLCBzaXplb2YocmVxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRsbjJfaXJxX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KQotewotCXN0cnVjdCBkbG4yX2lycV93b3JrICppdyA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgZGxuMl9pcnFfd29yaywgd29yayk7Ci0Jc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGl3LT5kbG4yOwotCXU4IHR5cGUgPSBpdy0+dHlwZSAmIERMTjJfR1BJT19FVkVOVF9NQVNLOwotCi0JaWYgKHRlc3RfYml0KGl3LT5waW4sIGRsbjItPmlycXNfZW5hYmxlZCkpCi0JCWRsbjJfZ3Bpb19zZXRfZXZlbnRfY2ZnKGRsbjIsIGl3LT5waW4sIHR5cGUsIDApOwotCWVsc2UKLQkJZGxuMl9ncGlvX3NldF9ldmVudF9jZmcoZGxuMiwgaXctPnBpbiwgRExOMl9HUElPX0VWRU5UX05PTkUsIDApOwotfQotCi1zdGF0aWMgdm9pZCBkbG4yX2lycV9lbmFibGUoc3RydWN0IGlycV9kYXRhICppcnFkKQorc3RhdGljIHZvaWQgZGxuMl9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKIHsKIAlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOwogCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOwogCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOwogCi0Jc2V0X2JpdChwaW4sIGRsbjItPmlycXNfZW5hYmxlZCk7Ci0Jc2NoZWR1bGVfd29yaygmZGxuMi0+aXJxX3dvcmtbcGluXS53b3JrKTsKLX0KLQotc3RhdGljIHZvaWQgZGxuMl9pcnFfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCi17Ci0Jc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShpcnFkKTsKLQlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKLQlpbnQgcGluID0gaXJxZF90b19od2lycShpcnFkKTsKLQotCWNsZWFyX2JpdChwaW4sIGRsbjItPmlycXNfZW5hYmxlZCk7Ci0Jc2NoZWR1bGVfd29yaygmZGxuMi0+aXJxX3dvcmtbcGluXS53b3JrKTsKKwlzZXRfYml0KHBpbiwgZGxuMi0+dW5tYXNrZWRfaXJxcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRsbjJfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICppcnFkKQpAQCAtMzM1LDI3ICszMTQsNyBAQAogCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOwogCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOwogCi0Jc2V0X2JpdChwaW4sIGRsbjItPmlycXNfbWFza2VkKTsKLX0KLQotc3RhdGljIHZvaWQgZGxuMl9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKLXsKLQlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOwotCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRsbjItPmdwaW8uZGV2OwotCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChwaW4sIGRsbjItPmlycXNfcGVuZGluZykpIHsKLQkJaW50IGlycTsKLQotCQlpcnEgPSBpcnFfZmluZF9tYXBwaW5nKGRsbjItPmdwaW8uaXJxZG9tYWluLCBwaW4pOwotCQlpZiAoIWlycSkgewotCQkJZGV2X2VycihkZXYsICJwaW4gJWQgbm90IG1hcHBlZCB0byBJUlFcbiIsIHBpbik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKLQl9CisJY2xlYXJfYml0KHBpbiwgZGxuMi0+dW5tYXNrZWRfaXJxcyk7CiB9CiAKIHN0YXRpYyBpbnQgZGxuMl9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICppcnFkLCB1bnNpZ25lZCB0eXBlKQpAQCAtMzY2LDE5ICszMjUsMTkgQEAKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKLQkJZGxuMi0+aXJxX3dvcmtbcGluXS50eXBlID0gRExOMl9HUElPX0VWRU5UX0xWTF9ISUdIOworCQlkbG4yLT5pcnFfdHlwZVtwaW5dID0gRExOMl9HUElPX0VWRU5UX0xWTF9ISUdIOwogCQlicmVhazsKIAljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKLQkJZGxuMi0+aXJxX3dvcmtbcGluXS50eXBlID0gRExOMl9HUElPX0VWRU5UX0xWTF9MT1c7CisJCWRsbjItPmlycV90eXBlW3Bpbl0gPSBETE4yX0dQSU9fRVZFTlRfTFZMX0xPVzsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6Ci0JCWRsbjItPmlycV93b3JrW3Bpbl0udHlwZSA9IERMTjJfR1BJT19FVkVOVF9DSEFOR0U7CisJCWRsbjItPmlycV90eXBlW3Bpbl0gPSBETE4yX0dQSU9fRVZFTlRfQ0hBTkdFOwogCQlicmVhazsKIAljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgotCQlkbG4yLT5pcnFfd29ya1twaW5dLnR5cGUgPSBETE4yX0dQSU9fRVZFTlRfQ0hBTkdFX1JJU0lORzsKKwkJZGxuMi0+aXJxX3R5cGVbcGluXSA9IERMTjJfR1BJT19FVkVOVF9DSEFOR0VfUklTSU5HOwogCQlicmVhazsKIAljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKLQkJZGxuMi0+aXJxX3dvcmtbcGluXS50eXBlID0gRExOMl9HUElPX0VWRU5UX0NIQU5HRV9GQUxMSU5HOworCQlkbG4yLT5pcnFfdHlwZVtwaW5dID0gRExOMl9HUElPX0VWRU5UX0NIQU5HRV9GQUxMSU5HOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM4NywxMyArMzQ2LDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGRsbjJfaXJxX2J1c19sb2NrKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCisJbXV0ZXhfbG9jaygmZGxuMi0+aXJxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBkbG4yX2lycV9idXNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOworCWludCBlbmFibGVkLCB1bm1hc2tlZDsKKwl1bnNpZ25lZCB0eXBlOworCWludCByZXQ7CisKKwllbmFibGVkID0gdGVzdF9iaXQocGluLCBkbG4yLT5lbmFibGVkX2lycXMpOworCXVubWFza2VkID0gdGVzdF9iaXQocGluLCBkbG4yLT51bm1hc2tlZF9pcnFzKTsKKworCWlmIChlbmFibGVkICE9IHVubWFza2VkKSB7CisJCWlmICh1bm1hc2tlZCkgeworCQkJdHlwZSA9IGRsbjItPmlycV90eXBlW3Bpbl0gJiBETE4yX0dQSU9fRVZFTlRfTUFTSzsKKwkJCXNldF9iaXQocGluLCBkbG4yLT5lbmFibGVkX2lycXMpOworCQl9IGVsc2UgeworCQkJdHlwZSA9IERMTjJfR1BJT19FVkVOVF9OT05FOworCQkJY2xlYXJfYml0KHBpbiwgZGxuMi0+ZW5hYmxlZF9pcnFzKTsKKwkJfQorCisJCXJldCA9IGRsbjJfZ3Bpb19zZXRfZXZlbnRfY2ZnKGRsbjIsIHBpbiwgdHlwZSwgMCk7CisJCWlmIChyZXQpCisJCQlkZXZfZXJyKGRsbjItPmdwaW8uZGV2LCAiZmFpbGVkIHRvIHNldCBldmVudFxuIik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkbG4yLT5pcnFfbG9jayk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZGxuMl9ncGlvX2lycWNoaXAgPSB7CiAJLm5hbWUgPSAiZGxuMi1pcnEiLAotCS5pcnFfZW5hYmxlID0gZGxuMl9pcnFfZW5hYmxlLAotCS5pcnFfZGlzYWJsZSA9IGRsbjJfaXJxX2Rpc2FibGUsCiAJLmlycV9tYXNrID0gZGxuMl9pcnFfbWFzaywKIAkuaXJxX3VubWFzayA9IGRsbjJfaXJxX3VubWFzaywKIAkuaXJxX3NldF90eXBlID0gZGxuMl9pcnFfc2V0X3R5cGUsCisJLmlycV9idXNfbG9jayA9IGRsbjJfaXJxX2J1c19sb2NrLAorCS5pcnFfYnVzX3N5bmNfdW5sb2NrID0gZGxuMl9pcnFfYnVzX3VubG9jaywKIH07CiAKIHN0YXRpYyB2b2lkIGRsbjJfZ3Bpb19ldmVudChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1MTYgZWNobywKQEAgLTQyNSwxNCArNDIxLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICghdGVzdF9iaXQocGluLCBkbG4yLT5pcnFzX2VuYWJsZWQpKQotCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KHBpbiwgZGxuMi0+aXJxc19tYXNrZWQpKSB7Ci0JCXNldF9iaXQocGluLCBkbG4yLT5pcnFzX3BlbmRpbmcpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3dpdGNoIChkbG4yLT5pcnFfd29ya1twaW5dLnR5cGUpIHsKKwlzd2l0Y2ggKGRsbjItPmlycV90eXBlW3Bpbl0pIHsKIAljYXNlIERMTjJfR1BJT19FVkVOVF9DSEFOR0VfUklTSU5HOgogCQlpZiAoZXZlbnQtPnZhbHVlKQogCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CkBAIC00NTEsNyArNDQwLDcgQEAKIAlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJaW50IHBpbnM7Ci0JaW50IGksIHJldDsKKwlpbnQgcmV0OwogCiAJcGlucyA9IGRsbjJfZ3Bpb19nZXRfcGluX2NvdW50KHBkZXYpOwogCWlmIChwaW5zIDwgMCkgewpAQCAtNDY3LDE1ICs0NTYsNyBAQAogCWlmICghZGxuMikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkbG4yLT5pcnFfd29yayA9IGRldm1fa2NhbGxvYygmcGRldi0+ZGV2LCBwaW5zLAotCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgZGxuMl9pcnFfd29yayksIEdGUF9LRVJORUwpOwotCWlmICghZGxuMi0+aXJxX3dvcmspCi0JCXJldHVybiAtRU5PTUVNOwotCWZvciAoaSA9IDA7IGkgPCBwaW5zOyBpKyspIHsKLQkJSU5JVF9XT1JLKCZkbG4yLT5pcnFfd29ya1tpXS53b3JrLCBkbG4yX2lycV93b3JrKTsKLQkJZGxuMi0+aXJxX3dvcmtbaV0ucGluID0gaTsKLQkJZGxuMi0+aXJxX3dvcmtbaV0uZGxuMiA9IGRsbjI7Ci0JfQorCW11dGV4X2luaXQoJmRsbjItPmlycV9sb2NrKTsKIAogCWRsbjItPnBkZXYgPSBwZGV2OwogCkBAIC01MjksMTEgKzUxMCw4IEBACiBzdGF0aWMgaW50IGRsbjJfZ3Bpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IGk7CiAKIAlkbG4yX3VucmVnaXN0ZXJfZXZlbnRfY2IocGRldiwgRExOMl9HUElPX0NPTkRJVElPTl9NRVRfRVYpOwotCWZvciAoaSA9IDA7IGkgPCBkbG4yLT5ncGlvLm5ncGlvOyBpKyspCi0JCWZsdXNoX3dvcmsoJmRsbjItPmlycV93b3JrW2ldLndvcmspOwogCWdwaW9jaGlwX3JlbW92ZSgmZGxuMi0+Z3Bpbyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWdyZ3Bpby5jIGIvZHJpdmVycy9ncGlvL2dwaW8tZ3JncGlvLmMKaW5kZXggMDlkYWFmMi4uM2E1YTcxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZ3JncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tZ3JncGlvLmMKQEAgLTQ0MSw3ICs0NDEsOCBAQAogCWVyciA9IGdwaW9jaGlwX2FkZChnYyk7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiQ291bGQgbm90IGFkZCBncGlvY2hpcFxuIik7Ci0JCWlycV9kb21haW5fcmVtb3ZlKHByaXYtPmRvbWFpbik7CisJCWlmIChwcml2LT5kb21haW4pCisJCQlpcnFfZG9tYWluX3JlbW92ZShwcml2LT5kb21haW4pOwogCQlyZXR1cm4gZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmMKaW5kZXggNjA0ZGJlNi4uMDgyNjFmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jCkBAIC00NSw4ICs0NSwxNCBAQAogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXQgPSBnYy0+b2ZfeGxhdGUoZ2MsICZnZ19kYXRhLT5ncGlvc3BlYywgZ2dfZGF0YS0+ZmxhZ3MpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gZmFsc2U7CisJaWYgKHJldCA8IDApIHsKKwkJLyogV2UndmUgZm91bmQgdGhlIGdwaW8gY2hpcCwgYnV0IHRoZSB0cmFuc2xhdGlvbiBmYWlsZWQuCisJCSAqIFJldHVybiB0cnVlIHRvIHN0b3AgbG9va2luZyBhbmQgcmV0dXJuIHRoZSB0cmFuc2xhdGlvbgorCQkgKiBlcnJvciB2aWEgb3V0X2dwaW8KKwkJICovCisJCWdnX2RhdGEtPm91dF9ncGlvID0gRVJSX1BUUihyZXQpOworCQlyZXR1cm4gdHJ1ZTsKKwkgfQogCiAJZ2dfZGF0YS0+b3V0X2dwaW8gPSBncGlvY2hpcF9nZXRfZGVzYyhnYywgcmV0KTsKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLXN5c2ZzLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1zeXNmcy5jCmluZGV4IDJhYzE4MDAuLmY2MmFhMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWItc3lzZnMuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGNvbnN0IERFVklDRV9BVFRSKHZhbHVlLCAwNjQ0LAorc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCAwNjQ0LAogCQlncGlvX3ZhbHVlX3Nob3csIGdwaW9fdmFsdWVfc3RvcmUpOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb19zeXNmc19pcnEoaW50IGlycSwgdm9pZCAqcHJpdikKQEAgLTM1MywxNyArMzUzLDQ2IEBACiAJcmV0dXJuIHN0YXR1cyA/IDogc2l6ZTsKIH0KIAotc3RhdGljIGNvbnN0IERFVklDRV9BVFRSKGFjdGl2ZV9sb3csIDA2NDQsCitzdGF0aWMgREVWSUNFX0FUVFIoYWN0aXZlX2xvdywgMDY0NCwKIAkJZ3Bpb19hY3RpdmVfbG93X3Nob3csIGdwaW9fYWN0aXZlX2xvd19zdG9yZSk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpncGlvX2F0dHJzW10gPSB7CitzdGF0aWMgdW1vZGVfdCBncGlvX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgaW50IG4pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBncGlvX2Rlc2MgKmRlc2MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bW9kZV90IG1vZGUgPSBhdHRyLT5tb2RlOworCWJvb2wgc2hvd19kaXJlY3Rpb24gPSB0ZXN0X2JpdChGTEFHX1NZU0ZTX0RJUiwgJmRlc2MtPmZsYWdzKTsKKworCWlmIChhdHRyID09ICZkZXZfYXR0cl9kaXJlY3Rpb24uYXR0cikgeworCQlpZiAoIXNob3dfZGlyZWN0aW9uKQorCQkJbW9kZSA9IDA7CisJfSBlbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9lZGdlLmF0dHIpIHsKKwkJaWYgKGdwaW9kX3RvX2lycShkZXNjKSA8IDApCisJCQltb2RlID0gMDsKKwkJaWYgKCFzaG93X2RpcmVjdGlvbiAmJiB0ZXN0X2JpdChGTEFHX0lTX09VVCwgJmRlc2MtPmZsYWdzKSkKKwkJCW1vZGUgPSAwOworCX0KKworCXJldHVybiBtb2RlOworfQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZ3Bpb19hdHRyc1tdID0geworCSZkZXZfYXR0cl9kaXJlY3Rpb24uYXR0ciwKKwkmZGV2X2F0dHJfZWRnZS5hdHRyLAogCSZkZXZfYXR0cl92YWx1ZS5hdHRyLAogCSZkZXZfYXR0cl9hY3RpdmVfbG93LmF0dHIsCiAJTlVMTCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGdwaW9fYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSAoc3RydWN0IGF0dHJpYnV0ZSAqKikgZ3Bpb19hdHRycywKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGdwaW9fZ3JvdXAgPSB7CisJLmF0dHJzID0gZ3Bpb19hdHRycywKKwkuaXNfdmlzaWJsZSA9IGdwaW9faXNfdmlzaWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpncGlvX2dyb3Vwc1tdID0geworCSZncGlvX2dyb3VwLAorCU5VTEwKIH07CiAKIC8qCkBAIC00MDAsMTYgKzQyOSwxMyBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKG5ncGlvLCAwNDQ0LCBjaGlwX25ncGlvX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqZ3Bpb2NoaXBfYXR0cnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpncGlvY2hpcF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9iYXNlLmF0dHIsCiAJJmRldl9hdHRyX2xhYmVsLmF0dHIsCiAJJmRldl9hdHRyX25ncGlvLmF0dHIsCiAJTlVMTCwKIH07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGdwaW9jaGlwX2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gKHN0cnVjdCBhdHRyaWJ1dGUgKiopIGdwaW9jaGlwX2F0dHJzLAotfTsKK0FUVFJJQlVURV9HUk9VUFMoZ3Bpb2NoaXApOwogCiAvKgogICogL3N5cy9jbGFzcy9ncGlvL2V4cG9ydCAuLi4gd3JpdGUtb25seQpAQCAtNTU2LDQ1ICs1ODIsMzAgQEAKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAKLQlpZiAoIWRlc2MtPmNoaXAtPmRpcmVjdGlvbl9pbnB1dCB8fCAhZGVzYy0+Y2hpcC0+ZGlyZWN0aW9uX291dHB1dCkKLQkJZGlyZWN0aW9uX21heV9jaGFuZ2UgPSBmYWxzZTsKKwlpZiAoZGVzYy0+Y2hpcC0+ZGlyZWN0aW9uX2lucHV0ICYmIGRlc2MtPmNoaXAtPmRpcmVjdGlvbl9vdXRwdXQgJiYKKwkJCWRpcmVjdGlvbl9tYXlfY2hhbmdlKSB7CisJCXNldF9iaXQoRkxBR19TWVNGU19ESVIsICZkZXNjLT5mbGFncyk7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAKIAlvZmZzZXQgPSBncGlvX2NoaXBfaHdncGlvKGRlc2MpOwogCWlmIChkZXNjLT5jaGlwLT5uYW1lcyAmJiBkZXNjLT5jaGlwLT5uYW1lc1tvZmZzZXRdKQogCQlpb25hbWUgPSBkZXNjLT5jaGlwLT5uYW1lc1tvZmZzZXRdOwogCi0JZGV2ID0gZGV2aWNlX2NyZWF0ZSgmZ3Bpb19jbGFzcywgZGVzYy0+Y2hpcC0+ZGV2LCBNS0RFVigwLCAwKSwKLQkJCSAgICBkZXNjLCBpb25hbWUgPyBpb25hbWUgOiAiZ3BpbyV1IiwKLQkJCSAgICBkZXNjX3RvX2dwaW8oZGVzYykpOworCWRldiA9IGRldmljZV9jcmVhdGVfd2l0aF9ncm91cHMoJmdwaW9fY2xhc3MsIGRlc2MtPmNoaXAtPmRldiwKKwkJCQkJTUtERVYoMCwgMCksIGRlc2MsIGdwaW9fZ3JvdXBzLAorCQkJCQlpb25hbWUgPyBpb25hbWUgOiAiZ3BpbyV1IiwKKwkJCQkJZGVzY190b19ncGlvKGRlc2MpKTsKIAlpZiAoSVNfRVJSKGRldikpIHsKIAkJc3RhdHVzID0gUFRSX0VSUihkZXYpOwogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIAotCXN0YXR1cyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmZ3Bpb19hdHRyX2dyb3VwKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZhaWxfdW5yZWdpc3Rlcl9kZXZpY2U7Ci0KLQlpZiAoZGlyZWN0aW9uX21heV9jaGFuZ2UpIHsKLQkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpcmVjdGlvbik7Ci0JCWlmIChzdGF0dXMpCi0JCQlnb3RvIGZhaWxfdW5yZWdpc3Rlcl9kZXZpY2U7Ci0JfQotCi0JaWYgKGdwaW9kX3RvX2lycShkZXNjKSA+PSAwICYmIChkaXJlY3Rpb25fbWF5X2NoYW5nZSB8fAotCQkJCSAgICAgICAhdGVzdF9iaXQoRkxBR19JU19PVVQsICZkZXNjLT5mbGFncykpKSB7Ci0JCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9lZGdlKTsKLQkJaWYgKHN0YXR1cykKLQkJCWdvdG8gZmFpbF91bnJlZ2lzdGVyX2RldmljZTsKLQl9Ci0KIAlzZXRfYml0KEZMQUdfRVhQT1JULCAmZGVzYy0+ZmxhZ3MpOwogCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CiAJcmV0dXJuIDA7CiAKLWZhaWxfdW5yZWdpc3Rlcl9kZXZpY2U6Ci0JZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKIGZhaWxfdW5sb2NrOgogCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CiAJZ3Bpb2RfZGJnKGRlc2MsICIlczogc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKQEAgLTcxOCw2ICs3MjksNyBAQAogCQlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmZ3Bpb19jbGFzcywgTlVMTCwgZGVzYywgbWF0Y2hfZXhwb3J0KTsKIAkJaWYgKGRldikgewogCQkJZ3Bpb19zZXR1cF9pcnEoZGVzYywgZGV2LCAwKTsKKwkJCWNsZWFyX2JpdChGTEFHX1NZU0ZTX0RJUiwgJmRlc2MtPmZsYWdzKTsKIAkJCWNsZWFyX2JpdChGTEFHX0VYUE9SVCwgJmRlc2MtPmZsYWdzKTsKIAkJfSBlbHNlCiAJCQlzdGF0dXMgPSAtRU5PREVWOwpAQCAtNzUwLDEzICs3NjIsMTMgQEAKIAogCS8qIHVzZSBjaGlwLT5iYXNlIGZvciB0aGUgSUQ7IGl0J3MgYWxyZWFkeSBrbm93biB0byBiZSB1bmlxdWUgKi8KIAltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKLQlkZXYgPSBkZXZpY2VfY3JlYXRlKCZncGlvX2NsYXNzLCBjaGlwLT5kZXYsIE1LREVWKDAsIDApLCBjaGlwLAotCQkJCSJncGlvY2hpcCVkIiwgY2hpcC0+YmFzZSk7Ci0JaWYgKCFJU19FUlIoZGV2KSkgewotCQlzdGF0dXMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKLQkJCQkmZ3Bpb2NoaXBfYXR0cl9ncm91cCk7Ci0JfSBlbHNlCisJZGV2ID0gZGV2aWNlX2NyZWF0ZV93aXRoX2dyb3VwcygmZ3Bpb19jbGFzcywgY2hpcC0+ZGV2LCBNS0RFVigwLCAwKSwKKwkJCQkJY2hpcCwgZ3Bpb2NoaXBfZ3JvdXBzLAorCQkJCQkiZ3Bpb2NoaXAlZCIsIGNoaXAtPmJhc2UpOworCWlmIChJU19FUlIoZGV2KSkKIAkJc3RhdHVzID0gUFRSX0VSUihkZXYpOworCWVsc2UKKwkJc3RhdHVzID0gMDsKIAljaGlwLT5leHBvcnRlZCA9IChzdGF0dXMgPT0gMCk7CiAJbXV0ZXhfdW5sb2NrKCZzeXNmc19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKaW5kZXggNDg3YWZlNi4uNTY4YWEyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCkBAIC0yNDgsMjkgKzI0OCwzMCBAQAogCQliYXNlID0gZ3Bpb2NoaXBfZmluZF9iYXNlKGNoaXAtPm5ncGlvKTsKIAkJaWYgKGJhc2UgPCAwKSB7CiAJCQlzdGF0dXMgPSBiYXNlOwotCQkJZ290byB1bmxvY2s7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJCWdvdG8gZXJyX2ZyZWVfZGVzY3M7CiAJCX0KIAkJY2hpcC0+YmFzZSA9IGJhc2U7CiAJfQogCiAJc3RhdHVzID0gZ3Bpb2NoaXBfYWRkX3RvX2xpc3QoY2hpcCk7CisJaWYgKHN0YXR1cykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJZ290byBlcnJfZnJlZV9kZXNjczsKKwl9CiAKLQlpZiAoc3RhdHVzID09IDApIHsKLQkJZm9yIChpZCA9IDA7IGlkIDwgY2hpcC0+bmdwaW87IGlkKyspIHsKLQkJCXN0cnVjdCBncGlvX2Rlc2MgKmRlc2MgPSAmZGVzY3NbaWRdOwotCQkJZGVzYy0+Y2hpcCA9IGNoaXA7CisJZm9yIChpZCA9IDA7IGlkIDwgY2hpcC0+bmdwaW87IGlkKyspIHsKKwkJc3RydWN0IGdwaW9fZGVzYyAqZGVzYyA9ICZkZXNjc1tpZF07CiAKLQkJCS8qIFJFVklTSVQ6ICBtb3N0IGhhcmR3YXJlIGluaXRpYWxpemVzIEdQSU9zIGFzCi0JCQkgKiBpbnB1dHMgKG9mdGVuIHdpdGggcHVsbHVwcyBlbmFibGVkKSBzbyBwb3dlcgotCQkJICogdXNhZ2UgaXMgbWluaW1pemVkLiAgTGludXggY29kZSBzaG91bGQgc2V0IHRoZQotCQkJICogZ3BpbyBkaXJlY3Rpb24gZmlyc3QgdGhpbmc7IGJ1dCB1bnRpbCBpdCBkb2VzLAotCQkJICogYW5kIGluIGNhc2UgY2hpcC0+Z2V0X2RpcmVjdGlvbiBpcyBub3Qgc2V0LAotCQkJICogd2UgbWF5IGV4cG9zZSB0aGUgd3JvbmcgZGlyZWN0aW9uIGluIHN5c2ZzLgotCQkJICovCi0JCQlkZXNjLT5mbGFncyA9ICFjaGlwLT5kaXJlY3Rpb25faW5wdXQKLQkJCQk/ICgxIDw8IEZMQUdfSVNfT1VUKQotCQkJCTogMDsKLQkJfQorCQlkZXNjLT5jaGlwID0gY2hpcDsKKworCQkvKiBSRVZJU0lUOiBtb3N0IGhhcmR3YXJlIGluaXRpYWxpemVzIEdQSU9zIGFzIGlucHV0cyAob2Z0ZW4KKwkJICogd2l0aCBwdWxsdXBzIGVuYWJsZWQpIHNvIHBvd2VyIHVzYWdlIGlzIG1pbmltaXplZC4gTGludXgKKwkJICogY29kZSBzaG91bGQgc2V0IHRoZSBncGlvIGRpcmVjdGlvbiBmaXJzdCB0aGluZzsgYnV0IHVudGlsCisJCSAqIGl0IGRvZXMsIGFuZCBpbiBjYXNlIGNoaXAtPmdldF9kaXJlY3Rpb24gaXMgbm90IHNldCwgd2UgbWF5CisJCSAqIGV4cG9zZSB0aGUgd3JvbmcgZGlyZWN0aW9uIGluIHN5c2ZzLgorCQkgKi8KKwkJZGVzYy0+ZmxhZ3MgPSAhY2hpcC0+ZGlyZWN0aW9uX2lucHV0ID8gKDEgPDwgRkxBR19JU19PVVQpIDogMDsKIAl9CiAKIAljaGlwLT5kZXNjID0gZGVzY3M7CkBAIC0yODQsMTIgKzI4NSw5IEBACiAJb2ZfZ3Bpb2NoaXBfYWRkKGNoaXApOwogCWFjcGlfZ3Bpb2NoaXBfYWRkKGNoaXApOwogCi0JaWYgKHN0YXR1cykKLQkJZ290byBmYWlsOwotCiAJc3RhdHVzID0gZ3Bpb2NoaXBfZXhwb3J0KGNoaXApOwogCWlmIChzdGF0dXMpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBlcnJfcmVtb3ZlX2NoaXA7CiAKIAlwcl9kZWJ1ZygiJXM6IHJlZ2lzdGVyZWQgR1BJT3MgJWQgdG8gJWQgb24gZGV2aWNlOiAlc1xuIiwgX19mdW5jX18sCiAJCWNoaXAtPmJhc2UsIGNoaXAtPmJhc2UgKyBjaGlwLT5uZ3BpbyAtIDEsCkBAIC0yOTcsMTEgKzI5NSwxNSBAQAogCiAJcmV0dXJuIDA7CiAKLXVubG9jazoKK2Vycl9yZW1vdmVfY2hpcDoKKwlhY3BpX2dwaW9jaGlwX3JlbW92ZShjaGlwKTsKKwlvZl9ncGlvY2hpcF9yZW1vdmUoY2hpcCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZjaGlwLT5saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLWZhaWw6Ci0Ja2ZyZWUoZGVzY3MpOwogCWNoaXAtPmRlc2MgPSBOVUxMOworZXJyX2ZyZWVfZGVzY3M6CisJa2ZyZWUoZGVzY3MpOwogCiAJLyogZmFpbHVyZXMgaGVyZSBjYW4gbWVhbiBzeXN0ZW1zIHdvbid0IGJvb3QuLi4gKi8KIAlwcl9lcnIoIiVzOiBHUElPcyAlZC4uJWQgKCVzKSBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIsIF9fZnVuY19fLApAQCAtMzI1LDE0ICszMjcsMTUgQEAKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXVuc2lnbmVkCWlkOwogCi0JYWNwaV9ncGlvY2hpcF9yZW1vdmUoY2hpcCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJZ3Bpb2NoaXBfdW5leHBvcnQoY2hpcCk7CiAKIAlncGlvY2hpcF9pcnFjaGlwX3JlbW92ZShjaGlwKTsKKworCWFjcGlfZ3Bpb2NoaXBfcmVtb3ZlKGNoaXApOwogCWdwaW9jaGlwX3JlbW92ZV9waW5fcmFuZ2VzKGNoaXApOwogCW9mX2dwaW9jaGlwX3JlbW92ZShjaGlwKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGlkID0gMDsgaWQgPCBjaGlwLT5uZ3BpbzsgaWQrKykgewogCQlpZiAodGVzdF9iaXQoRkxBR19SRVFVRVNURUQsICZjaGlwLT5kZXNjW2lkXS5mbGFncykpCiAJCQlkZXZfY3JpdChjaGlwLT5kZXYsICJSRU1PVklORyBHUElPQ0hJUCBXSVRIIEdQSU9TIFNUSUxMIFJFUVVFU1RFRFxuIik7CkBAIC0zNDIsNyArMzQ1LDYgQEAKIAogCWxpc3RfZGVsKCZjaGlwLT5saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlncGlvY2hpcF91bmV4cG9ydChjaGlwKTsKIAogCWtmcmVlKGNoaXAtPmRlc2MpOwogCWNoaXAtPmRlc2MgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWIuaCBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmgKaW5kZXggZTNhNTIxMS4uNTUwYTVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWIuaAorKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5oCkBAIC03Nyw2ICs3Nyw3IEBACiAjZGVmaW5lIEZMQUdfT1BFTl9EUkFJTgk3CS8qIEdwaW8gaXMgb3BlbiBkcmFpbiB0eXBlICovCiAjZGVmaW5lIEZMQUdfT1BFTl9TT1VSQ0UgOAkvKiBHcGlvIGlzIG9wZW4gc291cmNlIHR5cGUgKi8KICNkZWZpbmUgRkxBR19VU0VEX0FTX0lSUSA5CS8qIEdQSU8gaXMgY29ubmVjdGVkIHRvIGFuIElSUSAqLworI2RlZmluZSBGTEFHX1NZU0ZTX0RJUgkxMAkvKiBzaG93IHN5c2ZzIGRpcmVjdGlvbiBhdHRyaWJ1dGUgKi8KIAogI2RlZmluZSBJRF9TSElGVAkxNgkvKiBhZGQgbmV3IGZsYWdzIGJlZm9yZSB0aGlzIG9uZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggNjZlNDAzOS4uZTYyMDgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtMzcsNiArMzcsNyBAQAogb2JqLSQoQ09ORklHX0RSTV9UVE0pCSs9IHR0bS8KIG9iai0kKENPTkZJR19EUk1fVERGWCkJKz0gdGRmeC8KIG9iai0kKENPTkZJR19EUk1fUjEyOCkJKz0gcjEyOC8KK29iai0kKENPTkZJR19IU0FfQU1EKSArPSBhbWQvYW1ka2ZkLwogb2JqLSQoQ09ORklHX0RSTV9SQURFT04pKz0gcmFkZW9uLwogb2JqLSQoQ09ORklHX0RSTV9NR0EpCSs9IG1nYS8KIG9iai0kKENPTkZJR19EUk1fSTgxMCkJKz0gaTgxMC8KQEAgLTY3LDQgKzY4LDMgQEAKIG9iai15CQkJKz0gaTJjLwogb2JqLXkJCQkrPSBwYW5lbC8KIG9iai15CQkJKz0gYnJpZGdlLwotb2JqLSQoQ09ORklHX0hTQV9BTUQpICs9IGFtZC9hbWRrZmQvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlCmluZGV4IGJlNjI0NmQuLjMwN2EzMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlCkBAIC04LDcgKzgsNiBAQAogCQlrZmRfcGFzaWQubyBrZmRfZG9vcmJlbGwubyBrZmRfZmxhdF9tZW1vcnkubyBcCiAJCWtmZF9wcm9jZXNzLm8ga2ZkX3F1ZXVlLm8ga2ZkX21xZF9tYW5hZ2VyLm8gXAogCQlrZmRfa2VybmVsX3F1ZXVlLm8ga2ZkX3BhY2tldF9tYW5hZ2VyLm8gXAotCQlrZmRfcHJvY2Vzc19xdWV1ZV9tYW5hZ2VyLm8ga2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLm8gXAotCQlrZmRfaW50ZXJydXB0Lm8KKwkJa2ZkX3Byb2Nlc3NfcXVldWVfbWFuYWdlci5vIGtmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5vCiAKIG9iai0kKENPTkZJR19IU0FfQU1EKQkrPSBhbWRrZmQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmMKaW5kZXggNGY3YjI3NS4uZmNmZGYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8dWFwaS9saW51eC9rZmRfaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8dWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlICJrZmRfcHJpdi5oIgpAQCAtMTIxLDI3ICsxMjAsMjAgQEAKIAlpZiAoSVNfRVJSKHByb2Nlc3MpKQogCQlyZXR1cm4gUFRSX0VSUihwcm9jZXNzKTsKIAotCXByb2Nlc3MtPmlzXzMyYml0X3VzZXJfbW9kZSA9IGlzXzMyYml0X3VzZXJfbW9kZTsKLQogCWRldl9kYmcoa2ZkX2RldmljZSwgInByb2Nlc3MgJWQgb3BlbmVkLCBjb21wYXQgbW9kZSAoMzIgYml0KSAtICVkXG4iLAogCQlwcm9jZXNzLT5wYXNpZCwgcHJvY2Vzcy0+aXNfMzJiaXRfdXNlcl9tb2RlKTsKIAotCWtmZF9pbml0X2FwZXJ0dXJlcyhwcm9jZXNzKTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBrZmRfaW9jdGxfZ2V0X3ZlcnNpb24oc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCi0JCQkJCXZvaWQgX191c2VyICphcmcpCitzdGF0aWMgaW50IGtmZF9pb2N0bF9nZXRfdmVyc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZXAsIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKKwkJCQkJdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3Qga2ZkX2lvY3RsX2dldF92ZXJzaW9uX2FyZ3MgYXJnczsKKwlzdHJ1Y3Qga2ZkX2lvY3RsX2dldF92ZXJzaW9uX2FyZ3MgKmFyZ3MgPSBkYXRhOwogCWludCBlcnIgPSAwOwogCi0JYXJncy5tYWpvcl92ZXJzaW9uID0gS0ZEX0lPQ1RMX01BSk9SX1ZFUlNJT047Ci0JYXJncy5taW5vcl92ZXJzaW9uID0gS0ZEX0lPQ1RMX01JTk9SX1ZFUlNJT047Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgJmFyZ3MsIHNpemVvZihhcmdzKSkpCi0JCWVyciA9IC1FRkFVTFQ7CisJYXJncy0+bWFqb3JfdmVyc2lvbiA9IEtGRF9JT0NUTF9NQUpPUl9WRVJTSU9OOworCWFyZ3MtPm1pbm9yX3ZlcnNpb24gPSBLRkRfSU9DVExfTUlOT1JfVkVSU0lPTjsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0yMjUsMTAgKzIxNywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IGtmZF9wcm9jZXNzICpwLAotCQkJCQl2b2lkIF9fdXNlciAqYXJnKQorc3RhdGljIGludCBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IGtmZF9wcm9jZXNzICpwLAorCQkJCQl2b2lkICpkYXRhKQogewotCXN0cnVjdCBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlX2FyZ3MgYXJnczsKKwlzdHJ1Y3Qga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZV9hcmdzICphcmdzID0gZGF0YTsKIAlzdHJ1Y3Qga2ZkX2RldiAqZGV2OwogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGludCBxdWV1ZV9pZDsKQEAgLTIzNywxNiArMjI5LDEzIEBACiAKIAltZW1zZXQoJnFfcHJvcGVydGllcywgMCwgc2l6ZW9mKHN0cnVjdCBxdWV1ZV9wcm9wZXJ0aWVzKSk7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFyZ3MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KIAlwcl9kZWJ1Zygia2ZkOiBjcmVhdGluZyBxdWV1ZSBpb2N0bFxuIik7CiAKLQllcnIgPSBzZXRfcXVldWVfcHJvcGVydGllc19mcm9tX3VzZXIoJnFfcHJvcGVydGllcywgJmFyZ3MpOworCWVyciA9IHNldF9xdWV1ZV9wcm9wZXJ0aWVzX2Zyb21fdXNlcigmcV9wcm9wZXJ0aWVzLCBhcmdzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLmdwdV9pZCk7CisJZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLT5ncHVfaWQpOwogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTI1NCw3ICsyNDMsNyBAQAogCiAJcGRkID0ga2ZkX2JpbmRfcHJvY2Vzc190b19kZXZpY2UoZGV2LCBwKTsKIAlpZiAoSVNfRVJSKHBkZCkpIHsKLQkJZXJyID0gUFRSX0VSUihwZGQpOworCQllcnIgPSAtRVNSQ0g7CiAJCWdvdG8gZXJyX2JpbmRfcHJvY2VzczsKIAl9CiAKQEAgLTI2NywzMyArMjU2LDI2IEBACiAJaWYgKGVyciAhPSAwKQogCQlnb3RvIGVycl9jcmVhdGVfcXVldWU7CiAKLQlhcmdzLnF1ZXVlX2lkID0gcXVldWVfaWQ7CisJYXJncy0+cXVldWVfaWQgPSBxdWV1ZV9pZDsKIAogCS8qIFJldHVybiBncHVfaWQgYXMgZG9vcmJlbGwgb2Zmc2V0IGZvciBtbWFwIHVzYWdlICovCi0JYXJncy5kb29yYmVsbF9vZmZzZXQgPSBhcmdzLmdwdV9pZCA8PCBQQUdFX1NISUZUOwotCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhcmdzLCBzaXplb2YoYXJncykpKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX2NvcHlfYXJnc19vdXQ7Ci0JfQorCWFyZ3MtPmRvb3JiZWxsX29mZnNldCA9IGFyZ3MtPmdwdV9pZCA8PCBQQUdFX1NISUZUOwogCiAJbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7CiAKLQlwcl9kZWJ1Zygia2ZkOiBxdWV1ZSBpZCAlZCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHlcbiIsIGFyZ3MucXVldWVfaWQpOworCXByX2RlYnVnKCJrZmQ6IHF1ZXVlIGlkICVkIHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseVxuIiwgYXJncy0+cXVldWVfaWQpOwogCiAJcHJfZGVidWcoInJpbmcgYnVmZmVyIGFkZHJlc3MgPT0gMHglMDE2bGxYXG4iLAotCQkJYXJncy5yaW5nX2Jhc2VfYWRkcmVzcyk7CisJCQlhcmdzLT5yaW5nX2Jhc2VfYWRkcmVzcyk7CiAKIAlwcl9kZWJ1ZygicmVhZCBwdHIgYWRkcmVzcyAgICA9PSAweCUwMTZsbFhcbiIsCi0JCQlhcmdzLnJlYWRfcG9pbnRlcl9hZGRyZXNzKTsKKwkJCWFyZ3MtPnJlYWRfcG9pbnRlcl9hZGRyZXNzKTsKIAogCXByX2RlYnVnKCJ3cml0ZSBwdHIgYWRkcmVzcyAgID09IDB4JTAxNmxsWFxuIiwKLQkJCWFyZ3Mud3JpdGVfcG9pbnRlcl9hZGRyZXNzKTsKKwkJCWFyZ3MtPndyaXRlX3BvaW50ZXJfYWRkcmVzcyk7CiAKIAlyZXR1cm4gMDsKIAotZXJyX2NvcHlfYXJnc19vdXQ6Ci0JcHFtX2Rlc3Ryb3lfcXVldWUoJnAtPnBxbSwgcXVldWVfaWQpOwogZXJyX2NyZWF0ZV9xdWV1ZToKIGVycl9iaW5kX3Byb2Nlc3M6CiAJbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7CkBAIC0zMDEsOTkgKzI4Myw5MCBAQAogfQogCiBzdGF0aWMgaW50IGtmZF9pb2N0bF9kZXN0cm95X3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCi0JCQkJCXZvaWQgX191c2VyICphcmcpCisJCQkJCXZvaWQgKmRhdGEpCiB7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3Qga2ZkX2lvY3RsX2Rlc3Ryb3lfcXVldWVfYXJncyBhcmdzOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCi0JCXJldHVybiAtRUZBVUxUOworCXN0cnVjdCBrZmRfaW9jdGxfZGVzdHJveV9xdWV1ZV9hcmdzICphcmdzID0gZGF0YTsKIAogCXByX2RlYnVnKCJrZmQ6IGRlc3Ryb3lpbmcgcXVldWUgaWQgJWQgZm9yIFBBU0lEICVkXG4iLAotCQkJCWFyZ3MucXVldWVfaWQsCisJCQkJYXJncy0+cXVldWVfaWQsCiAJCQkJcC0+cGFzaWQpOwogCiAJbXV0ZXhfbG9jaygmcC0+bXV0ZXgpOwogCi0JcmV0dmFsID0gcHFtX2Rlc3Ryb3lfcXVldWUoJnAtPnBxbSwgYXJncy5xdWV1ZV9pZCk7CisJcmV0dmFsID0gcHFtX2Rlc3Ryb3lfcXVldWUoJnAtPnBxbSwgYXJncy0+cXVldWVfaWQpOwogCiAJbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCBrZmRfaW9jdGxfdXBkYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCi0JCQkJCXZvaWQgX191c2VyICphcmcpCisJCQkJCXZvaWQgKmRhdGEpCiB7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3Qga2ZkX2lvY3RsX3VwZGF0ZV9xdWV1ZV9hcmdzIGFyZ3M7CisJc3RydWN0IGtmZF9pb2N0bF91cGRhdGVfcXVldWVfYXJncyAqYXJncyA9IGRhdGE7CiAJc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMgcHJvcGVydGllczsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmYXJncywgYXJnLCBzaXplb2YoYXJncykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChhcmdzLnF1ZXVlX3BlcmNlbnRhZ2UgPiBLRkRfTUFYX1FVRVVFX1BFUkNFTlRBR0UpIHsKKwlpZiAoYXJncy0+cXVldWVfcGVyY2VudGFnZSA+IEtGRF9NQVhfUVVFVUVfUEVSQ0VOVEFHRSkgewogCQlwcl9lcnIoImtmZDogcXVldWUgcGVyY2VudGFnZSBtdXN0IGJlIGJldHdlZW4gMCB0byBLRkRfTUFYX1FVRVVFX1BFUkNFTlRBR0VcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoYXJncy5xdWV1ZV9wcmlvcml0eSA+IEtGRF9NQVhfUVVFVUVfUFJJT1JJVFkpIHsKKwlpZiAoYXJncy0+cXVldWVfcHJpb3JpdHkgPiBLRkRfTUFYX1FVRVVFX1BSSU9SSVRZKSB7CiAJCXByX2Vycigia2ZkOiBxdWV1ZSBwcmlvcml0eSBtdXN0IGJlIGJldHdlZW4gMCB0byBLRkRfTUFYX1FVRVVFX1BSSU9SSVRZXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKChhcmdzLnJpbmdfYmFzZV9hZGRyZXNzKSAmJgorCWlmICgoYXJncy0+cmluZ19iYXNlX2FkZHJlc3MpICYmCiAJCSghYWNjZXNzX29rKFZFUklGWV9XUklURSwKLQkJCShjb25zdCB2b2lkIF9fdXNlciAqKSBhcmdzLnJpbmdfYmFzZV9hZGRyZXNzLAorCQkJKGNvbnN0IHZvaWQgX191c2VyICopIGFyZ3MtPnJpbmdfYmFzZV9hZGRyZXNzLAogCQkJc2l6ZW9mKHVpbnQ2NF90KSkpKSB7CiAJCXByX2Vycigia2ZkOiBjYW4ndCBhY2Nlc3MgcmluZyBiYXNlIGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlpZiAoIWlzX3Bvd2VyX29mXzIoYXJncy5yaW5nX3NpemUpICYmIChhcmdzLnJpbmdfc2l6ZSAhPSAwKSkgeworCWlmICghaXNfcG93ZXJfb2ZfMihhcmdzLT5yaW5nX3NpemUpICYmIChhcmdzLT5yaW5nX3NpemUgIT0gMCkpIHsKIAkJcHJfZXJyKCJrZmQ6IHJpbmcgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiBvciAwXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJvcGVydGllcy5xdWV1ZV9hZGRyZXNzID0gYXJncy5yaW5nX2Jhc2VfYWRkcmVzczsKLQlwcm9wZXJ0aWVzLnF1ZXVlX3NpemUgPSBhcmdzLnJpbmdfc2l6ZTsKLQlwcm9wZXJ0aWVzLnF1ZXVlX3BlcmNlbnQgPSBhcmdzLnF1ZXVlX3BlcmNlbnRhZ2U7Ci0JcHJvcGVydGllcy5wcmlvcml0eSA9IGFyZ3MucXVldWVfcHJpb3JpdHk7CisJcHJvcGVydGllcy5xdWV1ZV9hZGRyZXNzID0gYXJncy0+cmluZ19iYXNlX2FkZHJlc3M7CisJcHJvcGVydGllcy5xdWV1ZV9zaXplID0gYXJncy0+cmluZ19zaXplOworCXByb3BlcnRpZXMucXVldWVfcGVyY2VudCA9IGFyZ3MtPnF1ZXVlX3BlcmNlbnRhZ2U7CisJcHJvcGVydGllcy5wcmlvcml0eSA9IGFyZ3MtPnF1ZXVlX3ByaW9yaXR5OwogCiAJcHJfZGVidWcoImtmZDogdXBkYXRpbmcgcXVldWUgaWQgJWQgZm9yIFBBU0lEICVkXG4iLAotCQkJYXJncy5xdWV1ZV9pZCwgcC0+cGFzaWQpOworCQkJYXJncy0+cXVldWVfaWQsIHAtPnBhc2lkKTsKIAogCW11dGV4X2xvY2soJnAtPm11dGV4KTsKIAotCXJldHZhbCA9IHBxbV91cGRhdGVfcXVldWUoJnAtPnBxbSwgYXJncy5xdWV1ZV9pZCwgJnByb3BlcnRpZXMpOworCXJldHZhbCA9IHBxbV91cGRhdGVfcXVldWUoJnAtPnBxbSwgYXJncy0+cXVldWVfaWQsICZwcm9wZXJ0aWVzKTsKIAogCW11dGV4X3VubG9jaygmcC0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGxvbmcga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5KHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHZvaWQgX191c2VyICphcmcpCitzdGF0aWMgaW50IGtmZF9pb2N0bF9zZXRfbWVtb3J5X3BvbGljeShzdHJ1Y3QgZmlsZSAqZmlsZXAsCisJCQkJCXN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3Qga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5X2FyZ3MgYXJnczsKKwlzdHJ1Y3Qga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5X2FyZ3MgKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCBrZmRfZGV2ICpkZXY7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAqcGRkOwogCWVudW0gY2FjaGVfcG9saWN5IGRlZmF1bHRfcG9saWN5LCBhbHRlcm5hdGVfcG9saWN5OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGFyZ3MuZGVmYXVsdF9wb2xpY3kgIT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJFTlQKLQkgICAgJiYgYXJncy5kZWZhdWx0X3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9OT05DT0hFUkVOVCkgeworCWlmIChhcmdzLT5kZWZhdWx0X3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9DT0hFUkVOVAorCSAgICAmJiBhcmdzLT5kZWZhdWx0X3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9OT05DT0hFUkVOVCkgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoYXJncy5hbHRlcm5hdGVfcG9saWN5ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UCi0JICAgICYmIGFyZ3MuYWx0ZXJuYXRlX3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9OT05DT0hFUkVOVCkgeworCWlmIChhcmdzLT5hbHRlcm5hdGVfcG9saWN5ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UCisJICAgICYmIGFyZ3MtPmFsdGVybmF0ZV9wb2xpY3kgIT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfTk9OQ09IRVJFTlQpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLmdwdV9pZCk7CisJZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLT5ncHVfaWQpOwogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTQwMSwyMyArMzc0LDIzIEBACiAKIAlwZGQgPSBrZmRfYmluZF9wcm9jZXNzX3RvX2RldmljZShkZXYsIHApOwogCWlmIChJU19FUlIocGRkKSkgewotCQllcnIgPSBQVFJfRVJSKHBkZCk7CisJCWVyciA9IC1FU1JDSDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZGVmYXVsdF9wb2xpY3kgPSAoYXJncy5kZWZhdWx0X3BvbGljeSA9PSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9DT0hFUkVOVCkKKwlkZWZhdWx0X3BvbGljeSA9IChhcmdzLT5kZWZhdWx0X3BvbGljeSA9PSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9DT0hFUkVOVCkKIAkJCSA/IGNhY2hlX3BvbGljeV9jb2hlcmVudCA6IGNhY2hlX3BvbGljeV9ub25jb2hlcmVudDsKIAogCWFsdGVybmF0ZV9wb2xpY3kgPQotCQkoYXJncy5hbHRlcm5hdGVfcG9saWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UKQorCQkoYXJncy0+YWx0ZXJuYXRlX3BvbGljeSA9PSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9DT0hFUkVOVCkKIAkJICAgPyBjYWNoZV9wb2xpY3lfY29oZXJlbnQgOiBjYWNoZV9wb2xpY3lfbm9uY29oZXJlbnQ7CiAKIAlpZiAoIWRldi0+ZHFtLT5zZXRfY2FjaGVfbWVtb3J5X3BvbGljeShkZXYtPmRxbSwKIAkJCQkmcGRkLT5xcGQsCiAJCQkJZGVmYXVsdF9wb2xpY3ksCiAJCQkJYWx0ZXJuYXRlX3BvbGljeSwKLQkJCQkodm9pZCBfX3VzZXIgKilhcmdzLmFsdGVybmF0ZV9hcGVydHVyZV9iYXNlLAotCQkJCWFyZ3MuYWx0ZXJuYXRlX2FwZXJ0dXJlX3NpemUpKQorCQkJCSh2b2lkIF9fdXNlciAqKWFyZ3MtPmFsdGVybmF0ZV9hcGVydHVyZV9iYXNlLAorCQkJCWFyZ3MtPmFsdGVybmF0ZV9hcGVydHVyZV9zaXplKSkKIAkJZXJyID0gLUVJTlZBTDsKIAogb3V0OgpAQCAtNDI2LDUzICszOTksNDQgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgbG9uZyBrZmRfaW9jdGxfZ2V0X2Nsb2NrX2NvdW50ZXJzKHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHZvaWQgX191c2VyICphcmcpCitzdGF0aWMgaW50IGtmZF9pb2N0bF9nZXRfY2xvY2tfY291bnRlcnMoc3RydWN0IGZpbGUgKmZpbGVwLAorCQkJCXN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3Qga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVyc19hcmdzIGFyZ3M7CisJc3RydWN0IGtmZF9pb2N0bF9nZXRfY2xvY2tfY291bnRlcnNfYXJncyAqYXJncyA9IGRhdGE7CiAJc3RydWN0IGtmZF9kZXYgKmRldjsKIAlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmYXJncywgYXJnLCBzaXplb2YoYXJncykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWRldiA9IGtmZF9kZXZpY2VfYnlfaWQoYXJncy5ncHVfaWQpOworCWRldiA9IGtmZF9kZXZpY2VfYnlfaWQoYXJncy0+Z3B1X2lkKTsKIAlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogUmVhZGluZyBHUFUgY2xvY2sgY291bnRlciBmcm9tIEtHRCAqLwotCWFyZ3MuZ3B1X2Nsb2NrX2NvdW50ZXIgPSBrZmQya2dkLT5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIoZGV2LT5rZ2QpOworCWFyZ3MtPmdwdV9jbG9ja19jb3VudGVyID0ga2ZkMmtnZC0+Z2V0X2dwdV9jbG9ja19jb3VudGVyKGRldi0+a2dkKTsKIAogCS8qIE5vIGFjY2VzcyB0byByZHRzYy4gVXNpbmcgcmF3IG1vbm90b25pYyB0aW1lICovCiAJZ2V0cmF3bW9ub3RvbmljKCZ0aW1lKTsKLQlhcmdzLmNwdV9jbG9ja19jb3VudGVyID0gKHVpbnQ2NF90KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsKKwlhcmdzLT5jcHVfY2xvY2tfY291bnRlciA9ICh1aW50NjRfdCl0aW1lc3BlY190b19ucygmdGltZSk7CiAKIAlnZXRfbW9ub3RvbmljX2Jvb3R0aW1lKCZ0aW1lKTsKLQlhcmdzLnN5c3RlbV9jbG9ja19jb3VudGVyID0gKHVpbnQ2NF90KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsKKwlhcmdzLT5zeXN0ZW1fY2xvY2tfY291bnRlciA9ICh1aW50NjRfdCl0aW1lc3BlY190b19ucygmdGltZSk7CiAKIAkvKiBTaW5jZSB0aGUgY291bnRlciBpcyBpbiBuYW5vLXNlY29uZHMgd2UgdXNlIDFHSHogZnJlcXVlbmN5ICovCi0JYXJncy5zeXN0ZW1fY2xvY2tfZnJlcSA9IDEwMDAwMDAwMDA7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgJmFyZ3MsIHNpemVvZihhcmdzKSkpCi0JCXJldHVybiAtRUZBVUxUOworCWFyZ3MtPnN5c3RlbV9jbG9ja19mcmVxID0gMTAwMDAwMDAwMDsKIAogCXJldHVybiAwOwogfQogCiAKIHN0YXRpYyBpbnQga2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlcyhzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHZvaWQgX191c2VyICphcmcpCisJCQkJc3RydWN0IGtmZF9wcm9jZXNzICpwLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBrZmRfaW9jdGxfZ2V0X3Byb2Nlc3NfYXBlcnR1cmVzX2FyZ3MgYXJnczsKKwlzdHJ1Y3Qga2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlc19hcmdzICphcmdzID0gZGF0YTsKIAlzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlX2FwZXJ0dXJlcyAqcEFwZXJ0dXJlOwogCXN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgKnBkZDsKIAogCWRldl9kYmcoa2ZkX2RldmljZSwgImdldCBhcGVydHVyZXMgZm9yIFBBU0lEICVkIiwgcC0+cGFzaWQpOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JYXJncy5udW1fb2Zfbm9kZXMgPSAwOworCWFyZ3MtPm51bV9vZl9ub2RlcyA9IDA7CiAKIAltdXRleF9sb2NrKCZwLT5tdXRleCk7CiAKQEAgLTQ4MSw3ICs0NDUsOCBAQAogCQkvKiBSdW4gb3ZlciBhbGwgcGRkIG9mIHRoZSBwcm9jZXNzICovCiAJCXBkZCA9IGtmZF9nZXRfZmlyc3RfcHJvY2Vzc19kZXZpY2VfZGF0YShwKTsKIAkJZG8gewotCQkJcEFwZXJ0dXJlID0gJmFyZ3MucHJvY2Vzc19hcGVydHVyZXNbYXJncy5udW1fb2Zfbm9kZXNdOworCQkJcEFwZXJ0dXJlID0KKwkJCQkmYXJncy0+cHJvY2Vzc19hcGVydHVyZXNbYXJncy0+bnVtX29mX25vZGVzXTsKIAkJCXBBcGVydHVyZS0+Z3B1X2lkID0gcGRkLT5kZXYtPmlkOwogCQkJcEFwZXJ0dXJlLT5sZHNfYmFzZSA9IHBkZC0+bGRzX2Jhc2U7CiAJCQlwQXBlcnR1cmUtPmxkc19saW1pdCA9IHBkZC0+bGRzX2xpbWl0OwpAQCAtNDkxLDcgKzQ1Niw3IEBACiAJCQlwQXBlcnR1cmUtPnNjcmF0Y2hfbGltaXQgPSBwZGQtPnNjcmF0Y2hfbGltaXQ7CiAKIAkJCWRldl9kYmcoa2ZkX2RldmljZSwKLQkJCQkibm9kZSBpZCAldVxuIiwgYXJncy5udW1fb2Zfbm9kZXMpOworCQkJCSJub2RlIGlkICV1XG4iLCBhcmdzLT5udW1fb2Zfbm9kZXMpOwogCQkJZGV2X2RiZyhrZmRfZGV2aWNlLAogCQkJCSJncHUgaWQgJXVcbiIsIHBkZC0+ZGV2LT5pZCk7CiAJCQlkZXZfZGJnKGtmZF9kZXZpY2UsCkBAIC01MDcsODAgKzQ3MiwxMzEgQEAKIAkJCWRldl9kYmcoa2ZkX2RldmljZSwKIAkJCQkic2NyYXRjaF9saW1pdCAlbGxYXG4iLCBwZGQtPnNjcmF0Y2hfbGltaXQpOwogCi0JCQlhcmdzLm51bV9vZl9ub2RlcysrOworCQkJYXJncy0+bnVtX29mX25vZGVzKys7CiAJCX0gd2hpbGUgKChwZGQgPSBrZmRfZ2V0X25leHRfcHJvY2Vzc19kZXZpY2VfZGF0YShwLCBwZGQpKSAhPSBOVUxMICYmCi0JCQkJKGFyZ3MubnVtX29mX25vZGVzIDwgTlVNX09GX1NVUFBPUlRFRF9HUFVTKSk7CisJCQkJKGFyZ3MtPm51bV9vZl9ub2RlcyA8IE5VTV9PRl9TVVBQT1JURURfR1BVUykpOwogCX0KIAogCW11dGV4X3VubG9jaygmcC0+bXV0ZXgpOwogCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhcmdzLCBzaXplb2YoYXJncykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQogCXJldHVybiAwOwogfQogCisjZGVmaW5lIEFNREtGRF9JT0NUTF9ERUYoaW9jdGwsIF9mdW5jLCBfZmxhZ3MpIFwKKwlbX0lPQ19OUihpb2N0bCldID0gey5jbWQgPSBpb2N0bCwgLmZ1bmMgPSBfZnVuYywgLmZsYWdzID0gX2ZsYWdzLCAuY21kX2RydiA9IDAsIC5uYW1lID0gI2lvY3RsfQorCisvKiogSW9jdGwgdGFibGUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYW1ka2ZkX2lvY3RsX2Rlc2MgYW1ka2ZkX2lvY3Rsc1tdID0geworCUFNREtGRF9JT0NUTF9ERUYoQU1ES0ZEX0lPQ19HRVRfVkVSU0lPTiwKKwkJCWtmZF9pb2N0bF9nZXRfdmVyc2lvbiwgMCksCisKKwlBTURLRkRfSU9DVExfREVGKEFNREtGRF9JT0NfQ1JFQVRFX1FVRVVFLAorCQkJa2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZSwgMCksCisKKwlBTURLRkRfSU9DVExfREVGKEFNREtGRF9JT0NfREVTVFJPWV9RVUVVRSwKKwkJCWtmZF9pb2N0bF9kZXN0cm95X3F1ZXVlLCAwKSwKKworCUFNREtGRF9JT0NUTF9ERUYoQU1ES0ZEX0lPQ19TRVRfTUVNT1JZX1BPTElDWSwKKwkJCWtmZF9pb2N0bF9zZXRfbWVtb3J5X3BvbGljeSwgMCksCisKKwlBTURLRkRfSU9DVExfREVGKEFNREtGRF9JT0NfR0VUX0NMT0NLX0NPVU5URVJTLAorCQkJa2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVycywgMCksCisKKwlBTURLRkRfSU9DVExfREVGKEFNREtGRF9JT0NfR0VUX1BST0NFU1NfQVBFUlRVUkVTLAorCQkJa2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlcywgMCksCisKKwlBTURLRkRfSU9DVExfREVGKEFNREtGRF9JT0NfVVBEQVRFX1FVRVVFLAorCQkJa2ZkX2lvY3RsX3VwZGF0ZV9xdWV1ZSwgMCksCit9OworCisjZGVmaW5lIEFNREtGRF9DT1JFX0lPQ1RMX0NPVU5UCUFSUkFZX1NJWkUoYW1ka2ZkX2lvY3RscykKKwogc3RhdGljIGxvbmcga2ZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGtmZF9wcm9jZXNzICpwcm9jZXNzOwotCWxvbmcgZXJyID0gLUVJTlZBTDsKKwlhbWRrZmRfaW9jdGxfdCAqZnVuYzsKKwljb25zdCBzdHJ1Y3QgYW1ka2ZkX2lvY3RsX2Rlc2MgKmlvY3RsID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbnIgPSBfSU9DX05SKGNtZCk7CisJY2hhciBzdGFja19rZGF0YVsxMjhdOworCWNoYXIgKmtkYXRhID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgdXNpemUsIGFzaXplOworCWludCByZXRjb2RlID0gLUVJTlZBTDsKIAotCWRldl9kYmcoa2ZkX2RldmljZSwKLQkJImlvY3RsIGNtZCAweCV4ICgjJWQpLCBhcmcgMHglbHhcbiIsCi0JCWNtZCwgX0lPQ19OUihjbWQpLCBhcmcpOworCWlmIChuciA+PSBBTURLRkRfQ09SRV9JT0NUTF9DT1VOVCkKKwkJZ290byBlcnJfaTE7CisKKwlpZiAoKG5yID49IEFNREtGRF9DT01NQU5EX1NUQVJUKSAmJiAobnIgPCBBTURLRkRfQ09NTUFORF9FTkQpKSB7CisJCXUzMiBhbWRrZmRfc2l6ZTsKKworCQlpb2N0bCA9ICZhbWRrZmRfaW9jdGxzW25yXTsKKworCQlhbWRrZmRfc2l6ZSA9IF9JT0NfU0laRShpb2N0bC0+Y21kKTsKKwkJdXNpemUgPSBhc2l6ZSA9IF9JT0NfU0laRShjbWQpOworCQlpZiAoYW1ka2ZkX3NpemUgPiBhc2l6ZSkKKwkJCWFzaXplID0gYW1ka2ZkX3NpemU7CisKKwkJY21kID0gaW9jdGwtPmNtZDsKKwl9IGVsc2UKKwkJZ290byBlcnJfaTE7CisKKwlkZXZfZGJnKGtmZF9kZXZpY2UsICJpb2N0bCBjbWQgMHgleCAoIyVkKSwgYXJnIDB4JWx4XG4iLCBjbWQsIG5yLCBhcmcpOwogCiAJcHJvY2VzcyA9IGtmZF9nZXRfcHJvY2VzcyhjdXJyZW50KTsKLQlpZiAoSVNfRVJSKHByb2Nlc3MpKQotCQlyZXR1cm4gUFRSX0VSUihwcm9jZXNzKTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBLRkRfSU9DX0dFVF9WRVJTSU9OOgotCQllcnIgPSBrZmRfaW9jdGxfZ2V0X3ZlcnNpb24oZmlsZXAsIHByb2Nlc3MsICh2b2lkIF9fdXNlciAqKWFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgS0ZEX0lPQ19DUkVBVEVfUVVFVUU6Ci0JCWVyciA9IGtmZF9pb2N0bF9jcmVhdGVfcXVldWUoZmlsZXAsIHByb2Nlc3MsCi0JCQkJCQkodm9pZCBfX3VzZXIgKilhcmcpOwotCQlicmVhazsKLQotCWNhc2UgS0ZEX0lPQ19ERVNUUk9ZX1FVRVVFOgotCQllcnIgPSBrZmRfaW9jdGxfZGVzdHJveV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKLQkJCQkJCSh2b2lkIF9fdXNlciAqKWFyZyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBLRkRfSU9DX1NFVF9NRU1PUllfUE9MSUNZOgotCQllcnIgPSBrZmRfaW9jdGxfc2V0X21lbW9yeV9wb2xpY3koZmlsZXAsIHByb2Nlc3MsCi0JCQkJCQkodm9pZCBfX3VzZXIgKilhcmcpOwotCQlicmVhazsKLQotCWNhc2UgS0ZEX0lPQ19HRVRfQ0xPQ0tfQ09VTlRFUlM6Ci0JCWVyciA9IGtmZF9pb2N0bF9nZXRfY2xvY2tfY291bnRlcnMoZmlsZXAsIHByb2Nlc3MsCi0JCQkJCQkodm9pZCBfX3VzZXIgKilhcmcpOwotCQlicmVhazsKLQotCWNhc2UgS0ZEX0lPQ19HRVRfUFJPQ0VTU19BUEVSVFVSRVM6Ci0JCWVyciA9IGtmZF9pb2N0bF9nZXRfcHJvY2Vzc19hcGVydHVyZXMoZmlsZXAsIHByb2Nlc3MsCi0JCQkJCQkodm9pZCBfX3VzZXIgKilhcmcpOwotCQlicmVhazsKLQotCWNhc2UgS0ZEX0lPQ19VUERBVEVfUVVFVUU6Ci0JCWVyciA9IGtmZF9pb2N0bF91cGRhdGVfcXVldWUoZmlsZXAsIHByb2Nlc3MsCi0JCQkJCQkodm9pZCBfX3VzZXIgKilhcmcpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRldl9lcnIoa2ZkX2RldmljZSwKLQkJCSJ1bmtub3duIGlvY3RsIGNtZCAweCV4LCBhcmcgMHglbHgpXG4iLAotCQkJY21kLCBhcmcpOwotCQllcnIgPSAtRUlOVkFMOwotCQlicmVhazsKKwlpZiAoSVNfRVJSKHByb2Nlc3MpKSB7CisJCWRldl9kYmcoa2ZkX2RldmljZSwgIm5vIHByb2Nlc3NcbiIpOworCQlnb3RvIGVycl9pMTsKIAl9CiAKLQlpZiAoZXJyIDwgMCkKLQkJZGV2X2VycihrZmRfZGV2aWNlLAotCQkJImlvY3RsIGVycm9yICVsZCBmb3IgaW9jdGwgY21kIDB4JXggKCMlZClcbiIsCi0JCQllcnIsIGNtZCwgX0lPQ19OUihjbWQpKTsKKwkvKiBEbyBub3QgdHJ1c3QgdXNlcnNwYWNlLCB1c2Ugb3VyIG93biBkZWZpbml0aW9uICovCisJZnVuYyA9IGlvY3RsLT5mdW5jOwogCi0JcmV0dXJuIGVycjsKKwlpZiAodW5saWtlbHkoIWZ1bmMpKSB7CisJCWRldl9kYmcoa2ZkX2RldmljZSwgIm5vIGZ1bmN0aW9uXG4iKTsKKwkJcmV0Y29kZSA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2kxOworCX0KKworCWlmIChjbWQgJiAoSU9DX0lOIHwgSU9DX09VVCkpIHsKKwkJaWYgKGFzaXplIDw9IHNpemVvZihzdGFja19rZGF0YSkpIHsKKwkJCWtkYXRhID0gc3RhY2tfa2RhdGE7CisJCX0gZWxzZSB7CisJCQlrZGF0YSA9IGttYWxsb2MoYXNpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFrZGF0YSkgeworCQkJCXJldGNvZGUgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyX2kxOworCQkJfQorCQl9CisJCWlmIChhc2l6ZSA+IHVzaXplKQorCQkJbWVtc2V0KGtkYXRhICsgdXNpemUsIDAsIGFzaXplIC0gdXNpemUpOworCX0KKworCWlmIChjbWQgJiBJT0NfSU4pIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGtkYXRhLCAodm9pZCBfX3VzZXIgKilhcmcsIHVzaXplKSAhPSAwKSB7CisJCQlyZXRjb2RlID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyX2kxOworCQl9CisJfSBlbHNlIGlmIChjbWQgJiBJT0NfT1VUKSB7CisJCW1lbXNldChrZGF0YSwgMCwgdXNpemUpOworCX0KKworCXJldGNvZGUgPSBmdW5jKGZpbGVwLCBwcm9jZXNzLCBrZGF0YSk7CisKKwlpZiAoY21kICYgSU9DX09VVCkKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIGtkYXRhLCB1c2l6ZSkgIT0gMCkKKwkJCXJldGNvZGUgPSAtRUZBVUxUOworCitlcnJfaTE6CisJaWYgKCFpb2N0bCkKKwkJZGV2X2RiZyhrZmRfZGV2aWNlLCAiaW52YWxpZCBpb2N0bDogcGlkPSVkLCBjbWQ9MHglMDJ4LCBucj0weCUwMnhcbiIsCisJCQkgIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBjbWQsIG5yKTsKKworCWlmIChrZGF0YSAhPSBzdGFja19rZGF0YSkKKwkJa2ZyZWUoa2RhdGEpOworCisJaWYgKHJldGNvZGUpCisJCWRldl9kYmcoa2ZkX2RldmljZSwgInJldCA9ICVkXG4iLCByZXRjb2RlKTsKKworCXJldHVybiByZXRjb2RlOwogfQogCiBzdGF0aWMgaW50IGtmZF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2UuYwppbmRleCA0Mzg4NGViLi4yNWJjNDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImtmZF9wcml2LmgiCiAjaW5jbHVkZSAia2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmgiCisjaW5jbHVkZSAia2ZkX3BtNF9oZWFkZXJzLmgiCiAKICNkZWZpbmUgTVFEX1NJWkVfQUxJR05FRCA3NjgKIApAQCAtMTY5LDkgKzE3MCw4IEBACiAJa2ZkLT5zaGFyZWRfcmVzb3VyY2VzID0gKmdwdV9yZXNvdXJjZXM7CiAKIAkvKiBjYWxjdWxhdGUgbWF4IHNpemUgb2YgbXFkcyBuZWVkZWQgZm9yIHF1ZXVlcyAqLwotCXNpemUgPSBtYXhfbnVtX29mX3Byb2Nlc3NlcyAqCi0JCW1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzICoKLQkJa2ZkLT5kZXZpY2VfaW5mby0+bXFkX3NpemVfYWxpZ25lZDsKKwlzaXplID0gbWF4X251bV9vZl9xdWV1ZXNfcGVyX2RldmljZSAqCisJCQlrZmQtPmRldmljZV9pbmZvLT5tcWRfc2l6ZV9hbGlnbmVkOwogCiAJLyogYWRkIGFub3RoZXIgNTEyS0IgZm9yIGFsbCBvdGhlciBhbGxvY2F0aW9ucyBvbiBnYXJ0ICovCiAJc2l6ZSArPSA1MTIgKiAxMDI0OwpAQCAtMTkyLDEzICsxOTIsNiBAQAogCQlnb3RvIGtmZF90b3BvbG9neV9hZGRfZGV2aWNlX2Vycm9yOwogCX0KIAotCWlmIChrZmRfaW50ZXJydXB0X2luaXQoa2ZkKSkgewotCQlkZXZfZXJyKGtmZF9kZXZpY2UsCi0JCQkiRXJyb3IgaW5pdGlhbGl6aW5nIGludGVycnVwdHMgZm9yIGRldmljZSAoJXg6JXgpXG4iLAotCQkJa2ZkLT5wZGV2LT52ZW5kb3IsIGtmZC0+cGRldi0+ZGV2aWNlKTsKLQkJZ290byBrZmRfaW50ZXJydXB0X2Vycm9yOwotCX0KLQogCWlmICghZGV2aWNlX2lvbW11X3Bhc2lkX2luaXQoa2ZkKSkgewogCQlkZXZfZXJyKGtmZF9kZXZpY2UsCiAJCQkiRXJyb3IgaW5pdGlhbGl6aW5nIGlvbW11djIgZm9yIGRldmljZSAoJXg6JXgpXG4iLApAQCAtMjM3LDggKzIzMCw2IEBACiBkZXZpY2VfcXVldWVfbWFuYWdlcl9lcnJvcjoKIAlhbWRfaW9tbXVfZnJlZV9kZXZpY2Uoa2ZkLT5wZGV2KTsKIGRldmljZV9pb21tdV9wYXNpZF9lcnJvcjoKLQlrZmRfaW50ZXJydXB0X2V4aXQoa2ZkKTsKLWtmZF9pbnRlcnJ1cHRfZXJyb3I6CiAJa2ZkX3RvcG9sb2d5X3JlbW92ZV9kZXZpY2Uoa2ZkKTsKIGtmZF90b3BvbG9neV9hZGRfZGV2aWNlX2Vycm9yOgogCWtmZDJrZ2QtPmZpbmlfc2FfbWFuYWdlcihrZmQtPmtnZCk7CkBAIC0yNTQsNyArMjQ1LDYgQEAKIAlpZiAoa2ZkLT5pbml0X2NvbXBsZXRlKSB7CiAJCWRldmljZV9xdWV1ZV9tYW5hZ2VyX3VuaW5pdChrZmQtPmRxbSk7CiAJCWFtZF9pb21tdV9mcmVlX2RldmljZShrZmQtPnBkZXYpOwotCQlrZmRfaW50ZXJydXB0X2V4aXQoa2ZkKTsKIAkJa2ZkX3RvcG9sb2d5X3JlbW92ZV9kZXZpY2Uoa2ZkKTsKIAl9CiAKQEAgLTI5NiwxMyArMjg2LDUgQEAKIC8qIFRoaXMgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gS0dEIGF0IElTUi4gKi8KIHZvaWQga2dkMmtmZF9pbnRlcnJ1cHQoc3RydWN0IGtmZF9kZXYgKmtmZCwgY29uc3Qgdm9pZCAqaWhfcmluZ19lbnRyeSkKIHsKLQlpZiAoa2ZkLT5pbml0X2NvbXBsZXRlKSB7Ci0JCXNwaW5fbG9jaygma2ZkLT5pbnRlcnJ1cHRfbG9jayk7Ci0KLQkJaWYgKGtmZC0+aW50ZXJydXB0c19hY3RpdmUKLQkJICAgICYmIGVucXVldWVfaWhfcmluZ19lbnRyeShrZmQsIGloX3JpbmdfZW50cnkpKQotCQkJc2NoZWR1bGVfd29yaygma2ZkLT5pbnRlcnJ1cHRfd29yayk7Ci0KLQkJc3Bpbl91bmxvY2soJmtmZC0+aW50ZXJydXB0X2xvY2spOwotCX0KKwkvKiBQcm9jZXNzIGludGVycnVwdHMgLyBzY2hlZHVsZSB3b3JrIGFzIG5lY2Vzc2FyeSAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXIuYwppbmRleCA5MjRlOTBjLi4wZDg2OTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXIuYwpAQCAtMTYxLDYgKzE2MSw5IEBACiB7CiAJaW50IGJpdCA9IHFwZC0+dm1pZCAtIEtGRF9WTUlEX1NUQVJUX09GRlNFVDsKIAorCS8qIFJlbGVhc2UgdGhlIHZtaWQgbWFwcGluZyAqLworCXNldF9wYXNpZF92bWlkX21hcHBpbmcoZHFtLCAwLCBxcGQtPnZtaWQpOworCiAJc2V0X2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopJmRxbS0+dm1pZF9iaXRtYXApOwogCXFwZC0+dm1pZCA9IDA7CiAJcS0+cHJvcGVydGllcy52bWlkID0gMDsKQEAgLTE4MCw2ICsxODMsMTMgQEAKIAogCW11dGV4X2xvY2soJmRxbS0+bG9jayk7CiAKKwlpZiAoZHFtLT50b3RhbF9xdWV1ZV9jb3VudCA+PSBtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlKSB7CisJCXByX3dhcm4oImFtZGtmZDogQ2FuJ3QgY3JlYXRlIG5ldyB1c2VybW9kZSBxdWV1ZSBiZWNhdXNlICVkIHF1ZXVlcyB3ZXJlIGFscmVhZHkgY3JlYXRlZFxuIiwKKwkJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKKwkJbXV0ZXhfdW5sb2NrKCZkcW0tPmxvY2spOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwogCWlmIChsaXN0X2VtcHR5KCZxcGQtPnF1ZXVlc19saXN0KSkgewogCQlyZXR2YWwgPSBhbGxvY2F0ZV92bWlkKGRxbSwgcXBkLCBxKTsKIAkJaWYgKHJldHZhbCAhPSAwKSB7CkBAIC0yMDQsNiArMjE0LDE0IEBACiAJbGlzdF9hZGQoJnEtPmxpc3QsICZxcGQtPnF1ZXVlc19saXN0KTsKIAlkcW0tPnF1ZXVlX2NvdW50Kys7CiAKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgdGhpcyBjb3VudGVyLCByZWdhcmRsZXNzIG9mIHRoZSBxdWV1ZSdzCisJICogdHlwZSBvciB3aGV0aGVyIHRoZSBxdWV1ZSBpcyBhY3RpdmUuCisJICovCisJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCsrOworCXByX2RlYnVnKCJUb3RhbCBvZiAlZCBxdWV1ZXMgYXJlIGFjY291bnRhYmxlIHNvIGZhclxuIiwKKwkJCWRxbS0+dG90YWxfcXVldWVfY291bnQpOworCiAJbXV0ZXhfdW5sb2NrKCZkcW0tPmxvY2spOwogCXJldHVybiAwOwogfQpAQCAtMjcyLDYgKzI5MCwxOCBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAorCXByX2RlYnVnKCJrZmQ6IGxvYWRpbmcgbXFkIHRvIGhxZCBvbiBwaXBlICglZCkgcXVldWUgKCVkKVxuIiwKKwkJCXEtPnBpcGUsCisJCQlxLT5xdWV1ZSk7CisKKwlyZXR2YWwgPSBtcWQtPmxvYWRfbXFkKG1xZCwgcS0+bXFkLCBxLT5waXBlLAorCQkJcS0+cXVldWUsICh1aW50MzJfdCBfX3VzZXIgKikgcS0+cHJvcGVydGllcy53cml0ZV9wdHIpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlkZWFsbG9jYXRlX2hxZChkcW0sIHEpOworCQltcWQtPnVuaW5pdF9tcWQobXFkLCBxLT5tcWQsIHEtPm1xZF9tZW1fb2JqKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzExLDYgKzM0MSwxNSBAQAogCWlmIChsaXN0X2VtcHR5KCZxcGQtPnF1ZXVlc19saXN0KSkKIAkJZGVhbGxvY2F0ZV92bWlkKGRxbSwgcXBkLCBxKTsKIAlkcW0tPnF1ZXVlX2NvdW50LS07CisKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBkZWNyZW1lbnQgdGhpcyBjb3VudGVyLCByZWdhcmRsZXNzIG9mIHRoZSBxdWV1ZSdzCisJICogdHlwZQorCSAqLworCWRxbS0+dG90YWxfcXVldWVfY291bnQtLTsKKwlwcl9kZWJ1ZygiVG90YWwgb2YgJWQgcXVldWVzIGFyZSBhY2NvdW50YWJsZSBzbyBmYXJcbiIsCisJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKKwogb3V0OgogCW11dGV4X3VubG9jaygmZHFtLT5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMzIwLDYgKzM1OSw3IEBACiB7CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgbXFkX21hbmFnZXIgKm1xZDsKKwlib29sIHByZXZfYWN0aXZlID0gZmFsc2U7CiAKIAlCVUdfT04oIWRxbSB8fCAhcSB8fCAhcS0+bXFkKTsKIApAQCAtMzMwLDEwICszNzAsMTggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmV0dmFsID0gbXFkLT51cGRhdGVfbXFkKG1xZCwgcS0+bXFkLCAmcS0+cHJvcGVydGllcyk7CiAJaWYgKHEtPnByb3BlcnRpZXMuaXNfYWN0aXZlID09IHRydWUpCisJCXByZXZfYWN0aXZlID0gdHJ1ZTsKKworCS8qCisJICoKKwkgKiBjaGVjayBhY3RpdmUgc3RhdGUgdnMuIHRoZSBwcmV2aW91cyBzdGF0ZQorCSAqIGFuZCBtb2RpZnkgY291bnRlciBhY2NvcmRpbmdseQorCSAqLworCXJldHZhbCA9IG1xZC0+dXBkYXRlX21xZChtcWQsIHEtPm1xZCwgJnEtPnByb3BlcnRpZXMpOworCWlmICgocS0+cHJvcGVydGllcy5pc19hY3RpdmUgPT0gdHJ1ZSkgJiYgKHByZXZfYWN0aXZlID09IGZhbHNlKSkKIAkJZHFtLT5xdWV1ZV9jb3VudCsrOwotCWVsc2UKKwllbHNlIGlmICgocS0+cHJvcGVydGllcy5pc19hY3RpdmUgPT0gZmFsc2UpICYmIChwcmV2X2FjdGl2ZSA9PSB0cnVlKSkKIAkJZHFtLT5xdWV1ZV9jb3VudC0tOwogCiAJaWYgKHNjaGVkX3BvbGljeSAhPSBLRkRfU0NIRURfUE9MSUNZX05PX0hXUykKQEAgLTUxNywxMCArNTY1LDE0IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcGlwZXNfbnVtOyBpKyspIHsKIAkJaW54ID0gaSArIGZpcnN0X3BpcGU7CisJCS8qCisJCSAqIEhQRCBidWZmZXIgb24gR1RUIGlzIGFsbG9jYXRlZCBieSBhbWRrZmQsIG5vIG5lZWQgdG8gd2FzdGUKKwkJICogc3BhY2UgaW4gR1RUIGZvciBwaXBlbGluZXMgd2UgZG9uJ3QgaW5pdGlhbGl6ZQorCQkgKi8KIAkJcGlwZV9ocGRfYWRkciA9IGRxbS0+cGlwZWxpbmVzX2FkZHIgKyBpICogQ0lLX0hQRF9FT1BfQllURVM7CiAJCXByX2RlYnVnKCJrZmQ6IHBpcGVsaW5lIGFkZHJlc3MgJWxsWFxuIiwgcGlwZV9ocGRfYWRkcik7CiAJCS8qID0gbG9nMihieXRlcy80KS0xICovCi0JCWtmZDJrZ2QtPmluaXRfcGlwZWxpbmUoZHFtLT5kZXYtPmtnZCwgaSwKKwkJa2ZkMmtnZC0+aW5pdF9waXBlbGluZShkcW0tPmRldi0+a2dkLCBpbngsCiAJCQkJQ0lLX0hQRF9FT1BfQllURVNfTE9HMiAtIDMsIHBpcGVfaHBkX2FkZHIpOwogCX0KIApAQCAtNTM2LDcgKzU4OCw3IEBACiAKIAlwcl9kZWJ1Zygia2ZkOiBJbiAlc1xuIiwgX19mdW5jX18pOwogCi0JcmV0dmFsID0gaW5pdF9waXBlbGluZXMoZHFtLCBnZXRfcGlwZXNfbnVtKGRxbSksIEtGRF9EUU1fRklSU1RfUElQRSk7CisJcmV0dmFsID0gaW5pdF9waXBlbGluZXMoZHFtLCBnZXRfcGlwZXNfbnVtKGRxbSksIGdldF9maXJzdF9waXBlKGRxbSkpOwogCWlmIChyZXR2YWwgIT0gMCkKIAkJcmV0dXJuIHJldHZhbDsKIApAQCAtNzI4LDYgKzc4MCwyMSBAQAogCXByX2RlYnVnKCJrZmQ6IEluIGZ1bmMgJXNcbiIsIF9fZnVuY19fKTsKIAogCW11dGV4X2xvY2soJmRxbS0+bG9jayk7CisJaWYgKGRxbS0+dG90YWxfcXVldWVfY291bnQgPj0gbWF4X251bV9vZl9xdWV1ZXNfcGVyX2RldmljZSkgeworCQlwcl93YXJuKCJhbWRrZmQ6IENhbid0IGNyZWF0ZSBuZXcga2VybmVsIHF1ZXVlIGJlY2F1c2UgJWQgcXVldWVzIHdlcmUgYWxyZWFkeSBjcmVhdGVkXG4iLAorCQkJCWRxbS0+dG90YWxfcXVldWVfY291bnQpOworCQltdXRleF91bmxvY2soJmRxbS0+bG9jayk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJLyoKKwkgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IHRoaXMgY291bnRlciwgcmVnYXJkbGVzcyBvZiB0aGUgcXVldWUncworCSAqIHR5cGUgb3Igd2hldGhlciB0aGUgcXVldWUgaXMgYWN0aXZlLgorCSAqLworCWRxbS0+dG90YWxfcXVldWVfY291bnQrKzsKKwlwcl9kZWJ1ZygiVG90YWwgb2YgJWQgcXVldWVzIGFyZSBhY2NvdW50YWJsZSBzbyBmYXJcbiIsCisJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKKwogCWxpc3RfYWRkKCZrcS0+bGlzdCwgJnFwZC0+cHJpdl9xdWV1ZV9saXN0KTsKIAlkcW0tPnF1ZXVlX2NvdW50Kys7CiAJcXBkLT5pc19kZWJ1ZyA9IHRydWU7CkBAIC03NTEsNiArODE4LDEzIEBACiAJZHFtLT5xdWV1ZV9jb3VudC0tOwogCXFwZC0+aXNfZGVidWcgPSBmYWxzZTsKIAlleGVjdXRlX3F1ZXVlc19jcHNjaChkcW0sIGZhbHNlKTsKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBkZWNyZW1lbnQgdGhpcyBjb3VudGVyLCByZWdhcmRsZXNzIG9mIHRoZSBxdWV1ZSdzCisJICogdHlwZS4KKwkgKi8KKwlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50Kys7CisJcHJfZGVidWcoIlRvdGFsIG9mICVkIHF1ZXVlcyBhcmUgYWNjb3VudGFibGUgc28gZmFyXG4iLAorCQkJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCk7CiAJbXV0ZXhfdW5sb2NrKCZkcW0tPmxvY2spOwogfQogCkBAIC03NjksNiArODQzLDEzIEBACiAKIAltdXRleF9sb2NrKCZkcW0tPmxvY2spOwogCisJaWYgKGRxbS0+dG90YWxfcXVldWVfY291bnQgPj0gbWF4X251bV9vZl9xdWV1ZXNfcGVyX2RldmljZSkgeworCQlwcl93YXJuKCJhbWRrZmQ6IENhbid0IGNyZWF0ZSBuZXcgdXNlcm1vZGUgcXVldWUgYmVjYXVzZSAlZCBxdWV1ZXMgd2VyZSBhbHJlYWR5IGNyZWF0ZWRcbiIsCisJCQkJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCk7CisJCXJldHZhbCA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CisJfQorCiAJbXFkID0gZHFtLT5nZXRfbXFkX21hbmFnZXIoZHFtLCBLRkRfTVFEX1RZUEVfQ0lLX0NQKTsKIAlpZiAobXFkID09IE5VTEwpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkcW0tPmxvY2spOwpAQCAtNzg2LDYgKzg2NywxNSBAQAogCQlyZXR2YWwgPSBleGVjdXRlX3F1ZXVlc19jcHNjaChkcW0sIGZhbHNlKTsKIAl9CiAKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgdGhpcyBjb3VudGVyLCByZWdhcmRsZXNzIG9mIHRoZSBxdWV1ZSdzCisJICogdHlwZSBvciB3aGV0aGVyIHRoZSBxdWV1ZSBpcyBhY3RpdmUuCisJICovCisJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCsrOworCisJcHJfZGVidWcoIlRvdGFsIG9mICVkIHF1ZXVlcyBhcmUgYWNjb3VudGFibGUgc28gZmFyXG4iLAorCQkJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCk7CisKIG91dDoKIAltdXRleF91bmxvY2soJmRxbS0+bG9jayk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTkwNiw2ICs5OTYsMTQgQEAKIAogCW1xZC0+dW5pbml0X21xZChtcWQsIHEtPm1xZCwgcS0+bXFkX21lbV9vYmopOwogCisJLyoKKwkgKiBVbmNvbmRpdGlvbmFsbHkgZGVjcmVtZW50IHRoaXMgY291bnRlciwgcmVnYXJkbGVzcyBvZiB0aGUgcXVldWUncworCSAqIHR5cGUKKwkgKi8KKwlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50LS07CisJcHJfZGVidWcoIlRvdGFsIG9mICVkIHF1ZXVlcyBhcmUgYWNjb3VudGFibGUgc28gZmFyXG4iLAorCQkJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCk7CisKIAltdXRleF91bmxvY2soJmRxbS0+bG9jayk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmgKaW5kZXggYzNmMTg5ZTguLjUyMDM1YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5oCkBAIC0xMzAsNiArMTMwLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXF1ZXVlczsKIAl1bnNpZ25lZCBpbnQJCXByb2Nlc3Nlc19jb3VudDsKIAl1bnNpZ25lZCBpbnQJCXF1ZXVlX2NvdW50OworCXVuc2lnbmVkIGludAkJdG90YWxfcXVldWVfY291bnQ7CiAJdW5zaWduZWQgaW50CQluZXh0X3BpcGVfdG9fYWxsb2NhdGU7CiAJdW5zaWduZWQgaW50CQkqYWxsb2NhdGVkX3F1ZXVlczsKIAl1bnNpZ25lZCBpbnQJCXZtaWRfYml0bWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2ZsYXRfbWVtb3J5LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZmxhdF9tZW1vcnkuYwppbmRleCA2NmRmNGRhLi5lNjRhYTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZmxhdF9tZW1vcnkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZmxhdF9tZW1vcnkuYwpAQCAtMjk5LDEzICsyOTksMTMgQEAKIAlzdHJ1Y3Qga2ZkX2RldiAqZGV2OwogCXN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgKnBkZDsKIAotCW11dGV4X2xvY2soJnByb2Nlc3MtPm11dGV4KTsKLQogCS8qSXRlcmF0aW5nIG92ZXIgYWxsIGRldmljZXMqLwogCXdoaWxlICgoZGV2ID0ga2ZkX3RvcG9sb2d5X2VudW1fa2ZkX2RldmljZXMoaWQpKSAhPSBOVUxMICYmCiAJCWlkIDwgTlVNX09GX1NVUFBPUlRFRF9HUFVTKSB7CiAKIAkJcGRkID0ga2ZkX2dldF9wcm9jZXNzX2RldmljZV9kYXRhKGRldiwgcHJvY2VzcywgMSk7CisJCWlmICghcGRkKQorCQkJcmV0dXJuIC0xOwogCiAJCS8qCiAJCSAqIEZvciA2NCBiaXQgcHJvY2VzcyBhcGVydHVyZSB3aWxsIGJlIHN0YXRpY2FsbHkgcmVzZXJ2ZWQgaW4KQEAgLTM0OCw4ICszNDgsNiBAQAogCQlpZCsrOwogCX0KIAotCW11dGV4X3VubG9jaygmcHJvY2Vzcy0+bXV0ZXgpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9pbnRlcnJ1cHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9pbnRlcnJ1cHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI5OTkwOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfaW50ZXJydXB0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqLwotCi0vKgotICogS0ZEIEludGVycnVwdHMuCi0gKgotICogQU1EIEdQVXMgZGVsaXZlciBpbnRlcnJ1cHRzIGJ5IHB1c2hpbmcgYW4gaW50ZXJydXB0IGRlc2NyaXB0aW9uIG9udG8gdGhlCi0gKiBpbnRlcnJ1cHQgcmluZyBhbmQgdGhlbiBzZW5kaW5nIGFuIGludGVycnVwdC4gS0dEIHJlY2VpdmVzIHRoZSBpbnRlcnJ1cHQKLSAqIGluIElTUiBhbmQgc2VuZHMgdXMgYSBwb2ludGVyIHRvIGVhY2ggbmV3IGVudHJ5IG9uIHRoZSBpbnRlcnJ1cHQgcmluZy4KLSAqCi0gKiBXZSBnZW5lcmFsbHkgY2FuJ3QgcHJvY2VzcyBpbnRlcnJ1cHQtc2lnbmFsZWQgZXZlbnRzIGZyb20gSVNSLCBzbyB3ZSBjYWxsCi0gKiBvdXQgdG8gZWFjaCBpbnRlcnJ1cHQgY2xpZW50IG1vZHVsZSAoY3VycmVudGx5IG9ubHkgdGhlIHNjaGVkdWxlcikgdG8gYXNrIGlmCi0gKiBlYWNoIGludGVycnVwdCBpcyBpbnRlcmVzdGluZy4gSWYgdGhleSByZXR1cm4gdHJ1ZSwgdGhlbiBpdCByZXF1aXJlcyBmdXJ0aGVyCi0gKiBwcm9jZXNzaW5nIHNvIHdlIGNvcHkgaXQgdG8gYW4gaW50ZXJuYWwgaW50ZXJydXB0IHJpbmcgYW5kIGNhbGwgZWFjaAotICogaW50ZXJydXB0IGNsaWVudCBhZ2FpbiBmcm9tIGEgd29yay1xdWV1ZS4KLSAqCi0gKiBUaGVyZSdzIG5vIGFja25vd2xlZGdtZW50IGZvciB0aGUgaW50ZXJydXB0cyB3ZSB1c2UuIFRoZSBoYXJkd2FyZSBzaW1wbHkKLSAqIHF1ZXVlcyBhIG5ldyBpbnRlcnJ1cHQgZWFjaCB0aW1lIHdpdGhvdXQgd2FpdGluZy4KLSAqCi0gKiBUaGUgZml4ZWQtc2l6ZSBpbnRlcm5hbCBxdWV1ZSBtZWFucyB0aGF0IGl0J3MgcG9zc2libGUgZm9yIHVzIHRvIGxvc2UKLSAqIGludGVycnVwdHMgYmVjYXVzZSB3ZSBoYXZlIG5vIGJhY2stcHJlc3N1cmUgdG8gdGhlIGhhcmR3YXJlLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSAia2ZkX3ByaXYuaCIKLQotI2RlZmluZSBLRkRfSU5URVJSVVBUX1JJTkdfU0laRSAyNTYKLQotc3RhdGljIHZvaWQgaW50ZXJydXB0X3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKLQotaW50IGtmZF9pbnRlcnJ1cHRfaW5pdChzdHJ1Y3Qga2ZkX2RldiAqa2ZkKQotewotCXZvaWQgKmludGVycnVwdF9yaW5nID0ga21hbGxvY19hcnJheShLRkRfSU5URVJSVVBUX1JJTkdfU0laRSwKLQkJCQkJa2ZkLT5kZXZpY2VfaW5mby0+aWhfcmluZ19lbnRyeV9zaXplLAotCQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWludGVycnVwdF9yaW5nKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWtmZC0+aW50ZXJydXB0X3JpbmcgPSBpbnRlcnJ1cHRfcmluZzsKLQlrZmQtPmludGVycnVwdF9yaW5nX3NpemUgPQotCQlLRkRfSU5URVJSVVBUX1JJTkdfU0laRSAqIGtmZC0+ZGV2aWNlX2luZm8tPmloX3JpbmdfZW50cnlfc2l6ZTsKLQlhdG9taWNfc2V0KCZrZmQtPmludGVycnVwdF9yaW5nX3dwdHIsIDApOwotCWF0b21pY19zZXQoJmtmZC0+aW50ZXJydXB0X3JpbmdfcnB0ciwgMCk7Ci0KLQlzcGluX2xvY2tfaW5pdCgma2ZkLT5pbnRlcnJ1cHRfbG9jayk7Ci0KLQlJTklUX1dPUksoJmtmZC0+aW50ZXJydXB0X3dvcmssIGludGVycnVwdF93cSk7Ci0KLQlrZmQtPmludGVycnVwdHNfYWN0aXZlID0gdHJ1ZTsKLQotCS8qCi0JICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCB0aGUgaW50ZXJydXB0IHdpbGwgYmUgZW5hYmxlZC4gVGhpcwotCSAqIGJhcnJpZXIgZW5zdXJlcyB0aGF0IHRoZSBpbnRlcnJ1cHQgcnVubmluZyBvbiBhIGRpZmZlcmVudCBwcm9jZXNzb3IKLQkgKiBzZWVzIGFsbCB0aGUgYWJvdmUgd3JpdGVzLgotCSAqLwotCXNtcF93bWIoKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGtmZF9pbnRlcnJ1cHRfZXhpdChzdHJ1Y3Qga2ZkX2RldiAqa2ZkKQotewotCS8qCi0JICogU3RvcCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZnJvbSB3cml0aW5nIHRvIHRoZSByaW5nIGFuZCBzY2hlZHVsaW5nCi0JICogd29ya3F1ZXVlIGl0ZW1zLiBUaGUgc3BpbmxvY2sgZW5zdXJlcyB0aGF0IGFueSBpbnRlcnJ1cHQgcnVubmluZwotCSAqIGFmdGVyIHdlIGhhdmUgdW5sb2NrZWQgc2VlcyBpbnRlcnJ1cHRzX2FjdGl2ZSA9IGZhbHNlLgotCSAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgma2ZkLT5pbnRlcnJ1cHRfbG9jaywgZmxhZ3MpOwotCWtmZC0+aW50ZXJydXB0c19hY3RpdmUgPSBmYWxzZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrZmQtPmludGVycnVwdF9sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIEZsdXNoX3NjaGVkdWxlZF93b3JrIGVuc3VyZXMgdGhhdCB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcKLQkgKiB3b3JrLXF1ZXVlIGl0ZW1zIHRoYXQgd2lsbCBhY2Nlc3MgaW50ZXJydXB0X3JpbmcuIE5ldyB3b3JrIGl0ZW1zCi0JICogY2FuJ3QgYmUgY3JlYXRlZCBiZWNhdXNlIHdlIHN0b3BwZWQgaW50ZXJydXB0IGhhbmRsaW5nIGFib3ZlLgotCSAqLwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0KLQlrZnJlZShrZmQtPmludGVycnVwdF9yaW5nKTsKLX0KLQotLyoKLSAqIFRoaXMgYXNzdW1lcyB0aGF0IGl0IGNhbid0IGJlIGNhbGxlZCBjb25jdXJyZW50bHkgd2l0aCBpdHNlbGYKLSAqIGJ1dCBvbmx5IHdpdGggZGVxdWV1ZV9paF9yaW5nX2VudHJ5LgotICovCi1ib29sIGVucXVldWVfaWhfcmluZ19lbnRyeShzdHJ1Y3Qga2ZkX2RldiAqa2ZkLAljb25zdCB2b2lkICppaF9yaW5nX2VudHJ5KQotewotCXVuc2lnbmVkIGludCBycHRyID0gYXRvbWljX3JlYWQoJmtmZC0+aW50ZXJydXB0X3JpbmdfcnB0cik7Ci0JdW5zaWduZWQgaW50IHdwdHIgPSBhdG9taWNfcmVhZCgma2ZkLT5pbnRlcnJ1cHRfcmluZ193cHRyKTsKLQotCWlmICgocnB0ciAtIHdwdHIpICUga2ZkLT5pbnRlcnJ1cHRfcmluZ19zaXplID09Ci0JCQkJCWtmZC0+ZGV2aWNlX2luZm8tPmloX3JpbmdfZW50cnlfc2l6ZSkgewotCQkvKiBUaGlzIGlzIHZlcnkgYmFkLCB0aGUgc3lzdGVtIGlzIGxpa2VseSB0byBoYW5nLiAqLwotCQlkZXZfZXJyX3JhdGVsaW1pdGVkKGtmZF9jaGFyZGV2KCksCi0JCQkiSW50ZXJydXB0IHJpbmcgb3ZlcmZsb3csIGRyb3BwaW5nIGludGVycnVwdC5cbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JbWVtY3B5KGtmZC0+aW50ZXJydXB0X3JpbmcgKyB3cHRyLCBpaF9yaW5nX2VudHJ5LAotCQkJa2ZkLT5kZXZpY2VfaW5mby0+aWhfcmluZ19lbnRyeV9zaXplKTsKLQotCXdwdHIgPSAod3B0ciArIGtmZC0+ZGV2aWNlX2luZm8tPmloX3JpbmdfZW50cnlfc2l6ZSkgJQotCQkJa2ZkLT5pbnRlcnJ1cHRfcmluZ19zaXplOwotCXNtcF93bWIoKTsgLyogRW5zdXJlIG1lbWNweSdkIGRhdGEgaXMgdmlzaWJsZSBiZWZvcmUgd3B0ciB1cGRhdGUuICovCi0JYXRvbWljX3NldCgma2ZkLT5pbnRlcnJ1cHRfcmluZ193cHRyLCB3cHRyKTsKLQotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogVGhpcyBhc3N1bWVzIHRoYXQgaXQgY2FuJ3QgYmUgY2FsbGVkIGNvbmN1cnJlbnRseSB3aXRoIGl0c2VsZgotICogYnV0IG9ubHkgd2l0aCBlbnF1ZXVlX2loX3JpbmdfZW50cnkuCi0gKi8KLXN0YXRpYyBib29sIGRlcXVldWVfaWhfcmluZ19lbnRyeShzdHJ1Y3Qga2ZkX2RldiAqa2ZkLCB2b2lkICppaF9yaW5nX2VudHJ5KQotewotCS8qCi0JICogQXNzdW1lIHRoYXQgd2FpdCBxdWV1ZXMgaGF2ZSBhbiBpbXBsaWNpdCBiYXJyaWVyLCBpLmUuIGFueXRoaW5nIHRoYXQKLQkgKiBoYXBwZW5lZCBpbiB0aGUgSVNSIGJlZm9yZSBpdCBxdWV1ZWQgd29yayBpcyB2aXNpYmxlLgotCSAqLwotCi0JdW5zaWduZWQgaW50IHdwdHIgPSBhdG9taWNfcmVhZCgma2ZkLT5pbnRlcnJ1cHRfcmluZ193cHRyKTsKLQl1bnNpZ25lZCBpbnQgcnB0ciA9IGF0b21pY19yZWFkKCZrZmQtPmludGVycnVwdF9yaW5nX3JwdHIpOwotCi0JaWYgKHJwdHIgPT0gd3B0cikKLQkJcmV0dXJuIGZhbHNlOwotCi0JbWVtY3B5KGloX3JpbmdfZW50cnksIGtmZC0+aW50ZXJydXB0X3JpbmcgKyBycHRyLAotCQkJa2ZkLT5kZXZpY2VfaW5mby0+aWhfcmluZ19lbnRyeV9zaXplKTsKLQotCXJwdHIgPSAocnB0ciArIGtmZC0+ZGV2aWNlX2luZm8tPmloX3JpbmdfZW50cnlfc2l6ZSkgJQotCQkJa2ZkLT5pbnRlcnJ1cHRfcmluZ19zaXplOwotCi0JLyoKLQkgKiBFbnN1cmUgdGhlIHJwdHIgd3JpdGUgdXBkYXRlIGlzIG5vdCB2aXNpYmxlIHVudGlsCi0JICogbWVtY3B5IGhhcyBmaW5pc2hlZCByZWFkaW5nLgotCSAqLwotCXNtcF9tYigpOwotCWF0b21pY19zZXQoJmtmZC0+aW50ZXJydXB0X3JpbmdfcnB0ciwgcnB0cik7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZXJydXB0X3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qga2ZkX2RldiAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBrZmRfZGV2LAotCQkJCQkJaW50ZXJydXB0X3dvcmspOwotCi0JdWludDMyX3QgaWhfcmluZ19lbnRyeVtESVZfUk9VTkRfVVAoCi0JCQkJZGV2LT5kZXZpY2VfaW5mby0+aWhfcmluZ19lbnRyeV9zaXplLAotCQkJCXNpemVvZih1aW50MzJfdCkpXTsKLQotCXdoaWxlIChkZXF1ZXVlX2loX3JpbmdfZW50cnkoZGV2LCBpaF9yaW5nX2VudHJ5KSkKLQkJOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21vZHVsZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21vZHVsZS5jCmluZGV4IDk1ZDVhZjEuLmE4YmU2ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tb2R1bGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbW9kdWxlLmMKQEAgLTUwLDE1ICs1MCwxMCBAQAogTU9EVUxFX1BBUk1fREVTQyhzY2hlZF9wb2xpY3ksCiAJIktlcm5lbCBjbWRsaW5lIHBhcmFtZXRlciB0aGF0IGRlZmluZXMgdGhlIGFtZGtmZCBzY2hlZHVsaW5nIHBvbGljeSIpOwogCi1pbnQgbWF4X251bV9vZl9wcm9jZXNzZXMgPSBLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVNfREVGQVVMVDsKLW1vZHVsZV9wYXJhbShtYXhfbnVtX29mX3Byb2Nlc3NlcywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobWF4X251bV9vZl9wcm9jZXNzZXMsCi0JIktlcm5lbCBjbWRsaW5lIHBhcmFtZXRlciB0aGF0IGRlZmluZXMgdGhlIGFtZGtmZCBtYXhpbXVtIG51bWJlciBvZiBzdXBwb3J0ZWQgcHJvY2Vzc2VzIik7Ci0KLWludCBtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcyA9IEtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfUFJPQ0VTU19ERUZBVUxUOwotbW9kdWxlX3BhcmFtKG1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcywKLQkiS2VybmVsIGNtZGxpbmUgcGFyYW1ldGVyIHRoYXQgZGVmaW5lcyB0aGUgYW1ka2ZkIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMgcGVyIHByb2Nlc3MiKTsKK2ludCBtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlID0gS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9ERVZJQ0VfREVGQVVMVDsKK21vZHVsZV9wYXJhbShtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlLAorCSJNYXhpbXVtIG51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzIHBlciBkZXZpY2UgKDEgPSBNaW5pbXVtLCA0MDk2ID0gZGVmYXVsdCkiKTsKIAogYm9vbCBrZ2Qya2ZkX2luaXQodW5zaWduZWQgaW50ZXJmYWNlX3ZlcnNpb24sCiAJCSAgY29uc3Qgc3RydWN0IGtmZDJrZ2RfY2FsbHMgKmYyZywKQEAgLTEwMCwxNiArOTUsMTAgQEAKIAl9CiAKIAkvKiBWZXJpZnkgbW9kdWxlIHBhcmFtZXRlcnMgKi8KLQlpZiAoKG1heF9udW1fb2ZfcHJvY2Vzc2VzIDwgMCkgfHwKLQkJKG1heF9udW1fb2ZfcHJvY2Vzc2VzID4gS0ZEX01BWF9OVU1fT0ZfUFJPQ0VTU0VTKSkgewotCQlwcl9lcnIoImtmZDogbWF4X251bV9vZl9wcm9jZXNzZXMgbXVzdCBiZSBiZXR3ZWVuIDAgdG8gS0ZEX01BWF9OVU1fT0ZfUFJPQ0VTU0VTXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlmICgobWF4X251bV9vZl9xdWV1ZXNfcGVyX3Byb2Nlc3MgPCAwKSB8fAotCQkobWF4X251bV9vZl9xdWV1ZXNfcGVyX3Byb2Nlc3MgPgotCQkJS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTKSkgewotCQlwcl9lcnIoImtmZDogbWF4X251bV9vZl9xdWV1ZXNfcGVyX3Byb2Nlc3MgbXVzdCBiZSBiZXR3ZWVuIDAgdG8gS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTXG4iKTsKKwlpZiAoKG1heF9udW1fb2ZfcXVldWVzX3Blcl9kZXZpY2UgPCAwKSB8fAorCQkobWF4X251bV9vZl9xdWV1ZXNfcGVyX2RldmljZSA+CisJCQlLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX0RFVklDRSkpIHsKKwkJcHJfZXJyKCJrZmQ6IG1heF9udW1fb2ZfcXVldWVzX3Blcl9kZXZpY2UgbXVzdCBiZSBiZXR3ZWVuIDAgdG8gS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9ERVZJQ0VcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbXFkX21hbmFnZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlci5jCmluZGV4IGFkYzMxNDcuLjRjMzgyOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tcWRfbWFuYWdlci5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAkJCXVpbnQzMl90IHF1ZXVlX2lkKQogewogCi0JcmV0dXJuIGtmZDJrZ2QtPmhxZF9pc19vY2N1cGllcyhtbS0+ZGV2LT5rZ2QsIHF1ZXVlX2FkZHJlc3MsCisJcmV0dXJuIGtmZDJrZ2QtPmhxZF9pc19vY2N1cGllZChtbS0+ZGV2LT5rZ2QsIHF1ZXVlX2FkZHJlc3MsCiAJCQkJCXBpcGVfaWQsIHF1ZXVlX2lkKTsKIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Bhc2lkLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcGFzaWQuYwppbmRleCA3MTY5OWFkOS4uNmNmZTdmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Bhc2lkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Bhc2lkLmMKQEAgLTMwLDkgKzMwLDkgQEAKIAogaW50IGtmZF9wYXNpZF9pbml0KHZvaWQpCiB7Ci0JcGFzaWRfbGltaXQgPSBtYXhfbnVtX29mX3Byb2Nlc3NlczsKKwlwYXNpZF9saW1pdCA9IEtGRF9NQVhfTlVNX09GX1BST0NFU1NFUzsKIAotCXBhc2lkX2JpdG1hcCA9IGt6YWxsb2MoQklUU19UT19MT05HUyhwYXNpZF9saW1pdCksIEdGUF9LRVJORUwpOworCXBhc2lkX2JpdG1hcCA9IGtjYWxsb2MoQklUU19UT19MT05HUyhwYXNpZF9saW1pdCksIHNpemVvZihsb25nKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYXNpZF9iaXRtYXApCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJpdi5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3ByaXYuaAppbmRleCBmOWZiODFlMy4uOTZkYzEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3ByaXYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJpdi5oCkBAIC01MiwyMCArNTIsMTkgQEAKICNkZWZpbmUga2ZkX2FsbG9jX3N0cnVjdChwdHJfdG9fc3RydWN0KQlcCiAJKCh0eXBlb2YocHRyX3RvX3N0cnVjdCkpIGt6YWxsb2Moc2l6ZW9mKCpwdHJfdG9fc3RydWN0KSwgR0ZQX0tFUk5FTCkpCiAKLS8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVyIHRvIHNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHByb2Nlc3NlcyAqLwotZXh0ZXJuIGludCBtYXhfbnVtX29mX3Byb2Nlc3NlczsKLQotI2RlZmluZSBLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVNfREVGQVVMVCAzMgogI2RlZmluZSBLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVMgNTEyCisjZGVmaW5lIEtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfUFJPQ0VTUyAxMDI0CiAKIC8qCi0gKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlciB0byBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMKLSAqIHBlciBwcm9jZXNzCisgKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlciB0byBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMgcGVyCisgKiBkZXZpY2UKICAqLwotZXh0ZXJuIGludCBtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzczsKK2V4dGVybiBpbnQgbWF4X251bV9vZl9xdWV1ZXNfcGVyX2RldmljZTsKIAotI2RlZmluZSBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1NfREVGQVVMVCAxMjgKLSNkZWZpbmUgS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTIDEwMjQKKyNkZWZpbmUgS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9ERVZJQ0VfREVGQVVMVCA0MDk2CisjZGVmaW5lIEtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfREVWSUNFCQlcCisJKEtGRF9NQVhfTlVNX09GX1BST0NFU1NFUyAqCQkJXAorCQkJS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTKQogCiAjZGVmaW5lIEtGRF9LRVJORUxfUVVFVUVfU0laRSAyMDQ4CiAKQEAgLTEzNSwyMiArMTM0LDEwIEBACiAKIAlzdHJ1Y3Qga2dkMmtmZF9zaGFyZWRfcmVzb3VyY2VzIHNoYXJlZF9yZXNvdXJjZXM7CiAKLQl2b2lkICppbnRlcnJ1cHRfcmluZzsKLQlzaXplX3QgaW50ZXJydXB0X3Jpbmdfc2l6ZTsKLQlhdG9taWNfdCBpbnRlcnJ1cHRfcmluZ19ycHRyOwotCWF0b21pY190IGludGVycnVwdF9yaW5nX3dwdHI7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGludGVycnVwdF93b3JrOwotCXNwaW5sb2NrX3QgaW50ZXJydXB0X2xvY2s7Ci0KIAkvKiBRQ00gRGV2aWNlIGluc3RhbmNlICovCiAJc3RydWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkcW07CiAKIAlib29sIGluaXRfY29tcGxldGU7Ci0JLyoKLQkgKiBJbnRlcnJ1cHRzIG9mIGludGVyZXN0IHRvIEtGRCBhcmUgY29waWVkCi0JICogZnJvbSB0aGUgSFcgcmluZyBpbnRvIGEgU1cgcmluZy4KLQkgKi8KLQlib29sIGludGVycnVwdHNfYWN0aXZlOwogfTsKIAogLyogS0dEMktGRCBjYWxsYmFja3MgKi8KQEAgLTQ2Myw2ICs0NTAsMjQgQEAKIAlib29sIGlzXzMyYml0X3VzZXJfbW9kZTsKIH07CiAKKy8qKgorICogSW9jdGwgZnVuY3Rpb24gdHlwZS4KKyAqCisgKiBccGFyYW0gZmlsZXAgcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZS4KKyAqIFxwYXJhbSBwIGFtZGtmZCBwcm9jZXNzIHBvaW50ZXIuCisgKiBccGFyYW0gZGF0YSBwb2ludGVyIHRvIGFyZyB0aGF0IHdhcyBjb3BpZWQgZnJvbSB1c2VyLgorICovCit0eXBlZGVmIGludCBhbWRrZmRfaW9jdGxfdChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKKwkJCQl2b2lkICpkYXRhKTsKKworc3RydWN0IGFtZGtmZF9pb2N0bF9kZXNjIHsKKwl1bnNpZ25lZCBpbnQgY21kOworCWludCBmbGFnczsKKwlhbWRrZmRfaW9jdGxfdCAqZnVuYzsKKwl1bnNpZ25lZCBpbnQgY21kX2RydjsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKwogdm9pZCBrZmRfcHJvY2Vzc19jcmVhdGVfd3Eodm9pZCk7CiB2b2lkIGtmZF9wcm9jZXNzX2Rlc3Ryb3lfd3Eodm9pZCk7CiBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKmtmZF9jcmVhdGVfcHJvY2Vzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CkBAIC01MTMsMTAgKzUxOCw3IEBACiBzdHJ1Y3Qga2ZkX2RldiAqa2ZkX3RvcG9sb2d5X2VudW1fa2ZkX2RldmljZXModWludDhfdCBpZHgpOwogCiAvKiBJbnRlcnJ1cHRzICovCi1pbnQga2ZkX2ludGVycnVwdF9pbml0KHN0cnVjdCBrZmRfZGV2ICpkZXYpOwotdm9pZCBrZmRfaW50ZXJydXB0X2V4aXQoc3RydWN0IGtmZF9kZXYgKmRldik7CiB2b2lkIGtnZDJrZmRfaW50ZXJydXB0KHN0cnVjdCBrZmRfZGV2ICprZmQsIGNvbnN0IHZvaWQgKmloX3JpbmdfZW50cnkpOwotYm9vbCBlbnF1ZXVlX2loX3JpbmdfZW50cnkoc3RydWN0IGtmZF9kZXYgKmtmZCwJY29uc3Qgdm9pZCAqaWhfcmluZ19lbnRyeSk7CiAKIC8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KIHZvaWQga2dkMmtmZF9zdXNwZW5kKHN0cnVjdCBrZmRfZGV2ICprZmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9jZXNzLmMKaW5kZXggYjg1ZWIwYi4uM2M3NmVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJvY2Vzcy5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2FtZC1pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiAKICNpbmNsdWRlICJrZmRfcHJpdi5oIgpAQCAtMjg1LDggKzI4NywxNSBAQAogCWlmIChlcnIgIT0gMCkKIAkJZ290byBlcnJfcHJvY2Vzc19wcW1faW5pdDsKIAorCS8qIGluaXQgcHJvY2VzcyBhcGVydHVyZXMqLworCXByb2Nlc3MtPmlzXzMyYml0X3VzZXJfbW9kZSA9IGlzX2NvbXBhdF90YXNrKCk7CisJaWYgKGtmZF9pbml0X2FwZXJ0dXJlcyhwcm9jZXNzKSAhPSAwKQorCQlnb3RvIGVycl9pbml0X2FwcmV0dXJlczsKKwogCXJldHVybiBwcm9jZXNzOwogCitlcnJfaW5pdF9hcHJldHVyZXM6CisJcHFtX3VuaW5pdCgmcHJvY2Vzcy0+cHFtKTsKIGVycl9wcm9jZXNzX3BxbV9pbml0OgogCWhhc2hfZGVsX3JjdSgmcHJvY2Vzcy0+a2ZkX3Byb2Nlc3Nlcyk7CiAJc3luY2hyb25pemVfcmN1KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJvY2Vzc19xdWV1ZV9tYW5hZ2VyLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJvY2Vzc19xdWV1ZV9tYW5hZ2VyLmMKaW5kZXggNDc1MjY3OC4uZjM3Y2Y1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3NfcXVldWVfbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9jZXNzX3F1ZXVlX21hbmFnZXIuYwpAQCAtNTQsMTEgKzU0LDExIEBACiAJcHJfZGVidWcoImtmZDogaW4gJXNcbiIsIF9fZnVuY19fKTsKIAogCWZvdW5kID0gZmluZF9maXJzdF96ZXJvX2JpdChwcW0tPnF1ZXVlX3Nsb3RfYml0bWFwLAotCQkJbWF4X251bV9vZl9xdWV1ZXNfcGVyX3Byb2Nlc3MpOworCQkJS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTKTsKIAogCXByX2RlYnVnKCJrZmQ6IHRoZSBuZXcgc2xvdCBpZCAlbHVcbiIsIGZvdW5kKTsKIAotCWlmIChmb3VuZCA+PSBtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcykgeworCWlmIChmb3VuZCA+PSBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1MpIHsKIAkJcHJfaW5mbygiYW1ka2ZkOiBDYW4gbm90IG9wZW4gbW9yZSBxdWV1ZXMgZm9yIHByb2Nlc3Mgd2l0aCBwYXNpZCAlZFxuIiwKIAkJCQlwcW0tPnByb2Nlc3MtPnBhc2lkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03Niw3ICs3Niw3IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmcHFtLT5xdWV1ZXMpOwogCXBxbS0+cXVldWVfc2xvdF9iaXRtYXAgPQotCQkJa3phbGxvYyhESVZfUk9VTkRfVVAobWF4X251bV9vZl9xdWV1ZXNfcGVyX3Byb2Nlc3MsCisJCQlremFsbG9jKERJVl9ST1VORF9VUChLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1MsCiAJCQkJCUJJVFNfUEVSX0JZVEUpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHFtLT5xdWV1ZV9zbG90X2JpdG1hcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIwMyw2ICsyMDMsNyBAQAogCQlwcW4tPmtxID0gTlVMTDsKIAkJcmV0dmFsID0gZGV2LT5kcW0tPmNyZWF0ZV9xdWV1ZShkZXYtPmRxbSwgcSwgJnBkZC0+cXBkLAogCQkJCQkJJnEtPnByb3BlcnRpZXMudm1pZCk7CisJCXByX2RlYnVnKCJEUU0gcmV0dXJuZWQgJWQgZm9yIGNyZWF0ZV9xdWV1ZVxuIiwgcmV0dmFsKTsKIAkJcHJpbnRfcXVldWUocSk7CiAJCWJyZWFrOwogCWNhc2UgS0ZEX1FVRVVFX1RZUEVfRElROgpAQCAtMjIyLDcgKzIyMyw3IEBACiAJfQogCiAJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCXByX2Vycigia2ZkOiBlcnJvciBkcW0gY3JlYXRlIHF1ZXVlXG4iKTsKKwkJcHJfZGVidWcoIkVycm9yIGRxbSBjcmVhdGUgcXVldWVcbiIpOwogCQlnb3RvIGVycl9jcmVhdGVfcXVldWU7CiAJfQogCkBAIC0yNDEsNyArMjQyLDEwIEBACiBlcnJfY3JlYXRlX3F1ZXVlOgogCWtmcmVlKHBxbik7CiBlcnJfYWxsb2NhdGVfcHFuOgorCS8qIGNoZWNrIGlmIHF1ZXVlcyBsaXN0IGlzIGVtcHR5IHVucmVnaXN0ZXIgcHJvY2VzcyBmcm9tIGRldmljZSAqLwogCWNsZWFyX2JpdCgqcWlkLCBwcW0tPnF1ZXVlX3Nsb3RfYml0bWFwKTsKKwlpZiAobGlzdF9lbXB0eSgmcHFtLT5xdWV1ZXMpKQorCQlkZXYtPmRxbS0+dW5yZWdpc3Rlcl9wcm9jZXNzKGRldi0+ZHFtLCAmcGRkLT5xcGQpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF90b3BvbG9neS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3RvcG9sb2d5LmMKaW5kZXggNTczM2UyOC4uY2NhMTcwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3RvcG9sb2d5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3RvcG9sb2d5LmMKQEAgLTcwMCw4ICs3MDAsNiBAQAogCQkJCWRldi0+bm9kZV9wcm9wcy5zaW1kX3Blcl9jdSk7CiAJCXN5c2ZzX3Nob3dfMzJiaXRfcHJvcChidWZmZXIsICJtYXhfc2xvdHNfc2NyYXRjaF9jdSIsCiAJCQkJZGV2LT5ub2RlX3Byb3BzLm1heF9zbG90c19zY3JhdGNoX2N1KTsKLQkJc3lzZnNfc2hvd18zMmJpdF9wcm9wKGJ1ZmZlciwgImVuZ2luZV9pZCIsCi0JCQkJZGV2LT5ub2RlX3Byb3BzLmVuZ2luZV9pZCk7CiAJCXN5c2ZzX3Nob3dfMzJiaXRfcHJvcChidWZmZXIsICJ2ZW5kb3JfaWQiLAogCQkJCWRldi0+bm9kZV9wcm9wcy52ZW5kb3JfaWQpOwogCQlzeXNmc19zaG93XzMyYml0X3Byb3AoYnVmZmVyLCAiZGV2aWNlX2lkIiwKQEAgLTcxNSw2ICs3MTMsMTIgQEAKIAkJCQkJCWRldi0+Z3B1LT5rZ2QpKTsKIAkJCXN5c2ZzX3Nob3dfNjRiaXRfcHJvcChidWZmZXIsICJsb2NhbF9tZW1fc2l6ZSIsCiAJCQkJCWtmZDJrZ2QtPmdldF92bWVtX3NpemUoZGV2LT5ncHUtPmtnZCkpOworCisJCQlzeXNmc19zaG93XzMyYml0X3Byb3AoYnVmZmVyLCAiZndfdmVyc2lvbiIsCisJCQkJCWtmZDJrZ2QtPmdldF9md192ZXJzaW9uKAorCQkJCQkJCWRldi0+Z3B1LT5rZ2QsCisJCQkJCQkJS0dEX0VOR0lORV9NRUMxKSk7CisKIAkJfQogCiAJCXJldCA9IHN5c2ZzX3Nob3dfMzJiaXRfcHJvcChidWZmZXIsICJtYXhfZW5naW5lX2Nsa19jY29tcHV0ZSIsCkBAIC05MTcsNyArOTIxLDcgQEAKIAl1aW50MzJfdCBpID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmdG9wb2xvZ3lfZGV2aWNlX2xpc3QsIGxpc3QpIHsKLQkJcmV0ID0ga2ZkX2J1aWxkX3N5c2ZzX25vZGVfZW50cnkoZGV2LCAwKTsKKwkJcmV0ID0ga2ZkX2J1aWxkX3N5c2ZzX25vZGVfZW50cnkoZGV2LCBpKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCQlpKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUva2dkX2tmZF9pbnRlcmZhY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9rZ2Rfa2ZkX2ludGVyZmFjZS5oCmluZGV4IDljNzI5ZGQuLjk2YTUxMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9rZ2Rfa2ZkX2ludGVyZmFjZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9rZ2Rfa2ZkX2ludGVyZmFjZS5oCkBAIC00NSw2ICs0NSwxNyBAQAogCUtHRF9QT09MX0ZSQU1FQlVGRkVSID0gMywKIH07CiAKK2VudW0ga2dkX2VuZ2luZV90eXBlIHsKKwlLR0RfRU5HSU5FX1BGUCA9IDEsCisJS0dEX0VOR0lORV9NRSwKKwlLR0RfRU5HSU5FX0NFLAorCUtHRF9FTkdJTkVfTUVDMSwKKwlLR0RfRU5HSU5FX01FQzIsCisJS0dEX0VOR0lORV9STEMsCisJS0dEX0VOR0lORV9TRE1BLAorCUtHRF9FTkdJTkVfTUFYCit9OworCiBzdHJ1Y3Qga2dkMmtmZF9zaGFyZWRfcmVzb3VyY2VzIHsKIAkvKiBCaXQgbiA9PSAxIG1lYW5zIFZNSUQgbiBpcyBhdmFpbGFibGUgZm9yIEtGRC4gKi8KIAl1bnNpZ25lZCBpbnQgY29tcHV0ZV92bWlkX2JpdG1hcDsKQEAgLTEzNyw2ICsxNDgsOCBAQAogICoKICAqIEBocWRfZGVzdHJveTogRGVzdHJ1Y3RzIGFuZCBwcmVlbXB0cyB0aGUgcXVldWUgYXNzaWduZWQgdG8gdGhhdCBocWQgc2xvdC4KICAqCisgKiBAZ2V0X2Z3X3ZlcnNpb246IFJldHVybnMgRlcgdmVyc2lvbnMgZnJvbSB0aGUgaGVhZGVyCisgKgogICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gc2VydmljZXMgdGhhdCB0aGUga2dkIGRyaXZlcgogICogcHJvdmlkZXMgdG8gYW1ka2ZkIGRyaXZlci4KICAqCkBAIC0xNzAsMTIgKzE4MywxNCBAQAogCWludCAoKmhxZF9sb2FkKShzdHJ1Y3Qga2dkX2RldiAqa2dkLCB2b2lkICptcWQsIHVpbnQzMl90IHBpcGVfaWQsCiAJCQl1aW50MzJfdCBxdWV1ZV9pZCwgdWludDMyX3QgX191c2VyICp3cHRyKTsKIAotCWJvb2wgKCpocWRfaXNfb2NjdXBpZXMpKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHVpbnQ2NF90IHF1ZXVlX2FkZHJlc3MsCisJYm9vbCAoKmhxZF9pc19vY2N1cGllZCkoc3RydWN0IGtnZF9kZXYgKmtnZCwgdWludDY0X3QgcXVldWVfYWRkcmVzcywKIAkJCQl1aW50MzJfdCBwaXBlX2lkLCB1aW50MzJfdCBxdWV1ZV9pZCk7CiAKIAlpbnQgKCpocWRfZGVzdHJveSkoc3RydWN0IGtnZF9kZXYgKmtnZCwgdWludDMyX3QgcmVzZXRfdHlwZSwKIAkJCQl1bnNpZ25lZCBpbnQgdGltZW91dCwgdWludDMyX3QgcGlwZV9pZCwKIAkJCQl1aW50MzJfdCBxdWV1ZV9pZCk7CisJdWludDE2X3QgKCpnZXRfZndfdmVyc2lvbikoc3RydWN0IGtnZF9kZXYgKmtnZCwKKwkJCQllbnVtIGtnZF9lbmdpbmVfdHlwZSB0eXBlKTsKIH07CiAKIGJvb2wga2dkMmtmZF9pbml0KHVuc2lnbmVkIGludGVyZmFjZV92ZXJzaW9uLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwppbmRleCA0YTc4YTc3Li5iYmRiZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwpAQCAtNjEsNyArNjEsNyBAQAogCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKIAogCWlmIChwbGFuZS0+c3RhdGUtPmNydGMpIHsKLQkJY3J0Y19zdGF0ZSA9IHN0YXRlLT5jcnRjX3N0YXRlc1tkcm1fY3J0Y19pbmRleChwbGFuZS0+Y3J0YyldOworCQljcnRjX3N0YXRlID0gc3RhdGUtPmNydGNfc3RhdGVzW2RybV9jcnRjX2luZGV4KHBsYW5lLT5zdGF0ZS0+Y3J0YyldOwogCiAJCWlmIChXQVJOX09OKCFjcnRjX3N0YXRlKSkKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCmluZGV4IDUyY2UyNmQuLmRjMzg2ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtMTQ1LDYgKzE0NSwzMSBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2FkZF9vbmVfY29ubmVjdG9yKTsKIAorc3RhdGljIHZvaWQgcmVtb3ZlX2Zyb21fbW9kZXNldChzdHJ1Y3QgZHJtX21vZGVfc2V0ICpzZXQsCisJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2V0LT5udW1fY29ubmVjdG9yczsgaSsrKSB7CisJCWlmIChzZXQtPmNvbm5lY3RvcnNbaV0gPT0gY29ubmVjdG9yKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gc2V0LT5udW1fY29ubmVjdG9ycykKKwkJcmV0dXJuOworCisJZm9yIChqID0gaSArIDE7IGogPCBzZXQtPm51bV9jb25uZWN0b3JzOyBqKyspIHsKKwkJc2V0LT5jb25uZWN0b3JzW2ogLSAxXSA9IHNldC0+Y29ubmVjdG9yc1tqXTsKKwl9CisJc2V0LT5udW1fY29ubmVjdG9ycy0tOworCisJLyogYmVjYXVzZSBpOTE1IGlzIHBpc3N5IGFib3V0IHRoaXMuLgorCSAqIFRPRE8gbWF5YmUgbmVlZCB0byBtYWtlcyBzdXJlIHdlIHNldCBpdCBiYWNrIHRvICE9TlVMTCBzb21ld2hlcmU/CisJICovCisJaWYgKHNldC0+bnVtX2Nvbm5lY3RvcnMgPT0gMCkKKwkJc2V0LT5mYiA9IE5VTEw7Cit9CisKIGludCBkcm1fZmJfaGVscGVyX3JlbW92ZV9vbmVfY29ubmVjdG9yKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJCQkJICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CkBAIC0xNjcsNiArMTkyLDExIEBACiAJfQogCWZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50LS07CiAJa2ZyZWUoZmJfaGVscGVyX2Nvbm5lY3Rvcik7CisKKwkvKiBhbHNvIGNsZWFudXAgZGFuZ2xpbmcgcmVmZXJlbmNlcyB0byB0aGUgY29ubmVjdG9yOiAqLworCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykKKwkJcmVtb3ZlX2Zyb21fbW9kZXNldCgmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQsIGNvbm5lY3Rvcik7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25lX2Nvbm5lY3Rvcik7CkBAIC03NDEsNyArNzcxLDkgQEAKIAlpbnQgaSwgaiwgcmMgPSAwOwogCWludCBzdGFydDsKIAotCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRldik7CisJaWYgKF9fZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2LCAhIW9vcHNfaW5fcHJvZ3Jlc3MpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQogCWlmICghZHJtX2ZiX2hlbHBlcl9pc19ib3VuZChmYl9oZWxwZXIpKSB7CiAJCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZGV2KTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTkxNSw3ICs5NDcsOSBAQAogCWludCByZXQgPSAwOwogCWludCBpOwogCi0JZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2KTsKKwlpZiAoX19kcm1fbW9kZXNldF9sb2NrX2FsbChkZXYsICEhb29wc19pbl9wcm9ncmVzcykpIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAJaWYgKCFkcm1fZmJfaGVscGVyX2lzX2JvdW5kKGZiX2hlbHBlcikpIHsKIAkJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXYpOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKaW5kZXggZjVhNWYxOC4uNGQ3OWRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCkBAIC04MzAsNiArODMwLDggQEAKICAqIHZibGFuayBldmVudHMgc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCBpbmNsdWRpbmcgbG9zdCBldmVudHMgZHVlIHRvCiAgKiBtb2Rlc2V0dGluZyBhY3Rpdml0eS4KICAqCisgKiBUaGlzIGlzIHRoZSBsZWdhY3kgdmVyc2lvbiBvZiBkcm1fY3J0Y192YmxhbmtfY291bnQoKS4KKyAqCiAgKiBSZXR1cm5zOgogICogVGhlIHNvZnR3YXJlIHZibGFuayBjb3VudGVyLgogICovCkBAIC04NDQsNiArODQ2LDI1IEBACiBFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfY291bnQpOwogCiAvKioKKyAqIGRybV9jcnRjX3ZibGFua19jb3VudCAtIHJldHJpZXZlICJjb29rZWQiIHZibGFuayBjb3VudGVyIHZhbHVlCisgKiBAY3J0Yzogd2hpY2ggY291bnRlciB0byByZXRyaWV2ZQorICoKKyAqIEZldGNoZXMgdGhlICJjb29rZWQiIHZibGFuayBjb3VudCB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZgorICogdmJsYW5rIGV2ZW50cyBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIGluY2x1ZGluZyBsb3N0IGV2ZW50cyBkdWUgdG8KKyAqIG1vZGVzZXR0aW5nIGFjdGl2aXR5LgorICoKKyAqIFRoaXMgaXMgdGhlIG5hdGl2ZSBLTVMgdmVyc2lvbiBvZiBkcm1fdmJsYW5rX2NvdW50KCkuCisgKgorICogUmV0dXJuczoKKyAqIFRoZSBzb2Z0d2FyZSB2YmxhbmsgY291bnRlci4KKyAqLwordTMyIGRybV9jcnRjX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJcmV0dXJuIGRybV92YmxhbmtfY291bnQoY3J0Yy0+ZGV2LCBkcm1fY3J0Y19pbmRleChjcnRjKSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9jcnRjX3ZibGFua19jb3VudCk7CisKKy8qKgogICogZHJtX3ZibGFua19jb3VudF9hbmRfdGltZSAtIHJldHJpZXZlICJjb29rZWQiIHZibGFuayBjb3VudGVyIHZhbHVlCiAgKiBhbmQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgY29ycmVzcG9uZGluZyB0byB0aGF0IHZibGFuayBjb3VudGVyIHZhbHVlLgogICoKQEAgLTkwNCw2ICs5MjUsOCBAQAogICoKICAqIFVwZGF0ZXMgc2VxdWVuY2UgIyBhbmQgdGltZXN0YW1wIG9uIGV2ZW50LCBhbmQgc2VuZHMgaXQgdG8gdXNlcnNwYWNlLgogICogQ2FsbGVyIG11c3QgaG9sZCBldmVudCBsb2NrLgorICoKKyAqIFRoaXMgaXMgdGhlIGxlZ2FjeSB2ZXJzaW9uIG9mIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KCkuCiAgKi8KIHZvaWQgZHJtX3NlbmRfdmJsYW5rX2V2ZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjLAogCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplKQpAQCAtOTIzLDYgKzk0NiwyMyBAQAogRVhQT1JUX1NZTUJPTChkcm1fc2VuZF92YmxhbmtfZXZlbnQpOwogCiAvKioKKyAqIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50IC0gaGVscGVyIHRvIHNlbmQgdmJsYW5rIGV2ZW50IGFmdGVyIHBhZ2VmbGlwCisgKiBAY3J0YzogdGhlIHNvdXJjZSBDUlRDIG9mIHRoZSB2YmxhbmsgZXZlbnQKKyAqIEBlOiB0aGUgZXZlbnQgdG8gc2VuZAorICoKKyAqIFVwZGF0ZXMgc2VxdWVuY2UgIyBhbmQgdGltZXN0YW1wIG9uIGV2ZW50LCBhbmQgc2VuZHMgaXQgdG8gdXNlcnNwYWNlLgorICogQ2FsbGVyIG11c3QgaG9sZCBldmVudCBsb2NrLgorICoKKyAqIFRoaXMgaXMgdGhlIG5hdGl2ZSBLTVMgdmVyc2lvbiBvZiBkcm1fc2VuZF92YmxhbmtfZXZlbnQoKS4KKyAqLwordm9pZCBkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSkKK3sKKwlkcm1fc2VuZF92YmxhbmtfZXZlbnQoY3J0Yy0+ZGV2LCBkcm1fY3J0Y19pbmRleChjcnRjKSwgZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KTsKKworLyoqCiAgKiBkcm1fdmJsYW5rX2VuYWJsZSAtIGVuYWJsZSB0aGUgdmJsYW5rIGludGVycnVwdCBvbiBhIENSVEMKICAqIEBkZXY6IERSTSBkZXZpY2UKICAqIEBjcnRjOiBDUlRDIGluIHF1ZXN0aW9uCkBAIC0xNTk0LDYgKzE2MzQsOCBAQAogICoKICAqIERyaXZlcnMgc2hvdWxkIGNhbGwgdGhpcyByb3V0aW5lIGluIHRoZWlyIHZibGFuayBpbnRlcnJ1cHQgaGFuZGxlcnMgdG8KICAqIHVwZGF0ZSB0aGUgdmJsYW5rIGNvdW50ZXIgYW5kIHNlbmQgYW55IHNpZ25hbHMgdGhhdCBtYXkgYmUgcGVuZGluZy4KKyAqCisgKiBUaGlzIGlzIHRoZSBsZWdhY3kgdmVyc2lvbiBvZiBkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCkuCiAgKi8KIGJvb2wgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7CkBAIC0xNjcwLDMgKzE3MTIsMjEgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2hhbmRsZV92YmxhbmspOworCisvKioKKyAqIGRybV9jcnRjX2hhbmRsZV92YmxhbmsgLSBoYW5kbGUgYSB2YmxhbmsgZXZlbnQKKyAqIEBjcnRjOiB3aGVyZSB0aGlzIGV2ZW50IG9jY3VycmVkCisgKgorICogRHJpdmVycyBzaG91bGQgY2FsbCB0aGlzIHJvdXRpbmUgaW4gdGhlaXIgdmJsYW5rIGludGVycnVwdCBoYW5kbGVycyB0bworICogdXBkYXRlIHRoZSB2YmxhbmsgY291bnRlciBhbmQgc2VuZCBhbnkgc2lnbmFscyB0aGF0IG1heSBiZSBwZW5kaW5nLgorICoKKyAqIFRoaXMgaXMgdGhlIG5hdGl2ZSBLTVMgdmVyc2lvbiBvZiBkcm1faGFuZGxlX3ZibGFuaygpLgorICoKKyAqIFJldHVybnM6CisgKiBUcnVlIGlmIHRoZSBldmVudCB3YXMgc3VjY2Vzc2Z1bGx5IGhhbmRsZWQsIGZhbHNlIG9uIGZhaWx1cmUuCisgKi8KK2Jvb2wgZHJtX2NydGNfaGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJcmV0dXJuIGRybV9oYW5kbGVfdmJsYW5rKGNydGMtPmRldiwgZHJtX2NydGNfaW5kZXgoY3J0YykpOworfQorRVhQT1JUX1NZTUJPTChkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYuYwppbmRleCAxMjE0NzBhLi4xYmNiZTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jCkBAIC02NDUsMTggKzY0NSw2IEBACiAJaWYgKCFpc19leHlub3MpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyoKLQkgKiBSZWdpc3RlciBkZXZpY2Ugb2JqZWN0IG9ubHkgaW4gY2FzZSBvZiBFeHlub3MgU29DLgotCSAqCi0JICogQmVsb3cgY29kZXMgcmVzb2x2ZXMgdGVtcG9yYXJpbHkgaW5maW5pdGUgbG9vcCBpc3N1ZSBpbmN1cnJlZAotCSAqIGJ5IEV4eW5vcyBkcm0gZHJpdmVyIHdoZW4gdXNpbmcgbXVsdGktcGxhdGZvcm0ga2VybmVsLgotCSAqIFNvIHRoZXNlIGNvZGVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBtb3JlIGdlbmVyaWMgd2F5IGxhdGVyLgotCSAqLwotCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczMiKSAmJgotCQkJIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M0IikgJiYKLQkJCSFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInNhbXN1bmcsZXh5bm9zNSIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCWV4eW5vc19kcm1fcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImV4eW5vcy1kcm0iLCAtMSwKIAkJCQkJCQkJTlVMTCwgMCk7CiAJaWYgKElTX0VSUihleHlub3NfZHJtX3BkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfaGRtaS5jCmluZGV4IDU3NjVhMTYuLjk4MDUxZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19oZG1pLmMKQEAgLTE2NjksNyArMTY2OSw2IEBACiAKIHN0YXRpYyB2b2lkIGhkbWlwaHlfY29uZl9yZXNldChzdHJ1Y3QgaGRtaV9jb250ZXh0ICpoZGF0YSkKIHsKLQl1OCBidWZmZXJbMl07CiAJdTMyIHJlZzsKIAogCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZGF0YS0+cmVzLnNjbGtfaGRtaSk7CkBAIC0xNjc3LDExICsxNjc2LDggQEAKIAljbGtfcHJlcGFyZV9lbmFibGUoaGRhdGEtPnJlcy5zY2xrX2hkbWkpOwogCiAJLyogb3BlcmF0aW9uIG1vZGUgKi8KLQlidWZmZXJbMF0gPSAweDFmOwotCWJ1ZmZlclsxXSA9IDB4MDA7Ci0KLQlpZiAoaGRhdGEtPmhkbWlwaHlfcG9ydCkKLQkJaTJjX21hc3Rlcl9zZW5kKGhkYXRhLT5oZG1pcGh5X3BvcnQsIGJ1ZmZlciwgMik7CisJaGRtaXBoeV9yZWdfd3JpdGViKGhkYXRhLCBIRE1JUEhZX01PREVfU0VUX0RPTkUsCisJCQkJSERNSV9QSFlfRU5BQkxFX01PREVfU0VUKTsKIAogCWlmIChoZGF0YS0+dHlwZSA9PSBIRE1JX1RZUEUxMykKIAkJcmVnID0gSERNSV9WMTNfUEhZX1JTVE9VVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX21peGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19taXhlci5jCmluZGV4IDgyMGI3NjIuLjA2NGVkNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX21peGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfbWl4ZXIuYwpAQCAtMTAyNiw2ICsxMDI2LDcgQEAKIHN0YXRpYyB2b2lkIG1peGVyX3dhaXRfZm9yX3ZibGFuayhzdHJ1Y3QgZXh5bm9zX2RybV9tYW5hZ2VyICptZ3IpCiB7CiAJc3RydWN0IG1peGVyX2NvbnRleHQgKm1peGVyX2N0eCA9IG1ncl90b19taXhlcihtZ3IpOworCWludCBlcnI7CiAKIAltdXRleF9sb2NrKCZtaXhlcl9jdHgtPm1peGVyX211dGV4KTsKIAlpZiAoIW1peGVyX2N0eC0+cG93ZXJlZCkgewpAQCAtMTAzNCw3ICsxMDM1LDExIEBACiAJfQogCW11dGV4X3VubG9jaygmbWl4ZXJfY3R4LT5taXhlcl9tdXRleCk7CiAKLQlkcm1fdmJsYW5rX2dldChtZ3ItPmNydGMtPmRldiwgbWl4ZXJfY3R4LT5waXBlKTsKKwllcnIgPSBkcm1fdmJsYW5rX2dldChtZ3ItPmNydGMtPmRldiwgbWl4ZXJfY3R4LT5waXBlKTsKKwlpZiAoZXJyIDwgMCkgeworCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgdG8gYWNxdWlyZSB2YmxhbmsgY291bnRlclxuIik7CisJCXJldHVybjsKKwl9CiAKIAlhdG9taWNfc2V0KCZtaXhlcl9jdHgtPndhaXRfdnN5bmNfZXZlbnQsIDEpOwogCkBAIC0xMjYyLDggKzEyNjcsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI3Miw4ICsxMjc1LDYgQEAKIAlzdHJ1Y3QgbWl4ZXJfY29udGV4dCAqY3R4ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAltaXhlcl9tZ3JfcmVtb3ZlKCZjdHgtPm1hbmFnZXIpOwotCi0JcG1fcnVudGltZV9kaXNhYmxlKGRldik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtaXhlcl9jb21wb25lbnRfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2kyYy90ZGE5OTh4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2kyYy90ZGE5OTh4X2Rydi5jCmluZGV4IGQ0NzYyNzkuLmE5MDQxZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvdGRhOTk4eF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTJjL3RkYTk5OHhfZHJ2LmMKQEAgLTMyLDYgKzMyLDggQEAKIHN0cnVjdCB0ZGE5OTh4X3ByaXYgewogCXN0cnVjdCBpMmNfY2xpZW50ICpjZWM7CiAJc3RydWN0IGkyY19jbGllbnQgKmhkbWk7CisJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7CiAJdWludDE2X3QgcmV2OwogCXVpbnQ4X3QgY3VycmVudF9wYWdlOwogCWludCBkcG1zOwpAQCAtNDAyLDkgKzQwNCwxMCBAQAogCXVpbnQ4X3QgYWRkciA9IFJFRzJBRERSKHJlZyk7CiAJaW50IHJldDsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlyZXQgPSBzZXRfcGFnZShwcml2LCByZWcpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKIAogCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsICZhZGRyLCBzaXplb2YoYWRkcikpOwogCWlmIChyZXQgPCAwKQpAQCAtNDE0LDEwICs0MTcsMTIgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBmYWlsOwogCi0JcmV0dXJuIHJldDsKKwlnb3RvIG91dDsKIAogZmFpbDoKIAlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkVycm9yICVkIHJlYWRpbmcgZnJvbSAweCV4XG4iLCByZXQsIHJlZyk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDMxLDEzICs0MzYsMTYgQEAKIAlidWZbMF0gPSBSRUcyQUREUihyZWcpOwogCW1lbWNweSgmYnVmWzFdLCBwLCBjbnQpOwogCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldCA9IHNldF9wYWdlKHByaXYsIHJlZyk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIGNudCArIDEpOwogCWlmIChyZXQgPCAwKQogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkVycm9yICVkIHdyaXRpbmcgdG8gMHgleFxuIiwgcmV0LCByZWcpOworb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50CkBAIC00NTksMTMgKzQ2NywxNiBAQAogCXVpbnQ4X3QgYnVmW10gPSB7UkVHMkFERFIocmVnKSwgdmFsfTsKIAlpbnQgcmV0OwogCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldCA9IHNldF9wYWdlKHByaXYsIHJlZyk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIHNpemVvZihidWYpKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJFcnJvciAlZCB3cml0aW5nIHRvIDB4JXhcbiIsIHJldCwgcmVnKTsKK291dDoKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ3NSwxMyArNDg2LDE2IEBACiAJdWludDhfdCBidWZbXSA9IHtSRUcyQUREUihyZWcpLCB2YWwgPj4gOCwgdmFsfTsKIAlpbnQgcmV0OwogCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldCA9IHNldF9wYWdlKHByaXYsIHJlZyk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIHNpemVvZihidWYpKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJFcnJvciAlZCB3cml0aW5nIHRvIDB4JXhcbiIsIHJldCwgcmVnKTsKK291dDoKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTUzNiw2ICs1NTAsMTcgQEAKIAlyZWdfd3JpdGUocHJpdiwgUkVHX01VWF9WUF9WSVBfT1VULCAweDI0KTsKIH0KIAorLyogaGFuZGxlIEhETUkgY29ubmVjdC9kaXNjb25uZWN0ICovCitzdGF0aWMgdm9pZCB0ZGE5OTh4X2hwZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7CisJc3RydWN0IHRkYTk5OHhfcHJpdiAqcHJpdiA9CisJCQljb250YWluZXJfb2YoZHdvcmssIHN0cnVjdCB0ZGE5OTh4X3ByaXYsIGR3b3JrKTsKKworCWlmIChwcml2LT5lbmNvZGVyICYmIHByaXYtPmVuY29kZXItPmRldikKKwkJZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVudChwcml2LT5lbmNvZGVyLT5kZXYpOworfQorCiAvKgogICogb25seSAyIGludGVycnVwdHMgbWF5IG9jY3VyOiBzY3JlZW4gcGx1Zy91bnBsdWcgYW5kIEVESUQgcmVhZAogICovCkBAIC01NTksOCArNTg0LDcgQEAKIAkJcHJpdi0+d3FfZWRpZF93YWl0ID0gMDsKIAkJd2FrZV91cCgmcHJpdi0+d3FfZWRpZCk7CiAJfSBlbHNlIGlmIChjZWMgIT0gMCkgewkJCS8qIEhQRCBjaGFuZ2UgKi8KLQkJaWYgKHByaXYtPmVuY29kZXIgJiYgcHJpdi0+ZW5jb2Rlci0+ZGV2KQotCQkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KHByaXYtPmVuY29kZXItPmRldik7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmssIEhaLzEwKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTE3MCw4ICsxMTk0LDEwIEBACiAJLyogZGlzYWJsZSBhbGwgSVJRcyBhbmQgZnJlZSB0aGUgSVJRIGhhbmRsZXIgKi8KIAljZWNfd3JpdGUocHJpdiwgUkVHX0NFQ19SWFNIUERJTlRFTkEsIDApOwogCXJlZ19jbGVhcihwcml2LCBSRUdfSU5UX0ZMQUdTXzIsIElOVF9GTEFHU18yX0VESURfQkxLX1JEKTsKLQlpZiAocHJpdi0+aGRtaS0+aXJxKQorCWlmIChwcml2LT5oZG1pLT5pcnEpIHsKIAkJZnJlZV9pcnEocHJpdi0+aGRtaS0+aXJxLCBwcml2KTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5kd29yayk7CisJfQogCiAJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKHByaXYtPmNlYyk7CiB9CkBAIC0xMjU1LDYgKzEyODEsNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBjbGllbnQtPmRldi5vZl9ub2RlOwogCXUzMiB2aWRlbzsKIAlpbnQgcmV2X2xvLCByZXZfaGksIHJldDsKKwl1bnNpZ25lZCBzaG9ydCBjZWNfYWRkcjsKIAogCXByaXYtPnZpcF9jbnRybF8wID0gVklQX0NOVFJMXzBfU1dBUF9BKDIpIHwgVklQX0NOVFJMXzBfU1dBUF9CKDMpOwogCXByaXYtPnZpcF9jbnRybF8xID0gVklQX0NOVFJMXzFfU1dBUF9DKDApIHwgVklQX0NOVFJMXzFfU1dBUF9EKDEpOwpAQCAtMTI2MiwxMiArMTI4OSwxNiBAQAogCiAJcHJpdi0+Y3VycmVudF9wYWdlID0gMHhmZjsKIAlwcml2LT5oZG1pID0gY2xpZW50OwotCXByaXYtPmNlYyA9IGkyY19uZXdfZHVtbXkoY2xpZW50LT5hZGFwdGVyLCAweDM0KTsKKwkvKiBDRUMgSTJDIGFkZHJlc3MgYm91bmQgdG8gVERBOTk4eCBJMkMgYWRkciBieSBjb25maWd1cmF0aW9uIHBpbnMgKi8KKwljZWNfYWRkciA9IDB4MzQgKyAoY2xpZW50LT5hZGRyICYgMHgwMyk7CisJcHJpdi0+Y2VjID0gaTJjX25ld19kdW1teShjbGllbnQtPmFkYXB0ZXIsIGNlY19hZGRyKTsKIAlpZiAoIXByaXYtPmNlYykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwcml2LT5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CiAKKwltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CS8qIHByb3RlY3QgdGhlIHBhZ2UgYWNjZXNzICovCisKIAkvKiB3YWtlIHVwIHRoZSBkZXZpY2U6ICovCiAJY2VjX3dyaXRlKHByaXYsIFJFR19DRUNfRU5BTU9EUywKIAkJCUNFQ19FTkFNT0RTX0VOX1JYU0VOUyB8IENFQ19FTkFNT0RTX0VOX0hETUkpOwpAQCAtMTMyMyw4ICsxMzU0LDkgQEAKIAlpZiAoY2xpZW50LT5pcnEpIHsKIAkJaW50IGlycWZfdHJpZ2dlcjsKIAotCQkvKiBpbml0IHJlYWQgRURJRCB3YWl0cXVldWUgKi8KKwkJLyogaW5pdCByZWFkIEVESUQgd2FpdHF1ZXVlIGFuZCBIRFAgd29yayAqLwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53cV9lZGlkKTsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmR3b3JrLCB0ZGE5OTh4X2hwZCk7CiAKIAkJLyogY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCiAJCXJlZ19yZWFkKHByaXYsIFJFR19JTlRfRkxBR1NfMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBmOTkwYWI0Yy4uNzY0MzMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC00NjIsMTkgKzQ2MiwxMyBAQAogCQkJfSBlbHNlIGlmIChpZCA9PSBJTlRFTF9QQ0hfTFBUX0RFVklDRV9JRF9UWVBFKSB7CiAJCQkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX0xQVDsKIAkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBMeW54UG9pbnQgUENIXG4iKTsKLQkJCQlXQVJOX09OKCFJU19IQVNXRUxMKGRldikpOwotCQkJCVdBUk5fT04oSVNfSFNXX1VMVChkZXYpKTsKLQkJCX0gZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldikpIHsKLQkJCQlkZXZfcHJpdi0+cGNoX3R5cGUgPSBQQ0hfTFBUOwotCQkJCWRldl9wcml2LT5wY2hfaWQgPQotCQkJCQlJTlRFTF9QQ0hfTFBUX0xQX0RFVklDRV9JRF9UWVBFOwotCQkJCURSTV9ERUJVR19LTVMoIlRoaXMgaXMgQnJvYWR3ZWxsLCBhc3N1bWluZyAiCi0JCQkJCSAgICAgICJMeW54UG9pbnQgTFAgUENIXG4iKTsKKwkJCQlXQVJOX09OKCFJU19IQVNXRUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKTsKKwkJCQlXQVJOX09OKElTX0hTV19VTFQoZGV2KSB8fCBJU19CRFdfVUxUKGRldikpOwogCQkJfSBlbHNlIGlmIChpZCA9PSBJTlRFTF9QQ0hfTFBUX0xQX0RFVklDRV9JRF9UWVBFKSB7CiAJCQkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX0xQVDsKIAkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBMeW54UG9pbnQgTFAgUENIXG4iKTsKLQkJCQlXQVJOX09OKCFJU19IQVNXRUxMKGRldikpOwotCQkJCVdBUk5fT04oIUlTX0hTV19VTFQoZGV2KSk7CisJCQkJV0FSTl9PTighSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9BRFdFTEwoZGV2KSk7CisJCQkJV0FSTl9PTighSVNfSFNXX1VMVChkZXYpICYmICFJU19CRFdfVUxUKGRldikpOwogCQkJfSBlbHNlIGlmIChpZCA9PSBJTlRFTF9QQ0hfU1BUX0RFVklDRV9JRF9UWVBFKSB7CiAJCQkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX1NQVDsKIAkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBTdW5yaXNlUG9pbnQgUENIXG4iKTsKQEAgLTgxMSw2ICs4MDUsOCBAQAogCWlmICghaTkxNS5yZXNldCkKIAkJcmV0dXJuIDA7CiAKKwlpbnRlbF9yZXNldF9ndF9wb3dlcnNhdmUoZGV2KTsKKwogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCWk5MTVfZ2VtX3Jlc2V0KGRldik7CkBAIC04ODAsNyArODc2LDcgQEAKIAkJICogb2YgcmUtaW5pdCBhZnRlciByZXNldC4KIAkJICovCiAJCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+IDUpCi0JCQlpbnRlbF9yZXNldF9ndF9wb3dlcnNhdmUoZGV2KTsKKwkJCWludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoZGV2KTsKIAl9IGVsc2UgewogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAl9CkBAIC0xNTg0LDcgKzE1ODAsNyBAQAogCS5nZW1fcHJpbWVfaW1wb3J0ID0gaTkxNV9nZW1fcHJpbWVfaW1wb3J0LAogCiAJLmR1bWJfY3JlYXRlID0gaTkxNV9nZW1fZHVtYl9jcmVhdGUsCi0JLmR1bWJfbWFwX29mZnNldCA9IGk5MTVfZ2VtX2R1bWJfbWFwX29mZnNldCwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gaTkxNV9nZW1fbW1hcF9ndHQsCiAJLmR1bWJfZGVzdHJveSA9IGRybV9nZW1fZHVtYl9kZXN0cm95LAogCS5pb2N0bHMgPSBpOTE1X2lvY3RscywKIAkuZm9wcyA9ICZpOTE1X2RyaXZlcl9mb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNjNiY2RhNS4uOWQ3YTcxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0xNzU2LDggKzE3NTYsNiBAQAogCSAqLwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcF93cTsKIAotCXVpbnQzMl90IGJpb3NfdmdhY250cjsKLQogCS8qIEFic3RyYWN0IHRoZSBzdWJtaXNzaW9uIG1lY2hhbmlzbSAobGVnYWN5IHJpbmdidWZmZXIgb3IgZXhlY2xpc3RzKSBhd2F5ICovCiAJc3RydWN0IHsKIAkJaW50ICgqZG9fZXhlY2J1Zikoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlLApAQCAtMjE2MSw4ICsyMTU5LDcgQEAKICNkZWZpbmUgSVNfSFNXX0VBUkxZX1NEVihkZXYpCShJU19IQVNXRUxMKGRldikgJiYgXAogCQkJCSAoSU5URUxfREVWSUQoZGV2KSAmIDB4RkYwMCkgPT0gMHgwQzAwKQogI2RlZmluZSBJU19CRFdfVUxUKGRldikJCShJU19CUk9BRFdFTEwoZGV2KSAmJiBcCi0JCQkJICgoSU5URUxfREVWSUQoZGV2KSAmIDB4ZikgPT0gMHgyICB8fCBcCi0JCQkJIChJTlRFTF9ERVZJRChkZXYpICYgMHhmKSA9PSAweDYgfHwgXAorCQkJCSAoKElOVEVMX0RFVklEKGRldikgJiAweGYpID09IDB4NiB8fAlcCiAJCQkJIChJTlRFTF9ERVZJRChkZXYpICYgMHhmKSA9PSAweGUpKQogI2RlZmluZSBJU19CRFdfR1QzKGRldikJCShJU19CUk9BRFdFTEwoZGV2KSAmJiBcCiAJCQkJIChJTlRFTF9ERVZJRChkZXYpICYgMHgwMEYwKSA9PSAweDAwMjApCkBAIC0yNTAxLDkgKzI0OTgsOCBAQAogaW50IGk5MTVfZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAogCQkJIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKLWludCBpOTE1X2dlbV9kdW1iX21hcF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKLQkJCSAgICAgdWludDY0X3QgKm9mZnNldCk7CitpbnQgaTkxNV9nZW1fbW1hcF9ndHQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICAgIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3QgKm9mZnNldCk7CiAvKioKICAqIFJldHVybnMgdHJ1ZSBpZiBzZXExIGlzIGxhdGVyIHRoYW4gc2VxMi4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggNGE5ZmFlYTYuLjVmNjE0ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNDAxLDcgKzQwMSw2IEBACiBpOTE1X2dlbV9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlLAogCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQl1aW50NjRfdCBzaXplLAotCQlib29sIGR1bWIsCiAJCXVpbnQzMl90ICpoYW5kbGVfcCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwpAQCAtNDE3LDcgKzQxNiw2IEBACiAJaWYgKG9iaiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW9iai0+YmFzZS5kdW1iID0gZHVtYjsKIAlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZSwgJm9iai0+YmFzZSwgJmhhbmRsZSk7CiAJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cgKi8KIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5iYXNlKTsKQEAgLTQzNyw3ICs0MzUsNyBAQAogCWFyZ3MtPnBpdGNoID0gQUxJR04oYXJncy0+d2lkdGggKiBESVZfUk9VTkRfVVAoYXJncy0+YnBwLCA4KSwgNjQpOwogCWFyZ3MtPnNpemUgPSBhcmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKIAlyZXR1cm4gaTkxNV9nZW1fY3JlYXRlKGZpbGUsIGRldiwKLQkJCSAgICAgICBhcmdzLT5zaXplLCB0cnVlLCAmYXJncy0+aGFuZGxlKTsKKwkJCSAgICAgICBhcmdzLT5zaXplLCAmYXJncy0+aGFuZGxlKTsKIH0KIAogLyoqCkBAIC00NTAsNyArNDQ4LDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSAqYXJncyA9IGRhdGE7CiAKIAlyZXR1cm4gaTkxNV9nZW1fY3JlYXRlKGZpbGUsIGRldiwKLQkJCSAgICAgICBhcmdzLT5zaXplLCBmYWxzZSwgJmFyZ3MtPmhhbmRsZSk7CisJCQkgICAgICAgYXJncy0+c2l6ZSwgJmFyZ3MtPmhhbmRsZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC0xMDUwLDYgKzEwNDgsNyBAQAogaTkxNV9nZW1fcHdyaXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzID0gZGF0YTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCWludCByZXQ7CkBAIC0xMDY5LDkgKzEwNjgsMTEgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAorCWludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKKwogCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBwdXRfcnBtOwogCiAJb2JqID0gdG9faW50ZWxfYm8oZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgYXJncy0+aGFuZGxlKSk7CiAJaWYgKCZvYmotPmJhc2UgPT0gTlVMTCkgewpAQCAtMTEyMyw2ICsxMTI0LDkgQEAKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKIHVubG9jazoKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK3B1dF9ycG06CisJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTg0MCwxMCArMTg0NCwxMCBAQAogCWRybV9nZW1fZnJlZV9tbWFwX29mZnNldCgmb2JqLT5iYXNlKTsKIH0KIAotc3RhdGljIGludAoraW50CiBpOTE1X2dlbV9tbWFwX2d0dChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCiAJCSAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICB1aW50MzJfdCBoYW5kbGUsIGJvb2wgZHVtYiwKKwkJICB1aW50MzJfdCBoYW5kbGUsCiAJCSAgdWludDY0X3QgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMTg2MCwxMyArMTg2NCw2IEBACiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCS8qCi0JICogV2UgZG9uJ3QgYWxsb3cgZHVtYiBtbWFwcyBvbiBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgYW5vdGhlcgotCSAqIGludGVyZmFjZS4KLQkgKi8KLQlXQVJOX09OQ0UoZHVtYiAmJiAhKG9iai0+YmFzZS5kdW1iIHx8IG9iai0+YmFzZS5pbXBvcnRfYXR0YWNoKSwKLQkJICAiSWxsZWdhbCBkdW1iIG1hcCBvZiBhY2NlbGVyYXRlZCBidWZmZXIuXG4iKTsKLQogCWlmIChvYmotPmJhc2Uuc2l6ZSA+IGRldl9wcml2LT5ndHQubWFwcGFibGVfZW5kKSB7CiAJCXJldCA9IC1FMkJJRzsKIAkJZ290byBvdXQ7CkBAIC0xODkxLDE1ICsxODg4LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQKLWk5MTVfZ2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCi0JCQkgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSB1aW50MzJfdCBoYW5kbGUsCi0JCQkgdWludDY0X3QgKm9mZnNldCkKLXsKLQlyZXR1cm4gaTkxNV9nZW1fbW1hcF9ndHQoZmlsZSwgZGV2LCBoYW5kbGUsIHRydWUsIG9mZnNldCk7Ci19Ci0KIC8qKgogICogaTkxNV9nZW1fbW1hcF9ndHRfaW9jdGwgLSBwcmVwYXJlIGFuIG9iamVjdCBmb3IgR1RUIG1tYXAnaW5nCiAgKiBAZGV2OiBEUk0gZGV2aWNlCkBAIC0xOTIxLDcgKzE5MDksNyBAQAogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9ndHQgKmFyZ3MgPSBkYXRhOwogCi0JcmV0dXJuIGk5MTVfZ2VtX21tYXBfZ3R0KGZpbGUsIGRldiwgYXJncy0+aGFuZGxlLCBmYWxzZSwgJmFyZ3MtPm9mZnNldCk7CisJcmV0dXJuIGk5MTVfZ2VtX21tYXBfZ3R0KGZpbGUsIGRldiwgYXJncy0+aGFuZGxlLCAmYXJncy0+b2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTMxNjAsNiArMzE0OCwxMyBAQAogCQl1MzIgc2l6ZSA9IGk5MTVfZ2VtX29ial9nZ3R0X3NpemUob2JqKTsKIAkJdWludDY0X3QgdmFsOwogCisJCS8qIEFkanVzdCBmZW5jZSBzaXplIHRvIG1hdGNoIHRpbGVkIGFyZWEgKi8KKwkJaWYgKG9iai0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORSkgeworCQkJdWludDMyX3Qgcm93X3NpemUgPSBvYmotPnN0cmlkZSAqCisJCQkJKG9iai0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSA/IDMyIDogOCk7CisJCQlzaXplID0gKHNpemUgLyByb3dfc2l6ZSkgKiByb3dfc2l6ZTsKKwkJfQorCiAJCXZhbCA9ICh1aW50NjRfdCkoKGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsgc2l6ZSAtIDQwOTYpICYKIAkJCQkgMHhmZmZmZjAwMCkgPDwgMzI7CiAJCXZhbCB8PSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSAmIDB4ZmZmZmYwMDA7CkBAIC00ODk2LDEzICs0ODkxLDEyIEBACiAJZm9yIChpID0gMDsgaSA8IE5VTV9MM19TTElDRVMoZGV2KTsgaSsrKQogCQlpOTE1X2dlbV9sM19yZW1hcCgmZGV2X3ByaXYtPnJpbmdbUkNTXSwgaSk7CiAKLQkvKgotCSAqIFhYWDogQ29udGV4dHMgc2hvdWxkIG9ubHkgYmUgaW5pdGlhbGl6ZWQgb25jZS4gRG9pbmcgYSBzd2l0Y2ggdG8gdGhlCi0JICogZGVmYXVsdCBjb250ZXh0IHN3aXRjaCBob3dldmVyIGlzIHNvbWV0aGluZyB3ZSdkIGxpa2UgdG8gZG8gYWZ0ZXIKLQkgKiByZXNldCBvciB0aGF3ICh0aGUgbGF0dGVyIG1heSBub3QgYWN0dWFsbHkgYmUgbmVjZXNzYXJ5IGZvciBIVywgYnV0Ci0JICogZ29lcyB3aXRoIG91ciBjb2RlIGJldHRlcikuIENvbnRleHQgc3dpdGNoaW5nIHJlcXVpcmVzIHJpbmdzIChmb3IKLQkgKiB0aGUgZG9fc3dpdGNoKSwgYnV0IGJlZm9yZSBlbmFibGluZyBQUEdUVC4gU28gZG9uJ3QgbW92ZSB0aGlzLgotCSAqLworCXJldCA9IGk5MTVfcHBndHRfaW5pdF9odyhkZXYpOworCWlmIChyZXQgJiYgcmV0ICE9IC1FSU8pIHsKKwkJRFJNX0VSUk9SKCJQUEdUVCBlbmFibGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoZGV2KTsKKwl9CisKIAlyZXQgPSBpOTE1X2dlbV9jb250ZXh0X2VuYWJsZShkZXZfcHJpdik7CiAJaWYgKHJldCAmJiByZXQgIT0gLUVJTykgewogCQlEUk1fRVJST1IoIkNvbnRleHQgZW5hYmxlIGZhaWxlZCAlZFxuIiwgcmV0KTsKQEAgLTQ5MTEsMTIgKzQ5MDUsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IGk5MTVfcHBndHRfaW5pdF9odyhkZXYpOwotCWlmIChyZXQgJiYgcmV0ICE9IC1FSU8pIHsKLQkJRFJNX0VSUk9SKCJQUEdUVCBlbmFibGUgZmFpbGVkICVkXG4iLCByZXQpOwotCQlpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoZGV2KTsKLQl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MTY3LDcgKzUxNTUsNyBAQAogCWlmICghbXV0ZXhfaXNfbG9ja2VkKG11dGV4KSkKIAkJcmV0dXJuIGZhbHNlOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19NVVRFWEVTKQorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX0RFQlVHX01VVEVYRVMpCiAJcmV0dXJuIG11dGV4LT5vd25lciA9PSB0YXNrOwogI2Vsc2UKIAkvKiBTaW5jZSBVUCBtYXkgYmUgcHJlLWVtcHRlZCwgd2UgY2Fubm90IGFzc3VtZSB0aGF0IHdlIG93biB0aGUgbG9jayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCmluZGV4IGQxN2ZmNDM1Li5kMDExZWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCkBAIC00NzMsNyArNDczLDEyIEBACiAJICAgICAgIHUzMiBod19mbGFncykKIHsKIAl1MzIgZmxhZ3MgPSBod19mbGFncyB8IE1JX01NX1NQQUNFX0dUVDsKLQlpbnQgcmV0OworCWNvbnN0IGludCBudW1fcmluZ3MgPQorCQkvKiBVc2UgYW4gZXh0ZW5kZWQgdy9hIG9uIGl2YisgaWYgc2lnbmFsbGluZyBmcm9tIG90aGVyIHJpbmdzICovCisJCWk5MTVfc2VtYXBob3JlX2lzX2VuYWJsZWQocmluZy0+ZGV2KSA/CisJCWh3ZWlnaHQzMihJTlRFTF9JTkZPKHJpbmctPmRldiktPnJpbmdfbWFzaykgLSAxIDoKKwkJMDsKKwlpbnQgbGVuLCBpLCByZXQ7CiAKIAkvKiB3L2E6IElmIEZsdXNoIFRMQiBJbnZhbGlkYXRpb24gTW9kZSBpcyBlbmFibGVkLCBkcml2ZXIgbXVzdCBkbyBhIFRMQgogCSAqIGludmFsaWRhdGlvbiBwcmlvciB0byBNSV9TRVRfQ09OVEVYVC4gT24gR0VONiB3ZSBkb24ndCBzZXQgdGhlIHZhbHVlCkBAIC00OTAsMTUgKzQ5NSwzMSBAQAogCWlmICghSVNfSEFTV0VMTChyaW5nLT5kZXYpICYmIElOVEVMX0lORk8ocmluZy0+ZGV2KS0+Z2VuIDwgOCkKIAkJZmxhZ3MgfD0gKE1JX1NBVkVfRVhUX1NUQVRFX0VOIHwgTUlfUkVTVE9SRV9FWFRfU1RBVEVfRU4pOwogCi0JcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCA2KTsKKworCWxlbiA9IDQ7CisJaWYgKElOVEVMX0lORk8ocmluZy0+ZGV2KS0+Z2VuID49IDcpCisJCWxlbiArPSAyICsgKG51bV9yaW5ncyA/IDQqbnVtX3JpbmdzICsgMiA6IDApOworCisJcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCBsZW4pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBXYVByb2dyYW1NaUFyYk9uT2ZmQXJvdW5kTWlTZXRDb250ZXh0Oml2Yix2bHYsaHN3LGJkdyxjaHYgKi8KLQlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gNykKKwlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gNykgewogCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfQVJCX09OX09GRiB8IE1JX0FSQl9ESVNBQkxFKTsKLQllbHNlCi0JCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKKwkJaWYgKG51bV9yaW5ncykgeworCQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2lnbmFsbGVyOworCisJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTE9BRF9SRUdJU1RFUl9JTU0obnVtX3JpbmdzKSk7CisJCQlmb3JfZWFjaF9yaW5nKHNpZ25hbGxlciwgdG9faTkxNShyaW5nLT5kZXYpLCBpKSB7CisJCQkJaWYgKHNpZ25hbGxlciA9PSByaW5nKQorCQkJCQljb250aW51ZTsKKworCQkJCWludGVsX3JpbmdfZW1pdChyaW5nLCBSSU5HX1BTTUlfQ1RMKHNpZ25hbGxlci0+bW1pb19iYXNlKSk7CisJCQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIF9NQVNLRURfQklUX0VOQUJMRShHRU42X1BTTUlfU0xFRVBfTVNHX0RJU0FCTEUpKTsKKwkJCX0KKwkJfQorCX0KIAogCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKIAlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfU0VUX0NPTlRFWFQpOwpAQCAtNTEwLDEwICs1MzEsMjEgQEAKIAkgKi8KIAlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7CiAKLQlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gNykKKwlpZiAoSU5URUxfSU5GTyhyaW5nLT5kZXYpLT5nZW4gPj0gNykgeworCQlpZiAobnVtX3JpbmdzKSB7CisJCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWduYWxsZXI7CisKKwkJCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9MT0FEX1JFR0lTVEVSX0lNTShudW1fcmluZ3MpKTsKKwkJCWZvcl9lYWNoX3Jpbmcoc2lnbmFsbGVyLCB0b19pOTE1KHJpbmctPmRldiksIGkpIHsKKwkJCQlpZiAoc2lnbmFsbGVyID09IHJpbmcpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIFJJTkdfUFNNSV9DVEwoc2lnbmFsbGVyLT5tbWlvX2Jhc2UpKTsKKwkJCQlpbnRlbF9yaW5nX2VtaXQocmluZywgX01BU0tFRF9CSVRfRElTQUJMRShHRU42X1BTTUlfU0xFRVBfTVNHX0RJU0FCTEUpKTsKKwkJCX0KKwkJfQogCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfQVJCX09OX09GRiB8IE1JX0FSQl9FTkFCTEUpOwotCWVsc2UKLQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOworCX0KIAogCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCmluZGV4IGYwNjAyN2IuLjExNzM4MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKQEAgLTEyMSw5ICsxMjEsNiBAQAogCQkJZ290byBlcnI7CiAJCX0KIAotCQlXQVJOX09OQ0Uob2JqLT5iYXNlLmR1bWIsCi0JCQkgICJHUFUgdXNlIG9mIGR1bWIgYnVmZmVyIGlzIGlsbGVnYWwuXG4iKTsKLQogCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiAJCWxpc3RfYWRkX3RhaWwoJm9iai0+b2JqX2V4ZWNfbGluaywgJm9iamVjdHMpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IDk4MTgzNGIuLmIwNTFhMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtMjgxLDEzICsyODEsMzQgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJc3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPmlycV9sb2NrKTsKKwogCVdBUk5fT04oZGV2X3ByaXYtPnJwcy5wbV9paXIpOwogCVdBUk5fT04oSTkxNV9SRUFEKGdlbjZfcG1faWlyKGRldl9wcml2KSkgJiBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyk7CiAJZGV2X3ByaXYtPnJwcy5pbnRlcnJ1cHRzX2VuYWJsZWQgPSB0cnVlOworCUk5MTVfV1JJVEUoZ2VuNl9wbV9pZXIoZGV2X3ByaXYpLCBJOTE1X1JFQUQoZ2VuNl9wbV9pZXIoZGV2X3ByaXYpKSB8CisJCQkJZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpOwogCWdlbjZfZW5hYmxlX3BtX2lycShkZXZfcHJpdiwgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpOworCiAJc3Bpbl91bmxvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwogfQogCit1MzIgZ2VuNl9zYW5pdGl6ZV9ycHNfcG1fbWFzayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBtYXNrKQoreworCS8qCisJICogU05CLElWQiBjYW4gd2hpbGUgVkxWLENIViBtYXkgaGFyZCBoYW5nIG9uIGxvb3BpbmcgYmF0Y2hidWZmZXIKKwkgKiBpZiBHRU42X1BNX1VQX0VJX0VYUElSRUQgaXMgbWFza2VkLgorCSAqCisJICogVE9ETzogdmVyaWZ5IGlmIHRoaXMgY2FuIGJlIHJlcHJvZHVjZWQgb24gVkxWLENIVi4KKwkgKi8KKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA8PSA3ICYmICFJU19IQVNXRUxMKGRldl9wcml2KSkKKwkJbWFzayAmPSB+R0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEOworCisJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4gPj0gOCkKKwkJbWFzayAmPSB+R0VOOF9QTUlOVFJfUkVESVJFQ1RfVE9fTk9OX0RJU1A7CisKKwlyZXR1cm4gbWFzazsKK30KKwogdm9pZCBnZW42X2Rpc2FibGVfcnBzX2ludGVycnVwdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMzAwLDggKzMyMSw3IEBACiAKIAlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwogCi0JSTkxNV9XUklURShHRU42X1BNSU5UUk1TSywgSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA4ID8KLQkJICAgfkdFTjhfUE1JTlRSX1JFRElSRUNUX1RPX05PTl9ESVNQIDogfjApOworCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssIGdlbjZfc2FuaXRpemVfcnBzX3BtX21hc2soZGV2X3ByaXYsIH4wKSk7CiAKIAlfX2dlbjZfZGlzYWJsZV9wbV9pcnEoZGV2X3ByaXYsIGRldl9wcml2LT5wbV9ycHNfZXZlbnRzKTsKIAlJOTE1X1dSSVRFKGdlbjZfcG1faWVyKGRldl9wcml2KSwgSTkxNV9SRUFEKGdlbjZfcG1faWVyKGRldl9wcml2KSkgJgpAQCAtMzMwNyw4ICszMzI3LDEwIEBACiAJR0VONV9JUlFfSU5JVChHVCwgZGV2X3ByaXYtPmd0X2lycV9tYXNrLCBndF9pcnFzKTsKIAogCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA2KSB7Ci0JCXBtX2lycXMgfD0gZGV2X3ByaXYtPnBtX3Jwc19ldmVudHM7Ci0KKwkJLyoKKwkJICogUlBTIGludGVycnVwdHMgd2lsbCBnZXQgZW5hYmxlZC9kaXNhYmxlZCBvbiBkZW1hbmQgd2hlbiBSUFMKKwkJICogaXRzZWxmIGlzIGVuYWJsZWQvZGlzYWJsZWQuCisJCSAqLwogCQlpZiAoSEFTX1ZFQk9YKGRldikpCiAJCQlwbV9pcnFzIHw9IFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUOwogCkBAIC0zNTIwLDcgKzM1NDIsMTEgQEAKIAlkZXZfcHJpdi0+cG1faXJxX21hc2sgPSAweGZmZmZmZmZmOwogCUdFTjhfSVJRX0lOSVRfTkRYKEdULCAwLCB+Z3RfaW50ZXJydXB0c1swXSwgZ3RfaW50ZXJydXB0c1swXSk7CiAJR0VOOF9JUlFfSU5JVF9ORFgoR1QsIDEsIH5ndF9pbnRlcnJ1cHRzWzFdLCBndF9pbnRlcnJ1cHRzWzFdKTsKLQlHRU44X0lSUV9JTklUX05EWChHVCwgMiwgZGV2X3ByaXYtPnBtX2lycV9tYXNrLCBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyk7CisJLyoKKwkgKiBSUFMgaW50ZXJydXB0cyB3aWxsIGdldCBlbmFibGVkL2Rpc2FibGVkIG9uIGRlbWFuZCB3aGVuIFJQUyBpdHNlbGYKKwkgKiBpcyBlbmFibGVkL2Rpc2FibGVkLgorCSAqLworCUdFTjhfSVJRX0lOSVRfTkRYKEdULCAyLCBkZXZfcHJpdi0+cG1faXJxX21hc2ssIDApOwogCUdFTjhfSVJRX0lOSVRfTkRYKEdULCAzLCB+Z3RfaW50ZXJydXB0c1szXSwgZ3RfaW50ZXJydXB0c1szXSk7CiB9CiAKQEAgLTM2MDksNyArMzYzNSw3IEBACiAKIAl2bHZfZGlzcGxheV9pcnFfcmVzZXQoZGV2X3ByaXYpOwogCi0JZGV2X3ByaXYtPmlycV9tYXNrID0gMDsKKwlkZXZfcHJpdi0+aXJxX21hc2sgPSB+MDsKIH0KIAogc3RhdGljIHZvaWQgdmFsbGV5dmlld19pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC0zNzE1LDggKzM3NDEsNiBAQAogCWlmICgoaWlyICYgZmxpcF9wZW5kaW5nKSA9PSAwKQogCQlnb3RvIGNoZWNrX3BhZ2VfZmxpcDsKIAotCWludGVsX3ByZXBhcmVfcGFnZV9mbGlwKGRldiwgcGxhbmUpOwotCiAJLyogV2UgZGV0ZWN0IEZsaXBEb25lIGJ5IGxvb2tpbmcgZm9yIHRoZSBjaGFuZ2UgaW4gUGVuZGluZ0ZsaXAgZnJvbSAnMScKIAkgKiB0byAnMCcgb24gdGhlIGZvbGxvd2luZyB2YmxhbmssIGkuZS4gSUlSIGhhcyB0aGUgUGVuZGluZ2ZsaXAKIAkgKiBhc3NlcnRlZCBmb2xsb3dpbmcgdGhlIE1JX0RJU1BMQVlfRkxJUCwgYnV0IElTUiBpcyBkZWFzc2VydGVkLCBoZW5jZQpAQCAtMzcyNiw2ICszNzUwLDcgQEAKIAlpZiAoSTkxNV9SRUFEMTYoSVNSKSAmIGZsaXBfcGVuZGluZykKIAkJZ290byBjaGVja19wYWdlX2ZsaXA7CiAKKwlpbnRlbF9wcmVwYXJlX3BhZ2VfZmxpcChkZXYsIHBsYW5lKTsKIAlpbnRlbF9maW5pc2hfcGFnZV9mbGlwKGRldiwgcGlwZSk7CiAJcmV0dXJuIHRydWU7CiAKQEAgLTM4OTcsOCArMzkyMiw2IEBACiAJaWYgKChpaXIgJiBmbGlwX3BlbmRpbmcpID09IDApCiAJCWdvdG8gY2hlY2tfcGFnZV9mbGlwOwogCi0JaW50ZWxfcHJlcGFyZV9wYWdlX2ZsaXAoZGV2LCBwbGFuZSk7Ci0KIAkvKiBXZSBkZXRlY3QgRmxpcERvbmUgYnkgbG9va2luZyBmb3IgdGhlIGNoYW5nZSBpbiBQZW5kaW5nRmxpcCBmcm9tICcxJwogCSAqIHRvICcwJyBvbiB0aGUgZm9sbG93aW5nIHZibGFuaywgaS5lLiBJSVIgaGFzIHRoZSBQZW5kaW5nZmxpcAogCSAqIGFzc2VydGVkIGZvbGxvd2luZyB0aGUgTUlfRElTUExBWV9GTElQLCBidXQgSVNSIGlzIGRlYXNzZXJ0ZWQsIGhlbmNlCkBAIC0zOTA4LDYgKzM5MzEsNyBAQAogCWlmIChJOTE1X1JFQUQoSVNSKSAmIGZsaXBfcGVuZGluZykKIAkJZ290byBjaGVja19wYWdlX2ZsaXA7CiAKKwlpbnRlbF9wcmVwYXJlX3BhZ2VfZmxpcChkZXYsIHBsYW5lKTsKIAlpbnRlbF9maW5pc2hfcGFnZV9mbGlwKGRldiwgcGlwZSk7CiAJcmV0dXJuIHRydWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IGVlZmRjMjMuLjE3MmRlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMzk1LDYgKzM5NSw3IEBACiAjZGVmaW5lICAgUElQRV9DT05UUk9MX1NUT1JFX0RBVEFfSU5ERVgJCQkoMTw8MjEpCiAjZGVmaW5lICAgUElQRV9DT05UUk9MX0NTX1NUQUxMCQkJCSgxPDwyMCkKICNkZWZpbmUgICBQSVBFX0NPTlRST0xfVExCX0lOVkFMSURBVEUJCQkoMTw8MTgpCisjZGVmaW5lICAgUElQRV9DT05UUk9MX01FRElBX1NUQVRFX0NMRUFSCQkoMTw8MTYpCiAjZGVmaW5lICAgUElQRV9DT05UUk9MX1FXX1dSSVRFCQkJCSgxPDwxNCkKICNkZWZpbmUgICBQSVBFX0NPTlRST0xfUE9TVF9TWU5DX09QX01BU0sgICAgICAgICAgICAgICAgKDM8PDE0KQogI2RlZmluZSAgIFBJUEVfQ09OVFJPTF9ERVBUSF9TVEFMTAkJCSgxPDwxMykKQEAgLTExMjgsNiArMTEyOSw3IEBACiAjZGVmaW5lIEdFTjZfVkVSU1lOQwkoUklOR19TWU5DXzEoVkVCT1hfUklOR19CQVNFKSkKICNkZWZpbmUgR0VONl9WRVZTWU5DCShSSU5HX1NZTkNfMihWRUJPWF9SSU5HX0JBU0UpKQogI2RlZmluZSBHRU42X05PU1lOQyAwCisjZGVmaW5lIFJJTkdfUFNNSV9DVEwoYmFzZSkJKChiYXNlKSsweDUwKQogI2RlZmluZSBSSU5HX01BWF9JRExFKGJhc2UpCSgoYmFzZSkrMHg1NCkKICNkZWZpbmUgUklOR19IV1NfUEdBKGJhc2UpCSgoYmFzZSkrMHg4MCkKICNkZWZpbmUgUklOR19IV1NfUEdBX0dFTjYoYmFzZSkJKChiYXNlKSsweDIwODApCkBAIC0xNDU4LDYgKzE0NjAsNyBAQAogI2RlZmluZSAgIEdFTjZfQkxJVFRFUl9GQkNfTk9USUZZCQkJKDE8PDMpCiAKICNkZWZpbmUgR0VONl9SQ19TTEVFUF9QU01JX0NPTlRST0wJMHgyMDUwCisjZGVmaW5lICAgR0VONl9QU01JX1NMRUVQX01TR19ESVNBQkxFCSgxIDw8IDApCiAjZGVmaW5lICAgR0VOOF9SQ19TRU1BX0lETEVfTVNHX0RJU0FCTEUJKDEgPDwgMTIpCiAjZGVmaW5lICAgR0VOOF9GRl9ET1BfQ0xPQ0tfR0FURV9ESVNBQkxFCSgxPDwxMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IGZiM2UzZDQuLmU3YTE2ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTk4MTUsNyArOTgxNSw3IEBACiAJCWlmIChvYmotPnRpbGluZ19tb2RlICE9IHdvcmstPm9sZF9mYl9vYmotPnRpbGluZ19tb2RlKQogCQkJLyogdmx2OiBESVNQTEFZX0ZMSVAgZmFpbHMgdG8gY2hhbmdlIHRpbGluZyAqLwogCQkJcmluZyA9IE5VTEw7Ci0JfSBlbHNlIGlmIChJU19JVllCUklER0UoZGV2KSkgeworCX0gZWxzZSBpZiAoSVNfSVZZQlJJREdFKGRldikgfHwgSVNfSEFTV0VMTChkZXYpKSB7CiAJCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbQkNTXTsKIAl9IGVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDcpIHsKIAkJcmluZyA9IG9iai0+cmluZzsKQEAgLTEzMDU3LDExICsxMzA1Nyw3IEBACiAJdmdhX3B1dChkZXYtPnBkZXYsIFZHQV9SU1JDX0xFR0FDWV9JTyk7CiAJdWRlbGF5KDMwMCk7CiAKLQkvKgotCSAqIEZ1aml0c3UtU2llbWVucyBMaWZlYm9vayBTNjAxMCAoODMwKSBoYXMgcHJvYmxlbXMgcmVzdW1pbmcKLQkgKiBmcm9tIFMzIHdpdGhvdXQgcHJlc2VydmluZyAoc29tZSBvZj8pIHRoZSBvdGhlciBiaXRzLgotCSAqLwotCUk5MTVfV1JJVEUodmdhX3JlZywgZGV2X3ByaXYtPmJpb3NfdmdhY250ciB8IFZHQV9ESVNQX0RJU0FCTEUpOworCUk5MTVfV1JJVEUodmdhX3JlZywgVkdBX0RJU1BfRElTQUJMRSk7CiAJUE9TVElOR19SRUFEKHZnYV9yZWcpOwogfQogCkBAIC0xMzE0Niw4ICsxMzE0Miw2IEBACiAKIAlpbnRlbF9zaGFyZWRfZHBsbF9pbml0KGRldik7CiAKLQkvKiBzYXZlIHRoZSBCSU9TIHZhbHVlIGJlZm9yZSBjbG9iYmVyaW5nIGl0ICovCi0JZGV2X3ByaXYtPmJpb3NfdmdhY250ciA9IEk5MTVfUkVBRChpOTE1X3ZnYWNudHJsX3JlZyhkZXYpKTsKIAkvKiBKdXN0IGRpc2FibGUgaXQgb25jZSBhdCBzdGFydHVwICovCiAJaTkxNV9kaXNhYmxlX3ZnYShkZXYpOwogCWludGVsX3NldHVwX291dHB1dHMoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggMjVmZGJiMS4uM2I0MGExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTc5NCw2ICs3OTQsNyBAQAogdm9pZCBnZW42X3Jlc2V0X3Jwc19pbnRlcnJ1cHRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBnZW42X2VuYWJsZV9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgZ2VuNl9kaXNhYmxlX3Jwc19pbnRlcnJ1cHRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordTMyIGdlbjZfc2FuaXRpemVfcnBzX3BtX21hc2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgbWFzayk7CiB2b2lkIGludGVsX3J1bnRpbWVfcG1fZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGludGVsX3J1bnRpbWVfcG1fZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHN0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9pcnFzX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKaW5kZXggNGQ2MzgzOS4uZGZiNzgzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCkBAIC05NjIsNyArOTYyLDcgQEAKIAogCVdBUk5fT04ocGFuZWwtPmJhY2tsaWdodC5tYXggPT0gMCk7CiAKLQlpZiAocGFuZWwtPmJhY2tsaWdodC5sZXZlbCA9PSAwKSB7CisJaWYgKHBhbmVsLT5iYWNrbGlnaHQubGV2ZWwgPD0gcGFuZWwtPmJhY2tsaWdodC5taW4pIHsKIAkJcGFuZWwtPmJhY2tsaWdodC5sZXZlbCA9IHBhbmVsLT5iYWNrbGlnaHQubWF4OwogCQlpZiAocGFuZWwtPmJhY2tsaWdodC5kZXZpY2UpCiAJCQlwYW5lbC0+YmFja2xpZ2h0LmRldmljZS0+cHJvcHMuYnJpZ2h0bmVzcyA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwppbmRleCAxZjRiNTZlLi5iZjgxNGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKQEAgLTQzNjMsMTYgKzQzNjMsNyBAQAogCW1hc2sgfD0gZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMgJiAoR0VONl9QTV9SUF9ET1dOX0VJX0VYUElSRUQgfCBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQpOwogCW1hc2sgJj0gZGV2X3ByaXYtPnBtX3Jwc19ldmVudHM7CiAKLQkvKiBJVkIgYW5kIFNOQiBoYXJkIGhhbmdzIG9uIGxvb3BpbmcgYmF0Y2hidWZmZXIKLQkgKiBpZiBHRU42X1BNX1VQX0VJX0VYUElSRUQgaXMgbWFza2VkLgotCSAqLwotCWlmIChJTlRFTF9JTkZPKGRldl9wcml2LT5kZXYpLT5nZW4gPD0gNyAmJiAhSVNfSEFTV0VMTChkZXZfcHJpdi0+ZGV2KSkKLQkJbWFzayB8PSBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQ7Ci0KLQlpZiAoSVNfR0VOOChkZXZfcHJpdi0+ZGV2KSkKLQkJbWFzayB8PSBHRU44X1BNSU5UUl9SRURJUkVDVF9UT19OT05fRElTUDsKLQotCXJldHVybiB+bWFzazsKKwlyZXR1cm4gZ2VuNl9zYW5pdGl6ZV9ycHNfcG1fbWFzayhkZXZfcHJpdiwgfm1hc2spOwogfQogCiAvKiBnZW42X3NldF9ycHMgaXMgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgZnJlcXVlbmN5IHJlcXVlc3QsIGJ1dCBzaG91bGQgYWxzbyBiZQpAQCAtNDQ0MSw3ICs0NDMyLDggQEAKIAkJcmV0dXJuOwogCiAJLyogTWFzayB0dXJibyBpbnRlcnJ1cHQgc28gdGhhdCB0aGV5IHdpbGwgbm90IGNvbWUgaW4gYmV0d2VlbiAqLwotCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssIDB4ZmZmZmZmZmYpOworCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssCisJCSAgIGdlbjZfc2FuaXRpemVfcnBzX3BtX21hc2soZGV2X3ByaXYsIH4wKSk7CiAKIAl2bHZfZm9yY2VfZ2Z4X2Nsb2NrKGRldl9wcml2LCB0cnVlKTsKIApAQCAtNjE5MSw2ICs2MTgzLDIwIEBACiAJCXZhbGxleXZpZXdfY2xlYW51cF9ndF9wb3dlcnNhdmUoZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuNl9zdXNwZW5kX3JwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlmbHVzaF9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5ycHMuZGVsYXllZF9yZXN1bWVfd29yayk7CisKKwkvKgorCSAqIFRPRE86IGRpc2FibGUgUlBTIGludGVycnVwdHMgb24gR0VOOSsgdG9vIG9uY2UgUlBTIHN1cHBvcnQKKwkgKiBpcyBhZGRlZCBmb3IgaXQuCisJICovCisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgOSkKKwkJZ2VuNl9kaXNhYmxlX3Jwc19pbnRlcnJ1cHRzKGRldik7Cit9CisKIC8qKgogICogaW50ZWxfc3VzcGVuZF9ndF9wb3dlcnNhdmUgLSBzdXNwZW5kIFBNIHdvcmsgYW5kIGhlbHBlciB0aHJlYWRzCiAgKiBAZGV2OiBkcm0gZGV2aWNlCkBAIC02MjA2LDE0ICs2MjEyLDcgQEAKIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA2KQogCQlyZXR1cm47CiAKLQlmbHVzaF9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5ycHMuZGVsYXllZF9yZXN1bWVfd29yayk7Ci0KLQkvKgotCSAqIFRPRE86IGRpc2FibGUgUlBTIGludGVycnVwdHMgb24gR0VOOSsgdG9vIG9uY2UgUlBTIHN1cHBvcnQKLQkgKiBpcyBhZGRlZCBmb3IgaXQuCi0JICovCi0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgOSkKLQkJZ2VuNl9kaXNhYmxlX3Jwc19pbnRlcnJ1cHRzKGRldik7CisJZ2VuNl9zdXNwZW5kX3JwcyhkZXYpOwogCiAJLyogRm9yY2UgR1BVIHRvIG1pbiBmcmVxIGR1cmluZyBzdXNwZW5kICovCiAJZ2VuNl9ycHNfaWRsZShkZXZfcHJpdik7CkBAIC02MzE2LDggKzYzMTUsMTEgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCisJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNikKKwkJcmV0dXJuOworCisJZ2VuNl9zdXNwZW5kX3JwcyhkZXYpOwogCWRldl9wcml2LT5ycHMuZW5hYmxlZCA9IGZhbHNlOwotCWludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgaWJ4X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggOWY0NDVlOS4uYzdiYzkzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtMzYyLDEyICszNjIsMTUgQEAKIAkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1ZGX0NBQ0hFX0lOVkFMSURBVEU7CiAJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DT05TVF9DQUNIRV9JTlZBTElEQVRFOwogCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfU1RBVEVfQ0FDSEVfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX01FRElBX1NUQVRFX0NMRUFSOwogCQkvKgogCQkgKiBUTEIgaW52YWxpZGF0ZSByZXF1aXJlcyBhIHBvc3Qtc3luYyB3cml0ZS4KIAkJICovCiAJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKIAkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCOwogCisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVEFMTF9BVF9TQ09SRUJPQVJEOworCiAJCS8qIFdvcmthcm91bmQ6IHdlIG11c3QgaXNzdWUgYSBwaXBlX2NvbnRyb2wgd2l0aCBDUy1zdGFsbCBiaXQKIAkJICogc2V0IGJlZm9yZSBhIHBpcGVfY29udHJvbCBjb21tYW5kIHRoYXQgaGFzIHRoZSBzdGF0ZSBjYWNoZQogCQkgKiBpbnZhbGlkYXRlIGJpdCBzZXQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1lX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1lX3BtLmMKaW5kZXggZjVhNzhkNS4uYWM2ZGE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYwpAQCAtNjE1LDI5ICs2MTUsNiBAQAogCQl2bHZfcG93ZXJfc2VxdWVuY2VyX3Jlc2V0KGRldl9wcml2KTsKIH0KIAotc3RhdGljIHZvaWQgY2hlY2tfcG93ZXJfd2VsbF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKLXsKLQlib29sIGVuYWJsZWQgPSBwb3dlcl93ZWxsLT5vcHMtPmlzX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwotCi0JaWYgKHBvd2VyX3dlbGwtPmFsd2F5c19vbiB8fCAhaTkxNS5kaXNhYmxlX3Bvd2VyX3dlbGwpIHsKLQkJaWYgKCFlbmFibGVkKQotCQkJZ290byBtaXNtYXRjaDsKLQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGVuYWJsZWQgIT0gKHBvd2VyX3dlbGwtPmNvdW50ID4gMCkpCi0JCWdvdG8gbWlzbWF0Y2g7Ci0KLQlyZXR1cm47Ci0KLW1pc21hdGNoOgotCVdBUk4oMSwgInN0YXRlIG1pc21hdGNoIGZvciAnJXMnIChhbHdheXNfb24gJWQgaHcgc3RhdGUgJWQgdXNlLWNvdW50ICVkIGRpc2FibGVfcG93ZXJfd2VsbCAlZFxuIiwKLQkJICBwb3dlcl93ZWxsLT5uYW1lLCBwb3dlcl93ZWxsLT5hbHdheXNfb24sIGVuYWJsZWQsCi0JCSAgcG93ZXJfd2VsbC0+Y291bnQsIGk5MTUuZGlzYWJsZV9wb3dlcl93ZWxsKTsKLX0KLQogLyoqCiAgKiBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldCAtIGdyYWIgYSBwb3dlciBkb21haW4gcmVmZXJlbmNlCiAgKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlIGluc3RhbmNlCkBAIC02NjksOCArNjQ2LDYgQEAKIAkJCXBvd2VyX3dlbGwtPm9wcy0+ZW5hYmxlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsKIAkJCXBvd2VyX3dlbGwtPmh3X2VuYWJsZWQgPSB0cnVlOwogCQl9Ci0KLQkJY2hlY2tfcG93ZXJfd2VsbF9zdGF0ZShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7CiAJfQogCiAJcG93ZXJfZG9tYWlucy0+ZG9tYWluX3VzZV9jb3VudFtkb21haW5dKys7CkBAIC03MDksOCArNjg0LDYgQEAKIAkJCXBvd2VyX3dlbGwtPmh3X2VuYWJsZWQgPSBmYWxzZTsKIAkJCXBvd2VyX3dlbGwtPm9wcy0+ZGlzYWJsZShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7CiAJCX0KLQotCQljaGVja19wb3dlcl93ZWxsX3N0YXRlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsKIAl9CiAKIAltdXRleF91bmxvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jCmluZGV4IGFhODczMDQuLjk0YTViZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMKQEAgLTM4Niw5ICszODYsNyBAQAogCQkJbXNtX2dlbV9wdXRfaW92YShncHUtPm1lbXB0cnNfYm8sIGdwdS0+YmFzZS5pZCk7CiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdwdS0+bWVtcHRyc19ibyk7CiAJfQotCWlmIChncHUtPnBtNCkKLQkJcmVsZWFzZV9maXJtd2FyZShncHUtPnBtNCk7Ci0JaWYgKGdwdS0+cGZwKQotCQlyZWxlYXNlX2Zpcm13YXJlKGdwdS0+cGZwKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGdwdS0+cG00KTsKKwlyZWxlYXNlX2Zpcm13YXJlKGdwdS0+cGZwKTsKIAltc21fZ3B1X2NsZWFudXAoJmdwdS0+YmFzZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX2Nvbm5lY3Rvci5jCmluZGV4IGZiZWJiMDQuLmI0ZTcwZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX2Nvbm5lY3Rvci5jCkBAIC0xNDEsNiArMTQxLDE1IEBACiAJdWludDMyX3QgaHBkX2N0cmw7CiAJaW50IGksIHJldDsKIAorCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmhwZF9yZWdfY250OyBpKyspIHsKKwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShoZG1pLT5ocGRfcmVnc1tpXSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGhwZCByZWd1bGF0b3I6ICVzICglZClcbiIsCisJCQkJCWNvbmZpZy0+aHBkX3JlZ19uYW1lc1tpXSwgcmV0KTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKwogCXJldCA9IGdwaW9fY29uZmlnKGhkbWksIHRydWUpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBjb25maWd1cmUgR1BJT3M6ICVkXG4iLCByZXQpOwpAQCAtMTY0LDE1ICsxNzMsNiBAQAogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+aHBkX3JlZ19jbnQ7IGkrKykgewotCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGhkbWktPmhwZF9yZWdzW2ldKTsKLQkJaWYgKHJldCkgewotCQkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgaHBkIHJlZ3VsYXRvcjogJXMgKCVkKVxuIiwKLQkJCQkJY29uZmlnLT5ocGRfcmVnX25hbWVzW2ldLCByZXQpOwotCQkJZ290byBmYWlsOwotCQl9Ci0JfQotCiAJaGRtaV9zZXRfbW9kZShoZG1pLCBmYWxzZSk7CiAJcGh5LT5mdW5jcy0+cmVzZXQocGh5KTsKIAloZG1pX3NldF9tb2RlKGhkbWksIHRydWUpOwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBoZHBfZGlzYWJsZShzdHJ1Y3QgaGRtaV9jb25uZWN0b3IgKmhkbWlfY29ubmVjdG9yKQorc3RhdGljIHZvaWQgaGRwX2Rpc2FibGUoc3RydWN0IGhkbWlfY29ubmVjdG9yICpoZG1pX2Nvbm5lY3RvcikKIHsKIAlzdHJ1Y3QgaGRtaSAqaGRtaSA9IGhkbWlfY29ubmVjdG9yLT5oZG1pOwogCWNvbnN0IHN0cnVjdCBoZG1pX3BsYXRmb3JtX2NvbmZpZyAqY29uZmlnID0gaGRtaS0+Y29uZmlnOwpAQCAtMjEyLDI4ICsyMTIsMTkgQEAKIAogCWhkbWlfc2V0X21vZGUoaGRtaSwgZmFsc2UpOwogCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+aHBkX3JlZ19jbnQ7IGkrKykgewotCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShoZG1pLT5ocGRfcmVnc1tpXSk7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gZGlzYWJsZSBocGQgcmVndWxhdG9yOiAlcyAoJWQpXG4iLAotCQkJCQljb25maWctPmhwZF9yZWdfbmFtZXNbaV0sIHJldCk7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ocGRfY2xrX2NudDsgaSsrKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+aHBkX2Nsa3NbaV0pOwogCiAJcmV0ID0gZ3Bpb19jb25maWcoaGRtaSwgZmFsc2UpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byB1bmNvbmZpZ3VyZSBHUElPczogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZmFpbDsKKwlpZiAocmV0KQorCQlkZXZfd2FybihkZXYtPmRldiwgImZhaWxlZCB0byB1bmNvbmZpZ3VyZSBHUElPczogJWRcbiIsIHJldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ocGRfcmVnX2NudDsgaSsrKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKGhkbWktPmhwZF9yZWdzW2ldKTsKKwkJaWYgKHJldCkKKwkJCWRldl93YXJuKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGRpc2FibGUgaHBkIHJlZ3VsYXRvcjogJXMgKCVkKVxuIiwKKwkJCQkJY29uZmlnLT5ocGRfcmVnX25hbWVzW2ldLCByZXQpOwogCX0KLQotCXJldHVybiAwOwotCi1mYWlsOgotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNjAsMTEgKzI1MSwxMSBAQAogCQkJKGhwZF9pbnRfc3RhdHVzICYgSERNSV9IUERfSU5UX1NUQVRVU19JTlQpKSB7CiAJCWJvb2wgZGV0ZWN0ZWQgPSAhIShocGRfaW50X3N0YXR1cyAmIEhETUlfSFBEX0lOVF9TVEFUVVNfQ0FCTEVfREVURUNURUQpOwogCi0JCURCRygic3RhdHVzPSUwNHgsIGN0cmw9JTA0eCIsIGhwZF9pbnRfc3RhdHVzLCBocGRfaW50X2N0cmwpOwotCi0JCS8qIGFjayB0aGUgaXJxOiAqLworCQkvKiBhY2sgJiBkaXNhYmxlICh0ZW1wb3JhcmlseSkgSFBEIGV2ZW50czogKi8KIAkJaGRtaV93cml0ZShoZG1pLCBSRUdfSERNSV9IUERfSU5UX0NUUkwsCi0JCQkJaHBkX2ludF9jdHJsIHwgSERNSV9IUERfSU5UX0NUUkxfSU5UX0FDSyk7CisJCQlIRE1JX0hQRF9JTlRfQ1RSTF9JTlRfQUNLKTsKKworCQlEQkcoInN0YXR1cz0lMDR4LCBjdHJsPSUwNHgiLCBocGRfaW50X3N0YXR1cywgaHBkX2ludF9jdHJsKTsKIAogCQkvKiBkZXRlY3QgZGlzY29ubmVjdCBpZiB3ZSBhcmUgY29ubmVjdGVkIG9yIHZpc2EgdmVyc2E6ICovCiAJCWhwZF9pbnRfY3RybCA9IEhETUlfSFBEX0lOVF9DVFJMX0lOVF9FTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDQvbWRwNF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA0L21kcDRfY3J0Yy5jCmluZGV4IGE3NjcyZTEuLjM0NDkyMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDQvbWRwNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNC9tZHA0X2NydGMuYwpAQCAtMzMxLDE3ICszMzEsOCBAQAogCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBtZHA0X2NydGMgKm1kcDRfY3J0YyA9IHRvX21kcDRfY3J0YyhjcnRjKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCiAJREJHKCIlczogY2hlY2siLCBtZHA0X2NydGMtPm5hbWUpOwotCi0JaWYgKG1kcDRfY3J0Yy0+ZXZlbnQpIHsKLQkJZGV2X2VycihkZXYtPmRldiwgImFscmVhZHkgcGVuZGluZyBmbGlwIVxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCiAJLy8gVE9ETyBhbnl0aGluZyBlbHNlIHRvIGNoZWNrPwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1Nyw3ICszNDgsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURCRygiJXM6IGZsdXNoIiwgbWRwNF9jcnRjLT5uYW1lKTsKKwlEQkcoIiVzOiBldmVudDogJXAiLCBtZHA0X2NydGMtPm5hbWUsIGNydGMtPnN0YXRlLT5ldmVudCk7CiAKIAlXQVJOX09OKG1kcDRfY3J0Yy0+ZXZlbnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2NydGMuYwppbmRleCAwZTlhMmUzLi5mMDIxZjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9jcnRjLmMKQEAgLTMwMywxMSArMzAzLDYgQEAKIAogCURCRygiJXM6IGNoZWNrIiwgbWRwNV9jcnRjLT5uYW1lKTsKIAotCWlmIChtZHA1X2NydGMtPmV2ZW50KSB7Ci0JCWRldl9lcnIoZGV2LT5kZXYsICJhbHJlYWR5IHBlbmRpbmcgZmxpcCFcbiIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQogCS8qIHJlcXVlc3QgYSBmcmVlIENUTCwgaWYgbm9uZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCBmb3IgdGhpcyBDUlRDICovCiAJaWYgKHN0YXRlLT5lbmFibGUgJiYgIW1kcDVfY3J0Yy0+Y3RsKSB7CiAJCW1kcDVfY3J0Yy0+Y3RsID0gbWRwNV9jdGxtX3JlcXVlc3QobWRwNV9rbXMtPmN0bG0sIGNydGMpOwpAQCAtMzY0LDcgKzM1OSw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JREJHKCIlczogZmx1c2giLCBtZHA1X2NydGMtPm5hbWUpOworCURCRygiJXM6IGV2ZW50OiAlcCIsIG1kcDVfY3J0Yy0+bmFtZSwgY3J0Yy0+c3RhdGUtPmV2ZW50KTsKIAogCVdBUk5fT04obWRwNV9jcnRjLT5ldmVudCk7CiAKQEAgLTQ2MCwxMCArNDU1LDcgQEAKIAkvKiBub3cgdGhhdCB3ZSBrbm93IHdoYXQgaXJxJ3Mgd2Ugd2FudDogKi8KIAltZHA1X2NydGMtPmVyci5pcnFtYXNrID0gaW50ZjJlcnIoaW50Zik7CiAJbWRwNV9jcnRjLT52YmxhbmsuaXJxbWFzayA9IGludGYydmJsYW5rKGludGYpOwotCi0JLyogd2hlbiBjYWxsZWQgZnJvbSBtb2Rlc2V0X2luaXQoKSwgc2tpcCB0aGUgcmVzdCB1bnRpbCBsYXRlcjogKi8KLQlpZiAoIW1kcDVfa21zKQotCQlyZXR1cm47CisJbWRwX2lycV91cGRhdGUoJm1kcDVfa21zLT5iYXNlKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtZHA1X2ttcy0+cmVzb3VyY2VfbG9jaywgZmxhZ3MpOwogCWludGZfc2VsID0gbWRwNV9yZWFkKG1kcDVfa21zLCBSRUdfTURQNV9ESVNQX0lOVEZfU0VMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuYwppbmRleCBhMTFmMWI4Li45ZjAxYTRmMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfa21zLmMKQEAgLTIxNiwxNyArMjE2LDcgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCS8qIE5PVEU6IHRoZSB2c3luYyBhbmQgZXJyb3IgaXJxJ3MgYXJlIGFjdHVhbGx5IGFzc29jaWF0ZWQgd2l0aAotCSAqIHRoZSBJTlRGL2VuY29kZXIuLiB0aGUgZWFzaWVzdCB3YXkgdG8gZGVhbCB3aXRoIHRoaXMgKGllLiB3aGF0Ci0JICogd2UgZG8gbm93KSBpcyBhc3N1bWUgYSBmaXhlZCByZWxhdGlvbnNoaXAgYmV0d2VlbiBjcnRjJ3MgYW5kCi0JICogZW5jb2RlcnMuICBJJ20gbm90IHN1cmUgaWYgdGhlcmUgaXMgZXZlciBhIG5lZWQgdG8gbW9yZSBmcmVlbHkKLQkgKiBhc3NpZ24gY3J0Y3MgdG8gZW5jb2RlcnMsIGJ1dCBpZiB0aGVyZSBpcyB0aGVuIHdlIG5lZWQgdG8gdGFrZQotCSAqIGNhcmUgb2YgZXJyb3IgYW5kIHZibGFuayBpcnEncyB0aGF0IHRoZSBjcnRjIGhhcyByZWdpc3RlcmVkLAotCSAqIGFuZCBhbHNvIHVwZGF0ZSB1c2VyLXJlcXVlc3RlZCB2YmxhbmtfbWFzay4KLQkgKi8KLQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IEJJVCgwKTsKLQltZHA1X2NydGNfc2V0X2ludGYocHJpdi0+Y3J0Y3NbMF0sIDMsIElOVEZfSERNSSk7Ci0KKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9ICgxIDw8IHByaXYtPm51bV9jcnRjcykgLSAxOzsKIAlwcml2LT5lbmNvZGVyc1twcml2LT5udW1fZW5jb2RlcnMrK10gPSBlbmNvZGVyOwogCiAJLyogQ29uc3RydWN0IGJyaWRnZS9jb25uZWN0b3IgZm9yIEhETUk6ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHBfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHBfa21zLmMKaW5kZXggMDM0NTViNi4uMmE3MzE3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcF9rbXMuYwpAQCAtNDIsNyArNDIsMTAgQEAKIAltZHBfa21zLT5mdW5jcy0+c2V0X2lycW1hc2sobWRwX2ttcywgaXJxbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9pcnFfdW5sb2NrZWQoc3RydWN0IG1kcF9rbXMgKm1kcF9rbXMpCisvKiBpZiBhbiBtZHBfaXJxJ3MgaXJxbWFzayBoYXMgY2hhbmdlZCwgc3VjaCBhcyB3aGVuIG1kcDUgY3J0YzwtPmVuY29kZXIKKyAqIGxpbmsgY2hhbmdlcywgdGhpcyBtdXN0IGJlIGNhbGxlZCB0byBmaWd1cmUgb3V0IHRoZSBuZXcgZ2xvYmFsIGlycW1hc2sKKyAqLwordm9pZCBtZHBfaXJxX3VwZGF0ZShzdHJ1Y3QgbWRwX2ttcyAqbWRwX2ttcykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZsaXN0X2xvY2ssIGZsYWdzKTsKQEAgLTEyMiw3ICsxMjUsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3RfbG9jaywgZmxhZ3MpOwogCiAJaWYgKG5lZWRzX3VwZGF0ZSkKLQkJdXBkYXRlX2lycV91bmxvY2tlZChtZHBfa21zKTsKKwkJbWRwX2lycV91cGRhdGUobWRwX2ttcyk7CiB9CiAKIHZvaWQgbWRwX2lycV91bnJlZ2lzdGVyKHN0cnVjdCBtZHBfa21zICptZHBfa21zLCBzdHJ1Y3QgbWRwX2lycSAqaXJxKQpAQCAtMTQxLDUgKzE0NCw1IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdF9sb2NrLCBmbGFncyk7CiAKIAlpZiAobmVlZHNfdXBkYXRlKQotCQl1cGRhdGVfaXJxX3VubG9ja2VkKG1kcF9rbXMpOworCQltZHBfaXJxX3VwZGF0ZShtZHBfa21zKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcF9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcF9rbXMuaAppbmRleCA5OTU1N2I1Li5iMjY4Y2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHBfa21zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwX2ttcy5oCkBAIC03NSw3ICs3NSw3IEBACiB2b2lkIG1kcF9pcnFfd2FpdChzdHJ1Y3QgbWRwX2ttcyAqbWRwX2ttcywgdWludDMyX3QgaXJxbWFzayk7CiB2b2lkIG1kcF9pcnFfcmVnaXN0ZXIoc3RydWN0IG1kcF9rbXMgKm1kcF9rbXMsIHN0cnVjdCBtZHBfaXJxICppcnEpOwogdm9pZCBtZHBfaXJxX3VucmVnaXN0ZXIoc3RydWN0IG1kcF9rbXMgKm1kcF9rbXMsIHN0cnVjdCBtZHBfaXJxICppcnEpOwotCit2b2lkIG1kcF9pcnFfdXBkYXRlKHN0cnVjdCBtZHBfa21zICptZHBfa21zKTsKIAogLyoKICAqIHBpeGVsIGZvcm1hdCBoZWxwZXJzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYwppbmRleCBmMGRlNDEyLi4xOTE5NjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYwpAQCAtMjMsMTAgKzIzLDQxIEBACiAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwogCXVpbnQzMl90IGZlbmNlOwogCXN0cnVjdCBtc21fZmVuY2VfY2IgZmVuY2VfY2I7CisJdWludDMyX3QgY3J0Y19tYXNrOwogfTsKIAogc3RhdGljIHZvaWQgZmVuY2VfY2Ioc3RydWN0IG1zbV9mZW5jZV9jYiAqY2IpOwogCisvKiBibG9jayB1bnRpbCBzcGVjaWZpZWQgY3J0Y3MgYXJlIG5vIGxvbmdlciBwZW5kaW5nIHVwZGF0ZSwgYW5kCisgKiBhdG9taWNhbGx5IG1hcmsgdGhlbSBhcyBwZW5kaW5nIHVwZGF0ZQorICovCitzdGF0aWMgaW50IHN0YXJ0X2F0b21pYyhzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2LCB1aW50MzJfdCBjcnRjX21hc2spCit7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcHJpdi0+cGVuZGluZ19jcnRjc19ldmVudC5sb2NrKTsKKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfbG9ja2VkKHByaXYtPnBlbmRpbmdfY3J0Y3NfZXZlbnQsCisJCQkhKHByaXYtPnBlbmRpbmdfY3J0Y3MgJiBjcnRjX21hc2spKTsKKwlpZiAocmV0ID09IDApIHsKKwkJREJHKCJzdGFydDogJTA4eCIsIGNydGNfbWFzayk7CisJCXByaXYtPnBlbmRpbmdfY3J0Y3MgfD0gY3J0Y19tYXNrOworCX0KKwlzcGluX3VubG9jaygmcHJpdi0+cGVuZGluZ19jcnRjc19ldmVudC5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGNsZWFyIHNwZWNpZmllZCBjcnRjcyAobm8gbG9uZ2VyIHBlbmRpbmcgdXBkYXRlKQorICovCitzdGF0aWMgdm9pZCBlbmRfYXRvbWljKHN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYsIHVpbnQzMl90IGNydGNfbWFzaykKK3sKKwlzcGluX2xvY2soJnByaXYtPnBlbmRpbmdfY3J0Y3NfZXZlbnQubG9jayk7CisJREJHKCJlbmQ6ICUwOHgiLCBjcnRjX21hc2spOworCXByaXYtPnBlbmRpbmdfY3J0Y3MgJj0gfmNydGNfbWFzazsKKwl3YWtlX3VwX2FsbF9sb2NrZWQoJnByaXYtPnBlbmRpbmdfY3J0Y3NfZXZlbnQpOworCXNwaW5fdW5sb2NrKCZwcml2LT5wZW5kaW5nX2NydGNzX2V2ZW50LmxvY2spOworfQorCiBzdGF0aWMgc3RydWN0IG1zbV9jb21taXQgKm5ld19jb21taXQoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBtc21fY29tbWl0ICpjID0ga3phbGxvYyhzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKQEAgLTU4LDEyICs4OSwyNyBAQAogCiAJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3Bvc3RfcGxhbmVzKGRldiwgc3RhdGUpOwogCisJLyogTk9URTogX3dhaXRfZm9yX3ZibGFua3MoKSBvbmx5IHdhaXRzIGZvciB2Ymxhbmsgb24KKwkgKiBlbmFibGVkIENSVENzLiAgU28gd2UgZW5kIHVwIGZhdWx0aW5nIHdoZW4gZGlzYWJsaW5nCisJICogZHVlIHRvIChwb3RlbnRpYWxseSkgdW5yZWYnaW5nIHRoZSBvdXRnb2luZyBmYidzCisJICogYmVmb3JlIHRoZSB2Ymxhbmsgd2hlbiB0aGUgZGlzYWJsZSBoYXMgbGF0Y2hlZC4KKwkgKgorCSAqIEJ1dCBpZiBpdCBkaWQgd2FpdCBvbiBkaXNhYmxlZCAob3IgbmV3bHkgZGlzYWJsZWQpCisJICogQ1JUQ3MsIHRoYXQgd291bGQgYmUgcmFjeSAoaWUuIHdlIGNvdWxkIGhhdmUgbWlzc2VkCisJICogdGhlIGlycS4gIFdlIG5lZWQgc29tZSB3YXkgdG8gcG9sbCBmb3IgcGlwZSBzaHV0CisJICogZG93bi4gIE9yIGp1c3QgbGl2ZSB3aXRoIG9jY2FzaW9uYWxseSBoaXR0aW5nIHRoZQorCSAqIHRpbWVvdXQgaW4gdGhlIENSVEMgZGlzYWJsZSBwYXRoICh3aGljaCByZWFsbHkgc2hvdWxkCisJICogbm90IGJlIGNyaXRpY2FsIHBhdGgpCisJICovCisKIAlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92YmxhbmtzKGRldiwgc3RhdGUpOwogCiAJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoZGV2LCBzdGF0ZSk7CiAKIAlkcm1fYXRvbWljX3N0YXRlX2ZyZWUoc3RhdGUpOwogCisJZW5kX2F0b21pYyhkZXYtPmRldl9wcml2YXRlLCBjLT5jcnRjX21hc2spOworCiAJa2ZyZWUoYyk7CiB9CiAKQEAgLTk3LDggKzE0Myw5IEBACiBpbnQgbXNtX2F0b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLCBib29sIGFzeW5jKQogewotCXN0cnVjdCBtc21fY29tbWl0ICpjOwogCWludCBucGxhbmVzID0gZGV2LT5tb2RlX2NvbmZpZy5udW1fdG90YWxfcGxhbmU7CisJaW50IG5jcnRjcyA9IGRldi0+bW9kZV9jb25maWcubnVtX2NydGM7CisJc3RydWN0IG1zbV9jb21taXQgKmM7CiAJaW50IGksIHJldDsKIAogCXJldCA9IGRybV9hdG9taWNfaGVscGVyX3ByZXBhcmVfcGxhbmVzKGRldiwgc3RhdGUpOwpAQCAtMTA2LDYgKzE1MywxOCBAQAogCQlyZXR1cm4gcmV0OwogCiAJYyA9IG5ld19jb21taXQoc3RhdGUpOworCWlmICghYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIEZpZ3VyZSBvdXQgd2hhdCBjcnRjcyB3ZSBoYXZlOgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBuY3J0Y3M7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+Y3J0Y3NbaV07CisJCWlmICghY3J0YykKKwkJCWNvbnRpbnVlOworCQljLT5jcnRjX21hc2sgfD0gKDEgPDwgZHJtX2NydGNfaW5kZXgoY3J0YykpOworCX0KIAogCS8qCiAJICogRmlndXJlIG91dCB3aGF0IGZlbmNlIHRvIHdhaXQgZm9yOgpAQCAtMTIyLDYgKzE4MSwxNCBAQAogCX0KIAogCS8qCisJICogV2FpdCBmb3IgcGVuZGluZyB1cGRhdGVzIG9uIGFueSBvZiB0aGUgc2FtZSBjcnRjJ3MgYW5kIHRoZW4KKwkgKiBtYXJrIG91ciBzZXQgb2YgY3J0YydzIGFzIGJ1c3k6CisJICovCisJcmV0ID0gc3RhcnRfYXRvbWljKGRldi0+ZGV2X3ByaXZhdGUsIGMtPmNydGNfbWFzayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCiAJICogVGhpcyBpcyB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIC0gZXZlcnl0aGluZyBiZWxvdyBuZXZlciBmYWlscyBleGNlcHQKIAkgKiB3aGVuIHRoZSBodyBnb2VzIGJvbmdoaXRzLiBXaGljaCBtZWFucyB3ZSBjYW4gY29tbWl0IHRoZSBuZXcgc3RhdGUgb24KIAkgKiB0aGUgc29mdHdhcmUgc2lkZSBub3cuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jCmluZGV4IGM3OTUyMTcuLjlhNjE1NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jCkBAIC0xOTMsNiArMTkzLDcgQEAKIAogCXByaXYtPndxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoIm1zbSIsIDApOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmZlbmNlX2V2ZW50KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5wZW5kaW5nX2NydGNzX2V2ZW50KTsKIAogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5pbmFjdGl2ZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+ZmVuY2VfY2JzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKaW5kZXggMTM2MzAzOC4uYjY5ZWYyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTk2LDYgKzk2LDEwIEBACiAJLyogY2FsbGJhY2tzIGRlZmVycmVkIHVudGlsIGJvIGlzIGluYWN0aXZlOiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZmVuY2VfY2JzOwogCisJLyogY3J0Y3MgcGVuZGluZyBhc3luYyBhdG9taWMgdXBkYXRlczogKi8KKwl1aW50MzJfdCBwZW5kaW5nX2NydGNzOworCXdhaXRfcXVldWVfaGVhZF90IHBlbmRpbmdfY3J0Y3NfZXZlbnQ7CisKIAkvKiByZWdpc3RlcmVkIE1NVXM6ICovCiAJdW5zaWduZWQgaW50IG51bV9tbXVzOwogCXN0cnVjdCBtc21fbW11ICptbXVzW05VTV9ET01BSU5TXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2ZiZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9mYmRldi5jCmluZGV4IDk0ZDU1ZTUyNi4uMWYzYWYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmJkZXYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9mYmRldi5jCkBAIC0xOTAsOCArMTkwLDcgQEAKIGZhaWw6CiAKIAlpZiAocmV0KSB7Ci0JCWlmIChmYmkpCi0JCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGZiaSk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpKTsKIAkJaWYgKGZiKSB7CiAJCQlkcm1fZnJhbWVidWZmZXJfdW5yZWdpc3Rlcl9wcml2YXRlKGZiKTsKIAkJCWRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoZmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYwppbmRleCA0YTZmMGU0Li40OWRlYTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYwpAQCAtNTM1LDggKzUzNSw3IEBACiAJCQlkcm1fZnJlZV9sYXJnZShtc21fb2JqLT5wYWdlcyk7CiAKIAl9IGVsc2UgewotCQlpZiAobXNtX29iai0+dmFkZHIpCi0JCQl2dW5tYXAobXNtX29iai0+dmFkZHIpOworCQl2dW5tYXAobXNtX29iai0+dmFkZHIpOwogCQlwdXRfcGFnZXMob2JqKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvY29yZS9ldmVudC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9jb3JlL2V2ZW50LmMKaW5kZXggZmYyYjQzNC4uNzYwOTQ3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9jb3JlL2V2ZW50LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9jb3JlL2V2ZW50LmMKQEAgLTI2LDcgKzI2LDcgQEAKIHZvaWQKIG52a21fZXZlbnRfcHV0KHN0cnVjdCBudmttX2V2ZW50ICpldmVudCwgdTMyIHR5cGVzLCBpbnQgaW5kZXgpCiB7Ci0JQlVHX09OKCFzcGluX2lzX2xvY2tlZCgmZXZlbnQtPnJlZnNfbG9jaykpOworCWFzc2VydF9zcGluX2xvY2tlZCgmZXZlbnQtPnJlZnNfbG9jayk7CiAJd2hpbGUgKHR5cGVzKSB7CiAJCWludCB0eXBlID0gX19mZnModHlwZXMpOyB0eXBlcyAmPSB+KDEgPDwgdHlwZSk7CiAJCWlmICgtLWV2ZW50LT5yZWZzW2luZGV4ICogZXZlbnQtPnR5cGVzX25yICsgdHlwZV0gPT0gMCkgewpAQCAtMzksNyArMzksNyBAQAogdm9pZAogbnZrbV9ldmVudF9nZXQoc3RydWN0IG52a21fZXZlbnQgKmV2ZW50LCB1MzIgdHlwZXMsIGludCBpbmRleCkKIHsKLQlCVUdfT04oIXNwaW5faXNfbG9ja2VkKCZldmVudC0+cmVmc19sb2NrKSk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZldmVudC0+cmVmc19sb2NrKTsKIAl3aGlsZSAodHlwZXMpIHsKIAkJaW50IHR5cGUgPSBfX2Zmcyh0eXBlcyk7IHR5cGVzICY9IH4oMSA8PCB0eXBlKTsKIAkJaWYgKCsrZXZlbnQtPnJlZnNbaW5kZXggKiBldmVudC0+dHlwZXNfbnIgKyB0eXBlXSA9PSAxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2NvcmUvbm90aWZ5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2NvcmUvbm90aWZ5LmMKaW5kZXggZDFiY2RlNS4uODM5YTMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9jb3JlL25vdGlmeS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvY29yZS9ub3RpZnkuYwpAQCAtOTgsNyArOTgsNyBAQAogCXN0cnVjdCBudmttX2V2ZW50ICpldmVudCA9IG5vdGlmeS0+ZXZlbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUJVR19PTighc3Bpbl9pc19sb2NrZWQoJmV2ZW50LT5saXN0X2xvY2spKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmV2ZW50LT5saXN0X2xvY2spOwogCUJVR19PTihzaXplICE9IG5vdGlmeS0+c2l6ZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnQtPnJlZnNfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZGV2aWNlL252ZTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2RldmljZS9udmUwLmMKaW5kZXggNjc0ZGExZi4uNzMyOTIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZGV2aWNlL252ZTAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9kZXZpY2UvbnZlMC5jCkBAIC0yNDksNiArMjQ5LDM5IEBACiAJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9QUFAgICAgXSA9ICZudmMwX3BwcF9vY2xhc3M7CiAJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9QRVJGTU9OXSA9ICZudmYwX3BlcmZtb25fb2NsYXNzOwogCQlicmVhazsKKwljYXNlIDB4MTA2OgorCQlkZXZpY2UtPmNuYW1lID0gIkdLMjA4QiI7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9WQklPUyAgXSA9ICZub3V2ZWF1X2Jpb3Nfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfR1BJTyAgIF0gPSAgbnZlMF9ncGlvX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX0kyQyAgICBdID0gIG52ZTBfaTJjX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX0ZVU0UgICBdID0gJmdmMTAwX2Z1c2Vfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfQ0xPQ0sgIF0gPSAmbnZlMF9jbG9ja19vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9USEVSTSAgXSA9ICZudmQwX3RoZXJtX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX01YTSAgICBdID0gJm52NTBfbXhtX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX0RFVklOSVRdID0gIG52YzBfZGV2aW5pdF9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9NQyAgICAgXSA9ICBnazIwYV9tY19vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9CVVMgICAgXSA9ICBudmMwX2J1c19vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9USU1FUiAgXSA9ICZudjA0X3RpbWVyX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX0ZCICAgICBdID0gIG52ZTBfZmJfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfTFRDICAgIF0gPSAgZ2sxMDRfbHRjX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfU1VCREVWX0lCVVMgICBdID0gJm52ZTBfaWJ1c19vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9JTlNUTUVNXSA9ICBudjUwX2luc3RtZW1fb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfVk0gICAgIF0gPSAmbnZjMF92bW1ncl9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9CQVIgICAgXSA9ICZudmMwX2Jhcl9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX1NVQkRFVl9QV1IgICAgXSA9ICBudjEwOF9wd3Jfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfVk9MVCAgIF0gPSAmbnY0MF92b2x0X29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX0RNQU9CSiBdID0gIG52ZDBfZG1hZW5nX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX0ZJRk8gICBdID0gIG52MTA4X2ZpZm9fb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfU1cgICAgIF0gPSAgbnZjMF9zb2Z0d2FyZV9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9HUiAgICAgXSA9ICBudjEwOF9ncmFwaF9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9ESVNQICAgXSA9ICBudmYwX2Rpc3Bfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfQ09QWTAgIF0gPSAmbnZlMF9jb3B5MF9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9DT1BZMSAgXSA9ICZudmUwX2NvcHkxX29jbGFzczsKKwkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX0NPUFkyICBdID0gJm52ZTBfY29weTJfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfQlNQICAgIF0gPSAmbnZlMF9ic3Bfb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfVlAgICAgIF0gPSAmbnZlMF92cF9vY2xhc3M7CisJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9QUFAgICAgXSA9ICZudmMwX3BwcF9vY2xhc3M7CisJCWJyZWFrOwogCWNhc2UgMHgxMDg6CiAJCWRldmljZS0+Y25hbWUgPSAiR0syMDgiOwogCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfVkJJT1MgIF0gPSAmbm91dmVhdV9iaW9zX29jbGFzczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvc3ViZGV2L2Jpb3Mvc2hhZG93cmFtaW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvc3ViZGV2L2Jpb3Mvc2hhZG93cmFtaW4uYwppbmRleCA1ZTU4YmJhLi5hN2E4OTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL3N1YmRldi9iaW9zL3NoYWRvd3JhbWluLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9zdWJkZXYvYmlvcy9zaGFkb3dyYW1pbi5jCkBAIC00NCw4ICs0NCwxMCBAQAogcHJhbWluX2Zpbmkodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcHJpdiAqcHJpdiA9IGRhdGE7Ci0JbnZfd3IzMihwcml2LT5iaW9zLCAweDAwMTcwMCwgcHJpdi0+YmFyMCk7Ci0Ja2ZyZWUocHJpdik7CisJaWYgKHByaXYpIHsKKwkJbnZfd3IzMihwcml2LT5iaW9zLCAweDAwMTcwMCwgcHJpdi0+YmFyMCk7CisJCWtmcmVlKHByaXYpOworCX0KIH0KIAogc3RhdGljIHZvaWQgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9zdWJkZXYvZmIvcmFtbnZhYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9zdWJkZXYvZmIvcmFtbnZhYS5jCmluZGV4IDAwZjJjYTcuLjAzM2E4ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvc3ViZGV2L2ZiL3JhbW52YWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL3N1YmRldi9mYi9yYW1udmFhLmMKQEAgLTI0LDM0ICsyNCw3MSBAQAogCiAjaW5jbHVkZSAibnY1MC5oIgogCitzdHJ1Y3QgbnZhYV9yYW1fcHJpdiB7CisJc3RydWN0IG5vdXZlYXVfcmFtIGJhc2U7CisJdTY0IHBvbGxlcl9iYXNlOworfTsKKwogc3RhdGljIGludAogbnZhYV9yYW1fY3RvcihzdHJ1Y3Qgbm91dmVhdV9vYmplY3QgKnBhcmVudCwgc3RydWN0IG5vdXZlYXVfb2JqZWN0ICplbmdpbmUsCiAJICAgICAgc3RydWN0IG5vdXZlYXVfb2NsYXNzICpvY2xhc3MsIHZvaWQgKmRhdGEsIHUzMiBkYXRhc2l6ZSwKIAkgICAgICBzdHJ1Y3Qgbm91dmVhdV9vYmplY3QgKipwb2JqZWN0KQogewotCWNvbnN0IHUzMiByc3ZkX2hlYWQgPSAoIDI1NiAqIDEwMjQpID4+IDEyOyAvKiB2Z2EgbWVtb3J5ICovCi0JY29uc3QgdTMyIHJzdmRfdGFpbCA9ICgxMDI0ICogMTAyNCkgPj4gMTI7IC8qIHZiaW9zIGV0YyAqLworCXUzMiByc3ZkX2hlYWQgPSAoIDI1NiAqIDEwMjQpOyAvKiB2Z2EgbWVtb3J5ICovCisJdTMyIHJzdmRfdGFpbCA9ICgxMDI0ICogMTAyNCk7IC8qIHZiaW9zIGV0YyAqLwogCXN0cnVjdCBub3V2ZWF1X2ZiICpwZmIgPSBub3V2ZWF1X2ZiKHBhcmVudCk7Ci0Jc3RydWN0IG5vdXZlYXVfcmFtICpyYW07CisJc3RydWN0IG52YWFfcmFtX3ByaXYgKnByaXY7CiAJaW50IHJldDsKIAotCXJldCA9IG5vdXZlYXVfcmFtX2NyZWF0ZShwYXJlbnQsIGVuZ2luZSwgb2NsYXNzLCAmcmFtKTsKLQkqcG9iamVjdCA9IG52X29iamVjdChyYW0pOworCXJldCA9IG5vdXZlYXVfcmFtX2NyZWF0ZShwYXJlbnQsIGVuZ2luZSwgb2NsYXNzLCAmcHJpdik7CisJKnBvYmplY3QgPSBudl9vYmplY3QocHJpdik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJhbS0+c2l6ZSA9IG52X3JkMzIocGZiLCAweDEwMDIwYyk7Ci0JcmFtLT5zaXplID0gKHJhbS0+c2l6ZSAmIDB4ZmZmZmZmMDApIHwgKChyYW0tPnNpemUgJiAweDAwMDAwMGZmKSA8PCAzMik7CisJcHJpdi0+YmFzZS50eXBlICAgPSBOVl9NRU1fVFlQRV9TVE9MRU47CisJcHJpdi0+YmFzZS5zdG9sZW4gPSAodTY0KW52X3JkMzIocGZiLCAweDEwMGUxMCkgPDwgMTI7CisJcHJpdi0+YmFzZS5zaXplICAgPSAodTY0KW52X3JkMzIocGZiLCAweDEwMGUxNCkgPDwgMTI7CiAKLQlyZXQgPSBub3V2ZWF1X21tX2luaXQoJnBmYi0+dnJhbSwgcnN2ZF9oZWFkLCAocmFtLT5zaXplID4+IDEyKSAtCi0JCQkgICAgICAocnN2ZF9oZWFkICsgcnN2ZF90YWlsKSwgMSk7CisJcnN2ZF90YWlsICs9IDB4MTAwMDsKKwlwcml2LT5wb2xsZXJfYmFzZSA9IHByaXYtPmJhc2Uuc2l6ZSAtIHJzdmRfdGFpbDsKKworCXJldCA9IG5vdXZlYXVfbW1faW5pdCgmcGZiLT52cmFtLCByc3ZkX2hlYWQgPj4gMTIsCisJCQkgICAgICAocHJpdi0+YmFzZS5zaXplICAtIChyc3ZkX2hlYWQgKyByc3ZkX3RhaWwpKSA+PiAxMiwKKwkJCSAgICAgIDEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyYW0tPnR5cGUgICA9IE5WX01FTV9UWVBFX1NUT0xFTjsKLQlyYW0tPnN0b2xlbiA9ICh1NjQpbnZfcmQzMihwZmIsIDB4MTAwZTEwKSA8PCAxMjsKLQlyYW0tPmdldCA9IG52NTBfcmFtX2dldDsKLQlyYW0tPnB1dCA9IG52NTBfcmFtX3B1dDsKKwlwcml2LT5iYXNlLmdldCA9IG52NTBfcmFtX2dldDsKKwlwcml2LT5iYXNlLnB1dCA9IG52NTBfcmFtX3B1dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbnZhYV9yYW1faW5pdChzdHJ1Y3Qgbm91dmVhdV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3Qgbm91dmVhdV9mYiAqcGZiID0gbm91dmVhdV9mYihvYmplY3QpOworCXN0cnVjdCBudmFhX3JhbV9wcml2ICpwcml2ID0gKHZvaWQgKilvYmplY3Q7CisJaW50IHJldDsKKwl1NjQgZG5pc28sIGhvc3RuYiwgZmx1c2g7CisKKwlyZXQgPSBub3V2ZWF1X3JhbV9pbml0KCZwcml2LT5iYXNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZG5pc28gID0gKChwcml2LT5iYXNlLnNpemUgLSAocHJpdi0+cG9sbGVyX2Jhc2UgKyAweDAwKSkgPj4gNSkgLSAxOworCWhvc3RuYiA9ICgocHJpdi0+YmFzZS5zaXplIC0gKHByaXYtPnBvbGxlcl9iYXNlICsgMHgyMCkpID4+IDUpIC0gMTsKKwlmbHVzaCAgPSAoKHByaXYtPmJhc2Uuc2l6ZSAtIChwcml2LT5wb2xsZXJfYmFzZSArIDB4NDApKSA+PiA1KSAtIDE7CisKKwkvKiBFbmFibGUgTklTTyBwb2xsZXIgZm9yIHZhcmlvdXMgY2xpZW50cyBhbmQgc2V0IHRoZWlyIGFzc29jaWF0ZWQKKwkgKiByZWFkIGFkZHJlc3MsIG9ubHkgZm9yIE1DUDc3Lzc4IGFuZCBNQ1A3OS83QS4gKGZkIzI1NzAxKQorCSAqLworCW52X3dyMzIocGZiLCAweDEwMGMxOCwgZG5pc28pOworCW52X21hc2socGZiLCAweDEwMGMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSk7CisJbnZfd3IzMihwZmIsIDB4MTAwYzFjLCBob3N0bmIpOworCW52X21hc2socGZiLCAweDEwMGMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMik7CisJbnZfd3IzMihwZmIsIDB4MTAwYzI0LCBmbHVzaCk7CisJbnZfbWFzayhwZmIsIDB4MTAwYzE0LCAweDAwMDAwMDAwLCAweDAwMDEwMDAwKTsKKwogCXJldHVybiAwOwogfQogCkBAIC02MCw3ICs5Nyw3IEBACiAJLm9mdW5jcyA9ICYoc3RydWN0IG5vdXZlYXVfb2Z1bmNzKSB7CiAJCS5jdG9yID0gbnZhYV9yYW1fY3RvciwKIAkJLmR0b3IgPSBfbm91dmVhdV9yYW1fZHRvciwKLQkJLmluaXQgPSBfbm91dmVhdV9yYW1faW5pdCwKKwkJLmluaXQgPSBudmFhX3JhbV9pbml0LAogCQkuZmluaSA9IF9ub3V2ZWF1X3JhbV9maW5pLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9zdWJkZXYvbWMvbnY0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9zdWJkZXYvbWMvbnY0Yy5jCmluZGV4IGE3NWMzNWMuLjE2NTQwMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvc3ViZGV2L21jL252NGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL3N1YmRldi9tYy9udjRjLmMKQEAgLTI0LDEzICsyNCw2IEBACiAKICNpbmNsdWRlICJudjA0LmgiCiAKLXN0YXRpYyB2b2lkCi1udjRjX21jX21zaV9yZWFybShzdHJ1Y3Qgbm91dmVhdV9tYyAqcG1jKQotewotCXN0cnVjdCBudjA0X21jX3ByaXYgKnByaXYgPSAodm9pZCAqKXBtYzsKLQludl93cjA4KHByaXYsIDB4MDg4MDUwLCAweGZmKTsKLX0KLQogc3RydWN0IG5vdXZlYXVfb2NsYXNzICoKIG52NGNfbWNfb2NsYXNzID0gJihzdHJ1Y3Qgbm91dmVhdV9tY19vY2xhc3MpIHsKIAkuYmFzZS5oYW5kbGUgPSBOVl9TVUJERVYoTUMsIDB4NGMpLApAQCAtNDEsNSArMzQsNCBAQAogCQkuZmluaSA9IF9ub3V2ZWF1X21jX2ZpbmksCiAJfSwKIAkuaW50ciA9IG52MDRfbWNfaW50ciwKLQkubXNpX3JlYXJtID0gbnY0Y19tY19tc2lfcmVhcm0sCiB9LmJhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKaW5kZXggMjFlYzU2MS4uYmJhMjk2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYwpAQCAtMTU3Miw4ICsxNTcyLDEwIEBACiAJICogc28gdXNlIHRoZSBETUEgQVBJIGZvciB0aGVtLgogCSAqLwogCWlmICghbnZfZGV2aWNlX2lzX2NwdV9jb2hlcmVudChkZXZpY2UpICYmCi0JICAgIHR0bS0+Y2FjaGluZ19zdGF0ZSA9PSB0dF91bmNhY2hlZCkKKwkgICAgdHRtLT5jYWNoaW5nX3N0YXRlID09IHR0X3VuY2FjaGVkKSB7CiAJCXR0bV9kbWFfdW5wb3B1bGF0ZSh0dG1fZG1hLCBkZXYtPmRldik7CisJCXJldHVybjsKKwl9CiAKICNpZiBfX09TX0hBU19BR1AKIAlpZiAoZHJtLT5hZ3Auc3RhdCA9PSBFTkFCTEVEKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGlzcGxheS5jCmluZGV4IDVkOTM5MDIuLmY4MDQyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGlzcGxheS5jCkBAIC04NzYsNyArODc2LDYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JYm8tPmdlbS5kdW1iID0gdHJ1ZTsKIAlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCAmYm8tPmdlbSwgJmFyZ3MtPmhhbmRsZSk7CiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJmJvLT5nZW0pOwogCXJldHVybiByZXQ7CkBAIC04OTIsMTQgKzg5MSw2IEBACiAJZ2VtID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBoYW5kbGUpOwogCWlmIChnZW0pIHsKIAkJc3RydWN0IG5vdXZlYXVfYm8gKmJvID0gbm91dmVhdV9nZW1fb2JqZWN0KGdlbSk7Ci0KLQkJLyoKLQkJICogV2UgZG9uJ3QgYWxsb3cgZHVtYiBtbWFwcyBvbiBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgYW5vdGhlcgotCQkgKiBpbnRlcmZhY2UuCi0JCSAqLwotCQlXQVJOX09OQ0UoIShnZW0tPmR1bWIgfHwgZ2VtLT5pbXBvcnRfYXR0YWNoKSwKLQkJCSAgIklsbGVnYWwgZHVtYiBtYXAgb2YgYWNjZWxlcmF0ZWQgYnVmZmVyLlxuIik7Ci0KIAkJKnBvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJmJvLT5iby52bWFfbm9kZSk7CiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKaW5kZXggMjhkNTFhMi4uYmYwZjllMjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKQEAgLTM2LDcgKzM2LDE0IEBACiBub3V2ZWF1X2dlbV9vYmplY3RfZGVsKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKQogewogCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvID0gbm91dmVhdV9nZW1fb2JqZWN0KGdlbSk7CisJc3RydWN0IG5vdXZlYXVfZHJtICpkcm0gPSBub3V2ZWF1X2JkZXYobnZiby0+Ym8uYmRldik7CiAJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9ICZudmJvLT5ibzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkcm0tPmRldi0+ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CisJaWYgKFdBUk5fT04ocmV0IDwgMCAmJiByZXQgIT0gLUVBQ0NFUykpCisJCXJldHVybjsKIAogCWlmIChnZW0tPmltcG9ydF9hdHRhY2gpCiAJCWRybV9wcmltZV9nZW1fZGVzdHJveShnZW0sIG52Ym8tPmJvLnNnKTsKQEAgLTQ2LDYgKzUzLDkgQEAKIAkvKiByZXNldCBmaWxwIHNvIG5vdXZlYXVfYm9fZGVsX3R0bSgpIGNhbiB0ZXN0IGZvciBpdCAqLwogCWdlbS0+ZmlscCA9IE5VTEw7CiAJdHRtX2JvX3VucmVmKCZibyk7CisKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7CisJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoZGV2KTsKIH0KIAogaW50CkBAIC01Myw3ICs2Myw5IEBACiB7CiAJc3RydWN0IG5vdXZlYXVfY2xpICpjbGkgPSBub3V2ZWF1X2NsaShmaWxlX3ByaXYpOwogCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvID0gbm91dmVhdV9nZW1fb2JqZWN0KGdlbSk7CisJc3RydWN0IG5vdXZlYXVfZHJtICpkcm0gPSBub3V2ZWF1X2JkZXYobnZiby0+Ym8uYmRldik7CiAJc3RydWN0IG5vdXZlYXVfdm1hICp2bWE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHJtLT5kZXYtPmRldjsKIAlpbnQgcmV0OwogCiAJaWYgKCFjbGktPnZtKQpAQCAtNzEsMTEgKzgzLDE2IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldCA9IG5vdXZlYXVfYm9fdm1hX2FkZChudmJvLCBjbGktPnZtLCB2bWEpOwotCQlpZiAocmV0KSB7Ci0JCQlrZnJlZSh2bWEpOworCQlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CisJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRUFDQ0VTKQogCQkJZ290byBvdXQ7Ci0JCX0KKworCQlyZXQgPSBub3V2ZWF1X2JvX3ZtYV9hZGQobnZibywgY2xpLT52bSwgdm1hKTsKKwkJaWYgKHJldCkKKwkJCWtmcmVlKHZtYSk7CisKKwkJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShkZXYpOworCQlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChkZXYpOwogCX0gZWxzZSB7CiAJCXZtYS0+cmVmY291bnQrKzsKIAl9CkBAIC0xMjksNiArMTQ2LDggQEAKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9jbGkgKmNsaSA9IG5vdXZlYXVfY2xpKGZpbGVfcHJpdik7CiAJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1X2dlbV9vYmplY3QoZ2VtKTsKKwlzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSA9IG5vdXZlYXVfYmRldihudmJvLT5iby5iZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkcm0tPmRldi0+ZGV2OwogCXN0cnVjdCBub3V2ZWF1X3ZtYSAqdm1hOwogCWludCByZXQ7CiAKQEAgLTE0MSw4ICsxNjAsMTQgQEAKIAogCXZtYSA9IG5vdXZlYXVfYm9fdm1hX2ZpbmQobnZibywgY2xpLT52bSk7CiAJaWYgKHZtYSkgewotCQlpZiAoLS12bWEtPnJlZmNvdW50ID09IDApCi0JCQlub3V2ZWF1X2dlbV9vYmplY3RfdW5tYXAobnZibywgdm1hKTsKKwkJaWYgKC0tdm1hLT5yZWZjb3VudCA9PSAwKSB7CisJCQlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CisJCQlpZiAoIVdBUk5fT04ocmV0IDwgMCAmJiByZXQgIT0gLUVBQ0NFUykpIHsKKwkJCQlub3V2ZWF1X2dlbV9vYmplY3RfdW5tYXAobnZibywgdm1hKTsKKwkJCQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7CisJCQkJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoZGV2KTsKKwkJCX0KKwkJfQogCX0KIAl0dG1fYm9fdW5yZXNlcnZlKCZudmJvLT5ibyk7CiB9CkBAIC00NDQsOSArNDY5LDYgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG52Ym8sIGxpc3QsIGVudHJ5KSB7CiAJCXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1Zl9ibyAqYiA9ICZwYmJvW252Ym8tPnBiYm9faW5kZXhdOwogCi0JCVdBUk5fT05DRShudmJvLT5nZW0uZHVtYiwKLQkJCSAgIkdQVSB1c2Ugb2YgZHVtYiBidWZmZXIgaXMgaWxsZWdhbC5cbiIpOwotCiAJCXJldCA9IG5vdXZlYXVfZ2VtX3NldF9kb21haW4oJm52Ym8tPmdlbSwgYi0+cmVhZF9kb21haW5zLAogCQkJCQkgICAgIGItPndyaXRlX2RvbWFpbnMsCiAJCQkJCSAgICAgYi0+dmFsaWRfZG9tYWlucyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90dG0uYwppbmRleCA3NTNhNmRlZi4uM2QxY2ZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3R0bS5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAibm91dmVhdV90dG0uaCIKICNpbmNsdWRlICJub3V2ZWF1X2dlbS5oIgogCisjaW5jbHVkZSAiZHJtX2xlZ2FjeS5oIgogc3RhdGljIGludAogbm91dmVhdV92cmFtX21hbmFnZXJfaW5pdChzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiwgdW5zaWduZWQgbG9uZyBwc2l6ZSkKIHsKQEAgLTI4MSw3ICsyODIsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2RybSAqZHJtID0gbm91dmVhdV9kcm0oZmlsZV9wcml2LT5taW5vci0+ZGV2KTsKIAogCWlmICh1bmxpa2VseSh2bWEtPnZtX3Bnb2ZmIDwgRFJNX0ZJTEVfUEFHRV9PRkZTRVQpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGRybV9sZWdhY3lfbW1hcChmaWxwLCB2bWEpOwogCiAJcmV0dXJuIHR0bV9ib19tbWFwKGZpbHAsIHZtYSwgJmRybS0+dHRtLmJkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwppbmRleCBkNTllYzQ5Li5lZDY0NGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwpAQCAtMTg1MSwxMCArMTg1MSw5IEBACiAJCQkJcmV0dXJuIHBsbDsKIAkJfQogCQkvKiBvdGhlcndpc2UsIHBpY2sgb25lIG9mIHRoZSBwbGxzICovCi0JCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfS0FWRVJJKSB8fAotCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX0tBQklOSSkgfHwKKwkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9LQUJJTkkpIHx8CiAJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfTVVMTElOUykpIHsKLQkJCS8qIEtCL0tWL01MIGhhcyBQUExMMSBhbmQgUFBMTDIgKi8KKwkJCS8qIEtCL01MIGhhcyBQUExMMSBhbmQgUFBMTDIgKi8KIAkJCXBsbF9pbl91c2UgPSByYWRlb25fZ2V0X3BsbF91c2VfbWFzayhjcnRjKTsKIAkJCWlmICghKHBsbF9pbl91c2UgJiAoMSA8PCBBVE9NX1BQTEwyKSkpCiAJCQkJcmV0dXJuIEFUT01fUFBMTDI7CkBAIC0xODYzLDcgKzE4NjIsNyBAQAogCQkJRFJNX0VSUk9SKCJ1bmFibGUgdG8gYWxsb2NhdGUgYSBQUExMXG4iKTsKIAkJCXJldHVybiBBVE9NX1BQTExfSU5WQUxJRDsKIAkJfSBlbHNlIHsKLQkJCS8qIENJIGhhcyBQUExMMCwgUFBMTDEsIGFuZCBQUExMMiAqLworCQkJLyogQ0kvS1YgaGFzIFBQTEwwLCBQUExMMSwgYW5kIFBQTEwyICovCiAJCQlwbGxfaW5fdXNlID0gcmFkZW9uX2dldF9wbGxfdXNlX21hc2soY3J0Yyk7CiAJCQlpZiAoIShwbGxfaW5fdXNlICYgKDEgPDwgQVRPTV9QUExMMikpKQogCQkJCXJldHVybiBBVE9NX1BQTEwyOwpAQCAtMjE1NSw2ICsyMTU0LDcgQEAKIAljYXNlIEFUT01fUFBMTDA6CiAJCS8qIGRpc2FibGUgdGhlIHBwbGwgKi8KIAkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9BUlVCQSkgfHwKKwkJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9LQVZFUkkpIHx8CiAJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfQk9OQUlSRSkgfHwKIAkJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9IQVdBSUkpKQogCQkJYXRvbWJpb3NfY3J0Y19wcm9ncmFtX3BsbChjcnRjLCByYWRlb25fY3J0Yy0+Y3J0Y19pZCwgcmFkZW9uX2NydGMtPnBsbF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwppbmRleCAxMWJhOWQyLi5kYjQyYTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCkBAIC00OTIsNiArNDkyLDEwIEBACiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3I7CiAJaW50IGRwX2Nsb2NrOwogCisJaWYgKChtb2RlLT5jbG9jayA+IDM0MDAwMCkgJiYKKwkgICAgKCFyYWRlb25fY29ubmVjdG9yX2lzX2RwMTJfY2FwYWJsZShjb25uZWN0b3IpKSkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKwogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYpCiAJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CiAJZGlnX2Nvbm5lY3RvciA9IHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWsuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMKaW5kZXggNmRjZGUzNy4uNjRmZGFlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWsuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npay5jCkBAIC02MDMzLDYgKzYwMzMsMTcgQEAKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCAxIDw8IHZtX2lkKTsKIAorCS8qIHdhaXQgZm9yIHRoZSBpbnZhbGlkYXRlIHRvIGNvbXBsZXRlICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX1dBSVRfUkVHX01FTSwgNSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIChXQUlUX1JFR19NRU1fT1BFUkFUSU9OKDApIHwgLyogd2FpdCAqLworCQkJCSBXQUlUX1JFR19NRU1fRlVOQ1RJT04oMCkgfCAgLyogYWx3YXlzICovCisJCQkJIFdBSVRfUkVHX01FTV9FTkdJTkUoMCkpKTsgLyogbWUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBWTV9JTlZBTElEQVRFX1JFUVVFU1QgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7IC8qIHJlZiAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDApOyAvKiBtYXNrICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMHgyMCk7IC8qIHBvbGwgaW50ZXJ2YWwgKi8KKwogCS8qIGNvbXB1dGUgZG9lc24ndCBoYXZlIFBGUCAqLwogCWlmICh1c2VwZnApIHsKIAkJLyogc3luYyBQRlAgdG8gTUUsIG90aGVyd2lzZSB3ZSBtaWdodCBnZXQgaW52YWxpZCBQRlAgcmVhZHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrX3NkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrX3NkbWEuYwppbmRleCBkZGU1YzdlLi40MmNkMGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npa19zZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWtfc2RtYS5jCkBAIC04MTYsNyArODE2LDYgQEAKIAkJZm9yICg7IG5kdyA+IDA7IG5kdyAtPSAyLCAtLWNvdW50LCBwZSArPSA4KSB7CiAJCQlpZiAoZmxhZ3MgJiBSNjAwX1BURV9TWVNURU0pIHsKIAkJCQl2YWx1ZSA9IHJhZGVvbl92bV9tYXBfZ2FydChyZGV2LCBhZGRyKTsKLQkJCQl2YWx1ZSAmPSAweEZGRkZGRkZGRkZGRkYwMDBVTEw7CiAJCQl9IGVsc2UgaWYgKGZsYWdzICYgUjYwMF9QVEVfVkFMSUQpIHsKIAkJCQl2YWx1ZSA9IGFkZHI7CiAJCQl9IGVsc2UgewpAQCAtOTAzLDYgKzkwMiw5IEBACiB2b2lkIGNpa19kbWFfdm1fZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fcmluZyAqcmluZywKIAkJICAgICAgdW5zaWduZWQgdm1faWQsIHVpbnQ2NF90IHBkX2FkZHIpCiB7CisJdTMyIGV4dHJhX2JpdHMgPSAoU0RNQV9QT0xMX1JFR19NRU1fRVhUUkFfT1AoMCkgfAorCQkJICBTRE1BX1BPTExfUkVHX01FTV9FWFRSQV9GVU5DKDApKTsgLyogYWx3YXlzICovCisKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCBTRE1BX1BBQ0tFVChTRE1BX09QQ09ERV9TUkJNX1dSSVRFLCAwLCAweGYwMDApKTsKIAlpZiAodm1faWQgPCA4KSB7CiAJCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIChWTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiArICh2bV9pZCA8PCAyKSkgPj4gMik7CkBAIC05NDMsNSArOTQ1LDEyIEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgU0RNQV9QQUNLRVQoU0RNQV9PUENPREVfU1JCTV9XUklURSwgMCwgMHhmMDAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgVk1fSU5WQUxJREFURV9SRVFVRVNUID4+IDIpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDEgPDwgdm1faWQpOworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgU0RNQV9QQUNLRVQoU0RNQV9PUENPREVfUE9MTF9SRUdfTUVNLCAwLCBleHRyYV9iaXRzKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgVk1fSU5WQUxJREFURV9SRVFVRVNUID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDApOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDApOyAvKiByZWZlcmVuY2UgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsgLyogbWFzayAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsICgweGZmZiA8PCAxNikgfCAxMCk7IC8qIHJldHJ5IGNvdW50LCBwb2xsIGludGVydmFsICovCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWtkLmgKaW5kZXggYmE4NTk4Ni4uMDMwMDNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWtkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWtkLmgKQEAgLTIxNTYsNCArMjE1Niw2IEBACiAjZGVmaW5lIEFUQ19WTV9BUEVSVFVSRTFfSElHSF9BRERSCQkJCTB4MzMwQ3UKICNkZWZpbmUgQVRDX1ZNX0FQRVJUVVJFMV9MT1dfQUREUgkJCQkweDMzMDR1CiAKKyNkZWZpbmUgSUhfVk1JRF8wX0xVVAkJCQkJCTB4M0Q0MHUKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2RjZTNfMV9hZm10LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2RjZTNfMV9hZm10LmMKaW5kZXggMmZlOGNmYy4uYmFmZGY5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9kY2UzXzFfYWZtdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZGNlM18xX2FmbXQuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJfQogCiAJc2FkX2NvdW50ID0gZHJtX2VkaWRfdG9fc2FkKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQsICZzYWRzKTsKLQlpZiAoc2FkX2NvdW50IDwgMCkgeworCWlmIChzYWRfY291bnQgPD0gMCkgewogCQlEUk1fRVJST1IoIkNvdWxkbid0IHJlYWQgU0FEczogJWRcbiIsIHNhZF9jb3VudCk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2t2X2RwbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9rdl9kcG0uYwppbmRleCA5YjQyMDAxLi5lM2U5YzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2t2X2RwbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24va3ZfZHBtLmMKQEAgLTI3NDUsMTMgKzI3NDUsMTEgQEAKIAlwaS0+ZW5hYmxlX2F1dG9fdGhlcm1hbF90aHJvdHRsaW5nID0gdHJ1ZTsKIAlwaS0+ZGlzYWJsZV9uYl9wczNfaW5fYmF0dGVyeSA9IGZhbHNlOwogCWlmIChyYWRlb25fYmFwbSA9PSAtMSkgewotCQkvKiBUaGVyZSBhcmUgc3RhYmlsaXR5IGlzc3VlcyByZXBvcnRlZCBvbiB3aXRoCi0JCSAqIGJhcG0gZW5hYmxlZCBvbiBhbiBhc3JvY2sgc3lzdGVtLgotCQkgKi8KLQkJaWYgKHJkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxODQ5KQotCQkJcGktPmJhcG1fZW5hYmxlID0gZmFsc2U7Ci0JCWVsc2UKKwkJLyogb25seSBlbmFibGUgYmFwbSBvbiBLQiwgTUwgYnkgZGVmYXVsdCAqLworCQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfS0FCSU5JIHx8IHJkZXYtPmZhbWlseSA9PSBDSElQX01VTExJTlMpCiAJCQlwaS0+YmFwbV9lbmFibGUgPSB0cnVlOworCQllbHNlCisJCQlwaS0+YmFwbV9lbmFibGUgPSBmYWxzZTsKIAl9IGVsc2UgaWYgKHJhZGVvbl9iYXBtID09IDApIHsKIAkJcGktPmJhcG1fZW5hYmxlID0gZmFsc2U7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYwppbmRleCAzNjBkZTlmLi5hZWE0OGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCkBAIC0yNTE2LDYgKzI1MTYsMTYgQEAKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCBQQUNLRVQwKFZNX0lOVkFMSURBVEVfUkVRVUVTVCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDEgPDwgdm1faWQpOwogCisJLyogd2FpdCBmb3IgdGhlIGludmFsaWRhdGUgdG8gY29tcGxldGUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBQQUNLRVQzKFBBQ0tFVDNfV0FJVF9SRUdfTUVNLCA1KSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgKFdBSVRfUkVHX01FTV9GVU5DVElPTigwKSB8ICAvKiBhbHdheXMgKi8KKwkJCQkgV0FJVF9SRUdfTUVNX0VOR0lORSgwKSkpOyAvKiBtZSAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFZNX0lOVkFMSURBVEVfUkVRVUVTVCA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsgLyogcmVmICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7IC8qIG1hc2sgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAweDIwKTsgLyogcG9sbCBpbnRlcnZhbCAqLworCiAJLyogc3luYyBQRlAgdG8gTUUsIG90aGVyd2lzZSB3ZSBtaWdodCBnZXQgaW52YWxpZCBQRlAgcmVhZHMgKi8KIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCBQQUNLRVQzKFBBQ0tFVDNfUEZQX1NZTkNfTUUsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCAweDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmlfZG1hLmMKaW5kZXggNTBmODg2MS4uY2U3ODdhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pX2RtYS5jCkBAIC0zNzIsNyArMzcyLDYgQEAKIAkJZm9yICg7IG5kdyA+IDA7IG5kdyAtPSAyLCAtLWNvdW50LCBwZSArPSA4KSB7CiAJCQlpZiAoZmxhZ3MgJiBSNjAwX1BURV9TWVNURU0pIHsKIAkJCQl2YWx1ZSA9IHJhZGVvbl92bV9tYXBfZ2FydChyZGV2LCBhZGRyKTsKLQkJCQl2YWx1ZSAmPSAweEZGRkZGRkZGRkZGRkYwMDBVTEw7CiAJCQl9IGVsc2UgaWYgKGZsYWdzICYgUjYwMF9QVEVfVkFMSUQpIHsKIAkJCQl2YWx1ZSA9IGFkZHI7CiAJCQl9IGVsc2UgewpAQCAtNDYzLDUgKzQ2MiwxMSBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIERNQV9QQUNLRVQoRE1BX1BBQ0tFVF9TUkJNX1dSSVRFLCAwLCAwLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgKDB4ZiA8PCAxNikgfCAoVk1fSU5WQUxJREFURV9SRVFVRVNUID4+IDIpKTsKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCAxIDw8IHZtX2lkKTsKKworCS8qIHdhaXQgZm9yIGludmFsaWRhdGUgdG8gY29tcGxldGUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBETUFfU1JCTV9SRUFEX1BBQ0tFVCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgKDB4ZmYgPDwgMjApIHwgKFZNX0lOVkFMSURBVEVfUkVRVUVTVCA+PiAyKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7IC8qIG1hc2sgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsgLyogdmFsdWUgKi8KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaWQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmlkLmgKaW5kZXggMmUxMmU0ZC4uYWQ3MTI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaWQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pZC5oCkBAIC0xMTMzLDYgKzExMzMsMjMgQEAKICNkZWZpbmUJUEFDS0VUM19NRU1fU0VNQVBIT1JFCQkJCTB4MzkKICNkZWZpbmUJUEFDS0VUM19NUEVHX0lOREVYCQkJCTB4M0EKICNkZWZpbmUJUEFDS0VUM19XQUlUX1JFR19NRU0JCQkJMHgzQworI2RlZmluZQkJV0FJVF9SRUdfTUVNX0ZVTkNUSU9OKHgpICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyAgICAgICAgICAgICAgICAvKiAwIC0gYWx3YXlzCisJCSAqIDEgLSA8CisJCSAqIDIgLSA8PQorCQkgKiAzIC0gPT0KKwkJICogNCAtICE9CisJCSAqIDUgLSA+PQorCQkgKiA2IC0gPgorCQkgKi8KKyNkZWZpbmUJCVdBSVRfUkVHX01FTV9NRU1fU1BBQ0UoeCkgICAgICAgICAgICAgICAoKHgpIDw8IDQpCisgICAgICAgICAgICAgICAgLyogMCAtIHJlZworCQkgKiAxIC0gbWVtCisJCSAqLworI2RlZmluZQkJV0FJVF9SRUdfTUVNX0VOR0lORSh4KSAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyAgICAgICAgICAgICAgICAvKiAwIC0gbWUKKwkJICogMSAtIHBmcAorCQkgKi8KICNkZWZpbmUJUEFDS0VUM19NRU1fV1JJVEUJCQkJMHgzRAogI2RlZmluZQlQQUNLRVQzX1BGUF9TWU5DX01FCQkJCTB4NDIKICNkZWZpbmUJUEFDS0VUM19TVVJGQUNFX1NZTkMJCQkJMHg0MwpAQCAtMTI3Miw2ICsxMjg5LDEzIEBACiAJCQkJCSAoMSA8PCAyMSkgfAkJCVwKIAkJCQkJICgoKG4pICYgMHhGRkZGRikgPDwgMCkpCiAKKyNkZWZpbmUgRE1BX1NSQk1fUE9MTF9QQUNLRVQJCSgoOSA8PCAyOCkgfAkJCVwKKwkJCQkJICgxIDw8IDI3KSB8CQkJXAorCQkJCQkgKDEgPDwgMjYpKQorCisjZGVmaW5lIERNQV9TUkJNX1JFQURfUEFDS0VUCQkoKDkgPDwgMjgpIHwJCQlcCisJCQkJCSAoMSA8PCAyNykpCisKIC8qIGFzeW5jIERNQSBQYWNrZXQgdHlwZXMgKi8KICNkZWZpbmUJRE1BX1BBQ0tFVF9XUklURQkJCQkgIDB4MgogI2RlZmluZQlETUFfUEFDS0VUX0NPUFkJCQkJCSAgMHgzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCmluZGV4IDc0ZjA2ZDUuLjI3OTgwMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCkBAIC02NDQsNiArNjQ0LDcgQEAKIAkJcmV0dXJuIHI7CiAJcmRldi0+Z2FydC50YWJsZV9zaXplID0gcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzICogNDsKIAlyZGV2LT5hc2ljLT5nYXJ0LnRsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaDsKKwlyZGV2LT5hc2ljLT5nYXJ0LmdldF9wYWdlX2VudHJ5ID0gJnIxMDBfcGNpX2dhcnRfZ2V0X3BhZ2VfZW50cnk7CiAJcmRldi0+YXNpYy0+Z2FydC5zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlOwogCXJldHVybiByYWRlb25fZ2FydF90YWJsZV9yYW1fYWxsb2MocmRldik7CiB9CkBAIC02ODEsMTEgKzY4MiwxNiBAQAogCVdSRUczMihSQURFT05fQUlDX0hJX0FERFIsIDApOwogfQogCit1aW50NjRfdCByMTAwX3BjaV9nYXJ0X2dldF9wYWdlX2VudHJ5KHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKQoreworCXJldHVybiBhZGRyOworfQorCiB2b2lkIHIxMDBfcGNpX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCi0JCQkgICAgdWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpCisJCQkgICAgdWludDY0X3QgZW50cnkpCiB7CiAJdTMyICpndHQgPSByZGV2LT5nYXJ0LnB0cjsKLQlndHRbaV0gPSBjcHVfdG9fbGUzMihsb3dlcl8zMl9iaXRzKGFkZHIpKTsKKwlndHRbaV0gPSBjcHVfdG9fbGUzMihsb3dlcl8zMl9iaXRzKGVudHJ5KSk7CiB9CiAKIHZvaWQgcjEwMF9wY2lfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCAwNjRhZDU1Li4wOGQ2OGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtNzMsMTEgKzczLDggQEAKICNkZWZpbmUgUjMwMF9QVEVfV1JJVEVBQkxFICgxIDw8IDIpCiAjZGVmaW5lIFIzMDBfUFRFX1JFQURBQkxFICAoMSA8PCAzKQogCi12b2lkIHJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgaSwKLQkJCSAgICAgIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKQordWludDY0X3QgcnYzNzBfcGNpZV9nYXJ0X2dldF9wYWdlX2VudHJ5KHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKQogewotCXZvaWQgX19pb21lbSAqcHRyID0gcmRldi0+Z2FydC5wdHI7Ci0KIAlhZGRyID0gKGxvd2VyXzMyX2JpdHMoYWRkcikgPj4gOCkgfAogCQkoKHVwcGVyXzMyX2JpdHMoYWRkcikgJiAweGZmKSA8PCAyNCk7CiAJaWYgKGZsYWdzICYgUkFERU9OX0dBUlRfUEFHRV9SRUFEKQpAQCAtODYsMTAgKzgzLDE4IEBACiAJCWFkZHIgfD0gUjMwMF9QVEVfV1JJVEVBQkxFOwogCWlmICghKGZsYWdzICYgUkFERU9OX0dBUlRfUEFHRV9TTk9PUCkpCiAJCWFkZHIgfD0gUjMwMF9QVEVfVU5TTk9PUEVEOworCXJldHVybiBhZGRyOworfQorCit2b2lkIHJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgaSwKKwkJCSAgICAgIHVpbnQ2NF90IGVudHJ5KQoreworCXZvaWQgX19pb21lbSAqcHRyID0gcmRldi0+Z2FydC5wdHI7CisKIAkvKiBvbiB4ODYgd2Ugd2FudCB0aGlzIHRvIGJlIENQVSBlbmRpYW4sIG9uIHBvd2VycGMKIAkgKiBvbiBwb3dlcnBjIHdpdGhvdXQgSFcgc3dhcHBlcnMsIGl0J2xsIGdldCBzd2FwcGVkIG9uIHdheQogCSAqIGludG8gVlJBTSAtIHNvIG5vIG5lZWQgZm9yIGNwdV90b19sZTMyIG9uIFZSQU0gdGFibGVzICovCi0Jd3JpdGVsKGFkZHIsICgodm9pZCBfX2lvbWVtICopcHRyKSArIChpICogNCkpOworCXdyaXRlbChlbnRyeSwgKCh2b2lkIF9faW9tZW0gKilwdHIpICsgKGkgKiA0KSk7CiB9CiAKIGludCBydjM3MF9wY2llX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTEwOSw2ICsxMTQsNyBAQAogCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFBDSUUgZ2FydCAhXG4iKTsKIAlyZGV2LT5nYXJ0LnRhYmxlX3NpemUgPSByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgKiA0OwogCXJkZXYtPmFzaWMtPmdhcnQudGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7CisJcmRldi0+YXNpYy0+Z2FydC5nZXRfcGFnZV9lbnRyeSA9ICZydjM3MF9wY2llX2dhcnRfZ2V0X3BhZ2VfZW50cnk7CiAJcmRldi0+YXNpYy0+Z2FydC5zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2U7CiAJcmV0dXJuIHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fYWxsb2MocmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCA1NDUyOWI4Li4zZjJhOGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTI0Miw2ICsyNDIsNyBAQAogICogRHVtbXkgcGFnZQogICovCiBzdHJ1Y3QgcmFkZW9uX2R1bW15X3BhZ2UgeworCXVpbnQ2NF90CWVudHJ5OwogCXN0cnVjdCBwYWdlCSpwYWdlOwogCWRtYV9hZGRyX3QJYWRkcjsKIH07CkBAIC02NDUsNyArNjQ2LDcgQEAKIAl1bnNpZ25lZAkJCW51bV9jcHVfcGFnZXM7CiAJdW5zaWduZWQJCQl0YWJsZV9zaXplOwogCXN0cnVjdCBwYWdlCQkJKipwYWdlczsKLQlkbWFfYWRkcl90CQkJKnBhZ2VzX2FkZHI7CisJdWludDY0X3QJCQkqcGFnZXNfZW50cnk7CiAJYm9vbAkJCQlyZWFkeTsKIH07CiAKQEAgLTE4NDcsOCArMTg0OCw5IEBACiAJLyogZ2FydCAqLwogCXN0cnVjdCB7CiAJCXZvaWQgKCp0bGJfZmx1c2gpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwkJdWludDY0X3QgKCpnZXRfcGFnZV9lbnRyeSkodWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOwogCQl2b2lkICgqc2V0X3BhZ2UpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAotCQkJCSB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncyk7CisJCQkJIHVpbnQ2NF90IGVudHJ5KTsKIAl9IGdhcnQ7CiAJc3RydWN0IHsKIAkJaW50ICgqaW5pdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMjg1Miw3ICsyODU0LDggQEAKICNkZWZpbmUgcmFkZW9uX3ZnYV9zZXRfc3RhdGUocmRldiwgc3RhdGUpIChyZGV2KS0+YXNpYy0+dmdhX3NldF9zdGF0ZSgocmRldiksIChzdGF0ZSkpCiAjZGVmaW5lIHJhZGVvbl9hc2ljX3Jlc2V0KHJkZXYpIChyZGV2KS0+YXNpYy0+YXNpY19yZXNldCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9nYXJ0X3RsYl9mbHVzaChyZGV2KSAocmRldiktPmFzaWMtPmdhcnQudGxiX2ZsdXNoKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgaSwgcCwgZikgKHJkZXYpLT5hc2ljLT5nYXJ0LnNldF9wYWdlKChyZGV2KSwgKGkpLCAocCksIChmKSkKKyNkZWZpbmUgcmFkZW9uX2dhcnRfZ2V0X3BhZ2VfZW50cnkoYSwgZikgKHJkZXYpLT5hc2ljLT5nYXJ0LmdldF9wYWdlX2VudHJ5KChhKSwgKGYpKQorI2RlZmluZSByYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCBpLCBlKSAocmRldiktPmFzaWMtPmdhcnQuc2V0X3BhZ2UoKHJkZXYpLCAoaSksIChlKSkKICNkZWZpbmUgcmFkZW9uX2FzaWNfdm1faW5pdChyZGV2KSAocmRldiktPmFzaWMtPnZtLmluaXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fYXNpY192bV9maW5pKHJkZXYpIChyZGV2KS0+YXNpYy0+dm0uZmluaSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9hc2ljX3ZtX2NvcHlfcGFnZXMocmRldiwgaWIsIHBlLCBzcmMsIGNvdW50KSAoKHJkZXYpLT5hc2ljLT52bS5jb3B5X3BhZ2VzKChyZGV2KSwgKGliKSwgKHBlKSwgKHNyYyksIChjb3VudCkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCmluZGV4IDg1MGRlNTcuLmVkMGUxMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKQEAgLTE1OSwxMSArMTU5LDEzIEBACiAJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0lFIG1vZGVcbiIpOwogCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJRTsKIAkJcmRldi0+YXNpYy0+Z2FydC50bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaDsKKwkJcmRldi0+YXNpYy0+Z2FydC5nZXRfcGFnZV9lbnRyeSA9ICZydjM3MF9wY2llX2dhcnRfZ2V0X3BhZ2VfZW50cnk7CiAJCXJkZXYtPmFzaWMtPmdhcnQuc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlOwogCX0gZWxzZSB7CiAJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0kgbW9kZVxuIik7CiAJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0k7CiAJCXJkZXYtPmFzaWMtPmdhcnQudGxiX2ZsdXNoID0gJnIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoOworCQlyZGV2LT5hc2ljLT5nYXJ0LmdldF9wYWdlX2VudHJ5ID0gJnIxMDBfcGNpX2dhcnRfZ2V0X3BhZ2VfZW50cnk7CiAJCXJkZXYtPmFzaWMtPmdhcnQuc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZTsKIAl9CiAJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CkBAIC0xOTksNiArMjAxLDcgQEAKIAkubWNfd2FpdF9mb3JfaWRsZSA9ICZyMTAwX21jX3dhaXRfZm9yX2lkbGUsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyMTAwX3BjaV9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtMjY1LDYgKzI2OCw3IEBACiAJLm1jX3dhaXRfZm9yX2lkbGUgPSAmcjEwMF9tY193YWl0X2Zvcl9pZGxlLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcjEwMF9wY2lfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTMzMyw2ICszMzcsMjAgQEAKIAkuc2V0X3dwdHIgPSAmcjEwMF9nZnhfc2V0X3dwdHIsCiB9OwogCitzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljX3JpbmcgcnY1MTVfZ2Z4X3JpbmcgPSB7CisJLmliX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCisJLmVtaXRfZmVuY2UgPSAmcjMwMF9mZW5jZV9yaW5nX2VtaXQsCisJLmVtaXRfc2VtYXBob3JlID0gJnIxMDBfc2VtYXBob3JlX3JpbmdfZW1pdCwKKwkuY3NfcGFyc2UgPSAmcjMwMF9jc19wYXJzZSwKKwkucmluZ19zdGFydCA9ICZydjUxNV9yaW5nX3N0YXJ0LAorCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCisJLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAorCS5pc19sb2NrdXAgPSAmcjEwMF9ncHVfaXNfbG9ja3VwLAorCS5nZXRfcnB0ciA9ICZyMTAwX2dmeF9nZXRfcnB0ciwKKwkuZ2V0X3dwdHIgPSAmcjEwMF9nZnhfZ2V0X3dwdHIsCisJLnNldF93cHRyID0gJnIxMDBfZ2Z4X3NldF93cHRyLAorfTsKKwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByMzAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcjMwMF9pbml0LAogCS5maW5pID0gJnIzMDBfZmluaSwKQEAgLTM0NSw2ICszNjMsNyBAQAogCS5tY193YWl0X2Zvcl9pZGxlID0gJnIzMDBfbWNfd2FpdF9mb3JfaWRsZSwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnIxMDBfcGNpX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC00MTEsNiArNDMwLDcgQEAKIAkubWNfd2FpdF9mb3JfaWRsZSA9ICZyMzAwX21jX3dhaXRfZm9yX2lkbGUsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJ2MzcwX3BjaWVfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtNDc3LDYgKzQ5Nyw3IEBACiAJLm1jX3dhaXRfZm9yX2lkbGUgPSAmcjMwMF9tY193YWl0X2Zvcl9pZGxlLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZydjM3MF9wY2llX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTU0Myw2ICs1NjQsNyBAQAogCS5tY193YWl0X2Zvcl9pZGxlID0gJnJzNDAwX21jX3dhaXRfZm9yX2lkbGUsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcnM0MDBfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczQwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM0MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtNjA5LDYgKzYzMSw3IEBACiAJLm1jX3dhaXRfZm9yX2lkbGUgPSAmcnM2MDBfbWNfd2FpdF9mb3JfaWRsZSwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZyczYwMF9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC02NzcsNiArNzAwLDcgQEAKIAkubWNfd2FpdF9mb3JfaWRsZSA9ICZyczY5MF9tY193YWl0X2Zvcl9pZGxlLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnJzNDAwX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM0MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNDAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTc0NSwxMCArNzY5LDExIEBACiAJLm1jX3dhaXRfZm9yX2lkbGUgPSAmcnY1MTVfbWNfd2FpdF9mb3JfaWRsZSwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnYzNzBfcGNpZV9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7Ci0JCVtSQURFT05fUklOR19UWVBFX0dGWF9JTkRFWF0gPSAmcjMwMF9nZnhfcmluZworCQlbUkFERU9OX1JJTkdfVFlQRV9HRlhfSU5ERVhdID0gJnJ2NTE1X2dmeF9yaW5nCiAJfSwKIAkuaXJxID0gewogCQkuc2V0ID0gJnJzNjAwX2lycV9zZXQsCkBAIC04MTEsMTAgKzgzNiwxMSBAQAogCS5tY193YWl0X2Zvcl9pZGxlID0gJnI1MjBfbWNfd2FpdF9mb3JfaWRsZSwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnYzNzBfcGNpZV9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7Ci0JCVtSQURFT05fUklOR19UWVBFX0dGWF9JTkRFWF0gPSAmcjMwMF9nZnhfcmluZworCQlbUkFERU9OX1JJTkdfVFlQRV9HRlhfSU5ERVhdID0gJnJ2NTE1X2dmeF9yaW5nCiAJfSwKIAkuaXJxID0gewogCQkuc2V0ID0gJnJzNjAwX2lycV9zZXQsCkBAIC05MDUsNiArOTMxLDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJnI2MDBfZ2V0X2dwdV9jbG9ja19jb3VudGVyLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC05OTAsNiArMTAxNyw3IEBACiAJLmdldF9ncHVfY2xvY2tfY291bnRlciA9ICZyNjAwX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtMTA4MSw2ICsxMTA5LDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJnI2MDBfZ2V0X2dwdV9jbG9ja19jb3VudGVyLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC0xMTg1LDYgKzEyMTQsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmcjYwMF9nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTEzMDMsNiArMTMzMyw3IEBACiAJLmdldF9ncHVfY2xvY2tfY291bnRlciA9ICZyNjAwX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZldmVyZ3JlZW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC0xMzk1LDYgKzE0MjYsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmcjYwMF9nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmZXZlcmdyZWVuX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtMTQ4Niw2ICsxNTE4LDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJnI2MDBfZ2V0X2dwdV9jbG9ja19jb3VudGVyLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJmV2ZXJncmVlbl9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTE2MjEsNiArMTY1NCw3IEBACiAJLmdldF9ncHVfY2xvY2tfY291bnRlciA9ICZyNjAwX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZjYXltYW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnZtID0gewpAQCAtMTcyNCw2ICsxNzU4LDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJnI2MDBfZ2V0X2dwdV9jbG9ja19jb3VudGVyLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJmNheW1hbl9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkudm0gPSB7CkBAIC0xODU3LDYgKzE4OTIsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmc2lfZ2V0X2dwdV9jbG9ja19jb3VudGVyLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnNpX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS52bSA9IHsKQEAgLTIwMTgsNiArMjA1NCw3IEBACiAJLmdldF9ncHVfY2xvY2tfY291bnRlciA9ICZjaWtfZ2V0X2dwdV9jbG9ja19jb3VudGVyLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJmNpa19wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkudm0gPSB7CkBAIC0yMTI1LDYgKzIxNjIsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmY2lrX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZjaWtfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnZtID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCmluZGV4IDJhNDVkNTQuLjhkNzg3ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKQEAgLTY3LDggKzY3LDkgQEAKIGludCByMTAwX2FzaWNfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdTMyIHIxMDBfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7CiB2b2lkIHIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3VpbnQ2NF90IHIxMDBfcGNpX2dhcnRfZ2V0X3BhZ2VfZW50cnkodWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOwogdm9pZCByMTAwX3BjaV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAotCQkJICAgIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKTsKKwkJCSAgICB1aW50NjRfdCBlbnRyeSk7CiB2b2lkIHIxMDBfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9yaW5nICpyaW5nKTsKIGludCByMTAwX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfaXJxX3Byb2Nlc3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMTcyLDggKzE3Myw5IEBACiAJCQkJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOwogZXh0ZXJuIGludCByMzAwX2NzX3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKIGV4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHVpbnQ2NF90IHJ2MzcwX3BjaWVfZ2FydF9nZXRfcGFnZV9lbnRyeSh1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncyk7CiBleHRlcm4gdm9pZCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCi0JCQkJICAgICB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncyk7CisJCQkJICAgICB1aW50NjRfdCBlbnRyeSk7CiBleHRlcm4gdm9pZCBydjM3MF9zZXRfcGNpZV9sYW5lcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKTsKIGV4dGVybiBpbnQgcnYzNzBfZ2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjMwMF9zZXRfcmVnX3NhZmUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMjA4LDggKzIxMCw5IEBACiBleHRlcm4gaW50IHJzNDAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCByczQwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByczQwMF9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit1aW50NjRfdCByczQwMF9nYXJ0X2dldF9wYWdlX2VudHJ5KHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKTsKIHZvaWQgcnM0MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgaSwKLQkJCSB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncyk7CisJCQkgdWludDY0X3QgZW50cnkpOwogdWludDMyX3QgcnM0MDBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnM0MDBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIGludCByczQwMF9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMjMyLDggKzIzNSw5IEBACiB2b2lkIHJzNjAwX2lycV9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHUzMiByczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKTsKIHZvaWQgcnM2MDBfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordWludDY0X3QgcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSh1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncyk7CiB2b2lkIHJzNjAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCi0JCQkgdWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOworCQkJIHVpbnQ2NF90IGVudHJ5KTsKIHVpbnQzMl90IHJzNjAwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJzNjAwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CiB2b2lkIHJzNjAwX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwppbmRleCAwZWM2NTE2Li5iZDc1MTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtNzc0LDYgKzc3NCw4IEBACiAJCXJkZXYtPmR1bW15X3BhZ2UucGFnZSA9IE5VTEw7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwlyZGV2LT5kdW1teV9wYWdlLmVudHJ5ID0gcmFkZW9uX2dhcnRfZ2V0X3BhZ2VfZW50cnkocmRldi0+ZHVtbXlfcGFnZS5hZGRyLAorCQkJCQkJCSAgICBSQURFT05fR0FSVF9QQUdFX0RVTU1ZKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCmluZGV4IDg0MTQ2ZDUuLjU0NTBmYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKQEAgLTE2NSw2ICsxNjUsMTkgQEAKIAkJcmFkZW9uX2JvX3VucGluKHJkZXYtPmdhcnQucm9iaik7CiAJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5nYXJ0LnJvYmopOwogCXJkZXYtPmdhcnQudGFibGVfYWRkciA9IGdwdV9hZGRyOworCisJaWYgKCFyKSB7CisJCWludCBpOworCisJCS8qIFdlIG1pZ2h0IGhhdmUgZHJvcHBlZCBzb21lIEdBUlQgdGFibGUgdXBkYXRlcyB3aGlsZSBpdCB3YXNuJ3QKKwkJICogbWFwcGVkLCByZXN0b3JlIGFsbCBlbnRyaWVzCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzOyBpKyspCisJCQlyYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCBpLCByZGV2LT5nYXJ0LnBhZ2VzX2VudHJ5W2ldKTsKKwkJbWIoKTsKKwkJcmFkZW9uX2dhcnRfdGxiX2ZsdXNoKHJkZXYpOworCX0KKwogCXJldHVybiByOwogfQogCkBAIC0yMjgsNyArMjQxLDYgQEAKIAl1bnNpZ25lZCB0OwogCXVuc2lnbmVkIHA7CiAJaW50IGksIGo7Ci0JdTY0IHBhZ2VfYmFzZTsKIAogCWlmICghcmRldi0+Z2FydC5yZWFkeSkgewogCQlXQVJOKDEsICJ0cnlpbmcgdG8gdW5iaW5kIG1lbW9yeSBmcm9tIHVuaW5pdGlhbGl6ZWQgR0FSVCAhXG4iKTsKQEAgLTIzOSwxNCArMjUxLDEyIEBACiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyssIHArKykgewogCQlpZiAocmRldi0+Z2FydC5wYWdlc1twXSkgewogCQkJcmRldi0+Z2FydC5wYWdlc1twXSA9IE5VTEw7Ci0JCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSByZGV2LT5kdW1teV9wYWdlLmFkZHI7Ci0JCQlwYWdlX2Jhc2UgPSByZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF07CiAJCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsgaisrLCB0KyspIHsKKwkJCQlyZGV2LT5nYXJ0LnBhZ2VzX2VudHJ5W3RdID0gcmRldi0+ZHVtbXlfcGFnZS5lbnRyeTsKIAkJCQlpZiAocmRldi0+Z2FydC5wdHIpIHsKLQkJCQkJcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgdCwgcGFnZV9iYXNlLAotCQkJCQkJCSAgICAgUkFERU9OX0dBUlRfUEFHRV9EVU1NWSk7CisJCQkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsCisJCQkJCQkJICAgICByZGV2LT5kdW1teV9wYWdlLmVudHJ5KTsKIAkJCQl9Ci0JCQkJcGFnZV9iYXNlICs9IFJBREVPTl9HUFVfUEFHRV9TSVpFOwogCQkJfQogCQl9CiAJfQpAQCAtMjc0LDcgKzI4NCw3IEBACiB7CiAJdW5zaWduZWQgdDsKIAl1bnNpZ25lZCBwOwotCXVpbnQ2NF90IHBhZ2VfYmFzZTsKKwl1aW50NjRfdCBwYWdlX2Jhc2UsIHBhZ2VfZW50cnk7CiAJaW50IGksIGo7CiAKIAlpZiAoIXJkZXYtPmdhcnQucmVhZHkpIHsKQEAgLTI4NSwxNCArMjk1LDE1IEBACiAJcCA9IHQgLyAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOwogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyssIHArKykgewotCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSBkbWFfYWRkcltpXTsKIAkJcmRldi0+Z2FydC5wYWdlc1twXSA9IHBhZ2VsaXN0W2ldOwotCQlpZiAocmRldi0+Z2FydC5wdHIpIHsKLQkJCXBhZ2VfYmFzZSA9IHJkZXYtPmdhcnQucGFnZXNfYWRkcltwXTsKLQkJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOyBqKyssIHQrKykgewotCQkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsIHBhZ2VfYmFzZSwgZmxhZ3MpOwotCQkJCXBhZ2VfYmFzZSArPSBSQURFT05fR1BVX1BBR0VfU0laRTsKKwkJcGFnZV9iYXNlID0gZG1hX2FkZHJbaV07CisJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOyBqKyssIHQrKykgeworCQkJcGFnZV9lbnRyeSA9IHJhZGVvbl9nYXJ0X2dldF9wYWdlX2VudHJ5KHBhZ2VfYmFzZSwgZmxhZ3MpOworCQkJcmRldi0+Z2FydC5wYWdlc19lbnRyeVt0XSA9IHBhZ2VfZW50cnk7CisJCQlpZiAocmRldi0+Z2FydC5wdHIpIHsKKwkJCQlyYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCB0LCBwYWdlX2VudHJ5KTsKIAkJCX0KKwkJCXBhZ2VfYmFzZSArPSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAkJfQogCX0KIAltYigpOwpAQCAtMzM0LDE2ICszNDUsMTUgQEAKIAkJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXJkZXYtPmdhcnQucGFnZXNfYWRkciA9IHZ6YWxsb2Moc2l6ZW9mKGRtYV9hZGRyX3QpICoKLQkJCQkJcmRldi0+Z2FydC5udW1fY3B1X3BhZ2VzKTsKLQlpZiAocmRldi0+Z2FydC5wYWdlc19hZGRyID09IE5VTEwpIHsKKwlyZGV2LT5nYXJ0LnBhZ2VzX2VudHJ5ID0gdm1hbGxvYyhzaXplb2YodWludDY0X3QpICoKKwkJCQkJIHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyk7CisJaWYgKHJkZXYtPmdhcnQucGFnZXNfZW50cnkgPT0gTlVMTCkgewogCQlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJLyogc2V0IEdBUlQgZW50cnkgdG8gcG9pbnQgdG8gdGhlIGR1bW15IHBhZ2UgYnkgZGVmYXVsdCAqLwotCWZvciAoaSA9IDA7IGkgPCByZGV2LT5nYXJ0Lm51bV9jcHVfcGFnZXM7IGkrKykgewotCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbaV0gPSByZGV2LT5kdW1teV9wYWdlLmFkZHI7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXM7IGkrKykKKwkJcmRldi0+Z2FydC5wYWdlc19lbnRyeVtpXSA9IHJkZXYtPmR1bW15X3BhZ2UuZW50cnk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1NiwxNSArMzY2LDE1IEBACiAgKi8KIHZvaWQgcmFkZW9uX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlpZiAocmRldi0+Z2FydC5wYWdlcyAmJiByZGV2LT5nYXJ0LnBhZ2VzX2FkZHIgJiYgcmRldi0+Z2FydC5yZWFkeSkgeworCWlmIChyZGV2LT5nYXJ0LnJlYWR5KSB7CiAJCS8qIHVuYmluZCBwYWdlcyAqLwogCQlyYWRlb25fZ2FydF91bmJpbmQocmRldiwgMCwgcmRldi0+Z2FydC5udW1fY3B1X3BhZ2VzKTsKIAl9CiAJcmRldi0+Z2FydC5yZWFkeSA9IGZhbHNlOwogCXZmcmVlKHJkZXYtPmdhcnQucGFnZXMpOwotCXZmcmVlKHJkZXYtPmdhcnQucGFnZXNfYWRkcik7CisJdmZyZWUocmRldi0+Z2FydC5wYWdlc19lbnRyeSk7CiAJcmRldi0+Z2FydC5wYWdlcyA9IE5VTEw7Ci0JcmRldi0+Z2FydC5wYWdlc19hZGRyID0gTlVMTDsKKwlyZGV2LT5nYXJ0LnBhZ2VzX2VudHJ5ID0gTlVMTDsKIAogCXJhZGVvbl9kdW1teV9wYWdlX2ZpbmkocmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCmluZGV4IGZlNDhmMjIuLmQwYjRmN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCkBAIC0zOTQsMTAgKzM5NCw5IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBpbnQgcmFkZW9uX21vZGVfbW1hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCi0JCQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICB1aW50MzJfdCBoYW5kbGUsIGJvb2wgZHVtYiwKLQkJCSAgICB1aW50NjRfdCAqb2Zmc2V0X3ApCitpbnQgcmFkZW9uX21vZGVfZHVtYl9tbWFwKHN0cnVjdCBkcm1fZmlsZSAqZmlscCwKKwkJCSAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCAqb2Zmc2V0X3ApCiB7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqOwogCXN0cnVjdCByYWRlb25fYm8gKnJvYmo7CkBAIC00MDYsMTQgKzQwNSw2IEBACiAJaWYgKGdvYmogPT0gTlVMTCkgewogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0KLQkvKgotCSAqIFdlIGRvbid0IGFsbG93IGR1bWIgbW1hcHMgb24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGFub3RoZXIKLQkgKiBpbnRlcmZhY2UuCi0JICovCi0JV0FSTl9PTkNFKGR1bWIgJiYgIShnb2JqLT5kdW1iIHx8IGdvYmotPmltcG9ydF9hdHRhY2gpLAotCQkiSWxsZWdhbCBkdW1iIG1hcCBvZiBHUFUgYnVmZmVyLlxuIik7Ci0KIAlyb2JqID0gZ2VtX3RvX3JhZGVvbl9ibyhnb2JqKTsKIAlpZiAocmFkZW9uX3R0bV90dF9oYXNfdXNlcnB0cihyb2JqLT50Ym8udHRtKSkgewogCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKQEAgLTQyNCwyMCArNDE1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByYWRlb25fbW9kZV9kdW1iX21tYXAoc3RydWN0IGRybV9maWxlICpmaWxwLAotCQkJICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90ICpvZmZzZXRfcCkKLXsKLQlyZXR1cm4gcmFkZW9uX21vZGVfbW1hcChmaWxwLCBkZXYsIGhhbmRsZSwgdHJ1ZSwgb2Zmc2V0X3ApOwotfQotCiBpbnQgcmFkZW9uX2dlbV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgZHJtX3JhZGVvbl9nZW1fbW1hcCAqYXJncyA9IGRhdGE7CiAKLQlyZXR1cm4gcmFkZW9uX21vZGVfbW1hcChmaWxwLCBkZXYsIGFyZ3MtPmhhbmRsZSwgZmFsc2UsCi0JCQkJJmFyZ3MtPmFkZHJfcHRyKTsKKwlyZXR1cm4gcmFkZW9uX21vZGVfZHVtYl9tbWFwKGZpbHAsIGRldiwgYXJncy0+aGFuZGxlLCAmYXJncy0+YWRkcl9wdHIpOwogfQogCiBpbnQgcmFkZW9uX2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC01OTMsNyArNTc2LDcgQEAKIGVycm9yX2ZyZWU6CiAJZHJtX2ZyZWVfbGFyZ2Uodm1fYm9zKTsKIAotCWlmIChyKQorCWlmIChyICYmIHIgIT0gLUVSRVNUQVJUU1lTKQogCQlEUk1fRVJST1IoIkNvdWxkbid0IHVwZGF0ZSBCT19WQSAoJWQpXG4iLCByKTsKIH0KIApAQCAtNzYzLDcgKzc0Niw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJciA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsIGdvYmosICZoYW5kbGUpOwotCWdvYmotPmR1bWIgPSB0cnVlOwogCS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2NhdGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93ICovCiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CiAJaWYgKHIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2tmZC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa2ZkLmMKaW5kZXggMDY1ZDAyMC4uYmVmOWEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa2ZkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa2ZkLmMKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJjaWtkLmgiCiAjaW5jbHVkZSAiY2lrX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbl9rZmQuaCIKKyNpbmNsdWRlICJyYWRlb25fdWNvZGUuaCIKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjZGVmaW5lIENJS19QSVBFX1BFUl9NRUMJKDQpCiAKQEAgLTQ5LDYgKzUxLDcgQEAKIHN0YXRpYyB1aW50NjRfdCBnZXRfZ3B1X2Nsb2NrX2NvdW50ZXIoc3RydWN0IGtnZF9kZXYgKmtnZCk7CiAKIHN0YXRpYyB1aW50MzJfdCBnZXRfbWF4X2VuZ2luZV9jbG9ja19pbl9taHooc3RydWN0IGtnZF9kZXYgKmtnZCk7CitzdGF0aWMgdWludDE2X3QgZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IGtnZF9kZXYgKmtnZCwgZW51bSBrZ2RfZW5naW5lX3R5cGUgdHlwZSk7CiAKIC8qCiAgKiBSZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zCkBAIC02OSw3ICs3Miw3IEBACiBzdGF0aWMgaW50IGtnZF9ocWRfbG9hZChzdHJ1Y3Qga2dkX2RldiAqa2dkLCB2b2lkICptcWQsIHVpbnQzMl90IHBpcGVfaWQsCiAJCQl1aW50MzJfdCBxdWV1ZV9pZCwgdWludDMyX3QgX191c2VyICp3cHRyKTsKIAotc3RhdGljIGJvb2wga2dkX2hxZF9pc19vY2N1cGllcyhzdHJ1Y3Qga2dkX2RldiAqa2dkLCB1aW50NjRfdCBxdWV1ZV9hZGRyZXNzLAorc3RhdGljIGJvb2wga2dkX2hxZF9pc19vY2N1cGllZChzdHJ1Y3Qga2dkX2RldiAqa2dkLCB1aW50NjRfdCBxdWV1ZV9hZGRyZXNzLAogCQkJCXVpbnQzMl90IHBpcGVfaWQsIHVpbnQzMl90IHF1ZXVlX2lkKTsKIAogc3RhdGljIGludCBrZ2RfaHFkX2Rlc3Ryb3koc3RydWN0IGtnZF9kZXYgKmtnZCwgdWludDMyX3QgcmVzZXRfdHlwZSwKQEAgLTg5LDE0ICs5MiwxNiBAQAogCS5pbml0X21lbW9yeSA9IGtnZF9pbml0X21lbW9yeSwKIAkuaW5pdF9waXBlbGluZSA9IGtnZF9pbml0X3BpcGVsaW5lLAogCS5ocWRfbG9hZCA9IGtnZF9ocWRfbG9hZCwKLQkuaHFkX2lzX29jY3VwaWVzID0ga2dkX2hxZF9pc19vY2N1cGllcywKKwkuaHFkX2lzX29jY3VwaWVkID0ga2dkX2hxZF9pc19vY2N1cGllZCwKIAkuaHFkX2Rlc3Ryb3kgPSBrZ2RfaHFkX2Rlc3Ryb3ksCisJLmdldF9md192ZXJzaW9uID0gZ2V0X2Z3X3ZlcnNpb24KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2dkMmtmZF9jYWxscyAqa2dkMmtmZDsKIAogYm9vbCByYWRlb25fa2ZkX2luaXQodm9pZCkKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19IU0FfQU1EX01PRFVMRSkKIAlib29sICgqa2dkMmtmZF9pbml0X3ApKHVuc2lnbmVkLCBjb25zdCBzdHJ1Y3Qga2ZkMmtnZF9jYWxscyosCiAJCQkJY29uc3Qgc3RydWN0IGtnZDJrZmRfY2FsbHMqKik7CiAKQEAgLTExMyw2ICsxMTgsMTcgQEAKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hTQV9BTUQpCisJaWYgKCFrZ2Qya2ZkX2luaXQoS0ZEX0lOVEVSRkFDRV9WRVJTSU9OLCAma2ZkMmtnZCwgJmtnZDJrZmQpKSB7CisJCWtnZDJrZmQgPSBOVUxMOworCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKKyNlbHNlCisJcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKIHZvaWQgcmFkZW9uX2tmZF9maW5pKHZvaWQpCkBAIC0zNzQsNiArMzkwLDEwIEBACiAJCWNwdV9yZWxheCgpOwogCXdyaXRlX3JlZ2lzdGVyKGtnZCwgQVRDX1ZNSURfUEFTSURfTUFQUElOR19VUERBVEVfU1RBVFVTLCAxVSA8PCB2bWlkKTsKIAorCS8qIE1hcHBpbmcgdm1pZCB0byBwYXNpZCBhbHNvIGZvciBJSCBibG9jayAqLworCXdyaXRlX3JlZ2lzdGVyKGtnZCwgSUhfVk1JRF8wX0xVVCArIHZtaWQgKiBzaXplb2YodWludDMyX3QpLAorCQkJcGFzaWRfbWFwcGluZyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDE2LDcgKzQzNiw3IEBACiBzdGF0aWMgaW50IGtnZF9pbml0X3BpcGVsaW5lKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHVpbnQzMl90IHBpcGVfaWQsCiAJCQkJdWludDMyX3QgaHBkX3NpemUsIHVpbnQ2NF90IGhwZF9ncHVfYWRkcikKIHsKLQl1aW50MzJfdCBtZWMgPSAoKytwaXBlX2lkIC8gQ0lLX1BJUEVfUEVSX01FQykgKyAxOworCXVpbnQzMl90IG1lYyA9IChwaXBlX2lkIC8gQ0lLX1BJUEVfUEVSX01FQykgKyAxOwogCXVpbnQzMl90IHBpcGUgPSAocGlwZV9pZCAlIENJS19QSVBFX1BFUl9NRUMpOwogCiAJbG9ja19zcmJtKGtnZCwgbWVjLCBwaXBlLCAwLCAwKTsKQEAgLTUxMyw3ICs1MzMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYm9vbCBrZ2RfaHFkX2lzX29jY3VwaWVzKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHVpbnQ2NF90IHF1ZXVlX2FkZHJlc3MsCitzdGF0aWMgYm9vbCBrZ2RfaHFkX2lzX29jY3VwaWVkKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHVpbnQ2NF90IHF1ZXVlX2FkZHJlc3MsCiAJCQkJdWludDMyX3QgcGlwZV9pZCwgdWludDMyX3QgcXVldWVfaWQpCiB7CiAJdWludDMyX3QgYWN0OwpAQCAtNTUyLDYgKzU3Miw3IEBACiAJCWlmICh0aW1lb3V0ID09IDApIHsKIAkJCXByX2Vycigia2ZkOiBjcCBxdWV1ZSBwcmVlbXB0aW9uIHRpbWUgb3V0ICglZG1zKVxuIiwKIAkJCQl0ZW1wKTsKKwkJCXJlbGVhc2VfcXVldWUoa2dkKTsKIAkJCXJldHVybiAtRVRJTUU7CiAJCX0KIAkJbXNsZWVwKDIwKTsKQEAgLTU2MSwzICs1ODIsNTIgQEAKIAlyZWxlYXNlX3F1ZXVlKGtnZCk7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyB1aW50MTZfdCBnZXRfZndfdmVyc2lvbihzdHJ1Y3Qga2dkX2RldiAqa2dkLCBlbnVtIGtnZF9lbmdpbmVfdHlwZSB0eXBlKQoreworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gKHN0cnVjdCByYWRlb25fZGV2aWNlICopIGtnZDsKKwljb25zdCB1bmlvbiByYWRlb25fZmlybXdhcmVfaGVhZGVyICpoZHI7CisKKwlCVUdfT04oa2dkID09IE5VTEwgfHwgcmRldi0+bWVjX2Z3ID09IE5VTEwpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBLR0RfRU5HSU5FX1BGUDoKKwkJaGRyID0gKGNvbnN0IHVuaW9uIHJhZGVvbl9maXJtd2FyZV9oZWFkZXIgKikgcmRldi0+cGZwX2Z3LT5kYXRhOworCQlicmVhazsKKworCWNhc2UgS0dEX0VOR0lORV9NRToKKwkJaGRyID0gKGNvbnN0IHVuaW9uIHJhZGVvbl9maXJtd2FyZV9oZWFkZXIgKikgcmRldi0+bWVfZnctPmRhdGE7CisJCWJyZWFrOworCisJY2FzZSBLR0RfRU5HSU5FX0NFOgorCQloZHIgPSAoY29uc3QgdW5pb24gcmFkZW9uX2Zpcm13YXJlX2hlYWRlciAqKSByZGV2LT5jZV9mdy0+ZGF0YTsKKwkJYnJlYWs7CisKKwljYXNlIEtHRF9FTkdJTkVfTUVDMToKKwkJaGRyID0gKGNvbnN0IHVuaW9uIHJhZGVvbl9maXJtd2FyZV9oZWFkZXIgKikgcmRldi0+bWVjX2Z3LT5kYXRhOworCQlicmVhazsKKworCWNhc2UgS0dEX0VOR0lORV9NRUMyOgorCQloZHIgPSAoY29uc3QgdW5pb24gcmFkZW9uX2Zpcm13YXJlX2hlYWRlciAqKQorCQkJCQkJCXJkZXYtPm1lYzJfZnctPmRhdGE7CisJCWJyZWFrOworCisJY2FzZSBLR0RfRU5HSU5FX1JMQzoKKwkJaGRyID0gKGNvbnN0IHVuaW9uIHJhZGVvbl9maXJtd2FyZV9oZWFkZXIgKikgcmRldi0+cmxjX2Z3LT5kYXRhOworCQlicmVhazsKKworCWNhc2UgS0dEX0VOR0lORV9TRE1BOgorCQloZHIgPSAoY29uc3QgdW5pb24gcmFkZW9uX2Zpcm13YXJlX2hlYWRlciAqKQorCQkJCQkJCXJkZXYtPnNkbWFfZnctPmRhdGE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGhkciA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIE9ubHkgMTIgYml0IGluIHVzZSovCisJcmV0dXJuIGhkci0+Y29tbW9uLnVjb2RlX3ZlcnNpb247Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCmluZGV4IDdkNjgyMjMuLjg2ZmM1NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCkBAIC01MjksOSArNTI5LDYgQEAKIAkJCXUzMiBjdXJyZW50X2RvbWFpbiA9CiAJCQkJcmFkZW9uX21lbV90eXBlX3RvX2RvbWFpbihiby0+dGJvLm1lbS5tZW1fdHlwZSk7CiAKLQkJCVdBUk5fT05DRShiby0+Z2VtX2Jhc2UuZHVtYiwKLQkJCQkgICJHUFUgdXNlIG9mIGR1bWIgYnVmZmVyIGlzIGlsbGVnYWwuXG4iKTsKLQogCQkJLyogQ2hlY2sgaWYgdGhpcyBidWZmZXIgd2lsbCBiZSBtb3ZlZCBhbmQgZG9uJ3QgbW92ZSBpdAogCQkJICogaWYgd2UgaGF2ZSBtb3ZlZCB0b28gbWFueSBidWZmZXJzIGZvciB0aGlzIElCIGFscmVhZHkuCiAJCQkgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKaW5kZXggMzI1MjJjYy4uZjdkYThmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCkBAIC0xMjg3LDggKzEyODcsMzkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3QgcmFkZW9uX2RwbV9xdWlyayB7CisJdTMyIGNoaXBfdmVuZG9yOworCXUzMiBjaGlwX2RldmljZTsKKwl1MzIgc3Vic3lzX3ZlbmRvcjsKKwl1MzIgc3Vic3lzX2RldmljZTsKK307CisKKy8qIGNhcmRzIHdpdGggZHBtIHN0YWJpbGl0eSBwcm9ibGVtcyAqLworc3RhdGljIHN0cnVjdCByYWRlb25fZHBtX3F1aXJrIHJhZGVvbl9kcG1fcXVpcmtfbGlzdFtdID0geworCS8qIFRVUktTIC0gaHR0cHM6Ly9idWdzLmxhdW5jaHBhZC5uZXQvdWJ1bnR1Lytzb3VyY2UvbGludXgvK2J1Zy8xMzg2NTM0ICovCisJeyBQQ0lfVkVORE9SX0lEX0FUSSwgMHg2NzU5LCAweDE2ODIsIDB4MzE5NSB9LAorCS8qIFRVUktTIC0gaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD04MzczMSAqLworCXsgUENJX1ZFTkRPUl9JRF9BVEksIDB4Njg0MCwgMHgxMTc5LCAweGZiODEgfSwKKwl7IDAsIDAsIDAsIDAgfSwKK307CisKIGludCByYWRlb25fcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlzdHJ1Y3QgcmFkZW9uX2RwbV9xdWlyayAqcCA9IHJhZGVvbl9kcG1fcXVpcmtfbGlzdDsKKwlib29sIGRpc2FibGVfZHBtID0gZmFsc2U7CisKKwkvKiBBcHBseSBkcG0gcXVpcmtzICovCisJd2hpbGUgKHAgJiYgcC0+Y2hpcF9kZXZpY2UgIT0gMCkgeworCQlpZiAocmRldi0+cGRldi0+dmVuZG9yID09IHAtPmNoaXBfdmVuZG9yICYmCisJCSAgICByZGV2LT5wZGV2LT5kZXZpY2UgPT0gcC0+Y2hpcF9kZXZpY2UgJiYKKwkJICAgIHJkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gcC0+c3Vic3lzX3ZlbmRvciAmJgorCQkgICAgcmRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSBwLT5zdWJzeXNfZGV2aWNlKSB7CisJCQlkaXNhYmxlX2RwbSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCQkrK3A7CisJfQorCiAJLyogZW5hYmxlIGRwbSBvbiBydjZ4eCsgKi8KIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9SVjYxMDoKQEAgLTEzNDQsNiArMTM3NSw4IEBACiAJCQkgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSkgJiYKIAkJCSAoIXJkZXYtPnNtY19mdykpCiAJCQlyZGV2LT5wbS5wbV9tZXRob2QgPSBQTV9NRVRIT0RfUFJPRklMRTsKKwkJZWxzZSBpZiAoZGlzYWJsZV9kcG0gJiYgKHJhZGVvbl9kcG0gPT0gLTEpKQorCQkJcmRldi0+cG0ucG1fbWV0aG9kID0gUE1fTUVUSE9EX1BST0ZJTEU7CiAJCWVsc2UgaWYgKHJhZGVvbl9kcG0gPT0gMCkKIAkJCXJkZXYtPnBtLnBtX21ldGhvZCA9IFBNX01FVEhPRF9QUk9GSUxFOwogCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYwppbmRleCA1MzU0MDNlLi4xNWFlZTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKQEAgLTE3MDMsNyArMTcwMyw3IEBACiAJdTMyIGZvcm1hdDsKIAl1MzIgKmJ1ZmZlcjsKIAljb25zdCB1OCBfX3VzZXIgKmRhdGE7Ci0JaW50IHNpemUsIGR3b3JkcywgdGV4X3dpZHRoLCBibGl0X3dpZHRoLCBzcGl0Y2g7CisJdW5zaWduZWQgaW50IHNpemUsIGR3b3JkcywgdGV4X3dpZHRoLCBibGl0X3dpZHRoLCBzcGl0Y2g7CiAJdTMyIGhlaWdodDsKIAlpbnQgaTsKIAl1MzIgdGV4cGl0Y2gsIG1pY3JvdGlsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl92bS5jCmluZGV4IGNkZTQ4YzQuLjA2ZDIyNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYwpAQCAtNTg3LDEwICs1ODcsOCBAQAogCXVpbnQ2NF90IHJlc3VsdDsKIAogCS8qIHBhZ2UgdGFibGUgb2Zmc2V0ICovCi0JcmVzdWx0ID0gcmRldi0+Z2FydC5wYWdlc19hZGRyW2FkZHIgPj4gUEFHRV9TSElGVF07Ci0KLQkvKiBpbiBjYXNlIGNwdSBwYWdlIHNpemUgIT0gZ3B1IHBhZ2Ugc2l6ZSovCi0JcmVzdWx0IHw9IGFkZHIgJiAoflBBR0VfTUFTSyk7CisJcmVzdWx0ID0gcmRldi0+Z2FydC5wYWdlc19lbnRyeVthZGRyID4+IFJBREVPTl9HUFVfUEFHRV9TSElGVF07CisJcmVzdWx0ICY9IH5SQURFT05fR1BVX1BBR0VfTUFTSzsKIAogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKaW5kZXggYzU3OTlmMTYuLjM0ZTMyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKQEAgLTIxMiwxMSArMjEyLDkgQEAKICNkZWZpbmUgUlM0MDBfUFRFX1dSSVRFQUJMRSAoMSA8PCAyKQogI2RlZmluZSBSUzQwMF9QVEVfUkVBREFCTEUgICgxIDw8IDMpCiAKLXZvaWQgcnM0MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgaSwKLQkJCSB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncykKK3VpbnQ2NF90IHJzNDAwX2dhcnRfZ2V0X3BhZ2VfZW50cnkodWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpCiB7CiAJdWludDMyX3QgZW50cnk7Ci0JdTMyICpndHQgPSByZGV2LT5nYXJ0LnB0cjsKIAogCWVudHJ5ID0gKGxvd2VyXzMyX2JpdHMoYWRkcikgJiBQQUdFX01BU0spIHwKIAkJKCh1cHBlcl8zMl9iaXRzKGFkZHIpICYgMHhmZikgPDwgNCk7CkBAIC0yMjYsOCArMjI0LDE0IEBACiAJCWVudHJ5IHw9IFJTNDAwX1BURV9XUklURUFCTEU7CiAJaWYgKCEoZmxhZ3MgJiBSQURFT05fR0FSVF9QQUdFX1NOT09QKSkKIAkJZW50cnkgfD0gUlM0MDBfUFRFX1VOU05PT1BFRDsKLQllbnRyeSA9IGNwdV90b19sZTMyKGVudHJ5KTsKLQlndHRbaV0gPSBlbnRyeTsKKwlyZXR1cm4gZW50cnk7Cit9CisKK3ZvaWQgcnM0MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgaSwKKwkJCSB1aW50NjRfdCBlbnRyeSkKK3sKKwl1MzIgKmd0dCA9IHJkZXYtPmdhcnQucHRyOworCWd0dFtpXSA9IGNwdV90b19sZTMyKGxvd2VyXzMyX2JpdHMoZW50cnkpKTsKIH0KIAogaW50IHJzNDAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKaW5kZXggOWFjYjFjMy4uNzRiY2U5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwpAQCAtNjI1LDExICs2MjUsOCBAQAogCXJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fZnJlZShyZGV2KTsKIH0KIAotdm9pZCByczYwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAotCQkJIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKQordWludDY0X3QgcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSh1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncykKIHsKLQl2b2lkIF9faW9tZW0gKnB0ciA9ICh2b2lkICopcmRldi0+Z2FydC5wdHI7Ci0KIAlhZGRyID0gYWRkciAmIDB4RkZGRkZGRkZGRkZGRjAwMFVMTDsKIAlhZGRyIHw9IFI2MDBfUFRFX1NZU1RFTTsKIAlpZiAoZmxhZ3MgJiBSQURFT05fR0FSVF9QQUdFX1ZBTElEKQpAQCAtNjQwLDcgKzYzNywxNCBAQAogCQlhZGRyIHw9IFI2MDBfUFRFX1dSSVRFQUJMRTsKIAlpZiAoZmxhZ3MgJiBSQURFT05fR0FSVF9QQUdFX1NOT09QKQogCQlhZGRyIHw9IFI2MDBfUFRFX1NOT09QRUQ7Ci0Jd3JpdGVxKGFkZHIsIHB0ciArIChpICogOCkpOworCXJldHVybiBhZGRyOworfQorCit2b2lkIHJzNjAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCisJCQkgdWludDY0X3QgZW50cnkpCit7CisJdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKXJkZXYtPmdhcnQucHRyOworCXdyaXRlcShlbnRyeSwgcHRyICsgKGkgKiA4KSk7CiB9CiAKIGludCByczYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaS5jCmluZGV4IDYwZGY0NDQuLjVkODliODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpLmMKQEAgLTUwNTcsNiArNTA1NywxNiBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDApOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDEgPDwgdm1faWQpOwogCisJLyogd2FpdCBmb3IgdGhlIGludmFsaWRhdGUgdG8gY29tcGxldGUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBQQUNLRVQzKFBBQ0tFVDNfV0FJVF9SRUdfTUVNLCA1KSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgKFdBSVRfUkVHX01FTV9GVU5DVElPTigwKSB8ICAvKiBhbHdheXMgKi8KKwkJCQkgV0FJVF9SRUdfTUVNX0VOR0lORSgwKSkpOyAvKiBtZSAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFZNX0lOVkFMSURBVEVfUkVRVUVTVCA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAwKTsgLyogcmVmICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgMCk7IC8qIG1hc2sgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAweDIwKTsgLyogcG9sbCBpbnRlcnZhbCAqLworCiAJLyogc3luYyBQRlAgdG8gTUUsIG90aGVyd2lzZSB3ZSBtaWdodCBnZXQgaW52YWxpZCBQRlAgcmVhZHMgKi8KIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCBQQUNLRVQzKFBBQ0tFVDNfUEZQX1NZTkNfTUUsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCAweDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lfZG1hLmMKaW5kZXggZjVjYzc3Ny4uODMyMDc5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpX2RtYS5jCkBAIC0xMjMsNyArMTIzLDYgQEAKIAkJZm9yICg7IG5kdyA+IDA7IG5kdyAtPSAyLCAtLWNvdW50LCBwZSArPSA4KSB7CiAJCQlpZiAoZmxhZ3MgJiBSNjAwX1BURV9TWVNURU0pIHsKIAkJCQl2YWx1ZSA9IHJhZGVvbl92bV9tYXBfZ2FydChyZGV2LCBhZGRyKTsKLQkJCQl2YWx1ZSAmPSAweEZGRkZGRkZGRkZGRkYwMDBVTEw7CiAJCQl9IGVsc2UgaWYgKGZsYWdzICYgUjYwMF9QVEVfVkFMSUQpIHsKIAkJCQl2YWx1ZSA9IGFkZHI7CiAJCQl9IGVsc2UgewpAQCAtMjA2LDYgKzIwNSwxNCBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIERNQV9QQUNLRVQoRE1BX1BBQ0tFVF9TUkJNX1dSSVRFLCAwLCAwLCAwLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgKDB4ZiA8PCAxNikgfCAoVk1fSU5WQUxJREFURV9SRVFVRVNUID4+IDIpKTsKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCAxIDw8IHZtX2lkKTsKKworCS8qIHdhaXQgZm9yIGludmFsaWRhdGUgdG8gY29tcGxldGUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBETUFfUEFDS0VUKERNQV9QQUNLRVRfUE9MTF9SRUdfTUVNLCAwLCAwLCAwLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgVk1fSU5WQUxJREFURV9SRVFVRVNUKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAweGZmIDw8IDE2KTsgLyogcmV0cnkgKi8KKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCAxIDw8IHZtX2lkKTsgLyogbWFzayAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIDApOyAvKiB2YWx1ZSAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsICgwIDw8IDI4KSB8IDB4MjApOyAvKiBmdW5jKGFsd2F5cykgfCBwb2xsIGludGVydmFsICovCiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaV9kcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lfZHBtLmMKaW5kZXggMzJlMzU0Yi4uZWZmOGE2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaV9kcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpX2RwbS5jCkBAIC0yOTA4LDYgKzI5MDgsMjIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3Qgc2lfZHBtX3F1aXJrIHsKKwl1MzIgY2hpcF92ZW5kb3I7CisJdTMyIGNoaXBfZGV2aWNlOworCXUzMiBzdWJzeXNfdmVuZG9yOworCXUzMiBzdWJzeXNfZGV2aWNlOworCXUzMiBtYXhfc2NsazsKKwl1MzIgbWF4X21jbGs7Cit9OworCisvKiBjYXJkcyB3aXRoIGRwbSBzdGFiaWxpdHkgcHJvYmxlbXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2lfZHBtX3F1aXJrIHNpX2RwbV9xdWlya19saXN0W10gPSB7CisJLyogUElUQ0FJUk4gLSBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQ5MCAqLworCXsgUENJX1ZFTkRPUl9JRF9BVEksIDB4NjgxMCwgMHgxNDYyLCAweDMwMzYsIDAsIDEyMDAwMCB9LAorCXsgMCwgMCwgMCwgMCB9LAorfTsKKwogc3RhdGljIHZvaWQgc2lfYXBwbHlfc3RhdGVfYWRqdXN0X3J1bGVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJCQlzdHJ1Y3QgcmFkZW9uX3BzICpycHMpCiB7CkBAIC0yOTE4LDcgKzI5MzQsMjIgQEAKIAl1MzIgbWNsaywgc2NsazsKIAl1MTYgdmRkYywgdmRkY2k7CiAJdTMyIG1heF9zY2xrX3ZkZGMsIG1heF9tY2xrX3ZkZGNpLCBtYXhfbWNsa192ZGRjOworCXUzMiBtYXhfc2NsayA9IDAsIG1heF9tY2xrID0gMDsKIAlpbnQgaTsKKwlzdHJ1Y3Qgc2lfZHBtX3F1aXJrICpwID0gc2lfZHBtX3F1aXJrX2xpc3Q7CisKKwkvKiBBcHBseSBkcG0gcXVpcmtzICovCisJd2hpbGUgKHAgJiYgcC0+Y2hpcF9kZXZpY2UgIT0gMCkgeworCQlpZiAocmRldi0+cGRldi0+dmVuZG9yID09IHAtPmNoaXBfdmVuZG9yICYmCisJCSAgICByZGV2LT5wZGV2LT5kZXZpY2UgPT0gcC0+Y2hpcF9kZXZpY2UgJiYKKwkJICAgIHJkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gcC0+c3Vic3lzX3ZlbmRvciAmJgorCQkgICAgcmRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSBwLT5zdWJzeXNfZGV2aWNlKSB7CisJCQltYXhfc2NsayA9IHAtPm1heF9zY2xrOworCQkJbWF4X21jbGsgPSBwLT5tYXhfbWNsazsKKwkJCWJyZWFrOworCQl9CisJCSsrcDsKKwl9CiAKIAlpZiAoKHJkZXYtPnBtLmRwbS5uZXdfYWN0aXZlX2NydGNfY291bnQgPiAxKSB8fAogCSAgICBuaV9kcG1fdmJsYW5rX3Rvb19zaG9ydChyZGV2KSkKQEAgLTI5NzIsNiArMzAwMywxNCBAQAogCQkJaWYgKHBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0ubWNsayA+IG1heF9tY2xrX3ZkZGMpCiAJCQkJcHMtPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5tY2xrID0gbWF4X21jbGtfdmRkYzsKIAkJfQorCQlpZiAobWF4X21jbGspIHsKKwkJCWlmIChwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm1jbGsgPiBtYXhfbWNsaykKKwkJCQlwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLm1jbGsgPSBtYXhfbWNsazsKKwkJfQorCQlpZiAobWF4X3NjbGspIHsKKwkJCWlmIChwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLnNjbGsgPiBtYXhfc2NsaykKKwkJCQlwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldLnNjbGsgPSBtYXhfc2NsazsKKwkJfQogCX0KIAogCS8qIFhYWCB2YWxpZGF0ZSB0aGUgbWluIGNsb2NrcyByZXF1aXJlZCBmb3IgZGlzcGxheSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaWQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lkLmgKaW5kZXggNDA2OWJlODkuLjg0OTk5MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaWQuaApAQCAtMTYzMiw2ICsxNjMyLDIzIEBACiAjZGVmaW5lCVBBQ0tFVDNfTVBFR19JTkRFWAkJCQkweDNBCiAjZGVmaW5lCVBBQ0tFVDNfQ09QWV9EVwkJCQkJMHgzQgogI2RlZmluZQlQQUNLRVQzX1dBSVRfUkVHX01FTQkJCQkweDNDCisjZGVmaW5lCQlXQUlUX1JFR19NRU1fRlVOQ1RJT04oeCkgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorICAgICAgICAgICAgICAgIC8qIDAgLSBhbHdheXMKKwkJICogMSAtIDwKKwkJICogMiAtIDw9CisJCSAqIDMgLSA9PQorCQkgKiA0IC0gIT0KKwkJICogNSAtID49CisJCSAqIDYgLSA+CisJCSAqLworI2RlZmluZQkJV0FJVF9SRUdfTUVNX01FTV9TUEFDRSh4KSAgICAgICAgICAgICAgICgoeCkgPDwgNCkKKyAgICAgICAgICAgICAgICAvKiAwIC0gcmVnCisJCSAqIDEgLSBtZW0KKwkJICovCisjZGVmaW5lCQlXQUlUX1JFR19NRU1fRU5HSU5FKHgpICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorICAgICAgICAgICAgICAgIC8qIDAgLSBtZQorCQkgKiAxIC0gcGZwCisJCSAqLwogI2RlZmluZQlQQUNLRVQzX01FTV9XUklURQkJCQkweDNECiAjZGVmaW5lCVBBQ0tFVDNfQ09QWV9EQVRBCQkJCTB4NDAKICNkZWZpbmUJUEFDS0VUM19DUF9ETUEJCQkJCTB4NDEKQEAgLTE4MzUsNiArMTg1Miw3IEBACiAjZGVmaW5lCURNQV9QQUNLRVRfVFJBUAkJCQkJICAweDcKICNkZWZpbmUJRE1BX1BBQ0tFVF9TUkJNX1dSSVRFCQkJCSAgMHg5CiAjZGVmaW5lCURNQV9QQUNLRVRfQ09OU1RBTlRfRklMTAkJCSAgMHhkCisjZGVmaW5lCURNQV9QQUNLRVRfUE9MTF9SRUdfTUVNCQkJCSAgMHhlCiAjZGVmaW5lCURNQV9QQUNLRVRfTk9QCQkJCQkgIDB4ZgogCiAjZGVmaW5lIFZDRV9TVEFUVVMJCQkJCTB4MjAwMDQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kYy5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RjLmMKaW5kZXggMzM2Nzk2MC4uOTc4OTkzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RjLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQkJCSBjb25zdCBzdHJ1Y3QgdGVncmFfZGNfd2luZG93ICp3aW5kb3cpCiB7CiAJdW5zaWduZWQgaF9vZmZzZXQsIHZfb2Zmc2V0LCBoX3NpemUsIHZfc2l6ZSwgaF9kZGEsIHZfZGRhLCBicHA7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlLCBmbGFnczsKIAlib29sIHl1diwgcGxhbmFyOwogCiAJLyoKQEAgLTE4MSw2ICsxODEsOCBAQAogCWVsc2UKIAkJYnBwID0gcGxhbmFyID8gMSA6IDI7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGMtPmxvY2ssIGZsYWdzKTsKKwogCXZhbHVlID0gV0lORE9XX0FfU0VMRUNUIDw8IGluZGV4OwogCXRlZ3JhX2RjX3dyaXRlbChkYywgdmFsdWUsIERDX0NNRF9ESVNQTEFZX1dJTkRPV19IRUFERVIpOwogCkBAIC0yNzMsNiArMjc1LDcgQEAKIAogCQljYXNlIFRFR1JBX0JPX1RJTElOR19NT0RFX0JMT0NLOgogCQkJRFJNX0VSUk9SKCJoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgYmxvY2sgbGluZWFyIG1vZGVcbiIpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGMtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTMzMSw2ICszMzQsOCBAQAogCiAJdGVncmFfZGNfd2luZG93X2NvbW1pdChkYywgaW5kZXgpOwogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGMtPmxvY2ssIGZsYWdzKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzgsMTEgKzM0MywxNCBAQAogewogCXN0cnVjdCB0ZWdyYV9kYyAqZGMgPSB0b190ZWdyYV9kYyhwbGFuZS0+Y3J0Yyk7CiAJc3RydWN0IHRlZ3JhX3BsYW5lICpwID0gdG9fdGVncmFfcGxhbmUocGxhbmUpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHZhbHVlOwogCiAJaWYgKCFwbGFuZS0+Y3J0YykKIAkJcmV0dXJuIDA7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGMtPmxvY2ssIGZsYWdzKTsKKwogCXZhbHVlID0gV0lORE9XX0FfU0VMRUNUIDw8IHAtPmluZGV4OwogCXRlZ3JhX2RjX3dyaXRlbChkYywgdmFsdWUsIERDX0NNRF9ESVNQTEFZX1dJTkRPV19IRUFERVIpOwogCkBAIC0zNTIsNiArMzYwLDggQEAKIAogCXRlZ3JhX2RjX3dpbmRvd19jb21taXQoZGMsIHAtPmluZGV4KTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRjLT5sb2NrLCBmbGFncyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjk5LDE0ICs3MDksMTYgQEAKIAlzdHJ1Y3QgdGVncmFfYm8gKmJvID0gdGVncmFfZmJfZ2V0X3BsYW5lKGZiLCAwKTsKIAl1bnNpZ25lZCBpbnQgaF9vZmZzZXQgPSAwLCB2X29mZnNldCA9IDA7CiAJc3RydWN0IHRlZ3JhX2JvX3RpbGluZyB0aWxpbmc7CisJdW5zaWduZWQgbG9uZyB2YWx1ZSwgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGZvcm1hdCwgc3dhcDsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCBlcnI7CiAKIAllcnIgPSB0ZWdyYV9mYl9nZXRfdGlsaW5nKGZiLCAmdGlsaW5nKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZkYy0+bG9jaywgZmxhZ3MpOworCiAJdGVncmFfZGNfd3JpdGVsKGRjLCBXSU5ET1dfQV9TRUxFQ1QsIERDX0NNRF9ESVNQTEFZX1dJTkRPV19IRUFERVIpOwogCiAJdmFsdWUgPSBmYi0+b2Zmc2V0c1swXSArIHkgKiBmYi0+cGl0Y2hlc1swXSArCkBAIC03NTIsNiArNzY0LDcgQEAKIAogCQljYXNlIFRFR1JBX0JPX1RJTElOR19NT0RFX0JMT0NLOgogCQkJRFJNX0VSUk9SKCJoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgYmxvY2sgbGluZWFyIG1vZGVcbiIpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGMtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTc3OCw2ICs3OTEsOCBAQAogCXRlZ3JhX2RjX3dyaXRlbChkYywgdmFsdWUgPDwgOCwgRENfQ01EX1NUQVRFX0NPTlRST0wpOwogCXRlZ3JhX2RjX3dyaXRlbChkYywgdmFsdWUsIERDX0NNRF9TVEFURV9DT05UUk9MKTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRjLT5sb2NrLCBmbGFncyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODE0LDIzICs4MjksMzIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBiYXNlOwogCXN0cnVjdCB0ZWdyYV9ibyAqYm87CiAKLQlpZiAoIWRjLT5ldmVudCkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHJtLT5ldmVudF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWRjLT5ldmVudCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOworCX0KIAogCWJvID0gdGVncmFfZmJfZ2V0X3BsYW5lKGNydGMtPnByaW1hcnktPmZiLCAwKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZkYy0+bG9jaywgZmxhZ3MpOworCiAJLyogY2hlY2sgaWYgbmV3IHN0YXJ0IGFkZHJlc3MgaGFzIGJlZW4gbGF0Y2hlZCAqLworCXRlZ3JhX2RjX3dyaXRlbChkYywgV0lORE9XX0FfU0VMRUNULCBEQ19DTURfRElTUExBWV9XSU5ET1dfSEVBREVSKTsKIAl0ZWdyYV9kY193cml0ZWwoZGMsIFJFQURfTVVYLCBEQ19DTURfU1RBVEVfQUNDRVNTKTsKIAliYXNlID0gdGVncmFfZGNfcmVhZGwoZGMsIERDX1dJTkJVRl9TVEFSVF9BRERSKTsKIAl0ZWdyYV9kY193cml0ZWwoZGMsIDAsIERDX0NNRF9TVEFURV9BQ0NFU1MpOwogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGMtPmxvY2ssIGZsYWdzKTsKKwogCWlmIChiYXNlID09IGJvLT5wYWRkciArIGNydGMtPnByaW1hcnktPmZiLT5vZmZzZXRzWzBdKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKLQkJZHJtX3NlbmRfdmJsYW5rX2V2ZW50KGRybSwgZGMtPnBpcGUsIGRjLT5ldmVudCk7Ci0JCWRybV92YmxhbmtfcHV0KGRybSwgZGMtPnBpcGUpOworCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBkYy0+ZXZlbnQpOworCQlkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOwogCQlkYy0+ZXZlbnQgPSBOVUxMOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCB0ZWdyYV9kY19jYW5jZWxfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlKQpAQCAtODQzLDcgKzg2Nyw3IEBACiAKIAlpZiAoZGMtPmV2ZW50ICYmIGRjLT5ldmVudC0+YmFzZS5maWxlX3ByaXYgPT0gZmlsZSkgewogCQlkYy0+ZXZlbnQtPmJhc2UuZGVzdHJveSgmZGMtPmV2ZW50LT5iYXNlKTsKLQkJZHJtX3ZibGFua19wdXQoZHJtLCBkYy0+cGlwZSk7CisJCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CiAJCWRjLT5ldmVudCA9IE5VTEw7CiAJfQogCkBAIC04NTMsMTYgKzg3NywxNiBAQAogc3RhdGljIGludCB0ZWdyYV9kY19wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJCSAgICAgIHN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50LCB1aW50MzJfdCBwYWdlX2ZsaXBfZmxhZ3MpCiB7CisJdW5zaWduZWQgaW50IHBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsKIAlzdHJ1Y3QgdGVncmFfZGMgKmRjID0gdG9fdGVncmFfZGMoY3J0Yyk7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGNydGMtPmRldjsKIAogCWlmIChkYy0+ZXZlbnQpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoZXZlbnQpIHsKLQkJZXZlbnQtPnBpcGUgPSBkYy0+cGlwZTsKKwkJZXZlbnQtPnBpcGUgPSBwaXBlOwogCQlkYy0+ZXZlbnQgPSBldmVudDsKLQkJZHJtX3ZibGFua19nZXQoZHJtLCBkYy0+cGlwZSk7CisJCWRybV9jcnRjX3ZibGFua19nZXQoY3J0Yyk7CiAJfQogCiAJdGVncmFfZGNfc2V0X2Jhc2UoZGMsIDAsIDAsIGZiKTsKQEAgLTExMjcsNyArMTE1MSw3IEBACiAJCS8qCiAJCWRldl9kYmcoZGMtPmRldiwgIiVzKCk6IHZlcnRpY2FsIGJsYW5rXG4iLCBfX2Z1bmNfXyk7CiAJCSovCi0JCWRybV9oYW5kbGVfdmJsYW5rKGRjLT5iYXNlLmRldiwgZGMtPnBpcGUpOworCQlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZkYy0+YmFzZSk7CiAJCXRlZ3JhX2RjX2ZpbmlzaF9wYWdlX2ZsaXAoZGMpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5jCmluZGV4IGU1NDlhZmUuLmQ0ZjgyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmMKQEAgLTY5NCwyNCArNjk0LDI4IEBACiAJLmxsc2VlayA9IG5vb3BfbGxzZWVrLAogfTsKIAotc3RhdGljIHN0cnVjdCBkcm1fY3J0YyAqdGVncmFfY3J0Y19mcm9tX3BpcGUoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IHBpcGUpCitzdGF0aWMgc3RydWN0IGRybV9jcnRjICp0ZWdyYV9jcnRjX2Zyb21fcGlwZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBwaXBlKQogewogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRybS0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCXN0cnVjdCB0ZWdyYV9kYyAqZGMgPSB0b190ZWdyYV9kYyhjcnRjKTsKLQotCQlpZiAoZGMtPnBpcGUgPT0gcGlwZSkKKwkJaWYgKHBpcGUgPT0gZHJtX2NydGNfaW5kZXgoY3J0YykpCiAJCQlyZXR1cm4gY3J0YzsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHUzMiB0ZWdyYV9kcm1fZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQorc3RhdGljIHUzMiB0ZWdyYV9kcm1fZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBwaXBlKQogeworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHRlZ3JhX2NydGNfZnJvbV9waXBlKGRybSwgcGlwZSk7CisKKwlpZiAoIWNydGMpCisJCXJldHVybiAwOworCiAJLyogVE9ETzogaW1wbGVtZW50IHJlYWwgaGFyZHdhcmUgY291bnRlciB1c2luZyBzeW5jcG9pbnRzICovCi0JcmV0dXJuIGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKTsKKwlyZXR1cm4gZHJtX2NydGNfdmJsYW5rX2NvdW50KGNydGMpOwogfQogCiBzdGF0aWMgaW50IHRlZ3JhX2RybV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBwaXBlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jCmluZGV4IGRhMzIwODYuLjg3NzdiN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMKQEAgLTIxNiwzMiArMjE2LDU4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHRlZ3JhX2JvX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgdGVncmFfYm8gKmJvLAotCQkJICAgICAgc2l6ZV90IHNpemUpCitzdGF0aWMgaW50IHRlZ3JhX2JvX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgdGVncmFfYm8gKmJvKQogeworCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKwl1bnNpZ25lZCBpbnQgaTsKKwogCWJvLT5wYWdlcyA9IGRybV9nZW1fZ2V0X3BhZ2VzKCZiby0+Z2VtKTsKIAlpZiAoSVNfRVJSKGJvLT5wYWdlcykpCiAJCXJldHVybiBQVFJfRVJSKGJvLT5wYWdlcyk7CiAKLQliby0+bnVtX3BhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOworCWJvLT5udW1fcGFnZXMgPSBiby0+Z2VtLnNpemUgPj4gUEFHRV9TSElGVDsKIAotCWJvLT5zZ3QgPSBkcm1fcHJpbWVfcGFnZXNfdG9fc2coYm8tPnBhZ2VzLCBiby0+bnVtX3BhZ2VzKTsKLQlpZiAoSVNfRVJSKGJvLT5zZ3QpKSB7Ci0JCWRybV9nZW1fcHV0X3BhZ2VzKCZiby0+Z2VtLCBiby0+cGFnZXMsIGZhbHNlLCBmYWxzZSk7Ci0JCXJldHVybiBQVFJfRVJSKGJvLT5zZ3QpOworCXNndCA9IGRybV9wcmltZV9wYWdlc190b19zZyhiby0+cGFnZXMsIGJvLT5udW1fcGFnZXMpOworCWlmIChJU19FUlIoc2d0KSkKKwkJZ290byBwdXRfcGFnZXM7CisKKwkvKgorCSAqIEZha2UgdXAgdGhlIFNHIHRhYmxlIHNvIHRoYXQgZG1hX21hcF9zZygpIGNhbiBiZSB1c2VkIHRvIGZsdXNoIHRoZQorCSAqIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCBpdC4gTm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQKKwkgKiB0aGUgRE1BIEFQSSBkb2Vzbid0IGhvb2sgaW50byBJT01NVSBvbiBUZWdyYSwgdGhlcmVmb3JlIG1hcHBpbmcgaXMKKwkgKiBvbmx5IGNhY2hlIG1haW50ZW5hbmNlLgorCSAqCisJICogVE9ETzogUmVwbGFjZSB0aGlzIGJ5IGRybV9jbGZsYXNoX3NnKCkgb25jZSBpdCBjYW4gYmUgaW1wbGVtZW50ZWQKKwkgKiB3aXRob3V0IHJlbHlpbmcgb24gc3ltYm9scyB0aGF0IGFyZSBub3QgZXhwb3J0ZWQuCisJICovCisJZm9yX2VhY2hfc2coc2d0LT5zZ2wsIHMsIHNndC0+bmVudHMsIGkpCisJCXNnX2RtYV9hZGRyZXNzKHMpID0gc2dfcGh5cyhzKTsKKworCWlmIChkbWFfbWFwX3NnKGRybS0+ZGV2LCBzZ3QtPnNnbCwgc2d0LT5uZW50cywgRE1BX1RPX0RFVklDRSkgPT0gMCkgeworCQlzZ3QgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIHJlbGVhc2Vfc2d0OwogCX0KIAorCWJvLT5zZ3QgPSBzZ3Q7CisKIAlyZXR1cm4gMDsKKworcmVsZWFzZV9zZ3Q6CisJc2dfZnJlZV90YWJsZShzZ3QpOworCWtmcmVlKHNndCk7CitwdXRfcGFnZXM6CisJZHJtX2dlbV9wdXRfcGFnZXMoJmJvLT5nZW0sIGJvLT5wYWdlcywgZmFsc2UsIGZhbHNlKTsKKwlyZXR1cm4gUFRSX0VSUihzZ3QpOwogfQogCi1zdGF0aWMgaW50IHRlZ3JhX2JvX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCB0ZWdyYV9ibyAqYm8sCi0JCQkgIHNpemVfdCBzaXplKQorc3RhdGljIGludCB0ZWdyYV9ib19hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgdGVncmFfYm8gKmJvKQogewogCXN0cnVjdCB0ZWdyYV9kcm0gKnRlZ3JhID0gZHJtLT5kZXZfcHJpdmF0ZTsKIAlpbnQgZXJyOwogCiAJaWYgKHRlZ3JhLT5kb21haW4pIHsKLQkJZXJyID0gdGVncmFfYm9fZ2V0X3BhZ2VzKGRybSwgYm8sIHNpemUpOworCQllcnIgPSB0ZWdyYV9ib19nZXRfcGFnZXMoZHJtLCBibyk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIApAQCAtMjUxLDYgKzI3Nyw4IEBACiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfSBlbHNlIHsKKwkJc2l6ZV90IHNpemUgPSBiby0+Z2VtLnNpemU7CisKIAkJYm8tPnZhZGRyID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZShkcm0tPmRldiwgc2l6ZSwgJmJvLT5wYWRkciwKIAkJCQkJCSAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwogCQlpZiAoIWJvLT52YWRkcikgewpAQCAtMjc0LDcgKzMwMiw3IEBACiAJaWYgKElTX0VSUihibykpCiAJCXJldHVybiBibzsKIAotCWVyciA9IHRlZ3JhX2JvX2FsbG9jKGRybSwgYm8sIHNpemUpOworCWVyciA9IHRlZ3JhX2JvX2FsbG9jKGRybSwgYm8pOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIHJlbGVhc2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKaW5kZXggN2I1ZDIyMS4uNmM2YjY1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKQEAgLTQwNiwxMSArNDA2LDkgQEAKIAkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJCS0tZGV2X3ByaXYtPm51bV8zZF9yZXNvdXJjZXM7CiAJfSBlbHNlIGlmICh1bmhpZGVfc3ZnYSkgewotCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0VOQUJMRSwKIAkJCSAgdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0VOQUJMRSkgJgogCQkJICB+U1ZHQV9SRUdfRU5BQkxFX0hJREUpOwotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cmVsZWFzZV9tdXRleCk7CkBAIC00MzMsMTMgKzQzMSwxMCBAQAogCW11dGV4X2xvY2soJmRldl9wcml2LT5yZWxlYXNlX211dGV4KTsKIAlpZiAodW5saWtlbHkoLS1kZXZfcHJpdi0+bnVtXzNkX3Jlc291cmNlcyA9PSAwKSkKIAkJdm13X3JlbGVhc2VfZGV2aWNlKGRldl9wcml2KTsKLQllbHNlIGlmIChoaWRlX3N2Z2EpIHsKLQkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwllbHNlIGlmIChoaWRlX3N2Z2EpCiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfRU5BQkxFLAogCQkJICB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfRU5BQkxFKSB8CiAJCQkgIFNWR0FfUkVHX0VOQUJMRV9ISURFKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwotCX0KIAogCW4zZCA9IChpbnQzMl90KSBkZXZfcHJpdi0+bnVtXzNkX3Jlc291cmNlczsKIAltdXRleF91bmxvY2soJmRldl9wcml2LT5yZWxlYXNlX211dGV4KTsKQEAgLTYwMCwxMiArNTk1LDE0IEBACiAJZGV2X3ByaXYtPmRldiA9IGRldjsKIAlkZXZfcHJpdi0+dm13X2NoaXBzZXQgPSBjaGlwc2V0OwogCWRldl9wcml2LT5sYXN0X3JlYWRfc2Vxbm8gPSAodWludDMyX3QpIC0xMDA7Ci0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmh3X211dGV4KTsKIAltdXRleF9pbml0KCZkZXZfcHJpdi0+Y21kYnVmX211dGV4KTsKIAltdXRleF9pbml0KCZkZXZfcHJpdi0+cmVsZWFzZV9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOwogCXJ3bG9ja19pbml0KCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7CiAJdHRtX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnJlc2VydmF0aW9uX3NlbSk7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5od19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPndhaXRlcl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPmNhcF9sb2NrKTsKIAogCWZvciAoaSA9IHZtd19yZXNfY29udGV4dDsgaSA8IHZtd19yZXNfbWF4OyArK2kpIHsKIAkJaWRyX2luaXQoJmRldl9wcml2LT5yZXNfaWRyW2ldKTsKQEAgLTYyNiwxNCArNjIzLDExIEBACiAKIAlkZXZfcHJpdi0+ZW5hYmxlX2ZiID0gZW5hYmxlX2ZiZGV2OwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKLQogCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfSUQsIFNWR0FfSURfMik7CiAJc3ZnYV9pZCA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19JRCk7CiAJaWYgKHN2Z2FfaWQgIT0gU1ZHQV9JRF8yKSB7CiAJCXJldCA9IC1FTk9TWVM7CiAJCURSTV9FUlJPUigiVW5zdXBwb3J0ZWQgU1ZHQSBJRCAweCV4XG4iLCBzdmdhX2lkKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCQlnb3RvIG91dF9lcnIwOwogCX0KIApAQCAtNjgzLDEwICs2NzcsOCBAQAogCQlkZXZfcHJpdi0+cHJpbV9iYl9tZW0gPSBkZXZfcHJpdi0+dnJhbV9zaXplOwogCiAJcmV0ID0gdm13X2RtYV9tYXNrcyhkZXZfcHJpdik7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfZXJyMDsKLQl9CiAKIAkvKgogCSAqIExpbWl0IGJhY2sgYnVmZmVyIHNpemUgdG8gVlJBTSBzaXplLiAgUmVtb3ZlIHRoaXMgb25jZQpAQCAtNjk1LDggKzY4Nyw2IEBACiAJaWYgKGRldl9wcml2LT5wcmltX2JiX21lbSA+IGRldl9wcml2LT52cmFtX3NpemUpCiAJCWRldl9wcml2LT5wcmltX2JiX21lbSA9IGRldl9wcml2LT52cmFtX3NpemU7CiAKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7Ci0KIAl2bXdfcHJpbnRfY2FwYWJpbGl0aWVzKGRldl9wcml2LT5jYXBhYmlsaXRpZXMpOwogCiAJaWYgKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9HTVIyKSB7CkBAIC0xMTYwLDkgKzExNTAsNyBAQAogCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQkJcmV0dXJuIHJldDsKIAkJdm13X2ttc19zYXZlX3ZnYShkZXZfcHJpdik7Ci0JCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfVFJBQ0VTLCAwKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCX0KIAogCWlmIChhY3RpdmUpIHsKQEAgLTExOTYsOSArMTE4NCw3IEBACiAJaWYgKCFkZXZfcHJpdi0+ZW5hYmxlX2ZiKSB7CiAJCXZtd19rbXNfcmVzdG9yZV92Z2EoZGV2X3ByaXYpOwogCQl2bXdfM2RfcmVzb3VyY2VfZGVjKGRldl9wcml2LCB0cnVlKTsKLQkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19UUkFDRVMsIDEpOwotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xMjMzLDkgKzEyMTksNyBAQAogCQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gY2xlYW4gVlJBTSBvbiBtYXN0ZXIgZHJvcC5cbiIpOwogCQl2bXdfa21zX3Jlc3RvcmVfdmdhKGRldl9wcml2KTsKIAkJdm13XzNkX3Jlc291cmNlX2RlYyhkZXZfcHJpdiwgdHJ1ZSk7Ci0JCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfVFJBQ0VTLCAxKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCX0KIAogCWRldl9wcml2LT5hY3RpdmVfbWFzdGVyID0gJmRldl9wcml2LT5mYmRldl9tYXN0ZXI7CkBAIC0xMzY3LDEwICsxMzUxLDggQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdihkZXYpOwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lELCBTVkdBX0lEXzIpOwogCSh2b2lkKSB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfSUQpOwotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAogCS8qKgogCSAqIFJlY2xhaW0gM2QgcmVmZXJlbmNlIGhlbGQgYnkgZmJkZXYgYW5kIHBvdGVudGlhbGx5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCmluZGV4IDRlZTc5OWIuLmQyNmE2ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCkBAIC0zOTksNyArMzk5LDggQEAKIAl1aW50MzJfdCBtZW1vcnlfc2l6ZTsKIAlib29sIGhhc19nbXI7CiAJYm9vbCBoYXNfbW9iOwotCXN0cnVjdCBtdXRleCBod19tdXRleDsKKwlzcGlubG9ja190IGh3X2xvY2s7CisJc3BpbmxvY2tfdCBjYXBfbG9jazsKIAogCS8qCiAJICogVkdBIHJlZ2lzdGVycy4KQEAgLTQ0OSw4ICs0NTAsOSBAQAogCWF0b21pY190IG1hcmtlcl9zZXE7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgZmVuY2VfcXVldWU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgZmlmb19xdWV1ZTsKLQlpbnQgZmVuY2VfcXVldWVfd2FpdGVyczsgLyogUHJvdGVjdGVkIGJ5IGh3X211dGV4ICovCi0JaW50IGdvYWxfcXVldWVfd2FpdGVyczsgLyogUHJvdGVjdGVkIGJ5IGh3X211dGV4ICovCisJc3BpbmxvY2tfdCB3YWl0ZXJfbG9jazsKKwlpbnQgZmVuY2VfcXVldWVfd2FpdGVyczsgLyogUHJvdGVjdGVkIGJ5IHdhaXRlcl9sb2NrICovCisJaW50IGdvYWxfcXVldWVfd2FpdGVyczsgLyogUHJvdGVjdGVkIGJ5IHdhaXRlcl9sb2NrICovCiAJYXRvbWljX3QgZmlmb19xdWV1ZV93YWl0ZXJzOwogCXVpbnQzMl90IGxhc3RfcmVhZF9zZXFubzsKIAlzcGlubG9ja190IGlycV9sb2NrOwpAQCAtNTUzLDIwICs1NTUsMzUgQEAKIAlyZXR1cm4gKHN0cnVjdCB2bXdfbWFzdGVyICopIG1hc3Rlci0+ZHJpdmVyX3ByaXY7CiB9CiAKKy8qCisgKiBUaGUgbG9ja2luZyBoZXJlIGlzIGZpbmUtZ3JhaW5lZCwgc28gdGhhdCBpdCBpcyBwZXJmb3JtZWQgb25jZQorICogZm9yIGV2ZXJ5IHJlYWQtIGFuZCB3cml0ZSBvcGVyYXRpb24uIFRoaXMgaXMgb2YgY291cnNlIGNvc3RseSwgYnV0IHdlCisgKiBkb24ndCBwZXJmb3JtIG11Y2ggcmVnaXN0ZXIgYWNjZXNzIGluIHRoZSB0aW1pbmcgY3JpdGljYWwgcGF0aHMgYW55d2F5LgorICogSW5zdGVhZCB3ZSBoYXZlIHRoZSBleHRyYSBiZW5lZml0IG9mIGJlaW5nIHN1cmUgdGhhdCB3ZSBkb24ndCBmb3JnZXQKKyAqIHRoZSBodyBsb2NrIGFyb3VuZCByZWdpc3RlciBhY2Nlc3Nlcy4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkIHZtd193cml0ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSkKIHsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aHdfbG9jaywgaXJxX2ZsYWdzKTsKIAlvdXRsKG9mZnNldCwgZGV2X3ByaXYtPmlvX3N0YXJ0ICsgVk1XR0ZYX0lOREVYX1BPUlQpOwogCW91dGwodmFsdWUsIGRldl9wcml2LT5pb19zdGFydCArIFZNV0dGWF9WQUxVRV9QT1JUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aHdfbG9jaywgaXJxX2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSB1aW50MzJfdCB2bXdfcmVhZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCXVuc2lnbmVkIGludCBvZmZzZXQpCiB7Ci0JdWludDMyX3QgdmFsOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXUzMiB2YWw7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmh3X2xvY2ssIGlycV9mbGFncyk7CiAJb3V0bChvZmZzZXQsIGRldl9wcml2LT5pb19zdGFydCArIFZNV0dGWF9JTkRFWF9QT1JUKTsKIAl2YWwgPSBpbmwoZGV2X3ByaXYtPmlvX3N0YXJ0ICsgVk1XR0ZYX1ZBTFVFX1BPUlQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5od19sb2NrLCBpcnFfZmxhZ3MpOworCiAJcmV0dXJuIHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZlbmNlLmMKaW5kZXggYjc1OTRjYi4uOTQ1ZjFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmVuY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mZW5jZS5jCkBAIC0zNSw3ICszNSw3IEBACiAJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdjsKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBmZW5jZV9saXN0OwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrLCBwaW5nX3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJdTMyIHVzZXJfZmVuY2Vfc2l6ZTsKIAl1MzIgZmVuY2Vfc2l6ZTsKIAl1MzIgZXZlbnRfZmVuY2VfYWN0aW9uX3NpemU7CkBAIC0xMzQsMTQgKzEzNCw2IEBACiAJcmV0dXJuICJzdmdhIjsKIH0KIAotc3RhdGljIHZvaWQgdm13X2ZlbmNlX3BpbmdfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHZtd19mZW5jZV9tYW5hZ2VyICpmbWFuID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2bXdfZmVuY2VfbWFuYWdlciwgcGluZ193b3JrKTsKLQotCXZtd19maWZvX3BpbmdfaG9zdChmbWFuLT5kZXZfcHJpdiwgU1ZHQV9TWU5DX0dFTkVSSUMpOwotfQotCiBzdGF0aWMgYm9vbCB2bXdfZmVuY2VfZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZmVuY2UgKmYpCiB7CiAJc3RydWN0IHZtd19mZW5jZV9vYmogKmZlbmNlID0KQEAgLTE1NSwxMSArMTQ3LDcgQEAKIAlpZiAoc2Vxbm8gLSBmZW5jZS0+YmFzZS5zZXFubyA8IFZNV19GRU5DRV9XUkFQKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAobXV0ZXhfdHJ5bG9jaygmZGV2X3ByaXYtPmh3X211dGV4KSkgewotCQl2bXdfZmlmb19waW5nX2hvc3RfbG9ja2VkKGRldl9wcml2LCBTVkdBX1NZTkNfR0VORVJJQyk7Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKLQl9IGVsc2UKLQkJc2NoZWR1bGVfd29yaygmZm1hbi0+cGluZ193b3JrKTsKKwl2bXdfZmlmb19waW5nX2hvc3QoZGV2X3ByaXYsIFNWR0FfU1lOQ19HRU5FUklDKTsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtMzA1LDcgKzI5Myw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJmZtYW4tPmZlbmNlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZmbWFuLT5jbGVhbnVwX2xpc3QpOwogCUlOSVRfV09SSygmZm1hbi0+d29yaywgJnZtd19mZW5jZV93b3JrX2Z1bmMpOwotCUlOSVRfV09SSygmZm1hbi0+cGluZ193b3JrLCAmdm13X2ZlbmNlX3BpbmdfZnVuYyk7CiAJZm1hbi0+Zmlmb19kb3duID0gdHJ1ZTsKIAlmbWFuLT51c2VyX2ZlbmNlX3NpemUgPSB0dG1fcm91bmRfcG90KHNpemVvZihzdHJ1Y3Qgdm13X3VzZXJfZmVuY2UpKTsKIAlmbWFuLT5mZW5jZV9zaXplID0gdHRtX3JvdW5kX3BvdChzaXplb2Yoc3RydWN0IHZtd19mZW5jZV9vYmopKTsKQEAgLTMyMyw3ICszMTAsNiBAQAogCWJvb2wgbGlzdHNfZW1wdHk7CiAKIAkodm9pZCkgY2FuY2VsX3dvcmtfc3luYygmZm1hbi0+d29yayk7Ci0JKHZvaWQpIGNhbmNlbF93b3JrX3N5bmMoJmZtYW4tPnBpbmdfd29yayk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZm1hbi0+bG9jaywgaXJxX2ZsYWdzKTsKIAlsaXN0c19lbXB0eSA9IGxpc3RfZW1wdHkoJmZtYW4tPmZlbmNlX2xpc3QpICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKaW5kZXggMDllMTBhZS4uMzlmMmIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYwpAQCAtNDQsMTAgKzQ0LDEwIEBACiAJCWlmICghZGV2X3ByaXYtPmhhc19tb2IpCiAJCQlyZXR1cm4gZmFsc2U7CiAKLQkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+Y2FwX2xvY2spOwogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0RFVl9DQVAsIFNWR0EzRF9ERVZDQVBfM0QpOwogCQlyZXN1bHQgPSB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfREVWX0NBUCk7Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwkJc3Bpbl91bmxvY2soJmRldl9wcml2LT5jYXBfbG9jayk7CiAKIAkJcmV0dXJuIChyZXN1bHQgIT0gMCk7CiAJfQpAQCAtMTIwLDcgKzEyMCw2IEBACiAJRFJNX0lORk8oImhlaWdodCAlZFxuIiwgdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0hFSUdIVCkpOwogCURSTV9JTkZPKCJicHAgJWRcbiIsIHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19CSVRTX1BFUl9QSVhFTCkpOwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAlkZXZfcHJpdi0+ZW5hYmxlX3N0YXRlID0gdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0VOQUJMRSk7CiAJZGV2X3ByaXYtPmNvbmZpZ19kb25lX3N0YXRlID0gdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0NPTkZJR19ET05FKTsKIAlkZXZfcHJpdi0+dHJhY2VzX3N0YXRlID0gdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX1RSQUNFUyk7CkBAIC0xNDMsNyArMTQyLDYgQEAKIAltYigpOwogCiAJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19DT05GSUdfRE9ORSwgMSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCiAJbWF4ID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fTUFYKTsKIAltaW4gPSBpb3JlYWQzMihmaWZvX21lbSAgKyBTVkdBX0ZJRk9fTUlOKTsKQEAgLTE2MCwzMSArMTU4LDI4IEBACiAJcmV0dXJuIHZtd19maWZvX3NlbmRfZmVuY2UoZGV2X3ByaXYsICZkdW1teSk7CiB9CiAKLXZvaWQgdm13X2ZpZm9fcGluZ19ob3N0X2xvY2tlZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCByZWFzb24pCit2b2lkIHZtd19maWZvX3BpbmdfaG9zdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCByZWFzb24pCiB7CiAJX19sZTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBpbmdfbG9jayk7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKKwkvKgorCSAqIFRoZSBwaW5nX2xvY2sgaXMgbmVlZGVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbiBhdG9taWMKKwkgKiB0ZXN0LWFuZC1zZXQgb2YgdGhlIFNWR0FfRklGT19CVVNZIHJlZ2lzdGVyLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5nX2xvY2ssIGlycV9mbGFncyk7CiAJaWYgKHVubGlrZWx5KGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX0JVU1kpID09IDApKSB7CiAJCWlvd3JpdGUzMigxLCBmaWZvX21lbSArIFNWR0FfRklGT19CVVNZKTsKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19TWU5DLCByZWFzb24pOwogCX0KLX0KLQotdm9pZCB2bXdfZmlmb19waW5nX2hvc3Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgcmVhc29uKQotewotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7Ci0KLQl2bXdfZmlmb19waW5nX2hvc3RfbG9ja2VkKGRldl9wcml2LCByZWFzb24pOwotCi0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpbmdfbG9jaywgaXJxX2ZsYWdzKTsKIH0KIAogdm9pZCB2bXdfZmlmb19yZWxlYXNlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCB2bXdfZmlmb19zdGF0ZSAqZmlmbykKIHsKIAlfX2xlMzIgX19pb21lbSAqZmlmb19tZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKLQogCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfU1lOQywgU1ZHQV9TWU5DX0dFTkVSSUMpOwogCXdoaWxlICh2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfQlVTWSkgIT0gMCkKIAkJOwpAQCAtMTk4LDcgKzE5Myw2IEBACiAJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19UUkFDRVMsCiAJCSAgZGV2X3ByaXYtPnRyYWNlc19zdGF0ZSk7CiAKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJdm13X21hcmtlcl9xdWV1ZV90YWtlZG93bigmZmlmby0+bWFya2VyX3F1ZXVlKTsKIAogCWlmIChsaWtlbHkoZmlmby0+c3RhdGljX2J1ZmZlciAhPSBOVUxMKSkgewpAQCAtMjcxLDcgKzI2NSw3IEBACiAJCXJldHVybiB2bXdfZmlmb193YWl0X25vaXJxKGRldl9wcml2LCBieXRlcywKIAkJCQkJICAgaW50ZXJydXB0aWJsZSwgdGltZW91dCk7CiAKLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fbG9jaygmZGV2X3ByaXYtPndhaXRlcl9sb2NrKTsKIAlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwgJmRldl9wcml2LT5maWZvX3F1ZXVlX3dhaXRlcnMpID4gMCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOwogCQlvdXRsKFNWR0FfSVJRRkxBR19GSUZPX1BST0dSRVNTLApAQCAtMjgwLDcgKzI3NCw3IEBACiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfSVJRTUFTSywgZGV2X3ByaXYtPmlycV9tYXNrKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOwogCX0KLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiAKIAlpZiAoaW50ZXJydXB0aWJsZSkKIAkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQKQEAgLTI5NiwxNCArMjkwLDE0IEBACiAJZWxzZSBpZiAobGlrZWx5KHJldCA+IDApKQogCQlyZXQgPSAwOwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX2xvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldl9wcml2LT5maWZvX3F1ZXVlX3dhaXRlcnMpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycV9mbGFncyk7CiAJCWRldl9wcml2LT5pcnFfbWFzayAmPSB+U1ZHQV9JUlFGTEFHX0ZJRk9fUFJPR1JFU1M7CiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfSVJRTUFTSywgZGV2X3ByaXYtPmlycV9tYXNrKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOwogCX0KLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaW9jdGwuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMKaW5kZXggMzc4ODFlYy4uNjljOGNlMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaW9jdGwuYwpAQCAtMTM1LDEzICsxMzUsMTMgQEAKIAkJKHBhaXJfb2Zmc2V0ICsgbWF4X3NpemUgKiBzaXplb2YoU1ZHQTNkQ2FwUGFpcikpIC8gc2l6ZW9mKHUzMik7CiAJY29tcGF0X2NhcC0+aGVhZGVyLnR5cGUgPSBTVkdBM0RDQVBTX1JFQ09SRF9ERVZDQVBTOwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX2xvY2soJmRldl9wcml2LT5jYXBfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IG1heF9zaXplOyArK2kpIHsKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19ERVZfQ0FQLCBpKTsKIAkJY29tcGF0X2NhcC0+cGFpcnNbaV1bMF0gPSBpOwogCQljb21wYXRfY2FwLT5wYWlyc1tpXVsxXSA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19ERVZfQ0FQKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+Y2FwX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTEsMTIgKzE5MSwxMiBAQAogCQlpZiAobnVtID4gU1ZHQTNEX0RFVkNBUF9NQVgpCiAJCQludW0gPSBTVkdBM0RfREVWQ0FQX01BWDsKIAotCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCQlzcGluX2xvY2soJmRldl9wcml2LT5jYXBfbG9jayk7CiAJCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgewogCQkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19ERVZfQ0FQLCBpKTsKIAkJCSpib3VuY2UzMisrID0gdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0RFVl9DQVApOwogCQl9Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwkJc3Bpbl91bmxvY2soJmRldl9wcml2LT5jYXBfbG9jayk7CiAJfSBlbHNlIGlmIChnYl9vYmplY3RzKSB7CiAJCXJldCA9IHZtd19maWxsX2NvbXBhdF9jYXAoZGV2X3ByaXYsIGJvdW5jZSwgc2l6ZSk7CiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCmluZGV4IDBjNDIzNzYuLjlmZTk4MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCkBAIC02MiwxMyArNjIsOCBAQAogCiBzdGF0aWMgYm9vbCB2bXdfZmlmb19pZGxlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IHNlcW5vKQogewotCXVpbnQzMl90IGJ1c3k7CiAKLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwotCWJ1c3kgPSB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfQlVTWSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwotCi0JcmV0dXJuIChidXN5ID09IDApOworCXJldHVybiAodm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0JVU1kpID09IDApOwogfQogCiB2b2lkIHZtd191cGRhdGVfc2Vxbm8oc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKQEAgLTE4NCw3ICsxNzksNyBAQAogCiB2b2lkIHZtd19zZXFub193YWl0ZXJfYWRkKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX2xvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiAJaWYgKGRldl9wcml2LT5mZW5jZV9xdWV1ZV93YWl0ZXJzKysgPT0gMCkgewogCQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIApAQCAtMTk1LDEyICsxOTAsMTIgQEAKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19JUlFNQVNLLCBkZXZfcHJpdi0+aXJxX21hc2spOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycV9mbGFncyk7CiAJfQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPndhaXRlcl9sb2NrKTsKIH0KIAogdm9pZCB2bXdfc2Vxbm9fd2FpdGVyX3JlbW92ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogewotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogCWlmICgtLWRldl9wcml2LT5mZW5jZV9xdWV1ZV93YWl0ZXJzID09IDApIHsKIAkJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKQEAgLTIwOSwxMyArMjA0LDEzIEBACiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfSVJRTUFTSywgZGV2X3ByaXYtPmlycV9tYXNrKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOwogCX0KLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiB9CiAKIAogdm9pZCB2bXdfZ29hbF93YWl0ZXJfYWRkKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX2xvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiAJaWYgKGRldl9wcml2LT5nb2FsX3F1ZXVlX3dhaXRlcnMrKyA9PSAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCkBAIC0yMjYsMTIgKzIyMSwxMiBAQAogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssIGRldl9wcml2LT5pcnFfbWFzayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogfQogCiB2b2lkIHZtd19nb2FsX3dhaXRlcl9yZW1vdmUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKIHsKLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fbG9jaygmZGV2X3ByaXYtPndhaXRlcl9sb2NrKTsKIAlpZiAoLS1kZXZfcHJpdi0+Z29hbF9xdWV1ZV93YWl0ZXJzID09IDApIHsKIAkJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKQEAgLTI0MCw3ICsyMzUsNyBAQAogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssIGRldl9wcml2LT5pcnFfbWFzayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogfQogCiBpbnQgdm13X3dhaXRfc2Vxbm8oc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKQEAgLTMxNSw5ICszMTAsNyBAQAogCWlmICghKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9JUlFNQVNLKSkKIAkJcmV0dXJuOwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssIDApOwotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAogCXN0YXR1cyA9IGlubChkZXZfcHJpdi0+aW9fc3RhcnQgKyBWTVdHRlhfSVJRU1RBVFVTX1BPUlQpOwogCW91dGwoc3RhdHVzLCBkZXZfcHJpdi0+aW9fc3RhcnQgKyBWTVdHRlhfSVJRU1RBVFVTX1BPUlQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYwppbmRleCAzNzI1YjUyLi44NzI1Yjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYwpAQCAtMTgyOCw5ICsxODI4LDcgQEAKIAlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgdm13X2Rpc3BsYXlfdW5pdCAqZHUgPSB2bXdfY29ubmVjdG9yX3RvX2R1KGNvbm5lY3Rvcik7CiAKLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCW51bV9kaXNwbGF5cyA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19OVU1fRElTUExBWVMpOwotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAogCXJldHVybiAoKHZtd19jb25uZWN0b3JfdG9fZHUoY29ubmVjdG9yKS0+dW5pdCA8IG51bV9kaXNwbGF5cyAmJgogCQkgZHUtPnByZWZfYWN0aXZlKSA/CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvS2NvbmZpZwppbmRleCAyMzBiNmY4Li5kZmRjMjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaGlkL0tjb25maWcKQEAgLTI3LDcgKzI3LDggQEAKIAogY29uZmlnIEhJRF9CQVRURVJZX1NUUkVOR1RICiAJYm9vbCAiQmF0dGVyeSBsZXZlbCByZXBvcnRpbmcgZm9yIEhJRCBkZXZpY2VzIgotCWRlcGVuZHMgb24gSElEICYmIFBPV0VSX1NVUFBMWSAmJiBISUQgPSBQT1dFUl9TVVBQTFkKKwlkZXBlbmRzIG9uIEhJRAorCXNlbGVjdCBQT1dFUl9TVVBQTFkKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IG9mIHJlcG9ydGluZyBiYXR0ZXJ5IHN0cmVuZ3RoIChmb3IgSElEIGRldmljZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IGMzZDBhYzEuLjhiNjM4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMTgwNSw2ICsxODA1LDcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS1lFLCBVU0JfREVWSUNFX0lEX0tZRV9FUkdPXzUyNVYpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfRUFTWVBFTl9JNDA1WCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS1lFLCBVU0JfREVWSUNFX0lEX0tZRV9NT1VTRVBFTl9JNjA4WCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS1lFLCBVU0JfREVWSUNFX0lEX0tZRV9NT1VTRVBFTl9JNjA4WF8yKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LWUUsIFVTQl9ERVZJQ0VfSURfS1lFX0VBU1lQRU5fTTYxMFgpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xBQlRFQywgVVNCX0RFVklDRV9JRF9MQUJURUNfV0lSRUxFU1NfS0VZQk9BUkQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xDUE9XRVIsIFVTQl9ERVZJQ0VfSURfTENQT1dFUl9MQzEwMDAgKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCmluZGV4IDc0NjBmMzQuLjkyNDMzNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAorKysgYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKQEAgLTUyNiw2ICs1MjYsNyBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9HUEVOXzU2MAkweDUwMDMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9LWUVfRUFTWVBFTl9JNDA1WAkweDUwMTAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9LWUVfTU9VU0VQRU5fSTYwOFgJMHg1MDExCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfS1lFX01PVVNFUEVOX0k2MDhYXzIJMHg1MDFhCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfS1lFX0VBU1lQRU5fTTYxMFgJMHg1MDEzCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MQUJURUMJCTB4MTAyMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwppbmRleCBlMGEwZjA2Li45NTA1NjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwpAQCAtMzEyLDYgKzMxMiw5IEBACiAJCQkgICAgICAgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAxMV9BTlNJKSwKIAkgIEhJRF9CQVRURVJZX1FVSVJLX1BFUkNFTlQgfCBISURfQkFUVEVSWV9RVUlSS19GRUFUVVJFIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLAorCQkJICAgICAgIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTXzIwMTFfSVNPKSwKKwkgIEhJRF9CQVRURVJZX1FVSVJLX1BFUkNFTlQgfCBISURfQkFUVEVSWV9RVUlSS19GRUFUVVJFIH0sCisJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLAogCQlVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19BTlNJKSwKIAkgIEhJRF9CQVRURVJZX1FVSVJLX1BFUkNFTlQgfCBISURfQkFUVEVSWV9RVUlSS19GRUFUVVJFIH0sCiAJe30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1reWUuYyBiL2RyaXZlcnMvaGlkL2hpZC1reWUuYwppbmRleCBiOTJiZjAxLi4xNThmY2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQta3llLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWt5ZS5jCkBAIC0zMjMsNiArMzIzLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFVTQl9ERVZJQ0VfSURfS1lFX01PVVNFUEVOX0k2MDhYOgorCWNhc2UgVVNCX0RFVklDRV9JRF9LWUVfTU9VU0VQRU5fSTYwOFhfMjoKIAkJaWYgKCpyc2l6ZSA9PSBNT1VTRVBFTl9JNjA4WF9SREVTQ19PUklHX1NJWkUpIHsKIAkJCXJkZXNjID0gbW91c2VwZW5faTYwOHhfcmRlc2NfZml4ZWQ7CiAJCQkqcnNpemUgPSBzaXplb2YobW91c2VwZW5faTYwOHhfcmRlc2NfZml4ZWQpOwpAQCAtNDE1LDYgKzQxNiw3IEBACiAJc3dpdGNoIChpZC0+cHJvZHVjdCkgewogCWNhc2UgVVNCX0RFVklDRV9JRF9LWUVfRUFTWVBFTl9JNDA1WDoKIAljYXNlIFVTQl9ERVZJQ0VfSURfS1lFX01PVVNFUEVOX0k2MDhYOgorCWNhc2UgVVNCX0RFVklDRV9JRF9LWUVfTU9VU0VQRU5fSTYwOFhfMjoKIAljYXNlIFVTQl9ERVZJQ0VfSURfS1lFX0VBU1lQRU5fTTYxMFg6CiAJCXJldCA9IGt5ZV90YWJsZXRfZW5hYmxlKGhkZXYpOwogCQlpZiAocmV0KSB7CkBAIC00NDYsNiArNDQ4LDggQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS1lFLAogCQkJCVVTQl9ERVZJQ0VfSURfS1lFX01PVVNFUEVOX0k2MDhYKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LWUUsCisJCQkJVVNCX0RFVklDRV9JRF9LWUVfTU9VU0VQRU5fSTYwOFhfMikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS1lFLAogCQkJCVVTQl9ERVZJQ0VfSURfS1lFX0VBU1lQRU5fTTYxMFgpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tZRSwKIAkJCQlVU0JfREVWSUNFX0lEX0dFTklVU19HSUxBX0dBTUlOR19NT1VTRSkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sb2dpdGVjaC1kai5jIGIvZHJpdmVycy9oaWQvaGlkLWxvZ2l0ZWNoLWRqLmMKaW5kZXggYzkxN2FiNi4uNWJjNmQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxvZ2l0ZWNoLWRqLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxvZ2l0ZWNoLWRqLmMKQEAgLTk2MiwxMCArOTYyLDI0IEBACiAKIAlzd2l0Y2ggKGRhdGFbMF0pIHsKIAljYXNlIFJFUE9SVF9JRF9ESl9TSE9SVDoKKwkJaWYgKHNpemUgIT0gREpSRVBPUlRfU0hPUlRfTEVOR1RIKSB7CisJCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJESiByZXBvcnQgb2YgYmFkIHNpemUgKCVkKSIsIHNpemUpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CiAJCXJldHVybiBsb2dpX2RqX2RqX2V2ZW50KGhkZXYsIHJlcG9ydCwgZGF0YSwgc2l6ZSk7CiAJY2FzZSBSRVBPUlRfSURfSElEUFBfU0hPUlQ6Ci0JCS8qIGludGVudGlvbmFsIGZhbGx0aHJvdWdoICovCisJCWlmIChzaXplICE9IEhJRFBQX1JFUE9SVF9TSE9SVF9MRU5HVEgpIHsKKwkJCWRldl9lcnIoJmhkZXYtPmRldiwKKwkJCQkiU2hvcnQgSElEKysgcmVwb3J0IG9mIGJhZCBzaXplICglZCkiLCBzaXplKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gbG9naV9kal9oaWRwcF9ldmVudChoZGV2LCByZXBvcnQsIGRhdGEsIHNpemUpOwogCWNhc2UgUkVQT1JUX0lEX0hJRFBQX0xPTkc6CisJCWlmIChzaXplICE9IEhJRFBQX1JFUE9SVF9MT05HX0xFTkdUSCkgeworCQkJZGV2X2VycigmaGRldi0+ZGV2LAorCQkJCSJMb25nIEhJRCsrIHJlcG9ydCBvZiBiYWQgc2l6ZSAoJWQpIiwgc2l6ZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KIAkJcmV0dXJuIGxvZ2lfZGpfaGlkcHBfZXZlbnQoaGRldiwgcmVwb3J0LCBkYXRhLCBzaXplKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sb2dpdGVjaC1oaWRwcC5jIGIvZHJpdmVycy9oaWQvaGlkLWxvZ2l0ZWNoLWhpZHBwLmMKaW5kZXggMmY0MjBjMC4uYTkzY2VmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxvZ2l0ZWNoLWhpZHBwLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxvZ2l0ZWNoLWhpZHBwLmMKQEAgLTI4Miw2ICsyODIsMzMgQEAKIAkJKHJlcG9ydC0+cmFwLnN1Yl9pZCA9PSAweDQxKTsKIH0KIAorLyoqCisgKiBoaWRwcF9wcmVmaXhfbmFtZSgpIHByZWZpeGVzIHRoZSBjdXJyZW50IGdpdmVuIG5hbWUgd2l0aCAiTG9naXRlY2ggIi4KKyAqLworc3RhdGljIHZvaWQgaGlkcHBfcHJlZml4X25hbWUoY2hhciAqKm5hbWUsIGludCBuYW1lX2xlbmd0aCkKK3sKKyNkZWZpbmUgUFJFRklYX0xFTkdUSCA5IC8qICJMb2dpdGVjaCAiICovCisKKwlpbnQgbmV3X2xlbmd0aDsKKwljaGFyICpuZXdfbmFtZTsKKworCWlmIChuYW1lX2xlbmd0aCA+IFBSRUZJWF9MRU5HVEggJiYKKwkgICAgc3RybmNtcCgqbmFtZSwgIkxvZ2l0ZWNoICIsIFBSRUZJWF9MRU5HVEgpID09IDApCisJCS8qIFRoZSBwcmVmaXggaGFzIGlzIGFscmVhZHkgaW4gdGhlIG5hbWUgKi8KKwkJcmV0dXJuOworCisJbmV3X2xlbmd0aCA9IFBSRUZJWF9MRU5HVEggKyBuYW1lX2xlbmd0aDsKKwluZXdfbmFtZSA9IGt6YWxsb2MobmV3X2xlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfbmFtZSkKKwkJcmV0dXJuOworCisJc25wcmludGYobmV3X25hbWUsIG5ld19sZW5ndGgsICJMb2dpdGVjaCAlcyIsICpuYW1lKTsKKworCWtmcmVlKCpuYW1lKTsKKworCSpuYW1lID0gbmV3X25hbWU7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBISURQKysgMS4wIGNvbW1hbmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTMyMSw2ICszNDgsMTAgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAltZW1jcHkobmFtZSwgJnJlc3BvbnNlLnJhcC5wYXJhbXNbMl0sIGxlbik7CisKKwkvKiBpbmNsdWRlIHRoZSB0ZXJtaW5hdGluZyAnXDAnICovCisJaGlkcHBfcHJlZml4X25hbWUoJm5hbWUsIGxlbiArIDEpOworCiAJcmV0dXJuIG5hbWU7CiB9CiAKQEAgLTQ5OCw2ICs1MjksOSBAQAogCQlpbmRleCArPSByZXQ7CiAJfQogCisJLyogaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgJ1wwJyAqLworCWhpZHBwX3ByZWZpeF9uYW1lKCZuYW1lLCBfX25hbWVfbGVuZ3RoICsgMSk7CisKIAlyZXR1cm4gbmFtZTsKIH0KIApAQCAtNzk0LDE4ICs4MjgsMjUgQEAKIAogCXN3aXRjaCAoZGF0YVswXSkgewogCWNhc2UgMHgwMjoKKwkJaWYgKHNpemUgPCAyKSB7CisJCQloaWRfZXJyKGhkZXYsICJSZWNlaXZlZCBISUQgcmVwb3J0IG9mIGJhZCBzaXplICglZCkiLAorCQkJCXNpemUpOworCQkJcmV0dXJuIDE7CisJCX0KIAkJaWYgKGhpZHBwLT5xdWlya3MgJiBISURQUF9RVUlSS19XVFBfUEhZU0lDQUxfQlVUVE9OUykgewogCQkJaW5wdXRfZXZlbnQod2QtPmlucHV0LCBFVl9LRVksIEJUTl9MRUZULAogCQkJCQkhIShkYXRhWzFdICYgMHgwMSkpOwogCQkJaW5wdXRfZXZlbnQod2QtPmlucHV0LCBFVl9LRVksIEJUTl9SSUdIVCwKIAkJCQkJISEoZGF0YVsxXSAmIDB4MDIpKTsKIAkJCWlucHV0X3N5bmMod2QtPmlucHV0KTsKKwkJCXJldHVybiAwOwogCQl9IGVsc2UgewogCQkJaWYgKHNpemUgPCAyMSkKIAkJCQlyZXR1cm4gMTsKIAkJCXJldHVybiB3dHBfbW91c2VfcmF3X3h5X2V2ZW50KGhpZHBwLCAmZGF0YVs3XSk7CiAJCX0KIAljYXNlIFJFUE9SVF9JRF9ISURQUF9MT05HOgorCQkvKiBzaXplIGlzIGFscmVhZHkgY2hlY2tlZCBpbiBoaWRwcF9yYXdfZXZlbnQuICovCiAJCWlmICgocmVwb3J0LT5mYXAuZmVhdHVyZV9pbmRleCAhPSB3ZC0+bXRfZmVhdHVyZV9pbmRleCkgfHwKIAkJICAgIChyZXBvcnQtPmZhcC5mdW5jaW5kZXhfY2xpZW50aWQgIT0gRVZFTlRfVE9VQ0hQQURfUkFXX1hZKSkKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmMgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuYwppbmRleCAxYTA3ZTA3Li40N2Q3ZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuYwpAQCAtMzUsNiArMzUsOCBAQAogc3RhdGljIHZvaWQgcHJvZmlsZV9hY3RpdmF0ZWQoc3RydWN0IHB5cmFfZGV2aWNlICpweXJhLAogCQl1bnNpZ25lZCBpbnQgbmV3X3Byb2ZpbGUpCiB7CisJaWYgKG5ld19wcm9maWxlID49IEFSUkFZX1NJWkUocHlyYS0+cHJvZmlsZV9zZXR0aW5ncykpCisJCXJldHVybjsKIAlweXJhLT5hY3R1YWxfcHJvZmlsZSA9IG5ld19wcm9maWxlOwogCXB5cmEtPmFjdHVhbF9jcGkgPSBweXJhLT5wcm9maWxlX3NldHRpbmdzW3B5cmEtPmFjdHVhbF9wcm9maWxlXS55X2NwaTsKIH0KQEAgLTI1Nyw5ICsyNTksMTEgQEAKIAlpZiAob2ZmICE9IDAgfHwgY291bnQgIT0gUFlSQV9TSVpFX1NFVFRJTkdTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJnB5cmEtPnB5cmFfbG9jayk7Ci0KIAlzZXR0aW5ncyA9IChzdHJ1Y3QgcHlyYV9zZXR0aW5ncyBjb25zdCAqKWJ1ZjsKKwlpZiAoc2V0dGluZ3MtPnN0YXJ0dXBfcHJvZmlsZSA+PSBBUlJBWV9TSVpFKHB5cmEtPnByb2ZpbGVfc2V0dGluZ3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnB5cmEtPnB5cmFfbG9jayk7CiAKIAlyZXR2YWwgPSBweXJhX3NldF9zZXR0aW5ncyh1c2JfZGV2LCBzZXR0aW5ncyk7CiAJaWYgKHJldHZhbCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLmMgYi9kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQuYwppbmRleCBkMzIwMzdjLi5kNDNlOTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQuYworKysgYi9kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQuYwpAQCAtNzA2LDEyICs3MDYsNyBAQAogCiBzdGF0aWMgdm9pZCBpMmNfaGlkX3N0b3Aoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gaGlkLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgaTJjX2hpZCAqaWhpZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCiAJaGlkLT5jbGFpbWVkID0gMDsKLQotCWkyY19oaWRfZnJlZV9idWZmZXJzKGloaWQpOwogfQogCiBzdGF0aWMgaW50IGkyY19oaWRfb3BlbihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKaW5kZXggZGM4OWJlOS4uYjI3YjNkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCkBAIC0xMjQsNiArMTI0LDcgQEAKIAl7IFVTQl9WRU5ET1JfSURfQ0hJQ09OWSwgVVNCX0RFVklDRV9JRF9DSElDT05ZX1dJUkVMRVNTLCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfU0lHTUFfTUlDUk8sIFVTQl9ERVZJQ0VfSURfU0lHTUFfTUlDUk9fS0VZQk9BUkQsIEhJRF9RVUlSS19OT19JTklUX1JFUE9SVFMgfSwKIAl7IFVTQl9WRU5ET1JfSURfS1lFLCBVU0JfREVWSUNFX0lEX0tZRV9NT1VTRVBFTl9JNjA4WCwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfTU9VU0VQRU5fSTYwOFhfMiwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfRUFTWVBFTl9NNjEwWCwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX0RVT1NFTlNFLCBISURfUVVJUktfTk9fSU5JVF9SRVBPUlRTIH0sCiAJeyBVU0JfVkVORE9SX0lEX1NFTUlDTywgVVNCX0RFVklDRV9JRF9TRU1JQ09fVVNCX0tFWUtPQVJELCBISURfUVVJUktfTk9fSU5JVF9SRVBPUlRTIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNjUyOWMwOS4uYTdkZTI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNTc0LDYgKzU3NCwxNiBAQAogCSAgZm9yIHRob3NlIGNoYW5uZWxzIHNwZWNpZmllZCBpbiB0aGUgbWFwLiAgVGhpcyBtYXAgY2FuIGJlIHByb3ZpZGVkCiAJICBlaXRoZXIgdmlhIHBsYXRmb3JtIGRhdGEgb3IgdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzLgogCitjb25maWcgU0VOU09SU19JNTUwMAorCXRyaXN0YXRlICJJbnRlbCA1NTAwLzU1MjAvWDU4IHRlbXBlcmF0dXJlIHNlbnNvciIKKwlkZXBlbmRzIG9uIFg4NiAmJiBQQ0kKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIHRlbXBlcmF0dXJlCisJICBzZW5zb3IgaW5zaWRlIHRoZSBJbnRlbCA1NTAwLCA1NTIwIGFuZCBYNTggY2hpcHNldHMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgaTU1MDBfdGVtcC4KKwogY29uZmlnIFNFTlNPUlNfQ09SRVRFTVAKIAl0cmlzdGF0ZSAiSW50ZWwgQ29yZS9Db3JlMi9BdG9tIHRlbXBlcmF0dXJlIHNlbnNvciIKIAlkZXBlbmRzIG9uIFg4NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9NYWtlZmlsZSBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKaW5kZXggNjcyODA2NC4uNmM5NDE0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCkBAIC02OCw2ICs2OCw3IEBACiBvYmotJChDT05GSUdfU0VOU09SU19ISUg2MTMwKQkrPSBoaWg2MTMwLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0hUVTIxKQkrPSBodHUyMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19VTFRSQTQ1KQkrPSB1bHRyYTQ1X2Vudi5vCitvYmotJChDT05GSUdfU0VOU09SU19JNTUwMCkJKz0gaTU1MDBfdGVtcC5vCiBvYmotJChDT05GSUdfU0VOU09SU19JNUtfQU1CKQkrPSBpNWtfYW1iLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0lCTUFFTSkJKz0gaWJtYWVtLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0lCTVBFWCkJKz0gaWJtcGV4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaTU1MDBfdGVtcC5jIGIvZHJpdmVycy9od21vbi9pNTUwMF90ZW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzY2NiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vaTU1MDBfdGVtcC5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogaTU1MDBfdGVtcCAtIERyaXZlciBmb3IgSW50ZWwgNTUwMC81NTIwL1g1OCBjaGlwc2V0IHRoZXJtYWwgc2Vuc29yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEplYW4gRGVsdmFyZSA8amRlbHZhcmVAc3VzZS5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisvKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmcm9tIGRhdGFzaGVldCAqLworI2RlZmluZSBSRUdfVFNUSFJDQVRBCTB4RTIKKyNkZWZpbmUgUkVHX1RTQ1RSTAkweEU4CisjZGVmaW5lIFJFR19UU1RIUlJQRVgJMHhFQgorI2RlZmluZSBSRUdfVFNUSFJMTwkweEVDCisjZGVmaW5lIFJFR19UU1RIUkhJCTB4RUUKKyNkZWZpbmUgUkVHX0NUSElOVAkweEYwCisjZGVmaW5lIFJFR19UU0ZTQwkweEYzCisjZGVmaW5lIFJFR19DVFNUUwkweEY0CisjZGVmaW5lIFJFR19UU1RIUlJRUEkJMHhGNQorI2RlZmluZSBSRUdfQ1RDVFJMCTB4RjcKKyNkZWZpbmUgUkVHX1RTVElNRVIJMHhGOAorCisvKgorICogU3lzZnMgc3R1ZmYKKyAqLworCisvKiBTZW5zb3IgcmVzb2x1dGlvbiA6IDAuNSBkZWdyZWUgQyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYtPnBhcmVudCk7CisJbG9uZyB0ZW1wOworCXUxNiB0c3RocmhpOworCXM4IHRzZnNjOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUkVHX1RTVEhSSEksICZ0c3RocmhpKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBSRUdfVFNGU0MsICZ0c2ZzYyk7CisJdGVtcCA9ICgobG9uZyl0c3RocmhpIC0gdHNmc2MpICogNTAwOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCB0ZW1wKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190aHJlc2goc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2LT5wYXJlbnQpOworCWludCByZWcgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCWxvbmcgdGVtcDsKKwl1MTYgdHN0aHI7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCByZWcsICZ0c3Rocik7CisJdGVtcCA9IHRzdGhyICogNTAwOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCB0ZW1wKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldi0+cGFyZW50KTsKKwlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCXU4IGN0c3RzOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUkVHX0NUU1RTLCAmY3RzdHMpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAodW5zaWduZWQgaW50KWN0c3RzICYgKDEgPDwgbnIpKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lSVUdPLCBzaG93X3RocmVzaCwgTlVMTCwgMHhFMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9oeXN0LCBTX0lSVUdPLCBzaG93X3RocmVzaCwgTlVMTCwgMHhFQyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JUlVHTywgc2hvd190aHJlc2gsIE5VTEwsIDB4RUUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmk1NTAwX3RlbXBfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK0FUVFJJQlVURV9HUk9VUFMoaTU1MDBfdGVtcCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpNTUwMF90ZW1wX2lkc1tdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDM0MzgpIH0sCisJeyAwIH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaTU1MDBfdGVtcF9pZHMpOworCitzdGF0aWMgaW50IGk1NTAwX3RlbXBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWludCBlcnI7CisJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworCXUzMiB0c3RpbWVyOworCXM4IHRzZnNjOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIGRldmljZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUkVHX1RTRlNDLCAmdHNmc2MpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBSRUdfVFNUSU1FUiwgJnRzdGltZXIpOworCWlmICh0c2ZzYyA9PSAweDdGICYmIHRzdGltZXIgPT0gMHgwN0QzMEQ0MCkgeworCQlkZXZfbm90aWNlKCZwZGV2LT5kZXYsICJTZW5zb3Igc2VlbXMgdG8gYmUgZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcygmcGRldi0+ZGV2LAorCQkJCQkJCSAgICJpbnRlbDU1MDAiLCBOVUxMLAorCQkJCQkJCSAgIGk1NTAwX3RlbXBfZ3JvdXBzKTsKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGh3bW9uX2Rldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpNTUwMF90ZW1wX2RyaXZlciA9IHsKKwkubmFtZSA9ICJpNTUwMF90ZW1wIiwKKwkuaWRfdGFibGUgPSBpNTUwMF90ZW1wX2lkcywKKwkucHJvYmUgPSBpNTUwMF90ZW1wX3Byb2JlLAorfTsKKworbW9kdWxlX3BjaV9kcml2ZXIoaTU1MDBfdGVtcF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJKZWFuIERlbHZhcmUgPGpkZWx2YXJlQHN1c2UuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIDU1MDAvNTUyMC9YNTggY2hpcHNldCB0aGVybWFsIHNlbnNvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggMzFlODMwOC4uYWI4MzhkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTg4MSw2ICs4ODEsNyBAQAogY29uZmlnIEkyQ19SQ0FSCiAJdHJpc3RhdGUgIlJlbmVzYXMgUi1DYXIgSTJDIENvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBBUkNIX1NITU9CSUxFIHx8IENPTVBJTEVfVEVTVAorCXNlbGVjdCBJMkNfU0xBVkUKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvciB0aGUKIAkgIFItQ2FyIEkyQyBjb250cm9sbGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwppbmRleCBiZmYyMGE1Li45NThjOGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwpAQCAtNzg1LDE0ICs3ODUsMTYgQEAKIAlpbnQgcmV0OwogCiAJcG1fcnVudGltZV9nZXRfc3luYygmYWRhcC0+ZGV2KTsKLQljbGtfcHJlcGFyZV9lbmFibGUoaTJjLT5jbGspOworCXJldCA9IGNsa19lbmFibGUoaTJjLT5jbGspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCBhZGFwLT5yZXRyaWVzOyByZXRyeSsrKSB7CiAKIAkJcmV0ID0gczNjMjR4eF9pMmNfZG94ZmVyKGkyYywgbXNncywgbnVtKTsKIAogCQlpZiAocmV0ICE9IC1FQUdBSU4pIHsKLQkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMmMtPmNsayk7CisJCQljbGtfZGlzYWJsZShpMmMtPmNsayk7CiAJCQlwbV9ydW50aW1lX3B1dCgmYWRhcC0+ZGV2KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTgwMiw3ICs4MDQsNyBAQAogCQl1ZGVsYXkoMTAwKTsKIAl9CiAKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGspOworCWNsa19kaXNhYmxlKGkyYy0+Y2xrKTsKIAlwbV9ydW50aW1lX3B1dCgmYWRhcC0+ZGV2KTsKIAlyZXR1cm4gLUVSRU1PVEVJTzsKIH0KQEAgLTExOTcsNyArMTE5OSw3IEBACiAKIAljbGtfcHJlcGFyZV9lbmFibGUoaTJjLT5jbGspOwogCXJldCA9IHMzYzI0eHhfaTJjX2luaXQoaTJjKTsKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGspOworCWNsa19kaXNhYmxlKGkyYy0+Y2xrKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSTJDIGNvbnRyb2xsZXIgaW5pdCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTIxMCw2ICsxMjEyLDcgQEAKIAkJaTJjLT5pcnEgPSByZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCQlpZiAocmV0IDw9IDApIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBmaW5kIElSUVxuIik7CisJCQljbGtfdW5wcmVwYXJlKGkyYy0+Y2xrKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIApAQCAtMTIxOCw2ICsxMjIxLDcgQEAKIAogCQlpZiAocmV0ICE9IDApIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBjbGFpbSBJUlEgJWRcbiIsIGkyYy0+aXJxKTsKKwkJCWNsa191bnByZXBhcmUoaTJjLT5jbGspOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTEyMjUsNiArMTIyOSw3IEBACiAJcmV0ID0gczNjMjR4eF9pMmNfcmVnaXN0ZXJfY3B1ZnJlcShpMmMpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjcHVmcmVxIG5vdGlmaWVyXG4iKTsKKwkJY2xrX3VucHJlcGFyZShpMmMtPmNsayk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xMjQxLDYgKzEyNDYsNyBAQAogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgYnVzIHRvIGkyYyBjb3JlXG4iKTsKIAkJczNjMjR4eF9pMmNfZGVyZWdpc3Rlcl9jcHVmcmVxKGkyYyk7CisJCWNsa191bnByZXBhcmUoaTJjLT5jbGspOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTI2Miw2ICsxMjY4LDggQEAKIHsKIAlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCisJY2xrX3VucHJlcGFyZShpMmMtPmNsayk7CisKIAlwbV9ydW50aW1lX2Rpc2FibGUoJmkyYy0+YWRhcC5kZXYpOwogCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIApAQCAtMTI5MywxMyArMTMwMSwxNiBAQAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CiAKIAlpZiAoIUlTX0VSUihpMmMtPnN5c3JlZykpCiAJCXJlZ21hcF93cml0ZShpMmMtPnN5c3JlZywgRVhZTk9TNV9TWVNfSTJDX0NGRywgaTJjLT5zeXNfaTJjX2NmZyk7CiAKLQljbGtfcHJlcGFyZV9lbmFibGUoaTJjLT5jbGspOworCXJldCA9IGNsa19lbmFibGUoaTJjLT5jbGspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAJczNjMjR4eF9pMmNfaW5pdChpMmMpOwotCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMmMtPmNsayk7CisJY2xrX2Rpc2FibGUoaTJjLT5jbGspOwogCWkyYy0+c3VzcGVuZGVkID0gMDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaF9tb2JpbGUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2hfbW9iaWxlLmMKaW5kZXggNDQwZDVkYi4uMDA3ODE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaF9tb2JpbGUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNoX21vYmlsZS5jCkBAIC0xMzksNiArMTM5LDcgQEAKIAlpbnQgcG9zOwogCWludCBzcjsKIAlib29sIHNlbmRfc3RvcDsKKwlib29sIHN0b3BfYWZ0ZXJfZG1hOwogCiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGRtYV9jaGFuICpkbWFfdHg7CkBAIC00MDcsNyArNDA4LDcgQEAKIAogCWlmIChwZC0+cG9zID09IHBkLT5tc2ctPmxlbikgewogCQkvKiBTZW5kIHN0b3AgaWYgd2UgaGF2ZW4ndCB5ZXQgKERNQSBjYXNlKSAqLwotCQlpZiAocGQtPnNlbmRfc3RvcCAmJiAoaWljX3JkKHBkLCBJQ0NSKSAmIElDQ1JfQkJTWSkpCisJCWlmIChwZC0+c2VuZF9zdG9wICYmIHBkLT5zdG9wX2FmdGVyX2RtYSkKIAkJCWkyY19vcChwZCwgT1BfVFhfU1RPUCwgMCk7CiAJCXJldHVybiAxOwogCX0KQEAgLTQ0OSw2ICs0NTAsMTMgQEAKIAkJcmVhbF9wb3MgPSBwZC0+cG9zIC0gMjsKIAogCQlpZiAocGQtPnBvcyA9PSBwZC0+bXNnLT5sZW4pIHsKKwkJCWlmIChwZC0+c3RvcF9hZnRlcl9kbWEpIHsKKwkJCQkvKiBTaW11bGF0ZSBQSU8gZW5kIGNvbmRpdGlvbiBhZnRlciBETUEgdHJhbnNmZXIgKi8KKwkJCQlpMmNfb3AocGQsIE9QX1JYX1NUT1AsIDApOworCQkJCXBkLT5wb3MrKzsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJaWYgKHJlYWxfcG9zIDwgMCkgewogCQkJCWkyY19vcChwZCwgT1BfUlhfU1RPUCwgMCk7CiAJCQkJYnJlYWs7CkBAIC01MzYsNiArNTQ0LDcgQEAKIAogCXNoX21vYmlsZV9pMmNfZG1hX3VubWFwKHBkKTsKIAlwZC0+cG9zID0gcGQtPm1zZy0+bGVuOworCXBkLT5zdG9wX2FmdGVyX2RtYSA9IHRydWU7CiAKIAlpaWNfc2V0X2NscihwZCwgSUNJQywgMCwgSUNJQ19URE1BRSB8IElDSUNfUkRNQUUpOwogfQpAQCAtNzI2LDYgKzczNSw3IEBACiAJCWJvb2wgZG9fc3RhcnQgPSBwZC0+c2VuZF9zdG9wIHx8ICFpOwogCQltc2cgPSAmbXNnc1tpXTsKIAkJcGQtPnNlbmRfc3RvcCA9IGkgPT0gbnVtIC0gMSB8fCBtc2ctPmZsYWdzICYgSTJDX01fU1RPUDsKKwkJcGQtPnN0b3BfYWZ0ZXJfZG1hID0gZmFsc2U7CiAKIAkJZXJyID0gc3RhcnRfY2gocGQsIG1zZywgZG9fc3RhcnQpOwogCQlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggMzlkMjVhOC4uZTllYWU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC0yOTcyLDYgKzI5NzIsNyBAQAogfQogRVhQT1JUX1NZTUJPTChpMmNfc21idXNfeGZlcik7CiAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19JMkNfU0xBVkUpCiBpbnQgaTJjX3NsYXZlX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGkyY19zbGF2ZV9jYl90IHNsYXZlX2NiKQogewogCWludCByZXQ7CkBAIC0zMDE5LDYgKzMwMjAsNyBAQAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpMmNfc2xhdmVfdW5yZWdpc3Rlcik7CisjZW5kaWYKIAogTU9EVUxFX0FVVEhPUigiU2ltb24gRy4gVm9nbCA8c2ltb25AdGsudW5pLWxpbnouYWMuYXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgbWFpbiBtb2R1bGUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1zbGF2ZS1lZXByb20uYyBiL2RyaXZlcnMvaTJjL2kyYy1zbGF2ZS1lZXByb20uYwppbmRleCA2NjMxNDAwLi5jZjliMDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtc2xhdmUtZWVwcm9tLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLXNsYXZlLWVlcHJvbS5jCkBAIC03NCw3ICs3NCw3IEBACiAJc3RydWN0IGVlcHJvbV9kYXRhICplZXByb207CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChvZmYgKyBjb3VudCA+PSBhdHRyLT5zaXplKQorCWlmIChvZmYgKyBjb3VudCA+IGF0dHItPnNpemUpCiAJCXJldHVybiAtRUZCSUc7CiAKIAllZXByb20gPSBkZXZfZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKQEAgLTkyLDcgKzkyLDcgQEAKIAlzdHJ1Y3QgZWVwcm9tX2RhdGEgKmVlcHJvbTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKG9mZiArIGNvdW50ID49IGF0dHItPnNpemUpCisJaWYgKG9mZiArIGNvdW50ID4gYXR0ci0+c2l6ZSkKIAkJcmV0dXJuIC1FRkJJRzsKIAogCWVlcHJvbSA9IGRldl9nZXRfZHJ2ZGF0YShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWRjL2FkNzk5eC5jIGIvZHJpdmVycy9paW8vYWRjL2FkNzk5eC5jCmluZGV4IGUzNzQxMmQuLmI5OWRlMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2FkYy9hZDc5OXguYworKysgYi9kcml2ZXJzL2lpby9hZGMvYWQ3OTl4LmMKQEAgLTE0Myw5ICsxNDMsMTUgQEAKIAljYXNlIGFkNzk5ODoKIAkJcmV0dXJuIGkyY19zbWJ1c193cml0ZV93b3JkX3N3YXBwZWQoc3QtPmNsaWVudCwgQUQ3OTk4X0NPTkZfUkVHLAogCQkJdmFsKTsKLQlkZWZhdWx0OgorCWNhc2UgYWQ3OTkyOgorCWNhc2UgYWQ3OTkzOgorCWNhc2UgYWQ3OTk0OgogCQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzdC0+Y2xpZW50LCBBRDc5OThfQ09ORl9SRUcsCiAJCQl2YWwpOworCWRlZmF1bHQ6CisJCS8qIFdpbGwgYmUgd3JpdHRlbiB3aGVuIGRvaW5nIGEgY29udmVyc2lvbiAqLworCQlzdC0+Y29uZmlnID0gdmFsOworCQlyZXR1cm4gMDsKIAl9CiB9CiAKQEAgLTE1NSw4ICsxNjEsMTMgQEAKIAljYXNlIGFkNzk5NzoKIAljYXNlIGFkNzk5ODoKIAkJcmV0dXJuIGkyY19zbWJ1c19yZWFkX3dvcmRfc3dhcHBlZChzdC0+Y2xpZW50LCBBRDc5OThfQ09ORl9SRUcpOwotCWRlZmF1bHQ6CisJY2FzZSBhZDc5OTI6CisJY2FzZSBhZDc5OTM6CisJY2FzZSBhZDc5OTQ6CiAJCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoc3QtPmNsaWVudCwgQUQ3OTk4X0NPTkZfUkVHKTsKKwlkZWZhdWx0OgorCQkvKiBObyByZWFkYmFjayBzdXBwb3J0ICovCisJCXJldHVybiBzdC0+Y29uZmlnOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vaW5rZXJuLmMgYi9kcml2ZXJzL2lpby9pbmtlcm4uYwppbmRleCA4NjZmZTkwLi45MGM4Y2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9pbmtlcm4uYworKysgYi9kcml2ZXJzL2lpby9pbmtlcm4uYwpAQCAtNDQ5LDYgKzQ0OSw5IEBACiAJaWYgKHZhbDIgPT0gTlVMTCkKIAkJdmFsMiA9ICZ1bnVzZWQ7CiAKKwlpZighaWlvX2NoYW5uZWxfaGFzX2luZm8oY2hhbi0+Y2hhbm5lbCwgaW5mbykpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGNoYW4tPmluZGlvX2Rldi0+aW5mby0+cmVhZF9yYXdfbXVsdGkpIHsKIAkJcmV0ID0gY2hhbi0+aW5kaW9fZGV2LT5pbmZvLT5yZWFkX3Jhd19tdWx0aShjaGFuLT5pbmRpb19kZXYsCiAJCQkJCWNoYW4tPmNoYW5uZWwsIElORElPX01BWF9SQVdfRUxFTUVOVFMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKaW5kZXggNTdlY2M1Yi4uOTExN2I3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYwpAQCAtMTExNCw3ICsxMTE0LDggQEAKIAlzdHJ1Y3QgbWx4NF9kZXYJKmRldiA9IHRvX21kZXYocXAtPmRldmljZSktPmRldjsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChkZXYtPmNhcHMudHVubmVsX29mZmxvYWRfbW9kZSAhPSBNTFg0X1RVTk5FTF9PRkZMT0FEX01PREVfVlhMQU4pCisJaWYgKGRldi0+Y2Fwcy50dW5uZWxfb2ZmbG9hZF9tb2RlICE9IE1MWDRfVFVOTkVMX09GRkxPQURfTU9ERV9WWExBTiB8fAorCSAgICBkZXYtPmNhcHMuZG1mc19oaWdoX3N0ZWVyX21vZGUgPT0gTUxYNF9TVEVFUklOR19ETUZTX0EwX1NUQVRJQykKIAkJcmV0dXJuIDA7IC8qIGRvIG5vdGhpbmcgKi8KIAogCWliX2Zsb3cgPSBmbG93X2F0dHIgKyAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9ldmRldi5jIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCmluZGV4IDhhZmEyOGUuLjE4ZDRiMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKQEAgLTI4LDYgKzI4LDEzIEBACiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgImlucHV0LWNvbXBhdC5oIgogCitlbnVtIGV2ZGV2X2Nsb2NrX3R5cGUgeworCUVWX0NMS19SRUFMID0gMCwKKwlFVl9DTEtfTU9OTywKKwlFVl9DTEtfQk9PVCwKKwlFVl9DTEtfTUFYCit9OworCiBzdHJ1Y3QgZXZkZXYgewogCWludCBvcGVuOwogCXN0cnVjdCBpbnB1dF9oYW5kbGUgaGFuZGxlOwpAQCAtNDksMTIgKzU2LDMyIEBACiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKIAlzdHJ1Y3QgZXZkZXYgKmV2ZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlpbnQgY2xraWQ7CisJaW50IGNsa190eXBlOwogCWJvb2wgcmV2b2tlZDsKIAl1bnNpZ25lZCBpbnQgYnVmc2l6ZTsKIAlzdHJ1Y3QgaW5wdXRfZXZlbnQgYnVmZmVyW107CiB9OwogCitzdGF0aWMgaW50IGV2ZGV2X3NldF9jbGtfdHlwZShzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbGtpZCkKK3sKKwlzd2l0Y2ggKGNsa2lkKSB7CisKKwljYXNlIENMT0NLX1JFQUxUSU1FOgorCQljbGllbnQtPmNsa190eXBlID0gRVZfQ0xLX1JFQUw7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfTU9OT1RPTklDOgorCQljbGllbnQtPmNsa190eXBlID0gRVZfQ0xLX01PTk87CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfQk9PVFRJTUU6CisJCWNsaWVudC0+Y2xrX3R5cGUgPSBFVl9DTEtfQk9PVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qIGZsdXNoIHF1ZXVlZCBldmVudHMgb2YgdHlwZSBAdHlwZSwgY2FsbGVyIG11c3QgaG9sZCBjbGllbnQtPmJ1ZmZlcl9sb2NrICovCiBzdGF0aWMgdm9pZCBfX2V2ZGV2X2ZsdXNoX3F1ZXVlKHN0cnVjdCBldmRldl9jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IHR5cGUpCiB7CkBAIC0xMDgsOCArMTM1LDExIEBACiAJc3RydWN0IGlucHV0X2V2ZW50IGV2OwogCWt0aW1lX3QgdGltZTsKIAotCXRpbWUgPSAoY2xpZW50LT5jbGtpZCA9PSBDTE9DS19NT05PVE9OSUMpID8KLQkJa3RpbWVfZ2V0KCkgOiBrdGltZV9nZXRfcmVhbCgpOworCXRpbWUgPSBjbGllbnQtPmNsa190eXBlID09IEVWX0NMS19SRUFMID8KKwkJCWt0aW1lX2dldF9yZWFsKCkgOgorCQkJY2xpZW50LT5jbGtfdHlwZSA9PSBFVl9DTEtfTU9OTyA/CisJCQkJa3RpbWVfZ2V0KCkgOgorCQkJCWt0aW1lX2dldF9ib290dGltZSgpOwogCiAJZXYudGltZSA9IGt0aW1lX3RvX3RpbWV2YWwodGltZSk7CiAJZXYudHlwZSA9IEVWX1NZTjsKQEAgLTE1OSw3ICsxODksNyBAQAogCiBzdGF0aWMgdm9pZCBldmRldl9wYXNzX3ZhbHVlcyhzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaW5wdXRfdmFsdWUgKnZhbHMsIHVuc2lnbmVkIGludCBjb3VudCwKLQkJCWt0aW1lX3QgbW9ubywga3RpbWVfdCByZWFsKQorCQkJa3RpbWVfdCAqZXZfdGltZSkKIHsKIAlzdHJ1Y3QgZXZkZXYgKmV2ZGV2ID0gY2xpZW50LT5ldmRldjsKIAljb25zdCBzdHJ1Y3QgaW5wdXRfdmFsdWUgKnY7CkBAIC0xNjksOCArMTk5LDcgQEAKIAlpZiAoY2xpZW50LT5yZXZva2VkKQogCQlyZXR1cm47CiAKLQlldmVudC50aW1lID0ga3RpbWVfdG9fdGltZXZhbChjbGllbnQtPmNsa2lkID09IENMT0NLX01PTk9UT05JQyA/Ci0JCQkJICAgICAgbW9ubyA6IHJlYWwpOworCWV2ZW50LnRpbWUgPSBrdGltZV90b190aW1ldmFsKGV2X3RpbWVbY2xpZW50LT5jbGtfdHlwZV0pOwogCiAJLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIGp1c3QgYWNxdWlyZSB0aGUgbG9jay4gKi8KIAlzcGluX2xvY2soJmNsaWVudC0+YnVmZmVyX2xvY2spOwpAQCAtMTk4LDIxICsyMjcsMjIgQEAKIHsKIAlzdHJ1Y3QgZXZkZXYgKmV2ZGV2ID0gaGFuZGxlLT5wcml2YXRlOwogCXN0cnVjdCBldmRldl9jbGllbnQgKmNsaWVudDsKLQlrdGltZV90IHRpbWVfbW9ubywgdGltZV9yZWFsOworCWt0aW1lX3QgZXZfdGltZVtFVl9DTEtfTUFYXTsKIAotCXRpbWVfbW9ubyA9IGt0aW1lX2dldCgpOwotCXRpbWVfcmVhbCA9IGt0aW1lX21vbm9fdG9fcmVhbCh0aW1lX21vbm8pOworCWV2X3RpbWVbRVZfQ0xLX01PTk9dID0ga3RpbWVfZ2V0KCk7CisJZXZfdGltZVtFVl9DTEtfUkVBTF0gPSBrdGltZV9tb25vX3RvX3JlYWwoZXZfdGltZVtFVl9DTEtfTU9OT10pOworCWV2X3RpbWVbRVZfQ0xLX0JPT1RdID0ga3RpbWVfbW9ub190b19hbnkoZXZfdGltZVtFVl9DTEtfTU9OT10sCisJCQkJCQkgVEtfT0ZGU19CT09UKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAogCWNsaWVudCA9IHJjdV9kZXJlZmVyZW5jZShldmRldi0+Z3JhYik7CiAKIAlpZiAoY2xpZW50KQotCQlldmRldl9wYXNzX3ZhbHVlcyhjbGllbnQsIHZhbHMsIGNvdW50LCB0aW1lX21vbm8sIHRpbWVfcmVhbCk7CisJCWV2ZGV2X3Bhc3NfdmFsdWVzKGNsaWVudCwgdmFscywgY291bnQsIGV2X3RpbWUpOwogCWVsc2UKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2xpZW50LCAmZXZkZXYtPmNsaWVudF9saXN0LCBub2RlKQotCQkJZXZkZXZfcGFzc192YWx1ZXMoY2xpZW50LCB2YWxzLCBjb3VudCwKLQkJCQkJICB0aW1lX21vbm8sIHRpbWVfcmVhbCk7CisJCQlldmRldl9wYXNzX3ZhbHVlcyhjbGllbnQsIHZhbHMsIGNvdW50LCBldl90aW1lKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtODc3LDEwICs5MDcsOCBAQAogCWNhc2UgRVZJT0NTQ0xPQ0tJRDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpLCBwLCBzaXplb2YodW5zaWduZWQgaW50KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKGkgIT0gQ0xPQ0tfTU9OT1RPTklDICYmIGkgIT0gQ0xPQ0tfUkVBTFRJTUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY2xpZW50LT5jbGtpZCA9IGk7Ci0JCXJldHVybiAwOworCisJCXJldHVybiBldmRldl9zZXRfY2xrX3R5cGUoY2xpZW50LCBpKTsKIAogCWNhc2UgRVZJT0NHS0VZQ09ERToKIAkJcmV0dXJuIGV2ZGV2X2hhbmRsZV9nZXRfa2V5Y29kZShkZXYsIHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCmluZGV4IDA0MjE3YzIuLjIxM2UzYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKQEAgLTE5NzQsMTggKzE5NzQsMjIgQEAKIAogCWV2ZW50cyA9IG10X3Nsb3RzICsgMTsgLyogY291bnQgU1lOX01UX1JFUE9SVCBhbmQgU1lOX1JFUE9SVCAqLwogCi0JZm9yIChpID0gMDsgaSA8IEFCU19DTlQ7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgZGV2LT5hYnNiaXQpKSB7Ci0JCQlpZiAoaW5wdXRfaXNfbXRfYXhpcyhpKSkKLQkJCQlldmVudHMgKz0gbXRfc2xvdHM7Ci0JCQllbHNlCi0JCQkJZXZlbnRzKys7CisJaWYgKHRlc3RfYml0KEVWX0FCUywgZGV2LT5ldmJpdCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFCU19DTlQ7IGkrKykgeworCQkJaWYgKHRlc3RfYml0KGksIGRldi0+YWJzYml0KSkgeworCQkJCWlmIChpbnB1dF9pc19tdF9heGlzKGkpKQorCQkJCQlldmVudHMgKz0gbXRfc2xvdHM7CisJCQkJZWxzZQorCQkJCQlldmVudHMrKzsKKwkJCX0KIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBSRUxfQ05UOyBpKyspCi0JCWlmICh0ZXN0X2JpdChpLCBkZXYtPnJlbGJpdCkpCi0JCQlldmVudHMrKzsKKwlpZiAodGVzdF9iaXQoRVZfUkVMLCBkZXYtPmV2Yml0KSkgeworCQlmb3IgKGkgPSAwOyBpIDwgUkVMX0NOVDsgaSsrKQorCQkJaWYgKHRlc3RfYml0KGksIGRldi0+cmVsYml0KSkKKwkJCQlldmVudHMrKzsKKwl9CiAKIAkvKiBNYWtlIHJvb20gZm9yIEtFWSBhbmQgTVNDIGV2ZW50cyAqLwogCWV2ZW50cyArPSA3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCmluZGV4IDk2ZWUyNmM1Li5hNWQ5YjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCkBAIC01NTksNiArNTU5LDcgQEAKIGNvbmZpZyBLRVlCT0FSRF9TVE1QRQogCXRyaXN0YXRlICJTVE1QRSBrZXlwYWQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1GRF9TVE1QRQorCWRlcGVuZHMgb24gT0YKIAlzZWxlY3QgSU5QVVRfTUFUUklYS01BUAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBrZXlwYWQgY29udHJvbGxlciBvbiBTVE1QRSBJL08KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCmluZGV4IGQ0ZGQ3OGEuLjg4M2Q2YWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKQEAgLTM1LDkgKzM1LDEzIEBACiBzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSB7CiAJY29uc3Qgc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQl1bnNpZ25lZCBpbnQgdGltZXJfZGVib3VuY2U7CS8qIGluIG1zZWNzICovCisKKwlzdHJ1Y3QgdGltZXJfbGlzdCByZWxlYXNlX3RpbWVyOworCXVuc2lnbmVkIGludCByZWxlYXNlX2RlbGF5OwkvKiBpbiBtc2VjcywgZm9yIElSUS1vbmx5IGJ1dHRvbnMgKi8KKworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwl1bnNpZ25lZCBpbnQgc29mdHdhcmVfZGVib3VuY2U7CS8qIGluIG1zZWNzLCBmb3IgR1BJTy1kcml2ZW4gYnV0dG9ucyAqLworCiAJdW5zaWduZWQgaW50IGlycTsKIAlzcGlubG9ja190IGxvY2s7CiAJYm9vbCBkaXNhYmxlZDsKQEAgLTExNiwxMSArMTIwLDE0IEBACiB7CiAJaWYgKCFiZGF0YS0+ZGlzYWJsZWQpIHsKIAkJLyoKLQkJICogRGlzYWJsZSBJUlEgYW5kIHBvc3NpYmxlIGRlYm91bmNpbmcgdGltZXIuCisJCSAqIERpc2FibGUgSVJRIGFuZCBhc3NvY2lhdGVkIHRpbWVyL3dvcmsgc3RydWN0dXJlLgogCQkgKi8KIAkJZGlzYWJsZV9pcnEoYmRhdGEtPmlycSk7Ci0JCWlmIChiZGF0YS0+dGltZXJfZGVib3VuY2UpCi0JCQlkZWxfdGltZXJfc3luYygmYmRhdGEtPnRpbWVyKTsKKworCQlpZiAoZ3Bpb19pc192YWxpZChiZGF0YS0+YnV0dG9uLT5ncGlvKSkKKwkJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYmRhdGEtPndvcmspOworCQllbHNlCisJCQlkZWxfdGltZXJfc3luYygmYmRhdGEtPnJlbGVhc2VfdGltZXIpOwogCiAJCWJkYXRhLT5kaXNhYmxlZCA9IHRydWU7CiAJfQpAQCAtMzQzLDcgKzM1MCw3IEBACiBzdGF0aWMgdm9pZCBncGlvX2tleXNfZ3Bpb193b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSwgd29yayk7CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSwgd29yay53b3JrKTsKIAogCWdwaW9fa2V5c19ncGlvX3JlcG9ydF9ldmVudChiZGF0YSk7CiAKQEAgLTM1MSwxMyArMzU4LDYgQEAKIAkJcG1fcmVsYXgoYmRhdGEtPmlucHV0LT5kZXYucGFyZW50KTsKIH0KIAotc3RhdGljIHZvaWQgZ3Bpb19rZXlzX2dwaW9fdGltZXIodW5zaWduZWQgbG9uZyBfZGF0YSkKLXsKLQlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSAqYmRhdGEgPSAoc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKilfZGF0YTsKLQotCXNjaGVkdWxlX3dvcmsoJmJkYXRhLT53b3JrKTsKLX0KLQogc3RhdGljIGlycXJldHVybl90IGdwaW9fa2V5c19ncGlvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhID0gZGV2X2lkOwpAQCAtMzY2LDExICszNjYsMTAgQEAKIAogCWlmIChiZGF0YS0+YnV0dG9uLT53YWtldXApCiAJCXBtX3N0YXlfYXdha2UoYmRhdGEtPmlucHV0LT5kZXYucGFyZW50KTsKLQlpZiAoYmRhdGEtPnRpbWVyX2RlYm91bmNlKQotCQltb2RfdGltZXIoJmJkYXRhLT50aW1lciwKLQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGJkYXRhLT50aW1lcl9kZWJvdW5jZSkpOwotCWVsc2UKLQkJc2NoZWR1bGVfd29yaygmYmRhdGEtPndvcmspOworCisJbW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fd3EsCisJCQkgJmJkYXRhLT53b3JrLAorCQkJIG1zZWNzX3RvX2ppZmZpZXMoYmRhdGEtPnNvZnR3YXJlX2RlYm91bmNlKSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00MDgsNyArNDA3LDcgQEAKIAkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgYnV0dG9uLT5jb2RlLCAxKTsKIAkJaW5wdXRfc3luYyhpbnB1dCk7CiAKLQkJaWYgKCFiZGF0YS0+dGltZXJfZGVib3VuY2UpIHsKKwkJaWYgKCFiZGF0YS0+cmVsZWFzZV9kZWxheSkgewogCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgYnV0dG9uLT5jb2RlLCAwKTsKIAkJCWlucHV0X3N5bmMoaW5wdXQpOwogCQkJZ290byBvdXQ7CkBAIC00MTcsOSArNDE2LDkgQEAKIAkJYmRhdGEtPmtleV9wcmVzc2VkID0gdHJ1ZTsKIAl9CiAKLQlpZiAoYmRhdGEtPnRpbWVyX2RlYm91bmNlKQotCQltb2RfdGltZXIoJmJkYXRhLT50aW1lciwKLQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGJkYXRhLT50aW1lcl9kZWJvdW5jZSkpOworCWlmIChiZGF0YS0+cmVsZWFzZV9kZWxheSkKKwkJbW9kX3RpbWVyKCZiZGF0YS0+cmVsZWFzZV90aW1lciwKKwkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGJkYXRhLT5yZWxlYXNlX2RlbGF5KSk7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmRhdGEtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC00MjksMTAgKzQyOCwxMCBAQAogewogCXN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSA9IGRhdGE7CiAKLQlpZiAoYmRhdGEtPnRpbWVyX2RlYm91bmNlKQotCQlkZWxfdGltZXJfc3luYygmYmRhdGEtPnRpbWVyKTsKLQotCWNhbmNlbF93b3JrX3N5bmMoJmJkYXRhLT53b3JrKTsKKwlpZiAoZ3Bpb19pc192YWxpZChiZGF0YS0+YnV0dG9uLT5ncGlvKSkKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZiZGF0YS0+d29yayk7CisJZWxzZQorCQlkZWxfdGltZXJfc3luYygmYmRhdGEtPnJlbGVhc2VfdGltZXIpOwogfQogCiBzdGF0aWMgaW50IGdwaW9fa2V5c19zZXR1cF9rZXkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKQEAgLTQ2NiwyMyArNDY1LDI1IEBACiAJCQkJCWJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwgKiAxMDAwKTsKIAkJCS8qIHVzZSB0aW1lciBpZiBncGlvbGliIGRvZXNuJ3QgcHJvdmlkZSBkZWJvdW5jZSAqLwogCQkJaWYgKGVycm9yIDwgMCkKLQkJCQliZGF0YS0+dGltZXJfZGVib3VuY2UgPQorCQkJCWJkYXRhLT5zb2Z0d2FyZV9kZWJvdW5jZSA9CiAJCQkJCQlidXR0b24tPmRlYm91bmNlX2ludGVydmFsOwogCQl9CiAKLQkJaXJxID0gZ3Bpb190b19pcnEoYnV0dG9uLT5ncGlvKTsKLQkJaWYgKGlycSA8IDApIHsKLQkJCWVycm9yID0gaXJxOwotCQkJZGV2X2VycihkZXYsCi0JCQkJIlVuYWJsZSB0byBnZXQgaXJxIG51bWJlciBmb3IgR1BJTyAlZCwgZXJyb3IgJWRcbiIsCi0JCQkJYnV0dG9uLT5ncGlvLCBlcnJvcik7Ci0JCQlyZXR1cm4gZXJyb3I7CisJCWlmIChidXR0b24tPmlycSkgeworCQkJYmRhdGEtPmlycSA9IGJ1dHRvbi0+aXJxOworCQl9IGVsc2UgeworCQkJaXJxID0gZ3Bpb190b19pcnEoYnV0dG9uLT5ncGlvKTsKKwkJCWlmIChpcnEgPCAwKSB7CisJCQkJZXJyb3IgPSBpcnE7CisJCQkJZGV2X2VycihkZXYsCisJCQkJCSJVbmFibGUgdG8gZ2V0IGlycSBudW1iZXIgZm9yIEdQSU8gJWQsIGVycm9yICVkXG4iLAorCQkJCQlidXR0b24tPmdwaW8sIGVycm9yKTsKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CisJCQliZGF0YS0+aXJxID0gaXJxOwogCQl9Ci0JCWJkYXRhLT5pcnEgPSBpcnE7CiAKLQkJSU5JVF9XT1JLKCZiZGF0YS0+d29yaywgZ3Bpb19rZXlzX2dwaW9fd29ya19mdW5jKTsKLQkJc2V0dXBfdGltZXIoJmJkYXRhLT50aW1lciwKLQkJCSAgICBncGlvX2tleXNfZ3Bpb190aW1lciwgKHVuc2lnbmVkIGxvbmcpYmRhdGEpOworCQlJTklUX0RFTEFZRURfV09SSygmYmRhdGEtPndvcmssIGdwaW9fa2V5c19ncGlvX3dvcmtfZnVuYyk7CiAKIAkJaXNyID0gZ3Bpb19rZXlzX2dwaW9faXNyOwogCQlpcnFmbGFncyA9IElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORzsKQEAgLTQ5OSw4ICs1MDAsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQliZGF0YS0+dGltZXJfZGVib3VuY2UgPSBidXR0b24tPmRlYm91bmNlX2ludGVydmFsOwotCQlzZXR1cF90aW1lcigmYmRhdGEtPnRpbWVyLAorCQliZGF0YS0+cmVsZWFzZV9kZWxheSA9IGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWw7CisJCXNldHVwX3RpbWVyKCZiZGF0YS0+cmVsZWFzZV90aW1lciwKIAkJCSAgICBncGlvX2tleXNfaXJxX3RpbWVyLCAodW5zaWduZWQgbG9uZyliZGF0YSk7CiAKIAkJaXNyID0gZ3Bpb19rZXlzX2lycV9pc3I7CkBAIC01MTAsNyArNTExLDcgQEAKIAlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dCwgYnV0dG9uLT50eXBlID86IEVWX0tFWSwgYnV0dG9uLT5jb2RlKTsKIAogCS8qCi0JICogSW5zdGFsbCBjdXN0b20gYWN0aW9uIHRvIGNhbmNlbCBkZWJvdW5jZSB0aW1lciBhbmQKKwkgKiBJbnN0YWxsIGN1c3RvbSBhY3Rpb24gdG8gY2FuY2VsIHJlbGVhc2UgdGltZXIgYW5kCiAJICogd29ya3F1ZXVlIGl0ZW0uCiAJICovCiAJZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb24oJnBkZXYtPmRldiwgZ3Bpb19rZXlzX3F1aWVzY2Vfa2V5LCBiZGF0YSk7CkBAIC02MTgsMzMgKzYxOSwzMCBAQAogCiAJaSA9IDA7CiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShub2RlLCBwcCkgewotCQlpbnQgZ3BpbyA9IC0xOwogCQllbnVtIG9mX2dwaW9fZmxhZ3MgZmxhZ3M7CiAKIAkJYnV0dG9uID0gJnBkYXRhLT5idXR0b25zW2krK107CiAKLQkJaWYgKCFvZl9maW5kX3Byb3BlcnR5KHBwLCAiZ3Bpb3MiLCBOVUxMKSkgewotCQkJYnV0dG9uLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChwcCwgMCk7Ci0JCQlpZiAoYnV0dG9uLT5pcnEgPT0gMCkgewotCQkJCWktLTsKLQkJCQlwZGF0YS0+bmJ1dHRvbnMtLTsKLQkJCQlkZXZfd2FybihkZXYsICJGb3VuZCBidXR0b24gd2l0aG91dCBncGlvcyBvciBpcnFzXG4iKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWdwaW8gPSBvZl9nZXRfZ3Bpb19mbGFncyhwcCwgMCwgJmZsYWdzKTsKLQkJCWlmIChncGlvIDwgMCkgewotCQkJCWVycm9yID0gZ3BpbzsKKwkJYnV0dG9uLT5ncGlvID0gb2ZfZ2V0X2dwaW9fZmxhZ3MocHAsIDAsICZmbGFncyk7CisJCWlmIChidXR0b24tPmdwaW8gPCAwKSB7CisJCQllcnJvciA9IGJ1dHRvbi0+Z3BpbzsKKwkJCWlmIChlcnJvciAhPSAtRU5PRU5UKSB7CiAJCQkJaWYgKGVycm9yICE9IC1FUFJPQkVfREVGRVIpCiAJCQkJCWRldl9lcnIoZGV2LAogCQkJCQkJIkZhaWxlZCB0byBnZXQgZ3BpbyBmbGFncywgZXJyb3I6ICVkXG4iLAogCQkJCQkJZXJyb3IpOwogCQkJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIAkJCX0KKwkJfSBlbHNlIHsKKwkJCWJ1dHRvbi0+YWN0aXZlX2xvdyA9IGZsYWdzICYgT0ZfR1BJT19BQ1RJVkVfTE9XOwogCQl9CiAKLQkJYnV0dG9uLT5ncGlvID0gZ3BpbzsKLQkJYnV0dG9uLT5hY3RpdmVfbG93ID0gZmxhZ3MgJiBPRl9HUElPX0FDVElWRV9MT1c7CisJCWJ1dHRvbi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAocHAsIDApOworCisJCWlmICghZ3Bpb19pc192YWxpZChidXR0b24tPmdwaW8pICYmICFidXR0b24tPmlycSkgeworCQkJZGV2X2VycihkZXYsICJGb3VuZCBidXR0b24gd2l0aG91dCBncGlvcyBvciBpcnFzXG4iKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQl9CiAKIAkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBwLCAibGludXgsY29kZSIsICZidXR0b24tPmNvZGUpKSB7CiAJCQlkZXZfZXJyKGRldiwgIkJ1dHRvbiB3aXRob3V0IGtleWNvZGU6IDB4JXhcbiIsCkBAIC02NTksNiArNjU3LDggQEAKIAogCQlidXR0b24tPndha2V1cCA9ICEhb2ZfZ2V0X3Byb3BlcnR5KHBwLCAiZ3Bpby1rZXksd2FrZXVwIiwgTlVMTCk7CiAKKwkJYnV0dG9uLT5jYW5fZGlzYWJsZSA9ICEhb2ZfZ2V0X3Byb3BlcnR5KHBwLCAibGludXgsY2FuLWRpc2FibGUiLCBOVUxMKTsKKwogCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocHAsICJkZWJvdW5jZS1pbnRlcnZhbCIsCiAJCQkJCSAmYnV0dG9uLT5kZWJvdW5jZV9pbnRlcnZhbCkpCiAJCQlidXR0b24tPmRlYm91bmNlX2ludGVydmFsID0gNTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxfa2JkLmMKaW5kZXggNjEwYThhZi4uNWIxNTJmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxfa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxfa2JkLmMKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBiYWlsMTsKIAotCWluaXRfY29tcGxldGlvbigmZGV2LT5jbWRfZG9uZSk7CisJcmVpbml0X2NvbXBsZXRpb24oJmRldi0+Y21kX2RvbmUpOwogCXNlcmlvX3dyaXRlKHNlcmlvLCAwKTsKIAlzZXJpb193cml0ZShzZXJpbywgMCk7CiAJc2VyaW9fd3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGJhaWwxOwogCi0JaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNtZF9kb25lKTsKKwlyZWluaXRfY29tcGxldGlvbigmZGV2LT5jbWRfZG9uZSk7CiAJc2VyaW9fd3JpdGUoc2VyaW8sIDApOwogCXNlcmlvX3dyaXRlKHNlcmlvLCAwKTsKIAlzZXJpb193cml0ZShzZXJpbywgSElMX1BLVF9DTUQgPj4gOCk7CkBAIC00OTEsNyArNDkxLDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gYmFpbDE7CiAKLQlpbml0X2NvbXBsZXRpb24oJmRldi0+Y21kX2RvbmUpOworCXJlaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNtZF9kb25lKTsKIAlzZXJpb193cml0ZShzZXJpbywgMCk7CiAJc2VyaW9fd3JpdGUoc2VyaW8sIDApOwogCXNlcmlvX3dyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3RtcGUta2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N0bXBlLWtleXBhZC5jCmluZGV4IGVmNWU2N2YuLmZlNmUzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3RtcGUta2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdG1wZS1rZXlwYWQuYwpAQCAtNDUsMTMgKzQ1LDE0IEBACiAjZGVmaW5lIFNUTVBFX0tFWVBBRF9NQVhfUk9XUwkJOAogI2RlZmluZSBTVE1QRV9LRVlQQURfTUFYX0NPTFMJCTgKICNkZWZpbmUgU1RNUEVfS0VZUEFEX1JPV19TSElGVAkJMwotI2RlZmluZSBTVE1QRV9LRVlQQURfS0VZTUFQX1NJWkUJXAorI2RlZmluZSBTVE1QRV9LRVlQQURfS0VZTUFQX01BWF9TSVpFIFwKIAkoU1RNUEVfS0VZUEFEX01BWF9ST1dTICogU1RNUEVfS0VZUEFEX01BWF9DT0xTKQogCiAvKioKICAqIHN0cnVjdCBzdG1wZV9rZXlwYWRfdmFyaWFudCAtIG1vZGVsLXNwZWNpZmljIGF0dHJpYnV0ZXMKICAqIEBhdXRvX2luY3JlbWVudDogd2hldGhlciB0aGUgS1BDX0RBVEFfQllURSByZWdpc3RlciBhZGRyZXNzCiAgKgkJICAgIGF1dG8taW5jcmVtZW50cyBvbiBtdWx0aXBsZSByZWFkCisgKiBAc2V0X3B1bGx1cDogd2hldGhlciB0aGUgcGlucyBuZWVkIHRvIGhhdmUgdGhlaXIgcHVsbC11cHMgc2V0CiAgKiBAbnVtX2RhdGE6IG51bWJlciBvZiBkYXRhIGJ5dGVzCiAgKiBAbnVtX25vcm1hbF9kYXRhOiBudW1iZXIgb2Ygbm9ybWFsIGtleXMnIGRhdGEgYnl0ZXMKICAqIEBtYXhfY29sczogbWF4aW11bSBudW1iZXIgb2YgY29sdW1ucyBzdXBwb3J0ZWQKQEAgLTYxLDYgKzYyLDcgQEAKICAqLwogc3RydWN0IHN0bXBlX2tleXBhZF92YXJpYW50IHsKIAlib29sCQlhdXRvX2luY3JlbWVudDsKKwlib29sCQlzZXRfcHVsbHVwOwogCWludAkJbnVtX2RhdGE7CiAJaW50CQludW1fbm9ybWFsX2RhdGE7CiAJaW50CQltYXhfY29sczsKQEAgLTgxLDYgKzgzLDcgQEAKIAl9LAogCVtTVE1QRTI0MDFdID0gewogCQkuYXV0b19pbmNyZW1lbnQJCT0gZmFsc2UsCisJCS5zZXRfcHVsbHVwCQk9IHRydWUsCiAJCS5udW1fZGF0YQkJPSAzLAogCQkubnVtX25vcm1hbF9kYXRhCT0gMiwKIAkJLm1heF9jb2xzCQk9IDgsCkBAIC05MCw2ICs5Myw3IEBACiAJfSwKIAlbU1RNUEUyNDAzXSA9IHsKIAkJLmF1dG9faW5jcmVtZW50CQk9IHRydWUsCisJCS5zZXRfcHVsbHVwCQk9IHRydWUsCiAJCS5udW1fZGF0YQkJPSA1LAogCQkubnVtX25vcm1hbF9kYXRhCT0gMywKIAkJLm1heF9jb2xzCQk9IDgsCkBAIC05OSwxNiArMTAzLDMwIEBACiAJfSwKIH07CiAKKy8qKgorICogc3RydWN0IHN0bXBlX2tleXBhZCAtIFNUTVBFIGtleXBhZCBzdGF0ZSBjb250YWluZXIKKyAqIEBzdG1wZTogcG9pbnRlciB0byBwYXJlbnQgU1RNUEUgZGV2aWNlCisgKiBAaW5wdXQ6IHNwYXduZWQgaW5wdXQgZGV2aWNlCisgKiBAdmFyaWFudDogU1RNUEUgdmFyaWFudAorICogQGRlYm91bmNlX21zOiBkZWJvdW5jZSBpbnRlcnZhbCwgaW4gbXMuICBNYXhpbXVtIGlzCisgKgkJICVTVE1QRV9LRVlQQURfTUFYX0RFQk9VTkNFLgorICogQHNjYW5fY291bnQ6IG51bWJlciBvZiBrZXkgc2Nhbm5pbmcgY3ljbGVzIHRvIGNvbmZpcm0ga2V5IGRhdGEuCisgKgkJTWF4aW11bSBpcyAlU1RNUEVfS0VZUEFEX01BWF9TQ0FOX0NPVU5ULgorICogQG5vX2F1dG9yZXBlYXQ6IGRpc2FibGUga2V5IGF1dG9yZXBlYXQKKyAqIEByb3dzOiBiaXRtYXNrIGZvciB0aGUgcm93cworICogQGNvbHM6IGJpdG1hc2sgZm9yIHRoZSBjb2x1bW5zCisgKiBAa2V5bWFwOiB0aGUga2V5bWFwCisgKi8KIHN0cnVjdCBzdG1wZV9rZXlwYWQgewogCXN0cnVjdCBzdG1wZSAqc3RtcGU7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJY29uc3Qgc3RydWN0IHN0bXBlX2tleXBhZF92YXJpYW50ICp2YXJpYW50OwotCWNvbnN0IHN0cnVjdCBzdG1wZV9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGxhdDsKLQorCXVuc2lnbmVkIGludCBkZWJvdW5jZV9tczsKKwl1bnNpZ25lZCBpbnQgc2Nhbl9jb3VudDsKKwlib29sIG5vX2F1dG9yZXBlYXQ7CiAJdW5zaWduZWQgaW50IHJvd3M7CiAJdW5zaWduZWQgaW50IGNvbHM7Ci0KLQl1bnNpZ25lZCBzaG9ydCBrZXltYXBbU1RNUEVfS0VZUEFEX0tFWU1BUF9TSVpFXTsKKwl1bnNpZ25lZCBzaG9ydCBrZXltYXBbU1RNUEVfS0VZUEFEX0tFWU1BUF9NQVhfU0laRV07CiB9OwogCiBzdGF0aWMgaW50IHN0bXBlX2tleXBhZF9yZWFkX2RhdGEoc3RydWN0IHN0bXBlX2tleXBhZCAqa2V5cGFkLCB1OCAqZGF0YSkKQEAgLTE3MSw3ICsxODksMTAgQEAKIAl1bnNpZ25lZCBpbnQgY29sX2dwaW9zID0gdmFyaWFudC0+Y29sX2dwaW9zOwogCXVuc2lnbmVkIGludCByb3dfZ3Bpb3MgPSB2YXJpYW50LT5yb3dfZ3Bpb3M7CiAJc3RydWN0IHN0bXBlICpzdG1wZSA9IGtleXBhZC0+c3RtcGU7CisJdTggcHVyZWcgPSBzdG1wZS0+cmVnc1tTVE1QRV9JRFhfR1BQVVJfTFNCXTsKIAl1bnNpZ25lZCBpbnQgcGlucyA9IDA7CisJdW5zaWduZWQgaW50IHB1X3BpbnMgPSAwOworCWludCByZXQ7CiAJaW50IGk7CiAKIAkvKgpAQCAtMTg4LDggKzIwOSwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCB2YXJpYW50LT5tYXhfY29sczsgaSsrKSB7CiAJCWludCBudW0gPSBfX2Zmcyhjb2xfZ3Bpb3MpOwogCi0JCWlmIChrZXlwYWQtPmNvbHMgJiAoMSA8PCBpKSkKKwkJaWYgKGtleXBhZC0+Y29scyAmICgxIDw8IGkpKSB7CiAJCQlwaW5zIHw9IDEgPDwgbnVtOworCQkJcHVfcGlucyB8PSAxIDw8IG51bTsKKwkJfQogCiAJCWNvbF9ncGlvcyAmPSB+KDEgPDwgbnVtKTsKIAl9CkBAIC0yMDMsMjAgKzIyNiw0MyBAQAogCQlyb3dfZ3Bpb3MgJj0gfigxIDw8IG51bSk7CiAJfQogCi0JcmV0dXJuIHN0bXBlX3NldF9hbHRmdW5jKHN0bXBlLCBwaW5zLCBTVE1QRV9CTE9DS19LRVlQQUQpOworCXJldCA9IHN0bXBlX3NldF9hbHRmdW5jKHN0bXBlLCBwaW5zLCBTVE1QRV9CTE9DS19LRVlQQUQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIE9uIFNUTVBFMjR4eCwgc2V0IHBpbiBiaWFzIHRvIHB1bGwtdXAgb24gYWxsIGtleXBhZCBpbnB1dAorCSAqIHBpbnMgKGNvbHVtbnMpLCB0aGlzIGluY2lkZW50YWxseSBoYXBwZW4gdG8gYmUgbWF4aW11bSA4IHBpbnMKKwkgKiBhbmQgcGxhY2VkIGF0IEdQSU8wLTcgc28gb25seSB0aGUgTFNCIG9mIHRoZSBwdWxsIHVwIHJlZ2lzdGVyCisJICogZXZlciBuZWVkcyB0byBiZSB3cml0dGVuLgorCSAqLworCWlmICh2YXJpYW50LT5zZXRfcHVsbHVwKSB7CisJCXU4IHZhbDsKKworCQlyZXQgPSBzdG1wZV9yZWdfcmVhZChzdG1wZSwgcHVyZWcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBEbyBub3QgdG91Y2ggdW51c2VkIHBpbnMsIG1heSBiZSB1c2VkIGZvciBHUElPICovCisJCXZhbCA9IHJldCAmIH5wdV9waW5zOworCQl2YWwgfD0gcHVfcGluczsKKworCQlyZXQgPSBzdG1wZV9yZWdfd3JpdGUoc3RtcGUsIHB1cmVnLCB2YWwpOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHN0bXBlX2tleXBhZF9jaGlwX2luaXQoc3RydWN0IHN0bXBlX2tleXBhZCAqa2V5cGFkKQogewotCWNvbnN0IHN0cnVjdCBzdG1wZV9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGtleXBhZC0+cGxhdDsKIAljb25zdCBzdHJ1Y3Qgc3RtcGVfa2V5cGFkX3ZhcmlhbnQgKnZhcmlhbnQgPSBrZXlwYWQtPnZhcmlhbnQ7CiAJc3RydWN0IHN0bXBlICpzdG1wZSA9IGtleXBhZC0+c3RtcGU7CiAJaW50IHJldDsKIAotCWlmIChwbGF0LT5kZWJvdW5jZV9tcyA+IFNUTVBFX0tFWVBBRF9NQVhfREVCT1VOQ0UpCisJaWYgKGtleXBhZC0+ZGVib3VuY2VfbXMgPiBTVE1QRV9LRVlQQURfTUFYX0RFQk9VTkNFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChwbGF0LT5zY2FuX2NvdW50ID4gU1RNUEVfS0VZUEFEX01BWF9TQ0FOX0NPVU5UKQorCWlmIChrZXlwYWQtPnNjYW5fY291bnQgPiBTVE1QRV9LRVlQQURfTUFYX1NDQU5fQ09VTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gc3RtcGVfZW5hYmxlKHN0bXBlLCBTVE1QRV9CTE9DS19LRVlQQUQpOwpAQCAtMjQ1LDcgKzI5MSw3IEBACiAKIAlyZXQgPSBzdG1wZV9zZXRfYml0cyhzdG1wZSwgU1RNUEVfS1BDX0NUUkxfTVNCLAogCQkJICAgICBTVE1QRV9LUENfQ1RSTF9NU0JfU0NBTl9DT1VOVCwKLQkJCSAgICAgcGxhdC0+c2Nhbl9jb3VudCA8PCA0KTsKKwkJCSAgICAga2V5cGFkLT5zY2FuX2NvdW50IDw8IDQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNTMsMTcgKzI5OSwxOCBAQAogCQkJICAgICAgU1RNUEVfS1BDX0NUUkxfTFNCX1NDQU4gfAogCQkJICAgICAgU1RNUEVfS1BDX0NUUkxfTFNCX0RFQk9VTkNFLAogCQkJICAgICAgU1RNUEVfS1BDX0NUUkxfTFNCX1NDQU4gfAotCQkJICAgICAgKHBsYXQtPmRlYm91bmNlX21zIDw8IDEpKTsKKwkJCSAgICAgIChrZXlwYWQtPmRlYm91bmNlX21zIDw8IDEpKTsKIH0KIAotc3RhdGljIHZvaWQgc3RtcGVfa2V5cGFkX2ZpbGxfdXNlZF9waW5zKHN0cnVjdCBzdG1wZV9rZXlwYWQgKmtleXBhZCkKK3N0YXRpYyB2b2lkIHN0bXBlX2tleXBhZF9maWxsX3VzZWRfcGlucyhzdHJ1Y3Qgc3RtcGVfa2V5cGFkICprZXlwYWQsCisJCQkJCXUzMiB1c2VkX3Jvd3MsIHUzMiB1c2VkX2NvbHMpCiB7CiAJaW50IHJvdywgY29sOwogCi0JZm9yIChyb3cgPSAwOyByb3cgPCBTVE1QRV9LRVlQQURfTUFYX1JPV1M7IHJvdysrKSB7Ci0JCWZvciAoY29sID0gMDsgY29sIDwgU1RNUEVfS0VZUEFEX01BWF9DT0xTOyBjb2wrKykgeworCWZvciAocm93ID0gMDsgcm93IDwgdXNlZF9yb3dzOyByb3crKykgeworCQlmb3IgKGNvbCA9IDA7IGNvbCA8IHVzZWRfY29sczsgY29sKyspIHsKIAkJCWludCBjb2RlID0gTUFUUklYX1NDQU5fQ09ERShyb3csIGNvbCwKLQkJCQkJCVNUTVBFX0tFWVBBRF9ST1dfU0hJRlQpOworCQkJCQkJICAgIFNUTVBFX0tFWVBBRF9ST1dfU0hJRlQpOwogCQkJaWYgKGtleXBhZC0+a2V5bWFwW2NvZGVdICE9IEtFWV9SRVNFUlZFRCkgewogCQkJCWtleXBhZC0+cm93cyB8PSAxIDw8IHJvdzsKIAkJCQlrZXlwYWQtPmNvbHMgfD0gMSA8PCBjb2w7CkBAIC0yNzIsNTEgKzMxOSwxNyBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19PRgotc3RhdGljIGNvbnN0IHN0cnVjdCBzdG1wZV9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqCi1zdG1wZV9rZXlwYWRfb2ZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7Ci0Jc3RydWN0IHN0bXBlX2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwbGF0OwotCi0JaWYgKCFucCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Ci0KLQlwbGF0ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwbGF0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwbGF0KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiZGVib3VuY2UtaW50ZXJ2YWwiLCAmcGxhdC0+ZGVib3VuY2VfbXMpOwotCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAic3Qsc2Nhbi1jb3VudCIsICZwbGF0LT5zY2FuX2NvdW50KTsKLQotCXBsYXQtPm5vX2F1dG9yZXBlYXQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJzdCxuby1hdXRvcmVwZWF0Iik7Ci0KLQlyZXR1cm4gcGxhdDsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBzdG1wZV9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqCi1zdG1wZV9rZXlwYWRfb2ZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3RtcGVfa2V5cGFkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHN0bXBlICpzdG1wZSA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKLQljb25zdCBzdHJ1Y3Qgc3RtcGVfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBsYXQ7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCBzdG1wZV9rZXlwYWQgKmtleXBhZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwl1MzIgcm93czsKKwl1MzIgY29sczsKIAlpbnQgZXJyb3I7CiAJaW50IGlycTsKIAotCXBsYXQgPSBzdG1wZS0+cGRhdGEtPmtleXBhZDsKLQlpZiAoIXBsYXQpIHsKLQkJcGxhdCA9IHN0bXBlX2tleXBhZF9vZl9wcm9iZSgmcGRldi0+ZGV2KTsKLQkJaWYgKElTX0VSUihwbGF0KSkKLQkJCXJldHVybiBQVFJfRVJSKHBsYXQpOwotCX0KLQogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApCiAJCXJldHVybiBpcnE7CkBAIC0zMjYsNiArMzM5LDEzIEBACiAJaWYgKCFrZXlwYWQpCiAJCXJldHVybiAtRU5PTUVNOwogCisJa2V5cGFkLT5zdG1wZSA9IHN0bXBlOworCWtleXBhZC0+dmFyaWFudCA9ICZzdG1wZV9rZXlwYWRfdmFyaWFudHNbc3RtcGUtPnBhcnRudW1dOworCisJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJkZWJvdW5jZS1pbnRlcnZhbCIsICZrZXlwYWQtPmRlYm91bmNlX21zKTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInN0LHNjYW4tY291bnQiLCAma2V5cGFkLT5zY2FuX2NvdW50KTsKKwlrZXlwYWQtPm5vX2F1dG9yZXBlYXQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJzdCxuby1hdXRvcmVwZWF0Iik7CisKIAlpbnB1dCA9IGRldm1faW5wdXRfYWxsb2NhdGVfZGV2aWNlKCZwZGV2LT5kZXYpOwogCWlmICghaW5wdXQpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzM0LDIzICszNTQsMjIgQEAKIAlpbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19JMkM7CiAJaW5wdXQtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCi0JZXJyb3IgPSBtYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcChwbGF0LT5rZXltYXBfZGF0YSwgTlVMTCwKLQkJCQkJICAgU1RNUEVfS0VZUEFEX01BWF9ST1dTLAotCQkJCQkgICBTVE1QRV9LRVlQQURfTUFYX0NPTFMsCisJZXJyb3IgPSBtYXRyaXhfa2V5cGFkX3BhcnNlX29mX3BhcmFtcygmcGRldi0+ZGV2LCAmcm93cywgJmNvbHMpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSBtYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcChOVUxMLCBOVUxMLCByb3dzLCBjb2xzLAogCQkJCQkgICBrZXlwYWQtPmtleW1hcCwgaW5wdXQpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCiAJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXQsIEVWX01TQywgTVNDX1NDQU4pOwotCWlmICghcGxhdC0+bm9fYXV0b3JlcGVhdCkKKwlpZiAoIWtleXBhZC0+bm9fYXV0b3JlcGVhdCkKIAkJX19zZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKIAotCXN0bXBlX2tleXBhZF9maWxsX3VzZWRfcGlucyhrZXlwYWQpOworCXN0bXBlX2tleXBhZF9maWxsX3VzZWRfcGlucyhrZXlwYWQsIHJvd3MsIGNvbHMpOwogCi0Ja2V5cGFkLT5zdG1wZSA9IHN0bXBlOwotCWtleXBhZC0+cGxhdCA9IHBsYXQ7CiAJa2V5cGFkLT5pbnB1dCA9IGlucHV0OwotCWtleXBhZC0+dmFyaWFudCA9ICZzdG1wZV9rZXlwYWRfdmFyaWFudHNbc3RtcGUtPnBhcnRudW1dOwogCiAJZXJyb3IgPSBzdG1wZV9rZXlwYWRfY2hpcF9pbml0KGtleXBhZCk7CiAJaWYgKGVycm9yIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKaW5kZXggZDEyNWEwMS4uZDg4ZDczZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKQEAgLTg4MSw2ICs4ODEsMzQgQEAKIAkJCQkJICB1bnNpZ25lZCBjaGFyICpwa3QsCiAJCQkJCSAgdW5zaWduZWQgY2hhciBwa3RfaWQpCiB7CisJLyoKKwkgKiAgICAgICBwYWNrZXQtZm10ICAgIGI3ICAgYjYgICAgYjUgICBiNCAgIGIzICAgYjIgICBiMSAgIGIwCisJICogQnl0ZTAgVFdPICYgTVVMVEkgICAgTCAgICAxICAgICBSICAgIE0gICAgMSBZMC0yIFkwLTEgWTAtMAorCSAqIEJ5dGUwIE5FVyAgICAgICAgICAgIEwgICAgMSAgWDEtNSAgICAxICAgIDEgWTAtMiBZMC0xIFkwLTAKKwkgKiBCeXRlMSAgICAgICAgICAgIFkwLTEwIFkwLTkgIFkwLTggWTAtNyBZMC02IFkwLTUgWTAtNCBZMC0zCisJICogQnl0ZTIgICAgICAgICAgICBYMC0xMSAgICAxIFgwLTEwIFgwLTkgWDAtOCBYMC03IFgwLTYgWDAtNQorCSAqIEJ5dGUzICAgICAgICAgICAgWDEtMTEgICAgMSAgWDAtNCBYMC0zICAgIDEgWDAtMiBYMC0xIFgwLTAKKwkgKiBCeXRlNCBUV08gICAgICAgIFgxLTEwICBUV08gIFgxLTkgWDEtOCBYMS03IFgxLTYgWDEtNSBYMS00CisJICogQnl0ZTQgTVVMVEkgICAgICBYMS0xMCAgVFdPICBYMS05IFgxLTggWDEtNyBYMS02IFkxLTUgICAgMQorCSAqIEJ5dGU0IE5FVyAgICAgICAgWDEtMTAgIFRXTyAgWDEtOSBYMS04IFgxLTcgWDEtNiAgICAwICAgIDAKKwkgKiBCeXRlNSBUV08gJiBORVcgIFkxLTEwICAgIDAgIFkxLTkgWTEtOCBZMS03IFkxLTYgWTEtNSBZMS00CisJICogQnl0ZTUgTVVMVEkgICAgICBZMS0xMCAgICAwICBZMS05IFkxLTggWTEtNyBZMS02ICBGLTEgIEYtMAorCSAqIEw6ICAgICAgICAgTGVmdCBidXR0b24KKwkgKiBSIC8gTTogICAgIE5vbi1jbGlja3BhZHM6IFJpZ2h0IC8gTWlkZGxlIGJ1dHRvbgorCSAqICAgICAgICAgICAgQ2xpY2twYWRzOiBXaGVuID4gMiBmaW5nZXJzIGFyZSBkb3duLCBhbmQgc29tZSBmaW5nZXJzCisJICogICAgICAgICAgICBhcmUgaW4gdGhlIGJ1dHRvbiBhcmVhLCB0aGVuIHRoZSAyIGNvb3JkaW5hdGVzIHJlcG9ydGVkCisJICogICAgICAgICAgICBhcmUgZm9yIGZpbmdlcnMgb3V0c2lkZSB0aGUgYnV0dG9uIGFyZWEgYW5kIHRoZXNlIHJlcG9ydAorCSAqICAgICAgICAgICAgZXh0cmEgZmluZ2VycyBiZWluZyBwcmVzZW50IGluIHRoZSByaWdodCAvIGxlZnQgYnV0dG9uCisJICogICAgICAgICAgICBhcmVhLiBOb3RlIHRoZXNlIGZpbmdlcnMgYXJlIG5vdCBhZGRlZCB0byB0aGUgRiBmaWVsZCEKKwkgKiAgICAgICAgICAgIHNvIGlmIGEgVFdPIHBhY2tldCBpcyByZWNlaXZlZCBhbmQgUiA9IDEgdGhlbiB0aGVyZSBhcmUKKwkgKiAgICAgICAgICAgIDMgZmluZ2VycyBkb3duLCBldGMuCisJICogVFdPOiAgICAgICAxOiBUd28gdG91Y2hlcyBwcmVzZW50LCBieXRlIDAvNC81IGFyZSBpbiBUV08gZm10CisJICogICAgICAgICAgICAwOiBJZiBieXRlIDQgYml0IDAgaXMgMSwgdGhlbiBieXRlIDAvNC81IGFyZSBpbiBNVUxUSSBmbXQKKwkgKiAgICAgICAgICAgICAgIG90aGVyd2lzZSBieXRlIDAgYml0IDQgbXVzdCBiZSBzZXQgYW5kIGJ5dGUgMC80LzUgYXJlCisJICogICAgICAgICAgICAgICBpbiBORVcgZm10CisJICogRjogICAgICAgICBOdW1iZXIgb2YgZmluZ2VycyAtIDMsIDAgbWVhbnMgMyBmaW5nZXJzLCAxIG1lYW5zIDQgLi4uCisJICovCisKIAltdFswXS54ID0gKChwa3RbMl0gJiAweDgwKSA8PCA0KTsKIAltdFswXS54IHw9ICgocGt0WzJdICYgMHgzRikgPDwgNSk7CiAJbXRbMF0ueCB8PSAoKHBrdFszXSAmIDB4MzApID4+IDEpOwpAQCAtOTE5LDE4ICs5NDcsMjEgQEAKIAogc3RhdGljIGludCBhbHBzX2dldF9tdF9jb3VudChzdHJ1Y3QgaW5wdXRfbXRfcG9zICptdCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgZmluZ2VycyA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RPVUNIRVMgJiYgbXRbaV0ueCAhPSAwICYmIG10W2ldLnkgIT0gMDsgaSsrKQotCQkvKiBlbXB0eSAqLzsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RPVUNIRVM7IGkrKykgeworCQlpZiAobXRbaV0ueCAhPSAwIHx8IG10W2ldLnkgIT0gMCkKKwkJCWZpbmdlcnMrKzsKKwl9CiAKLQlyZXR1cm4gaTsKKwlyZXR1cm4gZmluZ2VyczsKIH0KIAogc3RhdGljIGludCBhbHBzX2RlY29kZV9wYWNrZXRfdjcoc3RydWN0IGFscHNfZmllbGRzICpmLAogCQkJCSAgdW5zaWduZWQgY2hhciAqcCwKIAkJCQkgIHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQogeworCXN0cnVjdCBhbHBzX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwogCXVuc2lnbmVkIGNoYXIgcGt0X2lkOwogCiAJcGt0X2lkID0gYWxwc19nZXRfcGFja2V0X2lkX3Y3KHApOwpAQCAtOTM4LDE5ICs5NjksNTIgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKHBrdF9pZCA9PSBWN19QQUNLRVRfSURfVU5LTk9XTikKIAkJcmV0dXJuIC0xOworCS8qCisJICogTkVXIHBhY2tldHMgYXJlIHNlbmQgdG8gaW5kaWNhdGUgYSBkaXNjb250aW51aXR5IGluIHRoZSBmaW5nZXIKKwkgKiBjb29yZGluYXRlIHJlcG9ydGluZy4gU3BlY2lmaWNhbGx5IGEgZmluZ2VyIG1heSBoYXZlIG1vdmVkIGZyb20KKwkgKiBzbG90IDAgdG8gMSBvciB2aWNlIHZlcnNhLiBJTlBVVF9NVF9UUkFDSyB0YWtlcyBjYXJlIG9mIHRoaXMgZm9yCisJICogdXMuCisJICoKKwkgKiBORVcgcGFja2V0cyBoYXZlIDMgcHJvYmxlbXM6CisJICogMSkgVGhleSBkbyBub3QgY29udGFpbiBtaWRkbGUgLyByaWdodCBidXR0b24gaW5mbyAob24gbm9uIGNsaWNrcGFkcykKKwkgKiAgICB0aGlzIGNhbiBiZSB3b3JrZWQgYXJvdW5kIGJ5IHByZXNlcnZpbmcgdGhlIG9sZCBidXR0b24gc3RhdGUKKwkgKiAyKSBUaGV5IGRvIG5vdCBjb250YWluIGFuIGFjY3VyYXRlIGZpbmdlcmNvdW50LCBhbmQgdGhleSBhcmUKKwkgKiAgICB0eXBpY2FsbHkgc2VuZCB3aGVuIHRoZSBudW1iZXIgb2YgZmluZ2VycyBjaGFuZ2VzLiBXZSBjYW5ub3QgdXNlCisJICogICAgdGhlIG9sZCBmaW5nZXIgY291bnQgYXMgdGhhdCBtYXkgbWlzbWF0Y2ggd2l0aCB0aGUgYW1vdW50IG9mCisJICogICAgdG91Y2ggY29vcmRpbmF0ZXMgd2UndmUgYXZhaWxhYmxlIGluIHRoZSBORVcgcGFja2V0CisJICogMykgVGhlaXIgeCBkYXRhIGZvciB0aGUgc2Vjb25kIHRvdWNoIGlzIGluYWNjdXJhdGUgbGVhZGluZyB0bworCSAqICAgIGEgcG9zc2libGUganVtcCBvZiB0aGUgeCBjb29yZGluYXRlIGJ5IDE2IHVuaXRzIHdoZW4gdGhlIGZpcnN0CisJICogICAgbm9uIE5FVyBwYWNrZXQgY29tZXMgaW4KKwkgKiBTaW5jZSBwcm9ibGVtcyAyICYgMyBjYW5ub3QgYmUgd29ya2VkIGFyb3VuZCwganVzdCBpZ25vcmUgdGhlbS4KKwkgKi8KKwlpZiAocGt0X2lkID09IFY3X1BBQ0tFVF9JRF9ORVcpCisJCXJldHVybiAxOwogCiAJYWxwc19nZXRfZmluZ2VyX2Nvb3JkaW5hdGVfdjcoZi0+bXQsIHAsIHBrdF9pZCk7CiAKLQlpZiAocGt0X2lkID09IFY3X1BBQ0tFVF9JRF9UV08gfHwgcGt0X2lkID09IFY3X1BBQ0tFVF9JRF9NVUxUSSkgewotCQlmLT5sZWZ0ID0gKHBbMF0gJiAweDgwKSA+PiA3OworCWlmIChwa3RfaWQgPT0gVjdfUEFDS0VUX0lEX1RXTykKKwkJZi0+ZmluZ2VycyA9IGFscHNfZ2V0X210X2NvdW50KGYtPm10KTsKKwllbHNlIC8qIHBrdF9pZCA9PSBWN19QQUNLRVRfSURfTVVMVEkgKi8KKwkJZi0+ZmluZ2VycyA9IDMgKyAocFs1XSAmIDB4MDMpOworCisJZi0+bGVmdCA9IChwWzBdICYgMHg4MCkgPj4gNzsKKwlpZiAocHJpdi0+ZmxhZ3MgJiBBTFBTX0JVVFRPTlBBRCkgeworCQlpZiAocFswXSAmIDB4MjApCisJCQlmLT5maW5nZXJzKys7CisJCWlmIChwWzBdICYgMHgxMCkKKwkJCWYtPmZpbmdlcnMrKzsKKwl9IGVsc2UgewogCQlmLT5yaWdodCA9IChwWzBdICYgMHgyMCkgPj4gNTsKIAkJZi0+bWlkZGxlID0gKHBbMF0gJiAweDEwKSA+PiA0OwogCX0KIAotCWlmIChwa3RfaWQgPT0gVjdfUEFDS0VUX0lEX1RXTykKLQkJZi0+ZmluZ2VycyA9IGFscHNfZ2V0X210X2NvdW50KGYtPm10KTsKLQllbHNlIGlmIChwa3RfaWQgPT0gVjdfUEFDS0VUX0lEX01VTFRJKQotCQlmLT5maW5nZXJzID0gMyArIChwWzVdICYgMHgwMyk7CisJLyogU29tZXRpbWVzIGEgc2luZ2xlIHRvdWNoIGlzIHJlcG9ydGVkIGluIG10WzFdIHJhdGhlciB0aGVuIG10WzBdICovCisJaWYgKGYtPmZpbmdlcnMgPT0gMSAmJiBmLT5tdFswXS54ID09IDAgJiYgZi0+bXRbMF0ueSA9PSAwKSB7CisJCWYtPm10WzBdLnggPSBmLT5tdFsxXS54OworCQlmLT5tdFswXS55ID0gZi0+bXRbMV0ueTsKKwkJZi0+bXRbMV0ueCA9IDA7CisJCWYtPm10WzFdLnkgPSAwOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5jCmluZGV4IGYyYjk3ODAuLjZlMjI2ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMKQEAgLTEwOTcsNiArMTA5Nyw4IEBACiAgKiBBc3VzIFVYMzEgICAgICAgICAgICAgICAweDM2MWYwMCAgICAgICAgMjAsIDE1LCAwZSAgICAgIGNsaWNrcGFkCiAgKiBBc3VzIFVYMzJWRCAgICAgICAgICAgICAweDM2MWYwMiAgICAgICAgMDAsIDE1LCAwZSAgICAgIGNsaWNrcGFkCiAgKiBBdmF0YXIgQVZJVS0xNDVBMiAgICAgICAweDM2MWYwMCAgICAgICAgPyAgICAgICAgICAgICAgIGNsaWNrcGFkCisgKiBGdWppdHN1IExJRkVCT09LIEU1NDQgICAweDQ3MGYwMCAgICAgICAgZDAsIDEyLCAwOSAgICAgIDIgaHcgYnV0dG9ucworICogRnVqaXRzdSBMSUZFQk9PSyBFNTU0ICAgMHg1NzBmMDEgICAgICAgIDQwLCAxNCwgMGMgICAgICAyIGh3IGJ1dHRvbnMKICAqIEZ1aml0c3UgSDczMCAgICAgICAgICAgIDB4NTcwZjAwICAgICAgICBjMCwgMTQsIDBjICAgICAgMyBodyBidXR0b25zICgqKikKICAqIEdpZ2FieXRlIFUyNDQyICAgICAgICAgIDB4NDUwZjAxICAgICAgICA1OCwgMTcsIDBjICAgICAgMiBodyBidXR0b25zCiAgKiBMZW5vdm8gTDQzMCAgICAgICAgICAgICAweDM1MGYwMiAgICAgICAgYjksIDE1LCAwYyAgICAgIDIgaHcgYnV0dG9ucyAoKikKQEAgLTE0NzUsNiArMTQ3NywyMCBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJDRUxTSVVTIEg3MzAiKSwKIAkJfSwKIAl9LAorCXsKKwkJLyogRnVqaXRzdSBMSUZFQk9PSyBFNTU0ICBkb2VzIG5vdCB3b3JrIHdpdGggY3JjX2VuYWJsZWQgPT0gMCAqLworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTElGRUJPT0sgRTU1NCIpLAorCQl9LAorCX0sCisJeworCQkvKiBGdWppdHN1IExJRkVCT09LIEU1NDQgIGRvZXMgbm90IHdvcmsgd2l0aCBjcmNfZW5hYmxlZCA9PSAwICovCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJMSUZFQk9PSyBFNTQ0IiksCisJCX0sCisJfSwKICNlbmRpZgogCXsgfQogfTsKQEAgLTE1MjAsNiArMTUzNiw4IEBACiAJCWNhc2UgNzoKIAkJY2FzZSA4OgogCQljYXNlIDk6CisJCWNhc2UgMTA6CisJCWNhc2UgMTM6CiAJCQlldGQtPmh3X3ZlcnNpb24gPSA0OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBmOTQ3MjkyLi4yM2UyNmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTEzNSw4ICsxMzUsOSBAQAogCQkxMjMyLCA1NzEwLCAxMTU2LCA0Njk2CiAJfSwKIAl7Ci0JCShjb25zdCBjaGFyICogY29uc3QgW10peyJMRU4wMDM0IiwgIkxFTjAwMzYiLCAiTEVOMDAzOSIsCi0JCQkJCSJMRU4yMDAyIiwgIkxFTjIwMDQiLCBOVUxMfSwKKwkJKGNvbnN0IGNoYXIgKiBjb25zdCBbXSl7IkxFTjAwMzQiLCAiTEVOMDAzNiIsICJMRU4wMDM3IiwKKwkJCQkJIkxFTjAwMzkiLCAiTEVOMjAwMiIsICJMRU4yMDA0IiwKKwkJCQkJTlVMTH0sCiAJCTEwMjQsIDUxMTIsIDIwMjQsIDQ4MzIKIAl9LAogCXsKQEAgLTE2NSw3ICsxNjYsNyBAQAogCSJMRU4wMDM0IiwgLyogVDQzMXMsIEw0NDAsIEw1NDAsIFQ1NDAsIFc1NDAsIFgxIENhcmJvbiAybmQgKi8KIAkiTEVOMDAzNSIsIC8qIFgyNDAgKi8KIAkiTEVOMDAzNiIsIC8qIFQ0NDAgKi8KLQkiTEVOMDAzNyIsCisJIkxFTjAwMzciLCAvKiBYMSBDYXJib24gMm5kICovCiAJIkxFTjAwMzgiLAogCSJMRU4wMDM5IiwgLyogVDQ0MHMgKi8KIAkiTEVOMDA0MSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCmluZGV4IDMwYzhiNjkuLjM1NGQ0N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCkBAIC0yMjcsNiArMjI3LDcgQEAKIFRSQUNLUE9JTlRfSU5UX0FUVFIodXB0aHJlc2gsIFRQX1VQX1RIUkVTSCwgVFBfREVGX1VQX1RIUkVTSCk7CiBUUkFDS1BPSU5UX0lOVF9BVFRSKHp0aW1lLCBUUF9aX1RJTUUsIFRQX0RFRl9aX1RJTUUpOwogVFJBQ0tQT0lOVF9JTlRfQVRUUihqZW5rcywgVFBfSkVOS1NfQ1VSViwgVFBfREVGX0pFTktTX0NVUlYpOworVFJBQ0tQT0lOVF9JTlRfQVRUUihkcmlmdF90aW1lLCBUUF9EUklGVF9USU1FLCBUUF9ERUZfRFJJRlRfVElNRSk7CiAKIFRSQUNLUE9JTlRfQklUX0FUVFIocHJlc3NfdG9fc2VsZWN0LCBUUF9UT0dHTEVfUFRTT04sIFRQX01BU0tfUFRTT04sIDAsCiAJCSAgICBUUF9ERUZfUFRTT04pOwpAQCAtMjQ2LDYgKzI0Nyw3IEBACiAJJnBzbW91c2VfYXR0cl91cHRocmVzaC5kYXR0ci5hdHRyLAogCSZwc21vdXNlX2F0dHJfenRpbWUuZGF0dHIuYXR0ciwKIAkmcHNtb3VzZV9hdHRyX2plbmtzLmRhdHRyLmF0dHIsCisJJnBzbW91c2VfYXR0cl9kcmlmdF90aW1lLmRhdHRyLmF0dHIsCiAJJnBzbW91c2VfYXR0cl9wcmVzc190b19zZWxlY3QuZGF0dHIuYXR0ciwKIAkmcHNtb3VzZV9hdHRyX3NraXBiYWNrLmRhdHRyLmF0dHIsCiAJJnBzbW91c2VfYXR0cl9leHRfZGV2LmRhdHRyLmF0dHIsCkBAIC0zMTIsNiArMzE0LDcgQEAKIAlUUkFDS1BPSU5UX1VQREFURShpbl9wb3dlcl9vbl9zdGF0ZSwgcHNtb3VzZSwgdHAsIHVwdGhyZXNoKTsKIAlUUkFDS1BPSU5UX1VQREFURShpbl9wb3dlcl9vbl9zdGF0ZSwgcHNtb3VzZSwgdHAsIHp0aW1lKTsKIAlUUkFDS1BPSU5UX1VQREFURShpbl9wb3dlcl9vbl9zdGF0ZSwgcHNtb3VzZSwgdHAsIGplbmtzKTsKKwlUUkFDS1BPSU5UX1VQREFURShpbl9wb3dlcl9vbl9zdGF0ZSwgcHNtb3VzZSwgdHAsIGRyaWZ0X3RpbWUpOwogCiAJLyogdG9nZ2xlcyAqLwogCVRSQUNLUE9JTlRfVVBEQVRFKGluX3Bvd2VyX29uX3N0YXRlLCBwc21vdXNlLCB0cCwgcHJlc3NfdG9fc2VsZWN0KTsKQEAgLTMzMiw2ICszMzUsNyBAQAogCVRSQUNLUE9JTlRfU0VUX1BPV0VSX09OX0RFRkFVTFQodHAsIHVwdGhyZXNoKTsKIAlUUkFDS1BPSU5UX1NFVF9QT1dFUl9PTl9ERUZBVUxUKHRwLCB6dGltZSk7CiAJVFJBQ0tQT0lOVF9TRVRfUE9XRVJfT05fREVGQVVMVCh0cCwgamVua3MpOworCVRSQUNLUE9JTlRfU0VUX1BPV0VSX09OX0RFRkFVTFQodHAsIGRyaWZ0X3RpbWUpOwogCVRSQUNLUE9JTlRfU0VUX1BPV0VSX09OX0RFRkFVTFQodHAsIGluZXJ0aWEpOwogCiAJLyogdG9nZ2xlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmggYi9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuaAppbmRleCBlY2QwNTQ3Li41NjE3ZWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuaApAQCAtNzAsNiArNzAsOSBAQAogI2RlZmluZSBUUF9VUF9USFJFU0gJCTB4NUEJLyogVXNlZCB0byBnZW5lcmF0ZSBhICdjbGljaycgb24gWi1heGlzICovCiAjZGVmaW5lIFRQX1pfVElNRQkJMHg1RQkvKiBIb3cgc2hhcnAgb2YgYSBwcmVzcyAqLwogI2RlZmluZSBUUF9KRU5LU19DVVJWCQkweDVECS8qIE1pbmltdW0gY3VydmF0dXJlIGZvciBkb3VibGUgY2xpY2sgKi8KKyNkZWZpbmUgVFBfRFJJRlRfVElNRQkJMHg1RgkvKiBIb3cgbG9uZyBhICdoYW5kcyBvZmYnIGNvbmRpdGlvbiAqLworCQkJCQkvKiBtdXN0IGxhc3QgKHgqMTA3bXMpIGZvciBkcmlmdCAqLworCQkJCQkvKiBjb3JyZWN0aW9uIHRvIG9jY3VyICovCiAKIC8qCiAgKiBUb2dnbGluZyBGbGFnIGJpdHMKQEAgLTEyMCw2ICsxMjMsNyBAQAogI2RlZmluZSBUUF9ERUZfVVBfVEhSRVNICTB4RkYKICNkZWZpbmUgVFBfREVGX1pfVElNRQkJMHgyNgogI2RlZmluZSBUUF9ERUZfSkVOS1NfQ1VSVgkweDg3CisjZGVmaW5lIFRQX0RFRl9EUklGVF9USU1FCTB4MDUKIAogLyogVG9nZ2xlcyAqLwogI2RlZmluZSBUUF9ERUZfTUIJCTB4MDAKQEAgLTEzNyw2ICsxNDEsNyBAQAogCXVuc2lnbmVkIGNoYXIgZHJhZ2h5cywgbWluZHJhZzsKIAl1bnNpZ25lZCBjaGFyIHRocmVzaCwgdXB0aHJlc2g7CiAJdW5zaWduZWQgY2hhciB6dGltZSwgamVua3M7CisJdW5zaWduZWQgY2hhciBkcmlmdF90aW1lOwogCiAJLyogdG9nZ2xlcyAqLwogCXVuc2lnbmVkIGNoYXIgcHJlc3NfdG9fc2VsZWN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggYzY2ZDFiNS4uYzExNTU2NTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKQEAgLTE1Miw2ICsxNTIsMTQgQEAKIAkJfSwKIAl9LAogCXsKKwkJLyogTWVkaW9uIEFrb3lhIEU3MjI1ICovCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTWVkaW9uIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFrb3lhIEU3MjI1IiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIjEuMCIpLAorCQl9LAorCX0sCisJewogCQkvKiBCbHVlIEZCNTYwMSAqLwogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgImJsdWUiKSwKQEAgLTQxNSw2ICs0MjMsMTMgQEAKIAkJfSwKIAl9LAogCXsKKwkJLyogQWNlciBBc3BpcmUgNzczOCAqLworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFjZXIiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQXNwaXJlIDc3MzgiKSwKKwkJfSwKKwl9LAorCXsKIAkJLyogR2VyaWNvbSBCZWxsYWdpbyAqLwogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkdlcmljb20iKSwKQEAgLTc0NSw2ICs3NjAsMzUgQEAKIAl7IH0KIH07CiAKKy8qCisgKiBTb21lIGxhcHRvcHMgbmVlZCBrZXlib2FyZCByZXNldCBiZWZvcmUgcHJvYmluZyBmb3IgdGhlIHRyYWNrcGFkIHRvIGdldAorICogaXQgZGV0ZWN0ZWQsIGluaXRpYWxpc2VkICYgZmluYWxseSB3b3JrLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0Y29uc3QgaTgwNDJfZG1pX2tiZHJlc2V0X3RhYmxlW10gPSB7CisJeworCQkvKiBHaWdhYnl0ZSBQMzUgdjIgLSBFbGFudGVjaCB0b3VjaHBhZCAqLworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkdJR0FCWVRFIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlAzNVYyIiksCisJCX0sCisJfSwKKwkJeworCQkvKiBBb3J1cyBicmFuZGVkIEdpZ2FieXRlIFgzIFBsdXMgLSBFbGFudGVjaCB0b3VjaHBhZCAqLworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkdJR0FCWVRFIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlgzIiksCisJCX0sCisJfSwKKwl7CisJCS8qIEdpZ2FieXRlIFAzNCAtIEVsYW50ZWNoIHRvdWNocGFkICovCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiR0lHQUJZVEUiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUDM0IiksCisJCX0sCisJfSwKKwl7IH0KK307CisKICNlbmRpZiAvKiBDT05GSUdfWDg2ICovCiAKICNpZmRlZiBDT05GSUdfUE5QCkBAIC0xMDQwLDYgKzEwODQsOSBAQAogCWlmIChkbWlfY2hlY2tfc3lzdGVtKGk4MDQyX2RtaV9kcml0ZWtfdGFibGUpKQogCQlpODA0Ml9kcml0ZWsgPSB0cnVlOwogCisJaWYgKGRtaV9jaGVja19zeXN0ZW0oaTgwNDJfZG1pX2tiZHJlc2V0X3RhYmxlKSkKKwkJaTgwNDJfa2JkcmVzZXQgPSB0cnVlOworCiAJLyoKIAkgKiBBMjAgd2FzIGFscmVhZHkgZW5hYmxlZCBkdXJpbmcgZWFybHkga2VybmVsIGluaXQuIEJ1dCBzb21lIGJ1Z2d5CiAJICogQklPU2VzIChpbiBNU0kgTGFwdG9wcykgcmVxdWlyZSBBMjAgdG8gYmUgZW5hYmxlZCB1c2luZyA4MDQyIHRvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKaW5kZXggOTI0ZTRiZi4uOTg2YTcxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwpAQCAtNjcsNiArNjcsMTAgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChub3RpbWVvdXQsIGk4MDQyX25vdGltZW91dCwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vdGltZW91dCwgIklnbm9yZSB0aW1lb3V0cyBzaWduYWxsZWQgYnkgaTgwNDIiKTsKIAorc3RhdGljIGJvb2wgaTgwNDJfa2JkcmVzZXQ7Cittb2R1bGVfcGFyYW1fbmFtZWQoa2JkcmVzZXQsIGk4MDQyX2tiZHJlc2V0LCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0Moa2JkcmVzZXQsICJSZXNldCBkZXZpY2UgY29ubmVjdGVkIHRvIEtCRCBwb3J0Iik7CisKICNpZmRlZiBDT05GSUdfWDg2CiBzdGF0aWMgYm9vbCBpODA0Ml9kcml0ZWs7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZHJpdGVrLCBpODA0Ml9kcml0ZWssIGJvb2wsIDApOwpAQCAtNzkwLDYgKzc5NCwxNiBAQAogCQlyZXR1cm4gLTE7CiAKIC8qCisgKiBSZXNldCBrZXlib2FyZCAobmVlZGVkIG9uIHNvbWUgbGFwdG9wcyB0byBzdWNjZXNzZnVsbHkgZGV0ZWN0CisgKiB0b3VjaHBhZCwgZS5nLiwgc29tZSBHaWdhYnl0ZSBsYXB0b3AgbW9kZWxzIHdpdGggRWxhbnRlY2gKKyAqIHRvdWNocGFkcykuCisgKi8KKwlpZiAoaTgwNDJfa2JkcmVzZXQpIHsKKwkJcHJfd2FybigiQXR0ZW1wdGluZyB0byByZXNldCBkZXZpY2UgY29ubmVjdGVkIHRvIEtCRCBwb3J0XG4iKTsKKwkJaTgwNDJfa2JkX3dyaXRlKE5VTEwsICh1bnNpZ25lZCBjaGFyKSAweGZmKTsKKwl9CisKKy8qCiAgKiBUZXN0IEFVWCBJUlEgZGVsaXZlcnkgdG8gbWFrZSBzdXJlIEJJT1MgZGlkIG5vdCBncmFiIHRoZSBJUlEgYW5kCiAgKiB1c2VkIGl0IGZvciBhIFBDSSBjYXJkIG9yIHNvbWV0aGlnIGVsc2UuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfbXh0X3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX214dF90cy5jCmluZGV4IGJiMDcwMjAuLjk1ZWU5MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfbXh0X3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF9teHRfdHMuYwpAQCAtOTksMTMgKzk5LDkgQEAKICNkZWZpbmUgTVhUX1Q2X1NUQVRVU19DT01TRVJSCSgxIDw8IDIpCiAKIC8qIE1YVF9HRU5fUE9XRVJfVDcgZmllbGQgKi8KLXN0cnVjdCB0N19jb25maWcgewotCXU4IGlkbGU7Ci0JdTggYWN0aXZlOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBNWFRfUE9XRVJfQ0ZHX1JVTgkJMAotI2RlZmluZSBNWFRfUE9XRVJfQ0ZHX0RFRVBTTEVFUAkJMQorI2RlZmluZSBNWFRfUE9XRVJfSURMRUFDUUlOVAkwCisjZGVmaW5lIE1YVF9QT1dFUl9BQ1RWQUNRSU5UCTEKKyNkZWZpbmUgTVhUX1BPV0VSX0FDVFYySURMRVRPCTIKIAogLyogTVhUX0dFTl9BQ1FVSVJFX1Q4IGZpZWxkICovCiAjZGVmaW5lIE1YVF9BQ1FVSVJFX0NIUkdUSU1FCTAKQEAgLTExNyw2ICsxMTMsNyBAQAogI2RlZmluZSBNWFRfQUNRVUlSRV9BVENIQ0FMU1RIUgk3CiAKIC8qIE1YVF9UT1VDSF9NVUxUSV9UOSBmaWVsZCAqLworI2RlZmluZSBNWFRfVE9VQ0hfQ1RSTAkJMAogI2RlZmluZSBNWFRfVDlfT1JJRU5UCQk5CiAjZGVmaW5lIE1YVF9UOV9SQU5HRQkJMTgKIApAQCAtMjU2LDcgKzI1Myw2IEBACiAJYm9vbCB1cGRhdGVfaW5wdXQ7CiAJdTggbGFzdF9tZXNzYWdlX2NvdW50OwogCXU4IG51bV90b3VjaGlkczsKLQlzdHJ1Y3QgdDdfY29uZmlnIHQ3X2NmZzsKIAogCS8qIENhY2hlZCBwYXJhbWV0ZXJzIGZyb20gb2JqZWN0IHRhYmxlICovCiAJdTE2IFQ1X2FkZHJlc3M7CkBAIC02NzIsNiArNjY4LDIwIEBACiAJZGF0YS0+dDZfc3RhdHVzID0gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IG14dF93cml0ZV9vYmplY3Qoc3RydWN0IG14dF9kYXRhICpkYXRhLAorCQkJCSB1OCB0eXBlLCB1OCBvZmZzZXQsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgbXh0X29iamVjdCAqb2JqZWN0OworCXUxNiByZWc7CisKKwlvYmplY3QgPSBteHRfZ2V0X29iamVjdChkYXRhLCB0eXBlKTsKKwlpZiAoIW9iamVjdCB8fCBvZmZzZXQgPj0gbXh0X29ial9zaXplKG9iamVjdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnID0gb2JqZWN0LT5zdGFydF9hZGRyZXNzOworCXJldHVybiBteHRfd3JpdGVfcmVnKGRhdGEtPmNsaWVudCwgcmVnICsgb2Zmc2V0LCB2YWwpOworfQorCiBzdGF0aWMgdm9pZCBteHRfaW5wdXRfYnV0dG9uKHN0cnVjdCBteHRfZGF0YSAqZGF0YSwgdTggKm1lc3NhZ2UpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBkYXRhLT5pbnB1dF9kZXY7CkBAIC0xNzQyLDYwICsxNzUyLDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgbXh0X3NldF90N19wb3dlcl9jZmcoc3RydWN0IG14dF9kYXRhICpkYXRhLCB1OCBzbGVlcCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+Y2xpZW50LT5kZXY7Ci0JaW50IGVycm9yOwotCXN0cnVjdCB0N19jb25maWcgKm5ld19jb25maWc7Ci0Jc3RydWN0IHQ3X2NvbmZpZyBkZWVwc2xlZXAgPSB7IC5hY3RpdmUgPSAwLCAuaWRsZSA9IDAgfTsKLQotCWlmIChzbGVlcCA9PSBNWFRfUE9XRVJfQ0ZHX0RFRVBTTEVFUCkKLQkJbmV3X2NvbmZpZyA9ICZkZWVwc2xlZXA7Ci0JZWxzZQotCQluZXdfY29uZmlnID0gJmRhdGEtPnQ3X2NmZzsKLQotCWVycm9yID0gX19teHRfd3JpdGVfcmVnKGRhdGEtPmNsaWVudCwgZGF0YS0+VDdfYWRkcmVzcywKLQkJCQlzaXplb2YoZGF0YS0+dDdfY2ZnKSwgbmV3X2NvbmZpZyk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlkZXZfZGJnKGRldiwgIlNldCBUNyBBQ1RWOiVkIElETEU6JWRcbiIsCi0JCW5ld19jb25maWctPmFjdGl2ZSwgbmV3X2NvbmZpZy0+aWRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteHRfaW5pdF90N19wb3dlcl9jZmcoc3RydWN0IG14dF9kYXRhICpkYXRhKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5jbGllbnQtPmRldjsKLQlpbnQgZXJyb3I7Ci0JYm9vbCByZXRyeSA9IGZhbHNlOwotCi1yZWNoZWNrOgotCWVycm9yID0gX19teHRfcmVhZF9yZWcoZGF0YS0+Y2xpZW50LCBkYXRhLT5UN19hZGRyZXNzLAotCQkJCXNpemVvZihkYXRhLT50N19jZmcpLCAmZGF0YS0+dDdfY2ZnKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWlmIChkYXRhLT50N19jZmcuYWN0aXZlID09IDAgfHwgZGF0YS0+dDdfY2ZnLmlkbGUgPT0gMCkgewotCQlpZiAoIXJldHJ5KSB7Ci0JCQlkZXZfZGJnKGRldiwgIlQ3IGNmZyB6ZXJvLCByZXNldHRpbmdcbiIpOwotCQkJbXh0X3NvZnRfcmVzZXQoZGF0YSk7Ci0JCQlyZXRyeSA9IHRydWU7Ci0JCQlnb3RvIHJlY2hlY2s7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZGJnKGRldiwgIlQ3IGNmZyB6ZXJvIGFmdGVyIHJlc2V0LCBvdmVycmlkaW5nXG4iKTsKLQkJCWRhdGEtPnQ3X2NmZy5hY3RpdmUgPSAyMDsKLQkJCWRhdGEtPnQ3X2NmZy5pZGxlID0gMTAwOwotCQkJcmV0dXJuIG14dF9zZXRfdDdfcG93ZXJfY2ZnKGRhdGEsIE1YVF9QT1dFUl9DRkdfUlVOKTsKLQkJfQotCX0KLQotCWRldl9kYmcoZGV2LCAiSW5pdGlhbGl6ZWQgcG93ZXIgY2ZnOiBBQ1RWICVkLCBJRExFICVkXG4iLAotCQlkYXRhLT50N19jZmcuYWN0aXZlLCBkYXRhLT50N19jZmcuaWRsZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgbXh0X2NvbmZpZ3VyZV9vYmplY3RzKHN0cnVjdCBteHRfZGF0YSAqZGF0YSwKIAkJCQkgY29uc3Qgc3RydWN0IGZpcm13YXJlICpjZmcpCiB7CkBAIC0xODA5LDEyICsxNzY1LDYgQEAKIAkJCWRldl93YXJuKGRldiwgIkVycm9yICVkIHVwZGF0aW5nIGNvbmZpZ1xuIiwgZXJyb3IpOwogCX0KIAotCWVycm9yID0gbXh0X2luaXRfdDdfcG93ZXJfY2ZnKGRhdGEpOwotCWlmIChlcnJvcikgewotCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHBvd2VyIGNmZ1xuIik7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KIAllcnJvciA9IG14dF9pbml0aWFsaXplX3Q5X2lucHV0X2RldmljZShkYXRhKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTIwOTMsMTUgKzIwNDMsMTYgQEAKIAogc3RhdGljIHZvaWQgbXh0X3N0YXJ0KHN0cnVjdCBteHRfZGF0YSAqZGF0YSkKIHsKLQlteHRfc2V0X3Q3X3Bvd2VyX2NmZyhkYXRhLCBNWFRfUE9XRVJfQ0ZHX1JVTik7Ci0KLQkvKiBSZWNhbGlicmF0ZSBzaW5jZSBjaGlwIGhhcyBiZWVuIGluIGRlZXAgc2xlZXAgKi8KLQlteHRfdDZfY29tbWFuZChkYXRhLCBNWFRfQ09NTUFORF9DQUxJQlJBVEUsIDEsIGZhbHNlKTsKKwkvKiBUb3VjaCBlbmFibGUgKi8KKwlteHRfd3JpdGVfb2JqZWN0KGRhdGEsCisJCQlNWFRfVE9VQ0hfTVVMVElfVDksIE1YVF9UT1VDSF9DVFJMLCAweDgzKTsKIH0KIAogc3RhdGljIHZvaWQgbXh0X3N0b3Aoc3RydWN0IG14dF9kYXRhICpkYXRhKQogewotCW14dF9zZXRfdDdfcG93ZXJfY2ZnKGRhdGEsIE1YVF9QT1dFUl9DRkdfREVFUFNMRUVQKTsKKwkvKiBUb3VjaCBkaXNhYmxlICovCisJbXh0X3dyaXRlX29iamVjdChkYXRhLAorCQkJTVhUX1RPVUNIX01VTFRJX1Q5LCBNWFRfVE9VQ0hfQ1RSTCwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgbXh0X2lucHV0X29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQpAQCAtMjI2Niw2ICsyMjE3LDggQEAKIAlzdHJ1Y3QgbXh0X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBkYXRhLT5pbnB1dF9kZXY7CiAKKwlteHRfc29mdF9yZXNldChkYXRhKTsKKwogCW11dGV4X2xvY2soJmlucHV0X2Rldi0+bXV0ZXgpOwogCiAJaWYgKGlucHV0X2Rldi0+dXNlcnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VkdC1mdDV4MDYuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWR0LWZ0NXgwNi5jCmluZGV4IDM3OTNmY2MuLmQ0YzI0ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWR0LWZ0NXgwNi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWR0LWZ0NXgwNi5jCkBAIC04NTAsOSArODUwLDExIEBACiB9CiAKICNkZWZpbmUgRURUX0FUVFJfQ0hFQ0tTRVQobmFtZSwgcmVnKSBcCitkbyB7CQkJCQkJCQlcCiAJaWYgKHBkYXRhLT5uYW1lID49IGVkdF9mdDV4MDZfYXR0cl8jI25hbWUubGltaXRfbG93ICYmCQlcCiAJICAgIHBkYXRhLT5uYW1lIDw9IGVkdF9mdDV4MDZfYXR0cl8jI25hbWUubGltaXRfaGlnaCkJCVwKLQkJZWR0X2Z0NXgwNl9yZWdpc3Rlcl93cml0ZSh0c2RhdGEsIHJlZywgcGRhdGEtPm5hbWUpCisJCWVkdF9mdDV4MDZfcmVnaXN0ZXJfd3JpdGUodHNkYXRhLCByZWcsIHBkYXRhLT5uYW1lKTsJXAorfSB3aGlsZSAoMCkKIAogI2RlZmluZSBFRFRfR0VUX1BST1AobmFtZSwgcmVnKSB7CQkJCVwKIAl1MzIgdmFsOwkJCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYwppbmRleCAxMjMyMzM2Li40MGRmYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jCkBAIC00MDI5LDE0ICs0MDI5LDYgQEAKIAlpZiAoYWN0aW9uICE9IEJVU19OT1RJRllfUkVNT1ZFRF9ERVZJQ0UpCiAJCXJldHVybiAwOwogCi0JLyoKLQkgKiBJZiB0aGUgZGV2aWNlIGlzIHN0aWxsIGF0dGFjaGVkIHRvIGEgZGV2aWNlIGRyaXZlciB3ZSBjYW4ndAotCSAqIHRlYXIgZG93biB0aGUgZG9tYWluIHlldCBhcyBETUEgbWFwcGluZ3MgbWF5IHN0aWxsIGJlIGluIHVzZS4KLQkgKiBXYWl0IGZvciB0aGUgQlVTX05PVElGWV9VTkJPVU5EX0RSSVZFUiBldmVudCB0byBkbyB0aGF0LgotCSAqLwotCWlmIChhY3Rpb24gPT0gQlVTX05PVElGWV9ERUxfREVWSUNFICYmIGRldi0+ZHJpdmVyICE9IE5VTEwpCi0JCXJldHVybiAwOwotCiAJZG9tYWluID0gZmluZF9kb21haW4oZGV2KTsKIAlpZiAoIWRvbWFpbikKIAkJcmV0dXJuIDA7CkBAIC00NDI4LDYgKzQ0MjAsMTAgQEAKIAkJCQlkb21haW5fcmVtb3ZlX29uZV9kZXZfaW5mbyhvbGRfZG9tYWluLCBkZXYpOwogCQkJZWxzZQogCQkJCWRvbWFpbl9yZW1vdmVfZGV2X2luZm8ob2xkX2RvbWFpbik7CisKKwkJCWlmICghZG9tYWluX3R5cGVfaXNfdm1fb3Jfc2kob2xkX2RvbWFpbikgJiYKKwkJCSAgICAgbGlzdF9lbXB0eSgmb2xkX2RvbWFpbi0+ZGV2aWNlcykpCisJCQkJZG9tYWluX2V4aXQob2xkX2RvbWFpbik7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaXBtbXUtdm1zYS5jIGIvZHJpdmVycy9pb21tdS9pcG1tdS12bXNhLmMKaW5kZXggNjhkZmIwZi4uNzQ4NjkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9pcG1tdS12bXNhLmMKKysrIGIvZHJpdmVycy9pb21tdS9pcG1tdS12bXNhLmMKQEAgLTU1OCw3ICs1NTgsNyBAQAogCiBzdGF0aWMgdTY0IGlwbW11X3BhZ2VfcHJvdCh1bnNpZ25lZCBpbnQgcHJvdCwgdTY0IHR5cGUpCiB7Ci0JdTY0IHBncHJvdCA9IEFSTV9WTVNBX1BURV9YTiB8IEFSTV9WTVNBX1BURV9uRyB8IEFSTV9WTVNBX1BURV9BRgorCXU2NCBwZ3Byb3QgPSBBUk1fVk1TQV9QVEVfbkcgfCBBUk1fVk1TQV9QVEVfQUYKIAkJICAgfCBBUk1fVk1TQV9QVEVfU0hfSVMgfCBBUk1fVk1TQV9QVEVfQVBfVU5QUklWCiAJCSAgIHwgQVJNX1ZNU0FfUFRFX05TIHwgdHlwZTsKIApAQCAtNTY4LDggKzU2OCw4IEBACiAJaWYgKHByb3QgJiBJT01NVV9DQUNIRSkKIAkJcGdwcm90IHw9IElNTUFJUl9BVFRSX0lEWF9XQlJXQSA8PCBBUk1fVk1TQV9QVEVfQVRUUklORFhfU0hJRlQ7CiAKLQlpZiAocHJvdCAmIElPTU1VX0VYRUMpCi0JCXBncHJvdCAmPSB+QVJNX1ZNU0FfUFRFX1hOOworCWlmIChwcm90ICYgSU9NTVVfTk9FWEVDKQorCQlwZ3Byb3QgfD0gQVJNX1ZNU0FfUFRFX1hOOwogCWVsc2UgaWYgKCEocHJvdCAmIChJT01NVV9SRUFEIHwgSU9NTVVfV1JJVEUpKSkKIAkJLyogSWYgbm8gYWNjZXNzIGNyZWF0ZSBhIGZhdWx0aW5nIGVudHJ5IHRvIGF2b2lkIFRMQiBmaWxscy4gKi8KIAkJcGdwcm90ICY9IH5BUk1fVk1TQV9QVEVfUEFHRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvcm9ja2NoaXAtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvcm9ja2NoaXAtaW9tbXUuYwppbmRleCBiMjAyM2FmLi42YThiMWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L3JvY2tjaGlwLWlvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9yb2NrY2hpcC1pb21tdS5jCkBAIC0xMDA5LDcgKzEwMDksNiBAQAogCS5yZW1vdmUgPSBya19pb21tdV9yZW1vdmUsCiAJLmRyaXZlciA9IHsKIAkJICAgLm5hbWUgPSAicmtfaW9tbXUiLAotCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJICAgLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHJrX2lvbW11X2R0X2lkcyksCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L3RlZ3JhLWdhcnQuYyBiL2RyaXZlcnMvaW9tbXUvdGVncmEtZ2FydC5jCmluZGV4IGY3MjJhMGMuLmM0OGRhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvdGVncmEtZ2FydC5jCisrKyBiL2RyaXZlcnMvaW9tbXUvdGVncmEtZ2FydC5jCkBAIC0zMTUsNiArMzE1LDcgQEAKIAkuYXR0YWNoX2Rldgk9IGdhcnRfaW9tbXVfYXR0YWNoX2RldiwKIAkuZGV0YWNoX2Rldgk9IGdhcnRfaW9tbXVfZGV0YWNoX2RldiwKIAkubWFwCQk9IGdhcnRfaW9tbXVfbWFwLAorCS5tYXBfc2cJCT0gZGVmYXVsdF9pb21tdV9tYXBfc2csCiAJLnVubWFwCQk9IGdhcnRfaW9tbXVfdW5tYXAsCiAJLmlvdmFfdG9fcGh5cwk9IGdhcnRfaW9tbXVfaW92YV90b19waHlzLAogCS5wZ3NpemVfYml0bWFwCT0gR0FSVF9JT01NVV9QR1NJWkVTLApAQCAtMzk1LDcgKzM5Niw3IEBACiAJZG9fZ2FydF9zZXR1cChnYXJ0LCBOVUxMKTsKIAogCWdhcnRfaGFuZGxlID0gZ2FydDsKLQlidXNfc2V0X2lvbW11KCZwbGF0Zm9ybV9idXNfdHlwZSwgJmdhcnRfaW9tbXVfb3BzKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy1jb21tb24uYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5jCmluZGV4IGQxMTFhYzcuLjYzY2QwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5jCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIEFUOTFfQUlDX0lSUV9NSU5fUFJJT1JJVFkJMAogI2RlZmluZSBBVDkxX0FJQ19JUlFfTUFYX1BSSU9SSVRZCTcKIAotI2RlZmluZSBBVDkxX0FJQ19TUkNUWVBFCQlHRU5NQVNLKDcsIDYpCisjZGVmaW5lIEFUOTFfQUlDX1NSQ1RZUEUJCUdFTk1BU0soNiwgNSkKICNkZWZpbmUgQVQ5MV9BSUNfU1JDVFlQRV9MT1cJCSgwIDw8IDUpCiAjZGVmaW5lIEFUOTFfQUlDX1NSQ1RZUEVfRkFMTElORwkoMSA8PCA1KQogI2RlZmluZSBBVDkxX0FJQ19TUkNUWVBFX0hJR0gJCSgyIDw8IDUpCkBAIC03NCw3ICs3NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCSp2YWwgJj0gQVQ5MV9BSUNfU1JDVFlQRTsKKwkqdmFsICY9IH5BVDkxX0FJQ19TUkNUWVBFOwogCSp2YWwgfD0gYWljX3R5cGU7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXYzLWl0cy5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmMKaW5kZXggODZlNDY4NC4uZDg5OTZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmMKQEAgLTEwNTMsNyArMTA1Myw3IEBACiAJICogb2YgdHdvIGVudHJpZXMuIE5vLCB0aGUgYXJjaGl0ZWN0dXJlIGRvZXNuJ3QgbGV0IHlvdQogCSAqIGV4cHJlc3MgYW4gSVRUIHdpdGggYSBzaW5nbGUgZW50cnkuCiAJICovCi0JbnJfaXRlcyA9IG1heCgyLCByb3VuZHVwX3Bvd19vZl90d28obnZlY3MpKTsKKwlucl9pdGVzID0gbWF4KDJVTCwgcm91bmR1cF9wb3dfb2ZfdHdvKG52ZWNzKSk7CiAJc3ogPSBucl9pdGVzICogaXRzLT5pdGVfc2l6ZTsKIAlzeiA9IG1heChzeiwgSVRTX0lUVF9BTElHTikgKyBJVFNfSVRUX0FMSUdOIC0gMTsKIAlpdHQgPSBrbWFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtaGlwMDQuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtaGlwMDQuYwppbmRleCAyOWI4ZjIxLi42YmMyZGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWhpcDA0LmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1oaXAwNC5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAkgKiBJdCB3aWxsIGJlIHJlZmluZWQgYXMgZWFjaCBDUFUgcHJvYmVzIGl0cyBJRC4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlJfSElQMDRfQ1BVX0lGOyBpKyspCi0JCWhpcDA0X2NwdV9tYXBbaV0gPSAweGZmOworCQloaXAwNF9jcHVfbWFwW2ldID0gMHhmZmZmOwogCiAJLyoKIAkgKiBGaW5kIG91dCBob3cgbWFueSBpbnRlcnJ1cHRzIGFyZSBzdXBwb3J0ZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLW10ay1zeXNpcnEuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbXRrLXN5c2lycS5jCmluZGV4IDdlMzQyZGYuLjBiMGQyYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtbXRrLXN5c2lycS5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbXRrLXN5c2lycS5jCkBAIC0xMzcsOSArMTM3LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAljaGlwX2RhdGEtPmludHBvbF9iYXNlID0gb2ZfaW9fcmVxdWVzdF9hbmRfbWFwKG5vZGUsIDAsICJpbnRwb2wiKTsKLQlpZiAoIWNoaXBfZGF0YS0+aW50cG9sX2Jhc2UpIHsKKwlpZiAoSVNfRVJSKGNoaXBfZGF0YS0+aW50cG9sX2Jhc2UpKSB7CiAJCXByX2VycigibXRrX3N5c2lycTogdW5hYmxlIHRvIG1hcCBzeXNpcnEgcmVnaXN0ZXJcbiIpOwotCQlyZXQgPSAtRU5PTUVNOworCQlyZXQgPSBQVFJfRVJSKGNoaXBfZGF0YS0+aW50cG9sX2Jhc2UpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1vbWFwLWludGMuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtb21hcC1pbnRjLmMKaW5kZXggMjg3MThkMy4uYzAzZjE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1vbWFwLWludGMuYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLW9tYXAtaW50Yy5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfaXJxX2xlZ2FjeSh1MzIgYmFzZSkKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdF9pcnFfbGVnYWN5KHUzMiBiYXNlLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiB7CiAJaW50IGosIGlycV9iYXNlOwogCkBAIC0yNzcsNyArMjc3LDcgQEAKIAkJaXJxX2Jhc2UgPSAwOwogCX0KIAotCWRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xlZ2FjeShOVUxMLCBvbWFwX25yX2lycXMsIGlycV9iYXNlLCAwLAorCWRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xlZ2FjeShub2RlLCBvbWFwX25yX2lycXMsIGlycV9iYXNlLCAwLAogCQkJJmlycV9kb21haW5fc2ltcGxlX29wcywgTlVMTCk7CiAKIAlvbWFwX2lycV9zb2Z0X3Jlc2V0KCk7CkBAIC0zMDEsMTAgKzMwMSwyNiBAQAogewogCWludCByZXQ7CiAKLQlpZiAobm9kZSkKKwkvKgorCSAqIEZJWE1FIGxlZ2FjeSBPTUFQIERNQSBkcml2ZXIgc2l0dGluZyB1bmRlciBhcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKwkgKiBkZXBlbmRzIGlzIHN0aWxsIG5vdCByZWFkeSBmb3IgbGluZWFyIElSUSBkb21haW5zOyBiZWNhdXNlIG9mIHRoYXQKKwkgKiB3ZSBuZWVkIHRvIHRlbXBvcmFyaWx5ICJibGFja2xpc3QiIE9NQVAyIGFuZCBPTUFQMyBkZXZpY2VzIGZyb20gdXNpbmcKKwkgKiBsaW5lYXIgSVJRIERvbWFpbiB1bnRpbCB0aGF0IGRyaXZlciBpcyBmaW5hbGx5IGZpeGVkLgorCSAqLworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCAidGksb21hcDItaW50YyIpIHx8CisJCQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCAidGksb21hcDMtaW50YyIpKSB7CisJCXN0cnVjdCByZXNvdXJjZSByZXM7CisKKwkJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uobm9kZSwgMCwgJnJlcykpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQliYXNlID0gcmVzLnN0YXJ0OworCQlyZXQgPSBvbWFwX2luaXRfaXJxX2xlZ2FjeShiYXNlLCBub2RlKTsKKwl9IGVsc2UgaWYgKG5vZGUpIHsKIAkJcmV0ID0gb21hcF9pbml0X2lycV9vZihub2RlKTsKLQllbHNlCi0JCXJldCA9IG9tYXBfaW5pdF9pcnFfbGVnYWN5KGJhc2UpOworCX0gZWxzZSB7CisJCXJldCA9IG9tYXBfaW5pdF9pcnFfbGVnYWN5KGJhc2UsIE5VTEwpOworCX0KIAogCWlmIChyZXQgPT0gMCkKIAkJb21hcF9pcnFfZW5hYmxlX3Byb3RlY3Rpb24oKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCmluZGV4IGE4MmU1NDIuLjBiMzgwNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwpAQCAtNDg4MCw3ICs0ODgwLDcgQEAKIAlieXRlIFNTX0luZFtdID0gIlx4MDVceDAyXHgwMFx4MDJceDAwXHgwMCI7IC8qIEhvbGRfSW5kIHN0cnVjdCovCiAJYnl0ZSBDRl9JbmRbXSA9ICJceDA5XHgwMlx4MDBceDA2XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIjsKIAlieXRlIEludGVycl9FcnJfSW5kW10gPSAiXHgwYVx4MDJceDAwXHgwN1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwotCWJ5dGUgQ09ORl9JbmRbXSA9ICJceDA5XHgxNlx4MDBceDA2XHgwMFx4MDBcMHgwMFwweDAwXDB4MDBcMHgwMCI7CisJYnl0ZSBDT05GX0luZFtdID0gIlx4MDlceDE2XHgwMFx4MDZceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwogCWJ5dGUgZm9yY2VfbXRfaW5mbyA9IGZhbHNlOwogCWJ5dGUgZGlyOwogCWR3b3JkIGQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1uZXR4YmlnLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1uZXR4YmlnLmMKaW5kZXggMjY1MTVjMi4uMjVlNDE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtbmV0eGJpZy5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLW5ldHhiaWcuYwpAQCAtMzMwLDE4ICszMzAsMTggQEAKIAlsZWRfZGF0LT5zYXRhID0gMDsKIAlsZWRfZGF0LT5jZGV2LmJyaWdodG5lc3MgPSBMRURfT0ZGOwogCWxlZF9kYXQtPmNkZXYuZmxhZ3MgfD0gTEVEX0NPUkVfU1VTUEVORFJFU1VNRTsKLQkvKgotCSAqIElmIGF2YWlsYWJsZSwgZXhwb3NlIHRoZSBTQVRBIGFjdGl2aXR5IGJsaW5rIGNhcGFiaWxpdHkgdGhyb3VnaAotCSAqIGEgInNhdGEiIHN5c2ZzIGF0dHJpYnV0ZS4KLQkgKi8KLQlpZiAobGVkX2RhdC0+bW9kZV92YWxbTkVUWEJJR19MRURfU0FUQV0gIT0gTkVUWEJJR19MRURfSU5WQUxJRF9NT0RFKQotCQlsZWRfZGF0LT5jZGV2Lmdyb3VwcyA9IG5ldHhiaWdfbGVkX2dyb3VwczsKIAlsZWRfZGF0LT5tb2RlX2FkZHIgPSB0ZW1wbGF0ZS0+bW9kZV9hZGRyOwogCWxlZF9kYXQtPm1vZGVfdmFsID0gdGVtcGxhdGUtPm1vZGVfdmFsOwogCWxlZF9kYXQtPmJyaWdodF9hZGRyID0gdGVtcGxhdGUtPmJyaWdodF9hZGRyOwogCWxlZF9kYXQtPmJyaWdodF9tYXggPSAoMSA8PCBwZGF0YS0+Z3Bpb19leHQtPm51bV9kYXRhKSAtIDE7CiAJbGVkX2RhdC0+dGltZXIgPSBwZGF0YS0+dGltZXI7CiAJbGVkX2RhdC0+bnVtX3RpbWVyID0gcGRhdGEtPm51bV90aW1lcjsKKwkvKgorCSAqIElmIGF2YWlsYWJsZSwgZXhwb3NlIHRoZSBTQVRBIGFjdGl2aXR5IGJsaW5rIGNhcGFiaWxpdHkgdGhyb3VnaAorCSAqIGEgInNhdGEiIHN5c2ZzIGF0dHJpYnV0ZS4KKwkgKi8KKwlpZiAobGVkX2RhdC0+bW9kZV92YWxbTkVUWEJJR19MRURfU0FUQV0gIT0gTkVUWEJJR19MRURfSU5WQUxJRF9NT0RFKQorCQlsZWRfZGF0LT5jZGV2Lmdyb3VwcyA9IG5ldHhiaWdfbGVkX2dyb3VwczsKIAogCXJldHVybiBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJmxlZF9kYXQtPmNkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tY2IvbWNiLWludGVybmFsLmggYi9kcml2ZXJzL21jYi9tY2ItaW50ZXJuYWwuaAppbmRleCBmOTU2ZWYyLi5mYjc0OTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21jYi9tY2ItaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL21jYi9tY2ItaW50ZXJuYWwuaApAQCAtNyw2ICs3LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NRU5fQ0hBTUVMRU9OCTB4NGQ0NQogI2RlZmluZSBDSEFNRUxFT05fRklMRU5BTUVfTEVOCQkxMgogI2RlZmluZSBDSEFNRUxFT05WMl9NQUdJQwkJMHhhYmNlCisjZGVmaW5lIENIQU1fSEVBREVSX1NJWkUJCTB4MjAwCiAKIGVudW0gY2hhbWVsZW9uX2Rlc2NyaXB0b3JfdHlwZSB7CiAJQ0hBTUVMRU9OX0RUWVBFX0dFTkVSQUwgPSAweDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21jYi9tY2ItcGNpLmMgYi9kcml2ZXJzL21jYi9tY2ItcGNpLmMKaW5kZXggYjU5MTgxOS4uNWUxYmQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tY2IvbWNiLXBjaS5jCisrKyBiL2RyaXZlcnMvbWNiL21jYi1wY2kuYwpAQCAtMTcsNiArMTcsNyBAQAogCiBzdHJ1Y3QgcHJpdiB7CiAJc3RydWN0IG1jYl9idXMgKmJ1czsKKwlwaHlzX2FkZHJfdCBtYXBiYXNlOwogCXZvaWQgX19pb21lbSAqYmFzZTsKIH07CiAKQEAgLTMxLDggKzMyLDggQEAKIAogc3RhdGljIGludCBtY2JfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHByaXYgKnByaXY7Ci0JcGh5c19hZGRyX3QgbWFwYmFzZTsKIAlpbnQgcmV0OwogCWludCBudW1fY2VsbHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ3LDE5ICs0OCwyMSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQltYXBiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwotCWlmICghbWFwYmFzZSkgeworCXByaXYtPm1hcGJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJaWYgKCFwcml2LT5tYXBiYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIFBDSSByZXNvdXJjZVxuIik7CiAJCWdvdG8gZXJyX3N0YXJ0OwogCX0KIAotCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAwLCBLQlVJTERfTU9ETkFNRSk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBQQ0kgQkFSc1xuIik7CisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHByaXYtPm1hcGJhc2UsIENIQU1fSEVBREVSX1NJWkUsCisJCQkJIEtCVUlMRF9NT0ROQU1FKTsKKwlpZiAoSVNfRVJSKHJlcykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgUENJIG1lbW9yeVxuIik7CisJCXJldCA9IFBUUl9FUlIocmVzKTsKIAkJZ290byBlcnJfc3RhcnQ7CiAJfQogCi0JcHJpdi0+YmFzZSA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlwcml2LT5iYXNlID0gaW9yZW1hcChwcml2LT5tYXBiYXNlLCBDSEFNX0hFQURFUl9TSVpFKTsKIAlpZiAoIXByaXYtPmJhc2UpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGlvcmVtYXBcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtODQsNyArODcsNyBAQAogCiAJcHJpdi0+YnVzLT5nZXRfaXJxID0gbWNiX3BjaV9nZXRfaXJxOwogCi0JcmV0ID0gY2hhbWVsZW9uX3BhcnNlX2NlbGxzKHByaXYtPmJ1cywgbWFwYmFzZSwgcHJpdi0+YmFzZSk7CisJcmV0ID0gY2hhbWVsZW9uX3BhcnNlX2NlbGxzKHByaXYtPmJ1cywgcHJpdi0+bWFwYmFzZSwgcHJpdi0+YmFzZSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2RydmRhdGE7CiAJbnVtX2NlbGxzID0gcmV0OwpAQCAtOTMsOCArOTYsMTAgQEAKIAogCW1jYl9idXNfYWRkX2RldmljZXMocHJpdi0+YnVzKTsKIAorCXJldHVybiAwOworCiBlcnJfZHJ2ZGF0YToKLQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5iYXNlKTsKKwlpb3VubWFwKHByaXYtPmJhc2UpOwogZXJyX2lvcmVtYXA6CiAJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOwogZXJyX3N0YXJ0OgpAQCAtMTA3LDYgKzExMiwxMCBAQAogCXN0cnVjdCBwcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJbWNiX3JlbGVhc2VfYnVzKHByaXYtPmJ1cyk7CisKKwlpb3VubWFwKHByaXYtPmJhc2UpOworCXJlbGVhc2VfcmVnaW9uKHByaXYtPm1hcGJhc2UsIENIQU1fSEVBREVSX1NJWkUpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1jYl9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmMgYi9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmMKaW5kZXggOWZjNjE2Yy4uYzFjMDEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtbWV0YWRhdGEuYwpAQCAtOTQsNiArOTQsOSBAQAogfSBfX3BhY2tlZDsKIAogc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhIHsKKwlhdG9taWNfdCByZWZfY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAlzdHJ1Y3QgZG1fYmxvY2tfbWFuYWdlciAqYm07CiAJc3RydWN0IGRtX3NwYWNlX21hcCAqbWV0YWRhdGFfc207CkBAIC02NjksMTAgKzY3MiwxMCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmRtX2NhY2hlX21ldGFkYXRhX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKLQkJCQkJCSBzZWN0b3JfdCBkYXRhX2Jsb2NrX3NpemUsCi0JCQkJCQkgYm9vbCBtYXlfZm9ybWF0X2RldmljZSwKLQkJCQkJCSBzaXplX3QgcG9saWN5X2hpbnRfc2l6ZSkKK3N0YXRpYyBzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKm1ldGFkYXRhX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJCQkJICAgICAgIHNlY3Rvcl90IGRhdGFfYmxvY2tfc2l6ZSwKKwkJCQkJICAgICAgIGJvb2wgbWF5X2Zvcm1hdF9kZXZpY2UsCisJCQkJCSAgICAgICBzaXplX3QgcG9saWN5X2hpbnRfc2l6ZSkKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZDsKQEAgLTY4MCw5ICs2ODMsMTAgQEAKIAljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbWQpIHsKIAkJRE1FUlIoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZXRhZGF0YSBzdHJ1Y3QiKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAorCWF0b21pY19zZXQoJmNtZC0+cmVmX2NvdW50LCAxKTsKIAlpbml0X3J3c2VtKCZjbWQtPnJvb3RfbG9jayk7CiAJY21kLT5iZGV2ID0gYmRldjsKIAljbWQtPmRhdGFfYmxvY2tfc2l6ZSA9IGRhdGFfYmxvY2tfc2l6ZTsKQEAgLTcwNSwxMCArNzA5LDk2IEBACiAJcmV0dXJuIGNtZDsKIH0KIAorLyoKKyAqIFdlIGtlZXAgYSBsaXR0bGUgbGlzdCBvZiByZWYgY291bnRlZCBtZXRhZGF0YSBvYmplY3RzIHRvIHByZXZlbnQgdHdvCisgKiBkaWZmZXJlbnQgdGFyZ2V0IGluc3RhbmNlcyBjcmVhdGluZyBzZXBhcmF0ZSBidWZpbyBpbnN0YW5jZXMuICBUaGlzIGlzCisgKiBhbiBpc3N1ZSBpZiBhIHRhYmxlIGlzIHJlbG9hZGVkIGJlZm9yZSB0aGUgc3VzcGVuZC4KKyAqLworc3RhdGljIERFRklORV9NVVRFWCh0YWJsZV9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQodGFibGUpOworCitzdGF0aWMgc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpsb29rdXAoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY21kLCAmdGFibGUsIGxpc3QpCisJCWlmIChjbWQtPmJkZXYgPT0gYmRldikgeworCQkJYXRvbWljX2luYygmY21kLT5yZWZfY291bnQpOworCQkJcmV0dXJuIGNtZDsKKwkJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmxvb2t1cF9vcl9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisJCQkJCQlzZWN0b3JfdCBkYXRhX2Jsb2NrX3NpemUsCisJCQkJCQlib29sIG1heV9mb3JtYXRfZGV2aWNlLAorCQkJCQkJc2l6ZV90IHBvbGljeV9oaW50X3NpemUpCit7CisJc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsICpjbWQyOworCisJbXV0ZXhfbG9jaygmdGFibGVfbG9jayk7CisJY21kID0gbG9va3VwKGJkZXYpOworCW11dGV4X3VubG9jaygmdGFibGVfbG9jayk7CisKKwlpZiAoY21kKQorCQlyZXR1cm4gY21kOworCisJY21kID0gbWV0YWRhdGFfb3BlbihiZGV2LCBkYXRhX2Jsb2NrX3NpemUsIG1heV9mb3JtYXRfZGV2aWNlLCBwb2xpY3lfaGludF9zaXplKTsKKwlpZiAoIUlTX0VSUihjbWQpKSB7CisJCW11dGV4X2xvY2soJnRhYmxlX2xvY2spOworCQljbWQyID0gbG9va3VwKGJkZXYpOworCQlpZiAoY21kMikgeworCQkJbXV0ZXhfdW5sb2NrKCZ0YWJsZV9sb2NrKTsKKwkJCV9fZGVzdHJveV9wZXJzaXN0ZW50X2RhdGFfb2JqZWN0cyhjbWQpOworCQkJa2ZyZWUoY21kKTsKKwkJCXJldHVybiBjbWQyOworCQl9CisJCWxpc3RfYWRkKCZjbWQtPmxpc3QsICZ0YWJsZSk7CisJCW11dGV4X3VubG9jaygmdGFibGVfbG9jayk7CisJfQorCisJcmV0dXJuIGNtZDsKK30KKworc3RhdGljIGJvb2wgc2FtZV9wYXJhbXMoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsIHNlY3Rvcl90IGRhdGFfYmxvY2tfc2l6ZSkKK3sKKwlpZiAoY21kLT5kYXRhX2Jsb2NrX3NpemUgIT0gZGF0YV9ibG9ja19zaXplKSB7CisJCURNRVJSKCJkYXRhX2Jsb2NrX3NpemUgKCVsbHUpIGRpZmZlcmVudCBmcm9tIHRoYXQgaW4gbWV0YWRhdGEgKCVsbHUpXG4iLAorCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBkYXRhX2Jsb2NrX3NpemUsCisJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNtZC0+ZGF0YV9ibG9ja19zaXplKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmRtX2NhY2hlX21ldGFkYXRhX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJCQkJCSBzZWN0b3JfdCBkYXRhX2Jsb2NrX3NpemUsCisJCQkJCQkgYm9vbCBtYXlfZm9ybWF0X2RldmljZSwKKwkJCQkJCSBzaXplX3QgcG9saWN5X2hpbnRfc2l6ZSkKK3sKKwlzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCA9IGxvb2t1cF9vcl9vcGVuKGJkZXYsIGRhdGFfYmxvY2tfc2l6ZSwKKwkJCQkJCSAgICAgICBtYXlfZm9ybWF0X2RldmljZSwgcG9saWN5X2hpbnRfc2l6ZSk7CisKKwlpZiAoIUlTX0VSUihjbWQpICYmICFzYW1lX3BhcmFtcyhjbWQsIGRhdGFfYmxvY2tfc2l6ZSkpIHsKKwkJZG1fY2FjaGVfbWV0YWRhdGFfY2xvc2UoY21kKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJcmV0dXJuIGNtZDsKK30KKwogdm9pZCBkbV9jYWNoZV9tZXRhZGF0YV9jbG9zZShzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCkKIHsKLQlfX2Rlc3Ryb3lfcGVyc2lzdGVudF9kYXRhX29iamVjdHMoY21kKTsKLQlrZnJlZShjbWQpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjbWQtPnJlZl9jb3VudCkpIHsKKwkJbXV0ZXhfbG9jaygmdGFibGVfbG9jayk7CisJCWxpc3RfZGVsKCZjbWQtPmxpc3QpOworCQltdXRleF91bmxvY2soJnRhYmxlX2xvY2spOworCisJCV9fZGVzdHJveV9wZXJzaXN0ZW50X2RhdGFfb2JqZWN0cyhjbWQpOworCQlrZnJlZShjbWQpOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tY2FjaGUtdGFyZ2V0LmMgYi9kcml2ZXJzL21kL2RtLWNhY2hlLXRhcmdldC5jCmluZGV4IDFlOTZkNzguLmUxNjUwNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY2FjaGUtdGFyZ2V0LmMKKysrIGIvZHJpdmVycy9tZC9kbS1jYWNoZS10YXJnZXQuYwpAQCAtMjIxLDcgKzIyMSwxMyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbmVlZF9jb21taXRfbWlncmF0aW9uczsKIAlzZWN0b3JfdCBtaWdyYXRpb25fdGhyZXNob2xkOwogCXdhaXRfcXVldWVfaGVhZF90IG1pZ3JhdGlvbl93YWl0OwotCWF0b21pY190IG5yX21pZ3JhdGlvbnM7CisJYXRvbWljX3QgbnJfYWxsb2NhdGVkX21pZ3JhdGlvbnM7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgaW4gZmxpZ2h0IG1pZ3JhdGlvbnMgdGhhdCBhcmUgcGVyZm9ybWluZworCSAqIGJhY2tncm91bmQgaW8uIGVnLCBwcm9tb3Rpb24sIHdyaXRlYmFjay4KKwkgKi8KKwlhdG9taWNfdCBucl9pb19taWdyYXRpb25zOwogCiAJd2FpdF9xdWV1ZV9oZWFkX3QgcXVpZXNjaW5nX3dhaXQ7CiAJYXRvbWljX3QgcXVpZXNjaW5nOwpAQCAtMjU4LDcgKzI2NCw2IEBACiAJc3RydWN0IGRtX2RlZmVycmVkX3NldCAqYWxsX2lvX2RzOwogCiAJbWVtcG9vbF90ICptaWdyYXRpb25fcG9vbDsKLQlzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICpuZXh0X21pZ3JhdGlvbjsKIAogCXN0cnVjdCBkbV9jYWNoZV9wb2xpY3kgKnBvbGljeTsKIAl1bnNpZ25lZCBwb2xpY3lfbnJfYXJnczsKQEAgLTM1MCwxMCArMzU1LDMxIEBACiAJZG1fYmlvX3ByaXNvbl9mcmVlX2NlbGwoY2FjaGUtPnByaXNvbiwgY2VsbCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICphbGxvY19taWdyYXRpb24oc3RydWN0IGNhY2hlICpjYWNoZSkKK3sKKwlzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZzsKKworCW1nID0gbWVtcG9vbF9hbGxvYyhjYWNoZS0+bWlncmF0aW9uX3Bvb2wsIEdGUF9OT1dBSVQpOworCWlmIChtZykgeworCQltZy0+Y2FjaGUgPSBjYWNoZTsKKwkJYXRvbWljX2luYygmbWctPmNhY2hlLT5ucl9hbGxvY2F0ZWRfbWlncmF0aW9ucyk7CisJfQorCisJcmV0dXJuIG1nOworfQorCitzdGF0aWMgdm9pZCBmcmVlX21pZ3JhdGlvbihzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWctPmNhY2hlLT5ucl9hbGxvY2F0ZWRfbWlncmF0aW9ucykpCisJCXdha2VfdXAoJm1nLT5jYWNoZS0+bWlncmF0aW9uX3dhaXQpOworCisJbWVtcG9vbF9mcmVlKG1nLCBtZy0+Y2FjaGUtPm1pZ3JhdGlvbl9wb29sKTsKK30KKwogc3RhdGljIGludCBwcmVhbGxvY19kYXRhX3N0cnVjdHMoc3RydWN0IGNhY2hlICpjYWNoZSwgc3RydWN0IHByZWFsbG9jICpwKQogewogCWlmICghcC0+bWcpIHsKLQkJcC0+bWcgPSBtZW1wb29sX2FsbG9jKGNhY2hlLT5taWdyYXRpb25fcG9vbCwgR0ZQX05PV0FJVCk7CisJCXAtPm1nID0gYWxsb2NfbWlncmF0aW9uKGNhY2hlKTsKIAkJaWYgKCFwLT5tZykKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTM4Miw3ICs0MDgsNyBAQAogCQlmcmVlX3ByaXNvbl9jZWxsKGNhY2hlLCBwLT5jZWxsMSk7CiAKIAlpZiAocC0+bWcpCi0JCW1lbXBvb2xfZnJlZShwLT5tZywgY2FjaGUtPm1pZ3JhdGlvbl9wb29sKTsKKwkJZnJlZV9taWdyYXRpb24ocC0+bWcpOwogfQogCiBzdGF0aWMgc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqcHJlYWxsb2NfZ2V0X21pZ3JhdGlvbihzdHJ1Y3QgcHJlYWxsb2MgKnApCkBAIC04NTQsMjQgKzg4MCwxNCBAQAogICogTWlncmF0aW9uIGNvdmVycyBtb3ZpbmcgZGF0YSBmcm9tIHRoZSBvcmlnaW4gZGV2aWNlIHRvIHRoZSBjYWNoZSwgb3IKICAqIHZpY2UgdmVyc2EuCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIGZyZWVfbWlncmF0aW9uKHN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nKQorc3RhdGljIHZvaWQgaW5jX2lvX21pZ3JhdGlvbnMoc3RydWN0IGNhY2hlICpjYWNoZSkKIHsKLQltZW1wb29sX2ZyZWUobWcsIG1nLT5jYWNoZS0+bWlncmF0aW9uX3Bvb2wpOworCWF0b21pY19pbmMoJmNhY2hlLT5ucl9pb19taWdyYXRpb25zKTsKIH0KIAotc3RhdGljIHZvaWQgaW5jX25yX21pZ3JhdGlvbnMoc3RydWN0IGNhY2hlICpjYWNoZSkKK3N0YXRpYyB2b2lkIGRlY19pb19taWdyYXRpb25zKHN0cnVjdCBjYWNoZSAqY2FjaGUpCiB7Ci0JYXRvbWljX2luYygmY2FjaGUtPm5yX21pZ3JhdGlvbnMpOwotfQotCi1zdGF0aWMgdm9pZCBkZWNfbnJfbWlncmF0aW9ucyhzdHJ1Y3QgY2FjaGUgKmNhY2hlKQotewotCWF0b21pY19kZWMoJmNhY2hlLT5ucl9taWdyYXRpb25zKTsKLQotCS8qCi0JICogV2FrZSB0aGUgd29ya2VyIGluIGNhc2Ugd2UncmUgc3VzcGVuZGluZyB0aGUgdGFyZ2V0LgotCSAqLwotCXdha2VfdXAoJmNhY2hlLT5taWdyYXRpb25fd2FpdCk7CisJYXRvbWljX2RlYygmY2FjaGUtPm5yX2lvX21pZ3JhdGlvbnMpOwogfQogCiBzdGF0aWMgdm9pZCBfX2NlbGxfZGVmZXIoc3RydWN0IGNhY2hlICpjYWNoZSwgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCwKQEAgLTg5NCwxMSArOTEwLDEwIEBACiAJd2FrZV93b3JrZXIoY2FjaGUpOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwX21pZ3JhdGlvbihzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKK3N0YXRpYyB2b2lkIGZyZWVfaW9fbWlncmF0aW9uKHN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nKQogewotCXN0cnVjdCBjYWNoZSAqY2FjaGUgPSBtZy0+Y2FjaGU7CisJZGVjX2lvX21pZ3JhdGlvbnMobWctPmNhY2hlKTsKIAlmcmVlX21pZ3JhdGlvbihtZyk7Ci0JZGVjX25yX21pZ3JhdGlvbnMoY2FjaGUpOwogfQogCiBzdGF0aWMgdm9pZCBtaWdyYXRpb25fZmFpbHVyZShzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKQEAgLTkyMyw3ICs5MzgsNyBAQAogCQljZWxsX2RlZmVyKGNhY2hlLCBtZy0+bmV3X29jZWxsLCB0cnVlKTsKIAl9CiAKLQljbGVhbnVwX21pZ3JhdGlvbihtZyk7CisJZnJlZV9pb19taWdyYXRpb24obWcpOwogfQogCiBzdGF0aWMgdm9pZCBtaWdyYXRpb25fc3VjY2Vzc19wcmVfY29tbWl0KHN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nKQpAQCAtOTM0LDcgKzk0OSw3IEBACiAJaWYgKG1nLT53cml0ZWJhY2spIHsKIAkJY2xlYXJfZGlydHkoY2FjaGUsIG1nLT5vbGRfb2Jsb2NrLCBtZy0+Y2Jsb2NrKTsKIAkJY2VsbF9kZWZlcihjYWNoZSwgbWctPm9sZF9vY2VsbCwgZmFsc2UpOwotCQljbGVhbnVwX21pZ3JhdGlvbihtZyk7CisJCWZyZWVfaW9fbWlncmF0aW9uKG1nKTsKIAkJcmV0dXJuOwogCiAJfSBlbHNlIGlmIChtZy0+ZGVtb3RlKSB7CkBAIC05NDQsMTQgKzk1OSwxNCBAQAogCQkJCQkgICAgIG1nLT5vbGRfb2Jsb2NrKTsKIAkJCWlmIChtZy0+cHJvbW90ZSkKIAkJCQljZWxsX2RlZmVyKGNhY2hlLCBtZy0+bmV3X29jZWxsLCB0cnVlKTsKLQkJCWNsZWFudXBfbWlncmF0aW9uKG1nKTsKKwkJCWZyZWVfaW9fbWlncmF0aW9uKG1nKTsKIAkJCXJldHVybjsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChkbV9jYWNoZV9pbnNlcnRfbWFwcGluZyhjYWNoZS0+Y21kLCBtZy0+Y2Jsb2NrLCBtZy0+bmV3X29ibG9jaykpIHsKIAkJCURNV0FSTl9MSU1JVCgicHJvbW90aW9uIGZhaWxlZDsgY291bGRuJ3QgdXBkYXRlIG9uIGRpc2sgbWV0YWRhdGEiKTsKIAkJCXBvbGljeV9yZW1vdmVfbWFwcGluZyhjYWNoZS0+cG9saWN5LCBtZy0+bmV3X29ibG9jayk7Ci0JCQljbGVhbnVwX21pZ3JhdGlvbihtZyk7CisJCQlmcmVlX2lvX21pZ3JhdGlvbihtZyk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC05ODQsNyArOTk5LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWlmIChtZy0+aW52YWxpZGF0ZSkKIAkJCQlwb2xpY3lfcmVtb3ZlX21hcHBpbmcoY2FjaGUtPnBvbGljeSwgbWctPm9sZF9vYmxvY2spOwotCQkJY2xlYW51cF9taWdyYXRpb24obWcpOworCQkJZnJlZV9pb19taWdyYXRpb24obWcpOwogCQl9CiAKIAl9IGVsc2UgewpAQCAtOTk5LDcgKzEwMTQsNyBAQAogCQkJYmlvX2VuZGlvKG1nLT5uZXdfb2NlbGwtPmhvbGRlciwgMCk7CiAJCQljZWxsX2RlZmVyKGNhY2hlLCBtZy0+bmV3X29jZWxsLCBmYWxzZSk7CiAJCX0KLQkJY2xlYW51cF9taWdyYXRpb24obWcpOworCQlmcmVlX2lvX21pZ3JhdGlvbihtZyk7CiAJfQogfQogCkBAIC0xMjUxLDcgKzEyNjYsNyBAQAogCW1nLT5uZXdfb2NlbGwgPSBjZWxsOwogCW1nLT5zdGFydF9qaWZmaWVzID0gamlmZmllczsKIAotCWluY19ucl9taWdyYXRpb25zKGNhY2hlKTsKKwlpbmNfaW9fbWlncmF0aW9ucyhjYWNoZSk7CiAJcXVpZXNjZV9taWdyYXRpb24obWcpOwogfQogCkBAIC0xMjc1LDcgKzEyOTAsNyBAQAogCW1nLT5uZXdfb2NlbGwgPSBOVUxMOwogCW1nLT5zdGFydF9qaWZmaWVzID0gamlmZmllczsKIAotCWluY19ucl9taWdyYXRpb25zKGNhY2hlKTsKKwlpbmNfaW9fbWlncmF0aW9ucyhjYWNoZSk7CiAJcXVpZXNjZV9taWdyYXRpb24obWcpOwogfQogCkBAIC0xMzAyLDcgKzEzMTcsNyBAQAogCW1nLT5uZXdfb2NlbGwgPSBuZXdfb2NlbGw7CiAJbWctPnN0YXJ0X2ppZmZpZXMgPSBqaWZmaWVzOwogCi0JaW5jX25yX21pZ3JhdGlvbnMoY2FjaGUpOworCWluY19pb19taWdyYXRpb25zKGNhY2hlKTsKIAlxdWllc2NlX21pZ3JhdGlvbihtZyk7CiB9CiAKQEAgLTEzMzAsNyArMTM0NSw3IEBACiAJbWctPm5ld19vY2VsbCA9IE5VTEw7CiAJbWctPnN0YXJ0X2ppZmZpZXMgPSBqaWZmaWVzOwogCi0JaW5jX25yX21pZ3JhdGlvbnMoY2FjaGUpOworCWluY19pb19taWdyYXRpb25zKGNhY2hlKTsKIAlxdWllc2NlX21pZ3JhdGlvbihtZyk7CiB9CiAKQEAgLTE0MTIsNyArMTQyNyw3IEBACiAKIHN0YXRpYyBib29sIHNwYXJlX21pZ3JhdGlvbl9iYW5kd2lkdGgoc3RydWN0IGNhY2hlICpjYWNoZSkKIHsKLQlzZWN0b3JfdCBjdXJyZW50X3ZvbHVtZSA9IChhdG9taWNfcmVhZCgmY2FjaGUtPm5yX21pZ3JhdGlvbnMpICsgMSkgKgorCXNlY3Rvcl90IGN1cnJlbnRfdm9sdW1lID0gKGF0b21pY19yZWFkKCZjYWNoZS0+bnJfaW9fbWlncmF0aW9ucykgKyAxKSAqCiAJCWNhY2hlLT5zZWN0b3JzX3Blcl9ibG9jazsKIAlyZXR1cm4gY3VycmVudF92b2x1bWUgPCBjYWNoZS0+bWlncmF0aW9uX3RocmVzaG9sZDsKIH0KQEAgLTE3NjQsNyArMTc3OSw3IEBACiAKIHN0YXRpYyB2b2lkIHdhaXRfZm9yX21pZ3JhdGlvbnMoc3RydWN0IGNhY2hlICpjYWNoZSkKIHsKLQl3YWl0X2V2ZW50KGNhY2hlLT5taWdyYXRpb25fd2FpdCwgIWF0b21pY19yZWFkKCZjYWNoZS0+bnJfbWlncmF0aW9ucykpOworCXdhaXRfZXZlbnQoY2FjaGUtPm1pZ3JhdGlvbl93YWl0LCAhYXRvbWljX3JlYWQoJmNhY2hlLT5ucl9hbGxvY2F0ZWRfbWlncmF0aW9ucykpOwogfQogCiBzdGF0aWMgdm9pZCBzdG9wX3dvcmtlcihzdHJ1Y3QgY2FjaGUgKmNhY2hlKQpAQCAtMTg3Niw5ICsxODkxLDYgQEAKIHsKIAl1bnNpZ25lZCBpOwogCi0JaWYgKGNhY2hlLT5uZXh0X21pZ3JhdGlvbikKLQkJbWVtcG9vbF9mcmVlKGNhY2hlLT5uZXh0X21pZ3JhdGlvbiwgY2FjaGUtPm1pZ3JhdGlvbl9wb29sKTsKLQogCWlmIChjYWNoZS0+bWlncmF0aW9uX3Bvb2wpCiAJCW1lbXBvb2xfZGVzdHJveShjYWNoZS0+bWlncmF0aW9uX3Bvb2wpOwogCkBAIC0yNDI0LDcgKzI0MzYsOCBAQAogCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+cXVpZXNjZWRfbWlncmF0aW9ucyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5jb21wbGV0ZWRfbWlncmF0aW9ucyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5uZWVkX2NvbW1pdF9taWdyYXRpb25zKTsKLQlhdG9taWNfc2V0KCZjYWNoZS0+bnJfbWlncmF0aW9ucywgMCk7CisJYXRvbWljX3NldCgmY2FjaGUtPm5yX2FsbG9jYXRlZF9taWdyYXRpb25zLCAwKTsKKwlhdG9taWNfc2V0KCZjYWNoZS0+bnJfaW9fbWlncmF0aW9ucywgMCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FjaGUtPm1pZ3JhdGlvbl93YWl0KTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhY2hlLT5xdWllc2Npbmdfd2FpdCk7CkBAIC0yNDg3LDggKzI1MDAsNiBAQAogCQlnb3RvIGJhZDsKIAl9CiAKLQljYWNoZS0+bmV4dF9taWdyYXRpb24gPSBOVUxMOwotCiAJY2FjaGUtPm5lZWRfdGlja19iaW8gPSB0cnVlOwogCWNhY2hlLT5zaXplZCA9IGZhbHNlOwogCWNhY2hlLT5pbnZhbGlkYXRlID0gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXRoaW4uYyBiL2RyaXZlcnMvbWQvZG0tdGhpbi5jCmluZGV4IDg3MzU1NDMuLjA3NzA1ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tdGhpbi5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdGhpbi5jCkBAIC0xMTI3LDYgKzExMjcsMjQgQEAKIAkJc2NoZWR1bGVfemVybyh0YywgdmlydF9ibG9jaywgZGF0YV9kZXN0LCBjZWxsLCBiaW8pOwogfQogCitzdGF0aWMgdm9pZCBzZXRfcG9vbF9tb2RlKHN0cnVjdCBwb29sICpwb29sLCBlbnVtIHBvb2xfbW9kZSBuZXdfbW9kZSk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX2Zvcl9zcGFjZShzdHJ1Y3QgcG9vbCAqcG9vbCkKK3sKKwlpbnQgcjsKKwlkbV9ibG9ja190IG5yX2ZyZWU7CisKKwlpZiAoZ2V0X3Bvb2xfbW9kZShwb29sKSAhPSBQTV9PVVRfT0ZfREFUQV9TUEFDRSkKKwkJcmV0dXJuOworCisJciA9IGRtX3Bvb2xfZ2V0X2ZyZWVfYmxvY2tfY291bnQocG9vbC0+cG1kLCAmbnJfZnJlZSk7CisJaWYgKHIpCisJCXJldHVybjsKKworCWlmIChucl9mcmVlKQorCQlzZXRfcG9vbF9tb2RlKHBvb2wsIFBNX1dSSVRFKTsKK30KKwogLyoKICAqIEEgbm9uLXplcm8gcmV0dXJuIGluZGljYXRlcyByZWFkX29ubHkgb3IgZmFpbF9pbyBtb2RlLgogICogTWFueSBjYWxsZXJzIGRvbid0IGNhcmUgYWJvdXQgdGhlIHJldHVybiB2YWx1ZS4KQEAgLTExNDEsNiArMTE1OSw4IEBACiAJciA9IGRtX3Bvb2xfY29tbWl0X21ldGFkYXRhKHBvb2wtPnBtZCk7CiAJaWYgKHIpCiAJCW1ldGFkYXRhX29wZXJhdGlvbl9mYWlsZWQocG9vbCwgImRtX3Bvb2xfY29tbWl0X21ldGFkYXRhIiwgcik7CisJZWxzZQorCQljaGVja19mb3Jfc3BhY2UocG9vbCk7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTExNTksOCArMTE3OSw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXRfcG9vbF9tb2RlKHN0cnVjdCBwb29sICpwb29sLCBlbnVtIHBvb2xfbW9kZSBuZXdfbW9kZSk7Ci0KIHN0YXRpYyBpbnQgYWxsb2NfZGF0YV9ibG9jayhzdHJ1Y3QgdGhpbl9jICp0YywgZG1fYmxvY2tfdCAqcmVzdWx0KQogewogCWludCByOwpAQCAtMjE1NSw3ICsyMTczLDcgQEAKIAkJcG9vbC0+cHJvY2Vzc19jZWxsID0gcHJvY2Vzc19jZWxsX3JlYWRfb25seTsKIAkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkX2NlbGwgPSBwcm9jZXNzX2Rpc2NhcmRfY2VsbDsKIAkJcG9vbC0+cHJvY2Vzc19wcmVwYXJlZF9tYXBwaW5nID0gcHJvY2Vzc19wcmVwYXJlZF9tYXBwaW5nOwotCQlwb29sLT5wcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQgPSBwcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmRfcGFzc2Rvd247CisJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfZGlzY2FyZCA9IHByb2Nlc3NfcHJlcGFyZWRfZGlzY2FyZDsKIAogCQlpZiAoIXBvb2wtPnBmLmVycm9yX2lmX25vX3NwYWNlICYmIG5vX3NwYWNlX3RpbWVvdXQpCiAJCQlxdWV1ZV9kZWxheWVkX3dvcmsocG9vbC0+d3EsICZwb29sLT5ub19zcGFjZV90aW1lb3V0LCBub19zcGFjZV90aW1lb3V0KTsKQEAgLTMzNjcsNiArMzM4NSwxMiBAQAogCXN0cnVjdCBwb29sX2MgKnB0ID0gdGktPnByaXZhdGU7CiAJc3RydWN0IHBvb2wgKnBvb2wgPSBwdC0+cG9vbDsKIAorCWlmIChnZXRfcG9vbF9tb2RlKHBvb2wpID49IFBNX1JFQURfT05MWSkgeworCQlETUVSUigiJXM6IHVuYWJsZSB0byBzZXJ2aWNlIHBvb2wgdGFyZ2V0IG1lc3NhZ2VzIGluIFJFQURfT05MWSBvciBGQUlMIG1vZGUiLAorCQkgICAgICBkbV9kZXZpY2VfbmFtZShwb29sLT5wb29sX21kKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmICghc3RyY2FzZWNtcChhcmd2WzBdLCAiY3JlYXRlX3RoaW4iKSkKIAkJciA9IHByb2Nlc3NfY3JlYXRlX3RoaW5fbWVzZyhhcmdjLCBhcmd2LCBwb29sKTsKIApAQCAtMzgxNCw2ICszODM4LDggQEAKIAkJciA9IC1FSU5WQUw7CiAJCWdvdG8gYmFkOwogCX0KKwlhdG9taWNfc2V0KCZ0Yy0+cmVmY291bnQsIDEpOworCWluaXRfY29tcGxldGlvbigmdGMtPmNhbl9kZXN0cm95KTsKIAlsaXN0X2FkZF90YWlsX3JjdSgmdGMtPmxpc3QsICZ0Yy0+cG9vbC0+YWN0aXZlX3RoaW5zKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+cG9vbC0+bG9jaywgZmxhZ3MpOwogCS8qCkBAIC0zODI2LDkgKzM4NTIsNiBAQAogCiAJZG1fcHV0KHBvb2xfbWQpOwogCi0JYXRvbWljX3NldCgmdGMtPnJlZmNvdW50LCAxKTsKLQlpbml0X2NvbXBsZXRpb24oJnRjLT5jYW5fZGVzdHJveSk7Ci0KIAlyZXR1cm4gMDsKIAogYmFkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDRjMDY1ODUuLjJjYWY1YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTIwNiw2ICsyMDYsOSBAQAogCS8qIHplcm8tbGVuZ3RoIGZsdXNoIHRoYXQgd2lsbCBiZSBjbG9uZWQgYW5kIHN1Ym1pdHRlZCB0byB0YXJnZXRzICovCiAJc3RydWN0IGJpbyBmbHVzaF9iaW87CiAKKwkvKiB0aGUgbnVtYmVyIG9mIGludGVybmFsIHN1c3BlbmRzICovCisJdW5zaWduZWQgaW50ZXJuYWxfc3VzcGVuZF9jb3VudDsKKwogCXN0cnVjdCBkbV9zdGF0cyBzdGF0czsKIH07CiAKQEAgLTg5OSw3ICs5MDIsNyBAQAogCiBzdGF0aWMgdm9pZCBjbG9uZV9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnJvcikKIHsKLQlpbnQgciA9IDA7CisJaW50IHIgPSBlcnJvcjsKIAlzdHJ1Y3QgZG1fdGFyZ2V0X2lvICp0aW8gPSBjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgZG1fdGFyZ2V0X2lvLCBjbG9uZSk7CiAJc3RydWN0IGRtX2lvICppbyA9IHRpby0+aW87CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gdGlvLT5pby0+bWQ7CkBAIC0yOTI4LDcgKzI5MzEsNyBAQAogewogCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gTlVMTDsKIAotCWlmIChkbV9zdXNwZW5kZWRfaW50ZXJuYWxseV9tZChtZCkpCisJaWYgKG1kLT5pbnRlcm5hbF9zdXNwZW5kX2NvdW50KyspCiAJCXJldHVybjsgLyogbmVzdGVkIGludGVybmFsIHN1c3BlbmQgKi8KIAogCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpKSB7CkBAIC0yOTUzLDcgKzI5NTYsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2RtX2ludGVybmFsX3Jlc3VtZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7Ci0JaWYgKCFkbV9zdXNwZW5kZWRfaW50ZXJuYWxseV9tZChtZCkpCisJQlVHX09OKCFtZC0+aW50ZXJuYWxfc3VzcGVuZF9jb3VudCk7CisKKwlpZiAoLS1tZC0+aW50ZXJuYWxfc3VzcGVuZF9jb3VudCkKIAkJcmV0dXJuOyAvKiByZXN1bWUgZnJvbSBuZXN0ZWQgaW50ZXJuYWwgc3VzcGVuZCAqLwogCiAJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IGRiOTljYTIuLjA2OTMxZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCkBAIC02MTQsNyArNjE0LDcgQEAKIAkJLnBvcnRiCQk9IENYMjM4ODVfTVBFR19EVkIsCiAJfSwKIAlbQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSNDQwMF0gPSB7Ci0JCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSNDQwMCIsCisJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSNDQwMC9IVlI1NTAwIiwKIAkJLnBvcnRhCQk9IENYMjM4ODVfQU5BTE9HX1ZJREVPLAogCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCkBAIC02MjIsNiArNjIyLDEwIEBACiAJCS50dW5lcl9hZGRyCT0gMHg2MCwgLyogMHhjMCA+PiAxICovCiAJCS50dW5lcl9idXMJPSAxLAogCX0sCisJW0NYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX1NUQVJCVVJTVF0gPSB7CisJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYgU3RhcmJ1cnN0IiwKKwkJLnBvcnRiCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKIAlbQ1gyMzg4NV9CT0FSRF9BVkVSTUVESUFfSEM4MVJdID0gewogCQkubmFtZQkJPSAiQVZlclRWIEh5YnJpZCBFeHByZXNzIFNsaW0gSEM4MVIiLAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1hDMjAyOCwKQEAgLTkzNiwxOSArOTQwLDE5IEBACiAJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHhjMTA4LAotCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSNDQwMCwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjQ0MDAsIC8qIEhhdXBwYXVnZSBXaW5UViBIVlItNDQwMCAoTW9kZWwgMTIxeHh4LCBIeWJyaWQgRFZCLVQvUzIsIElSKSAqLwogCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4YzEzOCwKLQkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjQ0MDAsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlI0NDAwLCAvKiBIYXVwcGF1Z2UgV2luVFYgSFZSLTU1MDAgKE1vZGVsIDEyMXh4eCwgSHlicmlkIERWQi1UL0MvUzIsIElSKSAqLwogCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4YzEyYSwKLQkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjQ0MDAsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9TVEFSQlVSU1QsIC8qIEhhdXBwYXVnZSBXaW5UViBTdGFyYnVyc3QgKE1vZGVsIDEyMXgwMCwgRFZCLVMyLCBJUikgKi8KIAl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweGMxZjgsCi0JCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlI0NDAwLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSNDQwMCwgLyogSGF1cHBhdWdlIFdpblRWIEhWUi01NTAwIChNb2RlbCAxMjF4eHgsIEh5YnJpZCBEVkItVC9DL1MyLCBJUikgKi8KIAl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDE0NjEsCiAJCS5zdWJkZXZpY2UgPSAweGQ5MzksCkBAIC0xNTQ1LDggKzE1NDksOSBAQAogCQljeF93cml0ZShHUElPX0lTTSwgMHgwMDAwMDAwMCk7LyogSU5URVJSVVBUUyBhY3RpdmUgbG93Ki8KIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlI0NDAwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfU1RBUkJVUlNUOgogCQkvKiBHUElPLTggdGRhMTAwNzEgZGVtb2QgcmVzZXQgKi8KLQkJLyogR1BJTy05IHNpMjE2NSBkZW1vZCByZXNldCAqLworCQkvKiBHUElPLTkgc2kyMTY1IGRlbW9kIHJlc2V0IChvbmx5IEhWUjQ0MDAvSFZSNTUwMCkqLwogCiAJCS8qIFB1dCB0aGUgcGFydHMgaW50byByZXNldCBhbmQgYmFjayAqLwogCQljeDIzODg1X2dwaW9fZW5hYmxlKGRldiwgR1BJT184IHwgR1BJT185LCAxKTsKQEAgLTE4NzIsNiArMTg3Nyw3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjQ0MDA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9TVEFSQlVSU1Q6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9JTVBBQ1RWQ0JFOgogCQlpZiAoZGV2LT5pMmNfYnVzWzBdLmkyY19yYyA9PSAwKQogCQkJaGF1cHBhdWdlX2VlcHJvbShkZXYsIGVlcHJvbSsweGMwKTsKQEAgLTE5ODAsNiArMTk4NiwxMSBAQAogCQl0czItPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KIAkJdHMyLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CiAJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfU1RBUkJVUlNUOgorCQl0czEtPmdlbl9jdHJsX3ZhbCAgPSAweGM7IC8qIFNlcmlhbCBidXMgKyBwdW5jdHVyZWQgY2xvY2sgKi8KKwkJdHMxLT50c19jbGtfZW5fdmFsID0gMHgxOyAvKiBFbmFibGUgVFNfQ0xLICovCisJCXRzMS0+c3JjX3NlbF92YWwgICA9IENYMjM4ODVfU1JDX1NFTF9QQVJBTExFTF9NUEVHX1ZJREVPOworCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfRFZCU0tZX1Q5NTgwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVkJTS1lfVDk4MjoKIAkJdHMxLT5nZW5fY3RybF92YWwgID0gMHg1OyAvKiBQYXJhbGxlbCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKaW5kZXggMWQ5ZDBmOC4uMWFkNDk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY29yZS5jCkBAIC0yMDQ5LDExICsyMDQ5LDExIEBACiAKIAljeDIzODg1X3NodXRkb3duKGRldik7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7Ci0KIAkvKiB1bnJlZ2lzdGVyIHN0dWZmICovCiAJZnJlZV9pcnEocGNpX2Rldi0+aXJxLCBkZXYpOwogCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOworCiAJY3gyMzg4NV9kZXZfdW5yZWdpc3RlcihkZXYpOwogCXZiMl9kbWFfc2dfY2xlYW51cF9jdHgoZGV2LT5hbGxvY19jdHgpOwogCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmRldi0+Y3RybF9oYW5kbGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwppbmRleCBjNDdkMTgyLi5hOWM0NTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWR2Yi5jCkBAIC0xNzEwLDYgKzE3MTAsMTcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfU1RBUkJVUlNUOgorCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDcxX2F0dGFjaCwKKwkJCQkJCSZoYXVwcGF1Z2VfdGRhMTAwNzFfY29uZmlnLAorCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2goYTgyOTNfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsCisJCQkJICAgJmhhdXBwYXVnZV9hODI5M19jb25maWcpOworCQl9CisJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVkJTS1lfVDk1ODA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0RWQlNLWV9TOTUwOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS5oIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LmgKaW5kZXggZjU1Y2QxMi4uMzZmMmY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LmgKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LmgKQEAgLTk5LDYgKzk5LDcgQEAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9EVkJTS1lfUzk1MCAgICAgICAgICAgICAgNDkKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9EVkJTS1lfUzk1MiAgICAgICAgICAgICAgNTAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9EVkJTS1lfVDk4MiAgICAgICAgICAgICAgNTEKKyNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfU1RBUkJVUlNUICAgICAgNTIKIAogI2RlZmluZSBHUElPXzAgMHgwMDAwMDAwMQogI2RlZmluZSBHUElPXzEgMHgwMDAwMDAwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9vbWFwM2lzcC9pc3B2aWRlby5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9vbWFwM2lzcC9pc3B2aWRlby5jCmluZGV4IGI0NjNmZTEuLjNmZTkwNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vb21hcDNpc3AvaXNwdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL29tYXAzaXNwL2lzcHZpZGVvLmMKQEAgLTYwMiwxMCArNjAyLDEzIEBACiAJc3RybGNweShjYXAtPmNhcmQsIHZpZGVvLT52aWRlby5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CiAJc3RybGNweShjYXAtPmJ1c19pbmZvLCAibWVkaWEiLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfVklERU9fT1VUUFVUCisJCXwgVjRMMl9DQVBfU1RSRUFNSU5HIHwgVjRMMl9DQVBfREVWSUNFX0NBUFM7CisKIAlpZiAodmlkZW8tPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCWVsc2UKLQkJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19PVVRQVVQgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19PVVRQVVQgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9hdG1lbC1pc2kuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9hdG1lbC1pc2kuYwppbmRleCA4ZWZlNDAzMy4uNmQ4ODUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL2F0bWVsLWlzaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9hdG1lbC1pc2kuYwpAQCAtNzYwLDggKzc2MCw5IEBACiB7CiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiYXRtZWwtaXNpIik7CiAJc3RyY3B5KGNhcC0+Y2FyZCwgIkF0bWVsIEltYWdlIFNlbnNvciBJbnRlcmZhY2UiKTsKLQljYXAtPmNhcGFiaWxpdGllcyA9IChWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKLQkJCQlWNEwyX0NBUF9TVFJFQU1JTkcpOworCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gY2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9teDJfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvbXgyX2NhbWVyYS5jCmluZGV4IGNlNzJiZDIuLjE5MjM3N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9teDJfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL214Ml9jYW1lcmEuYwpAQCAtMTI1Niw3ICsxMjU2LDggQEAKIHsKIAkvKiBjYXAtPm5hbWUgaXMgc2V0IGJ5IHRoZSBmcmllbmRseSBjYWxsZXI6LT4gKi8KIAlzdHJsY3B5KGNhcC0+Y2FyZCwgTVgyX0NBTV9EUklWRVJfREVTQ1JJUFRJT04sIHNpemVvZihjYXAtPmNhcmQpKTsKLQljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJY2FwLT5kZXZpY2VfY2FwcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBjYXAtPmRldmljZV9jYXBzIHwgVjRMMl9DQVBfREVWSUNFX0NBUFM7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9teDNfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvbXgzX2NhbWVyYS5jCmluZGV4IGE2MGMzYmIuLjBiMzI5OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9teDNfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL214M19jYW1lcmEuYwpAQCAtOTY3LDcgKzk2Nyw4IEBACiB7CiAJLyogY2FwLT5uYW1lIGlzIHNldCBieSB0aGUgZmlyZW5kbHkgY2FsbGVyOi0+ICovCiAJc3RybGNweShjYXAtPmNhcmQsICJpLk1YM3ggQ2FtZXJhIiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwljYXAtPmRldmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwljYXAtPmNhcGFiaWxpdGllcyA9IGNhcC0+ZGV2aWNlX2NhcHMgfCBWNEwyX0NBUF9ERVZJQ0VfQ0FQUzsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL29tYXAxX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL29tYXAxX2NhbWVyYS5jCmluZGV4IGU2YjkzMjguLjE2ZjY1ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9vbWFwMV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvb21hcDFfY2FtZXJhLmMKQEAgLTE0MjcsNyArMTQyNyw4IEBACiB7CiAJLyogY2FwLT5uYW1lIGlzIHNldCBieSB0aGUgZnJpZW5kbHkgY2FsbGVyOi0+ICovCiAJc3RybGNweShjYXAtPmNhcmQsICJPTUFQMSBDYW1lcmEiLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0JY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gY2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3B4YV9jYW1lcmEuYwppbmRleCA5NTEyMjZhLi44ZDZlMzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvcHhhX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9weGFfY2FtZXJhLmMKQEAgLTE1NzYsNyArMTU3Niw4IEBACiB7CiAJLyogY2FwLT5uYW1lIGlzIHNldCBieSB0aGUgZmlyZW5kbHkgY2FsbGVyOi0+ICovCiAJc3RybGNweShjYXAtPmNhcmQsIHB4YV9jYW1fZHJpdmVyX2Rlc2NyaXB0aW9uLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0JY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gY2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvcmNhcl92aW4uYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9yY2FyX3Zpbi5jCmluZGV4IDBjMWY1NTYuLjlmMTQ3M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9yY2FyX3Zpbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9yY2FyX3Zpbi5jCkBAIC0xNzk5LDcgKzE3OTksOSBAQAogCQkJICAgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CiAJc3RybGNweShjYXAtPmNhcmQsICJSX0Nhcl9WSU4iLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0JY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gY2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggOGIyN2IzZS4uNzE3ODc3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTE2NTIsNyArMTY1Miw5IEBACiAJCQkJICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CiAJc3RybGNweShjYXAtPmNhcmQsICJTdXBlckhfTW9iaWxlX0NFVSIsIHNpemVvZihjYXAtPmNhcmQpKTsKLQljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJY2FwLT5kZXZpY2VfY2FwcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBjYXAtPmRldmljZV9jYXBzIHwgVjRMMl9DQVBfREVWSUNFX0NBUFM7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi9jeHVzYi5jIGIvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi9jeHVzYi5jCmluZGV4IDBmMzQ1YjEuLmYzMjdjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2IvY3h1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiL2N4dXNiLmMKQEAgLTIyMzIsNyArMjIzMiw3IEBACiAJCXsKIAkJCSJNeWdpY2EgVDIzMCBEVkItVC9UMi9DIiwKIAkJCXsgTlVMTCB9LAotCQkJeyAmY3h1c2JfdGFibGVbMjJdLCBOVUxMIH0sCisJCQl7ICZjeHVzYl90YWJsZVsyMF0sIE5VTEwgfSwKIAkJfSwKIAl9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKaW5kZXggMWIxNThmMS4uNTM2MjEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXY0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCkBAIC04OSwxNiArODksNiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHZiaV9uciwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModmJpX25yLCAiT2Zmc2V0IGZvciBkZXZpY2UncyB2YmkgZGV2IG1pbm9yIik7CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5IHB2cl9jYXBhYmlsaXR5ID17Ci0JLmRyaXZlciAgICAgICAgID0gInB2cnVzYjIiLAotCS5jYXJkICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgcHZyLXVzYjIiLAotCS5idXNfaW5mbyAgICAgICA9ICJ1c2IiLAotCS52ZXJzaW9uICAgICAgICA9IExJTlVYX1ZFUlNJT05fQ09ERSwKLQkuY2FwYWJpbGl0aWVzICAgPSAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8Ci0JCQkgICBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX0FVRElPIHwgVjRMMl9DQVBfUkFESU8gfAotCQkJICAgVjRMMl9DQVBfUkVBRFdSSVRFKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgdjRsMl9mbXRkZXNjIHB2cl9mbXRkZXNjIFtdID0gewogCXsKIAkJLmluZGV4ICAgICAgICAgID0gMCwKQEAgLTE2MCwxMCArMTUwLDIyIEBACiAJc3RydWN0IHB2cjJfdjRsMl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBmaC0+Y2hhbm5lbC5tY19oZWFkLT5oZHc7CiAKLQltZW1jcHkoY2FwLCAmcHZyX2NhcGFiaWxpdHksIHNpemVvZihzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KSk7CisJc3RybGNweShjYXAtPmRyaXZlciwgInB2cnVzYjIiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcC0+YnVzX2luZm8sIHB2cjJfaGR3X2dldF9idXNfaW5mbyhoZHcpLAogCQkJc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgcHZyMl9oZHdfZ2V0X2Rlc2MoaGR3KSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1RVTkVSIHwKKwkJCSAgICBWNEwyX0NBUF9BVURJTyB8IFY0TDJfQ0FQX1JBRElPIHwKKwkJCSAgICBWNEwyX0NBUF9SRUFEV1JJVEUgfCBWNEwyX0NBUF9ERVZJQ0VfQ0FQUzsKKwlzd2l0Y2ggKGZoLT5wZGktPmRldmJhc2UudmZsX3R5cGUpIHsKKwljYXNlIFZGTF9UWVBFX0dSQUJCRVI6CisJCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfQVVESU87CisJCWJyZWFrOworCWNhc2UgVkZMX1RZUEVfUkFESU86CisJCWNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9SQURJTzsKKwkJYnJlYWs7CisJfQorCWNhcC0+ZGV2aWNlX2NhcHMgfD0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SRUFEV1JJVEU7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItY29yZS5jCmluZGV4IGQwOWE4OTEuLmJjMDhhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdmlkZW9idWYyLWNvcmUuYwpAQCAtMzE0NiwyNyArMzE0NiwyNiBAQAogCQkJcHJlcXVldWUtLTsKIAkJfSBlbHNlIHsKIAkJCWNhbGxfdm9pZF9xb3AocSwgd2FpdF9maW5pc2gsIHEpOwotCQkJcmV0ID0gdmIyX2ludGVybmFsX2RxYnVmKHEsICZmaWxlaW8tPmIsIDApOworCQkJaWYgKCF0aHJlYWRpby0+c3RvcCkKKwkJCQlyZXQgPSB2YjJfaW50ZXJuYWxfZHFidWYocSwgJmZpbGVpby0+YiwgMCk7CiAJCQljYWxsX3ZvaWRfcW9wKHEsIHdhaXRfcHJlcGFyZSwgcSk7CiAJCQlkcHJpbnRrKDUsICJmaWxlIGlvOiB2YjJfZHFidWYgcmVzdWx0OiAlZFxuIiwgcmV0KTsKIAkJfQotCQlpZiAodGhyZWFkaW8tPnN0b3ApCi0JCQlicmVhazsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCB8fCB0aHJlYWRpby0+c3RvcCkKIAkJCWJyZWFrOwogCQl0cnlfdG9fZnJlZXplKCk7CiAKIAkJdmIgPSBxLT5idWZzW2ZpbGVpby0+Yi5pbmRleF07CiAJCWlmICghKGZpbGVpby0+Yi5mbGFncyAmIFY0TDJfQlVGX0ZMQUdfRVJST1IpKQotCQkJcmV0ID0gdGhyZWFkaW8tPmZuYyh2YiwgdGhyZWFkaW8tPnByaXYpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7CisJCQlpZiAodGhyZWFkaW8tPmZuYyh2YiwgdGhyZWFkaW8tPnByaXYpKQorCQkJCWJyZWFrOwogCQljYWxsX3ZvaWRfcW9wKHEsIHdhaXRfZmluaXNoLCBxKTsKIAkJaWYgKHNldF90aW1lc3RhbXApCiAJCQl2NGwyX2dldF90aW1lc3RhbXAoJmZpbGVpby0+Yi50aW1lc3RhbXApOwotCQlyZXQgPSB2YjJfaW50ZXJuYWxfcWJ1ZihxLCAmZmlsZWlvLT5iKTsKKwkJaWYgKCF0aHJlYWRpby0+c3RvcCkKKwkJCXJldCA9IHZiMl9pbnRlcm5hbF9xYnVmKHEsICZmaWxlaW8tPmIpOwogCQljYWxsX3ZvaWRfcW9wKHEsIHdhaXRfcHJlcGFyZSwgcSk7Ci0JCWlmIChyZXQpCisJCWlmIChyZXQgfHwgdGhyZWFkaW8tPnN0b3ApCiAJCQlicmVhazsKIAl9CiAKQEAgLTMyMzUsMTEgKzMyMzQsMTEgQEAKIAl0aHJlYWRpby0+c3RvcCA9IHRydWU7CiAJdmIyX2ludGVybmFsX3N0cmVhbW9mZihxLCBxLT50eXBlKTsKIAljYWxsX3ZvaWRfcW9wKHEsIHdhaXRfcHJlcGFyZSwgcSk7CisJZXJyID0ga3RocmVhZF9zdG9wKHRocmVhZGlvLT50aHJlYWQpOwogCXEtPmZpbGVpbyA9IE5VTEw7CiAJZmlsZWlvLT5yZXEuY291bnQgPSAwOwogCXZiMl9yZXFidWZzKHEsICZmaWxlaW8tPnJlcSk7CiAJa2ZyZWUoZmlsZWlvKTsKLQllcnIgPSBrdGhyZWFkX3N0b3AodGhyZWFkaW8tPnRocmVhZCk7CiAJdGhyZWFkaW8tPnRocmVhZCA9IE5VTEw7CiAJa2ZyZWUodGhyZWFkaW8pOwogCXEtPmZpbGVpbyA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9kYTkwNTItY29yZS5jIGIvZHJpdmVycy9tZmQvZGE5MDUyLWNvcmUuYwppbmRleCA1MmEwYzJmLi5hZTQ5OGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9kYTkwNTItY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL2RhOTA1Mi1jb3JlLmMKQEAgLTU1NCw3ICs1NTQsOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhkYTkwNTItPmRldiwgLTEsIGRhOTA1Ml9zdWJkZXZfaW5mbywKKwlyZXQgPSBtZmRfYWRkX2RldmljZXMoZGE5MDUyLT5kZXYsIFBMQVRGT1JNX0RFVklEX0FVVE8sCisJCQkgICAgICBkYTkwNTJfc3ViZGV2X2luZm8sCiAJCQkgICAgICBBUlJBWV9TSVpFKGRhOTA1Ml9zdWJkZXZfaW5mbyksIE5VTEwsIDAsIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkYTkwNTItPmRldiwgIm1mZF9hZGRfZGV2aWNlcyBmYWlsZWQ6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvcnRzeF91c2IuYyBiL2RyaXZlcnMvbWZkL3J0c3hfdXNiLmMKaW5kZXggZGJkZDBmYS4uMjEwZDFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvcnRzeF91c2IuYworKysgYi9kcml2ZXJzL21mZC9ydHN4X3VzYi5jCkBAIC02ODEsMjEgKzY4MSw5IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHJ0c3hfdXNiX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewotCXN0cnVjdCBydHN4X3VjciAqdWNyID0KLQkJKHN0cnVjdCBydHN4X3VjciAqKXVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0KIAlkZXZfZGJnKCZpbnRmLT5kZXYsICIlcyBjYWxsZWQgd2l0aCBwbSBtZXNzYWdlIDB4JTA0eFxuIiwKIAkJCV9fZnVuY19fLCBtZXNzYWdlLmV2ZW50KTsKIAotCS8qCi0JICogQ2FsbCB0byBtYWtlIHN1cmUgTEVEIGlzIG9mZiBkdXJpbmcgc3VzcGVuZCB0byBzYXZlIG1vcmUgcG93ZXIuCi0JICogSXQgaXMgTk9UIGEgcGVybWFuZW50IHN0YXRlIGFuZCBjb3VsZCBiZSB0dXJuZWQgb24gYW55dGltZSBsYXRlci4KLQkgKiBUaHVzIG5vIG5lZWQgdG8gY2FsbCB0dXJuX29uIHdoZW4gcmVzdW5taW5nLgotCSAqLwotCW11dGV4X2xvY2soJnVjci0+ZGV2X211dGV4KTsKLQlydHN4X3VzYl90dXJuX29mZl9sZWQodWNyKTsKLQltdXRleF91bmxvY2soJnVjci0+ZGV2X211dGV4KTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zdG1wZS5jIGIvZHJpdmVycy9tZmQvc3RtcGUuYwppbmRleCBlMmY5ZGYxLi4yZDdmYWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zdG1wZS5jCisrKyBiL2RyaXZlcnMvbWZkL3N0bXBlLmMKQEAgLTUxOSw2ICs1MTksNyBAQAogCVtTVE1QRV9JRFhfR1BEUl9MU0JdCT0gU1RNUEUxNjAxX1JFR19HUElPX1NFVF9ESVJfTFNCLAogCVtTVE1QRV9JRFhfR1BSRVJfTFNCXQk9IFNUTVBFMTYwMV9SRUdfR1BJT19SRV9MU0IsCiAJW1NUTVBFX0lEWF9HUEZFUl9MU0JdCT0gU1RNUEUxNjAxX1JFR19HUElPX0ZFX0xTQiwKKwlbU1RNUEVfSURYX0dQUFVSX0xTQl0JPSBTVE1QRTE2MDFfUkVHX0dQSU9fUFVfTFNCLAogCVtTVE1QRV9JRFhfR1BBRlJfVV9NU0JdCT0gU1RNUEUxNjAxX1JFR19HUElPX0FGX1VfTVNCLAogCVtTVE1QRV9JRFhfSUVHUElPUl9MU0JdCT0gU1RNUEUxNjAxX1JFR19JTlRfRU5fR1BJT19NQVNLX0xTQiwKIAlbU1RNUEVfSURYX0lTR1BJT1JfTVNCXQk9IFNUTVBFMTYwMV9SRUdfSU5UX1NUQV9HUElPX01TQiwKQEAgLTY2Nyw2ICs2NjgsNyBAQAogCVtTVE1QRV9JRFhfR1BEUl9MU0JdCT0gU1RNUEUxODAxX1JFR19HUElPX1NFVF9ESVJfTE9XLAogCVtTVE1QRV9JRFhfR1BSRVJfTFNCXQk9IFNUTVBFMTgwMV9SRUdfR1BJT19SRV9MT1csCiAJW1NUTVBFX0lEWF9HUEZFUl9MU0JdCT0gU1RNUEUxODAxX1JFR19HUElPX0ZFX0xPVywKKwlbU1RNUEVfSURYX0dQUFVSX0xTQl0JPSBTVE1QRTE4MDFfUkVHX0dQSU9fUFVMTF9VUF9MT1csCiAJW1NUTVBFX0lEWF9JRUdQSU9SX0xTQl0JPSBTVE1QRTE4MDFfUkVHX0lOVF9FTl9HUElPX01BU0tfTE9XLAogCVtTVE1QRV9JRFhfSVNHUElPUl9MU0JdCT0gU1RNUEUxODAxX1JFR19JTlRfU1RBX0dQSU9fTE9XLAogfTsKQEAgLTc1MCw2ICs3NTIsOCBAQAogCVtTVE1QRV9JRFhfR1BEUl9MU0JdCT0gU1RNUEUyNFhYX1JFR19HUERSX0xTQiwKIAlbU1RNUEVfSURYX0dQUkVSX0xTQl0JPSBTVE1QRTI0WFhfUkVHX0dQUkVSX0xTQiwKIAlbU1RNUEVfSURYX0dQRkVSX0xTQl0JPSBTVE1QRTI0WFhfUkVHX0dQRkVSX0xTQiwKKwlbU1RNUEVfSURYX0dQUFVSX0xTQl0JPSBTVE1QRTI0WFhfUkVHX0dQUFVSX0xTQiwKKwlbU1RNUEVfSURYX0dQUERSX0xTQl0JPSBTVE1QRTI0WFhfUkVHX0dQUERSX0xTQiwKIAlbU1RNUEVfSURYX0dQQUZSX1VfTVNCXQk9IFNUTVBFMjRYWF9SRUdfR1BBRlJfVV9NU0IsCiAJW1NUTVBFX0lEWF9JRUdQSU9SX0xTQl0JPSBTVE1QRTI0WFhfUkVHX0lFR1BJT1JfTFNCLAogCVtTVE1QRV9JRFhfSVNHUElPUl9NU0JdCT0gU1RNUEUyNFhYX1JFR19JU0dQSU9SX01TQiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3N0bXBlLmggYi9kcml2ZXJzL21mZC9zdG1wZS5oCmluZGV4IGJlZTBhYmYuLjg0YWRiNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3N0bXBlLmgKKysrIGIvZHJpdmVycy9tZmQvc3RtcGUuaApAQCAtMTg4LDYgKzE4OCw3IEBACiAjZGVmaW5lIFNUTVBFMTYwMV9SRUdfR1BJT19FRF9NU0IJCTB4OEEKICNkZWZpbmUgU1RNUEUxNjAxX1JFR19HUElPX1JFX0xTQgkJMHg4RAogI2RlZmluZSBTVE1QRTE2MDFfUkVHX0dQSU9fRkVfTFNCCQkweDhGCisjZGVmaW5lIFNUTVBFMTYwMV9SRUdfR1BJT19QVV9MU0IJCTB4OTEKICNkZWZpbmUgU1RNUEUxNjAxX1JFR19HUElPX0FGX1VfTVNCCQkweDkyCiAKICNkZWZpbmUgU1RNUEUxNjAxX1NZU19DVFJMX0VOQUJMRV9HUElPCQkoMSA8PCAzKQpAQCAtMjc2LDYgKzI3Nyw4IEBACiAjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BFRFJfTVNCCQkweDhDCiAjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BSRVJfTFNCCQkweDkxCiAjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BGRVJfTFNCCQkweDk0CisjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BQVVJfTFNCCQkweDk3CisjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BQRFJfTFNCCQkweDlhCiAjZGVmaW5lIFNUTVBFMjRYWF9SRUdfR1BBRlJfVV9NU0IJMHg5QgogCiAjZGVmaW5lIFNUTVBFMjRYWF9TWVNfQ1RSTF9FTkFCTEVfR1BJTwkJKDEgPDwgMykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1MjE4LmMgYi9kcml2ZXJzL21mZC90cHM2NTIxOC5jCmluZGV4IDBkMjU2Y2IuLmQ2Yjc2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RwczY1MjE4LmMKKysrIGIvZHJpdmVycy9tZmQvdHBzNjUyMTguYwpAQCAtMTI1LDEwICsxMjUsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwczY1MjE4X2NsZWFyX2JpdHMpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSB0cHM2NTIxOF95ZXNfcmFuZ2VzW10gPSB7CisJcmVnbWFwX3JlZ19yYW5nZShUUFM2NTIxOF9SRUdfSU5UMSwgVFBTNjUyMThfUkVHX0lOVDIpLAorCXJlZ21hcF9yZWdfcmFuZ2UoVFBTNjUyMThfUkVHX1NUQVRVUywgVFBTNjUyMThfUkVHX1NUQVRVUyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgdHBzNjUyMThfdm9sYXRpbGVfdGFibGUgPSB7CisJLnllc19yYW5nZXMgPSB0cHM2NTIxOF95ZXNfcmFuZ2VzLAorCS5uX3llc19yYW5nZXMgPSBBUlJBWV9TSVpFKHRwczY1MjE4X3llc19yYW5nZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIHRwczY1MjE4X3JlZ21hcF9jb25maWcgPSB7CiAJLnJlZ19iaXRzID0gOCwKIAkudmFsX2JpdHMgPSA4LAogCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfUkJUUkVFLAorCS52b2xhdGlsZV90YWJsZSA9ICZ0cHM2NTIxOF92b2xhdGlsZV90YWJsZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycSB0cHM2NTIxOF9pcnFzW10gPSB7CkBAIC0xOTMsNiArMjA0LDcgQEAKIAogCS5udW1fcmVncyA9IDIsCiAJLm1hc2tfYmFzZSA9IFRQUzY1MjE4X1JFR19JTlRfTUFTSzEsCisJLnN0YXR1c19iYXNlID0gVFBTNjUyMThfUkVHX0lOVDEsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl90cHM2NTIxOF9tYXRjaF90YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2N4bC9jb250ZXh0LmMgYi9kcml2ZXJzL21pc2MvY3hsL2NvbnRleHQuYwppbmRleCA1MWZkNmI1Li5kMWI1NWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY3hsL2NvbnRleHQuYworKysgYi9kcml2ZXJzL21pc2MvY3hsL2NvbnRleHQuYwpAQCAtMTAwLDYgKzEwMCw0NiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN4bF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3QgY3hsX2NvbnRleHQgKmN0eCA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzOworCXU2NCBhcmVhLCBvZmZzZXQ7CisKKwlvZmZzZXQgPSB2bWYtPnBnb2ZmIDw8IFBBR0VfU0hJRlQ7CisKKwlwcl9kZXZlbCgiJXM6IHBlOiAlaSBhZGRyZXNzOiAweCVseCBvZmZzZXQ6IDB4JWxseFxuIiwKKwkJCV9fZnVuY19fLCBjdHgtPnBlLCBhZGRyZXNzLCBvZmZzZXQpOworCisJaWYgKGN0eC0+YWZ1LT5jdXJyZW50X21vZGUgPT0gQ1hMX01PREVfREVESUNBVEVEKSB7CisJCWFyZWEgPSBjdHgtPmFmdS0+cHNuX3BoeXM7CisJCWlmIChvZmZzZXQgPiBjdHgtPmFmdS0+YWRhcHRlci0+cHNfc2l6ZSkKKwkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisJfSBlbHNlIHsKKwkJYXJlYSA9IGN0eC0+cHNuX3BoeXM7CisJCWlmIChvZmZzZXQgPiBjdHgtPnBzbl9zaXplKQorCQkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKwl9CisKKwltdXRleF9sb2NrKCZjdHgtPnN0YXR1c19tdXRleCk7CisKKwlpZiAoY3R4LT5zdGF0dXMgIT0gU1RBUlRFRCkgeworCQltdXRleF91bmxvY2soJmN0eC0+c3RhdHVzX211dGV4KTsKKwkJcHJfZGV2ZWwoIiVzOiBDb250ZXh0IG5vdCBzdGFydGVkLCBmYWlsaW5nIHByb2JsZW0gc3RhdGUgYWNjZXNzXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisJfQorCisJdm1faW5zZXJ0X3Bmbih2bWEsIGFkZHJlc3MsIChhcmVhICsgb2Zmc2V0KSA+PiBQQUdFX1NISUZUKTsKKworCW11dGV4X3VubG9jaygmY3R4LT5zdGF0dXNfbXV0ZXgpOworCisJcmV0dXJuIFZNX0ZBVUxUX05PUEFHRTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjeGxfbW1hcF92bW9wcyA9IHsKKwkuZmF1bHQgPSBjeGxfbW1hcF9mYXVsdCwKK307CisKIC8qCiAgKiBNYXAgYSBwZXItY29udGV4dCBtbWlvIHNwYWNlIGludG8gdGhlIGdpdmVuIHZtYS4KICAqLwpAQCAtMTA4LDI2ICsxNDgsMjUgQEAKIAl1NjQgbGVuID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwogCWxlbiA9IG1pbihsZW4sIGN0eC0+cHNuX3NpemUpOwogCi0JaWYgKGN0eC0+YWZ1LT5jdXJyZW50X21vZGUgPT0gQ1hMX01PREVfREVESUNBVEVEKSB7Ci0JCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7Ci0JCXJldHVybiB2bV9pb21hcF9tZW1vcnkodm1hLCBjdHgtPmFmdS0+cHNuX3BoeXMsIGN0eC0+YWZ1LT5hZGFwdGVyLT5wc19zaXplKTsKLQl9CisJaWYgKGN0eC0+YWZ1LT5jdXJyZW50X21vZGUgIT0gQ1hMX01PREVfREVESUNBVEVEKSB7CisJCS8qIG1ha2Ugc3VyZSB0aGVyZSBpcyBhIHZhbGlkIHBlciBwcm9jZXNzIHNwYWNlIGZvciB0aGlzIEFGVSAqLworCQlpZiAoKGN0eC0+bWFzdGVyICYmICFjdHgtPmFmdS0+cHNhKSB8fCAoIWN0eC0+YWZ1LT5wcF9wc2EpKSB7CisJCQlwcl9kZXZlbCgiQUZVIGRvZXNuJ3Qgc3VwcG9ydCBtbWlvIHNwYWNlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAKLQkvKiBtYWtlIHN1cmUgdGhlcmUgaXMgYSB2YWxpZCBwZXIgcHJvY2VzcyBzcGFjZSBmb3IgdGhpcyBBRlUgKi8KLQlpZiAoKGN0eC0+bWFzdGVyICYmICFjdHgtPmFmdS0+cHNhKSB8fCAoIWN0eC0+YWZ1LT5wcF9wc2EpKSB7Ci0JCXByX2RldmVsKCJBRlUgZG9lc24ndCBzdXBwb3J0IG1taW8gc3BhY2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogQ2FuJ3QgbW1hcCB1bnRpbCB0aGUgQUZVIGlzIGVuYWJsZWQgKi8KKwkJaWYgKCFjdHgtPmFmdS0+ZW5hYmxlZCkKKwkJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JLyogQ2FuJ3QgbW1hcCB1bnRpbCB0aGUgQUZVIGlzIGVuYWJsZWQgKi8KLQlpZiAoIWN0eC0+YWZ1LT5lbmFibGVkKQotCQlyZXR1cm4gLUVCVVNZOwotCiAJcHJfZGV2ZWwoIiVzOiBtbWlvIHBoeXNpY2FsOiAlbGx4IHBlOiAlaSBtYXN0ZXI6JWlcbiIsIF9fZnVuY19fLAogCQkgY3R4LT5wc25fcGh5cywgY3R4LT5wZSAsIGN0eC0+bWFzdGVyKTsKIAorCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU8gfCBWTV9QRk5NQVA7CiAJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKLQlyZXR1cm4gdm1faW9tYXBfbWVtb3J5KHZtYSwgY3R4LT5wc25fcGh5cywgbGVuKTsKKwl2bWEtPnZtX29wcyA9ICZjeGxfbW1hcF92bW9wczsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTE1MCwxMiArMTg5LDYgQEAKIAlhZnVfcmVsZWFzZV9pcnFzKGN0eCk7CiAJZmx1c2hfd29yaygmY3R4LT5mYXVsdF93b3JrKTsgLyogT25seSBuZWVkZWQgZm9yIGRlZGljYXRlZCBwcm9jZXNzICovCiAJd2FrZV91cF9hbGwoJmN0eC0+d3EpOwotCi0JLyogUmVsZWFzZSBQcm9ibGVtIFN0YXRlIEFyZWEgbWFwcGluZyAqLwotCW11dGV4X2xvY2soJmN0eC0+bWFwcGluZ19sb2NrKTsKLQlpZiAoY3R4LT5tYXBwaW5nKQotCQl1bm1hcF9tYXBwaW5nX3JhbmdlKGN0eC0+bWFwcGluZywgMCwgMCwgMSk7Ci0JbXV0ZXhfdW5sb2NrKCZjdHgtPm1hcHBpbmdfbG9jayk7CiB9CiAKIC8qCkBAIC0xODQsNiArMjE3LDE3IEBACiAJCSAqIGNyZWF0ZWQgYW5kIHRvcm4gZG93biBhZnRlciB0aGUgSURSIHJlbW92ZWQKIAkJICovCiAJCV9fZGV0YWNoX2NvbnRleHQoY3R4KTsKKworCQkvKgorCQkgKiBXZSBhcmUgZm9yY2UgZGV0YWNoaW5nIC0gcmVtb3ZlIGFueSBhY3RpdmUgUFNBIG1hcHBpbmdzIHNvCisJCSAqIHVzZXJzcGFjZSBjYW5ub3QgaW50ZXJmZXJlIHdpdGggdGhlIGNhcmQgaWYgaXQgY29tZXMgYmFjay4KKwkJICogRWFzaWVzdCB3YXkgdG8gZXhlcmNpc2UgdGhpcyBpcyB0byB1bmJpbmQgYW5kIHJlYmluZCB0aGUKKwkJICogZHJpdmVyIHZpYSBzeXNmcyB3aGlsZSBpdCBpcyBpbiB1c2UuCisJCSAqLworCQltdXRleF9sb2NrKCZjdHgtPm1hcHBpbmdfbG9jayk7CisJCWlmIChjdHgtPm1hcHBpbmcpCisJCQl1bm1hcF9tYXBwaW5nX3JhbmdlKGN0eC0+bWFwcGluZywgMCwgMCwgMSk7CisJCW11dGV4X3VubG9jaygmY3R4LT5tYXBwaW5nX2xvY2spOwogCX0KIAltdXRleF91bmxvY2soJmFmdS0+Y29udGV4dHNfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY3hsL2ZpbGUuYyBiL2RyaXZlcnMvbWlzYy9jeGwvZmlsZS5jCmluZGV4IGU5ZjJmMTAuLmIxNWQ4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9jeGwvZmlsZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9jeGwvZmlsZS5jCkBAIC0xNDAsMTggKzE0MCwyMCBAQAogCiAJcHJfZGV2ZWwoIiVzOiBwZTogJWlcbiIsIF9fZnVuY19fLCBjdHgtPnBlKTsKIAotCW11dGV4X2xvY2soJmN0eC0+c3RhdHVzX211dGV4KTsKLQlpZiAoY3R4LT5zdGF0dXMgIT0gT1BFTkVEKSB7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCisJLyogRG8gdGhpcyBvdXRzaWRlIHRoZSBzdGF0dXNfbXV0ZXggdG8gYXZvaWQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IHdpdGgKKwkgKiB0aGUgbG9ja2luZyBpbiBjeGxfbW1hcF9mYXVsdCgpICovCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ3b3JrLCB1d29yaywKIAkJCSAgIHNpemVvZihzdHJ1Y3QgY3hsX2lvY3RsX3N0YXJ0X3dvcmspKSkgewogCQlyYyA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0OwogCX0KIAorCW11dGV4X2xvY2soJmN0eC0+c3RhdHVzX211dGV4KTsKKwlpZiAoY3R4LT5zdGF0dXMgIT0gT1BFTkVEKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCiAJLyoKIAkgKiBpZiBhbnkgb2YgdGhlIHJlc2VydmVkIGZpZWxkcyBhcmUgc2V0IG9yIGFueSBvZiB0aGUgdW51c2VkCiAJICogZmxhZ3MgYXJlIHNldCBpdCdzIGludmFsaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9tZWkvaHctbWUuYyBiL2RyaXZlcnMvbWlzYy9tZWkvaHctbWUuYwppbmRleCBmZjI3NTUwLi4wNmZmMGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvbWVpL2h3LW1lLmMKKysrIGIvZHJpdmVycy9taXNjL21laS9ody1tZS5jCkBAIC0yMzQsNiArMjM0LDE4IEBACiAJc3RydWN0IG1laV9tZV9odyAqaHcgPSB0b19tZV9odyhkZXYpOwogCXUzMiBoY3NyID0gbWVpX2hjc3JfcmVhZChodyk7CiAKKwkvKiBIX1JTVCBtYXkgYmUgZm91bmQgbGl0IGJlZm9yZSByZXNldCBpcyBzdGFydGVkLAorCSAqIGZvciBleGFtcGxlIGlmIHByZWNlZGluZyByZXNldCBmbG93IGhhc24ndCBjb21wbGV0ZWQuCisJICogSW4gdGhhdCBjYXNlIGFzc2VydGluZyBIX1JTVCB3aWxsIGJlIGlnbm9yZWQsIHRoZXJlZm9yZQorCSAqIHdlIG5lZWQgdG8gY2xlYW4gSF9SU1QgYml0IHRvIHN0YXJ0IGEgc3VjY2Vzc2Z1bCByZXNldCBzZXF1ZW5jZS4KKwkgKi8KKwlpZiAoKGhjc3IgJiBIX1JTVCkgPT0gSF9SU1QpIHsKKwkJZGV2X3dhcm4oZGV2LT5kZXYsICJIX1JTVCBpcyBzZXQgPSAweCUwOFgiLCBoY3NyKTsKKwkJaGNzciAmPSB+SF9SU1Q7CisJCW1laV9tZV9yZWdfd3JpdGUoaHcsIEhfQ1NSLCBoY3NyKTsKKwkJaGNzciA9IG1laV9oY3NyX3JlYWQoaHcpOworCX0KKwogCWhjc3IgfD0gSF9SU1QgfCBIX0lHIHwgSF9JUzsKIAogCWlmIChpbnRyX2VuYWJsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCmluZGV4IDAyYWQ3OTIuLjc0NjZjZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwpAQCAtODg2LDcgKzg4Niw3IEBACiAJdW5zaWduZWQgaWR4LCBidXNfd2lkdGggPSAwOwogCWludCBlcnIgPSAwOwogCi0JaWYgKCFtbWNfY2FuX2V4dF9jc2QoY2FyZCkgJiYKKwlpZiAoIW1tY19jYW5fZXh0X2NzZChjYXJkKSB8fAogCSAgICAhKGhvc3QtPmNhcHMgJiAoTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF84X0JJVF9EQVRBKSkpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWFjcGkuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYWNwaS5jCmluZGV4IGUzZTU2ZDMuLjk3MDMxNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWFjcGkuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWFjcGkuYwpAQCAtMjQ3LDYgKzI0Nyw3IEBACiAJeyAiSU5UMzNCQiIgICwgIjMiICwgJnNkaGNpX2FjcGlfc2xvdF9pbnRfc2QgfSwKIAl7ICJJTlQzM0M2IiAgLCBOVUxMLCAmc2RoY2lfYWNwaV9zbG90X2ludF9zZGlvIH0sCiAJeyAiSU5UMzQzNiIgICwgTlVMTCwgJnNkaGNpX2FjcGlfc2xvdF9pbnRfc2RpbyB9LAorCXsgIklOVDM0NEQiICAsIE5VTEwsICZzZGhjaV9hY3BpX3Nsb3RfaW50X3NkaW8gfSwKIAl7ICJQTlAwRDQwIiAgfSwKIAl7IH0sCiB9OwpAQCAtMjU3LDYgKzI1OCw3IEBACiAJeyAiSU5UMzNCQiIgIH0sCiAJeyAiSU5UMzNDNiIgIH0sCiAJeyAiSU5UMzQzNiIgIH0sCisJeyAiSU5UMzQ0RCIgIH0sCiAJeyAiUE5QMEQ0MCIgIH0sCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCmluZGV4IDAzNDI3NzUuLjRmMzg1NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwpAQCAtOTkzLDYgKzk5MywzMSBAQAogCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKIAkJLmRyaXZlcl9kYXRhCT0gKGtlcm5lbF91bG9uZ190KSZzZGhjaV9pbnRlbF9tcmZsX21tYywKIAl9LAorCisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfSU5URUwsCisJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9JTlRFTF9TUFRfRU1NQywKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJnNkaGNpX2ludGVsX2J5dF9lbW1jLAorCX0sCisKKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9JTlRFTCwKKwkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NQVF9TRElPLAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfaW50ZWxfYnl0X3NkaW8sCisJfSwKKworCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAorCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfSU5URUxfU1BUX1NELAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfaW50ZWxfYnl0X3NkLAorCX0sCisKIAl7CiAJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9PMiwKIAkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX08yXzgxMjAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5oIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuaAppbmRleCBkNTdjM2QxLi4xZWM2ODRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmgKQEAgLTIxLDYgKzIxLDkgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9DTFZfRU1NQzAJMHgwOGU1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQ0xWX0VNTUMxCTB4MDhlNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1FSS19TRAkweDA4QTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9TUFRfRU1NQwkweDlkMmIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9TUFRfU0RJTwkweDlkMmMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9TUFRfU0QJMHg5ZDJkCiAKIC8qCiAgKiBQQ0kgcmVnaXN0ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYzLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYzLmMKaW5kZXggNDUyMzg4Ny4uY2EzNDI0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2My5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYwpAQCAtMzAwLDEzICszMDAsNiBAQAogCWlmIChJU19FUlIoaG9zdCkpCiAJCXJldHVybiBQVFJfRVJSKGhvc3QpOwogCi0JaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAibWFydmVsbCxhcm1hZGEtMzgwLXNkaGNpIikpIHsKLQkJcmV0ID0gbXZfY29uZl9tYnVzX3dpbmRvd3MocGRldiwgbXZfbWJ1c19kcmFtX2luZm8oKSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnJfbWJ1c193aW47Ci0JfQotCi0KIAlwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKIAlwbHRmbV9ob3N0LT5wcml2ID0gcHhhOwogCkBAIC0zMjUsNiArMzE4LDEyIEBACiAJaWYgKCFJU19FUlIocHhhLT5jbGtfY29yZSkpCiAJCWNsa19wcmVwYXJlX2VuYWJsZShweGEtPmNsa19jb3JlKTsKIAorCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgIm1hcnZlbGwsYXJtYWRhLTM4MC1zZGhjaSIpKSB7CisJCXJldCA9IG12X2NvbmZfbWJ1c193aW5kb3dzKHBkZXYsIG12X21idXNfZHJhbV9pbmZvKCkpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyX21idXNfd2luOworCX0KKwogCS8qIGVuYWJsZSAxLzhWIEREUiBjYXBhYmxlICovCiAJaG9zdC0+bW1jLT5jYXBzIHw9IE1NQ19DQVBfMV84Vl9ERFI7CiAKQEAgLTM5NiwxMSArMzk1LDExIEBACiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogZXJyX29mX3BhcnNlOgogZXJyX2NkX3JlcToKK2Vycl9tYnVzX3dpbjoKIAljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfaW8pOwogCWlmICghSVNfRVJSKHB4YS0+Y2xrX2NvcmUpKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfY29yZSk7CiBlcnJfY2xrX2dldDoKLWVycl9tYnVzX3dpbjoKIAlzZGhjaV9wbHRmbV9mcmVlKHBkZXYpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKaW5kZXggY2JiMjQ1Yi4uZjFhNDg4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwpAQCAtMjU5LDggKzI1OSw2IEBACiAKIAkJZGVsX3RpbWVyX3N5bmMoJmhvc3QtPnR1bmluZ190aW1lcik7CiAJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9ORUVEU19SRVRVTklORzsKLQkJaG9zdC0+bW1jLT5tYXhfYmxrX2NvdW50ID0KLQkJCShob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19OT19NVUxUSUJMT0NLKSA/IDEgOiA2NTUzNTsKIAl9CiAJc2RoY2lfZW5hYmxlX2NhcmRfZGV0ZWN0aW9uKGhvc3QpOwogfQpAQCAtMTI3Myw2ICsxMjcxLDEyIEBACiAJCXNwaW5fdW5sb2NrX2lycSgmaG9zdC0+bG9jayk7CiAJCW1tY19yZWd1bGF0b3Jfc2V0X29jcihtbWMsIG1tYy0+c3VwcGx5LnZtbWMsIHZkZCk7CiAJCXNwaW5fbG9ja19pcnEoJmhvc3QtPmxvY2spOworCisJCWlmIChtb2RlICE9IE1NQ19QT1dFUl9PRkYpCisJCQlzZGhjaV93cml0ZWIoaG9zdCwgU0RIQ0lfUE9XRVJfT04sIFNESENJX1BPV0VSX0NPTlRST0wpOworCQllbHNlCisJCQlzZGhjaV93cml0ZWIoaG9zdCwgMCwgU0RIQ0lfUE9XRVJfQ09OVFJPTCk7CisKIAkJcmV0dXJuOwogCX0KIApAQCAtMTM1Myw2ICsxMzU3LDggQEAKIAogCXNkaGNpX3J1bnRpbWVfcG1fZ2V0KGhvc3QpOwogCisJcHJlc2VudCA9IG1tY19ncGlvX2dldF9jZChob3N0LT5tbWMpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAogCVdBUk5fT04oaG9zdC0+bXJxICE9IE5VTEwpOwpAQCAtMTM4MSw3ICsxMzg3LDYgQEAKIAkgKiAgICAgemVybzogY2QtZ3BpbyBpcyB1c2VkLCBhbmQgY2FyZCBpcyByZW1vdmVkCiAJICogICAgIG9uZTogY2QtZ3BpbyBpcyB1c2VkLCBhbmQgY2FyZCBpcyBwcmVzZW50CiAJICovCi0JcHJlc2VudCA9IG1tY19ncGlvX2dldF9jZChob3N0LT5tbWMpOwogCWlmIChwcmVzZW50IDwgMCkgewogCQkvKiBJZiBwb2xsaW5nLCBhc3N1bWUgdGhhdCB0aGUgY2FyZCBpcyBhbHdheXMgcHJlc2VudC4gKi8KIAkJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTikKQEAgLTE4ODAsNiArMTg4NSwxOCBAQAogCXJldHVybiAhKHByZXNlbnRfc3RhdGUgJiBTREhDSV9EQVRBX0xWTF9NQVNLKTsKIH0KIAorc3RhdGljIGludCBzZGhjaV9wcmVwYXJlX2hzNDAwX3R1bmluZyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKK3sKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJaG9zdC0+ZmxhZ3MgfD0gU0RIQ0lfSFM0MDBfVFVOSU5HOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNkaGNpX2V4ZWN1dGVfdHVuaW5nKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCB1MzIgb3Bjb2RlKQogewogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKQEAgLTE4ODcsMTAgKzE5MDQsMTggQEAKIAlpbnQgdHVuaW5nX2xvb3BfY291bnRlciA9IE1BWF9UVU5JTkdfTE9PUDsKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB0dW5pbmdfY291bnQgPSAwOworCWJvb2wgaHM0MDBfdHVuaW5nOwogCiAJc2RoY2lfcnVudGltZV9wbV9nZXQoaG9zdCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAorCWhzNDAwX3R1bmluZyA9IGhvc3QtPmZsYWdzICYgU0RIQ0lfSFM0MDBfVFVOSU5HOworCWhvc3QtPmZsYWdzICY9IH5TREhDSV9IUzQwMF9UVU5JTkc7CisKKwlpZiAoaG9zdC0+dHVuaW5nX21vZGUgPT0gU0RIQ0lfVFVOSU5HX01PREVfMSkKKwkJdHVuaW5nX2NvdW50ID0gaG9zdC0+dHVuaW5nX2NvdW50OworCiAJLyoKIAkgKiBUaGUgSG9zdCBDb250cm9sbGVyIG5lZWRzIHR1bmluZyBvbmx5IGluIGNhc2Ugb2YgU0RSMTA0IG1vZGUKIAkgKiBhbmQgZm9yIFNEUjUwIG1vZGUgd2hlbiBVc2UgVHVuaW5nIGZvciBTRFI1MCBpcyBzZXQgaW4gdGhlCkBAIC0xODk5LDggKzE5MjQsMjAgQEAKIAkgKiB0dW5pbmcgZnVuY3Rpb24gaGFzIHRvIGJlIGV4ZWN1dGVkLgogCSAqLwogCXN3aXRjaCAoaG9zdC0+dGltaW5nKSB7CisJLyogSFM0MDAgdHVuaW5nIGlzIGRvbmUgaW4gSFMyMDAgbW9kZSAqLwogCWNhc2UgTU1DX1RJTUlOR19NTUNfSFM0MDA6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubG9jazsKKwogCWNhc2UgTU1DX1RJTUlOR19NTUNfSFMyMDA6CisJCS8qCisJCSAqIFBlcmlvZGljIHJlLXR1bmluZyBmb3IgSFM0MDAgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG5lZWRlZCwgc28KKwkJICogZGlzYWJsZSBpdCBoZXJlLgorCQkgKi8KKwkJaWYgKGhzNDAwX3R1bmluZykKKwkJCXR1bmluZ19jb3VudCA9IDA7CisJCWJyZWFrOworCiAJY2FzZSBNTUNfVElNSU5HX1VIU19TRFIxMDQ6CiAJCWJyZWFrOwogCkBAIC0xOTExLDkgKzE5NDgsNyBAQAogCQkvKiBGQUxMVEhST1VHSCAqLwogCiAJZGVmYXVsdDoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwotCQlzZGhjaV9ydW50aW1lX3BtX3B1dChob3N0KTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlpZiAoaG9zdC0+b3BzLT5wbGF0Zm9ybV9leGVjdXRlX3R1bmluZykgewpAQCAtMjAzNywyNCArMjA3MiwxMSBAQAogCX0KIAogb3V0OgotCS8qCi0JICogSWYgdGhpcyBpcyB0aGUgdmVyeSBmaXJzdCB0aW1lIHdlIGFyZSBoZXJlLCB3ZSBzdGFydCB0aGUgcmV0dW5pbmcKLQkgKiB0aW1lci4gU2luY2Ugb25seSBkdXJpbmcgdGhlIGZpcnN0IHRpbWUsIFNESENJX05FRURTX1JFVFVOSU5HCi0JICogZmxhZyB3b24ndCBiZSBzZXQsIHdlIGNoZWNrIHRoaXMgY29uZGl0aW9uIGJlZm9yZSBhY3R1YWxseSBzdGFydGluZwotCSAqIHRoZSB0aW1lci4KLQkgKi8KLQlpZiAoIShob3N0LT5mbGFncyAmIFNESENJX05FRURTX1JFVFVOSU5HKSAmJiBob3N0LT50dW5pbmdfY291bnQgJiYKLQkgICAgKGhvc3QtPnR1bmluZ19tb2RlID09IFNESENJX1RVTklOR19NT0RFXzEpKSB7CisJaG9zdC0+ZmxhZ3MgJj0gflNESENJX05FRURTX1JFVFVOSU5HOworCisJaWYgKHR1bmluZ19jb3VudCkgewogCQlob3N0LT5mbGFncyB8PSBTREhDSV9VU0lOR19SRVRVTklOR19USU1FUjsKLQkJbW9kX3RpbWVyKCZob3N0LT50dW5pbmdfdGltZXIsIGppZmZpZXMgKwotCQkJaG9zdC0+dHVuaW5nX2NvdW50ICogSFopOwotCQkvKiBUdW5pbmcgbW9kZSAxIGxpbWl0cyB0aGUgbWF4aW11bSBkYXRhIGxlbmd0aCB0byA0TUIgKi8KLQkJbW1jLT5tYXhfYmxrX2NvdW50ID0gKDQgKiAxMDI0ICogMTAyNCkgLyBtbWMtPm1heF9ibGtfc2l6ZTsKLQl9IGVsc2UgaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNJTkdfUkVUVU5JTkdfVElNRVIpIHsKLQkJaG9zdC0+ZmxhZ3MgJj0gflNESENJX05FRURTX1JFVFVOSU5HOwotCQkvKiBSZWxvYWQgdGhlIG5ldyBpbml0aWFsIHZhbHVlIGZvciB0aW1lciAqLwotCQltb2RfdGltZXIoJmhvc3QtPnR1bmluZ190aW1lciwgamlmZmllcyArCi0JCQkgIGhvc3QtPnR1bmluZ19jb3VudCAqIEhaKTsKKwkJbW9kX3RpbWVyKCZob3N0LT50dW5pbmdfdGltZXIsIGppZmZpZXMgKyB0dW5pbmdfY291bnQgKiBIWik7CiAJfQogCiAJLyoKQEAgLTIwNzAsNiArMjA5Miw3IEBACiAKIAlzZGhjaV93cml0ZWwoaG9zdCwgaG9zdC0+aWVyLCBTREhDSV9JTlRfRU5BQkxFKTsKIAlzZGhjaV93cml0ZWwoaG9zdCwgaG9zdC0+aWVyLCBTREhDSV9TSUdOQUxfRU5BQkxFKTsKK291dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCXNkaGNpX3J1bnRpbWVfcG1fcHV0KGhvc3QpOwogCkBAIC0yMTEwLDE1ICsyMTMzLDE4IEBACiB7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHByZXNlbnQ7CiAKIAkvKiBGaXJzdCBjaGVjayBpZiBjbGllbnQgaGFzIHByb3ZpZGVkIHRoZWlyIG93biBjYXJkIGV2ZW50ICovCiAJaWYgKGhvc3QtPm9wcy0+Y2FyZF9ldmVudCkKIAkJaG9zdC0+b3BzLT5jYXJkX2V2ZW50KGhvc3QpOwogCisJcHJlc2VudCA9IHNkaGNpX2RvX2dldF9jZChob3N0KTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAKIAkvKiBDaGVjayBob3N0LT5tcnEgZmlyc3QgaW4gY2FzZSB3ZSBhcmUgcnVudGltZSBzdXNwZW5kZWQgKi8KLQlpZiAoaG9zdC0+bXJxICYmICFzZGhjaV9kb19nZXRfY2QoaG9zdCkpIHsKKwlpZiAoaG9zdC0+bXJxICYmICFwcmVzZW50KSB7CiAJCXByX2VycigiJXM6IENhcmQgcmVtb3ZlZCBkdXJpbmcgdHJhbnNmZXIhXG4iLAogCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOwogCQlwcl9lcnIoIiVzOiBSZXNldHRpbmcgY29udHJvbGxlci5cbiIsCkBAIC0yMTQyLDYgKzIxNjgsNyBAQAogCS5od19yZXNldAk9IHNkaGNpX2h3X3Jlc2V0LAogCS5lbmFibGVfc2Rpb19pcnEgPSBzZGhjaV9lbmFibGVfc2Rpb19pcnEsCiAJLnN0YXJ0X3NpZ25hbF92b2x0YWdlX3N3aXRjaAk9IHNkaGNpX3N0YXJ0X3NpZ25hbF92b2x0YWdlX3N3aXRjaCwKKwkucHJlcGFyZV9oczQwMF90dW5pbmcJCT0gc2RoY2lfcHJlcGFyZV9oczQwMF90dW5pbmcsCiAJLmV4ZWN1dGVfdHVuaW5nCQkJPSBzZGhjaV9leGVjdXRlX3R1bmluZywKIAkuY2FyZF9ldmVudAkJCT0gc2RoY2lfY2FyZF9ldmVudCwKIAkuY2FyZF9idXN5CT0gc2RoY2lfY2FyZF9idXN5LApAQCAtMzI2MCw4ICszMjg3LDkgQEAKIAkJbW1jLT5tYXhfc2VncyA9IFNESENJX01BWF9TRUdTOwogCiAJLyoKLQkgKiBNYXhpbXVtIG51bWJlciBvZiBzZWN0b3JzIGluIG9uZSB0cmFuc2Zlci4gTGltaXRlZCBieSBETUEgYm91bmRhcnkKLQkgKiBzaXplICg1MTJLaUIpLgorCSAqIE1heGltdW0gbnVtYmVyIG9mIHNlY3RvcnMgaW4gb25lIHRyYW5zZmVyLiBMaW1pdGVkIGJ5IFNETUEgYm91bmRhcnkKKwkgKiBzaXplICg1MTJLaUIpLiBOb3RlIHNvbWUgdHVuaW5nIG1vZGVzIGltcG9zZSBhIDRNaUIgbGltaXQsIGJ1dCB0aGlzCisJICogaXMgbGVzcyBhbnl3YXkuCiAJICovCiAJbW1jLT5tYXhfcmVxX3NpemUgPSA1MjQyODg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDE4NGM0MzQuLjBkY2ViYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMTY0OCw3ICsxNjQ4LDcgQEAKIAkvKiBzbGF2ZSBpcyBub3QgYSBzbGF2ZSBvciBtYXN0ZXIgaXMgbm90IG1hc3RlciBvZiB0aGlzIHNsYXZlICovCiAJaWYgKCEoc2xhdmVfZGV2LT5mbGFncyAmIElGRl9TTEFWRSkgfHwKIAkgICAgIW5ldGRldl9oYXNfdXBwZXJfZGV2KHNsYXZlX2RldiwgYm9uZF9kZXYpKSB7Ci0JCW5ldGRldl9lcnIoYm9uZF9kZXYsICJjYW5ub3QgcmVsZWFzZSAlc1xuIiwKKwkJbmV0ZGV2X2RiZyhib25kX2RldiwgImNhbm5vdCByZWxlYXNlICVzXG4iLAogCQkJICAgc2xhdmVfZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3ZpcnRpby5jIGIvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3ZpcnRpby5jCmluZGV4IGE1ZmVmYjkuLmIzMDYyMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl92aXJ0aW8uYworKysgYi9kcml2ZXJzL25ldC9jYWlmL2NhaWZfdmlydGlvLmMKQEAgLTI1Nyw3ICsyNTcsNiBAQAogCXN0cnVjdCB2cmluZ2hfa2lvdiAqcmlvdiA9ICZjZnYtPmN0eC5yaW92OwogCXVuc2lnbmVkIGludCBza2JfbGVuOwogCi1hZ2FpbjoKIAlkbyB7CiAJCXNrYiA9IE5VTEw7CiAKQEAgLTMyMiw3ICszMjEsNiBAQAogCQkgICAgbmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSB7CiAJCQl2cmluZ2hfbm90aWZ5X2Rpc2FibGVfa2VybihjZnYtPnZyX3J4KTsKIAkJCV9fbmFwaV9zY2hlZHVsZShuYXBpKTsKLQkJCWdvdG8gYWdhaW47CiAJCX0KIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMKaW5kZXggZjk0YTlmYS4uYzY3MmM0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMKQEAgLTYxNSw2ICs2MTUsOSBAQAogCiAJY19jYW5faXJxX2NvbnRyb2wocHJpdiwgZmFsc2UpOwogCisJLyogcHV0IGN0cmwgdG8gaW5pdCBvbiBzdG9wIHRvIGVuZCBvbmdvaW5nIHRyYW5zbWlzc2lvbiAqLworCXByaXYtPndyaXRlX3JlZyhwcml2LCBDX0NBTl9DVFJMX1JFRywgQ09OVFJPTF9JTklUKTsKKwogCS8qIGRlYWN0aXZhdGUgcGlucyAqLwogCXBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKGRldi0+ZGV2LnBhcmVudCk7CiAJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX1NUT1BQRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vY19jYW4vY19jYW5fcGxhdGZvcm0uYyBiL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbl9wbGF0Zm9ybS5jCmluZGV4IGYzNjM5NzIuLmUzNmQxMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbl9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbl9wbGF0Zm9ybS5jCkBAIC0xMDMsMjcgKzEwMywzNCBAQAogCW1hc2sgPSAxIDw8IHJhbWluaXQtPmJpdHMuc3RhcnQgfCAxIDw8IHJhbWluaXQtPmJpdHMuZG9uZTsKIAlyZWdtYXBfcmVhZChyYW1pbml0LT5zeXNjb24sIHJhbWluaXQtPnJlZywgJmN0cmwpOwogCi0JLyogV2UgY2xlYXIgdGhlIGRvbmUgYW5kIHN0YXJ0IGJpdCBmaXJzdC4gVGhlIHN0YXJ0IGJpdCBpcworCS8qIFdlIGNsZWFyIHRoZSBzdGFydCBiaXQgZmlyc3QuIFRoZSBzdGFydCBiaXQgaXMKIAkgKiBsb29raW5nIGF0IHRoZSAwIC0+IHRyYW5zaXRpb24sIGJ1dCBpcyBub3Qgc2VsZiBjbGVhcmluZzsKLQkgKiBBbmQgd2UgY2xlYXIgdGhlIGluaXQgZG9uZSBiaXQgYXMgd2VsbC4KIAkgKiBOT1RFOiBET05FIG11c3QgYmUgd3JpdHRlbiB3aXRoIDEgdG8gY2xlYXIgaXQuCisJICogV2UgY2FuJ3QgY2xlYXIgdGhlIERPTkUgYml0IGhlcmUgdXNpbmcgcmVnbWFwX3VwZGF0ZV9iaXRzKCkKKwkgKiBhcyBpdCB3aWxsIGJ5cGFzcyB0aGUgd3JpdGUgaWYgaW5pdGlhbCBjb25kaXRpb24gaXMgU1RBUlQ6MCBET05FOjEKKwkgKiBlLmcuIG9uIERSQTcgd2hpY2ggbmVlZHMgU1RBUlQgcHVsc2UuCiAJICovCi0JY3RybCAmPSB+KDEgPDwgcmFtaW5pdC0+Yml0cy5zdGFydCk7Ci0JY3RybCB8PSAxIDw8IHJhbWluaXQtPmJpdHMuZG9uZTsKLQlyZWdtYXBfd3JpdGUocmFtaW5pdC0+c3lzY29uLCByYW1pbml0LT5yZWcsIGN0cmwpOworCWN0cmwgJj0gfm1hc2s7CS8qIFNUQVJUID0gMCwgRE9ORSA9IDAgKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMocmFtaW5pdC0+c3lzY29uLCByYW1pbml0LT5yZWcsIG1hc2ssIGN0cmwpOwogCi0JY3RybCAmPSB+KDEgPDwgcmFtaW5pdC0+Yml0cy5kb25lKTsKLQljX2Nhbl9od19yYW1pbml0X3dhaXRfc3lzY29uKHByaXYsIG1hc2ssIGN0cmwpOworCS8qIGNoZWNrIGlmIFNUQVJUIGJpdCBpcyAwLiBJZ25vcmUgRE9ORSBiaXQgZm9yIG5vdworCSAqIGFzIGl0IGNhbiBiZSBlaXRoZXIgMCBvciAxLgorCSAqLworCWNfY2FuX2h3X3JhbWluaXRfd2FpdF9zeXNjb24ocHJpdiwgMSA8PCByYW1pbml0LT5iaXRzLnN0YXJ0LCBjdHJsKTsKIAogCWlmIChlbmFibGUpIHsKLQkJLyogU2V0IHN0YXJ0IGJpdCBhbmQgd2FpdCBmb3IgdGhlIGRvbmUgYml0LiAqLworCQkvKiBDbGVhciBET05FIGJpdCAmIHNldCBTVEFSVCBiaXQuICovCiAJCWN0cmwgfD0gMSA8PCByYW1pbml0LT5iaXRzLnN0YXJ0OwotCQlyZWdtYXBfd3JpdGUocmFtaW5pdC0+c3lzY29uLCByYW1pbml0LT5yZWcsIGN0cmwpOwotCisJCS8qIERPTkUgbXVzdCBiZSB3cml0dGVuIHdpdGggMSB0byBjbGVhciBpdCAqLworCQljdHJsIHw9IDEgPDwgcmFtaW5pdC0+Yml0cy5kb25lOworCQlyZWdtYXBfdXBkYXRlX2JpdHMocmFtaW5pdC0+c3lzY29uLCByYW1pbml0LT5yZWcsIG1hc2ssIGN0cmwpOworCQkvKiBwcmV2ZW50IGZ1cnRoZXIgY2xlYXJpbmcgb2YgRE9ORSBiaXQgKi8KKwkJY3RybCAmPSB+KDEgPDwgcmFtaW5pdC0+Yml0cy5kb25lKTsKIAkJLyogY2xlYXIgU1RBUlQgYml0IGlmIHN0YXJ0IHB1bHNlIGlzIG5lZWRlZCAqLwogCQlpZiAocmFtaW5pdC0+bmVlZHNfcHVsc2UpIHsKIAkJCWN0cmwgJj0gfigxIDw8IHJhbWluaXQtPmJpdHMuc3RhcnQpOwotCQkJcmVnbWFwX3dyaXRlKHJhbWluaXQtPnN5c2NvbiwgcmFtaW5pdC0+cmVnLCBjdHJsKTsKKwkJCXJlZ21hcF91cGRhdGVfYml0cyhyYW1pbml0LT5zeXNjb24sIHJhbWluaXQtPnJlZywKKwkJCQkJICAgbWFzaywgY3RybCk7CiAJCX0KIAogCQljdHJsIHw9IDEgPDwgcmFtaW5pdC0+Yml0cy5kb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2Rldi5jIGIvZHJpdmVycy9uZXQvY2FuL2Rldi5jCmluZGV4IDNlYzhmNmYuLjg0N2MxZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYworKysgYi9kcml2ZXJzL25ldC9jYW4vZGV2LmMKQEAgLTgwNywxMCArODA3LDE0IEBACiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQogCQkJcmV0dXJuIC1FQlVTWTsKIAkJY20gPSBubGFfZGF0YShkYXRhW0lGTEFfQ0FOX0NUUkxNT0RFXSk7Ci0JCWlmIChjbS0+ZmxhZ3MgJiB+cHJpdi0+Y3RybG1vZGVfc3VwcG9ydGVkKQorCisJCS8qIGNoZWNrIHdoZXRoZXIgY2hhbmdlZCBiaXRzIGFyZSBhbGxvd2VkIHRvIGJlIG1vZGlmaWVkICovCisJCWlmIChjbS0+bWFzayAmIH5wcml2LT5jdHJsbW9kZV9zdXBwb3J0ZWQpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkJLyogY2xlYXIgYml0cyB0byBiZSBtb2RpZmllZCBhbmQgY29weSB0aGUgZmxhZyB2YWx1ZXMgKi8KIAkJcHJpdi0+Y3RybG1vZGUgJj0gfmNtLT5tYXNrOwotCQlwcml2LT5jdHJsbW9kZSB8PSBjbS0+ZmxhZ3M7CisJCXByaXYtPmN0cmxtb2RlIHw9IChjbS0+ZmxhZ3MgJiBjbS0+bWFzayk7CiAKIAkJLyogQ0FOX0NUUkxNT0RFX0ZEIGNhbiBvbmx5IGJlIHNldCB3aGVuIGRyaXZlciBzdXBwb3J0cyBGRCAqLwogCQlpZiAocHJpdi0+Y3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfRkQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vbV9jYW4vbV9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9tX2Nhbi9tX2Nhbi5jCmluZGV4IGQ3YmM0NjIuLjI0NDUyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tX2Nhbi9tX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tX2Nhbi9tX2Nhbi5jCkBAIC05NTUsNiArOTU1LDExIEBACiAJcHJpdi0+Y2FuLmRhdGFfYml0dGltaW5nX2NvbnN0ID0gJm1fY2FuX2RhdGFfYml0dGltaW5nX2NvbnN0OwogCXByaXYtPmNhbi5kb19zZXRfbW9kZSA9IG1fY2FuX3NldF9tb2RlOwogCXByaXYtPmNhbi5kb19nZXRfYmVycl9jb3VudGVyID0gbV9jYW5fZ2V0X2JlcnJfY291bnRlcjsKKworCS8qIENBTl9DVFJMTU9ERV9GRF9OT05fSVNPIGlzIGZpeGVkIHdpdGggTV9DQU4gSVAgdjMuMC4xICovCisJcHJpdi0+Y2FuLmN0cmxtb2RlID0gQ0FOX0NUUkxNT0RFX0ZEX05PTl9JU087CisKKwkvKiBDQU5fQ1RSTE1PREVfRkRfTk9OX0lTTyBjYW4gbm90IGJlIGNoYW5nZWQgd2l0aCBNX0NBTiBJUCB2My4wLjEgKi8KIAlwcml2LT5jYW4uY3RybG1vZGVfc3VwcG9ydGVkID0gQ0FOX0NUUkxNT0RFX0xPT1BCQUNLIHwKIAkJCQkJQ0FOX0NUUkxNT0RFX0xJU1RFTk9OTFkgfAogCQkJCQlDQU5fQ1RSTE1PREVfQkVSUl9SRVBPUlRJTkcgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiLmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2IuYwppbmRleCA1NDFmYjdhLi43YWYzNzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2IuYworKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2IuYwpAQCAtNTIwLDEwICs1MjAsMTAgQEAKIAkJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IocHJpdi0+bmV0ZGV2LCAmY2YpOwogCQlpZiAoc2tiKSB7CiAJCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfUkVTVEFSVEVEOwotCQkJbmV0aWZfcngoc2tiKTsKIAogCQkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKIAkJCXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKKwkJCW5ldGlmX3J4KHNrYik7CiAJCX0gZWxzZSB7CiAJCQluZXRkZXZfZXJyKHByaXYtPm5ldGRldiwKIAkJCQkgICAiTm8gbWVtb3J5IGxlZnQgZm9yIGVycl9za2JcbiIpOwpAQCAtNTg3LDcgKzU4Nyw3IEBACiAJCQkgIHVzYl9zbmRidWxrcGlwZShkZXYtPnVkZXYsCiAJCQkJCSAgZGV2LT5idWxrX291dC0+YkVuZHBvaW50QWRkcmVzcyksCiAJCQkgIGJ1ZiwgbXNnLT5sZW4sCi0JCQkgIGt2YXNlcl91c2Jfc2ltcGxlX21zZ19jYWxsYmFjaywgcHJpdik7CisJCQkgIGt2YXNlcl91c2Jfc2ltcGxlX21zZ19jYWxsYmFjaywgbmV0ZGV2KTsKIAl1c2JfYW5jaG9yX3VyYih1cmIsICZwcml2LT50eF9zdWJtaXR0ZWQpOwogCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKQEAgLTY2MiwxMSArNjYyLDYgQEAKIAlwcml2ID0gZGV2LT5uZXRzW2NoYW5uZWxdOwogCXN0YXRzID0gJnByaXYtPm5ldGRldi0+c3RhdHM7CiAKLQlpZiAoc3RhdHVzICYgTTE2Q19TVEFURV9CVVNfUkVTRVQpIHsKLQkJa3Zhc2VyX3VzYl91bmxpbmtfdHhfdXJicyhwcml2KTsKLQkJcmV0dXJuOwotCX0KLQogCXNrYiA9IGFsbG9jX2Nhbl9lcnJfc2tiKHByaXYtPm5ldGRldiwgJmNmKTsKIAlpZiAoIXNrYikgewogCQlzdGF0cy0+cnhfZHJvcHBlZCsrOwpAQCAtNjc3LDcgKzY3Miw3IEBACiAKIAluZXRkZXZfZGJnKHByaXYtPm5ldGRldiwgIkVycm9yIHN0YXR1czogMHglMDJ4XG4iLCBzdGF0dXMpOwogCi0JaWYgKHN0YXR1cyAmIE0xNkNfU1RBVEVfQlVTX09GRikgeworCWlmIChzdGF0dXMgJiAoTTE2Q19TVEFURV9CVVNfT0ZGIHwgTTE2Q19TVEFURV9CVVNfUkVTRVQpKSB7CiAJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9CVVNPRkY7CiAKIAkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfb2ZmKys7CkBAIC03MDMsOSArNjk4LDcgQEAKIAkJfQogCiAJCW5ld19zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFOwotCX0KLQotCWlmIChzdGF0dXMgPT0gTTE2Q19TVEFURV9CVVNfRVJST1IpIHsKKwl9IGVsc2UgaWYgKHN0YXR1cyAmIE0xNkNfU1RBVEVfQlVTX0VSUk9SKSB7CiAJCWlmICgocHJpdi0+Y2FuLnN0YXRlIDwgQ0FOX1NUQVRFX0VSUk9SX1dBUk5JTkcpICYmCiAJCSAgICAoKHR4ZXJyID49IDk2KSB8fCAocnhlcnIgPj0gOTYpKSkgewogCQkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7CkBAIC03MTUsNyArNzA4LDggQEAKIAogCQkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5lcnJvcl93YXJuaW5nKys7CiAJCQluZXdfc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfV0FSTklORzsKLQkJfSBlbHNlIGlmIChwcml2LT5jYW4uc3RhdGUgPiBDQU5fU1RBVEVfRVJST1JfQUNUSVZFKSB7CisJCX0gZWxzZSBpZiAoKHByaXYtPmNhbi5zdGF0ZSA+IENBTl9TVEFURV9FUlJPUl9BQ1RJVkUpICYmCisJCQkgICAoKHR4ZXJyIDwgOTYpICYmIChyeGVyciA8IDk2KSkpIHsKIAkJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9QUk9UOwogCQkJY2YtPmRhdGFbMl0gPSBDQU5fRVJSX1BST1RfQUNUSVZFOwogCkBAIC03NzAsMTAgKzc2NCw5IEBACiAKIAlwcml2LT5jYW4uc3RhdGUgPSBuZXdfc3RhdGU7CiAKLQluZXRpZl9yeChza2IpOwotCiAJc3RhdHMtPnJ4X3BhY2tldHMrKzsKIAlzdGF0cy0+cnhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7CisJbmV0aWZfcngoc2tiKTsKIH0KIAogc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9yeF9jYW5fZXJyKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiX25ldF9wcml2ICpwcml2LApAQCAtODA1LDEwICs3OTgsOSBAQAogCQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMrKzsKIAkJc3RhdHMtPnJ4X2Vycm9ycysrOwogCi0JCW5ldGlmX3J4KHNrYik7Ci0KIAkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKIAkJc3RhdHMtPnJ4X2J5dGVzICs9IGNmLT5jYW5fZGxjOworCQluZXRpZl9yeChza2IpOwogCX0KIH0KIApAQCAtODg3LDEwICs4NzksOSBAQAogCQkJICAgICAgIGNmLT5jYW5fZGxjKTsKIAl9CiAKLQluZXRpZl9yeChza2IpOwotCiAJc3RhdHMtPnJ4X3BhY2tldHMrKzsKIAlzdGF0cy0+cnhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7CisJbmV0aWZfcngoc2tiKTsKIH0KIAogc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9zdGFydF9jaGlwX3JlcGx5KGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsCkBAIC0xMjQ2LDYgKzEyMzcsOSBAQAogCWlmIChlcnIpCiAJCW5ldGRldl93YXJuKG5ldGRldiwgIkNhbm5vdCBzdG9wIGRldmljZSwgZXJyb3IgJWRcbiIsIGVycik7CiAKKwkvKiByZXNldCB0eCBjb250ZXh0cyAqLworCWt2YXNlcl91c2JfdW5saW5rX3R4X3VyYnMocHJpdik7CisKIAlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfU1RPUFBFRDsKIAljbG9zZV9jYW5kZXYocHJpdi0+bmV0ZGV2KTsKIApAQCAtMTI5NCwxMiArMTI4OCwxNCBAQAogCWlmICghdXJiKSB7CiAJCW5ldGRldl9lcnIobmV0ZGV2LCAiTm8gbWVtb3J5IGxlZnQgZm9yIFVSQnNcbiIpOwogCQlzdGF0cy0+dHhfZHJvcHBlZCsrOwotCQlnb3RvIG5vdXJibWVtOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2YXNlcl9tc2cpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJ1ZikgewogCQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gbm9idWZtZW07CiAJfQogCkBAIC0xMzM0LDYgKzEzMzAsNyBAQAogCQl9CiAJfQogCisJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuOyBpdCBpbXBsaWVzIGEgZmxvdyBjb250cm9sIGJ1ZyAqLwogCWlmICghY29udGV4dCkgewogCQluZXRkZXZfd2FybihuZXRkZXYsICJjYW5ub3QgZmluZCBmcmVlIGNvbnRleHRcbiIpOwogCQlyZXQgPSAgTkVUREVWX1RYX0JVU1k7CkBAIC0xMzY0LDkgKzEzNjEsNiBAQAogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCWNhbl9mcmVlX2VjaG9fc2tiKG5ldGRldiwgY29udGV4dC0+ZWNob19pbmRleCk7CiAKLQkJc2tiID0gTlVMTDsgLyogc2V0IHRvIE5VTEwgdG8gYXZvaWQgZG91YmxlIGZyZWUgaW4KLQkJCSAgICAgKiBkZXZfa2ZyZWVfc2tiKHNrYikgKi8KLQogCQlhdG9taWNfZGVjKCZwcml2LT5hY3RpdmVfdHhfdXJicyk7CiAJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKIApAQCAtMTM4OCw4ICsxMzgyLDYgQEAKIAlrZnJlZShidWYpOwogbm9idWZtZW06CiAJdXNiX2ZyZWVfdXJiKHVyYik7Ci1ub3VyYm1lbToKLQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTUwMiw2ICsxNDk0LDEwIEBACiAJc3RydWN0IGt2YXNlcl91c2JfbmV0X3ByaXYgKnByaXY7CiAJaW50IGksIGVycjsKIAorCWVyciA9IGt2YXNlcl91c2Jfc2VuZF9zaW1wbGVfbXNnKGRldiwgQ01EX1JFU0VUX0NISVAsIGNoYW5uZWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAluZXRkZXYgPSBhbGxvY19jYW5kZXYoc2l6ZW9mKCpwcml2KSwgTUFYX1RYX1VSQlMpOwogCWlmICghbmV0ZGV2KSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkNhbm5vdCBhbGxvYyBjYW5kZXZcbiIpOwpAQCAtMTU4OCw3ICsxNTg0LDcgQEAKIHsKIAlzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2OwogCWludCBlcnIgPSAtRU5PTUVNOwotCWludCBpOworCWludCBpLCByZXRyeSA9IDM7CiAKIAlkZXYgPSBkZXZtX2t6YWxsb2MoJmludGYtPmRldiwgc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldikKQEAgLTE2MDYsMTAgKzE2MDIsMTUgQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfTkVUX0RFVklDRVM7IGkrKykKLQkJa3Zhc2VyX3VzYl9zZW5kX3NpbXBsZV9tc2coZGV2LCBDTURfUkVTRVRfQ0hJUCwgaSk7CisJLyogT24gc29tZSB4ODYgbGFwdG9wcywgcGx1Z2dpbmcgYSBLdmFzZXIgZGV2aWNlIGFnYWluIGFmdGVyCisJICogYW4gdW5wbHVnIG1ha2VzIHRoZSBmaXJtd2FyZSBhbHdheXMgaWdub3JlIHRoZSB2ZXJ5IGZpcnN0CisJICogY29tbWFuZC4gRm9yIHN1Y2ggYSBjYXNlLCBwcm92aWRlIHNvbWUgcm9vbSBmb3IgcmV0cmllcworCSAqIGluc3RlYWQgb2YgY29tcGxldGVseSBleGl0aW5nIHRoZSBkcml2ZXIuCisJICovCisJZG8geworCQllcnIgPSBrdmFzZXJfdXNiX2dldF9zb2Z0d2FyZV9pbmZvKGRldik7CisJfSB3aGlsZSAoLS1yZXRyeSAmJiBlcnIgPT0gLUVUSU1FRE9VVCk7CiAKLQllcnIgPSBrdmFzZXJfdXNiX2dldF9zb2Z0d2FyZV9pbmZvKGRldik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZpbnRmLT5kZXYsCiAJCQkiQ2Fubm90IGdldCBzb2Z0d2FyZSBpbmZvcywgZXJyb3IgJWRcbiIsIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL25lMmstcGNpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL25lMmstcGNpLmMKaW5kZXggODljOGQ5Zi4uNTdlOTc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9uZTJrLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbmUyay1wY2kuYwpAQCAtMjQ2LDEzICsyNDYsMTMgQEAKIAogCWlmICghaW9hZGRyIHx8ICgocGNpX3Jlc291cmNlX2ZsYWdzIChwZGV2LCAwKSAmIElPUkVTT1VSQ0VfSU8pID09IDApKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIEkvTyByZXNvdXJjZSBhdCBQQ0kgQkFSICMwXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gZXJyX291dDsKIAl9CiAKIAlpZiAocmVxdWVzdF9yZWdpb24gKGlvYWRkciwgTkVfSU9fRVhURU5ULCBEUlZfTkFNRSkgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJL08gcmVzb3VyY2UgMHgleCBAIDB4JWx4IGJ1c3lcbiIsCiAJCQlORV9JT19FWFRFTlQsIGlvYWRkcik7Ci0JCXJldHVybiAtRUJVU1k7CisJCWdvdG8gZXJyX291dDsKIAl9CiAKIAlyZWcwID0gaW5iKGlvYWRkcik7CkBAIC0zOTIsNiArMzkyLDggQEAKIAlmcmVlX25ldGRldiAoZGV2KTsKIGVycl9vdXRfZnJlZV9yZXM6CiAJcmVsZWFzZV9yZWdpb24gKGlvYWRkciwgTkVfSU9fRVhURU5UKTsKK2Vycl9vdXQ6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXJldHVybiAtRU5PREVWOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZwppbmRleCBkZjc2MDUwLi5lYWRjYjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKQEAgLTE1NiwxOCArMTU2LDYgQEAKIHNvdXJjZSAiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZGMvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL0tjb25maWciCi0KLWNvbmZpZyBTNkdNQUMKLQl0cmlzdGF0ZSAiUzYxMDUgR01BQyBldGhlcm5ldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gWFRFTlNBX1ZBUklBTlRfUzYwMDAKLQlzZWxlY3QgUEhZTElCCi0JLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIG9uIGNoaXAgZXRoZXJuZXQgZGV2aWNlIG9uIHRoZQotCSAgUzYxMDUgeHRlbnNhIHByb2Nlc3Nvci4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgczZnbWFjLgotCiBzb3VyY2UgImRyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvZXRoZXJuZXQvc2VlcS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9zaWxhbi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQppbmRleCBiZjU2ZjhiLi4xMzY3YWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQpAQCAtNjYsNyArNjYsNiBAQAogb2JqLSQoQ09ORklHX1NIX0VUSCkgKz0gcmVuZXNhcy8KIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1JEQykgKz0gcmRjLwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUk9DS0VSKSArPSByb2NrZXIvCi1vYmotJChDT05GSUdfUzZHTUFDKSArPSBzNmdtYWMubwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfU0FNU1VORykgKz0gc2Ftc3VuZy8KIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1NFRVEpICs9IHNlZXEvCiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TSUxBTikgKz0gc2lsYW4vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGx3aW5uZXIvc3VuNGktZW1hYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxsd2lubmVyL3N1bjRpLWVtYWMuYwppbmRleCAxZmNkNTU2Li5mMzQ3MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGx3aW5uZXIvc3VuNGktZW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsbHdpbm5lci9zdW40aS1lbWFjLmMKQEAgLTg1MCw4ICs4NTAsMTAgQEAKIAl9CiAKIAlkYi0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwotCWlmIChJU19FUlIoZGItPmNsaykpCisJaWYgKElTX0VSUihkYi0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRiLT5jbGspOwogCQlnb3RvIG91dDsKKwl9CiAKIAljbGtfcHJlcGFyZV9lbmFibGUoZGItPmNsayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYwppbmRleCAzNDk4NzYwLi43NjBjNzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jCkBAIC0xMTcwLDEwICsxMTcwLDYgQEAKIGluaXRfZXJyb3I6CiAJZnJlZV9za2J1ZnMoZGV2KTsKIGFsbG9jX3NrYnVmX2Vycm9yOgotCWlmIChwcml2LT5waHlkZXYpIHsKLQkJcGh5X2Rpc2Nvbm5lY3QocHJpdi0+cGh5ZGV2KTsKLQkJcHJpdi0+cGh5ZGV2ID0gTlVMTDsKLQl9CiBwaHlfZXJyb3I6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTExODYsMTIgKzExODIsOSBAQAogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3M7CiAKLQkvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi8KLQlpZiAocHJpdi0+cGh5ZGV2KSB7CisJLyogU3RvcCB0aGUgUEhZICovCisJaWYgKHByaXYtPnBoeWRldikKIAkJcGh5X3N0b3AocHJpdi0+cGh5ZGV2KTsKLQkJcGh5X2Rpc2Nvbm5lY3QocHJpdi0+cGh5ZGV2KTsKLQkJcHJpdi0+cGh5ZGV2ID0gTlVMTDsKLQl9CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKQEAgLTE1MjUsNiArMTUxOCwxMCBAQAogc3RhdGljIGludCBhbHRlcmFfdHNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGFsdGVyYV90c2VfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCisJaWYgKHByaXYtPnBoeWRldikKKwkJcGh5X2Rpc2Nvbm5lY3QocHJpdi0+cGh5ZGV2KTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWFsdGVyYV90c2VfbWRpb19kZXN0cm95KG5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtY29tbW9uLmgKaW5kZXggNzViMDhjNi4uMjlhMDkyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWNvbW1vbi5oCkBAIC03NjcsMTYgKzc2NywxNyBAQAogI2RlZmluZSBNVExfUV9SUU9NUgkJCTB4NDAKICNkZWZpbmUgTVRMX1FfUlFNUE9DUgkJCTB4NDQKICNkZWZpbmUgTVRMX1FfUlFEUgkJCTB4NGMKKyNkZWZpbmUgTVRMX1FfUlFGQ1IJCQkweDUwCiAjZGVmaW5lIE1UTF9RX0lFUgkJCTB4NzAKICNkZWZpbmUgTVRMX1FfSVNSCQkJMHg3NAogCiAvKiBNVEwgcXVldWUgcmVnaXN0ZXIgZW50cnkgYml0IHBvc2l0aW9ucyBhbmQgc2l6ZXMgKi8KKyNkZWZpbmUgTVRMX1FfUlFGQ1JfUkZBX0lOREVYCQkxCisjZGVmaW5lIE1UTF9RX1JRRkNSX1JGQV9XSURUSAkJNgorI2RlZmluZSBNVExfUV9SUUZDUl9SRkRfSU5ERVgJCTE3CisjZGVmaW5lIE1UTF9RX1JRRkNSX1JGRF9XSURUSAkJNgogI2RlZmluZSBNVExfUV9SUU9NUl9FSEZDX0lOREVYCQk3CiAjZGVmaW5lIE1UTF9RX1JRT01SX0VIRkNfV0lEVEgJCTEKLSNkZWZpbmUgTVRMX1FfUlFPTVJfUkZBX0lOREVYCQk4Ci0jZGVmaW5lIE1UTF9RX1JRT01SX1JGQV9XSURUSAkJMwotI2RlZmluZSBNVExfUV9SUU9NUl9SRkRfSU5ERVgJCTEzCi0jZGVmaW5lIE1UTF9RX1JRT01SX1JGRF9XSURUSAkJMwogI2RlZmluZSBNVExfUV9SUU9NUl9SUVNfSU5ERVgJCTE2CiAjZGVmaW5lIE1UTF9RX1JRT01SX1JRU19XSURUSAkJOQogI2RlZmluZSBNVExfUV9SUU9NUl9SU0ZfSU5ERVgJCTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRldi5jCmluZGV4IDUzZjVmNjYuLjRjNjZjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kZXYuYwpAQCAtMjA3OSwxMCArMjA3OSwxMCBAQAogCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5yeF9xX2NvdW50OyBpKyspIHsKIAkJLyogQWN0aXZhdGUgZmxvdyBjb250cm9sIHdoZW4gbGVzcyB0aGFuIDRrIGxlZnQgaW4gZmlmbyAqLwotCQlYR01BQ19NVExfSU9XUklURV9CSVRTKHBkYXRhLCBpLCBNVExfUV9SUU9NUiwgUkZBLCAyKTsKKwkJWEdNQUNfTVRMX0lPV1JJVEVfQklUUyhwZGF0YSwgaSwgTVRMX1FfUlFGQ1IsIFJGQSwgMik7CiAKIAkJLyogRGUtYWN0aXZhdGUgZmxvdyBjb250cm9sIHdoZW4gbW9yZSB0aGFuIDZrIGxlZnQgaW4gZmlmbyAqLwotCQlYR01BQ19NVExfSU9XUklURV9CSVRTKHBkYXRhLCBpLCBNVExfUV9SUU9NUiwgUkZELCA0KTsKKwkJWEdNQUNfTVRMX0lPV1JJVEVfQklUUyhwZGF0YSwgaSwgTVRMX1FfUlFGQ1IsIFJGRCwgNCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FseC9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FseC9tYWluLmMKaW5kZXggZTM5OGVkYS4uYzhhZjNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hbHgvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWx4L21haW4uYwpAQCAtMTg0LDE1ICsxODQsMTYgQEAKIAlzY2hlZHVsZV93b3JrKCZhbHgtPnJlc2V0X3drKTsKIH0KIAotc3RhdGljIGJvb2wgYWx4X2NsZWFuX3J4X2lycShzdHJ1Y3QgYWx4X3ByaXYgKmFseCwgaW50IGJ1ZGdldCkKK3N0YXRpYyBpbnQgYWx4X2NsZWFuX3J4X2lycShzdHJ1Y3QgYWx4X3ByaXYgKmFseCwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgYWx4X3J4X3F1ZXVlICpyeHEgPSAmYWx4LT5yeHE7CiAJc3RydWN0IGFseF9ycmQgKnJyZDsKIAlzdHJ1Y3QgYWx4X2J1ZmZlciAqcnhiOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTE2IGxlbmd0aCwgcmZkX2NsZWFuZWQgPSAwOworCWludCB3b3JrID0gMDsKIAotCXdoaWxlIChidWRnZXQgPiAwKSB7CisJd2hpbGUgKHdvcmsgPCBidWRnZXQpIHsKIAkJcnJkID0gJnJ4cS0+cnJkW3J4cS0+cnJkX3JlYWRfaWR4XTsKIAkJaWYgKCEocnJkLT53b3JkMyAmIGNwdV90b19sZTMyKDEgPDwgUlJEX1VQREFURURfU0hJRlQpKSkKIAkJCWJyZWFrOwpAQCAtMjAzLDcgKzIwNCw3IEBACiAJCSAgICBBTFhfR0VUX0ZJRUxEKGxlMzJfdG9fY3B1KHJyZC0+d29yZDApLAogCQkJCSAgUlJEX05PUikgIT0gMSkgewogCQkJYWx4X3NjaGVkdWxlX3Jlc2V0KGFseCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiB3b3JrOwogCQl9CiAKIAkJcnhiID0gJnJ4cS0+YnVmc1tyeHEtPnJlYWRfaWR4XTsKQEAgLTI0Myw3ICsyNDQsNyBAQAogCQl9CiAKIAkJbmFwaV9ncm9fcmVjZWl2ZSgmYWx4LT5uYXBpLCBza2IpOwotCQlidWRnZXQtLTsKKwkJd29yaysrOwogCiBuZXh0X3BrdDoKIAkJaWYgKCsrcnhxLT5yZWFkX2lkeCA9PSBhbHgtPnJ4X3JpbmdzeikKQEAgLTI1OCwyMSArMjU5LDIyIEBACiAJaWYgKHJmZF9jbGVhbmVkKQogCQlhbHhfcmVmaWxsX3J4X3JpbmcoYWx4LCBHRlBfQVRPTUlDKTsKIAotCXJldHVybiBidWRnZXQgPiAwOworCXJldHVybiB3b3JrOwogfQogCiBzdGF0aWMgaW50IGFseF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgYWx4X3ByaXYgKmFseCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgYWx4X3ByaXYsIG5hcGkpOwogCXN0cnVjdCBhbHhfaHcgKmh3ID0gJmFseC0+aHc7Ci0JYm9vbCBjb21wbGV0ZSA9IHRydWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIHR4X2NvbXBsZXRlOworCWludCB3b3JrOwogCi0JY29tcGxldGUgPSBhbHhfY2xlYW5fdHhfaXJxKGFseCkgJiYKLQkJICAgYWx4X2NsZWFuX3J4X2lycShhbHgsIGJ1ZGdldCk7CisJdHhfY29tcGxldGUgPSBhbHhfY2xlYW5fdHhfaXJxKGFseCk7CisJd29yayA9IGFseF9jbGVhbl9yeF9pcnEoYWx4LCBidWRnZXQpOwogCi0JaWYgKCFjb21wbGV0ZSkKLQkJcmV0dXJuIDE7CisJaWYgKCF0eF9jb21wbGV0ZSB8fCB3b3JrID09IGJ1ZGdldCkKKwkJcmV0dXJuIGJ1ZGdldDsKIAogCW5hcGlfY29tcGxldGUoJmFseC0+bmFwaSk7CiAKQEAgLTI4NCw3ICsyODYsNyBAQAogCiAJYWx4X3Bvc3Rfd3JpdGUoaHcpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHdvcms7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhbHhfaW50cl9oYW5kbGUoc3RydWN0IGFseF9wcml2ICphbHgsIHUzMiBpbnRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMKaW5kZXggMDVjNmFmNi4uMzAwN2Q5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jCkBAIC0xMTY3LDEwICsxMTY3LDEwIEBACiAJCWJnbWFjLT5pbnRfc3RhdHVzID0gMDsKIAl9CiAKLQlpZiAoaGFuZGxlZCA8IHdlaWdodCkKKwlpZiAoaGFuZGxlZCA8IHdlaWdodCkgewogCQluYXBpX2NvbXBsZXRlKG5hcGkpOwotCi0JYmdtYWNfY2hpcF9pbnRyc19vbihiZ21hYyk7CisJCWJnbWFjX2NoaXBfaW50cnNfb24oYmdtYWMpOworCX0KIAogCXJldHVybiBoYW5kbGVkOwogfQpAQCAtMTUxNSw2ICsxNTE1LDggQEAKIAlpZiAoY29yZS0+YnVzLT5zcHJvbS5ib2FyZGZsYWdzX2xvICYgQkdNQUNfQkZMX0VORVRBRE0pCiAJCWJnbWFjX3dhcm4oYmdtYWMsICJTdXBwb3J0IGZvciBBRE10ZWsgZXRoZXJuZXQgc3dpdGNoIG5vdCBpbXBsZW1lbnRlZFxuIik7CiAKKwluZXRpZl9uYXBpX2FkZChuZXRfZGV2LCAmYmdtYWMtPm5hcGksIGJnbWFjX3BvbGwsIEJHTUFDX1dFSUdIVCk7CisKIAllcnIgPSBiZ21hY19taWlfcmVnaXN0ZXIoYmdtYWMpOwogCWlmIChlcnIpIHsKIAkJYmdtYWNfZXJyKGJnbWFjLCAiQ2Fubm90IHJlZ2lzdGVyIE1ESU9cbiIpOwpAQCAtMTUyOSw4ICsxNTMxLDYgQEAKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldF9kZXYpOwogCi0JbmV0aWZfbmFwaV9hZGQobmV0X2RldiwgJmJnbWFjLT5uYXBpLCBiZ21hY19wb2xsLCBCR01BQ19XRUlHSFQpOwotCiAJcmV0dXJuIDA7CiAKIGVycl9taWlfdW5yZWdpc3RlcjoKQEAgLTE1NDksOSArMTU0OSw5IEBACiB7CiAJc3RydWN0IGJnbWFjICpiZ21hYyA9IGJjbWFfZ2V0X2RydmRhdGEoY29yZSk7CiAKLQluZXRpZl9uYXBpX2RlbCgmYmdtYWMtPm5hcGkpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGJnbWFjLT5uZXRfZGV2KTsKIAliZ21hY19taWlfdW5yZWdpc3RlcihiZ21hYyk7CisJbmV0aWZfbmFwaV9kZWwoJmJnbWFjLT5uYXBpKTsKIAliZ21hY19kbWFfZnJlZShiZ21hYyk7CiAJYmNtYV9zZXRfZHJ2ZGF0YShjb3JlLCBOVUxMKTsKIAlmcmVlX25ldGRldihiZ21hYy0+bmV0X2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jCmluZGV4IDFkMTE0N2MuLmU0NjhlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jCkBAIC0zMTc1LDcgKzMxNzUsNyBAQAogCQl9CiAjZW5kaWYKIAkJaWYgKCFibngyeF9mcF9sb2NrX25hcGkoZnApKQotCQkJcmV0dXJuIHdvcmtfZG9uZTsKKwkJCXJldHVybiBidWRnZXQ7CiAKIAkJZm9yX2VhY2hfY29zX2luX3R4X3F1ZXVlKGZwLCBjb3MpCiAJCQlpZiAoYm54MnhfdHhfcXVldWVfaGFzX3dvcmsoZnAtPnR4ZGF0YV9wdHJbY29zXSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9tYWluLmMKaW5kZXggOWY1ZTM4NzYuLjcyZWVmOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9tYWluLmMKQEAgLTEyNTUzLDkgKzEyNTUzLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIGJueDJ4X2dzb19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl9mZWF0dXJlc190IGJueDJ4X2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogewotCXJldHVybiB2eGxhbl9nc29fY2hlY2soc2tiKTsKKwlyZXR1cm4gdnhsYW5fZmVhdHVyZXNfY2hlY2soc2tiLCBmZWF0dXJlcyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm54MnhfbmV0ZGV2X29wcyA9IHsKQEAgLTEyNTg5LDcgKzEyNTkxLDcgQEAKICNlbmRpZgogCS5uZG9fZ2V0X3BoeXNfcG9ydF9pZAk9IGJueDJ4X2dldF9waHlzX3BvcnRfaWQsCiAJLm5kb19zZXRfdmZfbGlua19zdGF0ZQk9IGJueDJ4X3NldF92Zl9saW5rX3N0YXRlLAotCS5uZG9fZ3NvX2NoZWNrCQk9IGJueDJ4X2dzb19jaGVjaywKKwkubmRvX2ZlYXR1cmVzX2NoZWNrCT0gYm54MnhfZmVhdHVyZXNfY2hlY2ssCiB9OwogCiBzdGF0aWMgaW50IGJueDJ4X3NldF9jb2hlcmVuY3lfbWFzayhzdHJ1Y3QgYm54MnggKmJwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYwppbmRleCBiYjQ4YTYxLi45NmJmMDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYwpAQCAtNzQxMyw2ICs3NDEzLDggQEAKIH0KIAogc3RhdGljIHZvaWQgdGczX2lycV9xdWllc2NlKHN0cnVjdCB0ZzMgKnRwKQorCV9fcmVsZWFzZXModHAtPmxvY2spCisJX19hY3F1aXJlcyh0cC0+bG9jaykKIHsKIAlpbnQgaTsKIApAQCAtNzQyMSw4ICs3NDIzLDEyIEBACiAJdHAtPmlycV9zeW5jID0gMTsKIAlzbXBfbWIoKTsKIAorCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7CisKIAlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykKIAkJc3luY2hyb25pemVfaXJxKHRwLT5uYXBpW2ldLmlycV92ZWMpOworCisJc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7CiB9CiAKIC8qIEZ1bGx5IHNodXRkb3duIGFsbCB0ZzMgZHJpdmVyIGFjdGl2aXR5IGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLgpAQCAtOTAxOCw2ICs5MDI0LDggQEAKIAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyBpbnQgdGczX2NoaXBfcmVzZXQoc3RydWN0IHRnMyAqdHApCisJX19yZWxlYXNlcyh0cC0+bG9jaykKKwlfX2FjcXVpcmVzKHRwLT5sb2NrKQogewogCXUzMiB2YWw7CiAJdm9pZCAoKndyaXRlX29wKShzdHJ1Y3QgdGczICosIHUzMiwgdTMyKTsKQEAgLTkwNzMsOSArOTA4MSwxMyBAQAogCX0KIAlzbXBfbWIoKTsKIAorCXRnM19mdWxsX3VubG9jayh0cCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykKIAkJc3luY2hyb25pemVfaXJxKHRwLT5uYXBpW2ldLmlycV92ZWMpOwogCisJdGczX2Z1bGxfbG9jayh0cCwgMCk7CisKIAlpZiAodGczX2FzaWNfcmV2KHRwKSA9PSBBU0lDX1JFVl81Nzc4MCkgewogCQl2YWwgPSB0cjMyKFRHM19QQ0lFX0xOS0NUTCkgJiB+VEczX1BDSUVfTE5LQ1RMX0wxX1BMTF9QRF9FTjsKIAkJdHczMihURzNfUENJRV9MTktDVEwsIHZhbCB8IFRHM19QQ0lFX0xOS0NUTF9MMV9QTExfUERfRElTKTsKQEAgLTEwOTAzLDExICsxMDkxNSwxMyBAQAogewogCXN0cnVjdCB0ZzMgKnRwID0gKHN0cnVjdCB0ZzMgKikgX19vcGFxdWU7CiAKLQlpZiAodHAtPmlycV9zeW5jIHx8IHRnM19mbGFnKHRwLCBSRVNFVF9UQVNLX1BFTkRJTkcpKQotCQlnb3RvIHJlc3RhcnRfdGltZXI7Ci0KIAlzcGluX2xvY2soJnRwLT5sb2NrKTsKIAorCWlmICh0cC0+aXJxX3N5bmMgfHwgdGczX2ZsYWcodHAsIFJFU0VUX1RBU0tfUEVORElORykpIHsKKwkJc3Bpbl91bmxvY2soJnRwLT5sb2NrKTsKKwkJZ290byByZXN0YXJ0X3RpbWVyOworCX0KKwogCWlmICh0ZzNfYXNpY19yZXYodHApID09IEFTSUNfUkVWXzU3MTcgfHwKIAkgICAgdGczX2ZsYWcodHAsIDU3NzY1X0NMQVNTKSkKIAkJdGczX2Noa19taXNzZWRfbXNpKHRwKTsKQEAgLTExMTAxLDExICsxMTExNSwxMyBAQAogCXN0cnVjdCB0ZzMgKnRwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0ZzMsIHJlc2V0X3Rhc2spOwogCWludCBlcnI7CiAKKwlydG5sX2xvY2soKTsKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIAogCWlmICghbmV0aWZfcnVubmluZyh0cC0+ZGV2KSkgewogCQl0ZzNfZmxhZ19jbGVhcih0cCwgUkVTRVRfVEFTS19QRU5ESU5HKTsKIAkJdGczX2Z1bGxfdW5sb2NrKHRwKTsKKwkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTExMzgsNiArMTExNTQsNyBAQAogCQl0ZzNfcGh5X3N0YXJ0KHRwKTsKIAogCXRnM19mbGFnX2NsZWFyKHRwLCBSRVNFVF9UQVNLX1BFTkRJTkcpOworCXJ0bmxfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyBpbnQgdGczX3JlcXVlc3RfaXJxKHN0cnVjdCB0ZzMgKnRwLCBpbnQgaXJxX251bSkKQEAgLTE3ODAwLDIzICsxNzgxNyw2IEBACiAJCWdvdG8gZXJyX291dF9hcGV1bm1hcDsKIAl9CiAKLQkvKgotCSAqIFJlc2V0IGNoaXAgaW4gY2FzZSBVTkRJIG9yIEVGSSBkcml2ZXIgZGlkIG5vdCBzaHV0ZG93bgotCSAqIERNQSBzZWxmIHRlc3Qgd2lsbCBlbmFibGUgV0RNQUMgYW5kIHdlJ2xsIHNlZSAoc3B1cmlvdXMpCi0JICogcGVuZGluZyBETUEgb24gdGhlIFBDSSBidXMgYXQgdGhhdCBwb2ludC4KLQkgKi8KLQlpZiAoKHRyMzIoSE9TVENDX01PREUpICYgSE9TVENDX01PREVfRU5BQkxFKSB8fAotCSAgICAodHIzMihXRE1BQ19NT0RFKSAmIFdETUFDX01PREVfRU5BQkxFKSkgewotCQl0dzMyKE1FTUFSQl9NT0RFLCBNRU1BUkJfTU9ERV9FTkFCTEUpOwotCQl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMSk7Ci0JfQotCi0JZXJyID0gdGczX3Rlc3RfZG1hKHRwKTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkRNQSBlbmdpbmUgdGVzdCBmYWlsZWQsIGFib3J0aW5nXG4iKTsKLQkJZ290byBlcnJfb3V0X2FwZXVubWFwOwotCX0KLQogCWludG1ieCA9IE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVzsKIAlyY3ZtYnggPSBNQUlMQk9YX1JDVlJFVF9DT05fSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVzsKIAlzbmRtYnggPSBNQUlMQk9YX1NOREhPU1RfUFJPRF9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XOwpAQCAtMTc4NjEsNiArMTc4NjEsMjMgQEAKIAkJCXNuZG1ieCArPSAweGM7CiAJfQogCisJLyoKKwkgKiBSZXNldCBjaGlwIGluIGNhc2UgVU5ESSBvciBFRkkgZHJpdmVyIGRpZCBub3Qgc2h1dGRvd24KKwkgKiBETUEgc2VsZiB0ZXN0IHdpbGwgZW5hYmxlIFdETUFDIGFuZCB3ZSdsbCBzZWUgKHNwdXJpb3VzKQorCSAqIHBlbmRpbmcgRE1BIG9uIHRoZSBQQ0kgYnVzIGF0IHRoYXQgcG9pbnQuCisJICovCisJaWYgKCh0cjMyKEhPU1RDQ19NT0RFKSAmIEhPU1RDQ19NT0RFX0VOQUJMRSkgfHwKKwkgICAgKHRyMzIoV0RNQUNfTU9ERSkgJiBXRE1BQ19NT0RFX0VOQUJMRSkpIHsKKwkJdHczMihNRU1BUkJfTU9ERSwgTUVNQVJCX01PREVfRU5BQkxFKTsKKwkJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDEpOworCX0KKworCWVyciA9IHRnM190ZXN0X2RtYSh0cCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJETUEgZW5naW5lIHRlc3QgZmFpbGVkLCBhYm9ydGluZ1xuIik7CisJCWdvdG8gZXJyX291dF9hcGV1bm1hcDsKKwl9CisKIAl0ZzNfaW5pdF9jb2FsKHRwKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvY2FkZS9ibmEvYm5hZF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkX2RlYnVnZnMuYwppbmRleCA3ZDZhYThjLi42MTkwODNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkX2RlYnVnZnMuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIAkvKiBSZXRyaWV2ZSBmbGFzaCBwYXJ0aXRpb24gaW5mbyAqLwogCWZjb21wLmNvbXBfc3RhdHVzID0gMDsKLQlpbml0X2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCXJlaW5pdF9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYm5hZC0+Ym5hX2xvY2ssIGZsYWdzKTsKIAlyZXQgPSBiZmFfbndfZmxhc2hfZ2V0X2F0dHIoJmJuYWQtPmJuYS5mbGFzaCwgJmRydmluZm8tPmZsYXNoX2F0dHIsCiAJCQkJYm5hZF9jYl9jb21wbGV0aW9uLCAmZmNvbXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9hdDkxX2V0aGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL2F0OTFfZXRoZXIuYwppbmRleCA1NWViN2YyLi43ZWY1NWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL2F0OTFfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL2F0OTFfZXRoZXIuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJCXJlcyA9IFBUUl9FUlIobHAtPnBjbGspOwogCQlnb3RvIGVycl9mcmVlX2RldjsKIAl9Ci0JY2xrX2VuYWJsZShscC0+cGNsayk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGxwLT5wY2xrKTsKIAogCWxwLT5oY2xrID0gRVJSX1BUUigtRU5PRU5UKTsKIAlscC0+dHhfY2xrID0gRVJSX1BUUigtRU5PRU5UKTsKQEAgLTQwNiw3ICs0MDYsNyBAQAogZXJyX291dF91bnJlZ2lzdGVyX25ldGRldjoKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogZXJyX2Rpc2FibGVfY2xvY2s6Ci0JY2xrX2Rpc2FibGUobHAtPnBjbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShscC0+cGNsayk7CiBlcnJfZnJlZV9kZXY6CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlyZXR1cm4gcmVzOwpAQCAtNDI0LDcgKzQyNCw3IEBACiAJa2ZyZWUobHAtPm1paV9idXMtPmlycSk7CiAJbWRpb2J1c19mcmVlKGxwLT5taWlfYnVzKTsKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCWNsa19kaXNhYmxlKGxwLT5wY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobHAtPnBjbGspOwogCWZyZWVfbmV0ZGV2KGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldF9kZXYpOwogCQluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldF9kZXYpOwogCi0JCWNsa19kaXNhYmxlKGxwLT5wY2xrKTsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGxwLT5wY2xrKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00NTEsNyArNDUxLDcgQEAKIAlzdHJ1Y3QgbWFjYiAqbHAgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldF9kZXYpKSB7Ci0JCWNsa19lbmFibGUobHAtPnBjbGspOworCQljbGtfcHJlcGFyZV9lbmFibGUobHAtPnBjbGspOwogCiAJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0X2Rldik7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldF9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9hZGFwdGVyLmgKaW5kZXggZDAwYTc1MS4uNjA0OWY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2FkYXB0ZXIuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvYWRhcHRlci5oCkBAIC05Niw2ICs5Niw5IEBACiAJczE2IHhhY3RfYWRkcl9maWx0OwkJLyogaW5kZXggb2Ygb3VyIE1BQyBhZGRyZXNzIGZpbHRlciAqLwogCXUxNiByc3Nfc2l6ZTsJCQkvKiBzaXplIG9mIFZJJ3MgUlNTIHRhYmxlIHNsaWNlICovCiAJdTggcGlkeDsJCQkvKiBpbmRleCBpbnRvIGFkYXB0ZXIgcG9ydFtdICovCisJczggbWRpb19hZGRyOworCXU4IHBvcnRfdHlwZTsJCQkvKiBmaXJtd2FyZSBwb3J0IHR5cGUgKi8KKwl1OCBtb2RfdHlwZTsJCQkvKiBmaXJtd2FyZSBtb2R1bGUgdHlwZSAqLwogCXU4IHBvcnRfaWQ7CQkJLyogcGh5c2ljYWwgcG9ydCBJRCAqLwogCXU4IG5xc2V0czsJCQkvKiAjIG9mICJRdWV1ZSBTZXRzIiAqLwogCXU4IGZpcnN0X3FzZXQ7CQkJLyogaW5kZXggb2YgZmlyc3QgIlF1ZXVlIFNldCIgKi8KQEAgLTUyMiw2ICs1MjUsNyBAQAogICogaXMgImNvbnRyYWN0ZWQiIHRvIHByb3ZpZGUgZm9yIHRoZSBjb21tb24gY29kZS4KICAqLwogdm9pZCB0NHZmX29zX2xpbmtfY2hhbmdlZChzdHJ1Y3QgYWRhcHRlciAqLCBpbnQsIGludCk7Cit2b2lkIHQ0dmZfb3NfcG9ydG1vZF9jaGFuZ2VkKHN0cnVjdCBhZGFwdGVyICosIGludCk7CiAKIC8qCiAgKiBTR0UgZnVuY3Rpb24gcHJvdG90eXBlIGRlY2xhcmF0aW9ucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9jeGdiNHZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9jeGdiNHZmX21haW4uYwppbmRleCBhYTc0ZWMzLi5hOTM2ZWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L21kaW8uaD4KIAogI2luY2x1ZGUgInQ0dmZfY29tbW9uLmgiCiAjaW5jbHVkZSAidDR2Zl9kZWZzLmgiCkBAIC0yMTAsNiArMjExLDM4IEBACiB9CiAKIC8qCisgKiBUSGUgcG9ydCBtb2R1bGUgdHlwZSBoYXMgY2hhbmdlZCBvbiB0aGUgaW5kaWNhdGVkICJwb3J0IiAoVmlydHVhbAorICogSW50ZXJmYWNlKS4KKyAqLwordm9pZCB0NHZmX29zX3BvcnRtb2RfY2hhbmdlZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBpZHgpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtb2Rfc3RyW10gPSB7CisJCU5VTEwsICJMUiIsICJTUiIsICJFUiIsICJwYXNzaXZlIERBIiwgImFjdGl2ZSBEQSIsICJMUk0iCisJfTsKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcHRlci0+cG9ydFtwaWR4XTsKKwljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAocGktPm1vZF90eXBlID09IEZXX1BPUlRfTU9EX1RZUEVfTk9ORSkKKwkJZGV2X2luZm8oYWRhcHRlci0+cGRldl9kZXYsICIlczogcG9ydCBtb2R1bGUgdW5wbHVnZ2VkXG4iLAorCQkJIGRldi0+bmFtZSk7CisJZWxzZSBpZiAocGktPm1vZF90eXBlIDwgQVJSQVlfU0laRShtb2Rfc3RyKSkKKwkJZGV2X2luZm8oYWRhcHRlci0+cGRldl9kZXYsICIlczogJXMgcG9ydCBtb2R1bGUgaW5zZXJ0ZWRcbiIsCisJCQkgZGV2LT5uYW1lLCBtb2Rfc3RyW3BpLT5tb2RfdHlwZV0pOworCWVsc2UgaWYgKHBpLT5tb2RfdHlwZSA9PSBGV19QT1JUX01PRF9UWVBFX05PVFNVUFBPUlRFRCkKKwkJZGV2X2luZm8oYWRhcHRlci0+cGRldl9kZXYsICIlczogdW5zdXBwb3J0ZWQgb3B0aWNhbCBwb3J0ICIKKwkJCSAibW9kdWxlIGluc2VydGVkXG4iLCBkZXYtPm5hbWUpOworCWVsc2UgaWYgKHBpLT5tb2RfdHlwZSA9PSBGV19QT1JUX01PRF9UWVBFX1VOS05PV04pCisJCWRldl9pbmZvKGFkYXB0ZXItPnBkZXZfZGV2LCAiJXM6IHVua25vd24gcG9ydCBtb2R1bGUgaW5zZXJ0ZWQsIgorCQkJICJmb3JjaW5nIFRXSU5BWFxuIiwgZGV2LT5uYW1lKTsKKwllbHNlIGlmIChwaS0+bW9kX3R5cGUgPT0gRldfUE9SVF9NT0RfVFlQRV9FUlJPUikKKwkJZGV2X2luZm8oYWRhcHRlci0+cGRldl9kZXYsICIlczogdHJhbnNjZWl2ZXIgbW9kdWxlIGVycm9yXG4iLAorCQkJIGRldi0+bmFtZSk7CisJZWxzZQorCQlkZXZfaW5mbyhhZGFwdGVyLT5wZGV2X2RldiwgIiVzOiB1bmtub3duIG1vZHVsZSB0eXBlICVkICIKKwkJCSAiaW5zZXJ0ZWRcbiIsIGRldi0+bmFtZSwgcGktPm1vZF90eXBlKTsKK30KKworLyoKICAqIE5ldCBkZXZpY2Ugb3BlcmF0aW9ucy4KICAqID09PT09PT09PT09PT09PT09PT09PT0KICAqLwpAQCAtMTE5MywyNCArMTIyNiwxMDMgQEAKICAqIHN0YXRlIG9mIHRoZSBwb3J0IHRvIHdoaWNoIHdlJ3JlIGxpbmtlZC4KICAqLwogCi0vKgotICogUmV0dXJuIGN1cnJlbnQgcG9ydCBsaW5rIHNldHRpbmdzLgotICovCi1zdGF0aWMgaW50IGN4Z2I0dmZfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCitzdGF0aWMgdW5zaWduZWQgaW50IHQ0dmZfZnJvbV9md19saW5rY2FwcyhlbnVtIGZ3X3BvcnRfdHlwZSB0eXBlLAorCQkJCQkgIHVuc2lnbmVkIGludCBjYXBzKQogewotCWNvbnN0IHN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBpbnQgdiA9IDA7CiAKLQljbWQtPnN1cHBvcnRlZCA9IHBpLT5saW5rX2NmZy5zdXBwb3J0ZWQ7Ci0JY21kLT5hZHZlcnRpc2luZyA9IHBpLT5saW5rX2NmZy5hZHZlcnRpc2luZzsKKwlpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfQlRfU0dNSUkgfHwgdHlwZSA9PSBGV19QT1JUX1RZUEVfQlRfWEZJIHx8CisJICAgIHR5cGUgPT0gRldfUE9SVF9UWVBFX0JUX1hBVUkpIHsKKwkJdiB8PSBTVVBQT1JURURfVFA7CisJCWlmIChjYXBzICYgRldfUE9SVF9DQVBfU1BFRURfMTAwTSkKKwkJCXYgfD0gU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGw7CisJCWlmIChjYXBzICYgRldfUE9SVF9DQVBfU1BFRURfMUcpCisJCQl2IHw9IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbDsKKwkJaWYgKGNhcHMgJiBGV19QT1JUX0NBUF9TUEVFRF8xMEcpCisJCQl2IHw9IFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGw7CisJfSBlbHNlIGlmICh0eXBlID09IEZXX1BPUlRfVFlQRV9LWDQgfHwgdHlwZSA9PSBGV19QT1JUX1RZUEVfS1gpIHsKKwkJdiB8PSBTVVBQT1JURURfQmFja3BsYW5lOworCQlpZiAoY2FwcyAmIEZXX1BPUlRfQ0FQX1NQRUVEXzFHKQorCQkJdiB8PSBTVVBQT1JURURfMTAwMGJhc2VLWF9GdWxsOworCQlpZiAoY2FwcyAmIEZXX1BPUlRfQ0FQX1NQRUVEXzEwRykKKwkJCXYgfD0gU1VQUE9SVEVEXzEwMDAwYmFzZUtYNF9GdWxsOworCX0gZWxzZSBpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfS1IpCisJCXYgfD0gU1VQUE9SVEVEX0JhY2twbGFuZSB8IFNVUFBPUlRFRF8xMDAwMGJhc2VLUl9GdWxsOworCWVsc2UgaWYgKHR5cGUgPT0gRldfUE9SVF9UWVBFX0JQX0FQKQorCQl2IHw9IFNVUFBPUlRFRF9CYWNrcGxhbmUgfCBTVVBQT1JURURfMTAwMDBiYXNlUl9GRUMgfAorCQkgICAgIFNVUFBPUlRFRF8xMDAwMGJhc2VLUl9GdWxsIHwgU1VQUE9SVEVEXzEwMDBiYXNlS1hfRnVsbDsKKwllbHNlIGlmICh0eXBlID09IEZXX1BPUlRfVFlQRV9CUDRfQVApCisJCXYgfD0gU1VQUE9SVEVEX0JhY2twbGFuZSB8IFNVUFBPUlRFRF8xMDAwMGJhc2VSX0ZFQyB8CisJCSAgICAgU1VQUE9SVEVEXzEwMDAwYmFzZUtSX0Z1bGwgfCBTVVBQT1JURURfMTAwMGJhc2VLWF9GdWxsIHwKKwkJICAgICBTVVBQT1JURURfMTAwMDBiYXNlS1g0X0Z1bGw7CisJZWxzZSBpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfRklCRVJfWEZJIHx8CisJCSB0eXBlID09IEZXX1BPUlRfVFlQRV9GSUJFUl9YQVVJIHx8CisJCSB0eXBlID09IEZXX1BPUlRfVFlQRV9TRlAgfHwKKwkJIHR5cGUgPT0gRldfUE9SVF9UWVBFX1FTRlBfMTBHIHx8CisJCSB0eXBlID09IEZXX1BPUlRfVFlQRV9RU0EpIHsKKwkJdiB8PSBTVVBQT1JURURfRklCUkU7CisJCWlmIChjYXBzICYgRldfUE9SVF9DQVBfU1BFRURfMUcpCisJCQl2IHw9IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbDsKKwkJaWYgKGNhcHMgJiBGV19QT1JUX0NBUF9TUEVFRF8xMEcpCisJCQl2IHw9IFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGw7CisJfSBlbHNlIGlmICh0eXBlID09IEZXX1BPUlRfVFlQRV9CUDQwX0JBIHx8CisJCSAgIHR5cGUgPT0gRldfUE9SVF9UWVBFX1FTRlApIHsKKwkJdiB8PSBTVVBQT1JURURfNDAwMDBiYXNlU1I0X0Z1bGw7CisJCXYgfD0gU1VQUE9SVEVEX0ZJQlJFOworCX0KKworCWlmIChjYXBzICYgRldfUE9SVF9DQVBfQU5FRykKKwkJdiB8PSBTVVBQT1JURURfQXV0b25lZzsKKwlyZXR1cm4gdjsKK30KKworc3RhdGljIGludCBjeGdiNHZmX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChwLT5wb3J0X3R5cGUgPT0gRldfUE9SVF9UWVBFX0JUX1NHTUlJIHx8CisJICAgIHAtPnBvcnRfdHlwZSA9PSBGV19QT1JUX1RZUEVfQlRfWEZJIHx8CisJICAgIHAtPnBvcnRfdHlwZSA9PSBGV19QT1JUX1RZUEVfQlRfWEFVSSkKKwkJY21kLT5wb3J0ID0gUE9SVF9UUDsKKwllbHNlIGlmIChwLT5wb3J0X3R5cGUgPT0gRldfUE9SVF9UWVBFX0ZJQkVSX1hGSSB8fAorCQkgcC0+cG9ydF90eXBlID09IEZXX1BPUlRfVFlQRV9GSUJFUl9YQVVJKQorCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCWVsc2UgaWYgKHAtPnBvcnRfdHlwZSA9PSBGV19QT1JUX1RZUEVfU0ZQIHx8CisJCSBwLT5wb3J0X3R5cGUgPT0gRldfUE9SVF9UWVBFX1FTRlBfMTBHIHx8CisJCSBwLT5wb3J0X3R5cGUgPT0gRldfUE9SVF9UWVBFX1FTQSB8fAorCQkgcC0+cG9ydF90eXBlID09IEZXX1BPUlRfVFlQRV9RU0ZQKSB7CisJCWlmIChwLT5tb2RfdHlwZSA9PSBGV19QT1JUX01PRF9UWVBFX0xSIHx8CisJCSAgICBwLT5tb2RfdHlwZSA9PSBGV19QT1JUX01PRF9UWVBFX1NSIHx8CisJCSAgICBwLT5tb2RfdHlwZSA9PSBGV19QT1JUX01PRF9UWVBFX0VSIHx8CisJCSAgICBwLT5tb2RfdHlwZSA9PSBGV19QT1JUX01PRF9UWVBFX0xSTSkKKwkJCWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CisJCWVsc2UgaWYgKHAtPm1vZF90eXBlID09IEZXX1BPUlRfTU9EX1RZUEVfVFdJTkFYX1BBU1NJVkUgfHwKKwkJCSBwLT5tb2RfdHlwZSA9PSBGV19QT1JUX01PRF9UWVBFX1RXSU5BWF9BQ1RJVkUpCisJCQljbWQtPnBvcnQgPSBQT1JUX0RBOworCQllbHNlCisJCQljbWQtPnBvcnQgPSBQT1JUX09USEVSOworCX0gZWxzZQorCQljbWQtPnBvcnQgPSBQT1JUX09USEVSOworCisJaWYgKHAtPm1kaW9fYWRkciA+PSAwKSB7CisJCWNtZC0+cGh5X2FkZHJlc3MgPSBwLT5tZGlvX2FkZHI7CisJCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOworCQljbWQtPm1kaW9fc3VwcG9ydCA9IHAtPnBvcnRfdHlwZSA9PSBGV19QT1JUX1RZUEVfQlRfU0dNSUkgPworCQkJTURJT19TVVBQT1JUU19DMjIgOiBNRElPX1NVUFBPUlRTX0M0NTsKKwl9IGVsc2UgeworCQljbWQtPnBoeV9hZGRyZXNzID0gMDsgIC8qIG5vdCByZWFsbHksIGJ1dCBubyBiZXR0ZXIgb3B0aW9uICovCisJCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCQljbWQtPm1kaW9fc3VwcG9ydCA9IDA7CisJfQorCisJY21kLT5zdXBwb3J0ZWQgPSB0NHZmX2Zyb21fZndfbGlua2NhcHMocC0+cG9ydF90eXBlLAorCQkJCQkgICAgICAgcC0+bGlua19jZmcuc3VwcG9ydGVkKTsKKwljbWQtPmFkdmVydGlzaW5nID0gdDR2Zl9mcm9tX2Z3X2xpbmtjYXBzKHAtPnBvcnRfdHlwZSwKKwkJCQkJICAgIHAtPmxpbmtfY2ZnLmFkdmVydGlzaW5nKTsKIAlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLAotCQkJICAgICAgbmV0aWZfY2Fycmllcl9vayhkZXYpID8gcGktPmxpbmtfY2ZnLnNwZWVkIDogLTEpOworCQkJICAgICAgbmV0aWZfY2Fycmllcl9vayhkZXYpID8gcC0+bGlua19jZmcuc3BlZWQgOiAwKTsKIAljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwotCi0JY21kLT5wb3J0ID0gKGNtZC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX1RQKSA/IFBPUlRfVFAgOiBQT1JUX0ZJQlJFOwotCWNtZC0+cGh5X2FkZHJlc3MgPSBwaS0+cG9ydF9pZDsKLQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKLQljbWQtPmF1dG9uZWcgPSBwaS0+bGlua19jZmcuYXV0b25lZzsKKwljbWQtPmF1dG9uZWcgPSBwLT5saW5rX2NmZy5hdXRvbmVnOwogCWNtZC0+bWF4dHhwa3QgPSAwOwogCWNtZC0+bWF4cnhwa3QgPSAwOwogCXJldHVybiAwOwpAQCAtMjMxOCw3ICsyNDMwLDcgQEAKIAkgKi8KIAluMTBnID0gMDsKIAlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIHBpZHgpCi0JCW4xMGcgKz0gaXNfMTBnX3BvcnQoJmFkYXAycGluZm8oYWRhcHRlciwgcGlkeCktPmxpbmtfY2ZnKTsKKwkJbjEwZyArPSBpc194XzEwZ19wb3J0KCZhZGFwMnBpbmZvKGFkYXB0ZXIsIHBpZHgpLT5saW5rX2NmZyk7CiAKIAkvKgogCSAqIFdlIGRlZmF1bHQgdG8gMSBxdWV1ZSBwZXIgbm9uLTEwRyBwb3J0IGFuZCB1cCB0byAjIG9mIGNvcmVzIHF1ZXVlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3Q0dmZfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9jb21tb24uaAppbmRleCA4ZDMyMzdmLi5iOWRlYmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9jb21tb24uaApAQCAtMjMwLDcgKzIzMCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc18xMGdfcG9ydChjb25zdCBzdHJ1Y3QgbGlua19jb25maWcgKmxjKQogewotCXJldHVybiAobGMtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwpICE9IDA7CisJcmV0dXJuIChsYy0+c3VwcG9ydGVkICYgRldfUE9SVF9DQVBfU1BFRURfMTBHKSAhPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfeF8xMGdfcG9ydChjb25zdCBzdHJ1Y3QgbGlua19jb25maWcgKmxjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3Q0dmZfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi90NHZmX2h3LmMKaW5kZXggMDJlODgzMy4uNjA0MjZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3Q0dmZfaHcuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9ody5jCkBAIC0yNDUsNiArMjQ1LDEwIEBACiAJcmV0dXJuIGEgJiAweDNmOwogfQogCisjZGVmaW5lIEFEVkVSVF9NQVNLIChGV19QT1JUX0NBUF9TUEVFRF8xMDBNIHwgRldfUE9SVF9DQVBfU1BFRURfMUcgfFwKKwkJICAgICBGV19QT1JUX0NBUF9TUEVFRF8xMEcgfCBGV19QT1JUX0NBUF9TUEVFRF80MEcgfCBcCisJCSAgICAgRldfUE9SVF9DQVBfU1BFRURfMTAwRyB8IEZXX1BPUlRfQ0FQX0FORUcpCisKIC8qKgogICoJaW5pdF9saW5rX2NvbmZpZyAtIGluaXRpYWxpemUgYSBsaW5rJ3MgU1cgc3RhdGUKICAqCUBsYzogc3RydWN0dXJlIGhvbGRpbmcgdGhlIGxpbmsgc3RhdGUKQEAgLTI1OSw4ICsyNjMsOCBAQAogCWxjLT5yZXF1ZXN0ZWRfc3BlZWQgPSAwOwogCWxjLT5zcGVlZCA9IDA7CiAJbGMtPnJlcXVlc3RlZF9mYyA9IGxjLT5mYyA9IFBBVVNFX1JYIHwgUEFVU0VfVFg7Ci0JaWYgKGxjLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfQXV0b25lZykgewotCQlsYy0+YWR2ZXJ0aXNpbmcgPSBsYy0+c3VwcG9ydGVkOworCWlmIChsYy0+c3VwcG9ydGVkICYgRldfUE9SVF9DQVBfQU5FRykgeworCQlsYy0+YWR2ZXJ0aXNpbmcgPSBsYy0+c3VwcG9ydGVkICYgQURWRVJUX01BU0s7CiAJCWxjLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CiAJCWxjLT5yZXF1ZXN0ZWRfZmMgfD0gUEFVU0VfQVVUT05FRzsKIAl9IGVsc2UgewpAQCAtMjgwLDcgKzI4NCw2IEBACiAJc3RydWN0IGZ3X3ZpX2NtZCB2aV9jbWQsIHZpX3JwbDsKIAlzdHJ1Y3QgZndfcG9ydF9jbWQgcG9ydF9jbWQsIHBvcnRfcnBsOwogCWludCB2OwotCXUzMiB3b3JkOwogCiAJLyoKIAkgKiBFeGVjdXRlIGEgVkkgUmVhZCBjb21tYW5kIHRvIGdldCBvdXIgVmlydHVhbCBJbnRlcmZhY2UgaW5mb3JtYXRpb24KQEAgLTMxOSwxOSArMzIyLDEzIEBACiAJaWYgKHYpCiAJCXJldHVybiB2OwogCi0JdiA9IDA7Ci0Jd29yZCA9IGJlMTZfdG9fY3B1KHBvcnRfcnBsLnUuaW5mby5wY2FwKTsKLQlpZiAod29yZCAmIEZXX1BPUlRfQ0FQX1NQRUVEXzEwME0pCi0JCXYgfD0gU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGw7Ci0JaWYgKHdvcmQgJiBGV19QT1JUX0NBUF9TUEVFRF8xRykKLQkJdiB8PSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7Ci0JaWYgKHdvcmQgJiBGV19QT1JUX0NBUF9TUEVFRF8xMEcpCi0JCXYgfD0gU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbDsKLQlpZiAod29yZCAmIEZXX1BPUlRfQ0FQX1NQRUVEXzQwRykKLQkJdiB8PSBTVVBQT1JURURfNDAwMDBiYXNlU1I0X0Z1bGw7Ci0JaWYgKHdvcmQgJiBGV19QT1JUX0NBUF9BTkVHKQotCQl2IHw9IFNVUFBPUlRFRF9BdXRvbmVnOwotCWluaXRfbGlua19jb25maWcoJnBpLT5saW5rX2NmZywgdik7CisJdiA9IGJlMzJfdG9fY3B1KHBvcnRfcnBsLnUuaW5mby5sc3RhdHVzX3RvX21vZHR5cGUpOworCXBpLT5tZGlvX2FkZHIgPSAodiAmIEZXX1BPUlRfQ01EX01ESU9DQVBfRikgPworCQkJRldfUE9SVF9DTURfTURJT0FERFJfRyh2KSA6IC0xOworCXBpLT5wb3J0X3R5cGUgPSBGV19QT1JUX0NNRF9QVFlQRV9HKHYpOworCXBpLT5tb2RfdHlwZSA9IEZXX1BPUlRfTU9EX1RZUEVfTkE7CisKKwlpbml0X2xpbmtfY29uZmlnKCZwaS0+bGlua19jZmcsIGJlMTZfdG9fY3B1KHBvcnRfcnBsLnUuaW5mby5wY2FwKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0OTEsNyArMTQ4OCw3IEBACiAJCSAqLwogCQljb25zdCBzdHJ1Y3QgZndfcG9ydF9jbWQgKnBvcnRfY21kID0KIAkJCShjb25zdCBzdHJ1Y3QgZndfcG9ydF9jbWQgKilycGw7Ci0JCXUzMiB3b3JkOworCQl1MzIgc3RhdCwgbW9kOwogCQlpbnQgYWN0aW9uLCBwb3J0X2lkLCBsaW5rX29rLCBzcGVlZCwgZmMsIHBpZHg7CiAKIAkJLyoKQEAgLTE1MDksMjEgKzE1MDYsMjEgQEAKIAkJcG9ydF9pZCA9IEZXX1BPUlRfQ01EX1BPUlRJRF9HKAogCQkJYmUzMl90b19jcHUocG9ydF9jbWQtPm9wX3RvX3BvcnRpZCkpOwogCi0JCXdvcmQgPSBiZTMyX3RvX2NwdShwb3J0X2NtZC0+dS5pbmZvLmxzdGF0dXNfdG9fbW9kdHlwZSk7Ci0JCWxpbmtfb2sgPSAod29yZCAmIEZXX1BPUlRfQ01EX0xTVEFUVVNfRikgIT0gMDsKKwkJc3RhdCA9IGJlMzJfdG9fY3B1KHBvcnRfY21kLT51LmluZm8ubHN0YXR1c190b19tb2R0eXBlKTsKKwkJbGlua19vayA9IChzdGF0ICYgRldfUE9SVF9DTURfTFNUQVRVU19GKSAhPSAwOwogCQlzcGVlZCA9IDA7CiAJCWZjID0gMDsKLQkJaWYgKHdvcmQgJiBGV19QT1JUX0NNRF9SWFBBVVNFX0YpCisJCWlmIChzdGF0ICYgRldfUE9SVF9DTURfUlhQQVVTRV9GKQogCQkJZmMgfD0gUEFVU0VfUlg7Ci0JCWlmICh3b3JkICYgRldfUE9SVF9DTURfVFhQQVVTRV9GKQorCQlpZiAoc3RhdCAmIEZXX1BPUlRfQ01EX1RYUEFVU0VfRikKIAkJCWZjIHw9IFBBVVNFX1RYOwotCQlpZiAod29yZCAmIEZXX1BPUlRfQ01EX0xTUEVFRF9WKEZXX1BPUlRfQ0FQX1NQRUVEXzEwME0pKQorCQlpZiAoc3RhdCAmIEZXX1BPUlRfQ01EX0xTUEVFRF9WKEZXX1BPUlRfQ0FQX1NQRUVEXzEwME0pKQogCQkJc3BlZWQgPSAxMDA7Ci0JCWVsc2UgaWYgKHdvcmQgJiBGV19QT1JUX0NNRF9MU1BFRURfVihGV19QT1JUX0NBUF9TUEVFRF8xRykpCisJCWVsc2UgaWYgKHN0YXQgJiBGV19QT1JUX0NNRF9MU1BFRURfVihGV19QT1JUX0NBUF9TUEVFRF8xRykpCiAJCQlzcGVlZCA9IDEwMDA7Ci0JCWVsc2UgaWYgKHdvcmQgJiBGV19QT1JUX0NNRF9MU1BFRURfVihGV19QT1JUX0NBUF9TUEVFRF8xMEcpKQorCQllbHNlIGlmIChzdGF0ICYgRldfUE9SVF9DTURfTFNQRUVEX1YoRldfUE9SVF9DQVBfU1BFRURfMTBHKSkKIAkJCXNwZWVkID0gMTAwMDA7Ci0JCWVsc2UgaWYgKHdvcmQgJiBGV19QT1JUX0NNRF9MU1BFRURfVihGV19QT1JUX0NBUF9TUEVFRF80MEcpKQorCQllbHNlIGlmIChzdGF0ICYgRldfUE9SVF9DTURfTFNQRUVEX1YoRldfUE9SVF9DQVBfU1BFRURfNDBHKSkKIAkJCXNwZWVkID0gNDAwMDA7CiAKIAkJLyoKQEAgLTE1NDAsMTIgKzE1MzcsMjEgQEAKIAkJCQljb250aW51ZTsKIAogCQkJbGMgPSAmcGktPmxpbmtfY2ZnOworCisJCQltb2QgPSBGV19QT1JUX0NNRF9NT0RUWVBFX0coc3RhdCk7CisJCQlpZiAobW9kICE9IHBpLT5tb2RfdHlwZSkgeworCQkJCXBpLT5tb2RfdHlwZSA9IG1vZDsKKwkJCQl0NHZmX29zX3BvcnRtb2RfY2hhbmdlZChhZGFwdGVyLCBwaWR4KTsKKwkJCX0KKwogCQkJaWYgKGxpbmtfb2sgIT0gbGMtPmxpbmtfb2sgfHwgc3BlZWQgIT0gbGMtPnNwZWVkIHx8CiAJCQkgICAgZmMgIT0gbGMtPmZjKSB7CiAJCQkJLyogc29tZXRoaW5nIGNoYW5nZWQgKi8KIAkJCQlsYy0+bGlua19vayA9IGxpbmtfb2s7CiAJCQkJbGMtPnNwZWVkID0gc3BlZWQ7CiAJCQkJbGMtPmZjID0gZmM7CisJCQkJbGMtPnN1cHBvcnRlZCA9CisJCQkJCWJlMTZfdG9fY3B1KHBvcnRfY21kLT51LmluZm8ucGNhcCk7CiAJCQkJdDR2Zl9vc19saW5rX2NoYW5nZWQoYWRhcHRlciwgcGlkeCwgbGlua19vayk7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jCmluZGV4IDg2OGQwZjYuLmUzNTZhZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYwpAQCAtMTA2MCwxMCArMTA2MCwxNCBAQAogCQkJCSAgICAgUEtUX0hBU0hfVFlQRV9MNCA6IFBLVF9IQVNIX1RZUEVfTDMpOwogCQl9CiAKLQkJaWYgKChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmICFjc3VtX25vdF9jYWxjKSB7Ci0JCQlza2ItPmNzdW0gPSBodG9ucyhjaGVja3N1bSk7Ci0JCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0NPTVBMRVRFOwotCQl9CisJCS8qIEhhcmR3YXJlIGRvZXMgbm90IHByb3ZpZGUgd2hvbGUgcGFja2V0IGNoZWNrc3VtLiBJdCBvbmx5CisJCSAqIHByb3ZpZGVzIHBzZXVkbyBjaGVja3N1bS4gU2luY2UgaHcgdmFsaWRhdGVzIHRoZSBwYWNrZXQKKwkJICogY2hlY2tzdW0gYnV0IG5vdCBwcm92aWRlIHVzIHRoZSBjaGVja3N1bSB2YWx1ZS4gdXNlCisJCSAqIENIRUNTVU1fVU5ORUNFU1NBUlkuCisJCSAqLworCQlpZiAoKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYgdGNwX3VkcF9jc3VtX29rICYmCisJCSAgICBpcHY0X2NzdW1fb2spCisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCiAJCWlmICh2bGFuX3N0cmlwcGVkKQogCQkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIGh0b25zKEVUSF9QXzgwMjFRKSwgdmxhbl90Y2kpOwpAQCAtMTMzMSw3ICsxMzM1LDcgQEAKIAlpbnQgZXJyOwogCiAJaWYgKCFlbmljX3BvbGxfbG9ja19uYXBpKCZlbmljLT5ycVtycV0pKQotCQlyZXR1cm4gd29ya19kb25lOworCQlyZXR1cm4gYnVkZ2V0OwogCS8qIFNlcnZpY2UgUlEKIAkgKi8KIApAQCAtMTYxMiw3ICsxNjE2LDcgQEAKIAkJaWYgKHZuaWNfcnFfZGVzY191c2VkKCZlbmljLT5ycVtpXSkgPT0gMCkgewogCQkJbmV0ZGV2X2VycihuZXRkZXYsICJVbmFibGUgdG8gYWxsb2MgcmVjZWl2ZSBidWZmZXJzXG4iKTsKIAkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycl9vdXRfbm90aWZ5X3Vuc2V0OworCQkJZ290byBlcnJfb3V0X2ZyZWVfcnE7CiAJCX0KIAl9CiAKQEAgLTE2NDUsNyArMTY0OSw5IEBACiAKIAlyZXR1cm4gMDsKIAotZXJyX291dF9ub3RpZnlfdW5zZXQ6CitlcnJfb3V0X2ZyZWVfcnE6CisJZm9yIChpID0gMDsgaSA8IGVuaWMtPnJxX2NvdW50OyBpKyspCisJCXZuaWNfcnFfY2xlYW4oJmVuaWMtPnJxW2ldLCBlbmljX2ZyZWVfcnFfYnVmKTsKIAllbmljX2Rldl9ub3RpZnlfdW5zZXQoZW5pYyk7CiBlcnJfb3V0X2ZyZWVfaW50cjoKIAllbmljX2ZyZWVfaW50cihlbmljKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RuZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RuZXQuYwppbmRleCBhMzc5YzNlLi4xM2QwMGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZG5ldC5jCkBAIC0zOTgsMTMgKzM5OCw4IEBACiAJCSAqIGJyZWFrIG91dCBvZiB3aGlsZSBsb29wIGlmIHRoZXJlIGFyZSBubyBtb3JlCiAJCSAqIHBhY2tldHMgd2FpdGluZwogCQkgKi8KLQkJaWYgKCEoZG5ldF9yZWFkbChicCwgUlhfRklGT19XQ05UKSA+PiAxNikpIHsKLQkJCW5hcGlfY29tcGxldGUobmFwaSk7Ci0JCQlpbnRfZW5hYmxlID0gZG5ldF9yZWFkbChicCwgSU5UUl9FTkIpOwotCQkJaW50X2VuYWJsZSB8PSBETkVUX0lOVFJfU1JDX1JYX0NNREZJRk9BRjsKLQkJCWRuZXRfd3JpdGVsKGJwLCBpbnRfZW5hYmxlLCBJTlRSX0VOQik7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlpZiAoIShkbmV0X3JlYWRsKGJwLCBSWF9GSUZPX1dDTlQpID4+IDE2KSkKKwkJCWJyZWFrOwogCiAJCWNtZF93b3JkID0gZG5ldF9yZWFkbChicCwgUlhfTEVOX0ZJRk8pOwogCQlwa3RfbGVuID0gY21kX3dvcmQgJiAweEZGRkY7CkBAIC00MzMsMjAgKzQyOCwxNyBAQAogCQkJICAgICAgICJzaXplICV1LlxuIiwgZGV2LT5uYW1lLCBwa3RfbGVuKTsKIAl9CiAKLQlidWRnZXQgLT0gbnBhY2tldHM7Ci0KIAlpZiAobnBhY2tldHMgPCBidWRnZXQpIHsKIAkJLyogV2UgcHJvY2Vzc2VkIGFsbCBwYWNrZXRzIGF2YWlsYWJsZS4gIFRlbGwgTkFQSSBpdCBjYW4KLQkJICogc3RvcCBwb2xsaW5nIHRoZW4gcmUtZW5hYmxlIHJ4IGludGVycnVwdHMgKi8KKwkJICogc3RvcCBwb2xsaW5nIHRoZW4gcmUtZW5hYmxlIHJ4IGludGVycnVwdHMuCisJCSAqLwogCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlpbnRfZW5hYmxlID0gZG5ldF9yZWFkbChicCwgSU5UUl9FTkIpOwogCQlpbnRfZW5hYmxlIHw9IERORVRfSU5UUl9TUkNfUlhfQ01ERklGT0FGOwogCQlkbmV0X3dyaXRlbChicCwgaW50X2VuYWJsZSwgSU5UUl9FTkIpOwotCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBUaGVyZSBhcmUgc3RpbGwgcGFja2V0cyB3YWl0aW5nICovCi0JcmV0dXJuIDE7CisJcmV0dXJuIG5wYWNrZXRzOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZG5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMKaW5kZXggMTk2MDczMS4uZDQ4ODA2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jCkBAIC00MzgzLDggKzQzODMsOSBAQAogICogZGlzdGluZ3Vpc2ggdmFyaW91cyB0eXBlcyBvZiB0cmFuc3BvcnRzIChWeExBTiwgR1JFLCBOVkdSRSAuLikuIFNvLCBvZmZsb2FkCiAgKiBpcyBleHBlY3RlZCB0byB3b3JrIGFjcm9zcyBhbGwgdHlwZXMgb2YgSVAgdHVubmVscyBvbmNlIGV4cG9ydGVkLiBTa3loYXdrCiAgKiBzdXBwb3J0cyBvZmZsb2FkcyBmb3IgZWl0aGVyIFZ4TEFOIG9yIE5WR1JFLCBleGNsdXNpdmVseS4gU28gd2UgZXhwb3J0IFZ4TEFOCi0gKiBvZmZsb2FkcyBpbiBod19lbmNfZmVhdHVyZXMgb25seSB3aGVuIGEgVnhMQU4gcG9ydCBpcyBhZGRlZC4gTm90ZSB0aGlzIG9ubHkKLSAqIGVuc3VyZXMgdGhhdCBvdGhlciB0dW5uZWxzIHdvcmsgZmluZSB3aGlsZSBWeExBTiBvZmZsb2FkcyBhcmUgbm90IGVuYWJsZWQuCisgKiBvZmZsb2FkcyBpbiBod19lbmNfZmVhdHVyZXMgb25seSB3aGVuIGEgVnhMQU4gcG9ydCBpcyBhZGRlZC4gSWYgb3RoZXIgKG5vbgorICogVnhMQU4pIHR1bm5lbHMgYXJlIGNvbmZpZ3VyZWQgd2hpbGUgVnhMQU4gb2ZmbG9hZHMgYXJlIGVuYWJsZWQsIG9mZmxvYWRzIGZvcgorICogdGhvc2Ugb3RoZXIgdHVubmVscyBhcmUgdW5leHBvcnRlZCBvbiB0aGUgZmx5IHRocm91Z2ggbmRvX2ZlYXR1cmVzX2NoZWNrKCkuCiAgKgogICogU2t5aGF3ayBzdXBwb3J0cyBWeExBTiBvZmZsb2FkcyBvbmx5IGZvciBvbmUgVURQIGRwb3J0LiBTbywgaWYgdGhlIHN0YWNrCiAgKiBhZGRzIG1vcmUgdGhhbiBvbmUgcG9ydCwgZGlzYWJsZSBvZmZsb2FkcyBhbmQgZG9uJ3QgcmUtZW5hYmxlIHRoZW0gYWdhaW4KQEAgLTQ0NTksOSArNDQ2MCw0NSBAQAogCWFkYXB0ZXItPnZ4bGFuX3BvcnRfY291bnQtLTsKIH0KIAotc3RhdGljIGJvb2wgYmVfZ3NvX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYmVfZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiB7Ci0JcmV0dXJuIHZ4bGFuX2dzb19jaGVjayhza2IpOworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBsNF9oZHIgPSAwOworCisJLyogVGhlIGNvZGUgYmVsb3cgcmVzdHJpY3RzIG9mZmxvYWQgZmVhdHVyZXMgZm9yIHNvbWUgdHVubmVsZWQgcGFja2V0cy4KKwkgKiBPZmZsb2FkIGZlYXR1cmVzIGZvciBub3JtYWwgKG5vbiB0dW5uZWwpIHBhY2tldHMgYXJlIHVuY2hhbmdlZC4KKwkgKi8KKwlpZiAoIXNrYi0+ZW5jYXBzdWxhdGlvbiB8fAorCSAgICAhKGFkYXB0ZXItPmZsYWdzICYgQkVfRkxBR1NfVlhMQU5fT0ZGTE9BRFMpKQorCQlyZXR1cm4gZmVhdHVyZXM7CisKKwkvKiBJdCdzIGFuIGVuY2Fwc3VsYXRlZCBwYWNrZXQgYW5kIFZ4TEFOIG9mZmxvYWRzIGFyZSBlbmFibGVkLiBXZQorCSAqIHNob3VsZCBkaXNhYmxlIHR1bm5lbCBvZmZsb2FkIGZlYXR1cmVzIGlmIGl0J3Mgbm90IGEgVnhMQU4gcGFja2V0LAorCSAqIGFzIHR1bm5lbCBvZmZsb2FkcyBoYXZlIGJlZW4gZW5hYmxlZCBvbmx5IGZvciBWeExBTi4gVGhpcyBpcyBkb25lIHRvCisJICogYWxsb3cgb3RoZXIgdHVubmVsZWQgdHJhZmZpYyBsaWtlIEdSRSB3b3JrIGZpbmUgd2hpbGUgVnhMQU4KKwkgKiBvZmZsb2FkcyBhcmUgY29uZmlndXJlZCBpbiBTa3loYXdrLVIuCisJICovCisJc3dpdGNoICh2bGFuX2dldF9wcm90b2NvbChza2IpKSB7CisJY2FzZSBodG9ucyhFVEhfUF9JUCk6CisJCWw0X2hkciA9IGlwX2hkcihza2IpLT5wcm90b2NvbDsKKwkJYnJlYWs7CisJY2FzZSBodG9ucyhFVEhfUF9JUFY2KToKKwkJbDRfaGRyID0gaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZlYXR1cmVzOworCX0KKworCWlmIChsNF9oZHIgIT0gSVBQUk9UT19VRFAgfHwKKwkgICAgc2tiLT5pbm5lcl9wcm90b2NvbF90eXBlICE9IEVOQ0FQX1RZUEVfRVRIRVIgfHwKKwkgICAgc2tiLT5pbm5lcl9wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9URUIpIHx8CisJICAgIHNrYl9pbm5lcl9tYWNfaGVhZGVyKHNrYikgLSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICE9CisJICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIHNpemVvZihzdHJ1Y3QgdnhsYW5oZHIpKQorCQlyZXR1cm4gZmVhdHVyZXMgJiB+KE5FVElGX0ZfQUxMX0NTVU0gfCBORVRJRl9GX0dTT19NQVNLKTsKKworCXJldHVybiBmZWF0dXJlczsKIH0KICNlbmRpZgogCkBAIC00NDkyLDcgKzQ1MjksNyBAQAogI2lmZGVmIENPTkZJR19CRTJORVRfVlhMQU4KIAkubmRvX2FkZF92eGxhbl9wb3J0CT0gYmVfYWRkX3Z4bGFuX3BvcnQsCiAJLm5kb19kZWxfdnhsYW5fcG9ydAk9IGJlX2RlbF92eGxhbl9wb3J0LAotCS5uZG9fZ3NvX2NoZWNrCQk9IGJlX2dzb19jaGVjaywKKwkubmRvX2ZlYXR1cmVzX2NoZWNrCT0gYmVfZmVhdHVyZXNfY2hlY2ssCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaAppbmRleCA0Njk2OTFhLi40MDEzMjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oCkBAIC00MjQsNiArNDI0LDggQEAKICAqICg0MG5zICogNikuCiAgKi8KICNkZWZpbmUgRkVDX1FVSVJLX0JVR19DQVBUVVJFCQkoMSA8PCAxMCkKKy8qIENvbnRyb2xsZXIgaGFzIG9ubHkgb25lIE1ESU8gYnVzICovCisjZGVmaW5lIEZFQ19RVUlSS19TSU5HTEVfTURJTwkJKDEgPDwgMTEpCiAKIHN0cnVjdCBmZWNfZW5ldF9wcml2X3R4X3EgewogCWludCBpbmRleDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKaW5kZXggNWViZGY4ZC4uYmJhODc3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKQEAgLTkxLDcgKzkxLDggQEAKIAkJLmRyaXZlcl9kYXRhID0gMCwKIAl9LCB7CiAJCS5uYW1lID0gImlteDI4LWZlYyIsCi0JCS5kcml2ZXJfZGF0YSA9IEZFQ19RVUlSS19FTkVUX01BQyB8IEZFQ19RVUlSS19TV0FQX0ZSQU1FLAorCQkuZHJpdmVyX2RhdGEgPSBGRUNfUVVJUktfRU5FVF9NQUMgfCBGRUNfUVVJUktfU1dBUF9GUkFNRSB8CisJCQkJRkVDX1FVSVJLX1NJTkdMRV9NRElPLAogCX0sIHsKIAkJLm5hbWUgPSAiaW14NnEtZmVjIiwKIAkJLmRyaXZlcl9kYXRhID0gRkVDX1FVSVJLX0VORVRfTUFDIHwgRkVDX1FVSVJLX0hBU19HQklUIHwKQEAgLTE5MzcsNyArMTkzOCw3IEBACiAJaW50IGVyciA9IC1FTlhJTywgaTsKIAogCS8qCi0JICogVGhlIGR1YWwgZmVjIGludGVyZmFjZXMgYXJlIG5vdCBlcXVpdmFsZW50IHdpdGggZW5ldC1tYWMuCisJICogVGhlIGkuTVgyOCBkdWFsIGZlYyBpbnRlcmZhY2VzIGFyZSBub3QgZXF1YWwuCiAJICogSGVyZSBhcmUgdGhlIGRpZmZlcmVuY2VzOgogCSAqCiAJICogIC0gZmVjMCBzdXBwb3J0cyBNSUkgJiBSTUlJIG1vZGVzIHdoaWxlIGZlYzEgb25seSBzdXBwb3J0cyBSTUlJCkBAIC0xOTUyLDcgKzE5NTMsNyBAQAogCSAqIG1kaW8gaW50ZXJmYWNlIGluIGJvYXJkIGRlc2lnbiwgYW5kIG5lZWQgdG8gYmUgY29uZmlndXJlZCBieQogCSAqIGZlYzAgbWlpX2J1cy4KIAkgKi8KLQlpZiAoKGZlcC0+cXVpcmtzICYgRkVDX1FVSVJLX0VORVRfTUFDKSAmJiBmZXAtPmRldl9pZCA+IDApIHsKKwlpZiAoKGZlcC0+cXVpcmtzICYgRkVDX1FVSVJLX1NJTkdMRV9NRElPKSAmJiBmZXAtPmRldl9pZCA+IDApIHsKIAkJLyogZmVjMSB1c2VzIGZlYzAgbWlpX2J1cyAqLwogCQlpZiAobWlpX2NudCAmJiBmZWMwX21paV9idXMpIHsKIAkJCWZlcC0+bWlpX2J1cyA9IGZlYzBfbWlpX2J1czsKQEAgLTIwMTUsNyArMjAxNiw3IEBACiAJbWlpX2NudCsrOwogCiAJLyogc2F2ZSBmZWMwIG1paV9idXMgKi8KLQlpZiAoZmVwLT5xdWlya3MgJiBGRUNfUVVJUktfRU5FVF9NQUMpCisJaWYgKGZlcC0+cXVpcmtzICYgRkVDX1FVSVJLX1NJTkdMRV9NRElPKQogCQlmZWMwX21paV9idXMgPSBmZXAtPm1paV9idXM7CiAKIAlyZXR1cm4gMDsKQEAgLTMxMjksNiArMzEzMCw3IEBACiAJCXBkZXYtPmlkX2VudHJ5ID0gb2ZfaWQtPmRhdGE7CiAJZmVwLT5xdWlya3MgPSBwZGV2LT5pZF9lbnRyeS0+ZHJpdmVyX2RhdGE7CiAKKwlmZXAtPm5ldGRldiA9IG5kZXY7CiAJZmVwLT5udW1fcnhfcXVldWVzID0gbnVtX3J4X3FzOwogCWZlcC0+bnVtX3R4X3F1ZXVlcyA9IG51bV90eF9xczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcKaW5kZXggNWI4MzAwYS4uNGQ2MWVmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnCkBAIC0yODEsNiArMjgxLDE3IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBJNDBFX0ZDT0UKKwlib29sICJGaWJyZSBDaGFubmVsIG92ZXIgRXRoZXJuZXQgKEZDb0UpIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gSTQwRSAmJiBEQ0IgJiYgRkNPRQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIEZpYnJlIENoYW5uZWwgb3ZlciBFdGhlcm5ldCAoRkNvRSkKKwkgIGluIHRoZSBkcml2ZXIuIFRoaXMgd2lsbCBjcmVhdGUgbmV3IG5ldGRldiBmb3IgZXhjbHVzaXZlIEZDb0UKKwkgIHVzZSB3aXRoIFhMNzEwIEZDb0Ugb2ZmbG9hZHMgZW5hYmxlZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEk0MEVWRgogCXRyaXN0YXRlICJJbnRlbChSKSBYTDcxMCBYNzEwIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSV9NU0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYwppbmRleCA3ODEwNjVlLi5lOWMzYTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jCkBAIC0xNTQzLDcgKzE1NDMsNyBAQAogCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQk1DUiwgYm1jcik7CiAJfSBlbHNlIGlmICgobmljLT5tYWMgPj0gbWFjXzgyNTUwX0QxMDIpIHx8ICgobmljLT5mbGFncyAmIGljaCkgJiYKIAkgICAobWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfVFBJU1RBVFVTKSAmIDB4ODAwMCkgJiYKLQkJIShuaWMtPmVlcHJvbVtlZXByb21fY25mZ19tZGl4XSAmIGVlcHJvbV9tZGl4X2VuYWJsZWQpKSkgeworCQkobmljLT5lZXByb21bZWVwcm9tX2NuZmdfbWRpeF0gJiBlZXByb21fbWRpeF9lbmFibGVkKSkpIHsKIAkJLyogZW5hYmxlL2Rpc2FibGUgTURJL01ESS1YIGF1dG8tc3dpdGNoaW5nLiAqLwogCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfTkNPTkZJRywKIAkJCQluaWMtPm1paS5mb3JjZV9tZWRpYSA/IDAgOiBOQ09ORklHX0FVVE9fU1dJVENIKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL01ha2VmaWxlCmluZGV4IDRiOTRkZGIuLmM0MDU4MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9NYWtlZmlsZQpAQCAtNDQsNCArNDQsNCBAQAogCWk0MGVfdmlydGNobmxfcGYubwogCiBpNDBlLSQoQ09ORklHX0k0MEVfRENCKSArPSBpNDBlX2RjYi5vIGk0MGVfZGNiX25sLm8KLWk0MGUtJChDT05GSUdfRkNPRTptPXkpICs9IGk0MGVfZmNvZS5vCitpNDBlLSQoQ09ORklHX0k0MEVfRkNPRSkgKz0gaTQwZV9mY29lLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZGVidWdmcy5jCmluZGV4IDQzM2E1NTguLmNiMGRlNDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9kZWJ1Z2ZzLmMKQEAgLTgyOSw3ICs4MjksNyBAQAogCQlpZiAoZGVzY19uID49IHJpbmctPmNvdW50IHx8IGRlc2NfbiA8IDApIHsKIAkJCWRldl9pbmZvKCZwZi0+cGRldi0+ZGV2LAogCQkJCSAiZGVzY3JpcHRvciAlZCBub3QgZm91bmRcbiIsIGRlc2Nfbik7Ci0JCQlyZXR1cm47CisJCQlnb3RvIG91dDsKIAkJfQogCQlpZiAoIWlzX3J4X3JpbmcpIHsKIAkJCXR4ZCA9IEk0MEVfVFhfREVTQyhyaW5nLCBkZXNjX24pOwpAQCAtODU1LDYgKzg1NSw4IEBACiAJfSBlbHNlIHsKIAkJZGV2X2luZm8oJnBmLT5wZGV2LT5kZXYsICJkdW1wIGRlc2MgcngvdHggPHZzaV9zZWlkPiA8cmluZ19pZD4gWzxkZXNjX24+XVxuIik7CiAJfQorCitvdXQ6CiAJa2ZyZWUocmluZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9vc2RlcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX29zZGVwLmgKaW5kZXggMDQ1YjVjNC4uYWQ4MDJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX29zZGVwLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX29zZGVwLmgKQEAgLTc4LDcgKzc4LDcgQEAKIH0gd2hpbGUgKDApCiAKIHR5cGVkZWYgZW51bSBpNDBlX3N0YXR1c19jb2RlIGk0MGVfc3RhdHVzOwotI2lmIGRlZmluZWQoQ09ORklHX0ZDT0UpIHx8IGRlZmluZWQoQ09ORklHX0ZDT0VfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JNDBFX0ZDT0UKICNkZWZpbmUgSTQwRV9GQ09FCi0jZW5kaWYgLyogQ09ORklHX0ZDT0Ugb3IgQ09ORklHX0ZDT0VfTU9EVUxFICovCisjZW5kaWYKICNlbmRpZiAvKiBfSTQwRV9PU0RFUF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMKaW5kZXggMDRiNDQxNC4uY2VjYjM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jCkBAIC02NTgsNiArNjU4LDggQEAKIAlyZXR1cm4gbGUzMl90b19jcHUoKih2b2xhdGlsZSBfX2xlMzIgKiloZWFkKTsKIH0KIAorI2RlZmluZSBXQl9TVFJJREUgMHgzCisKIC8qKgogICogaTQwZV9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEB0eF9yaW5nOiAgdHggcmluZyB0byBjbGVhbgpAQCAtNzU5LDYgKzc2MSwxOCBAQAogCXR4X3JpbmctPnFfdmVjdG9yLT50eC50b3RhbF9ieXRlcyArPSB0b3RhbF9ieXRlczsKIAl0eF9yaW5nLT5xX3ZlY3Rvci0+dHgudG90YWxfcGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOwogCisJLyogY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLWNhY2hlIGFsaWduZWQgZGVzY3JpcHRvcnMKKwkgKiB3YWl0aW5nIHRvIGJlIHdyaXR0ZW4gYmFjaywgYW5kIGtpY2sgdGhlIGhhcmR3YXJlIHRvIGZvcmNlCisJICogdGhlbSB0byBiZSB3cml0dGVuIGJhY2sgaW4gY2FzZSBvZiBuYXBpIHBvbGxpbmcKKwkgKi8KKwlpZiAoYnVkZ2V0ICYmCisJICAgICEoKGkgJiBXQl9TVFJJREUpID09IFdCX1NUUklERSkgJiYKKwkgICAgIXRlc3RfYml0KF9fSTQwRV9ET1dOLCAmdHhfcmluZy0+dnNpLT5zdGF0ZSkgJiYKKwkgICAgKEk0MEVfREVTQ19VTlVTRUQodHhfcmluZykgIT0gdHhfcmluZy0+Y291bnQpKQorCQl0eF9yaW5nLT5hcm1fd2IgPSB0cnVlOworCWVsc2UKKwkJdHhfcmluZy0+YXJtX3diID0gZmFsc2U7CisKIAlpZiAoY2hlY2tfZm9yX3R4X2hhbmcodHhfcmluZykgJiYgaTQwZV9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7CiAJCS8qIHNjaGVkdWxlIGltbWVkaWF0ZSByZXNldCBpZiB3ZSBiZWxpZXZlIHdlIGh1bmcgKi8KIAkJZGV2X2luZm8odHhfcmluZy0+ZGV2LCAiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nXG4iCkBAIC03NzcsMTMgKzc5MSwxNiBAQAogCQluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctPm5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpOwogCiAJCWRldl9pbmZvKHR4X3JpbmctPmRldiwKLQkJCSAidHggaGFuZyBkZXRlY3RlZCBvbiBxdWV1ZSAlZCwgcmVzZXR0aW5nIGFkYXB0ZXJcbiIsCisJCQkgInR4IGhhbmcgZGV0ZWN0ZWQgb24gcXVldWUgJWQsIHJlc2V0IHJlcXVlc3RlZFxuIiwKIAkJCSB0eF9yaW5nLT5xdWV1ZV9pbmRleCk7CiAKLQkJdHhfcmluZy0+bmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fdHhfdGltZW91dCh0eF9yaW5nLT5uZXRkZXYpOworCQkvKiBkbyBub3QgZmlyZSB0aGUgcmVzZXQgaW1tZWRpYXRlbHksIHdhaXQgZm9yIHRoZSBzdGFjayB0bworCQkgKiBkZWNpZGUgd2UgYXJlIHRydWx5IHN0dWNrLCBhbHNvIHByZXZlbnRzIGV2ZXJ5IHF1ZXVlIGZyb20KKwkJICogc2ltdWx0YW5lb3VzbHkgcmVxdWVzdGluZyBhIHJlc2V0CisJCSAqLwogCi0JCS8qIHRoZSBhZGFwdGVyIGlzIGFib3V0IHRvIHJlc2V0LCBubyBwb2ludCBpbiBlbmFibGluZyBzdHVmZiAqLwotCQlyZXR1cm4gdHJ1ZTsKKwkJLyogdGhlIGFkYXB0ZXIgaXMgYWJvdXQgdG8gcmVzZXQsIG5vIHBvaW50IGluIGVuYWJsaW5nIHBvbGxpbmcgKi8KKwkJYnVkZ2V0ID0gMTsKIAl9CiAKIAluZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUodHhfcmluZy0+bmV0ZGV2LApAQCAtODA2LDcgKzgyMywyNSBAQAogCQl9CiAJfQogCi0JcmV0dXJuIGJ1ZGdldCA+IDA7CisJcmV0dXJuICEhYnVkZ2V0OworfQorCisvKioKKyAqIGk0MGVfZm9yY2Vfd2IgLSBBcm0gaGFyZHdhcmUgdG8gZG8gYSB3YiBvbiBub25jYWNoZSBhbGlnbmVkIGRlc2NyaXB0b3JzCisgKiBAdnNpOiB0aGUgVlNJIHdlIGNhcmUgYWJvdXQKKyAqIEBxX3ZlY3RvcjogdGhlIHZlY3RvciAgb24gd2hpY2ggdG8gZm9yY2Ugd3JpdGViYWNrCisgKgorICoqLworc3RhdGljIHZvaWQgaTQwZV9mb3JjZV93YihzdHJ1Y3QgaTQwZV92c2kgKnZzaSwgc3RydWN0IGk0MGVfcV92ZWN0b3IgKnFfdmVjdG9yKQoreworCXUzMiB2YWwgPSBJNDBFX1BGSU5UX0RZTl9DVExOX0lOVEVOQV9NQVNLIHwKKwkJICBJNDBFX1BGSU5UX0RZTl9DVExOX1NXSU5UX1RSSUdfTUFTSyB8CisJCSAgSTQwRV9QRklOVF9EWU5fQ1RMTl9TV19JVFJfSU5EWF9FTkFfTUFTSworCQkgIC8qIGFsbG93IDAwIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGluZGV4ICovOworCisJd3IzMigmdnNpLT5iYWNrLT5odywKKwkgICAgIEk0MEVfUEZJTlRfRFlOX0NUTE4ocV92ZWN0b3ItPnZfaWR4ICsgdnNpLT5iYXNlX3ZlY3RvciAtIDEpLAorCSAgICAgdmFsKTsKIH0KIAogLyoqCkBAIC0xMjkwLDkgKzEzMjUsNyBAQAogCSAqIHNvIHRoZSB0b3RhbCBsZW5ndGggb2YgSVB2NCBoZWFkZXIgaXMgSUhMKjQgYnl0ZXMKIAkgKiBUaGUgVURQXzAgYml0ICptYXkqIGJldCBzZXQgaWYgdGhlICppbm5lciogaGVhZGVyIGlzIFVEUAogCSAqLwotCWlmIChpcHY0X3R1bm5lbCAmJgotCSAgICAoZGVjb2RlZC5pbm5lcl9wcm90ICE9IEk0MEVfUlhfUFRZUEVfSU5ORVJfUFJPVF9VRFApICYmCi0JICAgICEocnhfc3RhdHVzICYgKDEgPDwgSTQwRV9SWF9ERVNDX1NUQVRVU19VRFBfMF9TSElGVCkpKSB7CisJaWYgKGlwdjRfdHVubmVsKSB7CiAJCXNrYi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0+bWFjX2hlYWRlciArCiAJCQkJCXNpemVvZihzdHJ1Y3QgZXRoaGRyKSArCiAJCQkJCShpcF9oZHIoc2tiKS0+aWhsICogNCk7CkBAIC0xMzAyLDE1ICsxMzM1LDE5IEBACiAJCQkJCSAgc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxQUQpKQogCQkJCQkgID8gVkxBTl9ITEVOIDogMDsKIAotCQlyeF91ZHBfY3N1bSA9IHVkcF9jc3VtKHNrYik7Ci0JCWlwaCA9IGlwX2hkcihza2IpOwotCQljc3VtID0gY3N1bV90Y3B1ZHBfbWFnaWMoCi0JCQkJaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKLQkJCQkoc2tiLT5sZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKSwKLQkJCQlJUFBST1RPX1VEUCwgcnhfdWRwX2NzdW0pOworCQlpZiAoKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgJiYKKwkJICAgICh1ZHBfaGRyKHNrYiktPmNoZWNrICE9IDApKSB7CisJCQlyeF91ZHBfY3N1bSA9IHVkcF9jc3VtKHNrYik7CisJCQlpcGggPSBpcF9oZHIoc2tiKTsKKwkJCWNzdW0gPSBjc3VtX3RjcHVkcF9tYWdpYygKKwkJCQkJaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKKwkJCQkJKHNrYi0+bGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSksCisJCQkJCUlQUFJPVE9fVURQLCByeF91ZHBfY3N1bSk7CiAKLQkJaWYgKHVkcF9oZHIoc2tiKS0+Y2hlY2sgIT0gY3N1bSkKLQkJCWdvdG8gY2hlY2tzdW1fZmFpbDsKKwkJCWlmICh1ZHBfaGRyKHNrYiktPmNoZWNrICE9IGNzdW0pCisJCQkJZ290byBjaGVja3N1bV9mYWlsOworCisJCX0gLyogZWxzZSBpdHMgR1JFIGFuZCBzbyBubyBvdXRlciBVRFAgaGVhZGVyICovCiAJfQogCiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKQEAgLTE1ODEsNiArMTYxOCw3IEBACiAJc3RydWN0IGk0MGVfdnNpICp2c2kgPSBxX3ZlY3Rvci0+dnNpOwogCXN0cnVjdCBpNDBlX3JpbmcgKnJpbmc7CiAJYm9vbCBjbGVhbl9jb21wbGV0ZSA9IHRydWU7CisJYm9vbCBhcm1fd2IgPSBmYWxzZTsKIAlpbnQgYnVkZ2V0X3Blcl9yaW5nOwogCiAJaWYgKHRlc3RfYml0KF9fSTQwRV9ET1dOLCAmdnNpLT5zdGF0ZSkpIHsKQEAgLTE1OTEsOCArMTYyOSwxMCBAQAogCS8qIFNpbmNlIHRoZSBhY3R1YWwgVHggd29yayBpcyBtaW5pbWFsLCB3ZSBjYW4gZ2l2ZSB0aGUgVHggYSBsYXJnZXIKIAkgKiBidWRnZXQgYW5kIGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCBjbGVhbmluZyB1cCB0aGUgVHggZGVzY3JpcHRvcnMuCiAJICovCi0JaTQwZV9mb3JfZWFjaF9yaW5nKHJpbmcsIHFfdmVjdG9yLT50eCkKKwlpNDBlX2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItPnR4KSB7CiAJCWNsZWFuX2NvbXBsZXRlICY9IGk0MGVfY2xlYW5fdHhfaXJxKHJpbmcsIHZzaS0+d29ya19saW1pdCk7CisJCWFybV93YiB8PSByaW5nLT5hcm1fd2I7CisJfQogCiAJLyogV2UgYXR0ZW1wdCB0byBkaXN0cmlidXRlIGJ1ZGdldCB0byBlYWNoIFJ4IHF1ZXVlIGZhaXJseSwgYnV0IGRvbid0CiAJICogYWxsb3cgdGhlIGJ1ZGdldCB0byBnbyBiZWxvdyAxIGJlY2F1c2UgdGhhdCB3b3VsZCBleGl0IHBvbGxpbmcgZWFybHkuCkBAIC0xNjAzLDggKzE2NDMsMTEgQEAKIAkJY2xlYW5fY29tcGxldGUgJj0gaTQwZV9jbGVhbl9yeF9pcnEocmluZywgYnVkZ2V0X3Blcl9yaW5nKTsKIAogCS8qIElmIHdvcmsgbm90IGNvbXBsZXRlZCwgcmV0dXJuIGJ1ZGdldCBhbmQgcG9sbGluZyB3aWxsIHJldHVybiAqLwotCWlmICghY2xlYW5fY29tcGxldGUpCisJaWYgKCFjbGVhbl9jb21wbGV0ZSkgeworCQlpZiAoYXJtX3diKQorCQkJaTQwZV9mb3JjZV93Yih2c2ksIHFfdmVjdG9yKTsKIAkJcmV0dXJuIGJ1ZGdldDsKKwl9CiAKIAkvKiBXb3JrIGlzIGRvbmUgc28gZXhpdCB0aGUgcG9sbGluZyBtb2RlIGFuZCByZS1lbmFibGUgdGhlIGludGVycnVwdCAqLwogCW5hcGlfY29tcGxldGUobmFwaSk7CkBAIC0xODQwLDE3ICsxODgzLDE2IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlpZiAocHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCWlwaCA9IHNrYi0+ZW5jYXBzdWxhdGlvbiA/IGlubmVyX2lwX2hkcihza2IpIDogaXBfaGRyKHNrYik7CisJaXBoID0gc2tiLT5lbmNhcHN1bGF0aW9uID8gaW5uZXJfaXBfaGRyKHNrYikgOiBpcF9oZHIoc2tiKTsKKwlpcHY2aCA9IHNrYi0+ZW5jYXBzdWxhdGlvbiA/IGlubmVyX2lwdjZfaGRyKHNrYikgOiBpcHY2X2hkcihza2IpOworCisJaWYgKGlwaC0+dmVyc2lvbiA9PSA0KSB7CiAJCXRjcGggPSBza2ItPmVuY2Fwc3VsYXRpb24gPyBpbm5lcl90Y3BfaGRyKHNrYikgOiB0Y3BfaGRyKHNrYik7CiAJCWlwaC0+dG90X2xlbiA9IDA7CiAJCWlwaC0+Y2hlY2sgPSAwOwogCQl0Y3BoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAogCQkJCQkJIDAsIElQUFJPVE9fVENQLCAwKTsKLQl9IGVsc2UgaWYgKHNrYl9pc19nc29fdjYoc2tiKSkgewotCi0JCWlwdjZoID0gc2tiLT5lbmNhcHN1bGF0aW9uID8gaW5uZXJfaXB2Nl9oZHIoc2tiKQotCQkJCQkgICA6IGlwdjZfaGRyKHNrYik7CisJfSBlbHNlIGlmIChpcHY2aC0+dmVyc2lvbiA9PSA2KSB7CiAJCXRjcGggPSBza2ItPmVuY2Fwc3VsYXRpb24gPyBpbm5lcl90Y3BfaGRyKHNrYikgOiB0Y3BfaGRyKHNrYik7CiAJCWlwdjZoLT5wYXlsb2FkX2xlbiA9IDA7CiAJCXRjcGgtPmNoZWNrID0gfmNzdW1faXB2Nl9tYWdpYygmaXB2NmgtPnNhZGRyLCAmaXB2NmgtPmRhZGRyLApAQCAtMTk0NiwxMyArMTk4OCw5IEBACiAJCQkJCSBJNDBFX1RYX0NUWF9FWFRfSVBfSVBWNF9OT19DU1VNOwogCQkJfQogCQl9IGVsc2UgaWYgKHR4X2ZsYWdzICYgSTQwRV9UWF9GTEFHU19JUFY2KSB7Ci0JCQlpZiAodHhfZmxhZ3MgJiBJNDBFX1RYX0ZMQUdTX1RTTykgewotCQkJCSpjZF90dW5uZWxpbmcgfD0gSTQwRV9UWF9DVFhfRVhUX0lQX0lQVjY7CisJCQkqY2RfdHVubmVsaW5nIHw9IEk0MEVfVFhfQ1RYX0VYVF9JUF9JUFY2OworCQkJaWYgKHR4X2ZsYWdzICYgSTQwRV9UWF9GTEFHU19UU08pCiAJCQkJaXBfaGRyKHNrYiktPmNoZWNrID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJKmNkX3R1bm5lbGluZyB8PQotCQkJCQkgSTQwRV9UWF9DVFhfRVhUX0lQX0lQVjRfTk9fQ1NVTTsKLQkJCX0KIAkJfQogCiAJCS8qIE5vdyBzZXQgdGhlIGN0eCBkZXNjcmlwdG9yIGZpZWxkcyAqLwpAQCAtMTk2Miw3ICsyMDAwLDEwIEBACiAJCQkJICAgKChza2JfaW5uZXJfbmV0d29ya19vZmZzZXQoc2tiKSAtCiAJCQkJCXNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpID4+IDEpIDw8CiAJCQkJICAgSTQwRV9UWERfQ1RYX1FXMF9OQVRMRU5fU0hJRlQ7Ci0KKwkJaWYgKHRoaXNfaXBfaGRyLT52ZXJzaW9uID09IDYpIHsKKwkJCXR4X2ZsYWdzICY9IH5JNDBFX1RYX0ZMQUdTX0lQVjQ7CisJCQl0eF9mbGFncyB8PSBJNDBFX1RYX0ZMQUdTX0lQVjY7CisJCX0KIAl9IGVsc2UgewogCQluZXR3b3JrX2hkcl9sZW4gPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7CiAJCXRoaXNfaXBfaGRyID0gaXBfaGRyKHNrYik7CkBAIC0yMTk4LDcgKzIyMzksNiBAQAogCS8qIFBsYWNlIFJTIGJpdCBvbiBsYXN0IGRlc2NyaXB0b3Igb2YgYW55IHBhY2tldCB0aGF0IHNwYW5zIGFjcm9zcyB0aGUKIAkgKiA0dGggZGVzY3JpcHRvciAoV0JfU1RSSURFIGFrYSAweDMpIGluIGEgNjRCIGNhY2hlbGluZS4KIAkgKi8KLSNkZWZpbmUgV0JfU1RSSURFIDB4MwogCWlmICgoKGkgJiBXQl9TVFJJREUpICE9IFdCX1NUUklERSkgJiYKIAkgICAgKGZpcnN0IDw9ICZ0eF9yaW5nLT50eF9iaVtpXSkgJiYKIAkgICAgKGZpcnN0ID49ICZ0eF9yaW5nLT50eF9iaVtpICYgfldCX1NUUklERV0pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaAppbmRleCBlNjBkM2FjLi4xOGIwMDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmgKQEAgLTI0MSw2ICsyNDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF9yeF90aW1lc3RhbXA7CiAKIAlib29sIHJpbmdfYWN0aXZlOwkJLyogaXMgcmluZyBvbmxpbmUgb3Igbm90ICovCisJYm9vbCBhcm1fd2I7CQkvKiBkbyBzb21ldGhpbmcgdG8gYXJtIHdyaXRlIGJhY2sgKi8KIAogCS8qIHN0YXRzIHN0cnVjdHMgKi8KIAlzdHJ1Y3QgaTQwZV9xdWV1ZV9zdGF0cwlzdGF0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmMKaW5kZXggMDUxZWE5NC4uMGY2OWVmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmMKQEAgLTExMjUsNyArMTEyNSw3IEBACiAJdTMyIHN3bWFzayA9IG1hc2s7CiAJdTMyIGZ3bWFzayA9IG1hc2sgPDwgMTY7CiAJczMyIHJldF92YWwgPSAwOwotCXMzMiBpID0gMCwgdGltZW91dCA9IDIwMDsgLyogRklYTUU6IGZpbmQgcmVhbCB2YWx1ZSB0byB1c2UgaGVyZSAqLworCXMzMiBpID0gMCwgdGltZW91dCA9IDIwMDsKIAogCXdoaWxlIChpIDwgdGltZW91dCkgewogCQlpZiAoaWdiX2dldF9od19zZW1hcGhvcmUoaHcpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212NjQzeHhfZXRoLmMKaW5kZXggYTYyZmMzOC4uMWM3NTgyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYwpAQCAtMTkyLDYgKzE5MiwxMCBAQAogI2RlZmluZSBJU19UU09fSEVBREVSKHR4cSwgYWRkcikgXAogCSgoYWRkciA+PSB0eHEtPnRzb19oZHJzX2RtYSkgJiYgXAogCSAoYWRkciA8IHR4cS0+dHNvX2hkcnNfZG1hICsgdHhxLT50eF9yaW5nX3NpemUgKiBUU09fSEVBREVSX1NJWkUpKQorCisjZGVmaW5lIERFU0NfRE1BX01BUF9TSU5HTEUgMAorI2RlZmluZSBERVNDX0RNQV9NQVBfUEFHRSAxCisKIC8qCiAgKiBSWC9UWCBkZXNjcmlwdG9ycy4KICAqLwpAQCAtMzYyLDYgKzM2Niw3IEBACiAJZG1hX2FkZHJfdCB0c29faGRyc19kbWE7CiAKIAlzdHJ1Y3QgdHhfZGVzYyAqdHhfZGVzY19hcmVhOworCWNoYXIgKnR4X2Rlc2NfbWFwcGluZzsgLyogYXJyYXkgdG8gdHJhY2sgdGhlIHR5cGUgb2YgdGhlIGRtYSBtYXBwaW5nICovCiAJZG1hX2FkZHJfdCB0eF9kZXNjX2RtYTsKIAlpbnQgdHhfZGVzY19hcmVhX3NpemU7CiAKQEAgLTc1MCw2ICs3NTUsNyBAQAogCWlmICh0eHEtPnR4X2N1cnJfZGVzYyA9PSB0eHEtPnR4X3Jpbmdfc2l6ZSkKIAkJdHhxLT50eF9jdXJyX2Rlc2MgPSAwOwogCWRlc2MgPSAmdHhxLT50eF9kZXNjX2FyZWFbdHhfaW5kZXhdOworCXR4cS0+dHhfZGVzY19tYXBwaW5nW3R4X2luZGV4XSA9IERFU0NfRE1BX01BUF9TSU5HTEU7CiAKIAlkZXNjLT5sNGlfY2hrID0gMDsKIAlkZXNjLT5ieXRlX2NudCA9IGxlbmd0aDsKQEAgLTg3OSwxNCArODg1LDEzIEBACiAJCXNrYl9mcmFnX3QgKnRoaXNfZnJhZzsKIAkJaW50IHR4X2luZGV4OwogCQlzdHJ1Y3QgdHhfZGVzYyAqZGVzYzsKLQkJdm9pZCAqYWRkcjsKIAogCQl0aGlzX2ZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmcmFnXTsKLQkJYWRkciA9IHBhZ2VfYWRkcmVzcyh0aGlzX2ZyYWctPnBhZ2UucCkgKyB0aGlzX2ZyYWctPnBhZ2Vfb2Zmc2V0OwogCQl0eF9pbmRleCA9IHR4cS0+dHhfY3Vycl9kZXNjKys7CiAJCWlmICh0eHEtPnR4X2N1cnJfZGVzYyA9PSB0eHEtPnR4X3Jpbmdfc2l6ZSkKIAkJCXR4cS0+dHhfY3Vycl9kZXNjID0gMDsKIAkJZGVzYyA9ICZ0eHEtPnR4X2Rlc2NfYXJlYVt0eF9pbmRleF07CisJCXR4cS0+dHhfZGVzY19tYXBwaW5nW3R4X2luZGV4XSA9IERFU0NfRE1BX01BUF9QQUdFOwogCiAJCS8qCiAJCSAqIFRoZSBsYXN0IGZyYWdtZW50IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0CkBAIC05MDIsOCArOTA3LDkgQEAKIAogCQlkZXNjLT5sNGlfY2hrID0gMDsKIAkJZGVzYy0+Ynl0ZV9jbnQgPSBza2JfZnJhZ19zaXplKHRoaXNfZnJhZyk7Ci0JCWRlc2MtPmJ1Zl9wdHIgPSBkbWFfbWFwX3NpbmdsZShtcC0+ZGV2LT5kZXYucGFyZW50LCBhZGRyLAotCQkJCQkgICAgICAgZGVzYy0+Ynl0ZV9jbnQsIERNQV9UT19ERVZJQ0UpOworCQlkZXNjLT5idWZfcHRyID0gc2tiX2ZyYWdfZG1hX21hcChtcC0+ZGV2LT5kZXYucGFyZW50LAorCQkJCQkJIHRoaXNfZnJhZywgMCwgZGVzYy0+Ynl0ZV9jbnQsCisJCQkJCQkgRE1BX1RPX0RFVklDRSk7CiAJfQogfQogCkBAIC05MzYsNiArOTQyLDcgQEAKIAlpZiAodHhxLT50eF9jdXJyX2Rlc2MgPT0gdHhxLT50eF9yaW5nX3NpemUpCiAJCXR4cS0+dHhfY3Vycl9kZXNjID0gMDsKIAlkZXNjID0gJnR4cS0+dHhfZGVzY19hcmVhW3R4X2luZGV4XTsKKwl0eHEtPnR4X2Rlc2NfbWFwcGluZ1t0eF9pbmRleF0gPSBERVNDX0RNQV9NQVBfU0lOR0xFOwogCiAJaWYgKG5yX2ZyYWdzKSB7CiAJCXR4cV9zdWJtaXRfZnJhZ19za2IodHhxLCBza2IpOwpAQCAtMTA0Nyw5ICsxMDU0LDEyIEBACiAJCWludCB0eF9pbmRleDsKIAkJc3RydWN0IHR4X2Rlc2MgKmRlc2M7CiAJCXUzMiBjbWRfc3RzOworCQljaGFyIGRlc2NfZG1hX21hcDsKIAogCQl0eF9pbmRleCA9IHR4cS0+dHhfdXNlZF9kZXNjOwogCQlkZXNjID0gJnR4cS0+dHhfZGVzY19hcmVhW3R4X2luZGV4XTsKKwkJZGVzY19kbWFfbWFwID0gdHhxLT50eF9kZXNjX21hcHBpbmdbdHhfaW5kZXhdOworCiAJCWNtZF9zdHMgPSBkZXNjLT5jbWRfc3RzOwogCiAJCWlmIChjbWRfc3RzICYgQlVGRkVSX09XTkVEX0JZX0RNQSkgewpAQCAtMTA2NSw5ICsxMDc1LDE5IEBACiAJCXJlY2xhaW1lZCsrOwogCQl0eHEtPnR4X2Rlc2NfY291bnQtLTsKIAotCQlpZiAoIUlTX1RTT19IRUFERVIodHhxLCBkZXNjLT5idWZfcHRyKSkKLQkJCWRtYV91bm1hcF9zaW5nbGUobXAtPmRldi0+ZGV2LnBhcmVudCwgZGVzYy0+YnVmX3B0ciwKLQkJCQkJIGRlc2MtPmJ5dGVfY250LCBETUFfVE9fREVWSUNFKTsKKwkJaWYgKCFJU19UU09fSEVBREVSKHR4cSwgZGVzYy0+YnVmX3B0cikpIHsKKworCQkJaWYgKGRlc2NfZG1hX21hcCA9PSBERVNDX0RNQV9NQVBfUEFHRSkKKwkJCQlkbWFfdW5tYXBfcGFnZShtcC0+ZGV2LT5kZXYucGFyZW50LAorCQkJCQkgICAgICAgZGVzYy0+YnVmX3B0ciwKKwkJCQkJICAgICAgIGRlc2MtPmJ5dGVfY250LAorCQkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisJCQllbHNlCisJCQkJZG1hX3VubWFwX3NpbmdsZShtcC0+ZGV2LT5kZXYucGFyZW50LAorCQkJCQkJIGRlc2MtPmJ1Zl9wdHIsCisJCQkJCQkgZGVzYy0+Ynl0ZV9jbnQsCisJCQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCX0KIAogCQlpZiAoY21kX3N0cyAmIFRYX0VOQUJMRV9JTlRFUlJVUFQpIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKCZ0eHEtPnR4X3NrYik7CkBAIC0xOTk2LDYgKzIwMTYsNyBAQAogCXN0cnVjdCB0eF9xdWV1ZSAqdHhxID0gbXAtPnR4cSArIGluZGV4OwogCXN0cnVjdCB0eF9kZXNjICp0eF9kZXNjOwogCWludCBzaXplOworCWludCByZXQ7CiAJaW50IGk7CiAKIAl0eHEtPmluZGV4ID0gaW5kZXg7CkBAIC0yMDQ4LDE4ICsyMDY5LDM0IEBACiAJCQkJCW5leHRpICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKTsKIAl9CiAKKwl0eHEtPnR4X2Rlc2NfbWFwcGluZyA9IGtjYWxsb2ModHhxLT50eF9yaW5nX3NpemUsIHNpemVvZihjaGFyKSwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCF0eHEtPnR4X2Rlc2NfbWFwcGluZykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2Rlc2NfYXJlYTsKKwl9CisKIAkvKiBBbGxvY2F0ZSBETUEgYnVmZmVycyBmb3IgVFNPIE1BQy9JUC9UQ1AgaGVhZGVycyAqLwogCXR4cS0+dHNvX2hkcnMgPSBkbWFfYWxsb2NfY29oZXJlbnQobXAtPmRldi0+ZGV2LnBhcmVudCwKIAkJCQkJICAgdHhxLT50eF9yaW5nX3NpemUgKiBUU09fSEVBREVSX1NJWkUsCiAJCQkJCSAgICZ0eHEtPnRzb19oZHJzX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHR4cS0+dHNvX2hkcnMgPT0gTlVMTCkgewotCQlkbWFfZnJlZV9jb2hlcmVudChtcC0+ZGV2LT5kZXYucGFyZW50LCB0eHEtPnR4X2Rlc2NfYXJlYV9zaXplLAotCQkJCSAgdHhxLT50eF9kZXNjX2FyZWEsIHR4cS0+dHhfZGVzY19kbWEpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9kZXNjX21hcHBpbmc7CiAJfQogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnR4cS0+dHhfc2tiKTsKIAogCXJldHVybiAwOworCitlcnJfZnJlZV9kZXNjX21hcHBpbmc6CisJa2ZyZWUodHhxLT50eF9kZXNjX21hcHBpbmcpOworZXJyX2ZyZWVfZGVzY19hcmVhOgorCWlmIChpbmRleCA9PSAwICYmIHNpemUgPD0gbXAtPnR4X2Rlc2Nfc3JhbV9zaXplKQorCQlpb3VubWFwKHR4cS0+dHhfZGVzY19hcmVhKTsKKwllbHNlCisJCWRtYV9mcmVlX2NvaGVyZW50KG1wLT5kZXYtPmRldi5wYXJlbnQsIHR4cS0+dHhfZGVzY19hcmVhX3NpemUsCisJCQkJICB0eHEtPnR4X2Rlc2NfYXJlYSwgdHhxLT50eF9kZXNjX2RtYSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgdHhxX2RlaW5pdChzdHJ1Y3QgdHhfcXVldWUgKnR4cSkKQEAgLTIwNzcsNiArMjExNCw4IEBACiAJZWxzZQogCQlkbWFfZnJlZV9jb2hlcmVudChtcC0+ZGV2LT5kZXYucGFyZW50LCB0eHEtPnR4X2Rlc2NfYXJlYV9zaXplLAogCQkJCSAgdHhxLT50eF9kZXNjX2FyZWEsIHR4cS0+dHhfZGVzY19kbWEpOworCWtmcmVlKHR4cS0+dHhfZGVzY19tYXBwaW5nKTsKKwogCWlmICh0eHEtPnRzb19oZHJzKQogCQlkbWFfZnJlZV9jb2hlcmVudChtcC0+ZGV2LT5kZXYucGFyZW50LAogCQkJCSAgdHhxLT50eF9yaW5nX3NpemUgKiBUU09fSEVBREVSX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9uZXRkZXYuYwppbmRleCAxOTBjYmQ5Li5hYzZhOGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fbmV0ZGV2LmMKQEAgLTQ3NSw3ICs0NzUsOCBAQAogewogCWludCBlcnI7CiAKLQlpZiAocHJpdi0+bWRldi0+ZGV2LT5jYXBzLnR1bm5lbF9vZmZsb2FkX21vZGUgIT0gTUxYNF9UVU5ORUxfT0ZGTE9BRF9NT0RFX1ZYTEFOKQorCWlmIChwcml2LT5tZGV2LT5kZXYtPmNhcHMudHVubmVsX29mZmxvYWRfbW9kZSAhPSBNTFg0X1RVTk5FTF9PRkZMT0FEX01PREVfVlhMQU4gfHwKKwkgICAgcHJpdi0+bWRldi0+ZGV2LT5jYXBzLmRtZnNfaGlnaF9zdGVlcl9tb2RlID09IE1MWDRfU1RFRVJJTkdfRE1GU19BMF9TVEFUSUMpCiAJCXJldHVybiAwOyAvKiBkbyBub3RoaW5nICovCiAKIAllcnIgPSBtbHg0X3R1bm5lbF9zdGVlcl9hZGQocHJpdi0+bWRldi0+ZGV2LCBhZGRyLCBwcml2LT5wb3J0LCBxcG4sCkBAIC0yMzY1LDkgKzIzNjYsMTEgQEAKIAlxdWV1ZV93b3JrKHByaXYtPm1kZXYtPndvcmtxdWV1ZSwgJnByaXYtPnZ4bGFuX2RlbF90YXNrKTsKIH0KIAotc3RhdGljIGJvb2wgbWx4NF9lbl9nc29fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBtbHg0X2VuX2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiB7Ci0JcmV0dXJuIHZ4bGFuX2dzb19jaGVjayhza2IpOworCXJldHVybiB2eGxhbl9mZWF0dXJlc19jaGVjayhza2IsIGZlYXR1cmVzKTsKIH0KICNlbmRpZgogCkBAIC0yNDAwLDcgKzI0MDMsNyBAQAogI2lmZGVmIENPTkZJR19NTFg0X0VOX1ZYTEFOCiAJLm5kb19hZGRfdnhsYW5fcG9ydAk9IG1seDRfZW5fYWRkX3Z4bGFuX3BvcnQsCiAJLm5kb19kZWxfdnhsYW5fcG9ydAk9IG1seDRfZW5fZGVsX3Z4bGFuX3BvcnQsCi0JLm5kb19nc29fY2hlY2sJCT0gbWx4NF9lbl9nc29fY2hlY2ssCisJLm5kb19mZWF0dXJlc19jaGVjawk9IG1seDRfZW5fZmVhdHVyZXNfY2hlY2ssCiAjZW5kaWYKIH07CiAKQEAgLTI0MzQsNyArMjQzNyw3IEBACiAjaWZkZWYgQ09ORklHX01MWDRfRU5fVlhMQU4KIAkubmRvX2FkZF92eGxhbl9wb3J0CT0gbWx4NF9lbl9hZGRfdnhsYW5fcG9ydCwKIAkubmRvX2RlbF92eGxhbl9wb3J0CT0gbWx4NF9lbl9kZWxfdnhsYW5fcG9ydCwKLQkubmRvX2dzb19jaGVjawkJPSBtbHg0X2VuX2dzb19jaGVjaywKKwkubmRvX2ZlYXR1cmVzX2NoZWNrCT0gbWx4NF9lbl9mZWF0dXJlc19jaGVjaywKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl90eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl90eC5jCmluZGV4IGEzMDhkNDEuLmUzMzU3YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fdHguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3R4LmMKQEAgLTk2Miw3ICs5NjIsMTcgQEAKIAkJdHhfZGVzYy0+Y3RybC5vd25lcl9vcGNvZGUgPSBvcF9vd247CiAJCWlmIChzZW5kX2Rvb3JiZWxsKSB7CiAJCQl3bWIoKTsKLQkJCWlvd3JpdGUzMihyaW5nLT5kb29yYmVsbF9xcG4sCisJCQkvKiBTaW5jZSB0aGVyZSBpcyBubyBpb3dyaXRlKl9uYXRpdmUoKSB0aGF0IHdyaXRlcyB0aGUKKwkJCSAqIHZhbHVlIGFzIGlzLCB3aXRob3V0IGJ5dGVzd2FwcGluZyAtIHVzaW5nIHRoZSBvbmUKKwkJCSAqIHRoZSBkb2Vzbid0IGRvIGJ5dGVzd2FwcGluZyBpbiB0aGUgcmVsZXZhbnQgYXJjaAorCQkJICogZW5kaWFubmVzcy4KKwkJCSAqLworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCQkJaW93cml0ZTMyKAorI2Vsc2UKKwkJCWlvd3JpdGUzMmJlKAorI2VuZGlmCisJCQkJICByaW5nLT5kb29yYmVsbF9xcG4sCiAJCQkJICByaW5nLT5iZi51YXItPm1hcCArIE1MWDRfU0VORF9ET09SQkVMTCk7CiAJCX0gZWxzZSB7CiAJCQlyaW5nLT54bWl0X21vcmUrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmMKaW5kZXggOTQzY2JkNC4uNmUwODM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmMKQEAgLTE3NDQsOCArMTc0NCw3IEBACiAJCQkJICAgICAgIHN0cnVjdCBtbHg0X2Rldl9jYXAgKmRldl9jYXApCiB7CiAJaWYgKGRldi0+Y2Fwcy5zdGVlcmluZ19tb2RlID09IE1MWDRfU1RFRVJJTkdfTU9ERV9ERVZJQ0VfTUFOQUdFRCAmJgotCSAgICBkZXZfY2FwLT5mbGFnczIgJiBNTFg0X0RFVl9DQVBfRkxBRzJfVlhMQU5fT0ZGTE9BRFMgJiYKLQkgICAgZGV2LT5jYXBzLmRtZnNfaGlnaF9zdGVlcl9tb2RlICE9IE1MWDRfU1RFRVJJTkdfRE1GU19BMF9TVEFUSUMpCisJICAgIGRldl9jYXAtPmZsYWdzMiAmIE1MWDRfREVWX0NBUF9GTEFHMl9WWExBTl9PRkZMT0FEUykKIAkJZGV2LT5jYXBzLnR1bm5lbF9vZmZsb2FkX21vZGUgPSBNTFg0X1RVTk5FTF9PRkZMT0FEX01PREVfVlhMQU47CiAJZWxzZQogCQlkZXYtPmNhcHMudHVubmVsX29mZmxvYWRfbW9kZSA9IE1MWDRfVFVOTkVMX09GRkxPQURfTU9ERV9OT05FOwpAQCAtMTgyOSw3ICsxODI4LDcgQEAKIAkJZXJyID0gbWx4NF9kZXZfY2FwKGRldiwgJmRldl9jYXApOwogCQlpZiAoZXJyKSB7CiAJCQltbHg0X2VycihkZXYsICJRVUVSWV9ERVZfQ0FQIGNvbW1hbmQgZmFpbGVkLCBhYm9ydGluZ1xuIik7Ci0JCQlnb3RvIGVycl9zdG9wX2Z3OworCQkJcmV0dXJuIGVycjsKIAkJfQogCiAJCWNob29zZV9zdGVlcmluZ19tb2RlKGRldiwgJmRldl9jYXApOwpAQCAtMTg2MCw3ICsxODU5LDcgQEAKIAkJCQkJICAgICAmaW5pdF9oY2EpOwogCQlpZiAoKGxvbmcgbG9uZykgaWNtX3NpemUgPCAwKSB7CiAJCQllcnIgPSBpY21fc2l6ZTsKLQkJCWdvdG8gZXJyX3N0b3BfZnc7CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKIAkJZGV2LT5jYXBzLm1heF9mbXJfbWFwcyA9ICgxIDw8ICgzMiAtIGlsb2cyKGRldi0+Y2Fwcy5udW1fbXB0cykpKSAtIDE7CkBAIC0xODc0LDcgKzE4NzMsNyBAQAogCiAJCWVyciA9IG1seDRfaW5pdF9pY20oZGV2LCAmZGV2X2NhcCwgJmluaXRfaGNhLCBpY21fc2l6ZSk7CiAJCWlmIChlcnIpCi0JCQlnb3RvIGVycl9zdG9wX2Z3OworCQkJcmV0dXJuIGVycjsKIAogCQllcnIgPSBtbHg0X0lOSVRfSENBKGRldiwgJmluaXRfaGNhKTsKIAkJaWYgKGVycikgewpAQCAtMTg4Niw3ICsxODg1LDcgQEAKIAkJCWVyciA9IG1seDRfcXVlcnlfZnVuYyhkZXYsICZkZXZfY2FwKTsKIAkJCWlmIChlcnIgPCAwKSB7CiAJCQkJbWx4NF9lcnIoZGV2LCAiUVVFUllfRlVOQyBjb21tYW5kIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKLQkJCQlnb3RvIGVycl9zdG9wX2Z3OworCQkJCWdvdG8gZXJyX2Nsb3NlOwogCQkJfSBlbHNlIGlmIChlcnIgJiBNTFg0X1FVRVJZX0ZVTkNfTlVNX1NZU19FUVMpIHsKIAkJCQlkZXYtPmNhcHMubnVtX2VxcyA9IGRldl9jYXAubWF4X2VxczsKIAkJCQlkZXYtPmNhcHMucmVzZXJ2ZWRfZXFzID0gZGV2X2NhcC5yZXNlcnZlZF9lcXM7CkBAIC0yMDA2LDExICsyMDA1LDYgQEAKIAlpZiAoIW1seDRfaXNfc2xhdmUoZGV2KSkKIAkJbWx4NF9mcmVlX2ljbXMoZGV2KTsKIAotZXJyX3N0b3BfZnc6Ci0JaWYgKCFtbHg0X2lzX3NsYXZlKGRldikpIHsKLQkJbWx4NF9VTk1BUF9GQShkZXYpOwotCQltbHg0X2ZyZWVfaWNtKGRldiwgcHJpdi0+ZncuZndfaWNtLCAwKTsKLQl9CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tci5jCmluZGV4IGQ2ZjU0OTYuLjcwOTRhOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbXIuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21yLmMKQEAgLTU4NCw2ICs1ODQsNyBAQAogdm9pZCBtbHg0X21yX3JlcmVnX21lbV9jbGVhbnVwKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9tciAqbXIpCiB7CiAJbWx4NF9tdHRfY2xlYW51cChkZXYsICZtci0+bXR0KTsKKwltci0+bXR0Lm9yZGVyID0gLTE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtbHg0X21yX3JlcmVnX21lbV9jbGVhbnVwKTsKIApAQCAtNTkzLDE0ICs1OTQsMTQgQEAKIHsKIAlpbnQgZXJyOwogCi0JbXB0X2VudHJ5LT5zdGFydCAgICAgICA9IGNwdV90b19iZTY0KGlvdmEpOwotCW1wdF9lbnRyeS0+bGVuZ3RoICAgICAgPSBjcHVfdG9fYmU2NChzaXplKTsKLQltcHRfZW50cnktPmVudGl0eV9zaXplID0gY3B1X3RvX2JlMzIocGFnZV9zaGlmdCk7Ci0KIAllcnIgPSBtbHg0X210dF9pbml0KGRldiwgbnBhZ2VzLCBwYWdlX3NoaWZ0LCAmbXItPm10dCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCW1wdF9lbnRyeS0+c3RhcnQgICAgICAgPSBjcHVfdG9fYmU2NChtci0+aW92YSk7CisJbXB0X2VudHJ5LT5sZW5ndGggICAgICA9IGNwdV90b19iZTY0KG1yLT5zaXplKTsKKwltcHRfZW50cnktPmVudGl0eV9zaXplID0gY3B1X3RvX2JlMzIobXItPm10dC5wYWdlX3NoaWZ0KTsKKwogCW1wdF9lbnRyeS0+cGRfZmxhZ3MgJj0gY3B1X3RvX2JlMzIoTUxYNF9NUFRfUERfTUFTSyB8CiAJCQkJCSAgIE1MWDRfTVBUX1BEX0ZMQUdfRU5fSU5WKTsKIAltcHRfZW50cnktPmZsYWdzICAgICY9IGNwdV90b19iZTMyKE1MWDRfTVBUX0ZMQUdfRlJFRSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3N6ODg0eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzejg4NHguYwppbmRleCBmMWViZWQ2Yy4uMmZhNmFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzejg4NHguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3N6ODg0eC5jCkBAIC0yMzAzLDEyICsyMzAzLDYgQEAKIAogLyogU3Bhbm5pbmcgVHJlZSAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfZGlzX2xlYXJuKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHNldCkKLXsKLQlwb3J0X2NmZyhodywgcCwKLQkJS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVCwgUE9SVF9MRUFSTl9ESVNBQkxFLCBzZXQpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfcngoc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQogewogCXBvcnRfY2ZnKGh3LCBwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXlyaWNvbS9teXJpMTBnZS9teXJpMTBnZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXlyaWNvbS9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IGFmMDk5MDUuLjcxYWY5OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L215cmljb20vbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9teXJpY29tL215cmkxMGdlL215cmkxMGdlLmMKQEAgLTQwMzMsOCArNDAzMywxMCBAQAogCSh2b2lkKXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKTsKIAltZ3AtPmNtZCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2YoKm1ncC0+Y21kKSwKIAkJCQkgICAgICAmbWdwLT5jbWRfYnVzLCBHRlBfS0VSTkVMKTsKLQlpZiAobWdwLT5jbWQgPT0gTlVMTCkKKwlpZiAoIW1ncC0+Y21kKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CiAJCWdvdG8gYWJvcnRfd2l0aF9lbmFibGVkOworCX0KIAogCW1ncC0+Ym9hcmRfc3BhbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CiAJbWdwLT5pb21lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0ZXJpb24vczJpby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0ZXJpb24vczJpby5jCmluZGV4IGY1ZTRiODIuLmRiMGM3YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldGVyaW9uL3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRlcmlvbi9zMmlvLmMKQEAgLTY5ODcsNyArNjk4Nyw5IEBACiAJCQlpZiAoc3AtPnMyaW9fZW50cmllc1tpXS5pbl91c2UgPT0gTVNJWF9GTEcpIHsKIAkJCQlpZiAoc3AtPnMyaW9fZW50cmllc1tpXS50eXBlID09CiAJCQkJICAgIE1TSVhfUklOR19UWVBFKSB7Ci0JCQkJCXNwcmludGYoc3AtPmRlc2NbaV0sICIlczpNU0ktWC0lZC1SWCIsCisJCQkJCXNucHJpbnRmKHNwLT5kZXNjW2ldLAorCQkJCQkJc2l6ZW9mKHNwLT5kZXNjW2ldKSwKKwkJCQkJCSIlczpNU0ktWC0lZC1SWCIsCiAJCQkJCQlkZXYtPm5hbWUsIGkpOwogCQkJCQllcnIgPSByZXF1ZXN0X2lycShzcC0+ZW50cmllc1tpXS52ZWN0b3IsCiAJCQkJCQkJICBzMmlvX21zaXhfcmluZ19oYW5kbGUsCkBAIC02OTk2LDcgKzY5OTgsOSBAQAogCQkJCQkJCSAgc3AtPnMyaW9fZW50cmllc1tpXS5hcmcpOwogCQkJCX0gZWxzZSBpZiAoc3AtPnMyaW9fZW50cmllc1tpXS50eXBlID09CiAJCQkJCSAgIE1TSVhfQUxBUk1fVFlQRSkgewotCQkJCQlzcHJpbnRmKHNwLT5kZXNjW2ldLCAiJXM6TVNJLVgtJWQtVFgiLAorCQkJCQlzbnByaW50ZihzcC0+ZGVzY1tpXSwKKwkJCQkJCXNpemVvZihzcC0+ZGVzY1tpXSksCisJCQkJCQkiJXM6TVNJLVgtJWQtVFgiLAogCQkJCQkJZGV2LT5uYW1lLCBpKTsKIAkJCQkJZXJyID0gcmVxdWVzdF9pcnEoc3AtPmVudHJpZXNbaV0udmVjdG9yLAogCQkJCQkJCSAgczJpb19tc2l4X2ZpZm9faGFuZGxlLApAQCAtODE1NCw3ICs4MTU4LDggQEAKIAkJCSAgIiVzOiBVRFAgRnJhZ21lbnRhdGlvbiBPZmZsb2FkKFVGTykgZW5hYmxlZFxuIiwKIAkJCSAgZGV2LT5uYW1lKTsKIAkvKiBJbml0aWFsaXplIGRldmljZSBuYW1lICovCi0Jc3ByaW50ZihzcC0+bmFtZSwgIiVzIE5ldGVyaW9uICVzIiwgZGV2LT5uYW1lLCBzcC0+cHJvZHVjdF9uYW1lKTsKKwlzbnByaW50ZihzcC0+bmFtZSwgc2l6ZW9mKHNwLT5uYW1lKSwgIiVzIE5ldGVyaW9uICVzIiwgZGV2LT5uYW1lLAorCQkgc3AtPnByb2R1Y3RfbmFtZSk7CiAKIAlpZiAodmxhbl90YWdfc3RyaXApCiAJCXNwLT52bGFuX3N0cmlwX2ZsYWcgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggNjEzMDM3NS4uYzUzMWM4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0yMzg4LDcgKzIzODgsMTAgQEAKIAogCXdvcmtfZG9uZSA9IG5ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKHNkc19yaW5nLCBidWRnZXQpOwogCi0JaWYgKCh3b3JrX2RvbmUgPCBidWRnZXQpICYmIHR4X2NvbXBsZXRlKSB7CisJaWYgKCF0eF9jb21wbGV0ZSkKKwkJd29ya19kb25lID0gYnVkZ2V0OworCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogCQluYXBpX2NvbXBsZXRlKCZzZHNfcmluZy0+bmFwaSk7CiAJCWlmICh0ZXN0X2JpdChfX05YX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCW5ldHhlbl9uaWNfZW5hYmxlX2ludChzZHNfcmluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsYTN4eHguYwppbmRleCBjMmYwOWFmLi40ODQ3NzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGEzeHh4LmMKQEAgLTE0NiwxMCArMTQ2LDcgQEAKIHsKIAlpbnQgaSA9IDA7CiAKLQl3aGlsZSAoaSA8IDEwKSB7Ci0JCWlmIChpKQotCQkJc3NsZWVwKDEpOwotCisJZG8gewogCQlpZiAocWxfc2VtX2xvY2socWRldiwKIAkJCQlRTF9EUlZSX1NFTV9NQVNLLAogCQkJCShRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSB8IChxZGV2LT5tYWNfaW5kZXgpCkBAIC0xNTgsNyArMTU1LDggQEAKIAkJCQkgICAgICAiZHJpdmVyIGxvY2sgYWNxdWlyZWRcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KLQl9CisJCXNzbGVlcCgxKTsKKwl9IHdoaWxlICgrK2kgPCAxMCk7CiAKIAluZXRkZXZfZXJyKHFkZXYtPm5kZXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgZHJpdmVyIGxvY2suLi5cbiIpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jCmluZGV4IDFhYTI1YjEuLjI1MjhjM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMKQEAgLTUwNSw5ICs1MDUsMTEgQEAKIAlhZGFwdGVyLT5mbGFncyB8PSBRTENOSUNfREVMX1ZYTEFOX1BPUlQ7CiB9CiAKLXN0YXRpYyBib29sIHFsY25pY19nc29fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBxbGNuaWNfZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIHsKLQlyZXR1cm4gdnhsYW5fZ3NvX2NoZWNrKHNrYik7CisJcmV0dXJuIHZ4bGFuX2ZlYXR1cmVzX2NoZWNrKHNrYiwgZmVhdHVyZXMpOwogfQogI2VuZGlmCiAKQEAgLTUzMiw3ICs1MzQsNyBAQAogI2lmZGVmIENPTkZJR19RTENOSUNfVlhMQU4KIAkubmRvX2FkZF92eGxhbl9wb3J0CT0gcWxjbmljX2FkZF92eGxhbl9wb3J0LAogCS5uZG9fZGVsX3Z4bGFuX3BvcnQJPSBxbGNuaWNfZGVsX3Z4bGFuX3BvcnQsCi0JLm5kb19nc29fY2hlY2sJCT0gcWxjbmljX2dzb19jaGVjaywKKwkubmRvX2ZlYXR1cmVzX2NoZWNrCT0gcWxjbmljX2ZlYXR1cmVzX2NoZWNrLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciA9IHFsY25pY19wb2xsX2NvbnRyb2xsZXIsCkBAIC0yNjAzLDYgKzI2MDUsNyBAQAogCX0gZWxzZSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSIlczogZmFpbGVkLiBQbGVhc2UgUmVib290XG4iLCBfX2Z1bmNfXyk7CisJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9mcmVlX2h3OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYwppbmRleCA2ZDBiOWRmLi43OGJiNGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYwpAQCAtNzg3LDEwICs3ODcsMTAgQEAKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dDsKIAorCWRpc2FibGVfZGV2X29uX2VyciA9IDE7CiAJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zIChwZGV2LCBEUlZfTkFNRSk7CiAJaWYgKHJjKQogCQlnb3RvIGVycl9vdXQ7Ci0JZGlzYWJsZV9kZXZfb25fZXJyID0gMTsKIAogCXBjaV9zZXRfbWFzdGVyIChwZGV2KTsKIApAQCAtMTExMCw2ICsxMTEwLDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyX291dDoKKwluZXRpZl9uYXBpX2RlbCgmdHAtPm5hcGkpOwogCV9fcnRsODEzOV9jbGVhbnVwX2RldiAoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UgKHBkZXYpOwogCXJldHVybiBpOwpAQCAtMTEyNCw2ICsxMTI1LDcgQEAKIAlhc3NlcnQgKGRldiAhPSBOVUxMKTsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdHAtPnRocmVhZCk7CisJbmV0aWZfbmFwaV9kZWwoJnRwLT5uYXBpKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYwppbmRleCBjMjliYTgwLi4wNDI4M2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMKQEAgLTM5Niw2ICszOTYsOSBAQAogCVtUU1VfQURSTDMxXQk9IDB4MDFmYywKIH07CiAKK3N0YXRpYyB2b2lkIHNoX2V0aF9yY3Zfc25kX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzaF9ldGhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKKwogc3RhdGljIGJvb2wgc2hfZXRoX2lzX2dldGhlcihzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCkKIHsKIAlyZXR1cm4gbWRwLT5yZWdfb2Zmc2V0ID09IHNoX2V0aF9vZmZzZXRfZ2lnYWJpdDsKQEAgLTQ3Myw2ICs0NzYsNyBAQAogCS5lZXNyX2Vycl9jaGVjawk9IEVFU1JfVFdCIHwgRUVTUl9UQUJUIHwgRUVTUl9SQUJUIHwgRUVTUl9SRkUgfAogCQkJICBFRVNSX1JERSB8IEVFU1JfUkZSTUVSIHwgRUVTUl9URkUgfCBFRVNSX1RERSB8CiAJCQkgIEVFU1JfRUNJLAorCS5mZHJfdmFsdWUJPSAweDAwMDAwZjBmLAogCiAJLmFwcgkJPSAxLAogCS5tcHIJCT0gMSwKQEAgLTQ5NSw2ICs0OTksOSBAQAogCS5lZXNyX2Vycl9jaGVjawk9IEVFU1JfVFdCIHwgRUVTUl9UQUJUIHwgRUVTUl9SQUJUIHwgRUVTUl9SRkUgfAogCQkJICBFRVNSX1JERSB8IEVFU1JfUkZSTUVSIHwgRUVTUl9URkUgfCBFRVNSX1RERSB8CiAJCQkgIEVFU1JfRUNJLAorCS5mZHJfdmFsdWUJPSAweDAwMDAwZjBmLAorCisJLnRyc2Nlcl9lcnJfbWFzayA9IERFU0NfSV9SSU5UOCwKIAogCS5hcHIJCT0gMSwKIAkubXByCQk9IDEsCkBAIC04NTYsNiArODYzLDkgQEAKIAogCWlmICghY2QtPmVlc3JfZXJyX2NoZWNrKQogCQljZC0+ZWVzcl9lcnJfY2hlY2sgPSBERUZBVUxUX0VFU1JfRVJSX0NIRUNLOworCisJaWYgKCFjZC0+dHJzY2VyX2Vycl9tYXNrKQorCQljZC0+dHJzY2VyX2Vycl9tYXNrID0gREVGQVVMVF9UUlNDRVJfRVJSX01BU0s7CiB9CiAKIHN0YXRpYyBpbnQgc2hfZXRoX2NoZWNrX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQpAQCAtMTExMyw2ICsxMTIzLDcgQEAKIAlpbnQgcnhfcmluZ3NpemUgPSBzaXplb2YoKnJ4ZGVzYykgKiBtZHAtPm51bV9yeF9yaW5nOwogCWludCB0eF9yaW5nc2l6ZSA9IHNpemVvZigqdHhkZXNjKSAqIG1kcC0+bnVtX3R4X3Jpbmc7CiAJaW50IHNrYnVmZl9zaXplID0gbWRwLT5yeF9idWZfc3ogKyBTSF9FVEhfUlhfQUxJR04gLSAxOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAKIAltZHAtPmN1cl9yeCA9IDA7CiAJbWRwLT5jdXJfdHggPSAwOwpAQCAtMTEyNiw3ICsxMTM3LDYgQEAKIAkJLyogc2tiICovCiAJCW1kcC0+cnhfc2tidWZmW2ldID0gTlVMTDsKIAkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZGV2LCBza2J1ZmZfc2l6ZSk7Ci0JCW1kcC0+cnhfc2tidWZmW2ldID0gc2tiOwogCQlpZiAoc2tiID09IE5VTEwpCiAJCQlicmVhazsKIAkJc2hfZXRoX3NldF9yZWNlaXZlX2FsaWduKHNrYik7CkBAIC0xMTM1LDkgKzExNDUsMTUgQEAKIAkJcnhkZXNjID0gJm1kcC0+cnhfcmluZ1tpXTsKIAkJLyogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBhIG11bHRpcGxlIG9mIDE2IGJ5dGVzLiAqLwogCQlyeGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBBTElHTihtZHAtPnJ4X2J1Zl9zeiwgMTYpOwotCQlkbWFfbWFwX3NpbmdsZSgmbmRldi0+ZGV2LCBza2ItPmRhdGEsIHJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCwKLQkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOwotCQlyeGRlc2MtPmFkZHIgPSB2aXJ0X3RvX3BoeXMoc2tiLT5kYXRhKTsKKwkJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmbmRldi0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCSAgcnhkZXNjLT5idWZmZXJfbGVuZ3RoLAorCQkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmbmRldi0+ZGV2LCBkbWFfYWRkcikpIHsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJYnJlYWs7CisJCX0KKwkJbWRwLT5yeF9za2J1ZmZbaV0gPSBza2I7CisJCXJ4ZGVzYy0+YWRkciA9IGRtYV9hZGRyOwogCQlyeGRlc2MtPnN0YXR1cyA9IGNwdV90b19lZG1hYyhtZHAsIFJEX1JBQ1QgfCBSRF9SRlApOwogCiAJCS8qIFJ4IGRlc2NyaXB0b3IgYWRkcmVzcyBzZXQgKi8KQEAgLTEyOTQsNyArMTMxMCw3IEBACiAJLyogRnJhbWUgcmVjdiBjb250cm9sIChlbmFibGUgbXVsdGlwbGUtcGFja2V0cyBwZXIgcnggaXJxKSAqLwogCXNoX2V0aF93cml0ZShuZGV2LCBSTUNSX1JOQywgUk1DUik7CiAKLQlzaF9ldGhfd3JpdGUobmRldiwgREVTQ19JX1JJTlQ4IHwgREVTQ19JX1JJTlQ1IHwgREVTQ19JX1RJTlQyLCBUUlNDRVIpOworCXNoX2V0aF93cml0ZShuZGV2LCBtZHAtPmNkLT50cnNjZXJfZXJyX21hc2ssIFRSU0NFUik7CiAKIAlpZiAobWRwLT5jZC0+YmN1bHIpCiAJCXNoX2V0aF93cml0ZShuZGV2LCAweDgwMCwgQkNVTFIpOwkvKiBCdXJzdCBzeWNsZSBzZXQgKi8KQEAgLTEzMDksOCArMTMyNSwxMCBAQAogCQkgICAgIFJGTFIpOwogCiAJc2hfZXRoX3dyaXRlKG5kZXYsIHNoX2V0aF9yZWFkKG5kZXYsIEVFU1IpLCBFRVNSKTsKLQlpZiAoc3RhcnQpCisJaWYgKHN0YXJ0KSB7CisJCW1kcC0+aXJxX2VuYWJsZWQgPSB0cnVlOwogCQlzaF9ldGhfd3JpdGUobmRldiwgbWRwLT5jZC0+ZWVzaXByX3ZhbHVlLCBFRVNJUFIpOworCX0KIAogCS8qIFBBVVNFIFByb2hpYml0aW9uICovCiAJdmFsID0gKHNoX2V0aF9yZWFkKG5kZXYsIEVDTVIpICYgRUNNUl9ETSkgfApAQCAtMTM0OSw2ICsxMzY3LDMzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgc2hfZXRoX2Rldl9leGl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CisJaW50IGk7CisKKwkvKiBEZWFjdGl2YXRlIGFsbCBUWCBkZXNjcmlwdG9ycywgc28gRE1BIHNob3VsZCBzdG9wIGF0IG5leHQKKwkgKiBwYWNrZXQgYm91bmRhcnkgaWYgaXQncyBjdXJyZW50bHkgcnVubmluZworCSAqLworCWZvciAoaSA9IDA7IGkgPCBtZHAtPm51bV90eF9yaW5nOyBpKyspCisJCW1kcC0+dHhfcmluZ1tpXS5zdGF0dXMgJj0gfmNwdV90b19lZG1hYyhtZHAsIFREX1RBQ1QpOworCisJLyogRGlzYWJsZSBUWCBGSUZPIGVncmVzcyB0byBNQUMgKi8KKwlzaF9ldGhfcmN2X3NuZF9kaXNhYmxlKG5kZXYpOworCisJLyogU3RvcCBSWCBETUEgYXQgbmV4dCBwYWNrZXQgYm91bmRhcnkgKi8KKwlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURSUlIpOworCisJLyogQXNpZGUgZnJvbSBUWCBETUEsIHdlIGNhbid0IHRlbGwgd2hlbiB0aGUgaGFyZHdhcmUgaXMKKwkgKiByZWFsbHkgc3RvcHBlZCwgc28gd2UgbmVlZCB0byByZXNldCB0byBtYWtlIHN1cmUuCisJICogQmVmb3JlIGRvaW5nIHRoYXQsIHdhaXQgZm9yIGxvbmcgZW5vdWdoIHRvICpwcm9iYWJseSoKKwkgKiBmaW5pc2ggdHJhbnNtaXR0aW5nIHRoZSBsYXN0IHBhY2tldCBhbmQgcG9sbCBzdGF0cy4KKwkgKi8KKwltc2xlZXAoMik7IC8qIG1heCBmcmFtZSB0aW1lIGF0IDEwIE1icHMgPCAxMjUwIHVzICovCisJc2hfZXRoX2dldF9zdGF0cyhuZGV2KTsKKwlzaF9ldGhfcmVzZXQobmRldik7Cit9CisKIC8qIGZyZWUgVHggc2tiIGZ1bmN0aW9uICovCiBzdGF0aWMgaW50IHNoX2V0aF90eGZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CkBAIC0xMzkzLDYgKzE0MzgsNyBAQAogCXUxNiBwa3RfbGVuID0gMDsKIAl1MzIgZGVzY19zdGF0dXM7CiAJaW50IHNrYnVmZl9zaXplID0gbWRwLT5yeF9idWZfc3ogKyBTSF9FVEhfUlhfQUxJR04gLSAxOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAKIAlib2d1c2NudCA9IG1pbihib2d1c2NudCwgKnF1b3RhKTsKIAlsaW1pdCA9IGJvZ3VzY250OwpAQCAtMTQ0MCw5ICsxNDg2LDkgQEAKIAkJCW1kcC0+cnhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CiAJCQlpZiAobWRwLT5jZC0+cnBhZGlyKQogCQkJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKLQkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZuZGV2LT5kZXYsIHJ4ZGVzYy0+YWRkciwKLQkJCQkJCUFMSUdOKG1kcC0+cnhfYnVmX3N6LCAxNiksCi0JCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQkJZG1hX3VubWFwX3NpbmdsZSgmbmRldi0+ZGV2LCByeGRlc2MtPmFkZHIsCisJCQkJCSBBTElHTihtZHAtPnJ4X2J1Zl9zeiwgMTYpLAorCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKIAkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpOwogCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKQEAgLTE0NjIsMTUgKzE1MDgsMjAgQEAKIAogCQlpZiAobWRwLT5yeF9za2J1ZmZbZW50cnldID09IE5VTEwpIHsKIAkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmRldiwgc2tidWZmX3NpemUpOwotCQkJbWRwLT5yeF9za2J1ZmZbZW50cnldID0gc2tiOwogCQkJaWYgKHNrYiA9PSBOVUxMKQogCQkJCWJyZWFrOwkvKiBCZXR0ZXIgbHVjayBuZXh0IHJvdW5kLiAqLwogCQkJc2hfZXRoX3NldF9yZWNlaXZlX2FsaWduKHNrYik7Ci0JCQlkbWFfbWFwX3NpbmdsZSgmbmRldi0+ZGV2LCBza2ItPmRhdGEsCi0JCQkJICAgICAgIHJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKwkJCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoJm5kZXYtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkJICByeGRlc2MtPmJ1ZmZlcl9sZW5ndGgsCisJCQkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJm5kZXYtPmRldiwgZG1hX2FkZHIpKSB7CisJCQkJa2ZyZWVfc2tiKHNrYik7CisJCQkJYnJlYWs7CisJCQl9CisJCQltZHAtPnJ4X3NrYnVmZltlbnRyeV0gPSBza2I7CiAKIAkJCXNrYl9jaGVja3N1bV9ub25lX2Fzc2VydChza2IpOwotCQkJcnhkZXNjLT5hZGRyID0gdmlydF90b19waHlzKHNrYi0+ZGF0YSk7CisJCQlyeGRlc2MtPmFkZHIgPSBkbWFfYWRkcjsKIAkJfQogCQlpZiAoZW50cnkgPj0gbWRwLT5udW1fcnhfcmluZyAtIDEpCiAJCQlyeGRlc2MtPnN0YXR1cyB8PQpAQCAtMTU2Niw3ICsxNjE3LDYgQEAKIAkJaWYgKGludHJfc3RhdHVzICYgRUVTUl9SRlJNRVIpIHsKIAkJCS8qIFJlY2VpdmUgRnJhbWUgT3ZlcmZsb3cgaW50ICovCiAJCQluZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKLQkJCW5ldGlmX2VycihtZHAsIHJ4X2VyciwgbmRldiwgIlJlY2VpdmUgQWJvcnRcbiIpOwogCQl9CiAJfQogCkBAIC0xNTg1LDEzICsxNjM1LDExIEBACiAJaWYgKGludHJfc3RhdHVzICYgRUVTUl9SREUpIHsKIAkJLyogUmVjZWl2ZSBEZXNjcmlwdG9yIEVtcHR5IGludCAqLwogCQluZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQluZXRpZl9lcnIobWRwLCByeF9lcnIsIG5kZXYsICJSZWNlaXZlIERlc2NyaXB0b3IgRW1wdHlcbiIpOwogCX0KIAogCWlmIChpbnRyX3N0YXR1cyAmIEVFU1JfUkZFKSB7CiAJCS8qIFJlY2VpdmUgRklGTyBPdmVyZmxvdyBpbnQgKi8KIAkJbmRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKLQkJbmV0aWZfZXJyKG1kcCwgcnhfZXJyLCBuZGV2LCAiUmVjZWl2ZSBGSUZPIE92ZXJmbG93XG4iKTsKIAl9CiAKIAlpZiAoIW1kcC0+Y2QtPm5vX2FkZSAmJiAoaW50cl9zdGF0dXMgJiBFRVNSX0FERSkpIHsKQEAgLTE2NDYsNyArMTY5NCwxMiBAQAogCWlmIChpbnRyX3N0YXR1cyAmIChFRVNSX1JYX0NIRUNLIHwgY2QtPnR4X2NoZWNrIHwgY2QtPmVlc3JfZXJyX2NoZWNrKSkKIAkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJZWxzZQotCQlnb3RvIG90aGVyX2lycTsKKwkJZ290byBvdXQ7CisKKwlpZiAoIWxpa2VseShtZHAtPmlycV9lbmFibGVkKSkgeworCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRUVTSVBSKTsKKwkJZ290byBvdXQ7CisJfQogCiAJaWYgKGludHJfc3RhdHVzICYgRUVTUl9SWF9DSEVDSykgewogCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZtZHAtPm5hcGkpKSB7CkBAIC0xNjc3LDcgKzE3MzAsNyBAQAogCQlzaF9ldGhfZXJyb3IobmRldiwgaW50cl9zdGF0dXMpOwogCX0KIAotb3RoZXJfaXJxOgorb3V0OgogCXNwaW5fdW5sb2NrKCZtZHAtPmxvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTE3MDUsNyArMTc1OCw4IEBACiAJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogCS8qIFJlZW5hYmxlIFJ4IGludGVycnVwdHMgKi8KLQlzaF9ldGhfd3JpdGUobmRldiwgbWRwLT5jZC0+ZWVzaXByX3ZhbHVlLCBFRVNJUFIpOworCWlmIChtZHAtPmlycV9lbmFibGVkKQorCQlzaF9ldGhfd3JpdGUobmRldiwgbWRwLT5jZC0+ZWVzaXByX3ZhbHVlLCBFRVNJUFIpOwogb3V0OgogCXJldHVybiBidWRnZXQgLSBxdW90YTsKIH0KQEAgLTE4MjAsNiArMTg3NCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCisJaWYgKCFtZHAtPnBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWRwLT5sb2NrLCBmbGFncyk7CiAJcmV0ID0gcGh5X2V0aHRvb2xfZ3NldChtZHAtPnBoeWRldiwgZWNtZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRwLT5sb2NrLCBmbGFncyk7CkBAIC0xODM0LDYgKzE4OTEsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAorCWlmICghbWRwLT5waHlkZXYpCisJCXJldHVybiAtRU5PREVWOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1kcC0+bG9jaywgZmxhZ3MpOwogCiAJLyogZGlzYWJsZSB0eCBhbmQgcnggKi8KQEAgLTE4NjgsNiArMTkyOCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCisJaWYgKCFtZHAtPnBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWRwLT5sb2NrLCBmbGFncyk7CiAJcmV0ID0gcGh5X3N0YXJ0X2FuZWcobWRwLT5waHlkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kcC0+bG9jaywgZmxhZ3MpOwpAQCAtMTk1Miw0MCArMjAxNSw1MCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CiAJCW5ldGlmX3R4X2Rpc2FibGUobmRldik7Ci0JCS8qIERpc2FibGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCi0JCXNoX2V0aF93cml0ZShuZGV2LCAweDAwMDAsIEVFU0lQUik7Ci0JCS8qIFN0b3AgdGhlIGNoaXAncyBUeCBhbmQgUnggcHJvY2Vzc2VzLiAqLwotCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURUUlIpOwotCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURSUlIpOwotCQlzeW5jaHJvbml6ZV9pcnEobmRldi0+aXJxKTsKLQl9CiAKLQkvKiBGcmVlIGFsbCB0aGUgc2tidWZmcyBpbiB0aGUgUnggcXVldWUuICovCi0Jc2hfZXRoX3JpbmdfZnJlZShuZGV2KTsKLQkvKiBGcmVlIERNQSBidWZmZXIgKi8KLQlzaF9ldGhfZnJlZV9kbWFfYnVmZmVyKG1kcCk7CisJCS8qIFNlcmlhbGlzZSB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgTkFQSSwgdGhlbgorCQkgKiBkaXNhYmxlIGludGVycnVwdHMuICBXZSBoYXZlIHRvIGNsZWFyIHRoZQorCQkgKiBpcnFfZW5hYmxlZCBmbGFnIGZpcnN0IHRvIGVuc3VyZSB0aGF0IGludGVycnVwdHMKKwkJICogd29uJ3QgYmUgcmUtZW5hYmxlZC4KKwkJICovCisJCW1kcC0+aXJxX2VuYWJsZWQgPSBmYWxzZTsKKwkJc3luY2hyb25pemVfaXJxKG5kZXYtPmlycSk7CisJCW5hcGlfc3luY2hyb25pemUoJm1kcC0+bmFwaSk7CisJCXNoX2V0aF93cml0ZShuZGV2LCAweDAwMDAsIEVFU0lQUik7CisKKwkJc2hfZXRoX2Rldl9leGl0KG5kZXYpOworCisJCS8qIEZyZWUgYWxsIHRoZSBza2J1ZmZzIGluIHRoZSBSeCBxdWV1ZS4gKi8KKwkJc2hfZXRoX3JpbmdfZnJlZShuZGV2KTsKKwkJLyogRnJlZSBETUEgYnVmZmVyICovCisJCXNoX2V0aF9mcmVlX2RtYV9idWZmZXIobWRwKTsKKwl9CiAKIAkvKiBTZXQgbmV3IHBhcmFtZXRlcnMgKi8KIAltZHAtPm51bV9yeF9yaW5nID0gcmluZy0+cnhfcGVuZGluZzsKIAltZHAtPm51bV90eF9yaW5nID0gcmluZy0+dHhfcGVuZGluZzsKIAotCXJldCA9IHNoX2V0aF9yaW5nX2luaXQobmRldik7Ci0JaWYgKHJldCA8IDApIHsKLQkJbmV0ZGV2X2VycihuZGV2LCAiJXM6IHNoX2V0aF9yaW5nX2luaXQgZmFpbGVkLlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXQgPSBzaF9ldGhfZGV2X2luaXQobmRldiwgZmFsc2UpOwotCWlmIChyZXQgPCAwKSB7Ci0JCW5ldGRldl9lcnIobmRldiwgIiVzOiBzaF9ldGhfZGV2X2luaXQgZmFpbGVkLlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0OwotCX0KLQogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCXJldCA9IHNoX2V0aF9yaW5nX2luaXQobmRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQluZXRkZXZfZXJyKG5kZXYsICIlczogc2hfZXRoX3JpbmdfaW5pdCBmYWlsZWQuXG4iLAorCQkJCSAgIF9fZnVuY19fKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0ID0gc2hfZXRoX2Rldl9pbml0KG5kZXYsIGZhbHNlKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW5ldGRldl9lcnIobmRldiwgIiVzOiBzaF9ldGhfZGV2X2luaXQgZmFpbGVkLlxuIiwKKwkJCQkgICBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJbWRwLT5pcnFfZW5hYmxlZCA9IHRydWU7CiAJCXNoX2V0aF93cml0ZShuZGV2LCBtZHAtPmNkLT5lZXNpcHJfdmFsdWUsIEVFU0lQUik7CiAJCS8qIFNldHRpbmcgdGhlIFJ4IG1vZGUgd2lsbCBzdGFydCB0aGUgUnggcHJvY2Vzcy4gKi8KIAkJc2hfZXRoX3dyaXRlKG5kZXYsIEVEUlJSX1IsIEVEUlJSKTsKLQkJbmV0aWZfd2FrZV9xdWV1ZShuZGV2KTsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIxMDEsNiArMjE3NCw5IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kcC0+bG9jaywgZmxhZ3MpOwogCisJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwogCWVudHJ5ID0gbWRwLT5jdXJfdHggJSBtZHAtPm51bV90eF9yaW5nOwogCW1kcC0+dHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKIAl0eGRlc2MgPSAmbWRwLT50eF9yaW5nW2VudHJ5XTsKQEAgLTIxMTAsMTAgKzIxODYsMTEgQEAKIAkJCQkgc2tiLT5sZW4gKyAyKTsKIAl0eGRlc2MtPmFkZHIgPSBkbWFfbWFwX3NpbmdsZSgmbmRldi0+ZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwotCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKQotCQl0eGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBFVEhfWkxFTjsKLQllbHNlCi0JCXR4ZGVzYy0+YnVmZmVyX2xlbmd0aCA9IHNrYi0+bGVuOworCWlmIChkbWFfbWFwcGluZ19lcnJvcigmbmRldi0+ZGV2LCB0eGRlc2MtPmFkZHIpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKwl0eGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBza2ItPmxlbjsKIAogCWlmIChlbnRyeSA+PSBtZHAtPm51bV90eF9yaW5nIC0gMSkKIAkJdHhkZXNjLT5zdGF0dXMgfD0gY3B1X3RvX2VkbWFjKG1kcCwgVERfVEFDVCB8IFREX1RETEUpOwpAQCAtMjE2NSwyNCArMjI0MiwyNiBAQAogCiAJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKIAotCS8qIERpc2FibGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCisJLyogU2VyaWFsaXNlIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCBOQVBJLCB0aGVuIGRpc2FibGUKKwkgKiBpbnRlcnJ1cHRzLiAgV2UgaGF2ZSB0byBjbGVhciB0aGUgaXJxX2VuYWJsZWQgZmxhZyBmaXJzdCB0bworCSAqIGVuc3VyZSB0aGF0IGludGVycnVwdHMgd29uJ3QgYmUgcmUtZW5hYmxlZC4KKwkgKi8KKwltZHAtPmlycV9lbmFibGVkID0gZmFsc2U7CisJc3luY2hyb25pemVfaXJxKG5kZXYtPmlycSk7CisJbmFwaV9kaXNhYmxlKCZtZHAtPm5hcGkpOwogCXNoX2V0aF93cml0ZShuZGV2LCAweDAwMDAsIEVFU0lQUik7CiAKLQkvKiBTdG9wIHRoZSBjaGlwJ3MgVHggYW5kIFJ4IHByb2Nlc3Nlcy4gKi8KLQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURUUlIpOwotCXNoX2V0aF93cml0ZShuZGV2LCAwLCBFRFJSUik7CisJc2hfZXRoX2Rldl9leGl0KG5kZXYpOwogCi0Jc2hfZXRoX2dldF9zdGF0cyhuZGV2KTsKIAkvKiBQSFkgRGlzY29ubmVjdCAqLwogCWlmIChtZHAtPnBoeWRldikgewogCQlwaHlfc3RvcChtZHAtPnBoeWRldik7CiAJCXBoeV9kaXNjb25uZWN0KG1kcC0+cGh5ZGV2KTsKKwkJbWRwLT5waHlkZXYgPSBOVUxMOwogCX0KIAogCWZyZWVfaXJxKG5kZXYtPmlycSwgbmRldik7CiAKLQluYXBpX2Rpc2FibGUoJm1kcC0+bmFwaSk7Ci0KIAkvKiBGcmVlIGFsbCB0aGUgc2tidWZmcyBpbiB0aGUgUnggcXVldWUuICovCiAJc2hfZXRoX3JpbmdfZnJlZShuZGV2KTsKIApAQCAtMjQxMCw3ICsyNDg5LDcgQEAKIAlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOwogCWludCBpLCByZXQ7CiAKLQlpZiAodW5saWtlbHkoIW1kcC0+Y2QtPnRzdSkpCisJaWYgKCFtZHAtPmNkLT50c3UpCiAJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IFNIX0VUSF9UU1VfQ0FNX0VOVFJJRVM7IGkrKykgewpAQCAtMjQzMyw3ICsyNTEyLDcgQEAKIAl2b2lkICpyZWdfb2Zmc2V0ID0gc2hfZXRoX3RzdV9nZXRfb2Zmc2V0KG1kcCwgVFNVX0FEUkgwKTsKIAlpbnQgaTsKIAotCWlmICh1bmxpa2VseSghbWRwLT5jZC0+dHN1KSkKKwlpZiAoIW1kcC0+Y2QtPnRzdSkKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IFNIX0VUSF9UU1VfQ0FNX0VOVFJJRVM7IGkrKywgcmVnX29mZnNldCArPSA4KSB7CkBAIC0yNDQzLDggKzI1MjIsOCBAQAogCX0KIH0KIAotLyogTXVsdGljYXN0IHJlY2VwdGlvbiBkaXJlY3Rpb25zIHNldCAqLwotc3RhdGljIHZvaWQgc2hfZXRoX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKKy8qIFVwZGF0ZSBwcm9taXNjdW91cyBmbGFnIGFuZCBtdWx0aWNhc3QgZmlsdGVyICovCitzdGF0aWMgdm9pZCBzaF9ldGhfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1MzIgZWNtcl9iaXRzOwpAQCAtMjQ1NSw3ICsyNTM0LDkgQEAKIAkvKiBJbml0aWFsIGNvbmRpdGlvbiBpcyBNQ1QgPSAxLCBQUk0gPSAwLgogCSAqIERlcGVuZGluZyBvbiBuZGV2LT5mbGFncywgc2V0IFBSTSBvciBjbGVhciBNQ1QKIAkgKi8KLQllY21yX2JpdHMgPSAoc2hfZXRoX3JlYWQobmRldiwgRUNNUikgJiB+RUNNUl9QUk0pIHwgRUNNUl9NQ1Q7CisJZWNtcl9iaXRzID0gc2hfZXRoX3JlYWQobmRldiwgRUNNUikgJiB+RUNNUl9QUk07CisJaWYgKG1kcC0+Y2QtPnRzdSkKKwkJZWNtcl9iaXRzIHw9IEVDTVJfTUNUOwogCiAJaWYgKCEobmRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSkgewogCQlzaF9ldGhfdHN1X3B1cmdlX21jYXN0KG5kZXYpOwpAQCAtMjQ4NCw5ICsyNTY1LDYgQEAKIAkJCQl9CiAJCQl9CiAJCX0KLQl9IGVsc2UgewotCQkvKiBOb3JtYWwsIHVuaWNhc3QvYnJvYWRjYXN0LW9ubHkgbW9kZS4gKi8KLQkJZWNtcl9iaXRzID0gKGVjbXJfYml0cyAmIH5FQ01SX1BSTSkgfCBFQ01SX01DVDsKIAl9CiAKIAkvKiB1cGRhdGUgdGhlIGV0aGVybmV0IG1vZGUgKi8KQEAgLTI2OTQsNiArMjc3Miw3IEBACiAJLm5kb19zdG9wCQk9IHNoX2V0aF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gc2hfZXRoX3N0YXJ0X3htaXQsCiAJLm5kb19nZXRfc3RhdHMJCT0gc2hfZXRoX2dldF9zdGF0cywKKwkubmRvX3NldF9yeF9tb2RlCT0gc2hfZXRoX3NldF9yeF9tb2RlLAogCS5uZG9fdHhfdGltZW91dAkJPSBzaF9ldGhfdHhfdGltZW91dCwKIAkubmRvX2RvX2lvY3RsCQk9IHNoX2V0aF9kb19pb2N0bCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKQEAgLTI3MDYsNyArMjc4NSw3IEBACiAJLm5kb19zdG9wCQk9IHNoX2V0aF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gc2hfZXRoX3N0YXJ0X3htaXQsCiAJLm5kb19nZXRfc3RhdHMJCT0gc2hfZXRoX2dldF9zdGF0cywKLQkubmRvX3NldF9yeF9tb2RlCT0gc2hfZXRoX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9yeF9tb2RlCT0gc2hfZXRoX3NldF9yeF9tb2RlLAogCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gc2hfZXRoX3ZsYW5fcnhfYWRkX3ZpZCwKIAkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBzaF9ldGhfdmxhbl9yeF9raWxsX3ZpZCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gc2hfZXRoX3R4X3RpbWVvdXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguaAppbmRleCAyMjMwMWJmLi4zMzJkM2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmgKQEAgLTM2OSw2ICszNjksOCBAQAogCURFU0NfSV9SSU5UMSA9IDB4MDAwMSwKIH07CiAKKyNkZWZpbmUgREVGQVVMVF9UUlNDRVJfRVJSX01BU0sgKERFU0NfSV9SSU5UOCB8IERFU0NfSV9SSU5UNSB8IERFU0NfSV9USU5UMikKKwogLyogUlBBRElSICovCiBlbnVtIFJQQURJUl9CSVQgewogCVJQQURJUl9QQURTMSA9IDB4MjAwMDAsIFJQQURJUl9QQURTMCA9IDB4MTAwMDAsCkBAIC00NzAsNiArNDcyLDkgQEAKIAl1bnNpZ25lZCBsb25nIHR4X2NoZWNrOwogCXVuc2lnbmVkIGxvbmcgZWVzcl9lcnJfY2hlY2s7CiAKKwkvKiBFcnJvciBtYXNrICovCisJdW5zaWduZWQgbG9uZyB0cnNjZXJfZXJyX21hc2s7CisKIAkvKiBoYXJkd2FyZSBmZWF0dXJlcyAqLwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOyAvKiBJUlEgY29uZmlndXJhdGlvbiBmbGFncyAqLwogCXVuc2lnbmVkIG5vX3BzcjoxOwkvKiBFdGhlckMgRE8gTk9UIGhhdmUgUFNSICovCkBAIC01MDgsNiArNTEzLDcgQEAKIAl1MzIgcnhfYnVmX3N6OwkJCS8qIEJhc2VkIG9uIE1UVStzbGFjay4gKi8KIAlpbnQgZWRtYWNfZW5kaWFuOwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCWJvb2wgaXJxX2VuYWJsZWQ7CiAJLyogTUlJIHRyYW5zY2VpdmVyIHNlY3Rpb24uICovCiAJdTMyIHBoeV9pZDsJCQkvKiBQSFkgSUQgKi8KIAlzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1czsJLyogTURJTyBidXMgY29udHJvbCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvczZnbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zNmdtYWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUzN2NiZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zNmdtYWMuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNTggKzAsMCBAQAotLyoKLSAqIEV0aGVybmV0IGRyaXZlciBmb3IgUzYxMDUgb24gY2hpcCBuZXR3b3JrIGRldmljZQotICogKGMpMjAwOCBlbWxpeCBHbWJIIGh0dHA6Ly93d3cuZW1saXguY29tCi0gKiBBdXRob3JzOglPc2thciBTY2hpcm1lciA8b3NrYXJAc2NhcmEuY29tPgotICoJCURhbmllbCBHbG9lY2tuZXIgPGRnQGVtbGl4LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pZi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPHZhcmlhbnQvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDx2YXJpYW50L2RtYWMuaD4KLQotI2RlZmluZSBEUlZfTkFNRSAiczZnbWFjIgotI2RlZmluZSBEUlZfUFJNVCBEUlZfTkFNRSAiOiAiCi0KLQotLyogcmVnaXN0ZXIgZGVjbGFyYXRpb25zICovCi0KLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMQkweDAwMAotI2RlZmluZSBTNl9HTUFDX01BQ0NPTkYxX1RYRU5BCQkwCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfU1lOQ1RYCQkxCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfUlhFTkEJCTIKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMV9TWU5DUlgJCTMKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMV9UWEZMT1dDVFJMCTQKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMV9SWEZMT1dDVFJMCTUKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMV9MT09QQkFDSwk4Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfUkVTVFhGVU5DCTE2Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfUkVTUlhGVU5DCTE3Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfUkVTVFhNQUNDVFJMCTE4Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfUkVTUlhNQUNDVFJMCTE5Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjFfU0lNVUxSRVMJMzAKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMV9TT0ZUUkVTCTMxCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjIJMHgwMDQKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMl9GVUxMCQkwCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjJfQ1JDRU5BCQkxCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjJfUEFEQ1JDRU5BCTIKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMl9MRU5HVEhGQ0hLCTQKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMl9IVUdFRlJBTUVOQQk1Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFCQk4Ci0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFX05JQkJMRQkJMQotI2RlZmluZSBTNl9HTUFDX01BQ0NPTkYyX0lGTU9ERV9CWVRFCQkyCi0jZGVmaW5lIFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFX01BU0sJCTMKLSNkZWZpbmUgUzZfR01BQ19NQUNDT05GMl9QUkVBTUJMRUxFTgkxMgotI2RlZmluZSBTNl9HTUFDX01BQ0NPTkYyX1BSRUFNQkxFTEVOX01BU0sJMHgwRgotI2RlZmluZSBTNl9HTUFDX01BQ0lQR0lGRwkweDAwOAotI2RlZmluZSBTNl9HTUFDX01BQ0lQR0lGR19CMkJJTlRFUlBHQVAJMAotI2RlZmluZSBTNl9HTUFDX01BQ0lQR0lGR19CMkJJTlRFUlBHQVBfTUFTSwkweDdGCi0jZGVmaW5lIFM2X0dNQUNfTUFDSVBHSUZHX01JTklGR0VORk9SQ0UJOAotI2RlZmluZSBTNl9HTUFDX01BQ0lQR0lGR19CMkJJTlRFUlBHQVAyCTE2Ci0jZGVmaW5lIFM2X0dNQUNfTUFDSVBHSUZHX0IyQklOVEVSUEdBUDEJMjQKLSNkZWZpbmUgUzZfR01BQ19NQUNIQUxGRFVQTEVYCTB4MDBDCi0jZGVmaW5lIFM2X0dNQUNfTUFDSEFMRkRVUExFWF9DT0xMSVNXSU4JMAotI2RlZmluZSBTNl9HTUFDX01BQ0hBTEZEVVBMRVhfQ09MTElTV0lOX01BU0sJMHgzRgotI2RlZmluZSBTNl9HTUFDX01BQ0hBTEZEVVBMRVhfUkVUWE1BWAkxMgotI2RlZmluZSBTNl9HTUFDX01BQ0hBTEZEVVBMRVhfUkVUWE1BWF9NQVNLCTB4MEYKLSNkZWZpbmUgUzZfR01BQ19NQUNIQUxGRFVQTEVYX0VYQ0VTU0RFRgkxNgotI2RlZmluZSBTNl9HTUFDX01BQ0hBTEZEVVBMRVhfTk9CQUNLT0ZGCTE3Ci0jZGVmaW5lIFM2X0dNQUNfTUFDSEFMRkRVUExFWF9CUE5PQkNLT0YJMTgKLSNkZWZpbmUgUzZfR01BQ19NQUNIQUxGRFVQTEVYX0FMVEJFQkVOQQkxOQotI2RlZmluZSBTNl9HTUFDX01BQ0hBTEZEVVBMRVhfQUxUQkVCVFJOCTIwCi0jZGVmaW5lIFM2X0dNQUNfTUFDSEFMRkRVUExFWF9BTFRCRUJUUl9NQVNLCTB4MEYKLSNkZWZpbmUgUzZfR01BQ19NQUNNQVhGUkFNRUxFTgkweDAxMAotI2RlZmluZSBTNl9HTUFDX01BQ01JSUNPTkYJMHgwMjAKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUwJCTAKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMTAJCTAKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMTIJCTEKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMTQJCTIKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMTgJCTMKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMjQJCTQKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMzQJCTUKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWNjgJCTYKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfRElWMTY4CQk3Ci0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQ09ORl9DU0VMX01BU0sJCTcKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlDT05GX1BSRUFNQkxFU1VQUgk0Ci0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQ09ORl9TQ0FOQVVUT0lOQ1IJNQotI2RlZmluZSBTNl9HTUFDX01BQ01JSUNNRAkweDAyNAotI2RlZmluZSBTNl9HTUFDX01BQ01JSUNNRF9SRUFECQkwCi0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQ01EX1NDQU4JCTEKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlBRERSCTB4MDI4Ci0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQUREUl9SRUcJCTAKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlBRERSX1JFR19NQVNLCQkweDFGCi0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQUREUl9QSFkJCTgKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlBRERSX1BIWV9NQVNLCQkweDFGCi0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJQ1RSTAkweDAyQwotI2RlZmluZSBTNl9HTUFDX01BQ01JSVNUQVQJMHgwMzAKLSNkZWZpbmUgUzZfR01BQ19NQUNNSUlJTkRJCTB4MDM0Ci0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJSU5ESV9CVVNZCQkwCi0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJSU5ESV9TQ0FOCQkxCi0jZGVmaW5lIFM2X0dNQUNfTUFDTUlJSU5ESV9JTlZBTAkyCi0jZGVmaW5lIFM2X0dNQUNfTUFDSU5URVJGU1RBVAkweDAzQwotI2RlZmluZSBTNl9HTUFDX01BQ0lOVEVSRlNUQVRfTElOS0ZBSUwJMwotI2RlZmluZSBTNl9HTUFDX01BQ0lOVEVSRlNUQVRfRVhDRVNTREVGCTkKLSNkZWZpbmUgUzZfR01BQ19NQUNTVEFUQUREUjEJMHgwNDAKLSNkZWZpbmUgUzZfR01BQ19NQUNTVEFUQUREUjIJMHgwNDQKLQotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMAkweDA0OAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMF9IU1RSU1RXVAkwCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX0hTVFJTVFNSCTEKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjBfSFNUUlNURlIJMgotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMF9IU1RSU1RTVAkzCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX0hTVFJTVEZUCTQKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjBfV1RNRU5SRVEJOAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMF9TUkZFTlJFUQk5Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX0ZSRkVOUkVRCTEwCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX1NURkVOUkVRCTExCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX0ZURkVOUkVRCTEyCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX1dUTUVOUlBMWQkxNgotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMF9TUkZFTlJQTFkJMTcKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjBfRlJGRU5SUExZCTE4Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYwX1NURkVOUlBMWQkxOQotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GMF9GVEZFTlJQTFkJMjAKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjEJMHgwNEMKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjIJMHgwNTAKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjJfQ0ZHTFdNCTAKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjJfQ0ZHSFdNCTE2Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYzCTB4MDU0Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkYzX0NGR0ZUVEgJMAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GM19DRkdIV01GVAkxNgotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GNAkweDA1OAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9QUkVWRFJPUAkwCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX1JVTlQJMQotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9GQUxTRUNBUgkyCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX0NPREVFUlIJMwotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9DUkNFUlIJNAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9MRU5HVEhFUlIJNQotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9MRU5SQU5HRQk2Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX09LCQk3Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX01VTFRJQ0FTVAk4Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX0JST0FEQ0FTVAk5Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX0RSSUJCTEUJMTAKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORl9SU1ZfQ1RSTEZSQU1FCTExCi0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX1BBVVNFQ1RSTAkxMgotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9VTk9QQ09ERQkxMwotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9WTEFOVEFHCTE0Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkZfUlNWX0xPTkdFVkVOVAkxNQotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GX1JTVl9UUlVOQ0FURUQJMTYKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORl9SU1ZfTUFTSwkJMHgzRkZGRgotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GNQkweDA1QwotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GNV9EUk9QTFQ2NAkxOAotI2RlZmluZSBTNl9HTUFDX0ZJRk9DT05GNV9DRkdCWVRNCTE5Ci0jZGVmaW5lIFM2X0dNQUNfRklGT0NPTkY1X1JYRFJPUFNJWkUJMjAKLSNkZWZpbmUgUzZfR01BQ19GSUZPQ09ORjVfUlhEUk9QU0laRV9NQVNLCTB4RgotCi0jZGVmaW5lIFM2X0dNQUNfU1RBVF9SRUdTCTB4MDgwCi0jZGVmaW5lIFM2X0dNQUNfU1RBVF9TSVpFX01JTgkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVFI2NAkweDA4MAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUjY0X1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSMTI3CTB4MDg0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSMTI3X1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSMjU1CTB4MDg4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSMjU1X1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSNTExCTB4MDhDCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSNTExX1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRSMUsJMHgwOTAKLSNkZWZpbmUgUzZfR01BQ19TVEFUVFIxS19TSVpFCQkxOAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUk1BWAkweDA5NAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUk1BWF9TSVpFCQkxOAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUk1HVgkweDA5OAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUk1HVl9TSVpFCQkxOAotI2RlZmluZSBTNl9HTUFDX1NUQVRSQllUCTB4MDlDCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJCWVRfU0laRQkJMjQKLSNkZWZpbmUgUzZfR01BQ19TVEFUUlBLVAkweDBBMAotI2RlZmluZSBTNl9HTUFDX1NUQVRSUEtUX1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFJGQ1MJMHgwQTQKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkZDU19TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRSTUNBCTB4MEE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFJNQ0FfU0laRQkJMTgKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkJDQQkweDBBQwotI2RlZmluZSBTNl9HTUFDX1NUQVRSQkNBX1NJWkUJCTIyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJYQ0YJMHgwQjAKLSNkZWZpbmUgUzZfR01BQ19TVEFUUlhDRl9TSVpFCQkxOAotI2RlZmluZSBTNl9HTUFDX1NUQVRSWFBGCTB4MEI0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFJYUEZfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUUlhVTwkweDBCOAotI2RlZmluZSBTNl9HTUFDX1NUQVRSWFVPX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJBTE4JMHgwQkMKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkFMTl9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRSRkxSCTB4MEMwCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJGTFJfU0laRQkJMTYKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkNERQkweDBDNAotI2RlZmluZSBTNl9HTUFDX1NUQVRSQ0RFX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJDU0UJMHgwQzgKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkNTRV9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRSVU5ECTB4MENDCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJVTkRfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUUk9WUgkweDBEMAotI2RlZmluZSBTNl9HTUFDX1NUQVRST1ZSX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFJGUkcJMHgwRDQKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkZSR19TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRSSkJSCTB4MEQ4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFJKQlJfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUUkRSUAkweDBEQwotI2RlZmluZSBTNl9HTUFDX1NUQVRSRFJQX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRCWVQJMHgwRTAKLSNkZWZpbmUgUzZfR01BQ19TVEFUVEJZVF9TSVpFCQkyNAotI2RlZmluZSBTNl9HTUFDX1NUQVRUUEtUCTB4MEU0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRQS1RfU0laRQkJMTgKLSNkZWZpbmUgUzZfR01BQ19TVEFUVE1DQQkweDBFOAotI2RlZmluZSBTNl9HTUFDX1NUQVRUTUNBX1NJWkUJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRCQ0EJMHgwRUMKLSNkZWZpbmUgUzZfR01BQ19TVEFUVEJDQV9TSVpFCQkxOAotI2RlZmluZSBTNl9HTUFDX1NUQVRUWFBGCTB4MEYwCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRYUEZfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVERGUgkweDBGNAotI2RlZmluZSBTNl9HTUFDX1NUQVRUREZSX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRFREYJMHgwRjgKLSNkZWZpbmUgUzZfR01BQ19TVEFUVEVERl9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRUU0NMCTB4MEZDCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRTQ0xfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVE1DTAkweDEwMAotI2RlZmluZSBTNl9HTUFDX1NUQVRUTUNMX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRMQ0wJMHgxMDQKLSNkZWZpbmUgUzZfR01BQ19TVEFUVExDTF9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRUWENMCTB4MTA4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFRYQ0xfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVE5DTAkweDEwQwotI2RlZmluZSBTNl9HTUFDX1NUQVRUTkNMX1NJWkUJCTEzCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRQRkgJMHgxMTAKLSNkZWZpbmUgUzZfR01BQ19TVEFUVFBGSF9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRURFJQCTB4MTE0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVFREUlBfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVEpCUgkweDExOAotI2RlZmluZSBTNl9HTUFDX1NUQVRUSkJSX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRGQ1MJMHgxMUMKLSNkZWZpbmUgUzZfR01BQ19TVEFUVEZDU19TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRUWENGCTB4MTIwCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRYQ0ZfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUVE9WUgkweDEyNAotI2RlZmluZSBTNl9HTUFDX1NUQVRUT1ZSX1NJWkUJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRVTkQJMHgxMjgKLSNkZWZpbmUgUzZfR01BQ19TVEFUVFVORF9TSVpFCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRURlJHCTB4MTJDCi0jZGVmaW5lIFM2X0dNQUNfU1RBVFRGUkdfU0laRQkJMTIKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkobikJKDB4MTMwICsgNCoobikpCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZTVNLKG4pCSgweDEzOCArIDQqKG4pKQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkRSUAkJMAotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkpCUgkJMQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkZSRwkJMgotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUk9WUgkJMwotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUlVORAkJNAotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkNTRQkJNQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkNERQkJNgotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkZMUgkJNwotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkFMTgkJOAotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUlhVTwkJOQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUlhQRgkJMTAKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkxX1JYQ0YJCTExCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMV9SQkNBCQkxMgotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUk1DQQkJMTMKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkxX1JGQ1MJCTE0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMV9SUEtUCQkxNQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfUkJZVAkJMTYKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkxX1RSTUdWCTI1Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMV9UUk1BWAkyNgotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfVFIxSwkJMjcKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkxX1RSNTExCTI4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMV9UUjI1NQkyOQotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTFfVFIxMjcJMzAKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkxX1RSNjQJCTMxCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9URFJQCQkwCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UUEZICQkxCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UTkNMCQkyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UWENMCQkzCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UTENMCQk0Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UTUNMCQk1Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UU0NMCQk2Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9URURGCQk3Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UREZSCQk4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UWFBGCQk5Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UQkNBCQkxMAotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTJfVE1DQQkJMTEKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkyX1RQS1QJCTEyCi0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UQllUCQkxMwotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTJfVEZSRwkJMTQKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkyX1RVTkQJCTE1Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9UT1ZSCQkxNgotI2RlZmluZSBTNl9HTUFDX1NUQVRDQVJSWTJfVFhDRgkJMTcKLSNkZWZpbmUgUzZfR01BQ19TVEFUQ0FSUlkyX1RGQ1MJCTE4Ci0jZGVmaW5lIFM2X0dNQUNfU1RBVENBUlJZMl9USkJSCQkxOQotCi0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTAkweDE0MAotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfVFhFTkEJMAotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUlhFTkEJMQotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfVFhTUkVTCTIKLSNkZWZpbmUgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1JYU1JFUwkzCi0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9UWEJTSVoJOAotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUlhCU0laCTEyCi0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TSVpfMTYJCTQKLSNkZWZpbmUgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NJWl8zMgkJNQotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfU0laXzY0CQk2Ci0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TSVpfMTI4CQk3Ci0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TSVpfTUFTSwkJMHhGCi0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TVEFURU5BCTE2Ci0jZGVmaW5lIFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TVEFUQVVUT1oJMTcKLSNkZWZpbmUgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NUQVRDTEVBUgkxOAotI2RlZmluZSBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUkdNSUkJMTkKLSNkZWZpbmUgUzZfR01BQ19IT1NUX0lOVE1BU0sJMHgxNDQKLSNkZWZpbmUgUzZfR01BQ19IT1NUX0lOVFNUQVQJMHgxNDgKLSNkZWZpbmUgUzZfR01BQ19IT1NUX0lOVF9UWEJVUlNUT1ZFUgkzCi0jZGVmaW5lIFM2X0dNQUNfSE9TVF9JTlRfVFhQUkVXT1ZFUgk0Ci0jZGVmaW5lIFM2X0dNQUNfSE9TVF9JTlRfUlhCVVJTVFVOREVSCTUKLSNkZWZpbmUgUzZfR01BQ19IT1NUX0lOVF9SWFBPU1RSRlVMTAk2Ci0jZGVmaW5lIFM2X0dNQUNfSE9TVF9JTlRfUlhQT1NUUlVOREVSCTcKLSNkZWZpbmUgUzZfR01BQ19IT1NUX1JYRklGT0hXTQkweDE0QwotI2RlZmluZSBTNl9HTUFDX0hPU1RfQ1RSTEZSQU1YUAkweDE1MAotI2RlZmluZSBTNl9HTUFDX0hPU1RfRFNUQUREUkxPKG4pICgweDE2MCArIDgqKG4pKQotI2RlZmluZSBTNl9HTUFDX0hPU1RfRFNUQUREUkhJKG4pICgweDE2NCArIDgqKG4pKQotI2RlZmluZSBTNl9HTUFDX0hPU1RfRFNUTUFTS0xPKG4pICgweDE4MCArIDgqKG4pKQotI2RlZmluZSBTNl9HTUFDX0hPU1RfRFNUTUFTS0hJKG4pICgweDE4NCArIDgqKG4pKQotCi0jZGVmaW5lIFM2X0dNQUNfQlVSU1RfUFJFV1IJMHgxQjAKLSNkZWZpbmUgUzZfR01BQ19CVVJTVF9QUkVXUl9MRU4JCTAKLSNkZWZpbmUgUzZfR01BQ19CVVJTVF9QUkVXUl9MRU5fTUFTSwkJKCgxIDw8IDIwKSAtIDEpCi0jZGVmaW5lIFM2X0dNQUNfQlVSU1RfUFJFV1JfQ0ZFCQkyMAotI2RlZmluZSBTNl9HTUFDX0JVUlNUX1BSRVdSX1BQRQkJMjEKLSNkZWZpbmUgUzZfR01BQ19CVVJTVF9QUkVXUl9GQ1MJCTIyCi0jZGVmaW5lIFM2X0dNQUNfQlVSU1RfUFJFV1JfUEFECQkyMwotI2RlZmluZSBTNl9HTUFDX0JVUlNUX1BPU1RSRAkweDFEMAotI2RlZmluZSBTNl9HTUFDX0JVUlNUX1BPU1RSRF9MRU4JMAotI2RlZmluZSBTNl9HTUFDX0JVUlNUX1BPU1RSRF9MRU5fTUFTSwkJKCgxIDw8IDIwKSAtIDEpCi0jZGVmaW5lIFM2X0dNQUNfQlVSU1RfUE9TVFJEX0RST1AJMjAKLQotCi0vKiBkYXRhIGhhbmRsaW5nICovCi0KLSNkZWZpbmUgUzZfTlVNX1RYX1NLQgk4CS8qIG11c3QgYmUgbGFyZ2VyIHRoYW4gVFggZmlmbyBzaXplICovCi0jZGVmaW5lIFM2X05VTV9SWF9TS0IJMTYKLSNkZWZpbmUgUzZfTUFYX0ZSTEVOCTE1MzYKLQotc3RydWN0IHM2Z21hYyB7Ci0JdTMyIHJlZzsKLQl1MzIgdHhfZG1hOwotCXUzMiByeF9kbWE7Ci0JdTMyIGlvOwotCXU4IHR4X2NoYW47Ci0JdTggcnhfY2hhbjsKLQlzcGlubG9ja190IGxvY2s7Ci0JdTggdHhfc2tiX2ksIHR4X3NrYl9vOwotCXU4IHJ4X3NrYl9pLCByeF9za2JfbzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiW1M2X05VTV9UWF9TS0JdOwotCXN0cnVjdCBza19idWZmICpyeF9za2JbUzZfTlVNX1JYX1NLQl07Ci0JdW5zaWduZWQgbG9uZyBjYXJyeVtzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpIC8gc2l6ZW9mKGxvbmcpXTsKLQl1bnNpZ25lZCBsb25nIHN0YXRzW3NpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykgLyBzaXplb2YobG9uZyldOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IG1paV9idXMgKmJ1czsKLQkJaW50IGlycVtQSFlfTUFYX0FERFJdOwotCX0gbWlpOwotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludCBtYml0OwotCQl1OCBnaWdhOwotCQl1OCBpc3VwOwotCQl1OCBmdWxsOwotCX0gbGluazsKLX07Ci0KLXN0YXRpYyB2b2lkIHM2Z21hY19yeF9maWxsZmlmbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXdoaWxlICgoKCh1OCkocGQtPnJ4X3NrYl9pIC0gcGQtPnJ4X3NrYl9vKSkgPCBTNl9OVU1fUlhfU0tCKSAmJgotCSAgICAgICAoIXM2ZG1hY19maWZvX2Z1bGwocGQtPnJ4X2RtYSwgcGQtPnJ4X2NoYW4pKSAmJgotCSAgICAgICAoc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIFM2X01BWF9GUkxFTiArIDIpKSkgewotCQlwZC0+cnhfc2tiWyhwZC0+cnhfc2tiX2krKykgJSBTNl9OVU1fUlhfU0tCXSA9IHNrYjsKLQkJczZkbWFjX3B1dF9maWZvX2NhY2hlKHBkLT5yeF9kbWEsIHBkLT5yeF9jaGFuLAotCQkJcGQtPmlvLCAodTMyKXNrYi0+ZGF0YSwgUzZfTUFYX0ZSTEVOKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHM2Z21hY19yeF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgczZnbWFjICpwZCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTMyIHBmeDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXdoaWxlICgoKHU4KShwZC0+cnhfc2tiX2kgLSBwZC0+cnhfc2tiX28pKSA+Ci0JCQlzNmRtYWNfcGVuZGluZ19jb3VudChwZC0+cnhfZG1hLCBwZC0+cnhfY2hhbikpIHsKLQkJc2tiID0gcGQtPnJ4X3NrYlsocGQtPnJ4X3NrYl9vKyspICUgUzZfTlVNX1JYX1NLQl07Ci0JCXBmeCA9IHJlYWRsKHBkLT5yZWcgKyBTNl9HTUFDX0JVUlNUX1BPU1RSRCk7Ci0JCWlmIChwZnggJiAoMSA8PCBTNl9HTUFDX0JVUlNUX1BPU1RSRF9EUk9QKSkgewotCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLQkJfSBlbHNlIHsKLQkJCXNrYl9wdXQoc2tiLCAocGZ4ID4+IFM2X0dNQUNfQlVSU1RfUE9TVFJEX0xFTikKLQkJCQkmIFM2X0dNQUNfQlVSU1RfUE9TVFJEX0xFTl9NQVNLKTsKLQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQkJbmV0aWZfcngoc2tiKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgczZnbWFjX3R4X2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl3aGlsZSAoKCh1OCkocGQtPnR4X3NrYl9pIC0gcGQtPnR4X3NrYl9vKSkgPgotCQkJczZkbWFjX3BlbmRpbmdfY291bnQocGQtPnR4X2RtYSwgcGQtPnR4X2NoYW4pKSB7Ci0JCWRldl9rZnJlZV9za2JfaXJxKHBkLT50eF9za2JbKHBkLT50eF9za2JfbysrKSAlIFM2X05VTV9UWF9TS0JdKTsKLQl9Ci0JaWYgKCFzNmRtYWNfZmlmb19mdWxsKHBkLT50eF9kbWEsIHBkLT50eF9jaGFuKSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotfQotCi1zdHJ1Y3QgczZnbWFjX3N0YXRpbmYgewotCXVuc2lnbmVkIHJlZ19zaXplIDogNDsgLyogMDogdW51c2VkICovCi0JdW5zaWduZWQgcmVnX29mZiA6IDY7Ci0JdW5zaWduZWQgbmV0X2luZGV4IDogNjsKLX07Ci0KLSNkZWZpbmUgUzZfU1RBVFNfQiAoOCAqIHNpemVvZih1MzIpKQotI2RlZmluZSBTNl9TVEFUU19DKGIsIHIsIGYpIFtiXSA9IHsgXAotCUJVSUxEX0JVR19PTl9aRVJPKHIjI19TSVpFIDwgUzZfR01BQ19TVEFUX1NJWkVfTUlOKSArIFwKLQlCVUlMRF9CVUdfT05fWkVSTygociMjX1NJWkUgLSAoUzZfR01BQ19TVEFUX1NJWkVfTUlOIC0gMSkpIFwKLQkJCT49ICgxPDw0KSkgKyBcCi0JciMjX1NJWkUgLSAoUzZfR01BQ19TVEFUX1NJWkVfTUlOIC0gMSksIFwKLQlCVUlMRF9CVUdfT05fWkVSTygoKHVuc2lnbmVkKSgociAtIFM2X0dNQUNfU1RBVF9SRUdTKSAvIHNpemVvZih1MzIpKSkgXAotCQkJPj0gKCgxPDw2KS0xKSkgKyBcCi0JKHIgLSBTNl9HTUFDX1NUQVRfUkVHUykgLyBzaXplb2YodTMyKSwgXAotCUJVSUxEX0JVR19PTl9aRVJPKChvZmZzZXRvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cywgZikpIFwKLQkJCSUgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSArIFwKLQlCVUlMRF9CVUdfT05fWkVSTygoKCh1bnNpZ25lZCkob2Zmc2V0b2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMsIGYpKSBcCi0JCQkvIHNpemVvZih1bnNpZ25lZCBsb25nKSkgPj0gKDE8PDYpKSkgKyBcCi0JQlVJTERfQlVHX09OX1pFUk8oKHNpemVvZigoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopMCktPmYpIFwKLQkJCSE9IHNpemVvZih1bnNpZ25lZCBsb25nKSkpICsgXAotCShvZmZzZXRvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cywgZikpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpfSwKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzNmdtYWNfc3RhdGluZiBzdGF0aW5mWzJdW1M2X1NUQVRTX0JdID0geyB7Ci0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTFfUkJZVCwgUzZfR01BQ19TVEFUUkJZVCwgcnhfYnl0ZXMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTFfUlBLVCwgUzZfR01BQ19TVEFUUlBLVCwgcnhfcGFja2V0cykKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMV9SRkNTLCBTNl9HTUFDX1NUQVRSRkNTLCByeF9jcmNfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkxX1JNQ0EsIFM2X0dNQUNfU1RBVFJNQ0EsIG11bHRpY2FzdCkKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMV9SQUxOLCBTNl9HTUFDX1NUQVRSQUxOLCByeF9mcmFtZV9lcnJvcnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTFfUkZMUiwgUzZfR01BQ19TVEFUUkZMUiwgcnhfbGVuZ3RoX2Vycm9ycykKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMV9SQ0RFLCBTNl9HTUFDX1NUQVRSQ0RFLCByeF9taXNzZWRfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkxX1JVTkQsIFM2X0dNQUNfU1RBVFJVTkQsIHJ4X2xlbmd0aF9lcnJvcnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTFfUk9WUiwgUzZfR01BQ19TVEFUUk9WUiwgcnhfbGVuZ3RoX2Vycm9ycykKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMV9SRlJHLCBTNl9HTUFDX1NUQVRSRlJHLCByeF9jcmNfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkxX1JKQlIsIFM2X0dNQUNfU1RBVFJKQlIsIHJ4X2NyY19lcnJvcnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTFfUkRSUCwgUzZfR01BQ19TVEFUUkRSUCwgcnhfZHJvcHBlZCkKLX0sIHsKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMl9UQllULCBTNl9HTUFDX1NUQVRUQllULCB0eF9ieXRlcykKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMl9UUEtULCBTNl9HTUFDX1NUQVRUUEtULCB0eF9wYWNrZXRzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkyX1RFREYsIFM2X0dNQUNfU1RBVFRFREYsIHR4X2Fib3J0ZWRfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkyX1RYQ0wsIFM2X0dNQUNfU1RBVFRYQ0wsIHR4X2Fib3J0ZWRfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkyX1ROQ0wsIFM2X0dNQUNfU1RBVFROQ0wsIGNvbGxpc2lvbnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTJfVERSUCwgUzZfR01BQ19TVEFUVERSUCwgdHhfZHJvcHBlZCkKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMl9USkJSLCBTNl9HTUFDX1NUQVRUSkJSLCB0eF9lcnJvcnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTJfVEZDUywgUzZfR01BQ19TVEFUVEZDUywgdHhfZXJyb3JzKQotCVM2X1NUQVRTX0MoUzZfR01BQ19TVEFUQ0FSUlkyX1RPVlIsIFM2X0dNQUNfU1RBVFRPVlIsIHR4X2Vycm9ycykKLQlTNl9TVEFUU19DKFM2X0dNQUNfU1RBVENBUlJZMl9UVU5ELCBTNl9HTUFDX1NUQVRUVU5ELCB0eF9lcnJvcnMpCi0JUzZfU1RBVFNfQyhTNl9HTUFDX1NUQVRDQVJSWTJfVEZSRywgUzZfR01BQ19TVEFUVEZSRywgdHhfZXJyb3JzKQotfSB9OwotCi1zdGF0aWMgdm9pZCBzNmdtYWNfc3RhdHNfY29sbGVjdChzdHJ1Y3QgczZnbWFjICpwZCwKLQkJY29uc3Qgc3RydWN0IHM2Z21hY19zdGF0aW5mICppbmYpCi17Ci0JaW50IGI7Ci0JZm9yIChiID0gMDsgYiA8IFM2X1NUQVRTX0I7IGIrKykgewotCQlpZiAoaW5mW2JdLnJlZ19zaXplKSB7Ci0JCQlwZC0+c3RhdHNbaW5mW2JdLm5ldF9pbmRleF0gKz0KLQkJCQlyZWFkbChwZC0+cmVnICsgUzZfR01BQ19TVEFUX1JFR1MKLQkJCQkJKyBzaXplb2YodTMyKSAqIGluZltiXS5yZWdfb2ZmKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgczZnbWFjX3N0YXRzX2NhcnJ5KHN0cnVjdCBzNmdtYWMgKnBkLAotCQljb25zdCBzdHJ1Y3QgczZnbWFjX3N0YXRpbmYgKmluZiwgdTMyIG1hc2spCi17Ci0JaW50IGI7Ci0Jd2hpbGUgKG1hc2spIHsKLQkJYiA9IGZscyhtYXNrKSAtIDE7Ci0JCW1hc2sgJj0gfigxIDw8IGIpOwotCQlwZC0+Y2FycnlbaW5mW2JdLm5ldF9pbmRleF0gKz0gKDEgPDwgaW5mW2JdLnJlZ19zaXplKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHM2Z21hY19zdGF0c19wZW5kaW5nKHN0cnVjdCBzNmdtYWMgKnBkLCBpbnQgY2FycnkpCi17Ci0JaW50IHIgPSByZWFkbChwZC0+cmVnICsgUzZfR01BQ19TVEFUQ0FSUlkoY2FycnkpKSAmCi0JCX5yZWFkbChwZC0+cmVnICsgUzZfR01BQ19TVEFUQ0FSUllNU0soY2FycnkpKTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHM2Z21hY19zdGF0c19pbnRlcnJ1cHQoc3RydWN0IHM2Z21hYyAqcGQsIGludCBjYXJyeSkKLXsKLQl1MzIgbWFzazsKLQltYXNrID0gczZnbWFjX3N0YXRzX3BlbmRpbmcocGQsIGNhcnJ5KTsKLQlpZiAobWFzaykgewotCQl3cml0ZWwobWFzaywgcGQtPnJlZyArIFM2X0dNQUNfU1RBVENBUlJZKGNhcnJ5KSk7Ci0JCXM2Z21hY19zdGF0c19jYXJyeShwZCwgJnN0YXRpbmZbY2FycnldWzBdLCBtYXNrKTsKLQl9Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzNmdtYWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIElSUV9OT05FOwotCXNwaW5fbG9jaygmcGQtPmxvY2spOwotCWlmIChzNmRtYWNfdGVybWNudF9pcnEocGQtPnJ4X2RtYSwgcGQtPnJ4X2NoYW4pKQotCQlzNmdtYWNfcnhfaW50ZXJydXB0KGRldik7Ci0JczZnbWFjX3J4X2ZpbGxmaWZvKGRldik7Ci0JaWYgKHM2ZG1hY190ZXJtY250X2lycShwZC0+dHhfZG1hLCBwZC0+dHhfY2hhbikpCi0JCXM2Z21hY190eF9pbnRlcnJ1cHQoZGV2KTsKLQlzNmdtYWNfc3RhdHNfaW50ZXJydXB0KHBkLCAwKTsKLQlzNmdtYWNfc3RhdHNfaW50ZXJydXB0KHBkLCAxKTsKLQlzcGluX3VubG9jaygmcGQtPmxvY2spOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHM2Z21hY19zZXRfZHN0YWRkcihzdHJ1Y3QgczZnbWFjICpwZCwgaW50IG4sCi0JdTMyIGFkZHJsbywgdTMyIGFkZHJoaSwgdTMyIG1hc2tsbywgdTMyIG1hc2toaSkKLXsKLQl3cml0ZWwoYWRkcmxvLCBwZC0+cmVnICsgUzZfR01BQ19IT1NUX0RTVEFERFJMTyhuKSk7Ci0Jd3JpdGVsKGFkZHJoaSwgcGQtPnJlZyArIFM2X0dNQUNfSE9TVF9EU1RBRERSSEkobikpOwotCXdyaXRlbChtYXNrbG8sIHBkLT5yZWcgKyBTNl9HTUFDX0hPU1RfRFNUTUFTS0xPKG4pKTsKLQl3cml0ZWwobWFza2hpLCBwZC0+cmVnICsgUzZfR01BQ19IT1NUX0RTVE1BU0tISShuKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzNmdtYWNfc3RvcF9kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgczZnbWFjICpwZCA9IG5ldGRldl9wcml2KGRldik7Ci0Jd3JpdGVsKDAsIHBkLT5yZWcgKyBTNl9HTUFDX01BQ0NPTkYxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHM2Z21hY19pbml0X2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaXNfcmdtaWkgPSAhIShwZC0+cGh5ZGV2LT5zdXBwb3J0ZWQKLQkJJiAoU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmKSk7Ci0jaWYgMAotCXdyaXRlbCgxIDw8IFM2X0dNQUNfTUFDQ09ORjFfU1lOQ1RYIHwKLQkJMSA8PCBTNl9HTUFDX01BQ0NPTkYxX1NZTkNSWCB8Ci0JCTEgPDwgUzZfR01BQ19NQUNDT05GMV9UWEZMT1dDVFJMIHwKLQkJMSA8PCBTNl9HTUFDX01BQ0NPTkYxX1JYRkxPV0NUUkwgfAotCQkxIDw8IFM2X0dNQUNfTUFDQ09ORjFfUkVTVFhGVU5DIHwKLQkJMSA8PCBTNl9HTUFDX01BQ0NPTkYxX1JFU1JYRlVOQyB8Ci0JCTEgPDwgUzZfR01BQ19NQUNDT05GMV9SRVNUWE1BQ0NUUkwgfAotCQkxIDw8IFM2X0dNQUNfTUFDQ09ORjFfUkVTUlhNQUNDVFJMLAotCQlwZC0+cmVnICsgUzZfR01BQ19NQUNDT05GMSk7Ci0jZW5kaWYKLQl3cml0ZWwoMSA8PCBTNl9HTUFDX01BQ0NPTkYxX1NPRlRSRVMsIHBkLT5yZWcgKyBTNl9HTUFDX01BQ0NPTkYxKTsKLQl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGVsKDEgPDwgUzZfR01BQ19NQUNDT05GMV9UWEVOQSB8IDEgPDwgUzZfR01BQ19NQUNDT05GMV9SWEVOQSwKLQkJcGQtPnJlZyArIFM2X0dNQUNfTUFDQ09ORjEpOwotCXdyaXRlbCgxIDw8IFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9UWFNSRVMgfAotCQkxIDw8IFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9SWFNSRVMsCi0JCXBkLT5yZWcgKyBTNl9HTUFDX0hPU1RfUEJMS0NUUkwpOwotCXdyaXRlbChTNl9HTUFDX0hPU1RfUEJMS0NUUkxfU0laXzEyOCA8PCBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfVFhCU0laIHwKLQkJUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NJWl8xMjggPDwgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1JYQlNJWiB8Ci0JCTEgPDwgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NUQVRFTkEgfAotCQkxIDw8IFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TVEFUQ0xFQVIgfAotCQlpc19yZ21paSA8PCBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUkdNSUksCi0JCXBkLT5yZWcgKyBTNl9HTUFDX0hPU1RfUEJMS0NUUkwpOwotCXdyaXRlbCgxIDw8IFM2X0dNQUNfTUFDQ09ORjFfVFhFTkEgfAotCQkxIDw8IFM2X0dNQUNfTUFDQ09ORjFfUlhFTkEgfAotCQkoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSyA/IDEgOiAwKQotCQkJPDwgUzZfR01BQ19NQUNDT05GMV9MT09QQkFDSywKLQkJcGQtPnJlZyArIFM2X0dNQUNfTUFDQ09ORjEpOwotCXdyaXRlbChkZXYtPm10dSAmJiAoZGV2LT5tdHUgPCAoUzZfTUFYX0ZSTEVOIC0gRVRIX0hMRU4tRVRIX0ZDU19MRU4pKSA/Ci0JCQlkZXYtPm10dStFVEhfSExFTitFVEhfRkNTX0xFTiA6IFM2X01BWF9GUkxFTiwKLQkJcGQtPnJlZyArIFM2X0dNQUNfTUFDTUFYRlJBTUVMRU4pOwotCXdyaXRlbCgocGQtPmxpbmsuZnVsbCA/IDEgOiAwKSA8PCBTNl9HTUFDX01BQ0NPTkYyX0ZVTEwgfAotCQkxIDw8IFM2X0dNQUNfTUFDQ09ORjJfUEFEQ1JDRU5BIHwKLQkJMSA8PCBTNl9HTUFDX01BQ0NPTkYyX0xFTkdUSEZDSEsgfAotCQkocGQtPmxpbmsuZ2lnYSA/Ci0JCQlTNl9HTUFDX01BQ0NPTkYyX0lGTU9ERV9CWVRFIDoKLQkJCVM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFX05JQkJMRSkKLQkJCTw8IFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFIHwKLQkJNyA8PCBTNl9HTUFDX01BQ0NPTkYyX1BSRUFNQkxFTEVOLAotCQlwZC0+cmVnICsgUzZfR01BQ19NQUNDT05GMik7Ci0Jd3JpdGVsKDAsIHBkLT5yZWcgKyBTNl9HTUFDX01BQ1NUQVRBRERSMSk7Ci0Jd3JpdGVsKDAsIHBkLT5yZWcgKyBTNl9HTUFDX01BQ1NUQVRBRERSMik7Ci0Jd3JpdGVsKDEgPDwgUzZfR01BQ19GSUZPQ09ORjBfV1RNRU5SRVEgfAotCQkxIDw8IFM2X0dNQUNfRklGT0NPTkYwX1NSRkVOUkVRIHwKLQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GMF9GUkZFTlJFUSB8Ci0JCTEgPDwgUzZfR01BQ19GSUZPQ09ORjBfU1RGRU5SRVEgfAotCQkxIDw8IFM2X0dNQUNfRklGT0NPTkYwX0ZURkVOUkVRLAotCQlwZC0+cmVnICsgUzZfR01BQ19GSUZPQ09ORjApOwotCXdyaXRlbCgxMjggPDwgUzZfR01BQ19GSUZPQ09ORjNfQ0ZHRlRUSCB8Ci0JCTEyOCA8PCBTNl9HTUFDX0ZJRk9DT05GM19DRkdIV01GVCwKLQkJcGQtPnJlZyArIFM2X0dNQUNfRklGT0NPTkYzKTsKLQl3cml0ZWwoKFM2X0dNQUNfRklGT0NPTkZfUlNWX01BU0sgJiB+KAotCQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GX1JTVl9SVU5UIHwKLQkJCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfQ1JDRVJSIHwKLQkJCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfT0sgfAotCQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GX1JTVl9EUklCQkxFIHwKLQkJCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfQ1RSTEZSQU1FIHwKLQkJCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfUEFVU0VDVFJMIHwKLQkJCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfVU5PUENPREUgfAotCQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GX1JTVl9UUlVOQ0FURUQpKSB8Ci0JCTEgPDwgUzZfR01BQ19GSUZPQ09ORjVfRFJPUExUNjQgfAotCQlwZC0+bGluay5naWdhIDw8IFM2X0dNQUNfRklGT0NPTkY1X0NGR0JZVE0gfAotCQkxIDw8IFM2X0dNQUNfRklGT0NPTkY1X1JYRFJPUFNJWkUsCi0JCXBkLT5yZWcgKyBTNl9HTUFDX0ZJRk9DT05GNSk7Ci0Jd3JpdGVsKDEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfUlVOVCB8Ci0JCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfQ1JDRVJSIHwKLQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GX1JTVl9EUklCQkxFIHwKLQkJMSA8PCBTNl9HTUFDX0ZJRk9DT05GX1JTVl9DVFJMRlJBTUUgfAotCQkxIDw8IFM2X0dNQUNfRklGT0NPTkZfUlNWX1BBVVNFQ1RSTCB8Ci0JCTEgPDwgUzZfR01BQ19GSUZPQ09ORl9SU1ZfVU5PUENPREUgfAotCQkxIDw8IFM2X0dNQUNfRklGT0NPTkZfUlNWX1RSVU5DQVRFRCwKLQkJcGQtPnJlZyArIFM2X0dNQUNfRklGT0NPTkY0KTsKLQlzNmdtYWNfc2V0X2RzdGFkZHIocGQsIDAsCi0JCTB4RkZGRkZGRkYsIDB4MDAwMEZGRkYsIDB4RkZGRkZGRkYsIDB4MDAwMEZGRkYpOwotCXM2Z21hY19zZXRfZHN0YWRkcihwZCwgMSwKLQkJZGV2LT5kZXZfYWRkcls1XSB8Ci0JCWRldi0+ZGV2X2FkZHJbNF0gPDwgOCB8Ci0JCWRldi0+ZGV2X2FkZHJbM10gPDwgMTYgfAotCQlkZXYtPmRldl9hZGRyWzJdIDw8IDI0LAotCQlkZXYtPmRldl9hZGRyWzFdIHwKLQkJZGV2LT5kZXZfYWRkclswXSA8PCA4LAotCQkweEZGRkZGRkZGLCAweDAwMDBGRkZGKTsKLQlzNmdtYWNfc2V0X2RzdGFkZHIocGQsIDIsCi0JCTB4MDAwMDAwMDAsIDB4MDAwMDAxMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAxMDApOwotCXM2Z21hY19zZXRfZHN0YWRkcihwZCwgMywKLQkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCk7Ci0Jd3JpdGVsKDEgPDwgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1RYRU5BIHwKLQkJMSA8PCBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUlhFTkEgfAotCQlTNl9HTUFDX0hPU1RfUEJMS0NUUkxfU0laXzEyOCA8PCBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfVFhCU0laIHwKLQkJUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NJWl8xMjggPDwgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1JYQlNJWiB8Ci0JCTEgPDwgUzZfR01BQ19IT1NUX1BCTEtDVFJMX1NUQVRFTkEgfAotCQkxIDw8IFM2X0dNQUNfSE9TVF9QQkxLQ1RSTF9TVEFUQ0xFQVIgfAotCQlpc19yZ21paSA8PCBTNl9HTUFDX0hPU1RfUEJMS0NUUkxfUkdNSUksCi0JCXBkLT5yZWcgKyBTNl9HTUFDX0hPU1RfUEJMS0NUUkwpOwotfQotCi1zdGF0aWMgdm9pZCBzNm1paV9lbmFibGUoc3RydWN0IHM2Z21hYyAqcGQpCi17Ci0Jd3JpdGVsKHJlYWRsKHBkLT5yZWcgKyBTNl9HTUFDX01BQ0NPTkYxKSAmCi0JCX4oMSA8PCBTNl9HTUFDX01BQ0NPTkYxX1NPRlRSRVMpLAotCQlwZC0+cmVnICsgUzZfR01BQ19NQUNDT05GMSk7Ci0Jd3JpdGVsKChyZWFkbChwZC0+cmVnICsgUzZfR01BQ19NQUNNSUlDT05GKQotCQkmIH4oUzZfR01BQ19NQUNNSUlDT05GX0NTRUxfTUFTSyA8PCBTNl9HTUFDX01BQ01JSUNPTkZfQ1NFTCkpCi0JCXwgKFM2X0dNQUNfTUFDTUlJQ09ORl9DU0VMX0RJVjE2OCA8PCBTNl9HTUFDX01BQ01JSUNPTkZfQ1NFTCksCi0JCXBkLT5yZWcgKyBTNl9HTUFDX01BQ01JSUNPTkYpOwotfQotCi1zdGF0aWMgaW50IHM2bWlpX2J1c3koc3RydWN0IHM2Z21hYyAqcGQsIGludCB0bW8pCi17Ci0Jd2hpbGUgKHJlYWRsKHBkLT5yZWcgKyBTNl9HTUFDX01BQ01JSUlOREkpKSB7Ci0JCWlmICgtLXRtbyA9PSAwKQotCQkJcmV0dXJuIC1FVElNRTsKLQkJdWRlbGF5KDY0KTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczZtaWlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdudW0pCi17Ci0Jc3RydWN0IHM2Z21hYyAqcGQgPSBidXMtPnByaXY7Ci0JczZtaWlfZW5hYmxlKHBkKTsKLQlpZiAoczZtaWlfYnVzeShwZCwgMjU2KSkKLQkJcmV0dXJuIC1FVElNRTsKLQl3cml0ZWwocGh5X2FkZHIgPDwgUzZfR01BQ19NQUNNSUlBRERSX1BIWSB8Ci0JCXJlZ251bSA8PCBTNl9HTUFDX01BQ01JSUFERFJfUkVHLAotCQlwZC0+cmVnICsgUzZfR01BQ19NQUNNSUlBRERSKTsKLQl3cml0ZWwoMSA8PCBTNl9HTUFDX01BQ01JSUNNRF9SRUFELCBwZC0+cmVnICsgUzZfR01BQ19NQUNNSUlDTUQpOwotCXdyaXRlbCgwLCBwZC0+cmVnICsgUzZfR01BQ19NQUNNSUlDTUQpOwotCWlmIChzNm1paV9idXN5KHBkLCAyNTYpKQotCQlyZXR1cm4gLUVUSU1FOwotCXJldHVybiAodTE2KXJlYWRsKHBkLT5yZWcgKyBTNl9HTUFDX01BQ01JSVNUQVQpOwotfQotCi1zdGF0aWMgaW50IHM2bWlpX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gYnVzLT5wcml2OwotCXM2bWlpX2VuYWJsZShwZCk7Ci0JaWYgKHM2bWlpX2J1c3kocGQsIDI1NikpCi0JCXJldHVybiAtRVRJTUU7Ci0Jd3JpdGVsKHBoeV9hZGRyIDw8IFM2X0dNQUNfTUFDTUlJQUREUl9QSFkgfAotCQlyZWdudW0gPDwgUzZfR01BQ19NQUNNSUlBRERSX1JFRywKLQkJcGQtPnJlZyArIFM2X0dNQUNfTUFDTUlJQUREUik7Ci0Jd3JpdGVsKHZhbHVlLCBwZC0+cmVnICsgUzZfR01BQ19NQUNNSUlDVFJMKTsKLQlpZiAoczZtaWlfYnVzeShwZCwgMjU2KSkKLQkJcmV0dXJuIC1FVElNRTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzNm1paV9yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gYnVzLT5wcml2OwotCXM2bWlpX2VuYWJsZShwZCk7Ci0JaWYgKHM2bWlpX2J1c3kocGQsIFBIWV9JTklUX1RJTUVPVVQpKQotCQlyZXR1cm4gLUVUSU1FOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzNmdtYWNfc2V0X3JnbWlpX3R4Y2xvY2soc3RydWN0IHM2Z21hYyAqcGQpCi17Ci0JdTMyIHBsbHNlbCA9IHJlYWRsKFM2X1JFR19HUkVHMSArIFM2X0dSRUcxX1BMTFNFTCk7Ci0JcGxsc2VsICY9IH4oUzZfR1JFRzFfUExMU0VMX0dNQUNfTUFTSyA8PCBTNl9HUkVHMV9QTExTRUxfR01BQyk7Ci0Jc3dpdGNoIChwZC0+bGluay5tYml0KSB7Ci0JY2FzZSAxMDoKLQkJcGxsc2VsIHw9IFM2X0dSRUcxX1BMTFNFTF9HTUFDXzI1MDBLSFogPDwgUzZfR1JFRzFfUExMU0VMX0dNQUM7Ci0JCWJyZWFrOwotCWNhc2UgMTAwOgotCQlwbGxzZWwgfD0gUzZfR1JFRzFfUExMU0VMX0dNQUNfMjVNSFogPDwgUzZfR1JFRzFfUExMU0VMX0dNQUM7Ci0JCWJyZWFrOwotCWNhc2UgMTAwMDoKLQkJcGxsc2VsIHw9IFM2X0dSRUcxX1BMTFNFTF9HTUFDXzEyNU1IWiA8PCBTNl9HUkVHMV9QTExTRUxfR01BQzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQl3cml0ZWwocGxsc2VsLCBTNl9SRUdfR1JFRzEgKyBTNl9HUkVHMV9QTExTRUwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgczZnbWFjX2xpbmtpc3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpc3VwKQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcGQtPnBoeWRldjsKLQotCXBkLT5saW5rLmZ1bGwgPSBwaHlkZXYtPmR1cGxleDsKLQlwZC0+bGluay5naWdhID0gKHBoeWRldi0+c3BlZWQgPT0gMTAwMCk7Ci0JaWYgKHBkLT5saW5rLm1iaXQgIT0gcGh5ZGV2LT5zcGVlZCkgewotCQlwZC0+bGluay5tYml0ID0gcGh5ZGV2LT5zcGVlZDsKLQkJczZnbWFjX3NldF9yZ21paV90eGNsb2NrKHBkKTsKLQl9Ci0JcGQtPmxpbmsuaXN1cCA9IGlzdXA7Ci0JaWYgKGlzdXApCi0JCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQlwaHlfcHJpbnRfc3RhdHVzKHBoeWRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHM2Z21hY19hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcGQtPnBoeWRldjsKLQlpZiAocGQtPmxpbmsuaXN1cCAmJgotCQkJKCFwaHlkZXYtPmxpbmsgfHwKLQkJCShwZC0+bGluay5tYml0ICE9IHBoeWRldi0+c3BlZWQpIHx8Ci0JCQkocGQtPmxpbmsuZnVsbCAhPSBwaHlkZXYtPmR1cGxleCkpKSB7Ci0JCXBkLT5saW5rLmlzdXAgPSAwOwotCQluZXRpZl90eF9kaXNhYmxlKGRldik7Ci0JCWlmICghcGh5ZGV2LT5saW5rKSB7Ci0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQkJcGh5X3ByaW50X3N0YXR1cyhwaHlkZXYpOwotCQl9Ci0JfQotCWlmICghcGQtPmxpbmsuaXN1cCAmJiBwaHlkZXYtPmxpbmspIHsKLQkJaWYgKHBkLT5saW5rLmZ1bGwgIT0gcGh5ZGV2LT5kdXBsZXgpIHsKLQkJCXUzMiBtYWNjZmcgPSByZWFkbChwZC0+cmVnICsgUzZfR01BQ19NQUNDT05GMik7Ci0JCQlpZiAocGh5ZGV2LT5kdXBsZXgpCi0JCQkJbWFjY2ZnIHw9IDEgPDwgUzZfR01BQ19NQUNDT05GMl9GVUxMOwotCQkJZWxzZQotCQkJCW1hY2NmZyAmPSB+KDEgPDwgUzZfR01BQ19NQUNDT05GMl9GVUxMKTsKLQkJCXdyaXRlbChtYWNjZmcsIHBkLT5yZWcgKyBTNl9HTUFDX01BQ0NPTkYyKTsKLQkJfQotCi0JCWlmIChwZC0+bGluay5naWdhICE9IChwaHlkZXYtPnNwZWVkID09IDEwMDApKSB7Ci0JCQl1MzIgZmlmb2NmZyA9IHJlYWRsKHBkLT5yZWcgKyBTNl9HTUFDX0ZJRk9DT05GNSk7Ci0JCQl1MzIgbWFjY2ZnID0gcmVhZGwocGQtPnJlZyArIFM2X0dNQUNfTUFDQ09ORjIpOwotCQkJbWFjY2ZnICY9IH4oUzZfR01BQ19NQUNDT05GMl9JRk1PREVfTUFTSwotCQkJCSAgICAgPDwgUzZfR01BQ19NQUNDT05GMl9JRk1PREUpOwotCQkJaWYgKHBoeWRldi0+c3BlZWQgPT0gMTAwMCkgewotCQkJCWZpZm9jZmcgfD0gMSA8PCBTNl9HTUFDX0ZJRk9DT05GNV9DRkdCWVRNOwotCQkJCW1hY2NmZyB8PSBTNl9HTUFDX01BQ0NPTkYyX0lGTU9ERV9CWVRFCi0JCQkJCSAgIDw8IFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFOwotCQkJfSBlbHNlIHsKLQkJCQlmaWZvY2ZnICY9IH4oMSA8PCBTNl9HTUFDX0ZJRk9DT05GNV9DRkdCWVRNKTsKLQkJCQltYWNjZmcgfD0gUzZfR01BQ19NQUNDT05GMl9JRk1PREVfTklCQkxFCi0JCQkJCSAgIDw8IFM2X0dNQUNfTUFDQ09ORjJfSUZNT0RFOwotCQkJfQotCQkJd3JpdGVsKGZpZm9jZmcsIHBkLT5yZWcgKyBTNl9HTUFDX0ZJRk9DT05GNSk7Ci0JCQl3cml0ZWwobWFjY2ZnLCBwZC0+cmVnICsgUzZfR01BQ19NQUNDT05GMik7Ci0JCX0KLQotCQlpZiAoIXM2ZG1hY19maWZvX2Z1bGwocGQtPnR4X2RtYSwgcGQtPnR4X2NoYW4pKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQlzNmdtYWNfbGlua2lzdXAoZGV2LCAxKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHM2Z21hY19waHlfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgczZnbWFjICpwZCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwID0gTlVMTDsKLQl3aGlsZSAoKGkgPCBQSFlfTUFYX0FERFIpICYmICghKHAgPSBwZC0+bWlpLmJ1cy0+cGh5X21hcFtpXSkpKQotCQlpKys7Ci0JcCA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnAtPmRldiksICZzNmdtYWNfYWRqdXN0X2xpbmssCi0JCQlQSFlfSU5URVJGQUNFX01PREVfUkdNSUkpOwotCWlmIChJU19FUlIocCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybiBQVFJfRVJSKHApOwotCX0KLQlwLT5zdXBwb3J0ZWQgJj0gUEhZX0dCSVRfRkVBVFVSRVM7Ci0JcC0+YWR2ZXJ0aXNpbmcgPSBwLT5zdXBwb3J0ZWQ7Ci0JcGQtPnBoeWRldiA9IHA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzNmdtYWNfaW5pdF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgbWFzazsKLQltYXNrID0JMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTFfUkRSUCB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkxX1JKQlIgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMV9SRlJHIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTFfUk9WUiB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkxX1JVTkQgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMV9SQ0RFIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTFfUkZMUiB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkxX1JBTE4gfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMV9STUNBIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTFfUkZDUyB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkxX1JQS1QgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMV9SQllUOwotCXdyaXRlbChtYXNrLCBwZC0+cmVnICsgUzZfR01BQ19TVEFUQ0FSUlkoMCkpOwotCXdyaXRlbCh+bWFzaywgcGQtPnJlZyArIFM2X0dNQUNfU1RBVENBUlJZTVNLKDApKTsKLQltYXNrID0JMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTJfVERSUCB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkyX1ROQ0wgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMl9UWENMIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTJfVEVERiB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkyX1RQS1QgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMl9UQllUIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTJfVEZSRyB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkyX1RVTkQgfAotCQkxIDw8IFM2X0dNQUNfU1RBVENBUlJZMl9UT1ZSIHwKLQkJMSA8PCBTNl9HTUFDX1NUQVRDQVJSWTJfVEZDUyB8Ci0JCTEgPDwgUzZfR01BQ19TVEFUQ0FSUlkyX1RKQlI7Ci0Jd3JpdGVsKG1hc2ssIHBkLT5yZWcgKyBTNl9HTUFDX1NUQVRDQVJSWSgxKSk7Ci0Jd3JpdGVsKH5tYXNrLCBwZC0+cmVnICsgUzZfR01BQ19TVEFUQ0FSUllNU0soMSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgczZnbWFjX2luaXRfZG1hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzNmRtYWNfZGlzYWJsZV9jaGFuKHBkLT50eF9kbWEsIHBkLT50eF9jaGFuKTsKLQlzNmRtYWNfZGlzYWJsZV9jaGFuKHBkLT5yeF9kbWEsIHBkLT5yeF9jaGFuKTsKLQlzNmRtYWNfZGlzYWJsZV9lcnJvcl9pcnFzKHBkLT50eF9kbWEsIDEgPDwgUzZfSElGRE1BX0dNQUNUWCk7Ci0JczZkbWFjX2Rpc2FibGVfZXJyb3JfaXJxcyhwZC0+cnhfZG1hLCAxIDw8IFM2X0hJRkRNQV9HTUFDUlgpOwotfQotCi1zdGF0aWMgaW50IHM2Z21hY190eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBkLT5sb2NrLCBmbGFncyk7Ci0Jd3JpdGVsKHNrYi0+bGVuIDw8IFM2X0dNQUNfQlVSU1RfUFJFV1JfTEVOIHwKLQkJMCA8PCBTNl9HTUFDX0JVUlNUX1BSRVdSX0NGRSB8Ci0JCTEgPDwgUzZfR01BQ19CVVJTVF9QUkVXUl9QUEUgfAotCQkxIDw8IFM2X0dNQUNfQlVSU1RfUFJFV1JfRkNTIHwKLQkJKChza2ItPmxlbiA8IEVUSF9aTEVOKSA/IDEgOiAwKSA8PCBTNl9HTUFDX0JVUlNUX1BSRVdSX1BBRCwKLQkJcGQtPnJlZyArIFM2X0dNQUNfQlVSU1RfUFJFV1IpOwotCXM2ZG1hY19wdXRfZmlmb19jYWNoZShwZC0+dHhfZG1hLCBwZC0+dHhfY2hhbiwKLQkJKHUzMilza2ItPmRhdGEsIHBkLT5pbywgc2tiLT5sZW4pOwotCWlmIChzNmRtYWNfZmlmb19mdWxsKHBkLT50eF9kbWEsIHBkLT50eF9jaGFuKSkKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCWlmICgoKHU4KShwZC0+dHhfc2tiX2kgLSBwZC0+dHhfc2tiX28pKSA+PSBTNl9OVU1fVFhfU0tCKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiR01BQyBCVUc6IHNrYiB0eCByaW5nIG92ZXJmbG93IFsleCwgJXhdXG4iLAotCQkJcGQtPnR4X3NrYl9vLCBwZC0+dHhfc2tiX2kpOwotCQlCVUcoKTsKLQl9Ci0JcGQtPnR4X3NrYlsocGQtPnR4X3NrYl9pKyspICUgUzZfTlVNX1RYX1NLQl0gPSBza2I7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGQtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgczZnbWFjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgczZnbWFjICpwZCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGQtPmxvY2ssIGZsYWdzKTsKLQlzNmdtYWNfdHhfaW50ZXJydXB0KGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGQtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBzNmdtYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzNmdtYWMgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXBoeV9yZWFkX3N0YXR1cyhwZC0+cGh5ZGV2KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGQtPmxvY2ssIGZsYWdzKTsKLQlwZC0+bGluay5tYml0ID0gMDsKLQlzNmdtYWNfbGlua2lzdXAoZGV2LCBwZC0+cGh5ZGV2LT5saW5rKTsKLQlzNmdtYWNfaW5pdF9kZXZpY2UoZGV2KTsKLQlzNmdtYWNfaW5pdF9zdGF0cyhkZXYpOwotCXM2Z21hY19pbml0X2RtYWMoZGV2KTsKLQlzNmdtYWNfcnhfZmlsbGZpZm8oZGV2KTsKLQlzNmRtYWNfZW5hYmxlX2NoYW4ocGQtPnJ4X2RtYSwgcGQtPnJ4X2NoYW4sCi0JCTIsIDEsIDAsIDEsIDAsIDAsIDAsIDcsIC0xLCAyLCAwLCAxKTsKLQlzNmRtYWNfZW5hYmxlX2NoYW4ocGQtPnR4X2RtYSwgcGQtPnR4X2NoYW4sCi0JCTIsIDAsIDEsIDAsIDAsIDAsIDAsIDcsIC0xLCAyLCAwLCAxKTsKLQl3cml0ZWwoMCA8PCBTNl9HTUFDX0hPU1RfSU5UX1RYQlVSU1RPVkVSIHwKLQkJMCA8PCBTNl9HTUFDX0hPU1RfSU5UX1RYUFJFV09WRVIgfAotCQkwIDw8IFM2X0dNQUNfSE9TVF9JTlRfUlhCVVJTVFVOREVSIHwKLQkJMCA8PCBTNl9HTUFDX0hPU1RfSU5UX1JYUE9TVFJGVUxMIHwKLQkJMCA8PCBTNl9HTUFDX0hPU1RfSU5UX1JYUE9TVFJVTkRFUiwKLQkJcGQtPnJlZyArIFM2X0dNQUNfSE9TVF9JTlRNQVNLKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZC0+bG9jaywgZmxhZ3MpOwotCXBoeV9zdGFydChwZC0+cGh5ZGV2KTsKLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHM2Z21hY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHM2Z21hYyAqcGQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXBoeV9zdG9wKHBkLT5waHlkZXYpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwZC0+bG9jaywgZmxhZ3MpOwotCXM2Z21hY19pbml0X2RtYWMoZGV2KTsKLQlzNmdtYWNfc3RvcF9kZXZpY2UoZGV2KTsKLQl3aGlsZSAocGQtPnR4X3NrYl9pICE9IHBkLT50eF9za2JfbykKLQkJZGV2X2tmcmVlX3NrYihwZC0+dHhfc2tiWyhwZC0+dHhfc2tiX28rKykgJSBTNl9OVU1fVFhfU0tCXSk7Ci0Jd2hpbGUgKHBkLT5yeF9za2JfaSAhPSBwZC0+cnhfc2tiX28pCi0JCWRldl9rZnJlZV9za2IocGQtPnJ4X3NrYlsocGQtPnJ4X3NrYl9vKyspICUgUzZfTlVNX1JYX1NLQl0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqczZnbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHM2Z21hYyAqcGQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdCA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKSZwZC0+c3RhdHM7Ci0JaW50IGk7Ci0JZG8gewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGQtPmxvY2ssIGZsYWdzKTsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGQtPnN0YXRzKTsgaSsrKQotCQkJcGQtPnN0YXRzW2ldID0KLQkJCQlwZC0+Y2FycnlbaV0gPDwgKFM2X0dNQUNfU1RBVF9TSVpFX01JTiAtIDEpOwotCQlzNmdtYWNfc3RhdHNfY29sbGVjdChwZCwgJnN0YXRpbmZbMF1bMF0pOwotCQlzNmdtYWNfc3RhdHNfY29sbGVjdChwZCwgJnN0YXRpbmZbMV1bMF0pOwotCQlpID0gczZnbWFjX3N0YXRzX3BlbmRpbmcocGQsIDApIHwKLQkJCXM2Z21hY19zdGF0c19wZW5kaW5nKHBkLCAxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGQtPmxvY2ssIGZsYWdzKTsKLQl9IHdoaWxlIChpKTsKLQlzdC0+cnhfZXJyb3JzID0gc3QtPnJ4X2NyY19lcnJvcnMgKwotCQkJc3QtPnJ4X2ZyYW1lX2Vycm9ycyArCi0JCQlzdC0+cnhfbGVuZ3RoX2Vycm9ycyArCi0JCQlzdC0+cnhfbWlzc2VkX2Vycm9yczsKLQlzdC0+dHhfZXJyb3JzICs9IHN0LT50eF9hYm9ydGVkX2Vycm9yczsKLQlyZXR1cm4gc3Q7Ci19Ci0KLXN0YXRpYyBpbnQgczZnbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgczZnbWFjICpwZDsKLQlpbnQgcmVzOwotCXVuc2lnbmVkIGxvbmcgaTsKLQlzdHJ1Y3QgbWlpX2J1cyAqbWI7Ci0KLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKnBkKSk7Ci0JaWYgKCFkZXYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGV2LT5vcGVuID0gczZnbWFjX29wZW47Ci0JZGV2LT5zdG9wID0gczZnbWFjX3N0b3A7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzNmdtYWNfdHg7Ci0JZGV2LT50eF90aW1lb3V0ID0gczZnbWFjX3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOwotCWRldi0+Z2V0X3N0YXRzID0gczZnbWFjX3N0YXRzOwotCWRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlwZCA9IG5ldGRldl9wcml2KGRldik7Ci0JbWVtc2V0KHBkLCAwLCBzaXplb2YoKnBkKSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnBkLT5sb2NrKTsKLQlwZC0+cmVnID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKS0+c3RhcnQ7Ci0JaSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCktPnN0YXJ0OwotCXBkLT50eF9kbWEgPSBETUFfTUFTS19ETUFDKGkpOwotCXBkLT50eF9jaGFuID0gRE1BX0lOREVYX0NITkwoaSk7Ci0JaSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSktPnN0YXJ0OwotCXBkLT5yeF9kbWEgPSBETUFfTUFTS19ETUFDKGkpOwotCXBkLT5yeF9jaGFuID0gRE1BX0lOREVYX0NITkwoaSk7Ci0JcGQtPmlvID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApLT5zdGFydDsKLQlyZXMgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgczZnbWFjX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpOwotCWlmIChyZXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9QUk1UICJpcnEgcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLCBkZXYtPmlycSk7Ci0JCWdvdG8gZXJyaXJxOwotCX0KLQlyZXMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAocmVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfUFJNVCAiZXJyb3IgcmVnaXN0ZXJpbmcgZGV2aWNlICVzXG4iLAotCQkJZGV2LT5uYW1lKTsKLQkJZ290byBlcnJkZXY7Ci0JfQotCW1iID0gbWRpb2J1c19hbGxvYygpOwotCWlmICghbWIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9QUk1UICJlcnJvciBhbGxvY2F0aW5nIG1paSBidXNcbiIpOwotCQlyZXMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm1paTsKLQl9Ci0JbWItPm5hbWUgPSAiczZnbWFjX21paSI7Ci0JbWItPnJlYWQgPSBzNm1paV9yZWFkOwotCW1iLT53cml0ZSA9IHM2bWlpX3dyaXRlOwotCW1iLT5yZXNldCA9IHM2bWlpX3Jlc2V0OwotCW1iLT5wcml2ID0gcGQ7Ci0Jc25wcmludGYobWItPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlcy0leCIsIHBkZXYtPm5hbWUsIHBkZXYtPmlkKTsKLQltYi0+cGh5X21hc2sgPSB+KDEgPDwgMCk7Ci0JbWItPmlycSA9ICZwZC0+bWlpLmlycVswXTsKLQlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspIHsKLQkJaW50IG4gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkgKyAxKTsKLQkJaWYgKG4gPCAwKQotCQkJbiA9IFBIWV9QT0xMOwotCQlwZC0+bWlpLmlycVtpXSA9IG47Ci0JfQotCW1kaW9idXNfcmVnaXN0ZXIobWIpOwotCXBkLT5taWkuYnVzID0gbWI7Ci0JcmVzID0gczZnbWFjX3BoeV9zdGFydChkZXYpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKLQlyZXR1cm4gMDsKLWVycm1paToKLQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotZXJyZGV2OgotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotZXJyaXJxOgotCWZyZWVfbmV0ZGV2KGRldik7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludCBzNmdtYWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWlmIChkZXYpIHsKLQkJc3RydWN0IHM2Z21hYyAqcGQgPSBuZXRkZXZfcHJpdihkZXYpOwotCQltZGlvYnVzX3VucmVnaXN0ZXIocGQtPm1paS5idXMpOwotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHM2Z21hY19kcml2ZXIgPSB7Ci0JLnByb2JlID0gczZnbWFjX3Byb2JlLAotCS5yZW1vdmUgPSBzNmdtYWNfcmVtb3ZlLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInM2Z21hYyIsCi0JfSwKLX07Ci0KLW1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoczZnbWFjX2RyaXZlcik7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUzYxMDUgb24gY2hpcCBFdGhlcm5ldCBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIk9za2FyIFNjaGlybWVyIDxvc2thckBzY2FyYS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jCmluZGV4IDY5ODQ5NDQuLmIxYTI3MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jCkBAIC00NzQsMTMgKzQ3NCwxOSBAQAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgUlggc2tidWZmIGFycmF5ICovCiAJcnhfcmluZy0+cnhfc2tidWZmX2RtYSA9IGttYWxsb2NfYXJyYXkocnhfcnNpemUsCiAJCQkJCSAgICAgICBzaXplb2YoZG1hX2FkZHJfdCksIEdGUF9LRVJORUwpOwotCWlmIChyeF9yaW5nLT5yeF9za2J1ZmZfZG1hID09IE5VTEwpCi0JCWdvdG8gZG1hbWVtX2VycjsKKwlpZiAoIXJ4X3JpbmctPnJ4X3NrYnVmZl9kbWEpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQocHJpdi0+ZGV2aWNlLAorCQkJCSAgcnhfcnNpemUgKiBzaXplb2Yoc3RydWN0IHN4Z2JlX3J4X25vcm1fZGVzYyksCisJCQkJICByeF9yaW5nLT5kbWFfcngsIHJ4X3JpbmctPmRtYV9yeF9waHkpOworCQlnb3RvIGVycm9yOworCX0KIAogCXJ4X3JpbmctPnJ4X3NrYnVmZiA9IGttYWxsb2NfYXJyYXkocnhfcnNpemUsCiAJCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJ4X3JpbmctPnJ4X3NrYnVmZiA9PSBOVUxMKQotCQlnb3RvIHJ4YnVmZl9lcnI7CisJaWYgKCFyeF9yaW5nLT5yeF9za2J1ZmYpIHsKKwkJa2ZyZWUocnhfcmluZy0+cnhfc2tidWZmX2RtYSk7CisJCWdvdG8gZXJyb3I7CisJfQogCiAJLyogaW5pdGlhbGlzZSB0aGUgYnVmZmVycyAqLwogCWZvciAoZGVzY19pbmRleCA9IDA7IGRlc2NfaW5kZXggPCByeF9yc2l6ZTsgZGVzY19pbmRleCsrKSB7CkBAIC01MDIsMTMgKzUwOCw2IEBACiBlcnJfaW5pdF9yeF9idWZmZXJzOgogCXdoaWxlICgtLWRlc2NfaW5kZXggPj0gMCkKIAkJZnJlZV9yeF9yaW5nKHByaXYtPmRldmljZSwgcnhfcmluZywgZGVzY19pbmRleCk7Ci0Ja2ZyZWUocnhfcmluZy0+cnhfc2tidWZmKTsKLXJ4YnVmZl9lcnI6Ci0Ja2ZyZWUocnhfcmluZy0+cnhfc2tidWZmX2RtYSk7Ci1kbWFtZW1fZXJyOgotCWRtYV9mcmVlX2NvaGVyZW50KHByaXYtPmRldmljZSwKLQkJCSAgcnhfcnNpemUgKiBzaXplb2Yoc3RydWN0IHN4Z2JlX3J4X25vcm1fZGVzYyksCi0JCQkgIHJ4X3JpbmctPmRtYV9yeCwgcnhfcmluZy0+ZG1hX3J4X3BoeSk7CiBlcnJvcjoKIAlyZXR1cm4gLUVOT01FTTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfcGxhdGZvcm0uYwppbmRleCA4NjY1NjBlLi5iMDJlZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9wbGF0Zm9ybS5jCkBAIC0xMDgsMTAgKzEwOCw2IEBACiAJCX0KIAl9CiAKLQkvKiBHZXQgTUFDIGFkZHJlc3MgaWYgYXZhaWxhYmxlIChEVCkgKi8KLQlpZiAobWFjKQotCQlldGhlcl9hZGRyX2NvcHkocHJpdi0+ZGV2LT5kZXZfYWRkciwgbWFjKTsKLQogCXByaXYgPSBzeGdiZV9kcnZfcHJvYmUoJihwZGV2LT5kZXYpLCBwbGF0X2RhdCwgYWRkcik7CiAJaWYgKCFwcml2KSB7CiAJCXByX2VycigiJXM6IG1haW4gZHJpdmVyIHByb2JlIGZhaWxlZFxuIiwgX19mdW5jX18pOwpAQCAtMTI1LDYgKzEyMSwxMCBAQAogCQlnb3RvIGVycl9kcnZfcmVtb3ZlOwogCX0KIAorCS8qIEdldCBNQUMgYWRkcmVzcyBpZiBhdmFpbGFibGUgKERUKSAqLworCWlmIChtYWMpCisJCWV0aGVyX2FkZHJfY29weShwcml2LT5kZXYtPmRldl9hZGRyLCBtYWMpOworCiAJLyogR2V0IHRoZSBUWC9SWCBJUlEgbnVtYmVycyAqLwogCWZvciAoaSA9IDAsIGNoYW4gPSAxOyBpIDwgU1hHQkVfVFhfUVVFVUVTOyBpKyspIHsKIAkJcHJpdi0+dHhxW2ldLT5pcnFfbm8gPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCBjaGFuKyspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggMTE4YTQyNy4uY2Y2MmZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC0xNjcxLDcgKzE2NzEsNyBAQAogICogIDAgb24gc3VjY2VzcyBhbmQgYW4gYXBwcm9wcmlhdGUgKC0pdmUgaW50ZWdlciBhcyBkZWZpbmVkIGluIGVycm5vLmgKICAqICBmaWxlIG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHN0bW1hY19od19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIGluaXRfcHRwKQogewogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKQEAgLTE3MDgsOSArMTcwOCwxMSBAQAogCiAJc3RtbWFjX21tY19zZXR1cChwcml2KTsKIAotCXJldCA9IHN0bW1hY19pbml0X3B0cChwcml2KTsKLQlpZiAocmV0ICYmIHJldCAhPSAtRU9QTk9UU1VQUCkKLQkJcHJfd2FybigiJXM6IGZhaWxlZCBQVFAgaW5pdGlhbGlzYXRpb25cbiIsIF9fZnVuY19fKTsKKwlpZiAoaW5pdF9wdHApIHsKKwkJcmV0ID0gc3RtbWFjX2luaXRfcHRwKHByaXYpOworCQlpZiAocmV0ICYmIHJldCAhPSAtRU9QTk9UU1VQUCkKKwkJCXByX3dhcm4oIiVzOiBmYWlsZWQgUFRQIGluaXRpYWxpc2F0aW9uXG4iLCBfX2Z1bmNfXyk7CisJfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAJcmV0ID0gc3RtbWFjX2luaXRfZnMoZGV2KTsKQEAgLTE3ODcsNyArMTc4OSw3IEBACiAJCWdvdG8gaW5pdF9lcnJvcjsKIAl9CiAKLQlyZXQgPSBzdG1tYWNfaHdfc2V0dXAoZGV2KTsKKwlyZXQgPSBzdG1tYWNfaHdfc2V0dXAoZGV2LCB0cnVlKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcl9lcnIoIiVzOiBIdyBzZXR1cCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byBpbml0X2Vycm9yOwpAQCAtMjc3Niw2ICsyNzc4LDkgQEAKICAqIEBhZGRyOiBpb2Jhc2UgbWVtb3J5IGFkZHJlc3MKICAqIERlc2NyaXB0aW9uOiB0aGlzIGlzIHRoZSBtYWluIHByb2JlIGZ1bmN0aW9uIHVzZWQgdG8KICAqIGNhbGwgdGhlIGFsbG9jX2V0aGVyZGV2LCBhbGxvY2F0ZSB0aGUgcHJpdiBzdHJ1Y3R1cmUuCisgKiBSZXR1cm46CisgKiBvbiBzdWNjZXNzIHRoZSBuZXcgcHJpdmF0ZSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSB0aGUgZXJyb3IKKyAqIHBvaW50ZXIuCiAgKi8KIHN0cnVjdCBzdG1tYWNfcHJpdiAqc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LApAQCAtMjc4Nyw3ICsyNzkyLDcgQEAKIAogCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHN0bW1hY19wcml2KSk7CiAJaWYgKCFuZGV2KQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlTRVRfTkVUREVWX0RFVihuZGV2LCBkZXZpY2UpOwogCkBAIC0zMDM2LDcgKzMwNDEsNyBAQAogCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CiAKIAlpbml0X2RtYV9kZXNjX3JpbmdzKG5kZXYsIEdGUF9BVE9NSUMpOwotCXN0bW1hY19od19zZXR1cChuZGV2KTsKKwlzdG1tYWNfaHdfc2V0dXAobmRldiwgZmFsc2UpOwogCXN0bW1hY19pbml0X3R4X2NvYWxlc2NlKHByaXYpOwogCiAJbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYwppbmRleCA0MDMyYjE3Li4zMDM5ZGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYwpAQCAtNDMwLDcgKzQzMCw2IEBACiAJLnJlbW92ZSA9IHN0bW1hY19wbHRmcl9yZW1vdmUsCiAJLmRyaXZlciA9IHsKIAkJICAgLm5hbWUgPSBTVE1NQUNfUkVTT1VSQ0VfTkFNRSwKLQkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAgIC5wbSA9ICZzdG1tYWNfcGx0ZnJfcG1fb3BzLAogCQkgICAub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoc3RtbWFjX2R0X2lkcyksCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9zdW52bmV0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vc3Vudm5ldC5jCmluZGV4IDQ1YzQwOGUuLmQyODM1YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9zdW52bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL3N1bnZuZXQuYwpAQCAtMTIwMSw2ICsxMjAxLDcgQEAKIAkJc2VncyA9IHNrYl9nc29fc2VnbWVudChza2IsIGRldi0+ZmVhdHVyZXMgJiB+TkVUSUZfRl9UU08pOwogCWlmIChJU19FUlIoc2VncykpIHsKIAkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmMKaW5kZXggYzU2MGY5YS4uYTM5MTMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3cuYwpAQCAtNjEwLDcgKzYxMCw3IEBACiAKIAkJCS8qIENsZWFyIGFsbCBtY2FzdCBmcm9tIEFMRSAqLwogCQkJY3Bzd19hbGVfZmx1c2hfbXVsdGljYXN0KGFsZSwgQUxFX0FMTF9QT1JUUyA8PAotCQkJCQkJIHByaXYtPmhvc3RfcG9ydCk7CisJCQkJCQkgcHJpdi0+aG9zdF9wb3J0LCAtMSk7CiAKIAkJCS8qIEZsb29kIEFsbCBVbmljYXN0IFBhY2tldHMgdG8gSG9zdCBwb3J0ICovCiAJCQljcHN3X2FsZV9jb250cm9sX3NldChhbGUsIDAsIEFMRV9QMF9VTklfRkxPT0QsIDEpOwpAQCAtNjM0LDYgKzYzNCwxMiBAQAogc3RhdGljIHZvaWQgY3Bzd19uZG9fc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IGNwc3dfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCB2aWQ7CisKKwlpZiAocHJpdi0+ZGF0YS5kdWFsX2VtYWMpCisJCXZpZCA9IHByaXYtPnNsYXZlc1twcml2LT5lbWFjX3BvcnRdLnBvcnRfdmxhbjsKKwllbHNlCisJCXZpZCA9IHByaXYtPmRhdGEuZGVmYXVsdF92bGFuOwogCiAJaWYgKG5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KQEAgLTY0OSw3ICs2NTUsOCBAQAogCWNwc3dfYWxlX3NldF9hbGxtdWx0aShwcml2LT5hbGUsIHByaXYtPm5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKTsKIAogCS8qIENsZWFyIGFsbCBtY2FzdCBmcm9tIEFMRSAqLwotCWNwc3dfYWxlX2ZsdXNoX211bHRpY2FzdChwcml2LT5hbGUsIEFMRV9BTExfUE9SVFMgPDwgcHJpdi0+aG9zdF9wb3J0KTsKKwljcHN3X2FsZV9mbHVzaF9tdWx0aWNhc3QocHJpdi0+YWxlLCBBTEVfQUxMX1BPUlRTIDw8IHByaXYtPmhvc3RfcG9ydCwKKwkJCQkgdmlkKTsKIAogCWlmICghbmV0ZGV2X21jX2VtcHR5KG5kZXYpKSB7CiAJCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CkBAIC03NTcsNiArNzY0LDE0IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgY3Bzd19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBjcHN3X3ByaXYgKnByaXYgPSBkZXZfaWQ7CisJaW50IHZhbHVlID0gaXJxIC0gcHJpdi0+aXJxc190YWJsZVswXTsKKworCS8qIE5PVElDRTogRW5kaW5nIElSUSBoZXJlLiBUaGUgdHJpY2sgd2l0aCB0aGUgJ3ZhbHVlJyB2YXJpYWJsZSBhYm92ZQorCSAqIGlzIHRvIG1ha2Ugc3VyZSB3ZSB3aWxsIGFsd2F5cyB3cml0ZSB0aGUgY29ycmVjdCB2YWx1ZSB0byB0aGUgRU9JCisJICogcmVnaXN0ZXIuIE5hbWVseSAwIGZvciBSWF9USFJFU0ggSW50ZXJydXB0LCAxIGZvciBSWCBJbnRlcnJ1cHQsIDIKKwkgKiBmb3IgVFggSW50ZXJydXB0IGFuZCAzIGZvciBNSVNDIEludGVycnVwdC4KKwkgKi8KKwljcGRtYV9jdGxyX2VvaShwcml2LT5kbWEsIHZhbHVlKTsKIAogCWNwc3dfaW50cl9kaXNhYmxlKHByaXYpOwogCWlmIChwcml2LT5pcnFfZW5hYmxlZCA9PSB0cnVlKSB7CkBAIC03ODYsOCArODAxLDYgQEAKIAlpbnQJCQludW1fdHgsIG51bV9yeDsKIAogCW51bV90eCA9IGNwZG1hX2NoYW5fcHJvY2Vzcyhwcml2LT50eGNoLCAxMjgpOwotCWlmIChudW1fdHgpCi0JCWNwZG1hX2N0bHJfZW9pKHByaXYtPmRtYSwgQ1BETUFfRU9JX1RYKTsKIAogCW51bV9yeCA9IGNwZG1hX2NoYW5fcHJvY2Vzcyhwcml2LT5yeGNoLCBidWRnZXQpOwogCWlmIChudW1fcnggPCBidWRnZXQpIHsKQEAgLTc5NSw3ICs4MDgsNiBAQAogCiAJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWNwc3dfaW50cl9lbmFibGUocHJpdik7Ci0JCWNwZG1hX2N0bHJfZW9pKHByaXYtPmRtYSwgQ1BETUFfRU9JX1JYKTsKIAkJcHJpbV9jcHN3ID0gY3Bzd19nZXRfc2xhdmVfcHJpdihwcml2LCAwKTsKIAkJaWYgKHByaW1fY3Bzdy0+aXJxX2VuYWJsZWQgPT0gZmFsc2UpIHsKIAkJCXByaW1fY3Bzdy0+aXJxX2VuYWJsZWQgPSB0cnVlOwpAQCAtMTMxMCw4ICsxMzIyLDYgQEAKIAluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CiAJY3BkbWFfY3Rscl9zdGFydChwcml2LT5kbWEpOwogCWNwc3dfaW50cl9lbmFibGUocHJpdik7Ci0JY3BkbWFfY3Rscl9lb2kocHJpdi0+ZG1hLCBDUERNQV9FT0lfUlgpOwotCWNwZG1hX2N0bHJfZW9pKHByaXYtPmRtYSwgQ1BETUFfRU9JX1RYKTsKIAogCXByaW1fY3BzdyA9IGNwc3dfZ2V0X3NsYXZlX3ByaXYocHJpdiwgMCk7CiAJaWYgKHByaW1fY3Bzdy0+aXJxX2VuYWJsZWQgPT0gZmFsc2UpIHsKQEAgLTE1NzgsOSArMTU4OCw2IEBACiAJY3BkbWFfY2hhbl9zdGFydChwcml2LT50eGNoKTsKIAljcGRtYV9jdGxyX2ludF9jdHJsKHByaXYtPmRtYSwgdHJ1ZSk7CiAJY3Bzd19pbnRyX2VuYWJsZShwcml2KTsKLQljcGRtYV9jdGxyX2VvaShwcml2LT5kbWEsIENQRE1BX0VPSV9SWCk7Ci0JY3BkbWFfY3Rscl9lb2kocHJpdi0+ZG1hLCBDUERNQV9FT0lfVFgpOwotCiB9CiAKIHN0YXRpYyBpbnQgY3Bzd19uZG9fc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB2b2lkICpwKQpAQCAtMTYyMCw5ICsxNjI3LDYgQEAKIAljcHN3X2ludGVycnVwdChuZGV2LT5pcnEsIHByaXYpOwogCWNwZG1hX2N0bHJfaW50X2N0cmwocHJpdi0+ZG1hLCB0cnVlKTsKIAljcHN3X2ludHJfZW5hYmxlKHByaXYpOwotCWNwZG1hX2N0bHJfZW9pKHByaXYtPmRtYSwgQ1BETUFfRU9JX1JYKTsKLQljcGRtYV9jdGxyX2VvaShwcml2LT5kbWEsIENQRE1BX0VPSV9UWCk7Ci0KIH0KICNlbmRpZgogCkBAIC0xNjMwLDE2ICsxNjM0LDI0IEBACiAJCQkJdW5zaWduZWQgc2hvcnQgdmlkKQogewogCWludCByZXQ7Ci0JaW50IHVucmVnX21jYXN0X21hc2s7CisJaW50IHVucmVnX21jYXN0X21hc2sgPSAwOworCXUzMiBwb3J0X21hc2s7CiAKLQlpZiAocHJpdi0+bmRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCi0JCXVucmVnX21jYXN0X21hc2sgPSBBTEVfQUxMX1BPUlRTOwotCWVsc2UKLQkJdW5yZWdfbWNhc3RfbWFzayA9IEFMRV9QT1JUXzEgfCBBTEVfUE9SVF8yOworCWlmIChwcml2LT5kYXRhLmR1YWxfZW1hYykgeworCQlwb3J0X21hc2sgPSAoMSA8PCAocHJpdi0+ZW1hY19wb3J0ICsgMSkpIHwgQUxFX1BPUlRfSE9TVDsKIAotCXJldCA9IGNwc3dfYWxlX2FkZF92bGFuKHByaXYtPmFsZSwgdmlkLAotCQkJCUFMRV9BTExfUE9SVFMgPDwgcHJpdi0+aG9zdF9wb3J0LAotCQkJCTAsIEFMRV9BTExfUE9SVFMgPDwgcHJpdi0+aG9zdF9wb3J0LAorCQlpZiAocHJpdi0+bmRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCQl1bnJlZ19tY2FzdF9tYXNrID0gcG9ydF9tYXNrOworCX0gZWxzZSB7CisJCXBvcnRfbWFzayA9IEFMRV9BTExfUE9SVFM7CisKKwkJaWYgKHByaXYtPm5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQorCQkJdW5yZWdfbWNhc3RfbWFzayA9IEFMRV9BTExfUE9SVFM7CisJCWVsc2UKKwkJCXVucmVnX21jYXN0X21hc2sgPSBBTEVfUE9SVF8xIHwgQUxFX1BPUlRfMjsKKwl9CisKKwlyZXQgPSBjcHN3X2FsZV9hZGRfdmxhbihwcml2LT5hbGUsIHZpZCwgcG9ydF9tYXNrLCAwLCBwb3J0X21hc2ssCiAJCQkJdW5yZWdfbWNhc3RfbWFzayA8PCBwcml2LT5ob3N0X3BvcnQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTE2NTAsOCArMTY2Miw3IEBACiAJCWdvdG8gY2xlYW5fdmlkOwogCiAJcmV0ID0gY3Bzd19hbGVfYWRkX21jYXN0KHByaXYtPmFsZSwgcHJpdi0+bmRldi0+YnJvYWRjYXN0LAotCQkJCSBBTEVfQUxMX1BPUlRTIDw8IHByaXYtPmhvc3RfcG9ydCwKLQkJCQkgQUxFX1ZMQU4sIHZpZCwgMCk7CisJCQkJIHBvcnRfbWFzaywgQUxFX1ZMQU4sIHZpZCwgMCk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGNsZWFuX3ZsYW5fdWNhc3Q7CiAJcmV0dXJuIDA7CkBAIC0xNjcyLDYgKzE2ODMsMTkgQEAKIAlpZiAodmlkID09IHByaXYtPmRhdGEuZGVmYXVsdF92bGFuKQogCQlyZXR1cm4gMDsKIAorCWlmIChwcml2LT5kYXRhLmR1YWxfZW1hYykgeworCQkvKiBJbiBkdWFsIEVNQUMsIHJlc2VydmVkIFZMQU4gaWQgc2hvdWxkIG5vdCBiZSB1c2VkIGZvcgorCQkgKiBjcmVhdGluZyBWTEFOIGludGVyZmFjZXMgYXMgdGhpcyBjYW4gYnJlYWsgdGhlIGR1YWwKKwkJICogRU1BQyBwb3J0IHNlcGFyYXRpb24KKwkJICovCisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5kYXRhLnNsYXZlczsgaSsrKSB7CisJCQlpZiAodmlkID09IHByaXYtPnNsYXZlc1tpXS5wb3J0X3ZsYW4pCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKIAlkZXZfaW5mbyhwcml2LT5kZXYsICJBZGRpbmcgdmxhbmlkICVkIHRvIHZsYW4gZmlsdGVyXG4iLCB2aWQpOwogCXJldHVybiBjcHN3X2FkZF92bGFuX2FsZV9lbnRyeShwcml2LCB2aWQpOwogfQpAQCAtMTY4NSw2ICsxNzA5LDE1IEBACiAJaWYgKHZpZCA9PSBwcml2LT5kYXRhLmRlZmF1bHRfdmxhbikKIAkJcmV0dXJuIDA7CiAKKwlpZiAocHJpdi0+ZGF0YS5kdWFsX2VtYWMpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IHByaXYtPmRhdGEuc2xhdmVzOyBpKyspIHsKKwkJCWlmICh2aWQgPT0gcHJpdi0+c2xhdmVzW2ldLnBvcnRfdmxhbikKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwogCWRldl9pbmZvKHByaXYtPmRldiwgInJlbW92aW5nIHZsYW5pZCAlZCBmcm9tIHZsYW4gZmlsdGVyXG4iLCB2aWQpOwogCXJldCA9IGNwc3dfYWxlX2RlbF92bGFuKHByaXYtPmFsZSwgdmlkLCAwKTsKIAlpZiAocmV0ICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X2FsZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19hbGUuYwppbmRleCAwOTdlYmU3Li41MjQ2YjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X2FsZS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfYWxlLmMKQEAgLTIzNCw3ICsyMzQsNyBAQAogCQljcHN3X2FsZV9zZXRfZW50cnlfdHlwZShhbGVfZW50cnksIEFMRV9UWVBFX0ZSRUUpOwogfQogCi1pbnQgY3Bzd19hbGVfZmx1c2hfbXVsdGljYXN0KHN0cnVjdCBjcHN3X2FsZSAqYWxlLCBpbnQgcG9ydF9tYXNrKQoraW50IGNwc3dfYWxlX2ZsdXNoX211bHRpY2FzdChzdHJ1Y3QgY3Bzd19hbGUgKmFsZSwgaW50IHBvcnRfbWFzaywgaW50IHZpZCkKIHsKIAl1MzIgYWxlX2VudHJ5W0FMRV9FTlRSWV9XT1JEU107CiAJaW50IHJldCwgaWR4OwpAQCAtMjQ1LDYgKzI0NSwxNCBAQAogCQlpZiAocmV0ICE9IEFMRV9UWVBFX0FERFIgJiYgcmV0ICE9IEFMRV9UWVBFX1ZMQU5fQUREUikKIAkJCWNvbnRpbnVlOwogCisJCS8qIGlmIHZpZCBwYXNzZWQgaXMgLTEgdGhlbiByZW1vdmUgYWxsIG11bHRpY2FzdCBlbnRyeSBmcm9tCisJCSAqIHRoZSB0YWJsZSBpcnJlc3BlY3RpdmUgb2YgdmxhbiBpZCwgaWYgYSB2YWxpZCB2bGFuIGlkIGlzCisJCSAqIHBhc3NlZCB0aGVuIHJlbW92ZSBvbmx5IG11bHRpY2FzdCBhZGRlZCB0byB0aGF0IHZsYW4gaWQuCisJCSAqIGlmIHZsYW4gaWQgZG9lc24ndCBtYXRjaCB0aGVuIG1vdmUgb24gdG8gbmV4dCBlbnRyeS4KKwkJICovCisJCWlmICh2aWQgIT0gLTEgJiYgY3Bzd19hbGVfZ2V0X3ZsYW5faWQoYWxlX2VudHJ5KSAhPSB2aWQpCisJCQljb250aW51ZTsKKwogCQlpZiAoY3Bzd19hbGVfZ2V0X21jYXN0KGFsZV9lbnRyeSkpIHsKIAkJCXU4IGFkZHJbNl07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfYWxlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X2FsZS5oCmluZGV4IGMwZDQxMjcuLmFmMWU3ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfYWxlLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19hbGUuaApAQCAtOTIsNyArOTIsNyBAQAogCiBpbnQgY3Bzd19hbGVfc2V0X2FnZW91dChzdHJ1Y3QgY3Bzd19hbGUgKmFsZSwgaW50IGFnZW91dCk7CiBpbnQgY3Bzd19hbGVfZmx1c2goc3RydWN0IGNwc3dfYWxlICphbGUsIGludCBwb3J0X21hc2spOwotaW50IGNwc3dfYWxlX2ZsdXNoX211bHRpY2FzdChzdHJ1Y3QgY3Bzd19hbGUgKmFsZSwgaW50IHBvcnRfbWFzayk7CitpbnQgY3Bzd19hbGVfZmx1c2hfbXVsdGljYXN0KHN0cnVjdCBjcHN3X2FsZSAqYWxlLCBpbnQgcG9ydF9tYXNrLCBpbnQgdmlkKTsKIGludCBjcHN3X2FsZV9hZGRfdWNhc3Qoc3RydWN0IGNwc3dfYWxlICphbGUsIHU4ICphZGRyLCBpbnQgcG9ydCwKIAkJICAgICAgIGludCBmbGFncywgdTE2IHZpZCk7CiBpbnQgY3Bzd19hbGVfZGVsX3VjYXN0KHN0cnVjdCBjcHN3X2FsZSAqYWxlLCB1OCAqYWRkciwgaW50IHBvcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX2VtYWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jCmluZGV4IGVhNzEyNTEuLjVmYWU0MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfbWRpby5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX25ldC5oPgogCkBAIC0zNDMsOSArMzQ0LDcgQEAKIAl1MzIgbXVsdGljYXN0X2hhc2hfY250W0VNQUNfTlVNX01VTFRJQ0FTVF9CSVRTXTsKIAl1MzIgcnhfYWRkcl90eXBlOwogCWNvbnN0IGNoYXIgKnBoeV9pZDsKLSNpZmRlZiBDT05GSUdfT0YKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeV9ub2RlOwotI2VuZGlmCiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAlzcGlubG9ja190IGxvY2s7CiAJLypwbGF0Zm9ybSBzcGVjaWZpYyBtZW1iZXJzKi8KQEAgLTkyMiw2ICs5MjEsMTYgQEAKIAkJaWYgKHByaXYtPmludF9kaXNhYmxlKQogCQkJcHJpdi0+aW50X2Rpc2FibGUoKTsKIAorCQkvKiBOT1RFOiBSeCBUaHJlc2hvbGQgYW5kIE1pc2MgaW50ZXJydXB0cyBhcmUgbm90IGVuYWJsZWQgKi8KKworCQkvKiBhY2sgcnhlbiBvbmx5IHRoZW4gYSBuZXcgcHVsc2Ugd2lsbCBiZSBnZW5lcmF0ZWQgKi8KKwkJZW1hY193cml0ZShFTUFDX0RNNjQ2WF9NQUNFT0lWRUNUT1IsCisJCQlFTUFDX0RNNjQ2WF9NQUNfRU9JX0MwX1JYRU4pOworCisJCS8qIGFjayB0eGVuLSBvbmx5IHRoZW4gYSBuZXcgcHVsc2Ugd2lsbCBiZSBnZW5lcmF0ZWQgKi8KKwkJZW1hY193cml0ZShFTUFDX0RNNjQ2WF9NQUNFT0lWRUNUT1IsCisJCQlFTUFDX0RNNjQ2WF9NQUNfRU9JX0MwX1RYRU4pOworCiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCX0gZWxzZSB7CkBAIC05NTEsMTUgKzk2MCw2IEBACiAJCSAqIHJlZ2lzdGVyICovCiAKIAkJLyogTk9URTogUnggVGhyZXNob2xkIGFuZCBNaXNjIGludGVycnVwdHMgYXJlIG5vdCBlbmFibGVkICovCi0KLQkJLyogYWNrIHJ4ZW4gb25seSB0aGVuIGEgbmV3IHB1bHNlIHdpbGwgYmUgZ2VuZXJhdGVkICovCi0JCWVtYWNfd3JpdGUoRU1BQ19ETTY0NlhfTUFDRU9JVkVDVE9SLAotCQkJRU1BQ19ETTY0NlhfTUFDX0VPSV9DMF9SWEVOKTsKLQotCQkvKiBhY2sgdHhlbi0gb25seSB0aGVuIGEgbmV3IHB1bHNlIHdpbGwgYmUgZ2VuZXJhdGVkICovCi0JCWVtYWNfd3JpdGUoRU1BQ19ETTY0NlhfTUFDRU9JVkVDVE9SLAotCQkJRU1BQ19ETTY0NlhfTUFDX0VPSV9DMF9UWEVOKTsKLQogCX0gZWxzZSB7CiAJCS8qIFNldCBETTY0NHggY29udHJvbCByZWdpc3RlcnMgZm9yIGludGVycnVwdCBjb250cm9sICovCiAJCWVtYWNfY3RybF93cml0ZShFTUFDX0NUUkxfRVdDVEwsIDB4MSk7CkBAIC0xNTM3LDcgKzE1MzcsMTMgQEAKIAlpbnQgaSA9IDA7CiAJc3RydWN0IGVtYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCi0JcG1fcnVudGltZV9nZXQoJnByaXYtPnBkZXYtPmRldik7CisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYygmcHJpdi0+cGRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnByaXYtPnBkZXYtPmRldik7CisJCWRldl9lcnIoJnByaXYtPnBkZXYtPmRldiwgIiVzOiBmYWlsZWQgdG8gZ2V0X3N5bmMoJWQpXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQogCiAJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiAJZm9yIChjbnQgPSAwOyBjbnQgPCBFVEhfQUxFTjsgY250KyspCkBAIC0xNTk2LDggKzE2MDIsMjAgQEAKIAljcGRtYV9jdGxyX3N0YXJ0KHByaXYtPmRtYSk7CiAKIAlwcml2LT5waHlkZXYgPSBOVUxMOworCisJaWYgKHByaXYtPnBoeV9ub2RlKSB7CisJCXByaXYtPnBoeWRldiA9IG9mX3BoeV9jb25uZWN0KG5kZXYsIHByaXYtPnBoeV9ub2RlLAorCQkJCQkgICAgICAmZW1hY19hZGp1c3RfbGluaywgMCwgMCk7CisJCWlmICghcHJpdi0+cGh5ZGV2KSB7CisJCQlkZXZfZXJyKGVtYWNfZGV2LCAiY291bGQgbm90IGNvbm5lY3QgdG8gcGh5ICVzXG4iLAorCQkJCXByaXYtPnBoeV9ub2RlLT5mdWxsX25hbWUpOworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCiAJLyogdXNlIHRoZSBmaXJzdCBwaHkgb24gdGhlIGJ1cyBpZiBwZGF0YSBkaWQgbm90IGdpdmUgdXMgYSBwaHkgaWQgKi8KLQlpZiAoIXByaXYtPnBoeV9pZCkgeworCWlmICghcHJpdi0+cGh5ZGV2ICYmICFwcml2LT5waHlfaWQpIHsKIAkJc3RydWN0IGRldmljZSAqcGh5OwogCiAJCXBoeSA9IGJ1c19maW5kX2RldmljZSgmbWRpb19idXNfdHlwZSwgTlVMTCwgTlVMTCwKQEAgLTE2MDYsNyArMTYyNCw3IEBACiAJCQlwcml2LT5waHlfaWQgPSBkZXZfbmFtZShwaHkpOwogCX0KIAotCWlmIChwcml2LT5waHlfaWQgJiYgKnByaXYtPnBoeV9pZCkgeworCWlmICghcHJpdi0+cGh5ZGV2ICYmIHByaXYtPnBoeV9pZCAmJiAqcHJpdi0+cGh5X2lkKSB7CiAJCXByaXYtPnBoeWRldiA9IHBoeV9jb25uZWN0KG5kZXYsIHByaXYtPnBoeV9pZCwKIAkJCQkJICAgJmVtYWNfYWRqdXN0X2xpbmssCiAJCQkJCSAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwpAQCAtMTYyNyw3ICsxNjQ1LDkgQEAKIAkJCSIobWlpX2J1czpwaHlfYWRkcj0lcywgaWQ9JXgpXG4iLAogCQkJcHJpdi0+cGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwcml2LT5waHlkZXYtPmRldiksCiAJCQlwcml2LT5waHlkZXYtPnBoeV9pZCk7Ci0JfSBlbHNlIHsKKwl9CisKKwlpZiAoIXByaXYtPnBoeWRldikgewogCQkvKiBObyBQSFkgLCBmaXggdGhlIGxpbmssIHNwZWVkIGFuZCBkdXBsZXggc2V0dGluZ3MgKi8KIAkJZGV2X25vdGljZShlbWFjX2RldiwgIm5vIHBoeSwgZGVmYXVsdGluZyB0byAxMDAvZnVsbFxuIik7CiAJCXByaXYtPmxpbmsgPSAxOwpAQCAtMTcyNCw2ICsxNzQ0LDE1IEBACiAJc3RydWN0IGVtYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXUzMiBtYWNfY29udHJvbDsKIAl1MzIgc3RhdHNfY2xlYXJfbWFzazsKKwlpbnQgZXJyOworCisJZXJyID0gcG1fcnVudGltZV9nZXRfc3luYygmcHJpdi0+cGRldi0+ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnByaXYtPnBkZXYtPmRldik7CisJCWRldl9lcnIoJnByaXYtPnBkZXYtPmRldiwgIiVzOiBmYWlsZWQgdG8gZ2V0X3N5bmMoJWQpXG4iLAorCQkJX19mdW5jX18sIGVycik7CisJCXJldHVybiAmbmRldi0+c3RhdHM7CisJfQogCiAJLyogdXBkYXRlIGVtYWMgaGFyZHdhcmUgc3RhdHMgYW5kIHJlc2V0IHRoZSByZWdpc3RlcnMqLwogCkBAIC0xNzY2LDYgKzE3OTUsOCBAQAogCW5kZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzICs9IGVtYWNfcmVhZChFTUFDX1RYVU5ERVJSVU4pOwogCWVtYWNfd3JpdGUoRU1BQ19UWFVOREVSUlVOLCBzdGF0c19jbGVhcl9tYXNrKTsKIAorCXBtX3J1bnRpbWVfcHV0KCZwcml2LT5wZGV2LT5kZXYpOworCiAJcmV0dXJuICZuZGV2LT5zdGF0czsKIH0KIApAQCAtMTg1OSw3ICsxODkwLDcgQEAKIHN0YXRpYyBpbnQgZGF2aW5jaV9lbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJjID0gMDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKnJlc19jdHJsOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCXN0cnVjdCBlbWFjX3ByaXYgKnByaXY7CiAJdW5zaWduZWQgbG9uZyBod19yYW1fYWRkcjsKQEAgLTE4NzYsNiArMTkwNyw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWVtYWNfYnVzX2ZyZXF1ZW5jeSA9IGNsa19nZXRfcmF0ZShlbWFjX2Nsayk7CisJZGV2bV9jbGtfcHV0KCZwZGV2LT5kZXYsIGVtYWNfY2xrKTsKIAogCS8qIFRPRE86IFByb2JlIFBIWSBoZXJlIGlmIHBvc3NpYmxlICovCiAKQEAgLTE5MTcsMTEgKzE5NDksMjAgQEAKIAkJcmMgPSBQVFJfRVJSKHByaXYtPnJlbWFwX2FkZHIpOwogCQlnb3RvIG5vX3BkYXRhOwogCX0KKworCXJlc19jdHJsID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlpZiAocmVzX2N0cmwpIHsKKwkJcHJpdi0+Y3RybF9iYXNlID0KKwkJCWRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXNfY3RybCk7CisJCWlmIChJU19FUlIocHJpdi0+Y3RybF9iYXNlKSkKKwkJCWdvdG8gbm9fcGRhdGE7CisJfSBlbHNlIHsKKwkJcHJpdi0+Y3RybF9iYXNlID0gcHJpdi0+cmVtYXBfYWRkciArIHBkYXRhLT5jdHJsX21vZF9yZWdfb2Zmc2V0OworCX0KKwogCXByaXYtPmVtYWNfYmFzZSA9IHByaXYtPnJlbWFwX2FkZHIgKyBwZGF0YS0+Y3RybF9yZWdfb2Zmc2V0OwogCW5kZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKXByaXYtPnJlbWFwX2FkZHI7CiAKLQlwcml2LT5jdHJsX2Jhc2UgPSBwcml2LT5yZW1hcF9hZGRyICsgcGRhdGEtPmN0cmxfbW9kX3JlZ19vZmZzZXQ7Ci0KIAlod19yYW1fYWRkciA9IHBkYXRhLT5od19yYW1fYWRkcjsKIAlpZiAoIWh3X3JhbV9hZGRyKQogCQlod19yYW1fYWRkciA9ICh1MzIgX19mb3JjZSlyZXMtPnN0YXJ0ICsgcGRhdGEtPmN0cmxfcmFtX29mZnNldDsKQEAgLTE5ODAsMTIgKzIwMjEsMjIgQEAKIAluZGV2LT5ldGh0b29sX29wcyA9ICZldGh0b29sX29wczsKIAluZXRpZl9uYXBpX2FkZChuZGV2LCAmcHJpdi0+bmFwaSwgZW1hY19wb2xsLCBFTUFDX1BPTExfV0VJR0hUKTsKIAorCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCXJjID0gcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKKwlpZiAocmMgPCAwKSB7CisJCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IGZhaWxlZCB0byBnZXRfc3luYyglZClcbiIsCisJCQlfX2Z1bmNfXywgcmMpOworCQlnb3RvIG5vX2NwZG1hX2NoYW47CisJfQorCiAJLyogcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlICovCiAJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7CiAJaWYgKHJjKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIGluIHJlZ2lzdGVyX25ldGRldlxuIik7CiAJCXJjID0gLUVOT0RFVjsKKwkJcG1fcnVudGltZV9wdXQoJnBkZXYtPmRldik7CiAJCWdvdG8gbm9fY3BkbWFfY2hhbjsKIAl9CiAKQEAgLTE5OTUsOSArMjA0Niw3IEBACiAJCQkgICAiKHJlZ3M6ICVwLCBpcnE6ICVkKVxuIiwKIAkJCSAgICh2b2lkICopcHJpdi0+ZW1hY19iYXNlX3BoeXMsIG5kZXYtPmlycSk7CiAJfQotCi0JcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Ci0JcG1fcnVudGltZV9yZXN1bWUoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXQoJnBkZXYtPmRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMjA3MSw5ICsyMTIwLDE0IEBACiAJLmh3X3JhbV9hZGRyCQk9IDB4MDFlMjAwMDAsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGVtYWNfcGxhdGZvcm1fZGF0YSBkbTgxNl9lbWFjX2RhdGEgPSB7CisJLnZlcnNpb24JCT0gRU1BQ19WRVJTSU9OXzIsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkYXZpbmNpX2VtYWNfb2ZfbWF0Y2hbXSA9IHsKIAl7LmNvbXBhdGlibGUgPSAidGksZGF2aW5jaS1kbTY0NjctZW1hYyIsIH0sCiAJey5jb21wYXRpYmxlID0gInRpLGFtMzUxNy1lbWFjIiwgLmRhdGEgPSAmYW0zNTE3X2VtYWNfZGF0YSwgfSwKKwl7LmNvbXBhdGlibGUgPSAidGksZG04MTYtZW1hYyIsIC5kYXRhID0gJmRtODE2X2VtYWNfZGF0YSwgfSwKIAl7fSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkYXZpbmNpX2VtYWNfb2ZfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L2xsX3RlbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9sbF90ZW1hY19tYWluLmMKaW5kZXggOWMyZDkxZS4uZGJjYmYwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L2xsX3RlbWFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvbGxfdGVtYWNfbWFpbi5jCkBAIC0xMDQzLDYgKzEwNDMsNyBAQAogCWxwLT5yZWdzID0gb2ZfaW9tYXAob3AtPmRldi5vZl9ub2RlLCAwKTsKIAlpZiAoIWxwLT5yZWdzKSB7CiAJCWRldl9lcnIoJm9wLT5kZXYsICJjb3VsZCBub3QgbWFwIHRlbWFjIHJlZ3MuXG4iKTsKKwkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIG5vZGV2OwogCX0KIApAQCAtMTA2Miw2ICsxMDYzLDcgQEAKIAlucCA9IG9mX3BhcnNlX3BoYW5kbGUob3AtPmRldi5vZl9ub2RlLCAibGxpbmstY29ubmVjdGVkIiwgMCk7CiAJaWYgKCFucCkgewogCQlkZXZfZXJyKCZvcC0+ZGV2LCAiY291bGQgbm90IGZpbmQgRE1BIG5vZGVcbiIpOworCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oCmluZGV4IDQ0YjhkMmIuLjRjOWI0ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oCkBAIC0zODgsNyArMzg4LDYgQEAKICAqIEBkbWFfZXJyX3Rhc2tsZXQ6IFRhc2tsZXQgc3RydWN0dXJlIHRvIHByb2Nlc3MgQXhpIERNQSBlcnJvcnMKICAqIEB0eF9pcnE6CUF4aWRtYSBUWCBJUlEgbnVtYmVyCiAgKiBAcnhfaXJxOglBeGlkbWEgUlggSVJRIG51bWJlcgotICogQHRlbWFjX3R5cGU6CWF4aWVuZXQgdHlwZSB0byBpZGVudGlmeSBiZXR3ZWVuIHNvZnQgYW5kIGhhcmQgdGVtYWMKICAqIEBwaHlfdHlwZToJUGh5IHR5cGUgdG8gaWRlbnRpZnkgYmV0d2VlbiBNSUkvR01JSS9SR01JSS9TR01JSS8xMDAwIEJhc2UtWAogICogQG9wdGlvbnM6CUF4aUV0aGVybmV0IG9wdGlvbiB3b3JkCiAgKiBAbGFzdF9saW5rOglQaHkgbGluayBzdGF0ZSBpbiB3aGljaCB0aGUgUEhZIHdhcyBuZWdvdGlhdGVkIGVhcmxpZXIKQEAgLTQzMSw3ICs0MzAsNiBAQAogCiAJaW50IHR4X2lycTsKIAlpbnQgcnhfaXJxOwotCXUzMiB0ZW1hY190eXBlOwogCXUzMiBwaHlfdHlwZTsKIAogCXUzMiBvcHRpb25zOwkJCS8qIEN1cnJlbnQgb3B0aW9ucyB3b3JkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYwppbmRleCA0ZWEyZDRlLi5hNmQyODYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMKQEAgLTE1MDEsNiArMTUwMSw3IEBACiAJbHAtPnJlZ3MgPSBvZl9pb21hcChvcC0+ZGV2Lm9mX25vZGUsIDApOwogCWlmICghbHAtPnJlZ3MpIHsKIAkJZGV2X2Vycigmb3AtPmRldiwgImNvdWxkIG5vdCBtYXAgQXhpIEV0aGVybmV0IHJlZ3MuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBub2RldjsKIAl9CiAJLyogU2V0dXAgY2hlY2tzdW0gb2ZmbG9hZCwgYnV0IGRlZmF1bHQgdG8gb2ZmIGlmIG5vdCBzcGVjaWZpZWQgKi8KQEAgLTE1NTUsMTAgKzE1NTYsNiBAQAogCQlpZiAoKGJlMzJfdG9fY3B1cChwKSkgPj0gMHg0MDAwKQogCQkJbHAtPmp1bWJvX3N1cHBvcnQgPSAxOwogCX0KLQlwID0gKF9fYmUzMiAqKSBvZl9nZXRfcHJvcGVydHkob3AtPmRldi5vZl9ub2RlLCAieGxueCx0ZW1hYy10eXBlIiwKLQkJCQkgICAgICAgTlVMTCk7Ci0JaWYgKHApCi0JCWxwLT50ZW1hY190eXBlID0gYmUzMl90b19jcHVwKHApOwogCXAgPSAoX19iZTMyICopIG9mX2dldF9wcm9wZXJ0eShvcC0+ZGV2Lm9mX25vZGUsICJ4bG54LHBoeS10eXBlIiwgTlVMTCk7CiAJaWYgKHApCiAJCWxwLT5waHlfdHlwZSA9IGJlMzJfdG9fY3B1cChwKTsKQEAgLTE1NjcsNiArMTU2NCw3IEBACiAJbnAgPSBvZl9wYXJzZV9waGFuZGxlKG9wLT5kZXYub2Zfbm9kZSwgImF4aXN0cmVhbS1jb25uZWN0ZWQiLCAwKTsKIAlpZiAoIW5wKSB7CiAJCWRldl9lcnIoJm9wLT5kZXYsICJjb3VsZCBub3QgZmluZCBETUEgbm9kZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQogCWxwLT5kbWFfcmVncyA9IG9mX2lvbWFwKG5wLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfZW1hY2xpdGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfZW1hY2xpdGUuYwppbmRleCAyNDg1ODc5Li45ZDRjZTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2VtYWNsaXRlLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9lbWFjbGl0ZS5jCkBAIC0xMTA5LDYgKzExMDksNyBAQAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShvZmRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwogCWlmICghcmVzKSB7CiAJCWRldl9lcnIoZGV2LCAibm8gSVJRIGZvdW5kXG4iKTsKKwkJcmMgPSAtRU5YSU87CiAJCWdvdG8gZXJyb3I7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oIGIvZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaAppbmRleCAyZjQ4Zjc5Li4zODRjYTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oCisrKyBiL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmgKQEAgLTU5MCw2ICs1OTAsNyBAQAogCiAKICNkZWZpbmUgTkVUVlNDX1JFQ0VJVkVfQlVGRkVSX0lECQkweGNhZmUKKyNkZWZpbmUgTkVUVlNDX1NFTkRfQlVGRkVSX0lECQkJMAogCiAjZGVmaW5lIE5FVFZTQ19QQUNLRVRfU0laRSAgICAgICAgICAgICAgICAgICAgICA0MDk2CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYwppbmRleCBkZDg2N2U2Li45ZjQ5YzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMKKysrIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jCkBAIC0xNjEsOCArMTYxLDggQEAKIAogCS8qIERlYWwgd2l0aCB0aGUgc2VuZCBidWZmZXIgd2UgbWF5IGhhdmUgc2V0dXAuCiAJICogSWYgd2UgZ290IGEgIHNlbmQgc2VjdGlvbiBzaXplLCBpdCBtZWFucyB3ZSByZWNlaXZlZCBhCi0JICogU2VuZHNlbmRCdWZmZXJDb21wbGV0ZSBtc2cgKGllIHNlbnQKLQkgKiBOdnNwTWVzc2FnZTFUeXBlU2VuZFJlY2VpdmVCdWZmZXIgbXNnKSB0aGVyZWZvcmUsIHdlIG5lZWQKKwkgKiBOVlNQX01TRzFfVFlQRV9TRU5EX1NFTkRfQlVGX0NPTVBMRVRFIG1zZyAoaWUgc2VudAorCSAqIE5WU1BfTVNHMV9UWVBFX1NFTkRfU0VORF9CVUYgbXNnKSB0aGVyZWZvcmUsIHdlIG5lZWQKIAkgKiB0byBzZW5kIGEgcmV2b2tlIG1zZyBoZXJlCiAJICovCiAJaWYgKG5ldF9kZXZpY2UtPnNlbmRfc2VjdGlvbl9zaXplKSB7CkBAIC0xNzIsNyArMTcyLDggQEAKIAogCQlyZXZva2VfcGFja2V0LT5oZHIubXNnX3R5cGUgPQogCQkJTlZTUF9NU0cxX1RZUEVfUkVWT0tFX1NFTkRfQlVGOwotCQlyZXZva2VfcGFja2V0LT5tc2cudjFfbXNnLnJldm9rZV9yZWN2X2J1Zi5pZCA9IDA7CisJCXJldm9rZV9wYWNrZXQtPm1zZy52MV9tc2cucmV2b2tlX3NlbmRfYnVmLmlkID0KKwkJCU5FVFZTQ19TRU5EX0JVRkZFUl9JRDsKIAogCQlyZXQgPSB2bWJ1c19zZW5kcGFja2V0KG5ldF9kZXZpY2UtPmRldi0+Y2hhbm5lbCwKIAkJCQkgICAgICAgcmV2b2tlX3BhY2tldCwKQEAgLTIwNCw3ICsyMDUsNyBAQAogCQluZXRfZGV2aWNlLT5zZW5kX2J1Zl9ncGFkbF9oYW5kbGUgPSAwOwogCX0KIAlpZiAobmV0X2RldmljZS0+c2VuZF9idWYpIHsKLQkJLyogRnJlZSB1cCB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KKwkJLyogRnJlZSB1cCB0aGUgc2VuZCBidWZmZXIgKi8KIAkJdmZyZWUobmV0X2RldmljZS0+c2VuZF9idWYpOwogCQluZXRfZGV2aWNlLT5zZW5kX2J1ZiA9IE5VTEw7CiAJfQpAQCAtMzM5LDkgKzM0MCw5IEBACiAJaW5pdF9wYWNrZXQgPSAmbmV0X2RldmljZS0+Y2hhbm5lbF9pbml0X3BrdDsKIAltZW1zZXQoaW5pdF9wYWNrZXQsIDAsIHNpemVvZihzdHJ1Y3QgbnZzcF9tZXNzYWdlKSk7CiAJaW5pdF9wYWNrZXQtPmhkci5tc2dfdHlwZSA9IE5WU1BfTVNHMV9UWVBFX1NFTkRfU0VORF9CVUY7Ci0JaW5pdF9wYWNrZXQtPm1zZy52MV9tc2cuc2VuZF9yZWN2X2J1Zi5ncGFkbF9oYW5kbGUgPQorCWluaXRfcGFja2V0LT5tc2cudjFfbXNnLnNlbmRfc2VuZF9idWYuZ3BhZGxfaGFuZGxlID0KIAkJbmV0X2RldmljZS0+c2VuZF9idWZfZ3BhZGxfaGFuZGxlOwotCWluaXRfcGFja2V0LT5tc2cudjFfbXNnLnNlbmRfcmVjdl9idWYuaWQgPSAwOworCWluaXRfcGFja2V0LT5tc2cudjFfbXNnLnNlbmRfc2VuZF9idWYuaWQgPSBORVRWU0NfU0VORF9CVUZGRVJfSUQ7CiAKIAkvKiBTZW5kIHRoZSBncGFkbCBub3RpZmljYXRpb24gcmVxdWVzdCAqLwogCXJldCA9IHZtYnVzX3NlbmRwYWNrZXQoZGV2aWNlLT5jaGFubmVsLCBpbml0X3BhY2tldCwKQEAgLTM2NCw3ICszNjUsNyBAQAogCQluZXRkZXZfZXJyKG5kZXYsICJVbmFibGUgdG8gY29tcGxldGUgc2VuZCBidWZmZXIgIgogCQkJICAgImluaXRpYWxpemF0aW9uIHdpdGggTmV0VnNwIC0gc3RhdHVzICVkXG4iLAogCQkJICAgaW5pdF9wYWNrZXQtPm1zZy52MV9tc2cuCi0JCQkgICBzZW5kX3JlY3ZfYnVmX2NvbXBsZXRlLnN0YXR1cyk7CisJCQkgICBzZW5kX3NlbmRfYnVmX2NvbXBsZXRlLnN0YXR1cyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gY2xlYW51cDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fY29yZS5jCmluZGV4IGExNGQ4NzcuLjJlMTk1MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fY29yZS5jCkBAIC0zNzcsOSArMzc3LDExIEBACiAJfTsKIAogCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoZGV2X25ldChkZXYpLCBOVUxMLCAmZmw2KTsKLQlpZiAoSVNfRVJSKGRzdCkpCisJaWYgKGRzdC0+ZXJyb3IpIHsKKwkJcmV0ID0gZHN0LT5lcnJvcjsKKwkJZHN0X3JlbGVhc2UoZHN0KTsKIAkJZ290byBlcnI7Ci0KKwl9CiAJc2tiX2RzdF9kcm9wKHNrYik7CiAJc2tiX2RzdF9zZXQoc2tiLCBkc3QpOwogCWVyciA9IGlwNl9sb2NhbF9vdXQoc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9taWNyZWwuYyBiL2RyaXZlcnMvbmV0L3BoeS9taWNyZWwuYwppbmRleCBjNTMwZGUxLi4zYWQ4Y2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWljcmVsLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21pY3JlbC5jCkBAIC04OCw2ICs4OCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6cGh5X3R5cGUga3N6ODAyMV90eXBlID0gewogCS5sZWRfbW9kZV9yZWcJCT0gTUlJX0tTWlBIWV9DVFJMXzIsCisJLmhhc19icm9hZGNhc3RfZGlzYWJsZQk9IHRydWUsCiAJLmhhc19ybWlpX3JlZl9jbGtfc2VsCT0gdHJ1ZSwKIH07CiAKQEAgLTI1OCwxOSArMjU5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrc3o4MDIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCi17Ci0JaW50IHJjOwotCi0JcmMgPSBrc3pwaHlfY29uZmlnX2luaXQocGh5ZGV2KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXJjID0ga3N6cGh5X2Jyb2FkY2FzdF9kaXNhYmxlKHBoeWRldik7Ci0KLQlyZXR1cm4gcmMgPCAwID8gcmMgOiAwOwotfQotCiBzdGF0aWMgaW50IGtzejkwMjFfbG9hZF92YWx1ZXNfZnJvbV9vZihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsIHUxNiByZWcsCiAJCQkJICAgICAgIGNoYXIgKmZpZWxkMSwgY2hhciAqZmllbGQyLApAQCAtNTg0LDcgKzU3Miw3IEBACiAJLmZsYWdzCQk9IFBIWV9IQVNfTUFHSUNBTkVHIHwgUEhZX0hBU19JTlRFUlJVUFQsCiAJLmRyaXZlcl9kYXRhCT0gJmtzejgwMjFfdHlwZSwKIAkucHJvYmUJCT0ga3N6cGh5X3Byb2JlLAotCS5jb25maWdfaW5pdAk9IGtzejgwMjFfY29uZmlnX2luaXQsCisJLmNvbmZpZ19pbml0CT0ga3N6cGh5X2NvbmZpZ19pbml0LAogCS5jb25maWdfYW5lZwk9IGdlbnBoeV9jb25maWdfYW5lZywKIAkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCiAJLmFja19pbnRlcnJ1cHQJPSBrc3pwaHlfYWNrX2ludGVycnVwdCwKQEAgLTYwMSw3ICs1ODksNyBAQAogCS5mbGFncwkJPSBQSFlfSEFTX01BR0lDQU5FRyB8IFBIWV9IQVNfSU5URVJSVVBULAogCS5kcml2ZXJfZGF0YQk9ICZrc3o4MDIxX3R5cGUsCiAJLnByb2JlCQk9IGtzenBoeV9wcm9iZSwKLQkuY29uZmlnX2luaXQJPSBrc3o4MDIxX2NvbmZpZ19pbml0LAorCS5jb25maWdfaW5pdAk9IGtzenBoeV9jb25maWdfaW5pdCwKIAkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCiAJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAogCS5hY2tfaW50ZXJydXB0CT0ga3N6cGh5X2Fja19pbnRlcnJ1cHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWFtL3RlYW0uYyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbS5jCmluZGV4IDkzZTIyNDIuLmY3ZmY0OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlYW0vdGVhbS5jCisrKyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbS5jCkBAIC02MjksNiArNjI5LDcgQEAKIHN0YXRpYyB2b2lkIHRlYW1fbm90aWZ5X3BlZXJzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB0ZWFtICp0ZWFtOworCWludCB2YWw7CiAKIAl0ZWFtID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0ZWFtLCBub3RpZnlfcGVlcnMuZHcud29yayk7CiAKQEAgLTYzNiw5ICs2MzcsMTQgQEAKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0ZWFtLT5ub3RpZnlfcGVlcnMuZHcsIDApOwogCQlyZXR1cm47CiAJfQorCXZhbCA9IGF0b21pY19kZWNfaWZfcG9zaXRpdmUoJnRlYW0tPm5vdGlmeV9wZWVycy5jb3VudF9wZW5kaW5nKTsKKwlpZiAodmFsIDwgMCkgeworCQlydG5sX3VubG9jaygpOworCQlyZXR1cm47CisJfQogCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfTk9USUZZX1BFRVJTLCB0ZWFtLT5kZXYpOwogCXJ0bmxfdW5sb2NrKCk7Ci0JaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZ0ZWFtLT5ub3RpZnlfcGVlcnMuY291bnRfcGVuZGluZykpCisJaWYgKHZhbCkKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0ZWFtLT5ub3RpZnlfcGVlcnMuZHcsCiAJCQkJICAgICAgbXNlY3NfdG9famlmZmllcyh0ZWFtLT5ub3RpZnlfcGVlcnMuaW50ZXJ2YWwpKTsKIH0KQEAgLTY2OSw2ICs2NzUsNyBAQAogc3RhdGljIHZvaWQgdGVhbV9tY2FzdF9yZWpvaW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHRlYW0gKnRlYW07CisJaW50IHZhbDsKIAogCXRlYW0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHRlYW0sIG1jYXN0X3Jlam9pbi5kdy53b3JrKTsKIApAQCAtNjc2LDkgKzY4MywxNCBAQAogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRlYW0tPm1jYXN0X3Jlam9pbi5kdywgMCk7CiAJCXJldHVybjsKIAl9CisJdmFsID0gYXRvbWljX2RlY19pZl9wb3NpdGl2ZSgmdGVhbS0+bWNhc3RfcmVqb2luLmNvdW50X3BlbmRpbmcpOworCWlmICh2YWwgPCAwKSB7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CiAJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9SRVNFTkRfSUdNUCwgdGVhbS0+ZGV2KTsKIAlydG5sX3VubG9jaygpOwotCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmdGVhbS0+bWNhc3RfcmVqb2luLmNvdW50X3BlbmRpbmcpKQorCWlmICh2YWwpCiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdGVhbS0+bWNhc3RfcmVqb2luLmR3LAogCQkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXModGVhbS0+bWNhc3RfcmVqb2luLmludGVydmFsKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKaW5kZXggZGNiNmQzMy4uMWU5Y2RjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwpAQCAtMTI3Niw3ICsxMjc2LDcgQEAKICAgICAgICAgYXdkLmRvbmUgPSAwOwogCiAgICAgICAgIHVyYi0+Y29udGV4dCA9ICZhd2Q7Ci0gICAgICAgIHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX05PSU8pOworICAgICAgICBzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogICAgICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmcKICAgICAgICAgICAgICAgICB1c2JfZnJlZV91cmIodXJiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9xbWlfd3dhbi5jIGIvZHJpdmVycy9uZXQvdXNiL3FtaV93d2FuLmMKaW5kZXggYjhhODJiOC4uNjAyZGM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3FtaV93d2FuLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3FtaV93d2FuLmMKQEAgLTU2LDYgKzU2LDggQEAKIC8qIGRlZmF1bHQgZXRoZXJuZXQgYWRkcmVzcyB1c2VkIGJ5IHRoZSBtb2RlbSAqLwogc3RhdGljIGNvbnN0IHU4IGRlZmF1bHRfbW9kZW1fYWRkcltFVEhfQUxFTl0gPSB7MHgwMiwgMHg1MCwgMHhmM307CiAKK3N0YXRpYyBjb25zdCB1OCBidWdneV9md19hZGRyW0VUSF9BTEVOXSA9IHsweDAwLCAweGEwLCAweGM2LCAweDAwLCAweDAwLCAweDAwfTsKKwogLyogTWFrZSB1cCBhbiBldGhlcm5ldCBoZWFkZXIgaWYgdGhlIHBhY2tldCBkb2Vzbid0IGhhdmUgb25lLgogICoKICAqIEEgZmlybXdhcmUgYnVnIGNvbW1vbiBhbW9uZyBzZXZlcmFsIGRldmljZXMgY2F1c2UgdGhlbSB0byBzZW5kIHJhdwpAQCAtMzMyLDEwICszMzQsMTIgQEAKIAkJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShkcml2ZXIsIGluZm8tPmRhdGEpOwogCX0KIAotCS8qIE5ldmVyIHVzZSB0aGUgc2FtZSBhZGRyZXNzIG9uIGJvdGggZW5kcyBvZiB0aGUgbGluaywgZXZlbgotCSAqIGlmIHRoZSBidWdneSBmaXJtd2FyZSB0b2xkIHVzIHRvLgorCS8qIE5ldmVyIHVzZSB0aGUgc2FtZSBhZGRyZXNzIG9uIGJvdGggZW5kcyBvZiB0aGUgbGluaywgZXZlbiBpZiB0aGUKKwkgKiBidWdneSBmaXJtd2FyZSB0b2xkIHVzIHRvLiBPciwgaWYgZGV2aWNlIGlzIGFzc2lnbmVkIHRoZSB3ZWxsLWtub3duCisJICogYnVnZ3kgZmlybXdhcmUgTUFDIGFkZHJlc3MsIHJlcGxhY2UgaXQgd2l0aCBhIHJhbmRvbSBhZGRyZXNzLAogCSAqLwotCWlmIChldGhlcl9hZGRyX2VxdWFsKGRldi0+bmV0LT5kZXZfYWRkciwgZGVmYXVsdF9tb2RlbV9hZGRyKSkKKwlpZiAoZXRoZXJfYWRkcl9lcXVhbChkZXYtPm5ldC0+ZGV2X2FkZHIsIGRlZmF1bHRfbW9kZW1fYWRkcikgfHwKKwkgICAgZXRoZXJfYWRkcl9lcXVhbChkZXYtPm5ldC0+ZGV2X2FkZHIsIGJ1Z2d5X2Z3X2FkZHIpKQogCQlldGhfaHdfYWRkcl9yYW5kb20oZGV2LT5uZXQpOwogCiAJLyogbWFrZSBNQUMgYWRkciBlYXNpbHkgZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW4gSVAgaGVhZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jCmluZGV4IDJkMWM3N2UuLmJmNDA1ZjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYworKysgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwpAQCAtODMzLDkgKzgzMyw2IEBACiAJCWluZGV4ICY9IH4zOwogCX0KIAotCWdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplb2YodG1wKSwgJnRtcCwgdHlwZSk7Ci0KLQlkYXRhIHw9IF9fbGUzMl90b19jcHUodG1wKSAmIH5tYXNrOwogCXRtcCA9IF9fY3B1X3RvX2xlMzIoZGF0YSk7CiAKIAlnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIGJ5ZW4sIHNpemVvZih0bXApLCAmdG1wLCB0eXBlKTsKQEAgLTg3NCw5ICs4NzEsNiBAQAogCQlpbmRleCAmPSB+MzsKIAl9CiAKLQlnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKHRtcCksICZ0bXAsIHR5cGUpOwotCi0JZGF0YSB8PSBfX2xlMzJfdG9fY3B1KHRtcCkgJiB+bWFzazsKIAl0bXAgPSBfX2NwdV90b19sZTMyKGRhdGEpOwogCiAJZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgJnRtcCwgdHlwZSk7CkBAIC05MjYsMTIgKzkyMCw2IEBACiAJb2NwX3JlZ193cml0ZSh0cCwgT0NQX1NSQU1fREFUQSwgZGF0YSk7CiB9CiAKLXN0YXRpYyB1MTYgc3JhbV9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBhZGRyKQotewotCW9jcF9yZWdfd3JpdGUodHAsIE9DUF9TUkFNX0FERFIsIGFkZHIpOwotCXJldHVybiBvY3BfcmVnX3JlYWQodHAsIE9DUF9TUkFNX0RBVEEpOwotfQotCiBzdGF0aWMgaW50IHJlYWRfbWlpX3dvcmQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IHJlZykKIHsKIAlzdHJ1Y3QgcjgxNTIgKnRwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTE4OTcsNiArMTg4NSwyMiBAQAogCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKIH0KIAorc3RhdGljIG5ldGRldl9mZWF0dXJlc190CitydGw4MTUyX2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKK3sKKwl1MzIgbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKKwlpbnQgbWF4X29mZnNldCA9IG1zcyA/IEdUVENQSE9fTUFYIDogVENQSE9fTUFYOworCWludCBvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCisJaWYgKChtc3MgfHwgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgJiYgb2Zmc2V0ID4gbWF4X29mZnNldCkKKwkJZmVhdHVyZXMgJj0gfihORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9HU09fTUFTSyk7CisJZWxzZSBpZiAoKHNrYi0+bGVuICsgc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKSkgPiBhZ2dfYnVmX3N6KQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9HU09fTUFTSzsKKworCXJldHVybiBmZWF0dXJlczsKK30KKwogc3RhdGljIG5ldGRldl90eF90IHJ0bDgxNTJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CkBAIC0yNTAyLDI0ICsyNTA2LDE4IEBACiAJZGF0YSA9IG9jcF9yZWdfcmVhZCh0cCwgT0NQX1BPV0VSX0NGRyk7CiAJZGF0YSB8PSBFTl8xME1fUExMT0ZGOwogCW9jcF9yZWdfd3JpdGUodHAsIE9DUF9QT1dFUl9DRkcsIGRhdGEpOwotCWRhdGEgPSBzcmFtX3JlYWQodHAsIFNSQU1fSU1QRURBTkNFKTsKLQlkYXRhICY9IH5SWF9EUklWSU5HX01BU0s7Ci0Jc3JhbV93cml0ZSh0cCwgU1JBTV9JTVBFREFOQ0UsIGRhdGEpOworCXNyYW1fd3JpdGUodHAsIFNSQU1fSU1QRURBTkNFLCAweDBiMTMpOwogCiAJb2NwX2RhdGEgPSBvY3BfcmVhZF93b3JkKHRwLCBNQ1VfVFlQRV9QTEEsIFBMQV9QSFlfUFdSKTsKIAlvY3BfZGF0YSB8PSBQRk1fUFdNX1NXSVRDSDsKIAlvY3Bfd3JpdGVfd29yZCh0cCwgTUNVX1RZUEVfUExBLCBQTEFfUEhZX1BXUiwgb2NwX2RhdGEpOwogCi0JZGF0YSA9IHNyYW1fcmVhZCh0cCwgU1JBTV9MUEZfQ0ZHKTsKLQlkYXRhIHw9IExQRl9BVVRPX1RVTkU7Ci0Jc3JhbV93cml0ZSh0cCwgU1JBTV9MUEZfQ0ZHLCBkYXRhKTsKKwkvKiBFbmFibGUgTFBGIGNvcm5lciBhdXRvIHR1bmUgKi8KKwlzcmFtX3dyaXRlKHRwLCBTUkFNX0xQRl9DRkcsIDB4ZjcwZik7CiAKLQlkYXRhID0gc3JhbV9yZWFkKHRwLCBTUkFNXzEwTV9BTVAxKTsKLQlkYXRhIHw9IEdEQUNfSUJfVVBBTEw7Ci0Jc3JhbV93cml0ZSh0cCwgU1JBTV8xME1fQU1QMSwgZGF0YSk7Ci0JZGF0YSA9IHNyYW1fcmVhZCh0cCwgU1JBTV8xME1fQU1QMik7Ci0JZGF0YSB8PSBBTVBfRE47Ci0Jc3JhbV93cml0ZSh0cCwgU1JBTV8xME1fQU1QMiwgZGF0YSk7CisJLyogQWRqdXN0IDEwTSBBbXBsaXR1ZGUgKi8KKwlzcmFtX3dyaXRlKHRwLCBTUkFNXzEwTV9BTVAxLCAweDAwYWYpOworCXNyYW1fd3JpdGUodHAsIFNSQU1fMTBNX0FNUDIsIDB4MDIwOCk7CiAKIAlzZXRfYml0KFBIWV9SRVNFVCwgJnRwLT5mbGFncyk7CiB9CkBAIC0zNzA2LDYgKzM3MDQsNyBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcnRsODE1Ml9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHJ0bDgxNTJfY2hhbmdlX210dSwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2ZlYXR1cmVzX2NoZWNrCT0gcnRsODE1Ml9mZWF0dXJlc19jaGVjaywKIH07CiAKIHN0YXRpYyB2b2lkIHI4MTUyYl9nZXRfdmVyc2lvbihzdHJ1Y3QgcjgxNTIgKnRwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IGI4YmQ3MTkuLjVjYTk3NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTc2MCw3ICs3NjAsNiBAQAogCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IHJlY2VpdmVfcXVldWUsIG5hcGkpOwogCXVuc2lnbmVkIGludCByLCByZWNlaXZlZCA9IDA7CiAKLWFnYWluOgogCXJlY2VpdmVkICs9IHZpcnRuZXRfcmVjZWl2ZShycSwgYnVkZ2V0IC0gcmVjZWl2ZWQpOwogCiAJLyogT3V0IG9mIHBhY2tldHM/ICovCkBAIC03NzEsNyArNzcwLDYgQEAKIAkJICAgIG5hcGlfc2NoZWR1bGVfcHJlcChuYXBpKSkgewogCQkJdmlydHF1ZXVlX2Rpc2FibGVfY2IocnEtPnZxKTsKIAkJCV9fbmFwaV9zY2hlZHVsZShuYXBpKTsKLQkJCWdvdG8gYWdhaW47CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuLmMgYi9kcml2ZXJzL25ldC92eGxhbi5jCmluZGV4IDQ5ZDlmMjIuLjdmYmQ4OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvdnhsYW4uYwpAQCAtMTU3OSw4ICsxNTc5LDEwIEBACiAJYm9vbCB1ZHBfc3VtID0gIXVkcF9nZXRfbm9fY2hlY2s2X3R4KHZzLT5zb2NrLT5zayk7CiAKIAlza2IgPSB1ZHBfdHVubmVsX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHVkcF9zdW0pOwotCWlmIChJU19FUlIoc2tiKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKElTX0VSUihza2IpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KIAogCXNrYl9zY3J1Yl9wYWNrZXQoc2tiLCB4bmV0KTsKIApAQCAtMTU5MCwxMiArMTU5MiwxNiBAQAogCiAJLyogTmVlZCBzcGFjZSBmb3IgbmV3IGhlYWRlcnMgKGludmFsaWRhdGVzIGlwaCBwdHIpICovCiAJZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgbWluX2hlYWRyb29tKTsKLQlpZiAodW5saWtlbHkoZXJyKSkKLQkJcmV0dXJuIGVycjsKKwlpZiAodW5saWtlbHkoZXJyKSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJZ290byBlcnI7CisJfQogCiAJc2tiID0gdmxhbl9od2FjY2VsX3B1c2hfaW5zaWRlKHNrYik7Ci0JaWYgKFdBUk5fT04oIXNrYikpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChXQVJOX09OKCFza2IpKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KIAogCXZ4aCA9IChzdHJ1Y3QgdnhsYW5oZHIgKikgX19za2JfcHVzaChza2IsIHNpemVvZigqdnhoKSk7CiAJdnhoLT52eF9mbGFncyA9IGh0b25sKFZYTEFOX0ZMQUdTKTsKQEAgLTE2MDYsNiArMTYxMiw5IEBACiAJdWRwX3R1bm5lbDZfeG1pdF9za2IodnMtPnNvY2ssIGRzdCwgc2tiLCBkZXYsIHNhZGRyLCBkYWRkciwgcHJpbywKIAkJCSAgICAgdHRsLCBzcmNfcG9ydCwgZHN0X3BvcnQpOwogCXJldHVybiAwOworZXJyOgorCWRzdF9yZWxlYXNlKGRzdCk7CisJcmV0dXJuIGVycjsKIH0KICNlbmRpZgogCkBAIC0xNjIxLDcgKzE2MzAsNyBAQAogCiAJc2tiID0gdWRwX3R1bm5lbF9oYW5kbGVfb2ZmbG9hZHMoc2tiLCB1ZHBfc3VtKTsKIAlpZiAoSVNfRVJSKHNrYikpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gUFRSX0VSUihza2IpOwogCiAJbWluX2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPmRzdC5kZXYpICsgcnQtPmRzdC5oZWFkZXJfbGVuCiAJCQkrIFZYTEFOX0hMRU4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKQpAQCAtMTYyOSw4ICsxNjM4LDEwIEBACiAKIAkvKiBOZWVkIHNwYWNlIGZvciBuZXcgaGVhZGVycyAoaW52YWxpZGF0ZXMgaXBoIHB0cikgKi8KIAllcnIgPSBza2JfY293X2hlYWQoc2tiLCBtaW5faGVhZHJvb20pOwotCWlmICh1bmxpa2VseShlcnIpKQorCWlmICh1bmxpa2VseShlcnIpKSB7CisJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gZXJyOworCX0KIAogCXNrYiA9IHZsYW5faHdhY2NlbF9wdXNoX2luc2lkZShza2IpOwogCWlmIChXQVJOX09OKCFza2IpKQpAQCAtMTc3Niw5ICsxNzg3LDEyIEBACiAJCQkJICAgICB0b3MsIHR0bCwgZGYsIHNyY19wb3J0LCBkc3RfcG9ydCwKIAkJCQkgICAgIGh0b25sKHZuaSA8PCA4KSwKIAkJCQkgICAgICFuZXRfZXEodnhsYW4tPm5ldCwgZGV2X25ldCh2eGxhbi0+ZGV2KSkpOwotCi0JCWlmIChlcnIgPCAwKQorCQlpZiAoZXJyIDwgMCkgeworCQkJLyogc2tiIGlzIGFscmVhZHkgZnJlZWQuICovCisJCQlza2IgPSBOVUxMOwogCQkJZ290byBydF90eF9lcnJvcjsKKwkJfQorCiAJCWlwdHVubmVsX3htaXRfc3RhdHMoZXJyLCAmZGV2LT5zdGF0cywgZGV2LT50c3RhdHMpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IDlhNzI2NDAuLjYyYjBiZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMjg1LDYgKzI4NSw3IEBACiAKIAlfX2F0aF9jYW5jZWxfd29yayhzYyk7CiAKKwlkaXNhYmxlX2lycShzYy0+aXJxKTsKIAl0YXNrbGV0X2Rpc2FibGUoJnNjLT5pbnRyX3RxKTsKIAl0YXNrbGV0X2Rpc2FibGUoJnNjLT5iY29uX3Rhc2tsZXQpOwogCXNwaW5fbG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKQEAgLTMzMSw2ICszMzIsNyBAQAogCQlyID0gLUVJTzsKIAogb3V0OgorCWVuYWJsZV9pcnEoc2MtPmlycSk7CiAJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAJdGFza2xldF9lbmFibGUoJnNjLT5iY29uX3Rhc2tsZXQpOwogCXRhc2tsZXRfZW5hYmxlKCZzYy0+aW50cl90cSk7CkBAIC01MTIsOSArNTE0LDYgQEAKIAlpZiAoIWFoIHx8IHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCAmY29tbW9uLT5vcF9mbGFncykpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWlmICghQVJfU1JFVl85MTAwKGFoKSAmJiB0ZXN0X2JpdChBVEhfT1BfSFdfUkVTRVQsICZjb21tb24tPm9wX2ZsYWdzKSkKLQkJcmV0dXJuIElSUV9OT05FOwotCiAJLyogc2hhcmVkIGlycSwgbm90IGZvciB1cyAqLwogCWlmICghYXRoOWtfaHdfaW50cnBlbmQoYWgpKQogCQlyZXR1cm4gSVJRX05PTkU7CkBAIC01MjksNyArNTI4LDcgQEAKIAlhdGg5a19kZWJ1Z19zeW5jX2NhdXNlKHNjLCBzeW5jX2NhdXNlKTsKIAlzdGF0dXMgJj0gYWgtPmltYXNrOwkvKiBkaXNjYXJkIHVuYXNrZWQtZm9yIGJpdHMgKi8KIAotCWlmIChBUl9TUkVWXzkxMDAoYWgpICYmIHRlc3RfYml0KEFUSF9PUF9IV19SRVNFVCwgJmNvbW1vbi0+b3BfZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChBVEhfT1BfSFdfUkVTRVQsICZjb21tb24tPm9wX2ZsYWdzKSkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYwppbmRleCAzYzA2ZTkzLi45ODgwZGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jCkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogCSAqLwogCWlmICgoc2Rpb19nZXRfaG9zdF9wbV9jYXBzKHNkaW9kZXYtPmZ1bmNbMV0pICYgTU1DX1BNX0tFRVBfUE9XRVIpICYmCiAJICAgICgoc2Rpb19nZXRfaG9zdF9wbV9jYXBzKHNkaW9kZXYtPmZ1bmNbMV0pICYgTU1DX1BNX1dBS0VfU0RJT19JUlEpIHx8Ci0JICAgICAoc2Rpb2Rldi0+cGRhdGEtPm9vYl9pcnFfc3VwcG9ydGVkKSkpCisJICAgICAoc2Rpb2Rldi0+cGRhdGEgJiYgc2Rpb2Rldi0+cGRhdGEtPm9vYl9pcnFfc3VwcG9ydGVkKSkpCiAJCWJ1c19pZi0+d293bF9zdXBwb3J0ZWQgPSB0cnVlOwogI2VuZGlmCiAKQEAgLTExNjcsNyArMTE2Nyw3IEBACiAJc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2ID0gYnVzX2lmLT5idXNfcHJpdi5zZGlvOwogCiAJYnJjbWZfZGJnKFNESU8sICJFbnRlclxuIik7Ci0JaWYgKHNkaW9kZXYtPnBkYXRhLT5vb2JfaXJxX3N1cHBvcnRlZCkKKwlpZiAoc2Rpb2Rldi0+cGRhdGEgJiYgc2Rpb2Rldi0+cGRhdGEtPm9vYl9pcnFfc3VwcG9ydGVkKQogCQlkaXNhYmxlX2lycV93YWtlKHNkaW9kZXYtPnBkYXRhLT5vb2JfaXJxX25yKTsKIAlicmNtZl9zZGlvX3dkX3RpbWVyKHNkaW9kZXYtPmJ1cywgQlJDTUZfV0RfUE9MTF9NUyk7CiAJYXRvbWljX3NldCgmc2Rpb2Rldi0+c3VzcGVuZCwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnCmluZGV4IDkxYzBjYjMuLjIxZGU0ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcKQEAgLTY1LDcgKzY1LDggQEAKIAogY29uZmlnIElQVzIyMDAKIAl0cmlzdGF0ZSAiSW50ZWwgUFJPL1dpcmVsZXNzIDIyMDBCRyBhbmQgMjkxNUFCRyBOZXR3b3JrIENvbm5lY3Rpb24iCi0JZGVwZW5kcyBvbiBQQ0kgJiYgQ0ZHODAyMTEgJiYgQ0ZHODAyMTFfV0VYVAorCWRlcGVuZHMgb24gUENJICYmIENGRzgwMjExCisJc2VsZWN0IENGRzgwMjExX1dFWFQKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfU1BZCiAJc2VsZWN0IFdFWFRfUFJJVgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNzAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNzAwMC5jCmluZGV4IGU1YmUyZDIuLmE1ZjkxOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTcwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC03MDAwLmMKQEAgLTY5LDggKzY5LDggQEAKICNpbmNsdWRlICJpd2wtYWduLWh3LmgiCiAKIC8qIEhpZ2hlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCi0jZGVmaW5lIElXTDcyNjBfVUNPREVfQVBJX01BWAkxMAotI2RlZmluZSBJV0wzMTYwX1VDT0RFX0FQSV9NQVgJMTAKKyNkZWZpbmUgSVdMNzI2MF9VQ09ERV9BUElfTUFYCTEyCisjZGVmaW5lIElXTDMxNjBfVUNPREVfQVBJX01BWAkxMgogCiAvKiBPbGRlc3QgdmVyc2lvbiB3ZSB3b24ndCB3YXJuIGFib3V0ICovCiAjZGVmaW5lIElXTDcyNjBfVUNPREVfQVBJX09LCTEwCkBAIC0xMDUsNyArMTA1LDcgQEAKICNkZWZpbmUgSVdMNzI2NV9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w3MjY1X0ZXX1BSRSBfX3N0cmluZ2lmeShhcGkpICIudWNvZGUiCiAKICNkZWZpbmUgSVdMNzI2NURfRldfUFJFICJpd2x3aWZpLTcyNjVELSIKLSNkZWZpbmUgSVdMNzI2NURfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNzI2NV9GV19QUkUgX19zdHJpbmdpZnkoYXBpKSAiLnVjb2RlIgorI2RlZmluZSBJV0w3MjY1RF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w3MjY1RF9GV19QUkUgX19zdHJpbmdpZnkoYXBpKSAiLnVjb2RlIgogCiAjZGVmaW5lIE5WTV9IV19TRUNUSU9OX05VTV9GQU1JTFlfNzAwMAkJMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC04MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC04MDAwLmMKaW5kZXggYmYwYTk1Yy4uMzY2OGZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtODAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTgwMDAuYwpAQCAtNjksNyArNjksNyBAQAogI2luY2x1ZGUgIml3bC1hZ24taHcuaCIKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgSVdMODAwMF9VQ09ERV9BUElfTUFYCTEwCisjZGVmaW5lIElXTDgwMDBfVUNPREVfQVBJX01BWAkxMgogCiAvKiBPbGRlc3QgdmVyc2lvbiB3ZSB3b24ndCB3YXJuIGFib3V0ICovCiAjZGVmaW5lIElXTDgwMDBfVUNPREVfQVBJX09LCTEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kcnYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5jCmluZGV4IDM4ZGUxNTEuLjg1MGI4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5jCkBAIC0xMzIzLDEwICsxMzIzLDEwIEBACiAKICB0cnlfYWdhaW46CiAJLyogdHJ5IG5leHQsIGlmIGFueSAqLwotCWtmcmVlKHBpZWNlcyk7CiAJcmVsZWFzZV9maXJtd2FyZSh1Y29kZV9yYXcpOwogCWlmIChpd2xfcmVxdWVzdF9maXJtd2FyZShkcnYsIGZhbHNlKSkKIAkJZ290byBvdXRfdW5iaW5kOworCWtmcmVlKHBpZWNlcyk7CiAJcmV0dXJuOwogCiAgb3V0X2ZyZWVfZnc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1maC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaAppbmRleCA5NTY0YWUxLi4xZjdmMTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1maC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKQEAgLTMxMCw2ICszMTAsNyBAQAogI2RlZmluZSBGSF9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUJKDB4MDEwMDAwMDApCiAKICNkZWZpbmUgRkhfTUVNX1RGRElCX1JFRzFfQUREUl9CSVRTSElGVAkyOAorI2RlZmluZSBGSF9NRU1fVEJfTUFYX0xFTkdUSAkJCSgweDAwMDIwMDAwKQogCiAvKiBURkRCICBBcmVhIC0gVEZEcyBidWZmZXIgdGFibGUgKi8KICNkZWZpbmUgRkhfTUVNX1RGRElCX0RSQU1fQUREUl9MU0JfTVNLICAgICAgKDB4RkZGRkZGRkYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1mdy1maWxlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1mdy1maWxlLmgKaW5kZXggZjJhMDQ3Zi4uNjYwZGRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZnctZmlsZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZ3LWZpbGUuaApAQCAtMjQzLDYgKzI0MywxMCBAQAogICogQElXTF9VQ09ERV9UTFZfQVBJX1NGX05PX0RVTU1ZX05PVElGOiB1Y29kZSBzdXBwb3J0cyBkaXNhYmxpbmcgZHVtbXkgbm90aWYuCiAgKiBASVdMX1VDT0RFX1RMVl9BUElfRlJBR01FTlRFRF9TQ0FOOiBUaGlzIHVjb2RlIHN1cHBvcnRzIGFjdGl2ZSBkd2VsbCB0aW1lCiAgKglsb25nZXIgdGhhbiB0aGUgcGFzc2l2ZSBvbmUsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgZnJhZ21lbnRlZCBzY2FuLgorICogQElXTF9VQ09ERV9UTFZfQVBJX0JBU0lDX0RXRUxMOiB1c2Ugb25seSBiYXNpYyBkd2VsbCB0aW1lIGluIHNjYW4gY29tbWFuZCwKKyAqCXJlZ2FyZGxlc3Mgb2YgdGhlIGJhbmQgb3IgdGhlIG51bWJlciBvZiB0aGUgcHJvYmVzLiBGVyB3aWxsIGNhbGN1bGF0ZQorICoJdGhlIGFjdHVhbCBkd2VsbCB0aW1lLgorICogQElXTF9VQ09ERV9UTFZfQVBJX1NJTkdMRV9TQ0FOX0VCUzogRUJTIGlzIHN1cHBvcnRlZCBmb3Igc2luZ2xlIHNjYW5zIHRvby4KICAqLwogZW51bSBpd2xfdWNvZGVfdGx2X2FwaSB7CiAJSVdMX1VDT0RFX1RMVl9BUElfV09XTEFOX0NPTkZJR19USUQJPSBCSVQoMCksCkBAIC0yNTMsNiArMjU3LDggQEAKIAlJV0xfVUNPREVfVExWX0FQSV9MTUFDX1NDQU4JCT0gQklUKDYpLAogCUlXTF9VQ09ERV9UTFZfQVBJX1NGX05PX0RVTU1ZX05PVElGCT0gQklUKDcpLAogCUlXTF9VQ09ERV9UTFZfQVBJX0ZSQUdNRU5URURfU0NBTgk9IEJJVCg4KSwKKwlJV0xfVUNPREVfVExWX0FQSV9CQVNJQ19EV0VMTAkJPSBCSVQoMTMpLAorCUlXTF9VQ09ERV9UTFZfQVBJX1NJTkdMRV9TQ0FOX0VCUwk9IEJJVCgxNiksCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS1zY2FuLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9mdy1hcGktc2Nhbi5oCmluZGV4IDFmMmFjZjQuLmNmYzBlNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS1zY2FuLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZnctYXBpLXNjYW4uaApAQCAtNjUzLDggKzY1MywxMSBAQAogfTsKIAogLyogaXdsX3NjYW5fY2hhbm5lbF9vcHQgLSBDSEFOTkVMX09QVElNSVpBVElPTl9BUElfUwotICogQGZsYWdzOiBlbnVtIGl3bF9zY2FuX2NoYW5uZWxfZmxncwotICogQG5vbl9lYnNfcmF0aW86IGhvdyBtYW55IHJlZ3VsYXIgc2NhbiBpdGVyYXRpb24gYmVmb3JlIEVCUworICogQGZsYWdzOiBlbnVtIGl3bF9zY2FuX2NoYW5uZWxfZmxhZ3MKKyAqIEBub25fZWJzX3JhdGlvOiBkZWZpbmVzIHRoZSByYXRpbyBvZiBudW1iZXIgb2Ygc2NhbiBpdGVyYXRpb25zIHdoZXJlIEVCUyBpcworICoJaW52b2x2ZWQuCisgKgkxIC0gRUJTIGlzIGRpc2FibGVkLgorICoJMiAtIGV2ZXJ5IHNlY29uZCBzY2FuIHdpbGwgYmUgZnVsbCBzY2FuKGFuZCBzbyBvbikuCiAgKi8KIHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsX29wdCB7CiAJX19sZTE2IGZsYWdzOwpAQCAtNjcyLDYgKzY3NSw3IEBACiAgKiBASVdMX01WTV9MTUFDX1NDQU5fRkxBR19GUkFHTUVOVEVEOiBhbGwgcGFzc2l2ZSBzY2FucyB3aWxsIGJlIGZyYWdtZW50ZWQKICAqIEBJV0xfTVZNX0xNQUNfU0NBTl9GTEFHU19SUk1fRU5BQkxFRDogaW5zZXJ0IFdGQSB2ZW5kb3Itc3BlY2lmaWMgVFBDIHJlcG9ydAogICoJYW5kIERTIHBhcmFtZXRlciBzZXQgSUVzIGludG8gcHJvYmUgcmVxdWVzdHMuCisgKiBASVdMX01WTV9MTUFDX1NDQU5fRkxBR19NQVRDSDogU2VuZCBtYXRjaCBmb3VuZCBub3RpZmljYXRpb24gb24gbWF0Y2hlcwogICovCiBlbnVtIGl3bF9tdm1fbG1hY19zY2FuX2ZsYWdzIHsKIAlJV0xfTVZNX0xNQUNfU0NBTl9GTEFHX1BBU1NfQUxMCQk9IEJJVCgwKSwKQEAgLTY4MSw2ICs2ODUsNyBAQAogCUlXTF9NVk1fTE1BQ19TQ0FOX0ZMQUdfTVVMVElQTEVfU1NJRFMJPSBCSVQoNCksCiAJSVdMX01WTV9MTUFDX1NDQU5fRkxBR19GUkFHTUVOVEVECT0gQklUKDUpLAogCUlXTF9NVk1fTE1BQ19TQ0FOX0ZMQUdTX1JSTV9FTkFCTEVECT0gQklUKDYpLAorCUlXTF9NVk1fTE1BQ19TQ0FOX0ZMQUdfTUFUQ0gJCT0gQklUKDkpLAogfTsKIAogZW51bSBpd2xfc2Nhbl9wcmlvcml0eSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9tYWM4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbWFjODAyMTEuYwppbmRleCAzMWE1YjNmLi4yMDkxNTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9tYWM4MDIxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL21hYzgwMjExLmMKQEAgLTEwMDQsOCArMTAwNCwxMyBAQAogewogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm12bS0+bXV0ZXgpOwogCi0JLyogZGlzYWxsb3cgbG93IHBvd2VyIHN0YXRlcyB3aGVuIHRoZSBGVyBpcyBkb3duICovCi0JaXdsX212bV9yZWYobXZtLCBJV0xfTVZNX1JFRl9VQ09ERV9ET1dOKTsKKwkvKgorCSAqIERpc2FsbG93IGxvdyBwb3dlciBzdGF0ZXMgd2hlbiB0aGUgRlcgaXMgZG93biBieSB0YWtpbmcKKwkgKiB0aGUgVUNPREVfRE9XTiByZWYuIGluIGNhc2Ugb2Ygb25nb2luZyBodyByZXN0YXJ0IHRoZQorCSAqIHJlZiBpcyBhbHJlYWR5IHRha2VuLCBzbyBkb24ndCB0YWtlIGl0IGFnYWluLgorCSAqLworCWlmICghdGVzdF9iaXQoSVdMX01WTV9TVEFUVVNfSU5fSFdfUkVTVEFSVCwgJm12bS0+c3RhdHVzKSkKKwkJaXdsX212bV9yZWYobXZtLCBJV0xfTVZNX1JFRl9VQ09ERV9ET1dOKTsKIAogCS8qIGFzeW5jX2hhbmRsZXJzX3drIGlzIG5vdyBibG9ja2VkICovCiAKQEAgLTEwMjMsNiArMTAyOCwxMiBAQAogCS8qIHRoZSBmdyBpcyBzdG9wcGVkLCB0aGUgYXV4IHN0YSBpcyBkZWFkOiBjbGVhbiB1cCBkcml2ZXIgc3RhdGUgKi8KIAlpd2xfbXZtX2RlbF9hdXhfc3RhKG12bSk7CiAKKwkvKgorCSAqIENsZWFyIElOX0hXX1JFU1RBUlQgZmxhZyB3aGVuIHN0b3BwaW5nIHRoZSBodyAoYXMgcmVzdGFydF9jb21wbGV0ZSgpCisJICogd29uJ3QgYmUgY2FsbGVkIGluIHRoaXMgY2FzZSkuCisJICovCisJY2xlYXJfYml0KElXTF9NVk1fU1RBVFVTX0lOX0hXX1JFU1RBUlQsICZtdm0tPnN0YXR1cyk7CisKIAltdm0tPnVjb2RlX2xvYWRlZCA9IGZhbHNlOwogfQogCkBAIC0zMzMyLDE4ICszMzQzLDE2IEBACiAJCW1zayB8PSBtdm1zdGEtPnRmZF9xdWV1ZV9tc2s7CiAJfQogCi0JaWYgKGRyb3ApIHsKLQkJaWYgKGl3bF9tdm1fZmx1c2hfdHhfcGF0aChtdm0sIG1zaywgdHJ1ZSkpCi0JCQlJV0xfRVJSKG12bSwgImZsdXNoIHJlcXVlc3QgZmFpbFxuIik7Ci0JCW11dGV4X3VubG9jaygmbXZtLT5tdXRleCk7Ci0JfSBlbHNlIHsKLQkJbXV0ZXhfdW5sb2NrKCZtdm0tPm11dGV4KTsKKwltc2sgJj0gfkJJVCh2aWYtPmh3X3F1ZXVlW0lFRUU4MDIxMV9BQ19WT10pOwogCi0JCS8qIHRoaXMgY2FuIHRha2UgYSB3aGlsZSwgYW5kIHdlIG1heSBuZWVkL3dhbnQgb3RoZXIgb3BlcmF0aW9ucwotCQkgKiB0byBzdWNjZWVkIHdoaWxlIGRvaW5nIHRoaXMsIHNvIGRvIGl0IHdpdGhvdXQgdGhlIG11dGV4IGhlbGQKLQkJICovCi0JCWl3bF90cmFuc193YWl0X3R4X3F1ZXVlX2VtcHR5KG12bS0+dHJhbnMsIG1zayk7Ci0JfQorCWlmIChpd2xfbXZtX2ZsdXNoX3R4X3BhdGgobXZtLCBtc2ssIHRydWUpKQorCQlJV0xfRVJSKG12bSwgImZsdXNoIHJlcXVlc3QgZmFpbFxuIik7CisJbXV0ZXhfdW5sb2NrKCZtdm0tPm11dGV4KTsKKworCS8qIHRoaXMgY2FuIHRha2UgYSB3aGlsZSwgYW5kIHdlIG1heSBuZWVkL3dhbnQgb3RoZXIgb3BlcmF0aW9ucworCSAqIHRvIHN1Y2NlZWQgd2hpbGUgZG9pbmcgdGhpcywgc28gZG8gaXQgd2l0aG91dCB0aGUgbXV0ZXggaGVsZAorCSAqLworCWl3bF90cmFuc193YWl0X3R4X3F1ZXVlX2VtcHR5KG12bS0+dHJhbnMsIG1zayk7CiB9CiAKIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGl3bF9tdm1faHdfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc2Nhbi5jCmluZGV4IGU1Mjk0ZDAuLjg0NGJmN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3NjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9zY2FuLmMKQEAgLTcyLDYgKzcyLDggQEAKIAogI2RlZmluZSBJV0xfUExDUF9RVUlFVF9USFJFU0ggMQogI2RlZmluZSBJV0xfQUNUSVZFX1FVSUVUX1RJTUUgMTAKKyNkZWZpbmUgSVdMX0RFTlNFX0VCU19TQ0FOX1JBVElPIDUKKyNkZWZpbmUgSVdMX1NQQVJTRV9FQlNfU0NBTl9SQVRJTyAxCiAKIHN0cnVjdCBpd2xfbXZtX3NjYW5fcGFyYW1zIHsKIAl1MzIgbWF4X291dF90aW1lOwpAQCAtMTcxLDE1ICsxNzMsMjEgQEAKICAqIGFscmVhZHkgaW5jbHVkZWQgaW4gdGhlIHByb2JlIHRlbXBsYXRlLCBzbyB3ZSBuZWVkIHRvIHNldCBvbmx5CiAgKiByZXEtPm5fc3NpZHMgLSAxIGJpdHMgaW4gYWRkaXRpb24gdG8gdGhlIGZpcnN0IGJpdC4KICAqLwotc3RhdGljIHUxNiBpd2xfbXZtX2dldF9hY3RpdmVfZHdlbGwoZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCBpbnQgbl9zc2lkcykKK3N0YXRpYyB1MTYgaXdsX212bV9nZXRfYWN0aXZlX2R3ZWxsKHN0cnVjdCBpd2xfbXZtICptdm0sCisJCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgaW50IG5fc3NpZHMpCiB7CisJaWYgKG12bS0+ZnctPnVjb2RlX2NhcGEuYXBpWzBdICYgSVdMX1VDT0RFX1RMVl9BUElfQkFTSUNfRFdFTEwpCisJCXJldHVybiAxMDsKIAlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQogCQlyZXR1cm4gMjAgICsgMyAqIChuX3NzaWRzICsgMSk7CiAJcmV0dXJuIDEwICArIDIgKiAobl9zc2lkcyArIDEpOwogfQogCi1zdGF0aWMgdTE2IGl3bF9tdm1fZ2V0X3Bhc3NpdmVfZHdlbGwoZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQorc3RhdGljIHUxNiBpd2xfbXZtX2dldF9wYXNzaXZlX2R3ZWxsKHN0cnVjdCBpd2xfbXZtICptdm0sCisJCQkJICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CisJaWYgKG12bS0+ZnctPnVjb2RlX2NhcGEuYXBpWzBdICYgSVdMX1VDT0RFX1RMVl9BUElfQkFTSUNfRFdFTEwpCisJCQlyZXR1cm4gMTEwOwogCXJldHVybiBiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogPyAxMDAgKyAyMCA6IDEwMCArIDEwOwogfQogCkBAIC0zMzEsNyArMzM5LDggQEAKIAkJICovCiAJCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRSkgewogCQkJdTMyIHBhc3NpdmVfZHdlbGwgPQotCQkJCWl3bF9tdm1fZ2V0X3Bhc3NpdmVfZHdlbGwoSUVFRTgwMjExX0JBTkRfMkdIWik7CisJCQkJaXdsX212bV9nZXRfcGFzc2l2ZV9kd2VsbChtdm0sCisJCQkJCQkJICBJRUVFODAyMTFfQkFORF8yR0haKTsKIAkJCXBhcmFtcy0+bWF4X291dF90aW1lID0gcGFzc2l2ZV9kd2VsbDsKIAkJfSBlbHNlIHsKIAkJCXBhcmFtcy0+cGFzc2l2ZV9mcmFnbWVudGVkID0gdHJ1ZTsKQEAgLTM0OCw4ICszNTcsOCBAQAogCQkJcGFyYW1zLT5kd2VsbFtiYW5kXS5wYXNzaXZlID0gZnJhZ19wYXNzaXZlX2R3ZWxsOwogCQllbHNlCiAJCQlwYXJhbXMtPmR3ZWxsW2JhbmRdLnBhc3NpdmUgPQotCQkJCWl3bF9tdm1fZ2V0X3Bhc3NpdmVfZHdlbGwoYmFuZCk7Ci0JCXBhcmFtcy0+ZHdlbGxbYmFuZF0uYWN0aXZlID0gaXdsX212bV9nZXRfYWN0aXZlX2R3ZWxsKGJhbmQsCisJCQkJaXdsX212bV9nZXRfcGFzc2l2ZV9kd2VsbChtdm0sIGJhbmQpOworCQlwYXJhbXMtPmR3ZWxsW2JhbmRdLmFjdGl2ZSA9IGl3bF9tdm1fZ2V0X2FjdGl2ZV9kd2VsbChtdm0sIGJhbmQsCiAJCQkJCQkJCSAgICAgIG5fc3NpZHMpOwogCX0KIH0KQEAgLTEwOTgsNiArMTEwNywxMiBAQAogCQlyZXR1cm4gaXdsX3VtYWNfc2Nhbl9zdG9wKG12bSwgSVdMX1VNQUNfU0NBTl9VSURfU0NIRURfU0NBTiwKIAkJCQkJICBub3RpZnkpOwogCisJaWYgKG12bS0+c2Nhbl9zdGF0dXMgPT0gSVdMX01WTV9TQ0FOX05PTkUpCisJCXJldHVybiAwOworCisJaWYgKGl3bF9tdm1faXNfcmFkaW9fa2lsbGVkKG12bSkpCisJCWdvdG8gb3V0OworCiAJaWYgKG12bS0+c2Nhbl9zdGF0dXMgIT0gSVdMX01WTV9TQ0FOX1NDSEVEICYmCiAJICAgICghKG12bS0+ZnctPnVjb2RlX2NhcGEuYXBpWzBdICYgSVdMX1VDT0RFX1RMVl9BUElfTE1BQ19TQ0FOKSB8fAogCSAgICAgbXZtLT5zY2FuX3N0YXR1cyAhPSBJV0xfTVZNX1NDQU5fT1MpKSB7CkBAIC0xMTM0LDYgKzExNDksNyBAQAogCWlmIChtdm0tPnNjYW5fc3RhdHVzID09IElXTF9NVk1fU0NBTl9PUykKIAkJaXdsX212bV91bnJlZihtdm0sIElXTF9NVk1fUkVGX1NDQU4pOwogCitvdXQ6CiAJbXZtLT5zY2FuX3N0YXR1cyA9IElXTF9NVk1fU0NBTl9OT05FOwogCiAJaWYgKG5vdGlmeSkgewpAQCAtMTI5MCwxOCArMTMwNiw2IEBACiAJY21kLT5zY2FuX3ByaW8gPSBjcHVfdG9fbGUzMihJV0xfU0NBTl9QUklPUklUWV9ISUdIKTsKIAljbWQtPml0ZXJfbnVtID0gY3B1X3RvX2xlMzIoMSk7CiAKLQlpZiAobXZtLT5mdy0+dWNvZGVfY2FwYS5mbGFncyAmIElXTF9VQ09ERV9UTFZfRkxBR1NfRUJTX1NVUFBPUlQgJiYKLQkgICAgbXZtLT5sYXN0X2Vic19zdWNjZXNzZnVsKSB7Ci0JCWNtZC0+Y2hhbm5lbF9vcHRbMF0uZmxhZ3MgPQotCQkJY3B1X3RvX2xlMTYoSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCUyB8Ci0JCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19FQlNfQUNDVVJBVEUgfAotCQkJCSAgICBJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfQ0FDSEVfQUREKTsKLQkJY21kLT5jaGFubmVsX29wdFsxXS5mbGFncyA9Ci0JCQljcHVfdG9fbGUxNihJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTIHwKLQkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCU19BQ0NVUkFURSB8Ci0JCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQpOwotCX0KLQogCWlmIChpd2xfbXZtX3JybV9zY2FuX25lZWRlZChtdm0pKQogCQljbWQtPnNjYW5fZmxhZ3MgfD0KIAkJCWNwdV90b19sZTMyKElXTF9NVk1fTE1BQ19TQ0FOX0ZMQUdTX1JSTV9FTkFCTEVEKTsKQEAgLTEzNzYsNiArMTM4MCwyMiBAQAogCWNtZC0+c2NoZWR1bGVbMV0uaXRlcmF0aW9ucyA9IDA7CiAJY21kLT5zY2hlZHVsZVsxXS5mdWxsX3NjYW5fbXVsID0gMDsKIAorCWlmIChtdm0tPmZ3LT51Y29kZV9jYXBhLmFwaVswXSAmIElXTF9VQ09ERV9UTFZfQVBJX1NJTkdMRV9TQ0FOX0VCUyAmJgorCSAgICBtdm0tPmxhc3RfZWJzX3N1Y2Nlc3NmdWwpIHsKKwkJY21kLT5jaGFubmVsX29wdFswXS5mbGFncyA9CisJCQljcHVfdG9fbGUxNihJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTIHwKKwkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCU19BQ0NVUkFURSB8CisJCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQpOworCQljbWQtPmNoYW5uZWxfb3B0WzBdLm5vbl9lYnNfcmF0aW8gPQorCQkJY3B1X3RvX2xlMTYoSVdMX0RFTlNFX0VCU19TQ0FOX1JBVElPKTsKKwkJY21kLT5jaGFubmVsX29wdFsxXS5mbGFncyA9CisJCQljcHVfdG9fbGUxNihJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTIHwKKwkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCU19BQ0NVUkFURSB8CisJCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQpOworCQljbWQtPmNoYW5uZWxfb3B0WzFdLm5vbl9lYnNfcmF0aW8gPQorCQkJY3B1X3RvX2xlMTYoSVdMX1NQQVJTRV9FQlNfU0NBTl9SQVRJTyk7CisJfQorCiAJZm9yIChpID0gMTsgaSA8PSByZXEtPnJlcS5uX3NzaWRzOyBpKyspCiAJCXNzaWRfYml0bWFwIHw9IEJJVChpKTsKIApAQCAtMTQ0OCw2ICsxNDY4LDggQEAKIAogCWlmIChpd2xfbXZtX3NjYW5fcGFzc19hbGwobXZtLCByZXEpKQogCQlmbGFncyB8PSBJV0xfTVZNX0xNQUNfU0NBTl9GTEFHX1BBU1NfQUxMOworCWVsc2UKKwkJZmxhZ3MgfD0gSVdMX01WTV9MTUFDX1NDQU5fRkxBR19NQVRDSDsKIAogCWlmIChyZXEtPm5fc3NpZHMgPT0gMSAmJiByZXEtPnNzaWRzWzBdLnNzaWRfbGVuICE9IDApCiAJCWZsYWdzIHw9IElXTF9NVk1fTE1BQ19TQ0FOX0ZMQUdfUFJFX0NPTk5FQ1RJT047CkBAIC0xNDc0LDYgKzE0OTYsMjIgQEAKIAljbWQtPnNjaGVkdWxlWzFdLml0ZXJhdGlvbnMgPSAweGZmOwogCWNtZC0+c2NoZWR1bGVbMV0uZnVsbF9zY2FuX211bCA9IElXTF9GVUxMX1NDQU5fTVVMVElQTElFUjsKIAorCWlmIChtdm0tPmZ3LT51Y29kZV9jYXBhLmZsYWdzICYgSVdMX1VDT0RFX1RMVl9GTEFHU19FQlNfU1VQUE9SVCAmJgorCSAgICBtdm0tPmxhc3RfZWJzX3N1Y2Nlc3NmdWwpIHsKKwkJY21kLT5jaGFubmVsX29wdFswXS5mbGFncyA9CisJCQljcHVfdG9fbGUxNihJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTIHwKKwkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCU19BQ0NVUkFURSB8CisJCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQpOworCQljbWQtPmNoYW5uZWxfb3B0WzBdLm5vbl9lYnNfcmF0aW8gPQorCQkJY3B1X3RvX2xlMTYoSVdMX0RFTlNFX0VCU19TQ0FOX1JBVElPKTsKKwkJY21kLT5jaGFubmVsX29wdFsxXS5mbGFncyA9CisJCQljcHVfdG9fbGUxNihJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTIHwKKwkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCU19BQ0NVUkFURSB8CisJCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQpOworCQljbWQtPmNoYW5uZWxfb3B0WzFdLm5vbl9lYnNfcmF0aW8gPQorCQkJY3B1X3RvX2xlMTYoSVdMX1NQQVJTRV9FQlNfU0NBTl9SQVRJTyk7CisJfQorCiAJaXdsX212bV9sbWFjX3NjYW5fY2ZnX2NoYW5uZWxzKG12bSwgcmVxLT5jaGFubmVscywgcmVxLT5uX2NoYW5uZWxzLAogCQkJCSAgICAgICBzc2lkX2JpdG1hcCwgY21kKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3R4LmMKaW5kZXggNGYxNWQ5ZC4uYzU5ZDA3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS90eC5jCkBAIC05MCw4ICs5MCw2IEBACiAKIAlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX1RTRjsKLQllbHNlIGlmIChpZWVlODAyMTFfaXNfYmFja19yZXEoZmMpKQotCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX0FDSyB8IFRYX0NNRF9GTEdfQkFSOwogCiAJaWYgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSkKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19NT1JFX0ZSQUc7CkBAIC0xMDAsNiArOTgsMTUgQEAKIAkJdTggKnFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXR4X2NtZC0+dGlkX3RzcGVjID0gcWNbMF0gJiAweGY7CiAJCXR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX1NFUV9DVEw7CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYmFja19yZXEoZmMpKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfYmFyICpiYXIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJdTE2IGNvbnRyb2wgPSBsZTE2X3RvX2NwdShiYXItPmNvbnRyb2wpOworCisJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQUNLIHwgVFhfQ01EX0ZMR19CQVI7CisJCXR4X2NtZC0+dGlkX3RzcGVjID0gKGNvbnRyb2wgJgorCQkJCSAgICAgSUVFRTgwMjExX0JBUl9DVFJMX1RJRF9JTkZPX01BU0spID4+CisJCQlJRUVFODAyMTFfQkFSX0NUUkxfVElEX0lORk9fU0hJRlQ7CisJCVdBUk5fT05fT05DRSh0eF9jbWQtPnRpZF90c3BlYyA+PSBJV0xfTUFYX1RJRF9DT1VOVCk7CiAJfSBlbHNlIHsKIAkJdHhfY21kLT50aWRfdHNwZWMgPSBJV0xfVElEX05PTl9RT1M7CiAJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkKQEAgLTEwOCw4ICsxMTUsMTIgQEAKIAkJCXR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX1NFUV9DVEw7CiAJfQogCi0JLyogdGlkX3RzcGVjIHdpbGwgZGVmYXVsdCB0byAwID0gQkUgd2hlbiBRT1MgaXNuJ3QgZW5hYmxlZCAqLwotCWFjID0gdGlkX3RvX21hYzgwMjExX2FjW3R4X2NtZC0+dGlkX3RzcGVjXTsKKwkvKiBEZWZhdWx0IHRvIDAgKEJFKSB3aGVuIHRpZF9zcGVjIGlzIHNldCB0byBJV0xfVElEX05PTl9RT1MgKi8KKwlpZiAodHhfY21kLT50aWRfdHNwZWMgPCBJV0xfTUFYX1RJRF9DT1VOVCkKKwkJYWMgPSB0aWRfdG9fbWFjODAyMTFfYWNbdHhfY21kLT50aWRfdHNwZWNdOworCWVsc2UKKwkJYWMgPSB0aWRfdG9fbWFjODAyMTFfYWNbMF07CisKIAl0eF9mbGFncyB8PSBpd2xfbXZtX2J0X2NvZXhfdHhfcHJpbyhtdm0sIGhkciwgaW5mbywgYWMpIDw8CiAJCQlUWF9DTURfRkxHX0JUX1BSSU9fUE9TOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS91dGlscy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdXRpbHMuYwppbmRleCBlNTZlNzdlLi45MTc0MzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS91dGlscy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3V0aWxzLmMKQEAgLTY2NSw3ICs2NjUsNyBAQAogCWlmIChudW1fb2ZfYW50KG12bS0+ZnctPnZhbGlkX3J4X2FudCkgPT0gMSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKCFtdm0tPmNmZy0+cnhfd2l0aF9zaXNvX2RpdmVyc2l0eSkKKwlpZiAobXZtLT5jZmctPnJ4X3dpdGhfc2lzb19kaXZlcnNpdHkpCiAJCXJldHVybiBmYWxzZTsKIAogCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYygKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS9kcnYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS9kcnYuYwppbmRleCAzZWU4ZTM4Li5kNWFhZGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL3BjaWUvZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL2Rydi5jCkBAIC0zNjcsNyArMzY3LDExIEBACiAKIC8qIDMxNjUgU2VyaWVzICovCiAJe0lXTF9QQ0lfREVWSUNFKDB4MzE2NSwgMHg0MDEwLCBpd2wzMTY1XzJhY19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgzMTY1LCAweDQwMTIsIGl3bDMxNjVfMmFjX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDMxNjUsIDB4NDExMCwgaXdsMzE2NV8yYWNfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MzE2NSwgMHg0MjEwLCBpd2wzMTY1XzJhY19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgzMTY1LCAweDQ0MTAsIGl3bDMxNjVfMmFjX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDMxNjUsIDB4NDUxMCwgaXdsMzE2NV8yYWNfY2ZnKX0sCiAKIC8qIDcyNjUgU2VyaWVzICovCiAJe0lXTF9QQ0lfREVWSUNFKDB4MDk1QSwgMHg1MDEwLCBpd2w3MjY1XzJhY19jZmcpfSwKQEAgLTUyMyw4ICs1MjcsMTAgQEAKIAllbHNlIGlmIChjZmcgPT0gJml3bDcyNjVfbl9jZmcpCiAJCWNmZ183MjY1ZCA9ICZpd2w3MjY1ZF9uX2NmZzsKIAlpZiAoY2ZnXzcyNjVkICYmCi0JICAgIChpd2xfdHJhbnMtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV83MjY1RCkKKwkgICAgKGl3bF90cmFucy0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzcyNjVEKSB7CiAJCWNmZyA9IGNmZ183MjY1ZDsKKwkJaXdsX3RyYW5zLT5jZmcgPSBjZmdfNzI2NWQ7CisJfQogI2VuZGlmCiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaXdsX3RyYW5zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS90cmFucy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL3RyYW5zLmMKaW5kZXggNWQ3OWExZi4uNTIzZmUwYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS90cmFucy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS90cmFucy5jCkBAIC02MTQsNyArNjE0LDcgQEAKIHsKIAl1OCAqdl9hZGRyOwogCWRtYV9hZGRyX3QgcF9hZGRyOwotCXUzMiBvZmZzZXQsIGNodW5rX3N6ID0gc2VjdGlvbi0+bGVuOworCXUzMiBvZmZzZXQsIGNodW5rX3N6ID0gbWluX3QodTMyLCBGSF9NRU1fVEJfTUFYX0xFTkdUSCwgc2VjdGlvbi0+bGVuKTsKIAlpbnQgcmV0ID0gMDsKIAogCUlXTF9ERUJVR19GVyh0cmFucywgIlslZF0gdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIsCkBAIC0xMDEyLDE2ICsxMDEyLDIxIEBACiAJLyogU3RvcCB0aGUgZGV2aWNlLCBhbmQgcHV0IGl0IGluIGxvdyBwb3dlciBzdGF0ZSAqLwogCWl3bF9wY2llX2FwbV9zdG9wKHRyYW5zKTsKIAotCS8qIFVwb24gc3RvcCwgdGhlIEFQTSBpc3N1ZXMgYW4gaW50ZXJydXB0IGlmIEhXIFJGIGtpbGwgaXMgc2V0LgotCSAqIENsZWFuIGFnYWluIHRoZSBpbnRlcnJ1cHQgaGVyZQorCS8qIHN0b3AgYW5kIHJlc2V0IHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IgKi8KKwlpd2xfd3JpdGUzMih0cmFucywgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1dfUkVTRVQpOworCXVkZWxheSgyMCk7CisKKwkvKgorCSAqIFVwb24gc3RvcCwgdGhlIEFQTSBpc3N1ZXMgYW4gaW50ZXJydXB0IGlmIEhXIFJGIGtpbGwgaXMgc2V0LgorCSAqIFRoaXMgaXMgYSBidWcgaW4gY2VydGFpbiB2ZXJpb25zIG9mIHRoZSBoYXJkd2FyZS4KKwkgKiBDZXJ0YWluIGRldmljZXMgYWxzbyBrZWVwIHNlbmRpbmcgSFcgUkYga2lsbCBpbnRlcnJ1cHQgYWxsCisJICogdGhlIHRpbWUsIHVubGVzcyB0aGUgaW50ZXJydXB0IGlzIEFDS2VkIGV2ZW4gaWYgdGhlIGludGVycnVwdAorCSAqIHNob3VsZCBiZSBtYXNrZWQuIFJlLUFDSyBhbGwgdGhlIGludGVycnVwdHMgaGVyZS4KIAkgKi8KIAlzcGluX2xvY2soJnRyYW5zX3BjaWUtPmlycV9sb2NrKTsKIAlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHRyYW5zKTsKIAlzcGluX3VubG9jaygmdHJhbnNfcGNpZS0+aXJxX2xvY2spOwogCi0JLyogc3RvcCBhbmQgcmVzZXQgdGhlIG9uLWJvYXJkIHByb2Nlc3NvciAqLwotCWl3bF93cml0ZTMyKHRyYW5zLCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7Ci0JdWRlbGF5KDIwKTsKIAogCS8qIGNsZWFyIGFsbCBzdGF0dXMgYml0cyAqLwogCWNsZWFyX2JpdChTVEFUVVNfU1lOQ19IQ01EX0FDVElWRSwgJnRyYW5zLT5zdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKaW5kZXggODQ2YTJlNi4uYzcwZWZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCkBAIC02NjYsNyArNjY2LDggQEAKIH0KIAogc3RhdGljIGludCBfcnRsX3BjaV9pbml0X29uZV9yeGRlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIHU4ICplbnRyeSwgaW50IHJ4cmluZ19pZHgsIGludCBkZXNjX2lkeCkKKwkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKm5ld19za2IsIHU4ICplbnRyeSwKKwkJCQkgICAgaW50IHJ4cmluZ19pZHgsIGludCBkZXNjX2lkeCkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKQEAgLTY3NCwxMSArNjc1LDE1IEBACiAJdTggdG1wX29uZSA9IDE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAorCWlmIChsaWtlbHkobmV3X3NrYikpIHsKKwkJc2tiID0gbmV3X3NrYjsKKwkJZ290byByZW1hcDsKKwl9CiAJc2tiID0gZGV2X2FsbG9jX3NrYihydGxwY2ktPnJ4YnVmZmVyc2l6ZSk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAwOwotCXJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5yeF9idWZbZGVzY19pZHhdID0gc2tiOwogCityZW1hcDoKIAkvKiBqdXN0IHNldCBza2ItPmNiIHRvIG1hcHBpbmcgYWRkciBmb3IgcGNpX3VubWFwX3NpbmdsZSB1c2UgKi8KIAkqKChkbWFfYWRkcl90ICopc2tiLT5jYikgPQogCQlwY2lfbWFwX3NpbmdsZShydGxwY2ktPnBkZXYsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwKQEAgLTY4Niw2ICs2OTEsNyBAQAogCWJ1ZmZlcmFkZHJlc3MgPSAqKChkbWFfYWRkcl90ICopc2tiLT5jYik7CiAJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihydGxwY2ktPnBkZXYsIGJ1ZmZlcmFkZHJlc3MpKQogCQlyZXR1cm4gMDsKKwlydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0ucnhfYnVmW2Rlc2NfaWR4XSA9IHNrYjsKIAlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykgewogCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoaHcsICh1OCAqKWVudHJ5LCBmYWxzZSwKIAkJCQkJICAgIEhXX0RFU0NfUlhfUFJFUEFSRSwKQEAgLTc4MSw2ICs3ODcsNyBAQAogCQkvKnJ4IHBrdCAqLwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLnJ4X2J1ZlsKIAkJCQkgICAgICBydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uaWR4XTsKKwkJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CiAKIAkJaWYgKHJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cpIHsKIAkJCXJ4X3JlbWFpbmVkX2NudCA9CkBAIC04MDcsNiArODE0LDEzIEBACiAJCXBjaV91bm1hcF9zaW5nbGUocnRscGNpLT5wZGV2LCAqKChkbWFfYWRkcl90ICopc2tiLT5jYiksCiAJCQkJIHJ0bHBjaS0+cnhidWZmZXJzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCisJCS8qIGdldCBhIG5ldyBza2IgLSBpZiBmYWlsLCBvbGQgb25lIHdpbGwgYmUgcmV1c2VkICovCisJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKKwkJaWYgKHVubGlrZWx5KCFuZXdfc2tiKSkgeworCQkJcHJfZXJyKCJBbGxvY2F0aW9uIG9mIG5ldyBza2IgZmFpbGVkIGluICVzXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCWdvdG8gbm9fbmV3OworCQl9CiAJCWlmIChydGxwcml2LT51c2VfbmV3X3RyeF9mbG93KSB7CiAJCQlidWZmZXJfZGVzYyA9CiAJCQkgICZydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uYnVmZmVyX2Rlc2MKQEAgLTkxMSwxNCArOTI1LDE2IEBACiAJCQlzY2hlZHVsZV93b3JrKCZydGxwcml2LT53b3Jrcy5scHNfY2hhbmdlX3dvcmspOwogCQl9CiBlbmQ6CisJCXNrYiA9IG5ld19za2I7Citub19uZXc6CiAJCWlmIChydGxwcml2LT51c2VfbmV3X3RyeF9mbG93KSB7Ci0JCQlfcnRsX3BjaV9pbml0X29uZV9yeGRlc2MoaHcsICh1OCAqKWJ1ZmZlcl9kZXNjLAorCQkJX3J0bF9wY2lfaW5pdF9vbmVfcnhkZXNjKGh3LCBza2IsICh1OCAqKWJ1ZmZlcl9kZXNjLAogCQkJCQkJIHJ4cmluZ19pZHgsCi0JCQkJCSAgICAgICBydGxwY2ktPnJ4X3JpbmdbcnhyaW5nX2lkeF0uaWR4KTsKLQkJfSBlbHNlIHsKLQkJCV9ydGxfcGNpX2luaXRfb25lX3J4ZGVzYyhodywgKHU4ICopcGRlc2MsIHJ4cmluZ19pZHgsCiAJCQkJCQkgcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmlkeCk7Ci0KKwkJfSBlbHNlIHsKKwkJCV9ydGxfcGNpX2luaXRfb25lX3J4ZGVzYyhodywgc2tiLCAodTggKilwZGVzYywKKwkJCQkJCSByeHJpbmdfaWR4LAorCQkJCQkJIHJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5pZHgpOwogCQkJaWYgKHJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5pZHggPT0KIAkJCSAgICBydGxwY2ktPnJ4cmluZ2NvdW50IC0gMSkKIAkJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoaHcsICh1OCAqKXBkZXNjLApAQCAtMTMwNyw3ICsxMzIzLDcgQEAKIAkJcnRscGNpLT5yeF9yaW5nW3J4cmluZ19pZHhdLmlkeCA9IDA7CiAJCWZvciAoaSA9IDA7IGkgPCBydGxwY2ktPnJ4cmluZ2NvdW50OyBpKyspIHsKIAkJCWVudHJ5ID0gJnJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5idWZmZXJfZGVzY1tpXTsKLQkJCWlmICghX3J0bF9wY2lfaW5pdF9vbmVfcnhkZXNjKGh3LCAodTggKillbnRyeSwKKwkJCWlmICghX3J0bF9wY2lfaW5pdF9vbmVfcnhkZXNjKGh3LCBOVUxMLCAodTggKillbnRyeSwKIAkJCQkJCSAgICAgIHJ4cmluZ19pZHgsIGkpKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC0xMzMyLDcgKzEzNDgsNyBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBydGxwY2ktPnJ4cmluZ2NvdW50OyBpKyspIHsKIAkJCWVudHJ5ID0gJnJ0bHBjaS0+cnhfcmluZ1tyeHJpbmdfaWR4XS5kZXNjW2ldOwotCQkJaWYgKCFfcnRsX3BjaV9pbml0X29uZV9yeGRlc2MoaHcsICh1OCAqKWVudHJ5LAorCQkJaWYgKCFfcnRsX3BjaV9pbml0X29uZV9yeGRlc2MoaHcsIE5VTEwsICh1OCAqKWVudHJ5LAogCQkJCQkJICAgICAgcnhyaW5nX2lkeCwgaSkpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL3hlbmJ1cy5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMKaW5kZXggZWZiYWYyYS4uNzk0MjA0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMKQEAgLTczNyw2ICs3MzcsNyBAQAogCQl9CiAKIAkJcXVldWUtPnJlbWFpbmluZ19jcmVkaXQgPSBjcmVkaXRfYnl0ZXM7CisJCXF1ZXVlLT5jcmVkaXRfdXNlYyA9IGNyZWRpdF91c2VjOwogCiAJCWVyciA9IGNvbm5lY3RfcmluZ3MoYmUsIHF1ZXVlKTsKIAkJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCAyMmJjYjRlLi5kOGMxMDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtODgsMTAgKzg4LDggQEAKICNkZWZpbmUgSVJRX05BTUVfU0laRSAoUVVFVUVfTkFNRV9TSVpFICsgMykKIAogc3RydWN0IG5ldGZyb250X3N0YXRzIHsKLQl1NjQJCQlyeF9wYWNrZXRzOwotCXU2NAkJCXR4X3BhY2tldHM7Ci0JdTY0CQkJcnhfYnl0ZXM7Ci0JdTY0CQkJdHhfYnl0ZXM7CisJdTY0CQkJcGFja2V0czsKKwl1NjQJCQlieXRlczsKIAlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMJc3luY3A7CiB9OwogCkBAIC0xNjAsNyArMTU4LDggQEAKIAlzdHJ1Y3QgbmV0ZnJvbnRfcXVldWUgKnF1ZXVlczsKIAogCS8qIFN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QgbmV0ZnJvbnRfc3RhdHMgX19wZXJjcHUgKnN0YXRzOworCXN0cnVjdCBuZXRmcm9udF9zdGF0cyBfX3BlcmNwdSAqcnhfc3RhdHM7CisJc3RydWN0IG5ldGZyb250X3N0YXRzIF9fcGVyY3B1ICp0eF9zdGF0czsKIAogCWF0b21pY190IHJ4X2dzb19jaGVja3N1bV9maXh1cDsKIH07CkBAIC01NjUsNyArNTY0LDcgQEAKIHsKIAl1bnNpZ25lZCBzaG9ydCBpZDsKIAlzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRmcm9udF9zdGF0cyAqc3RhdHMgPSB0aGlzX2NwdV9wdHIobnAtPnN0YXRzKTsKKwlzdHJ1Y3QgbmV0ZnJvbnRfc3RhdHMgKnR4X3N0YXRzID0gdGhpc19jcHVfcHRyKG5wLT50eF9zdGF0cyk7CiAJc3RydWN0IHhlbl9uZXRpZl90eF9yZXF1ZXN0ICp0eDsKIAljaGFyICpkYXRhID0gc2tiLT5kYXRhOwogCVJJTkdfSURYIGk7CkBAIC02NzIsMTAgKzY3MSwxMCBAQAogCWlmIChub3RpZnkpCiAJCW5vdGlmeV9yZW1vdGVfdmlhX2lycShxdWV1ZS0+dHhfaXJxKTsKIAotCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnN0YXRzLT5zeW5jcCk7Ci0Jc3RhdHMtPnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0JdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnN0YXRzLT5zeW5jcCk7CisJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmdHhfc3RhdHMtPnN5bmNwKTsKKwl0eF9zdGF0cy0+Ynl0ZXMgKz0gc2tiLT5sZW47CisJdHhfc3RhdHMtPnBhY2tldHMrKzsKKwl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmdHhfc3RhdHMtPnN5bmNwKTsKIAogCS8qIE5vdGU6IEl0IGlzIG5vdCBzYWZlIHRvIGFjY2VzcyBza2IgYWZ0ZXIgeGVubmV0X3R4X2J1Zl9nYygpISAqLwogCXhlbm5ldF90eF9idWZfZ2MocXVldWUpOwpAQCAtOTMxLDcgKzkzMCw3IEBACiBzdGF0aWMgaW50IGhhbmRsZV9pbmNvbWluZ19xdWV1ZShzdHJ1Y3QgbmV0ZnJvbnRfcXVldWUgKnF1ZXVlLAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpyeHEpCiB7Ci0Jc3RydWN0IG5ldGZyb250X3N0YXRzICpzdGF0cyA9IHRoaXNfY3B1X3B0cihxdWV1ZS0+aW5mby0+c3RhdHMpOworCXN0cnVjdCBuZXRmcm9udF9zdGF0cyAqcnhfc3RhdHMgPSB0aGlzX2NwdV9wdHIocXVldWUtPmluZm8tPnJ4X3N0YXRzKTsKIAlpbnQgcGFja2V0c19kcm9wcGVkID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCkBAIC05NTIsMTAgKzk1MSwxMCBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZzdGF0cy0+c3luY3ApOwotCQlzdGF0cy0+cnhfcGFja2V0cysrOwotCQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCXU2NF9zdGF0c191cGRhdGVfZW5kKCZzdGF0cy0+c3luY3ApOworCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZyeF9zdGF0cy0+c3luY3ApOworCQlyeF9zdGF0cy0+cGFja2V0cysrOworCQlyeF9zdGF0cy0+Ynl0ZXMgKz0gc2tiLT5sZW47CisJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZyeF9zdGF0cy0+c3luY3ApOwogCiAJCS8qIFBhc3MgaXQgdXAuICovCiAJCW5hcGlfZ3JvX3JlY2VpdmUoJnF1ZXVlLT5uYXBpLCBza2IpOwpAQCAtMTA3OSwxOCArMTA3OCwyMiBAQAogCWludCBjcHU7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCBuZXRmcm9udF9zdGF0cyAqc3RhdHMgPSBwZXJfY3B1X3B0cihucC0+c3RhdHMsIGNwdSk7CisJCXN0cnVjdCBuZXRmcm9udF9zdGF0cyAqcnhfc3RhdHMgPSBwZXJfY3B1X3B0cihucC0+cnhfc3RhdHMsIGNwdSk7CisJCXN0cnVjdCBuZXRmcm9udF9zdGF0cyAqdHhfc3RhdHMgPSBwZXJfY3B1X3B0cihucC0+dHhfc3RhdHMsIGNwdSk7CiAJCXU2NCByeF9wYWNrZXRzLCByeF9ieXRlcywgdHhfcGFja2V0cywgdHhfYnl0ZXM7CiAJCXVuc2lnbmVkIGludCBzdGFydDsKIAogCQlkbyB7Ci0JCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbl9pcnEoJnN0YXRzLT5zeW5jcCk7CisJCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbl9pcnEoJnR4X3N0YXRzLT5zeW5jcCk7CisJCQl0eF9wYWNrZXRzID0gdHhfc3RhdHMtPnBhY2tldHM7CisJCQl0eF9ieXRlcyA9IHR4X3N0YXRzLT5ieXRlczsKKwkJfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5X2lycSgmdHhfc3RhdHMtPnN5bmNwLCBzdGFydCkpOwogCi0JCQlyeF9wYWNrZXRzID0gc3RhdHMtPnJ4X3BhY2tldHM7Ci0JCQl0eF9wYWNrZXRzID0gc3RhdHMtPnR4X3BhY2tldHM7Ci0JCQlyeF9ieXRlcyA9IHN0YXRzLT5yeF9ieXRlczsKLQkJCXR4X2J5dGVzID0gc3RhdHMtPnR4X2J5dGVzOwotCQl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnlfaXJxKCZzdGF0cy0+c3luY3AsIHN0YXJ0KSk7CisJCWRvIHsKKwkJCXN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luX2lycSgmcnhfc3RhdHMtPnN5bmNwKTsKKwkJCXJ4X3BhY2tldHMgPSByeF9zdGF0cy0+cGFja2V0czsKKwkJCXJ4X2J5dGVzID0gcnhfc3RhdHMtPmJ5dGVzOworCQl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnlfaXJxKCZyeF9zdGF0cy0+c3luY3AsIHN0YXJ0KSk7CiAKIAkJdG90LT5yeF9wYWNrZXRzICs9IHJ4X3BhY2tldHM7CiAJCXRvdC0+dHhfcGFja2V0cyArPSB0eF9wYWNrZXRzOwpAQCAtMTI3NSw2ICsxMjc4LDE1IEBACiAjZW5kaWYKIH07CiAKK3N0YXRpYyB2b2lkIHhlbm5ldF9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBuZXRmcm9udF9pbmZvICpucCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlmcmVlX3BlcmNwdShucC0+cnhfc3RhdHMpOworCWZyZWVfcGVyY3B1KG5wLT50eF9zdGF0cyk7CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKK30KKwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICp4ZW5uZXRfY3JlYXRlX2RldihzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KQogewogCWludCBlcnI7CkBAIC0xMjk1LDggKzEzMDcsMTEgQEAKIAlucC0+cXVldWVzID0gTlVMTDsKIAogCWVyciA9IC1FTk9NRU07Ci0JbnAtPnN0YXRzID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IG5ldGZyb250X3N0YXRzKTsKLQlpZiAobnAtPnN0YXRzID09IE5VTEwpCisJbnAtPnJ4X3N0YXRzID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IG5ldGZyb250X3N0YXRzKTsKKwlpZiAobnAtPnJ4X3N0YXRzID09IE5VTEwpCisJCWdvdG8gZXhpdDsKKwlucC0+dHhfc3RhdHMgPSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgbmV0ZnJvbnRfc3RhdHMpOworCWlmIChucC0+dHhfc3RhdHMgPT0gTlVMTCkKIAkJZ290byBleGl0OwogCiAJbmV0ZGV2LT5uZXRkZXZfb3BzCT0gJnhlbm5ldF9uZXRkZXZfb3BzOwpAQCAtMTMyNyw3ICsxMzQyLDcgQEAKIAlyZXR1cm4gbmV0ZGV2OwogCiAgZXhpdDoKLQlmcmVlX25ldGRldihuZXRkZXYpOworCXhlbm5ldF9mcmVlX25ldGRldihuZXRkZXYpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKQEAgLTEzNjksNyArMTM4NCw3IEBACiAJcmV0dXJuIDA7CiAKICBmYWlsOgotCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJeGVubmV0X2ZyZWVfbmV0ZGV2KG5ldGRldik7CiAJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTIxODksOSArMjIwNCw3IEBACiAJCWluZm8tPnF1ZXVlcyA9IE5VTEw7CiAJfQogCi0JZnJlZV9wZXJjcHUoaW5mby0+c3RhdHMpOwotCi0JZnJlZV9uZXRkZXYoaW5mby0+bmV0ZGV2KTsKKwl4ZW5uZXRfZnJlZV9uZXRkZXYoaW5mby0+bmV0ZGV2KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vdmVybGF5LmMgYi9kcml2ZXJzL29mL292ZXJsYXkuYwppbmRleCBlYTYzZmJkMi4uMzUyYjRmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vdmVybGF5LmMKKysrIGIvZHJpdmVycy9vZi9vdmVybGF5LmMKQEAgLTExNCwxNyArMTE0LDYgQEAKIAkJcmV0ID0gb2Zfb3ZlcmxheV9hcHBseV9vbmUob3YsIHRjaGlsZCwgY2hpbGQpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQotCQkvKiBUaGUgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBjb3BpZWQsIG5vdyBkbyB0aGUgY2hpbGQgbm9kZXMgKi8KLQkJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShjaGlsZCwgZ3JhbmRjaGlsZCkgewotCQkJcmV0ID0gb2Zfb3ZlcmxheV9hcHBseV9zaW5nbGVfZGV2aWNlX25vZGUob3YsIHRjaGlsZCwgZ3JhbmRjaGlsZCk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFwcGx5IHNpbmdsZSBub2RlIEAlcy8lc1xuIiwKLQkJCQkJX19mdW5jX18sIHRjaGlsZC0+ZnVsbF9uYW1lLAotCQkJCQlncmFuZGNoaWxkLT5uYW1lKTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQl9CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvcGxhdGZvcm0uYyBiL2RyaXZlcnMvb2YvcGxhdGZvcm0uYwppbmRleCA1YjMzYzZhLi5iMGQ1MGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9vZi9wbGF0Zm9ybS5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAkJc2l6ZSA9IGRldi0+Y29oZXJlbnRfZG1hX21hc2s7CiAJfSBlbHNlIHsKIAkJb2Zmc2V0ID0gUEZOX0RPV04ocGFkZHIgLSBkbWFfYWRkcik7Ci0JCWRldl9kYmcoZGV2LCAiZG1hX3Bmbl9vZmZzZXQoJSMwOGx4KVxuIiwgZGV2LT5kbWFfcGZuX29mZnNldCk7CisJCWRldl9kYmcoZGV2LCAiZG1hX3Bmbl9vZmZzZXQoJSMwOGx4KVxuIiwgb2Zmc2V0KTsKIAl9CiAJZGV2LT5kbWFfcGZuX29mZnNldCA9IG9mZnNldDsKIApAQCAtNTY2LDYgKzU2NiwxMCBAQAogCQlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhyZC0+ZG4tPnBhcmVudCwgT0ZfUE9QVUxBVEVEX0JVUykpCiAJCQlyZXR1cm4gTk9USUZZX09LOwkvKiBub3QgZm9yIHVzICovCiAKKwkJLyogYWxyZWFkeSBwb3B1bGF0ZWQ/IChkcml2ZXIgdXNpbmcgb2ZfcG9wdWxhdGUgbWFudWFsbHkpICovCisJCWlmIChvZl9ub2RlX2NoZWNrX2ZsYWcocmQtPmRuLCBPRl9QT1BVTEFURUQpKQorCQkJcmV0dXJuIE5PVElGWV9PSzsKKwogCQkvKiBwZGV2X3BhcmVudCBtYXkgYmUgTlVMTCB3aGVuIG5vIGJ1cyBwbGF0Zm9ybSBkZXZpY2UgKi8KIAkJcGRldl9wYXJlbnQgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHJkLT5kbi0+cGFyZW50KTsKIAkJcGRldiA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUocmQtPmRuLCBOVUxMLApAQCAtNTgxLDYgKzU4NSwxMSBAQAogCQlicmVhazsKIAogCWNhc2UgT0ZfUkVDT05GSUdfQ0hBTkdFX1JFTU9WRToKKworCQkvKiBhbHJlYWR5IGRlcG9wdWxhdGVkPyAqLworCQlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhyZC0+ZG4sIE9GX1BPUFVMQVRFRCkpCisJCQlyZXR1cm4gTk9USUZZX09LOworCiAJCS8qIGZpbmQgb3VyIGRldmljZSBieSBub2RlICovCiAJCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHJkLT5kbik7CiAJCWlmIChwZGV2ID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL3VuaXR0ZXN0LWRhdGEvdGVzdHMtb3ZlcmxheS5kdHNpIGIvZHJpdmVycy9vZi91bml0dGVzdC1kYXRhL3Rlc3RzLW92ZXJsYXkuZHRzaQppbmRleCA3NTk3NmRhLi5hMmI2ODdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL3VuaXR0ZXN0LWRhdGEvdGVzdHMtb3ZlcmxheS5kdHNpCisrKyBiL2RyaXZlcnMvb2YvdW5pdHRlc3QtZGF0YS90ZXN0cy1vdmVybGF5LmR0c2kKQEAgLTE3Niw1ICsxNzYsNjAgQEAKIAkJCX07CiAJCX07CiAKKwkJb3ZlcmxheTEwIHsKKwkJCWZyYWdtZW50QDAgeworCQkJCXRhcmdldC1wYXRoID0gIi90ZXN0Y2FzZS1kYXRhL292ZXJsYXktbm9kZS90ZXN0LWJ1cyI7CisJCQkJX19vdmVybGF5X18geworCisJCQkJCS8qIHN1cHByZXNzIERUQyB3YXJuaW5nICovCisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCQl0ZXN0LXNlbGZ0ZXN0MTAgeworCQkJCQkJY29tcGF0aWJsZSA9ICJzZWxmdGVzdCI7CisJCQkJCQlzdGF0dXMgPSAib2theSI7CisJCQkJCQlyZWcgPSA8MTA+OworCisJCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJCQl0ZXN0LXNlbGZ0ZXN0MTAxIHsKKwkJCQkJCQljb21wYXRpYmxlID0gInNlbGZ0ZXN0IjsKKwkJCQkJCQlzdGF0dXMgPSAib2theSI7CisJCQkJCQkJcmVnID0gPDE+OworCQkJCQkJfTsKKworCQkJCQl9OworCQkJCX07CisJCQl9OworCQl9OworCisJCW92ZXJsYXkxMSB7CisJCQlmcmFnbWVudEAwIHsKKwkJCQl0YXJnZXQtcGF0aCA9ICIvdGVzdGNhc2UtZGF0YS9vdmVybGF5LW5vZGUvdGVzdC1idXMiOworCQkJCV9fb3ZlcmxheV9fIHsKKworCQkJCQkvKiBzdXBwcmVzcyBEVEMgd2FybmluZyAqLworCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQkJdGVzdC1zZWxmdGVzdDExIHsKKwkJCQkJCWNvbXBhdGlibGUgPSAic2VsZnRlc3QiOworCQkJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJCQkJcmVnID0gPDExPjsKKworCQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCQkJdGVzdC1zZWxmdGVzdDExMSB7CisJCQkJCQkJY29tcGF0aWJsZSA9ICJzZWxmdGVzdCI7CisJCQkJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJCQkJCXJlZyA9IDwxPjsKKwkJCQkJCX07CisKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvdW5pdHRlc3QuYyBiL2RyaXZlcnMvb2YvdW5pdHRlc3QuYwppbmRleCA4NDQ4MzhlLi40MWE0YTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL3VuaXR0ZXN0LmMKKysrIGIvZHJpdmVycy9vZi91bml0dGVzdC5jCkBAIC05NzgsNiArOTc4LDkgQEAKIAl9CiAKIAlkZXZfZGJnKGRldiwgIiVzIGZvciBub2RlIEAlc1xuIiwgX19mdW5jX18sIG5wLT5mdWxsX25hbWUpOworCisJb2ZfcGxhdGZvcm1fcG9wdWxhdGUobnAsIE5VTEwsIE5VTEwsICZwZGV2LT5kZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzODUsNiArMTM4OCwzOSBAQAogCXNlbGZ0ZXN0KDEsICJvdmVybGF5IHRlc3QgJWQgcGFzc2VkXG4iLCA4KTsKIH0KIAorLyogdGVzdCBpbnNlcnRpb24gb2YgYSBidXMgd2l0aCBwYXJlbnQgZGV2aWNlcyAqLworc3RhdGljIHZvaWQgb2Zfc2VsZnRlc3Rfb3ZlcmxheV8xMCh2b2lkKQoreworCWludCByZXQ7CisJY2hhciAqY2hpbGRfcGF0aDsKKworCS8qIGRldmljZSBzaG91bGQgZGlzYWJsZSAqLworCXJldCA9IG9mX3NlbGZ0ZXN0X2FwcGx5X292ZXJsYXlfY2hlY2soMTAsIDEwLCAwLCAxKTsKKwlpZiAoc2VsZnRlc3QocmV0ID09IDAsICJvdmVybGF5IHRlc3QgJWQgZmFpbGVkOyBvdmVybGF5IGFwcGxpY2F0aW9uXG4iLCAxMCkpCisJCXJldHVybjsKKworCWNoaWxkX3BhdGggPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzL3Rlc3Qtc2VsZnRlc3QxMDEiLAorCQkJc2VsZnRlc3RfcGF0aCgxMCkpOworCWlmIChzZWxmdGVzdChjaGlsZF9wYXRoLCAib3ZlcmxheSB0ZXN0ICVkIGZhaWxlZDsga2FzcHJpbnRmXG4iLCAxMCkpCisJCXJldHVybjsKKworCXJldCA9IG9mX3BhdGhfcGxhdGZvcm1fZGV2aWNlX2V4aXN0cyhjaGlsZF9wYXRoKTsKKwlrZnJlZShjaGlsZF9wYXRoKTsKKwlpZiAoc2VsZnRlc3QocmV0LCAib3ZlcmxheSB0ZXN0ICVkIGZhaWxlZDsgbm8gY2hpbGQgZGV2aWNlXG4iLCAxMCkpCisJCXJldHVybjsKK30KKworLyogdGVzdCBpbnNlcnRpb24gb2YgYSBidXMgd2l0aCBwYXJlbnQgZGV2aWNlcyAoYW5kIHJldmVydCkgKi8KK3N0YXRpYyB2b2lkIG9mX3NlbGZ0ZXN0X292ZXJsYXlfMTEodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyogZGV2aWNlIHNob3VsZCBkaXNhYmxlICovCisJcmV0ID0gb2Zfc2VsZnRlc3RfYXBwbHlfcmV2ZXJ0X292ZXJsYXlfY2hlY2soMTEsIDExLCAwLCAxKTsKKwlpZiAoc2VsZnRlc3QocmV0ID09IDAsICJvdmVybGF5IHRlc3QgJWQgZmFpbGVkOyBvdmVybGF5IGFwcGxpY2F0aW9uXG4iLCAxMSkpCisJCXJldHVybjsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IG9mX3NlbGZ0ZXN0X292ZXJsYXkodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmJ1c19ucCA9IE5VTEw7CkBAIC0xNDMzLDYgKzE0NjksOSBAQAogCW9mX3NlbGZ0ZXN0X292ZXJsYXlfNigpOwogCW9mX3NlbGZ0ZXN0X292ZXJsYXlfOCgpOwogCisJb2Zfc2VsZnRlc3Rfb3ZlcmxheV8xMCgpOworCW9mX3NlbGZ0ZXN0X292ZXJsYXlfMTEoKTsKKwogb3V0OgogCW9mX25vZGVfcHV0KGJ1c19ucCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMgYi9kcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMKaW5kZXggMzdlNzFmZi4uZGNlYjlkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvbGJhX3BjaS5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYwpAQCAtNjk0LDkgKzY5NCw4IEBACiAJCWludCBpOwogCQkvKiBQQ0ktUENJIEJyaWRnZSAqLwogCQlwY2lfcmVhZF9icmlkZ2VfYmFzZXMoYnVzKTsKLQkJZm9yIChpID0gUENJX0JSSURHRV9SRVNPVVJDRVM7IGkgPCBQQ0lfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCQlwY2lfY2xhaW1fcmVzb3VyY2UoYnVzLT5zZWxmLCBpKTsKLQkJfQorCQlmb3IgKGkgPSBQQ0lfQlJJREdFX1JFU09VUkNFUzsgaSA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpKyspCisJCQlwY2lfY2xhaW1fYnJpZGdlX3Jlc291cmNlKGJ1cy0+c2VsZiwgaSk7CiAJfSBlbHNlIHsKIAkJLyogSG9zdC1QQ0kgQnJpZGdlICovCiAJCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9idXMuYyBiL2RyaXZlcnMvcGNpL2J1cy5jCmluZGV4IDczYWVmNTEuLjhmYjE2MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2J1cy5jCisrKyBiL2RyaXZlcnMvcGNpL2J1cy5jCkBAIC0yMjgsNiArMjI4LDQ5IEBACiB9CiBFWFBPUlRfU1lNQk9MKHBjaV9idXNfYWxsb2NfcmVzb3VyY2UpOwogCisvKgorICogVGhlIEBpZHggcmVzb3VyY2Ugb2YgQGRldiBzaG91bGQgYmUgYSBQQ0ktUENJIGJyaWRnZSB3aW5kb3cuICBJZiB0aGlzCisgKiByZXNvdXJjZSBmaXRzIGluc2lkZSBhIHdpbmRvdyBvZiBhbiB1cHN0cmVhbSBicmlkZ2UsIGRvIG5vdGhpbmcuICBJZiBpdAorICogb3ZlcmxhcHMgYW4gdXBzdHJlYW0gd2luZG93IGJ1dCBleHRlbmRzIG91dHNpZGUgaXQsIGNsaXAgdGhlIHJlc291cmNlIHNvCisgKiBpdCBmaXRzIGNvbXBsZXRlbHkgaW5zaWRlLgorICovCitib29sIHBjaV9idXNfY2xpcF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWR4KQoreworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBkZXYtPmJ1czsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZkZXYtPnJlc291cmNlW2lkeF07CisJc3RydWN0IHJlc291cmNlIG9yaWdfcmVzID0gKnJlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IGk7CisKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgciwgaSkgeworCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIGVuZDsKKworCQlpZiAoIXIpCisJCQljb250aW51ZTsKKworCQlpZiAocmVzb3VyY2VfdHlwZShyZXMpICE9IHJlc291cmNlX3R5cGUocikpCisJCQljb250aW51ZTsKKworCQlzdGFydCA9IG1heChyLT5zdGFydCwgcmVzLT5zdGFydCk7CisJCWVuZCA9IG1pbihyLT5lbmQsIHJlcy0+ZW5kKTsKKworCQlpZiAoc3RhcnQgPiBlbmQpCisJCQljb250aW51ZTsJLyogbm8gb3ZlcmxhcCAqLworCisJCWlmIChyZXMtPnN0YXJ0ID09IHN0YXJ0ICYmIHJlcy0+ZW5kID09IGVuZCkKKwkJCXJldHVybiBmYWxzZTsJLyogbm8gY2hhbmdlICovCisKKwkJcmVzLT5zdGFydCA9IHN0YXJ0OworCQlyZXMtPmVuZCA9IGVuZDsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICIlcFIgY2xpcHBlZCB0byAlcFJcbiIsCisJCQkJICZvcmlnX3JlcywgcmVzKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgX193ZWFrIHBjaWJpb3NfcmVzb3VyY2Vfc3VydmV5X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKSB7IH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IGNhYjA1ZjMuLmU5ZDRmZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0zMjcxLDcgKzMyNzEsOCBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCi0JaWYgKHBjaV9pc19yb290X2J1cyhkZXYtPmJ1cykgfHwgZGV2LT5zdWJvcmRpbmF0ZSB8fCAhZGV2LT5idXMtPnNlbGYpCisJaWYgKHBjaV9pc19yb290X2J1cyhkZXYtPmJ1cykgfHwgZGV2LT5zdWJvcmRpbmF0ZSB8fAorCSAgICAhZGV2LT5idXMtPnNlbGYgfHwgZGV2LT5kZXZfZmxhZ3MgJiBQQ0lfREVWX0ZMQUdTX05PX0JVU19SRVNFVCkKIAkJcmV0dXJuIC1FTk9UVFk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZXYsICZkZXYtPmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCkBAIC0zMzA1LDcgKzMzMDYsOCBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCi0JaWYgKGRldi0+c3Vib3JkaW5hdGUgfHwgIWRldi0+c2xvdCkKKwlpZiAoZGV2LT5zdWJvcmRpbmF0ZSB8fCAhZGV2LT5zbG90IHx8CisJICAgIGRldi0+ZGV2X2ZsYWdzICYgUENJX0RFVl9GTEFHU19OT19CVVNfUkVTRVQpCiAJCXJldHVybiAtRU5PVFRZOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwZGV2LCAmZGV2LT5idXMtPmRldmljZXMsIGJ1c19saXN0KQpAQCAtMzU1Nyw2ICszNTU5LDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKTsKIAorLyogRG8gYW55IGRldmljZXMgb24gb3IgYmVsb3cgdGhpcyBidXMgcHJldmVudCBhIGJ1cyByZXNldD8gKi8KK3N0YXRpYyBib29sIHBjaV9idXNfcmVzZXRhYmxlKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQlpZiAoZGV2LT5kZXZfZmxhZ3MgJiBQQ0lfREVWX0ZMQUdTX05PX0JVU19SRVNFVCB8fAorCQkgICAgKGRldi0+c3Vib3JkaW5hdGUgJiYgIXBjaV9idXNfcmVzZXRhYmxlKGRldi0+c3Vib3JkaW5hdGUpKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyogTG9jayBkZXZpY2VzIGZyb20gdGhlIHRvcCBvZiB0aGUgdHJlZSBkb3duICovCiBzdGF0aWMgdm9pZCBwY2lfYnVzX2xvY2soc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKQEAgLTM2MDcsNiArMzYyMywyMiBAQAogCXJldHVybiAwOwogfQogCisvKiBEbyBhbnkgZGV2aWNlcyBvbiBvciBiZWxvdyB0aGlzIHNsb3QgcHJldmVudCBhIGJ1cyByZXNldD8gKi8KK3N0YXRpYyBib29sIHBjaV9zbG90X3Jlc2V0YWJsZShzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmc2xvdC0+YnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQlpZiAoIWRldi0+c2xvdCB8fCBkZXYtPnNsb3QgIT0gc2xvdCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGV2LT5kZXZfZmxhZ3MgJiBQQ0lfREVWX0ZMQUdTX05PX0JVU19SRVNFVCB8fAorCQkgICAgKGRldi0+c3Vib3JkaW5hdGUgJiYgIXBjaV9idXNfcmVzZXRhYmxlKGRldi0+c3Vib3JkaW5hdGUpKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyogTG9jayBkZXZpY2VzIGZyb20gdGhlIHRvcCBvZiB0aGUgdHJlZSBkb3duICovCiBzdGF0aWMgdm9pZCBwY2lfc2xvdF9sb2NrKHN0cnVjdCBwY2lfc2xvdCAqc2xvdCkKIHsKQEAgLTM3MjgsNyArMzc2MCw3IEBACiB7CiAJaW50IHJjOwogCi0JaWYgKCFzbG90KQorCWlmICghc2xvdCB8fCAhcGNpX3Nsb3RfcmVzZXRhYmxlKHNsb3QpKQogCQlyZXR1cm4gLUVOT1RUWTsKIAogCWlmICghcHJvYmUpCkBAIC0zODIwLDcgKzM4NTIsNyBAQAogCiBzdGF0aWMgaW50IHBjaV9idXNfcmVzZXQoc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IHByb2JlKQogewotCWlmICghYnVzLT5zZWxmKQorCWlmICghYnVzLT5zZWxmIHx8ICFwY2lfYnVzX3Jlc2V0YWJsZShidXMpKQogCQlyZXR1cm4gLUVOT1RUWTsKIAogCWlmIChwcm9iZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggOGFmZjI5YS4uZDU0NjMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKKysrIGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTIwOCw2ICsyMDgsNyBAQAogdm9pZCBfX3BjaV9idXNfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAogCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnJlYWxsb2NfaGVhZCwKIAkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpmYWlsX2hlYWQpOworYm9vbCBwY2lfYnVzX2NsaXBfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkeCk7CiAKIC8qKgogICogcGNpX2FyaV9lbmFibGVkIC0gcXVlcnkgQVJJIGZvcndhcmRpbmcgc3RhdHVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGVkNmY4OWIuLmU1MjM1NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0zMDI4LDYgKzMwMjgsMjAgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX01FTExBTk9YLCBQQ0lfQU5ZX0lELAogCQkJIHF1aXJrX2Jyb2tlbl9pbnR4X21hc2tpbmcpOwogCitzdGF0aWMgdm9pZCBxdWlya19ub19idXNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlkZXYtPmRldl9mbGFncyB8PSBQQ0lfREVWX0ZMQUdTX05PX0JVU19SRVNFVDsKK30KKworLyoKKyAqIEF0aGVyb3MgQVI5M3h4IGNoaXBzIGRvIG5vdCBiZWhhdmUgYWZ0ZXIgYSBidXMgcmVzZXQuICBUaGUgZGV2aWNlIHdpbGwKKyAqIHRocm93IGEgTGluayBEb3duIGVycm9yIG9uIEFFUi1jYXBhYmxlIHN5c3RlbXMgYW5kIHJlZ2FyZGxlc3Mgb2YgQUVSLAorICogY29uZmlnIHNwYWNlIG9mIHRoZSBkZXZpY2UgaXMgbmV2ZXIgYWNjZXNzaWJsZSBhZ2FpbiBhbmQgdHlwaWNhbGx5CisgKiBjYXVzZXMgdGhlIHN5c3RlbSB0byBoYW5nIG9yIHJlc2V0IHdoZW4gYWNjZXNzIGlzIGF0dGVtcHRlZC4KKyAqIGh0dHA6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvbGludXgtcGNpL21zZzM0Nzk3Lmh0bWwKKyAqLworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQVRIRVJPUywgMHgwMDMwLCBxdWlya19ub19idXNfcmVzZXQpOworCiAjaWZkZWYgQ09ORklHX0FDUEkKIC8qCiAgKiBBcHBsZTogU2h1dGRvd24gQ2FjdHVzIFJpZGdlIFRodW5kZXJib2x0IGNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCmluZGV4IDA0ODIyMzUuLmUzZTE3ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCkBAIC01MzAsOSArNTMwLDggQEAKICAgIGNvbmZpZyBzcGFjZSB3cml0ZXMsIHNvIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCBhbiBJL08gd2luZG93IG9mCiAgICB0aGUgYnJpZGdlIHdpbGwgaGF2ZSBzb21lIHVuZGVzaXJhYmxlIGFkZHJlc3MgKGUuZy4gMCkgYWZ0ZXIgdGhlCiAgICBmaXJzdCB3cml0ZS4gRGl0dG8gNjQtYml0IHByZWZldGNoYWJsZSBNTUlPLiAgKi8KLXN0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2VfaW8oc3RydWN0IHBjaV9idXMgKmJ1cykKK3N0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2VfaW8oc3RydWN0IHBjaV9kZXYgKmJyaWRnZSkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247CiAJdW5zaWduZWQgbG9uZyBpb19tYXNrOwpAQCAtNTQ1LDcgKzU0NCw3IEBACiAJCWlvX21hc2sgPSBQQ0lfSU9fMUtfUkFOR0VfTUFTSzsKIAogCS8qIFNldCB1cCB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGhlIFBDSSBJL08gc2VnbWVudCBmb3IgdGhpcyBidXMuICovCi0JcmVzID0gYnVzLT5yZXNvdXJjZVswXTsKKwlyZXMgPSAmYnJpZGdlLT5yZXNvdXJjZVtQQ0lfQlJJREdFX1JFU09VUkNFUyArIDBdOwogCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKGJyaWRnZS0+YnVzLCAmcmVnaW9uLCByZXMpOwogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewogCQlwY2lfcmVhZF9jb25maWdfd29yZChicmlkZ2UsIFBDSV9JT19CQVNFLCAmbCk7CkBAIC01NjgsMTUgKzU2NywxNCBAQAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBQQ0lfSU9fQkFTRV9VUFBFUjE2LCBpb191cHBlcjE2KTsKIH0KIAotc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZV9tbWlvKHN0cnVjdCBwY2lfYnVzICpidXMpCitzdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlX21taW8oc3RydWN0IHBjaV9kZXYgKmJyaWRnZSkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247CiAJdTMyIGw7CiAKIAkvKiBTZXQgdXAgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBQQ0kgTWVtb3J5IHNlZ21lbnQgZm9yIHRoaXMgYnVzLiAqLwotCXJlcyA9IGJ1cy0+cmVzb3VyY2VbMV07CisJcmVzID0gJmJyaWRnZS0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVMgKyAxXTsKIAlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhicmlkZ2UtPmJ1cywgJnJlZ2lvbiwgcmVzKTsKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7CiAJCWwgPSAocmVnaW9uLnN0YXJ0ID4+IDE2KSAmIDB4ZmZmMDsKQEAgLTU4OCw5ICs1ODYsOCBAQAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBQQ0lfTUVNT1JZX0JBU0UsIGwpOwogfQogCi1zdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlX21taW9fcHJlZihzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZV9tbWlvX3ByZWYoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247CiAJdTMyIGwsIGJ1LCBsdTsKQEAgLTYwMiw3ICs1OTksNyBAQAogCiAJLyogU2V0IHVwIFBSRUYgYmFzZS9saW1pdC4gKi8KIAlidSA9IGx1ID0gMDsKLQlyZXMgPSBidXMtPnJlc291cmNlWzJdOworCXJlcyA9ICZicmlkZ2UtPnJlc291cmNlW1BDSV9CUklER0VfUkVTT1VSQ0VTICsgMl07CiAJcGNpYmlvc19yZXNvdXJjZV90b19idXMoYnJpZGdlLT5idXMsICZyZWdpb24sIHJlcyk7CiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIKSB7CiAJCWwgPSAocmVnaW9uLnN0YXJ0ID4+IDE2KSAmIDB4ZmZmMDsKQEAgLTYzMCwxMyArNjI3LDEzIEBACiAJCSAmYnVzLT5idXNuX3Jlcyk7CiAKIAlpZiAodHlwZSAmIElPUkVTT1VSQ0VfSU8pCi0JCXBjaV9zZXR1cF9icmlkZ2VfaW8oYnVzKTsKKwkJcGNpX3NldHVwX2JyaWRnZV9pbyhicmlkZ2UpOwogCiAJaWYgKHR5cGUgJiBJT1JFU09VUkNFX01FTSkKLQkJcGNpX3NldHVwX2JyaWRnZV9tbWlvKGJ1cyk7CisJCXBjaV9zZXR1cF9icmlkZ2VfbW1pbyhicmlkZ2UpOwogCiAJaWYgKHR5cGUgJiBJT1JFU09VUkNFX1BSRUZFVENIKQotCQlwY2lfc2V0dXBfYnJpZGdlX21taW9fcHJlZihidXMpOworCQlwY2lfc2V0dXBfYnJpZGdlX21taW9fcHJlZihicmlkZ2UpOwogCiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGJyaWRnZSwgUENJX0JSSURHRV9DT05UUk9MLCBidXMtPmJyaWRnZV9jdGwpOwogfQpAQCAtNjQ5LDYgKzY0Niw0MSBAQAogCV9fcGNpX3NldHVwX2JyaWRnZShidXMsIHR5cGUpOwogfQogCisKK2ludCBwY2lfY2xhaW1fYnJpZGdlX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGludCBpKQoreworCWlmIChpIDwgUENJX0JSSURHRV9SRVNPVVJDRVMgfHwgaSA+IFBDSV9CUklER0VfUkVTT1VSQ0VfRU5EKQorCQlyZXR1cm4gMDsKKworCWlmIChwY2lfY2xhaW1fcmVzb3VyY2UoYnJpZGdlLCBpKSA9PSAwKQorCQlyZXR1cm4gMDsJLyogY2xhaW1lZCB0aGUgd2luZG93ICovCisKKwlpZiAoKGJyaWRnZS0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX0JSSURHRV9QQ0kpCisJCXJldHVybiAwOworCisJaWYgKCFwY2lfYnVzX2NsaXBfcmVzb3VyY2UoYnJpZGdlLCBpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CS8qIGNsaXBwaW5nIGRpZG4ndCBjaGFuZ2UgYW55dGhpbmcgKi8KKworCXN3aXRjaCAoaSAtIFBDSV9CUklER0VfUkVTT1VSQ0VTKSB7CisJY2FzZSAwOgorCQlwY2lfc2V0dXBfYnJpZGdlX2lvKGJyaWRnZSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcGNpX3NldHVwX2JyaWRnZV9tbWlvKGJyaWRnZSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcGNpX3NldHVwX2JyaWRnZV9tbWlvX3ByZWYoYnJpZGdlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHBjaV9jbGFpbV9yZXNvdXJjZShicmlkZ2UsIGkpID09IDApCisJCXJldHVybiAwOwkvKiBjbGFpbWVkIGEgc21hbGxlciB3aW5kb3cgKi8KKworCXJldHVybiAtRUlOVkFMOworfQorCiAvKiBDaGVjayB3aGV0aGVyIHRoZSBicmlkZ2Ugc3VwcG9ydHMgb3B0aW9uYWwgSS9PIGFuZAogICAgcHJlZmV0Y2hhYmxlIG1lbW9yeSByYW5nZXMuIElmIG5vdCwgdGhlIHJlc3BlY3RpdmUKICAgIGJhc2UvbGltaXQgcmVnaXN0ZXJzIG11c3QgYmUgcmVhZC1vbmx5IGFuZCByZWFkIGFzIDAuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9waHktbWlwaHkyOGxwLmMgYi9kcml2ZXJzL3BoeS9waHktbWlwaHkyOGxwLmMKaW5kZXggZTM0ZGExMy4uMjdmYTYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcGh5LW1pcGh5MjhscC5jCisrKyBiL2RyaXZlcnMvcGh5L3BoeS1taXBoeTI4bHAuYwpAQCAtMTA1MCw3ICsxMDUwLDggQEAKIAkJcmV0ID0gbWlwaHkyOGxwX2luaXRfdXNiMyhtaXBoeV9waHkpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZtaXBoeV9kZXYtPm1pcGh5X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1vbWFwLWNvbnRyb2wuYyBiL2RyaXZlcnMvcGh5L3BoeS1vbWFwLWNvbnRyb2wuYwppbmRleCBjOTZlODE4Li5lZmU3MjRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcGh5LW9tYXAtY29udHJvbC5jCisrKyBiL2RyaXZlcnMvcGh5L3BoeS1vbWFwLWNvbnRyb2wuYwpAQCAtMjksMTAgKzI5LDkgQEAKIC8qKgogICogb21hcF9jb250cm9sX3BjaWVfcGNzIC0gc2V0IHRoZSBQQ1MgZGVsYXkgY291bnQKICAqIEBkZXY6IHRoZSBjb250cm9sIG1vZHVsZSBkZXZpY2UKLSAqIEBpZDogaW5kZXggb2YgdGhlIHBjaWUgUEhZIChzaG91bGQgYmUgMSBvciAyKQogICogQGRlbGF5OiA4IGJpdCBkZWxheSB2YWx1ZQogICovCi12b2lkIG9tYXBfY29udHJvbF9wY2llX3BjcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4IGlkLCB1OCBkZWxheSkKK3ZvaWQgb21hcF9jb250cm9sX3BjaWVfcGNzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggZGVsYXkpCiB7CiAJdTMyIHZhbDsKIAlzdHJ1Y3Qgb21hcF9jb250cm9sX3BoeQkqY29udHJvbF9waHk7CkBAIC01NSw4ICs1NCw4IEBACiAKIAl2YWwgPSByZWFkbChjb250cm9sX3BoeS0+cGNpZV9wY3MpOwogCXZhbCAmPSB+KE9NQVBfQ1RSTF9QQ0lFX1BDU19NQVNLIDw8Ci0JCShpZCAqIE9NQVBfQ1RSTF9QQ0lFX1BDU19ERUxBWV9DT1VOVF9TSElGVCkpOwotCXZhbCB8PSBkZWxheSA8PCAoaWQgKiBPTUFQX0NUUkxfUENJRV9QQ1NfREVMQVlfQ09VTlRfU0hJRlQpOworCQlPTUFQX0NUUkxfUENJRV9QQ1NfREVMQVlfQ09VTlRfU0hJRlQpOworCXZhbCB8PSAoZGVsYXkgPDwgT01BUF9DVFJMX1BDSUVfUENTX0RFTEFZX0NPVU5UX1NISUZUKTsKIAl3cml0ZWwodmFsLCBjb250cm9sX3BoeS0+cGNpZV9wY3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwob21hcF9jb250cm9sX3BjaWVfcGNzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1zdW40aS11c2IuYyBiL2RyaXZlcnMvcGh5L3BoeS1zdW40aS11c2IuYwppbmRleCBmYjAyYTY3Li5hMmIwOGYzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcGh5LXN1bjRpLXVzYi5jCisrKyBiL2RyaXZlcnMvcGh5L3BoeS1zdW40aS11c2IuYwpAQCAtMjQ0LDcgKzI0NCw4IEBACiAJZWxzZQogCQlkYXRhLT5udW1fcGh5cyA9IDM7CiAKLQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhbGx3aW5uZXIsc3VuNGktYTEwLXVzYi1waHkiKSkKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhbGx3aW5uZXIsc3VuNGktYTEwLXVzYi1waHkiKSB8fAorCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFsbHdpbm5lcixzdW42aS1hMzEtdXNiLXBoeSIpKQogCQlkYXRhLT5kaXNjX3RocmVzaCA9IDM7CiAJZWxzZQogCQlkYXRhLT5kaXNjX3RocmVzaCA9IDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9waHktdGktcGlwZTMuYyBiL2RyaXZlcnMvcGh5L3BoeS10aS1waXBlMy5jCmluZGV4IDEzODdiNGQuLjQ2NWRlMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5L3BoeS10aS1waXBlMy5jCisrKyBiL2RyaXZlcnMvcGh5L3BoeS10aS1waXBlMy5jCkBAIC04Miw3ICs4Miw2IEBACiAJc3RydWN0IGNsawkJKnJlZmNsazsKIAlzdHJ1Y3QgY2xrCQkqZGl2X2NsazsKIAlzdHJ1Y3QgcGlwZTNfZHBsbF9tYXAJKmRwbGxfbWFwOwotCXU4CQkJaWQ7CiB9OwogCiBzdGF0aWMgc3RydWN0IHBpcGUzX2RwbGxfbWFwIGRwbGxfbWFwX3VzYltdID0gewpAQCAtMjE3LDggKzIxNiwxMyBAQAogCXUzMiB2YWw7CiAJaW50IHJldCA9IDA7CiAKKwkvKgorCSAqIFNldCBwY2llX3BjcyByZWdpc3RlciB0byAweDk2IGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgcGh5CisJICogYXMgcmVjb21tZW5kZWQgaW4gQU01NzJ4IFRSTSBTUFJVSFo2LCBzZWN0aW9uIDE4LjUuMi4yLCB0YWJsZQorCSAqIDE4LTE4MDQuCisJICovCiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBoeS0+ZGV2LT5vZl9ub2RlLCAidGkscGh5LXBpcGUzLXBjaWUiKSkgewotCQlvbWFwX2NvbnRyb2xfcGNpZV9wY3MocGh5LT5jb250cm9sX2RldiwgcGh5LT5pZCwgMHhGMSk7CisJCW9tYXBfY29udHJvbF9wY2llX3BjcyhwaHktPmNvbnRyb2xfZGV2LCAweDk2KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNDcsOCArMzUxLDYgQEAKIAl9CiAKIAlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInRpLHBoeS1waXBlMy1wY2llIikpIHsKLQkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTgobm9kZSwgImlkIiwgJnBoeS0+aWQpIDwgMCkKLQkJCXBoeS0+aWQgPSAxOwogCiAJCWNsayA9IGRldm1fY2xrX2dldChwaHktPmRldiwgImRwbGxfcmVmIik7CiAJCWlmIChJU19FUlIoY2xrKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2NvcmUuYyBiL2RyaXZlcnMvcGluY3RybC9jb3JlLmMKaW5kZXggZTRmNjU1MS4uODlkY2E3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL2NvcmUuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvY29yZS5jCkBAIC0xODAxLDE0ICsxODAxLDE1IEBACiAJaWYgKHBjdGxkZXYgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JbXV0ZXhfbG9jaygmcGluY3RybGRldl9saXN0X211dGV4KTsKIAltdXRleF9sb2NrKCZwY3RsZGV2LT5tdXRleCk7Ci0KIAlwaW5jdHJsX3JlbW92ZV9kZXZpY2VfZGVidWdmcyhwY3RsZGV2KTsKKwltdXRleF91bmxvY2soJnBjdGxkZXYtPm11dGV4KTsKIAogCWlmICghSVNfRVJSKHBjdGxkZXYtPnApKQogCQlwaW5jdHJsX3B1dChwY3RsZGV2LT5wKTsKIAorCW11dGV4X2xvY2soJnBpbmN0cmxkZXZfbGlzdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmcGN0bGRldi0+bXV0ZXgpOwogCS8qIFRPRE86IGNoZWNrIHRoYXQgbm8gcGlubXV4ZXMgYXJlIHN0aWxsIGFjdGl2ZT8gKi8KIAlsaXN0X2RlbCgmcGN0bGRldi0+bm9kZSk7CiAJLyogRGVzdHJveSBkZXNjcmlwdG9yIHRyZWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWF0OTEuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWF0OTEuYwppbmRleCBkZmQwMjFlLi5mNGNkMGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1hdDkxLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYXQ5MS5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCXN0cnVjdCBwaW5jdHJsX2RldgkqcGN0bDsKIAotCWludAkJCW5iYW5rczsKKwlpbnQJCQluYWN0aXZlX2JhbmtzOwogCiAJdWludDMyX3QJCSptdXhfbWFzazsKIAlpbnQJCQlubXV4OwpAQCAtNjUzLDEyICs2NTMsMTggQEAKIAlpbnQgbXV4OwogCiAJLyogY2hlY2sgaWYgaXQncyBhIHZhbGlkIGNvbmZpZyAqLwotCWlmIChwaW4tPmJhbmsgPj0gaW5mby0+bmJhbmtzKSB7CisJaWYgKHBpbi0+YmFuayA+PSBncGlvX2JhbmtzKSB7CiAJCWRldl9lcnIoaW5mby0+ZGV2LCAiJXM6IHBpbiBjb25mICVkIGJhbmtfaWQgJWQgPj0gbmJhbmtzICVkXG4iLAotCQkJbmFtZSwgaW5kZXgsIHBpbi0+YmFuaywgaW5mby0+bmJhbmtzKTsKKwkJCW5hbWUsIGluZGV4LCBwaW4tPmJhbmssIGdwaW9fYmFua3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoIWdwaW9fY2hpcHNbcGluLT5iYW5rXSkgeworCQlkZXZfZXJyKGluZm8tPmRldiwgIiVzOiBwaW4gY29uZiAlZCBiYW5rX2lkICVkIG5vdCBlbmFibGVkXG4iLAorCQkJbmFtZSwgaW5kZXgsIHBpbi0+YmFuayk7CisJCXJldHVybiAtRU5YSU87CisJfQorCiAJaWYgKHBpbi0+cGluID49IE1BWF9OQl9HUElPX1BFUl9CQU5LKSB7CiAJCWRldl9lcnIoaW5mby0+ZGV2LCAiJXM6IHBpbiBjb25mICVkIHBpbl9iYW5rX2lkICVkID49ICVkXG4iLAogCQkJbmFtZSwgaW5kZXgsIHBpbi0+cGluLCBNQVhfTkJfR1BJT19QRVJfQkFOSyk7CkBAIC05ODEsNyArOTg3LDggQEAKIAogCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7CiAJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjaGlsZCwgZ3Bpb19jb21wYXQpKSB7Ci0JCQlpbmZvLT5uYmFua3MrKzsKKwkJCWlmIChvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKGNoaWxkKSkKKwkJCQlpbmZvLT5uYWN0aXZlX2JhbmtzKys7CiAJCX0gZWxzZSB7CiAJCQlpbmZvLT5uZnVuY3Rpb25zKys7CiAJCQlpbmZvLT5uZ3JvdXBzICs9IG9mX2dldF9jaGlsZF9jb3VudChjaGlsZCk7CkBAIC0xMDAzLDExICsxMDEwLDExIEBACiAJfQogCiAJc2l6ZSAvPSBzaXplb2YoKmxpc3QpOwotCWlmICghc2l6ZSB8fCBzaXplICUgaW5mby0+bmJhbmtzKSB7Ci0JCWRldl9lcnIoaW5mby0+ZGV2LCAid3JvbmcgbXV4IG1hc2sgYXJyYXkgc2hvdWxkIGJlIGJ5ICVkXG4iLCBpbmZvLT5uYmFua3MpOworCWlmICghc2l6ZSB8fCBzaXplICUgZ3Bpb19iYW5rcykgeworCQlkZXZfZXJyKGluZm8tPmRldiwgIndyb25nIG11eCBtYXNrIGFycmF5IHNob3VsZCBiZSBieSAlZFxuIiwgZ3Bpb19iYW5rcyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpbmZvLT5ubXV4ID0gc2l6ZSAvIGluZm8tPm5iYW5rczsKKwlpbmZvLT5ubXV4ID0gc2l6ZSAvIGdwaW9fYmFua3M7CiAKIAlpbmZvLT5tdXhfbWFzayA9IGRldm1fa3phbGxvYyhpbmZvLT5kZXYsIHNpemVvZih1MzIpICogc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvLT5tdXhfbWFzaykgewpAQCAtMTEzMSw3ICsxMTM4LDcgQEAKIAkJb2ZfbWF0Y2hfZGV2aWNlKGF0OTFfcGluY3RybF9vZl9tYXRjaCwgJnBkZXYtPmRldiktPmRhdGE7CiAJYXQ5MV9waW5jdHJsX2NoaWxkX2NvdW50KGluZm8sIG5wKTsKIAotCWlmIChpbmZvLT5uYmFua3MgPCAxKSB7CisJaWYgKGdwaW9fYmFua3MgPCAxKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInlvdSBuZWVkIHRvIHNwZWNpZnkgYXQgbGVhc3Qgb25lIGdwaW8tY29udHJvbGxlclxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTExNDQsNyArMTE1MSw3IEBACiAKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJtdXgtbWFza1xuIik7CiAJdG1wID0gaW5mby0+bXV4X21hc2s7Ci0JZm9yIChpID0gMDsgaSA8IGluZm8tPm5iYW5rczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua3M7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgaW5mby0+bm11eDsgaisrLCB0bXArKykgewogCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiJWQ6JWRcdDB4JXhcbiIsIGksIGosIHRtcFswXSk7CiAJCX0KQEAgLTExNjIsNyArMTE2OSw3IEBACiAJaWYgKCFpbmZvLT5ncm91cHMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGV2X2RiZygmcGRldi0+ZGV2LCAibmJhbmtzID0gJWRcbiIsIGluZm8tPm5iYW5rcyk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAibmJhbmtzID0gJWRcbiIsIGdwaW9fYmFua3MpOwogCWRldl9kYmcoJnBkZXYtPmRldiwgIm5mdW5jdGlvbnMgPSAlZFxuIiwgaW5mby0+bmZ1bmN0aW9ucyk7CiAJZGV2X2RiZygmcGRldi0+ZGV2LCAibmdyb3VwcyA9ICVkXG4iLCBpbmZvLT5uZ3JvdXBzKTsKIApAQCAtMTE4NSw3ICsxMTkyLDcgQEAKIHsKIAlzdHJ1Y3QgYXQ5MV9waW5jdHJsICppbmZvOwogCXN0cnVjdCBwaW5jdHJsX3Bpbl9kZXNjICpwZGVzYzsKLQlpbnQgcmV0LCBpLCBqLCBrOworCWludCByZXQsIGksIGosIGssIG5ncGlvX2NoaXBzX2VuYWJsZWQgPSAwOwogCiAJaW5mbyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pCkBAIC0xMjAwLDIzICsxMjA3LDI3IEBACiAJICogdG8gb2J0YWluIHJlZmVyZW5jZXMgdG8gdGhlIHN0cnVjdCBncGlvX2NoaXAgKiBmb3IgdGhlbSwgYW5kIHdlCiAJICogbmVlZCB0aGlzIHRvIHByb2NlZWQuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPm5iYW5rczsgaSsrKSB7Ci0JCWlmICghZ3Bpb19jaGlwc1tpXSkgewotCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkdQSU8gY2hpcCAlZCBub3QgcmVnaXN0ZXJlZCB5ZXRcbiIsIGkpOwotCQkJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBpbmZvKTsKLQkJCXJldHVybiAtRVBST0JFX0RFRkVSOwotCQl9CisJZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua3M7IGkrKykKKwkJaWYgKGdwaW9fY2hpcHNbaV0pCisJCQluZ3Bpb19jaGlwc19lbmFibGVkKys7CisKKwlpZiAobmdwaW9fY2hpcHNfZW5hYmxlZCA8IGluZm8tPm5hY3RpdmVfYmFua3MpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCSAiQWxsIEdQSU8gY2hpcHMgYXJlIG5vdCByZWdpc3RlcmVkIHlldCAoJWQvJWQpXG4iLAorCQkJIG5ncGlvX2NoaXBzX2VuYWJsZWQsIGluZm8tPm5hY3RpdmVfYmFua3MpOworCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGluZm8pOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKIAl9CiAKIAlhdDkxX3BpbmN0cmxfZGVzYy5uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7Ci0JYXQ5MV9waW5jdHJsX2Rlc2MubnBpbnMgPSBpbmZvLT5uYmFua3MgKiBNQVhfTkJfR1BJT19QRVJfQkFOSzsKKwlhdDkxX3BpbmN0cmxfZGVzYy5ucGlucyA9IGdwaW9fYmFua3MgKiBNQVhfTkJfR1BJT19QRVJfQkFOSzsKIAlhdDkxX3BpbmN0cmxfZGVzYy5waW5zID0gcGRlc2MgPQogCQlkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwZGVzYykgKiBhdDkxX3BpbmN0cmxfZGVzYy5ucGlucywgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWF0OTFfcGluY3RybF9kZXNjLnBpbnMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChpID0gMCAsIGsgPSAwOyBpIDwgaW5mby0+bmJhbmtzOyBpKyspIHsKKwlmb3IgKGkgPSAwLCBrID0gMDsgaSA8IGdwaW9fYmFua3M7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgTUFYX05CX0dQSU9fUEVSX0JBTks7IGorKywgaysrKSB7CiAJCQlwZGVzYy0+bnVtYmVyID0gazsKIAkJCXBkZXNjLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJwaW8lYyVkIiwgaSArICdBJywgaik7CkBAIC0xMjM0LDggKzEyNDUsOSBAQAogCX0KIAogCS8qIFdlIHdpbGwgaGFuZGxlIGEgcmFuZ2Ugb2YgR1BJTyBwaW5zICovCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPm5iYW5rczsgaSsrKQotCQlwaW5jdHJsX2FkZF9ncGlvX3JhbmdlKGluZm8tPnBjdGwsICZncGlvX2NoaXBzW2ldLT5yYW5nZSk7CisJZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua3M7IGkrKykKKwkJaWYgKGdwaW9fY2hpcHNbaV0pCisJCQlwaW5jdHJsX2FkZF9ncGlvX3JhbmdlKGluZm8tPnBjdGwsICZncGlvX2NoaXBzW2ldLT5yYW5nZSk7CiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaW5pdGlhbGl6ZWQgQVQ5MSBwaW5jdHJsIGRyaXZlclxuIik7CiAKQEAgLTE2MTMsOSArMTYyNSwxMCBAQAogc3RhdGljIGludCBhdDkxX2dwaW9fb2ZfaXJxX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJICBzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbykKIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwCSpncGlvY2hpcF9wcmV2ID0gTlVMTDsKIAlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgICAqcHJldiA9IE5VTEw7CiAJc3RydWN0IGlycV9kYXRhCQkqZCA9IGlycV9nZXRfaXJxX2RhdGEoYXQ5MV9ncGlvLT5waW9jX3ZpcnEpOwotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCWF0OTFfZ3Bpby0+cGlvY19od2lycSA9IGlycWRfdG9faHdpcnEoZCk7CiAKQEAgLTE2NDEsMjQgKzE2NTQsMzMgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBTZXR1cCBjaGFpbmVkIGhhbmRsZXIgKi8KLQlpZiAoYXQ5MV9ncGlvLT5waW9jX2lkeCkKLQkJcHJldiA9IGdwaW9fY2hpcHNbYXQ5MV9ncGlvLT5waW9jX2lkeCAtIDFdOwotCiAJLyogVGhlIHRvcCBsZXZlbCBoYW5kbGVyIGhhbmRsZXMgb25lIGJhbmsgb2YgR1BJT3MsIGV4Y2VwdAogCSAqIG9uIHNvbWUgU29DIGl0IGNhbiBoYW5kbGUgdXAgdG8gdGhyZWUuLi4KIAkgKiBXZSBvbmx5IHNldCB1cCB0aGUgaGFuZGxlciBmb3IgdGhlIGZpcnN0IG9mIHRoZSBsaXN0LgogCSAqLwotCWlmIChwcmV2ICYmIHByZXYtPm5leHQgPT0gYXQ5MV9ncGlvKQorCWdwaW9jaGlwX3ByZXYgPSBpcnFfZ2V0X2hhbmRsZXJfZGF0YShhdDkxX2dwaW8tPnBpb2NfdmlycSk7CisJaWYgKCFncGlvY2hpcF9wcmV2KSB7CisJCS8qIFRoZW4gcmVnaXN0ZXIgdGhlIGNoYWluIG9uIHRoZSBwYXJlbnQgSVJRICovCisJCWdwaW9jaGlwX3NldF9jaGFpbmVkX2lycWNoaXAoJmF0OTFfZ3Bpby0+Y2hpcCwKKwkJCQkJICAgICAmZ3Bpb19pcnFjaGlwLAorCQkJCQkgICAgIGF0OTFfZ3Bpby0+cGlvY192aXJxLAorCQkJCQkgICAgIGdwaW9faXJxX2hhbmRsZXIpOwogCQlyZXR1cm4gMDsKKwl9CiAKLQkvKiBUaGVuIHJlZ2lzdGVyIHRoZSBjaGFpbiBvbiB0aGUgcGFyZW50IElSUSAqLwotCWdwaW9jaGlwX3NldF9jaGFpbmVkX2lycWNoaXAoJmF0OTFfZ3Bpby0+Y2hpcCwKLQkJCQkgICAgICZncGlvX2lycWNoaXAsCi0JCQkJICAgICBhdDkxX2dwaW8tPnBpb2NfdmlycSwKLQkJCQkgICAgIGdwaW9faXJxX2hhbmRsZXIpOworCXByZXYgPSBjb250YWluZXJfb2YoZ3Bpb2NoaXBfcHJldiwgc3RydWN0IGF0OTFfZ3Bpb19jaGlwLCBjaGlwKTsKIAotCXJldHVybiAwOworCS8qIHdlIGNhbiBvbmx5IGhhdmUgMiBiYW5rcyBiZWZvcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmIChwcmV2LT5uZXh0KSB7CisJCQlwcmV2ID0gcHJldi0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXByZXYtPm5leHQgPSBhdDkxX2dwaW87CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtRUlOVkFMOwogfQogCiAvKiBUaGlzIHN0cnVjdHVyZSBpcyByZXBsaWNhdGVkIGZvciBlYWNoIEdQSU8gYmxvY2sgYWxsb2NhdGVkIGF0IHByb2JlIHRpbWUgKi8KQEAgLTE2NzUsMjQgKzE2OTcsNiBAQAogCS5uZ3BpbwkJCT0gTUFYX05CX0dQSU9fUEVSX0JBTkssCiB9OwogCi1zdGF0aWMgdm9pZCBhdDkxX2dwaW9fcHJvYmVfZml4dXAodm9pZCkKLXsKLQl1bnNpZ25lZCBpOwotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvLCAqbGFzdCA9IE5VTEw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rczsgaSsrKSB7Ci0JCWF0OTFfZ3BpbyA9IGdwaW9fY2hpcHNbaV07Ci0KLQkJLyoKLQkJICogR1BJTyBjb250cm9sbGVyIGFyZSBncm91cGVkIG9uIHNvbWUgU29DOgotCQkgKiBQSU9DLCBQSU9EIGFuZCBQSU9FIGNhbiBzaGFyZSB0aGUgc2FtZSBJUlEgbGluZQotCQkgKi8KLQkJaWYgKGxhc3QgJiYgbGFzdC0+cGlvY192aXJxID09IGF0OTFfZ3Bpby0+cGlvY192aXJxKQotCQkJbGFzdC0+bmV4dCA9IGF0OTFfZ3BpbzsKLQkJbGFzdCA9IGF0OTFfZ3BpbzsKLQl9Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0OTFfZ3Bpb19vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1ncGlvIiwgLmRhdGEgPSAmYXQ5MXNhbTl4NV9vcHMsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLWdwaW8iLCAuZGF0YSA9ICZhdDkxcm05MjAwX29wcyB9LApAQCAtMTgwNSw4ICsxODA5LDYgQEAKIAlncGlvX2NoaXBzW2FsaWFzX2lkeF0gPSBhdDkxX2NoaXA7CiAJZ3Bpb19iYW5rcyA9IG1heChncGlvX2JhbmtzLCBhbGlhc19pZHggKyAxKTsKIAotCWF0OTFfZ3Bpb19wcm9iZV9maXh1cCgpOwotCiAJcmV0ID0gYXQ5MV9ncGlvX29mX2lycV9zZXR1cChwZGV2LCBhdDkxX2NoaXApOwogCWlmIChyZXQpCiAJCWdvdG8gaXJxX3NldHVwX2VycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXJvY2tjaGlwLmMgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1yb2NrY2hpcC5jCmluZGV4IGJhNzRmMGEuLjQzZWFjYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXJvY2tjaGlwLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtcm9ja2NoaXAuYwpAQCAtODksNiArODksNyBAQAogICogQHJlZ19wdWxsOiBvcHRpb25hbCBzZXBhcmF0ZSByZWdpc3RlciBmb3IgYWRkaXRpb25hbCBwdWxsIHNldHRpbmdzCiAgKiBAY2xrOiBjbG9jayBvZiB0aGUgZ3BpbyBiYW5rCiAgKiBAaXJxOiBpbnRlcnJ1cHQgb2YgdGhlIGdwaW8gYmFuaworICogQHNhdmVkX2VuYWJsZXM6IFNhdmVkIGNvbnRlbnQgb2YgR1BJT19JTlRFTiBhdCBzdXNwZW5kIHRpbWUuCiAgKiBAcGluX2Jhc2U6IGZpcnN0IHBpbiBudW1iZXIKICAqIEBucl9waW5zOiBudW1iZXIgb2YgcGlucyBpbiB0aGlzIGJhbmsKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSBiYW5rCkBAIC0xMDcsNiArMTA4LDcgQEAKIAlzdHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcF9wdWxsOwogCXN0cnVjdCBjbGsJCQkqY2xrOwogCWludAkJCQlpcnE7CisJdTMyCQkJCXNhdmVkX2VuYWJsZXM7CiAJdTMyCQkJCXBpbl9iYXNlOwogCXU4CQkJCW5yX3BpbnM7CiAJY2hhcgkJCQkqbmFtZTsKQEAgLTEzOTYsMTAgKzEzOTgsNyBAQAogewogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9nZXRfY2hpcChpcnEpOwogCXN0cnVjdCByb2NrY2hpcF9waW5fYmFuayAqYmFuayA9IGlycV9nZXRfaGFuZGxlcl9kYXRhKGlycSk7Ci0JdTMyIHBvbGFyaXR5ID0gMCwgZGF0YSA9IDA7CiAJdTMyIHBlbmQ7Ci0JYm9vbCBlZGdlX2NoYW5nZWQgPSBmYWxzZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGV2X2RiZyhiYW5rLT5kcnZkYXRhLT5kZXYsICJnb3QgaXJxIGZvciBiYW5rICVzXG4iLCBiYW5rLT5uYW1lKTsKIApAQCAtMTQwNywxMiArMTQwNiw2IEBACiAKIAlwZW5kID0gcmVhZGxfcmVsYXhlZChiYW5rLT5yZWdfYmFzZSArIEdQSU9fSU5UX1NUQVRVUyk7CiAKLQlpZiAoYmFuay0+dG9nZ2xlX2VkZ2VfbW9kZSkgewotCQlwb2xhcml0eSA9IHJlYWRsX3JlbGF4ZWQoYmFuay0+cmVnX2Jhc2UgKwotCQkJCQkgR1BJT19JTlRfUE9MQVJJVFkpOwotCQlkYXRhID0gcmVhZGxfcmVsYXhlZChiYW5rLT5yZWdfYmFzZSArIEdQSU9fRVhUX1BPUlQpOwotCX0KLQogCXdoaWxlIChwZW5kKSB7CiAJCXVuc2lnbmVkIGludCB2aXJxOwogCkBAIC0xNDMyLDI5ICsxNDI1LDMzIEBACiAJCSAqIG5lZWRzIG1hbnVhbCBpbnRlcnZlbnRpb24uCiAJCSAqLwogCQlpZiAoYmFuay0+dG9nZ2xlX2VkZ2VfbW9kZSAmIEJJVChpcnEpKSB7Ci0JCQlpZiAoZGF0YSAmIEJJVChpcnEpKQotCQkJCXBvbGFyaXR5ICY9IH5CSVQoaXJxKTsKLQkJCWVsc2UKLQkJCQlwb2xhcml0eSB8PSBCSVQoaXJxKTsKKwkJCXUzMiBkYXRhLCBkYXRhX29sZCwgcG9sYXJpdHk7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCQllZGdlX2NoYW5nZWQgPSB0cnVlOworCQkJZGF0YSA9IHJlYWRsX3JlbGF4ZWQoYmFuay0+cmVnX2Jhc2UgKyBHUElPX0VYVF9QT1JUKTsKKwkJCWRvIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+c2xvY2ssIGZsYWdzKTsKKworCQkJCXBvbGFyaXR5ID0gcmVhZGxfcmVsYXhlZChiYW5rLT5yZWdfYmFzZSArCisJCQkJCQkJIEdQSU9fSU5UX1BPTEFSSVRZKTsKKwkJCQlpZiAoZGF0YSAmIEJJVChpcnEpKQorCQkJCQlwb2xhcml0eSAmPSB+QklUKGlycSk7CisJCQkJZWxzZQorCQkJCQlwb2xhcml0eSB8PSBCSVQoaXJxKTsKKwkJCQl3cml0ZWwocG9sYXJpdHksCisJCQkJICAgICAgIGJhbmstPnJlZ19iYXNlICsgR1BJT19JTlRfUE9MQVJJVFkpOworCisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+c2xvY2ssIGZsYWdzKTsKKworCQkJCWRhdGFfb2xkID0gZGF0YTsKKwkJCQlkYXRhID0gcmVhZGxfcmVsYXhlZChiYW5rLT5yZWdfYmFzZSArCisJCQkJCQkgICAgIEdQSU9fRVhUX1BPUlQpOworCQkJfSB3aGlsZSAoKGRhdGEgJiBCSVQoaXJxKSkgIT0gKGRhdGFfb2xkICYgQklUKGlycSkpKTsKIAkJfQogCiAJCWdlbmVyaWNfaGFuZGxlX2lycSh2aXJxKTsKIAl9CiAKLQlpZiAoYmFuay0+dG9nZ2xlX2VkZ2VfbW9kZSAmJiBlZGdlX2NoYW5nZWQpIHsKLQkJLyogSW50ZXJydXB0IHBhcmFtcyBzaG91bGQgb25seSBiZSBzZXQgd2l0aCBpbnRzIGRpc2FibGVkICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5zbG9jaywgZmxhZ3MpOwotCi0JCWRhdGEgPSByZWFkbF9yZWxheGVkKGJhbmstPnJlZ19iYXNlICsgR1BJT19JTlRFTik7Ci0JCXdyaXRlbF9yZWxheGVkKDAsIGJhbmstPnJlZ19iYXNlICsgR1BJT19JTlRFTik7Ci0JCXdyaXRlbChwb2xhcml0eSwgYmFuay0+cmVnX2Jhc2UgKyBHUElPX0lOVF9QT0xBUklUWSk7Ci0JCXdyaXRlbChkYXRhLCBiYW5rLT5yZWdfYmFzZSArIEdQSU9fSU5URU4pOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPnNsb2NrLCBmbGFncyk7Ci0JfQotCiAJY2hhaW5lZF9pcnFfZXhpdChjaGlwLCBkZXNjKTsKIH0KIApAQCAtMTU0Myw2ICsxNTQwLDUxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHJvY2tjaGlwX2lycV9zdXNwZW5kKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3Qgcm9ja2NoaXBfcGluX2JhbmsgKmJhbmsgPSBnYy0+cHJpdmF0ZTsKKworCWJhbmstPnNhdmVkX2VuYWJsZXMgPSBpcnFfcmVnX3JlYWRsKGdjLCBHUElPX0lOVEVOKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZ2MtPndha2VfYWN0aXZlLCBHUElPX0lOVEVOKTsKK30KKworc3RhdGljIHZvaWQgcm9ja2NoaXBfaXJxX3Jlc3VtZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IHJvY2tjaGlwX3Bpbl9iYW5rICpiYW5rID0gZ2MtPnByaXZhdGU7CisKKwlpcnFfcmVnX3dyaXRlbChnYywgYmFuay0+c2F2ZWRfZW5hYmxlcywgR1BJT19JTlRFTik7Cit9CisKK3N0YXRpYyB2b2lkIHJvY2tjaGlwX2lycV9kaXNhYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1MzIgdmFsOworCisJaXJxX2djX2xvY2soZ2MpOworCisJdmFsID0gaXJxX3JlZ19yZWFkbChnYywgR1BJT19JTlRFTik7CisJdmFsICY9IH5kLT5tYXNrOworCWlycV9yZWdfd3JpdGVsKGdjLCB2YWwsIEdQSU9fSU5URU4pOworCisJaXJxX2djX3VubG9jayhnYyk7Cit9CisKK3N0YXRpYyB2b2lkIHJvY2tjaGlwX2lycV9lbmFibGUoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXUzMiB2YWw7CisKKwlpcnFfZ2NfbG9jayhnYyk7CisKKwl2YWwgPSBpcnFfcmVnX3JlYWRsKGdjLCBHUElPX0lOVEVOKTsKKwl2YWwgfD0gZC0+bWFzazsKKwlpcnFfcmVnX3dyaXRlbChnYywgdmFsLCBHUElPX0lOVEVOKTsKKworCWlycV9nY191bmxvY2soZ2MpOworfQorCiBzdGF0aWMgaW50IHJvY2tjaGlwX2ludGVycnVwdHNfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCQkJCXN0cnVjdCByb2NrY2hpcF9waW5jdHJsICppbmZvKQogewpAQCAtMTU4MSwxMiArMTYyMywxNiBAQAogCQlnYyA9IGlycV9nZXRfZG9tYWluX2dlbmVyaWNfY2hpcChiYW5rLT5kb21haW4sIDApOwogCQlnYy0+cmVnX2Jhc2UgPSBiYW5rLT5yZWdfYmFzZTsKIAkJZ2MtPnByaXZhdGUgPSBiYW5rOwotCQlnYy0+Y2hpcF90eXBlc1swXS5yZWdzLm1hc2sgPSBHUElPX0lOVEVOOworCQlnYy0+Y2hpcF90eXBlc1swXS5yZWdzLm1hc2sgPSBHUElPX0lOVE1BU0s7CiAJCWdjLT5jaGlwX3R5cGVzWzBdLnJlZ3MuYWNrID0gR1BJT19QT1JUU19FT0k7CiAJCWdjLT5jaGlwX3R5cGVzWzBdLmNoaXAuaXJxX2FjayA9IGlycV9nY19hY2tfc2V0X2JpdDsKLQkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfbWFzayA9IGlycV9nY19tYXNrX2Nscl9iaXQ7Ci0JCWdjLT5jaGlwX3R5cGVzWzBdLmNoaXAuaXJxX3VubWFzayA9IGlycV9nY19tYXNrX3NldF9iaXQ7CisJCWdjLT5jaGlwX3R5cGVzWzBdLmNoaXAuaXJxX21hc2sgPSBpcnFfZ2NfbWFza19zZXRfYml0OworCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV91bm1hc2sgPSBpcnFfZ2NfbWFza19jbHJfYml0OworCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9lbmFibGUgPSByb2NrY2hpcF9pcnFfZW5hYmxlOworCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9kaXNhYmxlID0gcm9ja2NoaXBfaXJxX2Rpc2FibGU7CiAJCWdjLT5jaGlwX3R5cGVzWzBdLmNoaXAuaXJxX3NldF93YWtlID0gaXJxX2djX3NldF93YWtlOworCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9zdXNwZW5kID0gcm9ja2NoaXBfaXJxX3N1c3BlbmQ7CisJCWdjLT5jaGlwX3R5cGVzWzBdLmNoaXAuaXJxX3Jlc3VtZSA9IHJvY2tjaGlwX2lycV9yZXN1bWU7CiAJCWdjLT5jaGlwX3R5cGVzWzBdLmNoaXAuaXJxX3NldF90eXBlID0gcm9ja2NoaXBfaXJxX3NldF90eXBlOwogCQlnYy0+d2FrZV9lbmFibGVkID0gSVJRX01TSyhiYW5rLT5ucl9waW5zKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtc3QuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXN0LmMKaW5kZXggN2M5ZDUxMy4uOWU1ZWMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtc3QuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1zdC5jCkBAIC0xMDEyLDggKzEwMTIsMTAgQEAKIAkJCQkgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHVuc2lnbmVkIHBpbl9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGNvbmZpZzsKLQlzdF9waW5jb25mX2dldChwY3RsZGV2LCBwaW5faWQsICZjb25maWcpOwogCisJbXV0ZXhfdW5sb2NrKCZwY3RsZGV2LT5tdXRleCk7CisJc3RfcGluY29uZl9nZXQocGN0bGRldiwgcGluX2lkLCAmY29uZmlnKTsKKwltdXRleF9sb2NrKCZwY3RsZGV2LT5tdXRleCk7CiAJc2VxX3ByaW50ZihzLCAiW09FOiVsZCxQVTolbGQsT0Q6JWxkXVxuIgogCQkiXHRcdFtyZXRpbWU6JWxkLGludmNsazolbGQsY2xrbm90ZGF0OiVsZCwiCiAJCSJkZTolbGQscnQtY2xrOiVsZCxydC1kZWxheTolbGRdIiwKQEAgLTE0NDMsNiArMTQ0NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc3RfZ3Bpb19pcnFjaGlwID0gewogCS5uYW1lCQk9ICJHUElPIiwKKwkuaXJxX2Rpc2FibGUJPSBzdF9ncGlvX2lycV9tYXNrLAogCS5pcnFfbWFzawk9IHN0X2dwaW9faXJxX21hc2ssCiAJLmlycV91bm1hc2sJPSBzdF9ncGlvX2lycV91bm1hc2ssCiAJLmlycV9zZXRfdHlwZQk9IHN0X2dwaW9faXJxX3NldF90eXBlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwteHdheS5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwteHdheS5jCmluZGV4IGM1Y2VmNTkuLjc3OTk1MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXh3YXkuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC14d2F5LmMKQEAgLTc5OCwxMCArNzk4LDggQEAKIAogCS8qIGxvYWQgdGhlIGdwaW8gY2hpcCAqLwogCXh3YXlfY2hpcC5kZXYgPSAmcGRldi0+ZGV2OwotCW9mX2dwaW9jaGlwX2FkZCgmeHdheV9jaGlwKTsKIAlyZXQgPSBncGlvY2hpcF9hZGQoJnh3YXlfY2hpcCk7CiAJaWYgKHJldCkgewotCQlvZl9ncGlvY2hpcF9yZW1vdmUoJnh3YXlfY2hpcCk7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBncGlvIGNoaXBcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtbXNtLmMgYi9kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1zbS5jCmluZGV4IGU3MzA5MzUuLmVkNzAxN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtbXNtLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tc20uYwpAQCAtODY1LDEwICs4NjUsMTAgQEAKIAogc3RhdGljIHZvaWQgbXNtX3BpbmN0cmxfc2V0dXBfcG1fcmVzZXQoc3RydWN0IG1zbV9waW5jdHJsICpwY3RybCkKIHsKLQlpbnQgaSA9IDA7CisJaW50IGk7CiAJY29uc3Qgc3RydWN0IG1zbV9mdW5jdGlvbiAqZnVuYyA9IHBjdHJsLT5zb2MtPmZ1bmN0aW9uczsKIAotCWZvciAoOyBpIDw9IHBjdHJsLT5zb2MtPm5mdW5jdGlvbnM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgcGN0cmwtPnNvYy0+bmZ1bmN0aW9uczsgaSsrKQogCQlpZiAoIXN0cmNtcChmdW5jW2ldLm5hbWUsICJwc19ob2xkIikpIHsKIAkJCXBjdHJsLT5yZXN0YXJ0X25iLm5vdGlmaWVyX2NhbGwgPSBtc21fcHNfaG9sZF9yZXN0YXJ0OwogCQkJcGN0cmwtPnJlc3RhcnRfbmIucHJpb3JpdHkgPSAxMjg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwppbmRleCA5NDExZWFlMy4uM2QyMWVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCkBAIC0yLDExICsyLDkgQEAKICAqICBEcml2ZXIgZm9yIERlbGwgbGFwdG9wIGV4dHJhcwogICoKICAqICBDb3B5cmlnaHQgKGMpIFJlZCBIYXQgPG1qZ0ByZWRoYXQuY29tPgotICogIENvcHlyaWdodCAoYykgMjAxNCBHYWJyaWVsZSBNYXp6b3R0YSA8Z2FicmllbGUubXp0QGdtYWlsLmNvbT4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTQgUGFsaSBSb2jDoXIgPHBhbGkucm9oYXJAZ21haWwuY29tPgogICoKLSAqICBCYXNlZCBvbiBkb2N1bWVudGF0aW9uIGluIHRoZSBsaWJzbWJpb3MgcGFja2FnZToKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNCBEZWxsIEluYy4KKyAqICBCYXNlZCBvbiBkb2N1bWVudGF0aW9uIGluIHRoZSBsaWJzbWJpb3MgcGFja2FnZSwgQ29weXJpZ2h0IChDKSAyMDA1IERlbGwKKyAqICBJbmMuCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTM0LDEzICszMiw2IEBACiAjaW5jbHVkZSAiLi4vLi4vZmlybXdhcmUvZGNkYmFzLmgiCiAKICNkZWZpbmUgQlJJR0hUTkVTU19UT0tFTiAweDdkCi0jZGVmaW5lIEtCRF9MRURfT0ZGX1RPS0VOIDB4MDFFMQotI2RlZmluZSBLQkRfTEVEX09OX1RPS0VOIDB4MDFFMgotI2RlZmluZSBLQkRfTEVEX0FVVE9fVE9LRU4gMHgwMUUzCi0jZGVmaW5lIEtCRF9MRURfQVVUT18yNV9UT0tFTiAweDAyRUEKLSNkZWZpbmUgS0JEX0xFRF9BVVRPXzUwX1RPS0VOIDB4MDJFQgotI2RlZmluZSBLQkRfTEVEX0FVVE9fNzVfVE9LRU4gMHgwMkVDCi0jZGVmaW5lIEtCRF9MRURfQVVUT18xMDBfVE9LRU4gMHgwMkY2CiAKIC8qIFRoaXMgc3RydWN0dXJlIHdpbGwgYmUgbW9kaWZpZWQgYnkgdGhlIGZpcm13YXJlIHdoZW4gd2UgZW50ZXIKICAqIHN5c3RlbSBtYW5hZ2VtZW50IG1vZGUsIGhlbmNlIHRoZSB2b2xhdGlsZXMgKi8KQEAgLTcxLDEzICs2Miw2IEBACiAKIHN0cnVjdCBxdWlya19lbnRyeSB7CiAJdTggdG91Y2hwYWRfbGVkOwotCi0JaW50IG5lZWRzX2tiZF90aW1lb3V0czsKLQkvKgotCSAqIE9yZGVyZWQgbGlzdCBvZiB0aW1lb3V0cyBleHByZXNzZWQgaW4gc2Vjb25kcy4KLQkgKiBUaGUgbGlzdCBtdXN0IGVuZCB3aXRoIC0xCi0JICovCi0JaW50IGtiZF90aW1lb3V0c1tdOwogfTsKIAogc3RhdGljIHN0cnVjdCBxdWlya19lbnRyeSAqcXVpcmtzOwpAQCAtOTIsMTUgKzc2LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyoKLSAqIFRoZXNlIHZhbHVlcyBjb21lIGZyb20gV2luZG93cyB1dGlsaXR5IHByb3ZpZGVkIGJ5IERlbGwuIElmIGFueSBvdGhlciB2YWx1ZQotICogaXMgdXNlZCB0aGVuIEJJT1Mgc2lsZW50bHkgc2V0IHRpbWVvdXQgdG8gMCB3aXRob3V0IGFueSBlcnJvciBtZXNzYWdlLgotICovCi1zdGF0aWMgc3RydWN0IHF1aXJrX2VudHJ5IHF1aXJrX2RlbGxfeHBzMTNfOTMzMyA9IHsKLQkubmVlZHNfa2JkX3RpbWVvdXRzID0gMSwKLQkua2JkX3RpbWVvdXRzID0geyAwLCA1LCAxNSwgNjAsIDUgKiA2MCwgMTUgKiA2MCwgLTEgfSwKLX07Ci0KIHN0YXRpYyBpbnQgZGFfY29tbWFuZF9hZGRyZXNzOwogc3RhdGljIGludCBkYV9jb21tYW5kX2NvZGU7CiBzdGF0aWMgaW50IGRhX251bV90b2tlbnM7CkBAIC0yOTIsMTUgKzI2Nyw2IEBACiAJCX0sCiAJCS5kcml2ZXJfZGF0YSA9ICZxdWlya19kZWxsX3Zvc3Ryb192MTMwLAogCX0sCi0JewotCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKLQkJLmlkZW50ID0gIkRlbGwgWFBTMTMgOTMzMyIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlhQUzEzIDkzMzMiKSwKLQkJfSwKLQkJLmRyaXZlcl9kYXRhID0gJnF1aXJrX2RlbGxfeHBzMTNfOTMzMywKLQl9LAogCXsgfQogfTsKIApAQCAtMzY1LDI5ICszMzEsMTcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZmluZF90b2tlbl9pZChpbnQgdG9rZW5pZCkKK3N0YXRpYyBpbnQgZmluZF90b2tlbl9sb2NhdGlvbihpbnQgdG9rZW5pZCkKIHsKIAlpbnQgaTsKLQogCWZvciAoaSA9IDA7IGkgPCBkYV9udW1fdG9rZW5zOyBpKyspIHsKIAkJaWYgKGRhX3Rva2Vuc1tpXS50b2tlbklEID09IHRva2VuaWQpCi0JCQlyZXR1cm4gaTsKKwkJCXJldHVybiBkYV90b2tlbnNbaV0ubG9jYXRpb247CiAJfQogCiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IGZpbmRfdG9rZW5fbG9jYXRpb24oaW50IHRva2VuaWQpCi17Ci0JaW50IGlkOwotCi0JaWQgPSBmaW5kX3Rva2VuX2lkKHRva2VuaWQpOwotCWlmIChpZCA9PSAtMSkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIGRhX3Rva2Vuc1tpZF0ubG9jYXRpb247Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyICoKIGRlbGxfc2VuZF9yZXF1ZXN0KHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNsYXNzLAogCQkgIGludCBzZWxlY3QpCkBAIC00MDgsMjAgKzM2Miw2IEBACiAJcmV0dXJuIGJ1ZmZlcjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZGVsbF9zbWlfZXJyb3IoaW50IHZhbHVlKQotewotCXN3aXRjaCAodmFsdWUpIHsKLQljYXNlIDA6IC8qIENvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKi8KLQkJcmV0dXJuIDA7Ci0JY2FzZSAtMTogLyogQ29tcGxldGVkIHdpdGggZXJyb3IgKi8KLQkJcmV0dXJuIC1FSU87Ci0JY2FzZSAtMjogLyogRnVuY3Rpb24gbm90IHN1cHBvcnRlZCAqLwotCQlyZXR1cm4gLUVOWElPOwotCWRlZmF1bHQ6IC8qIFVua25vd24gZXJyb3IgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQotCiAvKiBEZXJpdmVkIGZyb20gaW5mb3JtYXRpb24gaW4gRGVsbFdpcmVsZXNzQ3RsLmNwcDoKICAgIENsYXNzIDE3LCBzZWxlY3QgMTEgaXMgcmFkaW8gY29udHJvbC4gSXQgcmV0dXJucyBhbiBhcnJheSBvZiAzMi1iaXQgdmFsdWVzLgogCkBAIC03NzYsNyArNzE2LDcgQEAKIAllbHNlCiAJCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMSwgMSk7CiAKLSBvdXQ6CitvdXQ6CiAJcmVsZWFzZV9idWZmZXIoKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtODAwLDcgKzc0MCw3IEBACiAKIAlyZXQgPSBidWZmZXItPm91dHB1dFsxXTsKIAotIG91dDoKK291dDoKIAlyZWxlYXNlX2J1ZmZlcigpOwogCXJldHVybiByZXQ7CiB9CkBAIC04NDksOTg0ICs3ODksNiBAQAogCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZ0b3VjaHBhZF9sZWQpOwogfQogCi0vKgotICogRGVyaXZlZCBmcm9tIGluZm9ybWF0aW9uIGluIHNtYmlvcy1rZXlib2FyZC1jdGw6Ci0gKgotICogY2JDbGFzcyA0Ci0gKiBjYlNlbGVjdCAxMQotICogS2V5Ym9hcmQgaWxsdW1pbmF0aW9uCi0gKiBjYkFyZzEgZGV0ZXJtaW5lcyB0aGUgZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkCi0gKgotICogY2JBcmcxIDB4MCA9IEdldCBGZWF0dXJlIEluZm9ybWF0aW9uCi0gKiAgY2JSRVMxICAgICAgICAgU3RhbmRhcmQgcmV0dXJuIGNvZGVzICgwLCAtMSwgLTIpCi0gKiAgY2JSRVMyLCB3b3JkMCAgQml0bWFwIG9mIHVzZXItc2VsZWN0YWJsZSBtb2RlcwotICogICAgIGJpdCAwICAgICBBbHdheXMgb2ZmIChBbGwgc3lzdGVtcykKLSAqICAgICBiaXQgMSAgICAgQWx3YXlzIG9uIChUcmF2aXMgQVRHLCBTaWJlcmlhKQotICogICAgIGJpdCAyICAgICBBdXRvOiBBTFMtYmFzZWQgT247IEFMUy1iYXNlZCBPZmYgKFRyYXZpcyBBVEcpCi0gKiAgICAgYml0IDMgICAgIEF1dG86IEFMUy0gYW5kIGlucHV0LWFjdGl2aXR5LWJhc2VkIE9uOyBpbnB1dC1hY3Rpdml0eSBiYXNlZCBPZmYKLSAqICAgICBiaXQgNCAgICAgQXV0bzogSW5wdXQtYWN0aXZpdHktYmFzZWQgT247IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA1ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbiAoaWxsdW1pbmF0aW9uIGxldmVsIDI1JSk7IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA2ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbiAoaWxsdW1pbmF0aW9uIGxldmVsIDUwJSk7IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA3ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbiAoaWxsdW1pbmF0aW9uIGxldmVsIDc1JSk7IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA4ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbiAoaWxsdW1pbmF0aW9uIGxldmVsIDEwMCUpOyBpbnB1dC1hY3Rpdml0eSBiYXNlZCBPZmYKLSAqICAgICBiaXRzIDktMTUgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAqICBjYlJFUzIsIGJ5dGUyICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQotICogIGNiUkVTMiwgYnl0ZTMgIEtleWJvYXJkIGlsbHVtaW5hdGlvbiB0eXBlCi0gKiAgICAgMCAgICAgICAgIFJlc2VydmVkCi0gKiAgICAgMSAgICAgICAgIFRhc2tsaWdodAotICogICAgIDIgICAgICAgICBCYWNrbGlnaHQKLSAqICAgICAzLTI1NSAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAqICBjYlJFUzMsIGJ5dGUwICBTdXBwb3J0ZWQgYXV0byBrZXlib2FyZCBpbGx1bWluYXRpb24gdHJpZ2dlciBiaXRtYXAuCi0gKiAgICAgYml0IDAgICAgIEFueSBrZXlzdHJva2UKLSAqICAgICBiaXQgMSAgICAgVG91Y2hwYWQgYWN0aXZpdHkKLSAqICAgICBiaXQgMiAgICAgUG9pbnRpbmcgc3RpY2sKLSAqICAgICBiaXQgMyAgICAgQW55IG1vdXNlCi0gKiAgICAgYml0cyA0LTcgIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCi0gKiAgY2JSRVMzLCBieXRlMSAgU3VwcG9ydGVkIHRpbWVvdXQgdW5pdCBiaXRtYXAKLSAqICAgICBiaXQgMCAgICAgU2Vjb25kcwotICogICAgIGJpdCAxICAgICBNaW51dGVzCi0gKiAgICAgYml0IDIgICAgIEhvdXJzCi0gKiAgICAgYml0IDMgICAgIERheXMKLSAqICAgICBiaXRzIDQtNyAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAqICBjYlJFUzMsIGJ5dGUyICBOdW1iZXIgb2Yga2V5Ym9hcmQgbGlnaHQgYnJpZ2h0bmVzcyBsZXZlbHMKLSAqICBjYlJFUzQsIGJ5dGUwICBNYXhpbXVtIGFjY2VwdGFibGUgc2Vjb25kcyB2YWx1ZSAoMCBpZiBzZWNvbmRzIG5vdCBzdXBwb3J0ZWQpLgotICogIGNiUkVTNCwgYnl0ZTEgIE1heGltdW0gYWNjZXB0YWJsZSBtaW51dGVzIHZhbHVlICgwIGlmIG1pbnV0ZXMgbm90IHN1cHBvcnRlZCkuCi0gKiAgY2JSRVM0LCBieXRlMiAgTWF4aW11bSBhY2NlcHRhYmxlIGhvdXJzIHZhbHVlICgwIGlmIGhvdXJzIG5vdCBzdXBwb3J0ZWQpLgotICogIGNiUkVTNCwgYnl0ZTMgIE1heGltdW0gYWNjZXB0YWJsZSBkYXlzIHZhbHVlICgwIGlmIGRheXMgbm90IHN1cHBvcnRlZCkKLSAqCi0gKiBjYkFyZzEgMHgxID0gR2V0IEN1cnJlbnQgU3RhdGUKLSAqICBjYlJFUzEgICAgICAgICBTdGFuZGFyZCByZXR1cm4gY29kZXMgKDAsIC0xLCAtMikKLSAqICBjYlJFUzIsIHdvcmQwICBCaXRtYXAgb2YgY3VycmVudCBtb2RlIHN0YXRlCi0gKiAgICAgYml0IDAgICAgIEFsd2F5cyBvZmYgKEFsbCBzeXN0ZW1zKQotICogICAgIGJpdCAxICAgICBBbHdheXMgb24gKFRyYXZpcyBBVEcsIFNpYmVyaWEpCi0gKiAgICAgYml0IDIgICAgIEF1dG86IEFMUy1iYXNlZCBPbjsgQUxTLWJhc2VkIE9mZiAoVHJhdmlzIEFURykKLSAqICAgICBiaXQgMyAgICAgQXV0bzogQUxTLSBhbmQgaW5wdXQtYWN0aXZpdHktYmFzZWQgT247IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA0ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbjsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDUgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgMjUlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDYgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgNTAlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDcgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgNzUlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDggICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgMTAwJSk7IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdHMgOS0xNSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQotICogICAgIE5vdGU6IE9ubHkgT25lIGJpdCBjYW4gYmUgc2V0Ci0gKiAgY2JSRVMyLCBieXRlMiAgQ3VycmVudGx5IGFjdGl2ZSBhdXRvIGtleWJvYXJkIGlsbHVtaW5hdGlvbiB0cmlnZ2Vycy4KLSAqICAgICBiaXQgMCAgICAgQW55IGtleXN0cm9rZQotICogICAgIGJpdCAxICAgICBUb3VjaHBhZCBhY3Rpdml0eQotICogICAgIGJpdCAyICAgICBQb2ludGluZyBzdGljawotICogICAgIGJpdCAzICAgICBBbnkgbW91c2UKLSAqICAgICBiaXRzIDQtNyAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAqICBjYlJFUzIsIGJ5dGUzICBDdXJyZW50IFRpbWVvdXQKLSAqICAgICBiaXRzIDc6NiAgVGltZW91dCB1bml0cyBpbmRpY2F0b3I6Ci0gKiAgICAgMDBiICAgICAgIFNlY29uZHMKLSAqICAgICAwMWIgICAgICAgTWludXRlcwotICogICAgIDEwYiAgICAgICBIb3VycwotICogICAgIDExYiAgICAgICBEYXlzCi0gKiAgICAgYml0cyA1OjAgIFRpbWVvdXQgdmFsdWUgKDAtNjMpIGluIHNlYy9taW4vaHIvZGF5Ci0gKiAgICAgTk9URTogQSB2YWx1ZSBvZiAwIG1lYW5zIGFsd2F5cyBvbiAobm8gdGltZW91dCkgaWYgYW55IGJpdHMgb2YgUkVTMyBieXRlCi0gKiAgICAgYXJlIHNldCB1cG9uIHJldHVybiBmcm9tIHRoZSBbR2V0IGZlYXR1cmUgaW5mb3JtYXRpb25dIGNhbGwuCi0gKiAgY2JSRVMzLCBieXRlMCAgQ3VycmVudCBzZXR0aW5nIG9mIEFMUyB2YWx1ZSB0aGF0IHR1cm5zIHRoZSBsaWdodCBvbiBvciBvZmYuCi0gKiAgY2JSRVMzLCBieXRlMSAgQ3VycmVudCBBTFMgcmVhZGluZwotICogIGNiUkVTMywgYnl0ZTIgIEN1cnJlbnQga2V5Ym9hcmQgbGlnaHQgbGV2ZWwuCi0gKgotICogY2JBcmcxIDB4MiA9IFNldCBOZXcgU3RhdGUKLSAqICBjYlJFUzEgICAgICAgICBTdGFuZGFyZCByZXR1cm4gY29kZXMgKDAsIC0xLCAtMikKLSAqICBjYkFyZzIsIHdvcmQwICBCaXRtYXAgb2YgY3VycmVudCBtb2RlIHN0YXRlCi0gKiAgICAgYml0IDAgICAgIEFsd2F5cyBvZmYgKEFsbCBzeXN0ZW1zKQotICogICAgIGJpdCAxICAgICBBbHdheXMgb24gKFRyYXZpcyBBVEcsIFNpYmVyaWEpCi0gKiAgICAgYml0IDIgICAgIEF1dG86IEFMUy1iYXNlZCBPbjsgQUxTLWJhc2VkIE9mZiAoVHJhdmlzIEFURykKLSAqICAgICBiaXQgMyAgICAgQXV0bzogQUxTLSBhbmQgaW5wdXQtYWN0aXZpdHktYmFzZWQgT247IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdCA0ICAgICBBdXRvOiBJbnB1dC1hY3Rpdml0eS1iYXNlZCBPbjsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDUgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgMjUlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDYgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgNTAlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDcgICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgNzUlKTsgaW5wdXQtYWN0aXZpdHkgYmFzZWQgT2ZmCi0gKiAgICAgYml0IDggICAgIEF1dG86IElucHV0LWFjdGl2aXR5LWJhc2VkIE9uIChpbGx1bWluYXRpb24gbGV2ZWwgMTAwJSk7IGlucHV0LWFjdGl2aXR5IGJhc2VkIE9mZgotICogICAgIGJpdHMgOS0xNSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQotICogICAgIE5vdGU6IE9ubHkgT25lIGJpdCBjYW4gYmUgc2V0Ci0gKiAgY2JBcmcyLCBieXRlMiAgRGVzaXJlZCBhdXRvIGtleWJvYXJkIGlsbHVtaW5hdGlvbiB0cmlnZ2Vycy4gTXVzdCByZW1haW4gaW5hY3RpdmUgdG8gYWxsb3cKLSAqICAgICAgICAgICAgICAgICBrZXlib2FyZCB0byB0dXJuIG9mZiBhdXRvbWF0aWNhbGx5LgotICogICAgIGJpdCAwICAgICBBbnkga2V5c3Ryb2tlCi0gKiAgICAgYml0IDEgICAgIFRvdWNocGFkIGFjdGl2aXR5Ci0gKiAgICAgYml0IDIgICAgIFBvaW50aW5nIHN0aWNrCi0gKiAgICAgYml0IDMgICAgIEFueSBtb3VzZQotICogICAgIGJpdHMgNC03ICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQotICogIGNiQXJnMiwgYnl0ZTMgIERlc2lyZWQgVGltZW91dAotICogICAgIGJpdHMgNzo2ICBUaW1lb3V0IHVuaXRzIGluZGljYXRvcjoKLSAqICAgICAwMGIgICAgICAgU2Vjb25kcwotICogICAgIDAxYiAgICAgICBNaW51dGVzCi0gKiAgICAgMTBiICAgICAgIEhvdXJzCi0gKiAgICAgMTFiICAgICAgIERheXMKLSAqICAgICBiaXRzIDU6MCAgVGltZW91dCB2YWx1ZSAoMC02MykgaW4gc2VjL21pbi9oci9kYXkKLSAqICBjYkFyZzMsIGJ5dGUwICBEZXNpcmVkIHNldHRpbmcgb2YgQUxTIHZhbHVlIHRoYXQgdHVybnMgdGhlIGxpZ2h0IG9uIG9yIG9mZi4KLSAqICBjYkFyZzMsIGJ5dGUyICBEZXNpcmVkIGtleWJvYXJkIGxpZ2h0IGxldmVsLgotICovCi0KLQotZW51bSBrYmRfdGltZW91dF91bml0IHsKLQlLQkRfVElNRU9VVF9TRUNPTkRTID0gMCwKLQlLQkRfVElNRU9VVF9NSU5VVEVTLAotCUtCRF9USU1FT1VUX0hPVVJTLAotCUtCRF9USU1FT1VUX0RBWVMsCi19OwotCi1lbnVtIGtiZF9tb2RlX2JpdCB7Ci0JS0JEX01PREVfQklUX09GRiA9IDAsCi0JS0JEX01PREVfQklUX09OLAotCUtCRF9NT0RFX0JJVF9BTFMsCi0JS0JEX01PREVfQklUX1RSSUdHRVJfQUxTLAotCUtCRF9NT0RFX0JJVF9UUklHR0VSLAotCUtCRF9NT0RFX0JJVF9UUklHR0VSXzI1LAotCUtCRF9NT0RFX0JJVF9UUklHR0VSXzUwLAotCUtCRF9NT0RFX0JJVF9UUklHR0VSXzc1LAotCUtCRF9NT0RFX0JJVF9UUklHR0VSXzEwMCwKLX07Ci0KLSNkZWZpbmUga2JkX2lzX2Fsc19tb2RlX2JpdChiaXQpIFwKLQkoKGJpdCkgPT0gS0JEX01PREVfQklUX0FMUyB8fCAoYml0KSA9PSBLQkRfTU9ERV9CSVRfVFJJR0dFUl9BTFMpCi0jZGVmaW5lIGtiZF9pc190cmlnZ2VyX21vZGVfYml0KGJpdCkgXAotCSgoYml0KSA+PSBLQkRfTU9ERV9CSVRfVFJJR0dFUl9BTFMgJiYgKGJpdCkgPD0gS0JEX01PREVfQklUX1RSSUdHRVJfMTAwKQotI2RlZmluZSBrYmRfaXNfbGV2ZWxfbW9kZV9iaXQoYml0KSBcCi0JKChiaXQpID49IEtCRF9NT0RFX0JJVF9UUklHR0VSXzI1ICYmIChiaXQpIDw9IEtCRF9NT0RFX0JJVF9UUklHR0VSXzEwMCkKLQotc3RydWN0IGtiZF9pbmZvIHsKLQl1MTYgbW9kZXM7Ci0JdTggdHlwZTsKLQl1OCB0cmlnZ2VyczsKLQl1OCBsZXZlbHM7Ci0JdTggc2Vjb25kczsKLQl1OCBtaW51dGVzOwotCXU4IGhvdXJzOwotCXU4IGRheXM7Ci19OwotCi1zdHJ1Y3Qga2JkX3N0YXRlIHsKLQl1OCBtb2RlX2JpdDsKLQl1OCB0cmlnZ2VyczsKLQl1OCB0aW1lb3V0X3ZhbHVlOwotCXU4IHRpbWVvdXRfdW5pdDsKLQl1OCBhbHNfc2V0dGluZzsKLQl1OCBhbHNfdmFsdWU7Ci0JdTggbGV2ZWw7Ci19OwotCi1zdGF0aWMgY29uc3QgaW50IGtiZF90b2tlbnNbXSA9IHsKLQlLQkRfTEVEX09GRl9UT0tFTiwKLQlLQkRfTEVEX0FVVE9fMjVfVE9LRU4sCi0JS0JEX0xFRF9BVVRPXzUwX1RPS0VOLAotCUtCRF9MRURfQVVUT183NV9UT0tFTiwKLQlLQkRfTEVEX0FVVE9fMTAwX1RPS0VOLAotCUtCRF9MRURfT05fVE9LRU4sCi19OwotCi1zdGF0aWMgdTE2IGtiZF90b2tlbl9iaXRzOwotCi1zdGF0aWMgc3RydWN0IGtiZF9pbmZvIGtiZF9pbmZvOwotc3RhdGljIGJvb2wga2JkX2Fsc19zdXBwb3J0ZWQ7Ci1zdGF0aWMgYm9vbCBrYmRfdHJpZ2dlcnNfc3VwcG9ydGVkOwotCi1zdGF0aWMgdTgga2JkX21vZGVfbGV2ZWxzWzE2XTsKLXN0YXRpYyBpbnQga2JkX21vZGVfbGV2ZWxzX2NvdW50OwotCi1zdGF0aWMgdTgga2JkX3ByZXZpb3VzX2xldmVsOwotc3RhdGljIHU4IGtiZF9wcmV2aW91c19tb2RlX2JpdDsKLQotc3RhdGljIGJvb2wga2JkX2xlZF9wcmVzZW50OwotCi0vKgotICogTk9URTogdGhlcmUgYXJlIHRocmVlIHdheXMgdG8gc2V0IHRoZSBrZXlib2FyZCBiYWNrbGlnaHQgbGV2ZWwuCi0gKiBGaXJzdCwgdmlhIGtiZF9zdGF0ZS5tb2RlX2JpdCAoYXNzaWduaW5nIEtCRF9NT0RFX0JJVF9UUklHR0VSXyogdmFsdWUpLgotICogU2Vjb25kLCB2aWEga2JkX3N0YXRlLmxldmVsIChhc3NpZ25pbmcgbnVtZXJpY2FsIHZhbHVlIDw9IGtiZF9pbmZvLmxldmVscykuCi0gKiBUaGlyZCwgdmlhIFNNQklPUyB0b2tlbnMgKEtCRF9MRURfKiBpbiBrYmRfdG9rZW5zKQotICoKLSAqIFRoZXJlIGFyZSBsYXB0b3BzIHdoaWNoIHN1cHBvcnQgb25seSBvbmUgb2YgdGhlc2UgbWV0aG9kcy4gSWYgd2Ugd2FudCB0bwotICogc3VwcG9ydCBhcyBtYW55IG1hY2hpbmVzIGFzIHBvc3NpYmxlIHdlIG5lZWQgdG8gaW1wbGVtZW50IGFsbCB0aHJlZSBtZXRob2RzLgotICogVGhlIGZpcnN0IHR3byBtZXRob2RzIHVzZSB0aGUga2JkX3N0YXRlIHN0cnVjdHVyZS4gVGhlIHRoaXJkIHVzZXMgU01CSU9TCi0gKiB0b2tlbnMuIElmIGtiZF9pbmZvLmxldmVscyA9PSAwLCB0aGUgbWFjaGluZSBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgdGhlCi0gKiBrZXlib2FyZCBiYWNrbGlnaHQgbGV2ZWwgdmlhIGtiZF9zdGF0ZS5sZXZlbC4KLSAqLwotCi1zdGF0aWMgaW50IGtiZF9nZXRfaW5mbyhzdHJ1Y3Qga2JkX2luZm8gKmluZm8pCi17Ci0JdTggdW5pdHM7Ci0JaW50IHJldDsKLQotCWdldF9idWZmZXIoKTsKLQotCWJ1ZmZlci0+aW5wdXRbMF0gPSAweDA7Ci0JZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCA0LCAxMSk7Ci0JcmV0ID0gYnVmZmVyLT5vdXRwdXRbMF07Ci0KLQlpZiAocmV0KSB7Ci0JCXJldCA9IGRlbGxfc21pX2Vycm9yKHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWluZm8tPm1vZGVzID0gYnVmZmVyLT5vdXRwdXRbMV0gJiAweEZGRkY7Ci0JaW5mby0+dHlwZSA9IChidWZmZXItPm91dHB1dFsxXSA+PiAyNCkgJiAweEZGOwotCWluZm8tPnRyaWdnZXJzID0gYnVmZmVyLT5vdXRwdXRbMl0gJiAweEZGOwotCXVuaXRzID0gKGJ1ZmZlci0+b3V0cHV0WzJdID4+IDgpICYgMHhGRjsKLQlpbmZvLT5sZXZlbHMgPSAoYnVmZmVyLT5vdXRwdXRbMl0gPj4gMTYpICYgMHhGRjsKLQotCWlmICh1bml0cyAmIEJJVCgwKSkKLQkJaW5mby0+c2Vjb25kcyA9IChidWZmZXItPm91dHB1dFszXSA+PiAwKSAmIDB4RkY7Ci0JaWYgKHVuaXRzICYgQklUKDEpKQotCQlpbmZvLT5taW51dGVzID0gKGJ1ZmZlci0+b3V0cHV0WzNdID4+IDgpICYgMHhGRjsKLQlpZiAodW5pdHMgJiBCSVQoMikpCi0JCWluZm8tPmhvdXJzID0gKGJ1ZmZlci0+b3V0cHV0WzNdID4+IDE2KSAmIDB4RkY7Ci0JaWYgKHVuaXRzICYgQklUKDMpKQotCQlpbmZvLT5kYXlzID0gKGJ1ZmZlci0+b3V0cHV0WzNdID4+IDI0KSAmIDB4RkY7Ci0KLSBvdXQ6Ci0JcmVsZWFzZV9idWZmZXIoKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGtiZF9nZXRfbWF4X2xldmVsKHZvaWQpCi17Ci0JaWYgKGtiZF9pbmZvLmxldmVscyAhPSAwKQotCQlyZXR1cm4ga2JkX2luZm8ubGV2ZWxzOwotCWlmIChrYmRfbW9kZV9sZXZlbHNfY291bnQgPiAwKQotCQlyZXR1cm4ga2JkX21vZGVfbGV2ZWxzX2NvdW50IC0gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBrYmRfZ2V0X2xldmVsKHN0cnVjdCBrYmRfc3RhdGUgKnN0YXRlKQotewotCWludCBpOwotCi0JaWYgKGtiZF9pbmZvLmxldmVscyAhPSAwKQotCQlyZXR1cm4gc3RhdGUtPmxldmVsOwotCi0JaWYgKGtiZF9tb2RlX2xldmVsc19jb3VudCA+IDApIHsKLQkJZm9yIChpID0gMDsgaSA8IGtiZF9tb2RlX2xldmVsc19jb3VudDsgKytpKQotCQkJaWYgKGtiZF9tb2RlX2xldmVsc1tpXSA9PSBzdGF0ZS0+bW9kZV9iaXQpCi0JCQkJcmV0dXJuIGk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGtiZF9zZXRfbGV2ZWwoc3RydWN0IGtiZF9zdGF0ZSAqc3RhdGUsIHU4IGxldmVsKQotewotCWlmIChrYmRfaW5mby5sZXZlbHMgIT0gMCkgewotCQlpZiAobGV2ZWwgIT0gMCkKLQkJCWtiZF9wcmV2aW91c19sZXZlbCA9IGxldmVsOwotCQlpZiAoc3RhdGUtPmxldmVsID09IGxldmVsKQotCQkJcmV0dXJuIDA7Ci0JCXN0YXRlLT5sZXZlbCA9IGxldmVsOwotCQlpZiAobGV2ZWwgIT0gMCAmJiBzdGF0ZS0+bW9kZV9iaXQgPT0gS0JEX01PREVfQklUX09GRikKLQkJCXN0YXRlLT5tb2RlX2JpdCA9IGtiZF9wcmV2aW91c19tb2RlX2JpdDsKLQkJZWxzZSBpZiAobGV2ZWwgPT0gMCAmJiBzdGF0ZS0+bW9kZV9iaXQgIT0gS0JEX01PREVfQklUX09GRikgewotCQkJa2JkX3ByZXZpb3VzX21vZGVfYml0ID0gc3RhdGUtPm1vZGVfYml0OwotCQkJc3RhdGUtPm1vZGVfYml0ID0gS0JEX01PREVfQklUX09GRjsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoa2JkX21vZGVfbGV2ZWxzX2NvdW50ID4gMCAmJiBsZXZlbCA8IGtiZF9tb2RlX2xldmVsc19jb3VudCkgewotCQlpZiAobGV2ZWwgIT0gMCkKLQkJCWtiZF9wcmV2aW91c19sZXZlbCA9IGxldmVsOwotCQlzdGF0ZS0+bW9kZV9iaXQgPSBrYmRfbW9kZV9sZXZlbHNbbGV2ZWxdOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBrYmRfZ2V0X3N0YXRlKHN0cnVjdCBrYmRfc3RhdGUgKnN0YXRlKQotewotCWludCByZXQ7Ci0KLQlnZXRfYnVmZmVyKCk7Ci0KLQlidWZmZXItPmlucHV0WzBdID0gMHgxOwotCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgNCwgMTEpOwotCXJldCA9IGJ1ZmZlci0+b3V0cHV0WzBdOwotCi0JaWYgKHJldCkgewotCQlyZXQgPSBkZWxsX3NtaV9lcnJvcihyZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzdGF0ZS0+bW9kZV9iaXQgPSBmZnMoYnVmZmVyLT5vdXRwdXRbMV0gJiAweEZGRkYpOwotCWlmIChzdGF0ZS0+bW9kZV9iaXQgIT0gMCkKLQkJc3RhdGUtPm1vZGVfYml0LS07Ci0KLQlzdGF0ZS0+dHJpZ2dlcnMgPSAoYnVmZmVyLT5vdXRwdXRbMV0gPj4gMTYpICYgMHhGRjsKLQlzdGF0ZS0+dGltZW91dF92YWx1ZSA9IChidWZmZXItPm91dHB1dFsxXSA+PiAyNCkgJiAweDNGOwotCXN0YXRlLT50aW1lb3V0X3VuaXQgPSAoYnVmZmVyLT5vdXRwdXRbMV0gPj4gMzApICYgMHgzOwotCXN0YXRlLT5hbHNfc2V0dGluZyA9IGJ1ZmZlci0+b3V0cHV0WzJdICYgMHhGRjsKLQlzdGF0ZS0+YWxzX3ZhbHVlID0gKGJ1ZmZlci0+b3V0cHV0WzJdID4+IDgpICYgMHhGRjsKLQlzdGF0ZS0+bGV2ZWwgPSAoYnVmZmVyLT5vdXRwdXRbMl0gPj4gMTYpICYgMHhGRjsKLQotIG91dDoKLQlyZWxlYXNlX2J1ZmZlcigpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQga2JkX3NldF9zdGF0ZShzdHJ1Y3Qga2JkX3N0YXRlICpzdGF0ZSkKLXsKLQlpbnQgcmV0OwotCi0JZ2V0X2J1ZmZlcigpOwotCWJ1ZmZlci0+aW5wdXRbMF0gPSAweDI7Ci0JYnVmZmVyLT5pbnB1dFsxXSA9IEJJVChzdGF0ZS0+bW9kZV9iaXQpICYgMHhGRkZGOwotCWJ1ZmZlci0+aW5wdXRbMV0gfD0gKHN0YXRlLT50cmlnZ2VycyAmIDB4RkYpIDw8IDE2OwotCWJ1ZmZlci0+aW5wdXRbMV0gfD0gKHN0YXRlLT50aW1lb3V0X3ZhbHVlICYgMHgzRikgPDwgMjQ7Ci0JYnVmZmVyLT5pbnB1dFsxXSB8PSAoc3RhdGUtPnRpbWVvdXRfdW5pdCAmIDB4MykgPDwgMzA7Ci0JYnVmZmVyLT5pbnB1dFsyXSA9IHN0YXRlLT5hbHNfc2V0dGluZyAmIDB4RkY7Ci0JYnVmZmVyLT5pbnB1dFsyXSB8PSAoc3RhdGUtPmxldmVsICYgMHhGRikgPDwgMTY7Ci0JZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCA0LCAxMSk7Ci0JcmV0ID0gYnVmZmVyLT5vdXRwdXRbMF07Ci0JcmVsZWFzZV9idWZmZXIoKTsKLQotCXJldHVybiBkZWxsX3NtaV9lcnJvcihyZXQpOwotfQotCi1zdGF0aWMgaW50IGtiZF9zZXRfc3RhdGVfc2FmZShzdHJ1Y3Qga2JkX3N0YXRlICpzdGF0ZSwgc3RydWN0IGtiZF9zdGF0ZSAqb2xkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBrYmRfc2V0X3N0YXRlKHN0YXRlKTsKLQlpZiAocmV0ID09IDApCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBXaGVuIHNldHRpbmcgdGhlIG5ldyBzdGF0ZSBmYWlscyx0cnkgdG8gcmVzdG9yZSB0aGUgcHJldmlvdXMgb25lLgotCSAqIFRoaXMgaXMgbmVlZGVkIG9uIHNvbWUgbWFjaGluZXMgd2hlcmUgQklPUyBzZXRzIGEgZGVmYXVsdCBzdGF0ZSB3aGVuCi0JICogc2V0dGluZyBhIG5ldyBzdGF0ZSBmYWlscy4gVGhpcyBkZWZhdWx0IHN0YXRlIGNvdWxkIGJlIGFsbCBvZmYuCi0JICovCi0KLQlpZiAoa2JkX3NldF9zdGF0ZShvbGQpKQotCQlwcl9lcnIoIlNldHRpbmcgb2xkIHByZXZpb3VzIGtleWJvYXJkIHN0YXRlIGZhaWxlZFxuIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGtiZF9zZXRfdG9rZW5fYml0KHU4IGJpdCkKLXsKLQlpbnQgaWQ7Ci0JaW50IHJldDsKLQotCWlmIChiaXQgPj0gQVJSQVlfU0laRShrYmRfdG9rZW5zKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZCA9IGZpbmRfdG9rZW5faWQoa2JkX3Rva2Vuc1tiaXRdKTsKLQlpZiAoaWQgPT0gLTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZ2V0X2J1ZmZlcigpOwotCWJ1ZmZlci0+aW5wdXRbMF0gPSBkYV90b2tlbnNbaWRdLmxvY2F0aW9uOwotCWJ1ZmZlci0+aW5wdXRbMV0gPSBkYV90b2tlbnNbaWRdLnZhbHVlOwotCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMSwgMCk7Ci0JcmV0ID0gYnVmZmVyLT5vdXRwdXRbMF07Ci0JcmVsZWFzZV9idWZmZXIoKTsKLQotCXJldHVybiBkZWxsX3NtaV9lcnJvcihyZXQpOwotfQotCi1zdGF0aWMgaW50IGtiZF9nZXRfdG9rZW5fYml0KHU4IGJpdCkKLXsKLQlpbnQgaWQ7Ci0JaW50IHJldDsKLQlpbnQgdmFsOwotCi0JaWYgKGJpdCA+PSBBUlJBWV9TSVpFKGtiZF90b2tlbnMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlkID0gZmluZF90b2tlbl9pZChrYmRfdG9rZW5zW2JpdF0pOwotCWlmIChpZCA9PSAtMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlnZXRfYnVmZmVyKCk7Ci0JYnVmZmVyLT5pbnB1dFswXSA9IGRhX3Rva2Vuc1tpZF0ubG9jYXRpb247Ci0JZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAwLCAwKTsKLQlyZXQgPSBidWZmZXItPm91dHB1dFswXTsKLQl2YWwgPSBidWZmZXItPm91dHB1dFsxXTsKLQlyZWxlYXNlX2J1ZmZlcigpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIGRlbGxfc21pX2Vycm9yKHJldCk7Ci0KLQlyZXR1cm4gKHZhbCA9PSBkYV90b2tlbnNbaWRdLnZhbHVlKTsKLX0KLQotc3RhdGljIGludCBrYmRfZ2V0X2ZpcnN0X2FjdGl2ZV90b2tlbl9iaXQodm9pZCkKLXsKLQlpbnQgaTsKLQlpbnQgcmV0OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoa2JkX3Rva2Vucyk7ICsraSkgewotCQlyZXQgPSBrYmRfZ2V0X3Rva2VuX2JpdChpKTsKLQkJaWYgKHJldCA9PSAxKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBrYmRfZ2V0X3ZhbGlkX3Rva2VuX2NvdW50cyh2b2lkKQotewotCXJldHVybiBod2VpZ2h0MTYoa2JkX3Rva2VuX2JpdHMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBrYmRfaW5pdF9pbmZvKHZvaWQpCi17Ci0Jc3RydWN0IGtiZF9zdGF0ZSBzdGF0ZTsKLQlpbnQgcmV0OwotCWludCBpOwotCi0JcmV0ID0ga2JkX2dldF9pbmZvKCZrYmRfaW5mbyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWtiZF9nZXRfc3RhdGUoJnN0YXRlKTsKLQotCS8qIE5PVEU6IHRpbWVvdXQgdmFsdWUgaXMgc3RvcmVkIGluIDYgYml0cyBzbyBtYXggdmFsdWUgaXMgNjMgKi8KLQlpZiAoa2JkX2luZm8uc2Vjb25kcyA+IDYzKQotCQlrYmRfaW5mby5zZWNvbmRzID0gNjM7Ci0JaWYgKGtiZF9pbmZvLm1pbnV0ZXMgPiA2MykKLQkJa2JkX2luZm8ubWludXRlcyA9IDYzOwotCWlmIChrYmRfaW5mby5ob3VycyA+IDYzKQotCQlrYmRfaW5mby5ob3VycyA9IDYzOwotCWlmIChrYmRfaW5mby5kYXlzID4gNjMpCi0JCWtiZF9pbmZvLmRheXMgPSA2MzsKLQotCS8qIE5PVEU6IE9uIHRlc3RlZCBtYWNoaW5lcyBPTiBtb2RlIGRpZCBub3Qgd29yayBhbmQgY2F1c2VkCi0JICogICAgICAgcHJvYmxlbXMgKHR1cm5lZCBiYWNrbGlnaHQgb2ZmKSBzbyBkbyBub3QgdXNlIGl0Ci0JICovCi0Ja2JkX2luZm8ubW9kZXMgJj0gfkJJVChLQkRfTU9ERV9CSVRfT04pOwotCi0Ja2JkX3ByZXZpb3VzX2xldmVsID0ga2JkX2dldF9sZXZlbCgmc3RhdGUpOwotCWtiZF9wcmV2aW91c19tb2RlX2JpdCA9IHN0YXRlLm1vZGVfYml0OwotCi0JaWYgKGtiZF9wcmV2aW91c19sZXZlbCA9PSAwICYmIGtiZF9nZXRfbWF4X2xldmVsKCkgIT0gMCkKLQkJa2JkX3ByZXZpb3VzX2xldmVsID0gMTsKLQotCWlmIChrYmRfcHJldmlvdXNfbW9kZV9iaXQgPT0gS0JEX01PREVfQklUX09GRikgewotCQlrYmRfcHJldmlvdXNfbW9kZV9iaXQgPQotCQkJZmZzKGtiZF9pbmZvLm1vZGVzICYgfkJJVChLQkRfTU9ERV9CSVRfT0ZGKSk7Ci0JCWlmIChrYmRfcHJldmlvdXNfbW9kZV9iaXQgIT0gMCkKLQkJCWtiZF9wcmV2aW91c19tb2RlX2JpdC0tOwotCX0KLQotCWlmIChrYmRfaW5mby5tb2RlcyAmIChCSVQoS0JEX01PREVfQklUX0FMUykgfAotCQkJICAgICAgQklUKEtCRF9NT0RFX0JJVF9UUklHR0VSX0FMUykpKQotCQlrYmRfYWxzX3N1cHBvcnRlZCA9IHRydWU7Ci0KLQlpZiAoa2JkX2luZm8ubW9kZXMgJiAoCi0JICAgIEJJVChLQkRfTU9ERV9CSVRfVFJJR0dFUl9BTFMpIHwgQklUKEtCRF9NT0RFX0JJVF9UUklHR0VSKSB8Ci0JICAgIEJJVChLQkRfTU9ERV9CSVRfVFJJR0dFUl8yNSkgfCBCSVQoS0JEX01PREVfQklUX1RSSUdHRVJfNTApIHwKLQkgICAgQklUKEtCRF9NT0RFX0JJVF9UUklHR0VSXzc1KSB8IEJJVChLQkRfTU9ERV9CSVRfVFJJR0dFUl8xMDApCi0JICAgKSkKLQkJa2JkX3RyaWdnZXJzX3N1cHBvcnRlZCA9IHRydWU7Ci0KLQkvKiBrYmRfbW9kZV9sZXZlbHNbMF0gaXMgcmVzZXJ2ZWQsIHNlZSBiZWxvdyAqLwotCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKQotCQlpZiAoa2JkX2lzX2xldmVsX21vZGVfYml0KGkpICYmIChCSVQoaSkgJiBrYmRfaW5mby5tb2RlcykpCi0JCQlrYmRfbW9kZV9sZXZlbHNbMSArIGtiZF9tb2RlX2xldmVsc19jb3VudCsrXSA9IGk7Ci0KLQkvKgotCSAqIEZpbmQgdGhlIGZpcnN0IHN1cHBvcnRlZCBtb2RlIGFuZCBhc3NpZ24gdG8ga2JkX21vZGVfbGV2ZWxzWzBdLgotCSAqIFRoaXMgc2hvdWxkIGJlIDAgKG9mZiksIGJ1dCB3ZSBjYW5ub3QgZGVwZW5kIG9uIHRoZSBCSU9TIHRvCi0JICogc3VwcG9ydCAwLgotCSAqLwotCWlmIChrYmRfbW9kZV9sZXZlbHNfY291bnQgPiAwKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB7Ci0JCQlpZiAoQklUKGkpICYga2JkX2luZm8ubW9kZXMpIHsKLQkJCQlrYmRfbW9kZV9sZXZlbHNbMF0gPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWtiZF9tb2RlX2xldmVsc19jb3VudCsrOwotCX0KLQotCXJldHVybiAwOwotCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrYmRfaW5pdF90b2tlbnModm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtiZF90b2tlbnMpOyArK2kpCi0JCWlmIChmaW5kX3Rva2VuX2lkKGtiZF90b2tlbnNbaV0pICE9IC0xKQotCQkJa2JkX3Rva2VuX2JpdHMgfD0gQklUKGkpOwotfQotCi1zdGF0aWMgdm9pZCBrYmRfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBrYmRfaW5pdF9pbmZvKCk7Ci0Ja2JkX2luaXRfdG9rZW5zKCk7Ci0KLQlpZiAoa2JkX3Rva2VuX2JpdHMgIT0gMCB8fCByZXQgPT0gMCkKLQkJa2JkX2xlZF9wcmVzZW50ID0gdHJ1ZTsKLX0KLQotc3RhdGljIHNzaXplX3Qga2JkX2xlZF90aW1lb3V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGtiZF9zdGF0ZSBuZXdfc3RhdGU7Ci0Jc3RydWN0IGtiZF9zdGF0ZSBzdGF0ZTsKLQlib29sIGNvbnZlcnQ7Ci0JaW50IHZhbHVlOwotCWludCByZXQ7Ci0JY2hhciBjaDsKLQl1OCB1bml0OwotCWludCBpOwotCi0JcmV0ID0gc3NjYW5mKGJ1ZiwgIiVkICVjIiwgJnZhbHVlLCAmY2gpOwotCWlmIChyZXQgPCAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIGlmIChyZXQgPT0gMSkKLQkJY2ggPSAncyc7Ci0KLQlpZiAodmFsdWUgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNvbnZlcnQgPSBmYWxzZTsKLQotCXN3aXRjaCAoY2gpIHsKLQljYXNlICdzJzoKLQkJaWYgKHZhbHVlID4ga2JkX2luZm8uc2Vjb25kcykKLQkJCWNvbnZlcnQgPSB0cnVlOwotCQl1bml0ID0gS0JEX1RJTUVPVVRfU0VDT05EUzsKLQkJYnJlYWs7Ci0JY2FzZSAnbSc6Ci0JCWlmICh2YWx1ZSA+IGtiZF9pbmZvLm1pbnV0ZXMpCi0JCQljb252ZXJ0ID0gdHJ1ZTsKLQkJdW5pdCA9IEtCRF9USU1FT1VUX01JTlVURVM7Ci0JCWJyZWFrOwotCWNhc2UgJ2gnOgotCQlpZiAodmFsdWUgPiBrYmRfaW5mby5ob3VycykKLQkJCWNvbnZlcnQgPSB0cnVlOwotCQl1bml0ID0gS0JEX1RJTUVPVVRfSE9VUlM7Ci0JCWJyZWFrOwotCWNhc2UgJ2QnOgotCQlpZiAodmFsdWUgPiBrYmRfaW5mby5kYXlzKQotCQkJY29udmVydCA9IHRydWU7Ci0JCXVuaXQgPSBLQkRfVElNRU9VVF9EQVlTOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAocXVpcmtzICYmIHF1aXJrcy0+bmVlZHNfa2JkX3RpbWVvdXRzKQotCQljb252ZXJ0ID0gdHJ1ZTsKLQotCWlmIChjb252ZXJ0KSB7Ci0JCS8qIENvbnZlcnQgdmFsdWUgZnJvbSBjdXJyZW50IHVuaXRzIHRvIHNlY29uZHMgKi8KLQkJc3dpdGNoICh1bml0KSB7Ci0JCWNhc2UgS0JEX1RJTUVPVVRfREFZUzoKLQkJCXZhbHVlICo9IDI0OwotCQljYXNlIEtCRF9USU1FT1VUX0hPVVJTOgotCQkJdmFsdWUgKj0gNjA7Ci0JCWNhc2UgS0JEX1RJTUVPVVRfTUlOVVRFUzoKLQkJCXZhbHVlICo9IDYwOwotCQkJdW5pdCA9IEtCRF9USU1FT1VUX1NFQ09ORFM7Ci0JCX0KLQotCQlpZiAocXVpcmtzICYmIHF1aXJrcy0+bmVlZHNfa2JkX3RpbWVvdXRzKSB7Ci0JCQlmb3IgKGkgPSAwOyBxdWlya3MtPmtiZF90aW1lb3V0c1tpXSAhPSAtMTsgaSsrKSB7Ci0JCQkJaWYgKHZhbHVlIDw9IHF1aXJrcy0+a2JkX3RpbWVvdXRzW2ldKSB7Ci0JCQkJCXZhbHVlID0gcXVpcmtzLT5rYmRfdGltZW91dHNbaV07Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmICh2YWx1ZSA8PSBrYmRfaW5mby5zZWNvbmRzICYmIGtiZF9pbmZvLnNlY29uZHMpIHsKLQkJCXVuaXQgPSBLQkRfVElNRU9VVF9TRUNPTkRTOwotCQl9IGVsc2UgaWYgKHZhbHVlIC8gNjAgPD0ga2JkX2luZm8ubWludXRlcyAmJiBrYmRfaW5mby5taW51dGVzKSB7Ci0JCQl2YWx1ZSAvPSA2MDsKLQkJCXVuaXQgPSBLQkRfVElNRU9VVF9NSU5VVEVTOwotCQl9IGVsc2UgaWYgKHZhbHVlIC8gKDYwICogNjApIDw9IGtiZF9pbmZvLmhvdXJzICYmIGtiZF9pbmZvLmhvdXJzKSB7Ci0JCQl2YWx1ZSAvPSAoNjAgKiA2MCk7Ci0JCQl1bml0ID0gS0JEX1RJTUVPVVRfSE9VUlM7Ci0JCX0gZWxzZSBpZiAodmFsdWUgLyAoNjAgKiA2MCAqIDI0KSA8PSBrYmRfaW5mby5kYXlzICYmIGtiZF9pbmZvLmRheXMpIHsKLQkJCXZhbHVlIC89ICg2MCAqIDYwICogMjQpOwotCQkJdW5pdCA9IEtCRF9USU1FT1VUX0RBWVM7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCXJldCA9IGtiZF9nZXRfc3RhdGUoJnN0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbmV3X3N0YXRlID0gc3RhdGU7Ci0JbmV3X3N0YXRlLnRpbWVvdXRfdmFsdWUgPSB2YWx1ZTsKLQluZXdfc3RhdGUudGltZW91dF91bml0ID0gdW5pdDsKLQotCXJldCA9IGtiZF9zZXRfc3RhdGVfc2FmZSgmbmV3X3N0YXRlLCAmc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGtiZF9sZWRfdGltZW91dF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qga2JkX3N0YXRlIHN0YXRlOwotCWludCByZXQ7Ci0JaW50IGxlbjsKLQotCXJldCA9IGtiZF9nZXRfc3RhdGUoJnN0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbGVuID0gc3ByaW50ZihidWYsICIlZCIsIHN0YXRlLnRpbWVvdXRfdmFsdWUpOwotCi0Jc3dpdGNoIChzdGF0ZS50aW1lb3V0X3VuaXQpIHsKLQljYXNlIEtCRF9USU1FT1VUX1NFQ09ORFM6Ci0JCXJldHVybiBsZW4gKyBzcHJpbnRmKGJ1ZitsZW4sICJzXG4iKTsKLQljYXNlIEtCRF9USU1FT1VUX01JTlVURVM6Ci0JCXJldHVybiBsZW4gKyBzcHJpbnRmKGJ1ZitsZW4sICJtXG4iKTsKLQljYXNlIEtCRF9USU1FT1VUX0hPVVJTOgotCQlyZXR1cm4gbGVuICsgc3ByaW50ZihidWYrbGVuLCAiaFxuIik7Ci0JY2FzZSBLQkRfVElNRU9VVF9EQVlTOgotCQlyZXR1cm4gbGVuICsgc3ByaW50ZihidWYrbGVuLCAiZFxuIik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKHN0b3BfdGltZW91dCwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIGtiZF9sZWRfdGltZW91dF9zaG93LCBrYmRfbGVkX3RpbWVvdXRfc3RvcmUpOwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtiZF9sZWRfdHJpZ2dlcnNbXSA9IHsKLQkia2V5Ym9hcmQiLAotCSJ0b3VjaHBhZCIsCi0JLyoidHJhY2tzdGljayIqLyBOVUxMLCAvKiBOT1RFOiB0cmFja3N0aWNrIGlzIGp1c3QgYWxpYXMgZm9yIHRvdWNocGFkICovCi0JIm1vdXNlIiwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IGtiZF9sZWRfdHJpZ2dlcnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBrYmRfc3RhdGUgbmV3X3N0YXRlOwotCXN0cnVjdCBrYmRfc3RhdGUgc3RhdGU7Ci0JYm9vbCB0cmlnZ2Vyc19lbmFibGVkID0gZmFsc2U7Ci0JYm9vbCBhbHNfZW5hYmxlZCA9IGZhbHNlOwotCWJvb2wgZGlzYWJsZV9hbHMgPSBmYWxzZTsKLQlib29sIGVuYWJsZV9hbHMgPSBmYWxzZTsKLQlpbnQgdHJpZ2dlcl9iaXQgPSAtMTsKLQljaGFyIHRyaWdnZXJbMjFdOwotCWludCBpLCByZXQ7Ci0KLQlyZXQgPSBzc2NhbmYoYnVmLCAiJTIwcyIsIHRyaWdnZXIpOwotCWlmIChyZXQgIT0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodHJpZ2dlclswXSAhPSAnKycgJiYgdHJpZ2dlclswXSAhPSAnLScpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0ga2JkX2dldF9zdGF0ZSgmc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoa2JkX2Fsc19zdXBwb3J0ZWQpCi0JCWFsc19lbmFibGVkID0ga2JkX2lzX2Fsc19tb2RlX2JpdChzdGF0ZS5tb2RlX2JpdCk7Ci0KLQlpZiAoa2JkX3RyaWdnZXJzX3N1cHBvcnRlZCkKLQkJdHJpZ2dlcnNfZW5hYmxlZCA9IGtiZF9pc190cmlnZ2VyX21vZGVfYml0KHN0YXRlLm1vZGVfYml0KTsKLQotCWlmIChrYmRfYWxzX3N1cHBvcnRlZCkgewotCQlpZiAoc3RyY21wKHRyaWdnZXIsICIrYWxzIikgPT0gMCkgewotCQkJaWYgKGFsc19lbmFibGVkKQotCQkJCXJldHVybiBjb3VudDsKLQkJCWVuYWJsZV9hbHMgPSB0cnVlOwotCQl9IGVsc2UgaWYgKHN0cmNtcCh0cmlnZ2VyLCAiLWFscyIpID09IDApIHsKLQkJCWlmICghYWxzX2VuYWJsZWQpCi0JCQkJcmV0dXJuIGNvdW50OwotCQkJZGlzYWJsZV9hbHMgPSB0cnVlOwotCQl9Ci0JfQotCi0JaWYgKGVuYWJsZV9hbHMgfHwgZGlzYWJsZV9hbHMpIHsKLQkJbmV3X3N0YXRlID0gc3RhdGU7Ci0JCWlmIChlbmFibGVfYWxzKSB7Ci0JCQlpZiAodHJpZ2dlcnNfZW5hYmxlZCkKLQkJCQluZXdfc3RhdGUubW9kZV9iaXQgPSBLQkRfTU9ERV9CSVRfVFJJR0dFUl9BTFM7Ci0JCQllbHNlCi0JCQkJbmV3X3N0YXRlLm1vZGVfYml0ID0gS0JEX01PREVfQklUX0FMUzsKLQkJfSBlbHNlIHsKLQkJCWlmICh0cmlnZ2Vyc19lbmFibGVkKSB7Ci0JCQkJbmV3X3N0YXRlLm1vZGVfYml0ID0gS0JEX01PREVfQklUX1RSSUdHRVI7Ci0JCQkJa2JkX3NldF9sZXZlbCgmbmV3X3N0YXRlLCBrYmRfcHJldmlvdXNfbGV2ZWwpOwotCQkJfSBlbHNlIHsKLQkJCQluZXdfc3RhdGUubW9kZV9iaXQgPSBLQkRfTU9ERV9CSVRfT047Ci0JCQl9Ci0JCX0KLQkJaWYgKCEoa2JkX2luZm8ubW9kZXMgJiBCSVQobmV3X3N0YXRlLm1vZGVfYml0KSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0ID0ga2JkX3NldF9zdGF0ZV9zYWZlKCZuZXdfc3RhdGUsICZzdGF0ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCQlrYmRfcHJldmlvdXNfbW9kZV9iaXQgPSBuZXdfc3RhdGUubW9kZV9iaXQ7Ci0JCXJldHVybiBjb3VudDsKLQl9Ci0KLQlpZiAoa2JkX3RyaWdnZXJzX3N1cHBvcnRlZCkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShrYmRfbGVkX3RyaWdnZXJzKTsgKytpKSB7Ci0JCQlpZiAoIShrYmRfaW5mby50cmlnZ2VycyAmIEJJVChpKSkpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIWtiZF9sZWRfdHJpZ2dlcnNbaV0pCi0JCQkJY29udGludWU7Ci0JCQlpZiAoc3RyY21wKHRyaWdnZXIrMSwga2JkX2xlZF90cmlnZ2Vyc1tpXSkgIT0gMCkKLQkJCQljb250aW51ZTsKLQkJCWlmICh0cmlnZ2VyWzBdID09ICcrJyAmJgotCQkJICAgIHRyaWdnZXJzX2VuYWJsZWQgJiYgKHN0YXRlLnRyaWdnZXJzICYgQklUKGkpKSkKLQkJCQlyZXR1cm4gY291bnQ7Ci0JCQlpZiAodHJpZ2dlclswXSA9PSAnLScgJiYKLQkJCSAgICAoIXRyaWdnZXJzX2VuYWJsZWQgfHwgIShzdGF0ZS50cmlnZ2VycyAmIEJJVChpKSkpKQotCQkJCXJldHVybiBjb3VudDsKLQkJCXRyaWdnZXJfYml0ID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKHRyaWdnZXJfYml0ICE9IC0xKSB7Ci0JCW5ld19zdGF0ZSA9IHN0YXRlOwotCQlpZiAodHJpZ2dlclswXSA9PSAnKycpCi0JCQluZXdfc3RhdGUudHJpZ2dlcnMgfD0gQklUKHRyaWdnZXJfYml0KTsKLQkJZWxzZSB7Ci0JCQluZXdfc3RhdGUudHJpZ2dlcnMgJj0gfkJJVCh0cmlnZ2VyX2JpdCk7Ci0JCQkvKiBOT1RFOiB0cmFja3N0aWNrIGJpdCAoMikgbXVzdCBiZSBkaXNhYmxlZCB3aGVuCi0JCQkgKiAgICAgICBkaXNhYmxpbmcgdG91Y2hwYWQgYml0ICgxKSwgb3RoZXJ3aXNlIHRvdWNocGFkCi0JCQkgKiAgICAgICBiaXQgKDEpIHdpbGwgbm90IGJlIGRpc2FibGVkICovCi0JCQlpZiAodHJpZ2dlcl9iaXQgPT0gMSkKLQkJCQluZXdfc3RhdGUudHJpZ2dlcnMgJj0gfkJJVCgyKTsKLQkJfQotCQlpZiAoKGtiZF9pbmZvLnRyaWdnZXJzICYgbmV3X3N0YXRlLnRyaWdnZXJzKSAhPQotCQkgICAgbmV3X3N0YXRlLnRyaWdnZXJzKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChuZXdfc3RhdGUudHJpZ2dlcnMgJiYgIXRyaWdnZXJzX2VuYWJsZWQpIHsKLQkJCWlmIChhbHNfZW5hYmxlZCkKLQkJCQluZXdfc3RhdGUubW9kZV9iaXQgPSBLQkRfTU9ERV9CSVRfVFJJR0dFUl9BTFM7Ci0JCQllbHNlIHsKLQkJCQluZXdfc3RhdGUubW9kZV9iaXQgPSBLQkRfTU9ERV9CSVRfVFJJR0dFUjsKLQkJCQlrYmRfc2V0X2xldmVsKCZuZXdfc3RhdGUsIGtiZF9wcmV2aW91c19sZXZlbCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAobmV3X3N0YXRlLnRyaWdnZXJzID09IDApIHsKLQkJCWlmIChhbHNfZW5hYmxlZCkKLQkJCQluZXdfc3RhdGUubW9kZV9iaXQgPSBLQkRfTU9ERV9CSVRfQUxTOwotCQkJZWxzZQotCQkJCWtiZF9zZXRfbGV2ZWwoJm5ld19zdGF0ZSwgMCk7Ci0JCX0KLQkJaWYgKCEoa2JkX2luZm8ubW9kZXMgJiBCSVQobmV3X3N0YXRlLm1vZGVfYml0KSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0ID0ga2JkX3NldF9zdGF0ZV9zYWZlKCZuZXdfc3RhdGUsICZzdGF0ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCQlpZiAobmV3X3N0YXRlLm1vZGVfYml0ICE9IEtCRF9NT0RFX0JJVF9PRkYpCi0JCQlrYmRfcHJldmlvdXNfbW9kZV9iaXQgPSBuZXdfc3RhdGUubW9kZV9iaXQ7Ci0JCXJldHVybiBjb3VudDsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHNzaXplX3Qga2JkX2xlZF90cmlnZ2Vyc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGtiZF9zdGF0ZSBzdGF0ZTsKLQlib29sIHRyaWdnZXJzX2VuYWJsZWQ7Ci0JaW50IGxldmVsLCBpLCByZXQ7Ci0JaW50IGxlbiA9IDA7Ci0KLQlyZXQgPSBrYmRfZ2V0X3N0YXRlKCZzdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWxlbiA9IDA7Ci0KLQlpZiAoa2JkX3RyaWdnZXJzX3N1cHBvcnRlZCkgewotCQl0cmlnZ2Vyc19lbmFibGVkID0ga2JkX2lzX3RyaWdnZXJfbW9kZV9iaXQoc3RhdGUubW9kZV9iaXQpOwotCQlsZXZlbCA9IGtiZF9nZXRfbGV2ZWwoJnN0YXRlKTsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoa2JkX2xlZF90cmlnZ2Vycyk7ICsraSkgewotCQkJaWYgKCEoa2JkX2luZm8udHJpZ2dlcnMgJiBCSVQoaSkpKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFrYmRfbGVkX3RyaWdnZXJzW2ldKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCh0cmlnZ2Vyc19lbmFibGVkIHx8IGxldmVsIDw9IDApICYmCi0JCQkgICAgKHN0YXRlLnRyaWdnZXJzICYgQklUKGkpKSkKLQkJCQlidWZbbGVuKytdID0gJysnOwotCQkJZWxzZQotCQkJCWJ1ZltsZW4rK10gPSAnLSc7Ci0JCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiJXMgIiwga2JkX2xlZF90cmlnZ2Vyc1tpXSk7Ci0JCX0KLQl9Ci0KLQlpZiAoa2JkX2Fsc19zdXBwb3J0ZWQpIHsKLQkJaWYgKGtiZF9pc19hbHNfbW9kZV9iaXQoc3RhdGUubW9kZV9iaXQpKQotCQkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIithbHMgIik7Ci0JCWVsc2UKLQkJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICItYWxzICIpOwotCX0KLQotCWlmIChsZW4pCi0JCWJ1ZltsZW4gLSAxXSA9ICdcbic7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoc3RhcnRfdHJpZ2dlcnMsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICBrYmRfbGVkX3RyaWdnZXJzX3Nob3csIGtiZF9sZWRfdHJpZ2dlcnNfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdCBrYmRfbGVkX2Fsc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qga2JkX3N0YXRlIHN0YXRlOwotCXN0cnVjdCBrYmRfc3RhdGUgbmV3X3N0YXRlOwotCXU4IHNldHRpbmc7Ci0JaW50IHJldDsKLQotCXJldCA9IGtzdHJ0b3U4KGJ1ZiwgMTAsICZzZXR0aW5nKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0ga2JkX2dldF9zdGF0ZSgmc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQluZXdfc3RhdGUgPSBzdGF0ZTsKLQluZXdfc3RhdGUuYWxzX3NldHRpbmcgPSBzZXR0aW5nOwotCi0JcmV0ID0ga2JkX3NldF9zdGF0ZV9zYWZlKCZuZXdfc3RhdGUsICZzdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qga2JkX2xlZF9hbHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qga2JkX3N0YXRlIHN0YXRlOwotCWludCByZXQ7Ci0KLQlyZXQgPSBrYmRfZ2V0X3N0YXRlKCZzdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzdGF0ZS5hbHNfc2V0dGluZyk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihhbHNfc2V0dGluZywgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIGtiZF9sZWRfYWxzX3Nob3csIGtiZF9sZWRfYWxzX3N0b3JlKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmtiZF9sZWRfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfc3RvcF90aW1lb3V0LmF0dHIsCi0JJmRldl9hdHRyX3N0YXJ0X3RyaWdnZXJzLmF0dHIsCi0JJmRldl9hdHRyX2Fsc19zZXR0aW5nLmF0dHIsCi0JTlVMTCwKLX07Ci1BVFRSSUJVVEVfR1JPVVBTKGtiZF9sZWQpOwotCi1zdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBrYmRfbGVkX2xldmVsX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKLXsKLQlpbnQgcmV0OwotCXUxNiBudW07Ci0Jc3RydWN0IGtiZF9zdGF0ZSBzdGF0ZTsKLQotCWlmIChrYmRfZ2V0X21heF9sZXZlbCgpKSB7Ci0JCXJldCA9IGtiZF9nZXRfc3RhdGUoJnN0YXRlKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiAwOwotCQlyZXQgPSBrYmRfZ2V0X2xldmVsKCZzdGF0ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIDA7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGtiZF9nZXRfdmFsaWRfdG9rZW5fY291bnRzKCkpIHsKLQkJcmV0ID0ga2JkX2dldF9maXJzdF9hY3RpdmVfdG9rZW5fYml0KCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIDA7Ci0JCWZvciAobnVtID0ga2JkX3Rva2VuX2JpdHM7IG51bSAhPSAwICYmIHJldCA+IDA7IC0tcmV0KQotCQkJbnVtICY9IG51bSAtIDE7IC8qIGNsZWFyIHRoZSBmaXJzdCBiaXQgc2V0ICovCi0JCWlmIChudW0gPT0gMCkKLQkJCXJldHVybiAwOwotCQlyZXR1cm4gZmZzKG51bSkgLSAxOwotCX0KLQotCXByX3dhcm4oIktleWJvYXJkIGJyaWdodG5lc3MgbGV2ZWwgY29udHJvbCBub3Qgc3VwcG9ydGVkXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQga2JkX2xlZF9sZXZlbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCi0JCQkgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQotewotCXN0cnVjdCBrYmRfc3RhdGUgc3RhdGU7Ci0Jc3RydWN0IGtiZF9zdGF0ZSBuZXdfc3RhdGU7Ci0JdTE2IG51bTsKLQotCWlmIChrYmRfZ2V0X21heF9sZXZlbCgpKSB7Ci0JCWlmIChrYmRfZ2V0X3N0YXRlKCZzdGF0ZSkpCi0JCQlyZXR1cm47Ci0JCW5ld19zdGF0ZSA9IHN0YXRlOwotCQlpZiAoa2JkX3NldF9sZXZlbCgmbmV3X3N0YXRlLCB2YWx1ZSkpCi0JCQlyZXR1cm47Ci0JCWtiZF9zZXRfc3RhdGVfc2FmZSgmbmV3X3N0YXRlLCAmc3RhdGUpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGtiZF9nZXRfdmFsaWRfdG9rZW5fY291bnRzKCkpIHsKLQkJZm9yIChudW0gPSBrYmRfdG9rZW5fYml0czsgbnVtICE9IDAgJiYgdmFsdWUgPiAwOyAtLXZhbHVlKQotCQkJbnVtICY9IG51bSAtIDE7IC8qIGNsZWFyIHRoZSBmaXJzdCBiaXQgc2V0ICovCi0JCWlmIChudW0gPT0gMCkKLQkJCXJldHVybjsKLQkJa2JkX3NldF90b2tlbl9iaXQoZmZzKG51bSkgLSAxKTsKLQkJcmV0dXJuOwotCX0KLQotCXByX3dhcm4oIktleWJvYXJkIGJyaWdodG5lc3MgbGV2ZWwgY29udHJvbCBub3Qgc3VwcG9ydGVkXG4iKTsKLX0KLQotc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYga2JkX2xlZCA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiZGVsbDo6a2JkX2JhY2tsaWdodCIsCi0JLmJyaWdodG5lc3Nfc2V0ID0ga2JkX2xlZF9sZXZlbF9zZXQsCi0JLmJyaWdodG5lc3NfZ2V0ID0ga2JkX2xlZF9sZXZlbF9nZXQsCi0JLmdyb3VwcyAgICAgICAgID0ga2JkX2xlZF9ncm91cHMsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBrYmRfbGVkX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWtiZF9pbml0KCk7Ci0JaWYgKCFrYmRfbGVkX3ByZXNlbnQpCi0JCXJldHVybiAtRU5PREVWOwotCWtiZF9sZWQubWF4X2JyaWdodG5lc3MgPSBrYmRfZ2V0X21heF9sZXZlbCgpOwotCWlmICgha2JkX2xlZC5tYXhfYnJpZ2h0bmVzcykgewotCQlrYmRfbGVkLm1heF9icmlnaHRuZXNzID0ga2JkX2dldF92YWxpZF90b2tlbl9jb3VudHMoKTsKLQkJaWYgKGtiZF9sZWQubWF4X2JyaWdodG5lc3MpCi0JCQlrYmRfbGVkLm1heF9icmlnaHRuZXNzLS07Ci0JfQotCXJldHVybiBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoZGV2LCAma2JkX2xlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJyaWdodG5lc3Nfc2V0X2V4aXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCi0JCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKLXsKLQkvKiBEb24ndCBjaGFuZ2UgYmFja2xpZ2h0IGxldmVsIG9uIGV4aXQgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIGtiZF9sZWRfZXhpdCh2b2lkKQotewotCWlmICgha2JkX2xlZF9wcmVzZW50KQotCQlyZXR1cm47Ci0Ja2JkX2xlZC5icmlnaHRuZXNzX3NldCA9IGJyaWdodG5lc3Nfc2V0X2V4aXQ7Ci0JbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmtiZF9sZWQpOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBkZWxsX2luaXQodm9pZCkKIHsKIAlpbnQgbWF4X2ludGVuc2l0eSA9IDA7CkBAIC0xODc5LDggKzg0MSw2IEBACiAJaWYgKHF1aXJrcyAmJiBxdWlya3MtPnRvdWNocGFkX2xlZCkKIAkJdG91Y2hwYWRfbGVkX2luaXQoJnBsYXRmb3JtX2RldmljZS0+ZGV2KTsKIAotCWtiZF9sZWRfaW5pdCgmcGxhdGZvcm1fZGV2aWNlLT5kZXYpOwotCiAJZGVsbF9sYXB0b3BfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJkZWxsX2xhcHRvcCIsIE5VTEwpOwogCWlmIChkZWxsX2xhcHRvcF9kaXIgIT0gTlVMTCkKIAkJZGVidWdmc19jcmVhdGVfZmlsZSgicmZraWxsIiwgMDQ0NCwgZGVsbF9sYXB0b3BfZGlyLCBOVUxMLApAQCAtMTk0OCw3ICs5MDgsNiBAQAogCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkZWxsX2xhcHRvcF9kaXIpOwogCWlmIChxdWlya3MgJiYgcXVpcmtzLT50b3VjaHBhZF9sZWQpCiAJCXRvdWNocGFkX2xlZF9leGl0KCk7Ci0Ja2JkX2xlZF9leGl0KCk7CiAJaTgwNDJfcmVtb3ZlX2ZpbHRlcihkZWxsX2xhcHRvcF9pODA0Ml9maWx0ZXIpOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGVsbF9yZmtpbGxfd29yayk7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGRlbGxfYmFja2xpZ2h0X2RldmljZSk7CkBAIC0xOTY1LDcgKzkyNCw1IEBACiBtb2R1bGVfZXhpdChkZWxsX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJNYXR0aGV3IEdhcnJldHQgPG1qZ0ByZWRoYXQuY29tPiIpOwotTU9EVUxFX0FVVEhPUigiR2FicmllbGUgTWF6em90dGEgPGdhYnJpZWxlLm16dEBnbWFpbC5jb20+Iik7Ci1NT0RVTEVfQVVUSE9SKCJQYWxpIFJvaMOhciA8cGFsaS5yb2hhckBnbWFpbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRlbGwgbGFwdG9wIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlcmNhcC9pbnRlbF9yYXBsLmMgYi9kcml2ZXJzL3Bvd2VyY2FwL2ludGVsX3JhcGwuYwppbmRleCBjNzE0NDNjLi45N2I1ZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyY2FwL2ludGVsX3JhcGwuYworKysgYi9kcml2ZXJzL3Bvd2VyY2FwL2ludGVsX3JhcGwuYwpAQCAtMTA0MSw2ICsxMDQxLDcgQEAKIAlSQVBMX0NQVSgweDQ1LCByYXBsX2RlZmF1bHRzX2NvcmUpLC8qIEhhc3dlbGwgVUxUICovCiAJUkFQTF9DUFUoMHg0QywgcmFwbF9kZWZhdWx0c19hdG9tKSwvKiBCcmFzd2VsbCAqLwogCVJBUExfQ1BVKDB4NEEsIHJhcGxfZGVmYXVsdHNfYXRvbSksLyogVGFuZ2llciAqLworCVJBUExfQ1BVKDB4NTYsIHJhcGxfZGVmYXVsdHNfY29yZSksLyogRnV0dXJlIFhlb24gKi8KIAlSQVBMX0NQVSgweDVBLCByYXBsX2RlZmF1bHRzX2F0b20pLC8qIEFubmlkYWxlICovCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKaW5kZXggZTIyNTcxMS4uOWM0OGZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9nZXRfb3B0aW9uYWwpOwogCi0vKiBMb2NrcyBoZWxkIGJ5IHJlZ3VsYXRvcl9wdXQoKSAqLworLyogcmVndWxhdG9yX2xpc3RfbXV0ZXggbG9jayBoZWxkIGJ5IHJlZ3VsYXRvcl9wdXQoKSAqLwogc3RhdGljIHZvaWQgX3JlZ3VsYXRvcl9wdXQoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwpAQCAtMTUwMywxMiArMTUwMywxNCBAQAogCS8qIHJlbW92ZSBhbnkgc3lzZnMgZW50cmllcyAqLwogCWlmIChyZWd1bGF0b3ItPmRldikKIAkJc3lzZnNfcmVtb3ZlX2xpbmsoJnJkZXYtPmRldi5rb2JqLCByZWd1bGF0b3ItPnN1cHBseV9uYW1lKTsKKwltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CiAJa2ZyZWUocmVndWxhdG9yLT5zdXBwbHlfbmFtZSk7CiAJbGlzdF9kZWwoJnJlZ3VsYXRvci0+bGlzdCk7CiAJa2ZyZWUocmVndWxhdG9yKTsKIAogCXJkZXYtPm9wZW5fY291bnQtLTsKIAlyZGV2LT5leGNsdXNpdmUgPSAwOworCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwogCiAJbW9kdWxlX3B1dChyZGV2LT5vd25lcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wczExLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wczExLmMKaW5kZXggYzE0NDRjMy4uZmY4MjgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvczJtcHMxMS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3MybXBzMTEuYwpAQCAtNDA1LDYgKzQwNSw0MCBAQAogCS5lbmFibGVfbWFzawk9IFMyTVBTMTRfRU5BQkxFX01BU0sJCQlcCiB9CiAKKyNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrNyhudW0sIG1pbiwgc3RlcCwgbWluX3NlbCkgewlcCisJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJXAorCS5pZAkJPSBTMk1QUzEzX0JVQ0sjI251bSwJCQlcCisJLm9wcwkJPSAmczJtcHMxNF9yZWdfb3BzLAkJCVwKKwkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAkJCQlcCisJLm1pbl91VgkJPSBtaW4sCQkJCQlcCisJLnVWX3N0ZXAJPSBzdGVwLAkJCQkJXAorCS5saW5lYXJfbWluX3NlbAk9IG1pbl9zZWwsCQkJCVwKKwkubl92b2x0YWdlcwk9IFMyTVBTMTRfQlVDS19OX1ZPTFRBR0VTLAkJXAorCS5yYW1wX2RlbGF5CT0gUzJNUFMxM19CVUNLX1JBTVBfREVMQVksCQlcCisJLnZzZWxfcmVnCT0gUzJNUFMxM19SRUdfQjFPVVQgKyAobnVtKSAqIDIgLSAxLAlcCisJLnZzZWxfbWFzawk9IFMyTVBTMTRfQlVDS19WU0VMX01BU0ssCQlcCisJLmVuYWJsZV9yZWcJPSBTMk1QUzEzX1JFR19CMUNUUkwgKyAobnVtIC0gMSkgKiAyLAlcCisJLmVuYWJsZV9tYXNrCT0gUzJNUFMxNF9FTkFCTEVfTUFTSwkJCVwKK30KKworI2RlZmluZSByZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2s4XzEwKG51bSwgbWluLCBzdGVwLCBtaW5fc2VsKSB7CVwKKwkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQlcCisJLmlkCQk9IFMyTVBTMTNfQlVDSyMjbnVtLAkJCVwKKwkub3BzCQk9ICZzMm1wczE0X3JlZ19vcHMsCQkJXAorCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCQkJCVwKKwkubWluX3VWCQk9IG1pbiwJCQkJCVwKKwkudVZfc3RlcAk9IHN0ZXAsCQkJCQlcCisJLmxpbmVhcl9taW5fc2VsCT0gbWluX3NlbCwJCQkJXAorCS5uX3ZvbHRhZ2VzCT0gUzJNUFMxNF9CVUNLX05fVk9MVEFHRVMsCQlcCisJLnJhbXBfZGVsYXkJPSBTMk1QUzEzX0JVQ0tfUkFNUF9ERUxBWSwJCVwKKwkudnNlbF9yZWcJPSBTMk1QUzEzX1JFR19CMU9VVCArIChudW0pICogMiAtIDEsCVwKKwkudnNlbF9tYXNrCT0gUzJNUFMxNF9CVUNLX1ZTRUxfTUFTSywJCVwKKwkuZW5hYmxlX3JlZwk9IFMyTVBTMTNfUkVHX0IxQ1RSTCArIChudW0pICogMiAtIDEsCVwKKwkuZW5hYmxlX21hc2sJPSBTMk1QUzE0X0VOQUJMRV9NQVNLCQkJXAorfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHMybXBzMTNfcmVndWxhdG9yc1tdID0gewogCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDEsICBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKIAlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyLCAgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCkBAIC00NTIsMTAgKzQ4NiwxMCBAQAogCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg0LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCiAJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDUsICBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKIAlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soNiwgIE1JTl81MDBfTVYsICBTVEVQXzZfMjVfTVYsIDB4MTApLAotCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg3LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCi0JcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDgsICBNSU5fMTAwMF9NViwgU1RFUF8xMl81X01WLCAweDIwKSwKLQlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soOSwgIE1JTl8xMDAwX01WLCBTVEVQXzEyXzVfTVYsIDB4MjApLAotCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjaygxMCwgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrNyg3LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrOF8xMCg4LCAgTUlOXzEwMDBfTVYsIFNURVBfMTJfNV9NViwgMHgyMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrOF8xMCg5LCAgTUlOXzEwMDBfTVYsIFNURVBfMTJfNV9NViwgMHgyMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrOF8xMCgxMCwgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCiB9OwogCiBzdGF0aWMgaW50IHMybXBzMTRfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKQEAgLTU3MCw3ICs2MDQsNyBAQAogCS5lbmFibGVfbWFzawk9IFMyTVBTMTRfRU5BQkxFX01BU0sJCVwKIH0KIAotI2RlZmluZSByZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2sobnVtLCBtaW4sIHN0ZXApIHsJCVwKKyNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9idWNrKG51bSwgbWluLCBzdGVwLCBtaW5fc2VsKSB7CVwKIAkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQlcCiAJLmlkCQk9IFMyTVBTMTRfQlVDSyMjbnVtLAkJCVwKIAkub3BzCQk9ICZzMm1wczE0X3JlZ19vcHMsCQkJXApAQCAtNTc5LDcgKzYxMyw3IEBACiAJLm1pbl91VgkJPSBtaW4sCQkJCQlcCiAJLnVWX3N0ZXAJPSBzdGVwLAkJCQkJXAogCS5uX3ZvbHRhZ2VzCT0gUzJNUFMxNF9CVUNLX05fVk9MVEFHRVMsCQlcCi0JLmxpbmVhcl9taW5fc2VsID0gUzJNUFMxNF9CVUNLMTIzNV9TVEFSVF9TRUwsCQlcCisJLmxpbmVhcl9taW5fc2VsID0gbWluX3NlbCwJCQkJXAogCS5yYW1wX2RlbGF5CT0gUzJNUFMxNF9CVUNLX1JBTVBfREVMQVksCQlcCiAJLnZzZWxfcmVnCT0gUzJNUFMxNF9SRUdfQjFDVFJMMiArIChudW0gLSAxKSAqIDIsCVwKIAkudnNlbF9tYXNrCT0gUzJNUFMxNF9CVUNLX1ZTRUxfTUFTSywJCVwKQEAgLTYxMywxMSArNjQ3LDE2IEBACiAJcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9sZG8oMjMsIE1JTl84MDBfTVYsIFNURVBfMjVfTVYpLAogCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTRfbGRvKDI0LCBNSU5fMTgwMF9NViwgU1RFUF8yNV9NViksCiAJcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9sZG8oMjUsIE1JTl8xODAwX01WLCBTVEVQXzI1X01WKSwKLQlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soMSwgTUlOXzYwMF9NViwgU1RFUF82XzI1X01WKSwKLQlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soMiwgTUlOXzYwMF9NViwgU1RFUF82XzI1X01WKSwKLQlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soMywgTUlOXzYwMF9NViwgU1RFUF82XzI1X01WKSwKLQlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soNCwgTUlOXzE0MDBfTVYsIFNURVBfMTJfNV9NViksCi0JcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9idWNrKDUsIE1JTl82MDBfTVYsIFNURVBfNl8yNV9NViksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9idWNrKDEsIE1JTl82MDBfTVYsIFNURVBfNl8yNV9NViwKKwkJCQkgICAgUzJNUFMxNF9CVUNLMTIzNV9TVEFSVF9TRUwpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTRfYnVjaygyLCBNSU5fNjAwX01WLCBTVEVQXzZfMjVfTVYsCisJCQkJICAgIFMyTVBTMTRfQlVDSzEyMzVfU1RBUlRfU0VMKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soMywgTUlOXzYwMF9NViwgU1RFUF82XzI1X01WLAorCQkJCSAgICBTMk1QUzE0X0JVQ0sxMjM1X1NUQVJUX1NFTCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxNF9idWNrKDQsIE1JTl8xNDAwX01WLCBTVEVQXzEyXzVfTVYsCisJCQkJICAgIFMyTVBTMTRfQlVDSzRfU1RBUlRfU0VMKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczE0X2J1Y2soNSwgTUlOXzYwMF9NViwgU1RFUF82XzI1X01WLAorCQkJCSAgICBTMk1QUzE0X0JVQ0sxMjM1X1NUQVJUX1NFTCksCiB9OwogCiBzdGF0aWMgaW50IHMybXBzMTRfcG1pY19lbmFibGVfZXh0X2NvbnRyb2woc3RydWN0IHMybXBzMTFfaW5mbyAqczJtcHMxMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVzZXQvcmVzZXQtc3VueGkuYyBiL2RyaXZlcnMvcmVzZXQvcmVzZXQtc3VueGkuYwppbmRleCBlZWJjNTJjLi4zZDk1Yzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Jlc2V0L3Jlc2V0LXN1bnhpLmMKKysrIGIvZHJpdmVycy9yZXNldC9yZXNldC1zdW54aS5jCkBAIC0xMDIsNiArMTAyLDggQEAKIAkJZ290byBlcnJfYWxsb2M7CiAJfQogCisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPmxvY2spOworCiAJZGF0YS0+cmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKIAlkYXRhLT5yY2Rldi5ucl9yZXNldHMgPSBzaXplICogMzI7CiAJZGF0YS0+cmNkZXYub3BzID0gJnN1bnhpX3Jlc2V0X29wczsKQEAgLTE1Nyw2ICsxNTksOCBAQAogCWlmIChJU19FUlIoZGF0YS0+bWVtYmFzZSkpCiAJCXJldHVybiBQVFJfRVJSKGRhdGEtPm1lbWJhc2UpOwogCisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPmxvY2spOworCiAJZGF0YS0+cmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKIAlkYXRhLT5yY2Rldi5ucl9yZXNldHMgPSByZXNvdXJjZV9zaXplKHJlcykgKiAzMjsKIAlkYXRhLT5yY2Rldi5vcHMgPSAmc3VueGlfcmVzZXRfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXM1bS5jIGIvZHJpdmVycy9ydGMvcnRjLXM1bS5jCmluZGV4IGI1ZTdjNDYuLjg5YWMxZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zNW0uYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtczVtLmMKQEAgLTgzMiw2ICs4MzIsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgczVtX3J0Y19pZFtdID0gewogCXsgInM1bS1ydGMiLAkJUzVNODc2N1ggfSwKIAl7ICJzMm1wczE0LXJ0YyIsCVMyTVBTMTRYIH0sCisJeyB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczVtX3J0Y19kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwppbmRleCA5MWU5N2VjLi40ZDQxYmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKQEAgLTExNjMsOSArMTE2MywxMyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBhcF90ZXN0X2NvbmZpZ19kb21haW4odW5zaWduZWQgaW50IGRvbWFpbikKIHsKLQlpZiAoIWFwX2NvbmZpZ3VyYXRpb24pCi0JCXJldHVybiAxOwotCXJldHVybiBhcF90ZXN0X2NvbmZpZyhhcF9jb25maWd1cmF0aW9uLT5hcW0sIGRvbWFpbik7CisJaWYgKCFhcF9jb25maWd1cmF0aW9uKQkgIC8qIFFDSSBub3Qgc3VwcG9ydGVkICovCisJCWlmIChkb21haW4gPCAxNikKKwkJCXJldHVybiAxOyAvKiB0aGVuIGRvbWFpbnMgMC4uLjE1IGFyZSBjb25maWd1cmVkICovCisJCWVsc2UKKwkJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGFwX3Rlc3RfY29uZmlnKGFwX2NvbmZpZ3VyYXRpb24tPmFxbSwgZG9tYWluKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggZjQwN2UzNy4uNjQyYzc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtMTc4NCw2ICsxNzg0LDggQEAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiaWR4YW5zd3IiKTsKIAljYXJkID0gQ0FSRF9GUk9NX0NERVYoY2hhbm5lbC0+Y2N3ZGV2KTsKIAlpb2IgPSBxZXRoX2dldF9idWZmZXIoY2hhbm5lbCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWlvYi0+Y2FsbGJhY2sgPSBpZHhfcmVwbHlfY2I7CiAJbWVtY3B5KCZjaGFubmVsLT5jY3csIFJFQURfQ0NXLCBzaXplb2Yoc3RydWN0IGNjdzEpKTsKIAljaGFubmVsLT5jY3cuY291bnQgPSBRRVRIX0JVRlNJWkU7CkBAIC0xODM0LDYgKzE4MzYsOCBAQAogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJpZHhhY3RjaCIpOwogCiAJaW9iID0gcWV0aF9nZXRfYnVmZmVyKGNoYW5uZWwpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAlpb2ItPmNhbGxiYWNrID0gaWR4X3JlcGx5X2NiOwogCW1lbWNweSgmY2hhbm5lbC0+Y2N3LCBXUklURV9DQ1csIHNpemVvZihzdHJ1Y3QgY2N3MSkpOwogCWNoYW5uZWwtPmNjdy5jb3VudCA9IElEWF9BQ1RJVkFURV9TSVpFOwpAQCAtMjAyMSwxMCArMjAyNSwzNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9wcmVwYXJlX2NvbnRyb2xfZGF0YSk7CiAKKy8qKgorICogcWV0aF9zZW5kX2NvbnRyb2xfZGF0YSgpIC0Jc2VuZCBjb250cm9sIGNvbW1hbmQgdG8gdGhlIGNhcmQKKyAqIEBjYXJkOgkJCXFldGhfY2FyZCBzdHJ1Y3R1cmUgcG9pbnRlcgorICogQGxlbjoJCQlzaXplIG9mIHRoZSBjb21tYW5kIGJ1ZmZlcgorICogQGlvYjoJCQlxZXRoX2NtZF9idWZmZXIgcG9pbnRlcgorICogQHJlcGx5X2NiOgkJCWNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIKKyAqIEBjYl9jYXJkOgkJCXBvaW50ZXIgdG8gdGhlIHFldGhfY2FyZCBzdHJ1Y3R1cmUKKyAqIEBjYl9yZXBseToJCQlwb2ludGVyIHRvIHRoZSBxZXRoX3JlcGx5IHN0cnVjdHVyZQorICogQGNiX2NtZDoJCQlwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBpb2IgZm9yIG5vbi1JUEEKKyAqCQkJCWNvbW1hbmRzLCBvciB0byB0aGUgcWV0aF9pcGFfY21kIHN0cnVjdHVyZQorICoJCQkJZm9yIHRoZSBJUEEgY29tbWFuZHMuCisgKiBAcmVwbHlfcGFyYW06CQlwcml2YXRlIHBvaW50ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaworICoKKyAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBgcmV0dXJuX2NvZGUnIGZpZWxkIG9mIHRoZSByZXNwb25zZQorICogYmxvY2sgcmV0dXJuZWQgZnJvbSB0aGUgaGFyZHdhcmUsIG9yIG90aGVyIGVycm9yIGluZGljYXRpb24uCisgKiBWYWx1ZSBvZiB6ZXJvIGluZGljYXRlcyBzdWNjZXNzZnVsIGV4ZWN1dGlvbiBvZiB0aGUgY29tbWFuZC4KKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBnZXRzIGNhbGxlZCBvbmUgb3IgbW9yZSB0aW1lcywgd2l0aCBjYl9jbWQKKyAqIHBvaW50aW5nIHRvIHRoZSByZXNwb25zZSByZXR1cm5lZCBieSB0aGUgaGFyZHdhcmUuIENhbGxiYWNrCisgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBub24temVybyBpZiBtb3JlIHJlcGx5IGJsb2NrcyBhcmUgZXhwZWN0ZWQsCisgKiBhbmQgemVybyBpZiB0aGUgbGFzdCBvciBvbmx5IHJlcGx5IGJsb2NrIGlzIHJlY2VpdmVkLiBDYWxsYmFjaworICogZnVuY3Rpb24gY2FuIGdldCB0aGUgdmFsdWUgb2YgdGhlIHJlcGx5X3BhcmFtIHBvaW50ZXIgZnJvbSB0aGUKKyAqIGZpZWxkICdwYXJhbScgb2YgdGhlIHN0cnVjdHVyZSBxZXRoX3JlcGx5LgorICovCisKIGludCBxZXRoX3NlbmRfY29udHJvbF9kYXRhKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBsZW4sCiAJCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwKLQkJaW50ICgqcmVwbHlfY2IpKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcmVwbHkgKiwKLQkJCXVuc2lnbmVkIGxvbmcpLAorCQlpbnQgKCpyZXBseV9jYikoc3RydWN0IHFldGhfY2FyZCAqY2JfY2FyZCwKKwkJCQlzdHJ1Y3QgcWV0aF9yZXBseSAqY2JfcmVwbHksCisJCQkJdW5zaWduZWQgbG9uZyBjYl9jbWQpLAogCQl2b2lkICpyZXBseV9wYXJhbSkKIHsKIAlpbnQgcmM7CkBAIC0yOTE0LDkgKzI5NDQsMTYgQEAKIAlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCi0JaW9iID0gcWV0aF93YWl0X2Zvcl9idWZmZXIoJmNhcmQtPndyaXRlKTsKLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7Ci0JcWV0aF9maWxsX2lwYWNtZF9oZWFkZXIoY2FyZCwgY21kLCBpcGFjbWQsIHByb3QpOworCWlvYiA9IHFldGhfZ2V0X2J1ZmZlcigmY2FyZC0+d3JpdGUpOworCWlmIChpb2IpIHsKKwkJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOworCQlxZXRoX2ZpbGxfaXBhY21kX2hlYWRlcihjYXJkLCBjbWQsIGlwYWNtZCwgcHJvdCk7CisJfSBlbHNlIHsKKwkJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwKKwkJCSAiVGhlIHFldGggZHJpdmVyIHJhbiBvdXQgb2YgY2hhbm5lbCBjb21tYW5kIGJ1ZmZlcnNcbiIpOworCQlRRVRIX0RCRl9NRVNTQUdFKDEsICIlcyBUaGUgcWV0aCBkcml2ZXIgcmFuIG91dCBvZiBjaGFubmVsIGNvbW1hbmQgYnVmZmVycyIsCisJCQkJIGRldl9uYW1lKCZjYXJkLT5nZGV2LT5kZXYpKTsKKwl9CiAKIAlyZXR1cm4gaW9iOwogfQpAQCAtMjkzMiw2ICsyOTY5LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3ByZXBhcmVfaXBhX2NtZCk7CiAKKy8qKgorICogcWV0aF9zZW5kX2lwYV9jbWQoKSAtIHNlbmQgYW4gSVBBIGNvbW1hbmQKKyAqCisgKiBTZWUgcWV0aF9zZW5kX2NvbnRyb2xfZGF0YSgpIGZvciBleHBsYW5hdGlvbiBvZiB0aGUgYXJndW1lbnRzLgorICovCisKIGludCBxZXRoX3NlbmRfaXBhX2NtZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IsCiAJCWludCAoKnJlcGx5X2NiKShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3JlcGx5KiwKIAkJCXVuc2lnbmVkIGxvbmcpLApAQCAtMjk2OCw2ICszMDExLDggQEAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic3RydGxhbiIpOwogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NUQVJUTEFOLCAwKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIE5VTEwsIE5VTEwpOwogCXJldHVybiByYzsKIH0KQEAgLTMwMTMsMTEgKzMwNTgsMTMgQEAKIAogCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9TRVRBREFQVEVSUEFSTVMsCiAJCQkJICAgICBRRVRIX1BST1RfSVBWNCk7Ci0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwotCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLmNtZGxlbmd0aCA9IGNtZGxlbjsKLQljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci5jb21tYW5kX2NvZGUgPSBjb21tYW5kOwotCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnVzZWRfdG90YWwgPSAxOwotCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnNlcV9ubyA9IDE7CisJaWYgKGlvYikgeworCQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CisJCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLmNtZGxlbmd0aCA9IGNtZGxlbjsKKwkJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuY29tbWFuZF9jb2RlID0gY29tbWFuZDsKKwkJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIudXNlZF90b3RhbCA9IDE7CisJCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnNlcV9ubyA9IDE7CisJfQogCiAJcmV0dXJuIGlvYjsKIH0KQEAgLTMwMzAsNiArMzA3Nyw4IEBACiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgInF1ZXJ5YWRwIik7CiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9RVUVSWV9DT01NQU5EU19TVVBQT1JURUQsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtcykpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXNfY2IsIE5VTEwpOwogCXJldHVybiByYzsKIH0KQEAgLTMwODAsNiArMzEyOSw4IEBACiAKIAlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgInFpcGFzc2klaSIsIHByb3QpOwogCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9RSVBBU1NJU1QsIHByb3QpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9xdWVyeV9pcGFzc2lzdHNfY2IsIE5VTEwpOwogCXJldHVybiByYzsKIH0KQEAgLTMxMTksNiArMzE3MCw4IEBACiAJCXJldHVybiAtRU5PTUVESVVNOwogCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfUVVFUllfU1dJVENIX0FUVFJJQlVURVMsCiAJCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtc19oZHIpKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwKIAkJCQlxZXRoX3F1ZXJ5X3N3aXRjaF9hdHRyaWJ1dGVzX2NiLCBzd19pbmZvKTsKIH0KQEAgLTMxNDYsNiArMzE5OSw4IEBACiAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAicWRpYWdhc3MiKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUX0RJQUdfQVNTLCAwKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5kaWFnYXNzLnN1YmNtZF9sZW4gPSAxNjsKIAljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWQgPSBRRVRIX0RJQUdTX0NNRF9RVUVSWTsKQEAgLTMxOTcsNiArMzI1Miw4IEBACiAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZGlhZ3RyYXAiKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUX0RJQUdfQVNTLCAwKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5kaWFnYXNzLnN1YmNtZF9sZW4gPSA4MDsKIAljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWQgPSBRRVRIX0RJQUdTX0NNRF9UUkFQOwpAQCAtNDE2Miw2ICs0MjE5LDggQEAKIAogCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERSwKIAkJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMpKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YSArIElQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5tb2RlID0gbW9kZTsKIAlxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfc2V0YWRwX3Byb21pc2NfbW9kZV9jYiwgTlVMTCk7CkBAIC00MjMyLDYgKzQyOTEsOCBAQAogCiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUywKIAkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zKSk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuY2hhbmdlX2FkZHIuY21kID0gQ0hBTkdFX0FERFJfUkVBRF9NQUM7CiAJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLmNoYW5nZV9hZGRyLmFkZHJfc2l6ZSA9IE9TQV9BRERSX0xFTjsKQEAgLTQzNDUsNiArNDQwNiw4IEBACiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfQUNDRVNTX0NPTlRST0wsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtc19oZHIpICsKIAkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfc2V0X2FjY2Vzc19jdHJsKSk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAlhY2Nlc3NfY3RybF9yZXEgPSAmY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLnNldF9hY2Nlc3NfY3RybDsKIAlhY2Nlc3NfY3RybF9yZXEtPnN1YmNtZF9jb2RlID0gaXNvbGF0aW9uOwpAQCAtNDU4OCw2ICs0NjUxLDEwIEBACiAKIAlpb2IgPSBxZXRoX2dldF9hZGFwdGVyX2NtZChjYXJkLCBJUEFfU0VUQURQX1NFVF9TTk1QX0NPTlRST0wsCiAJCQkJICAgUUVUSF9TTk1QX1NFVEFEUF9DTURMRU5HVEggKyByZXFfbGVuKTsKKwlpZiAoIWlvYikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJbWVtY3B5KCZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuc25tcCwgJnVyZXEtPmNtZCwgcmVxX2xlbik7CiAJcmMgPSBxZXRoX3NlbmRfaXBhX3NubXBfY21kKGNhcmQsIGlvYiwgUUVUSF9TRVRBRFBfQkFTRV9MRU4gKyByZXFfbGVuLApAQCAtNDU5OSw3ICs0NjY2LDcgQEAKIAkJaWYgKGNvcHlfdG9fdXNlcih1ZGF0YSwgcWluZm8udWRhdGEsIHFpbmZvLnVkYXRhX2xlbikpCiAJCQlyYyA9IC1FRkFVTFQ7CiAJfQotCitvdXQ6CiAJa2ZyZWUodXJlcSk7CiAJa2ZyZWUocWluZm8udWRhdGEpOwogCXJldHVybiByYzsKQEAgLTQ2NzAsNiArNDczNywxMCBAQAogCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfUVVFUllfT0FULAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXNfaGRyKSArCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBxZXRoX3F1ZXJ5X29hdCkpOworCWlmICghaW9iKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCW9hdF9yZXEgPSAmY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLnF1ZXJ5X29hdDsKIAlvYXRfcmVxLT5zdWJjbWRfY29kZSA9IG9hdF9kYXRhLmNvbW1hbmQ7CkBAIC00NzM1LDYgKzQ4MDYsOCBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9RVUVSWV9DQVJEX0lORk8sCiAJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXNfaGRyKSk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfcXVlcnlfY2FyZF9pbmZvX2NiLAogCQkJCQkodm9pZCAqKWNhcnJpZXJfaW5mbyk7CiB9CkBAIC01MDYwLDExICs1MTMzLDIzIEBACiAJY2FyZC0+b3B0aW9ucy5hZHAuc3VwcG9ydGVkX2Z1bmNzID0gMDsKIAljYXJkLT5vcHRpb25zLnNicC5zdXBwb3J0ZWRfZnVuY3MgPSAwOwogCWNhcmQtPmluZm8uZGlhZ2Fzc19zdXBwb3J0ID0gMDsKLQlxZXRoX3F1ZXJ5X2lwYXNzaXN0cyhjYXJkLCBRRVRIX1BST1RfSVBWNCk7Ci0JaWYgKHFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBREFQVEVSUEFSTVMpKQotCQlxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyhjYXJkKTsKLQlpZiAocWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX0RJQUdfQVNTSVNUKSkKLQkJcWV0aF9xdWVyeV9zZXRkaWFnYXNzKGNhcmQpOworCXJjID0gcWV0aF9xdWVyeV9pcGFzc2lzdHMoY2FyZCwgUUVUSF9QUk9UX0lQVjQpOworCWlmIChyYyA9PSAtRU5PTUVNKQorCQlnb3RvIG91dDsKKwlpZiAocWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEQVBURVJQQVJNUykpIHsKKwkJcmMgPSBxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyhjYXJkKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI2ZXJyJWQiLCByYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlpZiAocWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX0RJQUdfQVNTSVNUKSkgeworCQlyYyA9IHFldGhfcXVlcnlfc2V0ZGlhZ2FzcyhjYXJkKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI3ZXJyJWQiLCByYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIG91dDoKIAlkZXZfd2FybigmY2FyZC0+Z2Rldi0+ZGV2LCAiVGhlIHFldGggZGV2aWNlIGRyaXZlciBmYWlsZWQgdG8gcmVjb3ZlciAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCBkMDJjZDFhLi5jZTg3YWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTI3LDEwICsyNyw3IEBACiBzdGF0aWMgaW50IHFldGhfbDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX2RlbG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICosIF9fdTggKik7CiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoc3RydWN0IHFldGhfY2FyZCAqLCBfX3U4ICosCi0JCQkgICBlbnVtIHFldGhfaXBhX2NtZHMsCi0JCQkgICBpbnQgKCpyZXBseV9jYikgKHN0cnVjdCBxZXRoX2NhcmQgKiwKLQkJCQkJICAgIHN0cnVjdCBxZXRoX3JlcGx5KiwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcpKTsKKwkJCSAgIGVudW0gcWV0aF9pcGFfY21kcyk7CiBzdGF0aWMgdm9pZCBxZXRoX2wyX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgcWV0aF9sMl9yZWNvdmVyKHZvaWQgKik7CiBzdGF0aWMgdm9pZCBxZXRoX2JyaWRnZXBvcnRfcXVlcnlfc3VwcG9ydChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKTsKQEAgLTEzMCw1NiArMTI3LDcxIEBACiAJcmV0dXJuIG5kZXY7CiB9CiAKLXN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldGdyb3VwbWFjX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JCQkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyBpbnQgcWV0aF9zZXRkZWxfbWFrZXJjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCByZXRjb2RlKQogewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQlfX3U4ICptYWM7CisJaW50IHJjOwogCi0JUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2dtYWNiIik7Ci0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKLQltYWMgPSAmY21kLT5kYXRhLnNldGRlbG1hYy5tYWNbMF07Ci0JLyogTUFDIGFscmVhZHkgcmVnaXN0ZXJlZCwgbmVlZGVkIGluIGNvdXBsZS91bmNvdXBsZSBjYXNlICovCi0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlID09ICBJUEFfUkNfTDJfRFVQX01BQykgewotCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJHcm91cCBNQUMgJXBNIGFscmVhZHkgZXhpc3Rpbmcgb24gJXMgXG4iLAotCQkJICBtYWMsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQljbWQtPmhkci5yZXR1cm5fY29kZSA9IDA7CisJaWYgKHJldGNvZGUpCisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiZXJyJTA0eCIsIHJldGNvZGUpOworCXN3aXRjaCAocmV0Y29kZSkgeworCWNhc2UgSVBBX1JDX1NVQ0NFU1M6CisJCXJjID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJUEFfUkNfTDJfVU5TVVBQT1JURURfQ01EOgorCQlyYyA9IC1FTk9TWVM7CisJCWJyZWFrOworCWNhc2UgSVBBX1JDX0wyX0FERFJfVEFCTEVfRlVMTDoKKwkJcmMgPSAtRU5PU1BDOworCQlicmVhazsKKwljYXNlIElQQV9SQ19MMl9EVVBfTUFDOgorCWNhc2UgSVBBX1JDX0wyX0RVUF9MQVlFUjNfTUFDOgorCQlyYyA9IC1FRVhJU1Q7CisJCWJyZWFrOworCWNhc2UgSVBBX1JDX0wyX01BQ19OT1RfQVVUSF9CWV9IWVA6CisJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0FEUDoKKwkJcmMgPSAtRVBFUk07CisJCWJyZWFrOworCWNhc2UgSVBBX1JDX0wyX01BQ19OT1RfRk9VTkQ6CisJCXJjID0gLUVOT0VOVDsKKwkJYnJlYWs7CisJY2FzZSAtRU5PTUVNOgorCQlyYyA9IC1FTk9NRU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJjID0gLUVJTzsKKwkJYnJlYWs7CiAJfQotCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkKLQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiQ291bGQgbm90IHNldCBncm91cCBNQUMgJXBNIG9uICVzOiAleFxuIiwKLQkJCSAgbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9zZXRncm91cG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7CisJaW50IHJjOworCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2dtYWMiKTsKLQlyZXR1cm4gcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfU0VUR01BQywKLQkJCQkJICBxZXRoX2wyX3NlbmRfc2V0Z3JvdXBtYWNfY2IpOwotfQotCi1zdGF0aWMgaW50IHFldGhfbDJfc2VuZF9kZWxncm91cG1hY19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKLQkJCQl1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCV9fdTggKm1hYzsKLQotCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMkRnbWFjYiIpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JbWFjID0gJmNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjWzBdOwotCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkKLQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiQ291bGQgbm90IGRlbGV0ZSBncm91cCBNQUMgJXBNIG9uICVzOiAleFxuIiwKLQkJCSAgbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JcmV0dXJuIDA7CisJcmMgPSBxZXRoX3NldGRlbF9tYWtlcmMoY2FyZCwgcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsCisJCQkJCUlQQV9DTURfU0VUR01BQykpOworCWlmIChyYyA9PSAtRUVYSVNUKQorCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJHcm91cCBNQUMgJXBNIGFscmVhZHkgZXhpc3Rpbmcgb24gJXNcbiIsCisJCQltYWMsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworCWVsc2UgaWYgKHJjKQorCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJDb3VsZCBub3Qgc2V0IGdyb3VwIE1BQyAlcE0gb24gJXM6ICVkXG4iLAorCQkJbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9kZWxncm91cG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7CisJaW50IHJjOworCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyRGdtYWMiKTsKLQlyZXR1cm4gcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfREVMR01BQywKLQkJCQkJICBxZXRoX2wyX3NlbmRfZGVsZ3JvdXBtYWNfY2IpOworCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLAorCQkJCQlJUEFfQ01EX0RFTEdNQUMpKTsKKwlpZiAocmMpCisJCVFFVEhfREJGX01FU1NBR0UoMiwKKwkJCSJDb3VsZCBub3QgZGVsZXRlIGdyb3VwIE1BQyAlcE0gb24gJXM6ICVkXG4iLAorCQkJbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBxZXRoX2wyX2FkZF9tYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMsIGludCB2bWFjKQpAQCAtMTk3LDEwICsyMDksMTEgQEAKIAltYy0+aXNfdm1hYyA9IHZtYWM7CiAKIAlpZiAodm1hYykgewotCQlyYyA9IHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLCBJUEFfQ01EX1NFVFZNQUMsCi0JCQkJCU5VTEwpOworCQlyYyA9IHFldGhfc2V0ZGVsX21ha2VyYyhjYXJkLAorCQkJcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfU0VUVk1BQykpOwogCX0gZWxzZSB7Ci0JCXJjID0gcWV0aF9sMl9zZW5kX3NldGdyb3VwbWFjKGNhcmQsIG1hYyk7CisJCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsCisJCQlxZXRoX2wyX3NlbmRfc2V0Z3JvdXBtYWMoY2FyZCwgbWFjKSk7CiAJfQogCiAJaWYgKCFyYykKQEAgLTIxOCw3ICsyMzEsNyBAQAogCQlpZiAoZGVsKSB7CiAJCQlpZiAobWMtPmlzX3ZtYWMpCiAJCQkJcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYy0+bWNfYWRkciwKLQkJCQkJSVBBX0NNRF9ERUxWTUFDLCBOVUxMKTsKKwkJCQkJSVBBX0NNRF9ERUxWTUFDKTsKIAkJCWVsc2UKIAkJCQlxZXRoX2wyX3NlbmRfZGVsZ3JvdXBtYWMoY2FyZCwgbWMtPm1jX2FkZHIpOwogCQl9CkBAIC0yOTEsNiArMzA0LDggQEAKIAogCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAiTDJzZHYleCIsIGlwYWNtZCk7CiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBpcGFjbWQsIFFFVEhfUFJPVF9JUFY0KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zZXRkZWx2bGFuLnZsYW5faWQgPSBpOwogCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsCkBAIC0zMTMsNiArMzI4LDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBxZXRoX3ZsYW5fdmlkICppZDsKKwlpbnQgcmM7CiAKIAlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgImFpZDolZCIsIHZpZCk7CiAJaWYgKCF2aWQpCkBAIC0zMjgsNyArMzQ0LDExIEBACiAJaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF92bGFuX3ZpZCksIEdGUF9BVE9NSUMpOwogCWlmIChpZCkgewogCQlpZC0+dmlkID0gdmlkOwotCQlxZXRoX2wyX3NlbmRfc2V0ZGVsdmxhbihjYXJkLCB2aWQsIElQQV9DTURfU0VUVkxBTik7CisJCXJjID0gcWV0aF9sMl9zZW5kX3NldGRlbHZsYW4oY2FyZCwgdmlkLCBJUEFfQ01EX1NFVFZMQU4pOworCQlpZiAocmMpIHsKKwkJCWtmcmVlKGlkKTsKKwkJCXJldHVybiByYzsKKwkJfQogCQlzcGluX2xvY2tfYmgoJmNhcmQtPnZsYW5sb2NrKTsKIAkJbGlzdF9hZGRfdGFpbCgmaWQtPmxpc3QsICZjYXJkLT52aWRfbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT52bGFubG9jayk7CkBAIC0zNDMsNiArMzYzLDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF92bGFuX3ZpZCAqaWQsICp0bXBpZCA9IE5VTEw7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKKwlpbnQgcmMgPSAwOwogCiAJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJraWQ6JWQiLCB2aWQpOwogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NNKSB7CkBAIC0zNjMsMTEgKzM4NCwxMSBAQAogCX0KIAlzcGluX3VubG9ja19iaCgmY2FyZC0+dmxhbmxvY2spOwogCWlmICh0bXBpZCkgewotCQlxZXRoX2wyX3NlbmRfc2V0ZGVsdmxhbihjYXJkLCB2aWQsIElQQV9DTURfREVMVkxBTik7CisJCXJjID0gcWV0aF9sMl9zZW5kX3NldGRlbHZsYW4oY2FyZCwgdmlkLCBJUEFfQ01EX0RFTFZMQU4pOwogCQlrZnJlZSh0bXBpZCk7CiAJfQogCXFldGhfbDJfc2V0X211bHRpY2FzdF9saXN0KGNhcmQtPmRldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc3RvcF9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCByZWNvdmVyeV9tb2RlKQpAQCAtNTM5LDkxICs1NjAsNjIgQEAKIH0KIAogc3RhdGljIGludCBxZXRoX2wyX3NlbmRfc2V0ZGVsbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYywKLQkJCSAgIGVudW0gcWV0aF9pcGFfY21kcyBpcGFjbWQsCi0JCQkgICBpbnQgKCpyZXBseV9jYikgKHN0cnVjdCBxZXRoX2NhcmQgKiwKLQkJCQkJICAgIHN0cnVjdCBxZXRoX3JlcGx5KiwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcpKQorCQkJICAgZW51bSBxZXRoX2lwYV9jbWRzIGlwYWNtZCkKIHsKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyc2RtYWMiKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgUUVUSF9QUk9UX0lQVjQpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJY21kLT5kYXRhLnNldGRlbG1hYy5tYWNfbGVuZ3RoID0gT1NBX0FERFJfTEVOOwogCW1lbWNweSgmY21kLT5kYXRhLnNldGRlbG1hYy5tYWMsIG1hYywgT1NBX0FERFJfTEVOKTsKLQlyZXR1cm4gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCByZXBseV9jYiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldG1hY19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJICAgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMlNtYWNjYiIpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7Ci0JCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiTDJlciV4IiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwotCQljYXJkLT5pbmZvLm1hY19iaXRzICY9IH5RRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKLQkJc3dpdGNoIChjbWQtPmhkci5yZXR1cm5fY29kZSkgewotCQljYXNlIElQQV9SQ19MMl9EVVBfTUFDOgotCQljYXNlIElQQV9SQ19MMl9EVVBfTEFZRVIzX01BQzoKLQkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkJIk1BQyBhZGRyZXNzICVwTSBhbHJlYWR5IGV4aXN0c1xuIiwKLQkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7Ci0JCQlicmVhazsKLQkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0hZUDoKLQkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0FEUDoKLQkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkJIk1BQyBhZGRyZXNzICVwTSBpcyBub3QgYXV0aG9yaXplZFxuIiwKLQkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJY2FyZC0+aW5mby5tYWNfYml0cyB8PSBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKLQkJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsIGNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjLAotCQkgICAgICAgT1NBX0FERFJfTEVOKTsKLQkJZGV2X2luZm8oJmNhcmQtPmdkZXYtPmRldiwKLQkJCSJNQUMgYWRkcmVzcyAlcE0gc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgb24gZGV2aWNlICVzXG4iLAotCQkJY2FyZC0+ZGV2LT5kZXZfYWRkciwgY2FyZC0+ZGV2LT5uYW1lKTsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7CisJaW50IHJjOworCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2V0bWFjIik7Ci0JcmV0dXJuIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLCBJUEFfQ01EX1NFVFZNQUMsCi0JCQkJCSAgcWV0aF9sMl9zZW5kX3NldG1hY19jYik7Ci19Ci0KLXN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX2RlbG1hY19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJICAgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMkRtYWNjYiIpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7Ci0JCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiZXJyJWQiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JCXJldHVybiAwOworCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLAorCQkJCQlJUEFfQ01EX1NFVFZNQUMpKTsKKwlpZiAocmMgPT0gMCkgeworCQljYXJkLT5pbmZvLm1hY19iaXRzIHw9IFFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOworCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwgbWFjLCBPU0FfQUREUl9MRU4pOworCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAorCQkJIk1BQyBhZGRyZXNzICVwTSBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBvbiBkZXZpY2UgJXNcbiIsCisJCQljYXJkLT5kZXYtPmRldl9hZGRyLCBjYXJkLT5kZXYtPm5hbWUpOworCX0gZWxzZSB7CisJCWNhcmQtPmluZm8ubWFjX2JpdHMgJj0gflFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOworCQlzd2l0Y2ggKHJjKSB7CisJCWNhc2UgLUVFWElTVDoKKwkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCisJCQkJIk1BQyBhZGRyZXNzICVwTSBhbHJlYWR5IGV4aXN0c1xuIiwgbWFjKTsKKwkJCWJyZWFrOworCQljYXNlIC1FUEVSTToKKwkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCisJCQkJIk1BQyBhZGRyZXNzICVwTSBpcyBub3QgYXV0aG9yaXplZFxuIiwgbWFjKTsKKwkJCWJyZWFrOworCQl9CiAJfQotCWNhcmQtPmluZm8ubWFjX2JpdHMgJj0gflFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9kZWxtYWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgX191OCAqbWFjKQogeworCWludCByYzsKKwogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMkRlbG1hYyIpOwogCWlmICghKGNhcmQtPmluZm8ubWFjX2JpdHMgJiBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRCkpCiAJCXJldHVybiAwOwotCXJldHVybiBxZXRoX2wyX3NlbmRfc2V0ZGVsbWFjKGNhcmQsIG1hYywgSVBBX0NNRF9ERUxWTUFDLAotCQkJCQkgIHFldGhfbDJfc2VuZF9kZWxtYWNfY2IpOworCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLAorCQkJCQlJUEFfQ01EX0RFTFZNQUMpKTsKKwlpZiAocmMgPT0gMCkKKwkJY2FyZC0+aW5mby5tYWNfYml0cyAmPSB+UUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfcmVxdWVzdF9pbml0aWFsX21hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQpAQCAtNjUxLDcgKzY0Myw3IEBACiAJCWlmIChyYykgewogCQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiY291bGRuJ3QgZ2V0IE1BQyBhZGRyZXNzIG9uICIKIAkJCQkiZGV2aWNlICVzOiB4JXhcbiIsIENBUkRfQlVTX0lEKGNhcmQpLCByYyk7Ci0JCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjFlcnIlZCIsIHJjKTsKKwkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMWVyciUwNHgiLCByYyk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KIAkJUUVUSF9EQkZfSEVYKFNFVFVQLCAyLCBjYXJkLT5kZXYtPmRldl9hZGRyLCBPU0FfQUREUl9MRU4pOwpAQCAtNjg3LDcgKzY3OSw3IEBACiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQogCXJjID0gcWV0aF9sMl9zZW5kX2RlbG1hYyhjYXJkLCAmY2FyZC0+ZGV2LT5kZXZfYWRkclswXSk7Ci0JaWYgKCFyYyB8fCAocmMgPT0gSVBBX1JDX0wyX01BQ19OT1RfRk9VTkQpKQorCWlmICghcmMgfHwgKHJjID09IC1FTk9FTlQpKQogCQlyYyA9IHFldGhfbDJfc2VuZF9zZXRtYWMoY2FyZCwgYWRkci0+c2FfZGF0YSk7CiAJcmV0dXJuIHJjID8gLUVJTlZBTCA6IDA7CiB9CkBAIC05OTYsNyArOTg4LDcgQEAKIAlyZWNvdmVyX2ZsYWcgPSBjYXJkLT5zdGF0ZTsKIAlyYyA9IHFldGhfY29yZV9oYXJkc2V0dXBfY2FyZChjYXJkKTsKIAlpZiAocmMpIHsKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIyZXJyJWQiLCByYyk7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciUwNHgiLCByYyk7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVtb3ZlOwogCX0KQEAgLTE3MzAsNiArMTcyMiw4IEBACiAKIAlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAiYnJxc3VwcG8iKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUQlJJREdFUE9SVCwgMCk7CisJaWYgKCFpb2IpCisJCXJldHVybjsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJY21kLT5kYXRhLnNicC5oZHIuY21kbGVuZ3RoID0KIAkJc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zYnBfaGRyKSArCkBAIC0xODA1LDYgKzE3OTksOCBAQAogCWlmICghKGNhcmQtPm9wdGlvbnMuc2JwLnN1cHBvcnRlZF9mdW5jcyAmIElQQV9TQlBfUVVFUllfQlJJREdFX1BPUlRTKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9TRVRCUklER0VQT1JULCAwKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zYnAuaGRyLmNtZGxlbmd0aCA9CiAJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2JwX2hkcik7CkBAIC0xODE3LDkgKzE4MTMsNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCXJjID0gcWV0aF9icmlkZ2Vwb3J0X21ha2VyYyhjYXJkLCAmY2JjdGwsIElQQV9TQlBfUVVFUllfQlJJREdFX1BPUlRTKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2JyaWRnZXBvcnRfcXVlcnlfcG9ydHMpOwogCkBAIC0xODczLDYgKzE4NjcsOCBAQAogCWlmICghKGNhcmQtPm9wdGlvbnMuc2JwLnN1cHBvcnRlZF9mdW5jcyAmIHNldGNtZCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUQlJJREdFUE9SVCwgMCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuc2JwLmhkci5jbWRsZW5ndGggPSBjbWRsZW5ndGg7CiAJY21kLT5kYXRhLnNicC5oZHIuY29tbWFuZF9jb2RlID0gc2V0Y21kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKaW5kZXggNjI1MjI3YWQuLmUyYTBlZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYwpAQCAtNTQ5LDYgKzU0OSw4IEBACiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInNldGRlbG1jIik7CiAKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgYWRkci0+cHJvdG8pOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJbWVtY3B5KCZjbWQtPmRhdGEuc2V0ZGVsaXBtLm1hYywgYWRkci0+bWFjLCBPU0FfQUREUl9MRU4pOwogCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikKQEAgLTU4OCw2ICs1OTAsOCBAQAogCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAiZmxhZ3MlMDJYIiwgZmxhZ3MpOwogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBpcGFjbWQsIGFkZHItPnByb3RvKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikgewogCQltZW1jcHkoY21kLT5kYXRhLnNldGRlbGlwNi5pcF9hZGRyLCAmYWRkci0+dS5hNi5hZGRyLApAQCAtNjE2LDYgKzYyMCw4IEBACiAKIAlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAic2V0cm91dGciKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUUlRHLCBwcm90KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zZXRydGcudHlwZSA9ICh0eXBlKTsKIAlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7CkBAIC0xMDQ5LDEyICsxMDU1LDE0IEBACiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgImdldGFzc2NtIik7CiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVEFTU1BBUk1TLCBwcm90KTsKIAotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKLQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmFzc2lzdF9ubyA9IGlwYV9mdW5jOwotCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIubGVuZ3RoID0gOCArIGxlbjsKLQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmNvbW1hbmRfY29kZSA9IGNtZF9jb2RlOwotCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIucmV0dXJuX2NvZGUgPSAwOwotCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIuc2VxX25vID0gMDsKKwlpZiAoaW9iKSB7CisJCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKKwkJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5hc3Npc3Rfbm8gPSBpcGFfZnVuYzsKKwkJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5sZW5ndGggPSA4ICsgbGVuOworCQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmNvbW1hbmRfY29kZSA9IGNtZF9jb2RlOworCQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnJldHVybl9jb2RlID0gMDsKKwkJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5zZXFfbm8gPSAwOworCX0KIAogCXJldHVybiBpb2I7CiB9CkBAIC0xMDkwLDYgKzEwOTgsOCBAQAogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJzaW1hc3NwNiIpOwogCWlvYiA9IHFldGhfbDNfZ2V0X3NldGFzc3Bhcm1zX2NtZChjYXJkLCBpcGFfZnVuYywgY21kX2NvZGUsCiAJCQkJICAgICAgIDAsIFFFVEhfUFJPVF9JUFY2KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmMgPSBxZXRoX2wzX3NlbmRfc2V0YXNzcGFybXMoY2FyZCwgaW9iLCAwLCAwLAogCQkJCSAgIHFldGhfbDNfZGVmYXVsdF9zZXRhc3NwYXJtc19jYiwgTlVMTCk7CiAJcmV0dXJuIHJjOwpAQCAtMTEwOCw2ICsxMTE4LDggQEAKIAkJbGVuZ3RoID0gc2l6ZW9mKF9fdTMyKTsKIAlpb2IgPSBxZXRoX2wzX2dldF9zZXRhc3NwYXJtc19jbWQoY2FyZCwgaXBhX2Z1bmMsIGNtZF9jb2RlLAogCQkJCSAgICAgICBsZW5ndGgsIFFFVEhfUFJPVF9JUFY0KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmMgPSBxZXRoX2wzX3NlbmRfc2V0YXNzcGFybXMoY2FyZCwgaW9iLCBsZW5ndGgsIGRhdGEsCiAJCQkJICAgcWV0aF9sM19kZWZhdWx0X3NldGFzc3Bhcm1zX2NiLCBOVUxMKTsKIAlyZXR1cm4gcmM7CkBAIC0xNDk0LDYgKzE1MDYsOCBAQAogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX0NSRUFURV9BRERSLAogCQkJCSAgICAgUUVUSF9QUk9UX0lQVjYpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJKigoX191MTYgKikgJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFs2XSkgPQogCQkJY2FyZC0+aW5mby51bmlxdWVfaWQ7CkBAIC0xNTM3LDYgKzE1NTEsOCBAQAogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX0NSRUFURV9BRERSLAogCQkJCSAgICAgUUVUSF9QUk9UX0lQVjYpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJKigoX191MTYgKikgJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFs2XSkgPQogCQkJY2FyZC0+aW5mby51bmlxdWVfaWQ7CkBAIC0xNjExLDYgKzE2MjcsOCBAQAogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJkaWFndHJhYyIpOwogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVF9ESUFHX0FTUywgMCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWRfbGVuID0gMTY7CiAJY21kLT5kYXRhLmRpYWdhc3Muc3ViY21kID0gUUVUSF9ESUFHU19DTURfVFJBQ0U7CkBAIC0yNDQyLDYgKzI0NjAsOCBAQAogCQkJSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8sCiAJCQlzaXplb2Yoc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2RhdGEpIC0gc2l6ZW9mKGNoYXIpLAogCQkJcHJvdCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YS5xdWVyeV9hcnAucmVxdWVzdF9iaXRzID0gMHgwMDBGOwogCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5kYXRhLnF1ZXJ5X2FycC5yZXBseV9iaXRzID0gMDsKQEAgLTI1MzUsNiArMjU1NSw4IEBACiAJCQkJICAgICAgIElQQV9DTURfQVNTX0FSUF9BRERfRU5UUlksCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkpLAogCQkJCSAgICAgICBRRVRIX1BST1RfSVBWNCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCXJjID0gcWV0aF9sM19zZW5kX3NldGFzc3Bhcm1zKGNhcmQsIGlvYiwKIAkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfYXJwX2NhY2hlX2VudHJ5KSwKIAkJCQkgICAodW5zaWduZWQgbG9uZykgZW50cnksCkBAIC0yNTc0LDYgKzI1OTYsOCBAQAogCQkJCSAgICAgICBJUEFfQ01EX0FTU19BUlBfUkVNT1ZFX0VOVFJZLAogCQkJCSAgICAgICAxMiwKIAkJCQkgICAgICAgUUVUSF9QUk9UX0lQVjQpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAlyYyA9IHFldGhfbDNfc2VuZF9zZXRhc3NwYXJtcyhjYXJkLCBpb2IsCiAJCQkJICAgMTIsICh1bnNpZ25lZCBsb25nKWJ1ZiwKIAkJCQkgICBxZXRoX2wzX2RlZmF1bHRfc2V0YXNzcGFybXNfY2IsIE5VTEwpOwpAQCAtMzI2Miw2ICszMjg2LDggQEAKIAogc3RhdGljIGludCBxZXRoX2wzX3NldHVwX25ldGRldihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogeworCWludCByYzsKKwogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NEIHx8CiAJICAgIGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU1gpIHsKIAkJaWYgKChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSKSB8fApAQCAtMzI5Myw3ICszMzE5LDkgQEAKIAkJCXJldHVybiAtRU5PREVWOwogCQljYXJkLT5kZXYtPmZsYWdzIHw9IElGRl9OT0FSUDsKIAkJY2FyZC0+ZGV2LT5uZXRkZXZfb3BzID0gJnFldGhfbDNfbmV0ZGV2X29wczsKLQkJcWV0aF9sM19pcWRfcmVhZF9pbml0aWFsX21hYyhjYXJkKTsKKwkJcmMgPSBxZXRoX2wzX2lxZF9yZWFkX2luaXRpYWxfbWFjKGNhcmQpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CiAJCWlmIChjYXJkLT5vcHRpb25zLmhzdWlkWzBdKQogCQkJbWVtY3B5KGNhcmQtPmRldi0+cGVybV9hZGRyLCBjYXJkLT5vcHRpb25zLmhzdWlkLCA5KTsKIAl9IGVsc2UKQEAgLTMzNjAsNyArMzM4OCw3IEBACiAJcmVjb3Zlcl9mbGFnID0gY2FyZC0+c3RhdGU7CiAJcmMgPSBxZXRoX2NvcmVfaGFyZHNldHVwX2NhcmQoY2FyZCk7CiAJaWYgKHJjKSB7Ci0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciVkIiwgcmMpOworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjJlcnIlMDR4IiwgcmMpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3JlbW92ZTsKIAl9CkBAIC0zNDAxLDcgKzM0MjksNyBAQAogY29udGluOgogCXJjID0gcWV0aF9sM19zZXRhZGFwdGVyX3Bhcm1zKGNhcmQpOwogCWlmIChyYykKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIyZXJyJWQiLCByYyk7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciUwNHgiLCByYyk7CiAJaWYgKCFjYXJkLT5vcHRpb25zLnNuaWZmZXIpIHsKIAkJcmMgPSBxZXRoX2wzX3N0YXJ0X2lwYXNzaXN0cyhjYXJkKTsKIAkJaWYgKHJjKSB7CkBAIC0zNDEwLDEwICszNDM4LDEwIEBACiAJCX0KIAkJcmMgPSBxZXRoX2wzX3NldHJvdXRpbmdfdjQoY2FyZCk7CiAJCWlmIChyYykKLQkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNGVyciVkIiwgcmMpOworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI0ZXJyJTA0eCIsIHJjKTsKIAkJcmMgPSBxZXRoX2wzX3NldHJvdXRpbmdfdjYoY2FyZCk7CiAJCWlmIChyYykKLQkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNWVyciVkIiwgcmMpOworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJTA0eCIsIHJjKTsKIAl9CiAJbmV0aWZfdHhfZGlzYWJsZShjYXJkLT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmggYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmgKaW5kZXggM2I3M2I5Ni4uMjYyNzBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaApAQCAtMzksNyArMzksNyBAQAogCiAjZGVmaW5lIERSVl9OQU1FCQkiZm5pYyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiQ2lzY28gRkNvRSBIQkEgRHJpdmVyIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuNi4wLjE2IgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuNi4wLjE3IgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiOiAiCiAjZGVmaW5lIERGWCAgICAgICAgICAgICAgICAgICAgIERSVl9OQU1FICIlZDogIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCmluZGV4IDIwOTdkZTQuLjE1NWIyODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCkBAIC0xODkyLDYgKzE4OTIsMjEgQEAKIAkJZ290byBmbmljX2Fib3J0X2NtZF9lbmQ7CiAJfQogCisJLyogSU8gb3V0IG9mIG9yZGVyICovCisKKwlpZiAoIShDTURfRkxBR1Moc2MpICYgKEZOSUNfSU9fQUJPUlRFRCB8IEZOSUNfSU9fRE9ORSkpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9fbG9jaywgZmxhZ3MpOworCQlGTklDX1NDU0lfREJHKEtFUk5fREVCVUcsIGZuaWMtPmxwb3J0LT5ob3N0LAorCQkJIklzc3VpbmcgSG9zdCByZXNldCBkdWUgdG8gb3V0IG9mIG9yZGVyIElPXG4iKTsKKworCQlpZiAoZm5pY19ob3N0X3Jlc2V0KHNjKSA9PSBGQUlMRUQpIHsKKwkJCUZOSUNfU0NTSV9EQkcoS0VSTl9ERUJVRywgZm5pYy0+bHBvcnQtPmhvc3QsCisJCQkJImZuaWNfaG9zdF9yZXNldCBmYWlsZWQuXG4iKTsKKwkJfQorCQlyZXQgPSBGQUlMRUQ7CisJCWdvdG8gZm5pY19hYm9ydF9jbWRfZW5kOworCX0KKwogCUNNRF9TVEFURShzYykgPSBGTklDX0lPUkVRX0FCVFNfQ09NUExFVEU7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IGRmNGUyN2MuLjkyMTk5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuYworKysgYi9kcml2ZXJzL3Njc2kvaXByLmMKQEAgLTY4Myw2ICs2ODMsNyBAQAogCWlwcl9yZWluaXRfaXByX2NtbmQoaXByX2NtZCk7CiAJaXByX2NtZC0+dS5zY3JhdGNoID0gMDsKIAlpcHJfY21kLT5zaWJsaW5nID0gTlVMTDsKKwlpcHJfY21kLT5laF9jb21wID0gTlVMTDsKIAlpcHJfY21kLT5mYXN0X2RvbmUgPSBmYXN0X2RvbmU7CiAJaW5pdF90aW1lcigmaXByX2NtZC0+dGltZXIpOwogfQpAQCAtODQ4LDYgKzg0OSw4IEBACiAKIAlzY3NpX2RtYV91bm1hcChpcHJfY21kLT5zY3NpX2NtZCk7CiAJc2NzaV9jbWQtPnNjc2lfZG9uZShzY3NpX2NtZCk7CisJaWYgKGlwcl9jbWQtPmVoX2NvbXApCisJCWNvbXBsZXRlKGlwcl9jbWQtPmVoX2NvbXApOwogCWxpc3RfYWRkX3RhaWwoJmlwcl9jbWQtPnF1ZXVlLCAmaXByX2NtZC0+aHJycS0+aHJycV9mcmVlX3EpOwogfQogCkBAIC00ODExLDYgKzQ4MTQsODQgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogaXByX21hdGNoX2x1biAtIE1hdGNoIGZ1bmN0aW9uIGZvciBzcGVjaWZpZWQgTFVOCisgKiBAaXByX2NtZDoJaXByIGNvbW1hbmQgc3RydWN0CisgKiBAZGV2aWNlOgkJZGV2aWNlIHRvIG1hdGNoIChzZGV2KQorICoKKyAqIFJldHVybnM6CisgKgkxIGlmIGNvbW1hbmQgbWF0Y2hlcyBzZGV2IC8gMCBpZiBjb21tYW5kIGRvZXMgbm90IG1hdGNoIHNkZXYKKyAqKi8KK3N0YXRpYyBpbnQgaXByX21hdGNoX2x1bihzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQsIHZvaWQgKmRldmljZSkKK3sKKwlpZiAoaXByX2NtZC0+c2NzaV9jbWQgJiYgaXByX2NtZC0+c2NzaV9jbWQtPmRldmljZSA9PSBkZXZpY2UpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwcl93YWl0X2Zvcl9vcHMgLSBXYWl0IGZvciBtYXRjaGluZyBjb21tYW5kcyB0byBjb21wbGV0ZQorICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAorICogQGRldmljZToJCWRldmljZSB0byBtYXRjaCAoc2RldikKKyAqIEBtYXRjaDoJCW1hdGNoIGZ1bmN0aW9uIHRvIHVzZQorICoKKyAqIFJldHVybnM6CisgKglTVUNDRVNTIC8gRkFJTEVECisgKiovCitzdGF0aWMgaW50IGlwcl93YWl0X2Zvcl9vcHMoc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnLCB2b2lkICpkZXZpY2UsCisJCQkgICAgaW50ICgqbWF0Y2gpKHN0cnVjdCBpcHJfY21uZCAqLCB2b2lkICopKQoreworCXN0cnVjdCBpcHJfY21uZCAqaXByX2NtZDsKKwlpbnQgd2FpdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcHJfaHJyX3F1ZXVlICpocnJxOworCXNpZ25lZCBsb25nIHRpbWVvdXQgPSBJUFJfQUJPUlRfVEFTS19USU1FT1VUOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXApOworCisJRU5URVI7CisJZG8geworCQl3YWl0ID0gMDsKKworCQlmb3JfZWFjaF9ocnJxKGhycnEsIGlvYV9jZmcpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKGhycnEtPmxvY2ssIGZsYWdzKTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXByX2NtZCwgJmhycnEtPmhycnFfcGVuZGluZ19xLCBxdWV1ZSkgeworCQkJCWlmIChtYXRjaChpcHJfY21kLCBkZXZpY2UpKSB7CisJCQkJCWlwcl9jbWQtPmVoX2NvbXAgPSAmY29tcDsKKwkJCQkJd2FpdCsrOworCQkJCX0KKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaHJycS0+bG9jaywgZmxhZ3MpOworCQl9CisKKwkJaWYgKHdhaXQpIHsKKwkJCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNvbXAsIHRpbWVvdXQpOworCisJCQlpZiAoIXRpbWVvdXQpIHsKKwkJCQl3YWl0ID0gMDsKKworCQkJCWZvcl9lYWNoX2hycnEoaHJycSwgaW9hX2NmZykgeworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZShocnJxLT5sb2NrLCBmbGFncyk7CisJCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXByX2NtZCwgJmhycnEtPmhycnFfcGVuZGluZ19xLCBxdWV1ZSkgeworCQkJCQkJaWYgKG1hdGNoKGlwcl9jbWQsIGRldmljZSkpIHsKKwkJCQkJCQlpcHJfY21kLT5laF9jb21wID0gTlVMTDsKKwkJCQkJCQl3YWl0Kys7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShocnJxLT5sb2NrLCBmbGFncyk7CisJCQkJfQorCisJCQkJaWYgKHdhaXQpCisJCQkJCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBhYm9ydGVkIGNvbW1hbmRzXG4iKTsKKwkJCQlMRUFWRTsKKwkJCQlyZXR1cm4gd2FpdCA/IEZBSUxFRCA6IFNVQ0NFU1M7CisJCQl9CisJCX0KKwl9IHdoaWxlICh3YWl0KTsKKworCUxFQVZFOworCXJldHVybiBTVUNDRVNTOworfQorCiBzdGF0aWMgaW50IGlwcl9laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmc7CkBAIC01MDMwLDExICs1MTExLDE3IEBACiBzdGF0aWMgaW50IGlwcl9laF9kZXZfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCWludCByYzsKKwlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmc7CisKKwlpb2FfY2ZnID0gKHN0cnVjdCBpcHJfaW9hX2NmZyAqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAKIAlzcGluX2xvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwogCXJjID0gX19pcHJfZWhfZGV2X3Jlc2V0KGNtZCk7CiAJc3Bpbl91bmxvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwogCisJaWYgKHJjID09IFNVQ0NFU1MpCisJCXJjID0gaXByX3dhaXRfZm9yX29wcyhpb2FfY2ZnLCBjbWQtPmRldmljZSwgaXByX21hdGNoX2x1bik7CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTUyMzQsMTMgKzUzMjEsMTggQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKKwlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmc7CiAKIAlFTlRFUjsKIAorCWlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopIHNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2NzaV9jbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJcmMgPSBpcHJfY2FuY2VsX29wKHNjc2lfY21kKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCisJaWYgKHJjID09IFNVQ0NFU1MpCisJCXJjID0gaXByX3dhaXRfZm9yX29wcyhpb2FfY2ZnLCBzY3NpX2NtZC0+ZGV2aWNlLCBpcHJfbWF0Y2hfbHVuKTsKIAlMRUFWRTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggYjRmM2VlYy4uZWMwM2I0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMTYwNiw2ICsxNjA2LDcgQEAKIAkJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwogCX0gdTsKIAorCXN0cnVjdCBjb21wbGV0aW9uICplaF9jb21wOwogCXN0cnVjdCBpcHJfaHJyX3F1ZXVlICpocnJxOwogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZzsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IDEyY2EyOTEuLmNjZTFjYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC03MzQsNyArNzM0LDkgQEAKIAkgKiBSZXR1cm4gdGFyZ2V0IGJ1c3kgaWYgd2UndmUgcmVjZWl2ZWQgYSBub24temVybyByZXRyeV9kZWxheV90aW1lcgogCSAqIGluIGEgRkNQX1JTUC4KIAkgKi8KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBmY3BvcnQtPnJldHJ5X2RlbGF5X3RpbWVzdGFtcCkpCisJaWYgKGZjcG9ydC0+cmV0cnlfZGVsYXlfdGltZXN0YW1wID09IDApIHsKKwkJLyogcmV0cnkgZGVsYXkgbm90IHNldCAqLworCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBmY3BvcnQtPnJldHJ5X2RlbGF5X3RpbWVzdGFtcCkpCiAJCWZjcG9ydC0+cmV0cnlfZGVsYXlfdGltZXN0YW1wID0gMDsKIAllbHNlCiAJCWdvdG8gcWMyNF90YXJnZXRfYnVzeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IGUwMjg4NTQuLjliMzgyOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtOTg2LDkgKzk4Niw5IEBACiAJCXJldHVybiAtRU5YSU87CiAJaWYgKCFnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldikpCiAJCXJldHVybiAtRU5YSU87Ci0JLyogV2UgY2FuIGZhaWwgdGhpcyBpZiB3ZSdyZSBkb2luZyBTQ1NJIG9wZXJhdGlvbnMKKwkvKiBXZSBjYW4gZmFpbCB0cnlfbW9kdWxlX2dldCBpZiB3ZSdyZSBkb2luZyBTQ1NJIG9wZXJhdGlvbnMKIAkgKiBmcm9tIG1vZHVsZSBleGl0IChsaWtlIGNhY2hlIGZsdXNoKSAqLwotCXRyeV9tb2R1bGVfZ2V0KHNkZXYtPmhvc3QtPmhvc3R0LT5tb2R1bGUpOworCV9fbW9kdWxlX2dldChzZGV2LT5ob3N0LT5ob3N0dC0+bW9kdWxlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAwNCwxNCArMTAwNCw3IEBACiAgKi8KIHZvaWQgc2NzaV9kZXZpY2VfcHV0KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLSNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAotCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSA9IHNkZXYtPmhvc3QtPmhvc3R0LT5tb2R1bGU7Ci0KLQkvKiBUaGUgbW9kdWxlIHJlZmNvdW50IHdpbGwgYmUgemVybyBpZiBzY3NpX2RldmljZV9nZXQoKQotCSAqIHdhcyBjYWxsZWQgZnJvbSBhIG1vZHVsZSByZW1vdmFsIHJvdXRpbmUgKi8KLQlpZiAobW9kdWxlICYmIG1vZHVsZV9yZWZjb3VudChtb2R1bGUpICE9IDApCi0JCW1vZHVsZV9wdXQobW9kdWxlKTsKLSNlbmRpZgorCW1vZHVsZV9wdXQoc2Rldi0+aG9zdC0+aG9zdHQtPm1vZHVsZSk7CiAJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX2RldmljZV9wdXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggN2I4YjUxYi4uNGFjYTFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC0xNjIzLDcgKzE2MjMsNyBAQAogCXJlcV9vcGNvZGUgPSBjbWRbM107CiAJcmVxX3NhID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGNtZCArIDQpOwogCWFsbG9jX2xlbiA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyA2KTsKLQlpZiAoYWxsb2NfbGVuIDwgNCAmJiBhbGxvY19sZW4gPiAweGZmZmYpIHsKKwlpZiAoYWxsb2NfbGVuIDwgNCB8fCBhbGxvY19sZW4gPiAweGZmZmYpIHsKIAkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwgNiwgLTEpOwogCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKIAl9CkBAIC0xNjMxLDcgKzE2MzEsNyBAQAogCQlhX2xlbiA9IDgxOTI7CiAJZWxzZQogCQlhX2xlbiA9IGFsbG9jX2xlbjsKLQlhcnIgPSBremFsbG9jKChhX2xlbiA8IDI1NikgPyAzMjAgOiBhX2xlbiArIDY0LCBHRlBfS0VSTkVMKTsKKwlhcnIgPSBremFsbG9jKChhX2xlbiA8IDI1NikgPyAzMjAgOiBhX2xlbiArIDY0LCBHRlBfQVRPTUlDKTsKIAlpZiAoTlVMTCA9PSBhcnIpIHsKIAkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlNVRkZfUkVTX0FTQywKIAkJCQlJTlNVRkZfUkVTX0FTQ1EpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggZTQyZmZmNi4uOGFmYjAxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC0xMDQxLDcgKzEwNDEsNyBAQAogCQl9CiAJCS8qIHNpZ25hbCBub3QgdG8gZW50ZXIgZWl0aGVyIGJyYW5jaCBvZiB0aGUgaWYgKCkgYmVsb3cgKi8KIAkJdGltZWxlZnQgPSAwOwotCQlydG4gPSBORUVEU19SRVRSWTsKKwkJcnRuID0gRkFJTEVEOwogCX0gZWxzZSB7CiAJCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkb25lLCB0aW1lb3V0KTsKIAkJcnRuID0gU1VDQ0VTUzsKQEAgLTEwODEsNyArMTA4MSw3IEBACiAJCQlydG4gPSBGQUlMRUQ7CiAJCQlicmVhazsKIAkJfQotCX0gZWxzZSBpZiAoIXJ0bikgeworCX0gZWxzZSBpZiAocnRuICE9IEZBSUxFRCkgewogCQlzY3NpX2Fib3J0X2VoX2NtbmQoc2NtZCk7CiAJCXJ0biA9IEZBSUxFRDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDllYTk1ZGQuLjE3YmI1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC01OTEsNyArNTkxLDYgQEAKIHN0YXRpYyBpbnQgc2NzaV9hbGxvY19zZ3RhYmxlKHN0cnVjdCBzY3NpX2RhdGFfYnVmZmVyICpzZGIsIGludCBuZW50cywgYm9vbCBtcSkKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmZpcnN0X2NodW5rID0gTlVMTDsKLQlnZnBfdCBnZnBfbWFzayA9IG1xID8gR0ZQX05PSU8gOiBHRlBfQVRPTUlDOwogCWludCByZXQ7CiAKIAlCVUdfT04oIW5lbnRzKTsKQEAgLTYwNiw3ICs2MDUsNyBAQAogCX0KIAogCXJldCA9IF9fc2dfYWxsb2NfdGFibGUoJnNkYi0+dGFibGUsIG5lbnRzLCBTQ1NJX01BWF9TR19TRUdNRU5UUywKLQkJCSAgICAgICBmaXJzdF9jaHVuaywgZ2ZwX21hc2ssIHNjc2lfc2dfYWxsb2MpOworCQkJICAgICAgIGZpcnN0X2NodW5rLCBHRlBfQVRPTUlDLCBzY3NpX3NnX2FsbG9jKTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJc2NzaV9mcmVlX3NndGFibGUoc2RiLCBtcSk7CiAJcmV0dXJuIHJldDsKQEAgLTExNDQsNyArMTE0MywxNyBAQAogCQlzdHJ1Y3Qgc2NzaV9kYXRhX2J1ZmZlciAqcHJvdF9zZGIgPSBjbWQtPnByb3Rfc2RiOwogCQlpbnQgaXZlY3MsIGNvdW50OwogCi0JCUJVR19PTihwcm90X3NkYiA9PSBOVUxMKTsKKwkJaWYgKHByb3Rfc2RiID09IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGNhbiBoYXBwZW4gaWYgc29tZW9uZSAoZS5nLiBtdWx0aXBhdGgpCisJCQkgKiBxdWV1ZXMgYSBjb21tYW5kIHRvIGEgZGV2aWNlIG9uIGFuIGFkYXB0ZXIKKwkJCSAqIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBESVguCisJCQkgKi8KKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJCWVycm9yID0gQkxLUFJFUF9LSUxMOworCQkJZ290byBlcnJfZXhpdDsKKwkJfQorCiAJCWl2ZWNzID0gYmxrX3JxX2NvdW50X2ludGVncml0eV9zZyhycS0+cSwgcnEtPmJpbyk7CiAKIAkJaWYgKHNjc2lfYWxsb2Nfc2d0YWJsZShwcm90X3NkYiwgaXZlY3MsIGlzX21xKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBmZWRhYjNjLi4zOTk1MTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMjYyMyw4ICsyNjIzLDkgQEAKIAkJCQlzZF9jb25maWdfZGlzY2FyZChzZGtwLCBTRF9MQlBfV1MxNik7CiAKIAkJfSBlbHNlIHsJLyogTEJQIFZQRCBwYWdlIHRlbGxzIHVzIHdoYXQgdG8gdXNlICovCi0KLQkJCWlmIChzZGtwLT5sYnB3cykKKwkJCWlmIChzZGtwLT5sYnB1ICYmIHNka3AtPm1heF91bm1hcF9ibG9ja3MgJiYgIXNka3AtPmxicHJ6KQorCQkJCXNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFNEX0xCUF9VTk1BUCk7CisJCQllbHNlIGlmIChzZGtwLT5sYnB3cykKIAkJCQlzZF9jb25maWdfZGlzY2FyZChzZGtwLCBTRF9MQlBfV1MxNik7CiAJCQllbHNlIGlmIChzZGtwLT5sYnB3czEwKQogCQkJCXNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFNEX0xCUF9XUzEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1kdy1taWQuYyBiL2RyaXZlcnMvc3BpL3NwaS1kdy1taWQuYwppbmRleCA3MjgxMzE2Li5hNjdkMzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZHctbWlkLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWR3LW1pZC5jCkBAIC0yNzEsNyArMjcxLDYgQEAKIAlpb3VubWFwKGNsa19yZWcpOwogCiAJZHdzLT5udW1fY3MgPSAxNjsKLQlkd3MtPmZpZm9fbGVuID0gNDA7CS8qIEZJRk8gaGFzIDQwIHdvcmRzIGJ1ZmZlciAqLwogCiAjaWZkZWYgQ09ORklHX1NQSV9EV19NSURfRE1BCiAJZHdzLT5kbWFfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWRfZG1hKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZHcuYyBiL2RyaXZlcnMvc3BpL3NwaS1kdy5jCmluZGV4IGQwZDU1NDIuLjhlZGNkMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1kdy5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1kdy5jCkBAIC02MjEsMTMgKzYyMSwxMyBAQAogCWlmICghZHdzLT5maWZvX2xlbikgewogCQl1MzIgZmlmbzsKIAotCQlmb3IgKGZpZm8gPSAyOyBmaWZvIDw9IDI1NzsgZmlmbysrKSB7CisJCWZvciAoZmlmbyA9IDI7IGZpZm8gPD0gMjU2OyBmaWZvKyspIHsKIAkJCWR3X3dyaXRldyhkd3MsIERXX1NQSV9UWEZMVFIsIGZpZm8pOwogCQkJaWYgKGZpZm8gIT0gZHdfcmVhZHcoZHdzLCBEV19TUElfVFhGTFRSKSkKIAkJCQlicmVhazsKIAkJfQogCi0JCWR3cy0+Zmlmb19sZW4gPSAoZmlmbyA9PSAyNTcpID8gMCA6IGZpZm87CisJCWR3cy0+Zmlmb19sZW4gPSAoZmlmbyA9PSAyKSA/IDAgOiBmaWZvIC0gMTsKIAkJZHdfd3JpdGV3KGR3cywgRFdfU1BJX1RYRkxUUiwgMCk7CiAJfQogfQpAQCAtNjczLDcgKzY3Myw3IEBACiAJaWYgKGR3cy0+ZG1hX29wcyAmJiBkd3MtPmRtYV9vcHMtPmRtYV9pbml0KSB7CiAJCXJldCA9IGR3cy0+ZG1hX29wcy0+ZG1hX2luaXQoZHdzKTsKIAkJaWYgKHJldCkgewotCQkJZGV2X3dhcm4oJm1hc3Rlci0+ZGV2LCAiRE1BIGluaXQgZmFpbGVkXG4iKTsKKwkJCWRldl93YXJuKGRldiwgIkRNQSBpbml0IGZhaWxlZFxuIik7CiAJCQlkd3MtPmRtYV9pbml0ZWQgPSAwOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWltZy1zcGZpLmMgYi9kcml2ZXJzL3NwaS9zcGktaW1nLXNwZmkuYwppbmRleCBiNDEwNDk5Li5hYWQ2NjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktaW1nLXNwZmkuYworKysgYi9kcml2ZXJzL3NwaS9zcGktaW1nLXNwZmkuYwpAQCAtMzQxLDcgKzM0MSw3IEBACiAJCWRlZmF1bHQ6CiAJCQlyeGNvbmYuc3JjX2FkZHIgPSBzcGZpLT5waHlzICsgU1BGSV9SWF84QklUX1ZBTElEX0RBVEE7CiAJCQlyeGNvbmYuc3JjX2FkZHJfd2lkdGggPSAxOwotCQkJcnhjb25mLnNyY19tYXhidXJzdCA9IDE7CisJCQlyeGNvbmYuc3JjX21heGJ1cnN0ID0gNDsKIAkJfQogCQlkbWFlbmdpbmVfc2xhdmVfY29uZmlnKHNwZmktPnJ4X2NoLCAmcnhjb25mKTsKIApAQCAtMzY4LDcgKzM2OCw3IEBACiAJCWRlZmF1bHQ6CiAJCQl0eGNvbmYuZHN0X2FkZHIgPSBzcGZpLT5waHlzICsgU1BGSV9UWF84QklUX1ZBTElEX0RBVEE7CiAJCQl0eGNvbmYuZHN0X2FkZHJfd2lkdGggPSAxOwotCQkJdHhjb25mLmRzdF9tYXhidXJzdCA9IDE7CisJCQl0eGNvbmYuZHN0X21heGJ1cnN0ID0gNDsKIAkJCWJyZWFrOwogCQl9CiAJCWRtYWVuZ2luZV9zbGF2ZV9jb25maWcoc3BmaS0+dHhfY2gsICZ0eGNvbmYpOwpAQCAtMzkwLDE0ICszOTAsMTQgQEAKIAkJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoc3BmaS0+cnhfY2gpOwogCX0KIAorCXNwZmlfc3RhcnQoc3BmaSk7CisKIAlpZiAoeGZlci0+dHhfYnVmKSB7CiAJCXNwZmktPnR4X2RtYV9idXN5ID0gdHJ1ZTsKIAkJZG1hZW5naW5lX3N1Ym1pdCh0eGRlc2MpOwogCQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhzcGZpLT50eF9jaCk7CiAJfQogCi0Jc3BmaV9zdGFydChzcGZpKTsKLQogCXJldHVybiAxOwogCiBzdG9wX2RtYToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1weGEyeHguYyBiL2RyaXZlcnMvc3BpL3NwaS1weGEyeHguYwppbmRleCAwNWM2MjNjLi4yMzgyMmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC5jCkBAIC01NDYsOCArNTQ2LDggQEAKIAkJCWNzX2RlYXNzZXJ0KGRydl9kYXRhKTsKIAl9CiAKLQlzcGlfZmluYWxpemVfY3VycmVudF9tZXNzYWdlKGRydl9kYXRhLT5tYXN0ZXIpOwogCWRydl9kYXRhLT5jdXJfY2hpcCA9IE5VTEw7CisJc3BpX2ZpbmFsaXplX2N1cnJlbnRfbWVzc2FnZShkcnZfZGF0YS0+bWFzdGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmVzZXRfc2NjcjEoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1zaC1tc2lvZi5jIGIvZHJpdmVycy9zcGkvc3BpLXNoLW1zaW9mLmMKaW5kZXggMjM5YmU3Yy4uM2FiN2EyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXNoLW1zaW9mLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXNoLW1zaW9mLmMKQEAgLTgyLDcgKzgyLDcgQEAKICNkZWZpbmUgTURSMV9TWU5DTURfTFIJIDB4MzAwMDAwMDAgLyogICBML1IgbW9kZSAqLwogI2RlZmluZSBNRFIxX1NZTkNBQ19TSElGVAkgMjUgLyogU3luYyBQb2xhcml0eSAoMSA9IEFjdGl2ZS1sb3cpICovCiAjZGVmaW5lIE1EUjFfQklUTFNCX1NISUZUCSAyNCAvKiBNU0IvTFNCIEZpcnN0ICgxID0gTFNCIGZpcnN0KSAqLwotI2RlZmluZSBNRFIxX0ZMRF9NQVNLCSAweDAwMDAwMGMwIC8qIEZyYW1lIFN5bmMgU2lnbmFsIEludGVydmFsICgwLTMpICovCisjZGVmaW5lIE1EUjFfRkxEX01BU0sJIDB4MDAwMDAwMGMgLyogRnJhbWUgU3luYyBTaWduYWwgSW50ZXJ2YWwgKDAtMykgKi8KICNkZWZpbmUgTURSMV9GTERfU0hJRlQJCSAgMgogI2RlZmluZSBNRFIxX1hYU1RQCSAweDAwMDAwMDAxIC8qIFRyYW5zbWlzc2lvbi9SZWNlcHRpb24gU3RvcCBvbiBGSUZPICovCiAvKiBUTURSMSAqLwpAQCAtNDgwLDYgKzQ4MCw4IEBACiAJc3RydWN0IGRldmljZV9ub2RlCSpucCA9IHNwaS0+bWFzdGVyLT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnAtPnBkZXYtPmRldik7CisKIAlpZiAoIW5wKSB7CiAJCS8qCiAJCSAqIFVzZSBzcGktPmNvbnRyb2xsZXJfZGF0YSBmb3IgQ1MgKHNhbWUgc3RyYXRlZ3kgYXMgc3BpX2dwaW8pLApAQCAtNDk4LDYgKzUwMCw5IEBACiAJaWYgKHNwaS0+Y3NfZ3BpbyA+PSAwKQogCQlncGlvX3NldF92YWx1ZShzcGktPmNzX2dwaW8sICEoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpKTsKIAorCisJcG1fcnVudGltZV9wdXRfc3luYygmcC0+cGRldi0+ZGV2KTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9uYW1laS5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbmFtZWkuYwppbmRleCAxYmY4OTFiLi40ZjM2MWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9uYW1laS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL25hbWVpLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCiAJCWlmICgoYml0cyAmIChNRFNfSU5PREVMT0NLX0xPT0tVUCB8IE1EU19JTk9ERUxPQ0tfUEVSTSkpICYmCiAJCSAgICBpbm9kZS0+aV9zYi0+c19yb290ICE9IE5VTEwgJiYKLQkJICAgIGlzX3Jvb3RfaW5vZGUoaW5vZGUpKQorCQkgICAgIWlzX3Jvb3RfaW5vZGUoaW5vZGUpKQogCQkJbGxfaW52YWxpZGF0ZV9hbGlhc2VzKGlub2RlKTsKIAogCQlpcHV0KGlub2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3Z2cF9pby5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKaW5kZXggOTMwZjYwMS4uNjVkNjEwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKQEAgLTYzMiw3ICs2MzIsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoY2Zpby0+ZmF1bHQuZnRfZmxhZ3MgJiBWTV9GQVVMVF9TSUdCVVMpIHsKKwlpZiAoY2Zpby0+ZmF1bHQuZnRfZmxhZ3MgJiAoVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfU0lHU0VHVikpIHsKIAkJQ0RFQlVHKERfUEFHRSwgImdvdCBhZGRyICVwIC0gU0lHQlVTXG4iLCB2bWYtPnZpcnR1YWxfYWRkcmVzcyk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGxnMjMwMC9LY29uZmlnCmluZGV4IDgxNzg0YzYuLjc3ZDg3NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBWSURFT19UTEcyMzAwCiAJdHJpc3RhdGUgIlRlbGVnZW50IFRMRzIzMDAgVVNCIHZpZGVvIGNhcHR1cmUgc3VwcG9ydCAoRGVwcmVjYXRlZCkiCiAJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIFNORCAmJiBEVkJfQ09SRQorCWRlcGVuZHMgb24gTUVESUFfVVNCX1NVUFBPUlQKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KIAlkZXBlbmRzIG9uIFJDX0NPUkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9udmVjL252ZWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9udmVjL252ZWMuYwppbmRleCAwOTM1MzVjLi4xMjBiNzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbnZlYy9udmVjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL252ZWMvbnZlYy5jCkBAIC04NSwyMyArODUsMjAgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgbnZlY19kZXZpY2VzW10gPSB7CiAJewogCQkubmFtZSA9ICJudmVjLWtiZCIsCi0JCS5pZCA9IDEsCiAJfSwKIAl7CiAJCS5uYW1lID0gIm52ZWMtbW91c2UiLAotCQkuaWQgPSAxLAorCX0sCisJeworCQkubmFtZSA9ICJudmVjLXBvd2VyIiwKKwkJLmlkID0gMCwKIAl9LAogCXsKIAkJLm5hbWUgPSAibnZlYy1wb3dlciIsCiAJCS5pZCA9IDEsCiAJfSwKIAl7Ci0JCS5uYW1lID0gIm52ZWMtcG93ZXIiLAotCQkuaWQgPSAyLAotCX0sCi0JewogCQkubmFtZSA9ICJudmVjLXBhejAwIiwKLQkJLmlkID0gMSwKIAl9LAogfTsKIApAQCAtODkxLDcgKzg4OCw3IEBACiAJCW52ZWNfbXNnX2ZyZWUobnZlYywgbXNnKTsKIAl9CiAKLQlyZXQgPSBtZmRfYWRkX2RldmljZXMobnZlYy0+ZGV2LCAtMSwgbnZlY19kZXZpY2VzLAorCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhudmVjLT5kZXYsIDAsIG52ZWNfZGV2aWNlcywKIAkJCSAgICAgIEFSUkFZX1NJWkUobnZlY19kZXZpY2VzKSwgTlVMTCwgMCwgTlVMTCk7CiAJaWYgKHJldCkKIAkJZGV2X2VycihudmVjLT5kZXYsICJlcnJvciBhZGRpbmcgc3ViZGV2aWNlc1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jhc2ViYW5kLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jhc2ViYW5kLmMKaW5kZXggODZjNzJiYS4uZjhjNWZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9iYXNlYmFuZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYmFzZWJhbmQuYwpAQCAtMjE3Nyw3ICsyMTc3LDcgQEAKIAkJLyogSW5pdCBBTlQgQiBzZWxlY3QsUlggQ29uZmlnIENSMTAgPSAweDI4LT4weDJBLCAweDJBLT4weDI4KFZDMS9WQzIgZGVmaW5lLCBtYWtlIHRoZSBBTlRfQSwgQU5UX0IgaW52ZXJ0ZWQpICovCiAJCS8qYlJlc3VsdCAmPSBCQmJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLDB4MGEsMHgyOCk7Ki8KIAkJLyogU2VsZWN0IFZDMS9WQzIsIENSMjE1ID0gMHgwMi0+MHgwNiAqLwotCQliUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQoZHdJb0Jhc2UsIDB4ZDcsIDB4MDYpOworCQliUmVzdWx0ICY9IEJCYldyaXRlRW1iZWRkZWQocHJpdiwgMHhkNywgMHgwNik7CiAJCS8qIH19ICovCiAKIAkJZm9yIChpaSA9IDA7IGlpIDwgQ0JfVlQzMjUzQjBfQUdDOyBpaSsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jaGFubmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NoYW5uZWwuYwppbmRleCBjOGY3MzlkLi43MGY4NzA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NoYW5uZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NoYW5uZWwuYwpAQCAtMTgyLDYgKzE4MiwxNCBAQAogCWlmIChwRGV2aWNlLT5ieUN1cnJlbnRDaCA9PSB1Q29ubmVjdGlvbkNoYW5uZWwpCiAJCXJldHVybiBiUmVzdWx0OwogCisJLyogU2V0IFZHQSB0byBtYXggc2Vuc2l0aXZpdHkgKi8KKwlpZiAocERldmljZS0+YlVwZGF0ZUJCVkdBICYmCisJICAgIHBEZXZpY2UtPmJ5QkJWR0FDdXJyZW50ICE9IHBEZXZpY2UtPmFieUJCVkdBWzBdKSB7CisJCXBEZXZpY2UtPmJ5QkJWR0FDdXJyZW50ID0gcERldmljZS0+YWJ5QkJWR0FbMF07CisKKwkJQkJ2U2V0VkdBR2Fpbk9mZnNldChwRGV2aWNlLCBwRGV2aWNlLT5ieUJCVkdBQ3VycmVudCk7CisJfQorCiAJLyogY2xlYXIgTkFWICovCiAJTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX01BQ0NSLCBNQUNDUl9DTFJOQVYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMKaW5kZXggODNlNDE2Mi4uY2QxYTI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYwpAQCAtMTIzMiw3ICsxMjMyLDcgQEAKIAogCWhlYWRfdGQgPSBwcml2LT5hcEN1cnJURFtkbWFfaWR4XTsKIAotCWhlYWRfdGQtPm1fdGQxVEQxLmJ5VENSID0gKFRDUl9FRFB8VENSX1NUUCk7CisJaGVhZF90ZC0+bV90ZDFURDEuYnlUQ1IgPSAwOwogCiAJaGVhZF90ZC0+cFRESW5mby0+c2tiID0gc2tiOwogCkBAIC0xMjU3LDYgKzEyNTcsMTEgQEAKIAogCXByaXYtPmJQV0JpdE9uID0gZmFsc2U7CiAKKwkvKiBTZXQgVFNSMSAmIFJlcUNvdW50IGluIFR4RGVzY0hlYWQgKi8KKwloZWFkX3RkLT5tX3RkMVREMS5ieVRDUiB8PSAoVENSX1NUUCB8IFRDUl9FRFAgfCBFRE1TRFUpOworCWhlYWRfdGQtPm1fdGQxVEQxLndSZXFDb3VudCA9CisJCQljcHVfdG9fbGUxNigodTE2KWhlYWRfdGQtPnBUREluZm8tPmR3UmVxQ291bnQpOworCiAJaGVhZF90ZC0+cFRESW5mby0+YnlGbGFncyA9IFREX0ZMQUdTX05FVElGX1NLQjsKIAogCWlmIChkbWFfaWR4ID09IFRZUEVfQUMwRE1BKQpAQCAtMTUwMCw5ICsxNTA1LDExIEBACiAJCWlmIChjb25mLT5lbmFibGVfYmVhY29uKSB7CiAJCQl2bnRfYmVhY29uX2VuYWJsZShwcml2LCB2aWYsIGNvbmYpOwogCi0JCQlNQUN2UmVnQml0c09uKHByaXYsIE1BQ19SRUdfVENSLCBUQ1JfQVVUT0JDTlRYKTsKKwkJCU1BQ3ZSZWdCaXRzT24ocHJpdi0+UG9ydE9mZnNldCwgTUFDX1JFR19UQ1IsCisJCQkJICAgICAgVENSX0FVVE9CQ05UWCk7CiAJCX0gZWxzZSB7Ci0JCQlNQUN2UmVnQml0c09mZihwcml2LCBNQUNfUkVHX1RDUiwgVENSX0FVVE9CQ05UWCk7CisJCQlNQUN2UmVnQml0c09mZihwcml2LT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1RDUiwKKwkJCQkgICAgICAgVENSX0FVVE9CQ05UWCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcnh0eC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmMKaW5kZXggNjFjMzlkZC4uYjViMDE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmMKQEAgLTEyMDQsMTMgKzEyMDQsMTAgQEAKIAogCXB0ZEN1cnIgPSAoUFNUeERlc2MpcEhlYWRURDsKIAotCXB0ZEN1cnItPnBUREluZm8tPmR3UmVxQ291bnQgPSBjYlJlcUNvdW50IC0gdVBhZGRpbmc7CisJcHRkQ3Vyci0+cFRESW5mby0+ZHdSZXFDb3VudCA9IGNiUmVxQ291bnQ7CiAJcHRkQ3Vyci0+cFRESW5mby0+ZHdIZWFkZXJMZW5ndGggPSBjYkhlYWRlckxlbmd0aDsKIAlwdGRDdXJyLT5wVERJbmZvLT5za2JfZG1hID0gcHRkQ3Vyci0+cFRESW5mby0+YnVmX2RtYTsKIAlwdGRDdXJyLT5idWZmX2FkZHIgPSBjcHVfdG9fbGUzMihwdGRDdXJyLT5wVERJbmZvLT5za2JfZG1hKTsKLQkvKiBTZXQgVFNSMSAmIFJlcUNvdW50IGluIFR4RGVzY0hlYWQgKi8KLQlwdGRDdXJyLT5tX3RkMVREMS5ieVRDUiB8PSAoVENSX1NUUCB8IFRDUl9FRFAgfCBFRE1TRFUpOwotCXB0ZEN1cnItPm1fdGQxVEQxLndSZXFDb3VudCA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydCkoY2JSZXFDb3VudCkpOwogCiAJcmV0dXJuIGNiSGVhZGVyTGVuZ3RoOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0LmMgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYwppbmRleCA1NWY2Nzc0Li5hZWJkZTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYworKysgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYwpAQCAtMjAyNywxMCArMjAyNywxMCBAQAogCQlnb3RvIHJlamVjdDsKIAl9CiAJaWYgKCFzdHJuY21wKCI9QWxsIiwgdGV4dF9wdHIsIDQpKSB7Ci0JCWNtZC0+Y21kX2ZsYWdzIHw9IElGQ19TRU5EVEFSR0VUU19BTEw7CisJCWNtZC0+Y21kX2ZsYWdzIHw9IElDRl9TRU5EVEFSR0VUU19BTEw7CiAJfSBlbHNlIGlmICghc3RybmNtcCgiPWlxbi4iLCB0ZXh0X3B0ciwgNSkgfHwKIAkJICAgIXN0cm5jbXAoIj1ldWkuIiwgdGV4dF9wdHIsIDUpKSB7Ci0JCWNtZC0+Y21kX2ZsYWdzIHw9IElGQ19TRU5EVEFSR0VUU19TSU5HTEU7CisJCWNtZC0+Y21kX2ZsYWdzIHw9IElDRl9TRU5EVEFSR0VUU19TSU5HTEU7CiAJfSBlbHNlIHsKIAkJcHJfZXJyKCJVbmFibGUgdG8gbG9jYXRlIHZhbGlkIFNlbmRUYXJnZXRzPSVzIHZhbHVlXG4iLCB0ZXh0X3B0cik7CiAJCWdvdG8gcmVqZWN0OwpAQCAtMzQxNSwxMCArMzQxNSwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJLyoKLQkgKiBMb2NhdGUgcG9pbnRlciB0byBpcW4uL2V1aS4gc3RyaW5nIGZvciBJRkNfU0VORFRBUkdFVFNfU0lOR0xFCisJICogTG9jYXRlIHBvaW50ZXIgdG8gaXFuLi9ldWkuIHN0cmluZyBmb3IgSUNGX1NFTkRUQVJHRVRTX1NJTkdMRQogCSAqIGV4cGxpY2l0IGNhc2UuLgogCSAqLwotCWlmIChjbWQtPmNtZF9mbGFncyAmIElGQ19TRU5EVEFSR0VUU19TSU5HTEUpIHsKKwlpZiAoY21kLT5jbWRfZmxhZ3MgJiBJQ0ZfU0VORFRBUkdFVFNfU0lOR0xFKSB7CiAJCXRleHRfcHRyID0gc3RyY2hyKHRleHRfaW4sICc9Jyk7CiAJCWlmICghdGV4dF9wdHIpIHsKIAkJCXByX2VycigiVW5hYmxlIHRvIGxvY2F0ZSAnPScgc3RyaW5nIGluIHRleHRfaW46IgpAQCAtMzQzNCw3ICszNDM0LDcgQEAKIAogCXNwaW5fbG9jaygmdGlxbl9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRpcW4sICZnX3RpcW5fbGlzdCwgdGlxbl9saXN0KSB7Ci0JCWlmICgoY21kLT5jbWRfZmxhZ3MgJiBJRkNfU0VORFRBUkdFVFNfU0lOR0xFKSAmJgorCQlpZiAoKGNtZC0+Y21kX2ZsYWdzICYgSUNGX1NFTkRUQVJHRVRTX1NJTkdMRSkgJiYKIAkJICAgICBzdHJjbXAodGlxbi0+dGlxbiwgdGV4dF9wdHIpKSB7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMzUxMiw3ICszNTEyLDcgQEAKIAkJaWYgKGVuZF9vZl9idWYpCiAJCQlicmVhazsKIAotCQlpZiAoY21kLT5jbWRfZmxhZ3MgJiBJRkNfU0VORFRBUkdFVFNfU0lOR0xFKQorCQlpZiAoY21kLT5jbWRfZmxhZ3MgJiBJQ0ZfU0VORFRBUkdFVFNfU0lOR0xFKQogCQkJYnJlYWs7CiAJfQogCXNwaW5fdW5sb2NrKCZ0aXFuX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X2NvcmUuaCBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF9jb3JlLmgKaW5kZXggMDlhNTIyYi4uY2JjZmYzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X2NvcmUuaAorKysgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfY29yZS5oCkBAIC0xMzUsOCArMTM1LDggQEAKIAlJQ0ZfQ09OVElHX01FTU9SWQkJCT0gMHgwMDAwMDAyMCwKIAlJQ0ZfQVRUQUNIRURfVE9fUlFVRVVFCQkJPSAweDAwMDAwMDQwLAogCUlDRl9PT09fQ01EU04JCQkJPSAweDAwMDAwMDgwLAotCUlGQ19TRU5EVEFSR0VUU19BTEwJCQk9IDB4MDAwMDAxMDAsCi0JSUZDX1NFTkRUQVJHRVRTX1NJTkdMRQkJCT0gMHgwMDAwMDIwMCwKKwlJQ0ZfU0VORFRBUkdFVFNfQUxMCQkJPSAweDAwMDAwMTAwLAorCUlDRl9TRU5EVEFSR0VUU19TSU5HTEUJCQk9IDB4MDAwMDAyMDAsCiB9OwogCiAvKiBzdHJ1Y3QgaXNjc2lfY21kLT5pX3N0YXRlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCmluZGV4IDc2NTNjZmIuLjU4ZjQ5ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCkBAIC0xMTAzLDUxICsxMTAzLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2VfZGV2X3NldF9xdWV1ZV9kZXB0aCk7CiAKLWludCBzZV9kZXZfc2V0X2ZhYnJpY19tYXhfc2VjdG9ycyhzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYsIHUzMiBmYWJyaWNfbWF4X3NlY3RvcnMpCi17Ci0JaW50IGJsb2NrX3NpemUgPSBkZXYtPmRldl9hdHRyaWIuYmxvY2tfc2l6ZTsKLQotCWlmIChkZXYtPmV4cG9ydF9jb3VudCkgewotCQlwcl9lcnIoImRldlslcF06IFVuYWJsZSB0byBjaGFuZ2UgU0UgRGV2aWNlIgotCQkJIiBmYWJyaWNfbWF4X3NlY3RvcnMgd2hpbGUgZXhwb3J0X2NvdW50IGlzICVkXG4iLAotCQkJZGV2LCBkZXYtPmV4cG9ydF9jb3VudCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoIWZhYnJpY19tYXhfc2VjdG9ycykgewotCQlwcl9lcnIoImRldlslcF06IElsbGVnYWwgWkVSTyB2YWx1ZSBmb3IiCi0JCQkiIGZhYnJpY19tYXhfc2VjdG9yc1xuIiwgZGV2KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChmYWJyaWNfbWF4X3NlY3RvcnMgPCBEQV9TVEFUVVNfTUFYX1NFQ1RPUlNfTUlOKSB7Ci0JCXByX2VycigiZGV2WyVwXTogUGFzc2VkIGZhYnJpY19tYXhfc2VjdG9yczogJXUgbGVzcyB0aGFuIgotCQkJIiBEQV9TVEFUVVNfTUFYX1NFQ1RPUlNfTUlOOiAldVxuIiwgZGV2LCBmYWJyaWNfbWF4X3NlY3RvcnMsCi0JCQkJREFfU1RBVFVTX01BWF9TRUNUT1JTX01JTik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoZmFicmljX21heF9zZWN0b3JzID4gREFfU1RBVFVTX01BWF9TRUNUT1JTX01BWCkgewotCQlwcl9lcnIoImRldlslcF06IFBhc3NlZCBmYWJyaWNfbWF4X3NlY3RvcnM6ICV1IgotCQkJIiBncmVhdGVyIHRoYW4gREFfU1RBVFVTX01BWF9TRUNUT1JTX01BWDoiCi0JCQkiICV1XG4iLCBkZXYsIGZhYnJpY19tYXhfc2VjdG9ycywKLQkJCURBX1NUQVRVU19NQVhfU0VDVE9SU19NQVgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JLyoKLQkgKiBBbGlnbiBtYXhfc2VjdG9ycyBkb3duIHRvIFBBR0VfU0laRSB0byBmb2xsb3cgdHJhbnNwb3J0X2FsbG9jYXRlX2RhdGFfdGFza3MoKQotCSAqLwotCWlmICghYmxvY2tfc2l6ZSkgewotCQlibG9ja19zaXplID0gNTEyOwotCQlwcl93YXJuKCJEZWZhdWx0aW5nIHRvIDUxMiBmb3IgemVybyBibG9ja19zaXplXG4iKTsKLQl9Ci0JZmFicmljX21heF9zZWN0b3JzID0gc2VfZGV2X2FsaWduX21heF9zZWN0b3JzKGZhYnJpY19tYXhfc2VjdG9ycywKLQkJCQkJCSAgICAgIGJsb2NrX3NpemUpOwotCi0JZGV2LT5kZXZfYXR0cmliLmZhYnJpY19tYXhfc2VjdG9ycyA9IGZhYnJpY19tYXhfc2VjdG9yczsKLQlwcl9kZWJ1ZygiZGV2WyVwXTogU0UgRGV2aWNlIG1heF9zZWN0b3JzIGNoYW5nZWQgdG8gJXVcbiIsCi0JCQlkZXYsIGZhYnJpY19tYXhfc2VjdG9ycyk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKHNlX2Rldl9zZXRfZmFicmljX21heF9zZWN0b3JzKTsKLQogaW50IHNlX2Rldl9zZXRfb3B0aW1hbF9zZWN0b3JzKHN0cnVjdCBzZV9kZXZpY2UgKmRldiwgdTMyIG9wdGltYWxfc2VjdG9ycykKIHsKIAlpZiAoZGV2LT5leHBvcnRfY291bnQpIHsKQEAgLTExNTYsMTAgKzExMTEsMTAgQEAKIAkJCWRldiwgZGV2LT5leHBvcnRfY291bnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKG9wdGltYWxfc2VjdG9ycyA+IGRldi0+ZGV2X2F0dHJpYi5mYWJyaWNfbWF4X3NlY3RvcnMpIHsKKwlpZiAob3B0aW1hbF9zZWN0b3JzID4gZGV2LT5kZXZfYXR0cmliLmh3X21heF9zZWN0b3JzKSB7CiAJCXByX2VycigiZGV2WyVwXTogUGFzc2VkIG9wdGltYWxfc2VjdG9ycyAldSBjYW5ub3QgYmUiCi0JCQkiIGdyZWF0ZXIgdGhhbiBmYWJyaWNfbWF4X3NlY3RvcnM6ICV1XG4iLCBkZXYsCi0JCQlvcHRpbWFsX3NlY3RvcnMsIGRldi0+ZGV2X2F0dHJpYi5mYWJyaWNfbWF4X3NlY3RvcnMpOworCQkJIiBncmVhdGVyIHRoYW4gaHdfbWF4X3NlY3RvcnM6ICV1XG4iLCBkZXYsCisJCQlvcHRpbWFsX3NlY3RvcnMsIGRldi0+ZGV2X2F0dHJpYi5od19tYXhfc2VjdG9ycyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTU1Myw4ICsxNTA4LDYgQEAKIAlkZXYtPmRldl9hdHRyaWIudW5tYXBfZ3JhbnVsYXJpdHlfYWxpZ25tZW50ID0KIAkJCQlEQV9VTk1BUF9HUkFOVUxBUklUWV9BTElHTk1FTlRfREVGQVVMVDsKIAlkZXYtPmRldl9hdHRyaWIubWF4X3dyaXRlX3NhbWVfbGVuID0gREFfTUFYX1dSSVRFX1NBTUVfTEVOOwotCWRldi0+ZGV2X2F0dHJpYi5mYWJyaWNfbWF4X3NlY3RvcnMgPSBEQV9GQUJSSUNfTUFYX1NFQ1RPUlM7Ci0JZGV2LT5kZXZfYXR0cmliLm9wdGltYWxfc2VjdG9ycyA9IERBX0ZBQlJJQ19NQVhfU0VDVE9SUzsKIAogCXhjb3B5X2x1biA9ICZkZXYtPnhjb3B5X2x1bjsKIAl4Y29weV9sdW4tPmx1bl9zZV9kZXYgPSBkZXY7CkBAIC0xNTk1LDYgKzE1NDgsNyBAQAogCWRldi0+ZGV2X2F0dHJpYi5od19tYXhfc2VjdG9ycyA9CiAJCXNlX2Rldl9hbGlnbl9tYXhfc2VjdG9ycyhkZXYtPmRldl9hdHRyaWIuaHdfbWF4X3NlY3RvcnMsCiAJCQkJCSBkZXYtPmRldl9hdHRyaWIuaHdfYmxvY2tfc2l6ZSk7CisJZGV2LT5kZXZfYXR0cmliLm9wdGltYWxfc2VjdG9ycyA9IGRldi0+ZGV2X2F0dHJpYi5od19tYXhfc2VjdG9yczsKIAogCWRldi0+ZGV2X2luZGV4ID0gc2NzaV9nZXRfbmV3X2luZGV4KFNDU0lfREVWSUNFX0lOREVYKTsKIAlkZXYtPmNyZWF0aW9uX3RpbWUgPSBnZXRfamlmZmllc182NCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmlsZS5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmlsZS5jCmluZGV4IGMyYWVhMDkuLmQ4MzZkZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9maWxlLmMKQEAgLTYyMSw3ICs2MjEsMTYgQEAKIAlzdHJ1Y3QgZmRfcHJvdCBmZF9wcm90OwogCXNlbnNlX3JlYXNvbl90IHJjOwogCWludCByZXQgPSAwOwotCisJLyoKKwkgKiBXZSBhcmUgY3VycmVudGx5IGxpbWl0ZWQgYnkgdGhlIG51bWJlciBvZiBpb3ZlY3MgKDIwNDgpIHBlcgorCSAqIHNpbmdsZSB2ZnNfW3dyaXRldixyZWFkdl0gY2FsbC4KKwkgKi8KKwlpZiAoY21kLT5kYXRhX2xlbmd0aCA+IEZEX01BWF9CWVRFUykgeworCQlwcl9lcnIoIkZJTEVJTzogTm90IGFibGUgdG8gcHJvY2VzcyBJL08gb2YgJXUgYnl0ZXMgZHVlIHRvIgorCQkgICAgICAgIkZEX01BWF9CWVRFUzogJXUgaW92ZWMgY291bnQgbGltaXRpYXRpb25cbiIsCisJCQljbWQtPmRhdGFfbGVuZ3RoLCBGRF9NQVhfQllURVMpOworCQlyZXR1cm4gVENNX0xPR0lDQUxfVU5JVF9DT01NVU5JQ0FUSU9OX0ZBSUxVUkU7CisJfQogCS8qCiAJICogQ2FsbCB2ZWN0b3JpemVkIGZpbGVpbyBmdW5jdGlvbnMgdG8gbWFwIHN0cnVjdCBzY2F0dGVybGlzdAogCSAqIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzZXMgdG8gc3RydWN0IGlvdmVjIHZpcnR1YWwgbWVtb3J5LgpAQCAtOTU5LDcgKzk2OCw2IEBACiAJJmZpbGVpb19kZXZfYXR0cmliX2h3X2Jsb2NrX3NpemUuYXR0ciwKIAkmZmlsZWlvX2Rldl9hdHRyaWJfYmxvY2tfc2l6ZS5hdHRyLAogCSZmaWxlaW9fZGV2X2F0dHJpYl9od19tYXhfc2VjdG9ycy5hdHRyLAotCSZmaWxlaW9fZGV2X2F0dHJpYl9mYWJyaWNfbWF4X3NlY3RvcnMuYXR0ciwKIAkmZmlsZWlvX2Rldl9hdHRyaWJfb3B0aW1hbF9zZWN0b3JzLmF0dHIsCiAJJmZpbGVpb19kZXZfYXR0cmliX2h3X3F1ZXVlX2RlcHRoLmF0dHIsCiAJJmZpbGVpb19kZXZfYXR0cmliX3F1ZXVlX2RlcHRoLmF0dHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9pYmxvY2suYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2libG9jay5jCmluZGV4IDNlZmZmOTQuLjc4MzQ2YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2libG9jay5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2libG9jay5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAlxID0gYmRldl9nZXRfcXVldWUoYmQpOwogCiAJZGV2LT5kZXZfYXR0cmliLmh3X2Jsb2NrX3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZCk7Ci0JZGV2LT5kZXZfYXR0cmliLmh3X21heF9zZWN0b3JzID0gVUlOVF9NQVg7CisJZGV2LT5kZXZfYXR0cmliLmh3X21heF9zZWN0b3JzID0gcXVldWVfbWF4X2h3X3NlY3RvcnMocSk7CiAJZGV2LT5kZXZfYXR0cmliLmh3X3F1ZXVlX2RlcHRoID0gcS0+bnJfcmVxdWVzdHM7CiAKIAkvKgpAQCAtODgzLDcgKzg4Myw2IEBACiAJJmlibG9ja19kZXZfYXR0cmliX2h3X2Jsb2NrX3NpemUuYXR0ciwKIAkmaWJsb2NrX2Rldl9hdHRyaWJfYmxvY2tfc2l6ZS5hdHRyLAogCSZpYmxvY2tfZGV2X2F0dHJpYl9od19tYXhfc2VjdG9ycy5hdHRyLAotCSZpYmxvY2tfZGV2X2F0dHJpYl9mYWJyaWNfbWF4X3NlY3RvcnMuYXR0ciwKIAkmaWJsb2NrX2Rldl9hdHRyaWJfb3B0aW1hbF9zZWN0b3JzLmF0dHIsCiAJJmlibG9ja19kZXZfYXR0cmliX2h3X3F1ZXVlX2RlcHRoLmF0dHIsCiAJJmlibG9ja19kZXZfYXR0cmliX3F1ZXVlX2RlcHRoLmF0dHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHIuYwppbmRleCBkNTZmMmFhLi4yODNjZjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMKQEAgLTUyOCw2ICs1MjgsMTggQEAKIAogCQkJcmV0dXJuIDA7CiAJCX0KKyAgICAgICB9IGVsc2UgaWYgKHdlICYmIHJlZ2lzdGVyZWRfbmV4dXMpIHsKKyAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgKiBSZWFkcyBhcmUgYWxsb3dlZCBmb3IgV3JpdGUgRXhjbHVzaXZlIGxvY2tzCisgICAgICAgICAgICAgICAgKiBmcm9tIGFsbCByZWdpc3RyYW50cy4KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgaWYgKGNtZC0+ZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSB7CisgICAgICAgICAgICAgICAgICAgICAgIHByX2RlYnVnKCJBbGxvd2luZyBSRUFEIENEQjogMHglMDJ4IGZvciAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlc2VydmF0aW9uXG4iLCBjZGJbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9zY3NpM19wcl9kdW1wX3R5cGUocHJfcmVnX3R5cGUpKTsKKworICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgIH0KIAl9CiAJcHJfZGVidWcoIiVzIENvbmZsaWN0IGZvciAlc3JlZ2lzdGVyZWQgbmV4dXMgJXMgQ0RCOiAweCUyeCIKIAkJIiBmb3IgJXMgcmVzZXJ2YXRpb25cbiIsIHRyYW5zcG9ydF9kdW1wX2NtZF9kaXJlY3Rpb24oY21kKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3JkLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9yZC5jCmluZGV4IDYwZWJkMTcuLjk4ZTgzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3JkLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcmQuYwpAQCAtNjU3LDcgKzY1Nyw2IEBACiAJJnJkX21jcF9kZXZfYXR0cmliX2h3X2Jsb2NrX3NpemUuYXR0ciwKIAkmcmRfbWNwX2Rldl9hdHRyaWJfYmxvY2tfc2l6ZS5hdHRyLAogCSZyZF9tY3BfZGV2X2F0dHJpYl9od19tYXhfc2VjdG9ycy5hdHRyLAotCSZyZF9tY3BfZGV2X2F0dHJpYl9mYWJyaWNfbWF4X3NlY3RvcnMuYXR0ciwKIAkmcmRfbWNwX2Rldl9hdHRyaWJfb3B0aW1hbF9zZWN0b3JzLmF0dHIsCiAJJnJkX21jcF9kZXZfYXR0cmliX2h3X3F1ZXVlX2RlcHRoLmF0dHIsCiAJJnJkX21jcF9kZXZfYXR0cmliX3F1ZXVlX2RlcHRoLmF0dHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zYmMuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NiYy5jCmluZGV4IDExYmVhMTkuLmNkNGJlZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NiYy5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NiYy5jCkBAIC05NTMsMjEgKzk1Myw2IEBACiAKIAlpZiAoY21kLT5zZV9jbWRfZmxhZ3MgJiBTQ0ZfU0NTSV9EQVRBX0NEQikgewogCQl1bnNpZ25lZCBsb25nIGxvbmcgZW5kX2xiYTsKLQotCQlpZiAoc2VjdG9ycyA+IGRldi0+ZGV2X2F0dHJpYi5mYWJyaWNfbWF4X3NlY3RvcnMpIHsKLQkJCXByaW50a19yYXRlbGltaXRlZChLRVJOX0VSUiAiU0NTSSBPUCAlMDJ4aCB3aXRoIHRvbyIKLQkJCQkiIGJpZyBzZWN0b3JzICV1IGV4Y2VlZHMgZmFicmljX21heF9zZWN0b3JzOiIKLQkJCQkiICV1XG4iLCBjZGJbMF0sIHNlY3RvcnMsCi0JCQkJZGV2LT5kZXZfYXR0cmliLmZhYnJpY19tYXhfc2VjdG9ycyk7Ci0JCQlyZXR1cm4gVENNX0lOVkFMSURfQ0RCX0ZJRUxEOwotCQl9Ci0JCWlmIChzZWN0b3JzID4gZGV2LT5kZXZfYXR0cmliLmh3X21heF9zZWN0b3JzKSB7Ci0JCQlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9FUlIgIlNDU0kgT1AgJTAyeGggd2l0aCB0b28iCi0JCQkJIiBiaWcgc2VjdG9ycyAldSBleGNlZWRzIGJhY2tlbmQgaHdfbWF4X3NlY3RvcnM6IgotCQkJCSIgJXVcbiIsIGNkYlswXSwgc2VjdG9ycywKLQkJCQlkZXYtPmRldl9hdHRyaWIuaHdfbWF4X3NlY3RvcnMpOwotCQkJcmV0dXJuIFRDTV9JTlZBTElEX0NEQl9GSUVMRDsKLQkJfQogY2hlY2tfbGJhOgogCQllbmRfbGJhID0gZGV2LT50cmFuc3BvcnQtPmdldF9ibG9ja3MoZGV2KSArIDE7CiAJCWlmIChjbWQtPnRfdGFza19sYmEgKyBzZWN0b3JzID4gZW5kX2xiYSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfc3BjLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zcGMuYwppbmRleCAxMzA3NjAwZi4uNGM3MTY1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfc3BjLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfc3BjLmMKQEAgLTUwNSw3ICs1MDUsNiBAQAogc3BjX2VtdWxhdGVfZXZwZF9iMChzdHJ1Y3Qgc2VfY21kICpjbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBjbWQtPnNlX2RldjsKLQl1MzIgbWF4X3NlY3RvcnM7CiAJaW50IGhhdmVfdHAgPSAwOwogCWludCBvcHQsIG1pbjsKIApAQCAtNTM5LDkgKzUzOCw3IEBACiAJLyoKIAkgKiBTZXQgTUFYSU1VTSBUUkFOU0ZFUiBMRU5HVEgKIAkgKi8KLQltYXhfc2VjdG9ycyA9IG1pbihkZXYtPmRldl9hdHRyaWIuZmFicmljX21heF9zZWN0b3JzLAotCQkJICBkZXYtPmRldl9hdHRyaWIuaHdfbWF4X3NlY3RvcnMpOwotCXB1dF91bmFsaWduZWRfYmUzMihtYXhfc2VjdG9ycywgJmJ1Zls4XSk7CisJcHV0X3VuYWxpZ25lZF9iZTMyKGRldi0+ZGV2X2F0dHJpYi5od19tYXhfc2VjdG9ycywgJmJ1Zls4XSk7CiAKIAkvKgogCSAqIFNldCBPUFRJTUFMIFRSQU5TRkVSIExFTkdUSApkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdXNlci5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdXNlci5jCmluZGV4IDhiZmE2MWMuLjExNTdiNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91c2VyLmMKQEAgLTExMTgsNyArMTExOCw2IEBACiAJJnRjbXVfZGV2X2F0dHJpYl9od19ibG9ja19zaXplLmF0dHIsCiAJJnRjbXVfZGV2X2F0dHJpYl9ibG9ja19zaXplLmF0dHIsCiAJJnRjbXVfZGV2X2F0dHJpYl9od19tYXhfc2VjdG9ycy5hdHRyLAotCSZ0Y211X2Rldl9hdHRyaWJfZmFicmljX21heF9zZWN0b3JzLmF0dHIsCiAJJnRjbXVfZGV2X2F0dHJpYl9vcHRpbWFsX3NlY3RvcnMuYXR0ciwKIAkmdGNtdV9kZXZfYXR0cmliX2h3X3F1ZXVlX2RlcHRoLmF0dHIsCiAJJnRjbXVfZGV2X2F0dHJpYl9xdWV1ZV9kZXB0aC5hdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2NwdV9jb29saW5nLmMgYi9kcml2ZXJzL3RoZXJtYWwvY3B1X2Nvb2xpbmcuYwppbmRleCBhZDA5ZTUxLi5mNjVmMGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvY3B1X2Nvb2xpbmcuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvY3B1X2Nvb2xpbmcuYwpAQCAtNCw2ICs0LDggQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMTIJU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZChodHRwOi8vd3d3LnNhbXN1bmcuY29tKQogICogIENvcHlyaWdodCAoQykgMjAxMiAgQW1pdCBEYW5pZWwgPGFtaXQua2FjaGhhcEBsaW5hcm8ub3JnPgogICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgIFZpcmVzaCBLdW1hciA8dmlyZXNoLmt1bWFyQGxpbmFyby5vcmc+CisgKgogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yOCw2ICszMCwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdV9jb29saW5nLmg+CiAKKy8qCisgKiBDb29saW5nIHN0YXRlIDwtPiBDUFVGcmVxIGZyZXF1ZW5jeQorICoKKyAqIENvb2xpbmcgc3RhdGVzIGFyZSB0cmFuc2xhdGVkIHRvIGZyZXF1ZW5jaWVzIHRocm91Z2hvdXQgdGhpcyBkcml2ZXIgYW5kIHRoaXMKKyAqIGlzIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZW0uCisgKgorICogSGlnaGVzdCBjb29saW5nIHN0YXRlIGNvcnJlc3BvbmRzIHRvIGxvd2VzdCBwb3NzaWJsZSBmcmVxdWVuY3kuCisgKgorICogaS5lLgorICoJbGV2ZWwgMCAtLT4gMXN0IE1heCBGcmVxCisgKglsZXZlbCAxIC0tPiAybmQgTWF4IEZyZXEKKyAqCS4uLgorICovCisKIC8qKgogICogc3RydWN0IGNwdWZyZXFfY29vbGluZ19kZXZpY2UgLSBkYXRhIGZvciBjb29saW5nIGRldmljZSB3aXRoIGNwdWZyZXEKICAqIEBpZDogdW5pcXVlIGludGVnZXIgdmFsdWUgY29ycmVzcG9uZGluZyB0byBlYWNoIGNwdWZyZXFfY29vbGluZ19kZXZpY2UKQEAgLTM4LDI1ICs1NCwyNyBAQAogICoJY29vbGluZwlkZXZpY2VzLgogICogQGNwdWZyZXFfdmFsOiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGNsaXBwZWQKICAqCWZyZXF1ZW5jeS4KKyAqIEBtYXhfbGV2ZWw6IG1heGltdW0gY29vbGluZyBsZXZlbC4gT25lIGxlc3MgdGhhbiB0b3RhbCBudW1iZXIgb2YgdmFsaWQKKyAqCWNwdWZyZXEgZnJlcXVlbmNpZXMuCiAgKiBAYWxsb3dlZF9jcHVzOiBhbGwgdGhlIGNwdXMgaW52b2x2ZWQgZm9yIHRoaXMgY3B1ZnJlcV9jb29saW5nX2RldmljZS4KKyAqIEBub2RlOiBsaXN0X2hlYWQgdG8gbGluayBhbGwgY3B1ZnJlcV9jb29saW5nX2RldmljZSB0b2dldGhlci4KICAqCi0gKiBUaGlzIHN0cnVjdHVyZSBpcyByZXF1aXJlZCBmb3Iga2VlcGluZyBpbmZvcm1hdGlvbiBvZiBlYWNoCi0gKiBjcHVmcmVxX2Nvb2xpbmdfZGV2aWNlIHJlZ2lzdGVyZWQuIEluIG9yZGVyIHRvIHByZXZlbnQgY29ycnVwdGlvbiBvZiB0aGlzIGEKLSAqIG11dGV4IGxvY2sgY29vbGluZ19jcHVmcmVxX2xvY2sgaXMgdXNlZC4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIHJlcXVpcmVkIGZvciBrZWVwaW5nIGluZm9ybWF0aW9uIG9mIGVhY2ggcmVnaXN0ZXJlZAorICogY3B1ZnJlcV9jb29saW5nX2RldmljZS4KICAqLwogc3RydWN0IGNwdWZyZXFfY29vbGluZ19kZXZpY2UgewogCWludCBpZDsKIAlzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY29vbF9kZXY7CiAJdW5zaWduZWQgaW50IGNwdWZyZXFfc3RhdGU7CiAJdW5zaWduZWQgaW50IGNwdWZyZXFfdmFsOworCXVuc2lnbmVkIGludCBtYXhfbGV2ZWw7CisJdW5zaWduZWQgaW50ICpmcmVxX3RhYmxlOwkvKiBJbiBkZXNjZW5kaW5nIG9yZGVyICovCiAJc3RydWN0IGNwdW1hc2sgYWxsb3dlZF9jcHVzOwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIH07CiBzdGF0aWMgREVGSU5FX0lEUihjcHVmcmVxX2lkcik7CiBzdGF0aWMgREVGSU5FX01VVEVYKGNvb2xpbmdfY3B1ZnJlcV9sb2NrKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBjcHVmcmVxX2Rldl9jb3VudDsKLQogc3RhdGljIExJU1RfSEVBRChjcHVmcmVxX2Rldl9saXN0KTsKIAogLyoqCkBAIC05OCwxMjAgKzExNiwzMCBAQAogLyogQmVsb3cgY29kZSBkZWZpbmVzIGZ1bmN0aW9ucyB0byBiZSB1c2VkIGZvciBjcHVmcmVxIGFzIGNvb2xpbmcgZGV2aWNlICovCiAKIC8qKgotICogaXNfY3B1ZnJlcV92YWxpZCAtIGZ1bmN0aW9uIHRvIGNoZWNrIGZyZXF1ZW5jeSB0cmFuc2l0aW9uaW5nIGNhcGFiaWxpdHkuCi0gKiBAY3B1OiBjcHUgZm9yIHdoaWNoIGNoZWNrIGlzIG5lZWRlZC4KKyAqIGdldF9sZXZlbDogRmluZCB0aGUgbGV2ZWwgZm9yIGEgcGFydGljdWxhciBmcmVxdWVuY3kKKyAqIEBjcHVmcmVxX2RldjogY3B1ZnJlcV9kZXYgZm9yIHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyByZXF1aXJlZAorICogQGZyZXE6IEZyZXF1ZW5jeQogICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3lzdGVtIGlmCi0gKiBpdCBpcyBjYXBhYmxlIG9mIGNoYW5naW5nIHRoZSBmcmVxdWVuY3kgZm9yIGEgZ2l2ZW4gQGNwdS4KLSAqCi0gKiBSZXR1cm46IDAgaWYgdGhlIHN5c3RlbSBpcyBub3QgY3VycmVudGx5IGNhcGFibGUgb2YgY2hhbmdpbmcKLSAqIHRoZSBmcmVxdWVuY3kgb2YgZ2l2ZW4gY3B1LiAhMCBpbiBjYXNlIHRoZSBmcmVxdWVuY3kgaXMgY2hhbmdlYWJsZS4KKyAqIFJldHVybjogbGV2ZWwgb24gc3VjY2VzcywgVEhFUk1BTF9DU1RBVEVfSU5WQUxJRCBvbiBlcnJvci4KICAqLwotc3RhdGljIGludCBpc19jcHVmcmVxX3ZhbGlkKGludCBjcHUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfbGV2ZWwoc3RydWN0IGNwdWZyZXFfY29vbGluZ19kZXZpY2UgKmNwdWZyZXFfZGV2LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBmcmVxKQogewotCXN0cnVjdCBjcHVmcmVxX3BvbGljeSBwb2xpY3k7CisJdW5zaWduZWQgbG9uZyBsZXZlbDsKIAotCXJldHVybiAhY3B1ZnJlcV9nZXRfcG9saWN5KCZwb2xpY3ksIGNwdSk7Ci19CisJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9IGNwdWZyZXFfZGV2LT5tYXhfbGV2ZWw7IGxldmVsKyspIHsKKwkJaWYgKGZyZXEgPT0gY3B1ZnJlcV9kZXYtPmZyZXFfdGFibGVbbGV2ZWxdKQorCQkJcmV0dXJuIGxldmVsOwogCi1lbnVtIGNwdWZyZXFfY29vbGluZ19wcm9wZXJ0eSB7Ci0JR0VUX0xFVkVMLAotCUdFVF9GUkVRLAotCUdFVF9NQVhMLAotfTsKLQotLyoqCi0gKiBnZXRfcHJvcGVydHkgLSBmZXRjaCBhIHByb3BlcnR5IG9mIGludGVyZXN0IGZvciBhIGdpdmUgY3B1LgotICogQGNwdTogY3B1IGZvciB3aGljaCB0aGUgcHJvcGVydHkgaXMgcmVxdWlyZWQKLSAqIEBpbnB1dDogcXVlcnkgcGFyYW1ldGVyCi0gKiBAb3V0cHV0OiBxdWVyeSByZXR1cm4KLSAqIEBwcm9wZXJ0eTogdHlwZSBvZiBxdWVyeSAoZnJlcXVlbmN5LCBsZXZlbCwgbWF4IGxldmVsKQotICoKLSAqIFRoaXMgaXMgdGhlIGNvbW1vbiBmdW5jdGlvbiB0bwotICogMS4gZ2V0IG1heGltdW0gY3B1IGNvb2xpbmcgc3RhdGVzCi0gKiAyLiB0cmFuc2xhdGUgZnJlcXVlbmN5IHRvIGNvb2xpbmcgc3RhdGUKLSAqIDMuIHRyYW5zbGF0ZSBjb29saW5nIHN0YXRlIHRvIGZyZXF1ZW5jeQotICogTm90ZSB0aGF0IHRoZSBjb2RlIG1heSBiZSBub3QgaW4gZ29vZCBzaGFwZQotICogYnV0IGl0IGlzIHdyaXR0ZW4gaW4gdGhpcyB3YXkgaW4gb3JkZXIgdG86Ci0gKiBhKSByZWR1Y2UgZHVwbGljYXRlIGNvZGUgYXMgbW9zdCBvZiB0aGUgY29kZSBjYW4gYmUgc2hhcmVkLgotICogYikgbWFrZSBzdXJlIHRoZSBsb2dpYyBpcyBjb25zaXN0ZW50IHdoZW4gdHJhbnNsYXRpbmcgYmV0d2VlbgotICogICAgY29vbGluZyBzdGF0ZXMgYW5kIGZyZXF1ZW5jaWVzLgotICoKLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIHdoZW4gaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQuCi0gKi8KLXN0YXRpYyBpbnQgZ2V0X3Byb3BlcnR5KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgaW5wdXQsCi0JCQl1bnNpZ25lZCBpbnQgKm91dHB1dCwKLQkJCWVudW0gY3B1ZnJlcV9jb29saW5nX3Byb3BlcnR5IHByb3BlcnR5KQotewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgbWF4X2xldmVsID0gMCwgbGV2ZWwgPSAwOwotCXVuc2lnbmVkIGludCBmcmVxID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOwotCWludCBkZXNjZW5kID0gLTE7Ci0Jc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3MsICp0YWJsZSA9Ci0JCQkJCWNwdWZyZXFfZnJlcXVlbmN5X2dldF90YWJsZShjcHUpOwotCi0JaWYgKCFvdXRwdXQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCF0YWJsZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljcHVmcmVxX2Zvcl9lYWNoX3ZhbGlkX2VudHJ5KHBvcywgdGFibGUpIHsKLQkJLyogaWdub3JlIGR1cGxpY2F0ZSBlbnRyeSAqLwotCQlpZiAoZnJlcSA9PSBwb3MtPmZyZXF1ZW5jeSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGdldCB0aGUgZnJlcXVlbmN5IG9yZGVyICovCi0JCWlmIChmcmVxICE9IENQVUZSRVFfRU5UUllfSU5WQUxJRCAmJiBkZXNjZW5kID09IC0xKQotCQkJZGVzY2VuZCA9IGZyZXEgPiBwb3MtPmZyZXF1ZW5jeTsKLQotCQlmcmVxID0gcG9zLT5mcmVxdWVuY3k7Ci0JCW1heF9sZXZlbCsrOworCQlpZiAoZnJlcSA+IGNwdWZyZXFfZGV2LT5mcmVxX3RhYmxlW2xldmVsXSkKKwkJCWJyZWFrOwogCX0KIAotCS8qIE5vIHZhbGlkIGNwdSBmcmVxdWVuY3kgZW50cnkgKi8KLQlpZiAobWF4X2xldmVsID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogbWF4X2xldmVsIGlzIGFuIGluZGV4LCBub3QgYSBjb3VudGVyICovCi0JbWF4X2xldmVsLS07Ci0KLQkvKiBnZXQgbWF4IGxldmVsICovCi0JaWYgKHByb3BlcnR5ID09IEdFVF9NQVhMKSB7Ci0JCSpvdXRwdXQgPSAodW5zaWduZWQgaW50KW1heF9sZXZlbDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHByb3BlcnR5ID09IEdFVF9GUkVRKQotCQlsZXZlbCA9IGRlc2NlbmQgPyBpbnB1dCA6IChtYXhfbGV2ZWwgLSBpbnB1dCk7Ci0KLQlpID0gMDsKLQljcHVmcmVxX2Zvcl9lYWNoX3ZhbGlkX2VudHJ5KHBvcywgdGFibGUpIHsKLQkJLyogaWdub3JlIGR1cGxpY2F0ZSBlbnRyeSAqLwotCQlpZiAoZnJlcSA9PSBwb3MtPmZyZXF1ZW5jeSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIG5vdyB3ZSBoYXZlIGEgdmFsaWQgZnJlcXVlbmN5IGVudHJ5ICovCi0JCWZyZXEgPSBwb3MtPmZyZXF1ZW5jeTsKLQotCQlpZiAocHJvcGVydHkgPT0gR0VUX0xFVkVMICYmICh1bnNpZ25lZCBpbnQpaW5wdXQgPT0gZnJlcSkgewotCQkJLyogZ2V0IGxldmVsIGJ5IGZyZXF1ZW5jeSAqLwotCQkJKm91dHB1dCA9IGRlc2NlbmQgPyBpIDogKG1heF9sZXZlbCAtIGkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaWYgKHByb3BlcnR5ID09IEdFVF9GUkVRICYmIGxldmVsID09IGkpIHsKLQkJCS8qIGdldCBmcmVxdWVuY3kgYnkgbGV2ZWwgKi8KLQkJCSpvdXRwdXQgPSBmcmVxOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaSsrOwotCX0KLQotCXJldHVybiAtRUlOVkFMOworCXJldHVybiBUSEVSTUFMX0NTVEFURV9JTlZBTElEOwogfQogCiAvKioKLSAqIGNwdWZyZXFfY29vbGluZ19nZXRfbGV2ZWwgLSBmb3IgYSBnaXZlIGNwdSwgcmV0dXJuIHRoZSBjb29saW5nIGxldmVsLgorICogY3B1ZnJlcV9jb29saW5nX2dldF9sZXZlbCAtIGZvciBhIGdpdmVuIGNwdSwgcmV0dXJuIHRoZSBjb29saW5nIGxldmVsLgogICogQGNwdTogY3B1IGZvciB3aGljaCB0aGUgbGV2ZWwgaXMgcmVxdWlyZWQKICAqIEBmcmVxOiB0aGUgZnJlcXVlbmN5IG9mIGludGVyZXN0CiAgKgpAQCAtMjIzLDc5ICsxNTEsMjMgQEAKICAqLwogdW5zaWduZWQgbG9uZyBjcHVmcmVxX2Nvb2xpbmdfZ2V0X2xldmVsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBmcmVxKQogewotCXVuc2lnbmVkIGludCB2YWw7CisJc3RydWN0IGNwdWZyZXFfY29vbGluZ19kZXZpY2UgKmNwdWZyZXFfZGV2OwogCi0JaWYgKGdldF9wcm9wZXJ0eShjcHUsICh1bnNpZ25lZCBsb25nKWZyZXEsICZ2YWwsIEdFVF9MRVZFTCkpCi0JCXJldHVybiBUSEVSTUFMX0NTVEFURV9JTlZBTElEOworCW11dGV4X2xvY2soJmNvb2xpbmdfY3B1ZnJlcV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwdWZyZXFfZGV2LCAmY3B1ZnJlcV9kZXZfbGlzdCwgbm9kZSkgeworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsICZjcHVmcmVxX2Rldi0+YWxsb3dlZF9jcHVzKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZjb29saW5nX2NwdWZyZXFfbG9jayk7CisJCQlyZXR1cm4gZ2V0X2xldmVsKGNwdWZyZXFfZGV2LCBmcmVxKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmNvb2xpbmdfY3B1ZnJlcV9sb2NrKTsKIAotCXJldHVybiAodW5zaWduZWQgbG9uZyl2YWw7CisJcHJfZXJyKCIlczogY3B1OiVkIG5vdCBwYXJ0IG9mIGFueSBjb29saW5nIGRldmljZVxuIiwgX19mdW5jX18sIGNwdSk7CisJcmV0dXJuIFRIRVJNQUxfQ1NUQVRFX0lOVkFMSUQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX2Nvb2xpbmdfZ2V0X2xldmVsKTsKIAogLyoqCi0gKiBnZXRfY3B1X2ZyZXF1ZW5jeSAtIGdldCB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgZnJlcXVlbmN5IGZyb20gbGV2ZWwuCi0gKiBAY3B1OiBjcHUgZm9yIHdoaWNoIGZyZXF1ZW5jeSBpcyBmZXRjaGVkLgotICogQGxldmVsOiBjb29saW5nIGxldmVsCi0gKgotICogVGhpcyBmdW5jdGlvbiBtYXRjaGVzIGNvb2xpbmcgbGV2ZWwgd2l0aCBmcmVxdWVuY3kuIEJhc2VkIG9uIGEgY29vbGluZyBsZXZlbAotICogb2YgZnJlcXVlbmN5LCBlcXVhbHMgY29vbGluZyBzdGF0ZSBvZiBjcHUgY29vbGluZyBkZXZpY2UsIGl0IHdpbGwgcmV0dXJuCi0gKiB0aGUgY29ycmVzcG9uZGluZyBmcmVxdWVuY3kuCi0gKgllLmcgbGV2ZWw9MCAtLT4gMXN0IE1BWCBGUkVRLCBsZXZlbD0xIC0tLT4gMm5kIE1BWCBGUkVRLCAuLi4uIGV0YwotICoKLSAqIFJldHVybjogMCBvbiBlcnJvciwgdGhlIGNvcnJlc3BvbmRpbmcgZnJlcXVlbmN5IG90aGVyd2lzZS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY3B1X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGxldmVsKQotewotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGludCBmcmVxOwotCi0JcmV0ID0gZ2V0X3Byb3BlcnR5KGNwdSwgbGV2ZWwsICZmcmVxLCBHRVRfRlJFUSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gZnJlcTsKLX0KLQotLyoqCi0gKiBjcHVmcmVxX2FwcGx5X2Nvb2xpbmcgLSBmdW5jdGlvbiB0byBhcHBseSBmcmVxdWVuY3kgY2xpcHBpbmcuCi0gKiBAY3B1ZnJlcV9kZXZpY2U6IGNwdWZyZXFfY29vbGluZ19kZXZpY2UgcG9pbnRlciBjb250YWluaW5nIGZyZXF1ZW5jeQotICoJY2xpcHBpbmcgZGF0YS4KLSAqIEBjb29saW5nX3N0YXRlOiB2YWx1ZSBvZiB0aGUgY29vbGluZyBzdGF0ZS4KLSAqCi0gKiBGdW5jdGlvbiB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgY3B1ZnJlcSBsYXllciBpcyBhd2FyZSBvZiBjdXJyZW50IHRoZXJtYWwKLSAqIGxpbWl0cy4gVGhlIGxpbWl0cyBhcmUgYXBwbGllZCBieSB1cGRhdGluZyB0aGUgY3B1ZnJlcSBwb2xpY3kuCi0gKgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlICgtRUlOVkFMIGluIGNhc2Ugd3JvbmcKLSAqIGNvb2xpbmcgc3RhdGUpLgotICovCi1zdGF0aWMgaW50IGNwdWZyZXFfYXBwbHlfY29vbGluZyhzdHJ1Y3QgY3B1ZnJlcV9jb29saW5nX2RldmljZSAqY3B1ZnJlcV9kZXZpY2UsCi0JCQkJIHVuc2lnbmVkIGxvbmcgY29vbGluZ19zdGF0ZSkKLXsKLQl1bnNpZ25lZCBpbnQgY3B1aWQsIGNsaXBfZnJlcTsKLQlzdHJ1Y3QgY3B1bWFzayAqbWFzayA9ICZjcHVmcmVxX2RldmljZS0+YWxsb3dlZF9jcHVzOwotCXVuc2lnbmVkIGludCBjcHUgPSBjcHVtYXNrX2FueShtYXNrKTsKLQotCi0JLyogQ2hlY2sgaWYgdGhlIG9sZCBjb29saW5nIGFjdGlvbiBpcyBzYW1lIGFzIG5ldyBjb29saW5nIGFjdGlvbiAqLwotCWlmIChjcHVmcmVxX2RldmljZS0+Y3B1ZnJlcV9zdGF0ZSA9PSBjb29saW5nX3N0YXRlKQotCQlyZXR1cm4gMDsKLQotCWNsaXBfZnJlcSA9IGdldF9jcHVfZnJlcXVlbmN5KGNwdSwgY29vbGluZ19zdGF0ZSk7Ci0JaWYgKCFjbGlwX2ZyZXEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY3B1ZnJlcV9kZXZpY2UtPmNwdWZyZXFfc3RhdGUgPSBjb29saW5nX3N0YXRlOwotCWNwdWZyZXFfZGV2aWNlLT5jcHVmcmVxX3ZhbCA9IGNsaXBfZnJlcTsKLQotCWZvcl9lYWNoX2NwdShjcHVpZCwgbWFzaykgewotCQlpZiAoaXNfY3B1ZnJlcV92YWxpZChjcHVpZCkpCi0JCQljcHVmcmVxX3VwZGF0ZV9wb2xpY3koY3B1aWQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKICAqIGNwdWZyZXFfdGhlcm1hbF9ub3RpZmllciAtIG5vdGlmaWVyIGNhbGxiYWNrIGZvciBjcHVmcmVxIHBvbGljeSBjaGFuZ2UuCiAgKiBAbmI6CXN0cnVjdCBub3RpZmllcl9ibG9jayAqIHdpdGggY2FsbGJhY2sgaW5mby4KICAqIEBldmVudDogdmFsdWUgc2hvd2luZyBjcHVmcmVxIGV2ZW50IGZvciB3aGljaCB0aGlzIGZ1bmN0aW9uIGludm9rZWQuCkBAIC0zMjMsMTEgKzE5NSw2IEBACiAJCQkJCSZjcHVmcmVxX2Rldi0+YWxsb3dlZF9jcHVzKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghY3B1ZnJlcV9kZXYtPmNwdWZyZXFfdmFsKQotCQkJY3B1ZnJlcV9kZXYtPmNwdWZyZXFfdmFsID0gZ2V0X2NwdV9mcmVxdWVuY3koCi0JCQkJCWNwdW1hc2tfYW55KCZjcHVmcmVxX2Rldi0+YWxsb3dlZF9jcHVzKSwKLQkJCQkJY3B1ZnJlcV9kZXYtPmNwdWZyZXFfc3RhdGUpOwotCiAJCW1heF9mcmVxID0gY3B1ZnJlcV9kZXYtPmNwdWZyZXFfdmFsOwogCiAJCWlmIChwb2xpY3ktPm1heCAhPSBtYXhfZnJlcSkKQEAgLTM1NCwxOSArMjIxLDkgQEAKIAkJCQkgdW5zaWduZWQgbG9uZyAqc3RhdGUpCiB7CiAJc3RydWN0IGNwdWZyZXFfY29vbGluZ19kZXZpY2UgKmNwdWZyZXFfZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKLQlzdHJ1Y3QgY3B1bWFzayAqbWFzayA9ICZjcHVmcmVxX2RldmljZS0+YWxsb3dlZF9jcHVzOwotCXVuc2lnbmVkIGludCBjcHU7Ci0JdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQlpbnQgcmV0OwogCi0JY3B1ID0gY3B1bWFza19hbnkobWFzayk7Ci0KLQlyZXQgPSBnZXRfcHJvcGVydHkoY3B1LCAwLCAmY291bnQsIEdFVF9NQVhMKTsKLQotCWlmIChjb3VudCA+IDApCi0JCSpzdGF0ZSA9IGNvdW50OwotCi0JcmV0dXJuIHJldDsKKwkqc3RhdGUgPSBjcHVmcmVxX2RldmljZS0+bWF4X2xldmVsOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTQwMyw4ICsyNjAsMjQgQEAKIAkJCQkgdW5zaWduZWQgbG9uZyBzdGF0ZSkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9jb29saW5nX2RldmljZSAqY3B1ZnJlcV9kZXZpY2UgPSBjZGV2LT5kZXZkYXRhOworCXVuc2lnbmVkIGludCBjcHUgPSBjcHVtYXNrX2FueSgmY3B1ZnJlcV9kZXZpY2UtPmFsbG93ZWRfY3B1cyk7CisJdW5zaWduZWQgaW50IGNsaXBfZnJlcTsKIAotCXJldHVybiBjcHVmcmVxX2FwcGx5X2Nvb2xpbmcoY3B1ZnJlcV9kZXZpY2UsIHN0YXRlKTsKKwkvKiBSZXF1ZXN0IHN0YXRlIHNob3VsZCBiZSBsZXNzIHRoYW4gbWF4X2xldmVsICovCisJaWYgKFdBUk5fT04oc3RhdGUgPiBjcHVmcmVxX2RldmljZS0+bWF4X2xldmVsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDaGVjayBpZiB0aGUgb2xkIGNvb2xpbmcgYWN0aW9uIGlzIHNhbWUgYXMgbmV3IGNvb2xpbmcgYWN0aW9uICovCisJaWYgKGNwdWZyZXFfZGV2aWNlLT5jcHVmcmVxX3N0YXRlID09IHN0YXRlKQorCQlyZXR1cm4gMDsKKworCWNsaXBfZnJlcSA9IGNwdWZyZXFfZGV2aWNlLT5mcmVxX3RhYmxlW3N0YXRlXTsKKwljcHVmcmVxX2RldmljZS0+Y3B1ZnJlcV9zdGF0ZSA9IHN0YXRlOworCWNwdWZyZXFfZGV2aWNlLT5jcHVmcmVxX3ZhbCA9IGNsaXBfZnJlcTsKKworCWNwdWZyZXFfdXBkYXRlX3BvbGljeShjcHUpOworCisJcmV0dXJuIDA7CiB9CiAKIC8qIEJpbmQgY3B1ZnJlcSBjYWxsYmFja3MgdG8gdGhlcm1hbCBjb29saW5nIGRldmljZSBvcHMgKi8KQEAgLTQxOSwxMCArMjkyLDI1IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBjcHVmcmVxX3RoZXJtYWxfbm90aWZpZXIsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF9tYXgoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSwKKwkJCQkgIHVuc2lnbmVkIGludCBwcmV2X21heCkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvczsKKwl1bnNpZ25lZCBpbnQgbWF4ID0gMDsKKworCWNwdWZyZXFfZm9yX2VhY2hfdmFsaWRfZW50cnkocG9zLCB0YWJsZSkgeworCQlpZiAocG9zLT5mcmVxdWVuY3kgPiBtYXggJiYgcG9zLT5mcmVxdWVuY3kgPCBwcmV2X21heCkKKwkJCW1heCA9IHBvcy0+ZnJlcXVlbmN5OworCX0KKworCXJldHVybiBtYXg7Cit9CisKIC8qKgogICogX19jcHVmcmVxX2Nvb2xpbmdfcmVnaXN0ZXIgLSBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGNwdWZyZXEgY29vbGluZyBkZXZpY2UKICAqIEBucDogYSB2YWxpZCBzdHJ1Y3QgZGV2aWNlX25vZGUgdG8gdGhlIGNvb2xpbmcgZGV2aWNlIGRldmljZSB0cmVlIG5vZGUKICAqIEBjbGlwX2NwdXM6IGNwdW1hc2sgb2YgY3B1cyB3aGVyZSB0aGUgZnJlcXVlbmN5IGNvbnN0cmFpbnRzIHdpbGwgaGFwcGVuLgorICogTm9ybWFsbHkgdGhpcyBzaG91bGQgYmUgc2FtZSBhcyBjcHVmcmVxIHBvbGljeS0+cmVsYXRlZF9jcHVzLgogICoKICAqIFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHJlZ2lzdGVycyB0aGUgY3B1ZnJlcSBjb29saW5nIGRldmljZSB3aXRoIHRoZSBuYW1lCiAgKiAidGhlcm1hbC1jcHVmcmVxLSV4Ii4gVGhpcyBhcGkgY2FuIHN1cHBvcnQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGNwdWZyZXEKQEAgLTQzNywzNyArMzI1LDQyIEBACiAJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY2xpcF9jcHVzKQogewogCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjb29sX2RldjsKLQlzdHJ1Y3QgY3B1ZnJlcV9jb29saW5nX2RldmljZSAqY3B1ZnJlcV9kZXYgPSBOVUxMOwotCXVuc2lnbmVkIGludCBtaW4gPSAwLCBtYXggPSAwOworCXN0cnVjdCBjcHVmcmVxX2Nvb2xpbmdfZGV2aWNlICpjcHVmcmVxX2RldjsKIAljaGFyIGRldl9uYW1lW1RIRVJNQUxfTkFNRV9MRU5HVEhdOwotCWludCByZXQgPSAwLCBpOwotCXN0cnVjdCBjcHVmcmVxX3BvbGljeSBwb2xpY3k7CisJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3MsICp0YWJsZTsKKwl1bnNpZ25lZCBpbnQgZnJlcSwgaTsKKwlpbnQgcmV0OwogCi0JLyogVmVyaWZ5IHRoYXQgYWxsIHRoZSBjbGlwIGNwdXMgaGF2ZSBzYW1lIGZyZXFfbWluLCBmcmVxX21heCBsaW1pdCAqLwotCWZvcl9lYWNoX2NwdShpLCBjbGlwX2NwdXMpIHsKLQkJLyogY29udGludWUgaWYgY3B1ZnJlcSBwb2xpY3kgbm90IGZvdW5kIGFuZCBub3QgcmV0dXJuIGVycm9yICovCi0JCWlmICghY3B1ZnJlcV9nZXRfcG9saWN5KCZwb2xpY3ksIGkpKQotCQkJY29udGludWU7Ci0JCWlmIChtaW4gPT0gMCAmJiBtYXggPT0gMCkgewotCQkJbWluID0gcG9saWN5LmNwdWluZm8ubWluX2ZyZXE7Ci0JCQltYXggPSBwb2xpY3kuY3B1aW5mby5tYXhfZnJlcTsKLQkJfSBlbHNlIHsKLQkJCWlmIChtaW4gIT0gcG9saWN5LmNwdWluZm8ubWluX2ZyZXEgfHwKLQkJCSAgICBtYXggIT0gcG9saWN5LmNwdWluZm8ubWF4X2ZyZXEpCi0JCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JCX0KKwl0YWJsZSA9IGNwdWZyZXFfZnJlcXVlbmN5X2dldF90YWJsZShjcHVtYXNrX2ZpcnN0KGNsaXBfY3B1cykpOworCWlmICghdGFibGUpIHsKKwkJcHJfZGVidWcoIiVzOiBDUFVGcmVxIHRhYmxlIG5vdCBmb3VuZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKIAl9Ci0JY3B1ZnJlcV9kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9jb29saW5nX2RldmljZSksCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKKworCWNwdWZyZXFfZGV2ID0ga3phbGxvYyhzaXplb2YoKmNwdWZyZXFfZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjcHVmcmVxX2RldikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKKwkvKiBGaW5kIG1heCBsZXZlbHMgKi8KKwljcHVmcmVxX2Zvcl9lYWNoX3ZhbGlkX2VudHJ5KHBvcywgdGFibGUpCisJCWNwdWZyZXFfZGV2LT5tYXhfbGV2ZWwrKzsKKworCWNwdWZyZXFfZGV2LT5mcmVxX3RhYmxlID0ga21hbGxvYyhzaXplb2YoKmNwdWZyZXFfZGV2LT5mcmVxX3RhYmxlKSAqCisJCQkJCSAgY3B1ZnJlcV9kZXYtPm1heF9sZXZlbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcHVmcmVxX2Rldi0+ZnJlcV90YWJsZSkgeworCQljb29sX2RldiA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gZnJlZV9jZGV2OworCX0KKworCS8qIG1heF9sZXZlbCBpcyBhbiBpbmRleCwgbm90IGEgY291bnRlciAqLworCWNwdWZyZXFfZGV2LT5tYXhfbGV2ZWwtLTsKKwogCWNwdW1hc2tfY29weSgmY3B1ZnJlcV9kZXYtPmFsbG93ZWRfY3B1cywgY2xpcF9jcHVzKTsKIAogCXJldCA9IGdldF9pZHIoJmNwdWZyZXFfaWRyLCAmY3B1ZnJlcV9kZXYtPmlkKTsKIAlpZiAocmV0KSB7Ci0JCWtmcmVlKGNwdWZyZXFfZGV2KTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJCWNvb2xfZGV2ID0gRVJSX1BUUihyZXQpOworCQlnb3RvIGZyZWVfdGFibGU7CiAJfQogCiAJc25wcmludGYoZGV2X25hbWUsIHNpemVvZihkZXZfbmFtZSksICJ0aGVybWFsLWNwdWZyZXEtJWQiLApAQCAtNDc1LDI1ICszNjgsNDQgQEAKIAogCWNvb2xfZGV2ID0gdGhlcm1hbF9vZl9jb29saW5nX2RldmljZV9yZWdpc3RlcihucCwgZGV2X25hbWUsIGNwdWZyZXFfZGV2LAogCQkJCQkJICAgICAgJmNwdWZyZXFfY29vbGluZ19vcHMpOwotCWlmIChJU19FUlIoY29vbF9kZXYpKSB7Ci0JCXJlbGVhc2VfaWRyKCZjcHVmcmVxX2lkciwgY3B1ZnJlcV9kZXYtPmlkKTsKLQkJa2ZyZWUoY3B1ZnJlcV9kZXYpOwotCQlyZXR1cm4gY29vbF9kZXY7CisJaWYgKElTX0VSUihjb29sX2RldikpCisJCWdvdG8gcmVtb3ZlX2lkcjsKKworCS8qIEZpbGwgZnJlcS10YWJsZSBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIGZyZXF1ZW5jaWVzICovCisJZm9yIChpID0gMCwgZnJlcSA9IC0xOyBpIDw9IGNwdWZyZXFfZGV2LT5tYXhfbGV2ZWw7IGkrKykgeworCQlmcmVxID0gZmluZF9uZXh0X21heCh0YWJsZSwgZnJlcSk7CisJCWNwdWZyZXFfZGV2LT5mcmVxX3RhYmxlW2ldID0gZnJlcTsKKworCQkvKiBXYXJuIGZvciBkdXBsaWNhdGUgZW50cmllcyAqLworCQlpZiAoIWZyZXEpCisJCQlwcl93YXJuKCIlczogdGFibGUgaGFzIGR1cGxpY2F0ZSBlbnRyaWVzXG4iLCBfX2Z1bmNfXyk7CisJCWVsc2UKKwkJCXByX2RlYnVnKCIlczogZnJlcToldSBLSHpcbiIsIF9fZnVuY19fLCBmcmVxKTsKIAl9CisKKwljcHVmcmVxX2Rldi0+Y3B1ZnJlcV92YWwgPSBjcHVmcmVxX2Rldi0+ZnJlcV90YWJsZVswXTsKIAljcHVmcmVxX2Rldi0+Y29vbF9kZXYgPSBjb29sX2RldjsKLQljcHVmcmVxX2Rldi0+Y3B1ZnJlcV9zdGF0ZSA9IDA7CisKIAltdXRleF9sb2NrKCZjb29saW5nX2NwdWZyZXFfbG9jayk7CiAKIAkvKiBSZWdpc3RlciB0aGUgbm90aWZpZXIgZm9yIGZpcnN0IGNwdWZyZXEgY29vbGluZyBkZXZpY2UgKi8KLQlpZiAoY3B1ZnJlcV9kZXZfY291bnQgPT0gMCkKKwlpZiAobGlzdF9lbXB0eSgmY3B1ZnJlcV9kZXZfbGlzdCkpCiAJCWNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJnRoZXJtYWxfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKIAkJCQkJICBDUFVGUkVRX1BPTElDWV9OT1RJRklFUik7Ci0JY3B1ZnJlcV9kZXZfY291bnQrKzsKIAlsaXN0X2FkZCgmY3B1ZnJlcV9kZXYtPm5vZGUsICZjcHVmcmVxX2Rldl9saXN0KTsKIAogCW11dGV4X3VubG9jaygmY29vbGluZ19jcHVmcmVxX2xvY2spOwogCiAJcmV0dXJuIGNvb2xfZGV2OworCityZW1vdmVfaWRyOgorCXJlbGVhc2VfaWRyKCZjcHVmcmVxX2lkciwgY3B1ZnJlcV9kZXYtPmlkKTsKK2ZyZWVfdGFibGU6CisJa2ZyZWUoY3B1ZnJlcV9kZXYtPmZyZXFfdGFibGUpOworZnJlZV9jZGV2OgorCWtmcmVlKGNwdWZyZXFfZGV2KTsKKworCXJldHVybiBjb29sX2RldjsKIH0KIAogLyoqCkBAIC01NTQsMTYgKzQ2NiwxNiBAQAogCWNwdWZyZXFfZGV2ID0gY2Rldi0+ZGV2ZGF0YTsKIAltdXRleF9sb2NrKCZjb29saW5nX2NwdWZyZXFfbG9jayk7CiAJbGlzdF9kZWwoJmNwdWZyZXFfZGV2LT5ub2RlKTsKLQljcHVmcmVxX2Rldl9jb3VudC0tOwogCiAJLyogVW5yZWdpc3RlciB0aGUgbm90aWZpZXIgZm9yIHRoZSBsYXN0IGNwdWZyZXEgY29vbGluZyBkZXZpY2UgKi8KLQlpZiAoY3B1ZnJlcV9kZXZfY291bnQgPT0gMCkKKwlpZiAobGlzdF9lbXB0eSgmY3B1ZnJlcV9kZXZfbGlzdCkpCiAJCWNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigmdGhlcm1hbF9jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAogCQkJCQkgICAgQ1BVRlJFUV9QT0xJQ1lfTk9USUZJRVIpOwogCW11dGV4X3VubG9jaygmY29vbGluZ19jcHVmcmVxX2xvY2spOwogCiAJdGhlcm1hbF9jb29saW5nX2RldmljZV91bnJlZ2lzdGVyKGNwdWZyZXFfZGV2LT5jb29sX2Rldik7CiAJcmVsZWFzZV9pZHIoJmNwdWZyZXFfaWRyLCBjcHVmcmVxX2Rldi0+aWQpOworCWtmcmVlKGNwdWZyZXFfZGV2LT5mcmVxX3RhYmxlKTsKIAlrZnJlZShjcHVmcmVxX2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX2Nvb2xpbmdfdW5yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvZGI4NTAwX2NwdWZyZXFfY29vbGluZy5jIGIvZHJpdmVycy90aGVybWFsL2RiODUwMF9jcHVmcmVxX2Nvb2xpbmcuYwppbmRleCAwMDBkNTNlLi42MDdiNjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvZGI4NTAwX2NwdWZyZXFfY29vbGluZy5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9kYjg1MDBfY3B1ZnJlcV9jb29saW5nLmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY3B1X2Nvb2xpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KQEAgLTI4LDE4ICsyNywxNyBAQAogc3RhdGljIGludCBkYjg1MDBfY3B1ZnJlcV9jb29saW5nX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXY7Ci0Jc3RydWN0IGNwdW1hc2sgbWFza192YWw7CiAKLQkvKiBtYWtlIHN1cmUgY3B1ZnJlcSBkcml2ZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKi8KLQlpZiAoIWNwdWZyZXFfZnJlcXVlbmN5X2dldF90YWJsZSgwKSkKLQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0KLQljcHVtYXNrX3NldF9jcHUoMCwgJm1hc2tfdmFsKTsKLQljZGV2ID0gY3B1ZnJlcV9jb29saW5nX3JlZ2lzdGVyKCZtYXNrX3ZhbCk7Ci0KKwljZGV2ID0gY3B1ZnJlcV9jb29saW5nX3JlZ2lzdGVyKGNwdV9wcmVzZW50X21hc2spOwogCWlmIChJU19FUlIoY2RldikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvb2xpbmcgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoY2Rldik7CisJCWludCByZXQgPSBQVFJfRVJSKGNkZXYpOworCisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvb2xpbmcgZGV2aWNlICVkXG4iLAorCQkJCXJldCk7CisJCQkJCisJCXJldHVybiByZXQ7CiAJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvaW14X3RoZXJtYWwuYyBiL2RyaXZlcnMvdGhlcm1hbC9pbXhfdGhlcm1hbC5jCmluZGV4IDg4YjMyZjkuLjJjY2JjMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9pbXhfdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9pbXhfdGhlcm1hbC5jCkBAIC05LDcgKzksNiBAQAogCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1X2Nvb2xpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC00NTQsMTUgKzQ1MywxMCBAQAogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0KIAkJb2ZfbWF0Y2hfZGV2aWNlKG9mX2lteF90aGVybWFsX21hdGNoLCAmcGRldi0+ZGV2KTsKIAlzdHJ1Y3QgaW14X3RoZXJtYWxfZGF0YSAqZGF0YTsKLQlzdHJ1Y3QgY3B1bWFzayBjbGlwX2NwdXM7CiAJc3RydWN0IHJlZ21hcCAqbWFwOwogCWludCBtZWFzdXJlX2ZyZXE7CiAJaW50IHJldDsKIAotCWlmICghY3B1ZnJlcV9nZXRfY3VycmVudF9kcml2ZXIoKSkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBjcHVmcmVxIGRyaXZlciEiKTsKLQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0JfQogCWRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTUxNiwxMiArNTEwLDEzIEBACiAJcmVnbWFwX3dyaXRlKG1hcCwgTUlTQzAgKyBSRUdfU0VULCBNSVNDMF9SRUZUT1BfU0VMQklBU09GRik7CiAJcmVnbWFwX3dyaXRlKG1hcCwgVEVNUFNFTlNFMCArIFJFR19TRVQsIFRFTVBTRU5TRTBfUE9XRVJfRE9XTik7CiAKLQljcHVtYXNrX3NldF9jcHUoMCwgJmNsaXBfY3B1cyk7Ci0JZGF0YS0+Y2RldiA9IGNwdWZyZXFfY29vbGluZ19yZWdpc3RlcigmY2xpcF9jcHVzKTsKKwlkYXRhLT5jZGV2ID0gY3B1ZnJlcV9jb29saW5nX3JlZ2lzdGVyKGNwdV9wcmVzZW50X21hc2spOwogCWlmIChJU19FUlIoZGF0YS0+Y2RldikpIHsKIAkJcmV0ID0gUFRSX0VSUihkYXRhLT5jZGV2KTsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJImZhaWxlZCB0byByZWdpc3RlciBjcHVmcmVxIGNvb2xpbmcgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1ZnJlcSBjb29saW5nIGRldmljZTogJWRcbiIsCisJCQkJcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTYxMyw2ICs2MDgsNyBAQAogCXJlZ21hcF93cml0ZShtYXAsIFRFTVBTRU5TRTAgKyBSRUdfQ0xSLCBURU1QU0VOU0UwX01FQVNVUkVfVEVNUCk7CiAJcmVnbWFwX3dyaXRlKG1hcCwgVEVNUFNFTlNFMCArIFJFR19TRVQsIFRFTVBTRU5TRTBfUE9XRVJfRE9XTik7CiAJZGF0YS0+bW9kZSA9IFRIRVJNQUxfREVWSUNFX0RJU0FCTEVEOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLT50aGVybWFsX2Nsayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYyMiw2ICs2MTgsNyBAQAogCXN0cnVjdCBpbXhfdGhlcm1hbF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHJlZ21hcCAqbWFwID0gZGF0YS0+dGVtcG1vbjsKIAorCWNsa19wcmVwYXJlX2VuYWJsZShkYXRhLT50aGVybWFsX2Nsayk7CiAJLyogRW5hYmxlZCB0aGVybWFsIHNlbnNvciBhZnRlciByZXN1bWUgKi8KIAlyZWdtYXBfd3JpdGUobWFwLCBURU1QU0VOU0UwICsgUkVHX0NMUiwgVEVNUFNFTlNFMF9QT1dFUl9ET1dOKTsKIAlyZWdtYXBfd3JpdGUobWFwLCBURU1QU0VOU0UwICsgUkVHX1NFVCwgVEVNUFNFTlNFMF9NRUFTVVJFX1RFTVApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9NYWtlZmlsZSBiL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvTWFrZWZpbGUKaW5kZXggZmZlNDBiZi4uZDQ0MTM2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogb2JqLSQoQ09ORklHX0lOVDM0MFhfVEhFUk1BTCkJKz0gaW50MzQwMF90aGVybWFsLm8KIG9iai0kKENPTkZJR19JTlQzNDBYX1RIRVJNQUwpCSs9IGludDM0MDJfdGhlcm1hbC5vCiBvYmotJChDT05GSUdfSU5UMzQwWF9USEVSTUFMKQkrPSBpbnQzNDAzX3RoZXJtYWwubworb2JqLSQoQ09ORklHX0lOVDM0MFhfVEhFUk1BTCkJKz0gcHJvY2Vzc29yX3RoZXJtYWxfZGV2aWNlLm8KIG9iai0kKENPTkZJR19BQ1BJX1RIRVJNQUxfUkVMKQkrPSBhY3BpX3RoZXJtYWxfcmVsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvYWNwaV90aGVybWFsX3JlbC5jIGIvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9hY3BpX3RoZXJtYWxfcmVsLmMKaW5kZXggZTRlNjFiMy4uMmMyZWM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9hY3BpX3RoZXJtYWxfcmVsLmMKKysrIGIvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9hY3BpX3RoZXJtYWxfcmVsLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgdHJ0X2Zvcm1hdCA9IHsgc2l6ZW9mKCJSUk5OTk5OTiIpLCAiUlJOTk5OTk4iIH07CiAKIAlpZiAoIWFjcGlfaGFzX21ldGhvZChoYW5kbGUsICJfVFJUIikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9UUlQiLCBOVUxMLCAmYnVmZmVyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCkBAIC0xMTksMTUgKzExOSwxMSBAQAogCQkJY29udGludWU7CiAKIAkJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X2RldmljZSh0cnQtPnNvdXJjZSwgJmFkZXYpOwotCQlpZiAoIXJlc3VsdCkKLQkJCWFjcGlfY3JlYXRlX3BsYXRmb3JtX2RldmljZShhZGV2KTsKLQkJZWxzZQorCQlpZiAocmVzdWx0KQogCQkJcHJfd2FybigiRmFpbGVkIHRvIGdldCBzb3VyY2UgQUNQSSBkZXZpY2VcbiIpOwogCiAJCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9kZXZpY2UodHJ0LT50YXJnZXQsICZhZGV2KTsKLQkJaWYgKCFyZXN1bHQpCi0JCQlhY3BpX2NyZWF0ZV9wbGF0Zm9ybV9kZXZpY2UoYWRldik7Ci0JCWVsc2UKKwkJaWYgKHJlc3VsdCkKIAkJCXByX3dhcm4oIkZhaWxlZCB0byBnZXQgdGFyZ2V0IEFDUEkgZGV2aWNlXG4iKTsKIAl9CiAKQEAgLTE2Nyw3ICsxNjMsNyBAQAogCQlzaXplb2YoIlJSTk5OTk5OTk5OTk4iKSwgIlJSTk5OTk5OTk5OTk4iIH07CiAKIAlpZiAoIWFjcGlfaGFzX21ldGhvZChoYW5kbGUsICJfQVJUIikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9BUlQiLCBOVUxMLCAmYnVmZmVyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCkBAIC0yMDYsMTYgKzIwMiwxMiBAQAogCiAJCWlmIChhcnQtPnNvdXJjZSkgewogCQkJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X2RldmljZShhcnQtPnNvdXJjZSwgJmFkZXYpOwotCQkJaWYgKCFyZXN1bHQpCi0JCQkJYWNwaV9jcmVhdGVfcGxhdGZvcm1fZGV2aWNlKGFkZXYpOwotCQkJZWxzZQorCQkJaWYgKHJlc3VsdCkKIAkJCQlwcl93YXJuKCJGYWlsZWQgdG8gZ2V0IHNvdXJjZSBBQ1BJIGRldmljZVxuIik7CiAJCX0KIAkJaWYgKGFydC0+dGFyZ2V0KSB7CiAJCQlyZXN1bHQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKGFydC0+dGFyZ2V0LCAmYWRldik7Ci0JCQlpZiAoIXJlc3VsdCkKLQkJCQlhY3BpX2NyZWF0ZV9wbGF0Zm9ybV9kZXZpY2UoYWRldik7Ci0JCQllbHNlCisJCQlpZiAocmVzdWx0KQogCQkJCXByX3dhcm4oIkZhaWxlZCB0byBnZXQgc291cmNlIEFDUEkgZGV2aWNlXG4iKTsKIAkJfQogCX0KQEAgLTMyMSw4ICszMTMsOCBAQAogCXVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gMDsKIAlpbnQgY291bnQgPSAwOwogCWNoYXIgX191c2VyICphcmcgPSAodm9pZCBfX3VzZXIgKilfX2FyZzsKLQlzdHJ1Y3QgdHJ0ICp0cnRzOwotCXN0cnVjdCBhcnQgKmFydHM7CisJc3RydWN0IHRydCAqdHJ0cyA9IE5VTEw7CisJc3RydWN0IGFydCAqYXJ0cyA9IE5VTEw7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQUNQSV9USEVSTUFMX0dFVF9UUlRfQ09VTlQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL2ludDM0MDBfdGhlcm1hbC5jIGIvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9pbnQzNDAwX3RoZXJtYWwuYwppbmRleCBkY2IzMDZlLi42NWE5OGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL2ludDM0MDBfdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvaW50MzQwMF90aGVybWFsLmMKQEAgLTMzNSw3ICszMzUsNiBAQAogCS5yZW1vdmUgPSBpbnQzNDAwX3RoZXJtYWxfcmVtb3ZlLAogCS5kcml2ZXIgPSB7CiAJCSAgIC5uYW1lID0gImludDM0MDAgdGhlcm1hbCIsCi0JCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogCQkgICAuYWNwaV9tYXRjaF90YWJsZSA9IEFDUElfUFRSKGludDM0MDBfdGhlcm1hbF9tYXRjaCksCiAJCSAgIH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9pbnQzNDAyX3RoZXJtYWwuYyBiL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvaW50MzQwMl90aGVybWFsLmMKaW5kZXggYTVkMDhjMS4uYzVjYmMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9pbnQzNDAyX3RoZXJtYWwuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL2ludDM0MDJfdGhlcm1hbC5jCkBAIC0yMzEsNyArMjMxLDYgQEAKIAkucmVtb3ZlID0gaW50MzQwMl90aGVybWFsX3JlbW92ZSwKIAkuZHJpdmVyID0gewogCQkgICAubmFtZSA9ICJpbnQzNDAyIHRoZXJtYWwiLAotCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJICAgLmFjcGlfbWF0Y2hfdGFibGUgPSBpbnQzNDAyX3RoZXJtYWxfbWF0Y2gsCiAJCSAgIH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9pbnQzNDAzX3RoZXJtYWwuYyBiL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvaW50MzQwM190aGVybWFsLmMKaW5kZXggMWJmYTZhNi4uMGZhZjUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9pbnQzNDAzX3RoZXJtYWwuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvaW50MzQweF90aGVybWFsL2ludDM0MDNfdGhlcm1hbC5jCkBAIC0zMDEsNiArMzAxLDggQEAKIHsKIAlzdHJ1Y3QgaW50MzQwM19zZW5zb3IgKm9iaiA9IHByaXYtPnByaXY7CiAKKwlhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihwcml2LT5hZGV2LT5oYW5kbGUsCisJCQkJICAgQUNQSV9ERVZJQ0VfTk9USUZZLCBpbnQzNDAzX25vdGlmeSk7CiAJdGhlcm1hbF96b25lX2RldmljZV91bnJlZ2lzdGVyKG9iai0+dHpvbmUpOwogCXJldHVybiAwOwogfQpAQCAtMzY5LDYgKzM3MSw3IEBACiAJcCA9IGJ1Zi5wb2ludGVyOwogCWlmICghcCB8fCAocC0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCBQUFNTIGRhdGFcbiIpOworCQlrZnJlZShidWYucG9pbnRlcik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtMzgxLDYgKzM4NCw3IEBACiAKIAlwcml2LT5wcml2ID0gb2JqOwogCisJa2ZyZWUoYnVmLnBvaW50ZXIpOwogCS8qIFRPRE86IGFkZCBBQ1BJIG5vdGlmaWNhdGlvbiBzdXBwb3J0ICovCiAKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2ludDM0MHhfdGhlcm1hbC9wcm9jZXNzb3JfdGhlcm1hbF9kZXZpY2UuYyBiL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvcHJvY2Vzc29yX3RoZXJtYWxfZGV2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlNWRiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9pbnQzNDB4X3RoZXJtYWwvcHJvY2Vzc29yX3RoZXJtYWxfZGV2aWNlLmMKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiBwcm9jZXNzb3JfdGhlcm1hbF9kZXZpY2UuYworICogQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKworLyogQnJvYWR3ZWxsLVUvSFNCIHRoZXJtYWwgcmVwb3J0aW5nIGRldmljZSAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST0NfQkRXX1RIRVJNQUwJMHgxNjAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPQ19IU0JfVEhFUk1BTAkweDBBMDMKKworLyogQnJhc3dlbGwgdGhlcm1hbCByZXBvcnRpbmcgZGV2aWNlICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPQ19CU1dfVEhFUk1BTAkweDIyREMKKworc3RydWN0IHBvd2VyX2NvbmZpZyB7CisJdTMyCWluZGV4OworCXUzMgltaW5fdXc7CisJdTMyCW1heF91dzsKKwl1MzIJdG1pbl91czsKKwl1MzIJdG1heF91czsKKwl1MzIJc3RlcF91dzsKK307CisKK3N0cnVjdCBwcm9jX3RoZXJtYWxfZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGFjcGlfZGV2aWNlICphZGV2OworCXN0cnVjdCBwb3dlcl9jb25maWcgcG93ZXJfbGltaXRzWzJdOworfTsKKworZW51bSBwcm9jX3RoZXJtYWxfZW11bV9tb2RlX3R5cGUgeworCVBST0NfVEhFUk1BTF9OT05FLAorCVBST0NfVEhFUk1BTF9QQ0ksCisJUFJPQ19USEVSTUFMX1BMQVRGT1JNX0RFVgorfTsKKworLyoKKyAqIFdlIGNhbiBoYXZlIG9ubHkgb25lIHR5cGUgb2YgZW51bWVyYXRpb24sIFBDSSBvciBQbGF0Zm9ybSwKKyAqIG5vdCBib3RoLiBTbyB3ZSBkb24ndCBuZWVkIGluc3RhbmNlIHNwZWNpZmljIGRhdGEuCisgKi8KK3N0YXRpYyBlbnVtIHByb2NfdGhlcm1hbF9lbXVtX21vZGVfdHlwZSBwcm9jX3RoZXJtYWxfZW11bV9tb2RlID0KKwkJCQkJCQlQUk9DX1RIRVJNQUxfTk9ORTsKKworI2RlZmluZSBQT1dFUl9MSU1JVF9TSE9XKGluZGV4LCBzdWZmaXgpIFwKK3N0YXRpYyBzc2l6ZV90IHBvd2VyX2xpbWl0XyMjaW5kZXgjI18jI3N1ZmZpeCMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBcCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCisJCQkJCWNoYXIgKmJ1ZikgXAoreyBcCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7IFwKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OyBcCisJc3RydWN0IHByb2NfdGhlcm1hbF9kZXZpY2UgKnByb2NfZGV2OyBcCitcCisJaWYgKHByb2NfdGhlcm1hbF9lbXVtX21vZGUgPT0gUFJPQ19USEVSTUFMX1BMQVRGT1JNX0RFVikgeyBcCisJCXBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsgXAorCQlwcm9jX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOyBcCisJfSBlbHNlIHsgXAorCQlwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOyBcCisJCXByb2NfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOyBcCisJfSBcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLFwKKwkodW5zaWduZWQgbG9uZylwcm9jX2Rldi0+cG93ZXJfbGltaXRzW2luZGV4XS5zdWZmaXggKiAxMDAwKTsgXAorfQorCitQT1dFUl9MSU1JVF9TSE9XKDAsIG1pbl91dykKK1BPV0VSX0xJTUlUX1NIT1coMCwgbWF4X3V3KQorUE9XRVJfTElNSVRfU0hPVygwLCBzdGVwX3V3KQorUE9XRVJfTElNSVRfU0hPVygwLCB0bWluX3VzKQorUE9XRVJfTElNSVRfU0hPVygwLCB0bWF4X3VzKQorCitQT1dFUl9MSU1JVF9TSE9XKDEsIG1pbl91dykKK1BPV0VSX0xJTUlUX1NIT1coMSwgbWF4X3V3KQorUE9XRVJfTElNSVRfU0hPVygxLCBzdGVwX3V3KQorUE9XRVJfTElNSVRfU0hPVygxLCB0bWluX3VzKQorUE9XRVJfTElNSVRfU0hPVygxLCB0bWF4X3VzKQorCitzdGF0aWMgREVWSUNFX0FUVFJfUk8ocG93ZXJfbGltaXRfMF9taW5fdXcpOworc3RhdGljIERFVklDRV9BVFRSX1JPKHBvd2VyX2xpbWl0XzBfbWF4X3V3KTsKK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhwb3dlcl9saW1pdF8wX3N0ZXBfdXcpOworc3RhdGljIERFVklDRV9BVFRSX1JPKHBvd2VyX2xpbWl0XzBfdG1pbl91cyk7CitzdGF0aWMgREVWSUNFX0FUVFJfUk8ocG93ZXJfbGltaXRfMF90bWF4X3VzKTsKKworc3RhdGljIERFVklDRV9BVFRSX1JPKHBvd2VyX2xpbWl0XzFfbWluX3V3KTsKK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhwb3dlcl9saW1pdF8xX21heF91dyk7CitzdGF0aWMgREVWSUNFX0FUVFJfUk8ocG93ZXJfbGltaXRfMV9zdGVwX3V3KTsKK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhwb3dlcl9saW1pdF8xX3RtaW5fdXMpOworc3RhdGljIERFVklDRV9BVFRSX1JPKHBvd2VyX2xpbWl0XzFfdG1heF91cyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwb3dlcl9saW1pdF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9wb3dlcl9saW1pdF8wX21pbl91dy5hdHRyLAorCSZkZXZfYXR0cl9wb3dlcl9saW1pdF8xX21pbl91dy5hdHRyLAorCSZkZXZfYXR0cl9wb3dlcl9saW1pdF8wX21heF91dy5hdHRyLAorCSZkZXZfYXR0cl9wb3dlcl9saW1pdF8xX21heF91dy5hdHRyLAorCSZkZXZfYXR0cl9wb3dlcl9saW1pdF8wX3N0ZXBfdXcuYXR0ciwKKwkmZGV2X2F0dHJfcG93ZXJfbGltaXRfMV9zdGVwX3V3LmF0dHIsCisJJmRldl9hdHRyX3Bvd2VyX2xpbWl0XzBfdG1pbl91cy5hdHRyLAorCSZkZXZfYXR0cl9wb3dlcl9saW1pdF8xX3RtaW5fdXMuYXR0ciwKKwkmZGV2X2F0dHJfcG93ZXJfbGltaXRfMF90bWF4X3VzLmF0dHIsCisJJmRldl9hdHRyX3Bvd2VyX2xpbWl0XzFfdG1heF91cy5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBvd2VyX2xpbWl0X2F0dHJpYnV0ZV9ncm91cCA9IHsKKwkuYXR0cnMgPSBwb3dlcl9saW1pdF9hdHRycywKKwkubmFtZSA9ICJwb3dlcl9saW1pdHMiCit9OworCitzdGF0aWMgaW50IHByb2NfdGhlcm1hbF9hZGQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBwcm9jX3RoZXJtYWxfZGV2aWNlICoqcHJpdikKK3sKKwlzdHJ1Y3QgcHJvY190aGVybWFsX2RldmljZSAqcHJvY19wcml2OworCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldjsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZiA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqZWxlbWVudHMsICpwcGNjOworCXVuaW9uIGFjcGlfb2JqZWN0ICpwOworCWludCBpOworCWludCByZXQ7CisKKwlhZGV2ID0gQUNQSV9DT01QQU5JT04oZGV2KTsKKwlpZiAoIWFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoYWRldi0+aGFuZGxlLCAiUFBDQyIsIE5VTEwsICZidWYpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwID0gYnVmLnBvaW50ZXI7CisJaWYgKCFwIHx8IChwLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSkgeworCQlkZXZfZXJyKGRldiwgIkludmFsaWQgUFBDQyBkYXRhXG4iKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBmcmVlX2J1ZmZlcjsKKwl9CisJaWYgKCFwLT5wYWNrYWdlLmNvdW50KSB7CisJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBQUENDIHBhY2thZ2Ugc2l6ZVxuIik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZnJlZV9idWZmZXI7CisJfQorCisJcHJvY19wcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcm9jX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByb2NfcHJpdikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfYnVmZmVyOworCX0KKworCXByb2NfcHJpdi0+ZGV2ID0gZGV2OworCXByb2NfcHJpdi0+YWRldiA9IGFkZXY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWluKChpbnQpcC0+cGFja2FnZS5jb3VudCAtIDEsIDIpOyArK2kpIHsKKwkJZWxlbWVudHMgPSAmKHAtPnBhY2thZ2UuZWxlbWVudHNbaSsxXSk7CisJCWlmIChlbGVtZW50cy0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSB8fAorCQkgICAgZWxlbWVudHMtPnBhY2thZ2UuY291bnQgIT0gNikgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZnJlZV9idWZmZXI7CisJCX0KKwkJcHBjYyA9IGVsZW1lbnRzLT5wYWNrYWdlLmVsZW1lbnRzOworCQlwcm9jX3ByaXYtPnBvd2VyX2xpbWl0c1tpXS5pbmRleCA9IHBwY2NbMF0uaW50ZWdlci52YWx1ZTsKKwkJcHJvY19wcml2LT5wb3dlcl9saW1pdHNbaV0ubWluX3V3ID0gcHBjY1sxXS5pbnRlZ2VyLnZhbHVlOworCQlwcm9jX3ByaXYtPnBvd2VyX2xpbWl0c1tpXS5tYXhfdXcgPSBwcGNjWzJdLmludGVnZXIudmFsdWU7CisJCXByb2NfcHJpdi0+cG93ZXJfbGltaXRzW2ldLnRtaW5fdXMgPSBwcGNjWzNdLmludGVnZXIudmFsdWU7CisJCXByb2NfcHJpdi0+cG93ZXJfbGltaXRzW2ldLnRtYXhfdXMgPSBwcGNjWzRdLmludGVnZXIudmFsdWU7CisJCXByb2NfcHJpdi0+cG93ZXJfbGltaXRzW2ldLnN0ZXBfdXcgPSBwcGNjWzVdLmludGVnZXIudmFsdWU7CisJfQorCisJKnByaXYgPSBwcm9jX3ByaXY7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkgJnBvd2VyX2xpbWl0X2F0dHJpYnV0ZV9ncm91cCk7CisKK2ZyZWVfYnVmZmVyOgorCWtmcmVlKGJ1Zi5wb2ludGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcHJvY190aGVybWFsX3JlbW92ZShzdHJ1Y3QgcHJvY190aGVybWFsX2RldmljZSAqcHJvY19wcml2KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcHJvY19wcml2LT5kZXYtPmtvYmosCisJCQkgICAmcG93ZXJfbGltaXRfYXR0cmlidXRlX2dyb3VwKTsKK30KKworc3RhdGljIGludCBpbnQzNDAxX2FkZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwcm9jX3RoZXJtYWxfZGV2aWNlICpwcm9jX3ByaXY7CisJaW50IHJldDsKKworCWlmIChwcm9jX3RoZXJtYWxfZW11bV9tb2RlID09IFBST0NfVEhFUk1BTF9QQ0kpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3I6IGVudW1lcmF0ZWQgYXMgUENJIGRldlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHByb2NfdGhlcm1hbF9hZGQoJnBkZXYtPmRldiwgJnByb2NfcHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByb2NfcHJpdik7CisJcHJvY190aGVybWFsX2VtdW1fbW9kZSA9IFBST0NfVEhFUk1BTF9QTEFURk9STV9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnQzNDAxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXByb2NfdGhlcm1hbF9yZW1vdmUocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgIHByb2NfdGhlcm1hbF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgcHJvY190aGVybWFsX2RldmljZSAqcHJvY19wcml2OworCWludCByZXQ7CisKKwlpZiAocHJvY190aGVybWFsX2VtdW1fbW9kZSA9PSBQUk9DX1RIRVJNQUxfUExBVEZPUk1fREVWKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yOiBlbnVtZXJhdGVkIGFzIHBsYXRmb3JtIGRldlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yOiBjb3VsZCBub3QgZW5hYmxlIGRldmljZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcHJvY190aGVybWFsX2FkZCgmcGRldi0+ZGV2LCAmcHJvY19wcml2KTsKKwlpZiAocmV0KSB7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgcHJvY19wcml2KTsKKwlwcm9jX3RoZXJtYWxfZW11bV9tb2RlID0gUFJPQ19USEVSTUFMX1BDSTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAgcHJvY190aGVybWFsX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcHJvY190aGVybWFsX3JlbW92ZShwY2lfZ2V0X2RydmRhdGEocGRldikpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHByb2NfdGhlcm1hbF9wY2lfaWRzW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfUFJPQ19CRFdfVEhFUk1BTCl9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX1BST0NfSFNCX1RIRVJNQUwpfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9QUk9DX0JTV19USEVSTUFMKX0sCisJeyAwLCB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHByb2NfdGhlcm1hbF9wY2lfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHByb2NfdGhlcm1hbF9wY2lfZHJpdmVyID0geworCS5uYW1lCQk9ICJwcm9jX3RoZXJtYWwiLAorCS5wcm9iZQkJPSBwcm9jX3RoZXJtYWxfcGNpX3Byb2JlLAorCS5yZW1vdmUJCT0gcHJvY190aGVybWFsX3BjaV9yZW1vdmUsCisJLmlkX3RhYmxlCT0gcHJvY190aGVybWFsX3BjaV9pZHMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGludDM0MDFfZGV2aWNlX2lkc1tdID0geworCXsiSU5UMzQwMSIsIDB9LAorCXsiIiwgMH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBpbnQzNDAxX2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbnQzNDAxX2RyaXZlciA9IHsKKwkucHJvYmUgPSBpbnQzNDAxX2FkZCwKKwkucmVtb3ZlID0gaW50MzQwMV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiaW50MzQwMSB0aGVybWFsIiwKKwkJLmFjcGlfbWF0Y2hfdGFibGUgPSBpbnQzNDAxX2RldmljZV9pZHMsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHByb2NfdGhlcm1hbF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW50MzQwMV9kcml2ZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwcm9jX3RoZXJtYWxfcGNpX2RyaXZlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJvY190aGVybWFsX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW50MzQwMV9kcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcHJvY190aGVybWFsX3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwcm9jX3RoZXJtYWxfaW5pdCk7Cittb2R1bGVfZXhpdChwcm9jX3RoZXJtYWxfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlNyaW5pdmFzIFBhbmRydXZhZGEgPHNyaW5pdmFzLnBhbmRydXZhZGFAbGludXguaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQcm9jZXNzb3IgVGhlcm1hbCBSZXBvcnRpbmcgRGV2aWNlIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2ludGVsX3Bvd2VyY2xhbXAuYyBiL2RyaXZlcnMvdGhlcm1hbC9pbnRlbF9wb3dlcmNsYW1wLmMKaW5kZXggZTk4YjQyNC4uNmNlZWJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL2ludGVsX3Bvd2VyY2xhbXAuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvaW50ZWxfcG93ZXJjbGFtcC5jCkBAIC02ODgsNiArNjg4LDcgQEAKIAl7IFg4Nl9WRU5ET1JfSU5URUwsIDYsIDB4NDV9LAogCXsgWDg2X1ZFTkRPUl9JTlRFTCwgNiwgMHg0Nn0sCiAJeyBYODZfVkVORE9SX0lOVEVMLCA2LCAweDRjfSwKKwl7IFg4Nl9WRU5ET1JfSU5URUwsIDYsIDB4NTZ9LAogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh4ODZjcHUsIGludGVsX3Bvd2VyY2xhbXBfaWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9vZi10aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvb2YtdGhlcm1hbC5jCmluZGV4IGUxNDViNjYuLmQ3MTdmM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9vZi10aGVybWFsLmMKKysrIGIvZHJpdmVycy90aGVybWFsL29mLXRoZXJtYWwuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgKgogICogUmV0dXJuOiBwb2ludGVyIHRvIHRyaXAgcG9pbnRzIHRhYmxlLCBOVUxMIG90aGVyd2lzZQogICovCi1jb25zdCBzdHJ1Y3QgdGhlcm1hbF90cmlwICogY29uc3QKK2NvbnN0IHN0cnVjdCB0aGVybWFsX3RyaXAgKgogb2ZfdGhlcm1hbF9nZXRfdHJpcF9wb2ludHMoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6KQogewogCXN0cnVjdCBfX3RoZXJtYWxfem9uZSAqZGF0YSA9IHR6LT5kZXZkYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3JjYXJfdGhlcm1hbC5jIGIvZHJpdmVycy90aGVybWFsL3JjYXJfdGhlcm1hbC5jCmluZGV4IDg4MDNlNjkuLjI1ODBhNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9yY2FyX3RoZXJtYWwuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvcmNhcl90aGVybWFsLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50IGlkOwotCWludCBjdGVtcDsKKwl1MzIgY3RlbXA7CiB9OwogCiAjZGVmaW5lIHJjYXJfdGhlcm1hbF9mb3JfZWFjaF9wcml2KHBvcywgY29tbW9uKQlcCkBAIC0xNDUsNyArMTQ1LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByY2FyX3ByaXZfdG9fZGV2KHByaXYpOwogCWludCBpOwotCWludCBjdGVtcCwgb2xkLCBuZXc7CisJdTMyIGN0ZW1wLCBvbGQsIG5ldzsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwpAQCAtMzcyLDYgKzM3Miw3IEBACiAJaW50IGk7CiAJaW50IHJldCA9IC1FTk9ERVY7CiAJaW50IGlkbGUgPSBJRExFX0lOVEVSVkFMOworCXUzMiBlbnJfYml0cyA9IDA7CiAKIAljb21tb24gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNvbW1vbiksIEdGUF9LRVJORUwpOwogCWlmICghY29tbW9uKQpAQCAtMzkwLDcgKzM5MSw3IEBACiAKIAkJLyoKIAkJICogcGxhdGZvcm0gaGFzIElSUSBzdXBwb3J0LgotCQkgKiBUaGVuLCBkcmllciB1c2UgY29tbW9uIHJlZ2lzdGVyCisJCSAqIFRoZW4sIGRyaXZlciB1c2VzIGNvbW1vbiByZWdpc3RlcnMKIAkJICovCiAKIAkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycS0+c3RhcnQsIHJjYXJfdGhlcm1hbF9pcnEsIDAsCkBAIC00MDgsOSArNDA5LDYgQEAKIAkJaWYgKElTX0VSUihjb21tb24tPmJhc2UpKQogCQkJcmV0dXJuIFBUUl9FUlIoY29tbW9uLT5iYXNlKTsKIAotCQkvKiBlbmFibGUgdGVtcGVyYXR1cmUgY29tcGFyYXRpb24gKi8KLQkJcmNhcl90aGVybWFsX2NvbW1vbl93cml0ZShjb21tb24sIEVOUiwgMHgwMDAzMDMwMyk7Ci0KIAkJaWRsZSA9IDA7IC8qIHBvbGxpbmcgZGVsYXkgaXMgbm90IG5lZWRlZCAqLwogCX0KIApAQCAtNDUyLDggKzQ1MCwxNSBAQAogCQkJcmNhcl90aGVybWFsX2lycV9lbmFibGUocHJpdik7CiAKIAkJbGlzdF9tb3ZlX3RhaWwoJnByaXYtPmxpc3QsICZjb21tb24tPmhlYWQpOworCisJCS8qIHVwZGF0ZSBFTlIgYml0cyAqLworCQllbnJfYml0cyB8PSAzIDw8IChpICogOCk7CiAJfQogCisJLyogZW5hYmxlIHRlbXBlcmF0dXJlIGNvbXBhcmF0aW9uICovCisJaWYgKGlycSkKKwkJcmNhcl90aGVybWFsX2NvbW1vbl93cml0ZShjb21tb24sIEVOUiwgZW5yX2JpdHMpOworCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY29tbW9uKTsKIAogCWRldl9pbmZvKGRldiwgIiVkIHNlbnNvciBwcm9iZWRcbiIsIGkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3JvY2tjaGlwX3RoZXJtYWwuYyBiL2RyaXZlcnMvdGhlcm1hbC9yb2NrY2hpcF90aGVybWFsLmMKaW5kZXggMWJjZGRmYy4uOWM2Y2U1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3JvY2tjaGlwX3RoZXJtYWwuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvcm9ja2NoaXBfdGhlcm1hbC5jCkBAIC02NzcsNyArNjc3LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJvY2tjaGlwX3RoZXJtYWxfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInJvY2tjaGlwLXRoZXJtYWwiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLnBtID0gJnJvY2tjaGlwX3RoZXJtYWxfcG1fb3BzLAogCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9yb2NrY2hpcF90aGVybWFsX21hdGNoLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9LY29uZmlnIGIvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvS2NvbmZpZwppbmRleCBmNzYwMzg5Li5jNDMzMDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgRVhZTk9TX1RIRVJNQUwKIAl0cmlzdGF0ZSAiRXh5bm9zIHRoZXJtYWwgbWFuYWdlbWVudCB1bml0IGRyaXZlciIKLQlkZXBlbmRzIG9uIEFSQ0hfSEFTX0JBTkRHQVAgJiYgT0YKKwlkZXBlbmRzIG9uIE9GCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBUTVUgKFRoZXJtYWwgTWFuYWdlbWVudAogCSAgVW5pdCkgZHJpdmVyIGZvciBTQU1TVU5HIEVYWU5PUyBzZXJpZXMgb2YgU29Dcy4gVGhpcyBkcml2ZXIgaW5pdGlhbGlzZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190aGVybWFsX2NvbW1vbi5jIGIvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RoZXJtYWxfY29tbW9uLmMKaW5kZXggYjZiZTU3Mi4uNmRjMzgxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RoZXJtYWxfY29tbW9uLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RoZXJtYWxfY29tbW9uLmMKQEAgLTM0Nyw3ICszNDcsNiBAQAogaW50IGV4eW5vc19yZWdpc3Rlcl90aGVybWFsKHN0cnVjdCB0aGVybWFsX3NlbnNvcl9jb25mICpzZW5zb3JfY29uZikKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBjcHVtYXNrIG1hc2tfdmFsOwogCXN0cnVjdCBleHlub3NfdGhlcm1hbF96b25lICp0aF96b25lOwogCiAJaWYgKCFzZW5zb3JfY29uZiB8fCAhc2Vuc29yX2NvbmYtPnJlYWRfdGVtcGVyYXR1cmUpIHsKQEAgLTM2NywxMyArMzY2LDE0IEBACiAJICoJIHNlbnNvcgogCSAqLwogCWlmIChzZW5zb3JfY29uZi0+Y29vbGluZ19kYXRhLmZyZXFfY2xpcF9jb3VudCA+IDApIHsKLQkJY3B1bWFza19zZXRfY3B1KDAsICZtYXNrX3ZhbCk7CiAJCXRoX3pvbmUtPmNvb2xfZGV2W3RoX3pvbmUtPmNvb2xfZGV2X3NpemVdID0KLQkJCQkJY3B1ZnJlcV9jb29saW5nX3JlZ2lzdGVyKCZtYXNrX3ZhbCk7CisJCQkJY3B1ZnJlcV9jb29saW5nX3JlZ2lzdGVyKGNwdV9wcmVzZW50X21hc2spOwogCQlpZiAoSVNfRVJSKHRoX3pvbmUtPmNvb2xfZGV2W3RoX3pvbmUtPmNvb2xfZGV2X3NpemVdKSkgewotCQkJZGV2X2VycihzZW5zb3JfY29uZi0+ZGV2LAotCQkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgY3B1ZnJlcSBjb29saW5nIGRldmljZVxuIik7Ci0JCQlyZXQgPSAtRUlOVkFMOworCQkJcmV0ID0gUFRSX0VSUih0aF96b25lLT5jb29sX2Rldlt0aF96b25lLT5jb29sX2Rldl9zaXplXSk7CisJCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQkJZGV2X2VycihzZW5zb3JfY29uZi0+ZGV2LAorCQkJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIGNwdWZyZXEgY29vbGluZyBkZXZpY2U6ICVkXG4iLAorCQkJCQlyZXQpOwogCQkJZ290byBlcnJfdW5yZWdpc3RlcjsKIAkJfQogCQl0aF96b25lLT5jb29sX2Rldl9zaXplKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9leHlub3NfdG11LmMgYi9kcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9leHlub3NfdG11LmMKaW5kZXggZDQ0ZDkxZC4uZDJmMWU2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RtdS5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXUuYwpAQCAtOTI3LDcgKzkyNywxMCBAQAogCS8qIFJlZ2lzdGVyIHRoZSBzZW5zb3Igd2l0aCB0aGVybWFsIG1hbmFnZW1lbnQgaW50ZXJmYWNlICovCiAJcmV0ID0gZXh5bm9zX3JlZ2lzdGVyX3RoZXJtYWwoc2Vuc29yX2NvbmYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHRoZXJtYWwgaW50ZXJmYWNlXG4iKTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgdGhlcm1hbCBpbnRlcmZhY2U6ICVkXG4iLAorCQkJCXJldCk7CiAJCWdvdG8gZXJyX2NsazsKIAl9CiAJZGF0YS0+cmVnX2NvbmYgPSBzZW5zb3JfY29uZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX2NvcmUuYyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX2NvcmUuYwppbmRleCA4NGZkZjA3Li44N2UwYjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9jb3JlLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfY29yZS5jCkBAIC05MzAsNyArOTMwLDcgQEAKIAlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqcG9zMTsKIAlzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqcG9zMjsKIAl1bnNpZ25lZCBsb25nIG1heF9zdGF0ZTsKLQlpbnQgcmVzdWx0OworCWludCByZXN1bHQsIHJldDsKIAogCWlmICh0cmlwID49IHR6LT50cmlwcyB8fCAodHJpcCA8IDAgJiYgdHJpcCAhPSBUSEVSTUFMX1RSSVBTX05PTkUpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk0Nyw3ICs5NDcsOSBAQAogCWlmICh0eiAhPSBwb3MxIHx8IGNkZXYgIT0gcG9zMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljZGV2LT5vcHMtPmdldF9tYXhfc3RhdGUoY2RldiwgJm1heF9zdGF0ZSk7CisJcmV0ID0gY2Rldi0+b3BzLT5nZXRfbWF4X3N0YXRlKGNkZXYsICZtYXhfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAkvKiBsb3dlciBkZWZhdWx0IDAsIHVwcGVyIGRlZmF1bHQgbWF4X3N0YXRlICovCiAJbG93ZXIgPSBsb3dlciA9PSBUSEVSTUFMX05PX0xJTUlUID8gMCA6IGxvd2VyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfY29yZS5oIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfY29yZS5oCmluZGV4IDkwODNlNzUuLjA1MzFjNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX2NvcmUuaAorKysgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9jb3JlLmgKQEAgLTkxLDcgKzkxLDcgQEAKIHZvaWQgb2ZfdGhlcm1hbF9kZXN0cm95X3pvbmVzKHZvaWQpOwogaW50IG9mX3RoZXJtYWxfZ2V0X250cmlwcyhzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqKTsKIGJvb2wgb2ZfdGhlcm1hbF9pc190cmlwX3ZhbGlkKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosIGludCk7Ci1jb25zdCBzdHJ1Y3QgdGhlcm1hbF90cmlwICogY29uc3QKK2NvbnN0IHN0cnVjdCB0aGVybWFsX3RyaXAgKgogb2ZfdGhlcm1hbF9nZXRfdHJpcF9wb2ludHMoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgb2ZfcGFyc2VfdGhlcm1hbF96b25lcyh2b2lkKSB7IHJldHVybiAwOyB9CkBAIC0xMDUsNyArMTA1LDcgQEAKIHsKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHRoZXJtYWxfdHJpcCAqIGNvbnN0CitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCB0aGVybWFsX3RyaXAgKgogb2ZfdGhlcm1hbF9nZXRfdHJpcF9wb2ludHMoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6KQogewogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3RpLXNvYy10aGVybWFsL3RpLXRoZXJtYWwtY29tbW9uLmMgYi9kcml2ZXJzL3RoZXJtYWwvdGktc29jLXRoZXJtYWwvdGktdGhlcm1hbC1jb21tb24uYwppbmRleCA1ZmQwMzg2Li4zZmIwNTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvdGktc29jLXRoZXJtYWwvdGktdGhlcm1hbC1jb21tb24uYworKysgYi9kcml2ZXJzL3RoZXJtYWwvdGktc29jLXRoZXJtYWwvdGktdGhlcm1hbC1jb21tb24uYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RoZXJtYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdV9jb29saW5nLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KQEAgLTQwNywxNyArNDA2LDE3IEBACiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghY3B1ZnJlcV9nZXRfY3VycmVudF9kcml2ZXIoKSkgewotCQlkZXZfZGJnKGJncC0+ZGV2LCAibm8gY3B1ZnJlcSBkcml2ZXIgeWV0XG4iKTsKLQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0JfQotCiAJLyogUmVnaXN0ZXIgY29vbGluZyBkZXZpY2UgKi8KIAlkYXRhLT5jb29sX2RldiA9IGNwdWZyZXFfY29vbGluZ19yZWdpc3RlcihjcHVfcHJlc2VudF9tYXNrKTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNvb2xfZGV2KSkgewotCQlkZXZfZXJyKGJncC0+ZGV2LAotCQkJIkZhaWxlZCB0byByZWdpc3RlciBjcHVmcmVxIGNvb2xpbmcgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoZGF0YS0+Y29vbF9kZXYpOworCQlpbnQgcmV0ID0gUFRSX0VSUihkYXRhLT5jb29sX2Rldik7CisKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihiZ3AtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIGNwdSBjb29saW5nIGRldmljZSAlZFxuIiwKKwkJCQlyZXQpOworCisJCXJldHVybiByZXQ7CiAJfQogCXRpX2JhbmRnYXBfc2V0X3NlbnNvcl9kYXRhKGJncCwgaWQsIGRhdGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX3R0eS5jIGIvZHJpdmVycy90dHkvbl90dHkuYwppbmRleCBkMmI0OTY3Li40ZGRmYTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9uX3R0eS5jCisrKyBiL2RyaXZlcnMvdHR5L25fdHR5LmMKQEAgLTIzOTksMTcgKzIzOTksMTIgQEAKIAogCXBvbGxfd2FpdChmaWxlLCAmdHR5LT5yZWFkX3dhaXQsIHdhaXQpOwogCXBvbGxfd2FpdChmaWxlLCAmdHR5LT53cml0ZV93YWl0LCB3YWl0KTsKLQlpZiAodGVzdF9iaXQoVFRZX09USEVSX0NMT1NFRCwgJnR0eS0+ZmxhZ3MpKQotCQltYXNrIHw9IFBPTExIVVA7CiAJaWYgKGlucHV0X2F2YWlsYWJsZV9wKHR0eSwgMSkpCiAJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKLQllbHNlIGlmIChtYXNrICYgUE9MTEhVUCkgewotCQl0dHlfZmx1c2hfdG9fbGRpc2ModHR5KTsKLQkJaWYgKGlucHV0X2F2YWlsYWJsZV9wKHR0eSwgMSkpCi0JCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0JfQogCWlmICh0dHktPnBhY2tldCAmJiB0dHktPmxpbmstPmN0cmxfc3RhdHVzKQogCQltYXNrIHw9IFBPTExQUkkgfCBQT0xMSU4gfCBQT0xMUkROT1JNOworCWlmICh0ZXN0X2JpdChUVFlfT1RIRVJfQ0xPU0VELCAmdHR5LT5mbGFncykpCisJCW1hc2sgfD0gUE9MTEhVUDsKIAlpZiAodHR5X2h1bmdfdXBfcChmaWxlKSkKIAkJbWFzayB8PSBQT0xMSFVQOwogCWlmICghKG1hc2sgJiAoUE9MTEhVUCB8IFBPTExJTiB8IFBPTExSRE5PUk0pKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9wY2kuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfcGNpLmMKaW5kZXggMzFmZWViMi4uZDFmOGRjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX3BjaS5jCkBAIC0xODE1LDcgKzE4MTUsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1wY2lfd2NoX2NoMzgyX3NldHVwKHN0cnVjdCBzZXJpYWxfcHJpdmF0ZSAqcHJpdiwKK3BjaV93Y2hfY2gzOHhfc2V0dXAoc3RydWN0IHNlcmlhbF9wcml2YXRlICpwcml2LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNpc2VyaWFsX2JvYXJkICpib2FyZCwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVhcnRfODI1MF9wb3J0ICpwb3J0LCBpbnQgaWR4KQogewpAQCAtMTg4MCw2ICsxODgwLDcgQEAKIAogI2RlZmluZSBQQ0lFX1ZFTkRPUl9JRF9XQ0gJCTB4MWMwMAogI2RlZmluZSBQQ0lFX0RFVklDRV9JRF9XQ0hfQ0gzODJfMlMxUAkweDMyNTAKKyNkZWZpbmUgUENJRV9ERVZJQ0VfSURfV0NIX0NIMzg0XzRTCTB4MzQ3MAogCiAvKiBVbmtub3duIHZlbmRvcnMvY2FyZHMgLSB0aGlzIHNob3VsZCBub3QgYmUgaW4gbGludXgvcGNpX2lkcy5oICovCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfVU5LTk9XTl8weDE1ODQJMHgxNTg0CkBAIC0yNTcxLDEzICsyNTcyLDIxIEBACiAJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAogCQkuc2V0dXAJCT0gcGNpX3djaF9jaDM1M19zZXR1cCwKIAl9LAotCS8qIFdDSCBDSDM4MiAyUzFQIGNhcmQgKDE2NzUwIGNsb25lKSAqLworCS8qIFdDSCBDSDM4MiAyUzFQIGNhcmQgKDE2ODUwIGNsb25lKSAqLwogCXsKIAkJLnZlbmRvciAgICAgICAgID0gUENJRV9WRU5ET1JfSURfV0NILAogCQkuZGV2aWNlICAgICAgICAgPSBQQ0lFX0RFVklDRV9JRF9XQ0hfQ0gzODJfMlMxUCwKIAkJLnN1YnZlbmRvciAgICAgID0gUENJX0FOWV9JRCwKIAkJLnN1YmRldmljZSAgICAgID0gUENJX0FOWV9JRCwKLQkJLnNldHVwICAgICAgICAgID0gcGNpX3djaF9jaDM4Ml9zZXR1cCwKKwkJLnNldHVwICAgICAgICAgID0gcGNpX3djaF9jaDM4eF9zZXR1cCwKKwl9LAorCS8qIFdDSCBDSDM4NCA0UyBjYXJkICgxNjg1MCBjbG9uZSkgKi8KKwl7CisJCS52ZW5kb3IgICAgICAgICA9IFBDSUVfVkVORE9SX0lEX1dDSCwKKwkJLmRldmljZSAgICAgICAgID0gUENJRV9ERVZJQ0VfSURfV0NIX0NIMzg0XzRTLAorCQkuc3VidmVuZG9yICAgICAgPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlICAgICAgPSBQQ0lfQU5ZX0lELAorCQkuc2V0dXAgICAgICAgICAgPSBwY2lfd2NoX2NoMzh4X3NldHVwLAogCX0sCiAJLyoKIAkgKiBBU0lYIGRldmljZXMgd2l0aCBGSUZPIGJ1ZwpAQCAtMjg3Niw2ICsyODg1LDcgQEAKIAlwYm5fZmludGVrXzQsCiAJcGJuX2ZpbnRla184LAogCXBibl9maW50ZWtfMTIsCisJcGJuX3djaDM4NF80LAogfTsKIAogLyoKQEAgLTM2NzUsNiArMzY4NSwxNCBAQAogCQkuYmFzZV9iYXVkCT0gMTE1MjAwLAogCQkuZmlyc3Rfb2Zmc2V0CT0gMHg0MCwKIAl9LAorCisJW3Bibl93Y2gzODRfNF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDQsCisJCS5iYXNlX2JhdWQgICAgICA9IDExNTIwMCwKKwkJLnVhcnRfb2Zmc2V0ICAgID0gOCwKKwkJLmZpcnN0X29mZnNldCAgID0gMHhDMCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJsYWNrbGlzdFtdID0gewpAQCAtMzY4Nyw2ICszNzA1LDcgQEAKIAl7IFBDSV9ERVZJQ0UoMHg0MzQ4LCAweDcwNTMpLCB9LCAvKiBXQ0ggQ0gzNTMgMlMxUCAqLwogCXsgUENJX0RFVklDRSgweDQzNDgsIDB4NTA1MyksIH0sIC8qIFdDSCBDSDM1MyAxUzFQICovCiAJeyBQQ0lfREVWSUNFKDB4MWMwMCwgMHgzMjUwKSwgfSwgLyogV0NIIENIMzgyIDJTMVAgKi8KKwl7IFBDSV9ERVZJQ0UoMHgxYzAwLCAweDM0NzApLCB9LCAvKiBXQ0ggQ0gzODQgNFMgKi8KIH07CiAKIC8qCkBAIC01NDAwLDYgKzU0MTksMTAgQEAKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkJMCwgMCwgcGJuX2IwX2J0XzJfMTE1MjAwIH0sCiAKKwl7CVBDSUVfVkVORE9SX0lEX1dDSCwgUENJRV9ERVZJQ0VfSURfV0NIX0NIMzg0XzRTLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLCBwYm5fd2NoMzg0XzQgfSwKKwogCS8qCiAJICogQ29tbXRlY2gsIEluYy4gRmFzdGNvbSBhZGFwdGVycwogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMKaW5kZXggMTkyNzNlMy4uMTA3ZTgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jCkBAIC0xNzU3LDMyICsxNzU3LDQzIEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfRVhZTk9TKQorI2RlZmluZSBFWFlOT1NfQ09NTU9OX1NFUklBTF9EUlZfREFUQQkJCQlcCisJLmluZm8gPSAmKHN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbykgewkJCVwKKwkJLm5hbWUJCT0gIlNhbXN1bmcgRXh5bm9zIFVBUlQiLAlcCisJCS50eXBlCQk9IFBPUlRfUzNDNjQwMCwJCQlcCisJCS5oYXNfZGl2c2xvdAk9IDEsCQkJCVwKKwkJLnJ4X2ZpZm9tYXNrCT0gUzVQVjIxMF9VRlNUQVRfUlhNQVNLLAlcCisJCS5yeF9maWZvc2hpZnQJPSBTNVBWMjEwX1VGU1RBVF9SWFNISUZULAlcCisJCS5yeF9maWZvZnVsbAk9IFM1UFYyMTBfVUZTVEFUX1JYRlVMTCwJXAorCQkudHhfZmlmb2Z1bGwJPSBTNVBWMjEwX1VGU1RBVF9UWEZVTEwsCVwKKwkJLnR4X2ZpZm9tYXNrCT0gUzVQVjIxMF9VRlNUQVRfVFhNQVNLLAlcCisJCS50eF9maWZvc2hpZnQJPSBTNVBWMjEwX1VGU1RBVF9UWFNISUZULAlcCisJCS5kZWZfY2xrX3NlbAk9IFMzQzI0MTBfVUNPTl9DTEtTRUwwLAkJXAorCQkubnVtX2Nsa3MJPSAxLAkJCQlcCisJCS5jbGtzZWxfbWFzawk9IDAsCQkJCVwKKwkJLmNsa3NlbF9zaGlmdAk9IDAsCQkJCVwKKwl9LAkJCQkJCQlcCisJLmRlZl9jZmcgPSAmKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcpIHsJCQlcCisJCS51Y29uCQk9IFM1UFYyMTBfVUNPTl9ERUZBVUxULAkJXAorCQkudWZjb24JCT0gUzVQVjIxMF9VRkNPTl9ERUZBVUxULAlcCisJCS5oYXNfZnJhY3ZhbAk9IDEsCQkJCVwKKwl9CQkJCQkJCVwKKwogc3RhdGljIHN0cnVjdCBzM2MyNHh4X3NlcmlhbF9kcnZfZGF0YSBleHlub3M0MjEwX3NlcmlhbF9kcnZfZGF0YSA9IHsKLQkuaW5mbyA9ICYoc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvKSB7Ci0JCS5uYW1lCQk9ICJTYW1zdW5nIEV4eW5vczQgVUFSVCIsCi0JCS50eXBlCQk9IFBPUlRfUzNDNjQwMCwKLQkJLmhhc19kaXZzbG90CT0gMSwKLQkJLnJ4X2ZpZm9tYXNrCT0gUzVQVjIxMF9VRlNUQVRfUlhNQVNLLAotCQkucnhfZmlmb3NoaWZ0CT0gUzVQVjIxMF9VRlNUQVRfUlhTSElGVCwKLQkJLnJ4X2ZpZm9mdWxsCT0gUzVQVjIxMF9VRlNUQVRfUlhGVUxMLAotCQkudHhfZmlmb2Z1bGwJPSBTNVBWMjEwX1VGU1RBVF9UWEZVTEwsCi0JCS50eF9maWZvbWFzawk9IFM1UFYyMTBfVUZTVEFUX1RYTUFTSywKLQkJLnR4X2ZpZm9zaGlmdAk9IFM1UFYyMTBfVUZTVEFUX1RYU0hJRlQsCi0JCS5kZWZfY2xrX3NlbAk9IFMzQzI0MTBfVUNPTl9DTEtTRUwwLAotCQkubnVtX2Nsa3MJPSAxLAotCQkuY2xrc2VsX21hc2sJPSAwLAotCQkuY2xrc2VsX3NoaWZ0CT0gMCwKLQl9LAotCS5kZWZfY2ZnID0gJihzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnKSB7Ci0JCS51Y29uCQk9IFM1UFYyMTBfVUNPTl9ERUZBVUxULAotCQkudWZjb24JCT0gUzVQVjIxMF9VRkNPTl9ERUZBVUxULAotCQkuaGFzX2ZyYWN2YWwJPSAxLAotCX0sCisJRVhZTk9TX0NPTU1PTl9TRVJJQUxfRFJWX0RBVEEsCiAJLmZpZm9zaXplID0geyAyNTYsIDY0LCAxNiwgMTYgfSwKIH07CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9zZXJpYWxfZHJ2X2RhdGEgZXh5bm9zNTQzM19zZXJpYWxfZHJ2X2RhdGEgPSB7CisJRVhZTk9TX0NPTU1PTl9TRVJJQUxfRFJWX0RBVEEsCisJLmZpZm9zaXplID0geyA2NCwgMjU2LCAxNiwgMjU2IH0sCit9OworCiAjZGVmaW5lIEVYWU5PUzQyMTBfU0VSSUFMX0RSVl9EQVRBICgoa2VybmVsX3Vsb25nX3QpJmV4eW5vczQyMTBfc2VyaWFsX2Rydl9kYXRhKQorI2RlZmluZSBFWFlOT1M1NDMzX1NFUklBTF9EUlZfREFUQSAoKGtlcm5lbF91bG9uZ190KSZleHlub3M1NDMzX3NlcmlhbF9kcnZfZGF0YSkKICNlbHNlCiAjZGVmaW5lIEVYWU5PUzQyMTBfU0VSSUFMX0RSVl9EQVRBIChrZXJuZWxfdWxvbmdfdClOVUxMCisjZGVmaW5lIEVYWU5PUzU0MzNfU0VSSUFMX0RSVl9EQVRBIChrZXJuZWxfdWxvbmdfdClOVUxMCiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgczNjMjR4eF9zZXJpYWxfZHJpdmVyX2lkc1tdID0gewpAQCAtMTgwNCw2ICsxODE1LDkgQEAKIAl9LCB7CiAJCS5uYW1lCQk9ICJleHlub3M0MjEwLXVhcnQiLAogCQkuZHJpdmVyX2RhdGEJPSBFWFlOT1M0MjEwX1NFUklBTF9EUlZfREFUQSwKKwl9LCB7CisJCS5uYW1lCQk9ICJleHlub3M1NDMzLXVhcnQiLAorCQkuZHJpdmVyX2RhdGEJPSBFWFlOT1M1NDMzX1NFUklBTF9EUlZfREFUQSwKIAl9LAogCXsgfSwKIH07CkBAIC0xODIzLDYgKzE4MzcsOCBAQAogCQkuZGF0YSA9ICh2b2lkICopUzVQVjIxMF9TRVJJQUxfRFJWX0RBVEEgfSwKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IiwKIAkJLmRhdGEgPSAodm9pZCAqKUVYWU5PUzQyMTBfU0VSSUFMX0RSVl9EQVRBIH0sCisJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MzMtdWFydCIsCisJCS5kYXRhID0gKHZvaWQgKilFWFlOT1M1NDMzX1NFUklBTF9EUlZfREFUQSB9LAogCXt9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHMzYzI0eHhfdWFydF9kdF9tYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IDU3Y2E2MWIuLjk4NDYwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY29yZS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY29yZS5jCkBAIC0yMTY0LDcgKzIxNjQsOSBAQAogCQlicmVhazsKIAl9CiAKLQlkZXZfaW5mbyhwb3J0LT5kZXYsICIlcyVkIGF0ICVzIChpcnEgPSAlZCwgYmFzZV9iYXVkID0gJWQpIGlzIGEgJXNcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMlcyVzJWQgYXQgJXMgKGlycSA9ICVkLCBiYXNlX2JhdWQgPSAlZCkgaXMgYSAlc1xuIiwKKwkgICAgICAgcG9ydC0+ZGV2ID8gZGV2X25hbWUocG9ydC0+ZGV2KSA6ICIiLAorCSAgICAgICBwb3J0LT5kZXYgPyAiOiAiIDogIiIsCiAJICAgICAgIGRydi0+ZGV2X25hbWUsCiAJICAgICAgIGRydi0+dHR5X2RyaXZlci0+bmFtZV9iYXNlICsgcG9ydC0+bGluZSwKIAkgICAgICAgYWRkcmVzcywgcG9ydC0+aXJxLCBwb3J0LT51YXJ0Y2xrIC8gMTYsIHVhcnRfdHlwZShwb3J0KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS90dHlfaW8uYyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jCmluZGV4IDRmMzViNDMuLjUxZjA2NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9pby5jCisrKyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jCkBAIC0xNDY0LDYgKzE0NjQsOSBAQAogCSAgICBkcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfTUFTVEVSKQogCQlyZXR1cm4gLUVJTzsKIAorCWlmICh0ZXN0X2JpdChUVFlfRVhDTFVTSVZFLCAmdHR5LT5mbGFncykgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRUJVU1k7CisKIAl0dHktPmNvdW50Kys7CiAKIAlXQVJOX09OKCF0dHktPmxkaXNjKTsKQEAgLTIxMDYsMTAgKzIxMDksNiBAQAogCQlyZXR2YWwgPSAtRU5PREVWOwogCWZpbHAtPmZfZmxhZ3MgPSBzYXZlZF9mbGFnczsKIAotCWlmICghcmV0dmFsICYmIHRlc3RfYml0KFRUWV9FWENMVVNJVkUsICZ0dHktPmZsYWdzKSAmJgotCQkJCQkJIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHZhbCA9IC1FQlVTWTsKLQogCWlmIChyZXR2YWwpIHsKICNpZmRlZiBUVFlfREVCVUdfSEFOR1VQCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXJyb3IgJWQgaW4gb3BlbmluZyAlcy4uLlxuIiwgX19mdW5jX18sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9jb3JlLmMgYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9jb3JlLmMKaW5kZXggNWI5ODI1YS4uYTU3ZGM4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2hpcGlkZWEvY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2NvcmUuYwpAQCAtNjY5LDcgKzY2OSw2IEBACiAJaWYgKCFjaSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjaSk7CiAJY2ktPmRldiA9IGRldjsKIAljaS0+cGxhdGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKGRldik7CiAJY2ktPmlteDI4X3dyaXRlX2ZpeCA9ICEhKGNpLT5wbGF0ZGF0YS0+ZmxhZ3MgJgpAQCAtNzgzLDYgKzc4Miw3IEBACiAJCX0KIAl9CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjaSk7CiAJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGNpLT5pcnEsIGNpX2lycSwgSVJRRl9TSEFSRUQsCiAJCQljaS0+cGxhdGRhdGEtPm5hbWUsIGNpKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2hpcGlkZWEvaG9zdC5jIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvaG9zdC5jCmluZGV4IGMxNjk0Y2YuLjQ4NzMxZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS9ob3N0LmMKQEAgLTkxLDYgKzkxLDcgQEAKIAlpZiAoIWhjZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlkZXZfc2V0X2RydmRhdGEoY2ktPmRldiwgY2kpOwogCWhjZC0+cnNyY19zdGFydCA9IGNpLT5od19iYW5rLnBoeXM7CiAJaGNkLT5yc3JjX2xlbiA9IGNpLT5od19iYW5rLnNpemU7CiAJaGNkLT5yZWdzID0gY2ktPmh3X2JhbmsuYWJzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmggYi9kcml2ZXJzL3VzYi9jb3JlL290Z193aGl0ZWxpc3QuaAppbmRleCBkZTBjOWM5Li5hNjMxNWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL290Z193aGl0ZWxpc3QuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL290Z193aGl0ZWxpc3QuaApAQCAtNTUsNiArNTUsMTEgQEAKIAkgICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4YmFkZCkpCiAJCXJldHVybiAwOwogCisJLyogT1RHIFBFVCBkZXZpY2UgaXMgYWx3YXlzIHRhcmdldGVkIChzZWUgT1RHIDIuMCBFQ04gNi40LjIpICovCisJaWYgKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MWEwYSAmJgorCSAgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHgwMjAwKSkKKwkJcmV0dXJuIDE7CisKIAkvKiBOT1RFOiBjYW4ndCB1c2UgdXNiX21hdGNoX2lkKCkgc2luY2UgaW50ZXJmYWNlIGNhY2hlcwogCSAqIGFyZW4ndCBzZXQgdXAgeWV0LiB0aGlzIGlzIGN1dC9wYXN0ZSBmcm9tIHRoYXQgY29kZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCmluZGV4IDBmZmI0ZWQuLjQxZTUxMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwpAQCAtMTc5LDYgKzE3OSwxMCBAQAogCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTdlMCksIC5kcml2ZXJfaW5mbyA9CiAJCQlVU0JfUVVJUktfSUdOT1JFX1JFTU9URV9XQUtFVVAgfSwKIAorCS8qIFByb3RvY29sIGFuZCBPVEcgRWxlY3RyaWNhbCBUZXN0IERldmljZSAqLworCXsgVVNCX0RFVklDRSgweDFhMGEsIDB4MDIwMCksIC5kcml2ZXJfaW5mbyA9CisJCQlVU0JfUVVJUktfTElORUFSX1VGUkFNRV9JTlRSX0JJTlRFUlZBTCB9LAorCiAJeyB9ICAvKiB0ZXJtaW5hdGluZyBlbnRyeSBtdXN0IGJlIGxhc3QgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzIvY29yZV9pbnRyLmMgYi9kcml2ZXJzL3VzYi9kd2MyL2NvcmVfaW50ci5jCmluZGV4IGFkNDNjNWIuLjAyZTNlMmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MyL2NvcmVfaW50ci5jCisrKyBiL2RyaXZlcnMvdXNiL2R3YzIvY29yZV9pbnRyLmMKQEAgLTQ3NiwxMyArNDc2LDEzIEBACiAJdTMyIGdpbnRzdHM7CiAJaXJxcmV0dXJuX3QgcmV0dmFsID0gSVJRX05PTkU7CiAKKwlzcGluX2xvY2soJmhzb3RnLT5sb2NrKTsKKwogCWlmICghZHdjMl9pc19jb250cm9sbGVyX2FsaXZlKGhzb3RnKSkgewogCQlkZXZfd2Fybihoc290Zy0+ZGV2LCAiQ29udHJvbGxlciBpcyBkZWFkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3Bpbl9sb2NrKCZoc290Zy0+bG9jayk7Ci0KIAlnaW50c3RzID0gZHdjMl9yZWFkX2NvbW1vbl9pbnRyKGhzb3RnKTsKIAlpZiAoZ2ludHN0cyAmIH5HSU5UU1RTX1BSVElOVCkKIAkJcmV0dmFsID0gSVJRX0hBTkRMRUQ7CkBAIC01MTUsOCArNTE1LDggQEAKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrKCZoc290Zy0+bG9jayk7CiBvdXQ6CisJc3Bpbl91bmxvY2soJmhzb3RnLT5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZHdjMl9oYW5kbGVfY29tbW9uX2ludHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMi9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL2R3YzIvZ2FkZ2V0LmMKaW5kZXggMjAwMTY4ZS4uNzkyNDIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZHdjMi9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9kd2MyL2dhZGdldC5jCkBAIC0yNTY3LDcgKzI1NjcsNyBAQAogICogczNjX2hzb3RnX2VwX2Rpc2FibGUgLSBkaXNhYmxlIGdpdmVuIGVuZHBvaW50CiAgKiBAZXA6IFRoZSBlbmRwb2ludCB0byBkaXNhYmxlLgogICovCi1zdGF0aWMgaW50IHMzY19oc290Z19lcF9kaXNhYmxlKHN0cnVjdCB1c2JfZXAgKmVwKQorc3RhdGljIGludCBzM2NfaHNvdGdfZXBfZGlzYWJsZV9mb3JjZShzdHJ1Y3QgdXNiX2VwICplcCwgYm9vbCBmb3JjZSkKIHsKIAlzdHJ1Y3QgczNjX2hzb3RnX2VwICpoc19lcCA9IG91cl9lcChlcCk7CiAJc3RydWN0IGR3YzJfaHNvdGcgKmhzb3RnID0gaHNfZXAtPnBhcmVudDsKQEAgLTI1ODgsNyArMjU4OCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHNvdGctPmxvY2ssIGZsYWdzKTsKIAkvKiB0ZXJtaW5hdGUgYWxsIHJlcXVlc3RzIHdpdGggc2h1dGRvd24gKi8KLQlraWxsX2FsbF9yZXF1ZXN0cyhoc290ZywgaHNfZXAsIC1FU0hVVERPV04sIGZhbHNlKTsKKwlraWxsX2FsbF9yZXF1ZXN0cyhoc290ZywgaHNfZXAsIC1FU0hVVERPV04sIGZvcmNlKTsKIAogCWhzb3RnLT5maWZvX21hcCAmPSB+KDE8PGhzX2VwLT5maWZvX2luZGV4KTsKIAloc19lcC0+Zmlmb19pbmRleCA9IDA7CkBAIC0yNjA5LDYgKzI2MDksMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzM2NfaHNvdGdfZXBfZGlzYWJsZShzdHJ1Y3QgdXNiX2VwICplcCkKK3sKKwlyZXR1cm4gczNjX2hzb3RnX2VwX2Rpc2FibGVfZm9yY2UoZXAsIGZhbHNlKTsKK30KIC8qKgogICogb25fbGlzdCAtIGNoZWNrIHJlcXVlc3QgaXMgb24gdGhlIGdpdmVuIGVuZHBvaW50CiAgKiBAZXA6IFRoZSBlbmRwb2ludCB0byBjaGVjay4KQEAgLTI5MjQsNyArMjkyOCw3IEBACiAKIAkvKiBhbGwgZW5kcG9pbnRzIHNob3VsZCBiZSBzaHV0ZG93biAqLwogCWZvciAoZXAgPSAxOyBlcCA8IGhzb3RnLT5udW1fb2ZfZXBzOyBlcCsrKQotCQlzM2NfaHNvdGdfZXBfZGlzYWJsZSgmaHNvdGctPmVwc1tlcF0uZXApOworCQlzM2NfaHNvdGdfZXBfZGlzYWJsZV9mb3JjZSgmaHNvdGctPmVwc1tlcF0uZXAsIHRydWUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhzb3RnLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1wY2kuYyBiL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1wY2kuYwppbmRleCA3YzRmYWY3Li5iNjQyYTJmOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtcGNpLmMKQEAgLTMzLDYgKzMzLDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9CWVQJCTB4MGYzNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01SRkxECTB4MTE5ZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0JTVwkJMHgyMkI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfU1BUTFAJMHg5ZDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfU1BUSAkweGExMzAKIAogc3RydWN0IGR3YzNfcGNpIHsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwpAQCAtMjE5LDYgKzIyMSw4IEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfQlNXKSwgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9CWVQpLCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX01SRkxEKSwgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9TUFRMUCksIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfU1BUSCksIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9OTF9VU0IpLCB9LAogCXsgIH0JLyogVGVybWluYXRpbmcgRW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MzL2dhZGdldC5jIGIvZHJpdmVycy91c2IvZHdjMy9nYWRnZXQuYwppbmRleCBmMDNiMTM2Li44ZjY1YWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MzL2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL2R3YzMvZ2FkZ2V0LmMKQEAgLTg4Miw4ICs4ODIsNyBAQAogCiAJCQkJaWYgKGkgPT0gKHJlcXVlc3QtPm51bV9tYXBwZWRfc2dzIC0gMSkgfHwKIAkJCQkJCXNnX2lzX2xhc3QocykpIHsKLQkJCQkJaWYgKGxpc3RfaXNfbGFzdCgmcmVxLT5saXN0LAotCQkJCQkJCSZkZXAtPnJlcXVlc3RfbGlzdCkpCisJCQkJCWlmIChsaXN0X2VtcHR5KCZkZXAtPnJlcXVlc3RfbGlzdCkpCiAJCQkJCQlsYXN0X29uZSA9IHRydWU7CiAJCQkJCWNoYWluID0gZmFsc2U7CiAJCQkJfQpAQCAtOTAxLDYgKzkwMCw5IEBACiAJCQkJaWYgKGxhc3Rfb25lKQogCQkJCQlicmVhazsKIAkJCX0KKworCQkJaWYgKGxhc3Rfb25lKQorCQkJCWJyZWFrOwogCQl9IGVsc2UgewogCQkJZG1hID0gcmVxLT5yZXF1ZXN0LmRtYTsKIAkJCWxlbmd0aCA9IHJlcS0+cmVxdWVzdC5sZW5ndGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9oaWQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2hpZC5jCmluZGV4IDZlMDRlMzAyLi5hMWJjM2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9oaWQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9oaWQuYwpAQCAtMzk5LDggKzM5OSw5IEBACiAJdmFsdWUJPSBfX2xlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7CiAJbGVuZ3RoCT0gX19sZTE2X3RvX2NwdShjdHJsLT53TGVuZ3RoKTsKIAotCVZEQkcoY2RldiwgImhpZF9zZXR1cCBjcnRsX3JlcXVlc3QgOiBiUmVxdWVzdFR5cGU6MHgleCBiUmVxdWVzdDoweCV4ICIKLQkJIlZhbHVlOjB4JXhcbiIsIGN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsIHZhbHVlKTsKKwlWREJHKGNkZXYsCisJICAgICAiJXMgY3J0bF9yZXF1ZXN0IDogYlJlcXVlc3RUeXBlOjB4JXggYlJlcXVlc3Q6MHgleCBWYWx1ZToweCV4XG4iLAorCSAgICAgX19mdW5jX18sIGN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsIHZhbHVlKTsKIAogCXN3aXRjaCAoKGN0cmwtPmJSZXF1ZXN0VHlwZSA8PCA4KSB8IGN0cmwtPmJSZXF1ZXN0KSB7CiAJY2FzZSAoKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpIDw8IDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkuYwppbmRleCBhOTA0NDAzLi4yNTliNjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaS5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAkJcmVxID0gbWlkaV9hbGxvY19lcF9yZXEoZXAsIG1pZGktPmJ1Zmxlbik7CiAKIAlpZiAoIXJlcSkgewotCQlFUlJPUihtaWRpLCAiZ21pZGlfdHJhbnNtaXQ6IGFsbG9jX2VwX3JlcXVlc3QgZmFpbGVkXG4iKTsKKwkJRVJST1IobWlkaSwgIiVzOiBhbGxvY19lcF9yZXF1ZXN0IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCXJlcS0+bGVuZ3RoID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3VhYzEuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3VhYzEuYwppbmRleCBmN2IyMDMyLi5lOTcxNTg0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdWFjMS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3VhYzEuYwpAQCAtODk3LDcgKzg5Nyw2IEBACiAJc3RydWN0IGZfdWFjMV9vcHRzICpvcHRzOwogCiAJb3B0cyA9IGNvbnRhaW5lcl9vZihmLCBzdHJ1Y3QgZl91YWMxX29wdHMsIGZ1bmNfaW5zdCk7Ci0JZ2F1ZGlvX2NsZWFudXAob3B0cy0+Y2FyZCk7CiAJaWYgKG9wdHMtPmZuX3BsYXlfYWxsb2MpCiAJCWtmcmVlKG9wdHMtPmZuX3BsYXkpOwogCWlmIChvcHRzLT5mbl9jYXBfYWxsb2MpCkBAIC05MzUsNiArOTM0LDcgQEAKIAlzdHJ1Y3QgZl9hdWRpbyAqYXVkaW8gPSBmdW5jX3RvX2F1ZGlvKGYpOwogCXN0cnVjdCBmX3VhYzFfb3B0cyAqb3B0czsKIAorCWdhdWRpb19jbGVhbnVwKCZhdWRpby0+Y2FyZCk7CiAJb3B0cyA9IGNvbnRhaW5lcl9vZihmLT5maSwgc3RydWN0IGZfdWFjMV9vcHRzLCBmdW5jX2luc3QpOwogCWtmcmVlKGF1ZGlvKTsKIAltdXRleF9sb2NrKCZvcHRzLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYwppbmRleCBjNzQ0ZTQ5Li5kYjQ5ZWM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYwpAQCAtNDQxLDYgKzQ0MSw3IEBACiAJa2J1ZiA9IG1lbWR1cF91c2VyKGJ1ZiwgbGVuKTsKIAlpZiAoSVNfRVJSKGtidWYpKSB7CiAJCXZhbHVlID0gUFRSX0VSUihrYnVmKTsKKwkJa2J1ZiA9IE5VTEw7CiAJCWdvdG8gZnJlZTE7CiAJfQogCkBAIC00NDksNiArNDUwLDcgQEAKIAkJZGF0YS0+bmFtZSwgbGVuLCAoaW50KSB2YWx1ZSk7CiBmcmVlMToKIAltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCWtmcmVlIChrYnVmKTsKIAlyZXR1cm4gdmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvYXRtZWxfdXNiYV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvYXRtZWxfdXNiYV91ZGMuYwppbmRleCBjZTg4MjM3Li45ZjkzYmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2F0bWVsX3VzYmFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9hdG1lbF91c2JhX3VkYy5jCkBAIC03MTYsMTAgKzcxNiwxMCBAQAogCXJlcS0+dXNpbmdfZG1hID0gMTsKIAlyZXEtPmN0cmwgPSBVU0JBX0JGKERNQV9CVUZfTEVOLCByZXEtPnJlcS5sZW5ndGgpCiAJCQl8IFVTQkFfRE1BX0NIX0VOIHwgVVNCQV9ETUFfRU5EX0JVRl9JRQotCQkJfCBVU0JBX0RNQV9FTkRfVFJfRU4gfCBVU0JBX0RNQV9FTkRfVFJfSUU7CisJCQl8IFVTQkFfRE1BX0VORF9CVUZfRU47CiAKLQlpZiAoZXAtPmlzX2luKQotCQlyZXEtPmN0cmwgfD0gVVNCQV9ETUFfRU5EX0JVRl9FTjsKKwlpZiAoIWVwLT5pc19pbikKKwkJcmVxLT5jdHJsIHw9IFVTQkFfRE1BX0VORF9UUl9FTiB8IFVTQkFfRE1BX0VORF9UUl9JRTsKIAogCS8qCiAJICogQWRkIHRoaXMgcmVxdWVzdCB0byB0aGUgcXVldWUgYW5kIHN1Ym1pdCBmb3IgRE1BIGlmCkBAIC04MjgsNyArODI4LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiYV9lcCAqZXAgPSB0b191c2JhX2VwKF9lcCk7CiAJc3RydWN0IHVzYmFfdWRjICp1ZGMgPSBlcC0+dWRjOwotCXN0cnVjdCB1c2JhX3JlcXVlc3QgKnJlcSA9IHRvX3VzYmFfcmVxKF9yZXEpOworCXN0cnVjdCB1c2JhX3JlcXVlc3QgKnJlcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBzdGF0dXM7CiAKQEAgLTgzNyw2ICs4MzcsMTYgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIAorCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpCisJCQlicmVhazsKKwl9CisKKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmIChyZXEtPnVzaW5nX2RtYSkgewogCQkvKgogCQkgKiBJZiB0aGlzIHJlcXVlc3QgaXMgY3VycmVudGx5IGJlaW5nIHRyYW5zZmVycmVkLApAQCAtMTU2Myw3ICsxNTczLDYgQEAKIAlpZiAoKGVwc3RhdHVzICYgZXBjdHJsKSAmIFVTQkFfUlhfQktfUkRZKSB7CiAJCURCRyhEQkdfQlVTLCAiJXM6IFJYIGRhdGEgcmVhZHlcbiIsIGVwLT5lcC5uYW1lKTsKIAkJcmVjZWl2ZV9kYXRhKGVwKTsKLQkJdXNiYV9lcF93cml0ZWwoZXAsIENMUl9TVEEsIFVTQkFfUlhfQktfUkRZKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvYmRjL2JkY19lcC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9iZGMvYmRjX2VwLmMKaW5kZXggZmY2N2NlYS4uZDRmZThkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9iZGMvYmRjX2VwLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9iZGMvYmRjX2VwLmMKQEAgLTcxOCwxMCArNzE4LDExIEBACiAJc3RydWN0IGJkYyAqYmRjOwogCWludCByZXQgPSAwOwogCi0JYmRjID0gZXAtPmJkYzsKIAlpZiAoIXJlcSB8fCAhZXAgfHwgIWVwLT51c2JfZXAuZGVzYykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwliZGMgPSBlcC0+YmRjOworCiAJcmVxLT51c2JfcmVxLmFjdHVhbCA9IDA7CiAJcmVxLT51c2JfcmVxLnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAlyZXEtPmVwbnVtID0gZXAtPmVwX251bTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKaW5kZXggZTExM2ZkNy4uZjlhMzMyNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCkBAIC0xNTgxLDYgKzE1ODEsMTAgQEAKIAllbHNlCiAJCW5leHQgPSAobm93ICsgMiArIDcpICYgfjB4MDc7CS8qIGZ1bGwgZnJhbWUgY2FjaGUgKi8KIAorCS8qIElmIG5lZWRlZCwgaW5pdGlhbGl6ZSBsYXN0X2lzb19mcmFtZSBzbyB0aGF0IHRoaXMgVVJCIHdpbGwgYmUgc2VlbiAqLworCWlmIChlaGNpLT5pc29jX2NvdW50ID09IDApCisJCWVoY2ktPmxhc3RfaXNvX2ZyYW1lID0gbm93ID4+IDM7CisKIAkvKgogCSAqIFVzZSBlaGNpLT5sYXN0X2lzb19mcmFtZSBhcyB0aGUgYmFzZS4gIFRoZXJlIGNhbid0IGJlIGFueQogCSAqIFREcyBzY2hlZHVsZWQgZm9yIGVhcmxpZXIgdGhhbiB0aGF0LgpAQCAtMTYwMCwxMSArMTYwNCwxMSBAQAogCSAqLwogCW5vdzIgPSAobm93IC0gYmFzZSkgJiAobW9kIC0gMSk7CiAKLQkvKiBJcyB0aGUgc2NoZWR1bGUgYWxyZWFkeSBmdWxsPyAqLworCS8qIElzIHRoZSBzY2hlZHVsZSBhYm91dCB0byB3cmFwIGFyb3VuZD8gKi8KIAlpZiAodW5saWtlbHkoIWVtcHR5ICYmIHN0YXJ0IDwgcGVyaW9kKSkgewotCQllaGNpX2RiZyhlaGNpLCAiaXNvIHNjaGVkIGZ1bGwgJXAgKCV1LSV1IDwgJXUgbW9kICV1KVxuIiwKKwkJZWhjaV9kYmcoZWhjaSwgInJlcXVlc3QgJXAgd291bGQgb3ZlcmZsb3cgKCV1LSV1IDwgJXUgbW9kICV1KVxuIiwKIAkJCQl1cmIsIHN0cmVhbS0+bmV4dF91ZnJhbWUsIGJhc2UsIHBlcmlvZCwgbW9kKTsKLQkJc3RhdHVzID0gLUVOT1NQQzsKKwkJc3RhdHVzID0gLUVGQklHOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0xNjcxLDEwICsxNjc1LDYgQEAKIAl1cmItPnN0YXJ0X2ZyYW1lID0gc3RhcnQgJiAobW9kIC0gMSk7CiAJaWYgKCFzdHJlYW0tPmhpZ2hzcGVlZCkKIAkJdXJiLT5zdGFydF9mcmFtZSA+Pj0gMzsKLQotCS8qIE1ha2Ugc3VyZSBzY2FuX2lzb2MoKSBzZWVzIHRoZXNlICovCi0JaWYgKGVoY2ktPmlzb2NfY291bnQgPT0gMCkKLQkJZWhjaS0+bGFzdF9pc29fZnJhbWUgPSBub3cgPj4gMzsKIAlyZXR1cm4gc3RhdHVzOwogCiAgZmFpbDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS10ZWdyYS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXRlZ3JhLmMKaW5kZXggMTlhOWFmMS4uZmY5YWYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXRlZ3JhLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXRlZ3JhLmMKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCiAJdV9waHkgPSBkZXZtX3VzYl9nZXRfcGh5X2J5X3BoYW5kbGUoJnBkZXYtPmRldiwgIm52aWRpYSxwaHkiLCAwKTsKIAlpZiAoSVNfRVJSKHVfcGh5KSkgewotCQllcnIgPSBQVFJfRVJSKHVfcGh5KTsKKwkJZXJyID0gLUVQUk9CRV9ERUZFUjsKIAkJZ290byBjbGVhbnVwX2Nsa19lbjsKIAl9CiAJaGNkLT51c2JfcGh5ID0gdV9waHk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCmluZGV4IGRkNDgzYzEzLi5jZTYzNjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwpAQCAtNTY3LDcgKzU2Nyw4IEBACiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCXUzMiBjb250cm9sOwotCXUzMiBmbWludGVydmFsOworCXUzMiBmbWludGVydmFsID0gMDsKKwlib29sIG5vX2ZtaW50ZXJ2YWwgPSBmYWxzZTsKIAlpbnQgY250OwogCiAJaWYgKCFtbWlvX3Jlc291cmNlX2VuYWJsZWQocGRldiwgMCkpCkBAIC01NzcsNiArNTc4LDEzIEBACiAJaWYgKGJhc2UgPT0gTlVMTCkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBVTGkgTTUyMzcgT0hDSSBjb250cm9sbGVyIGxvY2tzIHRoZSB3aG9sZSBzeXN0ZW0gd2hlbiBhY2Nlc3NpbmcKKwkgKiB0aGUgT0hDSV9GTUlOVEVSVkFMIG9mZnNldC4KKwkgKi8KKwlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQUwgJiYgcGRldi0+ZGV2aWNlID09IDB4NTIzNykKKwkJbm9fZm1pbnRlcnZhbCA9IHRydWU7CisKIAljb250cm9sID0gcmVhZGwoYmFzZSArIE9IQ0lfQ09OVFJPTCk7CiAKIC8qIE9uIFBBLVJJU0MsIFBEQyBjYW4gbGVhdmUgSVIgc2V0IGluY29ycmVjdGx5OyBpZ25vcmUgaXQgdGhlcmUuICovCkBAIC02MTUsNyArNjIzLDkgQEAKIAl9CiAKIAkvKiBzb2Z0d2FyZSByZXNldCBvZiB0aGUgY29udHJvbGxlciwgcHJlc2VydmluZyBIY0ZtSW50ZXJ2YWwgKi8KLQlmbWludGVydmFsID0gcmVhZGwoYmFzZSArIE9IQ0lfRk1JTlRFUlZBTCk7CisJaWYgKCFub19mbWludGVydmFsKQorCQlmbWludGVydmFsID0gcmVhZGwoYmFzZSArIE9IQ0lfRk1JTlRFUlZBTCk7CisKIAl3cml0ZWwoT0hDSV9IQ1IsIGJhc2UgKyBPSENJX0NNRFNUQVRVUyk7CiAKIAkvKiByZXNldCByZXF1aXJlcyBtYXggMTAgdXMgZGVsYXkgKi8KQEAgLTYyNCw3ICs2MzQsOSBAQAogCQkJYnJlYWs7CiAJCXVkZWxheSgxKTsKIAl9Ci0Jd3JpdGVsKGZtaW50ZXJ2YWwsIGJhc2UgKyBPSENJX0ZNSU5URVJWQUwpOworCisJaWYgKCFub19mbWludGVydmFsKQorCQl3cml0ZWwoZm1pbnRlcnZhbCwgYmFzZSArIE9IQ0lfRk1JTlRFUlZBTCk7CiAKIAkvKiBOb3cgdGhlIGNvbnRyb2xsZXIgaXMgc2FmZWx5IGluIFNVU1BFTkQgYW5kIG5vdGhpbmcgY2FuIHdha2UgaXQgdXAgKi8KIAlpb3VubWFwKGJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCmluZGV4IDE0MmI2MDEuLjdmNzZjOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKQEAgLTgyLDYgKzgyLDggQEAKIAkJCQkibXVzdCBiZSBzdXNwZW5kZWQgZXh0cmEgc2xvd2x5IiwKIAkJCQlwZGV2LT5yZXZpc2lvbik7CiAJCX0KKwkJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0ZSRVNDT19MT0dJQ19QREspCisJCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9CUk9LRU5fU1RSRUFNUzsKIAkJLyogRnJlc2NvIExvZ2ljIGNvbmZpcm1zOiBhbGwgcmV2aXNpb25zIG9mIHRoaXMgY2hpcCBkbyBub3QKIAkJICogc3VwcG9ydCBNU0ksIGV2ZW4gdGhvdWdoIHNvbWUgb2YgdGhlbSBjbGFpbSB0byBpbiB0aGVpciBQQ0kKIAkJICogY2FwYWJpbGl0aWVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCAwMWZjYmI1Li5jNTBkOGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtMzgwMyw2ICszODAzLDE1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChzZXR1cCA9PSBTRVRVUF9DT05URVhUX09OTFkpIHsKKwkJc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCB2aXJ0X2Rldi0+b3V0X2N0eCk7CisJCWlmIChHRVRfU0xPVF9TVEFURShsZTMyX3RvX2NwdShzbG90X2N0eC0+ZGV2X3N0YXRlKSkgPT0KKwkJICAgIFNMT1RfU1RBVEVfREVGQVVMVCkgeworCQkJeGhjaV9kYmcoeGhjaSwgIlNsb3QgYWxyZWFkeSBpbiBkZWZhdWx0IHN0YXRlXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCiAJY29tbWFuZCA9IHhoY2lfYWxsb2NfY29tbWFuZCh4aGNpLCBmYWxzZSwgZmFsc2UsIEdGUF9LRVJORUwpOwogCWlmICghY29tbWFuZCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKaW5kZXggOWQ2ODM3Mi4uYjAwNTAxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwpAQCAtNzIsNiArNzIsOCBAQAogCiBjb25maWcgVVNCX01VU0JfVFVTQjYwMTAKIAl0cmlzdGF0ZSAiVFVTQjYwMTAiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyUExVUyB8fCBDT01QSUxFX1RFU1QKKwlkZXBlbmRzIG9uIE5PUF9VU0JfWENFSVYgPSBVU0JfTVVTQl9IRFJDICMgYm90aCBidWlsdC1pbiBvciBib3RoIG1vZHVsZXMKIAogY29uZmlnIFVTQl9NVVNCX09NQVAyUExVUwogCXRyaXN0YXRlICJPTUFQMjQzMCBhbmQgb253YXJkcyIKQEAgLTg1LDYgKzg3LDcgQEAKIGNvbmZpZyBVU0JfTVVTQl9EU1BTCiAJdHJpc3RhdGUgIlRJIERTUFMgcGxhdGZvcm1zIgogCXNlbGVjdCBVU0JfTVVTQl9BTTMzNVhfQ0hJTEQKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDJQTFVTIHx8IENPTVBJTEVfVEVTVAogCWRlcGVuZHMgb24gT0ZfSVJRCiAKIGNvbmZpZyBVU0JfTVVTQl9CTEFDS0ZJTgpAQCAtOTMsNiArOTYsNyBAQAogCiBjb25maWcgVVNCX01VU0JfVVg1MDAKIAl0cmlzdGF0ZSAiVXg1MDAgcGxhdGZvcm1zIgorCWRlcGVuZHMgb24gQVJDSF9VODUwMCB8fCBDT01QSUxFX1RFU1QKIAogY29uZmlnIFVTQl9NVVNCX0paNDc0MAogCXRyaXN0YXRlICJKWjQ3NDAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKaW5kZXggYTQ0MWEyZC4uMTc4MjUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwpAQCAtNjMsNyArNjMsNyBAQAogCWJmaW5fd3JpdGUxNihhZGRyICsgb2Zmc2V0LCBkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgYmluZl93cml0ZWwodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQsIHUzMiBkYXRhKQorc3RhdGljIHZvaWQgYmZpbl93cml0ZWwodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQsIHUzMiBkYXRhKQogewogCWJmaW5fd3JpdGUxNihhZGRyICsgb2Zmc2V0LCAodTE2KWRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NwcGk0MS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NwcGk0MS5jCmluZGV4IGY2NGZkOTYuLmMzOWExNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jcHBpNDEuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY3BwaTQxLmMKQEAgLTYyOCw5ICs2MjgsOSBAQAogCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChucCwgImRtYS1uYW1lcyIsIGksICZzdHIpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7Ci0JCWlmICghc3RybmNtcChzdHIsICJ0eCIsIDIpKQorCQlpZiAoc3Ryc3RhcnRzKHN0ciwgInR4IikpCiAJCQlpc190eCA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgInJ4IiwgMikpCisJCWVsc2UgaWYgKHN0cnN0YXJ0cyhzdHIsICJyeCIpKQogCQkJaXNfdHggPSAwOwogCQllbHNlIHsKIAkJCWRldl9lcnIoZGV2LCAiV3JvbmcgZG1hdHlwZSAlc1xuIiwgc3RyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZGVidWdmcy5jCmluZGV4IGFkMzcwMWEuLjQ4MTMxYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RlYnVnZnMuYwpAQCAtNTksMjAgKzU5LDEyIEBACiAJeyAiUnhNYXhQcCIsCU1VU0JfUlhNQVhQLAkxNiB9LAogCXsgIlJ4Q1NSIiwJTVVTQl9SWENTUiwJMTYgfSwKIAl7ICJSeENvdW50IiwJTVVTQl9SWENPVU5ULAkxNiB9LAotCXsgIkNvbmZpZ0RhdGEiLAlNVVNCX0NPTkZJR0RBVEEsOCB9LAogCXsgIkludHJSeEUiLAlNVVNCX0lOVFJSWEUsCTE2IH0sCiAJeyAiSW50clR4RSIsCU1VU0JfSU5UUlRYRSwJMTYgfSwKIAl7ICJJbnRyVXNiRSIsCU1VU0JfSU5UUlVTQkUsCTggfSwKIAl7ICJEZXZDdGwiLAlNVVNCX0RFVkNUTCwJOCB9LAotCXsgIkJhYmJsZUN0bCIsCU1VU0JfQkFCQkxFX0NUTCw4IH0sCi0JeyAiVHhGSUZPc3oiLAlNVVNCX1RYRklGT1NaLAk4IH0sCi0JeyAiUnhGSUZPc3oiLAlNVVNCX1JYRklGT1NaLAk4IH0sCi0JeyAiVHhGSUZPYWRkIiwJTVVTQl9UWEZJRk9BREQsCTE2IH0sCi0JeyAiUnhGSUZPYWRkIiwJTVVTQl9SWEZJRk9BREQsCTE2IH0sCiAJeyAiVkNvbnRyb2wiLAkweDY4LAkJMzIgfSwKIAl7ICJIV1ZlcnMiLAkweDY5LAkJMTYgfSwKLQl7ICJFUEluZm8iLAlNVVNCX0VQSU5GTywJOCB9LAotCXsgIlJBTUluZm8iLAlNVVNCX1JBTUlORk8sCTggfSwKIAl7ICJMaW5rSW5mbyIsCU1VU0JfTElOS0lORk8sCTggfSwKIAl7ICJWUExlbiIsCU1VU0JfVlBMRU4sCTggfSwKIAl7ICJIU19FT0YxIiwJTVVTQl9IU19FT0YxLAk4IH0sCkBAIC0xMDMsNiArOTUsMTYgQEAKIAl7ICJETUFfQ05UTGNoNyIsCTB4Mjc0LAkxNiB9LAogCXsgIkRNQV9BRERSY2g3IiwJMHgyNzgsCTMyIH0sCiAJeyAiRE1BX0NPVU5UY2g3IiwJMHgyN0MsCTMyIH0sCisjaWZuZGVmIENPTkZJR19CTEFDS0ZJTgorCXsgIkNvbmZpZ0RhdGEiLAlNVVNCX0NPTkZJR0RBVEEsOCB9LAorCXsgIkJhYmJsZUN0bCIsCU1VU0JfQkFCQkxFX0NUTCw4IH0sCisJeyAiVHhGSUZPc3oiLAlNVVNCX1RYRklGT1NaLAk4IH0sCisJeyAiUnhGSUZPc3oiLAlNVVNCX1JYRklGT1NaLAk4IH0sCisJeyAiVHhGSUZPYWRkIiwJTVVTQl9UWEZJRk9BREQsCTE2IH0sCisJeyAiUnhGSUZPYWRkIiwJTVVTQl9SWEZJRk9BREQsCTE2IH0sCisJeyAiRVBJbmZvIiwJTVVTQl9FUElORk8sCTggfSwKKwl7ICJSQU1JbmZvIiwJTVVTQl9SQU1JTkZPLAk4IH0sCisjZW5kaWYKIAl7ICB9CS8qIFRlcm1pbmF0aW5nIEVudHJ5ICovCiB9OwogCkBAIC0xOTcsMzAgKzE5OSwzMCBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBtaW5fdChzaXplX3QsIHNpemVvZihidWYpIC0gMSwgY291bnQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoIXN0cm5jbXAoYnVmLCAiZm9yY2UgaG9zdCIsIDkpKQorCWlmIChzdHJzdGFydHMoYnVmLCAiZm9yY2UgaG9zdCIpKQogCQl0ZXN0ID0gTVVTQl9URVNUX0ZPUkNFX0hPU1Q7CiAKLQlpZiAoIXN0cm5jbXAoYnVmLCAiZmlmbyBhY2Nlc3MiLCAxMSkpCisJaWYgKHN0cnN0YXJ0cyhidWYsICJmaWZvIGFjY2VzcyIpKQogCQl0ZXN0ID0gTVVTQl9URVNUX0ZJRk9fQUNDRVNTOwogCi0JaWYgKCFzdHJuY21wKGJ1ZiwgImZvcmNlIGZ1bGwtc3BlZWQiLCAxNSkpCisJaWYgKHN0cnN0YXJ0cyhidWYsICJmb3JjZSBmdWxsLXNwZWVkIikpCiAJCXRlc3QgPSBNVVNCX1RFU1RfRk9SQ0VfRlM7CiAKLQlpZiAoIXN0cm5jbXAoYnVmLCAiZm9yY2UgaGlnaC1zcGVlZCIsIDE1KSkKKwlpZiAoc3Ryc3RhcnRzKGJ1ZiwgImZvcmNlIGhpZ2gtc3BlZWQiKSkKIAkJdGVzdCA9IE1VU0JfVEVTVF9GT1JDRV9IUzsKIAotCWlmICghc3RybmNtcChidWYsICJ0ZXN0IHBhY2tldCIsIDEwKSkgeworCWlmIChzdHJzdGFydHMoYnVmLCAidGVzdCBwYWNrZXQiKSkgewogCQl0ZXN0ID0gTVVTQl9URVNUX1BBQ0tFVDsKIAkJbXVzYl9sb2FkX3Rlc3RwYWNrZXQobXVzYik7CiAJfQogCi0JaWYgKCFzdHJuY21wKGJ1ZiwgInRlc3QgSyIsIDYpKQorCWlmIChzdHJzdGFydHMoYnVmLCAidGVzdCBLIikpCiAJCXRlc3QgPSBNVVNCX1RFU1RfSzsKIAotCWlmICghc3RybmNtcChidWYsICJ0ZXN0IEoiLCA2KSkKKwlpZiAoc3Ryc3RhcnRzKGJ1ZiwgInRlc3QgSiIpKQogCQl0ZXN0ID0gTVVTQl9URVNUX0o7CiAKLQlpZiAoIXN0cm5jbXAoYnVmLCAidGVzdCBTRTAgTkFLIiwgMTIpKQorCWlmIChzdHJzdGFydHMoYnVmLCAidGVzdCBTRTAgTkFLIikpCiAJCXRlc3QgPSBNVVNCX1RFU1RfU0UwX05BSzsKIAogCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX1RFU1RNT0RFLCB0ZXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCmluZGV4IDIzZDQ3NGQzLi44ODNhOWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKQEAgLTI2NjMsNyArMjY2Myw2IEBACiAJaWYgKG11c2ItPnBvcnRfbW9kZSA9PSBNVVNCX1BPUlRfTU9ERV9HQURHRVQpCiAJCXJldHVybjsKIAl1c2JfcmVtb3ZlX2hjZChtdXNiLT5oY2QpOwotCW11c2ItPmhjZCA9IE5VTEw7CiB9CiAKIHZvaWQgbXVzYl9ob3N0X2ZyZWUoc3RydWN0IG11c2IgKm11c2IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LW12LXVzYi5jIGIvZHJpdmVycy91c2IvcGh5L3BoeS1tdi11c2IuYwppbmRleCA2OTllMzhjLi42OTdhNzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9waHkvcGh5LW12LXVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3BoeS9waHktbXYtdXNiLmMKQEAgLTMzOCw3ICszMzgsNiBAQAogc3RhdGljIHZvaWQgbXZfb3RnX3VwZGF0ZV9zdGF0ZShzdHJ1Y3QgbXZfb3RnICptdm90ZykKIHsKIAlzdHJ1Y3QgbXZfb3RnX2N0cmwgKm90Z19jdHJsID0gJm12b3RnLT5vdGdfY3RybDsKLQlzdHJ1Y3QgdXNiX3BoeSAqcGh5ID0gJm12b3RnLT5waHk7CiAJaW50IG9sZF9zdGF0ZSA9IG12b3RnLT5waHkub3RnLT5zdGF0ZTsKIAogCXN3aXRjaCAob2xkX3N0YXRlKSB7CkBAIC04NTgsMTAgKzg1NywxMCBAQAogewogCXN0cnVjdCBtdl9vdGcgKm12b3RnID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlpZiAobXZvdGctPnBoeS5zdGF0ZSAhPSBPVEdfU1RBVEVfQl9JRExFKSB7CisJaWYgKG12b3RnLT5waHkub3RnLT5zdGF0ZSAhPSBPVEdfU1RBVEVfQl9JRExFKSB7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsCiAJCQkgIk9URyBzdGF0ZSBpcyBub3QgQl9JRExFLCBpdCBpcyAlZCFcbiIsCi0JCQkgbXZvdGctPnBoeS5zdGF0ZSk7CisJCQkgbXZvdGctPnBoeS5vdGctPnN0YXRlKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LmMgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmMKaW5kZXggYjQwNjZhMDAuLjJmOTczNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuYworKysgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmMKQEAgLTU5LDYgKzU5LDkgQEAKIHsKIAlzdHJ1Y3QgdXNiX3BoeSAgKnBoeTsKIAorCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBoeSwgJnBoeV9saXN0LCBoZWFkKSB7CiAJCWlmIChub2RlICE9IHBoeS0+ZGV2LT5vZl9ub2RlKQogCQkJY29udGludWU7CkBAIC02Niw3ICs2OSw3IEBACiAJCXJldHVybiBwaHk7CiAJfQogCi0JcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRldm1fdXNiX3BoeV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKQpAQCAtMTkwLDEwICsxOTMsMTMgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGh5X2xvY2ssIGZsYWdzKTsKIAogCXBoeSA9IF9fb2ZfdXNiX2ZpbmRfcGh5KG5vZGUpOwotCWlmIChJU19FUlIocGh5KSB8fCAhdHJ5X21vZHVsZV9nZXQocGh5LT5kZXYtPmRyaXZlci0+b3duZXIpKSB7Ci0JCWlmICghSVNfRVJSKHBoeSkpCi0JCQlwaHkgPSBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOworCWlmIChJU19FUlIocGh5KSkgeworCQlkZXZyZXNfZnJlZShwdHIpOworCQlnb3RvIGVycjE7CisJfQogCisJaWYgKCF0cnlfbW9kdWxlX2dldChwaHktPmRldi0+ZHJpdmVyLT5vd25lcikpIHsKKwkJcGh5ID0gRVJSX1BUUigtRU5PREVWKTsKIAkJZGV2cmVzX2ZyZWUocHRyKTsKIAkJZ290byBlcnIxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCmluZGV4IDhkN2ZjNDguLjI5ZmExYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwpAQCAtNDYsNiArNDYsOCBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyB1c2JfY29uc29sZV9mYWtlX3R0eV9vcHMgPSB7Cit9OwogCiAvKgogICogVGhlIHBhcnNpbmcgb2YgdGhlIGNvbW1hbmQgbGluZSB3b3JrcyBleGFjdGx5IGxpa2UgdGhlCkBAIC0xMzcsMTMgKzEzOSwxNyBAQAogCQkJCWdvdG8gcmVzZXRfb3Blbl9jb3VudDsKIAkJCX0KIAkJCWtyZWZfaW5pdCgmdHR5LT5rcmVmKTsKLQkJCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIHR0eSk7CiAJCQl0dHktPmRyaXZlciA9IHVzYl9zZXJpYWxfdHR5X2RyaXZlcjsKIAkJCXR0eS0+aW5kZXggPSBjby0+aW5kZXg7CisJCQlpbml0X2xkc2VtKCZ0dHktPmxkaXNjX3NlbSk7CisJCQlJTklUX0xJU1RfSEVBRCgmdHR5LT50dHlfZmlsZXMpOworCQkJa3JlZl9nZXQoJnR0eS0+ZHJpdmVyLT5rcmVmKTsKKwkJCXR0eS0+b3BzID0gJnVzYl9jb25zb2xlX2Zha2VfdHR5X29wczsKIAkJCWlmICh0dHlfaW5pdF90ZXJtaW9zKHR0eSkpIHsKIAkJCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJCWdvdG8gZnJlZV90dHk7CisJCQkJZ290byBwdXRfdHR5OwogCQkJfQorCQkJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgdHR5KTsKIAkJfQogCiAJCS8qIG9ubHkgY2FsbCB0aGUgZGV2aWNlIHNwZWNpZmljIG9wZW4gaWYgdGhpcwpAQCAtMTYxLDcgKzE2Nyw3IEBACiAJCQlzZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKHR0eSwgcG9ydCwgJmR1bW15KTsKIAogCQkJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgTlVMTCk7Ci0JCQlrZnJlZSh0dHkpOworCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0KIAkJc2V0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5wb3J0LmZsYWdzKTsKIAl9CkBAIC0xNzcsOCArMTgzLDggQEAKIAogIGZhaWw6CiAJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgTlVMTCk7Ci0gZnJlZV90dHk6Ci0Ja2ZyZWUodHR5KTsKKyBwdXRfdHR5OgorCXR0eV9rcmVmX3B1dCh0dHkpOwogIHJlc2V0X29wZW5fY291bnQ6CiAJcG9ydC0+cG9ydC5jb3VudCA9IDA7CiAJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwppbmRleCA2YzRlYjNjLi5mNGM1NmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCkBAIC0xMjAsMTAgKzEyMCwxMiBAQAogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODVGOCkgfSwgLyogVmlydGVuaW8gUHJlb24zMiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODY2NCkgfSwgLyogQUMtU2VydmljZXMgQ0FOLUlGICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NjY1KSB9LCAvKiBBQy1TZXJ2aWNlcyBPQkQtSUYgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg4NzUpIH0sIC8qIENFTCBNZXNoQ29ubmVjdCBVU0IgU3RpY2sgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg4NTYpIH0sCS8qIENFTCBFTTM1NyBaaWdCZWUgVVNCIFN0aWNrIC0gTFIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg4NTcpIH0sCS8qIENFTCBFTTM1NyBaaWdCZWUgVVNCIFN0aWNrICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4OEE0KSB9LCAvKiBNTUIgTmV0d29ya3MgWmlnQmVlIFVTQiBEZXZpY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg4QTUpIH0sIC8qIFBsYW5ldCBJbm5vdmF0aW9uIEluZ2VuaSBaaWdCZWUgVVNCIERldmljZSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODk0NikgfSwgLyogS2V0cmEgTjEgV2lyZWxlc3MgSW50ZXJmYWNlICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4OTc3KSB9LAkvKiBDRUwgTWVzaFdvcmtzIERldktpdCBEZXZpY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjApIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjEpIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNzApIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IDFiZDE5MjIuLmNjZjFkZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAKIAlyZXMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYnNbaW5kZXhdLCBtZW1fZmxhZ3MpOwogCWlmIChyZXMpIHsKLQkJaWYgKHJlcyAhPSAtRVBFUk0pIHsKKwkJaWYgKHJlcyAhPSAtRVBFUk0gJiYgcmVzICE9IC1FTk9ERVYpIHsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiAlZFxuIiwKIAkJCQkJX19mdW5jX18sIHJlcyk7CkBAIC0zNzMsNyArMzczLDcgQEAKIAkJCQkJCQlfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBub256ZXJvIHVyYiBzdGF0dXM6ICVkXG4iLAorCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIG5vbnplcm8gdXJiIHN0YXR1czogJWRcbiIsCiAJCQkJCQkJX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJZ290byByZXN1Ym1pdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCAwNzdjNzE0Li5lMDdiMTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTQxMCw2ICs0MTAsOCBAQAogCX0KIAlwb3J0ID0gc2VyaWFsLT5wb3J0W21zZy0+cG9ydF07CiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICghcF9wcml2KQorCQlnb3RvIHJlc3VibWl0OwogCiAJLyogVXBkYXRlIGhhbmRzaGFraW5nIHBpbiBzdGF0ZSBpbmZvcm1hdGlvbiAqLwogCW9sZF9kY2Rfc3RhdGUgPSBwX3ByaXYtPmRjZF9zdGF0ZTsKQEAgLTQyMCw3ICs0MjIsNyBAQAogCiAJaWYgKG9sZF9kY2Rfc3RhdGUgIT0gcF9wcml2LT5kY2Rfc3RhdGUpCiAJCXR0eV9wb3J0X3R0eV9oYW5ndXAoJnBvcnQtPnBvcnQsIHRydWUpOwotCityZXN1Ym1pdDoKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyICE9IDApCkBAIC01MjcsNiArNTI5LDggQEAKIAl9CiAJcG9ydCA9IHNlcmlhbC0+cG9ydFttc2ctPnBvcnRdOwogCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoIXBfcHJpdikKKwkJZ290byByZXN1Ym1pdDsKIAogCS8qIFVwZGF0ZSBoYW5kc2hha2luZyBwaW4gc3RhdGUgaW5mb3JtYXRpb24gKi8KIAlvbGRfZGNkX3N0YXRlID0gcF9wcml2LT5kY2Rfc3RhdGU7CkBAIC01MzcsNyArNTQxLDcgQEAKIAogCWlmIChvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlICYmIG9sZF9kY2Rfc3RhdGUpCiAJCXR0eV9wb3J0X3R0eV9oYW5ndXAoJnBvcnQtPnBvcnQsIHRydWUpOwotCityZXN1Ym1pdDoKIAkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVyciAhPSAwKQpAQCAtNjA3LDYgKzYxMSw4IEBACiAJfQogCXBvcnQgPSBzZXJpYWwtPnBvcnRbbXNnLT5wb3J0TnVtYmVyXTsKIAlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKCFwX3ByaXYpCisJCWdvdG8gcmVzdWJtaXQ7CiAKIAkvKiBVcGRhdGUgaGFuZHNoYWtpbmcgcGluIHN0YXRlIGluZm9ybWF0aW9uICovCiAJb2xkX2RjZF9zdGF0ZSA9IHBfcHJpdi0+ZGNkX3N0YXRlOwpAQCAtNjE3LDcgKzYyMyw3IEBACiAKIAlpZiAob2xkX2RjZF9zdGF0ZSAhPSBwX3ByaXYtPmRjZF9zdGF0ZSAmJiBvbGRfZGNkX3N0YXRlKQogCQl0dHlfcG9ydF90dHlfaGFuZ3VwKCZwb3J0LT5wb3J0LCB0cnVlKTsKLQorcmVzdWJtaXQ6CiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVyciAhPSAwKQpAQCAtODU1LDYgKzg2MSw4IEBACiAKIAlwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOwogCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoIXBfcHJpdikKKwkJZ290byByZXN1Ym1pdDsKIAogCS8qIFVwZGF0ZSBoYW5kc2hha2luZyBwaW4gc3RhdGUgaW5mb3JtYXRpb24gKi8KIAlvbGRfZGNkX3N0YXRlID0gcF9wcml2LT5kY2Rfc3RhdGU7CkBAIC04NjUsNyArODczLDcgQEAKIAogCWlmIChvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlICYmIG9sZF9kY2Rfc3RhdGUpCiAJCXR0eV9wb3J0X3R0eV9oYW5ndXAoJnBvcnQtPnBvcnQsIHRydWUpOwotCityZXN1Ym1pdDoKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyICE9IDApCkBAIC05MjYsNiArOTM0LDggQEAKIAogCXBvcnQgPSBzZXJpYWwtPnBvcnRbbXNnLT5wb3J0XTsKIAlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKCFwX3ByaXYpCisJCWdvdG8gcmVzdWJtaXQ7CiAKIAkvKiBVcGRhdGUgaGFuZHNoYWtpbmcgcGluIHN0YXRlIGluZm9ybWF0aW9uICovCiAJb2xkX2RjZF9zdGF0ZSA9IHBfcHJpdi0+ZGNkX3N0YXRlOwpAQCAtOTM0LDcgKzk0NCw3IEBACiAKIAlpZiAob2xkX2RjZF9zdGF0ZSAhPSBwX3ByaXYtPmRjZF9zdGF0ZSAmJiBvbGRfZGNkX3N0YXRlKQogCQl0dHlfcG9ydF90dHlfaGFuZ3VwKCZwb3J0LT5wb3J0LCB0cnVlKTsKLQorcmVzdWJtaXQ6CiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVyciAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDdhNGMyMWIuLmVmZGNlZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTIzNCw2ICsyMzQsOCBAQAogCiAjZGVmaW5lIFFVQUxDT01NX1ZFTkRPUl9JRAkJCTB4MDVDNgogCisjZGVmaW5lIFNJRVJSQV9WRU5ET1JfSUQJCQkweDExOTkKKwogI2RlZmluZSBDTU9URUNIX1ZFTkRPUl9JRAkJCTB4MTZkOAogI2RlZmluZSBDTU9URUNIX1BST0RVQ1RfNjAwMQkJCTB4NjAwMQogI2RlZmluZSBDTU9URUNIX1BST0RVQ1RfQ01VXzMwMAkJCTB4NjAwMgpAQCAtNTEyLDcgKzUxNCw3IEBACiAJCU9QVElPTl9CTEFDS0xJU1RfUkVTRVJWRURfSUYgPSAyCiB9OwogCi0jZGVmaW5lIE1BWF9CTF9OVU0gIDgKKyNkZWZpbmUgTUFYX0JMX05VTSAgMTEKIHN0cnVjdCBvcHRpb25fYmxhY2tsaXN0X2luZm8gewogCS8qIGJpdGZpZWxkIG9mIGludGVyZmFjZSBudW1iZXJzIGZvciBPUFRJT05fQkxBQ0tMSVNUX1NFTkRTRVRVUCAqLwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2VuZHNldHVwOwpAQCAtNjAxLDYgKzYwMywxMSBAQAogCS5yZXNlcnZlZCA9IEJJVCgxKSB8IEJJVCg1KSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uX2JsYWNrbGlzdF9pbmZvIHNpZXJyYV9tYzczeHhfYmxhY2tsaXN0ID0geworCS5zZW5kc2V0dXAgPSBCSVQoMCkgfCBCSVQoMiksCisJLnJlc2VydmVkID0gQklUKDgpIHwgQklUKDEwKSB8IEJJVCgxMSksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgb3B0aW9uX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9DT0xUKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9SSUNPTEEpIH0sCkBAIC0xMDk4LDYgKzExMDUsOCBAQAogCXsgVVNCX0RFVklDRShRVUFMQ09NTV9WRU5ET1JfSUQsIDB4NjYxMyl9LCAvKiBPbmRhIEg2MDAvWlRFIE1GMzMwICovCiAJeyBVU0JfREVWSUNFKFFVQUxDT01NX1ZFTkRPUl9JRCwgMHgwMDIzKX0sIC8qIE9OWVggM0cgZGV2aWNlICovCiAJeyBVU0JfREVWSUNFKFFVQUxDT01NX1ZFTkRPUl9JRCwgMHg5MDAwKX0sIC8qIFNJTUNvbSBTSU01MjE4ICovCisJeyBVU0JfREVWSUNFX0lOVEVSRkFDRV9DTEFTUyhTSUVSUkFfVkVORE9SX0lELCAweDY4YzAsIDB4ZmYpLAorCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZzaWVycmFfbWM3M3h4X2JsYWNrbGlzdCB9LCAvKiBNQzczeHggKi8KIAl7IFVTQl9ERVZJQ0UoQ01PVEVDSF9WRU5ET1JfSUQsIENNT1RFQ0hfUFJPRFVDVF82MDAxKSB9LAogCXsgVVNCX0RFVklDRShDTU9URUNIX1ZFTkRPUl9JRCwgQ01PVEVDSF9QUk9EVUNUX0NNVV8zMDApIH0sCiAJeyBVU0JfREVWSUNFKENNT1RFQ0hfVkVORE9SX0lELCBDTU9URUNIX1BST0RVQ1RfNjAwMyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCmluZGV4IGNiM2UxNDcuLjljNjM4OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCkBAIC0xNDIsNyArMTQyLDYgQEAKIAl7REVWSUNFX1NXSSgweDBmM2QsIDB4NjhhMil9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM3NzAwICovCiAJe0RFVklDRV9TV0koMHgxMTRmLCAweDY4YTIpfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNzc1MCAqLwogCXtERVZJQ0VfU1dJKDB4MTE5OSwgMHg2OGEyKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzc3MTAgKi8KLQl7REVWSUNFX1NXSSgweDExOTksIDB4NjhjMCl9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM3M3h4ICovCiAJe0RFVklDRV9TV0koMHgxMTk5LCAweDkwMWMpfSwJLyogU2llcnJhIFdpcmVsZXNzIEVNNzcwMCAqLwogCXtERVZJQ0VfU1dJKDB4MTE5OSwgMHg5MDFmKX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBFTTczNTUgKi8KIAl7REVWSUNFX1NXSSgweDExOTksIDB4OTA0MCl9LAkvKiBTaWVycmEgV2lyZWxlc3MgTW9kZW0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLWRldGVjdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMtZGV0ZWN0LmgKaW5kZXggOGE2ZjM3MS4uOTg5M2Q2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMtZGV0ZWN0LmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMtZGV0ZWN0LmgKQEAgLTY5LDE2ICs2OSwzOSBAQAogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogQVNNMTA1MSBhbmQgb2xkZXIgQVNNMTA1MyBkZXZpY2VzIGhhdmUgdGhlIHNhbWUgdXNiLWlkLCBhbmQgVUFTIGlzCi0JICogYnJva2VuIG9uIHRoZSBBU00xMDUxLCB1c2UgdGhlIG51bWJlciBvZiBzdHJlYW1zIHRvIGRpZmZlcmVudGlhdGUuCi0JICogTmV3IEFTTTEwNTMtcyBhbHNvIHN1cHBvcnQgMzIgc3RyZWFtcywgYnV0IGhhdmUgYSBkaWZmZXJlbnQgcHJvZC1pZC4KKwkgKiBBU01lZGlhIGhhcyBhIG51bWJlciBvZiB1c2IzIHRvIHNhdGEgYnJpZGdlIGNoaXBzLCBhdCB0aGUgdGltZSBvZgorCSAqIHRoaXMgd3JpdGluZyB0aGUgZm9sbG93aW5nIHZlcnNpb25zIGV4aXN0OgorCSAqIEFTTTEwNTEgLSBubyB1YXMgc3VwcG9ydCB2ZXJzaW9uCisJICogQVNNMTA1MSAtIHdpdGggYnJva2VuICgqKSB1YXMgc3VwcG9ydAorCSAqIEFTTTEwNTMgLSB3aXRoIHdvcmtpbmcgdWFzIHN1cHBvcnQKKwkgKiBBU00xMTUzIC0gd2l0aCB3b3JraW5nIHVhcyBzdXBwb3J0CisJICoKKwkgKiBEZXZpY2VzIHdpdGggdGhlc2UgY2hpcHMgcmUtdXNlIGEgbnVtYmVyIG9mIGRldmljZS1pZHMgb3ZlciB0aGUKKwkgKiBlbnRpcmUgbGluZSwgc28gdGhlIGRldmljZS1pZCBpcyB1c2VsZXNzIHRvIGRldGVybWluZSBpZiB3ZSdyZQorCSAqIGRlYWxpbmcgd2l0aCBhbiBBU00xMDUxICh3aGljaCB3ZSB3YW50IHRvIGF2b2lkKS4KKwkgKgorCSAqIFRoZSBBU00xMTUzIGNhbiBiZSBpZGVudGlmaWVkIGJ5IGNvbmZpZy5NYXhQb3dlciA9PSAwLAorCSAqIHdoZXJlIGFzIHRoZSBBU00xMDV4IG1vZGVscyBoYXZlIGNvbmZpZy5NYXhQb3dlciA9PSAzNi4KKwkgKgorCSAqIERpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHRoZSBBU00xMDUzIGFuZCBBU00xMDUxIGlzIHRyaWNraWVyLCB3aGVuCisJICogY29ubmVjdGVkIG92ZXIgVVNCLTMgd2UgY2FuIGxvb2sgYXQgdGhlIG51bWJlciBvZiBzdHJlYW1zIHN1cHBvcnRlZCwKKwkgKiBBU00xMDUxIHN1cHBvcnRzIDMyIHN0cmVhbXMsIHdoZXJlIGFzIGVhcmx5IEFTTTEwNTMgdmVyc2lvbnMgc3VwcG9ydAorCSAqIDE2IHN0cmVhbXMsIG5ld2VyIEFTTTEwNTMtcyBhbHNvIHN1cHBvcnQgMzIgc3RyZWFtcywgYnV0IGhhdmUgYQorCSAqIGRpZmZlcmVudCBwcm9kLWlkLgorCSAqCisJICogKCopIEFTTTEwNTEgY2hpcHMgZG8gd29yayB3aXRoIFVBUyB3aXRoIHNvbWUgZGlza3MgKHdpdGggdGhlCisJICogICAgIFVTX0ZMX05PX1JFUE9SVF9PUENPREVTIHF1aXJrKSwgYnV0IGFyZSBicm9rZW4gd2l0aCBvdGhlciBkaXNrcwogCSAqLwogCWlmIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDE3NGMgJiYKLQkJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDU1YWEpIHsKLQkJaWYgKHVkZXYtPnNwZWVkIDwgVVNCX1NQRUVEX1NVUEVSKSB7CisJCQkobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4NTEwNiB8fAorCQkJIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDU1YWEpKSB7CisJCWlmICh1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk1heFBvd2VyID09IDApIHsKKwkJCS8qIEFTTTExNTMsIGRvIG5vdGhpbmcgKi8KKwkJfSBlbHNlIGlmICh1ZGV2LT5zcGVlZCA8IFVTQl9TUEVFRF9TVVBFUikgewogCQkJLyogTm8gc3RyZWFtcyBpbmZvLCBhc3N1bWUgQVNNMTA1MSAqLwogCQkJZmxhZ3MgfD0gVVNfRkxfSUdOT1JFX1VBUzsKIAkJfSBlbHNlIGlmICh1c2Jfc3NfbWF4X3N0cmVhbXMoJmVwc1sxXS0+c3NfZXBfY29tcCkgPT0gMzIpIHsKKwkJCS8qIFBvc3NpYmx5IGFuIEFTTTEwNTEsIGRpc2FibGUgdWFzICovCiAJCQlmbGFncyB8PSBVU19GTF9JR05PUkVfVUFTOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggMTFjN2E5Ni4uZDY4NGI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC01MDcsNyArNTA3LDcgQEAKIFVOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMGYsIDB4MDAwMCwgMHg5OTk5LAogCQkiU0NNIE1pY3Jvc3lzdGVtcyIsCiAJCSJlVVNCIFNDU0kgQWRhcHRlciAoQnVzIFBvd2VyZWQpIiwKLQkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgdXNiX3N0b3JfZXVzY3NpX2luaXQsCisJCVVTQl9TQ19TQ1NJLCBVU0JfUFJfQlVMSywgdXNiX3N0b3JfZXVzY3NpX2luaXQsCiAJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwKIAogVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDEwMSwgMHgwMjAwLCAweDAyMDAsCkBAIC0xOTk1LDYgKzE5OTUsMTMgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgfCBVU19GTF9TQU5FX1NFTlNFICksCiAKKy8qIFJlcG9ydGVkIGJ5IERtaXRyeSBOZXpoZXZlbmtvIDxkaW9uQGRpb24ub3JnLnVhPiAqLworVU5VU1VBTF9ERVYoICAweDE1MmQsIDB4MjU2NiwgMHgwMTE0LCAweDAxMTQsCisJCSJKTWljcm9uIiwKKwkJIlVTQiB0byBBVEEvQVRBUEkgQnJpZGdlIiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfQlJPS0VOX0ZVQSApLAorCiAvKiBFbnRyZWdhIFRlY2hub2xvZ2llcyBVMS1TQzI1IChsYXRlciBYaXJjb20gUG9ydEdlYXIgUEdTQ1NJKQogICogYW5kIE1hYyBVU0IgRG9jayBVU0ItU0NTSSAqLwogVU5VU1VBTF9ERVYoICAweDE2NDUsIDB4MDAwNywgMHgwMTAwLCAweDAxMzMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfdWFzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfdWFzLmgKaW5kZXggMThhMjgzZC4uZGJjMDBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3Vhcy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91YXMuaApAQCAtNDAsNiArNDAsMTYgQEAKICAqIGFuZCBkb24ndCBmb3JnZXQgdG8gQ0M6IHRoZSBVU0IgZGV2ZWxvcG1lbnQgbGlzdCA8bGludXgtdXNiQHZnZXIua2VybmVsLm9yZz4KICAqLwogCisvKgorICogQXByaWNvcm4gVVNCMyBkb25nbGUgc29tZXRpbWVzIHJldHVybnMgIlVTQlNVU0JTVVNCUyIgaW4gcmVzcG9uc2UgdG8gU0NTSQorICogY29tbWFuZHMgaW4gVUFTIG1vZGUuICBPYnNlcnZlZCB3aXRoIHRoZSAxLjI4IGZpcm13YXJlOyBhcmUgdGhlcmUgb3RoZXJzPworICovCitVTlVTVUFMX0RFVigweDA5ODQsIDB4MDMwMSwgMHgwMTI4LCAweDAxMjgsCisJCSJBcHJpY29ybiIsCisJCSIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfVUFTKSwKKwogLyogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD03OTUxMSAqLwogVU5VU1VBTF9ERVYoMHgwYmMyLCAweDIzMTIsIDB4MDAwMCwgMHg5OTk5LAogCQkiU2VhZ2F0ZSIsCkBAIC02OCw2ICs3OCwyMCBAQAogCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9OT19BVEFfMVgpLAogCisvKiBSZXBvcnRlZC1ieTogTWFyY2luIFphasSFY3prb3dza2kgPG1zenBha0B3cC5wbD4gKi8KK1VOVVNVQUxfREVWKDB4MGJjMiwgMHhhMDEzLCAweDAwMDAsIDB4OTk5OSwKKwkJIlNlYWdhdGUiLAorCQkiQmFja3VwIFBsdXMiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9OT19BVEFfMVgpLAorCisvKiBSZXBvcnRlZC1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4gKi8KK1VOVVNVQUxfREVWKDB4MGJjMiwgMHhhMGE0LCAweDAwMDAsIDB4OTk5OSwKKwkJIlNlYWdhdGUiLAorCQkiQmFja3VwIFBsdXMgRGVzayIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX05PX0FUQV8xWCksCisKIC8qIGh0dHBzOi8vYmJzLmFyY2hsaW51eC5vcmcvdmlld3RvcGljLnBocD9pZD0xODMxOTAgKi8KIFVOVVNVQUxfREVWKDB4MGJjMiwgMHhhYjIwLCAweDAwMDAsIDB4OTk5OSwKIAkJIlNlYWdhdGUiLApAQCAtODIsNiArMTA2LDEzIEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX05PX0FUQV8xWCksCiAKKy8qIFJlcG9ydGVkLWJ5OiBHLiBSaWNoYXJkIEJlbGxhbXkgPHJiZWxsYW15QHB0ZXJhZGlnbS5jb20+ICovCitVTlVTVUFMX0RFVigweDBiYzIsIDB4YWIyYSwgMHgwMDAwLCAweDk5OTksCisJCSJTZWFnYXRlIiwKKwkJIkJVUCBGYXN0IEhERCIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX05PX0FUQV8xWCksCisKIC8qIFJlcG9ydGVkLWJ5OiBDbGF1ZGlvIEJpenphcnJpIDxjbGF1ZGlvLmJpenphcnJpQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKDB4MTUyZCwgMHgwNTY3LCAweDAwMDAsIDB4OTk5OSwKIAkJIkpNaWNyb24iLApAQCAtODksMTQgKzEyMCw2IEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX05PX1JFUE9SVF9PUENPREVTKSwKIAotLyogTW9zdCBBU00xMDUxIGJhc2VkIGRldmljZXMgaGF2ZSBpc3N1ZXMgd2l0aCB1YXMsIGJsYWNrbGlzdCB0aGVtIGFsbCAqLwotLyogUmVwb3J0ZWQtYnk6IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+ICovCi1VTlVTVUFMX0RFVigweDE3NGMsIDB4NTEwNiwgMHgwMDAwLCAweDk5OTksCi0JCSJBU01lZGlhIiwKLQkJIkFTTTEwNTEiLAotCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAotCQlVU19GTF9JR05PUkVfVUFTKSwKLQogLyogUmVwb3J0ZWQtYnk6IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+ICovCiBVTlVTVUFMX0RFVigweDIxMDksIDB4MDcxMSwgMHgwMDAwLCAweDk5OTksCiAJCSJWSUEiLApAQCAtMTA0LDkgKzEyNywyMyBAQAogCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9OT19BVEFfMVgpLAogCisvKiBSZXBvcnRlZC1ieTogVGFrZW8gTmFrYXlhbWEgPGphdmhlcmFAZ214LmNvbT4gKi8KK1VOVVNVQUxfREVWKDB4MzU3ZCwgMHg3Nzg4LCAweDAwMDAsIDB4OTk5OSwKKwkJIkpNaWNyb24iLAorCQkiSk1TNTY2IiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfTk9fUkVQT1JUX09QQ09ERVMpLAorCiAvKiBSZXBvcnRlZC1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4gKi8KIFVOVVNVQUxfREVWKDB4NDk3MSwgMHgxMDEyLCAweDAwMDAsIDB4OTk5OSwKIAkJIkhpdGFjaGkiLAogCQkiRXh0ZXJuYWwgSEREIiwKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1VBUyksCisKKy8qIFJlcG9ydGVkLWJ5OiBSaWNoYXJkIEhlbmRlcnNvbiA8cnRoQHJlZGhhdC5jb20+ICovCitVTlVTVUFMX0RFVigweDQ5NzEsIDB4ODAxNywgMHgwMDAwLCAweDk5OTksCisJCSJTaW1wbGVUZWNoIiwKKwkJIkV4dGVybmFsIEhERCIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX05PX1JFUE9SVF9PUENPREVTKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYwppbmRleCAyNTUyMDFmLi43Y2MwMTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jCkBAIC04NDAsMTMgKzg0MCwxMSBAQAogCiBzdGF0aWMgaW50IHZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0JdTggdHlwZTsKIAlzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICp2ZGV2OwogCXN0cnVjdCBpb21tdV9ncm91cCAqZ3JvdXA7CiAJaW50IHJldDsKIAotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9IRUFERVJfVFlQRSwgJnR5cGUpOwotCWlmICgodHlwZSAmIFBDSV9IRUFERVJfVFlQRSkgIT0gUENJX0hFQURFUl9UWVBFX05PUk1BTCkKKwlpZiAocGRldi0+aGRyX3R5cGUgIT0gUENJX0hFQURFUl9UWVBFX05PUk1BTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlncm91cCA9IGlvbW11X2dyb3VwX2dldCgmcGRldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jCmluZGV4IDE0NDE5YTguLmQ0MTVkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmMKKysrIGIvZHJpdmVycy92aG9zdC9uZXQuYwpAQCAtNTM4LDcgKzUzOCw3IEBACiAJCSsraGVhZGNvdW50OwogCQlzZWcgKz0gaW47CiAJfQotCWhlYWRzW2hlYWRjb3VudCAtIDFdLmxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4gLSBkYXRhbGVuKTsKKwloZWFkc1toZWFkY291bnQgLSAxXS5sZW4gPSBjcHVfdG9fdmhvc3QzMih2cSwgbGVuICsgZGF0YWxlbik7CiAJKmlvdmNvdW50ID0gc2VnOwogCWlmICh1bmxpa2VseShsb2cpKQogCQkqbG9nX251bSA9IG5sb2dzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwppbmRleCAwMWMwMWNiLi5kNjk1YjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuYworKysgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwpAQCAtOTExLDYgKzkxMSwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZob3N0X3Njc2lfdG9fdGNtX2F0dHIoaW50IGF0dHIpCit7CisJc3dpdGNoIChhdHRyKSB7CisJY2FzZSBWSVJUSU9fU0NTSV9TX1NJTVBMRToKKwkJcmV0dXJuIFRDTV9TSU1QTEVfVEFHOworCWNhc2UgVklSVElPX1NDU0lfU19PUkRFUkVEOgorCQlyZXR1cm4gVENNX09SREVSRURfVEFHOworCWNhc2UgVklSVElPX1NDU0lfU19IRUFEOgorCQlyZXR1cm4gVENNX0hFQURfVEFHOworCWNhc2UgVklSVElPX1NDU0lfU19BQ0E6CisJCXJldHVybiBUQ01fQUNBX1RBRzsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIFRDTV9TSU1QTEVfVEFHOworfQorCiBzdGF0aWMgdm9pZCB0Y21fdmhvc3Rfc3VibWlzc2lvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdGNtX3Zob3N0X2NtZCAqY21kID0KQEAgLTkzNiw5ICs5NTMsMTAgQEAKIAlyYyA9IHRhcmdldF9zdWJtaXRfY21kX21hcF9zZ2xzKHNlX2NtZCwgdHZfbmV4dXMtPnR2bl9zZV9zZXNzLAogCQkJY21kLT50dmNfY2RiLCAmY21kLT50dmNfc2Vuc2VfYnVmWzBdLAogCQkJY21kLT50dmNfbHVuLCBjbWQtPnR2Y19leHBfZGF0YV9sZW4sCi0JCQljbWQtPnR2Y190YXNrX2F0dHIsIGNtZC0+dHZjX2RhdGFfZGlyZWN0aW9uLAotCQkJVEFSR0VUX1NDRl9BQ0tfS1JFRiwgc2dfcHRyLCBjbWQtPnR2Y19zZ2xfY291bnQsCi0JCQlOVUxMLCAwLCBzZ19wcm90X3B0ciwgY21kLT50dmNfcHJvdF9zZ2xfY291bnQpOworCQkJdmhvc3Rfc2NzaV90b190Y21fYXR0cihjbWQtPnR2Y190YXNrX2F0dHIpLAorCQkJY21kLT50dmNfZGF0YV9kaXJlY3Rpb24sIFRBUkdFVF9TQ0ZfQUNLX0tSRUYsCisJCQlzZ19wdHIsIGNtZC0+dHZjX3NnbF9jb3VudCwgTlVMTCwgMCwgc2dfcHJvdF9wdHIsCisJCQljbWQtPnR2Y19wcm90X3NnbF9jb3VudCk7CiAJaWYgKHJjIDwgMCkgewogCQl0cmFuc3BvcnRfc2VuZF9jaGVja19jb25kaXRpb25fYW5kX3NlbnNlKHNlX2NtZCwKIAkJCQlUQ01fTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKaW5kZXggZWQ3MWI1My4uY2I4MDdkMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYworKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKQEAgLTcxMyw5ICs3MTMsMTMgQEAKIAkJCXIgPSAtRUZBVUxUOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKChhLmF2YWlsX3VzZXJfYWRkciAmIChzaXplb2YgKnZxLT5hdmFpbC0+cmluZyAtIDEpKSB8fAotCQkgICAgKGEudXNlZF91c2VyX2FkZHIgJiAoc2l6ZW9mICp2cS0+dXNlZC0+cmluZyAtIDEpKSB8fAotCQkgICAgKGEubG9nX2d1ZXN0X2FkZHIgJiAoc2l6ZW9mICp2cS0+dXNlZC0+cmluZyAtIDEpKSkgeworCisJCS8qIE1ha2Ugc3VyZSBpdCdzIHNhZmUgdG8gY2FzdCBwb2ludGVycyB0byB2cmluZyB0eXBlcy4gKi8KKwkJQlVJTERfQlVHX09OKF9fYWxpZ25vZl9fICp2cS0+YXZhaWwgPiBWUklOR19BVkFJTF9BTElHTl9TSVpFKTsKKwkJQlVJTERfQlVHX09OKF9fYWxpZ25vZl9fICp2cS0+dXNlZCA+IFZSSU5HX1VTRURfQUxJR05fU0laRSk7CisJCWlmICgoYS5hdmFpbF91c2VyX2FkZHIgJiAoVlJJTkdfQVZBSUxfQUxJR05fU0laRSAtIDEpKSB8fAorCQkgICAgKGEudXNlZF91c2VyX2FkZHIgJiAoVlJJTkdfVVNFRF9BTElHTl9TSVpFIC0gMSkpIHx8CisJCSAgICAoYS5sb2dfZ3Vlc3RfYWRkciAmIChzaXplb2YodTY0KSAtIDEpKSkgewogCQkJciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9icm9hZHNoZWV0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvYnJvYWRzaGVldGZiLmMKaW5kZXggMWMyOWJkMS4uMGU1ZmRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9icm9hZHNoZWV0ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2Jyb2Fkc2hlZXRmYi5jCkBAIC02MzYsNyArNjM2LDcgQEAKIAkJZXJyID0gYnJvYWRzaGVldF9zcGlmbGFzaF9yZWFkX3JhbmdlKHBhciwgc3RhcnRfc2VjdG9yX2FkZHIsCiAJCQkJCQlkYXRhX3N0YXJ0X2FkZHIsIHNlY3Rvcl9idWZmZXIpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gb3V0OwogCX0KIAogCS8qIG5vdyB3ZSBjb3B5IG91ciBkYXRhIGludG8gdGhlIHJpZ2h0IHBsYWNlIGluIHRoZSBzZWN0b3IgYnVmZmVyICovCkBAIC02NTcsNyArNjU3LDcgQEAKIAkJZXJyID0gYnJvYWRzaGVldF9zcGlmbGFzaF9yZWFkX3JhbmdlKHBhciwgdGFpbF9zdGFydF9hZGRyLAogCQkJdGFpbF9sZW4sIHNlY3Rvcl9idWZmZXIgKyB0YWlsX3N0YXJ0X2FkZHIpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gb3V0OwogCX0KIAogCS8qIGlmIHdlIGdvdCBoZXJlIHdlIGhhdmUgdGhlIGZ1bGwgc2VjdG9yIHRoYXQgd2Ugd2FudCB0byByZXdyaXRlLiAqLwpAQCAtNjY1LDExICs2NjUsMTMgQEAKIAkvKiBmaXJzdCBlcmFzZSB0aGUgc2VjdG9yICovCiAJZXJyID0gYnJvYWRzaGVldF9zcGlmbGFzaF9lcmFzZV9zZWN0b3IocGFyLCBzdGFydF9zZWN0b3JfYWRkcik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAKIAkvKiBub3cgd3JpdGUgaXQgKi8KIAllcnIgPSBicm9hZHNoZWV0X3NwaWZsYXNoX3dyaXRlX3NlY3RvcihwYXIsIHN0YXJ0X3NlY3Rvcl9hZGRyLAogCQkJCQlzZWN0b3JfYnVmZmVyLCBzZWN0b3Jfc2l6ZSk7CitvdXQ6CisJa2ZyZWUoc2VjdG9yX2J1ZmZlcik7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2RlZmlvLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfZGVmaW8uYwppbmRleCA5MDBhYTRlLi5kNmNhYjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfZGVmaW8uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfZGVmaW8uYwpAQCAtODMsOSArODMsMTAgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmluZm8tPmRlZmVycmVkX3dvcmspOwogCiAJLyogUnVuIGl0IGltbWVkaWF0ZWx5ICovCi0JZXJyID0gc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpbmZvLT5kZWZlcnJlZF93b3JrLCAwKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmluZm8tPmRlZmVycmVkX3dvcmssIDApOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZiX2RlZmVycmVkX2lvX2ZzeW5jKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvaGRtaV9wbGwuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2hkbWlfcGxsLmMKaW5kZXggODdhY2NkYi4uYWM4M2VmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvaGRtaV9wbGwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9oZG1pX3BsbC5jCkBAIC0xMzIsNyArMTMyLDYgQEAKIAkubVhfbWF4ID0gMTI3LAogCS5maW50X21pbiA9IDUwMDAwMCwKIAkuZmludF9tYXggPSAyNTAwMDAwLAotCS5jbGtkY29fbWF4ID0gMTgwMDAwMDAwMCwKIAogCS5jbGtkY29fbWluID0gNTAwMDAwMDAwLAogCS5jbGtkY29fbG93ID0gMTAwMDAwMDAwMCwKQEAgLTE1Niw3ICsxNTUsNiBAQAogCS5tWF9tYXggPSAxMjcsCiAJLmZpbnRfbWluID0gNjIwMDAwLAogCS5maW50X21heCA9IDI1MDAwMDAsCi0JLmNsa2Rjb19tYXggPSAxODAwMDAwMDAwLAogCiAJLmNsa2Rjb19taW4gPSA3NTAwMDAwMDAsCiAJLmNsa2Rjb19sb3cgPSAxNTAwMDAwMDAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvcGxsLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9wbGwuYwppbmRleCA1MGJjNjJjNS4uMzM1ZmZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvcGxsLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvcGxsLmMKQEAgLTk3LDcgKzk3LDggQEAKIAlyZXR1cm4gMDsKIAogZXJyX2VuYWJsZToKLQlyZWd1bGF0b3JfZGlzYWJsZShwbGwtPnJlZ3VsYXRvcik7CisJaWYgKHBsbC0+cmVndWxhdG9yKQorCQlyZWd1bGF0b3JfZGlzYWJsZShwbGwtPnJlZ3VsYXRvcik7CiBlcnJfcmVnOgogCWNsa19kaXNhYmxlX3VucHJlcGFyZShwbGwtPmNsa2luKTsKIAlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3NkaS5jIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3Mvc2RpLmMKaW5kZXggZDUxYTk4MzAuLjVjMmNjYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3NkaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3NkaS5jCkBAIC0zNDIsNiArMzQyLDggQEAKIAlvdXQtPm91dHB1dF90eXBlID0gT01BUF9ESVNQTEFZX1RZUEVfU0RJOwogCW91dC0+bmFtZSA9ICJzZGkuMCI7CiAJb3V0LT5kaXNwY19jaGFubmVsID0gT01BUF9EU1NfQ0hBTk5FTF9MQ0Q7CisJLyogV2UgaGF2ZSBTREkgb25seSBvbiBPTUFQMywgd2hlcmUgaXQncyBvbiBwb3J0IDEgKi8KKwlvdXQtPnBvcnRfbnVtID0gMTsKIAlvdXQtPm9wcy5zZGkgPSAmc2RpX29wczsKIAlvdXQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvc2ltcGxlZmIuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvc2ltcGxlZmIuYwppbmRleCA5MmNhYzgwLi4xMDg1YzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L3NpbXBsZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9zaW1wbGVmYi5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiBvZl9jaG9zZW4pIHsKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0ZfQUREUkVTUykgJiYgb2ZfY2hvc2VuKSB7CiAJCWZvcl9lYWNoX2NoaWxkX29mX25vZGUob2ZfY2hvc2VuLCBucCkgewogCQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAic2ltcGxlLWZyYW1lYnVmZmVyIikpCiAJCQkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nby5jIGIvZHJpdmVycy92aWRlby9sb2dvL2xvZ28uYwppbmRleCA5NDBjZDE5Li4xMGZiZmQ4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9sb2dvL2xvZ28uYworKysgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nby5jCkBAIC0yMSw2ICsyMSwyMSBAQAogbW9kdWxlX3BhcmFtKG5vbG9nbywgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vbG9nbywgIkRpc2FibGVzIHN0YXJ0dXAgbG9nbyIpOwogCisvKgorICogTG9nb3MgYXJlIGxvY2F0ZWQgaW4gdGhlIGluaXRkYXRhLCBhbmQgd2lsbCBiZSBmcmVlZCBpbiBrZXJuZWxfaW5pdC4KKyAqIFVzZSBsYXRlX2luaXQgdG8gbWFyayB0aGUgbG9nb3MgYXMgZnJlZWQgdG8gcHJldmVudCBhbnkgZnVydGhlciB1c2UuCisgKi8KKworc3RhdGljIGJvb2wgbG9nb3NfZnJlZWQ7CisKK3N0YXRpYyBpbnQgX19pbml0IGZiX2xvZ29fbGF0ZV9pbml0KHZvaWQpCit7CisJbG9nb3NfZnJlZWQgPSB0cnVlOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKGZiX2xvZ29fbGF0ZV9pbml0KTsKKwogLyogbG9nbydzIGFyZSBtYXJrZWQgX19pbml0ZGF0YS4gVXNlIF9faW5pdF9yZWZvayB0byB0ZWxsCiAgKiBtb2Rwb3N0IHRoYXQgaXQgaXMgaW50ZW5kZWQgdGhhdCB0aGlzIGZ1bmN0aW9uIHVzZXMgZGF0YQogICogbWFya2VkIF9faW5pdGRhdGEuCkBAIC0yOSw3ICs0NCw3IEBACiB7CiAJY29uc3Qgc3RydWN0IGxpbnV4X2xvZ28gKmxvZ28gPSBOVUxMOwogCi0JaWYgKG5vbG9nbykKKwlpZiAobm9sb2dvIHx8IGxvZ29zX2ZyZWVkKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChkZXB0aCA+PSAxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uYwppbmRleCAyZWY5NTI5Li45NzU2ZjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMKQEAgLTI4Miw2ICsyODIsNyBAQAogCiAJdnBfZnJlZV92ZWN0b3JzKHZkZXYpOwogCWtmcmVlKHZwX2Rldi0+dnFzKTsKKwl2cF9kZXYtPnZxcyA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgdnBfdHJ5X3RvX2ZpbmRfdnFzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBudnFzLApAQCAtNDIxLDE1ICs0MjIsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHZpcnRpb19wY2lfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqX2QpCi17Ci0JLyoKLQkgKiBObyBuZWVkIGZvciBhIHJlbGVhc2UgbWV0aG9kIGFzIHdlIGFsbG9jYXRlL2ZyZWUKLQkgKiBhbGwgZGV2aWNlcyB0b2dldGhlciB3aXRoIHRoZSBwY2kgZGV2aWNlcy4KLQkgKiBQcm92aWRlIGFuIGVtcHR5IG9uZSB0byBhdm9pZCBnZXR0aW5nIGEgd2FybmluZyBmcm9tIGNvcmUuCi0JICovCi19Ci0KICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgdmlydGlvX3BjaV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uaCBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmgKaW5kZXggYWRkZGI2NC4uNWE0OTcyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uaAorKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5oCkBAIC0xMjYsNyArMTI2LDYgQEAKICAqIC0gaWdub3JlIHRoZSBhZmZpbml0eSByZXF1ZXN0IGlmIHdlJ3JlIHVzaW5nIElOVFgKICAqLwogaW50IHZwX3NldF92cV9hZmZpbml0eShzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgaW50IGNwdSk7Ci12b2lkIHZpcnRpb19wY2lfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqKTsKIAogaW50IHZpcnRpb19wY2lfbGVnYWN5X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAogCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYwppbmRleCA2Yzc2ZjBmLi5hNTQ4NmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMKQEAgLTIxMSw2ICsyMTEsMTcgQEAKIAkuc2V0X3ZxX2FmZmluaXR5ID0gdnBfc2V0X3ZxX2FmZmluaXR5LAogfTsKIAorc3RhdGljIHZvaWQgdmlydGlvX3BjaV9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpfZCkKK3sKKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiA9IGRldl90b192aXJ0aW8oX2QpOworCXN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZkZXYpOworCisJLyogQXMgc3RydWN0IGRldmljZSBpcyBhIGtvYmplY3QsIGl0J3Mgbm90IHNhZmUgdG8KKwkgKiBmcmVlIHRoZSBtZW1vcnkgKGluY2x1ZGluZyB0aGUgcmVmZXJlbmNlIGNvdW50ZXIgaXRzZWxmKQorCSAqIHVudGlsIGl0J3MgcmVsZWFzZSBjYWxsYmFjay4gKi8KKwlrZnJlZSh2cF9kZXYpOworfQorCiAvKiB0aGUgUENJIHByb2JpbmcgZnVuY3Rpb24gKi8KIGludCB2aXJ0aW9fcGNpX2xlZ2FjeV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCkBAIC0zMDIsNSArMzEzLDQgQEAKIAlwY2lfaW91bm1hcChwY2lfZGV2LCB2cF9kZXYtPmlvYWRkcik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lfZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7Ci0Ja2ZyZWUodnBfZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvY2FkZW5jZV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvY2FkZW5jZV93ZHQuYwppbmRleCA1OTI3YzBhLi5iY2ZkMmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2NhZGVuY2Vfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9jYWRlbmNlX3dkdC5jCkBAIC01MDMsNyArNTAzLDYgQEAKIAkuc2h1dGRvd24JPSBjZG5zX3dkdF9zaHV0ZG93biwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiY2Rucy13ZHQiLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm9mX21hdGNoX3RhYmxlID0gY2Ruc193ZHRfb2ZfbWF0Y2gsCiAJCS5wbQk9ICZjZG5zX3dkdF9wbV9vcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaW14Ml93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaW14Ml93ZHQuYwppbmRleCBkNmFkZDUxLi41MTQyYmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2lteDJfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pbXgyX3dkdC5jCkBAIC01Miw2ICs1Miw4IEBACiAjZGVmaW5lIElNWDJfV0RUX1dSU1IJCTB4MDQJCS8qIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBJTVgyX1dEVF9XUlNSX1RPVVQJKDEgPDwgMSkJLyogLT4gUmVzZXQgZHVlIHRvIFRpbWVvdXQgKi8KIAorI2RlZmluZSBJTVgyX1dEVF9XTUNSCQkweDA4CQkvKiBNaXNjIFJlZ2lzdGVyICovCisKICNkZWZpbmUgSU1YMl9XRFRfTUFYX1RJTUUJMTI4CiAjZGVmaW5lIElNWDJfV0RUX0RFRkFVTFRfVElNRQk2MAkJLyogaW4gc2Vjb25kcyAqLwogCkBAIC0yNzQsNiArMjc2LDEzIEBACiAKIAlpbXgyX3dkdF9waW5nX2lmX2FjdGl2ZSh3ZG9nKTsKIAorCS8qCisJICogRGlzYWJsZSB0aGUgd2F0Y2hkb2cgcG93ZXIgZG93biBjb3VudGVyIGF0IGJvb3QuIE90aGVyd2lzZSB0aGUgcG93ZXIKKwkgKiBkb3duIGNvdW50ZXIgd2lsbCBwdWxsIGRvd24gdGhlICNXRE9HIGludGVycnVwdCBsaW5lIGZvciBvbmUgY2xvY2sKKwkgKiBjeWNsZS4KKwkgKi8KKwlyZWdtYXBfd3JpdGUod2Rldi0+cmVnbWFwLCBJTVgyX1dEVF9XTUNSLCAwKTsKKwogCXJldCA9IHdhdGNoZG9nX3JlZ2lzdGVyX2RldmljZSh3ZG9nKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZWdpc3RlciB3YXRjaGRvZyBkZXZpY2VcbiIpOwpAQCAtMzI3LDE4ICszMzYsMjEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAotLyogRGlzYWJsZSB3YXRjaGRvZyBpZiBpdCBpcyBhY3RpdmUgZHVyaW5nIHN1c3BlbmQgKi8KKy8qIERpc2FibGUgd2F0Y2hkb2cgaWYgaXQgaXMgYWN0aXZlIG9yIG5vbi1hY3RpdmUgYnV0IHN0aWxsIHJ1bm5pbmcgKi8KIHN0YXRpYyBpbnQgaW14Ml93ZHRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHdhdGNoZG9nX2RldmljZSAqd2RvZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBpbXgyX3dkdF9kZXZpY2UgKndkZXYgPSB3YXRjaGRvZ19nZXRfZHJ2ZGF0YSh3ZG9nKTsKIAotCWlteDJfd2R0X3NldF90aW1lb3V0KHdkb2csIElNWDJfV0RUX01BWF9USU1FKTsKLQlpbXgyX3dkdF9waW5nKHdkb2cpOworCS8qIFRoZSB3YXRjaGRvZyBJUCBibG9jayBpcyBydW5uaW5nICovCisJaWYgKGlteDJfd2R0X2lzX3J1bm5pbmcod2RldikpIHsKKwkJaW14Ml93ZHRfc2V0X3RpbWVvdXQod2RvZywgSU1YMl9XRFRfTUFYX1RJTUUpOworCQlpbXgyX3dkdF9waW5nKHdkb2cpOwogCi0JLyogV2F0Y2hkb2cgaGFzIGJlZW4gc3RvcHBlZCBidXQgSVAgYmxvY2sgaXMgc3RpbGwgcnVubmluZyAqLwotCWlmICghd2F0Y2hkb2dfYWN0aXZlKHdkb2cpICYmIGlteDJfd2R0X2lzX3J1bm5pbmcod2RldikpCi0JCWRlbF90aW1lcl9zeW5jKCZ3ZGV2LT50aW1lcik7CisJCS8qIFRoZSB3YXRjaGRvZyBpcyBub3QgYWN0aXZlICovCisJCWlmICghd2F0Y2hkb2dfYWN0aXZlKHdkb2cpKQorCQkJZGVsX3RpbWVyX3N5bmMoJndkZXYtPnRpbWVyKTsKKwl9CiAKIAljbGtfZGlzYWJsZV91bnByZXBhcmUod2Rldi0+Y2xrKTsKIApAQCAtMzU0LDE1ICszNjYsMjUgQEAKIAljbGtfcHJlcGFyZV9lbmFibGUod2Rldi0+Y2xrKTsKIAogCWlmICh3YXRjaGRvZ19hY3RpdmUod2RvZykgJiYgIWlteDJfd2R0X2lzX3J1bm5pbmcod2RldikpIHsKLQkJLyogUmVzdW1lcyBmcm9tIGRlZXAgc2xlZXAgd2UgbmVlZCByZXN0YXJ0Ci0JCSAqIHRoZSB3YXRjaGRvZyBhZ2Fpbi4KKwkJLyoKKwkJICogSWYgdGhlIHdhdGNoZG9nIGlzIHN0aWxsIGFjdGl2ZSBhbmQgcmVzdW1lcworCQkgKiBmcm9tIGRlZXAgc2xlZXAgc3RhdGUsIG5lZWQgdG8gcmVzdGFydCB0aGUKKwkJICogd2F0Y2hkb2cgYWdhaW4uCiAJCSAqLwogCQlpbXgyX3dkdF9zZXR1cCh3ZG9nKTsKIAkJaW14Ml93ZHRfc2V0X3RpbWVvdXQod2RvZywgd2RvZy0+dGltZW91dCk7CiAJCWlteDJfd2R0X3Bpbmcod2RvZyk7CiAJfSBlbHNlIGlmIChpbXgyX3dkdF9pc19ydW5uaW5nKHdkZXYpKSB7CisJCS8qIFJlc3VtaW5nIGZyb20gbm9uLWRlZXAgc2xlZXAgc3RhdGUuICovCisJCWlteDJfd2R0X3NldF90aW1lb3V0KHdkb2csIHdkb2ctPnRpbWVvdXQpOwogCQlpbXgyX3dkdF9waW5nKHdkb2cpOwotCQltb2RfdGltZXIoJndkZXYtPnRpbWVyLCBqaWZmaWVzICsgd2RvZy0+dGltZW91dCAqIEhaIC8gMik7CisJCS8qCisJCSAqIEJ1dCB0aGUgd2F0Y2hkb2cgaXMgbm90IGFjdGl2ZSwgdGhlbiBzdGFydAorCQkgKiB0aGUgdGltZXIgYWdhaW4uCisJCSAqLworCQlpZiAoIXdhdGNoZG9nX2FjdGl2ZSh3ZG9nKSkKKwkJCW1vZF90aW1lcigmd2Rldi0+dGltZXIsCisJCQkJICBqaWZmaWVzICsgd2RvZy0+dGltZW91dCAqIEhaIC8gMik7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21lc29uX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tZXNvbl93ZHQuYwppbmRleCBlZjZhMjk4Li4xZjQxNTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL21lc29uX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbWVzb25fd2R0LmMKQEAgLTIxNSw3ICsyMTUsNiBAQAogCS5yZW1vdmUJCT0gbWVzb25fd2R0X3JlbW92ZSwKIAkuc2h1dGRvd24JPSBtZXNvbl93ZHRfc2h1dGRvd24sCiAJLmRyaXZlcgkJPSB7Ci0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5vZl9tYXRjaF90YWJsZQk9IG1lc29uX3dkdF9kdF9pZHMsCiAJfSwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2JhY2tyZWYuYyBiL2ZzL2J0cmZzL2JhY2tyZWYuYwppbmRleCAyZDNlMzJlLi44NzI5Y2Y2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9iYWNrcmVmLmMKKysrIGIvZnMvYnRyZnMvYmFja3JlZi5jCkBAIC0xNTUyLDcgKzE1NTIsNiBAQAogewogCWludCByZXQ7CiAJaW50IHR5cGU7Ci0Jc3RydWN0IGJ0cmZzX3RyZWVfYmxvY2tfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgYnRyZnNfZXh0ZW50X2lubGluZV9yZWYgKmVpcmVmOwogCiAJaWYgKCpwdHIgPT0gKHVuc2lnbmVkIGxvbmcpLTEpCkBAIC0xNTczLDkgKzE1NzIsMTcgQEAKIAl9CiAKIAkvKiB3ZSBjYW4gdHJlYXQgYm90aCByZWYgdHlwZXMgZXF1YWxseSBoZXJlICovCi0JaW5mbyA9IChzdHJ1Y3QgYnRyZnNfdHJlZV9ibG9ja19pbmZvICopKGVpICsgMSk7CiAJKm91dF9yb290ID0gYnRyZnNfZXh0ZW50X2lubGluZV9yZWZfb2Zmc2V0KGViLCBlaXJlZik7Ci0JKm91dF9sZXZlbCA9IGJ0cmZzX3RyZWVfYmxvY2tfbGV2ZWwoZWIsIGluZm8pOworCisJaWYgKGtleS0+dHlwZSA9PSBCVFJGU19FWFRFTlRfSVRFTV9LRVkpIHsKKwkJc3RydWN0IGJ0cmZzX3RyZWVfYmxvY2tfaW5mbyAqaW5mbzsKKworCQlpbmZvID0gKHN0cnVjdCBidHJmc190cmVlX2Jsb2NrX2luZm8gKikoZWkgKyAxKTsKKwkJKm91dF9sZXZlbCA9IGJ0cmZzX3RyZWVfYmxvY2tfbGV2ZWwoZWIsIGluZm8pOworCX0gZWxzZSB7CisJCUFTU0VSVChrZXktPnR5cGUgPT0gQlRSRlNfTUVUQURBVEFfSVRFTV9LRVkpOworCQkqb3V0X2xldmVsID0gKHU4KWtleS0+b2Zmc2V0OworCX0KIAogCWlmIChyZXQgPT0gMSkKIAkJKnB0ciA9ICh1bnNpZ25lZCBsb25nKS0xOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuaCBiL2ZzL2J0cmZzL2N0cmVlLmgKaW5kZXggN2U2MDc0MS4uMGIxODA3MCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY3RyZWUuaAorKysgYi9mcy9idHJmcy9jdHJlZS5oCkBAIC0xMTcxLDYgKzExNzEsNyBAQAogCXN0cnVjdCBwZXJjcHVfY291bnRlciB0b3RhbF9ieXRlc19waW5uZWQ7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyogUHJvdGVjdGVkIGJ5IHRoZSBzcGlubG9jayAnbG9jaycuICovCiAJc3RydWN0IGxpc3RfaGVhZCByb19iZ3M7CiAKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIGdyb3Vwc19zZW07CmRpZmYgLS1naXQgYS9mcy9idHJmcy9kZWxheWVkLWlub2RlLmMgYi9mcy9idHJmcy9kZWxheWVkLWlub2RlLmMKaW5kZXggMDU0NTc3Yi4uZGU0ZTcwZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGVsYXllZC1pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2RlbGF5ZWQtaW5vZGUuYwpAQCAtMTg1Nyw2ICsxODU3LDE0IEBACiB7CiAJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfbm9kZSAqZGVsYXllZF9ub2RlOwogCisJLyoKKwkgKiB3ZSBkb24ndCBkbyBkZWxheWVkIGlub2RlIHVwZGF0ZXMgZHVyaW5nIGxvZyByZWNvdmVyeSBiZWNhdXNlIGl0CisJICogbGVhZHMgdG8gZW5vc3BjIHByb2JsZW1zLiAgVGhpcyBtZWFucyB3ZSBhbHNvIGNhbid0IGRvCisJICogZGVsYXllZCBpbm9kZSByZWZzCisJICovCisJaWYgKEJUUkZTX0koaW5vZGUpLT5yb290LT5mc19pbmZvLT5sb2dfcm9vdF9yZWNvdmVyaW5nKQorCQlyZXR1cm4gLUVBR0FJTjsKKwogCWRlbGF5ZWRfbm9kZSA9IGJ0cmZzX2dldF9vcl9jcmVhdGVfZGVsYXllZF9ub2RlKGlub2RlKTsKIAlpZiAoSVNfRVJSKGRlbGF5ZWRfbm9kZSkpCiAJCXJldHVybiBQVFJfRVJSKGRlbGF5ZWRfbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCBhODBiOTcxMC4uYTY4NDA4NiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC0zMTM5LDkgKzMxMzksMTEgQEAKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVhZjsKIAogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCBleHRlbnRfcm9vdCwgJmNhY2hlLT5rZXksIHBhdGgsIDAsIDEpOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQpIHsKKwkJaWYgKHJldCA+IDApCisJCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIGZhaWw7Ci0JQlVHX09OKHJldCk7IC8qIENvcnJ1cHRpb24gKi8KKwl9CiAKIAlsZWFmID0gcGF0aC0+bm9kZXNbMF07CiAJYmkgPSBidHJmc19pdGVtX3B0cl9vZmZzZXQobGVhZiwgcGF0aC0+c2xvdHNbMF0pOwpAQCAtMzE0OSwxMSArMzE1MSw5IEBACiAJYnRyZnNfbWFya19idWZmZXJfZGlydHkobGVhZik7CiAJYnRyZnNfcmVsZWFzZV9wYXRoKHBhdGgpOwogZmFpbDoKLQlpZiAocmV0KSB7CisJaWYgKHJldCkKIAkJYnRyZnNfYWJvcnRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiAKIH0KIApAQCAtOTQyMiw3ICs5NDIyLDYgQEAKIAkgKiBhcmUgc3RpbGwgb24gdGhlIGxpc3QgYWZ0ZXIgdGFraW5nIHRoZSBzZW1hcGhvcmUKIAkgKi8KIAlsaXN0X2RlbF9pbml0KCZibG9ja19ncm91cC0+bGlzdCk7Ci0JbGlzdF9kZWxfaW5pdCgmYmxvY2tfZ3JvdXAtPnJvX2xpc3QpOwogCWlmIChsaXN0X2VtcHR5KCZibG9ja19ncm91cC0+c3BhY2VfaW5mby0+YmxvY2tfZ3JvdXBzW2luZGV4XSkpIHsKIAkJa29iaiA9IGJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT5ibG9ja19ncm91cF9rb2Jqc1tpbmRleF07CiAJCWJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT5ibG9ja19ncm91cF9rb2Jqc1tpbmRleF0gPSBOVUxMOwpAQCAtOTQ2NCw2ICs5NDYzLDcgQEAKIAlidHJmc19yZW1vdmVfZnJlZV9zcGFjZV9jYWNoZShibG9ja19ncm91cCk7CiAKIAlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT5sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZibG9ja19ncm91cC0+cm9fbGlzdCk7CiAJYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPnRvdGFsX2J5dGVzIC09IGJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0OwogCWJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT5ieXRlc19yZWFkb25seSAtPSBibG9ja19ncm91cC0+a2V5Lm9mZnNldDsKIAlibG9ja19ncm91cC0+c3BhY2VfaW5mby0+ZGlza190b3RhbCAtPSBibG9ja19ncm91cC0+a2V5Lm9mZnNldCAqIGZhY3RvcjsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggNGViYWJkMi4uNzkwZGJhZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTIxOTAsNyArMjE5MCw3IEBACiAKIAkJbmV4dCA9IG5leHRfc3RhdGUoc3RhdGUpOwogCi0JCWZhaWxyZWMgPSAoc3RydWN0IGlvX2ZhaWx1cmVfcmVjb3JkICopc3RhdGUtPnByaXZhdGU7CisJCWZhaWxyZWMgPSAoc3RydWN0IGlvX2ZhaWx1cmVfcmVjb3JkICopKHVuc2lnbmVkIGxvbmcpc3RhdGUtPnByaXZhdGU7CiAJCWZyZWVfZXh0ZW50X3N0YXRlKHN0YXRlKTsKIAkJa2ZyZWUoZmFpbHJlYyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jCmluZGV4IGU2ODdiYjAuLjhiZjMyNmEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lub2RlLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUuYwpAQCAtNjI1NSw4ICs2MjU1LDEwIEBACiAKIG91dF9mYWlsOgogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JaWYgKGRyb3Bfb25fZXJyKQorCWlmIChkcm9wX29uX2VycikgeworCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOworCX0KIAlidHJmc19iYWxhbmNlX2RlbGF5ZWRfaXRlbXMocm9vdCk7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290KTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc2NydWIuYyBiL2ZzL2J0cmZzL3NjcnViLmMKaW5kZXggZjJiYjEzYS4uZTQyN2NiN2UgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3NjcnViLmMKKysrIGIvZnMvYnRyZnMvc2NydWIuYwpAQCAtMjYwNyw5ICsyNjA3LDkgQEAKIAkJcmV0ID0gc2NydWJfcGFnZXNfZm9yX3Bhcml0eShzcGFyaXR5LCBsb2dpY2FsLCBsLCBwaHlzaWNhbCwgZGV2LAogCQkJCQkgICAgIGZsYWdzLCBnZW4sIG1pcnJvcl9udW0sCiAJCQkJCSAgICAgaGF2ZV9jc3VtID8gY3N1bSA6IE5VTEwpOwotc2tpcDoKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Citza2lwOgogCQlsZW4gLT0gbDsKIAkJbG9naWNhbCArPSBsOwogCQlwaHlzaWNhbCArPSBsOwpAQCAtMzA1Myw3ICszMDUzLDcgQEAKIAogCXBwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCWlmICghcHBhdGgpIHsKLQkJYnRyZnNfZnJlZV9wYXRoKHBwYXRoKTsKKwkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTMwNjUsNiArMzA2NSw4IEBACiAJcGF0aC0+c2VhcmNoX2NvbW1pdF9yb290ID0gMTsKIAlwYXRoLT5za2lwX2xvY2tpbmcgPSAxOwogCisJcHBhdGgtPnNlYXJjaF9jb21taXRfcm9vdCA9IDE7CisJcHBhdGgtPnNraXBfbG9ja2luZyA9IDE7CiAJLyoKIAkgKiB0cmlnZ2VyIHRoZSByZWFkYWhlYWQgZm9yIGV4dGVudCB0cmVlIGNzdW0gdHJlZSBhbmQgd2FpdCBmb3IKIAkgKiBjb21wbGV0aW9uLiBEdXJpbmcgcmVhZGFoZWFkLCB0aGUgc2NydWIgaXMgb2ZmaWNpYWxseSBwYXVzZWQKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDYwZjdjYmUuLjZmNDliMjggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtMTAwMCwxMCArMTAwMCwyMCBAQAogCQkJICovCiAJCQlpZiAoZnNfaW5mby0+cGVuZGluZ19jaGFuZ2VzID09IDApCiAJCQkJcmV0dXJuIDA7CisJCQkvKgorCQkJICogQSBub24tYmxvY2tpbmcgdGVzdCBpZiB0aGUgZnMgaXMgZnJvemVuLiBXZSBtdXN0IG5vdAorCQkJICogc3RhcnQgYSBuZXcgdHJhbnNhY3Rpb24gaGVyZSBvdGhlcndpc2UgYSBkZWFkbG9jaworCQkJICogaGFwcGVucy4gVGhlIHBlbmRpbmcgb3BlcmF0aW9ucyBhcmUgZGVsYXllZCB0byB0aGUKKwkJCSAqIG5leHQgY29tbWl0IGFmdGVyIHRoYXdpbmcuCisJCQkgKi8KKwkJCWlmIChfX3NiX3N0YXJ0X3dyaXRlKHNiLCBTQl9GUkVFWkVfV1JJVEUsIGZhbHNlKSkKKwkJCQlfX3NiX2VuZF93cml0ZShzYiwgU0JfRlJFRVpFX1dSSVRFKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gMDsKIAkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJCX0KKwkJaWYgKElTX0VSUih0cmFucykpCisJCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJfQogCXJldHVybiBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKaW5kZXggYTYwNWQ0ZS4uZTg4YjU5ZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYworKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCkBAIC0yMTE4LDcgKzIxMTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcHJldjsKIAl1bnNpZ25lZCBsb25nIGJpdDsKIAotCXByZXYgPSBjbXB4Y2hnKCZmc19pbmZvLT5wZW5kaW5nX2NoYW5nZXMsIDAsIDApOworCXByZXYgPSB4Y2hnKCZmc19pbmZvLT5wZW5kaW5nX2NoYW5nZXMsIDApOwogCWlmICghcHJldikKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9mcy9jZXBoL2FkZHIuYyBiL2ZzL2NlcGgvYWRkci5jCmluZGV4IGY1MDEzZDkuLmM4MWMwZTAwIDEwMDY0NAotLS0gYS9mcy9jZXBoL2FkZHIuYworKysgYi9mcy9jZXBoL2FkZHIuYwpAQCAtMTQxNiw3ICsxNDE2LDcgQEAKIAkJfQogCX0KIAotCWRvdXQoImZpbGxfaW5saW5lX2RhdGEgJXAgJWxseC4lbGx4IGxlbiAlbHUgbG9ja2VkX3BhZ2UgJXBcbiIsCisJZG91dCgiZmlsbF9pbmxpbmVfZGF0YSAlcCAlbGx4LiVsbHggbGVuICV6dSBsb2NrZWRfcGFnZSAlcFxuIiwKIAkgICAgIGlub2RlLCBjZXBoX3Zpbm9wKGlub2RlKSwgbGVuLCBsb2NrZWRfcGFnZSk7CiAKIAlpZiAobGVuID4gMCkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDZlMTM5MTEuLjIyYjI4OWEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTY2MSwxNiArNjYxLDE2IEBACiAJc2VydmVyLT5vcHMtPnNldF9jcmVkaXRzKHNlcnZlciwgdmFsKTsKIH0KIAotc3RhdGljIGlubGluZSBfX3U2NAorc3RhdGljIGlubGluZSBfX2xlNjQKIGdldF9uZXh0X21pZDY0KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKIHsKLQlyZXR1cm4gc2VydmVyLT5vcHMtPmdldF9uZXh0X21pZChzZXJ2ZXIpOworCXJldHVybiBjcHVfdG9fbGU2NChzZXJ2ZXItPm9wcy0+Z2V0X25leHRfbWlkKHNlcnZlcikpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fbGUxNgogZ2V0X25leHRfbWlkKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKIHsKLQlfX3UxNiBtaWQgPSBnZXRfbmV4dF9taWQ2NChzZXJ2ZXIpOworCV9fdTE2IG1pZCA9IHNlcnZlci0+b3BzLT5nZXRfbmV4dF9taWQoc2VydmVyKTsKIAkvKgogCSAqIFRoZSB2YWx1ZSBpbiB0aGUgU01CIGhlYWRlciBzaG91bGQgYmUgbGl0dGxlIGVuZGlhbiBmb3IgZWFzeQogCSAqIG9uLXRoZS13aXJlIGRlY29kaW5nLgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pb2N0bC5jIGIvZnMvY2lmcy9pb2N0bC5jCmluZGV4IDQ1Y2I1OWIuLjhiNzg5OGIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW9jdGwuYworKysgYi9mcy9jaWZzL2lvY3RsLmMKQEAgLTg2LDIxICs4NiwxNiBAQAogCX0KIAogCXNyY19pbm9kZSA9IGZpbGVfaW5vZGUoc3JjX2ZpbGUuZmlsZSk7CisJcmMgPSAtRUlOVkFMOworCWlmIChTX0lTRElSKHNyY19pbm9kZS0+aV9tb2RlKSkKKwkJZ290byBvdXRfZnB1dDsKIAogCS8qCiAJICogTm90ZTogY2lmcyBjYXNlIGlzIGVhc2llciB0aGFuIGJ0cmZzIHNpbmNlIHNlcnZlciByZXNwb25zaWJsZSBmb3IKIAkgKiBjaGVja3MgZm9yIHByb3BlciBvcGVuIG1vZGVzIGFuZCBmaWxlIHR5cGUgYW5kIGlmIGl0IHdhbnRzCiAJICogc2VydmVyIGNvdWxkIGV2ZW4gc3VwcG9ydCBjb3B5IG9mIHJhbmdlIHdoZXJlIHNvdXJjZSA9IHRhcmdldAogCSAqLwotCi0JLyogc28gd2UgZG8gbm90IGRlYWRsb2NrIHJhY2luZyB0d28gaW9jdGxzIG9uIHNhbWUgZmlsZXMgKi8KLQlpZiAodGFyZ2V0X2lub2RlIDwgc3JjX2lub2RlKSB7Ci0JCW11dGV4X2xvY2tfbmVzdGVkKCZ0YXJnZXRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKLQkJbXV0ZXhfbG9ja19uZXN0ZWQoJnNyY19pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7Ci0JfSBlbHNlIHsKLQkJbXV0ZXhfbG9ja19uZXN0ZWQoJnNyY19pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwotCQltdXRleF9sb2NrX25lc3RlZCgmdGFyZ2V0X2lub2RlLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKLQl9CisJbG9ja190d29fbm9uZGlyZWN0b3JpZXModGFyZ2V0X2lub2RlLCBzcmNfaW5vZGUpOwogCiAJLyogZGV0ZXJtaW5lIHJhbmdlIHRvIGNsb25lICovCiAJcmMgPSAtRUlOVkFMOwpAQCAtMTI0LDEzICsxMTksNyBAQAogb3V0X3VubG9jazoKIAkvKiBhbHRob3VnaCB1bmxvY2tpbmcgaW4gdGhlIHJldmVyc2Ugb3JkZXIgZnJvbSBsb2NraW5nIGlzIG5vdAogCSAgIHN0cmljdGx5IG5lY2Vzc2FyeSBoZXJlIGl0IGlzIGEgbGl0dGxlIGNsZWFuZXIgdG8gYmUgY29uc2lzdGVudCAqLwotCWlmICh0YXJnZXRfaW5vZGUgPCBzcmNfaW5vZGUpIHsKLQkJbXV0ZXhfdW5sb2NrKCZzcmNfaW5vZGUtPmlfbXV0ZXgpOwotCQltdXRleF91bmxvY2soJnRhcmdldF9pbm9kZS0+aV9tdXRleCk7Ci0JfSBlbHNlIHsKLQkJbXV0ZXhfdW5sb2NrKCZ0YXJnZXRfaW5vZGUtPmlfbXV0ZXgpOwotCQltdXRleF91bmxvY2soJnNyY19pbm9kZS0+aV9tdXRleCk7Ci0JfQorCXVubG9ja190d29fbm9uZGlyZWN0b3JpZXMoc3JjX2lub2RlLCB0YXJnZXRfaW5vZGUpOwogb3V0X2ZwdXQ6CiAJZmRwdXQoc3JjX2ZpbGUpOwogb3V0X2Ryb3Bfd3JpdGU6CmRpZmYgLS1naXQgYS9mcy9jaWZzL25ldG1pc2MuYyBiL2ZzL2NpZnMvbmV0bWlzYy5jCmluZGV4IGIzMzNmZjYuLmFiYWU2ZGQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbmV0bWlzYy5jCisrKyBiL2ZzL2NpZnMvbmV0bWlzYy5jCkBAIC05MjYsNiArOTI2LDcgQEAKIAogCS8qIFN1YnRyYWN0IHRoZSBOVEZTIHRpbWUgb2Zmc2V0LCB0aGVuIGNvbnZlcnQgdG8gMXMgaW50ZXJ2YWxzLiAqLwogCXM2NCB0ID0gbGU2NF90b19jcHUobnR1dGMpIC0gTlRGU19USU1FX09GRlNFVDsKKwl1NjQgYWJzX3Q7CiAKIAkvKgogCSAqIFVuZm9ydHVuYXRlbHkgY2FuIG5vdCB1c2Ugbm9ybWFsIDY0IGJpdCBkaXZpc2lvbiBvbiAzMiBiaXQgYXJjaCwgYnV0CkBAIC05MzMsMTMgKzkzNCwxNCBAQAogCSAqIHRvIHNwZWNpYWwgY2FzZSB0aGVtCiAJICovCiAJaWYgKHQgPCAwKSB7Ci0JCXQgPSAtdDsKLQkJdHMudHZfbnNlYyA9IChsb25nKShkb19kaXYodCwgMTAwMDAwMDApICogMTAwKTsKKwkJYWJzX3QgPSAtdDsKKwkJdHMudHZfbnNlYyA9IChsb25nKShkb19kaXYoYWJzX3QsIDEwMDAwMDAwKSAqIDEwMCk7CiAJCXRzLnR2X25zZWMgPSAtdHMudHZfbnNlYzsKLQkJdHMudHZfc2VjID0gLXQ7CisJCXRzLnR2X3NlYyA9IC1hYnNfdDsKIAl9IGVsc2UgewotCQl0cy50dl9uc2VjID0gKGxvbmcpZG9fZGl2KHQsIDEwMDAwMDAwKSAqIDEwMDsKLQkJdHMudHZfc2VjID0gdDsKKwkJYWJzX3QgPSB0OworCQl0cy50dl9uc2VjID0gKGxvbmcpZG9fZGl2KGFic190LCAxMDAwMDAwMCkgKiAxMDA7CisJCXRzLnR2X3NlYyA9IGFic190OwogCX0KIAogCXJldHVybiB0czsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggOGVhZjIwYS4uYzI5NTMzOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTY5LDcgKzY5LDggQEAKICAqIEF0dGVtcHQgdG8gcHJlbG9hZCB0aGUgZGNhY2hlIHdpdGggdGhlIHJlc3VsdHMgZnJvbSB0aGUgRklORF9GSVJTVC9ORVhUCiAgKgogICogRmluZCB0aGUgZGVudHJ5IHRoYXQgbWF0Y2hlcyAibmFtZSIuIElmIHRoZXJlIGlzbid0IG9uZSwgY3JlYXRlIG9uZS4gSWYgaXQncwotICogYSBuZWdhdGl2ZSBkZW50cnkgb3IgdGhlIHVuaXF1ZWlkIGNoYW5nZWQsIHRoZW4gZHJvcCBpdCBhbmQgcmVjcmVhdGUgaXQuCisgKiBhIG5lZ2F0aXZlIGRlbnRyeSBvciB0aGUgdW5pcXVlaWQgb3IgZmlsZXR5cGUobW9kZSkgY2hhbmdlZCwKKyAqIHRoZW4gZHJvcCBpdCBhbmQgcmVjcmVhdGUgaXQuCiAgKi8KIHN0YXRpYyB2b2lkCiBjaWZzX3ByaW1lX2RjYWNoZShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpuYW1lLApAQCAtOTcsOCArOTgsMTEgQEAKIAkJCWlmICghKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSkpCiAJCQkJZmF0dHItPmNmX3VuaXF1ZWlkID0gQ0lGU19JKGlub2RlKS0+dW5pcXVlaWQ7CiAKLQkJCS8qIHVwZGF0ZSBpbm9kZSBpbiBwbGFjZSBpZiBpX2lubyBkaWRuJ3QgY2hhbmdlICovCi0JCQlpZiAoQ0lGU19JKGlub2RlKS0+dW5pcXVlaWQgPT0gZmF0dHItPmNmX3VuaXF1ZWlkKSB7CisJCQkvKiB1cGRhdGUgaW5vZGUgaW4gcGxhY2UKKwkJCSAqIGlmIGJvdGggaV9pbm8gYW5kIGlfbW9kZSBkaWRuJ3QgY2hhbmdlICovCisJCQlpZiAoQ0lGU19JKGlub2RlKS0+dW5pcXVlaWQgPT0gZmF0dHItPmNmX3VuaXF1ZWlkICYmCisJCQkgICAgKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpID09CisJCQkgICAgKGZhdHRyLT5jZl9tb2RlICYgU19JRk1UKSkgewogCQkJCWNpZnNfZmF0dHJfdG9faW5vZGUoaW5vZGUsIGZhdHRyKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iMm1pc2MuYyBiL2ZzL2NpZnMvc21iMm1pc2MuYwppbmRleCBmMWNlZmM5Li42ODlmMDM1IDEwMDY0NAotLS0gYS9mcy9jaWZzL3NtYjJtaXNjLmMKKysrIGIvZnMvY2lmcy9zbWIybWlzYy5jCkBAIC0zMiwxMiArMzIsMTQgQEAKIHN0YXRpYyBpbnQKIGNoZWNrX3NtYjJfaGRyKHN0cnVjdCBzbWIyX2hkciAqaGRyLCBfX3U2NCBtaWQpCiB7CisJX191NjQgd2lyZV9taWQgPSBsZTY0X3RvX2NwdShoZHItPk1lc3NhZ2VJZCk7CisKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGFuIFNNQiwgdGhhdCBpdCBpcyBhIHJlc3BvbnNlLAogCSAqIGFuZCB0aGF0IHRoZSBtZXNzYWdlIGlkcyBtYXRjaC4KIAkgKi8KIAlpZiAoKCooX19sZTMyICopaGRyLT5Qcm90b2NvbElkID09IFNNQjJfUFJPVE9fTlVNQkVSKSAmJgotCSAgICAobWlkID09IGhkci0+TWVzc2FnZUlkKSkgeworCSAgICAobWlkID09IHdpcmVfbWlkKSkgewogCQlpZiAoaGRyLT5GbGFncyAmIFNNQjJfRkxBR1NfU0VSVkVSX1RPX1JFRElSKQogCQkJcmV0dXJuIDA7CiAJCWVsc2UgewpAQCAtNTEsMTEgKzUzLDExIEBACiAJCWlmICgqKF9fbGUzMiAqKWhkci0+UHJvdG9jb2xJZCAhPSBTTUIyX1BST1RPX05VTUJFUikKIAkJCWNpZnNfZGJnKFZGUywgIkJhZCBwcm90b2NvbCBzdHJpbmcgc2lnbmF0dXJlIGhlYWRlciAleFxuIiwKIAkJCQkgKih1bnNpZ25lZCBpbnQgKikgaGRyLT5Qcm90b2NvbElkKTsKLQkJaWYgKG1pZCAhPSBoZHItPk1lc3NhZ2VJZCkKKwkJaWYgKG1pZCAhPSB3aXJlX21pZCkKIAkJCWNpZnNfZGJnKFZGUywgIk1pZHMgZG8gbm90IG1hdGNoOiAlbGx1IGFuZCAlbGx1XG4iLAotCQkJCSBtaWQsIGhkci0+TWVzc2FnZUlkKTsKKwkJCQkgbWlkLCB3aXJlX21pZCk7CiAJfQotCWNpZnNfZGJnKFZGUywgIkJhZCBTTUIgZGV0ZWN0ZWQuIFRoZSBNaWQ9JWxsdVxuIiwgaGRyLT5NZXNzYWdlSWQpOworCWNpZnNfZGJnKFZGUywgIkJhZCBTTUIgZGV0ZWN0ZWQuIFRoZSBNaWQ9JWxsdVxuIiwgd2lyZV9taWQpOwogCXJldHVybiAxOwogfQogCkBAIC05NSw3ICs5Nyw3IEBACiB7CiAJc3RydWN0IHNtYjJfaGRyICpoZHIgPSAoc3RydWN0IHNtYjJfaGRyICopYnVmOwogCXN0cnVjdCBzbWIyX3BkdSAqcGR1ID0gKHN0cnVjdCBzbWIyX3BkdSAqKWhkcjsKLQlfX3U2NCBtaWQgPSBoZHItPk1lc3NhZ2VJZDsKKwlfX3U2NCBtaWQgPSBsZTY0X3RvX2NwdShoZHItPk1lc3NhZ2VJZCk7CiAJX191MzIgbGVuID0gZ2V0X3JmYzEwMDJfbGVuZ3RoKGJ1Zik7CiAJX191MzIgY2xjX2xlbjsgIC8qIGNhbGN1bGF0ZWQgbGVuZ3RoICovCiAJaW50IGNvbW1hbmQ7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYjJvcHMuYyBiL2ZzL2NpZnMvc21iMm9wcy5jCmluZGV4IDkzZmQwNTguLjk2YjVkNDAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iMm9wcy5jCisrKyBiL2ZzL2NpZnMvc21iMm9wcy5jCkBAIC0xNzYsMTAgKzE3NiwxMSBAQAogewogCXN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkOwogCXN0cnVjdCBzbWIyX2hkciAqaGRyID0gKHN0cnVjdCBzbWIyX2hkciAqKWJ1ZjsKKwlfX3U2NCB3aXJlX21pZCA9IGxlNjRfdG9fY3B1KGhkci0+TWVzc2FnZUlkKTsKIAogCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobWlkLCAmc2VydmVyLT5wZW5kaW5nX21pZF9xLCBxaGVhZCkgewotCQlpZiAoKG1pZC0+bWlkID09IGhkci0+TWVzc2FnZUlkKSAmJgorCQlpZiAoKG1pZC0+bWlkID09IHdpcmVfbWlkKSAmJgogCQkgICAgKG1pZC0+bWlkX3N0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgJiYKIAkJICAgIChtaWQtPmNvbW1hbmQgPT0gaGRyLT5Db21tYW5kKSkgewogCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iMnBkdS5oIGIvZnMvY2lmcy9zbWIycGR1LmgKaW5kZXggY2U4NTg0Ny4uNzA4NjdkNSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zbWIycGR1LmgKKysrIGIvZnMvY2lmcy9zbWIycGR1LmgKQEAgLTExMCw3ICsxMTAsNyBAQAogCV9fbGUxNiBDcmVkaXRSZXF1ZXN0OyAgLyogQ3JlZGl0UmVzcG9uc2UgKi8KIAlfX2xlMzIgRmxhZ3M7CiAJX19sZTMyIE5leHRDb21tYW5kOwotCV9fdTY0ICBNZXNzYWdlSWQ7CS8qIG9wYXF1ZSAtIHNvIGNhbiBzdGF5IGxpdHRsZSBlbmRpYW4gKi8KKwlfX2xlNjQgTWVzc2FnZUlkOwogCV9fbGUzMiBQcm9jZXNzSWQ7CiAJX191MzIgIFRyZWVJZDsJCS8qIG9wYXF1ZSAtIHNvIGRvIG5vdCBtYWtlIGxpdHRsZSBlbmRpYW4gKi8KIAlfX3U2NCAgU2Vzc2lvbklkOwkvKiBvcGFxdWUgLSBzbyBkbyBub3QgbWFrZSBsaXR0bGUgZW5kaWFuICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYjJ0cmFuc3BvcnQuYyBiL2ZzL2NpZnMvc21iMnRyYW5zcG9ydC5jCmluZGV4IDUxMTFlNzIuLmQ0YzViNmYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iMnRyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvc21iMnRyYW5zcG9ydC5jCkBAIC00OTAsNyArNDkwLDcgQEAKIAkJcmV0dXJuIHRlbXA7CiAJZWxzZSB7CiAJCW1lbXNldCh0ZW1wLCAwLCBzaXplb2Yoc3RydWN0IG1pZF9xX2VudHJ5KSk7Ci0JCXRlbXAtPm1pZCA9IHNtYl9idWZmZXItPk1lc3NhZ2VJZDsJLyogYWx3YXlzIExFICovCisJCXRlbXAtPm1pZCA9IGxlNjRfdG9fY3B1KHNtYl9idWZmZXItPk1lc3NhZ2VJZCk7CiAJCXRlbXAtPnBpZCA9IGN1cnJlbnQtPnBpZDsKIAkJdGVtcC0+Y29tbWFuZCA9IHNtYl9idWZmZXItPkNvbW1hbmQ7CS8qIEFsd2F5cyBMRSAqLwogCQl0ZW1wLT53aGVuX2FsbG9jID0gamlmZmllczsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggZTVkM2VhZC4uYmVkNDMwOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKKysrIGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTUxNjYsOCArNTE2Niw4IEBACiAKIAkvKiBmYWxsYmFjayB0byBnZW5lcmljIGhlcmUgaWYgbm90IGluIGV4dGVudHMgZm10ICovCiAJaWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpKQotCQlyZXR1cm4gX19nZW5lcmljX2Jsb2NrX2ZpZW1hcChpbm9kZSwgZmllaW5mbywgc3RhcnQsIGxlbiwKLQkJCQkJICAgICAgZXh0NF9nZXRfYmxvY2spOworCQlyZXR1cm4gZ2VuZXJpY19ibG9ja19maWVtYXAoaW5vZGUsIGZpZWluZm8sIHN0YXJ0LCBsZW4sCisJCQlleHQ0X2dldF9ibG9jayk7CiAKIAlpZiAoZmllbWFwX2NoZWNrX2ZsYWdzKGZpZWluZm8sIEVYVDRfRklFTUFQX0ZMQUdTKSkKIAkJcmV0dXJuIC1FQkFEUjsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggNTEzYzEyYy4uODEzMWJlOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9maWxlLmMKKysrIGIvZnMvZXh0NC9maWxlLmMKQEAgLTI3MywxOSArMjczLDI0IEBACiAgKiB3ZSBkZXRlcm1pbmUgdGhpcyBleHRlbnQgYXMgYSBkYXRhIG9yIGEgaG9sZSBhY2NvcmRpbmcgdG8gd2hldGhlciB0aGUKICAqIHBhZ2UgY2FjaGUgaGFzIGRhdGEgb3Igbm90LgogICovCi1zdGF0aWMgaW50IGV4dDRfZmluZF91bndyaXR0ZW5fcGdvZmYoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdoZW5jZSwKLQkJCQkgICAgIGxvZmZfdCBlbmRvZmYsIGxvZmZfdCAqb2Zmc2V0KQorc3RhdGljIGludCBleHQ0X2ZpbmRfdW53cml0dGVuX3Bnb2ZmKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBpbnQgd2hlbmNlLAorCQkJCSAgICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLAorCQkJCSAgICAgbG9mZl90ICpvZmZzZXQpCiB7CiAJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKKwl1bnNpZ25lZCBpbnQgYmxrYml0czsKIAlwZ29mZl90IGluZGV4OwogCXBnb2ZmX3QgZW5kOworCWxvZmZfdCBlbmRvZmY7CiAJbG9mZl90IHN0YXJ0b2ZmOwogCWxvZmZfdCBsYXN0b2ZmOwogCWludCBmb3VuZCA9IDA7CiAKKwlibGtiaXRzID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJc3RhcnRvZmYgPSAqb2Zmc2V0OwogCWxhc3RvZmYgPSBzdGFydG9mZjsKLQorCWVuZG9mZiA9IChsb2ZmX3QpKG1hcC0+bV9sYmxrICsgbWFwLT5tX2xlbikgPDwgYmxrYml0czsKIAogCWluZGV4ID0gc3RhcnRvZmYgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAllbmQgPSBlbmRvZmYgPj4gUEFHRV9DQUNIRV9TSElGVDsKQEAgLTQwMywxNDQgKzQwOCwxNDcgQEAKIHN0YXRpYyBsb2ZmX3QgZXh0NF9zZWVrX2RhdGEoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBtYXhzaXplKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7Ci0Jc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyBmaWU7Ci0Jc3RydWN0IGZpZW1hcF9leHRlbnQgZXh0WzJdOwotCWxvZmZfdCBuZXh0OwotCWludCBpLCByZXQgPSAwOworCXN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwOworCXN0cnVjdCBleHRlbnRfc3RhdHVzIGVzOworCWV4dDRfbGJsa190IHN0YXJ0LCBsYXN0LCBlbmQ7CisJbG9mZl90IGRhdGFvZmYsIGlzaXplOworCWludCBibGtiaXRzOworCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlmIChvZmZzZXQgPj0gaW5vZGUtPmlfc2l6ZSkgeworCisJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJaWYgKG9mZnNldCA+PSBpc2l6ZSkgewogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0JZmllLmZpX2ZsYWdzID0gMDsKLQlmaWUuZmlfZXh0ZW50c19tYXggPSAyOwotCWZpZS5maV9leHRlbnRzX3N0YXJ0ID0gKHN0cnVjdCBmaWVtYXBfZXh0ZW50IF9fdXNlciAqKSAmZXh0OwotCXdoaWxlICgxKSB7Ci0JCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKIAotCQlmaWUuZmlfZXh0ZW50c19tYXBwZWQgPSAwOwotCQltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkgKiBmaWUuZmlfZXh0ZW50c19tYXgpOworCWJsa2JpdHMgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwlzdGFydCA9IG9mZnNldCA+PiBibGtiaXRzOworCWxhc3QgPSBzdGFydDsKKwllbmQgPSBpc2l6ZSA+PiBibGtiaXRzOworCWRhdGFvZmYgPSBvZmZzZXQ7CiAKLQkJc2V0X2ZzKGdldF9kcygpKTsKLQkJcmV0ID0gZXh0NF9maWVtYXAoaW5vZGUsICZmaWUsIG9mZnNldCwgbWF4c2l6ZSAtIG9mZnNldCk7Ci0JCXNldF9mcyhvbGRfZnMpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0KLQkJLyogTm8gZXh0ZW50cyBmb3VuZCwgRU9GICovCi0JCWlmICghZmllLmZpX2V4dGVudHNfbWFwcGVkKSB7Ci0JCQlyZXQgPSAtRU5YSU87CisJZG8geworCQltYXAubV9sYmxrID0gbGFzdDsKKwkJbWFwLm1fbGVuID0gZW5kIC0gbGFzdCArIDE7CisJCXJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgJm1hcCwgMCk7CisJCWlmIChyZXQgPiAwICYmICEobWFwLm1fZmxhZ3MgJiBFWFQ0X01BUF9VTldSSVRURU4pKSB7CisJCQlpZiAobGFzdCAhPSBzdGFydCkKKwkJCQlkYXRhb2ZmID0gKGxvZmZfdClsYXN0IDw8IGJsa2JpdHM7CiAJCQlicmVhazsKIAkJfQotCQlmb3IgKGkgPSAwOyBpIDwgZmllLmZpX2V4dGVudHNfbWFwcGVkOyBpKyspIHsKLQkJCW5leHQgPSAobG9mZl90KShleHRbaV0uZmVfbGVuZ3RoICsgZXh0W2ldLmZlX2xvZ2ljYWwpOwogCi0JCQlpZiAob2Zmc2V0IDwgKGxvZmZfdClleHRbaV0uZmVfbG9naWNhbCkKLQkJCQlvZmZzZXQgPSAobG9mZl90KWV4dFtpXS5mZV9sb2dpY2FsOwotCQkJLyoKLQkJCSAqIElmIGV4dGVudCBpcyBub3QgdW53cml0dGVuLCB0aGVuIGl0IGNvbnRhaW5zIHZhbGlkCi0JCQkgKiBkYXRhLCBtYXBwZWQgb3IgZGVsYXllZC4KLQkJCSAqLwotCQkJaWYgKCEoZXh0W2ldLmZlX2ZsYWdzICYgRklFTUFQX0VYVEVOVF9VTldSSVRURU4pKQotCQkJCWdvdG8gb3V0OwotCi0JCQkvKgotCQkJICogSWYgdGhlcmUgaXMgYSB1bndyaXR0ZW4gZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LAotCQkJICogaXQgd2lsbCBiZSBhcyBhIGRhdGEgb3IgYSBob2xlIGFjY29yZGluZyB0byBwYWdlCi0JCQkgKiBjYWNoZSB0aGF0IGhhcyBkYXRhIG9yIG5vdC4KLQkJCSAqLwotCQkJaWYgKGV4dDRfZmluZF91bndyaXR0ZW5fcGdvZmYoaW5vZGUsIFNFRUtfREFUQSwKLQkJCQkJCSAgICAgIG5leHQsICZvZmZzZXQpKQotCQkJCWdvdG8gb3V0OwotCi0JCQlpZiAoZXh0W2ldLmZlX2ZsYWdzICYgRklFTUFQX0VYVEVOVF9MQVNUKSB7Ci0JCQkJcmV0ID0gLUVOWElPOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJb2Zmc2V0ID0gbmV4dDsKKwkJLyoKKwkJICogSWYgdGhlcmUgaXMgYSBkZWxheSBleHRlbnQgYXQgdGhpcyBvZmZzZXQsCisJCSAqIGl0IHdpbGwgYmUgYXMgYSBkYXRhLgorCQkgKi8KKwkJZXh0NF9lc19maW5kX2RlbGF5ZWRfZXh0ZW50X3JhbmdlKGlub2RlLCBsYXN0LCBsYXN0LCAmZXMpOworCQlpZiAoZXMuZXNfbGVuICE9IDAgJiYgaW5fcmFuZ2UobGFzdCwgZXMuZXNfbGJsaywgZXMuZXNfbGVuKSkgeworCQkJaWYgKGxhc3QgIT0gc3RhcnQpCisJCQkJZGF0YW9mZiA9IChsb2ZmX3QpbGFzdCA8PCBibGtiaXRzOworCQkJYnJlYWs7CiAJCX0KLQl9Ci0JaWYgKG9mZnNldCA+IGlub2RlLT5pX3NpemUpCi0JCW9mZnNldCA9IGlub2RlLT5pX3NpemU7Ci1vdXQ6CisKKwkJLyoKKwkJICogSWYgdGhlcmUgaXMgYSB1bndyaXR0ZW4gZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LAorCQkgKiBpdCB3aWxsIGJlIGFzIGEgZGF0YSBvciBhIGhvbGUgYWNjb3JkaW5nIHRvIHBhZ2UKKwkJICogY2FjaGUgdGhhdCBoYXMgZGF0YSBvciBub3QuCisJCSAqLworCQlpZiAobWFwLm1fZmxhZ3MgJiBFWFQ0X01BUF9VTldSSVRURU4pIHsKKwkJCWludCB1bndyaXR0ZW47CisJCQl1bndyaXR0ZW4gPSBleHQ0X2ZpbmRfdW53cml0dGVuX3Bnb2ZmKGlub2RlLCBTRUVLX0RBVEEsCisJCQkJCQkJICAgICAgJm1hcCwgJmRhdGFvZmYpOworCQkJaWYgKHVud3JpdHRlbikKKwkJCQlicmVhazsKKwkJfQorCisJCWxhc3QrKzsKKwkJZGF0YW9mZiA9IChsb2ZmX3QpbGFzdCA8PCBibGtiaXRzOworCX0gd2hpbGUgKGxhc3QgPD0gZW5kKTsKKwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gdmZzX3NldHBvcyhmaWxlLCBvZmZzZXQsIG1heHNpemUpOworCWlmIChkYXRhb2ZmID4gaXNpemUpCisJCXJldHVybiAtRU5YSU87CisKKwlyZXR1cm4gdmZzX3NldHBvcyhmaWxlLCBkYXRhb2ZmLCBtYXhzaXplKTsKIH0KIAogLyoKLSAqIGV4dDRfc2Vla19ob2xlKCkgcmV0cmlldmVzIHRoZSBvZmZzZXQgZm9yIFNFRUtfSE9MRQorICogZXh0NF9zZWVrX2hvbGUoKSByZXRyaWV2ZXMgdGhlIG9mZnNldCBmb3IgU0VFS19IT0xFLgogICovCiBzdGF0aWMgbG9mZl90IGV4dDRfc2Vla19ob2xlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbWF4c2l6ZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwotCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gZmllOwotCXN0cnVjdCBmaWVtYXBfZXh0ZW50IGV4dFsyXTsKLQlsb2ZmX3QgbmV4dDsKLQlpbnQgaSwgcmV0ID0gMDsKKwlzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDsKKwlzdHJ1Y3QgZXh0ZW50X3N0YXR1cyBlczsKKwlleHQ0X2xibGtfdCBzdGFydCwgbGFzdCwgZW5kOworCWxvZmZfdCBob2xlb2ZmLCBpc2l6ZTsKKwlpbnQgYmxrYml0czsKKwlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlpZiAob2Zmc2V0ID49IGlub2RlLT5pX3NpemUpIHsKKworCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCWlmIChvZmZzZXQgPj0gaXNpemUpIHsKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JZmllLmZpX2ZsYWdzID0gMDsKLQlmaWUuZmlfZXh0ZW50c19tYXggPSAyOwotCWZpZS5maV9leHRlbnRzX3N0YXJ0ID0gKHN0cnVjdCBmaWVtYXBfZXh0ZW50IF9fdXNlciAqKSZleHQ7Ci0Jd2hpbGUgKDEpIHsKLQkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOworCWJsa2JpdHMgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwlzdGFydCA9IG9mZnNldCA+PiBibGtiaXRzOworCWxhc3QgPSBzdGFydDsKKwllbmQgPSBpc2l6ZSA+PiBibGtiaXRzOworCWhvbGVvZmYgPSBvZmZzZXQ7CiAKLQkJZmllLmZpX2V4dGVudHNfbWFwcGVkID0gMDsKLQkJbWVtc2V0KGV4dCwgMCwgc2l6ZW9mKCpleHQpKTsKKwlkbyB7CisJCW1hcC5tX2xibGsgPSBsYXN0OworCQltYXAubV9sZW4gPSBlbmQgLSBsYXN0ICsgMTsKKwkJcmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCAmbWFwLCAwKTsKKwkJaWYgKHJldCA+IDAgJiYgIShtYXAubV9mbGFncyAmIEVYVDRfTUFQX1VOV1JJVFRFTikpIHsKKwkJCWxhc3QgKz0gcmV0OworCQkJaG9sZW9mZiA9IChsb2ZmX3QpbGFzdCA8PCBibGtiaXRzOworCQkJY29udGludWU7CisJCX0KIAotCQlzZXRfZnMoZ2V0X2RzKCkpOwotCQlyZXQgPSBleHQ0X2ZpZW1hcChpbm9kZSwgJmZpZSwgb2Zmc2V0LCBtYXhzaXplIC0gb2Zmc2V0KTsKLQkJc2V0X2ZzKG9sZF9mcyk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKKwkJLyoKKwkJICogSWYgdGhlcmUgaXMgYSBkZWxheSBleHRlbnQgYXQgdGhpcyBvZmZzZXQsCisJCSAqIHdlIHdpbGwgc2tpcCB0aGlzIGV4dGVudC4KKwkJICovCisJCWV4dDRfZXNfZmluZF9kZWxheWVkX2V4dGVudF9yYW5nZShpbm9kZSwgbGFzdCwgbGFzdCwgJmVzKTsKKwkJaWYgKGVzLmVzX2xlbiAhPSAwICYmIGluX3JhbmdlKGxhc3QsIGVzLmVzX2xibGssIGVzLmVzX2xlbikpIHsKKwkJCWxhc3QgPSBlcy5lc19sYmxrICsgZXMuZXNfbGVuOworCQkJaG9sZW9mZiA9IChsb2ZmX3QpbGFzdCA8PCBibGtiaXRzOworCQkJY29udGludWU7CisJCX0KIAotCQkvKiBObyBleHRlbnRzIGZvdW5kICovCi0JCWlmICghZmllLmZpX2V4dGVudHNfbWFwcGVkKQotCQkJYnJlYWs7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGZpZS5maV9leHRlbnRzX21hcHBlZDsgaSsrKSB7Ci0JCQluZXh0ID0gKGxvZmZfdCkoZXh0W2ldLmZlX2xvZ2ljYWwgKyBleHRbaV0uZmVfbGVuZ3RoKTsKLQkJCS8qCi0JCQkgKiBJZiBleHRlbnQgaXMgbm90IHVud3JpdHRlbiwgdGhlbiBpdCBjb250YWlucyB2YWxpZAotCQkJICogZGF0YSwgbWFwcGVkIG9yIGRlbGF5ZWQuCi0JCQkgKi8KLQkJCWlmICghKGV4dFtpXS5mZV9mbGFncyAmIEZJRU1BUF9FWFRFTlRfVU5XUklUVEVOKSkgewotCQkJCWlmIChvZmZzZXQgPCAobG9mZl90KWV4dFtpXS5mZV9sb2dpY2FsKQotCQkJCQlnb3RvIG91dDsKLQkJCQlvZmZzZXQgPSBuZXh0OworCQkvKgorCQkgKiBJZiB0aGVyZSBpcyBhIHVud3JpdHRlbiBleHRlbnQgYXQgdGhpcyBvZmZzZXQsCisJCSAqIGl0IHdpbGwgYmUgYXMgYSBkYXRhIG9yIGEgaG9sZSBhY2NvcmRpbmcgdG8gcGFnZQorCQkgKiBjYWNoZSB0aGF0IGhhcyBkYXRhIG9yIG5vdC4KKwkJICovCisJCWlmIChtYXAubV9mbGFncyAmIEVYVDRfTUFQX1VOV1JJVFRFTikgeworCQkJaW50IHVud3JpdHRlbjsKKwkJCXVud3JpdHRlbiA9IGV4dDRfZmluZF91bndyaXR0ZW5fcGdvZmYoaW5vZGUsIFNFRUtfSE9MRSwKKwkJCQkJCQkgICAgICAmbWFwLCAmaG9sZW9mZik7CisJCQlpZiAoIXVud3JpdHRlbikgeworCQkJCWxhc3QgKz0gcmV0OworCQkJCWhvbGVvZmYgPSAobG9mZl90KWxhc3QgPDwgYmxrYml0czsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCS8qCi0JCQkgKiBJZiB0aGVyZSBpcyBhIHVud3JpdHRlbiBleHRlbnQgYXQgdGhpcyBvZmZzZXQsCi0JCQkgKiBpdCB3aWxsIGJlIGFzIGEgZGF0YSBvciBhIGhvbGUgYWNjb3JkaW5nIHRvIHBhZ2UKLQkJCSAqIGNhY2hlIHRoYXQgaGFzIGRhdGEgb3Igbm90LgotCQkJICovCi0JCQlpZiAoZXh0NF9maW5kX3Vud3JpdHRlbl9wZ29mZihpbm9kZSwgU0VFS19IT0xFLAotCQkJCQkJICAgICAgbmV4dCwgJm9mZnNldCkpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCW9mZnNldCA9IG5leHQ7Ci0JCQlpZiAoZXh0W2ldLmZlX2ZsYWdzICYgRklFTUFQX0VYVEVOVF9MQVNUKQotCQkJCWdvdG8gb3V0OwogCQl9Ci0JfQotCWlmIChvZmZzZXQgPiBpbm9kZS0+aV9zaXplKQotCQlvZmZzZXQgPSBpbm9kZS0+aV9zaXplOwotb3V0OgotCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gdmZzX3NldHBvcyhmaWxlLCBvZmZzZXQsIG1heHNpemUpOworCQkvKiBmaW5kIGEgaG9sZSAqLworCQlicmVhazsKKwl9IHdoaWxlIChsYXN0IDw9IGVuZCk7CisKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKworCWlmIChob2xlb2ZmID4gaXNpemUpCisJCWhvbGVvZmYgPSBpc2l6ZTsKKworCXJldHVybiB2ZnNfc2V0cG9zKGZpbGUsIGhvbGVvZmYsIG1heHNpemUpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9yZXNpemUuYyBiL2ZzL2V4dDQvcmVzaXplLmMKaW5kZXggYmY3NmY0MC4uOGE4ZWM2MiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9yZXNpemUuYworKysgYi9mcy9leHQ0L3Jlc2l6ZS5jCkBAIC0yNCw2ICsyNCwxOCBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJLyoKKwkgKiBJZiB3ZSBhcmUgbm90IHVzaW5nIHRoZSBwcmltYXJ5IHN1cGVyYmxvY2svR0RUIGNvcHkgZG9uJ3QgcmVzaXplLAorICAgICAgICAgKiBiZWNhdXNlIHRoZSB1c2VyIHRvb2xzIGhhdmUgbm8gd2F5IG9mIGhhbmRsaW5nIHRoaXMuICBQcm9iYWJseSBhCisgICAgICAgICAqIGJhZCB0aW1lIHRvIGRvIGl0IGFueXdheXMuCisgICAgICAgICAqLworCWlmIChFWFQ0X1NCKHNiKS0+c19zYmgtPmJfYmxvY2tuciAhPQorCSAgICBsZTMyX3RvX2NwdShFWFQ0X1NCKHNiKS0+c19lcy0+c19maXJzdF9kYXRhX2Jsb2NrKSkgeworCQlleHQ0X3dhcm5pbmcoc2IsICJ3b24ndCByZXNpemUgdXNpbmcgYmFja3VwIHN1cGVyYmxvY2sgYXQgJWxsdSIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKUVYVDRfU0Ioc2IpLT5zX3NiaC0+Yl9ibG9ja25yKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwkvKgogCSAqIFdlIGFyZSBub3QgYWxsb3dlZCB0byBkbyBvbmxpbmUtcmVzaXppbmcgb24gYSBmaWxlc3lzdGVtIG1vdW50ZWQKIAkgKiB3aXRoIGVycm9yLCBiZWNhdXNlIGl0IGNhbiBkZXN0cm95IHRoZSBmaWxlc3lzdGVtIGVhc2lseS4KIAkgKi8KQEAgLTc1OCwxOCArNzcwLDYgQEAKIAkJICAgICAgICJFWFQ0LWZzOiBleHQ0X2FkZF9uZXdfZ2RiOiBhZGRpbmcgZ3JvdXAgYmxvY2sgJWx1XG4iLAogCQkgICAgICAgZ2RiX251bSk7CiAKLQkvKgotCSAqIElmIHdlIGFyZSBub3QgdXNpbmcgdGhlIHByaW1hcnkgc3VwZXJibG9jay9HRFQgY29weSBkb24ndCByZXNpemUsCi0gICAgICAgICAqIGJlY2F1c2UgdGhlIHVzZXIgdG9vbHMgaGF2ZSBubyB3YXkgb2YgaGFuZGxpbmcgdGhpcy4gIFByb2JhYmx5IGEKLSAgICAgICAgICogYmFkIHRpbWUgdG8gZG8gaXQgYW55d2F5cy4KLSAgICAgICAgICovCi0JaWYgKEVYVDRfU0Ioc2IpLT5zX3NiaC0+Yl9ibG9ja25yICE9Ci0JICAgIGxlMzJfdG9fY3B1KEVYVDRfU0Ioc2IpLT5zX2VzLT5zX2ZpcnN0X2RhdGFfYmxvY2spKSB7Ci0JCWV4dDRfd2FybmluZyhzYiwgIndvbid0IHJlc2l6ZSB1c2luZyBiYWNrdXAgc3VwZXJibG9jayBhdCAlbGx1IiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpRVhUNF9TQihzYiktPnNfc2JoLT5iX2Jsb2NrbnIpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQogCWdkYl9iaCA9IHNiX2JyZWFkKHNiLCBnZGJsb2NrKTsKIAlpZiAoIWdkYl9iaCkKIAkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggNDNjOTJiMS4uNzRjNWY1MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtMzQ4Miw3ICszNDgyLDcgQEAKIAlpZiAoRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCiAJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfTUVUQURBVEFfQ1NVTSkgJiYKIAkgICAgRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKQotCQlleHQ0X3dhcm5pbmcoc2IsIEtFUk5fSU5GTyAibWV0YWRhdGFfY3N1bSBhbmQgdW5pbml0X2JnIGFyZSAiCisJCWV4dDRfd2FybmluZyhzYiwgIm1ldGFkYXRhX2NzdW0gYW5kIHVuaW5pdF9iZyBhcmUgIgogCQkJICAgICAicmVkdW5kYW50IGZsYWdzOyBwbGVhc2UgcnVuIGZzY2suIik7CiAKIAkvKiBDaGVjayBmb3IgYSBrbm93biBjaGVja3N1bSBhbGdvcml0aG0gKi8KZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IDk5ZDQ0MGEuLmVlODVjZDQgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtNzQwLDE0ICs3NDAsMTUgQEAKIAkgKiBFeGNlcHRpb25zOiBPX05PTkJMT0NLIGlzIGEgdHdvIGJpdCBkZWZpbmUgb24gcGFyaXNjOyBPX05ERUxBWQogCSAqIGlzIGRlZmluZWQgYXMgT19OT05CTE9DSyBvbiBzb21lIHBsYXRmb3JtcyBhbmQgbm90IG9uIG90aGVycy4KIAkgKi8KLQlCVUlMRF9CVUdfT04oMjAgLSAxIC8qIGZvciBPX1JET05MWSBiZWluZyAwICovICE9IEhXRUlHSFQzMigKKwlCVUlMRF9CVUdfT04oMjEgLSAxIC8qIGZvciBPX1JET05MWSBiZWluZyAwICovICE9IEhXRUlHSFQzMigKIAkJT19SRE9OTFkJfCBPX1dST05MWQl8IE9fUkRXUgl8CiAJCU9fQ1JFQVQJCXwgT19FWENMCXwgT19OT0NUVFkJfAogCQlPX1RSVU5DCQl8IE9fQVBQRU5ECXwgLyogT19OT05CTE9DSwl8ICovCiAJCV9fT19TWU5DCXwgT19EU1lOQwl8IEZBU1lOQwl8CiAJCU9fRElSRUNUCXwgT19MQVJHRUZJTEUJfCBPX0RJUkVDVE9SWQl8CiAJCU9fTk9GT0xMT1cJfCBPX05PQVRJTUUJfCBPX0NMT0VYRUMJfAotCQlfX0ZNT0RFX0VYRUMJfCBPX1BBVEgJfCBfX09fVE1QRklMRQorCQlfX0ZNT0RFX0VYRUMJfCBPX1BBVEgJfCBfX09fVE1QRklMRQl8CisJCV9fRk1PREVfTk9OT1RJRlkKIAkJKSk7CiAKIAlmYXN5bmNfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZmFzeW5jX2NhY2hlIiwKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGV2LmMgYi9mcy9mdXNlL2Rldi5jCmluZGV4IGJhMTEwNzkuLmVkMTlhN2QgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGV2LmMKKysrIGIvZnMvZnVzZS9kZXYuYwpAQCAtMTMxLDYgKzEzMSwxMyBAQAogCXJlcS0+aW4uaC5waWQgPSBjdXJyZW50LT5waWQ7CiB9CiAKK3ZvaWQgZnVzZV9zZXRfaW5pdGlhbGl6ZWQoc3RydWN0IGZ1c2VfY29ubiAqZmMpCit7CisJLyogTWFrZSBzdXJlIHN0b3JlcyBiZWZvcmUgdGhpcyBhcmUgc2VlbiBvbiBhbm90aGVyIENQVSAqLworCXNtcF93bWIoKTsKKwlmYy0+aW5pdGlhbGl6ZWQgPSAxOworfQorCiBzdGF0aWMgYm9vbCBmdXNlX2Jsb2NrX2FsbG9jKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBib29sIGZvcl9iYWNrZ3JvdW5kKQogewogCXJldHVybiAhZmMtPmluaXRpYWxpemVkIHx8IChmb3JfYmFja2dyb3VuZCAmJiBmYy0+YmxvY2tlZCk7CkBAIC0xNTUsNiArMTYyLDggQEAKIAkJaWYgKGludHIpCiAJCQlnb3RvIG91dDsKIAl9CisJLyogTWF0Y2hlcyBzbXBfd21iKCkgaW4gZnVzZV9zZXRfaW5pdGlhbGl6ZWQoKSAqLworCXNtcF9ybWIoKTsKIAogCWVyciA9IC1FTk9UQ09OTjsKIAlpZiAoIWZjLT5jb25uZWN0ZWQpCkBAIC0yNTMsNiArMjYyLDggQEAKIAogCWF0b21pY19pbmMoJmZjLT5udW1fd2FpdGluZyk7CiAJd2FpdF9ldmVudChmYy0+YmxvY2tlZF93YWl0cSwgZmMtPmluaXRpYWxpemVkKTsKKwkvKiBNYXRjaGVzIHNtcF93bWIoKSBpbiBmdXNlX3NldF9pbml0aWFsaXplZCgpICovCisJc21wX3JtYigpOwogCXJlcSA9IGZ1c2VfcmVxdWVzdF9hbGxvYygwKTsKIAlpZiAoIXJlcSkKIAkJcmVxID0gZ2V0X3Jlc2VydmVkX3JlcShmYywgZmlsZSk7CkBAIC01MTEsNiArNTIyLDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmdXNlX3JlcXVlc3Rfc2VuZCk7CiAKK3N0YXRpYyB2b2lkIGZ1c2VfYWRqdXN0X2NvbXBhdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfYXJncyAqYXJncykKK3sKKwlpZiAoZmMtPm1pbm9yIDwgNCAmJiBhcmdzLT5pbi5oLm9wY29kZSA9PSBGVVNFX1NUQVRGUykKKwkJYXJncy0+b3V0LmFyZ3NbMF0uc2l6ZSA9IEZVU0VfQ09NUEFUX1NUQVRGU19TSVpFOworCisJaWYgKGZjLT5taW5vciA8IDkpIHsKKwkJc3dpdGNoIChhcmdzLT5pbi5oLm9wY29kZSkgeworCQljYXNlIEZVU0VfTE9PS1VQOgorCQljYXNlIEZVU0VfQ1JFQVRFOgorCQljYXNlIEZVU0VfTUtOT0Q6CisJCWNhc2UgRlVTRV9NS0RJUjoKKwkJY2FzZSBGVVNFX1NZTUxJTks6CisJCWNhc2UgRlVTRV9MSU5LOgorCQkJYXJncy0+b3V0LmFyZ3NbMF0uc2l6ZSA9IEZVU0VfQ09NUEFUX0VOVFJZX09VVF9TSVpFOworCQkJYnJlYWs7CisJCWNhc2UgRlVTRV9HRVRBVFRSOgorCQljYXNlIEZVU0VfU0VUQVRUUjoKKwkJCWFyZ3MtPm91dC5hcmdzWzBdLnNpemUgPSBGVVNFX0NPTVBBVF9BVFRSX09VVF9TSVpFOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGZjLT5taW5vciA8IDEyKSB7CisJCXN3aXRjaCAoYXJncy0+aW4uaC5vcGNvZGUpIHsKKwkJY2FzZSBGVVNFX0NSRUFURToKKwkJCWFyZ3MtPmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZnVzZV9vcGVuX2luKTsKKwkJCWJyZWFrOworCQljYXNlIEZVU0VfTUtOT0Q6CisJCQlhcmdzLT5pbi5hcmdzWzBdLnNpemUgPSBGVVNFX0NPTVBBVF9NS05PRF9JTl9TSVpFOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKIHNzaXplX3QgZnVzZV9zaW1wbGVfcmVxdWVzdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfYXJncyAqYXJncykKIHsKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKQEAgLTUyMCw2ICs1NjQsOSBAQAogCWlmIChJU19FUlIocmVxKSkKIAkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAorCS8qIE5lZWRzIHRvIGJlIGRvbmUgYWZ0ZXIgZnVzZV9nZXRfcmVxKCkgc28gdGhhdCBmYy0+bWlub3IgaXMgdmFsaWQgKi8KKwlmdXNlX2FkanVzdF9jb21wYXQoZmMsIGFyZ3MpOworCiAJcmVxLT5pbi5oLm9wY29kZSA9IGFyZ3MtPmluLmgub3Bjb2RlOwogCXJlcS0+aW4uaC5ub2RlaWQgPSBhcmdzLT5pbi5oLm5vZGVpZDsKIAlyZXEtPmluLm51bWFyZ3MgPSBhcmdzLT5pbi5udW1hcmdzOwpAQCAtMjEyNyw3ICsyMTc0LDcgQEAKIAlpZiAoZmMtPmNvbm5lY3RlZCkgewogCQlmYy0+Y29ubmVjdGVkID0gMDsKIAkJZmMtPmJsb2NrZWQgPSAwOwotCQlmYy0+aW5pdGlhbGl6ZWQgPSAxOworCQlmdXNlX3NldF9pbml0aWFsaXplZChmYyk7CiAJCWVuZF9pb19yZXF1ZXN0cyhmYyk7CiAJCWVuZF9xdWV1ZWRfcmVxdWVzdHMoZmMpOwogCQllbmRfcG9sbHMoZmMpOwpAQCAtMjE0Niw3ICsyMTkzLDcgQEAKIAkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJCWZjLT5jb25uZWN0ZWQgPSAwOwogCQlmYy0+YmxvY2tlZCA9IDA7Ci0JCWZjLT5pbml0aWFsaXplZCA9IDE7CisJCWZ1c2Vfc2V0X2luaXRpYWxpemVkKGZjKTsKIAkJZW5kX3F1ZXVlZF9yZXF1ZXN0cyhmYyk7CiAJCWVuZF9wb2xscyhmYyk7CiAJCXdha2VfdXBfYWxsKCZmYy0+YmxvY2tlZF93YWl0cSk7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCAyNTJiOGE1Li4wOGU3YjFhIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTE1NiwxMCArMTU2LDcgQEAKIAlhcmdzLT5pbi5hcmdzWzBdLnNpemUgPSBuYW1lLT5sZW4gKyAxOwogCWFyZ3MtPmluLmFyZ3NbMF0udmFsdWUgPSBuYW1lLT5uYW1lOwogCWFyZ3MtPm91dC5udW1hcmdzID0gMTsKLQlpZiAoZmMtPm1pbm9yIDwgOSkKLQkJYXJncy0+b3V0LmFyZ3NbMF0uc2l6ZSA9IEZVU0VfQ09NUEFUX0VOVFJZX09VVF9TSVpFOwotCWVsc2UKLQkJYXJncy0+b3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZnVzZV9lbnRyeV9vdXQpOworCWFyZ3MtPm91dC5hcmdzWzBdLnNpemUgPSBzaXplb2Yoc3RydWN0IGZ1c2VfZW50cnlfb3V0KTsKIAlhcmdzLT5vdXQuYXJnc1swXS52YWx1ZSA9IG91dGFyZzsKIH0KIApAQCAtNDIyLDE2ICs0MTksMTIgQEAKIAlhcmdzLmluLmgub3Bjb2RlID0gRlVTRV9DUkVBVEU7CiAJYXJncy5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGRpcik7CiAJYXJncy5pbi5udW1hcmdzID0gMjsKLQlhcmdzLmluLmFyZ3NbMF0uc2l6ZSA9IGZjLT5taW5vciA8IDEyID8gc2l6ZW9mKHN0cnVjdCBmdXNlX29wZW5faW4pIDoKLQkJCQkJCXNpemVvZihpbmFyZyk7CisJYXJncy5pbi5hcmdzWzBdLnNpemUgPSBzaXplb2YoaW5hcmcpOwogCWFyZ3MuaW4uYXJnc1swXS52YWx1ZSA9ICZpbmFyZzsKIAlhcmdzLmluLmFyZ3NbMV0uc2l6ZSA9IGVudHJ5LT5kX25hbWUubGVuICsgMTsKIAlhcmdzLmluLmFyZ3NbMV0udmFsdWUgPSBlbnRyeS0+ZF9uYW1lLm5hbWU7CiAJYXJncy5vdXQubnVtYXJncyA9IDI7Ci0JaWYgKGZjLT5taW5vciA8IDkpCi0JCWFyZ3Mub3V0LmFyZ3NbMF0uc2l6ZSA9IEZVU0VfQ09NUEFUX0VOVFJZX09VVF9TSVpFOwotCWVsc2UKLQkJYXJncy5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKG91dGVudHJ5KTsKKwlhcmdzLm91dC5hcmdzWzBdLnNpemUgPSBzaXplb2Yob3V0ZW50cnkpOwogCWFyZ3Mub3V0LmFyZ3NbMF0udmFsdWUgPSAmb3V0ZW50cnk7CiAJYXJncy5vdXQuYXJnc1sxXS5zaXplID0gc2l6ZW9mKG91dG9wZW4pOwogCWFyZ3Mub3V0LmFyZ3NbMV0udmFsdWUgPSAmb3V0b3BlbjsKQEAgLTUzOSwxMCArNTMyLDcgQEAKIAltZW1zZXQoJm91dGFyZywgMCwgc2l6ZW9mKG91dGFyZykpOwogCWFyZ3MtPmluLmgubm9kZWlkID0gZ2V0X25vZGVfaWQoZGlyKTsKIAlhcmdzLT5vdXQubnVtYXJncyA9IDE7Ci0JaWYgKGZjLT5taW5vciA8IDkpCi0JCWFyZ3MtPm91dC5hcmdzWzBdLnNpemUgPSBGVVNFX0NPTVBBVF9FTlRSWV9PVVRfU0laRTsKLQllbHNlCi0JCWFyZ3MtPm91dC5hcmdzWzBdLnNpemUgPSBzaXplb2Yob3V0YXJnKTsKKwlhcmdzLT5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKG91dGFyZyk7CiAJYXJncy0+b3V0LmFyZ3NbMF0udmFsdWUgPSAmb3V0YXJnOwogCWVyciA9IGZ1c2Vfc2ltcGxlX3JlcXVlc3QoZmMsIGFyZ3MpOwogCWlmIChlcnIpCkBAIC01OTIsOCArNTgyLDcgQEAKIAlpbmFyZy51bWFzayA9IGN1cnJlbnRfdW1hc2soKTsKIAlhcmdzLmluLmgub3Bjb2RlID0gRlVTRV9NS05PRDsKIAlhcmdzLmluLm51bWFyZ3MgPSAyOwotCWFyZ3MuaW4uYXJnc1swXS5zaXplID0gZmMtPm1pbm9yIDwgMTIgPyBGVVNFX0NPTVBBVF9NS05PRF9JTl9TSVpFIDoKLQkJCQkJCXNpemVvZihpbmFyZyk7CisJYXJncy5pbi5hcmdzWzBdLnNpemUgPSBzaXplb2YoaW5hcmcpOwogCWFyZ3MuaW4uYXJnc1swXS52YWx1ZSA9ICZpbmFyZzsKIAlhcmdzLmluLmFyZ3NbMV0uc2l6ZSA9IGVudHJ5LT5kX25hbWUubGVuICsgMTsKIAlhcmdzLmluLmFyZ3NbMV0udmFsdWUgPSBlbnRyeS0+ZF9uYW1lLm5hbWU7CkBAIC04OTksMTAgKzg4OCw3IEBACiAJYXJncy5pbi5hcmdzWzBdLnNpemUgPSBzaXplb2YoaW5hcmcpOwogCWFyZ3MuaW4uYXJnc1swXS52YWx1ZSA9ICZpbmFyZzsKIAlhcmdzLm91dC5udW1hcmdzID0gMTsKLQlpZiAoZmMtPm1pbm9yIDwgOSkKLQkJYXJncy5vdXQuYXJnc1swXS5zaXplID0gRlVTRV9DT01QQVRfQVRUUl9PVVRfU0laRTsKLQllbHNlCi0JCWFyZ3Mub3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihvdXRhcmcpOworCWFyZ3Mub3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihvdXRhcmcpOwogCWFyZ3Mub3V0LmFyZ3NbMF0udmFsdWUgPSAmb3V0YXJnOwogCWVyciA9IGZ1c2Vfc2ltcGxlX3JlcXVlc3QoZmMsICZhcmdzKTsKIAlpZiAoIWVycikgewpAQCAtMTU3NCwxMCArMTU2MCw3IEBACiAJYXJncy0+aW4uYXJnc1swXS5zaXplID0gc2l6ZW9mKCppbmFyZ19wKTsKIAlhcmdzLT5pbi5hcmdzWzBdLnZhbHVlID0gaW5hcmdfcDsKIAlhcmdzLT5vdXQubnVtYXJncyA9IDE7Ci0JaWYgKGZjLT5taW5vciA8IDkpCi0JCWFyZ3MtPm91dC5hcmdzWzBdLnNpemUgPSBGVVNFX0NPTVBBVF9BVFRSX09VVF9TSVpFOwotCWVsc2UKLQkJYXJncy0+b3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZigqb3V0YXJnX3ApOworCWFyZ3MtPm91dC5hcmdzWzBdLnNpemUgPSBzaXplb2YoKm91dGFyZ19wKTsKIAlhcmdzLT5vdXQuYXJnc1swXS52YWx1ZSA9IG91dGFyZ19wOwogfQogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaAppbmRleCBlMGZjNjcyLi4xY2RmYjA3IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Z1c2VfaS5oCisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmgKQEAgLTkwNiw0ICs5MDYsNiBAQAogaW50IGZ1c2VfZG9fc2V0YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHIsCiAJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiAKK3ZvaWQgZnVzZV9zZXRfaW5pdGlhbGl6ZWQoc3RydWN0IGZ1c2VfY29ubiAqZmMpOworCiAjZW5kaWYgLyogX0ZTX0ZVU0VfSV9IICovCmRpZmYgLS1naXQgYS9mcy9mdXNlL2lub2RlLmMgYi9mcy9mdXNlL2lub2RlLmMKaW5kZXggNjc0OTEwOS4uZjM4MjU2ZSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9pbm9kZS5jCisrKyBiL2ZzL2Z1c2UvaW5vZGUuYwpAQCAtNDI0LDggKzQyNCw3IEBACiAJYXJncy5pbi5oLm9wY29kZSA9IEZVU0VfU1RBVEZTOwogCWFyZ3MuaW4uaC5ub2RlaWQgPSBnZXRfbm9kZV9pZChkZW50cnktPmRfaW5vZGUpOwogCWFyZ3Mub3V0Lm51bWFyZ3MgPSAxOwotCWFyZ3Mub3V0LmFyZ3NbMF0uc2l6ZSA9Ci0JCWZjLT5taW5vciA8IDQgPyBGVVNFX0NPTVBBVF9TVEFURlNfU0laRSA6IHNpemVvZihvdXRhcmcpOworCWFyZ3Mub3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihvdXRhcmcpOwogCWFyZ3Mub3V0LmFyZ3NbMF0udmFsdWUgPSAmb3V0YXJnOwogCWVyciA9IGZ1c2Vfc2ltcGxlX3JlcXVlc3QoZmMsICZhcmdzKTsKIAlpZiAoIWVycikKQEAgLTg5OCw3ICs4OTcsNyBAQAogCQlmYy0+bWF4X3dyaXRlID0gbWF4X3QodW5zaWduZWQsIDQwOTYsIGZjLT5tYXhfd3JpdGUpOwogCQlmYy0+Y29ubl9pbml0ID0gMTsKIAl9Ci0JZmMtPmluaXRpYWxpemVkID0gMTsKKwlmdXNlX3NldF9pbml0aWFsaXplZChmYyk7CiAJd2FrZV91cF9hbGwoJmZjLT5ibG9ja2VkX3dhaXRxKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9xdW90YS5jIGIvZnMvZ2ZzMi9xdW90YS5jCmluZGV4IGM4YjE0OGIuLjNlMTkzY2IgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcXVvdGEuYworKysgYi9mcy9nZnMyL3F1b3RhLmMKQEAgLTY2Nyw3ICs2NjcsNyBAQAogCiBzdGF0aWMgaW50IGdmczJfYWRqdXN0X3F1b3RhKHN0cnVjdCBnZnMyX2lub2RlICppcCwgbG9mZl90IGxvYywKIAkJCSAgICAgczY0IGNoYW5nZSwgc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQsCi0JCQkgICAgIHN0cnVjdCBmc19kaXNrX3F1b3RhICpmZHEpCisJCQkgICAgIHN0cnVjdCBxY19kcWJsayAqZmRxKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmaXAtPmlfaW5vZGU7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGlub2RlKTsKQEAgLTY5NywxNiArNjk3LDE2IEBACiAJYmU2NF9hZGRfY3B1KCZxLnF1X3ZhbHVlLCBjaGFuZ2UpOwogCXFkLT5xZF9xYi5xYl92YWx1ZSA9IHEucXVfdmFsdWU7CiAJaWYgKGZkcSkgewotCQlpZiAoZmRxLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JTT0ZUKSB7Ci0JCQlxLnF1X3dhcm4gPSBjcHVfdG9fYmU2NChmZHEtPmRfYmxrX3NvZnRsaW1pdCA+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+ZF9maWVsZG1hc2sgXj0gUUNfU1BBQ0U7CiAKIAlpZiAoZmRxLT5kX2ZpZWxkbWFzayA9PSAwKQogCQlnb3RvIG91dF9pOwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvcm9jay5jIGIvZnMvaXNvZnMvcm9jay5jCmluZGV4IGJiNjMyNTQuLjczNWQ3NTIgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL3JvY2suYworKysgYi9mcy9pc29mcy9yb2NrLmMKQEAgLTM2Miw2ICszNjIsOSBAQAogCQkJcnMuY29udF9zaXplID0gaXNvbnVtXzczMyhyci0+dS5DRS5zaXplKTsKIAkJCWJyZWFrOwogCQljYXNlIFNJRygnRScsICdSJyk6CisJCQkvKiBJbnZhbGlkIGxlbmd0aCBvZiBFUiB0YWcgaWQ/ICovCisJCQlpZiAocnItPnUuRVIubGVuX2lkICsgb2Zmc2V0b2Yoc3RydWN0IHJvY2tfcmlkZ2UsIHUuRVIuZGF0YSkgPiByci0+bGVuKQorCQkJCWdvdG8gb3V0OwogCQkJSVNPRlNfU0IoaW5vZGUtPmlfc2IpLT5zX3JvY2sgPSAxOwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIklTTyA5NjYwIEV4dGVuc2lvbnM6ICIpOwogCQkJewpkaWZmIC0tZ2l0IGEvZnMva2VybmZzL2Rpci5jIGIvZnMva2VybmZzL2Rpci5jCmluZGV4IDM3OTg5ZjAuLjJkODgxYjMgMTAwNjQ0Ci0tLSBhL2ZzL2tlcm5mcy9kaXIuYworKysgYi9mcy9rZXJuZnMvZGlyLmMKQEAgLTIwMSwxMCArMjAxLDE0IEBACiBzdGF0aWMgaW50IGtlcm5mc19uYW1lX2NvbXBhcmUodW5zaWduZWQgaW50IGhhc2gsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgICAgICAgY29uc3Qgdm9pZCAqbnMsIGNvbnN0IHN0cnVjdCBrZXJuZnNfbm9kZSAqa24pCiB7Ci0JaWYgKGhhc2ggIT0ga24tPmhhc2gpCi0JCXJldHVybiBoYXNoIC0ga24tPmhhc2g7Ci0JaWYgKG5zICE9IGtuLT5ucykKLQkJcmV0dXJuIG5zIC0ga24tPm5zOworCWlmIChoYXNoIDwga24tPmhhc2gpCisJCXJldHVybiAtMTsKKwlpZiAoaGFzaCA+IGtuLT5oYXNoKQorCQlyZXR1cm4gMTsKKwlpZiAobnMgPCBrbi0+bnMpCisJCXJldHVybiAtMTsKKwlpZiAobnMgPiBrbi0+bnMpCisJCXJldHVybiAxOwogCXJldHVybiBzdHJjbXAobmFtZSwga24tPm5hbWUpOwogfQogCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmMuYyBiL2ZzL2xvY2tkL3N2Yy5jCmluZGV4IGU5NGM4ODcuLjU1NTA1Y2IgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Yy5jCisrKyBiL2ZzL2xvY2tkL3N2Yy5jCkBAIC0xMzgsMTAgKzEzOCw2IEBACiAKIAlkcHJpbnRrKCJORlMgbG9ja2luZyBzZXJ2aWNlIHN0YXJ0ZWQgKHZlciAiIExPQ0tEX1ZFUlNJT04gIikuXG4iKTsKIAotCWlmICghbmxtX3RpbWVvdXQpCi0JCW5sbV90aW1lb3V0ID0gTE9DS0RfREZMVF9USU1FTzsKLQlubG1zdmNfdGltZW91dCA9IG5sbV90aW1lb3V0ICogSFo7Ci0KIAkvKgogCSAqIFRoZSBtYWluIHJlcXVlc3QgbG9vcC4gV2UgZG9uJ3QgdGVybWluYXRlIHVudGlsIHRoZSBsYXN0CiAJICogTkZTIG1vdW50IG9yIE5GUyBkYWVtb24gaGFzIGdvbmUgYXdheS4KQEAgLTM1MCw2ICszNDYsMTAgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJImxvY2tkX3VwOiBubyBwaWQsICVkIHVzZXJzPz9cbiIsIG5sbXN2Y191c2Vycyk7CiAKKwlpZiAoIW5sbV90aW1lb3V0KQorCQlubG1fdGltZW91dCA9IExPQ0tEX0RGTFRfVElNRU87CisJbmxtc3ZjX3RpbWVvdXQgPSBubG1fdGltZW91dCAqIEhaOworCiAJc2VydiA9IHN2Y19jcmVhdGUoJm5sbXN2Y19wcm9ncmFtLCBMT0NLRF9CVUZTSVpFLCBzdmNfcnBjYl9jbGVhbnVwKTsKIAlpZiAoIXNlcnYpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibG9ja2RfdXA6IGNyZWF0ZSBzZXJ2aWNlIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuYwppbmRleCA3MzViOGQzLi41OWUyZjkwNSAxMDA2NDQKLS0tIGEvZnMvbG9ja3MuYworKysgYi9mcy9sb2Nrcy5jCkBAIC0xNzAyLDcgKzE3MDIsNyBAQAogCQkJYnJlYWs7CiAJfQogCXRyYWNlX2dlbmVyaWNfZGVsZXRlX2xlYXNlKGlub2RlLCBmbCk7Ci0JaWYgKGZsKQorCWlmIChmbCAmJiBJU19MRUFTRShmbCkpCiAJCWVycm9yID0gZmwtPmZsX2xtb3BzLT5sbV9jaGFuZ2UoYmVmb3JlLCBGX1VOTENLLCAmZGlzcG9zZSk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCWxvY2tzX2Rpc3Bvc2VfbGlzdCgmZGlzcG9zZSk7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyZWN0LmMgYi9mcy9uZnMvZGlyZWN0LmMKaW5kZXggMTBiZjA3Mi4uMjk0NjkyZiAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtMjEyLDYgKzIxMiwxMiBAQAogICovCiBzc2l6ZV90IG5mc19kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgbG9mZl90IHBvcykKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9tYXBwaW5nLT5ob3N0OworCisJLyogd2Ugb25seSBzdXBwb3J0IHN3YXAgZmlsZSBjYWxsaW5nIG5mc19kaXJlY3RfSU8gKi8KKwlpZiAoIUlTX1NXQVBGSUxFKGlub2RlKSkKKwkJcmV0dXJuIDA7CisKICNpZm5kZWYgQ09ORklHX05GU19TV0FQCiAJZHByaW50aygiTkZTOiBuZnNfZGlyZWN0X0lPICglcEQpIG9mZi9ubyglTGQvJWx1KSBFSU5WQUxcbiIsCiAJCQlpb2NiLT5raV9maWxwLCAobG9uZyBsb25nKSBwb3MsIGl0ZXItPm5yX3NlZ3MpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCA0YmZmZTYzLi4yMjExZjZiIDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtMzUyLDggKzM1Miw5IEBACiAKIAluZnNfYXR0cl9jaGVja19tb3VudHBvaW50KHNiLCBmYXR0cik7CiAKLQlpZiAoKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9GSUxFSUQpID09IDApICYmCi0JICAgICFuZnNfYXR0cl91c2VfbW91bnRlZF9vbl9maWxlaWQoZmF0dHIpKQorCWlmIChuZnNfYXR0cl91c2VfbW91bnRlZF9vbl9maWxlaWQoZmF0dHIpKQorCQlmYXR0ci0+ZmlsZWlkID0gZmF0dHItPm1vdW50ZWRfb25fZmlsZWlkOworCWVsc2UgaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9GSUxFSUQpID09IDApCiAJCWdvdG8gb3V0X25vX2lub2RlOwogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVFlQRSkgPT0gMCkKIAkJZ290byBvdXRfbm9faW5vZGU7CmRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oCmluZGV4IGVmYWEzMWMuLmI2ZjM0YmYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL25mcy9pbnRlcm5hbC5oCkBAIC0zMSw4ICszMSw2IEBACiAJICAgICgoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX01PVU5UUE9JTlQpID09IDApICYmCiAJICAgICAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1Y0X1JFRkVSUkFMKSA9PSAwKSkpCiAJCXJldHVybiAwOwotCi0JZmF0dHItPmZpbGVpZCA9IGZhdHRyLT5tb3VudGVkX29uX2ZpbGVpZDsKIAlyZXR1cm4gMTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRjbGllbnQuYyBiL2ZzL25mcy9uZnM0Y2xpZW50LmMKaW5kZXggMDMzMTEyNS4uNzA2YWQxMCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRjbGllbnQuYworKysgYi9mcy9uZnMvbmZzNGNsaWVudC5jCkBAIC0yMjgsNiArMjI4LDcgQEAKIAlrZnJlZShjbHAtPmNsX3NlcnZlcm93bmVyKTsKIAlrZnJlZShjbHAtPmNsX3NlcnZlcnNjb3BlKTsKIAlrZnJlZShjbHAtPmNsX2ltcGxpZCk7CisJa2ZyZWUoY2xwLT5jbF9vd25lcl9pZCk7CiB9CiAKIHZvaWQgbmZzNF9mcmVlX2NsaWVudChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQpAQCAtNDUyLDYgKzQ1MywxNCBAQAogCXNwaW5fdW5sb2NrKCZubi0+bmZzX2NsaWVudF9sb2NrKTsKIH0KIAorc3RhdGljIGJvb2wgbmZzNF9tYXRjaF9jbGllbnRfb3duZXJfaWQoY29uc3Qgc3RydWN0IG5mc19jbGllbnQgKmNscDEsCisJCWNvbnN0IHN0cnVjdCBuZnNfY2xpZW50ICpjbHAyKQoreworCWlmIChjbHAxLT5jbF9vd25lcl9pZCA9PSBOVUxMIHx8IGNscDItPmNsX293bmVyX2lkID09IE5VTEwpCisJCXJldHVybiB0cnVlOworCXJldHVybiBzdHJjbXAoY2xwMS0+Y2xfb3duZXJfaWQsIGNscDItPmNsX293bmVyX2lkKSA9PSAwOworfQorCiAvKioKICAqIG5mczQwX3dhbGtfY2xpZW50X2xpc3QgLSBGaW5kIHNlcnZlciB0aGF0IHJlY29nbml6ZXMgYSBjbGllbnQgSUQKICAqCkBAIC00ODMsOSArNDkyLDYgQEAKIAkJaWYgKHBvcy0+cnBjX29wcyAhPSBuZXctPnJwY19vcHMpCiAJCQljb250aW51ZTsKIAotCQlpZiAocG9zLT5jbF9wcm90byAhPSBuZXctPmNsX3Byb3RvKQotCQkJY29udGludWU7Ci0KIAkJaWYgKHBvcy0+Y2xfbWlub3J2ZXJzaW9uICE9IG5ldy0+Y2xfbWlub3J2ZXJzaW9uKQogCQkJY29udGludWU7CiAKQEAgLTUxMCw2ICs1MTYsOSBAQAogCQlpZiAocG9zLT5jbF9jbGllbnRpZCAhPSBuZXctPmNsX2NsaWVudGlkKQogCQkJY29udGludWU7CiAKKwkJaWYgKCFuZnM0X21hdGNoX2NsaWVudF9vd25lcl9pZChwb3MsIG5ldykpCisJCQljb250aW51ZTsKKwogCQlhdG9taWNfaW5jKCZwb3MtPmNsX2NvdW50KTsKIAkJc3Bpbl91bmxvY2soJm5uLT5uZnNfY2xpZW50X2xvY2spOwogCkBAIC01NjYsMjAgKzU3NSwxNCBAQAogfQogCiAvKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBzZXJ2ZXIgb3duZXJzIG1hdGNoCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlcnZlciBtYWpvciBpZHMgbWF0Y2gKICAqLwogc3RhdGljIGJvb2wKLW5mczRfbWF0Y2hfc2VydmVyb3duZXJzKHN0cnVjdCBuZnNfY2xpZW50ICphLCBzdHJ1Y3QgbmZzX2NsaWVudCAqYikKK25mczRfY2hlY2tfY2xpZW50aWRfdHJ1bmtpbmcoc3RydWN0IG5mc19jbGllbnQgKmEsIHN0cnVjdCBuZnNfY2xpZW50ICpiKQogewogCXN0cnVjdCBuZnM0MV9zZXJ2ZXJfb3duZXIgKm8xID0gYS0+Y2xfc2VydmVyb3duZXI7CiAJc3RydWN0IG5mczQxX3NlcnZlcl9vd25lciAqbzIgPSBiLT5jbF9zZXJ2ZXJvd25lcjsKIAotCWlmIChvMS0+bWlub3JfaWQgIT0gbzItPm1pbm9yX2lkKSB7Ci0JCWRwcmludGsoIk5GUzogLS0+ICVzIHNlcnZlciBvd25lciBtaW5vciBJRHMgZG8gbm90IG1hdGNoXG4iLAotCQkJX19mdW5jX18pOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCiAJaWYgKG8xLT5tYWpvcl9pZF9zeiAhPSBvMi0+bWFqb3JfaWRfc3opCiAJCWdvdG8gb3V0X21ham9yX21pc21hdGNoOwogCWlmIChtZW1jbXAobzEtPm1ham9yX2lkLCBvMi0+bWFqb3JfaWQsIG8xLT5tYWpvcl9pZF9zeikgIT0gMCkKQEAgLTYyMSw5ICs2MjQsNiBAQAogCQlpZiAocG9zLT5ycGNfb3BzICE9IG5ldy0+cnBjX29wcykKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChwb3MtPmNsX3Byb3RvICE9IG5ldy0+Y2xfcHJvdG8pCi0JCQljb250aW51ZTsKLQogCQlpZiAocG9zLT5jbF9taW5vcnZlcnNpb24gIT0gbmV3LT5jbF9taW5vcnZlcnNpb24pCiAJCQljb250aW51ZTsKIApAQCAtNjM5LDcgKzYzOSw3IEBACiAJCQlwcmV2ID0gcG9zOwogCiAJCQlzdGF0dXMgPSBuZnNfd2FpdF9jbGllbnRfaW5pdF9jb21wbGV0ZShwb3MpOwotCQkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlpZiAocG9zLT5jbF9jb25zX3N0YXRlID09IE5GU19DU19TRVNTSU9OX0lOSVRJTkcpIHsKIAkJCQluZnM0X3NjaGVkdWxlX2xlYXNlX3JlY292ZXJ5KHBvcyk7CiAJCQkJc3RhdHVzID0gbmZzNF93YWl0X2NsbnRfcmVjb3Zlcihwb3MpOwogCQkJfQpAQCAtNjU0LDcgKzY1NCwxOSBAQAogCQlpZiAoIW5mczRfbWF0Y2hfY2xpZW50aWRzKHBvcywgbmV3KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghbmZzNF9tYXRjaF9zZXJ2ZXJvd25lcnMocG9zLCBuZXcpKQorCQkvKgorCQkgKiBOb3RlIHRoYXQgc2Vzc2lvbiB0cnVua2luZyBpcyBqdXN0IGEgc3BlY2lhbCBzdWJjYXNlIG9mCisJCSAqIGNsaWVudCBpZCB0cnVua2luZy4gSW4gZWl0aGVyIGNhc2UsIHdlIHdhbnQgdG8gZmFsbCBiYWNrCisJCSAqIHRvIHVzaW5nIHRoZSBleGlzdGluZyBuZnNfY2xpZW50LgorCQkgKi8KKwkJaWYgKCFuZnM0X2NoZWNrX2NsaWVudGlkX3RydW5raW5nKHBvcywgbmV3KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFVubGlrZSBORlN2NC4wLCB3ZSBrbm93IHRoYXQgTkZTdjQuMSBhbHdheXMgdXNlcyB0aGUKKwkJICogdW5pZm9ybSBzdHJpbmcsIGhvd2V2ZXIgc29tZW9uZSBtaWdodCBzd2l0Y2ggdGhlCisJCSAqIHVuaXF1aWZpZXIgc3RyaW5nIG9uIHVzLgorCQkgKi8KKwkJaWYgKCFuZnM0X21hdGNoX2NsaWVudF9vd25lcl9pZChwb3MsIG5ldykpCiAJCQljb250aW51ZTsKIAogCQlhdG9taWNfaW5jKCZwb3MtPmNsX2NvdW50KTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKaW5kZXggZTdmOGQ1Zi4uYzM0NzcwNSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTExMTcsOCArMTExNyw2IEBACiAJCXJldHVybiAwOwogCWlmICgoZGVsZWdhdGlvbi0+dHlwZSAmIGZtb2RlKSAhPSBmbW9kZSkKIAkJcmV0dXJuIDA7Ci0JaWYgKHRlc3RfYml0KE5GU19ERUxFR0FUSU9OX05FRURfUkVDTEFJTSwgJmRlbGVnYXRpb24tPmZsYWdzKSkKLQkJcmV0dXJuIDA7CiAJaWYgKHRlc3RfYml0KE5GU19ERUxFR0FUSU9OX1JFVFVSTklORywgJmRlbGVnYXRpb24tPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAJbmZzX21hcmtfZGVsZWdhdGlvbl9yZWZlcmVuY2VkKGRlbGVnYXRpb24pOwpAQCAtNDkxNywxMSArNDkxNSwxNCBAQAogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50Ci1uZnM0X2luaXRfbm9udW5pZm9ybV9jbGllbnRfc3RyaW5nKGNvbnN0IHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCituZnM0X2luaXRfbm9udW5pZm9ybV9jbGllbnRfc3RyaW5nKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCiAJCQkJICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogCXVuc2lnbmVkIGludCByZXN1bHQ7CiAKKwlpZiAoY2xwLT5jbF9vd25lcl9pZCAhPSBOVUxMKQorCQlyZXR1cm4gc3RybGNweShidWYsIGNscC0+Y2xfb3duZXJfaWQsIGxlbik7CisKIAlyY3VfcmVhZF9sb2NrKCk7CiAJcmVzdWx0ID0gc2NucHJpbnRmKGJ1ZiwgbGVuLCAiTGludXggTkZTdjQuMCAlcy8lcyAlcyIsCiAJCQkJY2xwLT5jbF9pcGFkZHIsCkBAIC00OTMwLDI0ICs0OTMxLDMyIEBACiAJCQkJcnBjX3BlZXJhZGRyMnN0cihjbHAtPmNsX3JwY2NsaWVudCwKIAkJCQkJCQlSUENfRElTUExBWV9QUk9UTykpOwogCXJjdV9yZWFkX3VubG9jaygpOworCWNscC0+Y2xfb3duZXJfaWQgPSBrc3RyZHVwKGJ1ZiwgR0ZQX0tFUk5FTCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludAotbmZzNF9pbml0X3VuaWZvcm1fY2xpZW50X3N0cmluZyhjb25zdCBzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAorbmZzNF9pbml0X3VuaWZvcm1fY2xpZW50X3N0cmluZyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAogCQkJCWNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAljb25zdCBjaGFyICpub2RlbmFtZSA9IGNscC0+Y2xfcnBjY2xpZW50LT5jbF9ub2RlbmFtZTsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OworCisJaWYgKGNscC0+Y2xfb3duZXJfaWQgIT0gTlVMTCkKKwkJcmV0dXJuIHN0cmxjcHkoYnVmLCBjbHAtPmNsX293bmVyX2lkLCBsZW4pOwogCiAJaWYgKG5mczRfY2xpZW50X2lkX3VuaXF1aWZpZXJbMF0gIT0gJ1wwJykKLQkJcmV0dXJuIHNjbnByaW50ZihidWYsIGxlbiwgIkxpbnV4IE5GU3YldS4ldSAlcy8lcyIsCisJCXJlc3VsdCA9IHNjbnByaW50ZihidWYsIGxlbiwgIkxpbnV4IE5GU3YldS4ldSAlcy8lcyIsCiAJCQkJY2xwLT5ycGNfb3BzLT52ZXJzaW9uLAogCQkJCWNscC0+Y2xfbWlub3J2ZXJzaW9uLAogCQkJCW5mczRfY2xpZW50X2lkX3VuaXF1aWZpZXIsCiAJCQkJbm9kZW5hbWUpOwotCXJldHVybiBzY25wcmludGYoYnVmLCBsZW4sICJMaW51eCBORlN2JXUuJXUgJXMiLAorCWVsc2UKKwkJcmVzdWx0ID0gc2NucHJpbnRmKGJ1ZiwgbGVuLCAiTGludXggTkZTdiV1LiV1ICVzIiwKIAkJCQljbHAtPnJwY19vcHMtPnZlcnNpb24sIGNscC0+Y2xfbWlub3J2ZXJzaW9uLAogCQkJCW5vZGVuYW1lKTsKKwljbHAtPmNsX293bmVyX2lkID0ga3N0cmR1cChidWYsIEdGUF9LRVJORUwpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRzdGF0ZS5jIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwppbmRleCAzNTUwYTljLi5jMDZhMWJhIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKQEAgLTM4OTcsMTEgKzM4OTcsMTEgQEAKIAkJc3RhdHVzID0gbmZzNF9zZXRsZWFzZShkcCk7CiAJCWdvdG8gb3V0OwogCX0KLQlhdG9taWNfaW5jKCZmcC0+ZmlfZGVsZWdlZXMpOwogCWlmIChmcC0+ZmlfaGFkX2NvbmZsaWN0KSB7CiAJCXN0YXR1cyA9IC1FQUdBSU47CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CisJYXRvbWljX2luYygmZnAtPmZpX2RlbGVnZWVzKTsKIAloYXNoX2RlbGVnYXRpb25fbG9ja2VkKGRwLCBmcCk7CiAJc3RhdHVzID0gMDsKIG91dF91bmxvY2s6CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYwppbmRleCBjOTkxNjE2Li5iZmY4NTY3IDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jCisrKyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMKQEAgLTI1OSwxNiArMjU5LDE1IEBACiAJc3RydWN0IGZzbm90aWZ5X2V2ZW50ICprZXZlbnQ7CiAJY2hhciBfX3VzZXIgKnN0YXJ0OwogCWludCByZXQ7Ci0JREVGSU5FX1dBSVQod2FpdCk7CisJREVGSU5FX1dBSVRfRlVOQyh3YWl0LCB3b2tlbl93YWtlX2Z1bmN0aW9uKTsKIAogCXN0YXJ0ID0gYnVmOwogCWdyb3VwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJcHJfZGVidWcoIiVzOiBncm91cD0lcFxuIiwgX19mdW5jX18sIGdyb3VwKTsKIAorCWFkZF93YWl0X3F1ZXVlKCZncm91cC0+bm90aWZpY2F0aW9uX3dhaXRxLCAmd2FpdCk7CiAJd2hpbGUgKDEpIHsKLQkJcHJlcGFyZV90b193YWl0KCZncm91cC0+bm90aWZpY2F0aW9uX3dhaXRxLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQogCQltdXRleF9sb2NrKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KTsKIAkJa2V2ZW50ID0gZ2V0X29uZV9ldmVudChncm91cCwgY291bnQpOwogCQltdXRleF91bmxvY2soJmdyb3VwLT5ub3RpZmljYXRpb25fbXV0ZXgpOwpAQCAtMjg5LDcgKzI4OCw4IEBACiAKIAkJCWlmIChzdGFydCAhPSBidWYpCiAJCQkJYnJlYWs7Ci0JCQlzY2hlZHVsZSgpOworCisJCQl3YWl0X3dva2VuKCZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTMxOCw4ICszMTgsOCBAQAogCQlidWYgKz0gcmV0OwogCQljb3VudCAtPSByZXQ7CiAJfQorCXJlbW92ZV93YWl0X3F1ZXVlKCZncm91cC0+bm90aWZpY2F0aW9uX3dhaXRxLCAmd2FpdCk7CiAKLQlmaW5pc2hfd2FpdCgmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSwgJndhaXQpOwogCWlmIChzdGFydCAhPSBidWYgJiYgcmV0ICE9IC1FRkFVTFQpCiAJCXJldCA9IGJ1ZiAtIHN0YXJ0OwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYyBiL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCmluZGV4IDc5YjVhZjUuLmNlY2Q4NzUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCkBAIC0yMDIzLDExICsyMDIzLDggQEAKIAlkbG1fbG9ja3Jlc19kcm9wX2luZmxpZ2h0X3JlZihkbG0sIHJlcyk7CiAJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCi0JaWYgKHJldCA8IDApIHsKKwlpZiAocmV0IDwgMCkKIAkJbWxvZ19lcnJubyhyZXQpOwotCQlpZiAobmV3bG9jaykKLQkJCWRsbV9sb2NrX3B1dChuZXdsb2NrKTsKLQl9CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmMKaW5kZXggYjkzMWUwNC4uOTE0YzEyMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYworKysgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC05NCw2ICs5NCwxNCBAQAogCQkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKnN5bW5hbWUpOwogCitzdGF0aWMgaW50IG9jZnMyX2RvdWJsZV9sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDEsCisJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUxLAorCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDIsCisJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUyLAorCQkJICAgICBpbnQgcmVuYW1lKTsKKworc3RhdGljIHZvaWQgb2NmczJfZG91YmxlX3VubG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlMSwgc3RydWN0IGlub2RlICppbm9kZTIpOwogLyogQW4gb3JwaGFuIGRpciBuYW1lIGlzIGFuIDggYnl0ZSB2YWx1ZSwgcHJpbnRlZCBhcyBhIGhleCBzdHJpbmcgKi8KICNkZWZpbmUgT0NGUzJfT1JQSEFOX05BTUVMRU4gKChpbnQpKDIgKiBzaXplb2YodTY0KSkpCiAKQEAgLTY3OCw4ICs2ODYsMTAgQEAKIHsKIAloYW5kbGVfdCAqaGFuZGxlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqb2xkX2RpciA9IG9sZF9kZW50cnktPmRfcGFyZW50LT5kX2lub2RlOwogCWludCBlcnI7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfZGlyX2JoID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKQEAgLTY5NiwxOSArNzA2LDMzIEBACiAKIAlkcXVvdF9pbml0aWFsaXplKGRpcik7CiAKLQllcnIgPSBvY2ZzMl9pbm9kZV9sb2NrX25lc3RlZChkaXIsICZwYXJlbnRfZmVfYmgsIDEsIE9JX0xTX1BBUkVOVCk7CisJZXJyID0gb2NmczJfZG91YmxlX2xvY2sob3NiLCAmb2xkX2Rpcl9iaCwgb2xkX2RpciwKKwkJCSZwYXJlbnRfZmVfYmgsIGRpciwgMCk7CiAJaWYgKGVyciA8IDApIHsKIAkJaWYgKGVyciAhPSAtRU5PRU5UKQogCQkJbWxvZ19lcnJubyhlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIG1ha2Ugc3VyZSBib3RoIGRpcnMgaGF2ZSBiaHMKKwkgKiBnZXQgYW4gZXh0cmEgcmVmIG9uIG9sZF9kaXJfYmggaWYgb2xkPT1uZXcgKi8KKwlpZiAoIXBhcmVudF9mZV9iaCkgeworCQlpZiAob2xkX2Rpcl9iaCkgeworCQkJcGFyZW50X2ZlX2JoID0gb2xkX2Rpcl9iaDsKKwkJCWdldF9iaChwYXJlbnRfZmVfYmgpOworCQl9IGVsc2UgeworCQkJbWxvZyhNTF9FUlJPUiwgIiVzOiBubyBvbGRfZGlyX2JoIVxuIiwgb3NiLT51dWlkX3N0cik7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKIAlpZiAoIWRpci0+aV9ubGluaykgewogCQllcnIgPSAtRU5PRU5UOwogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBvY2ZzMl9sb29rdXBfaW5vX2Zyb21fbmFtZShkaXIsIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAorCWVyciA9IG9jZnMyX2xvb2t1cF9pbm9fZnJvbV9uYW1lKG9sZF9kaXIsIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAogCQkJb2xkX2RlbnRyeS0+ZF9uYW1lLmxlbiwgJm9sZF9kZV9pbm8pOwogCWlmIChlcnIpIHsKIAkJZXJyID0gLUVOT0VOVDsKQEAgLTgwMSwxMCArODI1LDExIEBACiAJb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlLCAxKTsKIAogb3V0OgotCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDEpOworCW9jZnMyX2RvdWJsZV91bmxvY2sob2xkX2RpciwgZGlyKTsKIAogCWJyZWxzZShmZV9iaCk7CiAJYnJlbHNlKHBhcmVudF9mZV9iaCk7CisJYnJlbHNlKG9sZF9kaXJfYmgpOwogCiAJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmbG9va3VwKTsKIApAQCAtMTA3MiwxNCArMTA5NywxNSBAQAogfQogCiAvKgotICogVGhlIG9ubHkgcGxhY2UgdGhpcyBzaG91bGQgYmUgdXNlZCBpcyByZW5hbWUhCisgKiBUaGUgb25seSBwbGFjZSB0aGlzIHNob3VsZCBiZSB1c2VkIGlzIHJlbmFtZSBhbmQgbGluayEKICAqIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBpZCwgdGhlbiB0aGUgMXN0IG9uZSBpcyB0aGUgb25seSBvbmUgbG9ja2VkLgogICovCiBzdGF0aWMgaW50IG9jZnMyX2RvdWJsZV9sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDEsCiAJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUxLAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDIsCi0JCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUyKQorCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMiwKKwkJCSAgICAgaW50IHJlbmFtZSkKIHsKIAlpbnQgc3RhdHVzOwogCWludCBpbm9kZTFfaXNfYW5jZXN0b3IsIGlub2RlMl9pc19hbmNlc3RvcjsKQEAgLTExMjcsNyArMTE1Myw3IEBACiAJCX0KIAkJLyogbG9jayBpZDIgKi8KIAkJc3RhdHVzID0gb2NmczJfaW5vZGVfbG9ja19uZXN0ZWQoaW5vZGUyLCBiaDIsIDEsCi0JCQkJCQkgT0lfTFNfUkVOQU1FMSk7CisJCQkJcmVuYW1lID09IDEgPyBPSV9MU19SRU5BTUUxIDogT0lfTFNfUEFSRU5UKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWlmIChzdGF0dXMgIT0gLUVOT0VOVCkKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMTM2LDcgKzExNjIsOCBAQAogCX0KIAogCS8qIGxvY2sgaWQxICovCi0Jc3RhdHVzID0gb2NmczJfaW5vZGVfbG9ja19uZXN0ZWQoaW5vZGUxLCBiaDEsIDEsIE9JX0xTX1JFTkFNRTIpOworCXN0YXR1cyA9IG9jZnMyX2lub2RlX2xvY2tfbmVzdGVkKGlub2RlMSwgYmgxLCAxLAorCQkJcmVuYW1lID09IDEgPyAgT0lfTFNfUkVOQU1FMiA6IE9JX0xTX1BBUkVOVCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJLyoKIAkJICogQW4gZXJyb3IgcmV0dXJuIG11c3QgbWVhbiB0aGF0IG5vIGNsdXN0ZXIgbG9ja3MKQEAgLTEyNTIsNyArMTI3OSw3IEBACiAKIAkvKiBpZiBvbGQgYW5kIG5ldyBhcmUgdGhlIHNhbWUsIHRoaXMnbGwganVzdCBkbyBvbmUgbG9jay4gKi8KIAlzdGF0dXMgPSBvY2ZzMl9kb3VibGVfbG9jayhvc2IsICZvbGRfZGlyX2JoLCBvbGRfZGlyLAotCQkJCSAgICZuZXdfZGlyX2JoLCBuZXdfZGlyKTsKKwkJCQkgICAmbmV3X2Rpcl9iaCwgbmV3X2RpciwgMSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuYwppbmRleCA4ZjBhY2VmLi42OWRmNWIyIDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCisrKyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTIzOTYsMzAgKzIzOTYsMjUgQEAKIH0KIAogLyogR2VuZXJpYyByb3V0aW5lIGZvciBnZXR0aW5nIGNvbW1vbiBwYXJ0IG9mIHF1b3RhIHN0cnVjdHVyZSAqLwotc3RhdGljIHZvaWQgZG9fZ2V0X2RxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHN0cnVjdCBmc19kaXNrX3F1b3RhICpkaSkKK3N0YXRpYyB2b2lkIGRvX2dldF9kcWJsayhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBzdHJ1Y3QgcWNfZHFibGsgKmRpKQogewogCXN0cnVjdCBtZW1fZHFibGsgKmRtID0gJmRxdW90LT5kcV9kcWI7CiAKIAltZW1zZXQoZGksIDAsIHNpemVvZigqZGkpKTsKLQlkaS0+ZF92ZXJzaW9uID0gRlNfRFFVT1RfVkVSU0lPTjsKLQlkaS0+ZF9mbGFncyA9IGRxdW90LT5kcV9pZC50eXBlID09IFVTUlFVT1RBID8KLQkJCUZTX1VTRVJfUVVPVEEgOiBGU19HUk9VUF9RVU9UQTsKLQlkaS0+ZF9pZCA9IGZyb21fa3FpZF9tdW5nZWQoY3VycmVudF91c2VyX25zKCksIGRxdW90LT5kcV9pZCk7Ci0KIAlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JZGktPmRfYmxrX2hhcmRsaW1pdCA9IHN0b3FiKGRtLT5kcWJfYmhhcmRsaW1pdCk7Ci0JZGktPmRfYmxrX3NvZnRsaW1pdCA9IHN0b3FiKGRtLT5kcWJfYnNvZnRsaW1pdCk7CisJZGktPmRfc3BjX2hhcmRsaW1pdCA9IGRtLT5kcWJfYmhhcmRsaW1pdDsKKwlkaS0+ZF9zcGNfc29mdGxpbWl0ID0gZG0tPmRxYl9ic29mdGxpbWl0OwogCWRpLT5kX2lub19oYXJkbGltaXQgPSBkbS0+ZHFiX2loYXJkbGltaXQ7CiAJZGktPmRfaW5vX3NvZnRsaW1pdCA9IGRtLT5kcWJfaXNvZnRsaW1pdDsKLQlkaS0+ZF9iY291bnQgPSBkbS0+ZHFiX2N1cnNwYWNlICsgZG0tPmRxYl9yc3ZzcGFjZTsKLQlkaS0+ZF9pY291bnQgPSBkbS0+ZHFiX2N1cmlub2RlczsKLQlkaS0+ZF9idGltZXIgPSBkbS0+ZHFiX2J0aW1lOwotCWRpLT5kX2l0aW1lciA9IGRtLT5kcWJfaXRpbWU7CisJZGktPmRfc3BhY2UgPSBkbS0+ZHFiX2N1cnNwYWNlICsgZG0tPmRxYl9yc3ZzcGFjZTsKKwlkaS0+ZF9pbm9fY291bnQgPSBkbS0+ZHFiX2N1cmlub2RlczsKKwlkaS0+ZF9zcGNfdGltZXIgPSBkbS0+ZHFiX2J0aW1lOworCWRpLT5kX2lub190aW1lciA9IGRtLT5kcWJfaXRpbWU7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CiB9CiAKIGludCBkcXVvdF9nZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtxaWQgcWlkLAotCQkgICAgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKmRpKQorCQkgICAgc3RydWN0IHFjX2RxYmxrICpkaSkKIHsKIAlzdHJ1Y3QgZHF1b3QgKmRxdW90OwogCkBAIC0yNDMzLDcwICsyNDI4LDcwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X2dldF9kcWJsayk7CiAKLSNkZWZpbmUgVkZTX0ZTX0RRX01BU0sgXAotCShGU19EUV9CQ09VTlQgfCBGU19EUV9CU09GVCB8IEZTX0RRX0JIQVJEIHwgXAotCSBGU19EUV9JQ09VTlQgfCBGU19EUV9JU09GVCB8IEZTX0RRX0lIQVJEIHwgXAotCSBGU19EUV9CVElNRVIgfCBGU19EUV9JVElNRVIpCisjZGVmaW5lIFZGU19RQ19NQVNLIFwKKwkoUUNfU1BBQ0UgfCBRQ19TUENfU09GVCB8IFFDX1NQQ19IQVJEIHwgXAorCSBRQ19JTk9fQ09VTlQgfCBRQ19JTk9fU09GVCB8IFFDX0lOT19IQVJEIHwgXAorCSBRQ19TUENfVElNRVIgfCBRQ19JTk9fVElNRVIpCiAKIC8qIEdlbmVyaWMgcm91dGluZSBmb3Igc2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBzdHJ1Y3R1cmUgKi8KLXN0YXRpYyBpbnQgZG9fc2V0X2RxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHN0cnVjdCBmc19kaXNrX3F1b3RhICpkaSkKK3N0YXRpYyBpbnQgZG9fc2V0X2RxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHN0cnVjdCBxY19kcWJsayAqZGkpCiB7CiAJc3RydWN0IG1lbV9kcWJsayAqZG0gPSAmZHF1b3QtPmRxX2RxYjsKIAlpbnQgY2hlY2tfYmxpbSA9IDAsIGNoZWNrX2lsaW0gPSAwOwogCXN0cnVjdCBtZW1fZHFpbmZvICpkcWkgPSAmc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+aW5mb1tkcXVvdC0+ZHFfaWQudHlwZV07CiAKLQlpZiAoZGktPmRfZmllbGRtYXNrICYgflZGU19GU19EUV9NQVNLKQorCWlmIChkaS0+ZF9maWVsZG1hc2sgJiB+VkZTX1FDX01BU0spCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCgoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfQlNPRlQpICYmCi0JICAgICAoZGktPmRfYmxrX3NvZnRsaW1pdCA+IGRxaS0+ZHFpX21heGJsaW1pdCkpIHx8Ci0JICAgICgoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfQkhBUkQpICYmCi0JICAgICAoZGktPmRfYmxrX2hhcmRsaW1pdCA+IGRxaS0+ZHFpX21heGJsaW1pdCkpIHx8Ci0JICAgICgoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfSVNPRlQpICYmCisJaWYgKCgoZGktPmRfZmllbGRtYXNrICYgUUNfU1BDX1NPRlQpICYmCisJICAgICBzdG9xYihkaS0+ZF9zcGNfc29mdGxpbWl0KSA+IGRxaS0+ZHFpX21heGJsaW1pdCkgfHwKKwkgICAgKChkaS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfSEFSRCkgJiYKKwkgICAgIHN0b3FiKGRpLT5kX3NwY19oYXJkbGltaXQpID4gZHFpLT5kcWlfbWF4YmxpbWl0KSB8fAorCSAgICAoKGRpLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19TT0ZUKSAmJgogCSAgICAgKGRpLT5kX2lub19zb2Z0bGltaXQgPiBkcWktPmRxaV9tYXhpbGltaXQpKSB8fAotCSAgICAoKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lIQVJEKSAmJgorCSAgICAoKGRpLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19IQVJEKSAmJgogCSAgICAgKGRpLT5kX2lub19oYXJkbGltaXQgPiBkcWktPmRxaV9tYXhpbGltaXQpKSkKIAkJcmV0dXJuIC1FUkFOR0U7CiAKIAlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JaWYgKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JDT1VOVCkgewotCQlkbS0+ZHFiX2N1cnNwYWNlID0gZGktPmRfYmNvdW50IC0gZG0tPmRxYl9yc3ZzcGFjZTsKKwlpZiAoZGktPmRfZmllbGRtYXNrICYgUUNfU1BBQ0UpIHsKKwkJZG0tPmRxYl9jdXJzcGFjZSA9IGRpLT5kX3NwYWNlIC0gZG0tPmRxYl9yc3ZzcGFjZTsKIAkJY2hlY2tfYmxpbSA9IDE7CiAJCXNldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX1NQQUNFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwogCX0KIAotCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CU09GVCkKLQkJZG0tPmRxYl9ic29mdGxpbWl0ID0gcWJ0b3MoZGktPmRfYmxrX3NvZnRsaW1pdCk7Ci0JaWYgKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JIQVJEKQotCQlkbS0+ZHFiX2JoYXJkbGltaXQgPSBxYnRvcyhkaS0+ZF9ibGtfaGFyZGxpbWl0KTsKLQlpZiAoZGktPmRfZmllbGRtYXNrICYgKEZTX0RRX0JTT0ZUIHwgRlNfRFFfQkhBUkQpKSB7CisJaWYgKGRpLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19TT0ZUKQorCQlkbS0+ZHFiX2Jzb2Z0bGltaXQgPSBkaS0+ZF9zcGNfc29mdGxpbWl0OworCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfSEFSRCkKKwkJZG0tPmRxYl9iaGFyZGxpbWl0ID0gZGktPmRfc3BjX2hhcmRsaW1pdDsKKwlpZiAoZGktPmRfZmllbGRtYXNrICYgKFFDX1NQQ19TT0ZUIHwgUUNfU1BDX0hBUkQpKSB7CiAJCWNoZWNrX2JsaW0gPSAxOwogCQlzZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9CTElNSVRTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwogCX0KIAotCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JQ09VTlQpIHsKLQkJZG0tPmRxYl9jdXJpbm9kZXMgPSBkaS0+ZF9pY291bnQ7CisJaWYgKGRpLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19DT1VOVCkgeworCQlkbS0+ZHFiX2N1cmlub2RlcyA9IGRpLT5kX2lub19jb3VudDsKIAkJY2hlY2tfaWxpbSA9IDE7CiAJCXNldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0lOT0RFU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKIAl9CiAKLQlpZiAoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfSVNPRlQpCisJaWYgKGRpLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19TT0ZUKQogCQlkbS0+ZHFiX2lzb2Z0bGltaXQgPSBkaS0+ZF9pbm9fc29mdGxpbWl0OwotCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JSEFSRCkKKwlpZiAoZGktPmRfZmllbGRtYXNrICYgUUNfSU5PX0hBUkQpCiAJCWRtLT5kcWJfaWhhcmRsaW1pdCA9IGRpLT5kX2lub19oYXJkbGltaXQ7Ci0JaWYgKGRpLT5kX2ZpZWxkbWFzayAmIChGU19EUV9JU09GVCB8IEZTX0RRX0lIQVJEKSkgeworCWlmIChkaS0+ZF9maWVsZG1hc2sgJiAoUUNfSU5PX1NPRlQgfCBRQ19JTk9fSEFSRCkpIHsKIAkJY2hlY2tfaWxpbSA9IDE7CiAJCXNldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0lMSU1JVFNfQiwgJmRxdW90LT5kcV9mbGFncyk7CiAJfQogCi0JaWYgKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JUSU1FUikgewotCQlkbS0+ZHFiX2J0aW1lID0gZGktPmRfYnRpbWVyOworCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfVElNRVIpIHsKKwkJZG0tPmRxYl9idGltZSA9IGRpLT5kX3NwY190aW1lcjsKIAkJY2hlY2tfYmxpbSA9IDE7CiAJCXNldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0JUSU1FX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwogCX0KIAotCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JVElNRVIpIHsKLQkJZG0tPmRxYl9pdGltZSA9IGRpLT5kX2l0aW1lcjsKKwlpZiAoZGktPmRfZmllbGRtYXNrICYgUUNfSU5PX1RJTUVSKSB7CisJCWRtLT5kcWJfaXRpbWUgPSBkaS0+ZF9pbm9fdGltZXI7CiAJCWNoZWNrX2lsaW0gPSAxOwogCQlzZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9JVElNRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKIAl9CkBAIC0yNTA2LDcgKzI1MDEsNyBAQAogCQkgICAgZG0tPmRxYl9jdXJzcGFjZSA8IGRtLT5kcWJfYnNvZnRsaW1pdCkgewogCQkJZG0tPmRxYl9idGltZSA9IDA7CiAJCQljbGVhcl9iaXQoRFFfQkxLU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQkJfSBlbHNlIGlmICghKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JUSU1FUikpCisJCX0gZWxzZSBpZiAoIShkaS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfVElNRVIpKQogCQkJLyogU2V0IGdyYWNlIG9ubHkgaWYgdXNlciBoYXNuJ3QgcHJvdmlkZWQgaGlzIG93bi4uLiAqLwogCQkJZG0tPmRxYl9idGltZSA9IGdldF9zZWNvbmRzKCkgKyBkcWktPmRxaV9iZ3JhY2U7CiAJfQpAQCAtMjUxNSw3ICsyNTEwLDcgQEAKIAkJICAgIGRtLT5kcWJfY3VyaW5vZGVzIDwgZG0tPmRxYl9pc29mdGxpbWl0KSB7CiAJCQlkbS0+ZHFiX2l0aW1lID0gMDsKIAkJCWNsZWFyX2JpdChEUV9JTk9ERVNfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JCX0gZWxzZSBpZiAoIShkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JVElNRVIpKQorCQl9IGVsc2UgaWYgKCEoZGktPmRfZmllbGRtYXNrICYgUUNfSU5PX1RJTUVSKSkKIAkJCS8qIFNldCBncmFjZSBvbmx5IGlmIHVzZXIgaGFzbid0IHByb3ZpZGVkIGhpcyBvd24uLi4gKi8KIAkJCWRtLT5kcWJfaXRpbWUgPSBnZXRfc2Vjb25kcygpICsgZHFpLT5kcWlfaWdyYWNlOwogCX0KQEAgLTI1MzEsNyArMjUyNiw3IEBACiB9CiAKIGludCBkcXVvdF9zZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtxaWQgcWlkLAotCQkgIHN0cnVjdCBmc19kaXNrX3F1b3RhICpkaSkKKwkJICBzdHJ1Y3QgcWNfZHFibGsgKmRpKQogewogCXN0cnVjdCBkcXVvdCAqZHF1b3Q7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGEuYyBiL2ZzL3F1b3RhL3F1b3RhLmMKaW5kZXggMmFhNDE1MS4uNmYzODU2MyAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvcXVvdGEuYworKysgYi9mcy9xdW90YS9xdW90YS5jCkBAIC0xMTgsMTcgKzExOCwyNyBAQAogCXJldHVybiBzYi0+c19xY29wLT5zZXRfaW5mbyhzYiwgdHlwZSwgJmluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5X3RvX2lmX2RxYmxrKHN0cnVjdCBpZl9kcWJsayAqZHN0LCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqc3JjKQorc3RhdGljIGlubGluZSBxc2l6ZV90IHFidG9zKHFzaXplX3QgYmxvY2tzKQoreworCXJldHVybiBibG9ja3MgPDwgUUlGX0RRQkxLU0laRV9CSVRTOworfQorCitzdGF0aWMgaW5saW5lIHFzaXplX3Qgc3RvcWIocXNpemVfdCBzcGFjZSkKK3sKKwlyZXR1cm4gKHNwYWNlICsgUUlGX0RRQkxLU0laRSAtIDEpID4+IFFJRl9EUUJMS1NJWkVfQklUUzsKK30KKworc3RhdGljIHZvaWQgY29weV90b19pZl9kcWJsayhzdHJ1Y3QgaWZfZHFibGsgKmRzdCwgc3RydWN0IHFjX2RxYmxrICpzcmMpCiB7CiAJbWVtc2V0KGRzdCwgMCwgc2l6ZW9mKCpkc3QpKTsKLQlkc3QtPmRxYl9iaGFyZGxpbWl0ID0gc3JjLT5kX2Jsa19oYXJkbGltaXQ7Ci0JZHN0LT5kcWJfYnNvZnRsaW1pdCA9IHNyYy0+ZF9ibGtfc29mdGxpbWl0OwotCWRzdC0+ZHFiX2N1cnNwYWNlID0gc3JjLT5kX2Jjb3VudDsKKwlkc3QtPmRxYl9iaGFyZGxpbWl0ID0gc3RvcWIoc3JjLT5kX3NwY19oYXJkbGltaXQpOworCWRzdC0+ZHFiX2Jzb2Z0bGltaXQgPSBzdG9xYihzcmMtPmRfc3BjX3NvZnRsaW1pdCk7CisJZHN0LT5kcWJfY3Vyc3BhY2UgPSBzcmMtPmRfc3BhY2U7CiAJZHN0LT5kcWJfaWhhcmRsaW1pdCA9IHNyYy0+ZF9pbm9faGFyZGxpbWl0OwogCWRzdC0+ZHFiX2lzb2Z0bGltaXQgPSBzcmMtPmRfaW5vX3NvZnRsaW1pdDsKLQlkc3QtPmRxYl9jdXJpbm9kZXMgPSBzcmMtPmRfaWNvdW50OwotCWRzdC0+ZHFiX2J0aW1lID0gc3JjLT5kX2J0aW1lcjsKLQlkc3QtPmRxYl9pdGltZSA9IHNyYy0+ZF9pdGltZXI7CisJZHN0LT5kcWJfY3VyaW5vZGVzID0gc3JjLT5kX2lub19jb3VudDsKKwlkc3QtPmRxYl9idGltZSA9IHNyYy0+ZF9zcGNfdGltZXI7CisJZHN0LT5kcWJfaXRpbWUgPSBzcmMtPmRfaW5vX3RpbWVyOwogCWRzdC0+ZHFiX3ZhbGlkID0gUUlGX0FMTDsKIH0KIApAQCAtMTM2LDcgKzE0Niw3IEBACiAJCQkgIHZvaWQgX191c2VyICphZGRyKQogewogCXN0cnVjdCBrcWlkIHFpZDsKLQlzdHJ1Y3QgZnNfZGlza19xdW90YSBmZHE7CisJc3RydWN0IHFjX2RxYmxrIGZkcTsKIAlzdHJ1Y3QgaWZfZHFibGsgaWRxOwogCWludCByZXQ7CiAKQEAgLTE1NCwzNiArMTY0LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcHlfZnJvbV9pZl9kcWJsayhzdHJ1Y3QgZnNfZGlza19xdW90YSAqZHN0LCBzdHJ1Y3QgaWZfZHFibGsgKnNyYykKK3N0YXRpYyB2b2lkIGNvcHlfZnJvbV9pZl9kcWJsayhzdHJ1Y3QgcWNfZHFibGsgKmRzdCwgc3RydWN0IGlmX2RxYmxrICpzcmMpCiB7Ci0JZHN0LT5kX2Jsa19oYXJkbGltaXQgPSBzcmMtPmRxYl9iaGFyZGxpbWl0OwotCWRzdC0+ZF9ibGtfc29mdGxpbWl0ICA9IHNyYy0+ZHFiX2Jzb2Z0bGltaXQ7Ci0JZHN0LT5kX2Jjb3VudCA9IHNyYy0+ZHFiX2N1cnNwYWNlOworCWRzdC0+ZF9zcGNfaGFyZGxpbWl0ID0gcWJ0b3Moc3JjLT5kcWJfYmhhcmRsaW1pdCk7CisJZHN0LT5kX3NwY19zb2Z0bGltaXQgPSBxYnRvcyhzcmMtPmRxYl9ic29mdGxpbWl0KTsKKwlkc3QtPmRfc3BhY2UgPSBzcmMtPmRxYl9jdXJzcGFjZTsKIAlkc3QtPmRfaW5vX2hhcmRsaW1pdCA9IHNyYy0+ZHFiX2loYXJkbGltaXQ7CiAJZHN0LT5kX2lub19zb2Z0bGltaXQgPSBzcmMtPmRxYl9pc29mdGxpbWl0OwotCWRzdC0+ZF9pY291bnQgPSBzcmMtPmRxYl9jdXJpbm9kZXM7Ci0JZHN0LT5kX2J0aW1lciA9IHNyYy0+ZHFiX2J0aW1lOwotCWRzdC0+ZF9pdGltZXIgPSBzcmMtPmRxYl9pdGltZTsKKwlkc3QtPmRfaW5vX2NvdW50ID0gc3JjLT5kcWJfY3VyaW5vZGVzOworCWRzdC0+ZF9zcGNfdGltZXIgPSBzcmMtPmRxYl9idGltZTsKKwlkc3QtPmRfaW5vX3RpbWVyID0gc3JjLT5kcWJfaXRpbWU7CiAKIAlkc3QtPmRfZmllbGRtYXNrID0gMDsKIAlpZiAoc3JjLT5kcWJfdmFsaWQgJiBRSUZfQkxJTUlUUykKLQkJZHN0LT5kX2ZpZWxkbWFzayB8PSBGU19EUV9CU09GVCB8IEZTX0RRX0JIQVJEOworCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1NQQ19TT0ZUIHwgUUNfU1BDX0hBUkQ7CiAJaWYgKHNyYy0+ZHFiX3ZhbGlkICYgUUlGX1NQQUNFKQotCQlkc3QtPmRfZmllbGRtYXNrIHw9IEZTX0RRX0JDT1VOVDsKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19TUEFDRTsKIAlpZiAoc3JjLT5kcWJfdmFsaWQgJiBRSUZfSUxJTUlUUykKLQkJZHN0LT5kX2ZpZWxkbWFzayB8PSBGU19EUV9JU09GVCB8IEZTX0RRX0lIQVJEOworCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX0lOT19TT0ZUIHwgUUNfSU5PX0hBUkQ7CiAJaWYgKHNyYy0+ZHFiX3ZhbGlkICYgUUlGX0lOT0RFUykKLQkJZHN0LT5kX2ZpZWxkbWFzayB8PSBGU19EUV9JQ09VTlQ7CisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfSU5PX0NPVU5UOwogCWlmIChzcmMtPmRxYl92YWxpZCAmIFFJRl9CVElNRSkKLQkJZHN0LT5kX2ZpZWxkbWFzayB8PSBGU19EUV9CVElNRVI7CisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfU1BDX1RJTUVSOwogCWlmIChzcmMtPmRxYl92YWxpZCAmIFFJRl9JVElNRSkKLQkJZHN0LT5kX2ZpZWxkbWFzayB8PSBGU19EUV9JVElNRVI7CisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfSU5PX1RJTUVSOwogfQogCiBzdGF0aWMgaW50IHF1b3RhX3NldHF1b3RhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBxaWRfdCBpZCwKIAkJCSAgdm9pZCBfX3VzZXIgKmFkZHIpCiB7Ci0Jc3RydWN0IGZzX2Rpc2tfcXVvdGEgZmRxOworCXN0cnVjdCBxY19kcWJsayBmZHE7CiAJc3RydWN0IGlmX2RxYmxrIGlkcTsKIAlzdHJ1Y3Qga3FpZCBxaWQ7CiAKQEAgLTI0NywxMCArMjU3LDc4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIFhGUyBkZWZpbmVzIEJCVE9CIGFuZCBCVE9CQiBtYWNyb3MgaW5zaWRlIGZzL3hmcy8gYW5kIHdlIGNhbm5vdCBtb3ZlIHRoZW0KKyAqIG91dCBvZiB0aGVyZSBhcyB4ZnNwcm9ncyByZWx5IG9uIGRlZmluaXRpb25zIGJlaW5nIGluIHRoYXQgaGVhZGVyIGZpbGUuIFNvCisgKiBqdXN0IGRlZmluZSBzYW1lIGZ1bmN0aW9ucyBoZXJlIGZvciBxdW90YSBwdXJwb3Nlcy4KKyAqLworI2RlZmluZSBYRlNfQkJfU0hJRlQgOQorCitzdGF0aWMgaW5saW5lIHU2NCBxdW90YV9iYnRvYih1NjQgYmxvY2tzKQoreworCXJldHVybiBibG9ja3MgPDwgWEZTX0JCX1NISUZUOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBxdW90YV9idG9iYih1NjQgYnl0ZXMpCit7CisJcmV0dXJuIChieXRlcyArICgxIDw8IFhGU19CQl9TSElGVCkgLSAxKSA+PiBYRlNfQkJfU0hJRlQ7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfZnJvbV94ZnNfZHFibGsoc3RydWN0IHFjX2RxYmxrICpkc3QsIHN0cnVjdCBmc19kaXNrX3F1b3RhICpzcmMpCit7CisJZHN0LT5kX3NwY19oYXJkbGltaXQgPSBxdW90YV9iYnRvYihzcmMtPmRfYmxrX2hhcmRsaW1pdCk7CisJZHN0LT5kX3NwY19zb2Z0bGltaXQgPSBxdW90YV9iYnRvYihzcmMtPmRfYmxrX3NvZnRsaW1pdCk7CisJZHN0LT5kX2lub19oYXJkbGltaXQgPSBzcmMtPmRfaW5vX2hhcmRsaW1pdDsKKwlkc3QtPmRfaW5vX3NvZnRsaW1pdCA9IHNyYy0+ZF9pbm9fc29mdGxpbWl0OworCWRzdC0+ZF9zcGFjZSA9IHF1b3RhX2JidG9iKHNyYy0+ZF9iY291bnQpOworCWRzdC0+ZF9pbm9fY291bnQgPSBzcmMtPmRfaWNvdW50OworCWRzdC0+ZF9pbm9fdGltZXIgPSBzcmMtPmRfaXRpbWVyOworCWRzdC0+ZF9zcGNfdGltZXIgPSBzcmMtPmRfYnRpbWVyOworCWRzdC0+ZF9pbm9fd2FybnMgPSBzcmMtPmRfaXdhcm5zOworCWRzdC0+ZF9zcGNfd2FybnMgPSBzcmMtPmRfYndhcm5zOworCWRzdC0+ZF9ydF9zcGNfaGFyZGxpbWl0ID0gcXVvdGFfYmJ0b2Ioc3JjLT5kX3J0Yl9oYXJkbGltaXQpOworCWRzdC0+ZF9ydF9zcGNfc29mdGxpbWl0ID0gcXVvdGFfYmJ0b2Ioc3JjLT5kX3J0Yl9zb2Z0bGltaXQpOworCWRzdC0+ZF9ydF9zcGFjZSA9IHF1b3RhX2JidG9iKHNyYy0+ZF9ydGJjb3VudCk7CisJZHN0LT5kX3J0X3NwY190aW1lciA9IHNyYy0+ZF9ydGJ0aW1lcjsKKwlkc3QtPmRfcnRfc3BjX3dhcm5zID0gc3JjLT5kX3J0Yndhcm5zOworCWRzdC0+ZF9maWVsZG1hc2sgPSAwOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfSVNPRlQpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfSU5PX1NPRlQ7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9JSEFSRCkKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19JTk9fSEFSRDsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JTT0ZUKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1NQQ19TT0ZUOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfQkhBUkQpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfU1BDX0hBUkQ7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJTT0ZUKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1JUX1NQQ19TT0ZUOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfUlRCSEFSRCkKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19SVF9TUENfSEFSRDsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JUSU1FUikKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19TUENfVElNRVI7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9JVElNRVIpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfSU5PX1RJTUVSOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfUlRCVElNRVIpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfUlRfU1BDX1RJTUVSOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfQldBUk5TKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1NQQ19XQVJOUzsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lXQVJOUykKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19JTk9fV0FSTlM7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJXQVJOUykKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19SVF9TUENfV0FSTlM7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9CQ09VTlQpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfU1BBQ0U7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9JQ09VTlQpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfSU5PX0NPVU5UOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfUlRCQ09VTlQpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfUlRfU1BBQ0U7Cit9CisKIHN0YXRpYyBpbnQgcXVvdGFfc2V0eHF1b3RhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBxaWRfdCBpZCwKIAkJCSAgIHZvaWQgX191c2VyICphZGRyKQogewogCXN0cnVjdCBmc19kaXNrX3F1b3RhIGZkcTsKKwlzdHJ1Y3QgcWNfZHFibGsgcWRxOwogCXN0cnVjdCBrcWlkIHFpZDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmZmRxLCBhZGRyLCBzaXplb2YoZmRxKSkpCkBAIC0yNjAsMTMgKzMzOCw0NCBAQAogCXFpZCA9IG1ha2Vfa3FpZChjdXJyZW50X3VzZXJfbnMoKSwgdHlwZSwgaWQpOwogCWlmICghcWlkX3ZhbGlkKHFpZCkpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBzYi0+c19xY29wLT5zZXRfZHFibGsoc2IsIHFpZCwgJmZkcSk7CisJY29weV9mcm9tX3hmc19kcWJsaygmcWRxLCAmZmRxKTsKKwlyZXR1cm4gc2ItPnNfcWNvcC0+c2V0X2RxYmxrKHNiLCBxaWQsICZxZHEpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3RvX3hmc19kcWJsayhzdHJ1Y3QgZnNfZGlza19xdW90YSAqZHN0LCBzdHJ1Y3QgcWNfZHFibGsgKnNyYywKKwkJCSAgICAgIGludCB0eXBlLCBxaWRfdCBpZCkKK3sKKwltZW1zZXQoZHN0LCAwLCBzaXplb2YoKmRzdCkpOworCWRzdC0+ZF92ZXJzaW9uID0gRlNfRFFVT1RfVkVSU0lPTjsKKwlkc3QtPmRfaWQgPSBpZDsKKwlpZiAodHlwZSA9PSBVU1JRVU9UQSkKKwkJZHN0LT5kX2ZsYWdzID0gRlNfVVNFUl9RVU9UQTsKKwllbHNlIGlmICh0eXBlID09IFBSSlFVT1RBKQorCQlkc3QtPmRfZmxhZ3MgPSBGU19QUk9KX1FVT1RBOworCWVsc2UKKwkJZHN0LT5kX2ZsYWdzID0gRlNfR1JPVVBfUVVPVEE7CisJZHN0LT5kX2Jsa19oYXJkbGltaXQgPSBxdW90YV9idG9iYihzcmMtPmRfc3BjX2hhcmRsaW1pdCk7CisJZHN0LT5kX2Jsa19zb2Z0bGltaXQgPSBxdW90YV9idG9iYihzcmMtPmRfc3BjX3NvZnRsaW1pdCk7CisJZHN0LT5kX2lub19oYXJkbGltaXQgPSBzcmMtPmRfaW5vX2hhcmRsaW1pdDsKKwlkc3QtPmRfaW5vX3NvZnRsaW1pdCA9IHNyYy0+ZF9pbm9fc29mdGxpbWl0OworCWRzdC0+ZF9iY291bnQgPSBxdW90YV9idG9iYihzcmMtPmRfc3BhY2UpOworCWRzdC0+ZF9pY291bnQgPSBzcmMtPmRfaW5vX2NvdW50OworCWRzdC0+ZF9pdGltZXIgPSBzcmMtPmRfaW5vX3RpbWVyOworCWRzdC0+ZF9idGltZXIgPSBzcmMtPmRfc3BjX3RpbWVyOworCWRzdC0+ZF9pd2FybnMgPSBzcmMtPmRfaW5vX3dhcm5zOworCWRzdC0+ZF9id2FybnMgPSBzcmMtPmRfc3BjX3dhcm5zOworCWRzdC0+ZF9ydGJfaGFyZGxpbWl0ID0gcXVvdGFfYnRvYmIoc3JjLT5kX3J0X3NwY19oYXJkbGltaXQpOworCWRzdC0+ZF9ydGJfc29mdGxpbWl0ID0gcXVvdGFfYnRvYmIoc3JjLT5kX3J0X3NwY19zb2Z0bGltaXQpOworCWRzdC0+ZF9ydGJjb3VudCA9IHF1b3RhX2J0b2JiKHNyYy0+ZF9ydF9zcGFjZSk7CisJZHN0LT5kX3J0YnRpbWVyID0gc3JjLT5kX3J0X3NwY190aW1lcjsKKwlkc3QtPmRfcnRid2FybnMgPSBzcmMtPmRfcnRfc3BjX3dhcm5zOwogfQogCiBzdGF0aWMgaW50IHF1b3RhX2dldHhxdW90YShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsCiAJCQkgICB2b2lkIF9fdXNlciAqYWRkcikKIHsKIAlzdHJ1Y3QgZnNfZGlza19xdW90YSBmZHE7CisJc3RydWN0IHFjX2RxYmxrIHFkcTsKIAlzdHJ1Y3Qga3FpZCBxaWQ7CiAJaW50IHJldDsKIApAQCAtMjc1LDggKzM4NCwxMSBAQAogCXFpZCA9IG1ha2Vfa3FpZChjdXJyZW50X3VzZXJfbnMoKSwgdHlwZSwgaWQpOwogCWlmICghcWlkX3ZhbGlkKHFpZCkpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldCA9IHNiLT5zX3Fjb3AtPmdldF9kcWJsayhzYiwgcWlkLCAmZmRxKTsKLQlpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIoYWRkciwgJmZkcSwgc2l6ZW9mKGZkcSkpKQorCXJldCA9IHNiLT5zX3Fjb3AtPmdldF9kcWJsayhzYiwgcWlkLCAmcWRxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWNvcHlfdG9feGZzX2RxYmxrKCZmZHEsICZxZHEsIHR5cGUsIGlkKTsKKwlpZiAoY29weV90b191c2VyKGFkZHIsICZmZHEsIHNpemVvZihmZHEpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3VkZi9kaXIuYyBiL2ZzL3VkZi9kaXIuYwppbmRleCBhMDEyYzUxLi4wNWU5MGVkIDEwMDY0NAotLS0gYS9mcy91ZGYvZGlyLmMKKysrIGIvZnMvdWRmL2Rpci5jCkBAIC01Nyw2ICs1Nyw3IEBACiAJc2VjdG9yX3Qgb2Zmc2V0OwogCWludCBpLCBudW0sIHJldCA9IDA7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0geyBOVUxMLCAwLCB7MCwgMH0gfTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwogCiAJaWYgKGN0eC0+cG9zID09IDApIHsKIAkJaWYgKCFkaXJfZW1pdF9kb3QoZmlsZSwgY3R4KSkKQEAgLTc2LDE2ICs3NywxNiBAQAogCWlmIChuZl9wb3MgPT0gMCkKIAkJbmZfcG9zID0gdWRmX2V4dDBfb2Zmc2V0KGRpcik7CiAKLQlmaWJoLnNvZmZzZXQgPSBmaWJoLmVvZmZzZXQgPSBuZl9wb3MgJiAoZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpOworCWZpYmguc29mZnNldCA9IGZpYmguZW9mZnNldCA9IG5mX3BvcyAmIChzYi0+c19ibG9ja3NpemUgLSAxKTsKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSAhPSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IpIHsKLQkJaWYgKGlub2RlX2JtYXAoZGlyLCBuZl9wb3MgPj4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzLAorCQlpZiAoaW5vZGVfYm1hcChkaXIsIG5mX3BvcyA+PiBzYi0+c19ibG9ja3NpemVfYml0cywKIAkJICAgICZlcG9zLCAmZWxvYywgJmVsZW4sICZvZmZzZXQpCiAJCSAgICAhPSAoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpIHsKIAkJCXJldCA9IC1FTk9FTlQ7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJmVsb2MsIG9mZnNldCk7Ci0JCWlmICgoKytvZmZzZXQgPDwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA8IGVsZW4pIHsKKwkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgJmVsb2MsIG9mZnNldCk7CisJCWlmICgoKytvZmZzZXQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHMpIDwgZWxlbikgewogCQkJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCiAJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJCQllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09CkBAIC05NSwxOCArOTYsMTggQEAKIAkJCW9mZnNldCA9IDA7CiAJCX0KIAotCQlpZiAoIShmaWJoLnNiaCA9IGZpYmguZWJoID0gdWRmX3RyZWFkKGRpci0+aV9zYiwgYmxvY2spKSkgeworCQlpZiAoIShmaWJoLnNiaCA9IGZpYmguZWJoID0gdWRmX3RyZWFkKHNiLCBibG9jaykpKSB7CiAJCQlyZXQgPSAtRUlPOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlpZiAoIShvZmZzZXQgJiAoKDE2ID4+IChkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMgLSA5KSkgLSAxKSkpIHsKLQkJCWkgPSAxNiA+PiAoZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSk7Ci0JCQlpZiAoaSArIG9mZnNldCA+IChlbGVuID4+IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cykpCi0JCQkJaSA9IChlbGVuID4+IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgLSBvZmZzZXQ7CisJCWlmICghKG9mZnNldCAmICgoMTYgPj4gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSkpIC0gMSkpKSB7CisJCQlpID0gMTYgPj4gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSk7CisJCQlpZiAoaSArIG9mZnNldCA+IChlbGVuID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSkKKwkJCQlpID0gKGVsZW4gPj4gc2ItPnNfYmxvY2tzaXplX2JpdHMpIC0gb2Zmc2V0OwogCQkJZm9yIChudW0gPSAwOyBpID4gMDsgaS0tKSB7Ci0JCQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsICZlbG9jLCBvZmZzZXQgKyBpKTsKLQkJCQl0bXAgPSB1ZGZfdGdldGJsayhkaXItPmlfc2IsIGJsb2NrKTsKKwkJCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCAmZWxvYywgb2Zmc2V0ICsgaSk7CisJCQkJdG1wID0gdWRmX3RnZXRibGsoc2IsIGJsb2NrKTsKIAkJCQlpZiAodG1wICYmICFidWZmZXJfdXB0b2RhdGUodG1wKSAmJiAhYnVmZmVyX2xvY2tlZCh0bXApKQogCQkJCQliaGFbbnVtKytdID0gdG1wOwogCQkJCWVsc2UKQEAgLTE1MiwxMiArMTUzLDEyIEBACiAJCX0KIAogCQlpZiAoKGNmaS5maWxlQ2hhcmFjdGVyaXN0aWNzICYgRklEX0ZJTEVfQ0hBUl9ERUxFVEVEKSAhPSAwKSB7Ci0JCQlpZiAoIVVERl9RVUVSWV9GTEFHKGRpci0+aV9zYiwgVURGX0ZMQUdfVU5ERUxFVEUpKQorCQkJaWYgKCFVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfVU5ERUxFVEUpKQogCQkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKChjZmkuZmlsZUNoYXJhY3RlcmlzdGljcyAmIEZJRF9GSUxFX0NIQVJfSElEREVOKSAhPSAwKSB7Ci0JCQlpZiAoIVVERl9RVUVSWV9GTEFHKGRpci0+aV9zYiwgVURGX0ZMQUdfVU5ISURFKSkKKwkJCWlmICghVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX1VOSElERSkpCiAJCQkJY29udGludWU7CiAJCX0KIApAQCAtMTY3LDEyICsxNjgsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJZmxlbiA9IHVkZl9nZXRfZmlsZW5hbWUoZGlyLT5pX3NiLCBuYW1lcHRyLCBmbmFtZSwgbGZpKTsKKwkJZmxlbiA9IHVkZl9nZXRfZmlsZW5hbWUoc2IsIG5hbWVwdHIsIGxmaSwgZm5hbWUsIFVERl9OQU1FX0xFTik7CiAJCWlmICghZmxlbikKIAkJCWNvbnRpbnVlOwogCiAJCXRsb2MgPSBsZWxiX3RvX2NwdShjZmkuaWNiLmV4dExvY2F0aW9uKTsKLQkJaWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAmdGxvYywgMCk7CisJCWlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCAmdGxvYywgMCk7CiAJCWlmICghZGlyX2VtaXQoY3R4LCBmbmFtZSwgZmxlbiwgaWJsb2NrLCBEVF9VTktOT1dOKSkKIAkJCWdvdG8gb3V0OwogCX0gLyogZW5kIHdoaWxlICovCmRpZmYgLS1naXQgYS9mcy91ZGYvZmlsZS5jIGIvZnMvdWRmL2ZpbGUuYwppbmRleCBiYjE1NzcxLi4wOGYzNTU1IDEwMDY0NAotLS0gYS9mcy91ZGYvZmlsZS5jCisrKyBiL2ZzL3VkZi9maWxlLmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogc3RhdGljIGludCB1ZGZfcmVsZWFzZV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSAmJgotCSAgICBhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkgPiAxKSB7CisJICAgIGF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50KSA9PSAxKSB7CiAJCS8qCiAJCSAqIEdyYWIgaV9tdXRleCB0byBhdm9pZCByYWNlcyB3aXRoIHdyaXRlcyBjaGFuZ2luZyBpX3NpemUKIAkJICogd2hpbGUgd2UgYXJlIHJ1bm5pbmcuCmRpZmYgLS1naXQgYS9mcy91ZGYvaW5vZGUuYyBiL2ZzL3VkZi9pbm9kZS5jCmluZGV4IGM5YjRkZjUuLjViYzcxZDkgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9pbm9kZS5jCisrKyBiL2ZzL3VkZi9pbm9kZS5jCkBAIC0xNDg5LDYgKzE0ODksMjAgQEAKIAl9CiAJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IGlpbmZvLT5pX3VuaXF1ZTsKIAorCS8qIFNhbml0eSBjaGVja3MgZm9yIGZpbGVzIGluIElDQiBzbyB0aGF0IHdlIGRvbid0IGdldCBjb25mdXNlZCBsYXRlciAqLworCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0lOX0lDQikgeworCQkvKgorCQkgKiBGb3IgZmlsZSBpbiBJQ0IgZGF0YSBpcyBzdG9yZWQgaW4gYWxsb2NhdGlvbiBkZXNjcmlwdG9yCisJCSAqIHNvIHNpemVzIHNob3VsZCBtYXRjaAorCQkgKi8KKwkJaWYgKGlpbmZvLT5pX2xlbkFsbG9jICE9IGlub2RlLT5pX3NpemUpCisJCQlnb3RvIG91dDsKKwkJLyogRmlsZSBpbiBJQ0IgaGFzIHRvIGZpdCBpbiB0aGVyZS4uLiAqLworCQlpZiAoaW5vZGUtPmlfc2l6ZSA+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtCisJCQkJCXVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSkpCisJCQlnb3RvIG91dDsKKwl9CisKIAlzd2l0Y2ggKGZlLT5pY2JUYWcuZmlsZVR5cGUpIHsKIAljYXNlIElDQlRBR19GSUxFX1RZUEVfRElSRUNUT1JZOgogCQlpbm9kZS0+aV9vcCA9ICZ1ZGZfZGlyX2lub2RlX29wZXJhdGlvbnM7CmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jCmluZGV4IGMxMmUyNjAuLjMzYjI0NmIgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9uYW1laS5jCisrKyBiL2ZzL3VkZi9uYW1laS5jCkBAIC0xNTksMTggKzE1OSwxOSBAQAogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqZGluZm8gPSBVREZfSShkaXIpOwogCWludCBpc2RvdGRvdCA9IGNoaWxkLT5sZW4gPT0gMiAmJgogCQljaGlsZC0+bmFtZVswXSA9PSAnLicgJiYgY2hpbGQtPm5hbWVbMV0gPT0gJy4nOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7CiAKIAlzaXplID0gdWRmX2V4dDBfb2Zmc2V0KGRpcikgKyBkaXItPmlfc2l6ZTsKIAlmX3BvcyA9IHVkZl9leHQwX29mZnNldChkaXIpOwogCiAJZmliaC0+c2JoID0gZmliaC0+ZWJoID0gTlVMTDsKLQlmaWJoLT5zb2Zmc2V0ID0gZmliaC0+ZW9mZnNldCA9IGZfcG9zICYgKGRpci0+aV9zYi0+c19ibG9ja3NpemUgLSAxKTsKKwlmaWJoLT5zb2Zmc2V0ID0gZmliaC0+ZW9mZnNldCA9IGZfcG9zICYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpOwogCWlmIChkaW5mby0+aV9hbGxvY190eXBlICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQikgewotCQlpZiAoaW5vZGVfYm1hcChkaXIsIGZfcG9zID4+IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cywgJmVwb3MsCisJCWlmIChpbm9kZV9ibWFwKGRpciwgZl9wb3MgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHMsICZlcG9zLAogCQkgICAgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KSAhPSAoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCiAJCQlnb3RvIG91dF9lcnI7Ci0JCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAmZWxvYywgb2Zmc2V0KTsKLQkJaWYgKCgrK29mZnNldCA8PCBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpIDwgZWxlbikgeworCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCAmZWxvYywgb2Zmc2V0KTsKKwkJaWYgKCgrK29mZnNldCA8PCBzYi0+c19ibG9ja3NpemVfYml0cykgPCBlbGVuKSB7CiAJCQlpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKIAkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAkJCWVsc2UgaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKQEAgLTE3OCw3ICsxNzksNyBAQAogCQl9IGVsc2UKIAkJCW9mZnNldCA9IDA7CiAKLQkJZmliaC0+c2JoID0gZmliaC0+ZWJoID0gdWRmX3RyZWFkKGRpci0+aV9zYiwgYmxvY2spOworCQlmaWJoLT5zYmggPSBmaWJoLT5lYmggPSB1ZGZfdHJlYWQoc2IsIGJsb2NrKTsKIAkJaWYgKCFmaWJoLT5zYmgpCiAJCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMjE3LDEyICsyMTgsMTIgQEAKIAkJfQogCiAJCWlmICgoY2ZpLT5maWxlQ2hhcmFjdGVyaXN0aWNzICYgRklEX0ZJTEVfQ0hBUl9ERUxFVEVEKSAhPSAwKSB7Ci0JCQlpZiAoIVVERl9RVUVSWV9GTEFHKGRpci0+aV9zYiwgVURGX0ZMQUdfVU5ERUxFVEUpKQorCQkJaWYgKCFVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfVU5ERUxFVEUpKQogCQkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKChjZmktPmZpbGVDaGFyYWN0ZXJpc3RpY3MgJiBGSURfRklMRV9DSEFSX0hJRERFTikgIT0gMCkgewotCQkJaWYgKCFVREZfUVVFUllfRkxBRyhkaXItPmlfc2IsIFVERl9GTEFHX1VOSElERSkpCisJCQlpZiAoIVVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19VTkhJREUpKQogCQkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTIzMyw3ICsyMzQsNyBAQAogCQlpZiAoIWxmaSkKIAkJCWNvbnRpbnVlOwogCi0JCWZsZW4gPSB1ZGZfZ2V0X2ZpbGVuYW1lKGRpci0+aV9zYiwgbmFtZXB0ciwgZm5hbWUsIGxmaSk7CisJCWZsZW4gPSB1ZGZfZ2V0X2ZpbGVuYW1lKHNiLCBuYW1lcHRyLCBsZmksIGZuYW1lLCBVREZfTkFNRV9MRU4pOwogCQlpZiAoZmxlbiAmJiB1ZGZfbWF0Y2goZmxlbiwgZm5hbWUsIGNoaWxkLT5sZW4sIGNoaWxkLT5uYW1lKSkKIAkJCWdvdG8gb3V0X29rOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3VkZi9zeW1saW5rLmMgYi9mcy91ZGYvc3ltbGluay5jCmluZGV4IDZmYjc5NDUuLmFjMTBjYTkgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9zeW1saW5rLmMKKysrIGIvZnMvdWRmL3N5bWxpbmsuYwpAQCAtMzAsNDkgKzMwLDczIEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlICJ1ZGZfaS5oIgogCi1zdGF0aWMgdm9pZCB1ZGZfcGNfdG9fY2hhcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBjaGFyICpmcm9tLAotCQkJICAgaW50IGZyb21sZW4sIHVuc2lnbmVkIGNoYXIgKnRvKQorc3RhdGljIGludCB1ZGZfcGNfdG9fY2hhcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBjaGFyICpmcm9tLAorCQkJICBpbnQgZnJvbWxlbiwgdW5zaWduZWQgY2hhciAqdG8sIGludCB0b2xlbikKIHsKIAlzdHJ1Y3QgcGF0aENvbXBvbmVudCAqcGM7CiAJaW50IGVsZW4gPSAwOworCWludCBjb21wX2xlbjsKIAl1bnNpZ25lZCBjaGFyICpwID0gdG87CiAKKwkvKiBSZXNlcnZlIG9uZSBieXRlIGZvciB0ZXJtaW5hdGluZyBcMCAqLworCXRvbGVuLS07CiAJd2hpbGUgKGVsZW4gPCBmcm9tbGVuKSB7CiAJCXBjID0gKHN0cnVjdCBwYXRoQ29tcG9uZW50ICopKGZyb20gKyBlbGVuKTsKKwkJZWxlbiArPSBzaXplb2Yoc3RydWN0IHBhdGhDb21wb25lbnQpOwogCQlzd2l0Y2ggKHBjLT5jb21wb25lbnRUeXBlKSB7CiAJCWNhc2UgMToKIAkJCS8qCiAJCQkgKiBTeW1saW5rIHBvaW50cyB0byBzb21lIHBsYWNlIHdoaWNoIHNob3VsZCBiZSBhZ3JlZWQKICAJCQkgKiB1cG9uIGJldHdlZW4gb3JpZ2luYXRvciBhbmQgcmVjZWl2ZXIgb2YgdGhlIG1lZGlhLiBJZ25vcmUuCiAJCQkgKi8KLQkJCWlmIChwYy0+bGVuZ3RoQ29tcG9uZW50SWRlbnQgPiAwKQorCQkJaWYgKHBjLT5sZW5ndGhDb21wb25lbnRJZGVudCA+IDApIHsKKwkJCQllbGVuICs9IHBjLT5sZW5ndGhDb21wb25lbnRJZGVudDsKIAkJCQlicmVhazsKKwkJCX0KIAkJCS8qIEZhbGwgdGhyb3VnaCAqLwogCQljYXNlIDI6CisJCQlpZiAodG9sZW4gPT0gMCkKKwkJCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAkJCXAgPSB0bzsKIAkJCSpwKysgPSAnLyc7CisJCQl0b2xlbi0tOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKKwkJCWlmICh0b2xlbiA8IDMpCisJCQkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAJCQltZW1jcHkocCwgIi4uLyIsIDMpOwogCQkJcCArPSAzOworCQkJdG9sZW4gLT0gMzsKIAkJCWJyZWFrOwogCQljYXNlIDQ6CisJCQlpZiAodG9sZW4gPCAyKQorCQkJCXJldHVybiAtRU5BTUVUT09MT05HOwogCQkJbWVtY3B5KHAsICIuLyIsIDIpOwogCQkJcCArPSAyOworCQkJdG9sZW4gLT0gMjsKIAkJCS8qIHRoYXQgd291bGQgYmUgLiAtIGp1c3QgaWdub3JlICovCiAJCQlicmVhazsKIAkJY2FzZSA1OgotCQkJcCArPSB1ZGZfZ2V0X2ZpbGVuYW1lKHNiLCBwYy0+Y29tcG9uZW50SWRlbnQsIHAsCi0JCQkJCSAgICAgIHBjLT5sZW5ndGhDb21wb25lbnRJZGVudCk7CisJCQllbGVuICs9IHBjLT5sZW5ndGhDb21wb25lbnRJZGVudDsKKwkJCWlmIChlbGVuID4gZnJvbWxlbikKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWNvbXBfbGVuID0gdWRmX2dldF9maWxlbmFtZShzYiwgcGMtPmNvbXBvbmVudElkZW50LAorCQkJCQkJICAgIHBjLT5sZW5ndGhDb21wb25lbnRJZGVudCwKKwkJCQkJCSAgICBwLCB0b2xlbik7CisJCQlwICs9IGNvbXBfbGVuOworCQkJdG9sZW4gLT0gY29tcF9sZW47CisJCQlpZiAodG9sZW4gPT0gMCkKKwkJCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAkJCSpwKysgPSAnLyc7CisJCQl0b2xlbi0tOwogCQkJYnJlYWs7CiAJCX0KLQkJZWxlbiArPSBzaXplb2Yoc3RydWN0IHBhdGhDb21wb25lbnQpICsgcGMtPmxlbmd0aENvbXBvbmVudElkZW50OwogCX0KIAlpZiAocCA+IHRvICsgMSkKIAkJcFstMV0gPSAnXDAnOwogCWVsc2UKIAkJcFswXSA9ICdcMCc7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdWRmX3N5bWxpbmtfZmlsbGVyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTgwLDExICsxMDQsMTcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAl1bnNpZ25lZCBjaGFyICpzeW1saW5rOwotCWludCBlcnIgPSAtRUlPOworCWludCBlcnI7CiAJdW5zaWduZWQgY2hhciAqcCA9IGttYXAocGFnZSk7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbzsKIAl1aW50MzJfdCBwb3M7CiAKKwkvKiBXZSBkb24ndCBzdXBwb3J0IHN5bWxpbmtzIGxvbmdlciB0aGFuIG9uZSBibG9jayAqLworCWlmIChpbm9kZS0+aV9zaXplID4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKSB7CisJCWVyciA9IC1FTkFNRVRPT0xPTkc7CisJCWdvdG8gb3V0X3VubWFwOworCX0KKwogCWlpbmZvID0gVURGX0koaW5vZGUpOwogCXBvcyA9IHVkZl9ibG9ja19tYXAoaW5vZGUsIDApOwogCkBAIC05NCwxNCArMTI0LDE4IEBACiAJfSBlbHNlIHsKIAkJYmggPSBzYl9icmVhZChpbm9kZS0+aV9zYiwgcG9zKTsKIAotCQlpZiAoIWJoKQotCQkJZ290byBvdXQ7CisJCWlmICghYmgpIHsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIG91dF91bmxvY2tfaW5vZGU7CisJCX0KIAogCQlzeW1saW5rID0gYmgtPmJfZGF0YTsKIAl9CiAKLQl1ZGZfcGNfdG9fY2hhcihpbm9kZS0+aV9zYiwgc3ltbGluaywgaW5vZGUtPmlfc2l6ZSwgcCk7CisJZXJyID0gdWRmX3BjX3RvX2NoYXIoaW5vZGUtPmlfc2IsIHN5bWxpbmssIGlub2RlLT5pX3NpemUsIHAsIFBBR0VfU0laRSk7CiAJYnJlbHNlKGJoKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bmxvY2tfaW5vZGU7CiAKIAl1cF9yZWFkKCZpaW5mby0+aV9kYXRhX3NlbSk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwpAQCAtMTA5LDkgKzE0MywxMCBAQAogCXVubG9ja19wYWdlKHBhZ2UpOwogCXJldHVybiAwOwogCi1vdXQ6CitvdXRfdW5sb2NrX2lub2RlOgogCXVwX3JlYWQoJmlpbmZvLT5pX2RhdGFfc2VtKTsKIAlTZXRQYWdlRXJyb3IocGFnZSk7CitvdXRfdW5tYXA6CiAJa3VubWFwKHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9mcy91ZGYvdWRmZGVjbC5oIGIvZnMvdWRmL3VkZmRlY2wuaAppbmRleCAxY2MzYzk5Li40N2JiM2Y1IDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmZGVjbC5oCisrKyBiL2ZzL3VkZi91ZGZkZWNsLmgKQEAgLTIxMSw3ICsyMTEsOCBAQAogfQogCiAvKiB1bmljb2RlLmMgKi8KLWV4dGVybiBpbnQgdWRmX2dldF9maWxlbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdWludDhfdCAqLCB1aW50OF90ICosIGludCk7CitleHRlcm4gaW50IHVkZl9nZXRfZmlsZW5hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVpbnQ4X3QgKiwgaW50LCB1aW50OF90ICosCisJCQkgICAgaW50KTsKIGV4dGVybiBpbnQgdWRmX3B1dF9maWxlbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgdWludDhfdCAqLCB1aW50OF90ICosCiAJCQkgICAgaW50KTsKIGV4dGVybiBpbnQgdWRmX2J1aWxkX3VzdHIoc3RydWN0IHVzdHIgKiwgZHN0cmluZyAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3VuaWNvZGUuYyBiL2ZzL3VkZi91bmljb2RlLmMKaW5kZXggYWZkNDcwZS4uYjg0ZmVlMyAxMDA2NDQKLS0tIGEvZnMvdWRmL3VuaWNvZGUuYworKysgYi9mcy91ZGYvdW5pY29kZS5jCkBAIC0yOCw3ICsyOCw4IEBACiAKICNpbmNsdWRlICJ1ZGZfc2IuaCIKIAotc3RhdGljIGludCB1ZGZfdHJhbnNsYXRlX3RvX2xpbnV4KHVpbnQ4X3QgKiwgdWludDhfdCAqLCBpbnQsIHVpbnQ4X3QgKiwgaW50KTsKK3N0YXRpYyBpbnQgdWRmX3RyYW5zbGF0ZV90b19saW51eCh1aW50OF90ICosIGludCwgdWludDhfdCAqLCBpbnQsIHVpbnQ4X3QgKiwKKwkJCQkgIGludCk7CiAKIHN0YXRpYyBpbnQgdWRmX2NoYXJfdG9fdXN0cihzdHJ1Y3QgdXN0ciAqZGVzdCwgY29uc3QgdWludDhfdCAqc3JjLCBpbnQgc3RybGVuKQogewpAQCAtMzMzLDggKzMzNCw4IEBACiAJcmV0dXJuIHVfbGVuICsgMTsKIH0KIAotaW50IHVkZl9nZXRfZmlsZW5hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdWludDhfdCAqc25hbWUsIHVpbnQ4X3QgKmRuYW1lLAotCQkgICAgIGludCBmbGVuKQoraW50IHVkZl9nZXRfZmlsZW5hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdWludDhfdCAqc25hbWUsIGludCBzbGVuLAorCQkgICAgIHVpbnQ4X3QgKmRuYW1lLCBpbnQgZGxlbikKIHsKIAlzdHJ1Y3QgdXN0ciAqZmlsZW5hbWUsICp1bmlmaWxlbmFtZTsKIAlpbnQgbGVuID0gMDsKQEAgLTM0Nyw3ICszNDgsNyBAQAogCWlmICghdW5pZmlsZW5hbWUpCiAJCWdvdG8gb3V0MTsKIAotCWlmICh1ZGZfYnVpbGRfdXN0cl9leGFjdCh1bmlmaWxlbmFtZSwgc25hbWUsIGZsZW4pKQorCWlmICh1ZGZfYnVpbGRfdXN0cl9leGFjdCh1bmlmaWxlbmFtZSwgc25hbWUsIHNsZW4pKQogCQlnb3RvIG91dDI7CiAKIAlpZiAoVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX1VURjgpKSB7CkBAIC0zNjYsNyArMzY3LDggQEAKIAl9IGVsc2UKIAkJZ290byBvdXQyOwogCi0JbGVuID0gdWRmX3RyYW5zbGF0ZV90b19saW51eChkbmFtZSwgZmlsZW5hbWUtPnVfbmFtZSwgZmlsZW5hbWUtPnVfbGVuLAorCWxlbiA9IHVkZl90cmFuc2xhdGVfdG9fbGludXgoZG5hbWUsIGRsZW4sCisJCQkJICAgICBmaWxlbmFtZS0+dV9uYW1lLCBmaWxlbmFtZS0+dV9sZW4sCiAJCQkJICAgICB1bmlmaWxlbmFtZS0+dV9uYW1lLCB1bmlmaWxlbmFtZS0+dV9sZW4pOwogb3V0MjoKIAlrZnJlZSh1bmlmaWxlbmFtZSk7CkBAIC00MDMsMTAgKzQwNSwxMiBAQAogI2RlZmluZSBFWFRfTUFSSwkJJy4nCiAjZGVmaW5lIENSQ19NQVJLCQknIycKICNkZWZpbmUgRVhUX1NJWkUgCQk1CisvKiBOdW1iZXIgb2YgY2hhcnMgd2UgbmVlZCB0byBzdG9yZSBnZW5lcmF0ZWQgQ1JDIHRvIG1ha2UgZmlsZW5hbWUgdW5pcXVlICovCisjZGVmaW5lIENSQ19MRU4JCQk1CiAKLXN0YXRpYyBpbnQgdWRmX3RyYW5zbGF0ZV90b19saW51eCh1aW50OF90ICpuZXdOYW1lLCB1aW50OF90ICp1ZGZOYW1lLAotCQkJCSAgaW50IHVkZkxlbiwgdWludDhfdCAqZmlkTmFtZSwKLQkJCQkgIGludCBmaWROYW1lTGVuKQorc3RhdGljIGludCB1ZGZfdHJhbnNsYXRlX3RvX2xpbnV4KHVpbnQ4X3QgKm5ld05hbWUsIGludCBuZXdMZW4sCisJCQkJICB1aW50OF90ICp1ZGZOYW1lLCBpbnQgdWRmTGVuLAorCQkJCSAgdWludDhfdCAqZmlkTmFtZSwgaW50IGZpZE5hbWVMZW4pCiB7CiAJaW50IGluZGV4LCBuZXdJbmRleCA9IDAsIG5lZWRzQ1JDID0gMDsKIAlpbnQgZXh0SW5kZXggPSAwLCBuZXdFeHRJbmRleCA9IDAsIGhhc0V4dCA9IDA7CkBAIC00MzksNyArNDQzLDcgQEAKIAkJCQkJbmV3RXh0SW5kZXggPSBuZXdJbmRleDsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAobmV3SW5kZXggPCAyNTYpCisJCQlpZiAobmV3SW5kZXggPCBuZXdMZW4pCiAJCQkJbmV3TmFtZVtuZXdJbmRleCsrXSA9IGN1cnI7CiAJCQllbHNlCiAJCQkJbmVlZHNDUkMgPSAxOwpAQCAtNDY3LDEzICs0NzEsMTMgQEAKIAkJCQl9CiAJCQkJZXh0W2xvY2FsRXh0SW5kZXgrK10gPSBjdXJyOwogCQkJfQotCQkJbWF4RmlsZW5hbWVMZW4gPSAyNTAgLSBsb2NhbEV4dEluZGV4OworCQkJbWF4RmlsZW5hbWVMZW4gPSBuZXdMZW4gLSBDUkNfTEVOIC0gbG9jYWxFeHRJbmRleDsKIAkJCWlmIChuZXdJbmRleCA+IG1heEZpbGVuYW1lTGVuKQogCQkJCW5ld0luZGV4ID0gbWF4RmlsZW5hbWVMZW47CiAJCQllbHNlCiAJCQkJbmV3SW5kZXggPSBuZXdFeHRJbmRleDsKLQkJfSBlbHNlIGlmIChuZXdJbmRleCA+IDI1MCkKLQkJCW5ld0luZGV4ID0gMjUwOworCQl9IGVsc2UgaWYgKG5ld0luZGV4ID4gbmV3TGVuIC0gQ1JDX0xFTikKKwkJCW5ld0luZGV4ID0gbmV3TGVuIC0gQ1JDX0xFTjsKIAkJbmV3TmFtZVtuZXdJbmRleCsrXSA9IENSQ19NQVJLOwogCQl2YWx1ZUNSQyA9IGNyY19pdHVfdCgwLCBmaWROYW1lLCBmaWROYW1lTGVuKTsKIAkJbmV3TmFtZVtuZXdJbmRleCsrXSA9IGhleF9hc2NfdXBwZXJfaGkodmFsdWVDUkMgPj4gOCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3FtLmggYi9mcy94ZnMveGZzX3FtLmgKaW5kZXggM2EwN2E5My4uNDFmNmMwYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19xbS5oCisrKyBiL2ZzL3hmcy94ZnNfcW0uaApAQCAtMTY2LDkgKzE2Niw5IEBACiAvKiBxdW90YSBvcHMgKi8KIGV4dGVybiBpbnQJCXhmc19xbV9zY2FsbF90cnVuY19xZmlsZXMoc3RydWN0IHhmc19tb3VudCAqLCB1aW50KTsKIGV4dGVybiBpbnQJCXhmc19xbV9zY2FsbF9nZXRxdW90YShzdHJ1Y3QgeGZzX21vdW50ICosIHhmc19kcWlkX3QsCi0JCQkJCXVpbnQsIHN0cnVjdCBmc19kaXNrX3F1b3RhICopOworCQkJCQl1aW50LCBzdHJ1Y3QgcWNfZHFibGsgKik7CiBleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfc2V0cWxpbShzdHJ1Y3QgeGZzX21vdW50ICosIHhmc19kcWlkX3QsIHVpbnQsCi0JCQkJCXN0cnVjdCBmc19kaXNrX3F1b3RhICopOworCQkJCQlzdHJ1Y3QgcWNfZHFibGsgKik7CiBleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfZ2V0cXN0YXQoc3RydWN0IHhmc19tb3VudCAqLAogCQkJCQlzdHJ1Y3QgZnNfcXVvdGFfc3RhdCAqKTsKIGV4dGVybiBpbnQJCXhmc19xbV9zY2FsbF9nZXRxc3RhdHYoc3RydWN0IHhmc19tb3VudCAqLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19xbV9zeXNjYWxscy5jIGIvZnMveGZzL3hmc19xbV9zeXNjYWxscy5jCmluZGV4IDc0ZmNhNjguLmNiNjE2OGUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcW1fc3lzY2FsbHMuYworKysgYi9mcy94ZnMveGZzX3FtX3N5c2NhbGxzLmMKQEAgLTM5LDcgKzM5LDYgQEAKIFNUQVRJQyBpbnQJeGZzX3FtX2xvZ19xdW90YW9mZl9lbmQoeGZzX21vdW50X3QgKiwgeGZzX3FvZmZfbG9naXRlbV90ICosCiAJCQkJCXVpbnQpOwogU1RBVElDIHVpbnQJeGZzX3FtX2V4cG9ydF9mbGFncyh1aW50KTsKLVNUQVRJQyB1aW50CXhmc19xbV9leHBvcnRfcXR5cGVfZmxhZ3ModWludCk7CiAKIC8qCiAgKiBUdXJuIG9mZiBxdW90YSBhY2NvdW50aW5nIGFuZC9vciBlbmZvcmNlbWVudCBmb3IgYWxsIHVkcXVvdHMgYW5kL29yCkBAIC01NzMsOCArNTcyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBYRlNfRFFfTUFTSyBcCi0JKEZTX0RRX0xJTUlUX01BU0sgfCBGU19EUV9USU1FUl9NQVNLIHwgRlNfRFFfV0FSTlNfTUFTSykKKyNkZWZpbmUgWEZTX1FDX01BU0sgXAorCShRQ19MSU1JVF9NQVNLIHwgUUNfVElNRVJfTUFTSyB8IFFDX1dBUk5TX01BU0spCiAKIC8qCiAgKiBBZGp1c3QgcXVvdGEgbGltaXRzLCBhbmQgc3RhcnQvc3RvcCB0aW1lcnMgYWNjb3JkaW5nbHkuCkBAIC01ODQsNyArNTgzLDcgQEAKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAl4ZnNfZHFpZF90CQlpZCwKIAl1aW50CQkJdHlwZSwKLQlmc19kaXNrX3F1b3RhX3QJCSpuZXdsaW0pCisJc3RydWN0IHFjX2RxYmxrCQkqbmV3bGltKQogewogCXN0cnVjdCB4ZnNfcXVvdGFpbmZvCSpxID0gbXAtPm1fcXVvdGFpbmZvOwogCXN0cnVjdCB4ZnNfZGlza19kcXVvdAkqZGRxOwpAQCAtNTkzLDkgKzU5Miw5IEBACiAJaW50CQkJZXJyb3I7CiAJeGZzX3FjbnRfdAkJaGFyZCwgc29mdDsKIAotCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgflhGU19EUV9NQVNLKQorCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgflhGU19RQ19NQVNLKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBYRlNfRFFfTUFTSykgPT0gMCkKKwlpZiAoKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBYRlNfUUNfTUFTSykgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtNjMzLDExICs2MzIsMTEgQEAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGF0IGhhcmRsaW1pdHMgYXJlID49IHNvZnQgbGltaXRzIGJlZm9yZSBjaGFuZ2luZy4KIAkgKi8KLQloYXJkID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CSEFSRCkgPwotCQkoeGZzX3FjbnRfdCkgWEZTX0JCX1RPX0ZTQihtcCwgbmV3bGltLT5kX2Jsa19oYXJkbGltaXQpIDoKKwloYXJkID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfSEFSRCkgPworCQkoeGZzX3FjbnRfdCkgWEZTX0JfVE9fRlNCKG1wLCBuZXdsaW0tPmRfc3BjX2hhcmRsaW1pdCkgOgogCQkJYmU2NF90b19jcHUoZGRxLT5kX2Jsa19oYXJkbGltaXQpOwotCXNvZnQgPSAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JTT0ZUKSA/Ci0JCSh4ZnNfcWNudF90KSBYRlNfQkJfVE9fRlNCKG1wLCBuZXdsaW0tPmRfYmxrX3NvZnRsaW1pdCkgOgorCXNvZnQgPSAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19TT0ZUKSA/CisJCSh4ZnNfcWNudF90KSBYRlNfQl9UT19GU0IobXAsIG5ld2xpbS0+ZF9zcGNfc29mdGxpbWl0KSA6CiAJCQliZTY0X3RvX2NwdShkZHEtPmRfYmxrX3NvZnRsaW1pdCk7CiAJaWYgKGhhcmQgPT0gMCB8fCBoYXJkID49IHNvZnQpIHsKIAkJZGRxLT5kX2Jsa19oYXJkbGltaXQgPSBjcHVfdG9fYmU2NChoYXJkKTsKQEAgLTY1MCwxMSArNjQ5LDExIEBACiAJfSBlbHNlIHsKIAkJeGZzX2RlYnVnKG1wLCAiYmxraGFyZCAlTGQgPCBibGtzb2Z0ICVMZCIsIGhhcmQsIHNvZnQpOwogCX0KLQloYXJkID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJIQVJEKSA/Ci0JCSh4ZnNfcWNudF90KSBYRlNfQkJfVE9fRlNCKG1wLCBuZXdsaW0tPmRfcnRiX2hhcmRsaW1pdCkgOgorCWhhcmQgPSAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX1JUX1NQQ19IQVJEKSA/CisJCSh4ZnNfcWNudF90KSBYRlNfQl9UT19GU0IobXAsIG5ld2xpbS0+ZF9ydF9zcGNfaGFyZGxpbWl0KSA6CiAJCQliZTY0X3RvX2NwdShkZHEtPmRfcnRiX2hhcmRsaW1pdCk7Ci0Jc29mdCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfUlRCU09GVCkgPwotCQkoeGZzX3FjbnRfdCkgWEZTX0JCX1RPX0ZTQihtcCwgbmV3bGltLT5kX3J0Yl9zb2Z0bGltaXQpIDoKKwlzb2Z0ID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19SVF9TUENfU09GVCkgPworCQkoeGZzX3FjbnRfdCkgWEZTX0JfVE9fRlNCKG1wLCBuZXdsaW0tPmRfcnRfc3BjX3NvZnRsaW1pdCkgOgogCQkJYmU2NF90b19jcHUoZGRxLT5kX3J0Yl9zb2Z0bGltaXQpOwogCWlmIChoYXJkID09IDAgfHwgaGFyZCA+PSBzb2Z0KSB7CiAJCWRkcS0+ZF9ydGJfaGFyZGxpbWl0ID0gY3B1X3RvX2JlNjQoaGFyZCk7CkBAIC02NjcsMTAgKzY2NiwxMCBAQAogCQl4ZnNfZGVidWcobXAsICJydGJoYXJkICVMZCA8IHJ0YnNvZnQgJUxkIiwgaGFyZCwgc29mdCk7CiAJfQogCi0JaGFyZCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfSUhBUkQpID8KKwloYXJkID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fSEFSRCkgPwogCQkoeGZzX3FjbnRfdCkgbmV3bGltLT5kX2lub19oYXJkbGltaXQgOgogCQkJYmU2NF90b19jcHUoZGRxLT5kX2lub19oYXJkbGltaXQpOwotCXNvZnQgPSAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lTT0ZUKSA/CisJc29mdCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfSU5PX1NPRlQpID8KIAkJKHhmc19xY250X3QpIG5ld2xpbS0+ZF9pbm9fc29mdGxpbWl0IDoKIAkJCWJlNjRfdG9fY3B1KGRkcS0+ZF9pbm9fc29mdGxpbWl0KTsKIAlpZiAoaGFyZCA9PSAwIHx8IGhhcmQgPj0gc29mdCkgewpAQCAtNjg3LDEyICs2ODYsMTIgQEAKIAkvKgogCSAqIFVwZGF0ZSB3YXJuaW5ncyBjb3VudGVyKHMpIGlmIHJlcXVlc3RlZAogCSAqLwotCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfQldBUk5TKQotCQlkZHEtPmRfYndhcm5zID0gY3B1X3RvX2JlMTYobmV3bGltLT5kX2J3YXJucyk7Ci0JaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JV0FSTlMpCi0JCWRkcS0+ZF9pd2FybnMgPSBjcHVfdG9fYmUxNihuZXdsaW0tPmRfaXdhcm5zKTsKLQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX1JUQldBUk5TKQotCQlkZHEtPmRfcnRid2FybnMgPSBjcHVfdG9fYmUxNihuZXdsaW0tPmRfcnRid2FybnMpOworCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfU1BDX1dBUk5TKQorCQlkZHEtPmRfYndhcm5zID0gY3B1X3RvX2JlMTYobmV3bGltLT5kX3NwY193YXJucyk7CisJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fV0FSTlMpCisJCWRkcS0+ZF9pd2FybnMgPSBjcHVfdG9fYmUxNihuZXdsaW0tPmRfaW5vX3dhcm5zKTsKKwlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX1JUX1NQQ19XQVJOUykKKwkJZGRxLT5kX3J0Yndhcm5zID0gY3B1X3RvX2JlMTYobmV3bGltLT5kX3J0X3NwY193YXJucyk7CiAKIAlpZiAoaWQgPT0gMCkgewogCQkvKgpAQCAtNzAyLDI0ICs3MDEsMjQgQEAKIAkJICogc29mdCBhbmQgaGFyZCBsaW1pdCB2YWx1ZXMgKGFscmVhZHkgZG9uZSwgYWJvdmUpLCBhbmQKIAkJICogZm9yIHdhcm5pbmdzLgogCQkgKi8KLQkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CVElNRVIpIHsKLQkJCXEtPnFpX2J0aW1lbGltaXQgPSBuZXdsaW0tPmRfYnRpbWVyOwotCQkJZGRxLT5kX2J0aW1lciA9IGNwdV90b19iZTMyKG5ld2xpbS0+ZF9idGltZXIpOworCQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19USU1FUikgeworCQkJcS0+cWlfYnRpbWVsaW1pdCA9IG5ld2xpbS0+ZF9zcGNfdGltZXI7CisJCQlkZHEtPmRfYnRpbWVyID0gY3B1X3RvX2JlMzIobmV3bGltLT5kX3NwY190aW1lcik7CiAJCX0KLQkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JVElNRVIpIHsKLQkJCXEtPnFpX2l0aW1lbGltaXQgPSBuZXdsaW0tPmRfaXRpbWVyOwotCQkJZGRxLT5kX2l0aW1lciA9IGNwdV90b19iZTMyKG5ld2xpbS0+ZF9pdGltZXIpOworCQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19USU1FUikgeworCQkJcS0+cWlfaXRpbWVsaW1pdCA9IG5ld2xpbS0+ZF9pbm9fdGltZXI7CisJCQlkZHEtPmRfaXRpbWVyID0gY3B1X3RvX2JlMzIobmV3bGltLT5kX2lub190aW1lcik7CiAJCX0KLQkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJUSU1FUikgewotCQkJcS0+cWlfcnRidGltZWxpbWl0ID0gbmV3bGltLT5kX3J0YnRpbWVyOwotCQkJZGRxLT5kX3J0YnRpbWVyID0gY3B1X3RvX2JlMzIobmV3bGltLT5kX3J0YnRpbWVyKTsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19SVF9TUENfVElNRVIpIHsKKwkJCXEtPnFpX3J0YnRpbWVsaW1pdCA9IG5ld2xpbS0+ZF9ydF9zcGNfdGltZXI7CisJCQlkZHEtPmRfcnRidGltZXIgPSBjcHVfdG9fYmUzMihuZXdsaW0tPmRfcnRfc3BjX3RpbWVyKTsKIAkJfQotCQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JXQVJOUykKLQkJCXEtPnFpX2J3YXJubGltaXQgPSBuZXdsaW0tPmRfYndhcm5zOwotCQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lXQVJOUykKLQkJCXEtPnFpX2l3YXJubGltaXQgPSBuZXdsaW0tPmRfaXdhcm5zOwotCQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX1JUQldBUk5TKQotCQkJcS0+cWlfcnRid2FybmxpbWl0ID0gbmV3bGltLT5kX3J0Yndhcm5zOworCQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19XQVJOUykKKwkJCXEtPnFpX2J3YXJubGltaXQgPSBuZXdsaW0tPmRfc3BjX3dhcm5zOworCQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19XQVJOUykKKwkJCXEtPnFpX2l3YXJubGltaXQgPSBuZXdsaW0tPmRfaW5vX3dhcm5zOworCQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX1JUX1NQQ19XQVJOUykKKwkJCXEtPnFpX3J0Yndhcm5saW1pdCA9IG5ld2xpbS0+ZF9ydF9zcGNfd2FybnM7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogSWYgdGhlIHVzZXIgaXMgbm93IG92ZXIgcXVvdGEsIHN0YXJ0IHRoZSB0aW1lbGltaXQuCkBAIC04MjQsNyArODIzLDcgQEAKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAl4ZnNfZHFpZF90CQlpZCwKIAl1aW50CQkJdHlwZSwKLQlzdHJ1Y3QgZnNfZGlza19xdW90YQkqZHN0KQorCXN0cnVjdCBxY19kcWJsawkJKmRzdCkKIHsKIAlzdHJ1Y3QgeGZzX2RxdW90CSpkcXA7CiAJaW50CQkJZXJyb3I7CkBAIC04NDgsMjggKzg0NywyNSBAQAogCX0KIAogCW1lbXNldChkc3QsIDAsIHNpemVvZigqZHN0KSk7Ci0JZHN0LT5kX3ZlcnNpb24gPSBGU19EUVVPVF9WRVJTSU9OOwotCWRzdC0+ZF9mbGFncyA9IHhmc19xbV9leHBvcnRfcXR5cGVfZmxhZ3MoZHFwLT5xX2NvcmUuZF9mbGFncyk7Ci0JZHN0LT5kX2lkID0gYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pZCk7Ci0JZHN0LT5kX2Jsa19oYXJkbGltaXQgPQotCQlYRlNfRlNCX1RPX0JCKG1wLCBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jsa19oYXJkbGltaXQpKTsKLQlkc3QtPmRfYmxrX3NvZnRsaW1pdCA9Ci0JCVhGU19GU0JfVE9fQkIobXAsIGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmxrX3NvZnRsaW1pdCkpOworCWRzdC0+ZF9zcGNfaGFyZGxpbWl0ID0KKwkJWEZTX0ZTQl9UT19CKG1wLCBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jsa19oYXJkbGltaXQpKTsKKwlkc3QtPmRfc3BjX3NvZnRsaW1pdCA9CisJCVhGU19GU0JfVE9fQihtcCwgYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ibGtfc29mdGxpbWl0KSk7CiAJZHN0LT5kX2lub19oYXJkbGltaXQgPSBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2lub19oYXJkbGltaXQpOwogCWRzdC0+ZF9pbm9fc29mdGxpbWl0ID0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pbm9fc29mdGxpbWl0KTsKLQlkc3QtPmRfYmNvdW50ID0gWEZTX0ZTQl9UT19CQihtcCwgZHFwLT5xX3Jlc19iY291bnQpOwotCWRzdC0+ZF9pY291bnQgPSBkcXAtPnFfcmVzX2ljb3VudDsKLQlkc3QtPmRfYnRpbWVyID0gYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9idGltZXIpOwotCWRzdC0+ZF9pdGltZXIgPSBiZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX2l0aW1lcik7Ci0JZHN0LT5kX2l3YXJucyA9IGJlMTZfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaXdhcm5zKTsKLQlkc3QtPmRfYndhcm5zID0gYmUxNl90b19jcHUoZHFwLT5xX2NvcmUuZF9id2FybnMpOwotCWRzdC0+ZF9ydGJfaGFyZGxpbWl0ID0KLQkJWEZTX0ZTQl9UT19CQihtcCwgYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ydGJfaGFyZGxpbWl0KSk7Ci0JZHN0LT5kX3J0Yl9zb2Z0bGltaXQgPQotCQlYRlNfRlNCX1RPX0JCKG1wLCBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX3J0Yl9zb2Z0bGltaXQpKTsKLQlkc3QtPmRfcnRiY291bnQgPSBYRlNfRlNCX1RPX0JCKG1wLCBkcXAtPnFfcmVzX3J0YmNvdW50KTsKLQlkc3QtPmRfcnRidGltZXIgPSBiZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX3J0YnRpbWVyKTsKLQlkc3QtPmRfcnRid2FybnMgPSBiZTE2X3RvX2NwdShkcXAtPnFfY29yZS5kX3J0Yndhcm5zKTsKKwlkc3QtPmRfc3BhY2UgPSBYRlNfRlNCX1RPX0IobXAsIGRxcC0+cV9yZXNfYmNvdW50KTsKKwlkc3QtPmRfaW5vX2NvdW50ID0gZHFwLT5xX3Jlc19pY291bnQ7CisJZHN0LT5kX3NwY190aW1lciA9IGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYnRpbWVyKTsKKwlkc3QtPmRfaW5vX3RpbWVyID0gYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pdGltZXIpOworCWRzdC0+ZF9pbm9fd2FybnMgPSBiZTE2X3RvX2NwdShkcXAtPnFfY29yZS5kX2l3YXJucyk7CisJZHN0LT5kX3NwY193YXJucyA9IGJlMTZfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYndhcm5zKTsKKwlkc3QtPmRfcnRfc3BjX2hhcmRsaW1pdCA9CisJCVhGU19GU0JfVE9fQihtcCwgYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ydGJfaGFyZGxpbWl0KSk7CisJZHN0LT5kX3J0X3NwY19zb2Z0bGltaXQgPQorCQlYRlNfRlNCX1RPX0IobXAsIGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfcnRiX3NvZnRsaW1pdCkpOworCWRzdC0+ZF9ydF9zcGFjZSA9IFhGU19GU0JfVE9fQihtcCwgZHFwLT5xX3Jlc19ydGJjb3VudCk7CisJZHN0LT5kX3J0X3NwY190aW1lciA9IGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfcnRidGltZXIpOworCWRzdC0+ZF9ydF9zcGNfd2FybnMgPSBiZTE2X3RvX2NwdShkcXAtPnFfY29yZS5kX3J0Yndhcm5zKTsKIAogCS8qCiAJICogSW50ZXJuYWxseSwgd2UgZG9uJ3QgcmVzZXQgYWxsIHRoZSB0aW1lcnMgd2hlbiBxdW90YSBlbmZvcmNlbWVudApAQCAtODgyLDIzICs4NzgsMjMgQEAKIAkgICAgIGRxcC0+cV9jb3JlLmRfZmxhZ3MgPT0gWEZTX0RRX0dST1VQKSB8fAogCSAgICAoIVhGU19JU19QUVVPVEFfRU5GT1JDRUQobXApICYmCiAJICAgICBkcXAtPnFfY29yZS5kX2ZsYWdzID09IFhGU19EUV9QUk9KKSkgewotCQlkc3QtPmRfYnRpbWVyID0gMDsKLQkJZHN0LT5kX2l0aW1lciA9IDA7Ci0JCWRzdC0+ZF9ydGJ0aW1lciA9IDA7CisJCWRzdC0+ZF9zcGNfdGltZXIgPSAwOworCQlkc3QtPmRfaW5vX3RpbWVyID0gMDsKKwkJZHN0LT5kX3J0X3NwY190aW1lciA9IDA7CiAJfQogCiAjaWZkZWYgREVCVUcKLQlpZiAoKChYRlNfSVNfVVFVT1RBX0VORk9SQ0VEKG1wKSAmJiBkc3QtPmRfZmxhZ3MgPT0gRlNfVVNFUl9RVU9UQSkgfHwKLQkgICAgIChYRlNfSVNfR1FVT1RBX0VORk9SQ0VEKG1wKSAmJiBkc3QtPmRfZmxhZ3MgPT0gRlNfR1JPVVBfUVVPVEEpIHx8Ci0JICAgICAoWEZTX0lTX1BRVU9UQV9FTkZPUkNFRChtcCkgJiYgZHN0LT5kX2ZsYWdzID09IEZTX1BST0pfUVVPVEEpKSAmJgotCSAgICBkc3QtPmRfaWQgIT0gMCkgewotCQlpZiAoKGRzdC0+ZF9iY291bnQgPiBkc3QtPmRfYmxrX3NvZnRsaW1pdCkgJiYKLQkJICAgIChkc3QtPmRfYmxrX3NvZnRsaW1pdCA+IDApKSB7Ci0JCQlBU1NFUlQoZHN0LT5kX2J0aW1lciAhPSAwKTsKKwlpZiAoKChYRlNfSVNfVVFVT1RBX0VORk9SQ0VEKG1wKSAmJiB0eXBlID09IFhGU19EUV9VU0VSKSB8fAorCSAgICAgKFhGU19JU19HUVVPVEFfRU5GT1JDRUQobXApICYmIHR5cGUgPT0gWEZTX0RRX0dST1VQKSB8fAorCSAgICAgKFhGU19JU19QUVVPVEFfRU5GT1JDRUQobXApICYmIHR5cGUgPT0gWEZTX0RRX1BST0opKSAmJgorCSAgICBpZCAhPSAwKSB7CisJCWlmICgoZHN0LT5kX3NwYWNlID4gZHN0LT5kX3NwY19zb2Z0bGltaXQpICYmCisJCSAgICAoZHN0LT5kX3NwY19zb2Z0bGltaXQgPiAwKSkgeworCQkJQVNTRVJUKGRzdC0+ZF9zcGNfdGltZXIgIT0gMCk7CiAJCX0KLQkJaWYgKChkc3QtPmRfaWNvdW50ID4gZHN0LT5kX2lub19zb2Z0bGltaXQpICYmCisJCWlmICgoZHN0LT5kX2lub19jb3VudCA+IGRzdC0+ZF9pbm9fc29mdGxpbWl0KSAmJgogCQkgICAgKGRzdC0+ZF9pbm9fc29mdGxpbWl0ID4gMCkpIHsKLQkJCUFTU0VSVChkc3QtPmRfaXRpbWVyICE9IDApOworCQkJQVNTRVJUKGRzdC0+ZF9pbm9fdGltZXIgIT0gMCk7CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTkwOCwyNiArOTA0LDYgQEAKIH0KIAogU1RBVElDIHVpbnQKLXhmc19xbV9leHBvcnRfcXR5cGVfZmxhZ3MoCi0JdWludCBmbGFncykKLXsKLQkvKgotCSAqIENhbid0IGJlIG1vcmUgdGhhbiBvbmUsIG9yIG5vbmUuCi0JICovCi0JQVNTRVJUKChmbGFncyAmIChGU19QUk9KX1FVT1RBIHwgRlNfVVNFUl9RVU9UQSkpICE9Ci0JCShGU19QUk9KX1FVT1RBIHwgRlNfVVNFUl9RVU9UQSkpOwotCUFTU0VSVCgoZmxhZ3MgJiAoRlNfUFJPSl9RVU9UQSB8IEZTX0dST1VQX1FVT1RBKSkgIT0KLQkJKEZTX1BST0pfUVVPVEEgfCBGU19HUk9VUF9RVU9UQSkpOwotCUFTU0VSVCgoZmxhZ3MgJiAoRlNfVVNFUl9RVU9UQSB8IEZTX0dST1VQX1FVT1RBKSkgIT0KLQkJKEZTX1VTRVJfUVVPVEEgfCBGU19HUk9VUF9RVU9UQSkpOwotCUFTU0VSVCgoZmxhZ3MgJiAoRlNfUFJPSl9RVU9UQXxGU19VU0VSX1FVT1RBfEZTX0dST1VQX1FVT1RBKSkgIT0gMCk7Ci0KLQlyZXR1cm4gKGZsYWdzICYgWEZTX0RRX1VTRVIpID8KLQkJRlNfVVNFUl9RVU9UQSA6IChmbGFncyAmIFhGU19EUV9QUk9KKSA/Ci0JCQlGU19QUk9KX1FVT1RBIDogRlNfR1JPVVBfUVVPVEE7Ci19Ci0KLVNUQVRJQyB1aW50CiB4ZnNfcW1fZXhwb3J0X2ZsYWdzKAogCXVpbnQgZmxhZ3MpCiB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3F1b3Rhb3BzLmMgYi9mcy94ZnMveGZzX3F1b3Rhb3BzLmMKaW5kZXggNzU0MmJiZS4uODAxYTg0YyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19xdW90YW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfcXVvdGFvcHMuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiB4ZnNfZnNfZ2V0X2RxYmxrKAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCiAJc3RydWN0IGtxaWQJCXFpZCwKLQlzdHJ1Y3QgZnNfZGlza19xdW90YQkqZmRxKQorCXN0cnVjdCBxY19kcWJsawkJKnFkcSkKIHsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKIApAQCAtMTQxLDE0ICsxNDEsMTQgQEAKIAkJcmV0dXJuIC1FU1JDSDsKIAogCXJldHVybiB4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEobXAsIGZyb21fa3FpZCgmaW5pdF91c2VyX25zLCBxaWQpLAotCQkJCSAgICAgIHhmc19xdW90YV90eXBlKHFpZC50eXBlKSwgZmRxKTsKKwkJCQkgICAgICB4ZnNfcXVvdGFfdHlwZShxaWQudHlwZSksIHFkcSk7CiB9CiAKIFNUQVRJQyBpbnQKIHhmc19mc19zZXRfZHFibGsoCiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKIAlzdHJ1Y3Qga3FpZAkJcWlkLAotCXN0cnVjdCBmc19kaXNrX3F1b3RhCSpmZHEpCisJc3RydWN0IHFjX2RxYmxrCQkqcWRxKQogewogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gWEZTX00oc2IpOwogCkBAIC0xNjAsNyArMTYwLDcgQEAKIAkJcmV0dXJuIC1FU1JDSDsKIAogCXJldHVybiB4ZnNfcW1fc2NhbGxfc2V0cWxpbShtcCwgZnJvbV9rcWlkKCZpbml0X3VzZXJfbnMsIHFpZCksCi0JCQkJICAgICB4ZnNfcXVvdGFfdHlwZShxaWQudHlwZSksIGZkcSk7CisJCQkJICAgICB4ZnNfcXVvdGFfdHlwZShxaWQudHlwZSksIHFkcSk7CiB9CiAKIGNvbnN0IHN0cnVjdCBxdW90YWN0bF9vcHMgeGZzX3F1b3RhY3RsX29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKaW5kZXggM2NhOWI3NS4uYjk1ZGMzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaApAQCAtMTk2LDggKzE5Niw4IEBACiBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgewogCWFjcGlfaGFuZGxlIGhhbmRsZTsKIAl1MzIgYWNwaV9pZDsKLQl1MzIgYXBpY19pZDsKLQl1MzIgaWQ7CisJdTMyIHBoeXNfaWQ7CS8qIENQVSBoYXJkd2FyZSBJRCBzdWNoIGFzIEFQSUMgSUQgZm9yIHg4NiAqLworCXUzMiBpZDsJCS8qIENQVSBsb2dpY2FsIElEIGFsbG9jYXRlZCBieSBPUyAqLwogCXUzMiBwYmxrOwogCWludCBwZXJmb3JtYW5jZV9wbGF0Zm9ybV9saW1pdDsKIAlpbnQgdGhyb3R0bGluZ19wbGF0Zm9ybV9saW1pdDsKQEAgLTMxMCw4ICszMTAsOCBAQAogI2VuZGlmCQkJCS8qIENPTkZJR19DUFVfRlJFUSAqLwogCiAvKiBpbiBwcm9jZXNzb3JfY29yZS5jICovCi1pbnQgYWNwaV9nZXRfYXBpY2lkKGFjcGlfaGFuZGxlLCBpbnQgdHlwZSwgdTMyIGFjcGlfaWQpOwotaW50IGFjcGlfbWFwX2NwdWlkKGludCBhcGljX2lkLCB1MzIgYWNwaV9pZCk7CitpbnQgYWNwaV9nZXRfcGh5c19pZChhY3BpX2hhbmRsZSwgaW50IHR5cGUsIHUzMiBhY3BpX2lkKTsKK2ludCBhY3BpX21hcF9jcHVpZChpbnQgcGh5c19pZCwgdTMyIGFjcGlfaWQpOwogaW50IGFjcGlfZ2V0X2NwdWlkKGFjcGlfaGFuZGxlLCBpbnQgdHlwZSwgdTMyIGFjcGlfaWQpOwogCiAvKiBpbiBwcm9jZXNzb3JfcGRjLmMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCmluZGV4IDA4ODQ4MDUuLmRiMjg0YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaApAQCAtMTM2LDggKzEzNiwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVzZXRfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKIHsKLQl0bGItPnN0YXJ0ID0gVEFTS19TSVpFOwotCXRsYi0+ZW5kID0gMDsKKwlpZiAodGxiLT5mdWxsbW0pIHsKKwkJdGxiLT5zdGFydCA9IHRsYi0+ZW5kID0gfjA7CisJfSBlbHNlIHsKKwkJdGxiLT5zdGFydCA9IFRBU0tfU0laRTsKKwkJdGxiLT5lbmQgPSAwOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybVAuaCBiL2luY2x1ZGUvZHJtL2RybVAuaAppbmRleCA4YmEzNWM2Li5lMWIyZThiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1QLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtUC5oCkBAIC05MDEsMTEgKzkwMSwxNSBAQAogZXh0ZXJuIGludCBkcm1fd2FpdF92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlscCk7CiBleHRlcm4gdTMyIGRybV92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIHUzMiBkcm1fY3J0Y192YmxhbmtfY291bnQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIGV4dGVybiB1MzIgZHJtX3ZibGFua19jb3VudF9hbmRfdGltZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKIAkJCQkgICAgIHN0cnVjdCB0aW1ldmFsICp2Ymxhbmt0aW1lKTsKIGV4dGVybiB2b2lkIGRybV9zZW5kX3ZibGFua19ldmVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKIAkJCQkgICAgIHN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUpOworZXh0ZXJuIHZvaWQgZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplKTsKIGV4dGVybiBib29sIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiBib29sIGRybV9jcnRjX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIGV4dGVybiBpbnQgZHJtX3ZibGFua19nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIHZvaWQgZHJtX3ZibGFua19wdXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGludCBkcm1fY3J0Y192YmxhbmtfZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtLmggYi9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKaW5kZXggNzgwNTExYS4uMWU2YWUxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW0uaApAQCAtMTE5LDEzICsxMTksNiBAQAogCSAqIHNpbXBseSBsZWF2ZSBpdCBhcyBOVUxMLgogCSAqLwogCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmltcG9ydF9hdHRhY2g7Ci0KLQkvKioKLQkgKiBkdW1iIC0gY3JlYXRlZCBhcyBkdW1iIGJ1ZmZlcgotCSAqIFdoZXRoZXIgdGhlIGdlbSBvYmplY3Qgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGR1bWIgYnVmZmVyIGludGVyZmFjZQotCSAqIGFzIHN1Y2ggaXQgbWF5IG5vdCBiZSB1c2VkIGZvciBHUFUgcmVuZGVyaW5nLgotCSAqLwotCWJvb2wgZHVtYjsKIH07CiAKIHZvaWQgZHJtX2dlbV9vYmplY3RfcmVsZWFzZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oCmluZGV4IDFlYTFiNzAuLmQ0MTEwZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oCkBAIC03LDE0ICs3LDE0IEBACiAKICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KIAotLyogaW50ZXJydXB0IHNwZWNpZmljIGNlbGwgMCAqLworLyogaW50ZXJydXB0IHNwZWNpZmllciBjZWxsIDAgKi8KIAogI2RlZmluZSBHSUNfU1BJIDAKICNkZWZpbmUgR0lDX1BQSSAxCiAKIC8qCiAgKiBJbnRlcnJ1cHQgc3BlY2lmaWVyIGNlbGwgMi4KLSAqIFRoZSBmbGFnZ3MgaW4gaXJxLmggYXJlIHZhbGlkLCBwbHVzIHRob3NlIGJlbG93LgorICogVGhlIGZsYWdzIGluIGlycS5oIGFyZSB2YWxpZCwgcGx1cyB0aG9zZSBiZWxvdy4KICAqLwogI2RlZmluZSBHSUNfQ1BVX01BU0tfUkFXKHgpICgoeCkgPDwgOCkKICNkZWZpbmUgR0lDX0NQVV9NQVNLX1NJTVBMRShudW0pIEdJQ19DUFVfTUFTS19SQVcoKDEgPDwgKG51bSkpIC0gMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvdGhlcm1hbC90aGVybWFsLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3RoZXJtYWwvdGhlcm1hbC5oCmluZGV4IDU5ODIyYTkuLmI1ZTZiMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvdGhlcm1hbC90aGVybWFsLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy90aGVybWFsL3RoZXJtYWwuaApAQCAtMTEsNyArMTEsNyBAQAogI2RlZmluZSBfRFRfQklORElOR1NfVEhFUk1BTF9USEVSTUFMX0gKIAogLyogT24gY29vbGluZyBkZXZpY2VzIHVwcGVyIGFuZCBsb3dlciBsaW1pdHMgKi8KLSNkZWZpbmUgVEhFUk1BTF9OT19MSU1JVAkJKC0xVUwpCisjZGVmaW5lIFRIRVJNQUxfTk9fTElNSVQJCSh+MCkKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNwaS5oIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKaW5kZXggODU2ZDM4MS4uZDQ1OWNkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKQEAgLTE0Nyw4ICsxNDcsOCBAQAogCiAjaWZkZWYgQ09ORklHX0FDUElfSE9UUExVR19DUFUKIC8qIEFyY2ggZGVwZW5kZW50IGZ1bmN0aW9ucyBmb3IgY3B1IGhvdHBsdWcgc3VwcG9ydCAqLwotaW50IGFjcGlfbWFwX2xzYXBpYyhhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBwaHlzaWQsIGludCAqcGNwdSk7Ci1pbnQgYWNwaV91bm1hcF9sc2FwaWMoaW50IGNwdSk7CitpbnQgYWNwaV9tYXBfY3B1KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHBoeXNpZCwgaW50ICpwY3B1KTsKK2ludCBhY3BpX3VubWFwX2NwdShpbnQgY3B1KTsKICNlbmRpZiAvKiBDT05GSUdfQUNQSV9IT1RQTFVHX0NQVSAqLwogCiBpbnQgYWNwaV9yZWdpc3Rlcl9pb2FwaWMoYWNwaV9oYW5kbGUgaGFuZGxlLCB1NjQgcGh5c19hZGRyLCB1MzIgZ3NpX2Jhc2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdWRpdC5oIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCmluZGV4IDBjMDQ5MTcuLmFmODQyMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXVkaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIAogc3RydWN0IGF1ZGl0X2tydWxlIHsKIAlpbnQJCQl2ZXJzX29wczsKKwl1MzIJCQlwZmxhZ3M7CiAJdTMyCQkJZmxhZ3M7CiAJdTMyCQkJbGlzdG5yOwogCXUzMgkJCWFjdGlvbjsKQEAgLTY0LDYgKzY1LDkgQEAKIAl1NjQJCQlwcmlvOwogfTsKIAorLyogRmxhZyB0byBpbmRpY2F0ZSBsZWdhY3kgQVVESVRfTE9HSU5VSUQgdW5zZXQgdXNhZ2UgKi8KKyNkZWZpbmUgQVVESVRfTE9HSU5VSURfTEVHQUNZCQkweDEKKwogc3RydWN0IGF1ZGl0X2ZpZWxkIHsKIAl1MzIJCQkJdHlwZTsKIAl1bmlvbiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oIGIvaW5jbHVkZS9saW51eC9ibGstbXEuaAppbmRleCA4YWRlZDlhLi41NzM1ZTcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrLW1xLmgKQEAgLTM0LDcgKzM0LDYgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIEJMS19NUV9GXyogZmxhZ3MgKi8KIAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlCSpxdWV1ZTsKLQl1bnNpZ25lZCBpbnQJCXF1ZXVlX251bTsKIAlzdHJ1Y3QgYmxrX2ZsdXNoX3F1ZXVlCSpmcTsKIAogCXZvaWQJCQkqZHJpdmVyX2RhdGE7CkBAIC01NCw3ICs1Myw3IEBACiAJdW5zaWduZWQgbG9uZwkJZGlzcGF0Y2hlZFtCTEtfTVFfTUFYX0RJU1BBVENIX09SREVSXTsKIAogCXVuc2lnbmVkIGludAkJbnVtYV9ub2RlOwotCXVuc2lnbmVkIGludAkJY21kX3NpemU7CS8qIHBlci1yZXF1ZXN0IGV4dHJhIGRhdGEgKi8KKwl1bnNpZ25lZCBpbnQJCXF1ZXVlX251bTsKIAogCWF0b21pY190CQlucl9hY3RpdmU7CiAKQEAgLTE5NSwxMyArMTk0LDE2IEBACiBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqYmxrX21xX21hcF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBjb25zdCBpbnQgY3R4X2luZGV4KTsKIHN0cnVjdCBibGtfbXFfaHdfY3R4ICpibGtfbXFfYWxsb2Nfc2luZ2xlX2h3X3F1ZXVlKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqLCB1bnNpZ25lZCBpbnQsIGludCk7CiAKK2ludCBibGtfbXFfcmVxdWVzdF9zdGFydGVkKHN0cnVjdCByZXF1ZXN0ICpycSk7CiB2b2lkIGJsa19tcV9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSk7CiB2b2lkIGJsa19tcV9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcik7CiB2b2lkIF9fYmxrX21xX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yKTsKIAogdm9pZCBibGtfbXFfcmVxdWV1ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSk7CiB2b2lkIGJsa19tcV9hZGRfdG9fcmVxdWV1ZV9saXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgYm9vbCBhdF9oZWFkKTsKK3ZvaWQgYmxrX21xX2NhbmNlbF9yZXF1ZXVlX3dvcmsoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogdm9pZCBibGtfbXFfa2lja19yZXF1ZXVlX2xpc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwordm9pZCBibGtfbXFfYWJvcnRfcmVxdWV1ZV9saXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIHZvaWQgYmxrX21xX2NvbXBsZXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTsKIAogdm9pZCBibGtfbXFfc3RvcF9od19xdWV1ZShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCk7CkBAIC0yMTIsNiArMjE0LDggQEAKIHZvaWQgYmxrX21xX2RlbGF5X3F1ZXVlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCB1bnNpZ25lZCBsb25nIG1zZWNzKTsKIHZvaWQgYmxrX21xX3RhZ19idXN5X2l0ZXIoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIGJ1c3lfaXRlcl9mbiAqZm4sCiAJCXZvaWQgKnByaXYpOwordm9pZCBibGtfbXFfdW5mcmVlemVfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwordm9pZCBibGtfbXFfZnJlZXplX3F1ZXVlX3N0YXJ0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIAogLyoKICAqIERyaXZlciBjb21tYW5kIGRhdGEgaXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHJlcXVlc3QuIFNvIHN1YnRyYWN0IHJlcXVlc3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCmluZGV4IDQ0NWQ1OTIuLmMyOTRlM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaApAQCAtMTkwLDYgKzE5MCw3IEBACiAJX19SRVFfUE0sCQkvKiBydW50aW1lIHBtIHJlcXVlc3QgKi8KIAlfX1JFUV9IQVNIRUQsCQkvKiBvbiBJTyBzY2hlZHVsZXIgbWVyZ2UgaGFzaCAqLwogCV9fUkVRX01RX0lORkxJR0hULAkvKiB0cmFjayBpbmZsaWdodCBmb3IgTVEgKi8KKwlfX1JFUV9OT19USU1FT1VULAkvKiByZXF1ZXN0cyBtYXkgbmV2ZXIgZXhwaXJlICovCiAJX19SRVFfTlJfQklUUywJCS8qIHN0b3BzIGhlcmUgKi8KIH07CiAKQEAgLTI0Myw1ICsyNDQsNiBAQAogI2RlZmluZSBSRVFfUE0JCQkoMVVMTCA8PCBfX1JFUV9QTSkKICNkZWZpbmUgUkVRX0hBU0hFRAkJKDFVTEwgPDwgX19SRVFfSEFTSEVEKQogI2RlZmluZSBSRVFfTVFfSU5GTElHSFQJCSgxVUxMIDw8IF9fUkVRX01RX0lORkxJR0hUKQorI2RlZmluZSBSRVFfTk9fVElNRU9VVAkJKDFVTEwgPDwgX19SRVFfTk9fVElNRU9VVCkKIAogI2VuZGlmIC8qIF9fTElOVVhfQkxLX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2VwaC9vc2RfY2xpZW50LmggYi9pbmNsdWRlL2xpbnV4L2NlcGgvb3NkX2NsaWVudC5oCmluZGV4IDVkODY0MTYuLjYxYjE5YzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2VwaC9vc2RfY2xpZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9jZXBoL29zZF9jbGllbnQuaApAQCAtODcsOCArODcsOCBAQAogCQkJc3RydWN0IGNlcGhfb3NkX2RhdGEgb3NkX2RhdGE7CiAJCX0gZXh0ZW50OwogCQlzdHJ1Y3QgewotCQkJX19sZTMyIG5hbWVfbGVuOwotCQkJX19sZTMyIHZhbHVlX2xlbjsKKwkJCXUzMiBuYW1lX2xlbjsKKwkJCXUzMiB2YWx1ZV9sZW47CiAJCQlfX3U4IGNtcF9vcDsgICAgICAgLyogQ0VQSF9PU0RfQ01QWEFUVFJfT1BfKiAqLwogCQkJX191OCBjbXBfbW9kZTsgICAgIC8qIENFUEhfT1NEX0NNUFhBVFRSX01PREVfKiAqLwogCQkJc3RydWN0IGNlcGhfb3NkX2RhdGEgb3NkX2RhdGE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKaW5kZXggYTFjODFmOC4uMzMwNjNmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtMjE1LDcgKzIxNSw3IEBACiAJfQogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19hc3NpZ25fb25jZV9zaXplKHZvbGF0aWxlIHZvaWQgKnAsIHZvaWQgKnJlcywgaW50IHNpemUpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX193cml0ZV9vbmNlX3NpemUodm9sYXRpbGUgdm9pZCAqcCwgdm9pZCAqcmVzLCBpbnQgc2l6ZSkKIHsKIAlzd2l0Y2ggKHNpemUpIHsKIAljYXNlIDE6ICoodm9sYXRpbGUgX191OCAqKXAgPSAqKF9fdTggKilyZXM7IGJyZWFrOwpAQCAtMjM1LDE1ICsyMzUsMTUgQEAKIC8qCiAgKiBQcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIG1lcmdpbmcgb3IgcmVmZXRjaGluZyByZWFkcyBvciB3cml0ZXMuIFRoZQogICogY29tcGlsZXIgaXMgYWxzbyBmb3JiaWRkZW4gZnJvbSByZW9yZGVyaW5nIHN1Y2Nlc3NpdmUgaW5zdGFuY2VzIG9mCi0gKiBSRUFEX09OQ0UsIEFTU0lHTl9PTkNFIGFuZCBBQ0NFU1NfT05DRSAoc2VlIGJlbG93KSwgYnV0IG9ubHkgd2hlbiB0aGUKKyAqIFJFQURfT05DRSwgV1JJVEVfT05DRSBhbmQgQUNDRVNTX09OQ0UgKHNlZSBiZWxvdyksIGJ1dCBvbmx5IHdoZW4gdGhlCiAgKiBjb21waWxlciBpcyBhd2FyZSBvZiBzb21lIHBhcnRpY3VsYXIgb3JkZXJpbmcuICBPbmUgd2F5IHRvIG1ha2UgdGhlCiAgKiBjb21waWxlciBhd2FyZSBvZiBvcmRlcmluZyBpcyB0byBwdXQgdGhlIHR3byBpbnZvY2F0aW9ucyBvZiBSRUFEX09OQ0UsCi0gKiBBU1NJR05fT05DRSBvciBBQ0NFU1NfT05DRSgpIGluIGRpZmZlcmVudCBDIHN0YXRlbWVudHMuCisgKiBXUklURV9PTkNFIG9yIEFDQ0VTU19PTkNFKCkgaW4gZGlmZmVyZW50IEMgc3RhdGVtZW50cy4KICAqCiAgKiBJbiBjb250cmFzdCB0byBBQ0NFU1NfT05DRSB0aGVzZSB0d28gbWFjcm9zIHdpbGwgYWxzbyB3b3JrIG9uIGFnZ3JlZ2F0ZQogICogZGF0YSB0eXBlcyBsaWtlIHN0cnVjdHMgb3IgdW5pb25zLiBJZiB0aGUgc2l6ZSBvZiB0aGUgYWNjZXNzZWQgZGF0YQogICogdHlwZSBleGNlZWRzIHRoZSB3b3JkIHNpemUgb2YgdGhlIG1hY2hpbmUgKGUuZy4sIDMyIGJpdHMgb3IgNjQgYml0cykKLSAqIFJFQURfT05DRSgpIGFuZCBBU1NJR05fT05DRSgpICB3aWxsIGZhbGwgYmFjayB0byBtZW1jcHkgYW5kIHByaW50IGEKKyAqIFJFQURfT05DRSgpIGFuZCBXUklURV9PTkNFKCkgIHdpbGwgZmFsbCBiYWNrIHRvIG1lbWNweSBhbmQgcHJpbnQgYQogICogY29tcGlsZS10aW1lIHdhcm5pbmcuCiAgKgogICogVGhlaXIgdHdvIG1ham9yIHVzZSBjYXNlcyBhcmU6ICgxKSBNZWRpYXRpbmcgY29tbXVuaWNhdGlvbiBiZXR3ZWVuCkBAIC0yNTcsOCArMjU3LDggQEAKICNkZWZpbmUgUkVBRF9PTkNFKHgpIFwKIAkoeyB0eXBlb2YoeCkgX192YWw7IF9fcmVhZF9vbmNlX3NpemUoJngsICZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7IF9fdmFsOyB9KQogCi0jZGVmaW5lIEFTU0lHTl9PTkNFKHZhbCwgeCkgXAotCSh7IHR5cGVvZih4KSBfX3ZhbDsgX192YWwgPSB2YWw7IF9fYXNzaWduX29uY2Vfc2l6ZSgmeCwgJl9fdmFsLCBzaXplb2YoX192YWwpKTsgX192YWw7IH0pCisjZGVmaW5lIFdSSVRFX09OQ0UoeCwgdmFsKSBcCisJKHsgdHlwZW9mKHgpIF9fdmFsOyBfX3ZhbCA9IHZhbDsgX193cml0ZV9vbmNlX3NpemUoJngsICZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7IF9fdmFsOyB9KQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdV9jb29saW5nLmggYi9pbmNsdWRlL2xpbnV4L2NwdV9jb29saW5nLmgKaW5kZXggYzMwM2QzOC4uYmQ5NTUyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVfY29vbGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1X2Nvb2xpbmcuaApAQCAtNTAsNyArNTAsNyBAQAogb2ZfY3B1ZnJlcV9jb29saW5nX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNsaXBfY3B1cykKIHsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKIH0KICNlbmRpZgogCkBAIC02NSwxMyArNjUsMTMgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKgogY3B1ZnJlcV9jb29saW5nX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjbGlwX2NwdXMpCiB7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7CiB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICoKIG9mX2NwdWZyZXFfY29vbGluZ19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjbGlwX2NwdXMpCiB7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7CiB9CiBzdGF0aWMgaW5saW5lCiB2b2lkIGNwdWZyZXFfY29vbGluZ191bnJlZ2lzdGVyKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVpZGxlLmggYi9pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaAppbmRleCBhMDdlMDg3Li5hYjcwZjNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaApAQCAtNTMsNyArNTMsNiBAQAogfTsKIAogLyogSWRsZSBTdGF0ZSBGbGFncyAqLwotI2RlZmluZSBDUFVJRExFX0ZMQUdfVElNRV9JTlZBTElECSgweDAxKSAvKiBpcyByZXNpZGVuY3kgdGltZSBtZWFzdXJhYmxlPyAqLwogI2RlZmluZSBDUFVJRExFX0ZMQUdfQ09VUExFRAkoMHgwMikgLyogc3RhdGUgYXBwbGllcyB0byBtdWx0aXBsZSBjcHVzICovCiAjZGVmaW5lIENQVUlETEVfRkxBR19USU1FUl9TVE9QICgweDA0KSAgLyogdGltZXIgaXMgc3RvcHBlZCBvbiB0aGlzIHN0YXRlICovCiAKQEAgLTg5LDggKzg4LDYgQEAKIC8qKgogICogY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3kgLSByZXRyaWV2ZXMgdGhlIGxhc3Qgc3RhdGUncyByZXNpZGVuY3kgdGltZQogICogQGRldjogdGhlIHRhcmdldCBDUFUKLSAqCi0gKiBOT1RFOiB0aGlzIHZhbHVlIGlzIGludmFsaWQgaWYgQ1BVSURMRV9GTEFHX1RJTUVfSU5WQUxJRCBpcyBzZXQKICAqLwogc3RhdGljIGlubGluZSBpbnQgY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3koc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggZjkwYzAyOC4uNDJlZmUxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMTM1LDcgKzEzNSw3IEBACiAjZGVmaW5lIEZNT0RFX0NBTl9XUklURSAgICAgICAgICgoX19mb3JjZSBmbW9kZV90KTB4NDAwMDApCiAKIC8qIEZpbGUgd2FzIG9wZW5lZCBieSBmYW5vdGlmeSBhbmQgc2hvdWxkbid0IGdlbmVyYXRlIGZhbm90aWZ5IGV2ZW50cyAqLwotI2RlZmluZSBGTU9ERV9OT05PVElGWQkJKChfX2ZvcmNlIGZtb2RlX3QpMHgxMDAwMDAwKQorI2RlZmluZSBGTU9ERV9OT05PVElGWQkJKChfX2ZvcmNlIGZtb2RlX3QpMHg0MDAwMDAwKQogCiAvKgogICogRmxhZyBmb3IgcndfY29weV9jaGVja191dmVjdG9yIGFuZCBjb21wYXRfcndfY29weV9jaGVja191dmVjdG9yCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9nZW5ldGxpbmsuaAppbmRleCA1NWI2ODU3Li4wOTQ2MGQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuZXRsaW5rLmgKQEAgLTExLDYgKzExLDEwIEBACiBleHRlcm4gaW50IGxvY2tkZXBfZ2VubF9pc19oZWxkKHZvaWQpOwogI2VuZGlmCiAKKy8qIGZvciBzeW5jaHJvbmlzYXRpb24gYmV0d2VlbiBhZl9uZXRsaW5rIGFuZCBnZW5ldGxpbmsgKi8KK2V4dGVybiBhdG9taWNfdCBnZW5sX3NrX2Rlc3RydWN0aW5nX2NudDsKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBnZW5sX3NrX2Rlc3RydWN0aW5nX3dhaXRxOworCiAvKioKICAqIHJjdV9kZXJlZmVyZW5jZV9nZW5sIC0gcmN1X2RlcmVmZXJlbmNlIHdpdGggZGVidWcgY2hlY2tpbmcKICAqIEBwOiBUaGUgcG9pbnRlciB0byByZWFkLCBwcmlvciB0byBkZXJlZmVyZW5jaW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy5oIGIvaW5jbHVkZS9saW51eC9pMmMuaAppbmRleCBlM2ExNzIxLi43Yzc2OTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLmgKQEAgLTIyOCw3ICsyMjgsOSBAQAogCXN0cnVjdCBkZXZpY2UgZGV2OwkJLyogdGhlIGRldmljZSBzdHJ1Y3R1cmUJCSovCiAJaW50IGlycTsJCQkvKiBpcnEgaXNzdWVkIGJ5IGRldmljZQkJKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRldGVjdGVkOworI2lmIElTX0VOQUJMRUQoQ09ORklHX0kyQ19TTEFWRSkKIAlpMmNfc2xhdmVfY2JfdCBzbGF2ZV9jYjsJLyogY2FsbGJhY2sgZm9yIHNsYXZlIG1vZGUJKi8KKyNlbmRpZgogfTsKICNkZWZpbmUgdG9faTJjX2NsaWVudChkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGkyY19jbGllbnQsIGRldikKIApAQCAtMjUzLDYgKzI1NSw3IEBACiAKIC8qIEkyQyBzbGF2ZSBzdXBwb3J0ICovCiAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19JMkNfU0xBVkUpCiBlbnVtIGkyY19zbGF2ZV9ldmVudCB7CiAJSTJDX1NMQVZFX1JFUV9SRUFEX1NUQVJULAogCUkyQ19TTEFWRV9SRVFfUkVBRF9FTkQsCkBAIC0yNjksNiArMjcyLDcgQEAKIHsKIAlyZXR1cm4gY2xpZW50LT5zbGF2ZV9jYihjbGllbnQsIGV2ZW50LCB2YWwpOwogfQorI2VuZGlmCiAKIC8qKgogICogc3RydWN0IGkyY19ib2FyZF9pbmZvIC0gdGVtcGxhdGUgZm9yIGRldmljZSBjcmVhdGlvbgpAQCAtNDA0LDggKzQwOCwxMCBAQAogCS8qIFRvIGRldGVybWluZSB3aGF0IHRoZSBhZGFwdGVyIHN1cHBvcnRzICovCiAJdTMyICgqZnVuY3Rpb25hbGl0eSkgKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKIAorI2lmIElTX0VOQUJMRUQoQ09ORklHX0kyQ19TTEFWRSkKIAlpbnQgKCpyZWdfc2xhdmUpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCWludCAoKnVucmVnX3NsYXZlKShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKKyNlbmRpZgogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tkYi5oIGIvaW5jbHVkZS9saW51eC9rZGIuaAppbmRleCAyOTBkYjEyLi43NWFlMmUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tkYi5oCisrKyBiL2luY2x1ZGUvbGludXgva2RiLmgKQEAgLTEzLDExICsxMyw1NCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CiAgKi8KIAorLyogU2hpZnRlZCB2ZXJzaW9ucyBvZiB0aGUgY29tbWFuZCBlbmFibGUgYml0cyBhcmUgYmUgdXNlZCBpZiB0aGUgY29tbWFuZAorICogaGFzIG5vIGFyZ3VtZW50cyAoc2VlIGtkYl9jaGVja19mbGFncykuIFRoaXMgYWxsb3dzIGNvbW1hbmRzLCBzdWNoIGFzCisgKiBnbywgdG8gaGF2ZSBkaWZmZXJlbnQgcGVybWlzc2lvbnMgZGVwZW5kaW5nIHVwb24gd2hldGhlciBpdCBpcyBjYWxsZWQKKyAqIHdpdGggYW4gYXJndW1lbnQuCisgKi8KKyNkZWZpbmUgS0RCX0VOQUJMRV9OT19BUkdTX1NISUZUIDEwCisKIHR5cGVkZWYgZW51bSB7Ci0JS0RCX1JFUEVBVF9OT05FID0gMCwJLyogRG8gbm90IHJlcGVhdCB0aGlzIGNvbW1hbmQgKi8KLQlLREJfUkVQRUFUX05PX0FSR1MsCS8qIFJlcGVhdCB0aGUgY29tbWFuZCB3aXRob3V0IGFyZ3VtZW50cyAqLwotCUtEQl9SRVBFQVRfV0lUSF9BUkdTLAkvKiBSZXBlYXQgdGhlIGNvbW1hbmQgaW5jbHVkaW5nIGl0cyBhcmd1bWVudHMgKi8KLX0ga2RiX3JlcGVhdF90OworCUtEQl9FTkFCTEVfQUxMID0gKDEgPDwgMCksIC8qIEVuYWJsZSBldmVyeXRoaW5nICovCisJS0RCX0VOQUJMRV9NRU1fUkVBRCA9ICgxIDw8IDEpLAorCUtEQl9FTkFCTEVfTUVNX1dSSVRFID0gKDEgPDwgMiksCisJS0RCX0VOQUJMRV9SRUdfUkVBRCA9ICgxIDw8IDMpLAorCUtEQl9FTkFCTEVfUkVHX1dSSVRFID0gKDEgPDwgNCksCisJS0RCX0VOQUJMRV9JTlNQRUNUID0gKDEgPDwgNSksCisJS0RCX0VOQUJMRV9GTE9XX0NUUkwgPSAoMSA8PCA2KSwKKwlLREJfRU5BQkxFX1NJR05BTCA9ICgxIDw8IDcpLAorCUtEQl9FTkFCTEVfUkVCT09UID0gKDEgPDwgOCksCisJLyogVXNlciBleHBvc2VkIHZhbHVlcyBzdG9wIGhlcmUsIGFsbCByZW1haW5pbmcgZmxhZ3MgYXJlCisJICogZXhjbHVzaXZlbHkgdXNlZCB0byBkZXNjcmliZSBhIGNvbW1hbmRzIGJlaGF2aW91ci4KKwkgKi8KKworCUtEQl9FTkFCTEVfQUxXQVlTX1NBRkUgPSAoMSA8PCA5KSwKKwlLREJfRU5BQkxFX01BU0sgPSAoMSA8PCBLREJfRU5BQkxFX05PX0FSR1NfU0hJRlQpIC0gMSwKKworCUtEQl9FTkFCTEVfQUxMX05PX0FSR1MgPSBLREJfRU5BQkxFX0FMTCA8PCBLREJfRU5BQkxFX05PX0FSR1NfU0hJRlQsCisJS0RCX0VOQUJMRV9NRU1fUkVBRF9OT19BUkdTID0gS0RCX0VOQUJMRV9NRU1fUkVBRAorCQkJCSAgICAgIDw8IEtEQl9FTkFCTEVfTk9fQVJHU19TSElGVCwKKwlLREJfRU5BQkxFX01FTV9XUklURV9OT19BUkdTID0gS0RCX0VOQUJMRV9NRU1fV1JJVEUKKwkJCQkgICAgICAgPDwgS0RCX0VOQUJMRV9OT19BUkdTX1NISUZULAorCUtEQl9FTkFCTEVfUkVHX1JFQURfTk9fQVJHUyA9IEtEQl9FTkFCTEVfUkVHX1JFQUQKKwkJCQkgICAgICA8PCBLREJfRU5BQkxFX05PX0FSR1NfU0hJRlQsCisJS0RCX0VOQUJMRV9SRUdfV1JJVEVfTk9fQVJHUyA9IEtEQl9FTkFCTEVfUkVHX1dSSVRFCisJCQkJICAgICAgIDw8IEtEQl9FTkFCTEVfTk9fQVJHU19TSElGVCwKKwlLREJfRU5BQkxFX0lOU1BFQ1RfTk9fQVJHUyA9IEtEQl9FTkFCTEVfSU5TUEVDVAorCQkJCSAgICAgPDwgS0RCX0VOQUJMRV9OT19BUkdTX1NISUZULAorCUtEQl9FTkFCTEVfRkxPV19DVFJMX05PX0FSR1MgPSBLREJfRU5BQkxFX0ZMT1dfQ1RSTAorCQkJCSAgICAgICA8PCBLREJfRU5BQkxFX05PX0FSR1NfU0hJRlQsCisJS0RCX0VOQUJMRV9TSUdOQUxfTk9fQVJHUyA9IEtEQl9FTkFCTEVfU0lHTkFMCisJCQkJICAgIDw8IEtEQl9FTkFCTEVfTk9fQVJHU19TSElGVCwKKwlLREJfRU5BQkxFX1JFQk9PVF9OT19BUkdTID0gS0RCX0VOQUJMRV9SRUJPT1QKKwkJCQkgICAgPDwgS0RCX0VOQUJMRV9OT19BUkdTX1NISUZULAorCUtEQl9FTkFCTEVfQUxXQVlTX1NBRkVfTk9fQVJHUyA9IEtEQl9FTkFCTEVfQUxXQVlTX1NBRkUKKwkJCQkJIDw8IEtEQl9FTkFCTEVfTk9fQVJHU19TSElGVCwKKwlLREJfRU5BQkxFX01BU0tfTk9fQVJHUyA9IEtEQl9FTkFCTEVfTUFTSyA8PCBLREJfRU5BQkxFX05PX0FSR1NfU0hJRlQsCisKKwlLREJfUkVQRUFUX05PX0FSR1MgPSAweDQwMDAwMDAwLCAvKiBSZXBlYXQgdGhlIGNvbW1hbmQgdy9vIGFyZ3VtZW50cyAqLworCUtEQl9SRVBFQVRfV0lUSF9BUkdTID0gMHg4MDAwMDAwMCwgLyogUmVwZWF0IHRoZSBjb21tYW5kIHdpdGggYXJncyAqLworfSBrZGJfY21kZmxhZ3NfdDsKIAogdHlwZWRlZiBpbnQgKCprZGJfZnVuY190KShpbnQsIGNvbnN0IGNoYXIgKiopOwogCkBAIC02Miw2ICsxMDUsNyBAQAogI2RlZmluZSBLREJfQkFETEVOR1RICSgtMTkpCiAjZGVmaW5lIEtEQl9OT0JQCSgtMjApCiAjZGVmaW5lIEtEQl9CQURBRERSCSgtMjEpCisjZGVmaW5lIEtEQl9OT1BFUk0JKC0yMikKIAogLyoKICAqIGtkYl9kaWVtc2cKQEAgLTE0NiwxNyArMTkwLDE3IEBACiAKIC8qIER5bmFtaWMga2RiIHNoZWxsIGNvbW1hbmQgcmVnaXN0cmF0aW9uICovCiBleHRlcm4gaW50IGtkYl9yZWdpc3RlcihjaGFyICosIGtkYl9mdW5jX3QsIGNoYXIgKiwgY2hhciAqLCBzaG9ydCk7Ci1leHRlcm4gaW50IGtkYl9yZWdpc3Rlcl9yZXBlYXQoY2hhciAqLCBrZGJfZnVuY190LCBjaGFyICosIGNoYXIgKiwKLQkJCSAgICAgICBzaG9ydCwga2RiX3JlcGVhdF90KTsKK2V4dGVybiBpbnQga2RiX3JlZ2lzdGVyX2ZsYWdzKGNoYXIgKiwga2RiX2Z1bmNfdCwgY2hhciAqLCBjaGFyICosCisJCQkgICAgICBzaG9ydCwga2RiX2NtZGZsYWdzX3QpOwogZXh0ZXJuIGludCBrZGJfdW5yZWdpc3RlcihjaGFyICopOwogI2Vsc2UgLyogISBDT05GSUdfS0dEQl9LREIgKi8KIHN0YXRpYyBpbmxpbmUgX19wcmludGYoMSwgMikgaW50IGtkYl9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBrZGJfaW5pdChpbnQgbGV2ZWwpIHt9CiBzdGF0aWMgaW5saW5lIGludCBrZGJfcmVnaXN0ZXIoY2hhciAqY21kLCBrZGJfZnVuY190IGZ1bmMsIGNoYXIgKnVzYWdlLAogCQkJICAgICAgIGNoYXIgKmhlbHAsIHNob3J0IG1pbmxlbikgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSBpbnQga2RiX3JlZ2lzdGVyX3JlcGVhdChjaGFyICpjbWQsIGtkYl9mdW5jX3QgZnVuYywgY2hhciAqdXNhZ2UsCi0JCQkJICAgICAgY2hhciAqaGVscCwgc2hvcnQgbWlubGVuLAotCQkJCSAgICAgIGtkYl9yZXBlYXRfdCByZXBlYXQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGtkYl9yZWdpc3Rlcl9mbGFncyhjaGFyICpjbWQsIGtkYl9mdW5jX3QgZnVuYywgY2hhciAqdXNhZ2UsCisJCQkJICAgICBjaGFyICpoZWxwLCBzaG9ydCBtaW5sZW4sCisJCQkJICAgICBrZGJfY21kZmxhZ3NfdCBmbGFncykgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQga2RiX3VucmVnaXN0ZXIoY2hhciAqY21kKSB7IHJldHVybiAwOyB9CiAjZW5kaWYJLyogQ09ORklHX0tHREJfS0RCICovCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDU0NDlkMmYuLjY0Y2U1OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTc2LDcgKzE3Niw3IEBACiAgKi8KICMgZGVmaW5lIG1pZ2h0X3NsZWVwKCkgXAogCWRvIHsgX19taWdodF9zbGVlcChfX0ZJTEVfXywgX19MSU5FX18sIDApOyBtaWdodF9yZXNjaGVkKCk7IH0gd2hpbGUgKDApCi0jIGRlZmluZSBzY2hlZF9hbm5vdGF0ZV9zbGVlcCgpCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKQorIyBkZWZpbmUgc2NoZWRfYW5ub3RhdGVfc2xlZXAoKQkoY3VycmVudC0+dGFza19zdGF0ZV9jaGFuZ2UgPSAwKQogI2Vsc2UKICAgc3RhdGljIGlubGluZSB2b2lkIF9fX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAogCQkJCSAgIGludCBwcmVlbXB0X29mZnNldCkgeyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCAyZDE4MjQxLi45MWY3MDVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTIzMSw2ICsyMzEsNyBAQAogCUFUQV9GTEFHX1NXX0FDVElWSVRZCT0gKDEgPDwgMjIpLCAvKiBkcml2ZXIgc3VwcG9ydHMgc3cgYWN0aXZpdHkKIAkJCQkJICAgICAgKiBsZWQgKi8KIAlBVEFfRkxBR19OT19ESVBNCT0gKDEgPDwgMjMpLCAvKiBob3N0IG5vdCBoYXBweSB3aXRoIERJUE0gKi8KKwlBVEFfRkxBR19MT1dUQUcJCT0gKDEgPDwgMjQpLCAvKiBob3N0IHdhbnRzIGxvd2VzdCBhdmFpbGFibGUgdGFnICovCiAKIAkvKiBiaXRzIDI0OjMxIG9mIGFwLT5mbGFncyBhcmUgcmVzZXJ2ZWQgZm9yIExMRCBzcGVjaWZpYyBmbGFncyAqLwogCkBAIC00MjIsNiArNDIzLDcgQEAKIAlBVEFfSE9SS0FHRV9OT19OQ1FfVFJJTQk9ICgxIDw8IDE5KSwJLyogZG9uJ3QgdXNlIHF1ZXVlZCBUUklNICovCiAJQVRBX0hPUktBR0VfTk9MUE0JPSAoMSA8PCAyMCksCS8qIGRvbid0IHVzZSBMUE0gKi8KIAlBVEFfSE9SS0FHRV9XRF9CUk9LRU5fTFBNID0gKDEgPDwgMjEpLAkvKiBzb21lIFdEcyBoYXZlIGJyb2tlbiBMUE0gKi8KKwlBVEFfSE9SS0FHRV9aRVJPX0FGVEVSX1RSSU0gPSAoMSA8PCAyMiksLyogZ3VhcmFudGVlcyB6ZXJvIGFmdGVyIHRyaW0gKi8KIAogCSAvKiBETUEgbWFzayBmb3IgdXNlciBETUEgY29udHJvbDogVXNlciB2aXNpYmxlIHZhbHVlczsgRE8gTk9UCiAJICAgIHJlbnVtYmVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oCmluZGV4IGNlNWRkYTg5Li5iMWZkNjc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaApAQCAtNTksNiArNTksNyBAQAogCVMyTVBTMTNfUkVHX0I2Q1RSTCwKIAlTMk1QUzEzX1JFR19CNk9VVCwKIAlTMk1QUzEzX1JFR19CN0NUUkwsCisJUzJNUFMxM19SRUdfQjdTVywKIAlTMk1QUzEzX1JFR19CN09VVCwKIAlTMk1QUzEzX1JFR19COENUUkwsCiAJUzJNUFMxM19SRUdfQjhPVVQsCkBAIC0xMDIsNiArMTAzLDcgQEAKIAlTMk1QUzEzX1JFR19MMjZDVFJMLAogCVMyTVBTMTNfUkVHX0wyN0NUUkwsCiAJUzJNUFMxM19SRUdfTDI4Q1RSTCwKKwlTMk1QUzEzX1JFR19MMjlDVFJMLAogCVMyTVBTMTNfUkVHX0wzMENUUkwsCiAJUzJNUFMxM19SRUdfTDMxQ1RSTCwKIAlTMk1QUzEzX1JFR19MMzJDVFJMLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvc3RtcGUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3N0bXBlLmgKaW5kZXggNTc1YTg2Yy4uZjc0MmI2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvc3RtcGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9zdG1wZS5oCkBAIC01MCw2ICs1MCw4IEBACiAJU1RNUEVfSURYX0dQRURSX01TQiwKIAlTVE1QRV9JRFhfR1BSRVJfTFNCLAogCVNUTVBFX0lEWF9HUEZFUl9MU0IsCisJU1RNUEVfSURYX0dQUFVSX0xTQiwKKwlTVE1QRV9JRFhfR1BQRFJfTFNCLAogCVNUTVBFX0lEWF9HUEFGUl9VX01TQiwKIAlTVE1QRV9JRFhfSUVHUElPUl9MU0IsCiAJU1RNUEVfSURYX0lTR1BJT1JfTFNCLApAQCAtMTEzLDI0ICsxMTUsNiBAQAogZXh0ZXJuIGludCBzdG1wZV9lbmFibGUoc3RydWN0IHN0bXBlICpzdG1wZSwgdW5zaWduZWQgaW50IGJsb2Nrcyk7CiBleHRlcm4gaW50IHN0bXBlX2Rpc2FibGUoc3RydWN0IHN0bXBlICpzdG1wZSwgdW5zaWduZWQgaW50IGJsb2Nrcyk7CiAKLXN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGE7Ci0KLS8qKgotICogc3RydWN0IHN0bXBlX2tleXBhZF9wbGF0Zm9ybV9kYXRhIC0gU1RNUEUga2V5cGFkIHBsYXRmb3JtIGRhdGEKLSAqIEBrZXltYXBfZGF0YToga2V5IG1hcCB0YWJsZSBhbmQgc2l6ZQotICogQGRlYm91bmNlX21zOiBkZWJvdW5jZSBpbnRlcnZhbCwgaW4gbXMuICBNYXhpbXVtIGlzCi0gKgkJICVTVE1QRV9LRVlQQURfTUFYX0RFQk9VTkNFLgotICogQHNjYW5fY291bnQ6IG51bWJlciBvZiBrZXkgc2Nhbm5pbmcgY3ljbGVzIHRvIGNvbmZpcm0ga2V5IGRhdGEuCi0gKgkJTWF4aW11bSBpcyAlU1RNUEVfS0VZUEFEX01BWF9TQ0FOX0NPVU5ULgotICogQG5vX2F1dG9yZXBlYXQ6IGRpc2FibGUga2V5IGF1dG9yZXBlYXQKLSAqLwotc3RydWN0IHN0bXBlX2tleXBhZF9wbGF0Zm9ybV9kYXRhIHsKLQljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YTsKLQl1bnNpZ25lZCBpbnQgZGVib3VuY2VfbXM7Ci0JdW5zaWduZWQgaW50IHNjYW5fY291bnQ7Ci0JYm9vbCBub19hdXRvcmVwZWF0OwotfTsKLQogI2RlZmluZSBTVE1QRV9HUElPX05PUkVRXzgxMV9UT1VDSAkoMHhmMCkKIAogLyoqCkBAIC0xOTksNyArMTgzLDYgQEAKICAqIEBpcnFfZ3BpbzogZ3BpbyBudW1iZXIgb3ZlciB3aGljaCBpcnEgd2lsbCBiZSByZXF1ZXN0ZWQgKHNpZ25pZmljYW50IG9ubHkgaWYKICAqCSAgICAgIGlycV9vdmVyX2dwaW8gaXMgdHJ1ZSkKICAqIEBncGlvOiBHUElPLXNwZWNpZmljIHBsYXRmb3JtIGRhdGEKLSAqIEBrZXlwYWQ6IGtleXBhZC1zcGVjaWZpYyBwbGF0Zm9ybSBkYXRhCiAgKiBAdHM6IHRvdWNoc2NyZWVuLXNwZWNpZmljIHBsYXRmb3JtIGRhdGEKICAqLwogc3RydWN0IHN0bXBlX3BsYXRmb3JtX2RhdGEgewpAQCAtMjEyLDcgKzE5NSw2IEBACiAJaW50IGF1dG9zbGVlcF90aW1lb3V0OwogCiAJc3RydWN0IHN0bXBlX2dwaW9fcGxhdGZvcm1fZGF0YSAqZ3BpbzsKLQlzdHJ1Y3Qgc3RtcGVfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKmtleXBhZDsKIAlzdHJ1Y3Qgc3RtcGVfdHNfcGxhdGZvcm1fZGF0YSAqdHM7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggZjgwZDAxOS4uZGQ1ZWEzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTA3MCw2ICsxMDcwLDcgQEAKICNkZWZpbmUgVk1fRkFVTFRfV1JJVEUJMHgwMDA4CS8qIFNwZWNpYWwgY2FzZSBmb3IgZ2V0X3VzZXJfcGFnZXMgKi8KICNkZWZpbmUgVk1fRkFVTFRfSFdQT0lTT04gMHgwMDEwCS8qIEhpdCBwb2lzb25lZCBzbWFsbCBwYWdlICovCiAjZGVmaW5lIFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFIDB4MDAyMCAgLyogSGl0IHBvaXNvbmVkIGxhcmdlIHBhZ2UuIEluZGV4IGVuY29kZWQgaW4gdXBwZXIgYml0cyAqLworI2RlZmluZSBWTV9GQVVMVF9TSUdTRUdWIDB4MDA0MAogCiAjZGVmaW5lIFZNX0ZBVUxUX05PUEFHRQkweDAxMDAJLyogLT5mYXVsdCBpbnN0YWxsZWQgdGhlIHB0ZSwgbm90IHJldHVybiBwYWdlICovCiAjZGVmaW5lIFZNX0ZBVUxUX0xPQ0tFRAkweDAyMDAJLyogLT5mYXVsdCBsb2NrZWQgdGhlIHJldHVybmVkIHBhZ2UgKi8KQEAgLTEwNzgsOCArMTA3OSw5IEBACiAKICNkZWZpbmUgVk1fRkFVTFRfSFdQT0lTT05fTEFSR0VfTUFTSyAweGYwMDAgLyogZW5jb2RlcyBocGFnZSBpbmRleCBmb3IgbGFyZ2UgaHdwb2lzb24gKi8KIAotI2RlZmluZSBWTV9GQVVMVF9FUlJPUgkoVk1fRkFVTFRfT09NIHwgVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfSFdQT0lTT04gfCBcCi0JCQkgVk1fRkFVTFRfRkFMTEJBQ0sgfCBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSkKKyNkZWZpbmUgVk1fRkFVTFRfRVJST1IJKFZNX0ZBVUxUX09PTSB8IFZNX0ZBVUxUX1NJR0JVUyB8IFZNX0ZBVUxUX1NJR1NFR1YgfCBcCisJCQkgVk1fRkFVTFRfSFdQT0lTT04gfCBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSB8IFwKKwkJCSBWTV9GQVVMVF9GQUxMQkFDSykKIAogLyogRW5jb2RlIGhzdGF0ZSBpbmRleCBmb3IgYSBod3BvaXNvbmVkIGxhcmdlIHBhZ2UgKi8KICNkZWZpbmUgVk1fRkFVTFRfU0VUX0hJTkRFWCh4KSAoKHgpIDw8IDEyKQpAQCAtMTk1Miw3ICsxOTU0LDcgQEAKICNpZiBWTV9HUk9XU1VQCiBleHRlcm4gaW50IGV4cGFuZF91cHdhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogI2Vsc2UKLSAgI2RlZmluZSBleHBhbmRfdXB3YXJkcyh2bWEsIGFkZHJlc3MpIGRvIHsgfSB3aGlsZSAoMCkKKyAgI2RlZmluZSBleHBhbmRfdXB3YXJkcyh2bWEsIGFkZHJlc3MpICgwKQogI2VuZGlmCiAKIC8qIExvb2sgdXAgdGhlIGZpcnN0IFZNQSB3aGljaCBzYXRpc2ZpZXMgIGFkZHIgPCB2bV9lbmQsICBOVUxMIGlmIG5vbmUuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9zZGhjaS5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2RoY2kuaAppbmRleCAzNzVhZjgwLi5mNzY3YTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9zZGhjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL3NkaGNpLmgKQEAgLTEzNyw2ICsxMzcsNyBAQAogI2RlZmluZSBTREhDSV9TRFIxMDRfTkVFRFNfVFVOSU5HICgxPDwxMCkJLyogU0RSMTA0L0hTMjAwIG5lZWRzIHR1bmluZyAqLwogI2RlZmluZSBTREhDSV9VU0lOR19SRVRVTklOR19USU1FUiAoMTw8MTEpCS8qIEhvc3QgaXMgdXNpbmcgYSByZXR1bmluZyB0aW1lciBmb3IgdGhlIGNhcmQgKi8KICNkZWZpbmUgU0RIQ0lfVVNFXzY0X0JJVF9ETUEJKDE8PDEyKQkvKiBVc2UgNjQtYml0IERNQSAqLworI2RlZmluZSBTREhDSV9IUzQwMF9UVU5JTkcJKDE8PDEzKQkvKiBUdW5pbmcgZm9yIEhTNDAwICovCiAKIAl1bnNpZ25lZCBpbnQgdmVyc2lvbjsJLyogU0RIQ0kgc3BlYy4gdmVyc2lvbiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCBlYmZiMGUxLi5iNjUzZDdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTQ0NCw3ICs0NDQsNyBAQAogI2RlZmluZSBtb2R1bGVfcHV0X2FuZF9leGl0KGNvZGUpIF9fbW9kdWxlX3B1dF9hbmRfZXhpdChUSElTX01PRFVMRSwgY29kZSkKIAogI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECi11bnNpZ25lZCBsb25nIG1vZHVsZV9yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpOworaW50IG1vZHVsZV9yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpOwogdm9pZCBfX3N5bWJvbF9wdXQoY29uc3QgY2hhciAqc3ltYm9sKTsKICNkZWZpbmUgc3ltYm9sX3B1dCh4KSBfX3N5bWJvbF9wdXQoVk1MSU5VWF9TWU1CT0xfU1RSKHgpKQogdm9pZCBzeW1ib2xfcHV0X2FkZHIodm9pZCAqYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZWxvYWRlci5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVsb2FkZXIuaAppbmRleCA3ZWViOWJiLi5mNzU1NjI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZWxvYWRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlbG9hZGVyLmgKQEAgLTI2LDcgKzI2LDcgQEAKIHZvaWQgKm1vZHVsZV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpOwogCiAvKiBGcmVlIG1lbW9yeSByZXR1cm5lZCBmcm9tIG1vZHVsZV9hbGxvYy4gKi8KLXZvaWQgbW9kdWxlX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKTsKK3ZvaWQgbW9kdWxlX21lbWZyZWUodm9pZCAqbW9kdWxlX3JlZ2lvbik7CiAKIC8qCiAgKiBBcHBseSB0aGUgZ2l2ZW4gcmVsb2NhdGlvbiB0byB0aGUgKHNpbXBsaWZpZWQpIEVMRi4gIFJldHVybiAtZXJyb3IKQEAgLTgyLDQgKzgyLDYgQEAKIC8qIEFueSBjbGVhbnVwIG5lZWRlZCB3aGVuIG1vZHVsZSBsZWF2ZXMuICovCiB2b2lkIG1vZHVsZV9hcmNoX2NsZWFudXAoc3RydWN0IG1vZHVsZSAqbW9kKTsKIAorLyogQW55IGNsZWFudXAgYmVmb3JlIGZyZWVpbmcgbW9kLT5tb2R1bGVfaW5pdCAqLwordm9pZCBtb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggYzMxZjc0ZC4uNTJmZDhlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC04NTIsMTEgKzg1MiwxMSBAQAogICoJMy4gVXBkYXRlIGRldi0+c3RhdHMgYXN5bmNocm9ub3VzbHkgYW5kIGF0b21pY2FsbHksIGFuZCBkZWZpbmUKICAqCSAgIG5laXRoZXIgb3BlcmF0aW9uLgogICoKLSAqIGludCAoKm5kb192bGFuX3J4X2FkZF92aWQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90bywgdTE2dCB2aWQpOworICogaW50ICgqbmRvX3ZsYW5fcnhfYWRkX3ZpZCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKTsKICAqCUlmIGRldmljZSBzdXBwb3J0IFZMQU4gZmlsdGVyaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYQogICoJVkxBTiBpZCBpcyByZWdpc3RlcmVkLgogICoKLSAqIGludCAoKm5kb192bGFuX3J4X2tpbGxfdmlkKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB2aWQpOworICogaW50ICgqbmRvX3ZsYW5fcnhfa2lsbF92aWQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZCk7CiAgKglJZiBkZXZpY2Ugc3VwcG9ydCBWTEFOIGZpbHRlcmluZyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEKICAqCVZMQU4gaWQgaXMgdW5yZWdpc3RlcmVkLgogICoKQEAgLTEwMTIsMTIgKzEwMTIsMTUgQEAKICAqCUNhbGxiYWNrIHRvIHVzZSBmb3IgeG1pdCBvdmVyIHRoZSBhY2NlbGVyYXRlZCBzdGF0aW9uLiBUaGlzCiAgKglpcyB1c2VkIGluIHBsYWNlIG9mIG5kb19zdGFydF94bWl0IG9uIGFjY2VsZXJhdGVkIG5ldAogICoJZGV2aWNlcy4KLSAqIGJvb2wJKCpuZG9fZ3NvX2NoZWNrKSAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAqCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyAqIG5ldGRldl9mZWF0dXJlc190ICgqbmRvX2ZlYXR1cmVzX2NoZWNrKSAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKyAqCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldgorICoJCQkJCSAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7CiAgKglDYWxsZWQgYnkgY29yZSB0cmFuc21pdCBwYXRoIHRvIGRldGVybWluZSBpZiBkZXZpY2UgaXMgY2FwYWJsZSBvZgotICoJcGVyZm9ybWluZyBHU08gb24gYSBwYWNrZXQuIFRoZSBkZXZpY2UgcmV0dXJucyB0cnVlIGlmIGl0IGlzCi0gKglhYmxlIHRvIEdTTyB0aGUgcGFja2V0LCBmYWxzZSBvdGhlcndpc2UuIElmIHRoZSByZXR1cm4gdmFsdWUgaXMKLSAqCWZhbHNlIHRoZSBzdGFjayB3aWxsIGRvIHNvZnR3YXJlIEdTTy4KKyAqCXBlcmZvcm1pbmcgb2ZmbG9hZCBvcGVyYXRpb25zIG9uIGEgZ2l2ZW4gcGFja2V0LiBUaGlzIGlzIHRvIGdpdmUKKyAqCXRoZSBkZXZpY2UgYW4gb3Bwb3J0dW5pdHkgdG8gaW1wbGVtZW50IGFueSByZXN0cmljdGlvbnMgdGhhdCBjYW5ub3QKKyAqCWJlIG90aGVyd2lzZSBleHByZXNzZWQgYnkgZmVhdHVyZSBmbGFncy4gVGhlIGNoZWNrIGlzIGNhbGxlZCB3aXRoCisgKgl0aGUgc2V0IG9mIGZlYXR1cmVzIHRoYXQgdGhlIHN0YWNrIGhhcyBjYWxjdWxhdGVkIGFuZCBpdCByZXR1cm5zCisgKgl0aG9zZSB0aGUgZHJpdmVyIGJlbGlldmVzIHRvIGJlIGFwcHJvcHJpYXRlLgogICoKICAqIGludCAoKm5kb19zd2l0Y2hfcGFyZW50X2lkX2dldCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAqCQkJCSAgIHN0cnVjdCBuZXRkZXZfcGh5c19pdGVtX2lkICpwc2lkKTsKQEAgLTExNzgsOCArMTE4MSw5IEBACiAJCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCQl2b2lkICpwcml2KTsKIAlpbnQJCQkoKm5kb19nZXRfbG9ja19zdWJjbGFzcykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0JYm9vbAkJCSgqbmRvX2dzb19jaGVjaykgKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCW5ldGRldl9mZWF0dXJlc190CSgqbmRvX2ZlYXR1cmVzX2NoZWNrKSAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJICAgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTsKICNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVgogCWludAkJCSgqbmRvX3N3aXRjaF9wYXJlbnRfaWRfZ2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJCSAgICBzdHJ1Y3QgbmV0ZGV2X3BoeXNfaXRlbV9pZCAqcHNpZCk7CkBAIC0yMDgxLDcgKzIwODUsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KGQsICYobmV0KS0+ZGV2X2Jhc2VfaGVhZCwgZGV2X2xpc3QpCiAjZGVmaW5lIGZvcl9lYWNoX25ldGRldl9pbl9ib25kX3JjdShib25kLCBzbGF2ZSkJXAogCQlmb3JfZWFjaF9uZXRkZXZfcmN1KCZpbml0X25ldCwgc2xhdmUpCVwKLQkJCWlmIChuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KHNsYXZlKSA9PSBib25kKQorCQkJaWYgKG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldF9yY3Uoc2xhdmUpID09IChib25kKSkKICNkZWZpbmUgbmV0X2RldmljZV9lbnRyeShsaCkJbGlzdF9lbnRyeShsaCwgc3RydWN0IG5ldF9kZXZpY2UsIGRldl9saXN0KQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpuZXh0X25ldF9kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTM2MTEsOCArMzYxNSw2IEBACiAJCQkJICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiB7CiAJcmV0dXJuIHNrYl9pc19nc28oc2tiKSAmJiAoIXNrYl9nc29fb2soc2tiLCBmZWF0dXJlcykgfHwKLQkJKGRldi0+bmV0ZGV2X29wcy0+bmRvX2dzb19jaGVjayAmJgotCQkgIWRldi0+bmV0ZGV2X29wcy0+bmRvX2dzb19jaGVjayhza2IsIGRldikpIHx8CiAJCXVubGlrZWx5KChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSAmJgogCQkJIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkpKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKaW5kZXggOWU1NzJkYS4uMDJmYzg2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKQEAgLTQ2LDggKzQ2LDggQEAKIAl1bnNpZ25lZCBpbnQJZmxhZ3M7CiAJdm9pZAkJKCppbnB1dCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJc3RydWN0IG11dGV4CSpjYl9tdXRleDsKLQlpbnQJCSgqYmluZCkoaW50IGdyb3VwKTsKLQl2b2lkCQkoKnVuYmluZCkoaW50IGdyb3VwKTsKKwlpbnQJCSgqYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOworCXZvaWQJCSgqdW5iaW5kKShzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cCk7CiAJYm9vbAkJKCpjb21wYXJlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayk7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAppbmRleCAxZTM3ZmJiLi5kZGVhOTgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKQEAgLTc0LDYgKzc0LDkgQEAKIAkvKiBpZG1hcHBlciAqLwogCXN0cnVjdCBpZG1hcCAqCQljbF9pZG1hcDsKIAorCS8qIENsaWVudCBvd25lciBpZGVudGlmaWVyICovCisJY29uc3QgY2hhciAqCQljbF9vd25lcl9pZDsKKwogCS8qIE91ciBvd24gSVAgYWRkcmVzcywgYXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgogCSAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgbXYwIGNhbGxiYWNrIGFkZHJlc3MuCiAJICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29vbS5oIGIvaW5jbHVkZS9saW51eC9vb20uaAppbmRleCA4NTM2OThjLi43NjIwMDk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29vbS5oCisrKyBiL2luY2x1ZGUvbGludXgvb29tLmgKQEAgLTg1LDExICs4NSw2IEBACiAJb29tX2tpbGxlcl9kaXNhYmxlZCA9IGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgb29tX2dmcF9hbGxvd2VkKGdmcF90IGdmcF9tYXNrKQotewotCXJldHVybiAoZ2ZwX21hc2sgJiBfX0dGUF9GUykgJiYgIShnZnBfbWFzayAmIF9fR0ZQX05PUkVUUlkpOwotfQotCiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX2xvY2tfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza193aWxsX2ZyZWVfbWVtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggN2VhMDY5Yy4uNGIzNzM2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTI1MSw3ICsyNTEsNyBAQAogI2RlZmluZSBGR1BfTk9XQUlUCQkweDAwMDAwMDIwCiAKIHN0cnVjdCBwYWdlICpwYWdlY2FjaGVfZ2V0X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3Qgb2Zmc2V0LAotCQlpbnQgZmdwX2ZsYWdzLCBnZnBfdCBjYWNoZV9nZnBfbWFzaywgZ2ZwX3QgcmFkaXhfZ2ZwX21hc2spOworCQlpbnQgZmdwX2ZsYWdzLCBnZnBfdCBjYWNoZV9nZnBfbWFzayk7CiAKIC8qKgogICogZmluZF9nZXRfcGFnZSAtIGZpbmQgYW5kIGdldCBhIHBhZ2UgcmVmZXJlbmNlCkBAIC0yNjYsMTMgKzI2NiwxMyBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZmluZF9nZXRfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkJcGdvZmZfdCBvZmZzZXQpCiB7Ci0JcmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBvZmZzZXQsIDAsIDAsIDApOworCXJldHVybiBwYWdlY2FjaGVfZ2V0X3BhZ2UobWFwcGluZywgb2Zmc2V0LCAwLCAwKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZmluZF9nZXRfcGFnZV9mbGFncyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkJcGdvZmZfdCBvZmZzZXQsIGludCBmZ3BfZmxhZ3MpCiB7Ci0JcmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBvZmZzZXQsIGZncF9mbGFncywgMCwgMCk7CisJcmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBvZmZzZXQsIGZncF9mbGFncywgMCk7CiB9CiAKIC8qKgpAQCAtMjkyLDcgKzI5Miw3IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpmaW5kX2xvY2tfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkJcGdvZmZfdCBvZmZzZXQpCiB7Ci0JcmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBvZmZzZXQsIEZHUF9MT0NLLCAwLCAwKTsKKwlyZXR1cm4gcGFnZWNhY2hlX2dldF9wYWdlKG1hcHBpbmcsIG9mZnNldCwgRkdQX0xPQ0ssIDApOwogfQogCiAvKioKQEAgLTMxOSw3ICszMTksNyBAQAogewogCXJldHVybiBwYWdlY2FjaGVfZ2V0X3BhZ2UobWFwcGluZywgb2Zmc2V0LAogCQkJCQlGR1BfTE9DS3xGR1BfQUNDRVNTRUR8RkdQX0NSRUFULAotCQkJCQlnZnBfbWFzaywgZ2ZwX21hc2sgJiBHRlBfUkVDTEFJTV9NQVNLKTsKKwkJCQkJZ2ZwX21hc2spOwogfQogCiAvKioKQEAgLTM0MCw4ICszNDAsNyBAQAogewogCXJldHVybiBwYWdlY2FjaGVfZ2V0X3BhZ2UobWFwcGluZywgaW5kZXgsCiAJCQlGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCwKLQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZyksCi0JCQlHRlBfTk9GUyk7CisJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIH0KIAogc3RydWN0IHBhZ2UgKmZpbmRfZ2V0X2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IG9mZnNldCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCAzNjBhOTY2Li45NjAzMDk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTE3NSw2ICsxNzUsOCBAQAogCVBDSV9ERVZfRkxBR1NfRE1BX0FMSUFTX0RFVkZOID0gKF9fZm9yY2UgcGNpX2Rldl9mbGFnc190KSAoMSA8PCA0KSwKIAkvKiBVc2UgYSBQQ0llLXRvLVBDSSBicmlkZ2UgYWxpYXMgZXZlbiBpZiAhcGNpX2lzX3BjaWUgKi8KIAlQQ0lfREVWX0ZMQUdfUENJRV9CUklER0VfQUxJQVMgPSAoX19mb3JjZSBwY2lfZGV2X2ZsYWdzX3QpICgxIDw8IDUpLAorCS8qIERvIG5vdCB1c2UgYnVzIHJlc2V0cyBmb3IgZGV2aWNlICovCisJUENJX0RFVl9GTEFHU19OT19CVVNfUkVTRVQgPSAoX19mb3JjZSBwY2lfZGV2X2ZsYWdzX3QpICgxIDw8IDYpLAogfTsKIAogZW51bSBwY2lfaXJxX3Jlcm91dGVfdmFyaWFudCB7CkBAIC0xMDY1LDYgKzEwNjcsNyBAQAogdm9pZCBwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cyk7CiB2b2lkIHBjaV9idXNfc2l6ZV9icmlkZ2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogaW50IHBjaV9jbGFpbV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQpOworaW50IHBjaV9jbGFpbV9icmlkZ2VfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgaW50IGkpOwogdm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKHZvaWQpOwogdm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfYnJpZGdlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlKTsKIHZvaWQgcGNpX2Fzc2lnbl91bmFzc2lnbmVkX2J1c19yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDQ4NmU4NGMuLjY2NGRlNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC03OSwxMSArNzksNiBAQAogCXN0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeQllbnRyaWVzWzBdOwogfTsKIAotc3RydWN0IHBlcmZfcmVncyB7Ci0JX191NjQJCWFiaTsKLQlzdHJ1Y3QgcHRfcmVncwkqcmVnczsKLX07Ci0KIHN0cnVjdCB0YXNrX3N0cnVjdDsKIAogLyoKQEAgLTQ1NSwxMSArNDUwLDYgQEAKICNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIH07CiAKLWVudW0gcGVyZl9ldmVudF9jb250ZXh0X3R5cGUgewotCXRhc2tfY29udGV4dCwKLQljcHVfY29udGV4dCwKLX07Ci0KIC8qKgogICogc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAtIGV2ZW50IGNvbnRleHQgc3RydWN0dXJlCiAgKgpAQCAtNDY3LDcgKzQ1Nyw2IEBACiAgKi8KIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgewogCXN0cnVjdCBwbXUJCQkqcG11OwotCWVudW0gcGVyZl9ldmVudF9jb250ZXh0X3R5cGUJdHlwZTsKIAkvKgogCSAqIFByb3RlY3QgdGhlIHN0YXRlcyBvZiB0aGUgZXZlbnRzIGluIHRoZSBsaXN0LAogCSAqIG5yX2FjdGl2ZSwgYW5kIHRoZSBsaXN0OgpAQCAtNjEwLDcgKzU5OSwxNCBAQAogCQl1MzIJcmVzZXJ2ZWQ7CiAJfQkJCQljcHVfZW50cnk7CiAJc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5CSpjYWxsY2hhaW47CisKKwkvKgorCSAqIHJlZ3NfdXNlciBtYXkgcG9pbnQgdG8gdGFza19wdF9yZWdzIG9yIHRvIHJlZ3NfdXNlcl9jb3B5LCBkZXBlbmRpbmcKKwkgKiBvbiBhcmNoIGRldGFpbHMuCisJICovCiAJc3RydWN0IHBlcmZfcmVncwkJcmVnc191c2VyOworCXN0cnVjdCBwdF9yZWdzCQkJcmVnc191c2VyX2NvcHk7CisKIAlzdHJ1Y3QgcGVyZl9yZWdzCQlyZWdzX2ludHI7CiAJdTY0CQkJCXN0YWNrX3VzZXJfc2l6ZTsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9yZWdzLmgKaW5kZXggM2M3M2Q1Zi4uYTVmOThkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfcmVncy5oCkBAIC0xLDExICsxLDE5IEBACiAjaWZuZGVmIF9MSU5VWF9QRVJGX1JFR1NfSAogI2RlZmluZSBfTElOVVhfUEVSRl9SRUdTX0gKIAorc3RydWN0IHBlcmZfcmVncyB7CisJX191NjQJCWFiaTsKKwlzdHJ1Y3QgcHRfcmVncwkqcmVnczsKK307CisKICNpZmRlZiBDT05GSUdfSEFWRV9QRVJGX1JFR1MKICNpbmNsdWRlIDxhc20vcGVyZl9yZWdzLmg+CiB1NjQgcGVyZl9yZWdfdmFsdWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpZHgpOwogaW50IHBlcmZfcmVnX3ZhbGlkYXRlKHU2NCBtYXNrKTsKIHU2NCBwZXJmX3JlZ19hYmkoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK3ZvaWQgcGVyZl9nZXRfcmVnc191c2VyKHN0cnVjdCBwZXJmX3JlZ3MgKnJlZ3NfdXNlciwKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3NfdXNlcl9jb3B5KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHU2NCBwZXJmX3JlZ192YWx1ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlkeCkKIHsKQEAgLTIxLDUgKzI5LDEzIEBACiB7CiAJcmV0dXJuIFBFUkZfU0FNUExFX1JFR1NfQUJJX05PTkU7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2dldF9yZWdzX3VzZXIoc3RydWN0IHBlcmZfcmVncyAqcmVnc191c2VyLAorCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzX3VzZXJfY29weSkKK3sKKwlyZWdzX3VzZXItPnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisJcmVnc191c2VyLT5hYmkgPSBwZXJmX3JlZ19hYmkoY3VycmVudCk7Cit9CiAjZW5kaWYgLyogQ09ORklHX0hBVkVfUEVSRl9SRUdTICovCiAjZW5kaWYgLyogX0xJTlVYX1BFUkZfUkVHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS9vbWFwX2NvbnRyb2xfcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS9vbWFwX2NvbnRyb2xfcGh5LmgKaW5kZXggZTllNmNmYi4uZWI3ZDRhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkvb21hcF9jb250cm9sX3BoeS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGh5L29tYXBfY29udHJvbF9waHkuaApAQCAtNjYsNyArNjYsNyBAQAogI2RlZmluZQlPTUFQX0NUUkxfUElQRTNfUEhZX1RYX1JYX1BPV0VST0ZGCTB4MAogCiAjZGVmaW5lCU9NQVBfQ1RSTF9QQ0lFX1BDU19NQVNLCQkJMHhmZgotI2RlZmluZQlPTUFQX0NUUkxfUENJRV9QQ1NfREVMQVlfQ09VTlRfU0hJRlQJMHg4CisjZGVmaW5lCU9NQVBfQ1RSTF9QQ0lFX1BDU19ERUxBWV9DT1VOVF9TSElGVAkxNgogCiAjZGVmaW5lIE9NQVBfQ1RSTF9VU0IyX1BIWV9QRAkJQklUKDI4KQogCkBAIC03OSw3ICs3OSw3IEBACiB2b2lkIG9tYXBfY29udHJvbF9waHlfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb24pOwogdm9pZCBvbWFwX2NvbnRyb2xfdXNiX3NldF9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgICBlbnVtIG9tYXBfY29udHJvbF91c2JfbW9kZSBtb2RlKTsKLXZvaWQgb21hcF9jb250cm9sX3BjaWVfcGNzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggaWQsIHU4IGRlbGF5KTsKK3ZvaWQgb21hcF9jb250cm9sX3BjaWVfcGNzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggZGVsYXkpOwogI2Vsc2UKIAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfY29udHJvbF9waHlfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb24pCkBAIC05MSw3ICs5MSw3IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2NvbnRyb2xfcGNpZV9wY3Moc3RydWN0IGRldmljZSAqZGV2LCB1OCBpZCwgdTggZGVsYXkpCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9jb250cm9sX3BjaWVfcGNzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggZGVsYXkpCiB7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fZG9tYWluLmggYi9pbmNsdWRlL2xpbnV4L3BtX2RvbWFpbi5oCmluZGV4IDZjZDIwZDVlLi5hOWVkYWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtX2RvbWFpbi5oCisrKyBiL2luY2x1ZGUvbGludXgvcG1fZG9tYWluLmgKQEAgLTI3MSw2ICsyNzEsOCBAQAogaW50IF9fb2ZfZ2VucGRfYWRkX3Byb3ZpZGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGdlbnBkX3hsYXRlX3QgeGxhdGUsCiAJCQl2b2lkICpkYXRhKTsKIHZvaWQgb2ZfZ2VucGRfZGVsX3Byb3ZpZGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOworc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpvZl9nZW5wZF9nZXRfZnJvbV9wcm92aWRlcigKKwkJCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmdlbnBkc3BlYyk7CiAKIHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqX19vZl9nZW5wZF94bGF0ZV9zaW1wbGUoCiAJCQkJCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmdlbnBkc3BlYywKQEAgLTI4OCw2ICsyOTAsMTIgQEAKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBvZl9nZW5wZF9kZWxfcHJvdmlkZXIoc3RydWN0IGRldmljZV9ub2RlICpucCkge30KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKm9mX2dlbnBkX2dldF9mcm9tX3Byb3ZpZGVyKAorCQkJc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqZ2VucGRzcGVjKQoreworCXJldHVybiBOVUxMOworfQorCiAjZGVmaW5lIF9fb2ZfZ2VucGRfeGxhdGVfc2ltcGxlCQlOVUxMCiAjZGVmaW5lIF9fb2ZfZ2VucGRfeGxhdGVfb25lY2VsbAlOVUxMCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJpbnRrLmggYi9pbmNsdWRlL2xpbnV4L3ByaW50ay5oCmluZGV4IGM4ZjE3MDMuLjRkNWJmNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJpbnRrLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcmludGsuaApAQCAtMTAsOSArMTAsNiBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgbGludXhfYmFubmVyW107CiBleHRlcm4gY29uc3QgY2hhciBsaW51eF9wcm9jX2Jhbm5lcltdOwogCi1leHRlcm4gY2hhciAqbG9nX2J1Zl9hZGRyX2dldCh2b2lkKTsKLWV4dGVybiB1MzIgbG9nX2J1Zl9sZW5fZ2V0KHZvaWQpOwotCiBzdGF0aWMgaW5saW5lIGludCBwcmludGtfZ2V0X2xldmVsKGNvbnN0IGNoYXIgKmJ1ZmZlcikKIHsKIAlpZiAoYnVmZmVyWzBdID09IEtFUk5fU09IX0FTQ0lJICYmIGJ1ZmZlclsxXSkgewpAQCAtMTYzLDYgKzE2MCw4IEBACiAKIGV4dGVybiB2b2lkIHdha2VfdXBfa2xvZ2Qodm9pZCk7CiAKK2NoYXIgKmxvZ19idWZfYWRkcl9nZXQodm9pZCk7Cit1MzIgbG9nX2J1Zl9sZW5fZ2V0KHZvaWQpOwogdm9pZCBsb2dfYnVmX2tleGVjX3NldHVwKHZvaWQpOwogdm9pZCBfX2luaXQgc2V0dXBfbG9nX2J1ZihpbnQgZWFybHkpOwogdm9pZCBkdW1wX3N0YWNrX3NldF9hcmNoX2Rlc2MoY29uc3QgY2hhciAqZm10LCAuLi4pOwpAQCAtMTk4LDYgKzE5NywxNiBAQAogewogfQogCitzdGF0aWMgaW5saW5lIGNoYXIgKmxvZ19idWZfYWRkcl9nZXQodm9pZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB1MzIgbG9nX2J1Zl9sZW5fZ2V0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2dfYnVmX2tleGVjX3NldHVwKHZvaWQpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKaW5kZXggNTA5NzhiNy4uMDk3ZDdlYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTMyMSw2ICszMjEsNDkgQEAKIAogc3RydWN0IHBhdGg7CiAKKy8qIFN0cnVjdHVyZSBmb3IgY29tbXVuaWNhdGluZyB2aWEgLT5nZXRfZHFibGsoKSAmIC0+c2V0X2RxYmxrKCkgKi8KK3N0cnVjdCBxY19kcWJsayB7CisJaW50IGRfZmllbGRtYXNrOwkvKiBtYXNrIG9mIGZpZWxkcyB0byBjaGFuZ2UgaW4gLT5zZXRfZHFibGsoKSAqLworCXU2NCBkX3NwY19oYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIHVzZWQgc3BhY2UgKi8KKwl1NjQgZF9zcGNfc29mdGxpbWl0OwkvKiBwcmVmZXJyZWQgbGltaXQgb24gdXNlZCBzcGFjZSAqLworCXU2NCBkX2lub19oYXJkbGltaXQ7CS8qIG1heGltdW0gIyBhbGxvY2F0ZWQgaW5vZGVzICovCisJdTY0IGRfaW5vX3NvZnRsaW1pdDsJLyogcHJlZmVycmVkIGlub2RlIGxpbWl0ICovCisJdTY0IGRfc3BhY2U7CQkvKiBTcGFjZSBvd25lZCBieSB0aGUgdXNlciAqLworCXU2NCBkX2lub19jb3VudDsJLyogIyBpbm9kZXMgb3duZWQgYnkgdGhlIHVzZXIgKi8KKwlzNjQgZF9pbm9fdGltZXI7CS8qIHplcm8gaWYgd2l0aGluIGlub2RlIGxpbWl0cyAqLworCQkJCS8qIGlmIG5vdCwgd2UgcmVmdXNlIHNlcnZpY2UgKi8KKwlzNjQgZF9zcGNfdGltZXI7CS8qIHNpbWlsYXIgdG8gYWJvdmU7IGZvciBzcGFjZSAqLworCWludCBkX2lub193YXJuczsJLyogIyB3YXJuaW5ncyBpc3N1ZWQgd3J0IG51bSBpbm9kZXMgKi8KKwlpbnQgZF9zcGNfd2FybnM7CS8qICMgd2FybmluZ3MgaXNzdWVkIHdydCB1c2VkIHNwYWNlICovCisJdTY0IGRfcnRfc3BjX2hhcmRsaW1pdDsJLyogYWJzb2x1dGUgbGltaXQgb24gcmVhbHRpbWUgc3BhY2UgKi8KKwl1NjQgZF9ydF9zcGNfc29mdGxpbWl0OwkvKiBwcmVmZXJyZWQgbGltaXQgb24gUlQgc3BhY2UgKi8KKwl1NjQgZF9ydF9zcGFjZTsJCS8qIHJlYWx0aW1lIHNwYWNlIG93bmVkICovCisJczY0IGRfcnRfc3BjX3RpbWVyOwkvKiBzaW1pbGFyIHRvIGFib3ZlOyBmb3IgUlQgc3BhY2UgKi8KKwlpbnQgZF9ydF9zcGNfd2FybnM7CS8qICMgd2FybmluZ3MgaXNzdWVkIHdydCBSVCBzcGFjZSAqLworfTsKKworLyogRmllbGQgc3BlY2lmaWVycyBmb3IgLT5zZXRfZHFibGsoKSBpbiBzdHJ1Y3QgcWNfZHFibGsgKi8KKyNkZWZpbmUJUUNfSU5PX1NPRlQJKDE8PDApCisjZGVmaW5lCVFDX0lOT19IQVJECSgxPDwxKQorI2RlZmluZQlRQ19TUENfU09GVAkoMTw8MikKKyNkZWZpbmUJUUNfU1BDX0hBUkQJKDE8PDMpCisjZGVmaW5lCVFDX1JUX1NQQ19TT0ZUCSgxPDw0KQorI2RlZmluZQlRQ19SVF9TUENfSEFSRAkoMTw8NSkKKyNkZWZpbmUgUUNfTElNSVRfTUFTSyAoUUNfSU5PX1NPRlQgfCBRQ19JTk9fSEFSRCB8IFFDX1NQQ19TT0ZUIHwgUUNfU1BDX0hBUkQgfCBcCisJCSAgICAgICBRQ19SVF9TUENfU09GVCB8IFFDX1JUX1NQQ19IQVJEKQorI2RlZmluZQlRQ19TUENfVElNRVIJKDE8PDYpCisjZGVmaW5lCVFDX0lOT19USU1FUgkoMTw8NykKKyNkZWZpbmUJUUNfUlRfU1BDX1RJTUVSCSgxPDw4KQorI2RlZmluZSBRQ19USU1FUl9NQVNLIChRQ19TUENfVElNRVIgfCBRQ19JTk9fVElNRVIgfCBRQ19SVF9TUENfVElNRVIpCisjZGVmaW5lCVFDX1NQQ19XQVJOUwkoMTw8OSkKKyNkZWZpbmUJUUNfSU5PX1dBUk5TCSgxPDwxMCkKKyNkZWZpbmUJUUNfUlRfU1BDX1dBUk5TCSgxPDwxMSkKKyNkZWZpbmUgUUNfV0FSTlNfTUFTSyAoUUNfU1BDX1dBUk5TIHwgUUNfSU5PX1dBUk5TIHwgUUNfUlRfU1BDX1dBUk5TKQorI2RlZmluZQlRQ19TUEFDRQkoMTw8MTIpCisjZGVmaW5lCVFDX0lOT19DT1VOVAkoMTw8MTMpCisjZGVmaW5lCVFDX1JUX1NQQUNFCSgxPDwxNCkKKyNkZWZpbmUgUUNfQUNDVF9NQVNLIChRQ19TUEFDRSB8IFFDX0lOT19DT1VOVCB8IFFDX1JUX1NQQUNFKQorCiAvKiBPcGVyYXRpb25zIGhhbmRsaW5nIHJlcXVlc3RzIGZyb20gdXNlcnNwYWNlICovCiBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHsKIAlpbnQgKCpxdW90YV9vbikoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgaW50LCBzdHJ1Y3QgcGF0aCAqKTsKQEAgLTMyOSw4ICszNzIsOCBAQAogCWludCAoKnF1b3RhX3N5bmMpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwogCWludCAoKmdldF9pbmZvKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBzdHJ1Y3QgaWZfZHFpbmZvICopOwogCWludCAoKnNldF9pbmZvKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBzdHJ1Y3QgaWZfZHFpbmZvICopOwotCWludCAoKmdldF9kcWJsaykoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrcWlkLCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqKTsKLQlpbnQgKCpzZXRfZHFibGspKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga3FpZCwgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKik7CisJaW50ICgqZ2V0X2RxYmxrKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtxaWQsIHN0cnVjdCBxY19kcWJsayAqKTsKKwlpbnQgKCpzZXRfZHFibGspKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga3FpZCwgc3RydWN0IHFjX2RxYmxrICopOwogCWludCAoKmdldF94c3RhdGUpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfcXVvdGFfc3RhdCAqKTsKIAlpbnQgKCpzZXRfeHN0YXRlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgaW50LCBpbnQpOwogCWludCAoKmdldF94c3RhdGV2KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX3F1b3RhX3N0YXR2ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCmluZGV4IGYyMzUzOGEuLjI5ZTM0NTVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCkBAIC05OCw5ICs5OCw5IEBACiBpbnQgZHF1b3RfZ2V0X2RxaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgc3RydWN0IGlmX2RxaW5mbyAqaWkpOwogaW50IGRxdW90X3NldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBpZl9kcWluZm8gKmlpKTsKIGludCBkcXVvdF9nZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtxaWQgaWQsCi0JCXN0cnVjdCBmc19kaXNrX3F1b3RhICpkaSk7CisJCXN0cnVjdCBxY19kcWJsayAqZGkpOwogaW50IGRxdW90X3NldF9kcWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga3FpZCBpZCwKLQkJc3RydWN0IGZzX2Rpc2tfcXVvdGEgKmRpKTsKKwkJc3RydWN0IHFjX2RxYmxrICpkaSk7CiAKIGludCBfX2RxdW90X3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkcXVvdCAqKnRyYW5zZmVyX3RvKTsKIGludCBkcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggYzBjMmJjZS4uZDlkN2U3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTM3LDYgKzM3LDE2IEBACiAJYXRvbWljX3QgcmVmY291bnQ7CiAKIAkvKgorCSAqIENvdW50IG9mIGNoaWxkIGFub25fdm1hcyBhbmQgVk1BcyB3aGljaCBwb2ludHMgdG8gdGhpcyBhbm9uX3ZtYS4KKwkgKgorCSAqIFRoaXMgY291bnRlciBpcyB1c2VkIGZvciBtYWtpbmcgZGVjaXNpb24gYWJvdXQgcmV1c2luZyBhbm9uX3ZtYQorCSAqIGluc3RlYWQgb2YgZm9ya2luZyBuZXcgb25lLiBTZWUgY29tbWVudHMgaW4gZnVuY3Rpb24gYW5vbl92bWFfY2xvbmUuCisJICovCisJdW5zaWduZWQgZGVncmVlOworCisJc3RydWN0IGFub25fdm1hICpwYXJlbnQ7CS8qIFBhcmVudCBvZiB0aGlzIGFub25fdm1hICovCisKKwkvKgogCSAqIE5PVEU6IHRoZSBMU0Igb2YgdGhlIHJiX3Jvb3QucmJfbm9kZSBpcyBzZXQgYnkKIAkgKiBtbV90YWtlX2FsbF9sb2NrcygpIF9hZnRlcl8gdGFraW5nIHRoZSBhYm92ZSBsb2NrLiBTbyB0aGUKIAkgKiByYl9yb290IG11c3Qgb25seSBiZSByZWFkL3dyaXR0ZW4gYWZ0ZXIgdGFraW5nIHRoZSBhYm92ZSBsb2NrCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RoZXJtYWwuaCBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCmluZGV4IGM2MTFhMDIuLmZjNTJlMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCkBAIC0zOCw3ICszOCw3IEBACiAjZGVmaW5lIFRIRVJNQUxfQ1NUQVRFX0lOVkFMSUQgLTFVTAogCiAvKiBObyB1cHBlci9sb3dlciBsaW1pdCByZXF1aXJlbWVudCAqLwotI2RlZmluZSBUSEVSTUFMX05PX0xJTUlUCVRIRVJNQUxfQ1NUQVRFX0lOVkFMSUQKKyNkZWZpbmUgVEhFUk1BTF9OT19MSU1JVAkoKHUzMil+MCkKIAogLyogVW5pdCBjb252ZXJzaW9uIG1hY3JvcyAqLwogI2RlZmluZSBLRUxWSU5fVE9fQ0VMU0lVUyh0KQkobG9uZykoKChsb25nKXQtMjczMiA+PSAwKSA/CVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZS5oIGIvaW5jbHVkZS9saW51eC90aW1lLmgKaW5kZXggMjAzYzJhZC4uYmVlYmUzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lLmgKQEAgLTExMCw2ICsxMTAsMTkgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIHRpbWV2YWxfdmFsaWQoY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2KQoreworCS8qIERhdGVzIGJlZm9yZSAxOTcwIGFyZSBib2d1cyAqLworCWlmICh0di0+dHZfc2VjIDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2FuJ3QgaGF2ZSBtb3JlIG1pY3Jvc2Vjb25kcyB0aGVuIGEgc2Vjb25kICovCisJaWYgKHR2LT50dl91c2VjIDwgMCB8fCB0di0+dHZfdXNlYyA+PSBVU0VDX1BFUl9TRUMpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCiBleHRlcm4gc3RydWN0IHRpbWVzcGVjIHRpbWVzcGVjX3RydW5jKHN0cnVjdCB0aW1lc3BlYyB0LCB1bnNpZ25lZCBncmFuKTsKIAogI2RlZmluZSBDVVJSRU5UX1RJTUUJCShjdXJyZW50X2tlcm5lbF90aW1lKCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAppbmRleCBhMjE5YmU5Li4wMDA0ODMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKQEAgLTE3Nyw3ICsxNzcsNiBAQAogCQkgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywgd3JpdGVwYWdlX3Qgd3JpdGVwYWdlLAogCQkgICAgICB2b2lkICpkYXRhKTsKIGludCBkb193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7Ci12b2lkIHNldF9wYWdlX2RpcnR5X2JhbGFuY2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogdm9pZCB3cml0ZWJhY2tfc2V0X3JhdGVsaW1pdCh2b2lkKTsKIHZvaWQgdGFnX3BhZ2VzX2Zvcl93cml0ZWJhY2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkgICAgIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKaW5kZXggYWYxMGMyYy4uNmM5MjQxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKQEAgLTI3LDEwICsyNywxOCBAQAogICogQG1heGF0dHI6IG1heGltdW0gbnVtYmVyIG9mIGF0dHJpYnV0ZXMgc3VwcG9ydGVkCiAgKiBAbmV0bnNvazogc2V0IHRvIHRydWUgaWYgdGhlIGZhbWlseSBjYW4gaGFuZGxlIG5ldHdvcmsKICAqCW5hbWVzcGFjZXMgYW5kIHNob3VsZCBiZSBwcmVzZW50ZWQgaW4gYWxsIG9mIHRoZW0KKyAqIEBwYXJhbGxlbF9vcHM6IG9wZXJhdGlvbnMgY2FuIGJlIGNhbGxlZCBpbiBwYXJhbGxlbCBhbmQgYXJlbid0CisgKglzeW5jaHJvbml6ZWQgYnkgdGhlIGNvcmUgZ2VuZXRsaW5rIGNvZGUKICAqIEBwcmVfZG9pdDogY2FsbGVkIGJlZm9yZSBhbiBvcGVyYXRpb24ncyBkb2l0IGNhbGxiYWNrLCBpdCBtYXkKICAqCWRvIGFkZGl0aW9uYWwsIGNvbW1vbiwgZmlsdGVyaW5nIGFuZCByZXR1cm4gYW4gZXJyb3IKICAqIEBwb3N0X2RvaXQ6IGNhbGxlZCBhZnRlciBhbiBvcGVyYXRpb24ncyBkb2l0IGNhbGxiYWNrLCBpdCBtYXkKICAqCXVuZG8gb3BlcmF0aW9ucyBkb25lIGJ5IHByZV9kb2l0LCBmb3IgZXhhbXBsZSByZWxlYXNlIGxvY2tzCisgKiBAbWNhc3RfYmluZDogYSBzb2NrZXQgYm91bmQgdG8gdGhlIGdpdmVuIG11bHRpY2FzdCBncm91cCAod2hpY2gKKyAqCWlzIGdpdmVuIGFzIHRoZSBvZmZzZXQgaW50byB0aGUgZ3JvdXBzIGFycmF5KQorICogQG1jYXN0X3VuYmluZDogYSBzb2NrZXQgd2FzIHVuYm91bmQgZnJvbSB0aGUgZ2l2ZW4gbXVsdGljYXN0IGdyb3VwLgorICoJTm90ZSB0aGF0IHVuYmluZCgpIHdpbGwgbm90IGJlIGNhbGxlZCBzeW1tZXRyaWNhbGx5IGlmIHRoZQorICoJZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBpcyByZW1vdmVkIHdoaWxlIHRoZXJlIGFyZSBzdGlsbCBvcGVuCisgKglzb2NrZXRzLgogICogQGF0dHJidWY6IGJ1ZmZlciB0byBzdG9yZSBwYXJzZWQgYXR0cmlidXRlcwogICogQGZhbWlseV9saXN0OiBmYW1pbHkgbGlzdAogICogQG1jZ3JwczogbXVsdGljYXN0IGdyb3VwcyB1c2VkIGJ5IHRoaXMgZmFtaWx5IChwcml2YXRlKQpAQCAtNTMsNiArNjEsOCBAQAogCXZvaWQJCQkoKnBvc3RfZG9pdCkoY29uc3Qgc3RydWN0IGdlbmxfb3BzICpvcHMsCiAJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKKwlpbnQJCQkoKm1jYXN0X2JpbmQpKHN0cnVjdCBuZXQgKm5ldCwgaW50IGdyb3VwKTsKKwl2b2lkCQkJKCptY2FzdF91bmJpbmQpKHN0cnVjdCBuZXQgKm5ldCwgaW50IGdyb3VwKTsKIAlzdHJ1Y3QgbmxhdHRyICoqCWF0dHJidWY7CS8qIHByaXZhdGUgKi8KIAljb25zdCBzdHJ1Y3QgZ2VubF9vcHMgKglvcHM7CQkvKiBwcml2YXRlICovCiAJY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwICptY2dycHM7IC8qIHByaXZhdGUgKi8KQEAgLTM5NSwxMSArNDA1LDExIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdlbmxfaGFzX2xpc3RlbmVycyhzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSwKLQkJCQkgICAgIHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGdyb3VwKQorCQkJCSAgICAgc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgZ3JvdXApCiB7CiAJaWYgKFdBUk5fT05fT05DRShncm91cCA+PSBmYW1pbHktPm5fbWNncnBzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZ3JvdXAgPSBmYW1pbHktPm1jZ3JwX29mZnNldCArIGdyb3VwOwotCXJldHVybiBuZXRsaW5rX2hhc19saXN0ZW5lcnMoc2ssIGdyb3VwKTsKKwlyZXR1cm4gbmV0bGlua19oYXNfbGlzdGVuZXJzKG5ldC0+Z2VubF9zb2NrLCBncm91cCk7CiB9CiAjZW5kaWYJLyogX19ORVRfR0VORVJJQ19ORVRMSU5LX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDBiYjYyMDcuLmY3Y2JkNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtMzksMTEgKzM5LDEyIEBACiAJc3RydWN0IGlwX29wdGlvbnMJb3B0OwkJLyogQ29tcGlsZWQgSVAgb3B0aW9ucwkJKi8KIAl1bnNpZ25lZCBjaGFyCQlmbGFnczsKIAotI2RlZmluZSBJUFNLQl9GT1JXQVJERUQJCTEKLSNkZWZpbmUgSVBTS0JfWEZSTV9UVU5ORUxfU0laRQkyCi0jZGVmaW5lIElQU0tCX1hGUk1fVFJBTlNGT1JNRUQJNAotI2RlZmluZSBJUFNLQl9GUkFHX0NPTVBMRVRFCTgKLSNkZWZpbmUgSVBTS0JfUkVST1VURUQJCTE2CisjZGVmaW5lIElQU0tCX0ZPUldBUkRFRAkJQklUKDApCisjZGVmaW5lIElQU0tCX1hGUk1fVFVOTkVMX1NJWkUJQklUKDEpCisjZGVmaW5lIElQU0tCX1hGUk1fVFJBTlNGT1JNRUQJQklUKDIpCisjZGVmaW5lIElQU0tCX0ZSQUdfQ09NUExFVEUJQklUKDMpCisjZGVmaW5lIElQU0tCX1JFUk9VVEVECQlCSVQoNCkKKyNkZWZpbmUgSVBTS0JfRE9SRURJUkVDVAlCSVQoNSkKIAogCXUxNgkJCWZyYWdfbWF4X3NpemU7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKaW5kZXggNThkNzE5ZC4uMjljN2JlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC0xMjcwLDggKzEyNzAsNyBAQAogICoKICAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY6IFRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IGJ5IHRoZQogICoJZHJpdmVyIHRvIGluZGljYXRlIHRoYXQgaXQgcmVxdWlyZXMgSVYgZ2VuZXJhdGlvbiBmb3IgdGhpcwotICoJcGFydGljdWxhciBrZXkuIFNldHRpbmcgdGhpcyBmbGFnIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCBTS0JzCi0gKgl3aWxsIGhhdmUgc3VmZmljaWVudCB0YWlscm9vbSBmb3IgSUNWIG9yIE1JQy4KKyAqCXBhcnRpY3VsYXIga2V5LgogICogQElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDOiBUaGlzIGZsYWcgc2hvdWxkIGJlIHNldCBieQogICoJdGhlIGRyaXZlciBmb3IgYSBUS0lQIGtleSBpZiBpdCByZXF1aXJlcyBNaWNoYWVsIE1JQwogICoJZ2VuZXJhdGlvbiBpbiBzb2Z0d2FyZS4KQEAgLTEyODMsOSArMTI4Miw3IEBACiAgKiBASUVFRTgwMjExX0tFWV9GTEFHX1BVVF9JVl9TUEFDRTogVGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYnkgdGhlIGRyaXZlcgogICoJaWYgc3BhY2Ugc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGUgSVYsIGJ1dCB0aGUgSVYKICAqCWl0c2VsZiBzaG91bGQgbm90IGJlIGdlbmVyYXRlZC4gRG8gbm90IHNldCB0b2dldGhlciB3aXRoCi0gKglASUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWIG9uIHRoZSBzYW1lIGtleS4gU2V0dGluZyB0aGlzIGZsYWcgZG9lcwotICoJbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCBTS0JzIHdpbGwgaGF2ZSBzdWZmaWNpZW50IHRhaWxyb29tIGZvciBJQ1Ygb3IKLSAqCU1JQy4KKyAqCUBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYgb24gdGhlIHNhbWUga2V5LgogICogQElFRUU4MDIxMV9LRVlfRkxBR19SWF9NR01UOiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gZGVjcnlwdCByZWNlaXZlZAogICoJbWFuYWdlbWVudCBmcmFtZXMuIFRoZSBmbGFnIGNhbiBoZWxwIGRyaXZlcnMgdGhhdCBoYXZlIGEgaGFyZHdhcmUKICAqCWNyeXB0byBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXNuJ3QgZGVhbCB3aXRoIG1hbmFnZW1lbnQgZnJhbWVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaCBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCmluZGV4IGViMDcwYjMuLjc2ZjcwODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCisrKyBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCkBAIC0xOTAsNyArMTkwLDYgQEAKIAogCiBzdHJ1Y3QgbmVpZ2hfdGFibGUgewotCXN0cnVjdCBuZWlnaF90YWJsZQkqbmV4dDsKIAlpbnQJCQlmYW1pbHk7CiAJaW50CQkJZW50cnlfc2l6ZTsKIAlpbnQJCQlrZXlfbGVuOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdnhsYW4uaCBiL2luY2x1ZGUvbmV0L3Z4bGFuLmgKaW5kZXggNTdjY2NkMC4uOTAzNDYxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdnhsYW4uaAorKysgYi9pbmNsdWRlL25ldC92eGxhbi5oCkBAIC0xLDYgKzEsOSBAQAogI2lmbmRlZiBfX05FVF9WWExBTl9ICiAjZGVmaW5lIF9fTkVUX1ZYTEFOX0ggMQogCisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgpAQCAtNTEsMTYgKzU0LDMzIEBACiAJCSAgIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIF9fdTggdG9zLCBfX3U4IHR0bCwgX19iZTE2IGRmLAogCQkgICBfX2JlMTYgc3JjX3BvcnQsIF9fYmUxNiBkc3RfcG9ydCwgX19iZTMyIHZuaSwgYm9vbCB4bmV0KTsKIAotc3RhdGljIGlubGluZSBib29sIHZ4bGFuX2dzb19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBuZXRkZXZfZmVhdHVyZXNfdCB2eGxhbl9mZWF0dXJlc19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIHsKLQlpZiAoKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgJiBTS0JfR1NPX1VEUF9UVU5ORUwpICYmCisJdTggbDRfaGRyID0gMDsKKworCWlmICghc2tiLT5lbmNhcHN1bGF0aW9uKQorCQlyZXR1cm4gZmVhdHVyZXM7CisKKwlzd2l0Y2ggKHZsYW5fZ2V0X3Byb3RvY29sKHNrYikpIHsKKwljYXNlIGh0b25zKEVUSF9QX0lQKToKKwkJbDRfaGRyID0gaXBfaGRyKHNrYiktPnByb3RvY29sOworCQlicmVhazsKKwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgorCQlsNF9oZHIgPSBpcHY2X2hkcihza2IpLT5uZXh0aGRyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmVhdHVyZXM7OworCX0KKworCWlmICgobDRfaGRyID09IElQUFJPVE9fVURQKSAmJgogCSAgICAoc2tiLT5pbm5lcl9wcm90b2NvbF90eXBlICE9IEVOQ0FQX1RZUEVfRVRIRVIgfHwKIAkgICAgIHNrYi0+aW5uZXJfcHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfVEVCKSB8fAogCSAgICAgKHNrYl9pbm5lcl9tYWNfaGVhZGVyKHNrYikgLSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICE9CiAJICAgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgc2l6ZW9mKHN0cnVjdCB2eGxhbmhkcikpKSkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gZmVhdHVyZXMgJiB+KE5FVElGX0ZfQUxMX0NTVU0gfCBORVRJRl9GX0dTT19NQVNLKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBmZWF0dXJlczsKIH0KIAogLyogSVAgaGVhZGVyICsgVURQICsgVlhMQU4gKyBFdGhlcm5ldCBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtLmggYi9pbmNsdWRlL3NvdW5kL3BjbS5oCmluZGV4IDFlN2Y3NGEuLmI0MjliNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY20uaApAQCAtODU3LDcgKzg1Nyw3IEBACiB9CiAKIC8qKgotICogcGFyYW1zX2NoYW5uZWxzIC0gR2V0IHRoZSBzYW1wbGUgcmF0ZSBmcm9tIHRoZSBodyBwYXJhbXMKKyAqIHBhcmFtc19yYXRlIC0gR2V0IHRoZSBzYW1wbGUgcmF0ZSBmcm9tIHRoZSBodyBwYXJhbXMKICAqIEBwOiBodyBwYXJhbXMKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcGFyYW1zX3JhdGUoY29uc3Qgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwKQpAQCAtODY2LDcgKzg2Niw3IEBACiB9CiAKIC8qKgotICogcGFyYW1zX2NoYW5uZWxzIC0gR2V0IHRoZSBwZXJpb2Qgc2l6ZSAoaW4gZnJhbWVzKSBmcm9tIHRoZSBodyBwYXJhbXMKKyAqIHBhcmFtc19wZXJpb2Rfc2l6ZSAtIEdldCB0aGUgcGVyaW9kIHNpemUgKGluIGZyYW1lcykgZnJvbSB0aGUgaHcgcGFyYW1zCiAgKiBAcDogaHcgcGFyYW1zCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBhcmFtc19wZXJpb2Rfc2l6ZShjb25zdCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnApCkBAIC04NzUsNyArODc1LDcgQEAKIH0KIAogLyoqCi0gKiBwYXJhbXNfY2hhbm5lbHMgLSBHZXQgdGhlIG51bWJlciBvZiBwZXJpb2RzIGZyb20gdGhlIGh3IHBhcmFtcworICogcGFyYW1zX3BlcmlvZHMgLSBHZXQgdGhlIG51bWJlciBvZiBwZXJpb2RzIGZyb20gdGhlIGh3IHBhcmFtcwogICogQHA6IGh3IHBhcmFtcwogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwYXJhbXNfcGVyaW9kcyhjb25zdCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnApCkBAIC04ODQsNyArODg0LDcgQEAKIH0KIAogLyoqCi0gKiBwYXJhbXNfY2hhbm5lbHMgLSBHZXQgdGhlIGJ1ZmZlciBzaXplIChpbiBmcmFtZXMpIGZyb20gdGhlIGh3IHBhcmFtcworICogcGFyYW1zX2J1ZmZlcl9zaXplIC0gR2V0IHRoZSBidWZmZXIgc2l6ZSAoaW4gZnJhbWVzKSBmcm9tIHRoZSBodyBwYXJhbXMKICAqIEBwOiBodyBwYXJhbXMKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcGFyYW1zX2J1ZmZlcl9zaXplKGNvbnN0IHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcCkKQEAgLTg5Myw3ICs4OTMsNyBAQAogfQogCiAvKioKLSAqIHBhcmFtc19jaGFubmVscyAtIEdldCB0aGUgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSBmcm9tIHRoZSBodyBwYXJhbXMKKyAqIHBhcmFtc19idWZmZXJfYnl0ZXMgLSBHZXQgdGhlIGJ1ZmZlciBzaXplIChpbiBieXRlcykgZnJvbSB0aGUgaHcgcGFyYW1zCiAgKiBAcDogaHcgcGFyYW1zCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBhcmFtc19idWZmZXJfYnl0ZXMoY29uc3Qgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MuaCBiL2luY2x1ZGUvc291bmQvc29jLmgKaW5kZXggYjRmY2E5YS4uYWM4YjMzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy5oCkBAIC00OTgsNiArNDk4LDcgQEAKIAkJCQl1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbHVlKTsKIAogI2lmZGVmIENPTkZJR19TTkRfU09DX0FDOTdfQlVTCitzdHJ1Y3Qgc25kX2FjOTcgKnNuZF9zb2NfYWxsb2NfYWM5N19jb2RlYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOwogc3RydWN0IHNuZF9hYzk3ICpzbmRfc29jX25ld19hYzk3X2NvZGVjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyk7CiB2b2lkIHNuZF9zb2NfZnJlZV9hYzk3X2NvZGVjKHN0cnVjdCBzbmRfYWM5NyAqYWM5Nyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2JhY2tlbmQuaCBiL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2JhY2tlbmQuaAppbmRleCA0MzBjZmFmLi5kYjgxYzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYWNrZW5kLmgKKysrIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFja2VuZC5oCkBAIC0xMzUsNyArMTM1LDYgQEAKIGludAlzZV9kZXZfc2V0X2VtdWxhdGVfcmVzdF9yZW9yZChzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYsIGludCk7CiBpbnQJc2VfZGV2X3NldF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2VfZGV2aWNlICosIHUzMik7CiBpbnQJc2VfZGV2X3NldF9tYXhfc2VjdG9ycyhzdHJ1Y3Qgc2VfZGV2aWNlICosIHUzMik7Ci1pbnQJc2VfZGV2X3NldF9mYWJyaWNfbWF4X3NlY3RvcnMoc3RydWN0IHNlX2RldmljZSAqLCB1MzIpOwogaW50CXNlX2Rldl9zZXRfb3B0aW1hbF9zZWN0b3JzKHN0cnVjdCBzZV9kZXZpY2UgKiwgdTMyKTsKIGludAlzZV9kZXZfc2V0X2Jsb2NrX3NpemUoc3RydWN0IHNlX2RldmljZSAqLCB1MzIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYWNrZW5kX2NvbmZpZ2ZzLmggYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYWNrZW5kX2NvbmZpZ2ZzLmgKaW5kZXggMzI0N2Q3NS4uMTg2ZjdhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFja2VuZF9jb25maWdmcy5oCisrKyBiL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2JhY2tlbmRfY29uZmlnZnMuaApAQCAtOTgsOCArOTgsNiBAQAogCVRCX0RFVl9BVFRSKF9iYWNrZW5kLCBibG9ja19zaXplLCBTX0lSVUdPIHwgU19JV1VTUik7CQlcCiAJREVGX1RCX0RFVl9BVFRSSUJfUk8oX2JhY2tlbmQsIGh3X21heF9zZWN0b3JzKTsJCQlcCiAJVEJfREVWX0FUVFJfUk8oX2JhY2tlbmQsIGh3X21heF9zZWN0b3JzKTsJCQlcCi0JREVGX1RCX0RFVl9BVFRSSUIoX2JhY2tlbmQsIGZhYnJpY19tYXhfc2VjdG9ycyk7CQlcCi0JVEJfREVWX0FUVFIoX2JhY2tlbmQsIGZhYnJpY19tYXhfc2VjdG9ycywgU19JUlVHTyB8IFNfSVdVU1IpOwlcCiAJREVGX1RCX0RFVl9BVFRSSUIoX2JhY2tlbmQsIG9wdGltYWxfc2VjdG9ycyk7CQkJXAogCVRCX0RFVl9BVFRSKF9iYWNrZW5kLCBvcHRpbWFsX3NlY3RvcnMsIFNfSVJVR08gfCBTX0lXVVNSKTsJXAogCURFRl9UQl9ERVZfQVRUUklCX1JPKF9iYWNrZW5kLCBod19xdWV1ZV9kZXB0aCk7CQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oCmluZGV4IDM5N2ZiNjMuLjRhODc5NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaAorKysgYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYXNlLmgKQEAgLTc3LDggKzc3LDYgQEAKICNkZWZpbmUgREFfVU5NQVBfR1JBTlVMQVJJVFlfQUxJR05NRU5UX0RFRkFVTFQJMAogLyogRGVmYXVsdCBtYXhfd3JpdGVfc2FtZV9sZW4sIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KICNkZWZpbmUgREFfTUFYX1dSSVRFX1NBTUVfTEVOCQkJMAotLyogRGVmYXVsdCBtYXggdHJhbnNmZXIgbGVuZ3RoICovCi0jZGVmaW5lIERBX0ZBQlJJQ19NQVhfU0VDVE9SUwkJCTgxOTIKIC8qIFVzZSBhIG1vZGVsIGFsaWFzIGJhc2VkIG9uIHRoZSBjb25maWdmcyBiYWNrZW5kIGRldmljZSBuYW1lICovCiAjZGVmaW5lIERBX0VNVUxBVEVfTU9ERUxfQUxJQVMJCQkwCiAvKiBFbXVsYXRpb24gZm9yIERpcmVjdCBQYWdlIE91dCAqLwpAQCAtNjk0LDcgKzY5Miw2IEBACiAJdTMyCQlod19ibG9ja19zaXplOwogCXUzMgkJYmxvY2tfc2l6ZTsKIAl1MzIJCWh3X21heF9zZWN0b3JzOwotCXUzMgkJZmFicmljX21heF9zZWN0b3JzOwogCXUzMgkJb3B0aW1hbF9zZWN0b3JzOwogCXUzMgkJaHdfcXVldWVfZGVwdGg7CiAJdTMyCQlxdWV1ZV9kZXB0aDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmgKaW5kZXggNmVkZjFmMi4uODZiMzk5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmgKQEAgLTE0Niw2ICsxNDYsMTQgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfS1ZNX0lSUUZEKQogCisjaWZkZWYga3ZtX2lycWNoaXBzCisjZGVmaW5lIGt2bV9hY2tfaXJxX3N0cmluZyAiaXJxY2hpcCAlcyBwaW4gJXUiCisjZGVmaW5lIGt2bV9hY2tfaXJxX3Bhcm0gIF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+aXJxY2hpcCwga3ZtX2lycWNoaXBzKSwgX19lbnRyeS0+cGluCisjZWxzZQorI2RlZmluZSBrdm1fYWNrX2lycV9zdHJpbmcgImlycWNoaXAgJWQgcGluICV1IgorI2RlZmluZSBrdm1fYWNrX2lycV9wYXJtICBfX2VudHJ5LT5pcnFjaGlwLCBfX2VudHJ5LT5waW4KKyNlbmRpZgorCiBUUkFDRV9FVkVOVChrdm1fYWNrX2lycSwKIAlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgaXJxY2hpcCwgdW5zaWduZWQgaW50IHBpbiksCiAJVFBfQVJHUyhpcnFjaGlwLCBwaW4pLApAQCAtMTYwLDEzICsxNjgsNyBAQAogCQlfX2VudHJ5LT5waW4JCT0gcGluOwogCSksCiAKLSNpZmRlZiBrdm1faXJxY2hpcHMKLQlUUF9wcmludGsoImlycWNoaXAgJXMgcGluICV1IiwKLQkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPmlycWNoaXAsIGt2bV9pcnFjaGlwcyksCi0JCSBfX2VudHJ5LT5waW4pCi0jZWxzZQotCVRQX3ByaW50aygiaXJxY2hpcCAlZCBwaW4gJXUiLCBfX2VudHJ5LT5pcnFjaGlwLCBfX2VudHJ5LT5waW4pCi0jZW5kaWYKKwlUUF9wcmludGsoa3ZtX2Fja19pcnFfc3RyaW5nLCBrdm1fYWNrX2lycV9wYXJtKQogKTsKIAogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0hBVkVfS1ZNX0lSUUZEKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmggYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaAppbmRleCA3NTQzYjNlLi5lMDYzZWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaAorKysgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaApAQCAtNSw3ICs1LDcgQEAKIAogLyoKICAqIEZNT0RFX0VYRUMgaXMgMHgyMAotICogRk1PREVfTk9OT1RJRlkgaXMgMHgxMDAwMDAwCisgKiBGTU9ERV9OT05PVElGWSBpcyAweDQwMDAwMDAKICAqIFRoZXNlIGNhbm5vdCBiZSB1c2VkIGJ5IHVzZXJzcGFjZSBPXyogdW50aWwgaW50ZXJuYWwgYW5kIGV4dGVybmFsIG9wZW4KICAqIGZsYWdzIGFyZSBzcGxpdC4KICAqIC1FcmljIFBhcmlzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvY2FuL25ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9jYW4vbmV0bGluay5oCmluZGV4IDNlNDMyM2EuLjk0ZmZlMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9jYW4vbmV0bGluay5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9jYW4vbmV0bGluay5oCkBAIC05OCw2ICs5OCw3IEBACiAjZGVmaW5lIENBTl9DVFJMTU9ERV9CRVJSX1JFUE9SVElORwkweDEwCS8qIEJ1cy1lcnJvciByZXBvcnRpbmcgKi8KICNkZWZpbmUgQ0FOX0NUUkxNT0RFX0ZECQkJMHgyMAkvKiBDQU4gRkQgbW9kZSAqLwogI2RlZmluZSBDQU5fQ1RSTE1PREVfUFJFU1VNRV9BQ0sJMHg0MAkvKiBJZ25vcmUgbWlzc2luZyBDQU4gQUNLcyAqLworI2RlZmluZSBDQU5fQ1RSTE1PREVfRkRfTk9OX0lTTwkJMHg4MAkvKiBDQU4gRkQgaW4gbm9uLUlTTyBtb2RlICovCiAKIC8qCiAgKiBDQU4gZGV2aWNlIHN0YXRpc3RpY3MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pbjYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pbjYuaAppbmRleCA3NGEyYTE3Li43OWIxMmIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaW42LmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2luNi5oCkBAIC0xNDksNyArMTQ5LDcgQEAKIC8qCiAgKglJUFY2IHNvY2tldCBvcHRpb25zCiAgKi8KLQorI2lmIF9fVUFQSV9ERUZfSVBWNl9PUFRJT05TCiAjZGVmaW5lIElQVjZfQUREUkZPUk0JCTEKICNkZWZpbmUgSVBWNl8yMjkyUEtUSU5GTwkyCiAjZGVmaW5lIElQVjZfMjI5MkhPUE9QVFMJMwpAQCAtMTk2LDYgKzE5Niw3IEBACiAKICNkZWZpbmUgSVBWNl9JUFNFQ19QT0xJQ1kJMzQKICNkZWZpbmUgSVBWNl9YRlJNX1BPTElDWQkzNQorI2VuZGlmCiAKIC8qCiAgKiBNdWx0aWNhc3Q6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva2ZkX2lvY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgva2ZkX2lvY3RsLmgKaW5kZXggN2FjZWY0MS4uYWY5NGYzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2tmZF9pb2N0bC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rZmRfaW9jdGwuaApAQCAtMTI4LDI3ICsxMjgsMzQgQEAKIAl1aW50MzJfdCBwYWQ7CiB9OwogCi0jZGVmaW5lIEtGRF9JT0NfTUFHSUMgJ0snCisjZGVmaW5lIEFNREtGRF9JT0NUTF9CQVNFICdLJworI2RlZmluZSBBTURLRkRfSU8obnIpCQkJX0lPKEFNREtGRF9JT0NUTF9CQVNFLCBucikKKyNkZWZpbmUgQU1ES0ZEX0lPUihuciwgdHlwZSkJCV9JT1IoQU1ES0ZEX0lPQ1RMX0JBU0UsIG5yLCB0eXBlKQorI2RlZmluZSBBTURLRkRfSU9XKG5yLCB0eXBlKQkJX0lPVyhBTURLRkRfSU9DVExfQkFTRSwgbnIsIHR5cGUpCisjZGVmaW5lIEFNREtGRF9JT1dSKG5yLCB0eXBlKQkJX0lPV1IoQU1ES0ZEX0lPQ1RMX0JBU0UsIG5yLCB0eXBlKQogCi0jZGVmaW5lIEtGRF9JT0NfR0VUX1ZFUlNJT04gXAotCQlfSU9SKEtGRF9JT0NfTUFHSUMsIDEsIHN0cnVjdCBrZmRfaW9jdGxfZ2V0X3ZlcnNpb25fYXJncykKKyNkZWZpbmUgQU1ES0ZEX0lPQ19HRVRfVkVSU0lPTgkJCVwKKwkJQU1ES0ZEX0lPUigweDAxLCBzdHJ1Y3Qga2ZkX2lvY3RsX2dldF92ZXJzaW9uX2FyZ3MpCiAKLSNkZWZpbmUgS0ZEX0lPQ19DUkVBVEVfUVVFVUUgXAotCQlfSU9XUihLRkRfSU9DX01BR0lDLCAyLCBzdHJ1Y3Qga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZV9hcmdzKQorI2RlZmluZSBBTURLRkRfSU9DX0NSRUFURV9RVUVVRQkJCVwKKwkJQU1ES0ZEX0lPV1IoMHgwMiwgc3RydWN0IGtmZF9pb2N0bF9jcmVhdGVfcXVldWVfYXJncykKIAotI2RlZmluZSBLRkRfSU9DX0RFU1RST1lfUVVFVUUgXAotCV9JT1dSKEtGRF9JT0NfTUFHSUMsIDMsIHN0cnVjdCBrZmRfaW9jdGxfZGVzdHJveV9xdWV1ZV9hcmdzKQorI2RlZmluZSBBTURLRkRfSU9DX0RFU1RST1lfUVVFVUUJCVwKKwkJQU1ES0ZEX0lPV1IoMHgwMywgc3RydWN0IGtmZF9pb2N0bF9kZXN0cm95X3F1ZXVlX2FyZ3MpCiAKLSNkZWZpbmUgS0ZEX0lPQ19TRVRfTUVNT1JZX1BPTElDWSBcCi0JX0lPVyhLRkRfSU9DX01BR0lDLCA0LCBzdHJ1Y3Qga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5X2FyZ3MpCisjZGVmaW5lIEFNREtGRF9JT0NfU0VUX01FTU9SWV9QT0xJQ1kJCVwKKwkJQU1ES0ZEX0lPVygweDA0LCBzdHJ1Y3Qga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5X2FyZ3MpCiAKLSNkZWZpbmUgS0ZEX0lPQ19HRVRfQ0xPQ0tfQ09VTlRFUlMgXAotCV9JT1dSKEtGRF9JT0NfTUFHSUMsIDUsIHN0cnVjdCBrZmRfaW9jdGxfZ2V0X2Nsb2NrX2NvdW50ZXJzX2FyZ3MpCisjZGVmaW5lIEFNREtGRF9JT0NfR0VUX0NMT0NLX0NPVU5URVJTCQlcCisJCUFNREtGRF9JT1dSKDB4MDUsIHN0cnVjdCBrZmRfaW9jdGxfZ2V0X2Nsb2NrX2NvdW50ZXJzX2FyZ3MpCiAKLSNkZWZpbmUgS0ZEX0lPQ19HRVRfUFJPQ0VTU19BUEVSVFVSRVMgXAotCV9JT1IoS0ZEX0lPQ19NQUdJQywgNiwgc3RydWN0IGtmZF9pb2N0bF9nZXRfcHJvY2Vzc19hcGVydHVyZXNfYXJncykKKyNkZWZpbmUgQU1ES0ZEX0lPQ19HRVRfUFJPQ0VTU19BUEVSVFVSRVMJXAorCQlBTURLRkRfSU9SKDB4MDYsIHN0cnVjdCBrZmRfaW9jdGxfZ2V0X3Byb2Nlc3NfYXBlcnR1cmVzX2FyZ3MpCiAKLSNkZWZpbmUgS0ZEX0lPQ19VUERBVEVfUVVFVUUgXAotCV9JT1coS0ZEX0lPQ19NQUdJQywgNywgc3RydWN0IGtmZF9pb2N0bF91cGRhdGVfcXVldWVfYXJncykKKyNkZWZpbmUgQU1ES0ZEX0lPQ19VUERBVEVfUVVFVUUJCQlcCisJCUFNREtGRF9JT1coMHgwNywgc3RydWN0IGtmZF9pb2N0bF91cGRhdGVfcXVldWVfYXJncykKKworI2RlZmluZSBBTURLRkRfQ09NTUFORF9TVEFSVAkJMHgwMQorI2RlZmluZSBBTURLRkRfQ09NTUFORF9FTkQJCTB4MDgKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbGliYy1jb21wYXQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCmluZGV4IGMxNDA2MjAuLmUyODgwN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCkBAIC02OSw2ICs2OSw3IEBACiAjZGVmaW5lIF9fVUFQSV9ERUZfU09DS0FERFJfSU42CQkwCiAjZGVmaW5lIF9fVUFQSV9ERUZfSVBWNl9NUkVRCQkwCiAjZGVmaW5lIF9fVUFQSV9ERUZfSVBQUk9UT19WNgkJMAorI2RlZmluZSBfX1VBUElfREVGX0lQVjZfT1BUSU9OUwkJMAogCiAjZWxzZQogCkBAIC04Miw2ICs4Myw3IEBACiAjZGVmaW5lIF9fVUFQSV9ERUZfU09DS0FERFJfSU42CQkxCiAjZGVmaW5lIF9fVUFQSV9ERUZfSVBWNl9NUkVRCQkxCiAjZGVmaW5lIF9fVUFQSV9ERUZfSVBQUk9UT19WNgkJMQorI2RlZmluZSBfX1VBUElfREVGX0lQVjZfT1BUSU9OUwkJMQogCiAjZW5kaWYgLyogX05FVElORVRfSU5fSCAqLwogCkBAIC0xMDMsNiArMTA1LDcgQEAKICNkZWZpbmUgX19VQVBJX0RFRl9TT0NLQUREUl9JTjYJCTEKICNkZWZpbmUgX19VQVBJX0RFRl9JUFY2X01SRVEJCTEKICNkZWZpbmUgX19VQVBJX0RFRl9JUFBST1RPX1Y2CQkxCisjZGVmaW5lIF9fVUFQSV9ERUZfSVBWNl9PUFRJT05TCQkxCiAKIC8qIERlZmluaXRpb25zIGZvciB4YXR0ci5oICovCiAjZGVmaW5lIF9fVUFQSV9ERUZfWEFUVFIJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgKaW5kZXggM2E2ZGNhYS4uZjcxNGU4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgKQEAgLTE3NCw2ICsxNzQsMTAgQEAKIAlPVlNfUEFDS0VUX0FUVFJfVVNFUkRBVEEsICAgIC8qIE9WU19BQ1RJT05fQVRUUl9VU0VSU1BBQ0UgYXJnLiAqLwogCU9WU19QQUNLRVRfQVRUUl9FR1JFU1NfVFVOX0tFWSwgIC8qIE5lc3RlZCBPVlNfVFVOTkVMX0tFWV9BVFRSXyoKIAkJCQkJICAgIGF0dHJpYnV0ZXMuICovCisJT1ZTX1BBQ0tFVF9BVFRSX1VOVVNFRDEsCisJT1ZTX1BBQ0tFVF9BVFRSX1VOVVNFRDIsCisJT1ZTX1BBQ0tFVF9BVFRSX1BST0JFLCAgICAgIC8qIFBhY2tldCBvcGVyYXRpb24gaXMgYSBmZWF0dXJlIHByb2JlLAorCQkJCSAgICAgICBlcnJvciBsb2dnaW5nIHNob3VsZCBiZSBzdXBwcmVzc2VkLiAqLwogCV9fT1ZTX1BBQ0tFVF9BVFRSX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3VpbnB1dC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3VpbnB1dC5oCmluZGV4IGJhZWFiODMuLjAxM2M5ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC91aW5wdXQuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdWlucHV0LmgKQEAgLTgyLDcgKzgyLDcgQEAKICAqIFRoZSBjb21wbGV0ZSBzeXNmcyBwYXRoIGlzIHRoZW4gL3N5cy9kZXZpY2VzL3ZpcnR1YWwvaW5wdXQvLS1OQU1FLS0KICAqIFVzdWFsbHksIGl0IGlzIGluIHRoZSBmb3JtICJpbnB1dE4iCiAgKi8KLSNkZWZpbmUgVUlfR0VUX1NZU05BTUUobGVuKQlfSU9DKF9JT0NfUkVBRCwgVUlOUFVUX0lPQ1RMX0JBU0UsIDMwMCwgbGVuKQorI2RlZmluZSBVSV9HRVRfU1lTTkFNRShsZW4pCV9JT0MoX0lPQ19SRUFELCBVSU5QVVRfSU9DVExfQkFTRSwgNDQsIGxlbikKIAogLyoqCiAgKiBVSV9HRVRfVkVSU0lPTiAtIFJldHVybiB2ZXJzaW9uIG9mIHVpbnB1dCBwcm90b2NvbApAQCAtOTEsNyArOTEsNyBAQAogICogdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSB0aGUgaW9jdGwgYXJndW1lbnQuIFRoZSBwcm90b2NvbCB2ZXJzaW9uCiAgKiBpcyBoYXJkLWNvZGVkIGluIHRoZSBrZXJuZWwgYW5kIGlzIGluZGVwZW5kZW50IG9mIHRoZSB1aW5wdXQgZGV2aWNlLgogICovCi0jZGVmaW5lIFVJX0dFVF9WRVJTSU9OCQlfSU9SKFVJTlBVVF9JT0NUTF9CQVNFLCAzMDEsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVUlfR0VUX1ZFUlNJT04JCV9JT1IoVUlOUFVUX0lPQ1RMX0JBU0UsIDQ1LCB1bnNpZ25lZCBpbnQpCiAKIC8qCiAgKiBUbyB3cml0ZSBhIGZvcmNlLWZlZWRiYWNrLWNhcGFibGUgZHJpdmVyLCB0aGUgdXBsb2FkX2VmZmVjdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19yaW5nLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3JpbmcuaAppbmRleCA2MWM4MThhLi5hMzMxOGYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3JpbmcuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3JpbmcuaApAQCAtMTAxLDYgKzEwMSwxMyBAQAogCXN0cnVjdCB2cmluZ191c2VkICp1c2VkOwogfTsKIAorLyogQWxpZ25tZW50IHJlcXVpcmVtZW50cyBmb3IgdnJpbmcgZWxlbWVudHMuCisgKiBXaGVuIHVzaW5nIHByZS12aXJ0aW8gMS4wIGxheW91dCwgdGhlc2UgZmFsbCBvdXQgbmF0dXJhbGx5LgorICovCisjZGVmaW5lIFZSSU5HX0FWQUlMX0FMSUdOX1NJWkUgMgorI2RlZmluZSBWUklOR19VU0VEX0FMSUdOX1NJWkUgNAorI2RlZmluZSBWUklOR19ERVNDX0FMSUdOX1NJWkUgMTYKKwogLyogVGhlIHN0YW5kYXJkIGxheW91dCBmb3IgdGhlIHJpbmcgaXMgYSBjb250aW51b3VzIGNodW5rIG9mIG1lbW9yeSB3aGljaCBsb29rcwogICogbGlrZSB0aGlzLiAgV2UgYXNzdW1lIG51bSBpcyBhIHBvd2VyIG9mIDIuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL25taS5oIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL25taS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0N2Q5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2Uvbm1pLmgKQEAgLTAsMCArMSw1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogbm1pLmgKKyAqCisgKiBOTUkgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGFuZCByZWFzb24gY29kZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCBLZWlyIEZyYXNlciA8a2VpckB4ZW5zb3VyY2UuY29tPgorICovCisKKyNpZm5kZWYgX19YRU5fUFVCTElDX05NSV9IX18KKyNkZWZpbmUgX19YRU5fUFVCTElDX05NSV9IX18KKworI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CisKKy8qCisgKiBOTUkgcmVhc29uIGNvZGVzOgorICogQ3VycmVudGx5IHRoZXNlIGFyZSB4ODYtc3BlY2lmaWMsIHN0b3JlZCBpbiBhcmNoX3NoYXJlZF9pbmZvLm5taV9yZWFzb24uCisgKi8KKyAvKiBJL08tY2hlY2sgZXJyb3IgcmVwb3J0ZWQgdmlhIElTQSBwb3J0IDB4NjEsIGJpdCA2LiAqLworI2RlZmluZSBfWEVOX05NSVJFQVNPTl9pb19lcnJvciAgICAgMAorI2RlZmluZSBYRU5fTk1JUkVBU09OX2lvX2Vycm9yICAgICAgKDFVTCA8PCBfWEVOX05NSVJFQVNPTl9pb19lcnJvcikKKyAvKiBQQ0kgU0VSUiByZXBvcnRlZCB2aWEgSVNBIHBvcnQgMHg2MSwgYml0IDcuICovCisjZGVmaW5lIF9YRU5fTk1JUkVBU09OX3BjaV9zZXJyICAgICAxCisjZGVmaW5lIFhFTl9OTUlSRUFTT05fcGNpX3NlcnIgICAgICAoMVVMIDw8IF9YRU5fTk1JUkVBU09OX3BjaV9zZXJyKQorIC8qIFVua25vd24gaGFyZHdhcmUtZ2VuZXJhdGVkIE5NSS4gKi8KKyNkZWZpbmUgX1hFTl9OTUlSRUFTT05fdW5rbm93biAgICAgIDIKKyNkZWZpbmUgWEVOX05NSVJFQVNPTl91bmtub3duICAgICAgICgxVUwgPDwgX1hFTl9OTUlSRUFTT05fdW5rbm93bikKKworLyoKKyAqIGxvbmcgbm1pX29wKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKKyAqIE5CLiBBbGwgb3BzIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCisKKy8qCisgKiBSZWdpc3RlciBOTUkgY2FsbGJhY2sgZm9yIHRoaXMgKGNhbGxpbmcpIFZDUFUuIEN1cnJlbnRseSB0aGlzIG9ubHkgbWFrZXMKKyAqIHNlbnNlIGZvciBkb21haW4gMCwgdmNwdSAwLiBBbGwgb3RoZXIgY2FsbGVycyB3aWxsIGJlIHJldHVybmVkIEVJTlZBTC4KKyAqIGFyZyA9PSBwb2ludGVyIHRvIHhlbm5taV9jYWxsYmFjayBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgWEVOTk1JX3JlZ2lzdGVyX2NhbGxiYWNrICAgMAorc3RydWN0IHhlbm5taV9jYWxsYmFjayB7CisgICAgdW5zaWduZWQgbG9uZyBoYW5kbGVyX2FkZHJlc3M7CisgICAgdW5zaWduZWQgbG9uZyBwYWQ7Cit9OworREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVubm1pX2NhbGxiYWNrKTsKKworLyoKKyAqIERlcmVnaXN0ZXIgTk1JIGNhbGxiYWNrIGZvciB0aGlzIChjYWxsaW5nKSBWQ1BVLgorICogYXJnID09IE5VTEwuCisgKi8KKyNkZWZpbmUgWEVOTk1JX3VucmVnaXN0ZXJfY2FsbGJhY2sgMQorCisjZW5kaWYgLyogX19YRU5fUFVCTElDX05NSV9IX18gKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5jIGIva2VybmVsL2F1ZGl0LmMKaW5kZXggZjhmMjAzZS4uNzJhYjc1OSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTQyOSw3ICs0MjksNyBAQAogICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNvbnN1bWUgYW4gc2tiIGFzIG1pZ2h0IGJlIGV4cGVjdGVkIHNpbmNlIGl0IGhhcyB0bwogICogY29weSBpdCBhbnl3YXlzLgogICovCi1zdGF0aWMgdm9pZCBrYXVkaXRkX3NlbmRfbXVsdGljYXN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQga2F1ZGl0ZF9zZW5kX211bHRpY2FzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHNrX2J1ZmYJCSpjb3B5OwogCXN0cnVjdCBhdWRpdF9uZXQJKmF1bmV0ID0gbmV0X2dlbmVyaWMoJmluaXRfbmV0LCBhdWRpdF9uZXRfaWQpOwpAQCAtNDQ4LDExICs0NDgsMTEgQEAKIAkgKiBubyByZWFzb24gZm9yIG5ldyBtdWx0aWNhc3QgY2xpZW50cyB0byBjb250aW51ZSB3aXRoIHRoaXMKIAkgKiBub24tY29tcGxpYW5jZS4KIAkgKi8KLQljb3B5ID0gc2tiX2NvcHkoc2tiLCBHRlBfS0VSTkVMKTsKKwljb3B5ID0gc2tiX2NvcHkoc2tiLCBnZnBfbWFzayk7CiAJaWYgKCFjb3B5KQogCQlyZXR1cm47CiAKLQlubG1zZ19tdWx0aWNhc3Qoc29jaywgY29weSwgMCwgQVVESVRfTkxHUlBfUkVBRExPRywgR0ZQX0tFUk5FTCk7CisJbmxtc2dfbXVsdGljYXN0KHNvY2ssIGNvcHksIDAsIEFVRElUX05MR1JQX1JFQURMT0csIGdmcF9tYXNrKTsKIH0KIAogLyoKQEAgLTExMDAsNyArMTEwMCw3IEBACiB9CiAKIC8qIFJ1biBjdXN0b20gYmluZCBmdW5jdGlvbiBvbiBuZXRsaW5rIHNvY2tldCBncm91cCBjb25uZWN0IG9yIGJpbmQgcmVxdWVzdHMuICovCi1zdGF0aWMgaW50IGF1ZGl0X2JpbmQoaW50IGdyb3VwKQorc3RhdGljIGludCBhdWRpdF9iaW5kKHN0cnVjdCBuZXQgKm5ldCwgaW50IGdyb3VwKQogewogCWlmICghY2FwYWJsZShDQVBfQVVESVRfUkVBRCkpCiAJCXJldHVybiAtRVBFUk07CkBAIC0xOTQwLDcgKzE5NDAsNyBAQAogCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IG5sbXNnX2hkcihhYi0+c2tiKTsKIAogCQlubGgtPm5sbXNnX2xlbiA9IGFiLT5za2ItPmxlbjsKLQkJa2F1ZGl0ZF9zZW5kX211bHRpY2FzdF9za2IoYWItPnNrYik7CisJCWthdWRpdGRfc2VuZF9tdWx0aWNhc3Rfc2tiKGFiLT5za2IsIGFiLT5nZnBfbWFzayk7CiAKIAkJLyoKIAkJICogVGhlIG9yaWdpbmFsIGthdWRpdCB1bmljYXN0IHNvY2tldCBzZW5kcyB1cCBtZXNzYWdlcyB3aXRoCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRmaWx0ZXIuYyBiL2tlcm5lbC9hdWRpdGZpbHRlci5jCmluZGV4IDM1OThlMTMuLjRmNjhhMzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdGZpbHRlci5jCisrKyBiL2tlcm5lbC9hdWRpdGZpbHRlci5jCkBAIC00NDIsMTkgKzQ0Miw3IEBACiAJCWlmICgoZi0+dHlwZSA9PSBBVURJVF9MT0dJTlVJRCkgJiYgKGYtPnZhbCA9PSBBVURJVF9VSURfVU5TRVQpKSB7CiAJCQlmLT50eXBlID0gQVVESVRfTE9HSU5VSURfU0VUOwogCQkJZi0+dmFsID0gMDsKLQkJfQotCi0JCWlmICgoZi0+dHlwZSA9PSBBVURJVF9QSUQpIHx8IChmLT50eXBlID09IEFVRElUX1BQSUQpKSB7Ci0JCQlzdHJ1Y3QgcGlkICpwaWQ7Ci0JCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCQlwaWQgPSBmaW5kX3ZwaWQoZi0+dmFsKTsKLQkJCWlmICghcGlkKSB7Ci0JCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQkJZXJyID0gLUVTUkNIOwotCQkJCWdvdG8gZXhpdF9mcmVlOwotCQkJfQotCQkJZi0+dmFsID0gcGlkX25yKHBpZCk7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCWVudHJ5LT5ydWxlLnBmbGFncyB8PSBBVURJVF9MT0dJTlVJRF9MRUdBQ1k7CiAJCX0KIAogCQllcnIgPSBhdWRpdF9maWVsZF92YWxpZChlbnRyeSwgZik7CkBAIC02MzAsNiArNjE4LDEzIEBACiAJCQlkYXRhLT5idWZsZW4gKz0gZGF0YS0+dmFsdWVzW2ldID0KIAkJCQlhdWRpdF9wYWNrX3N0cmluZygmYnVmcCwga3J1bGUtPmZpbHRlcmtleSk7CiAJCQlicmVhazsKKwkJY2FzZSBBVURJVF9MT0dJTlVJRF9TRVQ6CisJCQlpZiAoa3J1bGUtPnBmbGFncyAmIEFVRElUX0xPR0lOVUlEX0xFR0FDWSAmJiAhZi0+dmFsKSB7CisJCQkJZGF0YS0+ZmllbGRzW2ldID0gQVVESVRfTE9HSU5VSUQ7CisJCQkJZGF0YS0+dmFsdWVzW2ldID0gQVVESVRfVUlEX1VOU0VUOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogZmFsbHRocm91Z2ggaWYgc2V0ICovCiAJCWRlZmF1bHQ6CiAJCQlkYXRhLT52YWx1ZXNbaV0gPSBmLT52YWw7CiAJCX0KQEAgLTY0Niw2ICs2NDEsNyBAQAogCWludCBpOwogCiAJaWYgKGEtPmZsYWdzICE9IGItPmZsYWdzIHx8CisJICAgIGEtPnBmbGFncyAhPSBiLT5wZmxhZ3MgfHwKIAkgICAgYS0+bGlzdG5yICE9IGItPmxpc3RuciB8fAogCSAgICBhLT5hY3Rpb24gIT0gYi0+YWN0aW9uIHx8CiAJICAgIGEtPmZpZWxkX2NvdW50ICE9IGItPmZpZWxkX2NvdW50KQpAQCAtNzY0LDYgKzc2MCw3IEBACiAJbmV3ID0gJmVudHJ5LT5ydWxlOwogCW5ldy0+dmVyc19vcHMgPSBvbGQtPnZlcnNfb3BzOwogCW5ldy0+ZmxhZ3MgPSBvbGQtPmZsYWdzOworCW5ldy0+cGZsYWdzID0gb2xkLT5wZmxhZ3M7CiAJbmV3LT5saXN0bnIgPSBvbGQtPmxpc3RucjsKIAluZXctPmFjdGlvbiA9IG9sZC0+YWN0aW9uOwogCWZvciAoaSA9IDA7IGkgPCBBVURJVF9CSVRNQVNLX1NJWkU7IGkrKykKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdHNjLmMgYi9rZXJuZWwvYXVkaXRzYy5jCmluZGV4IGM3NTUyMmEuLjA3MjU2NmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdHNjLmMKKysrIGIva2VybmVsL2F1ZGl0c2MuYwpAQCAtNzIsNiArNzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8dWFwaS9saW51eC9saW1pdHMuaD4KIAogI2luY2x1ZGUgImF1ZGl0LmgiCiAKQEAgLTE4NjEsOCArMTg2Myw3IEBACiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKG4sICZjb250ZXh0LT5uYW1lc19saXN0LCBsaXN0KSB7Ci0JCS8qIGRvZXMgdGhlIG5hbWUgcG9pbnRlciBtYXRjaD8gKi8KLQkJaWYgKCFuLT5uYW1lIHx8IG4tPm5hbWUtPm5hbWUgIT0gbmFtZS0+bmFtZSkKKwkJaWYgKCFuLT5uYW1lIHx8IHN0cmNtcChuLT5uYW1lLT5uYW1lLCBuYW1lLT5uYW1lKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIG1hdGNoIHRoZSBjb3JyZWN0IHJlY29yZCB0eXBlICovCkBAIC0xODc3LDEyICsxODc4LDQ4IEBACiAJfQogCiBvdXRfYWxsb2M6Ci0JLyogdW5hYmxlIHRvIGZpbmQgdGhlIG5hbWUgZnJvbSBhIHByZXZpb3VzIGdldG5hbWUoKS4gQWxsb2NhdGUgYSBuZXcKLQkgKiBhbm9ueW1vdXMgZW50cnkuCi0JICovCi0JbiA9IGF1ZGl0X2FsbG9jX25hbWUoY29udGV4dCwgQVVESVRfVFlQRV9OT1JNQUwpOworCS8qIHVuYWJsZSB0byBmaW5kIGFuIGVudHJ5IHdpdGggYm90aCBhIG1hdGNoaW5nIG5hbWUgYW5kIHR5cGUgKi8KKwluID0gYXVkaXRfYWxsb2NfbmFtZShjb250ZXh0LCBBVURJVF9UWVBFX1VOS05PV04pOwogCWlmICghbikKIAkJcmV0dXJuOworCS8qIHVuZm9ydHVuYXRlbHksIHdoaWxlIHdlIG1heSBoYXZlIGEgcGF0aCBuYW1lIHRvIHJlY29yZCB3aXRoIHRoZQorCSAqIGlub2RlLCB3ZSBjYW4ndCBhbHdheXMgcmVseSBvbiB0aGUgc3RyaW5nIGxhc3RpbmcgdW50aWwgdGhlIGVuZCBvZgorCSAqIHRoZSBzeXNjYWxsIHNvIHdlIG5lZWQgdG8gY3JlYXRlIG91ciBvd24gY29weSwgaXQgbWF5IGZhaWwgZHVlIHRvCisJICogbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzLCBidXQgd2UgZG8gb3VyIGJlc3QgKi8KKwlpZiAobmFtZSkgeworCQkvKiB3ZSBjYW4ndCB1c2UgZ2V0bmFtZV9rZXJuZWwoKSBkdWUgdG8gc2l6ZSBsaW1pdHMgKi8KKwkJc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lLT5uYW1lKSArIDE7CisJCXN0cnVjdCBmaWxlbmFtZSAqbmV3ID0gX19nZXRuYW1lKCk7CisKKwkJaWYgKHVubGlrZWx5KCFuZXcpKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKGxlbiA8PSAoUEFUSF9NQVggLSBzaXplb2YoKm5ldykpKSB7CisJCQluZXctPm5hbWUgPSAoY2hhciAqKShuZXcpICsgc2l6ZW9mKCpuZXcpOworCQkJbmV3LT5zZXBhcmF0ZSA9IGZhbHNlOworCQl9IGVsc2UgaWYgKGxlbiA8PSBQQVRIX01BWCkgeworCQkJLyogdGhpcyBsb29rcyBvZGQsIGJ1dCBpcyBkdWUgdG8gZmluYWxfcHV0bmFtZSgpICovCisJCQlzdHJ1Y3QgZmlsZW5hbWUgKm5ldzI7CisKKwkJCW5ldzIgPSBrbWFsbG9jKHNpemVvZigqbmV3MiksIEdGUF9LRVJORUwpOworCQkJaWYgKHVubGlrZWx5KCFuZXcyKSkgeworCQkJCV9fcHV0bmFtZShuZXcpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJbmV3Mi0+bmFtZSA9IChjaGFyICopbmV3OworCQkJbmV3Mi0+c2VwYXJhdGUgPSB0cnVlOworCQkJbmV3ID0gbmV3MjsKKwkJfSBlbHNlIHsKKwkJCS8qIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYnV0IGxldCdzIGJlIHNhZmUgKi8KKwkJCV9fcHV0bmFtZShuZXcpOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RybGNweSgoY2hhciAqKW5ldy0+bmFtZSwgbmFtZS0+bmFtZSwgbGVuKTsKKwkJbmV3LT51cHRyID0gTlVMTDsKKwkJbmV3LT5hbmFtZSA9IG47CisJCW4tPm5hbWUgPSBuZXc7CisJCW4tPm5hbWVfcHV0ID0gdHJ1ZTsKKwl9CiBvdXQ6CiAJaWYgKHBhcmVudCkgewogCQluLT5uYW1lX2xlbiA9IG4tPm5hbWUgPyBwYXJlbnRfbGVuKG4tPm5hbWUtPm5hbWUpIDogQVVESVRfTkFNRV9GVUxMOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuYwppbmRleCBkNjU5NGU0Li5hNjRlN2EyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NvcmUuYworKysgYi9rZXJuZWwvYnBmL2NvcmUuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAKIHZvaWQgYnBmX2ppdF9iaW5hcnlfZnJlZShzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhkcikKIHsKLQltb2R1bGVfZnJlZShOVUxMLCBoZHIpOworCW1vZHVsZV9tZW1mcmVlKGhkcik7CiB9CiAjZW5kaWYgLyogQ09ORklHX0JQRl9KSVQgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCAwODhhYzBiLi41MzZlZGMyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYworKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJaW50IHVmZCA9IGF0dHItPm1hcF9mZDsKIAlzdHJ1Y3QgZmQgZiA9IGZkZ2V0KHVmZCk7CiAJc3RydWN0IGJwZl9tYXAgKm1hcDsKLQl2b2lkICprZXksICp2YWx1ZTsKKwl2b2lkICprZXksICp2YWx1ZSwgKnB0cjsKIAlpbnQgZXJyOwogCiAJaWYgKENIRUNLX0FUVFIoQlBGX01BUF9MT09LVVBfRUxFTSkpCkBAIC0xNjksMjAgKzE2OSwyOSBAQAogCWlmIChjb3B5X2Zyb21fdXNlcihrZXksIHVrZXksIG1hcC0+a2V5X3NpemUpICE9IDApCiAJCWdvdG8gZnJlZV9rZXk7CiAKLQllcnIgPSAtRU5PRU5UOwotCXJjdV9yZWFkX2xvY2soKTsKLQl2YWx1ZSA9IG1hcC0+b3BzLT5tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOworCWVyciA9IC1FTk9NRU07CisJdmFsdWUgPSBrbWFsbG9jKG1hcC0+dmFsdWVfc2l6ZSwgR0ZQX1VTRVIpOwogCWlmICghdmFsdWUpCi0JCWdvdG8gZXJyX3VubG9jazsKKwkJZ290byBmcmVlX2tleTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlwdHIgPSBtYXAtPm9wcy0+bWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKKwlpZiAocHRyKQorCQltZW1jcHkodmFsdWUsIHB0ciwgbWFwLT52YWx1ZV9zaXplKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWVyciA9IC1FTk9FTlQ7CisJaWYgKCFwdHIpCisJCWdvdG8gZnJlZV92YWx1ZTsKIAogCWVyciA9IC1FRkFVTFQ7CiAJaWYgKGNvcHlfdG9fdXNlcih1dmFsdWUsIHZhbHVlLCBtYXAtPnZhbHVlX3NpemUpICE9IDApCi0JCWdvdG8gZXJyX3VubG9jazsKKwkJZ290byBmcmVlX3ZhbHVlOwogCiAJZXJyID0gMDsKIAotZXJyX3VubG9jazoKLQlyY3VfcmVhZF91bmxvY2soKTsKK2ZyZWVfdmFsdWU6CisJa2ZyZWUodmFsdWUpOwogZnJlZV9rZXk6CiAJa2ZyZWUoa2V5KTsKIGVycl9wdXQ6CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwLmMKaW5kZXggYmIyNjNkMC4uMDRjZmU4YSAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cC5jCisrKyBiL2tlcm5lbC9jZ3JvdXAuYwpAQCAtMTkwOSw3ICsxOTA5LDcgQEAKIAkgKgogCSAqIEFuZCBkb24ndCBraWxsIHRoZSBkZWZhdWx0IHJvb3QuCiAJICovCi0JaWYgKGNzc19oYXNfb25saW5lX2NoaWxkcmVuKCZyb290LT5jZ3JwLnNlbGYpIHx8CisJaWYgKCFsaXN0X2VtcHR5KCZyb290LT5jZ3JwLnNlbGYuY2hpbGRyZW4pIHx8CiAJICAgIHJvb3QgPT0gJmNncnBfZGZsX3Jvb3QpCiAJCWNncm91cF9wdXQoJnJvb3QtPmNncnApOwogCWVsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9kZWJ1Z19jb3JlLmMgYi9rZXJuZWwvZGVidWcvZGVidWdfY29yZS5jCmluZGV4IDFhZGY2MmIuLjA3Y2UxOGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWJ1Zy9kZWJ1Z19jb3JlLmMKKysrIGIva2VybmVsL2RlYnVnL2RlYnVnX2NvcmUuYwpAQCAtMjcsNiArMjcsOSBAQAogICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgIktHREI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgpAQCAtMTk2LDggKzE5OSw4IEBACiAJCXJldHVybiBlcnI7CiAJZXJyID0ga2dkYl9hcmNoX3JlbW92ZV9icmVha3BvaW50KCZ0bXApOwogCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiS0dEQjogQ3JpdGljYWwgYnJlYWtwb2ludCBlcnJvciwga2VybmVsICIKLQkJICAgIm1lbW9yeSBkZXN0cm95ZWQgYXQ6ICVseCIsIGFkZHIpOworCQlwcl9lcnIoIkNyaXRpY2FsIGJyZWFrcG9pbnQgZXJyb3IsIGtlcm5lbCBtZW1vcnkgZGVzdHJveWVkIGF0OiAlbHhcbiIsCisJCSAgICAgICBhZGRyKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNTYsOCArMjU5LDggQEAKIAkJZXJyb3IgPSBrZ2RiX2FyY2hfc2V0X2JyZWFrcG9pbnQoJmtnZGJfYnJlYWtbaV0pOwogCQlpZiAoZXJyb3IpIHsKIAkJCXJldCA9IGVycm9yOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiS0dEQjogQlAgaW5zdGFsbCBmYWlsZWQ6ICVseCIsCi0JCQkgICAgICAga2dkYl9icmVha1tpXS5icHRfYWRkcik7CisJCQlwcl9pbmZvKCJCUCBpbnN0YWxsIGZhaWxlZDogJWx4XG4iLAorCQkJCWtnZGJfYnJlYWtbaV0uYnB0X2FkZHIpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMzE5LDggKzMyMiw4IEBACiAJCQljb250aW51ZTsKIAkJZXJyb3IgPSBrZ2RiX2FyY2hfcmVtb3ZlX2JyZWFrcG9pbnQoJmtnZGJfYnJlYWtbaV0pOwogCQlpZiAoZXJyb3IpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIktHREI6IEJQIHJlbW92ZSBmYWlsZWQ6ICVseFxuIiwKLQkJCSAgICAgICBrZ2RiX2JyZWFrW2ldLmJwdF9hZGRyKTsKKwkJCXByX2luZm8oIkJQIHJlbW92ZSBmYWlsZWQ6ICVseFxuIiwKKwkJCQlrZ2RiX2JyZWFrW2ldLmJwdF9hZGRyKTsKIAkJCXJldCA9IGVycm9yOwogCQl9CiAKQEAgLTM2Nyw3ICszNzAsNyBAQAogCQkJZ290byBzZXR1bmRlZmluZWQ7CiAJCWVycm9yID0ga2dkYl9hcmNoX3JlbW92ZV9icmVha3BvaW50KCZrZ2RiX2JyZWFrW2ldKTsKIAkJaWYgKGVycm9yKQotCQkJcHJpbnRrKEtFUk5fRVJSICJLR0RCOiBicmVha3BvaW50IHJlbW92ZSBmYWlsZWQ6ICVseFxuIiwKKwkJCXByX2VycigiYnJlYWtwb2ludCByZW1vdmUgZmFpbGVkOiAlbHhcbiIsCiAJCQkgICAgICAga2dkYl9icmVha1tpXS5icHRfYWRkcik7CiBzZXR1bmRlZmluZWQ6CiAJCWtnZGJfYnJlYWtbaV0uc3RhdGUgPSBCUF9VTkRFRklORUQ7CkBAIC00MDAsOSArNDAzLDkgQEAKIAlpZiAocHJpbnRfd2FpdCkgewogI2lmZGVmIENPTkZJR19LR0RCX0tEQgogCQlpZiAoIWRiZ19rZGJfbW9kZSkKLQkJCXByaW50ayhLRVJOX0NSSVQgIktHREI6IHdhaXRpbmcuLi4gb3IgJDMjMzMgZm9yIEtEQlxuIik7CisJCQlwcl9jcml0KCJ3YWl0aW5nLi4uIG9yICQzIzMzIGZvciBLREJcbiIpOwogI2Vsc2UKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiS0dEQjogV2FpdGluZyBmb3IgcmVtb3RlIGRlYnVnZ2VyXG4iKTsKKwkJcHJfY3JpdCgiV2FpdGluZyBmb3IgcmVtb3RlIGRlYnVnZ2VyXG4iKTsKICNlbmRpZgogCX0KIAlyZXR1cm4gMTsKQEAgLTQzMCw4ICs0MzMsNyBAQAogCQlleGNlcHRpb25fbGV2ZWwgPSAwOwogCQlrZ2RiX3NraXBleGNlcHRpb24oa3MtPmV4X3ZlY3Rvciwga3MtPmxpbnV4X3JlZ3MpOwogCQlkYmdfYWN0aXZhdGVfc3dfYnJlYWtwb2ludHMoKTsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiS0dEQjogcmUtZW50ZXIgZXJyb3I6IGJyZWFrcG9pbnQgcmVtb3ZlZCAlbHhcbiIsCi0JCQlhZGRyKTsKKwkJcHJfY3JpdCgicmUtZW50ZXIgZXJyb3I6IGJyZWFrcG9pbnQgcmVtb3ZlZCAlbHhcbiIsIGFkZHIpOwogCQlXQVJOX09OX09OQ0UoMSk7CiAKIAkJcmV0dXJuIDE7CkBAIC00NDQsNyArNDQ2LDcgQEAKIAkJcGFuaWMoIlJlY3Vyc2l2ZSBlbnRyeSB0byBkZWJ1Z2dlciIpOwogCX0KIAotCXByaW50ayhLRVJOX0NSSVQgIktHREI6IHJlLWVudGVyIGV4Y2VwdGlvbjogQUxMIGJyZWFrcG9pbnRzIGtpbGxlZFxuIik7CisJcHJfY3JpdCgicmUtZW50ZXIgZXhjZXB0aW9uOiBBTEwgYnJlYWtwb2ludHMga2lsbGVkXG4iKTsKICNpZmRlZiBDT05GSUdfS0dEQl9LREIKIAkvKiBBbGxvdyBrZGIgdG8gZGVidWcgaXRzZWxmIG9uZSBsZXZlbCAqLwogCXJldHVybiAwOwpAQCAtNDcxLDYgKzQ3Myw3IEBACiAJaW50IGNwdTsKIAlpbnQgdHJhY2Vfb24gPSAwOwogCWludCBvbmxpbmVfY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOworCXU2NCB0aW1lX2xlZnQ7CiAKIAlrZ2RiX2luZm9ba3MtPmNwdV0uZW50ZXJfa2dkYisrOwogCWtnZGJfaW5mb1trcy0+Y3B1XS5leGNlcHRpb25fc3RhdGUgfD0gZXhjZXB0aW9uX3N0YXRlOwpAQCAtNTk1LDkgKzU5OCwxMyBAQAogCS8qCiAJICogV2FpdCBmb3IgdGhlIG90aGVyIENQVXMgdG8gYmUgbm90aWZpZWQgYW5kIGJlIHdhaXRpbmcgZm9yIHVzOgogCSAqLwotCXdoaWxlIChrZ2RiX2RvX3JvdW5kdXAgJiYgKGF0b21pY19yZWFkKCZtYXN0ZXJzX2luX2tnZGIpICsKLQkJCQlhdG9taWNfcmVhZCgmc2xhdmVzX2luX2tnZGIpKSAhPSBvbmxpbmVfY3B1cykKKwl0aW1lX2xlZnQgPSBsb29wc19wZXJfamlmZnkgKiBIWjsKKwl3aGlsZSAoa2dkYl9kb19yb3VuZHVwICYmIC0tdGltZV9sZWZ0ICYmCisJICAgICAgIChhdG9taWNfcmVhZCgmbWFzdGVyc19pbl9rZ2RiKSArIGF0b21pY19yZWFkKCZzbGF2ZXNfaW5fa2dkYikpICE9CisJCSAgIG9ubGluZV9jcHVzKQogCQljcHVfcmVsYXgoKTsKKwlpZiAoIXRpbWVfbGVmdCkKKwkJcHJfY3JpdCgiS0dEQjogVGltZWQgb3V0IHdhaXRpbmcgZm9yIHNlY29uZGFyeSBDUFVzLlxuIik7CiAKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgdGhlIHByaW1hcnkgcHJvY2Vzc29yIGlzIGNvbXBsZXRlbHkKQEAgLTc5NSwxNSArODAyLDE1IEBACiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfZGJnKGludCBrZXkpCiB7CiAJaWYgKCFkYmdfaW9fb3BzKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIkVSUk9SOiBObyBLR0RCIEkvTyBtb2R1bGUgYXZhaWxhYmxlXG4iKTsKKwkJcHJfY3JpdCgiRVJST1I6IE5vIEtHREIgSS9PIG1vZHVsZSBhdmFpbGFibGVcbiIpOwogCQlyZXR1cm47CiAJfQogCWlmICgha2dkYl9jb25uZWN0ZWQpIHsKICNpZmRlZiBDT05GSUdfS0dEQl9LREIKIAkJaWYgKCFkYmdfa2RiX21vZGUpCi0JCQlwcmludGsoS0VSTl9DUklUICJLR0RCIG9yICQzIzMzIGZvciBLREJcbiIpOworCQkJcHJfY3JpdCgiS0dEQiBvciAkMyMzMyBmb3IgS0RCXG4iKTsKICNlbHNlCi0JCXByaW50ayhLRVJOX0NSSVQgIkVudGVyaW5nIEtHREJcbiIpOworCQlwcl9jcml0KCJFbnRlcmluZyBLR0RCXG4iKTsKICNlbmRpZgogCX0KIApAQCAtOTQ1LDcgKzk1Miw3IEBACiB7CiAJa2dkYl9icmVha19hc2FwID0gMDsKIAotCXByaW50ayhLRVJOX0NSSVQgImtnZGI6IFdhaXRpbmcgZm9yIGNvbm5lY3Rpb24gZnJvbSByZW1vdGUgZ2RiLi4uXG4iKTsKKwlwcl9jcml0KCJXYWl0aW5nIGZvciBjb25uZWN0aW9uIGZyb20gcmVtb3RlIGdkYi4uLlxuIik7CiAJa2dkYl9icmVha3BvaW50KCk7CiB9CiAKQEAgLTk2NCw4ICs5NzEsNyBAQAogCWlmIChkYmdfaW9fb3BzKSB7CiAJCXNwaW5fdW5sb2NrKCZrZ2RiX3JlZ2lzdHJhdGlvbl9sb2NrKTsKIAotCQlwcmludGsoS0VSTl9FUlIgImtnZGI6IEFub3RoZXIgSS9PIGRyaXZlciBpcyBhbHJlYWR5ICIKLQkJCQkicmVnaXN0ZXJlZCB3aXRoIEtHREIuXG4iKTsKKwkJcHJfZXJyKCJBbm90aGVyIEkvTyBkcml2ZXIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHdpdGggS0dEQlxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC05ODEsOCArOTg3LDcgQEAKIAogCXNwaW5fdW5sb2NrKCZrZ2RiX3JlZ2lzdHJhdGlvbl9sb2NrKTsKIAotCXByaW50ayhLRVJOX0lORk8gImtnZGI6IFJlZ2lzdGVyZWQgSS9PIGRyaXZlciAlcy5cbiIsCi0JICAgICAgIG5ld19kYmdfaW9fb3BzLT5uYW1lKTsKKwlwcl9pbmZvKCJSZWdpc3RlcmVkIEkvTyBkcml2ZXIgJXNcbiIsIG5ld19kYmdfaW9fb3BzLT5uYW1lKTsKIAogCS8qIEFybSBLR0RCIG5vdy4gKi8KIAlrZ2RiX3JlZ2lzdGVyX2NhbGxiYWNrcygpOwpAQCAtMTAxNyw4ICsxMDIyLDcgQEAKIAogCXNwaW5fdW5sb2NrKCZrZ2RiX3JlZ2lzdHJhdGlvbl9sb2NrKTsKIAotCXByaW50ayhLRVJOX0lORk8KLQkJImtnZGI6IFVucmVnaXN0ZXJlZCBJL08gZHJpdmVyICVzLCBkZWJ1Z2dlciBkaXNhYmxlZC5cbiIsCisJcHJfaW5mbygiVW5yZWdpc3RlcmVkIEkvTyBkcml2ZXIgJXMsIGRlYnVnZ2VyIGRpc2FibGVkXG4iLAogCQlvbGRfZGJnX2lvX29wcy0+bmFtZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrZ2RiX3VucmVnaXN0ZXJfaW9fbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2JwLmMgYi9rZXJuZWwvZGVidWcva2RiL2tkYl9icC5jCmluZGV4IGIyMGQ1NDQuLmUxZGJmNGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2JwLmMKKysrIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfYnAuYwpAQCAtNTMxLDIyICs1MzEsMjkgQEAKIAlmb3IgKGkgPSAwLCBicCA9IGtkYl9icmVha3BvaW50czsgaSA8IEtEQl9NQVhCUFQ7IGkrKywgYnArKykKIAkJYnAtPmJwX2ZyZWUgPSAxOwogCi0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgiYnAiLCBrZGJfYnAsICJbPHZhZGRyPl0iLAotCQkiU2V0L0Rpc3BsYXkgYnJlYWtwb2ludHMiLCAwLCBLREJfUkVQRUFUX05PX0FSR1MpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImJsIiwga2RiX2JwLCAiWzx2YWRkcj5dIiwKLQkJIkRpc3BsYXkgYnJlYWtwb2ludHMiLCAwLCBLREJfUkVQRUFUX05PX0FSR1MpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiYnAiLCBrZGJfYnAsICJbPHZhZGRyPl0iLAorCQkiU2V0L0Rpc3BsYXkgYnJlYWtwb2ludHMiLCAwLAorCQlLREJfRU5BQkxFX0ZMT1dfQ1RSTCB8IEtEQl9SRVBFQVRfTk9fQVJHUyk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJibCIsIGtkYl9icCwgIls8dmFkZHI+XSIsCisJCSJEaXNwbGF5IGJyZWFrcG9pbnRzIiwgMCwKKwkJS0RCX0VOQUJMRV9GTE9XX0NUUkwgfCBLREJfUkVQRUFUX05PX0FSR1MpOwogCWlmIChhcmNoX2tnZGJfb3BzLmZsYWdzICYgS0dEQl9IV19CUkVBS1BPSU5UKQotCQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJicGgiLCBrZGJfYnAsICJbPHZhZGRyPl0iLAotCQkiW2RhdGFyIFtsZW5ndGhdfGRhdGF3IFtsZW5ndGhdXSAgIFNldCBodyBicmsiLCAwLCBLREJfUkVQRUFUX05PX0FSR1MpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImJjIiwga2RiX2JjLCAiPGJwbnVtPiIsCi0JCSJDbGVhciBCcmVha3BvaW50IiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJiZSIsIGtkYl9iYywgIjxicG51bT4iLAotCQkiRW5hYmxlIEJyZWFrcG9pbnQiLCAwLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImJkIiwga2RiX2JjLCAiPGJwbnVtPiIsCi0JCSJEaXNhYmxlIEJyZWFrcG9pbnQiLCAwLCBLREJfUkVQRUFUX05PTkUpOworCQlrZGJfcmVnaXN0ZXJfZmxhZ3MoImJwaCIsIGtkYl9icCwgIls8dmFkZHI+XSIsCisJCSJbZGF0YXIgW2xlbmd0aF18ZGF0YXcgW2xlbmd0aF1dICAgU2V0IGh3IGJyayIsIDAsCisJCUtEQl9FTkFCTEVfRkxPV19DVFJMIHwgS0RCX1JFUEVBVF9OT19BUkdTKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImJjIiwga2RiX2JjLCAiPGJwbnVtPiIsCisJCSJDbGVhciBCcmVha3BvaW50IiwgMCwKKwkJS0RCX0VOQUJMRV9GTE9XX0NUUkwpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiYmUiLCBrZGJfYmMsICI8YnBudW0+IiwKKwkJIkVuYWJsZSBCcmVha3BvaW50IiwgMCwKKwkJS0RCX0VOQUJMRV9GTE9XX0NUUkwpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiYmQiLCBrZGJfYmMsICI8YnBudW0+IiwKKwkJIkRpc2FibGUgQnJlYWtwb2ludCIsIDAsCisJCUtEQl9FTkFCTEVfRkxPV19DVFJMKTsKIAotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoInNzIiwga2RiX3NzLCAiIiwKLQkJIlNpbmdsZSBTdGVwIiwgMSwgS0RCX1JFUEVBVF9OT19BUkdTKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoInNzIiwga2RiX3NzLCAiIiwKKwkJIlNpbmdsZSBTdGVwIiwgMSwKKwkJS0RCX0VOQUJMRV9GTE9XX0NUUkwgfCBLREJfUkVQRUFUX05PX0FSR1MpOwogCS8qCiAJICogQXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBpbml0aWFsaXphdGlvbi4KIAkgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2RlYnVnZ2VyLmMgYi9rZXJuZWwvZGVidWcva2RiL2tkYl9kZWJ1Z2dlci5jCmluZGV4IDg4NTljYTMuLjE1ZTFhN2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2RlYnVnZ2VyLmMKKysrIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfZGVidWdnZXIuYwpAQCAtMTI5LDYgKzEyOSwxMCBAQAogCQlrcy0+cGFzc19leGNlcHRpb24gPSAxOwogCQlLREJfRkxBR19TRVQoQ0FUQVNUUk9QSElDKTsKIAl9CisJLyogc2V0IENBVEFTVFJPUEhJQyBpZiB0aGUgc3lzdGVtIGNvbnRhaW5zIHVucmVzcG9uc2l2ZSBwcm9jZXNzb3JzICovCisJZm9yX2VhY2hfb25saW5lX2NwdShpKQorCQlpZiAoIWtnZGJfaW5mb1tpXS5lbnRlcl9rZ2RiKQorCQkJS0RCX0ZMQUdfU0VUKENBVEFTVFJPUEhJQyk7CiAJaWYgKEtEQl9TVEFURShTU0JQVCkgJiYgcmVhc29uID09IEtEQl9SRUFTT05fU1NURVApIHsKIAkJS0RCX1NUQVRFX0NMRUFSKFNTQlBUKTsKIAkJS0RCX1NUQVRFX0NMRUFSKERPSU5HX1NTKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX21haW4uYyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX21haW4uYwppbmRleCAzNzk2NTBiLi43YjQwYzVmIDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcva2RiL2tkYl9tYWluLmMKKysrIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfbWFpbi5jCkBAIC0xMiw2ICsxMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rbXNnX2R1bXAuaD4KQEAgLTIzLDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgpAQCAtNDIsNiArNDQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAia2RiX3ByaXZhdGUuaCIKIAorI3VuZGVmCU1PRFVMRV9QQVJBTV9QUkVGSVgKKyNkZWZpbmUJTU9EVUxFX1BBUkFNX1BSRUZJWCAia2RiLiIKKworc3RhdGljIGludCBrZGJfY21kX2VuYWJsZWQgPSBDT05GSUdfS0RCX0RFRkFVTFRfRU5BQkxFOworbW9kdWxlX3BhcmFtX25hbWVkKGNtZF9lbmFibGUsIGtkYl9jbWRfZW5hYmxlZCwgaW50LCAwNjAwKTsKKwogI2RlZmluZSBHUkVQX0xFTiAyNTYKIGNoYXIga2RiX2dyZXBfc3RyaW5nW0dSRVBfTEVOXTsKIGludCBrZGJfZ3JlcHBpbmdfZmxhZzsKQEAgLTEyMSw2ICsxMjksNyBAQAogCUtEQk1TRyhCQURMRU5HVEgsICJJbnZhbGlkIGxlbmd0aCBmaWVsZCIpLAogCUtEQk1TRyhOT0JQLCAiTm8gQnJlYWtwb2ludCBleGlzdHMiKSwKIAlLREJNU0coQkFEQUREUiwgIkludmFsaWQgYWRkcmVzcyIpLAorCUtEQk1TRyhOT1BFUk0sICJQZXJtaXNzaW9uIGRlbmllZCIpLAogfTsKICN1bmRlZiBLREJNU0cKIApAQCAtMTg4LDYgKzE5NywyNiBAQAogfQogCiAvKgorICogQ2hlY2sgd2hldGhlciB0aGUgZmxhZ3Mgb2YgdGhlIGN1cnJlbnQgY29tbWFuZCBhbmQgdGhlIHBlcm1pc3Npb25zCisgKiBvZiB0aGUga2RiIGNvbnNvbGUgaGFzIGFsbG93IGEgY29tbWFuZCB0byBiZSBydW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBrZGJfY2hlY2tfZmxhZ3Moa2RiX2NtZGZsYWdzX3QgZmxhZ3MsIGludCBwZXJtaXNzaW9ucywKKwkJCQkgICBib29sIG5vX2FyZ3MpCit7CisJLyogcGVybWlzc2lvbnMgY29tZXMgZnJvbSB1c2Vyc3BhY2Ugc28gbmVlZHMgbWFzc2FnaW5nIHNsaWdodGx5ICovCisJcGVybWlzc2lvbnMgJj0gS0RCX0VOQUJMRV9NQVNLOworCXBlcm1pc3Npb25zIHw9IEtEQl9FTkFCTEVfQUxXQVlTX1NBRkU7CisKKwkvKiBzb21lIGNvbW1hbmRzIGNoYW5nZSBncm91cCB3aGVuIGxhdW5jaGVkIHdpdGggbm8gYXJndW1lbnRzICovCisJaWYgKG5vX2FyZ3MpCisJCXBlcm1pc3Npb25zIHw9IHBlcm1pc3Npb25zIDw8IEtEQl9FTkFCTEVfTk9fQVJHU19TSElGVDsKKworCWZsYWdzIHw9IEtEQl9FTkFCTEVfQUxMOworCisJcmV0dXJuIHBlcm1pc3Npb25zICYgZmxhZ3M7Cit9CisKKy8qCiAgKiBrZGJnZXRlbnYgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIHZhbHVlIG9mCiAgKglhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KICAqIFBhcmFtZXRlcnM6CkBAIC00NzYsNiArNTA1LDE1IEBACiAJa2RiX3N5bXRhYl90IHN5bXRhYjsKIAogCS8qCisJICogSWYgdGhlIGVuYWJsZSBmbGFncyBwcm9oaWJpdCBib3RoIGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzCisJICogYW5kIGZsb3cgY29udHJvbCB0aGVuIHRoZXJlIGFyZSBubyByZWFzb25hYmxlIGdyb3VuZHMgdG8KKwkgKiBwcm92aWRlIHN5bWJvbCBsb29rdXAuCisJICovCisJaWYgKCFrZGJfY2hlY2tfZmxhZ3MoS0RCX0VOQUJMRV9NRU1fUkVBRCB8IEtEQl9FTkFCTEVfRkxPV19DVFJMLAorCQkJICAgICBrZGJfY21kX2VuYWJsZWQsIGZhbHNlKSkKKwkJcmV0dXJuIEtEQl9OT1BFUk07CisKKwkvKgogCSAqIFByb2Nlc3MgYXJndW1lbnRzIHdoaWNoIGZvbGxvdyB0aGUgZm9sbG93aW5nIHN5bnRheDoKIAkgKgogCSAqICBzeW1ib2wgfCBudW1lcmljLWFkZHJlc3MgWysvLSBudW1lcmljLW9mZnNldF0KQEAgLTY0MSw4ICs2NzksMTMgQEAKIAkJaWYgKCFzLT5jb3VudCkKIAkJCXMtPnVzYWJsZSA9IDA7CiAJCWlmIChzLT51c2FibGUpCi0JCQlrZGJfcmVnaXN0ZXIocy0+bmFtZSwga2RiX2V4ZWNfZGVmY21kLAotCQkJCSAgICAgcy0+dXNhZ2UsIHMtPmhlbHAsIDApOworCQkJLyogbWFjcm9zIGFyZSBhbHdheXMgc2FmZSBiZWNhdXNlIHdoZW4gZXhlY3V0ZWQgZWFjaAorCQkJICogaW50ZXJuYWwgY29tbWFuZCByZS1lbnRlcnMga2RiX3BhcnNlKCkgYW5kIGlzCisJCQkgKiBzYWZldHkgY2hlY2tlZCBpbmRpdmlkdWFsbHkuCisJCQkgKi8KKwkJCWtkYl9yZWdpc3Rlcl9mbGFncyhzLT5uYW1lLCBrZGJfZXhlY19kZWZjbWQsIHMtPnVzYWdlLAorCQkJCQkgICBzLT5oZWxwLCAwLAorCQkJCQkgICBLREJfRU5BQkxFX0FMV0FZU19TQUZFKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghcy0+dXNhYmxlKQpAQCAtMTAwMywyNSArMTA0NiwyMiBAQAogCiAJaWYgKGkgPCBrZGJfbWF4X2NvbW1hbmRzKSB7CiAJCWludCByZXN1bHQ7CisKKwkJaWYgKCFrZGJfY2hlY2tfZmxhZ3ModHAtPmNtZF9mbGFncywga2RiX2NtZF9lbmFibGVkLCBhcmdjIDw9IDEpKQorCQkJcmV0dXJuIEtEQl9OT1BFUk07CisKIAkJS0RCX1NUQVRFX1NFVChDTUQpOwogCQlyZXN1bHQgPSAoKnRwLT5jbWRfZnVuYykoYXJnYy0xLCAoY29uc3QgY2hhciAqKilhcmd2KTsKIAkJaWYgKHJlc3VsdCAmJiBpZ25vcmVfZXJyb3JzICYmIHJlc3VsdCA+IEtEQl9DTURfR08pCiAJCQlyZXN1bHQgPSAwOwogCQlLREJfU1RBVEVfQ0xFQVIoQ01EKTsKLQkJc3dpdGNoICh0cC0+Y21kX3JlcGVhdCkgewotCQljYXNlIEtEQl9SRVBFQVRfTk9ORToKLQkJCWFyZ2MgPSAwOwotCQkJaWYgKGFyZ3ZbMF0pCi0JCQkJKihhcmd2WzBdKSA9ICdcMCc7Ci0JCQlicmVhazsKLQkJY2FzZSBLREJfUkVQRUFUX05PX0FSR1M6Ci0JCQlhcmdjID0gMTsKLQkJCWlmIChhcmd2WzFdKQotCQkJCSooYXJndlsxXSkgPSAnXDAnOwotCQkJYnJlYWs7Ci0JCWNhc2UgS0RCX1JFUEVBVF9XSVRIX0FSR1M6Ci0JCQlicmVhazsKLQkJfQorCisJCWlmICh0cC0+Y21kX2ZsYWdzICYgS0RCX1JFUEVBVF9XSVRIX0FSR1MpCisJCQlyZXR1cm4gcmVzdWx0OworCisJCWFyZ2MgPSB0cC0+Y21kX2ZsYWdzICYgS0RCX1JFUEVBVF9OT19BUkdTID8gMSA6IDA7CisJCWlmIChhcmd2W2FyZ2NdKQorCQkJKihhcmd2W2FyZ2NdKSA9ICdcMCc7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCkBAIC0xOTIxLDEwICsxOTYxLDE0IEBACiAgKi8KIHN0YXRpYyBpbnQga2RiX3NyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKKwlib29sIGNoZWNrX21hc2sgPQorCSAgICAha2RiX2NoZWNrX2ZsYWdzKEtEQl9FTkFCTEVfQUxMLCBrZGJfY21kX2VuYWJsZWQsIGZhbHNlKTsKKwogCWlmIChhcmdjICE9IDEpCiAJCXJldHVybiBLREJfQVJHQ09VTlQ7CisKIAlrZGJfdHJhcF9wcmludGsrKzsKLQlfX2hhbmRsZV9zeXNycSgqYXJndlsxXSwgZmFsc2UpOworCV9faGFuZGxlX3N5c3JxKCphcmd2WzFdLCBjaGVja19tYXNrKTsKIAlrZGJfdHJhcF9wcmludGstLTsKIAogCXJldHVybiAwOwpAQCAtMTk3OSw3ICsyMDIzLDcgQEAKIAkJa2RiX3ByaW50ZigiJS0yMHMlOHUgIDB4JXAgIiwgbW9kLT5uYW1lLAogCQkJICAgbW9kLT5jb3JlX3NpemUsICh2b2lkICopbW9kKTsKICNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAotCQlrZGJfcHJpbnRmKCIlNGxkICIsIG1vZHVsZV9yZWZjb3VudChtb2QpKTsKKwkJa2RiX3ByaW50ZigiJTRkICIsIG1vZHVsZV9yZWZjb3VudChtb2QpKTsKICNlbmRpZgogCQlpZiAobW9kLT5zdGF0ZSA9PSBNT0RVTEVfU1RBVEVfR09JTkcpCiAJCQlrZGJfcHJpbnRmKCIgKFVubG9hZGluZykiKTsKQEAgLTIxNTcsNiArMjIwMSw4IEBACiAJZm9yIChzdGFydF9jcHUgPSAtMSwgaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKIAkJaWYgKCFjcHVfb25saW5lKGkpKSB7CiAJCQlzdGF0ZSA9ICdGJzsJLyogY3B1IGlzIG9mZmxpbmUgKi8KKwkJfSBlbHNlIGlmICgha2dkYl9pbmZvW2ldLmVudGVyX2tnZGIpIHsKKwkJCXN0YXRlID0gJ0QnOwkvKiBjcHUgaXMgb25saW5lIGJ1dCB1bnJlc3BvbnNpdmUgKi8KIAkJfSBlbHNlIHsKIAkJCXN0YXRlID0gJyAnOwkvKiBjcHUgaXMgcmVzcG9uZGluZyB0byBrZGIgKi8KIAkJCWlmIChrZGJfdGFza19zdGF0ZV9jaGFyKEtEQl9UU0soaSkpID09ICdJJykKQEAgLTIyMTAsNyArMjI1Niw3IEBACiAJLyoKIAkgKiBWYWxpZGF0ZSBjcHVudW0KIAkgKi8KLQlpZiAoKGNwdW51bSA+IE5SX0NQVVMpIHx8ICFjcHVfb25saW5lKGNwdW51bSkpCisJaWYgKChjcHVudW0gPiBOUl9DUFVTKSB8fCAha2dkYl9pbmZvW2NwdW51bV0uZW50ZXJfa2dkYikKIAkJcmV0dXJuIEtEQl9CQURDUFVOVU07CiAKIAlkYmdfc3dpdGNoX2NwdSA9IGNwdW51bTsKQEAgLTIzNzUsNiArMjQyMSw4IEBACiAJCQlyZXR1cm4gMDsKIAkJaWYgKCFrdC0+Y21kX25hbWUpCiAJCQljb250aW51ZTsKKwkJaWYgKCFrZGJfY2hlY2tfZmxhZ3Moa3QtPmNtZF9mbGFncywga2RiX2NtZF9lbmFibGVkLCB0cnVlKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoc3RybGVuKGt0LT5jbWRfdXNhZ2UpID4gMjApCiAJCQlzcGFjZSA9ICJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7CiAJCWtkYl9wcmludGYoIiUtMTUuMTVzICUtMjBzJXMlc1xuIiwga3QtPmNtZF9uYW1lLApAQCAtMjYyOSw3ICsyNjc3LDcgQEAKIH0KIAogLyoKLSAqIGtkYl9yZWdpc3Rlcl9yZXBlYXQgLSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVnaXN0ZXIgYSBrZXJuZWwKKyAqIGtkYl9yZWdpc3Rlcl9mbGFncyAtIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWdpc3RlciBhIGtlcm5lbAogICogCWRlYnVnZ2VyIGNvbW1hbmQuCiAgKiBJbnB1dHM6CiAgKgljbWQJQ29tbWFuZCBuYW1lCkBAIC0yNjQxLDEyICsyNjg5LDEyIEBACiAgKgl6ZXJvIGZvciBzdWNjZXNzLCBvbmUgaWYgYSBkdXBsaWNhdGUgY29tbWFuZC4KICAqLwogI2RlZmluZSBrZGJfY29tbWFuZF9leHRlbmQgNTAJLyogYXJiaXRyYXJ5ICovCi1pbnQga2RiX3JlZ2lzdGVyX3JlcGVhdChjaGFyICpjbWQsCi0JCQlrZGJfZnVuY190IGZ1bmMsCi0JCQljaGFyICp1c2FnZSwKLQkJCWNoYXIgKmhlbHAsCi0JCQlzaG9ydCBtaW5sZW4sCi0JCQlrZGJfcmVwZWF0X3QgcmVwZWF0KQoraW50IGtkYl9yZWdpc3Rlcl9mbGFncyhjaGFyICpjbWQsCisJCSAgICAgICBrZGJfZnVuY190IGZ1bmMsCisJCSAgICAgICBjaGFyICp1c2FnZSwKKwkJICAgICAgIGNoYXIgKmhlbHAsCisJCSAgICAgICBzaG9ydCBtaW5sZW4sCisJCSAgICAgICBrZGJfY21kZmxhZ3NfdCBmbGFncykKIHsKIAlpbnQgaTsKIAlrZGJ0YWJfdCAqa3A7CkBAIC0yNjk0LDE5ICsyNzQyLDE4IEBACiAJa3AtPmNtZF9mdW5jICAgPSBmdW5jOwogCWtwLT5jbWRfdXNhZ2UgID0gdXNhZ2U7CiAJa3AtPmNtZF9oZWxwICAgPSBoZWxwOwotCWtwLT5jbWRfZmxhZ3MgID0gMDsKIAlrcC0+Y21kX21pbmxlbiA9IG1pbmxlbjsKLQlrcC0+Y21kX3JlcGVhdCA9IHJlcGVhdDsKKwlrcC0+Y21kX2ZsYWdzICA9IGZsYWdzOwogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrZGJfcmVnaXN0ZXJfcmVwZWF0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGtkYl9yZWdpc3Rlcl9mbGFncyk7CiAKIAogLyoKICAqIGtkYl9yZWdpc3RlciAtIENvbXBhdGliaWxpdHkgcmVnaXN0ZXIgZnVuY3Rpb24gZm9yIGNvbW1hbmRzIHRoYXQgZG8KICAqCW5vdCBuZWVkIHRvIHNwZWNpZnkgYSByZXBlYXQgc3RhdGUuICBFcXVpdmFsZW50IHRvCi0gKglrZGJfcmVnaXN0ZXJfcmVwZWF0IHdpdGggS0RCX1JFUEVBVF9OT05FLgorICoJa2RiX3JlZ2lzdGVyX2ZsYWdzIHdpdGggZmxhZ3Mgc2V0IHRvIDAuCiAgKiBJbnB1dHM6CiAgKgljbWQJQ29tbWFuZCBuYW1lCiAgKglmdW5jCUZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQKQEAgLTI3MjEsOCArMjc2OCw3IEBACiAJICAgICBjaGFyICpoZWxwLAogCSAgICAgc2hvcnQgbWlubGVuKQogewotCXJldHVybiBrZGJfcmVnaXN0ZXJfcmVwZWF0KGNtZCwgZnVuYywgdXNhZ2UsIGhlbHAsIG1pbmxlbiwKLQkJCQkgICBLREJfUkVQRUFUX05PTkUpOworCXJldHVybiBrZGJfcmVnaXN0ZXJfZmxhZ3MoY21kLCBmdW5jLCB1c2FnZSwgaGVscCwgbWlubGVuLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGtkYl9yZWdpc3Rlcik7CiAKQEAgLTI3NjQsODAgKzI4MTAsMTA5IEBACiAJZm9yX2VhY2hfa2RiY21kKGtwLCBpKQogCQlrcC0+Y21kX25hbWUgPSBOVUxMOwogCi0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgibWQiLCBrZGJfbWQsICI8dmFkZHI+IiwKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoIm1kIiwga2RiX21kLCAiPHZhZGRyPiIsCiAJICAiRGlzcGxheSBNZW1vcnkgQ29udGVudHMsIGFsc28gbWRXY04sIGUuZy4gbWQ4YzEiLCAxLAotCQkJICAgIEtEQl9SRVBFQVRfTk9fQVJHUyk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgibWRyIiwga2RiX21kLCAiPHZhZGRyPiA8Ynl0ZXM+IiwKLQkgICJEaXNwbGF5IFJhdyBNZW1vcnkiLCAwLCBLREJfUkVQRUFUX05PX0FSR1MpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoIm1kcCIsIGtkYl9tZCwgIjxwYWRkcj4gPGJ5dGVzPiIsCi0JICAiRGlzcGxheSBQaHlzaWNhbCBNZW1vcnkiLCAwLCBLREJfUkVQRUFUX05PX0FSR1MpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoIm1kcyIsIGtkYl9tZCwgIjx2YWRkcj4iLAotCSAgIkRpc3BsYXkgTWVtb3J5IFN5bWJvbGljYWxseSIsIDAsIEtEQl9SRVBFQVRfTk9fQVJHUyk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgibW0iLCBrZGJfbW0sICI8dmFkZHI+IDxjb250ZW50cz4iLAotCSAgIk1vZGlmeSBNZW1vcnkgQ29udGVudHMiLCAwLCBLREJfUkVQRUFUX05PX0FSR1MpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImdvIiwga2RiX2dvLCAiWzx2YWRkcj5dIiwKLQkgICJDb250aW51ZSBFeGVjdXRpb24iLCAxLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoInJkIiwga2RiX3JkLCAiIiwKLQkgICJEaXNwbGF5IFJlZ2lzdGVycyIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgicm0iLCBrZGJfcm0sICI8cmVnPiA8Y29udGVudHM+IiwKLQkgICJNb2RpZnkgUmVnaXN0ZXJzIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJlZiIsIGtkYl9lZiwgIjx2YWRkcj4iLAotCSAgIkRpc3BsYXkgZXhjZXB0aW9uIGZyYW1lIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJidCIsIGtkYl9idCwgIls8dmFkZHI+XSIsCi0JICAiU3RhY2sgdHJhY2ViYWNrIiwgMSwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJidHAiLCBrZGJfYnQsICI8cGlkPiIsCi0JICAiRGlzcGxheSBzdGFjayBmb3IgcHJvY2VzcyA8cGlkPiIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgiYnRhIiwga2RiX2J0LCAiW0R8UnxTfFR8Q3xafEV8VXxJfE18QV0iLAotCSAgIkJhY2t0cmFjZSBhbGwgcHJvY2Vzc2VzIG1hdGNoaW5nIHN0YXRlIGZsYWciLCAwLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImJ0YyIsIGtkYl9idCwgIiIsCi0JICAiQmFja3RyYWNlIGN1cnJlbnQgcHJvY2VzcyBvbiBlYWNoIGNwdSIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgiYnR0Iiwga2RiX2J0LCAiPHZhZGRyPiIsCisJICBLREJfRU5BQkxFX01FTV9SRUFEIHwgS0RCX1JFUEVBVF9OT19BUkdTKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoIm1kciIsIGtkYl9tZCwgIjx2YWRkcj4gPGJ5dGVzPiIsCisJICAiRGlzcGxheSBSYXcgTWVtb3J5IiwgMCwKKwkgIEtEQl9FTkFCTEVfTUVNX1JFQUQgfCBLREJfUkVQRUFUX05PX0FSR1MpOworCWtkYl9yZWdpc3Rlcl9mbGFncygibWRwIiwga2RiX21kLCAiPHBhZGRyPiA8Ynl0ZXM+IiwKKwkgICJEaXNwbGF5IFBoeXNpY2FsIE1lbW9yeSIsIDAsCisJICBLREJfRU5BQkxFX01FTV9SRUFEIHwgS0RCX1JFUEVBVF9OT19BUkdTKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoIm1kcyIsIGtkYl9tZCwgIjx2YWRkcj4iLAorCSAgIkRpc3BsYXkgTWVtb3J5IFN5bWJvbGljYWxseSIsIDAsCisJICBLREJfRU5BQkxFX01FTV9SRUFEIHwgS0RCX1JFUEVBVF9OT19BUkdTKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoIm1tIiwga2RiX21tLCAiPHZhZGRyPiA8Y29udGVudHM+IiwKKwkgICJNb2RpZnkgTWVtb3J5IENvbnRlbnRzIiwgMCwKKwkgIEtEQl9FTkFCTEVfTUVNX1dSSVRFIHwgS0RCX1JFUEVBVF9OT19BUkdTKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImdvIiwga2RiX2dvLCAiWzx2YWRkcj5dIiwKKwkgICJDb250aW51ZSBFeGVjdXRpb24iLCAxLAorCSAgS0RCX0VOQUJMRV9SRUdfV1JJVEUgfCBLREJfRU5BQkxFX0FMV0FZU19TQUZFX05PX0FSR1MpOworCWtkYl9yZWdpc3Rlcl9mbGFncygicmQiLCBrZGJfcmQsICIiLAorCSAgIkRpc3BsYXkgUmVnaXN0ZXJzIiwgMCwKKwkgIEtEQl9FTkFCTEVfUkVHX1JFQUQpOworCWtkYl9yZWdpc3Rlcl9mbGFncygicm0iLCBrZGJfcm0sICI8cmVnPiA8Y29udGVudHM+IiwKKwkgICJNb2RpZnkgUmVnaXN0ZXJzIiwgMCwKKwkgIEtEQl9FTkFCTEVfUkVHX1dSSVRFKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImVmIiwga2RiX2VmLCAiPHZhZGRyPiIsCisJICAiRGlzcGxheSBleGNlcHRpb24gZnJhbWUiLCAwLAorCSAgS0RCX0VOQUJMRV9NRU1fUkVBRCk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJidCIsIGtkYl9idCwgIls8dmFkZHI+XSIsCisJICAiU3RhY2sgdHJhY2ViYWNrIiwgMSwKKwkgIEtEQl9FTkFCTEVfTUVNX1JFQUQgfCBLREJfRU5BQkxFX0lOU1BFQ1RfTk9fQVJHUyk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJidHAiLCBrZGJfYnQsICI8cGlkPiIsCisJICAiRGlzcGxheSBzdGFjayBmb3IgcHJvY2VzcyA8cGlkPiIsIDAsCisJICBLREJfRU5BQkxFX0lOU1BFQ1QpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiYnRhIiwga2RiX2J0LCAiW0R8UnxTfFR8Q3xafEV8VXxJfE18QV0iLAorCSAgIkJhY2t0cmFjZSBhbGwgcHJvY2Vzc2VzIG1hdGNoaW5nIHN0YXRlIGZsYWciLCAwLAorCSAgS0RCX0VOQUJMRV9JTlNQRUNUKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImJ0YyIsIGtkYl9idCwgIiIsCisJICAiQmFja3RyYWNlIGN1cnJlbnQgcHJvY2VzcyBvbiBlYWNoIGNwdSIsIDAsCisJICBLREJfRU5BQkxFX0lOU1BFQ1QpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiYnR0Iiwga2RiX2J0LCAiPHZhZGRyPiIsCiAJICAiQmFja3RyYWNlIHByb2Nlc3MgZ2l2ZW4gaXRzIHN0cnVjdCB0YXNrIGFkZHJlc3MiLCAwLAotCQkJICAgIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgiZW52Iiwga2RiX2VudiwgIiIsCi0JICAiU2hvdyBlbnZpcm9ubWVudCB2YXJpYWJsZXMiLCAwLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoInNldCIsIGtkYl9zZXQsICIiLAotCSAgIlNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMiLCAwLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImhlbHAiLCBrZGJfaGVscCwgIiIsCi0JICAiRGlzcGxheSBIZWxwIE1lc3NhZ2UiLCAxLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoIj8iLCBrZGJfaGVscCwgIiIsCi0JICAiRGlzcGxheSBIZWxwIE1lc3NhZ2UiLCAwLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImNwdSIsIGtkYl9jcHUsICI8Y3B1bnVtPiIsCi0JICAiU3dpdGNoIHRvIG5ldyBjcHUiLCAwLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImtnZGIiLCBrZGJfa2dkYiwgIiIsCi0JICAiRW50ZXIga2dkYiBtb2RlIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJwcyIsIGtkYl9wcywgIls8ZmxhZ3M+fEFdIiwKLQkgICJEaXNwbGF5IGFjdGl2ZSB0YXNrIGxpc3QiLCAwLCBLREJfUkVQRUFUX05PTkUpOwotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoInBpZCIsIGtkYl9waWQsICI8cGlkbnVtPiIsCi0JICAiU3dpdGNoIHRvIGFub3RoZXIgdGFzayIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgicmVib290Iiwga2RiX3JlYm9vdCwgIiIsCi0JICAiUmVib290IHRoZSBtYWNoaW5lIGltbWVkaWF0ZWx5IiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKKwkgIEtEQl9FTkFCTEVfTUVNX1JFQUQgfCBLREJfRU5BQkxFX0lOU1BFQ1RfTk9fQVJHUyk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJlbnYiLCBrZGJfZW52LCAiIiwKKwkgICJTaG93IGVudmlyb25tZW50IHZhcmlhYmxlcyIsIDAsCisJICBLREJfRU5BQkxFX0FMV0FZU19TQUZFKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoInNldCIsIGtkYl9zZXQsICIiLAorCSAgIlNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMiLCAwLAorCSAgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRSk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJoZWxwIiwga2RiX2hlbHAsICIiLAorCSAgIkRpc3BsYXkgSGVscCBNZXNzYWdlIiwgMSwKKwkgIEtEQl9FTkFCTEVfQUxXQVlTX1NBRkUpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiPyIsIGtkYl9oZWxwLCAiIiwKKwkgICJEaXNwbGF5IEhlbHAgTWVzc2FnZSIsIDAsCisJICBLREJfRU5BQkxFX0FMV0FZU19TQUZFKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImNwdSIsIGtkYl9jcHUsICI8Y3B1bnVtPiIsCisJICAiU3dpdGNoIHRvIG5ldyBjcHUiLCAwLAorCSAgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRV9OT19BUkdTKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImtnZGIiLCBrZGJfa2dkYiwgIiIsCisJICAiRW50ZXIga2dkYiBtb2RlIiwgMCwgMCk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJwcyIsIGtkYl9wcywgIls8ZmxhZ3M+fEFdIiwKKwkgICJEaXNwbGF5IGFjdGl2ZSB0YXNrIGxpc3QiLCAwLAorCSAgS0RCX0VOQUJMRV9JTlNQRUNUKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoInBpZCIsIGtkYl9waWQsICI8cGlkbnVtPiIsCisJICAiU3dpdGNoIHRvIGFub3RoZXIgdGFzayIsIDAsCisJICBLREJfRU5BQkxFX0lOU1BFQ1QpOworCWtkYl9yZWdpc3Rlcl9mbGFncygicmVib290Iiwga2RiX3JlYm9vdCwgIiIsCisJICAiUmVib290IHRoZSBtYWNoaW5lIGltbWVkaWF0ZWx5IiwgMCwKKwkgIEtEQl9FTkFCTEVfUkVCT09UKTsKICNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKQotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImxzbW9kIiwga2RiX2xzbW9kLCAiIiwKLQkgICJMaXN0IGxvYWRlZCBrZXJuZWwgbW9kdWxlcyIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJsc21vZCIsIGtkYl9sc21vZCwgIiIsCisJICAiTGlzdCBsb2FkZWQga2VybmVsIG1vZHVsZXMiLCAwLAorCSAgS0RCX0VOQUJMRV9JTlNQRUNUKTsKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoInNyIiwga2RiX3NyLCAiPGtleT4iLAotCSAgIk1hZ2ljIFN5c1JxIGtleSIsIDAsIEtEQl9SRVBFQVRfTk9ORSk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJzciIsIGtkYl9zciwgIjxrZXk+IiwKKwkgICJNYWdpYyBTeXNScSBrZXkiLCAwLAorCSAgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRSk7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19QUklOVEspCi0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgiZG1lc2ciLCBrZGJfZG1lc2csICJbbGluZXNdIiwKLQkgICJEaXNwbGF5IHN5c2xvZyBidWZmZXIiLCAwLCBLREJfUkVQRUFUX05PTkUpOworCWtkYl9yZWdpc3Rlcl9mbGFncygiZG1lc2ciLCBrZGJfZG1lc2csICJbbGluZXNdIiwKKwkgICJEaXNwbGF5IHN5c2xvZyBidWZmZXIiLCAwLAorCSAgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRSk7CiAjZW5kaWYKIAlpZiAoYXJjaF9rZ2RiX29wcy5lbmFibGVfbm1pKSB7Ci0JCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImRpc2FibGVfbm1pIiwga2RiX2Rpc2FibGVfbm1pLCAiIiwKLQkJICAiRGlzYWJsZSBOTUkgZW50cnkgdG8gS0RCIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKKwkJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJkaXNhYmxlX25taSIsIGtkYl9kaXNhYmxlX25taSwgIiIsCisJCSAgIkRpc2FibGUgTk1JIGVudHJ5IHRvIEtEQiIsIDAsCisJCSAgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRSk7CiAJfQotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImRlZmNtZCIsIGtkYl9kZWZjbWQsICJuYW1lIFwidXNhZ2VcIiBcImhlbHBcIiIsCi0JICAiRGVmaW5lIGEgc2V0IG9mIGNvbW1hbmRzLCBkb3duIHRvIGVuZGVmY21kIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJraWxsIiwga2RiX2tpbGwsICI8LXNpZ25hbD4gPHBpZD4iLAotCSAgIlNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJzdW1tYXJ5Iiwga2RiX3N1bW1hcnksICIiLAotCSAgIlN1bW1hcml6ZSB0aGUgc3lzdGVtIiwgNCwgS0RCX1JFUEVBVF9OT05FKTsKLQlrZGJfcmVnaXN0ZXJfcmVwZWF0KCJwZXJfY3B1Iiwga2RiX3Blcl9jcHUsICI8c3ltPiBbPGJ5dGVzPl0gWzxjcHU+XSIsCi0JICAiRGlzcGxheSBwZXJfY3B1IHZhcmlhYmxlcyIsIDMsIEtEQl9SRVBFQVRfTk9ORSk7Ci0Ja2RiX3JlZ2lzdGVyX3JlcGVhdCgiZ3JlcGhlbHAiLCBrZGJfZ3JlcF9oZWxwLCAiIiwKLQkgICJEaXNwbGF5IGhlbHAgb24gfCBncmVwIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImRlZmNtZCIsIGtkYl9kZWZjbWQsICJuYW1lIFwidXNhZ2VcIiBcImhlbHBcIiIsCisJICAiRGVmaW5lIGEgc2V0IG9mIGNvbW1hbmRzLCBkb3duIHRvIGVuZGVmY21kIiwgMCwKKwkgIEtEQl9FTkFCTEVfQUxXQVlTX1NBRkUpOworCWtkYl9yZWdpc3Rlcl9mbGFncygia2lsbCIsIGtkYl9raWxsLCAiPC1zaWduYWw+IDxwaWQ+IiwKKwkgICJTZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyIsIDAsCisJICBLREJfRU5BQkxFX1NJR05BTCk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJzdW1tYXJ5Iiwga2RiX3N1bW1hcnksICIiLAorCSAgIlN1bW1hcml6ZSB0aGUgc3lzdGVtIiwgNCwKKwkgIEtEQl9FTkFCTEVfQUxXQVlTX1NBRkUpOworCWtkYl9yZWdpc3Rlcl9mbGFncygicGVyX2NwdSIsIGtkYl9wZXJfY3B1LCAiPHN5bT4gWzxieXRlcz5dIFs8Y3B1Pl0iLAorCSAgIkRpc3BsYXkgcGVyX2NwdSB2YXJpYWJsZXMiLCAzLAorCSAgS0RCX0VOQUJMRV9NRU1fUkVBRCk7CisJa2RiX3JlZ2lzdGVyX2ZsYWdzKCJncmVwaGVscCIsIGtkYl9ncmVwX2hlbHAsICIiLAorCSAgIkRpc3BsYXkgaGVscCBvbiB8IGdyZXAiLCAwLAorCSAgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRSk7CiB9CiAKIC8qIEV4ZWN1dGUgYW55IGNvbW1hbmRzIGRlZmluZWQgaW4ga2RiX2NtZHMuICAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2RlYnVnL2tkYi9rZGJfcHJpdmF0ZS5oIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfcHJpdmF0ZS5oCmluZGV4IDdhZmQzYzhjLi5lYWFjZDE2IDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcva2RiL2tkYl9wcml2YXRlLmgKKysrIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfcHJpdmF0ZS5oCkBAIC0xNzIsMTAgKzE3Miw5IEBACiAJa2RiX2Z1bmNfdCBjbWRfZnVuYzsJCS8qIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgY29tbWFuZCAqLwogCWNoYXIgICAgKmNtZF91c2FnZTsJCS8qIFVzYWdlIFN0cmluZyBmb3IgdGhpcyBjb21tYW5kICovCiAJY2hhciAgICAqY21kX2hlbHA7CQkvKiBIZWxwIG1lc3NhZ2UgZm9yIHRoaXMgY29tbWFuZCAqLwotCXNob3J0ICAgIGNtZF9mbGFnczsJCS8qIFBhcnNpbmcgZmxhZ3MgKi8KIAlzaG9ydCAgICBjbWRfbWlubGVuOwkJLyogTWluaW11bSBsZWdhbCAjIGNvbW1hbmQKIAkJCQkJICogY2hhcnMgcmVxdWlyZWQgKi8KLQlrZGJfcmVwZWF0X3QgY21kX3JlcGVhdDsJLyogRG9lcyBjb21tYW5kIGF1dG8gcmVwZWF0IG9uIGVudGVyPyAqLworCWtkYl9jbWRmbGFnc190IGNtZF9mbGFnczsJLyogQ29tbWFuZCBiZWhhdmlvdXIgZmxhZ3MgKi8KIH0ga2RidGFiX3Q7CiAKIGV4dGVybiBpbnQga2RiX2J0KGludCwgY29uc3QgY2hhciAqKik7CS8qIEtEQiBkaXNwbGF5IGJhY2sgdHJhY2UgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvY29yZS5jIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKaW5kZXggNGMxZWU3Zi4uMTllZmNmMSAxMDA2NDQKLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmMKKysrIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKQEAgLTQ0NjEsMTggKzQ0NjEsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9zYW1wbGVfcmVnc191c2VyKHN0cnVjdCBwZXJmX3JlZ3MgKnJlZ3NfdXNlciwKLQkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVnc191c2VyX2NvcHkpCiB7Ci0JaWYgKCF1c2VyX21vZGUocmVncykpIHsKLQkJaWYgKGN1cnJlbnQtPm1tKQotCQkJcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKLQkJZWxzZQotCQkJcmVncyA9IE5VTEw7Ci0JfQotCi0JaWYgKHJlZ3MpIHsKLQkJcmVnc191c2VyLT5hYmkgID0gcGVyZl9yZWdfYWJpKGN1cnJlbnQpOworCWlmICh1c2VyX21vZGUocmVncykpIHsKKwkJcmVnc191c2VyLT5hYmkgPSBwZXJmX3JlZ19hYmkoY3VycmVudCk7CiAJCXJlZ3NfdXNlci0+cmVncyA9IHJlZ3M7CisJfSBlbHNlIGlmIChjdXJyZW50LT5tbSkgeworCQlwZXJmX2dldF9yZWdzX3VzZXIocmVnc191c2VyLCByZWdzLCByZWdzX3VzZXJfY29weSk7CiAJfSBlbHNlIHsKIAkJcmVnc191c2VyLT5hYmkgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FOwogCQlyZWdzX3VzZXItPnJlZ3MgPSBOVUxMOwpAQCAtNDk1MSw3ICs0OTQ3LDggQEAKIAl9CiAKIAlpZiAoc2FtcGxlX3R5cGUgJiAoUEVSRl9TQU1QTEVfUkVHU19VU0VSIHwgUEVSRl9TQU1QTEVfU1RBQ0tfVVNFUikpCi0JCXBlcmZfc2FtcGxlX3JlZ3NfdXNlcigmZGF0YS0+cmVnc191c2VyLCByZWdzKTsKKwkJcGVyZl9zYW1wbGVfcmVnc191c2VyKCZkYXRhLT5yZWdzX3VzZXIsIHJlZ3MsCisJCQkJICAgICAgJmRhdGEtPnJlZ3NfdXNlcl9jb3B5KTsKIAogCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfVVNFUikgewogCQkvKiByZWdzIGR1bXAgQUJJIGluZm8gKi8KQEAgLTY3NzksNyArNjc3Niw2IEBACiAJCV9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoJmNwdWN0eC0+Y3R4KTsKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmNwdWN0eC0+Y3R4Lm11dGV4LCAmY3B1Y3R4X211dGV4KTsKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmNwdWN0eC0+Y3R4LmxvY2ssICZjcHVjdHhfbG9jayk7Ci0JCWNwdWN0eC0+Y3R4LnR5cGUgPSBjcHVfY29udGV4dDsKIAkJY3B1Y3R4LT5jdHgucG11ID0gcG11OwogCiAJCV9fcGVyZl9jcHVfaHJ0aW1lcl9pbml0KGNwdWN0eCwgY3B1KTsKQEAgLTc0MjMsNyArNzQxOSwxOSBAQAogCQkgKiB0YXNrIG9yIENQVSBjb250ZXh0OgogCQkgKi8KIAkJaWYgKG1vdmVfZ3JvdXApIHsKLQkJCWlmIChncm91cF9sZWFkZXItPmN0eC0+dHlwZSAhPSBjdHgtPnR5cGUpCisJCQkvKgorCQkJICogTWFrZSBzdXJlIHdlJ3JlIGJvdGggb24gdGhlIHNhbWUgdGFzaywgb3IgYm90aAorCQkJICogcGVyLWNwdSBldmVudHMuCisJCQkgKi8KKwkJCWlmIChncm91cF9sZWFkZXItPmN0eC0+dGFzayAhPSBjdHgtPnRhc2spCisJCQkJZ290byBlcnJfY29udGV4dDsKKworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB3ZSdyZSBib3RoIGV2ZW50cyBmb3IgdGhlIHNhbWUgQ1BVOworCQkJICogZ3JvdXBpbmcgZXZlbnRzIGZvciBkaWZmZXJlbnQgQ1BVcyBpcyBicm9rZW47IHNpbmNlCisJCQkgKiB5b3UgY2FuIG5ldmVyIGNvbmN1cnJlbnRseSBzY2hlZHVsZSB0aGVtIGFueWhvdy4KKwkJCSAqLworCQkJaWYgKGdyb3VwX2xlYWRlci0+Y3B1ICE9IGV2ZW50LT5jcHUpCiAJCQkJZ290byBlcnJfY29udGV4dDsKIAkJfSBlbHNlIHsKIAkJCWlmIChncm91cF9sZWFkZXItPmN0eCAhPSBjdHgpCmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCAxZWE0MzY5Li42ODA2YzU1IDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTEyODcsOSArMTI4NywxNSBAQAogc3RhdGljIGludCB3YWl0X2NvbnNpZGVyX3Rhc2soc3RydWN0IHdhaXRfb3B0cyAqd28sIGludCBwdHJhY2UsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwKQogeworCS8qCisJICogV2UgY2FuIHJhY2Ugd2l0aCB3YWl0X3Rhc2tfem9tYmllKCkgZnJvbSBhbm90aGVyIHRocmVhZC4KKwkgKiBFbnN1cmUgdGhhdCBFWElUX1pPTUJJRSAtPiBFWElUX0RFQUQvRVhJVF9UUkFDRSB0cmFuc2l0aW9uCisJICogY2FuJ3QgY29uZnVzZSB0aGUgY2hlY2tzIGJlbG93LgorCSAqLworCWludCBleGl0X3N0YXRlID0gQUNDRVNTX09OQ0UocC0+ZXhpdF9zdGF0ZSk7CiAJaW50IHJldDsKIAotCWlmICh1bmxpa2VseShwLT5leGl0X3N0YXRlID09IEVYSVRfREVBRCkpCisJaWYgKHVubGlrZWx5KGV4aXRfc3RhdGUgPT0gRVhJVF9ERUFEKSkKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBlbGlnaWJsZV9jaGlsZCh3bywgcCk7CkBAIC0xMzEwLDcgKzEzMTYsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAodW5saWtlbHkocC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1RSQUNFKSkgeworCWlmICh1bmxpa2VseShleGl0X3N0YXRlID09IEVYSVRfVFJBQ0UpKSB7CiAJCS8qCiAJCSAqIHB0cmFjZSA9PSAwIG1lYW5zIHdlIGFyZSB0aGUgbmF0dXJhbCBwYXJlbnQuIEluIHRoaXMgY2FzZQogCQkgKiB3ZSBzaG91bGQgY2xlYXIgbm90YXNrX2Vycm9yLCBkZWJ1Z2dlciB3aWxsIG5vdGlmeSB1cy4KQEAgLTEzMzcsNyArMTM0Myw3IEBACiAJfQogCiAJLyogc2xheSB6b21iaWU/ICovCi0JaWYgKHAtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpIHsKKwlpZiAoZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkgewogCQkvKiB3ZSBkb24ndCByZWFwIGdyb3VwIGxlYWRlcnMgd2l0aCBzdWJ0aHJlYWRzICovCiAJCWlmICghZGVsYXlfZ3JvdXBfbGVhZGVyKHApKSB7CiAJCQkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMDZmNTgzMC4uZWU2MTk5MiAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAogc3RhdGljIHZvaWQgZnJlZV9pbnNuX3BhZ2Uodm9pZCAqcGFnZSkKIHsKLQltb2R1bGVfZnJlZShOVUxMLCBwYWdlKTsKKwltb2R1bGVfbWVtZnJlZShwYWdlKTsKIH0KIAogc3RydWN0IGtwcm9iZV9pbnNuX2NhY2hlIGtwcm9iZV9pbnNuX3Nsb3RzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbXV0ZXgtZGVidWcuYyBiL2tlcm5lbC9sb2NraW5nL211dGV4LWRlYnVnLmMKaW5kZXggNWNmNjczMS4uM2VmMzczNiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvbXV0ZXgtZGVidWcuYworKysgYi9rZXJuZWwvbG9ja2luZy9tdXRleC1kZWJ1Zy5jCkBAIC04MCwxMyArODAsMTMgQEAKIAkJCURFQlVHX0xPQ0tTX1dBUk5fT04obG9jay0+b3duZXIgIT0gY3VycmVudCk7CiAKIAkJREVCVUdfTE9DS1NfV0FSTl9PTighbG9jay0+d2FpdF9saXN0LnByZXYgJiYgIWxvY2stPndhaXRfbGlzdC5uZXh0KTsKLQkJbXV0ZXhfY2xlYXJfb3duZXIobG9jayk7CiAJfQogCiAJLyoKIAkgKiBfX211dGV4X3Nsb3dwYXRoX25lZWRzX3RvX3VubG9jaygpIGlzIGV4cGxpY2l0bHkgMCBmb3IgZGVidWcKIAkgKiBtdXRleGVzIHNvIHRoYXQgd2UgY2FuIGRvIGl0IGhlcmUgYWZ0ZXIgd2UndmUgdmVyaWZpZWQgc3RhdGUuCiAJICovCisJbXV0ZXhfY2xlYXJfb3duZXIobG9jayk7CiAJYXRvbWljX3NldCgmbG9jay0+Y291bnQsIDEpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMzk2NTUxMS4uZDg1NmU5NiAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtNzcyLDkgKzc3MiwxOCBAQAogCXJldHVybiAwOwogfQogCi11bnNpZ25lZCBsb25nIG1vZHVsZV9yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpCisvKioKKyAqIG1vZHVsZV9yZWZjb3VudCAtIHJldHVybiB0aGUgcmVmY291bnQgb3IgLTEgaWYgdW5sb2FkaW5nCisgKgorICogQG1vZDoJdGhlIG1vZHVsZSB3ZSdyZSBjaGVja2luZworICoKKyAqIFJldHVybnM6CisgKgktMSBpZiB0aGUgbW9kdWxlIGlzIGluIHRoZSBwcm9jZXNzIG9mIHVubG9hZGluZworICoJb3RoZXJ3aXNlIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyBpbiB0aGUga2VybmVsIHRvIHRoZSBtb2R1bGUKKyAqLworaW50IG1vZHVsZV9yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19yZWFkKCZtb2QtPnJlZmNudCkgLSBNT0RVTEVfUkVGX0JBU0U7CisJcmV0dXJuIGF0b21pY19yZWFkKCZtb2QtPnJlZmNudCkgLSBNT0RVTEVfUkVGX0JBU0U7CiB9CiBFWFBPUlRfU1lNQk9MKG1vZHVsZV9yZWZjb3VudCk7CiAKQEAgLTg1Niw3ICs4NjUsNyBAQAogCXN0cnVjdCBtb2R1bGVfdXNlICp1c2U7CiAJaW50IHByaW50ZWRfc29tZXRoaW5nID0gMDsKIAotCXNlcV9wcmludGYobSwgIiAlbHUgIiwgbW9kdWxlX3JlZmNvdW50KG1vZCkpOworCXNlcV9wcmludGYobSwgIiAlaSAiLCBtb2R1bGVfcmVmY291bnQobW9kKSk7CiAKIAkvKgogCSAqIEFsd2F5cyBpbmNsdWRlIGEgdHJhaWxpbmcgLCBzbyB1c2Vyc3BhY2UgY2FuIGRpZmZlcmVudGlhdGUKQEAgLTkwOCw3ICs5MTcsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19yZWZjbnQoc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKm1hdHRyLAogCQkJICAgc3RydWN0IG1vZHVsZV9rb2JqZWN0ICptaywgY2hhciAqYnVmZmVyKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVsdVxuIiwgbW9kdWxlX3JlZmNvdW50KG1rLT5tb2QpKTsKKwlyZXR1cm4gc3ByaW50ZihidWZmZXIsICIlaVxuIiwgbW9kdWxlX3JlZmNvdW50KG1rLT5tb2QpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlIG1vZGluZm9fcmVmY250ID0KQEAgLTE3OTUsNyArMTgwNCw3IEBACiBzdGF0aWMgdm9pZCB1bnNldF9tb2R1bGVfaW5pdF9yb19ueChzdHJ1Y3QgbW9kdWxlICptb2QpIHsgfQogI2VuZGlmCiAKLXZvaWQgX193ZWFrIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3ZvaWQgX193ZWFrIG1vZHVsZV9tZW1mcmVlKHZvaWQgKm1vZHVsZV9yZWdpb24pCiB7CiAJdmZyZWUobW9kdWxlX3JlZ2lvbik7CiB9CkBAIC0xODA0LDYgKzE4MTMsMTAgQEAKIHsKIH0KIAordm9pZCBfX3dlYWsgbW9kdWxlX2FyY2hfZnJlZWluZ19pbml0KHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKK30KKwogLyogRnJlZSBhIG1vZHVsZSwgcmVtb3ZlIGZyb20gbGlzdHMsIGV0Yy4gKi8KIHN0YXRpYyB2b2lkIGZyZWVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKQEAgLTE4NDEsNyArMTg1NCw4IEBACiAKIAkvKiBUaGlzIG1heSBiZSBOVUxMLCBidXQgdGhhdCdzIE9LICovCiAJdW5zZXRfbW9kdWxlX2luaXRfcm9fbngobW9kKTsKLQltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2luaXQpOworCW1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChtb2QpOworCW1vZHVsZV9tZW1mcmVlKG1vZC0+bW9kdWxlX2luaXQpOwogCWtmcmVlKG1vZC0+YXJncyk7CiAJcGVyY3B1X21vZGZyZWUobW9kKTsKIApAQCAtMTg1MCw3ICsxODY0LDcgQEAKIAogCS8qIEZpbmFsbHksIGZyZWUgdGhlIGNvcmUgKGNvbnRhaW5pbmcgdGhlIG1vZHVsZSBzdHJ1Y3R1cmUpICovCiAJdW5zZXRfbW9kdWxlX2NvcmVfcm9fbngobW9kKTsKLQltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2NvcmUpOworCW1vZHVsZV9tZW1mcmVlKG1vZC0+bW9kdWxlX2NvcmUpOwogCiAjaWZkZWYgQ09ORklHX01QVQogCXVwZGF0ZV9wcm90ZWN0aW9ucyhjdXJyZW50LT5tbSk7CkBAIC0yNzg1LDcgKzI3OTksNyBAQAogCQkgKi8KIAkJa21lbWxlYWtfaWdub3JlKHB0cik7CiAJCWlmICghcHRyKSB7Ci0JCQltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2NvcmUpOworCQkJbW9kdWxlX21lbWZyZWUobW9kLT5tb2R1bGVfY29yZSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQltZW1zZXQocHRyLCAwLCBtb2QtPmluaXRfc2l6ZSk7CkBAIC0yOTMwLDggKzI5NDQsOSBAQAogc3RhdGljIHZvaWQgbW9kdWxlX2RlYWxsb2NhdGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewogCXBlcmNwdV9tb2RmcmVlKG1vZCk7Ci0JbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKLQltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2NvcmUpOworCW1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChtb2QpOworCW1vZHVsZV9tZW1mcmVlKG1vZC0+bW9kdWxlX2luaXQpOworCW1vZHVsZV9tZW1mcmVlKG1vZC0+bW9kdWxlX2NvcmUpOwogfQogCiBpbnQgX193ZWFrIG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLApAQCAtMjk4MywxMCArMjk5OCwzMSBAQAogI2VuZGlmCiB9CiAKKy8qIEZvciBmcmVlaW5nIG1vZHVsZV9pbml0IG9uIHN1Y2Nlc3MsIGluIGNhc2Uga2FsbHN5bXMgdHJhdmVyc2luZyAqLworc3RydWN0IG1vZF9pbml0ZnJlZSB7CisJc3RydWN0IHJjdV9oZWFkIHJjdTsKKwl2b2lkICptb2R1bGVfaW5pdDsKK307CisKK3N0YXRpYyB2b2lkIGRvX2ZyZWVfaW5pdChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG1vZF9pbml0ZnJlZSAqbSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbW9kX2luaXRmcmVlLCByY3UpOworCW1vZHVsZV9tZW1mcmVlKG0tPm1vZHVsZV9pbml0KTsKKwlrZnJlZShtKTsKK30KKwogLyogVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGhhcHBlbnMgKi8KIHN0YXRpYyBpbnQgZG9faW5pdF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCWludCByZXQgPSAwOworCXN0cnVjdCBtb2RfaW5pdGZyZWUgKmZyZWVpbml0OworCisJZnJlZWluaXQgPSBrbWFsbG9jKHNpemVvZigqZnJlZWluaXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZyZWVpbml0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisJZnJlZWluaXQtPm1vZHVsZV9pbml0ID0gbW9kLT5tb2R1bGVfaW5pdDsKIAogCS8qCiAJICogV2Ugd2FudCB0byBmaW5kIG91dCB3aGV0aGVyIEBtb2QgdXNlcyBhc3luYyBkdXJpbmcgaW5pdC4gIENsZWFyCkBAIC0yOTk5LDE4ICszMDM1LDcgQEAKIAlpZiAobW9kLT5pbml0ICE9IE5VTEwpCiAJCXJldCA9IGRvX29uZV9pbml0Y2FsbChtb2QtPmluaXQpOwogCWlmIChyZXQgPCAwKSB7Ci0JCS8qCi0JCSAqIEluaXQgcm91dGluZSBmYWlsZWQ6IGFib3J0LiAgVHJ5IHRvIHByb3RlY3QgdXMgZnJvbQotCQkgKiBidWdneSByZWZjb3VudGVycy4KLQkJICovCi0JCW1vZC0+c3RhdGUgPSBNT0RVTEVfU1RBVEVfR09JTkc7Ci0JCXN5bmNocm9uaXplX3NjaGVkKCk7Ci0JCW1vZHVsZV9wdXQobW9kKTsKLQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbW9kdWxlX25vdGlmeV9saXN0LAotCQkJCQkgICAgIE1PRFVMRV9TVEFURV9HT0lORywgbW9kKTsKLQkJZnJlZV9tb2R1bGUobW9kKTsKLQkJd2FrZV91cF9hbGwoJm1vZHVsZV93cSk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZmFpbF9mcmVlX2ZyZWVpbml0OwogCX0KIAlpZiAocmV0ID4gMCkgewogCQlwcl93YXJuKCIlczogJyVzJy0+aW5pdCBzdXNwaWNpb3VzbHkgcmV0dXJuZWQgJWQsIGl0IHNob3VsZCAiCkBAIC0zMDU1LDE1ICszMDgwLDM1IEBACiAJbW9kLT5zdHJ0YWIgPSBtb2QtPmNvcmVfc3RydGFiOwogI2VuZGlmCiAJdW5zZXRfbW9kdWxlX2luaXRfcm9fbngobW9kKTsKLQltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2luaXQpOworCW1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChtb2QpOwogCW1vZC0+bW9kdWxlX2luaXQgPSBOVUxMOwogCW1vZC0+aW5pdF9zaXplID0gMDsKIAltb2QtPmluaXRfcm9fc2l6ZSA9IDA7CiAJbW9kLT5pbml0X3RleHRfc2l6ZSA9IDA7CisJLyoKKwkgKiBXZSB3YW50IHRvIGZyZWUgbW9kdWxlX2luaXQsIGJ1dCBiZSBhd2FyZSB0aGF0IGthbGxzeW1zIG1heSBiZQorCSAqIHdhbGtpbmcgdGhpcyB3aXRoIHByZWVtcHQgZGlzYWJsZWQuICBJbiBhbGwgdGhlIGZhaWx1cmUgcGF0aHMsCisJICogd2UgY2FsbCBzeW5jaHJvbml6ZV9yY3Uvc3luY2hyb25pemVfc2NoZWQsIGJ1dCB3ZSBkb24ndCB3YW50CisJICogdG8gc2xvdyBkb3duIHRoZSBzdWNjZXNzIHBhdGgsIHNvIHVzZSBhY3R1YWwgUkNVIGhlcmUuCisJICovCisJY2FsbF9yY3UoJmZyZWVpbml0LT5yY3UsIGRvX2ZyZWVfaW5pdCk7CiAJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCXdha2VfdXBfYWxsKCZtb2R1bGVfd3EpOwogCiAJcmV0dXJuIDA7CisKK2ZhaWxfZnJlZV9mcmVlaW5pdDoKKwlrZnJlZShmcmVlaW5pdCk7CitmYWlsOgorCS8qIFRyeSB0byBwcm90ZWN0IHVzIGZyb20gYnVnZ3kgcmVmY291bnRlcnMuICovCisJbW9kLT5zdGF0ZSA9IE1PRFVMRV9TVEFURV9HT0lORzsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOworCW1vZHVsZV9wdXQobW9kKTsKKwlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZtb2R1bGVfbm90aWZ5X2xpc3QsCisJCQkJICAgICBNT0RVTEVfU1RBVEVfR09JTkcsIG1vZCk7CisJZnJlZV9tb2R1bGUobW9kKTsKKwl3YWtlX3VwX2FsbCgmbW9kdWxlX3dxKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG1heV9pbml0X21vZHVsZSh2b2lkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3BhcmFtcy5jIGIva2VybmVsL3BhcmFtcy5jCmluZGV4IDBhZjliMmMuLjcyOGUwNWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTY0MiwxMiArNjQyLDE1IEBACiAJbWstPm1wLT5ncnAuYXR0cnMgPSBuZXdfYXR0cnM7CiAKIAkvKiBUYWNrIG5ldyBvbmUgb24gdGhlIGVuZC4gKi8KKwltZW1zZXQoJm1rLT5tcC0+YXR0cnNbbWstPm1wLT5udW1dLCAwLCBzaXplb2YobWstPm1wLT5hdHRyc1swXSkpOwogCXN5c2ZzX2F0dHJfaW5pdCgmbWstPm1wLT5hdHRyc1ttay0+bXAtPm51bV0ubWF0dHIuYXR0cik7CiAJbWstPm1wLT5hdHRyc1ttay0+bXAtPm51bV0ucGFyYW0gPSBrcDsKIAltay0+bXAtPmF0dHJzW21rLT5tcC0+bnVtXS5tYXR0ci5zaG93ID0gcGFyYW1fYXR0cl9zaG93OwogCS8qIERvIG5vdCBhbGxvdyBydW50aW1lIERBQyBjaGFuZ2VzIHRvIG1ha2UgcGFyYW0gd3JpdGFibGUuICovCiAJaWYgKChrcC0+cGVybSAmIChTX0lXVVNSIHwgU19JV0dSUCB8IFNfSVdPVEgpKSAhPSAwKQogCQltay0+bXAtPmF0dHJzW21rLT5tcC0+bnVtXS5tYXR0ci5zdG9yZSA9IHBhcmFtX2F0dHJfc3RvcmU7CisJZWxzZQorCQltay0+bXAtPmF0dHJzW21rLT5tcC0+bnVtXS5tYXR0ci5zdG9yZSA9IE5VTEw7CiAJbWstPm1wLT5hdHRyc1ttay0+bXAtPm51bV0ubWF0dHIuYXR0ci5uYW1lID0gKGNoYXIgKiluYW1lOwogCW1rLT5tcC0+YXR0cnNbbWstPm1wLT5udW1dLm1hdHRyLmF0dHIubW9kZSA9IGtwLT5wZXJtOwogCW1rLT5tcC0+bnVtKys7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmFuZ2UuYyBiL2tlcm5lbC9yYW5nZS5jCmluZGV4IDMyMmVhOGUuLjgyY2ZjMjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yYW5nZS5jCisrKyBiL2tlcm5lbC9yYW5nZS5jCkBAIC0xMTMsMTIgKzExMywxMiBAQAogewogCWNvbnN0IHN0cnVjdCByYW5nZSAqcjEgPSB4MTsKIAljb25zdCBzdHJ1Y3QgcmFuZ2UgKnIyID0geDI7Ci0JczY0IHN0YXJ0MSwgc3RhcnQyOwogCi0Jc3RhcnQxID0gcjEtPnN0YXJ0OwotCXN0YXJ0MiA9IHIyLT5zdGFydDsKLQotCXJldHVybiBzdGFydDEgLSBzdGFydDI7CisJaWYgKHIxLT5zdGFydCA8IHIyLT5zdGFydCkKKwkJcmV0dXJuIC0xOworCWlmIChyMS0+c3RhcnQgPiByMi0+c3RhcnQpCisJCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBpbnQgY2xlYW5fc29ydF9yYW5nZShzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgYXopCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBiNTc5N2I3Li5lNjI4Y2IxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTcxMTMsOSArNzExMyw2IEBACiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECiAJYWxsb2Nfc2l6ZSArPSAyICogbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLCi0JYWxsb2Nfc2l6ZSArPSBudW1fcG9zc2libGVfY3B1cygpICogY3B1bWFza19zaXplKCk7Ci0jZW5kaWYKIAlpZiAoYWxsb2Nfc2l6ZSkgewogCQlwdHIgPSAodW5zaWduZWQgbG9uZylremFsbG9jKGFsbG9jX3NpemUsIEdGUF9OT1dBSVQpOwogCkBAIC03MTM1LDEzICs3MTMyLDEzIEBACiAJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogCiAjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCi0jaWZkZWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sKLQkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJCXBlcl9jcHUobG9hZF9iYWxhbmNlX21hc2ssIGkpID0gKHZvaWQgKilwdHI7Ci0JCQlwdHIgKz0gY3B1bWFza19zaXplKCk7Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSyAqLwogCX0KKyNpZmRlZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXBlcl9jcHUobG9hZF9iYWxhbmNlX21hc2ssIGkpID0gKGNwdW1hc2tfdmFyX3Qpa3phbGxvY19ub2RlKAorCQkJY3B1bWFza19zaXplKCksIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGkpKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sgKi8KIAogCWluaXRfcnRfYmFuZHdpZHRoKCZkZWZfcnRfYmFuZHdpZHRoLAogCQkJZ2xvYmFsX3J0X3BlcmlvZCgpLCBnbG9iYWxfcnRfcnVudGltZSgpKTsKQEAgLTcyOTUsMTMgKzcyOTIsMTIgQEAKIAkgKiBzaW5jZSB3ZSB3aWxsIGV4aXQgd2l0aCBUQVNLX1JVTk5JTkcgbWFrZSBzdXJlIHdlIGVudGVyIHdpdGggaXQsCiAJICogb3RoZXJ3aXNlIHdlIHdpbGwgZGVzdHJveSBzdGF0ZS4KIAkgKi8KLQlpZiAoV0FSTl9PTkNFKGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORywKKwlXQVJOX09OQ0UoY3VycmVudC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HICYmIGN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlLAogCQkJImRvIG5vdCBjYWxsIGJsb2NraW5nIG9wcyB3aGVuICFUQVNLX1JVTk5JTkc7ICIKIAkJCSJzdGF0ZT0lbHggc2V0IGF0IFs8JXA+XSAlcFNcbiIsCiAJCQljdXJyZW50LT5zdGF0ZSwKIAkJCSh2b2lkICopY3VycmVudC0+dGFza19zdGF0ZV9jaGFuZ2UsCi0JCQkodm9pZCAqKWN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlKSkKLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJKHZvaWQgKiljdXJyZW50LT50YXNrX3N0YXRlX2NoYW5nZSk7CiAKIAlfX19taWdodF9zbGVlcChmaWxlLCBsaW5lLCBwcmVlbXB0X29mZnNldCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCmluZGV4IGU1ZGI4YzYuLmI1MjA5MmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCisrKyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCkBAIC01NzAsMjQgKzU3MCw3IEBACiBzdGF0aWMKIGludCBkbF9ydW50aW1lX2V4Y2VlZGVkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKQogewotCWludCBkbWlzcyA9IGRsX3RpbWVfYmVmb3JlKGRsX3NlLT5kZWFkbGluZSwgcnFfY2xvY2socnEpKTsKLQlpbnQgcm9ydW4gPSBkbF9zZS0+cnVudGltZSA8PSAwOwotCi0JaWYgKCFyb3J1biAmJiAhZG1pc3MpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgYmV5b25kIG91ciBjdXJyZW50IGRlYWRsaW5lIGFuZCB3ZSBhcmUgc3RpbGwKLQkgKiBleGVjdXRpbmcsIHRoZW4gd2UgaGF2ZSBhbHJlYWR5IHVzZWQgc29tZSBvZiB0aGUgcnVudGltZSBvZgotCSAqIHRoZSBuZXh0IGluc3RhbmNlLiBUaHVzLCBpZiB3ZSBkbyBub3QgYWNjb3VudCB0aGF0LCB3ZSBhcmUKLQkgKiBzdGVhbGluZyBiYW5kd2lkdGggZnJvbSB0aGUgc3lzdGVtIGF0IGVhY2ggZGVhZGxpbmUgbWlzcyEKLQkgKi8KLQlpZiAoZG1pc3MpIHsKLQkJZGxfc2UtPnJ1bnRpbWUgPSByb3J1biA/IGRsX3NlLT5ydW50aW1lIDogMDsKLQkJZGxfc2UtPnJ1bnRpbWUgLT0gcnFfY2xvY2socnEpIC0gZGxfc2UtPmRlYWRsaW5lOwotCX0KLQotCXJldHVybiAxOworCXJldHVybiAoZGxfc2UtPnJ1bnRpbWUgPD0gMCk7CiB9CiAKIGV4dGVybiBib29sIHNjaGVkX3J0X2JhbmR3aWR0aF9hY2NvdW50KHN0cnVjdCBydF9ycSAqcnRfcnEpOwpAQCAtODI2LDEwICs4MDksMTAgQEAKIAkgKiBwYXJhbWV0ZXJzIG9mIHRoZSB0YXNrIG1pZ2h0IG5lZWQgdXBkYXRpbmcuIE90aGVyd2lzZSwKIAkgKiB3ZSB3YW50IGEgcmVwbGVuaXNobWVudCBvZiBpdHMgcnVudGltZS4KIAkgKi8KLQlpZiAoIWRsX3NlLT5kbF9uZXcgJiYgZmxhZ3MgJiBFTlFVRVVFX1JFUExFTklTSCkKLQkJcmVwbGVuaXNoX2RsX2VudGl0eShkbF9zZSwgcGlfc2UpOwotCWVsc2UKKwlpZiAoZGxfc2UtPmRsX25ldyB8fCBmbGFncyAmIEVOUVVFVUVfV0FLRVVQKQogCQl1cGRhdGVfZGxfZW50aXR5KGRsX3NlLCBwaV9zZSk7CisJZWxzZSBpZiAoZmxhZ3MgJiBFTlFVRVVFX1JFUExFTklTSCkKKwkJcmVwbGVuaXNoX2RsX2VudGl0eShkbF9zZSwgcGlfc2UpOwogCiAJX19lbnF1ZXVlX2RsX2VudGl0eShkbF9zZSk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCBkZjJjZGY3Li40MDY2N2NiIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTQwMDUsNiArNDAwNSwxMCBAQAogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2Nmc19iYW5kd2lkdGgoc3RydWN0IGNmc19iYW5kd2lkdGggKmNmc19iKQogeworCS8qIGluaXRfY2ZzX2JhbmR3aWR0aCgpIHdhcyBub3QgY2FsbGVkICovCisJaWYgKCFjZnNfYi0+dGhyb3R0bGVkX2Nmc19ycS5uZXh0KQorCQlyZXR1cm47CisKIAlocnRpbWVyX2NhbmNlbCgmY2ZzX2ItPnBlcmlvZF90aW1lcik7CiAJaHJ0aW1lcl9jYW5jZWwoJmNmc19iLT5zbGFja190aW1lcik7CiB9CkBAIC00NDI0LDcgKzQ0MjgsNyBAQAogCQkgKiB3bCA9IFMgKiBzJ19pOyBzZWUgKDIpCiAJCSAqLwogCQlpZiAoVyA+IDAgJiYgdyA8IFcpCi0JCQl3bCA9ICh3ICogdGctPnNoYXJlcykgLyBXOworCQkJd2wgPSAodyAqIChsb25nKXRnLT5zaGFyZXMpIC8gVzsKIAkJZWxzZQogCQkJd2wgPSB0Zy0+c2hhcmVzOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggYThjOWY1YS4uZWE5Yzg4MSAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMjIxMCw5ICsyMjEwLDEzIEBACiAJCXVwX3dyaXRlKCZtZS0+bW0tPm1tYXBfc2VtKTsKIAkJYnJlYWs7CiAJY2FzZSBQUl9NUFhfRU5BQkxFX01BTkFHRU1FTlQ6CisJCWlmIChhcmcyIHx8IGFyZzMgfHwgYXJnNCB8fCBhcmc1KQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWVycm9yID0gTVBYX0VOQUJMRV9NQU5BR0VNRU5UKG1lKTsKIAkJYnJlYWs7CiAJY2FzZSBQUl9NUFhfRElTQUJMRV9NQU5BR0VNRU5UOgorCQlpZiAoYXJnMiB8fCBhcmczIHx8IGFyZzQgfHwgYXJnNSkKKwkJCXJldHVybiAtRUlOVkFMOwogCQllcnJvciA9IE1QWF9ESVNBQkxFX01BTkFHRU1FTlQobWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvbnRwLmMgYi9rZXJuZWwvdGltZS9udHAuYwppbmRleCA4N2EzNDZmLi4yOGJmOTFjIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9udHAuYworKysgYi9rZXJuZWwvdGltZS9udHAuYwpAQCAtNjMzLDYgKzYzMywxMyBAQAogCWlmICgodHhjLT5tb2RlcyAmIEFESl9TRVRPRkZTRVQpICYmICghY2FwYWJsZShDQVBfU1lTX1RJTUUpKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAorCWlmICh0eGMtPm1vZGVzICYgQURKX0ZSRVFVRU5DWSkgeworCQlpZiAoTE9OR19NSU4gLyBQUE1fU0NBTEUgPiB0eGMtPmZyZXEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKExPTkdfTUFYIC8gUFBNX1NDQUxFIDwgdHhjLT5mcmVxKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWUuYyBiL2tlcm5lbC90aW1lL3RpbWUuYwppbmRleCA2MzkwNTE3Li4yYzg1Yjc3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lLmMKKysrIGIva2VybmVsL3RpbWUvdGltZS5jCkBAIC0xOTYsNiArMTk2LDEwIEBACiAJaWYgKHR2KSB7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdXNlcl90diwgdHYsIHNpemVvZigqdHYpKSkKIAkJCXJldHVybiAtRUZBVUxUOworCisJCWlmICghdGltZXZhbF92YWxpZCgmdXNlcl90dikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQluZXdfdHMudHZfc2VjID0gdXNlcl90di50dl9zZWM7CiAJCW5ld190cy50dl9uc2VjID0gdXNlcl90di50dl91c2VjICogTlNFQ19QRVJfVVNFQzsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggOTI5YTczM2QuLjIyNGU3NjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTI0OTcsMTIgKzI0OTcsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQgZnRyYWNlX3J1bl9tb2RpZnlfY29kZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCBpbnQgY29tbWFuZCwKLQkJCQkgICBzdHJ1Y3QgZnRyYWNlX2hhc2ggKm9sZF9oYXNoKQorCQkJCSAgIHN0cnVjdCBmdHJhY2Vfb3BzX2hhc2ggKm9sZF9oYXNoKQogewogCW9wcy0+ZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9NT0RJRllJTkc7Ci0Jb3BzLT5vbGRfaGFzaC5maWx0ZXJfaGFzaCA9IG9sZF9oYXNoOworCW9wcy0+b2xkX2hhc2guZmlsdGVyX2hhc2ggPSBvbGRfaGFzaC0+ZmlsdGVyX2hhc2g7CisJb3BzLT5vbGRfaGFzaC5ub3RyYWNlX2hhc2ggPSBvbGRfaGFzaC0+bm90cmFjZV9oYXNoOwogCWZ0cmFjZV9ydW5fdXBkYXRlX2NvZGUoY29tbWFuZCk7CiAJb3BzLT5vbGRfaGFzaC5maWx0ZXJfaGFzaCA9IE5VTEw7CisJb3BzLT5vbGRfaGFzaC5ub3RyYWNlX2hhc2ggPSBOVUxMOwogCW9wcy0+ZmxhZ3MgJj0gfkZUUkFDRV9PUFNfRkxfTU9ESUZZSU5HOwogfQogCkBAIC0zNTc5LDcgKzM1ODEsNyBAQAogCiBzdGF0aWMgaW50IGZ0cmFjZV9wcm9iZV9yZWdpc3RlcmVkOwogCi1zdGF0aWMgdm9pZCBfX2VuYWJsZV9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoc3RydWN0IGZ0cmFjZV9oYXNoICpvbGRfaGFzaCkKK3N0YXRpYyB2b2lkIF9fZW5hYmxlX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShzdHJ1Y3QgZnRyYWNlX29wc19oYXNoICpvbGRfaGFzaCkKIHsKIAlpbnQgcmV0OwogCWludCBpOwpAQCAtMzYzNyw2ICszNjM5LDcgQEAKIHJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShjaGFyICpnbG9iLCBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzLAogCQkJICAgICAgdm9pZCAqZGF0YSkKIHsKKwlzdHJ1Y3QgZnRyYWNlX29wc19oYXNoIG9sZF9oYXNoX29wczsKIAlzdHJ1Y3QgZnRyYWNlX2Z1bmNfcHJvYmUgKmVudHJ5OwogCXN0cnVjdCBmdHJhY2VfaGFzaCAqKm9yaWdfaGFzaCA9ICZ0cmFjZV9wcm9iZV9vcHMuZnVuY19oYXNoLT5maWx0ZXJfaGFzaDsKIAlzdHJ1Y3QgZnRyYWNlX2hhc2ggKm9sZF9oYXNoID0gKm9yaWdfaGFzaDsKQEAgLTM2NTgsNiArMzY2MSwxMCBAQAogCiAJbXV0ZXhfbG9jaygmdHJhY2VfcHJvYmVfb3BzLmZ1bmNfaGFzaC0+cmVnZXhfbG9jayk7CiAKKwlvbGRfaGFzaF9vcHMuZmlsdGVyX2hhc2ggPSBvbGRfaGFzaDsKKwkvKiBQcm9iZXMgb25seSBoYXZlIGZpbHRlcnMgKi8KKwlvbGRfaGFzaF9vcHMubm90cmFjZV9oYXNoID0gTlVMTDsKKwogCWhhc2ggPSBhbGxvY19hbmRfY29weV9mdHJhY2VfaGFzaChGVFJBQ0VfSEFTSF9ERUZBVUxUX0JJVFMsIG9sZF9oYXNoKTsKIAlpZiAoIWhhc2gpIHsKIAkJY291bnQgPSAtRU5PTUVNOwpAQCAtMzcxOCw3ICszNzI1LDcgQEAKIAogCXJldCA9IGZ0cmFjZV9oYXNoX21vdmUoJnRyYWNlX3Byb2JlX29wcywgMSwgb3JpZ19oYXNoLCBoYXNoKTsKIAotCV9fZW5hYmxlX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShvbGRfaGFzaCk7CisJX19lbmFibGVfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKCZvbGRfaGFzaF9vcHMpOwogCiAJaWYgKCFyZXQpCiAJCWZyZWVfZnRyYWNlX2hhc2hfcmN1KG9sZF9oYXNoKTsKQEAgLTQwMDYsMTAgKzQwMTMsMzQgQEAKIH0KIAogc3RhdGljIHZvaWQgZnRyYWNlX29wc191cGRhdGVfY29kZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLAotCQkJCSAgIHN0cnVjdCBmdHJhY2VfaGFzaCAqb2xkX2hhc2gpCisJCQkJICAgc3RydWN0IGZ0cmFjZV9vcHNfaGFzaCAqb2xkX2hhc2gpCiB7Ci0JaWYgKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0VOQUJMRUQgJiYgZnRyYWNlX2VuYWJsZWQpCisJc3RydWN0IGZ0cmFjZV9vcHMgKm9wOworCisJaWYgKCFmdHJhY2VfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0VOQUJMRUQpIHsKIAkJZnRyYWNlX3J1bl9tb2RpZnlfY29kZShvcHMsIEZUUkFDRV9VUERBVEVfQ0FMTFMsIG9sZF9oYXNoKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdGhpcyBpcyB0aGUgc2hhcmVkIGdsb2JhbF9vcHMgZmlsdGVyLCB0aGVuIHdlIG5lZWQgdG8KKwkgKiBjaGVjayBpZiB0aGVyZSBpcyBhbm90aGVyIG9wcyB0aGF0IHNoYXJlcyBpdCwgaXMgZW5hYmxlZC4KKwkgKiBJZiBzbywgd2Ugc3RpbGwgbmVlZCB0byBydW4gdGhlIG1vZGlmeSBjb2RlLgorCSAqLworCWlmIChvcHMtPmZ1bmNfaGFzaCAhPSAmZ2xvYmFsX29wcy5sb2NhbF9oYXNoKQorCQlyZXR1cm47CisKKwlkb19mb3JfZWFjaF9mdHJhY2Vfb3Aob3AsIGZ0cmFjZV9vcHNfbGlzdCkgeworCQlpZiAob3AtPmZ1bmNfaGFzaCA9PSAmZ2xvYmFsX29wcy5sb2NhbF9oYXNoICYmCisJCSAgICBvcC0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0VOQUJMRUQpIHsKKwkJCWZ0cmFjZV9ydW5fbW9kaWZ5X2NvZGUob3AsIEZUUkFDRV9VUERBVEVfQ0FMTFMsIG9sZF9oYXNoKTsKKwkJCS8qIE9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UgKi8KKwkJCXJldHVybjsKKwkJfQorCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX29wKG9wKTsKIH0KIAogc3RhdGljIGludApAQCAtNDAxNyw2ICs0MDQ4LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBpcCwgaW50IHJlbW92ZSwgaW50IHJlc2V0LCBpbnQgZW5hYmxlKQogewogCXN0cnVjdCBmdHJhY2VfaGFzaCAqKm9yaWdfaGFzaDsKKwlzdHJ1Y3QgZnRyYWNlX29wc19oYXNoIG9sZF9oYXNoX29wczsKIAlzdHJ1Y3QgZnRyYWNlX2hhc2ggKm9sZF9oYXNoOwogCXN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaDsKIAlpbnQgcmV0OwpAQCAtNDA1Myw5ICs0MDg1LDExIEBACiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJb2xkX2hhc2ggPSAqb3JpZ19oYXNoOworCW9sZF9oYXNoX29wcy5maWx0ZXJfaGFzaCA9IG9wcy0+ZnVuY19oYXNoLT5maWx0ZXJfaGFzaDsKKwlvbGRfaGFzaF9vcHMubm90cmFjZV9oYXNoID0gb3BzLT5mdW5jX2hhc2gtPm5vdHJhY2VfaGFzaDsKIAlyZXQgPSBmdHJhY2VfaGFzaF9tb3ZlKG9wcywgZW5hYmxlLCBvcmlnX2hhc2gsIGhhc2gpOwogCWlmICghcmV0KSB7Ci0JCWZ0cmFjZV9vcHNfdXBkYXRlX2NvZGUob3BzLCBvbGRfaGFzaCk7CisJCWZ0cmFjZV9vcHNfdXBkYXRlX2NvZGUob3BzLCAmb2xkX2hhc2hfb3BzKTsKIAkJZnJlZV9mdHJhY2VfaGFzaF9yY3Uob2xkX2hhc2gpOwogCX0KIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKQEAgLTQyNjcsNiArNDMwMSw3IEBACiBpbnQgZnRyYWNlX3JlZ2V4X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZnRyYWNlX29wc19oYXNoIG9sZF9oYXNoX29wczsKIAlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyOwogCXN0cnVjdCBmdHJhY2VfaGFzaCAqKm9yaWdfaGFzaDsKIAlzdHJ1Y3QgZnRyYWNlX2hhc2ggKm9sZF9oYXNoOwpAQCAtNDMwMCwxMCArNDMzNSwxMiBAQAogCiAJCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAkJb2xkX2hhc2ggPSAqb3JpZ19oYXNoOworCQlvbGRfaGFzaF9vcHMuZmlsdGVyX2hhc2ggPSBpdGVyLT5vcHMtPmZ1bmNfaGFzaC0+ZmlsdGVyX2hhc2g7CisJCW9sZF9oYXNoX29wcy5ub3RyYWNlX2hhc2ggPSBpdGVyLT5vcHMtPmZ1bmNfaGFzaC0+bm90cmFjZV9oYXNoOwogCQlyZXQgPSBmdHJhY2VfaGFzaF9tb3ZlKGl0ZXItPm9wcywgZmlsdGVyX2hhc2gsCiAJCQkJICAgICAgIG9yaWdfaGFzaCwgaXRlci0+aGFzaCk7CiAJCWlmICghcmV0KSB7Ci0JCQlmdHJhY2Vfb3BzX3VwZGF0ZV9jb2RlKGl0ZXItPm9wcywgb2xkX2hhc2gpOworCQkJZnRyYWNlX29wc191cGRhdGVfY29kZShpdGVyLT5vcHMsICZvbGRfaGFzaF9vcHMpOwogCQkJZnJlZV9mdHJhY2VfaGFzaF9yY3Uob2xkX2hhc2gpOwogCQl9CiAJCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwppbmRleCAyZTc2Nzk3Li40YTkwNzliIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwpAQCAtNjkxOCw3ICs2OTE4LDYgQEAKIAkJCXRyYWNlcG9pbnRfcHJpbnRrID0gMDsKIAl9CiAJdHJhY2VyX2FsbG9jX2J1ZmZlcnMoKTsKLQlpbml0X2Z0cmFjZV9zeXNjYWxscygpOwogCXRyYWNlX2V2ZW50X2luaXQoKTsJCiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCAzNjZhNzhhLi5iMDNhMGVhIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCkBAIC0yNDI5LDEyICsyNDI5LDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBfX2luaXQgdm9pZAorZWFybHlfZW5hYmxlX2V2ZW50cyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBib29sIGRpc2FibGVfZmlyc3QpCit7CisJY2hhciAqYnVmID0gYm9vdHVwX2V2ZW50X2J1ZjsKKwljaGFyICp0b2tlbjsKKwlpbnQgcmV0OworCisJd2hpbGUgKHRydWUpIHsKKwkJdG9rZW4gPSBzdHJzZXAoJmJ1ZiwgIiwiKTsKKworCQlpZiAoIXRva2VuKQorCQkJYnJlYWs7CisJCWlmICghKnRva2VuKQorCQkJY29udGludWU7CisKKwkJLyogUmVzdGFydGluZyBzeXNjYWxscyByZXF1aXJlcyB0aGF0IHdlIHN0b3AgdGhlbSBmaXJzdCAqLworCQlpZiAoZGlzYWJsZV9maXJzdCkKKwkJCWZ0cmFjZV9zZXRfY2xyX2V2ZW50KHRyLCB0b2tlbiwgMCk7CisKKwkJcmV0ID0gZnRyYWNlX3NldF9jbHJfZXZlbnQodHIsIHRva2VuLCAxKTsKKwkJaWYgKHJldCkKKwkJCXByX3dhcm4oIkZhaWxlZCB0byBlbmFibGUgdHJhY2UgZXZlbnQ6ICVzXG4iLCB0b2tlbik7CisKKwkJLyogUHV0IGJhY2sgdGhlIGNvbW1hIHRvIGFsbG93IHRoaXMgdG8gYmUgY2FsbGVkIGFnYWluICovCisJCWlmIChidWYpCisJCQkqKGJ1ZiAtIDEpID0gJywnOworCX0KK30KKwogc3RhdGljIF9faW5pdCBpbnQgZXZlbnRfdHJhY2VfZW5hYmxlKHZvaWQpCiB7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IHRvcF90cmFjZV9hcnJheSgpOwogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKml0ZXIsICpjYWxsOwotCWNoYXIgKmJ1ZiA9IGJvb3R1cF9ldmVudF9idWY7Ci0JY2hhciAqdG9rZW47CiAJaW50IHJldDsKIAogCWlmICghdHIpCkBAIC0yNDU2LDE4ICsyNDgzLDcgQEAKIAkgKi8KIAlfX3RyYWNlX2Vhcmx5X2FkZF9ldmVudHModHIpOwogCi0Jd2hpbGUgKHRydWUpIHsKLQkJdG9rZW4gPSBzdHJzZXAoJmJ1ZiwgIiwiKTsKLQotCQlpZiAoIXRva2VuKQotCQkJYnJlYWs7Ci0JCWlmICghKnRva2VuKQotCQkJY29udGludWU7Ci0KLQkJcmV0ID0gZnRyYWNlX3NldF9jbHJfZXZlbnQodHIsIHRva2VuLCAxKTsKLQkJaWYgKHJldCkKLQkJCXByX3dhcm4oIkZhaWxlZCB0byBlbmFibGUgdHJhY2UgZXZlbnQ6ICVzXG4iLCB0b2tlbik7Ci0JfQorCWVhcmx5X2VuYWJsZV9ldmVudHModHIsIGZhbHNlKTsKIAogCXRyYWNlX3ByaW50a19zdGFydF9jb21tKCk7CiAKQEAgLTI0NzgsNiArMjQ5NCwzMSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogZXZlbnRfdHJhY2VfZW5hYmxlKCkgaXMgY2FsbGVkIGZyb20gdHJhY2VfZXZlbnRfaW5pdCgpIGZpcnN0IHRvCisgKiBpbml0aWFsaXplIGV2ZW50cyBhbmQgcGVyaGFwcyBzdGFydCBhbnkgZXZlbnRzIHRoYXQgYXJlIG9uIHRoZQorICogY29tbWFuZCBsaW5lLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgc29tZSBldmVudHMgdGhhdCB3aWxsIG5vdAorICogc3RhcnQgdGhpcyBlYXJseSwgbGlrZSB0aGUgc3lzdGVtIGNhbGwgdHJhY2Vwb2ludHMgdGhhdCBuZWVkCisgKiB0byBzZXQgdGhlIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQgZmxhZyBvZiBwaWQgMS4gQnV0IGV2ZW50X3RyYWNlX2VuYWJsZSgpCisgKiBpcyBjYWxsZWQgYmVmb3JlIHBpZCAxIHN0YXJ0cywgYW5kIHRoaXMgZmxhZyBpcyBuZXZlciBzZXQsIG1ha2luZworICogdGhlIHN5c2NhbGwgdHJhY2Vwb2ludCBuZXZlciBnZXQgcmVhY2hlZCwgYnV0IHRoZSBldmVudCBpcyBlbmFibGVkCisgKiByZWdhcmRsZXNzIChhbmQgbm90IGRvaW5nIGFueXRoaW5nKS4KKyAqLworc3RhdGljIF9faW5pdCBpbnQgZXZlbnRfdHJhY2VfZW5hYmxlX2FnYWluKHZvaWQpCit7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0cjsKKworCXRyID0gdG9wX3RyYWNlX2FycmF5KCk7CisJaWYgKCF0cikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllYXJseV9lbmFibGVfZXZlbnRzKHRyLCB0cnVlKTsKKworCXJldHVybiAwOworfQorCitlYXJseV9pbml0Y2FsbChldmVudF90cmFjZV9lbmFibGVfYWdhaW4pOworCiBzdGF0aWMgX19pbml0IGludCBldmVudF90cmFjZV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0cjsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rZGIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9rZGIuYwppbmRleCBiMGIxYzQ0Li4zY2NmNWMyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa2RiLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2tkYi5jCkBAIC0xMzIsOCArMTMyLDggQEAKIAogc3RhdGljIF9faW5pdCBpbnQga2RiX2Z0cmFjZV9yZWdpc3Rlcih2b2lkKQogewotCWtkYl9yZWdpc3Rlcl9yZXBlYXQoImZ0ZHVtcCIsIGtkYl9mdGR1bXAsICJbc2tpcF8jbGluZXNdIFtjcHVdIiwKLQkJCSAgICAiRHVtcCBmdHJhY2UgbG9nIiwgMCwgS0RCX1JFUEVBVF9OT05FKTsKKwlrZGJfcmVnaXN0ZXJfZmxhZ3MoImZ0ZHVtcCIsIGtkYl9mdGR1bXAsICJbc2tpcF8jbGluZXNdIFtjcHVdIiwKKwkJCSAgICAiRHVtcCBmdHJhY2UgbG9nIiwgMCwgS0RCX0VOQUJMRV9BTFdBWVNfU0FGRSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCA2MjAyYjA4Li5iZWVlYWM5IDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0xODQxLDE3ICsxODQxLDExIEBACiAgKiBzcGluX2xvY2tfaXJxKHBvb2wtPmxvY2spIHdoaWNoIG1heSBiZSByZWxlYXNlZCBhbmQgcmVncmFiYmVkCiAgKiBtdWx0aXBsZSB0aW1lcy4gIERvZXMgR0ZQX0tFUk5FTCBhbGxvY2F0aW9ucy4gIENhbGxlZCBvbmx5IGZyb20KICAqIG1hbmFnZXIuCi0gKgotICogUmV0dXJuOgotICogJWZhbHNlIGlmIG5vIGFjdGlvbiB3YXMgdGFrZW4gYW5kIHBvb2wtPmxvY2sgc3RheWVkIGxvY2tlZCwgJXRydWUKLSAqIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGJvb2wgbWF5YmVfY3JlYXRlX3dvcmtlcihzdHJ1Y3Qgd29ya2VyX3Bvb2wgKnBvb2wpCitzdGF0aWMgdm9pZCBtYXliZV9jcmVhdGVfd29ya2VyKHN0cnVjdCB3b3JrZXJfcG9vbCAqcG9vbCkKIF9fcmVsZWFzZXMoJnBvb2wtPmxvY2spCiBfX2FjcXVpcmVzKCZwb29sLT5sb2NrKQogewotCWlmICghbmVlZF90b19jcmVhdGVfd29ya2VyKHBvb2wpKQotCQlyZXR1cm4gZmFsc2U7CiByZXN0YXJ0OgogCXNwaW5fdW5sb2NrX2lycSgmcG9vbC0+bG9jayk7CiAKQEAgLTE4NzcsNyArMTg3MSw2IEBACiAJICovCiAJaWYgKG5lZWRfdG9fY3JlYXRlX3dvcmtlcihwb29sKSkKIAkJZ290byByZXN0YXJ0OwotCXJldHVybiB0cnVlOwogfQogCiAvKioKQEAgLTE4OTcsMTYgKzE4OTAsMTQgQEAKICAqIG11bHRpcGxlIHRpbWVzLiAgRG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb25zLgogICoKICAqIFJldHVybjoKLSAqICVmYWxzZSBpZiB0aGUgcG9vbCBkb24ndCBuZWVkIG1hbmFnZW1lbnQgYW5kIHRoZSBjYWxsZXIgY2FuIHNhZmVseSBzdGFydAotICogcHJvY2Vzc2luZyB3b3JrcywgJXRydWUgaW5kaWNhdGVzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbGVhc2VkIHBvb2wtPmxvY2sKLSAqIGFuZCByZWFjcXVpcmVkIGl0IHRvIHBlcmZvcm0gc29tZSBtYW5hZ2VtZW50IGZ1bmN0aW9uIGFuZCB0aGF0IHRoZQotICogY29uZGl0aW9ucyB0aGF0IHRoZSBjYWxsZXIgdmVyaWZpZWQgd2hpbGUgaG9sZGluZyB0aGUgbG9jayBiZWZvcmUKLSAqIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIG1pZ2h0IG5vIGxvbmdlciBiZSB0cnVlLgorICogJWZhbHNlIGlmIHRoZSBwb29sIGRvZXNuJ3QgbmVlZCBtYW5hZ2VtZW50IGFuZCB0aGUgY2FsbGVyIGNhbiBzYWZlbHkKKyAqIHN0YXJ0IHByb2Nlc3Npbmcgd29ya3MsICV0cnVlIGlmIG1hbmFnZW1lbnQgZnVuY3Rpb24gd2FzIHBlcmZvcm1lZCBhbmQKKyAqIHRoZSBjb25kaXRpb25zIHRoYXQgdGhlIGNhbGxlciB2ZXJpZmllZCBiZWZvcmUgY2FsbGluZyB0aGUgZnVuY3Rpb24gbWF5CisgKiBubyBsb25nZXIgYmUgdHJ1ZS4KICAqLwogc3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKQogewogCXN0cnVjdCB3b3JrZXJfcG9vbCAqcG9vbCA9IHdvcmtlci0+cG9vbDsKLQlib29sIHJldCA9IGZhbHNlOwogCiAJLyoKIAkgKiBBbnlvbmUgd2hvIHN1Y2Nlc3NmdWxseSBncmFicyBtYW5hZ2VyX2FyYiB3aW5zIHRoZSBhcmJpdHJhdGlvbgpAQCAtMTkxOSwxMiArMTkxMCwxMiBAQAogCSAqIGFjdHVhbCBtYW5hZ2VtZW50LCB0aGUgcG9vbCBtYXkgc3RhbGwgaW5kZWZpbml0ZWx5LgogCSAqLwogCWlmICghbXV0ZXhfdHJ5bG9jaygmcG9vbC0+bWFuYWdlcl9hcmIpKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXQgfD0gbWF5YmVfY3JlYXRlX3dvcmtlcihwb29sKTsKKwltYXliZV9jcmVhdGVfd29ya2VyKHBvb2wpOwogCiAJbXV0ZXhfdW5sb2NrKCZwb29sLT5tYW5hZ2VyX2FyYik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5rZ2RiIGIvbGliL0tjb25maWcua2dkYgppbmRleCAzNThlYjgxLi5jNjM1YTEwIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5rZ2RiCisrKyBiL2xpYi9LY29uZmlnLmtnZGIKQEAgLTczLDYgKzczLDMxIEBACiAJaGVscAogCSAgS0RCIGZyb250ZW5kIGZvciBrZXJuZWwKIAorY29uZmlnIEtEQl9ERUZBVUxUX0VOQUJMRQorCWhleCAiS0RCOiBTZWxlY3Qga2RiIGNvbW1hbmQgZnVuY3Rpb25zIHRvIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCIKKwlkZXBlbmRzIG9uIEtHREJfS0RCCisJZGVmYXVsdCAweDEKKwloZWxwCisJICBTcGVjaWZpZXJzIHdoaWNoIGtkYiBjb21tYW5kcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGlzIG1heQorCSAgYmUgc2V0IHRvIDEgb3IgMCB0byBlbmFibGUgYWxsIGNvbW1hbmRzIG9yIGRpc2FibGUgYWxtb3N0IGFsbAorCSAgY29tbWFuZHMuCisKKwkgIEFsdGVybmF0aXZlbHkgdGhlIGZvbGxvd2luZyBiaXRtYXNrIGFwcGxpZXM6CisKKwkgICAgMHgwMDAyIC0gYWxsb3cgYXJiaXRyYXJ5IHJlYWRzIGZyb20gbWVtb3J5IGFuZCBzeW1ib2wgbG9va3VwCisJICAgIDB4MDAwNCAtIGFsbG93IGFyYml0cmFyeSB3cml0ZXMgdG8gbWVtb3J5CisJICAgIDB4MDAwOCAtIGFsbG93IGN1cnJlbnQgcmVnaXN0ZXIgc3RhdGUgdG8gYmUgaW5zcGVjdGVkCisJICAgIDB4MDAxMCAtIGFsbG93IGN1cnJlbnQgcmVnaXN0ZXIgc3RhdGUgdG8gYmUgbW9kaWZpZWQKKwkgICAgMHgwMDIwIC0gYWxsb3cgcGFzc2l2ZSBpbnNwZWN0aW9uIChiYWNrdHJhY2UsIHByb2Nlc3MgbGlzdCwgbHNtb2QpCisJICAgIDB4MDA0MCAtIGFsbG93IGZsb3cgY29udHJvbCBtYW5hZ2VtZW50IChicmVha3BvaW50LCBzaW5nbGUgc3RlcCkKKwkgICAgMHgwMDgwIC0gZW5hYmxlIHNpZ25hbGxpbmcgb2YgcHJvY2Vzc2VzCisJICAgIDB4MDEwMCAtIGFsbG93IG1hY2hpbmUgdG8gYmUgcmVib290ZWQKKworCSAgVGhlIGNvbmZpZyBvcHRpb24gbWVyZWx5IHNldHMgdGhlIGRlZmF1bHQgYXQgYm9vdCB0aW1lLiBCb3RoCisJICBpc3N1aW5nICdlY2hvIFggPiAvc3lzL21vZHVsZS9rZGIvcGFyYW1ldGVycy9jbWRfZW5hYmxlJyBvcgorICAgICAgICAgIHNldHRpbmcgd2l0aCBrZGIuY21kX2VuYWJsZT1YIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIHdpbGwKKwkgIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorCiBjb25maWcgS0RCX0tFWUJPQVJECiAJYm9vbCAiS0dEQl9LREI6IGtleWJvYXJkIGFzIGlucHV0IGRldmljZSIKIAlkZXBlbmRzIG9uIFZUICYmIEtHREJfS0RCCmRpZmYgLS1naXQgYS9saWIvYXNzb2NfYXJyYXkuYyBiL2xpYi9hc3NvY19hcnJheS5jCmluZGV4IDI0MDRkMDMuLjAzZGQ1NzYgMTAwNjQ0Ci0tLSBhL2xpYi9hc3NvY19hcnJheS5jCisrKyBiL2xpYi9hc3NvY19hcnJheS5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAvLyNkZWZpbmUgREVCVUcKKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9hc3NvY19hcnJheV9wcml2Lmg+CmRpZmYgLS1naXQgYS9tbS9LY29uZmlnLmRlYnVnIGIvbW0vS2NvbmZpZy5kZWJ1ZwppbmRleCA1NmJhZGZjLi45NTdkM2RhIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnLmRlYnVnCisrKyBiL21tL0tjb25maWcuZGVidWcKQEAgLTE0LDcgKzE0LDYgQEAKIAlkZXBlbmRzIG9uICFLTUVNQ0hFQ0sKIAlzZWxlY3QgUEFHRV9FWFRFTlNJT04KIAlzZWxlY3QgUEFHRV9QT0lTT05JTkcgaWYgIUFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCi0Jc2VsZWN0IFBBR0VfR1VBUkQgaWYgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MKIAktLS1oZWxwLS0tCiAJICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgogCSAgVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMKQEAgLTI3LDEzICsyNiw1IEBACiAJICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3Qgd2FybmluZ3Mgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYWZ0ZXIKIAkgIGEgcmVzdW1lIGJlY2F1c2UgZnJlZSBwYWdlcyBhcmUgbm90IHNhdmVkIHRvIHRoZSBzdXNwZW5kIGltYWdlLgogCi1jb25maWcgV0FOVF9QQUdFX0RFQlVHX0ZMQUdTCi0JYm9vbAotCiBjb25maWcgUEFHRV9QT0lTT05JTkcKIAlib29sCi0Jc2VsZWN0IFdBTlRfUEFHRV9ERUJVR19GTEFHUwotCi1jb25maWcgUEFHRV9HVUFSRAotCWJvb2wKLQlzZWxlY3QgV0FOVF9QQUdFX0RFQlVHX0ZMQUdTCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggYmQ4NTQzYy4uNjczZTQ1OCAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtMTA0Niw4ICsxMDQ2LDcgQEAKICAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZSB0byBzZWFyY2gKICAqIEBvZmZzZXQ6IHRoZSBwYWdlIGluZGV4CiAgKiBAZmdwX2ZsYWdzOiBQQ0cgZmxhZ3MKLSAqIEBjYWNoZV9nZnBfbWFzazogZ2ZwIG1hc2sgdG8gdXNlIGZvciB0aGUgcGFnZSBjYWNoZSBkYXRhIHBhZ2UgYWxsb2NhdGlvbgotICogQHJhZGl4X2dmcF9tYXNrOiBnZnAgbWFzayB0byB1c2UgZm9yIHJhZGl4IHRyZWUgbm9kZSBhbGxvY2F0aW9uCisgKiBAZ2ZwX21hc2s6IGdmcCBtYXNrIHRvIHVzZSBmb3IgdGhlIHBhZ2UgY2FjaGUgZGF0YSBwYWdlIGFsbG9jYXRpb24KICAqCiAgKiBMb29rcyB1cCB0aGUgcGFnZSBjYWNoZSBzbG90IGF0IEBtYXBwaW5nICYgQG9mZnNldC4KICAqCkBAIC0xMDU2LDExICsxMDU1LDkgQEAKICAqIEZHUF9BQ0NFU1NFRDogdGhlIHBhZ2Ugd2lsbCBiZSBtYXJrZWQgYWNjZXNzZWQKICAqIEZHUF9MT0NLOiBQYWdlIGlzIHJldHVybiBsb2NrZWQKICAqIEZHUF9DUkVBVDogSWYgcGFnZSBpcyBub3QgcHJlc2VudCB0aGVuIGEgbmV3IHBhZ2UgaXMgYWxsb2NhdGVkIHVzaW5nCi0gKgkJQGNhY2hlX2dmcF9tYXNrIGFuZCBhZGRlZCB0byB0aGUgcGFnZSBjYWNoZSBhbmQgdGhlIFZNJ3MgTFJVCi0gKgkJbGlzdC4gSWYgcmFkaXggdHJlZSBub2RlcyBhcmUgYWxsb2NhdGVkIGR1cmluZyBwYWdlIGNhY2hlCi0gKgkJaW5zZXJ0aW9uIHRoZW4gQHJhZGl4X2dmcF9tYXNrIGlzIHVzZWQuIFRoZSBwYWdlIGlzIHJldHVybmVkCi0gKgkJbG9ja2VkIGFuZCB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4gT3RoZXJ3aXNlLCAlTlVMTCBpcwotICoJCXJldHVybmVkLgorICoJCUBnZnBfbWFzayBhbmQgYWRkZWQgdG8gdGhlIHBhZ2UgY2FjaGUgYW5kIHRoZSBWTSdzIExSVQorICoJCWxpc3QuIFRoZSBwYWdlIGlzIHJldHVybmVkIGxvY2tlZCBhbmQgd2l0aCBhbiBpbmNyZWFzZWQKKyAqCQlyZWZjb3VudC4gT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KICAqCiAgKiBJZiBGR1BfTE9DSyBvciBGR1BfQ1JFQVQgYXJlIHNwZWNpZmllZCB0aGVuIHRoZSBmdW5jdGlvbiBtYXkgc2xlZXAgZXZlbgogICogaWYgdGhlIEdGUCBmbGFncyBzcGVjaWZpZWQgZm9yIEZHUF9DUkVBVCBhcmUgYXRvbWljLgpAQCAtMTA2OCw3ICsxMDY1LDcgQEAKICAqIElmIHRoZXJlIGlzIGEgcGFnZSBjYWNoZSBwYWdlLCBpdCBpcyByZXR1cm5lZCB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4KICAqLwogc3RydWN0IHBhZ2UgKnBhZ2VjYWNoZV9nZXRfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBvZmZzZXQsCi0JaW50IGZncF9mbGFncywgZ2ZwX3QgY2FjaGVfZ2ZwX21hc2ssIGdmcF90IHJhZGl4X2dmcF9tYXNrKQorCWludCBmZ3BfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCkBAIC0xMTA1LDEzICsxMTAyLDExIEBACiAJaWYgKCFwYWdlICYmIChmZ3BfZmxhZ3MgJiBGR1BfQ1JFQVQpKSB7CiAJCWludCBlcnI7CiAJCWlmICgoZmdwX2ZsYWdzICYgRkdQX1dSSVRFKSAmJiBtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKQotCQkJY2FjaGVfZ2ZwX21hc2sgfD0gX19HRlBfV1JJVEU7Ci0JCWlmIChmZ3BfZmxhZ3MgJiBGR1BfTk9GUykgewotCQkJY2FjaGVfZ2ZwX21hc2sgJj0gfl9fR0ZQX0ZTOwotCQkJcmFkaXhfZ2ZwX21hc2sgJj0gfl9fR0ZQX0ZTOwotCQl9CisJCQlnZnBfbWFzayB8PSBfX0dGUF9XUklURTsKKwkJaWYgKGZncF9mbGFncyAmIEZHUF9OT0ZTKQorCQkJZ2ZwX21hc2sgJj0gfl9fR0ZQX0ZTOwogCi0JCXBhZ2UgPSBfX3BhZ2VfY2FjaGVfYWxsb2MoY2FjaGVfZ2ZwX21hc2spOworCQlwYWdlID0gX19wYWdlX2NhY2hlX2FsbG9jKGdmcF9tYXNrKTsKIAkJaWYgKCFwYWdlKQogCQkJcmV0dXJuIE5VTEw7CiAKQEAgLTExMjIsNyArMTExNyw4IEBACiAJCWlmIChmZ3BfZmxhZ3MgJiBGR1BfQUNDRVNTRUQpCiAJCQlfX1NldFBhZ2VSZWZlcmVuY2VkKHBhZ2UpOwogCi0JCWVyciA9IGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLCBvZmZzZXQsIHJhZGl4X2dmcF9tYXNrKTsKKwkJZXJyID0gYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KHBhZ2UsIG1hcHBpbmcsIG9mZnNldCwKKwkJCQlnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0spOwogCQlpZiAodW5saWtlbHkoZXJyKSkgewogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQkJcGFnZSA9IE5VTEw7CkBAIC0yNDQzLDggKzI0MzksNyBAQAogCQlmZ3BfZmxhZ3MgfD0gRkdQX05PRlM7CiAKIAlwYWdlID0gcGFnZWNhY2hlX2dldF9wYWdlKG1hcHBpbmcsIGluZGV4LCBmZ3BfZmxhZ3MsCi0JCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpLAotCQkJR0ZQX0tFUk5FTCk7CisJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAlpZiAocGFnZSkKIAkJd2FpdF9mb3Jfc3RhYmxlX3BhZ2UocGFnZSk7CiAKZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmMKaW5kZXggYTkwMDc1OS4uOGRkNTBjZSAxMDA2NDQKLS0tIGEvbW0vZ3VwLmMKKysrIGIvbW0vZ3VwLmMKQEAgLTI5Niw3ICsyOTYsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWlmIChyZXQgJiAoVk1fRkFVTFRfSFdQT0lTT04gfCBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSkpCiAJCQlyZXR1cm4gKmZsYWdzICYgRk9MTF9IV1BPSVNPTiA/IC1FSFdQT0lTT04gOiAtRUZBVUxUOwotCQlpZiAocmV0ICYgVk1fRkFVTFRfU0lHQlVTKQorCQlpZiAocmV0ICYgKFZNX0ZBVUxUX1NJR0JVUyB8IFZNX0ZBVUxUX1NJR1NFR1YpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCUJVRygpOwogCX0KQEAgLTU3MSw3ICs1NzEsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWlmIChyZXQgJiAoVk1fRkFVTFRfSFdQT0lTT04gfCBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSkpCiAJCQlyZXR1cm4gLUVIV1BPSVNPTjsKLQkJaWYgKHJldCAmIFZNX0ZBVUxUX1NJR0JVUykKKwkJaWYgKHJldCAmIChWTV9GQVVMVF9TSUdCVVMgfCBWTV9GQVVMVF9TSUdTRUdWKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlCVUcoKTsKIAl9CmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IGQyNDdlZmEuLjE1NjQ3ZmIgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCisrKyBiL21tL2tzbS5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAkJZWxzZQogCQkJcmV0ID0gVk1fRkFVTFRfV1JJVEU7CiAJCXB1dF9wYWdlKHBhZ2UpOwotCX0gd2hpbGUgKCEocmV0ICYgKFZNX0ZBVUxUX1dSSVRFIHwgVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfT09NKSkpOworCX0gd2hpbGUgKCEocmV0ICYgKFZNX0ZBVUxUX1dSSVRFIHwgVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfU0lHU0VHViB8IFZNX0ZBVUxUX09PTSkpKTsKIAkvKgogCSAqIFdlIG11c3QgbG9vcCBiZWNhdXNlIGhhbmRsZV9tbV9mYXVsdCgpIG1heSBiYWNrIG91dCBpZiB0aGVyZSdzCiAJICogYW55IGRpZmZpY3VsdHkgZS5nLiBpZiBwdGUgYWNjZXNzZWQgYml0IGdldHMgdXBkYXRlZCBjb25jdXJyZW50bHkuCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggZWY5MWU4NS4uNjgzYjQ3OCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMTQ3Nyw5ICsxNDc3LDkgQEAKIAogCXByX2luZm8oIlRhc2sgaW4gIik7CiAJcHJfY29udF9jZ3JvdXBfcGF0aCh0YXNrX2Nncm91cChwLCBtZW1vcnlfY2dycF9pZCkpOwotCXByX2luZm8oIiBraWxsZWQgYXMgYSByZXN1bHQgb2YgbGltaXQgb2YgIik7CisJcHJfY29udCgiIGtpbGxlZCBhcyBhIHJlc3VsdCBvZiBsaW1pdCBvZiAiKTsKIAlwcl9jb250X2Nncm91cF9wYXRoKG1lbWNnLT5jc3MuY2dyb3VwKTsKLQlwcl9pbmZvKCJcbiIpOworCXByX2NvbnQoIlxuIik7CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtMzA0MywxOCArMzA0Myw2IEBACiAJaWYgKHN3YXBfY2dyb3VwX2NtcHhjaGcoZW50cnksIG9sZF9pZCwgbmV3X2lkKSA9PSBvbGRfaWQpIHsKIAkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MoZnJvbSwgZmFsc2UpOwogCQltZW1fY2dyb3VwX3N3YXBfc3RhdGlzdGljcyh0bywgdHJ1ZSk7Ci0JCS8qCi0JCSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB0YXNrIG1pZ3JhdGlvbiBjb250ZXh0IG5vdy4KLQkJICogSXQgcG9zdHBvbmVzIHBhZ2VfY291bnRlciBhbmQgcmVmY291bnQgaGFuZGxpbmcgdGlsbCB0aGUgZW5kCi0JCSAqIG9mIHRhc2sgbWlncmF0aW9uKG1lbV9jZ3JvdXBfY2xlYXJfbWMoKSkgZm9yIHBlcmZvcm1hbmNlCi0JCSAqIGltcHJvdmVtZW50LiBCdXQgd2UgY2Fubm90IHBvc3Rwb25lIGNzc19nZXQodG8pICBiZWNhdXNlIGlmCi0JCSAqIHRoZSBwcm9jZXNzIHRoYXQgaGFzIGJlZW4gbW92ZWQgdG8gQHRvIGRvZXMgc3dhcC1pbiwgdGhlCi0JCSAqIHJlZmNvdW50IG9mIEB0byBtaWdodCBiZSBkZWNyZWFzZWQgdG8gMC4KLQkJICoKLQkJICogV2UgYXJlIGluIGF0dGFjaCgpIHBoYXNlLCBzbyB0aGUgY2dyb3VwIGlzIGd1YXJhbnRlZWQgdG8gYmUKLQkJICogYWxpdmUsIHNvIHdlIGNhbiBqdXN0IGNhbGwgY3NzX2dldCgpLgotCQkgKi8KLQkJY3NzX2dldCgmdG8tPmNzcyk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ2NzksNiArNDY2Nyw3IEBACiAJaWYgKHBhcmVudF9jc3MgPT0gTlVMTCkgewogCQlyb290X21lbV9jZ3JvdXAgPSBtZW1jZzsKIAkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1vcnksIE5VTEwpOworCQltZW1jZy0+c29mdF9saW1pdCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtc3csIE5VTEwpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmbWVtY2ctPmttZW0sIE5VTEwpOwogCX0KQEAgLTQ3MjQsNiArNDcxMyw3IEBACiAKIAlpZiAocGFyZW50LT51c2VfaGllcmFyY2h5KSB7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtb3J5LCAmcGFyZW50LT5tZW1vcnkpOworCQltZW1jZy0+c29mdF9saW1pdCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtc3csICZwYXJlbnQtPm1lbXN3KTsKIAkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5rbWVtLCAmcGFyZW50LT5rbWVtKTsKIApAQCAtNDczMyw2ICs0NzIzLDcgQEAKIAkJICovCiAJfSBlbHNlIHsKIAkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1vcnksIE5VTEwpOworCQltZW1jZy0+c29mdF9saW1pdCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtc3csIE5VTEwpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmbWVtY2ctPmttZW0sIE5VTEwpOwogCQkvKgpAQCAtNDgwNyw3ICs0Nzk4LDcgQEAKIAltZW1fY2dyb3VwX3Jlc2l6ZV9saW1pdChtZW1jZywgUEFHRV9DT1VOVEVSX01BWCk7CiAJbWVtX2Nncm91cF9yZXNpemVfbWVtc3dfbGltaXQobWVtY2csIFBBR0VfQ09VTlRFUl9NQVgpOwogCW1lbWNnX3VwZGF0ZV9rbWVtX2xpbWl0KG1lbWNnLCBQQUdFX0NPVU5URVJfTUFYKTsKLQltZW1jZy0+c29mdF9saW1pdCA9IDA7CisJbWVtY2ctPnNvZnRfbGltaXQgPSBQQUdFX0NPVU5URVJfTUFYOwogfQogCiAjaWZkZWYgQ09ORklHX01NVQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA2NDllN2Q0NC4uMmMzNTM2YyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTIzNSw2ICsyMzUsOSBAQAogCiBzdGF0aWMgdm9pZCB0bGJfZmx1c2hfbW11X3RsYm9ubHkoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKIHsKKwlpZiAoIXRsYi0+ZW5kKQorCQlyZXR1cm47CisKIAl0bGJfZmx1c2godGxiKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZSh0bGItPm1tLCB0bGItPnN0YXJ0LCB0bGItPmVuZCk7CiAjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKQEAgLTI0Nyw3ICsyNTAsNyBAQAogewogCXN0cnVjdCBtbXVfZ2F0aGVyX2JhdGNoICpiYXRjaDsKIAotCWZvciAoYmF0Y2ggPSAmdGxiLT5sb2NhbDsgYmF0Y2g7IGJhdGNoID0gYmF0Y2gtPm5leHQpIHsKKwlmb3IgKGJhdGNoID0gJnRsYi0+bG9jYWw7IGJhdGNoICYmIGJhdGNoLT5ucjsgYmF0Y2ggPSBiYXRjaC0+bmV4dCkgewogCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKGJhdGNoLT5wYWdlcywgYmF0Y2gtPm5yKTsKIAkJYmF0Y2gtPm5yID0gMDsKIAl9CkBAIC0yNTYsOSArMjU5LDYgQEAKIAogdm9pZCB0bGJfZmx1c2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCiB7Ci0JaWYgKCF0bGItPmVuZCkKLQkJcmV0dXJuOwotCiAJdGxiX2ZsdXNoX21tdV90bGJvbmx5KHRsYik7CiAJdGxiX2ZsdXNoX21tdV9mcmVlKHRsYik7CiB9CkBAIC0yMTM3LDE3ICsyMTM3LDI0IEBACiAJCWlmICghZGlydHlfcGFnZSkKIAkJCXJldHVybiByZXQ7CiAKLQkJLyoKLQkJICogWWVzLCBWaXJnaW5pYSwgdGhpcyBpcyBhY3R1YWxseSByZXF1aXJlZCB0byBwcmV2ZW50IGEgcmFjZQotCQkgKiB3aXRoIGNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKCkgZnJvbSBjbGVhcmluZyB0aGUgcGFnZSBkaXJ0eQotCQkgKiBiaXQgYWZ0ZXIgaXQgY2xlYXIgYWxsIGRpcnR5IHB0ZXMsIGJ1dCBiZWZvcmUgYSByYWNpbmcKLQkJICogZG9fd3BfcGFnZSBpbnN0YWxscyBhIGRpcnR5IHB0ZS4KLQkJICoKLQkJICogZG9fc2hhcmVkX2ZhdWx0IGlzIHByb3RlY3RlZCBzaW1pbGFybHkuCi0JCSAqLwogCQlpZiAoIXBhZ2VfbWt3cml0ZSkgewotCQkJd2FpdF9vbl9wYWdlX2xvY2tlZChkaXJ0eV9wYWdlKTsKLQkJCXNldF9wYWdlX2RpcnR5X2JhbGFuY2UoZGlydHlfcGFnZSk7CisJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKwkJCWludCBkaXJ0aWVkOworCisJCQlsb2NrX3BhZ2UoZGlydHlfcGFnZSk7CisJCQlkaXJ0aWVkID0gc2V0X3BhZ2VfZGlydHkoZGlydHlfcGFnZSk7CisJCQlWTV9CVUdfT05fUEFHRShQYWdlQW5vbihkaXJ0eV9wYWdlKSwgZGlydHlfcGFnZSk7CisJCQltYXBwaW5nID0gZGlydHlfcGFnZS0+bWFwcGluZzsKKwkJCXVubG9ja19wYWdlKGRpcnR5X3BhZ2UpOworCisJCQlpZiAoZGlydGllZCAmJiBtYXBwaW5nKSB7CisJCQkJLyoKKwkJCQkgKiBTb21lIGRldmljZSBkcml2ZXJzIGRvIG5vdCBzZXQgcGFnZS5tYXBwaW5nCisJCQkJICogYnV0IHN0aWxsIGRpcnR5IHRoZWlyIHBhZ2VzCisJCQkJICovCisJCQkJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZChtYXBwaW5nKTsKKwkJCX0KKwogCQkJLyogZmlsZV91cGRhdGVfdGltZSBvdXRzaWRlIHBhZ2VfbG9jayAqLwogCQkJaWYgKHZtYS0+dm1fZmlsZSkKIAkJCQlmaWxlX3VwZGF0ZV90aW1lKHZtYS0+dm1fZmlsZSk7CkBAIC0yMzc4LDEyICsyMzg1LDEyIEBACiAJCWRldGFpbHMubGFzdF9pbmRleCA9IFVMT05HX01BWDsKIAogCi0JaV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsKKwlpX21tYXBfbG9ja193cml0ZShtYXBwaW5nKTsKIAlpZiAodW5saWtlbHkoIVJCX0VNUFRZX1JPT1QoJm1hcHBpbmctPmlfbW1hcCkpKQogCQl1bm1hcF9tYXBwaW5nX3JhbmdlX3RyZWUoJm1hcHBpbmctPmlfbW1hcCwgJmRldGFpbHMpOwogCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhcikpKQogCQl1bm1hcF9tYXBwaW5nX3JhbmdlX2xpc3QoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIsICZkZXRhaWxzKTsKLQlpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7CisJaV9tbWFwX3VubG9ja193cml0ZShtYXBwaW5nKTsKIH0KIEVYUE9SVF9TWU1CT0wodW5tYXBfbWFwcGluZ19yYW5nZSk7CiAKQEAgLTI1OTMsNyArMjYwMCw3IEBACiAJCWlmIChwcmV2ICYmIHByZXYtPnZtX2VuZCA9PSBhZGRyZXNzKQogCQkJcmV0dXJuIHByZXYtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOID8gMCA6IC1FTk9NRU07CiAKLQkJZXhwYW5kX2Rvd253YXJkcyh2bWEsIGFkZHJlc3MgLSBQQUdFX1NJWkUpOworCQlyZXR1cm4gZXhwYW5kX2Rvd253YXJkcyh2bWEsIGFkZHJlc3MgLSBQQUdFX1NJWkUpOwogCX0KIAlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU1VQKSAmJiBhZGRyZXNzICsgUEFHRV9TSVpFID09IHZtYS0+dm1fZW5kKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dCA9IHZtYS0+dm1fbmV4dDsKQEAgLTI2MDIsNyArMjYwOSw3IEBACiAJCWlmIChuZXh0ICYmIG5leHQtPnZtX3N0YXJ0ID09IGFkZHJlc3MgKyBQQUdFX1NJWkUpCiAJCQlyZXR1cm4gbmV4dC0+dm1fZmxhZ3MgJiBWTV9HUk9XU1VQID8gMCA6IC1FTk9NRU07CiAKLQkJZXhwYW5kX3Vwd2FyZHModm1hLCBhZGRyZXNzICsgUEFHRV9TSVpFKTsKKwkJcmV0dXJuIGV4cGFuZF91cHdhcmRzKHZtYSwgYWRkcmVzcyArIFBBR0VfU0laRSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjYyNSw3ICsyNjMyLDcgQEAKIAogCS8qIENoZWNrIGlmIHdlIG5lZWQgdG8gYWRkIGEgZ3VhcmQgcGFnZSB0byB0aGUgc3RhY2sgKi8KIAlpZiAoY2hlY2tfc3RhY2tfZ3VhcmRfcGFnZSh2bWEsIGFkZHJlc3MpIDwgMCkKLQkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7CiAKIAkvKiBVc2UgdGhlIHplcm8tcGFnZSBmb3IgcmVhZHMgKi8KIAlpZiAoIShmbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpICYmICFtbV9mb3JiaWRzX3plcm9wYWdlKG1tKSkgewpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDdiMzZhYTcuLjdmNjg0ZDUgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTc3OCwxMCArNzc4LDEyIEBACiAJCWlmIChleHBvcnRlciAmJiBleHBvcnRlci0+YW5vbl92bWEgJiYgIWltcG9ydGVyLT5hbm9uX3ZtYSkgewogCQkJaW50IGVycm9yOwogCi0JCQllcnJvciA9IGFub25fdm1hX2Nsb25lKGltcG9ydGVyLCBleHBvcnRlcik7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJcmV0dXJuIGVycm9yOwogCQkJaW1wb3J0ZXItPmFub25fdm1hID0gZXhwb3J0ZXItPmFub25fdm1hOworCQkJZXJyb3IgPSBhbm9uX3ZtYV9jbG9uZShpbXBvcnRlciwgZXhwb3J0ZXIpOworCQkJaWYgKGVycm9yKSB7CisJCQkJaW1wb3J0ZXItPmFub25fdm1hID0gTlVMTDsKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTIwOTksMTQgKzIxMDEsMTcgQEAKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJc3RydWN0IHJsaW1pdCAqcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbTsKLQl1bnNpZ25lZCBsb25nIG5ld19zdGFydDsKKwl1bnNpZ25lZCBsb25nIG5ld19zdGFydCwgYWN0dWFsX3NpemU7CiAKIAkvKiBhZGRyZXNzIHNwYWNlIGxpbWl0IHRlc3RzICovCiAJaWYgKCFtYXlfZXhwYW5kX3ZtKG1tLCBncm93KSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBTdGFjayBsaW1pdCB0ZXN0ICovCi0JaWYgKHNpemUgPiBBQ0NFU1NfT05DRShybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIpKQorCWFjdHVhbF9zaXplID0gc2l6ZTsKKwlpZiAoc2l6ZSAmJiAodm1hLT52bV9mbGFncyAmIChWTV9HUk9XU1VQIHwgVk1fR1JPV1NET1dOKSkpCisJCWFjdHVhbF9zaXplIC09IFBBR0VfU0laRTsKKwlpZiAoYWN0dWFsX3NpemUgPiBBQ0NFU1NfT05DRShybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIG1sb2NrIGxpbWl0IHRlc3RzICovCmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCBkNWQ4MWY1Li42ZjQzMzUyIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTE1NDEsMTYgKzE1NDEsNiBAQAogCQliZGlfc3RhcnRfYmFja2dyb3VuZF93cml0ZWJhY2soYmRpKTsKIH0KIAotdm9pZCBzZXRfcGFnZV9kaXJ0eV9iYWxhbmNlKHN0cnVjdCBwYWdlICpwYWdlKQotewotCWlmIChzZXRfcGFnZV9kaXJ0eShwYWdlKSkgewotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKLQotCQlpZiAobWFwcGluZykKLQkJCWJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWQobWFwcGluZyk7Ci0JfQotfQotCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBiZHBfcmF0ZWxpbWl0cyk7CiAKIC8qCkBAIC0yMTIzLDMyICsyMTEzLDI1IEBACiAgKiBwYWdlIGRpcnR5IGluIHRoYXQgY2FzZSwgYnV0IG5vdCBhbGwgdGhlIGJ1ZmZlcnMuICBUaGlzIGlzIGEgImJvdHRvbS11cCIKICAqIGRpcnR5aW5nLCB3aGVyZWFzIF9fc2V0X3BhZ2VfZGlydHlfYnVmZmVycygpIGlzIGEgInRvcC1kb3duIiBkaXJ0eWluZy4KICAqCi0gKiBNb3N0IGNhbGxlcnMgaGF2ZSBsb2NrZWQgdGhlIHBhZ2UsIHdoaWNoIHBpbnMgdGhlIGFkZHJlc3Nfc3BhY2UgaW4gbWVtb3J5LgotICogQnV0IHphcF9wdGVfcmFuZ2UoKSBkb2VzIG5vdCBsb2NrIHRoZSBwYWdlLCBob3dldmVyIGluIHRoYXQgY2FzZSB0aGUKLSAqIG1hcHBpbmcgaXMgcGlubmVkIGJ5IHRoZSB2bWEncyAtPnZtX2ZpbGUgcmVmZXJlbmNlLgotICoKLSAqIFdlIHRha2UgY2FyZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHBhZ2Ugd2FzIHRydW5jYXRlZCBmcm9tIHRoZQotICogbWFwcGluZyBieSByZS1jaGVja2luZyBwYWdlX21hcHBpbmcoKSBpbnNpZGUgdHJlZV9sb2NrLgorICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGlzIGRvZXNuJ3QgcmFjZSB3aXRoIHRydW5jYXRpb24uICBNb3N0IHdpbGwgc2ltcGx5CisgKiBob2xkIHRoZSBwYWdlIGxvY2ssIGJ1dCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBjYWxscyB3aXRoIHRoZSBwYWdlIG1hcHBlZCBhbmQKKyAqIHRoZSBwdGUgbG9jayBoZWxkLCB3aGljaCBhbHNvIGxvY2tzIG91dCB0cnVuY2F0aW9uLgogICovCiBpbnQgX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJaWYgKCFUZXN0U2V0UGFnZURpcnR5KHBhZ2UpKSB7CiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzI7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJaWYgKCFtYXBwaW5nKQogCQkJcmV0dXJuIDE7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hcHBpbmctPnRyZWVfbG9jaywgZmxhZ3MpOwotCQltYXBwaW5nMiA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKLQkJaWYgKG1hcHBpbmcyKSB7IC8qIFJhY2Ugd2l0aCB0cnVuY2F0ZT8gKi8KLQkJCUJVR19PTihtYXBwaW5nMiAhPSBtYXBwaW5nKTsKLQkJCVdBUk5fT05fT05DRSghUGFnZVByaXZhdGUocGFnZSkgJiYgIVBhZ2VVcHRvZGF0ZShwYWdlKSk7Ci0JCQlhY2NvdW50X3BhZ2VfZGlydGllZChwYWdlLCBtYXBwaW5nKTsKLQkJCXJhZGl4X3RyZWVfdGFnX3NldCgmbWFwcGluZy0+cGFnZV90cmVlLAotCQkJCXBhZ2VfaW5kZXgocGFnZSksIFBBR0VDQUNIRV9UQUdfRElSVFkpOwotCQl9CisJCUJVR19PTihwYWdlX21hcHBpbmcocGFnZSkgIT0gbWFwcGluZyk7CisJCVdBUk5fT05fT05DRSghUGFnZVByaXZhdGUocGFnZSkgJiYgIVBhZ2VVcHRvZGF0ZShwYWdlKSk7CisJCWFjY291bnRfcGFnZV9kaXJ0aWVkKHBhZ2UsIG1hcHBpbmcpOworCQlyYWRpeF90cmVlX3RhZ19zZXQoJm1hcHBpbmctPnBhZ2VfdHJlZSwgcGFnZV9pbmRleChwYWdlKSwKKwkJCQkgICBQQUdFQ0FDSEVfVEFHX0RJUlRZKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFwcGluZy0+dHJlZV9sb2NrLCBmbGFncyk7CiAJCWlmIChtYXBwaW5nLT5ob3N0KSB7CiAJCQkvKiAhUGFnZUFub24gJiYgIXN3YXBwZXJfc3BhY2UgKi8KQEAgLTIzMDUsMTIgKzIyODgsMTAgQEAKIAkJLyoKIAkJICogV2UgY2FyZWZ1bGx5IHN5bmNocm9uaXNlIGZhdWx0IGhhbmRsZXJzIGFnYWluc3QKIAkJICogaW5zdGFsbGluZyBhIGRpcnR5IHB0ZSBhbmQgbWFya2luZyB0aGUgcGFnZSBkaXJ0eQotCQkgKiBhdCB0aGlzIHBvaW50LiBXZSBkbyB0aGlzIGJ5IGhhdmluZyB0aGVtIGhvbGQgdGhlCi0JCSAqIHBhZ2UgbG9jayBhdCBzb21lIHBvaW50IGFmdGVyIGluc3RhbGxpbmcgdGhlaXIKLQkJICogcHRlLCBidXQgYmVmb3JlIG1hcmtpbmcgdGhlIHBhZ2UgZGlydHkuCi0JCSAqIFBhZ2VzIGFyZSBhbHdheXMgbG9ja2VkIGNvbWluZyBpbiBoZXJlLCBzbyB3ZSBnZXQKLQkJICogdGhlIGRlc2lyZWQgZXhjbHVzaW9uLiBTZWUgbW0vbWVtb3J5LmM6ZG9fd3BfcGFnZSgpCi0JCSAqIGZvciBtb3JlIGNvbW1lbnRzLgorCQkgKiBhdCB0aGlzIHBvaW50LiAgV2UgZG8gdGhpcyBieSBoYXZpbmcgdGhlbSBob2xkIHRoZQorCQkgKiBwYWdlIGxvY2sgd2hpbGUgZGlydHlpbmcgdGhlIHBhZ2UsIGFuZCBwYWdlcyBhcmUKKwkJICogYWx3YXlzIGxvY2tlZCBjb21pbmcgaW4gaGVyZSwgc28gd2UgZ2V0IHRoZSBkZXNpcmVkCisJCSAqIGV4Y2x1c2lvbi4KIAkJICovCiAJCWlmIChUZXN0Q2xlYXJQYWdlRGlydHkocGFnZSkpIHsKIAkJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9ESVJUWSk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggNzYzM2M1MC4uOGUyMGY5YyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMjMzMiwxMiArMjMzMiwyMSBAQAogX19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZW51bSB6b25lX3R5cGUgaGlnaF96b25laWR4LAogCW5vZGVtYXNrX3QgKm5vZGVtYXNrLCBzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsCi0JaW50IGNsYXNzem9uZV9pZHgsIGludCBtaWdyYXRldHlwZSkKKwlpbnQgY2xhc3N6b25lX2lkeCwgaW50IG1pZ3JhdGV0eXBlLCB1bnNpZ25lZCBsb25nICpkaWRfc29tZV9wcm9ncmVzcykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCS8qIEFjcXVpcmUgdGhlIHBlci16b25lIG9vbSBsb2NrIGZvciBlYWNoIHpvbmUgKi8KKwkqZGlkX3NvbWVfcHJvZ3Jlc3MgPSAwOworCisJaWYgKG9vbV9raWxsZXJfZGlzYWJsZWQpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBBY3F1aXJlIHRoZSBwZXItem9uZSBvb20gbG9jayBmb3IgZWFjaCB6b25lLiAgSWYgdGhhdAorCSAqIGZhaWxzLCBzb21lYm9keSBlbHNlIGlzIG1ha2luZyBwcm9ncmVzcyBmb3IgdXMuCisJICovCiAJaWYgKCFvb21fem9uZWxpc3RfdHJ5bG9jayh6b25lbGlzdCwgZ2ZwX21hc2spKSB7CisJCSpkaWRfc29tZV9wcm9ncmVzcyA9IDE7CiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0yMzYzLDEyICsyMzcyLDE4IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9OT0ZBSUwpKSB7CisJCS8qIENvcmVkdW1wcyBjYW4gcXVpY2tseSBkZXBsZXRlIGFsbCBtZW1vcnkgcmVzZXJ2ZXMgKi8KKwkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfRFVNUENPUkUpCisJCQlnb3RvIG91dDsKIAkJLyogVGhlIE9PTSBraWxsZXIgd2lsbCBub3QgaGVscCBoaWdoZXIgb3JkZXIgYWxsb2NzICovCiAJCWlmIChvcmRlciA+IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKQogCQkJZ290byBvdXQ7CiAJCS8qIFRoZSBPT00ga2lsbGVyIGRvZXMgbm90IG5lZWRsZXNzbHkga2lsbCB0YXNrcyBmb3IgbG93bWVtICovCiAJCWlmIChoaWdoX3pvbmVpZHggPCBaT05FX05PUk1BTCkKIAkJCWdvdG8gb3V0OworCQkvKiBUaGUgT09NIGtpbGxlciBkb2VzIG5vdCBjb21wZW5zYXRlIGZvciBsaWdodCByZWNsYWltICovCisJCWlmICghKGdmcF9tYXNrICYgX19HRlBfRlMpKQorCQkJZ290byBvdXQ7CiAJCS8qCiAJCSAqIEdGUF9USElTTk9ERSBjb250YWlucyBfX0dGUF9OT1JFVFJZIGFuZCB3ZSBuZXZlciBoaXQgdGhpcy4KIAkJICogU2FuaXR5IGNoZWNrIGZvciBiYXJlIGNhbGxzIG9mIF9fR0ZQX1RISVNOT0RFLCBub3QgcmVhbCBPT00uCkBAIC0yMzgxLDcgKzIzOTYsNyBAQAogCX0KIAkvKiBFeGhhdXN0ZWQgd2hhdCBjYW4gYmUgZG9uZSBzbyBpdCdzIGJsYW1vIHRpbWUgKi8KIAlvdXRfb2ZfbWVtb3J5KHpvbmVsaXN0LCBnZnBfbWFzaywgb3JkZXIsIG5vZGVtYXNrLCBmYWxzZSk7Ci0KKwkqZGlkX3NvbWVfcHJvZ3Jlc3MgPSAxOwogb3V0OgogCW9vbV96b25lbGlzdF91bmxvY2soem9uZWxpc3QsIGdmcF9tYXNrKTsKIAlyZXR1cm4gcGFnZTsKQEAgLTI2NTgsNyArMjY3Myw3IEBACiAJICAgIChnZnBfbWFzayAmIEdGUF9USElTTk9ERSkgPT0gR0ZQX1RISVNOT0RFKQogCQlnb3RvIG5vcGFnZTsKIAotcmVzdGFydDoKK3JldHJ5OgogCWlmICghKGdmcF9tYXNrICYgX19HRlBfTk9fS1NXQVBEKSkKIAkJd2FrZV9hbGxfa3N3YXBkcyhvcmRlciwgem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwKIAkJCQlwcmVmZXJyZWRfem9uZSwgbm9kZW1hc2spOwpAQCAtMjY4MSw3ICsyNjk2LDYgQEAKIAkJY2xhc3N6b25lX2lkeCA9IHpvbmVsaXN0X3pvbmVfaWR4KHByZWZlcnJlZF96b25lcmVmKTsKIAl9CiAKLXJlYmFsYW5jZToKIAkvKiBUaGlzIGlzIHRoZSBsYXN0IGNoYW5jZSwgaW4gZ2VuZXJhbCwgYmVmb3JlIHRoZSBnb3RvIG5vcGFnZS4gKi8KIAlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFzaywgbm9kZW1hc2ssIG9yZGVyLCB6b25lbGlzdCwKIAkJCWhpZ2hfem9uZWlkeCwgYWxsb2NfZmxhZ3MgJiB+QUxMT0NfTk9fV0FURVJNQVJLUywKQEAgLTI3ODgsNTQgKzI4MDIsMjggQEAKIAlpZiAocGFnZSkKIAkJZ290byBnb3RfcGc7CiAKLQkvKgotCSAqIElmIHdlIGZhaWxlZCB0byBtYWtlIGFueSBwcm9ncmVzcyByZWNsYWltaW5nLCB0aGVuIHdlIGFyZQotCSAqIHJ1bm5pbmcgb3V0IG9mIG9wdGlvbnMgYW5kIGhhdmUgdG8gY29uc2lkZXIgZ29pbmcgT09NCi0JICovCi0JaWYgKCFkaWRfc29tZV9wcm9ncmVzcykgewotCQlpZiAob29tX2dmcF9hbGxvd2VkKGdmcF9tYXNrKSkgewotCQkJaWYgKG9vbV9raWxsZXJfZGlzYWJsZWQpCi0JCQkJZ290byBub3BhZ2U7Ci0JCQkvKiBDb3JlZHVtcHMgY2FuIHF1aWNrbHkgZGVwbGV0ZSBhbGwgbWVtb3J5IHJlc2VydmVzICovCi0JCQlpZiAoKGN1cnJlbnQtPmZsYWdzICYgUEZfRFVNUENPUkUpICYmCi0JCQkgICAgIShnZnBfbWFzayAmIF9fR0ZQX05PRkFJTCkpCi0JCQkJZ290byBub3BhZ2U7Ci0JCQlwYWdlID0gX19hbGxvY19wYWdlc19tYXlfb29tKGdmcF9tYXNrLCBvcmRlciwKLQkJCQkJem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwKLQkJCQkJbm9kZW1hc2ssIHByZWZlcnJlZF96b25lLAotCQkJCQljbGFzc3pvbmVfaWR4LCBtaWdyYXRldHlwZSk7Ci0JCQlpZiAocGFnZSkKLQkJCQlnb3RvIGdvdF9wZzsKLQotCQkJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9OT0ZBSUwpKSB7Ci0JCQkJLyoKLQkJCQkgKiBUaGUgb29tIGtpbGxlciBpcyBub3QgY2FsbGVkIGZvciBoaWdoLW9yZGVyCi0JCQkJICogYWxsb2NhdGlvbnMgdGhhdCBtYXkgZmFpbCwgc28gaWYgbm8gcHJvZ3Jlc3MKLQkJCQkgKiBpcyBiZWluZyBtYWRlLCB0aGVyZSBhcmUgbm8gb3RoZXIgb3B0aW9ucyBhbmQKLQkJCQkgKiByZXRyeWluZyBpcyB1bmxpa2VseSB0byBoZWxwLgotCQkJCSAqLwotCQkJCWlmIChvcmRlciA+IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKQotCQkJCQlnb3RvIG5vcGFnZTsKLQkJCQkvKgotCQkJCSAqIFRoZSBvb20ga2lsbGVyIGlzIG5vdCBjYWxsZWQgZm9yIGxvd21lbQotCQkJCSAqIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgbmVlZGxlc3NseSBraWxsaW5nCi0JCQkJICogaW5ub2NlbnQgdGFza3MuCi0JCQkJICovCi0JCQkJaWYgKGhpZ2hfem9uZWlkeCA8IFpPTkVfTk9STUFMKQotCQkJCQlnb3RvIG5vcGFnZTsKLQkJCX0KLQotCQkJZ290byByZXN0YXJ0OwotCQl9Ci0JfQotCiAJLyogQ2hlY2sgaWYgd2Ugc2hvdWxkIHJldHJ5IHRoZSBhbGxvY2F0aW9uICovCiAJcGFnZXNfcmVjbGFpbWVkICs9IGRpZF9zb21lX3Byb2dyZXNzOwogCWlmIChzaG91bGRfYWxsb2NfcmV0cnkoZ2ZwX21hc2ssIG9yZGVyLCBkaWRfc29tZV9wcm9ncmVzcywKIAkJCQkJCXBhZ2VzX3JlY2xhaW1lZCkpIHsKKwkJLyoKKwkJICogSWYgd2UgZmFpbCB0byBtYWtlIHByb2dyZXNzIGJ5IGZyZWVpbmcgaW5kaXZpZHVhbAorCQkgKiBwYWdlcywgYnV0IHRoZSBhbGxvY2F0aW9uIHdhbnRzIHVzIHRvIGtlZXAgZ29pbmcsCisJCSAqIHN0YXJ0IE9PTSBraWxsaW5nIHRhc2tzLgorCQkgKi8KKwkJaWYgKCFkaWRfc29tZV9wcm9ncmVzcykgeworCQkJcGFnZSA9IF9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfbWFzaywgb3JkZXIsIHpvbmVsaXN0LAorCQkJCQkJaGlnaF96b25laWR4LCBub2RlbWFzaywKKwkJCQkJCXByZWZlcnJlZF96b25lLCBjbGFzc3pvbmVfaWR4LAorCQkJCQkJbWlncmF0ZXR5cGUsJmRpZF9zb21lX3Byb2dyZXNzKTsKKwkJCWlmIChwYWdlKQorCQkJCWdvdG8gZ290X3BnOworCQkJaWYgKCFkaWRfc29tZV9wcm9ncmVzcykKKwkJCQlnb3RvIG5vcGFnZTsKKwkJfQogCQkvKiBXYWl0IGZvciBzb21lIHdyaXRlIHJlcXVlc3RzIHRvIGNvbXBsZXRlIHRoZW4gcmV0cnkgKi8KIAkJd2FpdF9pZmZfY29uZ2VzdGVkKHByZWZlcnJlZF96b25lLCBCTEtfUldfQVNZTkMsIEhaLzUwKTsKLQkJZ290byByZWJhbGFuY2U7CisJCWdvdG8gcmV0cnk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogSGlnaC1vcmRlciBhbGxvY2F0aW9ucyBkbyBub3QgbmVjZXNzYXJpbHkgbG9vcCBhZnRlcgpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IGM1YmMyNDEuLjcxY2Q1YmQgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTcyLDYgKzcyLDggQEAKIAlhbm9uX3ZtYSA9IGttZW1fY2FjaGVfYWxsb2MoYW5vbl92bWFfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIAlpZiAoYW5vbl92bWEpIHsKIAkJYXRvbWljX3NldCgmYW5vbl92bWEtPnJlZmNvdW50LCAxKTsKKwkJYW5vbl92bWEtPmRlZ3JlZSA9IDE7CS8qIFJlZmVyZW5jZSBmb3IgZmlyc3Qgdm1hICovCisJCWFub25fdm1hLT5wYXJlbnQgPSBhbm9uX3ZtYTsKIAkJLyoKIAkJICogSW5pdGlhbGlzZSB0aGUgYW5vbl92bWEgcm9vdCB0byBwb2ludCB0byBpdHNlbGYuIElmIGNhbGxlZAogCQkgKiBmcm9tIGZvcmssIHRoZSByb290IHdpbGwgYmUgcmVzZXQgdG8gdGhlIHBhcmVudHMgYW5vbl92bWEuCkBAIC0xODgsNiArMTkwLDggQEAKIAkJaWYgKGxpa2VseSghdm1hLT5hbm9uX3ZtYSkpIHsKIAkJCXZtYS0+YW5vbl92bWEgPSBhbm9uX3ZtYTsKIAkJCWFub25fdm1hX2NoYWluX2xpbmsodm1hLCBhdmMsIGFub25fdm1hKTsKKwkJCS8qIHZtYSByZWZlcmVuY2Ugb3Igc2VsZi1wYXJlbnQgbGluayBmb3IgbmV3IHJvb3QgKi8KKwkJCWFub25fdm1hLT5kZWdyZWUrKzsKIAkJCWFsbG9jYXRlZCA9IE5VTEw7CiAJCQlhdmMgPSBOVUxMOwogCQl9CkBAIC0yMzYsNiArMjQwLDE0IEBACiAvKgogICogQXR0YWNoIHRoZSBhbm9uX3ZtYXMgZnJvbSBzcmMgdG8gZHN0LgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS4KKyAqCisgKiBJZiBkc3QtPmFub25fdm1hIGlzIE5VTEwgdGhpcyBmdW5jdGlvbiB0cmllcyB0byBmaW5kIGFuZCByZXVzZSBleGlzdGluZworICogYW5vbl92bWEgd2hpY2ggaGFzIG5vIHZtYXMgYW5kIG9ubHkgb25lIGNoaWxkIGFub25fdm1hLiBUaGlzIHByZXZlbnRzCisgKiBkZWdyYWRhdGlvbiBvZiBhbm9uX3ZtYSBoaWVyYXJjaHkgdG8gZW5kbGVzcyBsaW5lYXIgY2hhaW4gaW4gY2FzZSBvZgorICogY29uc3RhbnRseSBmb3JraW5nIHRhc2suIE9uIHRoZSBvdGhlciBoYW5kLCBhbiBhbm9uX3ZtYSB3aXRoIG1vcmUgdGhhbiBvbmUKKyAqIGNoaWxkIGlzbid0IHJldXNlZCBldmVuIGlmIHRoZXJlIHdhcyBubyBhbGl2ZSB2bWEsIHRodXMgcm1hcCB3YWxrZXIgaGFzIGEKKyAqIGdvb2QgY2hhbmNlIG9mIGF2b2lkaW5nIHNjYW5uaW5nIHRoZSB3aG9sZSBoaWVyYXJjaHkgd2hlbiBpdCBzZWFyY2hlcyB3aGVyZQorICogcGFnZSBpcyBtYXBwZWQuCiAgKi8KIGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMpCiB7CkBAIC0yNTYsNyArMjY4LDIxIEBACiAJCWFub25fdm1hID0gcGF2Yy0+YW5vbl92bWE7CiAJCXJvb3QgPSBsb2NrX2Fub25fdm1hX3Jvb3Qocm9vdCwgYW5vbl92bWEpOwogCQlhbm9uX3ZtYV9jaGFpbl9saW5rKGRzdCwgYXZjLCBhbm9uX3ZtYSk7CisKKwkJLyoKKwkJICogUmV1c2UgZXhpc3RpbmcgYW5vbl92bWEgaWYgaXRzIGRlZ3JlZSBsb3dlciB0aGFuIHR3bywKKwkJICogdGhhdCBtZWFucyBpdCBoYXMgbm8gdm1hIGFuZCBvbmx5IG9uZSBhbm9uX3ZtYSBjaGlsZC4KKwkJICoKKwkJICogRG8gbm90IGNob3NlIHBhcmVudCBhbm9uX3ZtYSwgb3RoZXJ3aXNlIGZpcnN0IGNoaWxkCisJCSAqIHdpbGwgYWx3YXlzIHJldXNlIGl0LiBSb290IGFub25fdm1hIGlzIG5ldmVyIHJldXNlZDoKKwkJICogaXQgaGFzIHNlbGYtcGFyZW50IHJlZmVyZW5jZSBhbmQgYXQgbGVhc3Qgb25lIGNoaWxkLgorCQkgKi8KKwkJaWYgKCFkc3QtPmFub25fdm1hICYmIGFub25fdm1hICE9IHNyYy0+YW5vbl92bWEgJiYKKwkJCQlhbm9uX3ZtYS0+ZGVncmVlIDwgMikKKwkJCWRzdC0+YW5vbl92bWEgPSBhbm9uX3ZtYTsKIAl9CisJaWYgKGRzdC0+YW5vbl92bWEpCisJCWRzdC0+YW5vbl92bWEtPmRlZ3JlZSsrOwogCXVubG9ja19hbm9uX3ZtYV9yb290KHJvb3QpOwogCXJldHVybiAwOwogCkBAIC0yODAsNiArMzA2LDkgQEAKIAlpZiAoIXB2bWEtPmFub25fdm1hKQogCQlyZXR1cm4gMDsKIAorCS8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSdsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovCisJdm1hLT5hbm9uX3ZtYSA9IE5VTEw7CisKIAkvKgogCSAqIEZpcnN0LCBhdHRhY2ggdGhlIG5ldyBWTUEgdG8gdGhlIHBhcmVudCBWTUEncyBhbm9uX3ZtYXMsCiAJICogc28gcm1hcCBjYW4gZmluZCBub24tQ09XZWQgcGFnZXMgaW4gY2hpbGQgcHJvY2Vzc2VzLgpAQCAtMjg4LDYgKzMxNywxMCBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCisJLyogQW4gZXhpc3RpbmcgYW5vbl92bWEgaGFzIGJlZW4gcmV1c2VkLCBhbGwgZG9uZSB0aGVuLiAqLworCWlmICh2bWEtPmFub25fdm1hKQorCQlyZXR1cm4gMDsKKwogCS8qIFRoZW4gYWRkIG91ciBvd24gYW5vbl92bWEuICovCiAJYW5vbl92bWEgPSBhbm9uX3ZtYV9hbGxvYygpOwogCWlmICghYW5vbl92bWEpCkBAIC0zMDEsNiArMzM0LDcgQEAKIAkgKiBsb2NrIGFueSBvZiB0aGUgYW5vbl92bWFzIGluIHRoaXMgYW5vbl92bWEgdHJlZS4KIAkgKi8KIAlhbm9uX3ZtYS0+cm9vdCA9IHB2bWEtPmFub25fdm1hLT5yb290OworCWFub25fdm1hLT5wYXJlbnQgPSBwdm1hLT5hbm9uX3ZtYTsKIAkvKgogCSAqIFdpdGggcmVmY291bnRzLCBhbiBhbm9uX3ZtYSBjYW4gc3RheSBhcm91bmQgbG9uZ2VyIHRoYW4gdGhlCiAJICogcHJvY2VzcyBpdCBiZWxvbmdzIHRvLiBUaGUgcm9vdCBhbm9uX3ZtYSBuZWVkcyB0byBiZSBwaW5uZWQgdW50aWwKQEAgLTMxMSw2ICszNDUsNyBAQAogCXZtYS0+YW5vbl92bWEgPSBhbm9uX3ZtYTsKIAlhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTsKIAlhbm9uX3ZtYV9jaGFpbl9saW5rKHZtYSwgYXZjLCBhbm9uX3ZtYSk7CisJYW5vbl92bWEtPnBhcmVudC0+ZGVncmVlKys7CiAJYW5vbl92bWFfdW5sb2NrX3dyaXRlKGFub25fdm1hKTsKIAogCXJldHVybiAwOwpAQCAtMzQxLDEyICszNzYsMTYgQEAKIAkJICogTGVhdmUgZW1wdHkgYW5vbl92bWFzIG9uIHRoZSBsaXN0IC0gd2UnbGwgbmVlZAogCQkgKiB0byBmcmVlIHRoZW0gb3V0c2lkZSB0aGUgbG9jay4KIAkJICovCi0JCWlmIChSQl9FTVBUWV9ST09UKCZhbm9uX3ZtYS0+cmJfcm9vdCkpCisJCWlmIChSQl9FTVBUWV9ST09UKCZhbm9uX3ZtYS0+cmJfcm9vdCkpIHsKKwkJCWFub25fdm1hLT5wYXJlbnQtPmRlZ3JlZS0tOwogCQkJY29udGludWU7CisJCX0KIAogCQlsaXN0X2RlbCgmYXZjLT5zYW1lX3ZtYSk7CiAJCWFub25fdm1hX2NoYWluX2ZyZWUoYXZjKTsKIAl9CisJaWYgKHZtYS0+YW5vbl92bWEpCisJCXZtYS0+YW5vbl92bWEtPmRlZ3JlZS0tOwogCXVubG9ja19hbm9uX3ZtYV9yb290KHJvb3QpOwogCiAJLyoKQEAgLTM1Nyw2ICszOTYsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhdmMsIG5leHQsICZ2bWEtPmFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewogCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLT5hbm9uX3ZtYTsKIAorCQlCVUdfT04oYW5vbl92bWEtPmRlZ3JlZSk7CiAJCXB1dF9hbm9uX3ZtYShhbm9uX3ZtYSk7CiAKIAkJbGlzdF9kZWwoJmF2Yy0+c2FtZV92bWEpOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiZDlhNzJiLi5kY2Q5MGM4IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtMjY1Niw3ICsyNjU2LDcgQEAKIAkgKiBzaG91bGQgbWFrZSByZWFzb25hYmxlIHByb2dyZXNzLgogCSAqLwogCWZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsCi0JCQkJCWdmcF9tYXNrLCBub2RlbWFzaykgeworCQkJCQlnZnBfem9uZShnZnBfbWFzayksIG5vZGVtYXNrKSB7CiAJCWlmICh6b25lX2lkeCh6b25lKSA+IFpPTkVfTk9STUFMKQogCQkJY29udGludWU7CiAKQEAgLTI5MjEsMTggKzI5MjEsMjAgQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKLQkgKiBUaGVyZSBpcyBhIHBvdGVudGlhbCByYWNlIGJldHdlZW4gd2hlbiBrc3dhcGQgY2hlY2tzIGl0cyB3YXRlcm1hcmtzCi0JICogYW5kIGEgcHJvY2VzcyBnZXRzIHRocm90dGxlZC4gVGhlcmUgaXMgYWxzbyBhIHBvdGVudGlhbCByYWNlIGlmCi0JICogcHJvY2Vzc2VzIGdldCB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJieQotCSAqIGJhbGFuY2luZyB0aGUgem9uZXMgdGhhdCBjYXVzZXMga3N3YXBkIHRvIG1pc3MgYSB3YWtldXAuIElmIGtzd2FwZAotCSAqIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZCBiZSBzbGVlcGluZyBvbiBwZm1lbWFsbG9jX3dhaXQKLQkgKiBzbyB3YWtlIHRoZW0gbm93IGlmIG5lY2Vzc2FyeS4gSWYgbmVjZXNzYXJ5LCBwcm9jZXNzZXMgd2lsbCB3YWtlCi0JICoga3N3YXBkIGFuZCBnZXQgdGhyb3R0bGVkIGFnYWluCisJICogVGhlIHRocm90dGxlZCBwcm9jZXNzZXMgYXJlIG5vcm1hbGx5IHdva2VuIHVwIGluIGJhbGFuY2VfcGdkYXQoKSBhcworCSAqIHNvb24gYXMgcGZtZW1hbGxvY193YXRlcm1hcmtfb2soKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWwKKwkgKiByYWNlIGJldHdlZW4gd2hlbiBrc3dhcGQgY2hlY2tzIHRoZSB3YXRlcm1hcmtzIGFuZCBhIHByb2Nlc3MgZ2V0cworCSAqIHRocm90dGxlZC4gVGhlcmUgaXMgYWxzbyBhIHBvdGVudGlhbCByYWNlIGlmIHByb2Nlc3NlcyBnZXQKKwkgKiB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJlYnkgYmFsYW5jaW5nIHRoZQorCSAqIHpvbmVzLCB3aGljaCBjYXVzZXMga3N3YXBkIHRvIGV4aXQgYmFsYW5jZV9wZ2RhdCgpIGJlZm9yZSByZWFjaGluZworCSAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZAorCSAqIGJlIHNsZWVwaW5nIG9uIHBmbWVtYWxsb2Nfd2FpdCwgc28gd2FrZSB0aGVtIG5vdyBpZiBuZWNlc3NhcnkuIElmCisJICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0CisJICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpcworCSAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuCiAJICovCi0JaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnBnZGF0LT5wZm1lbWFsbG9jX3dhaXQpKSB7Ci0JCXdha2VfdXAoJnBnZGF0LT5wZm1lbWFsbG9jX3dhaXQpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQorCWlmICh3YWl0cXVldWVfYWN0aXZlKCZwZ2RhdC0+cGZtZW1hbGxvY193YWl0KSkKKwkJd2FrZV91cF9hbGwoJnBnZGF0LT5wZm1lbWFsbG9jX3dhaXQpOwogCiAJcmV0dXJuIHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgY2xhc3N6b25lX2lkeCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmMgYi9uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmMKaW5kZXggZmMxODM1Yy4uMDBmOWUxNCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uYwpAQCAtMjUxLDcgKzI1MSw3IEBACiAJa2ZyZWUoZW50cnkpOwogCiAJLyogTWFrZSByb29tIGZvciB0aGUgcmVzdCBvZiB0aGUgZnJhZ21lbnRzLiAqLwotCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYl9vdXQsIDAsIHNpemUgLSBza2ItPmxlbiwgR0ZQX0FUT01JQykgPCAwKSB7CisJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiX291dCwgMCwgc2l6ZSAtIHNrYl9vdXQtPmxlbiwgR0ZQX0FUT01JQykgPCAwKSB7CiAJCWtmcmVlX3NrYihza2Jfb3V0KTsKIAkJc2tiX291dCA9IE5VTEw7CiAJCWdvdG8gZnJlZTsKQEAgLTQzNCw3ICs0MzQsNyBAQAogCSAqIGZyYWdtZW50cyBsYXJnZXIgdGhhbiBCQVRBRFZfRlJBR19NQVhfRlJBR19TSVpFCiAJICovCiAJbXR1ID0gbWluX3QodW5zaWduZWQsIG10dSwgQkFUQURWX0ZSQUdfTUFYX0ZSQUdfU0laRSk7Ci0JbWF4X2ZyYWdtZW50X3NpemUgPSAobXR1IC0gaGVhZGVyX3NpemUgLSBFVEhfSExFTik7CisJbWF4X2ZyYWdtZW50X3NpemUgPSBtdHUgLSBoZWFkZXJfc2l6ZTsKIAltYXhfcGFja2V0X3NpemUgPSBtYXhfZnJhZ21lbnRfc2l6ZSAqIEJBVEFEVl9GUkFHX01BWF9GUkFHTUVOVFM7CiAKIAkvKiBEb24ndCBldmVuIHRyeSB0byBmcmFnbWVudCwgaWYgd2UgbmVlZCBtb3JlIHRoYW4gMTYgZnJhZ21lbnRzICovCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jIGIvbmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuYwppbmRleCA5MGNmZjU4Li5lMGJjZjllIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmMKQEAgLTgxMCw3ICs4MTAsNyBAQAogCQlnb3RvIG91dDsKIAogCWd3X25vZGUgPSBiYXRhZHZfZ3dfbm9kZV9nZXQoYmF0X3ByaXYsIG9yaWdfZHN0X25vZGUpOwotCWlmICghZ3dfbm9kZS0+YmFuZHdpZHRoX2Rvd24gPT0gMCkKKwlpZiAoIWd3X25vZGUpCiAJCWdvdG8gb3V0OwogCiAJc3dpdGNoIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmd3X21vZGUpKSB7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYyBiL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jCmluZGV4IGFiNmJiMmEuLmIyNGU0YmIgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jCisrKyBiL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jCkBAIC02ODUsMTEgKzY4NSwxMyBAQAogCQlpZiAob3JpZ19pbml0aWFsaXplZCkKIAkJCWF0b21pY19kZWMoJmJhdF9wcml2LT5tY2FzdC5udW1fZGlzYWJsZWQpOwogCQlvcmlnLT5jYXBhYmlsaXRpZXMgfD0gQkFUQURWX09SSUdfQ0FQQV9IQVNfTUNBU1Q7Ci0JLyogSWYgbWNhc3Qgc3VwcG9ydCBpcyBiZWluZyBzd2l0Y2hlZCBvZmYgaW5jcmVhc2UgdGhlIGRpc2FibGVkCi0JICogbWNhc3Qgbm9kZSBjb3VudGVyLgorCS8qIElmIG1jYXN0IHN1cHBvcnQgaXMgYmVpbmcgc3dpdGNoZWQgb2ZmIG9yIGlmIHRoaXMgaXMgYW4gaW5pdGlhbAorCSAqIE9HTSB3aXRob3V0IG1jYXN0IHN1cHBvcnQgdGhlbiBpbmNyZWFzZSB0aGUgZGlzYWJsZWQgbWNhc3QKKwkgKiBub2RlIGNvdW50ZXIuCiAJICovCiAJfSBlbHNlIGlmICghb3JpZ19tY2FzdF9lbmFibGVkICYmCi0JCSAgIG9yaWctPmNhcGFiaWxpdGllcyAmIEJBVEFEVl9PUklHX0NBUEFfSEFTX01DQVNUKSB7CisJCSAgIChvcmlnLT5jYXBhYmlsaXRpZXMgJiBCQVRBRFZfT1JJR19DQVBBX0hBU19NQ0FTVCB8fAorCQkgICAgIW9yaWdfaW5pdGlhbGl6ZWQpKSB7CiAJCWF0b21pY19pbmMoJmJhdF9wcml2LT5tY2FzdC5udW1fZGlzYWJsZWQpOwogCQlvcmlnLT5jYXBhYmlsaXRpZXMgJj0gfkJBVEFEVl9PUklHX0NBUEFfSEFTX01DQVNUOwogCX0KQEAgLTczOCw3ICs3NDAsOCBAQAogewogCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBvcmlnLT5iYXRfcHJpdjsKIAotCWlmICghKG9yaWctPmNhcGFiaWxpdGllcyAmIEJBVEFEVl9PUklHX0NBUEFfSEFTX01DQVNUKSkKKwlpZiAoIShvcmlnLT5jYXBhYmlsaXRpZXMgJiBCQVRBRFZfT1JJR19DQVBBX0hBU19NQ0FTVCkgJiYKKwkgICAgb3JpZy0+Y2FwYV9pbml0aWFsaXplZCAmIEJBVEFEVl9PUklHX0NBUEFfSEFTX01DQVNUKQogCQlhdG9taWNfZGVjKCZiYXRfcHJpdi0+bWNhc3QubnVtX2Rpc2FibGVkKTsKIAogCWJhdGFkdl9tY2FzdF93YW50X3Vuc25vb3BfdXBkYXRlKGJhdF9wcml2LCBvcmlnLCBCQVRBRFZfTk9fRkxBR1MpOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbmV0d29yay1jb2RpbmcuYyBiL25ldC9iYXRtYW4tYWR2L25ldHdvcmstY29kaW5nLmMKaW5kZXggOGQwNGQxNy4uZmFiNDdmMSAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbmV0d29yay1jb2RpbmcuYworKysgYi9uZXQvYmF0bWFuLWFkdi9uZXR3b3JrLWNvZGluZy5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlpZiAoIWJhdF9wcml2LT5uYy5kZWNvZGluZ19oYXNoKQogCQlnb3RvIGVycjsKIAotCWJhdGFkdl9oYXNoX3NldF9sb2NrX2NsYXNzKGJhdF9wcml2LT5uYy5jb2RpbmdfaGFzaCwKKwliYXRhZHZfaGFzaF9zZXRfbG9ja19jbGFzcyhiYXRfcHJpdi0+bmMuZGVjb2RpbmdfaGFzaCwKIAkJCQkgICAmYmF0YWR2X25jX2RlY29kaW5nX2hhc2hfbG9ja19jbGFzc19rZXkpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmJhdF9wcml2LT5uYy53b3JrLCBiYXRhZHZfbmNfd29ya2VyKTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYwppbmRleCA2YTQ4NDUxLi5iZWE4MTk4IDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jCkBAIC01NzAsOSArNTcwLDYgQEAKIAogCWJhdGFkdl9mcmFnX3B1cmdlX29yaWcob3JpZ19ub2RlLCBOVUxMKTsKIAotCWJhdGFkdl90dF9nbG9iYWxfZGVsX29yaWcob3JpZ19ub2RlLT5iYXRfcHJpdiwgb3JpZ19ub2RlLCAtMSwKLQkJCQkgICJvcmlnaW5hdG9yIHRpbWVkIG91dCIpOwotCiAJaWYgKG9yaWdfbm9kZS0+YmF0X3ByaXYtPmJhdF9hbGdvX29wcy0+YmF0X29yaWdfZnJlZSkKIAkJb3JpZ19ub2RlLT5iYXRfcHJpdi0+YmF0X2FsZ29fb3BzLT5iYXRfb3JpZ19mcmVlKG9yaWdfbm9kZSk7CiAKQEAgLTY3OCw2ICs2NzUsNyBAQAogCWF0b21pY19zZXQoJm9yaWdfbm9kZS0+bGFzdF90dHZuLCAwKTsKIAlvcmlnX25vZGUtPnR0X2J1ZmYgPSBOVUxMOwogCW9yaWdfbm9kZS0+dHRfYnVmZl9sZW4gPSAwOworCW9yaWdfbm9kZS0+bGFzdF9zZWVuID0gamlmZmllczsKIAlyZXNldF90aW1lID0gamlmZmllcyAtIDEgLSBtc2Vjc190b19qaWZmaWVzKEJBVEFEVl9SRVNFVF9QUk9URUNUSU9OX01TKTsKIAlvcmlnX25vZGUtPmJjYXN0X3NlcW5vX3Jlc2V0ID0gcmVzZXRfdGltZTsKICNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVApAQCAtOTc3LDYgKzk3NSw5IEBACiAJCQlpZiAoYmF0YWR2X3B1cmdlX29yaWdfbm9kZShiYXRfcHJpdiwgb3JpZ19ub2RlKSkgewogCQkJCWJhdGFkdl9nd19ub2RlX2RlbGV0ZShiYXRfcHJpdiwgb3JpZ19ub2RlKTsKIAkJCQlobGlzdF9kZWxfcmN1KCZvcmlnX25vZGUtPmhhc2hfZW50cnkpOworCQkJCWJhdGFkdl90dF9nbG9iYWxfZGVsX29yaWcob3JpZ19ub2RlLT5iYXRfcHJpdiwKKwkJCQkJCQkgIG9yaWdfbm9kZSwgLTEsCisJCQkJCQkJICAib3JpZ2luYXRvciB0aW1lZCBvdXQiKTsKIAkJCQliYXRhZHZfb3JpZ19ub2RlX2ZyZWVfcmVmKG9yaWdfbm9kZSk7CiAJCQkJY29udGludWU7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMgYi9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMKaW5kZXggMzVmNzZmMi4uNjY0OGYzMiAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5jCisrKyBiL25ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYwpAQCAtNDQzLDExICs0NDMsMTMgQEAKIAogCXJvdXRlciA9IGJhdGFkdl9vcmlnX3JvdXRlcl9nZXQob3JpZ19ub2RlLCByZWN2X2lmKTsKIAorCWlmICghcm91dGVyKQorCQlyZXR1cm4gcm91dGVyOworCiAJLyogb25seSBjb25zaWRlciBib25kaW5nIGZvciByZWN2X2lmID09IEJBVEFEVl9JRl9ERUZBVUxUIChmaXJzdCBob3ApCiAJICogYW5kIGlmIGFjdGl2YXRlZC4KIAkgKi8KLQlpZiAocmVjdl9pZiA9PSBCQVRBRFZfSUZfREVGQVVMVCB8fCAhYXRvbWljX3JlYWQoJmJhdF9wcml2LT5ib25kaW5nKSB8fAotCSAgICAhcm91dGVyKQorCWlmICghKHJlY3ZfaWYgPT0gQkFUQURWX0lGX0RFRkFVTFQgJiYgYXRvbWljX3JlYWQoJmJhdF9wcml2LT5ib25kaW5nKSkpCiAJCXJldHVybiByb3V0ZXI7CiAKIAkvKiBib25kaW5nOiBsb29wIHRocm91Z2ggdGhlIGxpc3Qgb2YgcG9zc2libGUgcm91dGVycyBmb3VuZApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC82bG93cGFuLmMgYi9uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYwppbmRleCA3NjYxN2JlLi5jOTg5MjUzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYworKysgYi9uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYwpAQCAtMzkwLDcgKzM5MCw2IEBACiAKIGRyb3A6CiAJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0Ja2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYwppbmRleCA4NWJjYzIxLi5jZTgyNzIyZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCkBAIC01MzMsNiArNTMzLDkgQEAKIAogCUJUX0RCRygiIik7CiAKKwlpZiAoIWwyY2FwX2lzX3NvY2tldChzb2NrKSkKKwkJcmV0dXJuIC1FQkFERkQ7CisKIAliYXN3YXAoKHZvaWQgKikgZHN0LCAmbDJjYXBfcGkoc29jay0+c2spLT5jaGFuLT5kc3QpOwogCWJhc3dhcCgodm9pZCAqKSBzcmMsICZsMmNhcF9waShzb2NrLT5zayktPmNoYW4tPnNyYyk7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCmluZGV4IDY3ZmU1ZTguLjI3OGExOTQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwpAQCAtMzM0LDYgKzMzNCw5IEBACiAKIAlCVF9EQkcoIiIpOwogCisJaWYgKCFsMmNhcF9pc19zb2NrZXQoc29jaykpCisJCXJldHVybiAtRUJBREZEOworCiAJc2Vzc2lvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbXRwX3Nlc3Npb24pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNlc3Npb24pCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggMzlhNWM4YS4uM2YyZThiOCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC0yNDIsNyArMjQyLDggQEAKIAlpZiAocnAtPnN0YXR1cykKIAkJcmV0dXJuOwogCi0JaWYgKHRlc3RfYml0KEhDSV9TRVRVUCwgJmhkZXYtPmRldl9mbGFncykpCisJaWYgKHRlc3RfYml0KEhDSV9TRVRVUCwgJmhkZXYtPmRldl9mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoSENJX0NPTkZJRywgJmhkZXYtPmRldl9mbGFncykpCiAJCW1lbWNweShoZGV2LT5kZXZfbmFtZSwgcnAtPm5hbWUsIEhDSV9NQVhfTkFNRV9MRU5HVEgpOwogfQogCkBAIC01MDksNyArNTEwLDggQEAKIAlpZiAocnAtPnN0YXR1cykKIAkJcmV0dXJuOwogCi0JaWYgKHRlc3RfYml0KEhDSV9TRVRVUCwgJmhkZXYtPmRldl9mbGFncykpIHsKKwlpZiAodGVzdF9iaXQoSENJX1NFVFVQLCAmaGRldi0+ZGV2X2ZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChIQ0lfQ09ORklHLCAmaGRldi0+ZGV2X2ZsYWdzKSkgewogCQloZGV2LT5oY2lfdmVyID0gcnAtPmhjaV92ZXI7CiAJCWhkZXYtPmhjaV9yZXYgPSBfX2xlMTZfdG9fY3B1KHJwLT5oY2lfcmV2KTsKIAkJaGRldi0+bG1wX3ZlciA9IHJwLT5sbXBfdmVyOwpAQCAtNTI4LDcgKzUzMCw4IEBACiAJaWYgKHJwLT5zdGF0dXMpCiAJCXJldHVybjsKIAotCWlmICh0ZXN0X2JpdChIQ0lfU0VUVVAsICZoZGV2LT5kZXZfZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChIQ0lfU0VUVVAsICZoZGV2LT5kZXZfZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KEhDSV9DT05GSUcsICZoZGV2LT5kZXZfZmxhZ3MpKQogCQltZW1jcHkoaGRldi0+Y29tbWFuZHMsIHJwLT5jb21tYW5kcywgc2l6ZW9mKGhkZXYtPmNvbW1hbmRzKSk7CiB9CiAKQEAgLTIxOTQsNyArMjE5NywxMiBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKCF0ZXN0X2JpdChIQ0lfQ09OTkVDVEFCTEUsICZoZGV2LT5kZXZfZmxhZ3MpICYmCisJLyogUmVxdWlyZSBIQ0lfQ09OTkVDVEFCTEUgb3IgYSB3aGl0ZWxpc3QgZW50cnkgdG8gYWNjZXB0IHRoZQorCSAqIGNvbm5lY3Rpb24uIFRoZXNlIGZlYXR1cmVzIGFyZSBvbmx5IHRvdWNoZWQgdGhyb3VnaCBtZ210IHNvCisJICogb25seSBkbyB0aGUgY2hlY2tzIGlmIEhDSV9NR01UIGlzIHNldC4KKwkgKi8KKwlpZiAodGVzdF9iaXQoSENJX01HTVQsICZoZGV2LT5kZXZfZmxhZ3MpICYmCisJICAgICF0ZXN0X2JpdChIQ0lfQ09OTkVDVEFCTEUsICZoZGV2LT5kZXZfZmxhZ3MpICYmCiAJICAgICFoY2lfYmRhZGRyX2xpc3RfbG9va3VwKCZoZGV2LT53aGl0ZWxpc3QsICZldi0+YmRhZGRyLAogCQkJCSAgICBCREFERFJfQlJFRFIpKSB7CiAJCSAgICBoY2lfcmVqZWN0X2Nvbm4oaGRldiwgJmV2LT5iZGFkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggY2MyNWQwYi4uMDczNDhlMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC0xMzE0LDEzICsxMzE0LDE0IEBACiB7CiAJc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbjsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubjsKLQlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKGN0cmxfc29jay0+c2spLT5jaGFuOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCWludCByZXQ7CiAKIAlyZXQgPSBoaWRwX3ZlcmlmeV9zb2NrZXRzKGN0cmxfc29jaywgaW50cl9zb2NrKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJY2hhbiA9IGwyY2FwX3BpKGN0cmxfc29jay0+c2spLT5jaGFuOwogCWNvbm4gPSBOVUxMOwogCWwyY2FwX2NoYW5fbG9jayhjaGFuKTsKIAlpZiAoY2hhbi0+Y29ubikKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwppbmRleCAxZjFkZTcxLi5lMmFhN2JlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCkBAIC0xNTQsNyArMTU0LDggQEAKIAlkc3QgPSBOVUxMOwogCiAJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGRlc3QpKSB7Ci0JCWlmIChwLT5mbGFncyAmIEJSX1BST1hZQVJQICYmCisJCWlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSAmJgorCQkgICAgcC0+ZmxhZ3MgJiBCUl9QUk9YWUFSUCAmJgogCQkgICAgc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApKQogCQkJYnJfZG9fcHJveHlfYXJwKHNrYiwgYnIsIHZpZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9jZXBoL2F1dGhfeC5jIGIvbmV0L2NlcGgvYXV0aF94LmMKaW5kZXggMTU4NDU4MS4uYmE2ZWIxNyAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvYXV0aF94LmMKKysrIGIvbmV0L2NlcGgvYXV0aF94LmMKQEAgLTY3Niw3ICs2NzYsNyBAQAogCWludCByZXQ7CiAJY2hhciB0bXBfZW5jWzQwXTsKIAlfX2xlMzIgdG1wWzVdID0gewotCQkxNnUsIG1zZy0+aGRyLmNyYywgbXNnLT5mb290ZXIuZnJvbnRfY3JjLAorCQljcHVfdG9fbGUzMigxNiksIG1zZy0+aGRyLmNyYywgbXNnLT5mb290ZXIuZnJvbnRfY3JjLAogCQltc2ctPmZvb3Rlci5taWRkbGVfY3JjLCBtc2ctPmZvb3Rlci5kYXRhX2NyYywKIAl9OwogCXJldCA9IGNlcGhfeF9lbmNyeXB0KCZhdS0+c2Vzc2lvbl9rZXksICZ0bXAsIHNpemVvZih0bXApLApkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbW9uX2NsaWVudC5jIGIvbmV0L2NlcGgvbW9uX2NsaWVudC5jCmluZGV4IGE4MzA2MmMuLmYyMTQ4ZTIgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21vbl9jbGllbnQuYworKysgYi9uZXQvY2VwaC9tb25fY2xpZW50LmMKQEAgLTcxNyw3ICs3MTcsNyBAQAogCWlmIChzcmNfbGVuICE9IHNpemVvZih1MzIpICsgZHN0X2xlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlidWZfbGVuID0gbGUzMl90b19jcHUoKih1MzIgKilzcmMpOworCWJ1Zl9sZW4gPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXNyYyk7CiAJaWYgKGJ1Zl9sZW4gIT0gZHN0X2xlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggZjQxMWMyOC4uMTcxNDIwZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTE2OTQsNiArMTY5NCw3IEBACiAKIAlza2Jfc2NydWJfcGFja2V0KHNrYiwgdHJ1ZSk7CiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwlza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBldGhfaGRyKHNrYiksIEVUSF9ITEVOKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUyMiw3ICsyNTIzLDcgQEAKIC8qIElmIE1QTFMgb2ZmbG9hZCByZXF1ZXN0LCB2ZXJpZnkgd2UgYXJlIHRlc3RpbmcgaGFyZHdhcmUgTVBMUyBmZWF0dXJlcwogICogaW5zdGVhZCBvZiBzdGFuZGFyZCBmZWF0dXJlcyBmb3IgdGhlIG5ldGRldi4KICAqLwotI2lmZGVmIENPTkZJR19ORVRfTVBMU19HU08KKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfTVBMU19HU08pCiBzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgbmV0X21wbHNfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsCiAJCQkJCSAgIF9fYmUxNiB0eXBlKQpAQCAtMjU2Miw3ICsyNTYzLDcgQEAKIAogbmV0ZGV2X2ZlYXR1cmVzX3QgbmV0aWZfc2tiX2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKIAluZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyA9IGRldi0+ZmVhdHVyZXM7CiAJdTE2IGdzb19zZWdzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2VnczsKIAlfX2JlMTYgcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOwpAQCAtMjU3MCwxMSArMjU3MSwyMSBAQAogCWlmIChnc29fc2VncyA+IGRldi0+Z3NvX21heF9zZWdzIHx8IGdzb19zZWdzIDwgZGV2LT5nc29fbWluX3NlZ3MpCiAJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0dTT19NQVNLOwogCi0JaWYgKHByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSB8fCBwcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxQUQpKSB7Ci0JCXN0cnVjdCB2bGFuX2V0aGhkciAqdmVoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYi0+ZGF0YTsKLQkJcHJvdG9jb2wgPSB2ZWgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87Ci0JfSBlbHNlIGlmICghdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCXJldHVybiBoYXJtb25pemVfZmVhdHVyZXMoc2tiLCBmZWF0dXJlcyk7CisJLyogSWYgZW5jYXBzdWxhdGlvbiBvZmZsb2FkIHJlcXVlc3QsIHZlcmlmeSB3ZSBhcmUgdGVzdGluZworCSAqIGhhcmR3YXJlIGVuY2Fwc3VsYXRpb24gZmVhdHVyZXMgaW5zdGVhZCBvZiBzdGFuZGFyZAorCSAqIGZlYXR1cmVzIGZvciB0aGUgbmV0ZGV2CisJICovCisJaWYgKHNrYi0+ZW5jYXBzdWxhdGlvbikKKwkJZmVhdHVyZXMgJj0gZGV2LT5od19lbmNfZmVhdHVyZXM7CisKKwlpZiAoIXZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCQlpZiAodW5saWtlbHkocHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyMVEpIHx8CisJCQkgICAgIHByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFBRCkpKSB7CisJCQlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZlaCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2ItPmRhdGE7CisJCQlwcm90b2NvbCA9IHZlaC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKKwkJfSBlbHNlIHsKKwkJCWdvdG8gZmluYWxpemU7CisJCX0KIAl9CiAKIAlmZWF0dXJlcyA9IG5ldGRldl9pbnRlcnNlY3RfZmVhdHVyZXMoZmVhdHVyZXMsCkBAIC0yNTkxLDYgKzI2MDIsMTEgQEAKIAkJCQkJCSAgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfAogCQkJCQkJICAgICBORVRJRl9GX0hXX1ZMQU5fU1RBR19UWCk7CiAKK2ZpbmFsaXplOgorCWlmIChkZXYtPm5ldGRldl9vcHMtPm5kb19mZWF0dXJlc19jaGVjaykKKwkJZmVhdHVyZXMgJj0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fZmVhdHVyZXNfY2hlY2soc2tiLCBkZXYsCisJCQkJCQkJCWZlYXR1cmVzKTsKKwogCXJldHVybiBoYXJtb25pemVfZmVhdHVyZXMoc2tiLCBmZWF0dXJlcyk7CiB9CiBFWFBPUlRfU1lNQk9MKG5ldGlmX3NrYl9mZWF0dXJlcyk7CkBAIC0yNjYxLDE5ICsyNjc3LDEyIEBACiAJaWYgKHVubGlrZWx5KCFza2IpKQogCQlnb3RvIG91dF9udWxsOwogCi0JLyogSWYgZW5jYXBzdWxhdGlvbiBvZmZsb2FkIHJlcXVlc3QsIHZlcmlmeSB3ZSBhcmUgdGVzdGluZwotCSAqIGhhcmR3YXJlIGVuY2Fwc3VsYXRpb24gZmVhdHVyZXMgaW5zdGVhZCBvZiBzdGFuZGFyZAotCSAqIGZlYXR1cmVzIGZvciB0aGUgbmV0ZGV2Ci0JICovCi0JaWYgKHNrYi0+ZW5jYXBzdWxhdGlvbikKLQkJZmVhdHVyZXMgJj0gZGV2LT5od19lbmNfZmVhdHVyZXM7Ci0KIAlpZiAobmV0aWZfbmVlZHNfZ3NvKGRldiwgc2tiLCBmZWF0dXJlcykpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNlZ3M7CiAKIAkJc2VncyA9IHNrYl9nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTsKIAkJaWYgKElTX0VSUihzZWdzKSkgewotCQkJc2VncyA9IE5VTEw7CisJCQlnb3RvIG91dF9rZnJlZV9za2I7CiAJCX0gZWxzZSBpZiAoc2VncykgewogCQkJY29uc3VtZV9za2Ioc2tiKTsKIAkJCXNrYiA9IHNlZ3M7CkBAIC00NTU3LDYgKzQ1NjYsNjggQEAKIH0KIEVYUE9SVF9TWU1CT0wobmV0aWZfbmFwaV9kZWwpOwogCitzdGF0aWMgaW50IG5hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4sIHN0cnVjdCBsaXN0X2hlYWQgKnJlcG9sbCkKK3sKKwl2b2lkICpoYXZlOworCWludCB3b3JrLCB3ZWlnaHQ7CisKKwlsaXN0X2RlbF9pbml0KCZuLT5wb2xsX2xpc3QpOworCisJaGF2ZSA9IG5ldHBvbGxfcG9sbF9sb2NrKG4pOworCisJd2VpZ2h0ID0gbi0+d2VpZ2h0OworCisJLyogVGhpcyBOQVBJX1NUQVRFX1NDSEVEIHRlc3QgaXMgZm9yIGF2b2lkaW5nIGEgcmFjZQorCSAqIHdpdGggbmV0cG9sbCdzIHBvbGxfbmFwaSgpLiAgT25seSB0aGUgZW50aXR5IHdoaWNoCisJICogb2J0YWlucyB0aGUgbG9jayBhbmQgc2VlcyBOQVBJX1NUQVRFX1NDSEVEIHNldCB3aWxsCisJICogYWN0dWFsbHkgbWFrZSB0aGUgLT5wb2xsKCkgY2FsbC4gIFRoZXJlZm9yZSB3ZSBhdm9pZAorCSAqIGFjY2lkZW50YWxseSBjYWxsaW5nIC0+cG9sbCgpIHdoZW4gTkFQSSBpcyBub3Qgc2NoZWR1bGVkLgorCSAqLworCXdvcmsgPSAwOworCWlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1NDSEVELCAmbi0+c3RhdGUpKSB7CisJCXdvcmsgPSBuLT5wb2xsKG4sIHdlaWdodCk7CisJCXRyYWNlX25hcGlfcG9sbChuKTsKKwl9CisKKwlXQVJOX09OX09OQ0Uod29yayA+IHdlaWdodCk7CisKKwlpZiAobGlrZWx5KHdvcmsgPCB3ZWlnaHQpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwkvKiBEcml2ZXJzIG11c3Qgbm90IG1vZGlmeSB0aGUgTkFQSSBzdGF0ZSBpZiB0aGV5CisJICogY29uc3VtZSB0aGUgZW50aXJlIHdlaWdodC4gIEluIHN1Y2ggY2FzZXMgdGhpcyBjb2RlCisJICogc3RpbGwgIm93bnMiIHRoZSBOQVBJIGluc3RhbmNlIGFuZCB0aGVyZWZvcmUgY2FuCisJICogbW92ZSB0aGUgaW5zdGFuY2UgYXJvdW5kIG9uIHRoZSBsaXN0IGF0LXdpbGwuCisJICovCisJaWYgKHVubGlrZWx5KG5hcGlfZGlzYWJsZV9wZW5kaW5nKG4pKSkgeworCQluYXBpX2NvbXBsZXRlKG4pOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJaWYgKG4tPmdyb19saXN0KSB7CisJCS8qIGZsdXNoIHRvbyBvbGQgcGFja2V0cworCQkgKiBJZiBIWiA8IDEwMDAsIGZsdXNoIGFsbCBwYWNrZXRzLgorCQkgKi8KKwkJbmFwaV9ncm9fZmx1c2gobiwgSFogPj0gMTAwMCk7CisJfQorCisJLyogU29tZSBkcml2ZXJzIG1heSBoYXZlIGNhbGxlZCBuYXBpX3NjaGVkdWxlCisJICogcHJpb3IgdG8gZXhoYXVzdGluZyB0aGVpciBidWRnZXQuCisJICovCisJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZuLT5wb2xsX2xpc3QpKSkgeworCQlwcl93YXJuX29uY2UoIiVzOiBCdWRnZXQgZXhoYXVzdGVkIGFmdGVyIG5hcGkgcmVzY2hlZHVsZWRcbiIsCisJCQkgICAgIG4tPmRldiA/IG4tPmRldi0+bmFtZSA6ICJiYWNrbG9nIik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZuLT5wb2xsX2xpc3QsIHJlcG9sbCk7CisKK291dF91bmxvY2s6CisJbmV0cG9sbF9wb2xsX3VubG9jayhoYXZlKTsKKworCXJldHVybiB3b3JrOworfQorCiBzdGF0aWMgdm9pZCBuZXRfcnhfYWN0aW9uKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCkKIHsKIAlzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCA9IHRoaXNfY3B1X3B0cigmc29mdG5ldF9kYXRhKTsKQEAgLTQ1NjQsNzQgKzQ2MzUsMzQgQEAKIAlpbnQgYnVkZ2V0ID0gbmV0ZGV2X2J1ZGdldDsKIAlMSVNUX0hFQUQobGlzdCk7CiAJTElTVF9IRUFEKHJlcG9sbCk7Ci0Jdm9pZCAqaGF2ZTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJbGlzdF9zcGxpY2VfaW5pdCgmc2QtPnBvbGxfbGlzdCwgJmxpc3QpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKKwlmb3IgKDs7KSB7CiAJCXN0cnVjdCBuYXBpX3N0cnVjdCAqbjsKLQkJaW50IHdvcmssIHdlaWdodDsKKworCQlpZiAobGlzdF9lbXB0eSgmbGlzdCkpIHsKKwkJCWlmICghc2RfaGFzX3Jwc19pcGlfd2FpdGluZyhzZCkgJiYgbGlzdF9lbXB0eSgmcmVwb2xsKSkKKwkJCQlyZXR1cm47CisJCQlicmVhazsKKwkJfQorCisJCW4gPSBsaXN0X2ZpcnN0X2VudHJ5KCZsaXN0LCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QsIHBvbGxfbGlzdCk7CisJCWJ1ZGdldCAtPSBuYXBpX3BvbGwobiwgJnJlcG9sbCk7CiAKIAkJLyogSWYgc29mdGlycSB3aW5kb3cgaXMgZXhoYXVzdGVkIHRoZW4gcHVudC4KIAkJICogQWxsb3cgdGhpcyB0byBydW4gZm9yIDIgamlmZmllcyBzaW5jZSB3aGljaCB3aWxsIGFsbG93CiAJCSAqIGFuIGF2ZXJhZ2UgbGF0ZW5jeSBvZiAxLjUvSFouCiAJCSAqLwotCQlpZiAodW5saWtlbHkoYnVkZ2V0IDw9IDAgfHwgdGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lX2xpbWl0KSkpCi0JCQlnb3RvIHNvZnRuZXRfYnJlYWs7Ci0KLQotCQluID0gbGlzdF9maXJzdF9lbnRyeSgmbGlzdCwgc3RydWN0IG5hcGlfc3RydWN0LCBwb2xsX2xpc3QpOwotCQlsaXN0X2RlbF9pbml0KCZuLT5wb2xsX2xpc3QpOwotCi0JCWhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuKTsKLQotCQl3ZWlnaHQgPSBuLT53ZWlnaHQ7Ci0KLQkJLyogVGhpcyBOQVBJX1NUQVRFX1NDSEVEIHRlc3QgaXMgZm9yIGF2b2lkaW5nIGEgcmFjZQotCQkgKiB3aXRoIG5ldHBvbGwncyBwb2xsX25hcGkoKS4gIE9ubHkgdGhlIGVudGl0eSB3aGljaAotCQkgKiBvYnRhaW5zIHRoZSBsb2NrIGFuZCBzZWVzIE5BUElfU1RBVEVfU0NIRUQgc2V0IHdpbGwKLQkJICogYWN0dWFsbHkgbWFrZSB0aGUgLT5wb2xsKCkgY2FsbC4gIFRoZXJlZm9yZSB3ZSBhdm9pZAotCQkgKiBhY2NpZGVudGFsbHkgY2FsbGluZyAtPnBvbGwoKSB3aGVuIE5BUEkgaXMgbm90IHNjaGVkdWxlZC4KLQkJICovCi0JCXdvcmsgPSAwOwotCQlpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9TQ0hFRCwgJm4tPnN0YXRlKSkgewotCQkJd29yayA9IG4tPnBvbGwobiwgd2VpZ2h0KTsKLQkJCXRyYWNlX25hcGlfcG9sbChuKTsKKwkJaWYgKHVubGlrZWx5KGJ1ZGdldCA8PSAwIHx8CisJCQkgICAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZV9saW1pdCkpKSB7CisJCQlzZC0+dGltZV9zcXVlZXplKys7CisJCQlicmVhazsKIAkJfQotCi0JCVdBUk5fT05fT05DRSh3b3JrID4gd2VpZ2h0KTsKLQotCQlidWRnZXQgLT0gd29yazsKLQotCQkvKiBEcml2ZXJzIG11c3Qgbm90IG1vZGlmeSB0aGUgTkFQSSBzdGF0ZSBpZiB0aGV5Ci0JCSAqIGNvbnN1bWUgdGhlIGVudGlyZSB3ZWlnaHQuICBJbiBzdWNoIGNhc2VzIHRoaXMgY29kZQotCQkgKiBzdGlsbCAib3ducyIgdGhlIE5BUEkgaW5zdGFuY2UgYW5kIHRoZXJlZm9yZSBjYW4KLQkJICogbW92ZSB0aGUgaW5zdGFuY2UgYXJvdW5kIG9uIHRoZSBsaXN0IGF0LXdpbGwuCi0JCSAqLwotCQlpZiAodW5saWtlbHkod29yayA9PSB3ZWlnaHQpKSB7Ci0JCQlpZiAodW5saWtlbHkobmFwaV9kaXNhYmxlX3BlbmRpbmcobikpKSB7Ci0JCQkJbmFwaV9jb21wbGV0ZShuKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKG4tPmdyb19saXN0KSB7Ci0JCQkJCS8qIGZsdXNoIHRvbyBvbGQgcGFja2V0cwotCQkJCQkgKiBJZiBIWiA8IDEwMDAsIGZsdXNoIGFsbCBwYWNrZXRzLgotCQkJCQkgKi8KLQkJCQkJbmFwaV9ncm9fZmx1c2gobiwgSFogPj0gMTAwMCk7Ci0JCQkJfQotCQkJCWxpc3RfYWRkX3RhaWwoJm4tPnBvbGxfbGlzdCwgJnJlcG9sbCk7Ci0JCQl9Ci0JCX0KLQotCQluZXRwb2xsX3BvbGxfdW5sb2NrKGhhdmUpOwogCX0KIAotCWlmICghc2RfaGFzX3Jwc19pcGlfd2FpdGluZyhzZCkgJiYKLQkgICAgbGlzdF9lbXB0eSgmbGlzdCkgJiYKLQkgICAgbGlzdF9lbXB0eSgmcmVwb2xsKSkKLQkJcmV0dXJuOwotb3V0OgogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKIAlsaXN0X3NwbGljZV90YWlsX2luaXQoJnNkLT5wb2xsX2xpc3QsICZsaXN0KTsKQEAgLTQ2NDEsMTIgKzQ2NzIsNiBAQAogCQlfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKE5FVF9SWF9TT0ZUSVJRKTsKIAogCW5ldF9ycHNfYWN0aW9uX2FuZF9pcnFfZW5hYmxlKHNkKTsKLQotCXJldHVybjsKLQotc29mdG5ldF9icmVhazoKLQlzZC0+dGltZV9zcXVlZXplKys7Ci0JZ290byBvdXQ7CiB9CiAKIHN0cnVjdCBuZXRkZXZfYWRqYWNlbnQgewpAQCAtNzA0NywxMCArNzA3MiwyMCBAQAogCQlvbGRzZC0+b3V0cHV0X3F1ZXVlID0gTlVMTDsKIAkJb2xkc2QtPm91dHB1dF9xdWV1ZV90YWlscCA9ICZvbGRzZC0+b3V0cHV0X3F1ZXVlOwogCX0KLQkvKiBBcHBlbmQgTkFQSSBwb2xsIGxpc3QgZnJvbSBvZmZsaW5lIENQVS4gKi8KLQlpZiAoIWxpc3RfZW1wdHkoJm9sZHNkLT5wb2xsX2xpc3QpKSB7Ci0JCWxpc3Rfc3BsaWNlX2luaXQoJm9sZHNkLT5wb2xsX2xpc3QsICZzZC0+cG9sbF9saXN0KTsKLQkJcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpOworCS8qIEFwcGVuZCBOQVBJIHBvbGwgbGlzdCBmcm9tIG9mZmxpbmUgQ1BVLCB3aXRoIG9uZSBleGNlcHRpb24gOgorCSAqIHByb2Nlc3NfYmFja2xvZygpIG11c3QgYmUgY2FsbGVkIGJ5IGNwdSBvd25pbmcgcGVyY3B1IGJhY2tsb2cuCisJICogV2UgcHJvcGVybHkgaGFuZGxlIHByb2Nlc3NfcXVldWUgJiBpbnB1dF9wa3RfcXVldWUgbGF0ZXIuCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZvbGRzZC0+cG9sbF9saXN0KSkgeworCQlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBsaXN0X2ZpcnN0X2VudHJ5KCZvbGRzZC0+cG9sbF9saXN0LAorCQkJCQkJCSAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QsCisJCQkJCQkJICAgIHBvbGxfbGlzdCk7CisKKwkJbGlzdF9kZWxfaW5pdCgmbmFwaS0+cG9sbF9saXN0KTsKKwkJaWYgKG5hcGktPnBvbGwgPT0gcHJvY2Vzc19iYWNrbG9nKQorCQkJbmFwaS0+c3RhdGUgPSAwOworCQllbHNlCisJCQlfX19fbmFwaV9zY2hlZHVsZShzZCwgbmFwaSk7CiAJfQogCiAJcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1RYX1NPRlRJUlEpOwpAQCAtNzA2MSw3ICs3MDk2LDcgQEAKIAkJbmV0aWZfcnhfaW50ZXJuYWwoc2tiKTsKIAkJaW5wdXRfcXVldWVfaGVhZF9pbmNyKG9sZHNkKTsKIAl9Ci0Jd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZvbGRzZC0+aW5wdXRfcGt0X3F1ZXVlKSkpIHsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZvbGRzZC0+aW5wdXRfcGt0X3F1ZXVlKSkpIHsKIAkJbmV0aWZfcnhfaW50ZXJuYWwoc2tiKTsKIAkJaW5wdXRfcXVldWVfaGVhZF9pbmNyKG9sZHNkKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDhlMzhmMTcuLjhkNjE0YzkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC0yMDQzLDYgKzIwNDMsMTIgQEAKIAkJCWNhc2UgTkRUUEFfQkFTRV9SRUFDSEFCTEVfVElNRToKIAkJCQlORUlHSF9WQVJfU0VUKHAsIEJBU0VfUkVBQ0hBQkxFX1RJTUUsCiAJCQkJCSAgICAgIG5sYV9nZXRfbXNlY3ModGJwW2ldKSk7CisJCQkJLyogdXBkYXRlIHJlYWNoYWJsZV90aW1lIGFzIHdlbGwsIG90aGVyd2lzZSwgdGhlIGNoYW5nZSB3aWxsCisJCQkJICogb25seSBiZSBlZmZlY3RpdmUgYWZ0ZXIgdGhlIG5leHQgdGltZSBuZWlnaF9wZXJpb2RpY193b3JrCisJCQkJICogZGVjaWRlcyB0byByZWNvbXB1dGUgaXQgKGNhbiBiZSBtdWx0aXBsZSBtaW51dGVzKQorCQkJCSAqLworCQkJCXAtPnJlYWNoYWJsZV90aW1lID0KKwkJCQkJbmVpZ2hfcmFuZF9yZWFjaF90aW1lKE5FSUdIX1ZBUihwLCBCQVNFX1JFQUNIQUJMRV9USU1FKSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIE5EVFBBX0dDX1NUQUxFVElNRToKIAkJCQlORUlHSF9WQVJfU0VUKHAsIEdDX1NUQUxFVElNRSwKQEAgLTI5MjEsNiArMjkyNywzMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgbmVpZ2hfcHJvY19iYXNlX3JlYWNoYWJsZV90aW1lKHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAorCQkJCQkgIHZvaWQgX191c2VyICpidWZmZXIsCisJCQkJCSAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IG5laWdoX3Bhcm1zICpwID0gY3RsLT5leHRyYTI7CisJaW50IHJldDsKKworCWlmIChzdHJjbXAoY3RsLT5wcm9jbmFtZSwgImJhc2VfcmVhY2hhYmxlX3RpbWUiKSA9PSAwKQorCQlyZXQgPSBuZWlnaF9wcm9jX2RvaW50dmVjX2ppZmZpZXMoY3RsLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKwllbHNlIGlmIChzdHJjbXAoY3RsLT5wcm9jbmFtZSwgImJhc2VfcmVhY2hhYmxlX3RpbWVfbXMiKSA9PSAwKQorCQlyZXQgPSBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXMoY3RsLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKwllbHNlCisJCXJldCA9IC0xOworCisJaWYgKHdyaXRlICYmIHJldCA9PSAwKSB7CisJCS8qIHVwZGF0ZSByZWFjaGFibGVfdGltZSBhcyB3ZWxsLCBvdGhlcndpc2UsIHRoZSBjaGFuZ2Ugd2lsbAorCQkgKiBvbmx5IGJlIGVmZmVjdGl2ZSBhZnRlciB0aGUgbmV4dCB0aW1lIG5laWdoX3BlcmlvZGljX3dvcmsKKwkJICogZGVjaWRlcyB0byByZWNvbXB1dGUgaXQKKwkJICovCisJCXAtPnJlYWNoYWJsZV90aW1lID0KKwkJCW5laWdoX3JhbmRfcmVhY2hfdGltZShORUlHSF9WQVIocCwgQkFTRV9SRUFDSEFCTEVfVElNRSkpOworCX0KKwlyZXR1cm4gcmV0OworfQorCiAjZGVmaW5lIE5FSUdIX1BBUk1TX0RBVEFfT0ZGU0VUKGluZGV4KQlcCiAJKCYoKHN0cnVjdCBuZWlnaF9wYXJtcyAqKSAwKS0+ZGF0YVtpbmRleF0pCiAKQEAgLTMwNDcsNiArMzA3OCwxOSBAQAogCQl0LT5uZWlnaF92YXJzW05FSUdIX1ZBUl9SRVRSQU5TX1RJTUVfTVNdLnByb2NfaGFuZGxlciA9IGhhbmRsZXI7CiAJCS8qIFJlYWNoYWJsZVRpbWUgKGluIG1pbGxpc2Vjb25kcykgKi8KIAkJdC0+bmVpZ2hfdmFyc1tORUlHSF9WQVJfQkFTRV9SRUFDSEFCTEVfVElNRV9NU10ucHJvY19oYW5kbGVyID0gaGFuZGxlcjsKKwl9IGVsc2UgeworCQkvKiBUaG9zZSBoYW5kbGVycyB3aWxsIHVwZGF0ZSBwLT5yZWFjaGFibGVfdGltZSBhZnRlcgorCQkgKiBiYXNlX3JlYWNoYWJsZV90aW1lKF9tcykgaXMgc2V0IHRvIGVuc3VyZSB0aGUgbmV3IHRpbWVyIHN0YXJ0cyBiZWluZworCQkgKiBhcHBsaWVkIGFmdGVyIHRoZSBuZXh0IG5laWdoYm91ciB1cGRhdGUgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcgorCQkgKiBuZWlnaF9wZXJpb2RpY193b3JrIHRvIHVwZGF0ZSBpdHMgdmFsdWUgKGNhbiBiZSBtdWx0aXBsZSBtaW51dGVzKQorCQkgKiBTbyBhbnkgaGFuZGxlciB0aGF0IHJlcGxhY2VzIHRoZW0gc2hvdWxkIGRvIHRoaXMgYXMgd2VsbAorCQkgKi8KKwkJLyogUmVhY2hhYmxlVGltZSAqLworCQl0LT5uZWlnaF92YXJzW05FSUdIX1ZBUl9CQVNFX1JFQUNIQUJMRV9USU1FXS5wcm9jX2hhbmRsZXIgPQorCQkJbmVpZ2hfcHJvY19iYXNlX3JlYWNoYWJsZV90aW1lOworCQkvKiBSZWFjaGFibGVUaW1lIChpbiBtaWxsaXNlY29uZHMpICovCisJCXQtPm5laWdoX3ZhcnNbTkVJR0hfVkFSX0JBU0VfUkVBQ0hBQkxFX1RJTUVfTVNdLnByb2NfaGFuZGxlciA9CisJCQluZWlnaF9wcm9jX2Jhc2VfcmVhY2hhYmxlX3RpbWU7CiAJfQogCiAJLyogRG9uJ3QgZXhwb3J0IHN5c2N0bHMgdG8gdW5wcml2aWxlZ2VkIHVzZXJzICovCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGFlMTNlZjYuLjM5NWMxNWIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC00MTQ4LDYgKzQxNDgsNyBAQAogCXNrYi0+aWdub3JlX2RmID0gMDsKIAlza2JfZHN0X2Ryb3Aoc2tiKTsKIAlza2ItPm1hcmsgPSAwOworCXNrYl9pbml0X3NlY21hcmsoc2tiKTsKIAlzZWNwYXRoX3Jlc2V0KHNrYik7CiAJbmZfcmVzZXQoc2tiKTsKIAluZl9yZXNldF90cmFjZShza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9zbGF2ZS5jIGIvbmV0L2RzYS9zbGF2ZS5jCmluZGV4IDUxNTU2OWYuLjU4OWFhZmQgMTAwNjQ0Ci0tLSBhL25ldC9kc2Evc2xhdmUuYworKysgYi9uZXQvZHNhL3NsYXZlLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKIAlzbnByaW50Zihkcy0+c2xhdmVfbWlpX2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgImRzYS0lZDolLjJ4IiwKIAkJCWRzLT5pbmRleCwgZHMtPnBkLT5zd19hZGRyKTsKIAlkcy0+c2xhdmVfbWlpX2J1cy0+cGFyZW50ID0gZHMtPm1hc3Rlcl9kZXY7CisJZHMtPnNsYXZlX21paV9idXMtPnBoeV9tYXNrID0gfmRzLT5waHlzX21paV9tYXNrOwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2dlbmV2ZS5jIGIvbmV0L2lwdjQvZ2VuZXZlLmMKaW5kZXggOTVlNDdjOS4uMzk0YTIwMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZ2VuZXZlLmMKKysrIGIvbmV0L2lwdjQvZ2VuZXZlLmMKQEAgLTEyMiwxNCArMTIyLDE4IEBACiAJaW50IGVycjsKIAogCXNrYiA9IHVkcF90dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgIWdzLT5zb2NrLT5zay0+c2tfbm9fY2hlY2tfdHgpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKIAogCW1pbl9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LT5kc3QuZGV2KSArIHJ0LT5kc3QuaGVhZGVyX2xlbgogCQkJKyBHRU5FVkVfQkFTRV9ITEVOICsgb3B0X2xlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpCiAJCQkrICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikgPyBWTEFOX0hMRU4gOiAwKTsKIAogCWVyciA9IHNrYl9jb3dfaGVhZChza2IsIG1pbl9oZWFkcm9vbSk7Ci0JaWYgKHVubGlrZWx5KGVycikpCisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBlcnI7CisJfQogCiAJc2tiID0gdmxhbl9od2FjY2VsX3B1c2hfaW5zaWRlKHNrYik7CiAJaWYgKHVubGlrZWx5KCFza2IpKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jIGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCmluZGV4IDNhODNjZTUuLjc4N2IzYzIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYworKysgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKQEAgLTEyOSw3ICsxMjksOCBAQAogCSAqCVdlIG5vdyBnZW5lcmF0ZSBhbiBJQ01QIEhPU1QgUkVESVJFQ1QgZ2l2aW5nIHRoZSByb3V0ZQogCSAqCXdlIGNhbGN1bGF0ZWQuCiAJICovCi0JaWYgKHJ0LT5ydF9mbGFncyZSVENGX0RPUkVESVJFQ1QgJiYgIW9wdC0+c3JyICYmICFza2Jfc2VjX3BhdGgoc2tiKSkKKwlpZiAoSVBDQihza2IpLT5mbGFncyAmIElQU0tCX0RPUkVESVJFQ1QgJiYgIW9wdC0+c3JyICYmCisJICAgICFza2Jfc2VjX3BhdGgoc2tiKSkKIAkJaXBfcnRfc2VuZF9yZWRpcmVjdChza2IpOwogCiAJc2tiLT5wcmlvcml0eSA9IHJ0X3RvczJwcmlvcml0eShpcGgtPnRvcyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCA4YTg5YzczLi42Yjg1YWRiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTQ2MSwxNyArNDYxLDEzIEBACiAKIAltZW1jcHkoJmVycmhkci5lZSwgJnNlcnItPmVlLCBzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSk7CiAJc2luID0gJmVycmhkci5vZmZlbmRlcjsKLQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9VTlNQRUM7CisJbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKIAogCWlmIChzZXJyLT5lZS5lZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX0lDTVAgfHwKIAkgICAgaXB2NF9wa3RpbmZvX3ByZXBhcmVfZXJycXVldWUoc2ssIHNrYiwgc2Vyci0+ZWUuZWVfb3JpZ2luKSkgewotCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0KIAkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS0+c2FkZHI7Ci0JCXNpbi0+c2luX3BvcnQgPSAwOwotCQltZW1zZXQoJnNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7Ci0JCWlmIChpbmV0LT5jbXNnX2ZsYWdzKQorCQlpZiAoaW5ldF9zayhzayktPmNtc2dfZmxhZ3MpCiAJCQlpcF9jbXNnX3JlY3YobXNnLCBza2IpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9yZWRpcl9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlZGlyX2lwdjQuYwppbmRleCBmZjJkMjNkLi42ZWNmY2U2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlZGlyX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X3JlZGlyX2lwdjQuYwpAQCAtMjcsMTAgKzI3LDEwIEBACiAKIAltZW1zZXQoJm1yLCAwLCBzaXplb2YobXIpKTsKIAlpZiAocHJpdi0+c3JlZ19wcm90b19taW4pIHsKLQkJbXIucmFuZ2VbMF0ubWluLmFsbCA9IChfX2ZvcmNlIF9fYmUxNikKLQkJCQkJZGF0YVtwcml2LT5zcmVnX3Byb3RvX21pbl0uZGF0YVswXTsKLQkJbXIucmFuZ2VbMF0ubWF4LmFsbCA9IChfX2ZvcmNlIF9fYmUxNikKLQkJCQkJZGF0YVtwcml2LT5zcmVnX3Byb3RvX21heF0uZGF0YVswXTsKKwkJbXIucmFuZ2VbMF0ubWluLmFsbCA9CisJCQkqKF9fYmUxNiAqKSZkYXRhW3ByaXYtPnNyZWdfcHJvdG9fbWluXS5kYXRhWzBdOworCQltci5yYW5nZVswXS5tYXguYWxsID0KKwkJCSooX19iZTE2ICopJmRhdGFbcHJpdi0+c3JlZ19wcm90b19tYXhdLmRhdGFbMF07CiAJCW1yLnJhbmdlWzBdLmZsYWdzIHw9IE5GX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQ7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9waW5nLmMgYi9uZXQvaXB2NC9waW5nLmMKaW5kZXggYzBkODJmNy4uMmEzNzIwZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcGluZy5jCisrKyBiL25ldC9pcHY0L3BpbmcuYwpAQCAtOTY2LDggKzk2NiwxMSBAQAogCiAJc2sgPSBwaW5nX2xvb2t1cChuZXQsIHNrYiwgbnRvaHMoaWNtcGgtPnVuLmVjaG8uaWQpKTsKIAlpZiAoc2sgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCiAJCXByX2RlYnVnKCJyY3Ygb24gc29ja2V0ICVwXG4iLCBzayk7Ci0JCXBpbmdfcXVldWVfcmN2X3NrYihzaywgc2tiX2dldChza2IpKTsKKwkJaWYgKHNrYjIpCisJCQlwaW5nX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYjIpOwogCQlzb2NrX3B1dChzayk7CiAJCXJldHVybiB0cnVlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDZhMjE1NWIuLmQ1OGRkMGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTU1NCwxMSArMTU1NCwxMCBAQAogCiAJZG9fY2FjaGUgPSByZXMtPmZpICYmICFpdGFnOwogCWlmIChvdXRfZGV2ID09IGluX2RldiAmJiBlcnIgJiYgSU5fREVWX1RYX1JFRElSRUNUUyhvdXRfZGV2KSAmJgorCSAgICBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSAmJgogCSAgICAoSU5fREVWX1NIQVJFRF9NRURJQShvdXRfZGV2KSB8fAotCSAgICAgaW5ldF9hZGRyX29ubGluayhvdXRfZGV2LCBzYWRkciwgRklCX1JFU19HVygqcmVzKSkpKSB7Ci0JCWZsYWdzIHw9IFJUQ0ZfRE9SRURJUkVDVDsKLQkJZG9fY2FjaGUgPSBmYWxzZTsKLQl9CisJICAgICBpbmV0X2FkZHJfb25saW5rKG91dF9kZXYsIHNhZGRyLCBGSUJfUkVTX0dXKCpyZXMpKSkpCisJCUlQQ0Ioc2tiKS0+ZmxhZ3MgfD0gSVBTS0JfRE9SRURJUkVDVDsKIAogCWlmIChza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQKSkgewogCQkvKiBOb3QgSVAgKGkuZS4gQVJQKS4gRG8gbm90IGNyZWF0ZSByb3V0ZSwgaWYgaXQgaXMKQEAgLTIzMDMsNiArMjMwMiw4IEBACiAJci0+cnRtX2ZsYWdzCT0gKHJ0LT5ydF9mbGFncyAmIH4weEZGRkYpIHwgUlRNX0ZfQ0xPTkVEOwogCWlmIChydC0+cnRfZmxhZ3MgJiBSVENGX05PVElGWSkKIAkJci0+cnRtX2ZsYWdzIHw9IFJUTV9GX05PVElGWTsKKwlpZiAoSVBDQihza2IpLT5mbGFncyAmIElQU0tCX0RPUkVESVJFQ1QpCisJCXItPnJ0bV9mbGFncyB8PSBSVENGX0RPUkVESVJFQ1Q7CiAKIAlpZiAobmxhX3B1dF9iZTMyKHNrYiwgUlRBX0RTVCwgZHN0KSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggN2YxODI2Mi4uNjVjYWY4YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMjAxOSw3ICsyMDE5LDcgQEAKIAkJaWYgKHVubGlrZWx5KCF0Y3Bfc25kX3duZF90ZXN0KHRwLCBza2IsIG1zc19ub3cpKSkKIAkJCWJyZWFrOwogCi0JCWlmICh0c29fc2VncyA9PSAxKSB7CisJCWlmICh0c29fc2VncyA9PSAxIHx8ICFtYXhfc2VncykgewogCQkJaWYgKHVubGlrZWx5KCF0Y3BfbmFnbGVfdGVzdCh0cCwgc2tiLCBtc3Nfbm93LAogCQkJCQkJICAgICAodGNwX3NrYl9pc19sYXN0KHNrLCBza2IpID8KIAkJCQkJCSAgICAgIG5vbmFnbGUgOiBUQ1BfTkFHTEVfUFVTSCkpKSkKQEAgLTIwMzIsNyArMjAzMiw3IEBACiAJCX0KIAogCQlsaW1pdCA9IG1zc19ub3c7Ci0JCWlmICh0c29fc2VncyA+IDEgJiYgIXRjcF91cmdfbW9kZSh0cCkpCisJCWlmICh0c29fc2VncyA+IDEgJiYgbWF4X3NlZ3MgJiYgIXRjcF91cmdfbW9kZSh0cCkpCiAJCQlsaW1pdCA9IHRjcF9tc3Nfc3BsaXRfcG9pbnQoc2ssIHNrYiwgbXNzX25vdywKIAkJCQkJCSAgICBtaW5fdCh1bnNpZ25lZCBpbnQsCiAJCQkJCQkJICBjd25kX3F1b3RhLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwX2RpYWcuYyBiL25ldC9pcHY0L3VkcF9kaWFnLmMKaW5kZXggNzkyN2RiMC4uNGEwMDBmMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwX2RpYWcuYworKysgYi9uZXQvaXB2NC91ZHBfZGlhZy5jCkBAIC05OSwxMSArOTksMTMgQEAKIAlzX3Nsb3QgPSBjYi0+YXJnc1swXTsKIAludW0gPSBzX251bSA9IGNiLT5hcmdzWzFdOwogCi0JZm9yIChzbG90ID0gc19zbG90OyBzbG90IDw9IHRhYmxlLT5tYXNrOyBudW0gPSBzX251bSA9IDAsIHNsb3QrKykgeworCWZvciAoc2xvdCA9IHNfc2xvdDsgc2xvdCA8PSB0YWJsZS0+bWFzazsgc19udW0gPSAwLCBzbG90KyspIHsKIAkJc3RydWN0IHNvY2sgKnNrOwogCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKIAkJc3RydWN0IHVkcF9oc2xvdCAqaHNsb3QgPSAmdGFibGUtPmhhc2hbc2xvdF07CiAKKwkJbnVtID0gMDsKKwogCQlpZiAoaGxpc3RfbnVsbHNfZW1wdHkoJmhzbG90LT5oZWFkKSkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9kYXRhZ3JhbS5jIGIvbmV0L2lwdjYvZGF0YWdyYW0uYwppbmRleCAxMDBjNTg5Li40OWY1ZTczIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9kYXRhZ3JhbS5jCisrKyBiL25ldC9pcHY2L2RhdGFncmFtLmMKQEAgLTM5MywxMSArMzkzLDEwIEBACiAKIAltZW1jcHkoJmVycmhkci5lZSwgJnNlcnItPmVlLCBzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSk7CiAJc2luID0gJmVycmhkci5vZmZlbmRlcjsKLQlzaW4tPnNpbjZfZmFtaWx5ID0gQUZfVU5TUEVDOworCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisKIAlpZiAoc2Vyci0+ZWUuZWVfb3JpZ2luICE9IFNPX0VFX09SSUdJTl9MT0NBTCkgewogCQlzaW4tPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0JCXNpbi0+c2luNl9mbG93aW5mbyA9IDA7Ci0JCXNpbi0+c2luNl9wb3J0ID0gMDsKIAkJaWYgKG5wLT5yeG9wdC5hbGwpIHsKIAkJCWlmIChzZXJyLT5lZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX0lDTVAgJiYKIAkJCSAgICBzZXJyLT5lZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX0lDTVA2KQpAQCAtNDEyLDEyICs0MTEsOSBAQAogCQkJCWlwdjZfaWZhY2Vfc2NvcGVfaWQoJnNpbi0+c2luNl9hZGRyLAogCQkJCQkJICAgIElQNkNCKHNrYiktPmlpZik7CiAJCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0KIAkJCWlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoaXBfaGRyKHNrYiktPnNhZGRyLAogCQkJCQkgICAgICAgJnNpbi0+c2luNl9hZGRyKTsKLQkJCXNpbi0+c2luNl9zY29wZV9pZCA9IDA7Ci0JCQlpZiAoaW5ldC0+Y21zZ19mbGFncykKKwkJCWlmIChpbmV0X3NrKHNrKS0+Y21zZ19mbGFncykKIAkJCQlpcF9jbXNnX3JlY3YobXNnLCBza2IpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IGIyZDE4MzguLmYxYzZkNWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYworKysgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTY1OSw2ICs2NTksMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZmliNl9wdXJnZV9ydChzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKKwkJCSAgc3RydWN0IG5ldCAqbmV0KQoreworCWlmIChhdG9taWNfcmVhZCgmcnQtPnJ0NmlfcmVmKSAhPSAxKSB7CisJCS8qIFRoaXMgcm91dGUgaXMgdXNlZCBhcyBkdW1teSBhZGRyZXNzIGhvbGRlciBpbiBzb21lIHNwbGl0CisJCSAqIG5vZGVzLiBJdCBpcyBub3QgbGVha2VkLCBidXQgaXQgc3RpbGwgaG9sZHMgb3RoZXIgcmVzb3VyY2VzLAorCQkgKiB3aGljaCBtdXN0IGJlIHJlbGVhc2VkIGluIHRpbWUuIFNvLCBzY2FuIGFzY2VuZGFudCBub2RlcworCQkgKiBhbmQgcmVwbGFjZSBkdW1teSByZWZlcmVuY2VzIHRvIHRoaXMgcm91dGUgd2l0aCByZWZlcmVuY2VzCisJCSAqIHRvIHN0aWxsIGFsaXZlIG9uZXMuCisJCSAqLworCQl3aGlsZSAoZm4pIHsKKwkJCWlmICghKGZuLT5mbl9mbGFncyAmIFJUTl9SVElORk8pICYmIGZuLT5sZWFmID09IHJ0KSB7CisJCQkJZm4tPmxlYWYgPSBmaWI2X2ZpbmRfcHJlZml4KG5ldCwgZm4pOworCQkJCWF0b21pY19pbmMoJmZuLT5sZWFmLT5ydDZpX3JlZik7CisJCQkJcnQ2X3JlbGVhc2UocnQpOworCQkJfQorCQkJZm4gPSBmbi0+cGFyZW50OworCQl9CisJCS8qIE5vIG1vcmUgcmVmZXJlbmNlcyBhcmUgcG9zc2libGUgYXQgdGhpcyBwb2ludC4gKi8KKwkJQlVHX09OKGF0b21pY19yZWFkKCZydC0+cnQ2aV9yZWYpICE9IDEpOworCX0KK30KKwogLyoKICAqCUluc2VydCByb3V0aW5nIGluZm9ybWF0aW9uIGluIGEgbm9kZS4KICAqLwpAQCAtODA3LDExICs4MzAsMTIgQEAKIAkJcnQtPmRzdC5ydDZfbmV4dCA9IGl0ZXItPmRzdC5ydDZfbmV4dDsKIAkJYXRvbWljX2luYygmcnQtPnJ0NmlfcmVmKTsKIAkJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8pOwotCQlydDZfcmVsZWFzZShpdGVyKTsKIAkJaWYgKCEoZm4tPmZuX2ZsYWdzICYgUlROX1JUSU5GTykpIHsKIAkJCWluZm8tPm5sX25ldC0+aXB2Ni5ydDZfc3RhdHMtPmZpYl9yb3V0ZV9ub2RlcysrOwogCQkJZm4tPmZuX2ZsYWdzIHw9IFJUTl9SVElORk87CiAJCX0KKwkJZmliNl9wdXJnZV9ydChpdGVyLCBmbiwgaW5mby0+bmxfbmV0KTsKKwkJcnQ2X3JlbGVhc2UoaXRlcik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMzIyLDI0ICsxMzQ2LDcgQEAKIAkJZm4gPSBmaWI2X3JlcGFpcl90cmVlKG5ldCwgZm4pOwogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmcnQtPnJ0NmlfcmVmKSAhPSAxKSB7Ci0JCS8qIFRoaXMgcm91dGUgaXMgdXNlZCBhcyBkdW1teSBhZGRyZXNzIGhvbGRlciBpbiBzb21lIHNwbGl0Ci0JCSAqIG5vZGVzLiBJdCBpcyBub3QgbGVha2VkLCBidXQgaXQgc3RpbGwgaG9sZHMgb3RoZXIgcmVzb3VyY2VzLAotCQkgKiB3aGljaCBtdXN0IGJlIHJlbGVhc2VkIGluIHRpbWUuIFNvLCBzY2FuIGFzY2VuZGFudCBub2RlcwotCQkgKiBhbmQgcmVwbGFjZSBkdW1teSByZWZlcmVuY2VzIHRvIHRoaXMgcm91dGUgd2l0aCByZWZlcmVuY2VzCi0JCSAqIHRvIHN0aWxsIGFsaXZlIG9uZXMuCi0JCSAqLwotCQl3aGlsZSAoZm4pIHsKLQkJCWlmICghKGZuLT5mbl9mbGFncyAmIFJUTl9SVElORk8pICYmIGZuLT5sZWFmID09IHJ0KSB7Ci0JCQkJZm4tPmxlYWYgPSBmaWI2X2ZpbmRfcHJlZml4KG5ldCwgZm4pOwotCQkJCWF0b21pY19pbmMoJmZuLT5sZWFmLT5ydDZpX3JlZik7Ci0JCQkJcnQ2X3JlbGVhc2UocnQpOwotCQkJfQotCQkJZm4gPSBmbi0+cGFyZW50OwotCQl9Ci0JCS8qIE5vIG1vcmUgcmVmZXJlbmNlcyBhcmUgcG9zc2libGUgYXQgdGhpcyBwb2ludC4gKi8KLQkJQlVHX09OKGF0b21pY19yZWFkKCZydC0+cnQ2aV9yZWYpICE9IDEpOwotCX0KKwlmaWI2X3B1cmdlX3J0KHJ0LCBmbiwgbmV0KTsKIAogCWluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvKTsKIAlydDZfcmVsZWFzZShydCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X3JlZGlyX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZnRfcmVkaXJfaXB2Ni5jCmluZGV4IDI0MzNhNmIuLjExODIwYjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZnRfcmVkaXJfaXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZnRfcmVkaXJfaXB2Ni5jCkBAIC0yNywxMCArMjcsMTAgQEAKIAogCW1lbXNldCgmcmFuZ2UsIDAsIHNpemVvZihyYW5nZSkpOwogCWlmIChwcml2LT5zcmVnX3Byb3RvX21pbikgewotCQlyYW5nZS5taW5fcHJvdG8uYWxsID0gKF9fZm9yY2UgX19iZTE2KQotCQkJCQlkYXRhW3ByaXYtPnNyZWdfcHJvdG9fbWluXS5kYXRhWzBdOwotCQlyYW5nZS5tYXhfcHJvdG8uYWxsID0gKF9fZm9yY2UgX19iZTE2KQotCQkJCQlkYXRhW3ByaXYtPnNyZWdfcHJvdG9fbWF4XS5kYXRhWzBdOworCQlyYW5nZS5taW5fcHJvdG8uYWxsID0KKwkJCSooX19iZTE2ICopJmRhdGFbcHJpdi0+c3JlZ19wcm90b19taW5dLmRhdGFbMF07CisJCXJhbmdlLm1heF9wcm90by5hbGwgPQorCQkJKihfX2JlMTYgKikmZGF0YVtwcml2LT5zcmVnX3Byb3RvX21heF0uZGF0YVswXTsKIAkJcmFuZ2UuZmxhZ3MgfD0gTkZfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IGM5MTA4MzEuLjQ5NTk2NTM1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTExNjAsMTIgKzExNjAsOSBAQAogCQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRzdC0+ZGV2KTsKIAogCQlydDYtPnJ0NmlfZmxhZ3MgfD0gUlRGX01PRElGSUVEOwotCQlpZiAobXR1IDwgSVBWNl9NSU5fTVRVKSB7Ci0JCQl1MzIgZmVhdHVyZXMgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9GRUFUVVJFUyk7CisJCWlmIChtdHUgPCBJUFY2X01JTl9NVFUpCiAJCQltdHUgPSBJUFY2X01JTl9NVFU7Ci0JCQlmZWF0dXJlcyB8PSBSVEFYX0ZFQVRVUkVfQUxMRlJBRzsKLQkJCWRzdF9tZXRyaWNfc2V0KGRzdCwgUlRBWF9GRUFUVVJFUywgZmVhdHVyZXMpOwotCQl9CisKIAkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX01UVSwgbXR1KTsKIAkJcnQ2X3VwZGF0ZV9leHBpcmVzKHJ0NiwgbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbXR1X2V4cGlyZXMpOwogCX0KQEAgLTEyNDUsMTIgKzEyNDIsMTYgQEAKIAkJcnQgPSBuZXQtPmlwdjYuaXA2X251bGxfZW50cnk7CiAJZWxzZSBpZiAocnQtPmRzdC5lcnJvcikgewogCQlydCA9IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeTsKLQl9IGVsc2UgaWYgKHJ0ID09IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSkgeworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocnQgPT0gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5KSB7CiAJCWZuID0gZmliNl9iYWNrdHJhY2soZm4sICZmbDYtPnNhZGRyKTsKIAkJaWYgKGZuKQogCQkJZ290byByZXN0YXJ0OwogCX0KIAorb3V0OgogCWRzdF9ob2xkKCZydC0+ZHN0KTsKIAogCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggNWZmODc4MC4uOWMwYjU0ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC0xMzg3LDYgKzEzODcsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgdGNwX3Y2X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkciwKKwkJCSAgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoKQoreworCS8qIFRoaXMgaXMgdHJpY2t5OiB3ZSBtb3ZlIElQNkNCIGF0IGl0cyBjb3JyZWN0IGxvY2F0aW9uIGludG8KKwkgKiBUQ1BfU0tCX0NCKCkuIEl0IG11c3QgYmUgZG9uZSBhZnRlciB4ZnJtNl9wb2xpY3lfY2hlY2soKSwgYmVjYXVzZQorCSAqIF9kZWNvZGVfc2Vzc2lvbjYoKSB1c2VzIElQNkNCKCkuCisJICogYmFycmllcigpIG1ha2VzIHN1cmUgY29tcGlsZXIgd29uJ3QgcGxheSBhbGlhc2luZyBnYW1lcy4KKwkgKi8KKwltZW1tb3ZlKCZUQ1BfU0tCX0NCKHNrYiktPmhlYWRlci5oNiwgSVA2Q0Ioc2tiKSwKKwkJc2l6ZW9mKHN0cnVjdCBpbmV0Nl9za2JfcGFybSkpOworCWJhcnJpZXIoKTsKKworCVRDUF9TS0JfQ0Ioc2tiKS0+c2VxID0gbnRvaGwodGgtPnNlcSk7CisJVENQX1NLQl9DQihza2IpLT5lbmRfc2VxID0gKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxICsgdGgtPnN5biArIHRoLT5maW4gKworCQkJCSAgICBza2ItPmxlbiAtIHRoLT5kb2ZmKjQpOworCVRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcSA9IG50b2hsKHRoLT5hY2tfc2VxKTsKKwlUQ1BfU0tCX0NCKHNrYiktPnRjcF9mbGFncyA9IHRjcF9mbGFnX2J5dGUodGgpOworCVRDUF9TS0JfQ0Ioc2tiKS0+dGNwX3R3X2lzbiA9IDA7CisJVENQX1NLQl9DQihza2IpLT5pcF9kc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChoZHIpOworCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkID0gMDsKK30KKwogc3RhdGljIGludCB0Y3BfdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IHRjcGhkciAqdGg7CkBAIC0xNDE4LDI0ICsxNDQwLDkgQEAKIAogCXRoID0gdGNwX2hkcihza2IpOwogCWhkciA9IGlwdjZfaGRyKHNrYik7Ci0JLyogVGhpcyBpcyB0cmlja3kgOiBXZSBtb3ZlIElQQ0IgYXQgaXRzIGNvcnJlY3QgbG9jYXRpb24gaW50byBUQ1BfU0tCX0NCKCkKLQkgKiBiYXJyaWVyKCkgbWFrZXMgc3VyZSBjb21waWxlciB3b250IHBsYXkgZm9vbF5XYWxpYXNpbmcgZ2FtZXMuCi0JICovCi0JbWVtbW92ZSgmVENQX1NLQl9DQihza2IpLT5oZWFkZXIuaDYsIElQNkNCKHNrYiksCi0JCXNpemVvZihzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0pKTsKLQliYXJyaWVyKCk7Ci0KLQlUQ1BfU0tCX0NCKHNrYiktPnNlcSA9IG50b2hsKHRoLT5zZXEpOwotCVRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSA9IChUQ1BfU0tCX0NCKHNrYiktPnNlcSArIHRoLT5zeW4gKyB0aC0+ZmluICsKLQkJCQkgICAgc2tiLT5sZW4gLSB0aC0+ZG9mZio0KTsKLQlUQ1BfU0tCX0NCKHNrYiktPmFja19zZXEgPSBudG9obCh0aC0+YWNrX3NlcSk7Ci0JVENQX1NLQl9DQihza2IpLT50Y3BfZmxhZ3MgPSB0Y3BfZmxhZ19ieXRlKHRoKTsKLQlUQ1BfU0tCX0NCKHNrYiktPnRjcF90d19pc24gPSAwOwotCVRDUF9TS0JfQ0Ioc2tiKS0+aXBfZHNmaWVsZCA9IGlwdjZfZ2V0X2RzZmllbGQoaGRyKTsKLQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCA9IDA7CiAKIAlzayA9IF9faW5ldDZfbG9va3VwX3NrYigmdGNwX2hhc2hpbmZvLCBza2IsIHRoLT5zb3VyY2UsIHRoLT5kZXN0LAotCQkJCXRjcF92Nl9paWYoc2tiKSk7CisJCQkJaW5ldDZfaWlmKHNrYikpOwogCWlmICghc2spCiAJCWdvdG8gbm9fdGNwX3NvY2tldDsKIApAQCAtMTQ1MSw2ICsxNDU4LDggQEAKIAlpZiAoIXhmcm02X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpCiAJCWdvdG8gZGlzY2FyZF9hbmRfcmVsc2U7CiAKKwl0Y3BfdjZfZmlsbF9jYihza2IsIGhkciwgdGgpOworCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKIAlpZiAodGNwX3Y2X2luYm91bmRfbWQ1X2hhc2goc2ssIHNrYikpCiAJCWdvdG8gZGlzY2FyZF9hbmRfcmVsc2U7CkBAIC0xNDgyLDYgKzE0OTEsOCBAQAogCWlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKQogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKKwl0Y3BfdjZfZmlsbF9jYihza2IsIGhkciwgdGgpOworCiAJaWYgKHNrYi0+bGVuIDwgKHRoLT5kb2ZmPDwyKSB8fCB0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgewogY3N1bV9lcnJvcjoKIAkJVENQX0lOQ19TVEFUU19CSChuZXQsIFRDUF9NSUJfQ1NVTUVSUk9SUyk7CkBAIC0xNTA1LDYgKzE1MTYsOCBAQAogCQlnb3RvIGRpc2NhcmRfaXQ7CiAJfQogCisJdGNwX3Y2X2ZpbGxfY2Ioc2tiLCBoZHIsIHRoKTsKKwogCWlmIChza2ItPmxlbiA8ICh0aC0+ZG9mZjw8MikpIHsKIAkJaW5ldF90d3NrX3B1dChpbmV0X3R3c2soc2spKTsKIAkJZ290byBiYWRfcGFja2V0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCA1Zjk4MzY0Li40OGJmNWEwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtMTMwLDEyICsxMzAsMTggQEAKIHsKIAlzdHJ1Y3QgZmxvd2k2ICpmbDYgPSAmZmwtPnUuaXA2OwogCWludCBvbmx5cHJvdG8gPSAwOwotCXUxNiBvZmZzZXQgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7CiAJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkciA9IGlwdjZfaGRyKHNrYik7CisJdTE2IG9mZnNldCA9IHNpemVvZigqaGRyKTsKIAlzdHJ1Y3QgaXB2Nl9vcHRfaGRyICpleHRoZHI7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqbmggPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKLQl1OCBuZXh0aGRyID0gbmhbSVA2Q0Ioc2tiKS0+bmhvZmZdOworCXUxNiBuaG9mZiA9IElQNkNCKHNrYiktPm5ob2ZmOwogCWludCBvaWYgPSAwOworCXU4IG5leHRoZHI7CisKKwlpZiAoIW5ob2ZmKQorCQluaG9mZiA9IG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTsKKworCW5leHRoZHIgPSBuaFtuaG9mZl07CiAKIAlpZiAoc2tiX2RzdChza2IpKQogCQlvaWYgPSBza2JfZHN0KHNrYiktPmRldi0+aWZpbmRleDsKZGlmZiAtLWdpdCBhL25ldC9sbGMvc3lzY3RsX25ldF9sbGMuYyBiL25ldC9sbGMvc3lzY3RsX25ldF9sbGMuYwppbmRleCA2MTJhNWRkLi43OTliYWZjIDEwMDY0NAotLS0gYS9uZXQvbGxjL3N5c2N0bF9uZXRfbGxjLmMKKysrIGIvbmV0L2xsYy9zeXNjdGxfbmV0X2xsYy5jCkBAIC0xOCwyOCArMTgsMjggQEAKIAl7CiAJCS5wcm9jbmFtZQk9ICJhY2siLAogCQkuZGF0YQkJPSAmc3lzY3RsX2xsYzJfYWNrX3RpbWVvdXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGxvbmcpLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfbGxjMl9hY2tfdGltZW91dCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gImJ1c3kiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2xsYzJfYnVzeV90aW1lb3V0LAotCQkubWF4bGVuCQk9IHNpemVvZihsb25nKSwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2xsYzJfYnVzeV90aW1lb3V0KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlciAgID0gcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewogCQkucHJvY25hbWUJPSAicCIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfbGxjMl9wX3RpbWVvdXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGxvbmcpLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfbGxjMl9wX3RpbWVvdXQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJyZWoiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2xsYzJfcmVqX3RpbWVvdXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGxvbmcpLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfbGxjMl9yZWpfdGltZW91dCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IDBiYjcwMzguLmJkNGU0NmUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTE0MCw3ICsxNDAsOSBAQAogCWlmICghcmV0KSB7CiAJCWtleS0+ZmxhZ3MgfD0gS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CiAKLQkJaWYgKCEoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpKQorCQlpZiAoISgoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpIHx8CisJCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpIHx8CisJCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFKSkpCiAJCQlzZGF0YS0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQtLTsKIAogCQlXQVJOX09OKChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFKSAmJgpAQCAtMTg4LDcgKzE5MCw5IEBACiAJc3RhID0ga2V5LT5zdGE7CiAJc2RhdGEgPSBrZXktPnNkYXRhOwogCi0JaWYgKCEoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpKQorCWlmICghKChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQykgfHwKKwkgICAgICAoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSB8fAorCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFKSkpCiAJCWluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTsKIAogCXJldCA9IGRydl9zZXRfa2V5KGtleS0+bG9jYWwsIERJU0FCTEVfS0VZLCBzZGF0YSwKQEAgLTg4NCw3ICs4ODgsOSBAQAogCWlmIChrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpIHsKIAkJa2V5LT5mbGFncyAmPSB+S0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CiAKLQkJaWYgKCEoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpKQorCQlpZiAoISgoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpIHx8CisJCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpIHx8CisJCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFKSkpCiAJCQlpbmNyZW1lbnRfdGFpbHJvb21fbmVlZF9jb3VudChrZXktPnNkYXRhKTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDJjMzZjNDcuLjgzN2E0MDYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMTY0Myw3ICsxNjQzLDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlib29sIHJldDsKKwlib29sIHJldCA9IGZhbHNlOwogCWludCBhYzsKIAogCWlmIChsb2NhbC0+aHcucXVldWVzIDwgSUVFRTgwMjExX05VTV9BQ1MpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcG0uYyBiL25ldC9tYWM4MDIxMS9wbS5jCmluZGV4IDRjNTE5MmUuLjRhOTVmZTMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9wbS5jCisrKyBiL25ldC9tYWM4MDIxMS9wbS5jCkBAIC04NiwyMCArODYsNiBAQAogCQl9CiAJfQogCi0JLyogdGVhciBkb3duIGFnZ3JlZ2F0aW9uIHNlc3Npb25zIGFuZCByZW1vdmUgU1RBcyAqLwotCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewotCQlpZiAoc3RhLT51cGxvYWRlZCkgewotCQkJZW51bSBpZWVlODAyMTFfc3RhX3N0YXRlIHN0YXRlOwotCi0JCQlzdGF0ZSA9IHN0YS0+c3RhX3N0YXRlOwotCQkJZm9yICg7IHN0YXRlID4gSUVFRTgwMjExX1NUQV9OT1RFWElTVDsgc3RhdGUtLSkKLQkJCQlXQVJOX09OKGRydl9zdGFfc3RhdGUobG9jYWwsIHN0YS0+c2RhdGEsIHN0YSwKLQkJCQkJCSAgICAgIHN0YXRlLCBzdGF0ZSAtIDEpKTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmxvY2FsLT5zdGFfbXR4KTsKLQogCS8qIHJlbW92ZSBhbGwgaW50ZXJmYWNlcyB0aGF0IHdlcmUgY3JlYXRlZCBpbiB0aGUgZHJpdmVyICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQpAQCAtMTExLDYgKzk3LDIxIEBACiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJCWllZWU4MDIxMV9tZ2RfcXVpZXNjZShzZGF0YSk7CiAJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CisJCQkvKiB0ZWFyIGRvd24gYWdncmVnYXRpb24gc2Vzc2lvbnMgYW5kIHJlbW92ZSBTVEFzICovCisJCQltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CisJCQlzdGEgPSBzZGF0YS0+dS53ZHMuc3RhOworCQkJaWYgKHN0YSAmJiBzdGEtPnVwbG9hZGVkKSB7CisJCQkJZW51bSBpZWVlODAyMTFfc3RhX3N0YXRlIHN0YXRlOworCisJCQkJc3RhdGUgPSBzdGEtPnN0YV9zdGF0ZTsKKwkJCQlmb3IgKDsgc3RhdGUgPiBJRUVFODAyMTFfU1RBX05PVEVYSVNUOyBzdGF0ZS0tKQorCQkJCQlXQVJOX09OKGRydl9zdGFfc3RhdGUobG9jYWwsIHN0YS0+c2RhdGEsCisJCQkJCQkJICAgICAgc3RhLCBzdGF0ZSwKKwkJCQkJCQkgICAgICBzdGF0ZSAtIDEpKTsKKwkJCX0KKwkJCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCA2ODNiMTBmLi5kNjljYTUxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJZWxzZSBpZiAocmF0ZSAmJiByYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUF9HKQogCQljaGFubmVsX2ZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE0gfCBJRUVFODAyMTFfQ0hBTl8yR0haOwogCWVsc2UgaWYgKHJhdGUpCi0JCWNoYW5uZWxfZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fT0ZETSB8IElFRUU4MDIxMV9DSEFOXzJHSFo7CisJCWNoYW5uZWxfZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fQ0NLIHwgSUVFRTgwMjExX0NIQU5fMkdIWjsKIAllbHNlCiAJCWNoYW5uZWxfZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fMkdIWjsKIAlwdXRfdW5hbGlnbmVkX2xlMTYoY2hhbm5lbF9mbGFncywgcG9zKTsKZGlmZiAtLWdpdCBhL25ldC9tcGxzL21wbHNfZ3NvLmMgYi9uZXQvbXBscy9tcGxzX2dzby5jCmluZGV4IGNhMjc4Mzc5Li4zNDkyOTVkIDEwMDY0NAotLS0gYS9uZXQvbXBscy9tcGxzX2dzby5jCisrKyBiL25ldC9tcGxzL21wbHNfZ3NvLmMKQEAgLTMxLDEwICszMSw3IEBACiAJCQkJICBTS0JfR1NPX1RDUFY2IHwKIAkJCQkgIFNLQl9HU09fVURQIHwKIAkJCQkgIFNLQl9HU09fRE9ER1kgfAotCQkJCSAgU0tCX0dTT19UQ1BfRUNOIHwKLQkJCQkgIFNLQl9HU09fR1JFIHwKLQkJCQkgIFNLQl9HU09fR1JFX0NTVU0gfAotCQkJCSAgU0tCX0dTT19JUElQKSkpCisJCQkJICBTS0JfR1NPX1RDUF9FQ04pKSkKIAkJZ290byBvdXQ7CiAKIAkvKiBTZXR1cCBpbm5lciBTS0IuICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMKaW5kZXggMWQ1MzQxZi4uNWQzZGFhZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYwpAQCAtMTgzLDYgKzE4Myw4IEBACiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCXN0cnVjdCBuZXQgKm5ldDsKIAorCSpkaWZmID0gMDsKKwogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiAJLyogVGhpcyBhcHBsaWNhdGlvbiBoZWxwZXIgZG9lc24ndCB3b3JrIHdpdGggSVB2NiB5ZXQsCiAJICogc28gdHVybiB0aGlzIGludG8gYSBuby1vcCBmb3IgSVB2NiBwYWNrZXRzCkBAIC0xOTEsOCArMTkzLDYgQEAKIAkJcmV0dXJuIDE7CiAjZW5kaWYKIAotCSpkaWZmID0gMDsKLQogCS8qIE9ubHkgdXNlZnVsIGZvciBlc3RhYmxpc2hlZCBzZXNzaW9ucyAqLwogCWlmIChjcC0+c3RhdGUgIT0gSVBfVlNfVENQX1NfRVNUQUJMSVNIRUQpCiAJCXJldHVybiAxOwpAQCAtMzIyLDYgKzMyMiw5IEBACiAJc3RydWN0IGlwX3ZzX2Nvbm4gKm5fY3A7CiAJc3RydWN0IG5ldCAqbmV0OwogCisJLyogbm8gZGlmZiByZXF1aXJlZCBmb3IgaW5jb21pbmcgcGFja2V0cyAqLworCSpkaWZmID0gMDsKKwogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiAJLyogVGhpcyBhcHBsaWNhdGlvbiBoZWxwZXIgZG9lc24ndCB3b3JrIHdpdGggSVB2NiB5ZXQsCiAJICogc28gdHVybiB0aGlzIGludG8gYSBuby1vcCBmb3IgSVB2NiBwYWNrZXRzCkBAIC0zMzAsOSArMzMzLDYgQEAKIAkJcmV0dXJuIDE7CiAjZW5kaWYKIAotCS8qIG5vIGRpZmYgcmVxdWlyZWQgZm9yIGluY29taW5nIHBhY2tldHMgKi8KLQkqZGlmZiA9IDA7Ci0KIAkvKiBPbmx5IHVzZWZ1bCBmb3IgZXN0YWJsaXNoZWQgc2Vzc2lvbnMgKi8KIAlpZiAoY3AtPnN0YXRlICE9IElQX1ZTX1RDUF9TX0VTVEFCTElTSEVEKQogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBhMTE2NzQ4Li40NmQxYjI2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC02MTEsMTYgKzYxMSwxNSBAQAogCSAqLwogCU5GX0NUX0FTU0VSVCghbmZfY3RfaXNfY29uZmlybWVkKGN0KSk7CiAJcHJfZGVidWcoIkNvbmZpcm1pbmcgY29ubnRyYWNrICVwXG4iLCBjdCk7Ci0JLyogV2UgaGF2ZSB0byBjaGVjayB0aGUgRFlJTkcgZmxhZyBpbnNpZGUgdGhlIGxvY2sgdG8gcHJldmVudAotCSAgIGEgcmFjZSBhZ2FpbnN0IG5mX2N0X2dldF9uZXh0X2NvcnBzZSgpIHBvc3NpYmx5IGNhbGxlZCBmcm9tCi0JICAgdXNlciBjb250ZXh0LCBlbHNlIHdlIGluc2VydCBhbiBhbHJlYWR5ICdkZWFkJyBoYXNoLCBibG9ja2luZwotCSAgIGZ1cnRoZXIgdXNlIG9mIHRoYXQgcGFydGljdWxhciBjb25uZWN0aW9uIC1KTSAqLworCS8qIFdlIGhhdmUgdG8gY2hlY2sgdGhlIERZSU5HIGZsYWcgYWZ0ZXIgdW5saW5rIHRvIHByZXZlbnQKKwkgKiBhIHJhY2UgYWdhaW5zdCBuZl9jdF9nZXRfbmV4dF9jb3Jwc2UoKSBwb3NzaWJseSBjYWxsZWQgZnJvbQorCSAqIHVzZXIgY29udGV4dCwgZWxzZSB3ZSBpbnNlcnQgYW4gYWxyZWFkeSAnZGVhZCcgaGFzaCwgYmxvY2tpbmcKKwkgKiBmdXJ0aGVyIHVzZSBvZiB0aGF0IHBhcnRpY3VsYXIgY29ubmVjdGlvbiAtSk0uCisJICovCisJbmZfY3RfZGVsX2Zyb21fZHlpbmdfb3JfdW5jb25maXJtZWRfbGlzdChjdCk7CiAKLQlpZiAodW5saWtlbHkobmZfY3RfaXNfZHlpbmcoY3QpKSkgewotCQluZl9jb25udHJhY2tfZG91YmxlX3VubG9jayhoYXNoLCByZXBseV9oYXNoKTsKLQkJbG9jYWxfYmhfZW5hYmxlKCk7Ci0JCXJldHVybiBORl9BQ0NFUFQ7Ci0JfQorCWlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhjdCkpKQorCQlnb3RvIG91dDsKIAogCS8qIFNlZSBpZiB0aGVyZSdzIG9uZSBpbiB0aGUgbGlzdCBhbHJlYWR5LCBpbmNsdWRpbmcgcmV2ZXJzZToKIAkgICBOQVQgY291bGQgaGF2ZSBncmFiYmVkIGl0IHdpdGhvdXQgcmVhbGl6aW5nLCBzaW5jZSB3ZSdyZQpAQCAtNjM2LDggKzYzNSw2IEBACiAJCSAgICB6b25lID09IG5mX2N0X3pvbmUobmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKSkpCiAJCQlnb3RvIG91dDsKIAotCW5mX2N0X2RlbF9mcm9tX2R5aW5nX29yX3VuY29uZmlybWVkX2xpc3QoY3QpOwotCiAJLyogVGltZXIgcmVsYXRpdmUgdG8gY29uZmlybWF0aW9uIHRpbWUsIG5vdCBvcmlnaW5hbAogCSAgIHNldHRpbmcgdGltZSwgb3RoZXJ3aXNlIHdlJ2QgZ2V0IHRpbWVyIHdyYXAgaW4KIAkgICB3ZWlyZCBkZWxheSBjYXNlcy4gKi8KQEAgLTY3Myw2ICs2NzAsNyBAQAogCXJldHVybiBORl9BQ0NFUFQ7CiAKIG91dDoKKwluZl9jdF9hZGRfdG9fZHlpbmdfbGlzdChjdCk7CiAJbmZfY29ubnRyYWNrX2RvdWJsZV91bmxvY2soaGFzaCwgcmVwbHlfaGFzaCk7CiAJTkZfQ1RfU1RBVF9JTkMobmV0LCBpbnNlcnRfZmFpbGVkKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggMTI5YThkYWE0Li4zYjNkZGI0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwpAQCAtNzEzLDE2ICs3MTMsMTIgQEAKIAlzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbiwgKm5jOwogCXN0cnVjdCBuZnRfc2V0ICpzZXQsICpuczsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFpbiwgbmMsICZjdHgtPnRhYmxlLT5jaGFpbnMsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYWluLCAmY3R4LT50YWJsZS0+Y2hhaW5zLCBsaXN0KSB7CiAJCWN0eC0+Y2hhaW4gPSBjaGFpbjsKIAogCQllcnIgPSBuZnRfZGVscnVsZV9ieV9jaGFpbihjdHgpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gb3V0OwotCi0JCWVyciA9IG5mdF9kZWxjaGFpbihjdHgpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0OwogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5zLCAmY3R4LT50YWJsZS0+c2V0cywgbGlzdCkgewpAQCAtNzM1LDYgKzczMSwxNCBAQAogCQkJZ290byBvdXQ7CiAJfQogCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoYWluLCBuYywgJmN0eC0+dGFibGUtPmNoYWlucywgbGlzdCkgeworCQljdHgtPmNoYWluID0gY2hhaW47CisKKwkJZXJyID0gbmZ0X2RlbGNoYWluKGN0eCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCiAJZXJyID0gbmZ0X2RlbHRhYmxlKGN0eCk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCmluZGV4IDEzYzJlMTcuLmM0MjFkOTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwpAQCAtMzIxLDcgKzMyMSw4IEBACiAJCW5saCA9IG5sbXNnX2hkcihza2IpOwogCQllcnIgPSAwOwogCi0JCWlmIChubGgtPm5sbXNnX2xlbiA8IE5MTVNHX0hEUkxFTikgeworCQlpZiAobmxtc2dfbGVuKG5saCkgPCBzaXplb2Yoc3RydWN0IG5mZ2VubXNnKSB8fAorCQkgICAgc2tiLT5sZW4gPCBubGgtPm5sbXNnX2xlbikgewogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gYWNrOwogCQl9CkBAIC00NjMsMTMgKzQ2NCwxMyBAQAogfQogCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKLXN0YXRpYyBpbnQgbmZuZXRsaW5rX2JpbmQoaW50IGdyb3VwKQorc3RhdGljIGludCBuZm5ldGxpbmtfYmluZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cCkKIHsKIAljb25zdCBzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSAqc3M7CiAJaW50IHR5cGU7CiAKIAlpZiAoZ3JvdXAgPD0gTkZOTEdSUF9OT05FIHx8IGdyb3VwID4gTkZOTEdSUF9NQVgpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKIAogCXR5cGUgPSBuZm5sX2dyb3VwMnR5cGVbZ3JvdXBdOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9uYXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X25hdC5jCmluZGV4IGFmZTJiMGIuLmFmZjU0ZmIxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9uYXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9uYXQuYwpAQCAtNjUsMTAgKzY1LDEwIEBACiAJfQogCiAJaWYgKHByaXYtPnNyZWdfcHJvdG9fbWluKSB7Ci0JCXJhbmdlLm1pbl9wcm90by5hbGwgPSAoX19mb3JjZSBfX2JlMTYpCi0JCQkJCWRhdGFbcHJpdi0+c3JlZ19wcm90b19taW5dLmRhdGFbMF07Ci0JCXJhbmdlLm1heF9wcm90by5hbGwgPSAoX19mb3JjZSBfX2JlMTYpCi0JCQkJCWRhdGFbcHJpdi0+c3JlZ19wcm90b19tYXhdLmRhdGFbMF07CisJCXJhbmdlLm1pbl9wcm90by5hbGwgPQorCQkJKihfX2JlMTYgKikmZGF0YVtwcml2LT5zcmVnX3Byb3RvX21pbl0uZGF0YVswXTsKKwkJcmFuZ2UubWF4X3Byb3RvLmFsbCA9CisJCQkqKF9fYmUxNiAqKSZkYXRhW3ByaXYtPnNyZWdfcHJvdG9fbWF4XS5kYXRhWzBdOwogCQlyYW5nZS5mbGFncyB8PSBORl9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDA3NGNmM2UuLjAyZmRkZTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yaGFzaHRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuZXRsaW5rLmg+CiAKICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CkBAIC0xMDkxLDggKzEwOTIsMTIgQEAKIAltdXRleF91bmxvY2soJm5sX3NrX2hhc2hfbG9jayk7CiAKIAluZXRsaW5rX3RhYmxlX2dyYWIoKTsKLQlpZiAobmxrX3NrKHNrKS0+c3Vic2NyaXB0aW9ucykKKwlpZiAobmxrX3NrKHNrKS0+c3Vic2NyaXB0aW9ucykgewogCQlfX3NrX2RlbF9iaW5kX25vZGUoc2spOworCQluZXRsaW5rX3VwZGF0ZV9saXN0ZW5lcnMoc2spOworCX0KKwlpZiAoc2stPnNrX3Byb3RvY29sID09IE5FVExJTktfR0VORVJJQykKKwkJYXRvbWljX2luYygmZ2VubF9za19kZXN0cnVjdGluZ19jbnQpOwogCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7CiB9CiAKQEAgLTExMzksOCArMTE0NCw4IEBACiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlID0gTlVMTDsKIAlzdHJ1Y3QgbXV0ZXggKmNiX211dGV4OwogCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sazsKLQlpbnQgKCpiaW5kKShpbnQgZ3JvdXApOwotCXZvaWQgKCp1bmJpbmQpKGludCBncm91cCk7CisJaW50ICgqYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOworCXZvaWQgKCp1bmJpbmQpKHN0cnVjdCBuZXQgKm5ldCwgaW50IGdyb3VwKTsKIAlpbnQgZXJyID0gMDsKIAogCXNvY2stPnN0YXRlID0gU1NfVU5DT05ORUNURUQ7CkBAIC0xMjA5LDYgKzEyMTQsMjAgQEAKIAkgKiB3aWxsIGJlIHB1cmdlZC4KIAkgKi8KIAorCS8qIG11c3Qgbm90IGFjcXVpcmUgbmV0bGlua190YWJsZV9sb2NrIGluIGFueSB3YXkgYWdhaW4gYmVmb3JlIHVuYmluZAorCSAqIGFuZCBub3RpZnlpbmcgZ2VuZXRsaW5rIGlzIGRvbmUgYXMgb3RoZXJ3aXNlIGl0IG1pZ2h0IGRlYWRsb2NrCisJICovCisJaWYgKG5say0+bmV0bGlua191bmJpbmQpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IG5say0+bmdyb3VwczsgaSsrKQorCQkJaWYgKHRlc3RfYml0KGksIG5say0+Z3JvdXBzKSkKKwkJCQlubGstPm5ldGxpbmtfdW5iaW5kKHNvY2tfbmV0KHNrKSwgaSArIDEpOworCX0KKwlpZiAoc2stPnNrX3Byb3RvY29sID09IE5FVExJTktfR0VORVJJQyAmJgorCSAgICBhdG9taWNfZGVjX3JldHVybigmZ2VubF9za19kZXN0cnVjdGluZ19jbnQpID09IDApCisJCXdha2VfdXAoJmdlbmxfc2tfZGVzdHJ1Y3Rpbmdfd2FpdHEpOworCiAJc29jay0+c2sgPSBOVUxMOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZV9hbGwoJm5say0+d2FpdCk7CiAKQEAgLTEyMjYsOCArMTI0NSw4IEBACiAKIAltb2R1bGVfcHV0KG5say0+bW9kdWxlKTsKIAotCW5ldGxpbmtfdGFibGVfZ3JhYigpOwogCWlmIChuZXRsaW5rX2lzX2tlcm5lbChzaykpIHsKKwkJbmV0bGlua190YWJsZV9ncmFiKCk7CiAJCUJVR19PTihubF90YWJsZVtzay0+c2tfcHJvdG9jb2xdLnJlZ2lzdGVyZWQgPT0gMCk7CiAJCWlmICgtLW5sX3RhYmxlW3NrLT5za19wcm90b2NvbF0ucmVnaXN0ZXJlZCA9PSAwKSB7CiAJCQlzdHJ1Y3QgbGlzdGVuZXJzICpvbGQ7CkBAIC0xMjQxLDEwICsxMjYwLDggQEAKIAkJCW5sX3RhYmxlW3NrLT5za19wcm90b2NvbF0uZmxhZ3MgPSAwOwogCQkJbmxfdGFibGVbc2stPnNrX3Byb3RvY29sXS5yZWdpc3RlcmVkID0gMDsKIAkJfQotCX0gZWxzZSBpZiAobmxrLT5zdWJzY3JpcHRpb25zKSB7Ci0JCW5ldGxpbmtfdXBkYXRlX2xpc3RlbmVycyhzayk7CisJCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7CiAJfQotCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7CiAKIAlrZnJlZShubGstPmdyb3Vwcyk7CiAJbmxrLT5ncm91cHMgPSBOVUxMOwpAQCAtMTQxMCw5ICsxNDI3LDEwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgbmV0bGlua191bmJpbmQoaW50IGdyb3VwLCBsb25nIHVuc2lnbmVkIGludCBncm91cHMsCi0JCQkgICBzdHJ1Y3QgbmV0bGlua19zb2NrICpubGspCitzdGF0aWMgdm9pZCBuZXRsaW5rX3VuZG9fYmluZChpbnQgZ3JvdXAsIGxvbmcgdW5zaWduZWQgaW50IGdyb3VwcywKKwkJCSAgICAgIHN0cnVjdCBzb2NrICpzaykKIHsKKwlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2soc2spOwogCWludCB1bmRvOwogCiAJaWYgKCFubGstPm5ldGxpbmtfdW5iaW5kKQpAQCAtMTQyMCw3ICsxNDM4LDcgQEAKIAogCWZvciAodW5kbyA9IDA7IHVuZG8gPCBncm91cDsgdW5kbysrKQogCQlpZiAodGVzdF9iaXQodW5kbywgJmdyb3VwcykpCi0JCQlubGstPm5ldGxpbmtfdW5iaW5kKHVuZG8pOworCQkJbmxrLT5uZXRsaW5rX3VuYmluZChzb2NrX25ldChzayksIHVuZG8pOwogfQogCiBzdGF0aWMgaW50IG5ldGxpbmtfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCkBAIC0xNDU4LDEwICsxNDc2LDEwIEBACiAJCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IG5say0+bmdyb3VwczsgZ3JvdXArKykgewogCQkJaWYgKCF0ZXN0X2JpdChncm91cCwgJmdyb3VwcykpCiAJCQkJY29udGludWU7Ci0JCQllcnIgPSBubGstPm5ldGxpbmtfYmluZChncm91cCk7CisJCQllcnIgPSBubGstPm5ldGxpbmtfYmluZChuZXQsIGdyb3VwKTsKIAkJCWlmICghZXJyKQogCQkJCWNvbnRpbnVlOwotCQkJbmV0bGlua191bmJpbmQoZ3JvdXAsIGdyb3VwcywgbmxrKTsKKwkJCW5ldGxpbmtfdW5kb19iaW5kKGdyb3VwLCBncm91cHMsIHNrKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9CkBAIC0xNDcxLDcgKzE0ODksNyBAQAogCQkJbmV0bGlua19pbnNlcnQoc2ssIG5ldCwgbmxhZGRyLT5ubF9waWQpIDoKIAkJCW5ldGxpbmtfYXV0b2JpbmQoc29jayk7CiAJCWlmIChlcnIpIHsKLQkJCW5ldGxpbmtfdW5iaW5kKG5say0+bmdyb3VwcywgZ3JvdXBzLCBubGspOworCQkJbmV0bGlua191bmRvX2JpbmQobmxrLT5uZ3JvdXBzLCBncm91cHMsIHNrKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9CkBAIC0yMTIyLDcgKzIxNDAsNyBAQAogCQlpZiAoIXZhbCB8fCB2YWwgLSAxID49IG5say0+bmdyb3VwcykKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAob3B0bmFtZSA9PSBORVRMSU5LX0FERF9NRU1CRVJTSElQICYmIG5say0+bmV0bGlua19iaW5kKSB7Ci0JCQllcnIgPSBubGstPm5ldGxpbmtfYmluZCh2YWwpOworCQkJZXJyID0gbmxrLT5uZXRsaW5rX2JpbmQoc29ja19uZXQoc2spLCB2YWwpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0yMTMxLDcgKzIxNDksNyBAQAogCQkJCQkgb3B0bmFtZSA9PSBORVRMSU5LX0FERF9NRU1CRVJTSElQKTsKIAkJbmV0bGlua190YWJsZV91bmdyYWIoKTsKIAkJaWYgKG9wdG5hbWUgPT0gTkVUTElOS19EUk9QX01FTUJFUlNISVAgJiYgbmxrLT5uZXRsaW5rX3VuYmluZCkKLQkJCW5say0+bmV0bGlua191bmJpbmQodmFsKTsKKwkJCW5say0+bmV0bGlua191bmJpbmQoc29ja19uZXQoc2spLCB2YWwpOwogCiAJCWVyciA9IDA7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5oIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5oCmluZGV4IGIyMGExNzMuLmYxYzMxYjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuaAorKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9BRl9ORVRMSU5LX0gKIAogI2luY2x1ZGUgPGxpbnV4L3JoYXNodGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjZGVmaW5lIE5MR1JQU1ooeCkJKEFMSUdOKHgsIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgpIC8gOCkKQEAgLTM5LDggKzQwLDggQEAKIAlzdHJ1Y3QgbXV0ZXgJCSpjYl9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXgJCWNiX2RlZl9tdXRleDsKIAl2b2lkCQkJKCpuZXRsaW5rX3Jjdikoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0JaW50CQkJKCpuZXRsaW5rX2JpbmQpKGludCBncm91cCk7Ci0Jdm9pZAkJCSgqbmV0bGlua191bmJpbmQpKGludCBncm91cCk7CisJaW50CQkJKCpuZXRsaW5rX2JpbmQpKHN0cnVjdCBuZXQgKm5ldCwgaW50IGdyb3VwKTsKKwl2b2lkCQkJKCpuZXRsaW5rX3VuYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOwogCXN0cnVjdCBtb2R1bGUJCSptb2R1bGU7CiAjaWZkZWYgQ09ORklHX05FVExJTktfTU1BUAogCXN0cnVjdCBtdXRleAkJcGdfdmVjX2xvY2s7CkBAIC02NSw4ICs2Niw4IEBACiAJdW5zaWduZWQgaW50CQlncm91cHM7CiAJc3RydWN0IG11dGV4CQkqY2JfbXV0ZXg7CiAJc3RydWN0IG1vZHVsZQkJKm1vZHVsZTsKLQlpbnQJCQkoKmJpbmQpKGludCBncm91cCk7Ci0Jdm9pZAkJCSgqdW5iaW5kKShpbnQgZ3JvdXApOworCWludAkJCSgqYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOworCXZvaWQJCQkoKnVuYmluZCkoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApOwogCWJvb2wJCQkoKmNvbXBhcmUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNvY2spOwogCWludAkJCXJlZ2lzdGVyZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwppbmRleCA3NjM5M2YyLi5lZTU3NDU5IDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwpAQCAtMjMsNiArMjMsOSBAQAogc3RhdGljIERFRklORV9NVVRFWChnZW5sX211dGV4KTsgLyogc2VyaWFsaXphdGlvbiBvZiBtZXNzYWdlIHByb2Nlc3NpbmcgKi8KIHN0YXRpYyBERUNMQVJFX1JXU0VNKGNiX2xvY2spOwogCithdG9taWNfdCBnZW5sX3NrX2Rlc3RydWN0aW5nX2NudCA9IEFUT01JQ19JTklUKDApOworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoZ2VubF9za19kZXN0cnVjdGluZ193YWl0cSk7CisKIHZvaWQgZ2VubF9sb2NrKHZvaWQpCiB7CiAJbXV0ZXhfbG9jaygmZ2VubF9tdXRleCk7CkBAIC00MzUsMTUgKzQzOCwxOCBAQAogCiAJZ2VubF9sb2NrX2FsbCgpOwogCi0JZ2VubF91bnJlZ2lzdGVyX21jX2dyb3VwcyhmYW1pbHkpOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyYywgZ2VubF9mYW1pbHlfY2hhaW4oZmFtaWx5LT5pZCksIGZhbWlseV9saXN0KSB7CiAJCWlmIChmYW1pbHktPmlkICE9IHJjLT5pZCB8fCBzdHJjbXAocmMtPm5hbWUsIGZhbWlseS0+bmFtZSkpCiAJCQljb250aW51ZTsKIAorCQlnZW5sX3VucmVnaXN0ZXJfbWNfZ3JvdXBzKGZhbWlseSk7CisKIAkJbGlzdF9kZWwoJnJjLT5mYW1pbHlfbGlzdCk7CiAJCWZhbWlseS0+bl9vcHMgPSAwOwotCQlnZW5sX3VubG9ja19hbGwoKTsKKwkJdXBfd3JpdGUoJmNiX2xvY2spOworCQl3YWl0X2V2ZW50KGdlbmxfc2tfZGVzdHJ1Y3Rpbmdfd2FpdHEsCisJCQkgICBhdG9taWNfcmVhZCgmZ2VubF9za19kZXN0cnVjdGluZ19jbnQpID09IDApOworCQlnZW5sX3VubG9jaygpOwogCiAJCWtmcmVlKGZhbWlseS0+YXR0cmJ1Zik7CiAJCWdlbmxfY3RybF9ldmVudChDVFJMX0NNRF9ERUxGQU1JTFksIGZhbWlseSwgTlVMTCwgMCk7CkBAIC05ODMsMTEgKzk4OSw2MyBAQAogCXsgLm5hbWUgPSAibm90aWZ5IiwgfSwKIH07CiAKK3N0YXRpYyBpbnQgZ2VubF9iaW5kKHN0cnVjdCBuZXQgKm5ldCwgaW50IGdyb3VwKQoreworCWludCBpLCBlcnIgPSAtRU5PRU5UOworCisJZG93bl9yZWFkKCZjYl9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgR0VOTF9GQU1fVEFCX1NJWkU7IGkrKykgeworCQlzdHJ1Y3QgZ2VubF9mYW1pbHkgKmY7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCBnZW5sX2ZhbWlseV9jaGFpbihpKSwgZmFtaWx5X2xpc3QpIHsKKwkJCWlmIChncm91cCA+PSBmLT5tY2dycF9vZmZzZXQgJiYKKwkJCSAgICBncm91cCA8IGYtPm1jZ3JwX29mZnNldCArIGYtPm5fbWNncnBzKSB7CisJCQkJaW50IGZhbV9ncnAgPSBncm91cCAtIGYtPm1jZ3JwX29mZnNldDsKKworCQkJCWlmICghZi0+bmV0bnNvayAmJiBuZXQgIT0gJmluaXRfbmV0KQorCQkJCQllcnIgPSAtRU5PRU5UOworCQkJCWVsc2UgaWYgKGYtPm1jYXN0X2JpbmQpCisJCQkJCWVyciA9IGYtPm1jYXN0X2JpbmQobmV0LCBmYW1fZ3JwKTsKKwkJCQllbHNlCisJCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJdXBfcmVhZCgmY2JfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBnZW5sX3VuYmluZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cCkKK3sKKwlpbnQgaTsKKworCWRvd25fcmVhZCgmY2JfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IEdFTkxfRkFNX1RBQl9TSVpFOyBpKyspIHsKKwkJc3RydWN0IGdlbmxfZmFtaWx5ICpmOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgZ2VubF9mYW1pbHlfY2hhaW4oaSksIGZhbWlseV9saXN0KSB7CisJCQlpZiAoZ3JvdXAgPj0gZi0+bWNncnBfb2Zmc2V0ICYmCisJCQkgICAgZ3JvdXAgPCBmLT5tY2dycF9vZmZzZXQgKyBmLT5uX21jZ3JwcykgeworCQkJCWludCBmYW1fZ3JwID0gZ3JvdXAgLSBmLT5tY2dycF9vZmZzZXQ7CisKKwkJCQlpZiAoZi0+bWNhc3RfdW5iaW5kKQorCQkJCQlmLT5tY2FzdF91bmJpbmQobmV0LCBmYW1fZ3JwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwl1cF9yZWFkKCZjYl9sb2NrKTsKK30KKwogc3RhdGljIGludCBfX25ldF9pbml0IGdlbmxfcGVybmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZXRsaW5rX2tlcm5lbF9jZmcgY2ZnID0gewogCQkuaW5wdXQJCT0gZ2VubF9yY3YsCiAJCS5mbGFncwkJPSBOTF9DRkdfRl9OT05ST09UX1JFQ1YsCisJCS5iaW5kCQk9IGdlbmxfYmluZCwKKwkJLnVuYmluZAkJPSBnZW5sX3VuYmluZCwKIAl9OwogCiAJLyogd2UnbGwgYnVtcCB0aGUgZ3JvdXAgbnVtYmVyIHJpZ2h0IGFmdGVyd2FyZHMgKi8KZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMgYi9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jCmluZGV4IDc2NGZkYzMuLjc3MDA2NGMgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYwpAQCAtMTQ3LDcgKzE0Nyw4IEBACiAJaGRyID0gZXRoX2hkcihza2IpOwogCWhkci0+aF9wcm90byA9IG1wbHMtPm1wbHNfZXRoZXJ0eXBlOwogCi0Jc2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIHNrYi0+cHJvdG9jb2wpOworCWlmICghc2tiLT5pbm5lcl9wcm90b2NvbCkKKwkJc2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIHNrYi0+cHJvdG9jb2wpOwogCXNrYi0+cHJvdG9jb2wgPSBtcGxzLT5tcGxzX2V0aGVydHlwZTsKIAogCWludmFsaWRhdGVfZmxvd19rZXkoa2V5KTsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKaW5kZXggMzMyYjVhMC4uYjA3MzQ5ZSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKQEAgLTgzLDggKzgzLDcgQEAKIAkJCSAgICB1bnNpZ25lZCBpbnQgZ3JvdXApCiB7CiAJcmV0dXJuIGluZm8tPm5saGRyLT5ubG1zZ19mbGFncyAmIE5MTV9GX0VDSE8gfHwKLQkgICAgICAgZ2VubF9oYXNfbGlzdGVuZXJzKGZhbWlseSwgZ2VubF9pbmZvX25ldChpbmZvKS0+Z2VubF9zb2NrLAotCQkJCSAgZ3JvdXApOworCSAgICAgICBnZW5sX2hhc19saXN0ZW5lcnMoZmFtaWx5LCBnZW5sX2luZm9fbmV0KGluZm8pLCBncm91cCk7CiB9CiAKIHN0YXRpYyB2b2lkIG92c19ub3RpZnkoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksCkBAIC01MjUsNyArNTI0LDcgQEAKIAlzdHJ1Y3QgdnBvcnQgKmlucHV0X3Zwb3J0OwogCWludCBsZW47CiAJaW50IGVycjsKLQlib29sIGxvZyA9ICFhW09WU19GTE9XX0FUVFJfUFJPQkVdOworCWJvb2wgbG9nID0gIWFbT1ZTX1BBQ0tFVF9BVFRSX1BST0JFXTsKIAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKCFhW09WU19QQUNLRVRfQVRUUl9QQUNLRVRdIHx8ICFhW09WU19QQUNLRVRfQVRUUl9LRVldIHx8CkBAIC02MTEsNiArNjEwLDcgQEAKIAlbT1ZTX1BBQ0tFVF9BVFRSX1BBQ0tFVF0gPSB7IC5sZW4gPSBFVEhfSExFTiB9LAogCVtPVlNfUEFDS0VUX0FUVFJfS0VZXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCiAJW09WU19QQUNLRVRfQVRUUl9BQ1RJT05TXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisJW09WU19QQUNLRVRfQVRUUl9QUk9CRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9vcHMgZHBfcGFja2V0X2dlbmxfb3BzW10gPSB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuYwppbmRleCA3MGJlZjJhLi5kYTJmYWUwIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jCisrKyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmMKQEAgLTcwLDYgKzcwLDcgQEAKIHsKIAlzdHJ1Y3QgZmxvd19zdGF0cyAqc3RhdHM7CiAJaW50IG5vZGUgPSBudW1hX25vZGVfaWQoKTsKKwlpbnQgbGVuID0gc2tiLT5sZW4gKyAodmxhbl90eF90YWdfcHJlc2VudChza2IpID8gVkxBTl9ITEVOIDogMCk7CiAKIAlzdGF0cyA9IHJjdV9kZXJlZmVyZW5jZShmbG93LT5zdGF0c1tub2RlXSk7CiAKQEAgLTEwNSw3ICsxMDYsNyBAQAogCQkJCWlmIChsaWtlbHkobmV3X3N0YXRzKSkgewogCQkJCQluZXdfc3RhdHMtPnVzZWQgPSBqaWZmaWVzOwogCQkJCQluZXdfc3RhdHMtPnBhY2tldF9jb3VudCA9IDE7Ci0JCQkJCW5ld19zdGF0cy0+Ynl0ZV9jb3VudCA9IHNrYi0+bGVuOworCQkJCQluZXdfc3RhdHMtPmJ5dGVfY291bnQgPSBsZW47CiAJCQkJCW5ld19zdGF0cy0+dGNwX2ZsYWdzID0gdGNwX2ZsYWdzOwogCQkJCQlzcGluX2xvY2tfaW5pdCgmbmV3X3N0YXRzLT5sb2NrKTsKIApAQCAtMTIwLDcgKzEyMSw3IEBACiAKIAlzdGF0cy0+dXNlZCA9IGppZmZpZXM7CiAJc3RhdHMtPnBhY2tldF9jb3VudCsrOwotCXN0YXRzLT5ieXRlX2NvdW50ICs9IHNrYi0+bGVuOworCXN0YXRzLT5ieXRlX2NvdW50ICs9IGxlbjsKIAlzdGF0cy0+dGNwX2ZsYWdzIHw9IHRjcF9mbGFnczsKIHVubG9jazoKIAlzcGluX3VubG9jaygmc3RhdHMtPmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jCmluZGV4IDk2NDVhMjEuLmQxZWVjZjcgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMKQEAgLTE3NTMsNyArMTc1Myw2IEBACiAJCQkJICBfX2JlMTYgZXRoX3R5cGUsIF9fYmUxNiB2bGFuX3RjaSwgYm9vbCBsb2cpCiB7CiAJY29uc3Qgc3RydWN0IG5sYXR0ciAqYTsKLQlib29sIG91dF90bmxfcG9ydCA9IGZhbHNlOwogCWludCByZW0sIGVycjsKIAogCWlmIChkZXB0aCA+PSBTQU1QTEVfQUNUSU9OX0RFUFRIKQpAQCAtMTc5Niw4ICsxNzk1LDYgQEAKIAkJY2FzZSBPVlNfQUNUSU9OX0FUVFJfT1VUUFVUOgogCQkJaWYgKG5sYV9nZXRfdTMyKGEpID49IERQX01BWF9QT1JUUykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW91dF90bmxfcG9ydCA9IGZhbHNlOwotCiAJCQlicmVhazsKIAogCQljYXNlIE9WU19BQ1RJT05fQVRUUl9IQVNIOiB7CkBAIC0xODMyLDEyICsxODI5LDYgQEAKIAkJY2FzZSBPVlNfQUNUSU9OX0FUVFJfUFVTSF9NUExTOiB7CiAJCQljb25zdCBzdHJ1Y3Qgb3ZzX2FjdGlvbl9wdXNoX21wbHMgKm1wbHMgPSBubGFfZGF0YShhKTsKIAotCQkJLyogTmV0d29ya2luZyBzdGFjayBkbyBub3QgYWxsb3cgc2ltdWx0YW5lb3VzIFR1bm5lbAotCQkJICogYW5kIE1QTFMgR1NPLgotCQkJICovCi0JCQlpZiAob3V0X3RubF9wb3J0KQotCQkJCXJldHVybiAtRUlOVkFMOwotCiAJCQlpZiAoIWV0aF9wX21wbHMobXBscy0+bXBsc19ldGhlcnR5cGUpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJLyogUHJvaGliaXQgcHVzaCBNUExTIG90aGVyIHRoYW4gdG8gYSB3aGl0ZSBsaXN0CkBAIC0xODczLDExICsxODY0LDkgQEAKIAogCQljYXNlIE9WU19BQ1RJT05fQVRUUl9TRVQ6CiAJCQllcnIgPSB2YWxpZGF0ZV9zZXQoYSwga2V5LCBzZmEsCi0JCQkJCSAgICZvdXRfdG5sX3BvcnQsIGV0aF90eXBlLCBsb2cpOworCQkJCQkgICAmc2tpcF9jb3B5LCBldGhfdHlwZSwgbG9nKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKLQotCQkJc2tpcF9jb3B5ID0gb3V0X3RubF9wb3J0OwogCQkJYnJlYWs7CiAKIAkJY2FzZSBPVlNfQUNUSU9OX0FUVFJfU0FNUExFOgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LWdlbmV2ZS5jIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LWdlbmV2ZS5jCmluZGV4IDM0N2ZhMjMuLjQ4NDg2NGQgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC92cG9ydC1nZW5ldmUuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ2VuZXZlLmMKQEAgLTIxOSw3ICsyMTksMTAgQEAKIAkJCSAgICAgIGZhbHNlKTsKIAlpZiAoZXJyIDwgMCkKIAkJaXBfcnRfcHV0KHJ0KTsKKwlyZXR1cm4gZXJyOworCiBlcnJvcjoKKwlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ3JlLmMgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ3JlLmMKaW5kZXggNmI2OWRmNS4uZDQxNjhjNDQgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC92cG9ydC1ncmUuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ3JlLmMKQEAgLTczLDcgKzczLDcgQEAKIAogCXNrYiA9IGdyZV9oYW5kbGVfb2ZmbG9hZHMoc2tiLCAhISh0dW5fa2V5LT50dW5fZmxhZ3MgJiBUVU5ORUxfQ1NVTSkpOwogCWlmIChJU19FUlIoc2tiKSkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBza2I7CiAKIAl0cGkuZmxhZ3MgPSBmaWx0ZXJfdG5sX2ZsYWdzKHR1bl9rZXktPnR1bl9mbGFncyk7CiAJdHBpLnByb3RvID0gaHRvbnMoRVRIX1BfVEVCKTsKQEAgLTE0NCw3ICsxNDQsNyBAQAogCiAJaWYgKHVubGlrZWx5KCFPVlNfQ0Ioc2tiKS0+ZWdyZXNzX3R1bl9pbmZvKSkgewogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGVycl9mcmVlX3NrYjsKIAl9CiAKIAl0dW5fa2V5ID0gJk9WU19DQihza2IpLT5lZ3Jlc3NfdHVuX2luZm8tPnR1bm5lbDsKQEAgLTE1Nyw4ICsxNTcsMTAgQEAKIAlmbC5mbG93aTRfcHJvdG8gPSBJUFBST1RPX0dSRTsKIAogCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZmbCk7Ci0JaWYgKElTX0VSUihydCkpCi0JCXJldHVybiBQVFJfRVJSKHJ0KTsKKwlpZiAoSVNfRVJSKHJ0KSkgeworCQllcnIgPSBQVFJfRVJSKHJ0KTsKKwkJZ290byBlcnJfZnJlZV9za2I7CisJfQogCiAJdHVubmVsX2hsZW4gPSBpcF9ncmVfY2FsY19obGVuKHR1bl9rZXktPnR1bl9mbGFncyk7CiAKQEAgLTE4Myw4ICsxODUsOSBAQAogCiAJLyogUHVzaCBUdW5uZWwgaGVhZGVyLiAqLwogCXNrYiA9IF9fYnVpbGRfaGVhZGVyKHNrYiwgdHVubmVsX2hsZW4pOwotCWlmICh1bmxpa2VseSghc2tiKSkgewotCQllcnIgPSAwOworCWlmIChJU19FUlIoc2tiKSkgeworCQllcnIgPSBQVFJfRVJSKHNrYik7CisJCXNrYiA9IE5VTEw7CiAJCWdvdG8gZXJyX2ZyZWVfcnQ7CiAJfQogCkBAIC0xOTgsNyArMjAxLDggQEAKIAkJCSAgICAgdHVuX2tleS0+aXB2NF90b3MsIHR1bl9rZXktPmlwdjRfdHRsLCBkZiwgZmFsc2UpOwogZXJyX2ZyZWVfcnQ6CiAJaXBfcnRfcHV0KHJ0KTsKLWVycm9yOgorZXJyX2ZyZWVfc2tiOgorCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC92cG9ydC12eGxhbi5jIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LXZ4bGFuLmMKaW5kZXggMzhmOTVhNS4uZDdjNDZiMyAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LXZ4bGFuLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LXZ4bGFuLmMKQEAgLTE4Nyw3ICsxODcsOSBAQAogCQkJICAgICBmYWxzZSk7CiAJaWYgKGVyciA8IDApCiAJCWlwX3J0X3B1dChydCk7CisJcmV0dXJuIGVycjsKIGVycm9yOgorCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC92cG9ydC5jIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmMKaW5kZXggOTU4NDUyNi4uMjAzNGM2ZCAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmMKKysrIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmMKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCXN0YXRzID0gdGhpc19jcHVfcHRyKHZwb3J0LT5wZXJjcHVfc3RhdHMpOwogCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnN0YXRzLT5zeW5jcCk7CiAJc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuICsgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSA/IFZMQU5fSExFTiA6IDApOwogCXU2NF9zdGF0c191cGRhdGVfZW5kKCZzdGF0cy0+c3luY3ApOwogCiAJT1ZTX0NCKHNrYiktPmlucHV0X3Zwb3J0ID0gdnBvcnQ7CkBAIC01MTksMTAgKzUxOSw5IEBACiAJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZzdGF0cy0+c3luY3ApOwogCX0gZWxzZSBpZiAoc2VudCA8IDApIHsKIAkJb3ZzX3Zwb3J0X3JlY29yZF9lcnJvcih2cG9ydCwgVlBPUlRfRV9UWF9FUlJPUik7Ci0JCWtmcmVlX3NrYihza2IpOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCW92c192cG9ydF9yZWNvcmRfZXJyb3IodnBvcnQsIFZQT1JUX0VfVFhfRFJPUFBFRCk7Ci0KKwl9CiAJcmV0dXJuIHNlbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGU1MmE0NDcuLjljZmUyZTEgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtNzg1LDYgKzc4NSw3IEBACiAKIAlzdHJ1Y3QgdHBhY2tldDNfaGRyICpsYXN0X3BrdDsKIAlzdHJ1Y3QgdHBhY2tldF9oZHJfdjEgKmgxID0gJnBiZDEtPmhkci5iaDE7CisJc3RydWN0IHNvY2sgKnNrID0gJnBvLT5zazsKIAogCWlmIChwby0+c3RhdHMuc3RhdHMzLnRwX2Ryb3BzKQogCQlzdGF0dXMgfD0gVFBfU1RBVFVTX0xPU0lORzsKQEAgLTgwOSw2ICs4MTAsOCBAQAogCS8qIEZsdXNoIHRoZSBibG9jayAqLwogCXByYl9mbHVzaF9ibG9jayhwa2MxLCBwYmQxLCBzdGF0dXMpOwogCisJc2stPnNrX2RhdGFfcmVhZHkoc2spOworCiAJcGtjMS0+a2FjdGl2ZV9ibGtfbnVtID0gR0VUX05FWFRfUFJCX0JMS19OVU0ocGtjMSk7CiB9CiAKQEAgLTIwNTIsMTIgKzIwNTUsMTIgQEAKIAlzbXBfd21iKCk7CiAjZW5kaWYKIAotCWlmIChwby0+dHBfdmVyc2lvbiA8PSBUUEFDS0VUX1YyKQorCWlmIChwby0+dHBfdmVyc2lvbiA8PSBUUEFDS0VUX1YyKSB7CiAJCV9fcGFja2V0X3NldF9zdGF0dXMocG8sIGgucmF3LCBzdGF0dXMpOwotCWVsc2UKKwkJc2stPnNrX2RhdGFfcmVhZHkoc2spOworCX0gZWxzZSB7CiAJCXByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoJnBvLT5yeF9yaW5nKTsKLQotCXNrLT5za19kYXRhX3JlYWR5KHNrKTsKKwl9CiAKIGRyb3Bfbl9yZXN0b3JlOgogCWlmIChza2JfaGVhZCAhPSBza2ItPmRhdGEgJiYgc2tiX3NoYXJlZChza2IpKSB7CkBAIC0yNTE0LDcgKzI1MTcsNyBAQAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKHNvY2stPnR5cGUgPT0gU09DS19ER1JBTSkgewogCQlvZmZzZXQgPSBkZXZfaGFyZF9oZWFkZXIoc2tiLCBkZXYsIG50b2hzKHByb3RvKSwgYWRkciwgTlVMTCwgbGVuKTsKLQkJaWYgKHVubGlrZWx5KG9mZnNldCkgPCAwKQorCQlpZiAodW5saWtlbHkob2Zmc2V0IDwgMCkpCiAJCQlnb3RvIG91dF9mcmVlOwogCX0gZWxzZSB7CiAJCWlmIChsbF9oZWFkZXJfdHJ1bmNhdGVkKGRldiwgbGVuKSkKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYnBmLmMgYi9uZXQvc2NoZWQvY2xzX2JwZi5jCmluZGV4IDg0YzgyMTkuLmY1OWFkZjggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYnBmLmMKKysrIGIvbmV0L3NjaGVkL2Nsc19icGYuYwpAQCAtMTgwLDYgKzE4MCwxMSBAQAogCX0KIAogCWJwZl9zaXplID0gYnBmX2xlbiAqIHNpemVvZigqYnBmX29wcyk7CisJaWYgKGJwZl9zaXplICE9IG5sYV9sZW4odGJbVENBX0JQRl9PUFNdKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm91dDsKKwl9CisKIAlicGZfb3BzID0ga3phbGxvYyhicGZfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJwZl9vcHMgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMjE1LDE1ICsyMjAsMjEgQEAKIAkJCQkgICBzdHJ1Y3QgY2xzX2JwZl9oZWFkICpoZWFkKQogewogCXVuc2lnbmVkIGludCBpID0gMHg4MDAwMDAwMDsKKwl1MzIgaGFuZGxlOwogCiAJZG8gewogCQlpZiAoKytoZWFkLT5oZ2VuID09IDB4N0ZGRkZGRkYpCiAJCQloZWFkLT5oZ2VuID0gMTsKIAl9IHdoaWxlICgtLWkgPiAwICYmIGNsc19icGZfZ2V0KHRwLCBoZWFkLT5oZ2VuKSk7Ci0JaWYgKGkgPT0gMCkKLQkJcHJfZXJyKCJJbnN1ZmZpY2llbnQgbnVtYmVyIG9mIGhhbmRsZXNcbiIpOwogCi0JcmV0dXJuIGk7CisJaWYgKHVubGlrZWx5KGkgPT0gMCkpIHsKKwkJcHJfZXJyKCJJbnN1ZmZpY2llbnQgbnVtYmVyIG9mIGhhbmRsZXNcbiIpOworCQloYW5kbGUgPSAwOworCX0gZWxzZSB7CisJCWhhbmRsZSA9IGhlYWQtPmhnZW47CisJfQorCisJcmV0dXJuIGhhbmRsZTsKIH0KIAogc3RhdGljIGludCBjbHNfYnBmX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hc3NvY2lvbGEuYyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCmluZGV4IGY3OTFlZGQuLjI2ZDA2ZGIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2Fzc29jaW9sYS5jCisrKyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCkBAIC0xMTgyLDcgKzExODIsNiBAQAogCWFzb2MtPnBlZXIucGVlcl9obWFjcyA9IG5ldy0+cGVlci5wZWVyX2htYWNzOwogCW5ldy0+cGVlci5wZWVyX2htYWNzID0gTlVMTDsKIAotCXNjdHBfYXV0aF9rZXlfcHV0KGFzb2MtPmFzb2Nfc2hhcmVkX2tleSk7CiAJc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KGFzb2MsIEdGUF9BVE9NSUMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IDI2MjVlY2MuLmFhZmU5NGIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0xNjAzLDcgKzE2MDMsNyBAQAogCXNjdHBfYXNzb2NfdCBhc3NvY2lkID0gMDsKIAlzY3RwX2Ntc2dzX3QgY21zZ3MgPSB7IE5VTEwgfTsKIAlzY3RwX3Njb3BlX3Qgc2NvcGU7Ci0JYm9vbCBmaWxsX3NpbmZvX3R0bCA9IGZhbHNlOworCWJvb2wgZmlsbF9zaW5mb190dGwgPSBmYWxzZSwgd2FpdF9jb25uZWN0ID0gZmFsc2U7CiAJc3RydWN0IHNjdHBfZGF0YW1zZyAqZGF0YW1zZzsKIAlpbnQgbXNnX2ZsYWdzID0gbXNnLT5tc2dfZmxhZ3M7CiAJX191MTYgc2luZm9fZmxhZ3MgPSAwOwpAQCAtMTk0Myw2ICsxOTQzLDcgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dF9mcmVlOwogCisJCXdhaXRfY29ubmVjdCA9IHRydWU7CiAJCXByX2RlYnVnKCIlczogd2UgYXNzb2NpYXRlZCBwcmltaXRpdmVseVxuIiwgX19mdW5jX18pOwogCX0KIApAQCAtMTk4MCw2ICsxOTgxLDExIEBACiAJc2N0cF9kYXRhbXNnX3B1dChkYXRhbXNnKTsKIAllcnIgPSBtc2dfbGVuOwogCisJaWYgKHVubGlrZWx5KHdhaXRfY29ubmVjdCkpIHsKKwkJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQpOworCQlzY3RwX3dhaXRfZm9yX2Nvbm5lY3QoYXNvYywgJnRpbWVvKTsKKwl9CisKIAkvKiBJZiB3ZSBhcmUgYWxyZWFkeSBwYXN0IEFTU09DSUFURSwgdGhlIGxvd2VyCiAJICogbGF5ZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgYXNzb2NpYXRpb24gY2xlYW51cC4KIAkgKi8KZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCBhMmMzM2E0Li40MTg3OTVjIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC04NjksOSArODY5LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc29ja19pb2NiICphbGxvY19zb2NrX2lvY2Ioc3RydWN0IGtpb2NiICppb2NiLAogCQkJCQkgc3RydWN0IHNvY2tfaW9jYiAqc2lvY2IpCiB7Ci0JaWYgKCFpc19zeW5jX2tpb2NiKGlvY2IpKQotCQlCVUcoKTsKLQogCXNpb2NiLT5raW9jYiA9IGlvY2I7CiAJaW9jYi0+cHJpdmF0ZSA9IHNpb2NiOwogCXJldHVybiBzaW9jYjsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveGRyLmMgYi9uZXQvc3VucnBjL3hkci5jCmluZGV4IDFjYjYxMjQuLjQ0MzlhYzQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveGRyLmMKKysrIGIvbmV0L3N1bnJwYy94ZHIuYwpAQCAtNjA2LDcgKzYwNiw3IEBACiAJc3RydWN0IGt2ZWMgKmhlYWQgPSBidWYtPmhlYWQ7CiAJc3RydWN0IGt2ZWMgKnRhaWwgPSBidWYtPnRhaWw7CiAJaW50IGZyYWdsZW47Ci0JaW50IG5ldywgb2xkOworCWludCBuZXc7CiAKIAlpZiAobGVuID4gYnVmLT5sZW4pIHsKIAkJV0FSTl9PTl9PTkNFKDEpOwpAQCAtNjI5LDggKzYyOSw4IEBACiAJYnVmLT5sZW4gLT0gZnJhZ2xlbjsKIAogCW5ldyA9IGJ1Zi0+cGFnZV9iYXNlICsgYnVmLT5wYWdlX2xlbjsKLQlvbGQgPSBuZXcgKyBmcmFnbGVuOwotCXhkci0+cGFnZV9wdHIgLT0gKG9sZCA+PiBQQUdFX1NISUZUKSAtIChuZXcgPj4gUEFHRV9TSElGVCk7CisKKwl4ZHItPnBhZ2VfcHRyID0gYnVmLT5wYWdlcyArIChuZXcgPj4gUEFHRV9TSElGVCk7CiAKIAlpZiAoYnVmLT5wYWdlX2xlbikgewogCQl4ZHItPnAgPSBwYWdlX2FkZHJlc3MoKnhkci0+cGFnZV9wdHIpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvYmNhc3QuYyBiL25ldC90aXBjL2JjYXN0LmMKaW5kZXggOTZjZWVmZS4uYTllMTc0ZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYmNhc3QuYworKysgYi9uZXQvdGlwYy9iY2FzdC5jCkBAIC0yMjAsMTAgKzIyMCwxMSBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlza2JfcXVldWVfd2FsaygmYmNsLT5vdXRxdWV1ZSwgc2tiKSB7Ci0JCWlmIChtb3JlKGJ1Zl9zZXFubyhza2IpLCBhZnRlcikpCisJCWlmIChtb3JlKGJ1Zl9zZXFubyhza2IpLCBhZnRlcikpIHsKKwkJCXRpcGNfbGlua19yZXRyYW5zbWl0KGJjbCwgc2tiLCBtb2QodG8gLSBhZnRlcikpOwogCQkJYnJlYWs7CisJCX0KIAl9Ci0JdGlwY19saW5rX3JldHJhbnNtaXQoYmNsLCBza2IsIG1vZCh0byAtIGFmdGVyKSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCAyMmJhOTcxLi4yOWM4Njc1IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMTc1LDcgKzE3NSw3IEBACiAJICBNb3N0IGRpc3RyaWJ1dGlvbnMgaGF2ZSBhIENSREEgcGFja2FnZS4gIFNvIGlmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBDRkc4MDIxMV9XRVhUCi0JYm9vbAorCWJvb2wgImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eSIKIAlkZXBlbmRzIG9uIENGRzgwMjExCiAJc2VsZWN0IFdFWFRfQ09SRQogCWhlbHAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDdjYTRiNTEuLjg4ODdjNmUgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtMjg1NCw2ICsyODU0LDkgQEAKIAlpZiAoIXJkZXYtPm9wcy0+Z2V0X2tleSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCisJaWYgKCFwYWlyd2lzZSAmJiBtYWNfYWRkciAmJiAhKHJkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19JQlNTX1JTTikpCisJCXJldHVybiAtRU5PRU5UOworCiAJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtc2cpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjg3MywxMCArMjg3Niw2IEBACiAJICAgIG5sYV9wdXQobXNnLCBOTDgwMjExX0FUVFJfTUFDLCBFVEhfQUxFTiwgbWFjX2FkZHIpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCWlmIChwYWlyd2lzZSAmJiBtYWNfYWRkciAmJgotCSAgICAhKHJkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19JQlNTX1JTTikpCi0JCXJldHVybiAtRU5PRU5UOwotCiAJZXJyID0gcmRldl9nZXRfa2V5KHJkZXYsIGRldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyLCAmY29va2llLAogCQkJICAgZ2V0X2tleV9jYWxsYmFjayk7CiAKQEAgLTMwNDcsNyArMzA0Niw3IEBACiAJd2Rldl9sb2NrKGRldi0+aWVlZTgwMjExX3B0cik7CiAJZXJyID0gbmw4MDIxMV9rZXlfYWxsb3dlZChkZXYtPmllZWU4MDIxMV9wdHIpOwogCi0JaWYgKGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSAmJiBtYWNfYWRkciAmJgorCWlmIChrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgJiYgbWFjX2FkZHIgJiYKIAkgICAgIShyZGV2LT53aXBoeS5mbGFncyAmIFdJUEhZX0ZMQUdfSUJTU19SU04pKQogCQllcnIgPSAtRU5PRU5UOwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggN2I4MzA5OC4uZDM5ZDFjYiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5jCisrKyBiL25ldC93aXJlbGVzcy9yZWcuYwpAQCAtMTUzMCw0NSArMTUzMCw0MCBAQAogCiBzdGF0aWMgYm9vbCByZWdfd2Rldl9jaGFuX3ZhbGlkKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDsKIAlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTsKLQlib29sIHJldCA9IHRydWU7CisJZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGU7CiAKIAl3ZGV2X2xvY2sod2Rldik7CisJaWZ0eXBlID0gd2Rldi0+aWZ0eXBlOwogCisJLyogbWFrZSBzdXJlIHRoZSBpbnRlcmZhY2UgaXMgYWN0aXZlICovCiAJaWYgKCF3ZGV2LT5uZXRkZXYgfHwgIW5ldGlmX3J1bm5pbmcod2Rldi0+bmV0ZGV2KSkKLQkJZ290byBvdXQ7CisJCWdvdG8gd2Rldl9pbmFjdGl2ZV91bmxvY2s7CiAKLQlzd2l0Y2ggKHdkZXYtPmlmdHlwZSkgeworCXN3aXRjaCAoaWZ0eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzoKIAkJaWYgKCF3ZGV2LT5iZWFjb25faW50ZXJ2YWwpCi0JCQlnb3RvIG91dDsKLQotCQlyZXQgPSBjZmc4MDIxMV9yZWdfY2FuX2JlYWNvbih3aXBoeSwKLQkJCQkJICAgICAgJndkZXYtPmNoYW5kZWYsIHdkZXYtPmlmdHlwZSk7CisJCQlnb3RvIHdkZXZfaW5hY3RpdmVfdW5sb2NrOworCQljaGFuZGVmID0gd2Rldi0+Y2hhbmRlZjsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJaWYgKCF3ZGV2LT5zc2lkX2xlbikKLQkJCWdvdG8gb3V0OwotCi0JCXJldCA9IGNmZzgwMjExX3JlZ19jYW5fYmVhY29uKHdpcGh5LAotCQkJCQkgICAgICAmd2Rldi0+Y2hhbmRlZiwgd2Rldi0+aWZ0eXBlKTsKKwkJCWdvdG8gd2Rldl9pbmFjdGl2ZV91bmxvY2s7CisJCWNoYW5kZWYgPSB3ZGV2LT5jaGFuZGVmOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOgogCQlpZiAoIXdkZXYtPmN1cnJlbnRfYnNzIHx8CiAJCSAgICAhd2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5jaGFubmVsKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIHdkZXZfaW5hY3RpdmVfdW5sb2NrOwogCi0JCWNoID0gd2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5jaGFubmVsOwotCQlpZiAocmRldi0+b3BzLT5nZXRfY2hhbm5lbCAmJgotCQkgICAgIXJkZXZfZ2V0X2NoYW5uZWwocmRldiwgd2RldiwgJmNoYW5kZWYpKQotCQkJcmV0ID0gY2ZnODAyMTFfY2hhbmRlZl91c2FibGUod2lwaHksICZjaGFuZGVmLAotCQkJCQkJICAgICAgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpOwotCQllbHNlCi0JCQlyZXQgPSAhKGNoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKTsKKwkJaWYgKCFyZGV2LT5vcHMtPmdldF9jaGFubmVsIHx8CisJCSAgICByZGV2X2dldF9jaGFubmVsKHJkZXYsIHdkZXYsICZjaGFuZGVmKSkKKwkJCWNmZzgwMjExX2NoYW5kZWZfY3JlYXRlKCZjaGFuZGVmLAorCQkJCQkJd2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5jaGFubmVsLAorCQkJCQkJTkw4MDIxMV9DSEFOX05PX0hUKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKQEAgLTE1ODEsOSArMTU3NiwyNiBAQAogCQlicmVhazsKIAl9CiAKLW91dDoKIAl3ZGV2X3VubG9jayh3ZGV2KTsKLQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChpZnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCXJldHVybiBjZmc4MDIxMV9yZWdfY2FuX2JlYWNvbih3aXBoeSwgJmNoYW5kZWYsIGlmdHlwZSk7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDoKKwkJcmV0dXJuIGNmZzgwMjExX2NoYW5kZWZfdXNhYmxlKHdpcGh5LCAmY2hhbmRlZiwKKwkJCQkJICAgICAgIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKKword2Rldl9pbmFjdGl2ZV91bmxvY2s6CisJd2Rldl91bmxvY2sod2Rldik7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwppbmRleCBkMGFjNzk1Li41NDg4YzM2IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvdXRpbC5jCisrKyBiL25ldC93aXJlbGVzcy91dGlsLmMKQEAgLTMwOCw2ICszMDgsMTIgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkgeworCQlpZiAoaWVlZTgwMjExX2hhc19vcmRlcihmYykpCisJCQloZHJsZW4gKz0gSUVFRTgwMjExX0hUX0NUTF9MRU47CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChpZWVlODAyMTFfaXNfY3RsKGZjKSkgewogCQkvKgogCQkgKiBBQ0sgYW5kIENUUyBhcmUgMTAgYnl0ZXMsIGFsbCBvdGhlcnMgMTYuIFRvIHNlZSBob3cKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYnBmL3Rlc3RfbWFwcy5jIGIvc2FtcGxlcy9icGYvdGVzdF9tYXBzLmMKaW5kZXggZTI4NmI0Mi4uNjI5OWVlOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9icGYvdGVzdF9tYXBzLmMKKysrIGIvc2FtcGxlcy9icGYvdGVzdF9tYXBzLmMKQEAgLTY5LDkgKzY5LDkgQEAKIAogCS8qIGl0ZXJhdGUgb3ZlciB0d28gZWxlbWVudHMgKi8KIAlhc3NlcnQoYnBmX2dldF9uZXh0X2tleShtYXBfZmQsICZrZXksICZuZXh0X2tleSkgPT0gMCAmJgotCSAgICAgICBuZXh0X2tleSA9PSAyKTsKKwkgICAgICAgKG5leHRfa2V5ID09IDEgfHwgbmV4dF9rZXkgPT0gMikpOwogCWFzc2VydChicGZfZ2V0X25leHRfa2V5KG1hcF9mZCwgJm5leHRfa2V5LCAmbmV4dF9rZXkpID09IDAgJiYKLQkgICAgICAgbmV4dF9rZXkgPT0gMSk7CisJICAgICAgIChuZXh0X2tleSA9PSAxIHx8IG5leHRfa2V5ID09IDIpKTsKIAlhc3NlcnQoYnBmX2dldF9uZXh0X2tleShtYXBfZmQsICZuZXh0X2tleSwgJm5leHRfa2V5KSA9PSAtMSAmJgogCSAgICAgICBlcnJubyA9PSBFTk9FTlQpOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmNsZWFuIGIvc2NyaXB0cy9NYWtlZmlsZS5jbGVhbgppbmRleCAxYmNhMTgwLi42MjdmOGNiIDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmNsZWFuCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUuY2xlYW4KQEAgLTQyLDE5ICs0MiwxOSBAQAogCiBfX2NsZWFuLWZpbGVzICAgOj0gJChmaWx0ZXItb3V0ICQobm8tY2xlYW4tZmlsZXMpLCAkKF9fY2xlYW4tZmlsZXMpKQogCi0jIGFzIGNsZWFuLWZpbGVzIGlzIGdpdmVuIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdGhpcyBhZGRzCi0jIGEgJChvYmopIHByZWZpeCwgZXhjZXB0IGZvciBhYnNvbHV0ZSBwYXRocworIyBjbGVhbi1maWxlcyBpcyBnaXZlbiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnksIHVubGVzcyBpdAorIyBzdGFydHMgd2l0aCAkKG9ianRyZWUpLyAod2hpY2ggbWVhbnMgIi4vIiwgc28gZG8gbm90IGFkZCAiLi8iIHVubGVzcworIyB5b3Ugd2FudCB0byBkZWxldGUgYSBmaWxlIGZyb20gdGhlIHRvcGxldmVsIG9iamVjdCBkaXJlY3RvcnkpLgogCiBfX2NsZWFuLWZpbGVzICAgOj0gJCh3aWxkY2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICQoYWRkcHJlZml4ICQob2JqKS8sICQoZmlsdGVyLW91dCAvJSwgJChfX2NsZWFuLWZpbGVzKSkpIFwKLQkJICAgJChmaWx0ZXIgLyUsICQoX19jbGVhbi1maWxlcykpKQorCQkgICAkKGFkZHByZWZpeCAkKG9iaikvLCAkKGZpbHRlci1vdXQgJChvYmp0cmVlKS8lLCAkKF9fY2xlYW4tZmlsZXMpKSkgXAorCQkgICAkKGZpbHRlciAkKG9ianRyZWUpLyUsICQoX19jbGVhbi1maWxlcykpKQogCi0jIGFzIGNsZWFuLWRpcnMgaXMgZ2l2ZW4gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGlzIGFkZHMKLSMgYSAkKG9iaikgcHJlZml4LCBleGNlcHQgZm9yIGFic29sdXRlIHBhdGhzCisjIHNhbWUgYXMgY2xlYW4tZmlsZXMKIAogX19jbGVhbi1kaXJzICAgIDo9ICQod2lsZGNhcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAkKGFkZHByZWZpeCAkKG9iaikvLCAkKGZpbHRlci1vdXQgLyUsICQoY2xlYW4tZGlycykpKSAgICBcCi0JCSAgICQoZmlsdGVyIC8lLCAkKGNsZWFuLWRpcnMpKSkKKwkJICAgJChhZGRwcmVmaXggJChvYmopLywgJChmaWx0ZXItb3V0ICQob2JqdHJlZSkvJSwgJChjbGVhbi1kaXJzKSkpICAgIFwKKwkJICAgJChmaWx0ZXIgJChvYmp0cmVlKS8lLCAkKGNsZWFuLWRpcnMpKSkKIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCmluZGV4IDU2ZWE5OWEuLjUzN2MzOGMgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCisrKyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCkBAIC0yNTUsNyArMjU1LDYgQEAKICAgICAjIGZvcmNlIGZsYWdzIGZvciB0aGlzIGFyY2gKICAgICAkbGQgLj0gIiAtbSBzaGxlbGZfbGludXgiOwogICAgICRvYmpjb3B5IC49ICIgLU8gZWxmMzItc2gtbGludXgiOwotICAgICRjYyAuPSAiIC1tMzIiOwogCiB9IGVsc2lmICgkYXJjaCBlcSAicG93ZXJwYyIpIHsKICAgICAkbG9jYWxfcmVnZXggPSAiXlswLTlhLWZBLUZdK1xccyt0XFxzKyhcXC4/XFxTKykiOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9nYy5jIGIvc2VjdXJpdHkva2V5cy9nYy5jCmluZGV4IDk2MDlhN2YuLmM3OTUyMzcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvZ2MuYworKysgYi9zZWN1cml0eS9rZXlzL2djLmMKQEAgLTE0OCwxMiArMTQ4LDEyIEBACiAJCWlmICh0ZXN0X2JpdChLRVlfRkxBR19JTlNUQU5USUFURUQsICZrZXktPmZsYWdzKSkKIAkJCWF0b21pY19kZWMoJmtleS0+dXNlci0+bmlrZXlzKTsKIAotCQlrZXlfdXNlcl9wdXQoa2V5LT51c2VyKTsKLQogCQkvKiBub3cgdGhyb3cgYXdheSB0aGUga2V5IG1lbW9yeSAqLwogCQlpZiAoa2V5LT50eXBlLT5kZXN0cm95KQogCQkJa2V5LT50eXBlLT5kZXN0cm95KGtleSk7CiAKKwkJa2V5X3VzZXJfcHV0KGtleS0+dXNlcik7CisKIAkJa2ZyZWUoa2V5LT5kZXNjcmlwdGlvbik7CiAKICNpZmRlZiBLRVlfREVCVUdHSU5HCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfZHVtbXkuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9kdW1teS5jCmluZGV4IGVjNjY3ZjEuLjVkOTA1ZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9kdW1teS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9kdW1teS5jCkBAIC04MiwzNiArODIsNiBAQAogc3RhdGljIGludCBteV9jbGllbnQgPSAtMTsKIAogLyoKLSAqIHVudXNlIGNhbGxiYWNrIC0gc2VuZCBBTExfU09VTkRTX09GRiBhbmQgUkVTRVRfQ09OVFJPTExFUlMgZXZlbnRzCi0gKiB0byBzdWJzY3JpYmVycy4KLSAqIE5vdGU6IHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIG9ubHkgYWZ0ZXIgYWxsIHN1YnNjcmliZXJzIGFyZSByZW1vdmVkLgotICovCi1zdGF0aWMgaW50Ci1kdW1teV91bnVzZSh2b2lkICpwcml2YXRlX2RhdGEsIHN0cnVjdCBzbmRfc2VxX3BvcnRfc3Vic2NyaWJlICppbmZvKQotewotCXN0cnVjdCBzbmRfc2VxX2R1bW15X3BvcnQgKnA7Ci0JaW50IGk7Ci0Jc3RydWN0IHNuZF9zZXFfZXZlbnQgZXY7Ci0KLQlwID0gcHJpdmF0ZV9kYXRhOwotCW1lbXNldCgmZXYsIDAsIHNpemVvZihldikpOwotCWlmIChwLT5kdXBsZXgpCi0JCWV2LnNvdXJjZS5wb3J0ID0gcC0+Y29ubmVjdDsKLQllbHNlCi0JCWV2LnNvdXJjZS5wb3J0ID0gcC0+cG9ydDsKLQlldi5kZXN0LmNsaWVudCA9IFNORFJWX1NFUV9BRERSRVNTX1NVQlNDUklCRVJTOwotCWV2LnR5cGUgPSBTTkRSVl9TRVFfRVZFTlRfQ09OVFJPTExFUjsKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlldi5kYXRhLmNvbnRyb2wuY2hhbm5lbCA9IGk7Ci0JCWV2LmRhdGEuY29udHJvbC5wYXJhbSA9IE1JRElfQ1RMX0FMTF9TT1VORFNfT0ZGOwotCQlzbmRfc2VxX2tlcm5lbF9jbGllbnRfZGlzcGF0Y2gocC0+Y2xpZW50LCAmZXYsIDAsIDApOwotCQlldi5kYXRhLmNvbnRyb2wucGFyYW0gPSBNSURJX0NUTF9SRVNFVF9DT05UUk9MTEVSUzsKLQkJc25kX3NlcV9rZXJuZWxfY2xpZW50X2Rpc3BhdGNoKHAtPmNsaWVudCwgJmV2LCAwLCAwKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBldmVudCBpbnB1dCBjYWxsYmFjayAtIGp1c3QgcmVkaXJlY3QgZXZlbnRzIHRvIHN1YnNjcmliZXJzCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTE3NSw3ICsxNDUsNiBAQAogCQl8IFNORFJWX1NFUV9QT1JUX1RZUEVfUE9SVDsKIAltZW1zZXQoJnBjYiwgMCwgc2l6ZW9mKHBjYikpOwogCXBjYi5vd25lciA9IFRISVNfTU9EVUxFOwotCXBjYi51bnVzZSA9IGR1bW15X3VudXNlOwogCXBjYi5ldmVudF9pbnB1dCA9IGR1bW15X2lucHV0OwogCXBjYi5wcml2YXRlX2ZyZWUgPSBkdW1teV9mcmVlOwogCXBjYi5wcml2YXRlX2RhdGEgPSByZWM7CmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9hbWR0cC5jIGIvc291bmQvZmlyZXdpcmUvYW1kdHAuYwppbmRleCAzYmFkYzcwLi4wZDU4MDE4IDEwMDY0NAotLS0gYS9zb3VuZC9maXJld2lyZS9hbWR0cC5jCisrKyBiL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmMKQEAgLTIxLDcgKzIxLDE5IEBACiAjZGVmaW5lIENZQ0xFU19QRVJfU0VDT05ECTgwMDAKICNkZWZpbmUgVElDS1NfUEVSX1NFQ09ORAkoVElDS1NfUEVSX0NZQ0xFICogQ1lDTEVTX1BFUl9TRUNPTkQpCiAKLSNkZWZpbmUgVFJBTlNGRVJfREVMQVlfVElDS1MJMHgyZTAwIC8qIDQ3OS4xNyDCtXMgKi8KKy8qCisgKiBOb21pbmFsbHkgMzEyNSBieXRlcy9zZWNvbmQsIGJ1dCB0aGUgTUlESSBwb3J0J3MgY2xvY2sgbWlnaHQgYmUKKyAqIDElIHRvbyBzbG93LCBhbmQgdGhlIGJ1cyBjbG9jayAxMDAgcHBtIHRvbyBmYXN0LgorICovCisjZGVmaW5lIE1JRElfQllURVNfUEVSX1NFQ09ORAkzMDkzCisKKy8qCisgKiBTZXZlcmFsIGRldmljZXMgbG9vayBvbmx5IGF0IHRoZSBmaXJzdCBlaWdodCBkYXRhIGJsb2Nrcy4KKyAqIEluIGFueSBjYXNlLCB0aGlzIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIHRoZSBNSURJIGRhdGEgcmF0ZS4KKyAqLworI2RlZmluZSBNQVhfTUlESV9SWF9CTE9DS1MJOAorCisjZGVmaW5lIFRSQU5TRkVSX0RFTEFZX1RJQ0tTCTB4MmUwMCAvKiA0NzkuMTcgw4LCtXMgKi8KIAogLyogaXNvY2hyb25vdXMgaGVhZGVyIHBhcmFtZXRlcnMgKi8KICNkZWZpbmUgSVNPX0RBVEFfTEVOR1RIX1NISUZUCTE2CkBAIC03OCw4ICs5MCw2IEBACiAJcy0+Y2FsbGJhY2tlZCA9IGZhbHNlOwogCXMtPnN5bmNfc2xhdmUgPSBOVUxMOwogCi0Jcy0+cnhfYmxvY2tzX2Zvcl9taWRpID0gVUlOVF9NQVg7Ci0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woYW1kdHBfc3RyZWFtX2luaXQpOwpAQCAtMjIyLDYgKzIzMiwxNCBAQAogCWZvciAoaSA9IDA7IGkgPCBwY21fY2hhbm5lbHM7IGkrKykKIAkJcy0+cGNtX3Bvc2l0aW9uc1tpXSA9IGk7CiAJcy0+bWlkaV9wb3NpdGlvbiA9IHMtPnBjbV9jaGFubmVsczsKKworCS8qCisJICogV2UgZG8gbm90IGtub3cgdGhlIGFjdHVhbCBNSURJIEZJRk8gc2l6ZSBvZiBtb3N0IGRldmljZXMuICBKdXN0CisJICogYXNzdW1lIHR3byBieXRlcywgaS5lLiwgb25lIGJ5dGUgY2FuIGJlIHJlY2VpdmVkIG92ZXIgdGhlIGJ1cyB3aGlsZQorCSAqIHRoZSBwcmV2aW91cyBvbmUgaXMgdHJhbnNtaXR0ZWQgb3ZlciBNSURJLgorCSAqIChUaGUgdmFsdWUgaGVyZSBpcyBhZGp1c3RlZCBmb3IgbWlkaV9yYXRlbGltaXRfcGVyX3BhY2tldCgpLikKKwkgKi8KKwlzLT5taWRpX2ZpZm9fbGltaXQgPSByYXRlIC0gTUlESV9CWVRFU19QRVJfU0VDT05EICogcy0+c3l0X2ludGVydmFsICsgMTsKIH0KIEVYUE9SVF9TWU1CT0woYW1kdHBfc3RyZWFtX3NldF9wYXJhbWV0ZXJzKTsKIApAQCAtNDYzLDYgKzQ4MSwzNiBAQAogCX0KIH0KIAorLyoKKyAqIFRvIGF2b2lkIHNlbmRpbmcgTUlESSBieXRlcyBhdCB0b28gaGlnaCBhIHJhdGUsIGFzc3VtZSB0aGF0IHRoZSByZWNlaXZpbmcKKyAqIGRldmljZSBoYXMgYSBGSUZPLCBhbmQgdHJhY2sgaG93IG11Y2ggaXQgaXMgZmlsbGVkLiAgVGhpcyB2YWx1ZXMgaW5jcmVhc2VzCisgKiBieSBvbmUgd2hlbmV2ZXIgd2Ugc2VuZCBvbmUgYnl0ZSBpbiBhIHBhY2tldCwgYnV0IHRoZSBGSUZPIGVtcHRpZXMgYXQKKyAqIGEgY29uc3RhbnQgcmF0ZSBpbmRlcGVuZGVudCBvZiBvdXIgcGFja2V0IHJhdGUuICBPbmUgcGFja2V0IGhhcyBzeXRfaW50ZXJ2YWwKKyAqIHNhbXBsZXMsIHNvIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBlbXB0eSBvdXQgb2YgdGhlIEZJRk8sIHBlciBwYWNrZXQoISksCisgKiBpcyBNSURJX0JZVEVTX1BFUl9TRUNPTkQgKiBzeXRfaW50ZXJ2YWwgLyBzYW1wbGVfcmF0ZS4gIFRvIGF2b2lkIHN0b3JpbmcKKyAqIGZyYWN0aW9uYWwgdmFsdWVzLCB0aGUgdmFsdWVzIGluIG1pZGlfZmlmb191c2VkW10gYXJlIG1lYXN1cmVkIGluIGJ5dGVzCisgKiBtdWx0aXBsaWVkIGJ5IHRoZSBzYW1wbGUgcmF0ZS4KKyAqLworc3RhdGljIGJvb2wgbWlkaV9yYXRlbGltaXRfcGVyX3BhY2tldChzdHJ1Y3QgYW1kdHBfc3RyZWFtICpzLCB1bnNpZ25lZCBpbnQgcG9ydCkKK3sKKwlpbnQgdXNlZDsKKworCXVzZWQgPSBzLT5taWRpX2ZpZm9fdXNlZFtwb3J0XTsKKwlpZiAodXNlZCA9PSAwKSAvKiBjb21tb24gc2hvcnRjdXQgKi8KKwkJcmV0dXJuIHRydWU7CisKKwl1c2VkIC09IE1JRElfQllURVNfUEVSX1NFQ09ORCAqIHMtPnN5dF9pbnRlcnZhbDsKKwl1c2VkID0gbWF4KHVzZWQsIDApOworCXMtPm1pZGlfZmlmb191c2VkW3BvcnRdID0gdXNlZDsKKworCXJldHVybiB1c2VkIDwgcy0+bWlkaV9maWZvX2xpbWl0OworfQorCitzdGF0aWMgdm9pZCBtaWRpX3JhdGVfdXNlX29uZV9ieXRlKHN0cnVjdCBhbWR0cF9zdHJlYW0gKnMsIHVuc2lnbmVkIGludCBwb3J0KQoreworCXMtPm1pZGlfZmlmb191c2VkW3BvcnRdICs9IGFtZHRwX3JhdGVfdGFibGVbcy0+c2ZjXTsKK30KKwogc3RhdGljIHZvaWQgYW1kdHBfZmlsbF9taWRpKHN0cnVjdCBhbWR0cF9zdHJlYW0gKnMsCiAJCQkgICAgX19iZTMyICpidWZmZXIsIHVuc2lnbmVkIGludCBmcmFtZXMpCiB7CkBAIC00NzAsMTYgKzUxOCwyMSBAQAogCXU4ICpiOwogCiAJZm9yIChmID0gMDsgZiA8IGZyYW1lczsgZisrKSB7Ci0JCWJ1ZmZlcltzLT5taWRpX3Bvc2l0aW9uXSA9IDA7CiAJCWIgPSAodTggKikmYnVmZmVyW3MtPm1pZGlfcG9zaXRpb25dOwogCiAJCXBvcnQgPSAocy0+ZGF0YV9ibG9ja19jb3VudGVyICsgZikgJSA4OwotCQlpZiAoKGYgPj0gcy0+cnhfYmxvY2tzX2Zvcl9taWRpKSB8fAotCQkgICAgKHMtPm1pZGlbcG9ydF0gPT0gTlVMTCkgfHwKLQkJICAgIChzbmRfcmF3bWlkaV90cmFuc21pdChzLT5taWRpW3BvcnRdLCBiICsgMSwgMSkgPD0gMCkpCi0JCQliWzBdID0gMHg4MDsKLQkJZWxzZQorCQlpZiAoZiA8IE1BWF9NSURJX1JYX0JMT0NLUyAmJgorCQkgICAgbWlkaV9yYXRlbGltaXRfcGVyX3BhY2tldChzLCBwb3J0KSAmJgorCQkgICAgcy0+bWlkaVtwb3J0XSAhPSBOVUxMICYmCisJCSAgICBzbmRfcmF3bWlkaV90cmFuc21pdChzLT5taWRpW3BvcnRdLCAmYlsxXSwgMSkgPT0gMSkgeworCQkJbWlkaV9yYXRlX3VzZV9vbmVfYnl0ZShzLCBwb3J0KTsKIAkJCWJbMF0gPSAweDgxOworCQl9IGVsc2UgeworCQkJYlswXSA9IDB4ODA7CisJCQliWzFdID0gMDsKKwkJfQorCQliWzJdID0gMDsKKwkJYlszXSA9IDA7CiAKIAkJYnVmZmVyICs9IHMtPmRhdGFfYmxvY2tfcXVhZGxldHM7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvYW1kdHAuaCBiL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmgKaW5kZXggZTZlODkyNi4uOGEwM2E5MSAxMDA2NDQKLS0tIGEvc291bmQvZmlyZXdpcmUvYW1kdHAuaAorKysgYi9zb3VuZC9maXJld2lyZS9hbWR0cC5oCkBAIC0xNDgsMTMgKzE0OCwxMiBAQAogCWJvb2wgZG91YmxlX3BjbV9mcmFtZXM7CiAKIAlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICptaWRpW0FNRFRQX01BWF9DSEFOTkVMU19GT1JfTUlESSAqIDhdOworCWludCBtaWRpX2ZpZm9fbGltaXQ7CisJaW50IG1pZGlfZmlmb191c2VkW0FNRFRQX01BWF9DSEFOTkVMU19GT1JfTUlESSAqIDhdOwogCiAJLyogcXVpcms6IGZpeGVkIGludGVydmFsIG9mIGRiYyBiZXR3ZWVuIHByZXZpb3MvY3VycmVudCBwYWNrZXRzLiAqLwogCXVuc2lnbmVkIGludCB0eF9kYmNfaW50ZXJ2YWw7CiAKLQkvKiBxdWlyazogdGhlIGZpcnN0IGNvdW50IG9mIGRhdGEgYmxvY2tzIGluIGFuIHJ4IHBhY2tldCBmb3IgTUlESSAqLwotCXVuc2lnbmVkIGludCByeF9ibG9ja3NfZm9yX21pZGk7Ci0KIAlib29sIGNhbGxiYWNrZWQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgY2FsbGJhY2tfd2FpdDsKIAlzdHJ1Y3QgYW1kdHBfc3RyZWFtICpzeW5jX3NsYXZlOwpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvYmVib2IvYmVib2Jfc3RyZWFtLmMgYi9zb3VuZC9maXJld2lyZS9iZWJvYi9iZWJvYl9zdHJlYW0uYwppbmRleCAxYWFiMGEzMi4uMGViY2FiZiAxMDA2NDQKLS0tIGEvc291bmQvZmlyZXdpcmUvYmVib2IvYmVib2Jfc3RyZWFtLmMKKysrIGIvc291bmQvZmlyZXdpcmUvYmVib2IvYmVib2Jfc3RyZWFtLmMKQEAgLTQ4NCwxMyArNDg0LDYgQEAKIAkJYW1kdHBfc3RyZWFtX2Rlc3Ryb3koJmJlYm9iLT5yeF9zdHJlYW0pOwogCQlkZXN0cm95X2JvdGhfY29ubmVjdGlvbnMoYmVib2IpOwogCX0KLQkvKgotCSAqIFRoZSBmaXJtd2FyZSBmb3IgdGhlc2UgZGV2aWNlcyBpZ25vcmUgTUlESSBtZXNzYWdlcyBpbiBtb3JlIHRoYW4KLQkgKiBmaXJzdCA4IGRhdGEgYmxvY2tzIG9mIGFuIHJlY2VpdmVkIEFNRFRQIHBhY2tldC4KLQkgKi8KLQlpZiAoYmVib2ItPnNwZWMgPT0gJm1hdWRpb19mdzQxMF9zcGVjIHx8Ci0JICAgIGJlYm9iLT5zcGVjID09ICZtYXVkaW9fc3BlY2lhbF9zcGVjKQotCQliZWJvYi0+cnhfc3RyZWFtLnJ4X2Jsb2Nrc19mb3JfbWlkaSA9IDg7CiBlbmQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2ZpcmV3b3Jrcy9maXJld29ya3Nfc3RyZWFtLmMgYi9zb3VuZC9maXJld2lyZS9maXJld29ya3MvZmlyZXdvcmtzX3N0cmVhbS5jCmluZGV4IGI5ODVmYzUuLjRmNDQwZTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2ZpcmV3aXJlL2ZpcmV3b3Jrcy9maXJld29ya3Nfc3RyZWFtLmMKKysrIGIvc291bmQvZmlyZXdpcmUvZmlyZXdvcmtzL2ZpcmV3b3Jrc19zdHJlYW0uYwpAQCAtMTc5LDExICsxNzksNiBAQAogCQlkZXN0cm95X3N0cmVhbShlZncsICZlZnctPnR4X3N0cmVhbSk7CiAJCWdvdG8gZW5kOwogCX0KLQkvKgotCSAqIEZpcmV3b3JrcyBpZ25vcmVzIE1JREkgbWVzc2FnZXMgaW4gbW9yZSB0aGFuIGZpcnN0IDggZGF0YQotCSAqIGJsb2NrcyBvZiBhbiByZWNlaXZlZCBBTURUUCBwYWNrZXQuCi0JICovCi0JZWZ3LT5yeF9zdHJlYW0ucnhfYmxvY2tzX2Zvcl9taWRpID0gODsKIAogCS8qIHNldCBJRUM2MTg4MyBjb21wbGlhbnQgbW9kZSAoYWN0dWFsbHkgbm90IGZ1bGx5IGNvbXBsaWFudC4uLikgKi8KIAllcnIgPSBzbmRfZWZ3X2NvbW1hbmRfc2V0X3R4X21vZGUoZWZ3LCBTTkRfRUZXX1RSQU5TUE9SVF9NT0RFX0lFQzYxODgzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2ZpcmV3b3Jrcy9maXJld29ya3NfdHJhbnNhY3Rpb24uYyBiL3NvdW5kL2ZpcmV3aXJlL2ZpcmV3b3Jrcy9maXJld29ya3NfdHJhbnNhY3Rpb24uYwppbmRleCAyNTVkYWJjLi4yYTg1ZTQyIDEwMDY0NAotLS0gYS9zb3VuZC9maXJld2lyZS9maXJld29ya3MvZmlyZXdvcmtzX3RyYW5zYWN0aW9uLmMKKysrIGIvc291bmQvZmlyZXdpcmUvZmlyZXdvcmtzL2ZpcmV3b3Jrc190cmFuc2FjdGlvbi5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAlzcGluX2xvY2tfaXJxKCZlZnctPmxvY2spOwogCiAJdCA9IChzdHJ1Y3Qgc25kX2Vmd190cmFuc2FjdGlvbiAqKWRhdGE7Ci0JbGVuZ3RoID0gbWluX3Qoc2l6ZV90LCB0LT5sZW5ndGggKiBzaXplb2YodC0+bGVuZ3RoKSwgbGVuZ3RoKTsKKwlsZW5ndGggPSBtaW5fdChzaXplX3QsIGJlMzJfdG9fY3B1KHQtPmxlbmd0aCkgKiBzaXplb2YodTMyKSwgbGVuZ3RoKTsKIAogCWlmIChlZnctPnB1c2hfcHRyIDwgZWZ3LT5wdWxsX3B0cikKIAkJY2FwYWNpdHkgPSAodW5zaWduZWQgaW50KShlZnctPnB1bGxfcHRyIC0gZWZ3LT5wdXNoX3B0cik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb250cm9sbGVyLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb250cm9sbGVyLmMKaW5kZXggODI3NmE3NC4uMGNmYzljOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29udHJvbGxlci5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvbnRyb2xsZXIuYwpAQCAtMTkyMiwxMCArMTkyMiwxOCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXp4X21peGVyX2NyZWF0ZSk7CiAKIAorc3RhdGljIGJvb2wgaXNfaW5wdXRfc3RyZWFtKHN0cnVjdCBhenggKmNoaXAsIHVuc2lnbmVkIGNoYXIgaW5kZXgpCit7CisJcmV0dXJuIChpbmRleCA+PSBjaGlwLT5jYXB0dXJlX2luZGV4X29mZnNldCAmJgorCQlpbmRleCA8IGNoaXAtPmNhcHR1cmVfaW5kZXhfb2Zmc2V0ICsgY2hpcC0+Y2FwdHVyZV9zdHJlYW1zKTsKK30KKwogLyogaW5pdGlhbGl6ZSBTRCBzdHJlYW1zICovCiBpbnQgYXp4X2luaXRfc3RyZWFtKHN0cnVjdCBhenggKmNoaXApCiB7CiAJaW50IGk7CisJaW50IGluX3N0cmVhbV90YWcgPSAwOworCWludCBvdXRfc3RyZWFtX3RhZyA9IDA7CiAKIAkvKiBpbml0aWFsaXplIGVhY2ggc3RyZWFtIChha2EgZGV2aWNlKQogCSAqIGFzc2lnbiB0aGUgc3RhcnRpbmcgYmRsIGFkZHJlc3MgdG8gZWFjaCBzdHJlYW0gKGRldmljZSkKQEAgLTE5MzgsOSArMTk0NiwyMSBAQAogCQlhenhfZGV2LT5zZF9hZGRyID0gY2hpcC0+cmVtYXBfYWRkciArICgweDIwICogaSArIDB4ODApOwogCQkvKiBpbnQgbWFzazogU0RJMD0weDAxLCBTREkxPTB4MDIsIC4uLiBTRE8zPTB4ODAgKi8KIAkJYXp4X2Rldi0+c2RfaW50X3N0YV9tYXNrID0gMSA8PCBpOwotCQkvKiBzdHJlYW0gdGFnOiBtdXN0IGJlIG5vbi16ZXJvIGFuZCB1bmlxdWUgKi8KIAkJYXp4X2Rldi0+aW5kZXggPSBpOwotCQlhenhfZGV2LT5zdHJlYW1fdGFnID0gaSArIDE7CisKKwkJLyogc3RyZWFtIHRhZyBtdXN0IGJlIHVuaXF1ZSB0aHJvdWdob3V0CisJCSAqIHRoZSBzdHJlYW0gZGlyZWN0aW9uIGdyb3VwLAorCQkgKiB2YWxpZCB2YWx1ZXMgMS4uLjE1CisJCSAqIHVzZSBzZXBhcmF0ZSBzdHJlYW0gdGFnIGlmIHRoZSBmbGFnCisJCSAqIEFaWF9EQ0FQU19TRVBBUkFURV9TVFJFQU1fVEFHIGlzIHVzZWQKKwkJICovCisJCWlmIChjaGlwLT5kcml2ZXJfY2FwcyAmIEFaWF9EQ0FQU19TRVBBUkFURV9TVFJFQU1fVEFHKQorCQkJYXp4X2Rldi0+c3RyZWFtX3RhZyA9CisJCQkJaXNfaW5wdXRfc3RyZWFtKGNoaXAsIGkpID8KKwkJCQkrK2luX3N0cmVhbV90YWcgOgorCQkJCSsrb3V0X3N0cmVhbV90YWc7CisJCWVsc2UKKwkJCWF6eF9kZXYtPnN0cmVhbV90YWcgPSBpICsgMTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDJiZjBiNTYuLmQ0MjZhMGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMjk5LDYgKzI5OSw5IEBACiAJIEFaWF9EQ0FQU19QTV9SVU5USU1FIHwgQVpYX0RDQVBTX0k5MTVfUE9XRVJXRUxMIHxcCiAJIEFaWF9EQ0FQU19TTk9PUF9UWVBFKFNDSCkpCiAKKyNkZWZpbmUgQVpYX0RDQVBTX0lOVEVMX1NLWUxBS0UgXAorCShBWlhfRENBUFNfSU5URUxfUENIIHwgQVpYX0RDQVBTX1NFUEFSQVRFX1NUUkVBTV9UQUcpCisKIC8qIHF1aXJrcyBmb3IgQVRJIFNCIC8gQU1EIEh1ZHNvbiAqLwogI2RlZmluZSBBWlhfRENBUFNfUFJFU0VUX0FUSV9TQiBcCiAJKEFaWF9EQ0FQU19OT19UQ1NFTCB8IEFaWF9EQ0FQU19TWU5DX1dSSVRFIHwgQVpYX0RDQVBTX1BPU0ZJWF9MUElCIHxcCkBAIC0yMDI3LDcgKzIwMzAsNyBAQAogCSAgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9QQ0ggfCBBWlhfRENBUFNfSU5URUxfUENIIH0sCiAJLyogU3VucmlzZSBQb2ludC1MUCAqLwogCXsgUENJX0RFVklDRSgweDgwODYsIDB4OWQ3MCksCi0JICAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1BDSCB8IEFaWF9EQ0FQU19JTlRFTF9QQ0ggfSwKKwkgIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfUENIIHwgQVpYX0RDQVBTX0lOVEVMX1NLWUxBS0UgfSwKIAkvKiBIYXN3ZWxsICovCiAJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHgwYTBjKSwKIAkgIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfSERNSSB8IEFaWF9EQ0FQU19JTlRFTF9IQVNXRUxMIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9wcml2LmggYi9zb3VuZC9wY2kvaGRhL2hkYV9wcml2LmgKaW5kZXggYWE0ODRmZC4uMTY2ZTNlOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfcHJpdi5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX3ByaXYuaApAQCAtMTcxLDYgKzE3MSw3IEBACiAjZGVmaW5lIEFaWF9EQ0FQU19JOTE1X1BPV0VSV0VMTCAoMSA8PCAyNykJLyogSFNXIGk5MTUgcG93ZXJ3ZWxsIHN1cHBvcnQgKi8KICNkZWZpbmUgQVpYX0RDQVBTX0NPUkJSUF9TRUxGX0NMRUFSICgxIDw8IDI4KQkvKiBDT1JCUlAgY2xlYXJzIGl0c2VsZiBhZnRlciByZXNldCAqLwogI2RlZmluZSBBWlhfRENBUFNfTk9fTVNJNjQgICAgICAoMSA8PCAyOSkJLyogU3RpY2sgdG8gMzItYml0IE1TSXMgKi8KKyNkZWZpbmUgQVpYX0RDQVBTX1NFUEFSQVRFX1NUUkVBTV9UQUcJKDEgPDwgMzApIC8qIGNhcHR1cmUgYW5kIHBsYXliYWNrIHVzZSBzZXBhcmF0ZSBzdHJlYW0gdGFnICovCiAKIGVudW0gewogCUFaWF9TTk9PUF9UWVBFX05PTkUgLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYwppbmRleCA1ZjEzZDJkLi5iNDIyZTQwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYwpAQCAtMzM1Myw2ICszMzUzLDcgQEAKIHsgLmlkID0gMHgxMGRlMDA2NywgLm5hbWUgPSAiTUNQNjcgSERNSSIsCS5wYXRjaCA9IHBhdGNoX252aGRtaV8yY2ggfSwKIHsgLmlkID0gMHgxMGRlMDA3MCwgLm5hbWUgPSAiR1BVIDcwIEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWkgfSwKIHsgLmlkID0gMHgxMGRlMDA3MSwgLm5hbWUgPSAiR1BVIDcxIEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWkgfSwKK3sgLmlkID0gMHgxMGRlMDA3MiwgLm5hbWUgPSAiR1BVIDcyIEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWkgfSwKIHsgLmlkID0gMHgxMGRlODAwMSwgLm5hbWUgPSAiTUNQNzMgSERNSSIsCS5wYXRjaCA9IHBhdGNoX252aGRtaV8yY2ggfSwKIHsgLmlkID0gMHgxMTA2OWY4MCwgLm5hbWUgPSAiVlg5MDAgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX3ZpYV9oZG1pIH0sCiB7IC5pZCA9IDB4MTEwNjlmODEsIC5uYW1lID0gIlZYOTAwIEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF92aWFfaGRtaSB9LApAQCAtMzQxMyw2ICszNDE0LDcgQEAKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDA2NyIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDcwIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwNzEiKTsKK01PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDA3MiIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGU4MDAxIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTEwNjlmODAiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMTA2OWY4MSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDRmNjQxM2UuLjYwNWQxNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTU2OCw5ICs1NjgsOSBAQAogCQkJc3BlYy0+Z3Bpb19tYXNrOwogCX0KIAlpZiAoZ2V0X2ludF9oaW50KGNvZGVjLCAiZ3Bpb19kaXIiLCAmc3BlYy0+Z3Bpb19kaXIpKQotCQlzcGVjLT5ncGlvX21hc2sgJj0gc3BlYy0+Z3Bpb19tYXNrOwotCWlmIChnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX2RhdGEiLCAmc3BlYy0+Z3Bpb19kYXRhKSkKIAkJc3BlYy0+Z3Bpb19kaXIgJj0gc3BlYy0+Z3Bpb19tYXNrOworCWlmIChnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX2RhdGEiLCAmc3BlYy0+Z3Bpb19kYXRhKSkKKwkJc3BlYy0+Z3Bpb19kYXRhICY9IHNwZWMtPmdwaW9fbWFzazsKIAlpZiAoZ2V0X2ludF9oaW50KGNvZGVjLCAiZWFwZF9tYXNrIiwgJnNwZWMtPmVhcGRfbWFzaykpCiAJCXNwZWMtPmVhcGRfbWFzayAmPSBzcGVjLT5ncGlvX21hc2s7CiAJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fbXV0ZSIsICZzcGVjLT5ncGlvX211dGUpKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2FkaS9heGktaTJzLmMgYi9zb3VuZC9zb2MvYWRpL2F4aS1pMnMuYwppbmRleCA3NzUyODYwLi40YzIzMzgxNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2FkaS9heGktaTJzLmMKKysrIGIvc291bmQvc29jL2FkaS9heGktaTJzLmMKQEAgLTI0MCw2ICsyNDAsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2Nsa19kaXNhYmxlOwogCisJcmV0dXJuIDA7CisKIGVycl9jbGtfZGlzYWJsZToKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJzLT5jbGspOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwppbmRleCA5OWZmMzVlLi4zNWU0NGU0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKQEAgLTM0OCw3ICszNDgsNiBAQAogCXN0cnVjdCBhdG1lbF9wY21fZG1hX3BhcmFtcyAqZG1hX3BhcmFtczsKIAlpbnQgZGlyLCBjaGFubmVscywgYml0czsKIAl1MzIgdGZtciwgcmZtciwgdGNtciwgcmNtcjsKLQlpbnQgc3RhcnRfZXZlbnQ7CiAJaW50IHJldDsKIAlpbnQgZnNsZW4sIGZzbGVuX2V4dDsKIApAQCAtNDU3LDE5ICs0NTYsMTAgQEAKIAkJICogVGhlIFNTQyB0cmFuc21pdCBjbG9jayBpcyBvYnRhaW5lZCBmcm9tIHRoZSBCQ0xLIHNpZ25hbCBvbgogCQkgKiBvbiB0aGUgVEsgbGluZSwgYW5kIHRoZSBTU0MgcmVjZWl2ZSBjbG9jayBpcwogCQkgKiBnZW5lcmF0ZWQgZnJvbSB0aGUgdHJhbnNtaXQgY2xvY2suCi0JCSAqCi0JCSAqICBGb3Igc2luZ2xlIGNoYW5uZWwgZGF0YSwgb25lIHNhbXBsZSBpcyB0cmFuc2ZlcnJlZAotCQkgKiBvbiB0aGUgZmFsbGluZyBlZGdlIG9mIHRoZSBMUkMgY2xvY2suCi0JCSAqIEZvciB0d28gY2hhbm5lbCBkYXRhLCBvbmUgc2FtcGxlIGlzCi0JCSAqIHRyYW5zZmVycmVkIG9uIGJvdGggZWRnZXMgb2YgdGhlIExSQyBjbG9jay4KIAkJICovCi0JCXN0YXJ0X2V2ZW50ID0gKChjaGFubmVscyA9PSAxKQotCQkJCT8gU1NDX1NUQVJUX0ZBTExJTkdfUkYKLQkJCQk6IFNTQ19TVEFSVF9FREdFX1JGKTsKLQogCQlyY21yID0JICBTU0NfQkYoUkNNUl9QRVJJT0QsIDApCiAJCQl8IFNTQ19CRihSQ01SX1NUVERMWSwgU1RBUlRfREVMQVkpCi0JCQl8IFNTQ19CRihSQ01SX1NUQVJULCBzdGFydF9ldmVudCkKKwkJCXwgU1NDX0JGKFJDTVJfU1RBUlQsIFNTQ19TVEFSVF9GQUxMSU5HX1JGKQogCQkJfCBTU0NfQkYoUkNNUl9DS0ksIFNTQ19DS0lfUklTSU5HKQogCQkJfCBTU0NfQkYoUkNNUl9DS08sIFNTQ19DS09fTk9ORSkKIAkJCXwgU1NDX0JGKFJDTVJfQ0tTLCBzc2MtPmNsa19mcm9tX3JrX3BpbiA/CkBAIC00NzgsMTQgKzQ2OCwxNCBAQAogCQlyZm1yID0JICBTU0NfQkYoUkZNUl9GU0VER0UsIFNTQ19GU0VER0VfUE9TSVRJVkUpCiAJCQl8IFNTQ19CRihSRk1SX0ZTT1MsIFNTQ19GU09TX05PTkUpCiAJCQl8IFNTQ19CRihSRk1SX0ZTTEVOLCAwKQotCQkJfCBTU0NfQkYoUkZNUl9EQVROQiwgMCkKKwkJCXwgU1NDX0JGKFJGTVJfREFUTkIsIChjaGFubmVscyAtIDEpKQogCQkJfCBTU0NfQklUKFJGTVJfTVNCRikKIAkJCXwgU1NDX0JGKFJGTVJfTE9PUCwgMCkKIAkJCXwgU1NDX0JGKFJGTVJfREFUTEVOLCAoYml0cyAtIDEpKTsKIAogCQl0Y21yID0JICBTU0NfQkYoVENNUl9QRVJJT0QsIDApCiAJCQl8IFNTQ19CRihUQ01SX1NUVERMWSwgU1RBUlRfREVMQVkpCi0JCQl8IFNTQ19CRihUQ01SX1NUQVJULCBzdGFydF9ldmVudCkKKwkJCXwgU1NDX0JGKFRDTVJfU1RBUlQsIFNTQ19TVEFSVF9GQUxMSU5HX1JGKQogCQkJfCBTU0NfQkYoVENNUl9DS0ksIFNTQ19DS0lfRkFMTElORykKIAkJCXwgU1NDX0JGKFRDTVJfQ0tPLCBTU0NfQ0tPX05PTkUpCiAJCQl8IFNTQ19CRihUQ01SX0NLUywgc3NjLT5jbGtfZnJvbV9ya19waW4gPwpAQCAtNDk1LDcgKzQ4NSw3IEBACiAJCQl8IFNTQ19CRihURk1SX0ZTREVOLCAwKQogCQkJfCBTU0NfQkYoVEZNUl9GU09TLCBTU0NfRlNPU19OT05FKQogCQkJfCBTU0NfQkYoVEZNUl9GU0xFTiwgMCkKLQkJCXwgU1NDX0JGKFRGTVJfREFUTkIsIDApCisJCQl8IFNTQ19CRihURk1SX0RBVE5CLCAoY2hhbm5lbHMgLSAxKSkKIAkJCXwgU1NDX0JJVChURk1SX01TQkYpCiAJCQl8IFNTQ19CRihURk1SX0RBVERFRiwgMCkKIAkJCXwgU1NDX0JGKFRGTVJfREFUTEVOLCAoYml0cyAtIDEpKTsKQEAgLTUxMiw3ICs1MDIsNyBAQAogCQlyY21yID0JICBTU0NfQkYoUkNNUl9QRVJJT0QsIHNzY19wLT5yY21yX3BlcmlvZCkKIAkJCXwgU1NDX0JGKFJDTVJfU1RURExZLCAxKQogCQkJfCBTU0NfQkYoUkNNUl9TVEFSVCwgU1NDX1NUQVJUX1JJU0lOR19SRikKLQkJCXwgU1NDX0JGKFJDTVJfQ0tJLCBTU0NfQ0tJX1JJU0lORykKKwkJCXwgU1NDX0JGKFJDTVJfQ0tJLCBTU0NfQ0tJX0ZBTExJTkcpCiAJCQl8IFNTQ19CRihSQ01SX0NLTywgU1NDX0NLT19OT05FKQogCQkJfCBTU0NfQkYoUkNNUl9DS1MsIFNTQ19DS1NfRElWKTsKIApAQCAtNTI3LDcgKzUxNyw3IEBACiAJCXRjbXIgPQkgIFNTQ19CRihUQ01SX1BFUklPRCwgc3NjX3AtPnRjbXJfcGVyaW9kKQogCQkJfCBTU0NfQkYoVENNUl9TVFRETFksIDEpCiAJCQl8IFNTQ19CRihUQ01SX1NUQVJULCBTU0NfU1RBUlRfUklTSU5HX1JGKQotCQkJfCBTU0NfQkYoVENNUl9DS0ksIFNTQ19DS0lfUklTSU5HKQorCQkJfCBTU0NfQkYoVENNUl9DS0ksIFNTQ19DS0lfRkFMTElORykKIAkJCXwgU1NDX0JGKFRDTVJfQ0tPLCBTU0NfQ0tPX0NPTlRJTlVPVVMpCiAJCQl8IFNTQ19CRihUQ01SX0NLUywgU1NDX0NLU19ESVYpOwogCkBAIC01NTYsNyArNTQ2LDcgQEAKIAkJcmNtciA9CSAgU1NDX0JGKFJDTVJfUEVSSU9ELCAwKQogCQkJfCBTU0NfQkYoUkNNUl9TVFRETFksIFNUQVJUX0RFTEFZKQogCQkJfCBTU0NfQkYoUkNNUl9TVEFSVCwgU1NDX1NUQVJUX1JJU0lOR19SRikKLQkJCXwgU1NDX0JGKFJDTVJfQ0tJLCBTU0NfQ0tJX1JJU0lORykKKwkJCXwgU1NDX0JGKFJDTVJfQ0tJLCBTU0NfQ0tJX0ZBTExJTkcpCiAJCQl8IFNTQ19CRihSQ01SX0NLTywgU1NDX0NLT19OT05FKQogCQkJfCBTU0NfQkYoUkNNUl9DS1MsIHNzYy0+Y2xrX2Zyb21fcmtfcGluID8KIAkJCQkJICAgU1NDX0NLU19QSU4gOiBTU0NfQ0tTX0NMT0NLKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtNTEyeC5jIGIvc291bmQvc29jL2NvZGVjcy9wY201MTJ4LmMKaW5kZXggZTVmMmZiOC4uMzBjNjczYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9wY201MTJ4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9wY201MTJ4LmMKQEAgLTE4OCw4ICsxODgsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY201MTJ4X2RzcF9wcm9ncmFtX3RleHRzW10gPSB7CiAJIkZJUiBpbnRlcnBvbGF0aW9uIHdpdGggZGUtZW1waGFzaXMiLAogCSJMb3cgbGF0ZW5jeSBJSVIgd2l0aCBkZS1lbXBoYXNpcyIsCi0JIkZpeGVkIHByb2Nlc3MgZmxvdyIsCiAJIkhpZ2ggYXR0ZW51YXRpb24gd2l0aCBkZS1lbXBoYXNpcyIsCisJIkZpeGVkIHByb2Nlc3MgZmxvdyIsCiAJIlJpbmdpbmctbGVzcyBsb3cgbGF0ZW5jeSBGSVIiLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9ydDI4Ni5jIGIvc291bmQvc29jL2NvZGVjcy9ydDI4Ni5jCmluZGV4IDJjZDRmZTQuLjg0N2NjNGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcnQyODYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3J0Mjg2LmMKQEAgLTQxNyw2ICs0MTcsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0Mjg2X3NuZF9jb250cm9sc1tdID0gewogCVNPQ19ET1VCTEVfUl9UTFYoIkRBQzAgUGxheWJhY2sgVm9sdW1lIiwgUlQyODZfREFDTF9HQUlOLAogCQkJICAgIFJUMjg2X0RBQ1JfR0FJTiwgMCwgMHg3ZiwgMCwgb3V0X3ZvbF90bHYpLAorCVNPQ19ET1VCTEVfUigiQURDMCBDYXB0dXJlIFN3aXRjaCIsIFJUMjg2X0FEQ0xfR0FJTiwKKwkJCSAgICBSVDI4Nl9BRENSX0dBSU4sIDcsIDEsIDEpLAogCVNPQ19ET1VCTEVfUl9UTFYoIkFEQzAgQ2FwdHVyZSBWb2x1bWUiLCBSVDI4Nl9BRENMX0dBSU4sCiAJCQkgICAgUlQyODZfQURDUl9HQUlOLCAwLCAweDdmLCAwLCBvdXRfdm9sX3RsdiksCiAJU09DX1NJTkdMRV9UTFYoIkFNSUMgVm9sdW1lIiwgUlQyODZfTUlDX0dBSU4sCkBAIC01MzgsMzIgKzU0MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnQyODZfYWRjX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAotCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOwotCXVuc2lnbmVkIGludCBuaWQ7Ci0KLQluaWQgPSAody0+cmVnID4+IDIwKSAmIDB4ZmY7Ci0KLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6Ci0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsCi0JCQlWRVJCX0NNRChBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBuaWQsIDApLAotCQkJMHg3MDgwLCAweDcwMDApOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAotCQkJVkVSQl9DTUQoQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgbmlkLCAwKSwKLQkJCTB4NzA4MCwgMHg3MDgwKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgcnQyODZfdnJlZl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCSAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKQEAgLTY2NywxMiArNjQzLDEwIEBACiAJU05EX1NPQ19EQVBNX0FEQygiQURDIDEiLCBOVUxMLCBTTkRfU09DX05PUE0sIDAsIDApLAogCiAJLyogQURDIE11eCAqLwotCVNORF9TT0NfREFQTV9NVVhfRSgiQURDIDAgTXV4IiwgUlQyODZfU0VUX1BPV0VSKFJUMjg2X0FEQ19JTjEpLCAwLCAxLAotCQkmcnQyODZfYWRjMF9tdXgsIHJ0Mjg2X2FkY19ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTUQgfAotCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAotCVNORF9TT0NfREFQTV9NVVhfRSgiQURDIDEgTXV4IiwgUlQyODZfU0VUX1BPV0VSKFJUMjg2X0FEQ19JTjIpLCAwLCAxLAotCQkmcnQyODZfYWRjMV9tdXgsIHJ0Mjg2X2FkY19ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTUQgfAotCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCVNORF9TT0NfREFQTV9NVVgoIkFEQyAwIE11eCIsIFJUMjg2X1NFVF9QT1dFUihSVDI4Nl9BRENfSU4xKSwgMCwgMSwKKwkJJnJ0Mjg2X2FkYzBfbXV4KSwKKwlTTkRfU09DX0RBUE1fTVVYKCJBREMgMSBNdXgiLCBSVDI4Nl9TRVRfUE9XRVIoUlQyODZfQURDX0lOMiksIDAsIDEsCisJCSZydDI4Nl9hZGMxX211eCksCiAKIAkvKiBBdWRpbyBJbnRlcmZhY2UgKi8KIAlTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxUlgiLCAiQUlGMSBQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCkBAIC04NjEsMTAgKzgzNSw4IEBACiAJCVJUMjg2X0kyU19DVFJMMSwgMHgwMDE4LCBkX2xlbl9jb2RlIDw8IDMpOwogCWRldl9kYmcoY29kZWMtPmRldiwgImZvcm1hdCB2YWwgPSAweCV4XG4iLCB2YWwpOwogCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUMjg2X0RBQ19GT1JNQVQsIDB4NDA3ZiwgdmFsKTsKLQllbHNlCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUMjg2X0FEQ19GT1JNQVQsIDB4NDA3ZiwgdmFsKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDI4Nl9EQUNfRk9STUFULCAweDQwN2YsIHZhbCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQyODZfQURDX0ZPUk1BVCwgMHg0MDdmLCB2YWwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY0MC5jIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NDAuYwppbmRleCBjM2YyZGVjLi4xZmY3MjZjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY0MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQwLmMKQEAgLTIxMjQsNiArMjEyNCw3IEBACiBzdGF0aWMgc3RydWN0IGFjcGlfZGV2aWNlX2lkIHJ0NTY0MF9hY3BpX21hdGNoW10gPSB7CiAJeyAiSU5UMzNDQSIsIDAgfSwKIAl7ICIxMEVDNTY0MCIsIDAgfSwKKwl7ICIxMEVDNTY0MiIsIDAgfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBydDU2NDBfYWNwaV9tYXRjaCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY3Ny5jIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NzcuYwppbmRleCA4MWZlMTQ2Li45MThhZGE5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY3Ny5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1Njc3LmMKQEAgLTc4NCw4ICs3ODQsOCBAQAogc3RhdGljIGludCBydDU2NzdfZHNwX3ZhZF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgcnQ1Njc3X3ByaXYgKnJ0NTY3NyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBydDU2NzdfcHJpdiAqcnQ1Njc3ID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKIAogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gcnQ1Njc3LT5kc3BfdmFkX2VuOwogCkBAIC03OTUsOCArNzk1LDkgQEAKIHN0YXRpYyBpbnQgcnQ1Njc3X2RzcF92YWRfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHJ0NTY3N19wcml2ICpydDU2NzcgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgcnQ1Njc3X3ByaXYgKnJ0NTY3NyA9IHNuZF9zb2NfY29tcG9uZW50X2dldF9kcnZkYXRhKGNvbXBvbmVudCk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19jb21wb25lbnRfdG9fY29kZWMoY29tcG9uZW50KTsKIAogCXJ0NTY3Ny0+ZHNwX3ZhZF9lbiA9ICEhdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAKQEAgLTIwODIsMTAgKzIwODMsMTQgQEAKIAlzdHJ1Y3QgcnQ1Njc3X3ByaXYgKnJ0NTY3NyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewotCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CiAJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NzctPnJlZ21hcCwgUlQ1Njc3X1BMTDFfQ1RSTDIsIDB4MiwgMHgyKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKIAkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY3Ny0+cmVnbWFwLCBSVDU2NzdfUExMMV9DVFJMMiwgMHgyLCAweDApOwogCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTIxMDAsMTAgKzIxMDUsMTQgQEAKIAlzdHJ1Y3QgcnQ1Njc3X3ByaXYgKnJ0NTY3NyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewotCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CiAJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NzctPnJlZ21hcCwgUlQ1Njc3X1BMTDJfQ1RSTDIsIDB4MiwgMHgyKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKIAkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY3Ny0+cmVnbWFwLCBSVDU2NzdfUExMMl9DVFJMMiwgMHgyLCAweDApOwogCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTIyMTEsOSArMjIyMCwxMSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgcnQ1Njc3X2RhcG1fd2lkZ2V0c1tdID0gewogCVNORF9TT0NfREFQTV9TVVBQTFkoIlBMTDEiLCBSVDU2NzdfUFdSX0FOTEcyLCBSVDU2NzdfUFdSX1BMTDFfQklULAotCQkwLCBydDU2Nzdfc2V0X3BsbDFfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJCTAsIHJ0NTY3N19zZXRfcGxsMV9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAogCVNORF9TT0NfREFQTV9TVVBQTFkoIlBMTDIiLCBSVDU2NzdfUFdSX0FOTEcyLCBSVDU2NzdfUFdSX1BMTDJfQklULAotCQkwLCBydDU2Nzdfc2V0X3BsbDJfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJCTAsIHJ0NTY3N19zZXRfcGxsMl9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAogCiAJLyogSW5wdXQgU2lkZSAqLwogCS8qIG1pY2JpYXMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc2d0bDUwMDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvc2d0bDUwMDAuYwppbmRleCAyOWNmN2NlLi5hYTk4YmUzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NndGw1MDAwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9zZ3RsNTAwMC5jCkBAIC00ODMsMjEgKzQ4MywyMSBAQAogCS8qIHNldHRpbmcgaTJzIGRhdGEgZm9ybWF0ICovCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6Ci0JCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9QQ007CisJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9QQ00gPDwgU0dUTDUwMDBfSTJTX01PREVfU0hJRlQ7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6Ci0JCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9QQ007CisJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9QQ00gPDwgU0dUTDUwMDBfSTJTX01PREVfU0hJRlQ7CiAJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTFJBTElHTjsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6Ci0JCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9JMlNfTEo7CisJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9JMlNfTEogPDwgU0dUTDUwMDBfSTJTX01PREVfU0hJRlQ7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKLQkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19NT0RFX1JKOworCQlpMnNjdGwgfD0gU0dUTDUwMDBfSTJTX01PREVfUkogPDwgU0dUTDUwMDBfSTJTX01PREVfU0hJRlQ7CiAJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTFJQT0w7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgotCQlpMnNjdGwgfD0gU0dUTDUwMDBfSTJTX01PREVfSTJTX0xKOworCQlpMnNjdGwgfD0gU0dUTDUwMDBfSTJTX01PREVfSTJTX0xKIDw8IFNHVEw1MDAwX0kyU19NT0RFX1NISUZUOwogCQlpMnNjdGwgfD0gU0dUTDUwMDBfSTJTX0xSQUxJR047CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNDYyLDYgKzE0NjIsOSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKiBOZWVkIDggY2xvY2tzIGJlZm9yZSBJMkMgYWNjZXNzZXMgKi8KKwl1ZGVsYXkoMSk7CisKIAkvKiByZWFkIGNoaXAgaW5mb3JtYXRpb24gKi8KIAlyZXQgPSByZWdtYXBfcmVhZChzZ3RsNTAwMC0+cmVnbWFwLCBTR1RMNTAwMF9DSElQX0lELCAmcmVnKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zdGEzMnguaCBiL3NvdW5kL3NvYy9jb2RlY3Mvc3RhMzJ4LmgKaW5kZXggZDhlMzJhNi4uZDMxOTFjOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9zdGEzMnguaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3N0YTMyeC5oCkBAIC0xMzEsNyArMTMxLDcgQEAKICNkZWZpbmUgU1RBMzJYX0NPTkZGX09DRkdfTUFTSwkweDAzCiAjZGVmaW5lIFNUQTMyWF9DT05GRl9PQ0ZHX1NISUZUCTAKICNkZWZpbmUgU1RBMzJYX0NPTkZGX0lERQkweDA0Ci0jZGVmaW5lIFNUQTMyWF9DT05GRl9JREVfU0hJRlQJMworI2RlZmluZSBTVEEzMlhfQ09ORkZfSURFX1NISUZUCTIKICNkZWZpbmUgU1RBMzJYX0NPTkZGX0JDTEUJMHgwOAogI2RlZmluZSBTVEEzMlhfQ09ORkZfRUNMRQkweDIwCiAjZGVmaW5lIFNUQTMyWF9DT05GRl9QV0ROCTB4NDAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHMzYTIyN2UuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHMzYTIyN2UuYwppbmRleCAxZDEyMDU3Li45ZjJkY2VkMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90czNhMjI3ZS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHMzYTIyN2UuYwpAQCAtMjU0LDYgKzI1NCw3IEBACiAJc3RydWN0IHRzM2EyMjdlICp0czNhMjI3ZTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaTJjLT5kZXY7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgYWNjX3JlZzsKIAogCXRzM2EyMjdlID0gZGV2bV9remFsbG9jKCZpMmMtPmRldiwgc2l6ZW9mKCp0czNhMjI3ZSksIEdGUF9LRVJORUwpOwogCWlmICh0czNhMjI3ZSA9PSBOVUxMKQpAQCAtMjgzLDYgKzI4NCwxMSBAQAogCQkJICAgSU5UQl9ESVNBQkxFIHwgQURDX0NPTVBMRVRFX0lOVF9ESVNBQkxFLAogCQkJICAgQURDX0NPTVBMRVRFX0lOVF9ESVNBQkxFKTsKIAorCS8qIFJlYWQgamFjayBzdGF0dXMgYmVjYXVzZSBjaGlwIG1pZ2h0IG5vdCB0cmlnZ2VyIGludGVycnVwdCBhdCBib290LiAqLworCXJlZ21hcF9yZWFkKHRzM2EyMjdlLT5yZWdtYXAsIFRTM0EyMjdFX1JFR19BQ0NFU1NPUllfU1RBVFVTLCAmYWNjX3JlZyk7CisJdHMzYTIyN2VfbmV3X2phY2tfc3RhdGUodHMzYTIyN2UsIGFjY19yZWcpOworCXRzM2EyMjdlX2phY2tfcmVwb3J0KHRzM2EyMjdlKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwppbmRleCBiOTIxMWI0Li5iMTE1ZWQ4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKQEAgLTcxNyw2ICs3MTcsOCBAQAogCWlmICh3bTg3MzEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwltdXRleF9pbml0KCZ3bTg3MzEtPmxvY2spOworCiAJd204NzMxLT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhpMmMsICZ3bTg3MzFfcmVnbWFwKTsKIAlpZiAoSVNfRVJSKHdtODczMS0+cmVnbWFwKSkgewogCQlyZXQgPSBQVFJfRVJSKHdtODczMS0+cmVnbWFwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jCmluZGV4IDRkMmQyYjEuLjc1Yjg3YzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYwpAQCAtMTA3NiwxMCArMTA3NiwxMyBAQAogCXsgIlJpZ2h0IENhcHR1cmUgUEdBIiwgTlVMTCwgIlJpZ2h0IENhcHR1cmUgTXV4IiB9LAogCXsgIlJpZ2h0IENhcHR1cmUgUEdBIiwgTlVMTCwgIlJpZ2h0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIgfSwKIAotCXsgIkFJRk9VVEwiLCAiTGVmdCIsICAiQURDTCIgfSwKLQl7ICJBSUZPVVRMIiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCi0JeyAiQUlGT1VUUiIsICJMZWZ0IiwgICJBRENMIiB9LAotCXsgIkFJRk9VVFIiLCAiUmlnaHQiLCAiQURDUiIgfSwKKwl7ICJBSUZPVVRMIE11eCIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiQUlGT1VUTCBNdXgiLCAiUmlnaHQiLCAiQURDUiIgfSwKKwl7ICJBSUZPVVRSIE11eCIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiQUlGT1VUUiBNdXgiLCAiUmlnaHQiLCAiQURDUiIgfSwKKworCXsgIkFJRk9VVEwiLCBOVUxMLCAiQUlGT1VUTCBNdXgiIH0sCisJeyAiQUlGT1VUUiIsIE5VTEwsICJBSUZPVVRSIE11eCIgfSwKIAogCXsgIkFEQ0wiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKIAl7ICJBRENMIiwgTlVMTCwgIkxlZnQgQ2FwdHVyZSBQR0EiIH0sCkBAIC0xMDg5LDEyICsxMDkyLDE2IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBkYWNfaW50ZXJjb25bXSA9IHsKLQl7ICJEQUNMIiwgIlJpZ2h0IiwgIkFJRklOUiIgfSwKLQl7ICJEQUNMIiwgIkxlZnQiLCAgIkFJRklOTCIgfSwKKwl7ICJEQUNMIE11eCIsICJMZWZ0IiwgIkFJRklOTCIgfSwKKwl7ICJEQUNMIE11eCIsICJSaWdodCIsICJBSUZJTlIiIH0sCisKKwl7ICJEQUNSIE11eCIsICJMZWZ0IiwgIkFJRklOTCIgfSwKKwl7ICJEQUNSIE11eCIsICJSaWdodCIsICJBSUZJTlIiIH0sCisKKwl7ICJEQUNMIiwgTlVMTCwgIkRBQ0wgTXV4IiB9LAogCXsgIkRBQ0wiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKIAotCXsgIkRBQ1IiLCAiUmlnaHQiLCAiQUlGSU5SIiB9LAotCXsgIkRBQ1IiLCAiTGVmdCIsICAiQUlGSU5MIiB9LAorCXsgIkRBQ1IiLCBOVUxMLCAiREFDUiBNdXgiIH0sCiAJeyAiREFDUiIsIE5VTEwsICJDTEtfRFNQIiB9LAogCiAJeyAiQ2hhcmdlIHB1bXAiLCBOVUxMLCAiU1lTQ0xLIiB9LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYwLmMKaW5kZXggMDMxYTFhZS4uYTk2ZWI0OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NjAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MC5jCkBAIC01NTYsNyArNTU2LDcgQEAKIAl7IDIyMDUwLCAyIH0sCiAJeyAyNDAwMCwgMiB9LAogCXsgMTYwMDAsIDMgfSwKLQl7IDExMjUwLCA0IH0sCisJeyAxMTAyNSwgNCB9LAogCXsgMTIwMDAsIDQgfSwKIAl7ICA4MDAwLCA1IH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MDUuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMKaW5kZXggM2VkZGIxOC4uNWNjNDU3ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MDUuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jCkBAIC0zNDQsMjMgKzM0NCwyNyBAQAogCXN0cnVjdCBzbmRfYWM5NyAqYWM5NzsKIAlpbnQgcmV0ID0gMDsKIAotCWFjOTcgPSBzbmRfc29jX25ld19hYzk3X2NvZGVjKGNvZGVjKTsKKwlhYzk3ID0gc25kX3NvY19hbGxvY19hYzk3X2NvZGVjKGNvZGVjKTsKIAlpZiAoSVNfRVJSKGFjOTcpKSB7CiAJCXJldCA9IFBUUl9FUlIoYWM5Nyk7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBBQzk3IGNvZGVjXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlzbmRfc29jX2NvZGVjX3NldF9kcnZkYXRhKGNvZGVjLCBhYzk3KTsKLQogCXJldCA9IHdtOTcwNV9yZXNldChjb2RlYyk7CiAJaWYgKHJldCkKLQkJZ290byByZXNldF9lcnI7CisJCWdvdG8gZXJyX3B1dF9kZXZpY2U7CisKKwlyZXQgPSBkZXZpY2VfYWRkKCZhYzk3LT5kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3B1dF9kZXZpY2U7CisKKwlzbmRfc29jX2NvZGVjX3NldF9kcnZkYXRhKGNvZGVjLCBhYzk3KTsKIAogCXJldHVybiAwOwogCi1yZXNldF9lcnI6Ci0Jc25kX3NvY19mcmVlX2FjOTdfY29kZWMoYWM5Nyk7CitlcnJfcHV0X2RldmljZToKKwlwdXRfZGV2aWNlKCZhYzk3LT5kZXYpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCmluZGV4IGUwNDY0M2QuLjk1MTc1NzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwpAQCAtNjY2LDcgKzY2Niw3IEBACiAJc3RydWN0IHdtOTcxMl9wcml2ICp3bTk3MTIgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlpbnQgcmV0ID0gMDsKIAotCXdtOTcxMi0+YWM5NyA9IHNuZF9zb2NfbmV3X2FjOTdfY29kZWMoY29kZWMpOworCXdtOTcxMi0+YWM5NyA9IHNuZF9zb2NfYWxsb2NfYWM5N19jb2RlYyhjb2RlYyk7CiAJaWYgKElTX0VSUih3bTk3MTItPmFjOTcpKSB7CiAJCXJldCA9IFBUUl9FUlIod205NzEyLT5hYzk3KTsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIEFDOTcgY29kZWM6ICVkXG4iLCByZXQpOwpAQCAtNjc1LDE1ICs2NzUsMTkgQEAKIAogCXJldCA9IHdtOTcxMl9yZXNldChjb2RlYywgMCk7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gcmVzZXRfZXJyOworCQlnb3RvIGVycl9wdXRfZGV2aWNlOworCisJcmV0ID0gZGV2aWNlX2FkZCgmd205NzEyLT5hYzk3LT5kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3B1dF9kZXZpY2U7CiAKIAkvKiBzZXQgYWxjIG11eCB0byBub25lICovCiAJYWM5N193cml0ZShjb2RlYywgQUM5N19WSURFTywgYWM5N19yZWFkKGNvZGVjLCBBQzk3X1ZJREVPKSB8IDB4MzAwMCk7CiAKIAlyZXR1cm4gMDsKIAotcmVzZXRfZXJyOgotCXNuZF9zb2NfZnJlZV9hYzk3X2NvZGVjKHdtOTcxMi0+YWM5Nyk7CitlcnJfcHV0X2RldmljZToKKwlwdXRfZGV2aWNlKCZ3bTk3MTItPmFjOTctPmRldik7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKaW5kZXggNzFiOWQ1YjAuLjZhYjExMjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYwpAQCAtMTIyNSw3ICsxMjI1LDcgQEAKIAlzdHJ1Y3Qgd205NzEzX3ByaXYgKndtOTcxMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCWludCByZXQgPSAwLCByZWc7CiAKLQl3bTk3MTMtPmFjOTcgPSBzbmRfc29jX25ld19hYzk3X2NvZGVjKGNvZGVjKTsKKwl3bTk3MTMtPmFjOTcgPSBzbmRfc29jX2FsbG9jX2FjOTdfY29kZWMoY29kZWMpOwogCWlmIChJU19FUlIod205NzEzLT5hYzk3KSkKIAkJcmV0dXJuIFBUUl9FUlIod205NzEzLT5hYzk3KTsKIApAQCAtMTIzNCw3ICsxMjM0LDExIEBACiAJd205NzEzX3Jlc2V0KGNvZGVjLCAwKTsKIAlyZXQgPSB3bTk3MTNfcmVzZXQoY29kZWMsIDEpOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIHJlc2V0X2VycjsKKwkJZ290byBlcnJfcHV0X2RldmljZTsKKworCXJldCA9IGRldmljZV9hZGQoJndtOTcxMy0+YWM5Ny0+ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wdXRfZGV2aWNlOwogCiAJLyogdW5tdXRlIHRoZSBhZGMgLSBtb3ZlIHRvIGtjb250cm9sICovCiAJcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0NEKSAmIDB4N2ZmZjsKQEAgLTEyNDIsOCArMTI0Niw4IEBACiAKIAlyZXR1cm4gMDsKIAotcmVzZXRfZXJyOgotCXNuZF9zb2NfZnJlZV9hYzk3X2NvZGVjKHdtOTcxMy0+YWM5Nyk7CitlcnJfcHV0X2RldmljZToKKwlwdXRfZGV2aWNlKCZ3bTk3MTMtPmFjOTctPmRldik7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2R3Yy9kZXNpZ253YXJlX2kycy5jIGIvc291bmQvc29jL2R3Yy9kZXNpZ253YXJlX2kycy5jCmluZGV4IGI5MzE2OGQuLjhkMThiYmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kd2MvZGVzaWdud2FyZV9pMnMuYworKysgYi9zb3VuZC9zb2MvZHdjL2Rlc2lnbndhcmVfaTJzLmMKQEAgLTIwOSwxNiArMjA5LDkgQEAKIAogCXN3aXRjaCAoY29uZmlnLT5jaGFuX25yKSB7CiAJY2FzZSBFSUdIVF9DSEFOTkVMX1NVUFBPUlQ6Ci0JCWNoX3JlZyA9IDM7Ci0JCWJyZWFrOwogCWNhc2UgU0lYX0NIQU5ORUxfU1VQUE9SVDoKLQkJY2hfcmVnID0gMjsKLQkJYnJlYWs7CiAJY2FzZSBGT1VSX0NIQU5ORUxfU1VQUE9SVDoKLQkJY2hfcmVnID0gMTsKLQkJYnJlYWs7CiAJY2FzZSBUV09fQ0hBTk5FTF9TVVBQT1JUOgotCQljaF9yZWcgPSAwOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGRldi0+ZGV2LCAiY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKQEAgLTIyNywxOCArMjIwLDIyIEBACiAKIAlpMnNfZGlzYWJsZV9jaGFubmVscyhkZXYsIHN1YnN0cmVhbS0+c3RyZWFtKTsKIAotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgVENSKGNoX3JlZyksIHhmZXJfcmVzb2x1dGlvbik7Ci0JCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgVEZDUihjaF9yZWcpLCAweDAyKTsKLQkJaXJxID0gaTJzX3JlYWRfcmVnKGRldi0+aTJzX2Jhc2UsIElNUihjaF9yZWcpKTsKLQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBJTVIoY2hfcmVnKSwgaXJxICYgfjB4MzApOwotCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFRFUihjaF9yZWcpLCAxKTsKLQl9IGVsc2UgewotCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFJDUihjaF9yZWcpLCB4ZmVyX3Jlc29sdXRpb24pOwotCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFJGQ1IoY2hfcmVnKSwgMHgwNyk7Ci0JCWlycSA9IGkyc19yZWFkX3JlZyhkZXYtPmkyc19iYXNlLCBJTVIoY2hfcmVnKSk7Ci0JCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgSU1SKGNoX3JlZyksIGlycSAmIH4weDAzKTsKLQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBSRVIoY2hfcmVnKSwgMSk7CisJZm9yIChjaF9yZWcgPSAwOyBjaF9yZWcgPCAoY29uZmlnLT5jaGFuX25yIC8gMik7IGNoX3JlZysrKSB7CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFRDUihjaF9yZWcpLAorCQkJCSAgICAgIHhmZXJfcmVzb2x1dGlvbik7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFRGQ1IoY2hfcmVnKSwgMHgwMik7CisJCQlpcnEgPSBpMnNfcmVhZF9yZWcoZGV2LT5pMnNfYmFzZSwgSU1SKGNoX3JlZykpOworCQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBJTVIoY2hfcmVnKSwgaXJxICYgfjB4MzApOworCQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBURVIoY2hfcmVnKSwgMSk7CisJCX0gZWxzZSB7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFJDUihjaF9yZWcpLAorCQkJCSAgICAgIHhmZXJfcmVzb2x1dGlvbik7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFJGQ1IoY2hfcmVnKSwgMHgwNyk7CisJCQlpcnEgPSBpMnNfcmVhZF9yZWcoZGV2LT5pMnNfYmFzZSwgSU1SKGNoX3JlZykpOworCQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBJTVIoY2hfcmVnKSwgaXJxICYgfjB4MDMpOworCQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBSRVIoY2hfcmVnKSwgMSk7CisJCX0KIAl9CiAKIAlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIENDUiwgY2NyKTsKQEAgLTI2Myw2ICsyNjAsMTkgQEAKIAlzbmRfc29jX2RhaV9zZXRfZG1hX2RhdGEoZGFpLCBzdWJzdHJlYW0sIE5VTEwpOwogfQogCitzdGF0aWMgaW50IGR3X2kyc19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgZHdfaTJzX2RldiAqZGV2ID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFRYRkZSLCAxKTsKKwllbHNlCisJCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgUlhGRlIsIDEpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZHdfaTJzX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCWludCBjbWQsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewpAQCAtMjk0LDYgKzMwNCw3IEBACiAJLnN0YXJ0dXAJPSBkd19pMnNfc3RhcnR1cCwKIAkuc2h1dGRvd24JPSBkd19pMnNfc2h1dGRvd24sCiAJLmh3X3BhcmFtcwk9IGR3X2kyc19od19wYXJhbXMsCisJLnByZXBhcmUJPSBkd19pMnNfcHJlcGFyZSwKIAkudHJpZ2dlcgk9IGR3X2kyc190cmlnZ2VyLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfZXNhaS5oIGIvc291bmQvc29jL2ZzbC9mc2xfZXNhaS5oCmluZGV4IDkxYTU1MGYuLjVlNzkzYmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsX2VzYWkuaAorKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9lc2FpLmgKQEAgLTMwMiw3ICszMDIsNyBAQAogI2RlZmluZSBFU0FJX3hDQ1JfeEZQX01BU0sJKCgoMSA8PCBFU0FJX3hDQ1JfeEZQX1dJRFRIKSAtIDEpIDw8IEVTQUlfeENDUl94RlBfU0hJRlQpCiAjZGVmaW5lIEVTQUlfeENDUl94RlAodikJKCgoKHYpIC0gMSkgPDwgRVNBSV94Q0NSX3hGUF9TSElGVCkgJiBFU0FJX3hDQ1JfeEZQX01BU0spCiAjZGVmaW5lIEVTQUlfeENDUl94RENfU0hJRlQgICAgIDkKLSNkZWZpbmUgRVNBSV94Q0NSX3hEQ19XSURUSAk0CisjZGVmaW5lIEVTQUlfeENDUl94RENfV0lEVEgJNQogI2RlZmluZSBFU0FJX3hDQ1JfeERDX01BU0sJKCgoMSA8PCBFU0FJX3hDQ1JfeERDX1dJRFRIKSAtIDEpIDw8IEVTQUlfeENDUl94RENfU0hJRlQpCiAjZGVmaW5lIEVTQUlfeENDUl94REModikJKCgoKHYpIC0gMSkgPDwgRVNBSV94Q0NSX3hEQ19TSElGVCkgJiBFU0FJX3hDQ1JfeERDX01BU0spCiAjZGVmaW5lIEVTQUlfeENDUl94UFNSX1NISUZUCTgKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKaW5kZXggYTY1ZjE3ZC4uMDU5NDk2ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKQEAgLTEzNjIsOSArMTM2Miw5IEBACiAJfQogCiAJc3NpX3ByaXZhdGUtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKCFzc2lfcHJpdmF0ZS0+aXJxKSB7CisJaWYgKHNzaV9wcml2YXRlLT5pcnEgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSBmb3Igbm9kZSAlc1xuIiwgbnAtPmZ1bGxfbmFtZSk7Ci0JCXJldHVybiAtRU5YSU87CisJCXJldHVybiBzc2lfcHJpdmF0ZS0+aXJxOwogCX0KIAogCS8qIEFyZSB0aGUgUlggYW5kIHRoZSBUWCBjbG9ja3MgbG9ja2VkPyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9pbXgtd204OTYyLmMgYi9zb3VuZC9zb2MvZnNsL2lteC13bTg5NjIuYwppbmRleCA0Y2FhY2IwLi5jZDE0NmQ0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2lteC13bTg5NjIuYworKysgYi9zb3VuZC9zb2MvZnNsL2lteC13bTg5NjIuYwpAQCAtMjU3LDYgKzI1Nyw3IEBACiAJaWYgKHJldCkKIAkJZ290byBjbGtfZmFpbDsKIAlkYXRhLT5jYXJkLm51bV9saW5rcyA9IDE7CisJZGF0YS0+Y2FyZC5vd25lciA9IFRISVNfTU9EVUxFOwogCWRhdGEtPmNhcmQuZGFpX2xpbmsgPSAmZGF0YS0+ZGFpOwogCWRhdGEtPmNhcmQuZGFwbV93aWRnZXRzID0gaW14X3dtODk2Ml9kYXBtX3dpZGdldHM7CiAJZGF0YS0+Y2FyZC5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRShpbXhfd204OTYyX2RhcG1fd2lkZ2V0cyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZ2VuZXJpYy9zaW1wbGUtY2FyZC5jIGIvc291bmQvc29jL2dlbmVyaWMvc2ltcGxlLWNhcmQuYwppbmRleCBmYjkyNDBmLi43ZmUzMDA5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZ2VuZXJpYy9zaW1wbGUtY2FyZC5jCisrKyBiL3NvdW5kL3NvYy9nZW5lcmljL3NpbXBsZS1jYXJkLmMKQEAgLTQ1Miw5ICs0NTIsOCBAQAogfQogCiAvKiBEZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBkZXZpY2Ugbm9kZXMgKi8KLXN0YXRpYyBpbnQgYXNvY19zaW1wbGVfY2FyZF91bnJlZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBhc29jX3NpbXBsZV9jYXJkX3VucmVmKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluazsKIAlpbnQgbnVtX2xpbmtzOwogCkBAIC01NTYsNyArNTU1LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogZXJyOgotCWFzb2Nfc2ltcGxlX2NhcmRfdW5yZWYocGRldik7CisJYXNvY19zaW1wbGVfY2FyZF91bnJlZigmcHJpdi0+c25kX2NhcmQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU3Miw3ICs1NzEsNyBAQAogCQlzbmRfc29jX2phY2tfZnJlZV9ncGlvcygmc2ltcGxlX2NhcmRfbWljX2phY2ssIDEsCiAJCQkJCSZzaW1wbGVfY2FyZF9taWNfamFja19ncGlvKTsKIAotCXJldHVybiBhc29jX3NpbXBsZV9jYXJkX3VucmVmKHBkZXYpOworCXJldHVybiBhc29jX3NpbXBsZV9jYXJkX3VucmVmKGNhcmQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhc29jX3NpbXBsZV9vZl9tYXRjaFtdID0gewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL0tjb25maWcgYi9zb3VuZC9zb2MvaW50ZWwvS2NvbmZpZwppbmRleCBlOTg5ZWNmLi5mODZkZTEyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvaW50ZWwvS2NvbmZpZwpAQCAtODksNyArODksNyBAQAogCiBjb25maWcgU05EX1NPQ19JTlRFTF9CWVRDUl9SVDU2NDBfTUFDSAogCXRyaXN0YXRlICJBU29DIEF1ZGlvIERTUCBTdXBwb3J0IGZvciBNSUQgQllUIFBsYXRmb3JtIgotCWRlcGVuZHMgb24gWDg2CisJZGVwZW5kcyBvbiBYODYgJiYgSTJDCiAJc2VsZWN0IFNORF9TT0NfUlQ1NjQwCiAJc2VsZWN0IFNORF9TU1RfTUZMRF9QTEFURk9STQogCXNlbGVjdCBTTkRfU1NUX0lQQ19BQ1BJCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogY29uZmlnIFNORF9TT0NfSU5URUxfQ0hUX0JTV19SVDU2NzJfTUFDSAogICAgICAgICB0cmlzdGF0ZSAiQVNvQyBBdWRpbyBkcml2ZXIgZm9yIEludGVsIENoZXJyeXRyYWlsICYgQnJhc3dlbGwgd2l0aCBSVDU2NzIgY29kZWMiCi0gICAgICAgIGRlcGVuZHMgb24gWDg2X0lOVEVMX0xQU1MKKyAgICAgICAgZGVwZW5kcyBvbiBYODZfSU5URUxfTFBTUyAmJiBJMkMKICAgICAgICAgc2VsZWN0IFNORF9TT0NfUlQ1NjcwCiAgICAgICAgIHNlbGVjdCBTTkRfU1NUX01GTERfUExBVEZPUk0KICAgICAgICAgc2VsZWN0IFNORF9TU1RfSVBDX0FDUEkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9ieXRjcl9kcGNtX3J0NTY0MC5jIGIvc291bmQvc29jL2ludGVsL2J5dGNyX2RwY21fcnQ1NjQwLmMKaW5kZXggZjVkMGZjMS4uZWVmMGM1NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL2J5dGNyX2RwY21fcnQ1NjQwLmMKKysrIGIvc291bmQvc29jL2ludGVsL2J5dGNyX2RwY21fcnQ1NjQwLmMKQEAgLTIyNyw0ICsyMjcsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIEludGVsKFIpIEJheXRyYWlsIENSIE1hY2hpbmUgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJTdWJocmFuc3UgUy4gUHJ1c3R5IDxzdWJocmFuc3Uucy5wcnVzdHlAaW50ZWwuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpieXRydDU2NDAtYXVkaW8iKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06Ynl0dDEwMF9ydDU2NDAiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9zc3QtZmlybXdhcmUuYyBiL3NvdW5kL3NvYy9pbnRlbC9zc3QtZmlybXdhcmUuYwppbmRleCA0YTViZGU5Li5iM2Y5NDg5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvc3N0LWZpcm13YXJlLmMKKysrIGIvc291bmQvc29jL2ludGVsL3NzdC1maXJtd2FyZS5jCkBAIC03MDYsNiArNzA2LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpibG9ja19saXN0KQogewogCXN0cnVjdCBzc3RfbWVtX2Jsb2NrICpibG9jaywgKnRtcDsKKwlzdHJ1Y3Qgc3N0X2Jsb2NrX2FsbG9jYXRvciBiYV90bXAgPSAqYmE7CiAJdTMyIGVuZCA9IGJhLT5vZmZzZXQgKyBiYS0+c2l6ZSwgYmxvY2tfZW5kOwogCWludCBlcnI7CiAKQEAgLTczMCw5ICs3MzEsOSBAQAogCQlpZiAoYmEtPm9mZnNldCA+PSBibG9jay0+b2Zmc2V0ICYmIGJhLT5vZmZzZXQgPCBibG9ja19lbmQpIHsKIAogCQkJLyogYWxpZ24gYmEgdG8gYmxvY2sgYm91bmRhcnkgKi8KLQkJCWJhLT5zaXplIC09IGJsb2NrX2VuZCAtIGJhLT5vZmZzZXQ7Ci0JCQliYS0+b2Zmc2V0ID0gYmxvY2tfZW5kOwotCQkJZXJyID0gYmxvY2tfYWxsb2NfY29udGlndW91cyhkc3AsIGJhLCBibG9ja19saXN0KTsKKwkJCWJhX3RtcC5zaXplIC09IGJsb2NrX2VuZCAtIGJhLT5vZmZzZXQ7CisJCQliYV90bXAub2Zmc2V0ID0gYmxvY2tfZW5kOworCQkJZXJyID0gYmxvY2tfYWxsb2NfY29udGlndW91cyhkc3AsICZiYV90bXAsIGJsb2NrX2xpc3QpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTc2MywxMCArNzY0LDE0IEBACiAJCS8qIGRvZXMgYmxvY2sgc3BhbiBtb3JlIHRoYW4gMSBzZWN0aW9uICovCiAJCWlmIChiYS0+b2Zmc2V0ID49IGJsb2NrLT5vZmZzZXQgJiYgYmEtPm9mZnNldCA8IGJsb2NrX2VuZCkgewogCisJCQkvKiBhZGQgYmxvY2sgKi8KKwkJCWxpc3RfbW92ZSgmYmxvY2stPmxpc3QsICZkc3AtPnVzZWRfYmxvY2tfbGlzdCk7CisJCQlsaXN0X2FkZCgmYmxvY2stPm1vZHVsZV9saXN0LCBibG9ja19saXN0KTsKIAkJCS8qIGFsaWduIGJhIHRvIGJsb2NrIGJvdW5kYXJ5ICovCi0JCQliYS0+b2Zmc2V0ID0gYmxvY2stPm9mZnNldDsKKwkJCWJhX3RtcC5zaXplIC09IGJsb2NrX2VuZCAtIGJhLT5vZmZzZXQ7CisJCQliYV90bXAub2Zmc2V0ID0gYmxvY2tfZW5kOwogCi0JCQllcnIgPSBibG9ja19hbGxvY19jb250aWd1b3VzKGRzcCwgYmEsIGJsb2NrX2xpc3QpOworCQkJZXJyID0gYmxvY2tfYWxsb2NfY29udGlndW91cyhkc3AsICZiYV90bXAsIGJsb2NrX2xpc3QpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9zc3QtaGFzd2VsbC1pcGMuYyBiL3NvdW5kL3NvYy9pbnRlbC9zc3QtaGFzd2VsbC1pcGMuYwppbmRleCAzZjhjNDgyLi44MTU2Y2MxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvc3N0LWhhc3dlbGwtaXBjLmMKKysrIGIvc291bmQvc29jL2ludGVsL3NzdC1oYXN3ZWxsLWlwYy5jCkBAIC02NTEsMTEgKzY1MSwxMSBAQAogCX0KIAogCS8qIHRlbGwgRFNQIHRoYXQgbm90aWZpY2F0aW9uIGhhcyBiZWVuIGhhbmRsZWQgKi8KLQlzc3RfZHNwX3NoaW1fdXBkYXRlX2JpdHNfdW5sb2NrZWQoaHN3LT5kc3AsIFNTVF9JUENELAorCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0cyhoc3ctPmRzcCwgU1NUX0lQQ0QsCiAJCVNTVF9JUENEX0JVU1kgfCBTU1RfSVBDRF9ET05FLCBTU1RfSVBDRF9ET05FKTsKIAogCS8qIHVubWFzayBidXN5IGludGVycnVwdCAqLwotCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0c191bmxvY2tlZChoc3ctPmRzcCwgU1NUX0lNUlgsIFNTVF9JTVJYX0JVU1ksIDApOworCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0cyhoc3ctPmRzcCwgU1NUX0lNUlgsIFNTVF9JTVJYX0JVU1ksIDApOwogfQogCiBzdGF0aWMgc3RydWN0IGlwY19tZXNzYWdlICpyZXBseV9maW5kX21zZyhzdHJ1Y3Qgc3N0X2hzdyAqaHN3LCB1MzIgaGVhZGVyKQpAQCAtMTIyOCw2ICsxMjI4LDExIEBACiAJc3RydWN0IHNzdF9kc3AgKnNzdCA9IGhzdy0+ZHNwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoIXN0cmVhbSkgeworCQlkZXZfd2Fybihoc3ctPmRldiwgIndhcm5pbmc6IHN0cmVhbSBpcyBOVUxMLCBubyBzdHJlYW0gdG8gZnJlZSwgaWdub3JlIGl0LlxuIik7CisJCXJldHVybiAwOworCX0KKwogCS8qIGRvbnQgZnJlZSBEU1Agc3RyZWFtcyB0aGF0IGFyZSBub3QgY29tbWl0ZWQgKi8KIAlpZiAoIXN0cmVhbS0+Y29tbWl0ZWQpCiAJCWdvdG8gb3V0OwpAQCAtMTQxNSw2ICsxNDIwLDE2IEBACiAJdTMyIGhlYWRlcjsKIAlpbnQgcmV0OwogCisJaWYgKCFzdHJlYW0pIHsKKwkJZGV2X3dhcm4oaHN3LT5kZXYsICJ3YXJuaW5nOiBzdHJlYW0gaXMgTlVMTCwgbm8gc3RyZWFtIHRvIGNvbW1pdCwgaWdub3JlIGl0LlxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJlYW0tPmNvbW1pdGVkKSB7CisJCWRldl93YXJuKGhzdy0+ZGV2LCAid2FybmluZzogc3RyZWFtIGlzIGFscmVhZHkgY29tbWl0dGVkLCBpZ25vcmUgaXQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJdHJhY2VfaXBjX3JlcXVlc3QoInN0cmVhbSBhbGxvYyIsIHN0cmVhbS0+aG9zdF9pZCk7CiAKIAloZWFkZXIgPSBJUENfR0xCX1RZUEUoSVBDX0dMQl9BTExPQ0FURV9TVFJFQU0pOwpAQCAtMTUxOSw2ICsxNTM0LDExIEBACiB7CiAJaW50IHJldDsKIAorCWlmICghc3RyZWFtKSB7CisJCWRldl93YXJuKGhzdy0+ZGV2LCAid2FybmluZzogc3RyZWFtIGlzIE5VTEwsIG5vIHN0cmVhbSB0byBwYXVzZSwgaWdub3JlIGl0LlxuIik7CisJCXJldHVybiAwOworCX0KKwogCXRyYWNlX2lwY19yZXF1ZXN0KCJzdHJlYW0gcGF1c2UiLCBzdHJlYW0tPnJlcGx5LnN0cmVhbV9od19pZCk7CiAKIAlyZXQgPSBzc3RfaHN3X3N0cmVhbV9vcGVyYXRpb25zKGhzdywgSVBDX1NUUl9QQVVTRSwKQEAgLTE1MzUsNiArMTU1NSwxMSBAQAogewogCWludCByZXQ7CiAKKwlpZiAoIXN0cmVhbSkgeworCQlkZXZfd2Fybihoc3ctPmRldiwgIndhcm5pbmc6IHN0cmVhbSBpcyBOVUxMLCBubyBzdHJlYW0gdG8gcmVzdW1lLCBpZ25vcmUgaXQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJdHJhY2VfaXBjX3JlcXVlc3QoInN0cmVhbSByZXN1bWUiLCBzdHJlYW0tPnJlcGx5LnN0cmVhbV9od19pZCk7CiAKIAlyZXQgPSBzc3RfaHN3X3N0cmVhbV9vcGVyYXRpb25zKGhzdywgSVBDX1NUUl9SRVNVTUUsCkBAIC0xNTUwLDYgKzE1NzUsMTEgQEAKIHsKIAlpbnQgcmV0LCB0cmllcyA9IDEwOwogCisJaWYgKCFzdHJlYW0pIHsKKwkJZGV2X3dhcm4oaHN3LT5kZXYsICJ3YXJuaW5nOiBzdHJlYW0gaXMgTlVMTCwgbm8gc3RyZWFtIHRvIHJlc2V0LCBpZ25vcmUgaXQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyogZG9udCByZXNldCBzdHJlYW1zIHRoYXQgYXJlIG5vdCBjb21taXRlZCAqLwogCWlmICghc3RyZWFtLT5jb21taXRlZCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvc3N0L3NzdF9hY3BpLmMgYi9zb3VuZC9zb2MvaW50ZWwvc3N0L3NzdF9hY3BpLmMKaW5kZXggM2FiYzI5ZS4uMmFjNzJlYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL3NzdC9zc3RfYWNwaS5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9zc3Qvc3N0X2FjcGkuYwpAQCAtMzQzLDcgKzM0Myw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3N0X21hY2hpbmVzIHNzdF9hY3BpX2J5dGNyW10gPSB7Ci0JeyIxMEVDNTY0MCIsICJUMTAwIiwgImJ5dHQxMDBfcnQ1NjQwIiwgTlVMTCwgImZ3X3NzdF8wZjI4LmJpbiIsCisJeyIxMEVDNTY0MCIsICJUMTAwIiwgImJ5dHQxMDBfcnQ1NjQwIiwgTlVMTCwgImludGVsL2Z3X3NzdF8wZjI4LmJpbiIsCiAJCQkJCQkmYnl0X3J2cF9wbGF0Zm9ybV9kYXRhIH0sCiAJe30sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCmluZGV4IDhiNzljYWZhLi5jN2ViOWRkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCkBAIC00MzQsNyArNDM0LDcgQEAKIAljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6CiAJCS8qIE1jQlNQIHNsYXZlLiBGUyBjbG9jayBhcyBvdXRwdXQgKi8KIAkJcmVncy0+c3JncjIJfD0gRlNHTTsKLQkJcmVncy0+cGNyMAl8PSBGU1hNOworCQlyZWdzLT5wY3IwCXw9IEZTWE0gfCBGU1JNOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CiAJCS8qIE1jQlNQIHNsYXZlICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfaTJzLmMgYi9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfaTJzLmMKaW5kZXggMjZlYzUxMS4uZGNjMjZlZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX2kycy5jCisrKyBiL3NvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9pMnMuYwpAQCAtMzM1LDYgKzMzNSw3IEBACiAJCQkgICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpLAogCX0sCiAJLm9wcyA9ICZyb2NrY2hpcF9pMnNfZGFpX29wcywKKwkuc3ltbWV0cmljX3JhdGVzID0gMSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIHJvY2tjaGlwX2kyc19jb21wb25lbnQgPSB7CkBAIC00NTQsMTEgKzQ1NSwxMSBAQAogCiAJaTJzLT5wbGF5YmFja19kbWFfZGF0YS5hZGRyID0gcmVzLT5zdGFydCArIEkyU19UWERSOwogCWkycy0+cGxheWJhY2tfZG1hX2RhdGEuYWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOwotCWkycy0+cGxheWJhY2tfZG1hX2RhdGEubWF4YnVyc3QgPSAxNjsKKwlpMnMtPnBsYXliYWNrX2RtYV9kYXRhLm1heGJ1cnN0ID0gNDsKIAogCWkycy0+Y2FwdHVyZV9kbWFfZGF0YS5hZGRyID0gcmVzLT5zdGFydCArIEkyU19SWERSOwogCWkycy0+Y2FwdHVyZV9kbWFfZGF0YS5hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM7Ci0JaTJzLT5jYXB0dXJlX2RtYV9kYXRhLm1heGJ1cnN0ID0gMTY7CisJaTJzLT5jYXB0dXJlX2RtYV9kYXRhLm1heGJ1cnN0ID0gNDsKIAogCWkycy0+ZGV2ID0gJnBkZXYtPmRldjsKIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaTJzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9pMnMuaCBiL3NvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9pMnMuaAppbmRleCA4OWE1ZDhiLi45M2Y0NTZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfaTJzLmgKKysrIGIvc291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX2kycy5oCkBAIC0xMjcsNyArMTI3LDcgQEAKICNkZWZpbmUgSTJTX0RNQUNSX1RERV9ESVNBQkxFCSgwIDw8IEkyU19ETUFDUl9UREVfU0hJRlQpCiAjZGVmaW5lIEkyU19ETUFDUl9UREVfRU5BQkxFCSgxIDw8IEkyU19ETUFDUl9UREVfU0hJRlQpCiAjZGVmaW5lIEkyU19ETUFDUl9URExfU0hJRlQJMAotI2RlZmluZSBJMlNfRE1BQ1JfVERMKHgpCSgoeCAtIDEpIDw8IEkyU19ETUFDUl9URExfU0hJRlQpCisjZGVmaW5lIEkyU19ETUFDUl9UREwoeCkJKCh4KSA8PCBJMlNfRE1BQ1JfVERMX1NISUZUKQogI2RlZmluZSBJMlNfRE1BQ1JfVERMX01BU0sJKDB4MWYgPDwgSTJTX0RNQUNSX1RETF9TSElGVCkKIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtYWM5Ny5jIGIvc291bmQvc29jL3NvYy1hYzk3LmMKaW5kZXggMmUxMGU5YS4uMDhkNzI1OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1hYzk3LmMKKysrIGIvc291bmQvc29jL3NvYy1hYzk3LmMKQEAgLTQ4LDE1ICs0OCwxOCBAQAogfQogCiAvKioKLSAqIHNuZF9zb2NfbmV3X2FjOTdfY29kZWMgLSBpbml0YWlsaXNlIEFDOTcgZGV2aWNlCi0gKiBAY29kZWM6IGF1ZGlvIGNvZGVjCisgKiBzbmRfc29jX2FsbG9jX2FjOTdfY29kZWMoKSAtIEFsbG9jYXRlIG5ldyBhIEFDJzk3IGRldmljZQorICogQGNvZGVjOiBUaGUgQ09ERUMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgQUMnOTcgZGV2aWNlCiAgKgotICogSW5pdGlhbGlzZXMgQUM5NyBjb2RlYyByZXNvdXJjZXMgZm9yIHVzZSBieSBhZC1ob2MgZGV2aWNlcyBvbmx5LgorICogQWxsb2NhdGVkIGEgbmV3IHNuZF9hYzk3IGRldmljZSBhbmQgaW50aWFsaXplcyBpdCwgYnV0IGRvZXMgbm90IHlldCByZWdpc3RlcgorICogaXQuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZWl0aGVyIGNhbGwgZGV2aWNlX2FkZCgmYWM5Ny0+ZGV2KSB0bworICogcmVnaXN0ZXIgdGhlIGRldmljZSwgb3IgdG8gY2FsbCBwdXRfZGV2aWNlKCZhYzk3LT5kZXYpIHRvIGZyZWUgdGhlIGRldmljZS4KKyAqCisgKiBSZXR1cm5zOiBBIHNuZF9hYzk3IGRldmljZSBvciBhIFBUUl9FUlIgaW4gY2FzZSBvZiBhbiBlcnJvci4KICAqLwotc3RydWN0IHNuZF9hYzk3ICpzbmRfc29jX25ld19hYzk3X2NvZGVjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3N0cnVjdCBzbmRfYWM5NyAqc25kX3NvY19hbGxvY19hYzk3X2NvZGVjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTc7Ci0JaW50IHJldDsKIAogCWFjOTcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX2FjOTcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYWM5NyA9PSBOVUxMKQpAQCAtNzMsNyArNzYsMjggQEAKIAkJICAgICBjb2RlYy0+Y29tcG9uZW50LmNhcmQtPnNuZF9jYXJkLT5udW1iZXIsIDAsCiAJCSAgICAgY29kZWMtPmNvbXBvbmVudC5uYW1lKTsKIAotCXJldCA9IGRldmljZV9yZWdpc3RlcigmYWM5Ny0+ZGV2KTsKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmYWM5Ny0+ZGV2KTsKKworCXJldHVybiBhYzk3OworfQorRVhQT1JUX1NZTUJPTChzbmRfc29jX2FsbG9jX2FjOTdfY29kZWMpOworCisvKioKKyAqIHNuZF9zb2NfbmV3X2FjOTdfY29kZWMgLSBpbml0YWlsaXNlIEFDOTcgZGV2aWNlCisgKiBAY29kZWM6IGF1ZGlvIGNvZGVjCisgKgorICogSW5pdGlhbGlzZXMgQUM5NyBjb2RlYyByZXNvdXJjZXMgZm9yIHVzZSBieSBhZC1ob2MgZGV2aWNlcyBvbmx5LgorICovCitzdHJ1Y3Qgc25kX2FjOTcgKnNuZF9zb2NfbmV3X2FjOTdfY29kZWMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzbmRfYWM5NyAqYWM5NzsKKwlpbnQgcmV0OworCisJYWM5NyA9IHNuZF9zb2NfYWxsb2NfYWM5N19jb2RlYyhjb2RlYyk7CisJaWYgKElTX0VSUihhYzk3KSkKKwkJcmV0dXJuIGFjOTc7CisKKwlyZXQgPSBkZXZpY2VfYWRkKCZhYzk3LT5kZXYpOwogCWlmIChyZXQpIHsKIAkJcHV0X2RldmljZSgmYWM5Ny0+ZGV2KTsKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29tcHJlc3MuYyBiL3NvdW5kL3NvYy9zb2MtY29tcHJlc3MuYwppbmRleCA1OTBhODJmLi4wMjVjMzhmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvbXByZXNzLmMKKysrIGIvc291bmQvc29jL3NvYy1jb21wcmVzcy5jCkBAIC02NTksNyArNjU5LDggQEAKIAkJCXJ0ZC0+ZGFpX2xpbmstPnN0cmVhbV9uYW1lKTsKIAogCQlyZXQgPSBzbmRfcGNtX25ld19pbnRlcm5hbChydGQtPmNhcmQtPnNuZF9jYXJkLCBuZXdfbmFtZSwgbnVtLAotCQkJCTEsIDAsICZiZV9wY20pOworCQkJCXJ0ZC0+ZGFpX2xpbmstPmRwY21fcGxheWJhY2ssCisJCQkJcnRkLT5kYWlfbGluay0+ZHBjbV9jYXB0dXJlLCAmYmVfcGNtKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIocnRkLT5jYXJkLT5kZXYsICJBU29DOiBjYW4ndCBjcmVhdGUgY29tcHJlc3NlZCBmb3IgJXNcbiIsCiAJCQkJcnRkLT5kYWlfbGluay0+bmFtZSk7CkBAIC02NjgsOCArNjY5LDEwIEBACiAKIAkJcnRkLT5wY20gPSBiZV9wY207CiAJCXJ0ZC0+ZmVfY29tcHIgPSAxOwotCQliZV9wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3Vic3RyZWFtLT5wcml2YXRlX2RhdGEgPSBydGQ7Ci0JCWJlX3BjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhID0gcnRkOworCQlpZiAocnRkLT5kYWlfbGluay0+ZHBjbV9wbGF5YmFjaykKKwkJCWJlX3BjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5zdWJzdHJlYW0tPnByaXZhdGVfZGF0YSA9IHJ0ZDsKKwkJZWxzZSBpZiAocnRkLT5kYWlfbGluay0+ZHBjbV9jYXB0dXJlKQorCQkJYmVfcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3Vic3RyZWFtLT5wcml2YXRlX2RhdGEgPSBydGQ7CiAJCW1lbWNweShjb21wci0+b3BzLCAmc29jX2NvbXByX2R5bl9vcHMsIHNpemVvZihzb2NfY29tcHJfZHluX29wcykpOwogCX0gZWxzZQogCQltZW1jcHkoY29tcHItPm9wcywgJnNvY19jb21wcl9vcHMsIHNpemVvZihzb2NfY29tcHJfb3BzKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IDk4NTA1MmIuLjJjNjI2MjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC0zMjMwLDcgKzMyMzAsNyBAQAogCQkJCSAgIGNvbnN0IGNoYXIgKnByb3BuYW1lKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBjYXJkLT5kZXYtPm9mX25vZGU7Ci0JaW50IG51bV9yb3V0ZXMsIG9sZF9yb3V0ZXM7CisJaW50IG51bV9yb3V0ZXM7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSAqcm91dGVzOwogCWludCBpLCByZXQ7CiAKQEAgLTMyNDgsOSArMzI0OCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW9sZF9yb3V0ZXMgPSBjYXJkLT5udW1fZGFwbV9yb3V0ZXM7Ci0Jcm91dGVzID0gZGV2bV9remFsbG9jKGNhcmQtPmRldiwKLQkJCSAgICAgIChvbGRfcm91dGVzICsgbnVtX3JvdXRlcykgKiBzaXplb2YoKnJvdXRlcyksCisJcm91dGVzID0gZGV2bV9remFsbG9jKGNhcmQtPmRldiwgbnVtX3JvdXRlcyAqIHNpemVvZigqcm91dGVzKSwKIAkJCSAgICAgIEdGUF9LRVJORUwpOwogCWlmICghcm91dGVzKSB7CiAJCWRldl9lcnIoY2FyZC0+ZGV2LApAQCAtMzI1OCwxMSArMzI1Niw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW1lbWNweShyb3V0ZXMsIGNhcmQtPmRhcG1fcm91dGVzLCBvbGRfcm91dGVzICogc2l6ZW9mKCpyb3V0ZXMpKTsKLQogCWZvciAoaSA9IDA7IGkgPCBudW1fcm91dGVzOyBpKyspIHsKIAkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgobnAsIHByb3BuYW1lLAotCQkJMiAqIGksICZyb3V0ZXNbb2xkX3JvdXRlcyArIGldLnNpbmspOworCQkJMiAqIGksICZyb3V0ZXNbaV0uc2luayk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoY2FyZC0+ZGV2LAogCQkJCSJBU29DOiBQcm9wZXJ0eSAnJXMnIGluZGV4ICVkIGNvdWxkIG5vdCBiZSByZWFkOiAlZFxuIiwKQEAgLTMyNzAsNyArMzI2Niw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChucCwgcHJvcG5hbWUsCi0JCQkoMiAqIGkpICsgMSwgJnJvdXRlc1tvbGRfcm91dGVzICsgaV0uc291cmNlKTsKKwkJCSgyICogaSkgKyAxLCAmcm91dGVzW2ldLnNvdXJjZSk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoY2FyZC0+ZGV2LAogCQkJCSJBU29DOiBQcm9wZXJ0eSAnJXMnIGluZGV4ICVkIGNvdWxkIG5vdCBiZSByZWFkOiAlZFxuIiwKQEAgLTMyNzksNyArMzI3NSw3IEBACiAJCX0KIAl9CiAKLQljYXJkLT5udW1fZGFwbV9yb3V0ZXMgKz0gbnVtX3JvdXRlczsKKwljYXJkLT5udW1fZGFwbV9yb3V0ZXMgPSBudW1fcm91dGVzOwogCWNhcmQtPmRhcG1fcm91dGVzID0gcm91dGVzOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYyBiL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCmluZGV4IDI3Mjg0NDcuLjMyN2Y4NjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCkBAIC04MTYsNyArODE2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGNkZXYtPm5fc3RyZWFtcyA8IDIpIHsKKwlpZiAoY2Rldi0+bl9zdHJlYW1zIDwgMSkgewogCQlkZXZfZXJyKGRldiwgImJvZ3VzIG51bWJlciBvZiBzdHJlYW1zOiAlZFxuIiwgY2Rldi0+bl9zdHJlYW1zKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL21peGVyLmMgYi9zb3VuZC91c2IvbWl4ZXIuYwppbmRleCA0MTY1MGQ1Li4zZTJlZjYxIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWl4ZXIuYworKysgYi9zb3VuZC91c2IvbWl4ZXIuYwpAQCAtOTEzLDYgKzkxMyw3IEBACiAJY2FzZSBVU0JfSUQoMHgwNDZkLCAweDA4MDcpOiAvKiBMb2dpdGVjaCBXZWJjYW0gQzUwMCAqLwogCWNhc2UgVVNCX0lEKDB4MDQ2ZCwgMHgwODA4KToKIAljYXNlIFVTQl9JRCgweDA0NmQsIDB4MDgwOSk6CisJY2FzZSBVU0JfSUQoMHgwNDZkLCAweDA4MTkpOiAvKiBMb2dpdGVjaCBXZWJjYW0gQzIxMCAqLwogCWNhc2UgVVNCX0lEKDB4MDQ2ZCwgMHgwODFiKTogLyogSEQgV2ViY2FtIGMzMTAgKi8KIAljYXNlIFVTQl9JRCgweDA0NmQsIDB4MDgxZCk6IC8qIEhEIFdlYmNhbSBjNTEwICovCiAJY2FzZSBVU0JfSUQoMHgwNDZkLCAweDA4MjUpOiAvKiBIRCBXZWJjYW0gYzI3MCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaCBiL3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzLmgKaW5kZXggNmVlZGJhMS4uNjUzZDFiYSAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaAorKysgYi90b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy5oCkBAIC0yMiw2ICsyMiw4IEBACiAjZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQogI2VuZGlmCiAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oPgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oPgogCiAjZW5kaWYgLyogX19UT09MU19BU01fR0VORVJJQ19CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXJjaF9od2VpZ2h0LmggYi90b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9hcmNoX2h3ZWlnaHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMThiYjJiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXJjaF9od2VpZ2h0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2FyY2hfaHdlaWdodC5oIgpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvY29uc3RfaHdlaWdodC5oIGIvdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvY29uc3RfaHdlaWdodC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZmQ2NDQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9jb25zdF9od2VpZ2h0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2NvbnN0X2h3ZWlnaHQuaCIKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaCBiL3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTAxMjBjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfVE9PTFNfTElOVVhfQVNNX0dFTkVSSUNfQklUT1BTX0hXRUlHSFRfSF8KKyNkZWZpbmUgX1RPT0xTX0xJTlVYX0FTTV9HRU5FUklDX0JJVE9QU19IV0VJR0hUX0hfCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvYXJjaF9od2VpZ2h0Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2NvbnN0X2h3ZWlnaHQuaD4KKworI2VuZGlmIC8qIF9UT09MU19MSU5VWF9BU01fR0VORVJJQ19CSVRPUFNfSFdFSUdIVF9IXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggMjYwMDVhMTVlLi41YWQ5ZWUxIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCisrKyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTEsOSArMSw5IEBACiAjaWZuZGVmIF9UT09MU19MSU5VWF9CSVRPUFNfSF8KICNkZWZpbmUgX1RPT0xTX0xJTlVYX0JJVE9QU19IXwogCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vaHdlaWdodC5oPgogCiAjaWZuZGVmIF9fV09SRFNJWkUKICNkZWZpbmUgX19XT1JEU0laRSAoX19TSVpFT0ZfTE9OR19fICogOCkKQEAgLTE5LDYgKzE5LDExIEBACiAjZGVmaW5lIEJJVFNfVE9fVTMyKG5yKQkJRElWX1JPVU5EX1VQKG5yLCBCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHUzMikpCiAjZGVmaW5lIEJJVFNfVE9fQllURVMobnIpCURJVl9ST1VORF9VUChuciwgQklUU19QRVJfQllURSkKIAorZXh0ZXJuIHVuc2lnbmVkIGludCBfX3N3X2h3ZWlnaHQ4KHVuc2lnbmVkIGludCB3KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19zd19od2VpZ2h0MTYodW5zaWduZWQgaW50IHcpOworZXh0ZXJuIHVuc2lnbmVkIGludCBfX3N3X2h3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3N3X2h3ZWlnaHQ2NChfX3U2NCB3KTsKKwogLyoKICAqIEluY2x1ZGUgdGhpcyBoZXJlIGJlY2F1c2Ugc29tZSBhcmNoaXRlY3R1cmVzIG5lZWQgZ2VuZXJpY19mZnMvZmxzIGluCiAgKiBzY29wZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2FwaS9mcy9kZWJ1Z2ZzLmMgYi90b29scy9saWIvYXBpL2ZzL2RlYnVnZnMuYwppbmRleCBhNzRmYmE2Li44NmVhMmQ3YiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2FwaS9mcy9kZWJ1Z2ZzLmMKKysrIGIvdG9vbHMvbGliL2FwaS9mcy9kZWJ1Z2ZzLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogCWlmIChzdGF0ZnMoZGVidWdmcywgJnN0X2ZzKSA8IDApCiAJCXJldHVybiAtRU5PRU5UOwotCWVsc2UgaWYgKHN0X2ZzLmZfdHlwZSAhPSAobG9uZykgREVCVUdGU19NQUdJQykKKwllbHNlIGlmICgobG9uZylzdF9mcy5mX3R5cGUgIT0gKGxvbmcpREVCVUdGU19NQUdJQykKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9hcGkvZnMvZnMuYyBiL3Rvb2xzL2xpYi9hcGkvZnMvZnMuYwppbmRleCA2NWQ5YmUzLi4xMjhlZjYzIDEwMDY0NAotLS0gYS90b29scy9saWIvYXBpL2ZzL2ZzLmMKKysrIGIvdG9vbHMvbGliL2FwaS9mcy9mcy5jCkBAIC03OSw3ICs3OSw3IEBACiAKIAlpZiAoc3RhdGZzKGZzLCAmc3RfZnMpIDwgMCkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JZWxzZSBpZiAoc3RfZnMuZl90eXBlICE9IG1hZ2ljKQorCWVsc2UgaWYgKChsb25nKXN0X2ZzLmZfdHlwZSAhPSBtYWdpYykKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9sb2NrZGVwL3ByZWxvYWQuYyBiL3Rvb2xzL2xpYi9sb2NrZGVwL3ByZWxvYWQuYwppbmRleCA2ZjgwMzYwLi4wYjAxMTJjIDEwMDY0NAotLS0gYS90b29scy9saWIvbG9ja2RlcC9wcmVsb2FkLmMKKysrIGIvdG9vbHMvbGliL2xvY2tkZXAvcHJlbG9hZC5jCkBAIC0zMTcsNyArMzE3LDcgQEAKIAkgKgogCSAqIFRPRE86IEhvb2sgaW50byBmcmVlKCkgYW5kIGFkZCB0aGF0IGNoZWNrIHRoZXJlIGFzIHdlbGwuCiAJICovCi0JZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQobXV0ZXgsIG11dGV4ICsgc2l6ZW9mKCptdXRleCkpOworCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKG11dGV4LCBzaXplb2YoKm11dGV4KSk7CiAJX19kZWxfbG9jayhfX2dldF9sb2NrKG11dGV4KSk7CiAJcmV0dXJuIGxsX3B0aHJlYWRfbXV0ZXhfZGVzdHJveShtdXRleCk7CiB9CkBAIC0zNDEsNyArMzQxLDcgQEAKIHsKIAl0cnlfaW5pdF9wcmVsb2FkKCk7CiAKLQlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChyd2xvY2ssIHJ3bG9jayArIHNpemVvZigqcndsb2NrKSk7CisJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQocndsb2NrLCBzaXplb2YoKnJ3bG9jaykpOwogCV9fZGVsX2xvY2soX19nZXRfbG9jayhyd2xvY2spKTsKIAlyZXR1cm4gbGxfcHRocmVhZF9yd2xvY2tfZGVzdHJveShyd2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NQU5JRkVTVCBiL3Rvb2xzL3BlcmYvTUFOSUZFU1QKaW5kZXggODNlMjg4Ny4uZmJiZmRjMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NQU5JRkVTVAorKysgYi90b29scy9wZXJmL01BTklGRVNUCkBAIC02LDEyICs2LDE1IEBACiB0b29scy9saWIvc3ltYm9sL2thbGxzeW1zLmgKIHRvb2xzL2xpYi91dGlsL2ZpbmRfbmV4dF9iaXQuYwogdG9vbHMvaW5jbHVkZS9hc20vYnVnLmgKK3Rvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2FyY2hfaHdlaWdodC5oCiB0b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9hdG9taWMuaAordG9vbHMvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvY29uc3RfaHdlaWdodC5oCiB0b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oCiB0b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9fX2Zscy5oCiB0b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9maW5kLmgKIHRvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0LmgKIHRvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2Zscy5oCit0b29scy9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0LmgKIHRvb2xzL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzLmgKIHRvb2xzL2luY2x1ZGUvbGludXgvYml0b3BzLmgKIHRvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtMTksNiArMjIsOCBAQAogdG9vbHMvaW5jbHVkZS9saW51eC9oYXNoLmgKIHRvb2xzL2luY2x1ZGUvbGludXgvbG9nMi5oCiB0b29scy9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKK2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2FyY2hfaHdlaWdodC5oCitpbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9jb25zdF9od2VpZ2h0LmgKIGluY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0LmgKIGluY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL19fZmxzLmgKIGluY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2Zscy5oCkBAIC0yOSw2ICszNCw3IEBACiBpbmNsdWRlL2xpbnV4L2hhc2guaAogaW5jbHVkZS9saW51eC9zdHJpbmdpZnkuaAogbGliL2ZpbmRfbmV4dF9iaXQuYworbGliL2h3ZWlnaHQuYwogbGliL3JidHJlZS5jCiBpbmNsdWRlL2xpbnV4L3N3YWIuaAogYXJjaC8qL2luY2x1ZGUvYXNtL3VuaXN0ZCouaApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCmluZGV4IDY3YTAzYTgyLi5hYTZhNTA0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCkBAIC0yMzIsMTIgKzIzMiwxNSBAQAogTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9zdHJpbmdpZnkuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCiBMSUJfSCArPSAuLi9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCitMSUJfSCArPSAuLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9hcmNoX2h3ZWlnaHQuaAogTElCX0ggKz0gLi4vaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXRvbWljLmgKK0xJQl9IICs9IC4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2NvbnN0X2h3ZWlnaHQuaAogTElCX0ggKz0gLi4vaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvZmluZC5oCiBMSUJfSCArPSAuLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oCiBMSUJfSCArPSAuLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9mbHMuaAogTElCX0ggKz0gLi4vaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvX19mZnMuaAogTElCX0ggKz0gLi4vaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvX19mbHMuaAorTElCX0ggKz0gLi4vaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oCiBMSUJfSCArPSAuLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy5oCiBMSUJfSCArPSAuLi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKIExJQl9IICs9IC4uL2luY2x1ZGUvbGludXgvbG9nMi5oCkBAIC0yNTUsNyArMjU4LDYgQEAKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaAogTElCX0ggKz0gLi4vaW5jbHVkZS9hc20vYnVnLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKLUxJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vaHdlaWdodC5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL3N3YWIuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTQ2MiwxMCArNDY0LDEyIEBACiAjIEJlbmNobWFyayBtb2R1bGVzCiBCVUlMVElOX09CSlMgKz0gJChPVVRQVVQpYmVuY2gvc2NoZWQtbWVzc2FnaW5nLm8KIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVCliZW5jaC9zY2hlZC1waXBlLm8KLWlmZXEgKCQoUkFXX0FSQ0gpLHg4Nl82NCkKK2lmZXEgKCQoQVJDSCksIHg4NikKK2lmZXEgKCQoSVNfNjRfQklUKSwgMSkKIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVCliZW5jaC9tZW0tbWVtY3B5LXg4Ni02NC1hc20ubwogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJlbmNoL21lbS1tZW1zZXQteDg2LTY0LWFzbS5vCiBlbmRpZgorZW5kaWYKIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVCliZW5jaC9tZW0tbWVtY3B5Lm8KIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVCliZW5jaC9mdXRleC1oYXNoLm8KIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVCliZW5jaC9mdXRleC13YWtlLm8KQEAgLTc0Myw2ICs3NDcsOSBAQAogJChPVVRQVVQpdXRpbC9yYnRyZWUubzogLi4vLi4vbGliL3JidHJlZS5jICQoT1VUUFVUKVBFUkYtQ0ZMQUdTCiAJJChRVUlFVF9DQykkKENDKSAtbyAkQCAtYyAkKENGTEFHUykgLVduby11bnVzZWQtcGFyYW1ldGVyIC1ERVRDX1BFUkZDT05GSUc9JyIkKEVUQ19QRVJGQ09ORklHX1NRKSInICQ8CiAKKyQoT1VUUFVUKXV0aWwvaHdlaWdodC5vOiAuLi8uLi9saWIvaHdlaWdodC5jICQoT1VUUFVUKVBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyAkQCAtYyAkKENGTEFHUykgLVduby11bnVzZWQtcGFyYW1ldGVyIC1ERVRDX1BFUkZDT05GSUc9JyIkKEVUQ19QRVJGQ09ORklHX1NRKSInICQ8CisKICQoT1VUUFVUKXV0aWwvZmluZF9uZXh0X2JpdC5vOiAuLi9saWIvdXRpbC9maW5kX25leHRfYml0LmMgJChPVVRQVVQpUEVSRi1DRkxBR1MKIAkkKFFVSUVUX0NDKSQoQ0MpIC1vICRAIC1jICQoQ0ZMQUdTKSAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLURFVENfUEVSRkNPTkZJRz0nIiQoRVRDX1BFUkZDT05GSUdfU1EpIicgJDwKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYyBiL3Rvb2xzL3BlcmYvYXJjaC9wb3dlcnBjL3V0aWwvc2tpcC1jYWxsY2hhaW4taWR4LmMKaW5kZXggM2JiNTBlYS4uMGMzNzBmOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYworKysgYi90b29scy9wZXJmL2FyY2gvcG93ZXJwYy91dGlsL3NraXAtY2FsbGNoYWluLWlkeC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JcmVzdWx0ID0gZHdhcmZfY2ZpX2FkZHJmcmFtZShjZmksIHBjLCAmZnJhbWUpOworCXJlc3VsdCA9IGR3YXJmX2NmaV9hZGRyZnJhbWUoY2ZpLCBwYy1iaWFzLCAmZnJhbWUpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJfZGVidWcoIiVzKCk6ICVzXG4iLCBfX2Z1bmNfXywgZHdmbF9lcnJtc2coLTEpKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JcmVzdWx0ID0gZHdhcmZfY2ZpX2FkZHJmcmFtZShjZmksIHBjLCAmZnJhbWUpOworCXJlc3VsdCA9IGR3YXJmX2NmaV9hZGRyZnJhbWUoY2ZpLCBwYy1iaWFzLCAmZnJhbWUpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJfZGVidWcoIiVzKCk6ICVzXG4iLCBfX2Z1bmNfXywgZHdmbF9lcnJtc2coLTEpKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAqCQl5ZXQgdXNlZCkKICAqCS0xIGluIGNhc2Ugb2YgZXJyb3JzCiAgKi8KLXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2FkZHIoc3RydWN0IGRzbyAqZHNvLCBEd2FyZl9BZGRyIHBjKQorc3RhdGljIGludCBjaGVja19yZXR1cm5fYWRkcihzdHJ1Y3QgZHNvICpkc28sIHU2NCBtYXBfc3RhcnQsIER3YXJmX0FkZHIgcGMpCiB7CiAJaW50CQlyYyA9IC0xOwogCUR3ZmwJCSpkd2ZsOwpAQCAtMTU1LDYgKzE1NSw3IEBACiAJRHdhcmZfQWRkcglzdGFydCA9IHBjOwogCUR3YXJmX0FkZHIJZW5kID0gcGM7CiAJYm9vbAkJc2lnbmFscDsKKwljb25zdCBjaGFyCSpleGVjX2ZpbGUgPSBkc28tPmxvbmdfbmFtZTsKIAogCWR3ZmwgPSBkc28tPmR3Zmw7CiAKQEAgLTE2NSw4ICsxNjYsMTAgQEAKIAkJCXJldHVybiAtMTsKIAkJfQogCi0JCWlmIChkd2ZsX3JlcG9ydF9vZmZsaW5lKGR3ZmwsICIiLCBkc28tPmxvbmdfbmFtZSwgLTEpID09IE5VTEwpIHsKLQkJCXByX2RlYnVnKCJkd2ZsX3JlcG9ydF9vZmZsaW5lKCkgZmFpbGVkICVzXG4iLAorCQltb2QgPSBkd2ZsX3JlcG9ydF9lbGYoZHdmbCwgZXhlY19maWxlLCBleGVjX2ZpbGUsIC0xLAorCQkJCQkJbWFwX3N0YXJ0LCBmYWxzZSk7CisJCWlmICghbW9kKSB7CisJCQlwcl9kZWJ1ZygiZHdmbF9yZXBvcnRfZWxmKCkgZmFpbGVkICVzXG4iLAogCQkJCQkJZHdhcmZfZXJybXNnKC0xKSk7CiAJCQkvKgogCQkJICogV2Ugbm9ybWFsbHkgY2FjaGUgdGhlIERXQVJGIGRlYnVnIGluZm8gYW5kIG5ldmVyCkBAIC0yNTYsMTAgKzI1OSwxMCBAQAogCQlyZXR1cm4gc2tpcF9zbG90OwogCX0KIAotCXJjID0gY2hlY2tfcmV0dXJuX2FkZHIoZHNvLCBpcCk7CisJcmMgPSBjaGVja19yZXR1cm5fYWRkcihkc28sIGFsLm1hcC0+c3RhcnQsIGlwKTsKIAotCXByX2RlYnVnKCJEU08gJXMsIG5yICUiIFBSSXg2NCAiLCBpcCAweCUiIFBSSXg2NCAicmMgJWRcbiIsCi0JCQkJZHNvLT5sb25nX25hbWUsIGNoYWluLT5uciwgaXAsIHJjKTsKKwlwcl9kZWJ1ZygiW0RTTyAlcywgc3ltICVzLCBpcCAweCUiIFBSSXg2NCAiXSByYyAlZFxuIiwKKwkJCQlkc28tPmxvbmdfbmFtZSwgYWwuc3ltLT5uYW1lLCBpcCwgcmMpOwogCiAJaWYgKHJjID09IDApIHsKIAkJLyoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtcGlwZS5jIGIvdG9vbHMvcGVyZi9iZW5jaC9zY2hlZC1waXBlLmMKaW5kZXggMDdhOGQ3NjQ2YS4uMDA1Y2MyOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9iZW5jaC9zY2hlZC1waXBlLmMKKysrIGIvdG9vbHMvcGVyZi9iZW5jaC9zY2hlZC1waXBlLmMKQEAgLTE5LDEyICsxOSwxMiBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKaW5kZXggZTc0MTdmZS4uNzQ3Zjg2MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogCQlpZiAobnJfc2FtcGxlcyA+IDApIHsKIAkJCXRvdGFsX25yX3NhbXBsZXMgKz0gbnJfc2FtcGxlczsKIAkJCWhpc3RzX19jb2xsYXBzZV9yZXNvcnQoaGlzdHMsIE5VTEwpOwotCQkJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMpOworCQkJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMsIE5VTEwpOwogCiAJCQlpZiAoc3ltYm9sX2NvbmYuZXZlbnRfZ3JvdXAgJiYKIAkJCSAgICAhcGVyZl9ldnNlbF9faXNfZ3JvdXBfbGVhZGVyKHBvcykpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwppbmRleCAxY2U0MjVkLi4xZmQ5NmMxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKQEAgLTU0NSw2ICs1NDUsNDIgQEAKIAlyZXR1cm4gX19oaXN0X2VudHJ5X19jbXBfY29tcHV0ZShwX2xlZnQsIHBfcmlnaHQsIGMpOwogfQogCitzdGF0aWMgaW50NjRfdAoraGlzdF9lbnRyeV9fY21wX25vcChzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCBfX21heWJlX3VudXNlZCwKKwkJICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCBfX21heWJlX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludDY0X3QKK2hpc3RfZW50cnlfX2NtcF9iYXNlbGluZShzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQoreworCWlmIChzb3J0X2NvbXB1dGUpCisJCXJldHVybiAwOworCisJaWYgKGxlZnQtPnN0YXQucGVyaW9kID09IHJpZ2h0LT5zdGF0LnBlcmlvZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGxlZnQtPnN0YXQucGVyaW9kID4gcmlnaHQtPnN0YXQucGVyaW9kID8gMSA6IC0xOworfQorCitzdGF0aWMgaW50NjRfdAoraGlzdF9lbnRyeV9fY21wX2RlbHRhKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCit7CisJcmV0dXJuIGhpc3RfZW50cnlfX2NtcF9jb21wdXRlKHJpZ2h0LCBsZWZ0LCBDT01QVVRFX0RFTFRBKTsKK30KKworc3RhdGljIGludDY0X3QKK2hpc3RfZW50cnlfX2NtcF9yYXRpbyhzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQoreworCXJldHVybiBoaXN0X2VudHJ5X19jbXBfY29tcHV0ZShyaWdodCwgbGVmdCwgQ09NUFVURV9SQVRJTyk7Cit9CisKK3N0YXRpYyBpbnQ2NF90CitoaXN0X2VudHJ5X19jbXBfd2RpZmYoc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKK3sKKwlyZXR1cm4gaGlzdF9lbnRyeV9fY21wX2NvbXB1dGUocmlnaHQsIGxlZnQsIENPTVBVVEVfV0VJR0hURURfRElGRik7Cit9CisKIHN0YXRpYyB2b2lkIGluc2VydF9oaXN0X2VudHJ5X2J5X2NvbXB1dGUoc3RydWN0IHJiX3Jvb3QgKnJvb3QsCiAJCQkJCSBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsCiAJCQkJCSBpbnQgYykKQEAgLTYwNSw3ICs2NDEsNyBAQAogCQloaXN0c19fcHJlY29tcHV0ZShoaXN0cyk7CiAJCWhpc3RzX19jb21wdXRlX3Jlc29ydChoaXN0cyk7CiAJfSBlbHNlIHsKLQkJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMpOworCQloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cywgTlVMTCk7CiAJfQogCiAJaGlzdHNfX2ZwcmludGYoaGlzdHMsIHRydWUsIDAsIDAsIDAsIHN0ZG91dCk7CkBAIC0xMDM4LDI3ICsxMDc0LDM1IEBACiAJZm10LT5oZWFkZXIgPSBocHBfX2hlYWRlcjsKIAlmbXQtPndpZHRoICA9IGhwcF9fd2lkdGg7CiAJZm10LT5lbnRyeSAgPSBocHBfX2VudHJ5X2dsb2JhbDsKKwlmbXQtPmNtcCAgICA9IGhpc3RfZW50cnlfX2NtcF9ub3A7CisJZm10LT5jb2xsYXBzZSA9IGhpc3RfZW50cnlfX2NtcF9ub3A7CiAKIAkvKiBUT0RPIG1vcmUgY29sb3JzICovCiAJc3dpdGNoIChpZHgpIHsKIAljYXNlIFBFUkZfSFBQX0RJRkZfX0JBU0VMSU5FOgogCQlmbXQtPmNvbG9yID0gaHBwX19jb2xvcl9iYXNlbGluZTsKKwkJZm10LT5zb3J0ICA9IGhpc3RfZW50cnlfX2NtcF9iYXNlbGluZTsKIAkJYnJlYWs7CiAJY2FzZSBQRVJGX0hQUF9ESUZGX19ERUxUQToKIAkJZm10LT5jb2xvciA9IGhwcF9fY29sb3JfZGVsdGE7CisJCWZtdC0+c29ydCAgPSBoaXN0X2VudHJ5X19jbXBfZGVsdGE7CiAJCWJyZWFrOwogCWNhc2UgUEVSRl9IUFBfRElGRl9fUkFUSU86CiAJCWZtdC0+Y29sb3IgPSBocHBfX2NvbG9yX3JhdGlvOworCQlmbXQtPnNvcnQgID0gaGlzdF9lbnRyeV9fY21wX3JhdGlvOwogCQlicmVhazsKIAljYXNlIFBFUkZfSFBQX0RJRkZfX1dFSUdIVEVEX0RJRkY6CiAJCWZtdC0+Y29sb3IgPSBocHBfX2NvbG9yX3dkaWZmOworCQlmbXQtPnNvcnQgID0gaGlzdF9lbnRyeV9fY21wX3dkaWZmOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQlmbXQtPnNvcnQgID0gaGlzdF9lbnRyeV9fY21wX25vcDsKIAkJYnJlYWs7CiAJfQogCiAJaW5pdF9oZWFkZXIoZCwgZGZtdCk7CiAJcGVyZl9ocHBfX2NvbHVtbl9yZWdpc3RlcihmbXQpOworCXBlcmZfaHBwX19yZWdpc3Rlcl9zb3J0X2ZpZWxkKGZtdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVpX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1saXN0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tbGlzdC5jCmluZGV4IDAxMTE5NWUuLjE5OGYzYzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1saXN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWxpc3QuYwpAQCAtMTksNyArMTksOSBAQAogaW50IGNtZF9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fbWF5YmVfdW51c2VkKQogewogCWludCBpOwotCWNvbnN0IHN0cnVjdCBvcHRpb24gbGlzdF9vcHRpb25zW10gPSB7CisJYm9vbCByYXdfZHVtcCA9IGZhbHNlOworCXN0cnVjdCBvcHRpb24gbGlzdF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKDAsICJyYXctZHVtcCIsICZyYXdfZHVtcCwgIkR1bXAgcmF3IGV2ZW50cyIpLAogCQlPUFRfRU5EKCkKIAl9OwogCWNvbnN0IGNoYXIgKiBjb25zdCBsaXN0X3VzYWdlW10gPSB7CkBAIC0yNywxMSArMjksMTggQEAKIAkJTlVMTAogCX07CiAKKwlzZXRfb3B0aW9uX2ZsYWcobGlzdF9vcHRpb25zLCAwLCAicmF3LWR1bXAiLCBQQVJTRV9PUFRfSElEREVOKTsKKwogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGxpc3Rfb3B0aW9ucywgbGlzdF91c2FnZSwKIAkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CiAKIAlzZXR1cF9wYWdlcigpOwogCisJaWYgKHJhd19kdW1wKSB7CisJCXByaW50X2V2ZW50cyhOVUxMLCB0cnVlKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGFyZ2MgPT0gMCkgewogCQlwcmludF9ldmVudHMoTlVMTCwgZmFsc2UpOwogCQlyZXR1cm4gMDsKQEAgLTUzLDggKzYyLDYgQEAKIAkJCXByaW50X2h3Y2FjaGVfZXZlbnRzKE5VTEwsIGZhbHNlKTsKIAkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICJwbXUiKSA9PSAwKQogCQkJcHJpbnRfcG11X2V2ZW50cyhOVUxMLCBmYWxzZSk7Ci0JCWVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCAiLS1yYXctZHVtcCIpID09IDApCi0JCQlwcmludF9ldmVudHMoTlVMTCwgdHJ1ZSk7CiAJCWVsc2UgewogCQkJY2hhciAqc2VwID0gc3RyY2hyKGFyZ3ZbaV0sICc6JyksICpzOwogCQkJaW50IHNlcF9pZHg7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggMzkzNjc2MC4uMDcyYWU4YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtNDU3LDYgKzQ1NywxOSBAQAogCXVpX3Byb2dyZXNzX19maW5pc2goKTsKIH0KIAorc3RhdGljIHZvaWQgcmVwb3J0X19vdXRwdXRfcmVzb3J0KHN0cnVjdCByZXBvcnQgKnJlcCkKK3sKKwlzdHJ1Y3QgdWlfcHJvZ3Jlc3MgcHJvZzsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOworCisJdWlfcHJvZ3Jlc3NfX2luaXQoJnByb2csIHJlcC0+bnJfZW50cmllcywgIlNvcnRpbmcgZXZlbnRzIGZvciBvdXRwdXQuLi4iKTsKKworCWV2bGlzdF9fZm9yX2VhY2gocmVwLT5zZXNzaW9uLT5ldmxpc3QsIHBvcykKKwkJaGlzdHNfX291dHB1dF9yZXNvcnQoZXZzZWxfX2hpc3RzKHBvcyksICZwcm9nKTsKKworCXVpX3Byb2dyZXNzX19maW5pc2goKTsKK30KKwogc3RhdGljIGludCBfX2NtZF9yZXBvcnQoc3RydWN0IHJlcG9ydCAqcmVwKQogewogCWludCByZXQ7CkBAIC01MDUsMTMgKzUxOCwyMCBAQAogCWlmIChzZXNzaW9uX2RvbmUoKSkKIAkJcmV0dXJuIDA7CiAKKwkvKgorCSAqIHJlY2FsY3VsYXRlIG51bWJlciBvZiBlbnRyaWVzIGFmdGVyIGNvbGxhcHNpbmcgc2luY2UgaXQKKwkgKiBtaWdodCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgY29sbGFwc2UgcGhhc2UuCisJICovCisJcmVwLT5ucl9lbnRyaWVzID0gMDsKKwlldmxpc3RfX2Zvcl9lYWNoKHNlc3Npb24tPmV2bGlzdCwgcG9zKQorCQlyZXAtPm5yX2VudHJpZXMgKz0gZXZzZWxfX2hpc3RzKHBvcyktPm5yX2VudHJpZXM7CisKIAlpZiAocmVwLT5ucl9lbnRyaWVzID09IDApIHsKIAkJdWlfX2Vycm9yKCJUaGUgJXMgZmlsZSBoYXMgbm8gc2FtcGxlcyFcbiIsIGZpbGUtPnBhdGgpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlldmxpc3RfX2Zvcl9lYWNoKHNlc3Npb24tPmV2bGlzdCwgcG9zKQotCQloaXN0c19fb3V0cHV0X3Jlc29ydChldnNlbF9faGlzdHMocG9zKSk7CisJcmVwb3J0X19vdXRwdXRfcmVzb3J0KHJlcCk7CiAKIAlyZXR1cm4gcmVwb3J0X19icm93c2VfaGlzdHMocmVwKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwppbmRleCAwYWE3NzQ3Li42MTZmMGZjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogCi0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RhdGljIHZvbGF0aWxlIGludCBkb25lOwpAQCAtMjg1LDcgKzI4NCw3IEBACiAJfQogCiAJaGlzdHNfX2NvbGxhcHNlX3Jlc29ydChoaXN0cywgTlVMTCk7Ci0JaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMpOworCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzLCBOVUxMKTsKIAogCWhpc3RzX19vdXRwdXRfcmVjYWxjX2NvbF9sZW4oaGlzdHMsIHRvcC0+cHJpbnRfZW50cmllcyAtIHByaW50ZWQpOwogCXB1dGNoYXIoJ1xuJyk7CkBAIC01NTQsNyArNTUzLDcgQEAKIAl9CiAKIAloaXN0c19fY29sbGFwc2VfcmVzb3J0KGhpc3RzLCBOVUxMKTsKLQloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cyk7CisJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCAqZGlzcGxheV90aHJlYWRfdHVpKHZvaWQgKmFyZykKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKaW5kZXggNWQ0YjAzOS4uNjQ4ZTMxZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKQEAgLTIwLDcgKzIwLDcgQEAKIAogIyBBZGRpdGlvbmFsIEFSQ0ggc2V0dGluZ3MgZm9yIHg4NgogaWZlcSAoJChBUkNIKSx4ODYpCi0gIGlmZXEgKCR7SVNfWDg2XzY0fSwgMSkKKyAgaWZlcSAoJHtJU182NF9CSVR9LCAxKQogICAgIENGTEFHUyArPSAtREhBVkVfQVJDSF9YODZfNjRfU1VQUE9SVAogICAgIEFSQ0hfSU5DTFVERSA9IC4uLy4uL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUyAuLi8uLi9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMKICAgICBMSUJVTldJTkRfTElCUyA9IC1sdW53aW5kIC1sdW53aW5kLXg4Nl82NApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUuYXJjaCBiL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlLmFyY2gKaW5kZXggODUxY2QwMS4uZmY5NWE2OCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUuYXJjaAorKysgYi90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZS5hcmNoCkBAIC0xLDcgKzEsNyBAQAogCiB1bmFtZV9NIDo9ICQoc2hlbGwgdW5hbWUgLW0gMj4vZGV2L251bGwgfHwgZWNobyBub3QpCiAKLUFSQ0ggPz0gJChzaGVsbCBlY2hvICQodW5hbWVfTSkgfCBzZWQgLWUgcy9pLjg2L2kzODYvIC1lIHMvc3VuNHUvc3BhcmM2NC8gXAorUkFXX0FSQ0ggOj0gJChzaGVsbCBlY2hvICQodW5hbWVfTSkgfCBzZWQgLWUgcy9pLjg2L2kzODYvIC1lIHMvc3VuNHUvc3BhcmM2NC8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIHMvYXJtLiovYXJtLyAtZSBzL3NhMTEwL2FybS8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIHMvczM5MHgvczM5MC8gLWUgcy9wYXJpc2M2NC9wYXJpc2MvIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSBzL3BwYy4qL3Bvd2VycGMvIC1lIHMvbWlwcy4qL21pcHMvIFwKQEAgLTksMjMgKzksMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSBzL3RpbGUuKi90aWxlLyApCiAKICMgQWRkaXRpb25hbCBBUkNIIHNldHRpbmdzIGZvciB4ODYKLWlmZXEgKCQoQVJDSCksaTM4NikKLSAgb3ZlcnJpZGUgQVJDSCA6PSB4ODYKK2lmZXEgKCQoUkFXX0FSQ0gpLGkzODYpCisgIEFSQ0ggPz0geDg2CiBlbmRpZgogCi1pZmVxICgkKEFSQ0gpLHg4Nl82NCkKLSAgb3ZlcnJpZGUgQVJDSCA6PSB4ODYKLSAgSVNfWDg2XzY0IDo9IDAKLSAgaWZlcSAoLCAkKGZpbmRzdHJpbmcgbTMyLCQoQ0ZMQUdTKSkpCi0gICAgSVNfWDg2XzY0IDo9ICQoc2hlbGwgZWNobyBfX3g4Nl82NF9fIHwgJHtDQ30gLUUgLXggYyAtIHwgdGFpbCAtbiAxKQotICAgIFJBV19BUkNIIDo9IHg4Nl82NAoraWZlcSAoJChSQVdfQVJDSCkseDg2XzY0KQorICBBUkNIID89IHg4NgorCisgIGlmbmVxICgsICQoZmluZHN0cmluZyBtMzIsJChDRkxBR1MpKSkKKyAgICBSQVdfQVJDSCA6PSB4ODZfMzIKICAgZW5kaWYKIGVuZGlmCiAKLWlmZXEgKCR7SVNfWDg2XzY0fSwgMSkKK0FSQ0ggPz0gJChSQVdfQVJDSCkKKworTFA2NCA6PSAkKHNoZWxsIGVjaG8gX19MUDY0X18gfCAke0NDfSAke0NGTEFHU30gLUUgLXggYyAtIHwgdGFpbCAtbiAxKQoraWZlcSAoJChMUDY0KSwgMSkKICAgSVNfNjRfQklUIDo9IDEKLWVsc2UgaWZlcSAoJChBUkNIKSx4ODYpCi0gIElTXzY0X0JJVCA6PSAwCiBlbHNlCi0gIElTXzY0X0JJVCA6PSAkKHNoZWxsIGVjaG8gX19MUDY0X18gfCAke0NDfSAke0NGTEFHU30gLUUgLXggYyAtIHwgdGFpbCAtbiAxKQorICBJU182NF9CSVQgOj0gMAogZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi1zeXMuaCBiL3Rvb2xzL3BlcmYvcGVyZi1zeXMuaAppbmRleCBhM2IxM2Q3Li42ZWY2ODE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYtc3lzLmgKKysrIGIvdG9vbHMvcGVyZi9wZXJmLXN5cy5oCkBAIC02LDcgKzYsNiBAQAogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCiAjaWYgZGVmaW5lZChfX2kzODZfXykKICNkZWZpbmUgbWIoKQkJYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIiA6OjogIm1lbW9yeSIpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYwppbmRleCA3OTBjZWJhLi4yODQzMWQxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKQEAgLTUsNyArNSwxMCBAQAogICoJQU5ZIENIQU5HRVMgTUFERSBIRVJFIFdJTEwgQkUgTE9TVCEgCiAgKgogICovCi0KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaWZuZGVmIEhBU19CT09MCisjIGRlZmluZSBIQVNfQk9PTCAxCisjZW5kaWYKICNsaW5lIDEgIkNvbnRleHQueHMiCiAvKgogICogQ29udGV4dC54cy4gIFhTIGludGVyZmFjZXMgZm9yIHBlcmYgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9kd2FyZi11bndpbmQuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvZHdhcmYtdW53aW5kLmMKaW5kZXggYWIyOGNjYS4uMGJmMDZiZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9kd2FyZi11bndpbmQuYworKysgYi90b29scy9wZXJmL3Rlc3RzL2R3YXJmLXVud2luZC5jCkBAIC0xMSw2ICsxMSw5IEBACiAjaW5jbHVkZSAidGhyZWFkLmgiCiAjaW5jbHVkZSAiY2FsbGNoYWluLmgiCiAKKy8qIEZvciBic2VhcmNoLiBXZSB0cnkgdG8gdW53aW5kIGZ1bmN0aW9ucyBpbiBzaGFyZWQgb2JqZWN0LiAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCiBzdGF0aWMgaW50IG1tYXBfaGFuZGxlcihzdHJ1Y3QgcGVyZl90b29sICp0b29sIF9fbWF5YmVfdW51c2VkLAogCQkJdW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCiAJCQlzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSBfX21heWJlX3VudXNlZCwKQEAgLTI4LDcgKzMxLDcgQEAKIAkJCQkJCSAgbW1hcF9oYW5kbGVyLCBtYWNoaW5lLCB0cnVlKTsKIH0KIAotI2RlZmluZSBNQVhfU1RBQ0sgNgorI2RlZmluZSBNQVhfU1RBQ0sgOAogCiBzdGF0aWMgaW50IHVud2luZF9lbnRyeShzdHJ1Y3QgdW53aW5kX2VudHJ5ICplbnRyeSwgdm9pZCAqYXJnKQogewpAQCAtMzcsNiArNDAsOCBAQAogCXN0YXRpYyBjb25zdCBjaGFyICpmdW5jc1tNQVhfU1RBQ0tdID0gewogCQkidGVzdF9fYXJjaF91bndpbmRfc2FtcGxlIiwKIAkJInVud2luZF90aHJlYWQiLAorCQkiY29tcGFyZSIsCisJCSJic2VhcmNoIiwKIAkJImtyYXZhXzMiLAogCQkia3JhdmFfMiIsCiAJCSJrcmF2YV8xIiwKQEAgLTg4LDEwICs5MywzNyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgZ2xvYmFsX3Vud2luZF9yZXR2YWwgPSAtSU5UX01BWDsKKworX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKK3N0YXRpYyBpbnQgY29tcGFyZSh2b2lkICpwMSwgdm9pZCAqcDIpCit7CisJLyogQW55IHBvc3NpYmxlIHZhbHVlIHNob3VsZCBiZSAndGhyZWFkJyAqLworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9ICooc3RydWN0IHRocmVhZCAqKilwMTsKKworCWlmIChnbG9iYWxfdW53aW5kX3JldHZhbCA9PSAtSU5UX01BWCkKKwkJZ2xvYmFsX3Vud2luZF9yZXR2YWwgPSB1bndpbmRfdGhyZWFkKHRocmVhZCk7CisKKwlyZXR1cm4gcDEgLSBwMjsKK30KKwogX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKIHN0YXRpYyBpbnQga3JhdmFfMyhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCiB7Ci0JcmV0dXJuIHVud2luZF90aHJlYWQodGhyZWFkKTsKKwlzdHJ1Y3QgdGhyZWFkICphcnJheVsyXSA9IHt0aHJlYWQsIHRocmVhZH07CisJdm9pZCAqZnAgPSAmYnNlYXJjaDsKKwkvKgorCSAqIG1ha2UgX2JzZWFyY2ggYSB2b2xhdGlsZSBmdW5jdGlvbiBwb2ludGVyIHRvCisJICogcHJldmVudCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uLCB3aGljaCBtYXkgZXhwYW5kCisJICogYnNlYXJjaCBhbmQgY2FsbCBjb21wYXJlIGRpcmVjdGx5IGZyb20gdGhpcyBmdW5jdGlvbiwKKwkgKiBpbnN0ZWFkIG9mIGxpYmMgc2hhcmVkIG9iamVjdC4KKwkgKi8KKwl2b2lkICooKnZvbGF0aWxlIF9ic2VhcmNoKSh2b2lkICosIHZvaWQgKiwgc2l6ZV90LAorCQkJc2l6ZV90LCBpbnQgKCopKHZvaWQgKiwgdm9pZCAqKSk7CisKKwlfYnNlYXJjaCA9IGZwOworCV9ic2VhcmNoKGFycmF5LCAmdGhyZWFkLCAyLCBzaXplb2Yoc3RydWN0IHRocmVhZCAqKiksIGNvbXBhcmUpOworCXJldHVybiBnbG9iYWxfdW53aW5kX3JldHZhbDsKIH0KIAogX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfY3VtdWxhdGUuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfY3VtdWxhdGUuYwppbmRleCA2MTRkNWM0Li44ZDExMGRlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2N1bXVsYXRlLmMKKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19jdW11bGF0ZS5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAkgKiBmdW5jdGlvbiBzaW5jZSBURVNUX0FTU0VSVF9WQUwoKSByZXR1cm5zIGluIGNhc2Ugb2YgZmFpbHVyZS4KIAkgKi8KIAloaXN0c19fY29sbGFwc2VfcmVzb3J0KGhpc3RzLCBOVUxMKTsKLQloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cyk7CisJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMsIE5VTEwpOwogCiAJaWYgKHZlcmJvc2UgPiAyKSB7CiAJCXByX2luZm8oInVzZSBjYWxsY2hhaW46ICVkLCBjdW11bGF0ZSBjYWxsY2hhaW46ICVkXG4iLApAQCAtNDU0LDEyICs0NTQsMTIgQEAKIAkgKiAgIDMwLjAwJSAgICAxMC4wMCUgICAgIHBlcmYgIHBlcmYgICAgICAgICAgIFsuXSBjbWRfcmVjb3JkCiAJICogICAyMC4wMCUgICAgIDAuMDAlICAgICBiYXNoICBsaWJjICAgICAgICAgICBbLl0gbWFsbG9jCiAJICogICAxMC4wMCUgICAgMTAuMDAlICAgICBiYXNoICBba2VybmVsXSAgICAgICBba10gcGFnZV9mYXVsdAotCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgcGVyZiAgW2tlcm5lbF0gICAgICAgW2tdIHNjaGVkdWxlCi0JICogICAxMC4wMCUgICAgIDAuMDAlICAgICBwZXJmICBba2VybmVsXSAgICAgICBba10gc3lzX3BlcmZfZXZlbnRfb3BlbgotCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgcGVyZiAgW2tlcm5lbF0gICAgICAgW2tdIHBhZ2VfZmF1bHQKLQkgKiAgIDEwLjAwJSAgICAxMC4wMCUgICAgIHBlcmYgIGxpYmMgICAgICAgICAgIFsuXSBmcmVlCi0JICogICAxMC4wMCUgICAgMTAuMDAlICAgICBwZXJmICBsaWJjICAgICAgICAgICBbLl0gbWFsbG9jCiAJICogICAxMC4wMCUgICAgMTAuMDAlICAgICBiYXNoICBiYXNoICAgICAgICAgICBbLl0geG1hbGxvYworCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgcGVyZiAgW2tlcm5lbF0gICAgICAgW2tdIHBhZ2VfZmF1bHQKKwkgKiAgIDEwLjAwJSAgICAxMC4wMCUgICAgIHBlcmYgIGxpYmMgICAgICAgICAgIFsuXSBtYWxsb2MKKwkgKiAgIDEwLjAwJSAgICAxMC4wMCUgICAgIHBlcmYgIFtrZXJuZWxdICAgICAgIFtrXSBzY2hlZHVsZQorCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgcGVyZiAgbGliYyAgICAgICAgICAgWy5dIGZyZWUKKwkgKiAgIDEwLjAwJSAgICAgMC4wMCUgICAgIHBlcmYgIFtrZXJuZWxdICAgICAgIFtrXSBzeXNfcGVyZl9ldmVudF9vcGVuCiAJICovCiAJc3RydWN0IHJlc3VsdCBleHBlY3RlZFtdID0gewogCQl7IDcwMDAsIDIwMDAsICJwZXJmIiwgInBlcmYiLCAgICAgIm1haW4iIH0sCkBAIC00NjgsMTIgKzQ2OCwxMiBAQAogCQl7IDMwMDAsIDEwMDAsICJwZXJmIiwgInBlcmYiLCAgICAgImNtZF9yZWNvcmQiIH0sCiAJCXsgMjAwMCwgICAgMCwgImJhc2giLCAibGliYyIsICAgICAibWFsbG9jIiB9LAogCQl7IDEwMDAsIDEwMDAsICJiYXNoIiwgIltrZXJuZWxdIiwgInBhZ2VfZmF1bHQiIH0sCi0JCXsgMTAwMCwgMTAwMCwgInBlcmYiLCAiW2tlcm5lbF0iLCAic2NoZWR1bGUiIH0sCi0JCXsgMTAwMCwgICAgMCwgInBlcmYiLCAiW2tlcm5lbF0iLCAic3lzX3BlcmZfZXZlbnRfb3BlbiIgfSwKKwkJeyAxMDAwLCAxMDAwLCAiYmFzaCIsICJiYXNoIiwgICAgICJ4bWFsbG9jIiB9LAogCQl7IDEwMDAsIDEwMDAsICJwZXJmIiwgIltrZXJuZWxdIiwgInBhZ2VfZmF1bHQiIH0sCisJCXsgMTAwMCwgMTAwMCwgInBlcmYiLCAiW2tlcm5lbF0iLCAic2NoZWR1bGUiIH0sCiAJCXsgMTAwMCwgMTAwMCwgInBlcmYiLCAibGliYyIsICAgICAiZnJlZSIgfSwKIAkJeyAxMDAwLCAxMDAwLCAicGVyZiIsICJsaWJjIiwgICAgICJtYWxsb2MiIH0sCi0JCXsgMTAwMCwgMTAwMCwgImJhc2giLCAiYmFzaCIsICAgICAieG1hbGxvYyIgfSwKKwkJeyAxMDAwLCAgICAwLCAicGVyZiIsICJba2VybmVsXSIsICJzeXNfcGVyZl9ldmVudF9vcGVuIiB9LAogCX07CiAKIAlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gZmFsc2U7CkBAIC01MzcsMTAgKzUzNywxMyBAQAogCSAqICAgICAgICAgICAgICAgICAgbWFsbG9jCiAJICogICAgICAgICAgICAgICAgICBtYWluCiAJICoKLQkgKiAgIDEwLjAwJSAgICAxMC4wMCUgICAgIHBlcmYgIFtrZXJuZWxdICAgICAgIFtrXSBzY2hlZHVsZQorCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgYmFzaCAgYmFzaCAgICAgICAgICAgWy5dIHhtYWxsb2MKIAkgKiAgICAgICAgICAgICAgfAotCSAqICAgICAgICAgICAgICAtLS0gc2NoZWR1bGUKLQkgKiAgICAgICAgICAgICAgICAgIHJ1bl9jb21tYW5kCisJICogICAgICAgICAgICAgIC0tLSB4bWFsbG9jCisJICogICAgICAgICAgICAgICAgICBtYWxsb2MKKwkgKiAgICAgICAgICAgICAgICAgIHhtYWxsb2MgICAgIDwtLS0gTk9URTogdGhlcmUncyBhIGN5Y2xlCisJICogICAgICAgICAgICAgICAgICBtYWxsb2MKKwkgKiAgICAgICAgICAgICAgICAgIHhtYWxsb2MKIAkgKiAgICAgICAgICAgICAgICAgIG1haW4KIAkgKgogCSAqICAgMTAuMDAlICAgICAwLjAwJSAgICAgcGVyZiAgW2tlcm5lbF0gICAgICAgW2tdIHN5c19wZXJmX2V2ZW50X29wZW4KQEAgLTU1Niw2ICs1NTksMTIgQEAKIAkgKiAgICAgICAgICAgICAgICAgIHJ1bl9jb21tYW5kCiAJICogICAgICAgICAgICAgICAgICBtYWluCiAJICoKKwkgKiAgIDEwLjAwJSAgICAxMC4wMCUgICAgIHBlcmYgIFtrZXJuZWxdICAgICAgIFtrXSBzY2hlZHVsZQorCSAqICAgICAgICAgICAgICB8CisJICogICAgICAgICAgICAgIC0tLSBzY2hlZHVsZQorCSAqICAgICAgICAgICAgICAgICAgcnVuX2NvbW1hbmQKKwkgKiAgICAgICAgICAgICAgICAgIG1haW4KKwkgKgogCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgcGVyZiAgbGliYyAgICAgICAgICAgWy5dIGZyZWUKIAkgKiAgICAgICAgICAgICAgfAogCSAqICAgICAgICAgICAgICAtLS0gZnJlZQpAQCAtNTcwLDE1ICs1NzksNiBAQAogCSAqICAgICAgICAgICAgICAgICAgcnVuX2NvbW1hbmQKIAkgKiAgICAgICAgICAgICAgICAgIG1haW4KIAkgKgotCSAqICAgMTAuMDAlICAgIDEwLjAwJSAgICAgYmFzaCAgYmFzaCAgICAgICAgICAgWy5dIHhtYWxsb2MKLQkgKiAgICAgICAgICAgICAgfAotCSAqICAgICAgICAgICAgICAtLS0geG1hbGxvYwotCSAqICAgICAgICAgICAgICAgICAgbWFsbG9jCi0JICogICAgICAgICAgICAgICAgICB4bWFsbG9jICAgICA8LS0tIE5PVEU6IHRoZXJlJ3MgYSBjeWNsZQotCSAqICAgICAgICAgICAgICAgICAgbWFsbG9jCi0JICogICAgICAgICAgICAgICAgICB4bWFsbG9jCi0JICogICAgICAgICAgICAgICAgICBtYWluCi0JICoKIAkgKi8KIAlzdHJ1Y3QgcmVzdWx0IGV4cGVjdGVkW10gPSB7CiAJCXsgNzAwMCwgMjAwMCwgInBlcmYiLCAicGVyZiIsICAgICAibWFpbiIgfSwKQEAgLTU4NywxMiArNTg3LDEyIEBACiAJCXsgMzAwMCwgMTAwMCwgInBlcmYiLCAicGVyZiIsICAgICAiY21kX3JlY29yZCIgfSwKIAkJeyAyMDAwLCAgICAwLCAiYmFzaCIsICJsaWJjIiwgICAgICJtYWxsb2MiIH0sCiAJCXsgMTAwMCwgMTAwMCwgImJhc2giLCAiW2tlcm5lbF0iLCAicGFnZV9mYXVsdCIgfSwKLQkJeyAxMDAwLCAxMDAwLCAicGVyZiIsICJba2VybmVsXSIsICJzY2hlZHVsZSIgfSwKKwkJeyAxMDAwLCAxMDAwLCAiYmFzaCIsICJiYXNoIiwgICAgICJ4bWFsbG9jIiB9LAogCQl7IDEwMDAsICAgIDAsICJwZXJmIiwgIltrZXJuZWxdIiwgInN5c19wZXJmX2V2ZW50X29wZW4iIH0sCiAJCXsgMTAwMCwgMTAwMCwgInBlcmYiLCAiW2tlcm5lbF0iLCAicGFnZV9mYXVsdCIgfSwKKwkJeyAxMDAwLCAxMDAwLCAicGVyZiIsICJba2VybmVsXSIsICJzY2hlZHVsZSIgfSwKIAkJeyAxMDAwLCAxMDAwLCAicGVyZiIsICJsaWJjIiwgICAgICJmcmVlIiB9LAogCQl7IDEwMDAsIDEwMDAsICJwZXJmIiwgImxpYmMiLCAgICAgIm1hbGxvYyIgfSwKLQkJeyAxMDAwLCAxMDAwLCAiYmFzaCIsICJiYXNoIiwgICAgICJ4bWFsbG9jIiB9LAogCX07CiAJc3RydWN0IGNhbGxjaGFpbl9yZXN1bHQgZXhwZWN0ZWRfY2FsbGNoYWluW10gPSB7CiAJCXsKQEAgLTYyMiw5ICs2MjIsMTIgQEAKIAkJCQl7ICJiYXNoIiwgICAgICJtYWluIiB9LCB9LAogCQl9LAogCQl7Ci0JCQkzLCB7CXsgIltrZXJuZWxdIiwgInNjaGVkdWxlIiB9LAotCQkJCXsgInBlcmYiLCAgICAgInJ1bl9jb21tYW5kIiB9LAotCQkJCXsgInBlcmYiLCAgICAgIm1haW4iIH0sIH0sCisJCQk2LCB7CXsgImJhc2giLCAgICAgInhtYWxsb2MiIH0sCisJCQkJeyAibGliYyIsICAgICAibWFsbG9jIiB9LAorCQkJCXsgImJhc2giLCAgICAgInhtYWxsb2MiIH0sCisJCQkJeyAibGliYyIsICAgICAibWFsbG9jIiB9LAorCQkJCXsgImJhc2giLCAgICAgInhtYWxsb2MiIH0sCisJCQkJeyAiYmFzaCIsICAgICAibWFpbiIgfSwgfSwKIAkJfSwKIAkJewogCQkJMywgewl7ICJba2VybmVsXSIsICJzeXNfcGVyZl9ldmVudF9vcGVuIiB9LApAQCAtNjM4LDYgKzY0MSwxMSBAQAogCQkJCXsgInBlcmYiLCAgICAgIm1haW4iIH0sIH0sCiAJCX0sCiAJCXsKKwkJCTMsIHsJeyAiW2tlcm5lbF0iLCAic2NoZWR1bGUiIH0sCisJCQkJeyAicGVyZiIsICAgICAicnVuX2NvbW1hbmQiIH0sCisJCQkJeyAicGVyZiIsICAgICAibWFpbiIgfSwgfSwKKwkJfSwKKwkJewogCQkJNCwgewl7ICJsaWJjIiwgICAgICJmcmVlIiB9LAogCQkJCXsgInBlcmYiLCAgICAgImNtZF9yZWNvcmQiIH0sCiAJCQkJeyAicGVyZiIsICAgICAicnVuX2NvbW1hbmQiIH0sCkBAIC02NDksMTQgKzY1Nyw2IEBACiAJCQkJeyAicGVyZiIsICAgICAicnVuX2NvbW1hbmQiIH0sCiAJCQkJeyAicGVyZiIsICAgICAibWFpbiIgfSwgfSwKIAkJfSwKLQkJewotCQkJNiwgewl7ICJiYXNoIiwgICAgICJ4bWFsbG9jIiB9LAotCQkJCXsgImxpYmMiLCAgICAgIm1hbGxvYyIgfSwKLQkJCQl7ICJiYXNoIiwgICAgICJ4bWFsbG9jIiB9LAotCQkJCXsgImxpYmMiLCAgICAgIm1hbGxvYyIgfSwKLQkJCQl7ICJiYXNoIiwgICAgICJ4bWFsbG9jIiB9LAotCQkJCXsgImJhc2giLCAgICAgIm1haW4iIH0sIH0sCi0JCX0sCiAJfTsKIAogCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19maWx0ZXIuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfZmlsdGVyLmMKaW5kZXggNzRmMjU3YS4uNTllNTNkYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19maWx0ZXIuYworKysgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2ZpbHRlci5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJc3RydWN0IGhpc3RzICpoaXN0cyA9IGV2c2VsX19oaXN0cyhldnNlbCk7CiAKIAkJaGlzdHNfX2NvbGxhcHNlX3Jlc29ydChoaXN0cywgTlVMTCk7Ci0JCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzKTsKKwkJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMsIE5VTEwpOwogCiAJCWlmICh2ZXJib3NlID4gMikgewogCQkJcHJfaW5mbygiTm9ybWFsIGhpc3RvZ3JhbVxuIik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2hpc3RzX291dHB1dC5jIGIvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19vdXRwdXQuYwppbmRleCBhNzQ4ZjJiLi5mNTU0NzYxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2hpc3RzX291dHB1dC5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfb3V0cHV0LmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQlnb3RvIG91dDsKIAogCWhpc3RzX19jb2xsYXBzZV9yZXNvcnQoaGlzdHMsIE5VTEwpOwotCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzKTsKKwloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cywgTlVMTCk7CiAKIAlpZiAodmVyYm9zZSA+IDIpIHsKIAkJcHJfaW5mbygiW2ZpZWxkcyA9ICVzLCBzb3J0ID0gJXNdXG4iLCBmaWVsZF9vcmRlciwgc29ydF9vcmRlcik7CkBAIC0yNTIsNyArMjUyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAloaXN0c19fY29sbGFwc2VfcmVzb3J0KGhpc3RzLCBOVUxMKTsKLQloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cyk7CisJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMsIE5VTEwpOwogCiAJaWYgKHZlcmJvc2UgPiAyKSB7CiAJCXByX2luZm8oIltmaWVsZHMgPSAlcywgc29ydCA9ICVzXVxuIiwgZmllbGRfb3JkZXIsIHNvcnRfb3JkZXIpOwpAQCAtMzA2LDcgKzMwNiw3IEBACiAJCWdvdG8gb3V0OwogCiAJaGlzdHNfX2NvbGxhcHNlX3Jlc29ydChoaXN0cywgTlVMTCk7Ci0JaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMpOworCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzLCBOVUxMKTsKIAogCWlmICh2ZXJib3NlID4gMikgewogCQlwcl9pbmZvKCJbZmllbGRzID0gJXMsIHNvcnQgPSAlc11cbiIsIGZpZWxkX29yZGVyLCBzb3J0X29yZGVyKTsKQEAgLTM4NCw3ICszODQsNyBAQAogCQlnb3RvIG91dDsKIAogCWhpc3RzX19jb2xsYXBzZV9yZXNvcnQoaGlzdHMsIE5VTEwpOwotCWhpc3RzX19vdXRwdXRfcmVzb3J0KGhpc3RzKTsKKwloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cywgTlVMTCk7CiAKIAlpZiAodmVyYm9zZSA+IDIpIHsKIAkJcHJfaW5mbygiW2ZpZWxkcyA9ICVzLCBzb3J0ID0gJXNdXG4iLCBmaWVsZF9vcmRlciwgc29ydF9vcmRlcik7CkBAIC00ODcsNyArNDg3LDcgQEAKIAkJZ290byBvdXQ7CiAKIAloaXN0c19fY29sbGFwc2VfcmVzb3J0KGhpc3RzLCBOVUxMKTsKLQloaXN0c19fb3V0cHV0X3Jlc29ydChoaXN0cyk7CisJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMsIE5VTEwpOwogCiAJaWYgKHZlcmJvc2UgPiAyKSB7CiAJCXByX2luZm8oIltmaWVsZHMgPSAlcywgc29ydCA9ICVzXVxuIiwgZmllbGRfb3JkZXIsIHNvcnRfb3JkZXIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9icm93c2Vycy9oaXN0cy5jIGIvdG9vbHMvcGVyZi91aS9icm93c2Vycy9oaXN0cy5jCmluZGV4IGU2YmIwNGIuLjc4ODUwNmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvaGlzdHMuYworKysgYi90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2hpc3RzLmMKQEAgLTU1MCw3ICs1NTAsNyBAQAogCWJvb2wgbmVlZF9wZXJjZW50OwogCiAJbm9kZSA9IHJiX2ZpcnN0KHJvb3QpOwotCW5lZWRfcGVyY2VudCA9ICEhcmJfbmV4dChub2RlKTsKKwluZWVkX3BlcmNlbnQgPSBub2RlICYmIHJiX25leHQobm9kZSk7CiAKIAl3aGlsZSAobm9kZSkgewogCQlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKmNoaWxkID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGNhbGxjaGFpbl9ub2RlLCByYl9ub2RlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvaGlzdC5jIGIvdG9vbHMvcGVyZi91aS9oaXN0LmMKaW5kZXggZGMwZDA5NS4uNDgyYWRhZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9oaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91aS9oaXN0LmMKQEAgLTIwNCw2ICsyMDQsOSBAQAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAorCQlpZiAoYS0+dGhyZWFkICE9IGItPnRocmVhZCB8fCAhc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikKKwkJCXJldHVybiAwOworCiAJCXJldCA9IGItPmNhbGxjaGFpbi0+bWF4X2RlcHRoIC0gYS0+Y2FsbGNoYWluLT5tYXhfZGVwdGg7CiAJfQogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL3R1aS9zZXR1cC5jIGIvdG9vbHMvcGVyZi91aS90dWkvc2V0dXAuYwppbmRleCAyZjYxMjU2Li4zYzM4ZjI1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL3R1aS9zZXR1cC5jCisrKyBiL3Rvb2xzL3BlcmYvdWkvdHVpL3NldHVwLmMKQEAgLTEsNSArMSw4IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2lmZGVmIEhBVkVfQkFDS1RSQUNFX1NVUFBPUlQKKyNpbmNsdWRlIDxleGVjaW5mby5oPgorI2VuZGlmCiAKICNpbmNsdWRlICIuLi8uLi91dGlsL2NhY2hlLmgiCiAjaW5jbHVkZSAiLi4vLi4vdXRpbC9kZWJ1Zy5oIgpAQCAtODgsNiArOTEsMjUgQEAKIAlyZXR1cm4gU0xrcF9nZXRrZXkoKTsKIH0KIAorI2lmZGVmIEhBVkVfQkFDS1RSQUNFX1NVUFBPUlQKK3N0YXRpYyB2b2lkIHVpX19zaWduYWxfYmFja3RyYWNlKGludCBzaWcpCit7CisJdm9pZCAqc3RhY2tkdW1wWzMyXTsKKwlzaXplX3Qgc2l6ZTsKKworCXVpX19leGl0KGZhbHNlKTsKKwlwc2lnbmFsKHNpZywgInBlcmYiKTsKKworCXByaW50ZigiLS0tLS0tLS0gYmFja3RyYWNlIC0tLS0tLS0tXG4iKTsKKwlzaXplID0gYmFja3RyYWNlKHN0YWNrZHVtcCwgQVJSQVlfU0laRShzdGFja2R1bXApKTsKKwliYWNrdHJhY2Vfc3ltYm9sc19mZChzdGFja2R1bXAsIHNpemUsIFNURE9VVF9GSUxFTk8pOworCisJZXhpdCgwKTsKK30KKyNlbHNlCisjIGRlZmluZSB1aV9fc2lnbmFsX2JhY2t0cmFjZSAgdWlfX3NpZ25hbAorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHVpX19zaWduYWwoaW50IHNpZykKIHsKIAl1aV9fZXhpdChmYWxzZSk7CkBAIC0xMjIsOCArMTQ0LDggQEAKIAl1aV9icm93c2VyX19pbml0KCk7CiAJdHVpX3Byb2dyZXNzX19pbml0KCk7CiAKLQlzaWduYWwoU0lHU0VHViwgdWlfX3NpZ25hbCk7Ci0Jc2lnbmFsKFNJR0ZQRSwgdWlfX3NpZ25hbCk7CisJc2lnbmFsKFNJR1NFR1YsIHVpX19zaWduYWxfYmFja3RyYWNlKTsKKwlzaWduYWwoU0lHRlBFLCB1aV9fc2lnbmFsX2JhY2t0cmFjZSk7CiAJc2lnbmFsKFNJR0lOVCwgdWlfX3NpZ25hbCk7CiAJc2lnbmFsKFNJR1FVSVQsIHVpX19zaWduYWwpOwogCXNpZ25hbChTSUdURVJNLCB1aV9fc2lnbmFsKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKaW5kZXggNzk5OTljZS4uMDFiYzRlMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMKQEAgLTE3NywxNCArMTc3LDE3IEBACiAJCWdvdG8gb3V0X2ZyZWVfb3BzOwogCiAJb3BzLT5sb2NrZWQuaW5zID0gaW5zX19maW5kKG5hbWUpOworCWZyZWUobmFtZSk7CisKIAlpZiAob3BzLT5sb2NrZWQuaW5zID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWVfb3BzOwogCiAJaWYgKCFvcHMtPmxvY2tlZC5pbnMtPm9wcykKIAkJcmV0dXJuIDA7CiAKLQlpZiAob3BzLT5sb2NrZWQuaW5zLT5vcHMtPnBhcnNlKQotCQlvcHMtPmxvY2tlZC5pbnMtPm9wcy0+cGFyc2Uob3BzLT5sb2NrZWQub3BzKTsKKwlpZiAob3BzLT5sb2NrZWQuaW5zLT5vcHMtPnBhcnNlICYmCisJICAgIG9wcy0+bG9ja2VkLmlucy0+b3BzLT5wYXJzZShvcHMtPmxvY2tlZC5vcHMpIDwgMCkKKwkJZ290byBvdXRfZnJlZV9vcHM7CiAKIAlyZXR1cm4gMDsKIApAQCAtMjA4LDYgKzIxMSwxMyBAQAogCiBzdGF0aWMgdm9pZCBsb2NrX19kZWxldGUoc3RydWN0IGluc19vcGVyYW5kcyAqb3BzKQogeworCXN0cnVjdCBpbnMgKmlucyA9IG9wcy0+bG9ja2VkLmluczsKKworCWlmIChpbnMgJiYgaW5zLT5vcHMtPmZyZWUpCisJCWlucy0+b3BzLT5mcmVlKG9wcy0+bG9ja2VkLm9wcyk7CisJZWxzZQorCQlpbnNfX2RlbGV0ZShvcHMtPmxvY2tlZC5vcHMpOworCiAJemZyZWUoJm9wcy0+bG9ja2VkLm9wcyk7CiAJemZyZWUoJm9wcy0+dGFyZ2V0LnJhdyk7CiAJemZyZWUoJm9wcy0+dGFyZ2V0Lm5hbWUpOwpAQCAtNTMxLDggKzU0MSw4IEBACiAJaWYgKCFkbC0+aW5zLT5vcHMpCiAJCXJldHVybjsKIAotCWlmIChkbC0+aW5zLT5vcHMtPnBhcnNlKQotCQlkbC0+aW5zLT5vcHMtPnBhcnNlKCZkbC0+b3BzKTsKKwlpZiAoZGwtPmlucy0+b3BzLT5wYXJzZSAmJiBkbC0+aW5zLT5vcHMtPnBhcnNlKCZkbC0+b3BzKSA8IDApCisJCWRsLT5pbnMgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IGRpc2FzbV9saW5lX19wYXJzZShjaGFyICpsaW5lLCBjaGFyICoqbmFtZXAsIGNoYXIgKipyYXdwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmggYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaAppbmRleCAwNzg0YTk0Li5jYWRiZGM5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaAorKysgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaApAQCAtMTE2LDExICsxMTYsNiBAQAogCXN0cnVjdCBhbm5vdGF0ZWRfc291cmNlICpzcmM7CiB9OwogCi1zdHJ1Y3Qgc2Fubm90YXRpb24gewotCXN0cnVjdCBhbm5vdGF0aW9uIGFubm90YXRpb247Ci0Jc3RydWN0IHN5bWJvbAkgIHN5bWJvbDsKLX07Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bV9oaXN0ICphbm5vdGF0aW9uX19oaXN0b2dyYW0oc3RydWN0IGFubm90YXRpb24gKm5vdGVzLCBpbnQgaWR4KQogewogCXJldHVybiAoKCh2b2lkICopJm5vdGVzLT5zcmMtPmhpc3RvZ3JhbXMpICsKQEAgLTEyOSw4ICsxMjQsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm5vdGF0aW9uICpzeW1ib2xfX2Fubm90YXRpb24oc3RydWN0IHN5bWJvbCAqc3ltKQogewotCXN0cnVjdCBzYW5ub3RhdGlvbiAqYSA9IGNvbnRhaW5lcl9vZihzeW0sIHN0cnVjdCBzYW5ub3RhdGlvbiwgc3ltYm9sKTsKLQlyZXR1cm4gJmEtPmFubm90YXRpb247CisJcmV0dXJuICh2b2lkICopc3ltIC0gc3ltYm9sX2NvbmYucHJpdl9zaXplOwogfQogCiBpbnQgYWRkcl9tYXBfc3ltYm9sX19pbmNfc2FtcGxlcyhzdHJ1Y3QgYWRkcl9tYXBfc3ltYm9sICphbXMsIGludCBldmlkeCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY2FjaGUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oCmluZGV4IDVjZjllMWIuLmQwNGQ3NzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oCkBAIC03MSw3ICs3MSw5IEBACiBleHRlcm4gY2hhciAqcGVyZl9wYXRoZHVwKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogCisjaWZuZGVmIF9fVUNMSUJDX18KIC8qIE1hdGNoZXMgdGhlIGxpYmMvbGliYnNkIGZ1bmN0aW9uIGF0dHJpYnV0ZSBzbyB3ZSBkZWNsYXJlIHRoaXMgdW5jb25kaXRpb25hbGx5OiAqLwogZXh0ZXJuIHNpemVfdCBzdHJsY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpemUpOworI2VuZGlmCiAKICNlbmRpZiAvKiBfX1BFUkZfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jCmluZGV4IDY0YjM3N2UuLjE0ZTdhMTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYworKysgYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMKQEAgLTg0MSwzICs4NDEsMzMgQEAKIAogCXJldHVybiBiZjsKIH0KKworc3RhdGljIHZvaWQgZnJlZV9jYWxsY2hhaW5fbm9kZShzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKm5vZGUpCit7CisJc3RydWN0IGNhbGxjaGFpbl9saXN0ICpsaXN0LCAqdG1wOworCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hpbGQ7CisJc3RydWN0IHJiX25vZGUgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGlzdCwgdG1wLCAmbm9kZS0+dmFsLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZsaXN0LT5saXN0KTsKKwkJZnJlZShsaXN0KTsKKwl9CisKKwluID0gcmJfZmlyc3QoJm5vZGUtPnJiX3Jvb3RfaW4pOworCXdoaWxlIChuKSB7CisJCWNoaWxkID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSwgcmJfbm9kZV9pbik7CisJCW4gPSByYl9uZXh0KG4pOworCQlyYl9lcmFzZSgmY2hpbGQtPnJiX25vZGVfaW4sICZub2RlLT5yYl9yb290X2luKTsKKworCQlmcmVlX2NhbGxjaGFpbl9ub2RlKGNoaWxkKTsKKwkJZnJlZShjaGlsZCk7CisJfQorfQorCit2b2lkIGZyZWVfY2FsbGNoYWluKHN0cnVjdCBjYWxsY2hhaW5fcm9vdCAqcm9vdCkKK3sKKwlpZiAoIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pCisJCXJldHVybjsKKworCWZyZWVfY2FsbGNoYWluX25vZGUoJnJvb3QtPm5vZGUpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oCmluZGV4IGRiYzA4Y2YuLmMwZWMxYWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaAorKysgYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmgKQEAgLTE5OCw0ICsxOTgsNiBAQAogY2hhciAqY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKHN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2wsCiAJCQkgICAgICAgY2hhciAqYmYsIHNpemVfdCBiZnNpemUsIGJvb2wgc2hvd19kc28pOwogCit2b2lkIGZyZWVfY2FsbGNoYWluKHN0cnVjdCBjYWxsY2hhaW5fcm9vdCAqcm9vdCk7CisKICNlbmRpZgkvKiBfX1BFUkZfQ0FMTENIQUlOX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYwppbmRleCBjYmFiMWZiLi4yZTUwN2I1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCkBAIC0xNDQ1LDcgKzE0NDUsNyBAQAogCWNhc2UgRU5PRU5UOgogCQlzY25wcmludGYoYnVmLCBzaXplLCAiJXMiLAogCQkJICAiRXJyb3I6XHRVbmFibGUgdG8gZmluZCBkZWJ1Z2ZzXG4iCi0JCQkgICJIaW50Olx0V2FzIHlvdXIga2VybmVsIHdhcyBjb21waWxlZCB3aXRoIGRlYnVnZnMgc3VwcG9ydD9cbiIKKwkJCSAgIkhpbnQ6XHRXYXMgeW91ciBrZXJuZWwgY29tcGlsZWQgd2l0aCBkZWJ1Z2ZzIHN1cHBvcnQ/XG4iCiAJCQkgICJIaW50Olx0SXMgdGhlIGRlYnVnZnMgZmlsZXN5c3RlbSBtb3VudGVkP1xuIgogCQkJICAiSGludDpcdFRyeSAnc3VkbyBtb3VudCAtdCBkZWJ1Z2ZzIG5vZGV2IC9zeXMva2VybmVsL2RlYnVnJyIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCmluZGV4IDZlODhiOWUuLjE4MjM5NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJldmxpc3QuaCIKICNpbmNsdWRlICJldnNlbC5oIgogI2luY2x1ZGUgImFubm90YXRlLmgiCisjaW5jbHVkZSAidWkvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAKIHN0YXRpYyBib29sIGhpc3RzX19maWx0ZXJfZW50cnlfYnlfZHNvKHN0cnVjdCBoaXN0cyAqaGlzdHMsCkBAIC0zMDMsNyArMzA0LDcgQEAKIAlzaXplX3QgY2FsbGNoYWluX3NpemUgPSAwOwogCXN0cnVjdCBoaXN0X2VudHJ5ICpoZTsKIAotCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluIHx8IHN5bWJvbF9jb25mLmN1bXVsYXRlX2NhbGxjaGFpbikKKwlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikKIAkJY2FsbGNoYWluX3NpemUgPSBzaXplb2Yoc3RydWN0IGNhbGxjaGFpbl9yb290KTsKIAogCWhlID0gemFsbG9jKHNpemVvZigqaGUpICsgY2FsbGNoYWluX3NpemUpOwpAQCAtNzM2LDcgKzczNyw3IEBACiAJaXRlci0+aGUgPSBoZTsKIAloZV9jYWNoZVtpdGVyLT5jdXJyKytdID0gaGU7CiAKLQljYWxsY2hhaW5fYXBwZW5kKGhlLT5jYWxsY2hhaW4sICZjYWxsY2hhaW5fY3Vyc29yLCBzYW1wbGUtPnBlcmlvZCk7CisJaGlzdF9lbnRyeV9fYXBwZW5kX2NhbGxjaGFpbihoZSwgc2FtcGxlKTsKIAogCS8qCiAJICogV2UgbmVlZCB0byByZS1pbml0aWFsaXplIHRoZSBjdXJzb3Igc2luY2UgY2FsbGNoYWluX2FwcGVuZCgpCkBAIC04MDksNyArODEwLDggQEAKIAlpdGVyLT5oZSA9IGhlOwogCWhlX2NhY2hlW2l0ZXItPmN1cnIrK10gPSBoZTsKIAotCWNhbGxjaGFpbl9hcHBlbmQoaGUtPmNhbGxjaGFpbiwgJmN1cnNvciwgc2FtcGxlLT5wZXJpb2QpOworCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKQorCQljYWxsY2hhaW5fYXBwZW5kKGhlLT5jYWxsY2hhaW4sICZjdXJzb3IsIHNhbXBsZS0+cGVyaW9kKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTQ1LDYgKzk0Nyw3IEBACiAJemZyZWUoJmhlLT5tZW1faW5mbyk7CiAJemZyZWUoJmhlLT5zdGF0X2FjYyk7CiAJZnJlZV9zcmNsaW5lKGhlLT5zcmNsaW5lKTsKKwlmcmVlX2NhbGxjaGFpbihoZS0+Y2FsbGNoYWluKTsKIAlmcmVlKGhlKTsKIH0KIApAQCAtOTg3LDYgKzk5MCw3IEBACiAJCWVsc2UKIAkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CiAJfQorCWhpc3RzLT5ucl9lbnRyaWVzKys7CiAKIAlyYl9saW5rX25vZGUoJmhlLT5yYl9ub2RlX2luLCBwYXJlbnQsIHApOwogCXJiX2luc2VydF9jb2xvcigmaGUtPnJiX25vZGVfaW4sIHJvb3QpOwpAQCAtMTAyNCw3ICsxMDI4LDEwIEBACiAJaWYgKCFzb3J0X19uZWVkX2NvbGxhcHNlKQogCQlyZXR1cm47CiAKKwloaXN0cy0+bnJfZW50cmllcyA9IDA7CisKIAlyb290ID0gaGlzdHNfX2dldF9yb3RhdGVfZW50cmllc19pbihoaXN0cyk7CisKIAluZXh0ID0gcmJfZmlyc3Qocm9vdCk7CiAKIAl3aGlsZSAobmV4dCkgewpAQCAtMTExOSw3ICsxMTI2LDcgQEAKIAlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlLCBlbnRyaWVzKTsKIH0KIAotdm9pZCBoaXN0c19fb3V0cHV0X3Jlc29ydChzdHJ1Y3QgaGlzdHMgKmhpc3RzKQordm9pZCBoaXN0c19fb3V0cHV0X3Jlc29ydChzdHJ1Y3QgaGlzdHMgKmhpc3RzLCBzdHJ1Y3QgdWlfcHJvZ3Jlc3MgKnByb2cpCiB7CiAJc3RydWN0IHJiX3Jvb3QgKnJvb3Q7CiAJc3RydWN0IHJiX25vZGUgKm5leHQ7CkBAIC0xMTQ4LDYgKzExNTUsOSBAQAogCiAJCWlmICghbi0+ZmlsdGVyZWQpCiAJCQloaXN0c19fY2FsY19jb2xfbGVuKGhpc3RzLCBuKTsKKworCQlpZiAocHJvZykKKwkJCXVpX3Byb2dyZXNzX191cGRhdGUocHJvZywgMSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGlzdC5oIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuaAppbmRleCBkMGVmOWExLi40NmJkNTAzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGlzdC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmgKQEAgLTEyMSw3ICsxMjEsNyBAQAogCQkJICAgICAgc3RydWN0IGhpc3RzICpoaXN0cyk7CiB2b2lkIGhpc3RfZW50cnlfX2ZyZWUoc3RydWN0IGhpc3RfZW50cnkgKik7CiAKLXZvaWQgaGlzdHNfX291dHB1dF9yZXNvcnQoc3RydWN0IGhpc3RzICpoaXN0cyk7Cit2b2lkIGhpc3RzX19vdXRwdXRfcmVzb3J0KHN0cnVjdCBoaXN0cyAqaGlzdHMsIHN0cnVjdCB1aV9wcm9ncmVzcyAqcHJvZyk7CiB2b2lkIGhpc3RzX19jb2xsYXBzZV9yZXNvcnQoc3RydWN0IGhpc3RzICpoaXN0cywgc3RydWN0IHVpX3Byb2dyZXNzICpwcm9nKTsKIAogdm9pZCBoaXN0c19fZGVjYXlfZW50cmllcyhzdHJ1Y3QgaGlzdHMgKmhpc3RzLCBib29sIHphcF91c2VyLCBib29sIHphcF9rZXJuZWwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2h3ZWlnaHQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9od2VpZ2h0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMWQwZDAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2h3ZWlnaHQuYworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotLyoqCi0gKiBod2VpZ2h0TiAtIHJldHVybnMgdGhlIGhhbW1pbmcgd2VpZ2h0IG9mIGEgTi1iaXQgd29yZAotICogQHg6IHRoZSB3b3JkIHRvIHdlaWdoCi0gKgotICogVGhlIEhhbW1pbmcgV2VpZ2h0IG9mIGEgbnVtYmVyIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgYml0cyBzZXQgaW4gaXQuCi0gKi8KLQotdW5zaWduZWQgaW50IGh3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdykKLXsKLQl1bnNpZ25lZCBpbnQgcmVzID0gdyAtICgodyA+PiAxKSAmIDB4NTU1NTU1NTUpOwotCXJlcyA9IChyZXMgJiAweDMzMzMzMzMzKSArICgocmVzID4+IDIpICYgMHgzMzMzMzMzMyk7Ci0JcmVzID0gKHJlcyArIChyZXMgPj4gNCkpICYgMHgwRjBGMEYwRjsKLQlyZXMgPSByZXMgKyAocmVzID4+IDgpOwotCXJldHVybiAocmVzICsgKHJlcyA+PiAxNikpICYgMHgwMDAwMDBGRjsKLX0KLQotdW5zaWduZWQgbG9uZyBod2VpZ2h0NjQoX191NjQgdykKLXsKLSNpZiBCSVRTX1BFUl9MT05HID09IDMyCi0JcmV0dXJuIGh3ZWlnaHQzMigodW5zaWduZWQgaW50KSh3ID4+IDMyKSkgKyBod2VpZ2h0MzIoKHVuc2lnbmVkIGludCl3KTsKLSNlbGlmIEJJVFNfUEVSX0xPTkcgPT0gNjQKLQlfX3U2NCByZXMgPSB3IC0gKCh3ID4+IDEpICYgMHg1NTU1NTU1NTU1NTU1NTU1dWwpOwotCXJlcyA9IChyZXMgJiAweDMzMzMzMzMzMzMzMzMzMzN1bCkgKyAoKHJlcyA+PiAyKSAmIDB4MzMzMzMzMzMzMzMzMzMzM3VsKTsKLQlyZXMgPSAocmVzICsgKHJlcyA+PiA0KSkgJiAweDBGMEYwRjBGMEYwRjBGMEZ1bDsKLQlyZXMgPSByZXMgKyAocmVzID4+IDgpOwotCXJlcyA9IHJlcyArIChyZXMgPj4gMTYpOwotCXJldHVybiAocmVzICsgKHJlcyA+PiAzMikpICYgMHgwMDAwMDAwMDAwMDAwMEZGdWw7Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2FzbS9od2VpZ2h0LmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vaHdlaWdodC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmNmMjZkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2FzbS9od2VpZ2h0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNpZm5kZWYgUEVSRl9IV0VJR0hUX0gKLSNkZWZpbmUgUEVSRl9IV0VJR0hUX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci11bnNpZ25lZCBpbnQgaHdlaWdodDMyKHVuc2lnbmVkIGludCB3KTsKLXVuc2lnbmVkIGxvbmcgaHdlaWdodDY0KF9fdTY0IHcpOwotCi0jZW5kaWYgLyogUEVSRl9IV0VJR0hUX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmMgYi90b29scy9wZXJmL3V0aWwvbWFjaGluZS5jCmluZGV4IDk0ZGUzZTQuLjFiY2EzYTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuYwpAQCAtMzg5LDcgKzM4OSw2IEBACiAJaWYgKHRoICE9IE5VTEwpIHsKIAkJcmJfbGlua19ub2RlKCZ0aC0+cmJfbm9kZSwgcGFyZW50LCBwKTsKIAkJcmJfaW5zZXJ0X2NvbG9yKCZ0aC0+cmJfbm9kZSwgJm1hY2hpbmUtPnRocmVhZHMpOwotCQltYWNoaW5lLT5sYXN0X21hdGNoID0gdGg7CiAKIAkJLyoKIAkJICogV2UgaGF2ZSB0byBpbml0aWFsaXplIG1hcF9ncm91cHMgc2VwYXJhdGVseQpAQCAtNDAwLDkgKzM5OSwxMiBAQAogCQkgKiBsZWFkZXIgYW5kIHRoYXQgd291bGQgc2NyZXdlZCB0aGUgcmIgdHJlZS4KIAkJICovCiAJCWlmICh0aHJlYWRfX2luaXRfbWFwX2dyb3Vwcyh0aCwgbWFjaGluZSkpIHsKKwkJCXJiX2VyYXNlKCZ0aC0+cmJfbm9kZSwgJm1hY2hpbmUtPnRocmVhZHMpOwogCQkJdGhyZWFkX19kZWxldGUodGgpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KKworCQltYWNoaW5lLT5sYXN0X21hdGNoID0gdGg7CiAJfQogCiAJcmV0dXJuIHRoOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5oIGIvdG9vbHMvcGVyZi91dGlsL21hcC5oCmluZGV4IDY5NTFhOWQuLjBlNDI0MzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaAorKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmgKQEAgLTExNiw2ICsxMTYsMjIgQEAKICNkZWZpbmUgbWFwX19mb3JfZWFjaF9zeW1ib2wobWFwLCBwb3MsIG4pCVwKIAlkc29fX2Zvcl9lYWNoX3N5bWJvbChtYXAtPmRzbywgcG9zLCBuLCBtYXAtPnR5cGUpCiAKKy8qIG1hcF9fZm9yX2VhY2hfc3ltYm9sX3dpdGhfbmFtZSAtIGl0ZXJhdGUgb3ZlciB0aGUgc3ltYm9scyBpbiB0aGUgZ2l2ZW4gbWFwCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGhhdmUgdGhlIGdpdmVuIG5hbWUKKyAqCisgKiBAbWFwOiB0aGUgJ3N0cnVjdCBtYXAgKicgaW4gd2hpY2ggc3ltYm9scyBpdGVyZWF0ZWQKKyAqIEBzeW1fbmFtZTogdGhlIHN5bWJvbCBuYW1lCisgKiBAcG9zOiB0aGUgJ3N0cnVjdCBzeW1ib2wgKicgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IKKyAqIEBmaWx0ZXI6IHRvIHVzZSB3aGVuIGxvYWRpbmcgdGhlIERTTworICovCisjZGVmaW5lIF9fbWFwX19mb3JfZWFjaF9zeW1ib2xfYnlfbmFtZShtYXAsIHN5bV9uYW1lLCBwb3MsIGZpbHRlcikJXAorCWZvciAocG9zID0gbWFwX19maW5kX3N5bWJvbF9ieV9uYW1lKG1hcCwgc3ltX25hbWUsIGZpbHRlcik7CVwKKwkgICAgIHBvcyAmJiBzdHJjbXAocG9zLT5uYW1lLCBzeW1fbmFtZSkgPT0gMDsJCVwKKwkgICAgIHBvcyA9IHN5bWJvbF9fbmV4dF9ieV9uYW1lKHBvcykpCisKKyNkZWZpbmUgbWFwX19mb3JfZWFjaF9zeW1ib2xfYnlfbmFtZShtYXAsIHN5bV9uYW1lLCBwb3MpCQlcCisJX19tYXBfX2Zvcl9lYWNoX3N5bWJvbF9ieV9uYW1lKG1hcCwgc3ltX25hbWUsIChwb3MpLCBOVUxMKQorCiB0eXBlZGVmIGludCAoKnN5bWJvbF9maWx0ZXJfdCkoc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOwogCiB2b2lkIG1hcF9faW5pdChzdHJ1Y3QgbWFwICptYXAsIGVudW0gbWFwX3R5cGUgdHlwZSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKaW5kZXggMjhlYjE0MS4uOTE5OTM3ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBudGV2czsgaSsrKSB7Ci0JCWlmICh0ZXZzW2ldLnBvaW50LmFkZHJlc3MpIHsKKwkJaWYgKHRldnNbaV0ucG9pbnQuYWRkcmVzcyAmJiAhdGV2c1tpXS5wb2ludC5yZXRwcm9iZSkgewogCQkJdG1wID0gc3RyZHVwKHJlbG9jX3N5bS0+bmFtZSk7CiAJCQlpZiAoIXRtcCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ5NSw5ICs0OTUsMTEgQEAKIAl9CiAKIAlpZiAobnRldnMgPT0gMCkJewkvKiBObyBlcnJvciBidXQgZmFpbGVkIHRvIGZpbmQgcHJvYmUgcG9pbnQuICovCi0JCXByX3dhcm5pbmcoIlByb2JlIHBvaW50ICclcycgbm90IGZvdW5kLlxuIiwKKwkJcHJfd2FybmluZygiUHJvYmUgcG9pbnQgJyVzJyBub3QgZm91bmQgaW4gZGVidWdpbmZvLlxuIiwKIAkJCSAgIHN5bnRoZXNpemVfcGVyZl9wcm9iZV9wb2ludCgmcGV2LT5wb2ludCkpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJaWYgKG5lZWRfZHdhcmYpCisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0dXJuIDA7CiAJfQogCS8qIEVycm9yIHBhdGggOiBudGV2cyA8IDAgKi8KIAlwcl9kZWJ1ZygiQW4gZXJyb3Igb2NjdXJyZWQgaW4gZGVidWdpbmZvIGFuYWx5c2lzICglZCkuXG4iLCBudGV2cyk7CkBAIC0yMDUwLDkgKzIwNTIsMTEgQEAKIAlwcl9kZWJ1ZygiV3JpdGluZyBldmVudDogJXNcbiIsIGJ1Zik7CiAJaWYgKCFwcm9iZV9ldmVudF9kcnlfcnVuKSB7CiAJCXJldCA9IHdyaXRlKGZkLCBidWYsIHN0cmxlbihidWYpKTsKLQkJaWYgKHJldCA8PSAwKQorCQlpZiAocmV0IDw9IDApIHsKKwkJCXJldCA9IC1lcnJubzsKIAkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byB3cml0ZSBldmVudDogJXNcbiIsCiAJCQkJICAgc3RyZXJyb3JfcihlcnJubywgc2J1Ziwgc2l6ZW9mKHNidWYpKSk7CisJCX0KIAl9CiAJZnJlZShidWYpOwogCXJldHVybiByZXQ7CkBAIC0yMTg5LDE4ICsyMTkzLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGNoYXIgKmxvb2tpbmdfZnVuY3Rpb25fbmFtZTsKLXN0YXRpYyBpbnQgbnVtX21hdGNoZWRfZnVuY3Rpb25zOwotCi1zdGF0aWMgaW50IHByb2JlX2Z1bmN0aW9uX2ZpbHRlcihzdHJ1Y3QgbWFwICptYXAgX19tYXliZV91bnVzZWQsCi0JCQkJICAgICAgc3RydWN0IHN5bWJvbCAqc3ltKQorc3RhdGljIGludCBmaW5kX3Byb2JlX2Z1bmN0aW9ucyhzdHJ1Y3QgbWFwICptYXAsIGNoYXIgKm5hbWUpCiB7Ci0JaWYgKChzeW0tPmJpbmRpbmcgPT0gU1RCX0dMT0JBTCB8fCBzeW0tPmJpbmRpbmcgPT0gU1RCX0xPQ0FMKSAmJgotCSAgICBzdHJjbXAobG9va2luZ19mdW5jdGlvbl9uYW1lLCBzeW0tPm5hbWUpID09IDApIHsKLQkJbnVtX21hdGNoZWRfZnVuY3Rpb25zKys7Ci0JCXJldHVybiAwOworCWludCBmb3VuZCA9IDA7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCisJbWFwX19mb3JfZWFjaF9zeW1ib2xfYnlfbmFtZShtYXAsIG5hbWUsIHN5bSkgeworCQlpZiAoc3ltLT5iaW5kaW5nID09IFNUQl9HTE9CQUwgfHwgc3ltLT5iaW5kaW5nID09IFNUQl9MT0NBTCkKKwkJCWZvdW5kKys7CiAJfQotCXJldHVybiAxOworCisJcmV0dXJuIGZvdW5kOwogfQogCiAjZGVmaW5lIHN0cmR1cF9vcl9nb3RvKHN0ciwgbGFiZWwpCVwKQEAgLTIyMTgsMTAgKzIyMjEsMTAgQEAKIAlzdHJ1Y3Qga21hcCAqa21hcCA9IE5VTEw7CiAJc3RydWN0IHJlZl9yZWxvY19zeW0gKnJlbG9jX3N5bSA9IE5VTEw7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCByYl9ub2RlICpuZDsKIAlzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKnRldjsKIAlzdHJ1Y3QgcGVyZl9wcm9iZV9wb2ludCAqcHAgPSAmcGV2LT5wb2ludDsKIAlzdHJ1Y3QgcHJvYmVfdHJhY2VfcG9pbnQgKnRwOworCWludCBudW1fbWF0Y2hlZF9mdW5jdGlvbnM7CiAJaW50IHJldCwgaTsKIAogCS8qIEluaXQgbWFwcyBvZiBnaXZlbiBleGVjdXRhYmxlIG9yIGtlcm5lbCAqLwpAQCAtMjIzOCwxMCArMjI0MSw4IEBACiAJICogTG9hZCBtYXRjaGVkIHN5bWJvbHM6IFNpbmNlIHRoZSBkaWZmZXJlbnQgbG9jYWwgc3ltYm9scyBtYXkgaGF2ZQogCSAqIHNhbWUgbmFtZSBidXQgZGlmZmVyZW50IGFkZHJlc3NlcywgdGhpcyBsaXN0cyBhbGwgdGhlIHN5bWJvbHMuCiAJICovCi0JbnVtX21hdGNoZWRfZnVuY3Rpb25zID0gMDsKLQlsb29raW5nX2Z1bmN0aW9uX25hbWUgPSBwcC0+ZnVuY3Rpb247Ci0JcmV0ID0gbWFwX19sb2FkKG1hcCwgcHJvYmVfZnVuY3Rpb25fZmlsdGVyKTsKLQlpZiAocmV0IHx8IG51bV9tYXRjaGVkX2Z1bmN0aW9ucyA9PSAwKSB7CisJbnVtX21hdGNoZWRfZnVuY3Rpb25zID0gZmluZF9wcm9iZV9mdW5jdGlvbnMobWFwLCBwcC0+ZnVuY3Rpb24pOworCWlmIChudW1fbWF0Y2hlZF9mdW5jdGlvbnMgPT0gMCkgewogCQlwcl9lcnIoIkZhaWxlZCB0byBmaW5kIHN5bWJvbCAlcyBpbiAlc1xuIiwgcHAtPmZ1bmN0aW9uLAogCQkJdGFyZ2V0ID8gOiAia2VybmVsIik7CiAJCXJldCA9IC1FTk9FTlQ7CkBAIC0yMjUzLDcgKzIyNTQsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIXBldi0+dXByb2JlcykgeworCWlmICghcGV2LT51cHJvYmVzICYmICFwcC0+cmV0cHJvYmUpIHsKIAkJa21hcCA9IG1hcF9fa21hcChtYXApOwogCQlyZWxvY19zeW0gPSBrbWFwLT5yZWZfcmVsb2Nfc3ltOwogCQlpZiAoIXJlbG9jX3N5bSkgewpAQCAtMjI3MSw3ICsyMjcyLDggQEAKIAl9CiAKIAlyZXQgPSAwOwotCW1hcF9fZm9yX2VhY2hfc3ltYm9sKG1hcCwgc3ltLCBuZCkgeworCisJbWFwX19mb3JfZWFjaF9zeW1ib2xfYnlfbmFtZShtYXAsIHBwLT5mdW5jdGlvbiwgc3ltKSB7CiAJCXRldiA9ICgqdGV2cykgKyByZXQ7CiAJCXRwID0gJnRldi0+cG9pbnQ7CiAJCWlmIChyZXQgPT0gbnVtX21hdGNoZWRfZnVuY3Rpb25zKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKaW5kZXggYzc5MThmOC4uYjUyNDdkNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwpAQCAtOTg5LDggKzk4OSwyNCBAQAogCWludCByZXQgPSAwOwogCiAjaWYgX0VMRlVUSUxTX1BSRVJFUSgwLCAxNDIpCisJRWxmICplbGY7CisJR0VsZl9FaGRyIGVoZHI7CisJR0VsZl9TaGRyIHNoZHI7CisKIAkvKiBHZXQgdGhlIGNhbGwgZnJhbWUgaW5mb3JtYXRpb24gZnJvbSB0aGlzIGR3YXJmICovCi0JcGYtPmNmaSA9IGR3YXJmX2dldGNmaV9lbGYoZHdhcmZfZ2V0ZWxmKGRiZy0+ZGJnKSk7CisJZWxmID0gZHdhcmZfZ2V0ZWxmKGRiZy0+ZGJnKTsKKwlpZiAoZWxmID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGdlbGZfZ2V0ZWhkcihlbGYsICZlaGRyKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlbGZfc2VjdGlvbl9ieV9uYW1lKGVsZiwgJmVoZHIsICZzaGRyLCAiLmVoX2ZyYW1lIiwgTlVMTCkgJiYKKwkgICAgc2hkci5zaF90eXBlID09IFNIVF9QUk9HQklUUykgeworCQlwZi0+Y2ZpID0gZHdhcmZfZ2V0Y2ZpX2VsZihlbGYpOworCX0gZWxzZSB7CisJCXBmLT5jZmkgPSBkd2FyZl9nZXRjZmkoZGJnLT5kYmcpOworCX0KICNlbmRpZgogCiAJb2ZmID0gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9weXRob24tZXh0LXNvdXJjZXMgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLWV4dC1zb3VyY2VzCmluZGV4IDE2YTQ3NWEuLjZjNmE2OTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9weXRob24tZXh0LXNvdXJjZXMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi1leHQtc291cmNlcwpAQCAtMTAsNyArMTAsNyBAQAogdXRpbC9ldmxpc3QuYwogdXRpbC9ldnNlbC5jCiB1dGlsL2NwdW1hcC5jCi11dGlsL2h3ZWlnaHQuYworLi4vLi4vbGliL2h3ZWlnaHQuYwogdXRpbC90aHJlYWRfbWFwLmMKIHV0aWwvdXRpbC5jCiB1dGlsL3h5YXJyYXkuYwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCmluZGV4IGMyNGM1YjguLmExOTQ3MDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKQEAgLTM5Niw2ICszOTYsNyBAQAogCQkJCQkgICAgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKKwlzdHJ1Y3Qgc3ltYm9sX25hbWVfcmJfbm9kZSAqczsKIAogCWlmIChzeW1ib2xzID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwpAQCAtNDAzLDcgKzQwNCw2IEBACiAJbiA9IHN5bWJvbHMtPnJiX25vZGU7CiAKIAl3aGlsZSAobikgewotCQlzdHJ1Y3Qgc3ltYm9sX25hbWVfcmJfbm9kZSAqczsKIAkJaW50IGNtcDsKIAogCQlzID0gcmJfZW50cnkobiwgc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUsIHJiX25vZGUpOwpAQCAtNDE0LDEwICs0MTQsMjQgQEAKIAkJZWxzZSBpZiAoY21wID4gMCkKIAkJCW4gPSBuLT5yYl9yaWdodDsKIAkJZWxzZQotCQkJcmV0dXJuICZzLT5zeW07CisJCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gTlVMTDsKKwlpZiAobiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHJldHVybiBmaXJzdCBzeW1ib2wgdGhhdCBoYXMgc2FtZSBuYW1lIChpZiBhbnkpICovCisJZm9yIChuID0gcmJfcHJldihuKTsgbjsgbiA9IHJiX3ByZXYobikpIHsKKwkJc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUgKnRtcDsKKworCQl0bXAgPSByYl9lbnRyeShuLCBzdHJ1Y3Qgc3ltYm9sX25hbWVfcmJfbm9kZSwgcmJfbm9kZSk7CisJCWlmIChzdHJjbXAodG1wLT5zeW0ubmFtZSwgcy0+c3ltLm5hbWUpKQorCQkJYnJlYWs7CisKKwkJcyA9IHRtcDsKKwl9CisKKwlyZXR1cm4gJnMtPnN5bTsKIH0KIAogc3RydWN0IHN5bWJvbCAqZHNvX19maW5kX3N5bWJvbChzdHJ1Y3QgZHNvICpkc28sCkBAIC00MzYsNiArNDUwLDE3IEBACiAJcmV0dXJuIHN5bWJvbHNfX25leHQoc3ltKTsKIH0KIAorc3RydWN0IHN5bWJvbCAqc3ltYm9sX19uZXh0X2J5X25hbWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlICpzID0gY29udGFpbmVyX29mKHN5bSwgc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUsIHN5bSk7CisJc3RydWN0IHJiX25vZGUgKm4gPSByYl9uZXh0KCZzLT5yYl9ub2RlKTsKKworCXJldHVybiBuID8gJnJiX2VudHJ5KG4sIHN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlLCByYl9ub2RlKS0+c3ltIDogTlVMTDsKK30KKworIC8qCisgICogVGV0dXJucyBmaXJzdCBzeW1ib2wgdGhhdCBtYXRjaGVkIHdpdGggQG5hbWUuCisgICovCiBzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUsCiAJCQkJCWNvbnN0IGNoYXIgKm5hbWUpCiB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggOWQ2MDJlOS4uMTY1MGRjYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtMjMxLDYgKzIzMSw3IEBACiAJCQkJdTY0IGFkZHIpOwogc3RydWN0IHN5bWJvbCAqZHNvX19maW5kX3N5bWJvbF9ieV9uYW1lKHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlLAogCQkJCQljb25zdCBjaGFyICpuYW1lKTsKK3N0cnVjdCBzeW1ib2wgKnN5bWJvbF9fbmV4dF9ieV9uYW1lKHN0cnVjdCBzeW1ib2wgKnN5bSk7CiAKIHN0cnVjdCBzeW1ib2wgKmRzb19fZmlyc3Rfc3ltYm9sKHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKTsKIHN0cnVjdCBzeW1ib2wgKmRzb19fbmV4dF9zeW1ib2woc3RydWN0IHN5bWJvbCAqc3ltKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGlidW53aW5kLmMgYi90b29scy9wZXJmL3V0aWwvdW53aW5kLWxpYnVud2luZC5jCmluZGV4IDM3MTIxOWEuLjZlZGY1MzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGlidW53aW5kLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJ1bndpbmQuYwpAQCAtMTg1LDYgKzE4NSwyOCBAQAogCXJldHVybiBvZmZzZXQ7CiB9CiAKKyNpZm5kZWYgTk9fTElCVU5XSU5EX0RFQlVHX0ZSQU1FCitzdGF0aWMgaW50IGVsZl9pc19leGVjKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlFbGYgKmVsZjsKKwlHRWxmX0VoZHIgZWhkcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWlmIChlbGYgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJaWYgKGdlbGZfZ2V0ZWhkcihlbGYsICZlaGRyKSA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJldHZhbCA9IChlaGRyLmVfdHlwZSA9PSBFVF9FWEVDKTsKKworb3V0OgorCWVsZl9lbmQoZWxmKTsKKwlwcl9kZWJ1ZygidW53aW5kOiBlbGZfaXNfZXhlYyglcyk6ICVkXG4iLCBuYW1lLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisjZW5kaWYKKwogc3RydWN0IHRhYmxlX2VudHJ5IHsKIAl1MzIgc3RhcnRfaXBfb2Zmc2V0OwogCXUzMiBmZGVfb2Zmc2V0OwpAQCAtMzIyLDggKzM0NCwxMiBAQAogI2lmbmRlZiBOT19MSUJVTldJTkRfREVCVUdfRlJBTUUKIAkvKiBDaGVjayB0aGUgLmRlYnVnX2ZyYW1lIHNlY3Rpb24gZm9yIHVud2luZGluZyBpbmZvICovCiAJaWYgKCFyZWFkX3Vud2luZF9zcGVjX2RlYnVnX2ZyYW1lKG1hcC0+ZHNvLCB1aS0+bWFjaGluZSwgJnNlZ2Jhc2UpKSB7CisJCWludCBmZCA9IGRzb19fZGF0YV9mZChtYXAtPmRzbywgdWktPm1hY2hpbmUpOworCQlpbnQgaXNfZXhlYyA9IGVsZl9pc19leGVjKGZkLCBtYXAtPmRzby0+bmFtZSk7CisJCXVud193b3JkX3QgYmFzZSA9IGlzX2V4ZWMgPyAwIDogbWFwLT5zdGFydDsKKwogCQltZW1zZXQoJmRpLCAwLCBzaXplb2YoZGkpKTsKLQkJaWYgKGR3YXJmX2ZpbmRfZGVidWdfZnJhbWUoMCwgJmRpLCBpcCwgMCwgbWFwLT5kc28tPm5hbWUsCisJCWlmIChkd2FyZl9maW5kX2RlYnVnX2ZyYW1lKDAsICZkaSwgaXAsIGJhc2UsIG1hcC0+ZHNvLT5uYW1lLAogCQkJCQkgICBtYXAtPnN0YXJ0LCBtYXAtPmVuZCkpCiAJCQlyZXR1cm4gZHdhcmZfc2VhcmNoX3Vud2luZF90YWJsZShhcywgaXAsICZkaSwgcGksCiAJCQkJCQkJIG5lZWRfdW53aW5kX2luZm8sIGFyZyk7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXIuYwppbmRleCA3Y2RjZjg4Li45ZWE5MTQzIDEwMDY0NAotLS0gYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci5jCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogCX0KIAogCWdldF9jcHVfaW5mbygwLCAmY3B1cG93ZXJfY3B1X2luZm8pOwotCXJ1bl9hc19yb290ID0gIWdldHVpZCgpOworCXJ1bl9hc19yb290ID0gIWdldGV1aWQoKTsKIAlpZiAocnVuX2FzX3Jvb3QpIHsKIAkJcmV0ID0gdW5hbWUoJnV0cyk7CiAJCWlmICghcmV0ICYmICFzdHJjbXAodXRzLm1hY2hpbmUsICJ4ODZfNjQiKSAmJgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9zeXNmcy5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9zeXNmcy5jCmluZGV4IDA5YWZlNWQuLjRlOGZlMmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuYworKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmMKQEAgLTM2MSw3ICszNjEsNyBAQAogCiAJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVICJjcHVpZGxlIik7CiAJaWYgKHN0YXQoZmlsZSwgJnN0YXRidWYpICE9IDAgfHwgIVNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiAwOwogCiAJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVICJjcHUldS9jcHVpZGxlL3N0YXRlMCIsIGNwdSk7CiAJaWYgKHN0YXQoZmlsZSwgJnN0YXRidWYpICE9IDAgfHwgIVNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvZXhlY3ZlYXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvZXhlY3ZlYXQuYwppbmRleCAzM2E1YzA2Li5lMjM4Yzk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2V4ZWN2ZWF0LmMKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9leGVjdmVhdC5jCkBAIC02Miw3ICs2Miw3IEBACiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfZXhlY3ZlYXRfaW52b2tlZF9yYyhpbnQgZmQsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncywKLQkJCQkgICAgIGludCBleHBlY3RlZF9yYykKKwkJCQkgICAgIGludCBleHBlY3RlZF9yYywgaW50IGV4cGVjdGVkX3JjMikKIHsKIAlpbnQgc3RhdHVzOwogCWludCByYzsKQEAgLTk4LDkgKzk4LDEwIEBACiAJCQljaGlsZCwgc3RhdHVzKTsKIAkJcmV0dXJuIDE7CiAJfQotCWlmIChXRVhJVFNUQVRVUyhzdGF0dXMpICE9IGV4cGVjdGVkX3JjKSB7Ci0JCXByaW50ZigiW0ZBSUxdIChjaGlsZCAlZCBleGl0ZWQgd2l0aCAlZCBub3QgJWQpXG4iLAotCQkJY2hpbGQsIFdFWElUU1RBVFVTKHN0YXR1cyksIGV4cGVjdGVkX3JjKTsKKwlpZiAoKFdFWElUU1RBVFVTKHN0YXR1cykgIT0gZXhwZWN0ZWRfcmMpICYmCisJICAgIChXRVhJVFNUQVRVUyhzdGF0dXMpICE9IGV4cGVjdGVkX3JjMikpIHsKKwkJcHJpbnRmKCJbRkFJTF0gKGNoaWxkICVkIGV4aXRlZCB3aXRoICVkIG5vdCAlZCBub3IgJWQpXG4iLAorCQkJY2hpbGQsIFdFWElUU1RBVFVTKHN0YXR1cyksIGV4cGVjdGVkX3JjLCBleHBlY3RlZF9yYzIpOwogCQlyZXR1cm4gMTsKIAl9CiAJcHJpbnRmKCJbT0tdXG4iKTsKQEAgLTEwOSw3ICsxMTAsNyBAQAogCiBzdGF0aWMgaW50IGNoZWNrX2V4ZWN2ZWF0KGludCBmZCwgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKQogewotCXJldHVybiBjaGVja19leGVjdmVhdF9pbnZva2VkX3JjKGZkLCBwYXRoLCBmbGFncywgOTkpOworCXJldHVybiBjaGVja19leGVjdmVhdF9pbnZva2VkX3JjKGZkLCBwYXRoLCBmbGFncywgOTksIDk5KTsKIH0KIAogc3RhdGljIGNoYXIgKmNvbmNhdChjb25zdCBjaGFyICpsZWZ0LCBjb25zdCBjaGFyICpyaWdodCkKQEAgLTE3OSwxMSArMTgwLDExIEBACiAJICovCiAJZmQgPSBvcGVuKGxvbmdwYXRoLCBPX1JET05MWSk7CiAJaWYgKGZkID4gMCkgewotCQlwcmludGYoIkludm9rZSBjb3B5IG9mICclcycgdmlhIGZpbGVuYW1lIG9mIGxlbmd0aCAlbHU6XG4iLAorCQlwcmludGYoIkludm9rZSBjb3B5IG9mICclcycgdmlhIGZpbGVuYW1lIG9mIGxlbmd0aCAlenU6XG4iLAogCQkJc3JjLCBzdHJsZW4obG9uZ3BhdGgpKTsKIAkJZmFpbCArPSBjaGVja19leGVjdmVhdChmZCwgIiIsIEFUX0VNUFRZX1BBVEgpOwogCX0gZWxzZSB7Ci0JCXByaW50ZigiRmFpbGVkIHRvIG9wZW4gbGVuZ3RoICVsdSBmaWxlbmFtZSwgZXJybm89JWQgKCVzKVxuIiwKKwkJcHJpbnRmKCJGYWlsZWQgdG8gb3BlbiBsZW5ndGggJXp1IGZpbGVuYW1lLCBlcnJubz0lZCAoJXMpXG4iLAogCQkJc3RybGVuKGxvbmdwYXRoKSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CiAJCWZhaWwrKzsKIAl9CkBAIC0xOTIsOSArMTkzLDE1IEBACiAJICogRXhlY3V0ZSBhcyBhIGxvbmcgcGF0aG5hbWUgcmVsYXRpdmUgdG8gIi4iLiAgSWYgdGhpcyBpcyBhIHNjcmlwdCwKIAkgKiB0aGUgaW50ZXJwcmV0ZXIgd2lsbCBsYXVuY2ggYnV0IGZhaWwgdG8gb3BlbiB0aGUgc2NyaXB0IGJlY2F1c2UgaXRzCiAJICogbmFtZSAoIi9kZXYvZmQvNS94eHguLi4uIikgaXMgYmlnZ2VyIHRoYW4gUEFUSF9NQVguCisJICoKKwkgKiBUaGUgZmFpbHVyZSBjb2RlIGlzIHVzdWFsbHkgMTI3IChQT1NJWDogIklmIGEgY29tbWFuZCBpcyBub3QgZm91bmQsCisJICogdGhlIGV4aXQgc3RhdHVzIHNoYWxsIGJlIDEyNy4iKSwgYnV0IHNvbWUgc3lzdGVtcyBnaXZlIDEyNiAoUE9TSVg6CisJICogIklmIHRoZSBjb21tYW5kIG5hbWUgaXMgZm91bmQsIGJ1dCBpdCBpcyBub3QgYW4gZXhlY3V0YWJsZSB1dGlsaXR5LAorCSAqIHRoZSBleGl0IHN0YXR1cyBzaGFsbCBiZSAxMjYuIiksIHNvIGFsbG93IGVpdGhlci4KIAkgKi8KIAlpZiAoaXNfc2NyaXB0KQotCQlmYWlsICs9IGNoZWNrX2V4ZWN2ZWF0X2ludm9rZWRfcmMoZG90X2RmZCwgbG9uZ3BhdGgsIDAsIDEyNyk7CisJCWZhaWwgKz0gY2hlY2tfZXhlY3ZlYXRfaW52b2tlZF9yYyhkb3RfZGZkLCBsb25ncGF0aCwgMCwKKwkJCQkJCSAgMTI3LCAxMjYpOwogCWVsc2UKIAkJZmFpbCArPSBjaGVja19leGVjdmVhdChkb3RfZGZkLCBsb25ncGF0aCwgMCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21xdWV1ZS9tcV9wZXJmX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tcXVldWUvbXFfcGVyZl90ZXN0cy5jCmluZGV4IDk0ZGFlNjUuLjg1MTllOWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21xdWV1ZS9tcV9wZXJmX3Rlc3RzLmMKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbXF1ZXVlL21xX3BlcmZfdGVzdHMuYwpAQCAtNTM2LDEwICs1MzYsOSBAQAogewogCXN0cnVjdCBtcV9hdHRyIGF0dHI7CiAJY2hhciAqb3B0aW9uLCAqbmV4dF9vcHRpb247Ci0JaW50IGksIGNwdTsKKwlpbnQgaSwgY3B1LCByYzsKIAlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwogCXBvcHRDb250ZXh0IHBvcHRfY29udGV4dDsKLQljaGFyIHJjOwogCXZvaWQgKnJldHZhbDsKIAogCW1haW5fdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92bS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZtL01ha2VmaWxlCmluZGV4IDRjNGIxZjYuLjA3NzgyOGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZtL01ha2VmaWxlCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZtL01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogCiBhbGw6ICQoQklOQVJJRVMpCiAlOiAlLmMKLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4KKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gLWxydAogCiBydW5fdGVzdHM6IGFsbAogCUAvYmluL3NoIC4vcnVuX3ZtdGVzdHMgfHwgKGVjaG8gInZtdGVzdHM6IFtGQUlMXSI7IGV4aXQgMSkKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IGY1MjgzNDMuLjFjYzZlMmUgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtNjcxLDYgKzY3MSw3IEBACiAKIAlXQVJOX09OKG1zbG90c1tpXS5pZCAhPSBpZCk7CiAJaWYgKCFuZXctPm5wYWdlcykgeworCQlXQVJOX09OKCFtc2xvdHNbaV0ubnBhZ2VzKTsKIAkJbmV3LT5iYXNlX2dmbiA9IDA7CiAJCWlmIChtc2xvdHNbaV0ubnBhZ2VzKQogCQkJc2xvdHMtPnVzZWRfc2xvdHMtLTsKQEAgLTY4NywxMiArNjg4LDI1IEBACiAJCXNsb3RzLT5pZF90b19pbmRleFttc2xvdHNbaV0uaWRdID0gaTsKIAkJaSsrOwogCX0KLQl3aGlsZSAoaSA+IDAgJiYKLQkgICAgICAgbmV3LT5iYXNlX2dmbiA+IG1zbG90c1tpIC0gMV0uYmFzZV9nZm4pIHsKLQkJbXNsb3RzW2ldID0gbXNsb3RzW2kgLSAxXTsKLQkJc2xvdHMtPmlkX3RvX2luZGV4W21zbG90c1tpXS5pZF0gPSBpOwotCQlpLS07Ci0JfQorCisJLyoKKwkgKiBUaGUgIj49IiBpcyBuZWVkZWQgd2hlbiBjcmVhdGluZyBhIHNsb3Qgd2l0aCBiYXNlX2dmbiA9PSAwLAorCSAqIHNvIHRoYXQgaXQgbW92ZXMgYmVmb3JlIGFsbCB0aG9zZSB3aXRoIGJhc2VfZ2ZuID09IG5wYWdlcyA9PSAwLgorCSAqCisJICogT24gdGhlIG90aGVyIGhhbmQsIGlmIG5ldy0+bnBhZ2VzIGlzIHplcm8sIHRoZSBhYm92ZSBsb29wIGhhcworCSAqIGFscmVhZHkgbGVmdCBpIHBvaW50aW5nIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGVtcHR5IHBhcnQgb2YKKwkgKiBtc2xvdHMsIGFuZCB0aGUgIj49IiB3b3VsZCBtb3ZlIHRoZSBob2xlIGJhY2t3YXJkcyBpbiB0aGlzCisJICogY2FzZS0tLXdoaWNoIGlzIHdyb25nLiAgU28gc2tpcCB0aGUgbG9vcCB3aGVuIGRlbGV0aW5nIGEgc2xvdC4KKwkgKi8KKwlpZiAobmV3LT5ucGFnZXMpIHsKKwkJd2hpbGUgKGkgPiAwICYmCisJCSAgICAgICBuZXctPmJhc2VfZ2ZuID49IG1zbG90c1tpIC0gMV0uYmFzZV9nZm4pIHsKKwkJCW1zbG90c1tpXSA9IG1zbG90c1tpIC0gMV07CisJCQlzbG90cy0+aWRfdG9faW5kZXhbbXNsb3RzW2ldLmlkXSA9IGk7CisJCQlpLS07CisJCX0KKwl9IGVsc2UKKwkJV0FSTl9PTl9PTkNFKGkgIT0gc2xvdHMtPnVzZWRfc2xvdHMpOwogCiAJbXNsb3RzW2ldID0gKm5ldzsKIAlzbG90cy0+aWRfdG9faW5kZXhbbXNsb3RzW2ldLmlkXSA9IGk7Cg==