ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGE3ZWE4ZTM0My4uZDc4MzU5ZiAxMDA2NDQKLS0tIGEvQ1JFRElUUworKysgYi9DUkVESVRTCkBAIC01MTgsNiArNTE4LDE0IEBACiBFOiB6YWJAemFiYm8ubmV0CiBEOiBtYWVzdHJvIHBjaSBzb3VuZAogCitNOiBEYXZpZCBCcm93bmVsbAorRDogS2VybmVsIGVuZ2luZWVyLCBtZW50b3IsIGFuZCBmcmllbmQuICBNYWludGFpbmVkIFVTQiBFSENJIGFuZAorRDogZ2FkZ2V0IGxheWVycywgU1BJIHN1YnN5c3RlbSwgR1BJTyBzdWJzeXN0ZW0sIGFuZCBtb3JlIHRoYW4gYSBmZXcKK0Q6IGRldmljZSBkcml2ZXJzLiAgSGlzIGVuY291cmFnZW1lbnQgYWxzbyBoZWxwZWQgbWFueSBlbmdpbmVlcnMgZ2V0CitEOiBzdGFydGVkIHdvcmtpbmcgb24gdGhlIExpbnV4IGtlcm5lbC4gIERhdmlkIHBhc3NlZCBhd2F5IGluIGVhcmx5CitEOiAyMDExLCBhbmQgd2lsbCBiZSBncmVhdGx5IG1pc3NlZC4KK1c6IGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDExLzQvNS8zNgorCiBOOiBHYXJ5IEJydWJha2VyCiBFOiB4YXZ5ZXJAaXgubmV0Y29tLmNvbQogRDogVVNCIFNlcmlhbCBFbXBlZyBFbXBlZy1jYXIgTWFyayBJL0lJIERyaXZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1iYWNrbGlnaHQtZHJpdmVyLWFkcDg4NzAgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWJhY2tsaWdodC1kcml2ZXItYWRwODg3MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTExZGJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1iYWNrbGlnaHQtZHJpdmVyLWFkcDg4NzAKQEAgLTAsMCArMSw1NiBAQAorV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+LzxhbWJpZW50IGxpZ2h0IHpvbmU+X21heAorV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+L2wxX2RheWxpZ2h0X21heAorV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+L2wyX2JyaWdodF9tYXgKK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9sM19vZmZpY2VfbWF4CitXaGF0OgkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vbDRfaW5kb29yX21heAorV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+L2w1X2RhcmtfbWF4CitEYXRlOgkJTWFpIDIwMTEKK0tlcm5lbFZlcnNpb246CTIuNi40MAorQ29udGFjdDoJZGV2aWNlLWRyaXZlcnMtZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKK0Rlc2NyaXB0aW9uOgorCQlDb250cm9sIHRoZSBtYXhpbXVtIGJyaWdodG5lc3MgZm9yIDxhbWJpZW50IGxpZ2h0IHpvbmU+CisJCW9uIHRoaXMgPGJhY2tsaWdodD4uIFZhbHVlcyBhcmUgYmV0d2VlbiAwIGFuZCAxMjcuIFRoaXMgZmlsZQorCQl3aWxsIGFsc28gc2hvdyB0aGUgYnJpZ2h0bmVzcyBsZXZlbCBzdG9yZWQgZm9yIHRoaXMKKwkJPGFtYmllbnQgbGlnaHQgem9uZT4uCisKK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi88YW1iaWVudCBsaWdodCB6b25lPl9kaW0KK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9sMl9icmlnaHRfZGltCitXaGF0OgkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vbDNfb2ZmaWNlX2RpbQorV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+L2w0X2luZG9vcl9kaW0KK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9sNV9kYXJrX2RpbQorRGF0ZToJCU1haSAyMDExCitLZXJuZWxWZXJzaW9uOgkyLjYuNDAKK0NvbnRhY3Q6CWRldmljZS1kcml2ZXJzLWRldmVsQGJsYWNrZmluLnVjbGludXgub3JnCitEZXNjcmlwdGlvbjoKKwkJQ29udHJvbCB0aGUgZGltIGJyaWdodG5lc3MgZm9yIDxhbWJpZW50IGxpZ2h0IHpvbmU+CisJCW9uIHRoaXMgPGJhY2tsaWdodD4uIFZhbHVlcyBhcmUgYmV0d2VlbiAwIGFuZCAxMjcsIHR5cGljYWxseQorCQlzZXQgdG8gMC4gRnVsbCBvZmYgd2hlbiB0aGUgYmFja2xpZ2h0IGlzIGRpc2FibGVkLgorCQlUaGlzIGZpbGUgd2lsbCBhbHNvIHNob3cgdGhlIGRpbSBicmlnaHRuZXNzIGxldmVsIHN0b3JlZCBmb3IKKwkJdGhpcyA8YW1iaWVudCBsaWdodCB6b25lPi4KKworV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+L2FtYmllbnRfbGlnaHRfbGV2ZWwKK0RhdGU6CQlNYWkgMjAxMQorS2VybmVsVmVyc2lvbjoJMi42LjQwCitDb250YWN0OglkZXZpY2UtZHJpdmVycy1kZXZlbEBibGFja2Zpbi51Y2xpbnV4Lm9yZworRGVzY3JpcHRpb246CisJCUdldCBjb252ZXJzaW9uIHZhbHVlIG9mIHRoZSBsaWdodCBzZW5zb3IuCisJCVRoaXMgdmFsdWUgaXMgdXBkYXRlZCBldmVyeSA4MCBtcyAod2hlbiB0aGUgbGlnaHQgc2Vuc29yCisJCWlzIGVuYWJsZWQpLiBSZXR1cm5zIGludGVnZXIgYmV0d2VlbiAwIChkYXJrKSBhbmQKKwkJODAwMCAobWF4IGFtYmllbnQgYnJpZ2h0bmVzcykKKworV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+L2FtYmllbnRfbGlnaHRfem9uZQorRGF0ZToJCU1haSAyMDExCitLZXJuZWxWZXJzaW9uOgkyLjYuNDAKK0NvbnRhY3Q6CWRldmljZS1kcml2ZXJzLWRldmVsQGJsYWNrZmluLnVjbGludXgub3JnCitEZXNjcmlwdGlvbjoKKwkJR2V0L1NldCBjdXJyZW50IGFtYmllbnQgbGlnaHQgem9uZS4gUmVhZGluZyByZXR1cm5zCisJCWludGVnZXIgYmV0d2VlbiAxLi41ICgxID0gZGF5bGlnaHQsIDIgPSBicmlnaHQsIC4uLiwgNSA9IGRhcmspLgorCQlXcml0aW5nIGEgdmFsdWUgYmV0d2VlbiAxLi41IGZvcmNlcyB0aGUgYmFja2xpZ2h0IGNvbnRyb2xsZXIKKwkJdG8gZW50ZXIgdGhlIGNvcnJlc3BvbmRpbmcgYW1iaWVudCBsaWdodCB6b25lLgorCQlXcml0aW5nIDAgcmV0dXJucyB0byBub3JtYWwvYXV0b21hdGljIGFtYmllbnQgbGlnaHQgbGV2ZWwKKwkJb3BlcmF0aW9uLiBUaGUgYW1iaWVudCBsaWdodCBzZW5zaW5nIGZlYXR1cmUgb24gdGhlc2UgZGV2aWNlcworCQlpcyBhbiBleHRlbnNpb24gdG8gdGhlIEFQSSBkb2N1bWVudGVkIGluCisJCURvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1jbGFzcy1iYWNrbGlnaHQuCisJCUl0IGNhbiBiZSBlbmFibGVkIGJ5IHdyaXRpbmcgdGhlIHZhbHVlIHN0b3JlZCBpbgorCQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9tYXhfYnJpZ2h0bmVzcyB0bworCQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9icmlnaHRuZXNzLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9jZ3JvdXBzdGF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvY2dyb3Vwc3RhdHMudHh0CmluZGV4IGVkYTQwZmQuLmQxNmE5ODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9jZ3JvdXBzdGF0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL2Nncm91cHN0YXRzLnR4dApAQCAtMjEsNyArMjEsNyBAQAogVG8gZXh0cmFjdCBjZ3JvdXAgc3RhdGlzdGljcyBhIHV0aWxpdHkgdmVyeSBzaW1pbGFyIHRvIGdldGRlbGF5cy5jCiBoYXMgYmVlbiBkZXZlbG9wZWQsIHRoZSBzYW1wbGUgb3V0cHV0IG9mIHRoZSB1dGlsaXR5IGlzIHNob3duIGJlbG93CiAKLX4vYmFsYmlyL2Nncm91cHN0YXRzICMgLi9nZXRkZWxheXMgIC1DICIvY2dyb3VwL2EiCit+L2JhbGJpci9jZ3JvdXBzdGF0cyAjIC4vZ2V0ZGVsYXlzICAtQyAiL3N5cy9mcy9jZ3JvdXAvYSIKIHNsZWVwaW5nIDEsIGJsb2NrZWQgMCwgcnVubmluZyAxLCBzdG9wcGVkIDAsIHVuaW50ZXJydXB0aWJsZSAwCi1+L2JhbGJpci9jZ3JvdXBzdGF0cyAjIC4vZ2V0ZGVsYXlzICAtQyAiL2Nncm91cCIKK34vYmFsYmlyL2Nncm91cHN0YXRzICMgLi9nZXRkZWxheXMgIC1DICIvc3lzL2ZzL2Nncm91cCIKIHNsZWVwaW5nIDE1NSwgYmxvY2tlZCAwLCBydW5uaW5nIDEsIHN0b3BwZWQgMCwgdW5pbnRlcnJ1cHRpYmxlIDIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9ibGtpby1jb250cm9sbGVyLnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9ibGtpby1jb250cm9sbGVyLnR4dAppbmRleCA0NjUzNTFkLi5jZDQ1YzhlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvYmxraW8tY29udHJvbGxlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Jsa2lvLWNvbnRyb2xsZXIudHh0CkBAIC0yOCwxNiArMjgsMTkgQEAKIC0gRW5hYmxlIGdyb3VwIHNjaGVkdWxpbmcgaW4gQ0ZRCiAJQ09ORklHX0NGUV9HUk9VUF9JT1NDSEVEPXkKIAotLSBDb21waWxlIGFuZCBib290IGludG8ga2VybmVsIGFuZCBtb3VudCBJTyBjb250cm9sbGVyIChibGtpbykuCistIENvbXBpbGUgYW5kIGJvb3QgaW50byBrZXJuZWwgYW5kIG1vdW50IElPIGNvbnRyb2xsZXIgKGJsa2lvKTsgc2VlCisgIGNncm91cHMudHh0LCBXaHkgYXJlIGNncm91cHMgbmVlZGVkPy4KIAotCW1vdW50IC10IGNncm91cCAtbyBibGtpbyBub25lIC9jZ3JvdXAKKwltb3VudCAtdCB0bXBmcyBjZ3JvdXBfcm9vdCAvc3lzL2ZzL2Nncm91cAorCW1rZGlyIC9zeXMvZnMvY2dyb3VwL2Jsa2lvCisJbW91bnQgLXQgY2dyb3VwIC1vIGJsa2lvIG5vbmUgL3N5cy9mcy9jZ3JvdXAvYmxraW8KIAogLSBDcmVhdGUgdHdvIGNncm91cHMKLQlta2RpciAtcCAvY2dyb3VwL3Rlc3QxLyAvY2dyb3VwL3Rlc3QyCisJbWtkaXIgLXAgL3N5cy9mcy9jZ3JvdXAvYmxraW8vdGVzdDEvIC9zeXMvZnMvY2dyb3VwL2Jsa2lvL3Rlc3QyCiAKIC0gU2V0IHdlaWdodHMgb2YgZ3JvdXAgdGVzdDEgYW5kIHRlc3QyCi0JZWNobyAxMDAwID4gL2Nncm91cC90ZXN0MS9ibGtpby53ZWlnaHQKLQllY2hvIDUwMCA+IC9jZ3JvdXAvdGVzdDIvYmxraW8ud2VpZ2h0CisJZWNobyAxMDAwID4gL3N5cy9mcy9jZ3JvdXAvYmxraW8vdGVzdDEvYmxraW8ud2VpZ2h0CisJZWNobyA1MDAgPiAvc3lzL2ZzL2Nncm91cC9ibGtpby90ZXN0Mi9ibGtpby53ZWlnaHQKIAogLSBDcmVhdGUgdHdvIHNhbWUgc2l6ZSBmaWxlcyAoc2F5IDUxMk1CIGVhY2gpIG9uIHNhbWUgZGlzayAoZmlsZTEsIGZpbGUyKSBhbmQKICAgbGF1bmNoIHR3byBkZCB0aHJlYWRzIGluIGRpZmZlcmVudCBjZ3JvdXAgdG8gcmVhZCB0aG9zZSBmaWxlcy4KQEAgLTQ2LDEyICs0OSwxMiBAQAogCWVjaG8gMyA+IC9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcwogCiAJZGQgaWY9L21udC9zZGIvemVyb2ZpbGUxIG9mPS9kZXYvbnVsbCAmCi0JZWNobyAkISA+IC9jZ3JvdXAvdGVzdDEvdGFza3MKLQljYXQgL2Nncm91cC90ZXN0MS90YXNrcworCWVjaG8gJCEgPiAvc3lzL2ZzL2Nncm91cC9ibGtpby90ZXN0MS90YXNrcworCWNhdCAvc3lzL2ZzL2Nncm91cC9ibGtpby90ZXN0MS90YXNrcwogCiAJZGQgaWY9L21udC9zZGIvemVyb2ZpbGUyIG9mPS9kZXYvbnVsbCAmCi0JZWNobyAkISA+IC9jZ3JvdXAvdGVzdDIvdGFza3MKLQljYXQgL2Nncm91cC90ZXN0Mi90YXNrcworCWVjaG8gJCEgPiAvc3lzL2ZzL2Nncm91cC9ibGtpby90ZXN0Mi90YXNrcworCWNhdCAvc3lzL2ZzL2Nncm91cC9ibGtpby90ZXN0Mi90YXNrcwogCiAtIEF0IG1hY3JvIGxldmVsLCBmaXJzdCBkZCBzaG91bGQgZmluaXNoIGZpcnN0LiBUbyBnZXQgbW9yZSBwcmVjaXNlIGRhdGEsIGtlZXAKICAgb24gbG9va2luZyBhdCAod2l0aCB0aGUgaGVscCBvZiBzY3JpcHQpLCBhdCBibGtpby5kaXNrX3RpbWUgYW5kCkBAIC02OCwxMyArNzEsMTMgQEAKIC0gRW5hYmxlIHRocm90dGxpbmcgaW4gYmxvY2sgbGF5ZXIKIAlDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXkKIAotLSBNb3VudCBibGtpbyBjb250cm9sbGVyCi0gICAgICAgIG1vdW50IC10IGNncm91cCAtbyBibGtpbyBub25lIC9jZ3JvdXAvYmxraW8KKy0gTW91bnQgYmxraW8gY29udHJvbGxlciAoc2VlIGNncm91cHMudHh0LCBXaHkgYXJlIGNncm91cHMgbmVlZGVkPykKKyAgICAgICAgbW91bnQgLXQgY2dyb3VwIC1vIGJsa2lvIG5vbmUgL3N5cy9mcy9jZ3JvdXAvYmxraW8KIAogLSBTcGVjaWZ5IGEgYmFuZHdpZHRoIHJhdGUgb24gcGFydGljdWxhciBkZXZpY2UgZm9yIHJvb3QgZ3JvdXAuIFRoZSBmb3JtYXQKICAgZm9yIHBvbGljeSBpcyAiPG1ham9yPjo8bWlub3I+ICA8Ynllc19wZXJfc2Vjb25kPiIuCiAKLSAgICAgICAgZWNobyAiODoxNiAgMTA0ODU3NiIgPiAvY2dyb3VwL2Jsa2lvL2Jsa2lvLnJlYWRfYnBzX2RldmljZQorICAgICAgICBlY2hvICI4OjE2ICAxMDQ4NTc2IiA+IC9zeXMvZnMvY2dyb3VwL2Jsa2lvL2Jsa2lvLnJlYWRfYnBzX2RldmljZQogCiAgIEFib3ZlIHdpbGwgcHV0IGEgbGltaXQgb2YgMU1CL3NlY29uZCBvbiByZWFkcyBoYXBwZW5pbmcgZm9yIHJvb3QgZ3JvdXAKICAgb24gZGV2aWNlIGhhdmluZyBtYWpvci9taW5vciBudW1iZXIgODoxNi4KQEAgLTEwOCw3ICsxMTEsNyBAQAogICBDRlEgYW5kIHRocm90dGxpbmcgd2lsbCBwcmFjdGljYWxseSB0cmVhdCBhbGwgZ3JvdXBzIGF0IHNhbWUgbGV2ZWwuCiAKIAkJCQlwaXZvdAotCQkJICAgICAvICB8ICAgXCAgXAorCQkJICAgICAvICAvICAgXCAgXAogCQkJcm9vdCAgdGVzdDEgdGVzdDIgIHRlc3QzCiAKICAgRG93biB0aGUgbGluZSB3ZSBjYW4gaW1wbGVtZW50IGhpZXJhcmNoaWNhbCBhY2NvdW50aW5nL2NvbnRyb2wgc3VwcG9ydApAQCAtMTQ5LDcgKzE1Miw3IEBACiAKIAkgIEZvbGxvd2luZyBpcyB0aGUgZm9ybWF0LgogCi0JICAjZWNobyBkZXZfbWFqOmRldl9taW5vciB3ZWlnaHQgPiAvcGF0aC90by9jZ3JvdXAvYmxraW8ud2VpZ2h0X2RldmljZQorCSAgIyBlY2hvIGRldl9tYWo6ZGV2X21pbm9yIHdlaWdodCA+IGJsa2lvLndlaWdodF9kZXZpY2UKIAkgIENvbmZpZ3VyZSB3ZWlnaHQ9MzAwIG9uIC9kZXYvc2RiICg4OjE2KSBpbiB0aGlzIGNncm91cAogCSAgIyBlY2hvIDg6MTYgMzAwID4gYmxraW8ud2VpZ2h0X2RldmljZQogCSAgIyBjYXQgYmxraW8ud2VpZ2h0X2RldmljZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CmluZGV4IDBlZDk5ZjAuLmNkNjdlOTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKQEAgLTEzOCwxMSArMTM4LDExIEBACiB0aGUgYWRtaW4gY2FuIGVhc2lseSBzZXQgdXAgYSBzY3JpcHQgd2hpY2ggcmVjZWl2ZXMgZXhlYyBub3RpZmljYXRpb25zCiBhbmQgZGVwZW5kaW5nIG9uIHdobyBpcyBsYXVuY2hpbmcgdGhlIGJyb3dzZXIgaGUgY2FuCiAKLSAgICAgICAjIGVjaG8gYnJvd3Nlcl9waWQgPiAvbW50LzxyZXN0eXBlPi88dXNlcmNsYXNzPi90YXNrcworICAgICMgZWNobyBicm93c2VyX3BpZCA+IC9zeXMvZnMvY2dyb3VwLzxyZXN0eXBlPi88dXNlcmNsYXNzPi90YXNrcwogCiBXaXRoIG9ubHkgYSBzaW5nbGUgaGllcmFyY2h5LCBoZSBub3cgd291bGQgcG90ZW50aWFsbHkgaGF2ZSB0byBjcmVhdGUKIGEgc2VwYXJhdGUgY2dyb3VwIGZvciBldmVyeSBicm93c2VyIGxhdW5jaGVkIGFuZCBhc3NvY2lhdGUgaXQgd2l0aAotYXBwcm9wIG5ldHdvcmsgYW5kIG90aGVyIHJlc291cmNlIGNsYXNzLiAgVGhpcyBtYXkgbGVhZCB0bworYXBwcm9wcmlhdGUgbmV0d29yayBhbmQgb3RoZXIgcmVzb3VyY2UgY2xhc3MuICBUaGlzIG1heSBsZWFkIHRvCiBwcm9saWZlcmF0aW9uIG9mIHN1Y2ggY2dyb3Vwcy4KIAogQWxzbyBsZXRzIHNheSB0aGF0IHRoZSBhZG1pbmlzdHJhdG9yIHdvdWxkIGxpa2UgdG8gZ2l2ZSBlbmhhbmNlZCBuZXR3b3JrCkBAIC0xNTMsOSArMTUzLDkgQEAKIFdpdGggYWJpbGl0eSB0byB3cml0ZSBwaWRzIGRpcmVjdGx5IHRvIHJlc291cmNlIGNsYXNzZXMsIGl0J3MganVzdCBhCiBtYXR0ZXIgb2YgOgogCi0gICAgICAgIyBlY2hvIHBpZCA+IC9tbnQvbmV0d29yay88bmV3X2NsYXNzPi90YXNrcworICAgICAgICMgZWNobyBwaWQgPiAvc3lzL2ZzL2Nncm91cC9uZXR3b3JrLzxuZXdfY2xhc3M+L3Rhc2tzCiAgICAgICAgKGFmdGVyIHNvbWUgdGltZSkKLSAgICAgICAjIGVjaG8gcGlkID4gL21udC9uZXR3b3JrLzxvcmlnX2NsYXNzPi90YXNrcworICAgICAgICMgZWNobyBwaWQgPiAvc3lzL2ZzL2Nncm91cC9uZXR3b3JrLzxvcmlnX2NsYXNzPi90YXNrcwogCiBXaXRob3V0IHRoaXMgYWJpbGl0eSwgaGUgd291bGQgaGF2ZSB0byBzcGxpdCB0aGUgY2dyb3VwIGludG8KIG11bHRpcGxlIHNlcGFyYXRlIG9uZXMgYW5kIHRoZW4gYXNzb2NpYXRlIHRoZSBuZXcgY2dyb3VwcyB3aXRoIHRoZQpAQCAtMzEwLDIxICszMTAsMjQgQEAKIFRvIHN0YXJ0IGEgbmV3IGpvYiB0aGF0IGlzIHRvIGJlIGNvbnRhaW5lZCB3aXRoaW4gYSBjZ3JvdXAsIHVzaW5nCiB0aGUgImNwdXNldCIgY2dyb3VwIHN1YnN5c3RlbSwgdGhlIHN0ZXBzIGFyZSBzb21ldGhpbmcgbGlrZToKIAotIDEpIG1rZGlyIC9kZXYvY2dyb3VwCi0gMikgbW91bnQgLXQgY2dyb3VwIC1vY3B1c2V0IGNwdXNldCAvZGV2L2Nncm91cAotIDMpIENyZWF0ZSB0aGUgbmV3IGNncm91cCBieSBkb2luZyBta2RpcidzIGFuZCB3cml0ZSdzIChvciBlY2hvJ3MpIGluCi0gICAgdGhlIC9kZXYvY2dyb3VwIHZpcnR1YWwgZmlsZSBzeXN0ZW0uCi0gNCkgU3RhcnQgYSB0YXNrIHRoYXQgd2lsbCBiZSB0aGUgImZvdW5kaW5nIGZhdGhlciIgb2YgdGhlIG5ldyBqb2IuCi0gNSkgQXR0YWNoIHRoYXQgdGFzayB0byB0aGUgbmV3IGNncm91cCBieSB3cml0aW5nIGl0cyBwaWQgdG8gdGhlCi0gICAgL2Rldi9jZ3JvdXAgdGFza3MgZmlsZSBmb3IgdGhhdCBjZ3JvdXAuCi0gNikgZm9yaywgZXhlYyBvciBjbG9uZSB0aGUgam9iIHRhc2tzIGZyb20gdGhpcyBmb3VuZGluZyBmYXRoZXIgdGFzay4KKyAxKSBtb3VudCAtdCB0bXBmcyBjZ3JvdXBfcm9vdCAvc3lzL2ZzL2Nncm91cAorIDIpIG1rZGlyIC9zeXMvZnMvY2dyb3VwL2NwdXNldAorIDMpIG1vdW50IC10IGNncm91cCAtb2NwdXNldCBjcHVzZXQgL3N5cy9mcy9jZ3JvdXAvY3B1c2V0CisgNCkgQ3JlYXRlIHRoZSBuZXcgY2dyb3VwIGJ5IGRvaW5nIG1rZGlyJ3MgYW5kIHdyaXRlJ3MgKG9yIGVjaG8ncykgaW4KKyAgICB0aGUgL3N5cy9mcy9jZ3JvdXAgdmlydHVhbCBmaWxlIHN5c3RlbS4KKyA1KSBTdGFydCBhIHRhc2sgdGhhdCB3aWxsIGJlIHRoZSAiZm91bmRpbmcgZmF0aGVyIiBvZiB0aGUgbmV3IGpvYi4KKyA2KSBBdHRhY2ggdGhhdCB0YXNrIHRvIHRoZSBuZXcgY2dyb3VwIGJ5IHdyaXRpbmcgaXRzIHBpZCB0byB0aGUKKyAgICAvc3lzL2ZzL2Nncm91cC9jcHVzZXQvdGFza3MgZmlsZSBmb3IgdGhhdCBjZ3JvdXAuCisgNykgZm9yaywgZXhlYyBvciBjbG9uZSB0aGUgam9iIHRhc2tzIGZyb20gdGhpcyBmb3VuZGluZyBmYXRoZXIgdGFzay4KIAogRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgY29tbWFuZHMgd2lsbCBzZXR1cCBhIGNncm91cAogbmFtZWQgIkNoYXJsaWUiLCBjb250YWluaW5nIGp1c3QgQ1BVcyAyIGFuZCAzLCBhbmQgTWVtb3J5IE5vZGUgMSwKIGFuZCB0aGVuIHN0YXJ0IGEgc3Vic2hlbGwgJ3NoJyBpbiB0aGF0IGNncm91cDoKIAotICBtb3VudCAtdCBjZ3JvdXAgY3B1c2V0IC1vY3B1c2V0IC9kZXYvY2dyb3VwCi0gIGNkIC9kZXYvY2dyb3VwCisgIG1vdW50IC10IHRtcGZzIGNncm91cF9yb290IC9zeXMvZnMvY2dyb3VwCisgIG1rZGlyIC9zeXMvZnMvY2dyb3VwL2NwdXNldAorICBtb3VudCAtdCBjZ3JvdXAgY3B1c2V0IC1vY3B1c2V0IC9zeXMvZnMvY2dyb3VwL2NwdXNldAorICBjZCAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKICAgbWtkaXIgQ2hhcmxpZQogICBjZCBDaGFybGllCiAgIC9iaW4vZWNobyAyLTMgPiBjcHVzZXQuY3B1cwpAQCAtMzQ1LDcgKzM0OCw3IEBACiB2aXJ0dWFsIGZpbGVzeXN0ZW0uCiAKIFRvIG1vdW50IGEgY2dyb3VwIGhpZXJhcmNoeSB3aXRoIGFsbCBhdmFpbGFibGUgc3Vic3lzdGVtcywgdHlwZToKLSMgbW91bnQgLXQgY2dyb3VwIHh4eCAvZGV2L2Nncm91cAorIyBtb3VudCAtdCBjZ3JvdXAgeHh4IC9zeXMvZnMvY2dyb3VwCiAKIFRoZSAieHh4IiBpcyBub3QgaW50ZXJwcmV0ZWQgYnkgdGhlIGNncm91cCBjb2RlLCBidXQgd2lsbCBhcHBlYXIgaW4KIC9wcm9jL21vdW50cyBzbyBtYXkgYmUgYW55IHVzZWZ1bCBpZGVudGlmeWluZyBzdHJpbmcgdGhhdCB5b3UgbGlrZS4KQEAgLTM1NCwyMyArMzU3LDMyIEBACiBpZiBjcHVzZXRzIGFyZSBlbmFibGVkIHRoZSB1c2VyIHdpbGwgaGF2ZSB0byBwb3B1bGF0ZSB0aGUgY3B1cyBhbmQgbWVtcyBmaWxlcwogZm9yIGVhY2ggbmV3IGNncm91cCBjcmVhdGVkIGJlZm9yZSB0aGF0IGdyb3VwIGNhbiBiZSB1c2VkLgogCitBcyBleHBsYWluZWQgaW4gc2VjdGlvbiBgMS4yIFdoeSBhcmUgY2dyb3VwcyBuZWVkZWQ/JyB5b3Ugc2hvdWxkIGNyZWF0ZQorZGlmZmVyZW50IGhpZXJhcmNoaWVzIG9mIGNncm91cHMgZm9yIGVhY2ggc2luZ2xlIHJlc291cmNlIG9yIGdyb3VwIG9mCityZXNvdXJjZXMgeW91IHdhbnQgdG8gY29udHJvbC4gVGhlcmVmb3JlLCB5b3Ugc2hvdWxkIG1vdW50IGEgdG1wZnMgb24KKy9zeXMvZnMvY2dyb3VwIGFuZCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yIGVhY2ggY2dyb3VwIHJlc291cmNlIG9yIHJlc291cmNlCitncm91cC4KKworIyBtb3VudCAtdCB0bXBmcyBjZ3JvdXBfcm9vdCAvc3lzL2ZzL2Nncm91cAorIyBta2RpciAvc3lzL2ZzL2Nncm91cC9yZzEKKwogVG8gbW91bnQgYSBjZ3JvdXAgaGllcmFyY2h5IHdpdGgganVzdCB0aGUgY3B1c2V0IGFuZCBtZW1vcnkKIHN1YnN5c3RlbXMsIHR5cGU6Ci0jIG1vdW50IC10IGNncm91cCAtbyBjcHVzZXQsbWVtb3J5IGhpZXIxIC9kZXYvY2dyb3VwCisjIG1vdW50IC10IGNncm91cCAtbyBjcHVzZXQsbWVtb3J5IGhpZXIxIC9zeXMvZnMvY2dyb3VwL3JnMQogCiBUbyBjaGFuZ2UgdGhlIHNldCBvZiBzdWJzeXN0ZW1zIGJvdW5kIHRvIGEgbW91bnRlZCBoaWVyYXJjaHksIGp1c3QKIHJlbW91bnQgd2l0aCBkaWZmZXJlbnQgb3B0aW9uczoKLSMgbW91bnQgLW8gcmVtb3VudCxjcHVzZXQsYmxraW8gaGllcjEgL2Rldi9jZ3JvdXAKKyMgbW91bnQgLW8gcmVtb3VudCxjcHVzZXQsYmxraW8gaGllcjEgL3N5cy9mcy9jZ3JvdXAvcmcxCiAKIE5vdyBtZW1vcnkgaXMgcmVtb3ZlZCBmcm9tIHRoZSBoaWVyYXJjaHkgYW5kIGJsa2lvIGlzIGFkZGVkLgogCiBOb3RlIHRoaXMgd2lsbCBhZGQgYmxraW8gdG8gdGhlIGhpZXJhcmNoeSBidXQgd29uJ3QgcmVtb3ZlIG1lbW9yeSBvcgogY3B1c2V0LCBiZWNhdXNlIHRoZSBuZXcgb3B0aW9ucyBhcmUgYXBwZW5kZWQgdG8gdGhlIG9sZCBvbmVzOgotIyBtb3VudCAtbyByZW1vdW50LGJsa2lvIC9kZXYvY2dyb3VwCisjIG1vdW50IC1vIHJlbW91bnQsYmxraW8gL3N5cy9mcy9jZ3JvdXAvcmcxCiAKIFRvIFNwZWNpZnkgYSBoaWVyYXJjaHkncyByZWxlYXNlX2FnZW50OgogIyBtb3VudCAtdCBjZ3JvdXAgLW8gY3B1c2V0LHJlbGVhc2VfYWdlbnQ9Ii9zYmluL2NwdXNldF9yZWxlYXNlX2FnZW50IiBcCi0gIHh4eCAvZGV2L2Nncm91cAorICB4eHggL3N5cy9mcy9jZ3JvdXAvcmcxCiAKIE5vdGUgdGhhdCBzcGVjaWZ5aW5nICdyZWxlYXNlX2FnZW50JyBtb3JlIHRoYW4gb25jZSB3aWxsIHJldHVybiBmYWlsdXJlLgogCkBAIC0zNzksMTcgKzM5MSwxNyBAQAogdGhlIGFiaWxpdHkgdG8gYXJiaXRyYXJpbHkgYmluZC91bmJpbmQgc3Vic3lzdGVtcyBmcm9tIGFuIGV4aXN0aW5nCiBjZ3JvdXAgaGllcmFyY2h5IGlzIGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIGluIHRoZSBmdXR1cmUuCiAKLVRoZW4gdW5kZXIgL2Rldi9jZ3JvdXAgeW91IGNhbiBmaW5kIGEgdHJlZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZQotdHJlZSBvZiB0aGUgY2dyb3VwcyBpbiB0aGUgc3lzdGVtLiBGb3IgaW5zdGFuY2UsIC9kZXYvY2dyb3VwCitUaGVuIHVuZGVyIC9zeXMvZnMvY2dyb3VwL3JnMSB5b3UgY2FuIGZpbmQgYSB0cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCit0cmVlIG9mIHRoZSBjZ3JvdXBzIGluIHRoZSBzeXN0ZW0uIEZvciBpbnN0YW5jZSwgL3N5cy9mcy9jZ3JvdXAvcmcxCiBpcyB0aGUgY2dyb3VwIHRoYXQgaG9sZHMgdGhlIHdob2xlIHN5c3RlbS4KIAogSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiByZWxlYXNlX2FnZW50OgotIyBlY2hvICIvc2Jpbi9uZXdfcmVsZWFzZV9hZ2VudCIgPiAvZGV2L2Nncm91cC9yZWxlYXNlX2FnZW50CisjIGVjaG8gIi9zYmluL25ld19yZWxlYXNlX2FnZW50IiA+IC9zeXMvZnMvY2dyb3VwL3JnMS9yZWxlYXNlX2FnZW50CiAKIEl0IGNhbiBhbHNvIGJlIGNoYW5nZWQgdmlhIHJlbW91bnQuCiAKLUlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBjZ3JvdXAgdW5kZXIgL2Rldi9jZ3JvdXA6Ci0jIGNkIC9kZXYvY2dyb3VwCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgY2dyb3VwIHVuZGVyIC9zeXMvZnMvY2dyb3VwL3JnMToKKyMgY2QgL3N5cy9mcy9jZ3JvdXAvcmcxCiAjIG1rZGlyIG15X2Nncm91cAogCiBOb3cgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHdpdGggdGhpcyBjZ3JvdXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1YWNjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1YWNjdC50eHQKaW5kZXggOGI5MzA5NC4uOWFkODVkZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdWFjY3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVhY2N0LnR4dApAQCAtMTAsMjYgKzEwLDI1IEBACiAKIEFjY291bnRpbmcgZ3JvdXBzIGNhbiBiZSBjcmVhdGVkIGJ5IGZpcnN0IG1vdW50aW5nIHRoZSBjZ3JvdXAgZmlsZXN5c3RlbS4KIAotIyBta2RpciAvY2dyb3VwcwotIyBtb3VudCAtdCBjZ3JvdXAgLW9jcHVhY2N0IG5vbmUgL2Nncm91cHMKKyMgbW91bnQgLXQgY2dyb3VwIC1vY3B1YWNjdCBub25lIC9zeXMvZnMvY2dyb3VwCiAKLVdpdGggdGhlIGFib3ZlIHN0ZXAsIHRoZSBpbml0aWFsIG9yIHRoZSBwYXJlbnQgYWNjb3VudGluZyBncm91cAotYmVjb21lcyB2aXNpYmxlIGF0IC9jZ3JvdXBzLiBBdCBib290dXAsIHRoaXMgZ3JvdXAgaW5jbHVkZXMgYWxsIHRoZQotdGFza3MgaW4gdGhlIHN5c3RlbS4gL2Nncm91cHMvdGFza3MgbGlzdHMgdGhlIHRhc2tzIGluIHRoaXMgY2dyb3VwLgotL2Nncm91cHMvY3B1YWNjdC51c2FnZSBnaXZlcyB0aGUgQ1BVIHRpbWUgKGluIG5hbm9zZWNvbmRzKSBvYnRhaW5lZCBieQotdGhpcyBncm91cCB3aGljaCBpcyBlc3NlbnRpYWxseSB0aGUgQ1BVIHRpbWUgb2J0YWluZWQgYnkgYWxsIHRoZSB0YXNrcworV2l0aCB0aGUgYWJvdmUgc3RlcCwgdGhlIGluaXRpYWwgb3IgdGhlIHBhcmVudCBhY2NvdW50aW5nIGdyb3VwIGJlY29tZXMKK3Zpc2libGUgYXQgL3N5cy9mcy9jZ3JvdXAuIEF0IGJvb3R1cCwgdGhpcyBncm91cCBpbmNsdWRlcyBhbGwgdGhlIHRhc2tzIGluCit0aGUgc3lzdGVtLiAvc3lzL2ZzL2Nncm91cC90YXNrcyBsaXN0cyB0aGUgdGFza3MgaW4gdGhpcyBjZ3JvdXAuCisvc3lzL2ZzL2Nncm91cC9jcHVhY2N0LnVzYWdlIGdpdmVzIHRoZSBDUFUgdGltZSAoaW4gbmFub3NlY29uZHMpIG9idGFpbmVkCitieSB0aGlzIGdyb3VwIHdoaWNoIGlzIGVzc2VudGlhbGx5IHRoZSBDUFUgdGltZSBvYnRhaW5lZCBieSBhbGwgdGhlIHRhc2tzCiBpbiB0aGUgc3lzdGVtLgogCi1OZXcgYWNjb3VudGluZyBncm91cHMgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhlIHBhcmVudCBncm91cCAvY2dyb3Vwcy4KK05ldyBhY2NvdW50aW5nIGdyb3VwcyBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGUgcGFyZW50IGdyb3VwIC9zeXMvZnMvY2dyb3VwLgogCi0jIGNkIC9jZ3JvdXBzCisjIGNkIC9zeXMvZnMvY2dyb3VwCiAjIG1rZGlyIGcxCiAjIGVjaG8gJCQgPiBnMQogCiBUaGUgYWJvdmUgc3RlcHMgY3JlYXRlIGEgbmV3IGdyb3VwIGcxIGFuZCBtb3ZlIHRoZSBjdXJyZW50IHNoZWxsCiBwcm9jZXNzIChiYXNoKSBpbnRvIGl0LiBDUFUgdGltZSBjb25zdW1lZCBieSB0aGlzIGJhc2ggYW5kIGl0cyBjaGlsZHJlbgogY2FuIGJlIG9idGFpbmVkIGZyb20gZzEvY3B1YWNjdC51c2FnZSBhbmQgdGhlIHNhbWUgaXMgYWNjdW11bGF0ZWQgaW4KLS9jZ3JvdXBzL2NwdWFjY3QudXNhZ2UgYWxzby4KKy9zeXMvZnMvY2dyb3VwL2NwdWFjY3QudXNhZ2UgYWxzby4KIAogY3B1YWNjdC5zdGF0IGZpbGUgbGlzdHMgYSBmZXcgc3RhdGlzdGljcyB3aGljaCBmdXJ0aGVyIGRpdmlkZSB0aGUKIENQVSB0aW1lIG9idGFpbmVkIGJ5IHRoZSBjZ3JvdXAgaW50byB1c2VyIGFuZCBzeXN0ZW0gdGltZXMuIEN1cnJlbnRseQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0CmluZGV4IDk4YTMwODIuLjViMGQ3OGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQKQEAgLTY2MSwyMSArNjYxLDIxIEBACiAKIFRvIHN0YXJ0IGEgbmV3IGpvYiB0aGF0IGlzIHRvIGJlIGNvbnRhaW5lZCB3aXRoaW4gYSBjcHVzZXQsIHRoZSBzdGVwcyBhcmU6CiAKLSAxKSBta2RpciAvZGV2L2NwdXNldAotIDIpIG1vdW50IC10IGNncm91cCAtb2NwdXNldCBjcHVzZXQgL2Rldi9jcHVzZXQKKyAxKSBta2RpciAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKKyAyKSBtb3VudCAtdCBjZ3JvdXAgLW9jcHVzZXQgY3B1c2V0IC9zeXMvZnMvY2dyb3VwL2NwdXNldAogIDMpIENyZWF0ZSB0aGUgbmV3IGNwdXNldCBieSBkb2luZyBta2RpcidzIGFuZCB3cml0ZSdzIChvciBlY2hvJ3MpIGluCi0gICAgdGhlIC9kZXYvY3B1c2V0IHZpcnR1YWwgZmlsZSBzeXN0ZW0uCisgICAgdGhlIC9zeXMvZnMvY2dyb3VwL2NwdXNldCB2aXJ0dWFsIGZpbGUgc3lzdGVtLgogIDQpIFN0YXJ0IGEgdGFzayB0aGF0IHdpbGwgYmUgdGhlICJmb3VuZGluZyBmYXRoZXIiIG9mIHRoZSBuZXcgam9iLgogIDUpIEF0dGFjaCB0aGF0IHRhc2sgdG8gdGhlIG5ldyBjcHVzZXQgYnkgd3JpdGluZyBpdHMgcGlkIHRvIHRoZQotICAgIC9kZXYvY3B1c2V0IHRhc2tzIGZpbGUgZm9yIHRoYXQgY3B1c2V0LgorICAgIC9zeXMvZnMvY2dyb3VwL2NwdXNldCB0YXNrcyBmaWxlIGZvciB0aGF0IGNwdXNldC4KICA2KSBmb3JrLCBleGVjIG9yIGNsb25lIHRoZSBqb2IgdGFza3MgZnJvbSB0aGlzIGZvdW5kaW5nIGZhdGhlciB0YXNrLgogCiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBvZiBjb21tYW5kcyB3aWxsIHNldHVwIGEgY3B1c2V0CiBuYW1lZCAiQ2hhcmxpZSIsIGNvbnRhaW5pbmcganVzdCBDUFVzIDIgYW5kIDMsIGFuZCBNZW1vcnkgTm9kZSAxLAogYW5kIHRoZW4gc3RhcnQgYSBzdWJzaGVsbCAnc2gnIGluIHRoYXQgY3B1c2V0OgogCi0gIG1vdW50IC10IGNncm91cCAtb2NwdXNldCBjcHVzZXQgL2Rldi9jcHVzZXQKLSAgY2QgL2Rldi9jcHVzZXQKKyAgbW91bnQgLXQgY2dyb3VwIC1vY3B1c2V0IGNwdXNldCAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKKyAgY2QgL3N5cy9mcy9jZ3JvdXAvY3B1c2V0CiAgIG1rZGlyIENoYXJsaWUKICAgY2QgQ2hhcmxpZQogICAvYmluL2VjaG8gMi0zID4gY3B1c2V0LmNwdXMKQEAgLTcxMCwxNCArNzEwLDE0IEBACiB2aXJ0dWFsIGZpbGVzeXN0ZW0uCiAKIFRvIG1vdW50IGl0LCB0eXBlOgotIyBtb3VudCAtdCBjZ3JvdXAgLW8gY3B1c2V0IGNwdXNldCAvZGV2L2NwdXNldAorIyBtb3VudCAtdCBjZ3JvdXAgLW8gY3B1c2V0IGNwdXNldCAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKIAotVGhlbiB1bmRlciAvZGV2L2NwdXNldCB5b3UgY2FuIGZpbmQgYSB0cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCi10cmVlIG9mIHRoZSBjcHVzZXRzIGluIHRoZSBzeXN0ZW0uIEZvciBpbnN0YW5jZSwgL2Rldi9jcHVzZXQKK1RoZW4gdW5kZXIgL3N5cy9mcy9jZ3JvdXAvY3B1c2V0IHlvdSBjYW4gZmluZCBhIHRyZWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUKK3RyZWUgb2YgdGhlIGNwdXNldHMgaW4gdGhlIHN5c3RlbS4gRm9yIGluc3RhbmNlLCAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKIGlzIHRoZSBjcHVzZXQgdGhhdCBob2xkcyB0aGUgd2hvbGUgc3lzdGVtLgogCi1JZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgY3B1c2V0IHVuZGVyIC9kZXYvY3B1c2V0OgotIyBjZCAvZGV2L2NwdXNldAorSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGNwdXNldCB1bmRlciAvc3lzL2ZzL2Nncm91cC9jcHVzZXQ6CisjIGNkIC9zeXMvZnMvY2dyb3VwL2NwdXNldAogIyBta2RpciBteV9jcHVzZXQKIAogTm93IHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgY3B1c2V0LgpAQCAtNzY1LDEyICs3NjUsMTIgQEAKIAogVGhlIGNvbW1hbmQKIAotbW91bnQgLXQgY3B1c2V0IFggL2Rldi9jcHVzZXQKK21vdW50IC10IGNwdXNldCBYIC9zeXMvZnMvY2dyb3VwL2NwdXNldAogCiBpcyBlcXVpdmFsZW50IHRvCiAKLW1vdW50IC10IGNncm91cCAtb2NwdXNldCxub3ByZWZpeCBYIC9kZXYvY3B1c2V0Ci1lY2hvICIvc2Jpbi9jcHVzZXRfcmVsZWFzZV9hZ2VudCIgPiAvZGV2L2NwdXNldC9yZWxlYXNlX2FnZW50Cittb3VudCAtdCBjZ3JvdXAgLW9jcHVzZXQsbm9wcmVmaXggWCAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKK2VjaG8gIi9zYmluL2NwdXNldF9yZWxlYXNlX2FnZW50IiA+IC9zeXMvZnMvY2dyb3VwL2NwdXNldC9yZWxlYXNlX2FnZW50CiAKIDIuMiBBZGRpbmcvcmVtb3ZpbmcgY3B1cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZGV2aWNlcy50eHQKaW5kZXggNTdjYTRjOC4uMTY2MjRhN2Y4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZGV2aWNlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2RldmljZXMudHh0CkBAIC0yMiwxNiArMjIsMTYgQEAKIEFuIGVudHJ5IGlzIGFkZGVkIHVzaW5nIGRldmljZXMuYWxsb3csIGFuZCByZW1vdmVkIHVzaW5nCiBkZXZpY2VzLmRlbnkuICBGb3IgaW5zdGFuY2UKIAotCWVjaG8gJ2MgMTozIG1yJyA+IC9jZ3JvdXBzLzEvZGV2aWNlcy5hbGxvdworCWVjaG8gJ2MgMTozIG1yJyA+IC9zeXMvZnMvY2dyb3VwLzEvZGV2aWNlcy5hbGxvdwogCiBhbGxvd3MgY2dyb3VwIDEgdG8gcmVhZCBhbmQgbWtub2QgdGhlIGRldmljZSB1c3VhbGx5IGtub3duIGFzCiAvZGV2L251bGwuICBEb2luZwogCi0JZWNobyBhID4gL2Nncm91cHMvMS9kZXZpY2VzLmRlbnkKKwllY2hvIGEgPiAvc3lzL2ZzL2Nncm91cC8xL2RldmljZXMuZGVueQogCiB3aWxsIHJlbW92ZSB0aGUgZGVmYXVsdCAnYSAqOiogcndtJyBlbnRyeS4gRG9pbmcKIAotCWVjaG8gYSA+IC9jZ3JvdXBzLzEvZGV2aWNlcy5hbGxvdworCWVjaG8gYSA+IC9zeXMvZnMvY2dyb3VwLzEvZGV2aWNlcy5hbGxvdwogCiB3aWxsIGFkZCB0aGUgJ2EgKjoqIHJ3bScgZW50cnkgdG8gdGhlIHdoaXRlbGlzdC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2ZyZWV6ZXItc3Vic3lzdGVtLnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9mcmVlemVyLXN1YnN5c3RlbS50eHQKaW5kZXggNDFmMzdmZS4uYzIxZDc3NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2ZyZWV6ZXItc3Vic3lzdGVtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZnJlZXplci1zdWJzeXN0ZW0udHh0CkBAIC01OSwyOCArNTksMjggQEAKIAogKiBFeGFtcGxlcyBvZiB1c2FnZSA6CiAKLSAgICMgbWtkaXIgL2NvbnRhaW5lcnMKLSAgICMgbW91bnQgLXQgY2dyb3VwIC1vZnJlZXplciBmcmVlemVyICAvY29udGFpbmVycwotICAgIyBta2RpciAvY29udGFpbmVycy8wCi0gICAjIGVjaG8gJHNvbWVfcGlkID4gL2NvbnRhaW5lcnMvMC90YXNrcworICAgIyBta2RpciAvc3lzL2ZzL2Nncm91cC9mcmVlemVyCisgICAjIG1vdW50IC10IGNncm91cCAtb2ZyZWV6ZXIgZnJlZXplciAvc3lzL2ZzL2Nncm91cC9mcmVlemVyCisgICAjIG1rZGlyIC9zeXMvZnMvY2dyb3VwL2ZyZWV6ZXIvMAorICAgIyBlY2hvICRzb21lX3BpZCA+IC9zeXMvZnMvY2dyb3VwL2ZyZWV6ZXIvMC90YXNrcwogCiB0byBnZXQgc3RhdHVzIG9mIHRoZSBmcmVlemVyIHN1YnN5c3RlbSA6CiAKLSAgICMgY2F0IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgIyBjYXQgL3N5cy9mcy9jZ3JvdXAvZnJlZXplci8wL2ZyZWV6ZXIuc3RhdGUKICAgIFRIQVdFRAogCiB0byBmcmVlemUgYWxsIHRhc2tzIGluIHRoZSBjb250YWluZXIgOgogCi0gICAjIGVjaG8gRlJPWkVOID4gL2NvbnRhaW5lcnMvMC9mcmVlemVyLnN0YXRlCi0gICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgICMgZWNobyBGUk9aRU4gPiAvc3lzL2ZzL2Nncm91cC9mcmVlemVyLzAvZnJlZXplci5zdGF0ZQorICAgIyBjYXQgL3N5cy9mcy9jZ3JvdXAvZnJlZXplci8wL2ZyZWV6ZXIuc3RhdGUKICAgIEZSRUVaSU5HCi0gICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgICMgY2F0IC9zeXMvZnMvY2dyb3VwL2ZyZWV6ZXIvMC9mcmVlemVyLnN0YXRlCiAgICBGUk9aRU4KIAogdG8gdW5mcmVlemUgYWxsIHRhc2tzIGluIHRoZSBjb250YWluZXIgOgogCi0gICAjIGVjaG8gVEhBV0VEID4gL2NvbnRhaW5lcnMvMC9mcmVlemVyLnN0YXRlCi0gICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgICMgZWNobyBUSEFXRUQgPiAvc3lzL2ZzL2Nncm91cC9mcmVlemVyLzAvZnJlZXplci5zdGF0ZQorICAgIyBjYXQgL3N5cy9mcy9jZ3JvdXAvZnJlZXplci8wL2ZyZWV6ZXIuc3RhdGUKICAgIFRIQVdFRAogCiBUaGlzIGlzIHRoZSBiYXNpYyBtZWNoYW5pc20gd2hpY2ggc2hvdWxkIGRvIHRoZSByaWdodCB0aGluZyBmb3IgdXNlciBzcGFjZSB0YXNrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CmluZGV4IDdjMTYzNDcuLjA2ZWI2ZDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CkBAIC0xLDggKzEsOCBAQAogTWVtb3J5IFJlc291cmNlIENvbnRyb2xsZXIKIAotTk9URTogVGhlIE1lbW9yeSBSZXNvdXJjZSBDb250cm9sbGVyIGhhcyBiZWVuIGdlbmVyaWNhbGx5IGJlZW4gcmVmZXJyZWQKLSAgICAgIHRvIGFzIHRoZSBtZW1vcnkgY29udHJvbGxlciBpbiB0aGlzIGRvY3VtZW50LiBEbyBub3QgY29uZnVzZSBtZW1vcnkKLSAgICAgIGNvbnRyb2xsZXIgdXNlZCBoZXJlIHdpdGggdGhlIG1lbW9yeSBjb250cm9sbGVyIHRoYXQgaXMgdXNlZCBpbiBoYXJkd2FyZS4KK05PVEU6IFRoZSBNZW1vcnkgUmVzb3VyY2UgQ29udHJvbGxlciBoYXMgZ2VuZXJpY2FsbHkgYmVlbiByZWZlcnJlZCB0byBhcyB0aGUKKyAgICAgIG1lbW9yeSBjb250cm9sbGVyIGluIHRoaXMgZG9jdW1lbnQuIERvIG5vdCBjb25mdXNlIG1lbW9yeSBjb250cm9sbGVyCisgICAgICB1c2VkIGhlcmUgd2l0aCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgdGhhdCBpcyB1c2VkIGluIGhhcmR3YXJlLgogCiAoRm9yIGVkaXRvcnMpCiBJbiB0aGlzIGRvY3VtZW50OgpAQCAtNzAsNiArNzAsNyBAQAogCQkJCSAoU2VlIHN5c2N0bCdzIHZtLnN3YXBwaW5lc3MpCiAgbWVtb3J5Lm1vdmVfY2hhcmdlX2F0X2ltbWlncmF0ZSAjIHNldC9zaG93IGNvbnRyb2xzIG9mIG1vdmluZyBjaGFyZ2VzCiAgbWVtb3J5Lm9vbV9jb250cm9sCQkgIyBzZXQvc2hvdyBvb20gY29udHJvbHMuCisgbWVtb3J5Lm51bWFfc3RhdAkJICMgc2hvdyB0aGUgbnVtYmVyIG9mIG1lbW9yeSB1c2FnZSBwZXIgbnVtYSBub2RlCiAKIDEuIEhpc3RvcnkKIApAQCAtMTgxLDcgKzE4Miw3IEBACiBwYWdlIHdpbGwgZXZlbnR1YWxseSBnZXQgY2hhcmdlZCBmb3IgaXQgKG9uY2UgaXQgaXMgdW5jaGFyZ2VkIGZyb20KIHRoZSBjZ3JvdXAgdGhhdCBicm91Z2h0IGl0IGluIC0tIHRoaXMgd2lsbCBoYXBwZW4gb24gbWVtb3J5IHByZXNzdXJlKS4KIAotRXhjZXB0aW9uOiBJZiBDT05GSUdfQ0dST1VQX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUCBpcyBub3QgdXNlZC4uCitFeGNlcHRpb246IElmIENPTkZJR19DR1JPVVBfQ0dST1VQX01FTV9SRVNfQ1RMUl9TV0FQIGlzIG5vdCB1c2VkLgogV2hlbiB5b3UgZG8gc3dhcG9mZiBhbmQgbWFrZSBzd2FwcGVkLW91dCBwYWdlcyBvZiBzaG1lbSh0bXBmcykgdG8KIGJlIGJhY2tlZCBpbnRvIG1lbW9yeSBpbiBmb3JjZSwgY2hhcmdlcyBmb3IgcGFnZXMgYXJlIGFjY291bnRlZCBhZ2FpbnN0IHRoZQogY2FsbGVyIG9mIHN3YXBvZmYgcmF0aGVyIHRoYW4gdGhlIHVzZXJzIG9mIHNobWVtLgpAQCAtMjEzLDcgKzIxNCw3IEBACiBPUyBwb2ludCBvZiB2aWV3LgogCiAqIFdoYXQgaGFwcGVucyB3aGVuIGEgY2dyb3VwIGhpdHMgbWVtb3J5Lm1lbXN3LmxpbWl0X2luX2J5dGVzCi1XaGVuIGEgY2dyb3VwIGhpcyBtZW1vcnkubWVtc3cubGltaXRfaW5fYnl0ZXMsIGl0J3MgdXNlbGVzcyB0byBkbyBzd2FwLW91dAorV2hlbiBhIGNncm91cCBoaXRzIG1lbW9yeS5tZW1zdy5saW1pdF9pbl9ieXRlcywgaXQncyB1c2VsZXNzIHRvIGRvIHN3YXAtb3V0CiBpbiB0aGlzIGNncm91cC4gVGhlbiwgc3dhcC1vdXQgd2lsbCBub3QgYmUgZG9uZSBieSBjZ3JvdXAgcm91dGluZSBhbmQgZmlsZQogY2FjaGVzIGFyZSBkcm9wcGVkLiBCdXQgYXMgbWVudGlvbmVkIGFib3ZlLCBnbG9iYWwgTFJVIGNhbiBkbyBzd2Fwb3V0IG1lbW9yeQogZnJvbSBpdCBmb3Igc2FuaXR5IG9mIHRoZSBzeXN0ZW0ncyBtZW1vcnkgbWFuYWdlbWVudCBzdGF0ZS4gWW91IGNhbid0IGZvcmJpZApAQCAtMjYzLDE2ICsyNjQsMTcgQEAKIGMuIEVuYWJsZSBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgogZC4gRW5hYmxlIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAgKHRvIHVzZSBzd2FwIGV4dGVuc2lvbikKIAotMS4gUHJlcGFyZSB0aGUgY2dyb3VwcwotIyBta2RpciAtcCAvY2dyb3VwcwotIyBtb3VudCAtdCBjZ3JvdXAgbm9uZSAvY2dyb3VwcyAtbyBtZW1vcnkKKzEuIFByZXBhcmUgdGhlIGNncm91cHMgKHNlZSBjZ3JvdXBzLnR4dCwgV2h5IGFyZSBjZ3JvdXBzIG5lZWRlZD8pCisjIG1vdW50IC10IHRtcGZzIG5vbmUgL3N5cy9mcy9jZ3JvdXAKKyMgbWtkaXIgL3N5cy9mcy9jZ3JvdXAvbWVtb3J5CisjIG1vdW50IC10IGNncm91cCBub25lIC9zeXMvZnMvY2dyb3VwL21lbW9yeSAtbyBtZW1vcnkKIAogMi4gTWFrZSB0aGUgbmV3IGdyb3VwIGFuZCBtb3ZlIGJhc2ggaW50byBpdAotIyBta2RpciAvY2dyb3Vwcy8wCi0jIGVjaG8gJCQgPiAvY2dyb3Vwcy8wL3Rhc2tzCisjIG1rZGlyIC9zeXMvZnMvY2dyb3VwL21lbW9yeS8wCisjIGVjaG8gJCQgPiAvc3lzL2ZzL2Nncm91cC9tZW1vcnkvMC90YXNrcwogCiBTaW5jZSBub3cgd2UncmUgaW4gdGhlIDAgY2dyb3VwLCB3ZSBjYW4gYWx0ZXIgdGhlIG1lbW9yeSBsaW1pdDoKLSMgZWNobyA0TSA+IC9jZ3JvdXBzLzAvbWVtb3J5LmxpbWl0X2luX2J5dGVzCisjIGVjaG8gNE0gPiAvc3lzL2ZzL2Nncm91cC9tZW1vcnkvMC9tZW1vcnkubGltaXRfaW5fYnl0ZXMKIAogTk9URTogV2UgY2FuIHVzZSBhIHN1ZmZpeCAoaywgSywgbSwgTSwgZyBvciBHKSB0byBpbmRpY2F0ZSB2YWx1ZXMgaW4ga2lsbywKIG1lZ2Egb3IgZ2lnYWJ5dGVzLiAoSGVyZSwgS2lsbywgTWVnYSwgR2lnYSBhcmUgS2liaWJ5dGVzLCBNZWJpYnl0ZXMsIEdpYmlieXRlcy4pCkBAIC0yODAsMTEgKzI4MiwxMSBAQAogTk9URTogV2UgY2FuIHdyaXRlICItMSIgdG8gcmVzZXQgdGhlICoubGltaXRfaW5fYnl0ZXModW5saW1pdGVkKS4KIE5PVEU6IFdlIGNhbm5vdCBzZXQgbGltaXRzIG9uIHRoZSByb290IGNncm91cCBhbnkgbW9yZS4KIAotIyBjYXQgL2Nncm91cHMvMC9tZW1vcnkubGltaXRfaW5fYnl0ZXMKKyMgY2F0IC9zeXMvZnMvY2dyb3VwL21lbW9yeS8wL21lbW9yeS5saW1pdF9pbl9ieXRlcwogNDE5NDMwNAogCiBXZSBjYW4gY2hlY2sgdGhlIHVzYWdlOgotIyBjYXQgL2Nncm91cHMvMC9tZW1vcnkudXNhZ2VfaW5fYnl0ZXMKKyMgY2F0IC9zeXMvZnMvY2dyb3VwL21lbW9yeS8wL21lbW9yeS51c2FnZV9pbl9ieXRlcwogMTIxNjUxMgogCiBBIHN1Y2Nlc3NmdWwgd3JpdGUgdG8gdGhpcyBmaWxlIGRvZXMgbm90IGd1YXJhbnRlZSBhIHN1Y2Nlc3NmdWwgc2V0IG9mCkBAIC00NjQsNiArNDY2LDI0IEBACiBJZiB5b3Ugd2FudCB0byBrbm93IG1vcmUgZXhhY3QgbWVtb3J5IHVzYWdlLCB5b3Ugc2hvdWxkIHVzZSBSU1MrQ0FDSEUoK1NXQVApCiB2YWx1ZSBpbiBtZW1vcnkuc3RhdChzZWUgNS4yKS4KIAorNS42IG51bWFfc3RhdAorCitUaGlzIGlzIHNpbWlsYXIgdG8gbnVtYV9tYXBzIGJ1dCBvcGVyYXRlcyBvbiBhIHBlci1tZW1jZyBiYXNpcy4gIFRoaXMgaXMKK3VzZWZ1bCBmb3IgcHJvdmlkaW5nIHZpc2liaWxpdHkgaW50byB0aGUgbnVtYSBsb2NhbGl0eSBpbmZvcm1hdGlvbiB3aXRoaW4KK2FuIG1lbWNnIHNpbmNlIHRoZSBwYWdlcyBhcmUgYWxsb3dlZCB0byBiZSBhbGxvY2F0ZWQgZnJvbSBhbnkgcGh5c2ljYWwKK25vZGUuICBPbmUgb2YgdGhlIHVzZWNhc2VzIGlzIGV2YWx1YXRpbmcgYXBwbGljYXRpb24gcGVyZm9ybWFuY2UgYnkKK2NvbWJpbmluZyB0aGlzIGluZm9ybWF0aW9uIHdpdGggdGhlIGFwcGxpY2F0aW9uJ3MgY3B1IGFsbG9jYXRpb24uCisKK1dlIGV4cG9ydCAidG90YWwiLCAiZmlsZSIsICJhbm9uIiBhbmQgInVuZXZpY3RhYmxlIiBwYWdlcyBwZXItbm9kZSBmb3IKK2VhY2ggbWVtY2cuICBUaGUgb3VwdXQgZm9ybWF0IG9mIG1lbW9yeS5udW1hX3N0YXQgaXM6CisKK3RvdGFsPTx0b3RhbCBwYWdlcz4gTjA9PG5vZGUgMCBwYWdlcz4gTjE9PG5vZGUgMSBwYWdlcz4gLi4uCitmaWxlPTx0b3RhbCBmaWxlIHBhZ2VzPiBOMD08bm9kZSAwIHBhZ2VzPiBOMT08bm9kZSAxIHBhZ2VzPiAuLi4KK2Fub249PHRvdGFsIGFub24gcGFnZXM+IE4wPTxub2RlIDAgcGFnZXM+IE4xPTxub2RlIDEgcGFnZXM+IC4uLgordW5ldmljdGFibGU9PHRvdGFsIGFub24gcGFnZXM+IE4wPTxub2RlIDAgcGFnZXM+IE4xPTxub2RlIDEgcGFnZXM+IC4uLgorCitBbmQgd2UgaGF2ZSB0b3RhbCA9IGZpbGUgKyBhbm9uICsgdW5ldmljdGFibGUuCisKIDYuIEhpZXJhcmNoeSBzdXBwb3J0CiAKIFRoZSBtZW1vcnkgY29udHJvbGxlciBzdXBwb3J0cyBhIGRlZXAgaGllcmFyY2h5IGFuZCBoaWVyYXJjaGljYWwgYWNjb3VudGluZy4KQEAgLTQ3MSwxMyArNDkxLDEzIEBACiBjZ3JvdXAgZmlsZXN5c3RlbS4gQ29uc2lkZXIgZm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY2dyb3VwIGZpbGVzeXN0ZW0KIGhpZXJhcmNoeQogCi0JCXJvb3QKKwkgICAgICAgcm9vdAogCSAgICAgLyAgfCAgIFwKLSAgICAgICAgICAgLwl8ICAgIFwKLQkgIGEJYgljCi0JCQl8IFwKLQkJCXwgIFwKLQkJCWQgICBlCisgICAgICAgICAgICAvCXwgICAgXAorCSAgIGEJYiAgICAgYworCQkgICAgICB8IFwKKwkJICAgICAgfCAgXAorCQkgICAgICBkICAgZQogCiBJbiB0aGUgZGlhZ3JhbSBhYm92ZSwgd2l0aCBoaWVyYXJjaGljYWwgYWNjb3VudGluZyBlbmFibGVkLCBhbGwgbWVtb3J5CiB1c2FnZSBvZiBlLCBpcyBhY2NvdW50ZWQgdG8gaXRzIGFuY2VzdG9ycyB1cCB1bnRpbCB0aGUgcm9vdCAoaS5lLCBjIGFuZCByb290KSwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAxYTk0NDZiLi43MmUyMzg0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC00ODEsMjMgKzQ4MSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDogICBuYW1lc3BhY2UgY2dyb3VwIChuc19jZ3JvdXApCi1XaGVuOiAgIDIuNi4zOAotV2h5OiAgICBUaGUgbnNfY2dyb3VwIGxlYWRzIHRvIHNvbWUgcHJvYmxlbXM6Ci0JKiBjZ3JvdXAgY3JlYXRpb24gaXMgb3V0LW9mLWNvbnRyb2wKLQkqIGNncm91cCBuYW1lIGNhbiBjb25mbGljdCB3aGVuIHBpZHMgYXJlIGxvb3BpbmcKLQkqIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIGEgc2luZ2xlIHByb2Nlc3MgaGFuZGxpbmcKLQlhIGxvdCBvZiBuYW1lc3BhY2VzIHdpdGhvdXQgZmFsbGluZyBpbiBhIGV4cG9uZW50aWFsIGNyZWF0aW9uIHRpbWUKLQkqIHdlIG1heSB3YW50IHRvIGNyZWF0ZSBhIG5hbWVzcGFjZSB3aXRob3V0IGNyZWF0aW5nIGEgY2dyb3VwCi0KLQlUaGUgbnNfY2dyb3VwIGlzIHJlcGxhY2VkIGJ5IGEgY29tcGF0aWJpbGl0eSBmbGFnICdjbG9uZV9jaGlsZHJlbicsCi0Jd2hlcmUgYSBuZXdseSBjcmVhdGVkIGNncm91cCB3aWxsIGNvcHkgdGhlIHBhcmVudCBjZ3JvdXAgdmFsdWVzLgotCVRoZSB1c2Vyc3BhY2UgaGFzIHRvIG1hbnVhbGx5IGNyZWF0ZSBhIGNncm91cCBhbmQgYWRkIGEgdGFzayB0bwotCXRoZSAndGFza3MnIGZpbGUuCi1XaG86ICAgIERhbmllbCBMZXpjYW5vIDxkYW5pZWwubGV6Y2Fub0BmcmVlLmZyPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CWl3bHdpZmkgZGlzYWJsZV9od19zY2FuIG1vZHVsZSBwYXJhbWV0ZXJzCiBXaGVuOgkyLjYuNDAKIFdoeToJSGFyZXdhcmUgc2NhbiBpcyB0aGUgcHJlZmVyIG1ldGhvZCBmb3IgaXdsd2lmaSBkZXZpY2VzIGZvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA1NDM4YTJkLi5mZDI0OGEzMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTk5OSw3ICs5OTksMTAgQEAKIAkJCVdpdGggdGhpcyBvcHRpb24gb24gZXZlcnkgdW5tYXBfc2luZ2xlIG9wZXJhdGlvbiB3aWxsCiAJCQlyZXN1bHQgaW4gYSBoYXJkd2FyZSBJT1RMQiBmbHVzaCBvcGVyYXRpb24gYXMgb3Bwb3NlZAogCQkJdG8gYmF0Y2hpbmcgdGhlbSBmb3IgcGVyZm9ybWFuY2UuCi0KKwkJc3Bfb2ZmIFtEZWZhdWx0IE9mZl0KKwkJCUJ5IGRlZmF1bHQsIHN1cGVyIHBhZ2Ugd2lsbCBiZSBzdXBwb3J0ZWQgaWYgSW50ZWwgSU9NTVUKKwkJCWhhcyB0aGUgY2FwYWJpbGl0eS4gV2l0aCB0aGlzIG9wdGlvbiwgc3VwZXIgcGFnZSB3aWxsCisJCQlub3QgYmUgc3VwcG9ydGVkLgogCWludHJlbWFwPQlbWDg2LTY0LCBJbnRlbC1JT01NVV0KIAkJCUZvcm1hdDogeyBvbiAoZGVmYXVsdCkgfCBvZmYgfCBub3NpZCB9CiAJCQlvbgllbmFibGUgSW50ZXJydXB0IFJlbWFwcGluZyAoZGVmYXVsdCkKQEAgLTI1OTUsNiArMjU5OCw4IEBACiAJCQkJCXVubG9jayBlamVjdGFibGUgbWVkaWEpOwogCQkJCW0gPSBNQVhfU0VDVE9SU182NCAoZG9uJ3QgdHJhbnNmZXIgbW9yZQogCQkJCQl0aGFuIDY0IHNlY3RvcnMgPSAzMiBLQiBhdCBhIHRpbWUpOworCQkJCW4gPSBJTklUSUFMX1JFQUQxMCAoZm9yY2UgYSByZXRyeSBvZiB0aGUKKwkJCQkJaW5pdGlhbCBSRUFEKDEwKSBjb21tYW5kKTsKIAkJCQlvID0gQ0FQQUNJVFlfT0sgKGFjY2VwdCB0aGUgY2FwYWNpdHkKIAkJCQkJcmVwb3J0ZWQgYnkgdGhlIGRldmljZSk7CiAJCQkJciA9IElHTk9SRV9SRVNJRFVFICh0aGUgZGV2aWNlIHJlcG9ydHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va21lbWxlYWsudHh0IGIvRG9jdW1lbnRhdGlvbi9rbWVtbGVhay50eHQKaW5kZXggMDkwZTZlZS4uNTEwNjNlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rbWVtbGVhay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rbWVtbGVhay50eHQKQEAgLTExLDcgKzExLDkgQEAKIHJlcG9ydGVkIHZpYSAvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVhay4gQSBzaW1pbGFyIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZQogVmFsZ3JpbmQgdG9vbCAobWVtY2hlY2sgLS1sZWFrLWNoZWNrKSB0byBkZXRlY3QgdGhlIG1lbW9yeSBsZWFrcyBpbgogdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMuCi1LbWVtbGVhayBpcyBzdXBwb3J0ZWQgb24geDg2LCBhcm0sIHBvd2VycGMsIHNwYXJjLCBzaCwgbWljcm9ibGF6ZSBhbmQgdGlsZS4KKworUGxlYXNlIGNoZWNrIERFQlVHX0tNRU1MRUFLIGRlcGVuZGVuY2llcyBpbiBsaWIvS2NvbmZpZy5kZWJ1ZyBmb3Igc3VwcG9ydGVkCithcmNoaXRlY3R1cmVzLgogCiBVc2FnZQogLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWQudHh0IGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKaW5kZXggMjM2NmIxYy4uZjBlZWU4MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKQEAgLTU1NSw3ICs1NTUsNyBAQAogICAgc3luY19taW4KICAgIHN5bmNfbWF4CiAgICAgIFRoZSB0d28gdmFsdWVzLCBnaXZlbiBhcyBudW1iZXJzIG9mIHNlY3RvcnMsIGluZGljYXRlIGEgcmFuZ2UKLSAgICAgd2l0aGluZyB0aGUgYXJyYXkgd2hlcmUgJ2NoZWNrJy8ncmVwYWlyJyB3aWxsIG9wZXJhdGUuIE11c3QgYmUKKyAgICAgd2l0aGluIHRoZSBhcnJheSB3aGVyZSAnY2hlY2snLydyZXBhaXInIHdpbGwgb3BlcmF0ZS4gTXVzdCBiZQogICAgICBhIG11bHRpcGxlIG9mIGNodW5rX3NpemUuIFdoZW4gaXQgcmVhY2hlcyAic3luY19tYXgiIGl0IHdpbGwKICAgICAgcGF1c2UsIHJhdGhlciB0aGFuIGNvbXBsZXRlLgogICAgICBZb3UgY2FuIHVzZSAnc2VsZWN0JyBvciAncG9sbCcgb24gInN5bmNfY29tcGxldGVkIiB0byB3YWl0IGZvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wcmludGstZm9ybWF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL3ByaW50ay1mb3JtYXRzLnR4dAppbmRleCAxYjVhNWRkLi41ZGYxNzZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ByaW50ay1mb3JtYXRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ByaW50ay1mb3JtYXRzLnR4dApAQCAtOSw3ICs5LDEyMSBAQAogCQlzaXplX3QJCQklenUgb3IgJXp4CiAJCXNzaXplX3QJCQklemQgb3IgJXp4CiAKLVJhdyBwb2ludGVyIHZhbHVlIFNIT1VMRCBiZSBwcmludGVkIHdpdGggJXAuCitSYXcgcG9pbnRlciB2YWx1ZSBTSE9VTEQgYmUgcHJpbnRlZCB3aXRoICVwLiBUaGUga2VybmVsIHN1cHBvcnRzCit0aGUgZm9sbG93aW5nIGV4dGVuZGVkIGZvcm1hdCBzcGVjaWZpZXJzIGZvciBwb2ludGVyIHR5cGVzOgorCitTeW1ib2xzL0Z1bmN0aW9uIFBvaW50ZXJzOgorCisJJXBGCXZlcnNhdGlsZV9pbml0KzB4MC8weDExMAorCSVwZgl2ZXJzYXRpbGVfaW5pdAorCSVwUwl2ZXJzYXRpbGVfaW5pdCsweDAvMHgxMTAKKwklcHMJdmVyc2F0aWxlX2luaXQKKwklcEIJcHJldl9mbl9vZl92ZXJzYXRpbGVfaW5pdCsweDg4LzB4ODgKKworCUZvciBwcmludGluZyBzeW1ib2xzIGFuZCBmdW5jdGlvbiBwb2ludGVycy4gVGhlICdTJyBhbmQgJ3MnIHNwZWNpZmllcnMKKwlyZXN1bHQgaW4gdGhlIHN5bWJvbCBuYW1lIHdpdGggKCdTJykgb3Igd2l0aG91dCAoJ3MnKSBvZmZzZXRzLiBXaGVyZQorCXRoaXMgaXMgdXNlZCBvbiBhIGtlcm5lbCB3aXRob3V0IEtBTExTWU1TIC0gdGhlIHN5bWJvbCBhZGRyZXNzIGlzCisJcHJpbnRlZCBpbnN0ZWFkLgorCisJVGhlICdCJyBzcGVjaWZpZXIgcmVzdWx0cyBpbiB0aGUgc3ltYm9sIG5hbWUgd2l0aCBvZmZzZXRzIGFuZCBzaG91bGQgYmUKKwl1c2VkIHdoZW4gcHJpbnRpbmcgc3RhY2sgYmFja3RyYWNlcy4gVGhlIHNwZWNpZmllciB0YWtlcyBpbnRvCisJY29uc2lkZXJhdGlvbiB0aGUgZWZmZWN0IG9mIGNvbXBpbGVyIG9wdGltaXNhdGlvbnMgd2hpY2ggbWF5IG9jY3VyCisJd2hlbiB0YWlsLWNhbGwncyBhcmUgdXNlZCBhbmQgbWFya2VkIHdpdGggdGhlIG5vcmV0dXJuIEdDQyBhdHRyaWJ1dGUuCisKKwlPbiBpYTY0LCBwcGM2NCBhbmQgcGFyaXNjNjQgYXJjaGl0ZWN0dXJlcyBmdW5jdGlvbiBwb2ludGVycyBhcmUKKwlhY3R1YWxseSBmdW5jdGlvbiBkZXNjcmlwdG9ycyB3aGljaCBtdXN0IGZpcnN0IGJlIHJlc29sdmVkLiBUaGUgJ0YnIGFuZAorCSdmJyBzcGVjaWZpZXJzIHBlcmZvcm0gdGhpcyByZXNvbHV0aW9uIGFuZCB0aGVuIHByb3ZpZGUgdGhlIHNhbWUKKwlmdW5jdGlvbmFsaXR5IGFzIHRoZSAnUycgYW5kICdzJyBzcGVjaWZpZXJzLgorCitLZXJuZWwgUG9pbnRlcnM6CisKKwklcEsJMHgwMTIzNDU2NyBvciAweDAxMjM0NTY3ODlhYmNkZWYKKworCUZvciBwcmludGluZyBrZXJuZWwgcG9pbnRlcnMgd2hpY2ggc2hvdWxkIGJlIGhpZGRlbiBmcm9tIHVucHJpdmlsZWdlZAorCXVzZXJzLiBUaGUgYmVoYXZpb3VyIG9mICVwSyBkZXBlbmRzIG9uIHRoZSBrcHRyX3Jlc3RyaWN0IHN5c2N0bCAtIHNlZQorCURvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQgZm9yIG1vcmUgZGV0YWlscy4KKworU3RydWN0IFJlc291cmNlczoKKworCSVwcglbbWVtIDB4NjAwMDAwMDAtMHg2ZmZmZmZmZiBmbGFncyAweDIyMDBdIG9yCisJCVttZW0gMHgwMDAwMDAwMDYwMDAwMDAwLTB4MDAwMDAwMDA2ZmZmZmZmZiBmbGFncyAweDIyMDBdCisJJXBSCVttZW0gMHg2MDAwMDAwMC0weDZmZmZmZmZmIHByZWZdIG9yCisJCVttZW0gMHgwMDAwMDAwMDYwMDAwMDAwLTB4MDAwMDAwMDA2ZmZmZmZmZiBwcmVmXQorCisJRm9yIHByaW50aW5nIHN0cnVjdCByZXNvdXJjZXMuIFRoZSAnUicgYW5kICdyJyBzcGVjaWZpZXJzIHJlc3VsdCBpbiBhCisJcHJpbnRlZCByZXNvdXJjZSB3aXRoICgnUicpIG9yIHdpdGhvdXQgKCdyJykgYSBkZWNvZGVkIGZsYWdzIG1lbWJlci4KKworTUFDL0ZEREkgYWRkcmVzc2VzOgorCisJJXBNCTAwOjAxOjAyOjAzOjA0OjA1CisJJXBNRgkwMC0wMS0wMi0wMy0wNC0wNQorCSVwbQkwMDAxMDIwMzA0MDUKKworCUZvciBwcmludGluZyA2LWJ5dGUgTUFDL0ZEREkgYWRkcmVzc2VzIGluIGhleCBub3RhdGlvbi4gVGhlICdNJyBhbmQgJ20nCisJc3BlY2lmaWVycyByZXN1bHQgaW4gYSBwcmludGVkIGFkZHJlc3Mgd2l0aCAoJ00nKSBvciB3aXRob3V0ICgnbScpIGJ5dGUKKwlzZXBhcmF0b3JzLiBUaGUgZGVmYXVsdCBieXRlIHNlcGFyYXRvciBpcyB0aGUgY29sb24gKCc6JykuCisKKwlXaGVyZSBGRERJIGFkZHJlc3NlcyBhcmUgY29uY2VybmVkIHRoZSAnRicgc3BlY2lmaWVyIGNhbiBiZSB1c2VkIGFmdGVyCisJdGhlICdNJyBzcGVjaWZpZXIgdG8gdXNlIGRhc2ggKCctJykgc2VwYXJhdG9ycyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisJc2VwYXJhdG9yLgorCitJUHY0IGFkZHJlc3NlczoKKworCSVwSTQJMS4yLjMuNAorCSVwaTQJMDAxLjAwMi4wMDMuMDA0CisJJXBbSWldW2huYmxdCisKKwlGb3IgcHJpbnRpbmcgSVB2NCBkb3Qtc2VwYXJhdGVkIGRlY2ltYWwgYWRkcmVzc2VzLiBUaGUgJ0k0JyBhbmQgJ2k0JworCXNwZWNpZmllcnMgcmVzdWx0IGluIGEgcHJpbnRlZCBhZGRyZXNzIHdpdGggKCdpNCcpIG9yIHdpdGhvdXQgKCdJNCcpCisJbGVhZGluZyB6ZXJvcy4KKworCVRoZSBhZGRpdGlvbmFsICdoJywgJ24nLCAnYicsIGFuZCAnbCcgc3BlY2lmaWVycyBhcmUgdXNlZCB0byBzcGVjaWZ5CisJaG9zdCwgbmV0d29yaywgYmlnIG9yIGxpdHRsZSBlbmRpYW4gb3JkZXIgYWRkcmVzc2VzIHJlc3BlY3RpdmVseS4gV2hlcmUKKwlubyBzcGVjaWZpZXIgaXMgcHJvdmlkZWQgdGhlIGRlZmF1bHQgbmV0d29yay9iaWcgZW5kaWFuIG9yZGVyIGlzIHVzZWQuCisKK0lQdjYgYWRkcmVzc2VzOgorCisJJXBJNgkwMDAxOjAwMDI6MDAwMzowMDA0OjAwMDU6MDAwNjowMDA3OjAwMDgKKwklcGk2CTAwMDEwMDAyMDAwMzAwMDQwMDA1MDAwNjAwMDcwMDA4CisJJXBJNmMJMToyOjM6NDo1OjY6Nzo4CisKKwlGb3IgcHJpbnRpbmcgSVB2NiBuZXR3b3JrLW9yZGVyIDE2LWJpdCBoZXggYWRkcmVzc2VzLiBUaGUgJ0k2JyBhbmQgJ2k2JworCXNwZWNpZmllcnMgcmVzdWx0IGluIGEgcHJpbnRlZCBhZGRyZXNzIHdpdGggKCdJNicpIG9yIHdpdGhvdXQgKCdpNicpCisJY29sb24tc2VwYXJhdG9ycy4gTGVhZGluZyB6ZXJvcyBhcmUgYWx3YXlzIHVzZWQuCisKKwlUaGUgYWRkaXRpb25hbCAnYycgc3BlY2lmaWVyIGNhbiBiZSB1c2VkIHdpdGggdGhlICdJJyBzcGVjaWZpZXIgdG8KKwlwcmludCBhIGNvbXByZXNzZWQgSVB2NiBhZGRyZXNzIGFzIGRlc2NyaWJlZCBieQorCWh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU5NTIKKworVVVJRC9HVUlEIGFkZHJlc3NlczoKKworCSVwVWIJMDAwMTAyMDMtMDQwNS0wNjA3LTA4MDktMGEwYjBjMGQwZTBmCisJJXBVQgkwMDAxMDIwMy0wNDA1LTA2MDctMDgwOS0wQTBCMEMwRDBFMEYKKwklcFVsCTAzMDIwMTAwLTA1MDQtMDcwNi0wODA5LTBhMGIwYzBlMGUwZgorCSVwVUwJMDMwMjAxMDAtMDUwNC0wNzA2LTA4MDktMEEwQjBDMEUwRTBGCisKKwlGb3IgcHJpbnRpbmcgMTYtYnl0ZSBVVUlEL0dVSURzIGFkZHJlc3Nlcy4gVGhlIGFkZGl0aW9uYWwgJ2wnLCAnTCcsCisJJ2InIGFuZCAnQicgc3BlY2lmaWVycyBhcmUgdXNlZCB0byBzcGVjaWZ5IGEgbGl0dGxlIGVuZGlhbiBvcmRlciBpbgorCWxvd2VyICgnbCcpIG9yIHVwcGVyIGNhc2UgKCdMJykgaGV4IGNoYXJhY3RlcnMgLSBhbmQgYmlnIGVuZGlhbiBvcmRlcgorCWluIGxvd2VyICgnYicpIG9yIHVwcGVyIGNhc2UgKCdCJykgaGV4IGNoYXJhY3RlcnMuCisKKwlXaGVyZSBubyBhZGRpdGlvbmFsIHNwZWNpZmllcnMgYXJlIHVzZWQgdGhlIGRlZmF1bHQgbGl0dGxlIGVuZGlhbgorCW9yZGVyIHdpdGggbG93ZXIgY2FzZSBoZXggY2hhcmFjdGVycyB3aWxsIGJlIHByaW50ZWQuCisKK3N0cnVjdCB2YV9mb3JtYXQ6CisKKwklcFYKKworCUZvciBwcmludGluZyBzdHJ1Y3QgdmFfZm9ybWF0IHN0cnVjdHVyZXMuIFRoZXNlIGNvbnRhaW4gYSBmb3JtYXQgc3RyaW5nCisJYW5kIHZhX2xpc3QgYXMgZm9sbG93czoKKworCXN0cnVjdCB2YV9mb3JtYXQgeworCQljb25zdCBjaGFyICpmbXQ7CisJCXZhX2xpc3QgKnZhOworCX07CisKKwlEbyBub3QgdXNlIHRoaXMgZmVhdHVyZSB3aXRob3V0IHNvbWUgbWVjaGFuaXNtIHRvIHZlcmlmeSB0aGUKKwljb3JyZWN0bmVzcyBvZiB0aGUgZm9ybWF0IHN0cmluZyBhbmQgdmFfbGlzdCBhcmd1bWVudHMuCiAKIHU2NCBTSE9VTEQgYmUgcHJpbnRlZCB3aXRoICVsbHUvJWxseCwgKHVuc2lnbmVkIGxvbmcgbG9uZyk6CiAKQEAgLTMyLDQgKzE0Niw1IEBACiBUaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIGF0dGVudGlvbi4KIAogCi1CeSBSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PgorQnkgUmFuZHkgRHVubGFwIDxyZHVubGFwQHhlbm90aW1lLm5ldD4gYW5kCitBbmRyZXcgTXVycmF5IDxhbXVycmF5QG1wYy1kYXRhLmNvLnVrPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy50eHQgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1kZXNpZ24tQ0ZTLnR4dAppbmRleCA5OTk2MTk5Li45MWVjZmYwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1kZXNpZ24tQ0ZTLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1kZXNpZ24tQ0ZTLnR4dApAQCAtMjIzLDkgKzIyMywxMCBAQAogZ3JvdXAgY3JlYXRlZCB1c2luZyB0aGUgcHNldWRvIGZpbGVzeXN0ZW0uICBTZWUgZXhhbXBsZSBzdGVwcyBiZWxvdyB0byBjcmVhdGUKIHRhc2sgZ3JvdXBzIGFuZCBtb2RpZnkgdGhlaXIgQ1BVIHNoYXJlIHVzaW5nIHRoZSAiY2dyb3VwcyIgcHNldWRvIGZpbGVzeXN0ZW0uCiAKLQkjIG1rZGlyIC9kZXYvY3B1Y3RsCi0JIyBtb3VudCAtdCBjZ3JvdXAgLW9jcHUgbm9uZSAvZGV2L2NwdWN0bAotCSMgY2QgL2Rldi9jcHVjdGwKKwkjIG1vdW50IC10IHRtcGZzIGNncm91cF9yb290IC9zeXMvZnMvY2dyb3VwCisJIyBta2RpciAvc3lzL2ZzL2Nncm91cC9jcHUKKwkjIG1vdW50IC10IGNncm91cCAtb2NwdSBub25lIC9zeXMvZnMvY2dyb3VwL2NwdQorCSMgY2QgL3N5cy9mcy9jZ3JvdXAvY3B1CiAKIAkjIG1rZGlyIG11bHRpbWVkaWEJIyBjcmVhdGUgIm11bHRpbWVkaWEiIGdyb3VwIG9mIHRhc2tzCiAJIyBta2RpciBicm93c2VyCQkjIGNyZWF0ZSAiYnJvd3NlciIgZ3JvdXAgb2YgdGFza3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXJ0LWdyb3VwLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXJ0LWdyb3VwLnR4dAppbmRleCA2MDViMGQ0Li43MWI1NGQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAudHh0CkBAIC0xMjksOSArMTI5LDggQEAKIEVuYWJsaW5nIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBsZXRzIHlvdSBleHBsaWNpdGx5IGFsbG9jYXRlIHJlYWwKIENQVSBiYW5kd2lkdGggdG8gdGFzayBncm91cHMuCiAKLVRoaXMgdXNlcyB0aGUgL2Nncm91cCB2aXJ0dWFsIGZpbGUgc3lzdGVtIGFuZAotIi9jZ3JvdXAvPGNncm91cD4vY3B1LnJ0X3J1bnRpbWVfdXMiIHRvIGNvbnRyb2wgdGhlIENQVSB0aW1lIHJlc2VydmVkIGZvciBlYWNoCi1jb250cm9sIGdyb3VwLgorVGhpcyB1c2VzIHRoZSBjZ3JvdXAgdmlydHVhbCBmaWxlIHN5c3RlbSBhbmQgIjxjZ3JvdXA+L2NwdS5ydF9ydW50aW1lX3VzIgordG8gY29udHJvbCB0aGUgQ1BVIHRpbWUgcmVzZXJ2ZWQgZm9yIGVhY2ggY29udHJvbCBncm91cC4KIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gd29ya2luZyB3aXRoIGNvbnRyb2wgZ3JvdXBzLCB5b3Ugc2hvdWxkIHJlYWQKIERvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dCBhcyB3ZWxsLgpAQCAtMTUwLDcgKzE0OSw3IEBACiA9PT09PT09PT09PT09PT0KIAogVGhlcmUgaXMgd29yayBpbiBwcm9ncmVzcyB0byBtYWtlIHRoZSBzY2hlZHVsaW5nIHBlcmlvZCBmb3IgZWFjaCBncm91cAotKCIvY2dyb3VwLzxjZ3JvdXA+L2NwdS5ydF9wZXJpb2RfdXMiKSBjb25maWd1cmFibGUgYXMgd2VsbC4KKygiPGNncm91cD4vY3B1LnJ0X3BlcmlvZF91cyIpIGNvbmZpZ3VyYWJsZSBhcyB3ZWxsLgogCiBUaGUgY29uc3RyYWludCBvbiB0aGUgcGVyaW9kIGlzIHRoYXQgYSBzdWJncm91cCBtdXN0IGhhdmUgYSBzbWFsbGVyIG9yCiBlcXVhbCBwZXJpb2QgdG8gaXRzIHBhcmVudC4gQnV0IHJlYWxpc3RpY2FsbHkgaXRzIG5vdCB2ZXJ5IHVzZWZ1bCBfeWV0XwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvTWFrZWZpbGUKaW5kZXggYmViYWM2Yi4uMGFjMzQyMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIyBUaGlzIGNyZWF0ZXMgdGhlIGRlbW9uc3RyYXRpb24gdXRpbGl0eSAibGd1ZXN0IiB3aGljaCBydW5zIGEgTGludXggZ3Vlc3QuCi0jIE1pc3NpbmcgaGVhZGVycz8gIEFkZCAiLUkuLi8uLi9pbmNsdWRlIC1JLi4vLi4vYXJjaC94ODYvaW5jbHVkZSIKKyMgTWlzc2luZyBoZWFkZXJzPyAgQWRkICItSS4uLy4uLy4uL2luY2x1ZGUgLUkuLi8uLi8uLi9hcmNoL3g4Ni9pbmNsdWRlIgogQ0ZMQUdTOj0tbTMyIC1XYWxsIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLU8zIC1VX0ZPUlRJRllfU09VUkNFCiAKIGFsbDogbGd1ZXN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdC5jIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9sZ3Vlc3QuYwppbmRleCBkOWRhN2UxLi5jZDlkNmFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvbGd1ZXN0LmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcm5nLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX3JpbmcuaD4KICNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+Ci0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9saW51eC9sZ3Vlc3RfbGF1bmNoZXIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2xndWVzdF9sYXVuY2hlci5oIgogLypMOjExMAogICogV2UgY2FuIGlnbm9yZSB0aGUgNDIgaW5jbHVkZSBmaWxlcyB3ZSBuZWVkIGZvciB0aGlzIHByb2dyYW0sIGJ1dCBJIGRvIHdhbnQKICAqIHRvIGRyYXcgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2Yga2VybmVsLXN0eWxlIHR5cGVzLgpAQCAtMTM1LDkgKzEzNSw2IEBACiAJLyogSXMgaXQgb3BlcmF0aW9uYWwgKi8KIAlib29sIHJ1bm5pbmc7CiAKLQkvKiBEb2VzIEd1ZXN0IHdhbnQgYW4gaW50cnJ1cHQgb24gZW1wdHk/ICovCi0JYm9vbCBpcnFfb25fZW1wdHk7Ci0KIAkvKiBEZXZpY2Utc3BlY2lmaWMgZGF0YS4gKi8KIAl2b2lkICpwcml2OwogfTsKQEAgLTYzNywxMCArNjM0LDcgQEAKIAogCS8qIElmIHRoZXkgZG9uJ3Qgd2FudCBhbiBpbnRlcnJ1cHQsIGRvbid0IHNlbmQgb25lLi4uICovCiAJaWYgKHZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgJiBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkgewotCQkvKiAuLi4gdW5sZXNzIHRoZXkndmUgYXNrZWQgdXMgdG8gZm9yY2Ugb25lIG9uIGVtcHR5LiAqLwotCQlpZiAoIXZxLT5kZXYtPmlycV9vbl9lbXB0eQotCQkgICAgfHwgbGdfbGFzdF9hdmFpbCh2cSkgIT0gdnEtPnZyaW5nLmF2YWlsLT5pZHgpCi0JCQlyZXR1cm47CisJCXJldHVybjsKIAl9CiAKIAkvKiBTZW5kIHRoZSBHdWVzdCBhbiBpbnRlcnJ1cHQgdGVsbCB0aGVtIHdlIHVzZWQgc29tZXRoaW5nIHVwLiAqLwpAQCAtMTA1NywxNSArMTA1MSw2IEBACiAJY2xvc2UodnEtPmV2ZW50ZmQpOwogfQogCi1zdGF0aWMgYm9vbCBhY2NlcHRlZF9mZWF0dXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGJpdCkKLXsKLQljb25zdCB1OCAqZmVhdHVyZXMgPSBnZXRfZmVhdHVyZV9iaXRzKGRldikgKyBkZXYtPmZlYXR1cmVfbGVuOwotCi0JaWYgKGRldi0+ZmVhdHVyZV9sZW4gPCBiaXQgLyBDSEFSX0JJVCkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiBmZWF0dXJlc1tiaXQgLyBDSEFSX0JJVF0gJiAoMSA8PCAoYml0ICUgQ0hBUl9CSVQpKTsKLX0KLQogc3RhdGljIHZvaWQgc3RhcnRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTEwNzksOCArMTA2NCw2IEBACiAJCXZlcmJvc2UoIiAlMDJ4IiwgZ2V0X2ZlYXR1cmVfYml0cyhkZXYpCiAJCQlbZGV2LT5mZWF0dXJlX2xlbitpXSk7CiAKLQlkZXYtPmlycV9vbl9lbXB0eSA9IGFjY2VwdGVkX2ZlYXR1cmUoZGV2LCBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkpOwotCiAJZm9yICh2cSA9IGRldi0+dnE7IHZxOyB2cSA9IHZxLT5uZXh0KSB7CiAJCWlmICh2cS0+c2VydmljZSkKIAkJCWNyZWF0ZV90aHJlYWQodnEpOwpAQCAtMTU2NCw3ICsxNTQ3LDYgQEAKIAkvKiBTZXQgdXAgdGhlIHR1biBkZXZpY2UuICovCiAJY29uZmlndXJlX2RldmljZShpcGZkLCB0YXBpZiwgaXApOwogCi0JYWRkX2ZlYXR1cmUoZGV2LCBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkpOwogCS8qIEV4cGVjdCBHdWVzdCB0byBoYW5kbGUgZXZlcnl0aGluZyBleGNlcHQgVUZPICovCiAJYWRkX2ZlYXR1cmUoZGV2LCBWSVJUSU9fTkVUX0ZfQ1NVTSk7CiAJYWRkX2ZlYXR1cmUoZGV2LCBWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NVTSk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0CmluZGV4IDEyZjliYTIuLjU1MDA2ODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0CkBAIC0xMjksMTIgKzEyOSwxMiBAQAogb2YgdGhlIG1lbWNnLgogCiBFeGFtcGxlOgotICAgICAgICBta2RpciAvY2dyb3VwL2h3cG9pc29uCisgICAgICAgIG1rZGlyIC9zeXMvZnMvY2dyb3VwL21lbS9od3BvaXNvbgogCiAgICAgICAgIHVzZW1lbSAtbSAxMDAgLXMgMTAwMCAmCi0gICAgICAgIGVjaG8gYGpvYnMgLXBgID4gL2Nncm91cC9od3BvaXNvbi90YXNrcworICAgICAgICBlY2hvIGBqb2JzIC1wYCA+IC9zeXMvZnMvY2dyb3VwL21lbS9od3BvaXNvbi90YXNrcwogCi0gICAgICAgIG1lbWNnX2lubz0kKGxzIC1pZCAvY2dyb3VwL2h3cG9pc29uIHwgY3V0IC1mMSAtZCcgJykKKyAgICAgICAgbWVtY2dfaW5vPSQobHMgLWlkIC9zeXMvZnMvY2dyb3VwL21lbS9od3BvaXNvbiB8IGN1dCAtZjEgLWQnICcpCiAgICAgICAgIGVjaG8gJG1lbWNnX2lubyA+IC9kZWJ1Zy9od3BvaXNvbi9jb3JydXB0LWZpbHRlci1tZW1jZwogCiAgICAgICAgIHBhZ2UtdHlwZXMgLXAgYHBpZG9mIGluaXRgICAgLS1od3BvaXNvbiAgIyBzaGFsbCBkbyBub3RoaW5nCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDI5ODAxZjcuLjZjNTllYjkgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNzM5LDcgKzE3MzksNyBAQAogRjoJZHJpdmVycy9uZXQvZW5pYy8KIAogQ0lSUlVTIExPR0lDIEVQOTNYWCBFVEhFUk5FVCBEUklWRVIKLU06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CitNOglIYXJ0bGV5IFN3ZWV0ZW4gPGhzd2VldGVuQHZpc2lvbmVuZ3JhdmVycy5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCkBAIC0xODg5LDcgKzE4ODksNiBAQAogVzoJaHR0cDovL3d3dy5jb2RlbW9ua2V5Lm9yZy51ay9wcm9qZWN0cy9jcHVmcmVxLwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlai9jcHVmcmVxLmdpdAogUzoJTWFpbnRhaW5lZAotRjoJYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxLwogRjoJZHJpdmVycy9jcHVmcmVxLwogRjoJaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKIApAQCAtMzgyMCw2ICszODE5LDEyIEBACiBGOglkcml2ZXJzL2xlZHMvCiBGOglpbmNsdWRlL2xpbnV4L2xlZHMuaAogCitMRUdBQ1kgRUVQUk9NIERSSVZFUgorTToJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9lZXByb20KK0Y6CWRyaXZlcnMvbWlzYy9lZXByb20vZWVwcm9tLmMKKwogTEVHTyBVU0IgVG93ZXIgZHJpdmVyCiBNOglKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTDoJbGVnb3VzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKQEAgLTQxNDUsNyArNDE1MCw3IEBACiBGOgltbS8KIAogTUVNT1JZIFJFU09VUkNFIENPTlRST0xMRVIKLU06CUJhbGJpciBTaW5naCA8YmFsYmlyQGxpbnV4LnZuZXQuaWJtLmNvbT4KK006CUJhbGJpciBTaW5naCA8YnNpbmdoYXJvcmFAZ21haWwuY29tPgogTToJRGFpc3VrZSBOaXNoaW11cmEgPG5pc2hpbXVyYUBteHAubmVzLm5lYy5jby5qcD4KIE06CUtBTUVaQVdBIEhpcm95dWtpIDxrYW1lemF3YS5oaXJveXVAanAuZnVqaXRzdS5jb20+CiBMOglsaW51eC1tbUBrdmFjay5vcmcKQEAgLTQyNTIsOCArNDI1Nyw3IEBACiBGOglpbmNsdWRlL2xpbnV4L21tYy8KIAogTVVMVElNRURJQSBDQVJEIChNTUMpIEVUQy4gT1ZFUiBTUEkKLU06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotUzoJT2RkIEZpeGVzCitTOglPcnBoYW4KIEY6CWRyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jCiBGOglpbmNsdWRlL2xpbnV4L3NwaS9tbWNfc3BpLmgKIApAQCAtNDYwMyw3ICs0NjA3LDYgQEAKIAogT01BUCBVU0IgU1VQUE9SVAogTToJRmVsaXBlIEJhbGJpIDxiYWxiaUB0aS5jb20+Ci1NOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2JhbGJpL3VzYi5naXQKQEAgLTQ4OTIsNyArNDg5NSw3IEBACiBGOglhcmNoLyovaW5jbHVkZS9hc20vcGVyY3B1LmgKIAogUEVSLVRBU0sgREVMQVkgQUNDT1VOVElORwotTToJQmFsYmlyIFNpbmdoIDxiYWxiaXJAbGludXgudm5ldC5pYm0uY29tPgorTToJQmFsYmlyIFNpbmdoIDxic2luZ2hhcm9yYUBnbWFpbC5jb20+CiBTOglNYWludGFpbmVkCiBGOglpbmNsdWRlL2xpbnV4L2RlbGF5YWNjdC5oCiBGOglrZXJuZWwvZGVsYXlhY2N0LmMKQEAgLTQ5NDcsNiArNDk1MCw3IEBACiBGOglkcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXVuaWNvcmUzMmlvLmgKIEY6CWRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHV2My5jCiBGOglkcml2ZXJzL3ZpZGVvL2ZiLXB1djMuYworRjoJZHJpdmVycy9ydGMvcnRjLXB1djMuYwogCiBQTUMgU0lFUlJBIE1heFJBSUQgRFJJVkVSCiBNOglBbmlsIFJhdmluZHJhbmF0aCA8YW5pbF9yYXZpbmRyYW5hdGhAcG1jLXNpZXJyYS5jb20+CkBAIC01OTg0LDcgKzU5ODgsNiBAQAogRjoJZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXgqCiAKIFNQSSBTVUJTWVNURU0KLU06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgogTDoJc3BpLWRldmVsLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9zcGktZGV2ZWwtZ2VuZXJhbC9saXN0LwpAQCAtNjEwMCw3ICs2MTAzLDcgQEAKIEY6CURvY3VtZW50YXRpb24vdGFyZ2V0LwogCiBUQVNLU1RBVFMgU1RBVElTVElDUyBJTlRFUkZBQ0UKLU06CUJhbGJpciBTaW5naCA8YmFsYmlyQGxpbnV4LnZuZXQuaWJtLmNvbT4KK006CUJhbGJpciBTaW5naCA8YnNpbmdoYXJvcmFAZ21haWwuY29tPgogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL3Rhc2tzdGF0cyoKIEY6CWluY2x1ZGUvbGludXgvdGFza3N0YXRzKgpAQCAtNjQzMiw5ICs2NDM1LDggQEAKIEY6CWRyaXZlcnMvdXNiL21pc2MvcmlvNTAwKgogCiBVU0IgRUhDSSBEUklWRVIKLU06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwotUzoJT2RkIEZpeGVzCitTOglPcnBoYW4KIEY6CURvY3VtZW50YXRpb24vdXNiL2VoY2kudHh0CiBGOglkcml2ZXJzL3VzYi9ob3N0L2VoY2kqCiAKQEAgLTY0NDgsOSArNjQ1MCwxMCBAQAogRjoJZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS8KIAogVVNCIEdBREdFVC9QRVJJUEhFUkFMIFNVQlNZU1RFTQotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitNOglGZWxpcGUgQmFsYmkgPGJhbGJpQHRpLmNvbT4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGludXgtdXNiLm9yZy9nYWRnZXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYmFsYmkvdXNiLmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy91c2IvZ2FkZ2V0LwogRjoJaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0KgpAQCAtNjQ5Miw5ICs2NDk1LDggQEAKIEY6CXNvdW5kL3VzYi9taWRpLioKIAogVVNCIE9IQ0kgRFJJVkVSCi1NOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKLVM6CU9kZCBGaXhlcworUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL3VzYi9vaGNpLnR4dAogRjoJZHJpdmVycy91c2IvaG9zdC9vaGNpKgogCkBAIC02NzIwLDYgKzY3MjIsMTQgQEAKIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKIEY6CWZzL2ZhdC8KIAorVklERU9CVUYyIEZSQU1FV09SSworTToJUGF3ZWwgT3NjaWFrIDxwYXdlbEBvc2NpYWsuY29tPgorTToJTWFyZWsgU3p5cHJvd3NraSA8bS5zenlwcm93c2tpQHNhbXN1bmcuY29tPgorTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmMi0qCitGOglpbmNsdWRlL21lZGlhL3ZpZGVvYnVmMi0qCisKIFZJUlRJTyBDT05TT0xFIERSSVZFUgogTToJQW1pdCBTaGFoIDxhbWl0LnNoYWhAcmVkaGF0LmNvbT4KIEw6CXZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDY3NjQwNjMuLjA0OTljMmUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDMKIFBBVENITEVWRUwgPSAwCiBTVUJMRVZFTCA9IDAKLUVYVFJBVkVSU0lPTiA9IC1yYzEKK0VYVFJBVkVSU0lPTiA9IC1yYzMKIE5BTUUgPSBTbmVha3kgV2Vhc2VsCiAKICMgKkRPQ1VNRU5UQVRJT04qCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKaW5kZXggMzc2ZjIyMS4uMzI2ZjBhMiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJbGVuID0gbmFtZWxlbjsKLQlpZiAobmFtZWxlbiA+IDMyKQorCWlmIChsZW4gPiAzMikKIAkJbGVuID0gMzI7CiAKIAlkb3duX3JlYWQoJnV0c19zZW0pOwpAQCAtNTk0LDcgKzU5NCw3IEBACiAJZG93bl9yZWFkKCZ1dHNfc2VtKTsKIAlyZXMgPSBzeXNpbmZvX3RhYmxlW29mZnNldF07CiAJbGVuID0gc3RybGVuKHJlcykrMTsKLQlpZiAobGVuID4gY291bnQpCisJaWYgKCh1bnNpZ25lZCBsb25nKWxlbiA+ICh1bnNpZ25lZCBsb25nKWNvdW50KQogCQlsZW4gPSBjb3VudDsKIAlpZiAoY29weV90b191c2VyKGJ1ZiwgcmVzLCBsZW4pKQogCQllcnIgPSAtRUZBVUxUOwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJCXJldHVybiAxOwogCiAJY2FzZSBHU0lfR0VUX0hXUlBCOgotCQlpZiAobmJ5dGVzIDwgc2l6ZW9mKCpod3JwYikpCisJCWlmIChuYnl0ZXMgPiBzaXplb2YoKmh3cnBiKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgaHdycGIsIG5ieXRlcykgIT0gMCkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTAwOCw2ICsxMDA4LDcgQEAKIHsKIAlzdHJ1Y3QgcnVzYWdlIHI7CiAJbG9uZyByZXQsIGVycjsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKIAltbV9zZWdtZW50X3Qgb2xkX2ZzOwogCiAJaWYgKCF1cikKQEAgLTEwMTYsMTMgKzEwMTcsMTUgQEAKIAlvbGRfZnMgPSBnZXRfZnMoKTsKIAkJCiAJc2V0X2ZzIChLRVJORUxfRFMpOwotCXJldCA9IHN5c193YWl0NChwaWQsIHVzdGF0dXMsIG9wdGlvbnMsIChzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqKSAmcik7CisJcmV0ID0gc3lzX3dhaXQ0KHBpZCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgJnN0YXR1cywgb3B0aW9ucywKKwkJCShzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqKSAmcik7CiAJc2V0X2ZzIChvbGRfZnMpOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1ciwgc2l6ZW9mKCp1cikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWVyciA9IDA7CisJZXJyIHw9IHB1dF91c2VyKHN0YXR1cywgdXN0YXR1cyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoci5ydV91dGltZS50dl9zZWMsICZ1ci0+cnVfdXRpbWUudHZfc2VjKTsKIAllcnIgfD0gX19wdXRfdXNlcihyLnJ1X3V0aW1lLnR2X3VzZWMsICZ1ci0+cnVfdXRpbWUudHZfdXNlYyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoci5ydV9zdGltZS50dl9zZWMsICZ1ci0+cnVfc3RpbWUudHZfc2VjKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IGY5ZGE0MTkuLjk0MmZhZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtNjkxLDkgKzY5MSw5IEBACiAKIAkJLndvcmQJMHg0MTA2OTI2MAkJQCBBUk05MjZFSi1TICh2NVRFSikKIAkJLndvcmQJMHhmZjBmZmZmMAotCQliCV9fYXJtOTI2ZWpzX21tdV9jYWNoZV9vbgotCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgotCQliCV9fYXJtdjV0ZWpfbW11X2NhY2hlX2ZsdXNoCisJCVcoYikJX19hcm05MjZlanNfbW11X2NhY2hlX29uCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCVcoYikJX19hcm12NXRlal9tbXVfY2FjaGVfZmx1c2gKIAogCQkud29yZAkweDAwMDA3MDAwCQlAIEFSTTcgSURzCiAJCS53b3JkCTB4MDAwMGYwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9kYXZpbmNpX2FsbF9kZWZjb25maWcKaW5kZXggODg5OTIyYS4uNjdiNWFiYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnCkBAIC0xNTcsNyArMTU3LDcgQEAKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9bQotQ09ORklHX1JUQ19DTEFTUz1tCitDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKIENPTkZJR19YRlNfRlM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uZXR4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmV0eF9kZWZjb25maWcKaW5kZXggMzE2YWY1NC4uOWMwYWQ3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uZXR4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25ldHhfZGVmY29uZmlnCkBAIC02MCw3ICs2MCw3IEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfTE9HTz15Ci1DT05GSUdfUlRDX0NMQVNTPW0KK0NPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19KRkZTMl9GUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3ZpcGVyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnCmluZGV4IDhiMGM3MTcuLjFkMDFkZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnCkBAIC0xNDIsNyArMTQyLDcgQEAKIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KIENPTkZJR19VU0JfR19TRVJJQUw9bQogQ09ORklHX1VTQl9HX1BSSU5URVI9bQotQ09ORklHX1JUQ19DTEFTUz1tCitDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0RTMTMwNz1tCiBDT05GSUdfUlRDX0RSVl9TQTExMDA9bQogQ09ORklHX0VYVDJfRlM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKaW5kZXggNWI1NTA0MS4uNzIxODMyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3hjZXBfZGVmY29uZmlnCkBAIC03Myw3ICs3Myw3IEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0NMQVNTPW0KK0NPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfU0ExMTAwPW0KIENPTkZJR19ETUFERVZJQ0VTPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvemV1c19kZWZjb25maWcKaW5kZXggOTYwZjY1NS4uNTk1NzdhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3pldXNfZGVmY29uZmlnCkBAIC0xNTgsNyArMTU4LDcgQEAKIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUPW0KIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTz1tCiBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049bQotQ09ORklHX1JUQ19DTEFTUz1tCitDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0lTTDEyMDg9bQogQ09ORklHX1JUQ19EUlZfUFhBPW0KIENPTkZJR19FWFQyX0ZTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9kZXZ0cmVlLmMgYi9hcmNoL2FybS9rZXJuZWwvZGV2dHJlZS5jCmluZGV4IGE3MDFlNDIuLjBjZGQ3YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9kZXZ0cmVlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2RldnRyZWUuYwpAQCAtNzYsNiArNzYsOSBAQAogCXVuc2lnbmVkIGxvbmcgZHRfcm9vdDsKIAljb25zdCBjaGFyICptb2RlbDsKIAorCWlmICghZHRfcGh5cykKKwkJcmV0dXJuIE5VTEw7CisKIAlkZXZ0cmVlID0gcGh5c190b192aXJ0KGR0X3BoeXMpOwogCiAJLyogY2hlY2sgZGV2aWNlIHRyZWUgdmFsaWRpdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCmluZGV4IGU4ZDg4NTYuLjkwYzYyY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtNDM1LDYgKzQzNSwxMCBAQAogCXVzcl9lbnRyeQogCWt1c2VyX2NtcHhjaGdfY2hlY2sKIAorI2lmZGVmIENPTkZJR19JUlFTT0ZGX1RSQUNFUgorCWJsCXRyYWNlX2hhcmRpcnFzX29mZgorI2VuZGlmCisKIAlnZXRfdGhyZWFkX2luZm8gdHNrCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIAlsZHIJcjgsIFt0c2ssICNUSV9QUkVFTVBUXQkJQCBnZXQgcHJlZW1wdCBjb3VudApAQCAtNDUzLDcgKzQ1Nyw3IEBACiAjZW5kaWYKIAogCW1vdgl3aHksICMwCi0JYglyZXRfdG9fdXNlcgorCWIJcmV0X3RvX3VzZXJfZnJvbV9pcnEKICBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9faXJxX3VzcikKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IDFlN2IwNGEuLmIyYTI3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTY0LDYgKzY0LDcgQEAKIEVOVFJZKHJldF90b191c2VyKQogcmV0X3Nsb3dfc3lzY2FsbDoKIAlkaXNhYmxlX2lycQkJCQlAIGRpc2FibGUgaW50ZXJydXB0cworRU5UUlkocmV0X3RvX3VzZXJfZnJvbV9pcnEpCiAJbGRyCXIxLCBbdHNrLCAjVElfRkxBR1NdCiAJdHN0CXIxLCAjX1RJRl9XT1JLX01BU0sKIAlibmUJd29ya19wZW5kaW5nCkBAIC03NSw2ICs3Niw3IEBACiAJYXJjaF9yZXRfdG9fdXNlciByMSwgbHIKIAogCXJlc3RvcmVfdXNlcl9yZWdzIGZhc3QgPSAwLCBvZmZzZXQgPSAwCitFTkRQUk9DKHJldF90b191c2VyX2Zyb21faXJxKQogRU5EUFJPQyhyZXRfdG9fdXNlcikKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggZDUyZWVjMi4uNjgwN2NiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCWZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7CiAKLQlmb3IgKGkgPSAtNDsgaSA8IDE7IGkrKykgeworCWZvciAoaSA9IC00OyBpIDwgMSArICEhdGh1bWI7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdmFsLCBiYWQ7CiAKIAkJaWYgKHRodW1iKQpAQCAtNTYzLDcgKzU2Myw3IEBACiAJCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCiAJCQlnb3RvIGJhZF9hY2Nlc3M7CiAJCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgYWRkciwgJnB0bCk7Ci0JCWlmICghcHRlX3ByZXNlbnQoKnB0ZSkgfHwgIXB0ZV9kaXJ0eSgqcHRlKSkgeworCQlpZiAoIXB0ZV9wcmVzZW50KCpwdGUpIHx8ICFwdGVfd3JpdGUoKnB0ZSkgfHwgIXB0ZV9kaXJ0eSgqcHRlKSkgewogCQkJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CiAJCQlnb3RvIGJhZF9hY2Nlc3M7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCmluZGV4IDRlNjY4ODEuLmZjNGU5OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJLnJlc291cmNlCT0gZGE4NTBfbWNhc3BfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYXZpbmNpX3BjbV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYXZpbmNpX3BjbV9kZXZpY2UgPSB7CiAJLm5hbWUJPSAiZGF2aW5jaS1wY20tYXVkaW8iLAogCS5pZAk9IC0xLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy5jCmluZGV4IDhmNGY3MzYuLjgwNmEyZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGF2aW5jaV9wY21fZGV2aWNlID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGF2aW5jaV9wY21fZGV2aWNlID0gewogCS5uYW1lCQk9ICJkYXZpbmNpLXBjbS1hdWRpbyIsCiAJLmlkCQk9IC0xLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZ3Bpby5jCmluZGV4IGEwYjgzODguLmU3MjIxMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2dwaW8uYwpAQCAtMjUyLDkgKzI1MiwxMSBAQAogc3RhdGljIHZvaWQKIGdwaW9faXJxX2hhbmRsZXIodW5zaWduZWQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IGRhdmluY2lfZ3Bpb19yZWdzIF9faW9tZW0gKmcgPSBpcnEycmVncyhpcnEpOworCXN0cnVjdCBkYXZpbmNpX2dwaW9fcmVncyBfX2lvbWVtICpnOwogCXUzMiBtYXNrID0gMHhmZmZmOwogCisJZyA9IChfX2ZvcmNlIHN0cnVjdCBkYXZpbmNpX2dwaW9fcmVncyBfX2lvbWVtICopIGlycV9kZXNjX2dldF9oYW5kbGVyX2RhdGEoZGVzYyk7CisKIAkvKiB3ZSBvbmx5IGNhcmUgYWJvdXQgb25lIGJhbmsgKi8KIAlpZiAoaXJxICYgMSkKIAkJbWFzayA8PD0gMTY7CkBAIC00MjIsOCArNDI0LDcgQEAKIAogCQkvKiBzZXQgdXAgYWxsIGlycXMgaW4gdGhpcyBiYW5rICovCiAJCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKGJhbmtfaXJxLCBncGlvX2lycV9oYW5kbGVyKTsKLQkJaXJxX3NldF9jaGlwX2RhdGEoYmFua19pcnEsIChfX2ZvcmNlIHZvaWQgKilnKTsKLQkJaXJxX3NldF9oYW5kbGVyX2RhdGEoYmFua19pcnEsICh2b2lkICopaXJxKTsKKwkJaXJxX3NldF9oYW5kbGVyX2RhdGEoYmFua19pcnEsIChfX2ZvcmNlIHZvaWQgKilnKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMTYgJiYgZ3BpbyA8IG5ncGlvOyBpKyssIGlycSsrLCBncGlvKyspIHsKIAkJCWlycV9zZXRfY2hpcChpcnEsICZncGlvX2lycWNoaXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IDgyMDc5NTQuLjFkNGI2NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTQwMiwxMSArNDAyLDE1IEBACiAJfQogfTsKIAorc3RhdGljIHU2NCBlcDkzeHhfZXRoX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X2V0aF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImVwOTN4eC1ldGgiLAogCS5pZAkJPSAtMSwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZXA5M3h4X2V0aF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZXA5M3h4X2V0aF9kYXRhLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkuZG1hX21hc2sJCT0gJmVwOTN4eF9ldGhfZG1hX21hc2ssCiAJfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXA5M3h4X2V0aF9yZXNvdXJjZSksCiAJLnJlc291cmNlCT0gZXA5M3h4X2V0aF9yZXNvdXJjZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L0tjb25maWcKaW5kZXggYjkyYzFlNS4uMTQzNWZjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L0tjb25maWcKQEAgLTkxLDYgKzkxLDExIEBACiAJaGVscAogCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIHRoZSBjYW1lcmEgaW50ZXJmYWNlcy4KIAorY29uZmlnIEVYWU5PUzRfU0VUVVBfVVNCX1BIWQorCWJvb2wKKwloZWxwCisJICBDb21tb24gc2V0dXAgY29kZSBmb3IgVVNCIFBIWSBjb250cm9sbGVyCisKICMgbWFjaGluZSBzdXBwb3J0CiAKIG1lbnUgIkVYWU5PUzQgTWFjaGluZXMiCkBAIC0xNzYsNiArMTgxLDcgQEAKIAlzZWxlY3QgRVhZTk9TNF9TRVRVUF9JMkMzCiAJc2VsZWN0IEVYWU5PUzRfU0VUVVBfSTJDNQogCXNlbGVjdCBFWFlOT1M0X1NFVFVQX1NESENJCisJc2VsZWN0IEVYWU5PUzRfU0VUVVBfVVNCX1BIWQogCXNlbGVjdCBTQU1TVU5HX0RFVl9QV00KIAloZWxwCiAJICBNYWNoaW5lIHN1cHBvcnQgZm9yIFNhbXN1bmcgTW9iaWxlIE5VUkkgQm9hcmQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvTWFrZWZpbGUKaW5kZXggYTliYjk0Zi4uNjBmZTVlY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvTWFrZWZpbGUKQEAgLTU2LDQgKzU2LDQgQEAKIG9iai0kKENPTkZJR19FWFlOT1M0X1NFVFVQX1NESENJKQkrPSBzZXR1cC1zZGhjaS5vCiBvYmotJChDT05GSUdfRVhZTk9TNF9TRVRVUF9TREhDSV9HUElPKQkrPSBzZXR1cC1zZGhjaS1ncGlvLm8KIAotb2JqLSQoQ09ORklHX1VTQl9TVVBQT1JUKQkJKz0gdXNiLXBoeS5vCitvYmotJChDT05GSUdfRVhZTk9TNF9TRVRVUF9VU0JfUEhZKQkrPSBzZXR1cC11c2ItcGh5Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jcHUuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jcHUuYwppbmRleCAwODgxM2E2Li45YmFiZTQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvY3B1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2NwdS5jCkBAIC05OCw3ICs5OCw3IEBACiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX1VTQl9IU1BIWSwKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfVVNCX0hTUEhZLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9IU1BIWSksCiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy11c2ItcGh5LmggYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtdXNiLXBoeS5oCmluZGV4IDcwMzExOGQuLmMzMzdjZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy11c2ItcGh5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLXVzYi1waHkuaApAQCAtMTEsNyArMTEsNyBAQAogI2lmbmRlZiBfX1BMQVRfUzVQX1JFR1NfVVNCX1BIWV9ICiAjZGVmaW5lIF9fUExBVF9TNVBfUkVHU19VU0JfUEhZX0gKIAotI2RlZmluZSBFWFlOT1M0X0hTT1RHX1BIWVJFRyh4KQkJKCh4KSArIFM1UF9WQV9VU0JfSFNQSFkpCisjZGVmaW5lIEVYWU5PUzRfSFNPVEdfUEhZUkVHKHgpCQkoKHgpICsgUzNDX1ZBX1VTQl9IU1BIWSkKIAogI2RlZmluZSBFWFlOT1M0X1BIWVBXUgkJCUVYWU5PUzRfSFNPVEdfUEhZUkVHKDB4MDApCiAjZGVmaW5lIFBIWTFfSFNJQ19OT1JNQUxfTUFTSwkJKDB4ZiA8PCA5KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3VzYi1waHkuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC11c2ItcGh5LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtZXh5bm9zNC91c2ItcGh5LmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC11c2ItcGh5LmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvdGltZS5jCmluZGV4IDg2YjlmYTAuLmViYjhmMzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3RpbWUuYwpAQCAtMjA2LDYgKzIwNiw3IEBACiAJcmV0dXJuIChjeWNsZV90KSB+X19yYXdfcmVhZGwoUzNDX1RJTUVSUkVHKDB4NDApKTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHZvaWQgZXh5bm9zNF9wd200X3Jlc3VtZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCXVuc2lnbmVkIGxvbmcgcGNsazsKQEAgLTIxOCw2ICsyMTksNyBAQAogCWV4eW5vczRfcHdtX2luaXQoNCwgfjApOwogCWV4eW5vczRfcHdtX3N0YXJ0KDQsIDEpOwogfQorI2VuZGlmCiAKIHN0cnVjdCBjbG9ja3NvdXJjZSBwd21fY2xvY2tzb3VyY2UgPSB7CiAJLm5hbWUJCT0gInB3bV90aW1lcjQiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKaW5kZXggNWYxZjk4Ni4uMTIxYWQxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jCkBAIC0xMDMsNiArMTAzLDcgQEAKIAljbG9ja2V2ZW50c19jYWxjX211bHRfc2hpZnQoY2UsIG1lbV9mY2xrXzIxMjg1LCA1KTsKIAljZS0+bWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweGZmZmZmZiwgY2UpOwogCWNlLT5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4MDAwMDA0LCBjZSk7CisJY2UtPmNwdW1hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2UpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDMwYjk3MWQuLjFiZTJlZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgogCiAjZWxzZQorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAkvKiBGb3IgRUJTQTI4NSBkZWJ1Z2dpbmcgKi8KIAkJLmVxdQlkYzIxMjg1X2hpZ2gsIEFSTUNTUl9CQVNFICYgMHhmZjAwMDAwMAogCQkuZXF1CWRjMjEyODVfbG93LCAgQVJNQ1NSX0JBU0UgJiAweDAwZmZmZmZmCkBAIC0zNiw4ICszNyw4IEBACiAJCS5lbHNlCiAJCW1vdglccnAsICMwCiAJCS5lbmRpZgotCQlvcnIJXHJ2LCBccnAsICMweDQyMDAwMDAwCi0JCW9ycglccnAsIFxycCwgI2RjMjEyODVfaGlnaAorCQlvcnIJXHJ2LCBccnAsICNkYzIxMjg1X2hpZ2gKKwkJb3JyCVxycCwgXHJwLCAjMHg0MjAwMDAwMAogCQkuZW5kbQogCiAJCS5tYWNybwlzZW5kdWFydCxyZCxyeApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvb2NvdHAuYyBiL2FyY2gvYXJtL21hY2gtbXhzL29jb3RwLmMKaW5kZXggNjUxNTdhMy4uNTRhZGQ2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvb2NvdHAuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9vY290cC5jCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JLyogZm9yIGNwdV9yZWxheCgpICovCisKICNpbmNsdWRlIDxtYWNoL214cy5oPgogCiAjZGVmaW5lIE9DT1RQX1dPUkRfT0ZGU0VUCQkweDIwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYwppbmRleCBkODU1OTM0Li5mNWE1MjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMKQEAgLTI4NCwxNCArMjg0LDE1IEBACiAJZG1hX2Jhc2UgPSBpb3JlbWFwKHJlc1swXS5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmcmVzWzBdKSk7CiAJaWYgKCFkbWFfYmFzZSkgewogCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gaW9yZW1hcFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CiAJfQogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLCBBUlJBWV9TSVpFKHJlcykpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBhZGQgcmVzb3VyY2VzIGZvciAlcyVkXG4iLAogCQkJX19mdW5jX18sIHBkZXYtPm5hbWUsIHBkZXYtPmlkKTsKLQkJZ290byBleGl0X2RldmljZV9kZWw7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OwogCX0KIAogCXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9zeXN0ZW1fZG1hX3BsYXRfaW5mbyksIEdGUF9LRVJORUwpOwpAQCAtMjk5LDcgKzMwMCw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgJ3AnIGZvciAlc1xuIiwKIAkJCV9fZnVuY19fLCBwZGV2LT5uYW1lKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBleGl0X2RldmljZV9wdXQ7CisJCWdvdG8gZXhpdF9kZXZpY2VfZGVsOwogCX0KIAogCWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9kbWFfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKQEAgLTM4MCwxMCArMzgxLDEwIEBACiAJa2ZyZWUoZCk7CiBleGl0X3JlbGVhc2VfcDoKIAlrZnJlZShwKTsKLWV4aXRfZGV2aWNlX3B1dDoKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogZXhpdF9kZXZpY2VfZGVsOgogCXBsYXRmb3JtX2RldmljZV9kZWwocGRldik7CitleGl0X2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCmluZGV4IGQ1NDk2OWIuLjVkZTZlYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCkBAIC0yNiwxMyArMjYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwppbmRleCBhZTI5NjNhLi41ZGFjOTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwpAQCAtNjIyLDE5ICs2MjIsMTkgQEAKIAkJCSBPTUFQX01VWF9NT0RFMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwxX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwxX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQJCT0gMCwKIAkucGFkcwkJPSBzZXJpYWwxX3BhZHMsCiAJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWwxX3BhZHMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhIF9faW5pdGRhdGEgPSB7CiAJLmlkCQk9IDEsCiAJLnBhZHMJCT0gc2VyaWFsMl9wYWRzLAogCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsMl9wYWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZAkJPSAyLAogCS5wYWRzCQk9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCmluZGV4IDczZmE5MGIuLjYzZGUyZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAl7IEVUSF9LUzg4NTFfSVJRLAlHUElPRl9JTiwJCSJldGhfaXJxIgl9LAogfTsKIAotc3RhdGljIGludCBvbWFwX2V0aGVybmV0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfZXRoZXJuZXRfaW5pdCh2b2lkKQogewogCWludCBzdGF0dXM7CiAKQEAgLTMyMiw2ICszMjIsNyBAQAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCiAJCS5ub25yZW1vdmFibGUgICA9IHRydWUsCiAJCS5vY3JfbWFzawk9IE1NQ19WRERfMjlfMzAsCisJCS5ub19vZmZfaW5pdAk9IHRydWUsCiAJfSwKIAl7CiAJCS5tbWMJCT0gMSwKQEAgLTY4MSwxOSArNjgyLDE5IEBACiAJCQkgT01BUF9QSU5fT1VUUFVUIHwgT01BUF9NVVhfTU9ERTApLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhIF9faW5pdGRhdGEgPSB7CiAJLmlkCQk9IDEsCiAJLnBhZHMJCT0gc2VyaWFsMl9wYWRzLAogCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsMl9wYWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZAkJPSAyLAogCS5wYWRzCQk9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQJCT0gMywKIAkucGFkcwkJPSBzZXJpYWw0X3BhZHMsCiAJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWw0X3BhZHMpLApAQCAtNzI5LDcgKzczMCw3IEBACiAKIAlpZiAob21hcF9yZXYoKSA9PSBPTUFQNDQzMF9SRVZfRVMxXzApCiAJCXBhY2thZ2UgPSBPTUFQX1BBQ0tBR0VfQ0JMOwotCW9tYXA0X211eF9pbml0KGJvYXJkX211eCwgcGFja2FnZSk7CisJb21hcDRfbXV4X2luaXQoYm9hcmRfbXV4LCBOVUxMLCBwYWNrYWdlKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwNDQzMF9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwNDQzMF9jb25maWcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwppbmRleCBmM2JlYjhlLi5iMTI0YmRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwpAQCAtMjcsMTMgKzI3LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2xlZC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKaW5kZXggYzYzMTE1Yi4uNzc0NTZkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCkBAIC02Myw4ICs2Myw2IEBACiAjZGVmaW5lIFNCX1QzNV9TTVNDOTExWF9DUwk0CiAjZGVmaW5lIFNCX1QzNV9TTVNDOTExWF9HUElPCTY1CiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KICNpZiBkZWZpbmVkKENPTkZJR19TTVNDOTExWCkgfHwgZGVmaW5lZChDT05GSUdfU01TQzkxMVhfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLXNtc2M5MTF4Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKaW5kZXggMDhmMDhlOC4uYzNhOWZkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYwpAQCAtNDgsNiArNDgsNyBAQAogCiAjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKICNpZiBkZWZpbmVkKENPTkZJR19MRURTX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfR1BJT19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGNtX3QzNTE3X2xlZHNbXSA9IHsKQEAgLTE3Nyw3ICsxNzgsNyBAQAogCS5yZXNldF9ncGlvX3BvcnRbMl0gID0gLUVJTlZBTCwKIH07CiAKLXN0YXRpYyBpbnQgY21fdDM1MTdfaW5pdF91c2JoKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjbV90MzUxN19pbml0X3VzYmgodm9pZCkKIHsKIAlpbnQgZXJyOwogCkBAIC0yMDMsOCArMjA0LDYgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX09NQVAyX01PRFVMRSkKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV90MzUxN19uYW5kX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgICAgICA9ICJ4bG9hZGVyIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKaW5kZXggY2Y1MjBkNy4uMzQ5NTZlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTYxLDggKzYxLDYgQEAKICNpbmNsdWRlICJ0aW1lci1ncC5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KICNkZWZpbmUgT01BUF9ETTkwMDBfR1BJT19JUlEJMjUKICNkZWZpbmUgT01BUDNfREVWS0lUX1RTX0dQSU8JMjcKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IGJlNzE0MjYuLjdmMjFkMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTU0LDggKzU0LDYgQEAKICNpbmNsdWRlICJwbS5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KIC8qCiAgKiBPTUFQMyBCZWFnbGUgcmV2aXNpb24KICAqIFJ1biB0aW1lIGRldGVjdGlvbiBvZiBCZWFnbGUgcmV2aXNpb24gaXMgZG9uZSBieSByZWFkaW5nIEdQSU8uCkBAIC0xMDYsNiArMTA0LDkgQEAKIAliZWFnbGVfcmV2ID0gZ3Bpb19nZXRfdmFsdWUoMTcxKSB8IChncGlvX2dldF92YWx1ZSgxNzIpIDw8IDEpCiAJCQl8IChncGlvX2dldF92YWx1ZSgxNzMpIDw8IDIpOwogCisJZ3Bpb19mcmVlX2FycmF5KG9tYXAzX2JlYWdsZV9yZXZfZ3Bpb3MsCisJCQlBUlJBWV9TSVpFKG9tYXAzX2JlYWdsZV9yZXZfZ3Bpb3MpKTsKKwogCXN3aXRjaCAoYmVhZ2xlX3JldikgewogCWNhc2UgNzoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUDMgQmVhZ2xlIFJldjogQXgvQnhcbiIpOwpAQCAtNTc5LDYgKzU4MCw5IEBACiAJb21hcF9uYW5kX2ZsYXNoX2luaXQoTkFORF9CVVNXSURUSF8xNiwgb21hcDNiZWFnbGVfbmFuZF9wYXJ0aXRpb25zLAogCQkJICAgICBBUlJBWV9TSVpFKG9tYXAzYmVhZ2xlX25hbmRfcGFydGl0aW9ucykpOwogCisJLyogRW5zdXJlIG1zZWN1cmUgaXMgbXV4J2QgdG8gYmUgYWJsZSB0byBzZXQgdGhlIFJUQy4gKi8KKwlvbWFwX211eF9pbml0X3NpZ25hbCgic3lzX2RybV9tc2VjdXJlIiwgT01BUF9QSU5fT0ZGX09VVFBVVF9ISUdIKTsKKwogCS8qIEVuc3VyZSBTRFJDIHBpbnMgYXJlIG11eCdkIGZvciBzZWxmLXJlZnJlc2ggKi8KIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UwIiwgT01BUF9QSU5fT1VUUFVUKTsKIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UxIiwgT01BUF9QSU5fT1VUUFVUKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IDFkMTA3MzYuLjJhMGJiNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgpAQCAtNDEsNyArNDIsNiBAQAogCiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgpAQCAtNTcsOCArNTcsNiBAQAogI2RlZmluZSBQQU5ET1JBX1dJRklfTlJFU0VUX0dQSU8JMjMKICNkZWZpbmUgT01BUDNfUEFORE9SQV9UU19HUElPCQk5NAogCi0jZGVmaW5lIE5BTkRfQkxPQ0tfU0laRQkJCVNaXzEyOEsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9tYXAzcGFuZG9yYV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgICAgICA9ICJ4bG9hZGVyIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYwppbmRleCA4Mjg3MmQ3Li41ZjY0OWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCkBAIC01Niw4ICs1Niw2IEBACiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAotI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKLQogI2RlZmluZSBPTUFQM19BQ19HUElPCQkxMzYKICNkZWZpbmUgT01BUDNfVFNfR1BJTwkJMTYyCiAjZGVmaW5lIFRCX0JMX1BXTV9USU1FUgkJOQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwppbmRleCA5MDQ4NWZjLi4wY2ZlMjAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwpAQCAtNTI2LDE5ICs1MjYsMTkgQEAKIAkJCSBPTUFQX1BJTl9PVVRQVVQgfCBPTUFQX01VWF9NT0RFMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAxLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDJfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDJfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwzX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwzX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAyLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAzLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDRfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDRfcGFkcyksCkBAIC02ODcsNyArNjg3LDcgQEAKIAogCWlmIChvbWFwX3JldigpID09IE9NQVA0NDMwX1JFVl9FUzFfMCkKIAkJcGFja2FnZSA9IE9NQVBfUEFDS0FHRV9DQkw7Ci0Jb21hcDRfbXV4X2luaXQoYm9hcmRfbXV4LCBwYWNrYWdlKTsKKwlvbWFwNF9tdXhfaW5pdChib2FyZF9tdXgsIE5VTEwsIHBhY2thZ2UpOwogCiAJaWYgKHdsMTJ4eF9zZXRfcGxhdGZvcm1fZGF0YSgmb21hcF9wYW5kYV93bGFuX2RhdGEpKQogCQlwcl9lcnIoImVycm9yIHNldHRpbmcgd2wxMnh4IGRhdGFcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCmluZGV4IDE1NTU5MTguLjE3NWUxYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8dmlkZW8vb21hcGRzcy5oPgogI2luY2x1ZGUgPHZpZGVvL29tYXAtcGFuZWwtZ2VuZXJpYy1kcGkuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CkBAIC02NSw4ICs2NSw2IEBACiAjZGVmaW5lIE9WRVJPX0dQSU9fVVNCSF9DUEVOCTE2OAogI2RlZmluZSBPVkVST19HUElPX1VTQkhfTlJFU0VUCTE4MwogCi0jZGVmaW5lIE5BTkRfQkxPQ0tfU0laRSBTWl8xMjhLCi0KICNkZWZpbmUgT1ZFUk9fU01TQzkxMVhfQ1MgICAgICA1CiAjZGVmaW5lIE9WRVJPX1NNU0M5MTFYX0dQSU8gICAgMTc2CiAjZGVmaW5lIE9WRVJPX1NNU0M5MTFYMl9DUyAgICAgNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwppbmRleCBmNjI0N2U3Li45OTAzNjY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtNDg4LDYgKzQ4OCw3IEBACiAJCS5uYW1lCQkJPSAiVjI4X0EiLAogCQkubWluX3VWCQkJPSAyODAwMDAwLAogCQkubWF4X3VWCQkJPSAzMDAwMDAwLAorCQkuYWx3YXlzX29uCQk9IHRydWUsIC8qIGR1ZSBWSU8gbGVhayB0byBBSUMzNCBWRERzICovCiAJCS5hcHBseV91VgkJPSB0cnVlLAogCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAogCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCkBAIC01ODIsNyArNTgzLDcgQEAKIHsKIAkvKiBGSVhNRSB0aGlzIGdwaW8gc2V0dXAgaXMganVzdCBhIHBsYWNlaG9sZGVyIGZvciBub3cgKi8KIAlncGlvX3JlcXVlc3Rfb25lKGdwaW8gKyA2LCBHUElPRl9PVVRfSU5JVF9MT1csICJiYWNrbGlnaHRfcHdtIik7Ci0JZ3Bpb19yZXF1ZXN0X29uZShncGlvICsgNywgR1BJT0ZfT1VUX0lOSVRfSElHSCwgInNwZWFrZXJfZW4iKTsKKwlncGlvX3JlcXVlc3Rfb25lKGdwaW8gKyA3LCBHUElPRl9PVVRfSU5JVF9MT1csICJzcGVha2VyX2VuIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1kaXNwbGF5LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20tZGlzcGxheS5jCmluZGV4IGM3YzZiZWIuLmQ0NjgzYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1kaXNwbGF5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLWRpc3BsYXkuYwpAQCAtMjYsNyArMjYsNyBAQAogCXsgTENEX1BBTkVMX1FWR0FfR1BJTywJR1BJT0ZfT1VUX0lOSVRfSElHSCwgImxjZCBxdmdhIgkgfSwKIH07CiAKLXN0YXRpYyB2b2lkIHpvb21fbGNkX3BhbmVsX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCB6b29tX2xjZF9wYW5lbF9pbml0KHZvaWQpCiB7CiAJem9vbV9sY2RfZ3Bpb3NbMF0uZ3BpbyA9IChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTM18wKSA/CiAJCQlMQ0RfUEFORUxfUkVTRVRfR1BJT19QUk9EIDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuYwppbmRleCBlOTQ5MDNiLi45NGNjZjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24tYm9hcmQtZGV2aWNlcy5jCkBAIC04NSwxOCArODUsMTggQEAKIAlzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKnNwaV9iaSA9ICZhZHM3ODQ2X3NwaV9ib2FyZF9pbmZvOwogCWludCBlcnI7CiAKLQllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb19wZW5kb3duLCAiVFMgUGVuRG93biIpOwotCWlmIChlcnIpIHsKLQkJcHJfZXJyKCJDb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yIFRTIFBlbkRvd246ICVkXG4iLCBlcnIpOwotCQlyZXR1cm47CisJaWYgKGJvYXJkX3BkYXRhICYmIGJvYXJkX3BkYXRhLT5nZXRfcGVuZG93bl9zdGF0ZSkgeworCQllcnIgPSBncGlvX3JlcXVlc3Rfb25lKGdwaW9fcGVuZG93biwgR1BJT0ZfSU4sICJUU1BlbkRvd24iKTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJyKCJDb3VsZG4ndCBvYnRhaW4gZ3BpbyBmb3IgVFNQZW5Eb3duOiAlZFxuIiwgZXJyKTsKKwkJCXJldHVybjsKKwkJfQorCQlncGlvX2V4cG9ydChncGlvX3BlbmRvd24sIDApOworCisJCWlmIChncGlvX2RlYm91bmNlKQorCQkJZ3Bpb19zZXRfZGVib3VuY2UoZ3Bpb19wZW5kb3duLCBncGlvX2RlYm91bmNlKTsKIAl9CiAKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX3BlbmRvd24pOwotCWdwaW9fZXhwb3J0KGdwaW9fcGVuZG93biwgMCk7Ci0KLQlpZiAoZ3Bpb19kZWJvdW5jZSkKLQkJZ3Bpb19zZXRfZGVib3VuY2UoZ3Bpb19wZW5kb3duLCBncGlvX2RlYm91bmNlKTsKLQogCWFkczc4NDZfY29uZmlnLmdwaW9fcGVuZG93biA9IGdwaW9fcGVuZG93bjsKIAogCXNwaV9iaS0+YnVzX251bQk9IGJ1c19udW07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmgKaW5kZXggZWI4MGIzYi4uNjc5NzE5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24tYm9hcmQtZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX19PTUFQX0NPTU1PTl9CT0FSRF9ERVZJQ0VTX18KICNkZWZpbmUgX19PTUFQX0NPTU1PTl9CT0FSRF9ERVZJQ0VTX18KIAorI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJU1pfMTI4SworCiBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhOwogc3RydWN0IG10ZF9wYXJ0aXRpb247CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggN2I4NTU4NS4uNWI4Y2E2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAogCVdBUk4oSVNfRVJSKG9kKSwgImNvdWxkIG5vdCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXNcbiIsIG9oX25hbWUpOwogCi0JcmV0dXJuIFBUUl9FUlIob2QpOworCXJldHVybiBJU19FUlIob2QpID8gUFRSX0VSUihvZCkgOiAwOwogfQogcG9zdGNvcmVfaW5pdGNhbGwob21hcDRfbDNfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYwppbmRleCBiMmYzMGJlLi42Njg2OGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIAkJCQkgaW50IHBvd2VyX29uLCBpbnQgdmRkKQogewogCXUzMiByZWc7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCiAJaWYgKHBvd2VyX29uKSB7CiAJCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKQEAgLTE1Nyw5ICsxNTgsMTUgQEAKIAkJCU9NQVA0X01NQzFfUFdSRE5aX01BU0sgfAogCQkJT01BUDRfVVNCQzFfSUNVU0JfUFdSRE5aX01BU0spOwogCQlvbWFwNF9jdHJsX3BhZF93cml0ZWwocmVnLCBjb250cm9sX3BiaWFzX29mZnNldCk7Ci0JCS8qIDQgbWljcm9zZWMgZGVsYXkgZm9yIGNvbXBhcmF0b3IgdG8gZ2VuZXJhdGUgYW4gZXJyb3IqLwotCQl1ZGVsYXkoNCk7Ci0JCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKworCQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNSk7CisJCWRvIHsKKwkJCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKwkJCWlmICghKHJlZyAmIE9NQVA0X01NQzFfUEJJQVNMSVRFX1ZNT0RFX0VSUk9SX01BU0spKQorCQkJCWJyZWFrOworCQkJdXNsZWVwX3JhbmdlKDEwMCwgMjAwKTsKKwkJfSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpOworCiAJCWlmIChyZWcgJiBPTUFQNF9NTUMxX1BCSUFTTElURV9WTU9ERV9FUlJPUl9NQVNLKSB7CiAJCQlwcl9lcnIoIlBiaWFzIFZvbHRhZ2UgaXMgbm90IHNhbWUgYXMgTERPXG4iKTsKIAkJCS8qIENhdXRpb24gOiBPbiBWTU9ERV9FUlJPUiBQb3dlciBEb3duIE1NQyBJTyAqLwpAQCAtMzMxLDYgKzMzOCw5IEBACiAJaWYgKGMtPm5vX29mZikKIAkJbW1jLT5zbG90c1swXS5ub19vZmYgPSAxOwogCisJaWYgKGMtPm5vX29mZl9pbml0KQorCQltbWMtPnNsb3RzWzBdLm5vX3JlZ3VsYXRvcl9vZmZfaW5pdCA9IGMtPm5vX29mZl9pbml0OworCiAJaWYgKGMtPnZjY19hdXhfZGlzYWJsZV9pc19zbGVlcCkKIAkJbW1jLT5zbG90c1swXS52Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXAgPSAxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmgKaW5kZXggZjExOTM0OC4uZjc1N2U3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaApAQCAtMTgsNiArMTgsNyBAQAogCWJvb2wJbm9ucmVtb3ZhYmxlOwkvKiBOb25yZW1vdmFibGUgZS5nLiBlTU1DICovCiAJYm9vbAlwb3dlcl9zYXZpbmc7CS8qIFRyeSB0byBzbGVlcCBvciBwb3dlciBvZmYgd2hlbiBwb3NzaWJsZSAqLwogCWJvb2wJbm9fb2ZmOwkJLyogcG93ZXJfc2F2aW5nIGFuZCBwb3dlciBpcyBub3QgdG8gZ28gb2ZmICovCisJYm9vbAlub19vZmZfaW5pdDsJLyogbm8gcG93ZXIgb2ZmIHdoZW4gbm90IGluIE1NQyBzbGVlcCBzdGF0ZSAqLwogCWJvb2wJdmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwOyAvKiBSZWd1bGF0b3Igb2ZmIHJlbWFwcGVkIHRvIHNsZWVwICovCiAJaW50CWdwaW9fY2Q7CS8qIG9yIC1FSU5WQUwgKi8KIAlpbnQJZ3Bpb193cDsJLyogb3IgLUVJTlZBTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggYTRhYjFlMy4uYzdmYjIyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC04Myw2ICs4Myw5IEBACiB2b2lkIG9tYXBfbXV4X3dyaXRlX2FycmF5KHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiwKIAkJCQkgc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgpCiB7CisJaWYgKCFib2FyZF9tdXgpCisJCXJldHVybjsKKwogCXdoaWxlIChib2FyZF9tdXgtPnJlZ19vZmZzZXQgIT0gT01BUF9NVVhfVEVSTUlOQVRPUikgewogCQlvbWFwX211eF93cml0ZShwYXJ0aXRpb24sIGJvYXJkX211eC0+dmFsdWUsCiAJCQkgICAgICAgYm9hcmRfbXV4LT5yZWdfb2Zmc2V0KTsKQEAgLTkwNiw3ICs5MDksNyBAQAogdTE2IG9tYXBfbXV4X2dldF9ncGlvKGludCBncGlvKQogewogCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbjsKLQlzdHJ1Y3Qgb21hcF9tdXggKm07CisJc3RydWN0IG9tYXBfbXV4ICptID0gTlVMTDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGFydGl0aW9uLCAmbXV4X3BhcnRpdGlvbnMsIG5vZGUpIHsKIAkJbSA9IG9tYXBfbXV4X2dldF9ieV9ncGlvKHBhcnRpdGlvbiwgZ3Bpbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaAppbmRleCAxMzdmMzIxLi4yMTMyMzA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmgKQEAgLTMyMywxMCArMzIzLDEyIEBACiAKIC8qKgogICogb21hcDRfbXV4X2luaXQoKSAtIGluaXRpYWxpemUgbXV4IHN5c3RlbSB3aXRoIGJvYXJkIHNwZWNpZmljIHNldAotICogQGJvYXJkX211eDoJCUJvYXJkIHNwZWNpZmljIG11eCB0YWJsZQorICogQGJvYXJkX3N1YnNldDoJQm9hcmQgc3BlY2lmaWMgbXV4IHRhYmxlCisgKiBAYm9hcmRfd2t1cF9zdWJzZXQ6CUJvYXJkIHNwZWNpZmljIG11eCB0YWJsZSBmb3Igd2FrZXVwIGluc3RhbmNlCiAgKiBAZmxhZ3M6CQlPTUFQIHBhY2thZ2UgdHlwZSB1c2VkIGZvciB0aGUgYm9hcmQKICAqLwotaW50IG9tYXA0X211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4LCBpbnQgZmxhZ3MpOworaW50IG9tYXA0X211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfc3Vic2V0LAorCXN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfd2t1cF9zdWJzZXQsIGludCBmbGFncyk7CiAKIC8qKgogICogb21hcF9tdXhfaW5pdCAtIHByaXZhdGUgbXV4IGluaXQgZnVuY3Rpb24sIGRvIG5vdCBjYWxsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCmluZGV4IDlhNjY0NDUuLmY1YTc0ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCkBAIC0xMzA5LDcgKzEzMDksOCBAQAogI2RlZmluZSBvbWFwNF93a3VwX2NibF9jYnNfYmFsbCAgTlVMTAogI2VuZGlmCiAKLWludCBfX2luaXQgb21hcDRfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9zdWJzZXQsIGludCBmbGFncykKK2ludCBfX2luaXQgb21hcDRfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9zdWJzZXQsCisJc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF93a3VwX3N1YnNldCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHNfY29yZTsKIAlzdHJ1Y3Qgb21hcF9iYWxsICpwYWNrYWdlX2JhbGxzX3drdXAgPSBvbWFwNF93a3VwX2NibF9jYnNfYmFsbDsKQEAgLTEzNDcsNyArMTM0OCw3IEBACiAJCQkgICAgT01BUF9NVVhfR1BJT19JTl9NT0RFMywKIAkJCSAgICBPTUFQNF9DVFJMX01PRFVMRV9QQURfV0tVUF9NVVhfUEJBU0UsCiAJCQkgICAgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1dLVVBfTVVYX1NJWkUsCi0JCQkgICAgb21hcDRfd2t1cF9tdXhtb2RlcywgTlVMTCwgYm9hcmRfc3Vic2V0LAorCQkJICAgIG9tYXA0X3drdXBfbXV4bW9kZXMsIE5VTEwsIGJvYXJkX3drdXBfc3Vic2V0LAogCQkJICAgIHBhY2thZ2VfYmFsbHNfd2t1cCk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwppbmRleCBlMDM0Mjk0Li4yOTNmYTZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwpAQCAtMTYyOCw3ICsxNjI4LDcgQEAKIAkJCXZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG9tYXBfaHdtb2QgKnRlbXBfb2g7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICghZm4pCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCmluZGV4IGFiYzU0OGEuLmUxYzY5ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKQEAgLTUxMDksNyArNTEwOSw3IEBACiAJJm9tYXA0NHh4X2l2YV9zZXExX2h3bW9kLAogCiAJLyoga2JkIGNsYXNzICovCi0vKgkmb21hcDQ0eHhfa2JkX2h3bW9kLCAqLworCSZvbWFwNDR4eF9rYmRfaHdtb2QsCiAKIAkvKiBtYWlsYm94IGNsYXNzICovCiAJJm9tYXA0NHh4X21haWxib3hfaHdtb2QsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKaW5kZXggZjQ3ODEzZS4uNTg3NzVlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYwpAQCAtNTYsOCArNTYsMTAgQEAKIAkvKiBQb3dlciBkb3duIHRoZSBwaHkgKi8KIAlfX3Jhd193cml0ZWwoUEhZX1BELCBjdHJsX2Jhc2UgKyBDT05UUk9MX0RFVl9DT05GKTsKIAotCWlmICghZGV2KQorCWlmICghZGV2KSB7CisJCWlvdW5tYXAoY3RybF9iYXNlKTsKIAkJcmV0dXJuIDA7CisJfQogCiAJcGh5Y2xrID0gY2xrX2dldChkZXYsICJvY3Ayc2NwX3VzYl9waHlfaWNrIik7CiAJaWYgKElTX0VSUihwaHljbGspKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKaW5kZXggMGQ0NjhlOS4uODE2OTUzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQpAQCAtMTAsNyArMTAsNiBAQAogb2JqLQkJCQk6PQogCiBvYmotJChDT05GSUdfQ1BVX1MzQzI0MTApCSs9IHMzYzI0MTAubwotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwKQkrPSBpcnEubwogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwX0RNQSkJKz0gZG1hLm8KIG9iai0kKENPTkZJR19DUFVfUzNDMjQxMF9ETUEpCSs9IGRtYS5vCiBvYmotJChDT05GSUdfUzNDMjQxMF9QTSkJKz0gcG0ubyBzbGVlcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NTQxMjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvcG0uaD4KLQotc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0eHhfaXJxX3N5c2NvcmVfb3BzID0gewotCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY3B1ZnJlcS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2NwdWZyZXEuYwppbmRleCAyMjA0NmUyLi4xNTNhZjhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY3B1ZnJlcS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jcHVmcmVxLmMKQEAgLTEwMSwxMiArMTAxLDE0IEBACiAJdW5zaWduZWQgbG9uZyB0bXAsIHRtcDE7CiAJdm9pZCBfX2lvbWVtICpyZWcgPSBOVUxMOwogCi0JaWYgKGNoID09IERNQzApCisJaWYgKGNoID09IERNQzApIHsKIAkJcmVnID0gKFM1UF9WQV9ETUMwICsgMHgzMCk7Ci0JZWxzZSBpZiAoY2ggPT0gRE1DMSkKKwl9IGVsc2UgaWYgKGNoID09IERNQzEpIHsKIAkJcmVnID0gKFM1UF9WQV9ETUMxICsgMHgzMCk7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGZpbmQgRE1DIHBvcnRcbiIpOworCQlyZXR1cm47CisJfQogCiAJLyogRmluZCBjdXJyZW50IERSQU0gZnJlcXVlbmN5ICovCiAJdG1wID0gczVwdjIxMF9kcmFtX2NvbmZbY2hdLmZyZXE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYwppbmRleCBjOTUyNThjLi4xZTJhYmEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKQEAgLTM4MiwxMCArMzgyLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9pbmZvIHNoX3NkaGkxX3BsYXRkYXRhID0gewotCS5kbWFfc2xhdmVfdHgJPSBTSERNQV9TTEFWRV9TREhJMV9UWCwKLQkuZG1hX3NsYXZlX3J4CT0gU0hETUFfU0xBVkVfU0RISTFfUlgsCiAJLnRtaW9fZmxhZ3MJPSBUTUlPX01NQ19XUlBST1RFQ1RfRElTQUJMRSwKLQkudG1pb19jYXBzCT0gTU1DX0NBUF9OT05SRU1PVkFCTEUsCisJLnRtaW9fY2Fwcwk9IE1NQ19DQVBfTk9OUkVNT1ZBQkxFIHwgTU1DX0NBUF9TRElPX0lSUSwKIAkudG1pb19vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAogCS5zZXRfcHdyCT0gYWc1ZXZtX3NkaGkxX3NldF9wd3IsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMKaW5kZXggMDhhY2I2ZS4uZjZiNjg3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCkBAIC0yNDksNiArMjQ5LDI5IEBACiB7CiAJcmV0dXJuICFncGlvX2dldF92YWx1ZShHUElPX1BPUlQ0MSk7CiB9CisvKiBNRVJBTSAqLworc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbWVyYW1faW5mbyBtZXJhbV9pbmZvID0geworCS5hZGRyX21vZGUgICAgICA9IFNIX01PQklMRV9NRVJBTV9NT0RFMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWVyYW1fcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZSAgID0gIk1FUkFNIiwKKwkJLnN0YXJ0ICA9IDB4ZTgwMDAwMDAsCisJCS5lbmQgICAgPSAweGU4MWZmZmZmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1lcmFtX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2hfbW9iaWxlX21lcmFtIiwKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUobWVyYW1fcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICAgPSBtZXJhbV9yZXNvdXJjZXMsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZtZXJhbV9pbmZvLAorCX0sCit9OwogCiAvKiBTSF9NTUNJRiAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaF9tbWNpZl9yZXNvdXJjZXNbXSA9IHsKQEAgLTQ0NywxMyArNDcwLDI5IEBACiAjZW5kaWYKIAl9LAogfTsKK3N0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX21lcmFtX2NmZyBsY2RfbWVyYW1fY2ZnID0geworCS5pY2JbMF0gPSB7CisJCS5tYXJrZXJfaWNiICAgICA9IDI4LAorCQkuY2FjaGVfaWNiICAgICAgPSAyNCwKKwkJLm1lcmFtX29mZnNldCAgID0gMHgwLAorCQkubWVyYW1fc2l6ZSAgICAgPSAweDQwLAorCX0sCisJLmljYlsxXSA9IHsKKwkJLm1hcmtlcl9pY2IgICAgID0gMjksCisJCS5jYWNoZV9pY2IgICAgICA9IDI1LAorCQkubWVyYW1fb2Zmc2V0ICAgPSAweDQwLAorCQkubWVyYW1fc2l6ZSAgICAgPSAweDQwLAorCX0sCit9OwogCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkY19pbmZvID0geworCS5tZXJhbV9kZXYgPSAmbWVyYW1faW5mbywKIAkuY2hbMF0gPSB7CiAJCS5jaGFuID0gTENEQ19DSEFOX01BSU5MQ0QsCiAJCS5icHAgPSAxNiwKIAkJLmxjZF9jZmcgPSBhcDRldmJfbGNkY19tb2RlcywKIAkJLm51bV9jZmcgPSBBUlJBWV9TSVpFKGFwNGV2Yl9sY2RjX21vZGVzKSwKKwkJLm1lcmFtX2NmZyA9ICZsY2RfbWVyYW1fY2ZnLAogCX0KIH07CiAKQEAgLTcyNCwxNSArNzYzLDMxIEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmc2lfYWs0NjQzX2RldmljZSA9IHsKIAkubmFtZQkJPSAic2hfZnNpMl9hX2FrNDY0MyIsCiB9Oworc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbWVyYW1fY2ZnIGhkbWlfbWVyYW1fY2ZnID0geworCS5pY2JbMF0gPSB7CisJCS5tYXJrZXJfaWNiICAgICA9IDMwLAorCQkuY2FjaGVfaWNiICAgICAgPSAyNiwKKwkJLm1lcmFtX29mZnNldCAgID0gMHg4MCwKKwkJLm1lcmFtX3NpemUgICAgID0gMHgxMDAsCisJfSwKKwkuaWNiWzFdID0geworCQkubWFya2VyX2ljYiAgICAgPSAzMSwKKwkJLmNhY2hlX2ljYiAgICAgID0gMjcsCisJCS5tZXJhbV9vZmZzZXQgICA9IDB4MTgwLAorCQkubWVyYW1fc2l6ZSAgICAgPSAweDEwMCwKKwl9LAorfTsKIAogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIHNoX21vYmlsZV9sY2RjMV9pbmZvID0gewogCS5jbG9ja19zb3VyY2UgPSBMQ0RDX0NMS19FWFRFUk5BTCwKKwkubWVyYW1fZGV2ID0gJm1lcmFtX2luZm8sCiAJLmNoWzBdID0gewogCQkuY2hhbiA9IExDRENfQ0hBTl9NQUlOTENELAogCQkuYnBwID0gMTYsCiAJCS5pbnRlcmZhY2VfdHlwZSA9IFJHQjI0LAogCQkuY2xvY2tfZGl2aWRlciA9IDEsCiAJCS5mbGFncyA9IExDRENfRkxBR1NfRFdQT0wsCisJCS5tZXJhbV9jZmcgPSAmaGRtaV9tZXJhbV9jZmcsCiAJfQogfTsKIApAQCAtOTYxLDYgKzEwMTYsNyBAQAogCSZjc2kyX2RldmljZSwKIAkmY2V1X2RldmljZSwKIAkmYXA0ZXZiX2NhbWVyYSwKKwkmbWVyYW1fZGV2aWNlLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGhkbWlfaW5pdF9wbV9jbG9jayh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCmluZGV4IDQ0OGRkYmUuLjdlMWQzNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX2ludGMuaD4KICNpbmNsdWRlIDxsaW51eC90Y2E2NDE2X2tleXBhZC5oPgpAQCAtMTI1LDcgKzEyNiw3IEBACiAgKiAtLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQogICogSVJRMCAgfCBJQ1IxQS5JUlEwU0E9MDAxMCAgfCBTREhJMiBjYXJkIGRldGVjdCAgfCBMb3cKICAqIElSUTYgIHwgSUNSMUEuSVJRNlNBPTAwMTEgIHwgRXRoZXIoTEFOOTIyMCkgICAgIHwgSGlnaAotICogSVJRNyAgfCBJQ1IxQS5JUlE3U0E9MDAxMCAgfCBMQ0QgVHVjaCBQYW5lbCAgICAgfCBMb3cKKyAqIElSUTcgIHwgSUNSMUEuSVJRN1NBPTAwMTAgIHwgTENEIFRvdWNoIFBhbmVsICAgIHwgTG93CiAgKiBJUlE4ICB8IElDUjJBLklSUThTQT0wMDEwICB8IE1NQy9TRCBjYXJkIGRldGVjdCB8IExvdwogICogSVJROSAgfCBJQ1IyQS5JUlE5U0E9MDAxMCAgfCBLRVkoVENBNjQwOCkgICAgICAgfCBMb3cKICAqIElSUTIxIHwgSUNSNEEuSVJRMjFTQT0wMDExIHwgU2Vuc29yKEFEWEwzNDUpICAgIHwgSGlnaApAQCAtMTY0LDEwICsxNjUsMTAgQEAKICAqIFVTQjEgY2FuIGJlY29tZSBIb3N0IGJ5IHI4YTY2NTk3LCBhbmQgYmVjb21lIEZ1bmN0aW9uIGJ5IHJlbmVzYXNfdXNiaHMuCiAgKiBCdXQgZG9uJ3Qgc2VsZWN0IGJvdGggZHJpdmVycyBpbiBzYW1lIHRpbWUuCiAgKiBUaGVzZSB1c2VzIHNhbWUgSVJRIG51bWJlciBmb3IgcmVxdWVzdF9pcnEoKSwgYW5kIGFyZW4ndCBzdXBwb3J0aW5nCi0gKiBJUlFGX1NIQVJEIC8gSU9SRVNPVVJDRV9JUlFfU0hBUkVBQkxFLgorICogSVJRRl9TSEFSRUQgLyBJT1JFU09VUkNFX0lSUV9TSEFSRUFCTEUuCiAgKgogICogQWN0dWFsbHkgdGhlc2UgYXJlIG9sZC9uZXcgdmVyc2lvbiBvZiBVU0IgZHJpdmVyLgotICogVGhpcyBtZWFuIGl0cyByZWdpc3RlciB3aWxsIGJlIGJyb2tlbiBpZiBpdCBzdXBwb3J0cyBTSEFSRCBJUlEsCisgKiBUaGlzIG1lYW4gaXRzIHJlZ2lzdGVyIHdpbGwgYmUgYnJva2VuIGlmIGl0IHN1cHBvcnRzIHNoYXJlZCBJUlEsCiAgKi8KIAogLyoKQEAgLTMxNCw2ICszMTUsMzAgQEAKIAl9LAogfTsKIAorLyogTUVSQU0gKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX21lcmFtX2luZm8gbWFja2VyZWxfbWVyYW1faW5mbyA9IHsKKwkuYWRkcl9tb2RlCT0gU0hfTU9CSUxFX01FUkFNX01PREUxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtZXJhbV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIk1FUkFNIiwKKwkJLnN0YXJ0CT0gMHhlODAwMDAwMCwKKwkJLmVuZAk9IDB4ZTgxZmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtZXJhbV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX21vYmlsZV9tZXJhbSIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1lcmFtX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbWVyYW1fcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZtYWNrZXJlbF9tZXJhbV9pbmZvLAorCX0sCit9OworCiAvKiBMQ0RDICovCiBzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBtYWNrZXJlbF9sY2RjX21vZGVzW10gPSB7CiAJewpAQCAtMzQyLDcgKzM2NywyMyBAQAogCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX1BPUlQzMSk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX21lcmFtX2NmZyBsY2RfbWVyYW1fY2ZnID0geworCS5pY2JbMF0gPSB7CisJCS5tYXJrZXJfaWNiICAgICA9IDI4LAorCQkuY2FjaGVfaWNiICAgICAgPSAyNCwKKwkJLm1lcmFtX29mZnNldCAgID0gMHgwLAorCQkubWVyYW1fc2l6ZSAgICAgPSAweDQwLAorCX0sCisJLmljYlsxXSA9IHsKKwkJLm1hcmtlcl9pY2IgICAgID0gMjksCisJCS5jYWNoZV9pY2IgICAgICA9IDI1LAorCQkubWVyYW1fb2Zmc2V0ICAgPSAweDQwLAorCQkubWVyYW1fc2l6ZSAgICAgPSAweDQwLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkY19pbmZvID0geworCS5tZXJhbV9kZXYgPSAmbWFja2VyZWxfbWVyYW1faW5mbywKIAkuY2xvY2tfc291cmNlID0gTENEQ19DTEtfQlVTLAogCS5jaFswXSA9IHsKIAkJLmNoYW4gPSBMQ0RDX0NIQU5fTUFJTkxDRCwKQEAgLTM2Miw2ICs0MDMsNyBAQAogCQkJLm5hbWUgPSAic2hfbW9iaWxlX2xjZGNfYmwiLAogCQkJLm1heF9icmlnaHRuZXNzID0gMSwKIAkJfSwKKwkJLm1lcmFtX2NmZyA9ICZsY2RfbWVyYW1fY2ZnLAogCX0KIH07CiAKQEAgLTM4OCw4ICs0MzAsMjMgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbWVyYW1fY2ZnIGhkbWlfbWVyYW1fY2ZnID0geworCS5pY2JbMF0gPSB7CisJCS5tYXJrZXJfaWNiICAgICA9IDMwLAorCQkuY2FjaGVfaWNiICAgICAgPSAyNiwKKwkJLm1lcmFtX29mZnNldCAgID0gMHg4MCwKKwkJLm1lcmFtX3NpemUgICAgID0gMHgxMDAsCisJfSwKKwkuaWNiWzFdID0geworCQkubWFya2VyX2ljYiAgICAgPSAzMSwKKwkJLmNhY2hlX2ljYiAgICAgID0gMjcsCisJCS5tZXJhbV9vZmZzZXQgICA9IDB4MTgwLAorCQkubWVyYW1fc2l6ZSAgICAgPSAweDEwMCwKKwl9LAorfTsKIC8qIEhETUkgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfaW5mbyBoZG1pX2xjZGNfaW5mbyA9IHsKKwkubWVyYW1fZGV2ID0gJm1hY2tlcmVsX21lcmFtX2luZm8sCiAJLmNsb2NrX3NvdXJjZSA9IExDRENfQ0xLX0VYVEVSTkFMLAogCS5jaFswXSA9IHsKIAkJLmNoYW4gPSBMQ0RDX0NIQU5fTUFJTkxDRCwKQEAgLTM5Nyw2ICs0NTQsNyBAQAogCQkuaW50ZXJmYWNlX3R5cGUgPSBSR0IyNCwKIAkJLmNsb2NrX2RpdmlkZXIgPSAxLAogCQkuZmxhZ3MgPSBMQ0RDX0ZMQUdTX0RXUE9MLAorCQkubWVyYW1fY2ZnID0gJmhkbWlfbWVyYW1fY2ZnLAogCX0KIH07CiAKQEAgLTUwNCw3ICs1NjIsMTIxIEBACiAJCWNsa19wdXQoaGRtaV9pY2spOwogfQogCi0vKiBVU0IxIChIb3N0KSAqLworLyogVVNCSFMwIGlzIGNvbm5lY3RlZCB0byBDTjIyIHdoaWNoIHRha2VzIGEgVVNCIE1pbmktQiBwbHVnCisgKgorICogVGhlIHNoNzM3MiBTb0MgaGFzIElSUTcgc2V0IGFzaWRlIGZvciBVU0JIUzAgaG90cGx1ZywKKyAqIGJ1dCBvbiB0aGlzIHBhcnRpY3VsYXIgYm9hcmQgSVJRNyBpcyBhbHJlYWR5IHVzZWQgYnkKKyAqIHRoZSB0b3VjaCBzY3JlZW4uIFRoaXMgbGVhdmVzIHVzIHdpdGggc29mdHdhcmUgcG9sbGluZy4KKyAqLworI2RlZmluZSBVU0JIUzBfUE9MTF9JTlRFUlZBTCAoSFogKiA1KQorCitzdHJ1Y3QgdXNiaHNfcHJpdmF0ZSB7CisJdW5zaWduZWQgaW50IHVzYnBoeWFkZHI7CisJdW5zaWduZWQgaW50IHVzYmNyY2FkZHI7CisJc3RydWN0IHJlbmVzYXNfdXNiaHNfcGxhdGZvcm1faW5mbyBpbmZvOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworfTsKKworI2RlZmluZSB1c2Joc19nZXRfcHJpdihwZGV2KQkJCQlcCisJY29udGFpbmVyX29mKHJlbmVzYXNfdXNiaHNfZ2V0X2luZm8ocGRldiksCVwKKwkJICAgICBzdHJ1Y3QgdXNiaHNfcHJpdmF0ZSwgaW5mbykKKworI2RlZmluZSB1c2Joc19pc19jb25uZWN0ZWQocHJpdikJCQlcCisJKCEoKDEgPDwgNykgJiBfX3Jhd19yZWFkdyhwcml2LT51c2JjcmNhZGRyKSkpCisKK3N0YXRpYyBpbnQgdXNiaHNfZ2V0X3ZidXMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gdXNiaHNfaXNfY29ubmVjdGVkKHVzYmhzX2dldF9wcml2KHBkZXYpKTsKK30KKworc3RhdGljIHZvaWQgdXNiaHNfcGh5X3Jlc2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYmhzX3ByaXZhdGUgKnByaXYgPSB1c2Joc19nZXRfcHJpdihwZGV2KTsKKworCS8qIGluaXQgcGh5ICovCisJX19yYXdfd3JpdGV3KDB4OGEwYSwgcHJpdi0+dXNiY3JjYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHMwX2dldF9pZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBVU0JIU19HQURHRVQ7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmhzMF93b3JrX2Z1bmN0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdXNiaHNfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiaHNfcHJpdmF0ZSwKKwkJCQkJCSAgd29yay53b3JrKTsKKworCXJlbmVzYXNfdXNiaHNfY2FsbF9ub3RpZnlfaG90cGx1Zyhwcml2LT5wZGV2KTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPndvcmssIFVTQkhTMF9QT0xMX0lOVEVSVkFMKTsKK30KKworc3RhdGljIGludCB1c2JoczBfaGFyZHdhcmVfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2Joc19wcml2YXRlICpwcml2ID0gdXNiaHNfZ2V0X3ByaXYocGRldik7CisKKwlwcml2LT5wZGV2ID0gcGRldjsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+d29yaywgdXNiaHMwX3dvcmtfZnVuY3Rpb24pOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+d29yaywgVVNCSFMwX1BPTExfSU5URVJWQUwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2JoczBfaGFyZHdhcmVfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2Joc19wcml2YXRlICpwcml2ID0gdXNiaHNfZ2V0X3ByaXYocGRldik7CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPndvcmspOworfQorCitzdGF0aWMgc3RydWN0IHVzYmhzX3ByaXZhdGUgdXNiaHMwX3ByaXZhdGUgPSB7CisJLnVzYmNyY2FkZHIJPSAweGU2MDU4MTBjLAkJLyogVVNCQ1IyICovCisJLmluZm8gPSB7CisJCS5wbGF0Zm9ybV9jYWxsYmFjayA9IHsKKwkJCS5oYXJkd2FyZV9pbml0CT0gdXNiaHMwX2hhcmR3YXJlX2luaXQsCisJCQkuaGFyZHdhcmVfZXhpdAk9IHVzYmhzMF9oYXJkd2FyZV9leGl0LAorCQkJLnBoeV9yZXNldAk9IHVzYmhzX3BoeV9yZXNldCwKKwkJCS5nZXRfaWQJCT0gdXNiaHMwX2dldF9pZCwKKwkJCS5nZXRfdmJ1cwk9IHVzYmhzX2dldF92YnVzLAorCQl9LAorCQkuZHJpdmVyX3BhcmFtID0geworCQkJLmJ1c3dhaXRfYndhaXQJPSA0LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYmhzMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIlVTQkhTMCIsCisJCS5zdGFydAk9IDB4ZTY4OTAwMDAsCisJCS5lbmQJPSAweGU2ODkwMGU2IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGV2dDJpcnEoMHgxY2EwKSAvKiBVU0IwX1VTQjBJMCAqLywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHVzYmhzMF9kZXZpY2UgPSB7CisJLm5hbWUJPSAicmVuZXNhc191c2JocyIsCisJLmlkCT0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaHMwX3ByaXZhdGUuaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JoczBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB1c2JoczBfcmVzb3VyY2VzLAorfTsKKworLyogVVNCSFMxIGlzIGNvbm5lY3RlZCB0byBDTjMxIHdoaWNoIHRha2VzIGEgVVNCIE1pbmktQUIgcGx1ZworICoKKyAqIFVzZSBKMzAgdG8gc2VsZWN0IGJldHdlZW4gSG9zdCBhbmQgRnVuY3Rpb24uIFRoaXMgc2V0dGluZworICogY2FuIGhvd2V2ZXIgbm90IGJlIGRldGVjdGVkIGJ5IHNvZnR3YXJlLiBIb3RwbHVnIG9mIFVTQkhTMQorICogaXMgcHJvdmlkZWQgdmlhIElSUTguCisgKi8KKyNkZWZpbmUgSVJROCBldnQyaXJxKDB4MDMwMCkKKworLyogVVNCSFMxIFVTQiBIb3N0IHN1cHBvcnQgdmlhIHI4YTY2NTk3X2hjZCAqLwogc3RhdGljIHZvaWQgdXNiMV9ob3N0X3BvcnRfcG93ZXIoaW50IHBvcnQsIGludCBwb3dlcikKIHsKIAlpZiAoIXBvd2VyKSAvKiBvbmx5IHBvd2VyLW9uIGlzIHN1cHBvcnRlZCBmb3Igbm93ICovCkBAIC01MjEsOSArNjkzLDkgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2IxX2hvc3RfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkubmFtZQk9ICJVU0JIUyIsCi0JCS5zdGFydAk9IDB4RTY4QjAwMDAsCi0JCS5lbmQJPSAweEU2OEIwMEU2IC0gMSwKKwkJLm5hbWUJPSAiVVNCSFMxIiwKKwkJLnN0YXJ0CT0gMHhlNjhiMDAwMCwKKwkJLmVuZAk9IDB4ZTY4YjAwZTYgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTU0NCwzNyArNzE2LDE0IEBACiAJLnJlc291cmNlCT0gdXNiMV9ob3N0X3Jlc291cmNlcywKIH07CiAKLS8qIFVTQjEgKEZ1bmN0aW9uKSAqLworLyogVVNCSFMxIFVTQiBGdW5jdGlvbiBzdXBwb3J0IHZpYSByZW5lc2FzX3VzYmhzICovCisKICNkZWZpbmUgVVNCX1BIWV9NT0RFCQkoMSA8PCA0KQogI2RlZmluZSBVU0JfUEhZX0lOVF9FTgkJKCgxIDw8IDMpIHwgKDEgPDwgMikpCiAjZGVmaW5lIFVTQl9QSFlfT04JCSgxIDw8IDEpCiAjZGVmaW5lIFVTQl9QSFlfT0ZGCQkoMSA8PCAwKQogI2RlZmluZSBVU0JfUEhZX0lOVF9DTFIJCShVU0JfUEhZX09OIHwgVVNCX1BIWV9PRkYpCiAKLXN0cnVjdCB1c2Joc19wcml2YXRlIHsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCXVuc2lnbmVkIGludCB1c2JwaHlhZGRyOwotCXVuc2lnbmVkIGludCB1c2JjcmNhZGRyOwotCXN0cnVjdCByZW5lc2FzX3VzYmhzX3BsYXRmb3JtX2luZm8gaW5mbzsKLX07Ci0KLSNkZWZpbmUgdXNiaHNfZ2V0X3ByaXYocGRldikJCQkJXAotCWNvbnRhaW5lcl9vZihyZW5lc2FzX3VzYmhzX2dldF9pbmZvKHBkZXYpLAlcCi0JCSAgICAgc3RydWN0IHVzYmhzX3ByaXZhdGUsIGluZm8pCi0KLSNkZWZpbmUgdXNiaHNfaXNfY29ubmVjdGVkKHByaXYpCQkJXAotCSghKCgxIDw8IDcpICYgX19yYXdfcmVhZHcocHJpdi0+dXNiY3JjYWRkcikpKQotCi1zdGF0aWMgaW50IHVzYmhzMV9nZXRfaWQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlyZXR1cm4gVVNCSFNfR0FER0VUOwotfQotCi1zdGF0aWMgaW50IHVzYmhzMV9nZXRfdmJ1cyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXJldHVybiB1c2Joc19pc19jb25uZWN0ZWQodXNiaHNfZ2V0X3ByaXYocGRldikpOwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgdXNiaHMxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkYXRhOwpAQCAtNTk2LDEyICs3NDUsMTAgQEAKIAlzdHJ1Y3QgdXNiaHNfcHJpdmF0ZSAqcHJpdiA9IHVzYmhzX2dldF9wcml2KHBkZXYpOwogCWludCByZXQ7CiAKLQlpcnFfc2V0X2lycV90eXBlKHByaXYtPmlycSwgSVJRX1RZUEVfTEVWRUxfSElHSCk7Ci0KIAkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzICovCiAJX19yYXdfd3JpdGV3KFVTQl9QSFlfTU9ERSB8IFVTQl9QSFlfSU5UX0NMUiwgcHJpdi0+dXNicGh5YWRkcik7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShwcml2LT5pcnEsIHVzYmhzMV9pbnRlcnJ1cHQsIDAsCisJcmV0ID0gcmVxdWVzdF9pcnEoSVJROCwgdXNiaHMxX2ludGVycnVwdCwgSVJRRl9UUklHR0VSX0hJR0gsCiAJCQkgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBwZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGVyclxuIik7CkBAIC02MjEsMTUgKzc2OCwxMiBAQAogCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KIAlfX3Jhd193cml0ZXcoVVNCX1BIWV9NT0RFIHwgVVNCX1BIWV9JTlRfQ0xSLCBwcml2LT51c2JwaHlhZGRyKTsKIAotCWZyZWVfaXJxKHByaXYtPmlycSwgcGRldik7CisJZnJlZV9pcnEoSVJROCwgcGRldik7CiB9CiAKLXN0YXRpYyB2b2lkIHVzYmhzMV9waHlfcmVzZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgdXNiaHMxX2dldF9pZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCB1c2Joc19wcml2YXRlICpwcml2ID0gdXNiaHNfZ2V0X3ByaXYocGRldik7Ci0KLQkvKiBpbml0IHBoeSAqLwotCV9fcmF3X3dyaXRldygweDhhMGEsIHByaXYtPnVzYmNyY2FkZHIpOworCXJldHVybiBVU0JIU19HQURHRVQ7CiB9CiAKIHN0YXRpYyB1MzIgdXNiaHMxX3BpcGVfY2ZnW10gPSB7CkBAIC02NTIsMTYgKzc5NiwxNSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2Joc19wcml2YXRlIHVzYmhzMV9wcml2YXRlID0gewotCS5pcnEJCT0gZXZ0MmlycSgweDAzMDApLAkvKiBJUlE4ICovCi0JLnVzYnBoeWFkZHIJPSAweEU2MDU4MUUyLAkJLyogVVNCUEhZMUlOVEFQICovCi0JLnVzYmNyY2FkZHIJPSAweEU2MDU4MTMwLAkJLyogVVNCQ1I0ICovCisJLnVzYnBoeWFkZHIJPSAweGU2MDU4MWUyLAkJLyogVVNCUEhZMUlOVEFQICovCisJLnVzYmNyY2FkZHIJPSAweGU2MDU4MTMwLAkJLyogVVNCQ1I0ICovCiAJLmluZm8gPSB7CiAJCS5wbGF0Zm9ybV9jYWxsYmFjayA9IHsKIAkJCS5oYXJkd2FyZV9pbml0CT0gdXNiaHMxX2hhcmR3YXJlX2luaXQsCiAJCQkuaGFyZHdhcmVfZXhpdAk9IHVzYmhzMV9oYXJkd2FyZV9leGl0LAotCQkJLnBoeV9yZXNldAk9IHVzYmhzMV9waHlfcmVzZXQsCiAJCQkuZ2V0X2lkCQk9IHVzYmhzMV9nZXRfaWQsCi0JCQkuZ2V0X3ZidXMJPSB1c2JoczFfZ2V0X3ZidXMsCisJCQkucGh5X3Jlc2V0CT0gdXNiaHNfcGh5X3Jlc2V0LAorCQkJLmdldF92YnVzCT0gdXNiaHNfZ2V0X3ZidXMsCiAJCX0sCiAJCS5kcml2ZXJfcGFyYW0gPSB7CiAJCQkuYnVzd2FpdF9id2FpdAk9IDQsCkBAIC02NzMsOSArODE2LDkgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JoczFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkubmFtZQk9ICJVU0JIUyIsCi0JCS5zdGFydAk9IDB4RTY4QjAwMDAsCi0JCS5lbmQJPSAweEU2OEIwMEU2IC0gMSwKKwkJLm5hbWUJPSAiVVNCSFMxIiwKKwkJLnN0YXJ0CT0gMHhlNjhiMDAwMCwKKwkJLmVuZAk9IDB4ZTY4YjAwZTYgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTY5NCw3ICs4MzcsNiBAQAogCS5yZXNvdXJjZQk9IHVzYmhzMV9yZXNvdXJjZXMsCiB9OwogCi0KIC8qIExFRCAqLwogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBtYWNrZXJlbF9sZWRzW10gPSB7CiAJewpAQCAtODU2LDYgKzk5OCwxNyBAQAogfQogCiAvKiBTREhJMCAqLworc3RhdGljIGlycXJldHVybl90IG1hY2tlcmVsX3NkaGkwX2dwaW9fY2QoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGFyZzsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX3NkaGlfaW5mbyAqaW5mbyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdG1pb19tbWNfZGF0YSAqcGRhdGEgPSBpbmZvLT5wZGF0YTsKKworCXRtaW9fbW1jX2NkX3dha2V1cChwZGF0YSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX3NkaGlfaW5mbyBzZGhpMF9pbmZvID0gewogCS5kbWFfc2xhdmVfdHgJPSBTSERNQV9TTEFWRV9TREhJMF9UWCwKIAkuZG1hX3NsYXZlX3J4CT0gU0hETUFfU0xBVkVfU0RISTBfUlgsCkBAIC0xMTM0LDYgKzEyODcsNyBAQAogCSZub3JfZmxhc2hfZGV2aWNlLAogCSZzbWM5MTF4X2RldmljZSwKIAkmbGNkY19kZXZpY2UsCisJJnVzYmhzMF9kZXZpY2UsCiAJJnVzYjFfaG9zdF9kZXZpY2UsCiAJJnVzYmhzMV9kZXZpY2UsCiAJJmxlZHNfZGV2aWNlLApAQCAtMTE1MCw2ICsxMzA0LDcgQEAKIAkmbWFja2VyZWxfY2FtZXJhLAogCSZoZG1pX2xjZGNfZGV2aWNlLAogCSZoZG1pX2RldmljZSwKKwkmbWVyYW1fZGV2aWNlLAogfTsKIAogLyogS2V5cGFkIEluaXRpYWxpemF0aW9uICovCkBAIC0xMjMxLDYgKzEzODYsNyBAQAogCiAjZGVmaW5lIEdQSU9fUE9SVDlDUgkweEU2MDUxMDA5CiAjZGVmaW5lIEdQSU9fUE9SVDEwQ1IJMHhFNjA1MTAwQQorI2RlZmluZSBHUElPX1BPUlQxNjdDUgkweEU2MDUyMEE3CiAjZGVmaW5lIEdQSU9fUE9SVDE2OENSCTB4RTYwNTIwQTgKICNkZWZpbmUgU1JDUjQJCTB4ZTYxNTgwYmMKICNkZWZpbmUgVVNDQ1IxCQkweEU2MDU4MTQ0CkBAIC0xMjM4LDYgKzEzOTQsNyBAQAogewogCXUzMiBzcmNyNDsKIAlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IHJldDsKIAogCXNoNzM3Ml9waW5tdXhfaW5pdCgpOwogCkBAIC0xMjgzLDE3ICsxNDQwLDE3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDE1MSwgTlVMTCk7IC8qIExDRERPTiAqLwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPUlQxNTEsIDEpOwogCi0JLyogVVNCIGVuYWJsZSAqLwotCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZCVVMwXzEsICAgIE5VTEwpOwotCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lESU5fMV8xOCwgIE5VTEwpOwotCWdwaW9fcmVxdWVzdChHUElPX0ZOX1BXRU5fMV8xMTUsIE5VTEwpOwotCWdwaW9fcmVxdWVzdChHUElPX0ZOX09WQ05fMV8xMTQsIE5VTEwpOwotCWdwaW9fcmVxdWVzdChHUElPX0ZOX0VYVExQXzEsICAgIE5VTEwpOwotCWdwaW9fcmVxdWVzdChHUElPX0ZOX09WQ04yXzEsICAgIE5VTEwpOwotCWdwaW9fcHVsbF9kb3duKEdQSU9fUE9SVDE2OENSKTsKKwkvKiBVU0JIUzAgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9WQlVTMF8wLCBOVUxMKTsKKwlncGlvX3B1bGxfZG93bihHUElPX1BPUlQxNjhDUik7IC8qIFZCVVMwXzAgcHVsbCBkb3duICovCiAKLQkvKiBzZXR1cCBVU0IgcGh5ICovCi0JX19yYXdfd3JpdGV3KDB4OGEwYSwgMHhFNjA1ODEzMCk7CS8qIFVTQkNSNCAqLworCS8qIFVTQkhTMSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZCVVMwXzEsIE5VTEwpOworCWdwaW9fcHVsbF9kb3duKEdQSU9fUE9SVDE2N0NSKTsgLyogVkJVUzBfMSBwdWxsIGRvd24gKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JRElOXzFfMTEzLCBOVUxMKTsKKworCS8qIFVTQiBwaHkgdHdlYWsgdG8gbWFrZSB0aGUgcjhhNjY1OTdfaGNkIGhvc3QgZHJpdmVyIHdvcmsgKi8KKwlfX3Jhd193cml0ZXcoMHg4YTBhLCAweGU2MDU4MTMwKTsgICAgICAgLyogVVNCQ1I0ICovCiAKIAkvKiBlbmFibGUgRlNJMiBwb3J0IEEgKGFrNDY0MykgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lBSUJULAlOVUxMKTsKQEAgLTEzNDMsNiArMTUwMCwxMyBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElEMF8xLCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDBfMCwgTlVMTCk7CiAKKwlyZXQgPSByZXF1ZXN0X2lycShldnQyaXJxKDB4MzM0MCksIG1hY2tlcmVsX3NkaGkwX2dwaW9fY2QsCisJCQkgIElSUUZfVFJJR0dFUl9GQUxMSU5HLCAic2RoaTAgY2QiLCAmc2RoaTBfZGV2aWNlLmRldik7CisJaWYgKCFyZXQpCisJCXNkaGkwX2luZm8udG1pb19mbGFncyB8PSBUTUlPX01NQ19IQVNfQ09MRF9DRDsKKwllbHNlCisJCXByX2VycigiQ2Fubm90IGdldCBJUlEgIyVkOiAlZFxuIiwgZXZ0MmlycSgweDMzNDApLCByZXQpOworCiAjaWYgIWRlZmluZWQoQ09ORklHX01NQ19TSF9NTUNJRikgJiYgIWRlZmluZWQoQ09ORklHX01NQ19TSF9NTUNJRl9NT0RVTEUpCiAJLyogZW5hYmxlIFNESEkxICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUNNRDEsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKaW5kZXggZDE3ZWI2Ni4uYzA4MDBkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCkBAIC01MDksNiArNTA5LDcgQEAKICAgICAgICBNU1RQMTE4LCBNU1RQMTE3LCBNU1RQMTE2LCBNU1RQMTEzLAogICAgICAgIE1TVFAxMDYsIE1TVFAxMDEsIE1TVFAxMDAsCiAgICAgICAgTVNUUDIyMywKKyAgICAgICBNU1RQMjE4LCBNU1RQMjE3LCBNU1RQMjE2LAogICAgICAgIE1TVFAyMDcsIE1TVFAyMDYsIE1TVFAyMDQsIE1TVFAyMDMsIE1TVFAyMDIsIE1TVFAyMDEsIE1TVFAyMDAsCiAgICAgICAgTVNUUDMyOSwgTVNUUDMyOCwgTVNUUDMyMywgTVNUUDMyMiwgTVNUUDMxNCwgTVNUUDMxMywgTVNUUDMxMiwKICAgICAgICBNU1RQNDIzLCBNU1RQNDE1LCBNU1RQNDEzLCBNU1RQNDExLCBNU1RQNDEwLCBNU1RQNDA2LCBNU1RQNDAzLApAQCAtNTM0LDYgKzUzNSw5IEBACiAJW01TVFAxMDFdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfTTFdLCBTTVNUUENSMSwgMSwgMCksIC8qIFZQVSAqLwogCVtNU1RQMTAwXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBTTVNUUENSMSwgMCwgMCksIC8qIExDREMwICovCiAJW01TVFAyMjNdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1BVXSwgU01TVFBDUjIsIDIzLCAwKSwgLyogU1BVMiAqLworCVtNU1RQMjE4XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjIsIDE4LCAwKSwgLyogRE1BQzEgKi8KKwlbTVNUUDIxN10gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IyLCAxNywgMCksIC8qIERNQUMyICovCisJW01TVFAyMTZdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMiwgMTYsIDApLCAvKiBETUFDMyAqLwogCVtNU1RQMjA3XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA3LCAwKSwgLyogU0NJRkE1ICovCiAJW01TVFAyMDZdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDYsIDApLCAvKiBTQ0lGQiAqLwogCVtNU1RQMjA0XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA0LCAwKSwgLyogU0NJRkEwICovCkBAIC02MjYsNiArNjMwLDkgQEAKIAlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfbGNkY19mYi4wIiwgJm1zdHBfY2xrc1tNU1RQMTAwXSksIC8qIExDREMwICovCiAJQ0xLREVWX0RFVl9JRCgidWlvX3BkcnZfZ2VuaXJxLjYiLCAmbXN0cF9jbGtzW01TVFAyMjNdKSwgLyogU1BVMkRTUDAgKi8KIAlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuNyIsICZtc3RwX2Nsa3NbTVNUUDIyM10pLCAvKiBTUFUyRFNQMSAqLworCUNMS0RFVl9ERVZfSUQoInNoLWRtYS1lbmdpbmUuMCIsICZtc3RwX2Nsa3NbTVNUUDIxOF0pLCAvKiBETUFDMSAqLworCUNMS0RFVl9ERVZfSUQoInNoLWRtYS1lbmdpbmUuMSIsICZtc3RwX2Nsa3NbTVNUUDIxN10pLCAvKiBETUFDMiAqLworCUNMS0RFVl9ERVZfSUQoInNoLWRtYS1lbmdpbmUuMiIsICZtc3RwX2Nsa3NbTVNUUDIxNl0pLCAvKiBETUFDMyAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS41IiwgJm1zdHBfY2xrc1tNU1RQMjA3XSksIC8qIFNDSUZBNSAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS42IiwgJm1zdHBfY2xrc1tNU1RQMjA2XSksIC8qIFNDSUZCICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjAiLCAmbXN0cF9jbGtzW01TVFAyMDRdKSwgLyogU0NJRkEwICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMKaW5kZXggNWQwZTE1MC4uYTkxMWE2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYwpAQCAtMjUwLDYgKzI1MCwxMSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGludCBzaDczYTBfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgb24pCit7CisJcmV0dXJuIDA7IC8qIGFsd2F5cyBhbGxvdyB3YWtldXAgKi8KK30KKwogdm9pZCBfX2luaXQgc2g3M2EwX2luaXRfaXJxKHZvaWQpCiB7CiAJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gX19pbygweGYwMDAxMDAwKTsKQEAgLTI1Nyw2ICsyNjIsNyBAQAogCXZvaWQgX19pb21lbSAqaW50ZXZ0c2EgPSBpb3JlbWFwX25vY2FjaGUoMHhmZmQyMDEwMCwgUEFHRV9TSVpFKTsKIAogCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOworCWdpY19hcmNoX2V4dG4uaXJxX3NldF93YWtlID0gc2g3M2EwX3NldF93YWtlOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjc19kZXNjKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNjcuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzY3LmMKaW5kZXggMmMxMDE5MC4uZTU0NjAxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNjcuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM2Ny5jCkBAIC0zOCw3ICszOCw3IEBACiAJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCS5zY3NjcgkJPSBTQ1NDUl9SRSB8IFNDU0NSX1RFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT180LAotCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkudHlwZQkJPSBQT1JUX1NDSUZBLAogCS5pcnFzCQk9IHsgZXZ0MmlycSgweGMwMCksIGV2dDJpcnEoMHhjMDApLAogCQkJICAgIGV2dDJpcnEoMHhjMDApLCBldnQyaXJxKDB4YzAwKSB9LAogfTsKQEAgLTU3LDcgKzU3LDcgQEAKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUsCiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzQsCi0JLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS50eXBlCQk9IFBPUlRfU0NJRkEsCiAJLmlycXMJCT0geyBldnQyaXJxKDB4YzIwKSwgZXZ0MmlycSgweGMyMCksCiAJCQkgICAgZXZ0MmlycSgweGMyMCksIGV2dDJpcnEoMHhjMjApIH0sCiB9OwpAQCAtNzYsNyArNzYsNyBAQAogCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkuc2NzY3IJCT0gU0NTQ1JfUkUgfCBTQ1NDUl9URSwKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fNCwKLQkudHlwZQkJPSBQT1JUX1NDSUYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGQSwKIAkuaXJxcwkJPSB7IGV2dDJpcnEoMHhjNDApLCBldnQyaXJxKDB4YzQwKSwKIAkJCSAgICBldnQyaXJxKDB4YzQwKSwgZXZ0MmlycSgweGM0MCkgfSwKIH07CkBAIC05NSw3ICs5NSw3IEBACiAJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCS5zY3NjcgkJPSBTQ1NDUl9SRSB8IFNDU0NSX1RFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT180LAotCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkudHlwZQkJPSBQT1JUX1NDSUZBLAogCS5pcnFzCQk9IHsgZXZ0MmlycSgweGM2MCksIGV2dDJpcnEoMHhjNjApLAogCQkJICAgIGV2dDJpcnEoMHhjNjApLCBldnQyaXJxKDB4YzYwKSB9LAogfTsKQEAgLTExNCw3ICsxMTQsNyBAQAogCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkuc2NzY3IJCT0gU0NTQ1JfUkUgfCBTQ1NDUl9URSwKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fNCwKLQkudHlwZQkJPSBQT1JUX1NDSUYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGQSwKIAkuaXJxcwkJPSB7IGV2dDJpcnEoMHhkMjApLCBldnQyaXJxKDB4ZDIwKSwKIAkJCSAgICBldnQyaXJxKDB4ZDIwKSwgZXZ0MmlycSgweGQyMCkgfSwKIH07CkBAIC0xMzMsNyArMTMzLDcgQEAKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUsCiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzQsCi0JLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS50eXBlCQk9IFBPUlRfU0NJRkEsCiAJLmlycXMJCT0geyBldnQyaXJxKDB4ZDQwKSwgZXZ0MmlycSgweGQ0MCksCiAJCQkgICAgZXZ0MmlycSgweGQ0MCksIGV2dDJpcnEoMHhkNDApIH0sCiB9OwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCS5zY3NjcgkJPSBTQ1NDUl9SRSB8IFNDU0NSX1RFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT180LAotCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkudHlwZQkJPSBQT1JUX1NDSUZCLAogCS5pcnFzCQk9IHsgZXZ0MmlycSgweGQ2MCksIGV2dDJpcnEoMHhkNjApLAogCQkJICAgIGV2dDJpcnEoMHhkNjApLCBldnQyaXJxKDB4ZDYwKSB9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS1wb3dlci5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LXBvd2VyLmMKaW5kZXggYzg0NDQyYy4uNWFkOGIyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LXBvd2VyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LXBvd2VyLmMKQEAgLTI0LDYgKzI0LDggQEAKIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogCisjaW5jbHVkZSAiYm9hcmQtaGFybW9ueS5oIgorCiAjZGVmaW5lIFBNQ19DVFJMCQkweDAKICNkZWZpbmUgUE1DX0NUUkxfSU5UUl9MT1cJKDEgPDwgMTcpCiAKQEAgLTk4LDcgKzEwMCw3IEBACiAJLmlycV9iYXNlCT0gVEVHUkFfTlJfSVJRUywKIAkubnVtX3N1YmRldnMJPSBBUlJBWV9TSVpFKHRwc19kZXZzKSwKIAkuc3ViZGV2cwk9IHRwc19kZXZzLAotCS5ncGlvX2Jhc2UJPSBURUdSQV9OUl9HUElPUywKKwkuZ3Bpb19iYXNlCT0gSEFSTU9OWV9HUElPX1RQUzY1ODZYKDApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGhhcm1vbnlfcmVndWxhdG9yc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2JvYXJkLWhhcm1vbnkuaAppbmRleCAxZTU3YjA3Li5kODUxNDJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2JvYXJkLWhhcm1vbnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2JvYXJkLWhhcm1vbnkuaApAQCAtMTcsNyArMTcsOCBAQAogI2lmbmRlZiBfTUFDSF9URUdSQV9CT0FSRF9IQVJNT05ZX0gKICNkZWZpbmUgX01BQ0hfVEVHUkFfQk9BUkRfSEFSTU9OWV9ICiAKLSNkZWZpbmUgSEFSTU9OWV9HUElPX1dNODkwMyhfeF8pCShURUdSQV9OUl9HUElPUyArIChfeF8pKQorI2RlZmluZSBIQVJNT05ZX0dQSU9fVFBTNjU4NlgoX3hfKQkoVEVHUkFfTlJfR1BJT1MgKyAoX3hfKSkKKyNkZWZpbmUgSEFSTU9OWV9HUElPX1dNODkwMyhfeF8pCShIQVJNT05ZX0dQSU9fVFBTNjU4NlgoNCkgKyAoX3hfKSkKIAogI2RlZmluZSBURUdSQV9HUElPX1NEMl9DRAkJVEVHUkFfR1BJT19QSTUKICNkZWZpbmUgVEVHUkFfR1BJT19TRDJfV1AJCVRFR1JBX0dQSU9fUEgxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5oCmluZGV4IGMzNGYzZWEuLjRmNTBjYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5oCkBAIC0zMSw3ICszMSw3IEBACiAJYm9vbCByZXNldDsKIAlfX3UxNiBjbGtfdmFsOwogCV9fczggdXNlY291bnQ7Ci0JX191MzIgcmVzX3JlZzsKKwl2b2lkIF9faW9tZW0gKiByZXNfcmVnOwogCV9fdTE2IHJlc19tYXNrOwogCiAJYm9vbCBod19jdHJsZDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvdTMwMC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3UzMDAtcmVncy5oCmluZGV4IDhiODVkZjQuLjAzNWZkYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvdTMwMC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC91MzAwLXJlZ3MuaApAQCAtMTgsNiArMTgsMTIgQEAKICAqIHRoZSBkZWZpbmVzIGFyZSB1c2VkIGZvciBzZXR0aW5nIHVwIHRoZSBJL08gbWVtb3J5IG1hcHBpbmcuCiAgKi8KIAorI2lmZGVmIF9fQVNTRU1CTEVSX18KKyNkZWZpbmUgSU9NRU0oYSkgKGEpCisjZWxzZQorI2RlZmluZSBJT01FTShhKSAodm9pZCBfX2lvbWVtICopIGEKKyNlbmRpZgorCiAvKiBOQU5EIEZsYXNoIENTMCAqLwogI2RlZmluZSBVMzAwX05BTkRfQ1MwX1BIWVNfQkFTRQkJMHg4MDAwMDAwMAogCkBAIC00OCwxMyArNTQsNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBBbGwgdGhlIGZvbGxvd2luZyBwZXJpcGhlcmFscyBhcmUgc3BlY2lmaWVkIGF0IHRoZWlyIFBIWVNJQ0FMIGFkZHJlc3MsCi0gKiBzbyBpZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlbSAoaW4gdGhlIGtlcm5lbCksIHlvdSBNVVNUIHVzZSB0aGUgbWFjcm9zCi0gKiBkZWZpbmVkIGluIDxhc20vaW8uaD4gdG8gbWFwIHRvIHRoZSBJT19BRERSRVNTX0FIQigpIElPX0FERFJFU1NfRkFTVCgpCi0gKiBldGMuCi0gKi8KLQotLyoKICAqIEFIQiBwZXJpcGhlcmFscwogICovCiAKQEAgLTYzLDExICs2MiwxMSBAQAogCiAvKiBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAwLCBzZXJ2aWNpbmcgMzIgaW50ZXJydXB0cyAqLwogI2RlZmluZSBVMzAwX0lOVENPTjBfQkFTRQkJKFUzMDBfQUhCX1BFUl9QSFlTX0JBU0UrMHgxMDAwKQotI2RlZmluZSBVMzAwX0lOVENPTjBfVkJBU0UJCShVMzAwX0FIQl9QRVJfVklSVF9CQVNFKzB4MTAwMCkKKyNkZWZpbmUgVTMwMF9JTlRDT04wX1ZCQVNFCQlJT01FTShVMzAwX0FIQl9QRVJfVklSVF9CQVNFKzB4MTAwMCkKIAogLyogVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgMSwgc2VydmljaW5nIDMyIGludGVycnVwdHMgKi8KICNkZWZpbmUgVTMwMF9JTlRDT04xX0JBU0UJCShVMzAwX0FIQl9QRVJfUEhZU19CQVNFKzB4MjAwMCkKLSNkZWZpbmUgVTMwMF9JTlRDT04xX1ZCQVNFCQkoVTMwMF9BSEJfUEVSX1ZJUlRfQkFTRSsweDIwMDApCisjZGVmaW5lIFUzMDBfSU5UQ09OMV9WQkFTRQkJSU9NRU0oVTMwMF9BSEJfUEVSX1ZJUlRfQkFTRSsweDIwMDApCiAKIC8qIE1lbW9yeSBTdGljayBQcm8gKE1TUFJPKSBjb250cm9sbGVyICovCiAjZGVmaW5lIFUzMDBfTVNQUk9fQkFTRQkJCShVMzAwX0FIQl9QRVJfUEhZU19CQVNFKzB4MzAwMCkKQEAgLTExNSw3ICsxMTQsNyBAQAogCiAvKiBTWVNDT04gKi8KICNkZWZpbmUgVTMwMF9TWVNDT05fQkFTRQkJKFUzMDBfU0xPV19QRVJfUEhZU19CQVNFKzB4MTAwMCkKLSNkZWZpbmUgVTMwMF9TWVNDT05fVkJBU0UJCShVMzAwX1NMT1dfUEVSX1ZJUlRfQkFTRSsweDEwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1ZCQVNFCQlJT01FTShVMzAwX1NMT1dfUEVSX1ZJUlRfQkFTRSsweDEwMDApCiAKIC8qIFdhdGNoZG9nICovCiAjZGVmaW5lIFUzMDBfV0RPR19CQVNFCQkJKFUzMDBfU0xPV19QRVJfUEhZU19CQVNFKzB4MjAwMCkKQEAgLTEyNSw3ICsxMjQsNyBAQAogCiAvKiBBUFAgc2lkZSBzcGVjaWFsIHRpbWVyICovCiAjZGVmaW5lIFUzMDBfVElNRVJfQVBQX0JBU0UJCShVMzAwX1NMT1dfUEVSX1BIWVNfQkFTRSsweDQwMDApCi0jZGVmaW5lIFUzMDBfVElNRVJfQVBQX1ZCQVNFCQkoVTMwMF9TTE9XX1BFUl9WSVJUX0JBU0UrMHg0MDAwKQorI2RlZmluZSBVMzAwX1RJTUVSX0FQUF9WQkFTRQkJSU9NRU0oVTMwMF9TTE9XX1BFUl9WSVJUX0JBU0UrMHg0MDAwKQogCiAvKiBLZXlwYWQgKi8KICNkZWZpbmUgVTMwMF9LRVlQQURfQkFTRQkJKFUzMDBfU0xPV19QRVJfUEhZU19CQVNFKzB4NTAwMCkKQEAgLTE4MSw1ICsxODAsNCBAQAogICogVmlydHVhbCBhY2Nlc3NvciBtYWNyb3MgZm9yIHN0YXRpYyBkZXZpY2VzCiAgKi8KIAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC90aW1lci5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMKaW5kZXggODkxY2Y0NC4uMThkN2ZhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMKQEAgLTQxMSw4ICs0MTEsNyBAQAogCS8qIFVzZSBnZW5lcmFsIHB1cnBvc2UgdGltZXIgMiBhcyBjbG9jayBzb3VyY2UgKi8KIAlpZiAoY2xvY2tzb3VyY2VfbW1pb19pbml0KFUzMDBfVElNRVJfQVBQX1ZCQVNFICsgVTMwMF9USU1FUl9BUFBfR1BUMkNDLAogCQkJIkdQVDIiLCByYXRlLCAzMDAsIDMyLCBjbG9ja3NvdXJjZV9tbWlvX3JlYWRsX3VwKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJ0aW1lcjogZmFpbGVkIHRvIGluaXRpYWxpemUgY2xvY2sgIgotCQkgICAgICAgInNvdXJjZSAlc1xuIiwgY2xvY2tzb3VyY2VfdTMwMF8xbWh6Lm5hbWUpOworCQlwcl9lcnIoInRpbWVyOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBVMzAwIGNsb2NrIHNvdXJjZVxuIik7CiAKIAljbG9ja2V2ZW50c19jYWxjX211bHRfc2hpZnQoJmNsb2NrZXZlbnRfdTMwMF8xbWh6LAogCQkJCSAgICByYXRlLCBBUFBUSU1FUl9NSU5fUkFOR0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI4NTAwLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS1kYjg1MDAuYwppbmRleCBjM2M0MTc2Li40NTk4YjA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS1kYjg1MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS1kYjg1MDAuYwpAQCAtMTU5LDYgKzE1OSw5IEBACiAJCS8qIE5vIGN1c3RvbSBkYXRhIHlldCAqLwogCX07CiAKKwlpZiAoY3B1X2lzX3U4NTAwdjIoKSkKKwkJcGRhdGEuc3VwcG9ydHNfc2xlZXBtb2RlID0gdHJ1ZTsKKwogCWRieDUwMF9hZGRfZ3Bpb3MoQVJSQVlfQU5EX1NJWkUoZGI4NTAwX2dwaW9fYmFzZSksCiAJCQkgSVJRX0RCODUwMF9HUElPMCwgJnBkYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCmluZGV4IDI4NWVkY2QuLjllNmI5M2IxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKQEAgLTQ2LDEyICs0Niw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCB2Mm1faW5pdF9lYXJseSh2b2lkKQotewotCWN0X2Rlc2MtPmluaXRfZWFybHkoKTsKLQl2ZXJzYXRpbGVfc2NoZWRfY2xvY2tfaW5pdChNTUlPX1AyVihWMk1fU1lTXzI0TUhaKSwgMjQwMDAwMDApOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgdjJtX3RpbWVyX2luaXQodm9pZCkKIHsKIAl1MzIgc2NjdHJsOwpAQCAtMzY1LDYgKzM1OSwxMyBAQAogCX0sCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgdjJtX2luaXRfZWFybHkodm9pZCkKK3sKKwljdF9kZXNjLT5pbml0X2Vhcmx5KCk7CisJY2xrZGV2X2FkZF90YWJsZSh2Mm1fbG9va3VwcywgQVJSQVlfU0laRSh2Mm1fbG9va3VwcykpOworCXZlcnNhdGlsZV9zY2hlZF9jbG9ja19pbml0KE1NSU9fUDJWKFYyTV9TWVNfMjRNSFopLCAyNDAwMDAwMCk7Cit9CisKIHN0YXRpYyB2b2lkIHYybV9wb3dlcl9vZmYodm9pZCkKIHsKIAlpZiAodjJtX2NmZ193cml0ZShTWVNfQ0ZHX1NIVVRET1dOIHwgU1lTX0NGR19TSVRFX01CLCAwKSkKQEAgLTQxOCw4ICs0MTksNiBAQAogewogCWludCBpOwogCi0JY2xrZGV2X2FkZF90YWJsZSh2Mm1fbG9va3VwcywgQVJSQVlfU0laRSh2Mm1fbG9va3VwcykpOwotCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fcGNpZV9pMmNfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnYybV9kZGNfaTJjX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fZmxhc2hfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvbnRleHQuYyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwppbmRleCA4YmZhZTk2Li5iMGVlOWJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb250ZXh0LmMKKysrIGIvYXJjaC9hcm0vbW0vY29udGV4dC5jCkBAIC0yNCw3ICsyNCw5IEBACiAKIC8qCiAgKiBXZSBmb3JrKCllZCBhIHByb2Nlc3MsIGFuZCB3ZSBuZWVkIGEgbmV3IGNvbnRleHQgZm9yIHRoZSBjaGlsZAotICogdG8gcnVuIGluLgorICogdG8gcnVuIGluLiAgV2UgcmVzZXJ2ZSB2ZXJzaW9uIDAgZm9yIGluaXRpYWwgdGFza3Mgc28gd2Ugd2lsbAorICogYWx3YXlzIGFsbG9jYXRlIGFuIEFTSUQuIFRoZSBBU0lEIDAgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBUVEJSCisgKiByZWdpc3RlciBjaGFuZ2luZyBzZXF1ZW5jZS4KICAqLwogdm9pZCBfX2luaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewpAQCAtMzQsMTEgKzM2LDggQEAKIAogc3RhdGljIHZvaWQgZmx1c2hfY29udGV4dCh2b2lkKQogewotCXUzMiB0dGI7Ci0JLyogQ29weSBUVEJSMSBpbnRvIFRUQlIwICovCi0JYXNtIHZvbGF0aWxlKCJtcmMJcDE1LCAwLCAlMCwgYzIsIGMwLCAxXG4iCi0JCSAgICAgIm1jcglwMTUsIDAsICUwLCBjMiwgYzAsIDAiCi0JCSAgICAgOiAiPXIiICh0dGIpKTsKKwkvKiBzZXQgdGhlIHJlc2VydmVkIEFTSUQgYmVmb3JlIGZsdXNoaW5nIHRoZSBUTEIgKi8KKwlhc20oIm1jcglwMTUsIDAsICUwLCBjMTMsIGMwLCAxXG4iIDogOiAiciIgKDApKTsKIAlpc2IoKTsKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CiAJaWYgKGljYWNoZV9pc192aXZ0X2FzaWRfdGFnZ2VkKCkpIHsKQEAgLTk0LDcgKzkzLDcgQEAKIAkJcmV0dXJuOwogCiAJc21wX3JtYigpOwotCWFzaWQgPSBjcHVfbGFzdF9hc2lkICsgY3B1OworCWFzaWQgPSBjcHVfbGFzdF9hc2lkICsgY3B1ICsgMTsKIAogCWZsdXNoX2NvbnRleHQoKTsKIAlzZXRfbW1fY29udGV4dChtbSwgYXNpZCk7CkBAIC0xNDQsMTMgKzE0MywxMyBAQAogCSAqIHRvIHN0YXJ0IGEgbmV3IHZlcnNpb24gYW5kIGZsdXNoIHRoZSBUTEIuCiAJICovCiAJaWYgKHVubGlrZWx5KChhc2lkICYgfkFTSURfTUFTSykgPT0gMCkpIHsKLQkJYXNpZCA9IGNwdV9sYXN0X2FzaWQgKyBzbXBfcHJvY2Vzc29yX2lkKCk7CisJCWFzaWQgPSBjcHVfbGFzdF9hc2lkICsgc21wX3Byb2Nlc3Nvcl9pZCgpICsgMTsKIAkJZmx1c2hfY29udGV4dCgpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJc21wX3dtYigpOwogCQlzbXBfY2FsbF9mdW5jdGlvbihyZXNldF9jb250ZXh0LCBOVUxMLCAxKTsKICNlbmRpZgotCQljcHVfbGFzdF9hc2lkICs9IE5SX0NQVVMgLSAxOworCQljcHVfbGFzdF9hc2lkICs9IE5SX0NQVVM7CiAJfQogCiAJc2V0X21tX2NvbnRleHQobW0sIGFzaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDJjMmNjZTkuLmMxOTU3MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTMzMSw2ICszMzEsMTIgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCWlmIChwaHlzX2luaXRyZF9zaXplICYmCisJICAgICFtZW1ibG9ja19pc19yZWdpb25fbWVtb3J5KHBoeXNfaW5pdHJkX3N0YXJ0LCBwaHlzX2luaXRyZF9zaXplKSkgeworCQlwcl9lcnIoIklOSVRSRDogMHglMDhseCsweCUwOGx4IGlzIG5vdCBhIG1lbW9yeSByZWdpb24gLSBkaXNhYmxpbmcgaW5pdHJkXG4iLAorCQkgICAgICAgcGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpOworCQlwaHlzX2luaXRyZF9zdGFydCA9IHBoeXNfaW5pdHJkX3NpemUgPSAwOworCX0KKwlpZiAocGh5c19pbml0cmRfc2l6ZSAmJgogCSAgICBtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQocGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpKSB7CiAJCXByX2VycigiSU5JVFJEOiAweCUwOGx4KzB4JTA4bHggb3ZlcmxhcHMgaW4tdXNlIG1lbW9yeSByZWdpb24gLSBkaXNhYmxpbmcgaW5pdHJkXG4iLAogCQkgICAgICAgcGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpOwpAQCAtNjM1LDcgKzY0MSw4IEBACiAJCQkiICAgIG1vZHVsZXMgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIE1CKVxuIgogCQkJIiAgICAgIC5pbml0IDogMHglcCIgIiAtIDB4JXAiICIgICAoJTRkIGtCKVxuIgogCQkJIiAgICAgIC50ZXh0IDogMHglcCIgIiAtIDB4JXAiICIgICAoJTRkIGtCKVxuIgotCQkJIiAgICAgIC5kYXRhIDogMHglcCIgIiAtIDB4JXAiICIgICAoJTRkIGtCKVxuIiwKKwkJCSIgICAgICAuZGF0YSA6IDB4JXAiICIgLSAweCVwIiAiICAgKCU0ZCBrQilcbiIKKwkJCSIgICAgICAgLmJzcyA6IDB4JXAiICIgLSAweCVwIiAiICAgKCU0ZCBrQilcbiIsCiAKIAkJCU1MSyhVTChDT05GSUdfVkVDVE9SU19CQVNFKSwgVUwoQ09ORklHX1ZFQ1RPUlNfQkFTRSkgKwogCQkJCShQQUdFX1NJWkUpKSwKQEAgLTY1Nyw3ICs2NjQsOCBAQAogCiAJCQlNTEtfUk9VTkRVUChfX2luaXRfYmVnaW4sIF9faW5pdF9lbmQpLAogCQkJTUxLX1JPVU5EVVAoX3RleHQsIF9ldGV4dCksCi0JCQlNTEtfUk9VTkRVUChfc2RhdGEsIF9lZGF0YSkpOworCQkJTUxLX1JPVU5EVVAoX3NkYXRhLCBfZWRhdGEpLAorCQkJTUxLX1JPVU5EVVAoX19ic3Nfc3RhcnQsIF9fYnNzX3N0b3ApKTsKIAogI3VuZGVmIE1MSwogI3VuZGVmIE1MTQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCmluZGV4IGU0YzE2NWMuLjUzN2ZmY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQkubG9uZwkwCiAJCS5sb25nCTAKIAkJLmxvbmcJdjRfY2FjaGVfZm5zCi0JCS5zaXplCV9fYXJtN3RkbWlfcHJvY19pbmZvLCAuIC0gX19hcm03ZG1pX3Byb2NfaW5mbworCQkuc2l6ZQlfX2FybTd0ZG1pX3Byb2NfaW5mbywgLiAtIF9fYXJtN3RkbWlfcHJvY19pbmZvCiAKIAkJLnR5cGUJX190cmlzY2VuZGE3X3Byb2NfaW5mbywgI29iamVjdAogX190cmlzY2VuZGE3X3Byb2NfaW5mbzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUwppbmRleCA3YjdlYmQ0Li41NDZiNTRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkJLmxvbmcJMAogCQkubG9uZwkwCiAJCS5sb25nCXY0X2NhY2hlX2ZucwotCQkuc2l6ZQlfX2FybTl0ZG1pX3Byb2NfaW5mbywgLiAtIF9fYXJtOWRtaV9wcm9jX2luZm8KKwkJLnNpemUJX19hcm05dGRtaV9wcm9jX2luZm8sIC4gLSBfX2FybTl0ZG1pX3Byb2NfaW5mbwogCiAJCS50eXBlCV9fcDIwMDFfcHJvY19pbmZvLCAjb2JqZWN0CiBfX3AyMDAxX3Byb2NfaW5mbzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwppbmRleCBiM2I1NjZlLi4zYzM4Njc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCkBAIC0xMDgsMTYgKzEwOCwxOCBAQAogI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MwogCW1jcglwMTUsIDAsIHIyLCBjNywgYzUsIDYJCUAgZmx1c2ggQlRBQy9CVEIKICNlbmRpZgotCW1yYwlwMTUsIDAsIHIyLCBjMiwgYzAsIDEJCUAgbG9hZCBUVEIgMQotCW1jcglwMTUsIDAsIHIyLCBjMiwgYzAsIDAJCUAgaW50byBUVEIgMAorI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzc1NDMyMgorCWRzYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgcjIsIGMxMywgYzAsIDEJCUAgc2V0IHJlc2VydmVkIGNvbnRleHQgSUQKKwlpc2IKKzE6CW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgc2V0IFRUQiAwCiAJaXNiCiAjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNzU0MzIyCiAJZHNiCiAjZW5kaWYKIAltY3IJcDE1LCAwLCByMSwgYzEzLCBjMCwgMQkJQCBzZXQgY29udGV4dCBJRAogCWlzYgotCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgc2V0IFRUQiAwCi0JaXNiCiAjZW5kaWYKIAltb3YJcGMsIGxyCiBFTkRQUk9DKGNwdV92N19zd2l0Y2hfbW0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1kbWEuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LWRtYS5jCmluZGV4IDM1MzhiODVlLi5iMTMwZjYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1kbWEuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TT0NfSU1YNTEKLXN0YXRpYyBzdHJ1Y3Qgc2RtYV9zY3JpcHRfc3RhcnRfYWRkcnMgYWRkcl9pbXg1MV90bzEgPSB7CitzdGF0aWMgc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzIGFkZHJfaW14NTEgPSB7CiAJLmFwXzJfYXBfYWRkciA9IDY0MiwKIAkudWFydF8yX21jdV9hZGRyID0gODE3LAogCS5tY3VfMl9hcHBfYWRkciA9IDc0NywKQEAgLTE5Niw3ICsxOTYsOSBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDUxKQogCWlmIChjcHVfaXNfbXg1MSgpKSB7Ci0JCWlteDUxX2lteF9zZG1hX2RhdGEucGRhdGEuc2NyaXB0X2FkZHJzID0gJmFkZHJfaW14NTFfdG8xOworCQlpbnQgdG9fdmVyc2lvbiA9IG14NTFfcmV2aXNpb24oKSA+PiA0OworCQlpbXg1MV9pbXhfc2RtYV9kYXRhLnBkYXRhLnRvX3ZlcnNpb24gPSB0b192ZXJzaW9uOworCQlpbXg1MV9pbXhfc2RtYV9kYXRhLnBkYXRhLnNjcmlwdF9hZGRycyA9ICZhZGRyX2lteDUxOwogCQlyZXQgPSBpbXhfYWRkX2lteF9zZG1hKCZpbXg1MV9pbXhfc2RtYV9kYXRhKTsKIAl9IGVsc2UKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9ncGlvLmggYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2dwaW8uaAppbmRleCBlYTE5YTViLi5kNWQ3ZTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2dwaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2dwaW8uaApAQCAtOTAsNiArOTAsNyBAQAogCWludCBudW1fZ3BpbzsKIAl1MzIgKCpnZXRfc2Vjb25kYXJ5X3N0YXR1cykodW5zaWduZWQgaW50IGJhbmspOwogCXZvaWQgKCpzZXRfaW9mb3JjZSkoYm9vbCBlbmFibGUpOworCWJvb2wgc3VwcG9ydHNfc2xlZXBtb2RlOwogfTsKIAogI2VuZGlmIC8qIF9fQVNNX1BMQVRfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmgKaW5kZXggMzA4MzE5NS4uMGQ4ODQ5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9mbGFzaC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZmxhc2guaApAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogZXh0ZXJuIHZvaWQgb21hcDFfc2V0X3ZwcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgZW5hYmxlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvdm1tLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvdm1tLmgKaW5kZXggMzJhMmY2Yy4uZTk5MmI5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pb3ZtbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW92bW0uaApAQCAtMjksOSArMjksNiBAQAogICogbG93ZXIgMTYgYml0IGlzIHVzZWQgZm9yIGgvdyBhbmQgdXBwZXIgMTYgYml0IGlzIGZvciBzL3cuCiAgKi8KICNkZWZpbmUgSU9WTUZfU1dfU0hJRlQJCTE2Ci0jZGVmaW5lIElPVk1GX0hXX1NJWkUJCSgxIDw8IElPVk1GX1NXX1NISUZUKQotI2RlZmluZSBJT1ZNRl9IV19NQVNLCQkoSU9WTUZfSFdfU0laRSAtIDEpCi0jZGVmaW5lIElPVk1GX1NXX01BU0sJCSh+SU9WTUZfSFdfTUFTSylVTAogCiAvKgogICogaW92bWE6IGgvdyBmbGFncyBkZXJpdmVkIGZyb20gY2FtIGFuZCByYW0gYXR0cmlidXRlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tbWMuaAppbmRleCBmMzhmZWY5Li5jN2I4NzQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbW1jLmgKQEAgLTEwMSw2ICsxMDEsOSBAQAogCQkvKiBJZiB1c2luZyBwb3dlcl9zYXZpbmcgYW5kIHRoZSBNTUMgcG93ZXIgaXMgbm90IHRvIGdvIG9mZiAqLwogCQl1bnNpZ25lZCBub19vZmY6MTsKIAorCQkvKiBlTU1DIGRvZXMgbm90IGhhbmRsZSBwb3dlciBvZmYgd2hlbiBub3QgaW4gc2xlZXAgc3RhdGUgKi8KKwkJdW5zaWduZWQgbm9fcmVndWxhdG9yX29mZl9pbml0OjE7CisKIAkJLyogUmVndWxhdG9yIG9mZiByZW1hcHBlZCB0byBzbGVlcCAqLwogCQl1bnNpZ25lZCB2Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXA6MTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwppbmRleCA1MWVmNDNlLi44M2EzN2M1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwpAQCAtNjQ4LDcgKzY0OCw2IEBACiAJCQlyZXR1cm4gUFRSX0VSUih2YSk7CiAJfQogCi0JZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKIAlmbGFncyB8PSBJT1ZNRl9ESVNDT05UOwogCWZsYWdzIHw9IElPVk1GX01NSU87CiAKQEAgLTcwNiw3ICs3MDUsNiBAQAogCWlmICghdmEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKIAlmbGFncyB8PSBJT1ZNRl9ESVNDT05UOwogCWZsYWdzIHw9IElPVk1GX0FMTE9DOwogCkBAIC03OTUsNyArNzkzLDYgQEAKIAlpZiAoIXZhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZsYWdzICY9IElPVk1GX0hXX01BU0s7CiAJZmxhZ3MgfD0gSU9WTUZfTElORUFSOwogCWZsYWdzIHw9IElPVk1GX01NSU87CiAKQEAgLTg1Myw3ICs4NTAsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlwYSA9IHZpcnRfdG9fcGh5cyh2YSk7CiAKLQlmbGFncyAmPSBJT1ZNRl9IV19NQVNLOwogCWZsYWdzIHw9IElPVk1GX0xJTkVBUjsKIAlmbGFncyB8PSBJT1ZNRl9BTExPQzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKaW5kZXggYTNmNTBiMy4uNmFmM2QwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkJZWxzZSBpZiAoY3B1X2lzX29tYXAxNjExKCkpCiAJCQlvbWFwX3NyYW1fc2l6ZSA9IFNaXzI1Nks7CiAJCWVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZGV0ZWN0IFNSQU0gc2l6ZVxuIik7CisJCQlwcl9lcnIoIkNvdWxkIG5vdCBkZXRlY3QgU1JBTSBzaXplXG4iKTsKIAkJCW9tYXBfc3JhbV9zaXplID0gMHg0MDAwOwogCQl9CiAJfQpAQCAtMjIxLDEwICsyMjEsMTAgQEAKIAlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGggPSBST1VORF9ET1dOKG9tYXBfc3JhbV9zaXplLCBQQUdFX1NJWkUpOwogCWlvdGFibGVfaW5pdChvbWFwX3NyYW1faW9fZGVzYywgQVJSQVlfU0laRShvbWFwX3NyYW1faW9fZGVzYykpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU1JBTTogTWFwcGVkIHBhIDB4JTA4bHggdG8gdmEgMHglMDhseCBzaXplOiAweCVseFxuIiwKLQlfX3Bmbl90b19waHlzKG9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiksCi0Jb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCwKLQkgICAgICAgb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoKTsKKwlwcl9pbmZvKCJTUkFNOiBNYXBwZWQgcGEgMHglMDhsbHggdG8gdmEgMHglMDhseCBzaXplOiAweCVseFxuIiwKKwkJKGxvbmcgbG9uZykgX19wZm5fdG9fcGh5cyhvbWFwX3NyYW1faW9fZGVzY1swXS5wZm4pLAorCQlvbWFwX3NyYW1faW9fZGVzY1swXS52aXJ0dWFsLAorCQlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGgpOwogCiAJLyoKIAkgKiBOb3JtYWxseSBkZXZpY2VtYXBzX2luaXQoKSB3b3VsZCBmbHVzaCBjYWNoZXMgYW5kIHRsYiBhZnRlcgpAQCAtMjUyLDcgKzI1Miw3IEBACiB2b2lkICpvbWFwX3NyYW1fcHVzaF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAoc2l6ZSA+IChvbWFwX3NyYW1fY2VpbCAtIChvbWFwX3NyYW1fYmFzZSArIFNSQU1fQk9PVExPQURFUl9TWikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTm90IGVub3VnaCBzcGFjZSBpbiBTUkFNXG4iKTsKKwkJcHJfZXJyKCJOb3QgZW5vdWdoIHNwYWNlIGluIFNSQU1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwppbmRleCBjMTBkMTBjLi4yYWJmOTY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCkBAIC0xMTk5LDcgKzExOTksNyBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfZG1hX3N1c3BlbmRfY2hhbihzM2MyNDEwX2RtYV9jaGFuICpjcCkKK3N0YXRpYyB2b2lkIHMzYzI0MTBfZG1hX3N1c3BlbmRfY2hhbihzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY3ApCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgInN1c3BlbmRpbmcgZG1hIGNoYW5uZWwgJWRcbiIsIGNwLT5udW1iZXIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKaW5kZXggOWFlZTdlMS4uZmM4YzVmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CkBAIC02NjgsMyArNjY5LDggQEAKIAogCWlycWRiZigiczNjMjQxMDogcmVnaXN0ZXJlZCBpbnRlcnJ1cHQgaGFuZGxlcnNcbiIpOwogfQorCitzdHJ1Y3Qgc3lzY29yZV9vcHMgczNjMjR4eF9pcnFfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzM2MyNHh4X2lycV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjR4eF9pcnFfcmVzdW1lLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1vbmVuYW5kLmMgYi9hcmNoL2FybS9wbGF0LXM1cC9kZXYtb25lbmFuZC5jCmluZGV4IDZkYjkyNjIuLjIwMzM2YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1vbmVuYW5kLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LW9uZW5hbmQuYwpAQCAtMTUsOCArMTUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9vbmVuYW5kLmg+CiAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL21hcC5oPgpAQCAtNDUsMTMgKzQzLDMgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwX29uZW5hbmRfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBzNXBfb25lbmFuZF9yZXNvdXJjZXMsCiB9OwotCi12b2lkIHM1cF9vbmVuYW5kX3NldF9wbGF0ZGF0YShzdHJ1Y3Qgb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKLXsKLQlzdHJ1Y3Qgb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpwZDsKLQotCXBkID0ga21lbWR1cChwZGF0YSwgc2l6ZW9mKHN0cnVjdCBvbmVuYW5kX3BsYXRmb3JtX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBkKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIHBsYXRmb3JtIGRhdGFcbiIsIF9fZnVuY19fKTsKLQlzNXBfZGV2aWNlX29uZW5hbmQuZGV2LnBsYXRmb3JtX2RhdGEgPSBwZDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9tYXAtczVwLmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oCmluZGV4IGE2YzNkMzIuLmQ5NzNkMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9tYXAtczVwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L21hcC1zNXAuaApAQCAtMzksNyArMzksNyBAQAogI2RlZmluZSBTNVBfVkFfVFdECQlTNVBfVkFfQ09SRVBFUkkoMHg2MDApCiAjZGVmaW5lIFM1UF9WQV9HSUNfRElTVAkJUzVQX1ZBX0NPUkVQRVJJKDB4MTAwMCkKIAotI2RlZmluZSBTNVBfVkFfVVNCX0hTUEhZCVMzQ19BRERSKDB4MDI5MDAwMDApCisjZGVmaW5lIFMzQ19WQV9VU0JfSFNQSFkJUzNDX0FERFIoMHgwMjkwMDAwMCkKIAogI2RlZmluZSBWQV9WSUMoeCkJCShTM0NfVkFfSVJRICsgKCh4KSAqIDB4MTAwMDApKQogI2RlZmluZSBWQV9WSUMwCQkJVkFfVklDKDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LW9uZW5hbmQuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtb25lbmFuZC5jCmluZGV4IDQ1ZWM3MzIuLmY1NGFlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtb25lbmFuZC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtb25lbmFuZC5jCkBAIC0xMyw4ICsxMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmQuaD4KIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CkBAIC00MywxMyArNDEsMyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2Nfb25lbmFuZF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHMzY19vbmVuYW5kX3Jlc291cmNlcywKIH07Ci0KLXZvaWQgczNjX29uZW5hbmRfc2V0X3BsYXRkYXRhKHN0cnVjdCBvbmVuYW5kX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQotewotCXN0cnVjdCBvbmVuYW5kX3BsYXRmb3JtX2RhdGEgKnBkOwotCi0JcGQgPSBrbWVtZHVwKHBkYXRhLCBzaXplb2Yoc3RydWN0IG9uZW5hbmRfcGxhdGZvcm1fZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghcGQpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbW9yeSBmb3IgcGxhdGZvcm0gZGF0YVxuIiwgX19mdW5jX18pOwotCXMzY19kZXZpY2Vfb25lbmFuZC5kZXYucGxhdGZvcm1fZGF0YSA9IHBkOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaAppbmRleCBiNjFiOGVlLi40YWYxMDhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaApAQCAtNzUsMTAgKzc1LDggQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cGMxMDBfZGV2aWNlX3NwaTI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MjEwX2RldmljZV9zcGkwOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjIxMF9kZXZpY2Vfc3BpMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cDY0NDBfZGV2aWNlX3NwaTA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXA2NDQwX2RldmljZV9zcGkxOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwNjQ1MF9kZXZpY2Vfc3BpMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cDY0NTBfZGV2aWNlX3NwaTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXA2NHgwX2RldmljZV9zcGkwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwNjR4MF9kZXZpY2Vfc3BpMTsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9od21vbjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9kZWZjb25maWcKaW5kZXggNmY5Y2E1Ni4uYTA2YmZjYyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZGVmY29uZmlnCkBAIC01LDYgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9ldmtsY2QxMDBfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMF9kZWZjb25maWcKaW5kZXggN2VlY2UwYS4uZDhmMWZlOCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMF9kZWZjb25maWcKQEAgLTUsNiArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMV9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAxX2RlZmNvbmZpZwppbmRleCAzODdlYjlkNi4uZDRjNWIxOSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMV9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMV9kZWZjb25maWcKQEAgLTUsNiArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX21ybXRfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX21ybXRfZGVmY29uZmlnCmluZGV4IDE5ZjZjZWUuLjc3Y2E0ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9tcm10X2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfbXJtdF9kZWZjb25maWcKQEAgLTcsNiArNyw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMDksNyArMTEwLDcgQEAKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX1JUQ19DTEFTUz1tCitDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX1MzNTM5MEE9bQogQ09ORklHX1JUQ19EUlZfQVQzMkFQNzAwWD1tCiBDT05GSUdfRE1BREVWSUNFUz15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZGVmY29uZmlnCmluZGV4IGYwZmUyMzcuLjZlMGRjYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZGVmY29uZmlnCkBAIC01LDYgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZXZrbGNkMTAwX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZXZrbGNkMTAwX2RlZmNvbmZpZwppbmRleCBlNGE3YzFkLi43ZjJhMzQ0IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2V2a2xjZDEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9ldmtsY2QxMDBfZGVmY29uZmlnCkBAIC01LDYgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZXZrbGNkMTAxX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZXZrbGNkMTAxX2RlZmNvbmZpZwppbmRleCA2ZjM3ZjcwLi4wODVlZWJhIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2V2a2xjZDEwMV9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9ldmtsY2QxMDFfZGVmY29uZmlnCkBAIC01LDYgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDJfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcKaW5kZXggNGZiMDFmNS4uZDFhODg3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcKQEAgLTUsNiArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwM19kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAzX2RlZmNvbmZpZwppbmRleCA5ZmFhZjliLi45NTZmMjgxIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAzX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAzX2RlZmNvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDA0X2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDRfZGVmY29uZmlnCmluZGV4IDNkMmE1ZDguLjQwYzY5ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDRfZGVmY29uZmlnCkBAIC01LDYgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDZfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwNl9kZWZjb25maWcKaW5kZXggMWVkOGYyMi4uNTExZWI4YSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwNl9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwNl9kZWZjb25maWcKQEAgLTUsNiArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2ZhdnItMzJfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2ZhdnItMzJfZGVmY29uZmlnCmluZGV4IGFlYWRjOTUuLjE5OTczYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9mYXZyLTMyX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvZmF2ci0zMl9kZWZjb25maWcKQEAgLTYsNiArNiw3IEBACiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvaGFtbWVyaGVhZF9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvaGFtbWVyaGVhZF9kZWZjb25maWcKaW5kZXggMTY5MmJlZS4uNmY0NTY4MSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2hhbW1lcmhlYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9oYW1tZXJoZWFkX2RlZmNvbmZpZwpAQCAtNyw2ICs3LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9tZXJpc2NfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL21lcmlzY19kZWZjb25maWcKaW5kZXggOGI2NzBhNi4uM2JlZmFiOSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL21lcmlzY19kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL21lcmlzY19kZWZjb25maWcKQEAgLTcsNiArNyw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL21pbWMyMDBfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL21pbWMyMDBfZGVmY29uZmlnCmluZGV4IDVhNTFmMmUuLjFiZWU1MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9taW1jMjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvbWltYzIwMF9kZWZjb25maWcKQEAgLTcsNiArNyw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCA0OWE4OGY1Li4xMDg1MDJiIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTEzMSw3ICsxMzEsNiBAQAogICovCiAjZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLCBuZXdfcGMsIG5ld19zcCkJIFwKIAlkbyB7CQkJCQkgXAotCQlzZXRfZnMoVVNFUl9EUyk7CQkgXAogCQltZW1zZXQocmVncywgMCwgc2l6ZW9mKCpyZWdzKSk7CSBcCiAJCXJlZ3MtPnNyID0gTU9ERV9VU0VSOwkJIFwKIAkJcmVncy0+cGMgPSBuZXdfcGMgJiB+MTsJCSBcCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCmluZGV4IGFhNjc3ZTIuLjdmYmYwZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCkBAIC0xMDQzLDggKzEwNDMsOSBAQAogCQlkYXRhLT5yZWdzID0gKHZvaWQgX19pb21lbSAqKXBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OwogCX0KIAorCXBkZXYtPmlkID0gbGluZTsKIAlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXBkYXRhLT5udW0gPSBwb3J0bnI7CisJcGRhdGEtPm51bSA9IGxpbmU7CiAJYXQzMl91c2FydHNbbGluZV0gPSBwZGV2OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IDljOTZhMTMuLjgxODEyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0zMSw4ICszMSwyMCBAQAogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTkyNjMoKQkoMCkKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05cmwoKQkoMCkKICNkZWZpbmUgY3B1X2lzX2F0OTFjYXA5KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxY2FwOV9yZXZCKCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxY2FwOV9yZXZDKCkJKDApCiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcxMCgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnMjAoKQkoMCkKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1KCkJKDApCiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NWVzKCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOW0xMCgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDYoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05bTExKCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXg1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcxNSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnMzUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDM1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcyNSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTl4MjUoKQkoMCkKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5jIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbnRjLmMKaW5kZXggM2UzNjQ2MS4uYzlhYzJmOCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbnRjLmMKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbnRjLmMKQEAgLTE2NywxNCArMTY3LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW50Y19yZXN1bWUodm9pZCkKK3N0YXRpYyB2b2lkIGludGNfcmVzdW1lKHZvaWQpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKIAkJaW50Y193cml0ZWwoJmludGMwLCBJTlRQUjAgKyA0ICogaSwgaW50YzAuc2F2ZWRfaXByW2ldKTsKLQotCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgaW50Y19zdXNwZW5kCU5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCmluZGV4IDMxZDk1NDIuLjlmMWQwODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZwpAQCAtMTEyLDcgKzExMiw3IEBACiBDT05GSUdfVVNCX0dfUFJJTlRFUj1tCiBDT05GSUdfTU1DPW0KIENPTkZJR19TREhfQkZJTj1tCi1DT05GSUdfUlRDX0NMQVNTPW0KK0NPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfQkZJTj1tCiBDT05GSUdfRVhUMl9GUz1tCiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL3N0cm5jcHkuUyBiL2FyY2gvYmxhY2tmaW4vbGliL3N0cm5jcHkuUwppbmRleCBmMzkzMWQ1Li4yYzA3ZGRkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9zdHJuY3B5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvc3RybmNweS5TCkBAIC0yNSw3ICsyNSw3IEBACiAKIEVOVFJZKF9zdHJuY3B5KQogCUNDID0gUjIgPT0gMDsKLQlpZiBDQyBKVU1QIDRmOworCWlmIENDIEpVTVAgNmY7CiAKIAlQMiA9IFIyIDsgICAgICAgLyogc2l6ZSAqLwogCVAwID0gUjAgOyAgICAgICAvKiBkc3QqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDFjZjBmNDkuLjdjOTI4ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTMyMCwxMSArMzIwLDEyIEBACiAjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZQkJMTMyOAogI2RlZmluZSBfX05SX3N5bmNmcwkJCTEzMjkKICNkZWZpbmUgX19OUl9zZXRucwkJCTEzMzAKKyNkZWZpbmUgX19OUl9zZW5kbW1zZwkJCTEzMzEKIAogI2lmZGVmIF9fS0VSTkVMX18KIAogCi0jZGVmaW5lIE5SX3N5c2NhbGxzCQkJMzA3IC8qIGxlbmd0aCBvZiBzeXNjYWxsIHRhYmxlICovCisjZGVmaW5lIE5SX3N5c2NhbGxzCQkJMzA4IC8qIGxlbmd0aCBvZiBzeXNjYWxsIHRhYmxlICovCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgc3RvcCBzY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2ggZnJvbSBjb21wbGFpbmluZyBhYm91dApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IDljYTgwMTkuLjk3ZGQyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKQEAgLTE3NzYsNiArMTc3Niw3IEBACiAJZGF0YTggc3lzX2Nsb2NrX2FkanRpbWUKIAlkYXRhOCBzeXNfc3luY2ZzCiAJZGF0YTggc3lzX3NldG5zCQkJCS8vIDEzMzAKKwlkYXRhOCBzeXNfc2VuZG1tc2cKIAogCS5vcmcgc3lzX2NhbGxfdGFibGUgKyA4Kk5SX3N5c2NhbGxzCS8vIGd1YXJkIGFnYWluc3QgZmFpbHVyZXMgdG8gaW5jcmVhc2UgTlJfc3lzY2FsbHMKICNlbmRpZiAvKiBfX0lBNjRfQVNNX1BBUkFWSVJUVUFMSVpFRF9OQVRJVkUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnLm5vbW11IGIvYXJjaC9tNjhrL0tjb25maWcubm9tbXUKaW5kZXggZmM5OGY5Yi4uYjAwNGRjMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnLm5vbW11CisrKyBiL2FyY2gvbTY4ay9LY29uZmlnLm5vbW11CkBAIC0xNCw2ICsxNCwzMyBAQAogCWJvb2wKIAlkZWZhdWx0IG4KIAorY29uZmlnIE02ODAwMAorCWJvb2wKKwloZWxwCisJICBUaGUgRnJlZXNjYWxlICh3YXMgTW90b3JvbGEpIDY4MDAwIENQVSBpcyB0aGUgZmlyc3QgZ2VuZXJhdGlvbiBvZgorCSAgdGhlIHdlbGwga25vd24gTTY4SyBmYW1pbHkgb2YgcHJvY2Vzc29ycy4gVGhlIENQVSBjb3JlIGFzIHdlbGwgYXMKKwkgIGJlaW5nIGF2YWlsYWJsZSBhcyBhIHN0YW5kIGFsb25lIENQVSB3YXMgYWxzbyB1c2VkIGluIG1hbnkKKwkgIFN5c3RlbS1Pbi1DaGlwIGRldmljZXMgKGVnIDY4MzI4LCA2ODMwMiwgZXRjKS4gSXQgZG9lcyBub3QgY29udGFpbgorCSAgYSBwYWdpbmcgTU1VLgorCitjb25maWcgTUNQVTMyCisJYm9vbAorCWhlbHAKKwkgIFRoZSBGcmVlc2NhbGUgKHdhcyB0aGVuIE1vdG9yb2xhKSBDUFUzMiBpcyBhIENQVSBjb3JlIHRoYXQgaXMKKwkgIGJhc2VkIG9uIHRoZSA2ODAyMCBwcm9jZXNzb3IuIEZvciB0aGUgbW9zdCBwYXJ0IGl0IGlzIHVzZWQgaW4KKwkgIFN5c3RlbS1Pbi1DaGlwIHBhcnRzLCBhbmQgZG9lcyBub3QgY29udGFpbiBhIHBhZ2luZyBNTVUuCisKK2NvbmZpZyBDT0xERklSRQorCWJvb2wKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJaGVscAorCSAgVGhlIEZyZWVzY2FsZSBDb2xkRmlyZSBmYW1pbHkgb2YgcHJvY2Vzc29ycyBpcyBhIG1vZGVybiBkZXJpdml0aXZlCisJICBvZiB0aGUgNjgwMDAgcHJvY2Vzc29yIGZhbWlseS4gVGhleSBhcmUgbWFpbmx5IHRhcmdldGVkIGF0IGVtYmVkZGVkCisJICBhcHBsaWNhdGlvbnMsIGFuZCBhcmUgYWxsIFN5c3RlbS1Pbi1DaGlwIChTT0MpIGRldmljZXMsIGFzIG9wcG9zZWQKKwkgIHRvIHN0YW5kIGFsb25lIENQVXMuIFRoZXkgaW1wbGVtZW50IGEgc3Vic2V0IG9mIHRoZSBvcmlnaW5hbCA2ODAwMAorCSAgcHJvY2Vzc29yIGluc3RydWN0aW9uIHNldC4KKwogY29uZmlnIENPTERGSVJFX1NXX0E3CiAJYm9vbAogCWRlZmF1bHQgbgpAQCAtMzYsMjYgKzYzLDMxIEBACiAKIGNvbmZpZyBNNjgzMjgKIAlib29sICJNQzY4MzI4IgorCXNlbGVjdCBNNjgwMDAKIAloZWxwCiAJICBNb3Rvcm9sYSA2ODMyOCBwcm9jZXNzb3Igc3VwcG9ydC4KIAogY29uZmlnIE02OEVaMzI4CiAJYm9vbCAiTUM2OEVaMzI4IgorCXNlbGVjdCBNNjgwMDAKIAloZWxwCiAJICBNb3Rvcm9sYSA2OEVYMzI4IHByb2Nlc3NvciBzdXBwb3J0LgogCiBjb25maWcgTTY4VlozMjgKIAlib29sICJNQzY4VlozMjgiCisJc2VsZWN0IE02ODAwMAogCWhlbHAKIAkgIE1vdG9yb2xhIDY4VlozMjggcHJvY2Vzc29yIHN1cHBvcnQuCiAKIGNvbmZpZyBNNjgzNjAKIAlib29sICJNQzY4MzYwIgorCXNlbGVjdCBNQ1BVMzIKIAloZWxwCiAJICBNb3Rvcm9sYSA2ODM2MCBwcm9jZXNzb3Igc3VwcG9ydC4KIAogY29uZmlnIE01MjA2CiAJYm9vbCAiTUNGNTIwNiIKKwlzZWxlY3QgQ09MREZJUkUKIAlzZWxlY3QgQ09MREZJUkVfU1dfQTcKIAlzZWxlY3QgSEFWRV9NQkFSCiAJaGVscApAQCAtNjMsNiArOTUsNyBAQAogCiBjb25maWcgTTUyMDZlCiAJYm9vbCAiTUNGNTIwNmUiCisJc2VsZWN0IENPTERGSVJFCiAJc2VsZWN0IENPTERGSVJFX1NXX0E3CiAJc2VsZWN0IEhBVkVfTUJBUgogCWhlbHAKQEAgLTcwLDYgKzEwMyw3IEBACiAKIGNvbmZpZyBNNTIweAogCWJvb2wgIk1DRjUyMHgiCisJc2VsZWN0IENPTERGSVJFCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgSEFWRV9DQUNIRV9TUExJVAogCWhlbHAKQEAgLTc3LDYgKzExMSw3IEBACiAKIGNvbmZpZyBNNTIzeAogCWJvb2wgIk1DRjUyM3giCisJc2VsZWN0IENPTERGSVJFCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgSEFWRV9DQUNIRV9TUExJVAogCXNlbGVjdCBIQVZFX0lQU0JBUgpAQCAtODUsNiArMTIwLDcgQEAKIAogY29uZmlnIE01MjQ5CiAJYm9vbCAiTUNGNTI0OSIKKwlzZWxlY3QgQ09MREZJUkUKIAlzZWxlY3QgQ09MREZJUkVfU1dfQTcKIAlzZWxlY3QgSEFWRV9NQkFSCiAJaGVscApAQCAtOTIsNiArMTI4LDcgQEAKIAogY29uZmlnIE01MjcxCiAJYm9vbCAiTUNGNTI3MSIKKwlzZWxlY3QgQ09MREZJUkUKIAlzZWxlY3QgSEFWRV9DQUNIRV9TUExJVAogCXNlbGVjdCBIQVZFX0lQU0JBUgogCWhlbHAKQEAgLTk5LDYgKzEzNiw3IEBACiAKIGNvbmZpZyBNNTI3MgogCWJvb2wgIk1DRjUyNzIiCisJc2VsZWN0IENPTERGSVJFCiAJc2VsZWN0IENPTERGSVJFX1NXX0E3CiAJc2VsZWN0IEhBVkVfTUJBUgogCWhlbHAKQEAgLTEwNiw2ICsxNDQsNyBAQAogCiBjb25maWcgTTUyNzUKIAlib29sICJNQ0Y1Mjc1IgorCXNlbGVjdCBDT0xERklSRQogCXNlbGVjdCBIQVZFX0NBQ0hFX1NQTElUCiAJc2VsZWN0IEhBVkVfSVBTQkFSCiAJaGVscApAQCAtMTEzLDYgKzE1Miw3IEBACiAKIGNvbmZpZyBNNTI4eAogCWJvb2wgIk1DRjUyOHgiCisJc2VsZWN0IENPTERGSVJFCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgSEFWRV9DQUNIRV9TUExJVAogCXNlbGVjdCBIQVZFX0lQU0JBUgpAQCAtMTIxLDYgKzE2MSw3IEBACiAKIGNvbmZpZyBNNTMwNwogCWJvb2wgIk1DRjUzMDciCisJc2VsZWN0IENPTERGSVJFCiAJc2VsZWN0IENPTERGSVJFX1NXX0E3CiAJc2VsZWN0IEhBVkVfQ0FDSEVfQ0IKIAlzZWxlY3QgSEFWRV9NQkFSCkBAIC0xMjksMTIgKzE3MCwxNCBAQAogCiBjb25maWcgTTUzMngKIAlib29sICJNQ0Y1MzJ4IgorCXNlbGVjdCBDT0xERklSRQogCXNlbGVjdCBIQVZFX0NBQ0hFX0NCCiAJaGVscAogCSAgRnJlZXNjYWxlIChNb3Rvcm9sYSkgQ29sZEZpcmUgNTMyeCBwcm9jZXNzb3Igc3VwcG9ydC4KIAogY29uZmlnIE01NDA3CiAJYm9vbCAiTUNGNTQwNyIKKwlzZWxlY3QgQ09MREZJUkUKIAlzZWxlY3QgQ09MREZJUkVfU1dfQTcKIAlzZWxlY3QgSEFWRV9DQUNIRV9DQgogCXNlbGVjdCBIQVZFX01CQVIKQEAgLTE0Myw2ICsxODYsNyBAQAogCiBjb25maWcgTTU0N3gKIAlib29sICJNQ0Y1NDd4IgorCXNlbGVjdCBDT0xERklSRQogCXNlbGVjdCBIQVZFX0NBQ0hFX0NCCiAJc2VsZWN0IEhBVkVfTUJBUgogCWhlbHAKQEAgLTE1MCw2ICsxOTQsNyBAQAogCiBjb25maWcgTTU0OHgKIAlib29sICJNQ0Y1NDh4IgorCXNlbGVjdCBDT0xERklSRQogCXNlbGVjdCBIQVZFX0NBQ0hFX0NCCiAJc2VsZWN0IEhBVkVfTUJBUgogCWhlbHAKQEAgLTE2OCwxMyArMjEzLDYgQEAKIAlkZXBlbmRzIG9uIChNNTQ4eCB8fCBNNTQ3eCkKIAlkZWZhdWx0IHkKIAotY29uZmlnIENPTERGSVJFCi0JYm9vbAotCWRlcGVuZHMgb24gKE01MjA2IHx8IE01MjA2ZSB8fCBNNTIweCB8fCBNNTIzeCB8fCBNNTI0OSB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTMwNyB8fCBNNTMyeCB8fCBNNTQwNyB8fCBNNTR4eCkKLQlzZWxlY3QgR0VORVJJQ19HUElPCi0Jc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBDTE9DS19TRVQKIAlib29sICJFbmFibGUgc2V0dGluZyB0aGUgQ1BVIGNsb2NrIGZyZXF1ZW5jeSIKIAlkZWZhdWx0IG4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMKaW5kZXggMzNmODI3Ni4uMWI3YTE0ZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMKQEAgLTE0LDggKzE0LDcgQEAKIEVYUE9SVF9TWU1CT0woX19sc2hyZGkzKTsKIEVYUE9SVF9TWU1CT0woX19tdWxkaTMpOwogCi0jaWYgIWRlZmluZWQoX19tYzY4MDIwX18pICYmICFkZWZpbmVkKF9fbWM2ODAzMF9fKSAmJiBcCi0gICAgIWRlZmluZWQoX19tYzY4MDQwX18pICYmICFkZWZpbmVkKF9fbWM2ODA2MF9fKSAmJiAhZGVmaW5lZChfX21jcHUzMl9fKQorI2lmIGRlZmluZWQoQ09ORklHX002ODAwMCkgfHwgZGVmaW5lZChDT05GSUdfQ09MREZJUkUpCiAvKgogICogU2ltcGxlciA2OGsgYW5kIENvbGRGaXJlIHBhcnRzIGFsc28gbmVlZCBhIGZldyBvdGhlciBnY2MgZnVuY3Rpb25zLgogICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgubGRzX25vLlMgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgubGRzX25vLlMKaW5kZXggZjRkNzE1Y2QuLjdkYzQwODcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC5sZHNfbm8uUworKysgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgubGRzX25vLlMKQEAgLTg0LDUyICs4NCw1MiBAQAogCQkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBOb3JtYWwgc3ltYm9scyAqLwogCQkuID0gQUxJR04oNCk7CiAJCV9fc3RhcnRfX19rc3ltdGFiID0gLjsKLQkJKihfX2tzeW10YWIpCisJCSooU09SVChfX19rc3ltdGFiKyopKQogCQlfX3N0b3BfX19rc3ltdGFiID0gLjsKIAogCQkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBHUEwtb25seSBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rc3ltdGFiX2dwbCA9IC47Ci0JCSooX19rc3ltdGFiX2dwbCkKKwkJKihTT1JUKF9fX2tzeW10YWJfZ3BsKyopKQogCQlfX3N0b3BfX19rc3ltdGFiX2dwbCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogTm9ybWFsIHVudXNlZCBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rc3ltdGFiX3VudXNlZCA9IC47Ci0JCSooX19rc3ltdGFiX3VudXNlZCkKKwkJKihTT1JUKF9fX2tzeW10YWJfdW51c2VkKyopKQogCQlfX3N0b3BfX19rc3ltdGFiX3VudXNlZCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLW9ubHkgdW51c2VkIHN5bWJvbHMgKi8KIAkJX19zdGFydF9fX2tzeW10YWJfdW51c2VkX2dwbCA9IC47Ci0JCSooX19rc3ltdGFiX3VudXNlZF9ncGwpCisJCSooU09SVChfX19rc3ltdGFiX3VudXNlZF9ncGwrKikpCiAJCV9fc3RvcF9fX2tzeW10YWJfdW51c2VkX2dwbCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLWZ1dHVyZSBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rc3ltdGFiX2dwbF9mdXR1cmUgPSAuOwotCQkqKF9fa3N5bXRhYl9ncGxfZnV0dXJlKQorCQkqKFNPUlQoX19fa3N5bXRhYl9ncGxfZnV0dXJlKyopKQogCQlfX3N0b3BfX19rc3ltdGFiX2dwbF9mdXR1cmUgPSAuOwogCiAJCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IE5vcm1hbCBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rY3JjdGFiID0gLjsKLQkJKihfX2tjcmN0YWIpCisJCSooU09SVChfX19rY3JjdGFiKyopKQogCQlfX3N0b3BfX19rY3JjdGFiID0gLjsKIAogCQkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBHUEwtb25seSBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rY3JjdGFiX2dwbCA9IC47Ci0JCSooX19rY3JjdGFiX2dwbCkKKwkJKihTT1JUKF9fX2tjcmN0YWJfZ3BsKyopKQogCQlfX3N0b3BfX19rY3JjdGFiX2dwbCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogTm9ybWFsIHVudXNlZCBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rY3JjdGFiX3VudXNlZCA9IC47Ci0JCSooX19rY3JjdGFiX3VudXNlZCkKKwkJKihTT1JUKF9fX2tjcmN0YWJfdW51c2VkKyopKQogCQlfX3N0b3BfX19rY3JjdGFiX3VudXNlZCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLW9ubHkgdW51c2VkIHN5bWJvbHMgKi8KIAkJX19zdGFydF9fX2tjcmN0YWJfdW51c2VkX2dwbCA9IC47Ci0JCSooX19rY3JjdGFiX3VudXNlZF9ncGwpCisJCSooU09SVChfX19rY3JjdGFiX3VudXNlZF9ncGwrKikpCiAJCV9fc3RvcF9fX2tjcmN0YWJfdW51c2VkX2dwbCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLWZ1dHVyZSBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rY3JjdGFiX2dwbF9mdXR1cmUgPSAuOwotCQkqKF9fa2NyY3RhYl9ncGxfZnV0dXJlKQorCQkqKFNPUlQoX19fa2NyY3RhYl9ncGxfZnV0dXJlKyopKQogCQlfX3N0b3BfX19rY3JjdGFiX2dwbF9mdXR1cmUgPSAuOwogCiAJCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IHN0cmluZ3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvbWVtY3B5LmMgYi9hcmNoL202OGsvbGliL21lbWNweS5jCmluZGV4IDYyMTgyYzguLjA2NDg4OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9saWIvbWVtY3B5LmMKKysrIGIvYXJjaC9tNjhrL2xpYi9tZW1jcHkuYwpAQCAtMzQsOCArMzQsMTAgQEAKIAlpZiAodGVtcCkgewogCQlsb25nICpsdG8gPSB0bzsKIAkJY29uc3QgbG9uZyAqbGZyb20gPSBmcm9tOwotI2lmIGRlZmluZWQoX19tYzY4MDIwX18pIHx8IGRlZmluZWQoX19tYzY4MDMwX18pIHx8IFwKLSAgICBkZWZpbmVkKF9fbWM2ODA0MF9fKSB8fCBkZWZpbmVkKF9fbWM2ODA2MF9fKSB8fCBkZWZpbmVkKF9fbWNwdTMyX18pCisjaWYgZGVmaW5lZChDT05GSUdfTTY4MDAwKSB8fCBkZWZpbmVkKENPTkZJR19DT0xERklSRSkKKwkJZm9yICg7IHRlbXA7IHRlbXAtLSkKKwkJCSpsdG8rKyA9ICpsZnJvbSsrOworI2Vsc2UKIAkJYXNtIHZvbGF0aWxlICgKIAkJCSIJbW92ZWwgJTIsJTNcbiIKIAkJCSIJYW5kdyAgIzcsJTNcbiIKQEAgLTU2LDkgKzU4LDYgQEAKIAkJCSIJanBsICAgNGIiCiAJCQk6ICI9YSIgKGxmcm9tKSwgIj1hIiAobHRvKSwgIj1kIiAodGVtcCksICI9JmQiICh0ZW1wMSkKIAkJCTogIjAiIChsZnJvbSksICIxIiAobHRvKSwgIjIiICh0ZW1wKSk7Ci0jZWxzZQotCQlmb3IgKDsgdGVtcDsgdGVtcC0tKQotCQkJKmx0bysrID0gKmxmcm9tKys7CiAjZW5kaWYKIAkJdG8gPSBsdG87CiAJCWZyb20gPSBsZnJvbTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvbWVtc2V0LmMgYi9hcmNoL202OGsvbGliL21lbXNldC5jCmluZGV4IGY2NDllNmEuLjhhNzYzOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9saWIvbWVtc2V0LmMKKysrIGIvYXJjaC9tNjhrL2xpYi9tZW1zZXQuYwpAQCAtMzIsOCArMzIsMTAgQEAKIAl0ZW1wID0gY291bnQgPj4gMjsKIAlpZiAodGVtcCkgewogCQlsb25nICpscyA9IHM7Ci0jaWYgZGVmaW5lZChfX21jNjgwMjBfXykgfHwgZGVmaW5lZChfX21jNjgwMzBfXykgfHwgXAotICAgIGRlZmluZWQoX19tYzY4MDQwX18pIHx8IGRlZmluZWQoX19tYzY4MDYwX18pIHx8IGRlZmluZWQoX19tY3B1MzJfXykKKyNpZiBkZWZpbmVkKENPTkZJR19NNjgwMDApIHx8IGRlZmluZWQoQ09ORklHX0NPTERGSVJFKQorCQlmb3IgKDsgdGVtcDsgdGVtcC0tKQorCQkJKmxzKysgPSBjOworI2Vsc2UKIAkJc2l6ZV90IHRlbXAxOwogCQlhc20gdm9sYXRpbGUgKAogCQkJIgltb3ZlbCAlMSwlMlxuIgpAQCAtNTUsOSArNTcsNiBAQAogCQkJIglqcGwgICAxYiIKIAkJCTogIj1hIiAobHMpLCAiPWQiICh0ZW1wKSwgIj0mZCIgKHRlbXAxKQogCQkJOiAiZCIgKGMpLCAiMCIgKGxzKSwgIjEiICh0ZW1wKSk7Ci0jZWxzZQotCQlmb3IgKDsgdGVtcDsgdGVtcC0tKQotCQkJKmxzKysgPSBjOwogI2VuZGlmCiAJCXMgPSBsczsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL211bGRpMy5jIGIvYXJjaC9tNjhrL2xpYi9tdWxkaTMuYwppbmRleCAwNzliYWZjYS4uNzllOTI4YSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2xpYi9tdWxkaTMuYworKysgYi9hcmNoL202OGsvbGliL211bGRpMy5jCkBAIC0xOSwxNyArMTksNyBAQAogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLwogCi0jaWYgZGVmaW5lZChfX21jNjgwMjBfXykgfHwgZGVmaW5lZChfX21jNjgwMzBfXykgfHwgXAotICAgIGRlZmluZWQoX19tYzY4MDQwX18pIHx8IGRlZmluZWQoX19tYzY4MDYwX18pIHx8IGRlZmluZWQoX19tY3B1MzJfXykKLQotI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCi0gIF9fYXNtX18gKCJtdWx1JS5sICUzLCUxOiUwIgkJCQkJCVwKLSAgICAgICAgICAgOiAiPWQiICgoVVNJdHlwZSkodzApKSwJCQkJCVwKLSAgICAgICAgICAgICAiPWQiICgoVVNJdHlwZSkodzEpKQkJCQkJXAotICAgICAgICAgICA6ICIlMCIgKChVU0l0eXBlKSh1KSksCQkJCQlcCi0gICAgICAgICAgICAgImRtaSIgKChVU0l0eXBlKSh2KSkpCi0KLSNlbHNlCisjaWYgZGVmaW5lZChDT05GSUdfTTY4MDAwKSB8fCBkZWZpbmVkKENPTkZJR19DT0xERklSRSkKIAogI2RlZmluZSBTSV9UWVBFX1NJWkUgMzIKICNkZWZpbmUgX19CSVRTNCAoU0lfVFlQRV9TSVpFIC8gNCkKQEAgLTYxLDYgKzUxLDE1IEBACiAgICAgKHcwKSA9IF9fbGxfbG93cGFydCAoX194MSkgKiBfX2xsX0IgKyBfX2xsX2xvd3BhcnQgKF9feDApOwkJXAogICB9IHdoaWxlICgwKQogCisjZWxzZQorCisjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKyAgX19hc21fXyAoIm11bHUlLmwgJTMsJTE6JTAiCQkJCQkJXAorICAgICAgICAgICA6ICI9ZCIgKChVU0l0eXBlKSh3MCkpLAkJCQkJXAorICAgICAgICAgICAgICI9ZCIgKChVU0l0eXBlKSh3MSkpCQkJCQlcCisgICAgICAgICAgIDogIiUwIiAoKFVTSXR5cGUpKHUpKSwJCQkJCVwKKyAgICAgICAgICAgICAiZG1pIiAoKFVTSXR5cGUpKHYpKSkKKwogI2VuZGlmCiAKICNkZWZpbmUgX191bXVsc2lkaTModSwgdikgXApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZwppbmRleCAzNzg2MmIyLi44MDdjOTdlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZwpAQCAtNjc4LDcgKzY3OCw3IEBACiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15Ci1DT05GSUdfUlRDX0NMQVNTPW0KK0NPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15CiBDT05GSUdfUlRDX0RSVl9URVNUPW0KIENPTkZJR19SVENfRFJWX0RTMTMwNz1tCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3RyYXBzLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL3RyYXBzLmMKaW5kZXggZjAzY2IyNy4uYmQzZTVlNyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdHJhcHMuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAJY2FzZSBFWENFUF9UUkFQOgogCWNhc2UgRVhDRVBfVU5JTVBJTlM6Ci0JCWlmIChnZXRfdXNlcihvcGNvZGUsICh1aW50OF90IF9fdXNlciAqKXJlZ3MtPnBjKSAhPSAwKQorCQlpZiAocHJvYmVfa2VybmVsX3JlYWQoJm9wY29kZSwgKHU4ICopcmVncy0+cGMsIDEpIDwgMCkKIAkJCWJyZWFrOwogCQlpZiAob3Bjb2RlID09IDB4ZmYpIHsKIAkJCWlmIChub3RpZnlfZGllKERJRV9CUkVBS1BPSU5ULCBzdHIsIHJlZ3MsIGNvZGUsIDAsIDApKQpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZmNzAyYTYuLjEzYzQ4MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTQ0LDYgKzQ0LDcgQEAKICAgUk9fREFUQShQQUdFX1NJWkUpCiAKICAgLyogd3JpdGVhYmxlICovCisgIF9zZGF0YSA9IC47ICAgICAvKiBTdGFydCBvZiBydyBkYXRhIHNlY3Rpb24gKi8KICAgUldfREFUQV9TRUNUSU9OKDMyLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQogICBfZWRhdGEgPSAuOwogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvbW0vY2FjaGUtZGJnLWZsdXNoLWJ5LXJlZy5TIGIvYXJjaC9tbjEwMzAwL21tL2NhY2hlLWRiZy1mbHVzaC1ieS1yZWcuUwppbmRleCA2NjU5MTlmLi5hNzc1ZWE1IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvbW0vY2FjaGUtZGJnLWZsdXNoLWJ5LXJlZy5TCisrKyBiL2FyY2gvbW4xMDMwMC9tbS9jYWNoZS1kYmctZmx1c2gtYnktcmVnLlMKQEAgLTEyMCwxNCArMTIwLDE0IEBACiAJIyBjb25kaXRpb25hbGx5IHB1cmdlIHRoaXMgbGluZSBpbiBhbGwgd2F5cwogCW1vdglkMSwoTDFfQ0FDSEVfV0FZRElTUCowLGEwKQogCi1kZWJ1Z2dlcl9sb2NhbF9jYWNoZV9mbHVzaGludl9ub19kY2FjaGU6CitkZWJ1Z2dlcl9sb2NhbF9jYWNoZV9mbHVzaGludl9vbmVfbm9fZGNhY2hlOgogCSMKIAkjIG5vdyB0cnkgdG8gZmx1c2ggdGhlIGljYWNoZQogCSMKIAltb3YJQ0hDVFIsYTAKIAltb3ZodQkoYTApLGQwCiAJYnRzdAlDSENUUl9JQ0VOLGQwCi0JYmVxCW1uMTAzMDBfbG9jYWxfaWNhY2hlX2ludl9yYW5nZV9yZWdfZW5kCisJYmVxCWRlYnVnZ2VyX2xvY2FsX2NhY2hlX2ZsdXNoaW52X29uZV9lbmQKIAogCUxPQ0FMX0NMSV9TQVZFKGQxKQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC8uZ2l0aWdub3JlIGIvYXJjaC9wb3dlcnBjL2Jvb3QvLmdpdGlnbm9yZQppbmRleCAzZDgwYzNlLi4xMmRhNzdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC8uZ2l0aWdub3JlCisrKyBiL2FyY2gvcG93ZXJwYy9ib290Ly5naXRpZ25vcmUKQEAgLTEsNSArMSw0IEBACiBhZGRub3RlCi1kdGMKIGVtcHR5LmMKIGhhY2stY29mZgogaW5mYmxvY2suYwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy8uZ2l0aWdub3JlIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2MzZjk0Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotZHRjLWxleGVyLmxleC5jCi1kdGMtcGFyc2VyLnRhYi5jCi1kdGMtcGFyc2VyLnRhYi5oCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKaW5kZXggN2Y3ZTRhOC4uMjJlNzE5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwpAQCAtODUsNyArODUsNyBAQAogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NUT1JBR0U9bQotQ09ORklHX1JUQ19DTEFTUz1tCitDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX1BDRjg1NjM9bQogQ09ORklHX0VYVDJfRlM9bQogQ09ORklHX0VYVDNfRlM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKaW5kZXggNjQ3MjMyMi4uMTg1YzI5MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCkBAIC0xNDEsNyArMTQxLDcgQEAKICMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiBDT05GSUdfVVNCX1NUT1JBR0U9bQotQ09ORklHX1JUQ19DTEFTUz1tCitDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX1BTMz1tCiBDT05GSUdfRVhUMl9GUz1tCiBDT05GSUdfRVhUM19GUz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmlvLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmlvLmgKaW5kZXggZDkwMmFiZC4uYjFkMmRlYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Jpby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yaW8uaApAQCAtMTQsNyArMTQsNyBAQAogI2RlZmluZSBBU01fUFBDX1JJT19ICiAKIGV4dGVybiB2b2lkIHBsYXRmb3JtX3Jpb19pbml0KHZvaWQpOwotI2lmZGVmIENPTkZJR19SQVBJRElPCisjaWZkZWYgQ09ORklHX0ZTTF9SSU8KIGV4dGVybiBpbnQgZnNsX3Jpb19tY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICopOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGZzbF9yaW9fbWNoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykge3JldHVybiAwOyB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggMzRkMjcyMi4uOWZiOTMzMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtMTk3OSw3ICsxOTc5LDcgQEAKIAkJLnB2cl92YWx1ZQkJPSAweDgwMjQwMDAwLAogCQkuY3B1X25hbWUJCT0gImU1NTAwIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FNTUwMCwKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfQk9PS0UsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFIHwgUFBDX0ZFQVRVUkVfSEFTX0ZQVSwKIAkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfRlNMX0UgfCBNTVVfRlRSX0JJR19QSFlTIHwKIAkJCU1NVV9GVFJfVVNFX1RMQklMWCwKIAkJLmljYWNoZV9ic2l6ZQkJPSA2NCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKaW5kZXggZjJjOTA2Yi4uOGMzMTEyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKQEAgLTgyLDExICs4MiwyOSBAQAogfQogZWFybHlfcGFyYW0oIm1lbSIsIGVhcmx5X3BhcnNlX21lbSk7CiAKKy8qCisgKiBvdmVybGFwc19pbml0cmQgLSBjaGVjayBmb3Igb3ZlcmxhcCB3aXRoIHBhZ2UgYWxpZ25lZCBleHRlbnNpb24gb2YKKyAqIGluaXRyZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgb3ZlcmxhcHNfaW5pdHJkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKwlpZiAoIWluaXRyZF9zdGFydCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4JKHN0YXJ0ICsgc2l6ZSkgPiBfQUxJR05fRE9XTihpbml0cmRfc3RhcnQsIFBBR0VfU0laRSkgJiYKKwkJCXN0YXJ0IDw9IF9BTElHTl9VUChpbml0cmRfZW5kLCBQQUdFX1NJWkUpOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCiAvKioKICAqIG1vdmVfZGV2aWNlX3RyZWUgLSBtb3ZlIHRyZWUgdG8gYW4gdW51c2VkIGFyZWEsIGlmIG5lZWRlZC4KICAqCiAgKiBUaGUgZGV2aWNlIHRyZWUgbWF5IGJlIGFsbG9jYXRlZCBiZXlvbmQgb3VyIG1lbW9yeSBsaW1pdCwgb3IgaW5zaWRlIHRoZQotICogY3Jhc2gga2VybmVsIHJlZ2lvbiBmb3Iga2R1bXAuIElmIHNvLCBtb3ZlIGl0IG91dCBvZiB0aGUgd2F5LgorICogY3Jhc2gga2VybmVsIHJlZ2lvbiBmb3Iga2R1bXAsIG9yIHdpdGhpbiB0aGUgcGFnZSBhbGlnbmVkIHJhbmdlIG9mIGluaXRyZC4KKyAqIElmIHNvLCBtb3ZlIGl0IG91dCBvZiB0aGUgd2F5LgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgbW92ZV9kZXZpY2VfdHJlZSh2b2lkKQogewpAQCAtOTksNyArMTE3LDggQEAKIAlzaXplID0gYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+dG90YWxzaXplKTsKIAogCWlmICgobWVtb3J5X2xpbWl0ICYmIChzdGFydCArIHNpemUpID4gUEhZU0lDQUxfU1RBUlQgKyBtZW1vcnlfbGltaXQpIHx8Ci0JCQlvdmVybGFwc19jcmFzaGtlcm5lbChzdGFydCwgc2l6ZSkpIHsKKwkJCW92ZXJsYXBzX2NyYXNoa2VybmVsKHN0YXJ0LCBzaXplKSB8fAorCQkJb3ZlcmxhcHNfaW5pdHJkKHN0YXJ0LCBzaXplKSkgewogCQlwID0gX192YShtZW1ibG9ja19hbGxvYyhzaXplLCBQQUdFX1NJWkUpKTsKIAkJbWVtY3B5KHAsIGluaXRpYWxfYm9vdF9wYXJhbXMsIHNpemUpOwogCQlpbml0aWFsX2Jvb3RfcGFyYW1zID0gKHN0cnVjdCBib290X3BhcmFtX2hlYWRlciAqKXA7CkBAIC01NTUsNyArNTc0LDkgQEAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAkvKiB0aGVuIHJlc2VydmUgdGhlIGluaXRyZCwgaWYgYW55ICovCiAJaWYgKGluaXRyZF9zdGFydCAmJiAoaW5pdHJkX2VuZCA+IGluaXRyZF9zdGFydCkpCi0JCW1lbWJsb2NrX3Jlc2VydmUoX19wYShpbml0cmRfc3RhcnQpLCBpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0KTsKKwkJbWVtYmxvY2tfcmVzZXJ2ZShfQUxJR05fRE9XTihfX3BhKGluaXRyZF9zdGFydCksIFBBR0VfU0laRSksCisJCQlfQUxJR05fVVAoaW5pdHJkX2VuZCwgUEFHRV9TSVpFKSAtCisJCQlfQUxJR05fRE9XTihpbml0cmRfc3RhcnQsIFBBR0VfU0laRSkpOwogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLwogCiAjaWZkZWYgQ09ORklHX1BQQzMyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwppbmRleCBkNjViNTkxLi41ZGUwZjI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKQEAgLTIyMywyMSArMjIzLDYgQEAKICN1bmRlZiBGUkVFU0VDCiB9CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLXZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWlmIChzdGFydCA8IGVuZCkKLQkJcHJpbnRrICgiRnJlZWluZyBpbml0cmQgbWVtb3J5OiAlbGRrIGZyZWVkXG4iLCAoZW5kIC0gc3RhcnQpID4+IDEwKTsKLQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOwotCQlmcmVlX3BhZ2Uoc3RhcnQpOwotCQl0b3RhbHJhbV9wYWdlcysrOwotCX0KLX0KLSNlbmRpZgotCi0KICNpZmRlZiBDT05GSUdfOHh4IC8qIE5vIDh4eCBzcGVjaWZpYyAuYyBmaWxlIHRvIHB1dCB0aGF0IGluIC4uLiAqLwogdm9pZCBzZXR1cF9pbml0aWFsX21lbW9yeV9saW1pdChwaHlzX2FkZHJfdCBmaXJzdF9tZW1ibG9ja19iYXNlLAogCQkJCXBoeXNfYWRkcl90IGZpcnN0X21lbWJsb2NrX3NpemUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwppbmRleCA2Mzc0YjIxLi5mNmRiYjRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKQEAgLTk5LDIwICs5OSw2IEBACiAJCSgodW5zaWduZWQgbG9uZylfX2luaXRfZW5kIC0gKHVuc2lnbmVkIGxvbmcpX19pbml0X2JlZ2luKSA+PiAxMCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLXZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWlmIChzdGFydCA8IGVuZCkKLQkJcHJpbnRrICgiRnJlZWluZyBpbml0cmQgbWVtb3J5OiAlbGRrIGZyZWVkXG4iLCAoZW5kIC0gc3RhcnQpID4+IDEwKTsKLQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOwotCQlmcmVlX3BhZ2Uoc3RhcnQpOwotCQl0b3RhbHJhbV9wYWdlcysrOwotCX0KLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBwZ2RfY3Rvcih2b2lkICphZGRyKQogewogCW1lbXNldChhZGRyLCAwLCBQR0RfVEFCTEVfU0laRSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKaW5kZXggNTdlNTQ1Yi4uMjlkNGRkZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21lbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwpAQCAtMzgyLDYgKzM4MiwyNSBAQAogCW1lbV9pbml0X2RvbmUgPSAxOwogfQogCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECit2b2lkIF9faW5pdCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaWYgKHN0YXJ0ID49IGVuZCkKKwkJcmV0dXJuOworCisJc3RhcnQgPSBfQUxJR05fRE9XTihzdGFydCwgUEFHRV9TSVpFKTsKKwllbmQgPSBfQUxJR05fVVAoZW5kLCBQQUdFX1NJWkUpOworCXByX2luZm8oIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWxkayBmcmVlZFxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7CisKKwlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOworCQlmcmVlX3BhZ2Uoc3RhcnQpOworCQl0b3RhbHJhbV9wYWdlcysrOworCX0KK30KKyNlbmRpZgorCiAvKgogICogVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaGFzIGJlZW4gbW9kaWZpZWQgYnkgdGhlIGtlcm5lbC4KICAqIEl0IGp1c3QgbWFya3MgdGhlIHBhZ2UgYXMgbm90IGktY2FjaGUgY2xlYW4uICBXZSBkbyB0aGUgaS1jYWNoZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKaW5kZXggOTA4OWIwNC4uNzY2N2RiNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCkBAIC03MTUsNyArNzE1LDggQEAKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9wbWFjcGljX3N5c2NvcmUodm9pZCkKIHsKLQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcG1hY3BpY19zeXNjb3JlX29wcyk7CisJaWYgKHBtYWNfaXJxX2h3WzBdKQorCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcG1hY3BpY19zeXNjb3JlX29wcyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMKaW5kZXggMDYwOGIxNi4uZDkxNzU3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMKQEAgLTE5Niw5ICsxOTYsNiBAQAogCW91dF9iZTMyKCZsYmMtPmx0ZWNjciwgTFRFQ0NSX0NMRUFSKTsKIAlvdXRfYmUzMigmbGJjLT5sdGVkciwgTFRFRFJfRU5BQkxFKTsKIAotCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciBhbnkgZGV0ZWN0ZWQgZXZlbnRzICovCi0Jb3V0X2JlMzIoJmxiYy0+bHRlaXIsIExURUlSX0VOQUJMRSk7Ci0KIAkvKiBTZXQgdGhlIG1vbml0b3IgdGltZW91dCB2YWx1ZSB0byB0aGUgbWF4aW11bSBmb3IgZXJyYXR1bSBBMDAxICovCiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5vZGUsICJmc2wsZWxiYyIpKQogCQljbHJzZXRiaXRzX2JlMzIoJmxiYy0+bGJjciwgTEJDUl9CTVQsIExCQ1JfQk1UUFMpOwpAQCAtMzIyLDYgKzMxOSw5IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciBhbnkgZGV0ZWN0ZWQgZXZlbnRzICovCisJb3V0X2JlMzIoJmZzbF9sYmNfY3RybF9kZXYtPnJlZ3MtPmx0ZWlyLCBMVEVJUl9FTkFCTEUpOworCiAJcmV0dXJuIDA7CiAKIGVycjoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggOWZhYjJhYS4uOTBkNzdiZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTg5LDYgKzg5LDcgQEAKIAlzZWxlY3QgSEFWRV9HRVRfVVNFUl9QQUdFU19GQVNUCiAJc2VsZWN0IEhBVkVfQVJDSF9NVVRFWF9DUFVfUkVMQVgKIAlzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUwgaWYgIU1BUkNIX0c1CisJc2VsZWN0IEhBVkVfUkNVX1RBQkxFX0ZSRUUgaWYgU01QCiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fVFJZTE9DSwogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0tfQkgKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9MT0NLCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCBmNjMxNGFmLi4zOGU3MWViIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTE3LDE1ICsxNywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKLSNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8ge30gd2hpbGUgKDApCi0KIHVuc2lnbmVkIGxvbmcgKmNyc3RfdGFibGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKIHZvaWQgY3JzdF90YWJsZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyAqKTsKLXZvaWQgY3JzdF90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgKik7CiAKIHVuc2lnbmVkIGxvbmcgKnBhZ2VfdGFibGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKIHZvaWQgcGFnZV90YWJsZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyAqKTsKLXZvaWQgcGFnZV90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgKik7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKK3ZvaWQgcGFnZV90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW11X2dhdGhlciAqLCB1bnNpZ25lZCBsb25nICopOwordm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqX3RhYmxlKTsKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdGFibGUodW5zaWduZWQgbG9uZyAqcywgdW5zaWduZWQgbG9uZyB2YWwsIHNpemVfdCBuKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZTRlZmFjZi4uODAxZmJlMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yOTMsMTkgKzI5Myw2IEBACiAgKiBzd2FwIHB0ZSBpcyAxMDExIGFuZCAwMDAxLCAwMDExLCAwMTAxLCAwMTExIGFyZSBpbnZhbGlkLgogICovCiAKLS8qIFBhZ2Ugc3RhdHVzIHRhYmxlIGJpdHMgZm9yIHZpcnR1YWxpemF0aW9uICovCi0jZGVmaW5lIFJDUF9BQ0NfQklUUwkweGYwMDAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfRlBfQklUCTB4MDgwMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFJDUF9QQ0xfQklUCTB4MDA4MDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFJDUF9IUl9CSVQJMHgwMDQwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgUkNQX0hDX0JJVAkweDAwMjAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfR1JfQklUCTB4MDAwNDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFJDUF9HQ19CSVQJMHgwMDAyMDAwMDAwMDAwMDAwVUwKLQotLyogVXNlciBkaXJ0eSAvIHJlZmVyZW5jZWQgYml0IGZvciBLVk0ncyBtaWdyYXRpb24gZmVhdHVyZSAqLwotI2RlZmluZSBLVk1fVVJfQklUCTB4MDAwMDgwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIEtWTV9VQ19CSVQJMHgwMDAwNDAwMDAwMDAwMDAwVUwKLQogI2lmbmRlZiBfX3MzOTB4X18KIAogLyogQml0cyBpbiB0aGUgc2VnbWVudCB0YWJsZSBhZGRyZXNzLXNwYWNlLWNvbnRyb2wtZWxlbWVudCAqLwpAQCAtMzI1LDYgKzMxMiwxOSBAQAogI2RlZmluZSBfU0VHTUVOVF9FTlRSWQkJKF9TRUdNRU5UX0VOVFJZX1BUTCkKICNkZWZpbmUgX1NFR01FTlRfRU5UUllfRU1QVFkJKF9TRUdNRU5UX0VOVFJZX0lOVikKIAorLyogUGFnZSBzdGF0dXMgdGFibGUgYml0cyBmb3IgdmlydHVhbGl6YXRpb24gKi8KKyNkZWZpbmUgUkNQX0FDQ19CSVRTCTB4ZjAwMDAwMDBVTAorI2RlZmluZSBSQ1BfRlBfQklUCTB4MDgwMDAwMDBVTAorI2RlZmluZSBSQ1BfUENMX0JJVAkweDAwODAwMDAwVUwKKyNkZWZpbmUgUkNQX0hSX0JJVAkweDAwNDAwMDAwVUwKKyNkZWZpbmUgUkNQX0hDX0JJVAkweDAwMjAwMDAwVUwKKyNkZWZpbmUgUkNQX0dSX0JJVAkweDAwMDQwMDAwVUwKKyNkZWZpbmUgUkNQX0dDX0JJVAkweDAwMDIwMDAwVUwKKworLyogVXNlciBkaXJ0eSAvIHJlZmVyZW5jZWQgYml0IGZvciBLVk0ncyBtaWdyYXRpb24gZmVhdHVyZSAqLworI2RlZmluZSBLVk1fVVJfQklUCTB4MDAwMDgwMDBVTAorI2RlZmluZSBLVk1fVUNfQklUCTB4MDAwMDQwMDBVTAorCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAogLyogQml0cyBpbiB0aGUgc2VnbWVudC9yZWdpb24gdGFibGUgYWRkcmVzcy1zcGFjZS1jb250cm9sLWVsZW1lbnQgKi8KQEAgLTM2Nyw2ICszNjcsMTkgQEAKICNkZWZpbmUgX1NFR01FTlRfRU5UUllfTEFSR0UJMHg0MDAJLyogU1RFLWZvcm1hdCBjb250cm9sLCBsYXJnZSBwYWdlICAgKi8KICNkZWZpbmUgX1NFR01FTlRfRU5UUllfQ08JMHgxMDAJLyogY2hhbmdlLXJlY29yZGluZyBvdmVycmlkZSAgICovCiAKKy8qIFBhZ2Ugc3RhdHVzIHRhYmxlIGJpdHMgZm9yIHZpcnR1YWxpemF0aW9uICovCisjZGVmaW5lIFJDUF9BQ0NfQklUUwkweGYwMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfRlBfQklUCTB4MDgwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFJDUF9QQ0xfQklUCTB4MDA4MDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFJDUF9IUl9CSVQJMHgwMDQwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUkNQX0hDX0JJVAkweDAwMjAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfR1JfQklUCTB4MDAwNDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFJDUF9HQ19CSVQJMHgwMDAyMDAwMDAwMDAwMDAwVUwKKworLyogVXNlciBkaXJ0eSAvIHJlZmVyZW5jZWQgYml0IGZvciBLVk0ncyBtaWdyYXRpb24gZmVhdHVyZSAqLworI2RlZmluZSBLVk1fVVJfQklUCTB4MDAwMDgwMDAwMDAwMDAwMFVMCisjZGVmaW5lIEtWTV9VQ19CSVQJMHgwMDAwNDAwMDAwMDAwMDAwVUwKKwogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKaW5kZXggMzUwZTdlZS4uMTVjOTc2MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCkBAIC0xMzksMTEwICsxMzksNDcgQEAKIAlzdHJ1Y3Qgc2xpYmUgc2xpYmVbUURJT19NQVhfQlVGRkVSU19QRVJfUV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsIGFsaWduZWQoMjA0OCkpKTsKIAotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9mbGFncyAtIHN0b3JhZ2UgYmxvY2sgYWRkcmVzcyBsaXN0IGZsYWdzCi0gKiBAbGFzdDogbGFzdCBlbnRyeQotICogQGNvbnQ6IGNvbnRpZ3VvdXMgc3RvcmFnZQotICogQGZyYWc6IGZyYWdtZW50YXRpb24KLSAqLwotc3RydWN0IHNiYWxfZmxhZ3MgewotCXU4CTogMTsKLQl1OCBsYXN0IDogMTsKLQl1OCBjb250IDogMTsKLQl1OAk6IDE7Ci0JdTggZnJhZyA6IDI7Ci0JdTgJOiAyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisjZGVmaW5lIFNCQUxfRUZMQUdTX0xBU1RfRU5UUlkJCTB4NDAKKyNkZWZpbmUgU0JBTF9FRkxBR1NfQ09OVElHVU9VUwkJMHgyMAorI2RlZmluZSBTQkFMX0VGTEFHU19GSVJTVF9GUkFHCQkweDA0CisjZGVmaW5lIFNCQUxfRUZMQUdTX01JRERMRV9GUkFHCQkweDA4CisjZGVmaW5lIFNCQUxfRUZMQUdTX0xBU1RfRlJBRwkJMHgwYworI2RlZmluZSBTQkFMX0VGTEFHU19NQVNLCQkweDZmCiAKLSNkZWZpbmUgU0JBTF9GTEFHU19GSVJTVF9GUkFHCQkweDA0MDAwMDAwVUwKLSNkZWZpbmUgU0JBTF9GTEFHU19NSURETEVfRlJBRwkJMHgwODAwMDAwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1NfTEFTVF9GUkFHCQkweDBjMDAwMDAwVUwKLSNkZWZpbmUgU0JBTF9GTEFHU19MQVNUX0VOVFJZCQkweDQwMDAwMDAwVUwKLSNkZWZpbmUgU0JBTF9GTEFHU19DT05USUdVT1VTCQkweDIwMDAwMDAwVUwKLQotI2RlZmluZSBTQkFMX0ZMQUdTMF9EQVRBX0NPTlRJTlVBVElPTgkweDIwVUwKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1BDSV9SRVEJCTB4NDAKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0RBVEFfQ09OVElOVUFUSU9OCTB4MjAKIAogLyogQXdlc29tZSBPcGVuRkNQIGV4dGVuc2lvbnMgKi8KLSNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9TVEFUVVMJCTB4MDBVTAotI2RlZmluZSBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFCQkweDA4VUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9SRUFECQkweDEwVUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFECTB4MThVTAotI2RlZmluZSBTQkFMX0ZMQUdTMF9NT1JFX1NCQUxTCQkweDA0VUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfQ09NTUFORAkJMHgwMlVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX0xBU1RfU0JBTAkJMHgwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX09OTFlfU0JBTAkJU0JBTF9GTEFHUzBfQ09NTUFORAotI2RlZmluZSBTQkFMX0ZMQUdTMF9NSURETEVfU0JBTAkJU0JBTF9GTEFHUzBfTU9SRV9TQkFMUwotI2RlZmluZSBTQkFMX0ZMQUdTMF9GSVJTVF9TQkFMIFNCQUxfRkxBR1MwX01PUkVfU0JBTFMgfCBTQkFMX0ZMQUdTMF9DT01NQU5ECi0jZGVmaW5lIFNCQUxfRkxBR1MwX1BDSQkJCTB4NDAKLQotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9zYmFsZl8wIC0gc2JhbCBmbGFncyBmb3Igc2JhbGUgMAotICogQHBjaTogUENJIGluZGljYXRvcgotICogQGNvbnQ6IGRhdGEgY29udGludWF0aW9uCi0gKiBAc2J0eXBlOiBzdG9yYWdlLWJsb2NrIHR5cGUgKEZDUCkKLSAqLwotc3RydWN0IHNiYWxfc2JhbGZfMCB7Ci0JdTgJICA6IDE7Ci0JdTggcGNpCSAgOiAxOwotCXU4IGNvbnQgICA6IDE7Ci0JdTggc2J0eXBlIDogMjsKLQl1OAkgIDogMzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBzYmFsX3NiYWxmXzEgLSBzYmFsIGZsYWdzIGZvciBzYmFsZSAxCi0gKiBAa2V5OiBzdG9yYWdlIGtleQotICovCi1zdHJ1Y3Qgc2JhbF9zYmFsZl8xIHsKLQl1OCAgICAgOiA0OwotCXU4IGtleSA6IDQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9zYmFsZl8xNCAtIHNiYWwgZmxhZ3MgZm9yIHNiYWxlIDE0Ci0gKiBAZXJyaWR4OiBlcnJvciBpbmRleAotICovCi1zdHJ1Y3Qgc2JhbF9zYmFsZl8xNCB7Ci0JdTgJICA6IDQ7Ci0JdTggZXJyaWR4IDogNDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBzYmFsX3NiYWxmXzE1IC0gc2JhbCBmbGFncyBmb3Igc2JhbGUgMTUKLSAqIEByZWFzb246IHJlYXNvbiBmb3IgZXJyb3Igc3RhdGUKLSAqLwotc3RydWN0IHNiYWxfc2JhbGZfMTUgewotCXU4IHJlYXNvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHVuaW9uIHNiYWxfc2JhbGYgLSBzdG9yYWdlIGJsb2NrIGFkZHJlc3MgbGlzdCBmbGFncwotICogQGkwOiBzYmFsZjAKLSAqIEBpMTogc2JhbGYxCi0gKiBAaTE0OiBzYmFsZjE0Ci0gKiBAaTE1OiBzYmxhZjE1Ci0gKiBAdmFsdWU6IHJhdyB2YWx1ZQotICovCi11bmlvbiBzYmFsX3NiYWxmIHsKLQlzdHJ1Y3Qgc2JhbF9zYmFsZl8wICBpMDsKLQlzdHJ1Y3Qgc2JhbF9zYmFsZl8xICBpMTsKLQlzdHJ1Y3Qgc2JhbF9zYmFsZl8xNCBpMTQ7Ci0Jc3RydWN0IHNiYWxfc2JhbGZfMTUgaTE1OwotCXU4IHZhbHVlOwotfTsKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1RZUEVfU1RBVFVTCTB4MDAKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEUJCTB4MDgKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRAkJMHgxMAorI2RlZmluZSBTQkFMX1NGTEFHUzBfVFlQRV9XUklURV9SRUFECTB4MTgKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX01PUkVfU0JBTFMJCTB4MDQKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0NPTU1BTkQJCTB4MDIKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0xBU1RfU0JBTAkJMHgwMAorI2RlZmluZSBTQkFMX1NGTEFHUzBfT05MWV9TQkFMCQlTQkFMX1NGTEFHUzBfQ09NTUFORAorI2RlZmluZSBTQkFMX1NGTEFHUzBfTUlERExFX1NCQUwJU0JBTF9TRkxBR1MwX01PUkVfU0JBTFMKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0ZJUlNUX1NCQUwgKFNCQUxfU0ZMQUdTMF9NT1JFX1NCQUxTIHwgU0JBTF9TRkxBR1MwX0NPTU1BTkQpCiAKIC8qKgogICogc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgLSBTQkFMIGVudHJ5Ci0gKiBAZmxhZ3M6IGZsYWdzCisgKiBAZWZsYWdzOiBTQkFMIGVudHJ5IGZsYWdzCisgKiBAc2NvdW50OiBTQkFMIGNvdW50CisgKiBAc2ZsYWdzOiB3aG9sZSBTQkFMIGZsYWdzCiAgKiBAbGVuZ3RoOiBsZW5ndGgKICAqIEBhZGRyOiBhZGRyZXNzCiAqLwogc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgewotCXUzMiBmbGFnczsKKwl1OCBlZmxhZ3M7CisJLyogcHJpdmF0ZTogKi8KKwl1OCByZXMxOworCS8qIHB1YmxpYzogKi8KKwl1OCBzY291bnQ7CisJdTggc2ZsYWdzOwogCXUzMiBsZW5ndGg7CiAjaWZkZWYgQ09ORklHXzMyQklUCiAJLyogcHJpdmF0ZTogKi8KLQl2b2lkICpyZXNlcnZlZDsKKwl2b2lkICpyZXMyOwogCS8qIHB1YmxpYzogKi8KICNlbmRpZgogCXZvaWQgKmFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggNzdlZWU1NC4uYzY4N2EyYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaApAQCAtMjYsNjcgKzI2LDYwIEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogc3RydWN0IG1tdV9nYXRoZXIgewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCisJc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2g7CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQgZnVsbG1tOwotCXVuc2lnbmVkIGludCBucl9wdGVzOwotCXVuc2lnbmVkIGludCBucl9weGRzOwotCXVuc2lnbmVkIGludCBtYXg7Ci0Jdm9pZCAqKmFycmF5OwotCXZvaWQgKmxvY2FsWzhdOworCXVuc2lnbmVkIGludCBuZWVkX2ZsdXNoOwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX2FsbG9jX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9OT1dBSVQgfCBfX0dGUF9OT1dBUk4sIDApOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCitzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoIHsKKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKKwl1bnNpZ25lZCBpbnQJCW5yOworCXZvaWQJCQkqdGFibGVzWzBdOworfTsKIAotCWlmIChhZGRyKSB7Ci0JCXRsYi0+YXJyYXkgPSAodm9pZCAqKSBhZGRyOwotCQl0bGItPm1heCA9IFBBR0VfU0laRSAvIHNpemVvZih2b2lkICopOwotCX0KLX0KKyNkZWZpbmUgTUFYX1RBQkxFX0JBVENICQlcCisJKChQQUdFX1NJWkUgLSBzaXplb2Yoc3RydWN0IG1tdV90YWJsZV9iYXRjaCkpIC8gc2l6ZW9mKHZvaWQgKikpCisKK2V4dGVybiB2b2lkIHRsYl90YWJsZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKTsKK2V4dGVybiB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpOworI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfZ2F0aGVyX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAogCQkJCSAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJICB1bnNpZ25lZCBpbnQgZnVsbF9tbV9mbHVzaCkKIHsKIAl0bGItPm1tID0gbW07Ci0JdGxiLT5tYXggPSBBUlJBWV9TSVpFKHRsYi0+bG9jYWwpOwotCXRsYi0+YXJyYXkgPSB0bGItPmxvY2FsOwogCXRsYi0+ZnVsbG1tID0gZnVsbF9tbV9mbHVzaDsKKwl0bGItPm5lZWRfZmx1c2ggPSAwOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCisJdGxiLT5iYXRjaCA9IE5VTEw7CisjZW5kaWYKIAlpZiAodGxiLT5mdWxsbW0pCiAJCV9fdGxiX2ZsdXNoX21tKG1tKTsKLQllbHNlCi0JCV9fdGxiX2FsbG9jX3BhZ2UodGxiKTsKLQl0bGItPm5yX3B0ZXMgPSAwOwotCXRsYi0+bnJfcHhkcyA9IHRsYi0+bWF4OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQogewotCWlmICghdGxiLT5mdWxsbW0gJiYgKHRsYi0+bnJfcHRlcyA+IDAgfHwgdGxiLT5ucl9weGRzIDwgdGxiLT5tYXgpKQotCQlfX3RsYl9mbHVzaF9tbSh0bGItPm1tKTsKLQl3aGlsZSAodGxiLT5ucl9wdGVzID4gMCkKLQkJcGFnZV90YWJsZV9mcmVlX3JjdSh0bGItPm1tLCB0bGItPmFycmF5Wy0tdGxiLT5ucl9wdGVzXSk7Ci0Jd2hpbGUgKHRsYi0+bnJfcHhkcyA8IHRsYi0+bWF4KQotCQljcnN0X3RhYmxlX2ZyZWVfcmN1KHRsYi0+bW0sIHRsYi0+YXJyYXlbdGxiLT5ucl9weGRzKytdKTsKKwlpZiAoIXRsYi0+bmVlZF9mbHVzaCkKKwkJcmV0dXJuOworCXRsYi0+bmVlZF9mbHVzaCA9IDA7CisJX190bGJfZmx1c2hfbW0odGxiLT5tbSk7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKKwl0bGJfdGFibGVfZmx1c2godGxiKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZpbmlzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXRsYl9mbHVzaF9tbXUodGxiKTsKLQotCXJjdV90YWJsZV9mcmVlbGlzdF9maW5pc2goKTsKLQotCS8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLwotCWNoZWNrX3BndF9jYWNoZSgpOwotCi0JaWYgKHRsYi0+YXJyYXkgIT0gdGxiLT5sb2NhbCkKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgdGxiLT5hcnJheSwgMCk7CiB9CiAKIC8qCkBAIC0xMTIsMTIgKzEwNSwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX3QgcHRlLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlpZiAoIXRsYi0+ZnVsbG1tKSB7Ci0JCXRsYi0+YXJyYXlbdGxiLT5ucl9wdGVzKytdID0gcHRlOwotCQlpZiAodGxiLT5ucl9wdGVzID49IHRsYi0+bnJfcHhkcykKLQkJCXRsYl9mbHVzaF9tbXUodGxiKTsKLQl9IGVsc2UKLQkJcGFnZV90YWJsZV9mcmVlKHRsYi0+bW0sICh1bnNpZ25lZCBsb25nICopIHB0ZSk7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQlyZXR1cm4gcGFnZV90YWJsZV9mcmVlX3JjdSh0bGIsICh1bnNpZ25lZCBsb25nICopIHB0ZSk7CisjZW5kaWYKKwlwYWdlX3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcHRlKTsKIH0KIAogLyoKQEAgLTEzMywxMiArMTI1LDExIEBACiAjaWZkZWYgX19zMzkweF9fCiAJaWYgKHRsYi0+bW0tPmNvbnRleHQuYXNjZV9saW1pdCA8PSAoMVVMIDw8IDMxKSkKIAkJcmV0dXJuOwotCWlmICghdGxiLT5mdWxsbW0pIHsKLQkJdGxiLT5hcnJheVstLXRsYi0+bnJfcHhkc10gPSBwbWQ7Ci0JCWlmICh0bGItPm5yX3B0ZXMgPj0gdGxiLT5ucl9weGRzKQotCQkJdGxiX2ZsdXNoX21tdSh0bGIpOwotCX0gZWxzZQotCQljcnN0X3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcG1kKTsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorCWlmICghdGxiLT5mdWxsbW0pCisJCXJldHVybiB0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcG1kKTsKKyNlbmRpZgorCWNyc3RfdGFibGVfZnJlZSh0bGItPm1tLCAodW5zaWduZWQgbG9uZyAqKSBwbWQpOwogI2VuZGlmCiB9CiAKQEAgLTE1NSwxMiArMTQ2LDExIEBACiAjaWZkZWYgX19zMzkweF9fCiAJaWYgKHRsYi0+bW0tPmNvbnRleHQuYXNjZV9saW1pdCA8PSAoMVVMIDw8IDQyKSkKIAkJcmV0dXJuOwotCWlmICghdGxiLT5mdWxsbW0pIHsKLQkJdGxiLT5hcnJheVstLXRsYi0+bnJfcHhkc10gPSBwdWQ7Ci0JCWlmICh0bGItPm5yX3B0ZXMgPj0gdGxiLT5ucl9weGRzKQotCQkJdGxiX2ZsdXNoX21tdSh0bGIpOwotCX0gZWxzZQotCQljcnN0X3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcHVkKTsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorCWlmICghdGxiLT5mdWxsbW0pCisJCXJldHVybiB0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcHVkKTsKKyNlbmRpZgorCWNyc3RfdGFibGVfZnJlZSh0bGItPm1tLCAodW5zaWduZWQgbG9uZyAqKSBwdWQpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCAzMGNhODVjLi42NzM0NWFlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC03MzEsNiArNzMxLDcgQEAKIAl9CiAJbWVtY3B5KGZhY2lsaXRpZXMsIFMzOTBfbG93Y29yZS5zdGZsZV9mYWNfbGlzdCwgMTYpOwogCWZhY2lsaXRpZXNbMF0gJj0gMHhmZjAwZmZmM2Y0N2MwMDAwVUxMOworCWZhY2lsaXRpZXNbMV0gJj0gMHgyMDFjMDAwMDAwMDAwMDAwVUxMOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TIGIvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUwppbmRleCBhYjBlMDQxLi41ZmFhMWIxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TCisrKyBiL2FyY2gvczM5MC9rdm0vc2llNjRhLlMKQEAgLTkzLDQgKzkzLDYgQEAKIAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAJLnF1YWQJc2llX2luc3Qsc2llX2VycgorCS5xdWFkCXNpZV9leGl0LHNpZV9lcnIKKwkucXVhZAlzaWVfcmVlbnRlcixzaWVfZXJyCiAJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCBiMDk3NjNmLi4zN2EyM2MyMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC0yNCw5NCArMjQsMTIgQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAotc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCB7Ci0Jc3RydWN0IHJjdV9oZWFkIHJjdTsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQl1bnNpZ25lZCBpbnQgcGd0X2luZGV4OwotCXVuc2lnbmVkIGludCBjcnN0X2luZGV4OwotCXVuc2lnbmVkIGxvbmcgKnRhYmxlWzBdOwotfTsKLQotI2RlZmluZSBSQ1VfRlJFRUxJU1RfU0laRSBcCi0JKChQQUdFX1NJWkUgLSBzaXplb2Yoc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCkpIFwKLQkgIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqLCByY3VfdGFibGVfZnJlZWxpc3QpOwotCi1zdGF0aWMgdm9pZCBfX3BhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqcmN1X3RhYmxlX2ZyZWVsaXN0X2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICoqYmF0Y2hwID0gJl9fZ2V0X2NwdV92YXIocmN1X3RhYmxlX2ZyZWVsaXN0KTsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaCA9ICpiYXRjaHA7Ci0KLQlpZiAoYmF0Y2gpCi0JCXJldHVybiBiYXRjaDsKLQliYXRjaCA9IChzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfQVRPTUlDKTsKLQlpZiAoYmF0Y2gpIHsKLQkJYmF0Y2gtPm1tID0gbW07Ci0JCWJhdGNoLT5wZ3RfaW5kZXggPSAwOwotCQliYXRjaC0+Y3JzdF9pbmRleCA9IFJDVV9GUkVFTElTVF9TSVpFOwotCQkqYmF0Y2hwID0gYmF0Y2g7Ci0JfQotCXJldHVybiBiYXRjaDsKLX0KLQotc3RhdGljIHZvaWQgcmN1X3RhYmxlX2ZyZWVsaXN0X2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaCA9Ci0JCWNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0LCByY3UpOwotCi0Jd2hpbGUgKGJhdGNoLT5wZ3RfaW5kZXggPiAwKQotCQlfX3BhZ2VfdGFibGVfZnJlZShiYXRjaC0+bW0sIGJhdGNoLT50YWJsZVstLWJhdGNoLT5wZ3RfaW5kZXhdKTsKLQl3aGlsZSAoYmF0Y2gtPmNyc3RfaW5kZXggPCBSQ1VfRlJFRUxJU1RfU0laRSkKLQkJY3JzdF90YWJsZV9mcmVlKGJhdGNoLT5tbSwgYmF0Y2gtPnRhYmxlW2JhdGNoLT5jcnN0X2luZGV4KytdKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJhdGNoKTsKLX0KLQotdm9pZCByY3VfdGFibGVfZnJlZWxpc3RfZmluaXNoKHZvaWQpCi17Ci0Jc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqKmJhdGNocCA9ICZnZXRfY3B1X3ZhcihyY3VfdGFibGVfZnJlZWxpc3QpOwotCXN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKmJhdGNoID0gKmJhdGNocDsKLQotCWlmICghYmF0Y2gpCi0JCWdvdG8gb3V0OwotCWNhbGxfcmN1KCZiYXRjaC0+cmN1LCByY3VfdGFibGVfZnJlZWxpc3RfY2FsbGJhY2spOwotCSpiYXRjaHAgPSBOVUxMOwotb3V0OgotCXB1dF9jcHVfdmFyKHJjdV90YWJsZV9mcmVlbGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNtcF9zeW5jKHZvaWQgKmFyZykKLXsKLX0KLQogI2lmbmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgQUxMT0NfT1JERVIJMQotI2RlZmluZSBUQUJMRVNfUEVSX1BBR0UJNAotI2RlZmluZSBGUkFHX01BU0sJMTVVTAotI2RlZmluZSBTRUNPTkRfSEFMVkVTCTEwVUwKLQotdm9pZCBjbGVhcl90YWJsZV9wZ3N0ZXModW5zaWduZWQgbG9uZyAqdGFibGUpCi17Ci0JY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRS80KTsKLQltZW1zZXQodGFibGUgKyAyNTYsIDAsIFBBR0VfU0laRS80KTsKLQljbGVhcl90YWJsZSh0YWJsZSArIDUxMiwgX1BBR0VfVFlQRV9FTVBUWSwgUEFHRV9TSVpFLzQpOwotCW1lbXNldCh0YWJsZSArIDc2OCwgMCwgUEFHRV9TSVpFLzQpOwotfQotCisjZGVmaW5lIEZSQUdfTUFTSwkweDBmCiAjZWxzZQogI2RlZmluZSBBTExPQ19PUkRFUgkyCi0jZGVmaW5lIFRBQkxFU19QRVJfUEFHRQkyCi0jZGVmaW5lIEZSQUdfTUFTSwkzVUwKLSNkZWZpbmUgU0VDT05EX0hBTFZFUwkyVUwKLQotdm9pZCBjbGVhcl90YWJsZV9wZ3N0ZXModW5zaWduZWQgbG9uZyAqdGFibGUpCi17Ci0JY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRS8yKTsKLQltZW1zZXQodGFibGUgKyAyNTYsIDAsIFBBR0VfU0laRS8yKTsKLX0KLQorI2RlZmluZSBGUkFHX01BU0sJMHgwMwogI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgVk1BTExPQ19TVEFSVCA9IFZNQUxMT0NfRU5EIC0gVk1BTExPQ19TSVpFOwpAQCAtMTQwLDI5ICs1OCw2IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgdGFibGUsIEFMTE9DX09SREVSKTsKIH0KIAotdm9pZCBjcnN0X3RhYmxlX2ZyZWVfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nICp0YWJsZSkKLXsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaDsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA8IDIgJiYKLQkgICAgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkgewotCQljcnN0X3RhYmxlX2ZyZWUobW0sIHRhYmxlKTsKLQkJZ290byBvdXQ7Ci0JfQotCWJhdGNoID0gcmN1X3RhYmxlX2ZyZWVsaXN0X2dldChtbSk7Ci0JaWYgKCFiYXRjaCkgewotCQlzbXBfY2FsbF9mdW5jdGlvbihzbXBfc3luYywgTlVMTCwgMSk7Ci0JCWNyc3RfdGFibGVfZnJlZShtbSwgdGFibGUpOwotCQlnb3RvIG91dDsKLQl9Ci0JYmF0Y2gtPnRhYmxlWy0tYmF0Y2gtPmNyc3RfaW5kZXhdID0gdGFibGU7Ci0JaWYgKGJhdGNoLT5wZ3RfaW5kZXggPj0gYmF0Y2gtPmNyc3RfaW5kZXgpCi0JCXJjdV90YWJsZV9mcmVlbGlzdF9maW5pc2goKTsKLW91dDoKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCiAjaWZkZWYgQ09ORklHXzY0QklUCiBpbnQgY3JzdF90YWJsZV91cGdyYWRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGxpbWl0KQogewpAQCAtMjM4LDEyNCArMTMzLDE3NSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0b21pY194b3JfYml0cyhhdG9taWNfdCAqdiwgdW5zaWduZWQgaW50IGJpdHMpCit7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3OworCisJZG8geworCQlvbGQgPSBhdG9taWNfcmVhZCh2KTsKKwkJbmV3ID0gb2xkIF4gYml0czsKKwl9IHdoaWxlIChhdG9taWNfY21weGNoZyh2LCBvbGQsIG5ldykgIT0gb2xkKTsKKwlyZXR1cm4gbmV3OworfQorCiAvKgogICogcGFnZSB0YWJsZSBlbnRyeSBhbGxvY2F0aW9uL2ZyZWUgcm91dGluZXMuCiAgKi8KKyNpZmRlZiBDT05GSUdfUEdTVEUKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqcGFnZV90YWJsZV9hbGxvY19wZ3N0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBsb25nICp0YWJsZTsKKworCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiBOVUxMOworCXBndGFibGVfcGFnZV9jdG9yKHBhZ2UpOworCWF0b21pY19zZXQoJnBhZ2UtPl9tYXBjb3VudCwgMyk7CisJdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSBwYWdlX3RvX3BoeXMocGFnZSk7CisJY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRS8yKTsKKwljbGVhcl90YWJsZSh0YWJsZSArIFBUUlNfUEVSX1BURSwgMCwgUEFHRV9TSVpFLzIpOworCXJldHVybiB0YWJsZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfZnJlZV9wZ3N0ZSh1bnNpZ25lZCBsb25nICp0YWJsZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKKwlwZ3RhYmxlX3BhZ2VfY3RvcihwYWdlKTsKKwlhdG9taWNfc2V0KCZwYWdlLT5fbWFwY291bnQsIC0xKTsKKwlfX2ZyZWVfcGFnZShwYWdlKTsKK30KKyNlbmRpZgorCiB1bnNpZ25lZCBsb25nICpwYWdlX3RhYmxlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgKnRhYmxlOwotCXVuc2lnbmVkIGxvbmcgYml0czsKKwl1bnNpZ25lZCBpbnQgbWFzaywgYml0OwogCi0JYml0cyA9IChtbS0+Y29udGV4dC5oYXNfcGdzdGUpID8gM1VMIDogMVVMOworI2lmZGVmIENPTkZJR19QR1NURQorCWlmIChtbV9oYXNfcGdzdGUobW0pKQorCQlyZXR1cm4gcGFnZV90YWJsZV9hbGxvY19wZ3N0ZShtbSk7CisjZW5kaWYKKwkvKiBBbGxvY2F0ZSBmcmFnbWVudHMgb2YgYSA0SyBwYWdlIGFzIDFLLzJLIHBhZ2UgdGFibGUgKi8KIAlzcGluX2xvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JcGFnZSA9IE5VTEw7CisJbWFzayA9IEZSQUdfTUFTSzsKIAlpZiAoIWxpc3RfZW1wdHkoJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCkpIHsKIAkJcGFnZSA9IGxpc3RfZmlyc3RfZW50cnkoJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCwKIAkJCQkJc3RydWN0IHBhZ2UsIGxydSk7Ci0JCWlmICgocGFnZS0+ZmxhZ3MgJiBGUkFHX01BU0spID09ICgoMVVMIDw8IFRBQkxFU19QRVJfUEFHRSkgLSAxKSkKLQkJCXBhZ2UgPSBOVUxMOworCQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopIHBhZ2VfdG9fcGh5cyhwYWdlKTsKKwkJbWFzayA9IGF0b21pY19yZWFkKCZwYWdlLT5fbWFwY291bnQpOworCQltYXNrID0gbWFzayB8IChtYXNrID4+IDQpOwogCX0KLQlpZiAoIXBhZ2UpIHsKKwlpZiAoKG1hc2sgJiBGUkFHX01BU0spID09IEZSQUdfTUFTSykgewogCQlzcGluX3VubG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKIAkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOwogCQlpZiAoIXBhZ2UpCiAJCQlyZXR1cm4gTlVMTDsKIAkJcGd0YWJsZV9wYWdlX2N0b3IocGFnZSk7Ci0JCXBhZ2UtPmZsYWdzICY9IH5GUkFHX01BU0s7CisJCWF0b21pY19zZXQoJnBhZ2UtPl9tYXBjb3VudCwgMSk7CiAJCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgcGFnZV90b19waHlzKHBhZ2UpOwotCQlpZiAobW0tPmNvbnRleHQuaGFzX3Bnc3RlKQotCQkJY2xlYXJfdGFibGVfcGdzdGVzKHRhYmxlKTsKLQkJZWxzZQotCQkJY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRSk7CisJCWNsZWFyX3RhYmxlKHRhYmxlLCBfUEFHRV9UWVBFX0VNUFRZLCBQQUdFX1NJWkUpOwogCQlzcGluX2xvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOworCX0gZWxzZSB7CisJCWZvciAoYml0ID0gMTsgbWFzayAmIGJpdDsgYml0IDw8PSAxKQorCQkJdGFibGUgKz0gUFRSU19QRVJfUFRFOworCQltYXNrID0gYXRvbWljX3hvcl9iaXRzKCZwYWdlLT5fbWFwY291bnQsIGJpdCk7CisJCWlmICgobWFzayAmIEZSQUdfTUFTSykgPT0gRlJBR19NQVNLKQorCQkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CiAJfQotCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgcGFnZV90b19waHlzKHBhZ2UpOwotCXdoaWxlIChwYWdlLT5mbGFncyAmIGJpdHMpIHsKLQkJdGFibGUgKz0gMjU2OwotCQliaXRzIDw8PSAxOwotCX0KLQlwYWdlLT5mbGFncyB8PSBiaXRzOwotCWlmICgocGFnZS0+ZmxhZ3MgJiBGUkFHX01BU0spID09ICgoMVVMIDw8IFRBQkxFU19QRVJfUEFHRSkgLSAxKSkKLQkJbGlzdF9tb3ZlX3RhaWwoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJcmV0dXJuIHRhYmxlOwogfQogCi1zdGF0aWMgdm9pZCBfX3BhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqdGFibGUpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBiaXRzOwotCi0JYml0cyA9ICgodW5zaWduZWQgbG9uZykgdGFibGUpICYgMTU7Ci0JdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSgoKHVuc2lnbmVkIGxvbmcpIHRhYmxlKSBeIGJpdHMpOwotCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKLQlwYWdlLT5mbGFncyBePSBiaXRzOwotCWlmICghKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSkgewotCQlwZ3RhYmxlX3BhZ2VfZHRvcihwYWdlKTsKLQkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JfQotfQotCiB2b2lkIHBhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqdGFibGUpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBiaXRzOworCXVuc2lnbmVkIGludCBiaXQsIG1hc2s7CiAKLQliaXRzID0gKG1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkgPyAzVUwgOiAxVUw7Ci0JYml0cyA8PD0gKF9fcGEodGFibGUpICYgKFBBR0VfU0laRSAtIDEpKSAvIDI1NiAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKyNpZmRlZiBDT05GSUdfUEdTVEUKKwlpZiAobW1faGFzX3Bnc3RlKG1tKSkKKwkJcmV0dXJuIHBhZ2VfdGFibGVfZnJlZV9wZ3N0ZSh0YWJsZSk7CisjZW5kaWYKKwkvKiBGcmVlIDFLLzJLIHBhZ2UgdGFibGUgZnJhZ21lbnQgb2YgYSA0SyBwYWdlICovCiAJcGFnZSA9IHBmbl90b19wYWdlKF9fcGEodGFibGUpID4+IFBBR0VfU0hJRlQpOworCWJpdCA9IDEgPDwgKChfX3BhKHRhYmxlKSAmIH5QQUdFX01BU0spLyhQVFJTX1BFUl9QVEUqc2l6ZW9mKHB0ZV90KSkpOwogCXNwaW5fbG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKLQlwYWdlLT5mbGFncyBePSBiaXRzOwotCWlmIChwYWdlLT5mbGFncyAmIEZSQUdfTUFTSykgewotCQkvKiBQYWdlIG5vdyBoYXMgc29tZSBmcmVlIHBndGFibGUgZnJhZ21lbnRzLiAqLwotCQlpZiAoIWxpc3RfZW1wdHkoJnBhZ2UtPmxydSkpCi0JCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7Ci0JCXBhZ2UgPSBOVUxMOwotCX0gZWxzZQotCQkvKiBBbGwgZnJhZ21lbnRzIG9mIHRoZSA0SyBwYWdlIGhhdmUgYmVlbiBmcmVlZC4gKi8KKwlpZiAoKGF0b21pY19yZWFkKCZwYWdlLT5fbWFwY291bnQpICYgRlJBR19NQVNLKSAhPSBGUkFHX01BU0spCiAJCWxpc3RfZGVsKCZwYWdlLT5scnUpOworCW1hc2sgPSBhdG9taWNfeG9yX2JpdHMoJnBhZ2UtPl9tYXBjb3VudCwgYml0KTsKKwlpZiAobWFzayAmIEZSQUdfTUFTSykKKwkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JaWYgKHBhZ2UpIHsKKwlpZiAobWFzayA9PSAwKSB7CiAJCXBndGFibGVfcGFnZV9kdG9yKHBhZ2UpOworCQlhdG9taWNfc2V0KCZwYWdlLT5fbWFwY291bnQsIC0xKTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CiAJfQogfQogCi12b2lkIHBhZ2VfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgKnRhYmxlKQotewotCXN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKmJhdGNoOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgYml0czsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQogCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpIDwgMiAmJgotCSAgICBjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpKSB7Ci0JCXBhZ2VfdGFibGVfZnJlZShtbSwgdGFibGUpOwotCQlnb3RvIG91dDsKK3N0YXRpYyB2b2lkIF9fcGFnZV90YWJsZV9mcmVlX3JjdSh2b2lkICp0YWJsZSwgdW5zaWduZWQgYml0KQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCisjaWZkZWYgQ09ORklHX1BHU1RFCisJaWYgKGJpdCA9PSBGUkFHX01BU0spCisJCXJldHVybiBwYWdlX3RhYmxlX2ZyZWVfcGdzdGUodGFibGUpOworI2VuZGlmCisJLyogRnJlZSAxSy8ySyBwYWdlIHRhYmxlIGZyYWdtZW50IG9mIGEgNEsgcGFnZSAqLworCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKKwlpZiAoYXRvbWljX3hvcl9iaXRzKCZwYWdlLT5fbWFwY291bnQsIGJpdCkgPT0gMCkgeworCQlwZ3RhYmxlX3BhZ2VfZHRvcihwYWdlKTsKKwkJYXRvbWljX3NldCgmcGFnZS0+X21hcGNvdW50LCAtMSk7CisJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCX0KLQliYXRjaCA9IHJjdV90YWJsZV9mcmVlbGlzdF9nZXQobW0pOwotCWlmICghYmF0Y2gpIHsKLQkJc21wX2NhbGxfZnVuY3Rpb24oc21wX3N5bmMsIE5VTEwsIDEpOwotCQlwYWdlX3RhYmxlX2ZyZWUobW0sIHRhYmxlKTsKLQkJZ290byBvdXQ7Cit9CisKK3ZvaWQgcGFnZV90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nICp0YWJsZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgYml0LCBtYXNrOworCisJbW0gPSB0bGItPm1tOworI2lmZGVmIENPTkZJR19QR1NURQorCWlmIChtbV9oYXNfcGdzdGUobW0pKSB7CisJCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgKF9fcGEodGFibGUpIHwgRlJBR19NQVNLKTsKKwkJdGxiX3JlbW92ZV90YWJsZSh0bGIsIHRhYmxlKTsKKwkJcmV0dXJuOwogCX0KLQliaXRzID0gKG1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkgPyAzVUwgOiAxVUw7Ci0JYml0cyA8PD0gKF9fcGEodGFibGUpICYgKFBBR0VfU0laRSAtIDEpKSAvIDI1NiAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKyNlbmRpZgorCWJpdCA9IDEgPDwgKChfX3BhKHRhYmxlKSAmIH5QQUdFX01BU0spIC8gKFBUUlNfUEVSX1BURSpzaXplb2YocHRlX3QpKSk7CiAJcGFnZSA9IHBmbl90b19wYWdlKF9fcGEodGFibGUpID4+IFBBR0VfU0hJRlQpOwogCXNwaW5fbG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKLQkvKiBEZWxheWVkIGZyZWVpbmcgd2l0aCByY3UgcHJldmVudHMgcmV1c2Ugb2YgcGd0YWJsZSBmcmFnbWVudHMgKi8KLQlsaXN0X2RlbF9pbml0KCZwYWdlLT5scnUpOworCWlmICgoYXRvbWljX3JlYWQoJnBhZ2UtPl9tYXBjb3VudCkgJiBGUkFHX01BU0spICE9IEZSQUdfTUFTSykKKwkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisJbWFzayA9IGF0b21pY194b3JfYml0cygmcGFnZS0+X21hcGNvdW50LCBiaXQgfCAoYml0IDw8IDQpKTsKKwlpZiAobWFzayAmIEZSQUdfTUFTSykKKwkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmbW0tPmNvbnRleHQucGd0YWJsZV9saXN0KTsKIAlzcGluX3VubG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKLQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopKCgodW5zaWduZWQgbG9uZykgdGFibGUpIHwgYml0cyk7Ci0JYmF0Y2gtPnRhYmxlW2JhdGNoLT5wZ3RfaW5kZXgrK10gPSB0YWJsZTsKLQlpZiAoYmF0Y2gtPnBndF9pbmRleCA+PSBiYXRjaC0+Y3JzdF9pbmRleCkKLQkJcmN1X3RhYmxlX2ZyZWVsaXN0X2ZpbmlzaCgpOwotb3V0OgotCXByZWVtcHRfZW5hYmxlKCk7CisJdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSAoX19wYSh0YWJsZSkgfCAoYml0IDw8IDQpKTsKKwl0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgdGFibGUpOwogfQogCit2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICpfdGFibGUpCit7CisJdm9pZCAqdGFibGUgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykgX3RhYmxlICYgUEFHRV9NQVNLKTsKKwl1bnNpZ25lZCB0eXBlID0gKHVuc2lnbmVkIGxvbmcpIF90YWJsZSAmIH5QQUdFX01BU0s7CisKKwlpZiAodHlwZSkKKwkJX19wYWdlX3RhYmxlX2ZyZWVfcmN1KHRhYmxlLCB0eXBlKTsKKwllbHNlCisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHRhYmxlLCBBTExPQ19PUkRFUik7Cit9CisKKyNlbmRpZgorCiAvKgogICogc3dpdGNoIG9uIHBnc3RlcyBmb3IgaXRzIHVzZXJzcGFjZSBwcm9jZXNzIChmb3Iga3ZtKQogICovCkBAIC0zNjksNyArMzE1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEbyB3ZSBoYXZlIHBnc3Rlcz8gaWYgeWVzLCB3ZSBhcmUgZG9uZSAqLwotCWlmICh0c2stPm1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkKKwlpZiAobW1faGFzX3Bnc3RlKHRzay0+bW0pKQogCQlyZXR1cm4gMDsKIAogCS8qIGxldHMgY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gcmVwbGFjZSB0aGUgbW0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCA3NDQ5NWE1Li5mMDMzMzhjIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0xNjEsNyArMTYxLDcgQEAKIAogY29uZmlnIE5PX0lPUE9SVAogCWRlZl9ib29sICFQQ0kKLQlkZXBlbmRzIG9uICFTSF9DQVlNQU4gJiYgIVNIX1NINDIwMl9NSUNST0RFVgorCWRlcGVuZHMgb24gIVNIX0NBWU1BTiAmJiAhU0hfU0g0MjAyX01JQ1JPREVWICYmICFTSF9TSE1JTgogCiBjb25maWcgSU9fVFJBUFBFRAogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYwppbmRleCA2MThiZDU2Li45Njk0MjFmNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYwpAQCAtMzU5LDM3ICszNTksMzEgQEAKIAkucHJpdgkJPSAmY2FtZXJhX2luZm8sCiB9OwogCi1zdGF0aWMgdm9pZCBkdW1teV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLX0KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjYW1lcmFfZGV2aWNlOwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjYW1lcmFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzb2NfY2FtZXJhX3BsYXRmb3JtIiwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY2FtZXJhX2luZm8sCi0JCS5yZWxlYXNlCT0gZHVtbXlfcmVsZWFzZSwKLQl9LAotfTsKK3N0YXRpYyB2b2lkIGFwMzI1cnhhX2NhbWVyYV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbGVhc2UoJmNhbWVyYV9kZXZpY2UpOworfQogCiBzdGF0aWMgaW50IGFwMzI1cnhhX2NhbWVyYV9hZGQoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoaWNsICE9ICZjYW1lcmFfbGluayB8fCBjYW1lcmFfcHJvYmUoKSA8PSAwKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpbnQgcmV0ID0gc29jX2NhbWVyYV9wbGF0Zm9ybV9hZGQoaWNsLCBkZXYsICZjYW1lcmFfZGV2aWNlLCAmY2FtZXJhX2xpbmssCisJCQkJCSAgYXAzMjVyeGFfY2FtZXJhX3JlbGVhc2UsIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCi0JY2FtZXJhX2luZm8uZGV2ID0gZGV2OworCXJldCA9IGNhbWVyYV9wcm9iZSgpOworCWlmIChyZXQgPCAwKQorCQlzb2NfY2FtZXJhX3BsYXRmb3JtX2RlbChpY2wsIGNhbWVyYV9kZXZpY2UsICZjYW1lcmFfbGluayk7CiAKLQlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjYW1lcmFfZGV2aWNlKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBhcDMyNXJ4YV9jYW1lcmFfZGVsKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCkKIHsKLQlpZiAoaWNsICE9ICZjYW1lcmFfbGluaykKLQkJcmV0dXJuOwotCi0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmNhbWVyYV9kZXZpY2UpOwotCW1lbXNldCgmY2FtZXJhX2RldmljZS5kZXYua29iaiwgMCwKLQkgICAgICAgc2l6ZW9mKGNhbWVyYV9kZXZpY2UuZGV2LmtvYmopKTsKKwlzb2NfY2FtZXJhX3BsYXRmb3JtX2RlbChpY2wsIGNhbWVyYV9kZXZpY2UsICZjYW1lcmFfbGluayk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0kyQyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggYmIxM2QwZS4uNTEzY2IxYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvcjhhNjY1OTcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvcmVuZXNhc191c2Jocy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90c2MyMDA3Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgpAQCAtMjMyLDYgKzIzMyw1MiBAQAogCS5yZXNvdXJjZQk9IHVzYjFfY29tbW9uX3Jlc291cmNlcywKIH07CiAKKy8qCisgKiBVU0JIUworICovCitzdGF0aWMgaW50IHVzYmhzX2dldF9pZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX1BUQjMpOworfQorCitzdGF0aWMgc3RydWN0IHJlbmVzYXNfdXNiaHNfcGxhdGZvcm1faW5mbyB1c2Joc19pbmZvID0geworCS5wbGF0Zm9ybV9jYWxsYmFjayA9IHsKKwkJLmdldF9pZAkJPSB1c2Joc19nZXRfaWQsCisJfSwKKwkuZHJpdmVyX3BhcmFtID0geworCQkuYnVzd2FpdF9id2FpdAkJPSA0LAorCQkuZGV0ZWN0aW9uX2RlbGF5CT0gNSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2Joc19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4YTRkOTAwMDAsCisJCS5lbmQJPSAweGE0ZDkwMTI0IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDY2LAorCQkuZW5kCT0gNjYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1c2Joc19kZXZpY2UgPSB7CisJLm5hbWUJPSAicmVuZXNhc191c2JocyIsCisJLmlkCT0gMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sJCT0gTlVMTCwgICAgICAgICAvKiAgbm90IHVzZSBkbWEgKi8KKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnVzYmhzX2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXNiaHNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB1c2Joc19yZXNvdXJjZXMsCisJLmFyY2hkYXRhID0geworCQkuaHdibGtfaWQgPSBIV0JMS19VU0IxLAorCX0sCit9OworCiAvKiBMQ0RDICovCiBjb25zdCBzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBlY292ZWNfbGNkX21vZGVzW10gPSB7CiAJewpAQCAtODg1LDYgKzkzMiw5IEBACiAJfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2hfbW1jaWZfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBzaF9tbWNpZl9yZXNvdXJjZXMsCisJLmFyY2hkYXRhID0geworCQkuaHdibGtfaWQgPSBIV0JMS19NTUMsCisJfSwKIH07CiAjZW5kaWYKIApAQCAtODk0LDYgKzk0NCw3IEBACiAJJnNoX2V0aF9kZXZpY2UsCiAJJnVzYjBfaG9zdF9kZXZpY2UsCiAJJnVzYjFfY29tbW9uX2RldmljZSwKKwkmdXNiaHNfZGV2aWNlLAogCSZsY2RjX2RldmljZSwKIAkmY2V1MF9kZXZpY2UsCiAJJmNldTFfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA3ODBlMDgzLi4yM2JjODQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMjcsOCArMjcsNiBAQAogCQkJJChDT05GSUdfQk9PVF9MSU5LX09GRlNFVCldJykKIGVuZGlmCiAKLUxJQkdDQwk6PSAkKHNoZWxsICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLXByaW50LWxpYmdjYy1maWxlLW5hbWUpCi0KIGlmZXEgKCQoQ09ORklHX01DT1VOVCkseSkKIE9SSUdfQ0ZMQUdTIDo9ICQoS0JVSUxEX0NGTEFHUykKIEtCVUlMRF9DRkxBR1MgPSAkKHN1YnN0IC1wZywgLCAkKE9SSUdfQ0ZMQUdTKSkKQEAgLTM3LDcgKzM1LDI1IEBACiBMREZMQUdTX3ZtbGludXggOj0gLS1vZm9ybWF0ICQobGQtYmZkKSAtVHRleHQgJChJTUFHRV9PRkZTRVQpIC1lIHN0YXJ0dXAgXAogCQkgICAtVCAkKG9iaikvLi4vLi4va2VybmVsL3ZtbGludXgubGRzCiAKLSQob2JqKS92bWxpbnV4OiAkKE9CSkVDVFMpICQob2JqKS9waWdneS5vICQoTElCR0NDKSBGT1JDRQorIworIyBQdWxsIGluIHRoZSBuZWNlc3NhcnkgbGliZ2NjIGJpdHMgZnJvbSB0aGUgaW4ta2VybmVsIGltcGxlbWVudGF0aW9uLgorIworbGliMWZ1bmNzLSQoQ09ORklHX1NVUEVSSDMyKQk6PSBhc2hpZnRydC5TIGFzaGxkaTMuYyBhc2hyc2kzLlMgYXNobHNpMy5TIFwKKwkJCQkgICBsc2hyc2kzLlMKK2xpYjFmdW5jcy1vYmoJCQk6PSBcCisJJChhZGRzdWZmaXggLm8sICQoYmFzZW5hbWUgJChhZGRwcmVmaXggJChvYmopLywgJChsaWIxZnVuY3MteSkpKSkKKworbGliMWZ1bmNzLWRpcgkJOj0gJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvbGliCitpZmVxICgkKEJJVFMpLDY0KQorCWxpYjFmdW5jcy1kaXIgCTo9ICQoYWRkc3VmZml4ICQoQklUUyksICQobGliMWZ1bmNzLWRpcikpCitlbmRpZgorCitLQlVJTERfQ0ZMQUdTICs9IC1JJChsaWIxZnVuY3MtZGlyKQorCiskKGFkZHByZWZpeCAkKG9iaikvLCQobGliMWZ1bmNzLXkpKTogJChvYmopLyU6ICQobGliMWZ1bmNzLWRpcikvJSBGT1JDRQorCSQoY2FsbCBjbWQsc2hpcHBlZCkKKworJChvYmopL3ZtbGludXg6ICQoT0JKRUNUUykgJChvYmopL3BpZ2d5Lm8gJChsaWIxZnVuY3Mtb2JqKSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQogCUA6CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCmluZGV4IDBmNTU4OTEuLmUyY2JkOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZwpAQCAtMjI3LDcgKzIyNyw3IEBACiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTY9bQogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KLUNPTkZJR19SVENfQ0xBU1M9bQorQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9TSD1tCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctZ3JiLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctZ3JiLmgKaW5kZXggNDY3NmJmNS4uZjg0OGRlYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWdyYi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1ncmIuaApAQCAtMTUsOCArMTUsOSBAQAogCQkiICAgbW92LmwgICAlMiwgICBAJTEgICAgIFxuXHQiIC8qIHN0b3JlIG5ldyB2YWx1ZSAqLwogCQkiMTogbW92ICAgICByMSwgICByMTUgICAgIFxuXHQiIC8qIExPR09VVCAqLwogCQk6ICI9JnIiIChyZXR2YWwpLAotCQkgICIrciIgIChtKQotCQk6ICJyIiAgICh2YWwpCisJCSAgIityIiAgKG0pLAorCQkgICIrciIgICh2YWwpCQkvKiBpbmhpYml0IHIxNSBvdmVybG9hZGluZyAqLworCQk6CiAJCTogIm1lbW9yeSIsICJyMCIsICJyMSIpOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTM2LDggKzM3LDkgQEAKIAkJIiAgIG1vdi5iICAgJTIsICAgQCUxICAgICBcblx0IiAvKiBzdG9yZSBuZXcgdmFsdWUgKi8KIAkJIjE6IG1vdiAgICAgcjEsICAgcjE1ICAgICBcblx0IiAvKiBMT0dPVVQgKi8KIAkJOiAiPSZyIiAocmV0dmFsKSwKLQkJICAiK3IiICAobSkKLQkJOiAiciIgICAodmFsKQorCQkgICIrciIgIChtKSwKKwkJICAiK3IiICAodmFsKQkJLyogaW5oaWJpdCByMTUgb3ZlcmxvYWRpbmcgKi8KKwkJOgogCQk6ICJtZW1vcnkiICwgInIwIiwgInIxIik7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTQsMTMgKzU2LDE0IEBACiAJCSIgICBub3AgICAgICAgICAgICAgICAgICAgXG5cdCIKIAkJIiAgIG1vdiAgICByMTUsICAgcjEgICAgICBcblx0IiAvKiByMSA9IHNhdmVkIHNwICovCiAJCSIgICBtb3YgICAgIy04LCAgIHIxNSAgICAgXG5cdCIgLyogTE9HSU4gKi8KLQkJIiAgIG1vdi5sICBAJTEsICAgJTAgICAgICBcblx0IiAvKiBsb2FkICBvbGQgdmFsdWUgKi8KLQkJIiAgIGNtcC9lcSAgJTAsICAgJTIgICAgICBcblx0IgorCQkiICAgbW92LmwgIEAlMywgICAlMCAgICAgIFxuXHQiIC8qIGxvYWQgIG9sZCB2YWx1ZSAqLworCQkiICAgY21wL2VxICAlMCwgICAlMSAgICAgIFxuXHQiCiAJCSIgICBiZiAgICAgICAgICAgIDFmICAgICAgXG5cdCIgLyogaWYgbm90IGVxdWFsICovCi0JCSIgICBtb3YubCAgICUzLCAgIEAlMSAgICAgXG5cdCIgLyogc3RvcmUgbmV3IHZhbHVlICovCisJCSIgICBtb3YubCAgICUyLCAgIEAlMyAgICAgXG5cdCIgLyogc3RvcmUgbmV3IHZhbHVlICovCiAJCSIxOiBtb3YgICAgIHIxLCAgIHIxNSAgICAgXG5cdCIgLyogTE9HT1VUICovCi0JCTogIj0mciIgKHJldHZhbCkKLQkJOiAgInIiICAobSksICJyIiAgKG9sZCksICJyIiAgKG5ldykKKwkJOiAiPSZyIiAocmV0dmFsKSwKKwkJICAiK3IiICAob2xkKSwgIityIiAgKG5ldykgLyogb2xkIG9yIG5ldyBjYW4gYmUgcjE1ICovCisJCTogICJyIiAgKG0pCiAJCTogIm1lbW9yeSIgLCAicjAiLCAicjEiLCAidCIpOwogCiAJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZGI4NTkxNi4uOTIxMGU5MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS0ybGV2ZWwuaD4KICNlbmRpZgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCmluZGV4IDJhNTQxZGQuLmUyNWM0YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaApAQCAtMTUwLDcgKzE1MCw2IEBACiAjZGVmaW5lIFNSX1VTRVIgKFNSX01NVSB8IFNSX0ZEKQogCiAjZGVmaW5lIHN0YXJ0X3RocmVhZChfcmVncywgbmV3X3BjLCBuZXdfc3ApCQkJXAotCXNldF9mcyhVU0VSX0RTKTsJCQkJCVwKIAlfcmVncy0+c3IgPSBTUl9VU0VSOwkvKiBVc2VyIG1vZGUuICovCQlcCiAJX3JlZ3MtPnBjID0gbmV3X3BjIC0gNDsJLyogQ29tcGVuc2F0ZSBzeXNjYWxsIGV4aXQgKi8JXAogCV9yZWdzLT5wYyB8PSAxOwkJLyogU2V0IFNIbWVkaWEgISAqLwkJXApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggNDA3MjViNC4uODhiZDZiZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC00MSw3ICs0MSw5IEBACiAKICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpCQkJKCgocmVncyktPnNyICYgMHg0MDAwMDAwMCk9PTApCiAjZGVmaW5lIGtlcm5lbF9zdGFja19wb2ludGVyKF9yZWdzKQkoKHVuc2lnbmVkIGxvbmcpKF9yZWdzKS0+cmVnc1sxNV0pCi0jZGVmaW5lIEdFVF9VU1AocmVncykgKChyZWdzKS0+cmVnc1sxNV0pCisKKyNkZWZpbmUgR0VUX0ZQKHJlZ3MpCSgocmVncyktPnJlZ3NbMTRdKQorI2RlZmluZSBHRVRfVVNQKHJlZ3MpCSgocmVncyktPnJlZ3NbMTVdKQogCiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CiAKQEAgLTEzMSw3ICsxMzMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl1bnNpZ25lZCBsb25nIHBjID0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKKwl1bnNpZ25lZCBsb25nIHBjID0gcmVncy0+cGM7CiAKIAlpZiAodmlydF9hZGRyX3VuY2FjaGVkKHBjKSkKIAkJcmV0dXJuIENBQ19BRERSKHBjKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDZjMzA4ZDguLmVjODhiZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaApAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAKICNpZmRlZiBDT05GSUdfTU1VCisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzIyLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzIyLmgKaW5kZXggN2E1YjhhMy4uYmQwNjIyNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjIuaApAQCAtMjM2LDYgKzIzNiw3IEBACiB9OwogCiBlbnVtIHsKKwlTSERNQV9TTEFWRV9JTlZBTElELAogCVNIRE1BX1NMQVZFX1NDSUYwX1RYLAogCVNIRE1BX1NMQVZFX1NDSUYwX1JYLAogCVNIRE1BX1NMQVZFX1NDSUYxX1RYLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyNC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyNC5oCmluZGV4IDdlYjQzNTkuLmNiYzQ3ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzI0LmgKQEAgLTI4NSw2ICsyODUsNyBAQAogfTsKIAogZW51bSB7CisJU0hETUFfU0xBVkVfSU5WQUxJRCwKIAlTSERNQV9TTEFWRV9TQ0lGMF9UWCwKIAlTSERNQV9TTEFWRV9TQ0lGMF9SWCwKIAlTSERNQV9TTEFWRV9TQ0lGMV9UWCwKQEAgLTI5Nyw2ICsyOTgsMTQgQEAKIAlTSERNQV9TTEFWRV9TQ0lGNF9SWCwKIAlTSERNQV9TTEFWRV9TQ0lGNV9UWCwKIAlTSERNQV9TTEFWRV9TQ0lGNV9SWCwKKwlTSERNQV9TTEFWRV9VU0IwRDBfVFgsCisJU0hETUFfU0xBVkVfVVNCMEQwX1JYLAorCVNIRE1BX1NMQVZFX1VTQjBEMV9UWCwKKwlTSERNQV9TTEFWRV9VU0IwRDFfUlgsCisJU0hETUFfU0xBVkVfVVNCMUQwX1RYLAorCVNIRE1BX1NMQVZFX1VTQjFEMF9SWCwKKwlTSERNQV9TTEFWRV9VU0IxRDFfVFgsCisJU0hETUFfU0xBVkVfVVNCMUQxX1JYLAogCVNIRE1BX1NMQVZFX1NESEkwX1RYLAogCVNIRE1BX1NMQVZFX1NESEkwX1JYLAogCVNIRE1BX1NMQVZFX1NESEkxX1RYLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc1Ny5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc1Ny5oCmluZGV4IDA1YjgxOTYuLjQxZjlmOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3NTcuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzU3LmgKQEAgLTI1Miw2ICsyNTIsNyBAQAogfTsKIAogZW51bSB7CisJU0hETUFfU0xBVkVfSU5WQUxJRCwKIAlTSERNQV9TTEFWRV9TREhJX1RYLAogCVNIRE1BX1NMQVZFX1NESElfUlgsCiAJU0hETUFfU0xBVkVfTU1DSUZfVFgsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCmluZGV4IDAzMzNmZTkuLjEzNGEzOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCkBAIC05Myw2ICs5Myw0NiBAQAogCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzhCSVQpLAogCQkubWlkX3JpZAk9IDB4MzYsCiAJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9VU0IwRDBfVFgsCisJCS5hZGRyCQk9IDB4QTREODAxMDAsCisJCS5jaGNyCQk9IERNX0ZJWCB8IFNNX0lOQyB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpLAorCQkubWlkX3JpZAk9IDB4NzMsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9VU0IwRDBfUlgsCisJCS5hZGRyCQk9IDB4QTREODAxMDAsCisJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpLAorCQkubWlkX3JpZAk9IDB4NzMsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9VU0IwRDFfVFgsCisJCS5hZGRyCQk9IDB4QTREODAxMjAsCisJCS5jaGNyCQk9IERNX0ZJWCB8IFNNX0lOQyB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpLAorCQkubWlkX3JpZAk9IDB4NzcsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9VU0IwRDFfUlgsCisJCS5hZGRyCQk9IDB4QTREODAxMjAsCisJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpLAorCQkubWlkX3JpZAk9IDB4NzcsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9VU0IxRDBfVFgsCisJCS5hZGRyCQk9IDB4QTREOTAxMDAsCisJCS5jaGNyCQk9IERNX0ZJWCB8IFNNX0lOQyB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpLAorCQkubWlkX3JpZAk9IDB4YWIsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9VU0IxRDBfUlgsCisJCS5hZGRyCQk9IDB4QTREOTAxMDAsCisJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpLAorCQkubWlkX3JpZAk9IDB4YWIsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9VU0IxRDFfVFgsCisJCS5hZGRyCQk9IDB4QTREOTAxMjAsCisJCS5jaGNyCQk9IERNX0ZJWCB8IFNNX0lOQyB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpLAorCQkubWlkX3JpZAk9IDB4YWYsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9VU0IxRDFfUlgsCisJCS5hZGRyCQk9IDB4QTREOTAxMjAsCisJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpLAorCQkubWlkX3JpZAk9IDB4YWYsCisJfSwgewogCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TREhJMF9UWCwKIAkJLmFkZHIJCT0gMHgwNGNlMDAzMCwKIAkJLmNoY3IJCT0gRE1fRklYIHwgU01fSU5DIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl8xNkJJVCksCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggNzYyYTEzOS4uYWFmNmQ1OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xMDEsOCArMTAyLDYgQEAKIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG5ld19wYywKIAkJICB1bnNpZ25lZCBsb25nIG5ld19zcCkKIHsKLQlzZXRfZnMoVVNFUl9EUyk7Ci0KIAlyZWdzLT5wciA9IDA7CiAJcmVncy0+c3IgPSBTUl9GRDsKIAlyZWdzLT5wYyA9IG5ld19wYzsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jIGIvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKaW5kZXggNTI0MTE0Ni4uMTE1NzI1MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKQEAgLTI2LDkgKzI2LDkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgY2FjaGVfdHlwZSA9ICh1bnNpZ25lZCBpbnQpZmlsZS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY2FjaGVfaW5mbyAqY2FjaGU7Ci0JdW5zaWduZWQgaW50IHdheXNpemUsIHdheSwgY2FjaGVfc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGNjciwgYmFzZTsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyc3RhcnQgPSAwOworCXVuc2lnbmVkIGludCB3YXlzaXplLCB3YXk7CisJdW5zaWduZWQgbG9uZyBjY3I7CisJdW5zaWduZWQgbG9uZyBhZGRyc3RhcnQgPSAwOwogCiAJLyoKIAkgKiBHbyB1bmNhY2hlZCBpbW1lZGlhdGVseSBzbyB3ZSBkb24ndCBza2V3IHRoZSByZXN1bHRzIGFueQpAQCAtNDUsMjggKzQ1LDEzIEBACiAJfQogCiAJaWYgKGNhY2hlX3R5cGUgPT0gQ0FDSEVfVFlQRV9EQ0FDSEUpIHsKLQkJYmFzZSA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVk7CisJCWFkZHJzdGFydCA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVk7CiAJCWNhY2hlID0gJmN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlOwogCX0gZWxzZSB7Ci0JCWJhc2UgPSBDQUNIRV9JQ19BRERSRVNTX0FSUkFZOworCQlhZGRyc3RhcnQgPSBDQUNIRV9JQ19BRERSRVNTX0FSUkFZOwogCQljYWNoZSA9ICZjdXJyZW50X2NwdV9kYXRhLmljYWNoZTsKIAl9CiAKLQkvKgotCSAqIER1ZSB0byB0aGUgYW1vdW50IG9mIGRhdGEgd3JpdHRlbiBvdXQgKGRlcGVuZGluZyBvbiB0aGUgY2FjaGUgc2l6ZSksCi0JICogd2UgbWF5IGJlIGl0ZXJhdGVkIG92ZXIgbXVsdGlwbGUgdGltZXMuIEluIHRoaXMgY2FzZSwga2VlcCB0cmFjayBvZgotCSAqIHRoZSBlbnRyeSBwb3NpdGlvbiBpbiBhZGRyc3RhcnQsIGFuZCByZXdpbmQgaXQgd2hlbiB3ZSd2ZSBoaXQgdGhlCi0JICogZW5kIG9mIHRoZSBjYWNoZS4KLQkgKgotCSAqIExpa2V3aXNlLCB0aGUgc2FtZSBjb2RlIGlzIHVzZWQgZm9yIG11bHRpcGxlIGNhY2hlcywgc28gY2FyZSBtdXN0Ci0JICogYmUgdGFrZW4gZm9yIGJvdW5jaW5nIGFkZHJzdGFydCBiYWNrIGFuZCBmb3J0aCBzbyB0aGUgYXBwcm9wcmlhdGUKLQkgKiBjYWNoZSBpcyBoaXQuCi0JICovCi0JY2FjaGVfc2l6ZSA9IGNhY2hlLT53YXlzICogY2FjaGUtPnNldHMgKiBjYWNoZS0+bGluZXN6OwotCWlmICgoKGFkZHJzdGFydCAmIDB4ZmYwMDAwMDApICE9IGJhc2UpIHx8Ci0JICAgICAoYWRkcnN0YXJ0ICYgMHgwMGZmZmZmZikgPiBjYWNoZV9zaXplKQotCQlhZGRyc3RhcnQgPSBiYXNlOwotCiAJd2F5c2l6ZSA9IGNhY2hlLT5zZXRzOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY29uc2lzdGVudC5jIGIvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMKaW5kZXggNDA3MzNhOS4uZjI1MWI1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMKKysrIGIvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMKQEAgLTgyLDcgKzgyLDcgQEAKIAl2b2lkICphZGRyOwogCiAJYWRkciA9IF9faW5fMjliaXRfbW9kZSgpID8KLQkgICAgICAgKHZvaWQgKilQMVNFR0FERFIoKHVuc2lnbmVkIGxvbmcpdmFkZHIpIDogdmFkZHI7CisJICAgICAgICh2b2lkICopQ0FDX0FERFIoKHVuc2lnbmVkIGxvbmcpdmFkZHIpIDogdmFkZHI7CiAKIAlzd2l0Y2ggKGRpcmVjdGlvbikgewogCWNhc2UgRE1BX0ZST01fREVWSUNFOgkJLyogaW52YWxpZGF0ZSBvbmx5ICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggYWYzMmUxNy4uMjUzOTg2YiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtMjYsNyArMjYsNiBAQAogCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKIAlzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUwKIAlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fREVQUkVDQVRFRAogCXNlbGVjdCBHRU5FUklDX0lSUV9TSE9XCiAJc2VsZWN0IFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlmIFNNUAogCkBAIC01MjgsNiArNTI3LDIzIEBACiBjb25maWcgUENJX1NZU0NBTEwKIAlkZWZfYm9vbCBQQ0kKIAorY29uZmlnIFBDSUNfUENJCisJYm9vbAorCWRlcGVuZHMgb24gUENJICYmIFNQQVJDMzIgJiYgIVNQQVJDX0xFT04KKwlkZWZhdWx0IHkKKworY29uZmlnIExFT05fUENJCisJYm9vbAorCWRlcGVuZHMgb24gUENJICYmIFNQQVJDX0xFT04KKwlkZWZhdWx0IHkKKworY29uZmlnIEdSUENJMgorCWJvb2wgIkdSUENJMiBIb3N0IEJyaWRnZSBTdXBwb3J0IgorCWRlcGVuZHMgb24gTEVPTl9QQ0kKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgdGhlIEdSUENJMiBIb3N0IEJyaWRnZSBEcml2ZXIuCisKIHNvdXJjZSAiZHJpdmVycy9wY2kvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3BjbWNpYS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzMyLmgKaW5kZXggNDgyYzc5ZS4uNzQ0MDkxNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV8zMi5oCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJcmV0dXJuIHN1bl9mZGMtPmRhdGFfODIwNzI7CiAJY2FzZSA3OiAvKiBGRF9ESVIgKi8KIAkJcmV0dXJuIHN1bl9yZWFkX2RpcigpOwotCX07CisJfQogCXBhbmljKCJzdW5fODIwNzJfZmRfaW5iOiBIb3cgZGlkIEkgZ2V0IGhlcmU/Iik7CiB9CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCWNhc2UgNDogLyogRkRfU1RBVFVTICovCiAJCXN1bl9mZGMtPnN0YXR1c184MjA3MiA9IHZhbHVlOwogCQlicmVhazsKLQl9OworCX0KIAlyZXR1cm47CiB9CiAKQEAgLTE4Niw3ICsxODYsNyBAQAogCQlyZXR1cm4gc3VuX2ZkYy0+ZGF0YV84MjA3NzsKIAljYXNlIDc6IC8qIEZEX0RJUiAqLwogCQlyZXR1cm4gc3VuX3JlYWRfZGlyKCk7Ci0JfTsKKwl9CiAJcGFuaWMoInN1bl84MjA3N19mZF9pbmI6IEhvdyBkaWQgSSBnZXQgaGVyZT8iKTsKIH0KIApAQCAtMjEyLDcgKzIxMiw3IEBACiAJY2FzZSAzOiAvKiBGRF9URFIgKi8KIAkJc3VuX2ZkYy0+dGFwZWN0bF84MjA3NyA9IHZhbHVlOwogCQlicmVhazsKLQl9OworCX0KIAlyZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV82NC5oCmluZGV4IDY1OTdjZTguLmJjZWYxZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfNjQuaApAQCAtMTExLDcgKzExMSw3IEBACiAJY2FzZSA3OiAvKiBGRF9ESVIgKi8KIAkJLyogWFhYOiBJcyBEQ0wgb24gMHg4MCBpbiBzdW40bT8gKi8KIAkJcmV0dXJuIHNidXNfcmVhZGIoJnN1bl9mZGMtPmRpcl84MjA3Nyk7Ci0JfTsKKwl9CiAJcGFuaWMoInN1bl84MjA3Ml9mZF9pbmI6IEhvdyBkaWQgSSBnZXQgaGVyZT8iKTsKIH0KIApAQCAtMTM1LDcgKzEzNSw3IEBACiAJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KIAkJc2J1c193cml0ZWIodmFsdWUsICZzdW5fZmRjLT5zdGF0dXNfODIwNzcpOwogCQlicmVhazsKLQl9OworCX0KIAlyZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uLmgKaW5kZXggNmJkYWYxZS4uYTRlNDU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uLmgKQEAgLTMxOCw2ICszMTgsOSBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBsZW9uX2J1aWxkX2RldmljZV9pcnEodW5zaWduZWQgaW50IHJlYWxfaXJxLAogCQkJCQkgICBpcnFfZmxvd19oYW5kbGVyX3QgZmxvd19oYW5kbGVyLAogCQkJCQkgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZG9fYWNrKTsKK2V4dGVybiB2b2lkIGxlb25fdXBkYXRlX3ZpcnFfaGFuZGxpbmcodW5zaWduZWQgaW50IHZpcnEsCisJCQkgICAgICBpcnFfZmxvd19oYW5kbGVyX3QgZmxvd19oYW5kbGVyLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IGRvX2Fjayk7CiBleHRlcm4gdm9pZCBsZW9uX2NsZWFyX2Nsb2NrX2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIGxlb25fbG9hZF9wcm9maWxlX2lycShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbGltaXQpOwogZXh0ZXJuIHZvaWQgbGVvbl9pbml0X3RpbWVycyhpcnFfaGFuZGxlcl90IGNvdW50ZXJfZm4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uX3BjaS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uX3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYjRiMzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb25fcGNpLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGFzbS9sZW9uX3BjaS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFlcm9mbGV4IEdhaXNsZXIgQUIsIERhbmllbCBIZWxsc3Ryb20KKyAqLworCisjaWZuZGVmIF9BU01fTEVPTl9QQ0lfSF8KKyNkZWZpbmUgX0FTTV9MRU9OX1BDSV9IXworCisvKiBQQ0kgcmVsYXRlZCBkZWZpbml0aW9ucyAqLworc3RydWN0IGxlb25fcGNpX2luZm8geworCXN0cnVjdCBwY2lfb3BzICpvcHM7CisJc3RydWN0IHJlc291cmNlCWlvX3NwYWNlOworCXN0cnVjdCByZXNvdXJjZQltZW1fc3BhY2U7CisJaW50ICgqbWFwX2lycSkoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKTsKK307CisKK2V4dGVybiB2b2lkIGxlb25fcGNpX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYsCisJCQkJc3RydWN0IGxlb25fcGNpX2luZm8gKmluZm8pOworCisjZW5kaWYgLyogX0FTTV9MRU9OX1BDSV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpXzMyLmgKaW5kZXggMzMyYWM5YS4uODYyZTNjZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV8zMi5oCkBAIC00Nyw3ICs0NywzMSBAQAogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCisjaWZuZGVmIENPTkZJR19MRU9OX1BDSQogLyogZ2VuZXJpYyBwY2kgc3R1ZmYgKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2kuaD4KKyNlbHNlCisvKgorICogT24gTEVPTiBQQ0kgTWVtb3J5IHNwYWNlIGlzIG1hcHBlZCAxOjEgd2l0aCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLgorICoKKyAqIEkvTyBzcGFjZSBpcyBsb2NhdGVkIGF0IGxvdyA2NEtieXRlcyBpbiBQQ0kgSS9PIHNwYWNlLiBUaGUgSS9PIGFkZHJlc3NlcworICogYXJlIGNvbnZlcnRlZCBpbnRvIENQVSBhZGRyZXNzZXMgdG8gdmlydHVhbCBhZGRyZXNzZXMgdGhhdCBhcmUgbWFwcGVkIHdpdGgKKyAqIE1NVSB0byB0aGUgUENJIEhvc3QgUENJIEkvTyBzcGFjZSB3aW5kb3cgd2hpY2ggYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIGxvdworICogNjRLYnl0ZXMgYnkgdGhlIEhvc3QgY29udHJvbGxlci4KKyAqLworCitleHRlcm4gdm9pZAorcGNpYmlvc19yZXNvdXJjZV90b19idXMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24sCisJCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CisKK2V4dGVybiB2b2lkCitwY2liaW9zX2J1c190b19yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uKTsKKworc3RhdGljIGlubGluZSBpbnQgcGNpX2dldF9sZWdhY3lfaWRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gUENJX0lSUV9OT05FOworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NQQVJDX1BDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaWMuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpYy5oCmluZGV4IDdlYjVkNzguLjY2NzZjYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpYy5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpYy5oCkBAIC0yOSw3ICsyOSw3IEBACiAJaW50CQkJcGNpY19pbWRpbTsKIH07CiAKLSNpZmRlZiBDT05GSUdfUENJCisjaWZkZWYgQ09ORklHX1BDSUNfUENJCiBleHRlcm4gaW50IHBjaWNfcHJlc2VudCh2b2lkKTsKIGV4dGVybiBpbnQgcGNpY19wcm9iZSh2b2lkKTsKIGV4dGVybiB2b2lkIHBjaV90aW1lX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAppbmRleCA0N2E3ZTg2Li5hYmExNjA5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKQEAgLTIyMCw3ICsyMjAsNyBAQAogCXN3aXRjaCAoc2l6ZSkgewogCWNhc2UgNDoKIAkJcmV0dXJuIHhjaGdfdTMyKHB0ciwgeCk7Ci0JfTsKKwl9CiAJX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CiAJcmV0dXJuIHg7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAppbmRleCAzYzk2ZDNiLi4xMGJjYWJjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKQEAgLTIzNCw3ICsyMzQsNyBAQAogCQlyZXR1cm4geGNoZzMyKHB0ciwgeCk7CiAJY2FzZSA4OgogCQlyZXR1cm4geGNoZzY0KHB0ciwgeCk7Ci0JfTsKKwl9CiAJX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CiAJcmV0dXJuIHg7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCmluZGV4IDljZmYyNzAuLmI5MGI0YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCkBAIC03Myw3ICs3Myw5IEBACiAKIG9iai15ICAgICAgICAgICAgICAgICAgICAgKz0gZG1hLm8KIAotb2JqLSQoQ09ORklHX1NQQVJDMzJfUENJKSArPSBwY2ljLm8KK29iai0kKENPTkZJR19QQ0lDX1BDSSkgICAgKz0gcGNpYy5vCitvYmotJChDT05GSUdfTEVPTl9QQ0kpICAgICs9IGxlb25fcGNpLm8KK29iai0kKENPTkZJR19HUlBDSTIpICAgICAgKz0gbGVvbl9wY2lfZ3JwY2kyLm8KIAogb2JqLSQoQ09ORklHX1NNUCkgICAgICAgICArPSB0cmFtcG9saW5lXyQoQklUUykubyBzbXBfJChCSVRTKS5vCiBvYmotJChDT05GSUdfU1BBUkMzMl9TTVApICs9IHN1bjRtX3NtcC5vIHN1bjRkX3NtcC5vIGxlb25fc21wLm8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2FwYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKaW5kZXggMWUzNGYyOS4uY2FlZjlkZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9hdXhpb18zMi5jCmluZGV4IDg1MDVlMGEuLmFjZjUxNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXV4aW9fMzIuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXBhbmljKCJDYW4ndCBzZXQgQVVYSU8gcmVnaXN0ZXIgb24gdGhpcyBtYWNoaW5lLiIpOwotCX07CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1eGlvX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woc2V0X2F1eGlvKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2NobWMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2NobWMuYwppbmRleCA2NjhjN2JlLi41ZjQ1MDI2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9jaG1jLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvY2htYy5jCkBAIC02NjQsNyArNjY0LDcgQEAKIAljYXNlIDB4MDoKIAkJYnAtPmludGVybGVhdmUgPSAxNjsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAkvKiBVS1sxMF0gaXMgcmVzZXJ2ZWQsIGFuZCBVS1sxMV0gaXMgbm90IHNldCBmb3IgdGhlIFNEUkFNCiAJICogYmFuayBzaXplIGRlZmluaXRpb24uCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUwppbmRleCA4MzQxOTYzLi45ZmUwOGExIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKQEAgLTIyOSw3ICsyMjksNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIAkuZ2xvYmwJcGF0Y2htZV9tYXliZV9zbXBfbXNnCiAKLQljbXAJJWw3LCAxMgorCWNtcAklbDcsIDExCiBwYXRjaG1lX21heWJlX3NtcF9tc2c6CiAJYmd1CW1heWJlX3NtcDRtX21zZwogCSBub3AKQEAgLTI5Myw3ICsyOTMsNyBAQAogCVdSSVRFX1BBVVNFCiAJd3IJJWw0LCBQU1JfRVQsICVwc3IKIAlXUklURV9QQVVTRQotCXNsbAklbzIsIDI4LCAlbzIJCSEgc2hpZnQgZm9yIHNpbXBsZXIgY2hlY2tzIGJlbG93CisJc2xsCSVvMywgMjgsICVvMgkJISBzaGlmdCBmb3Igc2ltcGxlciBjaGVja3MgYmVsb3cKIG1heWJlX3NtcDRtX21zZ19jaGVja19zaW5nbGU6CiAJYW5kY2MJJW8yLCAweDEsICVnMAogCWJlcSxhCW1heWJlX3NtcDRtX21zZ19jaGVja19tYXNrCkBAIC0xNjA0LDcgKzE2MDQsNyBAQAogCXJldGwKIAkgbm9wCiAKLSNpZmRlZiBDT05GSUdfUENJCisjaWZkZWYgQ09ORklHX1BDSUNfUENJCiAjaW5jbHVkZSA8YXNtL3BjaWMuaD4KIAogCS5hbGlnbgk0CkBAIC0xNjUwLDcgKzE2NTAsNyBAQAogCSByZAklcHNyLCAlbDAKIAkud29yZAkwCiAKLSNlbmRpZiAvKiBDT05GSUdfUENJICovCisjZW5kaWYgLyogQ09ORklHX1BDSUNfUENJICovCiAKIAkuZ2xvYmwJZmx1c2h3X2FsbAogZmx1c2h3X2FsbDoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCmluZGV4IDJmNTM4YWMuLmQxNzI1NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9rZXJuZWwuYwpAQCAtMjM2LDYgKzIzNiwyMSBAQAogCXJldHVybiBsZW9uX2J1aWxkX2RldmljZV9pcnEocmVhbF9pcnEsIGhhbmRsZV9zaW1wbGVfaXJxLCAiZWRnZSIsIDApOwogfQogCit2b2lkIGxlb25fdXBkYXRlX3ZpcnFfaGFuZGxpbmcodW5zaWduZWQgaW50IHZpcnEsCisJCQkgICAgICBpcnFfZmxvd19oYW5kbGVyX3QgZmxvd19oYW5kbGVyLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IGRvX2FjaykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAodW5zaWduZWQgbG9uZylpcnFfZ2V0X2NoaXBfZGF0YSh2aXJxKTsKKworCW1hc2sgJj0gfkxFT05fRE9fQUNLX0hXOworCWlmIChkb19hY2spCisJCW1hc2sgfD0gTEVPTl9ET19BQ0tfSFc7CisKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZSh2aXJxLCAmbGVvbl9pcnEsCisJCQkJICAgICAgZmxvd19oYW5kbGVyLCBuYW1lKTsKKwlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCAodm9pZCAqKW1hc2spOworfQorCiB2b2lkIF9faW5pdCBsZW9uX2luaXRfdGltZXJzKGlycV9oYW5kbGVyX3QgY291bnRlcl9mbikKIHsKIAlpbnQgaXJxLCBlaXJxOwpAQCAtMzYxLDYgKzM3NiwyMiBAQAogCQlwcm9tX2hhbHQoKTsKIAl9CiAKKyNpZmRlZiBDT05GSUdfU01QCisJeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCS8qCisJCSAqIEluIFNNUCwgc3VuNG0gYWRkcyBhIElQSSBoYW5kbGVyIHRvIElSUSB0cmFwIGhhbmRsZXIgdGhhdAorCQkgKiBMRU9OIG5ldmVyIG11c3QgdGFrZSwgc3VuNGQgYW5kIExFT04gb3ZlcndyaXRlcyB0aGUgYnJhbmNoCisJCSAqIHdpdGggYSBOT1AuCisJCSAqLworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXBhdGNobWVfbWF5YmVfc21wX21zZ1swXSA9IDB4MDEwMDAwMDA7IC8qIE5PUCBvdXQgdGhlIGJyYW5jaCAqLworCQlsb2NhbF9mbHVzaF9jYWNoZV9hbGwoKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKyNlbmRpZgorCiAJTEVPTjNfQllQQVNTX1NUT1JFX1BBKCZsZW9uM19ncHRpbWVyX3JlZ3MtPmVbbGVvbjNfZ3B0aW1lcl9pZHhdLmN0cmwsCiAJCQkgICAgICBMRU9OM19HUFRJTUVSX0VOIHwKIAkJCSAgICAgIExFT04zX0dQVElNRVJfUkwgfApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9wY2kuYyBiL2FyY2gvc3BhcmMva2VybmVsL2xlb25fcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhOWEyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2xlb25fcGNpLmMKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBsZW9uX3BjaS5jOiBMRU9OIEhvc3QgUENJIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQWVyb2ZsZXggR2Fpc2xlciBBQiwgRGFuaWVsIEhlbGxzdHJvbQorICoKKyAqIENvZGUgaXMgcGFydGlhbGx5IGRlcml2ZWQgZnJvbSBwY2ljLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2xlb24uaD4KKyNpbmNsdWRlIDxhc20vbGVvbl9wY2kuaD4KKworLyogVGhlIExFT04gYXJjaGl0ZWN0dXJlIGRvZXMgbm90IHJlbHkgb24gYSBCSU9TIG9yIGJvb3Rsb2FkZXIgdG8gc2V0dXAKKyAqIFBDSSBmb3IgdXMuIFRoZSBMaW51eCBnZW5lcmljIHJvdXRpbmVzIGFyZSB1c2VkIHRvIHNldHVwIHJlc291cmNlcywKKyAqIHJlc2V0IHZhbHVlcyBvZiBjb25mdXJhdGlvbi1zcGFjZSByZWdpc3RlcnMgc2V0dGluZ3MgYWUgcHJlc2V2ZWQuCisgKi8KK3ZvaWQgbGVvbl9wY2lfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwgc3RydWN0IGxlb25fcGNpX2luZm8gKmluZm8pCit7CisJc3RydWN0IHBjaV9idXMgKnJvb3RfYnVzOworCisJcm9vdF9idXMgPSBwY2lfc2Nhbl9idXNfcGFyZW50ZWQoJm9mZGV2LT5kZXYsIDAsIGluZm8tPm9wcywgaW5mbyk7CisJaWYgKHJvb3RfYnVzKSB7CisJCXJvb3RfYnVzLT5yZXNvdXJjZVswXSA9ICZpbmZvLT5pb19zcGFjZTsKKwkJcm9vdF9idXMtPnJlc291cmNlWzFdID0gJmluZm8tPm1lbV9zcGFjZTsKKwkJcm9vdF9idXMtPnJlc291cmNlWzJdID0gTlVMTDsKKworCQkvKiBJbml0IGFsbCBQQ0kgZGV2aWNlcyBpbnRvIFBDSSB0cmVlICovCisJCXBjaV9idXNfYWRkX2RldmljZXMocm9vdF9idXMpOworCisJCS8qIFNldHVwIElSUXMgb2YgYWxsIGRldmljZXMgdXNpbmcgY3VzdG9tIHJvdXRpbmVzICovCisJCXBjaV9maXh1cF9pcnFzKHBjaV9jb21tb25fc3dpenpsZSwgaW5mby0+bWFwX2lycSk7CisKKwkJLyogQXNzaWduIGRldmljZXMgd2l0aCByZXNvdXJjZXMgKi8KKwkJcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jlc291cmNlcygpOworCX0KK30KKworLyogUENJIE1lbW9yeSBhbmQgUHJlZmV0Y2hhYmxlIE1lbW9yeSBpcyBkaXJlY3QtbWFwcGVkLiBIb3dldmVyIEkvTyBTcGFjZSBpcworICogYWNjZXNzZWQgdGhyb3VnaCBhIFdpbmRvdyB3aGljaCBpcyB0cmFuc2xhdGVkIHRvIGxvdyA2NEtCIGluIFBDSSBzcGFjZSwgdGhlCisgKiBmaXJzdCA0S0IgaXMgbm90IHVzZWQgc28gNjBLQiBpcyBhdmFpbGFibGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IGdlbmVyaWMgY29kZSB0byB0cmFuc2xhdGUgcmVzb3VyY2UgYWRkcmVzc2VzIGludG8KKyAqIFBDSSBhZGRyZXNzZXMuCisgKi8KK3ZvaWQgcGNpYmlvc19yZXNvdXJjZV90b19idXMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24sCisJCQkgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCBsZW9uX3BjaV9pbmZvICppbmZvID0gZGV2LT5idXMtPnN5c2RhdGE7CisKKwlyZWdpb24tPnN0YXJ0ID0gcmVzLT5zdGFydDsKKwlyZWdpb24tPmVuZCA9IHJlcy0+ZW5kOworCisJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CisJCXJlZ2lvbi0+c3RhcnQgLT0gKGluZm8tPmlvX3NwYWNlLnN0YXJ0IC0gMHgxMDAwKTsKKwkJcmVnaW9uLT5lbmQgLT0gKGluZm8tPmlvX3NwYWNlLnN0YXJ0IC0gMHgxMDAwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKTsKKworLyogc2VlIHBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKCkgY29tbWVudCAqLwordm9pZCBwY2liaW9zX2J1c190b19yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCSAgICAgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pCit7CisJc3RydWN0IGxlb25fcGNpX2luZm8gKmluZm8gPSBkZXYtPmJ1cy0+c3lzZGF0YTsKKworCXJlcy0+c3RhcnQgPSByZWdpb24tPnN0YXJ0OworCXJlcy0+ZW5kID0gcmVnaW9uLT5lbmQ7CisKKwlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJcmVzLT5zdGFydCArPSAoaW5mby0+aW9fc3BhY2Uuc3RhcnQgLSAweDEwMDApOworCQlyZXMtPmVuZCArPSAoaW5mby0+aW9fc3BhY2Uuc3RhcnQgLSAweDEwMDApOworCX0KK30KK0VYUE9SVF9TWU1CT0wocGNpYmlvc19idXNfdG9fcmVzb3VyY2UpOworCit2b2lkIF9fZGV2aW5pdCBwY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqcGJ1cykKK3sKKwlzdHJ1Y3QgbGVvbl9wY2lfaW5mbyAqaW5mbyA9IHBidXMtPnN5c2RhdGE7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlpbnQgaSwgaGFzX2lvLCBoYXNfbWVtOworCXUxNiBjbWQ7CisKKwkvKiBHZW5lcmljIFBDSSBidXMgcHJvYmluZyBzZXRzIHRoZXNlIHRvIHBvaW50IGF0CisJICogJmlve3BvcnQsbWVtfV9yZXNvdWNlIHdoaWNoIGlzIHdyb25nIGZvciB1cy4KKwkgKi8KKwlpZiAocGJ1cy0+c2VsZiA9PSBOVUxMKSB7CisJCXBidXMtPnJlc291cmNlWzBdID0gJmluZm8tPmlvX3NwYWNlOworCQlwYnVzLT5yZXNvdXJjZVsxXSA9ICZpbmZvLT5tZW1fc3BhY2U7CisJCXBidXMtPnJlc291cmNlWzJdID0gTlVMTDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnBidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCS8qCisJCSAqIFdlIGNhbiBub3QgcmVseSBvbiB0aGF0IHRoZSBib290bG9hZGVyIGhhcyBlbmFibGVkIEkvTworCQkgKiBvciBtZW1vcnkgYWNjZXNzIHRvIFBDSSBkZXZpY2VzLiBJbnN0ZWFkIHdlIGVuYWJsZSBpdCBoZXJlCisJCSAqIGlmIHRoZSBkZXZpY2UgaGFzIEJBUnMgb2YgcmVzcGVjdGl2ZSB0eXBlLgorCQkgKi8KKwkJaGFzX2lvID0gaGFzX21lbSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBQQ0lfUk9NX1JFU09VUkNFOyBpKyspIHsKKwkJCXVuc2lnbmVkIGxvbmcgZiA9IGRldi0+cmVzb3VyY2VbaV0uZmxhZ3M7CisJCQlpZiAoZiAmIElPUkVTT1VSQ0VfSU8pCisJCQkJaGFzX2lvID0gMTsKKwkJCWVsc2UgaWYgKGYgJiBJT1JFU09VUkNFX01FTSkKKwkJCQloYXNfbWVtID0gMTsKKwkJfQorCQkvKiBST00gQkFScyBhcmUgbWFwcGVkIGludG8gMzItYml0IG1lbW9yeSBzcGFjZSAqLworCQlpZiAoZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5lbmQgIT0gMCkgeworCQkJZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFncyB8PQorCQkJCQkJCUlPUkVTT1VSQ0VfUk9NX0VOQUJMRTsKKwkJCWhhc19tZW0gPSAxOworCQl9CisJCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChwYnVzLCBkZXYtPmRldmZuLCBQQ0lfQ09NTUFORCwgJmNtZCk7CisJCWlmIChoYXNfaW8gJiYgIShjbWQgJiBQQ0lfQ09NTUFORF9JTykpIHsKKyNpZmRlZiBDT05GSUdfUENJX0RFQlVHCisJCQlwcmludGsoS0VSTl9JTkZPICJMRU9OUENJOiBFbmFibGluZyBJL08gZm9yIGRldiAlc1xuIiwKKwkJCQkJIHBjaV9uYW1lKGRldikpOworI2VuZGlmCisJCQljbWQgfD0gUENJX0NPTU1BTkRfSU87CisJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBidXMsIGRldi0+ZGV2Zm4sIFBDSV9DT01NQU5ELAorCQkJCQkJCQkJY21kKTsKKwkJfQorCQlpZiAoaGFzX21lbSAmJiAhKGNtZCAmIFBDSV9DT01NQU5EX01FTU9SWSkpIHsKKyNpZmRlZiBDT05GSUdfUENJX0RFQlVHCisJCQlwcmludGsoS0VSTl9JTkZPICJMRU9OUENJOiBFbmFibGluZyBNRU1PUlkgZm9yIGRldiIKKwkJCQkJICIlc1xuIiwgcGNpX25hbWUoZGV2KSk7CisjZW5kaWYKKwkJCWNtZCB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7CisJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBidXMsIGRldi0+ZGV2Zm4sIFBDSV9DT01NQU5ELAorCQkJCQkJCQkJY21kKTsKKwkJfQorCX0KK30KKworLyoKKyAqIE90aGVyIGFyY2hzIHBhcnNlIGFyZ3VtZW50cyBoZXJlLgorICovCitjaGFyICogX19kZXZpbml0IHBjaWJpb3Nfc2V0dXAoY2hhciAqc3RyKQoreworCXJldHVybiBzdHI7Cit9CisKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCit7CisJcmV0dXJuIHJlcy0+c3RhcnQ7Cit9CisKK2ludCBwY2liaW9zX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1hc2spCit7CisJcmV0dXJuIHBjaV9lbmFibGVfcmVzb3VyY2VzKGRldiwgbWFzayk7Cit9CisKK3N0cnVjdCBkZXZpY2Vfbm9kZSAqcGNpX2RldmljZV90b19PRl9ub2RlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCS8qCisJICogQ3VycmVudGx5IHRoZSBPcGVuQm9vdCBub2RlcyBhcmUgbm90IGNvbm5lY3RlZCB3aXRoIHRoZSBQQ0kgZGV2aWNlLAorCSAqIHRoaXMgaXMgYmVjYXVzZSB0aGUgTEVPTiBQUk9NIGRvZXMgbm90IGNyZWF0ZSBQQ0kgbm9kZXMuIEV2ZW50dWFsbHkKKwkgKiB0aGlzIHdpbGwgY2hhbmdlIGFuZCB0aGUgc2FtZSBhcHByb2FjaCBhcyBwY2ljLmMgY2FuIGJlIHVzZWQgdG8KKwkgKiBtYXRjaCBQUk9NIG5vZGVzIHdpdGggcGNpIGRldmljZXMuCisJICovCisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHBjaV9kZXZpY2VfdG9fT0Zfbm9kZSk7CisKK3ZvaWQgX19kZXZpbml0IHBjaWJpb3NfdXBkYXRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaXJxKQoreworI2lmZGVmIENPTkZJR19QQ0lfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiTEVPTlBDSTogQXNzaWduaW5nIElSUSAlMDJkIHRvICVzXG4iLCBpcnEsCisJCXBjaV9uYW1lKGRldikpOworI2VuZGlmCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCBpcnEpOworfQorCisvKiBpbi9vdXQgcm91dGluZXMgdGFrZW4gZnJvbSBwY2ljLmMKKyAqCisgKiBUaGlzIHByb2JhYmx5IGJlbG9uZ3MgaGVyZSByYXRoZXIgdGhhbiBpb3BvcnQuYyBiZWNhdXNlCisgKiB3ZSBkbyBub3Qgd2FudCB0aGlzIGNydWQgbGlua2VkIGludG8gU0J1cyBrZXJuZWxzLgorICogQWxzbywgdGhpbmsgZm9yIGEgbW9tZW50IGFib3V0IGxpa2VzIG9mIGZsb3BweS5jIHRoYXQKKyAqIGluY2x1ZGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBhcnRzLiBUaGV5IG1heSB3YW50IHRvIHJlZGVmaW5lIGlucy9vdXRzLgorICoKKyAqIFdlIGRvIG5vdCB1c2UgaG9ycmlibGUgbWFjcm9zIGhlcmUgYmVjYXVzZSB3ZSB3YW50IHRvCisgKiBhZHZhbmNlIHBvaW50ZXIgYnkgc2l6ZW9mKHNpemUpLgorICovCit2b2lkIG91dHNiKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXdoaWxlIChjb3VudCkgeworCQljb3VudCAtPSAxOworCQlvdXRiKCooY29uc3QgY2hhciAqKXNyYywgYWRkcik7CisJCXNyYyArPSAxOworCQkvKiBhZGRyICs9IDE7ICovCisJfQorfQorRVhQT1JUX1NZTUJPTChvdXRzYik7CisKK3ZvaWQgb3V0c3codW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJd2hpbGUgKGNvdW50KSB7CisJCWNvdW50IC09IDI7CisJCW91dHcoKihjb25zdCBzaG9ydCAqKXNyYywgYWRkcik7CisJCXNyYyArPSAyOworCQkvKiBhZGRyICs9IDI7ICovCisJfQorfQorRVhQT1JUX1NZTUJPTChvdXRzdyk7CisKK3ZvaWQgb3V0c2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJd2hpbGUgKGNvdW50KSB7CisJCWNvdW50IC09IDQ7CisJCW91dGwoKihjb25zdCBsb25nICopc3JjLCBhZGRyKTsKKwkJc3JjICs9IDQ7CisJCS8qIGFkZHIgKz0gNDsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MKG91dHNsKTsKKwordm9pZCBpbnNiKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXdoaWxlIChjb3VudCkgeworCQljb3VudCAtPSAxOworCQkqKHVuc2lnbmVkIGNoYXIgKilkc3QgPSBpbmIoYWRkcik7CisJCWRzdCArPSAxOworCQkvKiBhZGRyICs9IDE7ICovCisJfQorfQorRVhQT1JUX1NZTUJPTChpbnNiKTsKKwordm9pZCBpbnN3KHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXdoaWxlIChjb3VudCkgeworCQljb3VudCAtPSAyOworCQkqKHVuc2lnbmVkIHNob3J0ICopZHN0ID0gaW53KGFkZHIpOworCQlkc3QgKz0gMjsKKwkJLyogYWRkciArPSAyOyAqLworCX0KK30KK0VYUE9SVF9TWU1CT0woaW5zdyk7CisKK3ZvaWQgaW5zbCh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQpIHsKKwkJY291bnQgLT0gNDsKKwkJLyoKKwkJICogWFhYIEkgYW0gc3VyZSB3ZSBhcmUgaW4gZm9yIGFuIHVuYWxpZ25lZCB0cmFwIGhlcmUuCisJCSAqLworCQkqKHVuc2lnbmVkIGxvbmcgKilkc3QgPSBpbmwoYWRkcik7CisJCWRzdCArPSA0OworCQkvKiBhZGRyICs9IDQ7ICovCisJfQorfQorRVhQT1JUX1NZTUJPTChpbnNsKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fcGNpX2dycGNpMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9wY2lfZ3JwY2kyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkYzA5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2xlb25fcGNpX2dycGNpMi5jCkBAIC0wLDAgKzEsODk3IEBACisvKgorICogbGVvbl9wY2lfZ3JwY2kyLmM6IEdSUENJMiBIb3N0IFBDSSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQWVyb2ZsZXggR2Fpc2xlciBBQiwgRGFuaWVsIEhlbGxzdHJvbQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbGVvbi5oPgorI2luY2x1ZGUgPGFzbS92YWRkcnMuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vbGVvbl9wY2kuaD4KKworI2luY2x1ZGUgImlycS5oIgorCitzdHJ1Y3QgZ3JwY2kyX2JhcmNmZyB7CisJdW5zaWduZWQgbG9uZyBwY2lhZHI7CS8qIFBDSSBTcGFjZSBBZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBhaGJhZHI7CS8qIFBDSSBCYXNlIGFkZHJlc3MgbWFwcGVkIHRvIHRoaXMgQUhCIGFkZHIgKi8KK307CisKKy8qIERldmljZSBOb2RlIENvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAqICAtIGJhcmNmZ3MgICAgOiBDdXN0b20gQ29uZmlndXJhdGlvbiBvZiBIb3N0J3MgNiB0YXJnZXQgQkFScworICogIC0gaXJxX21hc2sgICA6IExpbWl0IHdoaWNoIFBDSSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkCisgKiAgLSBkb19yZXNldCAgIDogRm9yY2UgUENJIFJlc2V0IG9uIHN0YXJ0dXAKKyAqCisgKiBiYXJjZmdzCisgKiA9PT09PT09CisgKgorICogT3B0aW9uYWwgY3VzdG9tIFRhcmdldCBCQVIgY29uZmlndXJhdGlvbiAoc2VlIHN0cnVjdCBncnBjaTJfYmFyY2ZnKS4gQWxsCisgKiBhZGRyZXNzZXMgYXJlIHBoeXNpY2FsLiBBcnJheSBhbHdheXMgY29udGFpbnMgNiBlbGVtZW50cyAobGVuPTIqNCo2IGJ5dGVzKQorICoKKyAqIC0xIG1lYW5zIG5vdCBjb25maWd1cmVkIChsZXQgaG9zdCBkcml2ZXIgZG8gZGVmYXVsdCBzZXR1cCkuCisgKgorICogW2kqMiswXSA9IFBDSSBBZGRyZXNzIG9mIEJBUltpXSBvbiB0YXJnZXQgaW50ZXJmYWNlCisgKiBbaSoyKzFdID0gQWNjZXNzaW5nIFBDSSBhZGRyZXNzIG9mIEJBUltpXSByZXN1bHQgaW4gdGhpcyBBTUJBIGFkZHJlc3MKKyAqCisgKgorICogaXJxX21hc2sKKyAqID09PT09PT09CisgKgorICogTGltaXQgd2hpY2ggUENJIGludGVycnVwdHMgYXJlIGVuYWJsZWQuIDA9RGlzYWJsZSwgMT1FbmFibGUuIEJ5IGRlZmF1bHQKKyAqIGFsbCBhcmUgZW5hYmxlZC4gVXNlIHRoaXMgd2hlbiBQQ0kgaW50ZXJydXB0IHBpbnMgYXJlIGZsb2F0aW5nIG9uIFBDQi4KKyAqIGludCwgbGVuPTQuCisgKiAgYml0MCA9IFBDSSBJTlRBIworICogIGJpdDEgPSBQQ0kgSU5UQiMKKyAqICBiaXQyID0gUENJIElOVEMjCisgKiAgYml0MyA9IFBDSSBJTlREIworICoKKyAqCisgKiByZXNldAorICogPT09PT0KKyAqCisgKiBGb3JjZSBQQ0kgcmVzZXQgb24gc3RhcnR1cC4gaW50LCBsZW49NAorICovCisKKy8qIEVuYWJsZSBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbiBTcGFjZSBBY2Nlc3MgKi8KKyN1bmRlZiBHUlBDSTJfREVCVUdfQ0ZHQUNDRVNTCisKKy8qCisgKiBHUlBDSTIgQVBCIFJlZ2lzdGVyIE1BUAorICovCitzdHJ1Y3QgZ3JwY2kyX3JlZ3MgeworCXVuc2lnbmVkIGludCBjdHJsOwkJLyogMHgwMCBDb250cm9sICovCisJdW5zaWduZWQgaW50IHN0c19jYXA7CQkvKiAweDA0IFN0YXR1cyAvIENhcGFiaWxpdGllcyAqLworCWludCByZXMxOwkJCS8qIDB4MDggKi8KKwl1bnNpZ25lZCBpbnQgaW9fbWFwOwkJLyogMHgwQyBJL08gTWFwIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgZG1hX2N0cmw7CQkvKiAweDEwIERNQSAqLworCXVuc2lnbmVkIGludCBkbWFfYmRiYXNlOwkvKiAweDE0IERNQSAqLworCWludCByZXMyWzJdOwkJCS8qIDB4MTggKi8KKwl1bnNpZ25lZCBpbnQgYmFyc1s2XTsJCS8qIDB4MjAgcmVhZC1vbmx5IFBDSSBCQVJzICovCisJaW50IHJlczNbMl07CQkJLyogMHgzOCAqLworCXVuc2lnbmVkIGludCBhaGJtc3RfbWFwWzE2XTsJLyogMHg0MCBBSEItPlBDSSBNYXAgcGVyIEFIQiBNYXN0ZXIgKi8KKworCS8qIFBDSSBUcmFjZSBCdWZmZXIgUmVnaXN0ZXJzIChPUFRJT05BTCkgKi8KKwl1bnNpZ25lZCBpbnQgdF9jdHJsOwkJLyogMHg4MCAqLworCXVuc2lnbmVkIGludCB0X2NudDsJCS8qIDB4ODQgKi8KKwl1bnNpZ25lZCBpbnQgdF9hZHBhdDsJCS8qIDB4ODggKi8KKwl1bnNpZ25lZCBpbnQgdF9hZG1hc2s7CQkvKiAweDhDICovCisJdW5zaWduZWQgaW50IHRfc2lncGF0OwkJLyogMHg5MCAqLworCXVuc2lnbmVkIGludCB0X3NpZ21hc2s7CQkvKiAweDk0ICovCisJdW5zaWduZWQgaW50IHRfYWRzdGF0ZTsJCS8qIDB4OTggKi8KKwl1bnNpZ25lZCBpbnQgdF9zaWdzdGF0ZTsJLyogMHg5QyAqLworfTsKKworI2RlZmluZSBSRUdMT0FEKGEpCShiZTMyX3RvX2NwdShfX3Jhd19yZWFkbCgmKGEpKSkpCisjZGVmaW5lIFJFR1NUT1JFKGEsIHYpCShfX3Jhd193cml0ZWwoY3B1X3RvX2JlMzIodiksICYoYSkpKQorCisjZGVmaW5lIENUUkxfQlVTX0JJVCAxNgorCisjZGVmaW5lIENUUkxfUkVTRVQgKDE8PDMxKQorI2RlZmluZSBDVFJMX1NJICgxPDwyNykKKyNkZWZpbmUgQ1RSTF9QRSAoMTw8MjYpCisjZGVmaW5lIENUUkxfRUkgKDE8PDI1KQorI2RlZmluZSBDVFJMX0VSICgxPDwyNCkKKyNkZWZpbmUgQ1RSTF9CVVMgKDB4ZmY8PENUUkxfQlVTX0JJVCkKKyNkZWZpbmUgQ1RSTF9IT1NUSU5UIDB4ZgorCisjZGVmaW5lIFNUU19IT1NUX0JJVAkzMQorI2RlZmluZSBTVFNfTVNUX0JJVAkzMAorI2RlZmluZSBTVFNfVEFSX0JJVAkyOQorI2RlZmluZSBTVFNfRE1BX0JJVAkyOAorI2RlZmluZSBTVFNfRElfQklUCTI3CisjZGVmaW5lIFNUU19ISV9CSVQJMjYKKyNkZWZpbmUgU1RTX0lSUU1PREVfQklUCTI0CisjZGVmaW5lIFNUU19UUkFDRV9CSVQJMjMKKyNkZWZpbmUgU1RTX0NGR0VSUlZBTElEX0JJVCAyMAorI2RlZmluZSBTVFNfQ0ZHRVJSX0JJVAkxOQorI2RlZmluZSBTVFNfSU5UVFlQRV9CSVQJMTIKKyNkZWZpbmUgU1RTX0lOVFNUU19CSVQJOAorI2RlZmluZSBTVFNfRkRFUFRIX0JJVAkyCisjZGVmaW5lIFNUU19GTlVNX0JJVAkwCisKKyNkZWZpbmUgU1RTX0hPU1QJKDE8PFNUU19IT1NUX0JJVCkKKyNkZWZpbmUgU1RTX01TVAkJKDE8PFNUU19NU1RfQklUKQorI2RlZmluZSBTVFNfVEFSCQkoMTw8U1RTX1RBUl9CSVQpCisjZGVmaW5lIFNUU19ETUEJCSgxPDxTVFNfRE1BX0JJVCkKKyNkZWZpbmUgU1RTX0RJCQkoMTw8U1RTX0RJX0JJVCkKKyNkZWZpbmUgU1RTX0hJCQkoMTw8U1RTX0hJX0JJVCkKKyNkZWZpbmUgU1RTX0lSUU1PREUJKDB4Mzw8U1RTX0lSUU1PREVfQklUKQorI2RlZmluZSBTVFNfVFJBQ0UJKDE8PFNUU19UUkFDRV9CSVQpCisjZGVmaW5lIFNUU19DRkdFUlJWQUxJRAkoMTw8U1RTX0NGR0VSUlZBTElEX0JJVCkKKyNkZWZpbmUgU1RTX0NGR0VSUgkoMTw8U1RTX0NGR0VSUl9CSVQpCisjZGVmaW5lIFNUU19JTlRUWVBFCSgweDNmPDxTVFNfSU5UVFlQRV9CSVQpCisjZGVmaW5lIFNUU19JTlRTVFMJKDB4Zjw8U1RTX0lOVFNUU19CSVQpCisjZGVmaW5lIFNUU19GREVQVEgJKDB4Nzw8U1RTX0ZERVBUSF9CSVQpCisjZGVmaW5lIFNUU19GTlVNCSgweDM8PFNUU19GTlVNX0JJVCkKKworI2RlZmluZSBTVFNfSVNZU0VSUgkoMTw8MTcpCisjZGVmaW5lIFNUU19JRE1BCSgxPDwxNikKKyNkZWZpbmUgU1RTX0lETUFFUlIJKDE8PDE1KQorI2RlZmluZSBTVFNfSU1TVEFCUlQJKDE8PDE0KQorI2RlZmluZSBTVFNfSVRHVEFCUlQJKDE8PDEzKQorI2RlZmluZSBTVFNfSVBBUkVSUgkoMTw8MTIpCisKKyNkZWZpbmUgU1RTX0VSUl9JUlEgKFNUU19JU1lTRVJSIHwgU1RTX0lNU1RBQlJUIHwgU1RTX0lUR1RBQlJUIHwgU1RTX0lQQVJFUlIpCisKK3N0cnVjdCBncnBjaTJfYmRfY2hhbiB7CisJdW5zaWduZWQgaW50IGN0cmw7CS8qIDB4MDAgRE1BIENvbnRyb2wgKi8KKwl1bnNpZ25lZCBpbnQgbmNoYW47CS8qIDB4MDQgTmV4dCBETUEgQ2hhbm5lbCBBZGRyZXNzICovCisJdW5zaWduZWQgaW50IG5iZDsJLyogMHgwOCBOZXh0IERhdGEgRGVzY3JpcHRvciBpbiBjaGFuICovCisJdW5zaWduZWQgaW50IHJlczsJLyogMHgwQyBSZXNlcnZlZCAqLworfTsKKworI2RlZmluZSBCRF9DSEFOX0VOCQkweDgwMDAwMDAwCisjZGVmaW5lIEJEX0NIQU5fVFlQRQkJMHgwMDMwMDAwMAorI2RlZmluZSBCRF9DSEFOX0JEQ05UCQkweDAwMDBmZmZmCisjZGVmaW5lIEJEX0NIQU5fRU5fQklUCQkzMQorI2RlZmluZSBCRF9DSEFOX1RZUEVfQklUCTIwCisjZGVmaW5lIEJEX0NIQU5fQkRDTlRfQklUCTAKKworc3RydWN0IGdycGNpMl9iZF9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgY3RybDsJLyogMHgwMCBETUEgRGF0YSBDb250cm9sICovCisJdW5zaWduZWQgaW50IHBjaV9hZHI7CS8qIDB4MDQgUENJIFN0YXJ0IEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgYWhiX2FkcjsJLyogMHgwOCBBSEIgU3RhcnQgYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBuZXh0OwkvKiAweDBDIE5leHQgRGF0YSBEZXNjcmlwdG9yIGluIGNoYW4gKi8KK307CisKKyNkZWZpbmUgQkRfREFUQV9FTgkJMHg4MDAwMDAwMAorI2RlZmluZSBCRF9EQVRBX0lFCQkweDQwMDAwMDAwCisjZGVmaW5lIEJEX0RBVEFfRFIJCTB4MjAwMDAwMDAKKyNkZWZpbmUgQkRfREFUQV9UWVBFCQkweDAwMzAwMDAwCisjZGVmaW5lIEJEX0RBVEFfRVIJCTB4MDAwODAwMDAKKyNkZWZpbmUgQkRfREFUQV9MRU4JCTB4MDAwMGZmZmYKKyNkZWZpbmUgQkRfREFUQV9FTl9CSVQJCTMxCisjZGVmaW5lIEJEX0RBVEFfSUVfQklUCQkzMAorI2RlZmluZSBCRF9EQVRBX0RSX0JJVAkJMjkKKyNkZWZpbmUgQkRfREFUQV9UWVBFX0JJVAkyMAorI2RlZmluZSBCRF9EQVRBX0VSX0JJVAkJMTkKKyNkZWZpbmUgQkRfREFUQV9MRU5fQklUCQkwCisKKy8qIEdSUENJMiBDYXBhYmlsaXR5ICovCitzdHJ1Y3QgZ3JwY2kyX2NhcF9maXJzdCB7CisJdW5zaWduZWQgaW50IGN0cmw7CisJdW5zaWduZWQgaW50IHBjaTJhaGJfbWFwWzZdOworCXVuc2lnbmVkIGludCBleHQyYWhiX21hcDsKKwl1bnNpZ25lZCBpbnQgaW9fbWFwOworCXVuc2lnbmVkIGludCBwY2liYXJfc2l6ZVs2XTsKK307CisjZGVmaW5lIENBUDlfQ1RSTF9PRlMgMAorI2RlZmluZSBDQVA5X0JBUl9PRlMgMHg0CisjZGVmaW5lIENBUDlfSU9NQVBfT0ZTIDB4MjAKKyNkZWZpbmUgQ0FQOV9CQVJTSVpFX09GUyAweDI0CisKK3N0cnVjdCBncnBjaTJfcHJpdiB7CisJc3RydWN0IGxlb25fcGNpX2luZm8JaW5mbzsgLyogbXVzdCBiZSBvbiB0b3Agb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZ3JwY2kyX3JlZ3MJKnJlZ3M7CisJY2hhcgkJCWlycTsKKwljaGFyCQkJaXJxX21vZGU7IC8qIElSUSBNb2RlIGZyb20gQ0FQU1RTIFJFRyAqLworCWNoYXIJCQlidF9lbmFibGVkOworCWNoYXIJCQlkb19yZXNldDsKKwljaGFyCQkJaXJxX21hc2s7CisJdTMyCQkJcGNpaWQ7IC8qIFBDSSBJRCBvZiBIb3N0ICovCisJdW5zaWduZWQgY2hhcgkJaXJxX21hcFs0XTsKKworCS8qIFZpcnR1YWwgSVJRIG51bWJlcnMgKi8KKwl1bnNpZ25lZCBpbnQJCXZpcnFfZXJyOworCXVuc2lnbmVkIGludAkJdmlycV9kbWE7CisKKwkvKiBBSEIgUENJIFdpbmRvd3MgKi8KKwl1bnNpZ25lZCBsb25nCQlwY2lfYXJlYTsJLyogTUVNT1JZICovCisJdW5zaWduZWQgbG9uZwkJcGNpX2FyZWFfZW5kOworCXVuc2lnbmVkIGxvbmcJCXBjaV9pbzsJCS8qIEkvTyAqLworCXVuc2lnbmVkIGxvbmcJCXBjaV9jb25mOwkvKiBDT05GSUdVUkFUSU9OICovCisJdW5zaWduZWQgbG9uZwkJcGNpX2NvbmZfZW5kOworCXVuc2lnbmVkIGxvbmcJCXBjaV9pb192YTsKKworCXN0cnVjdCBncnBjaTJfYmFyY2ZnCXRndGJhcnNbNl07Cit9OworCitERUZJTkVfU1BJTkxPQ0soZ3JwY2kyX2Rldl9sb2NrKTsKK3N0cnVjdCBncnBjaTJfcHJpdiAqZ3JwY2kycHJpdjsKKworaW50IGdycGNpMl9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYgPSBkZXYtPmJ1cy0+c3lzZGF0YTsKKwlpbnQgaXJxX2dyb3VwOworCisJLyogVXNlIGRlZmF1bHQgSVJRIGRlY29kaW5nIG9uIFBDSSBCVVMwIGFjY29yZGluZyBzbG90IG51bWJlcmluZyAqLworCWlycV9ncm91cCA9IHNsb3QgJiAweDM7CisJcGluID0gKChwaW4gLSAxKSArIGlycV9ncm91cCkgJiAweDM7CisKKwlyZXR1cm4gcHJpdi0+aXJxX21hcFtwaW5dOworfQorCitzdGF0aWMgaW50IGdycGNpMl9jZmdfcjMyKHN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGJ1cywKKwkJCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgdTMyICp2YWwpCit7CisJdW5zaWduZWQgaW50ICpwY2lfY29uZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB0bXA7CisKKwlpZiAod2hlcmUgJiAweDMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJ1cyA9PSAwICYmIFBDSV9TTE9UKGRldmZuKSAhPSAwKQorCQlkZXZmbiArPSAoMHg4ICogNik7CisKKwkvKiBTZWxlY3QgYnVzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworCVJFR1NUT1JFKHByaXYtPnJlZ3MtPmN0cmwsIChSRUdMT0FEKHByaXYtPnJlZ3MtPmN0cmwpICYgfigweGZmIDw8IDE2KSkgfAorCQkJCSAgIChidXMgPDwgMTYpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncnBjaTJfZGV2X2xvY2ssIGZsYWdzKTsKKworCS8qIGNsZWFyIG9sZCBzdGF0dXMgKi8KKwlSRUdTVE9SRShwcml2LT5yZWdzLT5zdHNfY2FwLCAoU1RTX0NGR0VSUiB8IFNUU19DRkdFUlJWQUxJRCkpOworCisJcGNpX2NvbmYgPSAodW5zaWduZWQgaW50ICopIChwcml2LT5wY2lfY29uZiB8CisJCQkJCQkoZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiAweGZjKSk7CisJdG1wID0gTEVPTjNfQllQQVNTX0xPQURfUEEocGNpX2NvbmYpOworCisJLyogV2FpdCB1bnRpbCBHUlBDSTIgc2lnbmFscyB0aGF0IENGRyBhY2Nlc3MgaXMgZG9uZSwgaXQgc2hvdWxkIGJlCisJICogZG9uZSBpbnN0YW50YW5lb3VzbHkgdW5sZXNzIGEgRE1BIG9wZXJhdGlvbiBpcyBvbmdvaW5nLi4uCisJICovCisJd2hpbGUgKChSRUdMT0FEKHByaXYtPnJlZ3MtPnN0c19jYXApICYgU1RTX0NGR0VSUlZBTElEKSA9PSAwKQorCQk7CisKKwlpZiAoUkVHTE9BRChwcml2LT5yZWdzLT5zdHNfY2FwKSAmIFNUU19DRkdFUlIpIHsKKwkJKnZhbCA9IDB4ZmZmZmZmZmY7CisJfSBlbHNlIHsKKwkJLyogQnVzIGFsd2F5cyBsaXR0bGUgZW5kaWFuICh1bmFmZmVjdGVkIGJ5IGJ5dGUtc3dhcHBpbmcpICovCisJCSp2YWwgPSBmbGlwX2R3b3JkKHRtcCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3JwY2kyX2NmZ19yMTYoc3RydWN0IGdycGNpMl9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgYnVzLAorCQkJCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MzIgKnZhbCkKK3sKKwl1MzIgdjsKKwlpbnQgcmV0OworCisJaWYgKHdoZXJlICYgMHgxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXQgPSBncnBjaTJfY2ZnX3IzMihwcml2LCBidXMsIGRldmZuLCB3aGVyZSAmIH4weDMsICZ2KTsKKwkqdmFsID0gMHhmZmZmICYgKHYgPj4gKDggKiAod2hlcmUgJiAweDMpKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBncnBjaTJfY2ZnX3I4KHN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGJ1cywKKwkJCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgdTMyICp2YWwpCit7CisJdTMyIHY7CisJaW50IHJldDsKKworCXJldCA9IGdycGNpMl9jZmdfcjMyKHByaXYsIGJ1cywgZGV2Zm4sIHdoZXJlICYgfjB4MywgJnYpOworCSp2YWwgPSAweGZmICYgKHYgPj4gKDggKiAod2hlcmUgJiAzKSkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBncnBjaTJfY2ZnX3czMihzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBidXMsCisJCQkJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHUzMiB2YWwpCit7CisJdW5zaWduZWQgaW50ICpwY2lfY29uZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHdoZXJlICYgMHgzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChidXMgPT0gMCAmJiBQQ0lfU0xPVChkZXZmbikgIT0gMCkKKwkJZGV2Zm4gKz0gKDB4OCAqIDYpOworCisJLyogU2VsZWN0IGJ1cyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZncnBjaTJfZGV2X2xvY2ssIGZsYWdzKTsKKwlSRUdTVE9SRShwcml2LT5yZWdzLT5jdHJsLCAoUkVHTE9BRChwcml2LT5yZWdzLT5jdHJsKSAmIH4oMHhmZiA8PCAxNikpIHwKKwkJCQkgICAoYnVzIDw8IDE2KSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JwY2kyX2Rldl9sb2NrLCBmbGFncyk7CisKKwkvKiBjbGVhciBvbGQgc3RhdHVzICovCisJUkVHU1RPUkUocHJpdi0+cmVncy0+c3RzX2NhcCwgKFNUU19DRkdFUlIgfCBTVFNfQ0ZHRVJSVkFMSUQpKTsKKworCXBjaV9jb25mID0gKHVuc2lnbmVkIGludCAqKSAocHJpdi0+cGNpX2NvbmYgfAorCQkJCQkJKGRldmZuIDw8IDgpIHwgKHdoZXJlICYgMHhmYykpOworCUxFT04zX0JZUEFTU19TVE9SRV9QQShwY2lfY29uZiwgZmxpcF9kd29yZCh2YWwpKTsKKworCS8qIFdhaXQgdW50aWwgR1JQQ0kyIHNpZ25hbHMgdGhhdCBDRkcgYWNjZXNzIGlzIGRvbmUsIGl0IHNob3VsZCBiZQorCSAqIGRvbmUgaW5zdGFudGFuZW91c2x5IHVubGVzcyBhIERNQSBvcGVyYXRpb24gaXMgb25nb2luZy4uLgorCSAqLworCXdoaWxlICgoUkVHTE9BRChwcml2LT5yZWdzLT5zdHNfY2FwKSAmIFNUU19DRkdFUlJWQUxJRCkgPT0gMCkKKwkJOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3JwY2kyX2NmZ193MTYoc3RydWN0IGdycGNpMl9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgYnVzLAorCQkJCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MzIgdmFsKQoreworCWludCByZXQ7CisJdTMyIHY7CisKKwlpZiAod2hlcmUgJiAweDEpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IGdycGNpMl9jZmdfcjMyKHByaXYsIGJ1cywgZGV2Zm4sIHdoZXJlJn4zLCAmdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwl2ID0gKHYgJiB+KDB4ZmZmZiA8PCAoOCAqICh3aGVyZSAmIDB4MykpKSkgfAorCSAgICAoKDB4ZmZmZiAmIHZhbCkgPDwgKDggKiAod2hlcmUgJiAweDMpKSk7CisJcmV0dXJuIGdycGNpMl9jZmdfdzMyKHByaXYsIGJ1cywgZGV2Zm4sIHdoZXJlICYgfjB4Mywgdik7Cit9CisKK3N0YXRpYyBpbnQgZ3JwY2kyX2NmZ193OChzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBidXMsCisJCQkJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHUzMiB2YWwpCit7CisJaW50IHJldDsKKwl1MzIgdjsKKworCXJldCA9IGdycGNpMl9jZmdfcjMyKHByaXYsIGJ1cywgZGV2Zm4sIHdoZXJlICYgfjB4MywgJnYpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKwl2ID0gKHYgJiB+KDB4ZmYgPDwgKDggKiAod2hlcmUgJiAweDMpKSkpIHwKKwkgICAgKCgweGZmICYgdmFsKSA8PCAoOCAqICh3aGVyZSAmIDB4MykpKTsKKwlyZXR1cm4gZ3JwY2kyX2NmZ193MzIocHJpdiwgYnVzLCBkZXZmbiwgd2hlcmUgJiB+MHgzLCB2KTsKK30KKworLyogUmVhZCBmcm9tIENvbmZpZ3VyYXRpb24gU3BhY2UuIFdoZW4gZW50ZXJpbmcgaGVyZSB0aGUgUENJIGxheWVyIGhhcyB0YWtlbgorICogdGhlIHBjaV9sb2NrIHNwaW5sb2NrIGFuZCBJUlEgaXMgb2ZmLgorICovCitzdGF0aWMgaW50IGdycGNpMl9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKK3sKKwlzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYgPSBncnBjaTJwcml2OworCXVuc2lnbmVkIGludCBidXNubyA9IGJ1cy0+bnVtYmVyOworCWludCByZXQ7CisKKwlpZiAoUENJX1NMT1QoZGV2Zm4pID4gMTUgfHwgKFBDSV9TTE9UKGRldmZuKSA9PSAwICYmIGJ1c25vID09IDApKSB7CisJCSp2YWwgPSB+MDsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlyZXQgPSBncnBjaTJfY2ZnX3I4KHByaXYsIGJ1c25vLCBkZXZmbiwgd2hlcmUsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0ID0gZ3JwY2kyX2NmZ19yMTYocHJpdiwgYnVzbm8sIGRldmZuLCB3aGVyZSwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyZXQgPSBncnBjaTJfY2ZnX3IzMihwcml2LCBidXNubywgZGV2Zm4sIHdoZXJlLCB2YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKyNpZmRlZiBHUlBDSTJfREVCVUdfQ0ZHQUNDRVNTCisJcHJpbnRrKEtFUk5fSU5GTyAiZ3JwY2kyX3JlYWRfY29uZmlnOiBbJTAyeDolMDJ4OiV4XSBvZnM9JWQgdmFsPSV4ICIKKwkJInNpemU9JWRcbiIsIGJ1c25vLCBQQ0lfU0xPVChkZXZmbiksIFBDSV9GVU5DKGRldmZuKSwgd2hlcmUsCisJCSp2YWwsIHNpemUpOworI2VuZGlmCisKKwlyZXR1cm4gcmV0OworfQorCisvKiBXcml0ZSB0byBDb25maWd1cmF0aW9uIFNwYWNlLiBXaGVuIGVudGVyaW5nIGhlcmUgdGhlIFBDSSBsYXllciBoYXMgdGFrZW4KKyAqIHRoZSBwY2lfbG9jayBzcGlubG9jayBhbmQgSVJRIGlzIG9mZi4KKyAqLworc3RhdGljIGludCBncnBjaTJfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQoreworCXN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiA9IGdycGNpMnByaXY7CisJdW5zaWduZWQgaW50IGJ1c25vID0gYnVzLT5udW1iZXI7CisKKwlpZiAoUENJX1NMT1QoZGV2Zm4pID4gMTUgfHwgKFBDSV9TTE9UKGRldmZuKSA9PSAwICYmIGJ1c25vID09IDApKQorCQlyZXR1cm4gMDsKKworI2lmZGVmIEdSUENJMl9ERUJVR19DRkdBQ0NFU1MKKwlwcmludGsoS0VSTl9JTkZPICJncnBjaTJfd3JpdGVfY29uZmlnOiBbJTAyeDolMDJ4OiV4XSBvZnM9JWQgc2l6ZT0lZCAiCisJCSJ2YWw9JXhcbiIsIGJ1c25vLCBQQ0lfU0xPVChkZXZmbiksIFBDSV9GVU5DKGRldmZuKSwKKwkJd2hlcmUsIHNpemUsIHZhbCk7CisjZW5kaWYKKworCXN3aXRjaCAoc2l6ZSkgeworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgMToKKwkJcmV0dXJuIGdycGNpMl9jZmdfdzgocHJpdiwgYnVzbm8sIGRldmZuLCB3aGVyZSwgdmFsKTsKKwljYXNlIDI6CisJCXJldHVybiBncnBjaTJfY2ZnX3cxNihwcml2LCBidXNubywgZGV2Zm4sIHdoZXJlLCB2YWwpOworCWNhc2UgNDoKKwkJcmV0dXJuIGdycGNpMl9jZmdfdzMyKHByaXYsIGJ1c25vLCBkZXZmbiwgd2hlcmUsIHZhbCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBjaV9vcHMgZ3JwY2kyX29wcyA9IHsKKwkucmVhZCA9CQlncnBjaTJfcmVhZF9jb25maWcsCisJLndyaXRlID0JZ3JwY2kyX3dyaXRlX2NvbmZpZywKK307CisKKy8qIEdFTklSUSBJUlEgY2hpcCBpbXBsZW1lbnRhdGlvbiBmb3IgR1JQQ0kyIGlycW1vZGU9MC4uMi4gSW4gY29uZmlndXJhdGlvbgorICogMyB3aGVyZSBhbGwgUENJIEludGVycnVwdHMgaGFzIGEgc2VwYXJhdGUgSVJRIG9uIHRoZSBzeXN0ZW0gSVJRIGNvbnRyb2xsZXIKKyAqIHRoaXMgaXMgbm90IG5lZWRlZCBhbmQgdGhlIHN0YW5kYXJkIElSUSBjb250cm9sbGVyIGNhbiBiZSB1c2VkLgorICovCisKK3N0YXRpYyB2b2lkIGdycGNpMl9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaXJxaWR4OworCXN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiA9IGdycGNpMnByaXY7CisKKwlpcnFpZHggPSAodW5zaWduZWQgaW50KWRhdGEtPmNoaXBfZGF0YSAtIDE7CisJaWYgKGlycWlkeCA+IDMpIC8qIG9ubHkgbWFzayBQQ0kgaW50ZXJydXB0cyBoZXJlICovCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncnBjaTJfZGV2X2xvY2ssIGZsYWdzKTsKKwlSRUdTVE9SRShwcml2LT5yZWdzLT5jdHJsLCBSRUdMT0FEKHByaXYtPnJlZ3MtPmN0cmwpICYgfigxIDw8IGlycWlkeCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBncnBjaTJfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaXJxaWR4OworCXN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiA9IGdycGNpMnByaXY7CisKKwlpcnFpZHggPSAodW5zaWduZWQgaW50KWRhdGEtPmNoaXBfZGF0YSAtIDE7CisJaWYgKGlycWlkeCA+IDMpIC8qIG9ubHkgdW5tYXNrIFBDSSBpbnRlcnJ1cHRzIGhlcmUgKi8KKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworCVJFR1NUT1JFKHByaXYtPnJlZ3MtPmN0cmwsIFJFR0xPQUQocHJpdi0+cmVncy0+Y3RybCkgfCAoMSA8PCBpcnFpZHgpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncnBjaTJfZGV2X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBncnBjaTJfc3RhcnR1cF9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCWdycGNpMl91bm1hc2tfaXJxKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBncnBjaTJfc2h1dGRvd25faXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlncnBjaTJfbWFza19pcnEoZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ3JwY2kyX2lycSA9IHsKKwkubmFtZQkJPSAiZ3JwY2kyIiwKKwkuaXJxX3N0YXJ0dXAJPSBncnBjaTJfc3RhcnR1cF9pcnEsCisJLmlycV9zaHV0ZG93bgk9IGdycGNpMl9zaHV0ZG93bl9pcnEsCisJLmlycV9tYXNrCT0gZ3JwY2kyX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gZ3JwY2kyX3VubWFza19pcnEsCit9OworCisvKiBIYW5kbGUgb25lIG9yIG11bHRpcGxlIElSUXMgZnJvbSB0aGUgUENJIGNvcmUgKi8KK3N0YXRpYyB2b2lkIGdycGNpMl9wY2lfZmxvd19pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiA9IGdycGNpMnByaXY7CisJaW50IGksIGFjayA9IDA7CisJdW5zaWduZWQgaW50IGN0cmwsIHN0c19jYXAsIHBjaV9pbnRzOworCisJY3RybCA9IFJFR0xPQUQocHJpdi0+cmVncy0+Y3RybCk7CisJc3RzX2NhcCA9IFJFR0xPQUQocHJpdi0+cmVncy0+c3RzX2NhcCk7CisKKwkvKiBFcnJvciBJbnRlcnJ1cHQ/ICovCisJaWYgKHN0c19jYXAgJiBTVFNfRVJSX0lSUSkgeworCQlnZW5lcmljX2hhbmRsZV9pcnEocHJpdi0+dmlycV9lcnIpOworCQlhY2sgPSAxOworCX0KKworCS8qIFBDSSBJbnRlcnJ1cHQ/ICovCisJcGNpX2ludHMgPSAoKH5zdHNfY2FwKSA+PiBTVFNfSU5UU1RTX0JJVCkgJiBjdHJsICYgQ1RSTF9IT1NUSU5UOworCWlmIChwY2lfaW50cykgeworCQkvKiBDYWxsIHJlc3BlY3RpdmUgUENJIEludGVycnVwdCBoYW5kbGVyICovCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCWlmIChwY2lfaW50cyAmICgxIDw8IGkpKQorCQkJCWdlbmVyaWNfaGFuZGxlX2lycShwcml2LT5pcnFfbWFwW2ldKTsKKwkJfQorCQlhY2sgPSAxOworCX0KKworCS8qCisJICogRGVjb2RlIERNQSBJbnRlcnJ1cHQgb25seSB3aGVuIHNoYXJlZCB3aXRoIEVyciBhbmQgUENJIElOVFgjLCB3aGVuCisJICogdGhlIERNQSBpcyBhIHVuaXF1ZSBJUlEgdGhlIERNQSBpbnRlcnJ1cHRzIGRvZXNuJ3QgZW5kIHVwIGhlcmUsIHRoZXkKKwkgKiBnb2VzIGRpcmVjdGx5IHRvIERNQSBJU1IuCisJICovCisJaWYgKChwcml2LT5pcnFfbW9kZSA9PSAwKSAmJiAoc3RzX2NhcCAmIChTVFNfSURNQSB8IFNUU19JRE1BRVJSKSkpIHsKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKHByaXYtPnZpcnFfZG1hKTsKKwkJYWNrID0gMTsKKwl9CisKKwkvKgorCSAqIENhbGwgImZpcnN0IGxldmVsIiBJUlEgY2hpcCBlbmQtb2YtaXJxIGhhbmRsZXIuIEl0IHdpbGwgQUNLIExFT04gSVJRCisJICogQ29udHJvbGxlciwgdGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgSVJRIHNvdXJjZXMgaGF2ZSBiZWVuIGhhbmRsZWQgdG8KKwkgKiBhdm9pZCBkb3VibGUgSVJRIGdlbmVyYXRpb24KKwkgKi8KKwlpZiAoYWNrKQorCQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfZW9pKCZkZXNjLT5pcnFfZGF0YSk7Cit9CisKKy8qIENyZWF0ZSBhIHZpcnR1YWwgSVJRICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdycGNpMl9idWlsZF9kZXZpY2VfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHZpcnEgPSAwLCBwaWw7CisKKwlwaWwgPSAxIDw8IDg7CisJdmlycSA9IGlycV9hbGxvYyhpcnEsIHBpbCk7CisJaWYgKHZpcnEgPT0gMCkKKwkJZ290byBvdXQ7CisKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZSh2aXJxLCAmZ3JwY2kyX2lycSwgaGFuZGxlX3NpbXBsZV9pcnEsCisJCQkJICAgICAgInBjaWx2bCIpOworCWlycV9zZXRfY2hpcF9kYXRhKHZpcnEsICh2b2lkICopaXJxKTsKKworb3V0OgorCXJldHVybiB2aXJxOworfQorCit2b2lkIGdycGNpMl9od19pbml0KHN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdikKK3sKKwl1MzIgYWhiYWRyLCBwY2lhZHIsIGJhcl9zeiwgY2FwcHRyLCBpb19tYXAsIGRhdGE7CisJc3RydWN0IGdycGNpMl9yZWdzICpyZWdzID0gcHJpdi0+cmVnczsKKwlpbnQgaTsKKwlzdHJ1Y3QgZ3JwY2kyX2JhcmNmZyAqYmFyY2ZnID0gcHJpdi0+dGd0YmFyczsKKworCS8qIFJlc2V0IGFueSBlYXJsaWVyIHNldHVwICovCisJaWYgKHByaXYtPmRvX3Jlc2V0KSB7CisJCXByaW50ayhLRVJOX0lORk8gIkdSUENJMjogUmVzZXR0aW5nIFBDSSBidXNcbiIpOworCQlSRUdTVE9SRShyZWdzLT5jdHJsLCBDVFJMX1JFU0VUKTsKKwkJc3NsZWVwKDEpOyAvKiBXYWl0IGZvciBib2FyZHMgdG8gc2V0dGxlICovCisJfQorCVJFR1NUT1JFKHJlZ3MtPmN0cmwsIDApOworCVJFR1NUT1JFKHJlZ3MtPnN0c19jYXAsIH4wKTsgLyogQ2xlYXIgU3RhdHVzICovCisJUkVHU1RPUkUocmVncy0+ZG1hX2N0cmwsIDApOworCVJFR1NUT1JFKHJlZ3MtPmRtYV9iZGJhc2UsIDApOworCisJLyogVHJhbnNsYXRlIEkvTyBhY2Nlc3NlcyB0byAwLCBJL08gU3BhY2UgYWx3YXlzIEAgUENJIGxvdyA2NEtieXRlcyAqLworCVJFR1NUT1JFKHJlZ3MtPmlvX21hcCwgUkVHTE9BRChyZWdzLT5pb19tYXApICYgMHgwMDAwZmZmZik7CisKKwkvKiBzZXQgMToxIG1hcHBpbmcgYmV0d2VlbiBBSEIgLT4gUENJIG1lbW9yeSBzcGFjZSwgZm9yIGFsbCBNYXN0ZXJzCisJICogRWFjaCBBSEIgbWFzdGVyIGhhcyBpdCdzIG93biBtYXBwaW5nIHJlZ2lzdGVycy4gTWF4IDE2IEFIQiBtYXN0ZXJzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlSRUdTVE9SRShyZWdzLT5haGJtc3RfbWFwW2ldLCBwcml2LT5wY2lfYXJlYSk7CisKKwkvKiBHZXQgdGhlIEdSUENJMiBIb3N0IFBDSSBJRCAqLworCWdycGNpMl9jZmdfcjMyKHByaXYsIDAsIDAsIFBDSV9WRU5ET1JfSUQsICZwcml2LT5wY2lpZCk7CisKKwkvKiBHZXQgYWRkcmVzcyB0byBmaXJzdCAoYWx3YXlzIGRlZmluZWQpIGNhcGFiaWxpdHkgc3RydWN0dXJlICovCisJZ3JwY2kyX2NmZ19yOChwcml2LCAwLCAwLCBQQ0lfQ0FQQUJJTElUWV9MSVNULCAmY2FwcHRyKTsKKworCS8qIEVuYWJsZS9EaXNhYmxlIEJ5dGUgdHdpc3RpbmcgKi8KKwlncnBjaTJfY2ZnX3IzMihwcml2LCAwLCAwLCBjYXBwdHIrQ0FQOV9JT01BUF9PRlMsICZpb19tYXApOworCWlvX21hcCA9IChpb19tYXAgJiB+MHgxKSB8IChwcml2LT5idF9lbmFibGVkID8gMSA6IDApOworCWdycGNpMl9jZmdfdzMyKHByaXYsIDAsIDAsIGNhcHB0citDQVA5X0lPTUFQX09GUywgaW9fbWFwKTsKKworCS8qIFNldHVwIHRoZSBIb3N0J3MgUENJIFRhcmdldCBCQVJzIGZvciBvdGhlciBwZXJpcGhlcmFscyB0byBhY2Nlc3MsCisJICogYW5kIGRvIERNQSB0byB0aGUgaG9zdCdzIG1lbW9yeS4gVGhlIHRhcmdldCBCQVJzIGNhbiBiZSBzaXplZCBhbmQKKwkgKiBlbmFibGVkIGluZGl2aWR1YWxseS4KKwkgKgorCSAqIFVzZXIgbWF5IHNldCBjdXN0b20gdGFyZ2V0IEJBUnMsIGJ1dCBkZWZhdWx0IGlzOgorCSAqIFRoZSBmaXJzdCBCQVJzIGlzIHVzZWQgdG8gbWFwIGtlcm5lbCBsb3cgKERNQSBpcyBwYXJ0IG9mIG5vcm1hbAorCSAqIHJlZ2lvbiBvbiBzcGFyYyB3aGljaCBpcyBTUk1NVV9NQVhNRU0gYmlnKSBtYWluIG1lbW9yeSAxOjEgdG8gdGhlCisJICogUENJIGJ1cywgdGhlIG90aGVyIEJBUnMgYXJlIGRpc2FibGVkLiBXZSBhc3N1bWUgdGhhdCB0aGUgZmlyc3QgQkFSCisJICogaXMgYWx3YXlzIGF2YWlsYWJsZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWlmIChiYXJjZmdbaV0ucGNpYWRyICE9IH4wICYmIGJhcmNmZ1tpXS5haGJhZHIgIT0gfjApIHsKKwkJCS8qIFRhcmdldCBCQVJzIG11c3QgaGF2ZSB0aGUgcHJvcGVyIGFsaWdubWVudCAqLworCQkJYWhiYWRyID0gYmFyY2ZnW2ldLmFoYmFkcjsKKwkJCXBjaWFkciA9IGJhcmNmZ1tpXS5wY2lhZHI7CisJCQliYXJfc3ogPSAoKHBjaWFkciAtIDEpICYgfnBjaWFkcikgKyAxOworCQl9IGVsc2UgeworCQkJaWYgKGkgPT0gMCkgeworCQkJCS8qIE1hcCBtYWluIG1lbW9yeSAqLworCQkJCWJhcl9zeiA9IDB4ZjAwMDAwMDg7IC8qIDI1Nk1CIHByZWZldGNoYWJsZSAqLworCQkJCWFoYmFkciA9IDB4ZjAwMDAwMDAgJiAodTMyKV9fcGEoUEFHRV9BTElHTigKKwkJCQkJKHVuc2lnbmVkIGxvbmcpICZfZW5kKSk7CisJCQkJcGNpYWRyID0gYWhiYWRyOworCQkJfSBlbHNlIHsKKwkJCQliYXJfc3ogPSAwOworCQkJCWFoYmFkciA9IDA7CisJCQkJcGNpYWRyID0gMDsKKwkJCX0KKwkJfQorCQlncnBjaTJfY2ZnX3czMihwcml2LCAwLCAwLCBjYXBwdHIrQ0FQOV9CQVJTSVpFX09GUytpKjQsIGJhcl9zeik7CisJCWdycGNpMl9jZmdfdzMyKHByaXYsIDAsIDAsIFBDSV9CQVNFX0FERFJFU1NfMCtpKjQsIHBjaWFkcik7CisJCWdycGNpMl9jZmdfdzMyKHByaXYsIDAsIDAsIGNhcHB0citDQVA5X0JBUl9PRlMraSo0LCBhaGJhZHIpOworCQlwcmludGsoS0VSTl9JTkZPICIgICAgICAgIFRHVCBCQVJbJWRdOiAweCUwOHggKFBDSSktPiAweCUwOHhcbiIsCisJCQlpLCBwY2lhZHIsIGFoYmFkcik7CisJfQorCisJLyogc2V0IGFzIGJ1cyBtYXN0ZXIgYW5kIGVuYWJsZSBwY2kgbWVtb3J5IHJlc3BvbnNlcyAqLworCWdycGNpMl9jZmdfcjMyKHByaXYsIDAsIDAsIFBDSV9DT01NQU5ELCAmZGF0YSk7CisJZGF0YSB8PSAoUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSKTsKKwlncnBjaTJfY2ZnX3czMihwcml2LCAwLCAwLCBQQ0lfQ09NTUFORCwgZGF0YSk7CisKKwkvKiBFbmFibGUgRXJyb3IgcmVzcG9uZSAoQ1BVLVRSQVApIG9uIGlsbGVnYWwgbWVtb3J5IGFjY2Vzcy4gKi8KKwlSRUdTVE9SRShyZWdzLT5jdHJsLCBDVFJMX0VSIHwgQ1RSTF9QRSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBncnBjaTJfanVtcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXByaW50ayhLRVJOX0VSUiAiR1JQQ0kyOiBKdW1wIElSUSBoYXBwZW5lZFxuIik7CisJcmV0dXJuIElSUV9OT05FOworfQorCisvKiBIYW5kbGUgR1JQQ0kyIEVycm9yIEludGVycnVwdCAqLworc3RhdGljIGlycXJldHVybl90IGdycGNpMl9lcnJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYgPSBhcmc7CisJc3RydWN0IGdycGNpMl9yZWdzICpyZWdzID0gcHJpdi0+cmVnczsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJc3RhdHVzID0gUkVHTE9BRChyZWdzLT5zdHNfY2FwKTsKKwlpZiAoKHN0YXR1cyAmIFNUU19FUlJfSVJRKSA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoc3RhdHVzICYgU1RTX0lQQVJFUlIpCisJCXByaW50ayhLRVJOX0VSUiAiR1JQQ0kyOiBQYXJpdHkgRXJyb3JcbiIpOworCisJaWYgKHN0YXR1cyAmIFNUU19JVEdUQUJSVCkKKwkJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IFRhcmdldCBBYm9ydFxuIik7CisKKwlpZiAoc3RhdHVzICYgU1RTX0lNU1RBQlJUKQorCQlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogTWFzdGVyIEFib3J0XG4iKTsKKworCWlmIChzdGF0dXMgJiBTVFNfSVNZU0VSUikKKwkJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IFN5c3RlbSBFcnJvclxuIik7CisKKwkvKiBDbGVhciBoYW5kbGVkIElOVCBUWVBFIElSUXMgKi8KKwlSRUdTVE9SRShyZWdzLT5zdHNfY2FwLCBzdGF0dXMgJiBTVFNfRVJSX0lSUSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdycGNpMl9vZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgZ3JwY2kyX3JlZ3MgKnJlZ3M7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2OworCWludCBlcnIsIGksIGxlbjsKKwljb25zdCBpbnQgKnRtcDsKKwl1bnNpZ25lZCBpbnQgY2FwYWJpbGl0eTsKKworCWlmIChncnBjaTJwcml2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiR1JQQ0kyOiBvbmx5IG9uZSBHUlBDSTIgY29yZSBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAob2ZkZXYtPm51bV9yZXNvdXJjZXMgPCAzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiR1JQQ0kyOiBub3QgZW5vdWdoIEFQQi9BSEIgcmVzb3VyY2VzXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogRmluZCBEZXZpY2UgQWRkcmVzcyAqLworCXJlZ3MgPSBvZl9pb3JlbWFwKCZvZmRldi0+cmVzb3VyY2VbMF0sIDAsCisJCQkgIHJlc291cmNlX3NpemUoJm9mZGV2LT5yZXNvdXJjZVswXSksCisJCQkgICJncmxpYi1ncnBjaTIgcmVncyIpOworCWlmIChyZWdzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IGlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyoKKwkgKiBDaGVjayB0aGF0IHdlJ3JlIGluIEhvc3QgU2xvdCBhbmQgdGhhdCB3ZSBjYW4gYWN0IGFzIGEgSG9zdCBCcmlkZ2UKKwkgKiBhbmQgbm90IG9ubHkgYXMgdGFyZ2V0LgorCSAqLworCWNhcGFiaWxpdHkgPSBSRUdMT0FEKHJlZ3MtPnN0c19jYXApOworCWlmICgoY2FwYWJpbGl0eSAmIFNUU19IT1NUKSB8fCAhKGNhcGFiaWxpdHkgJiBTVFNfTVNUKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJHUlBDSTI6IG5vdCBpbiBob3N0IHN5c3RlbSBzbG90XG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnIxOworCX0KKworCXByaXYgPSBncnBjaTJwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdycGNpMl9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGdycGNpMnByaXYgPT0gTlVMTCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycjE7CisJfQorCW1lbXNldChncnBjaTJwcml2LCAwLCBzaXplb2YoKmdycGNpMnByaXYpKTsKKwlwcml2LT5yZWdzID0gcmVnczsKKwlwcml2LT5pcnEgPSBvZmRldi0+YXJjaGRhdGEuaXJxc1swXTsgLyogQkFTRSBJUlEgKi8KKwlwcml2LT5pcnFfbW9kZSA9IChjYXBhYmlsaXR5ICYgU1RTX0lSUU1PREUpID4+IFNUU19JUlFNT0RFX0JJVDsKKworCXByaW50ayhLRVJOX0lORk8gIkdSUENJMjogaG9zdCBmb3VuZCBhdCAlcCwgaXJxJWRcbiIsIHJlZ3MsIHByaXYtPmlycSk7CisKKwkvKiBCeXRlIHR3aXN0aW5nIHNob3VsZCBiZSBtYWRlIGNvbmZpZ3VyYWJsZSBmcm9tIGtlcm5lbCBjb21tYW5kIGxpbmUgKi8KKwlwcml2LT5idF9lbmFibGVkID0gMTsKKworCS8qIExldCB1c2VyIGRvIGN1c3RvbSBUYXJnZXQgQkFSIGFzc2lnbm1lbnQgKi8KKwl0bXAgPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPmRldi5vZl9ub2RlLCAiYmFyY2ZnIiwgJmxlbik7CisJaWYgKHRtcCAmJiAobGVuID09IDIqNCo2KSkKKwkJbWVtY3B5KHByaXYtPnRndGJhcnMsIHRtcCwgMio0KjYpOworCWVsc2UKKwkJbWVtc2V0KHByaXYtPnRndGJhcnMsIC0xLCAyKjQqNik7CisKKwkvKiBMaW1pdCBJUlEgdW5tYXNraW5nIGluIGlycV9tb2RlIDIgYW5kIDMgKi8KKwl0bXAgPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPmRldi5vZl9ub2RlLCAiaXJxX21hc2siLCAmbGVuKTsKKwlpZiAodG1wICYmIChsZW4gPT0gNCkpCisJCXByaXYtPmRvX3Jlc2V0ID0gKnRtcDsKKwllbHNlCisJCXByaXYtPmlycV9tYXNrID0gMHhmOworCisJLyogT3B0aW9uYWwgUENJIHJlc2V0LiBGb3JjZSBQQ0kgcmVzZXQgb24gc3RhcnR1cCAqLworCXRtcCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+ZGV2Lm9mX25vZGUsICJyZXNldCIsICZsZW4pOworCWlmICh0bXAgJiYgKGxlbiA9PSA0KSkKKwkJcHJpdi0+ZG9fcmVzZXQgPSAqdG1wOworCWVsc2UKKwkJcHJpdi0+ZG9fcmVzZXQgPSAwOworCisJLyogRmluZCBQQ0kgTWVtb3J5LCBJL08gYW5kIENvbmZpZ3VyYXRpb24gU3BhY2UgV2luZG93cyAqLworCXByaXYtPnBjaV9hcmVhID0gb2ZkZXYtPnJlc291cmNlWzFdLnN0YXJ0OworCXByaXYtPnBjaV9hcmVhX2VuZCA9IG9mZGV2LT5yZXNvdXJjZVsxXS5lbmQrMTsKKwlwcml2LT5wY2lfaW8gPSBvZmRldi0+cmVzb3VyY2VbMl0uc3RhcnQ7CisJcHJpdi0+cGNpX2NvbmYgPSBvZmRldi0+cmVzb3VyY2VbMl0uc3RhcnQgKyAweDEwMDAwOworCXByaXYtPnBjaV9jb25mX2VuZCA9IHByaXYtPnBjaV9jb25mICsgMHgxMDAwMDsKKwlwcml2LT5wY2lfaW9fdmEgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwKHByaXYtPnBjaV9pbywgMHgxMDAwMCk7CisJaWYgKCFwcml2LT5wY2lfaW9fdmEpIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnIyOworCX0KKworCXByaW50ayhLRVJOX0lORk8KKwkJIkdSUENJMjogTUVNT1JZIFNQQUNFIFsweCUwOGx4IC0gMHglMDhseF1cbiIKKwkJIiAgICAgICAgSS9PICAgIFNQQUNFIFsweCUwOGx4IC0gMHglMDhseF1cbiIKKwkJIiAgICAgICAgQ09ORklHIFNQQUNFIFsweCUwOGx4IC0gMHglMDhseF1cbiIsCisJCXByaXYtPnBjaV9hcmVhLCBwcml2LT5wY2lfYXJlYV9lbmQtMSwKKwkJcHJpdi0+cGNpX2lvLCBwcml2LT5wY2lfY29uZi0xLAorCQlwcml2LT5wY2lfY29uZiwgcHJpdi0+cGNpX2NvbmZfZW5kLTEpOworCisJLyoKKwkgKiBJL08gU3BhY2UgcmVzb3VyY2VzIGluIEkvTyBXaW5kb3cgbWFwcGVkIGludG8gVmlydHVhbCBBZHIgU3BhY2UKKwkgKiBXZSBuZXZlciB1c2UgbG93IDRLQiBiZWNhdXNlIHNvbWUgZGV2aWNlcyBzZWVtIGhhdmUgcHJvYmxlbXMgdXNpbmcKKwkgKiBhZGRyZXNzIDAuCisJICovCisJbWVtc2V0KCZwcml2LT5pbmZvLmlvX3NwYWNlLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisJcHJpdi0+aW5mby5pb19zcGFjZS5uYW1lID0gIkdSUENJMiBQQ0kgSS9PIFNwYWNlIjsKKwlwcml2LT5pbmZvLmlvX3NwYWNlLnN0YXJ0ID0gcHJpdi0+cGNpX2lvX3ZhICsgMHgxMDAwOworCXByaXYtPmluZm8uaW9fc3BhY2UuZW5kID0gcHJpdi0+cGNpX2lvX3ZhICsgMHgxMDAwMCAtIDE7CisJcHJpdi0+aW5mby5pb19zcGFjZS5mbGFncyA9IElPUkVTT1VSQ0VfSU87CisKKwkvKgorCSAqIEdSUENJMiBoYXMgbm8gcHJlZmV0Y2hhYmxlIG1lbW9yeSwgbWFwIGV2ZXJ5dGhpbmcgYXMKKwkgKiBub24tcHJlZmV0Y2hhYmxlIG1lbW9yeQorCSAqLworCW1lbXNldCgmcHJpdi0+aW5mby5tZW1fc3BhY2UsIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKKwlwcml2LT5pbmZvLm1lbV9zcGFjZS5uYW1lID0gIkdSUENJMiBQQ0kgTUVNIFNwYWNlIjsKKwlwcml2LT5pbmZvLm1lbV9zcGFjZS5zdGFydCA9IHByaXYtPnBjaV9hcmVhOworCXByaXYtPmluZm8ubWVtX3NwYWNlLmVuZCA9IHByaXYtPnBjaV9hcmVhX2VuZCAtIDE7CisJcHJpdi0+aW5mby5tZW1fc3BhY2UuZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnByaXYtPmluZm8ubWVtX3NwYWNlKSA8IDApCisJCWdvdG8gZXJyMzsKKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcHJpdi0+aW5mby5pb19zcGFjZSkgPCAwKQorCQlnb3RvIGVycjQ7CisKKwlncnBjaTJfaHdfaW5pdChwcml2KTsKKworCS8qCisJICogR2V0IFBDSSBJbnRlcnJ1cHQgdG8gU3lzdGVtIElSUSBtYXBwaW5nIGFuZCBzZXR1cCBJUlEgaGFuZGxpbmcKKwkgKiBFcnJvciBJUlEgYWx3YXlzIG9uIFBDSSBJTlRBLgorCSAqLworCWlmIChwcml2LT5pcnFfbW9kZSA8IDIpIHsKKwkJLyogQWxsIFBDSSBpbnRlcnJ1cHRzIGFyZSBzaGFyZWQgdXNpbmcgdGhlIHNhbWUgc3lzdGVtIElSUSAqLworCQlsZW9uX3VwZGF0ZV92aXJxX2hhbmRsaW5nKHByaXYtPmlycSwgZ3JwY2kyX3BjaV9mbG93X2lycSwKKwkJCQkJICJwY2lsdmwiLCAwKTsKKworCQlwcml2LT5pcnFfbWFwWzBdID0gZ3JwY2kyX2J1aWxkX2RldmljZV9pcnEoMSk7CisJCXByaXYtPmlycV9tYXBbMV0gPSBncnBjaTJfYnVpbGRfZGV2aWNlX2lycSgyKTsKKwkJcHJpdi0+aXJxX21hcFsyXSA9IGdycGNpMl9idWlsZF9kZXZpY2VfaXJxKDMpOworCQlwcml2LT5pcnFfbWFwWzNdID0gZ3JwY2kyX2J1aWxkX2RldmljZV9pcnEoNCk7CisKKwkJcHJpdi0+dmlycV9lcnIgPSBncnBjaTJfYnVpbGRfZGV2aWNlX2lycSg1KTsKKwkJaWYgKHByaXYtPmlycV9tb2RlICYgMSkKKwkJCXByaXYtPnZpcnFfZG1hID0gb2ZkZXYtPmFyY2hkYXRhLmlycXNbMV07CisJCWVsc2UKKwkJCXByaXYtPnZpcnFfZG1hID0gZ3JwY2kyX2J1aWxkX2RldmljZV9pcnEoNik7CisKKwkJLyogRW5hYmxlIElSUXMgb24gTEVPTiBJUlEgY29udHJvbGxlciAqLworCQllcnIgPSByZXF1ZXN0X2lycShwcml2LT5pcnEsIGdycGNpMl9qdW1wX2ludGVycnVwdCwgMCwKKwkJCQkJIkdSUENJMl9KVU1QIiwgcHJpdik7CisJCWlmIChlcnIpCisJCQlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogRVJSIElSUSByZXF1ZXN0IGZhaWxlZFxuIik7CisJfSBlbHNlIHsKKwkJLyogQWxsIFBDSSBpbnRlcnJ1cHRzIGhhdmUgYW4gdW5pcXVlIElSUSBpbnRlcnJ1cHQgKi8KKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJLyogTWFrZSBMRU9OIElSUSBsYXllciBoYW5kbGUgbGV2ZWwgSVJRIGJ5IGFja2luZyAqLworCQkJbGVvbl91cGRhdGVfdmlycV9oYW5kbGluZyhvZmRldi0+YXJjaGRhdGEuaXJxc1tpXSwKKwkJCQkJCSBoYW5kbGVfZmFzdGVvaV9pcnEsICJwY2lsdmwiLAorCQkJCQkJIDEpOworCQkJcHJpdi0+aXJxX21hcFtpXSA9IG9mZGV2LT5hcmNoZGF0YS5pcnFzW2ldOworCQl9CisJCXByaXYtPnZpcnFfZXJyID0gcHJpdi0+aXJxX21hcFswXTsKKwkJaWYgKHByaXYtPmlycV9tb2RlICYgMSkKKwkJCXByaXYtPnZpcnFfZG1hID0gb2ZkZXYtPmFyY2hkYXRhLmlycXNbNF07CisJCWVsc2UKKwkJCXByaXYtPnZpcnFfZG1hID0gcHJpdi0+aXJxX21hcFswXTsKKworCQkvKiBVbm1hc2sgYWxsIFBDSSBpbnRlcnJ1cHRzLCByZXF1ZXN0X2lycSB3aWxsIG5vdCBkbyB0aGF0ICovCisJCVJFR1NUT1JFKHJlZ3MtPmN0cmwsIFJFR0xPQUQocmVncy0+Y3RybCl8KHByaXYtPmlycV9tYXNrJjB4ZikpOworCX0KKworCS8qIFNldHVwIElSUSBoYW5kbGVyIGZvciBub24tY29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3MgZXJyb3JzICovCisJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+dmlycV9lcnIsIGdycGNpMl9lcnJfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCQkiR1JQQ0kyX0VSUiIsIHByaXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkdSUENJMjogRVJSIFZJUlEgcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycjU7CisJfQorCisJLyoKKwkgKiBFbmFibGUgRXJyb3IgSW50ZXJydXB0cy4gUENJIGludGVycnVwdHMgYXJlIHVubWFza2VkIG9uY2UgcmVxdWVzdF9pcnEKKwkgKiBpcyBjYWxsZWQgYnkgdGhlIFBDSSBEZXZpY2UgZHJpdmVycworCSAqLworCVJFR1NUT1JFKHJlZ3MtPmN0cmwsIFJFR0xPQUQocmVncy0+Y3RybCkgfCBDVFJMX0VJIHwgQ1RSTF9TSSk7CisKKwkvKiBJbml0IGNvbW1vbiBsYXllciBhbmQgc2NhbiBidXNlcyAqLworCXByaXYtPmluZm8ub3BzID0gJmdycGNpMl9vcHM7CisJcHJpdi0+aW5mby5tYXBfaXJxID0gZ3JwY2kyX21hcF9pcnE7CisJbGVvbl9wY2lfaW5pdChvZmRldiwgJnByaXYtPmluZm8pOworCisJcmV0dXJuIDA7CisKK2VycjU6CisJcmVsZWFzZV9yZXNvdXJjZSgmcHJpdi0+aW5mby5pb19zcGFjZSk7CitlcnI0OgorCXJlbGVhc2VfcmVzb3VyY2UoJnByaXYtPmluZm8ubWVtX3NwYWNlKTsKK2VycjM6CisJZXJyID0gLUVOT01FTTsKKwlpb3VubWFwKCh2b2lkICopcHJpdi0+cGNpX2lvX3ZhKTsKK2VycjI6CisJa2ZyZWUocHJpdik7CitlcnIxOgorCW9mX2lvdW5tYXAoJm9mZGV2LT5yZXNvdXJjZVswXSwgcmVncywKKwkJcmVzb3VyY2Vfc2l6ZSgmb2ZkZXYtPnJlc291cmNlWzBdKSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZ3JwY2kyX29mX21hdGNoW10gPSB7CisJeworCSAubmFtZSA9ICJHQUlTTEVSX0dSUENJMiIsCisJIH0sCisJeworCSAubmFtZSA9ICIwMV8wN2MiLAorCSB9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ3JwY2kyX29mX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJncnBjaTIiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gZ3JwY2kyX29mX21hdGNoLAorCX0sCisJLnByb2JlID0gZ3JwY2kyX29mX3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ3JwY2kyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZncnBjaTJfb2ZfZHJpdmVyKTsKK30KKworc3Vic3lzX2luaXRjYWxsKGdycGNpMl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbW9kdWxlLmMKaW5kZXggOGQzNDhjNC4uOTliYTViYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbW9kdWxlLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCQkJICAgICAgIG1lLT5uYW1lLAogCQkJICAgICAgIChpbnQpIChFTEZfUl9UWVBFKHJlbFtpXS5yX2luZm8pICYgMHhmZikpOwogCQkJcmV0dXJuIC1FTk9FWEVDOwotCQl9OworCQl9CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2NvbW1vbi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2NvbW1vbi5jCmluZGV4IDZlMzg3NGIuLmE2ODk1OTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9jb21tb24uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfY29tbW9uLmMKQEAgLTI4MSw3ICsyODEsNyBAQAogCWNhc2UgNDoKIAkJKnZhbHVlID0gcmV0ICYgMHhmZmZmZmZmZjsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAogCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CkBAIC00NTYsNyArNDU2LDcgQEAKIAogCQlkZWZhdWx0OgogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAl9CiAKIAlpZiAoIXNhd19pbyB8fCAhc2F3X21lbSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NjaGl6by5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NjaGl6by5jCmluZGV4IDI4M2ZiYzMuLmYwMzBiMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCQlkZWZhdWx0OgogCQkJdHlwZV9zdHJpbmcgPSAiRUNDIEVycm9yIjsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJCXByaW50aygiJXM6IElPTU1VIEVycm9yLCB0eXBlWyVzXVxuIiwKIAkJICAgICAgIHBibS0+bmFtZSwgdHlwZV9zdHJpbmcpOwogCkBAIC0zMTksNyArMzE5LDcgQEAKIAkJCWRlZmF1bHQ6CiAJCQkJdHlwZV9zdHJpbmcgPSAiRUNDIEVycm9yIjsKIAkJCQlicmVhazsKLQkJCX07CisJCQl9CiAJCQlwcmludGsoIiVzOiBJT01NVSBUQUcoJWQpW2Vycm9yKCVzKSBjdHgoJXgpIHdyKCVkKSBzdHIoJWQpICIKIAkJCSAgICAgICAic3ooJWRLKSB2cGcoJTA4bHgpXVxuIiwKIAkJCSAgICAgICBwYm0tPm5hbWUsIGksIHR5cGVfc3RyaW5nLApAQCAtMTMyOCw3ICsxMzI4LDcgQEAKIAlkZWZhdWx0OgogCQljaGlwc2V0X25hbWUgPSAiU0NISVpPIjsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAkvKiBGb3IgU0NISVpPLCB0aHJlZSBPQlAgcmVnczoKIAkgKiAxKSBQQk0gY29udHJvbGxlciByZWdzCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2lycXRyYW5zLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2lycXRyYW5zLmMKaW5kZXggNTcwYjk4Zi4uNDBlNDkzNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9pcnF0cmFucy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21faXJxdHJhbnMuYwpAQCAtNjk0LDcgKzY5NCw3IEBACiAJCWNhc2UgMzoKIAkJCWljbHIgPSByZWdfYmFzZSArIFNZU0lPX0lDTFJfU0xPVDM7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCiAJCWljbHIgKz0gKCh1bnNpZ25lZCBsb25nKXNidXNfbGV2ZWwgLSAxVUwpICogOFVMOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BzeWNob19jb21tb24uYyBiL2FyY2gvc3BhcmMva2VybmVsL3BzeWNob19jb21tb24uYwppbmRleCBmZTJhZjY2Li44ZGI0OGU4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wc3ljaG9fY29tbW9uLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIAkJZGVmYXVsdDoKIAkJCXR5cGVfc3RyID0gIkVDQyBFcnJvciI7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJT01NVSBFcnJvciwgdHlwZVslc11cbiIsCiAJCSAgICAgICBwYm0tPm5hbWUsIHR5cGVfc3RyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2J1cy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2J1cy5jCmluZGV4IDJjYTMyZDEuLmExNjFiOWM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zYnVzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2J1cy5jCkBAIC05Nyw3ICs5Nyw3IEBACiAKIAlkZWZhdWx0OgogCQlyZXR1cm47Ci0JfTsKKwl9CiAKIAl2YWwgPSB1cGFfcmVhZHEoY2ZnX3JlZyk7CiAJaWYgKHZhbCAmICgxVUwgPDwgMTRVTCkpIHsKQEAgLTI0NCw3ICsyNDQsNyBAQAogCQljYXNlIDM6CiAJCQlpY2xyID0gcmVnX2Jhc2UgKyBTWVNJT19JQ0xSX1NMT1QzOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAogCQlpY2xyICs9ICgodW5zaWduZWQgbG9uZylzYnVzX2xldmVsIC0gMVVMKSAqIDhVTDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCAzMjQ5ZDNmLi5kMjZlMWY2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzMyLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCWRlZmF1bHQ6CiAJCXByaW50aygiVU5LTk9XTiFcbiIpOwogCQlicmVhazsKLQl9OworCX0KIAogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9jb247CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCBmM2I2ODUwLi5jNGRkMDk5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzY0LmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCQlkZWZhdWx0OgogCQkJcHJvbV9wcmludGYoIlVua25vd24gY3B1IHR5cGUsIGhhbHRpbmcuXG4iKTsKIAkJCXByb21faGFsdCgpOwotCQl9OworCQl9CiAKIAkJKih1bnNpZ25lZCBpbnQgKikgKGFkZHIgKyAgMCkgPSBpbnNuc1swXTsKIAkJd21iKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCmluZGV4IGQ1YjM5NTguLjIxYjEyNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAkJcHJpbnRrKCJVTktOT1dOIVxuIik7CiAJCUJVRygpOwogCQlicmVhazsKLQl9OworCX0KIH0KIAogdm9pZCBjcHVfcGFuaWModm9pZCkKQEAgLTM3NCw3ICszNzQsNyBAQAogCQlwcmludGsoIlVOS05PV04hXG4iKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwotCX07CisJfQogfQogCiAvKiBTZXQgdGhpcyB1cCBlYXJseSBzbyB0aGF0IHRoaW5ncyBsaWtlIHRoZSBzY2hlZHVsZXIgY2FuIGluaXQKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCQlwcmludGsoIlVOS05PV04hXG4iKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwotCX07CisJfQogCiAJaWYgKCFyZXQpIHsKIAkJY3B1bWFza19zZXRfY3B1KGNwdSwgJnNtcF9jb21tZW5jZWRfbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCmluZGV4IGE5ZWE2MGUuLjFkMTNjNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCkBAIC0xMDMsMTAgKzEwMyw5IEBACiAKIAlzYmlsID0gKHNidXNsIDw8IDIpOwogCS8qIExvb3AgZm9yIGVhY2ggcGVuZGluZyBTQkkgKi8KLQlmb3IgKHNiaW5vID0gMDsgYnVzX21hc2s7IHNiaW5vKyspIHsKKwlmb3IgKHNiaW5vID0gMDsgYnVzX21hc2s7IHNiaW5vKyssIGJ1c19tYXNrID4+PSAxKSB7CiAJCXVuc2lnbmVkIGludCBpZHgsIG1hc2s7CiAKLQkJYnVzX21hc2sgPj49IDE7CiAJCWlmICghKGJ1c19tYXNrICYgMSkpCiAJCQljb250aW51ZTsKIAkJLyogWFhYIFRoaXMgc2VlbXMgdG8gQUNLIHRoZSBpcnEgdHdpY2UuICBhY3F1aXJlX3NiaSgpCkBAIC0xMTgsMTkgKzExNywxNiBAQAogCQltYXNrICY9ICgweGYgPDwgc2JpbCk7CiAKIAkJLyogTG9vcCBmb3IgZWFjaCBwZW5kaW5nIFNCSSBzbG90ICovCi0JCWlkeCA9IDA7CiAJCXNsb3QgPSAoMSA8PCBzYmlsKTsKLQkJd2hpbGUgKG1hc2sgIT0gMCkgeworCQlmb3IgKGlkeCA9IDA7IG1hc2sgIT0gMDsgaWR4KyssIHNsb3QgPDw9IDEpIHsKIAkJCXVuc2lnbmVkIGludCBwaWw7CiAJCQlzdHJ1Y3QgaXJxX2J1Y2tldCAqcDsKIAotCQkJaWR4Kys7Ci0JCQlzbG90IDw8PSAxOwogCQkJaWYgKCEobWFzayAmIHNsb3QpKQogCQkJCWNvbnRpbnVlOwogCiAJCQltYXNrICY9IH5zbG90OwotCQkJcGlsID0gc3VuNGRfZW5jb2RlX2lycShzYmlubywgc2JpbCwgaWR4KTsKKwkJCXBpbCA9IHN1bjRkX2VuY29kZV9pcnEoc2Jpbm8sIHNidXNsLCBpZHgpOwogCiAJCQlwID0gaXJxX21hcFtwaWxdOwogCQkJd2hpbGUgKHApIHsKQEAgLTIxOCwxMCArMjE0LDEwIEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN1bjRkX2ltc2tfbG9jaywgZmxhZ3MpOwotCWNjX3NldF9pbXNrX290aGVyKGNwdWlkLCBjY19nZXRfaW1za19vdGhlcihjcHVpZCkgfCB+KDEgPDwgcmVhbF9pcnEpKTsKKwljY19zZXRfaW1za19vdGhlcihjcHVpZCwgY2NfZ2V0X2ltc2tfb3RoZXIoY3B1aWQpICYgfigxIDw8IHJlYWxfaXJxKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3VuNGRfaW1za19sb2NrLCBmbGFncyk7CiAjZWxzZQotCWNjX3NldF9pbXNrKGNjX2dldF9pbXNrKCkgfCB+KDEgPDwgcmVhbF9pcnEpKTsKKwljY19zZXRfaW1zayhjY19nZXRfaW1zaygpICYgfigxIDw8IHJlYWxfaXJxKSk7CiAjZW5kaWYKIH0KIApAQCAtMjk5LDU4ICsyOTUsMTkgQEAKIAl9CiB9CiAKLXVuc2lnbmVkIGludCBzdW40ZF9idWlsZF9kZXZpY2VfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlYWxfaXJxKQordW5zaWduZWQgaW50IF9zdW40ZF9idWlsZF9kZXZpY2VfaXJxKHVuc2lnbmVkIGludCByZWFsX2lycSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBib2FyZCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPmRldi5vZl9ub2RlOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaW9fdW5pdCwgKnNiaSA9IGRwLT5wYXJlbnQ7Ci0JY29uc3Qgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpyZWdzOwogCXN0cnVjdCBzdW40ZF9oYW5kbGVyX2RhdGEgKmhhbmRsZXJfZGF0YTsKLQl1bnNpZ25lZCBpbnQgcGlsOwogCXVuc2lnbmVkIGludCBpcnE7Ci0JaW50IGJvYXJkLCBzbG90OwotCWludCBzYnVzbDsKLQotCWlycSA9IDA7Ci0Jd2hpbGUgKHNiaSkgewotCQlpZiAoIXN0cmNtcChzYmktPm5hbWUsICJzYmkiKSkKLQkJCWJyZWFrOwotCi0JCXNiaSA9IHNiaS0+cGFyZW50OwotCX0KLQlpZiAoIXNiaSkKLQkJZ290byBlcnJfb3V0OwotCi0JcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCWlmICghcmVncykKLQkJZ290byBlcnJfb3V0OwotCi0Jc2xvdCA9IHJlZ3MtPndoaWNoX2lvOwotCi0JLyoKLQkgKiAgSWYgU0JJJ3MgcGFyZW50IGlzIG5vdCBpby11bml0IG9yIHRoZSBpby11bml0IGxhY2tzCi0JICogYSAiYm9hcmQjIiBwcm9wZXJ0eSwgc29tZXRoaW5nIGlzIHZlcnkgd3JvbmcuCi0JICovCi0JaWYgKCFzYmktPnBhcmVudCB8fCBzdHJjbXAoc2JpLT5wYXJlbnQtPm5hbWUsICJpby11bml0IikpIHsKLQkJcHJpbnRrKCIlczogRXJyb3IsIHBhcmVudCBpcyBub3QgaW8tdW5pdC5cbiIsIHNiaS0+ZnVsbF9uYW1lKTsKLQkJZ290byBlcnJfb3V0OwotCX0KLQlpb191bml0ID0gc2JpLT5wYXJlbnQ7Ci0JYm9hcmQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoaW9fdW5pdCwgImJvYXJkIyIsIC0xKTsKLQlpZiAoYm9hcmQgPT0gLTEpIHsKLQkJcHJpbnRrKCIlczogRXJyb3IsIGxhY2tzIGJvYXJkIyBwcm9wZXJ0eS5cbiIsIGlvX3VuaXQtPmZ1bGxfbmFtZSk7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0KLQlzYnVzbCA9IHBpbF90b19zYnVzW3JlYWxfaXJxXTsKLQlpZiAoc2J1c2wpCi0JCXBpbCA9IHN1bjRkX2VuY29kZV9pcnEoYm9hcmQsIHNidXNsLCBzbG90KTsKLQllbHNlCi0JCXBpbCA9IHJlYWxfaXJxOwogCiAJaXJxID0gaXJxX2FsbG9jKHJlYWxfaXJxLCBwaWwpOwotCWlmIChpcnEgPT0gMCkKKwlpZiAoaXJxID09IDApIHsKKwkJcHJvbV9wcmludGYoIklSUTogYWxsb2NhdGUgZm9yICVkICVkICVkIGZhaWxlZFxuIiwKKwkJCXJlYWxfaXJxLCBwaWwsIGJvYXJkKTsKIAkJZ290byBlcnJfb3V0OworCX0KIAogCWhhbmRsZXJfZGF0YSA9IGlycV9nZXRfaGFuZGxlcl9kYXRhKGlycSk7CiAJaWYgKHVubGlrZWx5KGhhbmRsZXJfZGF0YSkpCkBAIC0zNjgsOSArMzI1LDgwIEBACiAJaXJxX3NldF9oYW5kbGVyX2RhdGEoaXJxLCBoYW5kbGVyX2RhdGEpOwogCiBlcnJfb3V0OgotCXJldHVybiByZWFsX2lycTsKKwlyZXR1cm4gaXJxOwogfQogCisKKwordW5zaWduZWQgaW50IHN1bjRkX2J1aWxkX2RldmljZV9pcnEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVhbF9pcnEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmJvYXJkX3BhcmVudCwgKmJ1cyA9IGRwLT5wYXJlbnQ7CisJY2hhciAqYnVzX2Nvbm5lY3Rpb247CisJY29uc3Qgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpyZWdzOworCXVuc2lnbmVkIGludCBwaWw7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgYm9hcmQsIHNsb3Q7CisJaW50IHNidXNsOworCisJaXJxID0gcmVhbF9pcnE7CisJd2hpbGUgKGJ1cykgeworCQlpZiAoIXN0cmNtcChidXMtPm5hbWUsICJzYmkiKSkgeworCQkJYnVzX2Nvbm5lY3Rpb24gPSAiaW8tdW5pdCI7CisJCQlicmVhazsKKwkJfQorCisJCWlmICghc3RyY21wKGJ1cy0+bmFtZSwgImJvb3RidXMiKSkgeworCQkJYnVzX2Nvbm5lY3Rpb24gPSAiY3B1LXVuaXQiOworCQkJYnJlYWs7CisJCX0KKworCQlidXMgPSBidXMtPnBhcmVudDsKKwl9CisJaWYgKCFidXMpCisJCWdvdG8gZXJyX291dDsKKworCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpZiAoIXJlZ3MpCisJCWdvdG8gZXJyX291dDsKKworCXNsb3QgPSByZWdzLT53aGljaF9pbzsKKworCS8qCisJICogSWYgQnVzIG5vZGVzIHBhcmVudCBpcyBub3QgaW8tdW5pdC9jcHUtdW5pdCBvciB0aGUgaW8tdW5pdC9jcHUtdW5pdAorCSAqIGxhY2tzIGEgImJvYXJkIyIgcHJvcGVydHksIHNvbWV0aGluZyBpcyB2ZXJ5IHdyb25nLgorCSAqLworCWlmICghYnVzLT5wYXJlbnQgfHwgc3RyY21wKGJ1cy0+cGFyZW50LT5uYW1lLCBidXNfY29ubmVjdGlvbikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IsIHBhcmVudCBpcyBub3QgJXMuXG4iLAorCQkJYnVzLT5mdWxsX25hbWUsIGJ1c19jb25uZWN0aW9uKTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlib2FyZF9wYXJlbnQgPSBidXMtPnBhcmVudDsKKwlib2FyZCA9IG9mX2dldGludHByb3BfZGVmYXVsdChib2FyZF9wYXJlbnQsICJib2FyZCMiLCAtMSk7CisJaWYgKGJvYXJkID09IC0xKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yLCBsYWNrcyBib2FyZCMgcHJvcGVydHkuXG4iLAorCQkJYm9hcmRfcGFyZW50LT5mdWxsX25hbWUpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJc2J1c2wgPSBwaWxfdG9fc2J1c1tyZWFsX2lycV07CisJaWYgKHNidXNsKQorCQlwaWwgPSBzdW40ZF9lbmNvZGVfaXJxKGJvYXJkLCBzYnVzbCwgc2xvdCk7CisJZWxzZQorCQlwaWwgPSByZWFsX2lycTsKKworCWlycSA9IF9zdW40ZF9idWlsZF9kZXZpY2VfaXJxKHJlYWxfaXJxLCBwaWwsIGJvYXJkKTsKK2Vycl9vdXQ6CisJcmV0dXJuIGlycTsKK30KKwordW5zaWduZWQgaW50IHN1bjRkX2J1aWxkX3RpbWVyX2lycSh1bnNpZ25lZCBpbnQgYm9hcmQsIHVuc2lnbmVkIGludCByZWFsX2lycSkKK3sKKwlyZXR1cm4gX3N1bjRkX2J1aWxkX2RldmljZV9pcnEocmVhbF9pcnEsIHJlYWxfaXJxLCBib2FyZCk7Cit9CisKKwogc3RhdGljIHZvaWQgX19pbml0IHN1bjRkX2ZpeHVwX3RyYXBfdGFibGUodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfU01QCkBAIC00MDIsNiArNDMwLDcgQEAKIAl1bnNpZ25lZCBpbnQgaXJxOwogCWNvbnN0IHUzMiAqcmVnOwogCWludCBlcnI7CisJaW50IGJvYXJkOwogCiAJZHAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiY3B1LXVuaXQiKTsKIAlpZiAoIWRwKSB7CkBAIC00MTQsMTIgKzQ0MywxOSBAQAogCSAqIGJvb3RidXMuCiAJICovCiAJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0Jb2Zfbm9kZV9wdXQoZHApOwogCWlmICghcmVnKSB7CiAJCXByb21fcHJpbnRmKCJzdW40ZF9pbml0X3RpbWVyczogTm8gcmVnIHByb3BlcnR5XG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQogCisJYm9hcmQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJib2FyZCMiLCAtMSk7CisJaWYgKGJvYXJkID09IC0xKSB7CisJCXByb21fcHJpbnRmKCJzdW40ZF9pbml0X3RpbWVyczogTm8gYm9hcmQjIHByb3BlcnR5IG9uIGNwdS11bml0XG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJb2Zfbm9kZV9wdXQoZHApOworCiAJcmVzLnN0YXJ0ID0gcmVnWzFdOwogCXJlcy5lbmQgPSByZWdbMl0gLSAxOwogCXJlcy5mbGFncyA9IHJlZ1swXSAmIDB4ZmY7CkBAIC00MzQsNyArNDcwLDcgQEAKIAogCW1hc3Rlcl9sMTBfY291bnRlciA9ICZzdW40ZF90aW1lcnMtPmwxMF9jdXJfY291bnQ7CiAKLQlpcnEgPSBzdW40ZF9idWlsZF9kZXZpY2VfaXJxKE5VTEwsIFNVTjREX1RJTUVSX0lSUSk7CisJaXJxID0gc3VuNGRfYnVpbGRfdGltZXJfaXJxKGJvYXJkLCBTVU40RF9USU1FUl9JUlEpOwogCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgY291bnRlcl9mbiwgSVJRRl9USU1FUiwgInRpbWVyIiwgTlVMTCk7CiAJaWYgKGVycikgewogCQlwcm9tX3ByaW50Zigic3VuNGRfaW5pdF90aW1lcnM6IHJlcXVlc3RfaXJxKCkgZmFpbGVkIHdpdGggJWRcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmMzMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjMzIuYwppbmRleCA2ZGIxOGM2Li4xNzBjZDhlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmMzMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYzMyLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9TWVM7Ci0JfTsKKwl9CiAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmMKaW5kZXggOTYwODJkMy4uOTA4YjQ3YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCQlkZWZhdWx0OgogCQkJZXJyID0gLUVOT1NZUzsKIAkJCWdvdG8gb3V0OwotCQl9OworCQl9CiAJfQogCWlmIChjYWxsIDw9IE1TR0NUTCkgewogCQlzd2l0Y2ggKGNhbGwpIHsKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCQlkZWZhdWx0OgogCQkJZXJyID0gLUVOT1NZUzsKIAkJCWdvdG8gb3V0OwotCQl9OworCQl9CiAJfQogCWlmIChjYWxsIDw9IFNITUNUTCkgewogCQlzd2l0Y2ggKGNhbGwpIHsKQEAgLTUwNyw3ICs1MDcsNyBAQAogCQlkZWZhdWx0OgogCQkJZXJyID0gLUVOT1NZUzsKIAkJCWdvdG8gb3V0OwotCQl9OworCQl9CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVOT1NZUzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKaW5kZXggMmI4ZDU0Yi4uMWRiNmIxOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYwpAQCAtNzA4LDcgKzcwOCw3IEBACiAJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CiAJCVdBUk5fT04oMSk7CiAJCWJyZWFrOwotCX07CisJfQogfQogCiBzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBzcGFyYzY0X2Nsb2NrZXZlbnQgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90cmFwc182NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfNjQuYwppbmRleCAxZWQ1NDdiLi4wY2JkYWE0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90cmFwc182NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzXzY0LmMKQEAgLTE4MDQsNyArMTgwNCw3IEBACiAJCXJldHVybiAid2FybmluZyByZXN1bWFibGUiOwogCWRlZmF1bHQ6CiAJCXJldHVybiAidW5rbm93biI7Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHN1bjR2X2xvZ19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHN1bjR2X2Vycm9yX2VudHJ5ICplbnQsIGludCBjcHUsIGNvbnN0IGNoYXIgKnBmeCwgYXRvbWljX3QgKm9jbnQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZF82NC5jCmluZGV4IGM3NTJjNGMuLmIyYjAxOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZF82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZF82NC5jCkBAIC0yMTEsNyArMjExLDcgQEAKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAl9CiAJcmV0dXJuIF9fZG9faW50X3N0b3JlKGRzdF9hZGRyLCBzaXplLCBzcmNfdmFsLCBhc2kpOwogfQpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCWNhc2UgQVNJX1NORkw6CiAJCQlhc2kgJj0gfjB4MDg7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCQlzd2l0Y2ggKGRpcikgewogCQljYXNlIGxvYWQ6CiAJCQlyZWdfYWRkciA9IGZldGNoX3JlZ19hZGRyKCgoaW5zbj4+MjUpJjB4MWYpLCByZWdzKTsKQEAgLTM1MSw3ICszNTEsNyBAQAogCQkJCWRlZmF1bHQ6CiAJCQkJCUJVRygpOwogCQkJCQlicmVhazsKLQkJCQl9OworCQkJCX0KIAkJCQkqcmVnX2FkZHIgPSB2YWxfaW47CiAJCQl9CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3VzMmVfY3B1ZnJlcS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdXMyZV9jcHVmcmVxLmMKaW5kZXggNTMxZDU0Zi4uNDg5ZmMxNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdXMyZV9jcHVmcmVxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdXMyZV9jcHVmcmVxLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiAJZGVmYXVsdDoKIAkJQlVHKCk7Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZGV4X3RvX2Rpdmlzb3IodW5zaWduZWQgaW50IGluZGV4KQpAQCAtMTk5LDcgKzE5OSw3IEBACiAKIAlkZWZhdWx0OgogCQlCVUcoKTsKLQl9OworCX0KIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZXN0YXJfdG9fZGl2aXNvcih1bnNpZ25lZCBsb25nIGVzdGFyKQpAQCAtMjI0LDcgKzIyNCw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwotCX07CisJfQogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3VzM19jcHVmcmVxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC91czNfY3B1ZnJlcS5jCmluZGV4IDlhOGNlYjcuLmViMTYyNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3VzM19jcHVmcmVxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdXMzX2NwdWZyZXEuYwpAQCAtNzEsNyArNzEsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKLQl9OworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMjUsNyArMTI1LDcgQEAKIAogCWRlZmF1bHQ6CiAJCUJVRygpOwotCX07CisJfQogCiAJcmVnID0gcmVhZF9zYWZhcmlfY2ZnKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Zpb2hzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC92aW9ocy5jCmluZGV4IGFhNmFjNzAuLjI5MzQ4ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Zpb2hzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlvaHMuYwpAQCAtMzYzLDcgKzM2Myw3IEBACiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gaGFuZHNoYWtlX2ZhaWx1cmUodmlvKTsKLQl9OworCX0KIH0KIAogc3RhdGljIGludCBwcm9jZXNzX2F0dHIoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbywgdm9pZCAqcGt0KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCmluZGV4IDlkZmQyZWIuLjM2MzU3NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCQlsZWZ0ID0gZWRnZTMyX3RhYl9sWyhyczEgPj4gMikgJiAweDFdLmxlZnQ7CiAJCXJpZ2h0ID0gZWRnZTMyX3RhYl9sWyhyczIgPj4gMikgJiAweDFdLnJpZ2h0OwogCQlicmVhazsKLQl9OworCX0KIAogCWlmICgocnMxICYgfjB4N1VMKSA9PSAocnMyICYgfjB4N1VMKSkKIAkJcmRfdmFsID0gcmlnaHQgJiBsZWZ0OwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJCXRzdGF0ZSA9IHJlZ3MtPnRzdGF0ZSAmIH4oVFNUQVRFX1hDQyB8IFRTVEFURV9JQ0MpOwogCQlyZWdzLT50c3RhdGUgPSB0c3RhdGUgfCAoY2NyIDw8IDMyVUwpOwogCX0KLQl9OworCX0KIH0KIAogc3RhdGljIHZvaWQgYXJyYXkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnNuLCB1bnNpZ25lZCBpbnQgb3BmKQpAQCAtMzkyLDcgKzM5Miw3IEBACiAKIAljYXNlIEFSUkFZMzJfT1BGOgogCQlyZF92YWwgPDw9IDI7Ci0JfTsKKwl9CiAKIAlzdG9yZV9yZWcocmVncywgcmRfdmFsLCBSRChpbnNuKSk7CiB9CkBAIC01NzcsNyArNTc3LDcgQEAKIAkJKmZwZF9yZWdhZGRyKGYsIFJEKGluc24pKSA9IHJkX3ZhbDsKIAkJYnJlYWs7CiAJfQotCX07CisJfQogfQogCiBzdGF0aWMgdm9pZCBwbXVsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbiwgdW5zaWduZWQgaW50IG9wZikKQEAgLTY5Myw3ICs2OTMsNyBAQAogCQkqZnBkX3JlZ2FkZHIoZiwgUkQoaW5zbikpID0gcmRfdmFsOwogCQlicmVhazsKIAl9Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHBjbXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnNuLCB1bnNpZ25lZCBpbnQgb3BmKQpAQCAtNzg2LDcgKzc4Niw3IEBACiAJCQkJcmRfdmFsIHw9IDEgPDwgaTsKIAkJfQogCQlicmVhazsKLQl9OworCX0KIAogCW1heWJlX2ZsdXNoX3dpbmRvd3MoMCwgMCwgUkQoaW5zbiksIDApOwogCXN0b3JlX3JlZyhyZWdzLCByZF92YWwsIFJEKGluc24pKTsKQEAgLTg4NSw3ICs4ODUsNyBAQAogCWNhc2UgQlNIVUZGTEVfT1BGOgogCQlic2h1ZmZsZShyZWdzLCBpbnNuKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAlyZWdzLT50cGMgPSByZWdzLT50bnBjOwogCXJlZ3MtPnRucGMgKz0gNDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYwppbmRleCBiMTBhYzRkLi43NTQzZGRiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAogCWRlZmF1bHQ6CiAJCWJyZWFrOwotCX07CisJfQogCiAJbWVtc2V0KCZyZWdzLCAwLCBzaXplb2YgKHJlZ3MpKTsKIAlyZWdzLnBjID0gcGM7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfMzIuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jCmluZGV4IGNhMjE3MzIuLjdiMDBkZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jCkBAIC0zNDAsNyArMzQwLDcgQEAKIAkJcHJvbV9wcmludGYoInBhZ2luZ19pbml0OiBzcGFyY19jcHVfbW9kZWwgPSAlZFxuIiwgc3BhcmNfY3B1X21vZGVsKTsKIAkJcHJvbV9wcmludGYoInBhZ2luZ19pbml0OiBIYWx0aW5nLi4uXG4iKTsKIAkJcHJvbV9oYWx0KCk7Ci0JfTsKKwl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBwcm90ZWN0aW9uIG1hcCB3aXRoIG5vbi1jb25zdGFudCwgTU1VIGRlcGVuZGVudCB2YWx1ZXMuICovCiAJcHJvdGVjdGlvbl9tYXBbMF0gPSBQQUdFX05PTkU7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCmluZGV4IGUxMGNkMDMuLjNmZDhlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCkBAIC0xNjI1LDcgKzE2MjUsNyBAQAogCQlrdHNiX2Rlc2NyWzBdLnBnc3pfaWR4ID0gSFZfUEdTWl9JRFhfNE1COwogCQlrdHNiX2Rlc2NyWzBdLnBnc3pfbWFzayA9IEhWX1BHU1pfTUFTS180TUI7CiAJCWJyZWFrOwotCX07CisJfQogCiAJa3RzYl9kZXNjclswXS5hc3NvYyA9IDE7CiAJa3RzYl9kZXNjclswXS5udW1fdHRlcyA9IEtFUk5FTF9UU0JfTkVOVFJJRVM7CkBAIC0yMjY2LDcgKzIyNjYsNyBAQAogCQkJcmV0dXJuIF9QQUdFX1NaNTEyS180VjsKIAkJY2FzZSA0ICogMTAyNCAqIDEwMjQ6CiAJCQlyZXR1cm4gX1BBR0VfU1o0TUJfNFY7Ci0JCX07CisJCX0KIAl9IGVsc2UgewogCQlzd2l0Y2ggKHN6KSB7CiAJCWNhc2UgOCAqIDEwMjQ6CkBAIC0yMjc4LDcgKzIyNzgsNyBAQAogCQkJcmV0dXJuIF9QQUdFX1NaNTEyS180VTsKIAkJY2FzZSA0ICogMTAyNCAqIDEwMjQ6CiAJCQlyZXR1cm4gX1BBR0VfU1o0TUJfNFU7Ci0JCX07CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwppbmRleCBmZTA5ZmQ4Li5jYmVmNzRlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL3NybW11LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCkBAIC0xNjY1LDcgKzE2NjUsNyBAQAogCWRlZmF1bHQ6CiAJCXNybW11X21vZHR5cGUgPSBTd2lmdF9vazsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfY2FjaGVfYWxsLCBzd2lmdF9mbHVzaF9jYWNoZV9hbGwsIEJURklYVVBDQUxMX05PUk0pOwogCUJURklYVVBTRVRfQ0FMTChmbHVzaF9jYWNoZV9tbSwgc3dpZnRfZmx1c2hfY2FjaGVfbW0sIEJURklYVVBDQUxMX05PUk0pOwpAQCAtMjA2OSw3ICsyMDY5LDcgQEAKIAkJCS8qIFNvbWUgb3RoZXIgQ3lwcmVzcyByZXZpc2lvbiwgYXNzdW1lIGEgNjA1LiAqLwogCQkJaW5pdF9jeXByZXNzXzYwNShtb2RfcmV2KTsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJCXJldHVybjsKIAl9CiAJCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3N1bjRjLmMgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKaW5kZXggYTIzNTBiNS4uMWNmNGYxOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3VuNGMuYwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCXByb21fcHJpbnRmKCJwcm9iZV92YWM6IERpZG4ndCBleHBlY3QgdmFjLWxpbmVzaXplIG9mICVkLCBoYWx0aW5nXG4iLAogCQkJICAgIHN1bjRjX3ZhY2luZm8ubGluZXNpemUpOwogCQlwcm9tX2hhbHQoKTsKLQl9OworCX0KIAogCXN1bjRjX2ZsdXNoX2FsbCgpOwogCXN1bjRjX2VuYWJsZV92YWMoKTsKQEAgLTM2NCw3ICszNjQsNyBAQAogCQkJcHJvbV9wcmludGYoIlVuaGFuZGxlZCBudW1iZXIgb2Ygc2VnbWFwczogJWRcbiIsCiAJCQkJICAgIG51bV9zZWdtYXBzKTsKIAkJCXByb21faGFsdCgpOwotCX07CisJfQogCXN3aXRjaCAobnVtX2NvbnRleHRzKSB7CiAJCWNhc2UgODoKIAkJCS8qIERlZmF1bHQsIG5vdGhpbmcgdG8gZG8uICovCkBAIC0zNzcsNyArMzc3LDcgQEAKIAkJCXByb21fcHJpbnRmKCJVbmhhbmRsZWQgbnVtYmVyIG9mIGNvbnRleHRzOiAlZFxuIiwKIAkJCQkgICAgbnVtX2NvbnRleHRzKTsKIAkJCXByb21faGFsdCgpOwotCX07CisJfQogCiAJaWYgKHN1bjRjX3ZhY2luZm8uZG9faHdmbHVzaGVzICE9IDApIHsKIAkJUEFUQ0hfSU5TTih2YWNfaHdmbHVzaF9wYXRjaDFfb24sIHZhY19od2ZsdXNoX3BhdGNoMSk7CkBAIC0zOTQsNyArMzk0LDcgQEAKIAkJCXByb21fcHJpbnRmKCJJbXBvc3NpYmxlIFZBQyBsaW5lc2l6ZSAlZCwgaGFsdGluZy4uLlxuIiwKIAkJCQkgICAgc3VuNGNfdmFjaW5mby5saW5lc2l6ZSk7CiAJCQlwcm9tX2hhbHQoKTsKLQkJfTsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS90c2IuYyBiL2FyY2gvc3BhcmMvbW0vdHNiLmMKaW5kZXggOTQ4NDYxNS4uYTVmNTFiMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS90c2IuYworKysgYi9hcmNoL3NwYXJjL21tL3RzYi5jCkBAIC0xODAsNyArMTgwLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJUU0JbJXM6JWRdOiBJbXBvc3NpYmxlIFRTQiBzaXplICVsdSwga2lsbGluZyBwcm9jZXNzLlxuIiwKIAkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgdHNiX2J5dGVzKTsKIAkJZG9fZXhpdChTSUdTRUdWKTsKLQl9OworCX0KIAl0dGUgfD0gcHRlX3N6X2JpdHMocGFnZV9zeik7CiAKIAlpZiAodGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzIHx8IHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKQEAgLTIxNSw3ICsyMTUsNyBAQAogI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQlCVUcoKTsKLQkJfTsKKwkJfQogCQlocC0+YXNzb2MgPSAxOwogCQlocC0+bnVtX3R0ZXMgPSB0c2JfYnl0ZXMgLyAxNjsKIAkJaHAtPmN0eF9pZHggPSAwOwpAQCAtMjMwLDcgKzIzMCw3IEBACiAjZW5kaWYKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwotCQl9OworCQl9CiAJCWhwLT50c2JfYmFzZSA9IHRzYl9wYWRkcjsKIAkJaHAtPnJlc3YgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzMyLmMgYi9hcmNoL3NwYXJjL3Byb20vY29uc29sZV8zMi5jCmluZGV4IGIwNWUzZGIuLmEwMGY0N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfMzIuYwpAQCAtMzgsNyArMzgsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKLQl9OworCX0KIAlyZXN0b3JlX2N1cnJlbnQoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9tX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gaTsgLyogVWdoLCB3ZSBjb3VsZCBzcGluIGZvcmV2ZXIgb24gdW5zdXBwb3J0ZWQgcHJvbXMgOyggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9pbml0XzMyLmMgYi9hcmNoL3NwYXJjL3Byb20vaW5pdF8zMi5jCmluZGV4IDBhNjAxYjMuLjI2YzY0Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9pbml0XzMyLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL2luaXRfMzIuYwpAQCAtNTMsNyArNTMsNyBAQAogCQkJICAgIHJvbXZlYy0+cHZfcm9tdmVycyk7CiAJCXByb21faGFsdCgpOwogCQlicmVhazsKLQl9OworCX0KIAogCXByb21fcmV2ID0gcm9tdmVjLT5wdl9wbHVnaW5fcmV2aXNpb247CiAJcHJvbV9wcmV2ID0gcm9tdmVjLT5wdl9wcmludHJldjsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9tcC5jIGIvYXJjaC9zcGFyYy9wcm9tL21wLmMKaW5kZXggOTdjNDRjOS4uMGRhODI1NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL21wLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL21wLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAljYXNlIFBST01fVjM6CiAJCXJldCA9ICgqKHJvbXZlYy0+djNfY3B1c3RhcnQpKShjcHVub2RlLCAoaW50KSBjdGFibGVfcmVnLCBjdHgsIHBjKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJcmVzdG9yZV9jdXJyZW50KCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvbV9sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL0tjb25maWcgYi9hcmNoL3VuaWNvcmUzMi9LY29uZmlnCmluZGV4IGQzYTMwMzIuLmU1N2RjY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL0tjb25maWcKKysrIGIvYXJjaC91bmljb3JlMzIvS2NvbmZpZwpAQCAtMjMxLDEwICsyMzEsNiBAQAogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBOQjA5MTYgUFdNIGNvbnRyb2xsZXJzCiAKLWNvbmZpZyBQVVYzX1JUQwotCXRyaXN0YXRlICJQS1VuaXR5IHYzIFJUQyBTdXBwb3J0IgotCWRlcGVuZHMgb24gIUFSQ0hfRlBHQQotCiBpZiBQVVYzX05CMDkxNgogCiBtZW51ICJQS1VuaXR5IE5ldEJvb2stMDkxNiBGZWF0dXJlcyIKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL01ha2VmaWxlIGIvYXJjaC91bmljb3JlMzIvTWFrZWZpbGUKaW5kZXggNzZhOGJlZS4uNmFmNGJjNCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIvTWFrZWZpbGUKKysrIGIvYXJjaC91bmljb3JlMzIvTWFrZWZpbGUKQEAgLTQwLDQyICs0MCwxMCBAQAogCiBsaWJzLXkJCQkrPSBhcmNoL3VuaWNvcmUzMi9saWIvCiAKLUFTTV9HRU5FUkFURURfRElSCTo9ICQoc3JjdHJlZSkvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9nZW5lcmF0ZWQKLUxJTlVYSU5DTFVERQkJKz0gLUkkKEFTTV9HRU5FUkFURURfRElSKQotCi1BU01fR0VORVJJQ19IRUFERVJTCTo9IGF0b21pYy5oIGF1eHZlYy5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGJpdHNwZXJsb25nLmggYnVnLmggYnVncy5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGNwdXRpbWUuaCBjdXJyZW50LmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gZGV2aWNlLmggZGl2NjQuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBlbWVyZ2VuY3ktcmVzdGFydC5oIGVycm5vLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gZmIuaCBmY250bC5oIGZ0cmFjZS5oIGZ1dGV4LmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gaGFyZGlycS5oIGh3X2lycS5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGlvY3RsLmggaW9jdGxzLmggaXBjYnVmLmggaXJxX3JlZ3MuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBrZGVidWcuaCBrbWFwX3R5cGVzLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gbG9jYWwuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBtbWFuLmggbW9kdWxlLmggbXNnYnVmLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gcGFyYW0uaCBwYXJwb3J0LmggcGVyY3B1LmggcG9sbC5oIHBvc2l4X3R5cGVzLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gcmVzb3VyY2UuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBzY2F0dGVybGlzdC5oIHNlY3Rpb25zLmggc2VnbWVudC5oIHNlbWJ1Zi5oIHNlcmlhbC5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IHNldHVwLmggc2htYnVmLmggc2htcGFyYW0uaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBzaWdpbmZvLmggc2lnbmFsLmggc2l6ZXMuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBzb2NrZXQuaCBzb2NraW9zLmggc3RhdC5oIHN0YXRmcy5oIHN3YWIuaCBzeXNjYWxscy5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IHRlcm1iaXRzLmggdGVybWlvcy5oIHRvcG9sb2d5LmggdHlwZXMuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSB1Y29udGV4dC5oIHVuYWxpZ25lZC5oIHVzZXIuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSB2Z2EuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSB4b3IuaAotCi1hcmNocHJlcGFyZToKLWlmbmVxICgkKEFTTV9HRU5FUkFURURfRElSKSwgJCh3aWxkY2FyZCAkKEFTTV9HRU5FUkFURURfRElSKSkpCi0JJChRKW1rZGlyIC1wICQoQVNNX0dFTkVSQVRFRF9ESVIpL2FzbQotCSQoUSkkKGZvcmVhY2ggYSwgJChBU01fR0VORVJJQ19IRUFERVJTKSwJXAotCQllY2hvICcjaW5jbHVkZSA8YXNtLWdlbmVyaWMvJGE+JwlcCi0JCQk+ICQoQVNNX0dFTkVSQVRFRF9ESVIpL2FzbS8kYTsgKQotZW5kaWYKLQogYm9vdAkJCTo9IGFyY2gvdW5pY29yZTMyL2Jvb3QKIAotIyBEZWZhdWx0IHRhcmdldCB3aGVuIGV4ZWN1dGluZyBwbGFpbiBtYWtlCisjIERlZmF1bHQgZGVmY29uZmlnIGFuZCB0YXJnZXQgd2hlbiBleGVjdXRpbmcgcGxhaW4gbWFrZQorS0JVSUxEX0RFRkNPTkZJRwk6PSAkKEFSQ0gpX2RlZmNvbmZpZwogS0JVSUxEX0lNQUdFCQk6PSB6SW1hZ2UKIAogYWxsOgkkKEtCVUlMRF9JTUFHRSkKQEAgLTgzLDggKzUxLDYgQEAKIHpJbWFnZSBJbWFnZSB1SW1hZ2U6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoYm9vdCkvJEAKIAotTVJQUk9QRVJfRElSUwkJKz0gJChBU01fR0VORVJBVEVEX0RJUikKLQogYXJjaGNsZWFuOgogCSQoUSkkKE1BS0UpICQoY2xlYW4pPSQoYm9vdCkKIApkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC91bmljb3JlMzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDk1MzczNDIuLmIwOTU0YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3VuaWNvcmUzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTU5LDcgKzU5LDcgQEAKICMgV2Ugbm93IGhhdmUgYSBQSUMgZGVjb21wcmVzc29yIGltcGxlbWVudGF0aW9uLiAgRGVjb21wcmVzc29ycyBydW5uaW5nCiAjIGZyb20gUkFNIHNob3VsZCBub3QgZGVmaW5lIFpURVhUQUREUi4gIERlY29tcHJlc3NvcnMgcnVubmluZyBkaXJlY3RseQogIyBmcm9tIFJPTSBvciBGbGFzaCBtdXN0IGRlZmluZSBaVEVYVEFERFIgKHByZWZlcmFibHkgdmlhIHRoZSBjb25maWcpCi1aVEVYVEFERFIJOj0gMAorWlRFWFRBRERSCTo9IDB4MDMwMDAwMDAKIFpCU1NBRERSCTo9IEFMSUdOKDQpCiAKIFNFREZMQUdTX2xkcwk9IHMvVEVYVF9TVEFSVC8kKFpURVhUQUREUikvO3MvQlNTX1NUQVJULyQoWkJTU0FERFIpLwpkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIvY29uZmlncy9kZWJ1Z19kZWZjb25maWcgYi9hcmNoL3VuaWNvcmUzMi9jb25maWdzL3VuaWNvcmUzMl9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC91bmljb3JlMzIvY29uZmlncy9kZWJ1Z19kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvdW5pY29yZTMyL2NvbmZpZ3MvdW5pY29yZTMyX2RlZmNvbmZpZwppbmRleCBiNWZiZGU5Li5jOWRkMzE5IDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9jb25maWdzL2RlYnVnX2RlZmNvbmZpZworKysgYi9hcmNoL3VuaWNvcmUzMi9jb25maWdzL3VuaWNvcmUzMl9kZWZjb25maWcKQEAgLTEsNiArMSw2IEBACiAjIyMgR2VuZXJhbCBzZXR1cAogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DQUxWRVJTSU9OPSItZGVidWciCitDT05GSUdfTE9DQUxWRVJTSU9OPSItdW5pY29yZTMyIgogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CkBAIC02NCw3ICs2NCw2IEBACiBDT05GSUdfSTJDX0VFUFJPTV9BVDI0PW4KIENPTkZJR19MQ0RfQkFDS0xJR0hUPW4KIAotQ09ORklHX1BVVjNfUlRDPXkKIENPTkZJR19QVVYzX1VNQUw9eQogQ09ORklHX1BVVjNfTVVTQj1uCiBDT05GSUdfUFVWM19BQzk3PW4KQEAgLTE2Nyw4ICsxNjYsOSBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogCiAjCVJlYWwgVGltZSBDbG9jawotQ09ORklHX1JUQ19MSUI9bQotQ09ORklHX1JUQ19DTEFTUz1tCitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfRFJWX1BVVjM9eQogCiAjIyMgRmlsZSBzeXN0ZW1zCiBDT05GSUdfRVhUMl9GUz1tCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9LYnVpbGQgYi9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9LYnVpbGQKaW5kZXggYjIwMGZkYWMuLmNhMTEzZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvYXNtL0tidWlsZAorKysgYi9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTEsMiArMSw2MSBAQAogaW5jbHVkZSBpbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KIAorZ2VuZXJpYy15ICs9IGF0b21pYy5oCitnZW5lcmljLXkgKz0gYXV4dmVjLmgKK2dlbmVyaWMteSArPSBiaXRzcGVybG9uZy5oCitnZW5lcmljLXkgKz0gYnVnLmgKK2dlbmVyaWMteSArPSBidWdzLmgKK2dlbmVyaWMteSArPSBjcHV0aW1lLmgKK2dlbmVyaWMteSArPSBjdXJyZW50LmgKK2dlbmVyaWMteSArPSBkZXZpY2UuaAorZ2VuZXJpYy15ICs9IGRpdjY0LmgKK2dlbmVyaWMteSArPSBlbWVyZ2VuY3ktcmVzdGFydC5oCitnZW5lcmljLXkgKz0gZXJybm8uaAorZ2VuZXJpYy15ICs9IGZiLmgKK2dlbmVyaWMteSArPSBmY250bC5oCitnZW5lcmljLXkgKz0gZnRyYWNlLmgKK2dlbmVyaWMteSArPSBmdXRleC5oCitnZW5lcmljLXkgKz0gaGFyZGlycS5oCitnZW5lcmljLXkgKz0gaHdfaXJxLmgKK2dlbmVyaWMteSArPSBpb2N0bC5oCitnZW5lcmljLXkgKz0gaW9jdGxzLmgKK2dlbmVyaWMteSArPSBpcGNidWYuaAorZ2VuZXJpYy15ICs9IGlycV9yZWdzLmgKK2dlbmVyaWMteSArPSBrZGVidWcuaAorZ2VuZXJpYy15ICs9IGttYXBfdHlwZXMuaAorZ2VuZXJpYy15ICs9IGxvY2FsLmgKK2dlbmVyaWMteSArPSBtbWFuLmgKK2dlbmVyaWMteSArPSBtb2R1bGUuaAorZ2VuZXJpYy15ICs9IG1zZ2J1Zi5oCitnZW5lcmljLXkgKz0gcGFyYW0uaAorZ2VuZXJpYy15ICs9IHBhcnBvcnQuaAorZ2VuZXJpYy15ICs9IHBlcmNwdS5oCitnZW5lcmljLXkgKz0gcG9sbC5oCitnZW5lcmljLXkgKz0gcG9zaXhfdHlwZXMuaAorZ2VuZXJpYy15ICs9IHJlc291cmNlLmgKK2dlbmVyaWMteSArPSBzY2F0dGVybGlzdC5oCitnZW5lcmljLXkgKz0gc2VjdGlvbnMuaAorZ2VuZXJpYy15ICs9IHNlZ21lbnQuaAorZ2VuZXJpYy15ICs9IHNlbWJ1Zi5oCitnZW5lcmljLXkgKz0gc2VyaWFsLmgKK2dlbmVyaWMteSArPSBzZXR1cC5oCitnZW5lcmljLXkgKz0gc2htYnVmLmgKK2dlbmVyaWMteSArPSBzaG1wYXJhbS5oCitnZW5lcmljLXkgKz0gc2lnaW5mby5oCitnZW5lcmljLXkgKz0gc2lnbmFsLmgKK2dlbmVyaWMteSArPSBzaXplcy5oCitnZW5lcmljLXkgKz0gc29ja2V0LmgKK2dlbmVyaWMteSArPSBzb2NraW9zLmgKK2dlbmVyaWMteSArPSBzdGF0LmgKK2dlbmVyaWMteSArPSBzdGF0ZnMuaAorZ2VuZXJpYy15ICs9IHN3YWIuaAorZ2VuZXJpYy15ICs9IHN5c2NhbGxzLmgKK2dlbmVyaWMteSArPSB0ZXJtYml0cy5oCitnZW5lcmljLXkgKz0gdGVybWlvcy5oCitnZW5lcmljLXkgKz0gdG9wb2xvZ3kuaAorZ2VuZXJpYy15ICs9IHR5cGVzLmgKK2dlbmVyaWMteSArPSB1Y29udGV4dC5oCitnZW5lcmljLXkgKz0gdW5hbGlnbmVkLmgKK2dlbmVyaWMteSArPSB1c2VyLmgKK2dlbmVyaWMteSArPSB2Z2EuaAorZ2VuZXJpYy15ICs9IHhvci5oCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZWMyM2EyZi4uYWViMGYxOCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTYsNyArMTYsNiBAQAogb2JqLSQoQ09ORklHX0FSQ0hfUFVWMykJCSs9IGNsb2NrLm8gaXJxLm8gdGltZS5vCiAKIG9iai0kKENPTkZJR19QVVYzX0dQSU8pCQkrPSBncGlvLm8KLW9iai0kKENPTkZJR19QVVYzX1JUQykJCSs9IHJ0Yy5vCiBvYmotJChDT05GSUdfUFVWM19QV00pCQkrPSBwd20ubwogb2JqLSQoQ09ORklHX1BVVjNfUE0pCQkrPSBwbS5vIHNsZWVwLm8KIG9iai0kKENPTkZJR19ISUJFUk5BVElPTikJKz0gaGliZXJuYXRlLm8gaGliZXJuYXRlX2FzbS5vCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDliZjdmN2EuLjc3ZTQwN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zMCw3ICszMCw3IEBACiAJSEVBRF9URVhUX1NFQ1RJT04KIAlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCi0JUEVSQ1BVKEwxX0NBQ0hFX0JZVEVTLCBQQUdFX1NJWkUpCisJUEVSQ1BVX1NFQ1RJT04oTDFfQ0FDSEVfQllURVMpCiAJX19pbml0X2VuZCA9IC47CiAKIAlfc3RleHQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IGY1YWJlM2EuLjkwYjA2ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTgsNiArOCw3IEBACiAKIGlmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKICMgRG8gbm90IHByb2ZpbGUgZGVidWcgYW5kIGxvd2xldmVsIHV0aWxpdGllcworQ0ZMQUdTX1JFTU9WRV90c2MubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9ydGMubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9wYXJhdmlydC1zcGlubG9ja3MubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9wdmNsb2NrLm8gPSAtcGcKQEAgLTI4LDYgKzI5LDcgQEAKIEdDT1ZfUFJPRklMRV92c3lzY2FsbF82NC5vCTo9IG4KIEdDT1ZfUFJPRklMRV9ocGV0Lm8JCTo9IG4KIEdDT1ZfUFJPRklMRV90c2MubwkJOj0gbgorR0NPVl9QUk9GSUxFX3ZyZWFkX3RzY182NC5vCTo9IG4KIEdDT1ZfUFJPRklMRV9wYXJhdmlydC5vCQk6PSBuCiAKICMgdnJlYWRfdHNjXzY0IGlzIGhvdCBhbmQgc2hvdWxkIGJlIGZ1bGx5IG9wdGltaXplZDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCBjZDhjYmViLi43YzNhOTVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2dhcnQuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2FtZF9pb21tdV9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXVfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYW1kX2lvbW11Lmg+CkBAIC0xNTQsNiArMTU1LDEwIEBACiAJcGRldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KFBDSV9CVVMoYWxpYXMpLCBhbGlhcyAmIDB4ZmYpOwogCWlmIChwZGV2KQogCQlkZXZfZGF0YS0+YWxpYXMgPSAmcGRldi0+ZGV2OworCWVsc2UgeworCQlrZnJlZShkZXZfZGF0YSk7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQogCiAJYXRvbWljX3NldCgmZGV2X2RhdGEtPmJpbmQsIDApOwogCkBAIC0xNjMsNiArMTY4LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGlvbW11X2lnbm9yZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXUxNiBkZXZpZCwgYWxpYXM7CisKKwlkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2KTsKKwlhbGlhcyA9IGFtZF9pb21tdV9hbGlhc190YWJsZVtkZXZpZF07CisKKwltZW1zZXQoJmFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLCAwLCBzaXplb2Yoc3RydWN0IGRldl90YWJsZV9lbnRyeSkpOworCW1lbXNldCgmYW1kX2lvbW11X2Rldl90YWJsZVthbGlhc10sIDAsIHNpemVvZihzdHJ1Y3QgZGV2X3RhYmxlX2VudHJ5KSk7CisKKwlhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF0gPSBOVUxMOworCWFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2FsaWFzXSA9IE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIGlvbW11X3VuaW5pdF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCWtmcmVlKGRldi0+YXJjaGRhdGEuaW9tbXUpOwpAQCAtMTkyLDcgKzIxMSw5IEBACiAJCQljb250aW51ZTsKIAogCQlyZXQgPSBpb21tdV9pbml0X2RldmljZSgmcGRldi0+ZGV2KTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCA9PSAtRU5PVFNVUFApCisJCQlpb21tdV9pZ25vcmVfZGV2aWNlKCZwZGV2LT5kZXYpOworCQllbHNlIGlmIChyZXQpCiAJCQlnb3RvIG91dF9mcmVlOwogCX0KIApAQCAtMjM4Myw2ICsyNDA0LDIzIEBACiAJLmRtYV9zdXBwb3J0ZWQgPSBhbWRfaW9tbXVfZG1hX3N1cHBvcnRlZCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBkZXZpY2VfZG1hX29wc19pbml0KHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXVuc2lnbmVkIHVuaGFuZGxlZCA9IDA7CisKKwlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKKwkJaWYgKCFjaGVja19kZXZpY2UoJnBkZXYtPmRldikpIHsKKwkJCXVuaGFuZGxlZCArPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlwZGV2LT5kZXYuYXJjaGRhdGEuZG1hX29wcyA9ICZhbWRfaW9tbXVfZG1hX29wczsKKwl9CisKKwlyZXR1cm4gdW5oYW5kbGVkOworfQorCiAvKgogICogVGhlIGZ1bmN0aW9uIHdoaWNoIGNsdWVzIHRoZSBBTUQgSU9NTVUgZHJpdmVyIGludG8gZG1hX29wcy4KICAqLwpAQCAtMjM5NSw3ICsyNDMzLDcgQEAKIGludCBfX2luaXQgYW1kX2lvbW11X2luaXRfZG1hX29wcyh2b2lkKQogewogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwotCWludCByZXQ7CisJaW50IHJldCwgdW5oYW5kbGVkOwogCiAJLyoKIAkgKiBmaXJzdCBhbGxvY2F0ZSBhIGRlZmF1bHQgcHJvdGVjdGlvbiBkb21haW4gZm9yIGV2ZXJ5IElPTU1VIHdlCkBAIC0yNDIxLDcgKzI0NTksMTEgQEAKIAlzd2lvdGxiID0gMDsKIAogCS8qIE1ha2UgdGhlIGRyaXZlciBmaW5hbGx5IHZpc2libGUgdG8gdGhlIGRyaXZlcnMgKi8KLQlkbWFfb3BzID0gJmFtZF9pb21tdV9kbWFfb3BzOworCXVuaGFuZGxlZCA9IGRldmljZV9kbWFfb3BzX2luaXQoKTsKKwlpZiAodW5oYW5kbGVkICYmIG1heF9wZm4gPiBNQVhfRE1BMzJfUEZOKSB7CisJCS8qIFRoZXJlIGFyZSB1bmhhbmRsZWQgZGV2aWNlcyAtIGluaXRpYWxpemUgc3dpb3RsYiBmb3IgdGhlbSAqLworCQlzd2lvdGxiID0gMTsKKwl9CiAKIAlhbWRfaW9tbXVfc3RhdHNfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCmluZGV4IDkxNzljMjExLi5iZmM4NDUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwpAQCAtNzMxLDggKzczMSw4IEBACiB7CiAJdTggKnAgPSAodTggKiloOwogCXU4ICplbmQgPSBwLCBmbGFncyA9IDA7Ci0JdTE2IGRldl9pLCBkZXZpZCA9IDAsIGRldmlkX3N0YXJ0ID0gMCwgZGV2aWRfdG8gPSAwOwotCXUzMiBleHRfZmxhZ3MgPSAwOworCXUxNiBkZXZpZCA9IDAsIGRldmlkX3N0YXJ0ID0gMCwgZGV2aWRfdG8gPSAwOworCXUzMiBkZXZfaSwgZXh0X2ZsYWdzID0gMDsKIAlib29sIGFsaWFzID0gZmFsc2U7CiAJc3RydWN0IGl2aGRfZW50cnkgKmU7CiAKQEAgLTg4Nyw3ICs4ODcsNyBAQAogLyogSW5pdGlhbGl6ZXMgdGhlIGRldmljZS0+aW9tbXUgbWFwcGluZyBmb3IgdGhlIGRyaXZlciAqLwogc3RhdGljIGludCBfX2luaXQgaW5pdF9pb21tdV9kZXZpY2VzKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogewotCXUxNiBpOworCXUzMiBpOwogCiAJZm9yIChpID0gaW9tbXUtPmZpcnN0X2RldmljZTsgaSA8PSBpb21tdS0+bGFzdF9kZXZpY2U7ICsraSkKIAkJc2V0X2lvbW11X2Zvcl9kZXZpY2UoaW9tbXUsIGkpOwpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKICAqLwogc3RhdGljIHZvaWQgaW5pdF9kZXZpY2VfdGFibGUodm9pZCkKIHsKLQl1MTYgZGV2aWQ7CisJdTMyIGRldmlkOwogCiAJZm9yIChkZXZpZCA9IDA7IGRldmlkIDw9IGFtZF9pb21tdV9sYXN0X2JkZjsgKytkZXZpZCkgewogCQlzZXRfZGV2X2VudHJ5X2JpdChkZXZpZCwgREVWX0VOVFJZX1ZBTElEKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwppbmRleCBiOTYxYWY4Li5iOTMzOGI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCkBAIC0zOTAsNyArMzkwLDggQEAKIAogLyoKICAqIElmIG1hc2s9MSwgdGhlIExWVCBlbnRyeSBkb2VzIG5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHRzIHdoaWxlIG1hc2s9MAotICogZW5hYmxlcyB0aGUgdmVjdG9yLiBTZWUgYWxzbyB0aGUgQktER3MuCisgKiBlbmFibGVzIHRoZSB2ZWN0b3IuIFNlZSBhbHNvIHRoZSBCS0RHcy4gTXVzdCBiZSBjYWxsZWQgd2l0aAorICogcHJlZW1wdGlvbiBkaXNhYmxlZC4KICAqLwogCiBpbnQgc2V0dXBfQVBJQ19laWx2dCh1OCBvZmZzZXQsIHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwppbmRleCBiNTExYTAxLi5hZGM2NmMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKQEAgLTYzMiwxNCArNjMyLDE0IEBACiAKIC8qIERpcmVjdCBMZWdhY3kgVkdBIEkvTyB0cmFmZmljIHRvIGRlc2lnbmF0ZWQgSU9IICovCiBpbnQgdXZfc2V0X3ZnYV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCBkZWNvZGUsCi0JCSAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX2JpdHMsIGJvb2wgY2hhbmdlX2JyaWRnZSkKKwkJICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmRfYml0cywgdTMyIGZsYWdzKQogewogCWludCBkb21haW4sIGJ1cywgcmM7CiAKLQlQUl9ERVZFTCgiZGV2Zm4gJXggZGVjb2RlICVkIGNtZCAleCBjaGdfYnJkZyAlZFxuIiwKLQkJCXBkZXYtPmRldmZuLCBkZWNvZGUsIGNvbW1hbmRfYml0cywgY2hhbmdlX2JyaWRnZSk7CisJUFJfREVWRUwoImRldmZuICV4IGRlY29kZSAlZCBjbWQgJXggZmxhZ3MgJWRcbiIsCisJCQlwZGV2LT5kZXZmbiwgZGVjb2RlLCBjb21tYW5kX2JpdHMsIGZsYWdzKTsKIAotCWlmICghY2hhbmdlX2JyaWRnZSkKKwlpZiAoIShmbGFncyAmIFBDSV9WR0FfU1RBVEVfQ0hBTkdFX0JSSURHRSkpCiAJCXJldHVybiAwOwogCiAJaWYgKChjb21tYW5kX2JpdHMgJiBQQ0lfQ09NTUFORF9JTykgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kZXZpY2V0cmVlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZGV2aWNldHJlZS5jCmluZGV4IDY5MGJjODQuLjlhZWI3OGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kZXZpY2V0cmVlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2RldmljZXRyZWUuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KIAogI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CiAjaW5jbHVkZSA8YXNtL2lycV9jb250cm9sbGVyLmg+CkBAIC05OCw2ICs5OSwxNiBAQAogCXJldHVybiBfX2FsbG9jX2Jvb3RtZW0oc2l6ZSwgYWxpZ24sIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfc2V0dXBfaW5pdHJkX2FyY2godW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKV9fdmEoc3RhcnQpOworCWluaXRyZF9lbmQgPSAodW5zaWduZWQgbG9uZylfX3ZhKGVuZCk7CisJaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKK30KKyNlbmRpZgorCiB2b2lkIF9faW5pdCBhZGRfZHRiKHU2NCBkYXRhKQogewogCWluaXRpYWxfZHRiID0gZGF0YSArIG9mZnNldG9mKHN0cnVjdCBzZXR1cF9kYXRhLCBkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDQyNmE1YjYuLmUxYmE4Y2IyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMzNyw3ICszMzcsNyBAQAogICogUG93ZXJtYW5hZ2VtZW50IGlkbGUgZnVuY3Rpb24sIGlmIGFueS4uCiAgKi8KIHZvaWQgKCpwbV9pZGxlKSh2b2lkKTsKLSNpZiBkZWZpbmVkKENPTkZJR19BUE1fTU9EVUxFKSAmJiBkZWZpbmVkKENPTkZJR19BUE1fQ1BVX0lETEUpCisjaWZkZWYgQ09ORklHX0FQTV9NT0RVTEUKIEVYUE9SVF9TWU1CT0wocG1faWRsZSk7CiAjZW5kaWYKIApAQCAtMzk5LDcgKzM5OSw3IEBACiAJCWNwdV9yZWxheCgpOwogCX0KIH0KLSNpZiBkZWZpbmVkKENPTkZJR19BUE1fTU9EVUxFKSAmJiBkZWZpbmVkKENPTkZJR19BUE1fQ1BVX0lETEUpCisjaWZkZWYgQ09ORklHX0FQTV9NT0RVTEUKIEVYUE9SVF9TWU1CT0woZGVmYXVsdF9pZGxlKTsKICNlbmRpZgogCkBAIC02NDIsNyArNjQyLDcgQEAKIAkJYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZSA9IElETEVfUE9MTDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibXdhaXQiKSkgewogCQlib290X29wdGlvbl9pZGxlX292ZXJyaWRlID0gSURMRV9GT1JDRV9NV0FJVDsKLQkJV0FSTl9PTkNFKDEsICJcaWRsZT1td2FpdFwiIHdpbGwgYmUgcmVtb3ZlZCBpbiAyMDEyXCJcbiIpOworCQlXQVJOX09OQ0UoMSwgIlwiaWRsZT1td2FpdFwiIHdpbGwgYmUgcmVtb3ZlZCBpbiAyMDEyXG4iKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAiaGFsdCIpKSB7CiAJCS8qCiAJCSAqIFdoZW4gdGhlIGJvb3Qgb3B0aW9uIG9mIGlkbGU9aGFsdCBpcyBhZGRlZCwgaGFsdCBpcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggOGQxMjg3OC4uYTNkMGRjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0yNDUsNyArMjQ1LDYgQEAKIHsKIAlzZXRfdXNlcl9ncyhyZWdzLCAwKTsKIAlyZWdzLT5mcwkJPSAwOwotCXNldF9mcyhVU0VSX0RTKTsKIAlyZWdzLT5kcwkJPSBfX1VTRVJfRFM7CiAJcmVncy0+ZXMJCT0gX19VU0VSX0RTOwogCXJlZ3MtPnNzCQk9IF9fVVNFUl9EUzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IDZjOWRkOTIuLmNhNmY3YWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMzM4LDcgKzMzOCw2IEBACiAJcmVncy0+Y3MJCT0gX2NzOwogCXJlZ3MtPnNzCQk9IF9zczsKIAlyZWdzLT5mbGFncwkJPSBYODZfRUZMQUdTX0lGOwotCXNldF9mcyhVU0VSX0RTKTsKIAkvKgogCSAqIEZyZWUgdGhlIG9sZCBGUCBhbmQgb3RoZXIgZXh0ZW5kZWQgc3RhdGUKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGVlZmQ5NjcuLjlmZDMxMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMjg1LDYgKzI4NSwxOSBAQAogCXBlcl9jcHUoY3B1X3N0YXRlLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0gQ1BVX09OTElORTsKIAl4ODZfcGxhdGZvcm0ubm1pX2luaXQoKTsKIAorCS8qCisJICogV2FpdCB1bnRpbCB0aGUgY3B1IHdoaWNoIGJyb3VnaHQgdGhpcyBvbmUgdXAgbWFya2VkIGl0CisJICogb25saW5lIGJlZm9yZSBlbmFibGluZyBpbnRlcnJ1cHRzLiBJZiB3ZSBkb24ndCBkbyB0aGF0IHRoZW4KKwkgKiB3ZSBjYW4gZW5kIHVwIHdha2luZyB1cCB0aGUgc29mdGlycSB0aHJlYWQgYmVmb3JlIHRoaXMgY3B1CisJICogcmVhY2hlZCB0aGUgYWN0aXZlIHN0YXRlLCB3aGljaCBtYWtlcyB0aGUgc2NoZWR1bGVyIHVuaGFwcHkKKwkgKiBhbmQgc2NoZWR1bGUgdGhlIHNvZnRpcnEgdGhyZWFkIG9uIHRoZSB3cm9uZyBjcHUuIFRoaXMgaXMKKwkgKiBvbmx5IG9ic2VydmFibGUgd2l0aCBmb3JjZWQgdGhyZWFkZWQgaW50ZXJydXB0cywgYnV0IGluCisJICogdGhlb3J5IGl0IGNvdWxkIGFsc28gaGFwcGVuIHcvbyB0aGVtLiBJdCdzIGp1c3Qgd2F5IGhhcmRlcgorCSAqIHRvIGFjaGlldmUuCisJICovCisJd2hpbGUgKCFjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X2FjdGl2ZV9tYXNrKSkKKwkJY3B1X3JlbGF4KCk7CisKIAkvKiBlbmFibGUgbG9jYWwgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIApAQCAtMTMzMiw3ICsxMzQ1LDcgQEAKIAl2b2lkICptd2FpdF9wdHI7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKTsKIAotCWlmICghdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX01XQUlUKSAmJiBtd2FpdF91c2FibGUoYykpCisJaWYgKCEodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX01XQUlUKSAmJiBtd2FpdF91c2FibGUoYykpKQogCQlyZXR1cm47CiAJaWYgKCF0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFNIKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKaW5kZXggZDZlMjQ3Ny4uNmRmODhjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCkBAIC00NywzOCArNDcsNDAgQEAKICNkZWZpbmUgRHN0REkgICAgICAgKDU8PDEpCS8qIERlc3RpbmF0aW9uIGlzIGluIEVTOihFKURJICovCiAjZGVmaW5lIERzdE1lbTY0ICAgICg2PDwxKQkvKiA2NGJpdCBtZW1vcnkgb3BlcmFuZCAqLwogI2RlZmluZSBEc3RJbW1VQnl0ZSAoNzw8MSkJLyogOC1iaXQgdW5zaWduZWQgaW1tZWRpYXRlIG9wZXJhbmQgKi8KLSNkZWZpbmUgRHN0TWFzayAgICAgKDc8PDEpCisjZGVmaW5lIERzdERYICAgICAgICg4PDwxKQkvKiBEZXN0aW5hdGlvbiBpcyBpbiBEWCByZWdpc3RlciAqLworI2RlZmluZSBEc3RNYXNrICAgICAoMHhmPDwxKQogLyogU291cmNlIG9wZXJhbmQgdHlwZS4gKi8KLSNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDQpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NCkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDQpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NCkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCi0jZGVmaW5lIFNyY01lbTMyICAgICg0PDw0KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KLSNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDQpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NCkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjT25lICAgICAgKDc8PDQpCS8qIEltcGxpZWQgJzEnICovCi0jZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw0KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NCkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KLSNkZWZpbmUgU3JjU0kgICAgICAgKDB4YTw8NCkJLyogU291cmNlIGlzIGluIHRoZSBEUzpSU0kgKi8KLSNkZWZpbmUgU3JjSW1tRkFkZHIgKDB4Yjw8NCkJLyogU291cmNlIGlzIGltbWVkaWF0ZSBmYXIgYWRkcmVzcyAqLwotI2RlZmluZSBTcmNNZW1GQWRkciAoMHhjPDw0KQkvKiBTb3VyY2UgaXMgZmFyIGFkZHJlc3MgaW4gbWVtb3J5ICovCi0jZGVmaW5lIFNyY0FjYyAgICAgICgweGQ8PDQpCS8qIFNvdXJjZSBBY2N1bXVsYXRvciAqLwotI2RlZmluZSBTcmNJbW1VMTYgICAoMHhlPDw0KSAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQsIDE2IGJpdHMgKi8KLSNkZWZpbmUgU3JjTWFzayAgICAgKDB4Zjw8NCkKKyNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDUpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NSkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDUpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NSkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCisjZGVmaW5lIFNyY01lbTMyICAgICg0PDw1KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KKyNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDUpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NSkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjT25lICAgICAgKDc8PDUpCS8qIEltcGxpZWQgJzEnICovCisjZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw1KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NSkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KKyNkZWZpbmUgU3JjU0kgICAgICAgKDB4YTw8NSkJLyogU291cmNlIGlzIGluIHRoZSBEUzpSU0kgKi8KKyNkZWZpbmUgU3JjSW1tRkFkZHIgKDB4Yjw8NSkJLyogU291cmNlIGlzIGltbWVkaWF0ZSBmYXIgYWRkcmVzcyAqLworI2RlZmluZSBTcmNNZW1GQWRkciAoMHhjPDw1KQkvKiBTb3VyY2UgaXMgZmFyIGFkZHJlc3MgaW4gbWVtb3J5ICovCisjZGVmaW5lIFNyY0FjYyAgICAgICgweGQ8PDUpCS8qIFNvdXJjZSBBY2N1bXVsYXRvciAqLworI2RlZmluZSBTcmNJbW1VMTYgICAoMHhlPDw1KSAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQsIDE2IGJpdHMgKi8KKyNkZWZpbmUgU3JjRFggICAgICAgKDB4Zjw8NSkJLyogU291cmNlIGlzIGluIERYIHJlZ2lzdGVyICovCisjZGVmaW5lIFNyY01hc2sgICAgICgweGY8PDUpCiAvKiBHZW5lcmljIE1vZFJNIGRlY29kZS4gKi8KLSNkZWZpbmUgTW9kUk0gICAgICAgKDE8PDgpCisjZGVmaW5lIE1vZFJNICAgICAgICgxPDw5KQogLyogRGVzdGluYXRpb24gaXMgb25seSB3cml0dGVuOyBuZXZlciByZWFkLiAqLwotI2RlZmluZSBNb3YgICAgICAgICAoMTw8OSkKLSNkZWZpbmUgQml0T3AgICAgICAgKDE8PDEwKQotI2RlZmluZSBNZW1BYnMgICAgICAoMTw8MTEpICAgICAgLyogTWVtb3J5IG9wZXJhbmQgaXMgYWJzb2x1dGUgZGlzcGxhY2VtZW50ICovCi0jZGVmaW5lIFN0cmluZyAgICAgICgxPDwxMikgICAgIC8qIFN0cmluZyBpbnN0cnVjdGlvbiAocmVwIGNhcGFibGUpICovCi0jZGVmaW5lIFN0YWNrICAgICAgICgxPDwxMykgICAgIC8qIFN0YWNrIGluc3RydWN0aW9uIChwdXNoL3BvcCkgKi8KLSNkZWZpbmUgR3JvdXBNYXNrICAgKDc8PDE0KSAgICAgLyogT3Bjb2RlIHVzZXMgb25lIG9mIHRoZSBncm91cCBtZWNoYW5pc21zICovCi0jZGVmaW5lIEdyb3VwICAgICAgICgxPDwxNCkgICAgIC8qIEJpdHMgMzo1IG9mIG1vZHJtIGJ5dGUgZXh0ZW5kIG9wY29kZSAqLwotI2RlZmluZSBHcm91cER1YWwgICAoMjw8MTQpICAgICAvKiBBbHRlcm5hdGUgZGVjb2Rpbmcgb2YgbW9kID09IDMgKi8KLSNkZWZpbmUgUHJlZml4ICAgICAgKDM8PDE0KSAgICAgLyogSW5zdHJ1Y3Rpb24gdmFyaWVzIHdpdGggNjYvZjIvZjMgcHJlZml4ICovCi0jZGVmaW5lIFJNRXh0ICAgICAgICg0PDwxNCkgICAgIC8qIE9wY29kZSBleHRlbnNpb24gaW4gTW9kUk0gci9tIGlmIG1vZCA9PSAzICovCi0jZGVmaW5lIFNzZSAgICAgICAgICgxPDwxNykgICAgIC8qIFNTRSBWZWN0b3IgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgTW92ICAgICAgICAgKDE8PDEwKQorI2RlZmluZSBCaXRPcCAgICAgICAoMTw8MTEpCisjZGVmaW5lIE1lbUFicyAgICAgICgxPDwxMikgICAgICAvKiBNZW1vcnkgb3BlcmFuZCBpcyBhYnNvbHV0ZSBkaXNwbGFjZW1lbnQgKi8KKyNkZWZpbmUgU3RyaW5nICAgICAgKDE8PDEzKSAgICAgLyogU3RyaW5nIGluc3RydWN0aW9uIChyZXAgY2FwYWJsZSkgKi8KKyNkZWZpbmUgU3RhY2sgICAgICAgKDE8PDE0KSAgICAgLyogU3RhY2sgaW5zdHJ1Y3Rpb24gKHB1c2gvcG9wKSAqLworI2RlZmluZSBHcm91cE1hc2sgICAoNzw8MTUpICAgICAvKiBPcGNvZGUgdXNlcyBvbmUgb2YgdGhlIGdyb3VwIG1lY2hhbmlzbXMgKi8KKyNkZWZpbmUgR3JvdXAgICAgICAgKDE8PDE1KSAgICAgLyogQml0cyAzOjUgb2YgbW9kcm0gYnl0ZSBleHRlbmQgb3Bjb2RlICovCisjZGVmaW5lIEdyb3VwRHVhbCAgICgyPDwxNSkgICAgIC8qIEFsdGVybmF0ZSBkZWNvZGluZyBvZiBtb2QgPT0gMyAqLworI2RlZmluZSBQcmVmaXggICAgICAoMzw8MTUpICAgICAvKiBJbnN0cnVjdGlvbiB2YXJpZXMgd2l0aCA2Ni9mMi9mMyBwcmVmaXggKi8KKyNkZWZpbmUgUk1FeHQgICAgICAgKDQ8PDE1KSAgICAgLyogT3Bjb2RlIGV4dGVuc2lvbiBpbiBNb2RSTSByL20gaWYgbW9kID09IDMgKi8KKyNkZWZpbmUgU3NlICAgICAgICAgKDE8PDE4KSAgICAgLyogU1NFIFZlY3RvciBpbnN0cnVjdGlvbiAqLwogLyogTWlzYyBmbGFncyAqLwogI2RlZmluZSBQcm90ICAgICAgICAoMTw8MjEpIC8qIGluc3RydWN0aW9uIGdlbmVyYXRlcyAjVUQgaWYgbm90IGluIHByb3QtbW9kZSAqLwogI2RlZmluZSBWZW5kb3JTcGVjaWZpYyAoMTw8MjIpIC8qIFZlbmRvciBzcGVjaWZpYyBpbnN0cnVjdGlvbiAqLwpAQCAtMzE1NCw4ICszMTU2LDggQEAKIAlJKERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgU3JjMkltbSwgZW1faW11bF8zb3ApLAogCUkoU3JjSW1tQnl0ZSB8IE1vdiB8IFN0YWNrLCBlbV9wdXNoKSwKIAlJKERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgU3JjMkltbUJ5dGUsIGVtX2ltdWxfM29wKSwKLQlEMmJ2SVAoRHN0REkgfCBNb3YgfCBTdHJpbmcsIGlucywgY2hlY2tfcGVybV9pbiksIC8qIGluc2IsIGluc3cvaW5zZCAqLwotCUQyYnZJUChTcmNTSSB8IEltcGxpY2l0T3BzIHwgU3RyaW5nLCBvdXRzLCBjaGVja19wZXJtX291dCksIC8qIG91dHNiLCBvdXRzdy9vdXRzZCAqLworCUQyYnZJUChEc3RESSB8IFNyY0RYIHwgTW92IHwgU3RyaW5nLCBpbnMsIGNoZWNrX3Blcm1faW4pLCAvKiBpbnNiLCBpbnN3L2luc2QgKi8KKwlEMmJ2SVAoU3JjU0kgfCBEc3REWCB8IFN0cmluZywgb3V0cywgY2hlY2tfcGVybV9vdXQpLCAvKiBvdXRzYiwgb3V0c3cvb3V0c2QgKi8KIAkvKiAweDcwIC0gMHg3RiAqLwogCVgxNihEKFNyY0ltbUJ5dGUpKSwKIAkvKiAweDgwIC0gMHg4NyAqLwpAQCAtMzIxMiw4ICszMjE0LDggQEAKIAkvKiAweEU4IC0gMHhFRiAqLwogCUQoU3JjSW1tIHwgU3RhY2spLCBEKFNyY0ltbSB8IEltcGxpY2l0T3BzKSwKIAlEKFNyY0ltbUZBZGRyIHwgTm82NCksIEQoU3JjSW1tQnl0ZSB8IEltcGxpY2l0T3BzKSwKLQlEMmJ2SVAoU3JjTm9uZSB8IERzdEFjYywgICAgIGluLCAgY2hlY2tfcGVybV9pbiksCi0JRDJidklQKFNyY0FjYyB8IEltcGxpY2l0T3BzLCBvdXQsIGNoZWNrX3Blcm1fb3V0KSwKKwlEMmJ2SVAoU3JjRFggfCBEc3RBY2MsIGluLCAgY2hlY2tfcGVybV9pbiksCisJRDJidklQKFNyY0FjYyB8IERzdERYLCBvdXQsIGNoZWNrX3Blcm1fb3V0KSwKIAkvKiAweEYwIC0gMHhGNyAqLwogCU4sIERJKEltcGxpY2l0T3BzLCBpY2VicCksIE4sIE4sCiAJREkoSW1wbGljaXRPcHMgfCBQcml2LCBobHQpLCBEKEltcGxpY2l0T3BzKSwKQEAgLTM2MTMsNiArMzYxNSwxMiBAQAogCQltZW1vcC5ieXRlcyA9IGMtPm9wX2J5dGVzICsgMjsKIAkJZ290byBzcmNtZW1fY29tbW9uOwogCQlicmVhazsKKwljYXNlIFNyY0RYOgorCQljLT5zcmMudHlwZSA9IE9QX1JFRzsKKwkJYy0+c3JjLmJ5dGVzID0gMjsKKwkJYy0+c3JjLmFkZHIucmVnID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWZldGNoX3JlZ2lzdGVyX29wZXJhbmQoJmMtPnNyYyk7CisJCWJyZWFrOwogCX0KIAogCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQpAQCAtMzY4Miw2ICszNjkwLDEyIEBACiAJCWMtPmRzdC5hZGRyLm1lbS5zZWcgPSBWQ1BVX1NSRUdfRVM7CiAJCWMtPmRzdC52YWwgPSAwOwogCQlicmVhazsKKwljYXNlIERzdERYOgorCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKKwkJYy0+ZHN0LmJ5dGVzID0gMjsKKwkJYy0+ZHN0LmFkZHIucmVnID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWZldGNoX3JlZ2lzdGVyX29wZXJhbmQoJmMtPmRzdCk7CisJCWJyZWFrOwogCWNhc2UgSW1wbGljaXRPcHM6CiAJCS8qIFNwZWNpYWwgaW5zdHJ1Y3Rpb25zIGRvIHRoZWlyIG93biBvcGVyYW5kIGRlY29kaW5nLiAqLwogCWRlZmF1bHQ6CkBAIC00MDI3LDcgKzQwNDEsNiBAQAogCQlicmVhazsKIAljYXNlIDB4ZWM6IC8qIGluIGFsLGR4ICovCiAJY2FzZSAweGVkOiAvKiBpbiAoZS9yKWF4LGR4ICovCi0JCWMtPnNyYy52YWwgPSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdOwogCWRvX2lvX2luOgogCQlpZiAoIXBpb19pbl9lbXVsYXRlZChjdHh0LCBvcHMsIGMtPmRzdC5ieXRlcywgYy0+c3JjLnZhbCwKIAkJCQkgICAgICZjLT5kc3QudmFsKSkKQEAgLTQwMzUsNyArNDA0OCw2IEBACiAJCWJyZWFrOwogCWNhc2UgMHhlZTogLyogb3V0IGR4LGFsICovCiAJY2FzZSAweGVmOiAvKiBvdXQgZHgsKGUvcilheCAqLwotCQljLT5kc3QudmFsID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXTsKIAlkb19pb19vdXQ6CiAJCW9wcy0+cGlvX291dF9lbXVsYXRlZChjdHh0LCBjLT5zcmMuYnl0ZXMsIGMtPmRzdC52YWwsCiAJCQkJICAgICAgJmMtPnNyYy52YWwsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKaW5kZXggZTE5MWMwOS4uZGI4MzJmZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYworKysgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCkBAIC05OTMsNiArOTkzLDcgQEAKIHN0YXRpYyB2b2lkIGxndWVzdF90aW1lX2luaXQodm9pZCkKIHsKIAkvKiBTZXQgdXAgdGhlIHRpbWVyIGludGVycnVwdCAoMCkgdG8gZ28gdG8gb3VyIHNpbXBsZSB0aW1lciByb3V0aW5lICovCisJbGd1ZXN0X3NldHVwX2lycSgwKTsKIAlpcnFfc2V0X2hhbmRsZXIoMCwgbGd1ZXN0X3RpbWVfaXJxKTsKIAogCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZsZ3Vlc3RfY2xvY2ssIE5TRUNfUEVSX1NFQyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCmluZGV4IDlmZDhhNTYuLjljYmI3MTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCkBAIC02MDksMTYgKzYwOSwyMSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVGhpcyBydW5zIG9ubHkgb24gdGhlIGN1cnJlbnQgY3B1LiBXZSB0cnkgdG8gZmluZCBhbiBMVlQgb2Zmc2V0IGFuZAorICogc2V0dXAgdGhlIGxvY2FsIEFQSUMuIEZvciB0aGlzIHdlIG11c3QgZGlzYWJsZSBwcmVlbXB0aW9uLiBPbgorICogc3VjY2VzcyB3ZSBpbml0aWFsaXplIGFsbCBub2RlcyB3aXRoIHRoaXMgb2Zmc2V0LiBUaGlzIHVwZGF0ZXMgdGhlbgorICogdGhlIG9mZnNldCBpbiB0aGUgSUJTX0NUTCBwZXItbm9kZSBtc3IuIFRoZSBwZXItY29yZSBBUElDIHNldHVwIG9mCisgKiB0aGUgSUJTIGludGVycnVwdCB2ZWN0b3IgaXMgY2FsbGVkIGZyb20gb3BfYW1kX3NldHVwX2N0cnMoKS9vcF8tCisgKiBhbWRfY3B1X3NodXRkb3duKCkgdXNpbmcgdGhlIG5ldyBvZmZzZXQuCisgKi8KIHN0YXRpYyBpbnQgZm9yY2VfaWJzX2VpbHZ0X3NldHVwKHZvaWQpCiB7CiAJaW50IG9mZnNldDsKIAlpbnQgcmV0OwogCi0JLyoKLQkgKiBmaW5kIHRoZSBuZXh0IGZyZWUgYXZhaWxhYmxlIEVJTFZUIGVudHJ5LCBza2lwIG9mZnNldCAwLAotCSAqIHBpbiBzZWFyY2ggdG8gdGhpcyBjcHUKLQkgKi8KIAlwcmVlbXB0X2Rpc2FibGUoKTsKKwkvKiBmaW5kIHRoZSBuZXh0IGZyZWUgYXZhaWxhYmxlIEVJTFZUIGVudHJ5LCBza2lwIG9mZnNldCAwICovCiAJZm9yIChvZmZzZXQgPSAxOyBvZmZzZXQgPCBBUElDX0VJTFZUX05SX01BWDsgb2Zmc2V0KyspIHsKIAkJaWYgKGdldF9laWx2dChvZmZzZXQpKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5jIGIvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYwppbmRleCA4YmZmN2U3Li4xYjJiNzNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5jCisrKyBiL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMKQEAgLTE4OSwxMCArMTg5LDEwIEBACiAJdW5zaWduZWQgYXJnaWR4ID0gcm91bmR1cChiLT5hcmdpZHgsIHNpemVvZih1NjQpKTsKIAogCUJVR19PTihwcmVlbXB0aWJsZSgpKTsKLQlCVUdfT04oYi0+YXJnaWR4ID4gTUNfQVJHUyk7CisJQlVHX09OKGItPmFyZ2lkeCA+PSBNQ19BUkdTKTsKIAogCWlmIChiLT5tY2lkeCA9PSBNQ19CQVRDSCB8fAotCSAgICAoYXJnaWR4ICsgYXJncykgPiBNQ19BUkdTKSB7CisJICAgIChhcmdpZHggKyBhcmdzKSA+PSBNQ19BUkdTKSB7CiAJCW1jX3N0YXRzX2ZsdXNoKGItPm1jaWR4ID09IE1DX0JBVENIID8gRkxfU0xPVFMgOiBGTF9BUkdTKTsKIAkJeGVuX21jX2ZsdXNoKCk7CiAJCWFyZ2lkeCA9IHJvdW5kdXAoYi0+YXJnaWR4LCBzaXplb2YodTY0KSk7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAlyZXQuYXJncyA9ICZiLT5hcmdzW2FyZ2lkeF07CiAJYi0+YXJnaWR4ID0gYXJnaWR4ICsgYXJnczsKIAotCUJVR19PTihiLT5hcmdpZHggPiBNQ19BUkdTKTsKKwlCVUdfT04oYi0+YXJnaWR4ID49IE1DX0FSR1MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIxNiw3ICsyMTYsNyBAQAogCXN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgcmV0ID0geyBOVUxMLCBOVUxMIH07CiAKIAlCVUdfT04ocHJlZW1wdGlibGUoKSk7Ci0JQlVHX09OKGItPmFyZ2lkeCA+IE1DX0FSR1MpOworCUJVR19PTihiLT5hcmdpZHggPj0gTUNfQVJHUyk7CiAKIAlpZiAoYi0+bWNpZHggPT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTIyNCwxNCArMjI0LDE0IEBACiAJaWYgKGItPmVudHJpZXNbYi0+bWNpZHggLSAxXS5vcCAhPSBvcCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICgoYi0+YXJnaWR4ICsgc2l6ZSkgPiBNQ19BUkdTKQorCWlmICgoYi0+YXJnaWR4ICsgc2l6ZSkgPj0gTUNfQVJHUykKIAkJcmV0dXJuIHJldDsKIAogCXJldC5tYyA9ICZiLT5lbnRyaWVzW2ItPm1jaWR4IC0gMV07CiAJcmV0LmFyZ3MgPSAmYi0+YXJnc1tiLT5hcmdpZHhdOwogCWItPmFyZ2lkeCArPSBzaXplOwogCi0JQlVHX09OKGItPmFyZ2lkeCA+IE1DX0FSR1MpOworCUJVR19PTihiLT5hcmdpZHggPj0gTUNfQVJHUyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWlvYy5jIGIvYmxvY2svYmxrLWlvYy5jCmluZGV4IGM4OTgwNDkuLjM0MmVhZTkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1pb2MuYworKysgYi9ibG9jay9ibGstaW9jLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAlpZiAoIWhsaXN0X2VtcHR5KCZpb2MtPmNpY19saXN0KSkgewogCQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKIAotCQljaWMgPSBsaXN0X2VudHJ5KGlvYy0+Y2ljX2xpc3QuZmlyc3QsIHN0cnVjdCBjZnFfaW9fY29udGV4dCwKKwkJY2ljID0gaGxpc3RfZW50cnkoaW9jLT5jaWNfbGlzdC5maXJzdCwgc3RydWN0IGNmcV9pb19jb250ZXh0LAogCQkJCQkJCQljaWNfbGlzdCk7CiAJCWNpYy0+ZHRvcihpb2MpOwogCX0KQEAgLTU3LDcgKzU3LDcgQEAKIAlpZiAoIWhsaXN0X2VtcHR5KCZpb2MtPmNpY19saXN0KSkgewogCQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKIAotCQljaWMgPSBsaXN0X2VudHJ5KGlvYy0+Y2ljX2xpc3QuZmlyc3QsIHN0cnVjdCBjZnFfaW9fY29udGV4dCwKKwkJY2ljID0gaGxpc3RfZW50cnkoaW9jLT5jaWNfbGlzdC5maXJzdCwgc3RydWN0IGNmcV9pb19jb250ZXh0LAogCQkJCQkJCQljaWNfbGlzdCk7CiAJCWNpYy0+ZXhpdChpb2MpOwogCX0KZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDdjNTJkNjguLjNjN2I1MzcgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJaW50IG5yX2NmcXE7CiAKIAkvKgotCSAqIFBlciBncm91cCBidXN5IHF1ZXVzIGF2ZXJhZ2UuIFVzZWZ1bCBmb3Igd29ya2xvYWQgc2xpY2UgY2FsYy4gV2UKKwkgKiBQZXIgZ3JvdXAgYnVzeSBxdWV1ZXMgYXZlcmFnZS4gVXNlZnVsIGZvciB3b3JrbG9hZCBzbGljZSBjYWxjLiBXZQogCSAqIGNyZWF0ZSB0aGUgYXJyYXkgZm9yIGVhY2ggcHJpbyBjbGFzcyBidXQgYXQgcnVuIHRpbWUgaXQgaXMgdXNlZAogCSAqIG9ubHkgZm9yIFJUIGFuZCBCRSBjbGFzcyBhbmQgc2xvdCBmb3IgSURMRSBjbGFzcyByZW1haW5zIHVudXNlZC4KIAkgKiBUaGlzIGlzIHByaW1hcmlseSBkb25lIHRvIGF2b2lkIGNvbmZ1c2lvbiBhbmQgYSBnY2Mgd2FybmluZy4KQEAgLTM2OSwxNiArMzY5LDE2IEBACiAjZGVmaW5lIGNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCBmbXQsIGFyZ3MuLi4pCVwKIAlibGtfYWRkX3RyYWNlX21zZygoY2ZxZCktPnF1ZXVlLCAiY2ZxJWQlYyAlcyAiIGZtdCwgKGNmcXEpLT5waWQsIFwKIAkJCWNmcV9jZnFxX3N5bmMoKGNmcXEpKSA/ICdTJyA6ICdBJywgXAotCQkJYmxrZ19wYXRoKCYoY2ZxcSktPmNmcWctPmJsa2cpLCAjI2FyZ3MpOworCQkJYmxrZ19wYXRoKCYoY2ZxcSktPmNmcWctPmJsa2cpLCAjI2FyZ3MpCiAKICNkZWZpbmUgY2ZxX2xvZ19jZnFnKGNmcWQsIGNmcWcsIGZtdCwgYXJncy4uLikJCQkJXAogCWJsa19hZGRfdHJhY2VfbXNnKChjZnFkKS0+cXVldWUsICIlcyAiIGZtdCwJCQlcCi0JCQkJYmxrZ19wYXRoKCYoY2ZxZyktPmJsa2cpLCAjI2FyZ3MpOyAgICAgIFwKKwkJCQlibGtnX3BhdGgoJihjZnFnKS0+YmxrZyksICMjYXJncykgICAgICAgXAogCiAjZWxzZQogI2RlZmluZSBjZnFfbG9nX2NmcXEoY2ZxZCwgY2ZxcSwgZm10LCBhcmdzLi4uKQlcCiAJYmxrX2FkZF90cmFjZV9tc2coKGNmcWQpLT5xdWV1ZSwgImNmcSVkICIgZm10LCAoY2ZxcSktPnBpZCwgIyNhcmdzKQotI2RlZmluZSBjZnFfbG9nX2NmcWcoY2ZxZCwgY2ZxZywgZm10LCBhcmdzLi4uKQkJZG8ge30gd2hpbGUgKDApOworI2RlZmluZSBjZnFfbG9nX2NmcWcoY2ZxZCwgY2ZxZywgZm10LCBhcmdzLi4uKQkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKICNkZWZpbmUgY2ZxX2xvZyhjZnFkLCBmbXQsIGFyZ3MuLi4pCVwKIAlibGtfYWRkX3RyYWNlX21zZygoY2ZxZCktPnF1ZXVlLCAiY2ZxICIgZm10LCAjI2FyZ3MpCkBAIC0zNzg2LDkgKzM3ODYsNiBAQAogCXJldHVybiAwOwogCiBxdWV1ZV9mYWlsOgotCWlmIChjaWMpCi0JCXB1dF9pb19jb250ZXh0KGNpYy0+aW9jKTsKLQogCWNmcV9zY2hlZHVsZV9kaXNwYXRjaChjZnFkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAljZnFfbG9nKGNmcWQsICJzZXRfcmVxdWVzdCBmYWlsIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IGRmYjZlOWQuLjdmMDk5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC0yODAyLDEwICsyODAyLDExIEBACiAJfQogCiAJLyoKLQkgKiBTb21lIGNvbnRyb2xsZXJzIGNhbid0IGJlIGZyb3plbiB2ZXJ5IHdlbGwgYW5kIG1heSBzZXQKLQkgKiBzcHVydWlvdXMgZXJyb3IgY29uZGl0aW9ucyBkdXJpbmcgcmVzZXQuICBDbGVhciBhY2N1bXVsYXRlZAotCSAqIGVycm9yIGluZm9ybWF0aW9uLiAgQXMgcmVzZXQgaXMgdGhlIGZpbmFsIHJlY292ZXJ5IGFjdGlvbiwKLQkgKiBub3RoaW5nIGlzIGxvc3QgYnkgZG9pbmcgdGhpcy4KKwkgKiBTb21lIGNvbnRyb2xsZXJzIGNhbid0IGJlIGZyb3plbiB2ZXJ5IHdlbGwgYW5kIG1heSBzZXQgc3B1cmlvdXMKKwkgKiBlcnJvciBjb25kaXRpb25zIGR1cmluZyByZXNldC4gIENsZWFyIGFjY3VtdWxhdGVkIGVycm9yCisJICogaW5mb3JtYXRpb24gYW5kIHJlLXRoYXcgdGhlIHBvcnQgaWYgZnJvemVuLiAgQXMgcmVzZXQgaXMgdGhlCisJICogZmluYWwgcmVjb3ZlcnkgYWN0aW9uIGFuZCB3ZSBjcm9zcyBjaGVjayBsaW5rIG9ubGluZW5lc3MgYWdhaW5zdAorCSAqIGRldmljZSBjbGFzc2lmaWNhdGlvbiBsYXRlciwgbm8gaG90cGx1ZyBldmVudCBpcyBsb3N0IGJ5IHRoaXMuCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUobGluay0+YXAtPmxvY2ssIGZsYWdzKTsKIAltZW1zZXQoJmxpbmstPmVoX2luZm8sIDAsIHNpemVvZihsaW5rLT5laF9pbmZvKSk7CkBAIC0yODE0LDYgKzI4MTUsOSBAQAogCWFwLT5wZmxhZ3MgJj0gfkFUQV9QRkxBR19FSF9QRU5ESU5HOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobGluay0+YXAtPmxvY2ssIGZsYWdzKTsKIAorCWlmIChhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0ZST1pFTikKKwkJYXRhX2VoX3RoYXdfcG9ydChhcCk7CisKIAkvKgogCSAqIE1ha2Ugc3VyZSBvbmxpbmVuZXNzIGFuZCBjbGFzc2lmaWNhdGlvbiByZXN1bHQgY29ycmVzcG9uZC4KIAkgKiBIb3RwbHVnIGNvdWxkIGhhdmUgaGFwcGVuZWQgZHVyaW5nIHJlc2V0IGFuZCBzb21lCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvY2xvY2tfb3BzLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvY2xvY2tfb3BzLmMKaW5kZXggYzBkZDA5ZC4uZWFhOGE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL2Nsb2NrX29wcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiB7CiAJc3RydWN0IHBtX2Nsa19ub3RpZmllcl9ibG9jayAqY2xrbmI7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKLQljaGFyICpjb25faWQ7CisJY2hhciAqKmNvbl9pZDsKIAlpbnQgZXJyb3I7CiAKIAlkZXZfZGJnKGRldiwgIiVzKCkgJWxkXG4iLCBfX2Z1bmNfXywgYWN0aW9uKTsKQEAgLTMwOSw4ICszMDksOCBAQAogCiAJCWRldi0+cHdyX2RvbWFpbiA9IGNsa25iLT5wd3JfZG9tYWluOwogCQlpZiAoY2xrbmItPmNvbl9pZHNbMF0pIHsKLQkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHNbMF07ICpjb25faWQ7IGNvbl9pZCsrKQotCQkJCXBtX3J1bnRpbWVfY2xrX2FkZChkZXYsIGNvbl9pZCk7CisJCQlmb3IgKGNvbl9pZCA9IGNsa25iLT5jb25faWRzOyAqY29uX2lkOyBjb25faWQrKykKKwkJCQlwbV9ydW50aW1lX2Nsa19hZGQoZGV2LCAqY29uX2lkKTsKIAkJfSBlbHNlIHsKIAkJCXBtX3J1bnRpbWVfY2xrX2FkZChkZXYsIE5VTEwpOwogCQl9CkBAIC0zODAsNyArMzgwLDcgQEAKIHsKIAlzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrICpjbGtuYjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOwotCWNoYXIgKmNvbl9pZDsKKwljaGFyICoqY29uX2lkOwogCiAJZGV2X2RiZyhkZXYsICIlcygpICVsZFxuIiwgX19mdW5jX18sIGFjdGlvbik7CiAKQEAgLTM4OSwxNiArMzg5LDE2IEBACiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIEJVU19OT1RJRllfQUREX0RFVklDRToKIAkJaWYgKGNsa25iLT5jb25faWRzWzBdKSB7Ci0JCQlmb3IgKGNvbl9pZCA9IGNsa25iLT5jb25faWRzWzBdOyAqY29uX2lkOyBjb25faWQrKykKLQkJCQllbmFibGVfY2xvY2soZGV2LCBjb25faWQpOworCQkJZm9yIChjb25faWQgPSBjbGtuYi0+Y29uX2lkczsgKmNvbl9pZDsgY29uX2lkKyspCisJCQkJZW5hYmxlX2Nsb2NrKGRldiwgKmNvbl9pZCk7CiAJCX0gZWxzZSB7CiAJCQllbmFibGVfY2xvY2soZGV2LCBOVUxMKTsKIAkJfQogCQlicmVhazsKIAljYXNlIEJVU19OT1RJRllfREVMX0RFVklDRToKIAkJaWYgKGNsa25iLT5jb25faWRzWzBdKSB7Ci0JCQlmb3IgKGNvbl9pZCA9IGNsa25iLT5jb25faWRzWzBdOyAqY29uX2lkOyBjb25faWQrKykKLQkJCQlkaXNhYmxlX2Nsb2NrKGRldiwgY29uX2lkKTsKKwkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHM7ICpjb25faWQ7IGNvbl9pZCsrKQorCQkJCWRpc2FibGVfY2xvY2soZGV2LCAqY29uX2lkKTsKIAkJfSBlbHNlIHsKIAkJCWRpc2FibGVfY2xvY2soZGV2LCBOVUxMKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggZTZmYzcxNi4uZjUzM2YzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0xOTIsNyArMTkyLDggQEAKIAkJCWlmIChsby0+eG1pdF90aW1lb3V0KQogCQkJCWRlbF90aW1lcl9zeW5jKCZ0aSk7CiAJCX0gZWxzZQotCQkJcmVzdWx0ID0ga2VybmVsX3JlY3Ztc2coc29jaywgJm1zZywgJmlvdiwgMSwgc2l6ZSwgMCk7CisJCQlyZXN1bHQgPSBrZXJuZWxfcmVjdm1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBzaXplLAorCQkJCQkJbXNnLm1zZ19mbGFncyk7CiAKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlzaWdpbmZvX3QgaW5mbzsKQEAgLTc1Myw5ICs3NTQsMjYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwYXJ0X3NoaWZ0ID0gMDsKLQlpZiAobWF4X3BhcnQgPiAwKQorCWlmIChtYXhfcGFydCA+IDApIHsKIAkJcGFydF9zaGlmdCA9IGZscyhtYXhfcGFydCk7CiAKKwkJLyoKKwkJICogQWRqdXN0IG1heF9wYXJ0IGFjY29yZGluZyB0byBwYXJ0X3NoaWZ0IGFzIGl0IGlzIGV4cG9ydGVkCisJCSAqIHRvIHVzZXIgc3BhY2Ugc28gdGhhdCB1c2VyIGNhbiBrbm93IHRoZSBtYXggbnVtYmVyIG9mCisJCSAqIHBhcnRpdGlvbiBrZXJuZWwgc2hvdWxkIGJlIGFibGUgdG8gbWFuYWdlLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgLTEgaXMgcmVxdWlyZWQgYmVjYXVzZSBwYXJ0aXRpb24gMCBpcyByZXNlcnZlZAorCQkgKiBmb3IgdGhlIHdob2xlIGRpc2suCisJCSAqLworCQltYXhfcGFydCA9ICgxVUwgPDwgcGFydF9zaGlmdCkgLSAxOworCX0KKworCWlmICgoMVVMIDw8IHBhcnRfc2hpZnQpID4gRElTS19NQVhfUEFSVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG5iZHNfbWF4ID4gMVVMIDw8IChNSU5PUkJJVFMgLSBwYXJ0X3NoaWZ0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlmb3IgKGkgPSAwOyBpIDwgbmJkc19tYXg7IGkrKykgewogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGFsbG9jX2Rpc2soMSA8PCBwYXJ0X3NoaWZ0KTsKIAkJaWYgKCFkaXNrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwppbmRleCBhMGFhYmQ5Li40NmI4MTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwpAQCAtMzIxLDcgKzMyMSw2IEBACiAJCXN0cmNweShkaXNrLT5kaXNrX25hbWUsIGNkLT5uYW1lKTsJLyogdW1tLi4uICovCiAJCWRpc2stPmZvcHMgPSAmcGNkX2Jkb3BzOwogCQlkaXNrLT5mbGFncyA9IEdFTkhEX0ZMX0JMT0NLX0VWRU5UU19PTl9FWENMX1dSSVRFOwotCQlkaXNrLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKaW5kZXggNmVjZjg5Yy4uMDc5YzA4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKQEAgLTYsMTAgKzYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fYmxrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdfaGVscGVycy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAKICNkZWZpbmUgUEFSVF9CSVRTIDQKIAogc3RhdGljIGludCBtYWpvciwgaW5kZXg7CitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdmlydGJsa193cTsKIAogc3RydWN0IHZpcnRpb19ibGsKIHsKQEAgLTI2LDYgKzI5LDkgQEAKIAogCW1lbXBvb2xfdCAqcG9vbDsKIAorCS8qIFByb2Nlc3MgY29udGV4dCBmb3IgY29uZmlnIHNwYWNlIHVwZGF0ZXMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29uZmlnX3dvcms7CisKIAkvKiBXaGF0IGhvc3QgdGVsbHMgdXMsIHBsdXMgMiBmb3IgaGVhZGVyICYgdGFpbGVyLiAqLwogCXVuc2lnbmVkIGludCBzZ19lbGVtczsKIApAQCAtMTQxLDcgKzE0Nyw3IEBACiAJbnVtID0gYmxrX3JxX21hcF9zZyhxLCB2YnItPnJlcSwgdmJsay0+c2cgKyBvdXQpOwogCiAJaWYgKHZici0+cmVxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgewotCQlzZ19zZXRfYnVmKCZ2YmxrLT5zZ1tudW0gKyBvdXQgKyBpbisrXSwgdmJyLT5yZXEtPnNlbnNlLCA5Nik7CisJCXNnX3NldF9idWYoJnZibGstPnNnW251bSArIG91dCArIGluKytdLCB2YnItPnJlcS0+c2Vuc2UsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiAJCXNnX3NldF9idWYoJnZibGstPnNnW251bSArIG91dCArIGluKytdLCAmdmJyLT5pbl9oZHIsCiAJCQkgICBzaXplb2YodmJyLT5pbl9oZHIpKTsKIAl9CkBAIC0yOTEsNiArMjk3LDQ2IEBACiB9CiBERVZJQ0VfQVRUUihzZXJpYWwsIFNfSVJVR08sIHZpcnRibGtfc2VyaWFsX3Nob3csIE5VTEwpOwogCitzdGF0aWMgdm9pZCB2aXJ0YmxrX2NvbmZpZ19jaGFuZ2VkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aXJ0aW9fYmxrLCBjb25maWdfd29yayk7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYgPSB2YmxrLT52ZGV2OworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gdmJsay0+ZGlzay0+cXVldWU7CisJY2hhciBjYXBfc3RyXzJbMTBdLCBjYXBfc3RyXzEwWzEwXTsKKwl1NjQgY2FwYWNpdHksIHNpemU7CisKKwkvKiBIb3N0IG11c3QgYWx3YXlzIHNwZWNpZnkgdGhlIGNhcGFjaXR5LiAqLworCXZkZXYtPmNvbmZpZy0+Z2V0KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgY2FwYWNpdHkpLAorCQkJICAmY2FwYWNpdHksIHNpemVvZihjYXBhY2l0eSkpOworCisJLyogSWYgY2FwYWNpdHkgaXMgdG9vIGJpZywgdHJ1bmNhdGUgd2l0aCB3YXJuaW5nLiAqLworCWlmICgoc2VjdG9yX3QpY2FwYWNpdHkgIT0gY2FwYWNpdHkpIHsKKwkJZGV2X3dhcm4oJnZkZXYtPmRldiwgIkNhcGFjaXR5ICVsbHUgdG9vIGxhcmdlOiB0cnVuY2F0aW5nXG4iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpY2FwYWNpdHkpOworCQljYXBhY2l0eSA9IChzZWN0b3JfdCktMTsKKwl9CisKKwlzaXplID0gY2FwYWNpdHkgKiBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocSk7CisJc3RyaW5nX2dldF9zaXplKHNpemUsIFNUUklOR19VTklUU18yLCBjYXBfc3RyXzIsIHNpemVvZihjYXBfc3RyXzIpKTsKKwlzdHJpbmdfZ2V0X3NpemUoc2l6ZSwgU1RSSU5HX1VOSVRTXzEwLCBjYXBfc3RyXzEwLCBzaXplb2YoY2FwX3N0cl8xMCkpOworCisJZGV2X25vdGljZSgmdmRldi0+ZGV2LAorCQkgICJuZXcgc2l6ZTogJWxsdSAlZC1ieXRlIGxvZ2ljYWwgYmxvY2tzICglcy8lcylcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyljYXBhY2l0eSwKKwkJICBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocSksCisJCSAgY2FwX3N0cl8xMCwgY2FwX3N0cl8yKTsKKworCXNldF9jYXBhY2l0eSh2YmxrLT5kaXNrLCBjYXBhY2l0eSk7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRibGtfY29uZmlnX2NoYW5nZWQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSB2ZGV2LT5wcml2OworCisJcXVldWVfd29yayh2aXJ0YmxrX3dxLCAmdmJsay0+Y29uZmlnX3dvcmspOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrOwpAQCAtMzI3LDYgKzM3Myw3IEBACiAJdmJsay0+dmRldiA9IHZkZXY7CiAJdmJsay0+c2dfZWxlbXMgPSBzZ19lbGVtczsKIAlzZ19pbml0X3RhYmxlKHZibGstPnNnLCB2YmxrLT5zZ19lbGVtcyk7CisJSU5JVF9XT1JLKCZ2YmxrLT5jb25maWdfd29yaywgdmlydGJsa19jb25maWdfY2hhbmdlZF93b3JrKTsKIAogCS8qIFdlIGV4cGVjdCBvbmUgdmlydHF1ZXVlLCBmb3Igb3V0cHV0LiAqLwogCXZibGstPnZxID0gdmlydGlvX2ZpbmRfc2luZ2xlX3ZxKHZkZXYsIGJsa19kb25lLCAicmVxdWVzdHMiKTsKQEAgLTQ3Nyw2ICs1MjQsOCBAQAogewogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gdmRldi0+cHJpdjsKIAorCWZsdXNoX3dvcmsoJnZibGstPmNvbmZpZ193b3JrKTsKKwogCS8qIE5vdGhpbmcgc2hvdWxkIGJlIHBlbmRpbmcuICovCiAJQlVHX09OKCFsaXN0X2VtcHR5KCZ2YmxrLT5yZXFzKSk7CiAKQEAgLTUwOCwyNyArNTU3LDQ3IEBACiAgKiBVc2UgX19yZWZkYXRhIHRvIGF2b2lkIHRoaXMgd2FybmluZy4KICAqLwogc3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIF9fcmVmZGF0YSB2aXJ0aW9fYmxrID0gewotCS5mZWF0dXJlX3RhYmxlID0gZmVhdHVyZXMsCi0JLmZlYXR1cmVfdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLAotCS5kcml2ZXIubmFtZSA9CUtCVUlMRF9NT0ROQU1FLAotCS5kcml2ZXIub3duZXIgPQlUSElTX01PRFVMRSwKLQkuaWRfdGFibGUgPQlpZF90YWJsZSwKLQkucHJvYmUgPQl2aXJ0YmxrX3Byb2JlLAotCS5yZW1vdmUgPQlfX2RldmV4aXRfcCh2aXJ0YmxrX3JlbW92ZSksCisJLmZlYXR1cmVfdGFibGUJCT0gZmVhdHVyZXMsCisJLmZlYXR1cmVfdGFibGVfc2l6ZQk9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLAorCS5kcml2ZXIubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKKwkuZHJpdmVyLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5pZF90YWJsZQkJPSBpZF90YWJsZSwKKwkucHJvYmUJCQk9IHZpcnRibGtfcHJvYmUsCisJLnJlbW92ZQkJCT0gX19kZXZleGl0X3AodmlydGJsa19yZW1vdmUpLAorCS5jb25maWdfY2hhbmdlZAkJPSB2aXJ0YmxrX2NvbmZpZ19jaGFuZ2VkLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogeworCWludCBlcnJvcjsKKworCXZpcnRibGtfd3EgPSBhbGxvY193b3JrcXVldWUoInZpcnRpby1ibGsiLCAwLCAwKTsKKwlpZiAoIXZpcnRibGtfd3EpCisJCXJldHVybiAtRU5PTUVNOworCiAJbWFqb3IgPSByZWdpc3Rlcl9ibGtkZXYoMCwgInZpcnRibGsiKTsKLQlpZiAobWFqb3IgPCAwKQotCQlyZXR1cm4gbWFqb3I7Ci0JcmV0dXJuIHJlZ2lzdGVyX3ZpcnRpb19kcml2ZXIoJnZpcnRpb19ibGspOworCWlmIChtYWpvciA8IDApIHsKKwkJZXJyb3IgPSBtYWpvcjsKKwkJZ290byBvdXRfZGVzdHJveV93b3JrcXVldWU7CisJfQorCisJZXJyb3IgPSByZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fYmxrKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfYmxrZGV2OworCXJldHVybiAwOworCitvdXRfdW5yZWdpc3Rlcl9ibGtkZXY6CisJdW5yZWdpc3Rlcl9ibGtkZXYobWFqb3IsICJ2aXJ0YmxrIik7CitvdXRfZGVzdHJveV93b3JrcXVldWU6CisJZGVzdHJveV93b3JrcXVldWUodmlydGJsa193cSk7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewogCXVucmVnaXN0ZXJfYmxrZGV2KG1ham9yLCAidmlydGJsayIpOwogCXVucmVnaXN0ZXJfdmlydGlvX2RyaXZlcigmdmlydGlvX2Jsayk7CisJZGVzdHJveV93b3JrcXVldWUodmlydGJsa193cSk7CiB9CiBtb2R1bGVfaW5pdChpbml0KTsKIG1vZHVsZV9leGl0KGZpbmkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9ibGtiYWNrLmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2Jsa2JhY2suYwppbmRleCBjNzM5MTBjLi41Y2YyOTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2Jsa2JhY2suYworKysgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2Jsa2JhY2suYwpAQCAtODA5LDExICs4MDksMTMgQEAKICBmYWlsZWRfaW5pdDoKIAlrZnJlZShibGtiay0+cGVuZGluZ19yZXFzKTsKIAlrZnJlZShibGtiay0+cGVuZGluZ19ncmFudF9oYW5kbGVzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbW1hcF9wYWdlczsgaSsrKSB7Ci0JCWlmIChibGtiay0+cGVuZGluZ19wYWdlc1tpXSkKLQkJCV9fZnJlZV9wYWdlKGJsa2JrLT5wZW5kaW5nX3BhZ2VzW2ldKTsKKwlpZiAoYmxrYmstPnBlbmRpbmdfcGFnZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1tYXBfcGFnZXM7IGkrKykgeworCQkJaWYgKGJsa2JrLT5wZW5kaW5nX3BhZ2VzW2ldKQorCQkJCV9fZnJlZV9wYWdlKGJsa2JrLT5wZW5kaW5nX3BhZ2VzW2ldKTsKKwkJfQorCQlrZnJlZShibGtiay0+cGVuZGluZ19wYWdlcyk7CiAJfQotCWtmcmVlKGJsa2JrLT5wZW5kaW5nX3BhZ2VzKTsKIAlrZnJlZShibGtiayk7CiAJYmxrYmsgPSBOVUxMOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2sveGVuYnVzLmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL3hlbmJ1cy5jCmluZGV4IDM0NTcwODIuLjZjYzBkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2sveGVuYnVzLmMKKysrIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay94ZW5idXMuYwpAQCAtMzU3LDE0ICszNTcsMTMgQEAKIAl9CiAKIAl2YmQtPmJkZXYgPSBiZGV2OwotCXZiZC0+c2l6ZSA9IHZiZF9zeih2YmQpOwotCiAJaWYgKHZiZC0+YmRldi0+YmRfZGlzayA9PSBOVUxMKSB7CiAJCURQUklOVEsoInhlbl92YmRfY3JlYXRlOiBkZXZpY2UgJTA4eCBkb2Vzbid0IGV4aXN0LlxuIiwKIAkJCXZiZC0+cGRldmljZSk7CiAJCXhlbl92YmRfZnJlZSh2YmQpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CisJdmJkLT5zaXplID0gdmJkX3N6KHZiZCk7CiAKIAlpZiAodmJkLT5iZGV2LT5iZF9kaXNrLT5mbGFncyAmIEdFTkhEX0ZMX0NEIHx8IGNkcm9tKQogCQl2YmQtPnR5cGUgfD0gVkRJU0tfQ0RST007CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCmluZGV4IGIzZjAxOTkuLjQ4YWQyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCkBAIC0zNTUsMjkgKzM1NSwyNCBAQAogICogICAgICAgICAgICAgZmxhZ3MgICAgICAgIHBvaW50ZXIgdG8gZmxhZ3MgZm9yIGRhdGEKICAqICAgICAgICAgICAgIGNvdW50ICAgICAgICBjb3VudCBvZiByZWNlaXZlZCBkYXRhIGluIGJ5dGVzCiAgKiAgICAgCi0gKiBSZXR1cm4gVmFsdWU6ICAgIE51bWJlciBvZiBieXRlcyByZWNlaXZlZAorICogUmV0dXJuIFZhbHVlOiAgICBOb25lCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGNpX3VhcnRfdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJY29uc3QgdTggKmRhdGEsIGNoYXIgKmZsYWdzLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBoY2lfdWFydF90dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqZGF0YSwgY2hhciAqZmxhZ3MsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgaGNpX3VhcnQgKmh1ID0gKHZvaWQgKil0dHktPmRpc2NfZGF0YTsKLQlpbnQgcmVjZWl2ZWQ7CiAKIAlpZiAoIWh1IHx8IHR0eSAhPSBodS0+dHR5KQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuOwogCiAJaWYgKCF0ZXN0X2JpdChIQ0lfVUFSVF9QUk9UT19TRVQsICZodS0+ZmxhZ3MpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrKCZodS0+cnhfbG9jayk7Ci0JcmVjZWl2ZWQgPSBodS0+cHJvdG8tPnJlY3YoaHUsICh2b2lkICopIGRhdGEsIGNvdW50KTsKLQlpZiAocmVjZWl2ZWQgPiAwKQotCQlodS0+aGRldi0+c3RhdC5ieXRlX3J4ICs9IHJlY2VpdmVkOworCWh1LT5wcm90by0+cmVjdihodSwgKHZvaWQgKikgZGF0YSwgY291bnQpOworCWh1LT5oZGV2LT5zdGF0LmJ5dGVfcnggKz0gY291bnQ7CiAJc3Bpbl91bmxvY2soJmh1LT5yeF9sb2NrKTsKIAogCXR0eV91bnRocm90dGxlKHR0eSk7Ci0KLQlyZXR1cm4gcmVjZWl2ZWQ7CiB9CiAKIHN0YXRpYyBpbnQgaGNpX3VhcnRfcmVnaXN0ZXJfZGV2KHN0cnVjdCBoY2lfdWFydCAqaHUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKaW5kZXggYWUxNWE0ZC4uNzg3OGRhODlkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS92aW9jZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwpAQCAtNjI3LDcgKzYyNyw2IEBACiAJZ2VuZGlzay0+Zm9wcyA9ICZ2aW9jZF9mb3BzOwogCWdlbmRpc2stPmZsYWdzID0gR0VOSERfRkxfQ0QgfCBHRU5IRF9GTF9SRU1PVkFCTEUgfAogCQkJIEdFTkhEX0ZMX0JMT0NLX0VWRU5UU19PTl9FWENMX1dSSVRFOwotCWdlbmRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCXNldF9jYXBhY2l0eShnZW5kaXNrLCAwKTsKIAlnZW5kaXNrLT5wcml2YXRlX2RhdGEgPSBkOwogCWQtPnZpb2NkX2Rpc2sgPSBnZW5kaXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2hwZXQuYyBiL2RyaXZlcnMvY2hhci9ocGV0LmMKaW5kZXggMDUxNDc0Yy4uMzRkNmExYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2hwZXQuYworKysgYi9kcml2ZXJzL2NoYXIvaHBldC5jCkBAIC0xNjMsMTEgKzE2MywzMiBAQAogCSAqIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgdHJlYXRpbmcgbm9uLXBlcmlvZGljIGxpa2UgcGVyaW9kaWMuCiAJICovCiAJaWYgKChkZXZwLT5oZF9mbGFncyAmIChIUEVUX0lFIHwgSFBFVF9QRVJJT0RJQykpID09IEhQRVRfSUUpIHsKLQkJdW5zaWduZWQgbG9uZyBtLCB0OworCQl1bnNpZ25lZCBsb25nIG0sIHQsIG1jLCBiYXNlLCBrOworCQlzdHJ1Y3QgaHBldCBfX2lvbWVtICpocGV0ID0gZGV2cC0+aGRfaHBldDsKKwkJc3RydWN0IGhwZXRzICpocGV0cCA9IGRldnAtPmhkX2hwZXRzOwogCiAJCXQgPSBkZXZwLT5oZF9pcmVxZnJlcTsKIAkJbSA9IHJlYWRfY291bnRlcigmZGV2cC0+aGRfdGltZXItPmhwZXRfY29tcGFyZSk7Ci0JCXdyaXRlX2NvdW50ZXIodCArIG0sICZkZXZwLT5oZF90aW1lci0+aHBldF9jb21wYXJlKTsKKwkJbWMgPSByZWFkX2NvdW50ZXIoJmhwZXQtPmhwZXRfbWMpOworCQkvKiBUaGUgdGltZSBmb3IgdGhlIG5leHQgaW50ZXJydXB0IHdvdWxkIGxvZ2ljYWxseSBiZSB0ICsgbSwKKwkJICogaG93ZXZlciwgaWYgd2UgYXJlIHZlcnkgdW5sdWNreSBhbmQgdGhlIGludGVycnVwdCBpcyBkZWxheWVkCisJCSAqIGZvciBsb25nZXIgdGhhbiB0IHRoZW4gd2Ugd2lsbCBjb21wbGV0ZWx5IG1pc3MgdGhlIG5leHQKKwkJICogaW50ZXJydXB0IGlmIHdlIHNldCB0ICsgbSBhbmQgYW4gYXBwbGljYXRpb24gd2lsbCBoYW5nLgorCQkgKiBUaGVyZWZvcmUgd2UgbmVlZCB0byBtYWtlIGEgbW9yZSBjb21wbGV4IGNvbXB1dGF0aW9uIGFzc3VtaW5nCisJCSAqIHRoYXQgdGhlcmUgZXhpc3RzIGEgayBmb3Igd2hpY2ggdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorCQkgKiBrICogdCArIGJhc2UgPCBtYyArIGRlbHRhCisJCSAqIChrICsgMSkgKiB0ICsgYmFzZSA+IG1jICsgZGVsdGEKKwkJICogd2hlcmUgdCBpcyB0aGUgaW50ZXJ2YWwgaW4gaHBldCB0aWNrcyBmb3IgdGhlIGdpdmVuIGZyZXEsCisJCSAqIGJhc2UgaXMgdGhlIHRoZW9yZXRpY2FsIHN0YXJ0IHZhbHVlIDAgPCBiYXNlIDwgdCwKKwkJICogbWMgaXMgdGhlIG1haW4gY291bnRlciB2YWx1ZSBhdCB0aGUgdGltZSBvZiB0aGUgaW50ZXJydXB0LAorCQkgKiBkZWx0YSBpcyB0aGUgdGltZSBpdCB0YWtlcyB0byB3cml0ZSB0aGUgYSB2YWx1ZSB0byB0aGUKKwkJICogY29tcGFyYXRvci4KKwkJICogayBtYXkgdGhlbiBiZSBjb21wdXRlZCBhcyAobWMgLSBiYXNlICsgZGVsdGEpIC8gdCAuCisJCSAqLworCQliYXNlID0gbWMgJSB0OworCQlrID0gKG1jIC0gYmFzZSArIGhwZXRwLT5ocF9kZWx0YSkgLyB0OworCQl3cml0ZV9jb3VudGVyKHQgKiAoayArIDEpICsgYmFzZSwKKwkJCSAgICAgICZkZXZwLT5oZF90aW1lci0+aHBldF9jb21wYXJlKTsKIAl9CiAKIAlpZiAoZGV2cC0+aGRfZmxhZ3MgJiBIUEVUX1NIQVJFRF9JUlEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCmluZGV4IDgzODU2OGEuLmZiNjhiMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCkBAIC0xNjc3LDE3ICsxNjc3LDEyIEBACiAJcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cyA9IDE7CiAJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fQ09OU09MRV9GX01VTFRJUE9SVCkpIHsKIAkJbXVsdGlwb3J0ID0gdHJ1ZTsKLQkJdmRldi0+ZmVhdHVyZXNbMF0gfD0gMSA8PCBWSVJUSU9fQ09OU09MRV9GX01VTFRJUE9SVDsKLQogCQl2ZGV2LT5jb25maWctPmdldCh2ZGV2LCBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnLAogCQkJCQkJIG1heF9ucl9wb3J0cyksCiAJCQkJICAmcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cywKIAkJCQkgIHNpemVvZihwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzKSk7CiAJfQogCi0JLyogTGV0IHRoZSBIb3N0IGtub3cgd2Ugc3VwcG9ydCBtdWx0aXBsZSBwb3J0cy4qLwotCXZkZXYtPmNvbmZpZy0+ZmluYWxpemVfZmVhdHVyZXModmRldik7Ci0KIAllcnIgPSBpbml0X3Zxcyhwb3J0ZGV2KTsKIAlpZiAoZXJyIDwgMCkgewogCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsICJFcnJvciAlZCBpbml0aWFsaXppbmcgdnFzXG4iLCBlcnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKaW5kZXggMDM2ZTU4Ni4uZGM3YzAzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KQEAgLTE1MywxMiArMTUyLDEwIEBACiB7CiAJaW50IHJldDsKIAotCS8qIHdha2UgdXAgZGV2aWNlIGFuZCBlbmFibGUgY2xvY2sgKi8KLQlwbV9ydW50aW1lX2dldF9zeW5jKCZwLT5wZGV2LT5kZXYpOworCS8qIGVuYWJsZSBjbG9jayAqLwogCXJldCA9IGNsa19lbmFibGUocC0+Y2xrKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgImNhbm5vdCBlbmFibGUgY2xvY2tcbiIpOwotCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZwLT5wZGV2LT5kZXYpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTkwLDkgKzE4Nyw4IEBACiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGluIENNVCBibG9jayAqLwogCXNoX2NtdF93cml0ZShwLCBDTUNTUiwgMCk7CiAKLQkvKiBzdG9wIGNsb2NrIGFuZCBtYXJrIGRldmljZSBhcyBpZGxlICovCisJLyogc3RvcCBjbG9jayAqLwogCWNsa19kaXNhYmxlKHAtPmNsayk7Ci0JcG1fcnVudGltZV9wdXRfc3luYygmcC0+cGRldi0+ZGV2KTsKIH0KIAogLyogcHJpdmF0ZSBmbGFncyAqLwpAQCAtNjY0LDcgKzY2MCw2IEBACiAKIAlpZiAocCkgewogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAia2VwdCBhcyBlYXJseXRpbWVyXG4iKTsKLQkJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNjc5LDkgKzY3NCw2IEBACiAJCWtmcmVlKHApOwogCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl9Ci0KLQlpZiAoIWlzX2Vhcmx5X3BsYXRmb3JtX2RldmljZShwZGV2KSkKLQkJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMKaW5kZXggMTcyOTYyOC4uODA4MTM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX3RtdS5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgpAQCAtMTEwLDEyICsxMDksMTAgQEAKIHsKIAlpbnQgcmV0OwogCi0JLyogd2FrZSB1cCBkZXZpY2UgYW5kIGVuYWJsZSBjbG9jayAqLwotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnAtPnBkZXYtPmRldik7CisJLyogZW5hYmxlIGNsb2NrICovCiAJcmV0ID0gY2xrX2VuYWJsZShwLT5jbGspOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiY2Fubm90IGVuYWJsZSBjbG9ja1xuIik7Ci0JCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnAtPnBkZXYtPmRldik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xNDQsOSArMTQxLDggQEAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgaW4gVE1VIGJsb2NrICovCiAJc2hfdG11X3dyaXRlKHAsIFRDUiwgMHgwMDAwKTsKIAotCS8qIHN0b3AgY2xvY2sgYW5kIG1hcmsgZGV2aWNlIGFzIGlkbGUgKi8KKwkvKiBzdG9wIGNsb2NrICovCiAJY2xrX2Rpc2FibGUocC0+Y2xrKTsKLQlwbV9ydW50aW1lX3B1dF9zeW5jKCZwLT5wZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgdm9pZCBzaF90bXVfc2V0X25leHQoc3RydWN0IHNoX3RtdV9wcml2ICpwLCB1bnNpZ25lZCBsb25nIGRlbHRhLApAQCAtNDE1LDcgKzQxMSw2IEBACiAKIAlpZiAocCkgewogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAia2VwdCBhcyBlYXJseXRpbWVyXG4iKTsKLQkJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDMwLDkgKzQyNSw2IEBACiAJCWtmcmVlKHApOwogCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl9Ci0KLQlpZiAoIWlzX2Vhcmx5X3BsYXRmb3JtX2RldmljZShwZGV2KSkKLQkJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKaW5kZXggYjYwYTRjMi4uODUzZjkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCkBAIC0zODcsNiArMzg3LDcgQEAKIAl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmY3B1ZnJlcV9zdGF0X2NwdV9ub3RpZmllcik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJY3B1ZnJlcV9zdGF0c19mcmVlX3RhYmxlKGNwdSk7CisJCWNwdWZyZXFfc3RhdHNfZnJlZV9zeXNmcyhjcHUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc2hkbWEuYyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKaW5kZXggNjM2ZTQwOS4uMDI4MzMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc2hkbWEuYworKysgYi9kcml2ZXJzL2RtYS9zaGRtYS5jCkBAIC0zNDMsNyArMzQzLDcgQEAKIAogCQlkbWFlX3NldF9kbWFycyhzaF9jaGFuLCBjZmctPm1pZF9yaWQpOwogCQlkbWFlX3NldF9jaGNyKHNoX2NoYW4sIGNmZy0+Y2hjcik7Ci0JfSBlbHNlIGlmICgoc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBDSENSKSAmIDB4ZjAwKSAhPSAweDQwMCkgeworCX0gZWxzZSB7CiAJCWRtYWVfaW5pdChzaF9jaGFuKTsKIAl9CiAKQEAgLTExNDQsNiArMTE0NCw4IEBACiAJLyogcGxhdGZvcm0gZGF0YSAqLwogCXNoZGV2LT5wZGF0YSA9IHBkYXRhOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc2hkZXYpOworCiAJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKIApAQCAtMTIxOSw2ICsxMjIxLDExIEBACiAJfSBlbHNlIHsKIAkJZG8gewogCQkJZm9yIChpID0gY2hhbmlycV9yZXMtPnN0YXJ0OyBpIDw9IGNoYW5pcnFfcmVzLT5lbmQ7IGkrKykgeworCQkJCWlmIChpcnFfY250ID49IFNIX0RNQUNfTUFYX0NIQU5ORUxTKSB7CisJCQkJCWlycV9jYXAgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisKIAkJCQlpZiAoKGVycmlycV9yZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9CSVRTKSA9PQogCQkJCSAgICBJT1JFU09VUkNFX0lSUV9TSEFSRUFCTEUpCiAJCQkJCWNoYW5fZmxhZ1tpcnFfY250XSA9IElSUUZfU0hBUkVEOwpAQCAtMTIyOCwxNSArMTIzNSwxMSBAQAogCQkJCQkiRm91bmQgSVJRICVkIGZvciBjaGFubmVsICVkXG4iLAogCQkJCQlpLCBpcnFfY250KTsKIAkJCQljaGFuX2lycVtpcnFfY250KytdID0gaTsKLQotCQkJCWlmIChpcnFfY250ID49IFNIX0RNQUNfTUFYX0NIQU5ORUxTKQotCQkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKGlycV9jbnQgPj0gU0hfRE1BQ19NQVhfQ0hBTk5FTFMpIHsKLQkJCQlpcnFfY2FwID0gMTsKKwkJCWlmIChpcnFfY250ID49IFNIX0RNQUNfTUFYX0NIQU5ORUxTKQogCQkJCWJyZWFrOwotCQkJfQorCiAJCQljaGFuaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LAogCQkJCQkJSU9SRVNPVVJDRV9JUlEsICsraXJxcmVzKTsKIAkJfSB3aGlsZSAoaXJxX2NudCA8IHBkYXRhLT5jaGFubmVsX251bSAmJiBjaGFuaXJxX3Jlcyk7CkBAIC0xMjU2LDcgKzEyNTksNiBAQAogCiAJcG1fcnVudGltZV9wdXQoJnBkZXYtPmRldik7CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzaGRldik7CiAJZG1hX2FzeW5jX2RldmljZV9yZWdpc3Rlcigmc2hkZXYtPmNvbW1vbik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTI3OCw2ICsxMjgwLDggQEAKIAogCWlmIChkbWFycykKIAkJaW91bm1hcChzaGRldi0+ZG1hcnMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiBlbWFwZG1hcnM6CiAJaW91bm1hcChzaGRldi0+Y2hhbl9yZWcpOwogCXN5bmNocm9uaXplX3JjdSgpOwpAQCAtMTMxNiw2ICsxMzIwLDggQEAKIAkJaW91bm1hcChzaGRldi0+ZG1hcnMpOwogCWlvdW5tYXAoc2hkZXYtPmNoYW5fcmVnKTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCiAJc3luY2hyb25pemVfcmN1KCk7CiAJa2ZyZWUoc2hkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYwppbmRleCBmMDMyZTQ0Li5iZmU3MjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKQEAgLTEwOCw3ICsxMDgsOSBAQAogICovCiB1bnNpZ25lZCBsb25nIF9faW5pdCBmaW5kX2liZnRfcmVnaW9uKHVuc2lnbmVkIGxvbmcgKnNpemVwKQogeworI2lmZGVmIENPTkZJR19BQ1BJCiAJaW50IGk7CisjZW5kaWYKIAlpYmZ0X2FkZHIgPSBOVUxMOwogCiAjaWZkZWYgQ09ORklHX0FDUEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGIvZHJpdmVycy9ncGlvL0tjb25maWcKaW5kZXggNGE3ZjYzMS4uMjk2NzAwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTg3LDMyICs4NywyMCBAQAogCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgR1BJTyBmdW5jdGlvbmFsaXR5IG9mIElUODc2MUUgc3VwZXIgSS9PIGNoaXAuCiAKIGNvbmZpZyBHUElPX0VYWU5PUzQKLQlib29sICJTYW1zdW5nIEV4eW5vczQgR1BJTyBsaWJyYXJ5IHN1cHBvcnQiCi0JZGVmYXVsdCB5IGlmIENQVV9FWFlOT1M0MjEwCi0JZGVwZW5kcyBvbiBBUk0KLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBTYW1zdW5nIEV4eW5vczQgc2VyaWVzIFNvQ3MgR1BJTyBsaWJyYXJ5CisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQ1BVX0VYWU5PUzQyMTAKIAogY29uZmlnIEdQSU9fUExBVF9TQU1TVU5HCi0JYm9vbCAiU2Ftc3VuZyBTb0NzIEdQSU8gbGlicmFyeSBzdXBwb3J0IgotCWRlZmF1bHQgeSBpZiBTQU1TVU5HX0dQSU9MSUJfNEJJVAotCWRlcGVuZHMgb24gQVJNCi0JaGVscAotCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgU2Ftc3VuZyBTb0NzIEdQSU8gbGlicmFyeQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNBTVNVTkdfR1BJT0xJQl80QklUCiAKIGNvbmZpZyBHUElPX1M1UEMxMDAKLQlib29sICJTYW1zdW5nIFM1UEMxMDAgR1BJTyBsaWJyYXJ5IHN1cHBvcnQiCi0JZGVmYXVsdCB5IGlmIENQVV9TNVBDMTAwCi0JZGVwZW5kcyBvbiBBUk0KLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBTYW1zdW5nIFM1UEMxMDAgU29DcyBHUElPIGxpYnJhcnkKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBDUFVfUzVQQzEwMAogCiBjb25maWcgR1BJT19TNVBWMjEwCi0JYm9vbCAiU2Ftc3VuZyBTNVBWMjEwL1M1UEMxMTAgR1BJTyBsaWJyYXJ5IHN1cHBvcnQiCi0JZGVmYXVsdCB5IGlmIENQVV9TNVBWMjEwCi0JZGVwZW5kcyBvbiBBUk0KLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBTYW1zdW5nIFM1UFYyMTAvUzVQQzExMCBTb0NzIEdQSU8gbGlicmFyeQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIENQVV9TNVBWMjEwCiAKIGNvbmZpZyBHUElPX1BMMDYxCiAJYm9vbCAiUHJpbWVDZWxsIFBMMDYxIEdQSU8gc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWV4eW5vczQuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWV4eW5vczQuYwppbmRleCBkNTRjYTZhLi45MDI5ODM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1leHlub3M0LmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tZXh5bm9zNC5jCkBAIC0yMSwxNiArMjEsMzcgQEAKICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy1oZWxwZXJzLmg+CiAKK2ludCBzM2NfZ3Bpb19zZXRwdWxsX2V4eW5vczQoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkJdW5zaWduZWQgaW50IG9mZiwgczNjX2dwaW9fcHVsbF90IHB1bGwpCit7CisJaWYgKHB1bGwgPT0gUzNDX0dQSU9fUFVMTF9VUCkKKwkJcHVsbCA9IDM7CisKKwlyZXR1cm4gczNjX2dwaW9fc2V0cHVsbF91cGRvd24oY2hpcCwgb2ZmLCBwdWxsKTsKK30KKworczNjX2dwaW9fcHVsbF90IHMzY19ncGlvX2dldHB1bGxfZXh5bm9zNChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkJCXVuc2lnbmVkIGludCBvZmYpCit7CisJczNjX2dwaW9fcHVsbF90IHB1bGw7CisKKwlwdWxsID0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24oY2hpcCwgb2ZmKTsKKwlpZiAocHVsbCA9PSAzKQorCQlwdWxsID0gUzNDX0dQSU9fUFVMTF9VUDsKKworCXJldHVybiBwdWxsOworfQorCiBzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvX2NmZyA9IHsKIAkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQsCi0JLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCi0JLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF9leHlub3M0LAorCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfZXh5bm9zNCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2ZnIGdwaW9fY2ZnX25vaW50ID0gewogCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdCwKLQkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93biwKLQkuZ2V0X3B1bGwJPSBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93biwKKwkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX2V4eW5vczQsCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF9leHlub3M0LAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLW5vbWFkaWsuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW5vbWFkaWsuYwppbmRleCA0OTYxZWY5Li4yYzIxMmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1ub21hZGlrLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tbm9tYWRpay5jCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDkgU1RNaWNyb2VsZWN0cm9uaWNzCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxlc3NhbmRybyBSdWJpbmkgPHJ1YmluaUB1bmlwdi5pdD4KICAqICAgUmV3cml0dGVuIGJhc2VkIG9uIHdvcmsgYnkgUHJhZnVsbGEgV0FEQVNLQVIgPHByYWZ1bGxhLndhZGFza2FyQHN0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC00OSw2ICs1MCw3IEBACiAJdTMyICgqZ2V0X3NlY29uZGFyeV9zdGF0dXMpKHVuc2lnbmVkIGludCBiYW5rKTsKIAl2b2lkICgqc2V0X2lvZm9yY2UpKGJvb2wgZW5hYmxlKTsKIAlzcGlubG9ja190IGxvY2s7CisJYm9vbCBzbGVlcG1vZGU7CiAJLyogS2VlcCB0cmFjayBvZiBjb25maWd1cmVkIGVkZ2VzICovCiAJdTMyIGVkZ2VfcmlzaW5nOwogCXUzMiBlZGdlX2ZhbGxpbmc7CkBAIC0zOTMsMTQgKzM5NSwyNSBAQAogICogQGdwaW86IHBpbiBudW1iZXIKICAqIEBtb2RlOiBOTUtfR1BJT19TTFBNX0lOUFVUIG9yIE5NS19HUElPX1NMUE1fTk9DSEFOR0UsCiAgKgotICogU2V0cyB0aGUgc2xlZXAgbW9kZSBvZiBhIHBpbi4gIElmIEBtb2RlIGlzIE5NS19HUElPX1NMUE1fSU5QVVQsIHRoZSBwaW4gaXMKLSAqIGNoYW5nZWQgdG8gYW4gaW5wdXQgKHdpdGggcHVsbHVwL2Rvd24gZW5hYmxlZCkgaW4gc2xlZXAgYW5kIGRlZXAgc2xlZXAuICBJZgotICogQG1vZGUgaXMgTk1LX0dQSU9fU0xQTV9OT0NIQU5HRSwgdGhlIHBpbiByZW1haW5zIGluIHRoZSBzdGF0ZSBpdCB3YXMKLSAqIGNvbmZpZ3VyZWQgZXZlbiB3aGVuIGluIHNsZWVwIGFuZCBkZWVwIHNsZWVwLgorICogVGhpcyByZWdpc3RlciBpcyBhY3R1YWxseSBpbiB0aGUgcGlubXV4IGxheWVyLCBub3QgdGhlIEdQSU8gYmxvY2sgaXRzZWxmLgorICogVGhlIEdQSU8xQl9TTFBNIHJlZ2lzdGVyIGRlZmluZXMgdGhlIEdQSU8gbW9kZSB3aGVuIFNMRUVQL0RFRVAtU0xFRVAKKyAqIG1vZGUgaXMgZW50ZXJlZCAoaS5lLiB3aGVuIHNpZ25hbCBJT0ZPUkNFIGlzIEhJR0ggYnkgdGhlIHBsYXRmb3JtIGNvZGUpLgorICogRWFjaCBHUElPIGNhbiBiZSBjb25maWd1cmVkIHRvIGJlIGZvcmNlZCBpbnRvIEdQSU8gbW9kZSB3aGVuIElPRk9SQ0UgaXMKKyAqIEhJR0gsIG92ZXJyaWRpbmcgdGhlIG5vcm1hbCBzZXR0aW5nIGRlZmluZWQgYnkgR1BJT19BRlNFTHggcmVnaXN0ZXJzLgorICogV2hlbiBJT0ZPUkNFIHJldHVybnMgTE9XIChieSBzb2Z0d2FyZSwgYWZ0ZXIgU0xFRVAvREVFUC1TTEVFUCBleGl0KSwKKyAqIHRoZSBHUElPcyByZXR1cm4gdG8gdGhlIG5vcm1hbCBzZXR0aW5nIGRlZmluZWQgYnkgR1BJT19BRlNFTHggcmVnaXN0ZXJzLgogICoKLSAqIE9uIERCODUwMHYyIG9ud2FyZHMsIHRoaXMgc2V0dGluZyBsb3NlcyB0aGUgcHJldmlvdXMgbWVhbmluZyBhbmQgaW5zdGVhZAotICogaW5kaWNhdGVzIGlmIHdha2V1cCBkZXRlY3Rpb24gaXMgZW5hYmxlZCBvbiB0aGUgcGluLiAgTm90ZSB0aGF0Ci0gKiBlbmFibGVfaXJxX3dha2UoKSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5hYmxlIHdha2V1cCBkZXRlY3Rpb24uCisgKiBJZiBAbW9kZSBpcyBOTUtfR1BJT19TTFBNX0lOUFVULCB0aGUgY29ycmVzcG9uZGluZyBHUElPIGlzIHN3aXRjaGVkIHRvIEdQSU8KKyAqIG1vZGUgd2hlbiBzaWduYWwgSU9GT1JDRSBpcyBISUdIIChpLmUuIHdoZW4gU0xFRVAvREVFUC1TTEVFUCBtb2RlIGlzCisgKiBlbnRlcmVkKSByZWdhcmRsZXNzIG9mIHRoZSBhbHRmdW5jdGlvbiBzZWxlY3RlZC4gQWxzbyB3YWtlLXVwIGRldGVjdGlvbiBpcworICogRU5BQkxFRC4KKyAqCisgKiBJZiBAbW9kZSBpcyBOTUtfR1BJT19TTFBNX05PQ0hBTkdFLCB0aGUgY29ycmVzcG9uZGluZyBHUElPIHJlbWFpbnMKKyAqIGNvbnRyb2xsZWQgYnkgTk1LX0dQSU9fREFUQywgTk1LX0dQSU9fREFUUywgTk1LX0dQSU9fRElSLCBOTUtfR1BJT19QRElTCisgKiAoZm9yIGFsdGZ1bmN0aW9uIEdQSU8pIG9yIHJlc3BlY3RpdmUgb24tY2hpcCBwZXJpcGhlcmFscyAoZm9yIG90aGVyCisgKiBhbHRmdW5jcykgd2hlbiBJT0ZPUkNFIGlzIEhJR0guIEFsc28gd2FrZS11cCBkZXRlY3Rpb24gRElTQUJMRUQuCisgKgorICogTm90ZSB0aGF0IGVuYWJsZV9pcnFfd2FrZSgpIHdpbGwgYXV0b21hdGljYWxseSBlbmFibGUgd2FrZXVwIGRldGVjdGlvbi4KICAqLwogaW50IG5ta19ncGlvX3NldF9zbHBtKGludCBncGlvLCBlbnVtIG5ta19ncGlvX3NscG0gbW9kZSkKIHsKQEAgLTU1MSw2ICs1NjQsMTIgQEAKIHN0YXRpYyB2b2lkIF9fbm1rX2dwaW9fc2V0X3dha2Uoc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwLAogCQkJCWludCBncGlvLCBib29sIG9uKQogeworCWlmIChubWtfY2hpcC0+c2xlZXBtb2RlKSB7CisJCV9fbm1rX2dwaW9fc2V0X3NscG0obm1rX2NoaXAsIGdwaW8gLSBubWtfY2hpcC0+Y2hpcC5iYXNlLAorCQkJCSAgICBvbiA/IE5NS19HUElPX1NMUE1fV0FLRVVQX0VOQUJMRQorCQkJCSAgICA6IE5NS19HUElPX1NMUE1fV0FLRVVQX0RJU0FCTEUpOworCX0KKwogCV9fbm1rX2dwaW9faXJxX21vZGlmeShubWtfY2hpcCwgZ3BpbywgV0FLRSwgb24pOwogfQogCkBAIC05MDEsNyArOTIwLDcgQEAKIAkJd3JpdGVsKGNoaXAtPmZ3aW1zYyAmIGNoaXAtPnJlYWxfd2FrZSwKIAkJICAgICAgIGNoaXAtPmFkZHIgKyBOTUtfR1BJT19GV0lNU0MpOwogCi0JCWlmIChjcHVfaXNfdTg1MDB2MigpKSB7CisJCWlmIChjaGlwLT5zbGVlcG1vZGUpIHsKIAkJCWNoaXAtPnNscG0gPSByZWFkbChjaGlwLT5hZGRyICsgTk1LX0dQSU9fU0xQQyk7CiAKIAkJCS8qIDAgLT4gd2FrZXVwIGVuYWJsZSAqLwpAQCAtOTIzLDcgKzk0Miw3IEBACiAJCXdyaXRlbChjaGlwLT5yd2ltc2MsIGNoaXAtPmFkZHIgKyBOTUtfR1BJT19SV0lNU0MpOwogCQl3cml0ZWwoY2hpcC0+ZndpbXNjLCBjaGlwLT5hZGRyICsgTk1LX0dQSU9fRldJTVNDKTsKIAotCQlpZiAoY3B1X2lzX3U4NTAwdjIoKSkKKwkJaWYgKGNoaXAtPnNsZWVwbW9kZSkKIAkJCXdyaXRlbChjaGlwLT5zbHBtLCBjaGlwLT5hZGRyICsgTk1LX0dQSU9fU0xQQyk7CiAJfQogfQpAQCAtMTAxMCw2ICsxMDI5LDcgQEAKIAlubWtfY2hpcC0+c2Vjb25kYXJ5X3BhcmVudF9pcnEgPSBzZWNvbmRhcnlfaXJxOwogCW5ta19jaGlwLT5nZXRfc2Vjb25kYXJ5X3N0YXR1cyA9IHBkYXRhLT5nZXRfc2Vjb25kYXJ5X3N0YXR1czsKIAlubWtfY2hpcC0+c2V0X2lvZm9yY2UgPSBwZGF0YS0+c2V0X2lvZm9yY2U7CisJbm1rX2NoaXAtPnNsZWVwbW9kZSA9IHBkYXRhLT5zdXBwb3J0c19zbGVlcG1vZGU7CiAJc3Bpbl9sb2NrX2luaXQoJm5ta19jaGlwLT5sb2NrKTsKIAogCWNoaXAgPSAmbm1rX2NoaXAtPmNoaXA7CkBAIC0xMDY1LDUgKzEwODUsMyBAQAogTU9EVUxFX0FVVEhPUigiUHJhZnVsbGEgV0FEQVNLQVIgYW5kIEFsZXNzYW5kcm8gUnViaW5pIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk5vbWFkaWsgR1BJTyBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMKaW5kZXggNmM1MTE5MS4uMDFmNzRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tb21hcC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYwpAQCAtNDMyLDcgKzQzMiw2IEBACiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gYmFuay0+YmFzZTsKIAl1MzIgZ3Bpb19iaXQgPSAxIDw8IGdwaW87Ci0JdTMyIHZhbDsKIAogCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewogCQlNT0RfUkVHX0JJVChPTUFQNF9HUElPX0xFVkVMREVURUNUMCwgZ3Bpb19iaXQsCkBAIC00NTUsMTUgKzQ1NCw4IEBACiAJfQogCWlmIChsaWtlbHkoIShiYW5rLT5ub25fd2FrZXVwX2dwaW9zICYgZ3Bpb19iaXQpKSkgewogCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJCWlmICh0cmlnZ2VyICE9IDApCi0JCQkJX19yYXdfd3JpdGVsKDEgPDwgZ3BpbywgYmFuay0+YmFzZSsKLQkJCQkJCU9NQVA0X0dQSU9fSVJRV0FLRU4wKTsKLQkJCWVsc2UgewotCQkJCXZhbCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKwotCQkJCQkJCU9NQVA0X0dQSU9fSVJRV0FLRU4wKTsKLQkJCQlfX3Jhd193cml0ZWwodmFsICYgKH4oMSA8PCBncGlvKSksIGJhbmstPmJhc2UgKwotCQkJCQkJCSBPTUFQNF9HUElPX0lSUVdBS0VOMCk7Ci0JCQl9CisJCQlNT0RfUkVHX0JJVChPTUFQNF9HUElPX0lSUVdBS0VOMCwgZ3Bpb19iaXQsCisJCQkJdHJpZ2dlciAhPSAwKTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBHUElPIHdha2V1cCByZXF1ZXN0IGNhbiBvbmx5IGJlIGdlbmVyYXRlZCBvbiBlZGdlCkBAIC0xMTM0LDggKzExMjYsMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgZ3BpbyA9IGQtPmlycSAtIElIX0dQSU9fQkFTRTsKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJX3Jlc2V0X2dwaW8oYmFuaywgZ3Bpbyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBncGlvX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQpAQCAtMTE1MCw5ICsxMTQ1LDEyIEBACiB7CiAJdW5zaWduZWQgaW50IGdwaW8gPSBkLT5pcnEgLSBJSF9HUElPX0JBU0U7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFuaywgZ3BpbywgMCk7CiAJX3NldF9ncGlvX3RyaWdnZXJpbmcoYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIElSUV9UWVBFX05PTkUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgZ3Bpb191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKQEAgLTExNjEsNyArMTE1OSw5IEBACiAJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXVuc2lnbmVkIGludCBpcnFfbWFzayA9IDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3Bpbyk7CiAJdTMyIHRyaWdnZXIgPSBpcnFkX2dldF90cmlnZ2VyX3R5cGUoZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJaWYgKHRyaWdnZXIpCiAJCV9zZXRfZ3Bpb190cmlnZ2VyaW5nKGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCB0cmlnZ2VyKTsKIApAQCAtMTE3Myw2ICsxMTczLDcgQEAKIAl9CiAKIAlfc2V0X2dwaW9faXJxZW5hYmxlKGJhbmssIGdwaW8sIDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncGlvX2lycV9jaGlwID0gewpAQCAtMTUyNCw3ICsxNTI1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dwaW9fY2hpcF9pbml0KHN0cnVjdCBncGlvX2JhbmsgKmJhbmspCitzdGF0aWMgdm9pZCBfX2RldmluaXQgb21hcF9ncGlvX2NoaXBfaW5pdChzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rKQogewogCWludCBqOwogCXN0YXRpYyBpbnQgZ3BpbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKaW5kZXggM2UyNTdhNS4uNjFlMWVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKQEAgLTQ2LDEwICs0NiwxMSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1hcGxpc3QsIGhlYWQpIHsKIAkJLyoKIAkJICogQmVjYXVzZSB0aGUga2VybmVsLXVzZXJzcGFjZSBBQkkgaXMgZml4ZWQgYXQgYSAzMi1iaXQgb2Zmc2V0Ci0JCSAqIHdoaWxlIFBDSSByZXNvdXJjZXMgbWF5IGxpdmUgYWJvdmUgdGhhdCwgd2UgaWdub3JlIHRoZSBtYXAKLQkJICogb2Zmc2V0IGZvciBtYXBzIG9mIHR5cGUgX0RSTV9GUkFNRUJVRkZFUiBvciBfRFJNX1JFR0lTVEVSUy4KLQkJICogSXQgaXMgYXNzdW1lZCB0aGF0IGVhY2ggZHJpdmVyIHdpbGwgaGF2ZSBvbmx5IG9uZSByZXNvdXJjZSBvZgotCQkgKiBlYWNoIHR5cGUuCisJCSAqIHdoaWxlIFBDSSByZXNvdXJjZXMgbWF5IGxpdmUgYWJvdmUgdGhhdCwgd2Ugb25seSBjb21wYXJlIHRoZQorCQkgKiBsb3dlciAzMiBiaXRzIG9mIHRoZSBtYXAgb2Zmc2V0IGZvciBtYXBzIG9mIHR5cGUKKwkJICogX0RSTV9GUkFNRUJVRkZFUiBvciBfRFJNX1JFR0lTVEVSUy4KKwkJICogSXQgaXMgYXNzdW1lZCB0aGF0IGlmIGEgZHJpdmVyIGhhdmUgbW9yZSB0aGFuIG9uZSByZXNvdXJjZQorCQkgKiBvZiBlYWNoIHR5cGUsIHRoZSBsb3dlciAzMiBiaXRzIGFyZSBkaWZmZXJlbnQuCiAJCSAqLwogCQlpZiAoIWVudHJ5LT5tYXAgfHwKIAkJICAgIG1hcC0+dHlwZSAhPSBlbnRyeS0+bWFwLT50eXBlIHx8CkBAIC01OSw5ICs2MCwxMiBAQAogCQljYXNlIF9EUk1fU0hNOgogCQkJaWYgKG1hcC0+ZmxhZ3MgIT0gX0RSTV9DT05UQUlOU19MT0NLKQogCQkJCWJyZWFrOworCQkJcmV0dXJuIGVudHJ5OwogCQljYXNlIF9EUk1fUkVHSVNURVJTOgogCQljYXNlIF9EUk1fRlJBTUVfQlVGRkVSOgotCQkJcmV0dXJuIGVudHJ5OworCQkJaWYgKChlbnRyeS0+bWFwLT5vZmZzZXQgJiAweGZmZmZmZmZmKSA9PQorCQkJICAgIChtYXAtPm9mZnNldCAmIDB4ZmZmZmZmZmYpKQorCQkJCXJldHVybiBlbnRyeTsKIAkJZGVmYXVsdDogLyogTWFrZSBnY2MgaGFwcHkgKi8KIAkJCTsKIAkJfQpAQCAtMTgzLDkgKzE4Nyw2IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogI2VuZGlmCi0jaWZkZWYgX19hbHBoYV9fCi0JCW1hcC0+b2Zmc2V0ICs9IGRldi0+aG9zZS0+bWVtX3NwYWNlLT5zdGFydDsKLSNlbmRpZgogCQkvKiBTb21lIGRyaXZlcnMgcHJlaW5pdGlhbGl6ZSBzb21lIG1hcHMsIHdpdGhvdXQgdGhlIFggU2VydmVyCiAJCSAqIG5lZWRpbmcgdG8gYmUgYXdhcmUgb2YgaXQuICBUaGVyZWZvcmUsIHdlIGp1c3QgcmV0dXJuIHN1Y2Nlc3MKIAkJICogd2hlbiB0aGUgc2VydmVyIHRyaWVzIHRvIGNyZWF0ZSBhIGR1cGxpY2F0ZSBtYXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCmluZGV4IDg3Mjc0N2MuLjIxMDU4ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCkBAIC0xMTEzLDcgKzExMTMsNyBAQAogCWlmIChjYXJkX3Jlcy0+Y291bnRfZmJzID49IGZiX2NvdW50KSB7CiAJCWNvcGllZCA9IDA7CiAJCWZiX2lkID0gKHVpbnQzMl90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWNhcmRfcmVzLT5mYl9pZF9wdHI7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZmIsICZmaWxlX3ByaXYtPmZicywgaGVhZCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZiLCAmZmlsZV9wcml2LT5mYnMsIGZpbHBfaGVhZCkgewogCQkJaWYgKHB1dF91c2VyKGZiLT5iYXNlLmlkLCBmYl9pZCArIGNvcGllZCkpIHsKIAkJCQlyZXQgPSAtRUZBVUxUOwogCQkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCmluZGV4IDJjM2ZjYmQuLjVkYjk2ZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCkBAIC01MjYsNyArNTI2LDcgQEAKIHN0YXRpYyByZXNvdXJjZV9zaXplX3QgZHJtX2NvcmVfZ2V0X3JlZ19vZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBfX2FscGhhX18KLQlyZXR1cm4gZGV2LT5ob3NlLT5kZW5zZV9tZW1fYmFzZSAtIGRldi0+aG9zZS0+bWVtX3NwYWNlLT5zdGFydDsKKwlyZXR1cm4gZGV2LT5ob3NlLT5kZW5zZV9tZW1fYmFzZTsKICNlbHNlCiAJcmV0dXJuIDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggNTFjMjI1Ny4uNGQ0NjQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAgLTc3Niw3ICs3NzYsNyBAQAogCXNlcV9wcmludGYobSwgIiAgSU5TVFBNOiAweCUwOHhcbiIsIGVycm9yLT5pbnN0cG0pOwogCXNlcV9wcmludGYobSwgIiAgc2Vxbm86IDB4JTA4eFxuIiwgZXJyb3ItPnNlcW5vKTsKIAotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3M7IGkrKykKIAkJc2VxX3ByaW50ZihtLCAiICBmZW5jZVslZF0gPSAlMDhsbHhcbiIsIGksIGVycm9yLT5mZW5jZVtpXSk7CiAKIAlpZiAoZXJyb3ItPmFjdGl2ZV9ibykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGVlNjYwMzUuLmY2M2VlMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNzE2LDYgKzcxNiw3IEBACiAJc3RydWN0IGludGVsX2ZiZGV2ICpmYmRldjsKIAogCXN0cnVjdCBkcm1fcHJvcGVydHkgKmJyb2FkY2FzdF9yZ2JfcHJvcGVydHk7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqZm9yY2VfYXVkaW9fcHJvcGVydHk7CiAKIAlhdG9taWNfdCBmb3JjZXdha2VfY291bnQ7CiB9IGRybV9pOTE1X3ByaXZhdGVfdDsKQEAgLTkwOSwxMyArOTEwLDYgQEAKIAl9IG1tOwogfTsKIAotZW51bSBpbnRlbF9jaGlwX2ZhbWlseSB7Ci0JQ0hJUF9JOFhYID0gMHgwMSwKLQlDSElQX0k5WFggPSAweDAyLAotCUNISVBfSTkxNSA9IDB4MDQsCi0JQ0hJUF9JOTY1ID0gMHgwOCwKLX07Ci0KICNkZWZpbmUgSU5URUxfSU5GTyhkZXYpCSgoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICopIChkZXYpLT5kZXZfcHJpdmF0ZSktPmluZm8pCiAKICNkZWZpbmUgSVNfSTgzMChkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgzNTc3KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggMGIyZTE2Ny4uOTRjODRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIAkJICogcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UKIAkJICogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKIAkJICovCi0JCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgKFBBR0VfU0laRS0xKTsKKwkJcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpOwogCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKIAkJaWYgKChwYWdlX29mZnNldCArIHJlbWFpbikgPiBQQUdFX1NJWkUpCiAJCQlwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwpAQCAtNDUzLDkgKzQ1Myw5IEBACiAJCSAqIGRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aCBkYXRhX3BhZ2VfaW5kZXggcGFnZS4KIAkJICogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKIAkJICovCi0JCXNobWVtX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgflBBR0VfTUFTSzsKKwkJc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpOwogCQlkYXRhX3BhZ2VfaW5kZXggPSBkYXRhX3B0ciAvIFBBR0VfU0laRSAtIGZpcnN0X2RhdGFfcGFnZTsKLQkJZGF0YV9wYWdlX29mZnNldCA9IGRhdGFfcHRyICYgflBBR0VfTUFTSzsKKwkJZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKGRhdGFfcHRyKTsKIAogCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKIAkJaWYgKChzaG1lbV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKQEAgLTQ2NSw4ICs0NjUsMTAgQEAKIAogCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlX2dmcChtYXBwaW5nLCBvZmZzZXQgPj4gUEFHRV9TSElGVCwKIAkJCQkJICAgR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVDTEFJTUFCTEUpOwotCQlpZiAoSVNfRVJSKHBhZ2UpKQotCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CisJCWlmIChJU19FUlIocGFnZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIocGFnZSk7CisJCQlnb3RvIG91dDsKKwkJfQogCiAJCWlmIChkb19iaXQxN19zd2l6emxpbmcpIHsKIAkJCXNsb3dfc2htZW1fYml0MTdfY29weShwYWdlLApAQCAtNjM4LDggKzY0MCw4IEBACiAJCSAqIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlwYWdlX2Jhc2UgPSAob2Zmc2V0ICYgfihQQUdFX1NJWkUtMSkpOwotCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUtMSk7CisJCXBhZ2VfYmFzZSA9IG9mZnNldCAmIFBBR0VfTUFTSzsKKwkJcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpOwogCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKIAkJaWYgKChwYWdlX29mZnNldCArIHJlbWFpbikgPiBQQUdFX1NJWkUpCiAJCQlwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwpAQCAtNjUwLDcgKzY1Miw2IEBACiAJCSAqLwogCQlpZiAoZmFzdF91c2VyX3dyaXRlKGRldl9wcml2LT5tbS5ndHRfbWFwcGluZywgcGFnZV9iYXNlLAogCQkJCSAgICBwYWdlX29mZnNldCwgdXNlcl9kYXRhLCBwYWdlX2xlbmd0aCkpCi0KIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKQEAgLTczMCw5ICs3MzEsOSBAQAogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KIAkJZ3R0X3BhZ2VfYmFzZSA9IG9mZnNldCAmIFBBR0VfTUFTSzsKLQkJZ3R0X3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgflBBR0VfTUFTSzsKKwkJZ3R0X3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJZGF0YV9wYWdlX2luZGV4ID0gZGF0YV9wdHIgLyBQQUdFX1NJWkUgLSBmaXJzdF9kYXRhX3BhZ2U7Ci0JCWRhdGFfcGFnZV9vZmZzZXQgPSBkYXRhX3B0ciAmIH5QQUdFX01BU0s7CisJCWRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhX3B0cik7CiAKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgoZ3R0X3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQpAQCAtNzkxLDcgKzc5Miw3IEBACiAJCSAqIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUtMSk7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgocGFnZV9vZmZzZXQgKyByZW1haW4pID4gUEFHRV9TSVpFKQogCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKQEAgLTg5Niw5ICs4OTcsOSBAQAogCQkgKiBkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGggZGF0YV9wYWdlX2luZGV4IHBhZ2UuCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldCAmIH5QQUdFX01BU0s7CisJCXNobWVtX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJZGF0YV9wYWdlX2luZGV4ID0gZGF0YV9wdHIgLyBQQUdFX1NJWkUgLSBmaXJzdF9kYXRhX3BhZ2U7Ci0JCWRhdGFfcGFnZV9vZmZzZXQgPSBkYXRhX3B0ciAmIH5QQUdFX01BU0s7CisJCWRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhX3B0cik7CiAKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgoc2htZW1fcGFnZV9vZmZzZXQgKyBwYWdlX2xlbmd0aCkgPiBQQUdFX1NJWkUpCkBAIC0xNDUwLDggKzE0NTEsOSBAQAogCSAqIGVkZ2Ugb2YgYW4gZXZlbiB0aWxlIHJvdyAod2hlcmUgdGlsZSByb3dzIGFyZSBjb3VudGVkIGFzIGlmIHRoZSBibyBpcwogCSAqIHBsYWNlZCBpbiBhIGZlbmNlZCBndHQgcmVnaW9uKS4KIAkgKi8KLQlpZiAoSVNfR0VOMihkZXYpIHx8Ci0JICAgIChvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kgJiYgSEFTXzEyOF9CWVRFX1lfVElMSU5HKGRldikpKQorCWlmIChJU19HRU4yKGRldikpCisJCXRpbGVfaGVpZ2h0ID0gMTY7CisJZWxzZSBpZiAob2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZICYmIEhBU18xMjhfQllURV9ZX1RJTElORyhkZXYpKQogCQl0aWxlX2hlaWdodCA9IDMyOwogCWVsc2UKIAkJdGlsZV9oZWlnaHQgPSA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKaW5kZXggYjc5NjE5YS4uYjlmYWZlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC01MTcsNyArNTE3LDcgQEAKIAlpZiAoZGVfaWlyICYgREVfUElQRUFfVkJMQU5LX0lWQikKIAkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAotCWlmIChkZV9paXIgJiBERV9QSVBFQl9WQkxBTktfSVZCKTsKKwlpZiAoZGVfaWlyICYgREVfUElQRUJfVkJMQU5LX0lWQikKIAkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKTsKIAogCS8qIGNoZWNrIGV2ZW50IGZyb20gUENIICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IGU5M2Y5M2MuLjA5NzlkODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC0yODgsNiArMjg4LDggQEAKIAkJICogVGhpcyBtYXkgYmUgYSBEVkktSSBjb25uZWN0b3Igd2l0aCBhIHNoYXJlZCBEREMKIAkJICogbGluayBiZXR3ZWVuIGFuYWxvZyBhbmQgZGlnaXRhbCBvdXRwdXRzLCBzbyB3ZQogCQkgKiBoYXZlIHRvIGNoZWNrIHRoZSBFRElEIGlucHV0IHNwZWMgb2YgdGhlIGF0dGFjaGVkIGRldmljZS4KKwkJICoKKwkJICogT24gdGhlIG90aGVyIGhhbmQsIHdoYXQgc2hvdWxkIHdlIGRvIGlmIGl0IGlzIGEgYnJva2VuIEVESUQ/CiAJCSAqLwogCQlpZiAoZWRpZCAhPSBOVUxMKSB7CiAJCQlpc19kaWdpdGFsID0gZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMOwpAQCAtMjk4LDYgKzMwMCw4IEBACiAJCWlmICghaXNfZGlnaXRhbCkgewogCQkJRFJNX0RFQlVHX0tNUygiQ1JUIGRldGVjdGVkIHZpYSBEREM6MHg1MCBbRURJRF1cbiIpOwogCQkJcmV0dXJuIHRydWU7CisJCX0gZWxzZSB7CisJCQlEUk1fREVCVUdfS01TKCJDUlQgbm90IGRldGVjdGVkIHZpYSBEREM6MHg1MCBbRURJRCByZXBvcnRzIGEgZGlnaXRhbCBwYW5lbF1cbiIpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggZjU1M2RkZmQuLjgxYTkwNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTM5ODMsNTQgKzM5ODMsNiBAQAogI2RlZmluZSBJTEtfTFAwX1BMQU5FX0xBVEVOQ1kJCTcwMAogI2RlZmluZSBJTEtfTFAwX0NVUlNPUl9MQVRFTkNZCQkxMzAwCiAKLXN0YXRpYyBib29sIGlyb25sYWtlX2NvbXB1dGVfd20wKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJIGludCBwaXBlLAotCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyAqZGlzcGxheSwKLQkJCQkgaW50IGRpc3BsYXlfbGF0ZW5jeV9ucywKLQkJCQkgY29uc3Qgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgKmN1cnNvciwKLQkJCQkgaW50IGN1cnNvcl9sYXRlbmN5X25zLAotCQkJCSBpbnQgKnBsYW5lX3dtLAotCQkJCSBpbnQgKmN1cnNvcl93bSkKLXsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0JaW50IGh0b3RhbCwgaGRpc3BsYXksIGNsb2NrLCBwaXhlbF9zaXplOwotCWludCBsaW5lX3RpbWVfdXMsIGxpbmVfY291bnQ7Ci0JaW50IGVudHJpZXMsIHRsYl9taXNzOwotCi0JY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldiwgcGlwZSk7Ci0JaWYgKGNydGMtPmZiID09IE5VTEwgfHwgIWNydGMtPmVuYWJsZWQpCi0JCXJldHVybiBmYWxzZTsKLQotCWh0b3RhbCA9IGNydGMtPm1vZGUuaHRvdGFsOwotCWhkaXNwbGF5ID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKLQljbG9jayA9IGNydGMtPm1vZGUuY2xvY2s7Ci0JcGl4ZWxfc2l6ZSA9IGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCAvIDg7Ci0KLQkvKiBVc2UgdGhlIHNtYWxsIGJ1ZmZlciBtZXRob2QgdG8gY2FsY3VsYXRlIHBsYW5lIHdhdGVybWFyayAqLwotCWVudHJpZXMgPSAoKGNsb2NrICogcGl4ZWxfc2l6ZSAvIDEwMDApICogZGlzcGxheV9sYXRlbmN5X25zKSAvIDEwMDA7Ci0JdGxiX21pc3MgPSBkaXNwbGF5LT5maWZvX3NpemUqZGlzcGxheS0+Y2FjaGVsaW5lX3NpemUgLSBoZGlzcGxheSAqIDg7Ci0JaWYgKHRsYl9taXNzID4gMCkKLQkJZW50cmllcyArPSB0bGJfbWlzczsKLQllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIGRpc3BsYXktPmNhY2hlbGluZV9zaXplKTsKLQkqcGxhbmVfd20gPSBlbnRyaWVzICsgZGlzcGxheS0+Z3VhcmRfc2l6ZTsKLQlpZiAoKnBsYW5lX3dtID4gKGludClkaXNwbGF5LT5tYXhfd20pCi0JCSpwbGFuZV93bSA9IGRpc3BsYXktPm1heF93bTsKLQotCS8qIFVzZSB0aGUgbGFyZ2UgYnVmZmVyIG1ldGhvZCB0byBjYWxjdWxhdGUgY3Vyc29yIHdhdGVybWFyayAqLwotCWxpbmVfdGltZV91cyA9ICgoaHRvdGFsICogMTAwMCkgLyBjbG9jayk7Ci0JbGluZV9jb3VudCA9IChjdXJzb3JfbGF0ZW5jeV9ucyAvIGxpbmVfdGltZV91cyArIDEwMDApIC8gMTAwMDsKLQllbnRyaWVzID0gbGluZV9jb3VudCAqIDY0ICogcGl4ZWxfc2l6ZTsKLQl0bGJfbWlzcyA9IGN1cnNvci0+Zmlmb19zaXplKmN1cnNvci0+Y2FjaGVsaW5lX3NpemUgLSBoZGlzcGxheSAqIDg7Ci0JaWYgKHRsYl9taXNzID4gMCkKLQkJZW50cmllcyArPSB0bGJfbWlzczsKLQllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIGN1cnNvci0+Y2FjaGVsaW5lX3NpemUpOwotCSpjdXJzb3Jfd20gPSBlbnRyaWVzICsgY3Vyc29yLT5ndWFyZF9zaXplOwotCWlmICgqY3Vyc29yX3dtID4gKGludCljdXJzb3ItPm1heF93bSkKLQkJKmN1cnNvcl93bSA9IChpbnQpY3Vyc29yLT5tYXhfd207Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQogLyoKICAqIENoZWNrIHRoZSB3bSByZXN1bHQuCiAgKgpAQCAtNDEzOSwxMiArNDA5MSwxMiBAQAogCXVuc2lnbmVkIGludCBlbmFibGVkOwogCiAJZW5hYmxlZCA9IDA7Ci0JaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMCwKLQkJCQkgJmlyb25sYWtlX2Rpc3BsYXlfd21faW5mbywKLQkJCQkgSUxLX0xQMF9QTEFORV9MQVRFTkNZLAotCQkJCSAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCi0JCQkJIElMS19MUDBfQ1VSU09SX0xBVEVOQ1ksCi0JCQkJICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKKwlpZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgMCwKKwkJCSAgICAmaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLAorCQkJICAgIElMS19MUDBfUExBTkVfTEFURU5DWSwKKwkJCSAgICAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCisJCQkgICAgSUxLX0xQMF9DVVJTT1JfTEFURU5DWSwKKwkJCSAgICAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CiAJCUk5MTVfV1JJVEUoV00wX1BJUEVBX0lMSywKIAkJCSAgIChwbGFuZV93bSA8PCBXTTBfUElQRV9QTEFORV9TSElGVCkgfCBjdXJzb3Jfd20pOwogCQlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVybWFya3MgRm9yIHBpcGUgQSAtIgpAQCAtNDE1MywxMiArNDEwNSwxMiBAQAogCQllbmFibGVkIHw9IDE7CiAJfQogCi0JaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMSwKLQkJCQkgJmlyb25sYWtlX2Rpc3BsYXlfd21faW5mbywKLQkJCQkgSUxLX0xQMF9QTEFORV9MQVRFTkNZLAotCQkJCSAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCi0JCQkJIElMS19MUDBfQ1VSU09SX0xBVEVOQ1ksCi0JCQkJICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKKwlpZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgMSwKKwkJCSAgICAmaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLAorCQkJICAgIElMS19MUDBfUExBTkVfTEFURU5DWSwKKwkJCSAgICAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCisJCQkgICAgSUxLX0xQMF9DVVJTT1JfTEFURU5DWSwKKwkJCSAgICAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CiAJCUk5MTVfV1JJVEUoV00wX1BJUEVCX0lMSywKIAkJCSAgIChwbGFuZV93bSA8PCBXTTBfUElQRV9QTEFORV9TSElGVCkgfCBjdXJzb3Jfd20pOwogCQlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVybWFya3MgRm9yIHBpcGUgQiAtIgpAQCAtNDIyMywxMCArNDE3NSwxMCBAQAogCXVuc2lnbmVkIGludCBlbmFibGVkOwogCiAJZW5hYmxlZCA9IDA7Ci0JaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMCwKLQkJCQkgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbywgbGF0ZW5jeSwKLQkJCQkgJnNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZvLCBsYXRlbmN5LAotCQkJCSAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CisJaWYgKGc0eF9jb21wdXRlX3dtMChkZXYsIDAsCisJCQkgICAgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbywgbGF0ZW5jeSwKKwkJCSAgICAmc2FuZHlicmlkZ2VfY3Vyc29yX3dtX2luZm8sIGxhdGVuY3ksCisJCQkgICAgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgewogCQlJOTE1X1dSSVRFKFdNMF9QSVBFQV9JTEssCiAJCQkgICAocGxhbmVfd20gPDwgV00wX1BJUEVfUExBTkVfU0hJRlQpIHwgY3Vyc29yX3dtKTsKIAkJRFJNX0RFQlVHX0tNUygiRklGTyB3YXRlcm1hcmtzIEZvciBwaXBlIEEgLSIKQEAgLTQyMzUsMTAgKzQxODcsMTAgQEAKIAkJZW5hYmxlZCB8PSAxOwogCX0KIAotCWlmIChpcm9ubGFrZV9jb21wdXRlX3dtMChkZXYsIDEsCi0JCQkJICZzYW5keWJyaWRnZV9kaXNwbGF5X3dtX2luZm8sIGxhdGVuY3ksCi0JCQkJICZzYW5keWJyaWRnZV9jdXJzb3Jfd21faW5mbywgbGF0ZW5jeSwKLQkJCQkgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgeworCWlmIChnNHhfY29tcHV0ZV93bTAoZGV2LCAxLAorCQkJICAgICZzYW5keWJyaWRnZV9kaXNwbGF5X3dtX2luZm8sIGxhdGVuY3ksCisJCQkgICAgJnNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZvLCBsYXRlbmN5LAorCQkJICAgICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKIAkJSTkxNV9XUklURShXTTBfUElQRUJfSUxLLAogCQkJICAgKHBsYW5lX3dtIDw8IFdNMF9QSVBFX1BMQU5FX1NISUZUKSB8IGN1cnNvcl93bSk7CiAJCURSTV9ERUJVR19LTVMoIkZJRk8gd2F0ZXJtYXJrcyBGb3IgcGlwZSBCIC0iCkBAIC03Njc1LDYgKzc2MjcsNyBAQAogCQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gTlVMTDsKIAkJfSBlbHNlCiAJCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBwaW5ldmlld191cGRhdGVfd207CisJCWRldl9wcml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5nID0gZ2VuM19pbml0X2Nsb2NrX2dhdGluZzsKIAl9IGVsc2UgaWYgKElTX0c0WChkZXYpKSB7CiAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IGc0eF91cGRhdGVfd207CiAJCWRldl9wcml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5nID0gZzR4X2luaXRfY2xvY2tfZ2F0aW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggYTRkODAzMS4uMzkxYjU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC01OSw4ICs1OSw2IEBACiAJYm9vbCBpc19wY2hfZWRwOwogCXVpbnQ4X3QJdHJhaW5fc2V0WzRdOwogCXVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07Ci0KLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpmb3JjZV9hdWRpb19wcm9wZXJ0eTsKIH07CiAKIC8qKgpAQCAtMTcwMiw3ICsxNzAwLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKHByb3BlcnR5ID09IGludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgeworCWlmIChwcm9wZXJ0eSA9PSBkZXZfcHJpdi0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKIAkJaW50IGkgPSB2YWw7CiAJCWJvb2wgaGFzX2F1ZGlvOwogCkBAIC0xODQxLDE2ICsxODM5LDcgQEAKIHN0YXRpYyB2b2lkCiBpbnRlbF9kcF9hZGRfcHJvcGVydGllcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKLQotCWludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSA9Ci0JCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX1JBTkdFLCAiZm9yY2VfYXVkaW8iLCAyKTsKLQlpZiAoaW50ZWxfZHAtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7Ci0JCWludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzBdID0gLTE7Ci0JCWludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzFdID0gMTsKLQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLCBpbnRlbF9kcC0+Zm9yY2VfYXVkaW9fcHJvcGVydHksIDApOwotCX0KLQorCWludGVsX2F0dGFjaF9mb3JjZV9hdWRpb19wcm9wZXJ0eShjb25uZWN0b3IpOwogCWludGVsX2F0dGFjaF9icm9hZGNhc3RfcmdiX3Byb3BlcnR5KGNvbm5lY3Rvcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggODMxZDdhNC4uOWZmYTYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTIzNiw2ICsyMzYsNyBAQAogaW50IGludGVsX2RkY19nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmMsIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gYm9vbCBpbnRlbF9kZGNfcHJvYmUoc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIsIGludCBkZGNfYnVzKTsKIAorZXh0ZXJuIHZvaWQgaW50ZWxfYXR0YWNoX2ZvcmNlX2F1ZGlvX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogZXh0ZXJuIHZvaWQgaW50ZWxfYXR0YWNoX2Jyb2FkY2FzdF9yZ2JfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiAKIGV4dGVybiB2b2lkIGludGVsX2NydF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IGYyODliODYuLmFhMGE4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKIAlib29sIGhhc19oZG1pX3Npbms7CiAJYm9vbCBoYXNfYXVkaW87CiAJaW50IGZvcmNlX2F1ZGlvOwotCXN0cnVjdCBkcm1fcHJvcGVydHkgKmZvcmNlX2F1ZGlvX3Byb3BlcnR5OwogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRlbF9oZG1pICplbmNfdG9faW50ZWxfaGRtaShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC0xOTQsNyArMTkzLDcgQEAKIAlpZiAobW9kZS0+Y2xvY2sgPiAxNjUwMDApCiAJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CiAJaWYgKG1vZGUtPmNsb2NrIDwgMjAwMDApCi0JCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisJCXJldHVybiBNT0RFX0NMT0NLX0xPVzsKIAogCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikKIAkJcmV0dXJuIE1PREVfTk9fREJMRVNDQU47CkBAIC0yODcsNyArMjg2LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKHByb3BlcnR5ID09IGludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7CisJaWYgKHByb3BlcnR5ID09IGRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewogCQlpbnQgaSA9IHZhbDsKIAkJYm9vbCBoYXNfYXVkaW87CiAKQEAgLTM2NSwxNiArMzY0LDcgQEAKIHN0YXRpYyB2b2lkCiBpbnRlbF9oZG1pX2FkZF9wcm9wZXJ0aWVzKHN0cnVjdCBpbnRlbF9oZG1pICppbnRlbF9oZG1pLCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKLQotCWludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5ID0KLQkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsICJmb3JjZV9hdWRpbyIsIDIpOwotCWlmIChpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewotCQlpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzBdID0gLTE7Ci0JCWludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LT52YWx1ZXNbMV0gPSAxOwotCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsIGludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LCAwKTsKLQl9Ci0KKwlpbnRlbF9hdHRhY2hfZm9yY2VfYXVkaW9fcHJvcGVydHkoY29ubmVjdG9yKTsKIAlpbnRlbF9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShjb25uZWN0b3IpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggNjdjYjA3Ni4uYjI4ZjdiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtNzI3LDYgKzcyNywxNCBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJVODAwIiksCiAJCX0sCiAJfSwKKwl7CisJCS5jYWxsYmFjayA9IGludGVsX25vX2x2ZHNfZG1pX2NhbGxiYWNrLAorCQkuaWRlbnQgPSAiQXN1cyBFZWVCb3ggUEMgRUIxMDA3IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIElOQy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiRUIxMDA3IiksCisJCX0sCisJfSwKIAogCXsgfQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vZGVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jCmluZGV4IDkwMzRkZDhmLi4zYjI2YTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vZGVzLmMKQEAgLTgxLDYgKzgxLDM2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgKmZvcmNlX2F1ZGlvX25hbWVzW10gPSB7CisJIm9mZiIsCisJImF1dG8iLAorCSJvbiIsCit9OworCit2b2lkCitpbnRlbF9hdHRhY2hfZm9yY2VfYXVkaW9fcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wOworCWludCBpOworCisJcHJvcCA9IGRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eTsKKwlpZiAocHJvcCA9PSBOVUxMKSB7CisJCXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9FTlVNLAorCQkJCQkgICAiYXVkaW8iLAorCQkJCQkgICBBUlJBWV9TSVpFKGZvcmNlX2F1ZGlvX25hbWVzKSk7CisJCWlmIChwcm9wID09IE5VTEwpCisJCQlyZXR1cm47CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9yY2VfYXVkaW9fbmFtZXMpOyBpKyspCisJCQlkcm1fcHJvcGVydHlfYWRkX2VudW0ocHJvcCwgaSwgaS0xLCBmb3JjZV9hdWRpb19uYW1lc1tpXSk7CisKKwkJZGV2X3ByaXYtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5ID0gcHJvcDsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLCBwcm9wLCAwKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKmJyb2FkY2FzdF9yZ2JfbmFtZXNbXSA9IHsKIAkiRnVsbCIsCiAJIkxpbWl0ZWQgMTY6MjM1IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCA3NTQwODZmLi4zMGZlNTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC0xNDgsOCArMTQ4LDYgQEAKIAlpbnQgICBmb3JtYXRfc3VwcG9ydGVkX251bTsKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9mb3JtYXQ7CiAKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpmb3JjZV9hdWRpb19wcm9wZXJ0eTsKLQogCS8qIGFkZCB0aGUgcHJvcGVydHkgZm9yIHRoZSBTRFZPLVRWICovCiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqbGVmdDsKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpyaWdodDsKQEAgLTE3MTIsNyArMTcxMCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChwcm9wZXJ0eSA9PSBpbnRlbF9zZHZvX2Nvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKKwlpZiAocHJvcGVydHkgPT0gZGV2X3ByaXYtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7CiAJCWludCBpID0gdmFsOwogCQlib29sIGhhc19hdWRpbzsKIApAQCAtMjAzNywxNSArMjAzNSw3IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+YmFzZS5iYXNlLmRldjsKIAotCWNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHkgPQotCQlkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9SQU5HRSwgImZvcmNlX2F1ZGlvIiwgMik7Ci0JaWYgKGNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKLQkJY29ubmVjdG9yLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzBdID0gLTE7Ci0JCWNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHktPnZhbHVlc1sxXSA9IDE7Ci0JCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UuYmFzZSwKLQkJCQkJICAgICAgY29ubmVjdG9yLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSwgMCk7Ci0JfQotCisJaW50ZWxfYXR0YWNoX2ZvcmNlX2F1ZGlvX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UuYmFzZSk7CiAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQgJiYgSVNfTU9CSUxFKGRldikpCiAJCWludGVsX2F0dGFjaF9icm9hZGNhc3RfcmdiX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UuYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oCmluZGV4IDEwODRmYTQuLjU0NTU4YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oCkBAIC0xOTUsMjkgKzE5NSwxMCBAQAogCiAjZGVmaW5lIG1nYV9mbHVzaF93cml0ZV9jb21iaW5lKCkJRFJNX1dSSVRFTUVNT1JZQkFSUklFUigpCiAKLSNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfX2FscGhhX18pCi0jZGVmaW5lIE1HQV9CQVNFKHJlZykJCSgodW5zaWduZWQgbG9uZykoZGV2X3ByaXYtPm1taW8tPmhhbmRsZSkpCi0jZGVmaW5lIE1HQV9BRERSKHJlZykJCShNR0FfQkFTRShyZWcpICsgcmVnKQotCi0jZGVmaW5lIE1HQV9ERVJFRihyZWcpCQkoKih2b2xhdGlsZSB1MzIgKilNR0FfQUREUihyZWcpKQotI2RlZmluZSBNR0FfREVSRUY4KHJlZykJCSgqKHZvbGF0aWxlIHU4ICopTUdBX0FERFIocmVnKSkKLQotI2RlZmluZSBNR0FfUkVBRChyZWcpCQkoX01HQV9SRUFEKCh1MzIgKilNR0FfQUREUihyZWcpKSkKLSNkZWZpbmUgTUdBX1JFQUQ4KHJlZykJCShfTUdBX1JFQUQoKHU4ICopTUdBX0FERFIocmVnKSkpCi0jZGVmaW5lIE1HQV9XUklURShyZWcsIHZhbCkJZG8geyBEUk1fV1JJVEVNRU1PUllCQVJSSUVSKCk7IE1HQV9ERVJFRihyZWcpID0gdmFsOyB9IHdoaWxlICgwKQotI2RlZmluZSBNR0FfV1JJVEU4KHJlZywgdmFsKQlkbyB7IERSTV9XUklURU1FTU9SWUJBUlJJRVIoKTsgTUdBX0RFUkVGOChyZWcpID0gdmFsOyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHUzMiBfTUdBX1JFQUQodTMyICphZGRyKQotewotCURSTV9NRU1PUllCQVJSSUVSKCk7Ci0JcmV0dXJuICoodm9sYXRpbGUgdTMyICopYWRkcjsKLX0KLSNlbHNlCiAjZGVmaW5lIE1HQV9SRUFEOChyZWcpCQlEUk1fUkVBRDgoZGV2X3ByaXYtPm1taW8sIChyZWcpKQogI2RlZmluZSBNR0FfUkVBRChyZWcpCQlEUk1fUkVBRDMyKGRldl9wcml2LT5tbWlvLCAocmVnKSkKICNkZWZpbmUgTUdBX1dSSVRFOChyZWcsIHZhbCkJRFJNX1dSSVRFOChkZXZfcHJpdi0+bW1pbywgKHJlZyksICh2YWwpKQogI2RlZmluZSBNR0FfV1JJVEUocmVnLCB2YWwpCURSTV9XUklURTMyKGRldl9wcml2LT5tbWlvLCAocmVnKSwgKHZhbCkpCi0jZW5kaWYKIAogI2RlZmluZSBEV0dSRUcwCQkweDFjMDAKICNkZWZpbmUgRFdHUkVHMF9FTkQJMHgxZGZmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMKaW5kZXggMDUzZWRmOS4uYmE4OTZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ody5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaHcuYwpAQCAtOTAwLDYgKzkwMCw3IEBACiAJfQogCS8qIE5WMTEgYW5kIE5WMjAgZG9uJ3QgaGF2ZSB0aGlzLCB0aGV5IHN0b3AgYXQgMHg1Mi4gKi8KIAlpZiAobnZfZ2Y0X2Rpc3BfYXJjaChkZXYpKSB7CisJCXJkX2Npb19zdGF0ZShkZXYsIGhlYWQsIHJlZ3AsIE5WX0NJT19DUkVfNDIpOwogCQlyZF9jaW9fc3RhdGUoZGV2LCBoZWFkLCByZWdwLCBOVl9DSU9fQ1JFXzUzKTsKIAkJcmRfY2lvX3N0YXRlKGRldiwgaGVhZCwgcmVncCwgTlZfQ0lPX0NSRV81NCk7CiAKQEAgLTEwMDMsNiArMTAwNCw3IEBACiAJCQlub3V2ZWF1X3dhaXRfZXEoZGV2LCA2NTAwMDAwMDAsIE5WX1BSTUNJT19JTlAwX19DT0xPUiwgMHg4LCAweDApOwogCQl9CiAKKwkJd3JfY2lvX3N0YXRlKGRldiwgaGVhZCwgcmVncCwgTlZfQ0lPX0NSRV80Mik7CiAJCXdyX2Npb19zdGF0ZShkZXYsIGhlYWQsIHJlZ3AsIE5WX0NJT19DUkVfNTMpOwogCQl3cl9jaW9fc3RhdGUoZGV2LCBoZWFkLCByZWdwLCBOVl9DSU9fQ1JFXzU0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKaW5kZXggMjk2MGY1OC4uNWVlMTRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCkBAIC0zOTcsNyArMzk3LDcgQEAKIAkJaWYgKHBjaV9kbWFfc3VwcG9ydGVkKGRldi0+cGRldiwgRE1BX0JJVF9NQVNLKDQwKSkpCiAJCQlkbWFfYml0cyA9IDQwOwogCX0gZWxzZQotCWlmIChkcm1fcGNpX2RldmljZV9pc19wY2llKGRldikgJiYKKwlpZiAoMCAmJiBkcm1fcGNpX2RldmljZV9pc19wY2llKGRldikgJiYKIAkgICAgZGV2X3ByaXYtPmNoaXBzZXQgID4gMHg0MCAmJgogCSAgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ1KSB7CiAJCWlmIChwY2lfZG1hX3N1cHBvcnRlZChkZXYtPnBkZXYsIERNQV9CSVRfTUFTSygzOSkpKQpAQCAtODY4LDcgKzg2OCw5IEBACiAJCW5vdXZlYXVfdm1fdW5tYXAoJm5vZGUtPnRtcF92bWEpOwogCQlub3V2ZWF1X3ZtX3B1dCgmbm9kZS0+dG1wX3ZtYSk7CiAJfQorCiAJbWVtLT5tbV9ub2RlID0gTlVMTDsKKwlrZnJlZShub2RlKTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCmluZGV4IGM3NzExMWUuLjgyZmFkOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCQlkZXZfcHJpdi0+Z2FydF9pbmZvLnR5cGUgPSBOT1VWRUFVX0dBUlRfSFc7CiAJCWRldl9wcml2LT5nYXJ0X2luZm8uZnVuYyA9ICZudjUwX3NnZG1hX2JhY2tlbmQ7CiAJfSBlbHNlCi0JaWYgKGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSAmJgorCWlmICgwICYmIGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSAmJgogCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA+IDB4NDAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0NSkgewogCQlpZiAobnY0NF9ncmFwaF9jbGFzcyhkZXYpKSB7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmZ1bmMgPSAmbnY0NF9zZ2RtYV9iYWNrZW5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCmluZGV4IDM4ZWE2NjIuLjgwMjE4ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKQEAgLTM3MSw2ICszNzEsNyBAQAogCQllbmdpbmUtPnZyYW0uZmxhZ3NfdmFsaWQJPSBudjUwX3ZyYW1fZmxhZ3NfdmFsaWQ7CiAJCWJyZWFrOwogCWNhc2UgMHhDMDoKKwljYXNlIDB4RDA6CiAJCWVuZ2luZS0+aW5zdG1lbS5pbml0CQk9IG52YzBfaW5zdG1lbV9pbml0OwogCQllbmdpbmUtPmluc3RtZW0udGFrZWRvd24JPSBudmMwX2luc3RtZW1fdGFrZWRvd247CiAJCWVuZ2luZS0+aW5zdG1lbS5zdXNwZW5kCQk9IG52YzBfaW5zdG1lbV9zdXNwZW5kOwpAQCAtNTYzLDY4ICs1NjQsNjggQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF90aW1lcjsKIAotCXN3aXRjaCAoZGV2X3ByaXYtPmNhcmRfdHlwZSkgewotCWNhc2UgTlZfMDQ6Ci0JCW52MDRfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgTlZfMTA6Ci0JCW52MTBfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgTlZfMjA6Ci0JY2FzZSBOVl8zMDoKLQkJbnYyMF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl80MDoKLQkJbnY0MF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl81MDoKLQkJbnY1MF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl9DMDoKLQkJbnZjMF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCWNhc2UgMHg4NDoKLQljYXNlIDB4ODY6Ci0JY2FzZSAweDkyOgotCWNhc2UgMHg5NDoKLQljYXNlIDB4OTY6Ci0JY2FzZSAweGEwOgotCQludjg0X2NyeXB0X2NyZWF0ZShkZXYpOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGRldl9wcml2LT5jYXJkX3R5cGUpIHsKLQljYXNlIE5WXzUwOgotCQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JCWNhc2UgMHhhMzoKLQkJY2FzZSAweGE1OgotCQljYXNlIDB4YTg6Ci0JCWNhc2UgMHhhZjoKLQkJCW52YTNfY29weV9jcmVhdGUoZGV2KTsKKwlpZiAoIW5vdXZlYXVfbm9hY2NlbCkgeworCQlzd2l0Y2ggKGRldl9wcml2LT5jYXJkX3R5cGUpIHsKKwkJY2FzZSBOVl8wNDoKKwkJCW52MDRfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl8xMDoKKwkJCW52MTBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl8yMDoKKwkJY2FzZSBOVl8zMDoKKwkJCW52MjBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl80MDoKKwkJCW52NDBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl81MDoKKwkJCW52NTBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl9DMDoKKwkJCW52YzBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCWNhc2UgTlZfQzA6Ci0JCW52YzBfY29weV9jcmVhdGUoZGV2LCAwKTsKLQkJbnZjMF9jb3B5X2NyZWF0ZShkZXYsIDEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CiAKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl80MCkKLQkJbnY0MF9tcGVnX2NyZWF0ZShkZXYpOwotCWVsc2UKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCAmJgotCSAgICAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweDk4IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApKQotCQludjUwX21wZWdfY3JlYXRlKGRldik7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDg0OgorCQljYXNlIDB4ODY6CisJCWNhc2UgMHg5MjoKKwkJY2FzZSAweDk0OgorCQljYXNlIDB4OTY6CisJCWNhc2UgMHhhMDoKKwkJCW52ODRfY3J5cHRfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJfQogCi0JaWYgKCFub3V2ZWF1X25vYWNjZWwpIHsKKwkJc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7CisJCWNhc2UgTlZfNTA6CisJCQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJCQljYXNlIDB4YTM6CisJCQljYXNlIDB4YTU6CisJCQljYXNlIDB4YTg6CisJCQljYXNlIDB4YWY6CisJCQkJbnZhM19jb3B5X2NyZWF0ZShkZXYpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgTlZfQzA6CisJCQludmMwX2NvcHlfY3JlYXRlKGRldiwgMCk7CisJCQludmMwX2NvcHlfY3JlYXRlKGRldiwgMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNDApCisJCQludjQwX21wZWdfY3JlYXRlKGRldik7CisJCWVsc2UKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTAgJiYKKwkJICAgIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4OTggfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHhhMCkpCisJCQludjUwX21wZWdfY3JlYXRlKGRldik7CisKIAkJZm9yIChlID0gMDsgZSA8IE5WT0JKX0VOR0lORV9OUjsgZSsrKSB7CiAJCQlpZiAoZGV2X3ByaXYtPmVuZ1tlXSkgewogCQkJCXJldCA9IGRldl9wcml2LT5lbmdbZV0tPmluaXQoZGV2LCBlKTsKQEAgLTkyMiw2ICs5MjMsNyBAQAogCQlkZXZfcHJpdi0+Y2FyZF90eXBlID0gTlZfNTA7CiAJCWJyZWFrOwogCWNhc2UgMHhjMDoKKwljYXNlIDB4ZDA6CiAJCWRldl9wcml2LT5jYXJkX3R5cGUgPSBOVl9DMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdm0uYwppbmRleCAwMDU5ZTZmLi41MTlhNmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV92bS5jCkBAIC01OCw2ICs1OCw3IEBACiAJCQludW0gLT0gbGVuOwogCQkJcHRlICs9IGxlbjsKIAkJCWlmICh1bmxpa2VseShlbmQgPj0gbWF4KSkgeworCQkJCXBoeXMgKz0gbGVuIDw8IChiaXRzICsgMTIpOwogCQkJCXBkZSsrOwogCQkJCXB0ZSA9IDA7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCmluZGV4IDNjNzhiYzguLmYxYTNhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCkBAIC0zNzYsNyArMzc2LDEwIEBACiAJICovCiAKIAkvKiBmcmFtZWJ1ZmZlciBjYW4gYmUgbGFyZ2VyIHRoYW4gY3J0YyBzY2Fub3V0IGFyZWEuICovCi0JcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX1JQQzBfSU5ERVhdID0gWExBVEUoZmItPnBpdGNoIC8gOCwgOCwgTlZfQ0lPX0NSRV9SUEMwX09GRlNFVF8xMF84KTsKKwlyZWdwLT5DUlRDW05WX0NJT19DUkVfUlBDMF9JTkRFWF0gPQorCQlYTEFURShmYi0+cGl0Y2ggLyA4LCA4LCBOVl9DSU9fQ1JFX1JQQzBfT0ZGU0VUXzEwXzgpOworCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV80Ml0gPQorCQlYTEFURShmYi0+cGl0Y2ggLyA4LCAxMSwgTlZfQ0lPX0NSRV80Ml9PRkZTRVRfMTEpOwogCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV9SUEMxX0lOREVYXSA9IG1vZGUtPmNydGNfaGRpc3BsYXkgPCAxMjgwID8KIAkJCQkJICAgIE1BU0soTlZfQ0lPX0NSRV9SUEMxX0xBUkdFKSA6IDB4MDA7CiAJcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX0xTUl9JTkRFWF0gPSBYTEFURShob3JpekJsYW5rRW5kLCA2LCBOVl9DSU9fQ1JFX0xTUl9IQkVfNikgfApAQCAtODI0LDggKzgyNywxMSBAQAogCXJlZ3AtPkNSVENbTlZfQ0lPX0NSX09GRlNFVF9JTkRFWF0gPSBkcm1fZmItPnBpdGNoID4+IDM7CiAJcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX1JQQzBfSU5ERVhdID0KIAkJWExBVEUoZHJtX2ZiLT5waXRjaCA+PiAzLCA4LCBOVl9DSU9fQ1JFX1JQQzBfT0ZGU0VUXzEwXzgpOworCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV80Ml0gPQorCQlYTEFURShkcm1fZmItPnBpdGNoIC8gOCwgMTEsIE5WX0NJT19DUkVfNDJfT0ZGU0VUXzExKTsKIAljcnRjX3dyX2Npb19zdGF0ZShjcnRjLCByZWdwLCBOVl9DSU9fQ1JFX1JQQzBfSU5ERVgpOwogCWNydGNfd3JfY2lvX3N0YXRlKGNydGMsIHJlZ3AsIE5WX0NJT19DUl9PRkZTRVRfSU5ERVgpOworCWNydGNfd3JfY2lvX3N0YXRlKGNydGMsIHJlZ3AsIE5WX0NJT19DUkVfNDIpOwogCiAJLyogVXBkYXRlIHRoZSBmcmFtZWJ1ZmZlciBsb2NhdGlvbi4gKi8KIAlyZWdwLT5mYl9zdGFydCA9IG52X2NydGMtPmZiLm9mZnNldCAmIH4zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZyZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252cmVnLmgKaW5kZXggZmUwZjI1My4uYmJmYjFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZyZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udnJlZy5oCkBAIC0yNzcsNiArMjc3LDggQEAKICMJCWRlZmluZSBOVl9DSU9fQ1JFX0VCUl9WREVfMTEJCTI6MgogIwkJZGVmaW5lIE5WX0NJT19DUkVfRUJSX1ZSU18xMQkJNDo0CiAjCQlkZWZpbmUgTlZfQ0lPX0NSRV9FQlJfVkJTXzExCQk2OjYKKyMJZGVmaW5lIE5WX0NJT19DUkVfNDIJCQkweDQyCisjCQlkZWZpbmUgTlZfQ0lPX0NSRV80Ml9PRkZTRVRfMTEJCTY6NgogIwlkZWZpbmUgTlZfQ0lPX0NSRV80MwkJCTB4NDMKICMJZGVmaW5lIE5WX0NJT19DUkVfNDQJCQkweDQ0CS8qIGhlYWQgY29udHJvbCAqLwogIwlkZWZpbmUgTlZfQ0lPX0NSRV9DU0IJCQkweDQ1CS8qIGNvbG91ciBzYXR1cmF0aW9uIGJvb3N0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcKaW5kZXggOTc0NmZlZS4uZWE5MmJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZwpAQCAtMjgsMTEgKzI4LDQgQEAKIAkgIFRoZSBrZXJuZWwgd2lsbCBhbHNvIHBlcmZvcm0gc2VjdXJpdHkgY2hlY2sgb24gY29tbWFuZCBzdHJlYW0KIAkgIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLCB3ZSB3YW50IHRvIGNhdGNoIGFuZCBmb3JiaWQgYW55IGlsbGVnYWwgdXNlCiAJICBvZiB0aGUgR1BVIHN1Y2ggYXMgRE1BIGludG8gcmFuZG9tIHN5c3RlbSBtZW1vcnkgb3IgaW50byBtZW1vcnkKLQkgIG5vdCBvd25lZCBieSB0aGUgcHJvY2VzcyBzdXBwbHlpbmcgdGhlIGNvbW1hbmQgc3RyZWFtLiBUaGlzIHBhcnQKLQkgIG9mIHRoZSBjb2RlIGlzIHN0aWxsIGluY29tcGxldGUgYW5kIHRoaXMgd2h5IHdlIHByb3Bvc2UgdGhhdCBwYXRjaAotCSAgYXMgYSBzdGFnaW5nIGRyaXZlciBhZGRpdGlvbiwgZnV0dXJlIHNlY3VyaXR5IG1pZ2h0IGZvcmJpZCBjdXJyZW50Ci0JICBleHBlcmltZW50YWwgdXNlcnNwYWNlIHRvIHJ1bi4KLQotCSAgVGhpcyBjb2RlIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBoYXJkd2FyZSA6IFIxWFgsUjJYWCxSM1hYLFI0WFgsUjVYWAotCSAgKHJhZGVvbiB1cCB0byBYMTk1MCkuIFdvcmtzIGlzIHVuZGVyd2F5IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgUjZYWCwKLQkgIFI3WFggYW5kIG5ld2VyIGhhcmR3YXJlIChyYWRlb24gZnJvbSBIRDJYWFggdG8gSEQ0WFhYKS4KKwkgIG5vdCBvd25lZCBieSB0aGUgcHJvY2VzcyBzdXBwbHlpbmcgdGhlIGNvbW1hbmQgc3RyZWFtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwppbmRleCBlYzg0ODc4Li44NGE2OWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwpAQCAtMTA0NSw3ICsxMDQ1LDcgQEAKIAl1aW50NjRfdCBmYl9sb2NhdGlvbjsKIAl1aW50MzJfdCBmYl9mb3JtYXQsIGZiX3BpdGNoX3BpeGVscywgdGlsaW5nX2ZsYWdzOwogCXUzMiBmYl9zd2FwID0gRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoRVZFUkdSRUVOX0dSUEhfRU5ESUFOX05PTkUpOwotCXUzMiB0bXA7CisJdTMyIHRtcCwgdmlld3BvcnRfdywgdmlld3BvcnRfaDsKIAlpbnQgcjsKIAogCS8qIG5vIGZiIGJvdW5kICovCkBAIC0xMTcxLDggKzExNzEsMTAgQEAKIAl5ICY9IH4xOwogCVdSRUczMihFVkVSR1JFRU5fVklFV1BPUlRfU1RBUlQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh4IDw8IDE2KSB8IHkpOworCXZpZXdwb3J0X3cgPSBjcnRjLT5tb2RlLmhkaXNwbGF5OworCXZpZXdwb3J0X2ggPSAoY3J0Yy0+bW9kZS52ZGlzcGxheSArIDEpICYgfjE7CiAJV1JFRzMyKEVWRVJHUkVFTl9WSUVXUE9SVF9TSVpFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCSAgICAgICAoY3J0Yy0+bW9kZS5oZGlzcGxheSA8PCAxNikgfCBjcnRjLT5tb2RlLnZkaXNwbGF5KTsKKwkgICAgICAgKHZpZXdwb3J0X3cgPDwgMTYpIHwgdmlld3BvcnRfaCk7CiAKIAkvKiBwYWdlZmxpcCBzZXR1cCAqLwogCS8qIG1ha2Ugc3VyZSBmbGlwIGlzIGF0IHZiIHJhdGhlciB0aGFuIGhiICovCkBAIC0xMjEzLDcgKzEyMTUsNyBAQAogCXVpbnQ2NF90IGZiX2xvY2F0aW9uOwogCXVpbnQzMl90IGZiX2Zvcm1hdCwgZmJfcGl0Y2hfcGl4ZWxzLCB0aWxpbmdfZmxhZ3M7CiAJdTMyIGZiX3N3YXAgPSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl9OT05FOwotCXUzMiB0bXA7CisJdTMyIHRtcCwgdmlld3BvcnRfdywgdmlld3BvcnRfaDsKIAlpbnQgcjsKIAogCS8qIG5vIGZiIGJvdW5kICovCkBAIC0xMzM4LDggKzEzNDAsMTAgQEAKIAl5ICY9IH4xOwogCVdSRUczMihBVklWT19EMU1PREVfVklFV1BPUlRfU1RBUlQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh4IDw8IDE2KSB8IHkpOworCXZpZXdwb3J0X3cgPSBjcnRjLT5tb2RlLmhkaXNwbGF5OworCXZpZXdwb3J0X2ggPSAoY3J0Yy0+bW9kZS52ZGlzcGxheSArIDEpICYgfjE7CiAJV1JFRzMyKEFWSVZPX0QxTU9ERV9WSUVXUE9SVF9TSVpFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCSAgICAgICAoY3J0Yy0+bW9kZS5oZGlzcGxheSA8PCAxNikgfCBjcnRjLT5tb2RlLnZkaXNwbGF5KTsKKwkgICAgICAgKHZpZXdwb3J0X3cgPDwgMTYpIHwgdmlld3BvcnRfaCk7CiAKIAkvKiBwYWdlZmxpcCBzZXR1cCAqLwogCS8qIG1ha2Ugc3VyZSBmbGlwIGlzIGF0IHZiIHJhdGhlciB0aGFuIGhiICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5jCmluZGV4IGUxNDhhYjA0Li43YjRlZWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuYwpAQCAtMzksMTcgKzM5LDMzNSBAQAogCiBjb25zdCB1MzIgY2F5bWFuX2RlZmF1bHRfc3RhdGVbXSA9CiB7Ci0JLyogWFhYIGZpbGwgaW4gYWRkaXRpb25hbCBibGl0IHN0YXRlICovCisJMHhjMDA2NjkwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwNjAsIC8qIERCX1JFTkRFUl9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogREJfQ09VTlRfQ09OVFJPTCAqLworCTB4MDAwMDAwMDAsIC8qIERCX0RFUFRIX1ZJRVcgKi8KKwkweDAwMDAwMDJhLCAvKiBEQl9SRU5ERVJfT1ZFUlJJREUgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9SRU5ERVJfT1ZFUlJJREUyICovCisJMHgwMDAwMDAwMCwgLyogREJfSFRJTEVfREFUQV9CQVNFICovCiAKIAkweGMwMDI2OTAwLAotCTB4MDAwMDAzMTYsCi0JMHgwMDAwMDAwZSwgLyogVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMICovCi0JMHgwMDAwMDAxMCwgLyogICovCisJMHgwMDAwMDAwYSwKKwkweDAwMDAwMDAwLCAvKiBEQl9TVEVOQ0lMX0NMRUFSICovCisJMHgwMDAwMDAwMCwgLyogREJfREVQVEhfQ0xFQVIgKi8KKworCTB4YzAwMzY5MDAsCisJMHgwMDAwMDAwZiwKKwkweDAwMDAwMDAwLCAvKiBEQl9ERVBUSF9JTkZPICovCisJMHgwMDAwMDAwMCwgLyogREJfWl9JTkZPICovCisJMHgwMDAwMDAwMCwgLyogREJfU1RFTkNJTF9JTkZPICovCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwODAsCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfV0lORE9XX09GRlNFVCAqLworCisJMHhjMDBkNjkwMCwKKwkweDAwMDAwMDgzLAorCTB4MDAwMGZmZmYsIC8qIFBBX1NDX0NMSVBSRUNUX1JVTEUgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19DTElQUkVDVF8wX1RMICovCisJMHgyMDAwMjAwMCwgLyogUEFfU0NfQ0xJUFJFQ1RfMF9CUiAqLworCTB4MDAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDAwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHgwMDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4YWFhYWFhYWEsIC8qIFBBX1NDX0VER0VSVUxFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfSEFSRFdBUkVfU0NSRUVOX09GRlNFVCAqLworCTB4MDAwMDAwMGYsIC8qIENCX1RBUkdFVF9NQVNLICovCisJMHgwMDAwMDAwZiwgLyogQ0JfU0hBREVSX01BU0sgKi8KKworCTB4YzAyMjY5MDAsCisJMHgwMDAwMDA5NCwKKwkweDgwMDAwMDAwLCAvKiBQQV9TQ19WUE9SVF9TQ0lTU09SXzBfVEwgKi8KKwkweDIwMDAyMDAwLCAvKiBQQV9TQ19WUE9SVF9TQ0lTU09SXzBfQlIgKi8KKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19WUE9SVF9aTUlOXzAgKi8KKwkweDNmODAwMDAwLCAvKiBQQV9TQ19WUE9SVF9aTUFYXzAgKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBkNCwKKwkweDAwMDAwMDAwLCAvKiBTWF9NSVNDICovCiAKIAkweGMwMDI2OTAwLAogCTB4MDAwMDAwZDksCiAJMHgwMDAwMDAwMCwgLyogQ1BfUklOR0lEICovCiAJMHgwMDAwMDAwMCwgLyogQ1BfVk1JRCAqLworCisJMHhjMDA5NjkwMCwKKwkweDAwMDAwMTAwLAorCTB4MDBmZmZmZmYsIC8qIFZHVF9NQVhfVlRYX0lORFggKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfTUlOX1ZUWF9JTkRYICovCisJMHgwMDAwMDAwMCwgLyogVkdUX0lORFhfT0ZGU0VUICovCisJMHgwMDAwMDAwMCwgLyogVkdUX01VTFRJX1BSSU1fSUJfUkVTRVRfSU5EWCAqLworCTB4MDAwMDAwMDAsIC8qIFNYX0FMUEhBX1RFU1RfQ09OVFJPTCAqLworCTB4MDAwMDAwMDAsIC8qIENCX0JMRU5EX1JFRCAqLworCTB4MDAwMDAwMDAsIC8qIENCX0JMRU5EX0dSRUVOICovCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkRfQkxVRSAqLworCTB4MDAwMDAwMDAsIC8qIENCX0JMRU5EX0FMUEhBICovCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxODcsCisJMHgwMDAwMDEwMCwgLyogU1BJX1ZTX09VVF9JRF8wICovCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAxOTEsCisJMHgwMDAwMDEwMCwgLyogU1BJX1BTX0lOUFVUX0NOVExfMCAqLworCTB4MDAwMDAxMDEsIC8qIFNQSV9QU19JTlBVVF9DTlRMXzEgKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiMSwKKwkweDAwMDAwMDAwLCAvKiBTUElfVlNfT1VUX0NPTkZJRyAqLworCisJMHhjMDEwNjkwMCwKKwkweDAwMDAwMWIzLAorCTB4MjAwMDAwMDEsIC8qIFNQSV9QU19JTl9DT05UUk9MXzAgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfUFNfSU5fQ09OVFJPTF8xICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0lOVEVSUF9DT05UUk9MXzAgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfSU5QVVRfWiAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9GT0dfQ05UTCAqLworCTB4MDAxMDAwMDAsIC8qIFNQSV9CQVJZQ19DTlRMICovCisJMHgwMDAwMDAwMCwgLyogU1BJX1BTX0lOX0NPTlRST0xfMiAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9DT01QVVRFX0lOUFVUX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfQ09NUFVURV9OVU1fVEhSRUFEX1ggKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfQ09NUFVURV9OVU1fVEhSRUFEX1kgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfQ09NUFVURV9OVU1fVEhSRUFEX1ogKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfR1BSX01HTVQgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfTERTX01HTVQgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfU1RBQ0tfTUdNVCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9XQVZFX01HTVRfMSAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9XQVZFX01HTVRfMiAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWUwLAorCTB4MDAwMDAwMDAsIC8qIENCX0JMRU5EMF9DT05UUk9MICovCisKKwkweGMwMGU2OTAwLAorCTB4MDAwMDAyMDAsCisJMHgwMDAwMDAwMCwgLyogREJfREVQVEhfQ09OVFJPTCAqLworCTB4MDAwMDAwMDAsIC8qIERCX0VRQUEgKi8KKwkweDAwY2MwMDEwLCAvKiBDQl9DT0xPUl9DT05UUk9MICovCisJMHgwMDAwMDIxMCwgLyogREJfU0hBREVSX0NPTlRST0wgKi8KKwkweDAwMDEwMDAwLCAvKiBQQV9DTF9DTElQX0NOVEwgKi8KKwkweDAwMDAwMDA0LCAvKiBQQV9TVV9TQ19NT0RFX0NOVEwgKi8KKwkweDAwMDAwMTAwLCAvKiBQQV9DTF9WVEVfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX0NMX1ZTX09VVF9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfQ0xfTkFOSU5GX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9MSU5FX1NUSVBQTEVfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NVX0xJTkVfU1RJUFBMRV9TQ0FMRSAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NVX1BSSU1fRklMVEVSX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiAgKi8KKwkweDAwMDAwMDAwLCAvKiAgKi8KKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDIyOSwKKwkweDAwMDAwMDAwLCAvKiBTUV9QR01fU1RBUlRfRlMgKi8KKwkweDAwMDAwMDAwLAorCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjNiLAorCTB4MDAwMDAwMDAsIC8qIFNRX0xEU19BTExPQ19QUyAqLworCisJMHhjMDA2NjkwMCwKKwkweDAwMDAwMjQwLAorCTB4MDAwMDAwMDAsIC8qIFNRX0VTR1NfUklOR19JVEVNU0laRSAqLworCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKworCTB4YzAwNDY5MDAsCisJMHgwMDAwMDI0NywKKwkweDAwMDAwMDAwLCAvKiBTUV9HU19WRVJUX0lURU1TSVpFICovCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisKKwkweGMwMTE2OTAwLAorCTB4MDAwMDAyODAsCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9JTlRfU0laRSAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NVX1BPSU5UX01JTk1BWCAqLworCTB4MDAwMDAwMDgsIC8qIFBBX1NVX0xJTkVfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0xJTkVfU1RJUFBMRSAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9PVVRQVVRfUEFUSF9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogVkdUX0hPU19DTlRMICovCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAvKiBWR1RfR1NfTU9ERSAqLworCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMjkyLAorCTB4MDAwMDAwMDAsIC8qIFBBX1NDX01PREVfQ05UTF8wICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTU9ERV9DTlRMXzEgKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhMSwKKwkweDAwMDAwMDAwLCAvKiBWR1RfUFJJTUlUSVZFSURfRU4gKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhNSwKKwkweDAwMDAwMDAwLCAvKiBWR1RfTVVMVElfUFJJTV9JQl9SRVNFVF9FTiAqLworCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMmE4LAorCTB4MDAwMDAwMDAsIC8qIFZHVF9JTlNUQU5DRV9TVEVQX1JBVEVfMCAqLworCTB4MDAwMDAwMDAsCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAyYWQsCisJMHgwMDAwMDAwMCwgLyogVkdUX1JFVVNFX09GRiAqLworCTB4MDAwMDAwMDAsCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyZDUsCisJMHgwMDAwMDAwMCwgLyogVkdUX1NIQURFUl9TVEFHRVNfRU4gKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJkYywKKwkweDAwMDBhYTAwLCAvKiBEQl9BTFBIQV9UT19NQVNLICovCisKKwkweGMwMDY2OTAwLAorCTB4MDAwMDAyZGUsCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9MWV9PRkZTRVRfREJfRk1UX0NOVEwgKi8KKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAyZTUsCisJMHgwMDAwMDAwMCwgLyogVkdUX1NUUk1PVVRfQ09ORklHICovCisJMHgwMDAwMDAwMCwKKworCTB4YzAxYjY5MDAsCisJMHgwMDAwMDJmNSwKKwkweDc2NTQzMjEwLCAvKiBQQV9TQ19DRU5UUk9JRF9QUklPUklUWV8wICovCisJMHhmZWRjYmE5OCwgLyogUEFfU0NfQ0VOVFJPSURfUFJJT1JJVFlfMSAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0xJTkVfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0FBX0NPTkZJRyAqLworCTB4MDAwMDAwMDUsIC8qIFBBX1NVX1ZUWF9DTlRMICovCisJMHgzZjgwMDAwMCwgLyogUEFfQ0xfR0JfVkVSVF9DTElQX0FESiAqLworCTB4M2Y4MDAwMDAsIC8qIFBBX0NMX0dCX1ZFUlRfRElTQ19BREogKi8KKwkweDNmODAwMDAwLCAvKiBQQV9DTF9HQl9IT1JaX0NMSVBfQURKICovCisJMHgzZjgwMDAwMCwgLyogUEFfQ0xfR0JfSE9SWl9ESVNDX0FESiAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0FBX1NBTVBMRV9MT0NTX1BJWEVMX1gwWTBfMCAqLworCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIC8qIFBBX1NDX0FBX01BU0tfWDBZMF9YMVkwICovCisJMHhmZmZmZmZmZiwKKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDMxNiwKKwkweDAwMDAwMDBlLCAvKiBWR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwgKi8KKwkweDAwMDAwMDEwLCAvKiAgKi8KIH07CiAKK2NvbnN0IHUzMiBjYXltYW5fdnNbXSA9Cit7CisJMHgwMDAwMDAwNCwKKwkweDgwNDAwNDAwLAorCTB4MDAwMGEwM2MsCisJMHg5NTAwMDY4OCwKKwkweDAwMDA0MDAwLAorCTB4MTUwMDA2ODgsCisJMHgwMDAwMDAwMCwKKwkweDg4MDAwMDAwLAorCTB4MDQwMDAwMDAsCisJMHg2Nzk2MTAwMSwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkweDAwMDIwMDAwLAorI2Vsc2UKKwkweDAwMDAwMDAwLAorI2VuZGlmCisJMHgwMDAwMDAwMCwKKwkweDA0MDAwMDAwLAorCTB4Njc5NjEwMDAsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJMHgwMDAyMDAwOCwKKyNlbHNlCisJMHgwMDAwMDAwOCwKKyNlbmRpZgorCTB4MDAwMDAwMDAsCit9OworCitjb25zdCB1MzIgY2F5bWFuX3BzW10gPQoreworCTB4MDAwMDAwMDQsCisJMHhhMDBjMDAwMCwKKwkweDAwMDAwMDA4LAorCTB4ODA0MDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDk1MDAwNjg4LAorCTB4MDAwMDAwMDAsCisJMHg4ODAwMDAwMCwKKwkweDAwMzgwNDAwLAorCTB4MDAxNDZiMTAsCisJMHgwMDM4MDAwMCwKKwkweDIwMTQ2YjEwLAorCTB4MDAzODA0MDAsCisJMHg0MDE0NmIwMCwKKwkweDgwMzgwMDAwLAorCTB4NjAxNDZiMDAsCisJMHgwMDAwMDAxMCwKKwkweDAwMGQxMDAwLAorCTB4YjA4MDAwMDAsCisJMHgwMDAwMDAwMCwKK307CisKK2NvbnN0IHUzMiBjYXltYW5fcHNfc2l6ZSA9IEFSUkFZX1NJWkUoY2F5bWFuX3BzKTsKK2NvbnN0IHUzMiBjYXltYW5fdnNfc2l6ZSA9IEFSUkFZX1NJWkUoY2F5bWFuX3ZzKTsKIGNvbnN0IHUzMiBjYXltYW5fZGVmYXVsdF9zaXplID0gQVJSQVlfU0laRShjYXltYW5fZGVmYXVsdF9zdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5oCmluZGV4IDMzYjc1ZTVkLi5mNWQwZTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuaApAQCAtMjUsOCArMjUsMTEgQEAKICNpZm5kZWYgQ0FZTUFOX0JMSVRfU0hBREVSU19ICiAjZGVmaW5lIENBWU1BTl9CTElUX1NIQURFUlNfSAogCitleHRlcm4gY29uc3QgdTMyIGNheW1hbl9wc1tdOworZXh0ZXJuIGNvbnN0IHUzMiBjYXltYW5fdnNbXTsKIGV4dGVybiBjb25zdCB1MzIgY2F5bWFuX2RlZmF1bHRfc3RhdGVbXTsKIAorZXh0ZXJuIGNvbnN0IHUzMiBjYXltYW5fcHNfc2l6ZSwgY2F5bWFuX3ZzX3NpemU7CiBleHRlcm4gY29uc3QgdTMyIGNheW1hbl9kZWZhdWx0X3NpemU7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKaW5kZXggN2MzNzYzOC4uODYxNTdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCkBAIC04OCwyMSArODgsMzkgQEAKIC8qIGdldCB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMgKi8KIGludCBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdTMyIHRlbXAgPSAoUlJFRzMyKENHX01VTFRfVEhFUk1BTF9TVEFUVVMpICYgQVNJQ19UX01BU0spID4+Ci0JCUFTSUNfVF9TSElGVDsKLQl1MzIgYWN0dWFsX3RlbXAgPSAwOworCXUzMiB0ZW1wLCB0b2Zmc2V0LCBhY3R1YWxfdGVtcCA9IDA7CiAKLQlpZiAodGVtcCAmIDB4NDAwKQotCQlhY3R1YWxfdGVtcCA9IC0yNTY7Ci0JZWxzZSBpZiAodGVtcCAmIDB4MjAwKQotCQlhY3R1YWxfdGVtcCA9IDI1NTsKLQllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKLQkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHgxZmY7Ci0JCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKLQl9IGVsc2UKLQkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfSlVOSVBFUikgeworCQl0b2Zmc2V0ID0gKFJSRUczMihDR19USEVSTUFMX0NUUkwpICYgVE9GRlNFVF9NQVNLKSA+PgorCQkJVE9GRlNFVF9TSElGVDsKKwkJdGVtcCA9IChSUkVHMzIoQ0dfVFMwX1NUQVRVUykgJiBUUzBfQURDX0RPVVRfTUFTSykgPj4KKwkJCVRTMF9BRENfRE9VVF9TSElGVDsKIAotCXJldHVybiAoYWN0dWFsX3RlbXAgKiAxMDAwKSAvIDI7CisJCWlmICh0b2Zmc2V0ICYgMHgxMDApCisJCQlhY3R1YWxfdGVtcCA9IHRlbXAgLyAyIC0gKDB4MjAwIC0gdG9mZnNldCk7CisJCWVsc2UKKwkJCWFjdHVhbF90ZW1wID0gdGVtcCAvIDIgKyB0b2Zmc2V0OworCisJCWFjdHVhbF90ZW1wID0gYWN0dWFsX3RlbXAgKiAxMDAwOworCisJfSBlbHNlIHsKKwkJdGVtcCA9IChSUkVHMzIoQ0dfTVVMVF9USEVSTUFMX1NUQVRVUykgJiBBU0lDX1RfTUFTSykgPj4KKwkJCUFTSUNfVF9TSElGVDsKKworCQlpZiAodGVtcCAmIDB4NDAwKQorCQkJYWN0dWFsX3RlbXAgPSAtMjU2OworCQllbHNlIGlmICh0ZW1wICYgMHgyMDApCisJCQlhY3R1YWxfdGVtcCA9IDI1NTsKKwkJZWxzZSBpZiAodGVtcCAmIDB4MTAwKSB7CisJCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweDFmZjsKKwkJCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKKwkJfSBlbHNlCisJCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweGZmOworCisJCWFjdHVhbF90ZW1wID0gKGFjdHVhbF90ZW1wICogMTAwMCkgLyAyOworCX0KKworCXJldHVybiBhY3R1YWxfdGVtcDsKIH0KIAogaW50IHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC0xNDE1LDYgKzE0MzMsOCBAQAogCWNhc2UgQ0hJUF9DRURBUjoKIAljYXNlIENISVBfUkVEV09PRDoKIAljYXNlIENISVBfUEFMTToKKwljYXNlIENISVBfU1VNTzoKKwljYXNlIENISVBfU1VNTzI6CiAJY2FzZSBDSElQX1RVUktTOgogCWNhc2UgQ0hJUF9DQUlDT1M6CiAJCWZvcmNlX25vX3N3aXp6bGUgPSBmYWxzZTsKQEAgLTE1NDQsNiArMTU2NCw4IEBACiAJY2FzZSBDSElQX1JFRFdPT0Q6CiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAljYXNlIENISVBfVFVSS1M6CiAJY2FzZSBDSElQX0NBSUNPUzoKIAlkZWZhdWx0OgpAQCAtMTY4OSw2ICsxNzExLDU0IEBACiAJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKIAkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUgPSAweDEzMDsKIAkJYnJlYWs7CisJY2FzZSBDSElQX1NVTU86CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubnVtX3NlcyA9IDE7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfdGlsZV9waXBlcyA9IDI7CisJCWlmIChyZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NjQ4KQorCQkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfc2ltZHMgPSAzOworCQllbHNlIGlmICgocmRldi0+cGRldi0+ZGV2aWNlID09IDB4OTY0NykgfHwKKwkJCSAocmRldi0+cGRldi0+ZGV2aWNlID09IDB4OTY0YSkpCisJCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zaW1kcyA9IDQ7CisJCWVsc2UKKwkJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3NpbWRzID0gNTsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfYmFja2VuZHMgPSAyICogcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9ncHJzID0gMjU2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aHJlYWRzID0gMjQ4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9nc190aHJlYWRzID0gMzI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbnVtX29mX3NldHMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc2l6ZSA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gNjQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDE5MjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfaHdfY29udGV4dHMgPSA4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNxX251bV9jZl9pbnN0cyA9IDI7CisKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19wcmltX2ZpZm9fc2l6ZSA9IDB4NDA7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUgPSAweDEzMDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1NVTU8yOgorCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm51bV9zZXMgPSAxOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3RpbGVfcGlwZXMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zaW1kcyA9IDI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2JhY2tlbmRzID0gMSAqIHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubnVtX3NlczsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfZ3BycyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfdGhyZWFkcyA9IDI0ODsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfZ3NfdGhyZWFkcyA9IDMyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zdGFja19lbnRyaWVzID0gNTEyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X251bV9vZl9zZXRzID0gNDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3NpemUgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDY0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc214X3NpemUgPSAxOTI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2h3X2NvbnRleHRzID0gODsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zcV9udW1fY2ZfaW5zdHMgPSAyOworCisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfcHJpbV9maWZvX3NpemUgPSAweDQwOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSA9IDB4MzA7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfZWFybHl6X3RpbGVfZmlmb19zaXplID0gMHgxMzA7CisJCWJyZWFrOwogCWNhc2UgQ0hJUF9CQVJUUzoKIAkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzID0gMjsKIAkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfcGlwZXMgPSA0OwpAQCAtMjAzOSw2ICsyMTA5LDggQEAKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9DRURBUjoKIAljYXNlIENISVBfUEFMTToKKwljYXNlIENISVBfU1VNTzoKKwljYXNlIENISVBfU1VNTzI6CiAJY2FzZSBDSElQX0NBSUNPUzoKIAkJLyogbm8gdmVydGV4IGNhY2hlICovCiAJCXNxX2NvbmZpZyAmPSB+VkNfRU5BQkxFOwpAQCAtMjA2MCw2ICsyMTMyLDggQEAKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9DRURBUjoKIAljYXNlIENISVBfUEFMTToKKwljYXNlIENISVBfU1VNTzoKKwljYXNlIENISVBfU1VNTzI6CiAJCXBzX3RocmVhZF9jb3VudCA9IDk2OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjA5OSw2ICsyMTczLDggQEAKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9DRURBUjoKIAljYXNlIENISVBfUEFMTToKKwljYXNlIENISVBfU1VNTzoKKwljYXNlIENISVBfU1VNTzI6CiAJY2FzZSBDSElQX0NBSUNPUzoKIAkJdmd0X2NhY2hlX2ludmFsaWRhdGlvbiA9IENBQ0hFX0lOVkFMSURBVElPTihUQ19PTkxZKTsKIAkJYnJlYWs7CkBAIC0yODY4LDcgKzI5NDQsNyBAQAogCQkJcmFkZW9uX2ZlbmNlX3Byb2Nlc3MocmRldik7CiAJCQlicmVhazsKIAkJY2FzZSAyMzM6IC8qIEdVSSBJRExFICovCi0JCQlEUk1fREVCVUcoIklIOiBDUCBFT1BcbiIpOworCQkJRFJNX0RFQlVHKCJJSDogR1VJIGlkbGVcbiIpOwogCQkJcmRldi0+cG0uZ3VpX2lkbGUgPSB0cnVlOwogCQkJd2FrZV91cCgmcmRldi0+aXJxLmlkbGVfcXVldWUpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYwppbmRleCBiYTA2YTY5Li41N2YzYmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgImV2ZXJncmVlbmQuaCIKICNpbmNsdWRlICJldmVyZ3JlZW5fYmxpdF9zaGFkZXJzLmgiCisjaW5jbHVkZSAiY2F5bWFuX2JsaXRfc2hhZGVycy5oIgogCiAjZGVmaW5lIERJX1BUX1JFQ1RMSVNUICAgICAgICAweDExCiAjZGVmaW5lIERJX0lOREVYX1NJWkVfMTZfQklUICAweDAKQEAgLTE1Miw2ICsxNTMsOCBAQAogCiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9TVU1PKSB8fAorCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfU1VNTzIpIHx8CiAJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQUlDT1MpKQogCQljcF9zZXRfc3VyZmFjZV9zeW5jKHJkZXYsCiAJCQkJICAgIFBBQ0tFVDNfVENfQUNUSU9OX0VOQSwgNDgsIGdwdV9hZGRyKTsKQEAgLTE5OSw2ICsyMDIsMTYgQEAKIHNldF9zY2lzc29ycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHgxLCBpbnQgeTEsCiAJICAgICBpbnQgeDIsIGludCB5MikKIHsKKwkvKiB3b3JrYXJvdW5kIHNvbWUgaHcgYnVncyAqLworCWlmICh4MiA9PSAwKQorCQl4MSA9IDE7CisJaWYgKHkyID09IDApCisJCXkxID0gMTsKKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfQ0FZTUFOKSB7CisJCWlmICgoeDIgPT0gMSkgJiYgKHkyID09IDEpKQorCQkJeDIgPSAyOworCX0KKwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDIpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoUEFfU0NfU0NSRUVOX1NDSVNTT1JfVEwgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19TVEFSVCkgPj4gMik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKHgxIDw8IDApIHwgKHkxIDw8IDE2KSk7CkBAIC0yNTUsMjM4ICsyNjgsMjg0IEBACiAJdTY0IGdwdV9hZGRyOwogCWludCBkd29yZHM7CiAKLQlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewotCWNhc2UgQ0hJUF9DRURBUjoKLQlkZWZhdWx0OgotCQludW1fcHNfZ3BycyA9IDkzOwotCQludW1fdnNfZ3BycyA9IDQ2OwotCQludW1fdGVtcF9ncHJzID0gNDsKLQkJbnVtX2dzX2dwcnMgPSAzMTsKLQkJbnVtX2VzX2dwcnMgPSAzMTsKLQkJbnVtX2hzX2dwcnMgPSAyMzsKLQkJbnVtX2xzX2dwcnMgPSAyMzsKLQkJbnVtX3BzX3RocmVhZHMgPSA5NjsKLQkJbnVtX3ZzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2dzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2VzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2hzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2xzX3RocmVhZHMgPSAxNjsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX1JFRFdPT0Q6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX0pVTklQRVI6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX0NZUFJFU1M6Ci0JY2FzZSBDSElQX0hFTUxPQ0s6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX1BBTE06Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDk2OwotCQludW1fdnNfdGhyZWFkcyA9IDE2OwotCQludW1fZ3NfdGhyZWFkcyA9IDE2OwotCQludW1fZXNfdGhyZWFkcyA9IDE2OwotCQludW1faHNfdGhyZWFkcyA9IDE2OwotCQludW1fbHNfdGhyZWFkcyA9IDE2OwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQlicmVhazsKLQljYXNlIENISVBfQkFSVFM6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX1RVUktTOgotCQludW1fcHNfZ3BycyA9IDkzOwotCQludW1fdnNfZ3BycyA9IDQ2OwotCQludW1fdGVtcF9ncHJzID0gNDsKLQkJbnVtX2dzX2dwcnMgPSAzMTsKLQkJbnVtX2VzX2dwcnMgPSAzMTsKLQkJbnVtX2hzX2dwcnMgPSAyMzsKLQkJbnVtX2xzX2dwcnMgPSAyMzsKLQkJbnVtX3BzX3RocmVhZHMgPSAxMjg7Ci0JCW51bV92c190aHJlYWRzID0gMjA7Ci0JCW51bV9nc190aHJlYWRzID0gMjA7Ci0JCW51bV9lc190aHJlYWRzID0gMjA7Ci0JCW51bV9oc190aHJlYWRzID0gMjA7Ci0JCW51bV9sc190aHJlYWRzID0gMjA7Ci0JCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV92c19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9oc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCWJyZWFrOwotCWNhc2UgQ0hJUF9DQUlDT1M6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAxMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikgfHwKLQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHx8Ci0JICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQUlDT1MpKQotCQlzcV9jb25maWcgPSAwOwotCWVsc2UKLQkJc3FfY29uZmlnID0gVkNfRU5BQkxFOwotCi0Jc3FfY29uZmlnIHw9IChFWFBPUlRfU1JDX0MgfAotCQkgICAgICBDU19QUklPKDApIHwKLQkJICAgICAgTFNfUFJJTygwKSB8Ci0JCSAgICAgIEhTX1BSSU8oMCkgfAotCQkgICAgICBQU19QUklPKDApIHwKLQkJICAgICAgVlNfUFJJTygxKSB8Ci0JCSAgICAgIEdTX1BSSU8oMikgfAotCQkgICAgICBFU19QUklPKDMpKTsKLQotCXNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX0dQUlMobnVtX3BzX2dwcnMpIHwKLQkJCQkgIE5VTV9WU19HUFJTKG51bV92c19ncHJzKSB8Ci0JCQkJICBOVU1fQ0xBVVNFX1RFTVBfR1BSUyhudW1fdGVtcF9ncHJzKSk7Ci0Jc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfR1BSUyhudW1fZ3NfZ3BycykgfAotCQkJCSAgTlVNX0VTX0dQUlMobnVtX2VzX2dwcnMpKTsKLQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8zID0gKE5VTV9IU19HUFJTKG51bV9oc19ncHJzKSB8Ci0JCQkJICBOVU1fTFNfR1BSUyhudW1fbHNfZ3BycykpOwotCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gKE5VTV9QU19USFJFQURTKG51bV9wc190aHJlYWRzKSB8Ci0JCQkJICAgTlVNX1ZTX1RIUkVBRFMobnVtX3ZzX3RocmVhZHMpIHwKLQkJCQkgICBOVU1fR1NfVEhSRUFEUyhudW1fZ3NfdGhyZWFkcykgfAotCQkJCSAgIE5VTV9FU19USFJFQURTKG51bV9lc190aHJlYWRzKSk7Ci0Jc3FfdGhyZWFkX3Jlc291cmNlX21nbXRfMiA9IChOVU1fSFNfVEhSRUFEUyhudW1faHNfdGhyZWFkcykgfAotCQkJCSAgICAgTlVNX0xTX1RIUkVBRFMobnVtX2xzX3RocmVhZHMpKTsKLQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX1NUQUNLX0VOVFJJRVMobnVtX3BzX3N0YWNrX2VudHJpZXMpIHwKLQkJCQkgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMobnVtX3ZzX3N0YWNrX2VudHJpZXMpKTsKLQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX1NUQUNLX0VOVFJJRVMobnVtX2dzX3N0YWNrX2VudHJpZXMpIHwKLQkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMobnVtX2VzX3N0YWNrX2VudHJpZXMpKTsKLQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzMgPSAoTlVNX0hTX1NUQUNLX0VOVFJJRVMobnVtX2hzX3N0YWNrX2VudHJpZXMpIHwKLQkJCQkgICAgTlVNX0xTX1NUQUNLX0VOVFJJRVMobnVtX2xzX3N0YWNrX2VudHJpZXMpKTsKLQogCS8qIHNldCBjbGVhciBjb250ZXh0IHN0YXRlICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0NMRUFSX1NUQVRFLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CiAKLQkvKiBkaXNhYmxlIGR5biBncHJzICovCi0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX0RZTl9HUFJfQ05UTF9QU19GTFVTSF9SRVEgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX1NUQVJUKSA+PiAyKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9DQVlNQU4pIHsKKwkJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwkJY2FzZSBDSElQX0NFREFSOgorCQlkZWZhdWx0OgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDk2OworCQkJbnVtX3ZzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9nc190aHJlYWRzID0gMTY7CisJCQludW1fZXNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2hzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9sc190aHJlYWRzID0gMTY7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1JFRFdPT0Q6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX0pVTklQRVI6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gODU7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX0NZUFJFU1M6CisJCWNhc2UgQ0hJUF9IRU1MT0NLOgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDEyODsKKwkJCW51bV92c190aHJlYWRzID0gMjA7CisJCQludW1fZ3NfdGhyZWFkcyA9IDIwOworCQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9oc190aHJlYWRzID0gMjA7CisJCQludW1fbHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV92c19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9oc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9QQUxNOgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDk2OworCQkJbnVtX3ZzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9nc190aHJlYWRzID0gMTY7CisJCQludW1fZXNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2hzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9sc190aHJlYWRzID0gMTY7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1NVTU86CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gOTY7CisJCQludW1fdnNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2dzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9lc190aHJlYWRzID0gMjU7CisJCQludW1faHNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2xzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCWJyZWFrOworCQljYXNlIENISVBfU1VNTzI6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gOTY7CisJCQludW1fdnNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2dzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9lc190aHJlYWRzID0gMjU7CisJCQludW1faHNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2xzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCWJyZWFrOworCQljYXNlIENISVBfQkFSVFM6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gODU7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1RVUktTOgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDEyODsKKwkJCW51bV92c190aHJlYWRzID0gMjA7CisJCQludW1fZ3NfdGhyZWFkcyA9IDIwOworCQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9oc190aHJlYWRzID0gMjA7CisJCQludW1fbHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV92c19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9oc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9DQUlDT1M6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAxMDsKKwkJCW51bV9nc190aHJlYWRzID0gMTA7CisJCQludW1fZXNfdGhyZWFkcyA9IDEwOworCQkJbnVtX2hzX3RocmVhZHMgPSAxMDsKKwkJCW51bV9sc190aHJlYWRzID0gMTA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJfQogCi0JLyogU1EgY29uZmlnICovCi0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxMSkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChTUV9DT05GSUcgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX1NUQVJUKSA+PiAyKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9jb25maWcpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzEpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzMpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210KTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV90aHJlYWRfcmVzb3VyY2VfbWdtdF8yKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzEpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMik7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8zKTsKKwkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikgfHwKKwkJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9QQUxNKSB8fAorCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1NVTU8pIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfU1VNTzIpIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfQ0FJQ09TKSkKKwkJCXNxX2NvbmZpZyA9IDA7CisJCWVsc2UKKwkJCXNxX2NvbmZpZyA9IFZDX0VOQUJMRTsKKworCQlzcV9jb25maWcgfD0gKEVYUE9SVF9TUkNfQyB8CisJCQkgICAgICBDU19QUklPKDApIHwKKwkJCSAgICAgIExTX1BSSU8oMCkgfAorCQkJICAgICAgSFNfUFJJTygwKSB8CisJCQkgICAgICBQU19QUklPKDApIHwKKwkJCSAgICAgIFZTX1BSSU8oMSkgfAorCQkJICAgICAgR1NfUFJJTygyKSB8CisJCQkgICAgICBFU19QUklPKDMpKTsKKworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKE5VTV9QU19HUFJTKG51bV9wc19ncHJzKSB8CisJCQkJCSAgTlVNX1ZTX0dQUlMobnVtX3ZzX2dwcnMpIHwKKwkJCQkJICBOVU1fQ0xBVVNFX1RFTVBfR1BSUyhudW1fdGVtcF9ncHJzKSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX0dQUlMobnVtX2dzX2dwcnMpIHwKKwkJCQkJICBOVU1fRVNfR1BSUyhudW1fZXNfZ3BycykpOworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8zID0gKE5VTV9IU19HUFJTKG51bV9oc19ncHJzKSB8CisJCQkJCSAgTlVNX0xTX0dQUlMobnVtX2xzX2dwcnMpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoTlVNX1BTX1RIUkVBRFMobnVtX3BzX3RocmVhZHMpIHwKKwkJCQkJICAgTlVNX1ZTX1RIUkVBRFMobnVtX3ZzX3RocmVhZHMpIHwKKwkJCQkJICAgTlVNX0dTX1RIUkVBRFMobnVtX2dzX3RocmVhZHMpIHwKKwkJCQkJICAgTlVNX0VTX1RIUkVBRFMobnVtX2VzX3RocmVhZHMpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXRfMiA9IChOVU1fSFNfVEhSRUFEUyhudW1faHNfdGhyZWFkcykgfAorCQkJCQkgICAgIE5VTV9MU19USFJFQURTKG51bV9sc190aHJlYWRzKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfU1RBQ0tfRU5UUklFUyhudW1fcHNfc3RhY2tfZW50cmllcykgfAorCQkJCQkgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMobnVtX3ZzX3N0YWNrX2VudHJpZXMpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19TVEFDS19FTlRSSUVTKG51bV9nc19zdGFja19lbnRyaWVzKSB8CisJCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUyhudW1fZXNfc3RhY2tfZW50cmllcykpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzMgPSAoTlVNX0hTX1NUQUNLX0VOVFJJRVMobnVtX2hzX3N0YWNrX2VudHJpZXMpIHwKKwkJCQkJICAgIE5VTV9MU19TVEFDS19FTlRSSUVTKG51bV9sc19zdGFja19lbnRyaWVzKSk7CisKKwkJLyogZGlzYWJsZSBkeW4gZ3BycyAqLworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDEpKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX0RZTl9HUFJfQ05UTF9QU19GTFVTSF9SRVEgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX1NUQVJUKSA+PiAyKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisKKwkJLyogU1EgY29uZmlnICovCisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMTEpKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX0NPTkZJRyAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfU1RBUlQpID4+IDIpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9jb25maWcpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9ncHJfcmVzb3VyY2VfbWdtdF8xKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMik7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzMpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210KTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXRfMik7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMik7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMyk7CisJfQogCiAJLyogQ09OVEVYVF9DT05UUk9MICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhjMDAxMjgwMCk7CkBAIC01NjAsNyArNjE5LDEwIEBACiAJbXV0ZXhfaW5pdCgmcmRldi0+cjYwMF9ibGl0Lm11dGV4KTsKIAlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ID0gMDsKIAotCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gPSBldmVyZ3JlZW5fZGVmYXVsdF9zaXplOworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikKKwkJcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiA9IGV2ZXJncmVlbl9kZWZhdWx0X3NpemU7CisJZWxzZQorCQlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gY2F5bWFuX2RlZmF1bHRfc2l6ZTsKIAogCWR3b3JkcyA9IHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW47CiAJd2hpbGUgKGR3b3JkcyAmIDB4ZikgewpAQCAtNTcyLDExICs2MzQsMTcgQEAKIAlvYmpfc2l6ZSA9IEFMSUdOKG9ial9zaXplLCAyNTYpOwogCiAJcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCA9IG9ial9zaXplOwotCW9ial9zaXplICs9IGV2ZXJncmVlbl92c19zaXplICogNDsKKwlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9DQVlNQU4pCisJCW9ial9zaXplICs9IGV2ZXJncmVlbl92c19zaXplICogNDsKKwllbHNlCisJCW9ial9zaXplICs9IGNheW1hbl92c19zaXplICogNDsKIAlvYmpfc2l6ZSA9IEFMSUdOKG9ial9zaXplLCAyNTYpOwogCiAJcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldCA9IG9ial9zaXplOwotCW9ial9zaXplICs9IGV2ZXJncmVlbl9wc19zaXplICogNDsKKwlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9DQVlNQU4pCisJCW9ial9zaXplICs9IGV2ZXJncmVlbl9wc19zaXplICogNDsKKwllbHNlCisJCW9ial9zaXplICs9IGNheW1hbl9wc19zaXplICogNDsKIAlvYmpfc2l6ZSA9IEFMSUdOKG9ial9zaXplLCAyNTYpOwogCiAJciA9IHJhZGVvbl9ib19jcmVhdGUocmRldiwgb2JqX3NpemUsIFBBR0VfU0laRSwgdHJ1ZSwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTU5OSwxNiArNjY3LDI5IEBACiAJCXJldHVybiByOwogCX0KIAotCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQsCi0JCSAgICBldmVyZ3JlZW5fZGVmYXVsdF9zdGF0ZSwgcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpOworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikgeworCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0LAorCQkJICAgIGV2ZXJncmVlbl9kZWZhdWx0X3N0YXRlLCByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCk7CiAKLQlpZiAobnVtX3BhY2tldDJzKQotCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKLQkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7Ci0JZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl92c19zaXplOyBpKyspCi0JCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihldmVyZ3JlZW5fdnNbaV0pOwotCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fcHNfc2l6ZTsgaSsrKQotCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIoZXZlcmdyZWVuX3BzW2ldKTsKKwkJaWYgKG51bV9wYWNrZXQycykKKwkJCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgKyAocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpLAorCQkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7CisJCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fdnNfc2l6ZTsgaSsrKQorCQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGV2ZXJncmVlbl92c1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fcHNfc2l6ZTsgaSsrKQorCQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGV2ZXJncmVlbl9wc1tpXSk7CisJfSBlbHNlIHsKKwkJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCwKKwkJCSAgICBjYXltYW5fZGVmYXVsdF9zdGF0ZSwgcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpOworCisJCWlmIChudW1fcGFja2V0MnMpCisJCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKKwkJCQkgICAgcGFja2V0MnMsIG51bV9wYWNrZXQycyAqIDQpOworCQlmb3IgKGkgPSAwOyBpIDwgY2F5bWFuX3ZzX3NpemU7IGkrKykKKwkJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihjYXltYW5fdnNbaV0pOworCQlmb3IgKGkgPSAwOyBpIDwgY2F5bWFuX3BzX3NpemU7IGkrKykKKwkJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihjYXltYW5fcHNbaV0pOworCX0KIAlyYWRlb25fYm9fa3VubWFwKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaAppbmRleCBmMzdlOTFlLi4xNjM2ZTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaApAQCAtMTY4LDEwICsxNjgsMTYgQEAKICNkZWZpbmUJCVNFX0RCX0JVU1kJCQkJCSgxIDw8IDMwKQogI2RlZmluZQkJU0VfQ0JfQlVTWQkJCQkJKDEgPDwgMzEpCiAvKiBldmVyZ3JlZW4gKi8KKyNkZWZpbmUJQ0dfVEhFUk1BTF9DVFJMCQkJCQkweDcyYworI2RlZmluZQkJVE9GRlNFVF9NQVNLCQkJICAgICAgICAweDAwMDAzRkUwCisjZGVmaW5lCQlUT0ZGU0VUX1NISUZUCQkJICAgICAgICA1CiAjZGVmaW5lCUNHX01VTFRfVEhFUk1BTF9TVEFUVVMJCQkJMHg3NDAKICNkZWZpbmUJCUFTSUNfVCh4KQkJCSAgICAgICAgKCh4KSA8PCAxNikKLSNkZWZpbmUJCUFTSUNfVF9NQVNLCQkJICAgICAgICAweDdGRjAwMDAKKyNkZWZpbmUJCUFTSUNfVF9NQVNLCQkJICAgICAgICAweDA3RkYwMDAwCiAjZGVmaW5lCQlBU0lDX1RfU0hJRlQJCQkgICAgICAgIDE2CisjZGVmaW5lCUNHX1RTMF9TVEFUVVMJCQkJCTB4NzYwCisjZGVmaW5lCQlUUzBfQURDX0RPVVRfTUFTSwkJCTB4MDAwMDAzRkYKKyNkZWZpbmUJCVRTMF9BRENfRE9VVF9TSElGVAkJCTAKIC8qIEFQVSAqLwogI2RlZmluZQlDR19USEVSTUFMX1NUQVRVUwkJCSAgICAgICAgMHg2NzgKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCmluZGV4IGIyMDViYTEuLjE2Y2FhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKQEAgLTEzODcsMTQgKzEzODcsMTIgQEAKIAkJcmV0dXJuIHI7CiAJY2F5bWFuX2dwdV9pbml0KHJkZXYpOwogCi0jaWYgMAotCXIgPSBjYXltYW5fYmxpdF9pbml0KHJkZXYpOworCXIgPSBldmVyZ3JlZW5fYmxpdF9pbml0KHJkZXYpOwogCWlmIChyKSB7Ci0JCWNheW1hbl9ibGl0X2ZpbmkocmRldik7CisJCWV2ZXJncmVlbl9ibGl0X2ZpbmkocmRldik7CiAJCXJkZXYtPmFzaWMtPmNvcHkgPSBOVUxMOwogCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgYmxpdHRlciAoJWQpIGZhbGxpbmcgYmFjayB0byBtZW1jcHlcbiIsIHIpOwogCX0KLSNlbmRpZgogCiAJLyogYWxsb2NhdGUgd2IgYnVmZmVyICovCiAJciA9IHJhZGVvbl93Yl9pbml0KHJkZXYpOwpAQCAtMTQ1Miw3ICsxNDUwLDcgQEAKIAogaW50IGNheW1hbl9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCS8qIGludCByOyAqLworCWludCByOwogCiAJLyogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciByaW5nIHRvIGJlIGVtcHR5ICovCiAJY2F5bWFuX2NwX2VuYWJsZShyZGV2LCBmYWxzZSk7CkBAIC0xNDYxLDE0ICsxNDU5LDEzIEBACiAJcmFkZW9uX3diX2Rpc2FibGUocmRldik7CiAJY2F5bWFuX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwogCi0jaWYgMAogCS8qIHVucGluIHNoYWRlcnMgYm8gKi8KIAlyID0gcmFkZW9uX2JvX3Jlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmosIGZhbHNlKTsKIAlpZiAobGlrZWx5KHIgPT0gMCkpIHsKIAkJcmFkZW9uX2JvX3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAkJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CiAJfQotI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU4MCw3ICsxNTc3LDcgQEAKIAogdm9pZCBjYXltYW5fZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQkvKiBjYXltYW5fYmxpdF9maW5pKHJkZXYpOyAqLworCWV2ZXJncmVlbl9ibGl0X2ZpbmkocmRldik7CiAJY2F5bWFuX2NwX2ZpbmkocmRldik7CiAJcjYwMF9pcnFfZmluaShyZGV2KTsKIAlyYWRlb25fd2JfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKaW5kZXggMmZlZjlkZS4uNjg2ZjlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKQEAgLTYzLDcgKzYzLDcgQEAKIAl1bnNpZ25lZAkJCW51bV9hcnJheXM7CiAJdW5zaWduZWQJCQltYXhfaW5keDsKIAl1bnNpZ25lZAkJCWNvbG9yX2NoYW5uZWxfbWFzazsKLQlzdHJ1Y3QgcjEwMF9jc190cmFja19hcnJheQlhcnJheXNbMTFdOworCXN0cnVjdCByMTAwX2NzX3RyYWNrX2FycmF5CWFycmF5c1sxNl07CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgCWNiW1IzMDBfTUFYX0NCXTsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja19jYiAJemI7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgCWFhOwpAQCAtMTQ2LDYgKzE0NiwxMiBAQAogCWliID0gcC0+aWItPnB0cjsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwogCWMgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCsrKSAmIDB4MUY7CisJaWYgKGMgPiAxNikgeworCSAgICBEUk1fRVJST1IoIk9ubHkgMTYgdmVydGV4IGJ1ZmZlcnMgYXJlIGFsbG93ZWQgJWRcbiIsCisJCSAgICAgIHBrdC0+b3Bjb2RlKTsKKwkgICAgcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCSAgICByZXR1cm4gLUVJTlZBTDsKKwl9CiAJdHJhY2stPm51bV9hcnJheXMgPSBjOwogCWZvciAoaSA9IDA7IGkgPCAoYyAtIDEpOyBpKz0yLCBpZHgrPTMpIHsKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKaW5kZXggNmYyNzU5My4uN2RkNDVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKQEAgLTg3LDYgKzg3LDEwIEBACiBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9QQUxNX3BmcC5iaW4iKTsKIE1PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1BBTE1fbWUuYmluIik7CiBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9TVU1PX3JsYy5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1NVTU9fcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vU1VNT19tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1NVTU8yX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1NVTU8yX21lLmJpbiIpOwogCiBpbnQgcjYwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKQEAgLTIwMjQsNiArMjAyOCwxNCBAQAogCQljaGlwX25hbWUgPSAiUEFMTSI7CiAJCXJsY19jaGlwX25hbWUgPSAiU1VNTyI7CiAJCWJyZWFrOworCWNhc2UgQ0hJUF9TVU1POgorCQljaGlwX25hbWUgPSAiU1VNTyI7CisJCXJsY19jaGlwX25hbWUgPSAiU1VNTyI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9TVU1PMjoKKwkJY2hpcF9uYW1lID0gIlNVTU8yIjsKKwkJcmxjX2NoaXBfbmFtZSA9ICJTVU1PIjsKKwkJYnJlYWs7CiAJZGVmYXVsdDogQlVHKCk7CiAJfQogCkBAIC0zNDMyLDcgKzM0NDQsNyBAQAogCQkJcmFkZW9uX2ZlbmNlX3Byb2Nlc3MocmRldik7CiAJCQlicmVhazsKIAkJY2FzZSAyMzM6IC8qIEdVSSBJRExFICovCi0JCQlEUk1fREVCVUcoIklIOiBDUCBFT1BcbiIpOworCQkJRFJNX0RFQlVHKCJJSDogR1VJIGlkbGVcbiIpOwogCQkJcmRldi0+cG0uZ3VpX2lkbGUgPSB0cnVlOwogCQkJd2FrZV91cCgmcmRldi0+aXJxLmlkbGVfcXVldWUpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCmluZGV4IGZkMThiZTkuLjkwOWJkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCkBAIC03MSwyMCArNzEsMjEgQEAKIAl1NjQJCQlkYl9ib19tYzsKIH07CiAKLSNkZWZpbmUgRk1UXzhfQklUKGZtdCwgdmMpIFtmbXRdID0geyAxLCAxLCAxLCB2YyB9Ci0jZGVmaW5lIEZNVF8xNl9CSVQoZm10LCB2YykgW2ZtdF0gPSB7IDEsIDEsIDIsIHZjIH0KLSNkZWZpbmUgRk1UXzI0X0JJVChmbXQpIFtmbXRdID0geyAxLCAxLCAzLCAwIH0KLSNkZWZpbmUgRk1UXzMyX0JJVChmbXQsIHZjKSBbZm10XSA9IHsgMSwgMSwgNCwgdmMgfQotI2RlZmluZSBGTVRfNDhfQklUKGZtdCkgW2ZtdF0gPSB7IDEsIDEsIDYsIDAgfQotI2RlZmluZSBGTVRfNjRfQklUKGZtdCwgdmMpIFtmbXRdID0geyAxLCAxLCA4LCB2YyB9Ci0jZGVmaW5lIEZNVF85Nl9CSVQoZm10KSBbZm10XSA9IHsgMSwgMSwgMTIsIDAgfQotI2RlZmluZSBGTVRfMTI4X0JJVChmbXQsIHZjKSBbZm10XSA9IHsgMSwgMSwgMTYsIHZjIH0KKyNkZWZpbmUgRk1UXzhfQklUKGZtdCwgdmMpICAgW2ZtdF0gPSB7IDEsIDEsIDEsIHZjLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfMTZfQklUKGZtdCwgdmMpICBbZm10XSA9IHsgMSwgMSwgMiwgdmMsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF8yNF9CSVQoZm10KSAgICAgIFtmbXRdID0geyAxLCAxLCAzLCAgMCwgQ0hJUF9SNjAwIH0KKyNkZWZpbmUgRk1UXzMyX0JJVChmbXQsIHZjKSAgW2ZtdF0gPSB7IDEsIDEsIDQsIHZjLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfNDhfQklUKGZtdCkgICAgICBbZm10XSA9IHsgMSwgMSwgNiwgIDAsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF82NF9CSVQoZm10LCB2YykgIFtmbXRdID0geyAxLCAxLCA4LCB2YywgQ0hJUF9SNjAwIH0KKyNkZWZpbmUgRk1UXzk2X0JJVChmbXQpICAgICAgW2ZtdF0gPSB7IDEsIDEsIDEyLCAwLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfMTI4X0JJVChmbXQsIHZjKSBbZm10XSA9IHsgMSwgMSwgMTYsdmMsIENISVBfUjYwMCB9CiAKIHN0cnVjdCBncHVfZm9ybWF0cyB7CiAJdW5zaWduZWQgYmxvY2t3aWR0aDsKIAl1bnNpZ25lZCBibG9ja2hlaWdodDsKIAl1bnNpZ25lZCBibG9ja3NpemU7CiAJdW5zaWduZWQgdmFsaWRfY29sb3I7CisJZW51bSByYWRlb25fZmFtaWx5IG1pbl9mYW1pbHk7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGdwdV9mb3JtYXRzIGNvbG9yX2Zvcm1hdHNfdGFibGVbXSA9IHsKQEAgLTE1NCw3ICsxNTUsMTEgQEAKIAlbVl8wMzgwMDRfRk1UX0JDM10gPSB7IDQsIDQsIDE2LCAwIH0sCiAJW1ZfMDM4MDA0X0ZNVF9CQzRdID0geyA0LCA0LCA4LCAwIH0sCiAJW1ZfMDM4MDA0X0ZNVF9CQzVdID0geyA0LCA0LCAxNiwgMH0sCisJW1ZfMDM4MDA0X0ZNVF9CQzZdID0geyA0LCA0LCAxNiwgMCwgQ0hJUF9DRURBUn0sIC8qIEV2ZXJncmVlbi1vbmx5ICovCisJW1ZfMDM4MDA0X0ZNVF9CQzddID0geyA0LCA0LCAxNiwgMCwgQ0hJUF9DRURBUn0sIC8qIEV2ZXJncmVlbi1vbmx5ICovCiAKKwkvKiBUaGUgb3RoZXIgRXZlcmdyZWVuIGZvcm1hdHMgKi8KKwlbVl8wMzgwMDRfRk1UXzMyX0FTXzMyXzMyXzMyXzMyXSA9IHsgMSwgMSwgNCwgMCwgQ0hJUF9DRURBUn0sCiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgZm10X2lzX3ZhbGlkX2NvbG9yKHUzMiBmb3JtYXQpCkBAIC0xNjgsMTEgKzE3MywxNCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGZtdF9pc192YWxpZF90ZXh0dXJlKHUzMiBmb3JtYXQpCitzdGF0aWMgaW5saW5lIGJvb2wgZm10X2lzX3ZhbGlkX3RleHR1cmUodTMyIGZvcm1hdCwgZW51bSByYWRlb25fZmFtaWx5IGZhbWlseSkKIHsKIAlpZiAoZm9ybWF0ID49IEFSUkFZX1NJWkUoY29sb3JfZm9ybWF0c190YWJsZSkpCiAJCXJldHVybiBmYWxzZTsKIAkKKwlpZiAoZmFtaWx5IDwgY29sb3JfZm9ybWF0c190YWJsZVtmb3JtYXRdLm1pbl9mYW1pbHkpCisJCXJldHVybiBmYWxzZTsKKwogCWlmIChjb2xvcl9mb3JtYXRzX3RhYmxlW2Zvcm1hdF0uYmxvY2t3aWR0aCA+IDApCiAJCXJldHVybiB0cnVlOwogCkBAIC0xMzI1LDcgKzEzMzMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZm9ybWF0ID0gR18wMzgwMDRfREFUQV9GT1JNQVQod29yZDEpOwotCWlmICghZm10X2lzX3ZhbGlkX3RleHR1cmUoZm9ybWF0KSkgeworCWlmICghZm10X2lzX3ZhbGlkX3RleHR1cmUoZm9ybWF0LCBwLT5mYW1pbHkpKSB7CiAJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleHR1cmUgaW52YWxpZCBmb3JtYXQgJWRcbiIsCiAJCQkgX19mdW5jX18sIF9fTElORV9fLCBmb3JtYXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAppbmRleCBiMmI5NDRiYy4uZjE0MGEwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaApAQCAtMTMwOSw2ICsxMzA5LDkgQEAKICNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF9CQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCiAjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfQkM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAogI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UX0JDNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF9CQzYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfQkM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UXzMyX0FTXzMyXzMyXzMyXzMyICAgICAgICAgICAgIDB4MDAwMDAwMzgKICNkZWZpbmUgUl8wMzgwMTBfU1FfVEVYX1JFU09VUkNFX1dPUkQ0XzAgICAgICAgICAgICAgMHgwMzgwMTAKICNkZWZpbmUgICBTXzAzODAxMF9GT1JNQVRfQ09NUF9YKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMCkKICNkZWZpbmUgICBHXzAzODAxMF9GT1JNQVRfQ09NUF9YKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCmluZGV4IGJhNjQzYjUuLjI3ZjQ1NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaApAQCAtMTY1LDYgKzE2NSw3IEBACiAJdWludDMyX3QgZGVmYXVsdF9zY2xrOwogCXVpbnQzMl90IGRlZmF1bHRfZGlzcGNsazsKIAl1aW50MzJfdCBkcF9leHRjbGs7CisJdWludDMyX3QgbWF4X3BpeGVsX2Nsb2NrOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwppbmRleCBkOTQ4MjY1Li45YmQxNjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCkBAIC05MDYsOSArOTA2LDkgQEAKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJmV2ZXJncmVlbl9nZXRfdmJsYW5rX2NvdW50ZXIsCiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyNjAwX2ZlbmNlX3JpbmdfZW1pdCwKIAkuY3NfcGFyc2UgPSAmZXZlcmdyZWVuX2NzX3BhcnNlLAotCS5jb3B5X2JsaXQgPSBOVUxMLAotCS5jb3B5X2RtYSA9IE5VTEwsCi0JLmNvcHkgPSBOVUxMLAorCS5jb3B5X2JsaXQgPSAmZXZlcmdyZWVuX2NvcHlfYmxpdCwKKwkuY29weV9kbWEgPSAmZXZlcmdyZWVuX2NvcHlfYmxpdCwKKwkuY29weSA9ICZldmVyZ3JlZW5fY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKIAkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLApAQCAtMTAyMCw2ICsxMDIwLDggQEAKIAkJcmRldi0+YXNpYyA9ICZldmVyZ3JlZW5fYXNpYzsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1BBTE06CisJY2FzZSBDSElQX1NVTU86CisJY2FzZSBDSElQX1NVTU8yOgogCQlyZGV2LT5hc2ljID0gJnN1bW9fYXNpYzsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX0JBUlRTOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggOTBkZmIyYi4uZmE2MmE1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC0xMjQ2LDYgKzEyNDYsMTAgQEAKIAkJfQogCQkqZGNwbGwgPSAqcDFwbGw7CiAKKwkJcmRldi0+Y2xvY2subWF4X3BpeGVsX2Nsb2NrID0gbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51c01heFBpeGVsQ2xvY2spOworCQlpZiAocmRldi0+Y2xvY2subWF4X3BpeGVsX2Nsb2NrID09IDApCisJCQlyZGV2LT5jbG9jay5tYXhfcGl4ZWxfY2xvY2sgPSA0MDAwMDsKKwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKaW5kZXggNTI0OWFmOC4uMmQ0OGU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCXAxcGxsLT5yZWZlcmVuY2VfZGl2ID0gUlJFRzMyX1BMTChSQURFT05fUFBMTF9SRUZfRElWKSAmIDB4M2ZmOwogCWlmIChwMXBsbC0+cmVmZXJlbmNlX2RpdiA8IDIpCiAJCXAxcGxsLT5yZWZlcmVuY2VfZGl2ID0gMTI7Ci0JcDJwbGwtPnJlZmVyZW5jZV9kaXYgPSBwMXBsbC0+cmVmZXJlbmNlX2RpdjsJCisJcDJwbGwtPnJlZmVyZW5jZV9kaXYgPSBwMXBsbC0+cmVmZXJlbmNlX2RpdjsKIAogCS8qIFRoZXNlIGFyZW4ndCBpbiB0aGUgZGV2aWNlLXRyZWUgKi8KIAlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjQyMCkgewpAQCAtMTM5LDYgKzEzOSw4IEBACiAJCXAycGxsLT5wbGxfb3V0X21pbiA9IDEyNTAwOwogCQlwMnBsbC0+cGxsX291dF9tYXggPSAzNTAwMDsKIAl9CisJLyogbm90IHN1cmUgd2hhdCB0aGUgbWF4IHNob3VsZCBiZSBpbiBhbGwgY2FzZXMgKi8KKwlyZGV2LT5jbG9jay5tYXhfcGl4ZWxfY2xvY2sgPSAzNTAwMDsKIAogCXNwbGwtPnJlZmVyZW5jZV9mcmVxID0gbXBsbC0+cmVmZXJlbmNlX2ZyZXEgPSBwMXBsbC0+cmVmZXJlbmNlX2ZyZXE7CiAJc3BsbC0+cmVmZXJlbmNlX2RpdiA9IG1wbGwtPnJlZmVyZW5jZV9kaXYgPQpAQCAtMTUxLDcgKzE1Myw3IEBACiAJZWxzZQogCQlyZGV2LT5jbG9jay5kZWZhdWx0X3NjbGsgPQogCQkJcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrKHJkZXYpOwotCQkJCisKIAl2YWwgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJBVFksTUNMSyIsIE5VTEwpOwogCWlmICh2YWwgJiYgKnZhbCkKIAkJcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrID0gKCp2YWwpIC8gMTA7CkBAIC0xNjAsNyArMTYyLDcgQEAKIAkJCXJhZGVvbl9sZWdhY3lfZ2V0X21lbW9yeV9jbG9jayhyZGV2KTsKIAogCURSTV9JTkZPKCJVc2luZyBkZXZpY2UtdHJlZSBjbG9jayBpbmZvXG4iKTsKLQkKKwogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwppbmRleCA1Yjk5MWY3Li43OTdjOGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCkBAIC04NjYsNiArODY2LDExIEBACiAJCXJkZXYtPmNsb2NrLmRlZmF1bHRfc2NsayA9IHNjbGs7CiAJCXJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsayA9IG1jbGs7CiAKKwkJaWYgKFJCSU9TMzIocGxsX2luZm8gKyAweDE2KSkKKwkJCXJkZXYtPmNsb2NrLm1heF9waXhlbF9jbG9jayA9IFJCSU9TMzIocGxsX2luZm8gKyAweDE2KTsKKwkJZWxzZQorCQkJcmRldi0+Y2xvY2subWF4X3BpeGVsX2Nsb2NrID0gMzUwMDA7IC8qIG1pZ2h0IG5lZWQgc29tZXRoaW5nIGFzaWMgc3BlY2lmaWMgKi8KKwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJcmV0dXJuIGZhbHNlOwpAQCAtMTU0OCw5ICsxNTUzLDggQEAKIAkJCSAgIChyZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4NGE0OCkpIHsKIAkJCS8qIE1hYyBYODAwICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfTUFDX1g4MDA7Ci0JCX0gZWxzZSBpZiAoKHJkZXYtPnBkZXYtPmRldmljZSA9PSAweDQxNTApICYmCi0JCQkgICAocmRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwMDIpICYmCi0JCQkgICAocmRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDQxNTApKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikpIHsKIAkJCS8qIE1hYyBHNSA5NjAwICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfTUFDX0c1Xzk2MDA7CiAJCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IGVlMWRjY2IuLjljMjkyOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTYyNiw4ICs2MjYsMTQgQEAKIHN0YXRpYyBpbnQgcmFkZW9uX3ZnYV9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCiAJLyogWFhYIGNoZWNrIG1vZGUgYmFuZHdpZHRoICovCi0JLyogWFhYIHZlcmlmeSBhZ2FpbnN0IG1heCBEQUMgb3V0cHV0IGZyZXF1ZW5jeSAqLworCisJaWYgKChtb2RlLT5jbG9jayAvIDEwKSA+IHJkZXYtPmNsb2NrLm1heF9waXhlbF9jbG9jaykKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKwogCXJldHVybiBNT0RFX09LOwogfQogCkBAIC0xMDE1LDYgKzEwMjEsMTEgQEAKIAkJfSBlbHNlCiAJCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOwogCX0KKworCS8qIGNoZWNrIGFnYWluc3QgdGhlIG1heCBwaXhlbCBjbG9jayAqLworCWlmICgobW9kZS0+Y2xvY2sgLyAxMCkgPiByZGV2LT5jbG9jay5tYXhfcGl4ZWxfY2xvY2spCisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisKIAlyZXR1cm4gTU9ERV9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKaW5kZXggOGMxOTE2OS4uZmFlMDBjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCkBAIC0yMjgsNiArMjI4LDcgQEAKIAlwYXJzZXIuZmlscCA9IGZpbHA7CiAJcGFyc2VyLnJkZXYgPSByZGV2OwogCXBhcnNlci5kZXYgPSByZGV2LT5kZXY7CisJcGFyc2VyLmZhbWlseSA9IHJkZXYtPmZhbWlseTsKIAlyID0gcmFkZW9uX2NzX3BhcnNlcl9pbml0KCZwYXJzZXIsIGRhdGEpOwogCWlmIChyKSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgcGFyc2VyICFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwppbmRleCA1YjYxMzY0Li5lNjgwNTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtODIsNiArODIsOCBAQAogCSJDWVBSRVNTIiwKIAkiSEVNTE9DSyIsCiAJIlBBTE0iLAorCSJTVU1PIiwKKwkiU1VNTzIiLAogCSJCQVJUUyIsCiAJIlRVUktTIiwKIAkiQ0FJQ09TIiwKQEAgLTc1Miw2ICs3NTQsNyBAQAogCWRtYV9iaXRzID0gcmRldi0+bmVlZF9kbWEzMiA/IDMyIDogNDA7CiAJciA9IHBjaV9zZXRfZG1hX21hc2socmRldi0+cGRldiwgRE1BX0JJVF9NQVNLKGRtYV9iaXRzKSk7CiAJaWYgKHIpIHsKKwkJcmRldi0+bmVlZF9kbWEzMiA9IHRydWU7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJhZGVvbjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IGFlMjQ3ZWVjLi4yOTJmNzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC0yNjQsNiArMjY0LDggQEAKIAkJcmFkZW9uX2JvX3VucmVzZXJ2ZSh3b3JrLT5vbGRfcmJvKTsKIAl9IGVsc2UKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVzZXJ2ZSBidWZmZXIgYWZ0ZXIgZmxpcFxuIik7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmd29yay0+b2xkX3Jiby0+Z2VtX2Jhc2UpOwogCWtmcmVlKHdvcmspOwogfQogCkBAIC0zNzEsNiArMzczLDggQEAKIAluZXdfcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGZiKTsKIAkvKiBzY2hlZHVsZSB1bnBpbiBvZiB0aGUgb2xkIGJ1ZmZlciAqLwogCW9iaiA9IG9sZF9yYWRlb25fZmItPm9iajsKKwkvKiB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBvbGQgb2JqZWN0ICovCisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CiAJcmJvID0gZ2VtX3RvX3JhZGVvbl9ibyhvYmopOwogCXdvcmstPm9sZF9yYm8gPSByYm87CiAJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCByYWRlb25fdW5waW5fd29ya19mdW5jKTsKQEAgLTM3OCwxMiArMzgyLDkgQEAKIAkvKiBXZSBib3Jyb3cgdGhlIGV2ZW50IHNwaW4gbG9jayBmb3IgcHJvdGVjdGluZyB1bnBpbl93b3JrICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCWlmIChyYWRlb25fY3J0Yy0+dW5waW5fd29yaykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKLQkJa2ZyZWUod29yayk7Ci0JCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOwotCiAJCURSTV9ERUJVR19EUklWRVIoImZsaXAgcXVldWU6IGNydGMgYWxyZWFkeSBidXN5XG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJciA9IC1FQlVTWTsKKwkJZ290byB1bmxvY2tfZnJlZTsKIAl9CiAJcmFkZW9uX2NydGMtPnVucGluX3dvcmsgPSB3b3JrOwogCXJhZGVvbl9jcnRjLT5kZWZlcnJlZF9mbGlwX2NvbXBsZXRpb24gPSAwOwpAQCAtNDk3LDYgKzQ5OCw4IEBACiBwZmxpcF9jbGVhbnVwOgogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAlyYWRlb25fY3J0Yy0+dW5waW5fd29yayA9IE5VTEw7Cit1bmxvY2tfZnJlZToKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvbGRfcmFkZW9uX2ZiLT5vYmopOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOwogCWtmcmVlKHdvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCAxZDMzMDYwLi43M2RmYmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtMTEzLDcgKzExMyw3IEBACiBpbnQgcmFkZW9uX3Rlc3RpbmcgPSAwOwogaW50IHJhZGVvbl9jb25uZWN0b3JfdGFibGUgPSAwOwogaW50IHJhZGVvbl90diA9IDE7Ci1pbnQgcmFkZW9uX2F1ZGlvID0gMTsKK2ludCByYWRlb25fYXVkaW8gPSAwOwogaW50IHJhZGVvbl9kaXNwX3ByaW9yaXR5ID0gMDsKIGludCByYWRlb25faHdfaTJjID0gMDsKIGludCByYWRlb25fcGNpZV9nZW4yID0gMDsKQEAgLTE1MSw3ICsxNTEsNyBAQAogTU9EVUxFX1BBUk1fREVTQyh0diwgIlRWIGVuYWJsZSAoMCA9IGRpc2FibGUpIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQodHYsIHJhZGVvbl90diwgaW50LCAwNDQ0KTsKIAotTU9EVUxFX1BBUk1fREVTQyhhdWRpbywgIkF1ZGlvIGVuYWJsZSAoMCA9IGRpc2FibGUpIik7CitNT0RVTEVfUEFSTV9ERVNDKGF1ZGlvLCAiQXVkaW8gZW5hYmxlICgxID0gZW5hYmxlKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGF1ZGlvLCByYWRlb25fYXVkaW8sIGludCwgMDQ0NCk7CiAKIE1PRFVMRV9QQVJNX0RFU0MoZGlzcF9wcmlvcml0eSwgIkRpc3BsYXkgUHJpb3JpdHkgKDAgPSBhdXRvLCAxID0gbm9ybWFsLCAyID0gaGlnaCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDFiNTU3NTUuLjAzZjEyNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtOTU0LDEwICs5NTQsMTUgQEAKIAlpbnQgZHBfbGFuZV9jb3VudCA9IDA7CiAJaW50IGNvbm5lY3Rvcl9vYmplY3RfaWQgPSAwOwogCWludCBpZ3BfbGFuZV9pbmZvID0gMDsKKwlpbnQgZGlnX2VuY29kZXIgPSBkaWctPmRpZ19lbmNvZGVyOwogCi0JaWYgKGFjdGlvbiA9PSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9JTklUKQorCWlmIChhY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCkgewogCQljb25uZWN0b3IgPSByYWRlb25fZ2V0X2Nvbm5lY3Rvcl9mb3JfZW5jb2Rlcl9pbml0KGVuY29kZXIpOwotCWVsc2UKKwkJLyoganVzdCBuZWVkZWQgdG8gYXZvaWQgYmFpbGluZyBpbiB0aGUgZW5jb2RlciBjaGVjay4gIHRoZSBlbmNvZGVyCisJCSAqIGlzbid0IHVzZWQgZm9yIGluaXQKKwkJICovCisJCWRpZ19lbmNvZGVyID0gMDsKKwl9IGVsc2UKIAkJY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXIoZW5jb2Rlcik7CiAKIAlpZiAoY29ubmVjdG9yKSB7CkBAIC05NzMsNyArOTc4LDcgQEAKIAl9CiAKIAkvKiBubyBkaWcgZW5jb2RlciBhc3NpZ25lZCAqLwotCWlmIChkaWctPmRpZ19lbmNvZGVyID09IC0xKQorCWlmIChkaWdfZW5jb2RlciA9PSAtMSkKIAkJcmV0dXJuOwogCiAJaWYgKGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2RlcikgPT0gQVRPTV9FTkNPREVSX01PREVfRFApCkBAIC0xMDIzLDcgKzEwMjgsNyBAQAogCiAJCWlmIChkaWctPmxpbmtiKQogCQkJYXJncy52My5hY0NvbmZpZy51Y0xpbmtTZWwgPSAxOwotCQlpZiAoZGlnLT5kaWdfZW5jb2RlciAmIDEpCisJCWlmIChkaWdfZW5jb2RlciAmIDEpCiAJCQlhcmdzLnYzLmFjQ29uZmlnLnVjRW5jb2RlclNlbCA9IDE7CiAKIAkJLyogU2VsZWN0IHRoZSBQTEwgZm9yIHRoZSBQSFkKQEAgLTEwNzMsNyArMTA3OCw3IEBACiAJCQkJYXJncy52My5hY0NvbmZpZy5mRHVhbExpbmtDb25uZWN0b3IgPSAxOwogCQl9CiAJfSBlbHNlIGlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCWFyZ3MudjIuYWNDb25maWcudWNFbmNvZGVyU2VsID0gZGlnLT5kaWdfZW5jb2RlcjsKKwkJYXJncy52Mi5hY0NvbmZpZy51Y0VuY29kZXJTZWwgPSBkaWdfZW5jb2RlcjsKIAkJaWYgKGRpZy0+bGlua2IpCiAJCQlhcmdzLnYyLmFjQ29uZmlnLnVjTGlua1NlbCA9IDE7CiAKQEAgLTExMDAsNyArMTEwNSw3IEBACiAJfSBlbHNlIHsKIAkJYXJncy52MS51Y0NvbmZpZyA9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0NMS1NSQ19QUExMOwogCi0JCWlmIChkaWctPmRpZ19lbmNvZGVyKQorCQlpZiAoZGlnX2VuY29kZXIpCiAJCQlhcmdzLnYxLnVjQ29uZmlnIHw9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0RJRzJfRU5DT0RFUjsKIAkJZWxzZQogCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcxX0VOQ09ERVI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYW1pbHkuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCmluZGV4IDZmMWQ5ZTUuLmVjMmYxZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCkBAIC04MSw2ICs4MSw4IEBACiAJQ0hJUF9DWVBSRVNTLAogCUNISVBfSEVNTE9DSywKIAlDSElQX1BBTE0sCisJQ0hJUF9TVU1PLAorCUNISVBfU1VNTzIsCiAJQ0hJUF9CQVJUUywKIAlDSElQX1RVUktTLAogCUNISVBfQ0FJQ09TLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKaW5kZXggODZlZGExZS4uYWFhMTlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCkBAIC00ODcsNiArNDg3LDcgQEAKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjZYWDoKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjc3MDoKIAljYXNlIFRIRVJNQUxfVFlQRV9FVkVSR1JFRU46CisJY2FzZSBUSEVSTUFMX1RZUEVfTkk6CiAJY2FzZSBUSEVSTUFMX1RZUEVfU1VNTzoKIAkJcmRldi0+cG0uaW50X2h3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihyZGV2LT5kZXYpOwogCQlpZiAoSVNfRVJSKHJkZXYtPnBtLmludF9od21vbl9kZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAKaW5kZXggOTJmMTkwMC4uZWE0OTc1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjYwMApAQCAtNzU4LDYgKzc1OCw1IEBACiAweDAwMDA5NzE0IFZDX0VOSEFOQ0UKIDB4MDAwMDk4MzAgREJfREVCVUcKIDB4MDAwMDk4MzggREJfV0FURVJNQVJLUwotMHgwMDAyOEQyOCBEQl9TUkVTVUxUU19DT01QQVJFX1NUQVRFMAogMHgwMDAyOEQ0NCBEQl9BTFBIQV9UT19NQVNLCiAweDAwMDA5NzAwIFZDX0NOVEwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jIGIvZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2VfYmNpLmMKaW5kZXggYmY1ZjgzZS4uY2IxZWU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2VfYmNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2VfYmNpLmMKQEAgLTY0Nyw5ICs2NDcsNiBAQAogCXJldCA9IGRybV9hZGRtYXAoZGV2LCBhcGVydHVyZV9iYXNlLCBTQVZBR0VfQVBFUlRVUkVfU0laRSwKIAkJCSBfRFJNX0ZSQU1FX0JVRkZFUiwgX0RSTV9XUklURV9DT01CSU5JTkcsCiAJCQkgJmRldl9wcml2LT5hcGVydHVyZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYyBiL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYwppbmRleCBkZTNkMjQ2Li44NWU5Mzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKKysrIGIvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCkBAIC0yOTYsNyArMjk2LDcgQEAKIAkJICogSWYgdGhlIFRqTWF4IGlzIG5vdCBwbGF1c2libGUsIGFuIGFzc3VtcHRpb24KIAkJICogd2lsbCBiZSB1c2VkCiAJCSAqLwotCQlpZiAodmFsID4gODAgJiYgdmFsIDwgMTIwKSB7CisJCWlmICh2YWwpIHsKIAkJCWRldl9pbmZvKGRldiwgIlRqTWF4IGlzICVkIEMuXG4iLCB2YWwpOwogCQkJcmV0dXJuIHZhbCAqIDEwMDA7CiAJCX0KQEAgLTMwNCwyNCArMzA0LDkgQEAKIAogCS8qCiAJICogQW4gYXNzdW1wdGlvbiBpcyBtYWRlIGZvciBlYXJseSBDUFVzIGFuZCB1bnJlYWRhYmxlIE1TUi4KLQkgKiBOT1RFOiB0aGUgZ2l2ZW4gdmFsdWUgbWF5IG5vdCBiZSBjb3JyZWN0LgorCSAqIE5PVEU6IHRoZSBjYWxjdWxhdGVkIHZhbHVlIG1heSBub3QgYmUgY29ycmVjdC4KIAkgKi8KLQotCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7Ci0JY2FzZSAweGU6Ci0JY2FzZSAweGY6Ci0JY2FzZSAweDE2OgotCWNhc2UgMHgxYToKLQkJZGV2X3dhcm4oZGV2LCAiVGpNYXggaXMgYXNzdW1lZCBhcyAxMDAgQyFcbiIpOwotCQlyZXR1cm4gMTAwMDAwOwotCWNhc2UgMHgxNzoKLQljYXNlIDB4MWM6CQkvKiBBdG9tIENQVXMgKi8KLQkJcmV0dXJuIGFkanVzdF90am1heChjLCBpZCwgZGV2KTsKLQlkZWZhdWx0OgotCQlkZXZfd2FybihkZXYsICJDUFUgKG1vZGVsPTB4JXgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LCIKLQkJCSIgdXNpbmcgZGVmYXVsdCBUak1heCBvZiAxMDBDLlxuIiwgYy0+eDg2X21vZGVsKTsKLQkJcmV0dXJuIDEwMDAwMDsKLQl9CisJcmV0dXJuIGFkanVzdF90am1heChjLCBpZCwgZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGdldF91Y29kZV9yZXZfb25fY3B1KHZvaWQgKmVkeCkKQEAgLTM0MSw3ICszMjYsNyBAQAogCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGNwdSwgTVNSX0lBMzJfVEVNUEVSQVRVUkVfVEFSR0VULCAmZWF4LCAmZWR4KTsKIAlpZiAoIWVycikgewogCQl2YWwgPSAoZWF4ID4+IDE2KSAmIDB4ZmY7Ci0JCWlmICh2YWwgPiA4MCAmJiB2YWwgPCAxMjApCisJCWlmICh2YWwpCiAJCQlyZXR1cm4gdmFsICogMTAwMDsKIAl9CiAJZGV2X3dhcm4oZGV2LCAiVW5hYmxlIHRvIHJlYWQgUGtnLVRqTWF4IGZyb20gQ1BVOiV1XG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9tYXg2NjQyLmMgYi9kcml2ZXJzL2h3bW9uL21heDY2NDIuYwppbmRleCAwZjlmYzQwLi5lODU1ZDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL21heDY2NDIuYworKysgYi9kcml2ZXJzL2h3bW9uL21heDY2NDIuYwpAQCAtMTM2LDE1ICsxMzYsMjkgQEAKIAlpZiAobWFuX2lkICE9IDB4NEQpCiAJCXJldHVybiAtRU5PREVWOwogCisJLyogc2FuaXR5IGNoZWNrICovCisJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDQpICE9IDB4NEQKKwkgICAgfHwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwNikgIT0gMHg0RAorCSAgICB8fCBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweGZmKSAhPSAweDREKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qCiAJICogV2UgcmVhZCB0aGUgY29uZmlnIGFuZCBzdGF0dXMgcmVnaXN0ZXIsIHRoZSA0IGxvd2VyIGJpdHMgaW4gdGhlCiAJICogY29uZmlnIHJlZ2lzdGVyIHNob3VsZCBiZSB6ZXJvIGFuZCBiaXQgNSwgMywgMSBhbmQgMCBzaG91bGQgYmUKIAkgKiB6ZXJvIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIuCiAJICovCiAJcmVnX2NvbmZpZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NDJfUkVHX1JfQ09ORklHKTsKKwlpZiAoKHJlZ19jb25maWcgJiAweDBmKSAhPSAweDAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGluIGJldHdlZW4sIGFub3RoZXIgcm91bmQgb2Ygc2FuaXR5IGNoZWNrcyAqLworCWlmIChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDA0KSAhPSByZWdfY29uZmlnCisJICAgIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDYpICE9IHJlZ19jb25maWcKKwkgICAgfHwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHhmZikgIT0gcmVnX2NvbmZpZykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyZWdfc3RhdHVzID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUFYNjY0Ml9SRUdfUl9TVEFUVVMpOwotCWlmICgoKHJlZ19jb25maWcgJiAweDBmKSAhPSAweDAwKSB8fAotCSAgICAoKHJlZ19zdGF0dXMgJiAweDJiKSAhPSAweDAwKSkKKwlpZiAoKHJlZ19zdGF0dXMgJiAweDJiKSAhPSAweDAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN0cmxjcHkoaW5mby0+dHlwZSwgIm1heDY2NDIiLCBJMkNfTkFNRV9TSVpFKTsKQEAgLTI0Niw3ICsyNjAsNyBAQAogCQkJICAgIHNldF90ZW1wX21heCwgMCwgTUFYNjY0Ml9SRUdfV19MT0NBTF9ISUdIKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4LAogCQkJICAgIHNldF90ZW1wX21heCwgMSwgTUFYNjY0Ml9SRUdfV19SRU1PVEVfSElHSCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXBfZmF1bHQsIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMik7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNik7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCk7CiAKQEAgLTI1Niw3ICsyNzAsNyBAQAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIuYXR0ciwKIAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcF9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfZmF1bHQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJTlVMTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwppbmRleCA2ZTUxMjNiLi4wNGIwOTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwpAQCAtNzc4LDcgKzc3OCw4IEBACiAJCQkJCXNlY3Rvcl90IGJsb2NrKQogewogCXN0cnVjdCBpZGVfY21kIGNtZDsKLQlpbnQgdXB0b2RhdGUgPSAwLCBuc2VjdG9yczsKKwlpbnQgdXB0b2RhdGUgPSAwOworCXVuc2lnbmVkIGludCBuc2VjdG9yczsKIAogCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgImNtZDogMHgleCwgYmxvY2s6ICVsbHUiLAogCQkJCSAgcnEtPmNtZFswXSwgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jayk7CkBAIC0xNzgyLDcgKzE3ODMsNiBAQAogCWlkZV9jZF9yZWFkX3RvYyhkcml2ZSwgJnNlbnNlKTsKIAlnLT5mb3BzID0gJmlkZWNkX29wczsKIAlnLT5mbGFncyB8PSBHRU5IRF9GTF9SRU1PVkFCTEUgfCBHRU5IRF9GTF9CTE9DS19FVkVOVFNfT05fRVhDTF9XUklURTsKLQlnLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAlhZGRfZGlzayhnKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYwppbmRleCBmMzY5ODk2Li44NzU1ZjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYwpAQCAtMTIwLDIxICsxMjAsMTcgQEAKICAqICdpbnRlcnJ1cHQnIHJvdXRpbmUuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBzZXJwb3J0X2xkaXNjX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBzZXJwb3J0X2xkaXNjX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHNlcnBvcnQgKnNlcnBvcnQgPSAoc3RydWN0IHNlcnBvcnQqKSB0dHktPmRpc2NfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBjaF9mbGFnczsKLQlpbnQgcmV0ID0gMDsKIAlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZXJwb3J0LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIXRlc3RfYml0KFNFUlBPUlRfQUNUSVZFLCAmc2VycG9ydC0+ZmxhZ3MpKSB7Ci0JCXJldCA9IC1FSU5WQUw7CisJaWYgKCF0ZXN0X2JpdChTRVJQT1JUX0FDVElWRSwgJnNlcnBvcnQtPmZsYWdzKSkKIAkJZ290byBvdXQ7Ci0JfQogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJc3dpdGNoIChmcFtpXSkgewpAQCAtMTU2LDggKzE1Miw2IEBACiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXJwb3J0LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0ID09IDAgPyBjb3VudCA6IHJldDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCmluZGV4IDFkNDRkNDcuLjg2YTVjNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYwpAQCAtNjc0LDcgKzY3NCw3IEBACiAgKgljZmxhZ3MJYnVmZmVyIGNvbnRhaW5pbmcgZXJyb3IgZmxhZ3MgZm9yIHJlY2VpdmVkIGNoYXJhY3RlcnMgKGlnbm9yZWQpCiAgKgljb3VudAludW1iZXIgb2YgcmVjZWl2ZWQgY2hhcmFjdGVycwogICovCi1zdGF0aWMgdW5zaWduZWQgaW50CitzdGF0aWMgdm9pZAogZ2lnYXNldF90dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCiAJCSAgICBjaGFyICpjZmxhZ3MsIGludCBjb3VudCkKIHsKQEAgLTY4MywxMiArNjgzLDEyIEBACiAJc3RydWN0IGluYnVmX3QgKmluYnVmOwogCiAJaWYgKCFjcykKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybjsKIAlpbmJ1ZiA9IGNzLT5pbmJ1ZjsKIAlpZiAoIWluYnVmKSB7CiAJCWRldl9lcnIoY3MtPmRldiwgIiVzOiBubyBpbmJ1ZlxuIiwgX19mdW5jX18pOwogCQljc19wdXQoY3MpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuOwogCX0KIAogCXRhaWwgPSBpbmJ1Zi0+dGFpbDsKQEAgLTcyNSw4ICs3MjUsNiBAQAogCWdpZ19kYmcoREVCVUdfSU5UUiwgIiVzLS0+QkgiLCBfX2Z1bmNfXyk7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAJY3NfcHV0KGNzKTsKLQotCXJldHVybiBjb3VudDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCmluZGV4IDNjY2JmZjEuLjcxYThlYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYwpAQCAtMjgzLDYgKzI4Myw3IEBACiAJX3F1ZXVlX2RhdGEoJmRjaC0+ZGV2LkQsIE1QSF9JTkZPUk1BVElPTl9JTkQsIE1JU0ROX0lEX0FOWSwKIAkJc2l6ZW9mKHN0cnVjdCBwaF9pbmZvX2RjaCkgKyBkY2gtPmRldi5ucmJjaGFuICoKIAkJc2l6ZW9mKHN0cnVjdCBwaF9pbmZvX2NoKSwgcGhpLCBHRlBfQVRPTUlDKTsKKwlrZnJlZShwaGkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCAyM2YwZDVlLi43MTNkNDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMSwzICsxLDEwIEBACitjb25maWcgTEVEU19HUElPX1JFR0lTVEVSCisJYm9vbAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHRoZSBmdW5jdGlvbiBncGlvX2xlZF9yZWdpc3Rlcl9kZXZpY2UuCisJICBBcyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgYXJjaCBjb2RlIGl0IG11c3Qgbm90IGJlIGNvbXBpbGVkIGFzIGEKKwkgIG1vZHVsZS4KKwogbWVudWNvbmZpZyBORVdfTEVEUwogCWJvb2wgIkxFRCBTdXBwb3J0IgogCWhlbHAKQEAgLTcsMjIgKzE0LDE0IEBACiAJICBUaGlzIGlzIG5vdCByZWxhdGVkIHRvIHN0YW5kYXJkIGtleWJvYXJkIExFRHMgd2hpY2ggYXJlIGNvbnRyb2xsZWQKIAkgIHZpYSB0aGUgaW5wdXQgc3lzdGVtLgogCitpZiBORVdfTEVEUworCiBjb25maWcgTEVEU19DTEFTUwogCWJvb2wgIkxFRCBDbGFzcyBTdXBwb3J0IgotCWRlcGVuZHMgb24gTkVXX0xFRFMKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBsZWQgc3lzZnMgY2xhc3MgaW4gL3N5cy9jbGFzcy9sZWRzLiAgWW91J2xsCiAJICBuZWVkIHRoaXMgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggTEVEcy4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBMRURTX0dQSU9fUkVHSVNURVIKLQlib29sCi0JaGVscAotCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgdGhlIGZ1bmN0aW9uIGdwaW9fbGVkX3JlZ2lzdGVyX2RldmljZS4KLQkgIEFzIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBhcmNoIGNvZGUgaXQgbXVzdCBub3QgYmUgY29tcGlsZWQgYXMgYQotCSAgbW9kdWxlLgotCi1pZiBORVdfTEVEUwotCiBjb21tZW50ICJMRUQgZHJpdmVycyIKIAogY29uZmlnIExFRFNfODhQTTg2MFgKQEAgLTM5MSw2ICszOTAsNyBAQAogCiBjb25maWcgTEVEU19BU0lDMwogCWJvb2wgIkxFRCBzdXBwb3J0IGZvciB0aGUgSFRDIEFTSUMzIgorCWRlcGVuZHMgb24gTEVEU19DTEFTUwogCWRlcGVuZHMgb24gTUZEX0FTSUMzCiAJZGVmYXVsdCB5CiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuYyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKaW5kZXggNzBiZDczOC4uNTc0YjA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuYworKysgYi9kcml2ZXJzL21kL2JpdG1hcC5jCkBAIC01MzQsNiArNTM0LDgyIEBACiAJa3VubWFwX2F0b21pYyhzYiwgS01fVVNFUjApOwogfQogCisvKgorICogYml0bWFwX25ld19kaXNrX3NiCisgKiBAYml0bWFwCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBzb21ld2hhdCB0aGUgcmV2ZXJzZSBvZiBiaXRtYXBfcmVhZF9zYi4gIGJpdG1hcF9yZWFkX3NiCisgKiByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIG9uLWRpc2sgYml0bWFwIHN1cGVyYmxvY2sgYW5kIHBvcHVsYXRlcyBiaXRtYXBfaW5mby4KKyAqIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgJ2JpdG1hcF9pbmZvJyBhbmQgcG9wdWxhdGVzIHRoZSBvbi1kaXNrIGJpdG1hcAorICogc3RydWN0dXJlLCB3aGljaCBpcyB0byBiZSB3cml0dGVuIHRvIGRpc2suCisgKgorICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRXh4eCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IGJpdG1hcF9uZXdfZGlza19zYihzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit7CisJYml0bWFwX3N1cGVyX3QgKnNiOworCXVuc2lnbmVkIGxvbmcgY2h1bmtzaXplLCBkYWVtb25fc2xlZXAsIHdyaXRlX2JlaGluZDsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWJpdG1hcC0+c2JfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihiaXRtYXAtPnNiX3BhZ2UpKSB7CisJCWVyciA9IFBUUl9FUlIoYml0bWFwLT5zYl9wYWdlKTsKKwkJYml0bWFwLT5zYl9wYWdlID0gTlVMTDsKKwkJcmV0dXJuIGVycjsKKwl9CisJYml0bWFwLT5zYl9wYWdlLT5pbmRleCA9IDA7CisKKwlzYiA9IGttYXBfYXRvbWljKGJpdG1hcC0+c2JfcGFnZSwgS01fVVNFUjApOworCisJc2ItPm1hZ2ljID0gY3B1X3RvX2xlMzIoQklUTUFQX01BR0lDKTsKKwlzYi0+dmVyc2lvbiA9IGNwdV90b19sZTMyKEJJVE1BUF9NQUpPUl9ISSk7CisKKwljaHVua3NpemUgPSBiaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5jaHVua3NpemU7CisJQlVHX09OKCFjaHVua3NpemUpOworCWlmICghaXNfcG93ZXJfb2ZfMihjaHVua3NpemUpKSB7CisJCWt1bm1hcF9hdG9taWMoc2IsIEtNX1VTRVIwKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJiaXRtYXAgY2h1bmtzaXplIG5vdCBhIHBvd2VyIG9mIDJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc2ItPmNodW5rc2l6ZSA9IGNwdV90b19sZTMyKGNodW5rc2l6ZSk7CisKKwlkYWVtb25fc2xlZXAgPSBiaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5kYWVtb25fc2xlZXA7CisJaWYgKCFkYWVtb25fc2xlZXAgfHwKKwkgICAgKGRhZW1vbl9zbGVlcCA8IDEpIHx8IChkYWVtb25fc2xlZXAgPiBNQVhfU0NIRURVTEVfVElNRU9VVCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ2hvb3NpbmcgZGFlbW9uX3NsZWVwIGRlZmF1bHQgKDUgc2VjKVxuIik7CisJCWRhZW1vbl9zbGVlcCA9IDUgKiBIWjsKKwl9CisJc2ItPmRhZW1vbl9zbGVlcCA9IGNwdV90b19sZTMyKGRhZW1vbl9zbGVlcCk7CisJYml0bWFwLT5tZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwID0gZGFlbW9uX3NsZWVwOworCisJLyoKKwkgKiBGSVhNRTogd3JpdGVfYmVoaW5kIGZvciBSQUlEMS4gIElmIG5vdCBzcGVjaWZpZWQsIHdoYXQKKwkgKiBpcyBhIGdvb2QgY2hvaWNlPyAgV2UgY2hvb3NlIENPVU5URVJfTUFYIC8gMiBhcmJpdHJhcmlseS4KKwkgKi8KKwl3cml0ZV9iZWhpbmQgPSBiaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5tYXhfd3JpdGVfYmVoaW5kOworCWlmICh3cml0ZV9iZWhpbmQgPiBDT1VOVEVSX01BWCkKKwkJd3JpdGVfYmVoaW5kID0gQ09VTlRFUl9NQVggLyAyOworCXNiLT53cml0ZV9iZWhpbmQgPSBjcHVfdG9fbGUzMih3cml0ZV9iZWhpbmQpOworCWJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLm1heF93cml0ZV9iZWhpbmQgPSB3cml0ZV9iZWhpbmQ7CisKKwkvKiBrZWVwIHRoZSBhcnJheSBzaXplIGZpZWxkIG9mIHRoZSBiaXRtYXAgc3VwZXJibG9jayB1cCB0byBkYXRlICovCisJc2ItPnN5bmNfc2l6ZSA9IGNwdV90b19sZTY0KGJpdG1hcC0+bWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyk7CisKKwltZW1jcHkoc2ItPnV1aWQsIGJpdG1hcC0+bWRkZXYtPnV1aWQsIDE2KTsKKworCWJpdG1hcC0+ZmxhZ3MgfD0gQklUTUFQX1NUQUxFOworCXNiLT5zdGF0ZSB8PSBjcHVfdG9fbGUzMihCSVRNQVBfU1RBTEUpOworCWJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPSBiaXRtYXAtPm1kZGV2LT5ldmVudHM7CisJc2ItPmV2ZW50c19jbGVhcmVkID0gY3B1X3RvX2xlNjQoYml0bWFwLT5tZGRldi0+ZXZlbnRzKTsKKworCWJpdG1hcC0+ZmxhZ3MgfD0gQklUTUFQX0hPU1RFTkRJQU47CisJc2ItPnZlcnNpb24gPSBjcHVfdG9fbGUzMihCSVRNQVBfTUFKT1JfSE9TVEVORElBTik7CisKKwlrdW5tYXBfYXRvbWljKHNiLCBLTV9VU0VSMCk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogcmVhZCB0aGUgc3VwZXJibG9jayBmcm9tIHRoZSBiaXRtYXAgZmlsZSBhbmQgaW5pdGlhbGl6ZSBzb21lIGJpdG1hcCBmaWVsZHMgKi8KIHN0YXRpYyBpbnQgYml0bWFwX3JlYWRfc2Ioc3RydWN0IGJpdG1hcCAqYml0bWFwKQogewpAQCAtNTc1LDcgKzY1MSw3IEBACiAJCXJlYXNvbiA9ICJ1bnJlY29nbml6ZWQgc3VwZXJibG9jayB2ZXJzaW9uIjsKIAllbHNlIGlmIChjaHVua3NpemUgPCA1MTIpCiAJCXJlYXNvbiA9ICJiaXRtYXAgY2h1bmtzaXplIHRvbyBzbWFsbCI7Ci0JZWxzZSBpZiAoKDEgPDwgZmZ6KH5jaHVua3NpemUpKSAhPSBjaHVua3NpemUpCisJZWxzZSBpZiAoIWlzX3Bvd2VyX29mXzIoY2h1bmtzaXplKSkKIAkJcmVhc29uID0gImJpdG1hcCBjaHVua3NpemUgbm90IGEgcG93ZXIgb2YgMiI7CiAJZWxzZSBpZiAoZGFlbW9uX3NsZWVwIDwgMSB8fCBkYWVtb25fc2xlZXAgPiBNQVhfU0NIRURVTEVfVElNRU9VVCkKIAkJcmVhc29uID0gImRhZW1vbiBzbGVlcCBwZXJpb2Qgb3V0IG9mIHJhbmdlIjsKQEAgLTEwNzYsOCArMTE1Miw4IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGJpdG1hcCBpbml0aWFsaXplZCBmcm9tIGRpc2s6ICIKLQkJInJlYWQgJWx1LyVsdSBwYWdlcywgc2V0ICVsdSBiaXRzXG4iLAotCQlibW5hbWUoYml0bWFwKSwgYml0bWFwLT5maWxlX3BhZ2VzLCBudW1fcGFnZXMsIGJpdF9jbnQpOworCSAgICAgICAicmVhZCAlbHUvJWx1IHBhZ2VzLCBzZXQgJWx1IG9mICVsdSBiaXRzXG4iLAorCSAgICAgICBibW5hbWUoYml0bWFwKSwgYml0bWFwLT5maWxlX3BhZ2VzLCBudW1fcGFnZXMsIGJpdF9jbnQsIGNodW5rcyk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTMzMiw3ICsxNDA4LDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJaWYgKHVubGlrZWx5KCgqYm1jICYgQ09VTlRFUl9NQVgpID09IENPVU5URVJfTUFYKSkgeworCQlpZiAodW5saWtlbHkoQ09VTlRFUigqYm1jKSA9PSBDT1VOVEVSX01BWCkpIHsKIAkJCURFRklORV9XQUlUKF9fd2FpdCk7CiAJCQkvKiBub3RlIHRoYXQgaXQgaXMgc2FmZSB0byBkbyB0aGUgcHJlcGFyZV90b193YWl0CiAJCQkgKiBhZnRlciB0aGUgdGVzdCBhcyBsb25nIGFzIHdlIGRvIGl0IGJlZm9yZSBkcm9wcGluZwpAQCAtMTQwNCwxMCArMTQ4MCwxMCBAQAogCQkJc3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKGJpdG1hcC0+c3lzZnNfY2FuX2NsZWFyKTsKIAkJfQogCi0JCWlmICghc3VjY2VzcyAmJiAhICgqYm1jICYgTkVFREVEX01BU0spKQorCQlpZiAoIXN1Y2Nlc3MgJiYgIU5FRURFRCgqYm1jKSkKIAkJCSpibWMgfD0gTkVFREVEX01BU0s7CiAKLQkJaWYgKCgqYm1jICYgQ09VTlRFUl9NQVgpID09IENPVU5URVJfTUFYKQorCQlpZiAoQ09VTlRFUigqYm1jKSA9PSBDT1VOVEVSX01BWCkKIAkJCXdha2VfdXAoJmJpdG1hcC0+b3ZlcmZsb3dfd2FpdCk7CiAKIAkJKCpibWMpLS07CkBAIC0xNzI4LDkgKzE4MDQsMTYgQEAKIAkJdmZzX2ZzeW5jKGZpbGUsIDEpOwogCX0KIAkvKiByZWFkIHN1cGVyYmxvY2sgZnJvbSBiaXRtYXAgZmlsZSAodGhpcyBzZXRzIG1kZGV2LT5iaXRtYXBfaW5mby5jaHVua3NpemUpICovCi0JaWYgKCFtZGRldi0+Yml0bWFwX2luZm8uZXh0ZXJuYWwpCi0JCWVyciA9IGJpdG1hcF9yZWFkX3NiKGJpdG1hcCk7Ci0JZWxzZSB7CisJaWYgKCFtZGRldi0+Yml0bWFwX2luZm8uZXh0ZXJuYWwpIHsKKwkJLyoKKwkJICogSWYgJ01EX0FSUkFZX0ZJUlNUX1VTRScgaXMgc2V0LCB0aGVuIGRldmljZS1tYXBwZXIgaXMKKwkJICogaW5zdHJ1Y3RpbmcgdXMgdG8gY3JlYXRlIGEgbmV3IG9uLWRpc2sgYml0bWFwIGluc3RhbmNlLgorCQkgKi8KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNRF9BUlJBWV9GSVJTVF9VU0UsICZtZGRldi0+ZmxhZ3MpKQorCQkJZXJyID0gYml0bWFwX25ld19kaXNrX3NiKGJpdG1hcCk7CisJCWVsc2UKKwkJCWVyciA9IGJpdG1hcF9yZWFkX3NiKGJpdG1hcCk7CisJfSBlbHNlIHsKIAkJZXJyID0gMDsKIAkJaWYgKG1kZGV2LT5iaXRtYXBfaW5mby5jaHVua3NpemUgPT0gMCB8fAogCQkgICAgbWRkZXYtPmJpdG1hcF9pbmZvLmRhZW1vbl9zbGVlcCA9PSAwKQpAQCAtMTc1NCw5ICsxODM3LDYgQEAKIAliaXRtYXAtPmNodW5rcyA9IGNodW5rczsKIAliaXRtYXAtPnBhZ2VzID0gcGFnZXM7CiAJYml0bWFwLT5taXNzaW5nX3BhZ2VzID0gcGFnZXM7Ci0JYml0bWFwLT5jb3VudGVyX2JpdHMgPSBDT1VOVEVSX0JJVFM7Ci0KLQliaXRtYXAtPnN5bmNjaHVuayA9IH4wVUw7CiAKICNpZmRlZiBJTkpFQ1RfRkFUQUxfRkFVTFRfMQogCWJpdG1hcC0+YnAgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuaCBiL2RyaXZlcnMvbWQvYml0bWFwLmgKaW5kZXggZDBhZWFmNC4uYjJhMTI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuaAorKysgYi9kcml2ZXJzL21kL2JpdG1hcC5oCkBAIC04NSw3ICs4NSw2IEBACiB0eXBlZGVmIF9fdTE2IGJpdG1hcF9jb3VudGVyX3Q7CiAjZGVmaW5lIENPVU5URVJfQklUUyAxNgogI2RlZmluZSBDT1VOVEVSX0JJVF9TSElGVCA0Ci0jZGVmaW5lIENPVU5URVJfQllURV9SQVRJTyAoQ09VTlRFUl9CSVRTIC8gOCkKICNkZWZpbmUgQ09VTlRFUl9CWVRFX1NISUZUIChDT1VOVEVSX0JJVF9TSElGVCAtIDMpCiAKICNkZWZpbmUgTkVFREVEX01BU0sgKChiaXRtYXBfY291bnRlcl90KSAoMSA8PCAoQ09VTlRFUl9CSVRTIC0gMSkpKQpAQCAtMTk2LDE5ICsxOTUsMTAgQEAKIAogCW1kZGV2X3QgKm1kZGV2OyAvKiB0aGUgbWQgZGV2aWNlIHRoYXQgdGhlIGJpdG1hcCBpcyBmb3IgKi8KIAotCWludCBjb3VudGVyX2JpdHM7IC8qIGhvdyBtYW55IGJpdHMgcGVyIGJsb2NrIGNvdW50ZXIgKi8KLQogCS8qIGJpdG1hcCBjaHVua3NpemUgLS0gaG93IG11Y2ggZGF0YSBkb2VzIGVhY2ggYml0IHJlcHJlc2VudD8gKi8KIAl1bnNpZ25lZCBsb25nIGNodW5rc2hpZnQ7IC8qIGNodW5rc2l6ZSA9IDJeY2h1bmtzaGlmdCAoZm9yIGJpdG9wcykgKi8KIAl1bnNpZ25lZCBsb25nIGNodW5rczsgLyogdG90YWwgbnVtYmVyIG9mIGRhdGEgY2h1bmtzIGZvciB0aGUgYXJyYXkgKi8KIAotCS8qIFdlIGhvbGQgYSBjb3VudCBvbiB0aGUgY2h1bmsgY3VycmVudGx5IGJlaW5nIHN5bmNlZCwgYW5kIGRyb3AKLQkgKiBpdCB3aGVuIHRoZSBsYXN0IGJsb2NrIGlzIHN0YXJ0ZWQuICBJZiB0aGUgcmVzeW5jIGlzIGFib3J0ZWQKLQkgKiBtaWR3YXksIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkcm9wIHRoYXQgY291bnQsIHNvIHdlIHJlbWVtYmVyCi0JICogdGhlIGNvdW50ZWQgY2h1bmsuLgotCSAqLwotCXVuc2lnbmVkIGxvbmcgc3luY2NodW5rOwotCiAJX191NjQJZXZlbnRzX2NsZWFyZWQ7CiAJaW50IG5lZWRfc3luYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IGFhNjQwYTguLjQzMzJmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTM1MSw2ICszNTEsOSBAQAogCW1kZGV2LT5zdXNwZW5kZWQgPSAwOwogCXdha2VfdXAoJm1kZGV2LT5zYl93YWl0KTsKIAltZGRldi0+cGVycy0+cXVpZXNjZShtZGRldiwgMCk7CisKKwltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnN5bmNfdGhyZWFkKTsgLyogcG9zc2libHkga2ljayBvZmYgYSByZXNoYXBlICovCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9yZXN1bWUpOwogCkBAIC0xNzUwLDYgKzE3NTMsMTggQEAKIAl9LAogfTsKIAorc3RhdGljIHZvaWQgc3luY19zdXBlcihtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldikKK3sKKwlpZiAobWRkZXYtPnN5bmNfc3VwZXIpIHsKKwkJbWRkZXYtPnN5bmNfc3VwZXIobWRkZXYsIHJkZXYpOworCQlyZXR1cm47CisJfQorCisJQlVHX09OKG1kZGV2LT5tYWpvcl92ZXJzaW9uID49IEFSUkFZX1NJWkUoc3VwZXJfdHlwZXMpKTsKKworCXN1cGVyX3R5cGVzW21kZGV2LT5tYWpvcl92ZXJzaW9uXS5zeW5jX3N1cGVyKG1kZGV2LCByZGV2KTsKK30KKwogc3RhdGljIGludCBtYXRjaF9tZGRldl91bml0cyhtZGRldl90ICptZGRldjEsIG1kZGV2X3QgKm1kZGV2MikKIHsKIAltZGtfcmRldl90ICpyZGV2LCAqcmRldjI7CkBAIC0xNzgxLDggKzE3OTYsOCBAQAogCiAJaWYgKGxpc3RfZW1wdHkoJm1kZGV2LT5kaXNrcykpCiAJCXJldHVybiAwOyAvKiBub3RoaW5nIHRvIGRvICovCi0JaWYgKGJsa19nZXRfaW50ZWdyaXR5KG1kZGV2LT5nZW5kaXNrKSkKLQkJcmV0dXJuIDA7IC8qIGFscmVhZHkgcmVnaXN0ZXJlZCAqLworCWlmICghbWRkZXYtPmdlbmRpc2sgfHwgYmxrX2dldF9pbnRlZ3JpdHkobWRkZXYtPmdlbmRpc2spKQorCQlyZXR1cm4gMDsgLyogc2hvdWxkbid0IHJlZ2lzdGVyLCBvciBhbHJlYWR5IGlzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkgewogCQkvKiBza2lwIHNwYXJlcyBhbmQgbm9uLWZ1bmN0aW9uYWwgZGlza3MgKi8KIAkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKQEAgLTIxNjgsOCArMjE4Myw3IEBACiAJCQkvKiBEb24ndCB1cGRhdGUgdGhpcyBzdXBlcmJsb2NrICovCiAJCQlyZGV2LT5zYl9sb2FkZWQgPSAyOwogCQl9IGVsc2UgewotCQkJc3VwZXJfdHlwZXNbbWRkZXYtPm1ham9yX3ZlcnNpb25dLgotCQkJCXN5bmNfc3VwZXIobWRkZXYsIHJkZXYpOworCQkJc3luY19zdXBlcihtZGRldiwgcmRldik7CiAJCQlyZGV2LT5zYl9sb2FkZWQgPSAxOwogCQl9CiAJfQpAQCAtMjQ2Miw3ICsyNDc2LDcgQEAKIAkJaWYgKHJkZXYtPnJhaWRfZGlzayA9PSAtMSkKIAkJCXJldHVybiAtRUVYSVNUOwogCQkvKiBwZXJzb25hbGl0eSBkb2VzIGFsbCBuZWVkZWQgY2hlY2tzICovCi0JCWlmIChyZGV2LT5tZGRldi0+cGVycy0+aG90X2FkZF9kaXNrID09IE5VTEwpCisJCWlmIChyZGV2LT5tZGRldi0+cGVycy0+aG90X3JlbW92ZV9kaXNrID09IE5VTEwpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJZXJyID0gcmRldi0+bWRkZXYtPnBlcnMtPgogCQkJaG90X3JlbW92ZV9kaXNrKHJkZXYtPm1kZGV2LCByZGV2LT5yYWlkX2Rpc2spOwpAQCAtNDYxOSw5ICs0NjMzLDYgQEAKIAlpZiAobWRkZXYtPmZsYWdzKQogCQltZF91cGRhdGVfc2IobWRkZXYsIDApOwogCi0JbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKLQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT5zeW5jX3RocmVhZCk7IC8qIHBvc3NpYmx5IGtpY2sgb2ZmIGEgcmVzaGFwZSAqLwotCiAJbWRfbmV3X2V2ZW50KG1kZGV2KTsKIAlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUobWRkZXYtPnN5c2ZzX3N0YXRlKTsKIAlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUobWRkZXYtPnN5c2ZzX2FjdGlvbik7CkBAIC00NjQyLDYgKzQ2NTMsMTAgQEAKIAkJYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwogCQlnb3RvIG91dDsKIAl9CisKKwltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnN5bmNfdGhyZWFkKTsgLyogcG9zc2libHkga2ljayBvZmYgYSByZXNoYXBlICovCisKIAlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKIAlyZXZhbGlkYXRlX2Rpc2sobWRkZXYtPmdlbmRpc2spOwogCW1kZGV2LT5jaGFuZ2VkID0gMTsKQEAgLTUyNTksNiArNTI3NCw4IEBACiAJCWlmIChtZGRldi0+ZGVncmFkZWQpCiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX1JFQ09WRVIsICZtZGRldi0+cmVjb3ZlcnkpOwogCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CisJCWlmICghZXJyKQorCQkJbWRfbmV3X2V2ZW50KG1kZGV2KTsKIAkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC02ODY2LDggKzY4ODMsOCBAQAogCSAqIFR1bmUgcmVjb25zdHJ1Y3Rpb246CiAJICovCiAJd2luZG93ID0gMzIqKFBBR0VfU0laRS81MTIpOwotCXByaW50ayhLRVJOX0lORk8gIm1kOiB1c2luZyAlZGsgd2luZG93LCBvdmVyIGEgdG90YWwgb2YgJWxsdSBibG9ja3MuXG4iLAotCQl3aW5kb3cvMiwodW5zaWduZWQgbG9uZyBsb25nKSBtYXhfc2VjdG9ycy8yKTsKKwlwcmludGsoS0VSTl9JTkZPICJtZDogdXNpbmcgJWRrIHdpbmRvdywgb3ZlciBhIHRvdGFsIG9mICVsbHVrLlxuIiwKKwkJd2luZG93LzIsICh1bnNpZ25lZCBsb25nIGxvbmcpbWF4X3NlY3RvcnMvMik7CiAKIAlhdG9taWNfc2V0KCZtZGRldi0+cmVjb3ZlcnlfYWN0aXZlLCAwKTsKIAlsYXN0X2NoZWNrID0gMDsKQEAgLTcwNDUsNyArNzA2Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZF9kb19zeW5jKTsKIAotCiBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldl90ICptZGRldikKIHsKIAltZGtfcmRldl90ICpyZGV2OwpAQCAtNzE1Nyw2ICs3MTczLDkgQEAKICAqLwogdm9pZCBtZF9jaGVja19yZWNvdmVyeShtZGRldl90ICptZGRldikKIHsKKwlpZiAobWRkZXYtPnN1c3BlbmRlZCkKKwkJcmV0dXJuOworCiAJaWYgKG1kZGV2LT5iaXRtYXApCiAJCWJpdG1hcF9kYWVtb25fd29yayhtZGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCAwYjFmZDNmLi4xYzI2YzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKKysrIGIvZHJpdmVycy9tZC9tZC5oCkBAIC0xMjQsNiArMTI0LDcgQEAKICNkZWZpbmUgTURfQ0hBTkdFX0RFVlMJMAkvKiBTb21lIGRldmljZSBzdGF0dXMgaGFzIGNoYW5nZWQgKi8KICNkZWZpbmUgTURfQ0hBTkdFX0NMRUFOIDEJLyogdHJhbnNpdGlvbiB0byBvciBmcm9tICdjbGVhbicgKi8KICNkZWZpbmUgTURfQ0hBTkdFX1BFTkRJTkcgMgkvKiBzd2l0Y2ggZnJvbSAnY2xlYW4nIHRvICdhY3RpdmUnIGluIHByb2dyZXNzICovCisjZGVmaW5lIE1EX0FSUkFZX0ZJUlNUX1VTRSAzICAgIC8qIEZpcnN0IHVzZSBvZiBhcnJheSwgbmVlZHMgaW5pdGlhbGl6YXRpb24gKi8KIAogCWludAkJCQlzdXNwZW5kZWQ7CiAJYXRvbWljX3QJCQlhY3RpdmVfaW87CkBAIC0zMzAsNiArMzMxLDcgQEAKIAlhdG9taWNfdCBmbHVzaF9wZW5kaW5nOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBmbHVzaF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBldmVudF93b3JrOwkvKiB1c2VkIGJ5IGRtIHRvIHJlcG9ydCBmYWlsdXJlIGV2ZW50ICovCisJdm9pZCAoKnN5bmNfc3VwZXIpKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IDVkMDk2MDkuLmY3NDMxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTQ5NywyMSArNDk3LDE5IEBACiAJcmV0dXJuIGJlc3RfZGlzazsKIH0KIAotc3RhdGljIGludCByYWlkMV9jb25nZXN0ZWQodm9pZCAqZGF0YSwgaW50IGJpdHMpCitpbnQgbWRfcmFpZDFfY29uZ2VzdGVkKG1kZGV2X3QgKm1kZGV2LCBpbnQgYml0cykKIHsKLQltZGRldl90ICptZGRldiA9IGRhdGE7CiAJY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGksIHJldCA9IDA7CiAKLQlpZiAobWRkZXZfY29uZ2VzdGVkKG1kZGV2LCBiaXRzKSkKLQkJcmV0dXJuIDE7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSA8IG1kZGV2LT5yYWlkX2Rpc2tzOyBpKyspIHsKIAkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2ldLnJkZXYpOwogCQlpZiAocmRldiAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkZXZfZ2V0X3F1ZXVlKHJkZXYtPmJkZXYpOwogCisJCQlCVUdfT04oIXEpOworCiAJCQkvKiBOb3RlIHRoZSAnfHwgMScgLSB3aGVuIHJlYWRfYmFsYW5jZSBwcmVmZXJzCiAJCQkgKiBub24tY29uZ2VzdGVkIHRhcmdldHMsIGl0IGNhbiBiZSByZW1vdmVkCiAJCQkgKi8KQEAgLTUyNCw3ICs1MjIsMTUgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwobWRfcmFpZDFfY29uZ2VzdGVkKTsKIAorc3RhdGljIGludCByYWlkMV9jb25nZXN0ZWQodm9pZCAqZGF0YSwgaW50IGJpdHMpCit7CisJbWRkZXZfdCAqbWRkZXYgPSBkYXRhOworCisJcmV0dXJuIG1kZGV2X2Nvbmdlc3RlZChtZGRldiwgYml0cykgfHwKKwkJbWRfcmFpZDFfY29uZ2VzdGVkKG1kZGV2LCBiaXRzKTsKK30KIAogc3RhdGljIHZvaWQgZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZl90ICpjb25mKQogewpAQCAtMTk3Miw2ICsxOTc4LDggQEAKIAkJcmV0dXJuIFBUUl9FUlIoY29uZik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CisJCWlmICghbWRkZXYtPmdlbmRpc2spCisJCQljb250aW51ZTsKIAkJZGlza19zdGFja19saW1pdHMobWRkZXYtPmdlbmRpc2ssIHJkZXYtPmJkZXYsCiAJCQkJICByZGV2LT5kYXRhX29mZnNldCA8PCA5KTsKIAkJLyogYXMgd2UgZG9uJ3QgaG9ub3VyIG1lcmdlX2J2ZWNfZm4sIHdlIG11c3QgbmV2ZXIgcmlzawpAQCAtMjAxMyw4ICsyMDIxLDEwIEBACiAKIAltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDFfc2l6ZShtZGRldiwgMCwgMCkpOwogCi0JbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IHJhaWQxX2Nvbmdlc3RlZDsKLQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2RhdGEgPSBtZGRldjsKKwlpZiAobWRkZXYtPnF1ZXVlKSB7CisJCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSByYWlkMV9jb25nZXN0ZWQ7CisJCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZGF0YSA9IG1kZGV2OworCX0KIAlyZXR1cm4gbWRfaW50ZWdyaXR5X3JlZ2lzdGVyKG1kZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5oIGIvZHJpdmVycy9tZC9yYWlkMS5oCmluZGV4IDVmYzRjYTEuLmU3NDNhNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuaAorKysgYi9kcml2ZXJzL21kL3JhaWQxLmgKQEAgLTEyNiw0ICsxMjYsNiBAQAogICovCiAjZGVmaW5lCVIxQklPX1JldHVybmVkIDYKIAorZXh0ZXJuIGludCBtZF9yYWlkMV9jb25nZXN0ZWQobWRkZXZfdCAqbWRkZXYsIGludCBiaXRzKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggMzQ2ZTY5Yi4uYjcyZWRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYWlkNV9zZXRfYmlfaHdfc2VnbWVudHMoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgY250KQogewotCWJpby0+YmlfcGh5c19zZWdtZW50cyA9IHJhaWQ1X2JpX3BoeXNfc2VnbWVudHMoYmlvKSB8fCAoY250IDw8IDE2KTsKKwliaW8tPmJpX3BoeXNfc2VnbWVudHMgPSByYWlkNV9iaV9waHlzX3NlZ21lbnRzKGJpbykgfCAoY250IDw8IDE2KTsKIH0KIAogLyogRmluZCBmaXJzdCBkYXRhIGRpc2sgaW4gYSByYWlkNiBzdHJpcGUgKi8KQEAgLTUxNCw3ICs1MTQsNyBAQAogCQliaSA9ICZzaC0+ZGV2W2ldLnJlcTsKIAogCQliaS0+YmlfcncgPSBydzsKLQkJaWYgKHJ3ID09IFdSSVRFKQorCQlpZiAocncgJiBXUklURSkKIAkJCWJpLT5iaV9lbmRfaW8gPSByYWlkNV9lbmRfd3JpdGVfcmVxdWVzdDsKIAkJZWxzZQogCQkJYmktPmJpX2VuZF9pbyA9IHJhaWQ1X2VuZF9yZWFkX3JlcXVlc3Q7CkBAIC01NDgsMTMgKzU0OCwxMyBAQAogCQkJYmktPmJpX2lvX3ZlY1swXS5idl9vZmZzZXQgPSAwOwogCQkJYmktPmJpX3NpemUgPSBTVFJJUEVfU0laRTsKIAkJCWJpLT5iaV9uZXh0ID0gTlVMTDsKLQkJCWlmIChydyA9PSBXUklURSAmJgorCQkJaWYgKChydyAmIFdSSVRFKSAmJgogCQkJICAgIHRlc3RfYml0KFI1X1JlV3JpdGUsICZzaC0+ZGV2W2ldLmZsYWdzKSkKIAkJCQlhdG9taWNfYWRkKFNUUklQRV9TRUNUT1JTLAogCQkJCQkmcmRldi0+Y29ycmVjdGVkX2Vycm9ycyk7CiAJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaSk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAocncgPT0gV1JJVEUpCisJCQlpZiAocncgJiBXUklURSkKIAkJCQlzZXRfYml0KFNUUklQRV9ERUdSQURFRCwgJnNoLT5zdGF0ZSk7CiAJCQlwcl9kZWJ1Zygic2tpcCBvcCAlbGQgb24gZGlzYyAlZCBmb3Igc2VjdG9yICVsbHVcbiIsCiAJCQkJYmktPmJpX3J3LCBpLCAodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IpOwpAQCAtNTg1LDcgKzU4NSw3IEBACiAJaW5pdF9hc3luY19zdWJtaXQoJnN1Ym1pdCwgZmxhZ3MsIHR4LCBOVUxMLCBOVUxMLCBOVUxMKTsKIAogCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2bCwgYmlvLCBpKSB7Ci0JCWludCBsZW4gPSBiaW9faW92ZWNfaWR4KGJpbywgaSktPmJ2X2xlbjsKKwkJaW50IGxlbiA9IGJ2bC0+YnZfbGVuOwogCQlpbnQgY2xlbjsKIAkJaW50IGJfb2Zmc2V0ID0gMDsKIApAQCAtNjAxLDggKzYwMSw4IEBACiAJCQljbGVuID0gbGVuOwogCiAJCWlmIChjbGVuID4gMCkgewotCQkJYl9vZmZzZXQgKz0gYmlvX2lvdmVjX2lkeChiaW8sIGkpLT5idl9vZmZzZXQ7Ci0JCQliaW9fcGFnZSA9IGJpb19pb3ZlY19pZHgoYmlvLCBpKS0+YnZfcGFnZTsKKwkJCWJfb2Zmc2V0ICs9IGJ2bC0+YnZfb2Zmc2V0OworCQkJYmlvX3BhZ2UgPSBidmwtPmJ2X3BhZ2U7CiAJCQlpZiAoZnJvbWJpbykKIAkJCQl0eCA9IGFzeW5jX21lbWNweShwYWdlLCBiaW9fcGFnZSwgcGFnZV9vZmZzZXQsCiAJCQkJCQkgIGJfb2Zmc2V0LCBjbGVuLCAmc3VibWl0KTsKQEAgLTQ4NTgsNyArNDg1OCw3IEBACiAJCQlwcmludGsoS0VSTl9JTkZPICJtZC9yYWlkOiVzOiBkZXZpY2UgJXMgb3BlcmF0aW9uYWwgYXMgcmFpZCIKIAkJCSAgICAgICAiIGRpc2sgJWRcbiIsCiAJCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgYmRldm5hbWUocmRldi0+YmRldiwgYiksIHJhaWRfZGlzayk7Ci0JCX0gZWxzZQorCQl9IGVsc2UgaWYgKHJkZXYtPnNhdmVkX3JhaWRfZGlzayAhPSByYWlkX2Rpc2spCiAJCQkvKiBDYW5ub3QgcmVseSBvbiBiaXRtYXAgdG8gY29tcGxldGUgcmVjb3ZlcnkgKi8KIAkJCWNvbmYtPmZ1bGxzeW5jID0gMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYwppbmRleCA0ZGMxY2EzLi43YzMyN2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKQEAgLTYwLDggKzYwLDYgQEAKIAlpbnQgYWN0X2xlbiwgcmV0OwogCXU4IGJ1Zls2NF07CiAKLQlpZiAoc2xlbiA+IHNpemVvZihidWYpKQotCQlzbGVuID0gc2l6ZW9mKGJ1Zik7CiAJbWVtY3B5KCZidWZbMF0sIHNidWYsIHNsZW4pOwogCWJ1Zls2MF0gPSBzdGF0ZS0+c2VxKys7CiAKQEAgLTE4MCwzMCArMTc4LDM3IEBACiB7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKIAlpbnQgcmV0ID0gMCwgaW5jLCBpID0gMDsKKwl1OCBidWZbNTJdOyAvKiA0ICsgNDggKEkyQyBXUiBVU0IgY29tbWFuZCBoZWFkZXIgKyBJMkMgV1IgbWF4KSAqLwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCiAJd2hpbGUgKGkgPCBudW0pIHsKIAkJaWYgKG51bSA+IGkgKyAxICYmIChtc2dbaSsxXS5mbGFncyAmIEkyQ19NX1JEKSkgewotCQkJdTggYnVmWzZdOworCQkJaWYgKG1zZ1tpXS5sZW4gPiAyIHx8IG1zZ1tpKzFdLmxlbiA+IDYwKSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlidWZbMF0gPSBDTURfSTJDX1JFQUQ7CiAJCQlidWZbMV0gPSAobXNnW2ldLmFkZHIgPDwgMSkgfCAweDAxOwogCQkJYnVmWzJdID0gbXNnW2ldLmJ1ZlswXTsKIAkJCWJ1ZlszXSA9IG1zZ1tpXS5idWZbMV07CiAJCQlidWZbNF0gPSBtc2dbaV0ubGVuLTE7CiAJCQlidWZbNV0gPSBtc2dbaSsxXS5sZW47Ci0JCQlyZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgYnVmLCBzaXplb2YoYnVmKSwgbXNnW2krMV0uYnVmLAorCQkJcmV0ID0gYW55c2VlX2N0cmxfbXNnKGQsIGJ1ZiwgNiwgbXNnW2krMV0uYnVmLAogCQkJCW1zZ1tpKzFdLmxlbik7CiAJCQlpbmMgPSAyOwogCQl9IGVsc2UgewotCQkJdTggYnVmWzQrbXNnW2ldLmxlbl07CisJCQlpZiAobXNnW2ldLmxlbiA+IDQ4KSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlidWZbMF0gPSBDTURfSTJDX1dSSVRFOwogCQkJYnVmWzFdID0gKG1zZ1tpXS5hZGRyIDw8IDEpOwogCQkJYnVmWzJdID0gbXNnW2ldLmxlbjsKIAkJCWJ1ZlszXSA9IDB4MDE7CiAJCQltZW1jcHkoJmJ1Zls0XSwgbXNnW2ldLmJ1ZiwgbXNnW2ldLmxlbik7Ci0JCQlyZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgYnVmLCBzaXplb2YoYnVmKSwgTlVMTCwgMCk7CisJCQlyZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgYnVmLCA0ICsgbXNnW2ldLmxlbiwgTlVMTCwgMCk7CiAJCQlpbmMgPSAxOwogCQl9CiAJCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL21lZGlhLWRldm5vZGUuYyBiL2RyaXZlcnMvbWVkaWEvbWVkaWEtZGV2bm9kZS5jCmluZGV4IGFmNTI2M2MuLjdiNDJhY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvbWVkaWEtZGV2bm9kZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvbWVkaWEtZGV2bm9kZS5jCkBAIC0yMTMsMTQgKzIxMywxNCBAQAogCiAJLyogUGFydCAxOiBGaW5kIGEgZnJlZSBtaW5vciBudW1iZXIgKi8KIAltdXRleF9sb2NrKCZtZWRpYV9kZXZub2RlX2xvY2spOwotCW1pbm9yID0gZmluZF9uZXh0X3plcm9fYml0KG1lZGlhX2Rldm5vZGVfbnVtcywgMCwgTUVESUFfTlVNX0RFVklDRVMpOworCW1pbm9yID0gZmluZF9uZXh0X3plcm9fYml0KG1lZGlhX2Rldm5vZGVfbnVtcywgTUVESUFfTlVNX0RFVklDRVMsIDApOwogCWlmIChtaW5vciA9PSBNRURJQV9OVU1fREVWSUNFUykgewogCQltdXRleF91bmxvY2soJm1lZGlhX2Rldm5vZGVfbG9jayk7CiAJCXByaW50ayhLRVJOX0VSUiAiY291bGQgbm90IGdldCBhIGZyZWUgbWlub3JcbiIpOwogCQlyZXR1cm4gLUVORklMRTsKIAl9CiAKLQlzZXRfYml0KG1kZXYtPm1pbm9yLCBtZWRpYV9kZXZub2RlX251bXMpOworCXNldF9iaXQobWlub3IsIG1lZGlhX2Rldm5vZGVfbnVtcyk7CiAJbXV0ZXhfdW5sb2NrKCZtZWRpYV9kZXZub2RlX2xvY2spOwogCiAJbWRldi0+bWlub3IgPSBtaW5vcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IDIzNTQzMzYuLjkzNDE4NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMjUsOCArMjUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bWVkaWEvY3gyNTg0MC5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8c3RhZ2luZy9hbHRlcmEuaD4KIAorI2luY2x1ZGUgIi4uLy4uLy4uL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS5oIgogI2luY2x1ZGUgImN4MjM4ODUuaCIKICNpbmNsdWRlICJ0dW5lci14YzIwMjguaCIKICNpbmNsdWRlICJuZXR1cC1pbml0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvYXJzZV9leHBvX2F1dG9nYWluLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvYXJzZV9leHBvX2F1dG9nYWluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYjlkOTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb2Fyc2VfZXhwb19hdXRvZ2Fpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBBdXRvIGdhaW4gYWxnb3JpdGhtIGZvciBjYW1lcmEncyB3aXRoIGEgY29hcnNlIGV4cG9zdXJlIGNvbnRyb2wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotLyogQXV0b2dhaW4gKyBleHBvc3VyZSBhbGdvcml0aG0gZm9yIGNhbWVyYXMgd2l0aCBhIGNvYXJzZSBleHBvc3VyZSBjb250cm9sCi0gICAodXN1YWxseSB0aGlzIG1lYW5zIHdlIGNhbiBvbmx5IGNvbnRyb2wgdGhlIGNsb2NrZGl2IHRvIGNoYW5nZSBleHBvc3VyZSkKLSAgIEFzIGNoYW5naW5nIHRoZSBjbG9ja2RpdiBzbyB0aGF0IHRoZSBmcHMgZHJvcHMgZnJvbSAzMCB0byAxNSBmcHMgZm9yCi0gICBleGFtcGxlLCB3aWxsIGxlYWQgdG8gYSBodWdlIGV4cG9zdXJlIGNoYW5nZSAoaXQgZWZmZWN0aXZlbHkgZG91YmxlcyksCi0gICB0aGlzIGFsZ29yaXRobSBub3JtYWxseSB0cmllcyB0byBvbmx5IGFkanVzdCB0aGUgZ2FpbiAoYmV0d2VlbiA0MCBhbmQKLSAgIDgwICUpIGFuZCBpZiB0aGF0IGRvZXMgbm90IGhlbHAsIG9ubHkgdGhlbiBjaGFuZ2VzIGV4cG9zdXJlLiBUaGlzIGxlYWRzCi0gICB0byBhIG11Y2ggbW9yZSBzdGFibGUgaW1hZ2UgdGhlbiB1c2luZyB0aGUga25lZSBhbGdvcml0aG0gd2hpY2ggYXQKLSAgIGNlcnRhaW4gcG9pbnRzIG9mIHRoZSBrbmVlIGdyYXBoIHdpbGwgb25seSB0cnkgdG8gYWRqdXN0IGV4cG9zdXJlLAotICAgd2hpY2ggbGVhZHMgdG8gb3NjaWxhdGluZyBhcyBvbmUgZXhwb3N1cmUgc3RlcCBpcyBodWdlLgotCi0gICBOb3RlIHRoaXMgYXNzdW1lcyB0aGF0IHRoZSBzZCBzdHJ1Y3QgZm9yIHRoZSBjYW0gaW4gcXVlc3Rpb24gaGFzCi0gICBleHBfdG9vX2hpZ2hfY250IGFuZCBleHBfdG9vX2hpZ2hfY250IGludCBtZW1iZXJzIGZvciB1c2UgYnkgdGhpcyBmdW5jdGlvbi4KLQotICAgUmV0dXJucyAwIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLCAxIGlmIHRoZSBnYWluIGFuZCBvciBleHBvc3VyZSBzZXR0aW5ncwotICAgd2hlcmUgY2hhbmdlZC4gKi8KLXN0YXRpYyBpbnQgZ3NwY2FfY29hcnNlX2dyYWluZWRfZXhwb19hdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JaW50IGF2Z19sdW0sIGludCBkZXNpcmVkX2F2Z19sdW0sIGludCBkZWFkem9uZSkKLXsKLQlpbnQgaSwgc3RlcHMsIGdhaW4sIG9yaWdfZ2FpbiwgZXhwb3N1cmUsIG9yaWdfZXhwb3N1cmU7Ci0JaW50IGdhaW5fbG93LCBnYWluX2hpZ2g7Ci0JY29uc3Qgc3RydWN0IGN0cmwgKmdhaW5fY3RybCA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IGN0cmwgKmV4cG9zdXJlX2N0cmwgPSBOVUxMOwotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5jdHJsczsgaSsrKSB7Ci0JCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgaSkpCi0JCQljb250aW51ZTsKLQkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV0ucWN0cmwuaWQgPT0gVjRMMl9DSURfR0FJTikKLQkJCWdhaW5fY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOwotCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9FWFBPU1VSRSkKLQkJCWV4cG9zdXJlX2N0cmwgPSAmZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXTsKLQl9Ci0JaWYgKCFnYWluX2N0cmwgfHwgIWV4cG9zdXJlX2N0cmwpIHsKLQkJUERFQlVHKERfRVJSLCAiRXJyb3I6IGdzcGNhX2NvYXJzZV9ncmFpbmVkX2V4cG9fYXV0b2dhaW4gIgotCQkJImNhbGxlZCBvbiBjYW0gd2l0aG91dCBnYWluIG9yIGV4cG9zdXJlIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChnYWluX2N0cmwtPmdldChnc3BjYV9kZXYsICZnYWluKSB8fAotCSAgICBleHBvc3VyZV9jdHJsLT5nZXQoZ3NwY2FfZGV2LCAmZXhwb3N1cmUpKQotCQlyZXR1cm4gMDsKLQotCW9yaWdfZ2FpbiA9IGdhaW47Ci0Jb3JpZ19leHBvc3VyZSA9IGV4cG9zdXJlOwotCWdhaW5fbG93ID0KLQkJKGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSAtIGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkgLyA1ICogMjsKLQlnYWluX2xvdyArPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07Ci0JZ2Fpbl9oaWdoID0KLQkJKGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSAtIGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkgLyA1ICogNDsKLQlnYWluX2hpZ2ggKz0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtOwotCi0JLyogSWYgd2UgYXJlIG9mIGEgbXVsdGlwbGUgb2YgZGVhZHpvbmUsIGRvIG11bHRpcGxlIHN0ZXBzIHRvIHJlYWNoIHRoZQotCSAgIGRlc2lyZWQgbHVtaW5hdGlvbiBmYXN0ICh3aXRoIHRoZSByaXNjIG9mIGEgc2xpZ2h0IG92ZXJzaG9vdCkgKi8KLQlzdGVwcyA9IChkZXNpcmVkX2F2Z19sdW0gLSBhdmdfbHVtKSAvIGRlYWR6b25lOwotCi0JUERFQlVHKERfRlJBTSwgImF1dG9nYWluOiBsdW06ICVkLCBkZXNpcmVkOiAlZCwgc3RlcHM6ICVkIiwKLQkJYXZnX2x1bSwgZGVzaXJlZF9hdmdfbHVtLCBzdGVwcyk7Ci0KLQlpZiAoKGdhaW4gKyBzdGVwcykgPiBnYWluX2hpZ2ggJiYKLQkgICAgc2QtPmV4cG9zdXJlIDwgZXhwb3N1cmVfY3RybC0+cWN0cmwubWF4aW11bSkgewotCQlnYWluID0gZ2Fpbl9oaWdoOwotCQlzZC0+ZXhwX3Rvb19sb3dfY250Kys7Ci0JfSBlbHNlIGlmICgoZ2FpbiArIHN0ZXBzKSA8IGdhaW5fbG93ICYmCi0JCSAgIHNkLT5leHBvc3VyZSA+IGV4cG9zdXJlX2N0cmwtPnFjdHJsLm1pbmltdW0pIHsKLQkJZ2FpbiA9IGdhaW5fbG93OwotCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCsrOwotCX0gZWxzZSB7Ci0JCWdhaW4gKz0gc3RlcHM7Ci0JCWlmIChnYWluID4gZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtKQotCQkJZ2FpbiA9IGdhaW5fY3RybC0+cWN0cmwubWF4aW11bTsKLQkJZWxzZSBpZiAoZ2FpbiA8IGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkKLQkJCWdhaW4gPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07Ci0JCXNkLT5leHBfdG9vX2hpZ2hfY250ID0gMDsKLQkJc2QtPmV4cF90b29fbG93X2NudCA9IDA7Ci0JfQotCi0JaWYgKHNkLT5leHBfdG9vX2hpZ2hfY250ID4gMykgewotCQlleHBvc3VyZS0tOwotCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCA9IDA7Ci0JfSBlbHNlIGlmIChzZC0+ZXhwX3Rvb19sb3dfY250ID4gMykgewotCQlleHBvc3VyZSsrOwotCQlzZC0+ZXhwX3Rvb19sb3dfY250ID0gMDsKLQl9Ci0KLQlpZiAoZ2FpbiAhPSBvcmlnX2dhaW4pIHsKLQkJZ2Fpbl9jdHJsLT5zZXQoZ3NwY2FfZGV2LCBnYWluKTsKLQkJcmV0dmFsID0gMTsKLQl9Ci0JaWYgKGV4cG9zdXJlICE9IG9yaWdfZXhwb3N1cmUpIHsKLQkJZXhwb3N1cmVfY3RybC0+c2V0KGdzcGNhX2RldiwgZXhwb3N1cmUpOwotCQlyZXR2YWwgPSAxOwotCX0KLQotCXJldHVybiByZXR2YWw7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggMzZhNDZmYy4uMDU3ZTI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtNjA5LDcgKzYwOSw3IEBACiAgKiBidWZmZXJzLCB0aGVyZSBhcmUgc29tZSBwcmV0dHkgc3RyaWN0IHJlYWwgdGltZSBjb25zdHJhaW50cyBmb3IKICAqIGlzb2Nocm9ub3VzIHRyYW5zZmVyIGZvciBsYXJnZXIgZnJhbWUgc2l6ZXMpLgogICovCi0vKmpmbTogdGhpcyB2YWx1ZSB3b3JrcyB3ZWxsIGZvciAxNjAweDEyMDAsIGJ1dCBub3QgODAweDYwMCAtIHNlZSBpc29jX2luaXQgKi8KKy8qamZtOiB0aGlzIHZhbHVlIGRvZXMgbm90IHdvcmsgZm9yIDgwMHg2MDAgLSBzZWUgaXNvY19pbml0ICovCiAjZGVmaW5lIE9WRlgyX0JVTEtfU0laRSAoMTMgKiA0MDk2KQogCiAvKiBJMkMgcmVnaXN0ZXJzICovCkBAIC0zMzA3LDYgKzMzMDcsNyBAQAogCiAJZ3NwY2FfZGV2LT5jYW0uY3RybHMgPSBzZC0+Y3RybHM7CiAJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKKwlzZC0+ZnJhbWVfcmF0ZSA9IDE1OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNDY5LDcgKzM0NzAsNiBAQAogCQkJCUFSUkFZX1NJWkUoaW5pdF81MTlfb3Y3NjYwKSk7CiAJCXdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2NjAsIEFSUkFZX1NJWkUobm9ybV83NjYwKSk7CiAJCXNkLT5nc3BjYV9kZXYuY3Vycl9tb2RlID0gMTsJLyogNjQweDQ4MCAqLwotCQlzZC0+ZnJhbWVfcmF0ZSA9IDE1OwogCQlvdjUxOV9zZXRfbW9kZShzZCk7CiAJCW92NTE5X3NldF9mcihzZCk7CiAJCXNkLT5jdHJsc1tDT0xPUlNdLm1heCA9IDQ7CS8qIDAuLjQgKi8KQEAgLTM1MTEsNyArMzUxMSw3IEBACiAKIAlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKIAljYXNlIEJSSURHRV9PVkZYMjoKLQkJaWYgKGdzcGNhX2Rldi0+d2lkdGggPT0gMTYwMCkKKwkJaWYgKGdzcGNhX2Rldi0+d2lkdGggIT0gODAwKQogCQkJZ3NwY2FfZGV2LT5jYW0uYnVsa19zaXplID0gT1ZGWDJfQlVMS19TSVpFOwogCQllbHNlCiAJCQlnc3BjYV9kZXYtPmNhbS5idWxrX3NpemUgPSA3ICogNDA5NjsKQEAgLTQ0NzgsNyArNDQ3OCw3IEBACiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOwogCiAJLyogQSBzaG9ydCByZWFkIHNpZ25hbHMgRU9GICovCi0JaWYgKGxlbiA8IE9WRlgyX0JVTEtfU0laRSkgeworCWlmIChsZW4gPCBnc3BjYV9kZXYtPmNhbS5idWxrX3NpemUpIHsKIAkJLyogSWYgdGhlIGZyYW1lIGlzIHNob3J0LCBhbmQgaXQgaXMgb25lIG9mIHRoZSBmaXJzdCBvbmVzCiAJCSAgIHRoZSBzZW5zb3IgYW5kIGJyaWRnZSBhcmUgc3RpbGwgc3luY2luZywgc28gZHJvcCBpdC4gKi8KIAkJaWYgKHNkLT5maXJzdF9mcmFtZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKaW5kZXggNjQxNWFmZi4uODFiOGE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCkBAIC02MCw3ICs2MCw3IEBACiAKIAl1MzIgcGt0c3o7CQkJLyogKHVzZWQgYnkgcGt0X3NjYW4pICovCiAJdTE2IG5wa3Q7Ci0JdTggbmNoZzsKKwlzOCBuY2hnOwogCXM4IHNob3J0X21hcms7CiAKIAl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaAppbmRleCBiNTM4ZGNlLi5hMTRhODRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCkBAIC0xMjUsNyArMTI1LDcgQEAKICNkZWZpbmUgSERDU19TTEVFUF9NT0RFCQkoMSA8PCAxKQogCiAjZGVmaW5lIEhEQ1NfREVGQVVMVF9FWFBPU1VSRQk0OAotI2RlZmluZSBIRENTX0RFRkFVTFRfR0FJTgkxMjgKKyNkZWZpbmUgSERDU19ERUZBVUxUX0dBSU4JNTAKIAogc3RhdGljIGludCBoZGNzX3Byb2JlXzF4MDAoc3RydWN0IHNkICpzZCk7CiBzdGF0aWMgaW50IGhkY3NfcHJvYmVfMTAyMChzdHJ1Y3Qgc2QgKnNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKaW5kZXggYTRlNGRmZC4uMGZiNzU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKQEAgLTEzMjgsNiArMTMyOCw4IEBACiAJaWYgKCFpdHYtPmhhc19jeDIzNDE1KQogCQl3cml0ZV9yZWdfc3luYygweDAzLCBJVlRWX1JFR19ETUFDT05UUk9MKTsKIAorCWl2dHZfc19zdGRfZW5jKGl0diwgJml0di0+dHVuZXJfc3RkKTsKKwogCS8qIERlZmF1bHQgaW50ZXJydXB0cyBlbmFibGVkLiBGb3IgdGhlIFBWUjM1MCB0aGlzIGluY2x1ZGVzIHRoZQogCSAgIGRlY29kZXIgVlNZTkMgaW50ZXJydXB0LCB3aGljaCBpcyBhbHdheXMgb24uIEl0IGlzIG5vdCBvbmx5IHVzZWQKIAkgICBkdXJpbmcgZGVjb2RpbmcgYnV0IGFsc28gYnkgdGhlIE9TRC4KQEAgLTEzMzYsMTIgKzEzMzgsMTAgQEAKIAlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkgewogCQlpdnR2X2NsZWFyX2lycV9tYXNrKGl0diwgSVZUVl9JUlFfTUFTS19JTklUIHwgSVZUVl9JUlFfREVDX1ZTWU5DKTsKIAkJaXZ0dl9zZXRfb3NkX2FscGhhKGl0dik7Ci0JfQotCWVsc2UKKwkJaXZ0dl9zX3N0ZF9kZWMoaXR2LCAmaXR2LT50dW5lcl9zdGQpOworCX0gZWxzZSB7CiAJCWl2dHZfY2xlYXJfaXJxX21hc2soaXR2LCBJVlRWX0lSUV9NQVNLX0lOSVQpOwotCi0JLyogRm9yIGNhcmRzIHdpdGggdmlkZW8gb3V0LCB0aGlzIGNhbGwgbmVlZHMgaW50ZXJydXB0cyBlbmFibGVkICovCi0JaXZ0dl9zX3N0ZChOVUxMLCAmZmgsICZpdHYtPnR1bmVyX3N0ZCk7CisJfQogCiAJLyogU2V0dXAgaW5pdGlhbCBjb250cm9scyAqLwogCWN4MjM0MXhfaGFuZGxlcl9zZXR1cCgmaXR2LT5jeGhkbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwppbmRleCAxNGExY2VhLi4wMmM1YWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKQEAgLTI4MCw4ICsyODAsNiBAQAogewogCWludCByYyA9IDA7CiAJdjRsMl9zdGRfaWQgc3RkOwotCXN0cnVjdCBpdnR2X29wZW5faWQgZmg7Ci0JZmguaXR2ID0gaXR2OwogCiAJaWYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpCiAJCS8qIERpc3BsYXkgdGVzdCBpbWFnZSBkdXJpbmcgcmVzdGFydCAqLwpAQCAtMzAxLDE0ICsyOTksMTkgQEAKIAkvKiBBbGxvdyBzZXR0aW5ncyB0byByZWxvYWQgKi8KIAlpdnR2X21haWxib3hfY2FjaGVfaW52YWxpZGF0ZShpdHYpOwogCi0JLyogUmVzdG9yZSB2aWRlbyBzdGFuZGFyZCAqLworCS8qIFJlc3RvcmUgZW5jb2RlciB2aWRlbyBzdGFuZGFyZCAqLwogCXN0ZCA9IGl0di0+c3RkOwogCWl0di0+c3RkID0gMDsKLQlpdnR2X3Nfc3RkKE5VTEwsICZmaCwgJnN0ZCk7CisJaXZ0dl9zX3N0ZF9lbmMoaXR2LCAmc3RkKTsKIAogCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSB7CiAJCWl2dHZfaW5pdF9tcGVnX2RlY29kZXIoaXR2KTsKIAorCQkvKiBSZXN0b3JlIGRlY29kZXIgdmlkZW8gc3RhbmRhcmQgKi8KKwkJc3RkID0gaXR2LT5zdGRfb3V0OworCQlpdHYtPnN0ZF9vdXQgPSAwOworCQlpdnR2X3Nfc3RkX2RlYyhpdHYsICZzdGQpOworCiAJCS8qIFJlc3RvcmUgZnJhbWVidWZmZXIgaWYgYWN0aXZlICovCiAJCWlmIChpdHYtPml2dHZmYl9yZXN0b3JlKQogCQkJaXR2LT5pdnR2ZmJfcmVzdG9yZShpdHYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKaW5kZXggMTY4OTc4My4uZjllMzQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCkBAIC0xMDcxLDI4ICsxMDcxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGl2dHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqc3RkKQordm9pZCBpdnR2X3Nfc3RkX2VuYyhzdHJ1Y3QgaXZ0diAqaXR2LCB2NGwyX3N0ZF9pZCAqc3RkKQogewotCURFRklORV9XQUlUKHdhaXQpOwotCXN0cnVjdCBpdnR2ICppdHYgPSBmaDJpZChmaCktPml0djsKLQlzdHJ1Y3QgeXV2X3BsYXliYWNrX2luZm8gKnlpID0gJml0di0+eXV2X2luZm87Ci0JaW50IGY7Ci0KLQlpZiAoKCpzdGQgJiBWNEwyX1NURF9BTEwpID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCpzdGQgPT0gaXR2LT5zdGQpCi0JCXJldHVybiAwOwotCi0JaWYgKHRlc3RfYml0KElWVFZfRl9JX1JBRElPX1VTRVIsICZpdHYtPmlfZmxhZ3MpIHx8Ci0JICAgIGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykgPiAwIHx8Ci0JICAgIGF0b21pY19yZWFkKCZpdHYtPmRlY29kaW5nKSA+IDApIHsKLQkJLyogU3dpdGNoaW5nIHN0YW5kYXJkIHdvdWxkIHR1cm4gb2ZmIHRoZSByYWRpbyBvciBtZXNzCi0JCSAgIHdpdGggYWxyZWFkeSBydW5uaW5nIHN0cmVhbXMsIHByZXZlbnQgdGhhdCBieQotCQkgICByZXR1cm5pbmcgRUJVU1kuICovCi0JCXJldHVybiAtRUJVU1k7Ci0JfQotCiAJaXR2LT5zdGQgPSAqc3RkOwogCWl0di0+aXNfNjBoeiA9ICgqc3RkICYgVjRMMl9TVERfNTI1XzYwKSA/IDEgOiAwOwogCWl0di0+aXNfNTBoeiA9ICFpdHYtPmlzXzYwaHo7CkBAIC0xMTA2LDQ4ICsxMDg2LDc5IEBACiAJaWYgKGl0di0+aHdfZmxhZ3MgJiBJVlRWX0hXX0NYMjU4NDApCiAJCWl0di0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSA9IGl0di0+aXNfNjBoeiA/IDI3MiA6IDI4NDsKIAotCUlWVFZfREVCVUdfSU5GTygiU3dpdGNoaW5nIHN0YW5kYXJkIHRvICVsbHguXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWl0di0+c3RkKTsKLQogCS8qIFR1bmVyICovCiAJaXZ0dl9jYWxsX2FsbChpdHYsIGNvcmUsIHNfc3RkLCBpdHYtPnN0ZCk7Cit9CiAKLQlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkgewotCQkvKiBzZXQgZGlzcGxheSBzdGFuZGFyZCAqLwotCQlpdHYtPnN0ZF9vdXQgPSAqc3RkOwotCQlpdHYtPmlzX291dF82MGh6ID0gaXR2LT5pc182MGh6OwotCQlpdHYtPmlzX291dF81MGh6ID0gaXR2LT5pc181MGh6OwotCQlpdnR2X2NhbGxfYWxsKGl0diwgdmlkZW8sIHNfc3RkX291dHB1dCwgaXR2LT5zdGRfb3V0KTsKK3ZvaWQgaXZ0dl9zX3N0ZF9kZWMoc3RydWN0IGl2dHYgKml0diwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgeXV2X3BsYXliYWNrX2luZm8gKnlpID0gJml0di0+eXV2X2luZm87CisJREVGSU5FX1dBSVQod2FpdCk7CisJaW50IGY7CiAKLQkJLyoKLQkJICogVGhlIG5leHQgZmlybXdhcmUgY2FsbCBpcyB0aW1lIHNlbnNpdGl2ZS4gVGltZSBpdCB0bwotCQkgKiBhdm9pZCByaXNrIG9mIGEgaGFyZCBsb2NrLCBieSB0cnlpbmcgdG8gZW5zdXJlIHRoZSBjYWxsCi0JCSAqIGhhcHBlbnMgd2l0aGluIHRoZSBmaXJzdCAxMDAgbGluZXMgb2YgdGhlIHRvcCBmaWVsZC4KLQkJICogTWFrZSA0IGF0dGVtcHRzIHRvIHN5bmMgdG8gdGhlIGRlY29kZXIgYmVmb3JlIGdpdmluZyB1cC4KLQkJICovCi0JCWZvciAoZiA9IDA7IGYgPCA0OyBmKyspIHsKLQkJCXByZXBhcmVfdG9fd2FpdCgmaXR2LT52c3luY193YWl0cSwgJndhaXQsCi0JCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCWlmICgocmVhZF9yZWcoSVZUVl9SRUdfREVDX0xJTkVfRklFTEQpID4+IDE2KSA8IDEwMCkKLQkJCQlicmVhazsKLQkJCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygyNSkpOwotCQl9Ci0JCWZpbmlzaF93YWl0KCZpdHYtPnZzeW5jX3dhaXRxLCAmd2FpdCk7CisJLyogc2V0IGRpc3BsYXkgc3RhbmRhcmQgKi8KKwlpdHYtPnN0ZF9vdXQgPSAqc3RkOworCWl0di0+aXNfb3V0XzYwaHogPSAoKnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgPyAxIDogMDsKKwlpdHYtPmlzX291dF81MGh6ID0gIWl0di0+aXNfb3V0XzYwaHo7CisJaXZ0dl9jYWxsX2FsbChpdHYsIHZpZGVvLCBzX3N0ZF9vdXRwdXQsIGl0di0+c3RkX291dCk7CiAKLQkJaWYgKGYgPT0gNCkKLQkJCUlWVFZfV0FSTigiTW9kZSBjaGFuZ2UgZmFpbGVkIHRvIHN5bmMgdG8gZGVjb2RlclxuIik7Ci0KLQkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9ERUNfU0VUX1NUQU5EQVJELCAxLCBpdHYtPmlzX291dF81MGh6KTsKLQkJaXR2LT5tYWluX3JlY3QubGVmdCA9IGl0di0+bWFpbl9yZWN0LnRvcCA9IDA7Ci0JCWl0di0+bWFpbl9yZWN0LndpZHRoID0gNzIwOwotCQlpdHYtPm1haW5fcmVjdC5oZWlnaHQgPSBpdHYtPmN4aGRsLmhlaWdodDsKLQkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9PU0RfU0VUX0ZSQU1FQlVGRkVSX1dJTkRPVywgNCwKLQkJCTcyMCwgaXR2LT5tYWluX3JlY3QuaGVpZ2h0LCAwLCAwKTsKLQkJeWktPm1haW5fcmVjdCA9IGl0di0+bWFpbl9yZWN0OwotCQlpZiAoIWl0di0+b3NkX2luZm8pIHsKLQkJCXlpLT5vc2RfZnVsbF93ID0gNzIwOwotCQkJeWktPm9zZF9mdWxsX2ggPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOwotCQl9CisJLyoKKwkgKiBUaGUgbmV4dCBmaXJtd2FyZSBjYWxsIGlzIHRpbWUgc2Vuc2l0aXZlLiBUaW1lIGl0IHRvCisJICogYXZvaWQgcmlzayBvZiBhIGhhcmQgbG9jaywgYnkgdHJ5aW5nIHRvIGVuc3VyZSB0aGUgY2FsbAorCSAqIGhhcHBlbnMgd2l0aGluIHRoZSBmaXJzdCAxMDAgbGluZXMgb2YgdGhlIHRvcCBmaWVsZC4KKwkgKiBNYWtlIDQgYXR0ZW1wdHMgdG8gc3luYyB0byB0aGUgZGVjb2RlciBiZWZvcmUgZ2l2aW5nIHVwLgorCSAqLworCWZvciAoZiA9IDA7IGYgPCA0OyBmKyspIHsKKwkJcHJlcGFyZV90b193YWl0KCZpdHYtPnZzeW5jX3dhaXRxLCAmd2FpdCwKKwkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCWlmICgocmVhZF9yZWcoSVZUVl9SRUdfREVDX0xJTkVfRklFTEQpID4+IDE2KSA8IDEwMCkKKwkJCWJyZWFrOworCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMjUpKTsKIAl9CisJZmluaXNoX3dhaXQoJml0di0+dnN5bmNfd2FpdHEsICZ3YWl0KTsKKworCWlmIChmID09IDQpCisJCUlWVFZfV0FSTigiTW9kZSBjaGFuZ2UgZmFpbGVkIHRvIHN5bmMgdG8gZGVjb2RlclxuIik7CisKKwlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0RFQ19TRVRfU1RBTkRBUkQsIDEsIGl0di0+aXNfb3V0XzUwaHopOworCWl0di0+bWFpbl9yZWN0LmxlZnQgPSAwOworCWl0di0+bWFpbl9yZWN0LnRvcCA9IDA7CisJaXR2LT5tYWluX3JlY3Qud2lkdGggPSA3MjA7CisJaXR2LT5tYWluX3JlY3QuaGVpZ2h0ID0gaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MDsKKwlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX09TRF9TRVRfRlJBTUVCVUZGRVJfV0lORE9XLCA0LAorCQk3MjAsIGl0di0+bWFpbl9yZWN0LmhlaWdodCwgMCwgMCk7CisJeWktPm1haW5fcmVjdCA9IGl0di0+bWFpbl9yZWN0OworCWlmICghaXR2LT5vc2RfaW5mbykgeworCQl5aS0+b3NkX2Z1bGxfdyA9IDcyMDsKKwkJeWktPm9zZF9mdWxsX2ggPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOworCX0KK30KKworaW50IGl2dHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSBmaDJpZChmaCktPml0djsKKworCWlmICgoKnN0ZCAmIFY0TDJfU1REX0FMTCkgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKnN0ZCA9PSBpdHYtPnN0ZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodGVzdF9iaXQoSVZUVl9GX0lfUkFESU9fVVNFUiwgJml0di0+aV9mbGFncykgfHwKKwkgICAgYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSA+IDAgfHwKKwkgICAgYXRvbWljX3JlYWQoJml0di0+ZGVjb2RpbmcpID4gMCkgeworCQkvKiBTd2l0Y2hpbmcgc3RhbmRhcmQgd291bGQgbWVzcyB3aXRoIGFscmVhZHkgcnVubmluZworCQkgICBzdHJlYW1zLCBwcmV2ZW50IHRoYXQgYnkgcmV0dXJuaW5nIEVCVVNZLiAqLworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCUlWVFZfREVCVUdfSU5GTygiU3dpdGNoaW5nIHN0YW5kYXJkIHRvICVsbHguXG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKWl0di0+c3RkKTsKKworCWl2dHZfc19zdGRfZW5jKGl0diwgc3RkKTsKKwlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkKKwkJaXZ0dl9zX3N0ZF9kZWMoaXR2LCBzdGQpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5oCmluZGV4IDU4ZjAwMzQuLjg5MTg1Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuaApAQCAtMjcsNyArMjcsOCBAQAogdm9pZCBpdnR2X3NldF9vc2RfYWxwaGEoc3RydWN0IGl2dHYgKml0dik7CiBpbnQgaXZ0dl9zZXRfc3BlZWQoc3RydWN0IGl2dHYgKml0diwgaW50IHNwZWVkKTsKIHZvaWQgaXZ0dl9zZXRfZnVuY3Moc3RydWN0IHZpZGVvX2RldmljZSAqdmRldik7Ci1pbnQgaXZ0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICpzdGQpOwordm9pZCBpdnR2X3Nfc3RkX2VuYyhzdHJ1Y3QgaXZ0diAqaXR2LCB2NGwyX3N0ZF9pZCAqc3RkKTsKK3ZvaWQgaXZ0dl9zX3N0ZF9kZWMoc3RydWN0IGl2dHYgKml0diwgdjRsMl9zdGRfaWQgKnN0ZCk7CiBpbnQgaXZ0dl9zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqdmYpOwogaW50IGl2dHZfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnApOwogbG9uZyBpdnR2X3Y0bDJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwppbmRleCA5NDI2ODMzLi5lNzc5NGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCkBAIC01ODksNyArNTg5LDcgQEAKIAkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX2F1ZGlvLCBhdWRpbywgc19zdHJlYW0sIDEpOwogCQkvKiBBdm9pZCB1bnByZWRpY3RhYmxlIFBDSSBidXMgaGFuZyAtIGRpc2FibGUgdmlkZW8gY2xvY2tzICovCiAJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIHNfc3RyZWFtLCAwKTsKLQkJaXZ0dl9tc2xlZXBfdGltZW91dCgzMDAsIDEpOworCQlpdnR2X21zbGVlcF90aW1lb3V0KDMwMCwgMCk7CiAJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfRU5DX0lOSVRJQUxJWkVfSU5QVVQsIDApOwogCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIHZpZGVvLCBzX3N0cmVhbSwgMSk7CiAJfQpAQCAtODM0LDcgKzgzNCw3IEBACiAJCX0KIAogCQkvKiBIYW5kbGUgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCQlpdnR2X21zbGVlcF90aW1lb3V0KDEwMCwgMSk7CisJCWl2dHZfbXNsZWVwX3RpbWVvdXQoMTAwLCAwKTsKIAl9CiAKIAlhdG9taWNfZGVjKCZpdHYtPmNhcHR1cmluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCmluZGV4IGI2ZWI1MWMuLjI5M2RiODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCkBAIC03MSw3ICs3MSw3IEBACiAJICAgVHVybmluZyB0aGlzIHNpZ25hbCBvbiBhbmQgb2ZmIGNhbiBjb25mdXNlIGNlcnRhaW4KIAkgICBUVnMuIEFzIGZhciBhcyBJIGNhbiB0ZWxsIHRoZXJlIGlzIG5vIHJlYXNvbiBub3QgdG8KIAkgICB0cmFuc21pdCB0aGlzIHNpZ25hbC4gKi8KLQlpZiAoKGl0di0+c3RkICYgVjRMMl9TVERfNjI1XzUwKSAmJiAhZW5hYmxlZCkgeworCWlmICgoaXR2LT5zdGRfb3V0ICYgVjRMMl9TVERfNjI1XzUwKSAmJiAhZW5hYmxlZCkgewogCQllbmFibGVkID0gMTsKIAkJbW9kZSA9IDB4MDg7ICAvKiA0eDMgZnVsbCBmb3JtYXQgKi8KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKaW5kZXggMTcyNDc0NS4uNmI3YzljODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCiBzdGF0aWMgaW50IGl2dHZmYl9zZXRfZGlzcGxheV93aW5kb3coc3RydWN0IGl2dHYgKml0diwgc3RydWN0IHY0bDJfcmVjdCAqaXZ0dl93aW5kb3cpCiB7Ci0JaW50IG9zZF9oZWlnaHRfbGltaXQgPSBpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODA7CisJaW50IG9zZF9oZWlnaHRfbGltaXQgPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOwogCiAJLyogT25seSBmYWlsIGlmIHJlc29sdXRpb24gdG9vIGhpZ2gsIG90aGVyd2lzZSBmdWRnZSB0aGUgc3RhcnQgY29vcmRzLiAqLwogCWlmICgoaXZ0dl93aW5kb3ctPmhlaWdodCA+IG9zZF9oZWlnaHRfbGltaXQpIHx8IChpdnR2X3dpbmRvdy0+d2lkdGggPiBJVlRWX09TRF9NQVhfV0lEVEgpKQpAQCAtNDcxLDkgKzQ3MSw5IEBACiAJCQl2YmxhbmsuZmxhZ3MgPSBGQl9WQkxBTktfSEFWRV9DT1VOVCB8RkJfVkJMQU5LX0hBVkVfVkNPVU5UIHwKIAkJCQkJRkJfVkJMQU5LX0hBVkVfVlNZTkM7CiAJCQl0cmFjZSA9IHJlYWRfcmVnKElWVFZfUkVHX0RFQ19MSU5FX0ZJRUxEKSA+PiAxNjsKLQkJCWlmIChpdHYtPmlzXzUwaHogJiYgdHJhY2UgPiAzMTIpCisJCQlpZiAoaXR2LT5pc19vdXRfNTBoeiAmJiB0cmFjZSA+IDMxMikKIAkJCQl0cmFjZSAtPSAzMTI7Ci0JCQllbHNlIGlmIChpdHYtPmlzXzYwaHogJiYgdHJhY2UgPiAyNjIpCisJCQllbHNlIGlmIChpdHYtPmlzX291dF82MGh6ICYmIHRyYWNlID4gMjYyKQogCQkJCXRyYWNlIC09IDI2MjsKIAkJCWlmICh0cmFjZSA9PSAxKQogCQkJCXZibGFuay5mbGFncyB8PSBGQl9WQkxBTktfVlNZTkNJTkc7CkBAIC02NTYsNyArNjU2LDcgQEAKIAlJVlRWRkJfREVCVUdfSU5GTygiaXZ0dmZiX2NoZWNrX3ZhclxuIik7CiAKIAkvKiBTZXQgYmFzZSByZWZlcmVuY2VzIGZvciBtb2RlIGNhbGNzLiAqLwotCWlmIChpdHYtPmlzXzUwaHopIHsKKwlpZiAoaXR2LT5pc19vdXRfNTBoeikgewogCQlwaXhjbG9jayA9IDg0MzE2OwogCQlobGltaXQgPSA3NzY7CiAJCXZsaW1pdCA9IDU5MTsKQEAgLTc4NCwxMiArNzg0LDEyIEBACiAJICAgSWYgdGhlIG1hcmdpbnMgYXJlIHRvbyBsYXJnZSwganVzdCBjZW50ZXIgdGhlIHNjcmVlbgogCSAgIChlbmZvcmNpbmcgbWFyZ2lucyBjYXVzZXMgdG9vIG1hbnkgcHJvYmxlbXMpICovCiAKLQlpZiAodmFyLT5sZWZ0X21hcmdpbiArIHZhci0+eHJlcyA+IElWVFZfT1NEX01BWF9XSURUSCArIDEpIHsKKwlpZiAodmFyLT5sZWZ0X21hcmdpbiArIHZhci0+eHJlcyA+IElWVFZfT1NEX01BWF9XSURUSCArIDEpCiAJCXZhci0+bGVmdF9tYXJnaW4gPSAxICsgKChJVlRWX09TRF9NQVhfV0lEVEggLSB2YXItPnhyZXMpIC8gMik7Ci0JfQotCWlmICh2YXItPnVwcGVyX21hcmdpbiArIHZhci0+eXJlcyA+IChpdHYtPmlzXzUwaHogPyA1NzcgOiA0ODEpKSB7Ci0JCXZhci0+dXBwZXJfbWFyZ2luID0gMSArICgoKGl0di0+aXNfNTBoeiA/IDU3NiA6IDQ4MCkgLSB2YXItPnlyZXMpIC8gMik7Ci0JfQorCisJaWYgKHZhci0+dXBwZXJfbWFyZ2luICsgdmFyLT55cmVzID4gKGl0di0+aXNfb3V0XzUwaHogPyA1NzcgOiA0ODEpKQorCQl2YXItPnVwcGVyX21hcmdpbiA9IDEgKyAoKChpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwKSAtCisJCQl2YXItPnlyZXMpIC8gMik7CiAKIAkvKiBNYWludGFpbiBvdmVyYWxsICdzaXplJyBmb3IgYSBjb25zdGFudCByZWZyZXNoIHJhdGUgKi8KIAl2YXItPnJpZ2h0X21hcmdpbiA9IGhsaW1pdCAtIHZhci0+bGVmdF9tYXJnaW4gLSB2YXItPnhyZXM7CkBAIC04MzYsNyArODM2LDEyIEBACiAJdTMyIG9zZF9wYW5faW5kZXg7CiAJc3RydWN0IGl2dHYgKml0diA9IChzdHJ1Y3QgaXZ0diAqKSBpbmZvLT5wYXI7CiAKLQlvc2RfcGFuX2luZGV4ID0gKHZhci0+eG9mZnNldCArICh2YXItPnlvZmZzZXQgKiB2YXItPnhyZXNfdmlydHVhbCkpKnZhci0+Yml0c19wZXJfcGl4ZWwvODsKKwlpZiAodmFyLT55b2Zmc2V0ICsgaW5mby0+dmFyLnlyZXMgPiBpbmZvLT52YXIueXJlc192aXJ0dWFsIHx8CisJICAgIHZhci0+eG9mZnNldCArIGluZm8tPnZhci54cmVzID4gaW5mby0+dmFyLnhyZXNfdmlydHVhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvc2RfcGFuX2luZGV4ID0gdmFyLT55b2Zmc2V0ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoCisJCSAgICAgICsgdmFyLT54b2Zmc2V0ICogaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIC8gODsKIAl3cml0ZV9yZWcob3NkX3Bhbl9pbmRleCwgMHgwMkEwQyk7CiAKIAkvKiBQYXNzIHRoaXMgaW5mbyBiYWNrIHRoZSB5dXYgaGFuZGxlciAqLwpAQCAtMTAwMywxOSArMTAwOCwyMSBAQAogCS8qIEhhcmR3YXJlIGNvb3JkcyBzdGFydCBhdCAwLCB1c2VyIGNvb3JkcyBzdGFydCBhdCAxLiAqLwogCW9zZF9sZWZ0LS07CiAKLQlzdGFydF93aW5kb3cubGVmdCA9IG9zZF9sZWZ0ID49IDAgPyBvc2RfbGVmdCA6ICgoSVZUVl9PU0RfTUFYX1dJRFRIIC0gc3RhcnRfd2luZG93LndpZHRoKSAvIDIpOworCXN0YXJ0X3dpbmRvdy5sZWZ0ID0gb3NkX2xlZnQgPj0gMCA/CisJCSBvc2RfbGVmdCA6ICgoSVZUVl9PU0RfTUFYX1dJRFRIIC0gc3RhcnRfd2luZG93LndpZHRoKSAvIDIpOwogCiAJb2ktPmRpc3BsYXlfYnl0ZV9zdHJpZGUgPQogCQkJc3RhcnRfd2luZG93LndpZHRoICogb2ktPmJ5dGVzX3Blcl9waXhlbDsKIAogCS8qIFZlcnRpY2FsIHNpemUgJiBwb3NpdGlvbiAqLwogCi0JbWF4X2hlaWdodCA9IGl0di0+aXNfNTBoeiA/IDU3NiA6IDQ4MDsKKwltYXhfaGVpZ2h0ID0gaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MDsKIAogCWlmIChvc2RfeXJlcyA+IG1heF9oZWlnaHQpCiAJCW9zZF95cmVzID0gbWF4X2hlaWdodDsKIAotCXN0YXJ0X3dpbmRvdy5oZWlnaHQgPSBvc2RfeXJlcyA/IG9zZF95cmVzIDogaXR2LT5pc181MGh6ID8gNDgwIDogNDAwOworCXN0YXJ0X3dpbmRvdy5oZWlnaHQgPSBvc2RfeXJlcyA/CisJCW9zZF95cmVzIDogaXR2LT5pc19vdXRfNTBoeiA/IDQ4MCA6IDQwMDsKIAogCS8qIENoZWNrIHZlcnRpY2FsIHN0YXJ0IChvc2RfdXBwZXIpLiAqLwogCWlmIChvc2RfdXBwZXIgKyBzdGFydF93aW5kb3cuaGVpZ2h0ID4gbWF4X2hlaWdodCArIDEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jCmluZGV4IDQ3MmE2OTMuLmM5ZmQwNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAJfTsKIAlpbnQgaTsKIAotCWRldl9kYmcoaXNwLT5kZXYsICIiKTsKKwlkZXZfZGJnKGlzcC0+ZGV2LCAiSVNQIElSUTogIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuYW1lKTsgaSsrKSB7CiAJCWlmICgoMSA8PCBpKSAmIGlycXN0YXR1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKaW5kZXggMzk4ODY0My4uNGU0ZDQxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKQEAgLTE1MTIsNyArMTUxMiw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc29jX2NhbWVyYV92aWRlb19zdGFydChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX3R5cGUgKnR5cGUgPSBpY2QtPnZkZXYtPmRldi50eXBlOworCWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSAqdHlwZSA9IGljZC0+dmRldi0+ZGV2LnR5cGU7CiAJaW50IHJldDsKIAogCWlmICghaWNkLT5kZXYucGFyZW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2VudGl0eS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2VudGl0eS5jCmluZGV4IGVkZTc4NTIuLmMzYWIwYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19lbnRpdHkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZW50aXR5LmMKQEAgLTMwLDcgKzMwLDcgQEAKIAlzdHJ1Y3QgdXZjX2VudGl0eSAqcmVtb3RlOwogCXVuc2lnbmVkIGludCBpOwogCXU4IHJlbW90ZV9wYWQ7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBlbnRpdHktPm51bV9wYWRzOyArK2kpIHsKIAkJc3RydWN0IG1lZGlhX2VudGl0eSAqc291cmNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2FwZHM5OTB4LmMgYi9kcml2ZXJzL21pc2MvYXBkczk5MHguYwppbmRleCAyMDAzMTFmLi5lMmE1MmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvYXBkczk5MHguYworKysgYi9kcml2ZXJzL21pc2MvYXBkczk5MHguYwpAQCAtNjA5LDYgKzYwOSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX1BNKSB8fCBkZWZpbmVkKENPTkZJR19QTV9SVU5USU1FKQogc3RhdGljIGludCBhcGRzOTkweF9jaGlwX29uKHN0cnVjdCBhcGRzOTkweF9jaGlwICpjaGlwKQogewogCWludCBlcnIJID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoY2hpcC0+cmVncyksCkBAIC02MjQsNiArNjI1LDcgQEAKIAlhcGRzOTkweF9tb2RlX29uKGNoaXApOwogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgYXBkczk5MHhfY2hpcF9vZmYoc3RydWN0IGFwZHM5OTB4X2NoaXAgKmNoaXApCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY3M1NTM1LW1mZ3B0LmMgYi9kcml2ZXJzL21pc2MvY3M1NTM1LW1mZ3B0LmMKaW5kZXggZTAxZTA4Yy4uYmM2ODViZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9jczU1MzUtbWZncHQuYworKysgYi9kcml2ZXJzL21pc2MvY3M1NTM1LW1mZ3B0LmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCQl0aW1lcl9uciA9IHQgPCBtYXggPyAoaW50KSB0IDogLTE7CiAJfSBlbHNlIHsKIAkJLyogY2hlY2sgaWYgdGhlIHJlcXVlc3RlZCB0aW1lcidzIGF2YWlsYWJsZSAqLwotCQlpZiAodGVzdF9iaXQodGltZXJfbnIsIG1mZ3B0LT5hdmFpbCkpCisJCWlmICghdGVzdF9iaXQodGltZXJfbnIsIG1mZ3B0LT5hdmFpbCkpCiAJCQl0aW1lcl9uciA9IC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2tnZGJ0cy5jIGIvZHJpdmVycy9taXNjL2tnZGJ0cy5jCmluZGV4IGIwYzU2MzEuLjhjZWJlYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9rZ2RidHMuYworKysgYi9kcml2ZXJzL21pc2Mva2dkYnRzLmMKQEAgLTMwNCw3ICszMDQsMTAgQEAKIAkJcmV0dXJuIDE7CiAJfQogCS8qIFJlYWRqdXN0IHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIGlmIG5lZWRlZCAqLwotCWluc3RydWN0aW9uX3BvaW50ZXJfc2V0KCZrZ2RidHNfcmVncywgaXAgKyBvZmZzZXQpOworCWlwICs9IG9mZnNldDsKKyNpZmRlZiBHREJfQURKVVNUU19CUkVBS19PRkZTRVQKKwlpbnN0cnVjdGlvbl9wb2ludGVyX3NldCgma2dkYnRzX3JlZ3MsIGlwKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc3BlYXIxM3h4X3BjaWVfZ2FkZ2V0LmMgYi9kcml2ZXJzL21pc2Mvc3BlYXIxM3h4X3BjaWVfZ2FkZ2V0LmMKaW5kZXggN2FkZWQ5MC4uY2ZiZGRiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NwZWFyMTN4eF9wY2llX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvbWlzYy9zcGVhcjEzeHhfcGNpZV9nYWRnZXQuYwpAQCAtODQ1LDcgKzg0NSw3IEBACiBlcnJfaW91bm1hcF9hcHA6CiAJaW91bm1hcChjb25maWctPnZhX2FwcF9iYXNlKTsKIGVycl9remFsbG9jOgotCWtmcmVlKGNvbmZpZyk7CisJa2ZyZWUodGFyZ2V0KTsKIGVycl9yZWxfcmVzOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMxLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMxKSk7CiBlcnJfcmVsX3JlczA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvdGktc3Qvc3RfY29yZS5jIGIvZHJpdmVycy9taXNjL3RpLXN0L3N0X2NvcmUuYwppbmRleCAxYTA1ZmUwLi5mOTFmODJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvdGktc3Qvc3RfY29yZS5jCisrKyBiL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9jb3JlLmMKQEAgLTc0Nyw4ICs3NDcsOCBAQAogCXByX2RlYnVnKCIlczogZG9uZSAiLCBfX2Z1bmNfXyk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RfdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgY2hhciAqdHR5X2ZsYWdzLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBzdF90dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJICAgY2hhciAqdHR5X2ZsYWdzLCBpbnQgY291bnQpCiB7CiAjaWZkZWYgVkVSQk9TRQogCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICI+aW4+IiwgRFVNUF9QUkVGSVhfTk9ORSwKQEAgLTc2MSw4ICs3NjEsNiBAQAogCSAqLwogCXN0X3JlY3YodHR5LT5kaXNjX2RhdGEsIGRhdGEsIGNvdW50KTsKIAlwcl9kZWJ1ZygiZG9uZSAlcyIsIF9fZnVuY19fKTsKLQotCXJldHVybiBjb3VudDsKIH0KIAogLyogd2FrZS11cCBmdW5jdGlvbiBjYWxsZWQgaW4gZnJvbSB0aGUgVFRZIGxheWVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDVkYTViZWEwLi43NzIxZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwpAQCAtMTE0NCw5ICsxMTQ0LDE3IEBACiAJCWVsc2UgaWYgKHJldCAhPSAtRU5PU1lTKQogCQkJZ290byBlcnJfZ3Bpb19jZDsKIAorCQkvKgorCQkgKiBBIGdwaW8gcGluIHRoYXQgd2lsbCBkZXRlY3QgY2FyZHMgd2hlbiBpbnNlcnRlZCBhbmQgcmVtb3ZlZAorCQkgKiB3aWxsIG1vc3QgbGlrZWx5IHdhbnQgdG8gdHJpZ2dlciBvbiB0aGUgZWRnZXMgaWYgaXQgaXMKKwkJICogMCB3aGVuIGVqZWN0ZWQgYW5kIDEgd2hlbiBpbnNlcnRlZCAob3IgbXV0YXRpcyBtdXRhbmRpcworCQkgKiBmb3IgdGhlIGludmVydGVkIGNhc2UpIHNvIHdlIHJlcXVlc3QgdHJpZ2dlcnMgb24gYm90aAorCQkgKiBlZGdlcy4KKwkJICovCiAJCXJldCA9IHJlcXVlc3RfYW55X2NvbnRleHRfaXJxKGdwaW9fdG9faXJxKHBsYXQtPmdwaW9fY2QpLAotCQkJCQkgICAgICBtbWNpX2NkX2lycSwgMCwKLQkJCQkJICAgICAgRFJJVkVSX05BTUUgIiAoY2QpIiwgaG9zdCk7CisJCQkJbW1jaV9jZF9pcnEsCisJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCURSSVZFUl9OQU1FICIgKGNkKSIsIGhvc3QpOwogCQlpZiAocmV0ID49IDApCiAJCQlob3N0LT5ncGlvX2NkX2lycSA9IGdwaW9fdG9faXJxKHBsYXQtPmdwaW9fY2QpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggMjU5ZWNlMC4uNWIyZTIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTQzNSw2ICs0MzUsOSBAQAogCQlyZWcgPSByZWd1bGF0b3JfZ2V0KGhvc3QtPmRldiwgInZtbWNfYXV4Iik7CiAJCWhvc3QtPnZjY19hdXggPSBJU19FUlIocmVnKSA/IE5VTEwgOiByZWc7CiAKKwkJLyogRm9yIGVNTUMgZG8gbm90IHBvd2VyIG9mZiB3aGVuIG5vdCBpbiBzbGVlcCBzdGF0ZSAqLworCQlpZiAobW1jX3Nsb3QoaG9zdCkubm9fcmVndWxhdG9yX29mZl9pbml0KQorCQkJcmV0dXJuIDA7CiAJCS8qCiAJCSogVUdMWSBIQUNLOiAgd29ya2Fyb3VuZCByZWd1bGF0b3IgZnJhbWV3b3JrIGJ1Z3MuCiAJCSogV2hlbiB0aGUgYm9vdGxvYWRlciBsZWF2ZXMgYSBzdXBwbHkgYWN0aXZlLCBpdCdzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwOS5jIGIvZHJpdmVycy9uZXQvM2M1MDkuYwppbmRleCA1ZjI1ODg5Li40NGIyOGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwOS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKQEAgLTE4NSw3ICsxODUsNyBAQAogc3RhdGljIGludCBub3BucDsKICNlbmRpZgogCi1zdGF0aWMgaW50IGVsM19jb21tb25faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVsM19jb21tb25faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGVsM19jb21tb25fcmVtb3ZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHVzaG9ydCBpZF9yZWFkX2VlcHJvbShpbnQgaW5kZXgpOwogc3RhdGljIHVzaG9ydCByZWFkX2VlcHJvbShpbnQgaW9hZGRyLCBpbnQgaW5kZXgpOwpAQCAtMzk1LDcgKzM5NSw3IEBACiBzdGF0aWMgaW50IGlzYV9yZWdpc3RlcmVkOwogCiAjaWZkZWYgQ09ORklHX1BOUAotc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIGVsM19wbnBfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgc3RydWN0IHBucF9kZXZpY2VfaWQgZWwzX3BucF9pZHNbXSA9IHsKIAl7IC5pZCA9ICJUQ001MDkwIiB9LCAvKiAzQ29tIEV0aGVybGluayBJSUkgKFRQKSAqLwogCXsgLmlkID0gIlRDTTUwOTEiIH0sIC8qIDNDb20gRXRoZXJsaW5rIElJSSAqLwogCXsgLmlkID0gIlRDTTUwOTQiIH0sIC8qIDNDb20gRXRoZXJsaW5rIElJSSAoY29tYm8pICovCkBAIC00NzgsNyArNDc4LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCiAKICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGNvbnN0IHN0cnVjdCBlaXNhX2RldmljZV9pZCBlbDNfZWlzYV9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgZWwzX2Vpc2FfaWRzW10gPSB7CiAJCXsgIlRDTTUwOTAiIH0sCiAJCXsgIlRDTTUwOTEiIH0sCiAJCXsgIlRDTTUwOTIiIH0sCkBAIC01MDgsNyArNTA4LDcgQEAKICNpZmRlZiBDT05GSUdfTUNBCiBzdGF0aWMgaW50IGVsM19tY2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKIAotc3RhdGljIGNvbnN0IHNob3J0IGVsM19tY2FfYWRhcHRlcl9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBzaG9ydCBlbDNfbWNhX2FkYXB0ZXJfaWRzW10gX19pbml0ZGF0YSA9IHsKIAkJMHg2MjdjLAogCQkweDYyN2QsCiAJCTB4NjJkYiwKQEAgLTUxNyw3ICs1MTcsNyBAQAogCQkweDAwMDAKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBlbDNfbWNhX2FkYXB0ZXJfbmFtZXNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBjaGFyICplbDNfbWNhX2FkYXB0ZXJfbmFtZXNbXSBfX2luaXRkYXRhID0gewogCQkiM0NvbSAzYzUyOSBFdGhlckxpbmsgSUlJICgxMGJhc2UyKSIsCiAJCSIzQ29tIDNjNTI5IEV0aGVyTGluayBJSUkgKDEwYmFzZVQpIiwKIAkJIjNDb20gM2M1MjkgRXRoZXJMaW5rIElJSSAodGVzdCBtb2RlKSIsCkBAIC02MDEsNyArNjAxLDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19NQ0EKLXN0YXRpYyBpbnQgX19kZXZpbml0IGVsM19tY2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgZWwzX21jYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJLyogQmFzZWQgb24gRXJpayBOeWdyZW4ncyAobnlncmVuQG1pdC5lZHUpIDNjNTI5IHBhdGNoLAogCSAqIGhlYXZpbHkgbW9kaWZpZWQgYnkgQ2hyaXMgQmVhdXJlZ2FyZApAQCAtNjcxLDcgKzY3MSw3IEBACiAjZW5kaWYgLyogQ09ORklHX01DQSAqLwogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBpbnQgX19kZXZpbml0IGVsM19laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBlbDNfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCXNob3J0IGk7CiAJaW50IGlvYWRkciwgaXJxLCBpZl9wb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggOTlmNDNkMi4uOGNjMjI1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC05MDEsMTQgKzkwMSwxNCBAQAogI2VuZGlmIC8qICFDT05GSUdfUE0gKi8KIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgY29uc3Qgc3RydWN0IGVpc2FfZGV2aWNlX2lkIHZvcnRleF9laXNhX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIHN0cnVjdCBlaXNhX2RldmljZV9pZCB2b3J0ZXhfZWlzYV9pZHNbXSA9IHsKIAl7ICJUQ001OTIwIiwgQ0hfM0M1OTIgfSwKIAl7ICJUQ001OTcwIiwgQ0hfM0M1OTcgfSwKIAl7ICIiIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGVpc2EsIHZvcnRleF9laXNhX2lkcyk7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHZvcnRleF9laXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IHZvcnRleF9laXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsKIAlzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKaW5kZXggMGM5MjE3Zi4uN2IzZTIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYwpAQCAtNTAsNyArNTAsNyBAQAogI2lmZGVmIF9fYXJtX18KIHN0YXRpYyB2b2lkIHdyaXRlX3JyZWcodV9sb25nIGJhc2UsIHVfaW50IHJlZywgdV9pbnQgdmFsKQogewotCV9fYXNtX18oCisJYXNtIHZvbGF0aWxlKAogCSJzdHIlP2gJJTEsIFslMl0JQCBORVRfUkFQXG5cdCIKIAkic3RyJT9oCSUwLCBbJTIsICMtNF0JQCBORVRfUkRQIgogCToKQEAgLTYwLDcgKzYwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgcmVhZF9ycmVnKHVfbG9uZyBiYXNlX2FkZHIsIHVfaW50IHJlZykKIHsKIAl1bnNpZ25lZCBzaG9ydCB2OwotCV9fYXNtX18oCisJYXNtIHZvbGF0aWxlKAogCSJzdHIlP2gJJTEsIFslMl0JQCBORVRfUkFQXG5cdCIKIAkibGRyJT9oCSUwLCBbJTIsICMtNF0JQCBORVRfUkRQIgogCTogIj1yIiAodikKQEAgLTcwLDcgKzcwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2lyZWcodV9sb25nIGJhc2UsIHVfaW50IHJlZywgdV9pbnQgdmFsKQogewotCV9fYXNtX18oCisJYXNtIHZvbGF0aWxlKAogCSJzdHIlP2gJJTEsIFslMl0JQCBORVRfUkFQXG5cdCIKIAkic3RyJT9oCSUwLCBbJTIsICM4XQlAIE5FVF9JRFAiCiAJOgpAQCAtODAsNyArODAsNyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByZWFkX2lyZWcodV9sb25nIGJhc2VfYWRkciwgdV9pbnQgcmVnKQogewogCXVfc2hvcnQgdjsKLQlfX2FzbV9fKAorCWFzbSB2b2xhdGlsZSgKIAkic3RyJT9oCSUxLCBbJTJdCUAgTkFUX1JBUFxuXHQiCiAJImxkciU/aAklMCwgWyUyLCAjOF0JQCBORVRfSURQXG5cdCIKIAk6ICI9ciIgKHYpCkBAIC05MSw0NyArOTEsNDggQEAKICNkZWZpbmUgYW1fd3JpdGV3b3JkKGRldixvZmYsdmFsKSBfX3Jhd193cml0ZXcodmFsLCBJU0FNRU1fQkFTRSArICgob2ZmKSA8PCAxKSkKICNkZWZpbmUgYW1fcmVhZHdvcmQoZGV2LG9mZikgICAgICBfX3Jhd19yZWFkdyhJU0FNRU1fQkFTRSArICgob2ZmKSA8PCAxKSkKIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogYW1fd3JpdGVidWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9pbnQgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CiAJb2Zmc2V0ID0gSVNBTUVNX0JBU0UgKyAob2Zmc2V0IDw8IDEpOwogCWxlbmd0aCA9IChsZW5ndGggKyAxKSAmIH4xOwogCWlmICgoaW50KWJ1ZiAmIDIpIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0ciU/aAklMiwgWyUwXSwgIzQiCisJCWFzbSB2b2xhdGlsZSgic3RyJT9oCSUyLCBbJTBdLCAjNCIKIAkJIDogIj0mciIgKG9mZnNldCkgOiAiMCIgKG9mZnNldCksICJyIiAoYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KSkpOwogCQlidWYgKz0gMjsKIAkJbGVuZ3RoIC09IDI7CiAJfQogCXdoaWxlIChsZW5ndGggPiA4KSB7Ci0JCXVuc2lnbmVkIGludCB0bXAsIHRtcDI7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkJImxkbSU/aWEJJTEhLCB7JTIsICUzfVxuXHQiCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCB0bXAgYXNtKCJyMiIpLCB0bXAyIGFzbSgicjMiKTsKKwkJYXNtIHZvbGF0aWxlKAorCQkJImxkbSU/aWEJJTAhLCB7JTEsICUyfSIKKwkJCTogIityIiAoYnVmKSwgIj0mciIgKHRtcCksICI9JnIiICh0bXAyKSk7CisJCWxlbmd0aCAtPSA4OworCQlhc20gdm9sYXRpbGUoCisJCQkic3RyJT9oCSUxLCBbJTBdLCAjNFxuXHQiCisJCQkibW92JT8JJTEsICUxLCBsc3IgIzE2XG5cdCIKKwkJCSJzdHIlP2gJJTEsIFslMF0sICM0XG5cdCIKIAkJCSJzdHIlP2gJJTIsIFslMF0sICM0XG5cdCIKIAkJCSJtb3YlPwklMiwgJTIsIGxzciAjMTZcblx0IgotCQkJInN0ciU/aAklMiwgWyUwXSwgIzRcblx0IgotCQkJInN0ciU/aAklMywgWyUwXSwgIzRcblx0IgotCQkJIm1vdiU/CSUzLCAlMywgbHNyICMxNlxuXHQiCi0JCQkic3RyJT9oCSUzLCBbJTBdLCAjNCIKLQkJOiAiPSZyIiAob2Zmc2V0KSwgIj0mciIgKGJ1ZiksICI9ciIgKHRtcCksICI9ciIgKHRtcDIpCi0JCTogIjAiIChvZmZzZXQpLCAiMSIgKGJ1ZikpOwotCQlsZW5ndGggLT0gODsKKwkJCSJzdHIlP2gJJTIsIFslMF0sICM0IgorCQk6ICIrciIgKG9mZnNldCksICI9JnIiICh0bXApLCAiPSZyIiAodG1wMikpOwogCX0KIAl3aGlsZSAobGVuZ3RoID4gMCkgewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RyJT9oCSUyLCBbJTBdLCAjNCIKKwkJYXNtIHZvbGF0aWxlKCJzdHIlP2gJJTIsIFslMF0sICM0IgogCQkgOiAiPSZyIiAob2Zmc2V0KSA6ICIwIiAob2Zmc2V0KSwgInIiIChidWZbMF0gfCAoYnVmWzFdIDw8IDgpKSk7CiAJCWJ1ZiArPSAyOwogCQlsZW5ndGggLT0gMjsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIGFtX3JlYWRidWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9pbnQgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CiAJb2Zmc2V0ID0gSVNBTUVNX0JBU0UgKyAob2Zmc2V0IDw8IDEpOwogCWxlbmd0aCA9IChsZW5ndGggKyAxKSAmIH4xOwogCWlmICgoaW50KWJ1ZiAmIDIpIHsKIAkJdW5zaWduZWQgaW50IHRtcDsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCWFzbSB2b2xhdGlsZSgKIAkJCSJsZHIlP2gJJTIsIFslMF0sICM0XG5cdCIKIAkJCSJzdHIlP2IJJTIsIFslMV0sICMxXG5cdCIKIAkJCSJtb3YlPwklMiwgJTIsIGxzciAjOFxuXHQiCkBAIC0xNDAsMTIgKzE0MSwxMiBAQAogCQlsZW5ndGggLT0gMjsKIAl9CiAJd2hpbGUgKGxlbmd0aCA+IDgpIHsKLQkJdW5zaWduZWQgaW50IHRtcCwgdG1wMiwgdG1wMzsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCB0bXAgYXNtKCJyMiIpLCB0bXAyIGFzbSgicjMiKSwgdG1wMzsKKwkJYXNtIHZvbGF0aWxlKAogCQkJImxkciU/aAklMiwgWyUwXSwgIzRcblx0IgorCQkJImxkciU/aAklNCwgWyUwXSwgIzRcblx0IgogCQkJImxkciU/aAklMywgWyUwXSwgIzRcblx0IgotCQkJIm9yciU/CSUyLCAlMiwgJTMsIGxzbCAjMTZcblx0IgotCQkJImxkciU/aAklMywgWyUwXSwgIzRcblx0IgorCQkJIm9yciU/CSUyLCAlMiwgJTQsIGxzbCAjMTZcblx0IgogCQkJImxkciU/aAklNCwgWyUwXSwgIzRcblx0IgogCQkJIm9yciU/CSUzLCAlMywgJTQsIGxzbCAjMTZcblx0IgogCQkJInN0bSU/aWEJJTEhLCB7JTIsICUzfSIKQEAgLTE1NSw3ICsxNTYsNyBAQAogCX0KIAl3aGlsZSAobGVuZ3RoID4gMCkgewogCQl1bnNpZ25lZCBpbnQgdG1wOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJYXNtIHZvbGF0aWxlKAogCQkJImxkciU/aAklMiwgWyUwXSwgIzRcblx0IgogCQkJInN0ciU/YgklMiwgWyUxXSwgIzFcblx0IgogCQkJIm1vdiU/CSUyLCAlMiwgbHNyICM4XG5cdCIKQEAgLTE5Niw2ICsxOTcsNDIgQEAKIAlyZXR1cm4gZXJyb3Jjb3VudDsKIH0KIAorc3RhdGljIHZvaWQgYW03OWM5NjFfbWNfaGFzaChjaGFyICphZGRyLCB1MTYgKmhhc2gpCit7CisJaWYgKGFkZHJbMF0gJiAweDAxKSB7CisJCWludCBpZHgsIGJpdDsKKwkJdTMyIGNyYzsKKworCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGFkZHIpOworCisJCWlkeCA9IGNyYyA+PiAzMDsKKwkJYml0ID0gKGNyYyA+PiAyNikgJiAxNTsKKworCQloYXNoW2lkeF0gfD0gMSA8PCBiaXQ7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFtNzljOTYxX2dldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiAqaGFzaCkKK3sKKwl1bnNpZ25lZCBpbnQgbW9kZSA9IE1PREVfUE9SVF8xMEJUOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQltb2RlIHw9IE1PREVfUFJPTUlTQzsKKwkJbWVtc2V0KGhhc2gsIDB4ZmYsIDQgKiBzaXplb2YoKmhhc2gpKTsKKwl9IGVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJbWVtc2V0KGhhc2gsIDB4ZmYsIDQgKiBzaXplb2YoKmhhc2gpKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCisJCW1lbXNldChoYXNoLCAwLCA0ICogc2l6ZW9mKCpoYXNoKSk7CisKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikKKwkJCWFtNzljOTYxX21jX2hhc2goaGEtPmFkZHIsIGhhc2gpOworCX0KKworCXJldHVybiBtb2RlOworfQorCiBzdGF0aWMgdm9pZAogYW03OWM5NjFfaW5pdF9mb3Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMjAzLDYgKzI0MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyICpwOwogCXVfaW50IGhkcl9hZGRyLCBmaXJzdF9mcmVlX2FkZHI7CisJdTE2IG11bHRpX2hhc2hbNF0sIG1vZGUgPSBhbTc5Yzk2MV9nZXRfcnhfbW9kZShkZXYsIG11bHRpX2hhc2gpOwogCWludCBpOwogCiAJLyoKQEAgLTIxOCwxNiArMjU2LDEyIEBACiAJd3JpdGVfaXJlZyAoZGV2LT5iYXNlX2FkZHIsIDIsIDB4MDAwMCk7IC8qIE1PREUgcmVnaXN0ZXIgc2VsZWN0cyBtZWRpYSAqLwogCiAJZm9yIChpID0gTEFEUkw7IGkgPD0gTEFEUkg7IGkrKykKLQkJd3JpdGVfcnJlZyAoZGV2LT5iYXNlX2FkZHIsIGksIDApOworCQl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgaSwgbXVsdGlfaGFzaFtpIC0gTEFEUkxdKTsKIAogCWZvciAoaSA9IFBBRFJMLCBwID0gZGV2LT5kZXZfYWRkcjsgaSA8PSBQQURSSDsgaSsrLCBwICs9IDIpCiAJCXdyaXRlX3JyZWcgKGRldi0+YmFzZV9hZGRyLCBpLCBwWzBdIHwgKHBbMV0gPDwgOCkpOwogCi0JaSA9IE1PREVfUE9SVF8xMEJUOwotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCWkgfD0gTU9ERV9QUk9NSVNDOwotCi0Jd3JpdGVfcnJlZyAoZGV2LT5iYXNlX2FkZHIsIE1PREUsIGkpOworCXdyaXRlX3JyZWcgKGRldi0+YmFzZV9hZGRyLCBNT0RFLCBtb2RlKTsKIAl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgUE9MTElOVCwgMCk7CiAJd3JpdGVfcnJlZyAoZGV2LT5iYXNlX2FkZHIsIFNJWkVSWFIsIC1SWF9CVUZGRVJTKTsKIAl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgU0laRVRYUiwgLVRYX0JVRkZFUlMpOwpAQCAtMzQwLDIxICszNzQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhbTc5Yzk2MV9tY19oYXNoKGNoYXIgKmFkZHIsIHVuc2lnbmVkIHNob3J0ICpoYXNoKQotewotCWlmIChhZGRyWzBdICYgMHgwMSkgewotCQlpbnQgaWR4LCBiaXQ7Ci0JCXUzMiBjcmM7Ci0KLQkJY3JjID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBhZGRyKTsKLQotCQlpZHggPSBjcmMgPj4gMzA7Ci0JCWJpdCA9IChjcmMgPj4gMjYpICYgMTU7Ci0KLQkJaGFzaFtpZHhdIHw9IDEgPDwgYml0OwotCX0KLX0KLQogLyoKICAqIFNldCBvciBjbGVhciBwcm9taXNjdW91cy9tdWx0aWNhc3QgbW9kZSBmaWx0ZXIgZm9yIHRoaXMgYWRhcHRlci4KICAqLwpAQCAtMzYyLDI0ICszODEsOSBAQAogewogCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBzaG9ydCBtdWx0aV9oYXNoWzRdLCBtb2RlOworCXUxNiBtdWx0aV9oYXNoWzRdLCBtb2RlID0gYW03OWM5NjFfZ2V0X3J4X21vZGUoZGV2LCBtdWx0aV9oYXNoKTsKIAlpbnQgaSwgc3RvcHBlZDsKIAotCW1vZGUgPSBNT0RFX1BPUlRfMTBCVDsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJbW9kZSB8PSBNT0RFX1BST01JU0M7Ci0JfSBlbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCW1lbXNldChtdWx0aV9oYXNoLCAweGZmLCBzaXplb2YobXVsdGlfaGFzaCkpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7Ci0KLQkJbWVtc2V0KG11bHRpX2hhc2gsIDB4MDAsIHNpemVvZihtdWx0aV9oYXNoKSk7Ci0KLQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikKLQkJCWFtNzljOTYxX21jX2hhc2goaGEtPmFkZHIsIG11bHRpX2hhc2gpOwotCX0KLQogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5jaGlwX2xvY2ssIGZsYWdzKTsKIAogCXN0b3BwZWQgPSByZWFkX3JyZWcoZGV2LT5iYXNlX2FkZHIsIENTUjApICYgQ1NSMF9TVE9QOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKaW5kZXggNWE3NzAwMS4uMGI0NmI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCkBAIC0yODMsMTAgKzI4MywxNCBAQAogCiAJCXNrYiA9IGRldl9hbGxvY19za2IobGVuZ3RoICsgMik7CiAJCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7CisJCQlzdHJ1Y3QgZXA5M3h4X3JkZXNjICpyeGQgPSAmZXAtPmRlc2NzLT5yZGVzY1tlbnRyeV07CiAJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwotCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoTlVMTCwgZXAtPmRlc2NzLT5yZGVzY1tlbnRyeV0uYnVmX2FkZHIsCisJCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYtPmRldi5wYXJlbnQsIHJ4ZC0+YnVmX2FkZHIsCiAJCQkJCQlsZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CiAJCQlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIGVwLT5yeF9idWZbZW50cnldLCBsZW5ndGgpOworCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LT5kZXYucGFyZW50LAorCQkJCQkJICAgcnhkLT5idWZfYWRkciwgbGVuZ3RoLAorCQkJCQkJICAgRE1BX0ZST01fREVWSUNFKTsKIAkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIApAQCAtMzQ4LDYgKzM1Miw3IEBACiBzdGF0aWMgaW50IGVwOTN4eF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVwOTN4eF90ZGVzYyAqdHhkOwogCWludCBlbnRyeTsKIAogCWlmICh1bmxpa2VseShza2ItPmxlbiA+IE1BWF9QS1RfU0laRSkpIHsKQEAgLTM1OSwxMSArMzY0LDE0IEBACiAJZW50cnkgPSBlcC0+dHhfcG9pbnRlcjsKIAllcC0+dHhfcG9pbnRlciA9IChlcC0+dHhfcG9pbnRlciArIDEpICYgKFRYX1FVRVVFX0VOVFJJRVMgLSAxKTsKIAotCWVwLT5kZXNjcy0+dGRlc2NbZW50cnldLnRkZXNjMSA9Ci0JCVRERVNDMV9FT0YgfCAoZW50cnkgPDwgMTYpIHwgKHNrYi0+bGVuICYgMHhmZmYpOworCXR4ZCA9ICZlcC0+ZGVzY3MtPnRkZXNjW2VudHJ5XTsKKworCXR4ZC0+dGRlc2MxID0gVERFU0MxX0VPRiB8IChlbnRyeSA8PCAxNikgfCAoc2tiLT5sZW4gJiAweGZmZik7CisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LT5kZXYucGFyZW50LCB0eGQtPmJ1Zl9hZGRyLCBza2ItPmxlbiwKKwkJCQlETUFfVE9fREVWSUNFKTsKIAlza2JfY29weV9hbmRfY3N1bV9kZXYoc2tiLCBlcC0+dHhfYnVmW2VudHJ5XSk7Ci0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoTlVMTCwgZXAtPmRlc2NzLT50ZGVzY1tlbnRyeV0uYnVmX2FkZHIsCi0JCQkJc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldi0+ZGV2LnBhcmVudCwgdHhkLT5idWZfYWRkciwgc2tiLT5sZW4sCisJCQkJICAgRE1BX1RPX0RFVklDRSk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCiAJc3Bpbl9sb2NrX2lycSgmZXAtPnR4X3BlbmRpbmdfbG9jayk7CkBAIC00NTcsODkgKzQ2NSw4MCBAQAogCiBzdGF0aWMgdm9pZCBlcDkzeHhfZnJlZV9idWZmZXJzKHN0cnVjdCBlcDkzeHhfcHJpdiAqZXApCiB7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZXAtPmRldi0+ZGV2LnBhcmVudDsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBSWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CiAJCWRtYV9hZGRyX3QgZDsKIAogCQlkID0gZXAtPmRlc2NzLT5yZGVzY1tpXS5idWZfYWRkcjsKIAkJaWYgKGQpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIGQsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkLCBQS1RfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJaWYgKGVwLT5yeF9idWZbaV0gIT0gTlVMTCkKLQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyllcC0+cnhfYnVmW2ldKTsKKwkJCWtmcmVlKGVwLT5yeF9idWZbaV0pOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBUWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgVFhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CiAJCWRtYV9hZGRyX3QgZDsKIAogCQlkID0gZXAtPmRlc2NzLT50ZGVzY1tpXS5idWZfYWRkcjsKIAkJaWYgKGQpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIGQsIFBBR0VfU0laRSwgRE1BX1RPX0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZCwgUEtUX0JVRl9TSVpFLCBETUFfVE9fREVWSUNFKTsKIAogCQlpZiAoZXAtPnR4X2J1ZltpXSAhPSBOVUxMKQotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWVwLT50eF9idWZbaV0pOworCQkJa2ZyZWUoZXAtPnR4X2J1ZltpXSk7CiAJfQogCi0JZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKHN0cnVjdCBlcDkzeHhfZGVzY3MpLCBlcC0+ZGVzY3MsCisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IGVwOTN4eF9kZXNjcyksIGVwLT5kZXNjcywKIAkJCQkJCQllcC0+ZGVzY3NfZG1hX2FkZHIpOwogfQogCi0vKgotICogVGhlIGhhcmR3YXJlIGVuZm9yY2VzIGEgc3ViLTJLIG1heGltdW0gcGFja2V0IHNpemUsIHNvIHdlIHB1dAotICogdHdvIGJ1ZmZlcnMgb24gZXZlcnkgaGFyZHdhcmUgcGFnZS4KLSAqLwogc3RhdGljIGludCBlcDkzeHhfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwKQogeworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGVwLT5kZXYtPmRldi5wYXJlbnQ7CiAJaW50IGk7CiAKLQllcC0+ZGVzY3MgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKHN0cnVjdCBlcDkzeHhfZGVzY3MpLAotCQkJCSZlcC0+ZGVzY3NfZG1hX2FkZHIsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwllcC0+ZGVzY3MgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IGVwOTN4eF9kZXNjcyksCisJCQkJJmVwLT5kZXNjc19kbWFfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVwLT5kZXNjcyA9PSBOVUxMKQogCQlyZXR1cm4gMTsKIAotCWZvciAoaSA9IDA7IGkgPCBSWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKLQkJdm9pZCAqcGFnZTsKKwlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CisJCXZvaWQgKmJ1ZjsKIAkJZG1hX2FkZHJfdCBkOwogCi0JCXBhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JCWlmIChwYWdlID09IE5VTEwpCisJCWJ1ZiA9IGttYWxsb2MoUEtUX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQogCQkJZ290byBlcnI7CiAKLQkJZCA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHBhZ2UsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKE5VTEwsIGQpKSB7Ci0JCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZSk7CisJCWQgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGJ1ZiwgUEtUX0JVRl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkKSkgeworCQkJa2ZyZWUoYnVmKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAKLQkJZXAtPnJ4X2J1ZltpXSA9IHBhZ2U7CisJCWVwLT5yeF9idWZbaV0gPSBidWY7CiAJCWVwLT5kZXNjcy0+cmRlc2NbaV0uYnVmX2FkZHIgPSBkOwogCQllcC0+ZGVzY3MtPnJkZXNjW2ldLnJkZXNjMSA9IChpIDw8IDE2KSB8IFBLVF9CVUZfU0laRTsKLQotCQllcC0+cnhfYnVmW2kgKyAxXSA9IHBhZ2UgKyBQS1RfQlVGX1NJWkU7Ci0JCWVwLT5kZXNjcy0+cmRlc2NbaSArIDFdLmJ1Zl9hZGRyID0gZCArIFBLVF9CVUZfU0laRTsKLQkJZXAtPmRlc2NzLT5yZGVzY1tpICsgMV0ucmRlc2MxID0gKChpICsgMSkgPDwgMTYpIHwgUEtUX0JVRl9TSVpFOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBUWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKLQkJdm9pZCAqcGFnZTsKKwlmb3IgKGkgPSAwOyBpIDwgVFhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CisJCXZvaWQgKmJ1ZjsKIAkJZG1hX2FkZHJfdCBkOwogCi0JCXBhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JCWlmIChwYWdlID09IE5VTEwpCisJCWJ1ZiA9IGttYWxsb2MoUEtUX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQogCQkJZ290byBlcnI7CiAKLQkJZCA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHBhZ2UsIFBBR0VfU0laRSwgRE1BX1RPX0RFVklDRSk7Ci0JCWlmIChkbWFfbWFwcGluZ19lcnJvcihOVUxMLCBkKSkgewotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBhZ2UpOworCQlkID0gZG1hX21hcF9zaW5nbGUoZGV2LCBidWYsIFBLVF9CVUZfU0laRSwgRE1BX1RPX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGQpKSB7CisJCQlrZnJlZShidWYpOwogCQkJZ290byBlcnI7CiAJCX0KIAotCQllcC0+dHhfYnVmW2ldID0gcGFnZTsKKwkJZXAtPnR4X2J1ZltpXSA9IGJ1ZjsKIAkJZXAtPmRlc2NzLT50ZGVzY1tpXS5idWZfYWRkciA9IGQ7Ci0KLQkJZXAtPnR4X2J1ZltpICsgMV0gPSBwYWdlICsgUEtUX0JVRl9TSVpFOwotCQllcC0+ZGVzY3MtPnRkZXNjW2kgKyAxXS5idWZfYWRkciA9IGQgKyBQS1RfQlVGX1NJWkU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04MjksNiArODI4LDcgQEAKIAl9CiAJZXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWVwLT5kZXYgPSBkZXY7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAluZXRpZl9uYXBpX2FkZChkZXYsICZlcC0+bmFwaSwgZXA5M3h4X3BvbGwsIDY0KTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCAxN2I0ZGQ5Li42NTJiMzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTM4OCw2ICszODgsOCBAQAogCXJldHVybiBuZXh0OwogfQogCisjZGVmaW5lIGJvbmRfcXVldWVfbWFwcGluZyhza2IpICgqKHUxNiAqKSgoc2tiKS0+Y2IpKQorCiAvKioKICAqIGJvbmRfZGV2X3F1ZXVlX3htaXQgLSBQcmVwYXJlIHNrYiBmb3IgeG1pdC4KICAqCkBAIC00MDAsNiArNDAyLDkgQEAKIHsKIAlza2ItPmRldiA9IHNsYXZlX2RldjsKIAlza2ItPnByaW9yaXR5ID0gMTsKKworCXNrYi0+cXVldWVfbWFwcGluZyA9IGJvbmRfcXVldWVfbWFwcGluZyhza2IpOworCiAJaWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhzbGF2ZV9kZXYpKSkKIAkJYm9uZF9uZXRwb2xsX3NlbmRfc2tiKGJvbmRfZ2V0X3NsYXZlX2J5X2Rldihib25kLCBzbGF2ZV9kZXYpLCBza2IpOwogCWVsc2UKQEAgLTQyMDYsNiArNDIxMSw3IEBACiAJcmV0dXJuIHJlczsKIH0KIAorCiBzdGF0aWMgdTE2IGJvbmRfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJLyoKQEAgLTQyMTYsNiArNDIyMiwxMSBAQAogCSAqLwogCXUxNiB0eHEgPSBza2JfcnhfcXVldWVfcmVjb3JkZWQoc2tiKSA/IHNrYl9nZXRfcnhfcXVldWUoc2tiKSA6IDA7CiAKKwkvKgorCSAqIFNhdmUgdGhlIG9yaWdpbmFsIHR4cSB0byByZXN0b3JlIGJlZm9yZSBwYXNzaW5nIHRvIHRoZSBkcml2ZXIKKwkgKi8KKwlib25kX3F1ZXVlX21hcHBpbmcoc2tiKSA9IHNrYi0+cXVldWVfbWFwcGluZzsKKwogCWlmICh1bmxpa2VseSh0eHEgPj0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpKSB7CiAJCWRvIHsKIAkJCXR4cSAtPSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zZXJpYWwuYyBiL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zZXJpYWwuYwppbmRleCA3M2M3ZTAzLi4zZGYwYzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NlcmlhbC5jCkBAIC0xNjcsOCArMTY3LDggQEAKIAogI2VuZGlmCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbGRpc2NfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQljb25zdCB1OCAqZGF0YSwgY2hhciAqZmxhZ3MsIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIGxkaXNjX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdTggKmRhdGEsCisJCQljaGFyICpmbGFncywgaW50IGNvdW50KQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXN0cnVjdCBzZXJfZGV2aWNlICpzZXI7CkBAIC0yMTUsOCArMjE1LDYgQEAKIAl9IGVsc2UKIAkJKytzZXItPmRldi0+c3RhdHMucnhfZHJvcHBlZDsKIAl1cGRhdGVfdHR5X3N0YXR1cyhzZXIpOwotCi0JcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW50IGhhbmRsZV90eChzdHJ1Y3Qgc2VyX2RldmljZSAqc2VyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2ZsZXhjYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9mbGV4Y2FuLmMKaW5kZXggZDQ5OTA1Ni4uMTc2NzgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2ZsZXhjYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vZmxleGNhbi5jCkBAIC05MjMsNyArOTIzLDcgQEAKIAltZW1fc2l6ZSA9IHJlc291cmNlX3NpemUobWVtKTsKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCBtZW1fc2l6ZSwgcGRldi0+bmFtZSkpIHsKIAkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGZhaWxlZF9yZXE7CisJCWdvdG8gZmFpbGVkX2dldDsKIAl9CiAKIAliYXNlID0gaW9yZW1hcChtZW0tPnN0YXJ0LCBtZW1fc2l6ZSk7CkBAIC05NzcsOSArOTc3LDggQEAKIAlpb3VubWFwKGJhc2UpOwogIGZhaWxlZF9tYXA6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIG1lbV9zaXplKTsKLSBmYWlsZWRfcmVxOgotCWNsa19wdXQoY2xrKTsKICBmYWlsZWRfZ2V0OgorCWNsa19wdXQoY2xrKTsKICBmYWlsZWRfY2xvY2s6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3NsY2FuLmMKaW5kZXggNzU2MjJkNS4uMWI0OWRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NsY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NsY2FuLmMKQEAgLTQyNSwxNyArNDI1LDE2IEBACiAgKiBpbiBwYXJhbGxlbAogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2xjYW5fcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKK3N0YXRpYyB2b2lkIHNsY2FuX3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2xjYW4gKnNsID0gKHN0cnVjdCBzbGNhbiAqKSB0dHktPmRpc2NfZGF0YTsKLQlpbnQgYnl0ZXMgPSBjb3VudDsKIAogCWlmICghc2wgfHwgc2wtPm1hZ2ljICE9IFNMQ0FOX01BR0lDIHx8ICFuZXRpZl9ydW5uaW5nKHNsLT5kZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuOwogCiAJLyogUmVhZCB0aGUgY2hhcmFjdGVycyBvdXQgb2YgdGhlIGJ1ZmZlciAqLwotCXdoaWxlIChieXRlcy0tKSB7CisJd2hpbGUgKGNvdW50LS0pIHsKIAkJaWYgKGZwICYmICpmcCsrKSB7CiAJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU0xGX0VSUk9SLCAmc2wtPmZsYWdzKSkKIAkJCQlzbC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKQEAgLTQ0NCw4ICs0NDMsNiBAQAogCQl9CiAJCXNsY2FuX3VuZXNjKHNsLCAqY3ArKyk7CiAJfQotCi0JcmV0dXJuIGNvdW50OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCmluZGV4IDI5YTRmMDYuLmRjYzRhMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCkBAIC0xNzgxLDggKzE3ODEsOCBAQAogCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGVtYWNfcHJpdikpOwogCWlmICghbmRldikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciBhbGxvY2F0aW5nIG5ldF9kZXZpY2VcbiIpOwotCQljbGtfcHV0KGVtYWNfY2xrKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2NsazsKIAl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKQEAgLTE3OTYsNyArMTc5Niw4IEBACiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIHByb2JlX3F1aXQ7CiAJfQogCiAJLyogTUFDIGFkZHIgYW5kIFBIWSBtYXNrICwgUk1JSSBlbmFibGUgaW5mbyBmcm9tIHBsYXRmb3JtX2RhdGEgKi8KQEAgLTE5MjksOCArMTkzMCw5IEBACiAJaW91bm1hcChwcml2LT5yZW1hcF9hZGRyKTsKIAogcHJvYmVfcXVpdDoKLQljbGtfcHV0KGVtYWNfY2xrKTsKIAlmcmVlX25ldGRldihuZGV2KTsKK2ZyZWVfY2xrOgorCWNsa19wdXQoZW1hY19jbGspOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggMTc2NTQwNS4uOGIwMDg0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC0zMzEsMTggKzMzMSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICJERTQyMiIsXAogICAgICAgICAgICAgICAgICAgICAgICAgICIifQogCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZGVwY2Ffc2lnbmF0dXJlW10gX19kZXZpbml0Y29uc3QgPSBERVBDQV9TSUdOQVRVUkU7CitzdGF0aWMgY2hhciogX19pbml0ZGF0YSBkZXBjYV9zaWduYXR1cmVbXSA9IERFUENBX1NJR05BVFVSRTsKIAogZW51bSBkZXBjYV90eXBlIHsKIAlERVBDQSwgZGUxMDAsIGRlMTAxLCBkZTIwMCwgZGUyMDEsIGRlMjAyLCBkZTIxMCwgZGUyMTIsIGRlNDIyLCB1bmtub3duCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciBkZXBjYV9zdHJpbmdbXSA9ICJkZXBjYSI7CitzdGF0aWMgY2hhciBkZXBjYV9zdHJpbmdbXSA9ICJkZXBjYSI7CiAKIHN0YXRpYyBpbnQgZGVwY2FfZGV2aWNlX3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgY29uc3Qgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGRlcGNhX2Vpc2FfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGRlcGNhX2Vpc2FfaWRzW10gPSB7CiAJeyAiREVDNDIyMCIsIGRlNDIyIH0sCiAJeyAiIiB9CiB9OwpAQCAtMzY3LDE5ICszNjcsMTkgQEAKICNkZWZpbmUgREUyMTBfSUQgMHg2MjhkCiAjZGVmaW5lIERFMjEyX0lEIDB4NmRlZgogCi1zdGF0aWMgY29uc3Qgc2hvcnQgZGVwY2FfbWNhX2FkYXB0ZXJfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgc2hvcnQgZGVwY2FfbWNhX2FkYXB0ZXJfaWRzW10gPSB7CiAJREUyMTBfSUQsCiAJREUyMTJfSUQsCiAJMHgwMDAwCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqZGVwY2FfbWNhX2FkYXB0ZXJfbmFtZVtdID0geworc3RhdGljIGNoYXIgKmRlcGNhX21jYV9hZGFwdGVyX25hbWVbXSA9IHsKIAkiREVDIEV0aGVyV09SS1MgTUMgQWRhcHRlciAoREUyMTApIiwKIAkiREVDIEV0aGVyV09SS1MgTUMgQWRhcHRlciAoREUyMTIpIiwKIAlOVUxMCiB9OwogCi1zdGF0aWMgY29uc3QgZW51bSBkZXBjYV90eXBlIGRlcGNhX21jYV9hZGFwdGVyX3R5cGVbXSA9IHsKK3N0YXRpYyBlbnVtIGRlcGNhX3R5cGUgZGVwY2FfbWNhX2FkYXB0ZXJfdHlwZVtdID0gewogCWRlMjEwLAogCWRlMjEyLAogCTAKQEAgLTU0MSw5ICs1NDEsMTAgQEAKIHN0YXRpYyBpbnQgbG9hZF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgdm9pZCBkZXBjYV9kYmdfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotc3RhdGljIGNvbnN0IHVfY2hhciBkZTF4eF9pcnFbXSBfX2RldmluaXRjb25zdCA9IHsgMiwgMywgNCwgNSwgNywgOSwgMCB9Owotc3RhdGljIGNvbnN0IHVfY2hhciBkZTJ4eF9pcnFbXSBfX2RldmluaXRjb25zdCA9IHsgNSwgOSwgMTAsIDExLCAxNSwgMCB9Owotc3RhdGljIGNvbnN0IHVfY2hhciBkZTQyMl9pcnFbXSBfX2RldmluaXRjb25zdCA9IHsgNSwgOSwgMTAsIDExLCAwIH07CitzdGF0aWMgdV9jaGFyIGRlMXh4X2lycVtdIF9faW5pdGRhdGEgPSB7IDIsIDMsIDQsIDUsIDcsIDksIDAgfTsKK3N0YXRpYyB1X2NoYXIgZGUyeHhfaXJxW10gX19pbml0ZGF0YSA9IHsgNSwgOSwgMTAsIDExLCAxNSwgMCB9Oworc3RhdGljIHVfY2hhciBkZTQyMl9pcnFbXSBfX2luaXRkYXRhID0geyA1LCA5LCAxMCwgMTEsIDAgfTsKK3N0YXRpYyB1X2NoYXIgKmRlcGNhX2lycTsKIAogc3RhdGljIGludCBpcnE7CiBzdGF0aWMgaW50IGlvOwpAQCAtNTc5LDcgKzU4MCw3IEBACiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkZXBjYV9od19pbml0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBkZXBjYV9od19pbml0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRlcGNhX3ByaXZhdGUgKmxwOwogCWludCBpLCBqLCBvZmZzZXQsIG5ldFJBTSwgbWVtX2xlbiwgc3RhdHVzID0gMDsKQEAgLTc0Nyw3ICs3NDgsNiBAQAogCWlmIChkZXYtPmlycSA8IDIpIHsKIAkJdW5zaWduZWQgY2hhciBpcnFudW07CiAJCXVuc2lnbmVkIGxvbmcgaXJxX21hc2ssIGRlbGF5OwotCQljb25zdCB1X2NoYXIgKmRlcGNhX2lycTsKIAogCQlpcnFfbWFzayA9IHByb2JlX2lycV9vbigpOwogCkBAIC03NzAsNyArNzcwLDYgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkZXBjYV9pcnEgPSBOVUxMOwogCQkJYnJlYWs7CS8qIE5vdCByZWFjaGVkICovCiAJCX0KIApAQCAtMTMwMyw3ICsxMzAyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGRlcGNhX2NvbW1vbl9pbml0ICh1X2xvbmcgaW9hZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqKmRldnApCitzdGF0aWMgaW50IF9faW5pdCBkZXBjYV9jb21tb25faW5pdCAodV9sb25nIGlvYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKipkZXZwKQogewogCWludCBzdGF0dXMgPSAwOwogCkBAIC0xMzM0LDcgKzEzMzMsNyBAQAogLyoKICoqIE1pY3JvY2hhbm5lbCBidXMgSS9PIGRldmljZSBwcm9iZQogKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IGRlcGNhX21jYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBkZXBjYV9tY2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCXVuc2lnbmVkIGNoYXIgcG9zWzJdOwogCXVuc2lnbmVkIGNoYXIgd2hlcmU7CkBAIC0xNDU4LDcgKzE0NTcsNyBAQAogKiogSVNBIGJ1cyBJL08gZGV2aWNlIHByb2JlCiAqLwogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgZGVwY2FfcGxhdGZvcm1fcHJvYmUgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgZGVwY2FfcGxhdGZvcm1fcHJvYmUgKHZvaWQpCiB7CiAJaW50IGk7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxkZXY7CkBAIC0xNDk4LDcgKzE0OTcsNyBAQAogCX0KIH0KIAotc3RhdGljIGVudW0gZGVwY2FfdHlwZSBfX2RldmluaXQgZGVwY2Ffc2htZW1fcHJvYmUgKHVsb25nICptZW1fc3RhcnQpCitzdGF0aWMgZW51bSBkZXBjYV90eXBlIF9faW5pdCBkZXBjYV9zaG1lbV9wcm9iZSAodWxvbmcgKm1lbV9zdGFydCkKIHsKIAl1X2xvbmcgbWVtX2Jhc2VbXSA9IERFUENBX1JBTV9CQVNFX0FERFJFU1NFUzsKIAllbnVtIGRlcGNhX3R5cGUgYWRhcHRlciA9IHVua25vd247CkBAIC0xNTU5LDcgKzE1NTgsNyBAQAogKi8KIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkZXBjYV9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBkZXBjYV9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJZW51bSBkZXBjYV90eXBlIGFkYXB0ZXIgPSB1bmtub3duOwogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldjsKQEAgLTE2MzAsNyArMTYyOSw3IEBACiAqKiBhbmQgQm9vdCAocmVhZGIpIFJPTS4gVGhpcyB3aWxsIGFsc28gZ2l2ZSB1cyBhIGNsdWUgdG8gdGhlIG5ldHdvcmsgUkFNCiAqKiBiYXNlIGFkZHJlc3MuCiAqLwotc3RhdGljIGludCBfX2RldmluaXQgRGVwY2FTaWduYXR1cmUoY2hhciAqbmFtZSwgdV9sb25nIGJhc2VfYWRkcikKK3N0YXRpYyBpbnQgX19pbml0IERlcGNhU2lnbmF0dXJlKGNoYXIgKm5hbWUsIHVfbG9uZyBiYXNlX2FkZHIpCiB7CiAJdV9pbnQgaSwgaiwgazsKIAl2b2lkIF9faW9tZW0gKnB0cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RsMmsuYyBiL2RyaXZlcnMvbmV0L2RsMmsuYwppbmRleCBjNDQ1NDU3Li4yMzE3OWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbDJrLmMKKysrIGIvZHJpdmVycy9uZXQvZGwyay5jCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlpZiAobnAtPnBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0RMSU5LKSB7CS8qIEQtTGluayBPbmx5ICovCiAJCS8qIENoZWNrIENSQyAqLwogCQljcmMgPSB+ZXRoZXJfY3JjX2xlICgyNTYgLSA0LCBzcm9tZGF0YSk7Ci0JCWlmIChwc3JvbS0+Y3JjICE9IGNyYykgeworCQlpZiAocHNyb20tPmNyYyAhPSBjcHVfdG9fbGUzMihjcmMpKSB7CiAJCQlwcmludGsgKEtFUk5fRVJSICIlczogRUVQUk9NIGRhdGEgQ1JDIGVycm9yLlxuIiwKIAkJCQkJZGV2LT5uYW1lKTsKIAkJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKaW5kZXggZmJhZmYzNS4uZWU1OTdlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKQEAgLTExNTcsOSArMTE1Nyw2IEBACiAKIAlpcnFmbGFncyB8PSBJUlFGX1NIQVJFRDsKIAotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgZG05MDAwX2ludGVycnVwdCwgaXJxZmxhZ3MsIGRldi0+bmFtZSwgZGV2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KIAkvKiBHUElPMCBvbiBwcmUtYWN0aXZhdGUgUEhZLCBSZWcgMUYgaXMgbm90IHNldCBieSByZXNldCAqLwogCWlvdyhkYiwgRE05MDAwX0dQUiwgMCk7CS8qIFJFR18xRiBiaXQwIGFjdGl2YXRlIHBoeXhjZXIgKi8KIAltZGVsYXkoMSk7IC8qIGRlbGF5IG5lZWRzIGJ5IERNOTAwMEIgKi8KQEAgLTExNjgsNiArMTE2NSw5IEBACiAJZG05MDAwX3Jlc2V0KGRiKTsKIAlkbTkwMDBfaW5pdF9kbTkwMDAoZGV2KTsKIAorCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgZG05MDAwX2ludGVycnVwdCwgaXJxZmxhZ3MsIGRldi0+bmFtZSwgZGV2KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKIAkvKiBJbml0IGRyaXZlciB2YXJpYWJsZSAqLwogCWRiLT5kYnVnX2NudCA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCBmZjYwYjIzLi4yZGZjYzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhCiAgKiBNb2RpZmllcjogU2FuZGVlcCBHb3BhbHBldCA8c2FuZGVlcC5rdW1hckBmcmVlc2NhbGUuY29tPgogICoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDAyLTIwMDksIDIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqIENvcHlyaWdodCAyMDA3IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTQ3Niw5ICs0NzYsNiBAQAogI2VuZGlmCiB9OwogCi11bnNpZ25lZCBpbnQgZnRwX3JxZnByW01BWF9GSUxFUl9JRFggKyAxXTsKLXVuc2lnbmVkIGludCBmdHBfcnFmY3JbTUFYX0ZJTEVSX0lEWCArIDFdOwotCiB2b2lkIGxvY2tfcnhfcXMoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdikKIHsKIAlpbnQgaSA9IDB4MDsKQEAgLTg2OCwyOCArODY1LDI4IEBACiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ0xFIHwgUlFGQ1JfUElEX01BU0sgfCBSUUZDUl9DTVBfRVhBQ1Q7Ci0JZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwotCWZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKKwlwcml2LT5mdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CisJcHJpdi0+ZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ01QX05PTUFUQ0g7Ci0JZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwotCWZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKKwlwcml2LT5mdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CisJcHJpdi0+ZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ01QX0VYQUNUIHwgUlFGQ1JfUElEX1BBUlNFIHwgUlFGQ1JfQ0xFIHwgUlFGQ1JfQU5EOwogCXJxZnByID0gY2xhc3M7Ci0JZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwotCWZ0cF9ycWZwcltycWZhcl0gPSBycWZwcjsKKwlwcml2LT5mdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7CisJcHJpdi0+ZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ01QX0VYQUNUIHwgUlFGQ1JfUElEX01BU0sgfCBSUUZDUl9BTkQ7CiAJcnFmcHIgPSBjbGFzczsKLQlmdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7Ci0JZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOworCXByaXYtPmZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKKwlwcml2LT5mdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CiAJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBycWZhciwgcnFmY3IsIHJxZnByKTsKIAogCXJldHVybiBycWZhcjsKQEAgLTkwNCw4ICs5MDEsOCBAQAogCiAJLyogRGVmYXVsdCBydWxlICovCiAJcnFmY3IgPSBSUUZDUl9DTVBfTUFUQ0g7Ci0JZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwotCWZ0cF9ycWZwcltycWZhcl0gPSBycWZwcjsKKwlwcml2LT5mdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7CisJcHJpdi0+ZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhciA9IGNsdXN0ZXJfZW50cnlfcGVyX2NsYXNzKHByaXYsIHJxZmFyLCBSUUZQUl9JUFY2KTsKQEAgLTkyMSw4ICs5MTgsOCBAQAogCS8qIFJlc3QgYXJlIG1hc2tlZCBydWxlcyAqLwogCXJxZmNyID0gUlFGQ1JfQ01QX05PTUFUQ0g7CiAJZm9yIChpID0gMDsgaSA8IHJxZmFyOyBpKyspIHsKLQkJZnRwX3JxZmNyW2ldID0gcnFmY3I7Ci0JCWZ0cF9ycWZwcltpXSA9IHJxZnByOworCQlwcml2LT5mdHBfcnFmY3JbaV0gPSBycWZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW2ldID0gcnFmcHI7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgaSwgcnFmY3IsIHJxZnByKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggZmM4NmY1MS4uYmEzNmRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtOSw3ICs5LDcgQEAKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEKICAqIE1vZGlmaWVyOiBTYW5kZWVwIEdvcGFscGV0IDxzYW5kZWVwLmt1bWFyQGZyZWVzY2FsZS5jb20+CiAgKgotICogQ29weXJpZ2h0IDIwMDItMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMDItMjAwOSwgMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0xMTA3LDEwICsxMTA3LDEyIEBACiAJLyogSFcgdGltZSBzdGFtcGluZyBlbmFibGVkIGZsYWcgKi8KIAlpbnQgaHd0c19yeF9lbjsKIAlpbnQgaHd0c190eF9lbjsKKworCS8qRmlsZXIgdGFibGUqLworCXVuc2lnbmVkIGludCBmdHBfcnFmcHJbTUFYX0ZJTEVSX0lEWCArIDFdOworCXVuc2lnbmVkIGludCBmdHBfcnFmY3JbTUFYX0ZJTEVSX0lEWCArIDFdOwogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBmdHBfcnFmcHJbTUFYX0ZJTEVSX0lEWCArIDFdOwotZXh0ZXJuIHVuc2lnbmVkIGludCBmdHBfcnFmY3JbTUFYX0ZJTEVSX0lEWCArIDFdOwogCiBzdGF0aWMgaW5saW5lIGludCBnZmFyX2hhc19lcnJhdGEoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiwKIAkJCQkgIGVudW0gZ2Zhcl9lcnJhdGEgZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwppbmRleCA0OTNkNzQzLi4yMzllMzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwpAQCAtOSw3ICs5LDcgQEAKICAqICBNYWludGFpbmVyOiBLdW1hciBHYWxhCiAgKiAgTW9kaWZpZXI6IFNhbmRlZXAgR29wYWxwZXQgPHNhbmRlZXAua3VtYXJAZnJlZXNjYWxlLmNvbT4KICAqCi0gKiAgQ29weXJpZ2h0IDIwMDMtMjAwNiwgMjAwOC0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiAgQ29weXJpZ2h0IDIwMDMtMjAwNiwgMjAwOC0yMDA5LCAyMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0bwogICogIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIsIGluY29ycG9yYXRlZCBoZXJlaW4KQEAgLTYwOSwxNSArNjA5LDE1IEBACiAJaWYgKGV0aGZsb3cgJiBSWEhfTDJEQSkgewogCQlmY3IgPSBSUUZDUl9QSURfREFIIHxSUUZDUl9DTVBfTk9NQVRDSCB8CiAJCQlSUUZDUl9IQVNIIHwgUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAKIAkJZmNyID0gUlFGQ1JfUElEX0RBTCB8IFJRRkNSX0FORCB8IFJRRkNSX0NNUF9OT01BVENIIHwKIAkJCQlSUUZDUl9IQVNIIHwgUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQpAQCAtNjI2LDE2ICs2MjYsMTYgQEAKIAkJZmNyID0gUlFGQ1JfUElEX1ZJRCB8IFJRRkNSX0NNUF9OT01BVENIIHwgUlFGQ1JfSEFTSCB8CiAJCQkJUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHByaXYtPmN1cl9maWxlcl9pZHgsIGZjciwgZnByKTsKLQkJZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOwotCQlmdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CisJCXByaXYtPmZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKKwkJcHJpdi0+ZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQogCiAJaWYgKGV0aGZsb3cgJiBSWEhfSVBfU1JDKSB7CiAJCWZjciA9IFJRRkNSX1BJRF9TSUEgfCBSUUZDUl9DTVBfTk9NQVRDSCB8IFJRRkNSX0hBU0ggfAogCQkJUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQpAQCAtNjQzLDggKzY0Myw4IEBACiAJaWYgKGV0aGZsb3cgJiAoUlhIX0lQX0RTVCkpIHsKIAkJZmNyID0gUlFGQ1JfUElEX0RJQSB8IFJRRkNSX0NNUF9OT01BVENIIHwgUlFGQ1JfSEFTSCB8CiAJCQlSUUZDUl9BTkQgfCBSUUZDUl9IQVNIVEJMXzA7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKLQkJZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOworCQlwcml2LT5mdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKIAkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBwcml2LT5jdXJfZmlsZXJfaWR4LCBmY3IsIGZwcik7CiAJCXByaXYtPmN1cl9maWxlcl9pZHggPSBwcml2LT5jdXJfZmlsZXJfaWR4IC0gMTsKIAl9CkBAIC02NTIsOCArNjUyLDggQEAKIAlpZiAoZXRoZmxvdyAmIFJYSF9MM19QUk9UTykgewogCQlmY3IgPSBSUUZDUl9QSURfTDRQIHwgUlFGQ1JfQ01QX05PTUFUQ0ggfCBSUUZDUl9IQVNIIHwKIAkJCVJRRkNSX0FORCB8IFJRRkNSX0hBU0hUQkxfMDsKLQkJZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOwotCQlmdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CisJCXByaXYtPmZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKKwkJcHJpdi0+ZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOwogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHByaXYtPmN1cl9maWxlcl9pZHgsIGZjciwgZnByKTsKIAkJcHJpdi0+Y3VyX2ZpbGVyX2lkeCA9IHByaXYtPmN1cl9maWxlcl9pZHggLSAxOwogCX0KQEAgLTY2MSw4ICs2NjEsOCBAQAogCWlmIChldGhmbG93ICYgUlhIX0w0X0JfMF8xKSB7CiAJCWZjciA9IFJRRkNSX1BJRF9TUFQgfCBSUUZDUl9DTVBfTk9NQVRDSCB8IFJRRkNSX0hBU0ggfAogCQkJUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQpAQCAtNjcwLDggKzY3MCw4IEBACiAJaWYgKGV0aGZsb3cgJiBSWEhfTDRfQl8yXzMpIHsKIAkJZmNyID0gUlFGQ1JfUElEX0RQVCB8IFJRRkNSX0NNUF9OT01BVENIIHwgUlFGQ1JfSEFTSCB8CiAJCQlSUUZDUl9BTkQgfCBSUUZDUl9IQVNIVEJMXzA7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKLQkJZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOworCQlwcml2LT5mdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKIAkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBwcml2LT5jdXJfZmlsZXJfaWR4LCBmY3IsIGZwcik7CiAJCXByaXYtPmN1cl9maWxlcl9pZHggPSBwcml2LT5jdXJfZmlsZXJfaWR4IC0gMTsKIAl9CkBAIC03MDUsMTIgKzcwNSwxMiBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRklMRVJfSURYICsgMTsgaSsrKSB7Ci0JCWxvY2FsX3JxZnByW2pdID0gZnRwX3JxZnByW2ldOwotCQlsb2NhbF9ycWZjcltqXSA9IGZ0cF9ycWZjcltpXTsKKwkJbG9jYWxfcnFmcHJbal0gPSBwcml2LT5mdHBfcnFmcHJbaV07CisJCWxvY2FsX3JxZmNyW2pdID0gcHJpdi0+ZnRwX3JxZmNyW2ldOwogCQlqLS07Ci0JCWlmICgoZnRwX3JxZmNyW2ldID09IChSUUZDUl9QSURfUEFSU0UgfAorCQlpZiAoKHByaXYtPmZ0cF9ycWZjcltpXSA9PSAoUlFGQ1JfUElEX1BBUlNFIHwKIAkJCVJRRkNSX0NMRSB8UlFGQ1JfQU5EKSkgJiYKLQkJCShmdHBfcnFmcHJbaV0gPT0gY21wX3JxZnByKSkKKwkJCShwcml2LT5mdHBfcnFmcHJbaV0gPT0gY21wX3JxZnByKSkKIAkJCWJyZWFrOwogCX0KIApAQCAtNzI0LDIwICs3MjQsMjIgQEAKIAkgKiBpZiBpdCB3YXMgYWxyZWFkeSBwcm9ncmFtbWVkLCB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGVzZSBydWxlcwogCSAqLwogCWZvciAobCA9IGkrMTsgbCA8IE1BWF9GSUxFUl9JRFg7IGwrKykgewotCQlpZiAoKGZ0cF9ycWZjcltsXSAmIFJRRkNSX0NMRSkgJiYKLQkJCSEoZnRwX3JxZmNyW2xdICYgUlFGQ1JfQU5EKSkgewotCQkJZnRwX3JxZmNyW2xdID0gUlFGQ1JfQ0xFIHwgUlFGQ1JfQ01QX0VYQUNUIHwKKwkJaWYgKChwcml2LT5mdHBfcnFmY3JbbF0gJiBSUUZDUl9DTEUpICYmCisJCQkhKHByaXYtPmZ0cF9ycWZjcltsXSAmIFJRRkNSX0FORCkpIHsKKwkJCXByaXYtPmZ0cF9ycWZjcltsXSA9IFJRRkNSX0NMRSB8IFJRRkNSX0NNUF9FWEFDVCB8CiAJCQkJUlFGQ1JfSEFTSFRCTF8wIHwgUlFGQ1JfUElEX01BU0s7Ci0JCQlmdHBfcnFmcHJbbF0gPSBGUFJfRklMRVJfTUFTSzsKLQkJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgbCwgZnRwX3JxZmNyW2xdLCBmdHBfcnFmcHJbbF0pOworCQkJcHJpdi0+ZnRwX3JxZnByW2xdID0gRlBSX0ZJTEVSX01BU0s7CisJCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIGwsIHByaXYtPmZ0cF9ycWZjcltsXSwKKwkJCQlwcml2LT5mdHBfcnFmcHJbbF0pOwogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoIShmdHBfcnFmY3JbbF0gJiBSUUZDUl9DTEUpICYmIChmdHBfcnFmY3JbbF0gJiBSUUZDUl9BTkQpKQorCQlpZiAoIShwcml2LT5mdHBfcnFmY3JbbF0gJiBSUUZDUl9DTEUpICYmCisJCQkocHJpdi0+ZnRwX3JxZmNyW2xdICYgUlFGQ1JfQU5EKSkKIAkJCWNvbnRpbnVlOwogCQllbHNlIHsKLQkJCWxvY2FsX3JxZnByW2pdID0gZnRwX3JxZnByW2xdOwotCQkJbG9jYWxfcnFmY3Jbal0gPSBmdHBfcnFmY3JbbF07CisJCQlsb2NhbF9ycWZwcltqXSA9IHByaXYtPmZ0cF9ycWZwcltsXTsKKwkJCWxvY2FsX3JxZmNyW2pdID0gcHJpdi0+ZnRwX3JxZmNyW2xdOwogCQkJai0tOwogCQl9CiAJfQpAQCAtNzUwLDggKzc1Miw4IEBACiAKIAkvKiBXcml0ZSBiYWNrIHRoZSBwb3BwZWQgb3V0IHJ1bGVzIGFnYWluICovCiAJZm9yIChrID0gaisxOyBrIDwgTUFYX0ZJTEVSX0lEWDsgaysrKSB7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGxvY2FsX3JxZnByW2tdOwotCQlmdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBsb2NhbF9ycWZjcltrXTsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gbG9jYWxfcnFmcHJba107CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGxvY2FsX3JxZmNyW2tdOwogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHByaXYtPmN1cl9maWxlcl9pZHgsCiAJCQkJbG9jYWxfcnFmY3Jba10sIGxvY2FsX3JxZnByW2tdKTsKIAkJaWYgKCFwcml2LT5jdXJfZmlsZXJfaWR4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKaW5kZXggOTkyMDg5Ni4uM2U1ZDBiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCkBAIC00NTYsNyArNDU2LDcgQEAKICAqIGEgYmxvY2sgb2YgNnBhY2sgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCwgd2hpY2ggY2FuIG5vdyBiZSBkZWNhcHN1bGF0ZWQKICAqIGFuZCBzZW50IG9uIHRvIHNvbWUgSVAgbGF5ZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzaXhwYWNrX3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCitzdGF0aWMgdm9pZCBzaXhwYWNrX3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHNpeHBhY2sgKnNwOwpAQCAtNDY0LDExICs0NjQsMTEgQEAKIAlpbnQgY291bnQxOwogCiAJaWYgKCFjb3VudCkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCXNwID0gc3BfZ2V0KHR0eSk7CiAJaWYgKCFzcCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybjsKIAogCW1lbWNweShidWYsIGNwLCBjb3VudCA8IHNpemVvZihidWYpID8gY291bnQgOiBzaXplb2YoYnVmKSk7CiAKQEAgLTQ4Nyw4ICs0ODcsNiBAQAogCiAJc3BfcHV0KHNwKTsKIAl0dHlfdW50aHJvdHRsZSh0dHkpOwotCi0JcmV0dXJuIGNvdW50MTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCmluZGV4IDBlNGYyMzUuLjRjNjI4MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwpAQCAtOTIzLDE0ICs5MjMsMTMgQEAKICAqIGEgYmxvY2sgb2YgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCwgd2hpY2ggY2FuIG5vdyBiZSBkZWNhcHN1bGF0ZWQKICAqIGFuZCBzZW50IG9uIHRvIHRoZSBBWC4yNSBsYXllciBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG1raXNzX3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgbWtpc3NfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCisJY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgbWtpc3MgKmF4ID0gbWtpc3NfZ2V0KHR0eSk7Ci0JaW50IGJ5dGVzID0gY291bnQ7CiAKIAlpZiAoIWF4KQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuOwogCiAJLyoKIAkgKiBBcmdoISBtdHUgY2hhbmdlIHRpbWUhIC0gY29zdHMgdXMgdGhlIHBhY2tldCBwYXJ0IHJlY2VpdmVkCkBAIC05NDAsNyArOTM5LDcgQEAKIAkJYXhfY2hhbmdlZG10dShheCk7CiAKIAkvKiBSZWFkIHRoZSBjaGFyYWN0ZXJzIG91dCBvZiB0aGUgYnVmZmVyICovCi0Jd2hpbGUgKGJ5dGVzLS0pIHsKKwl3aGlsZSAoY291bnQtLSkgewogCQlpZiAoZnAgIT0gTlVMTCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEFYRl9FUlJPUiwgJmF4LT5mbGFncykpCiAJCQkJYXgtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CkBAIC05NTMsOCArOTUyLDYgQEAKIAogCW1raXNzX3B1dChheCk7CiAJdHR5X3VudGhyb3R0bGUodHR5KTsKLQotCXJldHVybiBjb3VudDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwMTAwLmMgYi9kcml2ZXJzL25ldC9ocDEwMC5jCmluZGV4IGM1MmExZGYuLjhlMTBkMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvaHAxMDAuYwpAQCAtMTg4LDE0ICsxODgsMTQgQEAKICAqICB2YXJpYWJsZXMKICAqLwogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBocDEwMF9pc2FfdGJsW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgY29uc3QgY2hhciAqaHAxMDBfaXNhX3RibFtdID0gewogCSJIV1BGMTUwIiwgLyogSFAgSjI1NzMgcmV2IEEgKi8KIAkiSFdQMTk1MCIsIC8qIEhQIEoyNTczICovCiB9OwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGNvbnN0IHN0cnVjdCBlaXNhX2RldmljZV9pZCBocDEwMF9laXNhX3RibFtdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIHN0cnVjdCBlaXNhX2RldmljZV9pZCBocDEwMF9laXNhX3RibFtdID0gewogCXsgIkhXUEYxODAiIH0sIC8qIEhQIEoyNTc3IHJldiBBICovCiAJeyAiSFdQMTkyMCIgfSwgLyogSFAgMjcyNDhCICovCiAJeyAiSFdQMTk0MCIgfSwgLyogSFAgSjI1NzcgKi8KQEAgLTMzNiw3ICszMzYsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0lTQQotc3RhdGljIF9fZGV2aW5pdCBpbnQgaHAxMDBfaXNhX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyKQorc3RhdGljIF9faW5pdCBpbnQgaHAxMDBfaXNhX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyKQogewogCWNvbnN0IGNoYXIgKnNpZzsKIAlpbnQgaTsKQEAgLTM3Miw3ICszNzIsNyBAQAogICogRUlTQSBhbmQgUENJIGFyZSBoYW5kbGVkIGJ5IGRldmljZSBpbmZyYXN0cnVjdHVyZS4KICAqLwogCi1zdGF0aWMgaW50ICBfX2RldmluaXQgaHAxMDBfaXNhX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhZGRyKQorc3RhdGljIGludCAgX19pbml0IGhwMTAwX2lzYV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYWRkcikKIHsKIAlpbnQgZXJyID0gLUVOT0RFVjsKIApAQCAtMzk2LDcgKzM5Niw3IEBACiAjZW5kaWYgLyogQ09ORklHX0lTQSAqLwogCiAjaWYgIWRlZmluZWQoTU9EVUxFKSAmJiBkZWZpbmVkKENPTkZJR19JU0EpCi1zdHJ1Y3QgbmV0X2RldmljZSAqIF9fZGV2aW5pdCBocDEwMF9wcm9iZShpbnQgdW5pdCkKK3N0cnVjdCBuZXRfZGV2aWNlICogX19pbml0IGhwMTAwX3Byb2JlKGludCB1bml0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGhwMTAwX3ByaXZhdGUpKTsKIAlpbnQgZXJyOwpAQCAtMjg0Myw3ICsyODQzLDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBocDEwMF9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpnZW5kZXYpCitzdGF0aWMgaW50IF9faW5pdCBocDEwMF9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpnZW5kZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgaHAxMDBfcHJpdmF0ZSkpOwogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldiA9IHRvX2Vpc2FfZGV2aWNlKGdlbmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1sYW5hLmMgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKaW5kZXggMTM2ZDc1NC4uYTdkNmNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jCisrKyBiL2RyaXZlcnMvbmV0L2libWxhbmEuYwpAQCAtODk1LDEyICs4OTUsMTIgQEAKIHN0YXRpYyBpbnQgaWJtbGFuYV9pbzsKIHN0YXRpYyBpbnQgc3RhcnRzbG90OwkJLyogY291bnRzIHRocm91Z2ggc2xvdHMgd2hlbiBwcm9iaW5nIG11bHRpcGxlIGRldmljZXMgKi8KIAotc3RhdGljIGNvbnN0IHNob3J0IGlibWxhbmFfYWRhcHRlcl9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBzaG9ydCBpYm1sYW5hX2FkYXB0ZXJfaWRzW10gX19pbml0ZGF0YSA9IHsKIAlJQk1fTEFOQV9JRCwKIAkweDAwMDAKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpYm1sYW5hX2FkYXB0ZXJfbmFtZXNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBjaGFyICppYm1sYW5hX2FkYXB0ZXJfbmFtZXNbXSBfX2RldmluaXRkYXRhID0gewogCSJJQk0gTEFOIEFkYXB0ZXIvQSIsCiAJTlVMTAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKaW5kZXggMThmY2NmOS4uMmMyODYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKQEAgLTIzNzMsNiArMjM3Myw5IEBACiAJfQogI2VuZGlmIC8qIENPTkZJR19QQ0lfSU9WICovCiAJYWRhcHRlci0+cnNzX3F1ZXVlcyA9IG1pbl90KHUzMiwgSUdCX01BWF9SWF9RVUVVRVMsIG51bV9vbmxpbmVfY3B1cygpKTsKKwkvKiBpMzUwIGNhbm5vdCBkbyBSU1MgYW5kIFNSLUlPViBhdCB0aGUgc2FtZSB0aW1lICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9pMzUwICYmIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCWFkYXB0ZXItPnJzc19xdWV1ZXMgPSAxOwogCiAJLyoKIAkgKiBpZiByc3NfcXVldWVzID4gNCBvciB2ZnMgYXJlIGdvaW5nIHRvIGJlIGFsbG9jYXRlZCB3aXRoIHJzc19xdWV1ZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJ0dHktc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5jCmluZGV4IDAzNTg2MWQuLjMzNTJiMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJ0dHktc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcnR0eS1zaXIuYwpAQCAtMjE2LDIzICsyMTYsMjMgQEAKICAqIHVzYnNlcmlhbDoJdXJiLWNvbXBsZXRlLWludGVycnVwdCAvIHNvZnRpbnQKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlydHR5X3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgaXJ0dHlfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCisJCQkgICAgICBjaGFyICpmcCwgaW50IGNvdW50KSAKIHsKIAlzdHJ1Y3Qgc2lyX2RldiAqZGV2OwogCXN0cnVjdCBzaXJ0dHlfY2IgKnByaXYgPSB0dHktPmRpc2NfZGF0YTsKIAlpbnQJaTsKIAotCUlSREFfQVNTRVJUKHByaXYgIT0gTlVMTCwgcmV0dXJuIC1FTk9ERVY7KTsKLQlJUkRBX0FTU0VSVChwcml2LT5tYWdpYyA9PSBJUlRUWV9NQUdJQywgcmV0dXJuIC1FSU5WQUw7KTsKKwlJUkRBX0FTU0VSVChwcml2ICE9IE5VTEwsIHJldHVybjspOworCUlSREFfQVNTRVJUKHByaXYtPm1hZ2ljID09IElSVFRZX01BR0lDLCByZXR1cm47KTsKIAogCWlmICh1bmxpa2VseShjb3VudD09MCkpCQkvKiB5ZXMsIHRoaXMgaGFwcGVucyAqLwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJZGV2ID0gcHJpdi0+ZGV2OwogCWlmICghZGV2KSB7CiAJCUlSREFfV0FSTklORygiJXMoKSwgbm90IHJlYWR5IHlldCFcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybjsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewpAQCAtMjQyLDEzICsyNDIsMTEgQEAKICAJCWlmIChmcCAmJiAqZnArKykgeyAKIAkJCUlSREFfREVCVUcoMCwgIkZyYW1pbmcgb3IgcGFyaXR5IGVycm9yIVxuIik7CiAJCQlzaXJkZXZfcmVjZWl2ZShkZXYsIE5VTEwsIDApOwkvKiBub3RpZnkgc2lyX2RldiAodXBkYXRpbmcgc3RhdHMpICovCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybjsKICAJCX0KIAl9CiAKIAlzaXJkZXZfcmVjZWl2ZShkZXYsIGNwLCBjb3VudCk7Ci0KLQlyZXR1cm4gY291bnQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCmluZGV4IDY5YjU3MDcuLjg4MDBlMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCkBAIC0yMjIsMTkgKzIyMiwxOSBAQAogc3RhdGljIHZvaWQgc21zY19pcmNjX3Npcl93YWl0X2h3X3RyYW5zbWl0dGVyX2ZpbmlzaChzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmKTsKIAogLyogUHJvYmluZyAqLwotc3RhdGljIGludCBzbXNjX2lyY2NfbG9va19mb3JfY2hpcHModm9pZCk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqIHNtc2NfaXJjY19wcm9iZSh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgdTggcmVnLCBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICpjaGlwLCBjaGFyICp0eXBlKTsKLXN0YXRpYyBpbnQgc21zY19zdXBlcmlvX2ZsYXQoY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcHMsIHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCBjaGFyICp0eXBlKTsKLXN0YXRpYyBpbnQgc21zY19zdXBlcmlvX3BhZ2VkKGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXBzLCB1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgY2hhciAqdHlwZSk7Ci1zdGF0aWMgaW50IHNtc2Nfc3VwZXJpb19mZGModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UpOwotc3RhdGljIGludCBzbXNjX3N1cGVyaW9fbHBjKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlKTsKK3N0YXRpYyBpbnQgX19pbml0IHNtc2NfaXJjY19sb29rX2Zvcl9jaGlwcyh2b2lkKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICogX19pbml0IHNtc2NfaXJjY19wcm9iZSh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgdTggcmVnLCBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICpjaGlwLCBjaGFyICp0eXBlKTsKK3N0YXRpYyBpbnQgX19pbml0IHNtc2Nfc3VwZXJpb19mbGF0KGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXBzLCB1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgY2hhciAqdHlwZSk7CitzdGF0aWMgaW50IF9faW5pdCBzbXNjX3N1cGVyaW9fcGFnZWQoY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcHMsIHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCBjaGFyICp0eXBlKTsKK3N0YXRpYyBpbnQgX19pbml0IHNtc2Nfc3VwZXJpb19mZGModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UpOworc3RhdGljIGludCBfX2luaXQgc21zY19zdXBlcmlvX2xwYyh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSk7CiAjaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIGludCBwcmVjb25maWd1cmVfc21zY19jaGlwKHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOwotc3RhdGljIGludCBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mKTsKLXN0YXRpYyB2b2lkIHByZWNvbmZpZ3VyZV9hbGlfcG9ydChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Ntc2NfY2hpcChzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mKTsKK3N0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOworc3RhdGljIHZvaWQgX19pbml0IHByZWNvbmZpZ3VyZV9hbGlfcG9ydChzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCk7Ci1zdGF0aWMgaW50IHByZWNvbmZpZ3VyZV90aHJvdWdoX2FsaShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mKTsKLXN0YXRpYyBpbnQgc21zY19pcmNjX3ByZWNvbmZpZ3VyZV9zdWJzeXN0ZW1zKHVuc2lnbmVkIHNob3J0IGlyY2NfY2ZnLAorc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfYWxpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOworc3RhdGljIGludCBfX2luaXQgc21zY19pcmNjX3ByZWNvbmZpZ3VyZV9zdWJzeXN0ZW1zKHVuc2lnbmVkIHNob3J0IGlyY2NfY2ZnLAogCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2NfZmlyLAogCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2Nfc2lyLAogCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgaXJjY19kbWEsCkBAIC0zNjYsNyArMzY2LDcgQEAKIH0KIAogLyogUE5QIGhvdHBsdWcgc3VwcG9ydCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIHNtc2NfaXJjY19wbnBfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBzbXNjX2lyY2NfcG5wX3RhYmxlW10gPSB7CiAJeyAuaWQgPSAiU01DZjAxMCIsIC5kcml2ZXJfZGF0YSA9IDAgfSwKIAkvKiBhbmQgcHJlc3VtYWJseSBvdGhlcnMgKi8KIAl7IH0KQEAgLTUxNSw3ICs1MTUsNyBAQAogICogICAgVHJ5IHRvIG9wZW4gZHJpdmVyIGluc3RhbmNlCiAgKgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbXNjX2lyY2Nfb3Blbih1bnNpZ25lZCBpbnQgZmlyX2Jhc2UsIHVuc2lnbmVkIGludCBzaXJfYmFzZSwgdTggZG1hLCB1OCBpcnEpCitzdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2Nfb3Blbih1bnNpZ25lZCBpbnQgZmlyX2Jhc2UsIHVuc2lnbmVkIGludCBzaXJfYmFzZSwgdTggZG1hLCB1OCBpcnEpCiB7CiAJc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMjI3Myw3ICsyMjczLDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbXNjX2FjY2Vzcyh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgdW5zaWduZWQgY2hhciByZWcpCitzdGF0aWMgaW50IF9faW5pdCBzbXNjX2FjY2Vzcyh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgdW5zaWduZWQgY2hhciByZWcpCiB7CiAJSVJEQV9ERUJVRygxLCAiJXNcbiIsIF9fZnVuY19fKTsKIApAQCAtMjI4MSw3ICsyMjgxLDcgQEAKIAlyZXR1cm4gaW5iKGNmZ19iYXNlKSAhPSByZWcgPyAtMSA6IDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICogX19kZXZpbml0IHNtc2NfaXJjY19wcm9iZSh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgdTggcmVnLCBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICpjaGlwLCBjaGFyICp0eXBlKQorc3RhdGljIGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKiBfX2luaXQgc21zY19pcmNjX3Byb2JlKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCB1OCByZWcsIGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXAsIGNoYXIgKnR5cGUpCiB7CiAJdTggZGV2aWQsIHhkZXZpZCwgcmV2OwogCkBAIC0yNDA2LDcgKzI0MDYsNyBAQAogI2lmZGVmIENPTkZJR19QQ0kKICNkZWZpbmUgUENJSURfVkVORE9SX0lOVEVMIDB4ODA4NgogI2RlZmluZSBQQ0lJRF9WRU5ET1JfQUxJIDB4MTBiOQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb25zW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiBzdWJzeXN0ZW1fY29uZmlndXJhdGlvbnNbXSBfX2luaXRkYXRhID0gewogCS8qCiAJICogU3Vic3lzdGVtcyBuZWVkaW5nIGVudHJpZXM6CiAJICogMHgxMGI5OjB4MTUzMyAweDEwM2M6MHgwODUwIEhQIG54OTAxMCBmYW1pbHkKQEAgLTI1MzIsNyArMjUzMiw3IEBACiAgKiAoRklSIHBvcnQsIFNJUiBwb3J0LCBGSVIgRE1BLCBGSVIgSVJRKQogICogdGhyb3VnaCB0aGUgY2hpcCBjb25maWd1cmF0aW9uIHBvcnQuCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHByZWNvbmZpZ3VyZV9zbXNjX2NoaXAoc3RydWN0CitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfc21zY19jaGlwKHN0cnVjdAogCQkJCQkgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uCiAJCQkJCSAqY29uZikKIHsKQEAgLTI2MzMsNyArMjYzMyw3IEBACiAgKiBvciBJbnRlbCA4MjgwMURCL0RCTCAoSUNINC9JQ0g0LUwpIExQQyBJbnRlcmZhY2UgQnJpZGdlLgogICogVGhleSBhbGwgd29yayB0aGUgc2FtZSB3YXkhCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxKHN0cnVjdCBwY2lfZGV2ICpkZXYsCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMShzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCQkgICAgIHN0cnVjdAogCQkJCQkgICAgIHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbgogCQkJCQkgICAgICpjb25mKQpAQCAtMjc4Niw3ICsyNzg2LDcgQEAKICAqIFRoaXMgaXMgYmFzZWQgb24gcmV2ZXJzZS1lbmdpbmVlcmluZyBzaW5jZSBBTGkgZG9lcyBub3QKICAqIHByb3ZpZGUgYW55IGRhdGEgc2hlZXQgZm9yIHRoZSAxNTMzIGNoaXAuCiAgKi8KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwcmVjb25maWd1cmVfYWxpX3BvcnQoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyB2b2lkIF9faW5pdCBwcmVjb25maWd1cmVfYWxpX3BvcnQoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkJIHVuc2lnbmVkIHNob3J0IHBvcnQpCiB7CiAJdW5zaWduZWQgY2hhciByZWc7CkBAIC0yODI0LDcgKzI4MjQsNyBAQAogCUlSREFfTUVTU0FHRSgiQWN0aXZhdGVkIEFMaSAxNTMzIElTQSBicmlkZ2UgcG9ydCAweCUwNHguXG4iLCBwb3J0KTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfYWxpKHN0cnVjdCBwY2lfZGV2ICpkZXYsCitzdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF9hbGkoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkJICAgc3RydWN0CiAJCQkJCSAgIHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbgogCQkJCQkgICAqY29uZikKQEAgLTI4MzcsNyArMjgzNyw3IEBACiAJcmV0dXJuIHByZWNvbmZpZ3VyZV9zbXNjX2NoaXAoY29uZik7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNtc2NfaXJjY19wcmVjb25maWd1cmVfc3Vic3lzdGVtcyh1bnNpZ25lZCBzaG9ydCBpcmNjX2NmZywKK3N0YXRpYyBpbnQgX19pbml0IHNtc2NfaXJjY19wcmVjb25maWd1cmVfc3Vic3lzdGVtcyh1bnNpZ25lZCBzaG9ydCBpcmNjX2NmZywKIAkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBpcmNjX2ZpciwKIAkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBpcmNjX3NpciwKIAkJCQkJCSAgICB1bnNpZ25lZCBjaGFyIGlyY2NfZG1hLApAQCAtMjg0OSw3ICsyODQ5LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWZvcl9lYWNoX3BjaV9kZXYoZGV2KSB7Ci0JCWNvbnN0IHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmY7CisJCXN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmY7CiAKIAkJLyoKIAkJICogQ2FjaGUgdGhlIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODQyLmMgYi9kcml2ZXJzL25ldC9rczg4NDIuYwppbmRleCA0ZDQwNjI2Li5mYzEyYWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NDIuYworKysgYi9kcml2ZXJzL25ldC9rczg4NDIuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiAKIAkvKiBjaGVjayB0aGUgc3RhdHVzICovCiAJaWYgKChzdGF0dXMgJiBSWFNSX1ZBTElEKSAmJiAhKHN0YXR1cyAmIFJYU1JfRVJST1IpKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKG5ldGRldiwgbGVuKTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24obmV0ZGV2LCBsZW4gKyAzKTsKIAogCQlpZiAoc2tiKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lMzIxMC5jIGIvZHJpdmVycy9uZXQvbmUzMjEwLmMKaW5kZXggZTg5ODRiMGMuLjI0M2VkMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lMzIxMC5jCisrKyBiL2RyaXZlcnMvbmV0L25lMzIxMC5jCkBAIC04MCwyMCArODAsMTcgQEAKIAogI2RlZmluZSBORTMyMTBfREVCVUcJMHgwCiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlycV9tYXBbXSBfX2RldmluaXRjb25zdCA9Ci0JeyAxNSwgMTIsIDExLCAxMCwgOSwgNywgNSwgMyB9Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzaG1lbV9tYXBbXSBfX2RldmluaXRjb25zdCA9Ci0JeyAweGZmMCwgMHhmZTAsIDB4ZmZmMCwgMHhkOCwgMHhmZmUwLCAweGZmYzAsIDB4ZDAsIDB4MCB9Owotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlmbWFwW10gX19kZXZpbml0Y29uc3QgPQotCXsgIlVUUCIsICI/IiwgIkJOQyIsICJBVUkiIH07Ci1zdGF0aWMgY29uc3QgaW50IGlmbWFwX3ZhbFtdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIHVuc2lnbmVkIGNoYXIgaXJxX21hcFtdIF9faW5pdGRhdGEgPSB7MTUsIDEyLCAxMSwgMTAsIDksIDcsIDUsIDN9Oworc3RhdGljIHVuc2lnbmVkIGludCBzaG1lbV9tYXBbXSBfX2luaXRkYXRhID0gezB4ZmYwLCAweGZlMCwgMHhmZmYwLCAweGQ4LCAweGZmZTAsIDB4ZmZjMCwgMHhkMCwgMHgwfTsKK3N0YXRpYyBjb25zdCBjaGFyICppZm1hcFtdIF9faW5pdGRhdGEgPSB7IlVUUCIsICI/IiwgIkJOQyIsICJBVUkifTsKK3N0YXRpYyBpbnQgaWZtYXBfdmFsW10gX19pbml0ZGF0YSA9IHsKIAkJSUZfUE9SVF8xMEJBU0VULAogCQlJRl9QT1JUX1VOS05PV04sCiAJCUlGX1BPUlRfMTBCQVNFMiwKIAkJSUZfUE9SVF9BVUksCiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBuZTMyMTBfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgbmUzMjEwX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAl1bnNpZ25lZCBsb25nIGlvYWRkciwgcGh5c19tZW07CiAJaW50IGksIHJldHZhbCwgcG9ydF9pbmRleDsKQEAgLTMxNiw3ICszMTMsNyBAQAogCW1lbWNweV90b2lvKHNobWVtLCBidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBlaXNhX2RldmljZV9pZCBuZTMyMTBfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgc3RydWN0IGVpc2FfZGV2aWNlX2lkIG5lMzIxMF9pZHNbXSA9IHsKIAl7ICJFR0wwMTAxIiB9LAogCXsgIk5WTDE4MDEiIH0sCiAJeyAiIiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwppbmRleCA1Mzg3MmQ3Li5hMWI4MmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiB9CiAKIC8qIE1heSBzbGVlcCwgZG9uJ3QgY2FsbCBmcm9tIGludGVycnVwdCBsZXZlbCBvciB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQKK3N0YXRpYyB2b2lkCiBwcHBfYXN5bmN0dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCiAJCSAgY2hhciAqY2ZsYWdzLCBpbnQgY291bnQpCiB7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFhcCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybjsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPnJlY3ZfbG9jaywgZmxhZ3MpOwogCXBwcF9hc3luY19pbnB1dChhcCwgYnVmLCBjZmxhZ3MsIGNvdW50KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+cmVjdl9sb2NrLCBmbGFncyk7CkBAIC0zNTYsOCArMzU2LDYgQEAKIAkJdGFza2xldF9zY2hlZHVsZSgmYXAtPnRzayk7CiAJYXBfcHV0KGFwKTsKIAl0dHlfdW50aHJvdHRsZSh0dHkpOwotCi0JcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKaW5kZXggMDgxNTc5MC4uMjU3M2Y1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYworKysgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCkBAIC0zODEsNyArMzgxLDcgQEAKIH0KIAogLyogTWF5IHNsZWVwLCBkb24ndCBjYWxsIGZyb20gaW50ZXJydXB0IGxldmVsIG9yIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotc3RhdGljIHVuc2lnbmVkIGludAorc3RhdGljIHZvaWQKIHBwcF9zeW5jX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkgIGNoYXIgKmNmbGFncywgaW50IGNvdW50KQogewpAQCAtMzg5LDcgKzM4OSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghYXApCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm47CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5yZWN2X2xvY2ssIGZsYWdzKTsKIAlwcHBfc3luY19pbnB1dChhcCwgYnVmLCBjZmxhZ3MsIGNvdW50KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+cmVjdl9sb2NrLCBmbGFncyk7CkBAIC0zOTcsOCArMzk3LDYgQEAKIAkJdGFza2xldF9zY2hlZHVsZSgmYXAtPnRzayk7CiAJc3BfcHV0KGFwKTsKIAl0dHlfdW50aHJvdHRsZSh0dHkpOwotCi0JcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jCmluZGV4IGU5NjU2NjEuLmE1ZDlmYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2h3LmMKQEAgLTE0MDYsNiArMTQwNiw3IEBACiAKIAlmb3IgKGxvb3AgPSAwOyBsb29wIDwgcXVlLT5ub19vcHM7IGxvb3ArKykgewogCQlRTENOSUNfV1JfRFVNUF9SRUcocXVlLT5zZWxfYWRkciwgYmFzZSwgcXVlX2lkKTsKKwkJYWRkciA9IHF1ZS0+cmVhZF9hZGRyOwogCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKIAkJCVFMQ05JQ19SRF9EVU1QX1JFRyhhZGRyLCBiYXNlLCAmZGF0YSk7CiAJCQkqYnVmZmVyKysgPSBjcHVfdG9fbGUzMihkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMKaW5kZXggM2FiN2QyYy4uMGY2YWY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMKQEAgLTIxNTksNiArMjE1OSw3IEBACiAKIAluZiA9ICZwYnVmLT5mcmFnX2FycmF5WzBdOwogCXBjaV91bm1hcF9zaW5nbGUocGRldiwgbmYtPmRtYSwgc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisJcGJ1Zi0+c2tiID0gTlVMTDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwLmMgYi9kcml2ZXJzL25ldC9zbGlwLmMKaW5kZXggNTg0ODA5Yy4uOGVjMWE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2xpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3NsaXAuYwpAQCAtNjcwLDE3ICs2NzAsMTYgQEAKICAqIGluIHBhcmFsbGVsCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBzbGlwX3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKKwkJCQkJCQljaGFyICpmcCwgaW50IGNvdW50KQogewogCXN0cnVjdCBzbGlwICpzbCA9IHR0eS0+ZGlzY19kYXRhOwotCWludCBieXRlcyA9IGNvdW50OwogCiAJaWYgKCFzbCB8fCBzbC0+bWFnaWMgIT0gU0xJUF9NQUdJQyB8fCAhbmV0aWZfcnVubmluZyhzbC0+ZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybjsKIAogCS8qIFJlYWQgdGhlIGNoYXJhY3RlcnMgb3V0IG9mIHRoZSBidWZmZXIgKi8KLQl3aGlsZSAoYnl0ZXMtLSkgeworCXdoaWxlIChjb3VudC0tKSB7CiAJCWlmIChmcCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNMRl9FUlJPUiwgJnNsLT5mbGFncykpCiAJCQkJc2wtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CkBAIC02OTQsOCArNjkzLDYgQEAKICNlbmRpZgogCQkJc2xpcF91bmVzYyhzbCwgKmNwKyspOwogCX0KLQotCXJldHVybiBjb3VudDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jLW1jYS5jIGIvZHJpdmVycy9uZXQvc21jLW1jYS5jCmluZGV4IDBmMjlmMjYuLmQwN2MzOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYy1tY2EuYworKysgYi9kcml2ZXJzL25ldC9zbWMtbWNhLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgeyAxNCwgMTUgfQogfTsKIAotc3RhdGljIGNvbnN0IHNob3J0IHNtY19tY2FfYWRhcHRlcl9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBzaG9ydCBzbWNfbWNhX2FkYXB0ZXJfaWRzW10gX19pbml0ZGF0YSA9IHsKIAkweDYxYzgsCiAJMHg2MWM5LAogCTB4NmZjMCwKQEAgLTE2OCw3ICsxNjgsNyBAQAogCTB4MDAwMAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNtY19tY2FfYWRhcHRlcl9uYW1lc1tdIF9fZGV2aW5pdGNvbnN0ID0geworc3RhdGljIGNoYXIgKnNtY19tY2FfYWRhcHRlcl9uYW1lc1tdIF9faW5pdGRhdGEgPSB7CiAJIlNNQyBFdGhlcmNhcmQgUExVUyBFbGl0ZS9BIEJOQy9BVUkgKFdEODAxM0VQL0EpIiwKIAkiU01DIEV0aGVyY2FyZCBQTFVTIEVsaXRlL0EgVVRQL0FVSSAoV0Q4MDEzV1AvQSkiLAogCSJXRCBFdGhlcmNhcmQgUExVUy9BIChXRDgwMDNFL0Egb3IgV0Q4MDAzRVQvQSkiLApAQCAtMTk5LDcgKzE5OSw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHVsdHJhbWNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmdlbl9kZXYpCitzdGF0aWMgaW50IF9faW5pdCB1bHRyYW1jYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpnZW5fZGV2KQogewogCXVuc2lnbmVkIHNob3J0IGlvYWRkcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MXguYwppbmRleCBkYzQ4MDVmLi5mNjI4NTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MXguYwpAQCAtMjQwMCw4ICsyNDAwLDEwIEBACiAJeyAuY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkxYzk0IiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNtc2MsbGFuOTFjMTExIiwgfSwKIAl7fSwKLX0KK307CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzbWM5MXhfbWF0Y2gpOworI2Vsc2UKKyNkZWZpbmUgc21jOTF4X21hdGNoIE5VTEwKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc21jX2Rydl9wbV9vcHMgPSB7CkBAIC0yNDE2LDkgKzI0MTgsNyBAQAogCQkubmFtZQk9IENBUkROQU1FLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLnBtCT0gJnNtY19kcnZfcG1fb3BzLAotI2lmZGVmIENPTkZJR19PRgogCQkub2ZfbWF0Y2hfdGFibGUgPSBzbWM5MXhfbWF0Y2gsCi0jZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCBmNGIwMWM2Li5hMWY5ZjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtNTc3NCw3ICs1Nzc0LDcgQEAKIAkJCSBkbWFfdW5tYXBfYWRkcih0eGIsIG1hcHBpbmcpLAogCQkJIHNrYl9oZWFkbGVuKHNrYiksCiAJCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0JZm9yIChpID0gMDsgaSA8PSBsYXN0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7CiAJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKIAogCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKaW5kZXggMTMxM2FhMS4uMmJlZGMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCkBAIC03MjcsNyArNzI3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHNob3J0IG1hZGdlbWNfYWRhcHRlcl9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKK3N0YXRpYyBzaG9ydCBtYWRnZW1jX2FkYXB0ZXJfaWRzW10gX19pbml0ZGF0YSA9IHsKIAkweDAwMmQsCiAJMHgwMDAwCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKaW5kZXggNDUxNDRkNS4uZWZhYTFkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCkBAIC0xOTk1LDcgKzE5OTUsNyBAQAogCiBzdGF0aWMgdV9jaGFyIGRlNHg1X2lycVtdID0gRUlTQV9BTExPV0VEX0lSUV9MSVNUOwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkZTR4NV9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpnZW5kZXYpCitzdGF0aWMgaW50IF9faW5pdCBkZTR4NV9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpnZW5kZXYpCiB7CiAJc3RydWN0IGVpc2FfZGV2aWNlICplZGV2OwogCXVfbG9uZyBpb2Jhc2U7CkBAIC0yMDk3LDcgKzIwOTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGRlNHg1X2Vpc2FfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CitzdGF0aWMgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGRlNHg1X2Vpc2FfaWRzW10gPSB7CiAgICAgICAgIHsgIkRFQzQyNTAiLCAwIH0sCS8qIDAgaXMgdGhlIGJvYXJkIG5hbWUgaW5kZXguLi4gKi8KICAgICAgICAgeyAiIiB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKaW5kZXggZDcyMjFjNC4uODA1NmY4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCkBAIC00OTUsNyArNDk1LDcgQEAKIAlpZiAoIXEtPmRpciAmJiBxLT5idWYgJiYgcS0+bGVuKQogCQltZW1jcHkoY2F0Yy0+Y3RybF9idWYsIHEtPmJ1ZiwgcS0+bGVuKTsKIAotCWlmICgoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoY2F0Yy0+Y3RybF91cmIsIEdGUF9LRVJORUwpKSkKKwlpZiAoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGNhdGMtPmN0cmxfdXJiLCBHRlBfQVRPTUlDKSkpCiAJCWVycigic3VibWl0KGN0cmxfdXJiKSBzdGF0dXMgJWQiLCBzdGF0dXMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYwppbmRleCBjZGQzYWU0Li5mMzNjYTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKQEAgLTU0LDcgKzU0LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvdXNibmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NkYy5oPgogCi0jZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkJCSIyNC1NYXktMjAxMSIKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCQkJIjAxLUp1bmUtMjAxMSIKIAogLyogQ0RDIE5DTSBzdWJjbGFzcyAzLjIuMSAqLwogI2RlZmluZSBVU0JfQ0RDX05DTV9ORFAxNl9MRU5HVEhfTUlOCQkweDEwCkBAIC0xMjM0LDYgKzEyMzQsNyBAQAogCS5kaXNjb25uZWN0ID0gY2RjX25jbV9kaXNjb25uZWN0LAogCS5zdXNwZW5kID0gdXNibmV0X3N1c3BlbmQsCiAJLnJlc3VtZSA9IHVzYm5ldF9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYm5ldF9yZXN1bWUsCiAJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCAwY2IwYjA2Li5mNjg1MzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC02MDksNyArNjA5LDcgQEAKIAkgKiBiZWZvcmUgaXQgZ2V0cyBvdXQgb2YgaGFuZC4gIE5hdHVyYWxseSwgdGhpcyB3YXN0ZXMgZW50cmllcy4gKi8KIAlpZiAoY2FwYWNpdHkgPCAyK01BWF9TS0JfRlJBR1MpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlpZiAodW5saWtlbHkoIXZpcnRxdWV1ZV9lbmFibGVfY2IodmktPnN2cSkpKSB7CisJCWlmICh1bmxpa2VseSghdmlydHF1ZXVlX2VuYWJsZV9jYl9kZWxheWVkKHZpLT5zdnEpKSkgewogCQkJLyogTW9yZSBqdXN0IGdvdCB1c2VkLCBmcmVlIHRoZW0gdGhlbiByZWNoZWNrLiAqLwogCQkJY2FwYWNpdHkgKz0gZnJlZV9vbGRfeG1pdF9za2JzKHZpKTsKIAkJCWlmIChjYXBhY2l0eSA+PSAyK01BWF9TS0JfRlJBR1MpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCmluZGV4IDQwMzk4YmYuLjI0Mjk3YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYwpAQCAtNTE3LDE4ICs1MTcsMTcgQEAKICAqIGFuZCBzZW50IG9uIHRvIHNvbWUgSVAgbGF5ZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHgyNV9hc3lfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKK3N0YXRpYyB2b2lkIHgyNV9hc3lfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgeDI1X2FzeSAqc2wgPSB0dHktPmRpc2NfZGF0YTsKLQlpbnQgYnl0ZXMgPSBjb3VudDsKIAogCWlmICghc2wgfHwgc2wtPm1hZ2ljICE9IFgyNV9BU1lfTUFHSUMgfHwgIW5ldGlmX3J1bm5pbmcoc2wtPmRldikpCiAJCXJldHVybjsKIAogCiAJLyogUmVhZCB0aGUgY2hhcmFjdGVycyBvdXQgb2YgdGhlIGJ1ZmZlciAqLwotCXdoaWxlIChieXRlcy0tKSB7CisJd2hpbGUgKGNvdW50LS0pIHsKIAkJaWYgKGZwICYmICpmcCsrKSB7CiAJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU0xGX0VSUk9SLCAmc2wtPmZsYWdzKSkKIAkJCQlzbC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKQEAgLTUzNyw4ICs1MzYsNiBAQAogCQl9CiAJCXgyNV9hc3lfdW5lc2Moc2wsICpjcCsrKTsKIAl9Ci0KLQlyZXR1cm4gY291bnQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwppbmRleCAyMjA0NzYyLi5iNmM1ZDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKQEAgLTcyLDYgKzcyLDExIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoYWxsX2NoYW5uZWxzLCBtb2RwYXJhbV9hbGxfY2hhbm5lbHMsIGJvb2wsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhhbGxfY2hhbm5lbHMsICJFeHBvc2UgYWxsIGNoYW5uZWxzIHRoZSBkZXZpY2UgY2FuIHVzZS4iKTsKIAorc3RhdGljIGludCBtb2RwYXJhbV9mYXN0Y2hhbnN3aXRjaDsKK21vZHVsZV9wYXJhbV9uYW1lZChmYXN0Y2hhbnN3aXRjaCwgbW9kcGFyYW1fZmFzdGNoYW5zd2l0Y2gsIGJvb2wsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhmYXN0Y2hhbnN3aXRjaCwgIkVuYWJsZSBmYXN0IGNoYW5uZWwgc3dpdGNoaW5nIGZvciBBUjI0MTMvQVI1NDEzIHJhZGlvcy4iKTsKKworCiAvKiBNb2R1bGUgaW5mbyAqLwogTU9EVUxFX0FVVEhPUigiSmlyaSBTbGFieSIpOwogTU9EVUxFX0FVVEhPUigiTmljayBLb3NzaWZpZGlzIik7CkBAIC0yNjg2LDYgKzI2OTEsNyBAQAogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihhaCk7CiAJaW50IHJldCwgYW5pX21vZGU7CisJYm9vbCBmYXN0OwogCiAJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgInJlc2V0dGluZ1xuIik7CiAKQEAgLTI3MDUsNyArMjcxMSwxMCBAQAogCWF0aDVrX2RyYWluX3R4X2J1ZmZzKHNjKTsKIAlpZiAoY2hhbikKIAkJc2MtPmN1cmNoYW4gPSBjaGFuOwotCXJldCA9IGF0aDVrX2h3X3Jlc2V0KGFoLCBzYy0+b3Btb2RlLCBzYy0+Y3VyY2hhbiwgY2hhbiAhPSBOVUxMLAorCisJZmFzdCA9ICgoY2hhbiAhPSBOVUxMKSAmJiBtb2RwYXJhbV9mYXN0Y2hhbnN3aXRjaCkgPyAxIDogMDsKKworCXJldCA9IGF0aDVrX2h3X3Jlc2V0KGFoLCBzYy0+b3Btb2RlLCBzYy0+Y3VyY2hhbiwgZmFzdCwKIAkJCQkJCQkJc2tpcF9wY3UpOwogCWlmIChyZXQpIHsKIAkJQVRINUtfRVJSKHNjLCAiY2FuJ3QgcmVzZXQgaGFyZHdhcmUgKCVkKVxuIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZXNldC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKaW5kZXggMzUxMGRlMi4uMTI2YTRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKQEAgLTExMjQsOCArMTEyNCwxMSBAQAogCQkJLyogTm9uIGZhdGFsLCBjYW4gaGFwcGVuIGVnLgogCQkJICogb24gbW9kZSBjaGFuZ2UgKi8KIAkJCXJldCA9IDA7Ci0JCX0gZWxzZQorCQl9IGVsc2UgeworCQkJQVRINUtfREJHKGFoLT5haF9zYywgQVRINUtfREVCVUdfUkVTRVQsCisJCQkJImZhc3QgY2hhbiBjaGFuZ2Ugc3VjY2Vzc2Z1bFxuIik7CiAJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCmluZGV4IGQ5ZmY4NDEuLmQ5YzA4YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCkBAIC0yNiw3ICsyNiw2IEBACiBjb25maWcgQVRIOUtfUENJCiAJYm9vbCAiQXRoZXJvcyBhdGg5ayBQQ0kvUENJZSBidXMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFUSDlLICYmIFBDSQotCWRlZmF1bHQgUENJCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUENJIGJ1cyBzdXBwb3J0IGluIGF0aDlrLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2NhbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2NhbGliLmMKaW5kZXggMDE1ZDk3NC4uMmQ0YzA5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfY2FsaWIuYwpAQCAtODI5LDcgKzgyOSw3IEBACiAJaWYgKEFSX1NSRVZfOTI3MShhaCkpIHsKIAkJaWYgKCFhcjkyODVfaHdfY2xfY2FsKGFoLCBjaGFuKSkKIAkJCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihhaCkpIHsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4NShhaCkgJiYgQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkgewogCQlpZiAoIWFyOTI4NV9od19jbGMoYWgsIGNoYW4pKQogCQkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYwppbmRleCAwY2E3NjM1ZC4uZmY4MTUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jCkBAIC00NjQ1LDEwICs0NjQ1LDE2IEBACiAJY2FzZSAxOgogCQlicmVhazsKIAljYXNlIDI6Ci0JCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOOworCQlpZiAoc2NhbGVkUG93ZXIgPiBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RXT19DSEFJTikKKwkJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOOworCQllbHNlCisJCQlzY2FsZWRQb3dlciA9IDA7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJc2NhbGVkUG93ZXIgLT0gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9USFJFRV9DSEFJTjsKKwkJaWYgKHNjYWxlZFBvd2VyID4gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9USFJFRV9DSEFJTikKKwkJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU47CisJCWVsc2UKKwkJCXNjYWxlZFBvd2VyID0gMDsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYwppbmRleCBlZWUyM2VjLi44OTJjNDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmMKQEAgLTEzODEsMyArMTM4MSwyNSBAQAogCQkiPT09PSBCQiB1cGRhdGU6IGRvbmUgPT09PVxuXG4iKTsKIH0KIEVYUE9SVF9TWU1CT0woYXI5MDAzX2h3X2JiX3dhdGNoZG9nX2RiZ19pbmZvKTsKKwordm9pZCBhcjkwMDNfaHdfZGlzYWJsZV9waHlfcmVzdGFydChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwl1MzIgdmFsOworCisJLyogV2hpbGUgcmVjZWl2aW5nIHVuc3VwcG9ydGVkIHJhdGUgZnJhbWUgcnggc3RhdGUgbWFjaGluZQorCSAqIGdldHMgaW50byBhIHN0YXRlIDB4YiBhbmQgaWYgcGh5X3Jlc3RhcnQgaGFwcGVucyBpbiB0aGF0CisJICogc3RhdGUsIEJCIHdvdWxkIGdvIGhhbmcuIElmIFJYU00gaXMgaW4gMHhiIHN0YXRlIGFmdGVyCisJICogZmlyc3QgYmIgcGFuaWMsIGVuc3VyZSB0byBkaXNhYmxlIHRoZSBwaHlfcmVzdGFydC4KKwkgKi8KKwlpZiAoISgoTVMoYWgtPmJiX3dhdGNoZG9nX2xhc3Rfc3RhdHVzLAorCQkgIEFSX1BIWV9XQVRDSERPR19SWF9PRkRNX1NNKSA9PSAweGIpIHx8CisJICAgIGFoLT5iYl9oYW5nX3J4X29mZG0pKQorCQlyZXR1cm47CisKKwlhaC0+YmJfaGFuZ19yeF9vZmRtID0gdHJ1ZTsKKwl2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1JFU1RBUlQpOworCXZhbCAmPSB+QVJfUEhZX1JFU1RBUlRfRU5BOworCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkVTVEFSVCwgdmFsKTsKK30KK0VYUE9SVF9TWU1CT0woYXI5MDAzX2h3X2Rpc2FibGVfcGh5X3Jlc3RhcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV85Mjg3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzkyODcuYwppbmRleCA3ODU2ZjBkLi4zNDNmYzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzkyODcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzkyODcuYwpAQCAtNTI0LDEwICs1MjQsMTYgQEAKIAljYXNlIDE6CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJc2NhbGVkUG93ZXIgLT0gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU47CisJCWlmIChzY2FsZWRQb3dlciA+IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOKQorCQkJc2NhbGVkUG93ZXIgLT0gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU47CisJCWVsc2UKKwkJCXNjYWxlZFBvd2VyID0gMDsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQlzY2FsZWRQb3dlciAtPSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOOworCQlpZiAoc2NhbGVkUG93ZXIgPiBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOKQorCQkJc2NhbGVkUG93ZXIgLT0gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9USFJFRV9DSEFJTjsKKwkJZWxzZQorCQkJc2NhbGVkUG93ZXIgPSAwOwogCQlicmVhazsKIAl9CiAJc2NhbGVkUG93ZXIgPSBtYXgoKHUxNikwLCBzY2FsZWRQb3dlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCmluZGV4IDcyNTQzY2UuLjFiZTdjOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCkBAIC0xNTU1LDkgKzE1NTUsMTIgQEAKIAlpZiAoYWgtPmJ0Y29leF9ody5lbmFibGVkKQogCQlhdGg5a19od19idGNvZXhfZW5hYmxlKGFoKTsKIAotCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQorCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKSB7CiAJCWFyOTAwM19od19iYl93YXRjaGRvZ19jb25maWcoYWgpOwogCisJCWFyOTAwM19od19kaXNhYmxlX3BoeV9yZXN0YXJ0KGFoKTsKKwl9CisKIAlhdGg5a19od19hcHBseV9ncGlvX292ZXJyaWRlKGFoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAppbmRleCA1NzQzNWNlLi40YjE1N2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaApAQCAtODQyLDYgKzg0Miw3IEBACiAKIAl1MzIgYmJfd2F0Y2hkb2dfbGFzdF9zdGF0dXM7CiAJdTMyIGJiX3dhdGNoZG9nX3RpbWVvdXRfbXM7IC8qIGluIG1zLCAwIHRvIGRpc2FibGUgKi8KKwl1OCBiYl9oYW5nX3J4X29mZG07IC8qIHRydWUgaWYgYmIgaGFuZyBkdWUgdG8gcnhfb2ZkbSAqLwogCiAJdW5zaWduZWQgaW50IHBhcHJkX3RhcmdldF9wb3dlcjsKIAl1bnNpZ25lZCBpbnQgcGFwcmRfdHJhaW5pbmdfcG93ZXI7CkBAIC05OTAsNiArOTkxLDcgQEAKIHZvaWQgYXI5MDAzX2h3X2JiX3dhdGNoZG9nX2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGFyOTAwM19od19iYl93YXRjaGRvZ19yZWFkKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXI5MDAzX2h3X2JiX3dhdGNoZG9nX2RiZ19pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXI5MDAzX2h3X2Rpc2FibGVfcGh5X3Jlc3RhcnQoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhcjkwMDNfcGFwcmRfZW5hYmxlKHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIHZhbCk7CiB2b2lkIGFyOTAwM19wYXByZF9wb3B1bGF0ZV9zaW5nbGVfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCXN0cnVjdCBhdGg5a19od19jYWxfZGF0YSAqY2FsZGF0YSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IGExOThlZTMuLjJjYTM1MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtNjcwLDcgKzY3MCw4IEBACiAJdTMyIHN0YXR1cyA9IHNjLT5pbnRyc3RhdHVzOwogCXUzMiByeG1hc2s7CiAKLQlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0ZBVEFMKSB7CisJaWYgKChzdGF0dXMgJiBBVEg5S19JTlRfRkFUQUwpIHx8CisJICAgIChzdGF0dXMgJiBBVEg5S19JTlRfQkJfV0FUQ0hET0cpKSB7CiAJCWF0aF9yZXNldChzYywgdHJ1ZSk7CiAJCXJldHVybjsKIAl9CkBAIC03MzcsNiArNzM4LDcgQEAKIHsKICNkZWZpbmUgU0NIRURfSU5UUiAoCQkJCVwKIAkJQVRIOUtfSU5UX0ZBVEFMIHwJCVwKKwkJQVRIOUtfSU5UX0JCX1dBVENIRE9HIHwJCVwKIAkJQVRIOUtfSU5UX1JYT1JOIHwJCVwKIAkJQVRIOUtfSU5UX1JYRU9MIHwJCVwKIAkJQVRIOUtfSU5UX1JYIHwJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCmluZGV4IDE3NTQyMjEuLmJhN2YzNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCkBAIC02ODksNyArNjg5LDggQEAKIAogCWlmIChXTEFOX1JDX1BIWV9IVChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5KSkgewogCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfTUNTOwotCQlpZiAoV0xBTl9SQ19QSFlfNDAocmF0ZV90YWJsZS0+aW5mb1tyaXhdLnBoeSkpCisJCWlmIChXTEFOX1JDX1BIWV80MChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5KSAmJgorCQkgICAgY29uZl9pc19odDQwKCZ0eHJjLT5ody0+Y29uZikpCiAJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIOwogCQlpZiAoV0xBTl9SQ19QSFlfU0dJKHJhdGVfdGFibGUtPmluZm9bcml4XS5waHkpKQogCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYwppbmRleCA5ZWQ2NTE1Li4wNTk2MGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYwpAQCAtMzA5Myw3ICszMDkzLDcgQEAKIAlpbnQgZnJlcTsKIAlib29sIGF2b2lkID0gZmFsc2U7CiAJdTggbGVuZ3RoOwotCXUxNiB0bXAsIGNvcmUsIHR5cGUsIGNvdW50LCBtYXgsIG51bWIsIGxhc3QsIGNtZDsKKwl1MTYgdG1wLCBjb3JlLCB0eXBlLCBjb3VudCwgbWF4LCBudW1iLCBsYXN0ID0gMCwgY21kOwogCWNvbnN0IHUxNiAqdGFibGU7CiAJYm9vbCBwaHk2b3I1eDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1saWIuYwppbmRleCA3ZTVlODVhLi5hN2E0NzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1saWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1saWIuYwpAQCAtNjI4LDExICs2MjgsMTEgQEAKIAogCS8qIHJ4X3N0YXR1cyBjYXJyaWVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNrZXQgdG8gbWFjODAyMTEgKi8KIAlyeF9zdGF0dXMubWFjdGltZSA9IGxlNjRfdG9fY3B1KHBoeV9yZXMtPnRpbWVzdGFtcCk7CisJcnhfc3RhdHVzLmJhbmQgPSAocGh5X3Jlcy0+cGh5X2ZsYWdzICYgUlhfUkVTX1BIWV9GTEFHU19CQU5EXzI0X01TSykgPworCQkJCUlFRUU4MDIxMV9CQU5EXzJHSFogOiBJRUVFODAyMTFfQkFORF81R0haOwogCXJ4X3N0YXR1cy5mcmVxID0KIAkJaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGxlMTZfdG9fY3B1KHBoeV9yZXMtPmNoYW5uZWwpLAogCQkJCQkJCXJ4X3N0YXR1cy5iYW5kKTsKLQlyeF9zdGF0dXMuYmFuZCA9IChwaHlfcmVzLT5waHlfZmxhZ3MgJiBSWF9SRVNfUEhZX0ZMQUdTX0JBTkRfMjRfTVNLKSA/Ci0JCQkJSUVFRTgwMjExX0JBTkRfMkdIWiA6IElFRUU4MDIxMV9CQU5EXzVHSFo7CiAJcnhfc3RhdHVzLnJhdGVfaWR4ID0KIAkJaXdsNDk2NV9od3JhdGVfdG9fbWFjODAyMTFfaWR4KHJhdGVfbl9mbGFncywgcnhfc3RhdHVzLmJhbmQpOwogCXJ4X3N0YXR1cy5mbGFnID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS5jCmluZGV4IGY1NDMzYzcuLmZhY2M5NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUuYwpAQCAtMTIxOCwxMCArMTIxOCwxMCBAQAogCSAqIHJlY2VpdmUgY29tbWl0X3J4b24gcmVxdWVzdAogCSAqIGFib3J0IGFueSBwcmV2aW91cyBjaGFubmVsIHN3aXRjaCBpZiBzdGlsbCBpbiBwcm9jZXNzCiAJICovCi0JaWYgKHByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyAmJgotCSAgICAocHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCAhPSBjdHgtPnN0YWdpbmcuY2hhbm5lbCkpIHsKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpICYmCisJICAgIChwcml2LT5zd2l0Y2hfY2hhbm5lbCAhPSBjdHgtPnN0YWdpbmcuY2hhbm5lbCkpIHsKIAkJSVdMX0RFQlVHXzExSChwcml2LCAiYWJvcnQgY2hhbm5lbCBzd2l0Y2ggb24gJWRcbiIsCi0JCSAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwpKTsKKwkJICAgICAgbGUxNl90b19jcHUocHJpdi0+c3dpdGNoX2NoYW5uZWwpKTsKIAkJaXdsX2xlZ2FjeV9jaHN3aXRjaF9kb25lKHByaXYsIGZhbHNlKTsKIAl9CiAKQEAgLTEyMzcsNyArMTIzNyw3IEBACiAKIAkJbWVtY3B5KGFjdGl2ZV9yeG9uLCAmY3R4LT5zdGFnaW5nLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CiAJCWl3bF9sZWdhY3lfcHJpbnRfcnhfY29uZmlnX2NtZChwcml2LCBjdHgpOwotCQlyZXR1cm4gMDsKKwkJZ290byBzZXRfdHhfcG93ZXI7CiAJfQogCiAJLyogSWYgd2UgYXJlIGN1cnJlbnRseSBhc3NvY2lhdGVkIGFuZCB0aGUgbmV3IGNvbmZpZyByZXF1aXJlcwpAQCAtMTMxNyw2ICsxMzE3LDcgQEAKIAogCWl3bDQ5NjVfaW5pdF9zZW5zaXRpdml0eShwcml2KTsKIAorc2V0X3R4X3Bvd2VyOgogCS8qIElmIHdlIGlzc3VlIGEgbmV3IFJYT04gY29tbWFuZCB3aGljaCByZXF1aXJlZCBhIHR1bmUgdGhlbiB3ZSBtdXN0CiAJICogc2VuZCBhIG5ldyBUWFBPV0VSIGNvbW1hbmQgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0byBUeCBhbnkgZnJhbWVzICovCiAJcmV0ID0gaXdsX2xlZ2FjeV9zZXRfdHhfcG93ZXIocHJpdiwgcHJpdi0+dHhfcG93ZXJfbmV4dCwgdHJ1ZSk7CkBAIC0xNDAzLDkgKzE0MDQsNiBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JcHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCA9IGNtZC5jaGFubmVsOwotCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IHRydWU7Ci0KIAlyZXR1cm4gaXdsX2xlZ2FjeV9zZW5kX2NtZF9wZHUocHJpdiwKIAkJCSBSRVBMWV9DSEFOTkVMX1NXSVRDSCwgc2l6ZW9mKGNtZCksICZjbWQpOwogfQpAQCAtMTU0Myw3ICsxNTQxLDcgQEAKIAlzMzIgdGVtcDsKIAogCXRlbXAgPSBpd2w0OTY1X2h3X2dldF90ZW1wZXJhdHVyZShwcml2KTsKLQlpZiAodGVtcCA8IDApCisJaWYgKElXTF9UWF9QT1dFUl9URU1QRVJBVFVSRV9PVVRfT0ZfUkFOR0UodGVtcCkpCiAJCXJldHVybjsKIAogCWlmIChwcml2LT50ZW1wZXJhdHVyZSAhPSB0ZW1wKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYwppbmRleCA0MmRmODMyLi4zYmU3NmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMKQEAgLTg1OSwxMiArODU5LDggQEAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKIAotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MpIHsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJaWVlZTgwMjExX2Noc3dpdGNoX2RvbmUoY3R4LT52aWYsIGlzX3N1Y2Nlc3MpOwotCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IGZhbHNlOwotCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQl9CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9sZWdhY3lfY2hzd2l0Y2hfZG9uZSk7CiAKQEAgLTg3NiwxOSArODcyLDE5IEBACiAJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCA9ICZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXTsKIAlzdHJ1Y3QgaXdsX2xlZ2FjeV9yeG9uX2NtZCAqcnhvbiA9ICh2b2lkICopJmN0eC0+YWN0aXZlOwogCi0JaWYgKHByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcykgewotCQlpZiAoIWxlMzJfdG9fY3B1KGNzYS0+c3RhdHVzKSAmJgotCQkgICAgKGNzYS0+Y2hhbm5lbCA9PSBwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsKSkgewotCQkJcnhvbi0+Y2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKLQkJCWN0eC0+c3RhZ2luZy5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotCQkJSVdMX0RFQlVHXzExSChwcml2LCAiQ1NBIG5vdGlmOiBjaGFubmVsICVkXG4iLAorCWlmICghdGVzdF9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAoIWxlMzJfdG9fY3B1KGNzYS0+c3RhdHVzKSAmJiBjc2EtPmNoYW5uZWwgPT0gcHJpdi0+c3dpdGNoX2NoYW5uZWwpIHsKKwkJcnhvbi0+Y2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKKwkJY3R4LT5zdGFnaW5nLmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7CisJCUlXTF9ERUJVR18xMUgocHJpdiwgIkNTQSBub3RpZjogY2hhbm5lbCAlZFxuIiwKIAkJCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCkpOwotCQkJaXdsX2xlZ2FjeV9jaHN3aXRjaF9kb25lKHByaXYsIHRydWUpOwotCQl9IGVsc2UgewotCQkJSVdMX0VSUihwcml2LCAiQ1NBIG5vdGlmIChmYWlsKSA6IGNoYW5uZWwgJWRcbiIsCi0JCQkgICAgICBsZTE2X3RvX2NwdShjc2EtPmNoYW5uZWwpKTsKLQkJCWl3bF9sZWdhY3lfY2hzd2l0Y2hfZG9uZShwcml2LCBmYWxzZSk7Ci0JCX0KKwkJaXdsX2xlZ2FjeV9jaHN3aXRjaF9kb25lKHByaXYsIHRydWUpOworCX0gZWxzZSB7CisJCUlXTF9FUlIocHJpdiwgIkNTQSBub3RpZiAoZmFpbCkgOiBjaGFubmVsICVkXG4iLAorCQkJbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSk7CisJCWl3bF9sZWdhY3lfY2hzd2l0Y2hfZG9uZShwcml2LCBmYWxzZSk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChpd2xfbGVnYWN5X3J4X2NzYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuaAppbmRleCBiYzY2YzYwLi5jNWZiZGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmgKQEAgLTU2MCw3ICs1NjAsNyBAQAogI2RlZmluZSBTVEFUVVNfU0NBTl9IVwkJMTUKICNkZWZpbmUgU1RBVFVTX1BPV0VSX1BNSQkxNgogI2RlZmluZSBTVEFUVVNfRldfRVJST1IJCTE3Ci0KKyNkZWZpbmUgU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcgMTgKIAogc3RhdGljIGlubGluZSBpbnQgaXdsX2xlZ2FjeV9pc19yZWFkeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZGV2LmgKaW5kZXggYmUwMTA2Yy4uZWEzMDEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaApAQCAtODU1LDE3ICs4NTUsNiBAQAogfTsKIAogLyoKLSAqIGl3bF9zd2l0Y2hfcnhvbjogImNoYW5uZWwgc3dpdGNoIiBzdHJ1Y3R1cmUKLSAqCi0gKiBAIHN3aXRjaF9pbl9wcm9ncmVzczogY2hhbm5lbCBzd2l0Y2ggaW4gcHJvZ3Jlc3MKLSAqIEAgY2hhbm5lbDogbmV3IGNoYW5uZWwKLSAqLwotc3RydWN0IGl3bF9zd2l0Y2hfcnhvbiB7Ci0JYm9vbCBzd2l0Y2hfaW5fcHJvZ3Jlc3M7Ci0JX19sZTE2IGNoYW5uZWw7Ci19OwotCi0vKgogICogc2NoZWR1bGUgdGhlIHRpbWVyIHRvIHdha2UgdXAgZXZlcnkgVUNPREVfVFJBQ0VfUEVSSU9EIG1pbGxpc2Vjb25kcwogICogdG8gcGVyZm9ybSBjb250aW51b3VzIHVDb2RlIGV2ZW50IGxvZ2dpbmcgb3BlcmF0aW9uIGlmIGVuYWJsZWQKICAqLwpAQCAtMTExNSw3ICsxMTA0LDcgQEAKIAogCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0IGNvbnRleHRzW05VTV9JV0xfUlhPTl9DVFhdOwogCi0Jc3RydWN0IGl3bF9zd2l0Y2hfcnhvbiBzd2l0Y2hfcnhvbjsKKwlfX2xlMTYgc3dpdGNoX2NoYW5uZWw7CiAKIAkvKiAxc3QgcmVzcG9uc2VzIGZyb20gaW5pdGlhbGl6ZSBhbmQgcnVudGltZSB1Q29kZSBpbWFnZXMuCiAJICogXzQ5NjUncyBpbml0aWFsaXplIGFsaXZlIHJlc3BvbnNlIGNvbnRhaW5zIHNvbWUgY2FsaWJyYXRpb24gZGF0YS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKaW5kZXggYWYyYWUyMi4uNzE1N2JhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKQEAgLTI4NjEsMTYgKzI4NjEsMTMgQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgfHwKLQkgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSB8fAorCSAgICB0ZXN0X2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCWdvdG8gb3V0OwogCiAJaWYgKCFpd2xfbGVnYWN5X2lzX2Fzc29jaWF0ZWRfY3R4KGN0eCkpCiAJCWdvdG8gb3V0OwogCi0JLyogY2hhbm5lbCBzd2l0Y2ggaW4gcHJvZ3Jlc3MgKi8KLQlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID09IHRydWUpCi0JCWdvdG8gb3V0OwotCiAJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9jaGFubmVsX3N3aXRjaCkgewogCiAJCWNoID0gY2hhbm5lbC0+aHdfdmFsdWU7CkBAIC0yOTE5LDE1ICsyOTE2LDE4IEBACiAJCQkgKiBhdCB0aGlzIHBvaW50LCBzdGFnaW5nX3J4b24gaGFzIHRoZQogCQkJICogY29uZmlndXJhdGlvbiBmb3IgY2hhbm5lbCBzd2l0Y2gKIAkJCSAqLwotCQkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9jaGFubmVsX3N3aXRjaChwcml2LAotCQkJCQkJCQkgICAgY2hfc3dpdGNoKSkKLQkJCQlwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKKwkJCXNldF9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOworCQkJcHJpdi0+c3dpdGNoX2NoYW5uZWwgPSBjcHVfdG9fbGUxNihjaCk7CisJCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2V0X2NoYW5uZWxfc3dpdGNoKHByaXYsIGNoX3N3aXRjaCkpIHsKKwkJCQljbGVhcl9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsCisJCQkJCSAgJnByaXYtPnN0YXR1cyk7CisJCQkJcHJpdi0+c3dpdGNoX2NoYW5uZWwgPSAwOworCQkJCWllZWU4MDIxMV9jaHN3aXRjaF9kb25lKGN0eC0+dmlmLCBmYWxzZSk7CisJCQl9CiAJCX0KIAl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JaWYgKCFwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MpCi0JCWllZWU4MDIxMV9jaHN3aXRjaF9kb25lKGN0eC0+dmlmLCBmYWxzZSk7CiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTIwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTIwMDAuYwppbmRleCA4NmZlZWM4Li4yMjgyMjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0yMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMjAwMC5jCkBAIC0xNzcsNzkgKzE3Nyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXdsMjAzMF9od19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoICpjaF9zd2l0Y2gpCi17Ci0JLyoKLQkgKiBNVUxUSS1GSVhNRQotCSAqIFNlZSBpd2xfbWFjX2NoYW5uZWxfc3dpdGNoLgotCSAqLwotCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSAmcHJpdi0+Y29udGV4dHNbSVdMX1JYT05fQ1RYX0JTU107Ci0Jc3RydWN0IGl3bDYwMDBfY2hhbm5lbF9zd2l0Y2hfY21kIGNtZDsKLQljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKLQl1MzIgc3dpdGNoX3RpbWVfaW5fdXNlYywgdWNvZGVfc3dpdGNoX3RpbWU7Ci0JdTE2IGNoOwotCXUzMiB0c2ZfbG93OwotCXU4IHN3aXRjaF9jb3VudDsKLQl1MTYgYmVhY29uX2ludGVydmFsID0gbGUxNl90b19jcHUoY3R4LT50aW1pbmcuYmVhY29uX2ludGVydmFsKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gY3R4LT52aWY7Ci0Jc3RydWN0IGl3bF9ob3N0X2NtZCBoY21kID0gewotCQkuaWQgPSBSRVBMWV9DSEFOTkVMX1NXSVRDSCwKLQkJLmxlbiA9IHsgc2l6ZW9mKGNtZCksIH0sCi0JCS5mbGFncyA9IENNRF9TWU5DLAotCQkuZGF0YSA9IHsgJmNtZCwgfSwKLQl9OwotCi0JY21kLmJhbmQgPSBwcml2LT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFo7Ci0JY2ggPSBjaF9zd2l0Y2gtPmNoYW5uZWwtPmh3X3ZhbHVlOwotCUlXTF9ERUJVR18xMUgocHJpdiwgImNoYW5uZWwgc3dpdGNoIGZyb20gJXUgdG8gJXVcbiIsCi0JCWN0eC0+YWN0aXZlLmNoYW5uZWwsIGNoKTsKLQljbWQuY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoKTsKLQljbWQucnhvbl9mbGFncyA9IGN0eC0+c3RhZ2luZy5mbGFnczsKLQljbWQucnhvbl9maWx0ZXJfZmxhZ3MgPSBjdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzOwotCXN3aXRjaF9jb3VudCA9IGNoX3N3aXRjaC0+Y291bnQ7Ci0JdHNmX2xvdyA9IGNoX3N3aXRjaC0+dGltZXN0YW1wICYgMHgwZmZmZmZmZmY7Ci0JLyoKLQkgKiBjYWxjdWxhdGUgdGhlIHVjb2RlIGNoYW5uZWwgc3dpdGNoIHRpbWUKLQkgKiBhZGRpbmcgVFNGIGFzIG9uZSBvZiB0aGUgZmFjdG9yIGZvciB3aGVuIHRvIHN3aXRjaAotCSAqLwotCWlmICgocHJpdi0+dWNvZGVfYmVhY29uX3RpbWUgPiB0c2ZfbG93KSAmJiBiZWFjb25faW50ZXJ2YWwpIHsKLQkJaWYgKHN3aXRjaF9jb3VudCA+ICgocHJpdi0+dWNvZGVfYmVhY29uX3RpbWUgLSB0c2ZfbG93KSAvCi0JCSAgICBiZWFjb25faW50ZXJ2YWwpKSB7Ci0JCQlzd2l0Y2hfY291bnQgLT0gKHByaXYtPnVjb2RlX2JlYWNvbl90aW1lIC0KLQkJCQl0c2ZfbG93KSAvIGJlYWNvbl9pbnRlcnZhbDsKLQkJfSBlbHNlCi0JCQlzd2l0Y2hfY291bnQgPSAwOwotCX0KLQlpZiAoc3dpdGNoX2NvdW50IDw9IDEpCi0JCWNtZC5zd2l0Y2hfdGltZSA9IGNwdV90b19sZTMyKHByaXYtPnVjb2RlX2JlYWNvbl90aW1lKTsKLQllbHNlIHsKLQkJc3dpdGNoX3RpbWVfaW5fdXNlYyA9Ci0JCQl2aWYtPmJzc19jb25mLmJlYWNvbl9pbnQgKiBzd2l0Y2hfY291bnQgKiBUSU1FX1VOSVQ7Ci0JCXVjb2RlX3N3aXRjaF90aW1lID0gaXdsX3VzZWNzX3RvX2JlYWNvbnMocHJpdiwKLQkJCQkJCXN3aXRjaF90aW1lX2luX3VzZWMsCi0JCQkJCQliZWFjb25faW50ZXJ2YWwpOwotCQljbWQuc3dpdGNoX3RpbWUgPSBpd2xfYWRkX2JlYWNvbl90aW1lKHByaXYsCi0JCQkJCQlwcml2LT51Y29kZV9iZWFjb25fdGltZSwKLQkJCQkJCXVjb2RlX3N3aXRjaF90aW1lLAotCQkJCQkJYmVhY29uX2ludGVydmFsKTsKLQl9Ci0JSVdMX0RFQlVHXzExSChwcml2LCAidUNvZGUgdGltZSBmb3IgdGhlIHN3aXRjaCBpcyAweCV4XG4iLAotCQkgICAgICBjbWQuc3dpdGNoX3RpbWUpOwotCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5iYW5kLCBjaCk7Ci0JaWYgKGNoX2luZm8pCi0JCWNtZC5leHBlY3RfYmVhY29uID0gaXNfY2hhbm5lbF9yYWRhcihjaF9pbmZvKTsKLQllbHNlIHsKLQkJSVdMX0VSUihwcml2LCAiaW52YWxpZCBjaGFubmVsIHN3aXRjaCBmcm9tICV1IHRvICV1XG4iLAotCQkJY3R4LT5hY3RpdmUuY2hhbm5lbCwgY2gpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCA9IGNtZC5jaGFubmVsOwotCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IHRydWU7Ci0KLQlyZXR1cm4gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmhjbWQpOwotfQotCiBzdGF0aWMgc3RydWN0IGl3bF9saWJfb3BzIGl3bDIwMDBfbGliID0gewogCS5zZXRfaHdfcGFyYW1zID0gaXdsMjAwMF9od19zZXRfaHdfcGFyYW1zLAogCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsYWduX3J4X2hhbmRsZXJfc2V0dXAsCkBAIC0yNTgsNyArMTg1LDYgQEAKIAkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bGFnbl9od192YWxpZF9ydGNfZGF0YV9hZGRyLAogCS5zZW5kX3R4X3Bvd2VyID0gaXdsYWduX3NlbmRfdHhfcG93ZXIsCiAJLnVwZGF0ZV9jaGFpbl9mbGFncyA9IGl3bF91cGRhdGVfY2hhaW5fZmxhZ3MsCi0JLnNldF9jaGFubmVsX3N3aXRjaCA9IGl3bDIwMzBfaHdfY2hhbm5lbF9zd2l0Y2gsCiAJLmFwbV9vcHMgPSB7CiAJCS5pbml0ID0gaXdsX2FwbV9pbml0LAogCQkuY29uZmlnID0gaXdsMjAwMF9uaWNfY29uZmlnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IGE3MGI4Y2YuLmY5OWY5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTMzMSw4ICszMzEsNiBAQAogCQkJY3R4LT5hY3RpdmUuY2hhbm5lbCwgY2gpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JcHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCA9IGNtZC5jaGFubmVsOwotCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IHRydWU7CiAKIAlyZXR1cm4gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmhjbWQpOwogfQpAQCAtNDI1LDcgKzQyMyw2IEBACiB9Owogc3RhdGljIHN0cnVjdCBpd2xfaHRfcGFyYW1zIGl3bDUwMDBfaHRfcGFyYW1zID0gewogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAotCS51c2VfcnRzX2Zvcl9hZ2dyZWdhdGlvbiA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIH07CiAKICNkZWZpbmUgSVdMX0RFVklDRV81MDAwCQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCmluZGV4IGY4YzcxMGQuLmZiZTU2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKQEAgLTI3MCw4ICsyNzAsNiBAQAogCQkJY3R4LT5hY3RpdmUuY2hhbm5lbCwgY2gpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JcHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCA9IGNtZC5jaGFubmVsOwotCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IHRydWU7CiAKIAlyZXR1cm4gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmhjbWQpOwogfQpAQCAtNjAzLDE5ICs2MDEsMjcgQEAKIAlJV0xfREVWSUNFXzYwNTAsCiB9OwogCisjZGVmaW5lIElXTF9ERVZJQ0VfNjE1MAkJCQkJCVwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDUwX0ZXX1BSRSwJCQkJXAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNjA1MF9VQ09ERV9BUElfTUFYLAkJCVwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwJCQlcCisJLm9wcyA9ICZpd2w2MTUwX29wcywJCQkJCVwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MTUwX0VFUFJPTV9WRVJTSU9OLAkJXAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYxNTBfVFhfUE9XRVJfVkVSU0lPTiwJXAorCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDUwX2Jhc2VfcGFyYW1zLAkJCVwKKwkubmVlZF9kY19jYWxpYiA9IHRydWUsCQkJCQlcCisJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSywJCQkJXAorCS5pbnRlcm5hbF93aW1heF9jb2V4ID0gdHJ1ZQorCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MTUwX2Jnbl9jZmcgPSB7CiAJLm5hbWUgPSAiSW50ZWwoUikgQ2VudHJpbm8oUikgV2lyZWxlc3MtTiArIFdpTUFYIDYxNTAgQkdOIiwKLQkuZndfbmFtZV9wcmUgPSBJV0w2MDUwX0ZXX1BSRSwKLQkudWNvZGVfYXBpX21heCA9IElXTDYwNTBfVUNPREVfQVBJX01BWCwKLQkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwKLQkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MTUwX0VFUFJPTV9WRVJTSU9OLAotCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYxNTBfVFhfUE9XRVJfVkVSU0lPTiwKLQkub3BzID0gJml3bDYxNTBfb3BzLAotCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDUwX2Jhc2VfcGFyYW1zLAorCUlXTF9ERVZJQ0VfNjE1MCwKIAkuaHRfcGFyYW1zID0gJml3bDYwMDBfaHRfcGFyYW1zLAotCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKLQkubGVkX21vZGUgPSBJV0xfTEVEX1JGX1NUQVRFLAotCS5pbnRlcm5hbF93aW1heF9jb2V4ID0gdHJ1ZSwKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYxNTBfYmdfY2ZnID0geworCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIFdpcmVsZXNzLU4gKyBXaU1BWCA2MTUwIEJHIiwKKwlJV0xfREVWSUNFXzYxNTAsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwXzNhZ25fY2ZnID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLmMKaW5kZXggYjEyYzcyZC4uMjNmYTkzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC5jCkBAIC0xNjMsMTcgKzE2Myw5IEBACiAJCQkJICAgICBfX2xlMTYgZmMsIF9fbGUzMiAqdHhfZmxhZ3MpCiB7CiAJaWYgKGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMgfHwKLQkgICAgaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpIHsKKwkgICAgaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QgfHwKKwkgICAgaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQogCQkqdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19QUk9UX1JFUVVJUkVfTVNLOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHByaXYtPmNmZy0+aHRfcGFyYW1zICYmCi0JICAgIHByaXYtPmNmZy0+aHRfcGFyYW1zLT51c2VfcnRzX2Zvcl9hZ2dyZWdhdGlvbiAmJgotCSAgICBpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKLQkJKnR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfUFJPVF9SRVFVSVJFX01TSzsKLQkJcmV0dXJuOwotCX0KIH0KIAogLyogQ2FsYyBtYXggc2lnbmFsIGxldmVsIChkQm0pIGFtb25nIDMgcG9zc2libGUgcmVjZWl2ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJ4b24uYwppbmRleCBhOTVhZDg0Li4wOWY2NzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMKQEAgLTMyNSw2ICszMjUsMTQgQEAKIAkJCXJldHVybiAwOwogCX0KIAorCS8qCisJICogZm9yY2UgQ1RTLXRvLXNlbGYgZnJhbWVzIHByb3RlY3Rpb24gaWYgUlRTLUNUUyBpcyBub3QgcHJlZmVycmVkCisJICogb25lIGFnZ3JlZ2F0aW9uIHByb3RlY3Rpb24gbWV0aG9kCisJICovCisJaWYgKCEocHJpdi0+Y2ZnLT5odF9wYXJhbXMgJiYKKwkgICAgICBwcml2LT5jZmctPmh0X3BhcmFtcy0+dXNlX3J0c19mb3JfYWdncmVnYXRpb24pKQorCQljdHgtPnN0YWdpbmcuZmxhZ3MgfD0gUlhPTl9GTEdfU0VMRl9DVFNfRU47CisKIAlpZiAoKGN0eC0+dmlmICYmIGN0eC0+dmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfc2xvdCkgfHwKIAkgICAgIShjdHgtPnN0YWdpbmcuZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spKQogCQljdHgtPnN0YWdpbmcuZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7CkBAIC0zNDIsMTAgKzM1MCwxMCBAQAogCSAqIHJlY2VpdmUgY29tbWl0X3J4b24gcmVxdWVzdAogCSAqIGFib3J0IGFueSBwcmV2aW91cyBjaGFubmVsIHN3aXRjaCBpZiBzdGlsbCBpbiBwcm9jZXNzCiAJICovCi0JaWYgKHByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyAmJgotCSAgICAocHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCAhPSBjdHgtPnN0YWdpbmcuY2hhbm5lbCkpIHsKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpICYmCisJICAgIChwcml2LT5zd2l0Y2hfY2hhbm5lbCAhPSBjdHgtPnN0YWdpbmcuY2hhbm5lbCkpIHsKIAkJSVdMX0RFQlVHXzExSChwcml2LCAiYWJvcnQgY2hhbm5lbCBzd2l0Y2ggb24gJWRcbiIsCi0JCSAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwpKTsKKwkJCSAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN3aXRjaF9jaGFubmVsKSk7CiAJCWl3bF9jaHN3aXRjaF9kb25lKHByaXYsIGZhbHNlKTsKIAl9CiAKQEAgLTM2Miw2ICszNzAsMTEgQEAKIAkJfQogCiAJCW1lbWNweShhY3RpdmUsICZjdHgtPnN0YWdpbmcsIHNpemVvZigqYWN0aXZlKSk7CisJCS8qCisJCSAqIFdlIGRvIG5vdCBjb21taXQgdHggcG93ZXIgc2V0dGluZ3Mgd2hpbGUgY2hhbm5lbCBjaGFuZ2luZywKKwkJICogZG8gaXQgbm93IGlmIGFmdGVyIHNldHRpbmdzIGNoYW5nZWQuCisJCSAqLworCQlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIHByaXYtPnR4X3Bvd2VyX25leHQsIGZhbHNlKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDExYzZjMTEuLjhlMTk0MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0yODQzLDE2ICsyODQzLDEzIEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIHx8Ci0JICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpCisJICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykgfHwKKwkgICAgdGVzdF9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlnb3RvIG91dDsKIAogCWlmICghaXdsX2lzX2Fzc29jaWF0ZWRfY3R4KGN0eCkpCiAJCWdvdG8gb3V0OwogCi0JLyogY2hhbm5lbCBzd2l0Y2ggaW4gcHJvZ3Jlc3MgKi8KLQlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID09IHRydWUpCi0JCWdvdG8gb3V0OwotCiAJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9jaGFubmVsX3N3aXRjaCkgewogCiAJCWNoID0gY2hhbm5lbC0+aHdfdmFsdWU7CkBAIC0yOTAxLDE1ICsyODk4LDE5IEBACiAJCQkgKiBhdCB0aGlzIHBvaW50LCBzdGFnaW5nX3J4b24gaGFzIHRoZQogCQkJICogY29uZmlndXJhdGlvbiBmb3IgY2hhbm5lbCBzd2l0Y2gKIAkJCSAqLworCQkJc2V0X2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywgJnByaXYtPnN0YXR1cyk7CisJCQlwcml2LT5zd2l0Y2hfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoKTsKIAkJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5zZXRfY2hhbm5lbF9zd2l0Y2gocHJpdiwKLQkJCQkJCQkJICAgIGNoX3N3aXRjaCkpCi0JCQkJcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID0gZmFsc2U7CisJCQkJCQkJCSAgICBjaF9zd2l0Y2gpKSB7CisJCQkJY2xlYXJfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLAorCQkJCQkgICZwcml2LT5zdGF0dXMpOworCQkJCXByaXYtPnN3aXRjaF9jaGFubmVsID0gMDsKKwkJCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShjdHgtPnZpZiwgZmFsc2UpOworCQkJfQogCQl9CiAJfQogb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCWlmICghcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKQotCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShjdHgtPnZpZiwgZmFsc2UpOwogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCkBAIC0zODMxLDExICszODMyLDExIEBACiAKIC8qIDYxNTAgV2lGaS9XaU1heCBTZXJpZXMgKi8KIAl7SVdMX1BDSV9ERVZJQ0UoMHgwODg1LCAweDEzMDUsIGl3bDYxNTBfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4ODUsIDB4MTMwNiwgaXdsNjE1MF9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg4NSwgMHgxMzA3LCBpd2w2MTUwX2JnX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDA4ODUsIDB4MTMyNSwgaXdsNjE1MF9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg4NSwgMHgxMzI2LCBpd2w2MTUwX2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwODg1LCAweDEzMjcsIGl3bDYxNTBfYmdfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MDg4NiwgMHgxMzE1LCBpd2w2MTUwX2Jnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwODg2LCAweDEzMTYsIGl3bDYxNTBfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4ODYsIDB4MTMxNywgaXdsNjE1MF9iZ19jZmcpfSwKIAogLyogMTAwMCBTZXJpZXMgV2lGaSAqLwogCXtJV0xfUENJX0RFVklDRSgweDAwODMsIDB4MTIwNSwgaXdsMTAwMF9iZ25fY2ZnKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5oCmluZGV4IDI0OTVmZTcuLmQxNzE2ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5oCkBAIC04OSw2ICs4OSw3IEBACiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8yYWduX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhYmdfY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYxNTBfYmduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MTUwX2JnX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMTAwMF9iZ19jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMTAwX2Jnbl9jZmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKaW5kZXggNDY1M2RlYS4uMjEzYzgwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwpAQCAtODQzLDEyICs4NDMsOCBAQAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwogCi0JaWYgKHByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcykgeworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShjdHgtPnZpZiwgaXNfc3VjY2Vzcyk7Ci0JCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQkJcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID0gZmFsc2U7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCX0KIH0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKaW5kZXggM2JiNzZmNi4uYTU0ZDQxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaApAQCAtNTYwLDYgKzU2MCw3IEBACiAjZGVmaW5lIFNUQVRVU19QT1dFUl9QTUkJMTYKICNkZWZpbmUgU1RBVFVTX0ZXX0VSUk9SCQkxNwogI2RlZmluZSBTVEFUVVNfREVWSUNFX0VOQUJMRUQJMTgKKyNkZWZpbmUgU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcgMTkKIAogCiBzdGF0aWMgaW5saW5lIGludCBpd2xfaXNfcmVhZHkoc3RydWN0IGl3bF9wcml2ICpwcml2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAppbmRleCAyMmE2ZTNlLi5jOGRlMjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaApAQCAtOTgyLDE3ICs5ODIsNiBAQAogfTsKIAogLyoKLSAqIGl3bF9zd2l0Y2hfcnhvbjogImNoYW5uZWwgc3dpdGNoIiBzdHJ1Y3R1cmUKLSAqCi0gKiBAIHN3aXRjaF9pbl9wcm9ncmVzczogY2hhbm5lbCBzd2l0Y2ggaW4gcHJvZ3Jlc3MKLSAqIEAgY2hhbm5lbDogbmV3IGNoYW5uZWwKLSAqLwotc3RydWN0IGl3bF9zd2l0Y2hfcnhvbiB7Ci0JYm9vbCBzd2l0Y2hfaW5fcHJvZ3Jlc3M7Ci0JX19sZTE2IGNoYW5uZWw7Ci19OwotCi0vKgogICogc2NoZWR1bGUgdGhlIHRpbWVyIHRvIHdha2UgdXAgZXZlcnkgVUNPREVfVFJBQ0VfUEVSSU9EIG1pbGxpc2Vjb25kcwogICogdG8gcGVyZm9ybSBjb250aW51b3VzIHVDb2RlIGV2ZW50IGxvZ2dpbmcgb3BlcmF0aW9uIGlmIGVuYWJsZWQKICAqLwpAQCAtMTI4Nyw3ICsxMjc2LDcgQEAKIAogCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0IGNvbnRleHRzW05VTV9JV0xfUlhPTl9DVFhdOwogCi0Jc3RydWN0IGl3bF9zd2l0Y2hfcnhvbiBzd2l0Y2hfcnhvbjsKKwlfX2xlMTYgc3dpdGNoX2NoYW5uZWw7CiAKIAlzdHJ1Y3QgewogCQl1MzIgZXJyb3JfZXZlbnRfdGFibGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwppbmRleCAwMDUzZTllLi5iNzc0NTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKQEAgLTI1MCwxOSArMjUwLDE5IEBACiAJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCA9ICZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXTsKIAlzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uID0gKHZvaWQgKikmY3R4LT5hY3RpdmU7CiAKLQlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKSB7Ci0JCWlmICghbGUzMl90b19jcHUoY3NhLT5zdGF0dXMpICYmCi0JCSAgICAoY3NhLT5jaGFubmVsID09IHByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwpKSB7Ci0JCQlyeG9uLT5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotCQkJY3R4LT5zdGFnaW5nLmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7Ci0JCQlJV0xfREVCVUdfMTFIKHByaXYsICJDU0Egbm90aWY6IGNoYW5uZWwgJWRcbiIsCisJaWYgKCF0ZXN0X2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCWlmICghbGUzMl90b19jcHUoY3NhLT5zdGF0dXMpICYmIGNzYS0+Y2hhbm5lbCA9PSBwcml2LT5zd2l0Y2hfY2hhbm5lbCkgeworCQlyeG9uLT5jaGFubmVsID0gY3NhLT5jaGFubmVsOworCQljdHgtPnN0YWdpbmcuY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKKwkJSVdMX0RFQlVHXzExSChwcml2LCAiQ1NBIG5vdGlmOiBjaGFubmVsICVkXG4iLAogCQkJICAgICAgbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSk7Ci0JCQlpd2xfY2hzd2l0Y2hfZG9uZShwcml2LCB0cnVlKTsKLQkJfSBlbHNlIHsKLQkJCUlXTF9FUlIocHJpdiwgIkNTQSBub3RpZiAoZmFpbCkgOiBjaGFubmVsICVkXG4iLAotCQkJICAgICAgbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSk7Ci0JCQlpd2xfY2hzd2l0Y2hfZG9uZShwcml2LCBmYWxzZSk7Ci0JCX0KKwkJaXdsX2Noc3dpdGNoX2RvbmUocHJpdiwgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJSVdMX0VSUihwcml2LCAiQ1NBIG5vdGlmIChmYWlsKSA6IGNoYW5uZWwgJWRcbiIsCisJCQlsZTE2X3RvX2NwdShjc2EtPmNoYW5uZWwpKTsKKwkJaXdsX2Noc3dpdGNoX2RvbmUocHJpdiwgZmFsc2UpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwppbmRleCA4NDU2NmRiLi43MWM4ZjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwpAQCAtOTk0LDYgKzk5NCw4IEBACiAJY21kID0gY21kbm9kZS0+Y21kYnVmOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisJcHJpdi0+c2VxbnVtKys7CisJY21kLT5zZXFudW0gPSBjcHVfdG9fbGUxNihwcml2LT5zZXFudW0pOwogCXByaXYtPmN1cl9jbWQgPSBjbWRub2RlOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAKQEAgLTE2MjEsMTEgKzE2MjMsOSBAQAogCS8qIENvcHkgdGhlIGluY29taW5nIGNvbW1hbmQgdG8gdGhlIGJ1ZmZlciAqLwogCW1lbWNweShjbWRub2RlLT5jbWRidWYsIGluX2NtZCwgaW5fY21kX3NpemUpOwogCi0JLyogU2V0IHNlcXVlbmNlIG51bWJlciwgY2xlYW4gcmVzdWx0LCBtb3ZlIHRvIGJ1ZmZlciAqLwotCXByaXYtPnNlcW51bSsrOworCS8qIFNldCBjb21tYW5kLCBjbGVhbiByZXN1bHQsIG1vdmUgdG8gYnVmZmVyICovCiAJY21kbm9kZS0+Y21kYnVmLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoY29tbWFuZCk7CiAJY21kbm9kZS0+Y21kYnVmLT5zaXplICAgID0gY3B1X3RvX2xlMTYoaW5fY21kX3NpemUpOwotCWNtZG5vZGUtPmNtZGJ1Zi0+c2VxbnVtICA9IGNwdV90b19sZTE2KHByaXYtPnNlcW51bSk7CiAJY21kbm9kZS0+Y21kYnVmLT5yZXN1bHQgID0gMDsKIAogCWxic19kZWJfaG9zdCgiUFJFUF9DTUQ6IGNvbW1hbmQgMHglMDR4XG4iLCBjb21tYW5kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYwppbmRleCBhN2I1Y2IwLi4yMjRlOTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCkBAIC05MDcsNyArOTA3LDcgQEAKIAljYXJkID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKIAogCWNhdXNlID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBJRl9TRElPX0hfSU5UX1NUQVRVUywgJnJldCk7Ci0JaWYgKHJldCkKKwlpZiAocmV0IHx8ICFjYXVzZSkKIAkJZ290byBvdXQ7CiAKIAlsYnNfZGViX3NkaW8oImludGVycnVwdDogMHglWFxuIiwgKHVuc2lnbmVkKWNhdXNlKTsKQEAgLTEwMDgsMTAgKzEwMDgsNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gcmVsZWFzZTsKIAotCXJldCA9IHNkaW9fY2xhaW1faXJxKGZ1bmMsIGlmX3NkaW9faW50ZXJydXB0KTsKLQlpZiAocmV0KQotCQlnb3RvIGRpc2FibGU7Ci0KIAkvKiBGb3IgMS1iaXQgdHJhbnNmZXJzIHRvIHRoZSA4Njg2IG1vZGVsLCB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUKIAkgKiBpbnRlcnJ1cHQgZmxhZyBpbiB0aGUgQ0NDUiByZWdpc3Rlci4gU2V0IHRoZSBNTUNfUVVJUktfTEVOSUVOVF9GTjAKIAkgKiBiaXQgdG8gYWxsb3cgYWNjZXNzIHRvIG5vbi12ZW5kb3IgcmVnaXN0ZXJzLiAqLwpAQCAtMTA4Myw2ICsxMDc5LDIxIEBACiAJCWNhcmQtPnJ4X3VuaXQgPSAwOwogCiAJLyoKKwkgKiBTZXQgdXAgdGhlIGludGVycnVwdCBoYW5kbGVyIGxhdGUuCisJICoKKwkgKiBJZiB3ZSBzZXQgaXQgdXAgZWFybGllciwgdGhlIChidWdneSkgaGFyZHdhcmUgZ2VuZXJhdGVzIGEgc3B1cmlvdXMKKwkgKiBpbnRlcnJ1cHQsIGV2ZW4gYmVmb3JlIHRoZSBpbnRlcnJ1cHQgaGFzIGJlZW4gZW5hYmxlZCwgd2l0aAorCSAqIENDQ1JfSU5UeCA9IDAuCisJICoKKwkgKiBXZSByZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbGF0ZSBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgYW55CisJICogc3B1cmlvdXMgaW50ZXJydXB0cywgYW5kIGFsc28gdG8gYXZvaWQgZ2VuZXJhdGlvbiBvZiB0aGF0IGtub3duCisJICogc3B1cmlvdXMgaW50ZXJydXB0IGluIHRoZSBmaXJzdCBwbGFjZS4KKwkgKi8KKwlyZXQgPSBzZGlvX2NsYWltX2lycShmdW5jLCBpZl9zZGlvX2ludGVycnVwdCk7CisJaWYgKHJldCkKKwkJZ290byBkaXNhYmxlOworCisJLyoKIAkgKiBFbmFibGUgaW50ZXJydXB0cyBub3cgdGhhdCBldmVyeXRoaW5nIGlzIHNldCB1cAogCSAqLwogCXNkaW9fd3JpdGViKGZ1bmMsIDB4MGYsIElGX1NESU9fSF9JTlRfTUFTSywgJnJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc2Rpby5oCmluZGV4IGEwZTliYzUuLjRlOTdlOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc2Rpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc2Rpby5oCkBAIC0xNjcsOCArMTY3LDggQEAKIC8qIFJ4IHVuaXQgcmVnaXN0ZXIgKi8KICNkZWZpbmUgQ0FSRF9SWF9VTklUX1JFRwkJMHg2MwogCi0vKiBFdmVudCBoZWFkZXIgTGVuKi8KLSNkZWZpbmUgTVdJRklFWF9FVkVOVF9IRUFERVJfTEVOICAgICAgICAgICA4CisvKiBFdmVudCBoZWFkZXIgbGVuIHcvbyA0IGJ5dGVzIG9mIGludGVyZmFjZSBoZWFkZXIgKi8KKyNkZWZpbmUgTVdJRklFWF9FVkVOVF9IRUFERVJfTEVOICAgICAgICAgICA0CiAKIC8qIE1heCByZXRyeSBudW1iZXIgb2YgQ01ENTMgd3JpdGUgKi8KICNkZWZpbmUgTUFYX1dSSVRFX0lPTUVNX1JFVFJZCQkyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCmluZGV4IDlkZWYxZTUuLmIyZjhiOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCkBAIC0xNjYsNyArMTY2LDYgQEAKIGNvbmZpZyBSVDI4MDBVU0JfUlQ1M1hYCiAgICAgICAgYm9vbCAicnQyODAwdXNiIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBydDUzeHggZGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKICAgICAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotICAgICAgIGRlZmF1bHQgeQogICAgICAgIC0tLWhlbHAtLS0KICAgICAgICAgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDUzeHggd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkgdG8gdGhlCiAgICAgICAgICBydDI4MDBwY2kgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCmluZGV4IDU1NTE4MGQuLmI3MDRlNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKQEAgLTI1MCw3ICsyNTAsOCBAQAogCWlmIChpZWVlODAyMTFfZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkKIAkJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIGZhbHNlKTsKIAotCWlmICh0ZXN0X2JpdChSRVFVSVJFX1BTX0FVVE9XQUtFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpICYmCisJaWYgKHRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykgJiYKKwkgICAgdGVzdF9iaXQoUkVRVUlSRV9QU19BVVRPV0FLRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSAmJgogCSAgICAoaWVlZTgwMjExX2ZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSAmJgogCSAgICAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykpIHsKIAkJYmVhY29uX2RpZmYgPSAobG9uZylqaWZmaWVzIC0gKGxvbmcpcnQyeDAwZGV2LT5sYXN0X2JlYWNvbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwppbmRleCBjMDE4ZDY3YS4uOTM5ODIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwpAQCAtMTQ2LDYgKzE0Niw5IEBACiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9CiAJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgYXV0b3dha2V1cF93b3JrLndvcmspOwogCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm47CisKIAlpZiAocnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIFNUQVRFX0FXQUtFKSkKIAkJRVJST1IocnQyeDAwZGV2LCAiRGV2aWNlIGZhaWxlZCB0byB3YWtldXAuXG4iKTsKIAljbGVhcl9iaXQoQ09ORklHX1BPV0VSU0FWSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CkBAIC0xMTYwLDYgKzExNjMsNyBAQAogCSAqIFN0b3AgYWxsIHdvcmsuCiAJICovCiAJY2FuY2VsX3dvcmtfc3luYygmcnQyeDAwZGV2LT5pbnRmX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5hdXRvd2FrZXVwX3dvcmspOwogCWlmIChydDJ4MDBfaXNfdXNiKHJ0MngwMGRldikpIHsKIAkJZGVsX3RpbWVyX3N5bmMoJnJ0MngwMGRldi0+dHhzdGF0dXNfdGltZXIpOwogCQljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPnJ4ZG9uZV93b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCmluZGV4IGE0MDk1MjguLjlmOGNjYWU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCkBAIC02NjksNiArNjY5LDE0IEBACiAJCQkJCQkJICZyeF9zdGF0dXMsCiAJCQkJCQkJICh1OCAqKSBwZGVzYywgc2tiKTsKIAorCQkJbmV3X3NrYiA9IGRldl9hbGxvY19za2IocnRscGNpLT5yeGJ1ZmZlcnNpemUpOworCQkJaWYgKHVubGlrZWx5KCFuZXdfc2tiKSkgeworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIChDT01QX0lOVFIgfCBDT01QX1JFQ1YpLAorCQkJCQkgREJHX0RNRVNHLAorCQkJCQkgKCJjYW4ndCBhbGxvYyBza2IgZm9yIHJ4XG4iKSk7CisJCQkJZ290byBkb25lOworCQkJfQorCiAJCQlwY2lfdW5tYXBfc2luZ2xlKHJ0bHBjaS0+cGRldiwKIAkJCQkJICooKGRtYV9hZGRyX3QgKikgc2tiLT5jYiksCiAJCQkJCSBydGxwY2ktPnJ4YnVmZmVyc2l6ZSwKQEAgLTY5MCw3ICs2OTgsNyBAQAogCQkJaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKIAkJCWZjID0gcnRsX2dldF9mYyhza2IpOwogCi0JCQlpZiAoIXN0YXRzLmNyYyB8fCAhc3RhdHMuaHdlcnJvcikgeworCQkJaWYgKCFzdGF0cy5jcmMgJiYgIXN0YXRzLmh3ZXJyb3IpIHsKIAkJCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsCiAJCQkJICAgICAgIHNpemVvZihyeF9zdGF0dXMpKTsKIApAQCAtNzU4LDE1ICs3NjYsNyBAQAogCQkJCXJ0bF9scHNfbGVhdmUoaHcpOwogCQkJfQogCi0JCQluZXdfc2tiID0gZGV2X2FsbG9jX3NrYihydGxwY2ktPnJ4YnVmZmVyc2l6ZSk7Ci0JCQlpZiAodW5saWtlbHkoIW5ld19za2IpKSB7Ci0JCQkJUlRfVFJBQ0UocnRscHJpdiwgKENPTVBfSU5UUiB8IENPTVBfUkVDViksCi0JCQkJCSBEQkdfRE1FU0csCi0JCQkJCSAoImNhbid0IGFsbG9jIHNrYiBmb3IgcnhcbiIpKTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9CiAJCQlza2IgPSBuZXdfc2tiOwotCQkJLypza2ItPmRldiA9IGRldjsgKi8KIAogCQkJcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0ucnhfYnVmW3J0bHBjaS0+CiAJCQkJCQkJICAgICByeF9yaW5nCkBAIC0xMTEzLDYgKzExMTMsMTMgQEAKIAogCQlydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5pZHggPSAwOwogCisJCS8qIElmIGFtc2R1XzhrIGlzIGRpc2FibGVkLCBzZXQgYnVmZmVyc2l6ZSB0byA0MDk2LiBUaGlzCisJCSAqIGNoYW5nZSB3aWxsIHJlZHVjZSBtZW1vcnkgZnJhZ21lbnRhdGlvbi4KKwkJICovCisJCWlmIChydGxwY2ktPnJ4YnVmZmVyc2l6ZSA+IDQwOTYgJiYKKwkJICAgIHJ0bHByaXYtPnJ0bGhhbC5kaXNhYmxlX2Ftc2R1XzhrKQorCQkJcnRscGNpLT5yeGJ1ZmZlcnNpemUgPSA0MDk2OworCiAJCWZvciAoaSA9IDA7IGkgPCBydGxwY2ktPnJ4cmluZ2NvdW50OyBpKyspIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgPQogCQkJICAgIGRldl9hbGxvY19za2IocnRscGNpLT5yeGJ1ZmZlcnNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NvbmYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jb25mLmgKaW5kZXggMWFiNmM4Ni4uYzgzZmVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NvbmYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY29uZi5oCkBAIC0xMTU3LDYgKzExNTcsOSBAQAogCS8qIHRpbWUgdG8gd2FpdCBvbiB0aGUgY2hhbm5lbCBmb3IgcGFzc2l2ZSBzY2FucyAoaW4gVFVzKSAqLwogCXUzMiBkd2VsbF90aW1lX3Bhc3NpdmU7CiAKKwkvKiB0aW1lIHRvIHdhaXQgb24gdGhlIGNoYW5uZWwgZm9yIERGUyBzY2FucyAoaW4gVFVzKSAqLworCXUzMiBkd2VsbF90aW1lX2RmczsKKwogCS8qIG51bWJlciBvZiBwcm9iZSByZXF1ZXN0cyB0byBzZW5kIG9uIGVhY2ggY2hhbm5lbCBpbiBhY3RpdmUgc2NhbnMgKi8KIAl1OCBudW1fcHJvYmVfcmVxczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9tYWluLmMKaW5kZXggYmMwMGU1Mi4uZTY0OTdkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvbWFpbi5jCkBAIC0zMTEsNiArMzExLDcgQEAKIAkJLm1pbl9kd2VsbF90aW1lX2FjdGl2ZSA9IDgsCiAJCS5tYXhfZHdlbGxfdGltZV9hY3RpdmUgPSAzMCwKIAkJLmR3ZWxsX3RpbWVfcGFzc2l2ZSAgICA9IDEwMCwKKwkJLmR3ZWxsX3RpbWVfZGZzICAgICAgICA9IDE1MCwKIAkJLm51bV9wcm9iZV9yZXFzICAgICAgICA9IDIsCiAJCS5yc3NpX3RocmVzaG9sZCAgICAgICAgPSAtOTAsCiAJCS5zbnJfdGhyZXNob2xkICAgICAgICAgPSAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmMKaW5kZXggZjM3ZTVhMy4uNTZmNzZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Nhbi5jCkBAIC0zMzEsMTYgKzMzMSwyMiBAQAogCXN0cnVjdCBjb25mX3NjaGVkX3NjYW5fc2V0dGluZ3MgKmMgPSAmd2wtPmNvbmYuc2NoZWRfc2NhbjsKIAlpbnQgaSwgajsKIAl1MzIgZmxhZ3M7CisJYm9vbCBmb3JjZV9wYXNzaXZlID0gIXJlcS0+bl9zc2lkczsKIAogCWZvciAoaSA9IDAsIGogPSBzdGFydDsKIAkgICAgIGkgPCByZXEtPm5fY2hhbm5lbHMgJiYgaiA8IE1BWF9DSEFOTkVMU19BTExfQkFORFM7CiAJICAgICBpKyspIHsKIAkJZmxhZ3MgPSByZXEtPmNoYW5uZWxzW2ldLT5mbGFnczsKIAotCQlpZiAoIShmbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSAmJgotCQkgICAgKChmbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikgPT0gcGFzc2l2ZSkgJiYKLQkJICAgICgoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikgPT0gcmFkYXIpICYmCi0JCSAgICAocmVxLT5jaGFubmVsc1tpXS0+YmFuZCA9PSBiYW5kKSkgeworCQlpZiAoZm9yY2VfcGFzc2l2ZSkKKwkJCWZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKworCQlpZiAoKHJlcS0+Y2hhbm5lbHNbaV0tPmJhbmQgPT0gYmFuZCkgJiYKKwkJICAgICEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkgJiYKKwkJICAgICghIShmbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSA9PSByYWRhcikgJiYKKwkJICAgIC8qIGlmIHJhZGFyIGlzIHNldCwgd2UgaWdub3JlIHRoZSBwYXNzaXZlIGZsYWcgKi8KKwkJICAgIChyYWRhciB8fAorCQkgICAgICEhKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKSA9PSBwYXNzaXZlKSkgewogCQkJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICJiYW5kICVkLCBjZW50ZXJfZnJlcSAlZCAiLAogCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+YmFuZCwKIAkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPmNlbnRlcl9mcmVxKTsKQEAgLTM1MCw3ICszNTYsMTIgQEAKIAkJCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAibWF4X3Bvd2VyICVkIiwKIAkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPm1heF9wb3dlcik7CiAKLQkJCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikgeworCQkJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fUkFEQVIpIHsKKwkJCQljaGFubmVsc1tqXS5mbGFncyB8PSBTQ0FOX0NIQU5ORUxfRkxBR1NfREZTOworCQkJCWNoYW5uZWxzW2pdLnBhc3NpdmVfZHVyYXRpb24gPQorCQkJCQljcHVfdG9fbGUxNihjLT5kd2VsbF90aW1lX2Rmcyk7CisJCQl9CisJCQllbHNlIGlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikgewogCQkJCWNoYW5uZWxzW2pdLnBhc3NpdmVfZHVyYXRpb24gPQogCQkJCQljcHVfdG9fbGUxNihjLT5kd2VsbF90aW1lX3Bhc3NpdmUpOwogCQkJfSBlbHNlIHsKQEAgLTM1OSw3ICszNzAsNyBAQAogCQkJCWNoYW5uZWxzW2pdLm1heF9kdXJhdGlvbiA9CiAJCQkJCWNwdV90b19sZTE2KGMtPm1heF9kd2VsbF90aW1lX2FjdGl2ZSk7CiAJCQl9Ci0JCQljaGFubmVsc1tqXS50eF9wb3dlcl9hdHQgPSByZXEtPmNoYW5uZWxzW2pdLT5tYXhfcG93ZXI7CisJCQljaGFubmVsc1tqXS50eF9wb3dlcl9hdHQgPSByZXEtPmNoYW5uZWxzW2ldLT5tYXhfcG93ZXI7CiAJCQljaGFubmVsc1tqXS5jaGFubmVsID0gcmVxLT5jaGFubmVsc1tpXS0+aHdfdmFsdWU7CiAKIAkJCWorKzsKQEAgLTM4Niw3ICszOTcsMTEgQEAKIAkJd2wxMjcxX3NjYW5fZ2V0X3NjaGVkX3NjYW5fY2hhbm5lbHMod2wsIHJlcSwgY2ZnLT5jaGFubmVscywKIAkJCQkJCSAgICBJRUVFODAyMTFfQkFORF8yR0haLAogCQkJCQkJICAgIGZhbHNlLCBmYWxzZSwgaWR4KTsKLQlpZHggKz0gY2ZnLT5hY3RpdmVbMF07CisJLyoKKwkgKiA1R0h6IGNoYW5uZWxzIGFsd2F5cyBzdGFydCBhdCBwb3NpdGlvbiAxNCwgbm90IGltbWVkaWF0ZWx5CisJICogYWZ0ZXIgdGhlIGxhc3QgMi40R0h6IGNoYW5uZWwKKwkgKi8KKwlpZHggPSAxNDsKIAogCWNmZy0+cGFzc2l2ZVsxXSA9CiAJCXdsMTI3MV9zY2FuX2dldF9zY2hlZF9zY2FuX2NoYW5uZWxzKHdsLCByZXEsIGNmZy0+Y2hhbm5lbHMsCkBAIC0zOTQsMjIgKzQwOSwyMyBAQAogCQkJCQkJICAgIGZhbHNlLCB0cnVlLCBpZHgpOwogCWlkeCArPSBjZmctPnBhc3NpdmVbMV07CiAKLQljZmctPmFjdGl2ZVsxXSA9Ci0JCXdsMTI3MV9zY2FuX2dldF9zY2hlZF9zY2FuX2NoYW5uZWxzKHdsLCByZXEsIGNmZy0+Y2hhbm5lbHMsCi0JCQkJCQkgICAgSUVFRTgwMjExX0JBTkRfNUdIWiwKLQkJCQkJCSAgICBmYWxzZSwgZmFsc2UsIDE0KTsKLQlpZHggKz0gY2ZnLT5hY3RpdmVbMV07Ci0KIAljZmctPmRmcyA9CiAJCXdsMTI3MV9zY2FuX2dldF9zY2hlZF9zY2FuX2NoYW5uZWxzKHdsLCByZXEsIGNmZy0+Y2hhbm5lbHMsCiAJCQkJCQkgICAgSUVFRTgwMjExX0JBTkRfNUdIWiwKLQkJCQkJCSAgICB0cnVlLCBmYWxzZSwgaWR4KTsKKwkJCQkJCSAgICB0cnVlLCB0cnVlLCBpZHgpOwogCWlkeCArPSBjZmctPmRmczsKIAorCWNmZy0+YWN0aXZlWzFdID0KKwkJd2wxMjcxX3NjYW5fZ2V0X3NjaGVkX3NjYW5fY2hhbm5lbHMod2wsIHJlcSwgY2ZnLT5jaGFubmVscywKKwkJCQkJCSAgICBJRUVFODAyMTFfQkFORF81R0haLAorCQkJCQkJICAgIGZhbHNlLCBmYWxzZSwgaWR4KTsKKwlpZHggKz0gY2ZnLT5hY3RpdmVbMV07CisKIAl3bDEyNzFfZGVidWcoREVCVUdfU0NBTiwgIiAgICAyLjRHSHo6IGFjdGl2ZSAlZCBwYXNzaXZlICVkIiwKIAkJICAgICBjZmctPmFjdGl2ZVswXSwgY2ZnLT5wYXNzaXZlWzBdKTsKIAl3bDEyNzFfZGVidWcoREVCVUdfU0NBTiwgIiAgICA1R0h6OiBhY3RpdmUgJWQgcGFzc2l2ZSAlZCIsCiAJCSAgICAgY2ZnLT5hY3RpdmVbMV0sIGNmZy0+cGFzc2l2ZVsxXSk7CisJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICIgICAgREZTOiAlZCIsIGNmZy0+ZGZzKTsKIAogCXJldHVybiBpZHg7CiB9CkBAIC00MjEsNiArNDM3LDcgQEAKIAlzdHJ1Y3Qgd2wxMjcxX2NtZF9zY2hlZF9zY2FuX2NvbmZpZyAqY2ZnID0gTlVMTDsKIAlzdHJ1Y3QgY29uZl9zY2hlZF9zY2FuX3NldHRpbmdzICpjID0gJndsLT5jb25mLnNjaGVkX3NjYW47CiAJaW50IGksIHRvdGFsX2NoYW5uZWxzLCByZXQ7CisJYm9vbCBmb3JjZV9wYXNzaXZlID0gIXJlcS0+bl9zc2lkczsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgc2NoZWRfc2NhbiBzY2FuIGNvbmZpZyIpOwogCkBAIC00NDQsNyArNDYxLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgU0NBTl9NQVhfQ1lDTEVfSU5URVJWQUxTOyBpKyspCiAJCWNmZy0+aW50ZXJ2YWxzW2ldID0gY3B1X3RvX2xlMzIocmVxLT5pbnRlcnZhbCk7CiAKLQlpZiAocmVxLT5zc2lkc1swXS5zc2lkX2xlbiAmJiByZXEtPnNzaWRzWzBdLnNzaWQpIHsKKwlpZiAoIWZvcmNlX3Bhc3NpdmUgJiYgcmVxLT5zc2lkc1swXS5zc2lkX2xlbiAmJiByZXEtPnNzaWRzWzBdLnNzaWQpIHsKIAkJY2ZnLT5maWx0ZXJfdHlwZSA9IFNDQU5fU1NJRF9GSUxURVJfU1BFQ0lGSUM7CiAJCWNmZy0+c3NpZF9sZW4gPSByZXEtPnNzaWRzWzBdLnNzaWRfbGVuOwogCQltZW1jcHkoY2ZnLT5zc2lkLCByZXEtPnNzaWRzWzBdLnNzaWQsCkBAIC00NjEsNyArNDc4LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGNmZy0+YWN0aXZlWzBdKSB7CisJaWYgKCFmb3JjZV9wYXNzaXZlICYmIGNmZy0+YWN0aXZlWzBdKSB7CiAJCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHdsLCByZXEtPnNzaWRzWzBdLnNzaWQsCiAJCQkJCQkgcmVxLT5zc2lkc1swXS5zc2lkX2xlbiwKIAkJCQkJCSBpZXMtPmllW0lFRUU4MDIxMV9CQU5EXzJHSFpdLApAQCAtNDczLDcgKzQ5MCw3IEBACiAJCX0KIAl9CiAKLQlpZiAoY2ZnLT5hY3RpdmVbMV0pIHsKKwlpZiAoIWZvcmNlX3Bhc3NpdmUgJiYgY2ZnLT5hY3RpdmVbMV0pIHsKIAkJcmV0ID0gd2wxMjcxX2NtZF9idWlsZF9wcm9iZV9yZXEod2wsICByZXEtPnNzaWRzWzBdLnNzaWQsCiAJCQkJCQkgcmVxLT5zc2lkc1swXS5zc2lkX2xlbiwKIAkJCQkJCSBpZXMtPmllW0lFRUU4MDIxMV9CQU5EXzVHSFpdLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmgKaW5kZXggYzgzMzE5NS4uYTBiNmM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Nhbi5oCkBAIC0xMzcsNiArMTM3LDkgQEAKIAlTQ0FOX0JTU19UWVBFX0FOWSwKIH07CiAKKyNkZWZpbmUgU0NBTl9DSEFOTkVMX0ZMQUdTX0RGUwkJQklUKDApCisjZGVmaW5lIFNDQU5fQ0hBTk5FTF9GTEFHU19ERlNfRU5BQkxFRAlCSVQoMSkKKwogc3RydWN0IGNvbm5fc2Nhbl9jaF9wYXJhbXMgewogCV9fbGUxNiBtaW5fZHVyYXRpb247CiAJX19sZTE2IG1heF9kdXJhdGlvbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKaW5kZXggMGU4MTk5NC4uNjMxMTk0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKQEAgLTE1MzMsNiArMTUzMywzMSBAQAogbW9kdWxlX2luaXQodXNiX2luaXQpOwogbW9kdWxlX2V4aXQodXNiX2V4aXQpOwogCitzdGF0aWMgaW50IHpkX2VwX3JlZ3Nfb3V0X21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdm9pZCAqZGF0YSwgaW50IGxlbiwKKwkJCSAgICAgIGludCAqYWN0dWFsX2xlbmd0aCwgaW50IHRpbWVvdXQpCit7CisJLyogSW4gVVNCIDIuMCBtb2RlIEVQX1JFR1NfT1VUIGVuZHBvaW50IGlzIGludGVycnVwdCB0eXBlLiBIb3dldmVyIGluCisJICogVVNCIDEuMSBtb2RlIGVuZHBvaW50IGlzIGJ1bGsuIFNlbGVjdCBjb3JyZWN0IHR5cGUgVVJCIGJ5IGVuZHBvaW50CisJICogZGVzY3JpcHRvci4KKwkgKi8KKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXVuc2lnbmVkIGludCBwaXBlOworCisJcGlwZSA9IHVzYl9zbmRpbnRwaXBlKHVkZXYsIEVQX1JFR1NfT1VUKTsKKwllcCA9IHVzYl9waXBlX2VuZHBvaW50KHVkZXYsIHBpcGUpOworCWlmICghZXApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2ludCgmZXAtPmRlc2MpKSB7CisJCXJldHVybiB1c2JfaW50ZXJydXB0X21zZyh1ZGV2LCBwaXBlLCBkYXRhLCBsZW4sCisJCQkJCSBhY3R1YWxfbGVuZ3RoLCB0aW1lb3V0KTsKKwl9IGVsc2UgeworCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIEVQX1JFR1NfT1VUKTsKKwkJcmV0dXJuIHVzYl9idWxrX21zZyh1ZGV2LCBwaXBlLCBkYXRhLCBsZW4sIGFjdHVhbF9sZW5ndGgsCisJCQkJICAgIHRpbWVvdXQpOworCX0KK30KKwogc3RhdGljIGludCB1c2JfaW50X3JlZ3NfbGVuZ3RoKHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlyZXR1cm4gc2l6ZW9mKHN0cnVjdCB1c2JfaW50X3JlZ3MpICsgY291bnQgKiBzaXplb2Yoc3RydWN0IHJlZ19kYXRhKTsKQEAgLTE2NDgsMTUgKzE2NzMsMTQgQEAKIAogCXVkZXYgPSB6ZF91c2JfdG9fdXNiZGV2KHVzYik7CiAJcHJlcGFyZV9yZWFkX3JlZ3NfaW50KHVzYik7Ci0JciA9IHVzYl9pbnRlcnJ1cHRfbXNnKHVkZXYsIHVzYl9zbmRpbnRwaXBlKHVkZXYsIEVQX1JFR1NfT1VUKSwKLQkJCSAgICAgIHJlcSwgcmVxX2xlbiwgJmFjdHVhbF9yZXFfbGVuLCA1MCAvKiBtcyAqLyk7CisJciA9IHpkX2VwX3JlZ3Nfb3V0X21zZyh1ZGV2LCByZXEsIHJlcV9sZW4sICZhY3R1YWxfcmVxX2xlbiwgNTAgLyptcyovKTsKIAlpZiAocikgewogCQlkZXZfZGJnX2YoemRfdXNiX2Rldih1c2IpLAotCQkJImVycm9yIGluIHVzYl9pbnRlcnJ1cHRfbXNnKCkuIEVycm9yIG51bWJlciAlZFxuIiwgcik7CisJCQkiZXJyb3IgaW4gemRfZXBfcmVnc19vdXRfbXNnKCkuIEVycm9yIG51bWJlciAlZFxuIiwgcik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCWlmIChyZXFfbGVuICE9IGFjdHVhbF9yZXFfbGVuKSB7Ci0JCWRldl9kYmdfZih6ZF91c2JfZGV2KHVzYiksICJlcnJvciBpbiB1c2JfaW50ZXJydXB0X21zZygpXG4iCisJCWRldl9kYmdfZih6ZF91c2JfZGV2KHVzYiksICJlcnJvciBpbiB6ZF9lcF9yZWdzX291dF9tc2coKVxuIgogCQkJIiByZXFfbGVuICVkICE9IGFjdHVhbF9yZXFfbGVuICVkXG4iLAogCQkJcmVxX2xlbiwgYWN0dWFsX3JlcV9sZW4pOwogCQlyID0gLUVJTzsKQEAgLTE4MTgsOSArMTg0MiwxNyBAQAogCQlydy0+dmFsdWUgPSBjcHVfdG9fbGUxNihpb3JlcXNbaV0udmFsdWUpOwogCX0KIAotCXVzYl9maWxsX2ludF91cmIodXJiLCB1ZGV2LCB1c2Jfc25kaW50cGlwZSh1ZGV2LCBFUF9SRUdTX09VVCksCi0JCQkgcmVxLCByZXFfbGVuLCBpb3dyaXRlMTZ2X3VyYl9jb21wbGV0ZSwgdXNiLAotCQkJIGVwLT5kZXNjLmJJbnRlcnZhbCk7CisJLyogSW4gVVNCIDIuMCBtb2RlIGVuZHBvaW50IGlzIGludGVycnVwdCB0eXBlLiBIb3dldmVyIGluIFVTQiAxLjEgbW9kZQorCSAqIGVuZHBvaW50IGlzIGJ1bGsuIFNlbGVjdCBjb3JyZWN0IHR5cGUgVVJCIGJ5IGVuZHBvaW50IGRlc2NyaXB0b3IuCisJICovCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2ludCgmZXAtPmRlc2MpKQorCQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgdWRldiwgdXNiX3NuZGludHBpcGUodWRldiwgRVBfUkVHU19PVVQpLAorCQkJCSByZXEsIHJlcV9sZW4sIGlvd3JpdGUxNnZfdXJiX2NvbXBsZXRlLCB1c2IsCisJCQkJIGVwLT5kZXNjLmJJbnRlcnZhbCk7CisJZWxzZQorCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVkZXYsIHVzYl9zbmRidWxrcGlwZSh1ZGV2LCBFUF9SRUdTX09VVCksCisJCQkJICByZXEsIHJlcV9sZW4sIGlvd3JpdGUxNnZfdXJiX2NvbXBsZXRlLCB1c2IpOworCiAJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfRlJFRV9CVUZGRVI7CiAKIAkvKiBTdWJtaXQgcHJldmlvdXMgVVJCICovCkBAIC0xOTI0LDE1ICsxOTU2LDE0IEBACiAJfQogCiAJdWRldiA9IHpkX3VzYl90b191c2JkZXYodXNiKTsKLQlyID0gdXNiX2ludGVycnVwdF9tc2codWRldiwgdXNiX3NuZGludHBpcGUodWRldiwgRVBfUkVHU19PVVQpLAotCQkJICAgICAgcmVxLCByZXFfbGVuLCAmYWN0dWFsX3JlcV9sZW4sIDUwIC8qIG1zICovKTsKKwlyID0gemRfZXBfcmVnc19vdXRfbXNnKHVkZXYsIHJlcSwgcmVxX2xlbiwgJmFjdHVhbF9yZXFfbGVuLCA1MCAvKm1zKi8pOwogCWlmIChyKSB7CiAJCWRldl9kYmdfZih6ZF91c2JfZGV2KHVzYiksCi0JCQkiZXJyb3IgaW4gdXNiX2ludGVycnVwdF9tc2coKS4gRXJyb3IgbnVtYmVyICVkXG4iLCByKTsKKwkJCSJlcnJvciBpbiB6ZF9lcF9yZWdzX291dF9tc2coKS4gRXJyb3IgbnVtYmVyICVkXG4iLCByKTsKIAkJZ290byBvdXQ7CiAJfQogCWlmIChyZXFfbGVuICE9IGFjdHVhbF9yZXFfbGVuKSB7Ci0JCWRldl9kYmdfZih6ZF91c2JfZGV2KHVzYiksICJlcnJvciBpbiB1c2JfaW50ZXJydXB0X21zZygpIgorCQlkZXZfZGJnX2YoemRfdXNiX2Rldih1c2IpLCAiZXJyb3IgaW4gemRfZXBfcmVnc19vdXRfbXNnKCkiCiAJCQkiIHJlcV9sZW4gJWQgIT0gYWN0dWFsX3JlcV9sZW4gJWRcbiIsCiAJCQlyZXFfbGVuLCBhY3R1YWxfcmVxX2xlbik7CiAJCXIgPSAtRUlPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCmluZGV4IGEzOTg0ZjQuLmYzNGI1YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKQEAgLTE0MSw2ICsxNDEsMTMgQEAKIAkubm90aWZpZXJfY2FsbCA9IG1vZHVsZV9sb2FkX25vdGlmeSwKIH07CiAKK3N0YXRpYyB2b2lkIGZyZWVfYWxsX3Rhc2tzKHZvaWQpCit7CisJLyogbWFrZSBzdXJlIHdlIGRvbid0IGxlYWsgdGFzayBzdHJ1Y3RzICovCisJcHJvY2Vzc190YXNrX21vcnR1YXJ5KCk7CisJcHJvY2Vzc190YXNrX21vcnR1YXJ5KCk7Cit9CisKIGludCBzeW5jX3N0YXJ0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTE0OCw4ICsxNTUsNiBAQAogCWlmICghemFsbG9jX2NwdW1hc2tfdmFyKCZtYXJrZWRfY3B1cywgR0ZQX0tFUk5FTCkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKLQogCWVyciA9IHRhc2tfaGFuZG9mZl9yZWdpc3RlcigmdGFza19mcmVlX25iKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDE7CkBAIC0xNjYsNyArMTcxLDYgQEAKIAlzdGFydF9jcHVfd29yaygpOwogCiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZidWZmZXJfbXV0ZXgpOwogCXJldHVybiBlcnI7CiBvdXQ0OgogCXByb2ZpbGVfZXZlbnRfdW5yZWdpc3RlcihQUk9GSUxFX01VTk1BUCwgJm11bm1hcF9uYik7CkBAIC0xNzQsNiArMTc4LDcgQEAKIAlwcm9maWxlX2V2ZW50X3VucmVnaXN0ZXIoUFJPRklMRV9UQVNLX0VYSVQsICZ0YXNrX2V4aXRfbmIpOwogb3V0MjoKIAl0YXNrX2hhbmRvZmZfdW5yZWdpc3RlcigmdGFza19mcmVlX25iKTsKKwlmcmVlX2FsbF90YXNrcygpOwogb3V0MToKIAlmcmVlX2NwdW1hc2tfdmFyKG1hcmtlZF9jcHVzKTsKIAlnb3RvIG91dDsKQEAgLTE4MiwyMCArMTg3LDE2IEBACiAKIHZvaWQgc3luY19zdG9wKHZvaWQpCiB7Ci0JLyogZmx1c2ggYnVmZmVycyAqLwotCW11dGV4X2xvY2soJmJ1ZmZlcl9tdXRleCk7CiAJZW5kX2NwdV93b3JrKCk7CiAJdW5yZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoJm1vZHVsZV9sb2FkX25iKTsKIAlwcm9maWxlX2V2ZW50X3VucmVnaXN0ZXIoUFJPRklMRV9NVU5NQVAsICZtdW5tYXBfbmIpOwogCXByb2ZpbGVfZXZlbnRfdW5yZWdpc3RlcihQUk9GSUxFX1RBU0tfRVhJVCwgJnRhc2tfZXhpdF9uYik7CiAJdGFza19oYW5kb2ZmX3VucmVnaXN0ZXIoJnRhc2tfZnJlZV9uYik7Ci0JbXV0ZXhfdW5sb2NrKCZidWZmZXJfbXV0ZXgpOworCWJhcnJpZXIoKTsJCQkvKiBkbyBhbGwgb2YgdGhlIGFib3ZlIGZpcnN0ICovCisKIAlmbHVzaF9jcHVfd29yaygpOwogCi0JLyogbWFrZSBzdXJlIHdlIGRvbid0IGxlYWsgdGFzayBzdHJ1Y3RzICovCi0JcHJvY2Vzc190YXNrX21vcnR1YXJ5KCk7Ci0JcHJvY2Vzc190YXNrX21vcnR1YXJ5KCk7Ci0KKwlmcmVlX2FsbF90YXNrcygpOwogCWZyZWVfY3B1bWFza192YXIobWFya2VkX2NwdXMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCmluZGV4IGM4NWY3NDQuLjA5NDMwOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCkBAIC01MSw2ICs1MSw3IEBACiBvYmotJChDT05GSUdfTU4xMDMwMCkgKz0gc2V0dXAtYnVzLm8KIG9iai0kKENPTkZJR19NSUNST0JMQVpFKSArPSBzZXR1cC1idXMubwogb2JqLSQoQ09ORklHX1RJTEUpICs9IHNldHVwLWJ1cy5vIHNldHVwLWlycS5vCitvYmotJChDT05GSUdfU1BBUkNfTEVPTikgKz0gc2V0dXAtYnVzLm8gc2V0dXAtaXJxLm8KIAogIwogIyBBQ1BJIFJlbGF0ZWQgUENJIEZXIEZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hci5jIGIvZHJpdmVycy9wY2kvZG1hci5jCmluZGV4IDEyZTAyYmYuLjNkYzliZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2RtYXIuYworKysgYi9kcml2ZXJzL3BjaS9kbWFyLmMKQEAgLTY5OCwxMiArNjk4LDcgQEAKIAl7CiAjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAkJc3RydWN0IGFjcGlfdGFibGVfZG1hciAqZG1hcjsKLQkJLyoKLQkJICogZm9yIG5vdyB3ZSB3aWxsIGRpc2FibGUgZG1hLXJlbWFwcGluZyB3aGVuIGludGVycnVwdAotCQkgKiByZW1hcHBpbmcgaXMgZW5hYmxlZC4KLQkJICogV2hlbiBzdXBwb3J0IGZvciBxdWV1ZWQgaW52YWxpZGF0aW9uIGZvciBJT1RMQiBpbnZhbGlkYXRpb24KLQkJICogaXMgYWRkZWQsIHdlIHdpbGwgbm90IG5lZWQgdGhpcyBhbnkgbW9yZS4KLQkJICovCisKIAkJZG1hciA9IChzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICopIGRtYXJfdGJsOwogCQlpZiAocmV0ICYmIGNwdV9oYXNfeDJhcGljICYmIGRtYXItPmZsYWdzICYgMHgxKQogCQkJcHJpbnRrKEtFUk5fSU5GTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggNmFmNmI2Mi4uZjAyYzM0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC00Nyw2ICs0Nyw4IEBACiAjZGVmaW5lIFJPT1RfU0laRQkJVlREX1BBR0VfU0laRQogI2RlZmluZSBDT05URVhUX1NJWkUJCVZURF9QQUdFX1NJWkUKIAorI2RlZmluZSBJU19CUklER0VfSE9TVF9ERVZJQ0UocGRldikgXAorCQkJICAgICgocGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9IT1NUKQogI2RlZmluZSBJU19HRlhfREVWSUNFKHBkZXYpICgocGRldi0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpCiAjZGVmaW5lIElTX0lTQV9ERVZJQ0UocGRldikgKChwZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX0lTQSkKICNkZWZpbmUgSVNfQVpBTElBKHBkZXYpICgocGRldiktPnZlbmRvciA9PSAweDgwODYgJiYgKHBkZXYpLT5kZXZpY2UgPT0gMHgzYTNlKQpAQCAtMTE2LDYgKzExOCwxMSBAQAogCXJldHVybiAocGZuICsgbGV2ZWxfc2l6ZShsZXZlbCkgLSAxKSAmIGxldmVsX21hc2sobGV2ZWwpOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHZsX3RvX25yX3BhZ2VzKHVuc2lnbmVkIGludCBsdmwpCit7CisJcmV0dXJuICAxIDw8ICgobHZsIC0gMSkgKiBMRVZFTF9TVFJJREUpOworfQorCiAvKiBWVC1kIHBhZ2VzIG11c3QgYWx3YXlzIGJlIF9zbWFsbGVyXyB0aGFuIE1NIHBhZ2VzLiBPdGhlcndpc2UgdGhpbmdzCiAgICBhcmUgbmV2ZXIgZ29pbmcgdG8gd29yay4gKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkbWFfdG9fbW1fcGZuKHVuc2lnbmVkIGxvbmcgZG1hX3BmbikKQEAgLTE0Myw2ICsxNTAsMTIgQEAKIHN0YXRpYyBpbnQgcndiZl9xdWlyazsKIAogLyoKKyAqIHNldCB0byAxIHRvIHBhbmljIGtlcm5lbCBpZiBjYW4ndCBzdWNjZXNzZnVsbHkgZW5hYmxlIFZULWQKKyAqICh1c2VkIHdoZW4ga2VybmVsIGlzIGxhdW5jaGVkIHcvIFRYVCkKKyAqLworc3RhdGljIGludCBmb3JjZV9vbiA9IDA7CisKKy8qCiAgKiAwOiBQcmVzZW50CiAgKiAxLTExOiBSZXNlcnZlZAogICogMTItNjM6IENvbnRleHQgUHRyICgxMiAtIChoYXctMSkpCkBAIC0zMzgsNiArMzUxLDkgQEAKIAlpbnQJCWlvbW11X2NvaGVyZW5jeTsvKiBpbmRpY2F0ZSBjb2hlcmVuY3kgb2YgaW9tbXUgYWNjZXNzICovCiAJaW50CQlpb21tdV9zbm9vcGluZzsgLyogaW5kaWNhdGUgc25vb3BpbmcgY29udHJvbCBmZWF0dXJlKi8KIAlpbnQJCWlvbW11X2NvdW50OwkvKiByZWZlcmVuY2UgY291bnQgb2YgaW9tbXUgKi8KKwlpbnQJCWlvbW11X3N1cGVycGFnZTsvKiBMZXZlbCBvZiBzdXBlcnBhZ2VzIHN1cHBvcnRlZDoKKwkJCQkJICAgMCA9PSA0S2lCIChubyBzdXBlcnBhZ2VzKSwgMSA9PSAyTWlCLAorCQkJCQkgICAyID09IDFHaUIsIDMgPT0gNTEyR2lCLCA0ID09IDFUaUIgKi8KIAlzcGlubG9ja190CWlvbW11X2xvY2s7CS8qIHByb3RlY3QgaW9tbXUgc2V0IGluIGRvbWFpbiAqLwogCXU2NAkJbWF4X2FkZHI7CS8qIG1heGltdW0gbWFwcGVkIGFkZHJlc3MgKi8KIH07CkBAIC0zODcsNiArNDAzLDcgQEAKIHN0YXRpYyBpbnQgZG1hcl9tYXBfZ2Z4ID0gMTsKIHN0YXRpYyBpbnQgZG1hcl9mb3JjZWRhYzsKIHN0YXRpYyBpbnQgaW50ZWxfaW9tbXVfc3RyaWN0Oworc3RhdGljIGludCBpbnRlbF9pb21tdV9zdXBlcnBhZ2UgPSAxOwogCiAjZGVmaW5lIERVTU1ZX0RFVklDRV9ET01BSU5fSU5GTyAoKHN0cnVjdCBkZXZpY2VfZG9tYWluX2luZm8gKikoLTEpKQogc3RhdGljIERFRklORV9TUElOTE9DSyhkZXZpY2VfZG9tYWluX2xvY2spOwpAQCAtNDE3LDYgKzQzNCwxMCBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJCSJJbnRlbC1JT01NVTogZGlzYWJsZSBiYXRjaGVkIElPVExCIGZsdXNoXG4iKTsKIAkJCWludGVsX2lvbW11X3N0cmljdCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAic3Bfb2ZmIiwgNikpIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkiSW50ZWwtSU9NTVU6IGRpc2FibGUgc3VwcG9ydGVkIHN1cGVyIHBhZ2VcbiIpOworCQkJaW50ZWxfaW9tbXVfc3VwZXJwYWdlID0gMDsKIAkJfQogCiAJCXN0ciArPSBzdHJjc3BuKHN0ciwgIiwiKTsKQEAgLTU1NSwxMSArNTc2LDMyIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBkb21haW5fdXBkYXRlX2lvbW11X3N1cGVycGFnZShzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbikKK3sKKwlpbnQgaSwgbWFzayA9IDB4ZjsKKworCWlmICghaW50ZWxfaW9tbXVfc3VwZXJwYWdlKSB7CisJCWRvbWFpbi0+aW9tbXVfc3VwZXJwYWdlID0gMDsKKwkJcmV0dXJuOworCX0KKworCWRvbWFpbi0+aW9tbXVfc3VwZXJwYWdlID0gNDsgLyogMVRpQiAqLworCisJZm9yX2VhY2hfc2V0X2JpdChpLCAmZG9tYWluLT5pb21tdV9ibXAsIGdfbnVtX29mX2lvbW11cykgeworCQltYXNrIHw9IGNhcF9zdXBlcl9wYWdlX3ZhbChnX2lvbW11c1tpXS0+Y2FwKTsKKwkJaWYgKCFtYXNrKSB7CisJCQlicmVhazsKKwkJfQorCX0KKwlkb21haW4tPmlvbW11X3N1cGVycGFnZSA9IGZscyhtYXNrKTsKK30KKwogLyogU29tZSBjYXBhYmlsaXRpZXMgbWF5IGJlIGRpZmZlcmVudCBhY3Jvc3MgaW9tbXVzICovCiBzdGF0aWMgdm9pZCBkb21haW5fdXBkYXRlX2lvbW11X2NhcChzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbikKIHsKIAlkb21haW5fdXBkYXRlX2lvbW11X2NvaGVyZW5jeShkb21haW4pOwogCWRvbWFpbl91cGRhdGVfaW9tbXVfc25vb3BpbmcoZG9tYWluKTsKKwlkb21haW5fdXBkYXRlX2lvbW11X3N1cGVycGFnZShkb21haW4pOwogfQogCiBzdGF0aWMgc3RydWN0IGludGVsX2lvbW11ICpkZXZpY2VfdG9faW9tbXUoaW50IHNlZ21lbnQsIHU4IGJ1cywgdTggZGV2Zm4pCkBAIC02ODksMjMgKzczMSwzMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9wdGUgKnBmbl90b19kbWFfcHRlKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcGZuKQorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbGFyZ2VfbGV2ZWwpCiB7CiAJaW50IGFkZHJfd2lkdGggPSBhZ2F3X3RvX3dpZHRoKGRvbWFpbi0+YWdhdykgLSBWVERfUEFHRV9TSElGVDsKIAlzdHJ1Y3QgZG1hX3B0ZSAqcGFyZW50LCAqcHRlID0gTlVMTDsKIAlpbnQgbGV2ZWwgPSBhZ2F3X3RvX2xldmVsKGRvbWFpbi0+YWdhdyk7Ci0JaW50IG9mZnNldDsKKwlpbnQgb2Zmc2V0LCB0YXJnZXRfbGV2ZWw7CiAKIAlCVUdfT04oIWRvbWFpbi0+cGdkKTsKIAlCVUdfT04oYWRkcl93aWR0aCA8IEJJVFNfUEVSX0xPTkcgJiYgcGZuID4+IGFkZHJfd2lkdGgpOwogCXBhcmVudCA9IGRvbWFpbi0+cGdkOwogCisJLyogU2VhcmNoIHB0ZSAqLworCWlmICghbGFyZ2VfbGV2ZWwpCisJCXRhcmdldF9sZXZlbCA9IDE7CisJZWxzZQorCQl0YXJnZXRfbGV2ZWwgPSBsYXJnZV9sZXZlbDsKKwogCXdoaWxlIChsZXZlbCA+IDApIHsKIAkJdm9pZCAqdG1wX3BhZ2U7CiAKIAkJb2Zmc2V0ID0gcGZuX2xldmVsX29mZnNldChwZm4sIGxldmVsKTsKIAkJcHRlID0gJnBhcmVudFtvZmZzZXRdOwotCQlpZiAobGV2ZWwgPT0gMSkKKwkJaWYgKCFsYXJnZV9sZXZlbCAmJiAocHRlLT52YWwgJiBETUFfUFRFX0xBUkdFX1BBR0UpKQorCQkJYnJlYWs7CisJCWlmIChsZXZlbCA9PSB0YXJnZXRfbGV2ZWwpCiAJCQlicmVhazsKIAogCQlpZiAoIWRtYV9wdGVfcHJlc2VudChwdGUpKSB7CkBAIC03MzMsMTAgKzc4MywxMSBAQAogCXJldHVybiBwdGU7CiB9CiAKKwogLyogcmV0dXJuIGFkZHJlc3MncyBwdGUgYXQgc3BlY2lmaWMgbGV2ZWwgKi8KIHN0YXRpYyBzdHJ1Y3QgZG1hX3B0ZSAqZG1hX3Bmbl9sZXZlbF9wdGUoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sCiAJCQkJCSB1bnNpZ25lZCBsb25nIHBmbiwKLQkJCQkJIGludCBsZXZlbCkKKwkJCQkJIGludCBsZXZlbCwgaW50ICpsYXJnZV9wYWdlKQogewogCXN0cnVjdCBkbWFfcHRlICpwYXJlbnQsICpwdGUgPSBOVUxMOwogCWludCB0b3RhbCA9IGFnYXdfdG9fbGV2ZWwoZG9tYWluLT5hZ2F3KTsKQEAgLTc0OSw4ICs4MDAsMTYgQEAKIAkJaWYgKGxldmVsID09IHRvdGFsKQogCQkJcmV0dXJuIHB0ZTsKIAotCQlpZiAoIWRtYV9wdGVfcHJlc2VudChwdGUpKQorCQlpZiAoIWRtYV9wdGVfcHJlc2VudChwdGUpKSB7CisJCQkqbGFyZ2VfcGFnZSA9IHRvdGFsOwogCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHRlLT52YWwgJiBETUFfUFRFX0xBUkdFX1BBR0UpIHsKKwkJCSpsYXJnZV9wYWdlID0gdG90YWw7CisJCQlyZXR1cm4gcHRlOworCQl9CisKIAkJcGFyZW50ID0gcGh5c190b192aXJ0KGRtYV9wdGVfYWRkcihwdGUpKTsKIAkJdG90YWwtLTsKIAl9CkBAIC03NjMsNiArODIyLDcgQEAKIAkJCQl1bnNpZ25lZCBsb25nIGxhc3RfcGZuKQogewogCWludCBhZGRyX3dpZHRoID0gYWdhd190b193aWR0aChkb21haW4tPmFnYXcpIC0gVlREX1BBR0VfU0hJRlQ7CisJdW5zaWduZWQgaW50IGxhcmdlX3BhZ2UgPSAxOwogCXN0cnVjdCBkbWFfcHRlICpmaXJzdF9wdGUsICpwdGU7CiAKIAlCVUdfT04oYWRkcl93aWR0aCA8IEJJVFNfUEVSX0xPTkcgJiYgc3RhcnRfcGZuID4+IGFkZHJfd2lkdGgpOwpAQCAtNzcxLDE0ICs4MzEsMTUgQEAKIAogCS8qIHdlIGRvbid0IG5lZWQgbG9jayBoZXJlOyBub2JvZHkgZWxzZSB0b3VjaGVzIHRoZSBpb3ZhIHJhbmdlICovCiAJZG8gewotCQlmaXJzdF9wdGUgPSBwdGUgPSBkbWFfcGZuX2xldmVsX3B0ZShkb21haW4sIHN0YXJ0X3BmbiwgMSk7CisJCWxhcmdlX3BhZ2UgPSAxOworCQlmaXJzdF9wdGUgPSBwdGUgPSBkbWFfcGZuX2xldmVsX3B0ZShkb21haW4sIHN0YXJ0X3BmbiwgMSwgJmxhcmdlX3BhZ2UpOwogCQlpZiAoIXB0ZSkgewotCQkJc3RhcnRfcGZuID0gYWxpZ25fdG9fbGV2ZWwoc3RhcnRfcGZuICsgMSwgMik7CisJCQlzdGFydF9wZm4gPSBhbGlnbl90b19sZXZlbChzdGFydF9wZm4gKyAxLCBsYXJnZV9wYWdlICsgMSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlkbyB7IAorCQlkbyB7CiAJCQlkbWFfY2xlYXJfcHRlKHB0ZSk7Ci0JCQlzdGFydF9wZm4rKzsKKwkJCXN0YXJ0X3BmbiArPSBsdmxfdG9fbnJfcGFnZXMobGFyZ2VfcGFnZSk7CiAJCQlwdGUrKzsKIAkJfSB3aGlsZSAoc3RhcnRfcGZuIDw9IGxhc3RfcGZuICYmICFmaXJzdF9wdGVfaW5fcGFnZShwdGUpKTsKIApAQCAtNzk4LDYgKzg1OSw3IEBACiAJaW50IHRvdGFsID0gYWdhd190b19sZXZlbChkb21haW4tPmFnYXcpOwogCWludCBsZXZlbDsKIAl1bnNpZ25lZCBsb25nIHRtcDsKKwlpbnQgbGFyZ2VfcGFnZSA9IDI7CiAKIAlCVUdfT04oYWRkcl93aWR0aCA8IEJJVFNfUEVSX0xPTkcgJiYgc3RhcnRfcGZuID4+IGFkZHJfd2lkdGgpOwogCUJVR19PTihhZGRyX3dpZHRoIDwgQklUU19QRVJfTE9ORyAmJiBsYXN0X3BmbiA+PiBhZGRyX3dpZHRoKTsKQEAgLTgxMyw3ICs4NzUsMTAgQEAKIAkJCXJldHVybjsKIAogCQlkbyB7Ci0JCQlmaXJzdF9wdGUgPSBwdGUgPSBkbWFfcGZuX2xldmVsX3B0ZShkb21haW4sIHRtcCwgbGV2ZWwpOworCQkJbGFyZ2VfcGFnZSA9IGxldmVsOworCQkJZmlyc3RfcHRlID0gcHRlID0gZG1hX3Bmbl9sZXZlbF9wdGUoZG9tYWluLCB0bXAsIGxldmVsLCAmbGFyZ2VfcGFnZSk7CisJCQlpZiAobGFyZ2VfcGFnZSA+IGxldmVsKQorCQkJCWxldmVsID0gbGFyZ2VfcGFnZSArIDE7CiAJCQlpZiAoIXB0ZSkgewogCQkJCXRtcCA9IGFsaWduX3RvX2xldmVsKHRtcCArIDEsIGxldmVsICsgMSk7CiAJCQkJY29udGludWU7CkBAIC0xMzk3LDYgKzE0NjIsNyBAQAogCWVsc2UKIAkJZG9tYWluLT5pb21tdV9zbm9vcGluZyA9IDA7CiAKKwlkb21haW4tPmlvbW11X3N1cGVycGFnZSA9IGZscyhjYXBfc3VwZXJfcGFnZV92YWwoaW9tbXUtPmNhcCkpOwogCWRvbWFpbi0+aW9tbXVfY291bnQgPSAxOwogCWRvbWFpbi0+bmlkID0gaW9tbXUtPm5vZGU7CiAKQEAgLTE0MTcsNiArMTQ4MywxMCBAQAogCWlmICghZG9tYWluKQogCQlyZXR1cm47CiAKKwkvKiBGbHVzaCBhbnkgbGF6eSB1bm1hcHMgdGhhdCBtYXkgcmVmZXJlbmNlIHRoaXMgZG9tYWluICovCisJaWYgKCFpbnRlbF9pb21tdV9zdHJpY3QpCisJCWZsdXNoX3VubWFwc190aW1lb3V0KDApOworCiAJZG9tYWluX3JlbW92ZV9kZXZfaW5mbyhkb21haW4pOwogCS8qIGRlc3Ryb3kgaW92YXMgKi8KIAlwdXRfaW92YV9kb21haW4oJmRvbWFpbi0+aW92YWQpOwpAQCAtMTY0OCw2ICsxNzE4LDM0IEBACiAJcmV0dXJuIFBBR0VfQUxJR04oaG9zdF9hZGRyICsgc2l6ZSkgPj4gVlREX1BBR0VfU0hJRlQ7CiB9CiAKKy8qIFJldHVybiBsYXJnZXN0IHBvc3NpYmxlIHN1cGVycGFnZSBsZXZlbCBmb3IgYSBnaXZlbiBtYXBwaW5nICovCitzdGF0aWMgaW5saW5lIGludCBoYXJkd2FyZV9sYXJnZXBhZ2VfY2FwcyhzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGlvdl9wZm4sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBwaHlfcGZuLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgcGFnZXMpCit7CisJaW50IHN1cHBvcnQsIGxldmVsID0gMTsKKwl1bnNpZ25lZCBsb25nIHBmbm1lcmdlOworCisJc3VwcG9ydCA9IGRvbWFpbi0+aW9tbXVfc3VwZXJwYWdlOworCisJLyogVG8gdXNlIGEgbGFyZ2UgcGFnZSwgdGhlIHZpcnR1YWwgKmFuZCogcGh5c2ljYWwgYWRkcmVzc2VzCisJICAgbXVzdCBiZSBhbGlnbmVkIHRvIDJNaUIvMUdpQi9ldGMuIExvd2VyIGJpdHMgc2V0IGluIGVpdGhlcgorCSAgIG9mIHRoZW0gd2lsbCBtZWFuIHdlIGhhdmUgdG8gdXNlIHNtYWxsZXIgcGFnZXMuIFNvIGp1c3QKKwkgICBtZXJnZSB0aGVtIGFuZCBjaGVjayBib3RoIGF0IG9uY2UuICovCisJcGZubWVyZ2UgPSBpb3ZfcGZuIHwgcGh5X3BmbjsKKworCXdoaWxlIChzdXBwb3J0ICYmICEocGZubWVyZ2UgJiB+VlREX1NUUklERV9NQVNLKSkgeworCQlwYWdlcyA+Pj0gVlREX1NUUklERV9TSElGVDsKKwkJaWYgKCFwYWdlcykKKwkJCWJyZWFrOworCQlwZm5tZXJnZSA+Pj0gVlREX1NUUklERV9TSElGVDsKKwkJbGV2ZWwrKzsKKwkJc3VwcG9ydC0tOworCX0KKwlyZXR1cm4gbGV2ZWw7Cit9CisKIHN0YXRpYyBpbnQgX19kb21haW5fbWFwcGluZyhzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZfcGZuLAogCQkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgcGh5c19wZm4sCiAJCQkgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgaW50IHByb3QpCkBAIC0xNjU2LDYgKzE3NTQsOCBAQAogCXBoeXNfYWRkcl90IHVuaW5pdGlhbGl6ZWRfdmFyKHB0ZXZhbCk7CiAJaW50IGFkZHJfd2lkdGggPSBhZ2F3X3RvX3dpZHRoKGRvbWFpbi0+YWdhdykgLSBWVERfUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBsb25nIHNnX3JlczsKKwl1bnNpZ25lZCBpbnQgbGFyZ2VwYWdlX2x2bCA9IDA7CisJdW5zaWduZWQgbG9uZyBsdmxfcGFnZXMgPSAwOwogCiAJQlVHX09OKGFkZHJfd2lkdGggPCBCSVRTX1BFUl9MT05HICYmIChpb3ZfcGZuICsgbnJfcGFnZXMgLSAxKSA+PiBhZGRyX3dpZHRoKTsKIApAQCAtMTY3MSw3ICsxNzcxLDcgQEAKIAkJcHRldmFsID0gKChwaHlzX2FkZHJfdClwaHlzX3BmbiA8PCBWVERfUEFHRV9TSElGVCkgfCBwcm90OwogCX0KIAotCXdoaWxlIChucl9wYWdlcy0tKSB7CisJd2hpbGUgKG5yX3BhZ2VzID4gMCkgewogCQl1aW50NjRfdCB0bXA7CiAKIAkJaWYgKCFzZ19yZXMpIHsKQEAgLTE2NzksMTEgKzE3NzksMjEgQEAKIAkJCXNnLT5kbWFfYWRkcmVzcyA9ICgoZG1hX2FkZHJfdClpb3ZfcGZuIDw8IFZURF9QQUdFX1NISUZUKSArIHNnLT5vZmZzZXQ7CiAJCQlzZy0+ZG1hX2xlbmd0aCA9IHNnLT5sZW5ndGg7CiAJCQlwdGV2YWwgPSBwYWdlX3RvX3BoeXMoc2dfcGFnZShzZykpIHwgcHJvdDsKKwkJCXBoeXNfcGZuID0gcHRldmFsID4+IFZURF9QQUdFX1NISUZUOwogCQl9CisKIAkJaWYgKCFwdGUpIHsKLQkJCWZpcnN0X3B0ZSA9IHB0ZSA9IHBmbl90b19kbWFfcHRlKGRvbWFpbiwgaW92X3Bmbik7CisJCQlsYXJnZXBhZ2VfbHZsID0gaGFyZHdhcmVfbGFyZ2VwYWdlX2NhcHMoZG9tYWluLCBpb3ZfcGZuLCBwaHlzX3Bmbiwgc2dfcmVzKTsKKworCQkJZmlyc3RfcHRlID0gcHRlID0gcGZuX3RvX2RtYV9wdGUoZG9tYWluLCBpb3ZfcGZuLCBsYXJnZXBhZ2VfbHZsKTsKIAkJCWlmICghcHRlKQogCQkJCXJldHVybiAtRU5PTUVNOworCQkJLyogSXQgaXMgbGFyZ2UgcGFnZSovCisJCQlpZiAobGFyZ2VwYWdlX2x2bCA+IDEpCisJCQkJcHRldmFsIHw9IERNQV9QVEVfTEFSR0VfUEFHRTsKKwkJCWVsc2UKKwkJCQlwdGV2YWwgJj0gfih1aW50NjRfdClETUFfUFRFX0xBUkdFX1BBR0U7CisKIAkJfQogCQkvKiBXZSBkb24ndCBuZWVkIGxvY2sgaGVyZSwgbm9ib2R5IGVsc2UKIAkJICogdG91Y2hlcyB0aGUgaW92YSByYW5nZQpAQCAtMTY5OSwxNiArMTgwOSwzOCBAQAogCQkJfQogCQkJV0FSTl9PTigxKTsKIAkJfQorCisJCWx2bF9wYWdlcyA9IGx2bF90b19ucl9wYWdlcyhsYXJnZXBhZ2VfbHZsKTsKKworCQlCVUdfT04obnJfcGFnZXMgPCBsdmxfcGFnZXMpOworCQlCVUdfT04oc2dfcmVzIDwgbHZsX3BhZ2VzKTsKKworCQlucl9wYWdlcyAtPSBsdmxfcGFnZXM7CisJCWlvdl9wZm4gKz0gbHZsX3BhZ2VzOworCQlwaHlzX3BmbiArPSBsdmxfcGFnZXM7CisJCXB0ZXZhbCArPSBsdmxfcGFnZXMgKiBWVERfUEFHRV9TSVpFOworCQlzZ19yZXMgLT0gbHZsX3BhZ2VzOworCisJCS8qIElmIHRoZSBuZXh0IFBURSB3b3VsZCBiZSB0aGUgZmlyc3QgaW4gYSBuZXcgcGFnZSwgdGhlbiB3ZQorCQkgICBuZWVkIHRvIGZsdXNoIHRoZSBjYWNoZSBvbiB0aGUgZW50cmllcyB3ZSd2ZSBqdXN0IHdyaXR0ZW4uCisJCSAgIEFuZCB0aGVuIHdlJ2xsIG5lZWQgdG8gcmVjYWxjdWxhdGUgJ3B0ZScsIHNvIGNsZWFyIGl0IGFuZAorCQkgICBsZXQgaXQgZ2V0IHNldCBhZ2FpbiBpbiB0aGUgaWYgKCFwdGUpIGJsb2NrIGFib3ZlLgorCisJCSAgIElmIHdlJ3JlIGRvbmUgKCFucl9wYWdlcykgd2UgbmVlZCB0byBmbHVzaCB0aGUgY2FjaGUgdG9vLgorCisJCSAgIEFsc28gaWYgd2UndmUgYmVlbiBzZXR0aW5nIHN1cGVycGFnZXMsIHdlIG1heSBuZWVkIHRvCisJCSAgIHJlY2FsY3VsYXRlICdwdGUnIGFuZCBzd2l0Y2ggYmFjayB0byBzbWFsbGVyIHBhZ2VzIGZvciB0aGUKKwkJICAgZW5kIG9mIHRoZSBtYXBwaW5nLCBpZiB0aGUgdHJhaWxpbmcgc2l6ZSBpcyBub3QgZW5vdWdoIHRvCisJCSAgIHVzZSBhbm90aGVyIHN1cGVycGFnZSAoaS5lLiBzZ19yZXMgPCBsdmxfcGFnZXMpLiAqLwogCQlwdGUrKzsKLQkJaWYgKCFucl9wYWdlcyB8fCBmaXJzdF9wdGVfaW5fcGFnZShwdGUpKSB7CisJCWlmICghbnJfcGFnZXMgfHwgZmlyc3RfcHRlX2luX3BhZ2UocHRlKSB8fAorCQkgICAgKGxhcmdlcGFnZV9sdmwgPiAxICYmIHNnX3JlcyA8IGx2bF9wYWdlcykpIHsKIAkJCWRvbWFpbl9mbHVzaF9jYWNoZShkb21haW4sIGZpcnN0X3B0ZSwKIAkJCQkJICAgKHZvaWQgKilwdGUgLSAodm9pZCAqKWZpcnN0X3B0ZSk7CiAJCQlwdGUgPSBOVUxMOwogCQl9Ci0JCWlvdl9wZm4rKzsKLQkJcHRldmFsICs9IFZURF9QQUdFX1NJWkU7Ci0JCXNnX3Jlcy0tOwotCQlpZiAoIXNnX3JlcykKKworCQlpZiAoIXNnX3JlcyAmJiBucl9wYWdlcykKIAkJCXNnID0gc2dfbmV4dChzZyk7CiAJfQogCXJldHVybiAwOwpAQCAtMjAxNiw3ICsyMTQ4LDcgQEAKIAlpZiAocGRldi0+ZGV2LmFyY2hkYXRhLmlvbW11ID09IERVTU1ZX0RFVklDRV9ET01BSU5fSU5GTykKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIGlvbW11X3ByZXBhcmVfaWRlbnRpdHlfbWFwKHBkZXYsIHJtcnItPmJhc2VfYWRkcmVzcywKLQkJcm1yci0+ZW5kX2FkZHJlc3MgKyAxKTsKKwkJcm1yci0+ZW5kX2FkZHJlc3MpOwogfQogCiAjaWZkZWYgQ09ORklHX0RNQVJfRkxPUFBZX1dBCkBAIC0yMDMwLDcgKzIxNjIsNyBAQAogCQlyZXR1cm47CiAKIAlwcmludGsoS0VSTl9JTkZPICJJT01NVTogUHJlcGFyZSAwLTE2TWlCIHVuaXR5IG1hcHBpbmcgZm9yIExQQ1xuIik7Ci0JcmV0ID0gaW9tbXVfcHJlcGFyZV9pZGVudGl0eV9tYXAocGRldiwgMCwgMTYqMTAyNCoxMDI0KTsKKwlyZXQgPSBpb21tdV9wcmVwYXJlX2lkZW50aXR5X21hcChwZGV2LCAwLCAxNioxMDI0KjEwMjQgLSAxKTsKIAogCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IEZhaWxlZCB0byBjcmVhdGUgMC0xNk1pQiBpZGVudGl0eSBtYXA7ICIKQEAgLTIxMDYsMTAgKzIyMzgsMTAgQEAKIAlpZiAobGlrZWx5KCFpb21tdV9pZGVudGl0eV9tYXBwaW5nKSkKIAkJcmV0dXJuIDA7CiAKKwlpbmZvID0gcGRldi0+ZGV2LmFyY2hkYXRhLmlvbW11OworCWlmIChpbmZvICYmIGluZm8gIT0gRFVNTVlfREVWSUNFX0RPTUFJTl9JTkZPKQorCQlyZXR1cm4gKGluZm8tPmRvbWFpbiA9PSBzaV9kb21haW4pOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpbmZvLCAmc2lfZG9tYWluLT5kZXZpY2VzLCBsaW5rKQotCQlpZiAoaW5mby0+ZGV2ID09IHBkZXYpCi0JCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE4Nyw4ICsyMzE5LDE5IEBACiAJICogQXNzdW1lIHRoYXQgdGhleSB3aWxsIC0tIGlmIHRoZXkgdHVybiBvdXQgbm90IHRvIGJlLCB0aGVuIHdlIGNhbiAKIAkgKiB0YWtlIHRoZW0gb3V0IG9mIHRoZSAxOjEgZG9tYWluIGxhdGVyLgogCSAqLwotCWlmICghc3RhcnR1cCkKLQkJcmV0dXJuIHBkZXYtPmRtYV9tYXNrID4gRE1BX0JJVF9NQVNLKDMyKTsKKwlpZiAoIXN0YXJ0dXApIHsKKwkJLyoKKwkJICogSWYgdGhlIGRldmljZSdzIGRtYV9tYXNrIGlzIGxlc3MgdGhhbiB0aGUgc3lzdGVtJ3MgbWVtb3J5CisJCSAqIHNpemUgdGhlbiB0aGlzIGlzIG5vdCBhIGNhbmRpZGF0ZSBmb3IgaWRlbnRpdHkgbWFwcGluZy4KKwkJICovCisJCXU2NCBkbWFfbWFzayA9IHBkZXYtPmRtYV9tYXNrOworCisJCWlmIChwZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgJiYKKwkJICAgIHBkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA8IGRtYV9tYXNrKQorCQkJZG1hX21hc2sgPSBwZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2s7CisKKwkJcmV0dXJuIGRtYV9tYXNrID49IGRtYV9nZXRfcmVxdWlyZWRfbWFzaygmcGRldi0+ZGV2KTsKKwl9CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTIyMDMsNiArMjM0Niw5IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJZm9yX2VhY2hfcGNpX2RldihwZGV2KSB7CisJCS8qIFNraXAgSG9zdC9QQ0kgQnJpZGdlIGRldmljZXMgKi8KKwkJaWYgKElTX0JSSURHRV9IT1NUX0RFVklDRShwZGV2KSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoaW9tbXVfc2hvdWxkX2lkZW50aXR5X21hcChwZGV2LCAxKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiSU9NTVU6ICVzIGlkZW50aXR5IG1hcHBpbmcgZm9yIGRldmljZSAlc1xuIiwKIAkJCSAgICAgICBodyA/ICJoYXJkd2FyZSIgOiAic29mdHdhcmUiLCBwY2lfbmFtZShwZGV2KSk7CkBAIC0yMjE4LDcgKzIzNjQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2RtYXJzKGludCBmb3JjZV9vbikKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZG1hcnModm9pZCkKIHsKIAlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQ7CiAJc3RydWN0IGRtYXJfcm1ycl91bml0ICpybXJyOwpAQCAtMjU5Miw4ICsyNzM4LDcgQEAKIAlpb21tdSA9IGRvbWFpbl9nZXRfaW9tbXUoZG9tYWluKTsKIAlzaXplID0gYWxpZ25lZF9ucnBhZ2VzKHBhZGRyLCBzaXplKTsKIAotCWlvdmEgPSBpbnRlbF9hbGxvY19pb3ZhKGh3ZGV2LCBkb21haW4sIGRtYV90b19tbV9wZm4oc2l6ZSksCi0JCQkJcGRldi0+ZG1hX21hc2spOworCWlvdmEgPSBpbnRlbF9hbGxvY19pb3ZhKGh3ZGV2LCBkb21haW4sIGRtYV90b19tbV9wZm4oc2l6ZSksIGRtYV9tYXNrKTsKIAlpZiAoIWlvdmEpCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTMxMTgsNyArMzI2MywxNyBAQAogCQlpZiAoaW9tbXUtPnFpKQogCQkJZG1hcl9yZWVuYWJsZV9xaShpb21tdSk7CiAKLQlmb3JfZWFjaF9hY3RpdmVfaW9tbXUoaW9tbXUsIGRyaGQpIHsKKwlmb3JfZWFjaF9pb21tdShpb21tdSwgZHJoZCkgeworCQlpZiAoZHJoZC0+aWdub3JlZCkgeworCQkJLyoKKwkJCSAqIHdlIGFsd2F5cyBoYXZlIHRvIGRpc2FibGUgUE1ScyBvciBETUEgbWF5IGZhaWwgb24KKwkJCSAqIHRoaXMgZGV2aWNlCisJCQkgKi8KKwkJCWlmIChmb3JjZV9vbikKKwkJCQlpb21tdV9kaXNhYmxlX3Byb3RlY3RfbWVtX3JlZ2lvbnMoaW9tbXUpOworCQkJY29udGludWU7CisJCX0KKwkKIAkJaW9tbXVfZmx1c2hfd3JpdGVfYnVmZmVyKGlvbW11KTsKIAogCQlpb21tdV9zZXRfcm9vdF9lbnRyeShpb21tdSk7CkBAIC0zMTI3LDcgKzMyODIsOCBAQAogCQkJCQkgICBETUFfQ0NNRF9HTE9CQUxfSU5WTCk7CiAJCWlvbW11LT5mbHVzaC5mbHVzaF9pb3RsYihpb21tdSwgMCwgMCwgMCwKIAkJCQkJIERNQV9UTEJfR0xPQkFMX0ZMVVNIKTsKLQkJaW9tbXVfZW5hYmxlX3RyYW5zbGF0aW9uKGlvbW11KTsKKwkJaWYgKGlvbW11X2VuYWJsZV90cmFuc2xhdGlvbihpb21tdSkpCisJCQlyZXR1cm4gMTsKIAkJaW9tbXVfZGlzYWJsZV9wcm90ZWN0X21lbV9yZWdpb25zKGlvbW11KTsKIAl9CiAKQEAgLTMxOTQsNyArMzM1MCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAogCWlmIChpbml0X2lvbW11X2h3KCkpIHsKLQkJV0FSTigxLCAiSU9NTVUgc2V0dXAgZmFpbGVkLCBETUFSIGNhbiBub3QgcmVzdW1lIVxuIik7CisJCWlmIChmb3JjZV9vbikKKwkJCXBhbmljKCJ0Ym9vdDogSU9NTVUgc2V0dXAgZmFpbGVkLCBETUFSIGNhbiBub3QgcmVzdW1lIVxuIik7CisJCWVsc2UKKwkJCVdBUk4oMSwgIklPTU1VIHNldHVwIGZhaWxlZCwgRE1BUiBjYW4gbm90IHJlc3VtZSFcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zMjI5LDcgKzMzODgsNyBAQAogfQogCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaW5pdF9pb21tdV9wbV9vcHModm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9pb21tdV9wbV9vcHModm9pZCkge30KICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KIAogLyoKQEAgLTMyNzEsNyArMzQzMCw2IEBACiBpbnQgX19pbml0IGludGVsX2lvbW11X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKLQlpbnQgZm9yY2Vfb24gPSAwOwogCiAJLyogVlQtZCBpcyByZXF1aXJlZCBmb3IgYSBUWFQvdGJvb3QgbGF1bmNoLCBzbyBlbmZvcmNlIHRoYXQgKi8KIAlmb3JjZV9vbiA9IHRib290X2ZvcmNlX2lvbW11KCk7CkBAIC0zMzA5LDcgKzM0NjcsNyBAQAogCiAJaW5pdF9ub19yZW1hcHBpbmdfZGV2aWNlcygpOwogCi0JcmV0ID0gaW5pdF9kbWFycyhmb3JjZV9vbik7CisJcmV0ID0gaW5pdF9kbWFycygpOwogCWlmIChyZXQpIHsKIAkJaWYgKGZvcmNlX29uKQogCQkJcGFuaWMoInRib290OiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBETUFSc1xuIik7CkBAIC0zMzgwLDggKzM1MzgsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2VfZG9tYWluX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRtcCwgJmRvbWFpbi0+ZGV2aWNlcykgewogCQlpbmZvID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGRldmljZV9kb21haW5faW5mbywgbGluayk7Ci0JCS8qIE5vIG5lZWQgdG8gY29tcGFyZSBQQ0kgZG9tYWluOyBpdCBoYXMgdG8gYmUgdGhlIHNhbWUgKi8KLQkJaWYgKGluZm8tPmJ1cyA9PSBwZGV2LT5idXMtPm51bWJlciAmJgorCQlpZiAoaW5mby0+c2VnbWVudCA9PSBwY2lfZG9tYWluX25yKHBkZXYtPmJ1cykgJiYKKwkJICAgIGluZm8tPmJ1cyA9PSBwZGV2LT5idXMtPm51bWJlciAmJgogCQkgICAgaW5mby0+ZGV2Zm4gPT0gcGRldi0+ZGV2Zm4pIHsKIAkJCWxpc3RfZGVsKCZpbmZvLT5saW5rKTsKIAkJCWxpc3RfZGVsKCZpbmZvLT5nbG9iYWwpOwpAQCAtMzQxOSwxMCArMzU3NywxMyBAQAogCQlkb21haW5fdXBkYXRlX2lvbW11X2NhcChkb21haW4pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmlvbW11X2xvY2ssIHRtcF9mbGFncyk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOwotCQljbGVhcl9iaXQoZG9tYWluLT5pZCwgaW9tbXUtPmRvbWFpbl9pZHMpOwotCQlpb21tdS0+ZG9tYWluc1tkb21haW4tPmlkXSA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOworCQlpZiAoIShkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfVklSVFVBTF9NQUNISU5FKSAmJgorCQkgICAgIShkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfU1RBVElDX0lERU5USVRZKSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOworCQkJY2xlYXJfYml0KGRvbWFpbi0+aWQsIGlvbW11LT5kb21haW5faWRzKTsKKwkJCWlvbW11LT5kb21haW5zW2RvbWFpbi0+aWRdID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOworCQl9CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX2RvbWFpbl9sb2NrLCBmbGFncyk7CkBAIC0zNTA1LDYgKzM2NjYsNyBAQAogCWRvbWFpbi0+aW9tbXVfY291bnQgPSAwOwogCWRvbWFpbi0+aW9tbXVfY29oZXJlbmN5ID0gMDsKIAlkb21haW4tPmlvbW11X3Nub29waW5nID0gMDsKKwlkb21haW4tPmlvbW11X3N1cGVycGFnZSA9IDA7CiAJZG9tYWluLT5tYXhfYWRkciA9IDA7CiAJZG9tYWluLT5uaWQgPSAtMTsKIApAQCAtMzcyMCw3ICszODgyLDcgQEAKIAlzdHJ1Y3QgZG1hX3B0ZSAqcHRlOwogCXU2NCBwaHlzID0gMDsKIAotCXB0ZSA9IHBmbl90b19kbWFfcHRlKGRtYXJfZG9tYWluLCBpb3ZhID4+IFZURF9QQUdFX1NISUZUKTsKKwlwdGUgPSBwZm5fdG9fZG1hX3B0ZShkbWFyX2RvbWFpbiwgaW92YSA+PiBWVERfUEFHRV9TSElGVCwgMCk7CiAJaWYgKHB0ZSkKIAkJcGh5cyA9IGRtYV9wdGVfYWRkcihwdGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pb3ZhLmMgYi9kcml2ZXJzL3BjaS9pb3ZhLmMKaW5kZXggOTYwNmU1OS4uYzVjMjc0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW92YS5jCisrKyBiL2RyaXZlcnMvcGNpL2lvdmEuYwpAQCAtNjMsOCArNjMsMTYgQEAKIAljdXJyID0gaW92YWQtPmNhY2hlZDMyX25vZGU7CiAJY2FjaGVkX2lvdmEgPSBjb250YWluZXJfb2YoY3Vyciwgc3RydWN0IGlvdmEsIG5vZGUpOwogCi0JaWYgKGZyZWUtPnBmbl9sbyA+PSBjYWNoZWRfaW92YS0+cGZuX2xvKQotCQlpb3ZhZC0+Y2FjaGVkMzJfbm9kZSA9IHJiX25leHQoJmZyZWUtPm5vZGUpOworCWlmIChmcmVlLT5wZm5fbG8gPj0gY2FjaGVkX2lvdmEtPnBmbl9sbykgeworCQlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IHJiX25leHQoJmZyZWUtPm5vZGUpOworCQlzdHJ1Y3QgaW92YSAqaW92YSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaW92YSwgbm9kZSk7CisKKwkJLyogb25seSBjYWNoZSBpZiBpdCdzIGJlbG93IDMyYml0IHBmbiAqLworCQlpZiAobm9kZSAmJiBpb3ZhLT5wZm5fbG8gPCBpb3ZhZC0+ZG1hXzMyYml0X3BmbikKKwkJCWlvdmFkLT5jYWNoZWQzMl9ub2RlID0gbm9kZTsKKwkJZWxzZQorCQkJaW92YWQtPmNhY2hlZDMyX25vZGUgPSBOVUxMOworCX0KIH0KIAogLyogQ29tcHV0ZXMgdGhlIHBhZGRpbmcgc2l6ZSByZXF1aXJlZCwgdG8gbWFrZSB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggNTYwOThiMy4uNWYxMGMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTMyNzEsMTEgKzMyNzEsMTEgQEAKIH0KIAogc3RhdGljIGludCBwY2lfc2V0X3ZnYV9zdGF0ZV9hcmNoKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZGVjb2RlLAotCQkgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZF9iaXRzLCBib29sIGNoYW5nZV9icmlkZ2UpCisJCSAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX2JpdHMsIHUzMiBmbGFncykKIHsKIAlpZiAoYXJjaF9zZXRfdmdhX3N0YXRlKQogCQlyZXR1cm4gYXJjaF9zZXRfdmdhX3N0YXRlKGRldiwgZGVjb2RlLCBjb21tYW5kX2JpdHMsCi0JCQkJCQljaGFuZ2VfYnJpZGdlKTsKKwkJCQkJCWZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX2NoYXJkZXYuYyBiL2RyaXZlcnMvcHRwL3B0cF9jaGFyZGV2LmMKaW5kZXggYThkMDNhZS4uZTdmMzAxZGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3B0cC9wdHBfY2hhcmRldi5jCisrKyBiL2RyaXZlcnMvcHRwL3B0cF9jaGFyZGV2LmMKQEAgLTQ2LDcgKzQ2LDggQEAKIAkJY2Fwcy5uX2V4dF90cyA9IHB0cC0+aW5mby0+bl9leHRfdHM7CiAJCWNhcHMubl9wZXJfb3V0ID0gcHRwLT5pbmZvLT5uX3Blcl9vdXQ7CiAJCWNhcHMucHBzID0gcHRwLT5pbmZvLT5wcHM7Ci0JCWVyciA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZjYXBzLCBzaXplb2YoY2FwcykpOworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmNhcHMsIHNpemVvZihjYXBzKSkpCisJCQllcnIgPSAtRUZBVUxUOwogCQlicmVhazsKIAogCWNhc2UgUFRQX0VYVFRTX1JFUVVFU1Q6CkBAIC0xMjksOCArMTMwLDEwIEBACiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQogCi0JaWYgKHB0cC0+ZGVmdW5jdCkKKwlpZiAocHRwLT5kZWZ1bmN0KSB7CisJCW11dGV4X3VubG9jaygmcHRwLT50c2V2cV9tdXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXVldWUtPmxvY2ssIGZsYWdzKTsKIApAQCAtMTUwLDEwICsxNTMsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwdHAtPnRzZXZxX211eCk7CiAKLQlpZiAoY29weV90b191c2VyKGJ1ZiwgZXZlbnQsIGNudCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZwdHAtPnRzZXZxX211eCk7CisJaWYgKGNvcHlfdG9fdXNlcihidWYsIGV2ZW50LCBjbnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9CiAKIAlyZXR1cm4gY250OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggZjgyMmUxMy4uY2UyYWFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0xMDUxLDQgKzEwNTEsMTMgQEAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgTGludXggZHJpdmVyIHNpZGUgb2YgdGhlIFRpbGVyYQogCSAgaHlwZXJ2aXNvcidzIHJlYWwtdGltZSBjbG9jayBpbnRlcmZhY2UuCiAKK2NvbmZpZyBSVENfRFJWX1BVVjMKKwl0cmlzdGF0ZSAiUEtVbml0eSB2MyBSVEMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfUFVWMworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUlRDIGluIHRoZSBQS1VuaXR5LXYzIFNvQ3MuCisKKwkgIFRoaXMgZHJpdmUgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtcHV2My4KKwogZW5kaWYgIyBSVENfQ0xBU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggMjEzZDcyNS4uMGZmZWZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTc4LDYgKzc4LDcgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX1BMMDMwKQkrPSBydGMtcGwwMzAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUEwwMzEpCSs9IHJ0Yy1wbDAzMS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QUzMpCSs9IHJ0Yy1wczMubworb2JqLSQoQ09ORklHX1JUQ19EUlZfUFVWMykJKz0gcnRjLXB1djMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUFhBKQkrPSBydGMtcHhhLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1I5NzAxKQkrPSBydGMtcjk3MDEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUlA1QzAxKQkrPSBydGMtcnA1YzAxLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKaW5kZXggZWY2MzE2YS4uZGY2ODYxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX3JlYWRfYWxhcm0pOwogCi1pbnQgX19ydGNfc2V0X2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3N0YXRpYyBpbnQgX19ydGNfc2V0X2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAJbG9uZyBub3csIHNjaGVkdWxlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwppbmRleCBkMGUwNmVkLi5jYWNlNmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCkBAIC00MjEsNyArNDIxLDggQEAKIAkJCWVyciA9IG9wcy0+aW9jdGwocnRjLT5kZXYucGFyZW50LCBjbWQsIGFyZyk7CiAJCQlpZiAoZXJyID09IC1FTk9JT0NUTENNRCkKIAkJCQllcnIgPSAtRU5PVFRZOwotCQl9CisJCX0gZWxzZQorCQkJZXJyID0gLUVOT1RUWTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDkzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDkzLmMKaW5kZXggMWE4NGIzZS4uNzMxN2QzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00MXQ5My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTMuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IG00MXQ5M19yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoc3BpKTsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CiAKIAlpZiAocnRjKQogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9ydGMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wdXYzLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC91bmljb3JlMzIva2VybmVsL3J0Yy5jCnJlbmFtZSB0byBkcml2ZXJzL3J0Yy9ydGMtcHV2My5jCmluZGV4IDhjYWQ3MGIuLjQ2ZjE0YjggMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9ydGMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcHV2My5jCkBAIC0xLDcgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvdW5pY29yZTMyL2tlcm5lbC9ydGMuYwotICoKLSAqIENvZGUgc3BlY2lmaWMgdG8gUEtVbml0eSBTb0MgYW5kIFVuaUNvcmUgSVNBCisgKiBSVEMgZHJpdmVyIGNvZGUgc3BlY2lmaWMgdG8gUEtVbml0eSBTb0MgYW5kIFVuaUNvcmUgSVNBCiAgKgogICoJTWFpbnRhaW5lZCBieSBHVUFOIFh1ZS10YW8gPGd4dEBtcHJjLnBrdS5lZHUuY24+CiAgKglDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMCBHdWFuIFh1ZXRhbwpAQCAtMzYsNyArMzQsNiBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhwdXYzX3J0Y19waWVfbG9jayk7CiAKIC8qIElSUSBIYW5kbGVycyAqLwotCiBzdGF0aWMgaXJxcmV0dXJuX3QgcHV2M19ydGNfYWxhcm1pcnEoaW50IGlycSwgdm9pZCAqaWQpCiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJkZXYgPSBpZDsKQEAgLTg5LDcgKzg2LDYgQEAKIH0KIAogLyogVGltZSByZWFkL3dyaXRlICovCi0KIHN0YXRpYyBpbnQgcHV2M19ydGNfZ2V0dGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqcnRjX3RtKQogewogCXJ0Y190aW1lX3RvX3RtKHJlYWRsKFJUQ19SQ05SKSwgcnRjX3RtKTsKQEAgLTE5Niw3ICsxOTIsNiBAQAogCXN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAkvKiBkbyBub3QgY2xlYXIgQUlFIGhlcmUsIGl0IG1heSBiZSBuZWVkZWQgZm9yIHdha2UgKi8KLQogCXB1djNfcnRjX3NldHBpZShkZXYsIDApOwogCWZyZWVfaXJxKHB1djNfcnRjX2FsYXJtbm8sIHJ0Y19kZXYpOwogCWZyZWVfaXJxKHB1djNfcnRjX3RpY2tubywgcnRjX2Rldik7CkBAIC0yMTgsNyArMjEzLDYgQEAKIAkJd3JpdGVsKHJlYWRsKFJUQ19SVFNSKSAmIH5SVENfUlRTUl9IWkUsIFJUQ19SVFNSKTsKIAl9IGVsc2UgewogCQkvKiByZS1lbmFibGUgdGhlIGRldmljZSwgYW5kIGNoZWNrIGl0IGlzIG9rICovCi0KIAkJaWYgKChyZWFkbChSVENfUlRTUikgJiBSVENfUlRTUl9IWkUpID09IDApIHsKIAkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJydGMgZGlzYWJsZWQsIHJlLWVuYWJsaW5nXG4iKTsKIAkJCXdyaXRlbChyZWFkbChSVENfUlRTUikgfCBSVENfUlRTUl9IWkUsIFJUQ19SVFNSKTsKQEAgLTI1MSw3ICsyNDUsNiBAQAogCXByX2RlYnVnKCIlczogcHJvYmU9JXBcbiIsIF9fZnVuY19fLCBwZGV2KTsKIAogCS8qIGZpbmQgdGhlIElSUXMgKi8KLQogCXB1djNfcnRjX3RpY2tubyA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CiAJaWYgKHB1djNfcnRjX3RpY2tubyA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBydGMgdGlja1xuIik7CkBAIC0yNjgsNyArMjYxLDYgQEAKIAkJIHB1djNfcnRjX3RpY2tubywgcHV2M19ydGNfYWxhcm1ubyk7CiAKIAkvKiBnZXQgdGhlIG1lbW9yeSByZWdpb24gKi8KLQogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CkBAIC0yODgsNyArMjgwLDYgQEAKIAlwdXYzX3J0Y19lbmFibGUocGRldiwgMSk7CiAKIAkvKiByZWdpc3RlciBSVEMgYW5kIGV4aXQgKi8KLQogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInBrdW5pdHkiLCAmcGRldi0+ZGV2LCAmcHV2M19ydGNvcHMsCiAJCQkJICBUSElTX01PRFVMRSk7CiAKQEAgLTMxNSw4ICszMDYsNiBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiAKLS8qIFJUQyBQb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wgKi8KLQogc3RhdGljIGludCB0aWNudF9zYXZlOwogCiBzdGF0aWMgaW50IHB1djNfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtMzY4LDQgKzM1NywzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlJUQyBEcml2ZXIgZm9yIHRoZSBQS1VuaXR5IHYzIGNoaXAiKTsKIE1PRFVMRV9BVVRIT1IoIkh1IERvbmdsaWFuZyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCA1NWU4ZjcyLi41NzBkNGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTQxNiw3ICs0MTYsNyBAQAogCiAJLyogc3BlY2lhbCBoYW5kbGluZyBmb3Igbm8gdGFyZ2V0IGJ1ZmZlciBlbXB0eSAqLwogCWlmICgoIXEtPmlzX2lucHV0X3EgJiYKLQkgICAgKHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpID09IDB4MTApKSB7CisJICAgIChxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNV0uc2ZsYWdzKSA9PSAweDEwKSkgewogCQlxcGVyZl9pbmMocSwgdGFyZ2V0X2Z1bGwpOwogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiT1VURlVMTCBGVEM6JTAyeCIsCiAJCQkgICAgICBxLT5maXJzdF90b19jaGVjayk7CkBAIC00MjcsOCArNDI3LDggQEAKIAlEQkZfRVJST1IoKHEtPmlzX2lucHV0X3EpID8gIklOOiUyZCIgOiAiT1VUOiUyZCIsIHEtPm5yKTsKIAlEQkZfRVJST1IoIkZUQzolM2QgQzolM2QiLCBxLT5maXJzdF90b19jaGVjaywgY291bnQpOwogCURCRl9FUlJPUigiRjE0OiUyeCBGMTU6JTJ4IiwKLQkJICBxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNF0uZmxhZ3MgJiAweGZmLAotCQkgIHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpOworCQkgIHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE0XS5zZmxhZ3MsCisJCSAgcS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTVdLnNmbGFncyk7CiAKIAkvKgogCSAqIEludGVycnVwdHMgbWF5IGJlIGF2b2lkZWQgYXMgbG9uZyBhcyB0aGUgZXJyb3IgaXMgcHJlc2VudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKaW5kZXggNTVjNmFhMS4uZDNjZWUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCkBAIC0zNjEsNyArMzYxLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgcWV0aF9pc19sYXN0X3NiYWxlKHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZSkKIHsKLQlyZXR1cm4gKHNiYWxlLT5mbGFncyAmIFNCQUxfRkxBR1NfTEFTVF9FTlRSWSk7CisJcmV0dXJuIChzYmFsZS0+ZWZsYWdzICYgU0JBTF9FRkxBR1NfTEFTVF9FTlRSWSk7CiB9CiAKIGVudW0gcWV0aF9xZGlvX2J1ZmZlcl9zdGF0ZXMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCmluZGV4IDUwMzY3OGEuLmRkMDhmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKQEAgLTg5MCw3ICs4OTAsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAkvKiBpcyBQQ0kgZmxhZyBzZXQgb24gYnVmZmVyPyAqLwotCWlmIChidWYtPmJ1ZmZlci0+ZWxlbWVudFswXS5mbGFncyAmIDB4NDApCisJaWYgKGJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLnNmbGFncyAmIFNCQUxfU0ZMQUdTMF9QQ0lfUkVRKQogCQlhdG9taWNfZGVjKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCk7CiAKIAlza2IgPSBza2JfZGVxdWV1ZSgmYnVmLT5za2JfbGlzdCk7CkBAIC05MDYsOSArOTA2LDExIEBACiAJCWJ1Zi0+aXNfaGVhZGVyW2ldID0gMDsKIAkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0ubGVuZ3RoID0gMDsKIAkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uYWRkciA9IE5VTEw7Ci0JCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmZsYWdzID0gMDsKKwkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZWZsYWdzID0gMDsKKwkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uc2ZsYWdzID0gMDsKIAl9Ci0JYnVmLT5idWZmZXItPmVsZW1lbnRbMTVdLmZsYWdzID0gMDsKKwlidWYtPmJ1ZmZlci0+ZWxlbWVudFsxNV0uZWZsYWdzID0gMDsKKwlidWYtPmJ1ZmZlci0+ZWxlbWVudFsxNV0uc2ZsYWdzID0gMDsKIAlidWYtPm5leHRfZWxlbWVudF90b19maWxsID0gMDsKIAlhdG9taWNfc2V0KCZidWYtPnN0YXRlLCBRRVRIX1FESU9fQlVGX0VNUFRZKTsKIH0KQEAgLTIzNjgsOSArMjM3MCwxMCBAQAogCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5sZW5ndGggPSBQQUdFX1NJWkU7CiAJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmFkZHIgPSAgcG9vbF9lbnRyeS0+ZWxlbWVudHNbaV07CiAJCWlmIChpID09IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKSAtIDEpCi0JCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKKwkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmVmbGFncyA9IFNCQUxfRUZMQUdTX0xBU1RfRU5UUlk7CiAJCWVsc2UKLQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmZsYWdzID0gMDsKKwkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmVmbGFncyA9IDA7CisJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLnNmbGFncyA9IDA7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjcxOCwxMSArMjcyMSwxMSBAQAogCWlmIChxZGlvX2Vycm9yKSB7CiAJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsIGRiZnRleHQpOwogCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMiwgIiBGMTU9JTAyWCIsCi0JCQkgICAgICAgYnVmLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpOworCQkJICAgICAgIGJ1Zi0+ZWxlbWVudFsxNV0uc2ZsYWdzKTsKIAkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICIgRjE0PSUwMlgiLAotCQkJICAgICAgIGJ1Zi0+ZWxlbWVudFsxNF0uZmxhZ3MgJiAweGZmKTsKKwkJCSAgICAgICBidWYtPmVsZW1lbnRbMTRdLnNmbGFncyk7CiAJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiIHFlcnI9JVgiLCBxZGlvX2Vycm9yKTsKLQkJaWYgKChidWYtPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZikgPT0gMHgxMikgeworCQlpZiAoKGJ1Zi0+ZWxlbWVudFsxNV0uc2ZsYWdzKSA9PSAweDEyKSB7CiAJCQljYXJkLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlCkBAIC0yNzk4LDcgKzI4MDEsNyBAQAogc3RhdGljIGludCBxZXRoX2hhbmRsZV9zZW5kX2Vycm9yKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCiAJCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgcWRpb19lcnIpCiB7Ci0JaW50IHNiYWxmMTUgPSBidWZmZXItPmJ1ZmZlci0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmOworCWludCBzYmFsZjE1ID0gYnVmZmVyLT5idWZmZXItPmVsZW1lbnRbMTVdLnNmbGFnczsKIAogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDYsICJoZHNuZGVyciIpOwogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7CkBAIC0yOTA3LDggKzI5MTAsOCBAQAogCiAJZm9yIChpID0gaW5kZXg7IGkgPCBpbmRleCArIGNvdW50OyArK2kpIHsKIAkJYnVmID0gJnF1ZXVlLT5idWZzW2kgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKLQkJYnVmLT5idWZmZXItPmVsZW1lbnRbYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCAtIDFdLmZsYWdzIHw9Ci0JCQkJU0JBTF9GTEFHU19MQVNUX0VOVFJZOworCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsIC0gMV0uZWZsYWdzIHw9CisJCQkJU0JBTF9FRkxBR1NfTEFTVF9FTlRSWTsKIAogCQlpZiAocXVldWUtPmNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCiAJCQljb250aW51ZTsKQEAgLTI5MjEsNyArMjkyNCw3IEBACiAJCQkJLyogaXQncyBsaWtlbHkgdGhhdCB3ZSdsbCBnbyB0byBwYWNraW5nCiAJCQkJICogbW9kZSBzb29uICovCiAJCQkJYXRvbWljX2luYygmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpOwotCQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLmZsYWdzIHw9IDB4NDA7CisJCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uc2ZsYWdzIHw9IFNCQUxfU0ZMQUdTMF9QQ0lfUkVROwogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKCFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKSB7CkBAIC0yOTM0LDcgKzI5MzcsNyBAQAogCQkJCSAqIGZ1cnRoZXIgc2VuZCB3YXMgcmVxdWVzdGVkIGJ5IHRoZSBzdGFjawogCQkJCSAqLwogCQkJCWF0b21pY19pbmMoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KTsKLQkJCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFswXS5mbGFncyB8PSAweDQwOworCQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLnNmbGFncyB8PSBTQkFMX1NGTEFHUzBfUENJX1JFUTsKIAkJCX0KIAkJfQogCX0KQEAgLTMxODAsMjAgKzMxODMsMjAgQEAKIAkJaWYgKCFsZW5ndGgpIHsKIAkJCWlmIChmaXJzdF9sYXApCiAJCQkJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpCi0JCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9Ci0JCQkJCQlTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7CisJCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPQorCQkJCQkJU0JBTF9FRkxBR1NfRklSU1RfRlJBRzsKIAkJCQllbHNlCi0JCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9IDA7CisJCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPSAwOwogCQkJZWxzZQotCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9Ci0JCQkJICAgIFNCQUxfRkxBR1NfTUlERExFX0ZSQUc7CisJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9CisJCQkJICAgIFNCQUxfRUZMQUdTX01JRERMRV9GUkFHOwogCQl9IGVsc2UgewogCQkJaWYgKGZpcnN0X2xhcCkKLQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQotCQkJCSAgICBTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7CisJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9CisJCQkJICAgIFNCQUxfRUZMQUdTX0ZJUlNUX0ZSQUc7CiAJCQllbHNlCi0JCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KLQkJCQkgICAgU0JBTF9GTEFHU19NSURETEVfRlJBRzsKKwkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0KKwkJCQkgICAgU0JBTF9FRkxBR1NfTUlERExFX0ZSQUc7CiAJCX0KIAkJZGF0YSArPSBsZW5ndGhfaGVyZTsKIAkJZWxlbWVudCsrOwpAQCAtMzIwNSwxMiArMzIwOCwxMiBAQAogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IChjaGFyICopcGFnZV90b19waHlzKGZyYWctPnBhZ2UpCiAJCQkrIGZyYWctPnBhZ2Vfb2Zmc2V0OwogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0ubGVuZ3RoID0gZnJhZy0+c2l6ZTsKLQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0gU0JBTF9GTEFHU19NSURETEVfRlJBRzsKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9IFNCQUxfRUZMQUdTX01JRERMRV9GUkFHOwogCQllbGVtZW50Kys7CiAJfQogCi0JaWYgKGJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50IC0gMV0uZmxhZ3MpCi0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50IC0gMV0uZmxhZ3MgPSBTQkFMX0ZMQUdTX0xBU1RfRlJBRzsKKwlpZiAoYnVmZmVyLT5lbGVtZW50W2VsZW1lbnQgLSAxXS5lZmxhZ3MpCisJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50IC0gMV0uZWZsYWdzID0gU0JBTF9FRkxBR1NfTEFTVF9GUkFHOwogCSpuZXh0X2VsZW1lbnRfdG9fZmlsbCA9IGVsZW1lbnQ7CiB9CiAKQEAgLTMyMzQsNyArMzIzNyw3IEBACiAJCS8qZmlsbCBmaXJzdCBidWZmZXIgZW50cnkgb25seSB3aXRoIGhlYWRlciBpbmZvcm1hdGlvbiAqLwogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IHNrYi0+ZGF0YTsKIAkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmxlbmd0aCA9IGhkcl9sZW47Ci0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9IFNCQUxfRkxBR1NfRklSU1RfRlJBRzsKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9IFNCQUxfRUZMQUdTX0ZJUlNUX0ZSQUc7CiAJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwrKzsKIAkJc2tiLT5kYXRhICs9IGhkcl9sZW47CiAJCXNrYi0+bGVuICAtPSBoZHJfbGVuOwpAQCAtMzI0Niw3ICszMjQ5LDcgQEAKIAkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmFkZHIgPSBoZHI7CiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArCiAJCQkJCQkJaGRfbGVuOwotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPSBTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7CisJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPSBTQkFMX0VGTEFHU19GSVJTVF9GUkFHOwogCQlidWYtPmlzX2hlYWRlcltlbGVtZW50XSA9IDE7CiAJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwrKzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCA4NTEyYjVjLi4wMjJmYjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTY0MCw3ICs2NDAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9mc2ZfcmVxX2NyZWF0ZShzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAotCQkJCQkJdTMyIGZzZl9jbWQsIHUzMiBzYnR5cGUsCisJCQkJCQl1MzIgZnNmX2NtZCwgdTggc2J0eXBlLAogCQkJCQkJbWVtcG9vbF90ICpwb29sKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxZGlvLT5hZGFwdGVyOwpAQCAtODQxLDcgKzg0MSw3IEBACiAJaWYgKHpmY3BfcWRpb19zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7CiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9BQk9SVF9GQ1BfQ01ORCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLnNjc2lfYWJvcnQpOwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXEgPSBOVUxMOwpAQCAtMTAxMiw3ICsxMDEyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX1NFTkRfR0VORVJJQywKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwgcG9vbCk7CisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9XUklURV9SRUFELCBwb29sKTsKIAogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXQgPSBQVFJfRVJSKHJlcSk7CkBAIC0xMTEwLDcgKzExMTAsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfU0VORF9FTFMsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsIE5VTEwpOworCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwgTlVMTCk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0ID0gUFRSX0VSUihyZXEpOwpAQCAtMTE1Niw3ICsxMTU2LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0VYQ0hBTkdFX0NPTkZJR19EQVRBLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTExOTgsNyArMTE5OCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfQ09ORklHX0RBVEEsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsIE5VTEwpOworCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwgTlVMTCk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwpAQCAtMTI1MCw3ICsxMjUwLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0VYQ0hBTkdFX1BPUlRfREFUQSwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xMjk2LDcgKzEyOTYsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0VYQ0hBTkdFX1BPUlRfREFUQSwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwgTlVMTCk7CisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELCBOVUxMKTsKIAogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CkBAIC0xNDEyLDcgKzE0MTIsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfT1BFTl9QT1JUX1dJVEhfRElELAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTE0NzgsNyArMTQ3OCw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9DTE9TRV9QT1JULAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTE1NTMsNyArMTU1Myw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTYwNiw3ICsxNjA2LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0NMT1NFX1BPUlQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTY5OCw3ICsxNjk4LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0NMT1NFX1BIWVNJQ0FMX1BPUlQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTgxMiw3ICsxODEyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX09QRU5fTFVOLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIGFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTE5MDEsNyArMTkwMSw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9DTE9TRV9MVU4sCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMjE2MSw3ICsyMTYxLDcgQEAKIHsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CiAJc3RydWN0IGZjcF9jbW5kICpmY3BfY21uZDsKLQl1bnNpZ25lZCBpbnQgc2J0eXBlID0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOworCXU4IHNidHlwZSA9IFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQ7CiAJaW50IHJlYWxfYnl0ZXMsIHJldHZhbCA9IC1FSU8sIGRpeF9ieXRlcyA9IDA7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gc2NzaV9jbW5kLT5kZXZpY2U7CiAJc3RydWN0IHpmY3Bfc2NzaV9kZXYgKnpmY3Bfc2RldiA9IHNkZXZfdG9femZjcChzZGV2KTsKQEAgLTIxODEsNyArMjE4MSw3IEBACiAJfQogCiAJaWYgKHNjc2lfY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKLQkJc2J0eXBlID0gU0JBTF9GTEFHUzBfVFlQRV9XUklURTsKKwkJc2J0eXBlID0gU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEU7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0ZDUF9DTU5ELAogCQkJCSAgc2J0eXBlLCBhZGFwdGVyLT5wb29sLnNjc2lfcmVxKTsKQEAgLTIyODAsNyArMjI4MCw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9GQ1BfQ01ORCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfV1JJVEUsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9XUklURSwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuc2NzaV9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0yMzI4LDE3ICsyMzI4LDE4IEBACiAJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IGFkYXB0ZXItPnFkaW87CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxID0gTlVMTDsKIAlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3N1cHBvcnQgKmJvdHRvbTsKLQlpbnQgZGlyZWN0aW9uLCByZXR2YWwgPSAtRUlPLCBieXRlczsKKwlpbnQgcmV0dmFsID0gLUVJTywgYnl0ZXM7CisJdTggZGlyZWN0aW9uOwogCiAJaWYgKCEoYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0NGREMpKQogCQlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7CiAKIAlzd2l0Y2ggKGZzZl9jZmRjLT5jb21tYW5kKSB7CiAJY2FzZSBGU0ZfUVRDQl9ET1dOTE9BRF9DT05UUk9MX0ZJTEU6Ci0JCWRpcmVjdGlvbiA9IFNCQUxfRkxBR1MwX1RZUEVfV1JJVEU7CisJCWRpcmVjdGlvbiA9IFNCQUxfU0ZMQUdTMF9UWVBFX1dSSVRFOwogCQlicmVhazsKIAljYXNlIEZTRl9RVENCX1VQTE9BRF9DT05UUk9MX0ZJTEU6Ci0JCWRpcmVjdGlvbiA9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKKwkJZGlyZWN0aW9uID0gU0JBTF9TRkxBR1MwX1RZUEVfUkVBRDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC0yNDEzLDcgKzI0MTQsNyBAQAogCQlmc2ZfcmVxLT5xZGlvX3JlcS5zYmFsX3Jlc3BvbnNlID0gc2JhbF9pZHg7CiAJCXpmY3BfZnNmX3JlcV9jb21wbGV0ZShmc2ZfcmVxKTsKIAotCQlpZiAobGlrZWx5KHNiYWxlLT5mbGFncyAmIFNCQUxfRkxBR1NfTEFTVF9FTlRSWSkpCisJCWlmIChsaWtlbHkoc2JhbGUtPmVmbGFncyAmIFNCQUxfRUZMQUdTX0xBU1RfRU5UUlkpKQogCQkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCA5OGU5N2Q5Li5kOWM0MGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIAkvKiBzZXQgbGFzdCBlbnRyeSBmbGFnIGluIGN1cnJlbnQgU0JBTEUgb2YgY3VycmVudCBTQkFMICovCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3VycihxZGlvLCBxX3JlcSk7Ci0Jc2JhbGUtPmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKKwlzYmFsZS0+ZWZsYWdzIHw9IFNCQUxfRUZMQUdTX0xBU1RfRU5UUlk7CiAKIAkvKiBkb24ndCBleGNlZWQgbGFzdCBhbGxvd2VkIFNCQUwgKi8KIAlpZiAocV9yZXEtPnNiYWxfbGFzdCA9PSBxX3JlcS0+c2JhbF9saW1pdCkKQEAgLTEzMiw3ICsxMzIsNyBAQAogCiAJLyogc2V0IGNoYWluaW5nIGZsYWcgaW4gZmlyc3QgU0JBTEUgb2YgY3VycmVudCBTQkFMICovCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sIHFfcmVxKTsKLQlzYmFsZS0+ZmxhZ3MgfD0gU0JBTF9GTEFHUzBfTU9SRV9TQkFMUzsKKwlzYmFsZS0+c2ZsYWdzIHw9IFNCQUxfU0ZMQUdTMF9NT1JFX1NCQUxTOwogCiAJLyogY2FsY3VsYXRlIGluZGV4IG9mIG5leHQgU0JBTCAqLwogCXFfcmVxLT5zYmFsX2xhc3QrKzsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCiAJLyogc2V0IHN0b3JhZ2UtYmxvY2sgdHlwZSBmb3IgbmV3IFNCQUwgKi8KIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sIHFfcmVxKTsKLQlzYmFsZS0+ZmxhZ3MgfD0gcV9yZXEtPnNidHlwZTsKKwlzYmFsZS0+c2ZsYWdzIHw9IHFfcmVxLT5zYnR5cGU7CiAKIAlyZXR1cm4gc2JhbGU7CiB9CkBAIC0xNzcsNyArMTc3LDcgQEAKIAogCS8qIHNldCBzdG9yYWdlLWJsb2NrIHR5cGUgZm9yIHRoaXMgcmVxdWVzdCAqLwogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCBxX3JlcSk7Ci0Jc2JhbGUtPmZsYWdzIHw9IHFfcmVxLT5zYnR5cGU7CisJc2JhbGUtPnNmbGFncyB8PSBxX3JlcS0+c2J0eXBlOwogCiAJZm9yICg7IHNnOyBzZyA9IHNnX25leHQoc2cpKSB7CiAJCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX25leHQocWRpbywgcV9yZXEpOwpAQCAtMzg0LDcgKzM4NCw4IEBACiAJZm9yIChjYyA9IDA7IGNjIDwgUURJT19NQVhfQlVGRkVSU19QRVJfUTsgY2MrKykgewogCQlzYmFsZSA9ICYocWRpby0+cmVzX3FbY2NdLT5lbGVtZW50WzBdKTsKIAkJc2JhbGUtPmxlbmd0aCA9IDA7Ci0JCXNiYWxlLT5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKKwkJc2JhbGUtPmVmbGFncyA9IFNCQUxfRUZMQUdTX0xBU1RfRU5UUlk7CisJCXNiYWxlLT5zZmxhZ3MgPSAwOwogCQlzYmFsZS0+YWRkciA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oCmluZGV4IDIyOTdkOGQuLjU0ZTIyYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oCkBAIC02Nyw3ICs2Nyw3IEBACiAgKiBAcWRpb19vdXRiX3VzYWdlOiB1c2FnZSBvZiBvdXRib3VuZCBxdWV1ZQogICovCiBzdHJ1Y3QgemZjcF9xZGlvX3JlcSB7Ci0JdTMyCXNidHlwZTsKKwl1OAlzYnR5cGU7CiAJdTgJc2JhbF9udW1iZXI7CiAJdTgJc2JhbF9maXJzdDsKIAl1OAlzYmFsX2xhc3Q7CkBAIC0xMTYsNyArMTE2LDcgQEAKICAqLwogc3RhdGljIGlubGluZQogdm9pZCB6ZmNwX3FkaW9fcmVxX2luaXQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxLAotCQkJdW5zaWduZWQgbG9uZyByZXFfaWQsIHUzMiBzYnR5cGUsIHZvaWQgKmRhdGEsIHUzMiBsZW4pCisJCQl1bnNpZ25lZCBsb25nIHJlcV9pZCwgdTggc2J0eXBlLCB2b2lkICpkYXRhLCB1MzIgbGVuKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlpbnQgY291bnQgPSBtaW4oYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xX2ZyZWUpLApAQCAtMTMxLDcgKzEzMSw4IEBACiAKIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgcV9yZXEpOwogCXNiYWxlLT5hZGRyID0gKHZvaWQgKikgcmVxX2lkOwotCXNiYWxlLT5mbGFncyA9IFNCQUxfRkxBR1MwX0NPTU1BTkQgfCBzYnR5cGU7CisJc2JhbGUtPmVmbGFncyA9IDA7CisJc2JhbGUtPnNmbGFncyA9IFNCQUxfU0ZMQUdTMF9DT01NQU5EIHwgc2J0eXBlOwogCiAJaWYgKHVubGlrZWx5KCFkYXRhKSkKIAkJcmV0dXJuOwpAQCAtMTczLDcgKzE3NCw3IEBACiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3VycihxZGlvLCBxX3JlcSk7Ci0Jc2JhbGUtPmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKKwlzYmFsZS0+ZWZsYWdzIHw9IFNCQUxfRUZMQUdTX0xBU1RfRU5UUlk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IDU4NTg0ZGMuLjQ0ZThjYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCQlrZnJlZShzZGV2KTsKIAkJZ290byBvdXQ7CiAJfQotCisJYmxrX2dldF9xdWV1ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKIAlzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZWRhdGEgPSBzZGV2OwogCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggZTYzOTEyNS4uZTBiZDNmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC0zMjIsNiArMzIyLDcgQEAKIAkJa2ZyZWUoZXZ0KTsKIAl9CiAKKwlibGtfcHV0X3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUpOwogCS8qIE5VTEwgcXVldWUgbWVhbnMgdGhlIGRldmljZSBjYW4ndCBiZSB1c2VkICovCiAJc2Rldi0+cmVxdWVzdF9xdWV1ZSA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvY2xrL2NvcmUuYyBiL2RyaXZlcnMvc2gvY2xrL2NvcmUuYwppbmRleCA0ZjY0MTgzLi43ZTljMzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2Nsay9jb3JlLmMKKysrIGIvZHJpdmVycy9zaC9jbGsvY29yZS5jCkBAIC02MzUsNyArNjM1LDcgQEAKIAlzdHJ1Y3QgY2xrICpjbGtwOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmY2xvY2tfbGlzdCwgbm9kZSkgewotCQlpZiAobGlrZWx5KGNsa3AtPm9wcykpIHsKKwkJaWYgKGxpa2VseShjbGtwLT51c2Vjb3VudCAmJiBjbGtwLT5vcHMpKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtwLT5yYXRlOwogCiAJCQlpZiAobGlrZWx5KGNsa3AtPm9wcy0+c2V0X3BhcmVudCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMgYi9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKaW5kZXggNmE5ZTU4ZC4uZDE4Y2U5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCisrKyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwpAQCAtMTg2MSw2ICsxODYxLDcgQEAKIAl9CiAJaWYgKChjbGtfZnJlcS5jcHNkdnNyIDwgQ1BTRFZSX01JTikKIAkgICAgfHwgKGNsa19mcmVxLmNwc2R2c3IgPiBDUFNEVlJfTUFYKSkgeworCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlkZXZfZXJyKCZzcGktPmRldiwKIAkJCSJjcHNkdnNyIGlzIGNvbmZpZ3VyZWQgaW5jb3JyZWN0bHlcbiIpOwogCQlnb3RvIGVycl9jb25maWdfcGFyYW1zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKaW5kZXggNmY4NmJhMC4uOTY5Y2RkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCkBAIC0yOTgsNyArMjk4LDcgQEAKIAl1bnNpZ25lZCBpbnQJCWNvdW50LCBjOwogCXVuc2lnbmVkIGxvbmcJCWJhc2UsIHR4X3JlZywgcnhfcmVnOwogCWludAkJCXdvcmRfbGVuLCBkYXRhX3R5cGUsIGVsZW1lbnRfY291bnQ7Ci0JaW50CQkJZWxlbWVudHM7CisJaW50CQkJZWxlbWVudHMgPSAwOwogCXUzMgkJCWw7CiAJdTgJCQkqIHJ4OwogCWNvbnN0IHU4CQkqIHR4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX3BjaWNvcmUuYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9wY2ljb3JlLmMKaW5kZXggODJmZWIzNC4uMmEyMGRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX3BjaWNvcmUuYworKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfcGNpY29yZS5jCkBAIC01MzksMTAgKzUzOSwxMiBAQAogCWlmICghcGMtPmhvc3Rtb2RlKQogCQlzc2JfcGNpY29yZV9pbml0X2NsaWVudG1vZGUocGMpOwogCi0JLyogQWRkaXRpb25hbCBhbHdheXMgb25jZS1leGVjdXRlZCB3b3JrYXJvdW5kcyAqLwotCXNzYl9wY2ljb3JlX3NlcmRlc193b3JrYXJvdW5kKHBjKTsKLQkvKiBUT0RPOiBBU1BNICovCi0JLyogVE9ETzogQ2xvY2sgUmVxdWVzdCBVcGRhdGUgKi8KKwkvKiBBZGRpdGlvbmFsIFBDSWUgYWx3YXlzIG9uY2UtZXhlY3V0ZWQgd29ya2Fyb3VuZHMgKi8KKwlpZiAoZGV2LT5pZC5jb3JlaWQgPT0gU1NCX0RFVl9QQ0lFKSB7CisJCXNzYl9wY2ljb3JlX3NlcmRlc193b3JrYXJvdW5kKHBjKTsKKwkJLyogVE9ETzogQVNQTSAqLworCQkvKiBUT0RPOiBDbG9jayBSZXF1ZXN0IFVwZGF0ZSAqLworCX0KIH0KIAogc3RhdGljIHUzMiBzc2JfcGNpZV9yZWFkKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMsIHUzMiBhZGRyZXNzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCBkZmMxNmY5Li4xOTYyODRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtMjQsMjMgKzI0LDYgQEAKIAogaWYgU1RBR0lORwogCi1jb25maWcgU1RBR0lOR19FWENMVURFX0JVSUxECi0JYm9vbCAiRXhjbHVkZSBTdGFnaW5nIGRyaXZlcnMgZnJvbSBiZWluZyBidWlsdCIgaWYgU1RBR0lORwotCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KLQkgIEFyZSB5b3Ugc3VyZSB5b3UgcmVhbGx5IHdhbnQgdG8gYnVpbGQgdGhlIHN0YWdpbmcgZHJpdmVycz8KLQkgIFRoZXkgdGFpbnQgeW91ciBrZXJuZWwsIGRvbid0IGxpdmUgdXAgdG8gdGhlIG5vcm1hbCBMaW51eAotCSAga2VybmVsIHF1YWxpdHkgc3RhbmRhcmRzLCBhcmUgYSBiaXQgY3J1ZnR5IGFyb3VuZCB0aGUgZWRnZXMsCi0JICBhbmQgbWlnaHQgZ28gb2ZmIGFuZCBraWNrIHlvdXIgZG9nIHdoZW4geW91IGFyZW4ndCBwYXlpbmcKLQkgIGF0dGVudGlvbi4KLQotCSAgU2F5IE4gaGVyZSB0byBiZSBhYmxlIHRvIHNlbGVjdCBhbmQgYnVpbGQgdGhlIFN0YWdpbmcgZHJpdmVycy4KLQkgIFRoaXMgb3B0aW9uIGlzIHByaW1hcmlseSBoZXJlIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIGJ1aWx0Ci0JICB3aGVuIHNlbGVjdGluZyAnbWFrZSBhbGx5ZXNjb25mZycgYW5kICdtYWtlIGFsbG1vZGNvbmZpZycgc28KLQkgIGRvbid0IGJlIGFsbCB0aGF0IHB1dCBvZmYsIHlvdXIgZG9nIHdpbGwgYmUganVzdCBmaW5lLgotCi1pZiAhU1RBR0lOR19FWENMVURFX0JVSUxECi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3R0eS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9LY29uZmlnIgpAQCAtMTc3LDUgKzE2MCw0IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL252ZWMvS2NvbmZpZyIKIAotZW5kaWYgIyAhU1RBR0lOR19FWENMVURFX0JVSUxECiBlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLWp0YWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLWp0YWcuYwppbmRleCA4NzYzMDg4Li44YjE2MjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS1qdGFnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEtanRhZy5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxzdGFnaW5nL2FsdGVyYS5oPgorI2luY2x1ZGUgImFsdGVyYS5oIgogI2luY2x1ZGUgImFsdGVyYS1leHBydC5oIgogI2luY2x1ZGUgImFsdGVyYS1qdGFnLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS5jCmluZGV4IDA1YWFkMzUuLjljZDVlNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPHN0YWdpbmcvYWx0ZXJhLmg+CisjaW5jbHVkZSAiYWx0ZXJhLmgiCiAjaW5jbHVkZSAiYWx0ZXJhLWV4cHJ0LmgiCiAjaW5jbHVkZSAiYWx0ZXJhLWp0YWcuaCIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGFnaW5nL2FsdGVyYS5oIGIvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9zdGFnaW5nL2FsdGVyYS5oCnJlbmFtZSB0byBkcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL0tjb25maWcKaW5kZXggMWYxNWUxZi4uYWZkNmNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBBVEg2S19MRUdBQ1kKIAl0cmlzdGF0ZSAiQXRoZXJvcyBBUjYwMDMgc3VwcG9ydCAobm9uIG1hYzgwMjExKSIKICAgICAgICAgZGVwZW5kcyBvbiBNTUMgJiYgV0xBTgorCWRlcGVuZHMgb24gQ0ZHODAyMTEKICAgICAgICAgc2VsZWN0IFdJUkVMRVNTX0VYVAogICAgICAgICBzZWxlY3QgV0VYVF9QUklWCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9jZmc4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9jZmc4MDIxMS5jCmluZGV4IDc3ZGZiNDAuLmQzYTc3NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2NmZzgwMjExLmMKQEAgLTg3MCw3ICs4NzAsOCBAQAogICAgIGlmKGFyLT5zY2FuX3JlcXVlc3QpCiAgICAgewogICAgICAgICAvKiBUcmFuc2xhdGUgZGF0YSB0byBjZmc4MDIxMSBtZ210IGZvcm1hdCAqLwotICAgICAgICB3bWlfaXRlcmF0ZV9ub2Rlcyhhci0+YXJXbWksIGFyNmtfY2ZnODAyMTFfc2Nhbl9ub2RlLCBhci0+d2Rldi0+d2lwaHkpOworCWlmIChhci0+YXJXbWkpCisJCXdtaV9pdGVyYXRlX25vZGVzKGFyLT5hcldtaSwgYXI2a19jZmc4MDIxMV9zY2FuX25vZGUsIGFyLT53ZGV2LT53aXBoeSk7CiAKICAgICAgICAgY2ZnODAyMTFfc2Nhbl9kb25lKGFyLT5zY2FuX3JlcXVlc3QsCiAgICAgICAgICAgICAoKHN0YXR1cyAmIEFfRUNBTkNFTEVEKSB8fCAoc3RhdHVzICYgQV9FQlVTWSkpID8gdHJ1ZSA6IGZhbHNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfaXcuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfaXcuYwppbmRleCA5MjljZWFmMy4uMTVlMWIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy93bF9pdy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfaXcuYwpAQCAtNjQsOCArNjQsNiBAQAogZXh0ZXJuIGJvb2wgd2xfaXdfY29ubl9zdGF0dXNfc3RyKHUzMiBldmVudF90eXBlLCB1MzIgc3RhdHVzLAogCQkJCSAgdTMyIHJlYXNvbiwgY2hhciAqc3RyaW5nQnVmLCB1aW50IGJ1Zmxlbik7CiAKLXVpbnQgd2xfbXNnX2xldmVsID0gV0xfRVJST1JfVkFMOwotCiAjZGVmaW5lIE1BWF9XTElXX0lPQ1RMX0xFTiAxMDI0CiAKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5jCmluZGV4IDFjNDVjMTEuLmFhODdiMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5jCkBAIC01NDIsNiArNTQyLDggQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCWludCByZXQgPSAtRU5PTUVNOwogCXVpbnQzMl90IHR0X3BhZ2VzOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9vdXRwdXQ7CiAKIAlkZXZfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXZfcHJpdiksIEdGUF9LRVJORUwpOwogCWlmIChkZXZfcHJpdiA9PSBOVUxMKQpAQCAtNjYzLDcgKzY2NSwxOCBAQAogCQlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZGV2KTsKIAl9CiAKLQlyZXQgPSBwc2JfYmFja2xpZ2h0X2luaXQoZGV2KTsKKwkvKiBPbmx5IGFkZCBiYWNrbGlnaHQgc3VwcG9ydCBpZiB3ZSBoYXZlIExWRFMgb3V0cHV0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LAorCQkJICAgIGhlYWQpIHsKKwkJcHNiX2ludGVsX291dHB1dCA9IHRvX3BzYl9pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKworCQlzd2l0Y2ggKHBzYl9pbnRlbF9vdXRwdXQtPnR5cGUpIHsKKwkJY2FzZSBJTlRFTF9PVVRQVVRfTFZEUzoKKwkJCXJldCA9IHBzYl9iYWNrbGlnaHRfaW5pdChkZXYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogI2lmIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ZiLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9mYi5jCmluZGV4IDk5YzAzYTIuLjA4NGMzNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ZiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmIuYwpAQCAtNDQxLDYgKzQ0MSwxNiBAQAogCWluZm8tPnNjcmVlbl9zaXplID0gc2l6ZTsKIAltZW1zZXQoaW5mby0+c2NyZWVuX2Jhc2UsIDAsIHNpemUpOwogCisJaWYgKGRldl9wcml2LT5wZy0+c3RvbGVuX3NpemUpIHsKKwkJaW5mby0+YXBlcnR1cmVzID0gYWxsb2NfYXBlcnR1cmVzKDEpOworCQlpZiAoIWluZm8tPmFwZXJ0dXJlcykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2VycjA7CisJCX0KKwkJaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uYmFzZSA9IGRldi0+bW9kZV9jb25maWcuZmJfYmFzZTsKKwkJaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSA9IGRldl9wcml2LT5wZy0+c3RvbGVuX3NpemU7CisJfQorCiAJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZvLCBmYi0+cGl0Y2gsIGZiLT5kZXB0aCk7CiAJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihpbmZvLCAmZmJkZXYtPnBzYl9mYl9oZWxwZXIsCiAJCQkJc2l6ZXMtPmZiX3dpZHRoLCBzaXplcy0+ZmJfaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX2Jpb3MuYwppbmRleCA0OGFjOGJhLi40MTc5NjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9iaW9zLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfYmlvcy5jCkBAIC0xNTQsMTAgKzE1NCwxNSBAQAogCiAJZmlsbF9kZXRhaWxfdGltaW5nX2RhdGEocGFuZWxfZml4ZWRfbW9kZSwgZHZvX3RpbWluZyk7CiAKLQlkZXZfcHJpdi0+bGZwX2x2ZHNfdmJ0X21vZGUgPSBwYW5lbF9maXhlZF9tb2RlOwotCi0JRFJNX0RFQlVHKCJGb3VuZCBwYW5lbCBtb2RlIGluIEJJT1MgVkJUIHRhYmxlczpcbiIpOwotCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUocGFuZWxfZml4ZWRfbW9kZSk7CisJaWYgKHBhbmVsX2ZpeGVkX21vZGUtPmh0b3RhbCA+IDAgJiYgcGFuZWxfZml4ZWRfbW9kZS0+dnRvdGFsID4gMCkgeworCQlkZXZfcHJpdi0+bGZwX2x2ZHNfdmJ0X21vZGUgPSBwYW5lbF9maXhlZF9tb2RlOworCQlEUk1fREVCVUcoIkZvdW5kIHBhbmVsIG1vZGUgaW4gQklPUyBWQlQgdGFibGVzOlxuIik7CisJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUocGFuZWxfZml4ZWRfbW9kZSk7CisJfSBlbHNlIHsKKwkJRFJNX0RFQlVHKCJJZ25vcmluZyBib2d1cyBMVkRTIFZCVCBtb2RlLlxuIik7CisJCWRldl9wcml2LT5sdmRzX3ZidCA9IDA7CisJCWtmcmVlKHBhbmVsX2ZpeGVkX21vZGUpOworCX0KIAogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAxLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMS5oCmluZGV4IDBiOWI4NTQuLjRjYzFhNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAxLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDEuaApAQCAtODEsNyArODEsNiBAQAogCiBpbnQgYWRpczE2MjAxX3NldF9pcnEoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgYm9vbCBlbmFibGUpOwogCi0jaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogZW51bSBhZGlzMTYyMDFfc2NhbiB7CiAJQURJUzE2MjAxX1NDQU5fU1VQUExZLAogCUFESVMxNjIwMV9TQ0FOX0FDQ19YLApAQCAtOTIsNiArOTEsNyBAQAogCUFESVMxNjIwMV9TQ0FOX0lOQ0xJX1ksCiB9OwogCisjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogdm9pZCBhZGlzMTYyMDFfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiBpbnQgYWRpczE2MjAxX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMy5oCmluZGV4IDhiYjhjZTUuLjE3NWUyMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDMuaApAQCAtNzYsNyArNzYsNiBAQAogCiBpbnQgYWRpczE2MjAzX3NldF9pcnEoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgYm9vbCBlbmFibGUpOwogCi0jaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogZW51bSBhZGlzMTYyMDNfc2NhbiB7CiAJQURJUzE2MjAzX1NDQU5fU1VQUExZLAogCUFESVMxNjIwM19TQ0FOX0FVWF9BREMsCkBAIC04NSw2ICs4NCw3IEBACiAJQURJUzE2MjAzX1NDQU5fSU5DTElfWSwKIH07CiAKKyNpZmRlZiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSCiB2b2lkIGFkaXMxNjIwM19yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIGludCBhZGlzMTYyMDNfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvbWF4NTE3LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9tYXg1MTcuYwppbmRleCA4ODE3NjhkLi4yZmUzNGQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvbWF4NTE3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvbWF4NTE3LmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBtYXg1MThfaW5mbyA9IHsKLQkuYXR0cnMgPSAmbWF4NTE3X2F0dHJpYnV0ZV9ncm91cCwKKwkuYXR0cnMgPSAmbWF4NTE4X2F0dHJpYnV0ZV9ncm91cCwKIAkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMKaW5kZXggMjU4OWE3ZS4uMzYxMjM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jCkBAIC0xMzcsMTMgKzEzNywxMyBAQAogCQlpZiAoc3QtPnZhcmlhbnQtPmZsYWdzICYgQURJUzE2NDAwX05PX0JVUlNUKSB7CiAJCQlyZXQgPSBhZGlzMTYzNTBfc3BpX3JlYWRfYWxsKCZpbmRpb19kZXYtPmRldiwgc3QtPnJ4KTsKIAkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7CisJCQkJZ290byBlcnI7CiAJCQlmb3IgKDsgaSA8IHJpbmctPnNjYW5fY291bnQ7IGkrKykKIAkJCQlkYXRhW2ldCT0gKihzMTYgKikoc3QtPnJ4ICsgaSoyKTsKIAkJfSBlbHNlIHsKIAkJCXJldCA9IGFkaXMxNjQwMF9zcGlfcmVhZF9idXJzdCgmaW5kaW9fZGV2LT5kZXYsIHN0LT5yeCk7CiAJCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OworCQkJCWdvdG8gZXJyOwogCQkJZm9yICg7IGkgPCBpbmRpb19kZXYtPnJpbmctPnNjYW5fY291bnQ7IGkrKykgewogCQkJCWogPSBfX2ZmcyhtYXNrKTsKIAkJCQltYXNrICY9IH4oMSA8PCBqKTsKQEAgLTE1OCw5ICsxNTgsMTMgQEAKIAlyaW5nLT5hY2Nlc3MtPnN0b3JlX3RvKGluZGlvX2Rldi0+cmluZywgKHU4ICopIGRhdGEsIHBmLT50aW1lc3RhbXApOwogCiAJaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoaW5kaW9fZGV2LT50cmlnKTsKLQlrZnJlZShkYXRhKTsKIAorCWtmcmVlKGRhdGEpOwogCXJldHVybiBJUlFfSEFORExFRDsKKworZXJyOgorCWtmcmVlKGRhdGEpOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgYWRpczE2NDAwX3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYwppbmRleCA2MTU5MDIzLi5kNTA0YWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby10cmlnZ2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jCkBAIC0yOTQsNiArMjk0LDcgQEAKIAlwZi0+aCA9IGg7CiAJcGYtPnRocmVhZCA9IHRocmVhZDsKIAlwZi0+dHlwZSA9IHR5cGU7CisJcGYtPnByaXZhdGVfZGF0YSA9IHByaXZhdGU7CiAKIAlyZXR1cm4gcGY7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpL2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW5pdC5jCmluZGV4IDI4MTg4NTEuLmQxZmZhMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW5pdC5jCkBAIC0yMDUsMTAgKzIwNSwxMCBAQAogCQkJImhvc3RfaHdfc3RhdGUgPSAweCUwOHgsIG1lX2h3X3N0YXRlID0gMHglMDh4LlxuIiwKIAkJCWRldi0+aG9zdF9od19zdGF0ZSwgZGV2LT5tZV9od19zdGF0ZSk7CiAKLQkJaWYgKCEoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9SRFkpICE9IEhfUkRZKQorCQlpZiAoIShkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX1JEWSkpCiAJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImhvc3QgdHVybiBvZmYgSF9SRFkuXG4iKTsKIAotCQlpZiAoIShkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkgIT0gTUVfUkRZX0hSQSkKKwkJaWYgKCEoZGV2LT5tZV9od19zdGF0ZSAmIE1FX1JEWV9IUkEpKQogCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJNRSB0dXJuIG9mZiBNRV9SRFkuXG4iKTsKIAogCQlwcmludGsoS0VSTl9FUlIgIm1laTogbGluayBsYXllciBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vS2NvbmZpZwppbmRleCBiMDUzMDY3Li5mZTQwZTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCXRyaXN0YXRlICJPbmUgTGFwdG9wIFBlciBDaGlsZCBEaXNwbGF5IENPTnRyb2xsZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE9MUEMgJiYgRkIKIAlzZWxlY3QgSTJDCisJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAktLS1oZWxwLS0tCiAJICBBZGQgc3VwcG9ydCBmb3IgdGhlIE9MUEMgWE8gRENPTiBjb250cm9sbGVyLiAgVGhpcyBjb250cm9sbGVyIGlzCiAJICBvbmx5IGF2YWlsYWJsZSBvbiBPTFBDIHBsYXRmb3Jtcy4gICBVbmxlc3MgeW91IGhhdmUgb25lIG9mIHRoZXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NkLmMKaW5kZXggYmRkYjAzMS4uY2RhZTQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYwpAQCAtMjMyOCw3ICsyMzI4LDcgQEAKIAogCQkJcmV0dmFsID0gc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBJT19TRU5EX09QX0NPTkQsIDAsIFNEX1JTUF9UWVBFX1I0LCByc3AsIDUpOwogCQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCWludCBmdW5jX251bSA9IChyc3BbMV0gPj4gNCkgJiYgMHgwNzsKKwkJCQlpbnQgZnVuY19udW0gPSAocnNwWzFdID4+IDQpICYgMHgwNzsKIAkJCQlpZiAoZnVuY19udW0pIHsKIAkJCQkJUlRTWF9ERUJVR1AoIlNEX0lPIGNhcmQgKEZ1bmN0aW9uIG51bWJlcjogJWQpIVxuIiwgZnVuY19udW0pOwogCQkJCQljaGlwLT5zZF9pbyA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCmluZGV4IDZlOTllYzguLjhjYmVhNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCkBAIC0yNiw2ICsyNiw4IEBACiBzdGF0aWMgaW50IHN0dWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKIAkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyB2b2lkIHN0dWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKK3N0YXRpYyBpbnQgc3R1Yl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitzdGF0aWMgaW50IHN0dWJfcG9zdF9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKIAogLyoKICAqIERlZmluZSBkZXZpY2UgSURzIGhlcmUgaWYgeW91IHdhbnQgdG8gZXhwbGljaXRseSBsaW1pdCBleHBvcnRhYmxlIGRldmljZXMuCkBAIC01OSw2ICs2MSw4IEBACiAJLnByb2JlCQk9IHN0dWJfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSBzdHViX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlCT0gc3R1Yl90YWJsZSwKKwkucHJlX3Jlc2V0CT0gc3R1Yl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQJPSBzdHViX3Bvc3RfcmVzZXQsCiB9OwogCiAvKgpAQCAtNTQxLDMgKzU0NSwyMCBAQAogCQlkZWxfbWF0Y2hfYnVzaWQoKGNoYXIgKil1ZGV2X2J1c2lkKTsKIAl9CiB9CisKKy8qIAorICogUHJlc2VuY2Ugb2YgcHJlX3Jlc2V0IGFuZCBwb3N0X3Jlc2V0IHByZXZlbnRzIHRoZSBkcml2ZXIgZnJvbSBiZWluZyB1bmJvdW5kCisgKiB3aGVuIHRoZSBkZXZpY2UgaXMgYmVpbmcgcmVzZXQKKyAqLworIAoraW50IHN0dWJfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJZGV2X2RiZygmaW50ZXJmYWNlLT5kZXYsICJwcmVfcmVzZXRcbiIpOworCXJldHVybiAwOworfQorCitpbnQgc3R1Yl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJZGV2X2RiZygmaW50ZXJmYWNlLT5kZXYsICJwb3N0X3Jlc2V0XG4iKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCmluZGV4IGE1YzFmYTFmLi5iYzU3ODQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKQEAgLTE3NSwxNiArMTc1LDE4IEBACiAJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJ1c2JfcXVldWVfcmVzZXRfZGV2aWNlXG4iKTsKIAogCS8qCi0JICogdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCBjYXVzZWQgYSBkZWFkbG9jazogaXQgY2F1c2VzIHRoZSBkcml2ZXIKLQkgKiB0byB1bmJpbmQuIEluIHRoZSBzaHV0ZG93biB0aGUgcnggdGhyZWFkIGlzIHNpZ25hbGxlZCB0byBzaHV0IGRvd24KLQkgKiBidXQgdGhpcyB0aHJlYWQgaXMgcGVuZGluZyBpbiB0aGUgdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldC4KLQkgKgotCSAqIEluc3RlYWQgcXVldWUgdGhlIHJlc2V0LgotCSAqCi0JICogVW5mb3J0dW5hdGx5IGFuIGV4aXN0aW5nIHVzYmlwIGNvbm5lY3Rpb24gd2lsbCBiZSBkcm9wcGVkIGR1ZSB0bwotCSAqIGRyaXZlciB1bmJpbmRpbmcuCisJICogV2l0aCB0aGUgaW1wbGVtZW50YXRpb24gb2YgcHJlX3Jlc2V0IGFuZCBwb3N0X3Jlc2V0IHRoZSBkcml2ZXIgbm8gCisJICogbG9uZ2VyIHVuYmluZHMuIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2Ygc3luY2hyb25vdXMgcmVzZXQuCiAJICovCi0JdXNiX3F1ZXVlX3Jlc2V0X2RldmljZShzZGV2LT5pbnRlcmZhY2UpOworCisJaWYgKHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoc2Rldi0+dWRldiwgc2Rldi0+aW50ZXJmYWNlKTwwKQorCXsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgImNvdWxkIG5vdCBvYnRhaW4gbG9jayB0byByZXNldCBkZXZpY2VcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJdXNiX3Jlc2V0X2RldmljZShzZGV2LT51ZGV2KTsKKwl1c2JfdW5sb2NrX2RldmljZShzZGV2LT51ZGV2KTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX2dzbS5jIGIvZHJpdmVycy90dHkvbl9nc20uYwppbmRleCBhNGM0MmE3Li4wOWU4YzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9uX2dzbS5jCisrKyBiL2RyaXZlcnMvdHR5L25fZ3NtLmMKQEAgLTIxMjgsOCArMjEyOCw4IEBACiAJZ3NtLT50dHkgPSBOVUxMOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGdzbWxkX3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgZ3NtbGRfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCisJCQkgICAgICBjaGFyICpmcCwgaW50IGNvdW50KQogewogCXN0cnVjdCBnc21fbXV4ICpnc20gPSB0dHktPmRpc2NfZGF0YTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkcDsKQEAgLTIxNjIsOCArMjE2Miw2IEBACiAJfQogCS8qIEZBU1lOQyBpZiBuZWVkZWQgPyAqLwogCS8qIElmIGNsb2dnZWQgY2FsbCB0dHlfdGhyb3R0bGUodHR5KTsgKi8KLQotCXJldHVybiBjb3VudDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX2hkbGMuYyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCmluZGV4IGNhYzY2NjMuLmNlYTU2MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25faGRsYy5jCisrKyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCkBAIC0xODgsOCArMTg4LDggQEAKIAkJCQkgICAgcG9sbF90YWJsZSAqd2FpdCk7CiBzdGF0aWMgaW50IG5faGRsY190dHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIG5faGRsY190dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG5faGRsY190dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQljb25zdCBfX3U4ICpjcCwgY2hhciAqZnAsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBuX2hkbGNfdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgX191OCAqY3AsCisJCQkgICAgICAgY2hhciAqZnAsIGludCBjb3VudCk7CiBzdGF0aWMgdm9pZCBuX2hkbGNfdHR5X3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAogI2RlZmluZSBic2V0KHAsYikJKChwKVsoYikgPj4gNV0gfD0gKDEgPDwgKChiKSAmIDB4MWYpKSkKQEAgLTUwOSw4ICs1MDksOCBAQAogICogQ2FsbGVkIGJ5IHR0eSBsb3cgbGV2ZWwgZHJpdmVyIHdoZW4gcmVjZWl2ZSBkYXRhIGlzIGF2YWlsYWJsZS4gRGF0YSBpcwogICogaW50ZXJwcmV0ZWQgYXMgb25lIEhETEMgZnJhbWUuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbl9oZGxjX3R0eV9yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCWNvbnN0IF9fdTggKmRhdGEsIGNoYXIgKmZsYWdzLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBuX2hkbGNfdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgX191OCAqZGF0YSwKKwkJCSAgICAgICBjaGFyICpmbGFncywgaW50IGNvdW50KQogewogCXJlZ2lzdGVyIHN0cnVjdCBuX2hkbGMgKm5faGRsYyA9IHR0eTJuX2hkbGMgKHR0eSk7CiAJcmVnaXN0ZXIgc3RydWN0IG5faGRsY19idWYgKmJ1ZjsKQEAgLTUyMSwyMCArNTIxLDIwIEBACiAJCQogCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiBzdHVmZiBjb21lcyBpbiBvbiB0aGUgYmFja3VwIHR0eSAqLwogCWlmICghbl9oZGxjIHx8IHR0eSAhPSBuX2hkbGMtPnR0eSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybjsKIAkJCiAJLyogdmVyaWZ5IGxpbmUgaXMgdXNpbmcgSERMQyBkaXNjaXBsaW5lICovCiAJaWYgKG5faGRsYy0+bWFnaWMgIT0gSERMQ19NQUdJQykgewogCQlwcmludGsoIiVzKCVkKSBsaW5lIG5vdCB1c2luZyBIRExDIGRpc2NpcGxpbmVcbiIsCiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm47CiAJfQogCQogCWlmICggY291bnQ+bWF4ZnJhbWUgKSB7CiAJCWlmIChkZWJ1Z2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCQogCQkJcHJpbnRrKCIlcyglZCkgcnggY291bnQ+bWF4ZnJhbWVzaXplLCBkYXRhIGRpc2NhcmRlZFxuIiwKIAkJCSAgICAgICBfX0ZJTEVfXyxfX0xJTkVfXyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm47CiAJfQogCiAJLyogZ2V0IGEgZnJlZSBIRExDIGJ1ZmZlciAqLwkKQEAgLTU1MCw3ICs1NTAsNyBAQAogCQlpZiAoZGVidWdsZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQkKIAkJCXByaW50aygiJXMoJWQpIG5vIG1vcmUgcnggYnVmZmVycywgZGF0YSBkaXNjYXJkZWRcbiIsCiAJCQkgICAgICAgX19GSUxFX18sX19MSU5FX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuOwogCX0KIAkJCiAJLyogY29weSByZWNlaXZlZCBkYXRhIHRvIEhETEMgYnVmZmVyICovCkBAIC01NjUsOCArNTY1LDYgQEAKIAlpZiAobl9oZGxjLT50dHktPmZhc3luYyAhPSBOVUxMKQogCQlraWxsX2Zhc3luYyAoJm5faGRsYy0+dHR5LT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAotCXJldHVybiBjb3VudDsKLQogfQkvKiBlbmQgb2Ygbl9oZGxjX3R0eV9yZWNlaXZlKCkgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX3IzOTY0LmMgYi9kcml2ZXJzL3R0eS9uX3IzOTY0LmMKaW5kZXggYTRiYzM5YzIuLjVjNmMzMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25fcjM5NjQuYworKysgYi9kcml2ZXJzL3R0eS9uX3IzOTY0LmMKQEAgLTEzOSw4ICsxMzksOCBAQAogc3RhdGljIHZvaWQgcjM5NjRfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICpvbGQpOwogc3RhdGljIHVuc2lnbmVkIGludCByMzk2NF9wb2xsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwotc3RhdGljIHVuc2lnbmVkIGludCByMzk2NF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCByMzk2NF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKKwkJY2hhciAqZnAsIGludCBjb3VudCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyB0dHlfbGRpc2NfTl9SMzk2NCA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTEyMzksOCArMTIzOSw4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCByMzk2NF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIHIzOTY0X3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLAorCQkJY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm8gPSB0dHktPmRpc2NfZGF0YTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwOwpAQCAtMTI1Nyw4ICsxMjU3LDYgQEAKIAkJfQogCiAJfQotCi0JcmV0dXJuIGNvdW50OwogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX3R0eS5jIGIvZHJpdmVycy90dHkvbl90dHkuYwppbmRleCA5NWQwYTljLi4wYWQzMjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9uX3R0eS5jCisrKyBiL2RyaXZlcnMvdHR5L25fdHR5LmMKQEAgLTgxLDYgKzgxLDM4IEBACiAJcmV0dXJuIHB1dF91c2VyKHgsIHB0cik7CiB9CiAKKy8qKgorICoJbl90dHlfc2V0X19yb29tCS0JcmVjZWl2ZSBzcGFjZQorICoJQHR0eTogdGVybWluYWwKKyAqCisgKglDYWxsZWQgYnkgdGhlIGRyaXZlciB0byBmaW5kIG91dCBob3cgbXVjaCBkYXRhIGl0IGlzCisgKglwZXJtaXR0ZWQgdG8gZmVlZCB0byB0aGUgbGluZSBkaXNjaXBsaW5lIHdpdGhvdXQgYW55IGJlaW5nIGxvc3QKKyAqCWFuZCB0aHVzIHRvIG1hbmFnZSBmbG93IGNvbnRyb2wuIE5vdCBzZXJpYWxpemVkLiBBbnN3ZXJzIGZvciB0aGUKKyAqCSJpbnN0YW50Ii4KKyAqLworCitzdGF0aWMgdm9pZCBuX3R0eV9zZXRfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCS8qIHR0eS0+cmVhZF9jbnQgaXMgbm90IHJlYWQgbG9ja2VkID8gKi8KKwlpbnQJbGVmdCA9IE5fVFRZX0JVRl9TSVpFIC0gdHR5LT5yZWFkX2NudCAtIDE7CisJaW50IG9sZF9sZWZ0OworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9pbmcgaW5wdXQgY2Fub25pY2FsaXphdGlvbiwgYW5kIHRoZXJlIGFyZSBubworCSAqIHBlbmRpbmcgbmV3bGluZXMsIGxldCBjaGFyYWN0ZXJzIHRocm91Z2ggd2l0aG91dCBsaW1pdCwgc28KKwkgKiB0aGF0IGVyYXNlIGNoYXJhY3RlcnMgd2lsbCBiZSBoYW5kbGVkLiAgT3RoZXIgZXhjZXNzCisJICogY2hhcmFjdGVycyB3aWxsIGJlIGJlZXBlZC4KKwkgKi8KKwlpZiAobGVmdCA8PSAwKQorCQlsZWZ0ID0gdHR5LT5pY2Fub24gJiYgIXR0eS0+Y2Fub25fZGF0YTsKKwlvbGRfbGVmdCA9IHR0eS0+cmVjZWl2ZV9yb29tOworCXR0eS0+cmVjZWl2ZV9yb29tID0gbGVmdDsKKworCS8qIERpZCB0aGlzIG9wZW4gdXAgdGhlIHJlY2VpdmUgYnVmZmVyPyBXZSBtYXkgbmVlZCB0byBmbGlwICovCisJaWYgKGxlZnQgJiYgIW9sZF9sZWZ0KQorCQlzY2hlZHVsZV93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKK30KKwogc3RhdGljIHZvaWQgcHV0X3R0eV9xdWV1ZV9ub2xvY2sodW5zaWduZWQgY2hhciBjLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWlmICh0dHktPnJlYWRfY250IDwgTl9UVFlfQlVGX1NJWkUpIHsKQEAgLTE1Miw2ICsxODQsNyBAQAogCiAJdHR5LT5jYW5vbl9oZWFkID0gdHR5LT5jYW5vbl9kYXRhID0gdHR5LT5lcmFzaW5nID0gMDsKIAltZW1zZXQoJnR0eS0+cmVhZF9mbGFncywgMCwgc2l6ZW9mIHR0eS0+cmVhZF9mbGFncyk7CisJbl90dHlfc2V0X3Jvb20odHR5KTsKIAljaGVja191bnRocm90dGxlKHR0eSk7CiB9CiAKQEAgLTEzMjcsMTkgKzEzNjAsMTcgQEAKICAqCWNhbGxzIG9uZSBhdCBhIHRpbWUgYW5kIGluIG9yZGVyIChvciB1c2luZyBmbHVzaF90b19sZGlzYykKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IG5fdHR5X3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgbl90dHlfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCisJCQkgICAgICBjaGFyICpmcCwgaW50IGNvdW50KQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CiAJY2hhciAqZiwgZmxhZ3MgPSBUVFlfTk9STUFMOwogCWludAlpOwogCWNoYXIJYnVmWzY0XTsKIAl1bnNpZ25lZCBsb25nIGNwdWZsYWdzOwotCWludCBsZWZ0OwotCWludCByZXQgPSAwOwogCiAJaWYgKCF0dHktPnJlYWRfYnVmKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJaWYgKHR0eS0+cmVhbF9yYXcpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+cmVhZF9sb2NrLCBjcHVmbGFncyk7CkBAIC0xMzQ5LDcgKzEzODAsNiBAQAogCQltZW1jcHkodHR5LT5yZWFkX2J1ZiArIHR0eS0+cmVhZF9oZWFkLCBjcCwgaSk7CiAJCXR0eS0+cmVhZF9oZWFkID0gKHR0eS0+cmVhZF9oZWFkICsgaSkgJiAoTl9UVFlfQlVGX1NJWkUtMSk7CiAJCXR0eS0+cmVhZF9jbnQgKz0gaTsKLQkJcmV0ICs9IGk7CiAJCWNwICs9IGk7CiAJCWNvdW50IC09IGk7CiAKQEAgLTEzNTksMTAgKzEzODksOCBAQAogCQltZW1jcHkodHR5LT5yZWFkX2J1ZiArIHR0eS0+cmVhZF9oZWFkLCBjcCwgaSk7CiAJCXR0eS0+cmVhZF9oZWFkID0gKHR0eS0+cmVhZF9oZWFkICsgaSkgJiAoTl9UVFlfQlVGX1NJWkUtMSk7CiAJCXR0eS0+cmVhZF9jbnQgKz0gaTsKLQkJcmV0ICs9IGk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+cmVhZF9sb2NrLCBjcHVmbGFncyk7CiAJfSBlbHNlIHsKLQkJcmV0ID0gY291bnQ7CiAJCWZvciAoaSA9IGNvdW50LCBwID0gY3AsIGYgPSBmcDsgaTsgaS0tLCBwKyspIHsKIAkJCWlmIChmKQogCQkJCWZsYWdzID0gKmYrKzsKQEAgLTEzOTAsNiArMTQxOCw4IEBACiAJCQl0dHktPm9wcy0+Zmx1c2hfY2hhcnModHR5KTsKIAl9CiAKKwluX3R0eV9zZXRfcm9vbSh0dHkpOworCiAJaWYgKCghdHR5LT5pY2Fub24gJiYgKHR0eS0+cmVhZF9jbnQgPj0gdHR5LT5taW5pbXVtX3RvX3dha2UpKSB8fAogCQlMX0VYVFBST0ModHR5KSkgewogCQlraWxsX2Zhc3luYygmdHR5LT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKQEAgLTE0MDIsMTIgKzE0MzIsOCBAQAogCSAqIG1vZGUuICBXZSBkb24ndCB3YW50IHRvIHRocm90dGxlIHRoZSBkcml2ZXIgaWYgd2UncmUgaW4KIAkgKiBjYW5vbmljYWwgbW9kZSBhbmQgZG9uJ3QgaGF2ZSBhIG5ld2xpbmUgeWV0IQogCSAqLwotCWxlZnQgPSBOX1RUWV9CVUZfU0laRSAtIHR0eS0+cmVhZF9jbnQgLSAxOwotCi0JaWYgKGxlZnQgPCBUVFlfVEhSRVNIT0xEX1RIUk9UVExFKQorCWlmICh0dHktPnJlY2VpdmVfcm9vbSA8IFRUWV9USFJFU0hPTERfVEhST1RUTEUpCiAJCXR0eV90aHJvdHRsZSh0dHkpOwotCi0JcmV0dXJuIHJldDsKIH0KIAogaW50IGlzX2lnbm9yZWQoaW50IHNpZykKQEAgLTE0NTEsNiArMTQ3Nyw3IEBACiAJaWYgKHRlc3RfYml0KFRUWV9IV19DT09LX0lOLCAmdHR5LT5mbGFncykpIHsKIAkJdHR5LT5yYXcgPSAxOwogCQl0dHktPnJlYWxfcmF3ID0gMTsKKwkJbl90dHlfc2V0X3Jvb20odHR5KTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoSV9JU1RSSVAodHR5KSB8fCBJX0lVQ0xDKHR0eSkgfHwgSV9JR05DUih0dHkpIHx8CkBAIC0xNTAzLDYgKzE1MzAsNyBAQAogCQllbHNlCiAJCQl0dHktPnJlYWxfcmF3ID0gMDsKIAl9CisJbl90dHlfc2V0X3Jvb20odHR5KTsKIAkvKiBUaGUgdGVybWlvcyBjaGFuZ2UgbWFrZSB0aGUgdHR5IHJlYWR5IGZvciBJL08gKi8KIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPnJlYWRfd2FpdCk7CkBAIC0xNzg0LDYgKzE4MTIsOCBAQAogCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKIAkJCQlicmVhazsKIAkJCX0KKwkJCS8qIEZJWE1FOiBkb2VzIG5fdHR5X3NldF9yb29tIG5lZWQgbG9ja2luZyA/ICovCisJCQluX3R0eV9zZXRfcm9vbSh0dHkpOwogCQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTg1NSw4ICsxODg1LDEwIEBACiAJCSAqIGxvbmdlciB0aGFuIFRUWV9USFJFU0hPTERfVU5USFJPVFRMRSBpbiBjYW5vbmljYWwgbW9kZSwKIAkJICogd2Ugd29uJ3QgZ2V0IGFueSBtb3JlIGNoYXJhY3RlcnMuCiAJCSAqLwotCQlpZiAobl90dHlfY2hhcnNfaW5fYnVmZmVyKHR0eSkgPD0gVFRZX1RIUkVTSE9MRF9VTlRIUk9UVExFKQorCQlpZiAobl90dHlfY2hhcnNfaW5fYnVmZmVyKHR0eSkgPD0gVFRZX1RIUkVTSE9MRF9VTlRIUk9UVExFKSB7CisJCQluX3R0eV9zZXRfcm9vbSh0dHkpOwogCQkJY2hlY2tfdW50aHJvdHRsZSh0dHkpOworCQl9CiAKIAkJaWYgKGIgLSBidWYgPj0gbWluaW11bSkKIAkJCWJyZWFrOwpAQCAtMTg3OCw2ICsxOTEwLDcgQEAKIAl9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChUVFlfUFVTSCwgJnR0eS0+ZmxhZ3MpKQogCQkgZ290byBkb19pdF9hZ2FpbjsKIAorCW5fdHR5X3NldF9yb29tKHR0eSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYwppbmRleCBmMmNiNzUwLi40NjUyMTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYwpAQCAtMTM5Nyw2ICsxMzk3LDcgQEAKIAlpbnQgZmlmb3NpemUsIGJhc2VfYmF1ZDsKIAlpbnQgcG9ydF90eXBlOwogCXN0cnVjdCBwY2hfdWFydF9kcml2ZXJfZGF0YSAqYm9hcmQ7CisJY29uc3QgY2hhciAqYm9hcmRfbmFtZTsKIAogCWJvYXJkID0gJmRydl9kYXRbaWQtPmRyaXZlcl9kYXRhXTsKIAlwb3J0X3R5cGUgPSBib2FyZC0+cG9ydF90eXBlOwpAQCAtMTQxMiw3ICsxNDEzLDggQEAKIAliYXNlX2JhdWQgPSAxODQzMjAwOyAvKiAxLjg0MzJNSHogKi8KIAogCS8qIHF1aXJrIGZvciBDTS1pVEMgYm9hcmQgKi8KLQlpZiAoc3Ryc3RyKGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JPQVJEX05BTUUpLCAiQ00taVRDIikpCisJYm9hcmRfbmFtZSA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JPQVJEX05BTUUpOworCWlmIChib2FyZF9uYW1lICYmIHN0cnN0cihib2FyZF9uYW1lLCAiQ00taVRDIikpCiAJCWJhc2VfYmF1ZCA9IDE5MjAwMDAwMDsgLyogMTkyLjBNSHogKi8KIAogCXN3aXRjaCAocG9ydF90eXBlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS90dHlfYnVmZmVyLmMgYi9kcml2ZXJzL3R0eS90dHlfYnVmZmVyLmMKaW5kZXggNDZkZTJlMC4uNmM5YjdjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvdHR5L3R0eV9idWZmZXIuYwpAQCAtNDEzLDEwICs0MTMsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncykpIHsKLQkJc3RydWN0IHR0eV9idWZmZXIgKmhlYWQsICp0YWlsID0gdHR5LT5idWYudGFpbDsKLQkJaW50IHNlZW5fdGFpbCA9IDA7CisJCXN0cnVjdCB0dHlfYnVmZmVyICpoZWFkOwogCQl3aGlsZSAoKGhlYWQgPSB0dHktPmJ1Zi5oZWFkKSAhPSBOVUxMKSB7Ci0JCQlpbnQgY29waWVkOwogCQkJaW50IGNvdW50OwogCQkJY2hhciAqY2hhcl9idWY7CiAJCQl1bnNpZ25lZCBjaGFyICpmbGFnX2J1ZjsKQEAgLTQyNSwxNSArNDIzLDYgQEAKIAkJCWlmICghY291bnQpIHsKIAkJCQlpZiAoaGVhZC0+bmV4dCA9PSBOVUxMKQogCQkJCQlicmVhazsKLQkJCQkvKgotCQkJCSAgVGhlcmUncyBhIHBvc3NpYmlsaXR5IHR0eSBtaWdodCBnZXQgbmV3IGJ1ZmZlcgotCQkJCSAgYWRkZWQgZHVyaW5nIHRoZSB1bmxvY2sgd2luZG93IGJlbG93LiBXZSBjb3VsZAotCQkJCSAgZW5kIHVwIHNwaW5uaW5nIGluIGhlcmUgZm9yZXZlciBob2dnaW5nIHRoZSBDUFUKLQkJCQkgIGNvbXBsZXRlbHkuIFRvIGF2b2lkIHRoaXMgbGV0J3MgaGF2ZSBhIHJlc3QgZWFjaAotCQkJCSAgdGltZSB3ZSBwcm9jZXNzZWQgdGhlIHRhaWwgYnVmZmVyLgotCQkJCSovCi0JCQkJaWYgKHRhaWwgPT0gaGVhZCkKLQkJCQkJc2Vlbl90YWlsID0gMTsKIAkJCQl0dHktPmJ1Zi5oZWFkID0gaGVhZC0+bmV4dDsKIAkJCQl0dHlfYnVmZmVyX2ZyZWUodHR5LCBoZWFkKTsKIAkJCQljb250aW51ZTsKQEAgLTQ0MywxOSArNDMyLDE3IEBACiAJCQkgICBsaW5lIGRpc2NpcGxpbmUgYXMgd2Ugd2FudCB0byBlbXB0eSB0aGUgcXVldWUgKi8KIAkJCWlmICh0ZXN0X2JpdChUVFlfRkxVU0hQRU5ESU5HLCAmdHR5LT5mbGFncykpCiAJCQkJYnJlYWs7CisJCQlpZiAoIXR0eS0+cmVjZWl2ZV9yb29tKQorCQkJCWJyZWFrOworCQkJaWYgKGNvdW50ID4gdHR5LT5yZWNlaXZlX3Jvb20pCisJCQkJY291bnQgPSB0dHktPnJlY2VpdmVfcm9vbTsKIAkJCWNoYXJfYnVmID0gaGVhZC0+Y2hhcl9idWZfcHRyICsgaGVhZC0+cmVhZDsKIAkJCWZsYWdfYnVmID0gaGVhZC0+ZmxhZ19idWZfcHRyICsgaGVhZC0+cmVhZDsKKwkJCWhlYWQtPnJlYWQgKz0gY291bnQ7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7Ci0JCQljb3BpZWQgPSBkaXNjLT5vcHMtPnJlY2VpdmVfYnVmKHR0eSwgY2hhcl9idWYsCisJCQlkaXNjLT5vcHMtPnJlY2VpdmVfYnVmKHR0eSwgY2hhcl9idWYsCiAJCQkJCQkJZmxhZ19idWYsIGNvdW50KTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7Ci0KLQkJCWhlYWQtPnJlYWQgKz0gY29waWVkOwotCi0JCQlpZiAoY29waWVkID09IDAgfHwgc2Vlbl90YWlsKSB7Ci0JCQkJc2NoZWR1bGVfd29yaygmdHR5LT5idWYud29yayk7Ci0JCQkJYnJlYWs7Ci0JCQl9CiAJCX0KIAkJY2xlYXJfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jIGIvZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMKaW5kZXggNjdiMWQwZC4uZmI4NjRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMKKysrIGIvZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMKQEAgLTMzMiw3ICszMzIsOCBAQAogCQkJY29udGludWU7CiAJCX0KIAkJY291bnQgPSBzZWxfYnVmZmVyX2x0aCAtIHBhc3RlZDsKLQkJY291bnQgPSB0dHktPmxkaXNjLT5vcHMtPnJlY2VpdmVfYnVmKHR0eSwgc2VsX2J1ZmZlciArIHBhc3RlZCwKKwkJY291bnQgPSBtaW4oY291bnQsIHR0eS0+cmVjZWl2ZV9yb29tKTsKKwkJdHR5LT5sZGlzYy0+b3BzLT5yZWNlaXZlX2J1Zih0dHksIHNlbF9idWZmZXIgKyBwYXN0ZWQsCiAJCQkJCQkJCU5VTEwsIGNvdW50KTsKIAkJcGFzdGVkICs9IGNvdW50OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCAzOTVhMzQ3Li5kYWM3Njc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC0xNTMwLDYgKzE1MzAsOCBAQAogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDA0Y2UpLCB9LCAvKiBOb2tpYSBFOTAgKi8KIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMWQ0KSwgfSwgLyogTm9raWEgRTU1ICovCiAJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDMwMiksIH0sIC8qIE5va2lhIE44ICovCisJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDMzNSksIH0sIC8qIE5va2lhIEU3ICovCisJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDNjZCksIH0sIC8qIE5va2lhIEM3ICovCiAJeyBTQU1TVU5HX1BDU1VJVEVfQUNNX0lORk8oMHg2NjUxKSwgfSwgLyogU2Ftc3VuZyBHVGk4NTEwIChJTk5PVjgpICovCiAKIAkvKiBOT1RFOiBub24tTm9raWEgQ09NTS9BQ00vMHhmZiBpcyBsaWtlbHkgTVNGVCBSTkRJUy4uLiBOT1QgYSBtb2RlbSEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDc5YTU4YzMuLjkwYWUxNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMzM5LDcgKzMzOSw4IEBACiB7CiAJaW50IGksIHN0YXR1cyA9IC1FVElNRURPVVQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmIHN0YXR1cyA9PSAtRVRJTUVET1VUOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmCisJCQkoc3RhdHVzID09IC1FVElNRURPVVQgfHwgc3RhdHVzID09IC1FUElQRSk7IGkrKykgewogCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3JjdmN0cmxwaXBlKGhkZXYsIDApLAogCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCBVU0JfRElSX0lOIHwgVVNCX1JUX0hVQiwgMCwgMCwKIAkJCWRhdGEsIHNpemVvZigqZGF0YSksIFVTQl9TVFNfVElNRU9VVCk7CkBAIC0zNTUsNyArMzU2LDggQEAKIHsKIAlpbnQgaSwgc3RhdHVzID0gLUVUSU1FRE9VVDsKIAotCWZvciAoaSA9IDA7IGkgPCBVU0JfU1RTX1JFVFJJRVMgJiYgc3RhdHVzID09IC1FVElNRURPVVQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBVU0JfU1RTX1JFVFJJRVMgJiYKKwkJCShzdGF0dXMgPT0gLUVUSU1FRE9VVCB8fCBzdGF0dXMgPT0gLUVQSVBFKTsgaSsrKSB7CiAJCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhoZGV2LCB1c2JfcmN2Y3RybHBpcGUoaGRldiwgMCksCiAJCQlVU0JfUkVRX0dFVF9TVEFUVVMsIFVTQl9ESVJfSU4gfCBVU0JfUlRfUE9SVCwgMCwgcG9ydDEsCiAJCQlkYXRhLCBzaXplb2YoKmRhdGEpLCBVU0JfU1RTX1RJTUVPVVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCmluZGV4IDFiMTI1YzIuLjIyNzhkYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKQEAgLTM4OSw3ICszODksNiBAQAogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyb3IpCiAJCWRfZGVsZXRlKGRlbnRyeSk7Ci0JZHB1dChkZW50cnkpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCA1ODQ1NmQxLi4wMjllMjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtNjMyLDEzICs2MzIsMTAgQEAKIAogZW5kY2hvaWNlCiAKKyMgU2VsZWN0ZWQgYnkgVURDIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGhpZ2gtc3BlZWQgb3BlcmF0aW9uLgogY29uZmlnIFVTQl9HQURHRVRfRFVBTFNQRUVECiAJYm9vbAogCWRlcGVuZHMgb24gVVNCX0dBREdFVAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIE1lYW5zIHRoYXQgZ2FkZ2V0IGRyaXZlcnMgc2hvdWxkIGluY2x1ZGUgZXh0cmEgZGVzY3JpcHRvcnMKLQkgIGFuZCBjb2RlIHRvIGhhbmRsZSBkdWFsLXNwZWVkIGNvbnRyb2xsZXJzLgogCiAjCiAjIFVTQiBHYWRnZXQgRHJpdmVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKaW5kZXggNmU0MmFhYi4uOTVlODEzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKaW5kZXggNDFkYzA5My4uZjQ2OTBmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDYxZmY5MjcuLmQzZGNhYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTE5MDYsNiArMTkwNiw3IEBACiAJaWYgKCFoY2QpCiAJCXJldHVybiAtRU5PTUVNOwogCXRoZV9jb250cm9sbGVyID0gaGNkX3RvX2R1bW15IChoY2QpOworCWhjZC0+aGFzX3R0ID0gMTsKIAogCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgMCwgMCk7CiAJaWYgKHJldHZhbCAhPSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCmluZGV4IGEwMTM4M2YuLmE1Njg3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC00MzEsOCArNDMxLDEwIEBACiAKIAkvKiBoYWx0IGFueSBlbmRwb2ludCBieSBkb2luZyBhICJ3cm9uZyBkaXJlY3Rpb24iIGkvbyBjYWxsICovCiAJaWYgKCF1c2JfZW5kcG9pbnRfZGlyX2luKCZkYXRhLT5kZXNjKSkgewotCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYygmZGF0YS0+ZGVzYykpCisJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZkYXRhLT5kZXNjKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCURCRyAoZGF0YS0+ZGV2LCAiJXMgaGFsdFxuIiwgZGF0YS0+bmFtZSk7CiAJCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOwogCQlpZiAobGlrZWx5IChkYXRhLT5lcCAhPSBOVUxMKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKaW5kZXggYjYyYjI2NC4uYjFhODE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKQEAgLTIwODMsNyArMjA4Myw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgbXZfdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBtdl91ZGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewogCXN0cnVjdCBtdl91ZGMgKnVkYyA9IHRoZV9jb250cm9sbGVyOwogCkBAIC0yMDkyLDcgKzIwOTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG12X3VkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldikKK3N0YXRpYyBpbnQgbXZfdWRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewogCXN0cnVjdCBtdl91ZGMgKnVkYyA9IHRoZV9jb250cm9sbGVyOwogCWludCByZXR2YWw7CkBAIC0yMTAwLDcgKzIxMDAsNyBAQAogCXJldHZhbCA9IG12X3VkY19waHlfaW5pdCh1ZGMtPnBoeV9yZWdzKTsKIAlpZiAocmV0dmFsKSB7CiAJCWRldl9lcnIoX2RldiwgInBoeSBpbml0aWFsaXphdGlvbiBlcnJvciAlZFxuIiwgcmV0dmFsKTsKLQkJZ290byBlcnJvcjsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiAJdWRjX3Jlc2V0KHVkYyk7CiAJZXAwX3Jlc2V0KHVkYyk7CkBAIC0yMTIyLDcgKzIxMjIsNyBAQAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAicHhhLXUybyIsCiAjaWZkZWYgQ09ORklHX1BNCi0JCS5wbQk9IG12X3VkY19wbV9vcHMsCisJCS5wbQk9ICZtdl91ZGNfcG1fb3BzLAogI2VuZGlmCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCAyNDY5NmY3Li40NzZkODhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYwppbmRleCAzNjVjMDJmLi43NzQ1NDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKQEAgLTIyMTYsNyArMjIxNiw2IEBACiAJCWlmIChyZXR2YWwgIT0gMCkgewogCQkJcHJfZXJyKCIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLAogCQkJCWRyaXZlcl9uYW1lLCBMVUJCT0NLX1VTQl9ESVNDX0lSUSwgcmV0dmFsKTsKLWx1YmJvY2tfZmFpbDA6CiAJCQlnb3RvIGVycl9pcnFfbHViOwogCQl9CiAJCXJldHZhbCA9IHJlcXVlc3RfaXJxKExVQkJPQ0tfVVNCX0lSUSwKQEAgLTIyMjYsNyArMjIyNSw2IEBACiAJCWlmIChyZXR2YWwgIT0gMCkgewogCQkJcHJfZXJyKCIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLAogCQkJCWRyaXZlcl9uYW1lLCBMVUJCT0NLX1VTQl9JUlEsIHJldHZhbCk7Ci0JCQlmcmVlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSwgZGV2KTsKIAkJCWdvdG8gbHViYm9ja19mYWlsMDsKIAkJfQogCX0gZWxzZQpAQCAtMjIzNiwxMCArMjIzNCwxMSBAQAogCXJldHVybiAwOwogCiAjaWZkZWYJQ09ORklHX0FSQ0hfTFVCQk9DSworbHViYm9ja19mYWlsMDoKIAlmcmVlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSwgZGV2KTsKICBlcnJfaXJxX2x1YjoKLSNlbmRpZgogCWZyZWVfaXJxKGlycSwgZGV2KTsKKyNlbmRpZgogIGVycl9pcnExOgogCWlmIChncGlvX2lzX3ZhbGlkKGRldi0+bWFjaC0+Z3Bpb19wdWxsdXApKQogCQlncGlvX2ZyZWUoZGV2LT5tYWNoLT5ncGlvX3B1bGx1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKaW5kZXggYWNiOWNjNC4uMGRmZWUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYwpAQCAtMjY4MCw5ICsyNjgwLDkgQEAKIAogCXdyaXRlbCgwLCBoc290Zy0+cmVncyArIFMzQ19EQUlOVE1TSyk7CiAKLQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiRVAwOiBESUVQQ1RMMD0weCUwOHgsIERPRVBDVEwwPTB4JTA4eFxuIiwKLQkJIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RJRVBDVEwwKSwKLQkJIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RPRVBDVEwwKSk7CisJZGV2X2RiZyhoc290Zy0+ZGV2LCAiRVAwOiBESUVQQ1RMMD0weCUwOHgsIERPRVBDVEwwPTB4JTA4eFxuIiwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRElFUENUTDApLAorCQlyZWFkbChoc290Zy0+cmVncyArIFMzQ19ET0VQQ1RMMCkpOwogCiAJLyogZW5hYmxlIGluIGFuZCBvdXQgZW5kcG9pbnQgaW50ZXJydXB0cyAqLwogCXMzY19oc290Z19lbl9nc2ludChoc290ZywgUzNDX0dJTlRTVFNfT0VQSW50IHwgUzNDX0dJTlRTVFNfSUVQSW50KTsKQEAgLTI3MDEsNyArMjcwMSw3IEBACiAJdWRlbGF5KDEwKTsgIC8qIHNlZSBvcGVuaWJvb3QgKi8KIAlfX2JpYzMyKGhzb3RnLT5yZWdzICsgUzNDX0RDVEwsIFMzQ19EQ1RMX1BXUk9uUHJnRG9uZSk7CiAKLQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiRENUTD0weCUwOHhcbiIsIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RDVEwpKTsKKwlkZXZfZGJnKGhzb3RnLT5kZXYsICJEQ1RMPTB4JTA4eFxuIiwgcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRENUTCkpOwogCiAJLyogUzNDX0R4RVBDVExfVVNCQWN0RXAgc2F5cyBSTyBpbiBtYW51YWwsIGJ1dCBzZWVtcyB0byBiZSBzZXQgYnkKIAkgICB3cml0aW5nIHRvIHRoZSBFUENUTCByZWdpc3Rlci4uICovCkBAIC0yNzIxLDkgKzI3MjEsOSBAQAogCiAJczNjX2hzb3RnX2VucXVldWVfc2V0dXAoaHNvdGcpOwogCi0JZGV2X2luZm8oaHNvdGctPmRldiwgIkVQMDogRElFUENUTDA9MHglMDh4LCBET0VQQ1RMMD0weCUwOHhcbiIsCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ESUVQQ1RMMCksCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ET0VQQ1RMMCkpOworCWRldl9kYmcoaHNvdGctPmRldiwgIkVQMDogRElFUENUTDA9MHglMDh4LCBET0VQQ1RMMD0weCUwOHhcbiIsCisJCXJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RJRVBDVEwwKSwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRE9FUENUTDApKTsKIAogCS8qIGNsZWFyIGdsb2JhbCBOQUtzICovCiAJd3JpdGVsKFMzQ19EQ1RMX0NHT1VUTmFrIHwgUzNDX0RDVExfQ0dOUEluTkFLLApAQCAtMjkyMSw5ICsyOTIxLDkgQEAKIAogCS8qIHNldHVwIGZpZm9zICovCiAKLQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiR1JYRlNJWj0weCUwOHgsIEdOUFRYRlNJWj0weCUwOHhcbiIsCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19HUlhGU0laKSwKLQkJIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0dOUFRYRlNJWikpOworCWRldl9kYmcoaHNvdGctPmRldiwgIkdSWEZTSVo9MHglMDh4LCBHTlBUWEZTSVo9MHglMDh4XG4iLAorCQlyZWFkbChoc290Zy0+cmVncyArIFMzQ19HUlhGU0laKSwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfR05QVFhGU0laKSk7CiAKIAlzM2NfaHNvdGdfaW5pdF9maWZvKGhzb3RnKTsKIApAQCAtMjk0NSw2ICsyOTQ1LDcgQEAKIAogc3RhdGljIHZvaWQgczNjX2hzb3RnX2R1bXAoc3RydWN0IHMzY19oc290ZyAqaHNvdGcpCiB7CisjaWZkZWYgREVCVUcKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoc290Zy0+ZGV2OwogCXZvaWQgX19pb21lbSAqcmVncyA9IGhzb3RnLT5yZWdzOwogCXUzMiB2YWw7CkBAIC0yOTg3LDYgKzI5ODgsNyBAQAogCiAJZGV2X2luZm8oZGV2LCAiRFZCVVNESVM9MHglMDh4LCBEVkJVU1BVTFNFPSUwOHhcbiIsCiAJCSByZWFkbChyZWdzICsgUzNDX0RWQlVTRElTKSwgcmVhZGwocmVncyArIFMzQ19EVkJVU1BVTFNFKSk7CisjZW5kaWYKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzdWRjLmMKaW5kZXggY2ZlM2NmNS4uZDVlM2UxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHN1ZGMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDQzLWNsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC91ZGMuaD4KQEAgLTEzMDEsNyArMTMwMiw4IEBACiAJaHN1ZGMtPnVjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2ItZGV2aWNlIik7CiAJaWYgKElTX0VSUihoc3VkYy0+dWNsaykpIHsKIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCB1c2ItZGV2aWNlIGNsb2NrIHNvdXJjZVxuIik7Ci0JCXJldHVybiBQVFJfRVJSKGhzdWRjLT51Y2xrKTsKKwkJcmV0ID0gUFRSX0VSUihoc3VkYy0+dWNsayk7CisJCWdvdG8gZXJyX2NsazsKIAl9CiAJY2xrX2VuYWJsZShoc3VkYy0+dWNsayk7CiAKQEAgLTEzMTAsNyArMTMxMiw4IEBACiAJZGlzYWJsZV9pcnEoaHN1ZGMtPmlycSk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXJldHVybiAwOwotCitlcnJfY2xrOgorCWZyZWVfaXJxKGhzdWRjLT5pcnEsIGhzdWRjKTsKIGVycl9pcnE6CiAJaW91bm1hcChoc3VkYy0+cmVncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKaW5kZXggNmQ4YjA0MC4uMTAwZjI2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCmluZGV4IGFmZWY3YjBhLi44MGJlNTQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtMzEyLDggKzMxMiwxMCBAQAogCQlyZXR1cm4gUFRSX0VSUih1c2JfY2xrKTsKIAogCWhjZCA9IHVzYl9jcmVhdGVfaGNkIChkcml2ZXIsICZwZGV2LT5kZXYsICJweGEyN3giKTsKLQlpZiAoIWhjZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFoY2QpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnIwOworCX0KIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcikgewpAQCAtMzY4LDYgKzM3MCw3IEBACiAJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAgZXJyMToKIAl1c2JfcHV0X2hjZChoY2QpOworIGVycjA6CiAJY2xrX3B1dCh1c2JfY2xrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCmluZGV4IDJlMDQ4NjEuLjFmNTBiNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKQEAgLTQzOCwxMyArNDM4LDEzIEBACiAJc3RydWN0IHhoY2lfc2xvdF9jdHggKnNsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgY3R4KTsKIAogCXN3aXRjaCAoR0VUX1NMT1RfU1RBVEUobGUzMl90b19jcHUoc2xvdF9jdHgtPmRldl9zdGF0ZSkpKSB7Ci0JY2FzZSAwOgorCWNhc2UgU0xPVF9TVEFURV9FTkFCTEVEOgogCQlyZXR1cm4gImVuYWJsZWQvZGlzYWJsZWQiOwotCWNhc2UgMToKKwljYXNlIFNMT1RfU1RBVEVfREVGQVVMVDoKIAkJcmV0dXJuICJkZWZhdWx0IjsKLQljYXNlIDI6CisJY2FzZSBTTE9UX1NUQVRFX0FERFJFU1NFRDoKIAkJcmV0dXJuICJhZGRyZXNzZWQiOwotCWNhc2UgMzoKKwljYXNlIFNMT1RfU1RBVEVfQ09ORklHVVJFRDoKIAkJcmV0dXJuICJjb25maWd1cmVkIjsKIAlkZWZhdWx0OgogCQlyZXR1cm4gInJlc2VydmVkIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwppbmRleCAyNmNhYmE0Li4wZjhlMWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCkBAIC05ODUsOSArOTg1LDE5IEBACiAJaW50ZXJ2YWwgPSBjbGFtcF92YWwoZXAtPmRlc2MuYkludGVydmFsLCAxLCAxNikgLSAxOwogCWlmIChpbnRlcnZhbCAhPSBlcC0+ZGVzYy5iSW50ZXJ2YWwgLSAxKQogCQlkZXZfd2FybigmdWRldi0+ZGV2LAotCQkJICJlcCAlI3ggLSByb3VuZGluZyBpbnRlcnZhbCB0byAlZCBtaWNyb2ZyYW1lc1xuIiwKKwkJCSAiZXAgJSN4IC0gcm91bmRpbmcgaW50ZXJ2YWwgdG8gJWQgJXNmcmFtZXNcbiIsCiAJCQkgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKLQkJCSAxIDw8IGludGVydmFsKTsKKwkJCSAxIDw8IGludGVydmFsLAorCQkJIHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMID8gIiIgOiAibWljcm8iKTsKKworCWlmICh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkgeworCQkvKgorCQkgKiBGdWxsIHNwZWVkIGlzb2MgZW5kcG9pbnRzIHNwZWNpZnkgaW50ZXJ2YWwgaW4gZnJhbWVzLAorCQkgKiBub3QgbWljcm9mcmFtZXMuIFdlIGFyZSB1c2luZyBtaWNyb2ZyYW1lcyBldmVyeXdoZXJlLAorCQkgKiBzbyBhZGp1c3QgYWNjb3JkaW5nbHkuCisJCSAqLworCQlpbnRlcnZhbCArPSAzOwkvKiAxIGZyYW1lID0gMl4zIHVmcmFtZXMgKi8KKwl9CiAKIAlyZXR1cm4gaW50ZXJ2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKaW5kZXggYzQwOGU5Zi4uMTc1NDFkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwpAQCAtMTA2LDEyICsxMDYsMjIgQEAKIAogCS8qIExvb2sgZm9yIHZlbmRvci1zcGVjaWZpYyBxdWlya3MgKi8KIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfRlJFU0NPX0xPR0lDICYmCi0JCQlwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9GUkVTQ09fTE9HSUNfUERLICYmCi0JCQlwZGV2LT5yZXZpc2lvbiA9PSAweDApIHsKKwkJCXBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0ZSRVNDT19MT0dJQ19QREspIHsKKwkJaWYgKHBkZXYtPnJldmlzaW9uID09IDB4MCkgewogCQkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfUkVTRVRfRVBfUVVJUks7CiAJCQl4aGNpX2RiZyh4aGNpLCAiUVVJUks6IEZyZXNjbyBMb2dpYyB4SEMgbmVlZHMgY29uZmlndXJlIgogCQkJCQkiIGVuZHBvaW50IGNtZCBhZnRlciByZXNldCBlbmRwb2ludFxuIik7CisJCX0KKwkJLyogRnJlc2NvIExvZ2ljIGNvbmZpcm1zOiBhbGwgcmV2aXNpb25zIG9mIHRoaXMgY2hpcCBkbyBub3QKKwkJICogc3VwcG9ydCBNU0ksIGV2ZW4gdGhvdWdoIHNvbWUgb2YgdGhlbSBjbGFpbSB0byBpbiB0aGVpciBQQ0kKKwkJICogY2FwYWJpbGl0aWVzLgorCQkgKi8KKwkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfQlJPS0VOX01TSTsKKwkJeGhjaV9kYmcoeGhjaSwgIlFVSVJLOiBGcmVzY28gTG9naWMgcmV2aXNpb24gJXUgIgorCQkJCSJoYXMgYnJva2VuIE1TSSBpbXBsZW1lbnRhdGlvblxuIiwKKwkJCQlwZGV2LT5yZXZpc2lvbik7CiAJfQorCiAJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX05FQykKIAkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfTkVDX0hPU1Q7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCmluZGV4IGNjMTQ4NWIuLjgwMGY0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwpAQCAtMTc4Miw3ICsxNzgyLDcgQEAKIAlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZnJhbWU7CiAJaW50IGlkeDsKIAotCWVwX3JpbmcgPSB4aGNpX2RtYV90b190cmFuc2Zlcl9yaW5nKGVwLCBldmVudC0+YnVmZmVyKTsKKwllcF9yaW5nID0geGhjaV9kbWFfdG9fdHJhbnNmZXJfcmluZyhlcCwgbGU2NF90b19jcHUoZXZlbnQtPmJ1ZmZlcikpOwogCXVyYl9wcml2ID0gdGQtPnVyYi0+aGNwcml2OwogCWlkeCA9IHVyYl9wcml2LT50ZF9jbnQ7CiAJZnJhbWUgPSAmdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKaW5kZXggZDk2NjBlYi4uMDZlNzAyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKQEAgLTQzMCwxMiArNDMwLDE5IEBACiAJCWZyZWVfaXJxKGhjZC0+aXJxLCBoY2QpOwogCWhjZC0+aXJxID0gLTE7CiAKKwkvKiBTb21lIEZyZXNjbyBMb2dpYyBob3N0IGNvbnRyb2xsZXJzIGFkdmVydGlzZSBNU0ksIGJ1dCBmYWlsIHRvCisJICogZ2VuZXJhdGUgaW50ZXJydXB0cy4gIERvbid0IGV2ZW4gdHJ5IHRvIGVuYWJsZSBNU0kuCisJICovCisJaWYgKHhoY2ktPnF1aXJrcyAmIFhIQ0lfQlJPS0VOX01TSSkKKwkJZ290byBsZWdhY3lfaXJxOworCiAJcmV0ID0geGhjaV9zZXR1cF9tc2l4KHhoY2kpOwogCWlmIChyZXQpCiAJCS8qIGZhbGwgYmFjayB0byBtc2kqLwogCQlyZXQgPSB4aGNpX3NldHVwX21zaSh4aGNpKTsKIAogCWlmIChyZXQpIHsKK2xlZ2FjeV9pcnE6CiAJCS8qIGZhbGwgYmFjayB0byBsZWdhY3kgaW50ZXJydXB0Ki8KIAkJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCAmdXNiX2hjZF9pcnEsIElSUUZfU0hBUkVELAogCQkJCQloY2QtPmlycV9kZXNjciwgaGNkKTsKQEAgLTE4NDksOCArMTg1Niw4IEBACiAKIAkvKiBGcmVlIGFueSByaW5ncyB0aGF0IHdlcmUgZHJvcHBlZCwgYnV0IG5vdCBjaGFuZ2VkLiAqLwogCWZvciAoaSA9IDE7IGkgPCAzMTsgKytpKSB7Ci0JCWlmICgoY3RybF9jdHgtPmRyb3BfZmxhZ3MgJiAoMSA8PCAoaSArIDEpKSkgJiYKLQkJCQkhKGN0cmxfY3R4LT5hZGRfZmxhZ3MgJiAoMSA8PCAoaSArIDEpKSkpCisJCWlmICgobGUzMl90b19jcHUoY3RybF9jdHgtPmRyb3BfZmxhZ3MpICYgKDEgPDwgKGkgKyAxKSkpICYmCisJCSAgICAhKGxlMzJfdG9fY3B1KGN0cmxfY3R4LT5hZGRfZmxhZ3MpICYgKDEgPDwgKGkgKyAxKSkpKQogCQkJeGhjaV9mcmVlX29yX2NhY2hlX2VuZHBvaW50X3JpbmcoeGhjaSwgdmlydF9kZXYsIGkpOwogCX0KIAl4aGNpX3plcm9faW5fY3R4KHhoY2ksIHZpcnRfZGV2KTsKQEAgLTI0NjcsNiArMjQ3NCw3IEBACiAJc3RydWN0IHhoY2lfY29tbWFuZCAqcmVzZXRfZGV2aWNlX2NtZDsKIAlpbnQgdGltZWxlZnQ7CiAJaW50IGxhc3RfZnJlZWRfZW5kcG9pbnQ7CisJc3RydWN0IHhoY2lfc2xvdF9jdHggKnNsb3RfY3R4OwogCiAJcmV0ID0geGhjaV9jaGVja19hcmdzKGhjZCwgdWRldiwgTlVMTCwgMCwgZmFsc2UsIF9fZnVuY19fKTsKIAlpZiAocmV0IDw9IDApCkBAIC0yNDk5LDYgKzI1MDcsMTIgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qIElmIGRldmljZSBpcyBub3Qgc2V0dXAsIHRoZXJlIGlzIG5vIHBvaW50IGluIHJlc2V0dGluZyBpdCAqLworCXNsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgdmlydF9kZXYtPm91dF9jdHgpOworCWlmIChHRVRfU0xPVF9TVEFURShsZTMyX3RvX2NwdShzbG90X2N0eC0+ZGV2X3N0YXRlKSkgPT0KKwkJCQkJCVNMT1RfU1RBVEVfRElTQUJMRUQpCisJCXJldHVybiAwOworCiAJeGhjaV9kYmcoeGhjaSwgIlJlc2V0dGluZyBkZXZpY2Ugd2l0aCBzbG90IElEICV1XG4iLCBzbG90X2lkKTsKIAkvKiBBbGxvY2F0ZSB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0aGUgc3RydWN0IGNvbXBsZXRpb24uCiAJICogQXNzdW1lIHdlJ3JlIGluIHByb2Nlc3MgY29udGV4dCwgc2luY2UgdGhlIG5vcm1hbCBkZXZpY2UgcmVzZXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKaW5kZXggYWMwMTk2ZS4uN2QxZWEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKQEAgLTU2MCw2ICs1NjAsMTEgQEAKICNkZWZpbmUgU0xPVF9TVEFURQkoMHgxZiA8PCAyNykKICNkZWZpbmUgR0VUX1NMT1RfU1RBVEUocCkJKCgocCkgJiAoMHgxZiA8PCAyNykpID4+IDI3KQogCisjZGVmaW5lIFNMT1RfU1RBVEVfRElTQUJMRUQJMAorI2RlZmluZSBTTE9UX1NUQVRFX0VOQUJMRUQJU0xPVF9TVEFURV9ESVNBQkxFRAorI2RlZmluZSBTTE9UX1NUQVRFX0RFRkFVTFQJMQorI2RlZmluZSBTTE9UX1NUQVRFX0FERFJFU1NFRAkyCisjZGVmaW5lIFNMT1RfU1RBVEVfQ09ORklHVVJFRAkzCiAKIC8qKgogICogc3RydWN0IHhoY2lfZXBfY3R4CkBAIC0xMzAyLDYgKzEzMDcsNyBAQAogICogY29tbWFuZHMuCiAgKi8KICNkZWZpbmUgWEhDSV9FUF9MSU1JVF9RVUlSSwkoMSA8PCA1KQorI2RlZmluZSBYSENJX0JST0tFTl9NU0kJCSgxIDw8IDYpCiAJdW5zaWduZWQgaW50CQludW1fYWN0aXZlX2VwczsKIAl1bnNpZ25lZCBpbnQJCWxpbWl0X2FjdGl2ZV9lcHM7CiAJLyogVGhlcmUgYXJlIHR3byByb290aHVicyB0byBrZWVwIHRyYWNrIG9mIGJ1cyBzdXNwZW5kIGluZm8gZm9yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCBhYjhlMTAwLi5jNzFiMDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTk2LDYgKzk2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvbW9kX2dhZGdldC5jIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2RfZ2FkZ2V0LmMKaW5kZXggMjA2Y2ZhYi4uNTQ3NDg2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2RfZ2FkZ2V0LmMKKysrIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2RfZ2FkZ2V0LmMKQEAgLTEzODAsNSArMTM4MCw2IEBACiB7CiAJc3RydWN0IHVzYmhzZ19ncHJpdiAqZ3ByaXYgPSB1c2Joc2dfcHJpdl90b19ncHJpdihwcml2KTsKIAorCWtmcmVlKGdwcml2LT51ZXApOwogCWtmcmVlKGdwcml2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggZThkYmRlNTUuLjE2MjcyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC02NDcsNiArNjQ3LDcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEVWRVJfRUNPX1BST19DRFMpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzROX0dBTEFYWV9ERV8xX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfNE5fR0FMQVhZX0RFXzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV80Tl9HQUxBWFlfREVfM19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBYU0VOU19DT05WRVJURVJfMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBYU0VOU19DT05WRVJURVJfMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBYU0VOU19DT05WRVJURVJfMl9QSUQpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKaW5kZXggMWQ5NDZjZC4uYWIxZmNkZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTM1MSw2ICszNTEsNyBAQAogICovCiAjZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzFfUElECTB4RjNDMAogI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8yX1BJRAkweEYzQzEKKyNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfM19QSUQJMHhGM0MyCiAKIC8qCiAgKiBMaW54IFRlY2hub2xvZ2llcyBwcm9kdWN0IGlkcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDMxOGRkMDAuLjYwYjI1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTMxMSwxMCArMzExLDYgQEAKICNkZWZpbmUgWlRFX1BST0RVQ1RfQUMyNzI2CQkJMHhmZmY1CiAjZGVmaW5lIFpURV9QUk9EVUNUX0FDODcxMFQJCQkweGZmZmYKIAotLyogWlRFIFBST0RVQ1RTIC0tIGFsdGVybmF0ZSB2ZW5kb3IgSUQgKi8KLSNkZWZpbmUgWlRFX1ZFTkRPUl9JRDIJCQkJMHgxZDZiCi0jZGVmaW5lIFpURV9QUk9EVUNUX01GXzMzMAkJCTB4MDAwMgotCiAjZGVmaW5lIEJFTlFfVkVORE9SX0lECQkJCTB4MDRhNQogI2RlZmluZSBCRU5RX1BST0RVQ1RfSDEwCQkJMHg0MDY4CiAKQEAgLTM0MCwxMSArMzM2LDEyIEBACiAjZGVmaW5lIFRPU0hJQkFfUFJPRFVDVF9HNDUwCQkJMHgwZDQ1CiAKICNkZWZpbmUgQUxJTktfVkVORE9SX0lECQkJCTB4MWUwZQorI2RlZmluZSBBTElOS19QUk9EVUNUX1BIMzAwCQkJMHg5MTAwCiAjZGVmaW5lIEFMSU5LX1BST0RVQ1RfM0dVCQkJMHg5MjAwCiAKIC8qIEFMQ0FURUwgUFJPRFVDVFMgKi8KICNkZWZpbmUgQUxDQVRFTF9WRU5ET1JfSUQJCQkweDFiYmIKLSNkZWZpbmUgQUxDQVRFTF9QUk9EVUNUX1gwNjBTCQkJMHgwMDAwCisjZGVmaW5lIEFMQ0FURUxfUFJPRFVDVF9YMDYwU19YMjAwCQkweDAwMDAKIAogI2RlZmluZSBQSVJFTExJX1ZFTkRPUl9JRAkJCTB4MTI2NgogI2RlZmluZSBQSVJFTExJX1BST0RVQ1RfQzEwMF8xCQkJMHgxMDAyCkBAIC0zNzksNiArMzc2LDkgQEAKICAqIEl0IHNlZW1zIHRvIGNvbnRhaW4gYSBRdWFsY29tbSBRU0M2MjQwLzYyOTAgY2hpcHNldCAgICAgICAgICAgICovCiAjZGVmaW5lIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0CQkweDk2MDMKIAorLyogWm9vbSAqLworI2RlZmluZSBaT09NX1BST0RVQ1RfNDU5NwkJCTB4OTYwNworCiAvKiBIYWllciBwcm9kdWN0cyAqLwogI2RlZmluZSBIQUlFUl9WRU5ET1JfSUQJCQkJMHgyMDFlCiAjZGVmaW5lIEhBSUVSX1BST0RVQ1RfQ0UxMDAJCQkweDIwMDkKQEAgLTQzMiw2ICs0MzIsMjAgQEAKIAkucmVhc29uID0gT1BUSU9OX0JMQUNLTElTVF9TRU5EU0VUVVAKIH07CiAKK3N0YXRpYyBjb25zdCB1OCBhbGNhdGVsX3gyMDBfbm9fc2VuZHNldHVwW10gPSB7IDAsIDEgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uX2JsYWNrbGlzdF9pbmZvIGFsY2F0ZWxfeDIwMF9ibGFja2xpc3QgPSB7CisJLmluZm9sZW4gPSBBUlJBWV9TSVpFKGFsY2F0ZWxfeDIwMF9ub19zZW5kc2V0dXApLAorCS5pZmFjZWluZm8gPSBhbGNhdGVsX3gyMDBfbm9fc2VuZHNldHVwLAorCS5yZWFzb24gPSBPUFRJT05fQkxBQ0tMSVNUX1NFTkRTRVRVUAorfTsKKworc3RhdGljIGNvbnN0IHU4IHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cFtdID0geyAwLCAxLCAyIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbl9ibGFja2xpc3RfaW5mbyB6dGVfazM3NjVfel9ibGFja2xpc3QgPSB7CisJLmluZm9sZW4gPSBBUlJBWV9TSVpFKHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cCksCisJLmlmYWNlaW5mbyA9IHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cCwKKwkucmVhc29uID0gT1BUSU9OX0JMQUNLTElTVF9TRU5EU0VUVVAKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPTFQpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1JJQ09MQSkgfSwKQEAgLTkxNiwxMyArOTMwLDEzIEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAwNzMsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAxMzAsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAxNDEsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCi0JeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDIwMDIsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDIwMDIsIDB4ZmYsCisJICAweGZmLCAweGZmKSwgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZ6dGVfazM3NjVfel9ibGFja2xpc3QgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIDB4MjAwMywgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0NETUFfVEVDSCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDODcxMCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDMjcyNiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDODcxMFQsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCi0JeyBVU0JfREVWSUNFKFpURV9WRU5ET1JfSUQyLCBaVEVfUFJPRFVDVF9NRl8zMzApIH0sCiAJeyBVU0JfREVWSUNFKEJFTlFfVkVORE9SX0lELCBCRU5RX1BST0RVQ1RfSDEwKSB9LAogCXsgVVNCX0RFVklDRShETElOS19WRU5ET1JfSUQsIERMSU5LX1BST0RVQ1RfRFdNXzY1MikgfSwKIAl7IFVTQl9ERVZJQ0UoQUxJTktfVkVORE9SX0lELCBETElOS19QUk9EVUNUX0RXTV82NTJfVTUpIH0sIC8qIFllcywgQUxJTktfVkVORE9SX0lEICovCkBAIC05MzUsMTMgKzk0OSwxNyBAQAogCXsgVVNCX0RFVklDRShUT1NISUJBX1ZFTkRPUl9JRCwgVE9TSElCQV9QUk9EVUNUX0c0NTApIH0sCiAJeyBVU0JfREVWSUNFKFRPU0hJQkFfVkVORE9SX0lELCBUT1NISUJBX1BST0RVQ1RfSFNEUEFfTUlOSUNBUkQgKSB9LCAvKiBUb3NoaWJhIDNHIEhTRFBBID09IE5vdmF0ZWwgRXhwZWRpdGUgRVU4NzBEIE1pbmlDYXJkICovCiAJeyBVU0JfREVWSUNFKEFMSU5LX1ZFTkRPUl9JRCwgMHg5MDAwKSB9LAorCXsgVVNCX0RFVklDRShBTElOS19WRU5ET1JfSUQsIEFMSU5LX1BST0RVQ1RfUEgzMDApIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhBTElOS19WRU5ET1JfSUQsIEFMSU5LX1BST0RVQ1RfM0dVLCAweGZmLCAweGZmLCAweGZmKSB9LAotCXsgVVNCX0RFVklDRShBTENBVEVMX1ZFTkRPUl9JRCwgQUxDQVRFTF9QUk9EVUNUX1gwNjBTKSB9LAorCXsgVVNCX0RFVklDRShBTENBVEVMX1ZFTkRPUl9JRCwgQUxDQVRFTF9QUk9EVUNUX1gwNjBTX1gyMDApLAorCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZhbGNhdGVsX3gyMDBfYmxhY2tsaXN0CisJfSwKIAl7IFVTQl9ERVZJQ0UoQUlSUExVU19WRU5ET1JfSUQsIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTApIH0sCiAJeyBVU0JfREVWSUNFKFRMQVlURUNIX1ZFTkRPUl9JRCwgVExBWVRFQ0hfUFJPRFVDVF9URVU4MDApIH0sCiAJeyBVU0JfREVWSUNFKExPTkdDSEVFUl9WRU5ET1JfSUQsIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0KSwKICAgCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmb3VyX2dfdzE0X2JsYWNrbGlzdAogICAJfSwKKwl7IFVTQl9ERVZJQ0UoTE9OR0NIRUVSX1ZFTkRPUl9JRCwgWk9PTV9QUk9EVUNUXzQ1OTcpIH0sCiAJeyBVU0JfREVWSUNFKEhBSUVSX1ZFTkRPUl9JRCwgSEFJRVJfUFJPRFVDVF9DRTEwMCkgfSwKIAkvKiBQaXJlbGxpICAqLwogCXsgVVNCX0RFVklDRShQSVJFTExJX1ZFTkRPUl9JRCwgUElSRUxMSV9QUk9EVUNUX0MxMDBfMSl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggMDA0MTg5OS4uZThhZTIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC04MTksNiArODE5LDM1IEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIFNvbWUgZGV2aWNlcyBkb24ndCB3b3JrIG9yIHJldHVybiBpbmNvcnJlY3QgZGF0YSB0aGUgZmlyc3QKKwkgKiB0aW1lIHRoZXkgZ2V0IGEgUkVBRCgxMCkgY29tbWFuZCwgb3IgZm9yIHRoZSBmaXJzdCBSRUFEKDEwKQorCSAqIGFmdGVyIGEgbWVkaWEgY2hhbmdlLiAgSWYgdGhlIElOSVRJQUxfUkVBRDEwIGZsYWcgaXMgc2V0LAorCSAqIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBSRUFEKDEwKSBjb21tYW5kcyBzdWNjZWVkLiAgSWYgdGhlCisJICogcHJldmlvdXMgb25lIHN1Y2NlZWRlZCBhbmQgdGhpcyBvbmUgZmFpbGVkLCBzZXQgdGhlIFJFRE9fUkVBRDEwCisJICogZmxhZyB0byBmb3JjZSBhIHJldHJ5LgorCSAqLworCWlmICh1bmxpa2VseSgodXMtPmZmbGFncyAmIFVTX0ZMX0lOSVRJQUxfUkVBRDEwKSAmJgorCQkJc3JiLT5jbW5kWzBdID09IFJFQURfMTApKSB7CisJCWlmIChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EKSB7CisJCQlzZXRfYml0KFVTX0ZMSURYX1JFQUQxMF9XT1JLRUQsICZ1cy0+ZGZsYWdzKTsKKwkJfSBlbHNlIGlmICh0ZXN0X2JpdChVU19GTElEWF9SRUFEMTBfV09SS0VELCAmdXMtPmRmbGFncykpIHsKKwkJCWNsZWFyX2JpdChVU19GTElEWF9SRUFEMTBfV09SS0VELCAmdXMtPmRmbGFncyk7CisJCQlzZXRfYml0KFVTX0ZMSURYX1JFRE9fUkVBRDEwLCAmdXMtPmRmbGFncyk7CisJCX0KKworCQkvKgorCQkgKiBOZXh0LCBpZiB0aGUgUkVET19SRUFEMTAgZmxhZyBpcyBzZXQsIHJldHVybiBhIHJlc3VsdAorCQkgKiBjb2RlIHRoYXQgd2lsbCBjYXVzZSB0aGUgU0NTSSBjb3JlIHRvIHJldHJ5IHRoZSBSRUFEKDEwKQorCQkgKiBjb21tYW5kIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1JFRE9fUkVBRDEwLCAmdXMtPmRmbGFncykpIHsKKwkJCWNsZWFyX2JpdChVU19GTElEWF9SRURPX1JFQUQxMCwgJnVzLT5kZmxhZ3MpOworCQkJc3JiLT5yZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OworCQkJc3JiLT5zZW5zZV9idWZmZXJbMF0gPSAwOworCQl9CisJfQorCiAJLyogRGlkIHdlIHRyYW5zZmVyIGxlc3MgdGhhbiB0aGUgbWluaW11bSBhbW91bnQgcmVxdWlyZWQ/ICovCiAJaWYgKChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EIHx8IHNyYi0+c2Vuc2VfYnVmZmVyWzJdID09IDApICYmCiAJCQlzY3NpX2J1ZmZsZW4oc3JiKSAtIHNjc2lfZ2V0X3Jlc2lkKHNyYikgPCBzcmItPnVuZGVyZmxvdykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGMxNjAyYjguLmNjZmYzNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtMTExNCw2ICsxMTE0LDE2IEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAogCisvKiBSZXBvcnRlZCBieSBQYXVsIEhhcnRtYW4gPHBhdWwuaGFydG1hbitsaW51eEBnbWFpbC5jb20+CisgKiBUaGlzIGNhcmQgcmVhZGVyIHJldHVybnMgIklsbGVnYWwgUmVxdWVzdCwgTG9naWNhbCBCbG9jayBBZGRyZXNzCisgKiBPdXQgb2YgUmFuZ2UiIGZvciB0aGUgZmlyc3QgUkVBRCgxMCkgYWZ0ZXIgYSBuZXcgY2FyZCBpcyBpbnNlcnRlZC4KKyAqLworVU5VU1VBTF9ERVYoICAweDA5MGMsIDB4NjAwMCwgMHgwMTAwLCAweDAxMDAsCisJCSJGZWl5YSIsCisJCSJTRC9TREhDIENhcmQgUmVhZGVyIiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSU5JVElBTF9SRUFEMTAgKSwKKwogLyogVGhpcyBQZW50YXggc3RpbGwgY2FtZXJhIGlzIG5vdCBjb25mb3JtYW50CiAgKiB0byB0aGUgVVNCIHN0b3JhZ2Ugc3BlY2lmaWNhdGlvbjogLQogICogLSBJdCBkb2VzIG5vdCBsaWtlIHRoZSBJTlFVSVJZIGNvbW1hbmQuIFNvIHdlIG11c3QgaGFuZGxlIHRoaXMgY29tbWFuZApAQCAtMTg4OCw2ICsxODk4LDE1IEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX05PX1JFQURfRElTQ19JTkZPICksCiAKKy8qIFJlcG9ydGVkIGJ5IFN2ZW4gR2VnZ3VzIDxzdmVuLXVzYnN0QGdlZ2d1cy5uZXQ+CisgKiBUaGlzIGVuY3J5cHRlZCBwZW4gZHJpdmUgcmV0dXJucyBib2d1cyBkYXRhIGZvciB0aGUgaW5pdGlhbCBSRUFEKDEwKS4KKyAqLworVU5VU1VBTF9ERVYoICAweDFiMWMsIDB4MWFiNSwgMHgwMjAwLCAweDAyMDAsCisJCSJDb3JzYWlyIiwKKwkJIlBhZGxvY2sgdjIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JTklUSUFMX1JFQUQxMCApLAorCiAvKiBQYXRjaCBieSBSaWNoYXJkIFNjaPx0eiA8ci5zY2h0ekB0LW9ubGluZS5kZT4KICAqIFRoaXMgZXh0ZXJuYWwgaGFyZCBkcml2ZSBlbmNsb3N1cmUgdXNlcyBhIEpNaWNyb24gY2hpcCB3aGljaAogICogbmVlZHMgdGhlIFVTX0ZMX0lHTk9SRV9SRVNJRFVFIGZsYWcgdG8gd29yayBwcm9wZXJseS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IDVlZTdhYzQuLjBjYTA5NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtNDQwLDcgKzQ0MCw4IEBACiAJCQlVU19GTF9OT1RfTE9DS0FCTEUgfCBVU19GTF9NQVhfU0VDVE9SU182NCB8CiAJCQlVU19GTF9DQVBBQ0lUWV9PSyB8IFVTX0ZMX0lHTk9SRV9SRVNJRFVFIHwKIAkJCVVTX0ZMX1NJTkdMRV9MVU4gfCBVU19GTF9OT19XUF9ERVRFQ1QgfAotCQkJVVNfRkxfTk9fUkVBRF9ESVNDX0lORk8gfCBVU19GTF9OT19SRUFEX0NBUEFDSVRZXzE2KTsKKwkJCVVTX0ZMX05PX1JFQURfRElTQ19JTkZPIHwgVVNfRkxfTk9fUkVBRF9DQVBBQ0lUWV8xNiB8CisJCQlVU19GTF9JTklUSUFMX1JFQUQxMCk7CiAKIAlwID0gcXVpcmtzOwogCXdoaWxlICgqcCkgewpAQCAtNDkwLDYgKzQ5MSw5IEBACiAJCWNhc2UgJ20nOgogCQkJZiB8PSBVU19GTF9NQVhfU0VDVE9SU182NDsKIAkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCWYgfD0gVVNfRkxfSU5JVElBTF9SRUFEMTA7CisJCQlicmVhazsKIAkJY2FzZSAnbyc6CiAJCQlmIHw9IFVTX0ZMX0NBUEFDSVRZX09LOwogCQkJYnJlYWs7CkBAIC05NTMsNiArOTU3LDEzIEBACiAJaWYgKHJlc3VsdCkKIAkJZ290byBCYWREZXZpY2U7CiAKKwkvKgorCSAqIElmIHRoZSBkZXZpY2UgcmV0dXJucyBpbnZhbGlkIGRhdGEgZm9yIHRoZSBmaXJzdCBSRUFEKDEwKQorCSAqIGNvbW1hbmQsIGluZGljYXRlIHRoZSBjb21tYW5kIHNob3VsZCBiZSByZXRyaWVkLgorCSAqLworCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfSU5JVElBTF9SRUFEMTApCisJCXNldF9iaXQoVVNfRkxJRFhfUkVET19SRUFEMTAsICZ1cy0+ZGZsYWdzKTsKKwogCS8qIEFjcXVpcmUgYWxsIHRoZSBvdGhlciByZXNvdXJjZXMgYW5kIGFkZCB0aGUgaG9zdCAqLwogCXJlc3VsdCA9IHVzYl9zdG9yX2FjcXVpcmVfcmVzb3VyY2VzKHVzKTsKIAlpZiAocmVzdWx0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKaW5kZXggODlkM2JmZi4uN2IwZjIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCkBAIC03Myw2ICs3Myw4IEBACiAjZGVmaW5lIFVTX0ZMSURYX1JFU0VUVElORwk0CS8qIGRldmljZSByZXNldCBpbiBwcm9ncmVzcyAqLwogI2RlZmluZSBVU19GTElEWF9USU1FRF9PVVQJNQkvKiBTQ1NJIG1pZGxheWVyIHRpbWVkIG91dCAgKi8KICNkZWZpbmUgVVNfRkxJRFhfRE9OVF9TQ0FOCTYJLyogZG9uJ3Qgc2NhbiAoZGlzY29ubmVjdCkgICovCisjZGVmaW5lIFVTX0ZMSURYX1JFRE9fUkVBRDEwCTcJLyogcmVkbyBSRUFEKDEwKSBjb21tYW5kICAgICovCisjZGVmaW5lIFVTX0ZMSURYX1JFQUQxMF9XT1JLRUQJOAkvKiBwcmV2aW91cyBSRUFEKDEwKSBzdWNjZWVkZWQgKi8KIAogI2RlZmluZSBVU0JfU1RPUl9TVFJJTkdfTEVOIDMyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jCmluZGV4IDJmN2M3NmEuLmUyMjRhOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmMKKysrIGIvZHJpdmVycy92aG9zdC9uZXQuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJfQogCiAJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKLQl2aG9zdF9kaXNhYmxlX25vdGlmeSh2cSk7CisJdmhvc3RfZGlzYWJsZV9ub3RpZnkoJm5ldC0+ZGV2LCB2cSk7CiAKIAlpZiAod21lbSA8IHNvY2stPnNrLT5za19zbmRidWYgLyAyKQogCQl0eF9wb2xsX3N0b3AobmV0KTsKQEAgLTE2Niw4ICsxNjYsOCBAQAogCQkJCXNldF9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKHVubGlrZWx5KHZob3N0X2VuYWJsZV9ub3RpZnkodnEpKSkgewotCQkJCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKwkJCWlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KCZuZXQtPmRldiwgdnEpKSkgeworCQkJCXZob3N0X2Rpc2FibGVfbm90aWZ5KCZuZXQtPmRldiwgdnEpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7CkBAIC0zMTUsNyArMzE1LDcgQEAKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKLQl2aG9zdF9kaXNhYmxlX25vdGlmeSh2cSk7CisJdmhvc3RfZGlzYWJsZV9ub3RpZnkoJm5ldC0+ZGV2LCB2cSk7CiAJdmhvc3RfaGxlbiA9IHZxLT52aG9zdF9obGVuOwogCXNvY2tfaGxlbiA9IHZxLT5zb2NrX2hsZW47CiAKQEAgLTMzNCwxMCArMzM0LDEwIEBACiAJCQlicmVhazsKIAkJLyogT0ssIG5vdyB3ZSBuZWVkIHRvIGtub3cgYWJvdXQgYWRkZWQgZGVzY3JpcHRvcnMuICovCiAJCWlmICghaGVhZGNvdW50KSB7Ci0JCQlpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeSh2cSkpKSB7CisJCQlpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeSgmbmV0LT5kZXYsIHZxKSkpIHsKIAkJCQkvKiBUaGV5IGhhdmUgc2xpcHBlZCBvbmUgaW4gYXMgd2Ugd2VyZQogCQkJCSAqIGRvaW5nIHRoYXQ6IGNoZWNrIGFnYWluLiAqLwotCQkJCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKwkJCQl2aG9zdF9kaXNhYmxlX25vdGlmeSgmbmV0LT5kZXYsIHZxKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCS8qIE5vdGhpbmcgbmV3PyAgV2FpdCBmb3IgZXZlbnRmZCB0byB0ZWxsIHVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Rlc3QuYyBiL2RyaXZlcnMvdmhvc3QvdGVzdC5jCmluZGV4IDA5OWYzMDIuLjczNGUxZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvdGVzdC5jCisrKyBiL2RyaXZlcnMvdmhvc3QvdGVzdC5jCkBAIC00OSw3ICs0OSw3IEBACiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJnZxLT5tdXRleCk7Ci0Jdmhvc3RfZGlzYWJsZV9ub3RpZnkodnEpOworCXZob3N0X2Rpc2FibGVfbm90aWZ5KCZuLT5kZXYsIHZxKTsKIAogCWZvciAoOzspIHsKIAkJaGVhZCA9IHZob3N0X2dldF92cV9kZXNjKCZuLT5kZXYsIHZxLCB2cS0+aW92LApAQCAtNjEsOCArNjEsOCBAQAogCQkJYnJlYWs7CiAJCS8qIE5vdGhpbmcgbmV3PyAgV2FpdCBmb3IgZXZlbnRmZCB0byB0ZWxsIHVzIHRoZXkgcmVmaWxsZWQuICovCiAJCWlmIChoZWFkID09IHZxLT5udW0pIHsKLQkJCWlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KHZxKSkpIHsKLQkJCQl2aG9zdF9kaXNhYmxlX25vdGlmeSh2cSk7CisJCQlpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeSgmbi0+ZGV2LCB2cSkpKSB7CisJCQkJdmhvc3RfZGlzYWJsZV9ub3RpZnkoJm4tPmRldiwgdnEpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKaW5kZXggN2FhNGVlYS4uZWE5NjZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtMzcsNiArMzcsOSBAQAogCVZIT1NUX01FTU9SWV9GX0xPRyA9IDB4MSwKIH07CiAKKyNkZWZpbmUgdmhvc3RfdXNlZF9ldmVudCh2cSkgKCh1MTYgX191c2VyICopJnZxLT5hdmFpbC0+cmluZ1t2cS0+bnVtXSkKKyNkZWZpbmUgdmhvc3RfYXZhaWxfZXZlbnQodnEpICgodTE2IF9fdXNlciAqKSZ2cS0+dXNlZC0+cmluZ1t2cS0+bnVtXSkKKwogc3RhdGljIHZvaWQgdmhvc3RfcG9sbF9mdW5jKHN0cnVjdCBmaWxlICpmaWxlLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd3FoLAogCQkJICAgIHBvbGxfdGFibGUgKnB0KQogewpAQCAtMTYxLDYgKzE2NCw4IEBACiAJdnEtPmxhc3RfYXZhaWxfaWR4ID0gMDsKIAl2cS0+YXZhaWxfaWR4ID0gMDsKIAl2cS0+bGFzdF91c2VkX2lkeCA9IDA7CisJdnEtPnNpZ25hbGxlZF91c2VkID0gMDsKKwl2cS0+c2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTsKIAl2cS0+dXNlZF9mbGFncyA9IDA7CiAJdnEtPmxvZ191c2VkID0gZmFsc2U7CiAJdnEtPmxvZ19hZGRyID0gLTF1bGw7CkBAIC00ODksMTYgKzQ5NCwxNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHZxX2FjY2Vzc19vayh1bnNpZ25lZCBpbnQgbnVtLAorc3RhdGljIGludCB2cV9hY2Nlc3Nfb2soc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IG51bSwKIAkJCXN0cnVjdCB2cmluZ19kZXNjIF9fdXNlciAqZGVzYywKIAkJCXN0cnVjdCB2cmluZ19hdmFpbCBfX3VzZXIgKmF2YWlsLAogCQkJc3RydWN0IHZyaW5nX3VzZWQgX191c2VyICp1c2VkKQogeworCXNpemVfdCBzID0gdmhvc3RfaGFzX2ZlYXR1cmUoZCwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpID8gMiA6IDA7CiAJcmV0dXJuIGFjY2Vzc19vayhWRVJJRllfUkVBRCwgZGVzYywgbnVtICogc2l6ZW9mICpkZXNjKSAmJgogCSAgICAgICBhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGF2YWlsLAotCQkJIHNpemVvZiAqYXZhaWwgKyBudW0gKiBzaXplb2YgKmF2YWlsLT5yaW5nKSAmJgorCQkJIHNpemVvZiAqYXZhaWwgKyBudW0gKiBzaXplb2YgKmF2YWlsLT5yaW5nICsgcykgJiYKIAkgICAgICAgYWNjZXNzX29rKFZFUklGWV9XUklURSwgdXNlZCwKLQkJCXNpemVvZiAqdXNlZCArIG51bSAqIHNpemVvZiAqdXNlZC0+cmluZyk7CisJCQlzaXplb2YgKnVzZWQgKyBudW0gKiBzaXplb2YgKnVzZWQtPnJpbmcgKyBzKTsKIH0KIAogLyogQ2FuIHdlIGxvZyB3cml0ZXM/ICovCkBAIC01MTQsOSArNTIwLDExIEBACiAKIC8qIFZlcmlmeSBhY2Nlc3MgZm9yIHdyaXRlIGxvZ2dpbmcuICovCiAvKiBDYWxsZXIgc2hvdWxkIGhhdmUgdnEgbXV0ZXggYW5kIGRldmljZSBtdXRleCAqLwotc3RhdGljIGludCB2cV9sb2dfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB2b2lkIF9fdXNlciAqbG9nX2Jhc2UpCitzdGF0aWMgaW50IHZxX2xvZ19hY2Nlc3Nfb2soc3RydWN0IHZob3N0X2RldiAqZCwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCisJCQkgICAgdm9pZCBfX3VzZXIgKmxvZ19iYXNlKQogewogCXN0cnVjdCB2aG9zdF9tZW1vcnkgKm1wOworCXNpemVfdCBzID0gdmhvc3RfaGFzX2ZlYXR1cmUoZCwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpID8gMiA6IDA7CiAKIAltcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodnEtPmRldi0+bWVtb3J5LAogCQkJCSAgICAgICBsb2NrZGVwX2lzX2hlbGQoJnZxLT5tdXRleCkpOwpAQCAtNTI0LDE1ICs1MzIsMTUgQEAKIAkJCSAgICB2aG9zdF9oYXNfZmVhdHVyZSh2cS0+ZGV2LCBWSE9TVF9GX0xPR19BTEwpKSAmJgogCQkoIXZxLT5sb2dfdXNlZCB8fCBsb2dfYWNjZXNzX29rKGxvZ19iYXNlLCB2cS0+bG9nX2FkZHIsCiAJCQkJCXNpemVvZiAqdnEtPnVzZWQgKwotCQkJCQl2cS0+bnVtICogc2l6ZW9mICp2cS0+dXNlZC0+cmluZykpOworCQkJCQl2cS0+bnVtICogc2l6ZW9mICp2cS0+dXNlZC0+cmluZyArIHMpKTsKIH0KIAogLyogQ2FuIHdlIHN0YXJ0IHZxPyAqLwogLyogQ2FsbGVyIHNob3VsZCBoYXZlIHZxIG11dGV4IGFuZCBkZXZpY2UgbXV0ZXggKi8KIGludCB2aG9zdF92cV9hY2Nlc3Nfb2soc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCiB7Ci0JcmV0dXJuIHZxX2FjY2Vzc19vayh2cS0+bnVtLCB2cS0+ZGVzYywgdnEtPmF2YWlsLCB2cS0+dXNlZCkgJiYKLQkJdnFfbG9nX2FjY2Vzc19vayh2cSwgdnEtPmxvZ19iYXNlKTsKKwlyZXR1cm4gdnFfYWNjZXNzX29rKHZxLT5kZXYsIHZxLT5udW0sIHZxLT5kZXNjLCB2cS0+YXZhaWwsIHZxLT51c2VkKSAmJgorCQl2cV9sb2dfYWNjZXNzX29rKHZxLT5kZXYsIHZxLCB2cS0+bG9nX2Jhc2UpOwogfQogCiBzdGF0aWMgbG9uZyB2aG9zdF9zZXRfbWVtb3J5KHN0cnVjdCB2aG9zdF9kZXYgKmQsIHN0cnVjdCB2aG9zdF9tZW1vcnkgX191c2VyICptKQpAQCAtNTc3LDYgKzU4NSw3IEBACiAKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJdnEtPnNpZ25hbGxlZF91c2VkX3ZhbGlkID0gZmFsc2U7CiAJcmV0dXJuIGdldF91c2VyKHZxLT5sYXN0X3VzZWRfaWR4LCAmdXNlZC0+aWR4KTsKIH0KIApAQCAtNjc0LDcgKzY4Myw3IEBACiAJCSAqIElmIGl0IGlzIG5vdCwgd2UgZG9uJ3QgYXMgc2l6ZSBtaWdodCBub3QgaGF2ZSBiZWVuIHNldHVwLgogCQkgKiBXZSB3aWxsIHZlcmlmeSB3aGVuIGJhY2tlbmQgaXMgY29uZmlndXJlZC4gKi8KIAkJaWYgKHZxLT5wcml2YXRlX2RhdGEpIHsKLQkJCWlmICghdnFfYWNjZXNzX29rKHZxLT5udW0sCisJCQlpZiAoIXZxX2FjY2Vzc19vayhkLCB2cS0+bnVtLAogCQkJCSh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEuZGVzY191c2VyX2FkZHIsCiAJCQkJKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpYS5hdmFpbF91c2VyX2FkZHIsCiAJCQkJKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpYS51c2VkX3VzZXJfYWRkcikpIHsKQEAgLTgxOCw3ICs4MjcsNyBAQAogCQkJdnEgPSBkLT52cXMgKyBpOwogCQkJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKIAkJCS8qIElmIHJpbmcgaXMgaW5hY3RpdmUsIHdpbGwgY2hlY2sgd2hlbiBpdCdzIGVuYWJsZWQuICovCi0JCQlpZiAodnEtPnByaXZhdGVfZGF0YSAmJiAhdnFfbG9nX2FjY2Vzc19vayh2cSwgYmFzZSkpCisJCQlpZiAodnEtPnByaXZhdGVfZGF0YSAmJiAhdnFfbG9nX2FjY2Vzc19vayhkLCB2cSwgYmFzZSkpCiAJCQkJciA9IC1FRkFVTFQ7CiAJCQllbHNlCiAJCQkJdnEtPmxvZ19iYXNlID0gYmFzZTsKQEAgLTEyMTksNiArMTIyOCwxMCBAQAogCiAJLyogT24gc3VjY2VzcywgaW5jcmVtZW50IGF2YWlsIGluZGV4LiAqLwogCXZxLT5sYXN0X2F2YWlsX2lkeCsrOworCisJLyogQXNzdW1lIG5vdGlmaWNhdGlvbnMgZnJvbSBndWVzdCBhcmUgZGlzYWJsZWQgYXQgdGhpcyBwb2ludCwKKwkgKiBpZiB0aGV5IGFyZW4ndCB3ZSB3b3VsZCBuZWVkIHRvIHVwZGF0ZSBhdmFpbF9ldmVudCBpbmRleC4gKi8KKwlCVUdfT04oISh2cS0+dXNlZF9mbGFncyAmIFZSSU5HX1VTRURfRl9OT19OT1RJRlkpKTsKIAlyZXR1cm4gaGVhZDsKIH0KIApAQCAtMTI2Nyw2ICsxMjgwLDEyIEBACiAJCQlldmVudGZkX3NpZ25hbCh2cS0+bG9nX2N0eCwgMSk7CiAJfQogCXZxLT5sYXN0X3VzZWRfaWR4Kys7CisJLyogSWYgdGhlIGRyaXZlciBuZXZlciBib3RoZXJzIHRvIHNpZ25hbCBpbiBhIHZlcnkgbG9uZyB3aGlsZSwKKwkgKiB1c2VkIGluZGV4IG1pZ2h0IHdyYXAgYXJvdW5kLiBJZiB0aGF0IGhhcHBlbnMsIGludmFsaWRhdGUKKwkgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXIKKwkgKiBzaWduYWxzIGF0IGxlYXN0IG9uY2UgaW4gMl4xNiBhbmQgcmVtb3ZlIHRoaXMuICovCisJaWYgKHVubGlrZWx5KHZxLT5sYXN0X3VzZWRfaWR4ID09IHZxLT5zaWduYWxsZWRfdXNlZCkpCisJCXZxLT5zaWduYWxsZWRfdXNlZF92YWxpZCA9IGZhbHNlOwogCXJldHVybiAwOwogfQogCkBAIC0xMjc1LDYgKzEyOTQsNyBAQAogCQkJICAgIHVuc2lnbmVkIGNvdW50KQogewogCXN0cnVjdCB2cmluZ191c2VkX2VsZW0gX191c2VyICp1c2VkOworCXUxNiBvbGQsIG5ldzsKIAlpbnQgc3RhcnQ7CiAKIAlzdGFydCA9IHZxLT5sYXN0X3VzZWRfaWR4ICUgdnEtPm51bTsKQEAgLTEyOTIsNyArMTMxMiwxNCBAQAogCQkJICAgKCh2b2lkIF9fdXNlciAqKXVzZWQgLSAodm9pZCBfX3VzZXIgKil2cS0+dXNlZCksCiAJCQkgIGNvdW50ICogc2l6ZW9mICp1c2VkKTsKIAl9Ci0JdnEtPmxhc3RfdXNlZF9pZHggKz0gY291bnQ7CisJb2xkID0gdnEtPmxhc3RfdXNlZF9pZHg7CisJbmV3ID0gKHZxLT5sYXN0X3VzZWRfaWR4ICs9IGNvdW50KTsKKwkvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLAorCSAqIHVzZWQgaW5kZXggbWlnaHQgd3JhcCBhcm91bmQuIElmIHRoYXQgaGFwcGVucywgaW52YWxpZGF0ZQorCSAqIHNpZ25hbGxlZF91c2VkIGluZGV4IHdlIHN0b3JlZC4gVE9ETzogbWFrZSBzdXJlIGRyaXZlcgorCSAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi8KKwlpZiAodW5saWtlbHkoKHUxNikobmV3IC0gdnEtPnNpZ25hbGxlZF91c2VkKSA8ICh1MTYpKG5ldyAtIG9sZCkpKQorCQl2cS0+c2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMzMSwyOSArMTM1OCw0NyBAQAogCXJldHVybiByOwogfQogCi0vKiBUaGlzIGFjdHVhbGx5IHNpZ25hbHMgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqLwotdm9pZCB2aG9zdF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3N0YXRpYyBib29sIHZob3N0X25vdGlmeShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQogewotCV9fdTE2IGZsYWdzOwotCisJX191MTYgb2xkLCBuZXcsIGV2ZW50OworCWJvb2wgdjsKIAkvKiBGbHVzaCBvdXQgdXNlZCBpbmRleCB1cGRhdGVzLiBUaGlzIGlzIHBhaXJlZAogCSAqIHdpdGggdGhlIGJhcnJpZXIgdGhhdCB0aGUgR3Vlc3QgZXhlY3V0ZXMgd2hlbiBlbmFibGluZwogCSAqIGludGVycnVwdHMuICovCiAJc21wX21iKCk7CiAKLQlpZiAoX19nZXRfdXNlcihmbGFncywgJnZxLT5hdmFpbC0+ZmxhZ3MpKSB7Ci0JCXZxX2Vycih2cSwgIkZhaWxlZCB0byBnZXQgZmxhZ3MiKTsKLQkJcmV0dXJuOworCWlmICh2aG9zdF9oYXNfZmVhdHVyZShkZXYsIFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSkgJiYKKwkgICAgdW5saWtlbHkodnEtPmF2YWlsX2lkeCA9PSB2cS0+bGFzdF9hdmFpbF9pZHgpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICghdmhvc3RfaGFzX2ZlYXR1cmUoZGV2LCBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCkpIHsKKwkJX191MTYgZmxhZ3M7CisJCWlmIChfX2dldF91c2VyKGZsYWdzLCAmdnEtPmF2YWlsLT5mbGFncykpIHsKKwkJCXZxX2Vycih2cSwgIkZhaWxlZCB0byBnZXQgZmxhZ3MiKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiAhKGZsYWdzICYgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpOwogCX0KKwlvbGQgPSB2cS0+c2lnbmFsbGVkX3VzZWQ7CisJdiA9IHZxLT5zaWduYWxsZWRfdXNlZF92YWxpZDsKKwluZXcgPSB2cS0+c2lnbmFsbGVkX3VzZWQgPSB2cS0+bGFzdF91c2VkX2lkeDsKKwl2cS0+c2lnbmFsbGVkX3VzZWRfdmFsaWQgPSB0cnVlOwogCi0JLyogSWYgdGhleSBkb24ndCB3YW50IGFuIGludGVycnVwdCwgZG9uJ3Qgc2lnbmFsLCB1bmxlc3MgZW1wdHkuICovCi0JaWYgKChmbGFncyAmIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUKSAmJgotCSAgICAodnEtPmF2YWlsX2lkeCAhPSB2cS0+bGFzdF9hdmFpbF9pZHggfHwKLQkgICAgICF2aG9zdF9oYXNfZmVhdHVyZShkZXYsIFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSkpKQotCQlyZXR1cm47CisJaWYgKHVubGlrZWx5KCF2KSkKKwkJcmV0dXJuIHRydWU7CiAKKwlpZiAoZ2V0X3VzZXIoZXZlbnQsIHZob3N0X3VzZWRfZXZlbnQodnEpKSkgeworCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZ2V0IHVzZWQgZXZlbnQgaWR4Iik7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gdnJpbmdfbmVlZF9ldmVudChldmVudCwgbmV3LCBvbGQpOworfQorCisvKiBUaGlzIGFjdHVhbGx5IHNpZ25hbHMgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqLwordm9pZCB2aG9zdF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKIAkvKiBTaWduYWwgdGhlIEd1ZXN0IHRlbGwgdGhlbSB3ZSB1c2VkIHNvbWV0aGluZyB1cC4gKi8KLQlpZiAodnEtPmNhbGxfY3R4KQorCWlmICh2cS0+Y2FsbF9jdHggJiYgdmhvc3Rfbm90aWZ5KGRldiwgdnEpKQogCQlldmVudGZkX3NpZ25hbCh2cS0+Y2FsbF9jdHgsIDEpOwogfQogCkBAIC0xMzc2LDcgKzE0MjEsNyBAQAogfQogCiAvKiBPSywgbm93IHdlIG5lZWQgdG8ga25vdyBhYm91dCBhZGRlZCBkZXNjcmlwdG9ycy4gKi8KLWJvb2wgdmhvc3RfZW5hYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK2Jvb2wgdmhvc3RfZW5hYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQogewogCXUxNiBhdmFpbF9pZHg7CiAJaW50IHI7CkBAIC0xMzg0LDExICsxNDI5LDM0IEBACiAJaWYgKCEodnEtPnVzZWRfZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9USUZZKSkKIAkJcmV0dXJuIGZhbHNlOwogCXZxLT51c2VkX2ZsYWdzICY9IH5WUklOR19VU0VEX0ZfTk9fTk9USUZZOwotCXIgPSBwdXRfdXNlcih2cS0+dXNlZF9mbGFncywgJnZxLT51c2VkLT5mbGFncyk7Ci0JaWYgKHIpIHsKLQkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIGVuYWJsZSBub3RpZmljYXRpb24gYXQgJXA6ICVkXG4iLAotCQkgICAgICAgJnZxLT51c2VkLT5mbGFncywgcik7Ci0JCXJldHVybiBmYWxzZTsKKwlpZiAoIXZob3N0X2hhc19mZWF0dXJlKGRldiwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpKSB7CisJCXIgPSBwdXRfdXNlcih2cS0+dXNlZF9mbGFncywgJnZxLT51c2VkLT5mbGFncyk7CisJCWlmIChyKSB7CisJCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZW5hYmxlIG5vdGlmaWNhdGlvbiBhdCAlcDogJWRcbiIsCisJCQkgICAgICAgJnZxLT51c2VkLT5mbGFncywgcik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9IGVsc2UgeworCQlyID0gcHV0X3VzZXIodnEtPmF2YWlsX2lkeCwgdmhvc3RfYXZhaWxfZXZlbnQodnEpKTsKKwkJaWYgKHIpIHsKKwkJCXZxX2Vycih2cSwgIkZhaWxlZCB0byB1cGRhdGUgYXZhaWwgZXZlbnQgaW5kZXggYXQgJXA6ICVkXG4iLAorCQkJICAgICAgIHZob3N0X2F2YWlsX2V2ZW50KHZxKSwgcik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisJaWYgKHVubGlrZWx5KHZxLT5sb2dfdXNlZCkpIHsKKwkJdm9pZCBfX3VzZXIgKnVzZWQ7CisJCS8qIE1ha2Ugc3VyZSBkYXRhIGlzIHNlZW4gYmVmb3JlIGxvZy4gKi8KKwkJc21wX3dtYigpOworCQl1c2VkID0gdmhvc3RfaGFzX2ZlYXR1cmUoZGV2LCBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCkgPworCQkJJnZxLT51c2VkLT5mbGFncyA6IHZob3N0X2F2YWlsX2V2ZW50KHZxKTsKKwkJLyogTG9nIHVzZWQgZmxhZ3Mgb3IgZXZlbnQgaW5kZXggZW50cnkgd3JpdGUuIEJvdGggYXJlIDE2IGJpdAorCQkgKiBmaWVsZHMuICovCisJCWxvZ193cml0ZSh2cS0+bG9nX2Jhc2UsIHZxLT5sb2dfYWRkciArCisJCQkgICAodXNlZCAtICh2b2lkIF9fdXNlciAqKXZxLT51c2VkKSwKKwkJCSAgc2l6ZW9mKHUxNikpOworCQlpZiAodnEtPmxvZ19jdHgpCisJCQlldmVudGZkX3NpZ25hbCh2cS0+bG9nX2N0eCwgMSk7CiAJfQogCS8qIFRoZXkgY291bGQgaGF2ZSBzbGlwcGVkIG9uZSBpbiBhcyB3ZSB3ZXJlIGRvaW5nIHRoYXQ6IG1ha2UKIAkgKiBzdXJlIGl0J3Mgd3JpdHRlbiwgdGhlbiBjaGVjayBhZ2Fpbi4gKi8KQEAgLTE0MDQsMTUgKzE0NzIsMTcgQEAKIH0KIAogLyogV2UgZG9uJ3QgbmVlZCB0byBiZSBub3RpZmllZCBhZ2Fpbi4gKi8KLXZvaWQgdmhvc3RfZGlzYWJsZV9ub3RpZnkoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCit2b2lkIHZob3N0X2Rpc2FibGVfbm90aWZ5KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCiB7CiAJaW50IHI7CiAKIAlpZiAodnEtPnVzZWRfZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9USUZZKQogCQlyZXR1cm47CiAJdnEtPnVzZWRfZmxhZ3MgfD0gVlJJTkdfVVNFRF9GX05PX05PVElGWTsKLQlyID0gcHV0X3VzZXIodnEtPnVzZWRfZmxhZ3MsICZ2cS0+dXNlZC0+ZmxhZ3MpOwotCWlmIChyKQotCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZW5hYmxlIG5vdGlmaWNhdGlvbiBhdCAlcDogJWRcbiIsCi0JCSAgICAgICAmdnEtPnVzZWQtPmZsYWdzLCByKTsKKwlpZiAoIXZob3N0X2hhc19mZWF0dXJlKGRldiwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpKSB7CisJCXIgPSBwdXRfdXNlcih2cS0+dXNlZF9mbGFncywgJnZxLT51c2VkLT5mbGFncyk7CisJCWlmIChyKQorCQkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIGVuYWJsZSBub3RpZmljYXRpb24gYXQgJXA6ICVkXG4iLAorCQkJICAgICAgICZ2cS0+dXNlZC0+ZmxhZ3MsIHIpOworCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAppbmRleCBiMzM2M2FlLi44ZTAzMzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5oCkBAIC04NCw2ICs4NCwxMiBAQAogCS8qIFVzZWQgZmxhZ3MgKi8KIAl1MTYgdXNlZF9mbGFnczsKIAorCS8qIExhc3QgdXNlZCBpbmRleCB2YWx1ZSB3ZSBoYXZlIHNpZ25hbGxlZCBvbiAqLworCXUxNiBzaWduYWxsZWRfdXNlZDsKKworCS8qIExhc3QgdXNlZCBpbmRleCB2YWx1ZSB3ZSBoYXZlIHNpZ25hbGxlZCBvbiAqLworCWJvb2wgc2lnbmFsbGVkX3VzZWRfdmFsaWQ7CisKIAkvKiBMb2cgd3JpdGVzIHRvIHVzZWQgc3RydWN0dXJlLiAqLwogCWJvb2wgbG9nX3VzZWQ7CiAJdTY0IGxvZ19hZGRyOwpAQCAtMTQ5LDggKzE1NSw4IEBACiB2b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihzdHJ1Y3Qgdmhvc3RfZGV2ICosIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwKIAkJCSAgICAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcywgdW5zaWduZWQgY291bnQpOwogdm9pZCB2aG9zdF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICopOwotdm9pZCB2aG9zdF9kaXNhYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICopOwotYm9vbCB2aG9zdF9lbmFibGVfbm90aWZ5KHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKik7Cit2b2lkIHZob3N0X2Rpc2FibGVfbm90aWZ5KHN0cnVjdCB2aG9zdF9kZXYgKiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKTsKK2Jvb2wgdmhvc3RfZW5hYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfZGV2ICosIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKik7CiAKIGludCB2aG9zdF9sb2dfd3JpdGUoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2aG9zdF9sb2cgKmxvZywKIAkJICAgIHVuc2lnbmVkIGludCBsb2dfbnVtLCB1NjQgbGVuKTsKQEAgLTE2MiwxMSArMTY4LDEyIEBACiAJfSB3aGlsZSAoMCkKIAogZW51bSB7Ci0JVkhPU1RfRkVBVFVSRVMgPSAoMSA8PCBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkpIHwKLQkJCSAoMSA8PCBWSVJUSU9fUklOR19GX0lORElSRUNUX0RFU0MpIHwKLQkJCSAoMSA8PCBWSE9TVF9GX0xPR19BTEwpIHwKLQkJCSAoMSA8PCBWSE9TVF9ORVRfRl9WSVJUSU9fTkVUX0hEUikgfAotCQkJICgxIDw8IFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpLAorCVZIT1NUX0ZFQVRVUkVTID0gKDFVTEwgPDwgVklSVElPX0ZfTk9USUZZX09OX0VNUFRZKSB8CisJCQkgKDFVTEwgPDwgVklSVElPX1JJTkdfRl9JTkRJUkVDVF9ERVNDKSB8CisJCQkgKDFVTEwgPDwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpIHwKKwkJCSAoMVVMTCA8PCBWSE9TVF9GX0xPR19BTEwpIHwKKwkJCSAoMVVMTCA8PCBWSE9TVF9ORVRfRl9WSVJUSU9fTkVUX0hEUikgfAorCQkJICgxVUxMIDw8IFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpLAogfTsKIAogc3RhdGljIGlubGluZSBpbnQgdmhvc3RfaGFzX2ZlYXR1cmUoc3RydWN0IHZob3N0X2RldiAqZGV2LCBpbnQgYml0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hcmNmYi5jIGIvZHJpdmVycy92aWRlby9hcmNmYi5jCmluZGV4IDNlYzQ5MjMuLmMyMmU4ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKQEAgLTUxNSwxMSArNTE1LDEwIEBACiAKIAkvKiBXZSBuZWVkIGEgZmxhdCBiYWNraW5nIHN0b3JlIGZvciB0aGUgQXJjJ3MKIAkgICBsZXNzLWZsYXQgYWN0dWFsIHBhZ2VkIGZyYW1lYnVmZmVyICovCi0JaWYgKCEodmlkZW9tZW1vcnkgPSB2bWFsbG9jKHZpZGVvbWVtb3J5c2l6ZSkpKQorCXZpZGVvbWVtb3J5ID0gdnphbGxvYyh2aWRlb21lbW9yeXNpemUpOworCWlmICghdmlkZW9tZW1vcnkpCiAJCXJldHVybiByZXR2YWw7CiAKLQltZW1zZXQodmlkZW9tZW1vcnksIDAsIHZpZGVvbWVtb3J5c2l6ZSk7Ci0KIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBhcmNmYl9wYXIpLCAmZGV2LT5kZXYpOwogCWlmICghaW5mbykKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKaW5kZXggZWJiODkzYy4uZDdhYWVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwpAQCAtMjQ4LDEwICsyNDgsNiBAQAogCiBzdGF0aWMgaW50IGF0eV9pbml0KHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAotI2lmZGVmIENPTkZJR19BVEFSSQotc3RhdGljIGludCBzdG9yZV92aWRlb19wYXIoY2hhciAqdmlkZW9wYXIsIHVuc2lnbmVkIGNoYXIgbTY0X251bSk7Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgYXR5X2dldF9jcnRjKGNvbnN0IHN0cnVjdCBhdHlmYl9wYXIgKnBhciwgc3RydWN0IGNydGMgKmNydGMpOwogCiBzdGF0aWMgdm9pZCBhdHlfc2V0X2NydGMoY29uc3Qgc3RydWN0IGF0eWZiX3BhciAqcGFyLCBjb25zdCBzdHJ1Y3QgY3J0YyAqY3J0Yyk7CkBAIC0yMjY4LDExICsyMjY0LDEzIEBACiAJcmV0dXJuOwogfQogCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHZvaWQgYXR5X2JsX2V4aXQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewogCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihiZCk7CiAJcHJpbnRrKCJhdHk6IEJhY2tsaWdodCB1bmxvYWRlZFxuIik7CiB9CisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiAjZW5kaWYgLyogQ09ORklHX0ZCX0FUWV9CQUNLTElHSFQgKi8KIApAQCAtMjc4OSw3ICsyNzg3LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jaWZkZWYgQ09ORklHX0FUQVJJCisjaWYgZGVmaW5lZChDT05GSUdfQVRBUkkpICYmICFkZWZpbmVkKE1PRFVMRSkKIHN0YXRpYyBpbnQgX19kZXZpbml0IHN0b3JlX3ZpZGVvX3BhcihjaGFyICp2aWRlb19zdHIsIHVuc2lnbmVkIGNoYXIgbTY0X251bSkKIHsKIAljaGFyICpwOwpAQCAtMjgxOCw3ICsyODE2LDcgQEAKIAlwaHlzX3ZtZW1iYXNlW202NF9udW1dID0gMDsKIAlyZXR1cm4gLTE7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0FUQVJJICovCisjZW5kaWYgLyogQ09ORklHX0FUQVJJICYmICFNT0RVTEUgKi8KIAogLyoKICAqIEJsYW5rIHRoZSBkaXNwbGF5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKaW5kZXggMGM5MzczYi4uMmQ5M2M4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCkBAIC0zMDIsNiArMzAyLDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKIAkgIGJlIGNhbGxlZCBhZHA4ODYwX2JsLgogCitjb25maWcgQkFDS0xJR0hUX0FEUDg4NzAKKwl0cmlzdGF0ZSAiQmFja2xpZ2h0IERyaXZlciBmb3IgQURQODg3MCB1c2luZyBXTEVEIgorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBJMkMKKwlzZWxlY3QgTkVXX0xFRFMKKwlzZWxlY3QgTEVEU19DTEFTUworCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgTENEIGJhY2tsaWdodCBjb25uZWN0ZWQgdG8gdGhlIEFEUDg4NzAsCisJICBzYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGlzIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgYWRwODg3MF9ibC4KKwogY29uZmlnIEJBQ0tMSUdIVF84OFBNODYwWAogCXRyaXN0YXRlICJCYWNrbGlnaHQgRHJpdmVyIGZvciA4OFBNODYwNiB1c2luZyBXTEVEIgogCWRlcGVuZHMgb24gTUZEXzg4UE04NjBYCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCmluZGV4IGI5Y2E4NDkuLmVlNzJhZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCkBAIC0zNCw2ICszNCw3IEBACiBvYmotJChDT05GSUdfQkFDS0xJR0hUX0FEWCkgICAgKz0gYWR4X2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfQURQNTUyMCkJKz0gYWRwNTUyMF9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX0FEUDg4NjApCSs9IGFkcDg4NjBfYmwubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODcwKQkrPSBhZHA4ODcwX2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfODhQTTg2MFgpICs9IDg4cG04NjB4X2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfUENGNTA2MzMpCSs9IHBjZjUwNjMzLWJhY2tsaWdodC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NzBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NzBfYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWE4ODMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwODg3MF9ibC5jCkBAIC0wLDAgKzEsMTAxMiBAQAorLyoKKyAqIEJhY2tsaWdodCBkcml2ZXIgZm9yIEFuYWxvZyBEZXZpY2VzIEFEUDg4NzAgQmFja2xpZ2h0IERldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2kyYy9hZHA4ODcwLmg+CisjZGVmaW5lIEFEUDg4NzBfRVhUX0ZFQVRVUkVTCisjZGVmaW5lIEFEUDg4NzBfVVNFX0xFRFMKKworCisjZGVmaW5lIEFEUDg4NzBfTUZEVklECTB4MDAgIC8qIE1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEICovCisjZGVmaW5lIEFEUDg4NzBfTURDUgkweDAxICAvKiBEZXZpY2UgbW9kZSBhbmQgc3RhdHVzICovCisjZGVmaW5lIEFEUDg4NzBfSU5UX1NUQVQgMHgwMiAgLyogSW50ZXJydXB0cyBzdGF0dXMgKi8KKyNkZWZpbmUgQURQODg3MF9JTlRfRU4JMHgwMyAgLyogSW50ZXJydXB0cyBlbmFibGUgKi8KKyNkZWZpbmUgQURQODg3MF9DRkdSCTB4MDQgIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURQODg3MF9CTFNFTAkweDA1ICAvKiBTaW5rIGVuYWJsZSBiYWNrbGlnaHQgb3IgaW5kZXBlbmRlbnQgKi8KKyNkZWZpbmUgQURQODg3MF9QV01MRUQJMHgwNiAgLyogUFdNIEVuYWJsZSBTZWxlY3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURQODg3MF9CTE9GRgkweDA3ICAvKiBCYWNrbGlnaHQgb2ZmIHRpbWVvdXQgKi8KKyNkZWZpbmUgQURQODg3MF9CTERJTQkweDA4ICAvKiBCYWNrbGlnaHQgZGltIHRpbWVvdXQgKi8KKyNkZWZpbmUgQURQODg3MF9CTEZSCTB4MDkgIC8qIEJhY2tsaWdodCBmYWRlIGluIGFuZCBvdXQgcmF0ZXMgKi8KKyNkZWZpbmUgQURQODg3MF9CTE1YMQkweDBBICAvKiBCYWNrbGlnaHQgKEJyaWdodG5lc3MgTGV2ZWwgMS1kYXlsaWdodCkgbWF4aW11bSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxETTEJMHgwQiAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDEtZGF5bGlnaHQpIGRpbSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxNWDIJMHgwQyAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDItYnJpZ2h0KSBtYXhpbXVtIGN1cnJlbnQgKi8KKyNkZWZpbmUgQURQODg3MF9CTERNMgkweDBEICAvKiBCYWNrbGlnaHQgKEJyaWdodG5lc3MgTGV2ZWwgMi1icmlnaHQpIGRpbSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxNWDMJMHgwRSAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDMtb2ZmaWNlKSBtYXhpbXVtIGN1cnJlbnQgKi8KKyNkZWZpbmUgQURQODg3MF9CTERNMwkweDBGICAvKiBCYWNrbGlnaHQgKEJyaWdodG5lc3MgTGV2ZWwgMy1vZmZpY2UpIGRpbSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxNWDQJMHgxMCAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDQtaW5kb29yKSBtYXhpbXVtIGN1cnJlbnQgKi8KKyNkZWZpbmUgQURQODg3MF9CTERNNAkweDExICAvKiBCYWNrbGlnaHQgKEJyaWdodG5lc3MgTGV2ZWwgNC1pbmRvb3IpIGRpbSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxNWDUJMHgxMiAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDUtZGFyaykgbWF4aW11bSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxETTUJMHgxMyAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDUtZGFyaykgZGltIGN1cnJlbnQgKi8KKyNkZWZpbmUgQURQODg3MF9JU0NMQVcJMHgxQSAgLyogSW5kZXBlbmRlbnQgc2luayBjdXJyZW50IGZhZGUgbGF3IHJlZ2lzdGVyICovCisjZGVmaW5lIEFEUDg4NzBfSVNDQwkweDFCICAvKiBJbmRlcGVuZGVudCBzaW5rIGN1cnJlbnQgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBBRFA4ODcwX0lTQ1QxCTB4MUMgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBUaW1lciBSZWdpc3RlciBMRURbNzo1XSAqLworI2RlZmluZSBBRFA4ODcwX0lTQ1QyCTB4MUQgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBUaW1lciBSZWdpc3RlciBMRURbNDoxXSAqLworI2RlZmluZSBBRFA4ODcwX0lTQ0YJMHgxRSAgLyogSW5kZXBlbmRlbnQgc2luayBjdXJyZW50IGZhZGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURQODg3MF9JU0MxCTB4MUYgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBMRUQxICovCisjZGVmaW5lIEFEUDg4NzBfSVNDMgkweDIwICAvKiBJbmRlcGVuZGVudCBTaW5rIEN1cnJlbnQgTEVEMiAqLworI2RlZmluZSBBRFA4ODcwX0lTQzMJMHgyMSAgLyogSW5kZXBlbmRlbnQgU2luayBDdXJyZW50IExFRDMgKi8KKyNkZWZpbmUgQURQODg3MF9JU0M0CTB4MjIgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBMRUQ0ICovCisjZGVmaW5lIEFEUDg4NzBfSVNDNQkweDIzICAvKiBJbmRlcGVuZGVudCBTaW5rIEN1cnJlbnQgTEVENSAqLworI2RlZmluZSBBRFA4ODcwX0lTQzYJMHgyNCAgLyogSW5kZXBlbmRlbnQgU2luayBDdXJyZW50IExFRDYgKi8KKyNkZWZpbmUgQURQODg3MF9JU0M3CTB4MjUgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBMRUQ3IChCcmlnaHRuZXNzIExldmVsIDEtZGF5bGlnaHQpICovCisjZGVmaW5lIEFEUDg4NzBfSVNDN19MMgkweDI2ICAvKiBJbmRlcGVuZGVudCBTaW5rIEN1cnJlbnQgTEVENyAoQnJpZ2h0bmVzcyBMZXZlbCAyLWJyaWdodCkgKi8KKyNkZWZpbmUgQURQODg3MF9JU0M3X0wzCTB4MjcgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBMRUQ3IChCcmlnaHRuZXNzIExldmVsIDMtb2ZmaWNlKSAqLworI2RlZmluZSBBRFA4ODcwX0lTQzdfTDQJMHgyOCAgLyogSW5kZXBlbmRlbnQgU2luayBDdXJyZW50IExFRDcgKEJyaWdodG5lc3MgTGV2ZWwgNC1pbmRvb3IpICovCisjZGVmaW5lIEFEUDg4NzBfSVNDN19MNQkweDI5ICAvKiBJbmRlcGVuZGVudCBTaW5rIEN1cnJlbnQgTEVENyAoQnJpZ2h0bmVzcyBMZXZlbCA1LWRhcmspICovCisjZGVmaW5lIEFEUDg4NzBfQ01QX0NUTAkweDJEICAvKiBBTFMgQ29tcGFyYXRvciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEUDg4NzBfQUxTMV9FTgkweDJFICAvKiBNYWluIEFMUyBjb21wYXJhdG9yIGxldmVsIGVuYWJsZSAqLworI2RlZmluZSBBRFA4ODcwX0FMUzJfRU4JMHgyRiAgLyogU2Vjb25kIEFMUyBjb21wYXJhdG9yIGxldmVsIGVuYWJsZSAqLworI2RlZmluZSBBRFA4ODcwX0FMUzFfU1RBVCAweDMwICAvKiBNYWluIEFMUyBDb21wYXJhdG9yIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBBRFA4ODcwX0FMUzJfU1RBVCAweDMxICAvKiBTZWNvbmQgQUxTIENvbXBhcmF0b3IgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEUDg4NzBfTDJUUlAJMHgzMiAgLyogTDIgY29tcGFyYXRvciByZWZlcmVuY2UgKi8KKyNkZWZpbmUgQURQODg3MF9MMkhZUwkweDMzICAvKiBMMiBoeXN0ZXJlc2lzICovCisjZGVmaW5lIEFEUDg4NzBfTDNUUlAJMHgzNCAgLyogTDMgY29tcGFyYXRvciByZWZlcmVuY2UgKi8KKyNkZWZpbmUgQURQODg3MF9MM0hZUwkweDM1ICAvKiBMMyBoeXN0ZXJlc2lzICovCisjZGVmaW5lIEFEUDg4NzBfTDRUUlAJMHgzNiAgLyogTDQgY29tcGFyYXRvciByZWZlcmVuY2UgKi8KKyNkZWZpbmUgQURQODg3MF9MNEhZUwkweDM3ICAvKiBMNCBoeXN0ZXJlc2lzICovCisjZGVmaW5lIEFEUDg4NzBfTDVUUlAJMHgzOCAgLyogTDUgY29tcGFyYXRvciByZWZlcmVuY2UgKi8KKyNkZWZpbmUgQURQODg3MF9MNUhZUwkweDM5ICAvKiBMNSBoeXN0ZXJlc2lzICovCisjZGVmaW5lIEFEUDg4NzBfUEgxTEVWTAkweDQwICAvKiBGaXJzdCBwaG90b3RyYW5zaXN0b3IgYW1iaWVudCBsaWdodCBsZXZlbC1sb3cgYnl0ZSByZWdpc3RlciAqLworI2RlZmluZSBBRFA4ODcwX1BIMUxFVkgJMHg0MSAgLyogRmlyc3QgcGhvdG90cmFuc2lzdG9yIGFtYmllbnQgbGlnaHQgbGV2ZWwtaGlnaCBieXRlIHJlZ2lzdGVyICovCisjZGVmaW5lIEFEUDg4NzBfUEgyTEVWTAkweDQyICAvKiBTZWNvbmQgcGhvdG90cmFuc2lzdG9yIGFtYmllbnQgbGlnaHQgbGV2ZWwtbG93IGJ5dGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURQODg3MF9QSDJMRVZICTB4NDMgIC8qIFNlY29uZCBwaG90b3RyYW5zaXN0b3IgYW1iaWVudCBsaWdodCBsZXZlbC1oaWdoIGJ5dGUgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBBRFA4ODcwX01BTlVGSUQJCTB4MyAgLyogQW5hbG9nIERldmljZXMgQUQ4ODcwIE1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEICovCisjZGVmaW5lIEFEUDg4NzBfREVWSUQoeCkJKCh4KSAmIDB4RikKKyNkZWZpbmUgQURQODg3MF9NQU5JRCh4KQkoKHgpID4+IDQpCisKKy8qIE1EQ1IgRGV2aWNlIG1vZGUgYW5kIHN0YXR1cyAqLworI2RlZmluZSBEN0FMU0VOCQkJKDEgPDwgNykKKyNkZWZpbmUgSU5UX0NGRwkJCSgxIDw8IDYpCisjZGVmaW5lIE5TVEJZCQkJKDEgPDwgNSkKKyNkZWZpbmUgRElNX0VOCQkJKDEgPDwgNCkKKyNkZWZpbmUgR0RXTl9ESVMJCSgxIDw8IDMpCisjZGVmaW5lIFNJU19FTgkJCSgxIDw8IDIpCisjZGVmaW5lIENNUF9BVVRPRU4JCSgxIDw8IDEpCisjZGVmaW5lIEJMRU4JCQkoMSA8PCAwKQorCisvKiBBRFA4ODcwX0FMUzFfRU4gTWFpbiBBTFMgY29tcGFyYXRvciBsZXZlbCBlbmFibGUgKi8KKyNkZWZpbmUgTDVfRU4JCQkoMSA8PCAzKQorI2RlZmluZSBMNF9FTgkJCSgxIDw8IDIpCisjZGVmaW5lIEwzX0VOCQkJKDEgPDwgMSkKKyNkZWZpbmUgTDJfRU4JCQkoMSA8PCAwKQorCisjZGVmaW5lIENGR1JfQkxWX1NISUZUCQkzCisjZGVmaW5lIENGR1JfQkxWX01BU0sJCTB4NworI2RlZmluZSBBRFA4ODcwX0ZMQUdfTEVEX01BU0sJMHhGRgorCisjZGVmaW5lIEZBREVfVkFMKGluLCBvdXQpCSgoMHhGICYgKGluKSkgfCAoKDB4RiAmIChvdXQpKSA8PCA0KSkKKyNkZWZpbmUgQkxfQ0ZHUl9WQUwobGF3LCBibHYpCSgoKChibHYpICYgQ0ZHUl9CTFZfTUFTSykgPDwgQ0ZHUl9CTFZfU0hJRlQpIHwgKCgweDMgJiAobGF3KSkgPDwgMSkpCisjZGVmaW5lIEFMU19DTVBSX0NGR19WQUwoZmlsdCkJKCgweDcgJiAoZmlsdCkpIDw8IDEpCisKK3N0cnVjdCBhZHA4ODcwX2JsIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibDsKKwlzdHJ1Y3QgYWRwODg3MF9sZWQgKmxlZDsKKwlzdHJ1Y3QgYWRwODg3MF9iYWNrbGlnaHRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IG11dGV4IGxvY2s7CisJdW5zaWduZWQgbG9uZyBjYWNoZWRfZGF5bGlnaHRfbWF4OworCWludCBpZDsKKwlpbnQgcmV2aWQ7CisJaW50IGN1cnJlbnRfYnJpZ2h0bmVzczsKK307CisKK3N0cnVjdCBhZHA4ODcwX2xlZCB7CisJc3RydWN0IGxlZF9jbGFzc2RldgljZGV2OworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7CisJZW51bSBsZWRfYnJpZ2h0bmVzcwluZXdfYnJpZ2h0bmVzczsKKwlpbnQJCQlpZDsKKwlpbnQJCQlmbGFnczsKK307CisKK3N0YXRpYyBpbnQgYWRwODg3MF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCByZWcsIHVpbnQ4X3QgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCByZWFkaW5nIGF0IDB4JTAyeFxuIiwgcmVnKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkqdmFsID0gcmV0OworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgYWRwODg3MF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbCkKK3sKKwlpbnQgcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byB3cml0ZVxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkcDg4NzBfc2V0X2JpdHMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZywgdWludDhfdCBiaXRfbWFzaykKK3sKKwlzdHJ1Y3QgYWRwODg3MF9ibCAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXQgPSBhZHA4ODcwX3JlYWQoY2xpZW50LCByZWcsICZyZWdfdmFsKTsKKworCWlmICghcmV0ICYmICgocmVnX3ZhbCAmIGJpdF9tYXNrKSA9PSAwKSkgeworCQlyZWdfdmFsIHw9IGJpdF9tYXNrOworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgcmVnLCByZWdfdmFsKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWRwODg3MF9jbHJfYml0cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKQoreworCXN0cnVjdCBhZHA4ODcwX2JsICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdWludDhfdCByZWdfdmFsOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKworCXJldCA9IGFkcDg4NzBfcmVhZChjbGllbnQsIHJlZywgJnJlZ192YWwpOworCisJaWYgKCFyZXQgJiYgKHJlZ192YWwgJiBiaXRfbWFzaykpIHsKKwkJcmVnX3ZhbCAmPSB+Yml0X21hc2s7CisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCByZWcsIHJlZ192YWwpOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEluZGVwZW5kZW50IHNpbmsgLyBMRUQKKyAqLworI2lmIGRlZmluZWQoQURQODg3MF9VU0VfTEVEUykKK3N0YXRpYyB2b2lkIGFkcDg4NzBfbGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhZHA4ODcwX2xlZCAqbGVkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZHA4ODcwX2xlZCwgd29yayk7CisJYWRwODg3MF93cml0ZShsZWQtPmNsaWVudCwgQURQODg3MF9JU0MxICsgbGVkLT5pZCAtIDEsCisJCQkgbGVkLT5uZXdfYnJpZ2h0bmVzcyA+PiAxKTsKK30KKworc3RhdGljIHZvaWQgYWRwODg3MF9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJICAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYWRwODg3MF9sZWQgKmxlZDsKKworCWxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGFkcDg4NzBfbGVkLCBjZGV2KTsKKwlsZWQtPm5ld19icmlnaHRuZXNzID0gdmFsdWU7CisJLyoKKwkgKiBVc2Ugd29ya3F1ZXVlIGZvciBJTyBzaW5jZSBJMkMgb3BlcmF0aW9ucyBjYW4gc2xlZXAuCisJICovCisJc2NoZWR1bGVfd29yaygmbGVkLT53b3JrKTsKK30KKworc3RhdGljIGludCBhZHA4ODcwX2xlZF9zZXR1cChzdHJ1Y3QgYWRwODg3MF9sZWQgKmxlZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gbGVkLT5jbGllbnQ7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9JU0MxICsgbGVkLT5pZCAtIDEsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhZHA4ODcwX3NldF9iaXRzKGNsaWVudCwgQURQODg3MF9JU0NDLCAxIDw8IChsZWQtPmlkIC0gMSkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAobGVkLT5pZCA+IDQpCisJCXJldCA9IGFkcDg4NzBfc2V0X2JpdHMoY2xpZW50LCBBRFA4ODcwX0lTQ1QxLAorCQkJCShsZWQtPmZsYWdzICYgMHgzKSA8PCAoKGxlZC0+aWQgLSA1KSAqIDIpKTsKKwllbHNlCisJCXJldCA9IGFkcDg4NzBfc2V0X2JpdHMoY2xpZW50LCBBRFA4ODcwX0lTQ1QyLAorCQkJCShsZWQtPmZsYWdzICYgMHgzKSA8PCAoKGxlZC0+aWQgLSAxKSAqIDIpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkcDg4NzBfbGVkX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkcDg4NzBfYmFja2xpZ2h0X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkJY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYWRwODg3MF9ibCAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBhZHA4ODcwX2xlZCAqbGVkLCAqbGVkX2RhdDsKKwlzdHJ1Y3QgbGVkX2luZm8gKmN1cl9sZWQ7CisJaW50IHJldCwgaTsKKworCisJbGVkID0ga2NhbGxvYyhwZGF0YS0+bnVtX2xlZHMsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxlZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0lTQ0xBVywgcGRhdGEtPmxlZF9mYWRlX2xhdyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsKKworCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0lTQ1QxLAorCQkJKHBkYXRhLT5sZWRfb25fdGltZSAmIDB4MykgPDwgNik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsKKworCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0lTQ0YsCisJCQlGQURFX1ZBTChwZGF0YS0+bGVkX2ZhZGVfaW4sIHBkYXRhLT5sZWRfZmFkZV9vdXQpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fbGVkczsgKytpKSB7CisJCWN1cl9sZWQgPSAmcGRhdGEtPmxlZHNbaV07CisJCWxlZF9kYXQgPSAmbGVkW2ldOworCisJCWxlZF9kYXQtPmlkID0gY3VyX2xlZC0+ZmxhZ3MgJiBBRFA4ODcwX0ZMQUdfTEVEX01BU0s7CisKKwkJaWYgKGxlZF9kYXQtPmlkID4gNyB8fCBsZWRfZGF0LT5pZCA8IDEpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiSW52YWxpZCBMRUQgSUQgJWRcbiIsCisJCQkJbGVkX2RhdC0+aWQpOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAocGRhdGEtPmJsX2xlZF9hc3NpZ24gJiAoMSA8PCAobGVkX2RhdC0+aWQgLSAxKSkpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiTEVEICVkIHVzZWQgYnkgQmFja2xpZ2h0XG4iLAorCQkJCWxlZF9kYXQtPmlkKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJbGVkX2RhdC0+Y2Rldi5uYW1lID0gY3VyX2xlZC0+bmFtZTsKKwkJbGVkX2RhdC0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSBjdXJfbGVkLT5kZWZhdWx0X3RyaWdnZXI7CisJCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBhZHA4ODcwX2xlZF9zZXQ7CisJCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzcyA9IExFRF9PRkY7CisJCWxlZF9kYXQtPmZsYWdzID0gY3VyX2xlZC0+ZmxhZ3MgPj4gRkxBR19PRkZUX1NISUZUOworCQlsZWRfZGF0LT5jbGllbnQgPSBjbGllbnQ7CisJCWxlZF9kYXQtPm5ld19icmlnaHRuZXNzID0gTEVEX09GRjsKKwkJSU5JVF9XT1JLKCZsZWRfZGF0LT53b3JrLCBhZHA4ODcwX2xlZF93b3JrKTsKKworCQlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2LCAmbGVkX2RhdC0+Y2Rldik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIExFRCAlZFxuIiwKKwkJCQlsZWRfZGF0LT5pZCk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXJldCA9IGFkcDg4NzBfbGVkX3NldHVwKGxlZF9kYXQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byB3cml0ZVxuIik7CisJCQlpKys7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWRhdGEtPmxlZCA9IGxlZDsKKworCXJldHVybiAwOworCisgZXJyOgorCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IC0taSkgeworCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkW2ldLmNkZXYpOworCQljYW5jZWxfd29ya19zeW5jKCZsZWRbaV0ud29yayk7CisJfQorCisgZXJyX2ZyZWU6CisJa2ZyZWUobGVkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkcDg4NzBfbGVkX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBhZHA4ODcwX2JhY2tsaWdodF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCWNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX2xlZHM7IGkrKykgeworCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmZGF0YS0+bGVkW2ldLmNkZXYpOworCQljYW5jZWxfd29ya19zeW5jKCZkYXRhLT5sZWRbaV0ud29yayk7CisJfQorCisJa2ZyZWUoZGF0YS0+bGVkKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA4ODcwX2xlZF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHA4ODcwX2xlZF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGFkcDg4NzBfYmxfc2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCwgaW50IGJyaWdodG5lc3MpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkYXRhLT5wZGF0YS0+ZW5fYW1ibF9zZW5zKSB7CisJCWlmICgoYnJpZ2h0bmVzcyA+IDApICYmIChicmlnaHRuZXNzIDwgQURQODg3MF9NQVhfQlJJR0hUTkVTUykpIHsKKwkJCS8qIERpc2FibGUgQW1iaWVudCBMaWdodCBhdXRvIGFkanVzdCAqLworCQkJcmV0ID0gYWRwODg3MF9jbHJfYml0cyhjbGllbnQsIEFEUDg4NzBfTURDUiwKKwkJCQkJQ01QX0FVVE9FTik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YMSwgYnJpZ2h0bmVzcyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogTUFYX0JSSUdIVE5FU1MgLT4gRW5hYmxlIEFtYmllbnQgTGlnaHQgYXV0byBhZGp1c3QKKwkJCSAqIHJlc3RvcmUgZGF5bGlnaHQgbDEgc3lzZnMgYnJpZ2h0bmVzcworCQkJICovCisJCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YMSwKKwkJCQkJIGRhdGEtPmNhY2hlZF9kYXlsaWdodF9tYXgpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlyZXQgPSBhZHA4ODcwX3NldF9iaXRzKGNsaWVudCwgQURQODg3MF9NRENSLAorCQkJCQkgQ01QX0FVVE9FTik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YMSwgYnJpZ2h0bmVzcyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgJiYgYnJpZ2h0bmVzcyA9PSAwKQorCQlyZXQgPSBhZHA4ODcwX3NldF9iaXRzKGNsaWVudCwKKwkJCQlBRFA4ODcwX01EQ1IsIERJTV9FTik7CisJZWxzZSBpZiAoZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID09IDAgJiYgYnJpZ2h0bmVzcykKKwkJcmV0ID0gYWRwODg3MF9jbHJfYml0cyhjbGllbnQsCisJCQkJQURQODg3MF9NRENSLCBESU1fRU4pOworCisJaWYgKCFyZXQpCisJCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkcDg4NzBfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJaW50IGJyaWdodG5lc3MgPSBibC0+cHJvcHMuYnJpZ2h0bmVzczsKKwlpZiAoYmwtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCXJldHVybiBhZHA4ODcwX2JsX3NldChibCwgYnJpZ2h0bmVzcyk7Cit9CisKK3N0YXRpYyBpbnQgYWRwODg3MF9ibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisKKwlyZXR1cm4gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgYWRwODg3MF9ibF9vcHMgPSB7CisJLnVwZGF0ZV9zdGF0dXMJPSBhZHA4ODcwX2JsX3VwZGF0ZV9zdGF0dXMsCisJLmdldF9icmlnaHRuZXNzCT0gYWRwODg3MF9ibF9nZXRfYnJpZ2h0bmVzcywKK307CisKK3N0YXRpYyBpbnQgYWRwODg3MF9ibF9zZXR1cChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlzdHJ1Y3QgYWRwODg3MF9iYWNrbGlnaHRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkYXRhLT5wZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0JMU0VMLCB+cGRhdGEtPmJsX2xlZF9hc3NpZ24pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9QV01MRUQsIHBkYXRhLT5wd21fYXNzaWduKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYWRwODg3MF93cml0ZShjbGllbnQsIEFEUDg4NzBfQkxNWDEsIHBkYXRhLT5sMV9kYXlsaWdodF9tYXgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTERNMSwgcGRhdGEtPmwxX2RheWxpZ2h0X2RpbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwZGF0YS0+ZW5fYW1ibF9zZW5zKSB7CisJCWRhdGEtPmNhY2hlZF9kYXlsaWdodF9tYXggPSBwZGF0YS0+bDFfZGF5bGlnaHRfbWF4OworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YMiwKKwkJCQkJCXBkYXRhLT5sMl9icmlnaHRfbWF4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0JMRE0yLAorCQkJCQkJcGRhdGEtPmwyX2JyaWdodF9kaW0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YMywKKwkJCQkJCXBkYXRhLT5sM19vZmZpY2VfbWF4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0JMRE0zLAorCQkJCQkJcGRhdGEtPmwzX29mZmljZV9kaW0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YNCwKKwkJCQkJCXBkYXRhLT5sNF9pbmRvb3JfbWF4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gYWRwODg3MF93cml0ZShjbGllbnQsIEFEUDg4NzBfQkxETTQsCisJCQkJCQlwZGF0YS0+bDRfaW5kb3JfZGltKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gYWRwODg3MF93cml0ZShjbGllbnQsIEFEUDg4NzBfQkxNWDUsCisJCQkJCQlwZGF0YS0+bDVfZGFya19tYXgpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTERNNSwKKwkJCQkJCXBkYXRhLT5sNV9kYXJrX2RpbSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0wyVFJQLCBwZGF0YS0+bDJfdHJpcCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0wySFlTLCBwZGF0YS0+bDJfaHlzdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0wzVFJQLCBwZGF0YS0+bDNfdHJpcCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0wzSFlTLCBwZGF0YS0+bDNfaHlzdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0w0VFJQLCBwZGF0YS0+bDRfdHJpcCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0w0SFlTLCBwZGF0YS0+bDRfaHlzdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0w1VFJQLCBwZGF0YS0+bDVfdHJpcCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0w1SFlTLCBwZGF0YS0+bDVfaHlzdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0FMUzFfRU4sIEw1X0VOIHwgTDRfRU4gfAorCQkJCQkJTDNfRU4gfCBMMl9FTik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0NNUF9DVEwsCisJCQlBTFNfQ01QUl9DRkdfVkFMKHBkYXRhLT5hYm1sX2ZpbHQpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gYWRwODg3MF93cml0ZShjbGllbnQsIEFEUDg4NzBfQ0ZHUiwKKwkJCUJMX0NGR1JfVkFMKHBkYXRhLT5ibF9mYWRlX2xhdywgMCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTEZSLCBGQURFX1ZBTChwZGF0YS0+YmxfZmFkZV9pbiwKKwkJCXBkYXRhLT5ibF9mYWRlX291dCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJLyoKKwkgKiBBRFA4ODcwIFJldjAgcmVxdWlyZXMgR0RXTl9ESVMgYml0IHNldAorCSAqLworCisJcmV0ID0gYWRwODg3MF9zZXRfYml0cyhjbGllbnQsIEFEUDg4NzBfTURDUiwgQkxFTiB8IERJTV9FTiB8IE5TVEJZIHwKKwkJCShkYXRhLT5yZXZpZCA9PSAwID8gR0RXTl9ESVMgOiAwKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCByZWcpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyb3I7CisJdWludDhfdCByZWdfdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBhZHA4ODcwX3JlYWQoZGF0YS0+Y2xpZW50LCByZWcsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHJlZ192YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQkJIHNpemVfdCBjb3VudCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgYWRwODg3MF9ibCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJYWRwODg3MF93cml0ZShkYXRhLT5jbGllbnQsIHJlZywgdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2w1X2RhcmtfbWF4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA4ODcwX3Nob3coZGV2LCBidWYsIEFEUDg4NzBfQkxNWDUpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2w1X2RhcmtfbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBhZHA4ODcwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgQURQODg3MF9CTE1YNSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobDVfZGFya19tYXgsIDA2NjQsIGFkcDg4NzBfYmxfbDVfZGFya19tYXhfc2hvdywKKwkJCWFkcDg4NzBfYmxfbDVfZGFya19tYXhfc3RvcmUpOworCisKK3N0YXRpYyBzc2l6ZV90IGFkcDg4NzBfYmxfbDRfaW5kb29yX21heF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYWRwODg3MF9zaG93KGRldiwgYnVmLCBBRFA4ODcwX0JMTVg0KTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sNF9pbmRvb3JfbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBhZHA4ODcwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgQURQODg3MF9CTE1YNCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobDRfaW5kb29yX21heCwgMDY2NCwgYWRwODg3MF9ibF9sNF9pbmRvb3JfbWF4X3Nob3csCisJCQlhZHA4ODcwX2JsX2w0X2luZG9vcl9tYXhfc3RvcmUpOworCisKK3N0YXRpYyBzc2l6ZV90IGFkcDg4NzBfYmxfbDNfb2ZmaWNlX21heF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDg4NzBfc2hvdyhkZXYsIGJ1ZiwgQURQODg3MF9CTE1YMyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDg4NzBfYmxfbDNfb2ZmaWNlX21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwODg3MF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIEFEUDg4NzBfQkxNWDMpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobDNfb2ZmaWNlX21heCwgMDY2NCwgYWRwODg3MF9ibF9sM19vZmZpY2VfbWF4X3Nob3csCisJCQlhZHA4ODcwX2JsX2wzX29mZmljZV9tYXhfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2wyX2JyaWdodF9tYXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDg4NzBfc2hvdyhkZXYsIGJ1ZiwgQURQODg3MF9CTE1YMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDg4NzBfYmxfbDJfYnJpZ2h0X21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwODg3MF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIEFEUDg4NzBfQkxNWDIpOworfQorc3RhdGljIERFVklDRV9BVFRSKGwyX2JyaWdodF9tYXgsIDA2NjQsIGFkcDg4NzBfYmxfbDJfYnJpZ2h0X21heF9zaG93LAorCQkJYWRwODg3MF9ibF9sMl9icmlnaHRfbWF4X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sMV9kYXlsaWdodF9tYXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA4ODcwX3Nob3coZGV2LCBidWYsIEFEUDg4NzBfQkxNWDEpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2wxX2RheWxpZ2h0X21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWRwODg3MF9ibCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBhZHA4ODcwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgQURQODg3MF9CTE1YMSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobDFfZGF5bGlnaHRfbWF4LCAwNjY0LCBhZHA4ODcwX2JsX2wxX2RheWxpZ2h0X21heF9zaG93LAorCQkJYWRwODg3MF9ibF9sMV9kYXlsaWdodF9tYXhfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2w1X2RhcmtfZGltX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYWRwODg3MF9zaG93KGRldiwgYnVmLCBBRFA4ODcwX0JMRE01KTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sNV9kYXJrX2RpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBhZHA4ODcwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgQURQODg3MF9CTERNNSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobDVfZGFya19kaW0sIDA2NjQsIGFkcDg4NzBfYmxfbDVfZGFya19kaW1fc2hvdywKKwkJCWFkcDg4NzBfYmxfbDVfZGFya19kaW1fc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2w0X2luZG9vcl9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA4ODcwX3Nob3coZGV2LCBidWYsIEFEUDg4NzBfQkxETTQpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2w0X2luZG9vcl9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwODg3MF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIEFEUDg4NzBfQkxETTQpOworfQorc3RhdGljIERFVklDRV9BVFRSKGw0X2luZG9vcl9kaW0sIDA2NjQsIGFkcDg4NzBfYmxfbDRfaW5kb29yX2RpbV9zaG93LAorCQkJYWRwODg3MF9ibF9sNF9pbmRvb3JfZGltX3N0b3JlKTsKKworCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2wzX29mZmljZV9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA4ODcwX3Nob3coZGV2LCBidWYsIEFEUDg4NzBfQkxETTMpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2wzX29mZmljZV9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwODg3MF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIEFEUDg4NzBfQkxETTMpOworfQorc3RhdGljIERFVklDRV9BVFRSKGwzX29mZmljZV9kaW0sIDA2NjQsIGFkcDg4NzBfYmxfbDNfb2ZmaWNlX2RpbV9zaG93LAorCQkJYWRwODg3MF9ibF9sM19vZmZpY2VfZGltX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sMl9icmlnaHRfZGltX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYWRwODg3MF9zaG93KGRldiwgYnVmLCBBRFA4ODcwX0JMRE0yKTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sMl9icmlnaHRfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFkcDg4NzBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBBRFA4ODcwX0JMRE0yKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihsMl9icmlnaHRfZGltLCAwNjY0LCBhZHA4ODcwX2JsX2wyX2JyaWdodF9kaW1fc2hvdywKKwkJCWFkcDg4NzBfYmxfbDJfYnJpZ2h0X2RpbV9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFkcDg4NzBfYmxfbDFfZGF5bGlnaHRfZGltX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYWRwODg3MF9zaG93KGRldiwgYnVmLCBBRFA4ODcwX0JMRE0xKTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sMV9kYXlsaWdodF9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwODg3MF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIEFEUDg4NzBfQkxETTEpOworfQorc3RhdGljIERFVklDRV9BVFRSKGwxX2RheWxpZ2h0X2RpbSwgMDY2NCwgYWRwODg3MF9ibF9sMV9kYXlsaWdodF9kaW1fc2hvdywKKwkJCWFkcDg4NzBfYmxfbDFfZGF5bGlnaHRfZGltX3N0b3JlKTsKKworI2lmZGVmIEFEUDg4NzBfRVhUX0ZFQVRVUkVTCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2FtYmllbnRfbGlnaHRfbGV2ZWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhZHA4ODcwX2JsICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGVycm9yOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwl1aW50MTZfdCByZXRfdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBhZHA4ODcwX3JlYWQoZGF0YS0+Y2xpZW50LCBBRFA4ODcwX1BIMUxFVkwsICZyZWdfdmFsKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJCXJldHVybiBlcnJvcjsKKwl9CisJcmV0X3ZhbCA9IHJlZ192YWw7CisJZXJyb3IgPSBhZHA4ODcwX3JlYWQoZGF0YS0+Y2xpZW50LCBBRFA4ODcwX1BIMUxFVkgsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJLyogUmV0dXJuIDEzLWJpdCBjb252ZXJzaW9uIHZhbHVlIGZvciB0aGUgZmlyc3QgbGlnaHQgc2Vuc29yICovCisJcmV0X3ZhbCArPSAocmVnX3ZhbCAmIDB4MUYpIDw8IDg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcmV0X3ZhbCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoYW1iaWVudF9saWdodF9sZXZlbCwgMDQ0NCwKKwkJYWRwODg3MF9ibF9hbWJpZW50X2xpZ2h0X2xldmVsX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2FtYmllbnRfbGlnaHRfem9uZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyb3I7CisJdWludDhfdCByZWdfdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBhZHA4ODcwX3JlYWQoZGF0YS0+Y2xpZW50LCBBRFA4ODcwX0NGR1IsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsCisJCSgocmVnX3ZhbCA+PiBDRkdSX0JMVl9TSElGVCkgJiBDRkdSX0JMVl9NQVNLKSArIDEpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2FtYmllbnRfbGlnaHRfem9uZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhZHA4ODcwX2JsICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdWludDhfdCByZWdfdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHZhbCA9PSAwKSB7CisJCS8qIEVuYWJsZSBhdXRvbWF0aWMgYW1iaWVudCBsaWdodCBzZW5zaW5nICovCisJCWFkcDg4NzBfc2V0X2JpdHMoZGF0YS0+Y2xpZW50LCBBRFA4ODcwX01EQ1IsIENNUF9BVVRPRU4pOworCX0gZWxzZSBpZiAoKHZhbCA+IDApICYmICh2YWwgPCA2KSkgeworCQkvKiBEaXNhYmxlIGF1dG9tYXRpYyBhbWJpZW50IGxpZ2h0IHNlbnNpbmcgKi8KKwkJYWRwODg3MF9jbHJfYml0cyhkYXRhLT5jbGllbnQsIEFEUDg4NzBfTURDUiwgQ01QX0FVVE9FTik7CisKKwkJLyogU2V0IHVzZXIgc3VwcGxpZWQgYW1iaWVudCBsaWdodCB6b25lICovCisJCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCQlhZHA4ODcwX3JlYWQoZGF0YS0+Y2xpZW50LCBBRFA4ODcwX0NGR1IsICZyZWdfdmFsKTsKKwkJcmVnX3ZhbCAmPSB+KENGR1JfQkxWX01BU0sgPDwgQ0ZHUl9CTFZfU0hJRlQpOworCQlyZWdfdmFsIHw9ICh2YWwgLSAxKSA8PCBDRkdSX0JMVl9TSElGVDsKKwkJYWRwODg3MF93cml0ZShkYXRhLT5jbGllbnQsIEFEUDg4NzBfQ0ZHUiwgcmVnX3ZhbCk7CisJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKGFtYmllbnRfbGlnaHRfem9uZSwgMDY2NCwKKwkJYWRwODg3MF9ibF9hbWJpZW50X2xpZ2h0X3pvbmVfc2hvdywKKwkJYWRwODg3MF9ibF9hbWJpZW50X2xpZ2h0X3pvbmVfc3RvcmUpOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHA4ODcwX2JsX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfbDVfZGFya19tYXguYXR0ciwKKwkmZGV2X2F0dHJfbDVfZGFya19kaW0uYXR0ciwKKwkmZGV2X2F0dHJfbDRfaW5kb29yX21heC5hdHRyLAorCSZkZXZfYXR0cl9sNF9pbmRvb3JfZGltLmF0dHIsCisJJmRldl9hdHRyX2wzX29mZmljZV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfbDNfb2ZmaWNlX2RpbS5hdHRyLAorCSZkZXZfYXR0cl9sMl9icmlnaHRfbWF4LmF0dHIsCisJJmRldl9hdHRyX2wyX2JyaWdodF9kaW0uYXR0ciwKKwkmZGV2X2F0dHJfbDFfZGF5bGlnaHRfbWF4LmF0dHIsCisJJmRldl9hdHRyX2wxX2RheWxpZ2h0X2RpbS5hdHRyLAorI2lmZGVmIEFEUDg4NzBfRVhUX0ZFQVRVUkVTCisJJmRldl9hdHRyX2FtYmllbnRfbGlnaHRfbGV2ZWwuYXR0ciwKKwkmZGV2X2F0dHJfYW1iaWVudF9saWdodF96b25lLmF0dHIsCisjZW5kaWYKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHA4ODcwX2JsX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gYWRwODg3MF9ibF9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYWRwODg3MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibDsKKwlzdHJ1Y3QgYWRwODg3MF9ibCAqZGF0YTsKKwlzdHJ1Y3QgYWRwODg3MF9iYWNrbGlnaHRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCQljbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwlpbnQgcmV0OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQkJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJTTUJVUyBCeXRlIERhdGEgbm90IFN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhP1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGFkcDg4NzBfcmVhZChjbGllbnQsIEFEUDg4NzBfTUZEVklELCAmcmVnX3ZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKEFEUDg4NzBfTUFOSUQocmVnX3ZhbCkgIT0gQURQODg3MF9NQU5VRklEKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHByb2JlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhLT5yZXZpZCA9IEFEUDg4NzBfREVWSUQocmVnX3ZhbCk7CisJZGF0YS0+Y2xpZW50ID0gY2xpZW50OworCWRhdGEtPnBkYXRhID0gcGRhdGE7CisJZGF0YS0+aWQgPSBpZC0+ZHJpdmVyX2RhdGE7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCisJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHByb3BzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CisJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBwcm9wcy5icmlnaHRuZXNzID0gQURQODg3MF9NQVhfQlJJR0hUTkVTUzsKKwlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoZGV2X2RyaXZlcl9zdHJpbmcoJmNsaWVudC0+ZGV2KSwKKwkJCSZjbGllbnQtPmRldiwgZGF0YSwgJmFkcDg4NzBfYmxfb3BzLCAmcHJvcHMpOworCWlmIChJU19FUlIoYmwpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7CisJCXJldCA9IFBUUl9FUlIoYmwpOworCQlnb3RvIG91dDI7CisJfQorCisJZGF0YS0+YmwgPSBibDsKKworCWlmIChwZGF0YS0+ZW5fYW1ibF9zZW5zKQorCQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmJsLT5kZXYua29iaiwKKwkJCSZhZHA4ODcwX2JsX2F0dHJfZ3JvdXApOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBzeXNmc1xuIik7CisJCWdvdG8gb3V0MTsKKwl9CisKKwlyZXQgPSBhZHA4ODcwX2JsX3NldHVwKGJsKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJsKTsKKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIlJldi4lZCBCYWNrbGlnaHRcbiIsIGRhdGEtPnJldmlkKTsKKworCWlmIChwZGF0YS0+bnVtX2xlZHMpCisJCWFkcDg4NzBfbGVkX3Byb2JlKGNsaWVudCk7CisKKwlyZXR1cm4gMDsKKworb3V0OgorCWlmIChkYXRhLT5wZGF0YS0+ZW5fYW1ibF9zZW5zKQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRhdGEtPmJsLT5kZXYua29iaiwKKwkJCSZhZHA4ODcwX2JsX2F0dHJfZ3JvdXApOworb3V0MToKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmwpOworb3V0MjoKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkcDg4NzBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWFkcDg4NzBfY2xyX2JpdHMoY2xpZW50LCBBRFA4ODcwX01EQ1IsIE5TVEJZKTsKKworCWlmIChkYXRhLT5sZWQpCisJCWFkcDg4NzBfbGVkX3JlbW92ZShjbGllbnQpOworCisJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGF0YS0+YmwtPmRldi5rb2JqLAorCQkJJmFkcDg4NzBfYmxfYXR0cl9ncm91cCk7CisKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+YmwpOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWRwODg3MF9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlhZHA4ODcwX2Nscl9iaXRzKGNsaWVudCwgQURQODg3MF9NRENSLCBOU1RCWSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHA4ODcwX2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlhZHA4ODcwX3NldF9iaXRzKGNsaWVudCwgQURQODg3MF9NRENSLCBOU1RCWSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGFkcDg4NzBfaTJjX3N1c3BlbmQgTlVMTAorI2RlZmluZSBhZHA4ODcwX2kyY19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZHA4ODcwX2lkW10gPSB7CisJeyAiYWRwODg3MCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWRwODg3MF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZHA4ODcwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAorCX0sCisJLnByb2JlICAgID0gYWRwODg3MF9wcm9iZSwKKwkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChhZHA4ODcwX3JlbW92ZSksCisJLnN1c3BlbmQgPSBhZHA4ODcwX2kyY19zdXNwZW5kLAorCS5yZXN1bWUgID0gYWRwODg3MF9pMmNfcmVzdW1lLAorCS5pZF90YWJsZSA9IGFkcDg4NzBfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZHA4ODcwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmFkcDg4NzBfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFkcDg4NzBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHA4ODcwX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmYWRwODg3MF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWRwODg3MF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQURQODg3MCBCYWNrbGlnaHQgZHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmFkcDg4NzAtYmFja2xpZ2h0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMgYi9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMKaW5kZXggNDdjMjFmYi4uYmVhNTNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmY1MzctbHEwMzUuYwpAQCAtNzg5LDYgKzc4OSw3IEBACiAJaTJjX2FkZF9kcml2ZXIoJmFkNTI4MF9kcml2ZXIpOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHByb3BzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBNQVhfQlJJR0hFTkVTUzsKIAlibF9kZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJiZjUzNy1ibCIsIE5VTEwsIE5VTEwsCiAJCQkJCSAgICZiZmluX2xxMDM1ZmJfYmxfb3BzLCAmcHJvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMKaW5kZXggZWJkYTY4Ny4uMzc3ZGRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5jCkBAIC0xMTAxLDEyICsxMTAxLDEwIEBACiAKIAl2aWRlb21lbW9yeXNpemUgPSByb3VuZHVwKChkcHl3KmRweWgpLCBQQUdFX1NJWkUpOwogCi0JdmlkZW9tZW1vcnkgPSB2bWFsbG9jKHZpZGVvbWVtb3J5c2l6ZSk7CisJdmlkZW9tZW1vcnkgPSB2emFsbG9jKHZpZGVvbWVtb3J5c2l6ZSk7CiAJaWYgKCF2aWRlb21lbW9yeSkKIAkJZ290byBlcnJfZmJfcmVsOwogCi0JbWVtc2V0KHZpZGVvbWVtb3J5LCAwLCB2aWRlb21lbW9yeXNpemUpOwotCiAJaW5mby0+c2NyZWVuX2Jhc2UgPSAoY2hhciAqKXZpZGVvbWVtb3J5OwogCWluZm8tPmZib3BzID0gJmJyb2Fkc2hlZXRmYl9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZWZpZmIuYyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwppbmRleCBmYjIwNTg0Li43ODQxMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lZmlmYi5jCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CiAKK3N0YXRpYyBib29sIHJlcXVlc3RfbWVtX3N1Y2NlZWRlZCA9IGZhbHNlOworCiBzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGVmaWZiX2RlZmluZWQgX19kZXZpbml0ZGF0YSA9IHsKIAkuYWN0aXZhdGUJCT0gRkJfQUNUSVZBVEVfTk9XLAogCS5oZWlnaHQJCQk9IC0xLApAQCAtMjgxLDcgKzI4Myw5IEBACiB7CiAJaWYgKGluZm8tPnNjcmVlbl9iYXNlKQogCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uYmFzZSwgaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSk7CisJaWYgKHJlcXVlc3RfbWVtX3N1Y2NlZWRlZCkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLmJhc2UsCisJCQkJICAgaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSk7CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIH0KIApAQCAtMzI2LDE0ICszMzAsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZWZpZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgZWZpZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCBlcnI7CiAJdW5zaWduZWQgaW50IHNpemVfdm1vZGU7CiAJdW5zaWduZWQgaW50IHNpemVfcmVtYXA7CiAJdW5zaWduZWQgaW50IHNpemVfdG90YWw7Ci0JaW50IHJlcXVlc3Rfc3VjY2VlZGVkID0gMDsKIAogCWlmICghc2NyZWVuX2luZm8ubGZiX2RlcHRoKQogCQlzY3JlZW5faW5mby5sZmJfZGVwdGggPSAzMjsKQEAgLTM4Nyw3ICszOTAsNyBAQAogCWVmaWZiX2ZpeC5zbWVtX2xlbiA9IHNpemVfcmVtYXA7CiAKIAlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBzaXplX3JlbWFwLCAiZWZpZmIiKSkgewotCQlyZXF1ZXN0X3N1Y2NlZWRlZCA9IDE7CisJCXJlcXVlc3RfbWVtX3N1Y2NlZWRlZCA9IHRydWU7CiAJfSBlbHNlIHsKIAkJLyogV2UgY2Fubm90IG1ha2UgdGhpcyBmYXRhbC4gU29tZXRpbWVzIHRoaXMgY29tZXMgZnJvbSBtYWdpYwogCQkgICBzcGFjZXMgb3VyIHJlc291cmNlIGhhbmRsZXJzIHNpbXBseSBkb24ndCBrbm93IGFib3V0ICovCkBAIC00MTMsNyArNDE2LDcgQEAKIAlpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5iYXNlID0gZWZpZmJfZml4LnNtZW1fc3RhcnQ7CiAJaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSA9IHNpemVfcmVtYXA7CiAKLQlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoZWZpZmJfZml4LnNtZW1fc3RhcnQsIGVmaWZiX2ZpeC5zbWVtX2xlbik7CisJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX3djKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBlZmlmYl9maXguc21lbV9sZW4pOwogCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlZmlmYjogYWJvcnQsIGNhbm5vdCBpb3JlbWFwIHZpZGVvIG1lbW9yeSAiCiAJCQkJIjB4JXggQCAweCVseFxuIiwKQEAgLTQ5MSwxMyArNDk0LDEyIEBACiBlcnJfcmVsZWFzZV9mYjoKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogZXJyX3JlbGVhc2VfbWVtOgotCWlmIChyZXF1ZXN0X3N1Y2NlZWRlZCkKKwlpZiAocmVxdWVzdF9tZW1fc3VjY2VlZGVkKQogCQlyZWxlYXNlX21lbV9yZWdpb24oZWZpZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVmaWZiX2RyaXZlciA9IHsKLQkucHJvYmUJPSBlZmlmYl9wcm9iZSwKIAkuZHJpdmVyCT0gewogCQkubmFtZQk9ICJlZmlmYiIsCiAJfSwKQEAgLTUyOCwxMyArNTMwLDIxIEBACiAJaWYgKCFzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmVmaWZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlZmlmYl9kZXZpY2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlpZiAoIXJldCkgewotCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVmaWZiX2RldmljZSk7Ci0JCWlmIChyZXQpCi0JCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZWZpZmJfZHJpdmVyKTsKKwkvKgorCSAqIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uLiAgV2Ugd2lsbCBpbnRlcmZlcmUKKwkgKiB3aXRoIGEgcmVhbCBkcml2ZXIgaWYgd2UgZ2V0IHJlcHJvYmVkLCBzbyBkb24ndCBhbGxvdworCSAqIGl0LgorCSAqLworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmZWZpZmJfZHJpdmVyLCBlZmlmYl9wcm9iZSk7CisJaWYgKHJldCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZWZpZmJfZGV2aWNlKTsKKwkJcmV0dXJuIHJldDsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogbW9kdWxlX2luaXQoZWZpZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2hlY3ViYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2hlY3ViYWZiLmMKaW5kZXggMWI5NDY0My4uZmJlZjE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9oZWN1YmFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaGVjdWJhZmIuYwpAQCAtMjMxLDExICsyMzEsMTAgQEAKIAogCXZpZGVvbWVtb3J5c2l6ZSA9IChEUFlfVypEUFlfSCkvODsKIAotCWlmICghKHZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpKSkKKwl2aWRlb21lbW9yeSA9IHZ6YWxsb2ModmlkZW9tZW1vcnlzaXplKTsKKwlpZiAoIXZpZGVvbWVtb3J5KQogCQlyZXR1cm4gcmV0dmFsOwogCi0JbWVtc2V0KHZpZGVvbWVtb3J5LCAwLCB2aWRlb21lbW9yeXNpemUpOwotCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgaGVjdWJhZmJfcGFyKSwgJmRldi0+ZGV2KTsKIAlpZiAoIWluZm8pCiAJCWdvdG8gZXJyX2ZiYWxsb2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKaW5kZXggZDJjY2ZkNi4uZjEzNWRiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbXhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwpAQCAtODU2LDEwICs4NTYsMTAgQEAKIAkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKCZwZGV2LT5kZXYsZmJpLT5tYXBfc2l6ZSxmYmktPm1hcF9jcHUsCiAJCQlmYmktPm1hcF9kbWEpOwogZmFpbGVkX21hcDoKLQljbGtfcHV0KGZiaS0+Y2xrKTsKLWZhaWxlZF9nZXRjbG9jazoKIAlpb3VubWFwKGZiaS0+cmVncyk7CiBmYWlsZWRfaW9yZW1hcDoKKwljbGtfcHV0KGZiaS0+Y2xrKTsKK2ZhaWxlZF9nZXRjbG9jazoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGZhaWxlZF9yZXE6CiAJa2ZyZWUoaW5mby0+cHNldWRvX3BhbGV0dGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jIGIvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jCmluZGV4IGVkNjRlZGYuLjk3ZDQ1ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMKQEAgLTYyOCwxMiArNjI4LDEwIEBACiAJLyogd2UgbmVlZCB0byBhZGQgYSBzcGFyZSBwYWdlIGJlY2F1c2Ugb3VyIGNzdW0gY2FjaGluZyBzY2hlbWUgd2Fsa3MKIAkgKiB0byB0aGUgZW5kIG9mIHRoZSBwYWdlICovCiAJdmlkZW9tZW1vcnlzaXplID0gUEFHRV9TSVpFICsgKGZ3ICogZmgpOwotCXZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpOworCXZpZGVvbWVtb3J5ID0gdnphbGxvYyh2aWRlb21lbW9yeXNpemUpOwogCWlmICghdmlkZW9tZW1vcnkpCiAJCWdvdG8gZXJyX2ZiX3JlbDsKIAotCW1lbXNldCh2aWRlb21lbW9yeSwgMCwgdmlkZW9tZW1vcnlzaXplKTsKLQogCWluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgX19mb3JjZSBfX2lvbWVtICopdmlkZW9tZW1vcnk7CiAJaW5mby0+ZmJvcHMgPSAmbWV0cm9ub21lZmJfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jIGIvZHJpdmVycy92aWRlby9tb2RlZGIuYwppbmRleCA0OGMzZWE4Li5jYjE3NWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKQEAgLTExMjgsMyArMTEyOCw0IEBACiBFWFBPUlRfU1lNQk9MKGZiX2ZpbmRfbmVhcmVzdF9tb2RlKTsKIEVYUE9SVF9TWU1CT0woZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KTsKIEVYUE9SVF9TWU1CT0woZmJfZmluZF9tb2RlKTsKK0VYUE9SVF9TWU1CT0woZmJfZmluZF9tb2RlX2N2dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMKaW5kZXggMzVmNjFkZC4uYmI5NWVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGExNjhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYwpAQCAtNjIzLDE5ICs2MjMsMjEgQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBJTyBtZW1vcnkgZGVmaW5lZFxuIik7Ci0JCXJldHVybiAtRU5PRU5UOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGZhaWxlZF9wdXRfY2xrOwogCX0KIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gSVJRIGRlZmluZWRcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBmYWlsZWRfcHV0X2NsazsKIAl9CiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBweGExNjhmYl9pbmZvKSwgJnBkZXYtPmRldik7CiAJaWYgKGluZm8gPT0gTlVMTCkgewotCQljbGtfcHV0KGNsayk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZF9wdXRfY2xrOwogCX0KIAogCS8qIEluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCkBAIC02NzEsNyArNjczLDcgQEAKIAlmYmktPnJlZ19iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKGZiaS0+cmVnX2Jhc2UgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxlZDsKKwkJZ290byBmYWlsZWRfZnJlZV9pbmZvOwogCX0KIAogCS8qCkBAIC02ODMsNyArNjg1LDcgQEAKIAkJCQkJCSZmYmktPmZiX3N0YXJ0X2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGluZm8tPnNjcmVlbl9iYXNlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gZmFpbGVkX2ZyZWVfaW5mbzsKIAl9CiAKIAlpbmZvLT5maXguc21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWZiaS0+ZmJfc3RhcnRfZG1hOwpAQCAtNzcyLDggKzc3NCw5IEBACiBmYWlsZWRfZnJlZV9mYm1lbToKIAlkbWFfZnJlZV9jb2hlcmVudChmYmktPmRldiwgaW5mby0+Zml4LnNtZW1fbGVuLAogCQkJaW5mby0+c2NyZWVuX2Jhc2UsIGZiaS0+ZmJfc3RhcnRfZG1hKTsKLWZhaWxlZDoKK2ZhaWxlZF9mcmVlX2luZm86CiAJa2ZyZWUoaW5mbyk7CitmYWlsZWRfcHV0X2NsazoKIAljbGtfcHV0KGNsayk7CiAKIAlkZXZfZXJyKCZwZGV2LT5kZXYsICJmcmFtZSBidWZmZXIgZGV2aWNlIGluaXQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jIGIvZHJpdmVycy92aWRlby9zM2MtZmIuYwppbmRleCAwMzUyYWZhLi40YWVjZjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNjLWZiLmMKQEAgLTIzNSwxMyArMjM1LDEyIEBACiAJCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHMzY19mYl93aW4gKndpbiA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgczNjX2ZiX3BkX3dpbiAqd2luZGF0YSA9IHdpbi0+d2luZGF0YTsKIAlzdHJ1Y3QgczNjX2ZiICpzZmIgPSB3aW4tPnBhcmVudDsKIAogCWRldl9kYmcoc2ZiLT5kZXYsICJjaGVja2luZyBwYXJhbWV0ZXJzXG4iKTsKIAotCXZhci0+eHJlc192aXJ0dWFsID0gbWF4KCh1bnNpZ25lZCBpbnQpd2luZGF0YS0+dmlydHVhbF94LCB2YXItPnhyZXMpOwotCXZhci0+eXJlc192aXJ0dWFsID0gbWF4KCh1bnNpZ25lZCBpbnQpd2luZGF0YS0+dmlydHVhbF95LCB2YXItPnlyZXMpOworCXZhci0+eHJlc192aXJ0dWFsID0gbWF4KHZhci0+eHJlc192aXJ0dWFsLCB2YXItPnhyZXMpOworCXZhci0+eXJlc192aXJ0dWFsID0gbWF4KHZhci0+eXJlc192aXJ0dWFsLCB2YXItPnlyZXMpOwogCiAJaWYgKCFzM2NfZmJfdmFsaWRhdGVfd2luX2JwcCh3aW4sIHZhci0+Yml0c19wZXJfcGl4ZWwpKSB7CiAJCWRldl9kYmcoc2ZiLT5kZXYsICJ3aW4gJWQ6IHVuc3VwcG9ydGVkIGJwcCAlZFxuIiwKQEAgLTU1OCw2ICs1NTcsMTMgQEAKIAl2aWRvc2Rfc2V0X2FscGhhKHdpbiwgYWxwaGEpOwogCXZpZG9zZF9zZXRfc2l6ZSh3aW4sIGRhdGEpOwogCisJLyogRW5hYmxlIERNQSBjaGFubmVsIGZvciB0aGlzIHdpbmRvdyAqLworCWlmIChzZmItPnZhcmlhbnQuaGFzX3NoYWRvd2NvbikgeworCQlkYXRhID0gcmVhZGwoc2ZiLT5yZWdzICsgU0hBRE9XQ09OKTsKKwkJZGF0YSB8PSBTSEFET1dDT05fQ0h4X0VOQUJMRSh3aW5fbm8pOworCQl3cml0ZWwoZGF0YSwgc2ZiLT5yZWdzICsgU0hBRE9XQ09OKTsKKwl9CisKIAlkYXRhID0gV0lOQ09OeF9FTldJTjsKIAogCS8qIG5vdGUsIHNpbmNlIHdlIGhhdmUgdG8gcm91bmQgdXAgdGhlIGJpdHMtcGVyLXBpeGVsLCB3ZSBlbmQgdXAKQEAgLTYzNywxMyArNjQzLDYgQEAKIAl3cml0ZWwoZGF0YSwgcmVncyArIHNmYi0+dmFyaWFudC53aW5jb24gKyAod2luX25vICogNCkpOwogCXdyaXRlbCgweDAsIHJlZ3MgKyBzZmItPnZhcmlhbnQud2lubWFwICsgKHdpbl9ubyAqIDQpKTsKIAotCS8qIEVuYWJsZSBETUEgY2hhbm5lbCBmb3IgdGhpcyB3aW5kb3cgKi8KLQlpZiAoc2ZiLT52YXJpYW50Lmhhc19zaGFkb3djb24pIHsKLQkJZGF0YSA9IHJlYWRsKHNmYi0+cmVncyArIFNIQURPV0NPTik7Ci0JCWRhdGEgfD0gU0hBRE9XQ09OX0NIeF9FTkFCTEUod2luX25vKTsKLQkJd3JpdGVsKGRhdGEsIHNmYi0+cmVncyArIFNIQURPV0NPTik7Ci0JfQotCiAJc2hhZG93X3Byb3RlY3Rfd2luKHdpbiwgMCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE0ODcsMTEgKzE0ODYsMTAgQEAKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihzZmItPnJlZ3NfcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShzZmItPnJlZ3NfcmVzKSk7CiAKLQlrZnJlZShzZmIpOwotCiAJcG1fcnVudGltZV9wdXRfc3luYyhzZmItPmRldik7CiAJcG1fcnVudGltZV9kaXNhYmxlKHNmYi0+ZGV2KTsKIAorCWtmcmVlKHNmYik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKaW5kZXggM2I3ZjJmNS4uNGRlNTQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKQEAgLTIyMzcsNiArMjIzNywyMiBAQAogCQkJCSAmaW5mby0+bW9kZWxpc3QpOwogI2VuZGlmCiAJaW5mby0+dmFyID0gc2F2YWdlZmJfdmFyODAweDYwMHg4OworCS8qIGlmIGEgcGFuZWwgd2FzIGRldGVjdGVkLCBkZWZhdWx0IHRvIGEgQ1ZUIG1vZGUgaW5zdGVhZCAqLworCWlmIChwYXItPlNhdmFnZVBhbmVsV2lkdGgpIHsKKwkJc3RydWN0IGZiX3ZpZGVvbW9kZSBjdnRfbW9kZTsKKworCQltZW1zZXQoJmN2dF9tb2RlLCAwLCBzaXplb2YoY3Z0X21vZGUpKTsKKwkJY3Z0X21vZGUueHJlcyA9IHBhci0+U2F2YWdlUGFuZWxXaWR0aDsKKwkJY3Z0X21vZGUueXJlcyA9IHBhci0+U2F2YWdlUGFuZWxIZWlnaHQ7CisJCWN2dF9tb2RlLnJlZnJlc2ggPSA2MDsKKwkJLyogRklYTUU6IGlmIHdlIGtub3cgdGhlcmUgaXMgb25seSB0aGUgcGFuZWwKKwkJICogd2UgY2FuIGVuYWJsZSByZWR1Y2VkIGJsYW5raW5nIGFzIHdlbGwgKi8KKwkJaWYgKGZiX2ZpbmRfbW9kZV9jdnQoJmN2dF9tb2RlLCAwLCAwKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIENWVCBtb2RlIGZvdW5kIGZvciBwYW5lbFxuIik7CisJCWVsc2UgaWYgKGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBOVUxMLCBOVUxMLCAwLAorCQkJCSAgICAgICZjdnRfbW9kZSwgMCkgIT0gMykKKwkJCWluZm8tPnZhciA9IHNhdmFnZWZiX3ZhcjgwMHg2MDB4ODsKKwl9CiAKIAlpZiAobW9kZV9vcHRpb24pIHsKIAkJZmJfZmluZF9tb2RlKCZpbmZvLT52YXIsIGluZm8sIG1vZGVfb3B0aW9uLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jCmluZGV4IDZhZTQwYjYuLjdkNTRlMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2hkbWkuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmMKQEAgLTExMjcsMjMgKzExMjcsMTYgQEAKIAkJc3RydWN0IGZiX2luZm8gKmluZm8gPSBoZG1pLT5pbmZvOwogCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gMCwgaGRtaV9yYXRlOwogCi0JCS8qIEEgZGV2aWNlIGhhcyBiZWVuIHBsdWdnZWQgaW4gKi8KLQkJcG1fcnVudGltZV9nZXRfc3luYyhoZG1pLT5kZXYpOwotCiAJCXJldCA9IHNoX2hkbWlfcmVhZF9lZGlkKGhkbWksICZoZG1pX3JhdGUsICZwYXJlbnRfcmF0ZSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwbV9ydW50aW1lX3B1dChoZG1pLT5kZXYpOworCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwotCQl9CiAKIAkJaGRtaS0+aHBfc3RhdGUgPSBIRE1JX0hPVFBMVUdfRURJRF9ET05FOwogCiAJCS8qIFJlY29uZmlndXJlIHRoZSBjbG9jayAqLwogCQlyZXQgPSBzaF9oZG1pX2Nsa19jb25maWd1cmUoaGRtaSwgaGRtaV9yYXRlLCBwYXJlbnRfcmF0ZSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwbV9ydW50aW1lX3B1dChoZG1pLT5kZXYpOworCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwotCQl9CiAKIAkJbXNsZWVwKDEwKTsKIAkJc2hfaGRtaV9jb25maWd1cmUoaGRtaSk7CkBAIC0xMTkxLDcgKzExODQsNiBAQAogCQlmYl9zZXRfc3VzcGVuZChoZG1pLT5pbmZvLCAxKTsKIAogCQljb25zb2xlX3VubG9jaygpOwotCQlwbV9ydW50aW1lX3B1dChoZG1pLT5kZXYpOwogCX0KIAogb3V0OgpAQCAtMTMxMiw3ICsxMzA0LDcgQEAKIAlJTklUX0RFTEFZRURfV09SSygmaGRtaS0+ZWRpZF93b3JrLCBzaF9oZG1pX2VkaWRfd29ya19mbik7CiAKIAlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKLQlwbV9ydW50aW1lX3Jlc3VtZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOwogCiAJLyogUHJvZHVjdCBhbmQgcmV2aXNpb24gSURzIGFyZSAwIGluIHNoLW1vYmlsZSB2ZXJzaW9uICovCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRldGVjdGVkIEhETUkgY29udHJvbGxlciAweCV4OjB4JXhcbiIsCkBAIC0xMzQwLDcgKzEzMzIsNyBAQAogZWNvZGVjOgogCWZyZWVfaXJxKGlycSwgaGRtaSk7CiBlcmVxaXJxOgotCXBtX3J1bnRpbWVfc3VzcGVuZCgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dCgmcGRldi0+ZGV2KTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAJaW91bm1hcChoZG1pLT5iYXNlKTsKIGVtYXA6CkBAIC0xMzc3LDcgKzEzNjksNyBAQAogCWZyZWVfaXJxKGlycSwgaGRtaSk7CiAJLyogV2FpdCBmb3IgYWxyZWFkeSBzY2hlZHVsZWQgd29yayAqLwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaGRtaS0+ZWRpZF93b3JrKTsKLQlwbV9ydW50aW1lX3N1c3BlbmQoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXQoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCWNsa19kaXNhYmxlKGhkbWktPmhkbWlfY2xrKTsKIAljbGtfcHV0KGhkbWktPmhkbWlfY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggNDA0YzAzYi4uMDE5ZGJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgdG1wOwogCWludCBicHAgPSAwOwogCXVuc2lnbmVkIGxvbmcgbGRkZHNyOwotCWludCBrLCBtOworCWludCBrLCBtLCByZXQ7CiAKIAkvKiBlbmFibGUgY2xvY2tzIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGhhcmR3YXJlICovCiAJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUocHJpdi0+Y2gpOyBrKyspIHsKQEAgLTU0MCw3ICs1NDAsNyBAQAogCiAJCWJvYXJkX2NmZyA9ICZjaC0+Y2ZnLmJvYXJkX2NmZzsKIAkJaWYgKGJvYXJkX2NmZy0+c2V0dXBfc3lzKSB7Ci0JCQlpbnQgcmV0ID0gYm9hcmRfY2ZnLT5zZXR1cF9zeXMoYm9hcmRfY2ZnLT5ib2FyZF9kYXRhLAorCQkJcmV0ID0gYm9hcmRfY2ZnLT5zZXR1cF9zeXMoYm9hcmRfY2ZnLT5ib2FyZF9kYXRhLAogCQkJCQkJY2gsICZzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCmluZGV4IDUzYjJjNWEuLjMwNWM5NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCkBAIC0xMjY1LDkgKzEyNjUsMTEgQEAKIAogc3RhdGljIHZvaWQgdmdhMTZmYl9kZXN0cm95KHN0cnVjdCBmYl9pbmZvICppbmZvKQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihpbmZvLT5kZXZpY2UsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CiAJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CiAJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIAkvKiBYWFggdW5zaGFyZSBWR0EgcmVnaW9ucyAqLworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jIGIvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCmluZGV4IGEyMDIxOGMuLmJlYWM1MmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMKKysrIGIvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCkBAIC0zOTUsMTAgKzM5NSw5IEBACiAJc3Bpbl9sb2NrX2luaXQoJmluZm8tPmRpcnR5X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZpbmZvLT5yZXNpemVfbG9jayk7CiAKLQlpbmZvLT5mYiA9IHZtYWxsb2MoZmJfc2l6ZSk7CisJaW5mby0+ZmIgPSB2emFsbG9jKGZiX3NpemUpOwogCWlmIChpbmZvLT5mYiA9PSBOVUxMKQogCQlnb3RvIGVycm9yX25vbWVtOwotCW1lbXNldChpbmZvLT5mYiwgMCwgZmJfc2l6ZSk7CiAKIAlpbmZvLT5ucl9wYWdlcyA9IChmYl9zaXplICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKaW5kZXggMGYxZGE0NS4uZTA1OGFjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCkBAIC00MCw5ICs0MCw2IEBACiAJLyogV2FpdGluZyBmb3IgaG9zdCB0byBhY2sgdGhlIHBhZ2VzIHdlIHJlbGVhc2VkLiAqLwogCXN0cnVjdCBjb21wbGV0aW9uIGFja2VkOwogCi0JLyogRG8gd2UgaGF2ZSB0byB0ZWxsIEhvc3QgKmJlZm9yZSogd2UgcmV1c2UgcGFnZXM/ICovCi0JYm9vbCB0ZWxsX2hvc3RfZmlyc3Q7Ci0KIAkvKiBUaGUgcGFnZXMgd2UndmUgdG9sZCB0aGUgSG9zdCB3ZSdyZSBub3QgdXNpbmcuICovCiAJdW5zaWduZWQgaW50IG51bV9wYWdlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VzOwpAQCAtMTUxLDEzICsxNDgsMTQgQEAKIAkJdmItPm51bV9wYWdlcy0tOwogCX0KIAotCWlmICh2Yi0+dGVsbF9ob3N0X2ZpcnN0KSB7Ci0JCXRlbGxfaG9zdCh2YiwgdmItPmRlZmxhdGVfdnEpOwotCQlyZWxlYXNlX3BhZ2VzX2J5X3Bmbih2Yi0+cGZucywgdmItPm51bV9wZm5zKTsKLQl9IGVsc2UgewotCQlyZWxlYXNlX3BhZ2VzX2J5X3Bmbih2Yi0+cGZucywgdmItPm51bV9wZm5zKTsKLQkJdGVsbF9ob3N0KHZiLCB2Yi0+ZGVmbGF0ZV92cSk7Ci0JfQorCisJLyoKKwkgKiBOb3RlIHRoYXQgaWYKKwkgKiB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0JBTExPT05fRl9NVVNUX1RFTExfSE9TVCk7CisJICogaXMgdHJ1ZSwgd2UgKmhhdmUqIHRvIGRvIGl0IGluIHRoaXMgb3JkZXIKKwkgKi8KKwl0ZWxsX2hvc3QodmIsIHZiLT5kZWZsYXRlX3ZxKTsKKwlyZWxlYXNlX3BhZ2VzX2J5X3Bmbih2Yi0+cGZucywgdmItPm51bV9wZm5zKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zdGF0KHN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmIsIGludCBpZHgsCkBAIC0zMjUsOSArMzIzLDYgQEAKIAkJZ290byBvdXRfZGVsX3ZxczsKIAl9CiAKLQl2Yi0+dGVsbF9ob3N0X2ZpcnN0Ci0JCT0gdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QpOwotCiAJcmV0dXJuIDA7CiAKIG91dF9kZWxfdnFzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKaW5kZXggYjAwNDNmYjIuLjY4YjkxMzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTgyLDYgKzgyLDkgQEAKIAkvKiBIb3N0IHN1cHBvcnRzIGluZGlyZWN0IGJ1ZmZlcnMgKi8KIAlib29sIGluZGlyZWN0OwogCisJLyogSG9zdCBwdWJsaXNoZXMgYXZhaWwgZXZlbnQgaWR4ICovCisJYm9vbCBldmVudDsKKwogCS8qIE51bWJlciBvZiBmcmVlIGJ1ZmZlcnMgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX2ZyZWU7CiAJLyogSGVhZCBvZiBmcmVlIGJ1ZmZlciBsaXN0LiAqLwpAQCAtMjM3LDE4ICsyNDAsMjIgQEAKIHZvaWQgdmlydHF1ZXVlX2tpY2soc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQogewogCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7CisJdTE2IG5ldywgb2xkOwogCVNUQVJUX1VTRSh2cSk7CiAJLyogRGVzY3JpcHRvcnMgYW5kIGF2YWlsYWJsZSBhcnJheSBuZWVkIHRvIGJlIHNldCBiZWZvcmUgd2UgZXhwb3NlIHRoZQogCSAqIG5ldyBhdmFpbGFibGUgYXJyYXkgZW50cmllcy4gKi8KIAl2aXJ0aW9fd21iKCk7CiAKLQl2cS0+dnJpbmcuYXZhaWwtPmlkeCArPSB2cS0+bnVtX2FkZGVkOworCW9sZCA9IHZxLT52cmluZy5hdmFpbC0+aWR4OworCW5ldyA9IHZxLT52cmluZy5hdmFpbC0+aWR4ID0gb2xkICsgdnEtPm51bV9hZGRlZDsKIAl2cS0+bnVtX2FkZGVkID0gMDsKIAogCS8qIE5lZWQgdG8gdXBkYXRlIGF2YWlsIGluZGV4IGJlZm9yZSBjaGVja2luZyBpZiB3ZSBzaG91bGQgbm90aWZ5ICovCiAJdmlydGlvX21iKCk7CiAKLQlpZiAoISh2cS0+dnJpbmcudXNlZC0+ZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9USUZZKSkKKwlpZiAodnEtPmV2ZW50ID8KKwkgICAgdnJpbmdfbmVlZF9ldmVudCh2cmluZ19hdmFpbF9ldmVudCgmdnEtPnZyaW5nKSwgbmV3LCBvbGQpIDoKKwkgICAgISh2cS0+dnJpbmcudXNlZC0+ZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9USUZZKSkKIAkJLyogUHJvZCBvdGhlciBzaWRlIHRvIHRlbGwgaXQgYWJvdXQgY2hhbmdlcy4gKi8KIAkJdnEtPm5vdGlmeSgmdnEtPnZxKTsKIApAQCAtMzI0LDYgKzMzMSwxNCBAQAogCXJldCA9IHZxLT5kYXRhW2ldOwogCWRldGFjaF9idWYodnEsIGkpOwogCXZxLT5sYXN0X3VzZWRfaWR4Kys7CisJLyogSWYgd2UgZXhwZWN0IGFuIGludGVycnVwdCBmb3IgdGhlIG5leHQgZW50cnksIHRlbGwgaG9zdAorCSAqIGJ5IHdyaXRpbmcgZXZlbnQgaW5kZXggYW5kIGZsdXNoIG91dCB0aGUgd3JpdGUgYmVmb3JlCisJICogdGhlIHJlYWQgaW4gdGhlIG5leHQgZ2V0X2J1ZiBjYWxsLiAqLworCWlmICghKHZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgJiBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkpIHsKKwkJdnJpbmdfdXNlZF9ldmVudCgmdnEtPnZyaW5nKSA9IHZxLT5sYXN0X3VzZWRfaWR4OworCQl2aXJ0aW9fbWIoKTsKKwl9CisKIAlFTkRfVVNFKHZxKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzQ1LDcgKzM2MCwxMSBAQAogCiAJLyogV2Ugb3B0aW1pc3RpY2FsbHkgdHVybiBiYWNrIG9uIGludGVycnVwdHMsIHRoZW4gY2hlY2sgaWYgdGhlcmUgd2FzCiAJICogbW9yZSB0byBkby4gKi8KKwkvKiBEZXBlbmRpbmcgb24gdGhlIFZJUlRJT19SSU5HX0ZfRVZFTlRfSURYIGZlYXR1cmUsIHdlIG5lZWQgdG8KKwkgKiBlaXRoZXIgY2xlYXIgdGhlIGZsYWdzIGJpdCBvciBwb2ludCB0aGUgZXZlbnQgaW5kZXggYXQgdGhlIG5leHQKKwkgKiBlbnRyeS4gQWx3YXlzIGRvIGJvdGggdG8ga2VlcCBjb2RlIHNpbXBsZS4gKi8KIAl2cS0+dnJpbmcuYXZhaWwtPmZsYWdzICY9IH5WUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKKwl2cmluZ191c2VkX2V2ZW50KCZ2cS0+dnJpbmcpID0gdnEtPmxhc3RfdXNlZF9pZHg7CiAJdmlydGlvX21iKCk7CiAJaWYgKHVubGlrZWx5KG1vcmVfdXNlZCh2cSkpKSB7CiAJCUVORF9VU0UodnEpOwpAQCAtMzU3LDYgKzM3NiwzMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodmlydHF1ZXVlX2VuYWJsZV9jYik7CiAKK2Jvb2wgdmlydHF1ZXVlX2VuYWJsZV9jYl9kZWxheWVkKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKK3sKKwlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOworCXUxNiBidWZzOworCisJU1RBUlRfVVNFKHZxKTsKKworCS8qIFdlIG9wdGltaXN0aWNhbGx5IHR1cm4gYmFjayBvbiBpbnRlcnJ1cHRzLCB0aGVuIGNoZWNrIGlmIHRoZXJlIHdhcworCSAqIG1vcmUgdG8gZG8uICovCisJLyogRGVwZW5kaW5nIG9uIHRoZSBWSVJUSU9fUklOR19GX1VTRURfRVZFTlRfSURYIGZlYXR1cmUsIHdlIG5lZWQgdG8KKwkgKiBlaXRoZXIgY2xlYXIgdGhlIGZsYWdzIGJpdCBvciBwb2ludCB0aGUgZXZlbnQgaW5kZXggYXQgdGhlIG5leHQKKwkgKiBlbnRyeS4gQWx3YXlzIGRvIGJvdGggdG8ga2VlcCBjb2RlIHNpbXBsZS4gKi8KKwl2cS0+dnJpbmcuYXZhaWwtPmZsYWdzICY9IH5WUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKKwkvKiBUT0RPOiB0dW5lIHRoaXMgdGhyZXNob2xkICovCisJYnVmcyA9ICh1MTYpKHZxLT52cmluZy5hdmFpbC0+aWR4IC0gdnEtPmxhc3RfdXNlZF9pZHgpICogMyAvIDQ7CisJdnJpbmdfdXNlZF9ldmVudCgmdnEtPnZyaW5nKSA9IHZxLT5sYXN0X3VzZWRfaWR4ICsgYnVmczsKKwl2aXJ0aW9fbWIoKTsKKwlpZiAodW5saWtlbHkoKHUxNikodnEtPnZyaW5nLnVzZWQtPmlkeCAtIHZxLT5sYXN0X3VzZWRfaWR4KSA+IGJ1ZnMpKSB7CisJCUVORF9VU0UodnEpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJRU5EX1VTRSh2cSk7CisJcmV0dXJuIHRydWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0cXVldWVfZW5hYmxlX2NiX2RlbGF5ZWQpOworCiB2b2lkICp2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQogewogCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7CkBAIC00MzgsNiArNDg0LDcgQEAKICNlbmRpZgogCiAJdnEtPmluZGlyZWN0ID0gdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVTQyk7CisJdnEtPmV2ZW50ID0gdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19SSU5HX0ZfRVZFTlRfSURYKTsKIAogCS8qIE5vIGNhbGxiYWNrPyAgVGVsbCBvdGhlciBzaWRlIG5vdCB0byBib3RoZXIgdXMuICovCiAJaWYgKCFjYWxsYmFjaykKQEAgLTQ3Miw2ICs1MTksOCBAQAogCQlzd2l0Y2ggKGkpIHsKIAkJY2FzZSBWSVJUSU9fUklOR19GX0lORElSRUNUX0RFU0M6CiAJCQlicmVhazsKKwkJY2FzZSBWSVJUSU9fUklOR19GX0VWRU5UX0lEWDoKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogV2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGJpdC4gKi8KIAkJCWNsZWFyX2JpdChpLCB2ZGV2LT5mZWF0dXJlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvS2NvbmZpZyBiL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnCmluZGV4IDAwZDYxNWQuLjk3OWQ2ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnCkBAIC00Miw3ICs0Miw3IEBACiAKIGNvbmZpZyBXMV9NQVNURVJfRFMxV00KIAl0cmlzdGF0ZSAiTWF4aW0gRFMxV00gMS13aXJlIGJ1c21hc3RlciIKLQlkZXBlbmRzIG9uIFcxCisJZGVwZW5kcyBvbiBXMSAmJiBHRU5FUklDX0hBUkRJUlFTCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIERTMVdNIDEtd2lyZSBkcml2ZXIsIHN1Y2ggYXMgdGhhdAogCSAgaW4gSFAgaVBBUSBkZXZpY2VzIGxpa2UgaDV4eHgsIGgyMjAwLCBhbmQgQVNJQzMtYmFzZWQgbGlrZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZlbnRzLmMgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwppbmRleCAzZmY4MjJiLi41NTNkYTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldmVudHMuYworKysgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwpAQCAtNjI2LDYgKzYyNiw5IEBACiAgKgogICogTm90ZTogV2UgZG9uJ3QgYXNzaWduIGFuIGV2ZW50IGNoYW5uZWwgdW50aWwgdGhlIGlycSBhY3R1YWxseSBzdGFydGVkCiAgKiB1cC4gIFJldHVybiBhbiBleGlzdGluZyBpcnEgaWYgd2UndmUgYWxyZWFkeSBnb3Qgb25lIGZvciB0aGUgZ3NpLgorICoKKyAqIFNoYXJlYWJsZSBpbXBsaWVzIGxldmVsIHRyaWdnZXJlZCwgbm90IHNoYXJlYWJsZSBpbXBsaWVzIGVkZ2UKKyAqIHRyaWdnZXJlZCBoZXJlLgogICovCiBpbnQgeGVuX2JpbmRfcGlycV9nc2lfdG9faXJxKHVuc2lnbmVkIGdzaSwKIAkJCSAgICAgdW5zaWduZWQgcGlycSwgaW50IHNoYXJlYWJsZSwgY2hhciAqbmFtZSkKQEAgLTY2NCwxNiArNjY3LDEzIEBACiAKIAlwaXJxX3F1ZXJ5X3VubWFzayhpcnEpOwogCS8qIFdlIHRyeSB0byB1c2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2VtYW50aWMgZm9yIHRoZQotCSAqIHR5cGUgb2YgaW50ZXJydXB0OiBpZiB0aGUgaW50ZXJydXB0IGRvZXNuJ3QgbmVlZCBhbiBlb2kKLQkgKiAocGlycV9uZWVkc19lb2kgcmV0dXJucyBmYWxzZSksIHdlIHRyZWF0IGl0IGxpa2UgYW4gZWRnZQotCSAqIHRyaWdnZXJlZCBpbnRlcnJ1cHQgc28gd2UgdXNlIGhhbmRsZV9lZGdlX2lycS4KLQkgKiBBcyBhIG1hdHRlciBvZiBmYWN0IHRoaXMgb25seSBoYXBwZW5zIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcKLQkgKiBwaHlzaWNhbCBpbnRlcnJ1cHQgaXMgZWRnZSB0cmlnZ2VyZWQgb3IgYW4gbXNpLgorCSAqIHR5cGUgb2YgaW50ZXJydXB0OiBpZiB0aGUgaW50ZXJydXB0IGlzIGFuIGVkZ2UgdHJpZ2dlcmVkCisJICogaW50ZXJydXB0IHdlIHVzZSBoYW5kbGVfZWRnZV9pcnEuCiAJICoKLQkgKiBPbiB0aGUgb3RoZXIgaGFuZCBpZiB0aGUgaW50ZXJydXB0IG5lZWRzIGFuIGVvaSAocGlycV9uZWVkc19lb2kKLQkgKiByZXR1cm5zIHRydWUpIHdlIHRyZWF0IGl0IGxpa2UgYSBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0IHNvIHdlCi0JICogdXNlIGhhbmRsZV9mYXN0ZW9pX2lycSBsaWtlIHRoZSBuYXRpdmUgY29kZSBkb2VzIGZvciB0aGlzIGtpbmQgb2YKKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCBpZiB0aGUgaW50ZXJydXB0IGlzIGxldmVsIHRyaWdnZXJlZCB3ZSB1c2UKKwkgKiBoYW5kbGVfZmFzdGVvaV9pcnEgbGlrZSB0aGUgbmF0aXZlIGNvZGUgZG9lcyBmb3IgdGhpcyBraW5kIG9mCiAJICogaW50ZXJydXB0cy4KKwkgKgogCSAqIERlcGVuZGluZyBvbiB0aGUgWGVuIHZlcnNpb24sIHBpcnFfbmVlZHNfZW9pIG1pZ2h0IHJldHVybiB0cnVlCiAJICogbm90IG9ubHkgZm9yIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIGJ1dCBmb3IgZWRnZSB0cmlnZ2VyZWQKIAkgKiBpbnRlcnJ1cHRzIHRvby4gSW4gYW55IGNhc2UgWGVuIGFsd2F5cyBob25vcnMgdGhlIGVvaSBtZWNoYW5pc20sCkBAIC02ODEsNyArNjgxLDcgQEAKIAkgKiBoYXNuJ3QgcmVjZWl2ZWQgYW4gZW9pIHlldC4gVGhlcmVmb3JlIHVzaW5nIHRoZSBmYXN0ZW9pIGhhbmRsZXIKIAkgKiBpcyB0aGUgcmlnaHQgY2hvaWNlIGVpdGhlciB3YXkuCiAJICovCi0JaWYgKHBpcnFfbmVlZHNfZW9pKGlycSkpCisJaWYgKHNoYXJlYWJsZSkKIAkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmeGVuX3BpcnFfY2hpcCwKIAkJCQloYW5kbGVfZmFzdGVvaV9pcnEsIG5hbWUpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3N3aW90bGIteGVuLmMgYi9kcml2ZXJzL3hlbi9zd2lvdGxiLXhlbi5jCmluZGV4IDY1ZWEyMWEuLjZlOGMxNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3N3aW90bGIteGVuLmMKKysrIGIvZHJpdmVycy94ZW4vc3dpb3RsYi14ZW4uYwpAQCAtMTQ3LDkgKzE0NywxNSBAQAogewogCXVuc2lnbmVkIGxvbmcgYnl0ZXM7CiAJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgbnJfdGJsOwogCi0JeGVuX2lvX3RsYl9uc2xhYnMgPSAoNjQgKiAxMDI0ICogMTAyNCA+PiBJT19UTEJfU0hJRlQpOwotCXhlbl9pb190bGJfbnNsYWJzID0gQUxJR04oeGVuX2lvX3RsYl9uc2xhYnMsIElPX1RMQl9TRUdTSVpFKTsKKwlucl90YmwgPSBzd2lvbHRiX25yX3RibCgpOworCWlmIChucl90YmwpCisJCXhlbl9pb190bGJfbnNsYWJzID0gbnJfdGJsOworCWVsc2UgeworCQl4ZW5faW9fdGxiX25zbGFicyA9ICg2NCAqIDEwMjQgKiAxMDI0ID4+IElPX1RMQl9TSElGVCk7CisJCXhlbl9pb190bGJfbnNsYWJzID0gQUxJR04oeGVuX2lvX3RsYl9uc2xhYnMsIElPX1RMQl9TRUdTSVpFKTsKKwl9CiAKIAlieXRlcyA9IHhlbl9pb190bGJfbnNsYWJzIDw8IElPX1RMQl9TSElGVDsKIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jCmluZGV4IDIwYzEwNmYuLjFiMGIxOTUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXIuYworKysgYi9mcy9hZnMvZGlyLmMKQEAgLTU4NCwxMSArNTg0LDExIEBACiAKIHN1Y2Nlc3M6CiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7Ci0JX2xlYXZlKCIgPSAwIHsgdm49JXUgdT0ldSB9IC0+IHsgaW5vPSVsdSB2PSVsbHUgfSIsCisJX2xlYXZlKCIgPSAwIHsgdm49JXUgdT0ldSB9IC0+IHsgaW5vPSVsdSB2PSV1IH0iLAogCSAgICAgICBmaWQudm5vZGUsCiAJICAgICAgIGZpZC51bmlxdWUsCiAJICAgICAgIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGVudHJ5LT5kX2lub2RlLT5pX3ZlcnNpb24pOworCSAgICAgICBkZW50cnktPmRfaW5vZGUtPmlfZ2VuZXJhdGlvbik7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTY3MSwxMCArNjcxLDEwIEBACiAJCSAqIGJlZW4gZGVsZXRlZCBhbmQgcmVwbGFjZWQsIGFuZCB0aGUgb3JpZ2luYWwgdm5vZGUgSUQgaGFzCiAJCSAqIGJlZW4gcmV1c2VkICovCiAJCWlmIChmaWQudW5pcXVlICE9IHZub2RlLT5maWQudW5pcXVlKSB7Ci0JCQlfZGVidWcoIiVzOiBmaWxlIGRlbGV0ZWQgKHVxICV1IC0+ICV1IEk6JWxsdSkiLAorCQkJX2RlYnVnKCIlczogZmlsZSBkZWxldGVkICh1cSAldSAtPiAldSBJOiV1KSIsCiAJCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZmlkLnVuaXF1ZSwKIAkJCSAgICAgICB2bm9kZS0+ZmlkLnVuaXF1ZSwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRlbnRyeS0+ZF9pbm9kZS0+aV92ZXJzaW9uKTsKKwkJCSAgICAgICBkZW50cnktPmRfaW5vZGUtPmlfZ2VuZXJhdGlvbik7CiAJCQlzcGluX2xvY2soJnZub2RlLT5sb2NrKTsKIAkJCXNldF9iaXQoQUZTX1ZOT0RFX0RFTEVURUQsICZ2bm9kZS0+ZmxhZ3MpOwogCQkJc3Bpbl91bmxvY2soJnZub2RlLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc2NsaWVudC5jIGIvZnMvYWZzL2ZzY2xpZW50LmMKaW5kZXggNGJkMDIxOC4uMzQ2ZTMyOCAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZzY2xpZW50LmMKKysrIGIvZnMvYWZzL2ZzY2xpZW50LmMKQEAgLTg5LDcgKzg5LDcgQEAKIAkJCWlfc2l6ZV93cml0ZSgmdm5vZGUtPnZmc19pbm9kZSwgc2l6ZSk7CiAJCQl2bm9kZS0+dmZzX2lub2RlLmlfdWlkID0gc3RhdHVzLT5vd25lcjsKIAkJCXZub2RlLT52ZnNfaW5vZGUuaV9naWQgPSBzdGF0dXMtPmdyb3VwOwotCQkJdm5vZGUtPnZmc19pbm9kZS5pX3ZlcnNpb24gPSB2bm9kZS0+ZmlkLnVuaXF1ZTsKKwkJCXZub2RlLT52ZnNfaW5vZGUuaV9nZW5lcmF0aW9uID0gdm5vZGUtPmZpZC51bmlxdWU7CiAJCQl2bm9kZS0+dmZzX2lub2RlLmlfbmxpbmsgPSBzdGF0dXMtPm5saW5rOwogCiAJCQltb2RlID0gdm5vZGUtPnZmc19pbm9kZS5pX21vZGU7CkBAIC0xMDIsNiArMTAyLDcgQEAKIAkJdm5vZGUtPnZmc19pbm9kZS5pX2N0aW1lLnR2X3NlYwk9IHN0YXR1cy0+bXRpbWVfc2VydmVyOwogCQl2bm9kZS0+dmZzX2lub2RlLmlfbXRpbWUJPSB2bm9kZS0+dmZzX2lub2RlLmlfY3RpbWU7CiAJCXZub2RlLT52ZnNfaW5vZGUuaV9hdGltZQk9IHZub2RlLT52ZnNfaW5vZGUuaV9jdGltZTsKKwkJdm5vZGUtPnZmc19pbm9kZS5pX3ZlcnNpb24JPSBkYXRhX3ZlcnNpb247CiAJfQogCiAJZXhwZWN0ZWRfdmVyc2lvbiA9IHN0YXR1cy0+ZGF0YV92ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCBkYjY2YzUyLi4wZmRhYjZlIDEwMDY0NAotLS0gYS9mcy9hZnMvaW5vZGUuYworKysgYi9mcy9hZnMvaW5vZGUuYwpAQCAtNzUsNyArNzUsOCBAQAogCWlub2RlLT5pX2N0aW1lLnR2X25zZWMJPSAwOwogCWlub2RlLT5pX2F0aW1lCQk9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWU7CiAJaW5vZGUtPmlfYmxvY2tzCQk9IDA7Ci0JaW5vZGUtPmlfdmVyc2lvbgk9IHZub2RlLT5maWQudW5pcXVlOworCWlub2RlLT5pX2dlbmVyYXRpb24JPSB2bm9kZS0+ZmlkLnVuaXF1ZTsKKwlpbm9kZS0+aV92ZXJzaW9uCT0gdm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb247CiAJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMJPSAmYWZzX2ZzX2FvcHM7CiAKIAkvKiBjaGVjayB0byBzZWUgd2hldGhlciBhIHN5bWJvbGljIGxpbmsgaXMgcmVhbGx5IGEgbW91bnRwb2ludCAqLwpAQCAtMTAwLDcgKzEwMSw3IEBACiAJc3RydWN0IGFmc19pZ2V0X2RhdGEgKmRhdGEgPSBvcGFxdWU7CiAKIAlyZXR1cm4gaW5vZGUtPmlfaW5vID09IGRhdGEtPmZpZC52bm9kZSAmJgotCQlpbm9kZS0+aV92ZXJzaW9uID09IGRhdGEtPmZpZC51bmlxdWU7CisJCWlub2RlLT5pX2dlbmVyYXRpb24gPT0gZGF0YS0+ZmlkLnVuaXF1ZTsKIH0KIAogLyoKQEAgLTEyMiw3ICsxMjMsNyBAQAogCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpOwogCiAJaW5vZGUtPmlfaW5vID0gZGF0YS0+ZmlkLnZub2RlOwotCWlub2RlLT5pX3ZlcnNpb24gPSBkYXRhLT5maWQudW5pcXVlOworCWlub2RlLT5pX2dlbmVyYXRpb24gPSBkYXRhLT5maWQudW5pcXVlOwogCXZub2RlLT5maWQgPSBkYXRhLT5maWQ7CiAJdm5vZGUtPnZvbHVtZSA9IGRhdGEtPnZvbHVtZTsKIApAQCAtMzgwLDggKzM4MSw3IEBACiAKIAlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAotCV9lbnRlcigieyBpbm89JWx1IHY9JWxsdSB9IiwgaW5vZGUtPmlfaW5vLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLT5pX3ZlcnNpb24pOworCV9lbnRlcigieyBpbm89JWx1IHY9JXUgfSIsIGlub2RlLT5pX2lubywgaW5vZGUtPmlfZ2VuZXJhdGlvbik7CiAKIAlnZW5lcmljX2ZpbGxhdHRyKGlub2RlLCBzdGF0KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zdXBlci5jIGIvZnMvYWZzL3N1cGVyLmMKaW5kZXggZmIyNDBlOC4uMzU2ZGNmMCAxMDA2NDQKLS0tIGEvZnMvYWZzL3N1cGVyLmMKKysrIGIvZnMvYWZzL3N1cGVyLmMKQEAgLTMxLDggKzMxLDggQEAKIHN0YXRpYyB2b2lkIGFmc19pX2luaXRfb25jZSh2b2lkICpmb28pOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKIAkJICAgICAgaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSk7CitzdGF0aWMgdm9pZCBhZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKLXN0YXRpYyB2b2lkIGFmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBzdGF0aWMgdm9pZCBhZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHN0YXRpYyBpbnQgYWZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpOwogCkBAIC00MCw3ICs0MCw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZnMiLAogCS5tb3VudAkJPSBhZnNfbW91bnQsCi0JLmtpbGxfc2IJPSBraWxsX2Fub25fc3VwZXIsCisJLmtpbGxfc2IJPSBhZnNfa2lsbF9zdXBlciwKIAkuZnNfZmxhZ3MJPSAwLAogfTsKIApAQCAtNTAsNyArNTAsNiBAQAogCS5kcm9wX2lub2RlCT0gYWZzX2Ryb3BfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBhZnNfZGVzdHJveV9pbm9kZSwKIAkuZXZpY3RfaW5vZGUJPSBhZnNfZXZpY3RfaW5vZGUsCi0JLnB1dF9zdXBlcgk9IGFmc19wdXRfc3VwZXIsCiAJLnNob3dfb3B0aW9ucwk9IGdlbmVyaWNfc2hvd19vcHRpb25zLAogfTsKIApAQCAtMjgyLDE5ICsyODEsMjUgQEAKICAqLwogc3RhdGljIGludCBhZnNfdGVzdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBhZnNfbW91bnRfcGFyYW1zICpwYXJhbXMgPSBkYXRhOworCXN0cnVjdCBhZnNfc3VwZXJfaW5mbyAqYXMxID0gZGF0YTsKIAlzdHJ1Y3QgYWZzX3N1cGVyX2luZm8gKmFzID0gc2ItPnNfZnNfaW5mbzsKIAotCXJldHVybiBhcy0+dm9sdW1lID09IHBhcmFtcy0+dm9sdW1lOworCXJldHVybiBhcy0+dm9sdW1lID09IGFzMS0+dm9sdW1lOworfQorCitzdGF0aWMgaW50IGFmc19zZXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSkKK3sKKwlzYi0+c19mc19pbmZvID0gZGF0YTsKKwlyZXR1cm4gc2V0X2Fub25fc3VwZXIoc2IsIE5VTEwpOwogfQogCiAvKgogICogZmlsbCBpbiB0aGUgc3VwZXJibG9jawogICovCi1zdGF0aWMgaW50IGFmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGFmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgIHN0cnVjdCBhZnNfbW91bnRfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RydWN0IGFmc19tb3VudF9wYXJhbXMgKnBhcmFtcyA9IGRhdGE7Ci0Jc3RydWN0IGFmc19zdXBlcl9pbmZvICphcyA9IE5VTEw7CisJc3RydWN0IGFmc19zdXBlcl9pbmZvICphcyA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IGFmc19maWQgZmlkOwogCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBOVUxMOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwpAQCAtMzAyLDIzICszMDcsMTMgQEAKIAogCV9lbnRlcigiIik7CiAKLQkvKiBhbGxvY2F0ZSBhIHN1cGVyYmxvY2sgaW5mbyByZWNvcmQgKi8KLQlhcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZnNfc3VwZXJfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghYXMpIHsKLQkJX2xlYXZlKCIgPSAtRU5PTUVNIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWFmc19nZXRfdm9sdW1lKHBhcmFtcy0+dm9sdW1lKTsKLQlhcy0+dm9sdW1lID0gcGFyYW1zLT52b2x1bWU7Ci0KIAkvKiBmaWxsIGluIHRoZSBzdXBlcmJsb2NrICovCiAJc2ItPnNfYmxvY2tzaXplCQk9IFBBR0VfQ0FDSEVfU0laRTsKIAlzYi0+c19ibG9ja3NpemVfYml0cwk9IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJc2ItPnNfbWFnaWMJCT0gQUZTX0ZTX01BR0lDOwogCXNiLT5zX29wCQk9ICZhZnNfc3VwZXJfb3BzOwotCXNiLT5zX2ZzX2luZm8JCT0gYXM7CiAJc2ItPnNfYmRpCQk9ICZhcy0+dm9sdW1lLT5iZGk7CisJc3RybGNweShzYi0+c19pZCwgYXMtPnZvbHVtZS0+dmxvY2F0aW9uLT52bGRiLm5hbWUsIHNpemVvZihzYi0+c19pZCkpOwogCiAJLyogYWxsb2NhdGUgdGhlIHJvb3QgaW5vZGUgYW5kIGRlbnRyeSAqLwogCWZpZC52aWQJCT0gYXMtPnZvbHVtZS0+dmlkOwpAQCAtMzI2LDcgKzMyMSw3IEBACiAJZmlkLnVuaXF1ZQk9IDE7CiAJaW5vZGUgPSBhZnNfaWdldChzYiwgcGFyYW1zLT5rZXksICZmaWQsIE5VTEwsIE5VTEwpOwogCWlmIChJU19FUlIoaW5vZGUpKQotCQlnb3RvIGVycm9yX2lub2RlOworCQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7CiAKIAlpZiAocGFyYW1zLT5hdXRvY2VsbCkKIAkJc2V0X2JpdChBRlNfVk5PREVfQVVUT0NFTEwsICZBRlNfRlNfSShpbm9kZSktPmZsYWdzKTsKQEAgLTM0MiwxNiArMzM3LDggQEAKIAlfbGVhdmUoIiA9IDAiKTsKIAlyZXR1cm4gMDsKIAotZXJyb3JfaW5vZGU6Ci0JcmV0ID0gUFRSX0VSUihpbm9kZSk7Ci0JaW5vZGUgPSBOVUxMOwogZXJyb3I6CiAJaXB1dChpbm9kZSk7Ci0JYWZzX3B1dF92b2x1bWUoYXMtPnZvbHVtZSk7Ci0Ja2ZyZWUoYXMpOwotCi0Jc2ItPnNfZnNfaW5mbyA9IE5VTEw7Ci0KIAlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzY3LDYgKzM1NCw3IEBACiAJc3RydWN0IGFmc192b2x1bWUgKnZvbDsKIAlzdHJ1Y3Qga2V5ICprZXk7CiAJY2hhciAqbmV3X29wdHMgPSBrc3RyZHVwKG9wdGlvbnMsIEdGUF9LRVJORUwpOworCXN0cnVjdCBhZnNfc3VwZXJfaW5mbyAqYXM7CiAJaW50IHJldDsKIAogCV9lbnRlcigiLCwlcywlcCIsIGRldl9uYW1lLCBvcHRpb25zKTsKQEAgLTM5OSwxMiArMzg3LDIyIEBACiAJCXJldCA9IFBUUl9FUlIodm9sKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JcGFyYW1zLnZvbHVtZSA9IHZvbDsKKworCS8qIGFsbG9jYXRlIGEgc3VwZXJibG9jayBpbmZvIHJlY29yZCAqLworCWFzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFmc19zdXBlcl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlhZnNfcHV0X3ZvbHVtZSh2b2wpOworCQlnb3RvIGVycm9yOworCX0KKwlhcy0+dm9sdW1lID0gdm9sOwogCiAJLyogYWxsb2NhdGUgYSBkZXZpY2VsZXNzIHN1cGVyYmxvY2sgKi8KLQlzYiA9IHNnZXQoZnNfdHlwZSwgYWZzX3Rlc3Rfc3VwZXIsIHNldF9hbm9uX3N1cGVyLCAmcGFyYW1zKTsKKwlzYiA9IHNnZXQoZnNfdHlwZSwgYWZzX3Rlc3Rfc3VwZXIsIGFmc19zZXRfc3VwZXIsIGFzKTsKIAlpZiAoSVNfRVJSKHNiKSkgewogCQlyZXQgPSBQVFJfRVJSKHNiKTsKKwkJYWZzX3B1dF92b2x1bWUodm9sKTsKKwkJa2ZyZWUoYXMpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNDIyLDE2ICs0MjAsMTYgQEAKIAl9IGVsc2UgewogCQlfZGVidWcoInJldXNlIik7CiAJCUFTU0VSVENNUChzYi0+c19mbGFncywgJiwgTVNfQUNUSVZFKTsKKwkJYWZzX3B1dF92b2x1bWUodm9sKTsKKwkJa2ZyZWUoYXMpOwogCX0KIAotCWFmc19wdXRfdm9sdW1lKHBhcmFtcy52b2x1bWUpOwogCWFmc19wdXRfY2VsbChwYXJhbXMuY2VsbCk7CiAJa2ZyZWUobmV3X29wdHMpOwogCV9sZWF2ZSgiID0gMCBbJXBdIiwgc2IpOwogCXJldHVybiBkZ2V0KHNiLT5zX3Jvb3QpOwogCiBlcnJvcjoKLQlhZnNfcHV0X3ZvbHVtZShwYXJhbXMudm9sdW1lKTsKIAlhZnNfcHV0X2NlbGwocGFyYW1zLmNlbGwpOwogCWtleV9wdXQocGFyYW1zLmtleSk7CiAJa2ZyZWUobmV3X29wdHMpOwpAQCAtNDM5LDE4ICs0MzcsMTIgQEAKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi0vKgotICogZmluaXNoIHRoZSB1bm1vdW50aW5nIHByb2Nlc3Mgb24gdGhlIHN1cGVyYmxvY2sKLSAqLwotc3RhdGljIHZvaWQgYWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorc3RhdGljIHZvaWQgYWZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgYWZzX3N1cGVyX2luZm8gKmFzID0gc2ItPnNfZnNfaW5mbzsKLQotCV9lbnRlcigiIik7Ci0KKwlraWxsX2Fub25fc3VwZXIoc2IpOwogCWFmc19wdXRfdm9sdW1lKGFzLT52b2x1bWUpOwotCi0JX2xlYXZlKCIiKTsKKwlrZnJlZShhcyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9hZnMvd3JpdGUuYyBiL2ZzL2Fmcy93cml0ZS5jCmluZGV4IDc4OWIzYWYuLmI4MDYyODUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy93cml0ZS5jCisrKyBiL2ZzL2Fmcy93cml0ZS5jCkBAIC04NCwyMyArODQsMjEgQEAKICAqIHBhcnRseSBvciB3aG9sbHkgZmlsbCBhIHBhZ2UgdGhhdCdzIHVuZGVyIHByZXBhcmF0aW9uIGZvciB3cml0aW5nCiAgKi8KIHN0YXRpYyBpbnQgYWZzX2ZpbGxfcGFnZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IGtleSAqa2V5LAotCQkJIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgc3RydWN0IHBhZ2UgKnBhZ2UpCisJCQkgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJbG9mZl90IGlfc2l6ZTsKLQl1bnNpZ25lZCBlb2Y7CiAJaW50IHJldDsKKwlpbnQgbGVuOwogCi0JX2VudGVyKCIsLCVsbHUsJXUiLCAodW5zaWduZWQgbG9uZyBsb25nKXBvcywgbGVuKTsKLQotCUFTU0VSVENNUChsZW4sIDw9LCBQQUdFX0NBQ0hFX1NJWkUpOworCV9lbnRlcigiLCwlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylwb3MpOwogCiAJaV9zaXplID0gaV9zaXplX3JlYWQoJnZub2RlLT52ZnNfaW5vZGUpOwotCWlmIChwb3MgKyBsZW4gPiBpX3NpemUpCi0JCWVvZiA9IGlfc2l6ZTsKKwlpZiAocG9zICsgUEFHRV9DQUNIRV9TSVpFID4gaV9zaXplKQorCQlsZW4gPSBpX3NpemUgLSBwb3M7CiAJZWxzZQotCQllb2YgPSBQQUdFX0NBQ0hFX1NJWkU7CisJCWxlbiA9IFBBR0VfQ0FDSEVfU0laRTsKIAotCXJldCA9IGFmc192bm9kZV9mZXRjaF9kYXRhKHZub2RlLCBrZXksIDAsIGVvZiwgcGFnZSk7CisJcmV0ID0gYWZzX3Zub2RlX2ZldGNoX2RhdGEodm5vZGUsIGtleSwgcG9zLCBsZW4sIHBhZ2UpOwogCWlmIChyZXQgPCAwKSB7CiAJCWlmIChyZXQgPT0gLUVOT0VOVCkgewogCQkJX2RlYnVnKCJnb3QgTk9FTlQgZnJvbSBzZXJ2ZXIiCkBAIC0xNTMsOSArMTUxLDggQEAKIAkqcGFnZXAgPSBwYWdlOwogCS8qIHBhZ2Ugd29uJ3QgbGVhayBpbiBlcnJvciBjYXNlOiBpdCBldmVudHVhbGx5IGdldHMgY2xlYW5lZCBvZmYgTFJVICovCiAKLQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgewotCQlfZGVidWcoIm5vdCB1cCB0byBkYXRlIik7Ci0JCXJldCA9IGFmc19maWxsX3BhZ2Uodm5vZGUsIGtleSwgcG9zLCBsZW4sIHBhZ2UpOworCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpICYmIGxlbiAhPSBQQUdFX0NBQ0hFX1NJWkUpIHsKKwkJcmV0ID0gYWZzX2ZpbGxfcGFnZSh2bm9kZSwga2V5LCBpbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZULCBwYWdlKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWtmcmVlKGNhbmRpZGF0ZSk7CiAJCQlfbGVhdmUoIiA9ICVkIFtwcmVwXSIsIHJldCk7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3Jvb3QuYyBiL2ZzL2F1dG9mczQvcm9vdC5jCmluZGV4IDg3ZDk1YTguLmY1NWFlMjMgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvcm9vdC5jCisrKyBiL2ZzL2F1dG9mczQvcm9vdC5jCkBAIC01ODMsOCArNTgzLDYgQEAKIAlpZiAoIWF1dG9mczRfb3pfbW9kZShzYmkpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWRlbnRyeV91bmhhc2goZGVudHJ5KTsKLQogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpbm8tPmNvdW50KSkgewogCQlwX2lubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnktPmRfcGFyZW50KTsKIAkJaWYgKHBfaW5vICYmIGRlbnRyeS0+ZF9wYXJlbnQgIT0gZGVudHJ5KQpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCAxZjJiMTk5Li4xYTI0MjFmIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMTI3Miw4ICsxMjcyLDggQEAKIAkJICogaW5kaXZpZHVhbCB3cml0ZWFibGUgcmVmZXJlbmNlIGlzIHRvbyBmcmFnaWxlIGdpdmVuIHRoZQogCQkgKiB3YXkgQG1vZGUgaXMgdXNlZCBpbiBibGtkZXZfZ2V0L3B1dCgpLgogCQkgKi8KLQkJaWYgKChkaXNrLT5mbGFncyAmIEdFTkhEX0ZMX0JMT0NLX0VWRU5UU19PTl9FWENMX1dSSVRFKSAmJgotCQkgICAgIXJlcyAmJiAobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiAhYmRldi0+YmRfd3JpdGVfaG9sZGVyKSB7CisJCWlmICghcmVzICYmIChtb2RlICYgRk1PREVfV1JJVEUpICYmICFiZGV2LT5iZF93cml0ZV9ob2xkZXIgJiYKKwkJICAgIChkaXNrLT5mbGFncyAmIEdFTkhEX0ZMX0JMT0NLX0VWRU5UU19PTl9FWENMX1dSSVRFKSkgewogCQkJYmRldi0+YmRfd3JpdGVfaG9sZGVyID0gdHJ1ZTsKIAkJCWRpc2tfYmxvY2tfZXZlbnRzKGRpc2spOwogCQl9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9idHJmc19pbm9kZS5oIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAppbmRleCA5M2IxYWE5Li41MmQ3ZWNhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9idHJmc19pbm9kZS5oCisrKyBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKQEAgLTEyMSw5ICsxMjEsNiBAQAogCSAqLwogCXU2NCBpbmRleF9jbnQ7CiAKLQkvKiB0aGUgc3RhcnQgb2YgYmxvY2sgZ3JvdXAgcHJlZmVycmVkIGZvciBhbGxvY2F0aW9ucy4gKi8KLQl1NjQgYmxvY2tfZ3JvdXA7Ci0KIAkvKiB0aGUgZnN5bmMgbG9nIGhhcyBzb21lIGNvcm5lciBjYXNlcyB0aGF0IG1lYW4gd2UgaGF2ZSB0byBjaGVjawogCSAqIGRpcmVjdG9yaWVzIHRvIHNlZSBpZiBhbnkgdW5saW5rcyBoYXZlIGJlZW4gZG9uZSBiZWZvcmUKIAkgKiB0aGUgZGlyZWN0b3J5IHdhcyBsb2dnZWQuICBTZWUgdHJlZS1sb2cuYyBmb3IgYWxsIHRoZQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuYyBiL2ZzL2J0cmZzL2N0cmVlLmMKaW5kZXggYjBlMThkOS4uMmU2Njc4NiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY3RyZWUuYworKysgYi9mcy9idHJmcy9jdHJlZS5jCkBAIC00Myw4ICs0Myw2IEBACiB7CiAJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CiAJcGF0aCA9IGttZW1fY2FjaGVfemFsbG9jKGJ0cmZzX3BhdGhfY2FjaGVwLCBHRlBfTk9GUyk7Ci0JaWYgKHBhdGgpCi0JCXBhdGgtPnJlYWRhID0gMTsKIAlyZXR1cm4gcGF0aDsKIH0KIApAQCAtMTIyNCwxMSArMTIyMiwxMyBAQAogCXU2NCBzZWFyY2g7CiAJdTY0IHRhcmdldDsKIAl1NjQgbnJlYWQgPSAwOworCXU2NCBnZW47CiAJaW50IGRpcmVjdGlvbiA9IHBhdGgtPnJlYWRhOwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICplYjsKIAl1MzIgbnI7CiAJdTMyIGJsb2Nrc2l6ZTsKIAl1MzIgbnNjYW4gPSAwOworCWJvb2wgbWFwID0gdHJ1ZTsKIAogCWlmIChsZXZlbCAhPSAxKQogCQlyZXR1cm47CkBAIC0xMjUwLDcgKzEyNTAsMTkgQEAKIAogCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhub2RlKTsKIAluciA9IHNsb3Q7CisJaWYgKG5vZGUtPm1hcF90b2tlbiB8fCBwYXRoLT5za2lwX2xvY2tpbmcpCisJCW1hcCA9IGZhbHNlOworCiAJd2hpbGUgKDEpIHsKKwkJaWYgKG1hcCAmJiAhbm9kZS0+bWFwX3Rva2VuKSB7CisJCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGJ0cmZzX25vZGVfa2V5X3B0cl9vZmZzZXQobnIpOworCQkJbWFwX3ByaXZhdGVfZXh0ZW50X2J1ZmZlcihub2RlLCBvZmZzZXQsCisJCQkJCQkgIHNpemVvZihzdHJ1Y3QgYnRyZnNfa2V5X3B0ciksCisJCQkJCQkgICZub2RlLT5tYXBfdG9rZW4sCisJCQkJCQkgICZub2RlLT5rYWRkciwKKwkJCQkJCSAgJm5vZGUtPm1hcF9zdGFydCwKKwkJCQkJCSAgJm5vZGUtPm1hcF9sZW4sIEtNX1VTRVIxKTsKKwkJfQogCQlpZiAoZGlyZWN0aW9uIDwgMCkgewogCQkJaWYgKG5yID09IDApCiAJCQkJYnJlYWs7CkBAIC0xMjY4LDE0ICsxMjgwLDIzIEBACiAJCXNlYXJjaCA9IGJ0cmZzX25vZGVfYmxvY2twdHIobm9kZSwgbnIpOwogCQlpZiAoKHNlYXJjaCA8PSB0YXJnZXQgJiYgdGFyZ2V0IC0gc2VhcmNoIDw9IDY1NTM2KSB8fAogCQkgICAgKHNlYXJjaCA+IHRhcmdldCAmJiBzZWFyY2ggLSB0YXJnZXQgPD0gNjU1MzYpKSB7Ci0JCQlyZWFkYWhlYWRfdHJlZV9ibG9jayhyb290LCBzZWFyY2gsIGJsb2Nrc2l6ZSwKLQkJCQkgICAgIGJ0cmZzX25vZGVfcHRyX2dlbmVyYXRpb24obm9kZSwgbnIpKTsKKwkJCWdlbiA9IGJ0cmZzX25vZGVfcHRyX2dlbmVyYXRpb24obm9kZSwgbnIpOworCQkJaWYgKG1hcCAmJiBub2RlLT5tYXBfdG9rZW4pIHsKKwkJCQl1bm1hcF9leHRlbnRfYnVmZmVyKG5vZGUsIG5vZGUtPm1hcF90b2tlbiwKKwkJCQkJCSAgICBLTV9VU0VSMSk7CisJCQkJbm9kZS0+bWFwX3Rva2VuID0gTlVMTDsKKwkJCX0KKwkJCXJlYWRhaGVhZF90cmVlX2Jsb2NrKHJvb3QsIHNlYXJjaCwgYmxvY2tzaXplLCBnZW4pOwogCQkJbnJlYWQgKz0gYmxvY2tzaXplOwogCQl9CiAJCW5zY2FuKys7CiAJCWlmICgobnJlYWQgPiA2NTUzNiB8fCBuc2NhbiA+IDMyKSkKIAkJCWJyZWFrOwogCX0KKwlpZiAobWFwICYmIG5vZGUtPm1hcF90b2tlbikgeworCQl1bm1hcF9leHRlbnRfYnVmZmVyKG5vZGUsIG5vZGUtPm1hcF90b2tlbiwgS01fVVNFUjEpOworCQlub2RlLT5tYXBfdG9rZW4gPSBOVUxMOworCX0KIH0KIAogLyoKQEAgLTE2NDgsOSArMTY2OSw2IEBACiAJCX0KIGNvd19kb25lOgogCQlCVUdfT04oIWNvdyAmJiBpbnNfbGVuKTsKLQkJaWYgKGxldmVsICE9IGJ0cmZzX2hlYWRlcl9sZXZlbChiKSkKLQkJCVdBUk5fT04oMSk7Ci0JCWxldmVsID0gYnRyZnNfaGVhZGVyX2xldmVsKGIpOwogCiAJCXAtPm5vZGVzW2xldmVsXSA9IGI7CiAJCWlmICghcC0+c2tpcF9sb2NraW5nKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuaCBiL2ZzL2J0cmZzL2N0cmVlLmgKaW5kZXggNmMwOTNmYTkuLjM3OGI1YjQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmgKKysrIGIvZnMvYnRyZnMvY3RyZWUuaApAQCAtOTMwLDcgKzkzMCw2IEBACiAJICogaXMgcmVxdWlyZWQgaW5zdGVhZCBvZiB0aGUgZmFzdGVyIHNob3J0IGZzeW5jIGxvZyBjb21taXRzCiAJICovCiAJdTY0IGxhc3RfdHJhbnNfbG9nX2Z1bGxfY29tbWl0OwotCXU2NCBvcGVuX2lvY3RsX3RyYW5zOwogCXVuc2lnbmVkIGxvbmcgbW91bnRfb3B0OjIwOwogCXVuc2lnbmVkIGxvbmcgY29tcHJlc3NfdHlwZTo0OwogCXU2NCBtYXhfaW5saW5lOwpAQCAtOTQ3LDcgKzk0Niw2IEBACiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlzdHJ1Y3QgaW5vZGUgKmJ0cmVlX2lub2RlOwogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGJkaTsKLQlzdHJ1Y3QgbXV0ZXggdHJhbnNfbXV0ZXg7CiAJc3RydWN0IG11dGV4IHRyZWVfbG9nX211dGV4OwogCXN0cnVjdCBtdXRleCB0cmFuc2FjdGlvbl9rdGhyZWFkX211dGV4OwogCXN0cnVjdCBtdXRleCBjbGVhbmVyX211dGV4OwpAQCAtOTY4LDYgKzk2Niw3IEBACiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBzdWJ2b2xfc2VtOwogCXN0cnVjdCBzcmN1X3N0cnVjdCBzdWJ2b2xfc3JjdTsKIAorCXNwaW5sb2NrX3QgdHJhbnNfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRyYW5zX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBoYXNoZXJzOwogCXN0cnVjdCBsaXN0X2hlYWQgZGVhZF9yb290czsKQEAgLTk4MCw2ICs5NzksNyBAQAogCWF0b21pY190IGFzeW5jX3N1Ym1pdF9kcmFpbmluZzsKIAlhdG9taWNfdCBucl9hc3luY19iaW9zOwogCWF0b21pY190IGFzeW5jX2RlbGFsbG9jX3BhZ2VzOworCWF0b21pY190IG9wZW5faW9jdGxfdHJhbnM7CiAKIAkvKgogCSAqIHRoaXMgaXMgdXNlZCBieSB0aGUgYmFsYW5jaW5nIGNvZGUgdG8gd2FpdCBmb3IgYWxsIHRoZSBwZW5kaW5nCkBAIC0xMDQ0LDYgKzEwNDQsNyBAQAogCWludCBjbG9zaW5nOwogCWludCBsb2dfcm9vdF9yZWNvdmVyaW5nOwogCWludCBlbm9zcGNfdW5saW5rOworCWludCB0cmFuc19ub19qb2luOwogCiAJdTY0IHRvdGFsX3Bpbm5lZDsKIApAQCAtMTA2NSw3ICsxMDY2LDYgQEAKIAlzdHJ1Y3QgcmVsb2NfY29udHJvbCAqcmVsb2NfY3RsOwogCiAJc3BpbmxvY2tfdCBkZWxhbGxvY19sb2NrOwotCXNwaW5sb2NrX3QgbmV3X3RyYW5zX2xvY2s7CiAJdTY0IGRlbGFsbG9jX2J5dGVzOwogCiAJLyogZGF0YV9hbGxvY19jbHVzdGVyIGlzIG9ubHkgdXNlZCBpbiBzc2QgbW9kZSAqLwpAQCAtMTM0MCw2ICsxMzQwLDcgQEAKICNkZWZpbmUgQlRSRlNfTU9VTlRfVVNFUl9TVUJWT0xfUk1fQUxMT1dFRCAoMSA8PCAxNCkKICNkZWZpbmUgQlRSRlNfTU9VTlRfRU5PU1BDX0RFQlVHCSAoMSA8PCAxNSkKICNkZWZpbmUgQlRSRlNfTU9VTlRfQVVUT19ERUZSQUcJCSgxIDw8IDE2KQorI2RlZmluZSBCVFJGU19NT1VOVF9JTk9ERV9NQVBfQ0FDSEUJKDEgPDwgMTcpCiAKICNkZWZpbmUgYnRyZnNfY2xlYXJfb3B0KG8sIG9wdCkJCSgobykgJj0gfkJUUkZTX01PVU5UXyMjb3B0KQogI2RlZmluZSBidHJmc19zZXRfb3B0KG8sIG9wdCkJCSgobykgfD0gQlRSRlNfTU9VTlRfIyNvcHQpCkBAIC0yMjM4LDYgKzIyMzksOSBAQAogdm9pZCBidHJmc19ibG9ja19yc3ZfcmVsZWFzZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCSAgICAgc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqYmxvY2tfcnN2LAogCQkJICAgICB1NjQgbnVtX2J5dGVzKTsKK2ludCBidHJmc190cnVuY2F0ZV9yZXNlcnZlX21ldGFkYXRhKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgICAgc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqcnN2KTsKIGludCBidHJmc19zZXRfYmxvY2tfZ3JvdXBfcm8oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkgICAgIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqY2FjaGUpOwogaW50IGJ0cmZzX3NldF9ibG9ja19ncm91cF9ydyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKQEAgLTIzNTAsNiArMjM1NCwxNSBAQAogCQkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbm9kZSwKIAkJCXN0cnVjdCBleHRlbnRfYnVmZmVyICpwYXJlbnQpOworc3RhdGljIGlubGluZSBpbnQgYnRyZnNfZnNfY2xvc2luZyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbykKK3sKKwkvKgorCSAqIEdldCBzeW5jZWQgd2l0aCBjbG9zZV9jdHJlZSgpCisJICovCisJc21wX21iKCk7CisJcmV0dXJuIGZzX2luZm8tPmNsb3Npbmc7Cit9CisKIC8qIHJvb3QtaXRlbS5jICovCiBpbnQgYnRyZnNfZmluZF9yb290X3JlZihzdHJ1Y3QgYnRyZnNfcm9vdCAqdHJlZV9yb290LAogCQkJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCkBAIC0yNTEyLDggKzI1MjUsNyBAQAogaW50IGJ0cmZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCSAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogaW50IGJ0cmZzX2NyZWF0ZV9zdWJ2b2xfcm9vdChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCSAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKm5ld19yb290LAotCQkJICAgICB1NjQgbmV3X2RpcmlkLCB1NjQgYWxsb2NfaGludCk7CisJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpuZXdfcm9vdCwgdTY0IG5ld19kaXJpZCk7CiBpbnQgYnRyZnNfbWVyZ2VfYmlvX2hvb2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJIHNpemVfdCBzaXplLCBzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGxvbmcgYmlvX2ZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGVsYXllZC1pbm9kZS5jIGIvZnMvYnRyZnMvZGVsYXllZC1pbm9kZS5jCmluZGV4IDAxZTI5NTAuLjY0NjJjMjkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2RlbGF5ZWQtaW5vZGUuYworKysgYi9mcy9idHJmcy9kZWxheWVkLWlub2RlLmMKQEAgLTY3OCw2ICs2NzgsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZoZWFkKTsKIAogCW5leHQgPSBpdGVtOworCW5pdGVtcyA9IDA7CiAKIAkvKgogCSAqIGNvdW50IHRoZSBudW1iZXIgb2YgdGhlIGNvbnRpbnVvdXMgaXRlbXMgdGhhdCB3ZSBjYW4gaW5zZXJ0IGluIGJhdGNoCkBAIC0xMTI5LDcgKzExMzAsNyBAQAogCWRlbGF5ZWRfbm9kZSA9IGFzeW5jX25vZGUtPmRlbGF5ZWRfbm9kZTsKIAlyb290ID0gZGVsYXllZF9ub2RlLT5yb290OwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJZ290byBmcmVlX3BhdGg7CiAKQEAgLTE1NzIsOCArMTU3Myw3IEBACiAJYnRyZnNfc2V0X3N0YWNrX2lub2RlX3RyYW5zaWQoaW5vZGVfaXRlbSwgdHJhbnMtPnRyYW5zaWQpOwogCWJ0cmZzX3NldF9zdGFja19pbm9kZV9yZGV2KGlub2RlX2l0ZW0sIGlub2RlLT5pX3JkZXYpOwogCWJ0cmZzX3NldF9zdGFja19pbm9kZV9mbGFncyhpbm9kZV9pdGVtLCBCVFJGU19JKGlub2RlKS0+ZmxhZ3MpOwotCWJ0cmZzX3NldF9zdGFja19pbm9kZV9ibG9ja19ncm91cChpbm9kZV9pdGVtLAotCQkJCQkgIEJUUkZTX0koaW5vZGUpLT5ibG9ja19ncm91cCk7CisJYnRyZnNfc2V0X3N0YWNrX2lub2RlX2Jsb2NrX2dyb3VwKGlub2RlX2l0ZW0sIDApOwogCiAJYnRyZnNfc2V0X3N0YWNrX3RpbWVzcGVjX3NlYyhidHJmc19pbm9kZV9hdGltZShpbm9kZV9pdGVtKSwKIAkJCQkgICAgIGlub2RlLT5pX2F0aW1lLnR2X3NlYyk7CkBAIC0xNTk1LDcgKzE1OTUsNyBAQAogCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBidHJmc19kZWxheWVkX25vZGUgKmRlbGF5ZWRfbm9kZTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJZGVsYXllZF9ub2RlID0gYnRyZnNfZ2V0X29yX2NyZWF0ZV9kZWxheWVkX25vZGUoaW5vZGUpOwogCWlmIChJU19FUlIoZGVsYXllZF9ub2RlKSkKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpc2staW8uYyBiL2ZzL2J0cmZzL2Rpc2staW8uYwppbmRleCA5OGI2YTcxLi45ZjY4YzY4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9kaXNrLWlvLmMKKysrIGIvZnMvYnRyZnMvZGlzay1pby5jCkBAIC0xNTA1LDI0ICsxNTA1LDI0IEBACiAJCXZmc19jaGVja19mcm96ZW4ocm9vdC0+ZnNfaW5mby0+c2IsIFNCX0ZSRUVaRV9XUklURSk7CiAJCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX2t0aHJlYWRfbXV0ZXgpOwogCi0JCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOworCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCQljdXIgPSByb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uOwogCQlpZiAoIWN1cikgewotCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm5ld190cmFuc19sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJCWdvdG8gc2xlZXA7CiAJCX0KIAogCQlub3cgPSBnZXRfc2Vjb25kcygpOwogCQlpZiAoIWN1ci0+YmxvY2tlZCAmJgogCQkgICAgKG5vdyA8IGN1ci0+c3RhcnRfdGltZSB8fCBub3cgLSBjdXItPnN0YXJ0X3RpbWUgPCAzMCkpIHsKLQkJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CisJCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJCQlkZWxheSA9IEhaICogNTsKIAkJCWdvdG8gc2xlZXA7CiAJCX0KIAkJdHJhbnNpZCA9IGN1ci0+dHJhbnNpZDsKLQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm5ld190cmFuc19sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCi0JCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCWlmICh0cmFuc2lkID09IHRyYW5zLT50cmFuc2lkKSB7CiAJCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwpAQCAtMTYxMyw3ICsxNjEzLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmZnNfaW5mby0+b3JkZXJlZF9vcGVyYXRpb25zKTsKIAlJTklUX0xJU1RfSEVBRCgmZnNfaW5mby0+Y2FjaGluZ19ibG9ja19ncm91cHMpOwogCXNwaW5fbG9ja19pbml0KCZmc19pbmZvLT5kZWxhbGxvY19sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZmc19pbmZvLT50cmFuc19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+cmVmX2NhY2hlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZmc19pbmZvLT5mc19yb290c19yYWRpeF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+ZGVsYXllZF9pcHV0X2xvY2spOwpAQCAtMTY0NSw2ICsxNjQ1LDcgQEAKIAlmc19pbmZvLT5tYXhfaW5saW5lID0gODE5MiAqIDEwMjQ7CiAJZnNfaW5mby0+bWV0YWRhdGFfcmF0aW8gPSAwOwogCWZzX2luZm8tPmRlZnJhZ19pbm9kZXMgPSBSQl9ST09UOworCWZzX2luZm8tPnRyYW5zX25vX2pvaW4gPSAwOwogCiAJZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsCiAJCQkJCSAgbnVtX29ubGluZV9jcHVzKCkgKyAyLCA4KTsKQEAgLTE2NjcsOCArMTY2OCw2IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZnNfaW5mby0+c2NydWJfcGF1c2Vfd2FpdCk7CiAJaW5pdF9yd3NlbSgmZnNfaW5mby0+c2NydWJfc3VwZXJfbG9jayk7CiAJZnNfaW5mby0+c2NydWJfd29ya2Vyc19yZWZjbnQgPSAwOwotCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+c2NydWJfd29ya2VycywgInNjcnViIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAKIAlzYi0+c19ibG9ja3NpemUgPSA0MDk2OwogCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gYmxrc2l6ZV9iaXRzKDQwOTYpOwpAQCAtMTcwOSw3ICsxNzA4LDYgQEAKIAlmc19pbmZvLT5kb19iYXJyaWVycyA9IDE7CiAKIAotCW11dGV4X2luaXQoJmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT5vcmRlcmVkX29wZXJhdGlvbnNfbXV0ZXgpOwogCW11dGV4X2luaXQoJmZzX2luZm8tPnRyZWVfbG9nX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT5jaHVua19tdXRleCk7CkBAIC0yNDc5LDEzICsyNDc3LDEzIEBACiAJZG93bl93cml0ZSgmcm9vdC0+ZnNfaW5mby0+Y2xlYW51cF93b3JrX3NlbSk7CiAJdXBfd3JpdGUoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJQlVHX09OKHJldCk7CiAJLyogcnVuIGNvbW1pdCBhZ2FpbiB0byBkcm9wIHRoZSBvcmlnaW5hbCBzbmFwc2hvdCAqLwotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpCiAJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwpAQCAtMjkxMSw5ICsyOTA5LDggQEAKIAogCUlOSVRfTElTVF9IRUFEKCZzcGxpY2UpOwogCi0JbGlzdF9zcGxpY2VfaW5pdCgmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfaW5vZGVzLCAmc3BsaWNlKTsKLQogCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CisJbGlzdF9zcGxpY2VfaW5pdCgmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfaW5vZGVzLCAmc3BsaWNlKTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmc3BsaWNlKSkgewogCQlidHJmc19pbm9kZSA9IGxpc3RfZW50cnkoc3BsaWNlLm5leHQsIHN0cnVjdCBidHJmc19pbm9kZSwKQEAgLTMwMjQsMTAgKzMwMjEsMTMgQEAKIAogCVdBUk5fT04oMSk7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fa3RocmVhZF9tdXRleCk7CiAKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCWxpc3Rfc3BsaWNlX2luaXQoJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xpc3QsICZsaXN0KTsKKwlyb290LT5mc19pbmZvLT50cmFuc19ub19qb2luID0gMTsKKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxpc3QpKSB7CiAJCXQgPSBsaXN0X2VudHJ5KGxpc3QubmV4dCwgc3RydWN0IGJ0cmZzX3RyYW5zYWN0aW9uLCBsaXN0KTsKIAkJaWYgKCF0KQpAQCAtMzA1MiwyMyArMzA1MiwxOCBAQAogCQl0LT5ibG9ja2VkID0gMDsKIAkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQpKQogCQkJd2FrZV91cCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCk7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCi0JCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJdC0+Y29tbWl0X2RvbmUgPSAxOwogCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmdC0+Y29tbWl0X3dhaXQpKQogCQkJd2FrZV91cCgmdC0+Y29tbWl0X3dhaXQpOwotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAkJYnRyZnNfZGVzdHJveV9wZW5kaW5nX3NuYXBzaG90cyh0KTsKIAogCQlidHJmc19kZXN0cm95X2RlbGFsbG9jX2lub2Rlcyhyb290KTsKIAotCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPm5ld190cmFuc19sb2NrKTsKKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbiA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAogCQlidHJmc19kZXN0cm95X21hcmtlZF9leHRlbnRzKHJvb3QsICZ0LT5kaXJ0eV9wYWdlcywKIAkJCQkJICAgICBFWFRFTlRfRElSVFkpOwpAQCAtMzA4Miw4ICszMDc3LDEwIEBACiAJCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc2FjdGlvbl9jYWNoZXAsIHQpOwogCX0KIAorCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisJcm9vdC0+ZnNfaW5mby0+dHJhbnNfbm9fam9pbiA9IDA7CisJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fa3RocmVhZF9tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCmluZGV4IDE2OWJkNjIuLmI0MmVmYzIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJICovCiAJcGF0aC0+c2tpcF9sb2NraW5nID0gMTsKIAlwYXRoLT5zZWFyY2hfY29tbWl0X3Jvb3QgPSAxOwotCXBhdGgtPnJlYWRhID0gMjsKKwlwYXRoLT5yZWFkYSA9IDE7CiAKIAlrZXkub2JqZWN0aWQgPSBsYXN0OwogCWtleS5vZmZzZXQgPSAwOwpAQCAtMzY2LDggKzM2Niw3IEBACiAJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpOwogCiAJd2hpbGUgKDEpIHsKLQkJc21wX21iKCk7Ci0JCWlmIChmc19pbmZvLT5jbG9zaW5nID4gMSkgeworCQlpZiAoYnRyZnNfZnNfY2xvc2luZyhmc19pbmZvKSA+IDEpIHsKIAkJCWxhc3QgPSAodTY0KS0xOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM3OSwxNSArMzc4LDE4IEBACiAJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCi0JCQljYWNoaW5nX2N0bC0+cHJvZ3Jlc3MgPSBsYXN0OwotCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHBhdGgpOwotCQkJdXBfcmVhZCgmZnNfaW5mby0+ZXh0ZW50X2NvbW1pdF9zZW0pOwotCQkJbXV0ZXhfdW5sb2NrKCZjYWNoaW5nX2N0bC0+bXV0ZXgpOwotCQkJaWYgKGJ0cmZzX3RyYW5zYWN0aW9uX2luX2NvbW1pdChmc19pbmZvKSkKLQkJCQlzY2hlZHVsZV90aW1lb3V0KDEpOwotCQkJZWxzZQorCQkJaWYgKG5lZWRfcmVzY2hlZCgpIHx8CisJCQkgICAgYnRyZnNfbmV4dF9sZWFmKGV4dGVudF9yb290LCBwYXRoKSkgeworCQkJCWNhY2hpbmdfY3RsLT5wcm9ncmVzcyA9IGxhc3Q7CisJCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHBhdGgpOworCQkJCXVwX3JlYWQoJmZzX2luZm8tPmV4dGVudF9jb21taXRfc2VtKTsKKwkJCQltdXRleF91bmxvY2soJmNhY2hpbmdfY3RsLT5tdXRleCk7CiAJCQkJY29uZF9yZXNjaGVkKCk7Ci0JCQlnb3RvIGFnYWluOworCQkJCWdvdG8gYWdhaW47CisJCQl9CisJCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07CisJCQlucml0ZW1zID0gYnRyZnNfaGVhZGVyX25yaXRlbXMobGVhZik7CisJCQljb250aW51ZTsKIAkJfQogCiAJCWlmIChrZXkub2JqZWN0aWQgPCBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkKSB7CkBAIC0zMDY1LDcgKzMwNjcsNyBAQAogCQkJc3Bpbl91bmxvY2soJmRhdGFfc2luZm8tPmxvY2spOwogYWxsb2M6CiAJCQlhbGxvY190YXJnZXQgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCAxKTsKLQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJCWlmIChJU19FUlIodHJhbnMpKQogCQkJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIApAQCAtMzA4NywxMyArMzA4OSwyMSBAQAogCQkJfQogCQkJZ290byBhZ2FpbjsKIAkJfQorCisJCS8qCisJCSAqIElmIHdlIGhhdmUgbGVzcyBwaW5uZWQgYnl0ZXMgdGhhbiB3ZSB3YW50IHRvIGFsbG9jYXRlIHRoZW4KKwkJICogZG9uJ3QgYm90aGVyIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uLCBpdCB3b24ndCBoZWxwIHVzLgorCQkgKi8KKwkJaWYgKGRhdGFfc2luZm8tPmJ5dGVzX3Bpbm5lZCA8IGJ5dGVzKQorCQkJY29tbWl0dGVkID0gMTsKIAkJc3Bpbl91bmxvY2soJmRhdGFfc2luZm8tPmxvY2spOwogCiAJCS8qIGNvbW1pdCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgdHJ5IGFnYWluICovCiBjb21taXRfdHJhbnM6Ci0JCWlmICghY29tbWl0dGVkICYmICFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSB7CisJCWlmICghY29tbWl0dGVkICYmCisJCSAgICAhYXRvbWljX3JlYWQoJnJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpKSB7CiAJCQljb21taXR0ZWQgPSAxOwotCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCQkJaWYgKElTX0VSUih0cmFucykpCiAJCQkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKQEAgLTM0NzIsNyArMzQ4Miw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gLUVOT1NQQzsKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKQogCQlnb3RvIG91dDsKIAlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwpAQCAtMzY5OSw3ICszNzA5LDcgQEAKIAkJaWYgKHRyYW5zKQogCQkJcmV0dXJuIC1FQUdBSU47CiAKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJcmV0dXJuIDA7CkBAIC0zODM3LDYgKzM4NDcsMzcgQEAKIAlXQVJOX09OKGZzX2luZm8tPmNodW5rX2Jsb2NrX3Jzdi5yZXNlcnZlZCA+IDApOwogfQogCitpbnQgYnRyZnNfdHJ1bmNhdGVfcmVzZXJ2ZV9tZXRhZGF0YShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJICAgIHN0cnVjdCBidHJmc19ibG9ja19yc3YgKnJzdikKK3sKKwlzdHJ1Y3QgYnRyZnNfYmxvY2tfcnN2ICp0cmFuc19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+dHJhbnNfYmxvY2tfcnN2OworCXU2NCBudW1fYnl0ZXM7CisJaW50IHJldDsKKworCS8qCisJICogVHJ1bmNhdGUgc2hvdWxkIGJlIGZyZWVpbmcgZGF0YSwgYnV0IGdpdmUgdXMgMiBpdGVtcyBqdXN0IGluIGNhc2UgaXQKKwkgKiBuZWVkcyB0byB1c2Ugc29tZSBzcGFjZS4gIFdlIG1heSB3YW50IHRvIGJlIHNtYXJ0ZXIgYWJvdXQgdGhpcyBpbiB0aGUKKwkgKiBmdXR1cmUuCisJICovCisJbnVtX2J5dGVzID0gYnRyZnNfY2FsY190cmFuc19tZXRhZGF0YV9zaXplKHJvb3QsIDIpOworCisJLyogV2UgYWxyZWFkeSBoYXZlIGVub3VnaCBieXRlcywganVzdCByZXR1cm4gKi8KKwlpZiAocnN2LT5yZXNlcnZlZCA+PSBudW1fYnl0ZXMpCisJCXJldHVybiAwOworCisJbnVtX2J5dGVzIC09IHJzdi0+cmVzZXJ2ZWQ7CisKKwkvKgorCSAqIFlvdSBzaG91bGQgaGF2ZSByZXNlcnZlZCBlbm91Z2ggc3BhY2UgYmVmb3JlIGhhbmQgdG8gZG8gdGhpcywgc28gdGhpcworCSAqIHNob3VsZCBub3QgZmFpbC4KKwkgKi8KKwlyZXQgPSBibG9ja19yc3ZfbWlncmF0ZV9ieXRlcyh0cmFuc19yc3YsIHJzdiwgbnVtX2J5dGVzKTsKKwlCVUdfT04ocmV0KTsKKworCXJldHVybiAwOworfQorCiBpbnQgYnRyZnNfdHJhbnNfcmVzZXJ2ZV9tZXRhZGF0YShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJIGludCBudW1faXRlbXMpCkBAIC0zODc3LDIzICszOTE4LDE4IEBACiAJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqZHN0X3JzdiA9IHJvb3QtPm9ycGhhbl9ibG9ja19yc3Y7CiAKIAkvKgotCSAqIG9uZSBmb3IgZGVsZXRpbmcgb3JwaGFuIGl0ZW0sIG9uZSBmb3IgdXBkYXRpbmcgaW5vZGUgYW5kCi0JICogdHdvIGZvciBjYWxsaW5nIGJ0cmZzX3RydW5jYXRlX2lub2RlX2l0ZW1zLgotCSAqCi0JICogYnRyZnNfdHJ1bmNhdGVfaW5vZGVfaXRlbXMgaXMgYSBkZWxldGUgb3BlcmF0aW9uLCBpdCBmcmVlcwotCSAqIG1vcmUgc3BhY2UgdGhhbiBpdCB1c2VzIGluIG1vc3QgY2FzZXMuIFNvIHR3byB1bml0cyBvZgotCSAqIG1ldGFkYXRhIHNwYWNlIHNob3VsZCBiZSBlbm91Z2ggZm9yIGNhbGxpbmcgaXQgbWFueSB0aW1lcy4KLQkgKiBJZiBhbGwgb2YgdGhlIG1ldGFkYXRhIHNwYWNlIGlzIHVzZWQsIHdlIGNhbiBjb21taXQKLQkgKiB0cmFuc2FjdGlvbiBhbmQgdXNlIHNwYWNlIGl0IGZyZWVkLgorCSAqIFdlIG5lZWQgdG8gaG9sZCBzcGFjZSBpbiBvcmRlciB0byBkZWxldGUgb3VyIG9ycGhhbiBpdGVtIG9uY2Ugd2UndmUKKwkgKiBhZGRlZCBpdCwgc28gdGhpcyB0YWtlcyB0aGUgcmVzZXJ2YXRpb24gc28gd2UgY2FuIHJlbGVhc2UgaXQgbGF0ZXIKKwkgKiB3aGVuIHdlIGFyZSB0cnVseSBkb25lIHdpdGggdGhlIG9ycGhhbiBpdGVtLgogCSAqLwotCXU2NCBudW1fYnl0ZXMgPSBidHJmc19jYWxjX3RyYW5zX21ldGFkYXRhX3NpemUocm9vdCwgNCk7CisJdTY0IG51bV9ieXRlcyA9IGJ0cmZzX2NhbGNfdHJhbnNfbWV0YWRhdGFfc2l6ZShyb290LCAxKTsKIAlyZXR1cm4gYmxvY2tfcnN2X21pZ3JhdGVfYnl0ZXMoc3JjX3JzdiwgZHN0X3JzdiwgbnVtX2J5dGVzKTsKIH0KIAogdm9pZCBidHJmc19vcnBoYW5fcmVsZWFzZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7Ci0JdTY0IG51bV9ieXRlcyA9IGJ0cmZzX2NhbGNfdHJhbnNfbWV0YWRhdGFfc2l6ZShyb290LCA0KTsKKwl1NjQgbnVtX2J5dGVzID0gYnRyZnNfY2FsY190cmFuc19tZXRhZGF0YV9zaXplKHJvb3QsIDEpOwogCWJ0cmZzX2Jsb2NrX3Jzdl9yZWxlYXNlKHJvb3QsIHJvb3QtPm9ycGhhbl9ibG9ja19yc3YsIG51bV9ieXRlcyk7CiB9CiAKQEAgLTQ5ODcsNiArNTAyMywxNSBAQAogCQlpZiAodW5saWtlbHkoYmxvY2tfZ3JvdXAtPnJvKSkKIAkJCWdvdG8gbG9vcDsKIAorCQlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2N0bC0+dHJlZV9sb2NrKTsKKwkJaWYgKGNhY2hlZCAmJgorCQkgICAgYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfY3RsLT5mcmVlX3NwYWNlIDwKKwkJICAgIG51bV9ieXRlcyArIGVtcHR5X3NpemUpIHsKKwkJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9jdGwtPnRyZWVfbG9jayk7CisJCQlnb3RvIGxvb3A7CisJCX0KKwkJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2N0bC0+dHJlZV9sb2NrKTsKKwogCQkvKgogCQkgKiBPayB3ZSB3YW50IHRvIHRyeSBhbmQgdXNlIHRoZSBjbHVzdGVyIGFsbG9jYXRvciwgc28gbGV0cyBsb29rCiAJCSAqIHRoZXJlLCB1bmxlc3Mgd2UgYXJlIG9uIExPT1BfTk9fRU1QVFlfU0laRSwgc2luY2Ugd2Ugd2lsbApAQCAtNTE1MCw2ICs1MTk1LDcgQEAKIAkJCWJ0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsCiAJCQkJCSAgICAgc2VhcmNoX3N0YXJ0IC0gb2Zmc2V0KTsKIAkJQlVHX09OKG9mZnNldCA+IHNlYXJjaF9zdGFydCk7CisJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJCWJyZWFrOwogbG9vcDoKIAkJZmFpbGVkX2NsdXN0ZXJfcmVmaWxsID0gZmFsc2U7CkBAIC01MTcyLDkgKzUyMTgsNyBAQAogCSAqIExPT1BfTk9fRU1QVFlfU0laRSwgc2V0IGVtcHR5X3NpemUgYW5kIGVtcHR5X2NsdXN0ZXIgdG8gMCBhbmQgdHJ5CiAJICoJCQlhZ2FpbgogCSAqLwotCWlmICghaW5zLT5vYmplY3RpZCAmJiBsb29wIDwgTE9PUF9OT19FTVBUWV9TSVpFICYmCi0JICAgIChmb3VuZF91bmNhY2hlZF9iZyB8fCBlbXB0eV9zaXplIHx8IGVtcHR5X2NsdXN0ZXIgfHwKLQkgICAgIGFsbG93ZWRfY2h1bmtfYWxsb2MpKSB7CisJaWYgKCFpbnMtPm9iamVjdGlkICYmIGxvb3AgPCBMT09QX05PX0VNUFRZX1NJWkUpIHsKIAkJaW5kZXggPSAwOwogCQlpZiAobG9vcCA9PSBMT09QX0ZJTkRfSURFQUwgJiYgZm91bmRfdW5jYWNoZWRfYmcpIHsKIAkJCWZvdW5kX3VuY2FjaGVkX2JnID0gZmFsc2U7CkBAIC01MjE0LDQyICs1MjU4LDM5IEBACiAJCQlnb3RvIHNlYXJjaDsKIAkJfQogCi0JCWlmIChsb29wIDwgTE9PUF9DQUNISU5HX1dBSVQpIHsKLQkJCWxvb3ArKzsKLQkJCWdvdG8gc2VhcmNoOwotCQl9CisJCWxvb3ArKzsKIAogCQlpZiAobG9vcCA9PSBMT09QX0FMTE9DX0NIVU5LKSB7CisJCSAgICAgICBpZiAoYWxsb3dlZF9jaHVua19hbGxvYykgeworCQkJCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LCBudW1fYnl0ZXMgKworCQkJCQkJICAgICAyICogMTAyNCAqIDEwMjQsIGRhdGEsCisJCQkJCQkgICAgIENIVU5LX0FMTE9DX0xJTUlURUQpOworCQkJCWFsbG93ZWRfY2h1bmtfYWxsb2MgPSAwOworCQkJCWlmIChyZXQgPT0gMSkKKwkJCQkJZG9uZV9jaHVua19hbGxvYyA9IDE7CisJCQl9IGVsc2UgaWYgKCFkb25lX2NodW5rX2FsbG9jICYmCisJCQkJICAgc3BhY2VfaW5mby0+Zm9yY2VfYWxsb2MgPT0KKwkJCQkgICBDSFVOS19BTExPQ19OT19GT1JDRSkgeworCQkJCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfTElNSVRFRDsKKwkJCX0KKworCQkgICAgICAgLyoKKwkJCSogV2UgZGlkbid0IGFsbG9jYXRlIGEgY2h1bmssIGdvIGFoZWFkIGFuZCBkcm9wIHRoZQorCQkJKiBlbXB0eSBzaXplIGFuZCBsb29wIGFnYWluLgorCQkJKi8KKwkJICAgICAgIGlmICghZG9uZV9jaHVua19hbGxvYykKKwkJCSAgICAgICBsb29wID0gTE9PUF9OT19FTVBUWV9TSVpFOworCQl9CisKKwkJaWYgKGxvb3AgPT0gTE9PUF9OT19FTVBUWV9TSVpFKSB7CiAJCQllbXB0eV9zaXplID0gMDsKIAkJCWVtcHR5X2NsdXN0ZXIgPSAwOwogCQl9CiAKLQkJaWYgKGFsbG93ZWRfY2h1bmtfYWxsb2MpIHsKLQkJCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LCBudW1fYnl0ZXMgKwotCQkJCQkgICAgIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwKLQkJCQkJICAgICBDSFVOS19BTExPQ19MSU1JVEVEKTsKLQkJCWFsbG93ZWRfY2h1bmtfYWxsb2MgPSAwOwotCQkJZG9uZV9jaHVua19hbGxvYyA9IDE7Ci0JCX0gZWxzZSBpZiAoIWRvbmVfY2h1bmtfYWxsb2MgJiYKLQkJCSAgIHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID09IENIVU5LX0FMTE9DX05PX0ZPUkNFKSB7Ci0JCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IENIVU5LX0FMTE9DX0xJTUlURUQ7Ci0JCX0KLQotCQlpZiAobG9vcCA8IExPT1BfTk9fRU1QVFlfU0laRSkgewotCQkJbG9vcCsrOwotCQkJZ290byBzZWFyY2g7Ci0JCX0KLQkJcmV0ID0gLUVOT1NQQzsKKwkJZ290byBzZWFyY2g7CiAJfSBlbHNlIGlmICghaW5zLT5vYmplY3RpZCkgewogCQlyZXQgPSAtRU5PU1BDOwotCX0KLQotCS8qIHdlIGZvdW5kIHdoYXQgd2UgbmVlZGVkICovCi0JaWYgKGlucy0+b2JqZWN0aWQpIHsKLQkJaWYgKCEoZGF0YSAmIEJUUkZTX0JMT0NLX0dST1VQX0RBVEEpKQotCQkJdHJhbnMtPmJsb2NrX2dyb3VwID0gYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZDsKLQotCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOworCX0gZWxzZSBpZiAoaW5zLT5vYmplY3RpZCkgewogCQlyZXQgPSAwOwogCX0KIApAQCAtNjUyNiw3ICs2NTY3LDcgQEAKIAogCUJVR19PTihjYWNoZS0+cm8pOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAlhbGxvY19mbGFncyA9IHVwZGF0ZV9ibG9ja19ncm91cF9mbGFncyhyb290LCBjYWNoZS0+ZmxhZ3MpOwpAQCAtNjg4Miw2ICs2OTIzLDcgQEAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCWlmICghcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07CisJcGF0aC0+cmVhZGEgPSAxOwogCiAJY2FjaGVfZ2VuID0gYnRyZnNfc3VwZXJfY2FjaGVfZ2VuZXJhdGlvbigmcm9vdC0+ZnNfaW5mby0+c3VwZXJfY29weSk7CiAJaWYgKGNhY2hlX2dlbiAhPSAwICYmCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uYyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCmluZGV4IGM1ZDlmYmI5Li43MDU1ZDExIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uYworKysgYi9mcy9idHJmcy9leHRlbnRfaW8uYwpAQCAtMTQ3Niw3ICsxNDc2LDcgQEAKIAkJCWlmICh0b3RhbF9ieXRlcyA+PSBtYXhfYnl0ZXMpCiAJCQkJYnJlYWs7CiAJCQlpZiAoIWZvdW5kKSB7Ci0JCQkJKnN0YXJ0ID0gc3RhdGUtPnN0YXJ0OworCQkJCSpzdGFydCA9IG1heChjdXJfc3RhcnQsIHN0YXRlLT5zdGFydCk7CiAJCQkJZm91bmQgPSAxOwogCQkJfQogCQkJbGFzdCA9IHN0YXRlLT5lbmQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uaCBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCmluZGV4IDRlODQ0NWEuLmExMWE5MmUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5oCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCkBAIC0xMjYsOSArMTI2LDkgQEAKIAl1bnNpZ25lZCBsb25nIG1hcF9sZW47CiAJc3RydWN0IHBhZ2UgKmZpcnN0X3BhZ2U7CiAJdW5zaWduZWQgbG9uZyBiZmxhZ3M7Ci0JYXRvbWljX3QgcmVmczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxlYWtfbGlzdDsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CisJYXRvbWljX3QgcmVmczsKIAogCS8qIHRoZSBzcGlubG9jayBpcyB1c2VkIHRvIHByb3RlY3QgbW9zdCBvcGVyYXRpb25zICovCiAJc3BpbmxvY2tfdCBsb2NrOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IGM2YTIyZDcuLmZhNGVmMTggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCWlmICghYnRyZnNfdGVzdF9vcHQocm9vdCwgQVVUT19ERUZSQUcpKQogCQlyZXR1cm4gMDsKIAotCWlmIChyb290LT5mc19pbmZvLT5jbG9zaW5nKQorCWlmIChidHJmc19mc19jbG9zaW5nKHJvb3QtPmZzX2luZm8pKQogCQlyZXR1cm4gMDsKIAogCWlmIChCVFJGU19JKGlub2RlKS0+aW5fZGVmcmFnKQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJaWYgKCFkZWZyYWcpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGVmcmFnLT5pbm8gPSBpbm9kZS0+aV9pbm87CisJZGVmcmFnLT5pbm8gPSBidHJmc19pbm8oaW5vZGUpOwogCWRlZnJhZy0+dHJhbnNpZCA9IHRyYW5zaWQ7CiAJZGVmcmFnLT5yb290ID0gcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQ7CiAKQEAgLTIyOSw3ICsyMjksNyBAQAogCQlmaXJzdF9pbm8gPSBkZWZyYWctPmlubyArIDE7CiAJCXJiX2VyYXNlKCZkZWZyYWctPnJiX25vZGUsICZmc19pbmZvLT5kZWZyYWdfaW5vZGVzKTsKIAotCQlpZiAoZnNfaW5mby0+Y2xvc2luZykKKwkJaWYgKGJ0cmZzX2ZzX2Nsb3NpbmcoZnNfaW5mbykpCiAJCQlnb3RvIG5leHRfZnJlZTsKIAogCQlzcGluX3VubG9jaygmZnNfaW5mby0+ZGVmcmFnX2lub2Rlc19sb2NrKTsKQEAgLTE0ODAsMTQgKzE0ODAsMTIgQEAKIAkgKiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgd2UgY2FuIGJhaWwgb3V0IG5vdyB3aXRob3V0IGFueQogCSAqIHN5bmNpbmcKIAkgKi8KLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJc21wX21iKCk7CiAJaWYgKEJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zIDw9CiAJICAgIHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKSB7CiAJCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gMDsKLQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWdvdG8gb3V0OwogCX0KLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCS8qCiAJICogb2sgd2UgaGF2ZW4ndCBjb21taXR0ZWQgdGhlIHRyYW5zYWN0aW9uIHlldCwgbGV0cyBkbyBhIGNvbW1pdApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IDcwZDQ1NzkuLjlmOTg1YTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkJcmV0dXJuIGlub2RlOwogCiAJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+bG9jayk7Ci0JaWYgKCFyb290LT5mc19pbmZvLT5jbG9zaW5nKSB7CisJaWYgKCFidHJmc19mc19jbG9zaW5nKHJvb3QtPmZzX2luZm8pKSB7CiAJCWJsb2NrX2dyb3VwLT5pbm9kZSA9IGlncmFiKGlub2RlKTsKIAkJYmxvY2tfZ3JvdXAtPmlyZWYgPSAxOwogCX0KQEAgLTI1MCw3ICsyNTAsNyBAQAogCXBnb2ZmX3QgaW5kZXggPSAwOwogCXVuc2lnbmVkIGxvbmcgZmlyc3RfcGFnZV9vZmZzZXQ7CiAJaW50IG51bV9jaGVja3N1bXM7Ci0JaW50IHJldCA9IDAsIHJldDI7CisJaW50IHJldCA9IDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmYml0bWFwcyk7CiAKQEAgLTQwMiw3ICs0MDIsMTQgQEAKIAkJCQlzcGluX2xvY2soJmN0bC0+dHJlZV9sb2NrKTsKIAkJCQlyZXQgPSBsaW5rX2ZyZWVfc3BhY2UoY3RsLCBlKTsKIAkJCQlzcGluX3VubG9jaygmY3RsLT50cmVlX2xvY2spOwotCQkJCUJVR19PTihyZXQpOworCQkJCWlmIChyZXQpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJEdXBsaWNhdGUgZW50cmllcyBpbiAiCisJCQkJCSAgICAgICAiZnJlZSBzcGFjZSBjYWNoZSwgZHVtcGluZ1xuIik7CisJCQkJCWt1bm1hcChwYWdlKTsKKwkJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQkJZ290byBmcmVlX2NhY2hlOworCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJZS0+Yml0bWFwID0ga3phbGxvYyhQQUdFX0NBQ0hFX1NJWkUsIEdGUF9OT0ZTKTsKIAkJCQlpZiAoIWUtPmJpdG1hcCkgewpAQCAtNDE0LDEwICs0MjEsMTggQEAKIAkJCQkJZ290byBmcmVlX2NhY2hlOwogCQkJCX0KIAkJCQlzcGluX2xvY2soJmN0bC0+dHJlZV9sb2NrKTsKLQkJCQlyZXQyID0gbGlua19mcmVlX3NwYWNlKGN0bCwgZSk7CisJCQkJcmV0ID0gbGlua19mcmVlX3NwYWNlKGN0bCwgZSk7CiAJCQkJY3RsLT50b3RhbF9iaXRtYXBzKys7CiAJCQkJY3RsLT5vcC0+cmVjYWxjX3RocmVzaG9sZHMoY3RsKTsKIAkJCQlzcGluX3VubG9jaygmY3RsLT50cmVlX2xvY2spOworCQkJCWlmIChyZXQpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJEdXBsaWNhdGUgZW50cmllcyBpbiAiCisJCQkJCSAgICAgICAiZnJlZSBzcGFjZSBjYWNoZSwgZHVtcGluZ1xuIik7CisJCQkJCWt1bm1hcChwYWdlKTsKKwkJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQkJZ290byBmcmVlX2NhY2hlOworCQkJCX0KIAkJCQlsaXN0X2FkZF90YWlsKCZlLT5saXN0LCAmYml0bWFwcyk7CiAJCQl9CiAKQEAgLTQ3OCw4ICs0OTMsNyBAQAogCSAqIElmIHdlJ3JlIHVubW91bnRpbmcgdGhlbiBqdXN0IHJldHVybiwgc2luY2UgdGhpcyBkb2VzIGEgc2VhcmNoIG9uIHRoZQogCSAqIG5vcm1hbCByb290IGFuZCBub3QgdGhlIGNvbW1pdCByb290IGFuZCB3ZSBjb3VsZCBkZWFkbG9jay4KIAkgKi8KLQlzbXBfbWIoKTsKLQlpZiAoZnNfaW5mby0+Y2xvc2luZykKKwlpZiAoYnRyZnNfZnNfY2xvc2luZyhmc19pbmZvKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtNTc1LDEwICs1ODksMjUgQEAKIAogCW51bV9wYWdlcyA9IChpX3NpemVfcmVhZChpbm9kZSkgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PgogCQlQQUdFX0NBQ0hFX1NISUZUOworCisJLyogU2luY2UgdGhlIGZpcnN0IHBhZ2UgaGFzIGFsbCBvZiBvdXIgY2hlY2tzdW1zIGFuZCBvdXIgZ2VuZXJhdGlvbiB3ZQorCSAqIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcGFnZSB0aGF0IHdlIGNhbiBzdGFydCB3cml0aW5nCisJICogb3VyIGVudHJpZXMuCisJICovCisJZmlyc3RfcGFnZV9vZmZzZXQgPSAoc2l6ZW9mKHUzMikgKiBudW1fcGFnZXMpICsgc2l6ZW9mKHU2NCk7CisKIAlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGlub2RlLT5pX21hcHBpbmcpOwogCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSAmCiAJCQkJIH4ocm9vdC0+c2VjdG9yc2l6ZSAtIDEpLCAodTY0KS0xKTsKIAorCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyZmxvdyB0aGF0IGZpcnN0IHBhZ2UgKi8KKwlpZiAoZmlyc3RfcGFnZV9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfZW50cnkpID49IFBBR0VfQ0FDSEVfU0laRSkgeworCQkvKiB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBydW5uaW5nIG91dCBvZiBzcGFjZSwgd2hlcmUgd2UgYWxzbyByZXR1cm4gMCAqLworCQlwcmludGsoS0VSTl9DUklUICJCdHJmczogZnJlZSBzcGFjZSBjYWNoZSB3YXMgdG9vIGJpZyBmb3IgdGhlIGNyYyBwYWdlXG4iKTsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXRfdXBkYXRlOworCX0KKwogCS8qIFdlIG5lZWQgYSBjaGVja3N1bSBwZXIgcGFnZS4gKi8KIAljcmMgPSBjaGVja3N1bXMgPSBremFsbG9jKHNpemVvZih1MzIpICogbnVtX3BhZ2VzLCBHRlBfTk9GUyk7CiAJaWYgKCFjcmMpCkBAIC01OTAsMTIgKzYxOSw2IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQkvKiBTaW5jZSB0aGUgZmlyc3QgcGFnZSBoYXMgYWxsIG9mIG91ciBjaGVja3N1bXMgYW5kIG91ciBnZW5lcmF0aW9uIHdlCi0JICogbmVlZCB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCBpbnRvIHRoZSBwYWdlIHRoYXQgd2UgY2FuIHN0YXJ0IHdyaXRpbmcKLQkgKiBvdXIgZW50cmllcy4KLQkgKi8KLQlmaXJzdF9wYWdlX29mZnNldCA9IChzaXplb2YodTMyKSAqIG51bV9wYWdlcykgKyBzaXplb2YodTY0KTsKLQogCS8qIEdldCB0aGUgY2x1c3RlciBmb3IgdGhpcyBibG9ja19ncm91cCBpZiBpdCBleGlzdHMgKi8KIAlpZiAoYmxvY2tfZ3JvdXAgJiYgIWxpc3RfZW1wdHkoJmJsb2NrX2dyb3VwLT5jbHVzdGVyX2xpc3QpKQogCQljbHVzdGVyID0gbGlzdF9lbnRyeShibG9ja19ncm91cC0+Y2x1c3Rlcl9saXN0Lm5leHQsCkBAIC04NTcsMTIgKzg4MCwxNCBAQAogCXJldCA9IDE7CiAKIG91dF9mcmVlOgorCWtmcmVlKGNoZWNrc3Vtcyk7CisJa2ZyZWUocGFnZXMpOworCitvdXRfdXBkYXRlOgogCWlmIChyZXQgIT0gMSkgewogCQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCAwLCBpbmRleCk7CiAJCUJUUkZTX0koaW5vZGUpLT5nZW5lcmF0aW9uID0gMDsKIAl9Ci0Ja2ZyZWUoY2hlY2tzdW1zKTsKLQlrZnJlZShwYWdlcyk7CiAJYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk2MywxMCArOTg4LDE2IEBACiAJCQkgKiBsb2dpY2FsbHkuCiAJCQkgKi8KIAkJCWlmIChiaXRtYXApIHsKLQkJCQlXQVJOX09OKGluZm8tPmJpdG1hcCk7CisJCQkJaWYgKGluZm8tPmJpdG1hcCkgeworCQkJCQlXQVJOX09OX09OQ0UoMSk7CisJCQkJCXJldHVybiAtRUVYSVNUOworCQkJCX0KIAkJCQlwID0gJigqcCktPnJiX3JpZ2h0OwogCQkJfSBlbHNlIHsKLQkJCQlXQVJOX09OKCFpbmZvLT5iaXRtYXApOworCQkJCWlmICghaW5mby0+Yml0bWFwKSB7CisJCQkJCVdBUk5fT05fT05DRSgxKTsKKwkJCQkJcmV0dXJuIC1FRVhJU1Q7CisJCQkJfQogCQkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKIAkJCX0KIAkJfQpAQCAtMTM4Niw2ICsxNDE3LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1NjQgYWRkX2J5dGVzX3RvX2JpdG1hcChzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCwKKwkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbywgdTY0IG9mZnNldCwKKwkJCSAgICAgICB1NjQgYnl0ZXMpCit7CisJdTY0IGJ5dGVzX3RvX3NldCA9IDA7CisJdTY0IGVuZDsKKworCWVuZCA9IGluZm8tPm9mZnNldCArICh1NjQpKEJJVFNfUEVSX0JJVE1BUCAqIGN0bC0+dW5pdCk7CisKKwlieXRlc190b19zZXQgPSBtaW4oZW5kIC0gb2Zmc2V0LCBieXRlcyk7CisKKwliaXRtYXBfc2V0X2JpdHMoY3RsLCBpbmZvLCBvZmZzZXQsIGJ5dGVzX3RvX3NldCk7CisKKwlyZXR1cm4gYnl0ZXNfdG9fc2V0OworCit9CisKIHN0YXRpYyBib29sIHVzZV9iaXRtYXAoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwsCiAJCSAgICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQogewpAQCAtMTQyMiwxMiArMTQ3MCwxOCBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2Vfb3AgZnJlZV9zcGFjZV9vcCA9IHsKKwkucmVjYWxjX3RocmVzaG9sZHMJPSByZWNhbGN1bGF0ZV90aHJlc2hvbGRzLAorCS51c2VfYml0bWFwCQk9IHVzZV9iaXRtYXAsCit9OworCiBzdGF0aWMgaW50IGluc2VydF9pbnRvX2JpdG1hcChzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCwKIAkJCSAgICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpiaXRtYXBfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwID0gTlVMTDsKIAlpbnQgYWRkZWQgPSAwOwotCXU2NCBieXRlcywgb2Zmc2V0LCBlbmQ7CisJdTY0IGJ5dGVzLCBvZmZzZXQsIGJ5dGVzX2FkZGVkOwogCWludCByZXQ7CiAKIAlieXRlcyA9IGluZm8tPmJ5dGVzOwpAQCAtMTQzNiw3ICsxNDkwLDQ5IEBACiAJaWYgKCFjdGwtPm9wLT51c2VfYml0bWFwKGN0bCwgaW5mbykpCiAJCXJldHVybiAwOwogCisJaWYgKGN0bC0+b3AgPT0gJmZyZWVfc3BhY2Vfb3ApCisJCWJsb2NrX2dyb3VwID0gY3RsLT5wcml2YXRlOwogYWdhaW46CisJLyoKKwkgKiBTaW5jZSB3ZSBsaW5rIGJpdG1hcHMgcmlnaHQgaW50byB0aGUgY2x1c3RlciB3ZSBuZWVkIHRvIHNlZSBpZiB3ZQorCSAqIGhhdmUgYSBjbHVzdGVyIGhlcmUsIGFuZCBpZiBzbyBhbmQgaXQgaGFzIG91ciBiaXRtYXAgd2UgbmVlZCB0byBhZGQKKwkgKiB0aGUgZnJlZSBzcGFjZSB0byB0aGF0IGJpdG1hcC4KKwkgKi8KKwlpZiAoYmxvY2tfZ3JvdXAgJiYgIWxpc3RfZW1wdHkoJmJsb2NrX2dyb3VwLT5jbHVzdGVyX2xpc3QpKSB7CisJCXN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXI7CisJCXN0cnVjdCByYl9ub2RlICpub2RlOworCQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqZW50cnk7CisKKwkJY2x1c3RlciA9IGxpc3RfZW50cnkoYmxvY2tfZ3JvdXAtPmNsdXN0ZXJfbGlzdC5uZXh0LAorCQkJCSAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciwKKwkJCQkgICAgIGJsb2NrX2dyb3VwX2xpc3QpOworCQlzcGluX2xvY2soJmNsdXN0ZXItPmxvY2spOworCQlub2RlID0gcmJfZmlyc3QoJmNsdXN0ZXItPnJvb3QpOworCQlpZiAoIW5vZGUpIHsKKwkJCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwkJCWdvdG8gbm9fY2x1c3Rlcl9iaXRtYXA7CisJCX0KKworCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOworCQlpZiAoIWVudHJ5LT5iaXRtYXApIHsKKwkJCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwkJCWdvdG8gbm9fY2x1c3Rlcl9iaXRtYXA7CisJCX0KKworCQlpZiAoZW50cnktPm9mZnNldCA9PSBvZmZzZXRfdG9fYml0bWFwKGN0bCwgb2Zmc2V0KSkgeworCQkJYnl0ZXNfYWRkZWQgPSBhZGRfYnl0ZXNfdG9fYml0bWFwKGN0bCwgZW50cnksCisJCQkJCQkJICBvZmZzZXQsIGJ5dGVzKTsKKwkJCWJ5dGVzIC09IGJ5dGVzX2FkZGVkOworCQkJb2Zmc2V0ICs9IGJ5dGVzX2FkZGVkOworCQl9CisJCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwkJaWYgKCFieXRlcykgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCitub19jbHVzdGVyX2JpdG1hcDoKIAliaXRtYXBfaW5mbyA9IHRyZWVfc2VhcmNoX29mZnNldChjdGwsIG9mZnNldF90b19iaXRtYXAoY3RsLCBvZmZzZXQpLAogCQkJCQkgMSwgMCk7CiAJaWYgKCFiaXRtYXBfaW5mbykgewpAQCAtMTQ0NCwxOSArMTU0MCwxMCBAQAogCQlnb3RvIG5ld19iaXRtYXA7CiAJfQogCi0JZW5kID0gYml0bWFwX2luZm8tPm9mZnNldCArICh1NjQpKEJJVFNfUEVSX0JJVE1BUCAqIGN0bC0+dW5pdCk7Ci0KLQlpZiAob2Zmc2V0ID49IGJpdG1hcF9pbmZvLT5vZmZzZXQgJiYgb2Zmc2V0ICsgYnl0ZXMgPiBlbmQpIHsKLQkJYml0bWFwX3NldF9iaXRzKGN0bCwgYml0bWFwX2luZm8sIG9mZnNldCwgZW5kIC0gb2Zmc2V0KTsKLQkJYnl0ZXMgLT0gZW5kIC0gb2Zmc2V0OwotCQlvZmZzZXQgPSBlbmQ7Ci0JCWFkZGVkID0gMDsKLQl9IGVsc2UgaWYgKG9mZnNldCA+PSBiaXRtYXBfaW5mby0+b2Zmc2V0ICYmIG9mZnNldCArIGJ5dGVzIDw9IGVuZCkgewotCQliaXRtYXBfc2V0X2JpdHMoY3RsLCBiaXRtYXBfaW5mbywgb2Zmc2V0LCBieXRlcyk7Ci0JCWJ5dGVzID0gMDsKLQl9IGVsc2UgewotCQlCVUcoKTsKLQl9CisJYnl0ZXNfYWRkZWQgPSBhZGRfYnl0ZXNfdG9fYml0bWFwKGN0bCwgYml0bWFwX2luZm8sIG9mZnNldCwgYnl0ZXMpOworCWJ5dGVzIC09IGJ5dGVzX2FkZGVkOworCW9mZnNldCArPSBieXRlc19hZGRlZDsKKwlhZGRlZCA9IDA7CiAKIAlpZiAoIWJ5dGVzKSB7CiAJCXJldCA9IDE7CkBAIC0xNzM1LDExICsxODIyLDYgQEAKIAkgICAgICAgIlxuIiwgY291bnQpOwogfQogCi1zdGF0aWMgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2Vfb3AgZnJlZV9zcGFjZV9vcCA9IHsKLQkucmVjYWxjX3RocmVzaG9sZHMJPSByZWNhbGN1bGF0ZV90aHJlc2hvbGRzLAotCS51c2VfYml0bWFwCQk9IHVzZV9iaXRtYXAsCi19OwotCiB2b2lkIGJ0cmZzX2luaXRfZnJlZV9zcGFjZV9jdGwoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCkKIHsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCA9IGJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2N0bDsKQEAgLTIxMTEsOSArMjE5MywxMSBAQAogLyoKICAqIFRoaXMgc2VhcmNoZXMgdGhlIGJsb2NrIGdyb3VwIGZvciBqdXN0IGV4dGVudHMgdG8gZmlsbCB0aGUgY2x1c3RlciB3aXRoLgogICovCi1zdGF0aWMgaW50IHNldHVwX2NsdXN0ZXJfbm9fYml0bWFwKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkJICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwKLQkJCQkgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsIHU2NCBtaW5fYnl0ZXMpCitzdGF0aWMgbm9pbmxpbmUgaW50CitzZXR1cF9jbHVzdGVyX25vX2JpdG1hcChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKmJpdG1hcHMsIHU2NCBvZmZzZXQsIHU2NCBieXRlcywKKwkJCXU2NCBtaW5fYnl0ZXMpCiB7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwgPSBibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9jdGw7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmZpcnN0ID0gTlVMTDsKQEAgLTIxMzUsNiArMjIxOSw4IEBACiAJICogZXh0ZW50IGVudHJ5LgogCSAqLwogCXdoaWxlIChlbnRyeS0+Yml0bWFwKSB7CisJCWlmIChsaXN0X2VtcHR5KCZlbnRyeS0+bGlzdCkpCisJCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgYml0bWFwcyk7CiAJCW5vZGUgPSByYl9uZXh0KCZlbnRyeS0+b2Zmc2V0X2luZGV4KTsKIAkJaWYgKCFub2RlKQogCQkJcmV0dXJuIC1FTk9TUEM7CkBAIC0yMTU0LDggKzIyNDAsMTIgQEAKIAkJCXJldHVybiAtRU5PU1BDOwogCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOwogCi0JCWlmIChlbnRyeS0+Yml0bWFwKQorCQlpZiAoZW50cnktPmJpdG1hcCkgeworCQkJaWYgKGxpc3RfZW1wdHkoJmVudHJ5LT5saXN0KSkKKwkJCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgYml0bWFwcyk7CiAJCQljb250aW51ZTsKKwkJfQorCiAJCS8qCiAJCSAqIHdlIGhhdmVuJ3QgZmlsbGVkIHRoZSBlbXB0eSBzaXplIGFuZCB0aGUgd2luZG93IGlzCiAJCSAqIHZlcnkgbGFyZ2UuICByZXNldCBhbmQgdHJ5IGFnYWluCkBAIC0yMjA3LDkgKzIyOTcsMTEgQEAKICAqIFRoaXMgc3BlY2lmaWNhbGx5IGxvb2tzIGZvciBiaXRtYXBzIHRoYXQgbWF5IHdvcmsgaW4gdGhlIGNsdXN0ZXIsIHdlIGFzc3VtZQogICogdGhhdCB3ZSBoYXZlIGFscmVhZHkgZmFpbGVkIHRvIGZpbmQgZXh0ZW50cyB0aGF0IHdpbGwgd29yay4KICAqLwotc3RhdGljIGludCBzZXR1cF9jbHVzdGVyX2JpdG1hcChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJCXN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIsCi0JCQkJdTY0IG9mZnNldCwgdTY0IGJ5dGVzLCB1NjQgbWluX2J5dGVzKQorc3RhdGljIG5vaW5saW5lIGludAorc2V0dXBfY2x1c3Rlcl9iaXRtYXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyLAorCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJpdG1hcHMsIHU2NCBvZmZzZXQsIHU2NCBieXRlcywKKwkJICAgICB1NjQgbWluX2J5dGVzKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2N0bCAqY3RsID0gYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfY3RsOwogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeTsKQEAgLTIyMTksMTAgKzIzMTEsMzkgQEAKIAlpZiAoY3RsLT50b3RhbF9iaXRtYXBzID09IDApCiAJCXJldHVybiAtRU5PU1BDOwogCisJLyoKKwkgKiBGaXJzdCBjaGVjayBvdXIgY2FjaGVkIGxpc3Qgb2YgYml0bWFwcyBhbmQgc2VlIGlmIHRoZXJlIGlzIGFuIGVudHJ5CisJICogaGVyZSB0aGF0IHdpbGwgd29yay4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBiaXRtYXBzLCBsaXN0KSB7CisJCWlmIChlbnRyeS0+Ynl0ZXMgPCBtaW5fYnl0ZXMpCisJCQljb250aW51ZTsKKwkJcmV0ID0gYnRyZnNfYml0bWFwX2NsdXN0ZXIoYmxvY2tfZ3JvdXAsIGVudHJ5LCBjbHVzdGVyLCBvZmZzZXQsCisJCQkJCSAgIGJ5dGVzLCBtaW5fYnl0ZXMpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiAwOworCX0KKworCS8qCisJICogSWYgd2UgZG8gaGF2ZSBlbnRyaWVzIG9uIG91ciBsaXN0IGFuZCB3ZSBhcmUgaGVyZSB0aGVuIHdlIGRpZG4ndCBmaW5kCisJICogYW55dGhpbmcsIHNvIGdvIGFoZWFkIGFuZCBnZXQgdGhlIG5leHQgZW50cnkgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4KKwkgKiB0aGlzIGxpc3QgYW5kIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSB0aGVyZS4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoYml0bWFwcykpIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KGJpdG1hcHMtPnByZXYsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLAorCQkJCSAgIGxpc3QpOworCQlub2RlID0gcmJfbmV4dCgmZW50cnktPm9mZnNldF9pbmRleCk7CisJCWlmICghbm9kZSkKKwkJCXJldHVybiAtRU5PU1BDOworCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOworCQlnb3RvIHNlYXJjaDsKKwl9CisKIAllbnRyeSA9IHRyZWVfc2VhcmNoX29mZnNldChjdGwsIG9mZnNldF90b19iaXRtYXAoY3RsLCBvZmZzZXQpLCAwLCAxKTsKIAlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLUVOT1NQQzsKIAorc2VhcmNoOgogCW5vZGUgPSAmZW50cnktPm9mZnNldF9pbmRleDsKIAlkbyB7CiAJCWVudHJ5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIG9mZnNldF9pbmRleCk7CkBAIC0yMjUzLDYgKzIzNzQsOCBAQAogCQkJICAgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsIHU2NCBlbXB0eV9zaXplKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2N0bCAqY3RsID0gYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfY3RsOworCXN0cnVjdCBsaXN0X2hlYWQgYml0bWFwczsKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqZW50cnksICp0bXA7CiAJdTY0IG1pbl9ieXRlczsKIAlpbnQgcmV0OwogCkBAIC0yMjkxLDExICsyNDE0LDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IHNldHVwX2NsdXN0ZXJfbm9fYml0bWFwKGJsb2NrX2dyb3VwLCBjbHVzdGVyLCBvZmZzZXQsIGJ5dGVzLAotCQkJCSAgICAgIG1pbl9ieXRlcyk7CisJSU5JVF9MSVNUX0hFQUQoJmJpdG1hcHMpOworCXJldCA9IHNldHVwX2NsdXN0ZXJfbm9fYml0bWFwKGJsb2NrX2dyb3VwLCBjbHVzdGVyLCAmYml0bWFwcywgb2Zmc2V0LAorCQkJCSAgICAgIGJ5dGVzLCBtaW5fYnl0ZXMpOwogCWlmIChyZXQpCi0JCXJldCA9IHNldHVwX2NsdXN0ZXJfYml0bWFwKGJsb2NrX2dyb3VwLCBjbHVzdGVyLCBvZmZzZXQsCi0JCQkJCSAgIGJ5dGVzLCBtaW5fYnl0ZXMpOworCQlyZXQgPSBzZXR1cF9jbHVzdGVyX2JpdG1hcChibG9ja19ncm91cCwgY2x1c3RlciwgJmJpdG1hcHMsCisJCQkJCSAgIG9mZnNldCwgYnl0ZXMsIG1pbl9ieXRlcyk7CisKKwkvKiBDbGVhciBvdXIgdGVtcG9yYXJ5IGxpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJmJpdG1hcHMsIGxpc3QpCisJCWxpc3RfZGVsX2luaXQoJmVudHJ5LT5saXN0KTsKIAogCWlmICghcmV0KSB7CiAJCWF0b21pY19pbmMoJmJsb2NrX2dyb3VwLT5jb3VudCk7CkBAIC0yNDgxLDcgKzI2MDksNyBAQAogCQlyZXR1cm4gaW5vZGU7CiAKIAlzcGluX2xvY2soJnJvb3QtPmNhY2hlX2xvY2spOwotCWlmICghcm9vdC0+ZnNfaW5mby0+Y2xvc2luZykKKwlpZiAoIWJ0cmZzX2ZzX2Nsb3Npbmcocm9vdC0+ZnNfaW5mbykpCiAJCXJvb3QtPmNhY2hlX2lub2RlID0gaWdyYWIoaW5vZGUpOwogCXNwaW5fdW5sb2NrKCZyb290LT5jYWNoZV9sb2NrKTsKIApAQCAtMjUwNCwxMiArMjYzMiwxNCBAQAogCWludCByZXQgPSAwOwogCXU2NCByb290X2dlbiA9IGJ0cmZzX3Jvb3RfZ2VuZXJhdGlvbigmcm9vdC0+cm9vdF9pdGVtKTsKIAorCWlmICghYnRyZnNfdGVzdF9vcHQocm9vdCwgSU5PREVfTUFQX0NBQ0hFKSkKKwkJcmV0dXJuIDA7CisKIAkvKgogCSAqIElmIHdlJ3JlIHVubW91bnRpbmcgdGhlbiBqdXN0IHJldHVybiwgc2luY2UgdGhpcyBkb2VzIGEgc2VhcmNoIG9uIHRoZQogCSAqIG5vcm1hbCByb290IGFuZCBub3QgdGhlIGNvbW1pdCByb290IGFuZCB3ZSBjb3VsZCBkZWFkbG9jay4KIAkgKi8KLQlzbXBfbWIoKTsKLQlpZiAoZnNfaW5mby0+Y2xvc2luZykKKwlpZiAoYnRyZnNfZnNfY2xvc2luZyhmc19pbmZvKSkKIAkJcmV0dXJuIDA7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwpAQCAtMjU0Myw2ICsyNjczLDkgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCWludCByZXQ7CiAKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybiAwOworCiAJaW5vZGUgPSBsb29rdXBfZnJlZV9pbm9faW5vZGUocm9vdCwgcGF0aCk7CiAJaWYgKElTX0VSUihpbm9kZSkpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUtbWFwLmMgYi9mcy9idHJmcy9pbm9kZS1tYXAuYwppbmRleCAzMjYyY2QxLi5iNDA4N2UwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS1tYXAuYworKysgYi9mcy9idHJmcy9pbm9kZS1tYXAuYwpAQCAtMzgsNiArMzgsOSBAQAogCWludCBzbG90OwogCWludCByZXQ7CiAKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybiAwOworCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTksOCArNjIsNyBAQAogCQlnb3RvIG91dDsKIAogCXdoaWxlICgxKSB7Ci0JCXNtcF9tYigpOwotCQlpZiAoZnNfaW5mby0+Y2xvc2luZykKKwkJaWYgKGJ0cmZzX2ZzX2Nsb3NpbmcoZnNfaW5mbykpCiAJCQlnb3RvIG91dDsKIAogCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07CkBAIC0xNDEsNiArMTQzLDkgQEAKIAlpbnQgcmV0OwogCXU2NCBvYmplY3RpZDsKIAorCWlmICghYnRyZnNfdGVzdF9vcHQocm9vdCwgSU5PREVfTUFQX0NBQ0hFKSkKKwkJcmV0dXJuOworCiAJc3Bpbl9sb2NrKCZyb290LT5jYWNoZV9sb2NrKTsKIAlpZiAocm9vdC0+Y2FjaGVkICE9IEJUUkZTX0NBQ0hFX05PKSB7CiAJCXNwaW5fdW5sb2NrKCZyb290LT5jYWNoZV9sb2NrKTsKQEAgLTE3OCw2ICsxODMsOSBAQAogCiBpbnQgYnRyZnNfZmluZF9mcmVlX2lubyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0ICpvYmplY3RpZCkKIHsKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybiBidHJmc19maW5kX2ZyZWVfb2JqZWN0aWQocm9vdCwgb2JqZWN0aWQpOworCiBhZ2FpbjoKIAkqb2JqZWN0aWQgPSBidHJmc19maW5kX2lub19mb3JfYWxsb2Mocm9vdCk7CiAKQEAgLTIwMSw2ICsyMDksMTAgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCA9IHJvb3QtPmZyZWVfaW5vX2N0bDsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKnBpbm5lZCA9IHJvb3QtPmZyZWVfaW5vX3Bpbm5lZDsKKworCWlmICghYnRyZnNfdGVzdF9vcHQocm9vdCwgSU5PREVfTUFQX0NBQ0hFKSkKKwkJcmV0dXJuOworCiBhZ2FpbjoKIAlpZiAocm9vdC0+Y2FjaGVkID09IEJUUkZTX0NBQ0hFX0ZJTklTSEVEKSB7CiAJCV9fYnRyZnNfYWRkX2ZyZWVfc3BhY2UoY3RsLCBvYmplY3RpZCwgMSk7CkBAIC0yNTAsNiArMjYyLDkgQEAKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKIAl1NjQgY291bnQ7CiAKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybjsKKwogCXdoaWxlICgxKSB7CiAJCW4gPSByYl9maXJzdChyYnJvb3QpOwogCQlpZiAoIW4pCkBAIC0zODgsOSArNDAzLDI0IEBACiAJaW50IHByZWFsbG9jOwogCWJvb2wgcmV0cnkgPSBmYWxzZTsKIAorCS8qIG9ubHkgZnMgdHJlZSBhbmQgc3Vidm9sL3NuYXAgbmVlZHMgaW5vIGNhY2hlICovCisJaWYgKHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkICE9IEJUUkZTX0ZTX1RSRUVfT0JKRUNUSUQgJiYKKwkgICAgKHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkIDwgQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCB8fAorCSAgICAgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQgPiBCVFJGU19MQVNUX0ZSRUVfT0JKRUNUSUQpKQorCQlyZXR1cm4gMDsKKworCS8qIERvbid0IHNhdmUgaW5vZGUgY2FjaGUgaWYgd2UgYXJlIGRlbGV0aW5nIHRoaXMgcm9vdCAqLworCWlmIChidHJmc19yb290X3JlZnMoJnJvb3QtPnJvb3RfaXRlbSkgPT0gMCAmJgorCSAgICByb290ICE9IHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybiAwOworCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOworCiBhZ2FpbjoKIAlpbm9kZSA9IGxvb2t1cF9mcmVlX2lub19pbm9kZShyb290LCBwYXRoKTsKIAlpZiAoSVNfRVJSKGlub2RlKSAmJiBQVFJfRVJSKGlub2RlKSAhPSAtRU5PRU5UKSB7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCAzOWE5ZDU3Li43NTFkZGY4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTEzOCw3ICsxMzgsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAogCWtleS5vYmplY3RpZCA9IGJ0cmZzX2lubyhpbm9kZSk7CiAJa2V5Lm9mZnNldCA9IHN0YXJ0OwpAQCAtNDI2LDkgKzQyNSw4IEBACiAJCX0KIAl9CiAJaWYgKHN0YXJ0ID09IDApIHsKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJCUJVR19PTihJU19FUlIodHJhbnMpKTsKLQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCiAJCS8qIGxldHMgdHJ5IHRvIG1ha2UgYW4gaW5saW5lIGV4dGVudCAqLwpAQCAtNjIzLDggKzYyMSw5IEBACiAJCQkgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLAogCQkJICAgIEdGUF9OT0ZTKTsKIAotCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJQlVHX09OKElTX0VSUih0cmFucykpOworCQl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAkJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9leHRlbnQodHJhbnMsIHJvb3QsCiAJCQkJCSAgIGFzeW5jX2V4dGVudC0+Y29tcHJlc3NlZF9zaXplLAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKQEAgLTc5Myw5ICs3OTIsOCBAQAogCWludCByZXQgPSAwOwogCiAJQlVHX09OKGlzX2ZyZWVfc3BhY2VfaW5vZGUocm9vdCwgaW5vZGUpKTsKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCUJVR19PTihJU19FUlIodHJhbnMpKTsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAogCW51bV9ieXRlcyA9IChlbmQgLSBzdGFydCArIGJsb2Nrc2l6ZSkgJiB+KGJsb2Nrc2l6ZSAtIDEpOwpAQCAtMTA3NywxMCArMTA3NSwxMiBAQAogCW5vbG9jayA9IGlzX2ZyZWVfc3BhY2VfaW5vZGUocm9vdCwgaW5vZGUpOwogCiAJaWYgKG5vbG9jaykKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290LCAxKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290KTsKIAllbHNlCi0JCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOworCiAJQlVHX09OKElTX0VSUih0cmFucykpOworCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCiAJY293X3N0YXJ0ID0gKHU2NCktMTsKIAljdXJfb2Zmc2V0ID0gc3RhcnQ7CkBAIC0xNTE5LDggKzE1MTksNiBAQAogewogCXN0cnVjdCBidHJmc19vcmRlcmVkX3N1bSAqc3VtOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1bSwgbGlzdCwgbGlzdCkgewogCQlidHJmc19jc3VtX2ZpbGVfYmxvY2tzKHRyYW5zLAogCQkgICAgICAgQlRSRlNfSShpbm9kZSktPnJvb3QtPmZzX2luZm8tPmNzdW1fcm9vdCwgc3VtKTsKQEAgLTE3MzUsMTEgKzE3MzMsMTAgQEAKIAkJcmV0ID0gYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCAwLCBvcmRlcmVkX2V4dGVudCk7CiAJCWlmICghcmV0KSB7CiAJCQlpZiAobm9sb2NrKQotCQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCwgMSk7CisJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290KTsKIAkJCWVsc2UKLQkJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCQkJQlVHX09OKElTX0VSUih0cmFucykpOwotCQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJCQl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAkJCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCQkJQlVHX09OKHJldCk7CkBAIC0xNzUyLDExICsxNzQ5LDEwIEBACiAJCQkgMCwgJmNhY2hlZF9zdGF0ZSwgR0ZQX05PRlMpOwogCiAJaWYgKG5vbG9jaykKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290LCAxKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290KTsKIAllbHNlCi0JCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCUJVR19PTihJU19FUlIodHJhbnMpKTsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAogCWlmICh0ZXN0X2JpdChCVFJGU19PUkRFUkVEX0NPTVBSRVNTRUQsICZvcmRlcmVkX2V4dGVudC0+ZmxhZ3MpKQpAQCAtMTk5MCw3ICsxOTg2LDcgQEAKIAl9CiAKIAlpZiAoQlRSRlNfSShpbm9kZSktPmZsYWdzICYgQlRSRlNfSU5PREVfTk9EQVRBU1VNKQotCQlyZXR1cm4gMDsKKwkJZ290byBnb29kOwogCiAJaWYgKHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkID09IEJUUkZTX0RBVEFfUkVMT0NfVFJFRV9PQkpFQ1RJRCAmJgogCSAgICB0ZXN0X3JhbmdlX2JpdChpb190cmVlLCBzdGFydCwgZW5kLCBFWFRFTlRfTk9EQVRBU1VNLCAxLCBOVUxMKSkgewpAQCAtMjQzMSw3ICsyNDI3LDcgQEAKIAkJCQkJKHU2NCktMSk7CiAKIAlpZiAocm9vdC0+b3JwaGFuX2Jsb2NrX3JzdiB8fCByb290LT5vcnBoYW5faXRlbV9pbnNlcnRlZCkgewotCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJaWYgKCFJU19FUlIodHJhbnMpKQogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAl9CkBAIC0yNTExLDEyICsyNTA3LDEyIEBACiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAlzdHJ1Y3QgYnRyZnNfa2V5IGxvY2F0aW9uOwogCWludCBtYXliZV9hY2xzOwotCXU2NCBhbGxvY19ncm91cF9ibG9jazsKIAl1MzIgcmRldjsKIAlpbnQgcmV0OwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlCVUdfT04oIXBhdGgpOworCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAltZW1jcHkoJmxvY2F0aW9uLCAmQlRSRlNfSShpbm9kZSktPmxvY2F0aW9uLCBzaXplb2YobG9jYXRpb24pKTsKIAogCXJldCA9IGJ0cmZzX2xvb2t1cF9pbm9kZShOVUxMLCByb290LCBwYXRoLCAmbG9jYXRpb24sIDApOwpAQCAtMjUyNiw2ICsyNTIyLDEyIEBACiAJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwogCWlub2RlX2l0ZW0gPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKIAkJCQkgICAgc3RydWN0IGJ0cmZzX2lub2RlX2l0ZW0pOworCWlmICghbGVhZi0+bWFwX3Rva2VuKQorCQltYXBfcHJpdmF0ZV9leHRlbnRfYnVmZmVyKGxlYWYsICh1bnNpZ25lZCBsb25nKWlub2RlX2l0ZW0sCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBidHJmc19pbm9kZV9pdGVtKSwKKwkJCQkJICAmbGVhZi0+bWFwX3Rva2VuLCAmbGVhZi0+a2FkZHIsCisJCQkJCSAgJmxlYWYtPm1hcF9zdGFydCwgJmxlYWYtPm1hcF9sZW4sCisJCQkJCSAgS01fVVNFUjEpOwogCiAJaW5vZGUtPmlfbW9kZSA9IGJ0cmZzX2lub2RlX21vZGUobGVhZiwgaW5vZGVfaXRlbSk7CiAJaW5vZGUtPmlfbmxpbmsgPSBidHJmc19pbm9kZV9ubGluayhsZWFmLCBpbm9kZV9pdGVtKTsKQEAgLTI1NTUsOCArMjU1Nyw2IEBACiAJQlRSRlNfSShpbm9kZSktPmluZGV4X2NudCA9ICh1NjQpLTE7CiAJQlRSRlNfSShpbm9kZSktPmZsYWdzID0gYnRyZnNfaW5vZGVfZmxhZ3MobGVhZiwgaW5vZGVfaXRlbSk7CiAKLQlhbGxvY19ncm91cF9ibG9jayA9IGJ0cmZzX2lub2RlX2Jsb2NrX2dyb3VwKGxlYWYsIGlub2RlX2l0ZW0pOwotCiAJLyoKIAkgKiB0cnkgdG8gcHJlY2FjaGUgYSBOVUxMIGFjbCBlbnRyeSBmb3IgZmlsZXMgdGhhdCBkb24ndCBoYXZlCiAJICogYW55IHhhdHRycyBvciBhY2xzCkBAIC0yNTY2LDggKzI1NjYsMTEgQEAKIAlpZiAoIW1heWJlX2FjbHMpCiAJCWNhY2hlX25vX2FjbChpbm9kZSk7CiAKLQlCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXAgPSBidHJmc19maW5kX2Jsb2NrX2dyb3VwKHJvb3QsIDAsCi0JCQkJCQlhbGxvY19ncm91cF9ibG9jaywgMCk7CisJaWYgKGxlYWYtPm1hcF90b2tlbikgeworCQl1bm1hcF9leHRlbnRfYnVmZmVyKGxlYWYsIGxlYWYtPm1hcF90b2tlbiwgS01fVVNFUjEpOworCQlsZWFmLT5tYXBfdG9rZW4gPSBOVUxMOworCX0KKwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAlpbm9kZV9pdGVtID0gTlVMTDsKIApAQCAtMjY0Nyw3ICsyNjUwLDcgQEAKIAlidHJmc19zZXRfaW5vZGVfdHJhbnNpZChsZWFmLCBpdGVtLCB0cmFucy0+dHJhbnNpZCk7CiAJYnRyZnNfc2V0X2lub2RlX3JkZXYobGVhZiwgaXRlbSwgaW5vZGUtPmlfcmRldik7CiAJYnRyZnNfc2V0X2lub2RlX2ZsYWdzKGxlYWYsIGl0ZW0sIEJUUkZTX0koaW5vZGUpLT5mbGFncyk7Ci0JYnRyZnNfc2V0X2lub2RlX2Jsb2NrX2dyb3VwKGxlYWYsIGl0ZW0sIEJUUkZTX0koaW5vZGUpLT5ibG9ja19ncm91cCk7CisJYnRyZnNfc2V0X2lub2RlX2Jsb2NrX2dyb3VwKGxlYWYsIGl0ZW0sIDApOwogCiAJaWYgKGxlYWYtPm1hcF90b2tlbikgewogCQl1bm1hcF9leHRlbnRfYnVmZmVyKGxlYWYsIGxlYWYtPm1hcF90b2tlbiwgS01fVVNFUjEpOwpAQCAtMzAwNCw4ICszMDA3LDYgQEAKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwotCiAJYnRyZnNfcmVjb3JkX3VubGlua19kaXIodHJhbnMsIGRpciwgZGVudHJ5LT5kX2lub2RlLCAwKTsKIAogCXJldCA9IGJ0cmZzX3VubGlua19pbm9kZSh0cmFucywgcm9vdCwgZGlyLCBkZW50cnktPmRfaW5vZGUsCkBAIC0zMDk0LDggKzMwOTUsNiBAQAogCWlmIChJU19FUlIodHJhbnMpKQogCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7Ci0KIAlpZiAodW5saWtlbHkoYnRyZnNfaW5vKGlub2RlKSA9PSBCVFJGU19FTVBUWV9TVUJWT0xfRElSX09CSkVDVElEKSkgewogCQllcnIgPSBidHJmc191bmxpbmtfc3Vidm9sKHRyYW5zLCByb290LCBkaXIsCiAJCQkJCSAgQlRSRlNfSShpbm9kZSktPmxvY2F0aW9uLm9iamVjdGlkLApAQCAtMzUxNCw3ICszNTEzLDYgQEAKIAkJCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCiAJCQllcnIgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIGlub2RlLCBjdXJfb2Zmc2V0LAogCQkJCQkJIGN1cl9vZmZzZXQgKyBob2xlX3NpemUsCkBAIC0zNjQ4LDkgKzM2NDYsOCBAQAogCWJ0cmZzX2lfc2l6ZV93cml0ZShpbm9kZSwgMCk7CiAKIAl3aGlsZSAoMSkgewotCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJCUJVR19PTihJU19FUlIodHJhbnMpKTsKLQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJCXRyYW5zLT5ibG9ja19yc3YgPSByb290LT5vcnBoYW5fYmxvY2tfcnN2OwogCiAJCXJldCA9IGJ0cmZzX2Jsb2NrX3Jzdl9jaGVjayh0cmFucywgcm9vdCwKQEAgLTQxMzMsNyArNDEzMCw4IEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwotCXBhdGgtPnJlYWRhID0gMjsKKworCXBhdGgtPnJlYWRhID0gMTsKIAogCWlmIChrZXlfdHlwZSA9PSBCVFJGU19ESVJfSU5ERVhfS0VZKSB7CiAJCUlOSVRfTElTVF9IRUFEKCZpbnNfbGlzdCk7CkBAIC00MjY4LDE4ICs0MjY2LDE2IEBACiAJaWYgKEJUUkZTX0koaW5vZGUpLT5kdW1teV9pbm9kZSkKIAkJcmV0dXJuIDA7CiAKLQlzbXBfbWIoKTsKLQlpZiAocm9vdC0+ZnNfaW5mby0+Y2xvc2luZyAmJiBpc19mcmVlX3NwYWNlX2lub2RlKHJvb3QsIGlub2RlKSkKKwlpZiAoYnRyZnNfZnNfY2xvc2luZyhyb290LT5mc19pbmZvKSAmJiBpc19mcmVlX3NwYWNlX2lub2RlKHJvb3QsIGlub2RlKSkKIAkJbm9sb2NrID0gdHJ1ZTsKIAogCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkgewogCQlpZiAobm9sb2NrKQotCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290LCAxKTsKKwkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCk7CiAJCWVsc2UKLQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJaWYgKElTX0VSUih0cmFucykpCiAJCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7Ci0JCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCQlpZiAobm9sb2NrKQogCQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uX25vbG9jayh0cmFucywgcm9vdCk7CiAJCWVsc2UKQEAgLTQzMDMsOSArNDI5OSw4IEBACiAJaWYgKEJUUkZTX0koaW5vZGUpLT5kdW1teV9pbm9kZSkKIAkJcmV0dXJuOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlCVUdfT04oSVNfRVJSKHRyYW5zKSk7Ci0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAKIAlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAlpZiAocmV0ICYmIHJldCA9PSAtRU5PU1BDKSB7CkBAIC00MzE5LDcgKzQzMTQsNiBAQAogCQkJCSAgICAgICBQVFJfRVJSKHRyYW5zKSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAKIAkJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CiAJCWlmIChyZXQpIHsKQEAgLTQ0MTgsOCArNDQxMiw4IEBACiAJCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVfbGVuLAotCQkJCSAgICAgdTY0IHJlZl9vYmplY3RpZCwgdTY0IG9iamVjdGlkLAotCQkJCSAgICAgdTY0IGFsbG9jX2hpbnQsIGludCBtb2RlLCB1NjQgKmluZGV4KQorCQkJCSAgICAgdTY0IHJlZl9vYmplY3RpZCwgdTY0IG9iamVjdGlkLCBpbnQgbW9kZSwKKwkJCQkgICAgIHU2NCAqaW5kZXgpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgYnRyZnNfaW5vZGVfaXRlbSAqaW5vZGVfaXRlbTsKQEAgLTQ0NzIsOCArNDQ2Niw2IEBACiAJCW93bmVyID0gMDsKIAllbHNlCiAJCW93bmVyID0gMTsKLQlCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXAgPQotCQkJYnRyZnNfZmluZF9ibG9ja19ncm91cChyb290LCAwLCBhbGxvY19oaW50LCBvd25lcik7CiAKIAlrZXlbMF0ub2JqZWN0aWQgPSBvYmplY3RpZDsKIAlidHJmc19zZXRfa2V5X3R5cGUoJmtleVswXSwgQlRSRlNfSU5PREVfSVRFTV9LRVkpOwpAQCAtNDYyOSwxNSArNDYyMSwxMyBAQAogCWlmIChJU19FUlIodHJhbnMpKQogCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7Ci0KIAllcnIgPSBidHJmc19maW5kX2ZyZWVfaW5vKHJvb3QsICZvYmplY3RpZCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJaW5vZGUgPSBidHJmc19uZXdfaW5vZGUodHJhbnMsIHJvb3QsIGRpciwgZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCQlkZW50cnktPmRfbmFtZS5sZW4sIGJ0cmZzX2lubyhkaXIpLCBvYmplY3RpZCwKLQkJCQlCVFJGU19JKGRpciktPmJsb2NrX2dyb3VwLCBtb2RlLCAmaW5kZXgpOworCQkJCW1vZGUsICZpbmRleCk7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJZXJyID0gUFRSX0VSUihpbm9kZSk7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTQ2NDksNyArNDYzOSw2IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAllcnIgPSBidHJmc19hZGRfbm9uZGlyKHRyYW5zLCBkaXIsIGRlbnRyeSwgaW5vZGUsIDAsIGluZGV4KTsKIAlpZiAoZXJyKQogCQlkcm9wX2lub2RlID0gMTsKQEAgLTQ2NTgsOCArNDY0Nyw2IEBACiAJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwgcmRldik7CiAJCWJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCX0KLQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKLQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiBvdXRfdW5sb2NrOgogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CkBAIC00NjkyLDE1ICs0Njc5LDEzIEBACiAJaWYgKElTX0VSUih0cmFucykpCiAJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKLQogCWVyciA9IGJ0cmZzX2ZpbmRfZnJlZV9pbm8ocm9vdCwgJm9iamVjdGlkKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlpbm9kZSA9IGJ0cmZzX25ld19pbm9kZSh0cmFucywgcm9vdCwgZGlyLCBkZW50cnktPmRfbmFtZS5uYW1lLAogCQkJCWRlbnRyeS0+ZF9uYW1lLmxlbiwgYnRyZnNfaW5vKGRpciksIG9iamVjdGlkLAotCQkJCUJUUkZTX0koZGlyKS0+YmxvY2tfZ3JvdXAsIG1vZGUsICZpbmRleCk7CisJCQkJbW9kZSwgJmluZGV4KTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNDcxMiw3ICs0Njk3LDYgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCWVyciA9IGJ0cmZzX2FkZF9ub25kaXIodHJhbnMsIGRpciwgZGVudHJ5LCBpbm9kZSwgMCwgaW5kZXgpOwogCWlmIChlcnIpCiAJCWRyb3BfaW5vZGUgPSAxOwpAQCAtNDcyMyw4ICs0NzA3LDYgQEAKIAkJaW5vZGUtPmlfb3AgPSAmYnRyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogCQlCVFJGU19JKGlub2RlKS0+aW9fdHJlZS5vcHMgPSAmYnRyZnNfZXh0ZW50X2lvX29wczsKIAl9Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogb3V0X3VubG9jazoKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwpAQCAtNDc3MSw4ICs0NzUzLDYgQEAKIAogCWJ0cmZzX2luY19ubGluayhpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0KLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAJaWhvbGQoaW5vZGUpOwogCiAJZXJyID0gYnRyZnNfYWRkX25vbmRpcih0cmFucywgZGlyLCBkZW50cnksIGlub2RlLCAxLCBpbmRleCk7CkBAIC00NzgxLDcgKzQ3NjEsNiBAQAogCQlkcm9wX2lub2RlID0gMTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZ2V0X3BhcmVudChkZW50cnkpOwotCQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAJCWVyciA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCQlCVUdfT04oZXJyKTsKIAkJYnRyZnNfbG9nX25ld19uYW1lKHRyYW5zLCBpbm9kZSwgTlVMTCwgcGFyZW50KTsKQEAgLTQ4MTgsNyArNDc5Nyw2IEBACiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCA1KTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAogCWVyciA9IGJ0cmZzX2ZpbmRfZnJlZV9pbm8ocm9vdCwgJm9iamVjdGlkKTsKIAlpZiAoZXJyKQpAQCAtNDgyNiw4ICs0ODA0LDcgQEAKIAogCWlub2RlID0gYnRyZnNfbmV3X2lub2RlKHRyYW5zLCByb290LCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJZGVudHJ5LT5kX25hbWUubGVuLCBidHJmc19pbm8oZGlyKSwgb2JqZWN0aWQsCi0JCQkJQlRSRlNfSShkaXIpLT5ibG9ja19ncm91cCwgU19JRkRJUiB8IG1vZGUsCi0JCQkJJmluZGV4KTsKKwkJCQlTX0lGRElSIHwgbW9kZSwgJmluZGV4KTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byBvdXRfZmFpbDsKQEAgLTQ4NDEsNyArNDgxOCw2IEBACiAKIAlpbm9kZS0+aV9vcCA9ICZidHJmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9mb3AgPSAmYnRyZnNfZGlyX2ZpbGVfb3BlcmF0aW9uczsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAogCWJ0cmZzX2lfc2l6ZV93cml0ZShpbm9kZSwgMCk7CiAJZXJyID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CkBAIC00ODU1LDggKzQ4MzEsNiBAQAogCiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlkcm9wX29uX2VyciA9IDA7Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCiBvdXRfZmFpbDoKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKQEAgLTQ5ODksNyArNDk2MywxNSBAQAogCiAJaWYgKCFwYXRoKSB7CiAJCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JCUJVR19PTighcGF0aCk7CisJCWlmICghcGF0aCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qCisJCSAqIENoYW5jZXMgYXJlIHdlJ2xsIGJlIGNhbGxlZCBhZ2Fpbiwgc28gZ28gYWhlYWQgYW5kIGRvCisJCSAqIHJlYWRhaGVhZAorCQkgKi8KKwkJcGF0aC0+cmVhZGEgPSAxOwogCX0KIAogCXJldCA9IGJ0cmZzX2xvb2t1cF9maWxlX2V4dGVudCh0cmFucywgcm9vdCwgcGF0aCwKQEAgLTUxMzAsOCArNTExMiwxMCBAQAogCQkJCWt1bm1hcChwYWdlKTsKIAkJCQlmcmVlX2V4dGVudF9tYXAoZW0pOwogCQkJCWVtID0gTlVMTDsKKwogCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChwYXRoKTsKLQkJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOworCiAJCQkJaWYgKElTX0VSUih0cmFucykpCiAJCQkJCXJldHVybiBFUlJfQ0FTVCh0cmFucyk7CiAJCQkJZ290byBhZ2FpbjsKQEAgLTUzNzUsNyArNTM1OSw3IEBACiAJCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBzdGFydCwgc3RhcnQgKyBsZW4gLSAxLCAwKTsKIAl9CiAKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKQogCQlyZXR1cm4gRVJSX0NBU1QodHJhbnMpOwogCkBAIC01NjExLDcgKzU1OTUsNyBAQAogCQkgKiB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gc3RheXMgb3BlbgogCQkgKiB3aGlsZSB3ZSBsb29rIGZvciBub2NvdyBjcm9zcyByZWZzCiAJCSAqLwotCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJaWYgKElTX0VSUih0cmFucykpCiAJCQlnb3RvIG11c3RfY293OwogCkBAIC01NzUwLDcgKzU3MzQsNyBAQAogCiAJQlVHX09OKCFvcmRlcmVkKTsKIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC02NTAwLDYgKzY0ODQsNyBAQAogc3RhdGljIGludCBidHJmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqcnN2OwogCWludCByZXQ7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7CkBAIC02NTEzLDI4ICs2NDk4LDgwIEBACiAJYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCBpbm9kZS0+aV9zaXplICYgKH5tYXNrKSwgKHU2NCktMSk7CiAJYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCBpbm9kZS0+aV9zaXplLCBOVUxMKTsKIAotCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgNSk7Ci0JaWYgKElTX0VSUih0cmFucykpCi0JCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKKwkvKgorCSAqIFllcyBsYWRpZXMgYW5kIGdlbnRlbG1lbnQsIHRoaXMgaXMgaW5kZWVkIHVnbHkuICBUaGUgZmFjdCBpcyB3ZSBoYXZlCisJICogMyB0aGluZ3MgZ29pbmcgb24gaGVyZQorCSAqCisJICogMSkgV2UgbmVlZCB0byByZXNlcnZlIHNwYWNlIGZvciBvdXIgb3JwaGFuIGl0ZW0gYW5kIHRoZSBzcGFjZSB0bworCSAqIGRlbGV0ZSBvdXIgb3JwaGFuIGl0ZW0uICBMb3JkIGtub3dzIHdlIGRvbid0IHdhbnQgdG8gaGF2ZSBhIGRhbmdsaW5nCisJICogb3JwaGFuIGl0ZW0gYmVjYXVzZSB3ZSBkaWRuJ3QgcmVzZXJ2ZSBzcGFjZSB0byByZW1vdmUgaXQuCisJICoKKwkgKiAyKSBXZSBuZWVkIHRvIHJlc2VydmUgc3BhY2UgdG8gdXBkYXRlIG91ciBpbm9kZS4KKwkgKgorCSAqIDMpIFdlIG5lZWQgdG8gaGF2ZSBzb21ldGhpbmcgdG8gY2FjaGUgYWxsIHRoZSBzcGFjZSB0aGF0IGlzIGdvaW5nIHRvCisJICogYmUgZnJlZSdkIHVwIGJ5IHRoZSB0cnVuY2F0ZSBvcGVyYXRpb24sIGJ1dCBhbHNvIGhhdmUgc29tZSBzbGFjaworCSAqIHNwYWNlIHJlc2VydmVkIGluIGNhc2UgaXQgdXNlcyBzcGFjZSBkdXJpbmcgdGhlIHRydW5jYXRlICh0aGFuayB5b3UKKwkgKiB2ZXJ5IG11Y2ggc25hcHNob3R0aW5nKS4KKwkgKgorCSAqIEFuZCB3ZSBuZWVkIHRoZXNlIHRvIGFsbCBiZSBzZXBlcmF0ZS4gIFRoZSBmYWN0IGlzIHdlIGNhbiB1c2UgYWxvdCBvZgorCSAqIHNwYWNlIGRvaW5nIHRoZSB0cnVuY2F0ZSwgYW5kIHdlIGhhdmUgbm8gZWFydGhseSBpZGVhIGhvdyBtdWNoIHNwYWNlCisJICogd2Ugd2lsbCB1c2UsIHNvIHdlIG5lZWQgdGhlIHRydW5jYXRlIHJlc2VydmF0aW9uIHRvIGJlIHNlcGVyYXRlIHNvIGl0CisJICogZG9lc24ndCBlbmQgdXAgdXNpbmcgc3BhY2UgcmVzZXJ2ZWQgZm9yIHVwZGF0aW5nIHRoZSBpbm9kZSBvcgorCSAqIHJlbW92aW5nIHRoZSBvcnBoYW4gaXRlbS4gIFdlIGFsc28gbmVlZCB0byBiZSBhYmxlIHRvIHN0b3AgdGhlCisJICogdHJhbnNhY3Rpb24gYW5kIHN0YXJ0IGEgbmV3IG9uZSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBiZSBhYmxlIHRvCisJICogdXBkYXRlIHRoZSBpbm9kZSBzZXZlcmFsIHRpbWVzLCBhbmQgd2UgaGF2ZSBubyBpZGVhIG9mIGtub3dpbmcgaG93CisJICogbWFueSB0aW1lcyB0aGF0IHdpbGwgYmUsIHNvIHdlIGNhbid0IGp1c3QgcmVzZXJ2ZSAxIGl0ZW0gZm9yIHRoZQorCSAqIGVudGlyZXR5IG9mIHRoZSBvcHJhdGlvbiwgc28gdGhhdCBoYXMgdG8gYmUgZG9uZSBzZXBlcmF0ZWx5IGFzIHdlbGwuCisJICogVGhlbiB0aGVyZSBpcyB0aGUgb3JwaGFuIGl0ZW0sIHdoaWNoIGRvZXMgaW5kZWVkIG5lZWQgdG8gYmUgaGVsZCBvbgorCSAqIHRvIGZvciB0aGUgd2hvbGUgb3BlcmF0aW9uLCBhbmQgd2UgbmVlZCBub2JvZHkgdG8gdG91Y2ggdGhpcyByZXNlcnZlZAorCSAqIHNwYWNlIGV4Y2VwdCB0aGUgb3JwaGFuIGNvZGUuCisJICoKKwkgKiBTbyB0aGF0IGxlYXZlcyB1cyB3aXRoCisJICoKKwkgKiAxKSByb290LT5vcnBoYW5fYmxvY2tfcnN2IC0gZm9yIHRoZSBvcnBoYW4gZGVsZXRpb24uCisJICogMikgcnN2IC0gZm9yIHRoZSB0cnVuY2F0ZSByZXNlcnZhdGlvbiwgd2hpY2ggd2Ugd2lsbCBzdGVhbCBmcm9tIHRoZQorCSAqIHRyYW5zYWN0aW9uIHJlc2VydmF0aW9uLgorCSAqIDMpIGZzX2luZm8tPnRyYW5zX2Jsb2NrX3JzdiAtIHRoaXMgd2lsbCBoYXZlIDEgaXRlbXMgd29ydGggbGVmdCBmb3IKKwkgKiB1cGRhdGluZyB0aGUgaW5vZGUuCisJICovCisJcnN2ID0gYnRyZnNfYWxsb2NfYmxvY2tfcnN2KHJvb3QpOworCWlmICghcnN2KQorCQlyZXR1cm4gLUVOT01FTTsKKwlidHJmc19hZGRfZHVyYWJsZV9ibG9ja19yc3Yocm9vdC0+ZnNfaW5mbywgcnN2KTsKIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOworCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgNCk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJZXJyID0gUFRSX0VSUih0cmFucyk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHRydW5jYXRlIHByb2Nlc3MuICBUcnVuY2F0ZSBzaG91bGQgYmUgYWRkaW5nCisJICogc3BhY2UsIGJ1dCBpZiB0aGVyZSBhcmUgc25hcHNob3RzIGl0IG1heSBlbmQgdXAgdXNpbmcgc3BhY2UuCisJICovCisJcmV0ID0gYnRyZnNfdHJ1bmNhdGVfcmVzZXJ2ZV9tZXRhZGF0YSh0cmFucywgcm9vdCwgcnN2KTsKKwlCVUdfT04ocmV0KTsKIAogCXJldCA9IGJ0cmZzX29ycGhhbl9hZGQodHJhbnMsIGlub2RlKTsKIAlpZiAocmV0KSB7CiAJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCX0KIAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAKLQkvKiBOb3cgc3RhcnQgYSB0cmFuc2FjdGlvbiBmb3IgdGhlIHRydW5jYXRlICovCi0JdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKLQlpZiAoSVNfRVJSKHRyYW5zKSkKLQkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwotCXRyYW5zLT5ibG9ja19yc3YgPSByb290LT5vcnBoYW5fYmxvY2tfcnN2OworCS8qCisJICogT2sgc28gd2UndmUgYWxyZWFkeSBtaWdyYXRlZCBvdXIgYnl0ZXMgb3ZlciBmb3IgdGhlIHRydW5jYXRlLCBzbyBoZXJlCisJICoganVzdCByZXNlcnZlIHRoZSBvbmUgc2xvdCB3ZSBuZWVkIGZvciB1cGRhdGluZyB0aGUgaW5vZGUuCisJICovCisJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKKwkJZ290byBvdXQ7CisJfQorCXRyYW5zLT5ibG9ja19yc3YgPSByc3Y7CiAKIAkvKgogCSAqIHNldGF0dHIgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIG9yZGVyZWRfZGF0YV9jbG9zZSBmbGFnLApAQCAtNjU1OCwyNCArNjU5NSwxNyBAQAogCiAJd2hpbGUgKDEpIHsKIAkJaWYgKCF0cmFucykgewotCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKLQkJCWlmIChJU19FUlIodHJhbnMpKQotCQkJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKLQkJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwotCQkJdHJhbnMtPmJsb2NrX3JzdiA9IHJvb3QtPm9ycGhhbl9ibG9ja19yc3Y7Ci0JCX0KKwkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMyk7CisJCQlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQkJCWVyciA9IFBUUl9FUlIodHJhbnMpOworCQkJCWdvdG8gb3V0OworCQkJfQogCi0JCXJldCA9IGJ0cmZzX2Jsb2NrX3Jzdl9jaGVjayh0cmFucywgcm9vdCwKLQkJCQkJICAgIHJvb3QtPm9ycGhhbl9ibG9ja19yc3YsIDAsIDUpOwotCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKLQkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCQl0cmFucyA9IE5VTEw7Ci0JCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChyZXQpIHsKLQkJCWVyciA9IHJldDsKLQkJCWJyZWFrOworCQkJcmV0ID0gYnRyZnNfdHJ1bmNhdGVfcmVzZXJ2ZV9tZXRhZGF0YSh0cmFucywgcm9vdCwKKwkJCQkJCQkgICAgICByc3YpOworCQkJQlVHX09OKHJldCk7CisKKwkJCXRyYW5zLT5ibG9ja19yc3YgPSByc3Y7CiAJCX0KIAogCQlyZXQgPSBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcyh0cmFucywgcm9vdCwgaW5vZGUsCkBAIC02NTg2LDYgKzY2MTYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPnRyYW5zX2Jsb2NrX3JzdjsKIAkJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CiAJCWlmIChyZXQpIHsKIAkJCWVyciA9IHJldDsKQEAgLTY1OTksNiArNjYzMCw3IEBACiAJfQogCiAJaWYgKHJldCA9PSAwICYmIGlub2RlLT5pX25saW5rID4gMCkgeworCQl0cmFucy0+YmxvY2tfcnN2ID0gcm9vdC0+b3JwaGFuX2Jsb2NrX3JzdjsKIAkJcmV0ID0gYnRyZnNfb3JwaGFuX2RlbCh0cmFucywgaW5vZGUpOwogCQlpZiAocmV0KQogCQkJZXJyID0gcmV0OwpAQCAtNjYxMCwxNSArNjY0MiwyMCBAQAogCQlyZXQgPSBidHJmc19vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTsKIAl9CiAKKwl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPnRyYW5zX2Jsb2NrX3JzdjsKIAlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAlpZiAocmV0ICYmICFlcnIpCiAJCWVyciA9IHJldDsKIAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCXJldCA9IGJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CisJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CisKK291dDoKKwlidHJmc19mcmVlX2Jsb2NrX3Jzdihyb290LCByc3YpOworCiAJaWYgKHJldCAmJiAhZXJyKQogCQllcnIgPSByZXQ7Ci0JYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjYyNywxNSArNjY2NCwxNCBAQAogICogY3JlYXRlIGEgbmV3IHN1YnZvbHVtZSBkaXJlY3RvcnkvaW5vZGUgKGhlbHBlciBmb3IgdGhlIGlvY3RsKS4KICAqLwogaW50IGJ0cmZzX2NyZWF0ZV9zdWJ2b2xfcm9vdChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCSAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKm5ld19yb290LAotCQkJICAgICB1NjQgbmV3X2RpcmlkLCB1NjQgYWxsb2NfaGludCkKKwkJCSAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKm5ld19yb290LCB1NjQgbmV3X2RpcmlkKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IGVycjsKIAl1NjQgaW5kZXggPSAwOwogCiAJaW5vZGUgPSBidHJmc19uZXdfaW5vZGUodHJhbnMsIG5ld19yb290LCBOVUxMLCAiLi4iLCAyLCBuZXdfZGlyaWQsCi0JCQkJbmV3X2RpcmlkLCBhbGxvY19oaW50LCBTX0lGRElSIHwgMDcwMCwgJmluZGV4KTsKKwkJCQluZXdfZGlyaWQsIFNfSUZESVIgfCAwNzAwLCAmaW5kZXgpOwogCWlmIChJU19FUlIoaW5vZGUpKQogCQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7CiAJaW5vZGUtPmlfb3AgPSAmYnRyZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CkBAIC02NzQ4LDIxICs2Nzg0LDYgQEAKIAkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfZXh0ZW50X2xvY2spOwogCX0KIAotCWlmIChyb290ID09IHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCkgewotCQlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwOwotCi0JCWJsb2NrX2dyb3VwID0gYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKHJvb3QtPmZzX2luZm8sCi0JCQkJCQlCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXApOwotCQlpZiAoYmxvY2tfZ3JvdXAgJiYgYmxvY2tfZ3JvdXAtPmlub2RlID09IGlub2RlKSB7Ci0JCQlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT5sb2NrKTsKLQkJCWJsb2NrX2dyb3VwLT5pbm9kZSA9IE5VTEw7Ci0JCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPmxvY2spOwotCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKLQkJfSBlbHNlIGlmIChibG9ja19ncm91cCkgewotCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKLQkJfQotCX0KLQogCXNwaW5fbG9jaygmcm9vdC0+b3JwaGFuX2xvY2spOwogCWlmICghbGlzdF9lbXB0eSgmQlRSRlNfSShpbm9kZSktPmlfb3JwaGFuKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJCVFJGUzogaW5vZGUgJWxsdSBzdGlsbCBvbiB0aGUgb3JwaGFuIGxpc3RcbiIsCkBAIC02OTQ4LDggKzY5NjksNiBAQAogICAgICAgICAgICAgICAgIGdvdG8gb3V0X25vdHJhbnM7CiAgICAgICAgIH0KIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgbmV3X2Rpcik7Ci0KIAlpZiAoZGVzdCAhPSByb290KQogCQlidHJmc19yZWNvcmRfcm9vdF9pbl90cmFucyh0cmFucywgZGVzdCk7CiAKQEAgLTcxMzEsMTYgKzcxNTAsMTMgQEAKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwotCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX2lubyhyb290LCAmb2JqZWN0aWQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlub2RlID0gYnRyZnNfbmV3X2lub2RlKHRyYW5zLCByb290LCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJZGVudHJ5LT5kX25hbWUubGVuLCBidHJmc19pbm8oZGlyKSwgb2JqZWN0aWQsCi0JCQkJQlRSRlNfSShkaXIpLT5ibG9ja19ncm91cCwgU19JRkxOS3xTX0lSV1hVR08sCi0JCQkJJmluZGV4KTsKKwkJCQlTX0lGTE5LfFNfSVJXWFVHTywgJmluZGV4KTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNzE1Miw3ICs3MTY4LDYgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCWVyciA9IGJ0cmZzX2FkZF9ub25kaXIodHJhbnMsIGRpciwgZGVudHJ5LCBpbm9kZSwgMCwgaW5kZXgpOwogCWlmIChlcnIpCiAJCWRyb3BfaW5vZGUgPSAxOwpAQCAtNzE2Myw4ICs3MTc4LDYgQEAKIAkJaW5vZGUtPmlfb3AgPSAmYnRyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogCQlCVFJGU19JKGlub2RlKS0+aW9fdHJlZS5vcHMgPSAmYnRyZnNfZXh0ZW50X2lvX29wczsKIAl9Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JYnRyZnNfdXBkYXRlX2lub2RlX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCWlmIChkcm9wX2lub2RlKQogCQlnb3RvIG91dF91bmxvY2s7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IDg1ZTgxOGMuLmI3OTNkMTEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKKysrIGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtMjQzLDcgKzI0Myw3IEBACiAJCWlwLT5mbGFncyAmPSB+KEJUUkZTX0lOT0RFX0NPTVBSRVNTIHwgQlRSRlNfSU5PREVfTk9DT01QUkVTUyk7CiAJfQogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKQEAgLTQxNCw4ICs0MTQsNyBAQAogCiAJYnRyZnNfcmVjb3JkX3Jvb3RfaW5fdHJhbnModHJhbnMsIG5ld19yb290KTsKIAotCXJldCA9IGJ0cmZzX2NyZWF0ZV9zdWJ2b2xfcm9vdCh0cmFucywgbmV3X3Jvb3QsIG5ld19kaXJpZCwKLQkJCQkgICAgICAgQlRSRlNfSShkaXIpLT5ibG9ja19ncm91cCk7CisJcmV0ID0gYnRyZnNfY3JlYXRlX3N1YnZvbF9yb290KHRyYW5zLCBuZXdfcm9vdCwgbmV3X2RpcmlkKTsKIAkvKgogCSAqIGluc2VydCB0aGUgZGlyZWN0b3J5IGl0ZW0KIAkgKi8KQEAgLTcwNywxNiArNzA2LDE3IEBACiAJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0gKmV4dGVudDsKIAlpbnQgdHlwZTsKIAlpbnQgcmV0OworCXU2NCBpbm8gPSBidHJmc19pbm8oaW5vZGUpOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWluX2tleS5vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKKwltaW5fa2V5Lm9iamVjdGlkID0gaW5vOwogCW1pbl9rZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9EQVRBX0tFWTsKIAltaW5fa2V5Lm9mZnNldCA9ICpvZmY7CiAKLQltYXhfa2V5Lm9iamVjdGlkID0gaW5vZGUtPmlfaW5vOworCW1heF9rZXkub2JqZWN0aWQgPSBpbm87CiAJbWF4X2tleS50eXBlID0gKHU4KS0xOwogCW1heF9rZXkub2Zmc2V0ID0gKHU2NCktMTsKIApAQCAtNzI3LDcgKzcyNyw3IEBACiAJCQkJCSAgIHBhdGgsIDAsIG5ld2VyX3RoYW4pOwogCQlpZiAocmV0ICE9IDApCiAJCQlnb3RvIG5vbmU7Ci0JCWlmIChtaW5fa2V5Lm9iamVjdGlkICE9IGlub2RlLT5pX2lubykKKwkJaWYgKG1pbl9rZXkub2JqZWN0aWQgIT0gaW5vKQogCQkJZ290byBub25lOwogCQlpZiAobWluX2tleS50eXBlICE9IEJUUkZTX0VYVEVOVF9EQVRBX0tFWSkKIAkJCWdvdG8gbm9uZTsKQEAgLTIwNTQsMjkgKzIwNTQsMzQgQEAKIAogc3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfZnNfaW5mbyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdm9pZCBfX3VzZXIgKmFyZykKIHsKLQlzdHJ1Y3QgYnRyZnNfaW9jdGxfZnNfaW5mb19hcmdzIGZpX2FyZ3M7CisJc3RydWN0IGJ0cmZzX2lvY3RsX2ZzX2luZm9fYXJncyAqZmlfYXJnczsKIAlzdHJ1Y3QgYnRyZnNfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IGJ0cmZzX2RldmljZSAqbmV4dDsKIAlzdHJ1Y3QgYnRyZnNfZnNfZGV2aWNlcyAqZnNfZGV2aWNlcyA9IHJvb3QtPmZzX2luZm8tPmZzX2RldmljZXM7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlmaV9hcmdzLm51bV9kZXZpY2VzID0gZnNfZGV2aWNlcy0+bnVtX2RldmljZXM7Ci0JZmlfYXJncy5tYXhfaWQgPSAwOwotCW1lbWNweSgmZmlfYXJncy5mc2lkLCByb290LT5mc19pbmZvLT5mc2lkLCBzaXplb2YoZmlfYXJncy5mc2lkKSk7CisJZmlfYXJncyA9IGt6YWxsb2Moc2l6ZW9mKCpmaV9hcmdzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaV9hcmdzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZpX2FyZ3MtPm51bV9kZXZpY2VzID0gZnNfZGV2aWNlcy0+bnVtX2RldmljZXM7CisJbWVtY3B5KCZmaV9hcmdzLT5mc2lkLCByb290LT5mc19pbmZvLT5mc2lkLCBzaXplb2YoZmlfYXJncy0+ZnNpZCkpOwogCiAJbXV0ZXhfbG9jaygmZnNfZGV2aWNlcy0+ZGV2aWNlX2xpc3RfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXZpY2UsIG5leHQsICZmc19kZXZpY2VzLT5kZXZpY2VzLCBkZXZfbGlzdCkgewotCQlpZiAoZGV2aWNlLT5kZXZpZCA+IGZpX2FyZ3MubWF4X2lkKQotCQkJZmlfYXJncy5tYXhfaWQgPSBkZXZpY2UtPmRldmlkOworCQlpZiAoZGV2aWNlLT5kZXZpZCA+IGZpX2FyZ3MtPm1heF9pZCkKKwkJCWZpX2FyZ3MtPm1heF9pZCA9IGRldmljZS0+ZGV2aWQ7CiAJfQogCW11dGV4X3VubG9jaygmZnNfZGV2aWNlcy0+ZGV2aWNlX2xpc3RfbXV0ZXgpOwogCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmaV9hcmdzLCBzaXplb2YoZmlfYXJncykpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoY29weV90b191c2VyKGFyZywgZmlfYXJncywgc2l6ZW9mKCpmaV9hcmdzKSkpCisJCXJldCA9IC1FRkFVTFQ7CiAKLQlyZXR1cm4gMDsKKwlrZnJlZShmaV9hcmdzKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgbG9uZyBidHJmc19pb2N0bF9kZXZfaW5mbyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdm9pZCBfX3VzZXIgKmFyZykKQEAgLTI0ODksMTIgKzI0OTQsMTAgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQlyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKys7Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJYXRvbWljX2luYygmcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucyk7CiAKIAlyZXQgPSAtRU5PTUVNOwotCXRyYW5zID0gYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJdHJhbnMgPSBidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihyb290KTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJZ290byBvdXRfZHJvcDsKIApAQCAtMjUwMiw5ICsyNTA1LDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2Ryb3A6Ci0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMtLTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlhdG9taWNfZGVjKCZyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKTsKIAltbnRfZHJvcF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMjczOCw5ICsyNzM5LDcgQEAKIAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0Jcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucy0tOwotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCWF0b21pY19kZWMoJnJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpOwogCiAJbW50X2Ryb3Bfd3JpdGUoZmlsZS0+Zl9wYXRoLm1udCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKaW5kZXggY2EzOGVjYS4uYjFlZjI3YyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwpAQCAtNjc3LDYgKzY3Nyw4IEBACiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KKwlwYXRoMS0+cmVhZGEgPSAxOworCXBhdGgyLT5yZWFkYSA9IDI7CiAKIAlub2RlID0gYWxsb2NfYmFja3JlZl9ub2RlKGNhY2hlKTsKIAlpZiAoIW5vZGUpIHsKQEAgLTE5OTksNiArMjAwMSw3IEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOworCXBhdGgtPnJlYWRhID0gMTsKIAogCXJlbG9jX3Jvb3QgPSByb290LT5yZWxvY19yb290OwogCXJvb3RfaXRlbSA9ICZyZWxvY19yb290LT5yb290X2l0ZW07CkBAIC0yMTM5LDEwICsyMTQyLDEwIEBACiAJdTY0IG51bV9ieXRlcyA9IDA7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCXJjLT5tZXJnaW5nX3Jzdl9zaXplICs9IHJvb3QtPm5vZGVzaXplICogKEJUUkZTX01BWF9MRVZFTCAtIDEpICogMjsKIAlyYy0+bWVyZ2luZ19yc3Zfc2l6ZSArPSByYy0+bm9kZXNfcmVsb2NhdGVkICogMjsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiBhZ2FpbjoKIAlpZiAoIWVycikgewogCQludW1fYnl0ZXMgPSByYy0+bWVyZ2luZ19yc3Zfc2l6ZTsKQEAgLTIxNTIsNyArMjE1NSw3IEBACiAJCQllcnIgPSByZXQ7CiAJfQogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpIHsKIAkJaWYgKCFlcnIpCiAJCQlidHJmc19ibG9ja19yc3ZfcmVsZWFzZShyYy0+ZXh0ZW50X3Jvb3QsCkBAIC0yMjExLDkgKzIyMTQsOSBAQAogCWludCByZXQ7CiBhZ2FpbjoKIAlyb290ID0gcmMtPmV4dGVudF9yb290OwotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCWxpc3Rfc3BsaWNlX2luaXQoJnJjLT5yZWxvY19yb290cywgJnJlbG9jX3Jvb3RzKTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnJlbG9jX3Jvb3RzKSkgewogCQlmb3VuZCA9IDE7CkBAIC0zMjM2LDcgKzMyMzksNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAkJcmV0ID0gUFRSX0VSUih0cmFucyk7CkBAIC0zMzAwLDYgKzMzMDMsNyBAQAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKKwlwYXRoLT5yZWFkYSA9IDE7CiAKIAlyb290ID0gcmVhZF9mc19yb290KHJjLT5leHRlbnRfcm9vdC0+ZnNfaW5mbywgcmVmX3Jvb3QpOwogCWlmIChJU19FUlIocm9vdCkpIHsKQEAgLTM1ODYsMTcgKzM1OTAsMTcgQEAKIHN0YXRpYyB2b2lkIHNldF9yZWxvY19jb250cm9sKHN0cnVjdCByZWxvY19jb250cm9sICpyYykKIHsKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IHJjLT5leHRlbnRfcm9vdC0+ZnNfaW5mbzsKLQltdXRleF9sb2NrKCZmc19pbmZvLT50cmFuc19tdXRleCk7CisJc3Bpbl9sb2NrKCZmc19pbmZvLT50cmFuc19sb2NrKTsKIAlmc19pbmZvLT5yZWxvY19jdGwgPSByYzsKLQltdXRleF91bmxvY2soJmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX3VubG9jaygmZnNfaW5mby0+dHJhbnNfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHVuc2V0X3JlbG9jX2NvbnRyb2woc3RydWN0IHJlbG9jX2NvbnRyb2wgKnJjKQogewogCXN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gcmMtPmV4dGVudF9yb290LT5mc19pbmZvOwotCW11dGV4X2xvY2soJmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlzcGluX2xvY2soJmZzX2luZm8tPnRyYW5zX2xvY2spOwogCWZzX2luZm8tPnJlbG9jX2N0bCA9IE5VTEw7Ci0JbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT50cmFuc19tdXRleCk7CisJc3Bpbl91bmxvY2soJmZzX2luZm8tPnRyYW5zX2xvY2spOwogfQogCiBzdGF0aWMgaW50IGNoZWNrX2V4dGVudF9mbGFncyh1NjQgZmxhZ3MpCkBAIC0zNjQ1LDcgKzM2NDksNyBAQAogCXJjLT5jcmVhdGVfcmVsb2NfdHJlZSA9IDE7CiAJc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCk7CiAJQlVHX09OKElTX0VSUih0cmFucykpOwogCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKIAlyZXR1cm4gMDsKQEAgLTM2NjgsNiArMzY3Miw3IEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOworCXBhdGgtPnJlYWRhID0gMTsKIAogCXJldCA9IHByZXBhcmVfdG9fcmVsb2NhdGUocmMpOwogCWlmIChyZXQpIHsKQEAgLTM4MzQsNyArMzgzOSw3IEBACiAJYnRyZnNfYmxvY2tfcnN2X3JlbGVhc2UocmMtPmV4dGVudF9yb290LCByYy0+YmxvY2tfcnN2LCAodTY0KS0xKTsKIAogCS8qIGdldCByaWQgb2YgcGlubmVkIGV4dGVudHMgKi8KLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290KTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJZXJyID0gUFRSX0VSUih0cmFucyk7CiAJZWxzZQpAQCAtNDA5Myw2ICs0MDk4LDcgQEAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCWlmICghcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07CisJcGF0aC0+cmVhZGEgPSAtMTsKIAogCWtleS5vYmplY3RpZCA9IEJUUkZTX1RSRUVfUkVMT0NfT0JKRUNUSUQ7CiAJa2V5LnR5cGUgPSBCVFJGU19ST09UX0lURU1fS0VZOwpAQCAtNDE1OSw3ICs0MTY1LDcgQEAKIAogCXNldF9yZWxvY19jb250cm9sKHJjKTsKIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCXVuc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKQEAgLTQxOTMsNyArNDE5OSw3IEBACiAKIAl1bnNldF9yZWxvY19jb250cm9sKHJjKTsKIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKQogCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKIAllbHNlCmRpZmYgLS1naXQgYS9mcy9idHJmcy9zY3J1Yi5jIGIvZnMvYnRyZnMvc2NydWIuYwppbmRleCA2ZGZlZDBjLi5hOGQwM2Q1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9zY3J1Yi5jCisrKyBiL2ZzL2J0cmZzL3NjcnViLmMKQEAgLTE2LDEzICsxNiw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlICJjdHJlZS5oIgogI2luY2x1ZGUgInZvbHVtZXMuaCIKICNpbmNsdWRlICJkaXNrLWlvLmgiCkBAIC0xMTcsMzMgKzExMSwzNyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2NydWJfZnJlZV9iaW8oc3RydWN0IGJpbyAqYmlvKQoreworCWludCBpOworCXN0cnVjdCBwYWdlICpsYXN0X3BhZ2UgPSBOVUxMOworCisJaWYgKCFiaW8pCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBiaW8tPmJpX3ZjbnQ7ICsraSkgeworCQlpZiAoYmlvLT5iaV9pb192ZWNbaV0uYnZfcGFnZSA9PSBsYXN0X3BhZ2UpCisJCQljb250aW51ZTsKKwkJbGFzdF9wYWdlID0gYmlvLT5iaV9pb192ZWNbaV0uYnZfcGFnZTsKKwkJX19mcmVlX3BhZ2UobGFzdF9wYWdlKTsKKwl9CisJYmlvX3B1dChiaW8pOworfQorCiBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQgc2NydWJfZnJlZV9kZXYoc3RydWN0IHNjcnViX2RldiAqc2RldikKIHsKIAlpbnQgaTsKLQlpbnQgajsKLQlzdHJ1Y3QgcGFnZSAqbGFzdF9wYWdlOwogCiAJaWYgKCFzZGV2KQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgU0NSVUJfQklPU19QRVJfREVWOyArK2kpIHsKIAkJc3RydWN0IHNjcnViX2JpbyAqc2JpbyA9IHNkZXYtPmJpb3NbaV07Ci0JCXN0cnVjdCBiaW8gKmJpbzsKIAogCQlpZiAoIXNiaW8pCiAJCQlicmVhazsKIAotCQliaW8gPSBzYmlvLT5iaW87Ci0JCWlmIChiaW8pIHsKLQkJCWxhc3RfcGFnZSA9IE5VTEw7Ci0JCQlmb3IgKGogPSAwOyBqIDwgYmlvLT5iaV92Y250OyArK2opIHsKLQkJCQlpZiAoYmlvLT5iaV9pb192ZWNbal0uYnZfcGFnZSA9PSBsYXN0X3BhZ2UpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWxhc3RfcGFnZSA9IGJpby0+YmlfaW9fdmVjW2pdLmJ2X3BhZ2U7Ci0JCQkJX19mcmVlX3BhZ2UobGFzdF9wYWdlKTsKLQkJCX0KLQkJCWJpb19wdXQoYmlvKTsKLQkJfQorCQlzY3J1Yl9mcmVlX2JpbyhzYmlvLT5iaW8pOwogCQlrZnJlZShzYmlvKTsKIAl9CiAKQEAgLTE1Niw4ICsxNTQsNiBAQAogewogCXN0cnVjdCBzY3J1Yl9kZXYgKnNkZXY7CiAJaW50CQlpOwotCWludAkJajsKLQlpbnQJCXJldDsKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IGRldi0+ZGV2X3Jvb3QtPmZzX2luZm87CiAKIAlzZGV2ID0ga3phbGxvYyhzaXplb2YoKnNkZXYpLCBHRlBfTk9GUyk7CkBAIC0xNjUsNyArMTYxLDYgQEAKIAkJZ290byBub21lbTsKIAlzZGV2LT5kZXYgPSBkZXY7CiAJZm9yIChpID0gMDsgaSA8IFNDUlVCX0JJT1NfUEVSX0RFVjsgKytpKSB7Ci0JCXN0cnVjdCBiaW8gKmJpbzsKIAkJc3RydWN0IHNjcnViX2JpbyAqc2JpbzsKIAogCQlzYmlvID0ga3phbGxvYyhzaXplb2YoKnNiaW8pLCBHRlBfTk9GUyk7CkBAIC0xNzMsMzIgKzE2OCwxMCBAQAogCQkJZ290byBub21lbTsKIAkJc2Rldi0+Ymlvc1tpXSA9IHNiaW87CiAKLQkJYmlvID0gYmlvX2ttYWxsb2MoR0ZQX05PRlMsIFNDUlVCX1BBR0VTX1BFUl9CSU8pOwotCQlpZiAoIWJpbykKLQkJCWdvdG8gbm9tZW07Ci0KIAkJc2Jpby0+aW5kZXggPSBpOwogCQlzYmlvLT5zZGV2ID0gc2RldjsKLQkJc2Jpby0+YmlvID0gYmlvOwogCQlzYmlvLT5jb3VudCA9IDA7CiAJCXNiaW8tPndvcmsuZnVuYyA9IHNjcnViX2NoZWNrc3VtOwotCQliaW8tPmJpX3ByaXZhdGUgPSBzZGV2LT5iaW9zW2ldOwotCQliaW8tPmJpX2VuZF9pbyA9IHNjcnViX2Jpb19lbmRfaW87Ci0JCWJpby0+Ymlfc2VjdG9yID0gMDsKLQkJYmlvLT5iaV9iZGV2ID0gZGV2LT5iZGV2OwotCQliaW8tPmJpX3NpemUgPSAwOwotCi0JCWZvciAoaiA9IDA7IGogPCBTQ1JVQl9QQUdFU19QRVJfQklPOyArK2opIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlOwotCQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX05PRlMpOwotCQkJaWYgKCFwYWdlKQotCQkJCWdvdG8gbm9tZW07Ci0KLQkJCXJldCA9IGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIFBBR0VfU0laRSwgMCk7Ci0JCQlpZiAoIXJldCkKLQkJCQlnb3RvIG5vbWVtOwotCQl9Ci0JCVdBUk5fT04oYmlvLT5iaV92Y250ICE9IFNDUlVCX1BBR0VTX1BFUl9CSU8pOwogCiAJCWlmIChpICE9IFNDUlVCX0JJT1NfUEVSX0RFVi0xKQogCQkJc2Rldi0+Ymlvc1tpXS0+bmV4dF9mcmVlID0gaSArIDE7CkBAIC0zNjksOSArMzQyLDYgQEAKIAlpbnQgcmV0OwogCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsZXRlKTsKIAotCS8qIHdlIGFyZSBnb2luZyB0byB3YWl0IG9uIHRoaXMgSU8gKi8KLQlydyB8PSBSRVFfU1lOQzsKLQogCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9GUywgMSk7CiAJYmlvLT5iaV9iZGV2ID0gYmRldjsKIAliaW8tPmJpX3NlY3RvciA9IHNlY3RvcjsKQEAgLTM4MCw2ICszNTAsNyBAQAogCWJpby0+YmlfcHJpdmF0ZSA9ICZjb21wbGV0ZTsKIAlzdWJtaXRfYmlvKHJ3LCBiaW8pOwogCisJLyogdGhpcyB3aWxsIGFsc28gdW5wbHVnIHRoZSBxdWV1ZSAqLwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXBsZXRlKTsKIAogCXJldCA9ICF0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKQEAgLTM5NCw2ICszNjUsNyBAQAogCXN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gc2Rldi0+ZGV2LT5kZXZfcm9vdC0+ZnNfaW5mbzsKIAogCXNiaW8tPmVyciA9IGVycjsKKwlzYmlvLT5iaW8gPSBiaW87CiAKIAlidHJmc19xdWV1ZV93b3JrZXIoJmZzX2luZm8tPnNjcnViX3dvcmtlcnMsICZzYmlvLT53b3JrKTsKIH0KQEAgLTQ1Myw2ICs0MjUsOCBAQAogCX0KIAogb3V0OgorCXNjcnViX2ZyZWVfYmlvKHNiaW8tPmJpbyk7CisJc2Jpby0+YmlvID0gTlVMTDsKIAlzcGluX2xvY2soJnNkZXYtPmxpc3RfbG9jayk7CiAJc2Jpby0+bmV4dF9mcmVlID0gc2Rldi0+Zmlyc3RfZnJlZTsKIAlzZGV2LT5maXJzdF9mcmVlID0gc2Jpby0+aW5kZXg7CkBAIC01ODMsMjUgKzU1Nyw1MCBAQAogc3RhdGljIGludCBzY3J1Yl9zdWJtaXQoc3RydWN0IHNjcnViX2RldiAqc2RldikKIHsKIAlzdHJ1Y3Qgc2NydWJfYmlvICpzYmlvOworCXN0cnVjdCBiaW8gKmJpbzsKKwlpbnQgaTsKIAogCWlmIChzZGV2LT5jdXJyID09IC0xKQogCQlyZXR1cm4gMDsKIAogCXNiaW8gPSBzZGV2LT5iaW9zW3NkZXYtPmN1cnJdOwogCi0Jc2Jpby0+YmlvLT5iaV9zZWN0b3IgPSBzYmlvLT5waHlzaWNhbCA+PiA5OwotCXNiaW8tPmJpby0+Ymlfc2l6ZSA9IHNiaW8tPmNvdW50ICogUEFHRV9TSVpFOwotCXNiaW8tPmJpby0+YmlfbmV4dCA9IE5VTEw7Ci0Jc2Jpby0+YmlvLT5iaV9mbGFncyB8PSAxIDw8IEJJT19VUFRPREFURTsKLQlzYmlvLT5iaW8tPmJpX2NvbXBfY3B1ID0gLTE7Ci0Jc2Jpby0+YmlvLT5iaV9iZGV2ID0gc2Rldi0+ZGV2LT5iZGV2OworCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9GUywgc2Jpby0+Y291bnQpOworCWlmICghYmlvKQorCQlnb3RvIG5vbWVtOworCisJYmlvLT5iaV9wcml2YXRlID0gc2JpbzsKKwliaW8tPmJpX2VuZF9pbyA9IHNjcnViX2Jpb19lbmRfaW87CisJYmlvLT5iaV9iZGV2ID0gc2Rldi0+ZGV2LT5iZGV2OworCWJpby0+Ymlfc2VjdG9yID0gc2Jpby0+cGh5c2ljYWwgPj4gOTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmlvLT5jb3VudDsgKytpKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCQlpbnQgcmV0OworCisJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0ZTKTsKKwkJaWYgKCFwYWdlKQorCQkJZ290byBub21lbTsKKworCQlyZXQgPSBiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBQQUdFX1NJWkUsIDApOworCQlpZiAoIXJldCkgeworCQkJX19mcmVlX3BhZ2UocGFnZSk7CisJCQlnb3RvIG5vbWVtOworCQl9CisJfQorCiAJc2Jpby0+ZXJyID0gMDsKIAlzZGV2LT5jdXJyID0gLTE7CiAJYXRvbWljX2luYygmc2Rldi0+aW5fZmxpZ2h0KTsKIAotCXN1Ym1pdF9iaW8oMCwgc2Jpby0+YmlvKTsKKwlzdWJtaXRfYmlvKFJFQUQsIGJpbyk7CiAKIAlyZXR1cm4gMDsKKworbm9tZW06CisJc2NydWJfZnJlZV9iaW8oYmlvKTsKKworCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgaW50IHNjcnViX3BhZ2Uoc3RydWN0IHNjcnViX2RldiAqc2RldiwgdTY0IGxvZ2ljYWwsIHU2NCBsZW4sCkBAIC02MzMsNyArNjMyLDExIEBACiAJCXNiaW8tPmxvZ2ljYWwgPSBsb2dpY2FsOwogCX0gZWxzZSBpZiAoc2Jpby0+cGh5c2ljYWwgKyBzYmlvLT5jb3VudCAqIFBBR0VfU0laRSAhPSBwaHlzaWNhbCB8fAogCQkgICBzYmlvLT5sb2dpY2FsICsgc2Jpby0+Y291bnQgKiBQQUdFX1NJWkUgIT0gbG9naWNhbCkgewotCQlzY3J1Yl9zdWJtaXQoc2Rldik7CisJCWludCByZXQ7CisKKwkJcmV0ID0gc2NydWJfc3VibWl0KHNkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAkJZ290byBhZ2FpbjsKIAl9CiAJc2Jpby0+c3BhZ1tzYmlvLT5jb3VudF0uZmxhZ3MgPSBmbGFnczsKQEAgLTY0NSw4ICs2NDgsMTMgQEAKIAkJbWVtY3B5KHNiaW8tPnNwYWdbc2Jpby0+Y291bnRdLmNzdW0sIGNzdW0sIHNkZXYtPmNzdW1fc2l6ZSk7CiAJfQogCSsrc2Jpby0+Y291bnQ7Ci0JaWYgKHNiaW8tPmNvdW50ID09IFNDUlVCX1BBR0VTX1BFUl9CSU8gfHwgZm9yY2UpCi0JCXNjcnViX3N1Ym1pdChzZGV2KTsKKwlpZiAoc2Jpby0+Y291bnQgPT0gU0NSVUJfUEFHRVNfUEVSX0JJTyB8fCBmb3JjZSkgeworCQlpbnQgcmV0OworCisJCXJldCA9IHNjcnViX3N1Ym1pdChzZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC03MjcsNiArNzM1LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IGZzX2luZm8tPmV4dGVudF9yb290OwogCXN0cnVjdCBidHJmc19yb290ICpjc3VtX3Jvb3QgPSBmc19pbmZvLT5jc3VtX3Jvb3Q7CiAJc3RydWN0IGJ0cmZzX2V4dGVudF9pdGVtICpleHRlbnQ7CisJc3RydWN0IGJsa19wbHVnIHBsdWc7CiAJdTY0IGZsYWdzOwogCWludCByZXQ7CiAJaW50IHNsb3Q7CkBAIC03ODksMTggKzc5OCwxMiBAQAogCiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfbm9wbHVnOwogCi0JCWwgPSBwYXRoLT5ub2Rlc1swXTsKLQkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwotCQlidHJmc19pdGVtX2tleV90b19jcHUobCwgJmtleSwgc2xvdCk7Ci0JCWlmIChrZXkub2JqZWN0aWQgIT0gbG9naWNhbCkgewotCQkJcmV0ID0gYnRyZnNfcHJldmlvdXNfaXRlbShyb290LCBwYXRoLCAwLAotCQkJCQkJICBCVFJGU19FWFRFTlRfSVRFTV9LRVkpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQorCQkvKgorCQkgKiB3ZSBtaWdodCBtaXNzIGhhbGYgYW4gZXh0ZW50IGhlcmUsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyLAorCQkgKiBhcyBpdCdzIG9ubHkgdGhlIHByZWZldGNoCisJCSAqLwogCQl3aGlsZSAoMSkgewogCQkJbCA9IHBhdGgtPm5vZGVzWzBdOwogCQkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwpAQCAtODA5LDcgKzgxMiw3IEBACiAJCQkJaWYgKHJldCA9PSAwKQogCQkJCQljb250aW51ZTsKIAkJCQlpZiAocmV0IDwgMCkKLQkJCQkJZ290byBvdXQ7CisJCQkJCWdvdG8gb3V0X25vcGx1ZzsKIAogCQkJCWJyZWFrOwogCQkJfQpAQCAtODMxLDYgKzgzNCw3IEBACiAJICogdGhlIHNjcnViLiBUaGlzIG1pZ2h0IGN1cnJlbnRseSAoY3JjMzIpIGVuZCB1cCB0byBiZSBhYm91dCAxTUIKIAkgKi8KIAlzdGFydF9zdHJpcGUgPSAwOworCWJsa19zdGFydF9wbHVnKCZwbHVnKTsKIGFnYWluOgogCWxvZ2ljYWwgPSBiYXNlICsgb2Zmc2V0ICsgc3RhcnRfc3RyaXBlICogaW5jcmVtZW50OwogCWZvciAoaSA9IHN0YXJ0X3N0cmlwZTsgaSA8IG5zdHJpcGVzOyArK2kpIHsKQEAgLTg5MCwxNSArODk0LDIwIEBACiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwotCi0JCWwgPSBwYXRoLT5ub2Rlc1swXTsKLQkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwotCQlidHJmc19pdGVtX2tleV90b19jcHUobCwgJmtleSwgc2xvdCk7Ci0JCWlmIChrZXkub2JqZWN0aWQgIT0gbG9naWNhbCkgeworCQlpZiAocmV0ID4gMCkgewogCQkJcmV0ID0gYnRyZnNfcHJldmlvdXNfaXRlbShyb290LCBwYXRoLCAwLAogCQkJCQkJICBCVFJGU19FWFRFTlRfSVRFTV9LRVkpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJZ290byBvdXQ7CisJCQlpZiAocmV0ID4gMCkgeworCQkJCS8qIHRoZXJlJ3Mgbm8gc21hbGxlciBpdGVtLCBzbyBzdGljayB3aXRoIHRoZQorCQkJCSAqIGxhcmdlciBvbmUgKi8KKwkJCQlidHJmc19yZWxlYXNlX3BhdGgocGF0aCk7CisJCQkJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgcm9vdCwgJmtleSwKKwkJCQkJCQlwYXRoLCAwLCAwKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJZ290byBvdXQ7CisJCQl9CiAJCX0KIAogCQl3aGlsZSAoMSkgewpAQCAtOTcyLDYgKzk4MSw4IEBACiAJc2NydWJfc3VibWl0KHNkZXYpOwogCiBvdXQ6CisJYmxrX2ZpbmlzaF9wbHVnKCZwbHVnKTsKK291dF9ub3BsdWc6CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKIH0KQEAgLTEwNDcsOCArMTA1OCwxNSBAQAogCXdoaWxlICgxKSB7CiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCWlmIChyZXQgPiAwKSB7CisJCQlpZiAocGF0aC0+c2xvdHNbMF0gPj0KKwkJCSAgICBidHJmc19oZWFkZXJfbnJpdGVtcyhwYXRoLT5ub2Rlc1swXSkpIHsKKwkJCQlyZXQgPSBidHJmc19uZXh0X2xlYWYocm9vdCwgcGF0aCk7CisJCQkJaWYgKHJldCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KIAogCQlsID0gcGF0aC0+bm9kZXNbMF07CiAJCXNsb3QgPSBwYXRoLT5zbG90c1swXTsKQEAgLTEwNTgsNyArMTA3Niw3IEBACiAJCWlmIChmb3VuZF9rZXkub2JqZWN0aWQgIT0gc2Rldi0+ZGV2LT5kZXZpZCkKIAkJCWJyZWFrOwogCi0JCWlmIChidHJmc19rZXlfdHlwZSgma2V5KSAhPSBCVFJGU19ERVZfRVhURU5UX0tFWSkKKwkJaWYgKGJ0cmZzX2tleV90eXBlKCZmb3VuZF9rZXkpICE9IEJUUkZTX0RFVl9FWFRFTlRfS0VZKQogCQkJYnJlYWs7CiAKIAkJaWYgKGZvdW5kX2tleS5vZmZzZXQgPj0gZW5kKQpAQCAtMTA4Nyw3ICsxMTA1LDcgQEAKIAkJY2FjaGUgPSBidHJmc19sb29rdXBfYmxvY2tfZ3JvdXAoZnNfaW5mbywgY2h1bmtfb2Zmc2V0KTsKIAkJaWYgKCFjYWNoZSkgewogCQkJcmV0ID0gLUVOT0VOVDsKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJCX0KIAkJcmV0ID0gc2NydWJfY2h1bmsoc2RldiwgY2h1bmtfdHJlZSwgY2h1bmtfb2JqZWN0aWQsCiAJCQkJICBjaHVua19vZmZzZXQsIGxlbmd0aCk7CkBAIC0xMDk5LDkgKzExMTcsMTMgQEAKIAkJYnRyZnNfcmVsZWFzZV9wYXRoKHBhdGgpOwogCX0KIAotb3V0OgogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiByZXQgY2FuIHN0aWxsIGJlIDEgZnJvbSBzZWFyY2hfc2xvdCBvciBuZXh0X2xlYWYsCisJICogdGhhdCdzIG5vdCBhbiBlcnJvcgorCSAqLworCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKIH0KIAogc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgc2NydWJfc3VwZXJzKHN0cnVjdCBzY3J1Yl9kZXYgKnNkZXYpCkBAIC0xMTM4LDggKzExNjAsMTIgQEAKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IHJvb3QtPmZzX2luZm87CiAKIAltdXRleF9sb2NrKCZmc19pbmZvLT5zY3J1Yl9sb2NrKTsKLQlpZiAoZnNfaW5mby0+c2NydWJfd29ya2Vyc19yZWZjbnQgPT0gMCkKKwlpZiAoZnNfaW5mby0+c2NydWJfd29ya2Vyc19yZWZjbnQgPT0gMCkgeworCQlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPnNjcnViX3dvcmtlcnMsICJzY3J1YiIsCisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLCAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOworCQlmc19pbmZvLT5zY3J1Yl93b3JrZXJzLmlkbGVfdGhyZXNoID0gNDsKIAkJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+c2NydWJfd29ya2VycywgMSk7CisJfQogCSsrZnNfaW5mby0+c2NydWJfd29ya2Vyc19yZWZjbnQ7CiAJbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT5zY3J1Yl9sb2NrKTsKIApAQCAtMTE2Niw3ICsxMTkyLDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBidHJmc19kZXZpY2UgKmRldjsKIAotCWlmIChyb290LT5mc19pbmZvLT5jbG9zaW5nKQorCWlmIChidHJmc19mc19jbG9zaW5nKHJvb3QtPmZzX2luZm8pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCmRpZmYgLS1naXQgYS9mcy9idHJmcy9zdXBlci5jIGIvZnMvYnRyZnMvc3VwZXIuYwppbmRleCA5YjJlN2U1Li4wYmI0ZWJiIDEwMDY0NAotLS0gYS9mcy9idHJmcy9zdXBlci5jCisrKyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTE2MSw3ICsxNjEsOCBAQAogCU9wdF9jb21wcmVzc190eXBlLCBPcHRfY29tcHJlc3NfZm9yY2UsIE9wdF9jb21wcmVzc19mb3JjZV90eXBlLAogCU9wdF9ub3RyZWVsb2csIE9wdF9yYXRpbywgT3B0X2ZsdXNob25jb21taXQsIE9wdF9kaXNjYXJkLAogCU9wdF9zcGFjZV9jYWNoZSwgT3B0X2NsZWFyX2NhY2hlLCBPcHRfdXNlcl9zdWJ2b2xfcm1fYWxsb3dlZCwKLQlPcHRfZW5vc3BjX2RlYnVnLCBPcHRfc3Vidm9scm9vdGlkLCBPcHRfZGVmcmFnLCBPcHRfZXJyLAorCU9wdF9lbm9zcGNfZGVidWcsIE9wdF9zdWJ2b2xyb290aWQsIE9wdF9kZWZyYWcsCisJT3B0X2lub2RlX2NhY2hlLCBPcHRfZXJyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtMTkzLDYgKzE5NCw3IEBACiAJe09wdF9lbm9zcGNfZGVidWcsICJlbm9zcGNfZGVidWcifSwKIAl7T3B0X3N1YnZvbHJvb3RpZCwgInN1YnZvbHJvb3RpZD0lZCJ9LAogCXtPcHRfZGVmcmFnLCAiYXV0b2RlZnJhZyJ9LAorCXtPcHRfaW5vZGVfY2FjaGUsICJpbm9kZV9jYWNoZSJ9LAogCXtPcHRfZXJyLCBOVUxMfSwKIH07CiAKQEAgLTM2MSw2ICszNjMsMTAgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gImJ0cmZzOiBlbmFibGluZyBkaXNrIHNwYWNlIGNhY2hpbmdcbiIpOwogCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIFNQQUNFX0NBQ0hFKTsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9pbm9kZV9jYWNoZToKKwkJCXByaW50ayhLRVJOX0lORk8gImJ0cmZzOiBlbmFibGluZyBpbm9kZSBtYXAgY2FjaGluZ1xuIik7CisJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgSU5PREVfTUFQX0NBQ0hFKTsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9jbGVhcl9jYWNoZToKIAkJCXByaW50ayhLRVJOX0lORk8gImJ0cmZzOiBmb3JjZSBjbGVhcmluZyBvZiBkaXNrIGNhY2hlXG4iKTsKIAkJCWJ0cmZzX3NldF9vcHQoaW5mby0+bW91bnRfb3B0LCBDTEVBUl9DQUNIRSk7CkBAIC04MTksNyArODI1LDcgQEAKIAl9IGVsc2UgewogCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKLQkJcy0+c19mbGFncyA9IGZsYWdzOworCQlzLT5zX2ZsYWdzID0gZmxhZ3MgfCBNU19OT1NFQzsKIAkJc3RybGNweShzLT5zX2lkLCBiZGV2bmFtZShiZGV2LCBiKSwgc2l6ZW9mKHMtPnNfaWQpKTsKIAkJZXJyb3IgPSBidHJmc19maWxsX3N1cGVyKHMsIGZzX2RldmljZXMsIGRhdGEsCiAJCQkJCSBmbGFncyAmIE1TX1NJTEVOVCA/IDEgOiAwKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCmluZGV4IGRjODBmNzEuLjJiMzU5MGIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwpAQCAtMzUsNiArMzUsNyBAQAogewogCVdBUk5fT04oYXRvbWljX3JlYWQoJnRyYW5zYWN0aW9uLT51c2VfY291bnQpID09IDApOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0cmFuc2FjdGlvbi0+dXNlX2NvdW50KSkgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJnRyYW5zYWN0aW9uLT5saXN0KSk7CiAJCW1lbXNldCh0cmFuc2FjdGlvbiwgMCwgc2l6ZW9mKCp0cmFuc2FjdGlvbikpOwogCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfdHJhbnNhY3Rpb25fY2FjaGVwLCB0cmFuc2FjdGlvbik7CiAJfQpAQCAtNDksNDYgKzUwLDcyIEBACiAvKgogICogZWl0aGVyIGFsbG9jYXRlIGEgbmV3IHRyYW5zYWN0aW9uIG9yIGhvcCBpbnRvIHRoZSBleGlzdGluZyBvbmUKICAqLwotc3RhdGljIG5vaW5saW5lIGludCBqb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290KQorc3RhdGljIG5vaW5saW5lIGludCBqb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgbm9mYWlsKQogewogCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqY3VyX3RyYW5zOworCisJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKKwlpZiAocm9vdC0+ZnNfaW5mby0+dHJhbnNfbm9fam9pbikgeworCQlpZiAoIW5vZmFpbCkgeworCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKwogCWN1cl90cmFucyA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247Ci0JaWYgKCFjdXJfdHJhbnMpIHsKLQkJY3VyX3RyYW5zID0ga21lbV9jYWNoZV9hbGxvYyhidHJmc190cmFuc2FjdGlvbl9jYWNoZXAsCi0JCQkJCSAgICAgR0ZQX05PRlMpOwotCQlpZiAoIWN1cl90cmFucykKLQkJCXJldHVybiAtRU5PTUVNOwotCQlyb290LT5mc19pbmZvLT5nZW5lcmF0aW9uKys7Ci0JCWF0b21pY19zZXQoJmN1cl90cmFucy0+bnVtX3dyaXRlcnMsIDEpOwotCQljdXJfdHJhbnMtPm51bV9qb2luZWQgPSAwOwotCQljdXJfdHJhbnMtPnRyYW5zaWQgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdXJfdHJhbnMtPndyaXRlcl93YWl0KTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmY3VyX3RyYW5zLT5jb21taXRfd2FpdCk7Ci0JCWN1cl90cmFucy0+aW5fY29tbWl0ID0gMDsKLQkJY3VyX3RyYW5zLT5ibG9ja2VkID0gMDsKLQkJYXRvbWljX3NldCgmY3VyX3RyYW5zLT51c2VfY291bnQsIDEpOwotCQljdXJfdHJhbnMtPmNvbW1pdF9kb25lID0gMDsKLQkJY3VyX3RyYW5zLT5zdGFydF90aW1lID0gZ2V0X3NlY29uZHMoKTsKLQotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5yb290ID0gUkJfUk9PVDsKLQkJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMubnVtX2VudHJpZXMgPSAwOwotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1faGVhZHNfcmVhZHkgPSAwOwotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1faGVhZHMgPSAwOwotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5mbHVzaGluZyA9IDA7Ci0JCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLnJ1bl9kZWxheWVkX3N0YXJ0ID0gMDsKLQkJc3Bpbl9sb2NrX2luaXQoJmN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmxvY2spOwotCi0JCUlOSVRfTElTVF9IRUFEKCZjdXJfdHJhbnMtPnBlbmRpbmdfc25hcHNob3RzKTsKLQkJbGlzdF9hZGRfdGFpbCgmY3VyX3RyYW5zLT5saXN0LCAmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbGlzdCk7Ci0JCWV4dGVudF9pb190cmVlX2luaXQoJmN1cl90cmFucy0+ZGlydHlfcGFnZXMsCi0JCQkJICAgICByb290LT5mc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nKTsKLQkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7Ci0JCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24gPSBjdXJfdHJhbnM7Ci0JCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7Ci0JfSBlbHNlIHsKKwlpZiAoY3VyX3RyYW5zKSB7CisJCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKIAkJYXRvbWljX2luYygmY3VyX3RyYW5zLT5udW1fd3JpdGVycyk7CiAJCWN1cl90cmFucy0+bnVtX2pvaW5lZCsrOworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisJCXJldHVybiAwOwogCX0KKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisKKwljdXJfdHJhbnMgPSBrbWVtX2NhY2hlX2FsbG9jKGJ0cmZzX3RyYW5zYWN0aW9uX2NhY2hlcCwgR0ZQX05PRlMpOworCWlmICghY3VyX3RyYW5zKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCWlmIChyb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uKSB7CisJCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc2FjdGlvbl9jYWNoZXAsIGN1cl90cmFucyk7CisJCWN1cl90cmFucyA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247CisJCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKKwkJYXRvbWljX2luYygmY3VyX3RyYW5zLT5udW1fd3JpdGVycyk7CisJCWN1cl90cmFucy0+bnVtX2pvaW5lZCsrOworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisJCXJldHVybiAwOworCX0KKwlhdG9taWNfc2V0KCZjdXJfdHJhbnMtPm51bV93cml0ZXJzLCAxKTsKKwljdXJfdHJhbnMtPm51bV9qb2luZWQgPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN1cl90cmFucy0+Y29tbWl0X3dhaXQpOworCWN1cl90cmFucy0+aW5fY29tbWl0ID0gMDsKKwljdXJfdHJhbnMtPmJsb2NrZWQgPSAwOworCS8qCisJICogT25lIGZvciB0aGlzIHRyYW5zIGhhbmRsZSwgb25lIHNvIGl0IHdpbGwgbGl2ZSBvbiB1bnRpbCB3ZQorCSAqIGNvbW1pdCB0aGUgdHJhbnNhY3Rpb24uCisJICovCisJYXRvbWljX3NldCgmY3VyX3RyYW5zLT51c2VfY291bnQsIDIpOworCWN1cl90cmFucy0+Y29tbWl0X2RvbmUgPSAwOworCWN1cl90cmFucy0+c3RhcnRfdGltZSA9IGdldF9zZWNvbmRzKCk7CisKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5yb290ID0gUkJfUk9PVDsKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1fZW50cmllcyA9IDA7CisJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMubnVtX2hlYWRzX3JlYWR5ID0gMDsKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1faGVhZHMgPSAwOworCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nID0gMDsKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5ydW5fZGVsYXllZF9zdGFydCA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJmN1cl90cmFucy0+Y29tbWl0X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZjdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZjdXJfdHJhbnMtPnBlbmRpbmdfc25hcHNob3RzKTsKKwlsaXN0X2FkZF90YWlsKCZjdXJfdHJhbnMtPmxpc3QsICZyb290LT5mc19pbmZvLT50cmFuc19saXN0KTsKKwlleHRlbnRfaW9fdHJlZV9pbml0KCZjdXJfdHJhbnMtPmRpcnR5X3BhZ2VzLAorCQkJICAgICByb290LT5mc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nKTsKKwlyb290LT5mc19pbmZvLT5nZW5lcmF0aW9uKys7CisJY3VyX3RyYW5zLT50cmFuc2lkID0gcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbjsKKwlyb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uID0gY3VyX3RyYW5zOworCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTksMzkgKzEyNiwyOCBAQAogICogdG8gbWFrZSBzdXJlIHRoZSBvbGQgcm9vdCBmcm9tIGJlZm9yZSB3ZSBqb2luZWQgdGhlIHRyYW5zYWN0aW9uIGlzIGRlbGV0ZWQKICAqIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGNvbW1pdHMKICAqLwotc3RhdGljIG5vaW5saW5lIGludCByZWNvcmRfcm9vdF9pbl90cmFucyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290KQoraW50IGJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KQogewogCWlmIChyb290LT5yZWZfY293cyAmJiByb290LT5sYXN0X3RyYW5zIDwgdHJhbnMtPnRyYW5zaWQpIHsKIAkJV0FSTl9PTihyb290ID09IHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290KTsKIAkJV0FSTl9PTihyb290LT5jb21taXRfcm9vdCAhPSByb290LT5ub2RlKTsKIAorCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4X2xvY2spOworCQlpZiAocm9vdC0+bGFzdF90cmFucyA9PSB0cmFucy0+dHJhbnNpZCkgeworCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4X2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcm9vdC0+bGFzdF90cmFucyA9IHRyYW5zLT50cmFuc2lkOwogCQlyYWRpeF90cmVlX3RhZ19zZXQoJnJvb3QtPmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4LAogCQkJICAgKHVuc2lnbmVkIGxvbmcpcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCiAJCQkgICBCVFJGU19ST09UX1RSQU5TX1RBRyk7Ci0JCXJvb3QtPmxhc3RfdHJhbnMgPSB0cmFucy0+dHJhbnNpZDsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4X2xvY2spOwogCQlidHJmc19pbml0X3JlbG9jX3Jvb3QodHJhbnMsIHJvb3QpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotaW50IGJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KQotewotCWlmICghcm9vdC0+cmVmX2Nvd3MpCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCWlmIChyb290LT5sYXN0X3RyYW5zID09IHRyYW5zLT50cmFuc2lkKSB7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZWNvcmRfcm9vdF9pbl90cmFucyh0cmFucywgcm9vdCk7Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIHdhaXQgZm9yIGNvbW1pdCBhZ2FpbnN0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRvIGJlY29tZSB1bmJsb2NrZWQKICAqIHdoZW4gdGhpcyBpcyBkb25lLCBpdCBpcyBzYWZlIHRvIHN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uLCBidXQgdGhlIGN1cnJlbnQKICAqIHRyYW5zYWN0aW9uIG1pZ2h0IG5vdCBiZSBmdWxseSBvbiBkaXNrLgpAQCAtMTQwLDIxICsxNTYsMjMgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24gKmN1cl90cmFuczsKIAorCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJY3VyX3RyYW5zID0gcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbjsKIAlpZiAoY3VyX3RyYW5zICYmIGN1cl90cmFucy0+YmxvY2tlZCkgewogCQlERUZJTkVfV0FJVCh3YWl0KTsKIAkJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJCXdoaWxlICgxKSB7CiAJCQlwcmVwYXJlX3RvX3dhaXQoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQsICZ3YWl0LAogCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCQlpZiAoIWN1cl90cmFucy0+YmxvY2tlZCkKIAkJCQlicmVhazsKLQkJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQkJc2NoZWR1bGUoKTsKLQkJCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJfQogCQlmaW5pc2hfd2FpdCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCwgJndhaXQpOwogCQlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKKwl9IGVsc2UgeworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJfQogfQogCkBAIC0xNjcsMTAgKzE4NSwxNiBAQAogCiBzdGF0aWMgaW50IG1heV93YWl0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgdHlwZSkKIHsKLQlpZiAoIXJvb3QtPmZzX2luZm8tPmxvZ19yb290X3JlY292ZXJpbmcgJiYKLQkgICAgKCh0eXBlID09IFRSQU5TX1NUQVJUICYmICFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSB8fAotCSAgICAgdHlwZSA9PSBUUkFOU19VU0VSU1BBQ0UpKQorCWlmIChyb290LT5mc19pbmZvLT5sb2dfcm9vdF9yZWNvdmVyaW5nKQorCQlyZXR1cm4gMDsKKworCWlmICh0eXBlID09IFRSQU5TX1VTRVJTUEFDRSkKIAkJcmV0dXJuIDE7CisKKwlpZiAodHlwZSA9PSBUUkFOU19TVEFSVCAmJgorCSAgICAhYXRvbWljX3JlYWQoJnJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpKQorCQlyZXR1cm4gMTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xODQsMzYgKzIwOCw0NCBAQAogCiAJaWYgKHJvb3QtPmZzX2luZm8tPmZzX3N0YXRlICYgQlRSRlNfU1VQRVJfRkxBR19FUlJPUikKIAkJcmV0dXJuIEVSUl9QVFIoLUVST0ZTKTsKKworCWlmIChjdXJyZW50LT5qb3VybmFsX2luZm8pIHsKKwkJV0FSTl9PTih0eXBlICE9IFRSQU5TX0pPSU4gJiYgdHlwZSAhPSBUUkFOU19KT0lOX05PTE9DSyk7CisJCWggPSBjdXJyZW50LT5qb3VybmFsX2luZm87CisJCWgtPnVzZV9jb3VudCsrOworCQloLT5vcmlnX3JzdiA9IGgtPmJsb2NrX3JzdjsKKwkJaC0+YmxvY2tfcnN2ID0gTlVMTDsKKwkJZ290byBnb3RfaXQ7CisJfQogYWdhaW46CiAJaCA9IGttZW1fY2FjaGVfYWxsb2MoYnRyZnNfdHJhbnNfaGFuZGxlX2NhY2hlcCwgR0ZQX05PRlMpOwogCWlmICghaCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlpZiAodHlwZSAhPSBUUkFOU19KT0lOX05PTE9DSykKLQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCWlmIChtYXlfd2FpdF90cmFuc2FjdGlvbihyb290LCB0eXBlKSkKIAkJd2FpdF9jdXJyZW50X3RyYW5zKHJvb3QpOwogCi0JcmV0ID0gam9pbl90cmFuc2FjdGlvbihyb290KTsKKwlkbyB7CisJCXJldCA9IGpvaW5fdHJhbnNhY3Rpb24ocm9vdCwgdHlwZSA9PSBUUkFOU19KT0lOX05PTE9DSyk7CisJCWlmIChyZXQgPT0gLUVCVVNZKQorCQkJd2FpdF9jdXJyZW50X3RyYW5zKHJvb3QpOworCX0gd2hpbGUgKHJldCA9PSAtRUJVU1kpOworCiAJaWYgKHJldCA8IDApIHsKIAkJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX3RyYW5zX2hhbmRsZV9jYWNoZXAsIGgpOwotCQlpZiAodHlwZSAhPSBUUkFOU19KT0lOX05PTE9DSykKLQkJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0KIAogCWN1cl90cmFucyA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247Ci0JYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwotCWlmICh0eXBlICE9IFRSQU5TX0pPSU5fTk9MT0NLKQotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCWgtPnRyYW5zaWQgPSBjdXJfdHJhbnMtPnRyYW5zaWQ7CiAJaC0+dHJhbnNhY3Rpb24gPSBjdXJfdHJhbnM7CiAJaC0+YmxvY2tzX3VzZWQgPSAwOwotCWgtPmJsb2NrX2dyb3VwID0gMDsKIAloLT5ieXRlc19yZXNlcnZlZCA9IDA7CiAJaC0+ZGVsYXllZF9yZWZfdXBkYXRlcyA9IDA7CisJaC0+dXNlX2NvdW50ID0gMTsKIAloLT5ibG9ja19yc3YgPSBOVUxMOworCWgtPm9yaWdfcnN2ID0gTlVMTDsKIAogCXNtcF9tYigpOwogCWlmIChjdXJfdHJhbnMtPmJsb2NrZWQgJiYgbWF5X3dhaXRfdHJhbnNhY3Rpb24ocm9vdCwgdHlwZSkpIHsKQEAgLTI0MSwxMSArMjczLDggQEAKIAkJfQogCX0KIAotCWlmICh0eXBlICE9IFRSQU5TX0pPSU5fTk9MT0NLKQotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0JcmVjb3JkX3Jvb3RfaW5fdHJhbnMoaCwgcm9vdCk7Ci0JaWYgKHR5cGUgIT0gVFJBTlNfSk9JTl9OT0xPQ0spCi0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworZ290X2l0OgorCWJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKGgsIHJvb3QpOwogCiAJaWYgKCFjdXJyZW50LT5qb3VybmFsX2luZm8gJiYgdHlwZSAhPSBUUkFOU19VU0VSU1BBQ0UpCiAJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IGg7CkBAIC0yNTcsMjIgKzI4NiwxOSBAQAogewogCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyb290LCBudW1faXRlbXMsIFRSQU5TX1NUQVJUKTsKIH0KLXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCQkgICBpbnQgbnVtX2Jsb2NrcykKK3N0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCiB7CiAJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDAsIFRSQU5TX0pPSU4pOwogfQogCi1zdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJCQkgIGludCBudW1fYmxvY2tzKQorc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2soc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCiB7CiAJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDAsIFRSQU5TX0pPSU5fTk9MT0NLKTsKIH0KIAotc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnIsCi0JCQkJCQkJIGludCBudW1fYmxvY2tzKQorc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCiB7Ci0JcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHIsIDAsIFRSQU5TX1VTRVJTUEFDRSk7CisJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDAsIFRSQU5TX1VTRVJTUEFDRSk7CiB9CiAKIC8qIHdhaXQgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IHRvIGJlIGZ1bGx5IGNvbXBsZXRlICovCkBAIC0yODAsMTcgKzMwNiwxMyBAQAogCQkJCSAgICBzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24gKmNvbW1pdCkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJd2hpbGUgKCFjb21taXQtPmNvbW1pdF9kb25lKSB7CiAJCXByZXBhcmVfdG9fd2FpdCgmY29tbWl0LT5jb21taXRfd2FpdCwgJndhaXQsCiAJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQlpZiAoY29tbWl0LT5jb21taXRfZG9uZSkKIAkJCWJyZWFrOwotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJc2NoZWR1bGUoKTsKLQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCX0KLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlmaW5pc2hfd2FpdCgmY29tbWl0LT5jb21taXRfd2FpdCwgJndhaXQpOwogCXJldHVybiAwOwogfQpAQCAtMzAwLDU5ICszMjIsNTYgQEAKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24gKmN1cl90cmFucyA9IE5VTEwsICp0OwogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0KIAlyZXQgPSAwOwogCWlmICh0cmFuc2lkKSB7CiAJCWlmICh0cmFuc2lkIDw9IHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKQotCQkJZ290byBvdXRfdW5sb2NrOworCQkJZ290byBvdXQ7CiAKIAkJLyogZmluZCBzcGVjaWZpZWQgdHJhbnNhY3Rpb24gKi8KKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbGlzdCwgbGlzdCkgewogCQkJaWYgKHQtPnRyYW5zaWQgPT0gdHJhbnNpZCkgewogCQkJCWN1cl90cmFucyA9IHQ7CisJCQkJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKHQtPnRyYW5zaWQgPiB0cmFuc2lkKQogCQkJCWJyZWFrOwogCQl9CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJaWYgKCFjdXJfdHJhbnMpCi0JCQlnb3RvIG91dF91bmxvY2s7ICAvKiBiYWQgdHJhbnNpZCAqLworCQkJZ290byBvdXQ7ICAvKiBiYWQgdHJhbnNpZCAqLwogCX0gZWxzZSB7CiAJCS8qIGZpbmQgbmV3ZXN0IHRyYW5zYWN0aW9uIHRoYXQgaXMgY29tbWl0dGluZyB8IGNvbW1pdHRlZCAqLworCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodCwgJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xpc3QsCiAJCQkJCSAgICBsaXN0KSB7CiAJCQlpZiAodC0+aW5fY29tbWl0KSB7CiAJCQkJaWYgKHQtPmNvbW1pdF9kb25lKQotCQkJCQlnb3RvIG91dF91bmxvY2s7CisJCQkJCWJyZWFrOwogCQkJCWN1cl90cmFucyA9IHQ7CisJCQkJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJaWYgKCFjdXJfdHJhbnMpCi0JCQlnb3RvIG91dF91bmxvY2s7ICAvKiBub3RoaW5nIGNvbW1pdHRpbmd8Y29tbWl0dGVkICovCisJCQlnb3RvIG91dDsgIC8qIG5vdGhpbmcgY29tbWl0dGluZ3xjb21taXR0ZWQgKi8KIAl9CiAKLQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0KIAl3YWl0X2Zvcl9jb21taXQocm9vdCwgY3VyX3RyYW5zKTsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAlyZXQgPSAwOwotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGJ0cmZzX3Rocm90dGxlKHN0cnVjdCBidHJmc19yb290ICpyb290KQogewotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQlpZiAoIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpCisJaWYgKCFhdG9taWNfcmVhZCgmcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucykpCiAJCXdhaXRfY3VycmVudF90cmFucyhyb290KTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIH0KIAogc3RhdGljIGludCBzaG91bGRfZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApAQCAtMzcwLDYgKzM4OSw3IEBACiAJc3RydWN0IGJ0cmZzX3RyYW5zYWN0aW9uICpjdXJfdHJhbnMgPSB0cmFucy0+dHJhbnNhY3Rpb247CiAJaW50IHVwZGF0ZXM7CiAKKwlzbXBfbWIoKTsKIAlpZiAoY3VyX3RyYW5zLT5ibG9ja2VkIHx8IGN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nKQogCQlyZXR1cm4gMTsKIApAQCAtMzg4LDYgKzQwOCwxMSBAQAogCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKIAlpbnQgY291bnQgPSAwOwogCisJaWYgKC0tdHJhbnMtPnVzZV9jb3VudCkgeworCQl0cmFucy0+YmxvY2tfcnN2ID0gdHJhbnMtPm9yaWdfcnN2OworCQlyZXR1cm4gMDsKKwl9CisKIAl3aGlsZSAoY291bnQgPCA0KSB7CiAJCXVuc2lnbmVkIGxvbmcgY3VyID0gdHJhbnMtPmRlbGF5ZWRfcmVmX3VwZGF0ZXM7CiAJCXRyYW5zLT5kZWxheWVkX3JlZl91cGRhdGVzID0gMDsKQEAgLTQxMCw5ICs0MzUsMTEgQEAKIAogCWJ0cmZzX3RyYW5zX3JlbGVhc2VfbWV0YWRhdGEodHJhbnMsIHJvb3QpOwogCi0JaWYgKGxvY2sgJiYgIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMgJiYKLQkgICAgc2hvdWxkX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCkpCisJaWYgKGxvY2sgJiYgIWF0b21pY19yZWFkKCZyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSAmJgorCSAgICBzaG91bGRfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KSkgewogCQl0cmFucy0+dHJhbnNhY3Rpb24tPmJsb2NrZWQgPSAxOworCQlzbXBfd21iKCk7CisJfQogCiAJaWYgKGxvY2sgJiYgY3VyX3RyYW5zLT5ibG9ja2VkICYmICFjdXJfdHJhbnMtPmluX2NvbW1pdCkgewogCQlpZiAodGhyb3R0bGUpCkBAIC03MDMsOSArNzMwLDkgQEAKICAqLwogaW50IGJ0cmZzX2FkZF9kZWFkX3Jvb3Qoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCiB7Ci0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJbGlzdF9hZGQoJnJvb3QtPnJvb3RfbGlzdCwgJnJvb3QtPmZzX2luZm8tPmRlYWRfcm9vdHMpOwotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzIxLDYgKzc0OCw3IEBACiAJaW50IHJldDsKIAlpbnQgZXJyID0gMDsKIAorCXNwaW5fbG9jaygmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXhfbG9jayk7CiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gcmFkaXhfdHJlZV9nYW5nX2xvb2t1cF90YWcoJmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4LAogCQkJCQkJICh2b2lkICoqKWdhbmcsIDAsCkBAIC03MzMsNiArNzYxLDcgQEAKIAkJCXJhZGl4X3RyZWVfdGFnX2NsZWFyKCZmc19pbmZvLT5mc19yb290c19yYWRpeCwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCiAJCQkJCUJUUkZTX1JPT1RfVFJBTlNfVEFHKTsKKwkJCXNwaW5fdW5sb2NrKCZmc19pbmZvLT5mc19yb290c19yYWRpeF9sb2NrKTsKIAogCQkJYnRyZnNfZnJlZV9sb2codHJhbnMsIHJvb3QpOwogCQkJYnRyZnNfdXBkYXRlX3JlbG9jX3Jvb3QodHJhbnMsIHJvb3QpOwpAQCAtNzUzLDEwICs3ODIsMTIgQEAKIAkJCWVyciA9IGJ0cmZzX3VwZGF0ZV9yb290KHRyYW5zLCBmc19pbmZvLT50cmVlX3Jvb3QsCiAJCQkJCQkmcm9vdC0+cm9vdF9rZXksCiAJCQkJCQkmcm9vdC0+cm9vdF9pdGVtKTsKKwkJCXNwaW5fbG9jaygmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXhfbG9jayk7CiAJCQlpZiAoZXJyKQogCQkJCWJyZWFrOwogCQl9CiAJfQorCXNwaW5fdW5sb2NrKCZmc19pbmZvLT5mc19yb290c19yYWRpeF9sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03ODYsNyArODE3LDcgQEAKIAkJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShpbmZvLT50cmVlX3Jvb3QsIG5yKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAKLQkJaWYgKHJvb3QtPmZzX2luZm8tPmNsb3NpbmcgfHwgcmV0ICE9IC1FQUdBSU4pCisJCWlmIChidHJmc19mc19jbG9zaW5nKHJvb3QtPmZzX2luZm8pIHx8IHJldCAhPSAtRUFHQUlOKQogCQkJYnJlYWs7CiAJfQogCXJvb3QtPmRlZnJhZ19ydW5uaW5nID0gMDsKQEAgLTg1MSw3ICs4ODIsNyBAQAogCXBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7CiAJcGFyZW50X2lub2RlID0gcGFyZW50LT5kX2lub2RlOwogCXBhcmVudF9yb290ID0gQlRSRlNfSShwYXJlbnRfaW5vZGUpLT5yb290OwotCXJlY29yZF9yb290X2luX3RyYW5zKHRyYW5zLCBwYXJlbnRfcm9vdCk7CisJYnRyZnNfcmVjb3JkX3Jvb3RfaW5fdHJhbnModHJhbnMsIHBhcmVudF9yb290KTsKIAogCS8qCiAJICogaW5zZXJ0IHRoZSBkaXJlY3RvcnkgaXRlbQpAQCAtODY5LDcgKzkwMCw3IEBACiAJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCBwYXJlbnRfcm9vdCwgcGFyZW50X2lub2RlKTsKIAlCVUdfT04ocmV0KTsKIAotCXJlY29yZF9yb290X2luX3RyYW5zKHRyYW5zLCByb290KTsKKwlidHJmc19yZWNvcmRfcm9vdF9pbl90cmFucyh0cmFucywgcm9vdCk7CiAJYnRyZnNfc2V0X3Jvb3RfbGFzdF9zbmFwc2hvdCgmcm9vdC0+cm9vdF9pdGVtLCB0cmFucy0+dHJhbnNpZCk7CiAJbWVtY3B5KG5ld19yb290X2l0ZW0sICZyb290LT5yb290X2l0ZW0sIHNpemVvZigqbmV3X3Jvb3RfaXRlbSkpOwogCWJ0cmZzX2NoZWNrX2FuZF9pbml0X3Jvb3RfaXRlbShuZXdfcm9vdF9pdGVtKTsKQEAgLTk2NywyMCArOTk4LDIwIEBACiBpbnQgYnRyZnNfdHJhbnNhY3Rpb25faW5fY29tbWl0KHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvKQogewogCWludCByZXQgPSAwOwotCXNwaW5fbG9jaygmaW5mby0+bmV3X3RyYW5zX2xvY2spOworCXNwaW5fbG9jaygmaW5mby0+dHJhbnNfbG9jayk7CiAJaWYgKGluZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24pCiAJCXJldCA9IGluZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPmluX2NvbW1pdDsKLQlzcGluX3VubG9jaygmaW5mby0+bmV3X3RyYW5zX2xvY2spOworCXNwaW5fdW5sb2NrKCZpbmZvLT50cmFuc19sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgYnRyZnNfdHJhbnNhY3Rpb25fYmxvY2tlZChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbykKIHsKIAlpbnQgcmV0ID0gMDsKLQlzcGluX2xvY2soJmluZm8tPm5ld190cmFuc19sb2NrKTsKKwlzcGluX2xvY2soJmluZm8tPnRyYW5zX2xvY2spOwogCWlmIChpbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uKQogCQlyZXQgPSBpbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uLT5ibG9ja2VkOwotCXNwaW5fdW5sb2NrKCZpbmZvLT5uZXdfdHJhbnNfbG9jayk7CisJc3Bpbl91bmxvY2soJmluZm8tPnRyYW5zX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMDQsOSArMTAzNSw3IEBACiAJCQkJICAgICZ3YWl0KTsKIAkJCWJyZWFrOwogCQl9Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWZpbmlzaF93YWl0KCZyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl9ibG9ja2VkX3dhaXQsICZ3YWl0KTsKIAl9CiB9CkBAIC0xMDMyLDkgKzEwNjEsNyBAQAogCQkJCSAgICAmd2FpdCk7CiAJCQlicmVhazsKIAkJfQotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJc2NoZWR1bGUoKTsKLQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlmaW5pc2hfd2FpdCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCwKIAkJCSAgICAmd2FpdCk7CiAJfQpAQCAtMTA3Miw3ICsxMDk5LDcgQEAKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZhYy0+d29yaywgZG9fYXN5bmNfY29tbWl0KTsKIAlhYy0+cm9vdCA9IHJvb3Q7Ci0JYWMtPm5ld3RyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKKwlhYy0+bmV3dHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCWlmIChJU19FUlIoYWMtPm5ld3RyYW5zKSkgewogCQlpbnQgZXJyID0gUFRSX0VSUihhYy0+bmV3dHJhbnMpOwogCQlrZnJlZShhYyk7CkBAIC0xMDgwLDIzICsxMTA3LDIyIEBACiAJfQogCiAJLyogdGFrZSB0cmFuc2FjdGlvbiByZWZlcmVuY2UgKi8KLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJY3VyX3RyYW5zID0gdHJhbnMtPnRyYW5zYWN0aW9uOwogCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhYy0+d29yaywgMCk7CiAKIAkvKiB3YWl0IGZvciB0cmFuc2FjdGlvbiB0byBzdGFydCBhbmQgdW5ibG9jayAqLwotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlpZiAod2FpdF9mb3JfdW5ibG9jaykKIAkJd2FpdF9jdXJyZW50X3RyYW5zX2NvbW1pdF9zdGFydF9hbmRfdW5ibG9jayhyb290LCBjdXJfdHJhbnMpOwogCWVsc2UKIAkJd2FpdF9jdXJyZW50X3RyYW5zX2NvbW1pdF9zdGFydChyb290LCBjdXJfdHJhbnMpOwotCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCisJaWYgKGN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9PSB0cmFucykKKwkJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKKworCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTM5LDM4ICsxMTY1LDQxIEBACiAJcmV0ID0gYnRyZnNfcnVuX2RlbGF5ZWRfcmVmcyh0cmFucywgcm9vdCwgMCk7CiAJQlVHX09OKHJldCk7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJc3Bpbl9sb2NrKCZjdXJfdHJhbnMtPmNvbW1pdF9sb2NrKTsKIAlpZiAoY3VyX3RyYW5zLT5pbl9jb21taXQpIHsKKwkJc3Bpbl91bmxvY2soJmN1cl90cmFucy0+Y29tbWl0X2xvY2spOwogCQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCiAJCXJldCA9IHdhaXRfZm9yX2NvbW1pdChyb290LCBjdXJfdHJhbnMpOwogCQlCVUdfT04ocmV0KTsKIAotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCQlyZXR1cm4gMDsKIAl9CiAKIAl0cmFucy0+dHJhbnNhY3Rpb24tPmluX2NvbW1pdCA9IDE7CiAJdHJhbnMtPnRyYW5zYWN0aW9uLT5ibG9ja2VkID0gMTsKKwlzcGluX3VubG9jaygmY3VyX3RyYW5zLT5jb21taXRfbG9jayk7CiAJd2FrZV91cCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fYmxvY2tlZF93YWl0KTsKIAorCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJaWYgKGN1cl90cmFucy0+bGlzdC5wcmV2ICE9ICZyb290LT5mc19pbmZvLT50cmFuc19saXN0KSB7CiAJCXByZXZfdHJhbnMgPSBsaXN0X2VudHJ5KGN1cl90cmFucy0+bGlzdC5wcmV2LAogCQkJCQlzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24sIGxpc3QpOwogCQlpZiAoIXByZXZfdHJhbnMtPmNvbW1pdF9kb25lKSB7CiAJCQlhdG9taWNfaW5jKCZwcmV2X3RyYW5zLT51c2VfY291bnQpOwotCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAKIAkJCXdhaXRfZm9yX2NvbW1pdChyb290LCBwcmV2X3RyYW5zKTsKIAotCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQkJcHV0X3RyYW5zYWN0aW9uKHByZXZfdHJhbnMpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCQl9CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCX0KIAogCWlmIChub3cgPCBjdXJfdHJhbnMtPnN0YXJ0X3RpbWUgfHwgbm93IC0gY3VyX3RyYW5zLT5zdGFydF90aW1lIDwgMSkKQEAgLTExNzgsMTIgKzEyMDcsMTIgQEAKIAogCWRvIHsKIAkJaW50IHNuYXBfcGVuZGluZyA9IDA7CisKIAkJam9pbmVkID0gY3VyX3RyYW5zLT5udW1fam9pbmVkOwogCQlpZiAoIWxpc3RfZW1wdHkoJnRyYW5zLT50cmFuc2FjdGlvbi0+cGVuZGluZ19zbmFwc2hvdHMpKQogCQkJc25hcF9wZW5kaW5nID0gMTsKIAogCQlXQVJOX09OKGN1cl90cmFucyAhPSB0cmFucy0+dHJhbnNhY3Rpb24pOwotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCQlpZiAoZmx1c2hfb25fY29tbWl0IHx8IHNuYXBfcGVuZGluZykgewogCQkJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QsIDEpOwpAQCAtMTIwNiwxNCArMTIzNSwxNSBAQAogCQlwcmVwYXJlX3RvX3dhaXQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQsICZ3YWl0LAogCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAotCQlzbXBfbWIoKTsKIAkJaWYgKGF0b21pY19yZWFkKCZjdXJfdHJhbnMtPm51bV93cml0ZXJzKSA+IDEpCiAJCQlzY2hlZHVsZV90aW1lb3V0KE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAkJZWxzZSBpZiAoc2hvdWxkX2dyb3cpCiAJCQlzY2hlZHVsZV90aW1lb3V0KDEpOwogCi0JCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJZmluaXNoX3dhaXQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQsICZ3YWl0KTsKKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKKwkJcm9vdC0+ZnNfaW5mby0+dHJhbnNfbm9fam9pbiA9IDE7CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAl9IHdoaWxlIChhdG9taWNfcmVhZCgmY3VyX3RyYW5zLT5udW1fd3JpdGVycykgPiAxIHx8CiAJCSAoc2hvdWxkX2dyb3cgJiYgY3VyX3RyYW5zLT5udW1fam9pbmVkICE9IGpvaW5lZCkpOwogCkBAIC0xMjU4LDkgKzEyODgsNiBAQAogCWJ0cmZzX3ByZXBhcmVfZXh0ZW50X2NvbW1pdCh0cmFucywgcm9vdCk7CiAKIAljdXJfdHJhbnMgPSByb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uOwotCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOwotCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24gPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CiAKIAlidHJmc19zZXRfcm9vdF9ub2RlKCZyb290LT5mc19pbmZvLT50cmVlX3Jvb3QtPnJvb3RfaXRlbSwKIAkJCSAgICByb290LT5mc19pbmZvLT50cmVlX3Jvb3QtPm5vZGUpOwpAQCAtMTI4MSwxMCArMTMwOCwxMyBAQAogCSAgICAgICBzaXplb2Yocm9vdC0+ZnNfaW5mby0+c3VwZXJfY29weSkpOwogCiAJdHJhbnMtPnRyYW5zYWN0aW9uLT5ibG9ja2VkID0gMDsKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24gPSBOVUxMOworCXJvb3QtPmZzX2luZm8tPnRyYW5zX25vX2pvaW4gPSAwOworCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAogCXdha2VfdXAoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQpOwogCi0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCUJVR19PTihyZXQpOwogCXdyaXRlX2N0cmVlX3N1cGVyKHRyYW5zLCByb290LCAwKTsKQEAgLTEyOTcsMjIgKzEzMjcsMjEgQEAKIAogCWJ0cmZzX2ZpbmlzaF9leHRlbnRfY29tbWl0KHRyYW5zLCByb290KTsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQogCWN1cl90cmFucy0+Y29tbWl0X2RvbmUgPSAxOwogCiAJcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19jb21taXR0ZWQgPSBjdXJfdHJhbnMtPnRyYW5zaWQ7CiAKIAl3YWtlX3VwKCZjdXJfdHJhbnMtPmNvbW1pdF93YWl0KTsKIAorCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmY3VyX3RyYW5zLT5saXN0KTsKKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAogCXRyYWNlX2J0cmZzX3RyYW5zYWN0aW9uX2NvbW1pdChyb290KTsKIAotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCiAJYnRyZnNfc2NydWJfY29udGludWUocm9vdCk7CiAKIAlpZiAoY3VycmVudC0+am91cm5hbF9pbmZvID09IHRyYW5zKQpAQCAtMTMzNCw5ICsxMzYzLDkgQEAKIAlMSVNUX0hFQUQobGlzdCk7CiAJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8gPSByb290LT5mc19pbmZvOwogCi0JbXV0ZXhfbG9jaygmZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXNwaW5fbG9jaygmZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJbGlzdF9zcGxpY2VfaW5pdCgmZnNfaW5mby0+ZGVhZF9yb290cywgJmxpc3QpOwotCW11dGV4X3VubG9jaygmZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZmc19pbmZvLT50cmFuc19sb2NrKTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKIAkJcm9vdCA9IGxpc3RfZW50cnkobGlzdC5uZXh0LCBzdHJ1Y3QgYnRyZnNfcm9vdCwgcm9vdF9saXN0KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmggYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCmluZGV4IDgwNGM4ODYuLjAyNTY0ZTYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaApAQCAtMjgsMTAgKzI4LDEyIEBACiAJICogdHJhbnNhY3Rpb24gY2FuIGVuZAogCSAqLwogCWF0b21pY190IG51bV93cml0ZXJzOworCWF0b21pY190IHVzZV9jb3VudDsKIAogCXVuc2lnbmVkIGxvbmcgbnVtX2pvaW5lZDsKKworCXNwaW5sb2NrX3QgY29tbWl0X2xvY2s7CiAJaW50IGluX2NvbW1pdDsKLQlhdG9taWNfdCB1c2VfY291bnQ7CiAJaW50IGNvbW1pdF9kb25lOwogCWludCBibG9ja2VkOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTQ1LDEzICs0NywxNCBAQAogCiBzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlIHsKIAl1NjQgdHJhbnNpZDsKLQl1NjQgYmxvY2tfZ3JvdXA7CiAJdTY0IGJ5dGVzX3Jlc2VydmVkOworCXVuc2lnbmVkIGxvbmcgdXNlX2NvdW50OwogCXVuc2lnbmVkIGxvbmcgYmxvY2tzX3Jlc2VydmVkOwogCXVuc2lnbmVkIGxvbmcgYmxvY2tzX3VzZWQ7CiAJdW5zaWduZWQgbG9uZyBkZWxheWVkX3JlZl91cGRhdGVzOwogCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CiAJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqYmxvY2tfcnN2OworCXN0cnVjdCBidHJmc19ibG9ja19yc3YgKm9yaWdfcnN2OwogfTsKIAogc3RydWN0IGJ0cmZzX3BlbmRpbmdfc25hcHNob3QgewpAQCAtNjYsMTkgKzY5LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQl0cmFucy0+YmxvY2tfZ3JvdXAgPSBCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAoCi0JCQkJCSAgc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXAgPSB0cmFucy0+YmxvY2tfZ3JvdXA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBidHJmc19zZXRfaW5vZGVfbGFzdF90cmFucyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTkyLDEyICs4Miw5IEBACiAJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkJICAgaW50IG51bV9pdGVtcyk7Ci1zdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQkJICBpbnQgbnVtX2Jsb2Nrcyk7Ci1zdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJCQkgIGludCBudW1fYmxvY2tzKTsKLXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX3N0YXJ0X2lvY3RsX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyLAotCQkJCQkJCSBpbnQgbnVtX2Jsb2Nrcyk7CitzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKK3N0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb25fbm9sb2NrKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKK3N0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX3N0YXJ0X2lvY3RsX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc193YWl0X2Zvcl9jb21taXQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCB0cmFuc2lkKTsKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ZvbHVtZXMuYyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwppbmRleCBjNDgyMTRlZi4uMWVmYTU2ZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtNTA0LDcgKzUwNCw3IEBACiAJCUJVR19PTighbmV3X2RldmljZSk7CiAJCW1lbWNweShuZXdfZGV2aWNlLCBkZXZpY2UsIHNpemVvZigqbmV3X2RldmljZSkpOwogCQluZXdfZGV2aWNlLT5uYW1lID0ga3N0cmR1cChkZXZpY2UtPm5hbWUsIEdGUF9OT0ZTKTsKLQkJQlVHX09OKCFuZXdfZGV2aWNlLT5uYW1lKTsKKwkJQlVHX09OKGRldmljZS0+bmFtZSAmJiAhbmV3X2RldmljZS0+bmFtZSk7CiAJCW5ld19kZXZpY2UtPmJkZXYgPSBOVUxMOwogCQluZXdfZGV2aWNlLT53cml0ZWFibGUgPSAwOwogCQluZXdfZGV2aWNlLT5pbl9mc19tZXRhZGF0YSA9IDA7CkBAIC02ODksMTIgKzY4OSw4IEBACiAJdHJhbnNpZCA9IGJ0cmZzX3N1cGVyX2dlbmVyYXRpb24oZGlza19zdXBlcik7CiAJaWYgKGRpc2tfc3VwZXItPmxhYmVsWzBdKQogCQlwcmludGsoS0VSTl9JTkZPICJkZXZpY2UgbGFiZWwgJXMgIiwgZGlza19zdXBlci0+bGFiZWwpOwotCWVsc2UgewotCQkvKiBGSVhNRSwgbWFrZSBhIHJlYWRsIHV1aWQgcGFyc2VyICovCi0JCXByaW50ayhLRVJOX0lORk8gImRldmljZSBmc2lkICVsbHgtJWxseCAiLAotCQkgICAgICAgKih1bnNpZ25lZCBsb25nIGxvbmcgKilkaXNrX3N1cGVyLT5mc2lkLAotCQkgICAgICAgKih1bnNpZ25lZCBsb25nIGxvbmcgKikoZGlza19zdXBlci0+ZnNpZCArIDgpKTsKLQl9CisJZWxzZQorCQlwcmludGsoS0VSTl9JTkZPICJkZXZpY2UgZnNpZCAlcFUgIiwgZGlza19zdXBlci0+ZnNpZCk7CiAJcHJpbnRrKEtFUk5fQ09OVCAiZGV2aWQgJWxsdSB0cmFuc2lkICVsbHUgJXNcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2aWQsICh1bnNpZ25lZCBsb25nIGxvbmcpdHJhbnNpZCwgcGF0aCk7CiAJcmV0ID0gZGV2aWNlX2xpc3RfYWRkKHBhdGgsIGRpc2tfc3VwZXIsIGRldmlkLCBmc19kZXZpY2VzX3JldCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy94YXR0ci5jIGIvZnMvYnRyZnMveGF0dHIuYwppbmRleCBmMzEwN2U0Li41MzY2ZmU0IDEwMDY0NAotLS0gYS9mcy9idHJmcy94YXR0ci5jCisrKyBiL2ZzL2J0cmZzL3hhdHRyLmMKQEAgLTE1OCw4ICsxNTgsNiBAQAogCWlmIChJU19FUlIodHJhbnMpKQogCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKLQogCXJldCA9IGRvX3NldHhhdHRyKHRyYW5zLCBpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggNDljOWFhZC4uMWE4MGIwNCAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTE5MDIsMTAgKzE5MDIsOCBAQAogCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZSgqd2FpdF9iaCkpCiAJCQllcnIgPSAtRUlPOwogCX0KLQlpZiAodW5saWtlbHkoZXJyKSkgeworCWlmICh1bmxpa2VseShlcnIpKQogCQlwYWdlX3plcm9fbmV3X2J1ZmZlcnMocGFnZSwgZnJvbSwgdG8pOwotCQlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKLQl9CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woX19ibG9ja193cml0ZV9iZWdpbik7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2FkZHIuYyBiL2ZzL2NlcGgvYWRkci5jCmluZGV4IDMzZGE0OWQuLjVhMzk1M2QgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvYWRkci5jCisrKyBiL2ZzL2NlcGgvYWRkci5jCkBAIC00NTMsNyArNDUzLDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCUJVR19PTighaW5vZGUpOwotCWlncmFiKGlub2RlKTsKKwlpaG9sZChpbm9kZSk7CiAJZXJyID0gd3JpdGVwYWdlX25vdW5sb2NrKHBhZ2UsIHdiYyk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJaXB1dChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2NhcHMuYyBiL2ZzL2NlcGgvY2Fwcy5jCmluZGV4IDFmNzJiMDA0Li5mNjA1NzUzIDEwMDY0NAotLS0gYS9mcy9jZXBoL2NhcHMuYworKysgYi9mcy9jZXBoL2NhcHMuYwpAQCAtMjk0MCwxNCArMjk0MCwxMiBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmbWRzYy0+Y2FwX2RpcnR5KSkgewogCQljaSA9IGxpc3RfZmlyc3RfZW50cnkoJm1kc2MtPmNhcF9kaXJ0eSwgc3RydWN0IGNlcGhfaW5vZGVfaW5mbywKIAkJCQkgICAgICBpX2RpcnR5X2l0ZW0pOwotCQlpbm9kZSA9IGlncmFiKCZjaS0+dmZzX2lub2RlKTsKKwkJaW5vZGUgPSAmY2ktPnZmc19pbm9kZTsKKwkJaWhvbGQoaW5vZGUpOwogCQlkb3V0KCJmbHVzaF9kaXJ0eV9jYXBzICVwXG4iLCBpbm9kZSk7CiAJCXNwaW5fdW5sb2NrKCZtZHNjLT5jYXBfZGlydHlfbG9jayk7Ci0JCWlmIChpbm9kZSkgewotCQkJY2VwaF9jaGVja19jYXBzKGNpLCBDSEVDS19DQVBTX05PREVMQVl8Q0hFQ0tfQ0FQU19GTFVTSCwKLQkJCQkJTlVMTCk7Ci0JCQlpcHV0KGlub2RlKTsKLQkJfQorCQljZXBoX2NoZWNrX2NhcHMoY2ksIENIRUNLX0NBUFNfTk9ERUxBWXxDSEVDS19DQVBTX0ZMVVNILCBOVUxMKTsKKwkJaXB1dChpbm9kZSk7CiAJCXNwaW5fbG9jaygmbWRzYy0+Y2FwX2RpcnR5X2xvY2spOwogCX0KIAlzcGluX3VubG9jaygmbWRzYy0+Y2FwX2RpcnR5X2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9kaXIuYyBiL2ZzL2NlcGgvZGlyLmMKaW5kZXggMzM3MjllOC4uZWY4ZjA4YyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9kaXIuYworKysgYi9mcy9jZXBoL2Rpci5jCkBAIC0zMDgsNyArMzA4LDggQEAKIAkJcmVxID0gY2VwaF9tZHNjX2NyZWF0ZV9yZXF1ZXN0KG1kc2MsIG9wLCBVU0VfQVVUSF9NRFMpOwogCQlpZiAoSVNfRVJSKHJlcSkpCiAJCQlyZXR1cm4gUFRSX0VSUihyZXEpOwotCQlyZXEtPnJfaW5vZGUgPSBpZ3JhYihpbm9kZSk7CisJCXJlcS0+cl9pbm9kZSA9IGlub2RlOworCQlpaG9sZChpbm9kZSk7CiAJCXJlcS0+cl9kZW50cnkgPSBkZ2V0KGZpbHAtPmZfZGVudHJ5KTsKIAkJLyogaGludHMgdG8gcmVxdWVzdCAtPiBtZHMgc2VsZWN0aW9uIGNvZGUgKi8KIAkJcmVxLT5yX2RpcmVjdF9tb2RlID0gVVNFX0FVVEhfTURTOwpAQCAtNzg3LDEwICs3ODgsMTIgQEAKIAlyZXEtPnJfZGVudHJ5X2Ryb3AgPSBDRVBIX0NBUF9GSUxFX1NIQVJFRDsKIAlyZXEtPnJfZGVudHJ5X3VubGVzcyA9IENFUEhfQ0FQX0ZJTEVfRVhDTDsKIAllcnIgPSBjZXBoX21kc2NfZG9fcmVxdWVzdChtZHNjLCBkaXIsIHJlcSk7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CiAJCWRfZHJvcChkZW50cnkpOwotCWVsc2UgaWYgKCFyZXEtPnJfcmVwbHlfaW5mby5oZWFkLT5pc19kZW50cnkpCi0JCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpZ3JhYihvbGRfZGVudHJ5LT5kX2lub2RlKSk7CisJfSBlbHNlIGlmICghcmVxLT5yX3JlcGx5X2luZm8uaGVhZC0+aXNfZGVudHJ5KSB7CisJCWlob2xkKG9sZF9kZW50cnktPmRfaW5vZGUpOworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgb2xkX2RlbnRyeS0+ZF9pbm9kZSk7CisJfQogCWNlcGhfbWRzY19wdXRfcmVxdWVzdChyZXEpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9mcy9jZXBoL2V4cG9ydC5jIGIvZnMvY2VwaC9leHBvcnQuYwppbmRleCBhNjEwZDNkLi5mNjdiNjg3IDEwMDY0NAotLS0gYS9mcy9jZXBoL2V4cG9ydC5jCisrKyBiL2ZzL2NlcGgvZXhwb3J0LmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCQllcnIgPSBjZXBoX21kc2NfZG9fcmVxdWVzdChtZHNjLCBOVUxMLCByZXEpOwogCQlpbm9kZSA9IHJlcS0+cl90YXJnZXRfaW5vZGU7CiAJCWlmIChpbm9kZSkKLQkJCWlncmFiKGlub2RlKTsKKwkJCWlob2xkKGlub2RlKTsKIAkJY2VwaF9tZHNjX3B1dF9yZXF1ZXN0KHJlcSk7CiAJCWlmICghaW5vZGUpCiAJCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQllcnIgPSBjZXBoX21kc2NfZG9fcmVxdWVzdChtZHNjLCBOVUxMLCByZXEpOwogCQlpbm9kZSA9IHJlcS0+cl90YXJnZXRfaW5vZGU7CiAJCWlmIChpbm9kZSkKLQkJCWlncmFiKGlub2RlKTsKKwkJCWlob2xkKGlub2RlKTsKIAkJY2VwaF9tZHNjX3B1dF9yZXF1ZXN0KHJlcSk7CiAJCWlmICghaW5vZGUpCiAJCQlyZXR1cm4gRVJSX1BUUihlcnIgPyBlcnIgOiAtRVNUQUxFKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZmlsZS5jIGIvZnMvY2VwaC9maWxlLmMKaW5kZXggMjAzMjUyZC4uOTU0MmYwNyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9maWxlLmMKKysrIGIvZnMvY2VwaC9maWxlLmMKQEAgLTE5MSw3ICsxOTEsOCBAQAogCQllcnIgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KLQlyZXEtPnJfaW5vZGUgPSBpZ3JhYihpbm9kZSk7CisJcmVxLT5yX2lub2RlID0gaW5vZGU7CisJaWhvbGQoaW5vZGUpOwogCXJlcS0+cl9udW1fY2FwcyA9IDE7CiAJZXJyID0gY2VwaF9tZHNjX2RvX3JlcXVlc3QobWRzYywgcGFyZW50X2lub2RlLCByZXEpOwogCWlmICghZXJyKQpAQCAtMjgyLDcgKzI4Myw3IEBACiBzdGF0aWMgaW50IHN0cmlwZWRfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJdTY0IG9mZiwgdTY0IGxlbiwKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1fcGFnZXMsCi0JCQlpbnQgKmNoZWNrZW9mLCBib29sIGFsaWduX3RvX3BhZ2VzLAorCQkJaW50ICpjaGVja2VvZiwgYm9vbCBvX2RpcmVjdCwKIAkJCXVuc2lnbmVkIGxvbmcgYnVmX2FsaWduKQogewogCXN0cnVjdCBjZXBoX2ZzX2NsaWVudCAqZnNjID0gY2VwaF9pbm9kZV90b19jbGllbnQoaW5vZGUpOwpAQCAtMzA3LDcgKzMwOCw3IEBACiAJaW9fYWxpZ24gPSBvZmYgJiB+UEFHRV9NQVNLOwogCiBtb3JlOgotCWlmIChhbGlnbl90b19wYWdlcykKKwlpZiAob19kaXJlY3QpCiAJCXBhZ2VfYWxpZ24gPSAocG9zIC0gaW9fYWxpZ24gKyBidWZfYWxpZ24pICYgflBBR0VfTUFTSzsKIAllbHNlCiAJCXBhZ2VfYWxpZ24gPSBwb3MgJiB+UEFHRV9NQVNLOwpAQCAtMzE3LDEwICszMTgsMTAgQEAKIAkJCQkgIGNpLT5pX3RydW5jYXRlX3NlcSwKIAkJCQkgIGNpLT5pX3RydW5jYXRlX3NpemUsCiAJCQkJICBwYWdlX3BvcywgcGFnZXNfbGVmdCwgcGFnZV9hbGlnbik7Ci0JaGl0X3N0cmlwZSA9IHRoaXNfbGVuIDwgbGVmdDsKLQl3YXNfc2hvcnQgPSByZXQgPj0gMCAmJiByZXQgPCB0aGlzX2xlbjsKIAlpZiAocmV0ID09IC1FTk9FTlQpCiAJCXJldCA9IDA7CisJaGl0X3N0cmlwZSA9IHRoaXNfbGVuIDwgbGVmdDsKKwl3YXNfc2hvcnQgPSByZXQgPj0gMCAmJiByZXQgPCB0aGlzX2xlbjsKIAlkb3V0KCJzdHJpcGVkX3JlYWQgJWxsdX4ldSAocmVhZCAldSkgZ290ICVkJXMlc1xuIiwgcG9zLCBsZWZ0LCByZWFkLAogCSAgICAgcmV0LCBoaXRfc3RyaXBlID8gIiBISVRTVFJJUEUiIDogIiIsIHdhc19zaG9ydCA/ICIgU0hPUlQiIDogIiIpOwogCkBAIC0zNDUsMjAgKzM0NiwyMiBAQAogCX0KIAogCWlmICh3YXNfc2hvcnQpIHsKLQkJLyogd2FzIG9yaWdpbmFsIGV4dGVudCBmdWxseSBpbnNpZGUgaV9zaXplPyAqLwotCQlpZiAocG9zICsgbGVmdCA8PSBpbm9kZS0+aV9zaXplKSB7Ci0JCQlkb3V0KCJ6ZXJvIHRhaWxcbiIpOwotCQkJY2VwaF96ZXJvX3BhZ2VfdmVjdG9yX3JhbmdlKHBhZ2Vfb2ZmICsgcmVhZCwgbGVuIC0gcmVhZCwKLQkJCQkJCSAgICBwYWdlcyk7Ci0JCQlyZWFkID0gbGVuOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJLyogZGlkIHdlIGJvdW5jZSBvZmYgZW9mPyAqLworCQlpZiAocG9zICsgbGVmdCA+IGlub2RlLT5pX3NpemUpCisJCQkqY2hlY2tlb2YgPSAxOwogCi0JCS8qIGNoZWNrIGlfc2l6ZSAqLwotCQkqY2hlY2tlb2YgPSAxOworCQkvKiB6ZXJvIHRyYWlsaW5nIGJ5dGVzIChpbnNpZGUgaV9zaXplKSAqLworCQlpZiAobGVmdCA+IDAgJiYgcG9zIDwgaW5vZGUtPmlfc2l6ZSkgeworCQkJaWYgKHBvcyArIGxlZnQgPiBpbm9kZS0+aV9zaXplKQorCQkJCWxlZnQgPSBpbm9kZS0+aV9zaXplIC0gcG9zOworCisJCQlkb3V0KCJ6ZXJvIHRhaWwgJWRcbiIsIGxlZnQpOworCQkJY2VwaF96ZXJvX3BhZ2VfdmVjdG9yX3JhbmdlKHBhZ2Vfb2ZmICsgcmVhZCwgbGVmdCwKKwkJCQkJCSAgICBwYWdlcyk7CisJCQlyZWFkICs9IGxlZnQ7CisJCX0KIAl9CiAKLW91dDoKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHJlYWQ7CiAJZG91dCgic3RyaXBlZF9yZWFkIHJldHVybnMgJWRcbiIsIHJldCk7CkBAIC02NTgsNyArNjYxLDcgQEAKIAogCQkvKiBoaXQgRU9GIG9yIGhvbGU/ICovCiAJCWlmIChzdGF0cmV0ID09IDAgJiYgKnBwb3MgPCBpbm9kZS0+aV9zaXplKSB7Ci0JCQlkb3V0KCJhaW9fcmVhZCBzeW5jX3JlYWQgaGl0IGhvbGUsIHJlYWRpbmcgbW9yZVxuIik7CisJCQlkb3V0KCJhaW9fcmVhZCBzeW5jX3JlYWQgaGl0IGhvbGUsIHBwb3MgJWxsZCA8IHNpemUgJWxsZCwgcmVhZGluZyBtb3JlXG4iLCAqcHBvcywgaW5vZGUtPmlfc2l6ZSk7CiAJCQlyZWFkICs9IHJldDsKIAkJCWJhc2UgKz0gcmV0OwogCQkJbGVuIC09IHJldDsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvaW5vZGUuYyBiL2ZzL2NlcGgvaW5vZGUuYwppbmRleCA3MGI2YTQ4Li5kODg1OGU5IDEwMDY0NAotLS0gYS9mcy9jZXBoL2lub2RlLmMKKysrIGIvZnMvY2VwaC9pbm9kZS5jCkBAIC0xMTAxLDEwICsxMTAxLDEwIEBACiAJCQkJZ290byBkb25lOwogCQkJfQogCQkJcmVxLT5yX2RlbnRyeSA9IGRuOyAgLyogbWF5IGhhdmUgc3BsaWNlZCAqLwotCQkJaWdyYWIoaW4pOworCQkJaWhvbGQoaW4pOwogCQl9IGVsc2UgaWYgKGNlcGhfaW5vKGluKSA9PSB2aW5vLmlubyAmJgogCQkJICAgY2VwaF9zbmFwKGluKSA9PSB2aW5vLnNuYXApIHsKLQkJCWlncmFiKGluKTsKKwkJCWlob2xkKGluKTsKIAkJfSBlbHNlIHsKIAkJCWRvdXQoIiAlcCBsaW5rcyB0byAlcCAlbGx4LiVsbHgsIG5vdCAlbGx4LiVsbHhcbiIsCiAJCQkgICAgIGRuLCBpbiwgY2VwaF9pbm8oaW4pLCBjZXBoX3NuYXAoaW4pLApAQCAtMTE0NCw3ICsxMTQ0LDcgQEAKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQlyZXEtPnJfZGVudHJ5ID0gZG47ICAvKiBtYXkgaGF2ZSBzcGxpY2VkICovCi0JCWlncmFiKGluKTsKKwkJaWhvbGQoaW4pOwogCQlyaW5mby0+aGVhZC0+aXNfZGVudHJ5ID0gMTsgIC8qIGZvb2wgbm90cmFjZSBoYW5kbGVycyAqLwogCX0KIApAQCAtMTMyOCw3ICsxMzI4LDcgQEAKIAlpZiAocXVldWVfd29yayhjZXBoX2lub2RlX3RvX2NsaWVudChpbm9kZSktPndiX3dxLAogCQkgICAgICAgJmNlcGhfaW5vZGUoaW5vZGUpLT5pX3diX3dvcmspKSB7CiAJCWRvdXQoImNlcGhfcXVldWVfd3JpdGViYWNrICVwXG4iLCBpbm9kZSk7Ci0JCWlncmFiKGlub2RlKTsKKwkJaWhvbGQoaW5vZGUpOwogCX0gZWxzZSB7CiAJCWRvdXQoImNlcGhfcXVldWVfd3JpdGViYWNrICVwIGZhaWxlZFxuIiwgaW5vZGUpOwogCX0KQEAgLTEzNTMsNyArMTM1Myw3IEBACiAJaWYgKHF1ZXVlX3dvcmsoY2VwaF9pbm9kZV90b19jbGllbnQoaW5vZGUpLT5wZ19pbnZfd3EsCiAJCSAgICAgICAmY2VwaF9pbm9kZShpbm9kZSktPmlfcGdfaW52X3dvcmspKSB7CiAJCWRvdXQoImNlcGhfcXVldWVfaW52YWxpZGF0ZSAlcFxuIiwgaW5vZGUpOwotCQlpZ3JhYihpbm9kZSk7CisJCWlob2xkKGlub2RlKTsKIAl9IGVsc2UgewogCQlkb3V0KCJjZXBoX3F1ZXVlX2ludmFsaWRhdGUgJXAgZmFpbGVkXG4iLCBpbm9kZSk7CiAJfQpAQCAtMTQ3Nyw3ICsxNDc3LDcgQEAKIAlpZiAocXVldWVfd29yayhjZXBoX3NiX3RvX2NsaWVudChpbm9kZS0+aV9zYiktPnRydW5jX3dxLAogCQkgICAgICAgJmNpLT5pX3ZtdHJ1bmNhdGVfd29yaykpIHsKIAkJZG91dCgiY2VwaF9xdWV1ZV92bXRydW5jYXRlICVwXG4iLCBpbm9kZSk7Ci0JCWlncmFiKGlub2RlKTsKKwkJaWhvbGQoaW5vZGUpOwogCX0gZWxzZSB7CiAJCWRvdXQoImNlcGhfcXVldWVfdm10cnVuY2F0ZSAlcCBmYWlsZWQsIHBlbmRpbmc9JWRcbiIsCiAJCSAgICAgaW5vZGUsIGNpLT5pX3RydW5jYXRlX3BlbmRpbmcpOwpAQCAtMTczOCw3ICsxNzM4LDggQEAKIAkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBpbm9kZV9kaXJ0eV9mbGFncyk7CiAKIAlpZiAobWFzaykgewotCQlyZXEtPnJfaW5vZGUgPSBpZ3JhYihpbm9kZSk7CisJCXJlcS0+cl9pbm9kZSA9IGlub2RlOworCQlpaG9sZChpbm9kZSk7CiAJCXJlcS0+cl9pbm9kZV9kcm9wID0gcmVsZWFzZTsKIAkJcmVxLT5yX2FyZ3Muc2V0YXR0ci5tYXNrID0gY3B1X3RvX2xlMzIobWFzayk7CiAJCXJlcS0+cl9udW1fY2FwcyA9IDE7CkBAIC0xNzc5LDcgKzE3ODAsOCBAQAogCXJlcSA9IGNlcGhfbWRzY19jcmVhdGVfcmVxdWVzdChtZHNjLCBDRVBIX01EU19PUF9HRVRBVFRSLCBVU0VfQU5ZX01EUyk7CiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwotCXJlcS0+cl9pbm9kZSA9IGlncmFiKGlub2RlKTsKKwlyZXEtPnJfaW5vZGUgPSBpbm9kZTsKKwlpaG9sZChpbm9kZSk7CiAJcmVxLT5yX251bV9jYXBzID0gMTsKIAlyZXEtPnJfYXJncy5nZXRhdHRyLm1hc2sgPSBjcHVfdG9fbGUzMihtYXNrKTsKIAllcnIgPSBjZXBoX21kc2NfZG9fcmVxdWVzdChtZHNjLCBOVUxMLCByZXEpOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9pb2N0bC5jIGIvZnMvY2VwaC9pb2N0bC5jCmluZGV4IDg4ODhjOWJhLi5lZjBiNWY0IDEwMDY0NAotLS0gYS9mcy9jZXBoL2lvY3RsLmMKKysrIGIvZnMvY2VwaC9pb2N0bC5jCkBAIC03Myw3ICs3Myw4IEBACiAJCQkJICAgICAgIFVTRV9BVVRIX01EUyk7CiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwotCXJlcS0+cl9pbm9kZSA9IGlncmFiKGlub2RlKTsKKwlyZXEtPnJfaW5vZGUgPSBpbm9kZTsKKwlpaG9sZChpbm9kZSk7CiAJcmVxLT5yX2lub2RlX2Ryb3AgPSBDRVBIX0NBUF9GSUxFX1NIQVJFRCB8IENFUEhfQ0FQX0ZJTEVfRVhDTDsKIAogCXJlcS0+cl9hcmdzLnNldGxheW91dC5sYXlvdXQuZmxfc3RyaXBlX3VuaXQgPQpAQCAtMTM1LDcgKzEzNiw4IEBACiAKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBQVFJfRVJSKHJlcSk7Ci0JcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCXJlcS0+cl9pbm9kZSA9IGlub2RlOworCWlob2xkKGlub2RlKTsKIAogCXJlcS0+cl9hcmdzLnNldGxheW91dC5sYXlvdXQuZmxfc3RyaXBlX3VuaXQgPQogCQkJY3B1X3RvX2xlMzIobC5zdHJpcGVfdW5pdCk7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2xvY2tzLmMgYi9mcy9jZXBoL2xvY2tzLmMKaW5kZXggNDc2YjMyOS4uODA1NzZkMDUgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvbG9ja3MuYworKysgYi9mcy9jZXBoL2xvY2tzLmMKQEAgLTIzLDcgKzIzLDggQEAKIAlyZXEgPSBjZXBoX21kc2NfY3JlYXRlX3JlcXVlc3QobWRzYywgb3BlcmF0aW9uLCBVU0VfQVVUSF9NRFMpOwogCWlmIChJU19FUlIocmVxKSkKIAkJcmV0dXJuIFBUUl9FUlIocmVxKTsKLQlyZXEtPnJfaW5vZGUgPSBpZ3JhYihpbm9kZSk7CisJcmVxLT5yX2lub2RlID0gaW5vZGU7CisJaWhvbGQoaW5vZGUpOwogCiAJLyogbWRzIHJlcXVpcmVzIHN0YXJ0IGFuZCBsZW5ndGggcmF0aGVyIHRoYW4gc3RhcnQgYW5kIGVuZCAqLwogCWlmIChMTE9OR19NQVggPT0gZmwtPmZsX2VuZCkKQEAgLTMyLDExICszMywxMCBAQAogCQlsZW5ndGggPSBmbC0+ZmxfZW5kIC0gZmwtPmZsX3N0YXJ0ICsgMTsKIAogCWRvdXQoImNlcGhfbG9ja19tZXNzYWdlOiBydWxlOiAlZCwgb3A6ICVkLCBwaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCAiCi0JICAgICAibGVuZ3RoOiAlbGx1LCB3YWl0OiAlZCwgdHlwZWA6ICVkIiwgKGludClsb2NrX3R5cGUsCisJICAgICAibGVuZ3RoOiAlbGx1LCB3YWl0OiAlZCwgdHlwZTogJWQiLCAoaW50KWxvY2tfdHlwZSwKIAkgICAgIChpbnQpb3BlcmF0aW9uLCAodTY0KWZsLT5mbF9waWQsIGZsLT5mbF9zdGFydCwKIAkgICAgIGxlbmd0aCwgd2FpdCwgZmwtPmZsX3R5cGUpOwogCi0KIAlyZXEtPnJfYXJncy5maWxlbG9ja19jaGFuZ2UucnVsZSA9IGxvY2tfdHlwZTsKIAlyZXEtPnJfYXJncy5maWxlbG9ja19jaGFuZ2UudHlwZSA9IGNtZDsKIAlyZXEtPnJfYXJncy5maWxlbG9ja19jaGFuZ2UucGlkID0gY3B1X3RvX2xlNjQoKHU2NClmbC0+ZmxfcGlkKTsKQEAgLTcwLDcgKzcwLDcgQEAKIAl9CiAJY2VwaF9tZHNjX3B1dF9yZXF1ZXN0KHJlcSk7CiAJZG91dCgiY2VwaF9sb2NrX21lc3NhZ2U6IHJ1bGU6ICVkLCBvcDogJWQsIHBpZDogJWxsdSwgc3RhcnQ6ICVsbHUsICIKLQkgICAgICJsZW5ndGg6ICVsbHUsIHdhaXQ6ICVkLCB0eXBlYDogJWQsIGVyciBjb2RlICVkIiwgKGludClsb2NrX3R5cGUsCisJICAgICAibGVuZ3RoOiAlbGx1LCB3YWl0OiAlZCwgdHlwZTogJWQsIGVyciBjb2RlICVkIiwgKGludClsb2NrX3R5cGUsCiAJICAgICAoaW50KW9wZXJhdGlvbiwgKHU2NClmbC0+ZmxfcGlkLCBmbC0+Zmxfc3RhcnQsCiAJICAgICBsZW5ndGgsIHdhaXQsIGZsLT5mbF90eXBlLCBlcnIpOwogCXJldHVybiBlcnI7CkBAIC0xMDksMTYgKzEwOSwyMCBAQAogCQkJZG91dCgibWRzIGxvY2tlZCwgbG9ja2luZyBsb2NhbGx5Iik7CiAJCQllcnIgPSBwb3NpeF9sb2NrX2ZpbGUoZmlsZSwgZmwsIE5VTEwpOwogCQkJaWYgKGVyciAmJiAoQ0VQSF9NRFNfT1BfU0VURklMRUxPQ0sgPT0gb3ApKSB7Ci0JCQkJLyogdW5kbyEgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGtlcm5lbCBkZXRlY3RzCi0JCQkJICogbG9jYWwgZGVhZGxvY2suICovCisJCQkJLyogdW5kbyEgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYKKwkJCQkgKiB0aGUga2VybmVsIGRldGVjdHMgbG9jYWwKKwkJCQkgKiBkZWFkbG9jay4gKi8KIAkJCQljZXBoX2xvY2tfbWVzc2FnZShDRVBIX0xPQ0tfRkNOVEwsIG9wLCBmaWxlLAogCQkJCQkJICBDRVBIX0xPQ0tfVU5MT0NLLCAwLCBmbCk7Ci0JCQkJZG91dCgiZ290ICVkIG9uIHBvc2l4X2xvY2tfZmlsZSwgdW5kaWQgbG9jayIsIGVycik7CisJCQkJZG91dCgiZ290ICVkIG9uIHBvc2l4X2xvY2tfZmlsZSwgdW5kaWQgbG9jayIsCisJCQkJICAgICBlcnIpOwogCQkJfQogCQl9CiAKLQl9IGVsc2UgewotCQlkb3V0KCJtZHMgcmV0dXJuZWQgZXJyb3IgY29kZSAlZCIsIGVycik7CisJfSBlbHNlIGlmIChlcnIgPT0gLUVSRVNUQVJUU1lTKSB7CisJCWRvdXQoInVuZG9pbmcgbG9ja1xuIik7CisJCWNlcGhfbG9ja19tZXNzYWdlKENFUEhfTE9DS19GQ05UTCwgb3AsIGZpbGUsCisJCQkJICBDRVBIX0xPQ0tfVU5MT0NLLCAwLCBmbCk7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0xNTUsOCArMTU5LDExIEBACiAJCQkJCSAgZmlsZSwgQ0VQSF9MT0NLX1VOTE9DSywgMCwgZmwpOwogCQkJZG91dCgiZ290ICVkIG9uIGZsb2NrX2xvY2tfZmlsZV93YWl0LCB1bmRpZCBsb2NrIiwgZXJyKTsKIAkJfQotCX0gZWxzZSB7Ci0JCWRvdXQoIm1kcyBlcnJvciBjb2RlICVkIiwgZXJyKTsKKwl9IGVsc2UgaWYgKGVyciA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJZG91dCgidW5kb2luZyBsb2NrXG4iKTsKKwkJY2VwaF9sb2NrX21lc3NhZ2UoQ0VQSF9MT0NLX0ZMT0NLLAorCQkJCSAgQ0VQSF9NRFNfT1BfU0VURklMRUxPQ0ssCisJCQkJICBmaWxlLCBDRVBIX0xPQ0tfVU5MT0NLLCAwLCBmbCk7CiAJfQogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9mcy9jZXBoL3NuYXAuYyBiL2ZzL2NlcGgvc25hcC5jCmluZGV4IDI0MDY3ZDYuLjU0YjE0ZGUgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvc25hcC5jCisrKyBiL2ZzL2NlcGgvc25hcC5jCkBAIC03MjIsNyArNzIyLDcgQEAKIAkJY2kgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtZHNjLT5zbmFwX2ZsdXNoX2xpc3QsCiAJCQkJc3RydWN0IGNlcGhfaW5vZGVfaW5mbywgaV9zbmFwX2ZsdXNoX2l0ZW0pOwogCQlpbm9kZSA9ICZjaS0+dmZzX2lub2RlOwotCQlpZ3JhYihpbm9kZSk7CisJCWlob2xkKGlub2RlKTsKIAkJc3Bpbl91bmxvY2soJm1kc2MtPnNuYXBfZmx1c2hfbG9jayk7CiAJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCV9fY2VwaF9mbHVzaF9zbmFwcyhjaSwgJnNlc3Npb24sIDApOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC94YXR0ci5jIGIvZnMvY2VwaC94YXR0ci5jCmluZGV4IGYyYjYyODYuLmY0MmQ3MzAgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgveGF0dHIuYworKysgYi9mcy9jZXBoL3hhdHRyLmMKQEAgLTY2NSw3ICs2NjUsOCBAQAogCQllcnIgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KLQlyZXEtPnJfaW5vZGUgPSBpZ3JhYihpbm9kZSk7CisJcmVxLT5yX2lub2RlID0gaW5vZGU7CisJaWhvbGQoaW5vZGUpOwogCXJlcS0+cl9pbm9kZV9kcm9wID0gQ0VQSF9DQVBfWEFUVFJfU0hBUkVEOwogCXJlcS0+cl9udW1fY2FwcyA9IDE7CiAJcmVxLT5yX2FyZ3Muc2V0eGF0dHIuZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CkBAIC03OTUsNyArNzk2LDggQEAKIAkJCQkgICAgICAgVVNFX0FVVEhfTURTKTsKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBQVFJfRVJSKHJlcSk7Ci0JcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCXJlcS0+cl9pbm9kZSA9IGlub2RlOworCWlob2xkKGlub2RlKTsKIAlyZXEtPnJfaW5vZGVfZHJvcCA9IENFUEhfQ0FQX1hBVFRSX1NIQVJFRDsKIAlyZXEtPnJfbnVtX2NhcHMgPSAxOwogCXJlcS0+cl9wYXRoMiA9IGtzdHJkdXAobmFtZSwgR0ZQX05PRlMpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9LY29uZmlnIGIvZnMvY2lmcy9LY29uZmlnCmluZGV4IDFjZDRjM2EuLjUzZWQxYWQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvS2NvbmZpZworKysgYi9mcy9jaWZzL0tjb25maWcKQEAgLTcsNiArNyw3IEBACiAJc2VsZWN0IENSWVBUT19NRDUKIAlzZWxlY3QgQ1JZUFRPX0hNQUMKIAlzZWxlY3QgQ1JZUFRPX0FSQzQKKwlzZWxlY3QgQ1JZUFRPX0VDQgogCXNlbGVjdCBDUllQVE9fREVTCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgY2xpZW50IFZGUyBtb2R1bGUgZm9yIHRoZSBDb21tb24gSW50ZXJuZXQgRmlsZSBTeXN0ZW0KQEAgLTE0OCw3ICsxNDksNyBAQAogCiBjb25maWcgQ0lGU19BQ0wKIAkgIGJvb2wgIlByb3ZpZGUgQ0lGUyBBQ0wgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQkgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIENJRlNfWEFUVFIKKwkgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIENJRlNfWEFUVFIgJiYgS0VZUwogCSAgaGVscAogCSAgICBBbGxvd3MgdG8gZmV0Y2ggQ0lGUy9OVEZTIEFDTCBmcm9tIHRoZSBzZXJ2ZXIuICBUaGUgREFDTCBibG9iCiAJICAgIGlzIGhhbmRlZCBvdmVyIHRvIHRoZSBhcHBsaWNhdGlvbi9jYWxsZXIuCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NhY2hlLmMgYi9mcy9jaWZzL2NhY2hlLmMKaW5kZXggZGQ4NTg0ZC4uNTQ1NTA5YyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jYWNoZS5jCisrKyBiL2ZzL2NpZnMvY2FjaGUuYwpAQCAtOTIsNyArOTIsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWNFUlJPUigxLCAiQ0lGUzogVW5rbm93biBuZXR3b3JrIGZhbWlseSAnJWQnIiwgc2EtPnNhX2ZhbWlseSk7CisJCWNFUlJPUigxLCAiVW5rbm93biBuZXR3b3JrIGZhbWlseSAnJWQnIiwgc2EtPnNhX2ZhbWlseSk7CiAJCWtleV9sZW4gPSAwOwogCQlicmVhazsKIAl9CkBAIC0xNTIsNyArMTUyLDcgQEAKIAogCXNoYXJlbmFtZSA9IGV4dHJhY3Rfc2hhcmVuYW1lKHRjb24tPnRyZWVOYW1lKTsKIAlpZiAoSVNfRVJSKHNoYXJlbmFtZSkpIHsKLQkJY0ZZSSgxLCAiQ0lGUzogY291bGRuJ3QgZXh0cmFjdCBzaGFyZW5hbWVcbiIpOworCQljRllJKDEsICIlczogY291bGRuJ3QgZXh0cmFjdCBzaGFyZW5hbWVcbiIsIF9fZnVuY19fKTsKIAkJc2hhcmVuYW1lID0gTlVMTDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzAyLDcgKzMwMiw3IEBACiAJcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKIAlmaXJzdCA9IDA7CiAKLQljRllJKDEsICJjaWZzIGlub2RlIDB4JXAgbm93IHVuY2FjaGVkIiwgY2lmc2kpOworCWNGWUkoMSwgIiVzOiBjaWZzIGlub2RlIDB4JXAgbm93IHVuY2FjaGVkIiwgX19mdW5jX18sIGNpZnNpKTsKIAogCWZvciAoOzspIHsKIAkJbnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cCgmcHZlYywKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwppbmRleCBkZmJkOWYxLi41YTBlZTdmMiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJaWYgKGNpZnNfcGR1ID09IE5VTEwgfHwgc2VydmVyID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNpZnNfcGR1LT5Db21tYW5kID09IFNNQl9DT01fTkVHT1RJQVRFKQorCWlmICghc2VydmVyLT5zZXNzaW9uX2VzdGFiKQogCQlyZXR1cm4gMDsKIAogCWlmIChjaWZzX3BkdS0+Q29tbWFuZCA9PSBTTUJfQ09NX0xPQ0tJTkdfQU5EWCkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggOTg5NDQyZGMuLmU5ZGVmOTkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtMzUyLDYgKzM1MiwzNyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQKK2NpZnNfc2hvd19zZWN1cml0eShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKK3sKKwlzZXFfcHJpbnRmKHMsICIsc2VjPSIpOworCisJc3dpdGNoIChzZXJ2ZXItPnNlY1R5cGUpIHsKKwljYXNlIExBTk1BTjoKKwkJc2VxX3ByaW50ZihzLCAibGFubWFuIik7CisJCWJyZWFrOworCWNhc2UgTlRMTXYyOgorCQlzZXFfcHJpbnRmKHMsICJudGxtdjIiKTsKKwkJYnJlYWs7CisJY2FzZSBOVExNOgorCQlzZXFfcHJpbnRmKHMsICJudGxtIik7CisJCWJyZWFrOworCWNhc2UgS2VyYmVyb3M6CisJCXNlcV9wcmludGYocywgImtyYjUiKTsKKwkJYnJlYWs7CisJY2FzZSBSYXdOVExNU1NQOgorCQlzZXFfcHJpbnRmKHMsICJudGxtc3NwIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHNob3VsZG4ndCBldmVyIGhhcHBlbiAqLworCQlzZXFfcHJpbnRmKHMsICJ1bmtub3duIik7CisJCWJyZWFrOworCX0KKworCWlmIChzZXJ2ZXItPnNlY19tb2RlICYgKFNFQ01PREVfU0lHTl9SRVFVSVJFRCB8IFNFQ01PREVfU0lHTl9FTkFCTEVEKSkKKwkJc2VxX3ByaW50ZihzLCAiaSIpOworfQorCiAvKgogICogY2lmc19zaG93X29wdGlvbnMoKSBpcyBmb3IgZGlzcGxheWluZyBtb3VudCBvcHRpb25zIGluIC9wcm9jL21vdW50cy4KICAqIE5vdCBhbGwgc2V0dGFibGUgb3B0aW9ucyBhcmUgZGlzcGxheWVkIGJ1dCBtb3N0IG9mIHRoZSBpbXBvcnRhbnQKQEAgLTM2NSw2ICszOTYsOCBAQAogCXN0cnVjdCBzb2NrYWRkciAqc3JjYWRkcjsKIAlzcmNhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZ0Y29uLT5zZXMtPnNlcnZlci0+c3JjYWRkcjsKIAorCWNpZnNfc2hvd19zZWN1cml0eShzLCB0Y29uLT5zZXMtPnNlcnZlcik7CisKIAlzZXFfcHJpbnRmKHMsICIsdW5jPSVzIiwgdGNvbi0+dHJlZU5hbWUpOwogCiAJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NVUxUSVVTRVIpCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5oIGIvZnMvY2lmcy9jaWZzZnMuaAppbmRleCA2NDMxM2Y3Li4wOTAwZTE2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5oCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmgKQEAgLTEyOSw1ICsxMjksNSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBjaWZzX2V4cG9ydF9vcHM7CiAjZW5kaWYgLyogQ0lGU19ORlNEX0VYUE9SVCAqLwogCi0jZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjcyIgorI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS43MyIKICNlbmRpZgkJCQkvKiBfQ0lGU0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggNmQ4OGI4Mi4uMTJjZjcyZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQltaWRfZW50cnktPmNhbGxiYWNrKG1pZF9lbnRyeSk7CiAJfQogCi0Jd2hpbGUgKHNlcnZlci0+dGNwU3RhdHVzID09IENpZnNOZWVkUmVjb25uZWN0KSB7CisJZG8gewogCQl0cnlfdG9fZnJlZXplKCk7CiAKIAkJLyogd2Ugc2hvdWxkIHRyeSBvbmx5IHRoZSBwb3J0IHdlIGNvbm5lY3RlZCB0byBiZWZvcmUgKi8KQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQkJCXNlcnZlci0+dGNwU3RhdHVzID0gQ2lmc05lZWROZWdvdGlhdGU7CiAJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwogCQl9Ci0JfQorCX0gd2hpbGUgKHNlcnZlci0+dGNwU3RhdHVzID09IENpZnNOZWVkUmVjb25uZWN0KTsKIAogCXJldHVybiByYzsKIH0KQEAgLTc4NCw3ICs3ODQsNyBAQAogCQkJIHN0cnVjdCBzbWJfdm9sICp2b2wpCiB7CiAJY2hhciAqdmFsdWUsICpkYXRhLCAqZW5kOwotCWNoYXIgKm1vdW50ZGF0YV9jb3B5LCAqb3B0aW9uczsKKwljaGFyICptb3VudGRhdGFfY29weSA9IE5VTEwsICpvcHRpb25zOwogCXVuc2lnbmVkIGludCAgdGVtcF9sZW4sIGksIGo7CiAJY2hhciBzZXBhcmF0b3JbMl07CiAJc2hvcnQgaW50IG92ZXJyaWRlX3VpZCA9IC0xOwpAQCAtMTM5MSw3ICsxMzkxLDcgQEAKIAkJCQkiL3Byb2MvZnMvY2lmcy9Mb29rdXBDYWNoZUVuYWJsZWQgdG8gMFxuIik7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImZzYyIsIDMpID09IDApIHsKICNpZm5kZWYgQ09ORklHX0NJRlNfRlNDQUNIRQotCQkJY0VSUk9SKDEsICJGUy1DYWNoZSBzdXBwb3J0IG5lZWRzIENPTkZJR19DSUZTX0ZTQ0FDSEUiCisJCQljRVJST1IoMSwgIkZTLUNhY2hlIHN1cHBvcnQgbmVlZHMgQ09ORklHX0NJRlNfRlNDQUNIRSAiCiAJCQkJICAia2VybmVsIGNvbmZpZyBvcHRpb24gc2V0Iik7CiAJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogI2VuZGlmCkBAIC0xOTc2LDcgKzE5NzYsNyBAQAogCQl3YXJuZWRfb25fbnRsbSA9IHRydWU7CiAJCWNFUlJPUigxLCAiZGVmYXVsdCBzZWN1cml0eSBtZWNoYW5pc20gcmVxdWVzdGVkLiAgVGhlIGRlZmF1bHQgIgogCQkJInNlY3VyaXR5IG1lY2hhbmlzbSB3aWxsIGJlIHVwZ3JhZGVkIGZyb20gbnRsbSB0byAiCi0JCQkibnRsbXYyIGluIGtlcm5lbCByZWxlYXNlIDIuNi40MSIpOworCQkJIm50bG12MiBpbiBrZXJuZWwgcmVsZWFzZSAzLjEiKTsKIAl9CiAJc2VzLT5vdmVycmlkZVNlY0ZsZyA9IHZvbHVtZV9pbmZvLT5zZWNGbGc7CiAKQEAgLTIxNDksNyArMjE0OSwxMCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0Y29uX2xpbmsgKgotY2lmc19zYl9tYXN0ZXJfdGxpbmsoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYik7CitjaWZzX3NiX21hc3Rlcl90bGluayhzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiKQoreworCXJldHVybiBjaWZzX3NiLT5tYXN0ZXJfdGxpbms7Cit9CiAKIHN0YXRpYyBpbnQKIGNvbXBhcmVfbW91bnRfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2lmc19tbnRfZGF0YSAqbW50X2RhdGEpCkBAIC0zMTcxLDYgKzMxNzQsMTAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qCisgKiBJc3N1ZSBhIFRSRUVfQ09OTkVDVCByZXF1ZXN0LiBOb3RlIHRoYXQgZm9yIElQQyQgc2hhcmVzLCB0aGF0IHRoZSB0Y29uCisgKiBwb2ludGVyIG1heSBiZSBOVUxMLgorICovCiBpbnQKIENJRlNUQ29uKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLAogCSBjb25zdCBjaGFyICp0cmVlLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLApAQCAtMzIwNSw3ICszMjEyLDcgQEAKIAlwU01CLT5BbmRYQ29tbWFuZCA9IDB4RkY7CiAJcFNNQi0+RmxhZ3MgPSBjcHVfdG9fbGUxNihUQ09OX0VYVEVOREVEX1NFQ0lORk8pOwogCWJjY19wdHIgPSAmcFNNQi0+UGFzc3dvcmRbMF07Ci0JaWYgKChzZXMtPnNlcnZlci0+c2VjX21vZGUpICYgU0VDTU9ERV9VU0VSKSB7CisJaWYgKCF0Y29uIHx8IChzZXMtPnNlcnZlci0+c2VjX21vZGUgJiBTRUNNT0RFX1VTRVIpKSB7CiAJCXBTTUItPlBhc3N3b3JkTGVuZ3RoID0gY3B1X3RvX2xlMTYoMSk7CS8qIG1pbmltdW0gKi8KIAkJKmJjY19wdHIgPSAwOyAvKiBwYXNzd29yZCBpcyBudWxsIGJ5dGUgKi8KIAkJYmNjX3B0cisrOyAgICAgICAgICAgICAgLyogc2tpcCBwYXNzd29yZCAqLwpAQCAtMzM3MSw3ICszMzc4LDcgQEAKIAl9CiAJaWYgKHJjID09IDApIHsKIAkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JCWlmIChzZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzRXhpdGluZykKKwkJaWYgKHNlcnZlci0+dGNwU3RhdHVzID09IENpZnNOZWVkTmVnb3RpYXRlKQogCQkJc2VydmVyLT50Y3BTdGF0dXMgPSBDaWZzR29vZDsKIAkJZWxzZQogCQkJcmMgPSAtRUhPU1RET1dOOwpAQCAtMzQ4NCwxMiArMzQ5MSw2IEBACiAJcmV0dXJuIHRjb247CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRjb25fbGluayAqCi1jaWZzX3NiX21hc3Rlcl90bGluayhzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiKQotewotCXJldHVybiBjaWZzX3NiLT5tYXN0ZXJfdGxpbms7Ci19Ci0KIHN0cnVjdCBjaWZzX3Rjb24gKgogY2lmc19zYl9tYXN0ZXJfdGNvbihzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiKQogewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9mc2NhY2hlLmMgYi9mcy9jaWZzL2ZzY2FjaGUuYwppbmRleCBkMzY4YTQ3Li44MTY2OTY2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZzY2FjaGUuYworKysgYi9mcy9jaWZzL2ZzY2FjaGUuYwpAQCAtMjgsMTQgKzI4LDE0IEBACiAJc2VydmVyLT5mc2NhY2hlID0KIAkJZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZShjaWZzX2ZzY2FjaGVfbmV0ZnMucHJpbWFyeV9pbmRleCwKIAkJCQkmY2lmc19mc2NhY2hlX3NlcnZlcl9pbmRleF9kZWYsIHNlcnZlcik7Ci0JY0ZZSSgxLCAiQ0lGUzogZ2V0IGNsaWVudCBjb29raWUgKDB4JXAvMHglcCkiLCBzZXJ2ZXIsCi0JCQkJc2VydmVyLT5mc2NhY2hlKTsKKwljRllJKDEsICIlczogKDB4JXAvMHglcCkiLCBfX2Z1bmNfXywgc2VydmVyLAorCQkJc2VydmVyLT5mc2NhY2hlKTsKIH0KIAogdm9pZCBjaWZzX2ZzY2FjaGVfcmVsZWFzZV9jbGllbnRfY29va2llKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKIHsKLQljRllJKDEsICJDSUZTOiByZWxlYXNlIGNsaWVudCBjb29raWUgKDB4JXAvMHglcCkiLCBzZXJ2ZXIsCi0JCQkJc2VydmVyLT5mc2NhY2hlKTsKKwljRllJKDEsICIlczogKDB4JXAvMHglcCkiLCBfX2Z1bmNfXywgc2VydmVyLAorCQkJc2VydmVyLT5mc2NhY2hlKTsKIAlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKHNlcnZlci0+ZnNjYWNoZSwgMCk7CiAJc2VydmVyLT5mc2NhY2hlID0gTlVMTDsKIH0KQEAgLTQ3LDEzICs0NywxMyBAQAogCXRjb24tPmZzY2FjaGUgPQogCQlmc2NhY2hlX2FjcXVpcmVfY29va2llKHNlcnZlci0+ZnNjYWNoZSwKIAkJCQkmY2lmc19mc2NhY2hlX3N1cGVyX2luZGV4X2RlZiwgdGNvbik7Ci0JY0ZZSSgxLCAiQ0lGUzogZ2V0IHN1cGVyYmxvY2sgY29va2llICgweCVwLzB4JXApIiwKLQkJCQlzZXJ2ZXItPmZzY2FjaGUsIHRjb24tPmZzY2FjaGUpOworCWNGWUkoMSwgIiVzOiAoMHglcC8weCVwKSIsIF9fZnVuY19fLCBzZXJ2ZXItPmZzY2FjaGUsCisJCQl0Y29uLT5mc2NhY2hlKTsKIH0KIAogdm9pZCBjaWZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUoc3RydWN0IGNpZnNfdGNvbiAqdGNvbikKIHsKLQljRllJKDEsICJDSUZTOiByZWxlYXNpbmcgc3VwZXJibG9jayBjb29raWUgKDB4JXApIiwgdGNvbi0+ZnNjYWNoZSk7CisJY0ZZSSgxLCAiJXM6ICgweCVwKSIsIF9fZnVuY19fLCB0Y29uLT5mc2NhY2hlKTsKIAlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKHRjb24tPmZzY2FjaGUsIDApOwogCXRjb24tPmZzY2FjaGUgPSBOVUxMOwogfQpAQCAtNzAsOCArNzAsOCBAQAogCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfRlNDQUNIRSkgewogCQljaWZzaS0+ZnNjYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUodGNvbi0+ZnNjYWNoZSwKIAkJCQkmY2lmc19mc2NhY2hlX2lub2RlX29iamVjdF9kZWYsIGNpZnNpKTsKLQkJY0ZZSSgxLCAiQ0lGUzogZ290IEZIIGNvb2tpZSAoMHglcC8weCVwKSIsIHRjb24tPmZzY2FjaGUsCi0JCQkJY2lmc2ktPmZzY2FjaGUpOworCQljRllJKDEsICIlczogZ290IEZIIGNvb2tpZSAoMHglcC8weCVwKSIsIF9fZnVuY19fLAorCQkJCXRjb24tPmZzY2FjaGUsIGNpZnNpLT5mc2NhY2hlKTsKIAl9CiB9CiAKQEAgLTgwLDggKzgwLDcgQEAKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2kgPSBDSUZTX0koaW5vZGUpOwogCiAJaWYgKGNpZnNpLT5mc2NhY2hlKSB7Ci0JCWNGWUkoMSwgIkNJRlMgcmVsZWFzaW5nIGlub2RlIGNvb2tpZSAoMHglcCkiLAotCQkJCWNpZnNpLT5mc2NhY2hlKTsKKwkJY0ZZSSgxLCAiJXM6ICgweCVwKSIsIF9fZnVuY19fLCBjaWZzaS0+ZnNjYWNoZSk7CiAJCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUoY2lmc2ktPmZzY2FjaGUsIDApOwogCQljaWZzaS0+ZnNjYWNoZSA9IE5VTEw7CiAJfQpAQCAtOTIsOCArOTEsNyBAQAogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSA9IENJRlNfSShpbm9kZSk7CiAKIAlpZiAoY2lmc2ktPmZzY2FjaGUpIHsKLQkJY0ZZSSgxLCAiQ0lGUyBkaXNhYmxpbmcgaW5vZGUgY29va2llICgweCVwKSIsCi0JCQkJY2lmc2ktPmZzY2FjaGUpOworCQljRllJKDEsICIlczogKDB4JXApIiwgX19mdW5jX18sIGNpZnNpLT5mc2NhY2hlKTsKIAkJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShjaWZzaS0+ZnNjYWNoZSwgMSk7CiAJCWNpZnNpLT5mc2NhY2hlID0gTlVMTDsKIAl9CkBAIC0xMjEsOCArMTE5LDggQEAKIAkJCQkJY2lmc19zYl9tYXN0ZXJfdGNvbihjaWZzX3NiKS0+ZnNjYWNoZSwKIAkJCQkJJmNpZnNfZnNjYWNoZV9pbm9kZV9vYmplY3RfZGVmLAogCQkJCQljaWZzaSk7Ci0JCWNGWUkoMSwgIkNJRlM6IG5ldyBjb29raWUgMHglcCBvbGRjb29raWUgMHglcCIsCi0JCQkJY2lmc2ktPmZzY2FjaGUsIG9sZCk7CisJCWNGWUkoMSwgIiVzOiBuZXcgY29va2llIDB4JXAgb2xkY29va2llIDB4JXAiLAorCQkJCV9fZnVuY19fLCBjaWZzaS0+ZnNjYWNoZSwgb2xkKTsKIAl9CiB9CiAKQEAgLTEzMiw4ICsxMzAsOCBAQAogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAkJc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpID0gQ0lGU19JKGlub2RlKTsKIAotCQljRllJKDEsICJDSUZTOiBmc2NhY2hlIHJlbGVhc2UgcGFnZSAoMHglcC8weCVwKSIsCi0JCQkJcGFnZSwgY2lmc2ktPmZzY2FjaGUpOworCQljRllJKDEsICIlczogKDB4JXAvMHglcCkiLCBfX2Z1bmNfXywgcGFnZSwKKwkJCQljaWZzaS0+ZnNjYWNoZSk7CiAJCWlmICghZnNjYWNoZV9tYXliZV9yZWxlYXNlX3BhZ2UoY2lmc2ktPmZzY2FjaGUsIHBhZ2UsIGdmcCkpCiAJCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDQsOCArMTQyLDcgQEAKIHN0YXRpYyB2b2lkIGNpZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlX2NvbXBsZXRlKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpjdHgsCiAJCQkJCQlpbnQgZXJyb3IpCiB7Ci0JY0ZZSSgxLCAiQ0ZTOiByZWFkcGFnZV9mcm9tX2ZzY2FjaGVfY29tcGxldGUgKDB4JXAvJWQpIiwKLQkJCXBhZ2UsIGVycm9yKTsKKwljRllJKDEsICIlczogKDB4JXAvJWQpIiwgX19mdW5jX18sIHBhZ2UsIGVycm9yKTsKIAlpZiAoIWVycm9yKQogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CkBAIC0xNTgsNyArMTU1LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JY0ZZSSgxLCAiQ0lGUzogcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKGZzYzolcCwgcDolcCwgaToweCVwIiwKKwljRllJKDEsICIlczogKGZzYzolcCwgcDolcCwgaToweCVwIiwgX19mdW5jX18sCiAJCQlDSUZTX0koaW5vZGUpLT5mc2NhY2hlLCBwYWdlLCBpbm9kZSk7CiAJcmV0ID0gZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2UoQ0lGU19JKGlub2RlKS0+ZnNjYWNoZSwgcGFnZSwKIAkJCQkJIGNpZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlX2NvbXBsZXRlLApAQCAtMTY3LDExICsxNjQsMTEgQEAKIAlzd2l0Y2ggKHJldCkgewogCiAJY2FzZSAwOiAvKiBwYWdlIGZvdW5kIGluIGZzY2FjaGUsIHJlYWQgc3VibWl0dGVkICovCi0JCWNGWUkoMSwgIkNJRlM6IHJlYWRwYWdlX2Zyb21fZnNjYWNoZTogc3VibWl0dGVkIik7CisJCWNGWUkoMSwgIiVzOiBzdWJtaXR0ZWQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXQ7CiAJY2FzZSAtRU5PQlVGUzoJLyogcGFnZSB3b24ndCBiZSBjYWNoZWQgKi8KIAljYXNlIC1FTk9EQVRBOgkvKiBwYWdlIG5vdCBpbiBjYWNoZSAqLwotCQljRllJKDEsICJDSUZTOiByZWFkcGFnZV9mcm9tX2ZzY2FjaGUgJWQiLCByZXQpOworCQljRllJKDEsICIlczogJWQiLCBfX2Z1bmNfXywgcmV0KTsKIAkJcmV0dXJuIDE7CiAKIAlkZWZhdWx0OgpAQCAtMTkwLDcgKzE4Nyw3IEBACiB7CiAJaW50IHJldDsKIAotCWNGWUkoMSwgIkNJRlM6IF9fY2lmc19yZWFkcGFnZXNfZnJvbV9mc2NhY2hlICgweCVwLyV1LzB4JXApIiwKKwljRllJKDEsICIlczogKDB4JXAvJXUvMHglcCkiLCBfX2Z1bmNfXywKIAkJCUNJRlNfSShpbm9kZSktPmZzY2FjaGUsICpucl9wYWdlcywgaW5vZGUpOwogCXJldCA9IGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlcyhDSUZTX0koaW5vZGUpLT5mc2NhY2hlLCBtYXBwaW5nLAogCQkJCQkgIHBhZ2VzLCBucl9wYWdlcywKQEAgLTE5OSwxMiArMTk2LDEyIEBACiAJCQkJCSAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIDA6CS8qIHJlYWQgc3VibWl0dGVkIHRvIHRoZSBjYWNoZSBmb3IgYWxsIHBhZ2VzICovCi0JCWNGWUkoMSwgIkNJRlM6IHJlYWRwYWdlc19mcm9tX2ZzY2FjaGU6IHN1Ym1pdHRlZCIpOworCQljRllJKDEsICIlczogc3VibWl0dGVkIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwogCiAJY2FzZSAtRU5PQlVGUzoJLyogc29tZSBwYWdlcyBhcmUgbm90IGNhY2hlZCBhbmQgY2FuJ3QgYmUgKi8KIAljYXNlIC1FTk9EQVRBOgkvKiBzb21lIHBhZ2VzIGFyZSBub3QgY2FjaGVkICovCi0JCWNGWUkoMSwgIkNJRlM6IHJlYWRwYWdlc19mcm9tX2ZzY2FjaGU6IG5vIHBhZ2UiKTsKKwkJY0ZZSSgxLCAiJXM6IG5vIHBhZ2UiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAxOwogCiAJZGVmYXVsdDoKQEAgLTIxOCw3ICsyMTUsNyBAQAogewogCWludCByZXQ7CiAKLQljRllJKDEsICJDSUZTOiByZWFkcGFnZV90b19mc2NhY2hlKGZzYzogJXAsIHA6ICVwLCBpOiAlcCIsCisJY0ZZSSgxLCAiJXM6IChmc2M6ICVwLCBwOiAlcCwgaTogJXApIiwgX19mdW5jX18sCiAJCQlDSUZTX0koaW5vZGUpLT5mc2NhY2hlLCBwYWdlLCBpbm9kZSk7CiAJcmV0ID0gZnNjYWNoZV93cml0ZV9wYWdlKENJRlNfSShpbm9kZSktPmZzY2FjaGUsIHBhZ2UsIEdGUF9LRVJORUwpOwogCWlmIChyZXQgIT0gMCkKQEAgLTIzMCw3ICsyMjcsNyBAQAogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSA9IENJRlNfSShpbm9kZSk7CiAJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBjaWZzaS0+ZnNjYWNoZTsKIAotCWNGWUkoMSwgIkNJRlM6IGZzY2FjaGUgaW52YWxpZGF0ZXBhZ2UgKDB4JXAvMHglcCkiLCBwYWdlLCBjb29raWUpOworCWNGWUkoMSwgIiVzOiAoMHglcC8weCVwKSIsIF9fZnVuY19fLCBwYWdlLCBjb29raWUpOwogCWZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKGNvb2tpZSwgcGFnZSk7CiAJZnNjYWNoZV91bmNhY2hlX3BhZ2UoY29va2llLCBwYWdlKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2Rjb29raWVzLmMgYi9mcy9kY29va2llcy5jCmluZGV4IGEyMWNhYmQuLmRkYTBkYzcgMTAwNjQ0Ci0tLSBhL2ZzL2Rjb29raWVzLmMKKysrIGIvZnMvZGNvb2tpZXMuYwpAQCAtMTc4LDYgKzE3OCw4IEBACiAJLyogRklYTUU6IChkZWxldGVkKSA/ICovCiAJcGF0aCA9IGRfcGF0aCgmZGNzLT5wYXRoLCBrYnVmLCBQQUdFX1NJWkUpOwogCisJbXV0ZXhfdW5sb2NrKCZkY29va2llX211dGV4KTsKKwogCWlmIChJU19FUlIocGF0aCkpIHsKIAkJZXJyID0gUFRSX0VSUihwYXRoKTsKIAkJZ290byBvdXRfZnJlZTsKQEAgLTE5NCw2ICsxOTYsNyBAQAogCiBvdXRfZnJlZToKIAlrZnJlZShrYnVmKTsKKwlyZXR1cm4gZXJyOwogb3V0OgogCW11dGV4X3VubG9jaygmZGNvb2tpZV9tdXRleCk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBlYTVmNzQ4Li45N2UwZDUyIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0xMDkzLDYgKzEwOTMsNyBAQAogCiAJYnBybS0+bW0gPSBOVUxMOwkJLyogV2UncmUgdXNpbmcgaXQgbm93ICovCiAKKwlzZXRfZnMoVVNFUl9EUyk7CiAJY3VycmVudC0+ZmxhZ3MgJj0gfihQRl9SQU5ET01JWkUgfCBQRl9LVEhSRUFEKTsKIAlmbHVzaF90aHJlYWQoKTsKIAljdXJyZW50LT5wZXJzb25hbGl0eSAmPSB+YnBybS0+cGVyX2NsZWFyOwpAQCAtMTM1NywxMCArMTM1OCw2IEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCS8qIGtlcm5lbCBtb2R1bGUgbG9hZGVyIGZpeHVwICovCi0JLyogc28gd2UgZG9uJ3QgdHJ5IHRvIGxvYWQgcnVuIG1vZHByb2JlIGluIGtlcm5lbCBzcGFjZS4gKi8KLQlzZXRfZnMoVVNFUl9EUyk7Ci0KIAlyZXR2YWwgPSBhdWRpdF9icHJtKGJwcm0pOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCA3MjU3NzUyLi43MDE4ZTFkIDEwMDY0NAotLS0gYS9mcy9mYXQvZmlsZS5jCisrKyBiL2ZzL2ZhdC9maWxlLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCQlpZiAoYXR0ciAmIEFUVFJfU1lTKQogCQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19JTU1VVEFCTEU7CiAJCWVsc2UKLQkJCWlub2RlLT5pX2ZsYWdzICY9IFNfSU1NVVRBQkxFOworCQkJaW5vZGUtPmlfZmxhZ3MgJj0gflNfSU1NVVRBQkxFOwogCX0KIAogCWZhdF9zYXZlX2F0dHJzKGlub2RlLCBhdHRyKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCBjYzZlYzRiLi4zOGY4NGNkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC05MjEsNiArOTIxLDggQEAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19NQU5ETE9DSykKIAkJZ290byBlcnI7CiAKKwlzYi0+c19mbGFncyAmPSB+TVNfTk9TRUM7CisKIAlpZiAoIXBhcnNlX2Z1c2Vfb3B0KChjaGFyICopIGRhdGEsICZkLCBpc19iZGV2KSkKIAkJZ290byBlcnI7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suYyBiL2ZzL2dmczIvZ2xvY2suYwppbmRleCAyNzkyYTc5Li4xYzEzMzZlIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmMKKysrIGIvZnMvZ2ZzMi9nbG9jay5jCkBAIC02NjMsMTQgKzY2MywxOSBAQAogCQlkcm9wX3JlZiA9IDE7CiAJfQogCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX1BFTkRJTkdfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgorCWlmICh0ZXN0X2JpdChHTEZfUEVORElOR19ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpICYmCiAJICAgIGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCAmJgogCSAgICBnbC0+Z2xfZGVtb3RlX3N0YXRlICE9IExNX1NUX0VYQ0xVU0lWRSkgewogCQl1bnNpZ25lZCBsb25nIGhvbGR0aW1lLCBub3cgPSBqaWZmaWVzOworCiAJCWhvbGR0aW1lID0gZ2wtPmdsX3RjaGFuZ2UgKyBnbC0+Z2xfb3BzLT5nb19taW5faG9sZF90aW1lOwogCQlpZiAodGltZV9iZWZvcmUobm93LCBob2xkdGltZSkpCiAJCQlkZWxheSA9IGhvbGR0aW1lIC0gbm93OwotCQlzZXRfYml0KGRlbGF5ID8gR0xGX1BFTkRJTkdfREVNT1RFIDogR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncyk7CisKKwkJaWYgKCFkZWxheSkgeworCQkJY2xlYXJfYml0KEdMRl9QRU5ESU5HX0RFTU9URSwgJmdsLT5nbF9mbGFncyk7CisJCQlzZXRfYml0KEdMRl9ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpOworCQl9CiAJfQogCXJ1bl9xdWV1ZShnbCwgMCk7CiAJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbG9nbWdyLmMgYi9mcy9qZnMvamZzX2xvZ21nci5jCmluZGV4IDI3OGUzZmIuLjU4MzYzNmYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbG9nbWdyLmMKKysrIGIvZnMvamZzL2pmc19sb2dtZ3IuYwpAQCAtMTEyMyw3ICsxMTIzLDcgQEAKIAliZGV2ID0gYmxrZGV2X2dldF9ieV9kZXYoc2JpLT5sb2dkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEV8Rk1PREVfRVhDTCwKIAkJCQkgbG9nKTsKIAlpZiAoSVNfRVJSKGJkZXYpKSB7Ci0JCXJjID0gLVBUUl9FUlIoYmRldik7CisJCXJjID0gUFRSX0VSUihiZGV2KTsKIAkJZ290byBmcmVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMWFiNjQxZi4uOWU0MjVlNyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC04MTIsNiArODEyLDExIEBACiAJaWYgKCFtbnQpIC8qIG1vdW50IGNvbGxpc2lvbiAqLwogCQlyZXR1cm4gMDsKIAorCWlmICghKm5lZWRfbW50cHV0KSB7CisJCS8qIGxvY2tfbW91bnQoKSBtYXkgcmVsZWFzZSBwYXRoLT5tbnQgb24gZXJyb3IgKi8KKwkJbW50Z2V0KHBhdGgtPm1udCk7CisJCSpuZWVkX21udHB1dCA9IHRydWU7CisJfQogCWVyciA9IGZpbmlzaF9hdXRvbW91bnQobW50LCBwYXRoKTsKIAogCXN3aXRjaCAoZXJyKSB7CkBAIC04MTksMTIgKzgyNCw5IEBACiAJCS8qIFNvbWVvbmUgZWxzZSBtYWRlIGEgbW91bnQgaGVyZSB3aGlsc3Qgd2Ugd2VyZSBidXN5ICovCiAJCXJldHVybiAwOwogCWNhc2UgMDoKLQkJZHB1dChwYXRoLT5kZW50cnkpOwotCQlpZiAoKm5lZWRfbW50cHV0KQotCQkJbW50cHV0KHBhdGgtPm1udCk7CisJCXBhdGhfcHV0KHBhdGgpOwogCQlwYXRoLT5tbnQgPSBtbnQ7CiAJCXBhdGgtPmRlbnRyeSA9IGRnZXQobW50LT5tbnRfcm9vdCk7Ci0JCSpuZWVkX21udHB1dCA9IHRydWU7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiBlcnI7CkBAIC04NDQsOSArODQ2LDEwIEBACiAgKi8KIHN0YXRpYyBpbnQgZm9sbG93X21hbmFnZWQoc3RydWN0IHBhdGggKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQogeworCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gcGF0aC0+bW50OyAvKiBoZWxkIGJ5IGNhbGxlciwgbXVzdCBiZSBsZWZ0IGFsb25lICovCiAJdW5zaWduZWQgbWFuYWdlZDsKIAlib29sIG5lZWRfbW50cHV0ID0gZmFsc2U7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCS8qIEdpdmVuIHRoYXQgd2UncmUgbm90IGhvbGRpbmcgYSBsb2NrIGhlcmUsIHdlIHJldGFpbiB0aGUgdmFsdWUgaW4gYQogCSAqIGxvY2FsIHZhcmlhYmxlIGZvciBlYWNoIGRlbnRyeSBhcyB3ZSBsb29rIGF0IGl0IHNvIHRoYXQgd2UgZG9uJ3Qgc2VlCkBAIC04NjEsNyArODY0LDcgQEAKIAkJCUJVR19PTighcGF0aC0+ZGVudHJ5LT5kX29wLT5kX21hbmFnZSk7CiAJCQlyZXQgPSBwYXRoLT5kZW50cnktPmRfb3AtPmRfbWFuYWdlKHBhdGgtPmRlbnRyeSwgZmFsc2UpOwogCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldCA9PSAtRUlTRElSID8gMCA6IHJldDsKKwkJCQlicmVhazsKIAkJfQogCiAJCS8qIFRyYW5zaXQgdG8gYSBtb3VudGVkIGZpbGVzeXN0ZW0uICovCkBAIC04ODcsMTQgKzg5MCwxOSBAQAogCQlpZiAobWFuYWdlZCAmIERDQUNIRV9ORUVEX0FVVE9NT1VOVCkgewogCQkJcmV0ID0gZm9sbG93X2F1dG9tb3VudChwYXRoLCBmbGFncywgJm5lZWRfbW50cHV0KTsKIAkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQgPT0gLUVJU0RJUiA/IDAgOiByZXQ7CisJCQkJYnJlYWs7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIFdlIGRpZG4ndCBjaGFuZ2UgdGhlIGN1cnJlbnQgcGF0aCBwb2ludCAqLwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIDA7CisKKwlpZiAobmVlZF9tbnRwdXQgJiYgcGF0aC0+bW50ID09IG1udCkKKwkJbW50cHV0KHBhdGgtPm1udCk7CisJaWYgKHJldCA9PSAtRUlTRElSKQorCQlyZXQgPSAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBmb2xsb3dfZG93bl9vbmUoc3RydWN0IHBhdGggKnBhdGgpCkBAIC0yNTc5LDYgKzI1ODcsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CiAKKwlzaHJpbmtfZGNhY2hlX3BhcmVudChkZW50cnkpOwogCWVycm9yID0gZGlyLT5pX29wLT5ybWRpcihkaXIsIGRlbnRyeSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKQEAgLTI2MjMsNiArMjYzMiwxMCBAQAogCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKIAkJZ290byBleGl0MjsKKwlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gZXhpdDM7CisJfQogCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQucGF0aC5tbnQpOwogCWlmIChlcnJvcikKIAkJZ290byBleGl0MzsKQEAgLTI3MTEsOCArMjcyNCw5IEBACiAJCWlmIChuZC5sYXN0Lm5hbWVbbmQubGFzdC5sZW5dKQogCQkJZ290byBzbGFzaGVzOwogCQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQkJaWYgKGlub2RlKQotCQkJaWhvbGQoaW5vZGUpOworCQlpZiAoIWlub2RlKQorCQkJZ290byBzbGFzaGVzOworCQlpaG9sZChpbm9kZSk7CiAJCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQucGF0aC5tbnQpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGV4aXQyOwpAQCAtMjk5Myw2ICszMDA3LDggQEAKIAlpZiAoZF9tb3VudHBvaW50KG9sZF9kZW50cnkpIHx8IGRfbW91bnRwb2ludChuZXdfZGVudHJ5KSkKIAkJZ290byBvdXQ7CiAKKwlpZiAodGFyZ2V0KQorCQlzaHJpbmtfZGNhY2hlX3BhcmVudChuZXdfZGVudHJ5KTsKIAllcnJvciA9IG9sZF9kaXItPmlfb3AtPnJlbmFtZShvbGRfZGlyLCBvbGRfZGVudHJ5LCBuZXdfZGlyLCBuZXdfZGVudHJ5KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2J0cmVlLmMgYi9mcy9uaWxmczIvYnRyZWUuYwppbmRleCA3ZWFmZTQ2Li5iMmUzZmYzIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRyZWUuYworKysgYi9mcy9uaWxmczIvYnRyZWUuYwpAQCAtMTM0Niw2ICsxMzQ2LDExIEBACiAJcGF0aFtsZXZlbF0uYnBfYmggPSBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ub3Aoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAorCQkJICAgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAorCQkJICAgIGludCBsZXZlbCwgX191NjQgKmtleXAsIF9fdTY0ICpwdHJwKQoreworfQogCiBzdGF0aWMgaW50IG5pbGZzX2J0cmVlX3ByZXBhcmVfZGVsZXRlKHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKQEAgLTEzNTYsMjAgKzEzNjEsMTkgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCAqcGFyZW50LCAqc2liOwogCV9fdTY0IHNpYnB0cjsKLQlpbnQgcGluZGV4LCBsZXZlbCwgbmNtaW4sIG5jbWF4LCBuY2JsaywgcmV0OworCWludCBwaW5kZXgsIGRpbmRleCwgbGV2ZWwsIG5jbWluLCBuY21heCwgbmNibGssIHJldDsKIAogCXJldCA9IDA7CiAJc3RhdHMtPmJzX25ibG9ja3MgPSAwOwogCW5jbWluID0gTklMRlNfQlRSRUVfTk9ERV9OQ0hJTERSRU5fTUlOKG5pbGZzX2J0cmVlX25vZGVfc2l6ZShidHJlZSkpOwogCW5jYmxrID0gbmlsZnNfYnRyZWVfbmNoaWxkcmVuX3Blcl9ibG9jayhidHJlZSk7CiAKLQlmb3IgKGxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU47CisJZm9yIChsZXZlbCA9IE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOLCBkaW5kZXggPSBwYXRoW2xldmVsXS5icF9pbmRleDsKIAkgICAgIGxldmVsIDwgbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDE7CiAJICAgICBsZXZlbCsrKSB7CiAJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIAkJcGF0aFtsZXZlbF0uYnBfb2xkcmVxLmJwcl9wdHIgPQotCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsIHBhdGhbbGV2ZWxdLmJwX2luZGV4LAotCQkJCQkJIG5jYmxrKTsKKwkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihub2RlLCBkaW5kZXgsIG5jYmxrKTsKIAkJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2VuZF9wdHIoYnRyZWUsCiAJCQkJCQkgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKIAkJaWYgKHJldCA8IDApCkBAIC0xMzgzLDYgKzEzODcsNyBAQAogCiAJCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsICZuY21heCk7CiAJCXBpbmRleCA9IHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleDsKKwkJZGluZGV4ID0gcGluZGV4OwogCiAJCWlmIChwaW5kZXggPiAwKSB7CiAJCQkvKiBsZWZ0IHNpYmxpbmcgKi8KQEAgLTE0MjEsNiArMTQyNiwxNCBAQAogCQkJCXBhdGhbbGV2ZWxdLmJwX3NpYl9iaCA9IGJoOwogCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfY29uY2F0X3JpZ2h0OwogCQkJCXN0YXRzLT5ic19uYmxvY2tzKys7CisJCQkJLyoKKwkJCQkgKiBXaGVuIG1lcmdpbmcgcmlnaHQgc2libGluZyBub2RlCisJCQkJICogaW50byB0aGUgY3VycmVudCBub2RlLCBwb2ludGVyIHRvCisJCQkJICogdGhlIHJpZ2h0IHNpYmxpbmcgbm9kZSBtdXN0IGJlCisJCQkJICogdGVybWluYXRlZCBpbnN0ZWFkLiAgVGhlIGFkanVzdG1lbnQKKwkJCQkgKiBiZWxvdyBpcyByZXF1aXJlZCBmb3IgdGhhdC4KKwkJCQkgKi8KKwkJCQlkaW5kZXggPSBwaW5kZXggKyAxOwogCQkJCS8qIGNvbnRpbnVlOyAqLwogCQkJfQogCQl9IGVsc2UgewpAQCAtMTQzMSwyOSArMTQ0NCwzMSBAQAogCQkJICAgIE5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCkgewogCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfc2hyaW5rOwogCQkJCXN0YXRzLT5ic19uYmxvY2tzICs9IDI7CisJCQkJbGV2ZWwrKzsKKwkJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX25vcDsKKwkJCQlnb3RvIHNocmlua19yb290X2NoaWxkOwogCQkJfSBlbHNlIHsKIAkJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2RvX2RlbGV0ZTsKIAkJCQlzdGF0cy0+YnNfbmJsb2NrcysrOworCQkJCWdvdG8gb3V0OwogCQkJfQotCi0JCQlnb3RvIG91dDsKLQogCQl9CiAJfQogCisJLyogY2hpbGQgb2YgdGhlIHJvb3Qgbm9kZSBpcyBkZWxldGVkICovCisJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9kb19kZWxldGU7CisJc3RhdHMtPmJzX25ibG9ja3MrKzsKKworc2hyaW5rX3Jvb3RfY2hpbGQ6CiAJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKIAlwYXRoW2xldmVsXS5icF9vbGRyZXEuYnByX3B0ciA9Ci0JCW5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihub2RlLCBwYXRoW2xldmVsXS5icF9pbmRleCwKKwkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsIGRpbmRleCwKIAkJCQkJIE5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCk7CiAKIAlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfZW5kX3B0cihidHJlZSwgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfb3V0X2NoaWxkX25vZGU7CiAKLQkvKiBjaGlsZCBvZiB0aGUgcm9vdCBub2RlIGlzIGRlbGV0ZWQgKi8KLQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2RvX2RlbGV0ZTsKLQlzdGF0cy0+YnNfbmJsb2NrcysrOwotCiAJLyogc3VjY2VzcyAqLwogIG91dDoKIAkqbGV2ZWxwID0gbGV2ZWw7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5jIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwppbmRleCAxNDE2NDZlLi5iYjI0YWI2IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5jCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKQEAgLTI1NzMsNyArMjU3Myw3IEBACiAJc2NpLT5zY193YXRlcm1hcmsgPSBOSUxGU19TQ19ERUZBVUxUX1dBVEVSTUFSSzsKIAogCWlmIChuaWxmcy0+bnNfaW50ZXJ2YWwpCi0JCXNjaS0+c2NfaW50ZXJ2YWwgPSBuaWxmcy0+bnNfaW50ZXJ2YWw7CisJCXNjaS0+c2NfaW50ZXJ2YWwgPSBIWiAqIG5pbGZzLT5uc19pbnRlcnZhbDsKIAlpZiAobmlsZnMtPm5zX3dhdGVybWFyaykKIAkJc2NpLT5zY193YXRlcm1hcmsgPSBuaWxmcy0+bnNfd2F0ZXJtYXJrOwogCXJldHVybiBzY2k7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCBjZGJhZjVlLi41NmY2MTAyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTEwNzIsNyArMTA3Miw3IEBACiAKIAlzYi0+c19tYWdpYyA9IE9DRlMyX1NVUEVSX01BR0lDOwogCi0Jc2ItPnNfZmxhZ3MgPSAoc2ItPnNfZmxhZ3MgJiB+TVNfUE9TSVhBQ0wpIHwKKwlzYi0+c19mbGFncyA9IChzYi0+c19mbGFncyAmIH4oTVNfUE9TSVhBQ0wgfCBNU19OT1NFQykpIHwKIAkJKChvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSA/IE1TX1BPU0lYQUNMIDogMCk7CiAKIAkvKiBIYXJkIHJlYWRvbmx5IG1vZGUgb25seSBpZjogYmRldl9yZWFkX29ubHksIE1TX1JET05MWSwKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwppbmRleCBmODJlNzYyLi5kNTQ1ZTk3IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKKysrIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCkBAIC0yNTUsMTMgKzI1NSw3IEBACiAJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaGRfc3RydWN0ICpwID0gZGV2X3RvX3BhcnQoZGV2KTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7Ci0JdW5zaWduZWQgaW50IGFsaWdubWVudCA9IDA7Ci0KLQlpZiAoZGlzay0+cXVldWUpCi0JCWFsaWdubWVudCA9IHF1ZXVlX2xpbWl0X2Rpc2NhcmRfYWxpZ25tZW50KCZkaXNrLT5xdWV1ZS0+bGltaXRzLAotCQkJCQkJCQlwLT5zdGFydF9zZWN0KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYWxpZ25tZW50KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcC0+ZGlzY2FyZF9hbGlnbm1lbnQpOwogfQogCiBzc2l6ZV90IHBhcnRfc3RhdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTQ1NSw2ICs0NDksOCBAQAogCXAtPnN0YXJ0X3NlY3QgPSBzdGFydDsKIAlwLT5hbGlnbm1lbnRfb2Zmc2V0ID0KIAkJcXVldWVfbGltaXRfYWxpZ25tZW50X29mZnNldCgmZGlzay0+cXVldWUtPmxpbWl0cywgc3RhcnQpOworCXAtPmRpc2NhcmRfYWxpZ25tZW50ID0KKwkJcXVldWVfbGltaXRfZGlzY2FyZF9hbGlnbm1lbnQoJmRpc2stPnF1ZXVlLT5saW1pdHMsIHN0YXJ0KTsKIAlwLT5ucl9zZWN0cyA9IGxlbjsKIAlwLT5wYXJ0bm8gPSBwYXJ0bm87CiAJcC0+cG9saWN5ID0gZ2V0X2Rpc2tfcm8oZGlzayk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Jvb3QuYyBiL2ZzL3Byb2Mvcm9vdC5jCmluZGV4IGE5MDAwZTkuLmQ2YzNiNDEgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvcm9vdC5jCisrKyBiL2ZzL3Byb2Mvcm9vdC5jCkBAIC0yOCwxMSArMjgsMTIgQEAKIAogc3RhdGljIGludCBwcm9jX3NldF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpuczsKLQotCW5zID0gKHN0cnVjdCBwaWRfbmFtZXNwYWNlICopZGF0YTsKLQlzYi0+c19mc19pbmZvID0gZ2V0X3BpZF9ucyhucyk7Ci0JcmV0dXJuIHNldF9hbm9uX3N1cGVyKHNiLCBOVUxMKTsKKwlpbnQgZXJyID0gc2V0X2Fub25fc3VwZXIoc2IsIE5VTEwpOworCWlmICghZXJyKSB7CisJCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyA9IChzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqKWRhdGE7CisJCXNiLT5zX2ZzX2luZm8gPSBnZXRfcGlkX25zKG5zKTsKKwl9CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKnByb2NfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCBjNzU1OTM5Li5hYjNkNjcyIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTgyMiw3ICs4MjIsNyBAQAogCX0gZWxzZSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAotCQlzLT5zX2ZsYWdzID0gZmxhZ3M7CisJCXMtPnNfZmxhZ3MgPSBmbGFncyB8IE1TX05PU0VDOwogCQlzLT5zX21vZGUgPSBtb2RlOwogCQlzdHJsY3B5KHMtPnNfaWQsIGJkZXZuYW1lKGJkZXYsIGIpLCBzaXplb2Yocy0+c19pZCkpOwogCQlzYl9zZXRfYmxvY2tzaXplKHMsIGJsb2NrX3NpemUoYmRldikpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvbW91bnQuYyBiL2ZzL3N5c2ZzL21vdW50LmMKaW5kZXggMjY2ODk1Ny4uZTM0ZjBkOSAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvbW91bnQuYworKysgYi9mcy9zeXNmcy9tb3VudC5jCkBAIC05NSw2ICs5NSwxNCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIHZvaWQgZnJlZV9zeXNmc19zdXBlcl9pbmZvKHN0cnVjdCBzeXNmc19zdXBlcl9pbmZvICppbmZvKQoreworCWludCB0eXBlOworCWZvciAodHlwZSA9IEtPQkpfTlNfVFlQRV9OT05FOyB0eXBlIDwgS09CSl9OU19UWVBFUzsgdHlwZSsrKQorCQlrb2JqX25zX2Ryb3AodHlwZSwgaW5mby0+bnNbdHlwZV0pOworCWtmcmVlKGluZm8pOworfQorCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqc3lzZnNfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCiAJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSkKIHsKQEAgLTEwOCwxMSArMTE2LDExIEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJZm9yICh0eXBlID0gS09CSl9OU19UWVBFX05PTkU7IHR5cGUgPCBLT0JKX05TX1RZUEVTOyB0eXBlKyspCi0JCWluZm8tPm5zW3R5cGVdID0ga29ial9uc19jdXJyZW50KHR5cGUpOworCQlpbmZvLT5uc1t0eXBlXSA9IGtvYmpfbnNfZ3JhYl9jdXJyZW50KHR5cGUpOwogCiAJc2IgPSBzZ2V0KGZzX3R5cGUsIHN5c2ZzX3Rlc3Rfc3VwZXIsIHN5c2ZzX3NldF9zdXBlciwgaW5mbyk7CiAJaWYgKElTX0VSUihzYikgfHwgc2ItPnNfZnNfaW5mbyAhPSBpbmZvKQotCQlrZnJlZShpbmZvKTsKKwkJZnJlZV9zeXNmc19zdXBlcl9pbmZvKGluZm8pOwogCWlmIChJU19FUlIoc2IpKQogCQlyZXR1cm4gRVJSX0NBU1Qoc2IpOwogCWlmICghc2ItPnNfcm9vdCkgewpAQCAtMTMxLDEyICsxMzksMTEgQEAKIHN0YXRpYyB2b2lkIHN5c2ZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3Qgc3lzZnNfc3VwZXJfaW5mbyAqaW5mbyA9IHN5c2ZzX2luZm8oc2IpOwotCiAJLyogUmVtb3ZlIHRoZSBzdXBlcmJsb2NrIGZyb20gZnNfc3VwZXJzL3NfaW5zdGFuY2VzCiAJICogc28gd2UgY2FuJ3QgZmluZCBpdCwgYmVmb3JlIGZyZWVpbmcgc3lzZnNfc3VwZXJfaW5mby4KIAkgKi8KIAlraWxsX2Fub25fc3VwZXIoc2IpOwotCWtmcmVlKGluZm8pOworCWZyZWVfc3lzZnNfc3VwZXJfaW5mbyhpbmZvKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHN5c2ZzX2ZzX3R5cGUgPSB7CkBAIC0xNDUsMjggKzE1Miw2IEBACiAJLmtpbGxfc2IJPSBzeXNmc19raWxsX3NiLAogfTsKIAotdm9pZCBzeXNmc19leGl0X25zKGVudW0ga29ial9uc190eXBlIHR5cGUsIGNvbnN0IHZvaWQgKm5zKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0KLQltdXRleF9sb2NrKCZzeXNmc19tdXRleCk7Ci0Jc3Bpbl9sb2NrKCZzYl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNiLCAmc3lzZnNfZnNfdHlwZS5mc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7Ci0JCXN0cnVjdCBzeXNmc19zdXBlcl9pbmZvICppbmZvID0gc3lzZnNfaW5mbyhzYik7Ci0JCS8qCi0JCSAqIElmIHdlIHNlZSBhIHN1cGVyYmxvY2sgb24gdGhlIGZzX3N1cGVycy9zX2luc3RhbmNlcwotCQkgKiBsaXN0IHRoZSB1bm1vdW50IGhhcyBub3QgY29tcGxldGVkIGFuZCBzYi0+c19mc19pbmZvCi0JCSAqIHBvaW50cyB0byBhIHZhbGlkIHN0cnVjdCBzeXNmc19zdXBlcl9pbmZvLgotCQkgKi8KLQkJLyogSWdub3JlIHN1cGVyYmxvY2tzIHdpdGggdGhlIHdyb25nIG5zICovCi0JCWlmIChpbmZvLT5uc1t0eXBlXSAhPSBucykKLQkJCWNvbnRpbnVlOwotCQlpbmZvLT5uc1t0eXBlXSA9IE5VTEw7Ci0JfQotCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKLQltdXRleF91bmxvY2soJnN5c2ZzX211dGV4KTsKLX0KLQogaW50IF9faW5pdCBzeXNmc19pbml0KHZvaWQpCiB7CiAJaW50IGVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9zeXNmcy5oIGIvZnMvc3lzZnMvc3lzZnMuaAppbmRleCAzZDI4YWYzMS4uMmVkMjQwNCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvc3lzZnMuaAorKysgYi9mcy9zeXNmcy9zeXNmcy5oCkBAIC0xMzYsNyArMTM2LDcgQEAKICAqIGluc3RhbmNlKS4KICAqLwogc3RydWN0IHN5c2ZzX3N1cGVyX2luZm8gewotCWNvbnN0IHZvaWQgKm5zW0tPQkpfTlNfVFlQRVNdOworCXZvaWQgKm5zW0tPQkpfTlNfVFlQRVNdOwogfTsKICNkZWZpbmUgc3lzZnNfaW5mbyhTQikgKChzdHJ1Y3Qgc3lzZnNfc3VwZXJfaW5mbyAqKShTQi0+c19mc19pbmZvKSkKIGV4dGVybiBzdHJ1Y3Qgc3lzZnNfZGlyZW50IHN5c2ZzX3Jvb3Q7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9pby5jIGIvZnMvdWJpZnMvaW8uYwppbmRleCAxNjY5NTFlLi4zYmU2NDVlIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9pby5jCisrKyBiL2ZzL3ViaWZzL2lvLmMKQEAgLTU4MSw2ICs1ODEsNyBAQAogCXViaWZzX2Fzc2VydCh3YnVmLT5zaXplICUgYy0+bWluX2lvX3NpemUgPT0gMCk7CiAJdWJpZnNfYXNzZXJ0KG11dGV4X2lzX2xvY2tlZCgmd2J1Zi0+aW9fbXV0ZXgpKTsKIAl1Ymlmc19hc3NlcnQoIWMtPnJvX21lZGlhICYmICFjLT5yb19tb3VudCk7CisJdWJpZnNfYXNzZXJ0KCFjLT5zcGFjZV9maXh1cCk7CiAJaWYgKGMtPmxlYl9zaXplIC0gd2J1Zi0+b2ZmcyA+PSBjLT5tYXhfd3JpdGVfc2l6ZSkKIAkJdWJpZnNfYXNzZXJ0KCEoKHdidWYtPm9mZnMgKyB3YnVmLT5zaXplKSAlIGMtPm1heF93cml0ZV9zaXplKSk7CiAKQEAgLTc1OSw2ICs3NjAsNyBAQAogCXViaWZzX2Fzc2VydChsbnVtID49IDAgJiYgbG51bSA8IGMtPmxlYl9jbnQgJiYgb2ZmcyA+PSAwKTsKIAl1Ymlmc19hc3NlcnQob2ZmcyAlIGMtPm1pbl9pb19zaXplID09IDAgJiYgb2ZmcyA8IGMtPmxlYl9zaXplKTsKIAl1Ymlmc19hc3NlcnQoIWMtPnJvX21lZGlhICYmICFjLT5yb19tb3VudCk7CisJdWJpZnNfYXNzZXJ0KCFjLT5zcGFjZV9maXh1cCk7CiAKIAlpZiAoYy0+cm9fZXJyb3IpCiAJCXJldHVybiAtRVJPRlM7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9qb3VybmFsLmMgYi9mcy91Ymlmcy9qb3VybmFsLmMKaW5kZXggMzRiMTY3OS4uY2VmMDQ2MCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvam91cm5hbC5jCisrKyBiL2ZzL3ViaWZzL2pvdXJuYWwuYwpAQCAtNjY5LDYgKzY2OSw3IEBACiAKIG91dF9yZWxlYXNlOgogCXJlbGVhc2VfaGVhZChjLCBCQVNFSEQpOworCWtmcmVlKGRlbnQpOwogb3V0X3JvOgogCXViaWZzX3JvX21vZGUoYywgZXJyKTsKIAlpZiAobGFzdF9yZWZlcmVuY2UpCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9vcnBoYW4uYyBiL2ZzL3ViaWZzL29ycGhhbi5jCmluZGV4IGJkNjQ0YmYuLmE1NDIyZmYgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL29ycGhhbi5jCisrKyBiL2ZzL3ViaWZzL29ycGhhbi5jCkBAIC02NzQsNyArNjc0LDcgQEAKIAkJaWYgKElTX0VSUihzbGViKSkgewogCQkJaWYgKFBUUl9FUlIoc2xlYikgPT0gLUVVQ0xFQU4pCiAJCQkJc2xlYiA9IHViaWZzX3JlY292ZXJfbGViKGMsIGxudW0sIDAsCi0JCQkJCQkJIGMtPnNidWYsIDApOworCQkJCQkJCSBjLT5zYnVmLCAtMSk7CiAJCQlpZiAoSVNfRVJSKHNsZWIpKSB7CiAJCQkJZXJyID0gUFRSX0VSUihzbGViKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3JlY292ZXJ5LmMgYi9mcy91Ymlmcy9yZWNvdmVyeS5jCmluZGV4IDczMWQ5ZTIuLjc4M2Q4ZTAgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3JlY292ZXJ5LmMKKysrIGIvZnMvdWJpZnMvcmVjb3ZlcnkuYwpAQCAtNTY0LDE5ICs1NjQsMTUgQEAKIH0KIAogLyoqCi0gKiBkcm9wX2xhc3Rfbm9kZSAtIGRyb3AgdGhlIGxhc3Qgbm9kZSBvciBncm91cCBvZiBub2Rlcy4KKyAqIGRyb3BfbGFzdF9ncm91cCAtIGRyb3AgdGhlIGxhc3QgZ3JvdXAgb2Ygbm9kZXMuCiAgKiBAc2xlYjogc2Nhbm5lZCBMRUIgaW5mb3JtYXRpb24KICAqIEBvZmZzOiBvZmZzZXQgb2YgZHJvcHBlZCBub2RlcyBpcyByZXR1cm5lZCBoZXJlCi0gKiBAZ3JvdXBlZDogbm9uLXplcm8gaWYgd2hvbGUgZ3JvdXAgb2Ygbm9kZXMgaGF2ZSB0byBiZSBkcm9wcGVkCiAgKgogICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgJ3ViaWZzX3JlY292ZXJfbGViKCknIHdoaWNoIGRyb3BzIHRoZSBsYXN0Ci0gKiBub2RlIG9mIHRoZSBzY2FubmVkIExFQiBvciB0aGUgbGFzdCBncm91cCBvZiBub2RlcyBpZiBAZ3JvdXBlZCBpcyBub3QgemVyby4KLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMSBpZiBhIG5vZGUgd2FzIGRyb3BwZWQgYW5kICUwIG90aGVyd2lzZS4KKyAqIGdyb3VwIG9mIG5vZGVzIG9mIHRoZSBzY2FubmVkIExFQi4KICAqLwotc3RhdGljIGludCBkcm9wX2xhc3Rfbm9kZShzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWIsIGludCAqb2ZmcywgaW50IGdyb3VwZWQpCitzdGF0aWMgdm9pZCBkcm9wX2xhc3RfZ3JvdXAoc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViLCBpbnQgKm9mZnMpCiB7Ci0JaW50IGRyb3BwZWQgPSAwOwotCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZzbGViLT5ub2RlcykpIHsKIAkJc3RydWN0IHViaWZzX3NjYW5fbm9kZSAqc25vZDsKIAkJc3RydWN0IHViaWZzX2NoICpjaDsKQEAgLTU4NSwxNyArNTgxLDQwIEBACiAJCQkJICBsaXN0KTsKIAkJY2ggPSBzbm9kLT5ub2RlOwogCQlpZiAoY2gtPmdyb3VwX3R5cGUgIT0gVUJJRlNfSU5fTk9ERV9HUk9VUCkKLQkJCXJldHVybiBkcm9wcGVkOwotCQlkYmdfcmN2cnkoImRyb3BwaW5nIG5vZGUgYXQgJWQ6JWQiLCBzbGViLT5sbnVtLCBzbm9kLT5vZmZzKTsKKwkJCWJyZWFrOworCisJCWRiZ19yY3ZyeSgiZHJvcHBpbmcgZ3JvdXBlZCBub2RlIGF0ICVkOiVkIiwKKwkJCSAgc2xlYi0+bG51bSwgc25vZC0+b2Zmcyk7CiAJCSpvZmZzID0gc25vZC0+b2ZmczsKIAkJbGlzdF9kZWwoJnNub2QtPmxpc3QpOwogCQlrZnJlZShzbm9kKTsKIAkJc2xlYi0+bm9kZXNfY250IC09IDE7Ci0JCWRyb3BwZWQgPSAxOwotCQlpZiAoIWdyb3VwZWQpCi0JCQlicmVhazsKIAl9Ci0JcmV0dXJuIGRyb3BwZWQ7Cit9CisKKy8qKgorICogZHJvcF9sYXN0X25vZGUgLSBkcm9wIHRoZSBsYXN0IG5vZGUuCisgKiBAc2xlYjogc2Nhbm5lZCBMRUIgaW5mb3JtYXRpb24KKyAqIEBvZmZzOiBvZmZzZXQgb2YgZHJvcHBlZCBub2RlcyBpcyByZXR1cm5lZCBoZXJlCisgKiBAZ3JvdXBlZDogbm9uLXplcm8gaWYgd2hvbGUgZ3JvdXAgb2Ygbm9kZXMgaGF2ZSB0byBiZSBkcm9wcGVkCisgKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgJ3ViaWZzX3JlY292ZXJfbGViKCknIHdoaWNoIGRyb3BzIHRoZSBsYXN0CisgKiBub2RlIG9mIHRoZSBzY2FubmVkIExFQi4KKyAqLworc3RhdGljIHZvaWQgZHJvcF9sYXN0X25vZGUoc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViLCBpbnQgKm9mZnMpCit7CisJc3RydWN0IHViaWZzX3NjYW5fbm9kZSAqc25vZDsKKworCWlmICghbGlzdF9lbXB0eSgmc2xlYi0+bm9kZXMpKSB7CisJCXNub2QgPSBsaXN0X2VudHJ5KHNsZWItPm5vZGVzLnByZXYsIHN0cnVjdCB1Ymlmc19zY2FuX25vZGUsCisJCQkJICBsaXN0KTsKKworCQlkYmdfcmN2cnkoImRyb3BwaW5nIGxhc3Qgbm9kZSBhdCAlZDolZCIsIHNsZWItPmxudW0sIHNub2QtPm9mZnMpOworCQkqb2ZmcyA9IHNub2QtPm9mZnM7CisJCWxpc3RfZGVsKCZzbm9kLT5saXN0KTsKKwkJa2ZyZWUoc25vZCk7CisJCXNsZWItPm5vZGVzX2NudCAtPSAxOworCX0KIH0KIAogLyoqCkBAIC02MDQsNyArNjIzLDggQEAKICAqIEBsbnVtOiBMRUIgbnVtYmVyCiAgKiBAb2Zmczogb2Zmc2V0CiAgKiBAc2J1ZjogTEVCLXNpemVkIGJ1ZmZlciB0byB1c2UKLSAqIEBncm91cGVkOiBub2RlcyBtYXkgYmUgZ3JvdXBlZCBmb3IgcmVjb3ZlcnkKKyAqIEBqaGVhZDogam91cm5hbCBoZWFkIG51bWJlciB0aGlzIExFQiBiZWxvbmdzIHRvICglLTEgaWYgdGhlIExFQiBkb2VzIG5vdAorICogICAgICAgICBiZWxvbmcgdG8gYW55IGpvdXJuYWwgaGVhZCkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBzY2FuIG9mIGEgTEVCLCBidXQgY2F0ZXJzIGZvciBlcnJvcnMgdGhhdCBtaWdodCBoYXZlCiAgKiBiZWVuIGNhdXNlZCBieSB0aGUgdW5jbGVhbiB1bm1vdW50IGZyb20gd2hpY2ggd2UgYXJlIGF0dGVtcHRpbmcgdG8gcmVjb3Zlci4KQEAgLTYxMiwxMyArNjMyLDE0IEBACiAgKiBmb3VuZCwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgKi8KIHN0cnVjdCB1Ymlmc19zY2FuX2xlYiAqdWJpZnNfcmVjb3Zlcl9sZWIoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBsbnVtLAotCQkJCQkgaW50IG9mZnMsIHZvaWQgKnNidWYsIGludCBncm91cGVkKQorCQkJCQkgaW50IG9mZnMsIHZvaWQgKnNidWYsIGludCBqaGVhZCkKIHsKIAlpbnQgcmV0ID0gMCwgZXJyLCBsZW4gPSBjLT5sZWJfc2l6ZSAtIG9mZnMsIHN0YXJ0ID0gb2ZmcywgbWluX2lvX3VuaXQ7CisJaW50IGdyb3VwZWQgPSBqaGVhZCA9PSAtMSA/IDAgOiBjLT5qaGVhZHNbamhlYWRdLmdyb3VwZWQ7CiAJc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViOwogCXZvaWQgKmJ1ZiA9IHNidWYgKyBvZmZzOwogCi0JZGJnX3JjdnJ5KCIlZDolZCIsIGxudW0sIG9mZnMpOworCWRiZ19yY3ZyeSgiJWQ6JWQsIGpoZWFkICVkLCBncm91cGVkICVkIiwgbG51bSwgb2ZmcywgamhlYWQsIGdyb3VwZWQpOwogCiAJc2xlYiA9IHViaWZzX3N0YXJ0X3NjYW4oYywgbG51bSwgb2Zmcywgc2J1Zik7CiAJaWYgKElTX0VSUihzbGViKSkKQEAgLTYzNSw3ICs2NTYsNyBAQAogCQkgKiBTY2FuIHF1aWV0bHkgdW50aWwgdGhlcmUgaXMgYW4gZXJyb3IgZnJvbSB3aGljaCB3ZSBjYW5ub3QKIAkJICogcmVjb3ZlcgogCQkgKi8KLQkJcmV0ID0gdWJpZnNfc2Nhbl9hX25vZGUoYywgYnVmLCBsZW4sIGxudW0sIG9mZnMsIDApOworCQlyZXQgPSB1Ymlmc19zY2FuX2Ffbm9kZShjLCBidWYsIGxlbiwgbG51bSwgb2ZmcywgMSk7CiAJCWlmIChyZXQgPT0gU0NBTk5FRF9BX05PREUpIHsKIAkJCS8qIEEgdmFsaWQgbm9kZSwgYW5kIG5vdCBhIHBhZGRpbmcgbm9kZSAqLwogCQkJc3RydWN0IHViaWZzX2NoICpjaCA9IGJ1ZjsKQEAgLTY5NSw1OSArNzE2LDYyIEBACiAJCSAqIElmIG5vZGVzIGFyZSBncm91cGVkLCBhbHdheXMgZHJvcCB0aGUgaW5jb21wbGV0ZSBncm91cCBhdAogCQkgKiB0aGUgZW5kLgogCQkgKi8KLQkJZHJvcF9sYXN0X25vZGUoc2xlYiwgJm9mZnMsIDEpOworCQlkcm9wX2xhc3RfZ3JvdXAoc2xlYiwgJm9mZnMpOwogCi0JLyoKLQkgKiBXaGlsZSB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2FtZSBtaW4uIEkvTyB1bml0IGtlZXAgZHJvcHBpbmcKLQkgKiBub2Rlcy4gU28gYmFzaWNhbGx5LCB3aGF0IHdlIHdhbnQgaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxhc3QgbWluLgotCSAqIEkvTyB1bml0IHdoZXJlIHdlIHNhdyB0aGUgY29ycnVwdGlvbiBpcyBkcm9wcGVkIGNvbXBsZXRlbHkgd2l0aCBhbGwKLQkgKiB0aGUgdW5jb3JydXB0ZWQgbm9kZSB3aGljaCBtYXkgcG9zc2libHkgc2l0IHRoZXJlLgotCSAqCi0JICogSW4gb3RoZXIgd29yZHMsIGxldCdzIG5hbWUgdGhlIG1pbi4gSS9PIHVuaXQgd2hlcmUgdGhlIGNvcnJ1cHRpb24KLQkgKiBzdGFydHMgQiwgYW5kIHRoZSBwcmV2aW91cyBtaW4uIEkvTyB1bml0IEEuIFRoZSBiZWxvdyBjb2RlIHRyaWVzIHRvCi0JICogZGVhbCB3aXRoIGEgc2l0dWF0aW9uIHdoZW4gaGFsZiBvZiBCIGNvbnRhaW5zIHZhbGlkIG5vZGVzIG9yIHRoZSBlbmQKLQkgKiBvZiBhIHZhbGlkIG5vZGUsIGFuZCB0aGUgc2Vjb25kIGhhbGYgb2YgQiBjb250YWlucyBjb3JydXB0ZWQgZGF0YSBvcgotCSAqIGdhcmJhZ2UuIFRoaXMgbWVhbnMgdGhhdCBVQklGUyBoYWQgYmVlbiB3cml0aW5nIHRvIEIganVzdCBiZWZvcmUgdGhlCi0JICogcG93ZXIgY3V0IGhhcHBlbmVkLiBJIGRvIG5vdCBrbm93IGhvdyByZWFsaXN0aWMgaXMgdGhpcyBzY2VuYXJpbwotCSAqIHRoYXQgaGFsZiBvZiB0aGUgbWluLiBJL08gdW5pdCBoYWQgYmVlbiB3cml0dGVuIHN1Y2Nlc3NmdWxseSBhbmQgdGhlCi0JICogb3RoZXIgaGFsZiBub3QsIGJ1dCB0aGlzIGlzIHBvc3NpYmxlIGluIG91ciAnZmFpbHVyZSBtb2RlIGVtdWxhdGlvbicKLQkgKiBpbmZyYXN0cnVjdHVyZSBhdCBsZWFzdC4KLQkgKgotCSAqIFNvIHdoYXQgaXMgdGhlIHByb2JsZW0sIHdoeSB3ZSBuZWVkIHRvIGRyb3AgdGhvc2Ugbm9kZXM/IFdoZXkgY2FuJ3QKLQkgKiB3ZSBqdXN0IGNsZWFuLXVwIHRoZSBzZWNvbmQgaGFsZiBvZiBCIGJ5IHB1dHRpbmcgYSBwYWRkaW5nIG5vZGUKLQkgKiB0aGVyZT8gV2UgY2FuLCBhbmQgdGhpcyB3b3JrcyBmaW5lIHdpdGggb25lIGV4Y2VwdGlvbiB3aGljaCB3YXMKLQkgKiByZXByb2R1Y2VkIHdpdGggcG93ZXIgY3V0IGVtdWxhdGlvbiB0ZXN0aW5nIGFuZCBoYXBwZW5zIGV4dHJlbWVseQotCSAqIHJhcmVseS4gVGhlIGRlc2NyaXB0aW9uIGZvbGxvd3MsIGJ1dCBpdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB0aGF0IGlzCi0JICogb25seSBhYm91dCB0aGUgR0MgaGVhZCwgc28gd2UgY291bGQgZG8gdGhpcyB0cmljayBvbmx5IGlmIHRoZSBidWQKLQkgKiBiZWxvbmdzIHRvIHRoZSBHQyBoZWFkLCBidXQgaXQgZG9lcyBub3Qgc2VlbSB0byBiZSB3b3J0aCBhbgotCSAqIGFkZGl0aW9uYWwgImlmIiBzdGF0ZW1lbnQuCi0JICoKLQkgKiBTbywgaW1hZ2luZSB0aGUgZmlsZS1zeXN0ZW0gaXMgZnVsbCwgd2UgcnVuIEdDIHdoaWNoIGlzIG1vdmluZyB2YWxpZAotCSAqIG5vZGVzIGZyb20gTEVCIFggdG8gTEVCIFkgKG9idmlvdXNseSwgTEVCIFkgaXMgdGhlIGN1cnJlbnQgR0MgaGVhZAotCSAqIExFQikuIFRoZSBAYy0+Z2NfbG51bSBpcyAtMSwgd2hpY2ggbWVhbnMgdGhhdCBHQyB3aWxsIHJldGFpbiBMRUIgWAotCSAqIGFuZCB3aWxsIHRyeSB0byBjb250aW51ZS4gSW1hZ2luZSB0aGF0IExFQiBYIGlzIGN1cnJlbnRseSB0aGUKLQkgKiBkaXJ0aWVzdCBMRUIsIGFuZCB0aGUgYW1vdW50IG9mIHVzZWQgc3BhY2UgaW4gTEVCIFkgaXMgZXhhY3RseSB0aGUKLQkgKiBzYW1lIGFzIGFtb3VudCBvZiBmcmVlIHNwYWNlIGluIExFQiBYLgotCSAqCi0JICogQW5kIGEgcG93ZXIgY3V0IGhhcHBlbnMgd2hlbiBub2RlcyBhcmUgbW92ZWQgZnJvbSBMRUIgWCB0byBMRUIgWS4gV2UKLQkgKiBhcmUgaGVyZSB0cnlpbmcgdG8gcmVjb3ZlciBMRUIgWSB3aGljaCBpcyB0aGUgR0MgaGVhZCBMRUIuIFdlIGZpbmQKLQkgKiB0aGUgbWluLiBJL08gdW5pdCBCIGFzIGRlc2NyaWJlZCBhYm92ZS4gVGhlbiB3ZSBjbGVhbi11cCBMRUIgWSBieQotCSAqIHBhZGRpbmcgbWluLiBJL08gdW5pdC4gQW5kIGxhdGVyICd1Ymlmc19yY3ZyeV9nY19jb21taXQoKScgZnVuY3Rpb24KLQkgKiBmYWlscywgYmVjYXVzZSBpdCBjYW5ub3QgZmluZCBhIGRpcnR5IExFQiB3aGljaCBjb3VsZCBiZSBHQydkIGludG8KLQkgKiBMRUIgWSEgRXZlbiBMRUIgWCBkb2VzIG5vdCBtYXRjaCBiZWNhdXNlIHRoZSBhbW91bnQgb2YgdmFsaWQgbm9kZXMKLQkgKiB0aGVyZSBkb2VzIG5vdCBmaXQgdGhlIGZyZWUgc3BhY2UgaW4gTEVCIFkgYW55IG1vcmUhIEFuZCB0aGlzIGlzCi0JICogYmVjYXVzZSBvZiB0aGUgcGFkZGluZyBub2RlIHdoaWNoIHdlIGFkZGVkIHRvIExFQiBZLiBUaGUKLQkgKiB1c2VyLXZpc2libGUgZWZmZWN0IG9mIHRoaXMgd2hpY2ggSSBvbmNlIG9ic2VydmVkIGFuZCBhbmFseXNlZCBpcwotCSAqIHRoYXQgd2UgY2Fubm90IG1vdW50IHRoZSBmaWxlLXN5c3RlbSB3aXRoIC1FTk9TUEMgZXJyb3IuCi0JICoKLQkgKiBTbyBvYnZpb3VzbHksIHRvIG1ha2Ugc3VyZSB0aGF0IHNpdHVhdGlvbiBkb2VzIG5vdCBoYXBwZW4gd2Ugc2hvdWxkCi0JICogZnJlZSBtaW4uIEkvTyB1bml0IEIgaW4gTEVCIFkgY29tcGxldGVseSBhbmQgdGhlIGxhc3QgdXNlZCBtaW4uIEkvTwotCSAqIHVuaXQgaW4gTEVCIFkgc2hvdWxkIGJlIEEuIFRoaXMgaXMgYmFzaWNhbGx5IHdoYXQgdGhlIGJlbG93IGNvZGUKLQkgKiB0cmllcyB0byBkby4KLQkgKi8KLQl3aGlsZSAobWluX2lvX3VuaXQgPT0gcm91bmRfZG93bihvZmZzLCBjLT5taW5faW9fc2l6ZSkgJiYKLQkgICAgICAgbWluX2lvX3VuaXQgIT0gb2ZmcyAmJgotCSAgICAgICBkcm9wX2xhc3Rfbm9kZShzbGViLCAmb2ZmcywgZ3JvdXBlZCkpOworCWlmIChqaGVhZCA9PSBHQ0hEKSB7CisJCS8qCisJCSAqIElmIHRoaXMgTEVCIGJlbG9uZ3MgdG8gdGhlIEdDIGhlYWQgdGhlbiB3aGlsZSB3ZSBhcmUgaW4gdGhlCisJCSAqIG1pZGRsZSBvZiB0aGUgc2FtZSBtaW4uIEkvTyB1bml0IGtlZXAgZHJvcHBpbmcgbm9kZXMuIFNvCisJCSAqIGJhc2ljYWxseSwgd2hhdCB3ZSB3YW50IGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXN0IG1pbi4KKwkJICogSS9PIHVuaXQgd2hlcmUgd2Ugc2F3IHRoZSBjb3JydXB0aW9uIGlzIGRyb3BwZWQgY29tcGxldGVseQorCQkgKiB3aXRoIGFsbCB0aGUgdW5jb3JydXB0ZWQgbm9kZXMgd2hpY2ggbWF5IHBvc3NpYmx5IHNpdCB0aGVyZS4KKwkJICoKKwkJICogSW4gb3RoZXIgd29yZHMsIGxldCdzIG5hbWUgdGhlIG1pbi4gSS9PIHVuaXQgd2hlcmUgdGhlCisJCSAqIGNvcnJ1cHRpb24gc3RhcnRzIEIsIGFuZCB0aGUgcHJldmlvdXMgbWluLiBJL08gdW5pdCBBLiBUaGUKKwkJICogYmVsb3cgY29kZSB0cmllcyB0byBkZWFsIHdpdGggYSBzaXR1YXRpb24gd2hlbiBoYWxmIG9mIEIKKwkJICogY29udGFpbnMgdmFsaWQgbm9kZXMgb3IgdGhlIGVuZCBvZiBhIHZhbGlkIG5vZGUsIGFuZCB0aGUKKwkJICogc2Vjb25kIGhhbGYgb2YgQiBjb250YWlucyBjb3JydXB0ZWQgZGF0YSBvciBnYXJiYWdlLiBUaGlzCisJCSAqIG1lYW5zIHRoYXQgVUJJRlMgaGFkIGJlZW4gd3JpdGluZyB0byBCIGp1c3QgYmVmb3JlIHRoZSBwb3dlcgorCQkgKiBjdXQgaGFwcGVuZWQuIEkgZG8gbm90IGtub3cgaG93IHJlYWxpc3RpYyBpcyB0aGlzIHNjZW5hcmlvCisJCSAqIHRoYXQgaGFsZiBvZiB0aGUgbWluLiBJL08gdW5pdCBoYWQgYmVlbiB3cml0dGVuIHN1Y2Nlc3NmdWxseQorCQkgKiBhbmQgdGhlIG90aGVyIGhhbGYgbm90LCBidXQgdGhpcyBpcyBwb3NzaWJsZSBpbiBvdXIgJ2ZhaWx1cmUKKwkJICogbW9kZSBlbXVsYXRpb24nIGluZnJhc3RydWN0dXJlIGF0IGxlYXN0LgorCQkgKgorCQkgKiBTbyB3aGF0IGlzIHRoZSBwcm9ibGVtLCB3aHkgd2UgbmVlZCB0byBkcm9wIHRob3NlIG5vZGVzPyBXaHkKKwkJICogY2FuJ3Qgd2UganVzdCBjbGVhbi11cCB0aGUgc2Vjb25kIGhhbGYgb2YgQiBieSBwdXR0aW5nIGEKKwkJICogcGFkZGluZyBub2RlIHRoZXJlPyBXZSBjYW4sIGFuZCB0aGlzIHdvcmtzIGZpbmUgd2l0aCBvbmUKKwkJICogZXhjZXB0aW9uIHdoaWNoIHdhcyByZXByb2R1Y2VkIHdpdGggcG93ZXIgY3V0IGVtdWxhdGlvbgorCQkgKiB0ZXN0aW5nIGFuZCBoYXBwZW5zIGV4dHJlbWVseSByYXJlbHkuCisJCSAqCisJCSAqIEltYWdpbmUgdGhlIGZpbGUtc3lzdGVtIGlzIGZ1bGwsIHdlIHJ1biBHQyB3aGljaCBzdGFydHMKKwkJICogbW92aW5nIHZhbGlkIG5vZGVzIGZyb20gTEVCIFggdG8gTEVCIFkgKG9idmlvdXNseSwgTEVCIFkgaXMKKwkJICogdGhlIGN1cnJlbnQgR0MgaGVhZCBMRUIpLiBUaGUgQGMtPmdjX2xudW0gaXMgLTEsIHdoaWNoIG1lYW5zCisJCSAqIHRoYXQgR0Mgd2lsbCByZXRhaW4gTEVCIFggYW5kIHdpbGwgdHJ5IHRvIGNvbnRpbnVlLiBJbWFnaW5lCisJCSAqIHRoYXQgTEVCIFggaXMgY3VycmVudGx5IHRoZSBkaXJ0aWVzdCBMRUIsIGFuZCB0aGUgYW1vdW50IG9mCisJCSAqIHVzZWQgc3BhY2UgaW4gTEVCIFkgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBhbW91bnQgb2YgZnJlZQorCQkgKiBzcGFjZSBpbiBMRUIgWC4KKwkJICoKKwkJICogQW5kIGEgcG93ZXIgY3V0IGhhcHBlbnMgd2hlbiBub2RlcyBhcmUgbW92ZWQgZnJvbSBMRUIgWCB0bworCQkgKiBMRUIgWS4gV2UgYXJlIGhlcmUgdHJ5aW5nIHRvIHJlY292ZXIgTEVCIFkgd2hpY2ggaXMgdGhlIEdDCisJCSAqIGhlYWQgTEVCLiBXZSBmaW5kIHRoZSBtaW4uIEkvTyB1bml0IEIgYXMgZGVzY3JpYmVkIGFib3ZlLgorCQkgKiBUaGVuIHdlIGNsZWFuLXVwIExFQiBZIGJ5IHBhZGRpbmcgbWluLiBJL08gdW5pdC4gQW5kIGxhdGVyCisJCSAqICd1Ymlmc19yY3ZyeV9nY19jb21taXQoKScgZnVuY3Rpb24gZmFpbHMsIGJlY2F1c2UgaXQgY2Fubm90CisJCSAqIGZpbmQgYSBkaXJ0eSBMRUIgd2hpY2ggY291bGQgYmUgR0MnZCBpbnRvIExFQiBZISBFdmVuIExFQiBYCisJCSAqIGRvZXMgbm90IG1hdGNoIGJlY2F1c2UgdGhlIGFtb3VudCBvZiB2YWxpZCBub2RlcyB0aGVyZSBkb2VzCisJCSAqIG5vdCBmaXQgdGhlIGZyZWUgc3BhY2UgaW4gTEVCIFkgYW55IG1vcmUhIEFuZCB0aGlzIGlzCisJCSAqIGJlY2F1c2Ugb2YgdGhlIHBhZGRpbmcgbm9kZSB3aGljaCB3ZSBhZGRlZCB0byBMRUIgWS4gVGhlCisJCSAqIHVzZXItdmlzaWJsZSBlZmZlY3Qgb2YgdGhpcyB3aGljaCBJIG9uY2Ugb2JzZXJ2ZWQgYW5kCisJCSAqIGFuYWx5c2VkIGlzIHRoYXQgd2UgY2Fubm90IG1vdW50IHRoZSBmaWxlLXN5c3RlbSB3aXRoCisJCSAqIC1FTk9TUEMgZXJyb3IuCisJCSAqCisJCSAqIFNvIG9idmlvdXNseSwgdG8gbWFrZSBzdXJlIHRoYXQgc2l0dWF0aW9uIGRvZXMgbm90IGhhcHBlbiB3ZQorCQkgKiBzaG91bGQgZnJlZSBtaW4uIEkvTyB1bml0IEIgaW4gTEVCIFkgY29tcGxldGVseSBhbmQgdGhlIGxhc3QKKwkJICogdXNlZCBtaW4uIEkvTyB1bml0IGluIExFQiBZIHNob3VsZCBiZSBBLiBUaGlzIGlzIGJhc2ljYWxseQorCQkgKiB3aGF0IHRoZSBiZWxvdyBjb2RlIHRyaWVzIHRvIGRvLgorCQkgKi8KKwkJd2hpbGUgKG9mZnMgPiBtaW5faW9fdW5pdCkKKwkJCWRyb3BfbGFzdF9ub2RlKHNsZWIsICZvZmZzKTsKKwl9CiAKIAlidWYgPSBzYnVmICsgb2ZmczsKIAlsZW4gPSBjLT5sZWJfc2l6ZSAtIG9mZnM7CkBAIC04ODEsNyArOTA1LDcgQEAKIAkJfQogCQl1Ymlmc19zY2FuX2Rlc3Ryb3koc2xlYik7CiAJfQotCXJldHVybiB1Ymlmc19yZWNvdmVyX2xlYihjLCBsbnVtLCBvZmZzLCBzYnVmLCAwKTsKKwlyZXR1cm4gdWJpZnNfcmVjb3Zlcl9sZWIoYywgbG51bSwgb2Zmcywgc2J1ZiwgLTEpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3JlcGxheS5jIGIvZnMvdWJpZnMvcmVwbGF5LmMKaW5kZXggNjYxNzI4MC4uNWU5NzE2MSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvcmVwbGF5LmMKKysrIGIvZnMvdWJpZnMvcmVwbGF5LmMKQEAgLTU1Nyw4ICs1NTcsNyBAQAogCQkgKiB0aGVzZSBMRUJzIGNvdWxkIHBvc3NpYmx5IGJlIHdyaXR0ZW4gdG8gYXQgdGhlIHBvd2VyIGN1dAogCQkgKiB0aW1lLgogCQkgKi8KLQkJc2xlYiA9IHViaWZzX3JlY292ZXJfbGViKGMsIGxudW0sIG9mZnMsIGMtPnNidWYsCi0JCQkJCSBiLT5idWQtPmpoZWFkICE9IEdDSEQpOworCQlzbGViID0gdWJpZnNfcmVjb3Zlcl9sZWIoYywgbG51bSwgb2ZmcywgYy0+c2J1ZiwgYi0+YnVkLT5qaGVhZCk7CiAJZWxzZQogCQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCBvZmZzLCBjLT5zYnVmLCAwKTsKIAlpZiAoSVNfRVJSKHNsZWIpKQpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvc2hyaW5rZXIuYyBiL2ZzL3ViaWZzL3Nocmlua2VyLmMKaW5kZXggY2E5NTNhOS4uOWUxZDA1NiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc2hyaW5rZXIuYworKysgYi9mcy91Ymlmcy9zaHJpbmtlci5jCkBAIC0yODQsNyArMjg0LDExIEBACiAJbG9uZyBjbGVhbl96bl9jbnQgPSBhdG9taWNfbG9uZ19yZWFkKCZ1Ymlmc19jbGVhbl96bl9jbnQpOwogCiAJaWYgKG5yID09IDApCi0JCXJldHVybiBjbGVhbl96bl9jbnQ7CisJCS8qCisJCSAqIER1ZSB0byB0aGUgd2F5IFVCSUZTIHVwZGF0ZXMgdGhlIGNsZWFuIHpub2RlIGNvdW50ZXIgaXQgbWF5CisJCSAqIHRlbXBvcmFyaWx5IGJlIG5lZ2F0aXZlLgorCQkgKi8KKwkJcmV0dXJuIGNsZWFuX3puX2NudCA+PSAwID8gY2xlYW5fem5fY250IDogMTsKIAogCWlmICghY2xlYW5fem5fY250KSB7CiAJCS8qCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCAxYWIwZDIyLi44Yzg5MmMyIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTgxMSwxNSArODExLDE4IEBACiAKIAkJYy0+amhlYWRzW2ldLndidWYuc3luY19jYWxsYmFjayA9ICZidWRfd2J1Zl9jYWxsYmFjazsKIAkJYy0+amhlYWRzW2ldLndidWYuamhlYWQgPSBpOworCQljLT5qaGVhZHNbaV0uZ3JvdXBlZCA9IDE7CiAJfQogCiAJYy0+amhlYWRzW0JBU0VIRF0ud2J1Zi5kdHlwZSA9IFVCSV9TSE9SVFRFUk07CiAJLyoKIAkgKiBHYXJiYWdlIENvbGxlY3RvciBoZWFkIGxpa2VseSBjb250YWlucyBsb25nLXRlcm0gZGF0YSBhbmQKLQkgKiBkb2VzIG5vdCBuZWVkIHRvIGJlIHN5bmNocm9uaXplZCBieSB0aW1lci4KKwkgKiBkb2VzIG5vdCBuZWVkIHRvIGJlIHN5bmNocm9uaXplZCBieSB0aW1lci4gQWxzbyBHQyBoZWFkIG5vZGVzIGFyZQorCSAqIG5vdCBncm91cGVkLgogCSAqLwogCWMtPmpoZWFkc1tHQ0hEXS53YnVmLmR0eXBlID0gVUJJX0xPTkdURVJNOwogCWMtPmpoZWFkc1tHQ0hEXS53YnVmLm5vX3RpbWVyID0gMTsKKwljLT5qaGVhZHNbR0NIRF0uZ3JvdXBlZCA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyODQsMTIgKzEyODcsMjUgQEAKIAlpZiAoKGMtPm1zdF9ub2RlLT5mbGFncyAmIGNwdV90b19sZTMyKFVCSUZTX01TVF9ESVJUWSkpICE9IDApIHsKIAkJdWJpZnNfbXNnKCJyZWNvdmVyeSBuZWVkZWQiKTsKIAkJYy0+bmVlZF9yZWNvdmVyeSA9IDE7Ci0JCWlmICghYy0+cm9fbW91bnQpIHsKLQkJCWVyciA9IHViaWZzX3JlY292ZXJfaW5sX2hlYWRzKGMsIGMtPnNidWYpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIG91dF9tYXN0ZXI7Ci0JCX0KLQl9IGVsc2UgaWYgKCFjLT5yb19tb3VudCkgeworCX0KKworCWlmIChjLT5uZWVkX3JlY292ZXJ5ICYmICFjLT5yb19tb3VudCkgeworCQllcnIgPSB1Ymlmc19yZWNvdmVyX2lubF9oZWFkcyhjLCBjLT5zYnVmKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X21hc3RlcjsKKwl9CisKKwllcnIgPSB1Ymlmc19scHRfaW5pdChjLCAxLCAhYy0+cm9fbW91bnQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X21hc3RlcjsKKworCWlmICghYy0+cm9fbW91bnQgJiYgYy0+c3BhY2VfZml4dXApIHsKKwkJZXJyID0gdWJpZnNfZml4dXBfZnJlZV9zcGFjZShjKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X21hc3RlcjsKKwl9CisKKwlpZiAoIWMtPnJvX21vdW50KSB7CiAJCS8qCiAJCSAqIFNldCB0aGUgImRpcnR5IiBmbGFnIHNvIHRoYXQgaWYgd2UgcmVib290IHVuY2xlYW5seSB3ZQogCQkgKiB3aWxsIG5vdGljZSB0aGlzIGltbWVkaWF0ZWx5IG9uIHRoZSBuZXh0IG1vdW50LgpAQCAtMTI5NywxMyArMTMxMyw5IEBACiAJCWMtPm1zdF9ub2RlLT5mbGFncyB8PSBjcHVfdG9fbGUzMihVQklGU19NU1RfRElSVFkpOwogCQllcnIgPSB1Ymlmc193cml0ZV9tYXN0ZXIoYyk7CiAJCWlmIChlcnIpCi0JCQlnb3RvIG91dF9tYXN0ZXI7CisJCQlnb3RvIG91dF9scHQ7CiAJfQogCi0JZXJyID0gdWJpZnNfbHB0X2luaXQoYywgMSwgIWMtPnJvX21vdW50KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF9scHQ7Ci0KIAllcnIgPSBkYmdfY2hlY2tfaWR4X3NpemUoYywgYy0+Ymkub2xkX2lkeF9zeik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfbHB0OwpAQCAtMTM5NiwxMiArMTQwOCw2IEBACiAJfSBlbHNlCiAJCXViaWZzX2Fzc2VydChjLT5sc3QudGFrZW5fZW1wdHlfbGVicyA+IDApOwogCi0JaWYgKCFjLT5yb19tb3VudCAmJiBjLT5zcGFjZV9maXh1cCkgewotCQllcnIgPSB1Ymlmc19maXh1cF9mcmVlX3NwYWNlKGMpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXRfaW5mb3M7Ci0JfQotCiAJZXJyID0gZGJnX2NoZWNrX2ZpbGVzeXN0ZW0oYyk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfaW5mb3M7CkBAIC0xODQyLDcgKzE4NDgsNiBAQAogCWJkaV9kZXN0cm95KCZjLT5iZGkpOwogCXViaV9jbG9zZV92b2x1bWUoYy0+dWJpKTsKIAltdXRleF91bmxvY2soJmMtPnVtb3VudF9tdXRleCk7Ci0Ja2ZyZWUoYyk7CiB9CiAKIHN0YXRpYyBpbnQgdWJpZnNfcmVtb3VudF9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQpAQCAtMTk2NSw2MSArMTk3MCw2NSBAQAogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCitzdGF0aWMgc3RydWN0IHViaWZzX2luZm8gKmFsbG9jX3ViaWZzX2luZm8oc3RydWN0IHViaV92b2x1bWVfZGVzYyAqdWJpKQoreworCXN0cnVjdCB1Ymlmc19pbmZvICpjOworCisJYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1Ymlmc19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGMpIHsKKwkJc3Bpbl9sb2NrX2luaXQoJmMtPmNudF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmMtPmNzX2xvY2spOworCQlzcGluX2xvY2tfaW5pdCgmYy0+YnVkc19sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmMtPnNwYWNlX2xvY2spOworCQlzcGluX2xvY2tfaW5pdCgmYy0+b3JwaGFuX2xvY2spOworCQlpbml0X3J3c2VtKCZjLT5jb21taXRfc2VtKTsKKwkJbXV0ZXhfaW5pdCgmYy0+bHBfbXV0ZXgpOworCQltdXRleF9pbml0KCZjLT50bmNfbXV0ZXgpOworCQltdXRleF9pbml0KCZjLT5sb2dfbXV0ZXgpOworCQltdXRleF9pbml0KCZjLT5tc3RfbXV0ZXgpOworCQltdXRleF9pbml0KCZjLT51bW91bnRfbXV0ZXgpOworCQltdXRleF9pbml0KCZjLT5idV9tdXRleCk7CisJCW11dGV4X2luaXQoJmMtPndyaXRlX3Jlc2VydmVfbXV0ZXgpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjLT5jbXRfd3EpOworCQljLT5idWRzID0gUkJfUk9PVDsKKwkJYy0+b2xkX2lkeCA9IFJCX1JPT1Q7CisJCWMtPnNpemVfdHJlZSA9IFJCX1JPT1Q7CisJCWMtPm9ycGhfdHJlZSA9IFJCX1JPT1Q7CisJCUlOSVRfTElTVF9IRUFEKCZjLT5pbmZvc19saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmMtPmlkeF9nYyk7CisJCUlOSVRfTElTVF9IRUFEKCZjLT5yZXBsYXlfbGlzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZjLT5yZXBsYXlfYnVkcyk7CisJCUlOSVRfTElTVF9IRUFEKCZjLT51bmNhdF9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmMtPmVtcHR5X2xpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmYy0+ZnJlZWFibGVfbGlzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZjLT5mcmRpX2lkeF9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmMtPnVuY2xlYW5fbGViX2xpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmYy0+b2xkX2J1ZHMpOworCQlJTklUX0xJU1RfSEVBRCgmYy0+b3JwaF9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmMtPm9ycGhfbmV3KTsKKwkJYy0+bm9fY2hrX2RhdGFfY3JjID0gMTsKKworCQljLT5oaWdoZXN0X2ludW0gPSBVQklGU19GSVJTVF9JTk87CisJCWMtPmxoZWFkX2xudW0gPSBjLT5sdGFpbF9sbnVtID0gVUJJRlNfTE9HX0xOVU07CisKKwkJdWJpX2dldF92b2x1bWVfaW5mbyh1YmksICZjLT52aSk7CisJCXViaV9nZXRfZGV2aWNlX2luZm8oYy0+dmkudWJpX251bSwgJmMtPmRpKTsKKwl9CisJcmV0dXJuIGM7Cit9CisKIHN0YXRpYyBpbnQgdWJpZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogewotCXN0cnVjdCB1Ymlfdm9sdW1lX2Rlc2MgKnViaSA9IHNiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IHViaWZzX2luZm8gKmM7CisJc3RydWN0IHViaWZzX2luZm8gKmMgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBpbm9kZSAqcm9vdDsKIAlpbnQgZXJyOwogCi0JYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1Ymlmc19pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNwaW5fbG9ja19pbml0KCZjLT5jbnRfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmMtPmNzX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjLT5idWRzX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjLT5zcGFjZV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYy0+b3JwaGFuX2xvY2spOwotCWluaXRfcndzZW0oJmMtPmNvbW1pdF9zZW0pOwotCW11dGV4X2luaXQoJmMtPmxwX211dGV4KTsKLQltdXRleF9pbml0KCZjLT50bmNfbXV0ZXgpOwotCW11dGV4X2luaXQoJmMtPmxvZ19tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmYy0+bXN0X211dGV4KTsKLQltdXRleF9pbml0KCZjLT51bW91bnRfbXV0ZXgpOwotCW11dGV4X2luaXQoJmMtPmJ1X211dGV4KTsKLQltdXRleF9pbml0KCZjLT53cml0ZV9yZXNlcnZlX211dGV4KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjLT5jbXRfd3EpOwotCWMtPmJ1ZHMgPSBSQl9ST09UOwotCWMtPm9sZF9pZHggPSBSQl9ST09UOwotCWMtPnNpemVfdHJlZSA9IFJCX1JPT1Q7Ci0JYy0+b3JwaF90cmVlID0gUkJfUk9PVDsKLQlJTklUX0xJU1RfSEVBRCgmYy0+aW5mb3NfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmMtPmlkeF9nYyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmMtPnJlcGxheV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmYy0+cmVwbGF5X2J1ZHMpOwotCUlOSVRfTElTVF9IRUFEKCZjLT51bmNhdF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmYy0+ZW1wdHlfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmMtPmZyZWVhYmxlX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZjLT5mcmRpX2lkeF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmYy0+dW5jbGVhbl9sZWJfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmMtPm9sZF9idWRzKTsKLQlJTklUX0xJU1RfSEVBRCgmYy0+b3JwaF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmYy0+b3JwaF9uZXcpOwotCWMtPm5vX2Noa19kYXRhX2NyYyA9IDE7Ci0KIAljLT52ZnNfc2IgPSBzYjsKLQljLT5oaWdoZXN0X2ludW0gPSBVQklGU19GSVJTVF9JTk87Ci0JYy0+bGhlYWRfbG51bSA9IGMtPmx0YWlsX2xudW0gPSBVQklGU19MT0dfTE5VTTsKLQotCXViaV9nZXRfdm9sdW1lX2luZm8odWJpLCAmYy0+dmkpOwotCXViaV9nZXRfZGV2aWNlX2luZm8oYy0+dmkudWJpX251bSwgJmMtPmRpKTsKLQogCS8qIFJlLW9wZW4gdGhlIFVCSSBkZXZpY2UgaW4gcmVhZC13cml0ZSBtb2RlICovCiAJYy0+dWJpID0gdWJpX29wZW5fdm9sdW1lKGMtPnZpLnViaV9udW0sIGMtPnZpLnZvbF9pZCwgVUJJX1JFQURXUklURSk7CiAJaWYgKElTX0VSUihjLT51YmkpKSB7CiAJCWVyciA9IFBUUl9FUlIoYy0+dWJpKTsKLQkJZ290byBvdXRfZnJlZTsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyoKQEAgLTIwODUsMjQgKzIwOTQsMjkgQEAKIAliZGlfZGVzdHJveSgmYy0+YmRpKTsKIG91dF9jbG9zZToKIAl1YmlfY2xvc2Vfdm9sdW1lKGMtPnViaSk7Ci1vdXRfZnJlZToKLQlrZnJlZShjKTsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHNiX3Rlc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSkKIHsKLQlkZXZfdCAqZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgdWJpZnNfaW5mbyAqYzEgPSBkYXRhOwogCXN0cnVjdCB1Ymlmc19pbmZvICpjID0gc2ItPnNfZnNfaW5mbzsKIAotCXJldHVybiBjLT52aS5jZGV2ID09ICpkZXY7CisJcmV0dXJuIGMtPnZpLmNkZXYgPT0gYzEtPnZpLmNkZXY7Cit9CisKK3N0YXRpYyBpbnQgc2Jfc2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCit7CisJc2ItPnNfZnNfaW5mbyA9IGRhdGE7CisJcmV0dXJuIHNldF9hbm9uX3N1cGVyKHNiLCBOVUxMKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKnViaWZzX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCiAJCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCB1Ymlfdm9sdW1lX2Rlc2MgKnViaTsKLQlzdHJ1Y3QgdWJpX3ZvbHVtZV9pbmZvIHZpOworCXN0cnVjdCB1Ymlmc19pbmZvICpjOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJaW50IGVycjsKIApAQCAtMjExOSwxOSArMjEzMywyNCBAQAogCQkJbmFtZSwgKGludClQVFJfRVJSKHViaSkpOwogCQlyZXR1cm4gRVJSX0NBU1QodWJpKTsKIAl9Ci0JdWJpX2dldF92b2x1bWVfaW5mbyh1YmksICZ2aSk7CiAKLQlkYmdfZ2VuKCJvcGVuZWQgdWJpJWRfJWQiLCB2aS51YmlfbnVtLCB2aS52b2xfaWQpOworCWMgPSBhbGxvY191Ymlmc19pbmZvKHViaSk7CisJaWYgKCFjKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KIAotCXNiID0gc2dldChmc190eXBlLCAmc2JfdGVzdCwgJnNldF9hbm9uX3N1cGVyLCAmdmkuY2Rldik7CisJZGJnX2dlbigib3BlbmVkIHViaSVkXyVkIiwgYy0+dmkudWJpX251bSwgYy0+dmkudm9sX2lkKTsKKworCXNiID0gc2dldChmc190eXBlLCBzYl90ZXN0LCBzYl9zZXQsIGMpOwogCWlmIChJU19FUlIoc2IpKSB7CiAJCWVyciA9IFBUUl9FUlIoc2IpOwotCQlnb3RvIG91dF9jbG9zZTsKKwkJa2ZyZWUoYyk7CiAJfQogCiAJaWYgKHNiLT5zX3Jvb3QpIHsKIAkJc3RydWN0IHViaWZzX2luZm8gKmMxID0gc2ItPnNfZnNfaW5mbzsKLQorCQlrZnJlZShjKTsKIAkJLyogQSBuZXcgbW91bnQgcG9pbnQgZm9yIGFscmVhZHkgbW91bnRlZCBVQklGUyAqLwogCQlkYmdfZ2VuKCJ0aGlzIHViaSB2b2x1bWUgaXMgYWxyZWFkeSBtb3VudGVkIik7CiAJCWlmICghIShmbGFncyAmIE1TX1JET05MWSkgIT0gYzEtPnJvX21vdW50KSB7CkBAIC0yMTQwLDExICsyMTU5LDYgQEAKIAkJfQogCX0gZWxzZSB7CiAJCXNiLT5zX2ZsYWdzID0gZmxhZ3M7Ci0JCS8qCi0JCSAqIFBhc3MgJ3ViaScgdG8gJ2ZpbGxfc3VwZXIoKScgaW4gc2ItPnNfZnNfaW5mbyB3aGVyZSBpdCBpcwotCQkgKiByZXBsYWNlZCBieSAnYycuCi0JCSAqLwotCQlzYi0+c19mc19pbmZvID0gdWJpOwogCQllcnIgPSB1Ymlmc19maWxsX3N1cGVyKHNiLCBkYXRhLCBmbGFncyAmIE1TX1NJTEVOVCA/IDEgOiAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2RlYWN0OwpAQCAtMjE2NCwxMSArMjE3OCwxOCBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyB2b2lkIGtpbGxfdWJpZnNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQoreworCXN0cnVjdCB1Ymlmc19pbmZvICpjID0gcy0+c19mc19pbmZvOworCWtpbGxfYW5vbl9zdXBlcihzKTsKKwlrZnJlZShjKTsKK30KKwogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHViaWZzX2ZzX3R5cGUgPSB7CiAJLm5hbWUgICAgPSAidWJpZnMiLAogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiAJLm1vdW50ICAgPSB1Ymlmc19tb3VudCwKLQkua2lsbF9zYiA9IGtpbGxfYW5vbl9zdXBlciwKKwkua2lsbF9zYiA9IGtpbGxfdWJpZnNfc3VwZXIsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvdG5jLmMgYi9mcy91Ymlmcy90bmMuYwppbmRleCA4MTE5YjFmLi45MWI0MjEzIDEwMDY0NAotLS0gYS9mcy91Ymlmcy90bmMuYworKysgYi9mcy91Ymlmcy90bmMuYwpAQCAtMjg3NiwxMiArMjg3NiwxMyBAQAogICovCiB2b2lkIHViaWZzX3RuY19jbG9zZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKIHsKLQlsb25nIGNsZWFuX2ZyZWVkOwotCiAJdG5jX2Rlc3Ryb3lfY25leHQoYyk7CiAJaWYgKGMtPnpyb290Lnpub2RlKSB7Ci0JCWNsZWFuX2ZyZWVkID0gdWJpZnNfZGVzdHJveV90bmNfc3VidHJlZShjLT56cm9vdC56bm9kZSk7Ci0JCWF0b21pY19sb25nX3N1YihjbGVhbl9mcmVlZCwgJnViaWZzX2NsZWFuX3puX2NudCk7CisJCWxvbmcgbjsKKworCQl1Ymlmc19kZXN0cm95X3RuY19zdWJ0cmVlKGMtPnpyb290Lnpub2RlKTsKKwkJbiA9IGF0b21pY19sb25nX3JlYWQoJmMtPmNsZWFuX3puX2NudCk7CisJCWF0b21pY19sb25nX3N1YihuLCAmdWJpZnNfY2xlYW5fem5fY250KTsKIAl9CiAJa2ZyZWUoYy0+Z2FwX2xlYnMpOwogCWtmcmVlKGMtPmlsZWJzKTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3ViaWZzLmggYi9mcy91Ymlmcy91Ymlmcy5oCmluZGV4IGE3MGQ3YjQuLmY3OTk4M2QgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3ViaWZzLmgKKysrIGIvZnMvdWJpZnMvdWJpZnMuaApAQCAtNzIyLDEyICs3MjIsMTQgQEAKICAqIHN0cnVjdCB1Ymlmc19qaGVhZCAtIGpvdXJuYWwgaGVhZC4KICAqIEB3YnVmOiBoZWFkJ3Mgd3JpdGUtYnVmZmVyCiAgKiBAYnVkc19saXN0OiBsaXN0IG9mIGJ1ZCBMRUJzIGJlbG9uZ2luZyB0byB0aGlzIGpvdXJuYWwgaGVhZAorICogQGdyb3VwZWQ6IG5vbi16ZXJvIGlmIFVCSUZTIGdyb3VwcyBub2RlcyB3aGVuIHdyaXRpbmcgdG8gdGhpcyBqb3VybmFsIGhlYWQKICAqCiAgKiBOb3RlLCB0aGUgQGJ1ZHMgbGlzdCBpcyBwcm90ZWN0ZWQgYnkgdGhlIEBjLT5idWRzX2xvY2suCiAgKi8KIHN0cnVjdCB1Ymlmc19qaGVhZCB7CiAJc3RydWN0IHViaWZzX3didWYgd2J1ZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJ1ZHNfbGlzdDsKKwl1bnNpZ25lZCBpbnQgZ3JvdXBlZDoxOwogfTsKIAogLyoqCkBAIC0xNzQyLDcgKzE3NDQsNyBAQAogaW50IHViaWZzX3JlY292ZXJfbWFzdGVyX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMpOwogaW50IHViaWZzX3dyaXRlX3JjdnJkX21zdF9ub2RlKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIHN0cnVjdCB1Ymlmc19zY2FuX2xlYiAqdWJpZnNfcmVjb3Zlcl9sZWIoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBsbnVtLAotCQkJCQkgaW50IG9mZnMsIHZvaWQgKnNidWYsIGludCBncm91cGVkKTsKKwkJCQkJIGludCBvZmZzLCB2b2lkICpzYnVmLCBpbnQgamhlYWQpOwogc3RydWN0IHViaWZzX3NjYW5fbGViICp1Ymlmc19yZWNvdmVyX2xvZ19sZWIoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBsbnVtLAogCQkJCQkgICAgIGludCBvZmZzLCB2b2lkICpzYnVmKTsKIGludCB1Ymlmc19yZWNvdmVyX2lubF9oZWFkcyhjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgdm9pZCAqc2J1Zik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCmluZGV4IGU5YjhlNTkuLjc2YmZmMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCkBAIC04OCw3ICs4OCw3IEBACiAJcG1kX3QgcG1kID0gKnBtZHA7CiAJcG1kX2NsZWFyKG1tLCBhZGRyZXNzLCBwbWRwKTsKIAlyZXR1cm4gcG1kOwotfSkKK30KICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi8KICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmlzdGQuaAppbmRleCBhZTkwZTBmLi40Zjc2OTU5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oCkBAIC02ODMsOSArNjgzLDExIEBACiBfX1NZU0NBTEwoX19OUl9zeW5jZnMsIHN5c19zeW5jZnMpCiAjZGVmaW5lIF9fTlJfc2V0bnMgMjY4CiBfX1NZU0NBTEwoX19OUl9zZXRucywgc3lzX3NldG5zKQorI2RlZmluZSBfX05SX3NlbmRtbXNnIDI2OQorX19TQ19DT01QKF9fTlJfc2VuZG1tc2csIHN5c19zZW5kbW1zZywgY29tcGF0X3N5c19zZW5kbW1zZykKIAogI3VuZGVmIF9fTlJfc3lzY2FsbHMKLSNkZWZpbmUgX19OUl9zeXNjYWxscyAyNjkKKyNkZWZpbmUgX19OUl9zeXNjYWxscyAyNzAKIAogLyoKICAqIEFsbCBzeXNjYWxscyBiZWxvdyBoZXJlIHNob3VsZCBnbyBhd2F5IHJlYWxseSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCBmMDRiMmEzLi5lMDhmMzQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC00NjcsNiArNDY3LDE3IEBACiAJezB4MTAwMiwgMHg5NjE0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg5NjE1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg5NjE2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNTzJ8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNTzJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjQ0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU8yfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjQ1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU8yfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSxcCisJezB4MTAwMiwgMHg5NjQ4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LFwKKwl7MHgxMDAyLCAweDk2NGEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0ZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSxcCisJezB4MTAwMiwgMHg5NjRmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LFwKIAl7MHgxMDAyLCAweDk3MTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM4ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDk3MTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM4ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDk3MTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM4ODB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jhc2ljX21taW9fZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9iYXNpY19tbWlvX2dwaW8uaAppbmRleCAxYWUxMjcxLi45ODk5OWNmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iYXNpY19tbWlvX2dwaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jhc2ljX21taW9fZ3Bpby5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgogCiBzdHJ1Y3QgYmdwaW9fcGRhdGEgewogCWludCBiYXNlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggYWU5MDkxYS4uMWEyMzcyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xMjgyLDggKzEyODIsOCBAQAogI2RlZmluZSBibGtfZ2V0X2ludGVncml0eShhKQkJCSgwKQogI2RlZmluZSBibGtfaW50ZWdyaXR5X2NvbXBhcmUoYSwgYikJCSgwKQogI2RlZmluZSBibGtfaW50ZWdyaXR5X3JlZ2lzdGVyKGEsIGIpCQkoMCkKLSNkZWZpbmUgYmxrX2ludGVncml0eV91bnJlZ2lzdGVyKGEpCQlkbyB7IH0gd2hpbGUgKDApOwotI2RlZmluZSBibGtfcXVldWVfbWF4X2ludGVncml0eV9zZWdtZW50cyhhLCBiKQlkbyB7IH0gd2hpbGUgKDApOworI2RlZmluZSBibGtfaW50ZWdyaXR5X3VucmVnaXN0ZXIoYSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmxrX3F1ZXVlX21heF9pbnRlZ3JpdHlfc2VnbWVudHMoYSwgYikJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBxdWV1ZV9tYXhfaW50ZWdyaXR5X3NlZ21lbnRzKGEpCQkoMCkKICNkZWZpbmUgYmxrX2ludGVncml0eV9tZXJnZV9ycShhLCBiLCBjKQkJKDApCiAjZGVmaW5lIGJsa19pbnRlZ3JpdHlfbWVyZ2VfYmlvKGEsIGIsIGMpCSgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFfcmVtYXBwaW5nLmggYi9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaAppbmRleCA1NjE5Zjg1Li5iYmQ4NjYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaApAQCAtOSw4ICs5LDEyIEBACiAjZGVmaW5lIFZURF9QQUdFX01BU0sJCSgoKHU2NCktMSkgPDwgVlREX1BBR0VfU0hJRlQpCiAjZGVmaW5lIFZURF9QQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpICsgVlREX1BBR0VfU0laRSAtIDEpICYgVlREX1BBR0VfTUFTSykKIAorI2RlZmluZSBWVERfU1RSSURFX1NISUZUICAgICAgICAoOSkKKyNkZWZpbmUgVlREX1NUUklERV9NQVNLICAgICAgICAgKCgodTY0KS0xKSA8PCBWVERfU1RSSURFX1NISUZUKQorCiAjZGVmaW5lIERNQV9QVEVfUkVBRCAoMSkKICNkZWZpbmUgRE1BX1BURV9XUklURSAoMikKKyNkZWZpbmUgRE1BX1BURV9MQVJHRV9QQUdFICgxIDw8IDcpCiAjZGVmaW5lIERNQV9QVEVfU05QICgxIDw8IDExKQogCiAjZGVmaW5lIENPTlRFWFRfVFRfTVVMVElfTEVWRUwJMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCBjNmE4NTBhLi40MzliMTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApAQCAtMjY4LDcgKzI2OCw3IEBACiAJX191MzIJY21kOwkvKiBFVEhUT09MX3tHLFN9UEFVU0VQQVJBTSAqLwogCiAJLyogSWYgdGhlIGxpbmsgaXMgYmVpbmcgYXV0by1uZWdvdGlhdGVkICh2aWEgZXRodG9vbF9jbWQuYXV0b25lZwotCSAqIGJlaW5nIHRydWUpIHRoZSB1c2VyIG1heSBzZXQgJ2F1dG9uZXQnIGhlcmUgbm9uLXplcm8gdG8gaGF2ZSB0aGUKKwkgKiBiZWluZyB0cnVlKSB0aGUgdXNlciBtYXkgc2V0ICdhdXRvbmVnJyBoZXJlIG5vbi16ZXJvIHRvIGhhdmUgdGhlCiAJICogcGF1c2UgcGFyYW1ldGVycyBiZSBhdXRvLW5lZ290aWF0ZWQgdG9vLiAgSW4gc3VjaCBhIGNhc2UsIHRoZQogCSAqIHtyeCx0eH1fcGF1c2UgdmFsdWVzIGJlbG93IGRldGVybWluZSB3aGF0IGNhcGFiaWxpdGllcyBhcmUKIAkgKiBhZHZlcnRpc2VkLgpAQCAtODExLDcgKzgxMSw3IEBACiAgKiBAZ2V0X3R4X2NzdW06IERlcHJlY2F0ZWQgYXMgcmVkdW5kYW50LiBSZXBvcnQgd2hldGhlciB0cmFuc21pdCBjaGVja3N1bXMKICAqCWFyZSB0dXJuZWQgb24gb3Igb2ZmLgogICogQHNldF90eF9jc3VtOiBEZXByZWNhdGVkIGluIGZhdm91ciBvZiBnZW5lcmljIG5ldGRldiBmZWF0dXJlcy4gIFR1cm4KLSAqCXRyYW5zbWl0IGNoZWNrc3VtcyBvbiBvciBvZmYuICBSZXR1cm5zIGEgZWdhdGl2ZSBlcnJvciBjb2RlIG9yIHplcm8uCisgKgl0cmFuc21pdCBjaGVja3N1bXMgb24gb3Igb2ZmLiAgUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KICAqIEBnZXRfc2c6IERlcHJlY2F0ZWQgYXMgcmVkdW5kYW50LiAgUmVwb3J0IHdoZXRoZXIgc2NhdHRlci1nYXRoZXIgaXMKICAqCWVuYWJsZWQuICAKICAqIEBzZXRfc2c6IERlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGdlbmVyaWMgbmV0ZGV2IGZlYXR1cmVzLiAgVHVybgpAQCAtMTA4Nyw3ICsxMDg3LDcgQEAKIC8qIFRoZSBmb2xsb3dpbmcgYXJlIGFsbCBpbnZvbHZlZCBpbiBmb3JjaW5nIGEgcGFydGljdWxhciBsaW5rCiAgKiBtb2RlIGZvciB0aGUgZGV2aWNlIGZvciBzZXR0aW5nIHRoaW5ncy4gIFdoZW4gZ2V0dGluZyB0aGUKICAqIGRldmljZXMgc2V0dGluZ3MsIHRoZXNlIGluZGljYXRlIHRoZSBjdXJyZW50IG1vZGUgYW5kIHdoZXRoZXIKLSAqIGl0IHdhcyBmb2NlZCB1cCBpbnRvIHRoaXMgbW9kZSBvciBhdXRvbmVnb3RpYXRlZC4KKyAqIGl0IHdhcyBmb3JjZWQgdXAgaW50byB0aGlzIG1vZGUgb3IgYXV0b25lZ290aWF0ZWQuCiAgKi8KIAogLyogVGhlIGZvcmNlZCBzcGVlZCwgMTBNYiwgMTAwTWIsIGdpZ2FiaXQsIDIuNUdiLCAxMEdiRS4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCBjNTVkNmI3Li4xYzc3Nzg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0yMDgsNiArMjA4LDcgQEAKICNkZWZpbmUgTVNfS0VSTk1PVU5UCSgxPDwyMikgLyogdGhpcyBpcyBhIGtlcm5fbW91bnQgY2FsbCAqLwogI2RlZmluZSBNU19JX1ZFUlNJT04JKDE8PDIzKSAvKiBVcGRhdGUgaW5vZGUgSV92ZXJzaW9uIGZpZWxkICovCiAjZGVmaW5lIE1TX1NUUklDVEFUSU1FCSgxPDwyNCkgLyogQWx3YXlzIHBlcmZvcm0gYXRpbWUgdXBkYXRlcyAqLworI2RlZmluZSBNU19OT1NFQwkoMTw8MjgpCiAjZGVmaW5lIE1TX0JPUk4JCSgxPDwyOSkKICNkZWZpbmUgTVNfQUNUSVZFCSgxPDwzMCkKICNkZWZpbmUgTVNfTk9VU0VSCSgxPDwzMSkKQEAgLTc0Myw5ICs3NDQsMTMgQEAKIAogCXNwaW5sb2NrX3QJCWlfbG9jazsJLyogaV9ibG9ja3MsIGlfYnl0ZXMsIG1heWJlIGlfc2l6ZSAqLwogCXVuc2lnbmVkIGludAkJaV9mbGFnczsKKwl1bnNpZ25lZCBpbnQJCWlfc3RhdGU7CisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCisJdm9pZAkJCSppX3NlY3VyaXR5OworI2VuZGlmCiAJc3RydWN0IG11dGV4CQlpX211dGV4OwogCi0JdW5zaWduZWQgbG9uZwkJaV9zdGF0ZTsKKwogCXVuc2lnbmVkIGxvbmcJCWRpcnRpZWRfd2hlbjsJLyogamlmZmllcyBvZiBmaXJzdCBkaXJ0eWluZyAqLwogCiAJc3RydWN0IGhsaXN0X25vZGUJaV9oYXNoOwpAQCAtNzk3LDkgKzgwMiw2IEBACiAJYXRvbWljX3QJCWlfcmVhZGNvdW50OyAvKiBzdHJ1Y3QgZmlsZXMgb3BlbiBSTyAqLwogI2VuZGlmCiAJYXRvbWljX3QJCWlfd3JpdGVjb3VudDsKLSNpZmRlZiBDT05GSUdfU0VDVVJJVFkKLQl2b2lkCQkJKmlfc2VjdXJpdHk7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCiAJc3RydWN0IHBvc2l4X2FjbAkqaV9hY2w7CiAJc3RydWN0IHBvc2l4X2FjbAkqaV9kZWZhdWx0X2FjbDsKQEAgLTI1OTEsNyArMjU5Myw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbm9kZV9oYXNfbm9feGF0dHIoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpZiAoIWlzX3N4aWQoaW5vZGUtPmlfbW9kZSkpCisJaWYgKCFpc19zeGlkKGlub2RlLT5pX21vZGUpICYmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX05PU0VDKSkKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1NFQzsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCmluZGV4IGI3ODk1NmIuLjMwMGQ3NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKQEAgLTEwMCw2ICsxMDAsNyBAQAogCXNlY3Rvcl90IHN0YXJ0X3NlY3Q7CiAJc2VjdG9yX3QgbnJfc2VjdHM7CiAJc2VjdG9yX3QgYWxpZ25tZW50X29mZnNldDsKKwl1bnNpZ25lZCBpbnQgZGlzY2FyZF9hbGlnbm1lbnQ7CiAJc3RydWN0IGRldmljZSBfX2RldjsKIAlzdHJ1Y3Qga29iamVjdCAqaG9sZGVyX2RpcjsKIAlpbnQgcG9saWN5LCBwYXJ0bm87CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy9hZHA4ODcwLmggYi9pbmNsdWRlL2xpbnV4L2kyYy9hZHA4ODcwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI0ZGNlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL2FkcDg4NzAuaApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIERlZmluaXRpb25zIGFuZCBwbGF0Zm9ybSBkYXRhIGZvciBBbmFsb2cgRGV2aWNlcworICogQmFja2xpZ2h0IGRyaXZlcnMgQURQODg3MAorICoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfSTJDX0FEUDg4NzBfSAorI2RlZmluZSBfX0xJTlVYX0kyQ19BRFA4ODcwX0gKKworI2RlZmluZSBJRF9BRFA4ODcwCQk4ODcwCisKKyNkZWZpbmUgQURQODg3MF9NQVhfQlJJR0hUTkVTUwkweDdGCisjZGVmaW5lIEZMQUdfT0ZGVF9TSElGVCA4CisKKy8qCisgKiBMRURzIHN1YmRldmljZSBwbGF0Zm9ybSBkYXRhCisgKi8KKworI2RlZmluZSBBRFA4ODcwX0xFRF9ESVNfQkxJTksJKDAgPDwgRkxBR19PRkZUX1NISUZUKQorI2RlZmluZSBBRFA4ODcwX0xFRF9PRkZUXzYwMG1zCSgxIDw8IEZMQUdfT0ZGVF9TSElGVCkKKyNkZWZpbmUgQURQODg3MF9MRURfT0ZGVF8xMjAwbXMJKDIgPDwgRkxBR19PRkZUX1NISUZUKQorI2RlZmluZSBBRFA4ODcwX0xFRF9PRkZUXzE4MDBtcwkoMyA8PCBGTEFHX09GRlRfU0hJRlQpCisKKyNkZWZpbmUgQURQODg3MF9MRURfT05UXzIwMG1zCTAKKyNkZWZpbmUgQURQODg3MF9MRURfT05UXzYwMG1zCTEKKyNkZWZpbmUgQURQODg3MF9MRURfT05UXzgwMG1zCTIKKyNkZWZpbmUgQURQODg3MF9MRURfT05UXzEyMDBtcwkzCisKKyNkZWZpbmUgQURQODg3MF9MRURfRDcJCSg3KQorI2RlZmluZSBBRFA4ODcwX0xFRF9ENgkJKDYpCisjZGVmaW5lIEFEUDg4NzBfTEVEX0Q1CQkoNSkKKyNkZWZpbmUgQURQODg3MF9MRURfRDQJCSg0KQorI2RlZmluZSBBRFA4ODcwX0xFRF9EMwkJKDMpCisjZGVmaW5lIEFEUDg4NzBfTEVEX0QyCQkoMikKKyNkZWZpbmUgQURQODg3MF9MRURfRDEJCSgxKQorCisvKgorICogQmFja2xpZ2h0IHN1YmRldmljZSBwbGF0Zm9ybSBkYXRhCisgKi8KKworI2RlZmluZSBBRFA4ODcwX0JMX0Q3CQkoMSA8PCA2KQorI2RlZmluZSBBRFA4ODcwX0JMX0Q2CQkoMSA8PCA1KQorI2RlZmluZSBBRFA4ODcwX0JMX0Q1CQkoMSA8PCA0KQorI2RlZmluZSBBRFA4ODcwX0JMX0Q0CQkoMSA8PCAzKQorI2RlZmluZSBBRFA4ODcwX0JMX0QzCQkoMSA8PCAyKQorI2RlZmluZSBBRFA4ODcwX0JMX0QyCQkoMSA8PCAxKQorI2RlZmluZSBBRFA4ODcwX0JMX0QxCQkoMSA8PCAwKQorCisjZGVmaW5lIEFEUDg4NzBfRkFERV9UX0RJUwkwCS8qIEZhZGUgVGltZXIgRGlzYWJsZWQgKi8KKyNkZWZpbmUgQURQODg3MF9GQURFX1RfMzAwbXMJMQkvKiAwLjMgU2VjICovCisjZGVmaW5lIEFEUDg4NzBfRkFERV9UXzYwMG1zCTIKKyNkZWZpbmUgQURQODg3MF9GQURFX1RfOTAwbXMJMworI2RlZmluZSBBRFA4ODcwX0ZBREVfVF8xMjAwbXMJNAorI2RlZmluZSBBRFA4ODcwX0ZBREVfVF8xNTAwbXMJNQorI2RlZmluZSBBRFA4ODcwX0ZBREVfVF8xODAwbXMJNgorI2RlZmluZSBBRFA4ODcwX0ZBREVfVF8yMTAwbXMJNworI2RlZmluZSBBRFA4ODcwX0ZBREVfVF8yNDAwbXMJOAorI2RlZmluZSBBRFA4ODcwX0ZBREVfVF8yNzAwbXMJOQorI2RlZmluZSBBRFA4ODcwX0ZBREVfVF8zMDAwbXMJMTAKKyNkZWZpbmUgQURQODg3MF9GQURFX1RfMzUwMG1zCTExCisjZGVmaW5lIEFEUDg4NzBfRkFERV9UXzQwMDBtcwkxMgorI2RlZmluZSBBRFA4ODcwX0ZBREVfVF80NTAwbXMJMTMKKyNkZWZpbmUgQURQODg3MF9GQURFX1RfNTAwMG1zCTE0CisjZGVmaW5lIEFEUDg4NzBfRkFERV9UXzU1MDBtcwkxNQkvKiA1LjUgU2VjICovCisKKyNkZWZpbmUgQURQODg3MF9GQURFX0xBV19MSU5FQVIJMAorI2RlZmluZSBBRFA4ODcwX0ZBREVfTEFXX1NRVUFSRQkxCisjZGVmaW5lIEFEUDg4NzBfRkFERV9MQVdfQ1VCSUMxCTIKKyNkZWZpbmUgQURQODg3MF9GQURFX0xBV19DVUJJQzIJMworCisjZGVmaW5lIEFEUDg4NzBfQkxfQU1CTF9GSUxUXzgwbXMJMAkvKiBMaWdodCBzZW5zb3IgZmlsdGVyIHRpbWUgKi8KKyNkZWZpbmUgQURQODg3MF9CTF9BTUJMX0ZJTFRfMTYwbXMJMQorI2RlZmluZSBBRFA4ODcwX0JMX0FNQkxfRklMVF8zMjBtcwkyCisjZGVmaW5lIEFEUDg4NzBfQkxfQU1CTF9GSUxUXzY0MG1zCTMKKyNkZWZpbmUgQURQODg3MF9CTF9BTUJMX0ZJTFRfMTI4MG1zCTQKKyNkZWZpbmUgQURQODg3MF9CTF9BTUJMX0ZJTFRfMjU2MG1zCTUKKyNkZWZpbmUgQURQODg3MF9CTF9BTUJMX0ZJTFRfNTEyMG1zCTYKKyNkZWZpbmUgQURQODg3MF9CTF9BTUJMX0ZJTFRfMTAyNDBtcwk3CS8qIDEwLjI0IHNlYyAqLworCisvKgorICogQmxhY2tsaWdodCBjdXJyZW50IDAuLjMwbUEKKyAqLworI2RlZmluZSBBRFA4ODcwX0JMX0NVUl9tQShJKQkJKChJICogMTI3KSAvIDMwKQorCisvKgorICogTDIgY29tcGFyYXRvciBjdXJyZW50IDAuLjExMDZ1QQorICovCisjZGVmaW5lIEFEUDg4NzBfTDJfQ09NUF9DVVJSX3VBKEkpCSgoSSAqIDI1NSkgLyAxMTA2KQorCisvKgorICogTDMgY29tcGFyYXRvciBjdXJyZW50IDAuLjU1MXVBCisgKi8KKyNkZWZpbmUgQURQODg3MF9MM19DT01QX0NVUlJfdUEoSSkJKChJICogMjU1KSAvIDU1MSkKKworLyoKKyAqIEw0IGNvbXBhcmF0b3IgY3VycmVudCAwLi4yNzV1QQorICovCisjZGVmaW5lIEFEUDg4NzBfTDRfQ09NUF9DVVJSX3VBKEkpCSgoSSAqIDI1NSkgLyAyNzUpCisKKy8qCisgKiBMNSBjb21wYXJhdG9yIGN1cnJlbnQgMC4uMTM4dUEKKyAqLworI2RlZmluZSBBRFA4ODcwX0w1X0NPTVBfQ1VSUl91QShJKQkoKEkgKiAyNTUpIC8gMTM4KQorCitzdHJ1Y3QgYWRwODg3MF9iYWNrbGlnaHRfcGxhdGZvcm1fZGF0YSB7CisJdTggYmxfbGVkX2Fzc2lnbjsJLyogMSA9IEJhY2tsaWdodCAwID0gSW5kaXZpZHVhbCBMRUQgKi8KKwl1OCBwd21fYXNzaWduOwkJLyogMSA9IEVuYWJsZXMgUFdNIG1vZGUgKi8KKworCXU4IGJsX2ZhZGVfaW47CQkvKiBCYWNrbGlnaHQgRmFkZS1JbiBUaW1lciAqLworCXU4IGJsX2ZhZGVfb3V0OwkJLyogQmFja2xpZ2h0IEZhZGUtT3V0IFRpbWVyICovCisJdTggYmxfZmFkZV9sYXc7CQkvKiBmYWRlLW9uL2ZhZGUtb2ZmIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljICovCisKKwl1OCBlbl9hbWJsX3NlbnM7CS8qIDEgPSBlbmFibGUgYW1iaWVudCBsaWdodCBzZW5zb3IgKi8KKwl1OCBhYm1sX2ZpbHQ7CQkvKiBMaWdodCBzZW5zb3IgZmlsdGVyIHRpbWUgKi8KKworCXU4IGwxX2RheWxpZ2h0X21heDsJLyogdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwl1OCBsMV9kYXlsaWdodF9kaW07CS8qIHR5cCA9IDAsIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisJdTggbDJfYnJpZ2h0X21heDsJLyogdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwl1OCBsMl9icmlnaHRfZGltOwkvKiB0eXAgPSAwLCB1c2UgQkxfQ1VSX21BKEkpIDAgPD0gSSA8PSAzMCBtQSAqLworCXU4IGwzX29mZmljZV9tYXg7CS8qIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisJdTggbDNfb2ZmaWNlX2RpbTsJLyogdHlwID0gMCwgdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwl1OCBsNF9pbmRvb3JfbWF4OwkvKiB1c2UgQkxfQ1VSX21BKEkpIDAgPD0gSSA8PSAzMCBtQSAqLworCXU4IGw0X2luZG9yX2RpbTsJLyogdHlwID0gMCwgdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwl1OCBsNV9kYXJrX21heDsJCS8qIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisJdTggbDVfZGFya19kaW07CQkvKiB0eXAgPSAwLCB1c2UgQkxfQ1VSX21BKEkpIDAgPD0gSSA8PSAzMCBtQSAqLworCisJdTggbDJfdHJpcDsJCS8qIHVzZSBMMl9DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDExMDYgdUEgKi8KKwl1OCBsMl9oeXN0OwkJLyogdXNlIEwyX0NPTVBfQ1VSUl91QShJKSAwIDw9IEkgPD0gMTEwNiB1QSAqLworCXU4IGwzX3RyaXA7CQkvKiB1c2UgTDNfQ09NUF9DVVJSX3VBKEkpIDAgPD0gSSA8PSA1NTEgdUEgKi8KKwl1OCBsM19oeXN0OwkJLyogdXNlIEwzX0NPTVBfQ1VSUl91QShJKSAwIDw9IEkgPD0gNTUxIHVBICovCisJdTggbDRfdHJpcDsJCS8qIHVzZSBMNF9DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDI3NSB1QSAqLworCXU4IGw0X2h5c3Q7CQkvKiB1c2UgTDRfQ09NUF9DVVJSX3VBKEkpIDAgPD0gSSA8PSAyNzUgdUEgKi8KKwl1OCBsNV90cmlwOwkJLyogdXNlIEw1X0NPTVBfQ1VSUl91QShJKSAwIDw9IEkgPD0gMTM4IHVBICovCisJdTggbDVfaHlzdDsJCS8qIHVzZSBMNl9DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDEzOCB1QSAqLworCisJLyoqCisJICogSW5kZXBlbmRlbnQgQ3VycmVudCBTaW5rcyAvIExFRFMKKwkgKiBTaW5rcyBub3QgYXNzaWduZWQgdG8gdGhlIEJhY2tsaWdodCBjYW4gYmUgZXhwb3NlZCB0bworCSAqIHVzZXIgc3BhY2UgdXNpbmcgdGhlIExFRFMgQ0xBU1MgaW50ZXJmYWNlCisJICovCisKKwlpbnQgbnVtX2xlZHM7CisJc3RydWN0IGxlZF9pbmZvCSpsZWRzOworCXU4IGxlZF9mYWRlX2luOwkJLyogTEVEIEZhZGUtSW4gVGltZXIgKi8KKwl1OCBsZWRfZmFkZV9vdXQ7CS8qIExFRCBGYWRlLU91dCBUaW1lciAqLworCXU4IGxlZF9mYWRlX2xhdzsJLyogZmFkZS1vbi9mYWRlLW9mZiB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpYyAqLworCXU4IGxlZF9vbl90aW1lOworfTsKKworI2VuZGlmIC8qIF9fTElOVVhfSTJDX0FEUDg4NzBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKaW5kZXggYjJlZWU1OC4uYmY1NmI2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCkBAIC0xMDAzLDggKzEwMDMsMTIgQEAKICNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0VTUwkJKDE8PDApCiAjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9JQlNTCQkoMTw8MSkKIAotLyogQSBtZXNoIFNUQSBzZXRzIHRoZSBFU1MgYW5kIElCU1MgY2FwYWJpbGl0eSBiaXRzIHRvIHplcm8gKi8KLSNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0lTX01CU1MoY2FwKQlcCisvKgorICogQSBtZXNoIFNUQSBzZXRzIHRoZSBFU1MgYW5kIElCU1MgY2FwYWJpbGl0eSBiaXRzIHRvIHplcm8uCisgKiBob3dldmVyLCB0aGlzIGhvbGRzIHRydWUgZm9yIHAycCBwcm9iZSByZXNwb25zZXMgKGluIHRoZSBwMnBfZmluZAorICogcGhhc2UpIGFzIHdlbGwuCisgKi8KKyNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0lTX1NUQV9CU1MoY2FwKQlcCiAJKCEoKGNhcCkgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkpCiAKICNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0NGX1BPTExBQkxFCSgxPDwyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCBiL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKaW5kZXggNzJiZmE1YS4uN2IzMTg2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oCkBAIC02Miw2ICs2Miw3IEBACiAJX191MTYJCXRwX21hYzsKIAlfX3UxNgkJdHBfbmV0OwogCV9fdTE2CQl0cF92bGFuX3RjaTsKKwlfX3UxNgkJdHBfcGFkZGluZzsKIH07CiAKIC8qIFJ4IHJpbmcgLSBoZWFkZXIgc3RhdHVzICovCkBAIC03MCw2ICs3MSw3IEBACiAjZGVmaW5lIFRQX1NUQVRVU19DT1BZCQkweDIKICNkZWZpbmUgVFBfU1RBVFVTX0xPU0lORwkweDQKICNkZWZpbmUgVFBfU1RBVFVTX0NTVU1OT1RSRUFEWQkweDgKKyNkZWZpbmUgVFBfU1RBVFVTX1ZMQU5fVkFMSUQgICAweDEwIC8qIGF1eGRhdGEgaGFzIHZhbGlkIHRwX3ZsYW5fdGNpICovCiAKIC8qIFR4IHJpbmcgLSBoZWFkZXIgc3RhdHVzICovCiAjZGVmaW5lIFRQX1NUQVRVU19BVkFJTEFCTEUJMHgwCkBAIC0xMDAsNiArMTAyLDcgQEAKIAlfX3UzMgkJdHBfc2VjOwogCV9fdTMyCQl0cF9uc2VjOwogCV9fdTE2CQl0cF92bGFuX3RjaTsKKwlfX3UxNgkJdHBfcGFkZGluZzsKIH07CiAKICNkZWZpbmUgVFBBQ0tFVDJfSERSTEVOCQkoVFBBQ0tFVF9BTElHTihzaXplb2Yoc3RydWN0IHRwYWNrZXQyX2hkcikpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCmluZGV4IGRjMDE2ODEuLmFmZmEyNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCkBAIC0yMjUsNyArMjI1LDcgQEAKIH0KIAogLyoqCi0gKiBfX3ZsYW5fcHV0X3RhZyAtIHJlZ3VsYXIgVkxBTiB0YWcgaW5zZXJ0aW5nCisgKiB2bGFuX2luc2VydF90YWcgLSByZWd1bGFyIFZMQU4gdGFnIGluc2VydGluZwogICogQHNrYjogc2tidWZmIHRvIHRhZwogICogQHZsYW5fdGNpOiBWTEFOIFRDSSB0byBpbnNlcnQKICAqCkBAIC0yMzQsOCArMjM0LDEwIEBACiAgKgogICogRm9sbG93aW5nIHRoZSBza2JfdW5zaGFyZSgpIGV4YW1wbGUsIGluIGNhc2Ugb2YgZXJyb3IsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCiAgKiBkb2Vzbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZnJlZWluZyB0aGUgb3JpZ2luYWwgc2tiLgorICoKKyAqIERvZXMgbm90IGNoYW5nZSBza2ItPnByb3RvY29sIHNvIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZHVyaW5nIHJlY2VpdmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fdmxhbl9wdXRfdGFnKHN0cnVjdCBza19idWZmICpza2IsIHUxNiB2bGFuX3RjaSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmxhbl90Y2kpCiB7CiAJc3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoOwogCkBAIC0yNTUsOCArMjU3LDI1IEBACiAJLyogbm93LCB0aGUgVENJICovCiAJdmV0aC0+aF92bGFuX1RDSSA9IGh0b25zKHZsYW5fdGNpKTsKIAotCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDIxUSk7CisJcmV0dXJuIHNrYjsKK30KIAorLyoqCisgKiBfX3ZsYW5fcHV0X3RhZyAtIHJlZ3VsYXIgVkxBTiB0YWcgaW5zZXJ0aW5nCisgKiBAc2tiOiBza2J1ZmYgdG8gdGFnCisgKiBAdmxhbl90Y2k6IFZMQU4gVENJIHRvIGluc2VydAorICoKKyAqIEluc2VydHMgdGhlIFZMQU4gdGFnIGludG8gQHNrYiBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkCisgKiBSZXR1cm5zIGEgVkxBTiB0YWdnZWQgc2tiLiBJZiBhIG5ldyBza2IgaXMgY3JlYXRlZCwgQHNrYiBpcyBmcmVlZC4KKyAqCisgKiBGb2xsb3dpbmcgdGhlIHNrYl91bnNoYXJlKCkgZXhhbXBsZSwgaW4gY2FzZSBvZiBlcnJvciwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAqIGRvZXNuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBmcmVlaW5nIHRoZSBvcmlnaW5hbCBza2IuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fdmxhbl9wdXRfdGFnKHN0cnVjdCBza19idWZmICpza2IsIHUxNiB2bGFuX3RjaSkKK3sKKwlza2IgPSB2bGFuX2luc2VydF90YWcoc2tiLCB2bGFuX3RjaSk7CisJaWYgKHNrYikKKwkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMjFRKTsKIAlyZXR1cm4gc2tiOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oIGIvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaAppbmRleCA4MTlhY2FhLi43MTRiYTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKQEAgLTgsOSArOCw5IEBACiAgKiBASVJRX1dBS0VfVEhSRUFECWhhbmRsZXIgcmVxdWVzdHMgdG8gd2FrZSB0aGUgaGFuZGxlciB0aHJlYWQKICAqLwogZW51bSBpcnFyZXR1cm4gewotCUlSUV9OT05FLAotCUlSUV9IQU5ETEVELAotCUlSUV9XQUtFX1RIUkVBRCwKKwlJUlFfTk9ORQkJPSAoMCA8PCAwKSwKKwlJUlFfSEFORExFRAkJPSAoMSA8PCAwKSwKKwlJUlFfV0FLRV9USFJFQUQJCT0gKDEgPDwgMSksCiB9OwogCiB0eXBlZGVmIGVudW0gaXJxcmV0dXJuIGlycXJldHVybl90OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggZmIwZTczMi4uOTUzMzUyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC02NzEsOCArNjcxLDggQEAKIAogI2lmZGVmIF9fQ0hFQ0tFUl9fCiAjZGVmaW5lIEJVSUxEX0JVR19PTl9OT1RfUE9XRVJfT0ZfMihuKQotI2RlZmluZSBCVUlMRF9CVUdfT05fWkVSTyhlKQotI2RlZmluZSBCVUlMRF9CVUdfT05fTlVMTChlKQorI2RlZmluZSBCVUlMRF9CVUdfT05fWkVSTyhlKSAoMCkKKyNkZWZpbmUgQlVJTERfQlVHX09OX05VTEwoZSkgKCh2b2lkKikwKQogI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKQogI2Vsc2UgLyogX19DSEVDS0VSX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbXNnX2R1bXAuaCBiL2luY2x1ZGUvbGludXgva21zZ19kdW1wLmgKaW5kZXggMmEwZDdkNi4uZWUwYzk1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbXNnX2R1bXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ttc2dfZHVtcC5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaWZuZGVmIF9MSU5VWF9LTVNHX0RVTVBfSAogI2RlZmluZSBfTElOVVhfS01TR19EVU1QX0gKIAorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiBlbnVtIGttc2dfZHVtcF9yZWFzb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rb2JqZWN0X25zLmggYi9pbmNsdWRlL2xpbnV4L2tvYmplY3RfbnMuaAppbmRleCA4MmNiNWJmLi5mNjZiMDY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tvYmplY3RfbnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tvYmplY3RfbnMuaApAQCAtMzIsMTUgKzMyLDE3IEBACiAKIC8qCiAgKiBDYWxsYmFja3Mgc28gc3lzZnMgY2FuIGRldGVybWluZSBuYW1lc3BhY2VzCi0gKiAgIEBjdXJyZW50X25zOiByZXR1cm4gY2FsbGluZyB0YXNrJ3MgbmFtZXNwYWNlCisgKiAgIEBncmFiX2N1cnJlbnRfbnM6IHJldHVybiBhIG5ldyByZWZlcmVuY2UgdG8gY2FsbGluZyB0YXNrJ3MgbmFtZXNwYWNlCiAgKiAgIEBuZXRsaW5rX25zOiByZXR1cm4gbmFtZXNwYWNlIHRvIHdoaWNoIGEgc29jayBiZWxvbmdzIChyaWdodD8pCiAgKiAgIEBpbml0aWFsX25zOiByZXR1cm4gdGhlIGluaXRpYWwgbmFtZXNwYWNlIChpLmUuIGluaXRfbmV0X25zKQorICogICBAZHJvcF9uczogZHJvcHMgYSByZWZlcmVuY2UgdG8gbmFtZXNwYWNlCiAgKi8KIHN0cnVjdCBrb2JqX25zX3R5cGVfb3BlcmF0aW9ucyB7CiAJZW51bSBrb2JqX25zX3R5cGUgdHlwZTsKLQljb25zdCB2b2lkICooKmN1cnJlbnRfbnMpKHZvaWQpOworCXZvaWQgKigqZ3JhYl9jdXJyZW50X25zKSh2b2lkKTsKIAljb25zdCB2b2lkICooKm5ldGxpbmtfbnMpKHN0cnVjdCBzb2NrICpzayk7CiAJY29uc3Qgdm9pZCAqKCppbml0aWFsX25zKSh2b2lkKTsKKwl2b2lkICgqZHJvcF9ucykodm9pZCAqKTsKIH07CiAKIGludCBrb2JqX25zX3R5cGVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGtvYmpfbnNfdHlwZV9vcGVyYXRpb25zICpvcHMpOwpAQCAtNDgsOSArNTAsOSBAQAogY29uc3Qgc3RydWN0IGtvYmpfbnNfdHlwZV9vcGVyYXRpb25zICprb2JqX2NoaWxkX25zX29wcyhzdHJ1Y3Qga29iamVjdCAqcGFyZW50KTsKIGNvbnN0IHN0cnVjdCBrb2JqX25zX3R5cGVfb3BlcmF0aW9ucyAqa29ial9uc19vcHMoc3RydWN0IGtvYmplY3QgKmtvYmopOwogCi1jb25zdCB2b2lkICprb2JqX25zX2N1cnJlbnQoZW51bSBrb2JqX25zX3R5cGUgdHlwZSk7Cit2b2lkICprb2JqX25zX2dyYWJfY3VycmVudChlbnVtIGtvYmpfbnNfdHlwZSB0eXBlKTsKIGNvbnN0IHZvaWQgKmtvYmpfbnNfbmV0bGluayhlbnVtIGtvYmpfbnNfdHlwZSB0eXBlLCBzdHJ1Y3Qgc29jayAqc2spOwogY29uc3Qgdm9pZCAqa29ial9uc19pbml0aWFsKGVudW0ga29ial9uc190eXBlIHR5cGUpOwotdm9pZCBrb2JqX25zX2V4aXQoZW51bSBrb2JqX25zX3R5cGUgdHlwZSwgY29uc3Qgdm9pZCAqbnMpOwordm9pZCBrb2JqX25zX2Ryb3AoZW51bSBrb2JqX25zX3R5cGUgdHlwZSwgdm9pZCAqbnMpOwogCiAjZW5kaWYgLyogX0xJTlVYX0tPQkpFQ1RfTlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA5NzI0YTM4Li41MDk0MGRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtODQsNiArODQsNyBAQAogCiBleHRlcm4gc3RydWN0IG1lbV9jZ3JvdXAgKnRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworZXh0ZXJuIHN0cnVjdCBtZW1fY2dyb3VwICp0cnlfZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKIHN0YXRpYyBpbmxpbmUKIGludCBtbV9tYXRjaF9jZ3JvdXAoY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICpjZ3JvdXApCkBAIC0yNDYsNiArMjQ3LDExIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgaW5saW5lIGludCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmggYi9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmgKaW5kZXggZDQwYmZhMS4uZTVmMjFkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvcGh5c21hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3BoeXNtYXAuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKIHN0cnVjdCBtYXBfaW5mbzsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7CiAKIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgewogCXVuc2lnbmVkIGludAkJd2lkdGg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCBjYTMzM2U3Li41NGI4YjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTI1NTUsNyArMjU1NSw3IEBACiAKIGV4dGVybiBzdHJ1Y3Qga29ial9uc190eXBlX29wZXJhdGlvbnMgbmV0X25zX3R5cGVfb3BlcmF0aW9uczsKIAotZXh0ZXJuIGNoYXIgKm5ldGRldl9kcml2ZXJuYW1lKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZmZlciwgaW50IGxlbik7CitleHRlcm4gY29uc3QgY2hhciAqbmV0ZGV2X2RyaXZlcm5hbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIGV4dGVybiB2b2lkIGxpbmt3YXRjaF9ydW5fcXVldWUodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaAppbmRleCA1MGNkYzI1Li4wZDNkZDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCkBAIC0xOCw2ICsxOCw5IEBACiAJLyogPj0gdGhpcyBpbmRpY2F0ZXMgcmVwbHkgZGlyZWN0aW9uICovCiAJSVBfQ1RfSVNfUkVQTFksCiAKKwlJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSA9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFksCisJSVBfQ1RfUkVMQVRFRF9SRVBMWSA9IElQX0NUX1JFTEFURUQgKyBJUF9DVF9JU19SRVBMWSwKKwlJUF9DVF9ORVdfUkVQTFkgPSBJUF9DVF9ORVcgKyBJUF9DVF9JU19SRVBMWSwJCiAJLyogTnVtYmVyIG9mIGRpc3RpbmN0IElQX0NUIHR5cGVzIChubyBORVcgaW4gcmVwbHkgZGlybikuICovCiAJSVBfQ1RfTlVNQkVSID0gSVBfQ1RfSVNfUkVQTFkgKiAyIC0gMQogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCmluZGV4IDhiOTczMDguLjljYTAwOGYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKQEAgLTI1OSw2ICsyNTksOSBAQAogICogU3BlY2lhbCBoYW5kbGluZyBmb3IgY21weGNoZ19kb3VibGUuICBjbXB4Y2hnX2RvdWJsZSBpcyBwYXNzZWQgdHdvCiAgKiBwZXJjcHUgdmFyaWFibGVzLiAgVGhlIGZpcnN0IGhhcyB0byBiZSBhbGlnbmVkIHRvIGEgZG91YmxlIHdvcmQKICAqIGJvdW5kYXJ5IGFuZCB0aGUgc2Vjb25kIGhhcyB0byBmb2xsb3cgZGlyZWN0bHkgdGhlcmVhZnRlci4KKyAqIFdlIGVuZm9yY2UgdGhpcyBvbiBhbGwgYXJjaGl0ZWN0dXJlcyBldmVuIGlmIHRoZXkgZG9uJ3Qgc3VwcG9ydAorICogYSBkb3VibGUgY21weGNoZyBpbnN0cnVjdGlvbiwgc2luY2UgaXQncyBhIGNoZWFwIHJlcXVpcmVtZW50LCBhbmQgaXQKKyAqIGF2b2lkcyBicmVha2luZyB0aGUgcmVxdWlyZW1lbnQgZm9yIGFyY2hpdGVjdHVyZXMgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24uCiAgKi8KICNkZWZpbmUgX19wY3B1X2RvdWJsZV9jYWxsX3JldHVybl9ib29sKHN0ZW0sIHBjcDEsIHBjcDIsIC4uLikJCVwKICh7CQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCAzNDEyNjg0Li5lMDc4NmUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMTM3LDE0ICsxMzcsMTQgQEAKICAqCiAgKiBzdHJ1Y3QgcmVhZF9mb3JtYXQgewogICoJeyB1NjQJCXZhbHVlOwotICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKLSAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVECisgKgkgIHsgdTY0CQl0aW1lX3J1bm5pbmc7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HCiAgKgkgIHsgdTY0CQlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKICAqCX0gJiYgIVBFUkZfRk9STUFUX0dST1VQCiAgKgogICoJeyB1NjQJCW5yOwotICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKLSAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVECisgKgkgIHsgdTY0CQl0aW1lX3J1bm5pbmc7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HCiAgKgkgIHsgdTY0CQl2YWx1ZTsKICAqCSAgICB7IHU2NAlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKICAqCSAgfQkJY250cltucl07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggMmE4NjIxYy4uYTgzN2IyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTA2Myw2ICsxMDYzLDcgQEAKICAqLwogI2RlZmluZSBXRl9TWU5DCQkweDAxCQkvKiB3YWtlciBnb2VzIHRvIHNsZWVwIGFmdGVyIHdha3VwICovCiAjZGVmaW5lIFdGX0ZPUksJCTB4MDIJCS8qIGNoaWxkIHdha2V1cCBhZnRlciBmb3JrICovCisjZGVmaW5lIFdGX01JR1JBVEVECTB4MDQJCS8qIGludGVybmFsIHVzZSwgdGFzayBnb3QgbWlncmF0ZWQgKi8KIAogI2RlZmluZSBFTlFVRVVFX1dBS0VVUAkJMQogI2RlZmluZSBFTlFVRVVFX0hFQUQJCTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKaW5kZXggZTk4MTE4OS4uYzZkYjlmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIHNlcXVlbmNlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggZThiNzhjZS4uYzBhNGYzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0xMjU2LDYgKzEyNTYsMTEgQEAKIAlza2ItPnRhaWwgKz0gbGVuOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X21hY19sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2ItPm1hY19sZW4gPSBza2ItPm5ldHdvcmtfaGVhZGVyIC0gc2tiLT5tYWNfaGVhZGVyOworfQorCiAjaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl90cmFuc3BvcnRfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDM4NGViNWYuLmU3MDU2NDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0zNTgsNiArMzU4LDcgQEAKIGV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0ICpzd2FwX3Rva2VuX21tOwogZXh0ZXJuIHZvaWQgZ3JhYl9zd2FwX3Rva2VuKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBfX3B1dF9zd2FwX3Rva2VuKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBkaXNhYmxlX3N3YXBfdG9rZW4oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIAogc3RhdGljIGlubGluZSBpbnQgaGFzX3N3YXBfdG9rZW4oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CkBAIC0zNzAsMTEgKzM3MSw2IEBACiAJCV9fcHV0X3N3YXBfdG9rZW4obW0pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9zd2FwX3Rva2VuKHZvaWQpCi17Ci0JcHV0X3N3YXBfdG9rZW4oc3dhcF90b2tlbl9tbSk7Ci19Ci0KICNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgogZXh0ZXJuIHZvaWQKIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGNhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCBzd3BfZW50cnlfdCBlbnQsIGJvb2wgc3dhcG91dCk7CkBAIC01MDAsNyArNDk2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfc3dhcF90b2tlbih2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfc3dhcF90b2tlbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oIGIvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKaW5kZXggOGMwZTM0OS4uNDQ1NzAyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogZXh0ZXJuIHZvaWQgc3dpb3RsYl9pbml0KGludCB2ZXJib3NlKTsKIGV4dGVybiB2b2lkIHN3aW90bGJfaW5pdF93aXRoX3RibChjaGFyICp0bGIsIHVuc2lnbmVkIGxvbmcgbnNsYWJzLCBpbnQgdmVyYm9zZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzd2lvbHRiX25yX3RibCh2b2lkKTsKIAogLyoKICAqIEVudW1lcmF0aW9uIGZvciBzeW5jIHRhcmdldHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzZnMuaCBiL2luY2x1ZGUvbGludXgvc3lzZnMuaAppbmRleCBjM2FjZGE2Li5lMjY5NmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCkBAIC0xNzcsOSArMTc3LDYgQEAKIHN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7CiB2b2lkIHN5c2ZzX3B1dChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7CiAKLS8qIENhbGxlZCB0byBjbGVhciBhIG5zIHRhZyB3aGVuIGl0IGlzIG5vIGxvbmdlciB2YWxpZCAqLwotdm9pZCBzeXNmc19leGl0X25zKGVudW0ga29ial9uc190eXBlIHR5cGUsIGNvbnN0IHZvaWQgKnRhZyk7Ci0KIGludCBfX211c3RfY2hlY2sgc3lzZnNfaW5pdCh2b2lkKTsKIAogI2Vsc2UgLyogQ09ORklHX1NZU0ZTICovCkBAIC0zMzgsMTAgKzMzNSw2IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzeXNmc19leGl0X25zKGludCB0eXBlLCBjb25zdCB2b2lkICp0YWcpCi17Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBzeXNmc19pbml0KHZvaWQpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKaW5kZXggYjkxYTQwZS4uZmM4MzliZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaApAQCAtNjAsNyArNjAsNyBAQAogICogKGluIHdoYXRldmVyIGFyY2ggc3BlY2lmaWMgbWVhc3VyZW1lbnQgdW5pdHMgcmV0dXJuZWQgYnkgbm9kZV9kaXN0YW5jZSgpKQogICogdGhlbiBzd2l0Y2ggb24gem9uZSByZWNsYWltIG9uIGJvb3QuCiAgKi8KLSNkZWZpbmUgUkVDTEFJTV9ESVNUQU5DRSAyMAorI2RlZmluZSBSRUNMQUlNX0RJU1RBTkNFIDMwCiAjZW5kaWYKICNpZm5kZWYgUEVOQUxUWV9GT1JfTk9ERV9XSVRIX0NQVVMKICNkZWZpbmUgUEVOQUxUWV9GT1JfTk9ERV9XSVRIX0NQVVMJKDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oIGIvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaAppbmRleCA1YjA3NzkyLi5mZjdkYzA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgKQEAgLTc2LDcgKzc2LDcgQEAKICAqIAl0dHkgZGV2aWNlLiAgSXQgaXMgc29sZWx5IHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgbGluZQogICogCWRpc2NpcGxpbmUgdG8gaGFuZGxlIHBvbGwgcmVxdWVzdHMuCiAgKgotICogdW5zaWduZWQgaW50ICgqcmVjZWl2ZV9idWYpKHN0cnVjdCB0dHlfc3RydWN0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLAorICogdm9pZAkoKnJlY2VpdmVfYnVmKShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKICAqIAkJICAgICAgIGNoYXIgKmZwLCBpbnQgY291bnQpOwogICoKICAqIAlUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgbG93LWxldmVsIHR0eSBkcml2ZXIgdG8gc2VuZApAQCAtODQsOCArODQsNyBAQAogICogCXByb2Nlc3NpbmcuICA8Y3A+IGlzIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIG9mIGlucHV0CiAgKiAJY2hhcmFjdGVyIHJlY2VpdmVkIGJ5IHRoZSBkZXZpY2UuICA8ZnA+IGlzIGEgcG9pbnRlciB0byBhCiAgKiAJcG9pbnRlciBvZiBmbGFnIGJ5dGVzIHdoaWNoIGluZGljYXRlIHdoZXRoZXIgYSBjaGFyYWN0ZXIgd2FzCi0gKiAJcmVjZWl2ZWQgd2l0aCBhIHBhcml0eSBlcnJvciwgZXRjLiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgYnl0ZXMKLSAqIAlyZWNlaXZlZC4KKyAqIAlyZWNlaXZlZCB3aXRoIGEgcGFyaXR5IGVycm9yLCBldGMuCiAgKiAKICAqIHZvaWQJKCp3cml0ZV93YWtldXApKHN0cnVjdCB0dHlfc3RydWN0ICopOwogICoKQEAgLTE0MSw4ICsxNDAsOCBAQAogCS8qCiAJICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgY2FsbGVkIGZyb20gYmVsb3cuCiAJICovCi0JdW5zaWduZWQgaW50ICgqcmVjZWl2ZV9idWYpKHN0cnVjdCB0dHlfc3RydWN0ICosCi0JCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCk7CisJdm9pZAkoKnJlY2VpdmVfYnVmKShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKKwkJCSAgICAgICBjaGFyICpmcCwgaW50IGNvdW50KTsKIAl2b2lkCSgqd3JpdGVfd2FrZXVwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKIAl2b2lkCSgqZGNkX2NoYW5nZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgdW5zaWduZWQgaW50LAogCQkJCXN0cnVjdCBwcHNfZXZlbnRfdGltZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCmluZGV4IDcxNjkzZDQuLjE3ZGYzNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaApAQCAtNjIsNyArNjIsOSBAQAogCVVTX0ZMQUcoTk9fUkVBRF9ESVNDX0lORk8sCTB4MDAwNDAwMDApCQlcCiAJCS8qIGNhbm5vdCBoYW5kbGUgUkVBRF9ESVNDX0lORk8gKi8JCVwKIAlVU19GTEFHKE5PX1JFQURfQ0FQQUNJVFlfMTYsCTB4MDAwODAwMDApCQlcCi0JCS8qIGNhbm5vdCBoYW5kbGUgUkVBRF9DQVBBQ0lUWV8xNiAqLworCQkvKiBjYW5ub3QgaGFuZGxlIFJFQURfQ0FQQUNJVFlfMTYgKi8JCVwKKwlVU19GTEFHKElOSVRJQUxfUkVBRDEwLAkweDAwMTAwMDAwKQkJCVwKKwkJLyogSW5pdGlhbCBSRUFEKDEwKSAoYW5kIG90aGVycykgbXVzdCBiZSByZXRyaWVkICovCiAKICNkZWZpbmUgVVNfRkxBRyhuYW1lLCB2YWx1ZSkJVVNfRkxfIyNuYW1lID0gdmFsdWUgLAogZW51bSB7IFVTX0RPX0FMTF9GTEFHUyB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91dHMuaCBiL2luY2x1ZGUvbGludXgvdXRzLmgKaW5kZXggNzNlYjFlZC4uNmRkYmQ4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91dHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3V0cy5oCkBAIC05LDcgKzksNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgVVRTX05PREVOQU1FCi0jZGVmaW5lIFVUU19OT0RFTkFNRSAiKG5vbmUpIgkvKiBzZXQgYnkgc2V0aG9zdG5hbWUoKSAqLworI2RlZmluZSBVVFNfTk9ERU5BTUUgQ09ORklHX0RFRkFVTFRfSE9TVE5BTUUgLyogc2V0IGJ5IHNldGhvc3RuYW1lKCkgKi8KICNlbmRpZgogCiAjaWZuZGVmIFVUU19ET01BSU5OQU1FCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW8uaAppbmRleCBhZmY1YjRmLi43MTA4ODU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvLmgKQEAgLTUxLDYgKzUxLDEzIEBACiAgKglUaGlzIHJlLWVuYWJsZXMgY2FsbGJhY2tzOyBpdCByZXR1cm5zICJmYWxzZSIgaWYgdGhlcmUgYXJlIHBlbmRpbmcKICAqCWJ1ZmZlcnMgaW4gdGhlIHF1ZXVlLCB0byBkZXRlY3QgYSBwb3NzaWJsZSByYWNlIGJldHdlZW4gdGhlIGRyaXZlcgogICoJY2hlY2tpbmcgZm9yIG1vcmUgd29yaywgYW5kIGVuYWJsaW5nIGNhbGxiYWNrcy4KKyAqIHZpcnRxdWV1ZV9lbmFibGVfY2JfZGVsYXllZDogcmVzdGFydCBjYWxsYmFja3MgYWZ0ZXIgZGlzYWJsZV9jYi4KKyAqCXZxOiB0aGUgc3RydWN0IHZpcnRxdWV1ZSB3ZSdyZSB0YWxraW5nIGFib3V0LgorICoJVGhpcyByZS1lbmFibGVzIGNhbGxiYWNrcyBidXQgaGludHMgdG8gdGhlIG90aGVyIHNpZGUgdG8gZGVsYXkKKyAqCWludGVycnVwdHMgdW50aWwgbW9zdCBvZiB0aGUgYXZhaWxhYmxlIGJ1ZmZlcnMgaGF2ZSBiZWVuIHByb2Nlc3NlZDsKKyAqCWl0IHJldHVybnMgImZhbHNlIiBpZiB0aGVyZSBhcmUgbWFueSBwZW5kaW5nIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlLAorICoJdG8gZGV0ZWN0IGEgcG9zc2libGUgcmFjZSBiZXR3ZWVuIHRoZSBkcml2ZXIgY2hlY2tpbmcgZm9yIG1vcmUgd29yaywKKyAqCWFuZCBlbmFibGluZyBjYWxsYmFja3MuCiAgKiB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWY6IGRldGFjaCBmaXJzdCB1bnVzZWQgYnVmZmVyCiAgKiAJdnE6IHRoZSBzdHJ1Y3QgdmlydHF1ZXVlIHdlJ3JlIHRhbGtpbmcgYWJvdXQuCiAgKiAJUmV0dXJucyBOVUxMIG9yIHRoZSAiZGF0YSIgdG9rZW4gaGFuZGVkIHRvIGFkZF9idWYKQEAgLTg2LDYgKzkzLDggQEAKIAogYm9vbCB2aXJ0cXVldWVfZW5hYmxlX2NiKHN0cnVjdCB2aXJ0cXVldWUgKnZxKTsKIAorYm9vbCB2aXJ0cXVldWVfZW5hYmxlX2NiX2RlbGF5ZWQoc3RydWN0IHZpcnRxdWV1ZSAqdnEpOworCiB2b2lkICp2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqdnEpOwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCmluZGV4IGU2OGI0MzliLi4yNzdjNGFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKQEAgLTEsNyArMSwzMCBAQAogI2lmbmRlZiBfTElOVVhfVklSVElPXzlQX0gKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT185UF9ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAotICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4gKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKaW5kZXggYTUwZWNkMS4uNjUyZGM4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaApAQCAtMSw3ICsxLDMwIEBACiAjaWZuZGVmIF9MSU5VWF9WSVJUSU9fQkFMTE9PTl9ICiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fQkFMTE9PTl9ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAotICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4gKi8KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCmluZGV4IDE2NzcyMGQuLmUwZWRiNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCkBAIC0xLDcgKzEsMzAgQEAKICNpZm5kZWYgX0xJTlVYX1ZJUlRJT19CTEtfSAogI2RlZmluZSBfTElOVVhfVklSVElPX0JMS19ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAotICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4gKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCmluZGV4IDgwMDYxN2IuLjM5Yzg4YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCkBAIC0xLDcgKzEsMzAgQEAKICNpZm5kZWYgX0xJTlVYX1ZJUlRJT19DT05GSUdfSAogI2RlZmluZSBfTElOVVhfVklSVElPX0NPTkZJR19ICiAvKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KLSAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisgKiBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJQk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLiAqLwogCiAvKiBWaXJ0aW8gZGV2aWNlcyB1c2UgYSBzdGFuZGFyZGl6ZWQgY29uZmlndXJhdGlvbiBzcGFjZSB0byBkZWZpbmUgdGhlaXIKICAqIGZlYXR1cmVzIGFuZCBwYXNzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24sIGJ1dCBlYWNoIGltcGxlbWVudGF0aW9uIGNhbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCmluZGV4IGU0ZDMzMzUuLmJkZjRiMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKQEAgLTUsNyArNSwzMSBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIC8qCiAgKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KLSAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCisgKiBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzOgorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIFJlZCBIYXQsIEluYy4sIDIwMDksIDIwMTAsIDIwMTEKICAqIENvcHlyaWdodCAoQykgQW1pdCBTaGFoIDxhbWl0LnNoYWhAcmVkaGF0LmNvbT4sIDIwMDksIDIwMTAsIDIwMTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2lkcy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9faWRzLmgKaW5kZXggMDY2NjBjMC4uODViYjBiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9faWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9faWRzLmgKQEAgLTUsNyArNSwyOSBAQAogICoKICAqIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KLSAqLworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJQk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLiAqLwogCiAjZGVmaW5lIFZJUlRJT19JRF9ORVQJCTEgLyogdmlydGlvIG5ldCAqLwogI2RlZmluZSBWSVJUSU9fSURfQkxPQ0sJCTIgLyogdmlydGlvIGJsb2NrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCmluZGV4IDA4NWU0MjIuLjEzNjA0MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCkBAIC0xLDcgKzEsMzAgQEAKICNpZm5kZWYgX0xJTlVYX1ZJUlRJT19ORVRfSAogI2RlZmluZSBfTElOVVhfVklSVElPX05FVF9ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAotICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4gKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19wY2kuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX3BjaS5oCmluZGV4IDlhM2Q3YzQuLmVhNjZmM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX3BjaS5oCkBAIC0xMSw2ICsxMSwyOSBAQAogICoKICAqIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIF9MSU5VWF9WSVJUSU9fUENJX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JpbmcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JpbmcuaAppbmRleCBlNGQxNDRiLi40YTMyY2I2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19yaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fcmluZy5oCkBAIC03LDYgKzcsMjkgQEAKICAqIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KICAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCiAgKiBDb3B5cmlnaHQgUnVzdHkgUnVzc2VsbCBJQk0gQ29ycG9yYXRpb24gMjAwNy4gKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCkBAIC0yOSw2ICs1MiwxMiBAQAogLyogV2Ugc3VwcG9ydCBpbmRpcmVjdCBidWZmZXIgZGVzY3JpcHRvcnMgKi8KICNkZWZpbmUgVklSVElPX1JJTkdfRl9JTkRJUkVDVF9ERVNDCTI4CiAKKy8qIFRoZSBHdWVzdCBwdWJsaXNoZXMgdGhlIHVzZWQgaW5kZXggZm9yIHdoaWNoIGl0IGV4cGVjdHMgYW4gaW50ZXJydXB0CisgKiBhdCB0aGUgZW5kIG9mIHRoZSBhdmFpbCByaW5nLiBIb3N0IHNob3VsZCBpZ25vcmUgdGhlIGF2YWlsLT5mbGFncyBmaWVsZC4gKi8KKy8qIFRoZSBIb3N0IHB1Ymxpc2hlcyB0aGUgYXZhaWwgaW5kZXggZm9yIHdoaWNoIGl0IGV4cGVjdHMgYSBraWNrCisgKiBhdCB0aGUgZW5kIG9mIHRoZSB1c2VkIHJpbmcuIEd1ZXN0IHNob3VsZCBpZ25vcmUgdGhlIHVzZWQtPmZsYWdzIGZpZWxkLiAqLworI2RlZmluZSBWSVJUSU9fUklOR19GX0VWRU5UX0lEWAkJMjkKKwogLyogVmlydGlvIHJpbmcgZGVzY3JpcHRvcnM6IDE2IGJ5dGVzLiAgVGhlc2UgY2FuIGNoYWluIHRvZ2V0aGVyIHZpYSAibmV4dCIuICovCiBzdHJ1Y3QgdnJpbmdfZGVzYyB7CiAJLyogQWRkcmVzcyAoZ3Vlc3QtcGh5c2ljYWwpLiAqLwpAQCAtODMsNiArMTEyLDcgQEAKICAqCV9fdTE2IGF2YWlsX2ZsYWdzOwogICoJX191MTYgYXZhaWxfaWR4OwogICoJX191MTYgYXZhaWxhYmxlW251bV07CisgKglfX3UxNiB1c2VkX2V2ZW50X2lkeDsKICAqCiAgKgkvLyBQYWRkaW5nIHRvIHRoZSBuZXh0IGFsaWduIGJvdW5kYXJ5LgogICoJY2hhciBwYWRbXTsKQEAgLTkxLDggKzEyMSwxNCBAQAogICoJX191MTYgdXNlZF9mbGFnczsKICAqCV9fdTE2IHVzZWRfaWR4OwogICoJc3RydWN0IHZyaW5nX3VzZWRfZWxlbSB1c2VkW251bV07CisgKglfX3UxNiBhdmFpbF9ldmVudF9pZHg7CiAgKiB9OwogICovCisvKiBXZSBwdWJsaXNoIHRoZSB1c2VkIGV2ZW50IGluZGV4IGF0IHRoZSBlbmQgb2YgdGhlIGF2YWlsYWJsZSByaW5nLCBhbmQgdmljZQorICogdmVyc2EuIFRoZXkgYXJlIGF0IHRoZSBlbmQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqLworI2RlZmluZSB2cmluZ191c2VkX2V2ZW50KHZyKSAoKHZyKS0+YXZhaWwtPnJpbmdbKHZyKS0+bnVtXSkKKyNkZWZpbmUgdnJpbmdfYXZhaWxfZXZlbnQodnIpICgqKF9fdTE2ICopJih2ciktPnVzZWQtPnJpbmdbKHZyKS0+bnVtXSkKKwogc3RhdGljIGlubGluZSB2b2lkIHZyaW5nX2luaXQoc3RydWN0IHZyaW5nICp2ciwgdW5zaWduZWQgaW50IG51bSwgdm9pZCAqcCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pCiB7CkBAIC0xMDcsNyArMTQzLDIxIEBACiB7CiAJcmV0dXJuICgoc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjKSAqIG51bSArIHNpemVvZihfX3UxNikgKiAoMiArIG51bSkKIAkJICsgYWxpZ24gLSAxKSAmIH4oYWxpZ24gLSAxKSkKLQkJKyBzaXplb2YoX191MTYpICogMiArIHNpemVvZihzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSAqIG51bTsKKwkJKyBzaXplb2YoX191MTYpICogMyArIHNpemVvZihzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSAqIG51bTsKK30KKworLyogVGhlIGZvbGxvd2luZyBpcyB1c2VkIHdpdGggVVNFRF9FVkVOVF9JRFggYW5kIEFWQUlMX0VWRU5UX0lEWCAqLworLyogQXNzdW1pbmcgYSBnaXZlbiBldmVudF9pZHggdmFsdWUgZnJvbSB0aGUgb3RoZXIgc2l6ZSwgaWYKKyAqIHdlIGhhdmUganVzdCBpbmNyZW1lbnRlZCBpbmRleCBmcm9tIG9sZCB0byBuZXdfaWR4LAorICogc2hvdWxkIHdlIHRyaWdnZXIgYW4gZXZlbnQ/ICovCitzdGF0aWMgaW5saW5lIGludCB2cmluZ19uZWVkX2V2ZW50KF9fdTE2IGV2ZW50X2lkeCwgX191MTYgbmV3X2lkeCwgX191MTYgb2xkKQoreworCS8qIE5vdGU6IFhlbiBoYXMgc2ltaWxhciBsb2dpYyBmb3Igbm90aWZpY2F0aW9uIGhvbGQtb2ZmCisJICogaW4gaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvL3JpbmcuaCB3aXRoIHJlcV9ldmVudCBhbmQgcmVxX3Byb2QKKwkgKiBjb3JyZXNwb25kaW5nIHRvIGV2ZW50X2lkeCArIDEgYW5kIG5ld19pZHggcmVzcGVjdGl2ZWx5LgorCSAqIE5vdGUgYWxzbyB0aGF0IHJlcV9ldmVudCBhbmQgcmVxX3Byb2QgaW4gWGVuIHN0YXJ0IGF0IDEsCisJICogZXZlbnQgaW5kZXhlcyBpbiB2aXJ0aW8gc3RhcnQgYXQgMC4gKi8KKwlyZXR1cm4gKF9fdTE2KShuZXdfaWR4IC0gZXZlbnRfaWR4IC0gMSkgPCAoX191MTYpKG5ld19pZHggLSBvbGQpOwogfQogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCmluZGV4IDkzZTk2ZmIuLmM3YzQwZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKQEAgLTEyOCw4ICsxMjgsOCBAQAogCXN0cnVjdCBtdXRleCAqbG9jazsKIH07CiAKLSNkZWZpbmUgbWVkaWFfZW50aXR5X3RvX3ZpZGVvX2RldmljZShlbnRpdHkpIFwKLQljb250YWluZXJfb2YoZW50aXR5LCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBlbnRpdHkpCisjZGVmaW5lIG1lZGlhX2VudGl0eV90b192aWRlb19kZXZpY2UoX19lKSBcCisJY29udGFpbmVyX29mKF9fZSwgc3RydWN0IHZpZGVvX2RldmljZSwgZW50aXR5KQogLyogZGV2IHRvIHZpZGVvLWRldmljZSAqLwogI2RlZmluZSB0b192aWRlb19kZXZpY2UoY2QpIGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgZGV2KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKaW5kZXggMmJmOWVkOS4uYWVmNDMwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaApAQCAtMzUsOCArMzUsMTEgQEAKICNkZWZpbmUgTkVUREVWX0hBU0hFTlRSSUVTICgxIDw8IE5FVERFVl9IQVNIQklUUykKIAogc3RydWN0IG5ldCB7CisJYXRvbWljX3QJCXBhc3NpdmU7CS8qIFRvIGRlY2lkZWQgd2hlbiB0aGUgbmV0d29yaworCQkJCQkJICogbmFtZXNwYWNlIHNob3VsZCBiZSBmcmVlZC4KKwkJCQkJCSAqLwogCWF0b21pY190CQljb3VudDsJCS8qIFRvIGRlY2lkZWQgd2hlbiB0aGUgbmV0d29yawotCQkJCQkJICogIG5hbWVzcGFjZSBzaG91bGQgYmUgZnJlZWQuCisJCQkJCQkgKiAgbmFtZXNwYWNlIHNob3VsZCBiZSBzaHV0IGRvd24uCiAJCQkJCQkgKi8KICNpZmRlZiBORVROU19SRUZDTlRfREVCVUcKIAlhdG9taWNfdAkJdXNlX2NvdW50OwkvKiBUbyB0cmFjayByZWZlcmVuY2VzIHdlCkBAIC0xNTQsNiArMTU3LDkgQEAKIHsKIAlyZXR1cm4gbmV0MSA9PSBuZXQyOwogfQorCitleHRlcm4gdm9pZCBuZXRfZHJvcF9ucyh2b2lkICopOworCiAjZWxzZQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmdldF9uZXQoc3RydWN0IG5ldCAqbmV0KQpAQCAtMTc1LDYgKzE4MSw4IEBACiB7CiAJcmV0dXJuIDE7CiB9CisKKyNkZWZpbmUgbmV0X2Ryb3BfbnMgTlVMTAogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmggYi9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaAppbmRleCAyYjQ0NzY0Li5kZDY4NDdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaApAQCAtMTA3LDYgKzEwNyw3IEBACiAJU0NUUF9DTURfVVBEQVRFX0lOSVRUQUcsIC8qIFVwZGF0ZSBwZWVyIGluaXR0YWcgKi8KIAlTQ1RQX0NNRF9TRU5EX01TRywJIC8qIFNlbmQgdGhlIHdob2xlIHVzZSBtZXNzYWdlICovCiAJU0NUUF9DTURfU0VORF9ORVhUX0FTQ09ORiwgLyogU2VuZCB0aGUgbmV4dCBBU0NPTkYgYWZ0ZXIgQUNLICovCisJU0NUUF9DTURfUFVSR0VfQVNDT05GX1FVRVVFLCAvKiBQdXJnZSBhbGwgYXNjb25mIHF1ZXVlcy4qLwogCVNDVFBfQ01EX0xBU1QKIH0gc2N0cF92ZXJiX3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKaW5kZXggNzk1ZjQ4OC4uN2RmMzI3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKQEAgLTE5OTMsNyArMTk5Myw3IEBACiBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9hc3NvY19sb29rdXBfYXNjb25mX2FjaygKIAkJCQkJY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQkJCV9fYmUzMiBzZXJpYWwpOwotCit2b2lkIHNjdHBfYXNjb25mX3F1ZXVlX3RlYXJkb3duKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTsKIAogaW50IHNjdHBfY21wX2FkZHJfZXhhY3QoY29uc3QgdW5pb24gc2N0cF9hZGRyICpzczEsCiAJCQljb25zdCB1bmlvbiBzY3RwX2FkZHIgKnNzMik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9uZXQuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL25ldC5oCmluZGV4IDVmMjQ3ZjVmLi5mOTk2NDVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9uZXQuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9uZXQuaApAQCAtMTIsMjIgKzEyLDI0IEBACiBUUkFDRV9FVkVOVChuZXRfZGV2X3htaXQsCiAKIAlUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgaW50IHJjKSwKKwkJIGludCByYywKKwkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSB1bnNpZ25lZCBpbnQgc2tiX2xlbiksCiAKLQlUUF9BUkdTKHNrYiwgcmMpLAorCVRQX0FSR1Moc2tiLCByYywgZGV2LCBza2JfbGVuKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fZmllbGQoCXZvaWQgKiwJCXNrYmFkZHIJCSkKIAkJX19maWVsZCgJdW5zaWduZWQgaW50LAlsZW4JCSkKIAkJX19maWVsZCgJaW50LAkJcmMJCSkKLQkJX19zdHJpbmcoCW5hbWUsCQlza2ItPmRldi0+bmFtZQkpCisJCV9fc3RyaW5nKAluYW1lLAkJZGV2LT5uYW1lCSkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCV9fZW50cnktPnNrYmFkZHIgPSBza2I7Ci0JCV9fZW50cnktPmxlbiA9IHNrYi0+bGVuOworCQlfX2VudHJ5LT5sZW4gPSBza2JfbGVuOwogCQlfX2VudHJ5LT5yYyA9IHJjOwotCQlfX2Fzc2lnbl9zdHIobmFtZSwgc2tiLT5kZXYtPm5hbWUpOworCQlfX2Fzc2lnbl9zdHIobmFtZSwgZGV2LT5uYW1lKTsKIAkpLAogCiAJVFBfcHJpbnRrKCJkZXY9JXMgc2tiYWRkcj0lcCBsZW49JXUgcmM9JWQiLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaAppbmRleCBlYTQyMmFhLi5iMmMzM2JkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaApAQCAtNiw2ICs2LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgogI2luY2x1ZGUgImdmcGZsYWdzLmgiCiAKICNkZWZpbmUgUkVDTEFJTV9XQl9BTk9OCQkweDAwMDF1CkBAIC0zMTAsNiArMzEyLDg3IEBACiAJCXNob3dfcmVjbGFpbV9mbGFncyhfX2VudHJ5LT5yZWNsYWltX2ZsYWdzKSkKICk7CiAKK1RSQUNFX0VWRU5UKHJlcGxhY2Vfc3dhcF90b2tlbiwKKwlUUF9QUk9UTyhzdHJ1Y3QgbW1fc3RydWN0ICpvbGRfbW0sCisJCSBzdHJ1Y3QgbW1fc3RydWN0ICpuZXdfbW0pLAorCisJVFBfQVJHUyhvbGRfbW0sIG5ld19tbSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBtbV9zdHJ1Y3QqLAlvbGRfbW0pCisJCV9fZmllbGQodW5zaWduZWQgaW50LAkJb2xkX3ByaW8pCisJCV9fZmllbGQoc3RydWN0IG1tX3N0cnVjdCosCW5ld19tbSkKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsCQluZXdfcHJpbykKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPm9sZF9tbSAgID0gb2xkX21tOworCQlfX2VudHJ5LT5vbGRfcHJpbyA9IG9sZF9tbSA/IG9sZF9tbS0+dG9rZW5fcHJpb3JpdHkgOiAwOworCQlfX2VudHJ5LT5uZXdfbW0gICA9IG5ld19tbTsKKwkJX19lbnRyeS0+bmV3X3ByaW8gPSBuZXdfbW0tPnRva2VuX3ByaW9yaXR5OworCSksCisKKwlUUF9wcmludGsoIm9sZF90b2tlbl9tbT0lcCBvbGRfcHJpbz0ldSBuZXdfdG9rZW5fbW09JXAgbmV3X3ByaW89JXUiLAorCQkgIF9fZW50cnktPm9sZF9tbSwgX19lbnRyeS0+b2xkX3ByaW8sCisJCSAgX19lbnRyeS0+bmV3X21tLCBfX2VudHJ5LT5uZXdfcHJpbykKKyk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MocHV0X3N3YXBfdG9rZW5fdGVtcGxhdGUsCisJVFBfUFJPVE8oc3RydWN0IG1tX3N0cnVjdCAqc3dhcF90b2tlbl9tbSksCisKKwlUUF9BUkdTKHN3YXBfdG9rZW5fbW0pLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3QgbW1fc3RydWN0Kiwgc3dhcF90b2tlbl9tbSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnN3YXBfdG9rZW5fbW0gPSBzd2FwX3Rva2VuX21tOworCSksCisKKwlUUF9wcmludGsoInRva2VuX21tPSVwIiwgX19lbnRyeS0+c3dhcF90b2tlbl9tbSkKKyk7CisKK0RFRklORV9FVkVOVChwdXRfc3dhcF90b2tlbl90ZW1wbGF0ZSwgcHV0X3N3YXBfdG9rZW4sCisJVFBfUFJPVE8oc3RydWN0IG1tX3N0cnVjdCAqc3dhcF90b2tlbl9tbSksCisJVFBfQVJHUyhzd2FwX3Rva2VuX21tKQorKTsKKworREVGSU5FX0VWRU5UX0NPTkRJVElPTihwdXRfc3dhcF90b2tlbl90ZW1wbGF0ZSwgZGlzYWJsZV9zd2FwX3Rva2VuLAorCVRQX1BST1RPKHN0cnVjdCBtbV9zdHJ1Y3QgKnN3YXBfdG9rZW5fbW0pLAorCVRQX0FSR1Moc3dhcF90b2tlbl9tbSksCisJVFBfQ09ORElUSU9OKHN3YXBfdG9rZW5fbW0gIT0gTlVMTCkKKyk7CisKK1RSQUNFX0VWRU5UX0NPTkRJVElPTih1cGRhdGVfc3dhcF90b2tlbl9wcmlvcml0eSwKKwlUUF9QUk9UTyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJIHVuc2lnbmVkIGludCBvbGRfcHJpbywKKwkJIHN0cnVjdCBtbV9zdHJ1Y3QgKnN3YXBfdG9rZW5fbW0pLAorCisJVFBfQVJHUyhtbSwgb2xkX3ByaW8sIHN3YXBfdG9rZW5fbW0pLAorCisJVFBfQ09ORElUSU9OKG1tLT50b2tlbl9wcmlvcml0eSAhPSBvbGRfcHJpbyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBtbV9zdHJ1Y3QqLCBtbSkKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsIG9sZF9wcmlvKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgbmV3X3ByaW8pCisJCV9fZmllbGQoc3RydWN0IG1tX3N0cnVjdCosIHN3YXBfdG9rZW5fbW0pCisJCV9fZmllbGQodW5zaWduZWQgaW50LCBzd2FwX3Rva2VuX3ByaW8pCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5tbQkJPSBtbTsKKwkJX19lbnRyeS0+b2xkX3ByaW8JPSBvbGRfcHJpbzsKKwkJX19lbnRyeS0+bmV3X3ByaW8JPSBtbS0+dG9rZW5fcHJpb3JpdHk7CisJCV9fZW50cnktPnN3YXBfdG9rZW5fbW0JPSBzd2FwX3Rva2VuX21tOworCQlfX2VudHJ5LT5zd2FwX3Rva2VuX3ByaW8gPSBzd2FwX3Rva2VuX21tID8gc3dhcF90b2tlbl9tbS0+dG9rZW5fcHJpb3JpdHkgOiAwOworCSksCisKKwlUUF9wcmludGsoIm1tPSVwIG9sZF9wcmlvPSV1IG5ld19wcmlvPSV1IHN3YXBfdG9rZW5fbW09JXAgdG9rZW5fcHJpbz0ldSIsCisJCSAgX19lbnRyeS0+bW0sIF9fZW50cnktPm9sZF9wcmlvLCBfX2VudHJ5LT5uZXdfcHJpbywKKwkJICBfX2VudHJ5LT5zd2FwX3Rva2VuX21tLCBfX2VudHJ5LT5zd2FwX3Rva2VuX3ByaW8pCispOwogCiAjZW5kaWYgLyogX1RSQUNFX1ZNU0NBTl9IICovCiAKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCBlYmFmYWM0Li40MTJjMjFiIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0xOSw3ICsxOSw2IEBACiBjb25maWcgQ09OU1RSVUNUT1JTCiAJYm9vbAogCWRlcGVuZHMgb24gIVVNTAotCWRlZmF1bHQgeQogCiBjb25maWcgSEFWRV9JUlFfV09SSwogCWJvb2wKQEAgLTIwNCw2ICsyMDMsMTUgQEAKIAogZW5kY2hvaWNlCiAKK2NvbmZpZyBERUZBVUxUX0hPU1ROQU1FCisJc3RyaW5nICJEZWZhdWx0IGhvc3RuYW1lIgorCWRlZmF1bHQgIihub25lKSIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHRoZSBkZWZhdWx0IHN5c3RlbSBob3N0bmFtZSBiZWZvcmUgdXNlcnNwYWNlCisJICBjYWxscyBzZXRob3N0bmFtZSgyKS4gVGhlIGtlcm5lbCB0cmFkaXRpb25hbGx5IHVzZXMgIihub25lKSIgaGVyZSwKKwkgIGJ1dCB5b3UgbWF5IHdpc2ggdG8gdXNlIGEgZGlmZmVyZW50IGRlZmF1bHQgaGVyZSB0byBtYWtlIGEgbWluaW1hbAorCSAgc3lzdGVtIG1vcmUgdXNhYmxlIHdpdGggbGVzcyBjb25maWd1cmF0aW9uLgorCiBjb25maWcgU1dBUAogCWJvb2wgIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKSIKIAlkZXBlbmRzIG9uIE1NVSAmJiBCTE9DSwpkaWZmIC0tZ2l0IGEvaW5pdC9jYWxpYnJhdGUuYyBiL2luaXQvY2FsaWJyYXRlLmMKaW5kZXggY2ZkNzAwMC4uMjU2OGQyMiAxMDA2NDQKLS0tIGEvaW5pdC9jYWxpYnJhdGUuYworKysgYi9pbml0L2NhbGlicmF0ZS5jCkBAIC05Myw5ICs5Myw2IEBACiAJCSAqIElmIHRoZSB1cHBlciBsaW1pdCBhbmQgbG93ZXIgbGltaXQgb2YgdGhlIHRpbWVyX3JhdGUgaXMKIAkJICogPj0gMTIuNSUgYXBhcnQsIHJlZG8gY2FsaWJyYXRpb24uCiAJCSAqLwotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FsaWJyYXRlX2RlbGF5X2RpcmVjdCgpIHRpbWVyX3JhdGVfbWF4PSVsdSAiCi0JCQkgICAgInRpbWVyX3JhdGVfbWluPSVsdSBwcmVfc3RhcnQ9JWx1IHByZV9lbmQ9JWx1XG4iLAotCQkJICB0aW1lcl9yYXRlX21heCwgdGltZXJfcmF0ZV9taW4sIHByZV9zdGFydCwgcHJlX2VuZCk7CiAJCWlmIChzdGFydCA+PSBwb3N0X2VuZCkKIAkJCXByaW50ayhLRVJOX05PVElDRSAiY2FsaWJyYXRlX2RlbGF5X2RpcmVjdCgpIGlnbm9yaW5nICIKIAkJCQkJInRpbWVyX3JhdGUgYXMgd2UgaGFkIGEgVFNDIHdyYXAgYXJvdW5kIgpkaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwppbmRleCBkODYzYjNjLi45ZWZlNzEwIDEwMDY0NAotLS0gYS9rZXJuZWwvZXZlbnRzL2NvcmUuYworKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwpAQCAtNzQwMiwyNiArNzQwMiwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX2Nncm91cF9tb3ZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3N0YXRpYyB2b2lkCitwZXJmX2Nncm91cF9hdHRhY2hfdGFzayhzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJdGFza19mdW5jdGlvbl9jYWxsKHRhc2ssIF9fcGVyZl9jZ3JvdXBfbW92ZSwgdGFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmZfY2dyb3VwX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnAsCi0JCXN0cnVjdCBjZ3JvdXAgKm9sZF9jZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCWJvb2wgdGhyZWFkZ3JvdXApCi17Ci0JcGVyZl9jZ3JvdXBfbW92ZSh0YXNrKTsKLQlpZiAodGhyZWFkZ3JvdXApIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICpjOwotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGMsICZ0YXNrLT50aHJlYWRfZ3JvdXAsIHRocmVhZF9ncm91cCkgewotCQkJcGVyZl9jZ3JvdXBfbW92ZShjKTsKLQkJfQotCQlyY3VfcmVhZF91bmxvY2soKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHBlcmZfY2dyb3VwX2V4aXQoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCQlzdHJ1Y3QgY2dyb3VwICpvbGRfY2dycCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewpAQCAtNzQzMyw3ICs3NDE5LDcgQEAKIAlpZiAoISh0YXNrLT5mbGFncyAmIFBGX0VYSVRJTkcpKQogCQlyZXR1cm47CiAKLQlwZXJmX2Nncm91cF9tb3ZlKHRhc2spOworCXBlcmZfY2dyb3VwX2F0dGFjaF90YXNrKGNncnAsIHRhc2spOwogfQogCiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBwZXJmX3N1YnN5cyA9IHsKQEAgLTc0NDIsNiArNzQyOCw2IEBACiAJLmNyZWF0ZQkJPSBwZXJmX2Nncm91cF9jcmVhdGUsCiAJLmRlc3Ryb3kJPSBwZXJmX2Nncm91cF9kZXN0cm95LAogCS5leGl0CQk9IHBlcmZfY2dyb3VwX2V4aXQsCi0JLmF0dGFjaAkJPSBwZXJmX2Nncm91cF9hdHRhY2gsCisJLmF0dGFjaF90YXNrCT0gcGVyZl9jZ3JvdXBfYXR0YWNoX3Rhc2ssCiB9OwogI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfUEVSRiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggMjBhNDA2NC4uZjJiMzIxYiAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC01NjEsMjkgKzU2MSwyOCBAQAogCiAjaWZkZWYgQ09ORklHX01NX09XTkVSCiAvKgotICogVGFzayBwIGlzIGV4aXRpbmcgYW5kIGl0IG93bmVkIG1tLCBsZXRzIGZpbmQgYSBuZXcgb3duZXIgZm9yIGl0CisgKiBBIHRhc2sgaXMgZXhpdGluZy4gICBJZiBpdCBvd25lZCB0aGlzIG1tLCBmaW5kIGEgbmV3IG93bmVyIGZvciB0aGUgbW0uCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1tbV9uZWVkX25ld19vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCS8qCi0JICogSWYgdGhlcmUgYXJlIG90aGVyIHVzZXJzIG9mIHRoZSBtbSBhbmQgdGhlIG93bmVyICh1cykgaXMgZXhpdGluZwotCSAqIHdlIG5lZWQgdG8gZmluZCBhIG5ldyBvd25lciB0byB0YWtlIG9uIHRoZSByZXNwb25zaWJpbGl0eS4KLQkgKi8KLQlpZiAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPD0gMSkKLQkJcmV0dXJuIDA7Ci0JaWYgKG1tLT5vd25lciAhPSBwKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQogdm9pZCBtbV91cGRhdGVfbmV4dF9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmMsICpnLCAqcCA9IGN1cnJlbnQ7CiAKIHJldHJ5OgotCWlmICghbW1fbmVlZF9uZXdfb3duZXIobW0sIHApKQorCS8qCisJICogSWYgdGhlIGV4aXRpbmcgb3IgZXhlY2luZyB0YXNrIGlzIG5vdCB0aGUgb3duZXIsIGl0J3MKKwkgKiBzb21lb25lIGVsc2UncyBwcm9ibGVtLgorCSAqLworCWlmIChtbS0+b3duZXIgIT0gcCkKIAkJcmV0dXJuOworCS8qCisJICogVGhlIGN1cnJlbnQgb3duZXIgaXMgZXhpdGluZy9leGVjaW5nIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIKKwkgKiBjYW5kaWRhdGVzLiAgRG8gbm90IGxlYXZlIHRoZSBtbSBwb2ludGluZyB0byBhIHBvc3NpYmx5CisJICogZnJlZWQgdGFzayBzdHJ1Y3R1cmUuCisJICovCisJaWYgKGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpIDw9IDEpIHsKKwkJbW0tPm93bmVyID0gTlVMTDsKKwkJcmV0dXJuOworCX0KIAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9nY292L0tjb25maWcgYi9rZXJuZWwvZ2Nvdi9LY29uZmlnCmluZGV4IGI4Y2FkZjcuLjViZjkyNGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9nY292L0tjb25maWcKKysrIGIva2VybmVsL2djb3YvS2NvbmZpZwpAQCAtMiw3ICsyLDggQEAKIAogY29uZmlnIEdDT1ZfS0VSTkVMCiAJYm9vbCAiRW5hYmxlIGdjb3YtYmFzZWQga2VybmVsIHByb2ZpbGluZyIKLQlkZXBlbmRzIG9uIERFQlVHX0ZTICYmIENPTlNUUlVDVE9SUworCWRlcGVuZHMgb24gREVCVUdfRlMKKwlzZWxlY3QgQ09OU1RSVUNUT1JTCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCVRoaXMgb3B0aW9uIGVuYWJsZXMgZ2Nvdi1iYXNlZCBjb2RlIHByb2ZpbGluZyAoZS5nLiBmb3IgY29kZSBjb3ZlcmFnZQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9oYW5kbGUuYyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKaW5kZXggOTBjYjU1Zi4uNDcwZDA4YyAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9oYW5kbGUuYworKysgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCkBAIC0xMzMsMTIgKzEzMyw2IEBACiAJCXN3aXRjaCAocmVzKSB7CiAJCWNhc2UgSVJRX1dBS0VfVEhSRUFEOgogCQkJLyoKLQkJCSAqIFNldCByZXN1bHQgdG8gaGFuZGxlZCBzbyB0aGUgc3B1cmlvdXMgY2hlY2sKLQkJCSAqIGRvZXMgbm90IHRyaWdnZXIuCi0JCQkgKi8KLQkJCXJlcyA9IElSUV9IQU5ETEVEOwotCi0JCQkvKgogCQkJICogQ2F0Y2ggZHJpdmVycyB3aGljaCByZXR1cm4gV0FLRV9USFJFQUQgYnV0CiAJCQkgKiBkaWQgbm90IHNldCB1cCBhIHRocmVhZCBmdW5jdGlvbgogCQkJICovCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2lycWRlc2MuYyBiL2tlcm5lbC9pcnEvaXJxZGVzYy5jCmluZGV4IDg4NmU4MDMuLjRjNjBhNTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaXJxZGVzYy5jCisrKyBiL2tlcm5lbC9pcnEvaXJxZGVzYy5jCkBAIC0yNTcsMTMgKzI1NywxMSBAQAogCWNvdW50ID0gQVJSQVlfU0laRShpcnFfZGVzYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlkZXNjW2ldLmlycV9kYXRhLmlycSA9IGk7Ci0JCWRlc2NbaV0uaXJxX2RhdGEuY2hpcCA9ICZub19pcnFfY2hpcDsKIAkJZGVzY1tpXS5rc3RhdF9pcnFzID0gYWxsb2NfcGVyY3B1KHVuc2lnbmVkIGludCk7Ci0JCWlycV9zZXR0aW5nc19jbHJfYW5kX3NldChkZXNjLCB+MCwgX0lSUV9ERUZBVUxUX0lOSVRfRkxBR1MpOwotCQlhbGxvY19tYXNrcyhkZXNjICsgaSwgR0ZQX0tFUk5FTCwgbm9kZSk7Ci0JCWRlc2Nfc21wX2luaXQoZGVzYyArIGksIG5vZGUpOworCQlhbGxvY19tYXNrcygmZGVzY1tpXSwgR0ZQX0tFUk5FTCwgbm9kZSk7CisJCXJhd19zcGluX2xvY2tfaW5pdCgmZGVzY1tpXS5sb2NrKTsKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmRlc2NbaV0ubG9jaywgJmlycV9kZXNjX2xvY2tfY2xhc3MpOworCQlkZXNjX3NldF9kZWZhdWx0cyhpLCAmZGVzY1tpXSwgbm9kZSk7CiAJfQogCXJldHVybiBhcmNoX2Vhcmx5X2lycV9pbml0KCk7CiB9CkBAIC0zNDYsNiArMzQ0LDEyIEBACiAJaWYgKCFjbnQpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGlycSA+PSAwKSB7CisJCWlmIChmcm9tID4gaXJxKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWZyb20gPSBpcnE7CisJfQorCiAJbXV0ZXhfbG9jaygmc3BhcnNlX2lycV9sb2NrKTsKIAogCXN0YXJ0ID0gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWEoYWxsb2NhdGVkX2lycXMsIElSUV9CSVRNQVBfQklUUywKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IGY3Y2UwMDIuLjBhNzg0MGFlIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTQ5MSw2ICs0OTEsOSBAQAogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9nZXRfZGVzY19idXNsb2NrKGlycSwgJmZsYWdzKTsKIAlpbnQgcmV0ID0gMDsKIAorCWlmICghZGVzYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiB3YWtldXAtY2FwYWJsZSBpcnFzIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBkcml2ZXJzIHRoYXQKIAkgKiBkb24ndCBuZWVkIHRvIGhhdmUgdGhlIHNhbWUgc2xlZXAgbW9kZSBiZWhhdmlvcnMuCiAJICovCkBAIC03MjMsMTMgKzcyNiwxNiBAQAogICogY29udGV4dC4gU28gd2UgbmVlZCB0byBkaXNhYmxlIGJoIGhlcmUgdG8gYXZvaWQgZGVhZGxvY2tzIGFuZCBvdGhlcgogICogc2lkZSBlZmZlY3RzLgogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIGlycXJldHVybl90CiBpcnFfZm9yY2VkX3RocmVhZF9mbihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKIHsKKwlpcnFyZXR1cm5fdCByZXQ7CisKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JYWN0aW9uLT50aHJlYWRfZm4oYWN0aW9uLT5pcnEsIGFjdGlvbi0+ZGV2X2lkKTsKKwlyZXQgPSBhY3Rpb24tPnRocmVhZF9mbihhY3Rpb24tPmlycSwgYWN0aW9uLT5kZXZfaWQpOwogCWlycV9maW5hbGl6ZV9vbmVzaG90KGRlc2MsIGFjdGlvbiwgZmFsc2UpOwogCWxvY2FsX2JoX2VuYWJsZSgpOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC03MzcsMTAgKzc0MywxNCBAQAogICogcHJlZW10aWJsZSAtIG1hbnkgb2YgdGhlbSBuZWVkIHRvIHNsZWVwIGFuZCB3YWl0IGZvciBzbG93IGJ1c3NlcyB0bwogICogY29tcGxldGUuCiAgKi8KLXN0YXRpYyB2b2lkIGlycV90aHJlYWRfZm4oc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pCitzdGF0aWMgaXJxcmV0dXJuX3QgaXJxX3RocmVhZF9mbihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKIHsKLQlhY3Rpb24tPnRocmVhZF9mbihhY3Rpb24tPmlycSwgYWN0aW9uLT5kZXZfaWQpOworCWlycXJldHVybl90IHJldDsKKworCXJldCA9IGFjdGlvbi0+dGhyZWFkX2ZuKGFjdGlvbi0+aXJxLCBhY3Rpb24tPmRldl9pZCk7CiAJaXJxX2ZpbmFsaXplX29uZXNob3QoZGVzYywgYWN0aW9uLCBmYWxzZSk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTc1Myw3ICs3NjMsOCBAQAogCX07CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uID0gZGF0YTsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhhY3Rpb24tPmlycSk7Ci0Jdm9pZCAoKmhhbmRsZXJfZm4pKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKKwlpcnFyZXR1cm5fdCAoKmhhbmRsZXJfZm4pKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbik7CiAJaW50IHdha2U7CiAKIAlpZiAoZm9yY2VfaXJxdGhyZWFkcyAmIHRlc3RfYml0KElSUVRGX0ZPUkNFRF9USFJFQUQsCkBAIC03ODMsOCArNzk0LDEyIEBACiAJCQlkZXNjLT5pc3RhdGUgfD0gSVJRU19QRU5ESU5HOwogCQkJcmF3X3NwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJCX0gZWxzZSB7CisJCQlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OworCiAJCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKLQkJCWhhbmRsZXJfZm4oZGVzYywgYWN0aW9uKTsKKwkJCWFjdGlvbl9yZXQgPSBoYW5kbGVyX2ZuKGRlc2MsIGFjdGlvbik7CisJCQlpZiAoIW5vaXJxZGVidWcpCisJCQkJbm90ZV9pbnRlcnJ1cHQoYWN0aW9uLT5pcnEsIGRlc2MsIGFjdGlvbl9yZXQpOwogCQl9CiAKIAkJd2FrZSA9IGF0b21pY19kZWNfYW5kX3Rlc3QoJmRlc2MtPnRocmVhZHNfYWN0aXZlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwppbmRleCBkZmJkNTUwNC4uYWE1N2Q1ZCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9zcHVyaW91cy5jCisrKyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwpAQCAtMTY3LDYgKzE2NywxMyBAQAogCQkgIGppZmZpZXMgKyBQT0xMX1NQVVJJT1VTX0lSUV9JTlRFUlZBTCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGJhZF9hY3Rpb25fcmV0KGlycXJldHVybl90IGFjdGlvbl9yZXQpCit7CisJaWYgKGxpa2VseShhY3Rpb25fcmV0IDw9IChJUlFfSEFORExFRCB8IElSUV9XQUtFX1RIUkVBRCkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKwogLyoKICAqIElmIDk5LDkwMCBvZiB0aGUgcHJldmlvdXMgMTAwLDAwMCBpbnRlcnJ1cHRzIGhhdmUgbm90IGJlZW4gaGFuZGxlZAogICogdGhlbiBhc3N1bWUgdGhhdCB0aGUgSVJRIGlzIHN0dWNrIGluIHNvbWUgbWFubmVyLiBEcm9wIGEgZGlhZ25vc3RpYwpAQCAtMTgyLDcgKzE4OSw3IEBACiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoYWN0aW9uX3JldCAhPSBJUlFfSEFORExFRCAmJiBhY3Rpb25fcmV0ICE9IElSUV9OT05FKSB7CisJaWYgKGJhZF9hY3Rpb25fcmV0KGFjdGlvbl9yZXQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaXJxIGV2ZW50ICVkOiBib2d1cyByZXR1cm4gdmFsdWUgJXhcbiIsCiAJCQkJaXJxLCBhY3Rpb25fcmV0KTsKIAl9IGVsc2UgewpAQCAtMjAxLDEwICsyMDgsMTEgQEAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJd2hpbGUgKGFjdGlvbikgewotCQlwcmludGsoS0VSTl9FUlIgIls8JXA+XSIsIGFjdGlvbi0+aGFuZGxlcik7Ci0JCXByaW50X3N5bWJvbCgiICglcykiLAotCQkJKHVuc2lnbmVkIGxvbmcpYWN0aW9uLT5oYW5kbGVyKTsKLQkJcHJpbnRrKCJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIls8JXA+XSAlcGYiLCBhY3Rpb24tPmhhbmRsZXIsIGFjdGlvbi0+aGFuZGxlcik7CisJCWlmIChhY3Rpb24tPnRocmVhZF9mbikKKwkJCXByaW50ayhLRVJOX0NPTlQgIiB0aHJlYWRlZCBbPCVwPl0gJXBmIiwKKwkJCQkJYWN0aW9uLT50aHJlYWRfZm4sIGFjdGlvbi0+dGhyZWFkX2ZuKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAkJYWN0aW9uID0gYWN0aW9uLT5uZXh0OwogCX0KIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpAQCAtMjYyLDcgKzI3MCwxNiBAQAogCWlmIChkZXNjLT5pc3RhdGUgJiBJUlFTX1BPTExfSU5QUk9HUkVTUykKIAkJcmV0dXJuOwogCi0JaWYgKHVubGlrZWx5KGFjdGlvbl9yZXQgIT0gSVJRX0hBTkRMRUQpKSB7CisJLyogd2UgZ2V0IGhlcmUgYWdhaW4gdmlhIHRoZSB0aHJlYWRlZCBoYW5kbGVyICovCisJaWYgKGFjdGlvbl9yZXQgPT0gSVJRX1dBS0VfVEhSRUFEKQorCQlyZXR1cm47CisKKwlpZiAoYmFkX2FjdGlvbl9yZXQoYWN0aW9uX3JldCkpIHsKKwkJcmVwb3J0X2JhZF9pcnEoaXJxLCBkZXNjLCBhY3Rpb25fcmV0KTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1bmxpa2VseShhY3Rpb25fcmV0ID09IElSUV9OT05FKSkgewogCQkvKgogCQkgKiBJZiB3ZSBhcmUgc2VlaW5nIG9ubHkgdGhlIG9kZCBzcHVyaW91cyBJUlEgY2F1c2VkIGJ5CiAJCSAqIGJ1cyBhc3luY2hyb25pY2l0eSB0aGVuIGRvbid0IGV2ZW50dWFsbHkgdHJpZ2dlciBhbiBlcnJvciwKQEAgLTI3NCw4ICsyOTEsNiBAQAogCQllbHNlCiAJCQlkZXNjLT5pcnFzX3VuaGFuZGxlZCsrOwogCQlkZXNjLT5sYXN0X3VuaGFuZGxlZCA9IGppZmZpZXM7Ci0JCWlmICh1bmxpa2VseShhY3Rpb25fcmV0ICE9IElSUV9OT05FKSkKLQkJCXJlcG9ydF9iYWRfaXJxKGlycSwgZGVzYywgYWN0aW9uX3JldCk7CiAJfQogCiAJaWYgKHVubGlrZWx5KHRyeV9taXNyb3V0ZWRfaXJxKGlycSwgZGVzYywgYWN0aW9uX3JldCkpKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCA2MzQzN2QwLi4yOThjOTI3IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTM0MjYsNyArMzQyNiw3IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAodW5saWtlbHkoY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24pKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gMTsgLyogYXZvaWQgZmFsc2UgbmVnYXRpdmUgbG9ja2RlcF9hc3NlcnRfaGVsZCgpICovCiAKIAlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWNoZWNrX2ZsYWdzKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmMgYi9rZXJuZWwvcmN1dHJlZS5jCmluZGV4IDc3YTc2NzEuLjg5NDE5ZmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmMKKysrIGIva2VybmVsL3JjdXRyZWUuYwpAQCAtMTY0OCw3ICsxNjQ4LDYgQEAKIAlpZiAoSVNfRVJSKHQpKQogCQlyZXR1cm4gUFRSX0VSUih0KTsKIAlrdGhyZWFkX2JpbmQodCwgY3B1KTsKLQlzZXRfdGFza19zdGF0ZSh0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCXBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX2NwdSwgY3B1KSA9IGNwdTsKIAlXQVJOX09OX09OQ0UocGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KSAhPSBOVUxMKTsKIAlwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF90YXNrLCBjcHUpID0gdDsKQEAgLTE3NTYsNyArMTc1NSw2IEBACiAJCWlmIChJU19FUlIodCkpCiAJCQlyZXR1cm4gUFRSX0VSUih0KTsKIAkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQkJc2V0X3Rhc2tfc3RhdGUodCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJcm5wLT5ub2RlX2t0aHJlYWRfdGFzayA9IHQ7CiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJc3Auc2NoZWRfcHJpb3JpdHkgPSA5OTsKQEAgLTE3NjUsNiArMTc2Myw4IEBACiAJcmV0dXJuIHJjdV9zcGF3bl9vbmVfYm9vc3Rfa3RocmVhZChyc3AsIHJucCwgcm5wX2luZGV4KTsKIH0KIAorc3RhdGljIHZvaWQgcmN1X3dha2Vfb25lX2Jvb3N0X2t0aHJlYWQoc3RydWN0IHJjdV9ub2RlICpybnApOworCiAvKgogICogU3Bhd24gYWxsIGt0aHJlYWRzIC0tIGNhbGxlZCBhcyBzb29uIGFzIHRoZSBzY2hlZHVsZXIgaXMgcnVubmluZy4KICAqLwpAQCAtMTc3MiwxOCArMTc3MiwzMCBAQAogewogCWludCBjcHU7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCiAJcmN1X2t0aHJlYWRzX3NwYXduYWJsZSA9IDE7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlwZXJfY3B1KHJjdV9jcHVfaGFzX3dvcmssIGNwdSkgPSAwOwotCQlpZiAoY3B1X29ubGluZShjcHUpKQorCQlpZiAoY3B1X29ubGluZShjcHUpKSB7CiAJCQkodm9pZClyY3Vfc3Bhd25fb25lX2NwdV9rdGhyZWFkKGNwdSk7CisJCQl0ID0gcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KTsKKwkJCWlmICh0KQorCQkJCXdha2VfdXBfcHJvY2Vzcyh0KTsKKwkJfQogCX0KIAlybnAgPSByY3VfZ2V0X3Jvb3QocmN1X3N0YXRlKTsKIAkodm9pZClyY3Vfc3Bhd25fb25lX25vZGVfa3RocmVhZChyY3Vfc3RhdGUsIHJucCk7CisJaWYgKHJucC0+bm9kZV9rdGhyZWFkX3Rhc2spCisJCXdha2VfdXBfcHJvY2VzcyhybnAtPm5vZGVfa3RocmVhZF90YXNrKTsKIAlpZiAoTlVNX1JDVV9OT0RFUyA+IDEpIHsKLQkJcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyY3Vfc3RhdGUsIHJucCkKKwkJcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyY3Vfc3RhdGUsIHJucCkgewogCQkJKHZvaWQpcmN1X3NwYXduX29uZV9ub2RlX2t0aHJlYWQocmN1X3N0YXRlLCBybnApOworCQkJdCA9IHJucC0+bm9kZV9rdGhyZWFkX3Rhc2s7CisJCQlpZiAodCkKKwkJCQl3YWtlX3VwX3Byb2Nlc3ModCk7CisJCQlyY3Vfd2FrZV9vbmVfYm9vc3Rfa3RocmVhZChybnApOworCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjE4OCwxNCArMjIwMCwxNCBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X29ubGluZV9jcHUoaW50IGNwdSkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3VfcHJlcGFyZV9jcHUoaW50IGNwdSkKIHsKIAlyY3VfaW5pdF9wZXJjcHVfZGF0YShjcHUsICZyY3Vfc2NoZWRfc3RhdGUsIDApOwogCXJjdV9pbml0X3BlcmNwdV9kYXRhKGNwdSwgJnJjdV9iaF9zdGF0ZSwgMCk7CiAJcmN1X3ByZWVtcHRfaW5pdF9wZXJjcHVfZGF0YShjcHUpOwogfQogCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X29ubGluZV9rdGhyZWFkcyhpbnQgY3B1KQorc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9wcmVwYXJlX2t0aHJlYWRzKGludCBjcHUpCiB7CiAJc3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihyY3Vfc3RhdGUtPnJkYSwgY3B1KTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJkcC0+bXlub2RlOwpAQCAtMjIwOSw2ICsyMjIxLDMxIEBACiB9CiAKIC8qCisgKiBrdGhyZWFkX2NyZWF0ZSgpIGNyZWF0ZXMgdGhyZWFkcyBpbiBUQVNLX1VOSU5URVJSVVBUSUJMRSBzdGF0ZSwKKyAqIGJ1dCB0aGUgUkNVIHRocmVhZHMgYXJlIHdva2VuIG9uIGRlbWFuZCwgYW5kIGlmIGRlbWFuZCBpcyBsb3cgdGhpcworICogY291bGQgYmUgYSB3aGlsZSB0cmlnZ2VyaW5nIHRoZSBodW5nIHRhc2sgd2F0Y2hkb2cuCisgKgorICogSW4gb3JkZXIgdG8gYXZvaWQgdGhpcywgcG9rZSBhbGwgdGFza3Mgb25jZSB0aGUgQ1BVIGlzIGZ1bGx5CisgKiB1cCBhbmQgcnVubmluZy4KKyAqLworc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9vbmxpbmVfa3RocmVhZHMoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKHJjdV9zdGF0ZS0+cmRhLCBjcHUpOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmRwLT5teW5vZGU7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJdCA9IHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSk7CisJaWYgKHQpCisJCXdha2VfdXBfcHJvY2Vzcyh0KTsKKworCXQgPSBybnAtPm5vZGVfa3RocmVhZF90YXNrOworCWlmICh0KQorCQl3YWtlX3VwX3Byb2Nlc3ModCk7CisKKwlyY3Vfd2FrZV9vbmVfYm9vc3Rfa3RocmVhZChybnApOworfQorCisvKgogICogSGFuZGxlIENQVSBvbmxpbmUvb2ZmbGluZSBub3RpZmljYXRpb24gZXZlbnRzLgogICovCiBzdGF0aWMgaW50IF9fY3B1aW5pdCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCkBAIC0yMjIxLDEwICsyMjU4LDExIEBACiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIENQVV9VUF9QUkVQQVJFOgogCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgotCQlyY3Vfb25saW5lX2NwdShjcHUpOwotCQlyY3Vfb25saW5lX2t0aHJlYWRzKGNwdSk7CisJCXJjdV9wcmVwYXJlX2NwdShjcHUpOworCQlyY3VfcHJlcGFyZV9rdGhyZWFkcyhjcHUpOwogCQlicmVhazsKIAljYXNlIENQVV9PTkxJTkU6CisJCXJjdV9vbmxpbmVfa3RocmVhZHMoY3B1KTsKIAljYXNlIENQVV9ET1dOX0ZBSUxFRDoKIAkJcmN1X25vZGVfa3RocmVhZF9zZXRhZmZpbml0eShybnAsIC0xKTsKIAkJcmN1X2NwdV9rdGhyZWFkX3NldHJ0KGNwdSwgMSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaCBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCmluZGV4IGE3NjdiN2QuLmM4YmZmMzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCkBAIC0xMjk1LDcgKzEyOTUsNiBAQAogCWlmIChJU19FUlIodCkpCiAJCXJldHVybiBQVFJfRVJSKHQpOwogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0Jc2V0X3Rhc2tfc3RhdGUodCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAlybnAtPmJvb3N0X2t0aHJlYWRfdGFzayA9IHQ7CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCXNwLnNjaGVkX3ByaW9yaXR5ID0gUkNVX0tUSFJFQURfUFJJTzsKQEAgLTEzMDMsNiArMTMwMiwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X3dha2Vfb25lX2Jvb3N0X2t0aHJlYWQoc3RydWN0IHJjdV9ub2RlICpybnApCit7CisJaWYgKHJucC0+Ym9vc3Rfa3RocmVhZF90YXNrKQorCQl3YWtlX3VwX3Byb2Nlc3Mocm5wLT5ib29zdF9rdGhyZWFkX3Rhc2spOworfQorCiAjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLwogCiBzdGF0aWMgdm9pZCByY3VfaW5pdGlhdGVfYm9vc3Qoc3RydWN0IHJjdV9ub2RlICpybnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCkBAIC0xMzI2LDYgKzEzMzEsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV93YWtlX29uZV9ib29zdF9rdGhyZWFkKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworfQorCiAjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KIAogI2lmbmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGNiYjNhMGUuLjNmMmU1MDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC02MDUsMTAgKzYwNSwxMCBAQAogLyoKICAqIFJldHVybiB0aGUgZ3JvdXAgdG8gd2hpY2ggdGhpcyB0YXNrcyBiZWxvbmdzLgogICoKLSAqIFdlIHVzZSB0YXNrX3N1YnN5c19zdGF0ZV9jaGVjaygpIGFuZCBleHRlbmQgdGhlIFJDVSB2ZXJpZmljYXRpb24KLSAqIHdpdGggbG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSBiZWNhdXNlIGNwdV9jZ3JvdXBfYXR0YWNoKCkKLSAqIGhvbGRzIHRoYXQgbG9jayBmb3IgZWFjaCB0YXNrIGl0IG1vdmVzIGludG8gdGhlIGNncm91cC4gVGhlcmVmb3JlCi0gKiBieSBob2xkaW5nIHRoYXQgbG9jaywgd2UgcGluIHRoZSB0YXNrIHRvIHRoZSBjdXJyZW50IGNncm91cC4KKyAqIFdlIHVzZSB0YXNrX3N1YnN5c19zdGF0ZV9jaGVjaygpIGFuZCBleHRlbmQgdGhlIFJDVSB2ZXJpZmljYXRpb24gd2l0aAorICogcGktPmxvY2sgYW5kIHJxLT5sb2NrIGJlY2F1c2UgY3B1X2Nncm91cF9hdHRhY2goKSBob2xkcyB0aG9zZSBsb2NrcyBmb3IgZWFjaAorICogdGFzayBpdCBtb3ZlcyBpbnRvIHRoZSBjZ3JvdXAuIFRoZXJlZm9yZSBieSBob2xkaW5nIGVpdGhlciBvZiB0aG9zZSBsb2NrcywKKyAqIHdlIHBpbiB0aGUgdGFzayB0byB0aGUgY3VycmVudCBjZ3JvdXAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfZ3JvdXAgKnRhc2tfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtNjE2LDcgKzYxNiw4IEBACiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIAogCWNzcyA9IHRhc2tfc3Vic3lzX3N0YXRlX2NoZWNrKHAsIGNwdV9jZ3JvdXBfc3Vic3lzX2lkLAotCQkJbG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSk7CisJCQlsb2NrZGVwX2lzX2hlbGQoJnAtPnBpX2xvY2spIHx8CisJCQlsb2NrZGVwX2lzX2hlbGQoJnRhc2tfcnEocCktPmxvY2spKTsKIAl0ZyA9IGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCB0YXNrX2dyb3VwLCBjc3MpOwogCiAJcmV0dXJuIGF1dG9ncm91cF90YXNrX2dyb3VwKHAsIHRnKTsKQEAgLTIyMDAsNiArMjIwMSwxNiBAQAogCQkJISh0YXNrX3RocmVhZF9pbmZvKHApLT5wcmVlbXB0X2NvdW50ICYgUFJFRU1QVF9BQ1RJVkUpKTsKIAogI2lmZGVmIENPTkZJR19MT0NLREVQCisJLyoKKwkgKiBUaGUgY2FsbGVyIHNob3VsZCBob2xkIGVpdGhlciBwLT5waV9sb2NrIG9yIHJxLT5sb2NrLCB3aGVuIGNoYW5naW5nCisJICogYSB0YXNrJ3MgQ1BVLiAtPnBpX2xvY2sgZm9yIHdha2luZyB0YXNrcywgcnEtPmxvY2sgZm9yIHJ1bm5hYmxlIHRhc2tzLgorCSAqCisJICogc2NoZWRfbW92ZV90YXNrKCkgaG9sZHMgYm90aCBhbmQgdGh1cyBob2xkaW5nIGVpdGhlciBwaW5zIHRoZSBjZ3JvdXAsCisJICogc2VlIHNldF90YXNrX3JxKCkuCisJICoKKwkgKiBGdXJ0aGVybW9yZSwgYWxsIHRhc2tfcnEgdXNlcnMgc2hvdWxkIGFjcXVpcmUgYm90aCBsb2Nrcywgc2VlCisJICogdGFza19ycV9sb2NrKCkuCisJICovCiAJV0FSTl9PTl9PTkNFKGRlYnVnX2xvY2tzICYmICEobG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSB8fAogCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmdGFza19ycShwKS0+bG9jaykpKTsKICNlbmRpZgpAQCAtMjQ0Nyw2ICsyNDU4LDEwIEBACiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQorCisJaWYgKHdha2VfZmxhZ3MgJiBXRl9NSUdSQVRFRCkKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfbWlncmF0ZSk7CisKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAlzY2hlZHN0YXRfaW5jKHJxLCB0dHd1X2NvdW50KTsKQEAgLTI0NTUsOSArMjQ3MCw2IEBACiAJaWYgKHdha2VfZmxhZ3MgJiBXRl9TWU5DKQogCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19zeW5jKTsKIAotCWlmIChjcHUgIT0gdGFza19jcHUocCkpCi0JCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzX21pZ3JhdGUpOwotCiAjZW5kaWYgLyogQ09ORklHX1NDSEVEU1RBVFMgKi8KIH0KIApAQCAtMjYwMCw2ICsyNjEyLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKIAlpZiAoc2NoZWRfZmVhdChUVFdVX1FVRVVFKSAmJiBjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCXNjaGVkX2Nsb2NrX2NwdShjcHUpOyAvKiBzeW5jIGNsb2NrcyB4LWNwdSAqLwogCQl0dHd1X3F1ZXVlX3JlbW90ZShwLCBjcHUpOwogCQlyZXR1cm47CiAJfQpAQCAtMjY3NCw4ICsyNjg3LDEwIEBACiAJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2luZyhwKTsKIAogCWNwdSA9IHNlbGVjdF90YXNrX3JxKHAsIFNEX0JBTEFOQ0VfV0FLRSwgd2FrZV9mbGFncyk7Ci0JaWYgKHRhc2tfY3B1KHApICE9IGNwdSkKKwlpZiAodGFza19jcHUocCkgIT0gY3B1KSB7CisJCXdha2VfZmxhZ3MgfD0gV0ZfTUlHUkFURUQ7CiAJCXNldF90YXNrX2NwdShwLCBjcHUpOworCX0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAl0dHd1X3F1ZXVlKHAsIGNwdSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IDg4NzI1YzkuLjEwZDAxODIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC0xMDk2LDcgKzEwOTYsNyBAQAogCSAqIHRvIG1vdmUgY3VycmVudCBzb21ld2hlcmUgZWxzZSwgbWFraW5nIHJvb20gZm9yIG91ciBub24tbWlncmF0YWJsZQogCSAqIHRhc2suCiAJICovCi0JaWYgKHAtPnByaW8gPT0gcnEtPmN1cnItPnByaW8gJiYgIW5lZWRfcmVzY2hlZCgpKQorCWlmIChwLT5wcmlvID09IHJxLT5jdXJyLT5wcmlvICYmICF0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmN1cnIpKQogCQljaGVja19wcmVlbXB0X2VxdWFsX3ByaW8ocnEsIHApOwogI2VuZGlmCiB9CkBAIC0xMjM5LDYgKzEyMzksMTAgQEAKIAlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGNwdSAgICAgID0gdGFza19jcHUodGFzayk7CiAKKwkvKiBNYWtlIHN1cmUgdGhlIG1hc2sgaXMgaW5pdGlhbGl6ZWQgZmlyc3QgKi8KKwlpZiAodW5saWtlbHkoIWxvd2VzdF9tYXNrKSkKKwkJcmV0dXJuIC0xOworCiAJaWYgKHRhc2stPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9PSAxKQogCQlyZXR1cm4gLTE7IC8qIE5vIG90aGVyIHRhcmdldHMgcG9zc2libGUgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDg2YzMyYjguLmZmNzY3ODYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTIzNjUsNyArMjM2NSw3IEBACiAvKioKICAqICBzeXNfcnRfc2lncHJvY21hc2sgLSBjaGFuZ2UgdGhlIGxpc3Qgb2YgY3VycmVudGx5IGJsb2NrZWQgc2lnbmFscwogICogIEBob3c6IHdoZXRoZXIgdG8gYWRkLCByZW1vdmUsIG9yIHNldCBzaWduYWxzCi0gKiAgQHNldDogc3RvcmVzIHBlbmRpbmcgc2lnbmFscworICogIEBuc2V0OiBzdG9yZXMgcGVuZGluZyBzaWduYWxzCiAgKiAgQG9zZXQ6IHByZXZpb3VzIHZhbHVlIG9mIHNpZ25hbCBtYXNrIGlmIG5vbi1udWxsCiAgKiAgQHNpZ3NldHNpemU6IHNpemUgb2Ygc2lnc2V0X3QgdHlwZQogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggNGZjOTI0NC4uZjE3NWQ5OCAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtOTM4LDYgKzkzOCwxMiBAQAogCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKwkvKgorCSAqIFVzZXItc3BhY2Ugc2NyaXB0cyByZWx5IG9uIHRoZSBleGlzdGVuY2Ugb2YgdGhpcyBmaWxlCisJICogYXMgYSBmZWF0dXJlIGNoZWNrIGZvciBwZXJmX2V2ZW50cyBiZWluZyBlbmFibGVkLgorCSAqCisJICogU28gaXQncyBhbiBBQkksIGRvIG5vdCByZW1vdmUhCisJICovCiAJewogCQkucHJvY25hbWUJPSAicGVyZl9ldmVudF9wYXJhbm9pZCIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfcGVyZl9ldmVudF9wYXJhbm9pZCwKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCmluZGV4IGMwMjdkNGY2Li5lNGM2OTlkIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKQEAgLTE4Miw3ICsxODIsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQlVHX09OKGRldi0+bW9kZSAhPSBDTE9DS19FVlRfTU9ERV9VTlVTRUQpOwotCUJVR19PTighZGV2LT5jcHVtYXNrKTsKKwlpZiAoIWRldi0+Y3B1bWFzaykgeworCQlXQVJOX09OKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKTsKKwkJZGV2LT5jcHVtYXNrID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0KIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tldmVudHNfbG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IGZkNjE5ODYuLjhjZmYzNjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC03NDksMTYgKzc0OSwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZXhwaXJlc19saW1pdCwgbWFzazsKIAlpbnQgYml0OwogCi0JZXhwaXJlc19saW1pdCA9IGV4cGlyZXM7Ci0KIAlpZiAodGltZXItPnNsYWNrID49IDApIHsKIAkJZXhwaXJlc19saW1pdCA9IGV4cGlyZXMgKyB0aW1lci0+c2xhY2s7CiAJfSBlbHNlIHsKLQkJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCQlsb25nIGRlbHRhID0gZXhwaXJlcyAtIGppZmZpZXM7CiAKLQkJLyogTm8gc2xhY2ssIGlmIGFscmVhZHkgZXhwaXJlZCBlbHNlIGF1dG8gc2xhY2sgMC40JSAqLwotCQlpZiAodGltZV9hZnRlcihleHBpcmVzLCBub3cpKQotCQkJZXhwaXJlc19saW1pdCA9IGV4cGlyZXMgKyAoZXhwaXJlcyAtIG5vdykvMjU2OworCQlpZiAoZGVsdGEgPCAyNTYpCisJCQlyZXR1cm4gZXhwaXJlczsKKworCQlleHBpcmVzX2xpbWl0ID0gZXhwaXJlcyArIGRlbHRhIC8gMjU2OwogCX0KIAltYXNrID0gZXhwaXJlcyBeIGV4cGlyZXNfbGltaXQ7CiAJaWYgKG1hc2sgPT0gMCkKQEAgLTc5NSw2ICs3OTQsOCBAQAogICovCiBpbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQogeworCWV4cGlyZXMgPSBhcHBseV9zbGFjayh0aW1lciwgZXhwaXJlcyk7CisKIAkvKgogCSAqIFRoaXMgaXMgYSBjb21tb24gb3B0aW1pemF0aW9uIHRyaWdnZXJlZCBieSB0aGUKIAkgKiBuZXR3b3JraW5nIGNvZGUgLSBpZiB0aGUgdGltZXIgaXMgcmUtbW9kaWZpZWQKQEAgLTgwMyw4ICs4MDQsNiBAQAogCWlmICh0aW1lcl9wZW5kaW5nKHRpbWVyKSAmJiB0aW1lci0+ZXhwaXJlcyA9PSBleHBpcmVzKQogCQlyZXR1cm4gMTsKIAotCWV4cGlyZXMgPSBhcHBseV9zbGFjayh0aW1lciwgZXhwaXJlcyk7Ci0KIAlyZXR1cm4gX19tb2RfdGltZXIodGltZXIsIGV4cGlyZXMsIGZhbHNlLCBUSU1FUl9OT1RfUElOTkVEKTsKIH0KIEVYUE9SVF9TWU1CT0wobW9kX3RpbWVyKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwppbmRleCAxZWU0MTdmLi45MDgwMzhmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCkBAIC0yNzQwLDcgKzI3NDAsNyBAQAogewogCWNoYXIgKmZ1bmMsICpjb21tYW5kLCAqbmV4dCA9IGJ1ZmY7CiAJc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKnA7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCWZ1bmMgPSBzdHJzZXAoJm5leHQsICI6Iik7CiAKQEAgLTMzMzAsNiArMzMzMCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyAqcDsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlwID0gc3RhcnQ7CkBAIC0zMzQ2LDcgKzMzNDcsMTMgQEAKIAkJZnRyYWNlX3JlY29yZF9pcChhZGRyKTsKIAl9CiAKKwkvKgorCSAqIERpc2FibGUgaW50ZXJydXB0cyB0byBwcmV2ZW50IGludGVycnVwdHMgZnJvbSBleGVjdXRpbmcKKwkgKiBjb2RlIHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCisJICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZ0cmFjZV91cGRhdGVfY29kZShtb2QpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCmluZGV4IGY5MjVjNDUuLjI3ZDEzYjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKQEAgLTE4NzAsOCArMTg3MCwxMiBAQAogCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QKIAotc3RhdGljIGludCBrcHJvYmVfdHJhY2Vfc2VsZnRlc3RfdGFyZ2V0KGludCBhMSwgaW50IGEyLCBpbnQgYTMsCi0JCQkJCWludCBhNCwgaW50IGE1LCBpbnQgYTYpCisvKgorICogVGhlICJfX3VzZWQiIGtlZXBzIGdjYyBmcm9tIHJlbW92aW5nIHRoZSBmdW5jdGlvbiBzeW1ib2wKKyAqIGZyb20gdGhlIGthbGxzeW1zIHRhYmxlLgorICovCitzdGF0aWMgX191c2VkIGludCBrcHJvYmVfdHJhY2Vfc2VsZnRlc3RfdGFyZ2V0KGludCBhMSwgaW50IGEyLCBpbnQgYTMsCisJCQkJCSAgICAgICBpbnQgYTQsIGludCBhNSwgaW50IGE2KQogewogCXJldHVybiBhMSArIGEyICsgYTMgKyBhNCArIGE1ICsgYTY7CiB9CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDI4YWZhNGMuLmRkMzczYzggMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC02OTcsNyArNjk3LDcgQEAKIAlib29sICJWZXJib3NlIEJVRygpIHJlcG9ydGluZyAoYWRkcyA3MEspIiBpZiBERUJVR19LRVJORUwgJiYgRVhQRVJUCiAJZGVwZW5kcyBvbiBCVUcKIAlkZXBlbmRzIG9uIEFSTSB8fCBBVlIzMiB8fCBNMzJSIHx8IE02OEsgfHwgU1BBUkMzMiB8fCBTUEFSQzY0IHx8IFwKLQkJICAgRlJWIHx8IFNVUEVSSCB8fCBHRU5FUklDX0JVRyB8fCBCTEFDS0ZJTiB8fCBNTjEwMzAwCisJCSAgIEZSViB8fCBTVVBFUkggfHwgR0VORVJJQ19CVUcgfHwgQkxBQ0tGSU4gfHwgTU4xMDMwMCB8fCBUSUxFCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBtYWtlIEJVRygpIHBhbmljcyBvdXRwdXQgdGhlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIKZGlmZiAtLWdpdCBhL2xpYi9iaXRtYXAuYyBiL2xpYi9iaXRtYXAuYwppbmRleCA0MWJhZjAyLi4zZjNiNjgxIDEwMDY0NAotLS0gYS9saWIvYml0bWFwLmMKKysrIGIvbGliL2JpdG1hcC5jCkBAIC01NzIsNyArNTcyLDcgQEAKIAogLyoqCiAgKiBfX2JpdG1hcF9wYXJzZWxpc3QgLSBjb252ZXJ0IGxpc3QgZm9ybWF0IEFTQ0lJIHN0cmluZyB0byBiaXRtYXAKLSAqIEBicDogcmVhZCBudWwtdGVybWluYXRlZCB1c2VyIHN0cmluZyBmcm9tIHRoaXMgYnVmZmVyCisgKiBAYnVmOiByZWFkIG51bC10ZXJtaW5hdGVkIHVzZXIgc3RyaW5nIGZyb20gdGhpcyBidWZmZXIKICAqIEBidWZsZW46IGJ1ZmZlciBzaXplIGluIGJ5dGVzLiAgSWYgc3RyaW5nIGlzIHNtYWxsZXIgdGhhbiB0aGlzCiAgKiAgICB0aGVuIGl0IG11c3QgYmUgdGVybWluYXRlZCB3aXRoIGEgXDAuCiAgKiBAaXNfdXNlcjogbG9jYXRpb24gb2YgYnVmZmVyLCAwIGluZGljYXRlcyBrZXJuZWwgc3BhY2UKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IDgyZGMzNGMuLjY0MGJkOTggMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtOTQ4LDE0ICs5NDgsMTQgQEAKIH0KIAogCi1jb25zdCB2b2lkICprb2JqX25zX2N1cnJlbnQoZW51bSBrb2JqX25zX3R5cGUgdHlwZSkKK3ZvaWQgKmtvYmpfbnNfZ3JhYl9jdXJyZW50KGVudW0ga29ial9uc190eXBlIHR5cGUpCiB7Ci0JY29uc3Qgdm9pZCAqbnMgPSBOVUxMOworCXZvaWQgKm5zID0gTlVMTDsKIAogCXNwaW5fbG9jaygma29ial9uc190eXBlX2xvY2spOwogCWlmICgodHlwZSA+IEtPQkpfTlNfVFlQRV9OT05FKSAmJiAodHlwZSA8IEtPQkpfTlNfVFlQRVMpICYmCiAJICAgIGtvYmpfbnNfb3BzX3RibFt0eXBlXSkKLQkJbnMgPSBrb2JqX25zX29wc190YmxbdHlwZV0tPmN1cnJlbnRfbnMoKTsKKwkJbnMgPSBrb2JqX25zX29wc190YmxbdHlwZV0tPmdyYWJfY3VycmVudF9ucygpOwogCXNwaW5fdW5sb2NrKCZrb2JqX25zX3R5cGVfbG9jayk7CiAKIAlyZXR1cm4gbnM7CkBAIC05ODcsMjMgKzk4NywxNSBAQAogCXJldHVybiBuczsKIH0KIAotLyoKLSAqIGtvYmpfbnNfZXhpdCAtIGludmFsaWRhdGUgYSBuYW1lc3BhY2UgdGFnCi0gKgotICogQHR5cGU6IHRoZSBuYW1lc3BhY2UgdHlwZSAoaS5lLiBLT0JKX05TX1RZUEVfTkVUKQotICogQG5zOiB0aGUgYWN0dWFsIG5hbWVzcGFjZSBiZWluZyBpbnZhbGlkYXRlZAotICoKLSAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB0YWcgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgRm9yIGluc3RhbmNlLAotICogd2hlbiBhIG5ldHdvcmsgbmFtZXNwYWNlIGV4aXRzLCBpdCB1c2VzIHRoaXMgaGVscGVyIHRvCi0gKiBtYWtlIHN1cmUgbm8gc2IncyBzeXNmc19pbmZvIHBvaW50cyB0byB0aGUgbm93LWludmFsaWRhdGVkCi0gKiBuZXRucy4KLSAqLwotdm9pZCBrb2JqX25zX2V4aXQoZW51bSBrb2JqX25zX3R5cGUgdHlwZSwgY29uc3Qgdm9pZCAqbnMpCit2b2lkIGtvYmpfbnNfZHJvcChlbnVtIGtvYmpfbnNfdHlwZSB0eXBlLCB2b2lkICpucykKIHsKLQlzeXNmc19leGl0X25zKHR5cGUsIG5zKTsKKwlzcGluX2xvY2soJmtvYmpfbnNfdHlwZV9sb2NrKTsKKwlpZiAoKHR5cGUgPiBLT0JKX05TX1RZUEVfTk9ORSkgJiYgKHR5cGUgPCBLT0JKX05TX1RZUEVTKSAmJgorCSAgICBrb2JqX25zX29wc190YmxbdHlwZV0gJiYga29ial9uc19vcHNfdGJsW3R5cGVdLT5kcm9wX25zKQorCQlrb2JqX25zX29wc190YmxbdHlwZV0tPmRyb3BfbnMobnMpOworCXNwaW5fdW5sb2NrKCZrb2JqX25zX3R5cGVfbG9jayk7CiB9CiAKLQogRVhQT1JUX1NZTUJPTChrb2JqZWN0X2dldCk7CiBFWFBPUlRfU1lNQk9MKGtvYmplY3RfcHV0KTsKIEVYUE9SVF9TWU1CT0woa29iamVjdF9kZWwpOwpkaWZmIC0tZ2l0IGEvbGliL3N3aW90bGIuYyBiL2xpYi9zd2lvdGxiLmMKaW5kZXggOTNjYTA4Yi4uOTkwOTNiMyAxMDA2NDQKLS0tIGEvbGliL3N3aW90bGIuYworKysgYi9saWIvc3dpb3RsYi5jCkBAIC0xMTAsNiArMTEwLDExIEBACiBfX3NldHVwKCJzd2lvdGxiPSIsIHNldHVwX2lvX3RsYl9ucGFnZXMpOwogLyogbWFrZSBpb190bGJfb3ZlcmZsb3cgdHVuYWJsZSB0b28/ICovCiAKK3Vuc2lnbmVkIGxvbmcgc3dpb2x0Yl9ucl90Ymwodm9pZCkKK3sKKwlyZXR1cm4gaW9fdGxiX25zbGFiczsKK30KKwogLyogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB3b3JrIHdpdGggaGlnaG1lbSBwYWdlICovCiBzdGF0aWMgZG1hX2FkZHJfdCBzd2lvdGxiX3ZpcnRfdG9fYnVzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAogCQkJCSAgICAgIHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpCmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGMxMTIwNTYuLjQzNjVkZjMgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC02NjYsNiArNjY2LDggQEAKIAkJCWNvbG9ucG9zID0gaTsKIAkJfQogCX0KKwlpZiAobG9uZ2VzdCA9PSAxKQkJLyogZG9uJ3QgY29tcHJlc3MgYSBzaW5nbGUgMCAqLworCQljb2xvbnBvcyA9IC0xOwogCiAJLyogZW1pdCBhZGRyZXNzICovCiAJZm9yIChpID0gMDsgaSA8IHJhbmdlOyBpKyspIHsKQEAgLTgyNiw3ICs4MjgsNyBAQAogICogICAgICAgSVB2NCB1c2VzIGRvdC1zZXBhcmF0ZWQgZGVjaW1hbCB3aXRoIGxlYWRpbmcgMCdzICgwMTAuMTIzLjA0NS4wMDYpCiAgKiAtICdbSWldNFtobmJsXScgSVB2NCBhZGRyZXNzZXMgaW4gaG9zdCwgbmV0d29yaywgYmlnIG9yIGxpdHRsZSBlbmRpYW4gb3JkZXIKICAqIC0gJ0k2YycgZm9yIElQdjYgYWRkcmVzc2VzIHByaW50ZWQgYXMgc3BlY2lmaWVkIGJ5Ci0gKiAgICAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLTZtYW4tdGV4dC1hZGRyLXJlcHJlc2VudGF0aW9uLTAwCisgKiAgICAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1OTUyCiAgKiAtICdVJyBGb3IgYSAxNiBieXRlIFVVSUQvR1VJRCwgaXQgcHJpbnRzIHRoZSBVVUlEL0dVSUQgaW4gdGhlIGZvcm0KICAqICAgICAgICJ4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiCiAgKiAgICAgICBPcHRpb25zIGZvciAlcFUgYXJlOgpkaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jCmluZGV4IDAyMWEyOTYuLjZjYzYwNGIgMTAwNjQ0Ci0tLSBhL21tL2NvbXBhY3Rpb24uYworKysgYi9tbS9jb21wYWN0aW9uLmMKQEAgLTE0NCw5ICsxNDQsMjAgQEAKIAlpbnQgbnJfZnJlZXBhZ2VzID0gY2MtPm5yX2ZyZWVwYWdlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlbGlzdCA9ICZjYy0+ZnJlZXBhZ2VzOwogCisJLyoKKwkgKiBJbml0aWFsaXNlIHRoZSBmcmVlIHNjYW5uZXIuIFRoZSBzdGFydGluZyBwb2ludCBpcyB3aGVyZSB3ZSBsYXN0CisJICogc2Nhbm5lZCBmcm9tIChvciB0aGUgZW5kIG9mIHRoZSB6b25lIGlmIHN0YXJ0aW5nKS4gVGhlIGxvdyBwb2ludAorCSAqIGlzIHRoZSBlbmQgb2YgdGhlIHBhZ2VibG9jayB0aGUgbWlncmF0aW9uIHNjYW5uZXIgaXMgdXNpbmcuCisJICovCiAJcGZuID0gY2MtPmZyZWVfcGZuOwogCWxvd19wZm4gPSBjYy0+bWlncmF0ZV9wZm4gKyBwYWdlYmxvY2tfbnJfcGFnZXM7Ci0JaGlnaF9wZm4gPSBsb3dfcGZuOworCisJLyoKKwkgKiBUYWtlIGNhcmUgdGhhdCBpZiB0aGUgbWlncmF0aW9uIHNjYW5uZXIgaXMgYXQgdGhlIGVuZCBvZiB0aGUgem9uZQorCSAqIHRoYXQgdGhlIGZyZWUgc2Nhbm5lciBkb2VzIG5vdCBhY2NpZGVudGFsbHkgbW92ZSB0byB0aGUgbmV4dCB6b25lCisJICogaW4gdGhlIG5leHQgaXNvbGF0aW9uIGN5Y2xlLgorCSAqLworCWhpZ2hfcGZuID0gbWluKGxvd19wZm4sIHBmbik7CiAKIAkvKgogCSAqIElzb2xhdGUgZnJlZSBwYWdlcyB1bnRpbCBlbm91Z2ggYXJlIGF2YWlsYWJsZSB0byBtaWdyYXRlIHRoZQpAQCAtMjQwLDExICsyNTEsMTggQEAKIAlyZXR1cm4gaXNvbGF0ZWQgPiAoaW5hY3RpdmUgKyBhY3RpdmUpIC8gMjsKIH0KIAorLyogcG9zc2libGUgb3V0Y29tZSBvZiBpc29sYXRlX21pZ3JhdGVwYWdlcyAqLwordHlwZWRlZiBlbnVtIHsKKwlJU09MQVRFX0FCT1JULAkJLyogQWJvcnQgY29tcGFjdGlvbiBub3cgKi8KKwlJU09MQVRFX05PTkUsCQkvKiBObyBwYWdlcyBpc29sYXRlZCwgY29udGludWUgc2Nhbm5pbmcgKi8KKwlJU09MQVRFX1NVQ0NFU1MsCS8qIFBhZ2VzIGlzb2xhdGVkLCBtaWdyYXRlICovCit9IGlzb2xhdGVfbWlncmF0ZV90OworCiAvKgogICogSXNvbGF0ZSBhbGwgcGFnZXMgdGhhdCBjYW4gYmUgbWlncmF0ZWQgZnJvbSB0aGUgYmxvY2sgcG9pbnRlZCB0byBieQogICogdGhlIG1pZ3JhdGUgc2Nhbm5lciB3aXRoaW4gY29tcGFjdF9jb250cm9sLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX21pZ3JhdGVwYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwKK3N0YXRpYyBpc29sYXRlX21pZ3JhdGVfdCBpc29sYXRlX21pZ3JhdGVwYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJCQkJc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpCiB7CiAJdW5zaWduZWQgbG9uZyBsb3dfcGZuLCBlbmRfcGZuOwpAQCAtMjYxLDcgKzI3OSw3IEBACiAJLyogRG8gbm90IGNyb3NzIHRoZSBmcmVlIHNjYW5uZXIgb3Igc2NhbiB3aXRoaW4gYSBtZW1vcnkgaG9sZSAqLwogCWlmIChlbmRfcGZuID4gY2MtPmZyZWVfcGZuIHx8ICFwZm5fdmFsaWQobG93X3BmbikpIHsKIAkJY2MtPm1pZ3JhdGVfcGZuID0gZW5kX3BmbjsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBJU09MQVRFX05PTkU7CiAJfQogCiAJLyoKQEAgLTI3MCwxMCArMjg4LDE0IEBACiAJICogZGVsYXkgZm9yIHNvbWUgdGltZSB1bnRpbCBmZXdlciBwYWdlcyBhcmUgaXNvbGF0ZWQKIAkgKi8KIAl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQoem9uZSkpKSB7CisJCS8qIGFzeW5jIG1pZ3JhdGlvbiBzaG91bGQganVzdCBhYm9ydCAqLworCQlpZiAoIWNjLT5zeW5jKQorCQkJcmV0dXJuIElTT0xBVEVfQUJPUlQ7CisKIAkJY29uZ2VzdGlvbl93YWl0KEJMS19SV19BU1lOQywgSFovMTApOwogCiAJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIElTT0xBVEVfQUJPUlQ7CiAJfQogCiAJLyogVGltZSB0byBpc29sYXRlIHNvbWUgcGFnZXMgZm9yIG1pZ3JhdGlvbiAqLwpAQCAtMzU4LDcgKzM4MCw3IEBACiAKIAl0cmFjZV9tbV9jb21wYWN0aW9uX2lzb2xhdGVfbWlncmF0ZXBhZ2VzKG5yX3NjYW5uZWQsIG5yX2lzb2xhdGVkKTsKIAotCXJldHVybiBjYy0+bnJfbWlncmF0ZXBhZ2VzOworCXJldHVybiBJU09MQVRFX1NVQ0NFU1M7CiB9CiAKIC8qCkBAIC00MjAsMTMgKzQ0Miw2IEBACiAJaWYgKGNjLT5mcmVlX3BmbiA8PSBjYy0+bWlncmF0ZV9wZm4pCiAJCXJldHVybiBDT01QQUNUX0NPTVBMRVRFOwogCi0JLyogQ29tcGFjdGlvbiBydW4gaXMgbm90IGZpbmlzaGVkIGlmIHRoZSB3YXRlcm1hcmsgaXMgbm90IG1ldCAqLwotCXdhdGVybWFyayA9IGxvd193bWFya19wYWdlcyh6b25lKTsKLQl3YXRlcm1hcmsgKz0gKDEgPDwgY2MtPm9yZGVyKTsKLQotCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgY2MtPm9yZGVyLCB3YXRlcm1hcmssIDAsIDApKQotCQlyZXR1cm4gQ09NUEFDVF9DT05USU5VRTsKLQogCS8qCiAJICogb3JkZXIgPT0gLTEgaXMgZXhwZWN0ZWQgd2hlbiBjb21wYWN0aW5nIHZpYQogCSAqIC9wcm9jL3N5cy92bS9jb21wYWN0X21lbW9yeQpAQCAtNDM0LDYgKzQ0OSwxMyBAQAogCWlmIChjYy0+b3JkZXIgPT0gLTEpCiAJCXJldHVybiBDT01QQUNUX0NPTlRJTlVFOwogCisJLyogQ29tcGFjdGlvbiBydW4gaXMgbm90IGZpbmlzaGVkIGlmIHRoZSB3YXRlcm1hcmsgaXMgbm90IG1ldCAqLworCXdhdGVybWFyayA9IGxvd193bWFya19wYWdlcyh6b25lKTsKKwl3YXRlcm1hcmsgKz0gKDEgPDwgY2MtPm9yZGVyKTsKKworCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgY2MtPm9yZGVyLCB3YXRlcm1hcmssIDAsIDApKQorCQlyZXR1cm4gQ09NUEFDVF9DT05USU5VRTsKKwogCS8qIERpcmVjdCBjb21wYWN0b3I6IElzIGEgc3VpdGFibGUgcGFnZSBmcmVlPyAqLwogCWZvciAob3JkZXIgPSBjYy0+b3JkZXI7IG9yZGVyIDwgTUFYX09SREVSOyBvcmRlcisrKSB7CiAJCS8qIEpvYiBkb25lIGlmIHBhZ2UgaXMgZnJlZSBvZiB0aGUgcmlnaHQgbWlncmF0ZXR5cGUgKi8KQEAgLTQ2MSw2ICs0ODMsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHdhdGVybWFyazsKIAogCS8qCisJICogb3JkZXIgPT0gLTEgaXMgZXhwZWN0ZWQgd2hlbiBjb21wYWN0aW5nIHZpYQorCSAqIC9wcm9jL3N5cy92bS9jb21wYWN0X21lbW9yeQorCSAqLworCWlmIChvcmRlciA9PSAtMSkKKwkJcmV0dXJuIENPTVBBQ1RfQ09OVElOVUU7CisKKwkvKgogCSAqIFdhdGVybWFya3MgZm9yIG9yZGVyLTAgbXVzdCBiZSBtZXQgZm9yIGNvbXBhY3Rpb24uIE5vdGUgdGhlIDJVTC4KIAkgKiBUaGlzIGlzIGJlY2F1c2UgZHVyaW5nIG1pZ3JhdGlvbiwgY29waWVzIG9mIHBhZ2VzIG5lZWQgdG8gYmUKIAkgKiBhbGxvY2F0ZWQgYW5kIGZvciBhIHNob3J0IHRpbWUsIHRoZSBmb290cHJpbnQgaXMgaGlnaGVyCkBAIC00NzAsMTcgKzQ5OSwxMSBAQAogCQlyZXR1cm4gQ09NUEFDVF9TS0lQUEVEOwogCiAJLyoKLQkgKiBvcmRlciA9PSAtMSBpcyBleHBlY3RlZCB3aGVuIGNvbXBhY3RpbmcgdmlhCi0JICogL3Byb2Mvc3lzL3ZtL2NvbXBhY3RfbWVtb3J5Ci0JICovCi0JaWYgKG9yZGVyID09IC0xKQotCQlyZXR1cm4gQ09NUEFDVF9DT05USU5VRTsKLQotCS8qCiAJICogZnJhZ21lbnRhdGlvbiBpbmRleCBkZXRlcm1pbmVzIGlmIGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIGR1ZSB0bwogCSAqIGxvdyBtZW1vcnkgb3IgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbgogCSAqCi0JICogaW5kZXggb2YgLTEgaW1wbGllcyBhbGxvY2F0aW9ucyBtaWdodCBzdWNjZWVkIGRlcGVuZGluZ29uIHdhdGVybWFya3MKKwkgKiBpbmRleCBvZiAtMTAwMCBpbXBsaWVzIGFsbG9jYXRpb25zIG1pZ2h0IHN1Y2NlZWQgZGVwZW5kaW5nIG9uCisJICogd2F0ZXJtYXJrcwogCSAqIGluZGV4IHRvd2FyZHMgMCBpbXBsaWVzIGZhaWx1cmUgaXMgZHVlIHRvIGxhY2sgb2YgbWVtb3J5CiAJICogaW5kZXggdG93YXJkcyAxMDAwIGltcGxpZXMgZmFpbHVyZSBpcyBkdWUgdG8gZnJhZ21lbnRhdGlvbgogCSAqCkBAIC00OTAsNyArNTEzLDggQEAKIAlpZiAoZnJhZ2luZGV4ID49IDAgJiYgZnJhZ2luZGV4IDw9IHN5c2N0bF9leHRmcmFnX3RocmVzaG9sZCkKIAkJcmV0dXJuIENPTVBBQ1RfU0tJUFBFRDsKIAotCWlmIChmcmFnaW5kZXggPT0gLTEgJiYgem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgMCwgMCkpCisJaWYgKGZyYWdpbmRleCA9PSAtMTAwMCAmJiB6b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgd2F0ZXJtYXJrLAorCSAgICAwLCAwKSkKIAkJcmV0dXJuIENPTVBBQ1RfUEFSVElBTDsKIAogCXJldHVybiBDT01QQUNUX0NPTlRJTlVFOwpAQCAtNTIyLDggKzU0NiwxNSBAQAogCQl1bnNpZ25lZCBsb25nIG5yX21pZ3JhdGUsIG5yX3JlbWFpbmluZzsKIAkJaW50IGVycjsKIAotCQlpZiAoIWlzb2xhdGVfbWlncmF0ZXBhZ2VzKHpvbmUsIGNjKSkKKwkJc3dpdGNoIChpc29sYXRlX21pZ3JhdGVwYWdlcyh6b25lLCBjYykpIHsKKwkJY2FzZSBJU09MQVRFX0FCT1JUOgorCQkJcmV0ID0gQ09NUEFDVF9QQVJUSUFMOworCQkJZ290byBvdXQ7CisJCWNhc2UgSVNPTEFURV9OT05FOgogCQkJY29udGludWU7CisJCWNhc2UgSVNPTEFURV9TVUNDRVNTOgorCQkJOworCQl9CiAKIAkJbnJfbWlncmF0ZSA9IGNjLT5ucl9taWdyYXRlcGFnZXM7CiAJCWVyciA9IG1pZ3JhdGVfcGFnZXMoJmNjLT5taWdyYXRlcGFnZXMsIGNvbXBhY3Rpb25fYWxsb2MsCkBAIC01NDcsNiArNTc4LDcgQEAKIAogCX0KIAorb3V0OgogCS8qIFJlbGVhc2UgZnJlZSBwYWdlcyBhbmQgY2hlY2sgYWNjb3VudGluZyAqLwogCWNjLT5ucl9mcmVlcGFnZXMgLT0gcmVsZWFzZV9mcmVlcGFnZXMoJmNjLT5mcmVlcGFnZXMpOwogCVZNX0JVR19PTihjYy0+bnJfZnJlZXBhZ2VzICE9IDApOwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IGQ3YjEwNTcuLmE4MjUxYTggMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTIwMDAsNyArMjAwMCw3IEBACiAJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfa2lsbHByaXYoZGVudHJ5KTsKIAlpZiAoIWVycm9yICYmIGtpbGxzdWlkKQogCQllcnJvciA9IF9fcmVtb3ZlX3N1aWQoZGVudHJ5LCBraWxsc3VpZCk7Ci0JaWYgKCFlcnJvcikKKwlpZiAoIWVycm9yICYmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX05PU0VDKSkKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1NFQzsKIAogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDYxNWQ5NzQuLjgxNTMyZjI5IDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCisrKyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTIyMzQsMTEgKzIyMzQsOCBAQAogCXdoaWxlIChsaWtlbHkoa2h1Z2VwYWdlZF9lbmFibGVkKCkpKSB7CiAjaWZuZGVmIENPTkZJR19OVU1BCiAJCWhwYWdlID0ga2h1Z2VwYWdlZF9hbGxvY19odWdlcGFnZSgpOwotCQlpZiAodW5saWtlbHkoIWhwYWdlKSkgewotCQkJY291bnRfdm1fZXZlbnQoVEhQX0NPTExBUFNFX0FMTE9DX0ZBSUxFRCk7CisJCWlmICh1bmxpa2VseSghaHBhZ2UpKQogCQkJYnJlYWs7Ci0JCX0KLQkJY291bnRfdm1fZXZlbnQoVEhQX0NPTExBUFNFX0FMTE9DKTsKICNlbHNlCiAJCWlmIChJU19FUlIoaHBhZ2UpKSB7CiAJCQlraHVnZXBhZ2VkX2FsbG9jX3NsZWVwKCk7CmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZjMzYmIzMS4uYmZjZjE1MyAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtMTAzMywxMCArMTAzMywxMCBAQAogCSAqLwogCWNoZyA9IHZtYV9uZWVkc19yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpOwogCWlmIChjaGcgPCAwKQotCQlyZXR1cm4gRVJSX1BUUihjaGcpOworCQlyZXR1cm4gRVJSX1BUUigtVk1fRkFVTFRfT09NKTsKIAlpZiAoY2hnKQogCQlpZiAoaHVnZXRsYl9nZXRfcXVvdGEoaW5vZGUtPmlfbWFwcGluZywgY2hnKSkKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOworCQkJcmV0dXJuIEVSUl9QVFIoLVZNX0ZBVUxUX1NJR0JVUyk7CiAKIAlzcGluX2xvY2soJmh1Z2V0bGJfbG9jayk7CiAJcGFnZSA9IGRlcXVldWVfaHVnZV9wYWdlX3ZtYShoLCB2bWEsIGFkZHIsIGF2b2lkX3Jlc2VydmUpOwpAQCAtMTExMSw2ICsxMTExLDE0IEBACiAJCVdBUk5fT04ocGFnZV9jb3VudChwYWdlKSAhPSAxKTsKIAkJcHJlcF9jb21wb3VuZF9odWdlX3BhZ2UocGFnZSwgaC0+b3JkZXIpOwogCQlwcmVwX25ld19odWdlX3BhZ2UoaCwgcGFnZSwgcGFnZV90b19uaWQocGFnZSkpOworCQkvKgorCQkgKiBJZiB3ZSBoYWQgZ2lnYW50aWMgaHVnZXBhZ2VzIGFsbG9jYXRlZCBhdCBib290IHRpbWUsIHdlIG5lZWQKKwkJICogdG8gcmVzdG9yZSB0aGUgJ3N0b2xlbicgcGFnZXMgdG8gdG90YWxyYW1fcGFnZXMgaW4gb3JkZXIgdG8KKwkJICogZml4IGNvbmZ1c2luZyBtZW1vcnkgcmVwb3J0cyBmcm9tIGZyZWUoMSkgYW5kIGFub3RoZXIKKwkJICogc2lkZS1lZmZlY3RzLCBsaWtlIENvbW1pdExpbWl0IGdvaW5nIG5lZ2F0aXZlLgorCQkgKi8KKwkJaWYgKGgtPm9yZGVyID4gKE1BWF9PUkRFUiAtIDEpKQorCQkJdG90YWxyYW1fcGFnZXMgKz0gMSA8PCBoLT5vcmRlcjsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmMKaW5kZXggZDcwOGIzZS4uOWE2OGIwYyAxMDA2NDQKLS0tIGEvbW0va3NtLmMKKysrIGIvbW0va3NtLmMKQEAgLTEzMDIsNiArMTMwMiwxMiBAQAogCQlzbG90ID0gbGlzdF9lbnRyeShzbG90LT5tbV9saXN0Lm5leHQsIHN0cnVjdCBtbV9zbG90LCBtbV9saXN0KTsKIAkJa3NtX3NjYW4ubW1fc2xvdCA9IHNsb3Q7CiAJCXNwaW5fdW5sb2NrKCZrc21fbW1saXN0X2xvY2spOworCQkvKgorCQkgKiBBbHRob3VnaCB3ZSB0ZXN0ZWQgbGlzdF9lbXB0eSgpIGFib3ZlLCBhIHJhY2luZyBfX2tzbV9leGl0CisJCSAqIG9mIHRoZSBsYXN0IG1tIG9uIHRoZSBsaXN0IG1heSBoYXZlIHJlbW92ZWQgaXQgc2luY2UgdGhlbi4KKwkJICovCisJCWlmIChzbG90ID09ICZrc21fbW1faGVhZCkKKwkJCXJldHVybiBOVUxMOwogbmV4dF9tbToKIAkJa3NtX3NjYW4uYWRkcmVzcyA9IDA7CiAJCWtzbV9zY2FuLnJtYXBfbGlzdCA9ICZzbG90LT5ybWFwX2xpc3Q7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggYmQ5MDUyYS4uY2Y3ZDAyNyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzU5LDcgKzM1OSw3IEBACiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOwogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKLXN0YXRpYyB2b2lkIGRyYWluX2FsbF9zdG9ja19hc3luYyh2b2lkKTsKK3N0YXRpYyB2b2lkIGRyYWluX2FsbF9zdG9ja19hc3luYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKIAogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICoKIG1lbV9jZ3JvdXBfem9uZWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgaW50IG5pZCwgaW50IHppZCkKQEAgLTczNSw3ICs3MzUsNyBAQAogCQkJCXN0cnVjdCBtZW1fY2dyb3VwLCBjc3MpOwogfQogCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQorc3RydWN0IG1lbV9jZ3JvdXAgKnRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBOVUxMOwogCkBAIC0xNjYzLDE1ICsxNjYzLDIxIEBACiAJZXhjZXNzID0gcmVzX2NvdW50ZXJfc29mdF9saW1pdF9leGNlc3MoJnJvb3RfbWVtLT5yZXMpID4+IFBBR0VfU0hJRlQ7CiAKIAkvKiBJZiBtZW1zd19pc19taW5pbXVtPT0xLCBzd2FwLW91dCBpcyBvZi1uby11c2UuICovCi0JaWYgKHJvb3RfbWVtLT5tZW1zd19pc19taW5pbXVtKQorCWlmICghY2hlY2tfc29mdCAmJiByb290X21lbS0+bWVtc3dfaXNfbWluaW11bSkKIAkJbm9zd2FwID0gdHJ1ZTsKIAogCXdoaWxlICgxKSB7CiAJCXZpY3RpbSA9IG1lbV9jZ3JvdXBfc2VsZWN0X3ZpY3RpbShyb290X21lbSk7CiAJCWlmICh2aWN0aW0gPT0gcm9vdF9tZW0pIHsKIAkJCWxvb3ArKzsKLQkJCWlmIChsb29wID49IDEpCi0JCQkJZHJhaW5fYWxsX3N0b2NrX2FzeW5jKCk7CisJCQkvKgorCQkJICogV2UgYXJlIG5vdCBkcmFpbmluZyBwZXIgY3B1IGNhY2hlZCBjaGFyZ2VzIGR1cmluZworCQkJICogc29mdCBsaW1pdCByZWNsYWltICBiZWNhdXNlIGdsb2JhbCByZWNsYWltIGRvZXNuJ3QKKwkJCSAqIGNhcmUgYWJvdXQgY2hhcmdlcy4gSXQgdHJpZXMgdG8gZnJlZSBzb21lIG1lbW9yeSBhbmQKKwkJCSAqIGNoYXJnZXMgd2lsbCBub3QgZ2l2ZSBhbnkuCisJCQkgKi8KKwkJCWlmICghY2hlY2tfc29mdCAmJiBsb29wID49IDEpCisJCQkJZHJhaW5fYWxsX3N0b2NrX2FzeW5jKHJvb3RfbWVtKTsKIAkJCWlmIChsb29wID49IDIpIHsKIAkJCQkvKgogCQkJCSAqIElmIHdlIGhhdmUgbm90IGJlZW4gYWJsZSB0byByZWNsYWltCkBAIC0xOTM0LDkgKzE5NDAsMTEgQEAKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqY2FjaGVkOyAvKiB0aGlzIG5ldmVyIGJlIHJvb3QgY2dyb3VwICovCiAJdW5zaWduZWQgaW50IG5yX3BhZ2VzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisjZGVmaW5lIEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UJKDApCiB9Owogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AsIG1lbWNnX3N0b2NrKTsKLXN0YXRpYyBhdG9taWNfdCBtZW1jZ19kcmFpbl9jb3VudDsKK3N0YXRpYyBERUZJTkVfTVVURVgocGVyY3B1X2NoYXJnZV9tdXRleCk7CiAKIC8qCiAgKiBUcnkgdG8gY29uc3VtZSBzdG9ja2VkIGNoYXJnZSBvbiB0aGlzIGNwdS4gSWYgc3VjY2Vzcywgb25lIHBhZ2UgaXMgY29uc3VtZWQKQEAgLTE5ODQsNiArMTk5Miw3IEBACiB7CiAJc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2sgPSAmX19nZXRfY3B1X3ZhcihtZW1jZ19zdG9jayk7CiAJZHJhaW5fc3RvY2soc3RvY2spOworCWNsZWFyX2JpdChGTFVTSElOR19DQUNIRURfQ0hBUkdFLCAmc3RvY2stPmZsYWdzKTsKIH0KIAogLyoKQEAgLTIwMDgsMjYgKzIwMTcsNDUgQEAKICAqIGV4cGVjdHMgc29tZSBjaGFyZ2VzIHdpbGwgYmUgYmFjayB0byByZXNfY291bnRlciBsYXRlciBidXQgY2Fubm90IHdhaXQgZm9yCiAgKiBpdC4KICAqLwotc3RhdGljIHZvaWQgZHJhaW5fYWxsX3N0b2NrX2FzeW5jKHZvaWQpCitzdGF0aWMgdm9pZCBkcmFpbl9hbGxfc3RvY2tfYXN5bmMoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtKQogewotCWludCBjcHU7Ci0JLyogVGhpcyBmdW5jdGlvbiBpcyBmb3Igc2NoZWR1bGluZyAiZHJhaW4iIGluIGFzeW5jaHJvbm91cyB3YXkuCi0JICogVGhlIHJlc3VsdCBvZiAiZHJhaW4iIGlzIG5vdCBkaXJlY3RseSBoYW5kbGVkIGJ5IGNhbGxlcnMuIFRoZW4sCi0JICogaWYgc29tZW9uZSBpcyBjYWxsaW5nIGRyYWluLCB3ZSBkb24ndCBoYXZlIHRvIGNhbGwgZHJhaW4gbW9yZS4KLQkgKiBBbnl3YXksIFdPUktfU1RSVUNUX1BFTkRJTkcgY2hlY2sgaW4gcXVldWVfd29ya19vbigpIHdpbGwgY2F0Y2ggaWYKLQkgKiB0aGVyZSBpcyBhIHJhY2UuIFdlIGp1c3QgZG8gbG9vc2UgY2hlY2sgaGVyZS4KKwlpbnQgY3B1LCBjdXJjcHU7CisJLyoKKwkgKiBJZiBzb21lb25lIGNhbGxzIGRyYWluaW5nLCBhdm9pZCBhZGRpbmcgbW9yZSBrd29ya2VyIHJ1bnMuCiAJICovCi0JaWYgKGF0b21pY19yZWFkKCZtZW1jZ19kcmFpbl9jb3VudCkpCisJaWYgKCFtdXRleF90cnlsb2NrKCZwZXJjcHVfY2hhcmdlX211dGV4KSkKIAkJcmV0dXJuOwogCS8qIE5vdGlmeSBvdGhlciBjcHVzIHRoYXQgc3lzdGVtLXdpZGUgImRyYWluIiBpcyBydW5uaW5nICovCi0JYXRvbWljX2luYygmbWVtY2dfZHJhaW5fY291bnQpOwogCWdldF9vbmxpbmVfY3B1cygpOworCS8qCisJICogR2V0IGEgaGludCBmb3IgYXZvaWRpbmcgZHJhaW5pbmcgY2hhcmdlcyBvbiB0aGUgY3VycmVudCBjcHUsCisJICogd2hpY2ggbXVzdCBiZSBleGhhdXN0ZWQgYnkgb3VyIGNoYXJnaW5nLiAgSXQgaXMgbm90IHJlcXVpcmVkIHRoYXQKKwkgKiB0aGlzIGJlIGEgcHJlY2lzZSBjaGVjaywgc28gd2UgdXNlIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgaW5zdGVhZCBvZgorCSAqIGdldGNwdSgpL3B1dGNwdSgpLgorCSAqLworCWN1cmNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2sgPSAmcGVyX2NwdShtZW1jZ19zdG9jaywgY3B1KTsKLQkJc2NoZWR1bGVfd29ya19vbihjcHUsICZzdG9jay0+d29yayk7CisJCXN0cnVjdCBtZW1fY2dyb3VwICptZW07CisKKwkJaWYgKGNwdSA9PSBjdXJjcHUpCisJCQljb250aW51ZTsKKworCQltZW0gPSBzdG9jay0+Y2FjaGVkOworCQlpZiAoIW1lbSkKKwkJCWNvbnRpbnVlOworCQlpZiAobWVtICE9IHJvb3RfbWVtKSB7CisJCQlpZiAoIXJvb3RfbWVtLT51c2VfaGllcmFyY2h5KQorCQkJCWNvbnRpbnVlOworCQkJLyogY2hlY2sgd2hldGhlciAibWVtIiBpcyB1bmRlciB0cmVlIG9mICJyb290X21lbSIgKi8KKwkJCWlmICghY3NzX2lzX2FuY2VzdG9yKCZtZW0tPmNzcywgJnJvb3RfbWVtLT5jc3MpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChGTFVTSElOR19DQUNIRURfQ0hBUkdFLCAmc3RvY2stPmZsYWdzKSkKKwkJCXNjaGVkdWxlX3dvcmtfb24oY3B1LCAmc3RvY2stPndvcmspOwogCX0KICAJcHV0X29ubGluZV9jcHVzKCk7Ci0JYXRvbWljX2RlYygmbWVtY2dfZHJhaW5fY291bnQpOworCW11dGV4X3VubG9jaygmcGVyY3B1X2NoYXJnZV9tdXRleCk7CiAJLyogV2UgZG9uJ3Qgd2FpdCBmb3IgZmx1c2hfd29yayAqLwogfQogCkBAIC0yMDM1LDkgKzIwNjMsOSBAQAogc3RhdGljIHZvaWQgZHJhaW5fYWxsX3N0b2NrX3N5bmModm9pZCkKIHsKIAkvKiBjYWxsZWQgd2hlbiBmb3JjZV9lbXB0eSBpcyBjYWxsZWQgKi8KLQlhdG9taWNfaW5jKCZtZW1jZ19kcmFpbl9jb3VudCk7CisJbXV0ZXhfbG9jaygmcGVyY3B1X2NoYXJnZV9tdXRleCk7CiAJc2NoZWR1bGVfb25fZWFjaF9jcHUoZHJhaW5fbG9jYWxfc3RvY2spOwotCWF0b21pY19kZWMoJm1lbWNnX2RyYWluX2NvdW50KTsKKwltdXRleF91bmxvY2soJnBlcmNwdV9jaGFyZ2VfbXV0ZXgpOwogfQogCiAvKgpAQCAtNDY0MCw2ICs0NjY4LDcgQEAKIAl7CiAJCS5uYW1lID0gIm51bWFfc3RhdCIsCiAJCS5vcGVuID0gbWVtX2NvbnRyb2xfbnVtYV9zdGF0X29wZW4sCisJCS5tb2RlID0gU19JUlVHTywKIAl9LAogI2VuZGlmCiB9OwpAQCAtNTQxNCwxOCArNTQ0MywxNiBAQAogCQkJCXN0cnVjdCBjZ3JvdXAgKm9sZF9jb250LAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGdldF90YXNrX21tKHApOwogCi0JaWYgKCFtYy50bykKLQkJLyogbm8gbmVlZCB0byBtb3ZlIGNoYXJnZSAqLwotCQlyZXR1cm47Ci0KLQltbSA9IGdldF90YXNrX21tKHApOwogCWlmIChtbSkgewotCQltZW1fY2dyb3VwX21vdmVfY2hhcmdlKG1tKTsKKwkJaWYgKG1jLnRvKQorCQkJbWVtX2Nncm91cF9tb3ZlX2NoYXJnZShtbSk7CisJCXB1dF9zd2FwX3Rva2VuKG1tKTsKIAkJbW1wdXQobW0pOwogCX0KLQltZW1fY2dyb3VwX2NsZWFyX21jKCk7CisJaWYgKG1jLnRvKQorCQltZW1fY2dyb3VwX2NsZWFyX21jKCk7CiB9CiAjZWxzZQkvKiAhQ09ORklHX01NVSAqLwogc3RhdGljIGludCBtZW1fY2dyb3VwX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLApkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNWM4ZjdlMC4uZWFjMGJhNSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYworKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnlfaG90cGx1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfZWFybHlfa2lsbCBfX3JlYWRfbW9zdGx5ID0gMDsKQEAgLTE0NjgsNyArMTQ2OSw4IEBACiAJcHV0X3BhZ2UocGFnZSk7CiAJaWYgKCFyZXQpIHsKIAkJTElTVF9IRUFEKHBhZ2VsaXN0KTsKLQorCQlpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0lTT0xBVEVEX0FOT04gKworCQkJCQkgICAgcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKTsKIAkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJnBhZ2VsaXN0KTsKIAkJcmV0ID0gbWlncmF0ZV9wYWdlcygmcGFnZWxpc3QsIG5ld19wYWdlLCBNUE9MX01GX01PVkVfQUxMLAogCQkJCQkJCQkwLCB0cnVlKTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggNjk1M2QzOS4uODdkOTM1MyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTExMTIsMTEgKzExMTIsMTMgQEAKIAlpbnQgZm9yY2VfZmx1c2ggPSAwOwogCWludCByc3NbTlJfTU1fQ09VTlRFUlNdOwogCXNwaW5sb2NrX3QgKnB0bDsKKwlwdGVfdCAqc3RhcnRfcHRlOwogCXB0ZV90ICpwdGU7CiAKIGFnYWluOgogCWluaXRfcnNzX3ZlYyhyc3MpOwotCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgYWRkciwgJnB0bCk7CisJc3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCAmcHRsKTsKKwlwdGUgPSBzdGFydF9wdGU7CiAJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiAJZG8gewogCQlwdGVfdCBwdGVudCA9ICpwdGU7CkBAIC0xMTk2LDcgKzExOTgsNyBAQAogCiAJYWRkX21tX3Jzc192ZWMobW0sIHJzcyk7CiAJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7Ci0JcHRlX3VubWFwX3VubG9jayhwdGUgLSAxLCBwdGwpOworCXB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpOwogCiAJLyoKIAkgKiBtbXVfZ2F0aGVyIHJhbiBvdXQgb2Ygcm9vbSB0byBiYXRjaCBwYWdlcywgd2UgYnJlYWsgb3V0IG9mCkBAIC0xMjk2LDcgKzEyOTgsNyBAQAogCiAvKioKICAqIHVubWFwX3ZtYXMgLSB1bm1hcCBhIHJhbmdlIG9mIG1lbW9yeSBjb3ZlcmVkIGJ5IGEgbGlzdCBvZiB2bWEncwotICogQHRsYnA6IGFkZHJlc3Mgb2YgdGhlIGNhbGxlcidzIHN0cnVjdCBtbXVfZ2F0aGVyCisgKiBAdGxiOiBhZGRyZXNzIG9mIHRoZSBjYWxsZXIncyBzdHJ1Y3QgbW11X2dhdGhlcgogICogQHZtYTogdGhlIHN0YXJ0aW5nIHZtYQogICogQHN0YXJ0X2FkZHI6IHZpcnR1YWwgYWRkcmVzcyBhdCB3aGljaCB0byBzdGFydCB1bm1hcHBpbmcKICAqIEBlbmRfYWRkcjogdmlydHVhbCBhZGRyZXNzIGF0IHdoaWNoIHRvIGVuZCB1bm1hcHBpbmcKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDlmNjQ2MzcuLjAyMTU5YzcgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtNDk0LDYgKzQ5NCwxMiBAQAogCS8qIGluaXQgbm9kZSdzIHpvbmVzIGFzIGVtcHR5IHpvbmVzLCB3ZSBkb24ndCBoYXZlIGFueSBwcmVzZW50IHBhZ2VzLiovCiAJZnJlZV9hcmVhX2luaXRfbm9kZShuaWQsIHpvbmVzX3NpemUsIHN0YXJ0X3BmbiwgemhvbGVzX3NpemUpOwogCisJLyoKKwkgKiBUaGUgbm9kZSB3ZSBhbGxvY2F0ZWQgaGFzIG5vIHpvbmUgZmFsbGJhY2sgbGlzdHMuIEZvciBhdm9pZGluZworCSAqIHRvIGFjY2VzcyBub3QtaW5pdGlhbGl6ZWQgem9uZWxpc3QsIGJ1aWxkIGhlcmUuCisJICovCisJYnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTsKKwogCXJldHVybiBwZ2RhdDsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IGJiZGM5YWYuLmQ0OTczNmYgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTkwNiwxNCArOTA2LDcgQEAKIAlpZiAoYW5vbl92bWEpCiAJCXJldHVybiBhbm9uX3ZtYTsKIHRyeV9wcmV2OgotCS8qCi0JICogSXQgaXMgcG90ZW50aWFsbHkgc2xvdyB0byBoYXZlIHRvIGNhbGwgZmluZF92bWFfcHJldiBoZXJlLgotCSAqIEJ1dCBpdCdzIG9ubHkgb24gdGhlIGZpcnN0IHdyaXRlIGZhdWx0IG9uIHRoZSB2bWEsIG5vdAotCSAqIGV2ZXJ5IHRpbWUsIGFuZCB3ZSBjb3VsZCBkZXZpc2UgYSB3YXkgdG8gYXZvaWQgaXQgbGF0ZXIKLQkgKiAoZS5nLiBzdGFzaCBpbmZvIGluIG5leHQncyBhbm9uX3ZtYV9ub2RlIHdoZW4gYXNzaWduaW5nCi0JICogYW4gYW5vbl92bWEsIG9yIHdoZW4gdHJ5aW5nIHZtYV9tZXJnZSkuICBBbm90aGVyIHRpbWUuCi0JICovCi0JQlVHX09OKGZpbmRfdm1hX3ByZXYodm1hLT52bV9tbSwgdm1hLT52bV9zdGFydCwgJm5lYXIpICE9IHZtYSk7CisJbmVhciA9IHZtYS0+dm1fcHJldjsKIAlpZiAoIW5lYXIpCiAJCWdvdG8gbm9uZTsKIApAQCAtMjA0NCw5ICsyMDM3LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogRmluZCB0aGUgZmlyc3Qgb3ZlcmxhcHBpbmcgVk1BICovCi0Jdm1hID0gZmluZF92bWFfcHJldihtbSwgc3RhcnQsICZwcmV2KTsKKwl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOwogCWlmICghdm1hKQogCQlyZXR1cm4gMDsKKwlwcmV2ID0gdm1hLT52bV9wcmV2OwogCS8qIHdlIGhhdmUgIHN0YXJ0IDwgdm1hLT52bV9lbmQgICovCiAKIAkvKiBpZiBpdCBkb2Vzbid0IG92ZXJsYXAsIHdlIGhhdmUgbm90aGluZy4uICovCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYTRlMWRiMy4uNGU4OTg1YSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMjI0NywxMCArMjI0Nyw2IEBACiAKIAlpZiAoc2hvdWxkX2ZhaWxfYWxsb2NfcGFnZShnZnBfbWFzaywgb3JkZXIpKQogCQlyZXR1cm4gTlVMTDsKLSNpZm5kZWYgQ09ORklHX1pPTkVfRE1BCi0JaWYgKFdBUk5fT05fT05DRShnZnBfbWFzayAmIF9fR0ZQX0RNQSkpCi0JCXJldHVybiBOVUxMOwotI2VuZGlmCiAKIAkvKgogCSAqIENoZWNrIHRoZSB6b25lcyBzdWl0YWJsZSBmb3IgdGhlIGdmcF9tYXNrIGNvbnRhaW4gYXQgbGVhc3Qgb25lCmRpZmYgLS1naXQgYS9tbS9wYWdlX2Nncm91cC5jIGIvbW0vcGFnZV9jZ3JvdXAuYwppbmRleCA3NGNjZmY2Li41M2JmZmM2IDEwMDY0NAotLS0gYS9tbS9wYWdlX2Nncm91cC5jCisrKyBiL21tL3BhZ2VfY2dyb3VwLmMKQEAgLTE2MiwxMyArMTYyLDEzIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBfX21lbWluaXQgaW5pdF9zZWN0aW9uX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgcGZuKQorc3RhdGljIGludCBfX21lbWluaXQgaW5pdF9zZWN0aW9uX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKQogewogCXN0cnVjdCBwYWdlX2Nncm91cCAqYmFzZSwgKnBjOwogCXN0cnVjdCBtZW1fc2VjdGlvbiAqc2VjdGlvbjsKIAl1bnNpZ25lZCBsb25nIHRhYmxlX3NpemU7CiAJdW5zaWduZWQgbG9uZyBucjsKLQlpbnQgbmlkLCBpbmRleDsKKwlpbnQgaW5kZXg7CiAKIAluciA9IHBmbl90b19zZWN0aW9uX25yKHBmbik7CiAJc2VjdGlvbiA9IF9fbnJfdG9fc2VjdGlvbihucik7CkBAIC0xNzYsNyArMTc2LDYgQEAKIAlpZiAoc2VjdGlvbi0+cGFnZV9jZ3JvdXApCiAJCXJldHVybiAwOwogCi0JbmlkID0gcGFnZV90b19uaWQocGZuX3RvX3BhZ2UocGZuKSk7CiAJdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGFnZV9jZ3JvdXApICogUEFHRVNfUEVSX1NFQ1RJT047CiAJYmFzZSA9IGFsbG9jX3BhZ2VfY2dyb3VwKHRhYmxlX3NpemUsIG5pZCk7CiAKQEAgLTE5Niw3ICsxOTUsMTEgQEAKIAkJcGMgPSBiYXNlICsgaW5kZXg7CiAJCWluaXRfcGFnZV9jZ3JvdXAocGMsIG5yKTsKIAl9Ci0KKwkvKgorCSAqIFRoZSBwYXNzZWQgInBmbiIgbWF5IG5vdCBiZSBhbGlnbmVkIHRvIFNFQ1RJT04uICBGb3IgdGhlIGNhbGN1bGF0aW9uCisJICogd2UgbmVlZCB0byBhcHBseSBhIG1hc2suCisJICovCisJcGZuICY9IFBBR0VfU0VDVElPTl9NQVNLOwogCXNlY3Rpb24tPnBhZ2VfY2dyb3VwID0gYmFzZSAtIHBmbjsKIAl0b3RhbF91c2FnZSArPSB0YWJsZV9zaXplOwogCXJldHVybiAwOwpAQCAtMjI1LDEwICsyMjgsMjAgQEAKIAlzdGFydCA9IHN0YXJ0X3BmbiAmIH4oUEFHRVNfUEVSX1NFQ1RJT04gLSAxKTsKIAllbmQgPSBBTElHTihzdGFydF9wZm4gKyBucl9wYWdlcywgUEFHRVNfUEVSX1NFQ1RJT04pOwogCisJaWYgKG5pZCA9PSAtMSkgeworCQkvKgorCQkgKiBJbiB0aGlzIGNhc2UsICJuaWQiIGFscmVhZHkgZXhpc3RzIGFuZCBjb250YWlucyB2YWxpZCBtZW1vcnkuCisJCSAqICJzdGFydF9wZm4iIHBhc3NlZCB0byB1cyBpcyBhIHBmbiB3aGljaCBpcyBhbiBhcmcgZm9yCisJCSAqIG9ubGluZV9fcGFnZXMoKSwgYW5kIHN0YXJ0X3BmbiBzaG91bGQgZXhpc3QuCisJCSAqLworCQluaWQgPSBwZm5fdG9fbmlkKHN0YXJ0X3Bmbik7CisJCVZNX0JVR19PTighbm9kZV9zdGF0ZShuaWQsIE5fT05MSU5FKSk7CisJfQorCiAJZm9yIChwZm4gPSBzdGFydDsgIWZhaWwgJiYgcGZuIDwgZW5kOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pIHsKIAkJaWYgKCFwZm5fcHJlc2VudChwZm4pKQogCQkJY29udGludWU7Ci0JCWZhaWwgPSBpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAocGZuKTsKKwkJZmFpbCA9IGluaXRfc2VjdGlvbl9wYWdlX2Nncm91cChwZm4sIG5pZCk7CiAJfQogCWlmICghZmFpbCkKIAkJcmV0dXJuIDA7CkBAIC0yODQsMjUgKzI5Nyw0NyBAQAogdm9pZCBfX2luaXQgcGFnZV9jZ3JvdXBfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcGZuOwotCWludCBmYWlsID0gMDsKKwlpbnQgbmlkOwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuOwogCi0JZm9yIChwZm4gPSAwOyAhZmFpbCAmJiBwZm4gPCBtYXhfcGZuOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pIHsKLQkJaWYgKCFwZm5fcHJlc2VudChwZm4pKQotCQkJY29udGludWU7Ci0JCWZhaWwgPSBpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAocGZuKTsKKwlmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9ISUdIX01FTU9SWSkgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKKworCQlzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihuaWQpOworCQllbmRfcGZuID0gbm9kZV9lbmRfcGZuKG5pZCk7CisJCS8qCisJCSAqIHN0YXJ0X3BmbiBhbmQgZW5kX3BmbiBtYXkgbm90IGJlIGFsaWduZWQgdG8gU0VDVElPTiBhbmQgdGhlCisJCSAqIHBhZ2UtPmZsYWdzIG9mIG91dCBvZiBub2RlIHBhZ2VzIGFyZSBub3QgaW5pdGlhbGl6ZWQuICBTbyB3ZQorCQkgKiBzY2FuIFtzdGFydF9wZm4sIHRoZSBiaWdnZXN0IHNlY3Rpb24ncyBwZm4gPCBlbmRfcGZuKSBoZXJlLgorCQkgKi8KKwkJZm9yIChwZm4gPSBzdGFydF9wZm47CisJCSAgICAgcGZuIDwgZW5kX3BmbjsKKyAgICAgICAgICAgICAgICAgICAgIHBmbiA9IEFMSUdOKHBmbiArIDEsIFBBR0VTX1BFUl9TRUNUSU9OKSkgeworCisJCQlpZiAoIXBmbl92YWxpZChwZm4pKQorCQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIE5vZGVzJ3MgcGZucyBjYW4gYmUgb3ZlcmxhcHBpbmcuCisJCQkgKiBXZSBrbm93IHNvbWUgYXJjaCBjYW4gaGF2ZSBhIG5vZGVzIGxheW91dCBzdWNoIGFzCisJCQkgKiAtLS0tLS0tLS0tLS0tcGZuLS0tLS0tLS0tLS0tLS0+CisJCQkgKiBOMCB8IE4xIHwgTjIgfCBOMCB8IE4xIHwgTjJ8Li4uLgorCQkJICovCisJCQlpZiAocGZuX3RvX25pZChwZm4pICE9IG5pZCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAocGZuLCBuaWQpKQorCQkJCWdvdG8gb29tOworCQl9CiAJfQotCWlmIChmYWlsKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgInRyeSAnY2dyb3VwX2Rpc2FibGU9bWVtb3J5JyBib290IG9wdGlvblxuIik7Ci0JCXBhbmljKCJPdXQgb2YgbWVtb3J5Iik7Ci0JfSBlbHNlIHsKLQkJaG90cGx1Z19tZW1vcnlfbm90aWZpZXIocGFnZV9jZ3JvdXBfY2FsbGJhY2ssIDApOwotCX0KKwlob3RwbHVnX21lbW9yeV9ub3RpZmllcihwYWdlX2Nncm91cF9jYWxsYmFjaywgMCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiYWxsb2NhdGVkICVsZCBieXRlcyBvZiBwYWdlX2Nncm91cFxuIiwgdG90YWxfdXNhZ2UpOwotCXByaW50ayhLRVJOX0lORk8gInBsZWFzZSB0cnkgJ2Nncm91cF9kaXNhYmxlPW1lbW9yeScgb3B0aW9uIGlmIHlvdSBkb24ndCIKLQkiIHdhbnQgbWVtb3J5IGNncm91cHNcbiIpOworCXByaW50ayhLRVJOX0lORk8gInBsZWFzZSB0cnkgJ2Nncm91cF9kaXNhYmxlPW1lbW9yeScgb3B0aW9uIGlmIHlvdSAiCisJCQkgImRvbid0IHdhbnQgbWVtb3J5IGNncm91cHNcbiIpOworCXJldHVybjsKK29vbToKKwlwcmludGsoS0VSTl9DUklUICJ0cnkgJ2Nncm91cF9kaXNhYmxlPW1lbW9yeScgYm9vdCBvcHRpb25cbiIpOworCXBhbmljKCJPdXQgb2YgbWVtb3J5Iik7CiB9CiAKIHZvaWQgX19tZW1pbml0IHBnZGF0X3BhZ2VfY2dyb3VwX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCBiY2ZhNDk4Li5kOTZlMjIzIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0zNjA0LDEzICszNjA0LDE0IEBACiAgKiBSZWxlYXNlIGFuIG9iaiBiYWNrIHRvIGl0cyBjYWNoZS4gSWYgdGhlIG9iaiBoYXMgYSBjb25zdHJ1Y3RlZCBzdGF0ZSwgaXQgbXVzdAogICogYmUgaW4gdGhpcyBzdGF0ZSBfYmVmb3JlXyBpdCBpcyByZWxlYXNlZC4gIENhbGxlZCB3aXRoIGRpc2FibGVkIGludHMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqb2JqcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqb2JqcCwKKyAgICB2b2lkICpjYWxsZXIpCiB7CiAJc3RydWN0IGFycmF5X2NhY2hlICphYyA9IGNwdV9jYWNoZV9nZXQoY2FjaGVwKTsKIAogCWNoZWNrX2lycV9vZmYoKTsKIAlrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShvYmpwLCBjYWNoZXAtPmZsYWdzKTsKLQlvYmpwID0gY2FjaGVfZnJlZV9kZWJ1Z2NoZWNrKGNhY2hlcCwgb2JqcCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwlvYmpwID0gY2FjaGVfZnJlZV9kZWJ1Z2NoZWNrKGNhY2hlcCwgb2JqcCwgY2FsbGVyKTsKIAogCWttZW1jaGVja19zbGFiX2ZyZWUoY2FjaGVwLCBvYmpwLCBvYmpfc2l6ZShjYWNoZXApKTsKIApAQCAtMzgwMSw3ICszODAyLDcgQEAKIAlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChvYmpwLCBvYmpfc2l6ZShjYWNoZXApKTsKIAlpZiAoIShjYWNoZXAtPmZsYWdzICYgU0xBQl9ERUJVR19PQkpFQ1RTKSkKIAkJZGVidWdfY2hlY2tfbm9fb2JqX2ZyZWVkKG9ianAsIG9ial9zaXplKGNhY2hlcCkpOwotCV9fY2FjaGVfZnJlZShjYWNoZXAsIG9ianApOworCV9fY2FjaGVfZnJlZShjYWNoZXAsIG9ianAsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJdHJhY2Vfa21lbV9jYWNoZV9mcmVlKF9SRVRfSVBfLCBvYmpwKTsKQEAgLTM4MzEsNyArMzgzMiw3IEBACiAJYyA9IHZpcnRfdG9fY2FjaGUob2JqcCk7CiAJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQob2JqcCwgb2JqX3NpemUoYykpOwogCWRlYnVnX2NoZWNrX25vX29ial9mcmVlZChvYmpwLCBvYmpfc2l6ZShjKSk7Ci0JX19jYWNoZV9mcmVlKGMsICh2b2lkICopb2JqcCk7CisJX19jYWNoZV9mcmVlKGMsICh2b2lkICopb2JqcCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGtmcmVlKTsKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCA3YmUwMjIzLi4zNWYzNTFmIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0yMzIwLDE2ICsyMzIwLDEyIEBACiAJQlVJTERfQlVHX09OKFBFUkNQVV9EWU5BTUlDX0VBUkxZX1NJWkUgPAogCQkJU0xVQl9QQUdFX1NISUZUICogc2l6ZW9mKHN0cnVjdCBrbWVtX2NhY2hlX2NwdSkpOwogCi0jaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKIAkvKgotCSAqIE11c3QgYWxpZ24gdG8gZG91YmxlIHdvcmQgYm91bmRhcnkgZm9yIHRoZSBkb3VibGUgY21weGNoZyBpbnN0cnVjdGlvbnMKLQkgKiB0byB3b3JrLgorCSAqIE11c3QgYWxpZ24gdG8gZG91YmxlIHdvcmQgYm91bmRhcnkgZm9yIHRoZSBkb3VibGUgY21weGNoZworCSAqIGluc3RydWN0aW9ucyB0byB3b3JrOyBzZWUgX19wY3B1X2RvdWJsZV9jYWxsX3JldHVybl9ib29sKCkuCiAJICovCi0Jcy0+Y3B1X3NsYWIgPSBfX2FsbG9jX3BlcmNwdShzaXplb2Yoc3RydWN0IGttZW1fY2FjaGVfY3B1KSwgMiAqIHNpemVvZih2b2lkICopKTsKLSNlbHNlCi0JLyogUmVndWxhciBhbGlnbm1lbnQgaXMgc3VmZmljaWVudCAqLwotCXMtPmNwdV9zbGFiID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBrbWVtX2NhY2hlX2NwdSk7Ci0jZW5kaWYKKwlzLT5jcHVfc2xhYiA9IF9fYWxsb2NfcGVyY3B1KHNpemVvZihzdHJ1Y3Qga21lbV9jYWNoZV9jcHUpLAorCQkJCSAgICAgMiAqIHNpemVvZih2b2lkICopKTsKIAogCWlmICghcy0+Y3B1X3NsYWIpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbW0vdGhyYXNoLmMgYi9tbS90aHJhc2guYwppbmRleCAyMzcyZDRlLi5mYWJmMmQwIDEwMDY0NAotLS0gYS9tbS90aHJhc2guYworKysgYi9tbS90aHJhc2guYwpAQCAtMjEsMTQgKzIxLDQwIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CisKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvdm1zY2FuLmg+CisKKyNkZWZpbmUgVE9LRU5fQUdJTkdfSU5URVJWQUwJKDB4RkYpCiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3dhcF90b2tlbl9sb2NrKTsKIHN0cnVjdCBtbV9zdHJ1Y3QgKnN3YXBfdG9rZW5fbW07CitzdHJ1Y3QgbWVtX2Nncm91cCAqc3dhcF90b2tlbl9tZW1jZzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2xvYmFsX2ZhdWx0czsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFzdF9hZ2luZzsKKworI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnN3YXBfdG9rZW5fbWVtY2dfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CisKKwltZW1jZyA9IHRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTsKKwlpZiAobWVtY2cpCisJCWNzc19wdXQobWVtX2Nncm91cF9jc3MobWVtY2cpKTsKKworCXJldHVybiBtZW1jZzsKK30KKyNlbHNlCitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnN3YXBfdG9rZW5fbWVtY2dfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgogCiB2b2lkIGdyYWJfc3dhcF90b2tlbihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlpbnQgY3VycmVudF9pbnRlcnZhbDsKKwl1bnNpZ25lZCBpbnQgb2xkX3ByaW8gPSBtbS0+dG9rZW5fcHJpb3JpdHk7CiAKIAlnbG9iYWxfZmF1bHRzKys7CiAKQEAgLTM4LDQwICs2NCw4MSBAQAogCQlyZXR1cm47CiAKIAkvKiBGaXJzdCBjb21lIGZpcnN0IHNlcnZlZCAqLwotCWlmIChzd2FwX3Rva2VuX21tID09IE5VTEwpIHsKLQkJbW0tPnRva2VuX3ByaW9yaXR5ID0gbW0tPnRva2VuX3ByaW9yaXR5ICsgMjsKLQkJc3dhcF90b2tlbl9tbSA9IG1tOwotCQlnb3RvIG91dDsKKwlpZiAoIXN3YXBfdG9rZW5fbW0pCisJCWdvdG8gcmVwbGFjZV90b2tlbjsKKworCWlmICgoZ2xvYmFsX2ZhdWx0cyAtIGxhc3RfYWdpbmcpID4gVE9LRU5fQUdJTkdfSU5URVJWQUwpIHsKKwkJc3dhcF90b2tlbl9tbS0+dG9rZW5fcHJpb3JpdHkgLz0gMjsKKwkJbGFzdF9hZ2luZyA9IGdsb2JhbF9mYXVsdHM7CiAJfQogCi0JaWYgKG1tICE9IHN3YXBfdG9rZW5fbW0pIHsKLQkJaWYgKGN1cnJlbnRfaW50ZXJ2YWwgPCBtbS0+bGFzdF9pbnRlcnZhbCkKLQkJCW1tLT50b2tlbl9wcmlvcml0eSsrOwotCQllbHNlIHsKLQkJCWlmIChsaWtlbHkobW0tPnRva2VuX3ByaW9yaXR5ID4gMCkpCi0JCQkJbW0tPnRva2VuX3ByaW9yaXR5LS07Ci0JCX0KLQkJLyogQ2hlY2sgaWYgd2UgZGVzZXJ2ZSB0aGUgdG9rZW4gKi8KLQkJaWYgKG1tLT50b2tlbl9wcmlvcml0eSA+IHN3YXBfdG9rZW5fbW0tPnRva2VuX3ByaW9yaXR5KSB7Ci0JCQltbS0+dG9rZW5fcHJpb3JpdHkgKz0gMjsKLQkJCXN3YXBfdG9rZW5fbW0gPSBtbTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIFRva2VuIGhvbGRlciBjYW1lIGluIGFnYWluISAqLworCWlmIChtbSA9PSBzd2FwX3Rva2VuX21tKSB7CiAJCW1tLT50b2tlbl9wcmlvcml0eSArPSAyOworCQlnb3RvIHVwZGF0ZV9wcmlvcml0eTsKIAl9CiAKKwlpZiAoY3VycmVudF9pbnRlcnZhbCA8IG1tLT5sYXN0X2ludGVydmFsKQorCQltbS0+dG9rZW5fcHJpb3JpdHkrKzsKKwllbHNlIHsKKwkJaWYgKGxpa2VseShtbS0+dG9rZW5fcHJpb3JpdHkgPiAwKSkKKwkJCW1tLT50b2tlbl9wcmlvcml0eS0tOworCX0KKworCS8qIENoZWNrIGlmIHdlIGRlc2VydmUgdGhlIHRva2VuICovCisJaWYgKG1tLT50b2tlbl9wcmlvcml0eSA+IHN3YXBfdG9rZW5fbW0tPnRva2VuX3ByaW9yaXR5KQorCQlnb3RvIHJlcGxhY2VfdG9rZW47CisKK3VwZGF0ZV9wcmlvcml0eToKKwl0cmFjZV91cGRhdGVfc3dhcF90b2tlbl9wcmlvcml0eShtbSwgb2xkX3ByaW8sIHN3YXBfdG9rZW5fbW0pOworCiBvdXQ6CiAJbW0tPmZhdWx0c3RhbXAgPSBnbG9iYWxfZmF1bHRzOwogCW1tLT5sYXN0X2ludGVydmFsID0gY3VycmVudF9pbnRlcnZhbDsKIAlzcGluX3VubG9jaygmc3dhcF90b2tlbl9sb2NrKTsKKwlyZXR1cm47CisKK3JlcGxhY2VfdG9rZW46CisJbW0tPnRva2VuX3ByaW9yaXR5ICs9IDI7CisJdHJhY2VfcmVwbGFjZV9zd2FwX3Rva2VuKHN3YXBfdG9rZW5fbW0sIG1tKTsKKwlzd2FwX3Rva2VuX21tID0gbW07CisJc3dhcF90b2tlbl9tZW1jZyA9IHN3YXBfdG9rZW5fbWVtY2dfZnJvbV9tbShtbSk7CisJbGFzdF9hZ2luZyA9IGdsb2JhbF9mYXVsdHM7CisJZ290byBvdXQ7CiB9CiAKIC8qIENhbGxlZCBvbiBwcm9jZXNzIGV4aXQuICovCiB2b2lkIF9fcHV0X3N3YXBfdG9rZW4oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJc3Bpbl9sb2NrKCZzd2FwX3Rva2VuX2xvY2spOwotCWlmIChsaWtlbHkobW0gPT0gc3dhcF90b2tlbl9tbSkpCisJaWYgKGxpa2VseShtbSA9PSBzd2FwX3Rva2VuX21tKSkgeworCQl0cmFjZV9wdXRfc3dhcF90b2tlbihzd2FwX3Rva2VuX21tKTsKIAkJc3dhcF90b2tlbl9tbSA9IE5VTEw7CisJCXN3YXBfdG9rZW5fbWVtY2cgPSBOVUxMOworCX0KIAlzcGluX3VubG9jaygmc3dhcF90b2tlbl9sb2NrKTsKIH0KKworc3RhdGljIGJvb2wgbWF0Y2hfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKmEsIHN0cnVjdCBtZW1fY2dyb3VwICpiKQoreworCWlmICghYSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKCFiKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoYSA9PSBiKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgZGlzYWJsZV9zd2FwX3Rva2VuKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKK3sKKwkvKiBtZW1jZyByZWNsYWltIGRvbid0IGRpc2FibGUgdW5yZWxhdGVkIG1tIHRva2VuLiAqLworCWlmIChtYXRjaF9tZW1jZyhtZW1jZywgc3dhcF90b2tlbl9tZW1jZykpIHsKKwkJc3Bpbl9sb2NrKCZzd2FwX3Rva2VuX2xvY2spOworCQlpZiAobWF0Y2hfbWVtY2cobWVtY2csIHN3YXBfdG9rZW5fbWVtY2cpKSB7CisJCQl0cmFjZV9kaXNhYmxlX3N3YXBfdG9rZW4oc3dhcF90b2tlbl9tbSk7CisJCQlzd2FwX3Rva2VuX21tID0gTlVMTDsKKwkJCXN3YXBfdG9rZW5fbWVtY2cgPSBOVUxMOworCQl9CisJCXNwaW5fdW5sb2NrKCZzd2FwX3Rva2VuX2xvY2spOworCX0KK30KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZmFhMGEwOC4uOGZmODM0ZSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTExMjQsOCArMTEyNCwyMCBAQAogCQkJCQlucl9sdW1weV9kaXJ0eSsrOwogCQkJCXNjYW4rKzsKIAkJCX0gZWxzZSB7Ci0JCQkJLyogdGhlIHBhZ2UgaXMgZnJlZWQgYWxyZWFkeS4gKi8KLQkJCQlpZiAoIXBhZ2VfY291bnQoY3Vyc29yX3BhZ2UpKQorCQkJCS8qCisJCQkJICogQ2hlY2sgaWYgdGhlIHBhZ2UgaXMgZnJlZWQgYWxyZWFkeS4KKwkJCQkgKgorCQkJCSAqIFdlIGNhbid0IHVzZSBwYWdlX2NvdW50KCkgYXMgdGhhdAorCQkJCSAqIHJlcXVpcmVzIGNvbXBvdW5kX2hlYWQgYW5kIHdlIGRvbid0CisJCQkJICogaGF2ZSBhIHBpbiBvbiB0aGUgcGFnZSBoZXJlLiBJZiBhCisJCQkJICogcGFnZSBpcyB0YWlsLCB3ZSBtYXkgb3IgbWF5IG5vdAorCQkJCSAqIGhhdmUgaXNvbGF0ZWQgdGhlIGhlYWQsIHNvIGFzc3VtZQorCQkJCSAqIGl0J3Mgbm90IGZyZWUsIGl0J2QgYmUgdHJpY2t5IHRvCisJCQkJICogdHJhY2sgdGhlIGhlYWQgc3RhdHVzIHdpdGhvdXQgYQorCQkJCSAqIHBhZ2UgcGluLgorCQkJCSAqLworCQkJCWlmICghUGFnZVRhaWwoY3Vyc29yX3BhZ2UpICYmCisJCQkJICAgICFhdG9taWNfcmVhZCgmY3Vyc29yX3BhZ2UtPl9jb3VudCkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjA4MSw3ICsyMDkzLDcgQEAKIAlmb3IgKHByaW9yaXR5ID0gREVGX1BSSU9SSVRZOyBwcmlvcml0eSA+PSAwOyBwcmlvcml0eS0tKSB7CiAJCXNjLT5ucl9zY2FubmVkID0gMDsKIAkJaWYgKCFwcmlvcml0eSkKLQkJCWRpc2FibGVfc3dhcF90b2tlbigpOworCQkJZGlzYWJsZV9zd2FwX3Rva2VuKHNjLT5tZW1fY2dyb3VwKTsKIAkJdG90YWxfc2Nhbm5lZCArPSBzaHJpbmtfem9uZXMocHJpb3JpdHksIHpvbmVsaXN0LCBzYyk7CiAJCS8qCiAJCSAqIERvbid0IHNocmluayBzbGFicyB3aGVuIHJlY2xhaW1pbmcgbWVtb3J5IGZyb20KQEAgLTI0MDcsNyArMjQxOSw3IEBACiAKIAkJLyogVGhlIHN3YXAgdG9rZW4gZ2V0cyBpbiB0aGUgd2F5IG9mIHN3YXBvdXQuLi4gKi8KIAkJaWYgKCFwcmlvcml0eSkKLQkJCWRpc2FibGVfc3dhcF90b2tlbigpOworCQkJZGlzYWJsZV9zd2FwX3Rva2VuKE5VTEwpOwogCiAJCWFsbF96b25lc19vayA9IDE7CiAJCWJhbGFuY2VkID0gMDsKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2NvcmUuYyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwppbmRleCA0MTQ5NWRjMi4uZmNjNjg0NiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCisrKyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwpAQCAtMjMsNiArMjMsMzEgQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJc2tiLT5kZXYgPSB2bGFuX2RldjsKKwlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUKSB7CisJCS8qIE91ciBsb3dlciBsYXllciB0aGlua3MgdGhpcyBpcyBub3QgbG9jYWwsIGxldCdzIG1ha2Ugc3VyZS4KKwkJICogVGhpcyBhbGxvd3MgdGhlIFZMQU4gdG8gaGF2ZSBhIGRpZmZlcmVudCBNQUMgdGhhbiB0aGUKKwkJICogdW5kZXJseWluZyBkZXZpY2UsIGFuZCBzdGlsbCByb3V0ZSBjb3JyZWN0bHkuICovCisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0+aF9kZXN0LAorCQkJCQl2bGFuX2Rldi0+ZGV2X2FkZHIpKQorCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOworCX0KKworCWlmICghKHZsYW5fZGV2X2luZm8odmxhbl9kZXYpLT5mbGFncyAmIFZMQU5fRkxBR19SRU9SREVSX0hEUikpIHsKKwkJdW5zaWduZWQgaW50IG9mZnNldCA9IHNrYi0+ZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7CisKKwkJLyoKKwkJICogdmxhbl9pbnNlcnRfdGFnIGV4cGVjdCBza2ItPmRhdGEgcG9pbnRpbmcgdG8gbWFjIGhlYWRlci4KKwkJICogU28gY2hhbmdlIHNrYi0+ZGF0YSBiZWZvcmUgY2FsbGluZyBpdCBhbmQgY2hhbmdlIGJhY2sgdG8KKwkJICogb3JpZ2luYWwgcG9zaXRpb24gbGF0ZXIKKwkJICovCisJCXNrYl9wdXNoKHNrYiwgb2Zmc2V0KTsKKwkJc2tiID0gKnNrYnAgPSB2bGFuX2luc2VydF90YWcoc2tiLCBza2ItPnZsYW5fdGNpKTsKKwkJaWYgKCFza2IpCisJCQlyZXR1cm4gZmFsc2U7CisJCXNrYl9wdWxsKHNrYiwgb2Zmc2V0ICsgVkxBTl9ITEVOKTsKKwkJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKKwl9CisKIAlza2ItPnByaW9yaXR5ID0gdmxhbl9nZXRfaW5ncmVzc19wcmlvcml0eSh2bGFuX2Rldiwgc2tiLT52bGFuX3RjaSk7CiAJc2tiLT52bGFuX3RjaSA9IDA7CiAKQEAgLTMxLDIyICs1Niw4IEBACiAJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmcnhfc3RhdHMtPnN5bmNwKTsKIAlyeF9zdGF0cy0+cnhfcGFja2V0cysrOwogCXJ4X3N0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQotCXN3aXRjaCAoc2tiLT5wa3RfdHlwZSkgewotCWNhc2UgUEFDS0VUX0JST0FEQ0FTVDoKLQkJYnJlYWs7Ci0JY2FzZSBQQUNLRVRfTVVMVElDQVNUOgorCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpCiAJCXJ4X3N0YXRzLT5yeF9tdWx0aWNhc3QrKzsKLQkJYnJlYWs7Ci0JY2FzZSBQQUNLRVRfT1RIRVJIT1NUOgotCQkvKiBPdXIgbG93ZXIgbGF5ZXIgdGhpbmtzIHRoaXMgaXMgbm90IGxvY2FsLCBsZXQncyBtYWtlIHN1cmUuCi0JCSAqIFRoaXMgYWxsb3dzIHRoZSBWTEFOIHRvIGhhdmUgYSBkaWZmZXJlbnQgTUFDIHRoYW4gdGhlCi0JCSAqIHVuZGVybHlpbmcgZGV2aWNlLCBhbmQgc3RpbGwgcm91dGUgY29ycmVjdGx5LiAqLwotCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihldGhfaGRyKHNrYiktPmhfZGVzdCwKLQkJCQkJdmxhbl9kZXYtPmRldl9hZGRyKSkKLQkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKLQkJYnJlYWs7Ci0JfQogCXU2NF9zdGF0c191cGRhdGVfZW5kKCZyeF9zdGF0cy0+c3luY3ApOwogCiAJcmV0dXJuIHRydWU7CkBAIC04OSwxOCArMTAwLDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHZsYW5fZ3JvX2ZyYWdzKTsKIAotc3RhdGljIHN0cnVjdCBza19idWZmICp2bGFuX2NoZWNrX3Jlb3JkZXJfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZsYW5fcmVvcmRlcl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAodmxhbl9kZXZfaW5mbyhza2ItPmRldiktPmZsYWdzICYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSB7Ci0JCWlmIChza2JfY293KHNrYiwgc2tiX2hlYWRyb29tKHNrYikpIDwgMCkKLQkJCXNrYiA9IE5VTEw7Ci0JCWlmIChza2IpIHsKLQkJCS8qIExpZnRlZCBmcm9tIEdsZWIncyBWTEFOIGNvZGUuLi4gKi8KLQkJCW1lbW1vdmUoc2tiLT5kYXRhIC0gRVRIX0hMRU4sCi0JCQkJc2tiLT5kYXRhIC0gVkxBTl9FVEhfSExFTiwgMTIpOwotCQkJc2tiLT5tYWNfaGVhZGVyICs9IFZMQU5fSExFTjsKLQkJfQotCX0KKwlpZiAoc2tiX2Nvdyhza2IsIHNrYl9oZWFkcm9vbShza2IpKSA8IDApCisJCXJldHVybiBOVUxMOworCW1lbW1vdmUoc2tiLT5kYXRhIC0gRVRIX0hMRU4sIHNrYi0+ZGF0YSAtIFZMQU5fRVRIX0hMRU4sIDIgKiBFVEhfQUxFTik7CisJc2tiLT5tYWNfaGVhZGVyICs9IFZMQU5fSExFTjsKKwlza2JfcmVzZXRfbWFjX2xlbihza2IpOwogCXJldHVybiBza2I7CiB9CiAKQEAgLTE2MSw3ICsxNjcsNyBAQAogCXNrYl9wdWxsX3Jjc3VtKHNrYiwgVkxBTl9ITEVOKTsKIAl2bGFuX3NldF9lbmNhcF9wcm90byhza2IsIHZoZHIpOwogCi0Jc2tiID0gdmxhbl9jaGVja19yZW9yZGVyX2hlYWRlcihza2IpOworCXNrYiA9IHZsYW5fcmVvcmRlcl9oZWFkZXIoc2tiKTsKIAlpZiAodW5saWtlbHkoIXNrYikpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2Rldi5jIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKaW5kZXggZjI0N2Y1Yi4uN2VhNWNmOSAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZzdGF0cy0+c3luY3ApOwogCQlzdGF0cy0+dHhfcGFja2V0cysrOwogCQlzdGF0cy0+dHhfYnl0ZXMgKz0gbGVuOwotCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZzdGF0cy0+c3luY3ApOworCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmc3RhdHMtPnN5bmNwKTsKIAl9IGVsc2UgewogCQl0aGlzX2NwdV9pbmModmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX3BjcHVfc3RhdHMtPnR4X2Ryb3BwZWQpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jIGIvbmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMKaW5kZXggYTg2ZjliYS4uZTY0YTFjMiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMKQEAgLTkwNiw3ICs5MDYsNyBAQAogCQlpZiAoYy0+cHNtID09IHBzbSkgewogCQkJLyogRXhhY3QgbWF0Y2guICovCiAJCQlpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgc3JjKSkgewotCQkJCXJlYWRfdW5sb2NrX2JoKCZjaGFuX2xpc3RfbG9jayk7CisJCQkJcmVhZF91bmxvY2soJmNoYW5fbGlzdF9sb2NrKTsKIAkJCQlyZXR1cm4gYzsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggM2ZhMTIzMS4uNTYxNDllYyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC0xMDQsMTAgKzEwNCwxNiBAQAogewogfQogCitzdGF0aWMgdTMyICpmYWtlX2Nvd19tZXRyaWNzKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdW5zaWduZWQgbG9uZyBvbGQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBmYWtlX2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAogCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLnVwZGF0ZV9wbXR1ID0JCWZha2VfdXBkYXRlX3BtdHUsCisJLmNvd19tZXRyaWNzID0JCWZha2VfY293X21ldHJpY3MsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2hubF9uZXQuYyBiL25ldC9jYWlmL2NobmxfbmV0LmMKaW5kZXggNjQ5ZWJhYy4uYWRiYjQyNCAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2hubF9uZXQuYworKysgYi9uZXQvY2FpZi9jaG5sX25ldC5jCkBAIC0xMzksMTcgKzEzOSwxNCBAQAogCXN0cnVjdCBjaG5sX25ldCAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X25vZGU7CiAJc3RydWN0IGxpc3RfaGVhZCAqX3RtcDsKLQkvKiBNYXkgYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBSVE5MIGxvY2sgaGVsZCAqLwotCWludCBpc2xvY2tlZCA9IHJ0bmxfaXNfbG9ja2VkKCk7Ci0JaWYgKCFpc2xvY2tlZCkKLQkJcnRubF9sb2NrKCk7CisKKwlydG5sX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9ub2RlLCBfdG1wLCAmY2hubF9uZXRfbGlzdCkgewogCQlkZXYgPSBsaXN0X2VudHJ5KGxpc3Rfbm9kZSwgc3RydWN0IGNobmxfbmV0LCBsaXN0X2ZpZWxkKTsKIAkJaWYgKGRldi0+c3RhdGUgPT0gQ0FJRl9TSFVURE9XTikKIAkJCWRldl9jbG9zZShkZXYtPm5ldGRldik7CiAJfQotCWlmICghaXNsb2NrZWQpCi0JCXJ0bmxfdW5sb2NrKCk7CisJcnRubF91bmxvY2soKTsKIH0KIHN0YXRpYyBERUNMQVJFX1dPUksoY2xvc2Vfd29ya2VyLCBjbG9zZV93b3JrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvb3NkX2NsaWVudC5jIGIvbmV0L2NlcGgvb3NkX2NsaWVudC5jCmluZGV4IDZlYTJiODkuLjljYjYyN2EgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL29zZF9jbGllbnQuYworKysgYi9uZXQvY2VwaC9vc2RfY2xpZW50LmMKQEAgLTExNDQsNiArMTE0NCwxMyBAQAogCQkJICAgICAgcm91bmRfamlmZmllc19yZWxhdGl2ZShkZWxheSkpOwogfQogCitzdGF0aWMgdm9pZCBjb21wbGV0ZV9yZXF1ZXN0KHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+cl9zYWZlX2NhbGxiYWNrKQorCQlyZXEtPnJfc2FmZV9jYWxsYmFjayhyZXEsIE5VTEwpOworCWNvbXBsZXRlX2FsbCgmcmVxLT5yX3NhZmVfY29tcGxldGlvbik7ICAvKiBmc3luYyB3YWl0ZXIgKi8KK30KKwogLyoKICAqIGhhbmRsZSBvc2Qgb3AgcmVwbHkuICBlaXRoZXIgY2FsbCB0aGUgY2FsbGJhY2sgaWYgaXQgaXMgc3BlY2lmaWVkLAogICogb3IgZG8gdGhlIGNvbXBsZXRpb24gdG8gd2FrZSB1cCB0aGUgd2FpdGluZyB0aHJlYWQuCkBAIC0xMjI2LDExICsxMjMzLDggQEAKIAllbHNlCiAJCWNvbXBsZXRlX2FsbCgmcmVxLT5yX2NvbXBsZXRpb24pOwogCi0JaWYgKGZsYWdzICYgQ0VQSF9PU0RfRkxBR19PTkRJU0spIHsKLQkJaWYgKHJlcS0+cl9zYWZlX2NhbGxiYWNrKQotCQkJcmVxLT5yX3NhZmVfY2FsbGJhY2socmVxLCBtc2cpOwotCQljb21wbGV0ZV9hbGwoJnJlcS0+cl9zYWZlX2NvbXBsZXRpb24pOyAgLyogZnN5bmMgd2FpdGVyICovCi0JfQorCWlmIChmbGFncyAmIENFUEhfT1NEX0ZMQUdfT05ESVNLKQorCQljb21wbGV0ZV9yZXF1ZXN0KHJlcSk7CiAKIGRvbmU6CiAJZG91dCgicmVxPSVwIHJlcS0+cl9saW5nZXI9JWRcbiIsIHJlcSwgcmVxLT5yX2xpbmdlcik7CkBAIC0xNzMyLDYgKzE3MzYsNyBAQAogCQlfX2NhbmNlbF9yZXF1ZXN0KHJlcSk7CiAJCV9fdW5yZWdpc3Rlcl9yZXF1ZXN0KG9zZGMsIHJlcSk7CiAJCW11dGV4X3VubG9jaygmb3NkYy0+cmVxdWVzdF9tdXRleCk7CisJCWNvbXBsZXRlX3JlcXVlc3QocmVxKTsKIAkJZG91dCgid2FpdF9yZXF1ZXN0IHRpZCAlbGx1IGNhbmNlbGVkL3RpbWVkIG91dFxuIiwgcmVxLT5yX3RpZCk7CiAJCXJldHVybiByYzsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGM3ZTMwNWQuLjljNThjMWUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0yMDk2LDYgKzIwOTYsNyBAQAogewogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LT5uZXRkZXZfb3BzOwogCWludCByYyA9IE5FVERFVl9UWF9PSzsKKwl1bnNpZ25lZCBpbnQgc2tiX2xlbjsKIAogCWlmIChsaWtlbHkoIXNrYi0+bmV4dCkpIHsKIAkJdTMyIGZlYXR1cmVzOwpAQCAtMjE0Niw4ICsyMTQ3LDkgQEAKIAkJCX0KIAkJfQogCisJCXNrYl9sZW4gPSBza2ItPmxlbjsKIAkJcmMgPSBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKLQkJdHJhY2VfbmV0X2Rldl94bWl0KHNrYiwgcmMpOworCQl0cmFjZV9uZXRfZGV2X3htaXQoc2tiLCByYywgZGV2LCBza2JfbGVuKTsKIAkJaWYgKHJjID09IE5FVERFVl9UWF9PSykKIAkJCXR4cV90cmFuc191cGRhdGUodHhxKTsKIAkJcmV0dXJuIHJjOwpAQCAtMjE2Nyw4ICsyMTY5LDkgQEAKIAkJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9YTUlUX0RTVF9SRUxFQVNFKQogCQkJc2tiX2RzdF9kcm9wKG5za2IpOwogCisJCXNrYl9sZW4gPSBuc2tiLT5sZW47CiAJCXJjID0gb3BzLT5uZG9fc3RhcnRfeG1pdChuc2tiLCBkZXYpOwotCQl0cmFjZV9uZXRfZGV2X3htaXQobnNrYiwgcmMpOworCQl0cmFjZV9uZXRfZGV2X3htaXQobnNrYiwgcmMsIGRldiwgc2tiX2xlbik7CiAJCWlmICh1bmxpa2VseShyYyAhPSBORVRERVZfVFhfT0spKSB7CiAJCQlpZiAocmMgJiB+TkVUREVWX1RYX01BU0spCiAJCQkJZ290byBvdXRfa2ZyZWVfZ3NvX3NrYjsKQEAgLTMxMTEsNyArMzExNCw3IEBACiAKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwotCXNrYi0+bWFjX2xlbiA9IHNrYi0+bmV0d29ya19oZWFkZXIgLSBza2ItPm1hY19oZWFkZXI7CisJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAogCXB0X3ByZXYgPSBOVUxMOwogCkBAIC02MTc1LDYgKzYxNzgsMTEgQEAKIAkJb2xkc2QtPm91dHB1dF9xdWV1ZSA9IE5VTEw7CiAJCW9sZHNkLT5vdXRwdXRfcXVldWVfdGFpbHAgPSAmb2xkc2QtPm91dHB1dF9xdWV1ZTsKIAl9CisJLyogQXBwZW5kIE5BUEkgcG9sbCBsaXN0IGZyb20gb2ZmbGluZSBDUFUuICovCisJaWYgKCFsaXN0X2VtcHR5KCZvbGRzZC0+cG9sbF9saXN0KSkgeworCQlsaXN0X3NwbGljZV9pbml0KCZvbGRzZC0+cG9sbF9saXN0LCAmc2QtPnBvbGxfbGlzdCk7CisJCXJhaXNlX3NvZnRpcnFfaXJxb2ZmKE5FVF9SWF9TT0ZUSVJRKTsKKwl9CiAKIAlyYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfVFhfU09GVElSUSk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtNjI2MSwyOSArNjI2OSwyMyBAQAogLyoqCiAgKgluZXRkZXZfZHJpdmVybmFtZSAtIG5ldHdvcmsgZHJpdmVyIGZvciB0aGUgZGV2aWNlCiAgKglAZGV2OiBuZXR3b3JrIGRldmljZQotICoJQGJ1ZmZlcjogYnVmZmVyIGZvciByZXN1bHRpbmcgbmFtZQotICoJQGxlbjogc2l6ZSBvZiBidWZmZXIKICAqCiAgKglEZXRlcm1pbmUgbmV0d29yayBkcml2ZXIgZm9yIGRldmljZS4KICAqLwotY2hhciAqbmV0ZGV2X2RyaXZlcm5hbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqYnVmZmVyLCBpbnQgbGVuKQorY29uc3QgY2hhciAqbmV0ZGV2X2RyaXZlcm5hbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyOwogCWNvbnN0IHN0cnVjdCBkZXZpY2UgKnBhcmVudDsKLQotCWlmIChsZW4gPD0gMCB8fCAhYnVmZmVyKQotCQlyZXR1cm4gYnVmZmVyOwotCWJ1ZmZlclswXSA9IDA7CisJY29uc3QgY2hhciAqZW1wdHkgPSAiIjsKIAogCXBhcmVudCA9IGRldi0+ZGV2LnBhcmVudDsKLQogCWlmICghcGFyZW50KQotCQlyZXR1cm4gYnVmZmVyOworCQlyZXR1cm4gZW1wdHk7CiAKIAlkcml2ZXIgPSBwYXJlbnQtPmRyaXZlcjsKIAlpZiAoZHJpdmVyICYmIGRyaXZlci0+bmFtZSkKLQkJc3RybGNweShidWZmZXIsIGRyaXZlci0+bmFtZSwgbGVuKTsKLQlyZXR1cm4gYnVmZmVyOworCQlyZXR1cm4gZHJpdmVyLT5uYW1lOworCXJldHVybiBlbXB0eTsKIH0KIAogc3RhdGljIGludCBfX25ldGRldl9wcmludGsoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDExYjk4YmMuLjMzZDJhMWYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0xMTc5LDkgKzExNzksMTQgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgY29uc3Qgdm9pZCAqbmV0X2N1cnJlbnRfbnModm9pZCkKK3N0YXRpYyB2b2lkICpuZXRfZ3JhYl9jdXJyZW50X25zKHZvaWQpCiB7Ci0JcmV0dXJuIGN1cnJlbnQtPm5zcHJveHktPm5ldF9uczsKKwlzdHJ1Y3QgbmV0ICpucyA9IGN1cnJlbnQtPm5zcHJveHktPm5ldF9uczsKKyNpZmRlZiBDT05GSUdfTkVUX05TCisJaWYgKG5zKQorCQlhdG9taWNfaW5jKCZucy0+cGFzc2l2ZSk7CisjZW5kaWYKKwlyZXR1cm4gbnM7CiB9CiAKIHN0YXRpYyBjb25zdCB2b2lkICpuZXRfaW5pdGlhbF9ucyh2b2lkKQpAQCAtMTE5NiwyMiArMTIwMSwxMyBAQAogCiBzdHJ1Y3Qga29ial9uc190eXBlX29wZXJhdGlvbnMgbmV0X25zX3R5cGVfb3BlcmF0aW9ucyA9IHsKIAkudHlwZSA9IEtPQkpfTlNfVFlQRV9ORVQsCi0JLmN1cnJlbnRfbnMgPSBuZXRfY3VycmVudF9ucywKKwkuZ3JhYl9jdXJyZW50X25zID0gbmV0X2dyYWJfY3VycmVudF9ucywKIAkubmV0bGlua19ucyA9IG5ldF9uZXRsaW5rX25zLAogCS5pbml0aWFsX25zID0gbmV0X2luaXRpYWxfbnMsCisJLmRyb3BfbnMgPSBuZXRfZHJvcF9ucywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChuZXRfbnNfdHlwZV9vcGVyYXRpb25zKTsKIAotc3RhdGljIHZvaWQgbmV0X2tvYmpfbnNfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCi17Ci0Ja29ial9uc19leGl0KEtPQkpfTlNfVFlQRV9ORVQsIG5ldCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMga29ial9uZXRfb3BzID0gewotCS5leGl0ID0gbmV0X2tvYmpfbnNfZXhpdCwKLX07Ci0KLQogI2lmZGVmIENPTkZJR19IT1RQTFVHCiBzdGF0aWMgaW50IG5ldGRldl91ZXZlbnQoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQogewpAQCAtMTMzOSw2ICsxMzM1LDUgQEAKIGludCBuZXRkZXZfa29iamVjdF9pbml0KHZvaWQpCiB7CiAJa29ial9uc190eXBlX3JlZ2lzdGVyKCZuZXRfbnNfdHlwZV9vcGVyYXRpb25zKTsKLQlyZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZrb2JqX25ldF9vcHMpOwogCXJldHVybiBjbGFzc19yZWdpc3RlcigmbmV0X2NsYXNzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCA2YzZiODZkLi5lYTQ4OWRiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKKysrIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC0xMjgsNiArMTI4LDcgQEAKIAlMSVNUX0hFQUQobmV0X2V4aXRfbGlzdCk7CiAKIAlhdG9taWNfc2V0KCZuZXQtPmNvdW50LCAxKTsKKwlhdG9taWNfc2V0KCZuZXQtPnBhc3NpdmUsIDEpOwogCiAjaWZkZWYgTkVUTlNfUkVGQ05UX0RFQlVHCiAJYXRvbWljX3NldCgmbmV0LT51c2VfY291bnQsIDApOwpAQCAtMjEwLDYgKzIxMSwxMyBAQAogCWttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpOwogfQogCit2b2lkIG5ldF9kcm9wX25zKHZvaWQgKnApCit7CisJc3RydWN0IG5ldCAqbnMgPSBwOworCWlmIChucyAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZucy0+cGFzc2l2ZSkpCisJCW5ldF9mcmVlKG5zKTsKK30KKwogc3RydWN0IG5ldCAqY29weV9uZXRfbnModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IG5ldCAqb2xkX25ldCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CkBAIC0yMzAsNyArMjM4LDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZuZXRfbXV0ZXgpOwogCWlmIChydiA8IDApIHsKLQkJbmV0X2ZyZWUobmV0KTsKKwkJbmV0X2Ryb3BfbnMobmV0KTsKIAkJcmV0dXJuIEVSUl9QVFIocnYpOwogCX0KIAlyZXR1cm4gbmV0OwpAQCAtMjg2LDcgKzI5NCw3IEBACiAJLyogRmluYWxseSBpdCBpcyBzYWZlIHRvIGZyZWUgbXkgbmV0d29yayBuYW1lc3BhY2Ugc3RydWN0dXJlICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5ldCwgdG1wLCAmbmV0X2V4aXRfbGlzdCwgZXhpdF9saXN0KSB7CiAJCWxpc3RfZGVsX2luaXQoJm5ldC0+ZXhpdF9saXN0KTsKLQkJbmV0X2ZyZWUobmV0KTsKKwkJbmV0X2Ryb3BfbnMobmV0KTsKIAl9CiB9CiBzdGF0aWMgREVDTEFSRV9XT1JLKG5ldF9jbGVhbnVwX3dvcmssIGNsZWFudXBfbmV0KTsKQEAgLTMxMCwxOSArMzE4LDE3IEBACiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJc3RydWN0IG5ldCAqbmV0OwogCi0JbmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAlmaWxlID0gcHJvY19uc19mZ2V0KGZkKTsKLQlpZiAoIWZpbGUpCi0JCWdvdG8gb3V0OworCWlmIChJU19FUlIoZmlsZSkpCisJCXJldHVybiBFUlJfQ0FTVChmaWxlKTsKIAogCWVpID0gUFJPQ19JKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKLQlpZiAoZWktPm5zX29wcyAhPSAmbmV0bnNfb3BlcmF0aW9ucykKLQkJZ290byBvdXQ7CisJaWYgKGVpLT5uc19vcHMgPT0gJm5ldG5zX29wZXJhdGlvbnMpCisJCW5ldCA9IGdldF9uZXQoZWktPm5zKTsKKwllbHNlCisJCW5ldCA9IEVSUl9QVFIoLUVJTlZBTCk7CiAKLQluZXQgPSBnZXRfbmV0KGVpLT5ucyk7Ci1vdXQ6Ci0JaWYgKGZpbGUpCi0JCWZwdXQoZmlsZSk7CisJZnB1dChmaWxlKTsKIAlyZXR1cm4gbmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggMmQ3ZDZkNC4uMThkOWNiZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jCisrKyBiL25ldC9jb3JlL25ldHBvbGwuYwpAQCAtNzkyLDYgKzc5MiwxMyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlpZiAobmRldi0+bWFzdGVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIGlzIGEgc2xhdmUgZGV2aWNlLCBhYm9ydGluZy5cbiIsCisJCSAgICAgICBucC0+bmFtZSwgbnAtPmRldl9uYW1lKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIHB1dDsKKwl9CisKIAlpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpIHsKIAkJdW5zaWduZWQgbG9uZyBhdG1vc3QsIGF0bGVhc3Q7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCBjYzE0NjMxLi45YzE5MjYwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC00NjUsNiArNDY1LDkgQEAKIAlpZiAoYWRkcl9sZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkKIAkJZ290byBvdXQ7CiAKKwlpZiAoYWRkci0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKQorCQlnb3RvIG91dDsKKwogCWNoa19hZGRyX3JldCA9IGluZXRfYWRkcl90eXBlKHNvY2tfbmV0KHNrKSwgYWRkci0+c2luX2FkZHIuc19hZGRyKTsKIAogCS8qIE5vdCBzcGVjaWZpZWQgYnkgYW55IHN0YW5kYXJkIHBlci1zZSwgaG93ZXZlciBpdCBicmVha3MgdG9vCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKaW5kZXggYzMxMThlMS4uZWM5MzMzNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCisrKyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcC5oPgpAQCAtMzUwLDcgKzM1MSw3IEBACiAJCQkJZ290byBlcnJvcjsKIAkJCX0KIAkJCWlmIChvcHRwdHJbMl0gPD0gb3B0bGVuKSB7Ci0JCQkJX19iZTMyICp0aW1lcHRyID0gTlVMTDsKKwkJCQl1bnNpZ25lZCBjaGFyICp0aW1lcHRyID0gTlVMTDsKIAkJCQlpZiAob3B0cHRyWzJdKzMgPiBvcHRwdHJbMV0pIHsKIAkJCQkJcHBfcHRyID0gb3B0cHRyICsgMjsKIAkJCQkJZ290byBlcnJvcjsKQEAgLTM1OSw3ICszNjAsNyBAQAogCQkJCSAgICAgIGNhc2UgSVBPUFRfVFNfVFNPTkxZOgogCQkJCQlvcHQtPnRzID0gb3B0cHRyIC0gaXBoOwogCQkJCQlpZiAoc2tiKQotCQkJCQkJdGltZXB0ciA9IChfX2JlMzIqKSZvcHRwdHJbb3B0cHRyWzJdLTFdOworCQkJCQkJdGltZXB0ciA9ICZvcHRwdHJbb3B0cHRyWzJdLTFdOwogCQkJCQlvcHQtPnRzX25lZWR0aW1lID0gMTsKIAkJCQkJb3B0cHRyWzJdICs9IDQ7CiAJCQkJCWJyZWFrOwpAQCAtMzcxLDcgKzM3Miw3IEBACiAJCQkJCW9wdC0+dHMgPSBvcHRwdHIgLSBpcGg7CiAJCQkJCWlmIChydCkgIHsKIAkJCQkJCW1lbWNweSgmb3B0cHRyW29wdHB0clsyXS0xXSwgJnJ0LT5ydF9zcGVjX2RzdCwgNCk7Ci0JCQkJCQl0aW1lcHRyID0gKF9fYmUzMiopJm9wdHB0cltvcHRwdHJbMl0rM107CisJCQkJCQl0aW1lcHRyID0gJm9wdHB0cltvcHRwdHJbMl0rM107CiAJCQkJCX0KIAkJCQkJb3B0LT50c19uZWVkYWRkciA9IDE7CiAJCQkJCW9wdC0+dHNfbmVlZHRpbWUgPSAxOwpAQCAtMzg5LDcgKzM5MCw3IEBACiAJCQkJCQlpZiAoaW5ldF9hZGRyX3R5cGUobmV0LCBhZGRyKSA9PSBSVE5fVU5JQ0FTVCkKIAkJCQkJCQlicmVhazsKIAkJCQkJCWlmIChza2IpCi0JCQkJCQkJdGltZXB0ciA9IChfX2JlMzIqKSZvcHRwdHJbb3B0cHRyWzJdKzNdOworCQkJCQkJCXRpbWVwdHIgPSAmb3B0cHRyW29wdHB0clsyXSszXTsKIAkJCQkJfQogCQkJCQlvcHQtPnRzX25lZWR0aW1lID0gMTsKIAkJCQkJb3B0cHRyWzJdICs9IDg7CkBAIC00MDMsMTAgKzQwNCwxMCBAQAogCQkJCX0KIAkJCQlpZiAodGltZXB0cikgewogCQkJCQlzdHJ1Y3QgdGltZXNwZWMgdHY7Ci0JCQkJCV9fYmUzMiAgbWlkdGltZTsKKwkJCQkJdTMyICBtaWR0aW1lOwogCQkJCQlnZXRuc3RpbWVvZmRheSgmdHYpOwotCQkJCQltaWR0aW1lID0gaHRvbmwoKHR2LnR2X3NlYyAlIDg2NDAwKSAqIE1TRUNfUEVSX1NFQyArIHR2LnR2X25zZWMgLyBOU0VDX1BFUl9NU0VDKTsKLQkJCQkJbWVtY3B5KHRpbWVwdHIsICZtaWR0aW1lLCBzaXplb2YoX19iZTMyKSk7CisJCQkJCW1pZHRpbWUgPSAodHYudHZfc2VjICUgODY0MDApICogTVNFQ19QRVJfU0VDICsgdHYudHZfbnNlYyAvIE5TRUNfUEVSX01TRUM7CisJCQkJCXB1dF91bmFsaWduZWRfYmUzMihtaWR0aW1lLCB0aW1lcHRyKTsKIAkJCQkJb3B0LT5pc19jaGFuZ2VkID0gMTsKIAkJCQl9CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwppbmRleCA5OGFmMzY5Li5hODAyNGVhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwpAQCAtNzk5LDcgKzc5OSw5IEBACiAJaW50IGNzdW1tb2RlID0gQ0hFQ0tTVU1fTk9ORTsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopY29yay0+ZHN0OwogCi0JZXh0aGRybGVuID0gdHJhbnNoZHJsZW4gPyBydC0+ZHN0LmhlYWRlcl9sZW4gOiAwOworCXNrYiA9IHNrYl9wZWVrX3RhaWwocXVldWUpOworCisJZXh0aGRybGVuID0gIXNrYiA/IHJ0LT5kc3QuaGVhZGVyX2xlbiA6IDA7CiAJbGVuZ3RoICs9IGV4dGhkcmxlbjsKIAl0cmFuc2hkcmxlbiArPSBleHRoZHJsZW47CiAJbXR1ID0gY29yay0+ZnJhZ3NpemU7CkBAIC04MjUsOCArODI3LDYgQEAKIAkgICAgIWV4dGhkcmxlbikKIAkJY3N1bW1vZGUgPSBDSEVDS1NVTV9QQVJUSUFMOwogCi0Jc2tiID0gc2tiX3BlZWtfdGFpbChxdWV1ZSk7Ci0KIAljb3JrLT5sZW5ndGggKz0gbGVuZ3RoOwogCWlmICgoKGxlbmd0aCA+IG10dSkgfHwgKHNrYiAmJiBza2JfaXNfZ3NvKHNrYikpKSAmJgogCSAgICAoc2stPnNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSAmJgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwppbmRleCBkMmMxMzExLi5mN2Y5YmQ3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwpAQCAtNDAyLDcgKzQwMiw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIF9faXBxX3Jjdl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgc3RhdHVzLCB0eXBlLCBwaWQsIGZsYWdzLCBubG1zZ2xlbiwgc2tibGVuOworCWludCBzdGF0dXMsIHR5cGUsIHBpZCwgZmxhZ3M7CisJdW5zaWduZWQgaW50IG5sbXNnbGVuLCBza2JsZW47CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CiAKIAlza2JsZW4gPSBza2ItPmxlbjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCmluZGV4IGQ2MDlhYzMuLjVjOWU5N2MgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJICogZXJyb3IgbWVzc2FnZXMgKFJFTEFURUQpIGFuZCBpbmZvcm1hdGlvbiByZXF1ZXN0cyAoc2VlIGJlbG93KSAqLwogCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QICYmCiAJICAgIChjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCB8fAotCSAgICAgY3RpbmZvID09IElQX0NUX1JFTEFURUQgKyBJUF9DVF9JU19SRVBMWSkpCisJICAgICBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRF9SRVBMWSkpCiAJCXJldHVybiBYVF9DT05USU5VRTsKIAogCS8qIGlwX2Nvbm50cmFja19pY21wIGd1YXJhbnRlZXMgdXMgdGhhdCB3ZSBvbmx5IGhhdmUgSUNNUF9FQ0hPLApAQCAtMzIxLDEyICszMjEsMTIgQEAKIAkJCWN0LT5tYXJrID0gaGFzaDsKIAkJCWJyZWFrOwogCQljYXNlIElQX0NUX1JFTEFURUQ6Ci0JCWNhc2UgSVBfQ1RfUkVMQVRFRCtJUF9DVF9JU19SRVBMWToKKwkJY2FzZSBJUF9DVF9SRUxBVEVEX1JFUExZOgogCQkJLyogRklYTUU6IHdlIGRvbid0IGhhbmRsZSBleHBlY3RhdGlvbnMgYXQgdGhlCiAJCQkgKiBtb21lbnQuICB0aGV5IGNhbiBhcnJpdmUgb24gYSBkaWZmZXJlbnQgbm9kZSB0aGFuCiAJCQkgKiB0aGUgbWFzdGVyIGNvbm5lY3Rpb24gKGUuZy4gRlRQIHBhc3NpdmUgbW9kZSkgKi8KIAkJY2FzZSBJUF9DVF9FU1RBQkxJU0hFRDoKLQkJY2FzZSBJUF9DVF9FU1RBQkxJU0hFRCtJUF9DVF9JU19SRVBMWToKKwkJY2FzZSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWToKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTUFTUVVFUkFERS5jCmluZGV4IGQyZWQ5ZGMuLjk5MzExNTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTUFTUVVFUkFERS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTUFTUVVFUkFERS5jCkBAIC02MCw3ICs2MCw3IEBACiAJbmF0ID0gbmZjdF9uYXQoY3QpOwogCiAJTkZfQ1RfQVNTRVJUKGN0ICYmIChjdGluZm8gPT0gSVBfQ1RfTkVXIHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEIHx8Ci0JCQkgICAgY3RpbmZvID09IElQX0NUX1JFTEFURUQgKyBJUF9DVF9JU19SRVBMWSkpOworCQkJICAgIGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEX1JFUExZKSk7CiAKIAkvKiBTb3VyY2UgYWRkcmVzcyBpcyAwLjAuMC4wIC0gbG9jYWxseSBnZW5lcmF0ZWQgcGFja2V0IHRoYXQgaXMKIAkgKiBwcm9iYWJseSBub3Qgc3VwcG9zZWQgdG8gYmUgbWFzcXVlcmFkZWQuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwppbmRleCA1YTAzYzAyLi5kYjEwMDc1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAJLyogVGhpcyBpcyB3aGVyZSB3ZSBjYWxsIHRoZSBoZWxwZXI6IGFzIHRoZSBwYWNrZXQgZ29lcyBvdXQuICovCiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKLQlpZiAoIWN0IHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpCisJaWYgKCFjdCB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRF9SRVBMWSkKIAkJZ290byBvdXQ7CiAKIAloZWxwID0gbmZjdF9oZWxwKGN0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggNzQwNGJkZS4uYWI1YjI3YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCS8qIFVwZGF0ZSBza2IgdG8gcmVmZXIgdG8gdGhpcyBjb25uZWN0aW9uICovCiAJc2tiLT5uZmN0ID0gJm5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCktPmN0X2dlbmVyYWw7CiAJc2tiLT5uZmN0aW5mbyA9ICpjdGluZm87Ci0JcmV0dXJuIC1ORl9BQ0NFUFQ7CisJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAogLyogU21hbGwgYW5kIG1vZGlmaWVkIHZlcnNpb24gb2YgaWNtcF9yY3YgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggOWM3MWIyNy4uMzM0NmRlNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTQzMyw3ICs0MzMsNyBAQAogCiAJLyogTXVzdCBiZSBSRUxBVEVEICovCiAJTkZfQ1RfQVNTRVJUKHNrYi0+bmZjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCB8fAotCQkgICAgIHNrYi0+bmZjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCtJUF9DVF9JU19SRVBMWSk7CisJCSAgICAgc2tiLT5uZmN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEX1JFUExZKTsKIAogCS8qIFJlZGlyZWN0cyBvbiBub24tbnVsbCBuYXRzIG11c3QgYmUgZHJvcHBlZCwgZWxzZSB0aGV5J2xsCiAJICAgc3RhcnQgdGFsa2luZyB0byBlYWNoIG90aGVyIHdpdGhvdXQgb3VyIHRyYW5zbGF0aW9uLCBhbmQgYmUKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jCmluZGV4IDk5Y2ZhMjguLmViYzVmODggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAKIAlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkgewogCQlpZiAoIShydC0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMKSAmJgotCQkgICAgc2tiLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9WNF9DU1VNKSB7CisJCSAgICAoIXNrYi0+ZGV2IHx8IHNrYi0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVjRfQ1NVTSkpIHsKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAkJCXNrYi0+Y3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICsKIAkJCQkJICBza2JfbmV0d29ya19vZmZzZXQoc2tiKSArCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCmluZGV4IDIxYzMwNDIuLjczM2M5YWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCkBAIC01Myw3ICs1Myw3IEBACiAKIAkvKiBDb25uZWN0aW9uIG11c3QgYmUgdmFsaWQgYW5kIG5ldy4gKi8KIAlORl9DVF9BU1NFUlQoY3QgJiYgKGN0aW5mbyA9PSBJUF9DVF9ORVcgfHwgY3RpbmZvID09IElQX0NUX1JFTEFURUQgfHwKLQkJCSAgICBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZKSk7CisJCQkgICAgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkpKTsKIAlORl9DVF9BU1NFUlQocGFyLT5vdXQgIT0gTlVMTCk7CiAKIAlyZXR1cm4gbmZfbmF0X3NldHVwX2luZm8oY3QsICZtci0+cmFuZ2VbMF0sIElQX05BVF9NQU5JUF9TUkMpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYwppbmRleCA3MzE3YmRmLi40ODNiNzZkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAKIAlzd2l0Y2ggKGN0aW5mbykgewogCWNhc2UgSVBfQ1RfUkVMQVRFRDoKLQljYXNlIElQX0NUX1JFTEFURUQrSVBfQ1RfSVNfUkVQTFk6CisJY2FzZSBJUF9DVF9SRUxBVEVEX1JFUExZOgogCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fSUNNUCkgewogCQkJaWYgKCFuZl9uYXRfaWNtcF9yZXBseV90cmFuc2xhdGlvbihjdCwgY3RpbmZvLAogCQkJCQkJCSAgIGhvb2tudW0sIHNrYikpCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlkZWZhdWx0OgogCQkvKiBFU1RBQkxJU0hFRCAqLwogCQlORl9DVF9BU1NFUlQoY3RpbmZvID09IElQX0NUX0VTVEFCTElTSEVEIHx8Ci0JCQkgICAgIGN0aW5mbyA9PSAoSVBfQ1RfRVNUQUJMSVNIRUQrSVBfQ1RfSVNfUkVQTFkpKTsKKwkJCSAgICAgY3RpbmZvID09IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKTsKIAl9CiAKIAlyZXR1cm4gbmZfbmF0X3BhY2tldChjdCwgY3RpbmZvLCBob29rbnVtLCBza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggNTJiMGI5NS4uMDQ1ZjBlYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xMzE2LDYgKzEzMTYsMjMgQEAKIAk7CiB9CiAKK3N0YXRpYyBib29sIHBlZXJfcG10dV9leHBpcmVkKHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIpCit7CisJdW5zaWduZWQgbG9uZyBvcmlnID0gQUNDRVNTX09OQ0UocGVlci0+cG10dV9leHBpcmVzKTsKKworCXJldHVybiBvcmlnICYmCisJICAgICAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgb3JpZykgJiYKKwkgICAgICAgY21weGNoZygmcGVlci0+cG10dV9leHBpcmVzLCBvcmlnLCAwKSA9PSBvcmlnOworfQorCitzdGF0aWMgYm9vbCBwZWVyX3BtdHVfY2xlYW5lZChzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyKQoreworCXVuc2lnbmVkIGxvbmcgb3JpZyA9IEFDQ0VTU19PTkNFKHBlZXItPnBtdHVfZXhwaXJlcyk7CisKKwlyZXR1cm4gb3JpZyAmJgorCSAgICAgICBjbXB4Y2hnKCZwZWVyLT5wbXR1X2V4cGlyZXMsIG9yaWcsIDApID09IG9yaWc7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X25lZ2F0aXZlX2FkdmljZShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKWRzdDsKQEAgLTEzMzEsMTQgKzEzNDgsOCBAQAogCQkJCQkJcnRfZ2VuaWQoZGV2X25ldChkc3QtPmRldikpKTsKIAkJCXJ0X2RlbChoYXNoLCBydCk7CiAJCQlyZXQgPSBOVUxMOwotCQl9IGVsc2UgaWYgKHJ0LT5wZWVyICYmCi0JCQkgICBydC0+cGVlci0+cG10dV9leHBpcmVzICYmCi0JCQkgICB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJ0LT5wZWVyLT5wbXR1X2V4cGlyZXMpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIG9yaWcgPSBydC0+cGVlci0+cG10dV9leHBpcmVzOwotCi0JCQlpZiAoY21weGNoZygmcnQtPnBlZXItPnBtdHVfZXhwaXJlcywgb3JpZywgMCkgPT0gb3JpZykKLQkJCQlkc3RfbWV0cmljX3NldChkc3QsIFJUQVhfTVRVLAotCQkJCQkgICAgICAgcnQtPnBlZXItPnBtdHVfb3JpZyk7CisJCX0gZWxzZSBpZiAocnQtPnBlZXIgJiYgcGVlcl9wbXR1X2V4cGlyZWQocnQtPnBlZXIpKSB7CisJCQlkc3RfbWV0cmljX3NldChkc3QsIFJUQVhfTVRVLCBydC0+cGVlci0+cG10dV9vcmlnKTsKIAkJfQogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTUzMSw4ICsxNTQyLDEwIEBACiAKIHN0YXRpYyB2b2lkIGNoZWNrX3BlZXJfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBleHBpcmVzID0gcGVlci0+cG10dV9leHBpcmVzOworCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IEFDQ0VTU19PTkNFKHBlZXItPnBtdHVfZXhwaXJlcyk7CiAKKwlpZiAoIWV4cGlyZXMpCisJCXJldHVybjsKIAlpZiAodGltZV9iZWZvcmUoamlmZmllcywgZXhwaXJlcykpIHsKIAkJdTMyIG9yaWdfZHN0X210dSA9IGRzdF9tdHUoZHN0KTsKIAkJaWYgKHBlZXItPnBtdHVfbGVhcm5lZCA8IG9yaWdfZHN0X210dSkgewpAQCAtMTU1NSwxMCArMTU2OCwxMSBAQAogCQlydF9iaW5kX3BlZXIocnQsIHJ0LT5ydF9kc3QsIDEpOwogCXBlZXIgPSBydC0+cGVlcjsKIAlpZiAocGVlcikgeworCQl1bnNpZ25lZCBsb25nIHBtdHVfZXhwaXJlcyA9IEFDQ0VTU19PTkNFKHBlZXItPnBtdHVfZXhwaXJlcyk7CisKIAkJaWYgKG10dSA8IGlwX3J0X21pbl9wbXR1KQogCQkJbXR1ID0gaXBfcnRfbWluX3BtdHU7Ci0JCWlmICghcGVlci0+cG10dV9leHBpcmVzIHx8IG10dSA8IHBlZXItPnBtdHVfbGVhcm5lZCkgewotCQkJdW5zaWduZWQgbG9uZyBwbXR1X2V4cGlyZXM7CisJCWlmICghcG10dV9leHBpcmVzIHx8IG10dSA8IHBlZXItPnBtdHVfbGVhcm5lZCkgewogCiAJCQlwbXR1X2V4cGlyZXMgPSBqaWZmaWVzICsgaXBfcnRfbXR1X2V4cGlyZXM7CiAJCQlpZiAoIXBtdHVfZXhwaXJlcykKQEAgLTE2MTIsMTMgKzE2MjYsMTQgQEAKIAkJCXJ0X2JpbmRfcGVlcihydCwgcnQtPnJ0X2RzdCwgMCk7CiAKIAkJcGVlciA9IHJ0LT5wZWVyOwotCQlpZiAocGVlciAmJiBwZWVyLT5wbXR1X2V4cGlyZXMpCisJCWlmIChwZWVyKSB7CiAJCQljaGVja19wZWVyX3BtdHUoZHN0LCBwZWVyKTsKIAotCQlpZiAocGVlciAmJiBwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICYmCi0JCSAgICBwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICE9IHJ0LT5ydF9nYXRld2F5KSB7Ci0JCQlpZiAoY2hlY2tfcGVlcl9yZWRpcihkc3QsIHBlZXIpKQotCQkJCXJldHVybiBOVUxMOworCQkJaWYgKHBlZXItPnJlZGlyZWN0X2xlYXJuZWQuYTQgJiYKKwkJCSAgICBwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICE9IHJ0LT5ydF9nYXRld2F5KSB7CisJCQkJaWYgKGNoZWNrX3BlZXJfcmVkaXIoZHN0LCBwZWVyKSkKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQl9CiAJCX0KIAogCQlydC0+cnRfcGVlcl9nZW5pZCA9IHJ0X3BlZXJfZ2VuaWQoKTsKQEAgLTE2NDksMTQgKzE2NjQsOCBAQAogCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfVU5SRUFDSCwgMCk7CiAKIAlydCA9IHNrYl9ydGFibGUoc2tiKTsKLQlpZiAocnQgJiYKLQkgICAgcnQtPnBlZXIgJiYKLQkgICAgcnQtPnBlZXItPnBtdHVfZXhwaXJlcykgewotCQl1bnNpZ25lZCBsb25nIG9yaWcgPSBydC0+cGVlci0+cG10dV9leHBpcmVzOwotCi0JCWlmIChjbXB4Y2hnKCZydC0+cGVlci0+cG10dV9leHBpcmVzLCBvcmlnLCAwKSA9PSBvcmlnKQotCQkJZHN0X21ldHJpY19zZXQoJnJ0LT5kc3QsIFJUQVhfTVRVLCBydC0+cGVlci0+cG10dV9vcmlnKTsKLQl9CisJaWYgKHJ0ICYmIHJ0LT5wZWVyICYmIHBlZXJfcG10dV9jbGVhbmVkKHJ0LT5wZWVyKSkKKwkJZHN0X21ldHJpY19zZXQoJnJ0LT5kc3QsIFJUQVhfTVRVLCBydC0+cGVlci0+cG10dV9vcmlnKTsKIH0KIAogc3RhdGljIGludCBpcF9ydF9idWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE3NzAsOCArMTc3OSw3IEBACiAJCQkgICAgICAgc2l6ZW9mKHUzMikgKiBSVEFYX01BWCk7CiAJCWRzdF9pbml0X21ldHJpY3MoJnJ0LT5kc3QsIHBlZXItPm1ldHJpY3MsIGZhbHNlKTsKIAotCQlpZiAocGVlci0+cG10dV9leHBpcmVzKQotCQkJY2hlY2tfcGVlcl9wbXR1KCZydC0+ZHN0LCBwZWVyKTsKKwkJY2hlY2tfcGVlcl9wbXR1KCZydC0+ZHN0LCBwZWVyKTsKIAkJaWYgKHBlZXItPnJlZGlyZWN0X2xlYXJuZWQuYTQgJiYKIAkJICAgIHBlZXItPnJlZGlyZWN0X2xlYXJuZWQuYTQgIT0gcnQtPnJ0X2dhdGV3YXkpIHsKIAkJCXJ0LT5ydF9nYXRld2F5ID0gcGVlci0+cmVkaXJlY3RfbGVhcm5lZC5hNDsKQEAgLTI3NzUsNyArMjc4Myw4IEBACiAJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2JfcnRhYmxlKHNrYik7CiAJc3RydWN0IHJ0bXNnICpyOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCWxvbmcgZXhwaXJlczsKKwlsb25nIGV4cGlyZXMgPSAwOworCWNvbnN0IHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIgPSBydC0+cGVlcjsKIAl1MzIgaWQgPSAwLCB0cyA9IDAsIHRzYWdlID0gMCwgZXJyb3I7CiAKIAlubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgZXZlbnQsIHNpemVvZigqciksIGZsYWdzKTsKQEAgLTI4MjMsMTUgKzI4MzIsMTYgQEAKIAkJTkxBX1BVVF9CRTMyKHNrYiwgUlRBX01BUkssIHJ0LT5ydF9tYXJrKTsKIAogCWVycm9yID0gcnQtPmRzdC5lcnJvcjsKLQlleHBpcmVzID0gKHJ0LT5wZWVyICYmIHJ0LT5wZWVyLT5wbXR1X2V4cGlyZXMpID8KLQkJcnQtPnBlZXItPnBtdHVfZXhwaXJlcyAtIGppZmZpZXMgOiAwOwotCWlmIChydC0+cGVlcikgeworCWlmIChwZWVyKSB7CiAJCWluZXRfcGVlcl9yZWZjaGVjayhydC0+cGVlcik7Ci0JCWlkID0gYXRvbWljX3JlYWQoJnJ0LT5wZWVyLT5pcF9pZF9jb3VudCkgJiAweGZmZmY7Ci0JCWlmIChydC0+cGVlci0+dGNwX3RzX3N0YW1wKSB7Ci0JCQl0cyA9IHJ0LT5wZWVyLT50Y3BfdHM7Ci0JCQl0c2FnZSA9IGdldF9zZWNvbmRzKCkgLSBydC0+cGVlci0+dGNwX3RzX3N0YW1wOworCQlpZCA9IGF0b21pY19yZWFkKCZwZWVyLT5pcF9pZF9jb3VudCkgJiAweGZmZmY7CisJCWlmIChwZWVyLT50Y3BfdHNfc3RhbXApIHsKKwkJCXRzID0gcGVlci0+dGNwX3RzOworCQkJdHNhZ2UgPSBnZXRfc2Vjb25kcygpIC0gcGVlci0+dGNwX3RzX3N0YW1wOwogCQl9CisJCWV4cGlyZXMgPSBBQ0NFU1NfT05DRShwZWVyLT5wbXR1X2V4cGlyZXMpOworCQlpZiAoZXhwaXJlcykKKwkJCWV4cGlyZXMgLT0gamlmZmllczsKIAl9CiAKIAlpZiAocnRfaXNfaW5wdXRfcm91dGUocnQpKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCBiNzkxOWY5Li5kNDUwYTJmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTI3Miw2ICsyNzIsMTAgQEAKIAogCWlmIChhZGRyX2xlbiA8IFNJTjZfTEVOX1JGQzIxMzMpCiAJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFkZHItPnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKCZhZGRyLT5zaW42X2FkZHIpOwogCWlmICgoYWRkcl90eXBlICYgSVBWNl9BRERSX01VTFRJQ0FTVCkgJiYgc29jay0+dHlwZSA9PSBTT0NLX1NUUkVBTSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKaW5kZXggNDEzYWIwNy4uMDY1ZmU0MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwpAQCAtNDAzLDcgKzQwMyw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIF9faXBxX3Jjdl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgc3RhdHVzLCB0eXBlLCBwaWQsIGZsYWdzLCBubG1zZ2xlbiwgc2tibGVuOworCWludCBzdGF0dXMsIHR5cGUsIHBpZCwgZmxhZ3M7CisJdW5zaWduZWQgaW50IG5sbXNnbGVuLCBza2JsZW47CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CiAKIAlza2JsZW4gPSBza2ItPmxlbjsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IGM4YWY1OGIuLjQxMTEwNTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAKIAkvKiBUaGlzIGlzIHdoZXJlIHdlIGNhbGwgdGhlIGhlbHBlcjogYXMgdGhlIHBhY2tldCBnb2VzIG91dC4gKi8KIAljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwotCWlmICghY3QgfHwgY3RpbmZvID09IElQX0NUX1JFTEFURUQgKyBJUF9DVF9JU19SRVBMWSkKKwlpZiAoIWN0IHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEX1JFUExZKQogCQlnb3RvIG91dDsKIAogCWhlbHAgPSBuZmN0X2hlbHAoY3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKaW5kZXggMWRmM2M4Yi4uN2MwNWU3ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkvKiBVcGRhdGUgc2tiIHRvIHJlZmVyIHRvIHRoaXMgY29ubmVjdGlvbiAqLwogCXNrYi0+bmZjdCA9ICZuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpLT5jdF9nZW5lcmFsOwogCXNrYi0+bmZjdGluZm8gPSAqY3RpbmZvOwotCXJldHVybiAtTkZfQUNDRVBUOworCXJldHVybiBORl9BQ0NFUFQ7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyaWFwLmMgYi9uZXQvaXJkYS9pcmlhcC5jCmluZGV4IDM2NDc3NTMuLmY4NzZlZWQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyaWFwLmMKKysrIGIvbmV0L2lyZGEvaXJpYXAuYwpAQCAtODcsNiArODcsOCBAQAogCQkJIGlyaWFwX3dhdGNoZG9nX3RpbWVyX2V4cGlyZWQpOwogfQogCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlyaWFzX29iamVjdHNfa2V5OworCiAvKgogICogRnVuY3Rpb24gaXJpYXBfaW5pdCAodm9pZCkKICAqCkBAIC0xMTQsNiArMTE2LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJbG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUoJmlyaWFzX29iamVjdHMtPmhiX3NwaW5sb2NrLCAmaXJpYXNfb2JqZWN0c19rZXksCisJCQkJICAgImlyaWFzX29iamVjdHMiKTsKKwogCS8qCiAJICogIFJlZ2lzdGVyIHNvbWUgZGVmYXVsdCBzZXJ2aWNlcyBmb3IgSXJMTVAKIAkgKi8KZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfZGVidWdmcy5jIGIvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMKaW5kZXggYjhkYmFlOC4uNzYxMzAxMyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMKKysrIGIvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCSAqLwogCXBkLT5uZXQgPSBnZXRfbmV0X25zX2J5X3BpZChjdXJyZW50LT5waWQpOwogCWlmIChJU19FUlIocGQtPm5ldCkpIHsKLQkJcmMgPSAtUFRSX0VSUihwZC0+bmV0KTsKKwkJcmMgPSBQVFJfRVJSKHBkLT5uZXQpOwogCQlnb3RvIGVycl9mcmVlX3BkOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lic3MuYyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKaW5kZXggNDIxZWFhNi4uNTZjMjRjYSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lic3MuYworKysgYi9uZXQvbWFjODAyMTEvaWJzcy5jCkBAIC05NjUsNiArOTY1LDEwIEBACiAKIAltdXRleF9sb2NrKCZzZGF0YS0+dS5pYnNzLm10eCk7CiAKKwlzZGF0YS0+dS5pYnNzLnN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7CisJbWVtc2V0KHNkYXRhLT51Lmlic3MuYnNzaWQsIDAsIEVUSF9BTEVOKTsKKwlzZGF0YS0+dS5pYnNzLnNzaWRfbGVuID0gMDsKKwogCWFjdGl2ZV9pYnNzID0gaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSk7CiAKIAlpZiAoIWFjdGl2ZV9pYnNzICYmICFpc196ZXJvX2V0aGVyX2FkZHIoaWZpYnNzLT5ic3NpZCkpIHsKQEAgLTk5OSw4ICsxMDAzLDYgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIAogCXNrYl9xdWV1ZV9wdXJnZSgmc2RhdGEtPnNrYl9xdWV1ZSk7Ci0JbWVtc2V0KHNkYXRhLT51Lmlic3MuYnNzaWQsIDAsIEVUSF9BTEVOKTsKLQlzZGF0YS0+dS5pYnNzLnNzaWRfbGVuID0gMDsKIAogCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5pYnNzLnRpbWVyKTsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCAyMDI1YWY1Li4wOTBiMGVjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtNzc1LDkgKzc3NSw2IEBACiAKIAlpbnQgdHhfaGVhZHJvb207IC8qIHJlcXVpcmVkIGhlYWRyb29tIGZvciBoYXJkd2FyZS9yYWRpb3RhcCAqLwogCi0JLyogY291bnQgZm9yIGtleXMgbmVlZGluZyB0YWlscm9vbSBzcGFjZSBhbGxvY2F0aW9uICovCi0JaW50IGNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250OwotCiAJLyogVGFza2xldCBhbmQgc2tiIHF1ZXVlIHRvIHByb2Nlc3MgY2FsbHMgZnJvbSBJUlEgbW9kZS4gQWxsIGZyYW1lcwogCSAqIGFkZGVkIHRvIHNrYl9xdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCwgYnV0IGZyYW1lcyBpbgogCSAqIHNrYl9xdWV1ZV91bnJlbGlhYmxlIG1heSBiZSBkcm9wcGVkIGlmIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlc2UKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggNDlkNGY4Ni4uZGVlMzBhZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTExNDUsNiArMTE0NSwxMCBAQAogCQkJCSsgSUVFRTgwMjExX0VOQ1JZUFRfSEVBRFJPT007CiAJbmRldi0+bmVlZGVkX3RhaWxyb29tID0gSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT007CiAKKwlyZXQgPSBkZXZfYWxsb2NfbmFtZShuZGV2LCBuZGV2LT5uYW1lKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsOworCiAJaWVlZTgwMjExX2Fzc2lnbl9wZXJtX2FkZHIobG9jYWwsIG5kZXYsIHR5cGUpOwogCW1lbWNweShuZGV2LT5kZXZfYWRkciwgbmRldi0+cGVybV9hZGRyLCBFVEhfQUxFTik7CiAJU0VUX05FVERFVl9ERVYobmRldiwgd2lwaHlfZGV2KGxvY2FsLT5ody53aXBoeSkpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IDMxYWZkNzEyLi5mODI1ZTJmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmMKKysrIGIvbmV0L21hYzgwMjExL2tleS5jCkBAIC0xMDEsMTEgKzEwMSw2IEBACiAKIAlpZiAoIXJldCkgewogCQlrZXktPmZsYWdzIHw9IEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFOwotCi0JCWlmICghKChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQykgfHwKLQkJICAgICAgKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikpKQotCQkJa2V5LT5sb2NhbC0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQtLTsKLQogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE2MSwxMCArMTU2LDYgQEAKIAkJCSAga2V5LT5jb25mLmtleWlkeCwgc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTsKIAogCWtleS0+ZmxhZ3MgJj0gfktFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFOwotCi0JaWYgKCEoKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDKSB8fAotCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpKSkKLQkJa2V5LT5sb2NhbC0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQrKzsKIH0KIAogdm9pZCBpZWVlODAyMTFfa2V5X3JlbW92ZWQoc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5X2NvbmYpCkBAIC00MDMsMTAgKzM5NCw4IEBACiAJCWllZWU4MDIxMV9hZXNfa2V5X2ZyZWUoa2V5LT51LmNjbXAudGZtKTsKIAlpZiAoa2V5LT5jb25mLmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQykKIAkJaWVlZTgwMjExX2Flc19jbWFjX2tleV9mcmVlKGtleS0+dS5hZXNfY21hYy50Zm0pOwotCWlmIChrZXktPmxvY2FsKSB7CisJaWYgKGtleS0+bG9jYWwpCiAJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmUoa2V5KTsKLQkJa2V5LT5sb2NhbC0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQtLTsKLQl9CiAKIAlrZnJlZShrZXkpOwogfQpAQCAtNDY4LDggKzQ1Nyw2IEBACiAKIAlpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkKGtleSk7CiAKLQlrZXktPmxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudCsrOwotCiAJcmV0ID0gaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTsKIAogCW11dGV4X3VubG9jaygmc2RhdGEtPmxvY2FsLT5rZXlfbXR4KTsKQEAgLTUxMSwxMiArNDk4LDggQEAKIAogCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+a2V5X210eCk7CiAKLQlzZGF0YS0+bG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250ID0gMDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoa2V5LCAmc2RhdGEtPmtleV9saXN0LCBsaXN0KSB7Ci0JCXNkYXRhLT5sb2NhbC0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQrKzsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgJnNkYXRhLT5rZXlfbGlzdCwgbGlzdCkKIAkJaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoa2V5KTsKLQl9CiAKIAltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+a2V5X210eCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCA0ZjZiMjY3Li5kNTk1MjY1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTEwODksNiArMTA4OSw3IEBACiAJCWxvY2FsLT5ody5jb25mLmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9QUzsKIAkJY29uZmlnX2NoYW5nZWQgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTOwogCX0KKwlsb2NhbC0+cHNfc2RhdGEgPSBOVUxMOwogCiAJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgY29uZmlnX2NoYW5nZWQpOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCAyN2FmNjcyLi41OGZmYTdkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9xb3NfcGFyYW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPG5ldC9zY2hfZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggNjRlMGY3NS4uMzEwNGM4NCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKKysrIGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTE0ODAsNyArMTQ4MCwxMiBAQAogewogCWludCB0YWlsX25lZWQgPSAwOwogCi0JaWYgKG1heV9lbmNyeXB0ICYmIGxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudCkgeworCS8qCisJICogVGhpcyBjb3VsZCBiZSBvcHRpbWlzZWQsIGRldmljZXMgdGhhdCBkbyBmdWxsIGhhcmR3YXJlCisJICogY3J5cHRvIChpbmNsdWRpbmcgVEtJUCBNTUlDKSBuZWVkIG5vIHRhaWxyb29tLi4uIEJ1dCB3ZQorCSAqIGhhdmUgbm8gZHJpdmVycyBmb3Igc3VjaCBkZXZpY2VzIGN1cnJlbnRseS4KKwkgKi8KKwlpZiAobWF5X2VuY3J5cHQpIHsKIAkJdGFpbF9uZWVkID0gSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT007CiAJCXRhaWxfbmVlZCAtPSBza2JfdGFpbHJvb20oc2tiKTsKIAkJdGFpbF9uZWVkID0gbWF4X3QoaW50LCB0YWlsX25lZWQsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCmluZGV4IDgwNDFiZWYuLjQyYWE2NGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKQEAgLTc2Nyw3ICs3NjcsNyBAQAogCWlmICghYXR0cltJUFNFVF9BVFRSX1NFVE5BTUVdKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBpcF9zZXRfbWF4OyBpKyspIHsKIAkJCWlmIChpcF9zZXRfbGlzdFtpXSAhPSBOVUxMICYmIGlwX3NldF9saXN0W2ldLT5yZWYpIHsKLQkJCQlyZXQgPSBJUFNFVF9FUlJfQlVTWTsKKwkJCQlyZXQgPSAtSVBTRVRfRVJSX0JVU1k7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCmluZGV4IDQ3NDNlNTQuLjU2NWE3YzUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYwpAQCAtMTQ2LDggKzE0Niw5IEBACiB7CiAJY29uc3Qgc3RydWN0IGlwX3NldF9oYXNoICpoID0gc2V0LT5kYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LT52YXJpYW50LT5hZHRbYWR0XTsKLQlzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0X2VsZW0gZGF0YSA9Ci0JCXsgLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgfHwgSE9TVF9NQVNLIH07CisJc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGRhdGEgPSB7CisJCS5jaWRyID0gaC0+bmV0c1swXS5jaWRyID8gaC0+bmV0c1swXS5jaWRyIDogSE9TVF9NQVNLCisJfTsKIAogCWlmIChkYXRhLmNpZHIgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTQsOCArMzk1LDkgQEAKIHsKIAljb25zdCBzdHJ1Y3QgaXBfc2V0X2hhc2ggKmggPSBzZXQtPmRhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtPnZhcmlhbnQtPmFkdFthZHRdOwotCXN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBkYXRhID0KLQkJeyAuY2lkciA9IGgtPm5ldHNbMF0uY2lkciB8fCBIT1NUX01BU0sgfTsKKwlzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZGF0YSA9IHsKKwkJLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgPyBoLT5uZXRzWzBdLmNpZHIgOiBIT1NUX01BU0sKKwl9OwogCiAJaWYgKGRhdGEuY2lkciA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jCmluZGV4IGM0ZGIyMDIuLjJhZWVhYmMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYwpAQCAtMTMxLDcgKzEzMSw5IEBACiB7CiAJY29uc3Qgc3RydWN0IGlwX3NldF9oYXNoICpoID0gc2V0LT5kYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LT52YXJpYW50LT5hZHRbYWR0XTsKLQlzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gZGF0YSA9IHsgLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgfHwgSE9TVF9NQVNLIH07CisJc3RydWN0IGhhc2hfbmV0NF9lbGVtIGRhdGEgPSB7CisJCS5jaWRyID0gaC0+bmV0c1swXS5jaWRyID8gaC0+bmV0c1swXS5jaWRyIDogSE9TVF9NQVNLCisJfTsKIAogCWlmIChkYXRhLmNpZHIgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTYsNyArMjk4LDkgQEAKIHsKIAljb25zdCBzdHJ1Y3QgaXBfc2V0X2hhc2ggKmggPSBzZXQtPmRhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtPnZhcmlhbnQtPmFkdFthZHRdOwotCXN0cnVjdCBoYXNoX25ldDZfZWxlbSBkYXRhID0geyAuY2lkciA9IGgtPm5ldHNbMF0uY2lkciB8fCBIT1NUX01BU0sgfTsKKwlzdHJ1Y3QgaGFzaF9uZXQ2X2VsZW0gZGF0YSA9IHsKKwkJLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgPyBoLT5uZXRzWzBdLmNpZHIgOiBIT1NUX01BU0sKKwl9OwogCiAJaWYgKGRhdGEuY2lkciA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKaW5kZXggZDJhNDAzNi4uZTUwZDliYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKQEAgLTE0NCw3ICsxNDQsOCBAQAogCWNvbnN0IHN0cnVjdCBpcF9zZXRfaGFzaCAqaCA9IHNldC0+ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0+dmFyaWFudC0+YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBkYXRhID0gewotCQkuY2lkciA9IGgtPm5ldHNbMF0uY2lkciB8fCBIT1NUX01BU0sgfTsKKwkJLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgPyBoLT5uZXRzWzBdLmNpZHIgOiBIT1NUX01BU0sKKwl9OwogCiAJaWYgKGRhdGEuY2lkciA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM1Nyw3ICszNTgsOCBAQAogCWNvbnN0IHN0cnVjdCBpcF9zZXRfaGFzaCAqaCA9IHNldC0+ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0+dmFyaWFudC0+YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBkYXRhID0gewotCQkuY2lkciA9IGgtPm5ldHNbMF0uY2lkciB8fCBIT1NUX01BU0sgfTsKKwkJLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgPyBoLT5uZXRzWzBdLmNpZHIgOiBIT1NUX01BU0sKKwl9OwogCiAJaWYgKGRhdGEuY2lkciA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IGJmYTgwOGYuLjU1YWYyMjQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMTc3Miw3ICsxNzcyLDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSA5OSwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TUkMgLSAyLAogCX0sCiAJLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgZm9yd2FyZCBwYWNrZXQgdGhyb3VnaCBWUy9EUiwgVlMvVFVOLAogCSAqIG9yIFZTL05BVChjaGFuZ2UgZGVzdGluYXRpb24pLCBzbyB0aGF0IGZpbHRlcmluZyBydWxlcyBjYW4gYmUKQEAgLTE3ODIsNyArMTc4Miw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKLQkJLnByaW9yaXR5CT0gMTAxLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQyAtIDEsCiAJfSwKIAkvKiBCZWZvcmUgaXBfdnNfaW4sIGNoYW5nZSBzb3VyY2Ugb25seSBmb3IgVlMvTkFUICovCiAJewpAQCAtMTc5MCw3ICsxNzkwLDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gLTk5LAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCArIDEsCiAJfSwKIAkvKiBBZnRlciBtYW5nbGUsIHNjaGVkdWxlIGFuZCBmb3J3YXJkIGxvY2FsIHJlcXVlc3RzICovCiAJewpAQCAtMTc5OCw3ICsxNzk4LDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gLTk4LAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCArIDIsCiAJfSwKIAkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nIChidXQgYmVmb3JlIGlwX3ZzX291dF9pY21wKSwgY2F0Y2ggaWNtcAogCSAqIGRlc3RpbmVkIGZvciAwLjAuMC4wLzAsIHdoaWNoIGlzIGZvciBpbmNvbWluZyBJUFZTIGNvbm5lY3Rpb25zICovCkBAIC0xODI0LDcgKzE4MjQsNyBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wZgkJPSBQRl9JTkVUNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSA5OSwKKwkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9OQVRfU1JDIC0gMiwKIAl9LAogCS8qIEFmdGVyIHBhY2tldCBmaWx0ZXJpbmcsIGZvcndhcmQgcGFja2V0IHRocm91Z2ggVlMvRFIsIFZTL1RVTiwKIAkgKiBvciBWUy9OQVQoY2hhbmdlIGRlc3RpbmF0aW9uKSwgc28gdGhhdCBmaWx0ZXJpbmcgcnVsZXMgY2FuIGJlCkBAIC0xODM0LDcgKzE4MzQsNyBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wZgkJPSBQRl9JTkVUNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSAxMDEsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTkFUX1NSQyAtIDEsCiAJfSwKIAkvKiBCZWZvcmUgaXBfdnNfaW4sIGNoYW5nZSBzb3VyY2Ugb25seSBmb3IgVlMvTkFUICovCiAJewpAQCAtMTg0Miw3ICsxODQyLDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gLTk5LAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX05BVF9EU1QgKyAxLAogCX0sCiAJLyogQWZ0ZXIgbWFuZ2xlLCBzY2hlZHVsZSBhbmQgZm9yd2FyZCBsb2NhbCByZXF1ZXN0cyAqLwogCXsKQEAgLTE4NTAsNyArMTg1MCw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQ2LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAotCQkucHJpb3JpdHkJPSAtOTgsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTkFUX0RTVCArIDIsCiAJfSwKIAkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nIChidXQgYmVmb3JlIGlwX3ZzX291dF9pY21wKSwgY2F0Y2ggaWNtcAogCSAqIGRlc3RpbmVkIGZvciAwLjAuMC4wLzAsIHdoaWNoIGlzIGZvciBpbmNvbWluZyBJUFZTIGNvbm5lY3Rpb25zICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggMmUxYzExZi4uZjdhZjhiOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtODUwLDcgKzg1MCw3IEBACiAKIAkvKiBJdCBleGlzdHM7IHdlIGhhdmUgKG5vbi1leGNsdXNpdmUpIHJlZmVyZW5jZS4gKi8KIAlpZiAoTkZfQ1RfRElSRUNUSU9OKGgpID09IElQX0NUX0RJUl9SRVBMWSkgewotCQkqY3RpbmZvID0gSVBfQ1RfRVNUQUJMSVNIRUQgKyBJUF9DVF9JU19SRVBMWTsKKwkJKmN0aW5mbyA9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZOwogCQkvKiBQbGVhc2Ugc2V0IHJlcGx5IGJpdCBpZiB0aGlzIHBhY2tldCBPSyAqLwogCQkqc2V0X3JlcGx5ID0gMTsKIAl9IGVsc2UgewpAQCAtOTIyLDYgKzkyMiw5IEBACiAJCQlyZXQgPSAtcmV0OwogCQkJZ290byBvdXQ7CiAJCX0KKwkJLyogSUNNUFt2Nl0gcHJvdG9jb2wgdHJhY2tlcnMgbWF5IGFzc2lnbiBvbmUgY29ubnRyYWNrLiAqLworCQlpZiAoc2tiLT5uZmN0KQorCQkJZ290byBvdXQ7CiAJfQogCiAJY3QgPSByZXNvbHZlX25vcm1hbF9jdChuZXQsIHRtcGwsIHNrYiwgZGF0YW9mZiwgcGYsIHByb3RvbnVtLApAQCAtMTE0Myw3ICsxMTQ2LDcgQEAKIAkvKiBUaGlzIElDTVAgaXMgaW4gcmV2ZXJzZSBkaXJlY3Rpb24gdG8gdGhlIHBhY2tldCB3aGljaCBjYXVzZWQgaXQgKi8KIAljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwogCWlmIChDVElORk8yRElSKGN0aW5mbykgPT0gSVBfQ1RfRElSX09SSUdJTkFMKQotCQljdGluZm8gPSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFk7CisJCWN0aW5mbyA9IElQX0NUX1JFTEFURURfUkVQTFk7CiAJZWxzZQogCQljdGluZm8gPSBJUF9DVF9SRUxBVEVEOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCmluZGV4IGUxN2NiN2MuLjZmNTgwMWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCkBAIC0zNjgsNyArMzY4LDcgQEAKIAogCS8qIFVudGlsIHRoZXJlJ3MgYmVlbiB0cmFmZmljIGJvdGggd2F5cywgZG9uJ3QgbG9vayBpbiBwYWNrZXRzLiAqLwogCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKLQkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpIHsKKwkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKSB7CiAJCXByX2RlYnVnKCJmdHA6IENvbm50cmFja2luZm8gPSAldVxuIiwgY3RpbmZvKTsKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCmluZGV4IDE4YjJjZTUuLmYwM2MyZDQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC01NzEsMTAgKzU3MSw5IEBACiAJaW50IHJldDsKIAogCS8qIFVudGlsIHRoZXJlJ3MgYmVlbiB0cmFmZmljIGJvdGggd2F5cywgZG9uJ3QgbG9vayBpbiBwYWNrZXRzLiAqLwotCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKLQkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpIHsKKwlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKLQl9CisKIAlwcl9kZWJ1ZygibmZfY3RfaDI0NTogc2tibGVuID0gJXVcbiIsIHNrYi0+bGVuKTsKIAogCXNwaW5fbG9ja19iaCgmbmZfaDMyM19sb2NrKTsKQEAgLTExMjUsMTAgKzExMjQsOSBAQAogCWludCByZXQ7CiAKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KLQlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKSB7CisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJiBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFkpCiAJCXJldHVybiBORl9BQ0NFUFQ7Ci0JfQorCiAJcHJfZGVidWcoIm5mX2N0X3E5MzE6IHNrYmxlbiA9ICV1XG4iLCBza2ItPmxlbik7CiAKIAlzcGluX2xvY2tfYmgoJm5mX2gzMjNfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCmluZGV4IGIzOTRhYTMuLjRmOTM5MGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCkBAIC0xMjUsOCArMTI1LDcgQEAKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCS8qIFVudGlsIHRoZXJlJ3MgYmVlbiB0cmFmZmljIGJvdGggd2F5cywgZG9uJ3QgbG9vayBpbiBwYWNrZXRzLiAqLwotCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKLQkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpCisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJiBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFkpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAkvKiBOb3QgYSBmdWxsIHRjcCBoZWFkZXI/ICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKaW5kZXggMDg4OTQ0OC4uMmZkNDU2NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwpAQCAtNTE5LDggKzUxOSw3IEBACiAJdV9pbnQxNl90IG1zZzsKIAogCS8qIGRvbid0IGRvIGFueSB0cmFja2luZyBiZWZvcmUgdGNwIGhhbmRzaGFrZSBjb21wbGV0ZSAqLwotCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKLQkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpCisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJiBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFkpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAluZXh0aGRyX29mZiA9IHByb3RvZmY7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMKaW5kZXggZDllMjc3My4uODUwMTgyMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYwpAQCAtNzgsNyArNzgsNyBAQAogCWN0X3NhbmVfaW5mbyA9ICZuZmN0X2hlbHAoY3QpLT5oZWxwLmN0X3NhbmVfaW5mbzsKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KIAlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCtJUF9DVF9JU19SRVBMWSkKKwkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJLyogTm90IGEgZnVsbCB0Y3AgaGVhZGVyPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwppbmRleCBjYjVhMjg1Li45M2ZhZjZhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwpAQCAtMTQyMyw3ICsxNDIzLDcgQEAKIAl0eXBlb2YobmZfbmF0X3NpcF9zZXFfYWRqdXN0X2hvb2spIG5mX25hdF9zaXBfc2VxX2FkanVzdDsKIAogCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKLQkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpCisJICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCS8qIE5vIERhdGEgPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfc29ja2V0LmMKaW5kZXggOWNjNDYzNS4uZmUzOWY3ZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NvY2tldC5jCkBAIC0xNDMsOSArMTQzLDkgQEAKIAljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwogCWlmIChjdCAmJiAhbmZfY3RfaXNfdW50cmFja2VkKGN0KSAmJgogCSAgICAoKGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QICYmCi0JICAgICAgY3RpbmZvID09IElQX0NUX0lTX1JFUExZICsgSVBfQ1RfRVNUQUJMSVNIRUQpIHx8CisJICAgICAgY3RpbmZvID09IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKSB8fAogCSAgICAgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QICYmCi0JICAgICAgY3RpbmZvID09IElQX0NUX0lTX1JFUExZICsgSVBfQ1RfUkVMQVRFRCkpICYmCisJICAgICAgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkpKSAmJgogCSAgICAoY3QtPnN0YXR1cyAmIElQU19TUkNfTkFUX0RPTkUpKSB7CiAKIAkJZGFkZHIgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLnUzLmlwOwpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggOTI1ZjcxNS4uYzBjM2NkYSAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC03OTgsNyArNzk4LDEzIEBACiAJCQlnZXRuc3RpbWVvZmRheSgmdHMpOwogCQloLmgyLT50cF9zZWMgPSB0cy50dl9zZWM7CiAJCWguaDItPnRwX25zZWMgPSB0cy50dl9uc2VjOwotCQloLmgyLT50cF92bGFuX3RjaSA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCQloLmgyLT50cF92bGFuX3RjaSA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQkJc3RhdHVzIHw9IFRQX1NUQVRVU19WTEFOX1ZBTElEOworCQl9IGVsc2UgeworCQkJaC5oMi0+dHBfdmxhbl90Y2kgPSAwOworCQl9CisJCWguaDItPnRwX3BhZGRpbmcgPSAwOwogCQloZHJsZW4gPSBzaXplb2YoKmguaDIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTcyNSw4ICsxNzMxLDEzIEBACiAJCWF1eC50cF9zbmFwbGVuID0gc2tiLT5sZW47CiAJCWF1eC50cF9tYWMgPSAwOwogCQlhdXgudHBfbmV0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7Ci0JCWF1eC50cF92bGFuX3RjaSA9IHZsYW5fdHhfdGFnX2dldChza2IpOwotCisJCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwkJCWF1eC50cF92bGFuX3RjaSA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQkJYXV4LnRwX3N0YXR1cyB8PSBUUF9TVEFUVVNfVkxBTl9WQUxJRDsKKwkJfSBlbHNlIHsKKwkJCWF1eC50cF92bGFuX3RjaSA9IDA7CisJCX0KKwkJYXV4LnRwX3BhZGRpbmcgPSAwOwogCQlwdXRfY21zZyhtc2csIFNPTF9QQUNLRVQsIFBBQ0tFVF9BVVhEQVRBLCBzaXplb2YoYXV4KSwgJmF1eCk7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCmluZGV4IGIxNzIxZDcuLmI0YzY4MDkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCkBAIC0yNTEsOSArMjUxLDggQEAKIAkJCX0KIAogCQkJaWYgKHNvbWVfcXVldWVfdGltZWRvdXQpIHsKLQkJCQljaGFyIGRyaXZlcm5hbWVbNjRdOwogCQkJCVdBUk5fT05DRSgxLCBLRVJOX0lORk8gIk5FVERFViBXQVRDSERPRzogJXMgKCVzKTogdHJhbnNtaXQgcXVldWUgJXUgdGltZWQgb3V0XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIG5ldGRldl9kcml2ZXJuYW1lKGRldiwgZHJpdmVybmFtZSwgNjQpLCBpKTsKKwkJCQkgICAgICAgZGV2LT5uYW1lLCBuZXRkZXZfZHJpdmVybmFtZShkZXYpLCBpKTsKIAkJCQlkZXYtPm5ldGRldl9vcHMtPm5kb190eF90aW1lb3V0KGRldik7CiAJCQl9CiAJCQlpZiAoIW1vZF90aW1lcigmZGV2LT53YXRjaGRvZ190aW1lciwKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKaW5kZXggNTI1Zjk3Yy4uNGE2Mjg4OCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMKKysrIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKQEAgLTQ0NCwxNSArNDQ0LDcgQEAKIAogCWFzb2MtPnBlZXIudHJhbnNwb3J0X2NvdW50ID0gMDsKIAotCS8qIEZyZWUgYW55IGNhY2hlZCBBU0NPTkZfQUNLIGNodW5rLiAqLwotCXNjdHBfYXNzb2NfZnJlZV9hc2NvbmZfYWNrcyhhc29jKTsKLQotCS8qIEZyZWUgdGhlIEFTQ09ORiBxdWV1ZS4gKi8KLQlzY3RwX2Fzc29jX2ZyZWVfYXNjb25mX3F1ZXVlKGFzb2MpOwotCi0JLyogRnJlZSBhbnkgY2FjaGVkIEFTQ09ORiBjaHVuay4gKi8KLQlpZiAoYXNvYy0+YWRkaXBfbGFzdF9hc2NvbmYpCi0JCXNjdHBfY2h1bmtfZnJlZShhc29jLT5hZGRpcF9sYXN0X2FzY29uZik7CisJc2N0cF9hc2NvbmZfcXVldWVfdGVhcmRvd24oYXNvYyk7CiAKIAkvKiBBVVRIIC0gRnJlZSB0aGUgZW5kcG9pbnQgc2hhcmVkIGtleXMgKi8KIAlzY3RwX2F1dGhfZGVzdHJveV9rZXlzKCZhc29jLT5lbmRwb2ludF9zaGFyZWRfa2V5cyk7CkBAIC0xNjQ2LDMgKzE2MzgsMTYgQEAKIAogCXJldHVybiBOVUxMOwogfQorCit2b2lkIHNjdHBfYXNjb25mX3F1ZXVlX3RlYXJkb3duKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCS8qIEZyZWUgYW55IGNhY2hlZCBBU0NPTkZfQUNLIGNodW5rLiAqLworCXNjdHBfYXNzb2NfZnJlZV9hc2NvbmZfYWNrcyhhc29jKTsKKworCS8qIEZyZWUgdGhlIEFTQ09ORiBxdWV1ZS4gKi8KKwlzY3RwX2Fzc29jX2ZyZWVfYXNjb25mX3F1ZXVlKGFzb2MpOworCisJLyogRnJlZSBhbnkgY2FjaGVkIEFTQ09ORiBjaHVuay4gKi8KKwlpZiAoYXNvYy0+YWRkaXBfbGFzdF9hc2NvbmYpCisJCXNjdHBfY2h1bmtfZnJlZShhc29jLT5hZGRpcF9sYXN0X2FzY29uZik7Cit9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKaW5kZXggZDYxMmNhMS4uNTM0YzJlNSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCisrKyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwpAQCAtMTY3MCw2ICsxNjcwLDkgQEAKIAkJY2FzZSBTQ1RQX0NNRF9TRU5EX05FWFRfQVNDT05GOgogCQkJc2N0cF9jbWRfc2VuZF9hc2NvbmYoYXNvYyk7CiAJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0NNRF9QVVJHRV9BU0NPTkZfUVVFVUU6CisJCQlzY3RwX2FzY29uZl9xdWV1ZV90ZWFyZG93bihhc29jKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJfd2FybigiSW1wb3NzaWJsZSBjb21tYW5kOiAldSwgJXBcbiIsCiAJCQkJY21kLT52ZXJiLCBjbWQtPm9iai5wdHIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwppbmRleCA3ZjRhNGY4Li5hMjk3MjgzIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwpAQCAtMTcxOCwxMSArMTcxOCwyMSBAQAogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FOwogCX0KIAotCS8qIEZvciBub3csIGZhaWwgYW55IHVuc2VudC91bmFja2VkIGRhdGEuICBDb25zaWRlciB0aGUgb3B0aW9uYWwKLQkgKiBjaG9pY2Ugb2YgcmVzZW5kaW5nIG9mIHRoaXMgZGF0YS4KKwkvKiBGb3Igbm93LCBzdG9wIHBlbmRpbmcgVDMtcnR4IGFuZCBTQUNLIHRpbWVycywgZmFpbCBhbnkgdW5zZW50L3VuYWNrZWQKKwkgKiBkYXRhLiBDb25zaWRlciB0aGUgb3B0aW9uYWwgY2hvaWNlIG9mIHJlc2VuZGluZyBvZiB0aGlzIGRhdGEuCiAJICovCisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UM19SVFhfVElNRVJTX1NUT1AsIFNDVFBfTlVMTCgpKTsKKwlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RJTUVSX1NUT1AsCisJCQlTQ1RQX1RPKFNDVFBfRVZFTlRfVElNRU9VVF9TQUNLKSk7CiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9QVVJHRV9PVVRRVUVVRSwgU0NUUF9OVUxMKCkpOwogCisJLyogU3RvcCBwZW5kaW5nIFQ0LXJ0byB0aW1lciwgdGVhcmRvd24gQVNDT05GIHF1ZXVlLCBBU0NPTkYtQUNLIHF1ZXVlCisJICogYW5kIEFTQ09ORi1BQ0sgY2FjaGUuCisJICovCisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9USU1FUl9TVE9QLAorCQkJU0NUUF9UTyhTQ1RQX0VWRU5UX1RJTUVPVVRfVDRfUlRPKSk7CisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9QVVJHRV9BU0NPTkZfUVVFVUUsIFNDVFBfTlVMTCgpKTsKKwogCXJlcGwgPSBzY3RwX21ha2VfY29va2llX2FjayhuZXdfYXNvYywgY2h1bmspOwogCWlmICghcmVwbCkKIAkJZ290byBub21lbTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IGVjODNmNDEuLjk4ZmE4ZWIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtMzQwNiwxMiArMzQwNiwxMiBAQAogCWkgPSAwOwogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10pIHsKIAkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10sIHRtcCkgewotCQkJaWYgKHJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgeworCQkJaWYgKG5sYV9sZW4oYXR0cikgPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIG91dF9mcmVlOwogCQkJfQotCQkJbWVtY3B5KHJlcXVlc3QtPnNzaWRzW2ldLnNzaWQsIG5sYV9kYXRhKGF0dHIpLCBubGFfbGVuKGF0dHIpKTsKIAkJCXJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID0gbmxhX2xlbihhdHRyKTsKKwkJCW1lbWNweShyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSk7CiAJCQlpKys7CiAJCX0KIAl9CkBAIC0zNTcyLDE0ICszNTcyLDEzIEBACiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSkgewogCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSwKIAkJCQkgICAgdG1wKSB7Ci0JCQlpZiAocmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4gPgotCQkJICAgIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKKwkJCWlmIChubGFfbGVuKGF0dHIpID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgewogCQkJCWVyciA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KKwkJCXJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID0gbmxhX2xlbihhdHRyKTsKIAkJCW1lbWNweShyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkLCBubGFfZGF0YShhdHRyKSwKIAkJCSAgICAgICBubGFfbGVuKGF0dHIpKTsKLQkJCXJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID0gbmxhX2xlbihhdHRyKTsKIAkJCWkrKzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCmluZGV4IDczYTQ0MWQuLjdhNmM2NzYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmMKKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtMjY3LDEzICsyNjcsMzUgQEAKIAlyZXR1cm4gbWVtY21wKHNzaWRpZSArIDIsIHNzaWQsIHNzaWRfbGVuKSA9PSAwOwogfQogCitzdGF0aWMgYm9vbCBpc19tZXNoX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICphKQoreworCWNvbnN0IHU4ICppZTsKKworCWlmICghV0xBTl9DQVBBQklMSVRZX0lTX1NUQV9CU1MoYS0+Y2FwYWJpbGl0eSkpCisJCXJldHVybiBmYWxzZTsKKworCWllID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9NRVNIX0lELAorCQkJICAgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCWlmICghaWUpCisJCXJldHVybiBmYWxzZTsKKworCWllID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9NRVNIX0NPTkZJRywKKwkJCSAgICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZiAoIWllKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGJvb2wgaXNfbWVzaChzdHJ1Y3QgY2ZnODAyMTFfYnNzICphLAogCQkgICAgY29uc3QgdTggKm1lc2hpZCwgc2l6ZV90IG1lc2hpZGxlbiwKIAkJICAgIGNvbnN0IHU4ICptZXNoY2ZnKQogewogCWNvbnN0IHU4ICppZTsKIAotCWlmICghV0xBTl9DQVBBQklMSVRZX0lTX01CU1MoYS0+Y2FwYWJpbGl0eSkpCisJaWYgKCFXTEFOX0NBUEFCSUxJVFlfSVNfU1RBX0JTUyhhLT5jYXBhYmlsaXR5KSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWUgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX01FU0hfSUQsCkBAIC0zMTEsNyArMzMzLDcgQEAKIAlpZiAoYS0+Y2hhbm5lbCAhPSBiLT5jaGFubmVsKQogCQlyZXR1cm4gYi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEgLSBhLT5jaGFubmVsLT5jZW50ZXJfZnJlcTsKIAotCWlmIChXTEFOX0NBUEFCSUxJVFlfSVNfTUJTUyhhLT5jYXBhYmlsaXR5IHwgYi0+Y2FwYWJpbGl0eSkpIHsKKwlpZiAoaXNfbWVzaF9ic3MoYSkgJiYgaXNfbWVzaF9ic3MoYikpIHsKIAkJciA9IGNtcF9pZXMoV0xBTl9FSURfTUVTSF9JRCwKIAkJCSAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKIAkJCSAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCkBAIC00NTcsNyArNDc5LDYgQEAKIAkJICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnJlcykKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpmb3VuZCA9IE5VTEw7Ci0JY29uc3QgdTggKm1lc2hpZCwgKm1lc2hjZmc7CiAKIAkvKgogCSAqIFRoZSByZWZlcmVuY2UgdG8gInJlcyIgaXMgZG9uYXRlZCB0byB0aGlzIGZ1bmN0aW9uLgpAQCAtNDcwLDIyICs0OTEsNiBAQAogCiAJcmVzLT50cyA9IGppZmZpZXM7CiAKLQlpZiAoV0xBTl9DQVBBQklMSVRZX0lTX01CU1MocmVzLT5wdWIuY2FwYWJpbGl0eSkpIHsKLQkJLyogbXVzdCBiZSBtZXNoLCB2ZXJpZnkgKi8KLQkJbWVzaGlkID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9NRVNIX0lELAotCQkJCQkgIHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLAotCQkJCQkgIHJlcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7Ci0JCW1lc2hjZmcgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX01FU0hfQ09ORklHLAotCQkJCQkgICByZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cywKLQkJCQkJICAgcmVzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKLQkJaWYgKCFtZXNoaWQgfHwgIW1lc2hjZmcgfHwKLQkJICAgIG1lc2hjZmdbMV0gIT0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWVzaGNvbmZfaWUpKSB7Ci0JCQkvKiBib2d1cyBtZXNoICovCi0JCQlrcmVmX3B1dCgmcmVzLT5yZWYsIGJzc19yZWxlYXNlKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JfQotCiAJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKIAogCWZvdW5kID0gcmJfZmluZF9ic3MoZGV2LCByZXMpOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9yZXBsYXkuYyBiL25ldC94ZnJtL3hmcm1fcmVwbGF5LmMKaW5kZXggNDdmMWI4Ni4uYjExZWE2OSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9yZXBsYXkuYworKysgYi9uZXQveGZybS94ZnJtX3JlcGxheS5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkJCWJpdG5yID0gYml0bnIgJiAweDFGOwogCQkJcmVwbGF5X2Vzbi0+Ym1wW25yXSB8PSAoMVUgPDwgYml0bnIpOwogCQl9IGVsc2UgewotCQkJbnIgPSByZXBsYXlfZXNuLT5yZXBsYXlfd2luZG93ID4+IDU7CisJCQluciA9IChyZXBsYXlfZXNuLT5yZXBsYXlfd2luZG93IC0gMSkgPj4gNTsKIAkJCWZvciAoaSA9IDA7IGkgPD0gbnI7IGkrKykKIAkJCQlyZXBsYXlfZXNuLT5ibXBbaV0gPSAwOwogCkBAIC00NzEsNyArNDcxLDcgQEAKIAkJCWJpdG5yID0gYml0bnIgJiAweDFGOwogCQkJcmVwbGF5X2Vzbi0+Ym1wW25yXSB8PSAoMVUgPDwgYml0bnIpOwogCQl9IGVsc2UgewotCQkJbnIgPSByZXBsYXlfZXNuLT5yZXBsYXlfd2luZG93ID4+IDU7CisJCQluciA9IChyZXBsYXlfZXNuLT5yZXBsYXlfd2luZG93IC0gMSkgPj4gNTsKIAkJCWZvciAoaSA9IDA7IGkgPD0gbnI7IGkrKykKIAkJCQlyZXBsYXlfZXNuLT5ibXBbaV0gPSAwOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKaW5kZXggODY1N2Y5OS4uYjBhYTJjNiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsCisrKyBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApAQCAtMTk0Myw2ICsxOTQzLDExIEBACiAJCQlXQVJOKCJMSU5VWF9WRVJTSU9OX0NPREUgc2hvdWxkIGJlIGF2b2lkZWQsIGNvZGUgc2hvdWxkIGJlIGZvciB0aGUgdmVyc2lvbiB0byB3aGljaCBpdCBpcyBtZXJnZWRcbiIgLiAkaGVyZWN1cnIpOwogCQl9CiAKKyMgY2hlY2sgZm9yIHVzZXMgb2YgcHJpbnRrX3JhdGVsaW1pdAorCQlpZiAoJGxpbmUgPX4gL1xicHJpbnRrX3JhdGVsaW1pdFxzKlwoLykgeworCQkJV0FSTigiUHJlZmVyIHByaW50a19yYXRlbGltaXRlZCBvciBwcl88bGV2ZWw+X3JhdGVsaW1pdGVkIHRvIHByaW50a19yYXRlbGltaXRcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKICMgcHJpbnRrIHNob3VsZCB1c2UgS0VSTl8qIGxldmVscy4gIE5vdGUgdGhhdCBmb2xsb3cgb24gcHJpbnRrJ3Mgb24gdGhlCiAjIHNhbWUgbGluZSBkbyBub3QgbmVlZCBhIGxldmVsLCBzbyB3ZSB1c2UgdGhlIGN1cnJlbnQgYmxvY2sgY29udGV4dAogIyB0byB0cnkgYW5kIGZpbmQgYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHByaW50ay4gIEluIHN1bW1hcnkgdGhlIGN1cnJlbnQKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL2xzbS5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMKaW5kZXggYWUzYTY5OC4uM2QyZmQxNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMKQEAgLTU5Myw3ICs1OTMsOCBAQAogCQkJc2EuYWFkLm9wID0gT1BfU0VUUFJPQ0FUVFI7CiAJCQlzYS5hYWQuaW5mbyA9IG5hbWU7CiAJCQlzYS5hYWQuZXJyb3IgPSAtRUlOVkFMOwotCQkJcmV0dXJuIGFhX2F1ZGl0KEFVRElUX0FQUEFSTU9SX0RFTklFRCwgTlVMTCwgR0ZQX0tFUk5FTCwKKwkJCXJldHVybiBhYV9hdWRpdChBVURJVF9BUFBBUk1PUl9ERU5JRUQsCisJCQkJCV9fYWFfY3VycmVudF9wcm9maWxlKCksIEdGUF9LRVJORUwsCiAJCQkJCSZzYSwgTlVMTCk7CiAJCX0KIAl9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiZXhlYyIpID09IDApIHsKQEAgLTYxMSw3ICs2MTIsNyBAQAogc3RhdGljIGludCBhcHBhcm1vcl90YXNrX3NldHJsaW1pdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCXVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqbmV3X3JsaW0pCiB7Ci0Jc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUgPSBhYV9jdXJyZW50X3Byb2ZpbGUoKTsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSA9IF9fYWFfY3VycmVudF9wcm9maWxlKCk7CiAJaW50IGVycm9yID0gMDsKIAogCWlmICghdW5jb25maW5lZChwcm9maWxlKSkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCBhMGQzODQ1Li4yMDIxOWVmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0xNDc2LDcgKzE0NzYsNiBAQAogCQkJICB1bnNpZ25lZCBmbGFncykKIHsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwotCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAl1MzIgc2lkOwogCiAJdmFsaWRhdGVfY3JlZHMoY3JlZCk7CkBAIC0xNDg3LDE1ICsxNDg2LDIxIEBACiAJc2lkID0gY3JlZF9zaWQoY3JlZCk7CiAJaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OwogCi0JaWYgKCFhZHApIHsKLQkJYWRwID0gJmFkOwotCQlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgSU5PREUpOwotCQlhZC51Lmlub2RlID0gaW5vZGU7Ci0JfQotCiAJcmV0dXJuIGF2Y19oYXNfcGVybV9mbGFncyhzaWQsIGlzZWMtPnNpZCwgaXNlYy0+c2NsYXNzLCBwZXJtcywgYWRwLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm1fbm9hZHAoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQl1MzIgcGVybXMsCisJCQkJdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOworCisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElOT0RFKTsKKwlhZC51Lmlub2RlID0gaW5vZGU7CisJcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBwZXJtcywgJmFkLCBmbGFncyk7Cit9CisKIC8qIFNhbWUgYXMgaW5vZGVfaGFzX3Blcm0sIGJ1dCBwYXNzIGV4cGxpY2l0IGF1ZGl0IGRhdGEgY29udGFpbmluZwogICAgdGhlIGRlbnRyeSB0byBoZWxwIHRoZSBhdWRpdGluZyBjb2RlIHRvIG1vcmUgZWFzaWx5IGdlbmVyYXRlIHRoZQogICAgcGF0aG5hbWUgaWYgbmVlZGVkLiAqLwpAQCAtMjEyMiw4ICsyMTI3LDggQEAKIAkJCQkJCXN0cnVjdCB0dHlfZmlsZV9wcml2YXRlLCBsaXN0KTsKIAkJCWZpbGUgPSBmaWxlX3ByaXYtPmZpbGU7CiAJCQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JCQlpZiAoaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsCi0JCQkJCSAgIEZJTEVfX1JFQUQgfCBGSUxFX19XUklURSwgTlVMTCwgMCkpIHsKKwkJCWlmIChpbm9kZV9oYXNfcGVybV9ub2FkcChjcmVkLCBpbm9kZSwKKwkJCQkJICAgRklMRV9fUkVBRCB8IEZJTEVfX1dSSVRFLCAwKSkgewogCQkJCWRyb3BfdHR5ID0gMTsKIAkJCX0KIAkJfQpAQCAtMzIyOCw3ICszMjMzLDcgQEAKIAkgKiBuZXcgaW5vZGUgbGFiZWwgb3IgbmV3IHBvbGljeS4KIAkgKiBUaGlzIGNoZWNrIGlzIG5vdCByZWR1bmRhbnQgLSBkbyBub3QgcmVtb3ZlLgogCSAqLwotCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgb3Blbl9maWxlX3RvX2F2KGZpbGUpLCBOVUxMLCAwKTsKKwlyZXR1cm4gaW5vZGVfaGFzX3Blcm1fbm9hZHAoY3JlZCwgaW5vZGUsIG9wZW5fZmlsZV90b19hdihmaWxlKSwgMCk7CiB9CiAKIC8qIHRhc2sgc2VjdXJpdHkgb3BlcmF0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggNzdkNDQxMy4uMzU0NTkzNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKIC8qIHNlbGludXhmcyBwc2V1ZG8gZmlsZXN5c3RlbSBmb3IgZXhwb3J0aW5nIHRoZSBzZWN1cml0eSBwb2xpY3kgQVBJLgogICAgQmFzZWQgb24gdGhlIHByb2MgY29kZSBhbmQgdGhlIGZzL25mc2QvbmZzY3RsLmMgY29kZS4gKi8KQEAgLTc1MSw2ICs3NTIsMTQgQEAKIAlyZXR1cm4gbGVuZ3RoOwogfQogCitzdGF0aWMgaW5saW5lIGludCBoZXhjb2RlX3RvX2ludChpbnQgY29kZSkgeworCWlmIChjb2RlID09ICdcMCcgfHwgIWlzeGRpZ2l0KGNvZGUpKQorCQlyZXR1cm4gLTE7CisJaWYgKGlzZGlnaXQoY29kZSkpCisJCXJldHVybiBjb2RlIC0gJzAnOworCXJldHVybiB0b2xvd2VyKGNvZGUpIC0gJ2EnICsgMTA7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAJY2hhciAqc2NvbiA9IE5VTEwsICp0Y29uID0gTlVMTDsKQEAgLTc4NSw4ICs3OTQsMzQgQEAKIAluYXJncyA9IHNzY2FuZihidWYsICIlcyAlcyAlaHUgJXMiLCBzY29uLCB0Y29uLCAmdGNsYXNzLCBuYW1lYnVmKTsKIAlpZiAobmFyZ3MgPCAzIHx8IG5hcmdzID4gNCkKIAkJZ290byBvdXQ7Ci0JaWYgKG5hcmdzID09IDQpCisJaWYgKG5hcmdzID09IDQpIHsKKwkJLyoKKwkJICogSWYgYW5kIHdoZW4gdGhlIG5hbWUgb2YgbmV3IG9iamVjdCB0byBiZSBxdWVyaWVkIGNvbnRhaW5zCisJCSAqIGVpdGhlciB3aGl0ZXNwYWNlIG9yIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLCB0aGV5IHNoYWxsIGJlCisJCSAqIGVuY29kZWQgYmFzZWQgb24gdGhlIHBlcmNlbnRhZ2UtZW5jb2RpbmcgcnVsZS4KKwkJICogSWYgbm90IGVuY29kZWQsIHRoZSBzc2NhbmYgbG9naWMgcGlja3MgdXAgb25seSBsZWZ0LWhhbGYKKwkJICogb2YgdGhlIHN1cHBsaWVkIG5hbWU7IHNwbGl0dGVkIGJ5IGEgd2hpdGVzcGFjZSB1bmV4cGVjdGVkbHkuCisJCSAqLworCQljaGFyICAgKnIsICp3OworCQlpbnQgICAgIGMxLCBjMjsKKworCQlyID0gdyA9IG5hbWVidWY7CisJCWRvIHsKKwkJCWMxID0gKnIrKzsKKwkJCWlmIChjMSA9PSAnKycpCisJCQkJYzEgPSAnICc7CisJCQllbHNlIGlmIChjMSA9PSAnJScpIHsKKwkJCQlpZiAoKGMxID0gaGV4Y29kZV90b19pbnQoKnIrKykpIDwgMCkKKwkJCQkJZ290byBvdXQ7CisJCQkJaWYgKChjMiA9IGhleGNvZGVfdG9faW50KCpyKyspKSA8IDApCisJCQkJCWdvdG8gb3V0OworCQkJCWMxID0gKGMxIDw8IDQpIHwgYzI7CisJCQl9CisJCQkqdysrID0gYzE7CisJCX0gd2hpbGUgKGMxICE9ICdcMCcpOworCiAJCW9iam5hbWUgPSBuYW1lYnVmOworCX0KIAogCWxlbmd0aCA9IHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkKHNjb24sIHN0cmxlbihzY29uKSArIDEsICZzc2lkKTsKIAlpZiAobGVuZ3RoKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCmluZGV4IDEwMmU5ZWMuLmQyNDZhY2EgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKQEAgLTMyMjIsNiArMzIyMiw5IEBACiAJX19sZTMyIGJ1ZlsxXTsKIAlpbnQgcmM7CiAKKwlpZiAocC0+cG9saWN5dmVycyA8IFBPTElDWURCX1ZFUlNJT05fRklMRU5BTUVfVFJBTlMpCisJCXJldHVybiAwOworCiAJbmVsID0gMDsKIAlyYyA9IGhhc2h0YWJfbWFwKHAtPmZpbGVuYW1lX3RyYW5zLCBoYXNodGFiX2NudCwgJm5lbCk7CiAJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL21vdW50LmMgYi9zZWN1cml0eS90b21veW8vbW91bnQuYwppbmRleCAxNjJhODY0Li45ZmMyZTE1IDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vbW91bnQuYworKysgYi9zZWN1cml0eS90b21veW8vbW91bnQuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJfQogCWlmIChuZWVkX2RldikgewogCQkvKiBHZXQgbW91bnQgcG9pbnQgb3IgZGV2aWNlIGZpbGUuICovCi0JCWlmIChrZXJuX3BhdGgoZGV2X25hbWUsIExPT0tVUF9GT0xMT1csICZwYXRoKSkgeworCQlpZiAoIWRldl9uYW1lIHx8IGtlcm5fcGF0aChkZXZfbmFtZSwgTE9PS1VQX0ZPTExPVywgJnBhdGgpKSB7CiAJCQllcnJvciA9IC1FTk9FTlQ7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9taXNjLmMgYi9zb3VuZC9jb3JlL21pc2MuYwppbmRleCAyYzQxODI1Li5lYjlmZTJlIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL21pc2MuYworKysgYi9zb3VuZC9jb3JlL21pc2MuYwpAQCAtNTgsMjYgKzU4LDYgQEAKIAllbHNlCiAJCXJldHVybiBwYXRoOwogfQotCi0vKiBwcmludCBmaWxlIGFuZCBsaW5lIHdpdGggYSBjZXJ0YWluIHByaW50ayBwcmVmaXggKi8KLXN0YXRpYyBpbnQgcHJpbnRfc25kX3BmeCh1bnNpZ25lZCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsaW5lLAotCQkJIGNvbnN0IGNoYXIgKmZvcm1hdCkKLXsKLQljb25zdCBjaGFyICpmaWxlID0gc2FuaXR5X2ZpbGVfbmFtZShwYXRoKTsKLQljaGFyIHRtcFtdID0gIjwwPiI7Ci0JY29uc3QgY2hhciAqcGZ4ID0gbGV2ZWwgPyBLRVJOX0RFQlVHIDogS0VSTl9ERUZBVUxUOwotCWludCByZXQgPSAwOwotCi0JaWYgKGZvcm1hdFswXSA9PSAnPCcgJiYgZm9ybWF0WzJdID09ICc+JykgewotCQl0bXBbMV0gPSBmb3JtYXRbMV07Ci0JCXBmeCA9IHRtcDsKLQkJcmV0ID0gMTsKLQl9Ci0JcHJpbnRrKCIlc0FMU0EgJXM6JWQ6ICIsIHBmeCwgZmlsZSwgbGluZSk7Ci0JcmV0dXJuIHJldDsKLX0KLSNlbHNlCi0jZGVmaW5lIHByaW50X3NuZF9wZngobGV2ZWwsIHBhdGgsIGxpbmUsIGZvcm1hdCkJMAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USykKQEAgLTg1LDE1ICs2NSwyOSBAQAogCQkgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKLQkKKyNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLCisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CisJY2hhciB2ZXJib3NlX2ZtdFtdID0gS0VSTl9ERUZBVUxUICJBTFNBICVzOiVkICVwViI7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcJCiAJaWYgKGRlYnVnIDwgbGV2ZWwpCiAJCXJldHVybjsKICNlbmRpZgorCiAJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLQlpZiAocHJpbnRfc25kX3BmeChsZXZlbCwgcGF0aCwgbGluZSwgZm9ybWF0KSkKLQkJZm9ybWF0ICs9IDM7IC8qIHNraXAgdGhlIHByaW50ayBsZXZlbC1wcmVmaXggKi8KKyNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLCisJdmFmLmZtdCA9IGZvcm1hdDsKKwl2YWYudmEgPSAmYXJnczsKKwlpZiAoZm9ybWF0WzBdID09ICc8JyAmJiBmb3JtYXRbMl0gPT0gJz4nKSB7CisJCW1lbWNweSh2ZXJib3NlX2ZtdCwgZm9ybWF0LCAzKTsKKwkJdmFmLmZtdCA9IGZvcm1hdCArIDM7CisJfSBlbHNlIGlmIChsZXZlbCkKKwkJbWVtY3B5KHZlcmJvc2VfZm10LCBLRVJOX0RFQlVHLCAzKTsKKwlwcmludGsodmVyYm9zZV9mbXQsIHNhbml0eV9maWxlX25hbWUocGF0aCksIGxpbmUsICZ2YWYpOworI2Vsc2UKIAl2cHJpbnRrKGZvcm1hdCwgYXJncyk7CisjZW5kaWYKIAl2YV9lbmQoYXJncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3NuZF9wcmludGspOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGlkc3BjZC5jIGIvc291bmQvcGNpL2FzaWhwaS9ocGlkc3BjZC5jCmluZGV4IGZiMzExZDguLjVjNmVhMTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpZHNwY2QuYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWRzcGNkLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkgICAgSFBJX1ZFUl9NSU5PUihIUElfVkVSKSAqIDEwMCArIEhQSV9WRVJfUkVMRUFTRShIUElfVkVSKSkpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJsaW51eC9wY2kuaCIKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzaG9ydCBocGlfZHNwX2NvZGVfb3Blbih1MzIgYWRhcHRlciwgc3RydWN0IGRzcF9jb2RlICpwc19kc3BfY29kZSwKIAl1MzIgKnBvc19lcnJvcl9jb2RlKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ZtODAxLmMgYi9zb3VuZC9wY2kvZm04MDEuYwppbmRleCBlYWNkNDkwLi5hN2VjNzAzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZm04MDEuYworKysgYi9zb3VuZC9wY2kvZm04MDEuYwpAQCAtMTIzNCw5ICsxMjM0LDEyIEBACiAJc3ByaW50ZihjaGlwLT50ZWEuYnVzX2luZm8sICJQQ0k6JXMiLCBwY2lfbmFtZShwY2kpKTsKIAlpZiAoKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spID4gMCAmJgogCSAgICAodGVhNTc1eF90dW5lciAmIFRVTkVSX1RZUEVfTUFTSykgPCA0KSB7Ci0JCWlmIChzbmRfdGVhNTc1eF9pbml0KCZjaGlwLT50ZWEpKQorCQlpZiAoc25kX3RlYTU3NXhfaW5pdCgmY2hpcC0+dGVhKSkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiVEVBNTc1eCByYWRpbyBub3QgZm91bmRcbiIpOwotCX0gZWxzZSBpZiAoKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spID09IDApCisJCQlzbmRfZm04MDFfZnJlZShjaGlwKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfSBlbHNlIGlmICgodGVhNTc1eF90dW5lciAmIFRVTkVSX1RZUEVfTUFTSykgPT0gMCkgewogCQkvKiBhdXRvZGV0ZWN0IHR1bmVyIGNvbm5lY3Rpb24gKi8KIAkJZm9yICh0ZWE1NzV4X3R1bmVyID0gMTsgdGVhNTc1eF90dW5lciA8PSAzOyB0ZWE1NzV4X3R1bmVyKyspIHsKIAkJCWNoaXAtPnRlYTU3NXhfdHVuZXIgPSB0ZWE1NzV4X3R1bmVyOwpAQCAtMTI0Niw2ICsxMjQ5LDEyIEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJaWYgKHRlYTU3NXhfdHVuZXIgPT0gNCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiVEVBNTc1eCByYWRpbyBub3QgZm91bmRcbiIpOworCQkJc25kX2ZtODAxX2ZyZWUoY2hpcCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KIAlzdHJsY3B5KGNoaXAtPnRlYS5jYXJkLCBzbmRfZm04MDFfdGVhNTc1eF9ncGlvc1sodGVhNTc1eF90dW5lciAmIFRVTkVSX1RZUEVfTUFTSykgLSAxXS5uYW1lLCBzaXplb2YoY2hpcC0+dGVhLmNhcmQpKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwppbmRleCA2OTZhYzI1Li5kNjk0ZTlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKQEAgLTUwNiw5ICs1MDYsMTEgQEAKIAkJCQloZGFfbmlkX3QgaHApCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgZnJvbnQsIDAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAorCWlmIChzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBmcm9udCkgJiBBQ19QSU5DQVBfRUFQRCkKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgZnJvbnQsIDAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAogCQkJICAgICFzcGVjLT5pbnZfZWFwZCA/IDB4MDAgOiAweDAyKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBocCwgMCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsCisJaWYgKHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIGhwKSAmIEFDX1BJTkNBUF9FQVBEKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBocCwgMCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsCiAJCQkgICAgIXNwZWMtPmludl9lYXBkID8gMHgwMCA6IDB4MDIpOwogfQogCkBAIC01MjQsNiArNTI2LDEwIEBACiAJY2FzZSAweDExZDQxODRhOgogCWNhc2UgMHgxMWQ0MTk0YToKIAljYXNlIDB4MTFkNDE5NGI6CisJY2FzZSAweDExZDQxOTg4OgorCWNhc2UgMHgxMWQ0MTk4YjoKKwljYXNlIDB4MTFkNDk4OWE6CisJY2FzZSAweDExZDQ5ODliOgogCQlhZDE5OHhfcG93ZXJfZWFwZF93cml0ZShjb2RlYywgMHgxMiwgMHgxMSk7CiAJCWJyZWFrOwogCWNhc2UgMHgxMWQ0MTk4MToKQEAgLTUzMywxMiArNTM5LDYgQEAKIAljYXNlIDB4MTFkNDE5ODY6CiAJCWFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKGNvZGVjLCAweDFiLCAweDFhKTsKIAkJYnJlYWs7Ci0JY2FzZSAweDExZDQxOTg4OgotCWNhc2UgMHgxMWQ0MTk4YjoKLQljYXNlIDB4MTFkNDk4OWE6Ci0JY2FzZSAweDExZDQ5ODliOgotCQlhZDE5OHhfcG93ZXJfZWFwZF93cml0ZShjb2RlYywgMHgyOSwgMHgyMik7Ci0JCWJyZWFrOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IDNlNmI5YTguLjY5NGI5ZGFmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC0zMTAyLDYgKzMxMDIsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4YWYsICJMZW5vdm8gRzU2MCIsIENYVDUwNjZfQVNVUyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzkzOCwgIkxlbm92byBHNTY1IiwgQ1hUNTA2Nl9BVVRPKSwKIAlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3YWEsICJMZW5vdm8iLCBDWFQ1MDY2X0lERUFQQUQpLCAvKiBGYWxsYmFjayBmb3IgTGVub3ZvcyB3aXRob3V0IGRvY2sgbWljICovCisJU05EX1BDSV9RVUlSSygweDFiMGEsIDB4MjA5MiwgIkN5YmVycG93ZXJQQyBHYW1lciBYcGxvcmVyIE41NzAwMSIsIENYVDUwNjZfQVVUTyksCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggN2E0ZTEwMC4uNDNmY2ZiZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTExNDEsNiArMTE0MSwxMyBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBvbjsKIAorCS8qIENvbnRyb2wgSFAgcGlucy9hbXBzIGRlcGVuZGluZyBvbiBtYXN0ZXJfbXV0ZSBzdGF0ZTsKKwkgKiBpbiBnZW5lcmFsLCBIUCBwaW5zL2FtcHMgY29udHJvbCBzaG91bGQgYmUgZW5hYmxlZCBpbiBhbGwgY2FzZXMsCisJICogYnV0IGN1cnJlbnRseSBzZXQgb25seSBmb3IgbWFzdGVyX211dGUsIGp1c3QgdG8gYmUgc2FmZQorCSAqLworCWRvX2F1dG9tdXRlKGNvZGVjLCBBUlJBWV9TSVpFKHNwZWMtPmF1dG9jZmcuaHBfcGlucyksCisJCSAgICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnMsIHNwZWMtPm1hc3Rlcl9tdXRlLCB0cnVlKTsKKwogCWlmICghc3BlYy0+YXV0b211dGUpCiAJCW9uID0gMDsKIAllbHNlCkBAIC02MjAxLDExICs2MjA4LDYgQEAKIC8qIHVwZGF0ZSBIUCwgbGluZSBhbmQgbW9ubyBvdXQgcGlucyBhY2NvcmRpbmcgdG8gdGhlIG1hc3RlciBzd2l0Y2ggKi8KIHN0YXRpYyB2b2lkIGFsYzI2MF9ocF9tYXN0ZXJfdXBkYXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCi0JLyogY2hhbmdlIEhQIHBpbnMgKi8KLQlkb19hdXRvbXV0ZShjb2RlYywgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmhwX3BpbnMpLAotCQkgICAgc3BlYy0+YXV0b2NmZy5ocF9waW5zLCBzcGVjLT5tYXN0ZXJfbXV0ZSwgdHJ1ZSk7CiAJdXBkYXRlX3NwZWFrZXJzKGNvZGVjKTsKIH0KIApAQCAtMTE5MjQsNyArMTE5MjYsNyBAQAogICogIDB4MWIgPSBwb3J0IHJlcGxpY2F0b3IgaGVhZHBob25lIG91dAogICovCiAKLSNkZWZpbmUgQUxDX0hQX0VWRU5UCTB4MzcKKyNkZWZpbmUgQUxDX0hQX0VWRU5UCUFMQzg4MF9IUF9FVkVOVAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9mdWppdHN1X3Vuc29sX3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTENfSFBfRVZFTlR9LApAQCAtMTM4NjAsNiArMTM4NjIsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNWIsICJBY2VyIEFzcGlyZSBPbmUiLAogCQkJCQkJQUxDMjY4X0FDRVJfQVNQSVJFX09ORSksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDI1MywgIkRlbGwgT0VNIiwgQUxDMjY4X0RFTEwpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyYjAsICJEZWxsIEluc3Bpcm9uIDkxMCIsIEFMQzI2OF9BVVRPKSwKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMDI4LCAweGZmZjAsIDB4MDJiMCwKIAkJCSJEZWxsIEluc3Bpcm9uIE1pbmk5L1Zvc3RybyBBOTAiLCBBTEMyNjhfREVMTCksCiAJLyogYWxtb3N0IGNvbXBhdGlibGUgd2l0aCB0b3NoaWJhIGJ1dCB3aXRoIG9wdGlvbmFsIGRpZ2l0YWwgb3V0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCmluZGV4IDdmYmZhMDUuLmVkYTk1NWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKKysrIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwpAQCAtODQ4LDkgKzg0OCwxMCBAQAogCWlmIChJU19FUlIoc3NjKSkKIAkJcHJfd2FybigiVW5hYmxlIHRvIHBhcmVudCBBU29DIFNTQyBEQUkgb24gU1NDOiAlbGRcbiIsCiAJCQlQVFJfRVJSKHNzYykpOwotCWVsc2UKKwllbHNlIHsKIAkJc3NjX3BkZXYtPmRldi5wYXJlbnQgPSAmKHNzYy0+cGRldi0+ZGV2KTsKLQlzc2NfZnJlZShzc2MpOworCQlzc2NfZnJlZShzc2MpOworCX0KIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc3NjX3BkZXYpOwogCWlmIChyZXQgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTgzNi5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTgzNi5jCmluZGV4IGVhNDk1MWMuLmY3OWQxNjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE4MzYuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxODM2LmMKQEAgLTc1LDcgKzc1LDcgQEAKIAkJLmNwdV9kYWlfbmFtZSA9ICJiZmluLXRkbS4wIiwKIAkJLmNvZGVjX2RhaV9uYW1lID0gImFkMTgzNi1oaWZpIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAiYmZpbi10ZG0tcGNtLWF1ZGlvIiwKLQkJLmNvZGVjX25hbWUgPSAiYWQxODM2LjAiLAorCQkuY29kZWNfbmFtZSA9ICJzcGkwLjQiLAogCQkub3BzID0gJmJmNXh4X2FkMTgzNl9vcHMsCiAJfSwKIAl7CkBAIC04NCw3ICs4NCw3IEBACiAJCS5jcHVfZGFpX25hbWUgPSAiYmZpbi10ZG0uMSIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJhZDE4MzYtaGlmaSIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gImJmaW4tdGRtLXBjbS1hdWRpbyIsCi0JCS5jb2RlY19uYW1lID0gImFkMTgzNi4wIiwKKwkJLmNvZGVjX25hbWUgPSAic3BpMC40IiwKIAkJLm9wcyA9ICZiZjV4eF9hZDE4MzZfb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKaW5kZXggYWI2M2Q1Mi4uNzU0YzQ5NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCkBAIC0xNDUsMjIgKzE0NSwyMiBAQAogCS8qIGJpdCBzaXplICovCiAJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQl3b3JkX2xlbiA9IDM7CisJCXdvcmRfbGVuID0gQUQxODM2X1dPUkRfTEVOXzE2OwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKLQkJd29yZF9sZW4gPSAxOworCQl3b3JkX2xlbiA9IEFEMTgzNl9XT1JEX0xFTl8yMDsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgotCQl3b3JkX2xlbiA9IDA7CisJCXdvcmRfbGVuID0gQUQxODM2X1dPUkRfTEVOXzI0OwogCQlicmVhazsKIAl9CiAKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwxLAotCQlBRDE4MzZfREFDX1dPUkRfTEVOX01BU0ssIHdvcmRfbGVuKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwxLCBBRDE4MzZfREFDX1dPUkRfTEVOX01BU0ssCisJCXdvcmRfbGVuIDw8IEFEMTgzNl9EQUNfV09SRF9MRU5fT0ZGU0VUKTsKIAotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIsCi0JCUFEMTgzNl9BRENfV09SRF9MRU5fTUFTSywgd29yZF9sZW4pOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIsIEFEMTgzNl9BRENfV09SRF9MRU5fTUFTSywKKwkJd29yZF9sZW4gPDwgQUQxODM2X0FEQ19XT1JEX09GRlNFVCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmggYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5oCmluZGV4IDg0NTU5NjcuLjlkNmEzZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaApAQCAtMjUsNiArMjUsNyBAQAogI2RlZmluZSBBRDE4MzZfREFDX1NFUkZNVF9QQ0syNTYgICAgICAgKDB4NCA8PCA1KQogI2RlZmluZSBBRDE4MzZfREFDX1NFUkZNVF9QQ0sxMjggICAgICAgKDB4NSA8PCA1KQogI2RlZmluZSBBRDE4MzZfREFDX1dPUkRfTEVOX01BU0sgICAgICAgMHgxOAorI2RlZmluZSBBRDE4MzZfREFDX1dPUkRfTEVOX09GRlNFVCAgICAgMwogCiAjZGVmaW5lIEFEMTgzNl9EQUNfQ1RSTDIgICAgICAgICAgICAgICAxCiAjZGVmaW5lIEFEMTgzNl9EQUNMMV9NVVRFICAgICAgICAgICAgICAwCkBAIC01MSw2ICs1Miw3IEBACiAjZGVmaW5lIEFEMTgzNl9BRENMMl9NVVRFIAkJMgogI2RlZmluZSBBRDE4MzZfQURDUjJfTVVURSAJCTMKICNkZWZpbmUgQUQxODM2X0FEQ19XT1JEX0xFTl9NQVNLICAgICAgIDB4MzAKKyNkZWZpbmUgQUQxODM2X0FEQ19XT1JEX09GRlNFVCAgICAgICAgIDUKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfTUFTSwkgICAgICAgKDcgPDwgNikKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMjU2ICAgICAgICgweDQgPDwgNikKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMTI4ICAgICAgICgweDUgPDwgNikKQEAgLTYwLDQgKzYyLDggQEAKIAogI2RlZmluZSBBRDE4MzZfTlVNX1JFR1MgICAgICAgICAgICAgICAgMTYKIAorI2RlZmluZSBBRDE4MzZfV09SRF9MRU5fMjQgMHgwCisjZGVmaW5lIEFEMTgzNl9XT1JEX0xFTl8yMCAweDEKKyNkZWZpbmUgQUQxODM2X1dPUkRfTEVOXzE2IDB4MgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jIGIvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMKaW5kZXggZjhjNjYzZC4uZDY4ZWE1MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMKQEAgLTI2MiwxNCArMjYyLDE0IEBACiB9CiAKIC8qIExpbmUgZGlzY2lwbGluZSAucmVjZWl2ZV9idWYoKSAqLwotc3RhdGljIHVuc2lnbmVkIGludCB2MjUzX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCB2MjUzX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB0dHktPmRpc2NfZGF0YTsKIAlzdHJ1Y3QgY3gyMDQ0Ml9wcml2ICpjeDIwNDQyOwogCiAJaWYgKCFjb2RlYykKLQkJcmV0dXJuIGNvdW50OworCQlyZXR1cm47CiAKIAljeDIwNDQyID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKQEAgLTI4MSw4ICsyODEsNiBAQAogCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl0dHktPm9wcy0+d3JpdGU7CiAJCWNvZGVjLT5jYXJkLT5wb3BfdGltZSA9IDE7CiAJfQotCi0JcmV0dXJuIGNvdW50OwogfQogCiAvKiBMaW5lIGRpc2NpcGxpbmUgLndyaXRlX3dha2V1cCgpICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODgwNC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg4MDQuYwppbmRleCA2Nzg1Njg4Li45YTVlNjdjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODgwNC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204ODA0LmMKQEAgLTY4MCwyMCArNjgwLDI1IEBACiAjZGVmaW5lIFdNODgwNF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQogCisjZGVmaW5lIFdNODgwNF9SQVRFUyAoU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKKwkJICAgICAgU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV82NDAwMCB8IFwKKwkJICAgICAgU05EUlZfUENNX1JBVEVfODgyMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCB8IFwKKwkJICAgICAgU05EUlZfUENNX1JBVEVfMTc2NDAwIHwgU05EUlZfUENNX1JBVEVfMTkyMDAwKQorCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciB3bTg4MDRfZGFpID0gewogCS5uYW1lID0gIndtODgwNC1zcGRpZiIsCiAJLnBsYXliYWNrID0gewogCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAogCQkuY2hhbm5lbHNfbWluID0gMiwKIAkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwLAorCQkucmF0ZXMgPSBXTTg4MDRfUkFURVMsCiAJCS5mb3JtYXRzID0gV004ODA0X0ZPUk1BVFMsCiAJfSwKIAkuY2FwdHVyZSA9IHsKIAkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAogCQkuY2hhbm5lbHNfbWluID0gMiwKIAkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwLAorCQkucmF0ZXMgPSBXTTg4MDRfUkFURVMsCiAJCS5mb3JtYXRzID0gV004ODA0X0ZPUk1BVFMsCiAJfSwKIAkub3BzID0gJndtODgwNF9kYWlfb3BzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MTUuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTE1LmMKaW5kZXggYTBiMWE3Mi4uZTJhYjRmYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MTUuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5jCkBAIC0xODM5LDcgKzE4MzksNyBAQAogCWludCBvbGQ7CiAKIAkvKiBEaXNhYmxlIFNZU0NMSyB3aGlsZSB3ZSByZWNvbmZpZ3VyZSAqLwotCW9sZCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X0FJRl9DTE9DS0lOR18xKTsKKwlvbGQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMSkgJiBXTTg5MTVfU1lTQ0xLX0VOQTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGX0NMT0NLSU5HXzEsCiAJCQkgICAgV004OTE1X1NZU0NMS19FTkEsIDApOwogCkBAIC0yMDM4LDYgKzIwMzgsNyBAQAogCQlicmVhazsKIAljYXNlIFdNODkxNV9GTExfTUNMSzI6CiAJCXJlZyA9IDE7CisJCWJyZWFrOwogCWNhc2UgV004OTE1X0ZMTF9EQUNMUkNMSzE6CiAJCXJlZyA9IDI7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKaW5kZXggZjkwYWU0Mi4uNWUwNWVlZDk2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKQEAgLTE5OTksMTIgKzE5OTksMTIgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBJZiB0aGUgbGVmdCBQR0EgaXMgZW5hYmxlZCBoaXQgdGhhdCBWVSBiaXQuLi4gKi8KLQlpZiAocmVnX2NhY2hlW1dNODk2Ml9QV1JfTUdNVF8yXSAmIFdNODk2Ml9IUE9VVExfUEdBX0VOQSkKKwlpZiAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjJfUFdSX01HTVRfMikgJiBXTTg5NjJfSFBPVVRMX1BHQV9FTkEpCiAJCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjJfSFBPVVRMX1ZPTFVNRSwKIAkJCQkgICAgIHJlZ19jYWNoZVtXTTg5NjJfSFBPVVRMX1ZPTFVNRV0pOwogCiAJLyogLi4ub3RoZXJ3aXNlIHRoZSByaWdodC4gIFRoZSBWVSBpcyBzdGVyZW8uICovCi0JaWYgKHJlZ19jYWNoZVtXTTg5NjJfUFdSX01HTVRfMl0gJiBXTTg5NjJfSFBPVVRSX1BHQV9FTkEpCisJaWYgKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYyX1BXUl9NR01UXzIpICYgV004OTYyX0hQT1VUUl9QR0FfRU5BKQogCQlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgV004OTYyX0hQT1VUUl9WT0xVTUUsCiAJCQkJICAgICByZWdfY2FjaGVbV004OTYyX0hQT1VUUl9WT0xVTUVdKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwppbmRleCBlNTViMjk4Li45ZTM3MGQxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwpAQCAtMjE1LDIzICsyMTUsMjMgQEAKIFNPQ19TSU5HTEVfVExWKCJJTjFMIFZvbHVtZSIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgMCwgMzEsIDAsCiAJICAgICAgIGlucGdhX3RsdiksCiBTT0NfU0lOR0xFKCJJTjFMIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMSksCi1TT0NfU0lOR0xFKCJJTjFMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjFMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNiwgMSwgMCksCiAKIFNPQ19TSU5HTEVfVExWKCJJTjFSIFZvbHVtZSIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsIDAsIDMxLCAwLAogCSAgICAgICBpbnBnYV90bHYpLAogU09DX1NJTkdMRSgiSU4xUiBTd2l0Y2giLCBXTTg5OTNfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLCA3LCAxLCAxKSwKLVNPQ19TSU5HTEUoIklOMVIgWkMgU3dpdGNoIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjFSIFpDIFN3aXRjaCIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsIDYsIDEsIDApLAogCiAKIFNPQ19TSU5HTEVfVExWKCJJTjJMIFZvbHVtZSIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgMCwgMzEsIDAsCiAJICAgICAgIGlucGdhX3RsdiksCiBTT0NfU0lOR0xFKCJJTjJMIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNywgMSwgMSksCi1TT0NfU0lOR0xFKCJJTjJMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjJMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNiwgMSwgMCksCiAKIFNPQ19TSU5HTEVfVExWKCJJTjJSIFZvbHVtZSIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsIDAsIDMxLCAwLAogCSAgICAgICBpbnBnYV90bHYpLAogU09DX1NJTkdMRSgiSU4yUiBTd2l0Y2giLCBXTTg5OTNfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCA3LCAxLCAxKSwKLVNPQ19TSU5HTEUoIklOMlIgWkMgU3dpdGNoIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjJSIFpDIFN3aXRjaCIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsIDYsIDEsIDApLAogCiBTT0NfU0lOR0xFX1RMVigiTUlYSU5MIElOMkwgVm9sdW1lIiwgV004OTkzX0lOUFVUX01JWEVSMywgNywgMSwgMCwKIAkgICAgICAgaW5taXhfc3dfdGx2KSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX2RtYS5jIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKaW5kZXggMTVkYWMwZi4uNjY4MGMwYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCSAqIHNob3VsZCBhbGxvY2F0ZSBhIERNQSBidWZmZXIgb25seSBmb3IgdGhlIHN0cmVhbXMgdGhhdCBhcmUgdmFsaWQuCiAJICovCiAKLQlpZiAoZGFpLT5kcml2ZXItPnBsYXliYWNrLmNoYW5uZWxzX21pbikgeworCWlmIChwY20tPnN0cmVhbXNbMF0uc3Vic3RyZWFtKSB7CiAJCXJldCA9IHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLCBjYXJkLT5kZXYsCiAJCQlmc2xfZG1hX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXgsCiAJCQkmcGNtLT5zdHJlYW1zWzBdLnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcik7CkBAIC0zMjAsMTMgKzMyMCwxMyBAQAogCQl9CiAJfQogCi0JaWYgKGRhaS0+ZHJpdmVyLT5jYXB0dXJlLmNoYW5uZWxzX21pbikgeworCWlmIChwY20tPnN0cmVhbXNbMV0uc3Vic3RyZWFtKSB7CiAJCXJldCA9IHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLCBjYXJkLT5kZXYsCiAJCQlmc2xfZG1hX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXgsCiAJCQkmcGNtLT5zdHJlYW1zWzFdLnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcik7CiAJCWlmIChyZXQpIHsKLQkJCXNuZF9kbWFfZnJlZV9wYWdlcygmcGNtLT5zdHJlYW1zWzBdLnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcik7CiAJCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbid0IGFsbG9jIGNhcHR1cmUgZG1hIGJ1ZmZlclxuIik7CisJCQlzbmRfZG1hX2ZyZWVfcGFnZXMoJnBjbS0+c3RyZWFtc1swXS5zdWJzdHJlYW0tPmRtYV9idWZmZXIpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTQ0OSw3ICs0NDksOCBAQAogCWRtYV9wcml2YXRlLT5sZF9idWZfcGh5cyA9IGxkX2J1Zl9waHlzOwogCWRtYV9wcml2YXRlLT5kbWFfYnVmX3BoeXMgPSBzdWJzdHJlYW0tPmRtYV9idWZmZXIuYWRkcjsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGRtYV9wcml2YXRlLT5pcnEsIGZzbF9kbWFfaXNyLCAwLCAiRE1BIiwgZG1hX3ByaXZhdGUpOworCXJldCA9IHJlcXVlc3RfaXJxKGRtYV9wcml2YXRlLT5pcnEsIGZzbF9kbWFfaXNyLCAwLCAiZnNsZG1hLWF1ZGlvIiwKKwkJCSAgZG1hX3ByaXZhdGUpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJjYW4ndCByZWdpc3RlciBJU1IgZm9yIElSUSAldSAocmV0PSVpKVxuIiwKIAkJCWRtYV9wcml2YXRlLT5pcnEsIHJldCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9pMnMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCmluZGV4IGZmYTA5YjNiMi4uOTkyYTczMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvaTJzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvaTJzLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCWlmICghaTJzKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlhY3RpdmUgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNNT0QpOworCWFjdGl2ZSA9IHJlYWRsKGkycy0+YWRkciArIEkyU0NPTik7CiAKIAlpZiAoaXNfc2Vjb25kYXJ5KGkycykpCiAJCWFjdGl2ZSAmPSBDT05fVFhTRE1BX0FDVElWRTsKQEAgLTIyMyw3ICsyMjMsNyBAQAogCWlmICghaTJzKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlhY3RpdmUgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNNT0QpICYgQ09OX1JYRE1BX0FDVElWRTsKKwlhY3RpdmUgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNDT04pICYgQ09OX1JYRE1BX0FDVElWRTsKIAogCXJldHVybiBhY3RpdmUgPyB0cnVlIDogZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNhY2hlLmMgYi9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKaW5kZXggMDZiN2I4MS4uYzAwNWNlYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jYWNoZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY2FjaGUuYwpAQCAtNDY2LDYgKzQ2Niw5IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfZ2V0X2NhY2hlX3ZhbChjb25zdCB2b2lkICpiYXNlLCB1bnNpZ25lZCBpbnQgaWR4LAogCQl1bnNpZ25lZCBpbnQgd29yZF9zaXplKQogeworCWlmICghYmFzZSkKKwkJcmV0dXJuIC0xOworCiAJc3dpdGNoICh3b3JkX3NpemUpIHsKIAljYXNlIDE6IHsKIAkJY29uc3QgdTggKmNhY2hlID0gYmFzZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggOTk5YmIwOC4uMzJhYjdmYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTMyNSw2ICszMjUsNyBAQAogfQogCiBzdGF0aWMgaW50IGRhcG1faXNfc2hhcmVkX2tjb250cm9sKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqa2NvbnRyb2x3LAogCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprY29udHJvbF9uZXcsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqKmtjb250cm9sKQogewpAQCAtMzM0LDYgKzMzNSw4IEBACiAJKmtjb250cm9sID0gTlVMTDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmRhcG0tPmNhcmQtPndpZGdldHMsIGxpc3QpIHsKKwkJaWYgKHcgPT0ga2NvbnRyb2x3IHx8IHctPmRhcG0gIT0ga2NvbnRyb2x3LT5kYXBtKQorCQkJY29udGludWU7CiAJCWZvciAoaSA9IDA7IGkgPCB3LT5udW1fa2NvbnRyb2xzOyBpKyspIHsKIAkJCWlmICgmdy0+a2NvbnRyb2xfbmV3c1tpXSA9PSBrY29udHJvbF9uZXcpIHsKIAkJCQlpZiAody0+a2NvbnRyb2xzKQpAQCAtMzQ3LDkgKzM1MCw5IEBACiB9CiAKIC8qIGNyZWF0ZSBuZXcgZGFwbSBtaXhlciBjb250cm9sICovCi1zdGF0aWMgaW50IGRhcG1fbmV3X21peGVyKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3N0YXRpYyBpbnQgZGFwbV9uZXdfbWl4ZXIoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncpCiB7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gdy0+ZGFwbTsKIAlpbnQgaSwgcmV0ID0gMDsKIAlzaXplX3QgbmFtZV9sZW4sIHByZWZpeF9sZW47CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwYXRoOwpAQCAtNDQ3LDkgKzQ1MCw5IEBACiB9CiAKIC8qIGNyZWF0ZSBuZXcgZGFwbSBtdXggY29udHJvbCAqLwotc3RhdGljIGludCBkYXBtX25ld19tdXgoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQorc3RhdGljIGludCBkYXBtX25ld19tdXgoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncpCiB7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gdy0+ZGFwbTsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnBhdGggPSBOVUxMOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRhcG0tPmNhcmQtPnNuZF9jYXJkOwpAQCAtNDY4LDcgKzQ3MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXNoYXJlZCA9IGRhcG1faXNfc2hhcmVkX2tjb250cm9sKGRhcG0sICZ3LT5rY29udHJvbF9uZXdzWzBdLAorCXNoYXJlZCA9IGRhcG1faXNfc2hhcmVkX2tjb250cm9sKGRhcG0sIHcsICZ3LT5rY29udHJvbF9uZXdzWzBdLAogCQkJCQkgJmtjb250cm9sKTsKIAlpZiAoa2NvbnRyb2wpIHsKIAkJd2xpc3QgPSBrY29udHJvbC0+cHJpdmF0ZV9kYXRhOwpAQCAtNTMyLDggKzUzNSw3IEBACiB9CiAKIC8qIGNyZWF0ZSBuZXcgZGFwbSB2b2x1bWUgY29udHJvbCAqLwotc3RhdGljIGludCBkYXBtX25ld19wZ2Eoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQorc3RhdGljIGludCBkYXBtX25ld19wZ2Eoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncpCiB7CiAJaWYgKHctPm51bV9rY29udHJvbHMpCiAJCWRldl9lcnIody0+ZGFwbS0+ZGV2LApAQCAtMTgyMywxMyArMTgyNSwxMyBAQAogCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQkJdy0+cG93ZXJfY2hlY2sgPSBkYXBtX2dlbmVyaWNfY2hlY2tfcG93ZXI7Ci0JCQlkYXBtX25ld19taXhlcihkYXBtLCB3KTsKKwkJCWRhcG1fbmV3X21peGVyKHcpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX211eDoKIAkJY2FzZSBzbmRfc29jX2RhcG1fdmlydF9tdXg6CiAJCWNhc2Ugc25kX3NvY19kYXBtX3ZhbHVlX211eDoKIAkJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9nZW5lcmljX2NoZWNrX3Bvd2VyOwotCQkJZGFwbV9uZXdfbXV4KGRhcG0sIHcpOworCQkJZGFwbV9uZXdfbXV4KHcpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX2FkYzoKIAkJY2FzZSBzbmRfc29jX2RhcG1fYWlmX291dDoKQEAgLTE4NDIsNyArMTg0NCw3IEBACiAJCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKIAkJY2FzZSBzbmRfc29jX2RhcG1fb3V0X2RydjoKIAkJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9nZW5lcmljX2NoZWNrX3Bvd2VyOwotCQkJZGFwbV9uZXdfcGdhKGRhcG0sIHcpOworCQkJZGFwbV9uZXdfcGdhKHcpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX2lucHV0OgogCQljYXNlIHNuZF9zb2NfZGFwbV9vdXRwdXQ6CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYyBiL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jCmluZGV4IGQ0N2JlZmYuLmE5MTcxOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jCisrKyBiL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jCkBAIC0yMjcsNiArMjI3LDcgQEAKIAlyZXQgPSB1c2I2ZmlyZV9md19paGV4X2luaXQoZncsIHJlYyk7CiAJaWYgKHJldCA8IDApIHsKIAkJa2ZyZWUocmVjKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJlcnJvciB2YWxpZGF0aW5nIGV6dXNiICIKIAkJCQkiZmlybXdhcmUgJXMuXG4iLCBmd25hbWUpOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3F1aXJrcy5jIGIvc291bmQvdXNiL3F1aXJrcy5jCmluZGV4IDJlOTY5Y2IuLjA5MGUxOTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9xdWlya3MuYworKysgYi9zb3VuZC91c2IvcXVpcmtzLmMKQEAgLTQwMyw3ICs0MDMsNyBAQAogc3RhdGljIGludCBzbmRfdXNiX2NtNjIwNl9ib290X3F1aXJrKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCiB7CiAJaW50IGVyciwgcmVnOwotCWludCB2YWxbXSA9IHsweDIwMGMsIDB4MzAwMCwgMHhmODAwLCAweDE0M2YsIDB4MDAwMCwgMHgzMDAwfTsKKwlpbnQgdmFsW10gPSB7MHgyMDA0LCAweDMwMDAsIDB4ZjgwMCwgMHgxNDNmLCAweDAwMDAsIDB4MzAwMH07CiAKIAlmb3IgKHJlZyA9IDA7IHJlZyA8IEFSUkFZX1NJWkUodmFsKTsgcmVnKyspIHsKIAkJZXJyID0gc25kX3VzYl9jbTEwNl93cml0ZV9pbnRfcmVnKGRldiwgcmVnLCB2YWxbcmVnXSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYwppbmRleCBiNjcxODYyMjguLjJkYTkxNjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYwpAQCAtNDc0LDcgKzQ3NCw3IEBACiAJdW5zaWduZWQgaW50IG5yX2V2ZW50c1tuc3lzY2FsbHNdLAogCQkgICAgIGV4cGVjdGVkX25yX2V2ZW50c1tuc3lzY2FsbHNdLCBpLCBqOwogCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbHNbbnN5c2NhbGxzXSwgKmV2c2VsOwotCWludCBzYW1wbGVfc2l6ZSA9IHBlcmZfc2FtcGxlX3NpemUoYXR0ci5zYW1wbGVfdHlwZSk7CisJaW50IHNhbXBsZV9zaXplID0gX19wZXJmX2V2c2VsX19zYW1wbGVfc2l6ZShhdHRyLnNhbXBsZV90eXBlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuc3lzY2FsbHM7ICsraSkgewogCQljaGFyIG5hbWVbNjRdOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCAwZmU5YWRmLi4zYzFiOGE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtMzUsMjIgKzM1LDYgQEAKIAlyZXR1cm4gcGVyZl9ldmVudF9fbmFtZXNbaWRdOwogfQogCi1pbnQgcGVyZl9zYW1wbGVfc2l6ZSh1NjQgc2FtcGxlX3R5cGUpCi17Ci0JdTY0IG1hc2sgPSBzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX01BU0s7Ci0JaW50IHNpemUgPSAwOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJaWYgKG1hc2sgJiAoMVVMTCA8PCBpKSkKLQkJCXNpemUrKzsKLQl9Ci0KLQlzaXplICo9IHNpemVvZih1NjQpOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9zYW1wbGUgc3ludGhfc2FtcGxlID0gewogCS5waWQJICAgPSAtMSwKIAkudGlkCSAgID0gLTEsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCmluZGV4IGMwODMzMjguLjFkN2Y2NjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCkBAIC04Miw4ICs4Miw2IEBACiAJc3RydWN0IGlwX2NhbGxjaGFpbiAqY2FsbGNoYWluOwogfTsKIAotaW50IHBlcmZfc2FtcGxlX3NpemUodTY0IHNhbXBsZV90eXBlKTsKLQogI2RlZmluZSBCVUlMRF9JRF9TSVpFIDIwCiAKIHN0cnVjdCBidWlsZF9pZF9ldmVudCB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKaW5kZXggNTBhYTM0OC4uYjAyMWVhOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgImV2bGlzdC5oIgogI2luY2x1ZGUgImV2c2VsLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCiAKICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogCkBAIC0yNTcsMTkgKzI1NiwxNSBAQAogCXJldHVybiBldmxpc3QtPm1tYXAgIT0gTlVMTCA/IDAgOiAtRU5PTUVNOwogfQogCi1zdGF0aWMgaW50IF9fcGVyZl9ldmxpc3RfX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKK3N0YXRpYyBpbnQgX19wZXJmX2V2bGlzdF9fbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwKIAkJCSAgICAgICBpbnQgaWR4LCBpbnQgcHJvdCwgaW50IG1hc2ssIGludCBmZCkKIHsKIAlldmxpc3QtPm1tYXBbaWR4XS5wcmV2ID0gMDsKIAlldmxpc3QtPm1tYXBbaWR4XS5tYXNrID0gbWFzazsKIAlldmxpc3QtPm1tYXBbaWR4XS5iYXNlID0gbW1hcChOVUxMLCBldmxpc3QtPm1tYXBfbGVuLCBwcm90LAogCQkJCSAgICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKLQlpZiAoZXZsaXN0LT5tbWFwW2lkeF0uYmFzZSA9PSBNQVBfRkFJTEVEKSB7Ci0JCWlmIChldmxpc3QtPmNwdXMtPm1hcFtpZHhdID09IC0xICYmIGV2c2VsLT5hdHRyLmluaGVyaXQpCi0JCQl1aV9fd2FybmluZygiSW5oZXJpdCBpcyBub3QgYWxsb3dlZCBvbiBwZXItdGFzayAiCi0JCQkJICAgICJldmVudHMgdXNpbmcgbW1hcC5cbiIpOworCWlmIChldmxpc3QtPm1tYXBbaWR4XS5iYXNlID09IE1BUF9GQUlMRUQpCiAJCXJldHVybiAtMTsKLQl9CiAKIAlwZXJmX2V2bGlzdF9fYWRkX3BvbGxmZChldmxpc3QsIGZkKTsKIAlyZXR1cm4gMDsKQEAgLTI4OSw3ICsyODQsNyBAQAogCiAJCQkJaWYgKG91dHB1dCA9PSAtMSkgewogCQkJCQlvdXRwdXQgPSBmZDsKLQkJCQkJaWYgKF9fcGVyZl9ldmxpc3RfX21tYXAoZXZsaXN0LCBldnNlbCwgY3B1LAorCQkJCQlpZiAoX19wZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIGNwdSwKIAkJCQkJCQkJcHJvdCwgbWFzaywgb3V0cHV0KSA8IDApCiAJCQkJCQlnb3RvIG91dF91bm1hcDsKIAkJCQl9IGVsc2UgewpAQCAtMzI5LDcgKzMyNCw3IEBACiAKIAkJCWlmIChvdXRwdXQgPT0gLTEpIHsKIAkJCQlvdXRwdXQgPSBmZDsKLQkJCQlpZiAoX19wZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIGV2c2VsLCB0aHJlYWQsCisJCQkJaWYgKF9fcGVyZl9ldmxpc3RfX21tYXAoZXZsaXN0LCB0aHJlYWQsCiAJCQkJCQkJcHJvdCwgbWFzaywgb3V0cHV0KSA8IDApCiAJCQkJCWdvdG8gb3V0X3VubWFwOwogCQkJfSBlbHNlIHsKQEAgLTQ2MCwzMyArNDU1LDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXU2NCBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCitib29sIHBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfdHlwZShjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOwotCXU2NCB0eXBlID0gMDsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zLCAqZmlyc3Q7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgewotCQlpZiAoIXR5cGUpCi0JCQl0eXBlID0gcG9zLT5hdHRyLnNhbXBsZV90eXBlOwotCQllbHNlIGlmICh0eXBlICE9IHBvcy0+YXR0ci5zYW1wbGVfdHlwZSkKLQkJCWRpZSgibm9uIG1hdGNoaW5nIHNhbXBsZV90eXBlIik7CisJcG9zID0gZmlyc3QgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHBvcywgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgeworCQlpZiAoZmlyc3QtPmF0dHIuc2FtcGxlX3R5cGUgIT0gcG9zLT5hdHRyLnNhbXBsZV90eXBlKQorCQkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXJldHVybiB0eXBlOworCXJldHVybiB0cnVlOworfQorCit1NjQgcGVyZl9ldmxpc3RfX3NhbXBsZV90eXBlKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQoreworCXN0cnVjdCBwZXJmX2V2c2VsICpmaXJzdDsKKworCWZpcnN0ID0gbGlzdF9lbnRyeShldmxpc3QtPmVudHJpZXMubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOworCXJldHVybiBmaXJzdC0+YXR0ci5zYW1wbGVfdHlwZTsKK30KKworYm9vbCBwZXJmX2V2bGlzdF9fdmFsaWRfc2FtcGxlX2lkX2FsbChjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zLCAqZmlyc3Q7CisKKwlwb3MgPSBmaXJzdCA9IGxpc3RfZW50cnkoZXZsaXN0LT5lbnRyaWVzLm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUocG9zLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CisJCWlmIChmaXJzdC0+YXR0ci5zYW1wbGVfaWRfYWxsICE9IHBvcy0+YXR0ci5zYW1wbGVfaWRfYWxsKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOwogfQogCiBib29sIHBlcmZfZXZsaXN0X19zYW1wbGVfaWRfYWxsKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQogewotCWJvb2wgdmFsdWUgPSBmYWxzZSwgZmlyc3QgPSB0cnVlOwotCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7CisJc3RydWN0IHBlcmZfZXZzZWwgKmZpcnN0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKLQkJaWYgKGZpcnN0KSB7Ci0JCQl2YWx1ZSA9IHBvcy0+YXR0ci5zYW1wbGVfaWRfYWxsOwotCQkJZmlyc3QgPSBmYWxzZTsKLQkJfSBlbHNlIGlmICh2YWx1ZSAhPSBwb3MtPmF0dHIuc2FtcGxlX2lkX2FsbCkKLQkJCWRpZSgibm9uIG1hdGNoaW5nIHNhbXBsZV9pZF9hbGwiKTsKLQl9Ci0KLQlyZXR1cm4gdmFsdWU7CisJZmlyc3QgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CisJcmV0dXJuIGZpcnN0LT5hdHRyLnNhbXBsZV9pZF9hbGw7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmggYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKaW5kZXggMGExZWYxZi4uYjJiODYyMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaApAQCAtNjYsNyArNjYsOSBAQAogdm9pZCBwZXJmX2V2bGlzdF9fZGVsZXRlX21hcHMoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogaW50IHBlcmZfZXZsaXN0X19zZXRfZmlsdGVycyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7CiAKLXU2NCBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwotYm9vbCBwZXJmX2V2bGlzdF9fc2FtcGxlX2lkX2FsbChjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7Cit1NjQgcGVyZl9ldmxpc3RfX3NhbXBsZV90eXBlKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKK2Jvb2wgcGVyZl9ldmxpc3RfX3NhbXBsZV9pZF9hbGwoY29uc3QgY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogCitib29sIHBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfdHlwZShjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7Citib29sIHBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfaWRfYWxsKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKICNlbmRpZiAvKiBfX1BFUkZfRVZMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKaW5kZXggY2NhMjllZC4uMDIzOWViOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKQEAgLTE1LDYgKzE1LDIyIEBACiAKICNkZWZpbmUgRkQoZSwgeCwgeSkgKCooaW50ICopeHlhcnJheV9fZW50cnkoZS0+ZmQsIHgsIHkpKQogCitpbnQgX19wZXJmX2V2c2VsX19zYW1wbGVfc2l6ZSh1NjQgc2FtcGxlX3R5cGUpCit7CisJdTY0IG1hc2sgPSBzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX01BU0s7CisJaW50IHNpemUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKwkJaWYgKG1hc2sgJiAoMVVMTCA8PCBpKSkKKwkJCXNpemUrKzsKKwl9CisKKwlzaXplICo9IHNpemVvZih1NjQpOworCisJcmV0dXJuIHNpemU7Cit9CisKIHZvaWQgcGVyZl9ldnNlbF9faW5pdChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsIGludCBpZHgpCiB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZzZWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCmluZGV4IGY3OWJiMmMuLjdlOTM2NmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCkBAIC0xNDksNCArMTQ5LDExIEBACiAJcmV0dXJuIF9fcGVyZl9ldnNlbF9fcmVhZChldnNlbCwgbmNwdXMsIG50aHJlYWRzLCB0cnVlKTsKIH0KIAoraW50IF9fcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUodTY0IHNhbXBsZV90eXBlKTsKKworc3RhdGljIGlubGluZSBpbnQgcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQoreworCXJldHVybiBfX3BlcmZfZXZzZWxfX3NhbXBsZV9zaXplKGV2c2VsLT5hdHRyLnNhbXBsZV90eXBlKTsKK30KKwogI2VuZGlmIC8qIF9fUEVSRl9FVlNFTF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKaW5kZXggNjk0MzZiMy4uYTlhYzA1MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYwpAQCAtNjc0LDcgKzY3NCw3IEBACiAJc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QgPSAmcGV2bGlzdC0+ZXZsaXN0OwogCXVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50OwogCWludCBzYW1wbGVfaWRfYWxsID0gMSwgY3B1OwotCXN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic2FtcGxlX2lkX2FsbCIsIE5VTEwsIE5VTEx9OworCXN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiY3B1IiwgInNhbXBsZV9pZF9hbGwiLCBOVUxMLCBOVUxMfTsKIAlpbnQgZXJyOwogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaXxpIiwga3dsaXN0LApAQCAtNjkyLDE2ICs2OTIsMTQgQEAKIAogCQlmaXJzdCA9IGxpc3RfZW50cnkoZXZsaXN0LT5lbnRyaWVzLm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKIAkJZXJyID0gcGVyZl9ldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBmaXJzdC0+YXR0ci5zYW1wbGVfdHlwZSwKLQkJCQkJICAgICAgIHBlcmZfc2FtcGxlX3NpemUoZmlyc3QtPmF0dHIuc2FtcGxlX3R5cGUpLAorCQkJCQkgICAgICAgcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUoZmlyc3QpLAogCQkJCQkgICAgICAgc2FtcGxlX2lkX2FsbCwgJnBldmVudC0+c2FtcGxlKTsKLQkJaWYgKGVycikgewotCQkJcHJfZXJyKCJDYW4ndCBwYXJzZSBzYW1wbGUsIGVyciA9ICVkXG4iLCBlcnIpOwotCQkJZ290byBlbmQ7Ci0JCX0KLQorCQlpZiAoZXJyKQorCQkJcmV0dXJuIFB5RXJyX0Zvcm1hdChQeUV4Y19PU0Vycm9yLAorCQkJCQkgICAgInBlcmY6IGNhbid0IHBhcnNlIHNhbXBsZSwgZXJyPSVkIiwgZXJyKTsKIAkJcmV0dXJuIHB5ZXZlbnQ7CiAJfQotZW5kOgorCiAJUHlfSU5DUkVGKFB5X05vbmUpOwogCXJldHVybiBQeV9Ob25lOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggNjQ1MDBmYy4uZjVhOGZiZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC01OCw2ICs1OCwxNiBAQAogCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKKwlpZiAoIXBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfdHlwZShzZWxmLT5ldmxpc3QpKSB7CisJCXByX2Vycigibm9uIG1hdGNoaW5nIHNhbXBsZV90eXBlIik7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCWlmICghcGVyZl9ldmxpc3RfX3ZhbGlkX3NhbXBsZV9pZF9hbGwoc2VsZi0+ZXZsaXN0KSkgeworCQlwcl9lcnIoIm5vbiBtYXRjaGluZyBzYW1wbGVfaWRfYWxsIik7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKwogCXNlbGYtPnNpemUgPSBpbnB1dF9zdGF0LnN0X3NpemU7CiAJcmV0dXJuIDA7CiAKQEAgLTk3LDcgKzEwNyw3IEBACiB2b2lkIHBlcmZfc2Vzc2lvbl9fdXBkYXRlX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCiB7CiAJc2VsZi0+c2FtcGxlX3R5cGUgPSBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoc2VsZi0+ZXZsaXN0KTsKLQlzZWxmLT5zYW1wbGVfc2l6ZSA9IHBlcmZfc2FtcGxlX3NpemUoc2VsZi0+c2FtcGxlX3R5cGUpOworCXNlbGYtPnNhbXBsZV9zaXplID0gX19wZXJmX2V2c2VsX19zYW1wbGVfc2l6ZShzZWxmLT5zYW1wbGVfdHlwZSk7CiAJc2VsZi0+c2FtcGxlX2lkX2FsbCA9IHBlcmZfZXZsaXN0X19zYW1wbGVfaWRfYWxsKHNlbGYtPmV2bGlzdCk7CiAJcGVyZl9zZXNzaW9uX19pZF9oZWFkZXJfc2l6ZShzZWxmKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qva3Rlc3QucGwgYi90b29scy90ZXN0aW5nL2t0ZXN0L2t0ZXN0LnBsCmluZGV4IDFmZDI5YjIuLmNlZjI4ZTYgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qva3Rlc3QucGwKKysrIGIvdG9vbHMvdGVzdGluZy9rdGVzdC9rdGVzdC5wbApAQCAtNzg4LDcgKzc4OCw3IEBACiAKIHN1YiByZWJvb3RfdG8gewogICAgIGlmICgkcmVib290X3R5cGUgZXEgImdydWIiKSB7Ci0JcnVuX3NzaCAiJyhlY2hvIFwic2F2ZWRlZmF1bHQgLS1kZWZhdWx0PSRncnViX251bWJlciAtLW9uY2VcIiB8IGdydWIgLS1iYXRjaDsgcmVib290KSciOworCXJ1bl9zc2ggIicoZWNobyBcInNhdmVkZWZhdWx0IC0tZGVmYXVsdD0kZ3J1Yl9udW1iZXIgLS1vbmNlXCIgfCBncnViIC0tYmF0Y2ggJiYgcmVib290KSciOwogCXJldHVybjsKICAgICB9CiAKQEAgLTE0ODAsNyArMTQ4MCw3IEBACiAJb3IgZG9kaWUgIkZhaWxlZCB0byByZWFkICRjb25maWciOwogCiAgICAgd2hpbGUgKDxJTj4pIHsKLQlpZiAoL14oLio/KENPTkZJR1xTKikoPS4qfCBpcyBub3Qgc2V0KSkvKSB7CisJaWYgKC9eKChDT05GSUdcUyopPS4qKS8pIHsKIAkgICAgJGNvbmZpZ19pZ25vcmV7JDJ9ID0gJDE7CiAJfQogICAgIH0KQEAgLTE2MzgsNyArMTYzOCw3IEBACiAJaWYgKCEkZm91bmQpIHsKIAkgICAgIyB0cnkgdGhlIG90aGVyIGhhbGYKIAkgICAgZG9wcmludCAiVG9wIGhhbGYgcHJvZHVjZWQgbm8gc2V0IGNvbmZpZ3MsIHRyeWluZyBib3R0b20gaGFsZlxuIjsKLQkgICAgQHRvcGhhbGYgPSBAc3RhcnRfbGlzdFskaGFsZiAuLiAkI3N0YXJ0X2xpc3RdOworCSAgICBAdG9waGFsZiA9IEBzdGFydF9saXN0WyRoYWxmICsgMSAuLiAkI3N0YXJ0X2xpc3RdOwogCSAgICBjcmVhdGVfY29uZmlnIEB0b3BoYWxmOwogCSAgICByZWFkX2N1cnJlbnRfY29uZmlnIFwlY3VycmVudF9jb25maWc7CiAJICAgIGZvcmVhY2ggbXkgJGNvbmZpZyAoQHRvcGhhbGYpIHsKQEAgLTE2OTAsNyArMTY5MCw3IEBACiAJIyByZW1vdmUgaGFsZiB0aGUgY29uZmlncyB3ZSBhcmUgbG9va2luZyBhdCBhbmQgc2VlIGlmCiAJIyB0aGV5IGFyZSBnb29kLgogCSRoYWxmID0gaW50KCQjc3RhcnRfbGlzdCAvIDIpOwotICAgIH0gd2hpbGUgKCRoYWxmID4gMCk7CisgICAgfSB3aGlsZSAoJCNzdGFydF9saXN0ID4gMCk7CiAKICAgICAjIHdlIGZvdW5kIGEgc2luZ2xlIGNvbmZpZywgdHJ5IGl0IGFnYWluIHVubGVzcyB3ZSBhcmUgcnVubmluZyBtYW51YWxseQogCmRpZmYgLS1naXQgYS90b29scy92aXJ0aW8vdmlydGlvX3Rlc3QuYyBiL3Rvb2xzL3ZpcnRpby92aXJ0aW9fdGVzdC5jCmluZGV4IGRmMGM2ZDIuLjc0ZDMzMzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3ZpcnRpby92aXJ0aW9fdGVzdC5jCisrKyBiL3Rvb2xzL3ZpcnRpby92aXJ0aW9fdGVzdC5jCkBAIC0xOTgsNiArMTk4LDE0IEBACiAJCS52YWwgPSAnaCcsCiAJfSwKIAl7CisJCS5uYW1lID0gImV2ZW50LWlkeCIsCisJCS52YWwgPSAnRScsCisJfSwKKwl7CisJCS5uYW1lID0gIm5vLWV2ZW50LWlkeCIsCisJCS52YWwgPSAnZScsCisJfSwKKwl7CiAJCS5uYW1lID0gImluZGlyZWN0IiwKIAkJLnZhbCA9ICdJJywKIAl9LApAQCAtMjExLDEzICsyMTksMTcgQEAKIAogc3RhdGljIHZvaWQgaGVscCgpCiB7Ci0JZnByaW50ZihzdGRlcnIsICJVc2FnZTogdmlydGlvX3Rlc3QgWy0taGVscF0gWy0tbm8taW5kaXJlY3RdXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiB2aXJ0aW9fdGVzdCBbLS1oZWxwXSIKKwkJIiBbLS1uby1pbmRpcmVjdF0iCisJCSIgWy0tbm8tZXZlbnQtaWR4XSIKKwkJIlxuIik7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgdmRldl9pbmZvIGRldjsKLQl1bnNpZ25lZCBsb25nIGxvbmcgZmVhdHVyZXMgPSAxVUxMIDw8IFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVTQzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZmVhdHVyZXMgPSAoMVVMTCA8PCBWSVJUSU9fUklOR19GX0lORElSRUNUX0RFU0MpIHwKKwkJKDFVTEwgPDwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpOwogCWludCBvOwogCiAJZm9yICg7OykgewpAQCAtMjI4LDYgKzI0MCw5IEBACiAJCWNhc2UgJz8nOgogCQkJaGVscCgpOwogCQkJZXhpdCgyKTsKKwkJY2FzZSAnZSc6CisJCQlmZWF0dXJlcyAmPSB+KDFVTEwgPDwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpOworCQkJYnJlYWs7CiAJCWNhc2UgJ2gnOgogCQkJaGVscCgpOwogCQkJZ290byBkb25lOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMjJjZGI5Ni4uOTZlYmMwNiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00NjcsMTIgKzQ2Nyw4IEBACiAJCWlmICgha3ZtLT5idXNlc1tpXSkKIAkJCWdvdG8gb3V0X2VycjsKIAl9CisKIAlzcGluX2xvY2tfaW5pdCgma3ZtLT5tbXVfbG9jayk7Ci0KLQlyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7Ci0JaWYgKHIpCi0JCWdvdG8gb3V0X2VycjsKLQogCWt2bS0+bW0gPSBjdXJyZW50LT5tbTsKIAlhdG9taWNfaW5jKCZrdm0tPm1tLT5tbV9jb3VudCk7CiAJa3ZtX2V2ZW50ZmRfaW5pdChrdm0pOwpAQCAtNDgwLDYgKzQ3NiwxMSBAQAogCW11dGV4X2luaXQoJmt2bS0+aXJxX2xvY2spOwogCW11dGV4X2luaXQoJmt2bS0+c2xvdHNfbG9jayk7CiAJYXRvbWljX3NldCgma3ZtLT51c2Vyc19jb3VudCwgMSk7CisKKwlyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7CisJaWYgKHIpCisJCWdvdG8gb3V0X2VycjsKKwogCXJhd19zcGluX2xvY2soJmt2bV9sb2NrKTsKIAlsaXN0X2FkZCgma3ZtLT52bV9saXN0LCAmdm1fbGlzdCk7CiAJcmF3X3NwaW5fdW5sb2NrKCZrdm1fbG9jayk7CkBAIC02NTEsNyArNjUyLDkgQEAKIAkvKiBXZSBjYW4gcmVhZCB0aGUgZ3Vlc3QgbWVtb3J5IHdpdGggX194eHhfdXNlcigpIGxhdGVyIG9uLiAqLwogCWlmICh1c2VyX2FsbG9jICYmCiAJICAgICgobWVtLT51c2Vyc3BhY2VfYWRkciAmIChQQUdFX1NJWkUgLSAxKSkgfHwKLQkgICAgICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBtZW0tPnVzZXJzcGFjZV9hZGRyLCBtZW0tPm1lbW9yeV9zaXplKSkpCisJICAgICAhYWNjZXNzX29rKFZFUklGWV9XUklURSwKKwkJCSh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKW1lbS0+dXNlcnNwYWNlX2FkZHIsCisJCQltZW0tPm1lbW9yeV9zaXplKSkpCiAJCWdvdG8gb3V0OwogCWlmIChtZW0tPnNsb3QgPj0gS1ZNX01FTU9SWV9TTE9UUyArIEtWTV9QUklWQVRFX01FTV9TTE9UUykKIAkJZ290byBvdXQ7Cg==