From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH 5/6] drm/msm: hook up DPU with upstream DSI Date: Mon, 16 Apr 2018 11:22:20 -0700 Message-ID: <1523902941-2253-6-git-send-email-jsanka@codeaurora.org> References: <1523902941-2253-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1523902941-2253-1-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org U3dpdGNoIERQVSBmcm9tIGRzaS1zdGFnaW5nIHRvIHVwc3RyZWFtIGRzaSBkcml2ZXIuIFRvIG1h a2UKdGhlIHN3aXRjaCBhdG9taWMsIHRoaXMgY2hhbmdlIGluY2x1ZGVzOgotIHJlbW92ZSBkcHUg Y29ubmVjdG9yIGxheWVycwotIGNsZWFuIHVwIGRwdSBjb25uZWN0b3IgZGVwZW5kZW5jaWVzIGlu IGVuY29kZXIvY3J0YwotIGNvbXBpbGUgb3V0IHdyaXRlYmFjayBhbmQgZGlzcGxheSBwb3J0IGRy aXZlcnMKLSBjb21waWxlIG91dCBkc2ktc3RhZ2luZyBkcml2ZXIgKHNlcGFyYXRlIHBhdGNoIHN1 Ym1pdHRlZCB0bwogIHJlbW92ZSB0aGUgZHJpdmVyKQotIGFkYXB0IHVwc3RyZWFtIGRldmljZSBo aWVyYXJjaHkKClNpZ25lZC1vZmYtYnk6IEpleWt1bWFyIFNhbmthcmFuIDxqc2Fua2FAY29kZWF1 cm9yYS5vcmc+Ci0tLQogLi4uL2NvbmZpZy9hcm02NC9jaHJvbWl1bW9zLWFybTY0LmZsYXZvdXIu Y29uZmlnICAgfCAgICA0ICstCiAuLi4vYXJtNjQvY2hyb21pdW1vcy1xdWFsY29tbS5mbGF2b3Vy LmNvbmZpZyAgICAgICB8ICAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfY29ubmVjdG9yLmMgICAgICB8IDExODQgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaCAgICAgIHwgIDU1NSAtLS0t LS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAgICAgICAg IHwgICAgOSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jICAg ICAgICB8ICAxNzMgKy0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl ci5oICAgICAgICB8ICAgMTAgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9l bmNvZGVyX3BoeXMuaCAgIHwgICAgOCArLQogLi4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf ZW5jb2Rlcl9waHlzX3ZpZC5jICAgfCAgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfa21zLmMgICAgICAgICAgICB8ICAyMjAgKy0tLQogZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X3JtLmMgICAgICAgICAgICAgfCAgIDU0ICstCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uaCAgICAgICAgICAgICB8ICAgMTEgKwogZHJpdmVycy9n cHUvZHJtL21zbS9kcHVfZGJnLmMgICAgICAgICAgICAgICAgICAgICAgfCAgICAzIC0KIGRyaXZl cnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jICAgICAgICAgICAgICAgICAgICAgIHwgICA0MSArLQog ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggICAgICAgICAgICAgICAgICAgICAgfCAgIDM5 IC0KIDE2IGZpbGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCAyMTY0IGRlbGV0aW9ucygt KQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j b25uZWN0b3IuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9jb25uZWN0b3IuaAoKZGlmZiAtLWdpdCBhL2Nocm9tZW9zL2NvbmZpZy9hcm02NC9j aHJvbWl1bW9zLWFybTY0LmZsYXZvdXIuY29uZmlnIGIvY2hyb21lb3MvY29uZmlnL2FybTY0L2No cm9taXVtb3MtYXJtNjQuZmxhdm91ci5jb25maWcKaW5kZXggYzY3NmE2OS4uN2IyMGM4YiAxMDA2 NDQKLS0tIGEvY2hyb21lb3MvY29uZmlnL2FybTY0L2Nocm9taXVtb3MtYXJtNjQuZmxhdm91ci5j b25maWcKKysrIGIvY2hyb21lb3MvY29uZmlnL2FybTY0L2Nocm9taXVtb3MtYXJtNjQuZmxhdm91 ci5jb25maWcKQEAgLTExNywxNCArMTE3LDE0IEBAIENPTkZJR19EUk1fTUlQSV9EU0k9eQogQ09O RklHX0RSTV9NU009eQogQ09ORklHX0RSTV9NU01fRFBVPXkKIENPTkZJR19EUk1fTVNNX0RTST15 Ci1DT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORz15CisjIENPTkZJR19EUk1fTVNNX0RTSV9TVEFH SU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9NU01fSERDUCBpcyBub3Qgc2V0CiAjIENPTkZJ R19EUk1fTVNNX0hETUkgaXMgbm90IHNldAogIyBDT05GSUdfRFJNX01TTV9IRE1JX0hEQ1AgaXMg bm90IHNldAogIyBDT05GSUdfRFJNX01TTV9NRFA0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9N U01fTURQNSBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fTVNNX1JFR0lTVEVSX0xPR0dJTkcgaXMg bm90IHNldAotQ09ORklHX0RSTV9NU01fV1JJVEVCQUNLPXkKKyMgQ09ORklHX0RSTV9NU01fV1JJ VEVCQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9OT1VWRUFVIGlzIG5vdCBzZXQKIENPTkZJ R19EUk1fUEFORUxfSU5OT0xVWF9QMDc5WkNBPXkKICMgQ09ORklHX0RSTV9QQU5FTF9KRElfTFQw NzBNRTA1MDAwIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2Nocm9tZW9zL2NvbmZpZy9hcm02NC9j aHJvbWl1bW9zLXF1YWxjb21tLmZsYXZvdXIuY29uZmlnIGIvY2hyb21lb3MvY29uZmlnL2FybTY0 L2Nocm9taXVtb3MtcXVhbGNvbW0uZmxhdm91ci5jb25maWcKaW5kZXggZTdmNDVmMy4uYWFkMjJh NyAxMDA2NDQKLS0tIGEvY2hyb21lb3MvY29uZmlnL2FybTY0L2Nocm9taXVtb3MtcXVhbGNvbW0u Zmxhdm91ci5jb25maWcKKysrIGIvY2hyb21lb3MvY29uZmlnL2FybTY0L2Nocm9taXVtb3MtcXVh bGNvbW0uZmxhdm91ci5jb25maWcKQEAgLTMwLDE0ICszMCwxNCBAQCBDT05GSUdfRFJNX01JUElf RFNJPXkKIENPTkZJR19EUk1fTVNNPXkKIENPTkZJR19EUk1fTVNNX0RQVT15CiBDT05GSUdfRFJN X01TTV9EU0k9eQotQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkc9eQorIyBDT05GSUdfRFJNX01T TV9EU0lfU1RBR0lORyBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fTVNNX0hEQ1AgaXMgbm90IHNl dAogIyBDT05GSUdfRFJNX01TTV9IRE1JIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9NU01fSERN SV9IRENQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9NU01fTURQNCBpcyBub3Qgc2V0CiAjIENP TkZJR19EUk1fTVNNX01EUDUgaXMgbm90IHNldAogIyBDT05GSUdfRFJNX01TTV9SRUdJU1RFUl9M T0dHSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19EUk1fTVNNX1dSSVRFQkFDSz15CisjIENPTkZJR19E Uk1fTVNNX1dSSVRFQkFDSyBpcyBub3Qgc2V0CiBDT05GSUdfRFJNX1BBTkVMX1RSVUxZX1dRWEdB PXkKICMgQ09ORklHX0RSTV9QQU5FTF9JTk5PTFVYX1AwNzlaQ0EgaXMgbm90IHNldAogIyBDT05G SUdfRFJNX1BBTkVMX0pESV9MVDA3ME1FMDUwMDAgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUK aW5kZXggYjIzYTAwMS4uYThkOGFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9N YWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCkBAIC00OCw3ICs0OCw2 IEBAIG1zbS15IDo9IFwKIAlkaXNwL21kcDUvbWRwNV9wbGFuZS5vIFwKIAlkaXNwL21kcDUvbWRw NV9zbXAubyBcCiAJZGlzcC9kcHUxL2RwdV9jb2xvcl9wcm9jZXNzaW5nLm8gXAotCWRpc3AvZHB1 MS9kcHVfY29ubmVjdG9yLm8gXAogCWRpc3AvZHB1MS9kcHVfY29yZV9pcnEubyBcCiAJZGlzcC9k cHUxL2RwdV9jb3JlX3BlcmYubyBcCiAJZGlzcC9kcHUxL2RwdV9jcnRjLm8gXApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBkYzA5NzhkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDExODQgKzAsMCBA QAotLyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQki W2RybTolczolZF0gIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXwotI2luY2x1ZGUgIm1zbV9kcnYu aCIKLSNpbmNsdWRlICJkcHVfZGJnLmgiCi0KLSNpbmNsdWRlICJkcHVfa21zLmgiCi0jaW5jbHVk ZSAiZHB1X2Nvbm5lY3Rvci5oIgotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0j aW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Ci0jaW5jbHVkZSAiZHNpX2RybS5oIgotI2luY2x1 ZGUgImRzaV9kaXNwbGF5LmgiCi0jZW5kaWYKLQotI2RlZmluZSBCTF9OT0RFX05BTUVfU0laRSAz MgotCi0jZGVmaW5lIERQVV9ERUJVR19DT05OKGMsIGZtdCwgLi4uKSBEUFVfREVCVUcoImNvbm4l ZCAiIGZtdCxcCi0JCShjKSA/IChjKS0+YmFzZS5iYXNlLmlkIDogLTEsICMjX19WQV9BUkdTX18p Ci0KLSNkZWZpbmUgRFBVX0VSUk9SX0NPTk4oYywgZm10LCAuLi4pIERQVV9FUlJPUigiY29ubiVk ICIgZm10LFwKLQkJKGMpID8gKGMpLT5iYXNlLmJhc2UuaWQgOiAtMSwgIyNfX1ZBX0FSR1NfXykK LXN0YXRpYyB1MzIgZGl0aGVyX21hdHJpeFtESVRIRVJfTUFUUklYX1NaXSA9IHsKLQkxNSwgNywg MTMsIDUsIDMsIDExLCAxLCA5LCAxMiwgNCwgMTQsIDYsIDAsIDgsIDIsIDEwCi19OwotCi1zdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBlX3RvcG9sb2d5X25hbWVbXSA9IHsK LQl7RFBVX1JNX1RPUE9MT0dZX05PTkUsCSJkcHVfbm9uZSJ9LAotCXtEUFVfUk1fVE9QT0xPR1lf U0lOR0xFUElQRSwJImRwdV9zaW5nbGVwaXBlIn0sCi0Je0RQVV9STV9UT1BPTE9HWV9EVUFMUElQ RSwJImRwdV9kdWFscGlwZSJ9LAotCXtEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEVfM0RNRVJHRSwJ ImRwdV9kdWFscGlwZW1lcmdlIn0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcm9w X2VudW1fbGlzdCBlX3RvcG9sb2d5X2NvbnRyb2xbXSA9IHsKLQl7RFBVX1JNX1RPUENUTF9SRVNF UlZFX0xPQ0ssCSJyZXNlcnZlX2xvY2sifSwKLQl7RFBVX1JNX1RPUENUTF9SRVNFUlZFX0NMRUFS LAkicmVzZXJ2ZV9jbGVhciJ9LAotCXtEUFVfUk1fVE9QQ1RMX0RTUFAsCQkiZHNwcCJ9LAotfTsK LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGVfcG93ZXJfbW9kZVtdID0g ewotCXtEUFVfTU9ERV9EUE1TX09OLAkiT04ifSwKLQl7RFBVX01PREVfRFBNU19MUDEsCSJMUDEi fSwKLQl7RFBVX01PREVfRFBNU19MUDIsCSJMUDIifSwKLQl7RFBVX01PREVfRFBNU19PRkYsCSJP RkYifSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotc3RhdGljIGlu dCBkcHVfYmFja2xpZ2h0X2RldmljZV91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2 aWNlICpiZCkKLXsKLQlpbnQgYnJpZ2h0bmVzczsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3Bs YXk7Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQlpbnQgYmxfbHZsOwotCXN0cnVj dCBkcm1fZXZlbnQgZXZlbnQ7Ci0KLQlicmlnaHRuZXNzID0gYmQtPnByb3BzLmJyaWdodG5lc3M7 Ci0KLQlpZiAoKGJkLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKSB8fAotCQkJKGJk LT5wcm9wcy5zdGF0ZSAmIEJMX0NPUkVfRkJCTEFOSykgfHwKLQkJCShiZC0+cHJvcHMuc3RhdGUg JiBCTF9DT1JFX1NVU1BFTkRFRCkpCi0JCWJyaWdodG5lc3MgPSAwOwotCi0JY19jb25uID0gYmxf Z2V0X2RhdGEoYmQpOwotCWRpc3BsYXkgPSAoc3RydWN0IGRzaV9kaXNwbGF5ICopIGNfY29ubi0+ ZGlzcGxheTsKLQlpZiAoYnJpZ2h0bmVzcyA+IGRpc3BsYXktPnBhbmVsLT5ibF9jb25maWcuYmxf bWF4X2xldmVsKQotCQlicmlnaHRuZXNzID0gZGlzcGxheS0+cGFuZWwtPmJsX2NvbmZpZy5ibF9t YXhfbGV2ZWw7Ci0KLQkvKiBtYXAgVUkgYnJpZ2h0bmVzcyBpbnRvIGRyaXZlciBiYWNrbGlnaHQg bGV2ZWwgd2l0aCByb3VuZGluZyAqLwotCWJsX2x2bCA9IG11bHRfZnJhYyhicmlnaHRuZXNzLCBk aXNwbGF5LT5wYW5lbC0+YmxfY29uZmlnLmJsX21heF9sZXZlbCwKLQkJCWRpc3BsYXktPnBhbmVs LT5ibF9jb25maWcuYnJpZ2h0bmVzc19tYXhfbGV2ZWwpOwotCi0JaWYgKCFibF9sdmwgJiYgYnJp Z2h0bmVzcykKLQkJYmxfbHZsID0gMTsKLQotCWlmIChjX2Nvbm4tPm9wcy5zZXRfYmFja2xpZ2h0 KSB7Ci0JCWV2ZW50LnR5cGUgPSBEUk1fRVZFTlRfU1lTX0JBQ0tMSUdIVDsKLQkJZXZlbnQubGVu Z3RoID0gc2l6ZW9mKHUzMik7Ci0JCW1zbV9tb2RlX29iamVjdF9ldmVudF9ub3RpZnkoJmNfY29u bi0+YmFzZS5iYXNlLAotCQkJCWNfY29ubi0+YmFzZS5kZXYsICZldmVudCwgKHU4ICopJmJyaWdo dG5lc3MpOwotCQljX2Nvbm4tPm9wcy5zZXRfYmFja2xpZ2h0KGNfY29ubi0+ZGlzcGxheSwgYmxf bHZsKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcHVfYmFja2xpZ2h0X2Rl dmljZV9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCi17Ci0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBkcHVfYmFja2xp Z2h0X2RldmljZV9vcHMgPSB7Ci0JLnVwZGF0ZV9zdGF0dXMgPSBkcHVfYmFja2xpZ2h0X2Rldmlj ZV91cGRhdGVfc3RhdHVzLAotCS5nZXRfYnJpZ2h0bmVzcyA9IGRwdV9iYWNrbGlnaHRfZGV2aWNl X2dldF9icmlnaHRuZXNzLAotfTsKLQotc3RhdGljIGludCBkcHVfYmFja2xpZ2h0X3NldHVwKHN0 cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm4sCi0JCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Ci17Ci0Jc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwotCXN0cnVjdCBkc2lfZGlz cGxheSAqZGlzcGxheTsKLQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25maWcgKmJsX2NvbmZpZzsK LQlzdGF0aWMgaW50IGRpc3BsYXlfY291bnQ7Ci0JY2hhciBibF9ub2RlX25hbWVbQkxfTk9ERV9O QU1FX1NJWkVdOwotCi0JaWYgKCFjX2Nvbm4gfHwgIWRldiB8fCAhZGV2LT5kZXYpIHsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIHBhcmFtXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlm IChjX2Nvbm4tPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpIHsKLQkJ cmV0dXJuIDA7Ci0JfQotCi0JbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHByb3BzKSk7Ci0JcHJv cHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7Ci0JcHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5L OwotCi0JZGlzcGxheSA9IChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKikgY19jb25uLT5kaXNwbGF5Owot CWJsX2NvbmZpZyA9ICZkaXNwbGF5LT5wYW5lbC0+YmxfY29uZmlnOwotCXByb3BzLm1heF9icmln aHRuZXNzID0gYmxfY29uZmlnLT5icmlnaHRuZXNzX21heF9sZXZlbDsKLQlwcm9wcy5icmlnaHRu ZXNzID0gYmxfY29uZmlnLT5icmlnaHRuZXNzX21heF9sZXZlbDsKLQlzbnByaW50ZihibF9ub2Rl X25hbWUsIEJMX05PREVfTkFNRV9TSVpFLCAicGFuZWwldS1iYWNrbGlnaHQiLAotCQkJCQkJCWRp c3BsYXlfY291bnQpOwotCWNfY29ubi0+YmxfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdp c3RlcihibF9ub2RlX25hbWUsIGRldi0+ZGV2LAotCQkJY19jb25uLCAmZHB1X2JhY2tsaWdodF9k ZXZpY2Vfb3BzLCAmcHJvcHMpOwotCWlmIChJU19FUlJfT1JfTlVMTChjX2Nvbm4tPmJsX2Rldmlj ZSkpIHsKLQkJRFBVX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0OiAlbGRcbiIs Ci0JCQkJICAgIFBUUl9FUlIoY19jb25uLT5ibF9kZXZpY2UpKTsKLQkJY19jb25uLT5ibF9kZXZp Y2UgPSBOVUxMOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JZGlzcGxheV9jb3VudCsrOwotCi0J cmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotaW50IGRwdV9jb25uZWN0b3JfdHJpZ2dlcl9ldmVudCh2 b2lkICpkcm1fY29ubmVjdG9yLAotCQl1aW50MzJfdCBldmVudF9pZHgsIHVpbnQzMl90IGluc3Rh bmNlX2lkeCwKLQkJdWludDMyX3QgZGF0YTAsIHVpbnQzMl90IGRhdGExLAotCQl1aW50MzJfdCBk YXRhMiwgdWludDMyX3QgZGF0YTMpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsK LQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQl2b2lkICgqY2JfZnVuYykodWludDMyX3QgZXZl bnRfaWR4LAotCQkJdWludDMyX3QgaW5zdGFuY2VfaWR4LCB2b2lkICp1c3IsCi0JCQl1aW50MzJf dCBkYXRhMCwgdWludDMyX3QgZGF0YTEsCi0JCQl1aW50MzJfdCBkYXRhMiwgdWludDMyX3QgZGF0 YTMpOwotCXZvaWQgKnVzcjsKLQlpbnQgcmMgPSAwOwotCi0JLyoKLQkgKiBUaGlzIGZ1bmN0aW9u IG1heSBwb3RlbnRpYWxseSBiZSBjYWxsZWQgZnJvbSBhbiBJU1IgY29udGV4dCwgc28KLQkgKiBh dm9pZCBleGNlc3NpdmUgbG9nZ2luZy9ldGMuCi0JICovCi0JaWYgKCFkcm1fY29ubmVjdG9yKQot CQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIGlmIChldmVudF9pZHggPj0gRFBVX0NPTk5fRVZFTlRf Q09VTlQpCi0JCXJldHVybiAtRUlOVkFMOwotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoZHJt X2Nvbm5lY3Rvcik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY19jb25uLT5ldmVudF9sb2NrLCBp cnFfZmxhZ3MpOwotCWNiX2Z1bmMgPSBjX2Nvbm4tPmV2ZW50X3RhYmxlW2V2ZW50X2lkeF0uY2Jf ZnVuYzsKLQl1c3IgPSBjX2Nvbm4tPmV2ZW50X3RhYmxlW2V2ZW50X2lkeF0udXNyOwotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmNfY29ubi0+ZXZlbnRfbG9jaywgaXJxX2ZsYWdzKTsKLQotCWlm IChjYl9mdW5jKQotCQljYl9mdW5jKGV2ZW50X2lkeCwgaW5zdGFuY2VfaWR4LCB1c3IsCi0JCQlk YXRhMCwgZGF0YTEsIGRhdGEyLCBkYXRhMyk7Ci0JZWxzZQotCQlyYyA9IC1FQUdBSU47Ci0KLQly ZXR1cm4gcmM7Ci19Ci0KLWludCBkcHVfY29ubmVjdG9yX3JlZ2lzdGVyX2V2ZW50KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXVpbnQzMl90IGV2ZW50X2lkeCwKLQkJdm9pZCAo KmNiX2Z1bmMpKHVpbnQzMl90IGV2ZW50X2lkeCwKLQkJCXVpbnQzMl90IGluc3RhbmNlX2lkeCwg dm9pZCAqdXNyLAotCQkJdWludDMyX3QgZGF0YTAsIHVpbnQzMl90IGRhdGExLAotCQkJdWludDMy X3QgZGF0YTIsIHVpbnQzMl90IGRhdGEzKSwKLQkJdm9pZCAqdXNyKQotewotCXN0cnVjdCBkcHVf Y29ubmVjdG9yICpjX2Nvbm47Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0KLQlpZiAoIWNv bm5lY3RvcikgewotCQlEUFVfRVJST1IoImludmFsaWQgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChldmVudF9pZHggPj0gRFBVX0NPTk5fRVZFTlRfQ09VTlQp IHsKLQkJRFBVX0VSUk9SKCJjb25uJWQsIGludmFsaWQgZXZlbnQgJWRcbiIsCi0JCQkJY29ubmVj dG9yLT5iYXNlLmlkLCBldmVudF9pZHgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JY19jb25u ID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNf Y29ubi0+ZXZlbnRfbG9jaywgaXJxX2ZsYWdzKTsKLQljX2Nvbm4tPmV2ZW50X3RhYmxlW2V2ZW50 X2lkeF0uY2JfZnVuYyA9IGNiX2Z1bmM7Ci0JY19jb25uLT5ldmVudF90YWJsZVtldmVudF9pZHhd LnVzciA9IHVzcjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjX2Nvbm4tPmV2ZW50X2xvY2ss IGlycV9mbGFncyk7Ci0KLQkvKiBvcHRpb25hbGx5IG5vdGlmeSBkaXNwbGF5IG9mIGV2ZW50IHJl Z2lzdHJhdGlvbiAqLwotCWlmIChjX2Nvbm4tPm9wcy5lbmFibGVfZXZlbnQgJiYgY19jb25uLT5k aXNwbGF5KQotCQljX2Nvbm4tPm9wcy5lbmFibGVfZXZlbnQoY29ubmVjdG9yLCBldmVudF9pZHgs Ci0JCQkJY2JfZnVuYyAhPSBOVUxMLCBjX2Nvbm4tPmRpc3BsYXkpOwotCXJldHVybiAwOwotfQot Ci12b2lkIGRwdV9jb25uZWN0b3JfdW5yZWdpc3Rlcl9ldmVudChzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAotCQl1aW50MzJfdCBldmVudF9pZHgpCi17Ci0JKHZvaWQpZHB1X2Nvbm5l Y3Rvcl9yZWdpc3Rlcl9ldmVudChjb25uZWN0b3IsIGV2ZW50X2lkeCwgMCwgMCk7Ci19Ci0KLSNp ZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotc3RhdGljIGludCBfZHB1X2Nvbm5lY3Rv cl9nZXRfZGVmYXVsdF9kaXRoZXJfY2ZnX3YxKAotCQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19j b25uLCB2b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRybV9tc21fZGl0aGVyICpkaXRoZXJfY2ZnID0g KHN0cnVjdCBkcm1fbXNtX2RpdGhlciAqKWNmZzsKLQllbnVtIGRzaV9waXhlbF9mb3JtYXQgZHN0 X2Zvcm1hdCA9IERTSV9QSVhFTF9GT1JNQVRfTUFYOwotCi0JaWYgKCFjX2Nvbm4gfHwgIWNmZykg ewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocyksIGNfY29ubiAlcEssIGNmZyAlcEtc biIsCi0JCQkJY19jb25uLCBjZmcpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWNf Y29ubi0+b3BzLmdldF9kc3RfZm9ybWF0KSB7Ci0JCURQVV9ERUJVRygiZ2V0X2RzdF9mb3JtYXQg aXMgdW5hdmFpbGFibGVcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlkc3RfZm9ybWF0ID0gY19j b25uLT5vcHMuZ2V0X2RzdF9mb3JtYXQoY19jb25uLT5kaXNwbGF5KTsKLQlzd2l0Y2ggKGRzdF9m b3JtYXQpIHsKLQljYXNlIERTSV9QSVhFTF9GT1JNQVRfUkdCODg4OgotCQlkaXRoZXJfY2ZnLT5j MF9iaXRkZXB0aCA9IDg7Ci0JCWRpdGhlcl9jZmctPmMxX2JpdGRlcHRoID0gODsKLQkJZGl0aGVy X2NmZy0+YzJfYml0ZGVwdGggPSA4OwotCQlkaXRoZXJfY2ZnLT5jM19iaXRkZXB0aCA9IDg7Ci0J CWJyZWFrOwotCWNhc2UgRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjY6Ci0JY2FzZSBEU0lfUElYRUxf Rk9STUFUX1JHQjY2Nl9MT09TRToKLQkJZGl0aGVyX2NmZy0+YzBfYml0ZGVwdGggPSA2OwotCQlk aXRoZXJfY2ZnLT5jMV9iaXRkZXB0aCA9IDY7Ci0JCWRpdGhlcl9jZmctPmMyX2JpdGRlcHRoID0g NjsKLQkJZGl0aGVyX2NmZy0+YzNfYml0ZGVwdGggPSA2OwotCQlicmVhazsKLQlkZWZhdWx0Ogot CQlEUFVfREVCVUcoIm5vIGRlZmF1bHQgZGl0aGVyIGNvbmZpZyBmb3IgZHN0X2Zvcm1hdCAlZFxu IiwKLQkJCWRzdF9mb3JtYXQpOwotCQlyZXR1cm4gLUVOT0RBVEE7Ci0JfQotCi0JbWVtY3B5KCZk aXRoZXJfY2ZnLT5tYXRyaXgsIGRpdGhlcl9tYXRyaXgsCi0JCQlzaXplb2YodTMyKSAqIERJVEhF Ul9NQVRSSVhfU1opOwotCWRpdGhlcl9jZmctPnRlbXBvcmFsX2VuID0gMDsKLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIHZvaWQgX2RwdV9jb25uZWN0b3JfaW5zdGFsbF9kaXRoZXJfcHJvcGVydHko c3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMsIHN0cnVj dCBkcHVfY29ubmVjdG9yICpjX2Nvbm4pCi17Ci0JY2hhciBwcm9wX25hbWVbRFJNX1BST1BfTkFN RV9MRU5dOwotCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2cgPSBOVUxMOwotCXN0cnVjdCBk cm1fcHJvcGVydHlfYmxvYiAqYmxvYl9wdHI7Ci0Jdm9pZCAqY2ZnOwotCWludCByZXQgPSAwOwot CXUzMiB2ZXJzaW9uID0gMCwgbGVuID0gMDsKLQlib29sIGRlZmFsdXRfZGl0aGVyX25lZWRlZCA9 IGZhbHNlOwotCi0JaWYgKCFkZXYgfHwgIWRwdV9rbXMgfHwgIWNfY29ubikgewotCQlEUFVfRVJS T1IoImludmxkIGFyZ3MgKHMpLCBkZXYgJXBLLCBkcHVfa21zICVwSywgY19jb25uICVwS1xuIiwK LQkJCQlkZXYsIGRwdV9rbXMsIGNfY29ubik7Ci0JCXJldHVybjsKLQl9Ci0KLQljYXRhbG9nID0g ZHB1X2ttcy0+Y2F0YWxvZzsKLQl2ZXJzaW9uID0gRFBVX0NPTE9SX1BST0NFU1NfTUFKT1IoCi0J CQljYXRhbG9nLT5waW5ncG9uZ1swXS5zYmxrLT5kaXRoZXIudmVyc2lvbik7Ci0Jc25wcmludGYo cHJvcF9uYW1lLCBBUlJBWV9TSVpFKHByb3BfbmFtZSksICIlcyVkIiwKLQkJCSJEUFVfUFBfRElU SEVSX1YiLCB2ZXJzaW9uKTsKLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIDE6Ci0JCW1zbV9w cm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmNfY29ubi0+cHJvcGVydHlfaW5mbywgcHJvcF9uYW1lLAot CQkJRFJNX01PREVfUFJPUF9CTE9CLAotCQkJQ09OTkVDVE9SX1BST1BfUFBfRElUSEVSKTsKLQkJ bGVuID0gc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX2RpdGhlcik7Ci0JCWNmZyA9IGt6YWxsb2MobGVu LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFjZmcpCi0JCQlyZXR1cm47Ci0KLQkJcmV0ID0gX2RwdV9j b25uZWN0b3JfZ2V0X2RlZmF1bHRfZGl0aGVyX2NmZ192MShjX2Nvbm4sIGNmZyk7Ci0JCWlmICgh cmV0KQotCQkJZGVmYWx1dF9kaXRoZXJfbmVlZGVkID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JZGVmYXVs dDoKLQkJRFBVX0VSUk9SKCJ1bnN1cHBvcnRlZCBkaXRoZXIgdmVyc2lvbiAlZFxuIiwgdmVyc2lv bik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoZGVmYWx1dF9kaXRoZXJfbmVlZGVkKSB7Ci0JCWJs b2JfcHRyID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9ibG9iKGRldiwgbGVuLCBjZmcpOwotCQlpZiAo SVNfRVJSX09SX05VTEwoYmxvYl9wdHIpKQotCQkJZ290byBleGl0OwotCQljX2Nvbm4tPmJsb2Jf ZGl0aGVyID0gYmxvYl9wdHI7Ci0JfQotZXhpdDoKLQlrZnJlZShjZmcpOwotfQotI2VuZGlmCi0K LWludCBkcHVfY29ubmVjdG9yX2dldF9kaXRoZXJfY2ZnKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uLAotCQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlLCB2b2lkICoqY2ZnLAot CQkJc2l6ZV90ICpsZW4pCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiA9IE5VTEw7 Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGUgPSBOVUxMOwotCXNpemVfdCBk aXRoZXJfc3ogPSAwOwotCi0JaWYgKCFjb25uIHx8ICFzdGF0ZSB8fCAhKCpjZmcpKQotCQlyZXR1 cm4gLUVJTlZBTDsKLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubik7Ci0JY19zdGF0 ZSA9IHRvX2RwdV9jb25uZWN0b3Jfc3RhdGUoc3RhdGUpOwotCi0JLyogdHJ5IHRvIGdldCB1c2Vy IGNvbmZpZyBkYXRhIGZpcnN0ICovCi0JKmNmZyA9IG1zbV9wcm9wZXJ0eV9nZXRfYmxvYigmY19j b25uLT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkmY19zdGF0ZS0+cHJvcGVydHlfc3RhdGUsCi0JCQkJ CSZkaXRoZXJfc3osCi0JCQkJCUNPTk5FQ1RPUl9QUk9QX1BQX0RJVEhFUik7Ci0JLyogaWYgdXNl ciBjb25maWcgZGF0YSBkb2Vzbid0IGV4aXN0LCB1c2UgZGVmYXVsdCBkaXRoZXIgYmxvYiAqLwot CWlmICgqY2ZnID09IE5VTEwgJiYgY19jb25uLT5ibG9iX2RpdGhlcikgewotCQkqY2ZnID0gJmNf Y29ubi0+YmxvYl9kaXRoZXItPmRhdGE7Ci0JCWRpdGhlcl9zeiA9IGNfY29ubi0+YmxvYl9kaXRo ZXItPmxlbmd0aDsKLQl9Ci0JKmxlbiA9IGRpdGhlcl9zejsKLQlyZXR1cm4gMDsKLX0KLQotaW50 IGRwdV9jb25uZWN0b3JfZ2V0X2luZm8oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwK LQkJc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0 b3IgKmNfY29ubjsKLQotCWlmICghY29ubmVjdG9yIHx8ICFpbmZvKSB7Ci0JCURQVV9FUlJPUigi aW52YWxpZCBhcmd1bWVudChzKSwgY29ubiAlcEssIGluZm8gJXBLXG4iLAotCQkJCWNvbm5lY3Rv ciwgaW5mbyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25u ZWN0b3IoY29ubmVjdG9yKTsKLQotCWlmICghY19jb25uLT5kaXNwbGF5IHx8ICFjX2Nvbm4tPm9w cy5nZXRfaW5mbykgewotCQlEUFVfRVJST1IoImRpc3BsYXkgaW5mbyBub3Qgc3VwcG9ydGVkIGZv ciAlcEtcbiIsCi0JCQkJY19jb25uLT5kaXNwbGF5KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JcmV0dXJuIGNfY29ubi0+b3BzLmdldF9pbmZvKGluZm8sIGNfY29ubi0+ZGlzcGxheSk7Ci19 Ci0KLXN0YXRpYyBpbnQgX2RwdV9jb25uZWN0b3JfdXBkYXRlX3Bvd2VyX2xvY2tlZChzdHJ1Y3Qg ZHB1X2Nvbm5lY3RvciAqY19jb25uKQotewotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3I7Ci0Jdm9pZCAqZGlzcGxheTsKLQlpbnQgKCpzZXRfcG93ZXIpKHN0cnVjdCBkcm1fY29ubmVj dG9yICosIGludCwgdm9pZCAqKTsKLQlpbnQgbW9kZSwgcmMgPSAwOwotCi0JaWYgKCFjX2Nvbm4p Ci0JCXJldHVybiAtRUlOVkFMOwotCWNvbm5lY3RvciA9ICZjX2Nvbm4tPmJhc2U7Ci0KLQlzd2l0 Y2ggKGNfY29ubi0+ZHBtc19tb2RlKSB7Ci0JY2FzZSBEUk1fTU9ERV9EUE1TX09OOgotCQltb2Rl ID0gY19jb25uLT5scF9tb2RlOwotCQlicmVhazsKLQljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRC WToKLQkJbW9kZSA9IERQVV9NT0RFX0RQTVNfU1RBTkRCWTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1f TU9ERV9EUE1TX1NVU1BFTkQ6Ci0JCW1vZGUgPSBEUFVfTU9ERV9EUE1TX1NVU1BFTkQ7Ci0JCWJy ZWFrOwotCWNhc2UgRFJNX01PREVfRFBNU19PRkY6Ci0JCW1vZGUgPSBEUFVfTU9ERV9EUE1TX09G RjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbW9kZSA9IGNfY29ubi0+bHBfbW9kZTsKLQkJRFBV X0VSUk9SKCJjb25uICVkIGRwbXMgc2V0IHRvIHVucmVjb2duaXplZCBtb2RlICVkXG4iLAotCQkJ CWNvbm5lY3Rvci0+YmFzZS5pZCwgbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQotCURQVV9FVlQzMihj b25uZWN0b3ItPmJhc2UuaWQsIGNfY29ubi0+ZHBtc19tb2RlLCBjX2Nvbm4tPmxwX21vZGUsIG1v ZGUpOwotCURQVV9ERUJVRygiY29ubiAlZCAtIGRwbXMgJWQsIGxwICVkLCBwYW5lbCAlZFxuIiwg Y29ubmVjdG9yLT5iYXNlLmlkLAotCQkJY19jb25uLT5kcG1zX21vZGUsIGNfY29ubi0+bHBfbW9k ZSwgbW9kZSk7Ci0KLQlpZiAobW9kZSAhPSBjX2Nvbm4tPmxhc3RfcGFuZWxfcG93ZXJfbW9kZSAm JiBjX2Nvbm4tPm9wcy5zZXRfcG93ZXIpIHsKLQkJZGlzcGxheSA9IGNfY29ubi0+ZGlzcGxheTsK LQkJc2V0X3Bvd2VyID0gY19jb25uLT5vcHMuc2V0X3Bvd2VyOwotCi0JCW11dGV4X3VubG9jaygm Y19jb25uLT5sb2NrKTsKLQkJcmMgPSBzZXRfcG93ZXIoY29ubmVjdG9yLCBtb2RlLCBkaXNwbGF5 KTsKLQkJbXV0ZXhfbG9jaygmY19jb25uLT5sb2NrKTsKLQl9Ci0JY19jb25uLT5sYXN0X3BhbmVs X3Bvd2VyX21vZGUgPSBtb2RlOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHB1X2Nvbm5lY3Rv cl9wcmVfa2lja29mZihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVj dCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNf c3RhdGU7Ci0JaW50IGlkeCwgcmMgPSAwOwotCi0JaWYgKCFjb25uZWN0b3IpIHsKLQkJRFBVX0VS Uk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY19j b25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCWNfc3RhdGUgPSB0b19kcHVfY29u bmVjdG9yX3N0YXRlKGNvbm5lY3Rvci0+c3RhdGUpOwotCi0JaWYgKCFjX2Nvbm4tPmRpc3BsYXkp IHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0JaWYgKGNfY29ubi0+b3Bz LnNldF9iYWNrbGlnaHQpIHsKLQkJRFBVX0RFQlVHKCJjb25uJWQ6IFNldCBiYWNrbGlnaHQgdG8g MjU1XG4iLCBjb25uZWN0b3ItPmJhc2UuaWQpOwotCQljX2Nvbm4tPm9wcy5zZXRfYmFja2xpZ2h0 KGNfY29ubi0+ZGlzcGxheSwgMjU1KTsKLQl9Ci0jZW5kaWYKLQotCXdoaWxlICgoaWR4ID0gbXNt X3Byb3BlcnR5X3BvcF9kaXJ0eSgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkmY19zdGF0 ZS0+cHJvcGVydHlfc3RhdGUpKSA+PSAwKSB7Ci0JCXN3aXRjaCAoaWR4KSB7Ci0JCWNhc2UgQ09O TkVDVE9SX1BST1BfTFA6Ci0JCQltdXRleF9sb2NrKCZjX2Nvbm4tPmxvY2spOwotCQkJY19jb25u LT5scF9tb2RlID0gZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoCi0JCQkJCWNvbm5lY3Rvci0+ c3RhdGUsIENPTk5FQ1RPUl9QUk9QX0xQKTsKLQkJCV9kcHVfY29ubmVjdG9yX3VwZGF0ZV9wb3dl cl9sb2NrZWQoY19jb25uKTsKLQkJCW11dGV4X3VubG9jaygmY19jb25uLT5sb2NrKTsKLQkJCWJy ZWFrOwotCQlkZWZhdWx0OgotCQkJLyogbm90aGluZyB0byBkbyBmb3IgbW9zdCBwcm9wZXJ0aWVz ICovCi0JCQlicmVhazsKLQkJfQotCX0KLQotCURQVV9FVlQzMl9WRVJCT1NFKGNvbm5lY3Rvci0+ YmFzZS5pZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgZHB1X2Nvbm5lY3Rvcl9jbGtfY3Ry bChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGVuYWJsZSkKLXsKLSNpZmRl ZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nv bm47Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCXUzMiBzdGF0ZSA9IGVuYWJsZSA/ IERTSV9DTEtfT04gOiBEU0lfQ0xLX09GRjsKLQotCWlmICghY29ubmVjdG9yKSB7Ci0JCURQVV9F UlJPUigiaW52YWxpZCBjb25uZWN0b3JcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JY19jb25uID0g dG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCWRpc3BsYXkgPSAoc3RydWN0IGRzaV9kaXNw bGF5ICopIGNfY29ubi0+ZGlzcGxheTsKLQotCWlmIChkaXNwbGF5ICYmIGNfY29ubi0+b3BzLmNs a19jdHJsKQotCQljX2Nvbm4tPm9wcy5jbGtfY3RybChkaXNwbGF5LT5tZHBfY2xrX2hhbmRsZSwK LQkJCQlEU0lfQUxMX0NMS1MsIHN0YXRlKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBkcHVf Y29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlz dHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCi0JaWYgKCFjb25uZWN0b3IpIHsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIGNvbm5lY3RvclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQljX2Nvbm4g PSB0b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0KLQlpZiAoY19jb25uLT5vcHMucHV0X21v ZGVzKQotCQljX2Nvbm4tPm9wcy5wdXRfbW9kZXMoY29ubmVjdG9yLCBjX2Nvbm4tPmRpc3BsYXkp OwotCi0JaWYgKGNfY29ubi0+YmxvYl9jYXBzKQotCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoY19j b25uLT5ibG9iX2NhcHMpOwotCWlmIChjX2Nvbm4tPmJsb2JfaGRyKQotCQlkcm1fcHJvcGVydHlf YmxvYl9wdXQoY19jb25uLT5ibG9iX2hkcik7Ci0JaWYgKGNfY29ubi0+YmxvYl9kaXRoZXIpCi0J CWRybV9wcm9wZXJ0eV9ibG9iX3B1dChjX2Nvbm4tPmJsb2JfZGl0aGVyKTsKLQltc21fcHJvcGVy dHlfZGVzdHJveSgmY19jb25uLT5wcm9wZXJ0eV9pbmZvKTsKLQotCWlmIChjX2Nvbm4tPmJsX2Rl dmljZSkKLQkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGNfY29ubi0+YmxfZGV2aWNlKTsK LQlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKLQltdXRleF9kZXN0cm95KCZj X2Nvbm4tPmxvY2spOwotCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwotCWtmcmVl KGNfY29ubik7Ci19Ci0KLS8qKgotICogX2RwdV9jb25uZWN0b3JfZGVzdHJveV9mYiAtIGNsZWFu IHVwIGNvbm5lY3RvciBzdGF0ZSdzIG91dF9mYiBidWZmZXIKLSAqIEBjX2Nvbm46IFBvaW50ZXIg dG8gZHB1IGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBjX3N0YXRlOiBQb2ludGVyIHRvIGRwdSBj b25uZWN0b3Igc3RhdGUgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lkIF9kcHVfY29ubmVjdG9y X2Rlc3Ryb3lfZmIoc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiwKLQkJc3RydWN0IGRwdV9j b25uZWN0b3Jfc3RhdGUgKmNfc3RhdGUpCi17Ci0JaWYgKCFjX3N0YXRlIHx8ICFjX3N0YXRlLT5v dXRfZmIpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHN0YXRlICVwS1xuIiwgY19zdGF0ZSk7Ci0J CXJldHVybjsKLQl9Ci0KLQlkcm1fZnJhbWVidWZmZXJfcHV0KGNfc3RhdGUtPm91dF9mYik7Ci0J Y19zdGF0ZS0+b3V0X2ZiID0gTlVMTDsKLQotCWlmIChjX2Nvbm4pCi0JCWNfc3RhdGUtPnByb3Bl cnR5X3ZhbHVlc1tDT05ORUNUT1JfUFJPUF9PVVRfRkJdLnZhbHVlID0KLQkJCW1zbV9wcm9wZXJ0 eV9nZXRfZGVmYXVsdCgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLAotCQkJCQlDT05ORUNUT1JfUFJP UF9PVVRfRkIpOwotCWVsc2UKLQkJY19zdGF0ZS0+cHJvcGVydHlfdmFsdWVzW0NPTk5FQ1RPUl9Q Uk9QX09VVF9GQl0udmFsdWUgPSB+MDsKLX0KLQotc3RhdGljIHZvaWQgZHB1X2Nvbm5lY3Rvcl9h dG9taWNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0 b3IgKmNfY29ubiA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGUg PSBOVUxMOwotCi0JaWYgKCFzdGF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgc3RhdGVcbiIp OwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBUaGUgYmFzZSBEUk0gZnJhbWV3b3JrIGN1cnJl bnRseSBhbHdheXMgcGFzc2VzIGluIGEgTlVMTAotCSAqIGNvbm5lY3RvciBwb2ludGVyLiBUaGlz IGlzIG5vdCBjb3JyZWN0LCBidXQgYXR0ZW1wdCB0bwotCSAqIGhhbmRsZSB0aGF0IGNhc2UgYXMg bXVjaCBhcyBwb3NzaWJsZS4KLQkgKi8KLQlpZiAoY29ubmVjdG9yKQotCQljX2Nvbm4gPSB0b19k cHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0JY19zdGF0ZSA9IHRvX2RwdV9jb25uZWN0b3Jfc3Rh dGUoc3RhdGUpOwotCi0JaWYgKGNfc3RhdGUtPm91dF9mYikKLQkJX2RwdV9jb25uZWN0b3JfZGVz dHJveV9mYihjX2Nvbm4sIGNfc3RhdGUpOwotCi0JaWYgKCFjX2Nvbm4pIHsKLQkJa2ZyZWUoY19z dGF0ZSk7Ci0JfSBlbHNlIHsKLQkJLyogZGVzdHJveSB2YWx1ZSBoZWxwZXIgKi8KLQkJbXNtX3By b3BlcnR5X2Rlc3Ryb3lfc3RhdGUoJmNfY29ubi0+cHJvcGVydHlfaW5mbywgY19zdGF0ZSwKLQkJ CQkmY19zdGF0ZS0+cHJvcGVydHlfc3RhdGUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHB1X2Nv bm5lY3Rvcl9hdG9taWNfcmVzZXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsK LQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0 YXRlICpjX3N0YXRlOwotCi0JaWYgKCFjb25uZWN0b3IpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlk IGNvbm5lY3RvclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVj dG9yKGNvbm5lY3Rvcik7Ci0KLQlpZiAoY29ubmVjdG9yLT5zdGF0ZSkgewotCQlkcHVfY29ubmVj dG9yX2F0b21pY19kZXN0cm95X3N0YXRlKGNvbm5lY3RvciwgY29ubmVjdG9yLT5zdGF0ZSk7Ci0J CWNvbm5lY3Rvci0+c3RhdGUgPSAwOwotCX0KLQotCWNfc3RhdGUgPSBtc21fcHJvcGVydHlfYWxs b2Nfc3RhdGUoJmNfY29ubi0+cHJvcGVydHlfaW5mbyk7Ci0JaWYgKCFjX3N0YXRlKSB7Ci0JCURQ VV9FUlJPUigic3RhdGUgYWxsb2MgZmFpbGVkXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHJl c2V0IHZhbHVlIGhlbHBlciwgemVybyBvdXQgc3RhdGUgc3RydWN0dXJlIGFuZCByZXNldCBwcm9w ZXJ0aWVzICovCi0JbXNtX3Byb3BlcnR5X3Jlc2V0X3N0YXRlKCZjX2Nvbm4tPnByb3BlcnR5X2lu Zm8sIGNfc3RhdGUsCi0JCQkmY19zdGF0ZS0+cHJvcGVydHlfc3RhdGUsCi0JCQljX3N0YXRlLT5w cm9wZXJ0eV92YWx1ZXMpOwotCi0JY19zdGF0ZS0+YmFzZS5jb25uZWN0b3IgPSBjb25uZWN0b3I7 Ci0JY29ubmVjdG9yLT5zdGF0ZSA9ICZjX3N0YXRlLT5iYXNlOwotfQotCi1zdGF0aWMgc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKgotZHB1X2Nvbm5lY3Rvcl9hdG9taWNfZHVwbGljYXRlX3N0 YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGRwdV9jb25u ZWN0b3IgKmNfY29ubjsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9zdGF0ZSAqY19zdGF0ZSwgKmNf b2xkc3RhdGU7Ci0KLQlpZiAoIWNvbm5lY3RvciB8fCAhY29ubmVjdG9yLT5zdGF0ZSkgewotCQlE UFVfRVJST1IoImludmFsaWQgY29ubmVjdG9yICVwS1xuIiwgY29ubmVjdG9yKTsKLQkJcmV0dXJu IE5VTEw7Ci0JfQotCi0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCWNf b2xkc3RhdGUgPSB0b19kcHVfY29ubmVjdG9yX3N0YXRlKGNvbm5lY3Rvci0+c3RhdGUpOwotCWNf c3RhdGUgPSBtc21fcHJvcGVydHlfYWxsb2Nfc3RhdGUoJmNfY29ubi0+cHJvcGVydHlfaW5mbyk7 Ci0JaWYgKCFjX3N0YXRlKSB7Ci0JCURQVV9FUlJPUigic3RhdGUgYWxsb2MgZmFpbGVkXG4iKTsK LQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JLyogZHVwbGljYXRlIHZhbHVlIGhlbHBlciAqLwotCW1z bV9wcm9wZXJ0eV9kdXBsaWNhdGVfc3RhdGUoJmNfY29ubi0+cHJvcGVydHlfaW5mbywKLQkJCWNf b2xkc3RhdGUsIGNfc3RhdGUsCi0JCQkmY19zdGF0ZS0+cHJvcGVydHlfc3RhdGUsIGNfc3RhdGUt PnByb3BlcnR5X3ZhbHVlcyk7Ci0KLQkvKiBhZGRpdGlvbmFsIGhhbmRsaW5nIGZvciBkcm0gZnJh bWVidWZmZXIgb2JqZWN0cyAqLwotCWlmIChjX3N0YXRlLT5vdXRfZmIpCi0JCWRybV9mcmFtZWJ1 ZmZlcl9nZXQoY19zdGF0ZS0+b3V0X2ZiKTsKLQotCXJldHVybiAmY19zdGF0ZS0+YmFzZTsKLX0K LQotc3RhdGljIGludCBfZHB1X2Nvbm5lY3Rvcl91cGRhdGVfYmxfc2NhbGUoc3RydWN0IGRwdV9j b25uZWN0b3IgKmNfY29ubiwKLQkJaW50IGlkeCwKLQkJdWludDY0X3QgdmFsdWUpCi17Ci0jaWZk ZWYgQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRzaV9k aXNwbGF5ID0gY19jb25uLT5kaXNwbGF5OwotCXN0cnVjdCBkc2lfYmFja2xpZ2h0X2NvbmZpZyAq YmxfY29uZmlnOwotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9kaXNwbGF5IHx8ICFkc2lfZGlz cGxheS0+cGFuZWwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtcyhzKSBkc2lfZGlzcGxheSAl cEssIHBhbmVsICVwS1xuIiwKLQkJCWRzaV9kaXNwbGF5LAotCQkJKChkc2lfZGlzcGxheSkgPyBk c2lfZGlzcGxheS0+cGFuZWwgOiBOVUxMKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJs X2NvbmZpZyA9ICZkc2lfZGlzcGxheS0+cGFuZWwtPmJsX2NvbmZpZzsKLQlpZiAoaWR4ID09IENP Tk5FQ1RPUl9QUk9QX0JMX1NDQUxFKSB7Ci0JCWJsX2NvbmZpZy0+Ymxfc2NhbGUgPSB2YWx1ZTsK LQkJaWYgKHZhbHVlID4gTUFYX0JMX1NDQUxFX0xFVkVMKQotCQkJYmxfY29uZmlnLT5ibF9zY2Fs ZSA9IE1BWF9CTF9TQ0FMRV9MRVZFTDsKLQkJRFBVX0RFQlVHKCJzZXQgdG8gcGFuZWw6IGJsX3Nj YWxlID0gJXUsIGJsX2xldmVsID0gJXVcbiIsCi0JCQlibF9jb25maWctPmJsX3NjYWxlLCBibF9j b25maWctPmJsX2xldmVsKTsKLQkJcmMgPSBjX2Nvbm4tPm9wcy5zZXRfYmFja2xpZ2h0KGRzaV9k aXNwbGF5LAotCQkJCQkgICAgICAgYmxfY29uZmlnLT5ibF9sZXZlbCk7Ci0JfSBlbHNlIGlmIChp ZHggPT0gQ09OTkVDVE9SX1BST1BfQURfQkxfU0NBTEUpIHsKLQkJYmxfY29uZmlnLT5ibF9zY2Fs ZV9hZCA9IHZhbHVlOwotCQlpZiAodmFsdWUgPiBNQVhfQURfQkxfU0NBTEVfTEVWRUwpCi0JCQli bF9jb25maWctPmJsX3NjYWxlX2FkID0gTUFYX0FEX0JMX1NDQUxFX0xFVkVMOwotCQlEUFVfREVC VUcoInNldCB0byBwYW5lbDogYmxfc2NhbGVfYWQgPSAldSwgYmxfbGV2ZWwgPSAldVxuIiwKLQkJ CWJsX2NvbmZpZy0+Ymxfc2NhbGVfYWQsIGJsX2NvbmZpZy0+YmxfbGV2ZWwpOwotCQlyYyA9IGNf Y29ubi0+b3BzLnNldF9iYWNrbGlnaHQoZHNpX2Rpc3BsYXksCi0JCQkJCSAgICAgICBibF9jb25m aWctPmJsX2xldmVsKTsKLQl9Ci0JcmV0dXJuIHJjOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRp ZgotfQotCi1zdGF0aWMgaW50IGRwdV9jb25uZWN0b3JfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqc3RhdGUsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCB2 YWwpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQlzdHJ1Y3QgZHB1X2Nvbm5l Y3Rvcl9zdGF0ZSAqY19zdGF0ZTsKLQlpbnQgaWR4LCByYzsKLQotCWlmICghY29ubmVjdG9yIHx8 ICFzdGF0ZSB8fCAhcHJvcGVydHkpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMp LCBjb25uICVwSywgc3RhdGUgJXBLLCBwcnAgJXBLXG4iLAotCQkJCWNvbm5lY3Rvciwgc3RhdGUs IHByb3BlcnR5KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY19jb25uID0gdG9fZHB1X2Nv bm5lY3Rvcihjb25uZWN0b3IpOwotCWNfc3RhdGUgPSB0b19kcHVfY29ubmVjdG9yX3N0YXRlKHN0 YXRlKTsKLQotCS8qIGdlbmVyaWMgcHJvcGVydHkgaGFuZGxpbmcgKi8KLQlyYyA9IG1zbV9wcm9w ZXJ0eV9hdG9taWNfc2V0KCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sCi0JCQkmY19zdGF0ZS0+cHJv cGVydHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQkv KiBjb25uZWN0b3Itc3BlY2lmaWMgcHJvcGVydHkgaGFuZGxpbmcgKi8KLQlpZHggPSBtc21fcHJv cGVydHlfaW5kZXgoJmNfY29ubi0+cHJvcGVydHlfaW5mbywgcHJvcGVydHkpOwotCXN3aXRjaCAo aWR4KSB7Ci0JY2FzZSBDT05ORUNUT1JfUFJPUF9PVVRfRkI6Ci0JCS8qIGNsZWFyIG9sZCBmYiwg aWYgcHJlc2VudCAqLwotCQlpZiAoY19zdGF0ZS0+b3V0X2ZiKQotCQkJX2RwdV9jb25uZWN0b3Jf ZGVzdHJveV9mYihjX2Nvbm4sIGNfc3RhdGUpOwotCi0JCS8qIGNvbnZlcnQgZmIgdmFsIHRvIGRy bSBmcmFtZWJ1ZmZlciBhbmQgcHJlcGFyZSBpdCAqLwotCQljX3N0YXRlLT5vdXRfZmIgPQotCQkJ ZHJtX2ZyYW1lYnVmZmVyX2xvb2t1cChjb25uZWN0b3ItPmRldiwgTlVMTCwgdmFsKTsKLQkJaWYg KCFjX3N0YXRlLT5vdXRfZmIgJiYgdmFsKSB7Ci0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBsb29r IHVwIGZiICVsbGRcbiIsIHZhbCk7Ci0JCQlyYyA9IC1FRkFVTFQ7Ci0JCX0gZWxzZSBpZiAoIWNf c3RhdGUtPm91dF9mYiAmJiAhdmFsKSB7Ci0JCQlEUFVfREVCVUcoImNsZWFyZWQgZmJfaWRcbiIp OwotCQkJcmMgPSAwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgQ09OTkVDVE9SX1BST1BfQkxfU0NB TEU6Ci0JY2FzZSBDT05ORUNUT1JfUFJPUF9BRF9CTF9TQ0FMRToKLQkJcmMgPSBfZHB1X2Nvbm5l Y3Rvcl91cGRhdGVfYmxfc2NhbGUoY19jb25uLCBpZHgsIHZhbCk7Ci0JCWJyZWFrOwotCWRlZmF1 bHQ6Ci0JCWJyZWFrOwotCX0KLQotCS8qIGNoZWNrIGZvciBjdXN0b20gcHJvcGVydHkgaGFuZGxp bmcgKi8KLQlpZiAoIXJjICYmIGNfY29ubi0+b3BzLnNldF9wcm9wZXJ0eSkgewotCQlyYyA9IGNf Y29ubi0+b3BzLnNldF9wcm9wZXJ0eShjb25uZWN0b3IsCi0JCQkJc3RhdGUsCi0JCQkJaWR4LAot CQkJCXZhbCwKLQkJCQljX2Nvbm4tPmRpc3BsYXkpOwotCi0JCS8qIHBvdGVudGlhbGx5IGNsZWFu IHVwIG91dF9mYiBpZiByYyAhPSAwICovCi0JCWlmICgoaWR4ID09IENPTk5FQ1RPUl9QUk9QX09V VF9GQikgJiYgcmMpCi0JCQlfZHB1X2Nvbm5lY3Rvcl9kZXN0cm95X2ZiKGNfY29ubiwgY19zdGF0 ZSk7Ci0JfQotZW5kOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkcHVfY29ubmVjdG9y X3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlzdHJ1Y3Qg ZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKLQkJdWludDY0X3QgdmFsKQotewotCWlmICghY29ubmVj dG9yKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjb25uZWN0b3JcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQlyZXR1cm4gZHB1X2Nvbm5lY3Rvcl9hdG9taWNfc2V0X3Byb3BlcnR5KGNv bm5lY3RvciwKLQkJCWNvbm5lY3Rvci0+c3RhdGUsIHByb3BlcnR5LCB2YWwpOwotfQotCi1zdGF0 aWMgaW50IGRwdV9jb25uZWN0b3JfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLAotCQljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3Rh dGUsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCAqdmFsKQot ewotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Jf c3RhdGUgKmNfc3RhdGU7Ci0JaW50IGlkeCwgcmMgPSAtRUlOVkFMOwotCi0JaWYgKCFjb25uZWN0 b3IgfHwgIXN0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKSwgY29ubiAl cEssIHN0YXRlICVwS1xuIiwKLQkJCQljb25uZWN0b3IsIHN0YXRlKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCWNfc3Rh dGUgPSB0b19kcHVfY29ubmVjdG9yX3N0YXRlKHN0YXRlKTsKLQotCWlkeCA9IG1zbV9wcm9wZXJ0 eV9pbmRleCgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCBwcm9wZXJ0eSk7Ci0JLyogZ2V0IGNhY2hl ZCBwcm9wZXJ0eSB2YWx1ZSAqLwotCXJjID0gbXNtX3Byb3BlcnR5X2F0b21pY19nZXQoJmNfY29u bi0+cHJvcGVydHlfaW5mbywKLQkJCSZjX3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgcHJvcGVydHks IHZhbCk7Ci0KLQkvKiBhbGxvdyBmb3IgY3VzdG9tIG92ZXJyaWRlICovCi0JaWYgKGNfY29ubi0+ b3BzLmdldF9wcm9wZXJ0eSkKLQkJcmMgPSBjX2Nvbm4tPm9wcy5nZXRfcHJvcGVydHkoY29ubmVj dG9yLAotCQkJCShzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqKXN0YXRlLAotCQkJCWlkeCwK LQkJCQl2YWwsCi0JCQkJY19jb25uLT5kaXNwbGF5KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRp YyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCi1kcHVfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQotewotCWVudW0gZHJtX2Nvbm5l Y3Rvcl9zdGF0dXMgc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwotCXN0cnVjdCBk cHVfY29ubmVjdG9yICpjX2Nvbm47Ci0KLQlpZiAoIWNvbm5lY3RvcikgewotCQlEUFVfRVJST1Io ImludmFsaWQgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQljX2Nvbm4g PSB0b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0KLQlpZiAoY19jb25uLT5vcHMuZGV0ZWN0 KQotCQlzdGF0dXMgPSBjX2Nvbm4tPm9wcy5kZXRlY3QoY29ubmVjdG9yLAotCQkJCWZvcmNlLAot CQkJCWNfY29ubi0+ZGlzcGxheSk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1pbnQgZHB1X2Nv bm5lY3Rvcl9nZXRfZHBtcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0 cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0JaW50IHJjOwotCi0JaWYgKCFjb25uZWN0b3Ip IHsKLQkJRFBVX0RFQlVHKCJpbnZhbGlkIGNvbm5lY3RvclxuIik7Ci0JCXJldHVybiBEUk1fTU9E RV9EUE1TX09GRjsKLQl9Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7 Ci0KLQltdXRleF9sb2NrKCZjX2Nvbm4tPmxvY2spOwotCXJjID0gY19jb25uLT5kcG1zX21vZGU7 Ci0JbXV0ZXhfdW5sb2NrKCZjX2Nvbm4tPmxvY2spOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQg ZHB1X2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHlfZm9yX2NvbW1pdChzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAotCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqYXRvbWljX3N0YXRlLAot CQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgsIHVpbnQ2NF90IHZhbHVlKQotewotCXN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpzdGF0ZTsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eTsK LQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCi0JaWYgKCFjb25uZWN0b3IgfHwgIWF0 b21pY19zdGF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocyksIGNvbm4gJWQs IHN0YXRlICVkXG4iLAotCQkJCWNvbm5lY3RvciAhPSBOVUxMLCBhdG9taWNfc3RhdGUgIT0gTlVM TCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3Io Y29ubmVjdG9yKTsKLQlwcm9wZXJ0eSA9IG1zbV9wcm9wZXJ0eV9pbmRleF90b19kcm1fcHJvcGVy dHkoCi0JCQkmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCBwcm9wZXJ0eV9pZHgpOwotCWlmICghcHJv cGVydHkpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHByb3BlcnR5IGluZGV4ICVkXG4iLCBwcm9w ZXJ0eV9pZHgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzdGF0ZSA9IGRybV9hdG9taWNf Z2V0X2Nvbm5lY3Rvcl9zdGF0ZShhdG9taWNfc3RhdGUsIGNvbm5lY3Rvcik7Ci0JaWYgKElTX0VS Ul9PUl9OVUxMKHN0YXRlKSkgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBnZXQgY29ubiAlZCBz dGF0ZVxuIiwKLQkJCQljb25uZWN0b3ItPmJhc2UuaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQlyZXR1cm4gZHB1X2Nvbm5lY3Rvcl9hdG9taWNfc2V0X3Byb3BlcnR5KAotCQkJY29ubmVj dG9yLCBzdGF0ZSwgcHJvcGVydHksIHZhbHVlKTsKLX0KLQotI2lmZGVmIENPTkZJR19ERUJVR19G UwotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2luaXRfZGVidWdmcyAtIGluaXRpYWxpemUgY29ubmVj dG9yIGRlYnVnZnMKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvcgotICov Ci1zdGF0aWMgaW50IGRwdV9jb25uZWN0b3JfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmRwdV9jb25uZWN0b3I7 Ci0KLQlpZiAoIWNvbm5lY3RvciB8fCAhY29ubmVjdG9yLT5kZWJ1Z2ZzX2VudHJ5KSB7Ci0JCURQ VV9FUlJPUigiaW52YWxpZCBjb25uZWN0b3JcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQlkcHVfY29ubmVjdG9yID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0JaWYgKCFk ZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJmYl9rbWFwIiwgMDYwMCwgY29ubmVjdG9yLT5kZWJ1Z2ZzX2Vu dHJ5LAotCQkJJmRwdV9jb25uZWN0b3ItPmZiX2ttYXApKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVk IHRvIGNyZWF0ZSBjb25uZWN0b3IgZmJfa21hcFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0K LQotCXJldHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgZHB1X2Nvbm5lY3Rvcl9pbml0X2Rl YnVnZnMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlyZXR1cm4gMDsKLX0K LSNlbmRpZgotCi1zdGF0aWMgaW50IGRwdV9jb25uZWN0b3JfbGF0ZV9yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXJldHVybiBkcHVfY29ubmVjdG9yX2luaXRf ZGVidWdmcyhjb25uZWN0b3IpOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfY29ubmVjdG9yX2Vhcmx5 X3VucmVnaXN0ZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQkvKiBkZWJ1 Z2ZzIHVuZGVyIGNvbm5lY3Rvci0+ZGVidWdmcyBhcmUgZGVsZXRlZCBieSBkcm1fZGVidWdmcyAq LwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgZHB1X2Nvbm5l Y3Rvcl9vcHMgPSB7Ci0JLnJlc2V0ID0gICAgICAgICAgICAgICAgICBkcHVfY29ubmVjdG9yX2F0 b21pY19yZXNldCwKLQkuZGV0ZWN0ID0gICAgICAgICAgICAgICAgIGRwdV9jb25uZWN0b3JfZGV0 ZWN0LAotCS5kZXN0cm95ID0gICAgICAgICAgICAgICAgZHB1X2Nvbm5lY3Rvcl9kZXN0cm95LAot CS5maWxsX21vZGVzID0gICAgICAgICAgICAgZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVj dG9yX21vZGVzLAotCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHB1X2Nvbm5lY3Rvcl9hdG9t aWNfZHVwbGljYXRlX3N0YXRlLAotCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9ICAgZHB1X2Nvbm5l Y3Rvcl9hdG9taWNfZGVzdHJveV9zdGF0ZSwKLQkuYXRvbWljX3NldF9wcm9wZXJ0eSA9ICAgIGRw dV9jb25uZWN0b3JfYXRvbWljX3NldF9wcm9wZXJ0eSwKLQkuYXRvbWljX2dldF9wcm9wZXJ0eSA9 ICAgIGRwdV9jb25uZWN0b3JfYXRvbWljX2dldF9wcm9wZXJ0eSwKLQkuc2V0X3Byb3BlcnR5ID0g ICAgICAgICAgIGRwdV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAotCS5sYXRlX3JlZ2lzdGVyID0g ICAgICAgICAgZHB1X2Nvbm5lY3Rvcl9sYXRlX3JlZ2lzdGVyLAotCS5lYXJseV91bnJlZ2lzdGVy ID0gICAgICAgZHB1X2Nvbm5lY3Rvcl9lYXJseV91bnJlZ2lzdGVyLAotfTsKLQotc3RhdGljIGlu dCBkcHVfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQotewotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0KLQlpZiAoIWNvbm5lY3Rvcikg ewotCQlEUFVfRVJST1IoImludmFsaWQgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQot Ci0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCWlmICghY19jb25uLT5v cHMuZ2V0X21vZGVzKSB7Ci0JCURQVV9ERUJVRygibWlzc2luZyBnZXRfbW9kZXMgY2FsbGJhY2tc biIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gY19jb25uLT5vcHMuZ2V0X21vZGVzKGNv bm5lY3RvciwgY19jb25uLT5kaXNwbGF5KTsKLX0KLQotc3RhdGljIGVudW0gZHJtX21vZGVfc3Rh dHVzCi1kcHVfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKLQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0Jc3RydWN0IGRwdV9j b25uZWN0b3IgKmNfY29ubjsKLQotCWlmICghY29ubmVjdG9yIHx8ICFtb2RlKSB7Ci0JCURQVV9F UlJPUigiaW52YWxpZCBhcmd1bWVudChzKSwgY29ubiAlcEssIG1vZGUgJXBLXG4iLAotCQkJCWNv bm5lY3RvciwgbW9kZSk7Ci0JCXJldHVybiBNT0RFX0VSUk9SOwotCX0KLQotCWNfY29ubiA9IHRv X2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQotCWlmIChjX2Nvbm4tPm9wcy5tb2RlX3ZhbGlk KQotCQlyZXR1cm4gY19jb25uLT5vcHMubW9kZV92YWxpZChjb25uZWN0b3IsIG1vZGUsIGNfY29u bi0+ZGlzcGxheSk7Ci0KLQkvKiBhc3N1bWUgYWxsIG1vZGVzIG9rYXkgYnkgZGVmYXVsdCAqLwot CXJldHVybiBNT0RFX09LOwotfQotCi1zdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICoKLWRwdV9j b25uZWN0b3JfYmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17 Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVj dG9yKTsKLQotCWlmICghY29ubmVjdG9yKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjb25uZWN0 b3JcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKgotCSAqIFRoaXMgaXMgdHJ1ZSBmb3Ig bm93LCByZXZpc2l0IHRoaXMgY29kZSB3aGVuIG11bHRpcGxlIGVuY29kZXJzIGFyZQotCSAqIHN1 cHBvcnRlZC4KLQkgKi8KLQlyZXR1cm4gY19jb25uLT5lbmNvZGVyOwotfQotCi1zdGF0aWMgY29u c3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGRwdV9jb25uZWN0b3JfaGVscGVy X29wcyA9IHsKLQkuZ2V0X21vZGVzID0gICAgZHB1X2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCi0JLm1v ZGVfdmFsaWQgPSAgIGRwdV9jb25uZWN0b3JfbW9kZV92YWxpZCwKLQkuYmVzdF9lbmNvZGVyID0g ZHB1X2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCi19OwotCi1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq ZHB1X2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlciwKLQkJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwsCi0JCXZvaWQgKmRp c3BsYXksCi0JCWNvbnN0IHN0cnVjdCBkcHVfY29ubmVjdG9yX29wcyAqb3BzLAotCQlpbnQgY29u bmVjdG9yX3BvbGwsCi0JCWludCBjb25uZWN0b3JfdHlwZSkKLXsKLQlzdHJ1Y3QgbXNtX2RybV9w cml2YXRlICpwcml2OwotCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwotCXN0cnVjdCBkcHVfa21z X2luZm8gKmluZm87Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiA9IE5VTEw7Ci0Jc3Ry dWN0IG1zbV9kaXNwbGF5X2luZm8gZGlzcGxheV9pbmZvOwotCWludCByYzsKLQotCWlmICghZGV2 IHx8ICFkZXYtPmRldl9wcml2YXRlIHx8ICFlbmNvZGVyKSB7Ci0JCURQVV9FUlJPUigiaW52YWxp ZCBhcmd1bWVudChzKSwgZGV2ICVwSywgZW5jICVwS1xuIiwKLQkJCQlkZXYsIGVuY29kZXIpOwot CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQlwcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKLQlpZiAoIXByaXYtPmttcykgewotCQlEUFVfRVJST1IoImludmFsaWQga21zIHJlZmVyZW5j ZVxuIik7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCX0KLQotCWNfY29ubiA9IGt6YWxs b2Moc2l6ZW9mKCpjX2Nvbm4pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNfY29ubikgewotCQlEUFVf RVJST1IoImZhaWxlZCB0byBhbGxvYyBkcHUgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7Ci0JfQotCi0JbWVtc2V0KCZkaXNwbGF5X2luZm8sIDAsIHNpemVvZihkaXNw bGF5X2luZm8pKTsKLQotCXJjID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwKLQkJCSZjX2Nvbm4t PmJhc2UsCi0JCQkmZHB1X2Nvbm5lY3Rvcl9vcHMsCi0JCQljb25uZWN0b3JfdHlwZSk7Ci0JaWYg KHJjKQotCQlnb3RvIGVycm9yX2ZyZWVfY29ubjsKLQotCXNwaW5fbG9ja19pbml0KCZjX2Nvbm4t PmV2ZW50X2xvY2spOwotCi0JY19jb25uLT5jb25uZWN0b3JfdHlwZSA9IGNvbm5lY3Rvcl90eXBl OwotCWNfY29ubi0+ZW5jb2RlciA9IGVuY29kZXI7Ci0JY19jb25uLT5wYW5lbCA9IHBhbmVsOwot CWNfY29ubi0+ZGlzcGxheSA9IGRpc3BsYXk7Ci0KLQljX2Nvbm4tPmRwbXNfbW9kZSA9IERSTV9N T0RFX0RQTVNfT047Ci0JY19jb25uLT5scF9tb2RlID0gMDsKLQljX2Nvbm4tPmxhc3RfcGFuZWxf cG93ZXJfbW9kZSA9IERQVV9NT0RFX0RQTVNfT047Ci0KLQlkcHVfa21zID0gdG9fZHB1X2ttcyhw cml2LT5rbXMpOwotCi0JaWYgKG9wcykKLQkJY19jb25uLT5vcHMgPSAqb3BzOwotCi0JY19jb25u LT5iYXNlLmhlbHBlcl9wcml2YXRlID0gJmRwdV9jb25uZWN0b3JfaGVscGVyX29wczsKLQljX2Nv bm4tPmJhc2UucG9sbGVkID0gY29ubmVjdG9yX3BvbGw7Ci0JY19jb25uLT5iYXNlLmludGVybGFj ZV9hbGxvd2VkID0gMDsKLQljX2Nvbm4tPmJhc2UuZG91Ymxlc2Nhbl9hbGxvd2VkID0gMDsKLQot CXNucHJpbnRmKGNfY29ubi0+bmFtZSwKLQkJCURQVV9DT05ORUNUT1JfTkFNRV9TSVpFLAotCQkJ ImNvbm4ldSIsCi0JCQljX2Nvbm4tPmJhc2UuYmFzZS5pZCk7Ci0KLQltdXRleF9pbml0KCZjX2Nv bm4tPmxvY2spOwotCi0JcmMgPSBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJmNf Y29ubi0+YmFzZSwgZW5jb2Rlcik7Ci0JaWYgKHJjKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRv IGF0dGFjaCBlbmNvZGVyIHRvIGNvbm5lY3RvciwgJWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcl9j bGVhbnVwX2Nvbm47Ci0JfQotCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLQly YyA9IGRwdV9iYWNrbGlnaHRfc2V0dXAoY19jb25uLCBkZXYpOwotCWlmIChyYykgewotCQlEUFVf RVJST1IoImZhaWxlZCB0byBzZXR1cCBiYWNrbGlnaHQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8g ZXJyb3JfY2xlYW51cF9jb25uOwotCX0KLSNlbmRpZgotCi0JLyogY3JlYXRlIHByb3BlcnRpZXMg Ki8KLQltc21fcHJvcGVydHlfaW5pdCgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCAmY19jb25uLT5i YXNlLmJhc2UsIGRldiwKLQkJCXByaXYtPmNvbm5fcHJvcGVydHksIGNfY29ubi0+cHJvcGVydHlf ZGF0YSwKLQkJCUNPTk5FQ1RPUl9QUk9QX0NPVU5ULCBDT05ORUNUT1JfUFJPUF9CTE9CQ09VTlQs Ci0JCQlzaXplb2Yoc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUpKTsKLQotCWlmIChjX2Nvbm4t Pm9wcy5wb3N0X2luaXQpIHsKLQkJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tF Uk5FTCk7Ci0JCWlmICghaW5mbykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUg aW5mbyBidWZmZXJcbiIpOwotCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBlcnJvcl9jbGVhbnVw X2Nvbm47Ci0JCX0KLQotCQlkcHVfa21zX2luZm9fcmVzZXQoaW5mbyk7Ci0JCXJjID0gY19jb25u LT5vcHMucG9zdF9pbml0KCZjX2Nvbm4tPmJhc2UsIGluZm8sIGRpc3BsYXkpOwotCQlpZiAocmMp IHsKLQkJCURQVV9FUlJPUigicG9zdC1pbml0IGZhaWxlZCwgJWRcbiIsIHJjKTsKLQkJCWtmcmVl KGluZm8pOwotCQkJZ290byBlcnJvcl9jbGVhbnVwX2Nvbm47Ci0JCX0KLQotCQltc21fcHJvcGVy dHlfaW5zdGFsbF9ibG9iKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sCi0JCQkJImNhcGFiaWxpdGll cyIsCi0JCQkJRFJNX01PREVfUFJPUF9JTU1VVEFCTEUsCi0JCQkJQ09OTkVDVE9SX1BST1BfRFBV X0lORk8pOwotCi0JCW1zbV9wcm9wZXJ0eV9zZXRfYmxvYigmY19jb25uLT5wcm9wZXJ0eV9pbmZv LAotCQkJCSZjX2Nvbm4tPmJsb2JfY2FwcywKLQkJCQlEUFVfS01TX0lORk9fREFUQShpbmZvKSwK LQkJCQlEUFVfS01TX0lORk9fREFUQUxFTihpbmZvKSwKLQkJCQlDT05ORUNUT1JfUFJPUF9EUFVf SU5GTyk7Ci0JCWtmcmVlKGluZm8pOwotCX0KLQotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9T VEFHSU5HCi0JaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpIHsK LQkJc3RydWN0IGRzaV9kaXNwbGF5ICpkc2lfZGlzcGxheTsKLQotCQlkc2lfZGlzcGxheSA9IChz dHJ1Y3QgZHNpX2Rpc3BsYXkgKikoZGlzcGxheSk7Ci0JCWlmIChkc2lfZGlzcGxheSAmJiBkc2lf ZGlzcGxheS0+cGFuZWwgJiYKLQkJCWRzaV9kaXNwbGF5LT5wYW5lbC0+aGRyX3Byb3BzLmhkcl9l bmFibGVkID09IHRydWUpIHsKLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmNfY29ubi0+ cHJvcGVydHlfaW5mbywKLQkJCQkiaGRyX3Byb3BlcnRpZXMiLAotCQkJCURSTV9NT0RFX1BST1Bf SU1NVVRBQkxFLAotCQkJCUNPTk5FQ1RPUl9QUk9QX0hEUl9JTkZPKTsKLQotCQkJbXNtX3Byb3Bl cnR5X3NldF9ibG9iKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sCi0JCQkJJmNfY29ubi0+YmxvYl9o ZHIsCi0JCQkJJmRzaV9kaXNwbGF5LT5wYW5lbC0+aGRyX3Byb3BzLAotCQkJCXNpemVvZihkc2lf ZGlzcGxheS0+cGFuZWwtPmhkcl9wcm9wcyksCi0JCQkJQ09OTkVDVE9SX1BST1BfSERSX0lORk8p OwotCQl9Ci0JfQotCi0JLyogaW5zdGFsbCBQUF9ESVRIRVIgcHJvcGVydGllcyAqLwotCV9kcHVf Y29ubmVjdG9yX2luc3RhbGxfZGl0aGVyX3Byb3BlcnR5KGRldiwgZHB1X2ttcywgY19jb25uKTsK LQotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sICJi bF9zY2FsZSIsCi0JCTB4MCwgMCwgTUFYX0JMX1NDQUxFX0xFVkVMLCBNQVhfQkxfU0NBTEVfTEVW RUwsCi0JCUNPTk5FQ1RPUl9QUk9QX0JMX1NDQUxFKTsKLQotCW1zbV9wcm9wZXJ0eV9pbnN0YWxs X3JhbmdlKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sICJhZF9ibF9zY2FsZSIsCi0JCTB4MCwgMCwg TUFYX0FEX0JMX1NDQUxFX0xFVkVMLCBNQVhfQURfQkxfU0NBTEVfTEVWRUwsCi0JCUNPTk5FQ1RP Ul9QUk9QX0FEX0JMX1NDQUxFKTsKLSNlbmRpZgotCi0JLyogZW51bS9iaXRtYXNrIHByb3BlcnRp ZXMgKi8KLQltc21fcHJvcGVydHlfaW5zdGFsbF9lbnVtKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8s ICJ0b3BvbG9neV9uYW1lIiwKLQkJCURSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCAwLCBlX3RvcG9s b2d5X25hbWUsCi0JCQlBUlJBWV9TSVpFKGVfdG9wb2xvZ3lfbmFtZSksCi0JCQlDT05ORUNUT1Jf UFJPUF9UT1BPTE9HWV9OQU1FKTsKLQltc21fcHJvcGVydHlfaW5zdGFsbF9lbnVtKCZjX2Nvbm4t PnByb3BlcnR5X2luZm8sICJ0b3BvbG9neV9jb250cm9sIiwKLQkJCTAsIDEsIGVfdG9wb2xvZ3lf Y29udHJvbCwKLQkJCUFSUkFZX1NJWkUoZV90b3BvbG9neV9jb250cm9sKSwKLQkJCUNPTk5FQ1RP Ul9QUk9QX1RPUE9MT0dZX0NPTlRST0wpOwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2VudW0oJmNf Y29ubi0+cHJvcGVydHlfaW5mbywgIkxQIiwKLQkJCTAsIDAsIGVfcG93ZXJfbW9kZSwKLQkJCUFS UkFZX1NJWkUoZV9wb3dlcl9tb2RlKSwKLQkJCUNPTk5FQ1RPUl9QUk9QX0xQKTsKLQotCXJjID0g bXNtX3Byb3BlcnR5X2luc3RhbGxfZ2V0X3N0YXR1cygmY19jb25uLT5wcm9wZXJ0eV9pbmZvKTsK LQlpZiAocmMpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIG9uZSBvciBtb3JlIHBy b3BlcnRpZXNcbiIpOwotCQlnb3RvIGVycm9yX2Rlc3Ryb3lfcHJvcGVydHk7Ci0JfQotCi0JRFBV X0RFQlVHKCJjb25uZWN0b3IgJWQgYXR0YWNoIGVuY29kZXIgJWRcbiIsCi0JCQljX2Nvbm4tPmJh c2UuYmFzZS5pZCwgZW5jb2Rlci0+YmFzZS5pZCk7Ci0KLQlwcml2LT5jb25uZWN0b3JzW3ByaXYt Pm51bV9jb25uZWN0b3JzKytdID0gJmNfY29ubi0+YmFzZTsKLQotCXJldHVybiAmY19jb25uLT5i YXNlOwotCi1lcnJvcl9kZXN0cm95X3Byb3BlcnR5OgotCWlmIChjX2Nvbm4tPmJsb2JfY2FwcykK LQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KGNfY29ubi0+YmxvYl9jYXBzKTsKLQlpZiAoY19jb25u LT5ibG9iX2hkcikKLQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KGNfY29ubi0+YmxvYl9oZHIpOwot CWlmIChjX2Nvbm4tPmJsb2JfZGl0aGVyKQotCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoY19jb25u LT5ibG9iX2RpdGhlcik7Ci0KLQltc21fcHJvcGVydHlfZGVzdHJveSgmY19jb25uLT5wcm9wZXJ0 eV9pbmZvKTsKLWVycm9yX2NsZWFudXBfY29ubjoKLQltdXRleF9kZXN0cm95KCZjX2Nvbm4tPmxv Y2spOwotCWRybV9jb25uZWN0b3JfY2xlYW51cCgmY19jb25uLT5iYXNlKTsKLWVycm9yX2ZyZWVf Y29ubjoKLQlrZnJlZShjX2Nvbm4pOwotCi0JcmV0dXJuIEVSUl9QVFIocmMpOwotfQotCi1pbnQg ZHB1X2Nvbm5lY3Rvcl9yZWdpc3Rlcl9jdXN0b21fZXZlbnQoc3RydWN0IGRwdV9rbXMgKmttcywK LQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5fZHJtLCB1MzIgZXZlbnQsIGJvb2wgdmFsKQot ewotCWludCByZXQgPSAtRUlOVkFMOwotCi0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgRFJNX0VW RU5UX1NZU19CQUNLTElHSFQ6Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJy ZWFrOwotCX0KLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2Nvbm5lY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDUxNmZi Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0 b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1NSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIw MTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KLSAqLwotCi0jaWZuZGVmIF9EUFVfQ09OTkVDVE9SX0hfCi0jZGVmaW5lIF9EUFVfQ09O TkVDVE9SX0hfCi0KLSNpbmNsdWRlIDx1YXBpL2RybS9tc21fZHJtX3BwLmg+Ci0jaW5jbHVkZSA8 ZHJtL2RybVAuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgotI2luY2x1ZGUgPGRybS9k cm1fcGFuZWwuaD4KLQotI2luY2x1ZGUgIm1zbV9kcnYuaCIKLSNpbmNsdWRlICJtc21fcHJvcC5o IgotI2luY2x1ZGUgImRwdV9rbXMuaCIKLQotI2RlZmluZSBEUFVfQ09OTkVDVE9SX05BTUVfU0la RQkxNgotCi1zdHJ1Y3QgZHB1X2Nvbm5lY3RvcjsKLXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRl OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfY29ubmVjdG9yX29wcyAtIGNhbGxiYWNrIGZ1bmN0aW9u cyBmb3IgZ2VuZXJpYyBkcHUgY29ubmVjdG9yCi0gKiBJbmRpdmlkdWFsIGNhbGxiYWNrcyBkb2N1 bWVudGVkIGJlbG93LgotICovCi1zdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9vcHMgewotCS8qKgotCSAq IHBvc3RfaW5pdCAtIHBlcmZvcm0gYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBzdGVwcwotCSAq IEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLQkgKiBAaW5m bzogUG9pbnRlciB0byBkcHUgY29ubmVjdG9yIGluZm8gc3RydWN0dXJlCi0JICogQGRpc3BsYXk6 IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotCSAqIFJldHVybnM6IFplcm8gb24g c3VjY2VzcwotCSAqLwotCWludCAoKnBvc3RfaW5pdCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKLQkJCXZvaWQgKmluZm8sCi0JCQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAq IGRldGVjdCAtIGRldGVybWluZSBpZiBjb25uZWN0b3IgaXMgY29ubmVjdGVkCi0JICogQGNvbm5l Y3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotCSAqIEBmb3JjZTogRm9y Y2UgZGV0ZWN0IHNldHRpbmcgZnJvbSBkcm0gZnJhbWV3b3JrCi0JICogQGRpc3BsYXk6IFBvaW50 ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotCSAqIFJldHVybnM6IENvbm5lY3RvciAnaXMg Y29ubmVjdGVkJyBzdGF0dXMKLQkgKi8KLQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzICgqZGV0 ZWN0KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJYm9vbCBmb3JjZSwKLQkJ CXZvaWQgKmRpc3BsYXkpOwotCi0JLyoqCi0JICogZ2V0X21vZGVzIC0gYWRkIGRybSBtb2RlcyB2 aWEgZHJtX21vZGVfcHJvYmVkX2FkZCgpCi0JICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0g Y29ubmVjdG9yIHN0cnVjdHVyZQotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlz cGxheSBoYW5kbGUKLQkgKiBSZXR1cm5zOiBOdW1iZXIgb2YgbW9kZXMgYWRkZWQKLQkgKi8KLQlp bnQgKCpnZXRfbW9kZXMpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQl2b2lk ICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIHB1dF9tb2RlcyAtIGZyZWUgdXAgZHJtIG1vZGVzIG9m IHRoZSBjb25uZWN0b3IKLQkgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Ig c3RydWN0dXJlCi0JICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRs ZQotCSAqLwotCXZvaWQgKCpwdXRfbW9kZXMpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCi0JCQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIHVwZGF0ZV9wcHMgLSB1cGRhdGUg cHBzIGNvbW1hbmQgZm9yIHRoZSBkaXNwbGF5IHBhbmVsCi0JICogQHBwc19jbWQ6IFBvaW50ZXIg dG8gcHBzIGNvbW1hbmQKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkg aGFuZGxlCi0JICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0JICovCi0JaW50ICgqdXBkYXRl X3BwcykoY2hhciAqcHBzX2NtZCwgdm9pZCAqZGlzcGxheSk7Ci0KLQkvKioKLQkgKiBtb2RlX3Zh bGlkIC0gZGV0ZXJtaW5lIGlmIHNwZWNpZmllZCBtb2RlIGlzIHZhbGlkCi0JICogQGNvbm5lY3Rv cjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotCSAqIEBtb2RlOiBQb2ludGVy IHRvIGRybSBtb2RlIHN0cnVjdHVyZQotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUg ZGlzcGxheSBoYW5kbGUKLQkgKiBSZXR1cm5zOiBWYWxpZGl0eSBzdGF0dXMgZm9yIHNwZWNpZmll ZCBtb2RlCi0JICovCi0JZW51bSBkcm1fbW9kZV9zdGF0dXMgKCptb2RlX3ZhbGlkKShzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUsCi0JCQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIHNldF9wcm9wZXJ0eSAtIHNldCBw cm9wZXJ0eSB2YWx1ZQotCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBz dHJ1Y3R1cmUKLQkgKiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdGF0ZSBzdHJ1 Y3R1cmUKLQkgKiBAcHJvcGVydHlfaW5kZXg6IERSTSBwcm9wZXJ0eSBpbmRleAotCSAqIEB2YWx1 ZTogSW5jb21pbmcgcHJvcGVydHkgdmFsdWUKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2 YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0JICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0JICov Ci0JaW50ICgqc2V0X3Byb3BlcnR5KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAot CQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlLAotCQkJaW50IHByb3BlcnR5X2lu ZGV4LAotCQkJdWludDY0X3QgdmFsdWUsCi0JCQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAq IGdldF9wcm9wZXJ0eSAtIGdldCBwcm9wZXJ0eSB2YWx1ZQotCSAqIEBjb25uZWN0b3I6IFBvaW50 ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLQkgKiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJt IGNvbm5lY3RvciBzdGF0ZSBzdHJ1Y3R1cmUKLQkgKiBAcHJvcGVydHlfaW5kZXg6IERSTSBwcm9w ZXJ0eSBpbmRleAotCSAqIEB2YWx1ZTogUG9pbnRlciB0byB2YXJpYWJsZSBmb3IgYWNjZXB0aW5n IHByb3BlcnR5IHZhbHVlCi0JICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5 IHN0cnVjdHVyZQotCSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotCSAqLwotCWludCAoKmdl dF9wcm9wZXJ0eSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJCXN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSwKLQkJCWludCBwcm9wZXJ0eV9pbmRleCwKLQkJCXVp bnQ2NF90ICp2YWx1ZSwKLQkJCXZvaWQgKmRpc3BsYXkpOwotCi0JLyoqCi0JICogZ2V0X2luZm8g LSBnZXQgZGlzcGxheSBpbmZvcm1hdGlvbgotCSAqIEBpbmZvOiBQb2ludGVyIHRvIG1zbSBkaXNw bGF5IGluZm8gc3RydWN0dXJlCi0JICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNw bGF5IHN0cnVjdHVyZQotCSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotCSAqLwotCWludCAo KmdldF9pbmZvKShzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqaW5mbywgdm9pZCAqZGlzcGxheSk7 Ci0KLQkvKioKLQkgKiBnZXRfbW9kZV9pbmZvIC0gcmV0cmlldmUgbW9kZSBpbmZvcm1hdGlvbgot CSAqIEBkcm1fbW9kZTogRGlzcGxheSBtb2RlIHNldCBmb3IgdGhlIGRpc3BsYXkKLQkgKiBAbW9k ZV9pbmZvOiBPdXQgcGFyYW1ldGVyLiBpbmZvcm1hdGlvbiBvZiB0aGUgZGlzcGxheSBtb2RlCi0J ICogQG1heF9taXhlcl93aWR0aDogbWF4IHdpZHRoIHN1cHBvcnRlZCBieSBIVyBsYXllciBtaXhl cgotCSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotCSAqLwotCWludCAoKmdldF9tb2RlX2lu Zm8pKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZSwKLQkJCXN0cnVjdCBt c21fbW9kZV9pbmZvICptb2RlX2luZm8sCi0JCQl1MzIgbWF4X21peGVyX3dpZHRoKTsKLQotCS8q KgotCSAqIGVuYWJsZV9ldmVudCAtIG5vdGlmeSBkaXNwbGF5IG9mIGV2ZW50IHJlZ2lzdHJhdGlv bi91bnJlZ2lzdHJhdGlvbgotCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3Rv ciBzdHJ1Y3R1cmUKLQkgKiBAZXZlbnRfaWR4OiBEUFUgY29ubmVjdG9yIGV2ZW50IGluZGV4Ci0J ICogQGVuYWJsZTogV2hldGhlciB0aGUgZXZlbnQgaXMgYmVpbmcgZW5hYmxlZC9kaXNhYmxlZAot CSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUKLQkgKi8K LQl2b2lkICgqZW5hYmxlX2V2ZW50KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAot CQkJdWludDMyX3QgZXZlbnRfaWR4LCBib29sIGVuYWJsZSwgdm9pZCAqZGlzcGxheSk7Ci0KLQlp bnQgKCpzZXRfYmFja2xpZ2h0KSh2b2lkICpkaXNwbGF5LCB1MzIgYmxfbHZsKTsKLQotCS8qKgot CSAqIHNvZnRfcmVzZXQgLSBwZXJmb3JtIGEgc29mdCByZXNldCBvbiB0aGUgY29ubmVjdG9yCi0J ICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVyZQotCSAqIFJl dHVybjogWmVybyBvbiBzdWNjZXNzLCAtRVJST1Igb3RoZXJ3aXNlCi0JICovCi0JaW50ICgqc29m dF9yZXNldCkodm9pZCAqZGlzcGxheSk7Ci0KLQkvKioKLQkgKiBwcmVfa2lja29mZiAtIHRyaWdn ZXIgZGlzcGxheSB0byBwcm9ncmFtIGtpY2tvZmYtdGltZSBmZWF0dXJlcwotCSAqIEBjb25uZWN0 b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLQkgKiBAZGlzcGxheTogUG9p bnRlciB0byBwcml2YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0JICogUmV0dXJuczogWmVybyBvbiBz dWNjZXNzCi0JICovCi0JaW50ICgqcHJlX2tpY2tvZmYpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCi0JCQl2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIGNsa19jdHJsIC0gcGVy Zm9ybSBjbGsgZW5hYmxlL2Rpc2FibGUgb24gdGhlIGNvbm5lY3RvcgotCSAqIEBoYW5kbGU6IFBv aW50ZXIgdG8gY2xrIGhhbmRsZQotCSAqIEB0eXBlOiBUeXBlIG9mIGNsa3MKLQkgKiBAZW5hYmxl OiBTdGF0ZSBvZiBjbGtzCi0JICovCi0JaW50ICgqY2xrX2N0cmwpKHZvaWQgKmhhbmRsZSwgdTMy IHR5cGUsIHUzMiBzdGF0ZSk7Ci0KLQkvKioKLQkgKiBzZXRfcG93ZXIgLSB1cGRhdGUgZHBtcyBz ZXR0aW5nCi0JICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVy ZQotCSAqIEBwb3dlcl9tb2RlOiBPbmUgb2YgdGhlIGZvbGxvd2luZywKLQkgKiAgICAgICAgICAg ICAgRFBVX01PREVfRFBNU19PTgotCSAqICAgICAgICAgICAgICBEUFVfTU9ERV9EUE1TX0xQMQot CSAqICAgICAgICAgICAgICBEUFVfTU9ERV9EUE1TX0xQMgotCSAqICAgICAgICAgICAgICBEUFVf TU9ERV9EUE1TX09GRgotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBz dHJ1Y3R1cmUKLQkgKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLQkgKi8KLQlpbnQgKCpzZXRf cG93ZXIpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQlpbnQgcG93ZXJfbW9k ZSwgdm9pZCAqZGlzcGxheSk7Ci0KLQkvKioKLQkgKiBnZXRfZHN0X2Zvcm1hdCAtIGdldCBkc3Rf Zm9ybWF0IGZyb20gZGlzcGxheQotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlz cGxheSBoYW5kbGUKLQkgKiBSZXR1cm5zOiBkc3RfZm9ybWF0IG9mIGRpc3BsYXkKLQkgKi8KLQll bnVtIGRzaV9waXhlbF9mb3JtYXQgKCpnZXRfZHN0X2Zvcm1hdCkodm9pZCAqZGlzcGxheSk7Ci0K LQkvKioKLQkgKiBwb3N0X2tpY2tvZmYgLSBkaXNwbGF5IHRvIHByb2dyYW0gcG9zdCBraWNrb2Zm LXRpbWUgZmVhdHVyZXMKLQkgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Ig c3RydWN0dXJlCi0JICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0JICovCi0JaW50ICgqcG9z dF9raWNrb2ZmKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKLQotCS8qKgotCSAq IHNlbmRfaHBkX2V2ZW50IC0gc2VuZCBIUEQgdWV2ZW50IG5vdGlmaWNhdGlvbiB0byB1c2Vyc3Bh Y2UKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0J ICovCi0Jdm9pZCAoKnNlbmRfaHBkX2V2ZW50KSh2b2lkICpkaXNwbGF5KTsKLX07Ci0KLS8qKgot ICogZW51bSBkcHVfY29ubmVjdG9yX2V2ZW50cyAtIGxpc3Qgb2YgcmVjb2duaXplZCBjb25uZWN0 b3IgZXZlbnRzCi0gKi8KLWVudW0gZHB1X2Nvbm5lY3Rvcl9ldmVudHMgewotCURQVV9DT05OX0VW RU5UX1ZJRF9ET05FLCAvKiB2aWRlbyBtb2RlIGZyYW1lIGRvbmUgKi8KLQlEUFVfQ09OTl9FVkVO VF9DTURfRE9ORSwgLyogY29tbWFuZCBtb2RlIGZyYW1lIGRvbmUgKi8KLQlEUFVfQ09OTl9FVkVO VF9DT1VOVCwKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9jb25uZWN0b3JfZXZ0IC0gbG9jYWwg ZXZlbnQgcmVnaXN0cmF0aW9uIGVudHJ5IHN0cnVjdHVyZQotICogQGNiX2Z1bmM6IFBvaW50ZXIg dG8gZGVzaXJlZCBjYWxsYmFjayBmdW5jdGlvbgotICogQHVzcjogVXNlciBwb2ludGVyIHRvIHBh c3MgdG8gY2FsbGJhY2sgb24gZXZlbnQgdHJpZ2dlcgotICovCi1zdHJ1Y3QgZHB1X2Nvbm5lY3Rv cl9ldnQgewotCXZvaWQgKCpjYl9mdW5jKSh1aW50MzJfdCBldmVudF9pZHgsCi0JCQl1aW50MzJf dCBpbnN0YW5jZV9pZHgsIHZvaWQgKnVzciwKLQkJCXVpbnQzMl90IGRhdGEwLCB1aW50MzJfdCBk YXRhMSwKLQkJCXVpbnQzMl90IGRhdGEyLCB1aW50MzJfdCBkYXRhMyk7Ci0Jdm9pZCAqdXNyOwot fTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAtIGxvY2FsIGRwdSBjb25uZWN0b3Ig c3RydWN0dXJlCi0gKiBAYmFzZTogQmFzZSBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICogQGNv bm5lY3Rvcl90eXBlOiBTZXQgdG8gb25lIG9mIERSTV9NT0RFX0NPTk5FQ1RPUl8gdHlwZXMKLSAq IEBlbmNvZGVyOiBQb2ludGVyIHRvIHByZWZlcnJlZCBkcm0gZW5jb2RlcgotICogQHBhbmVsOiBQ b2ludGVyIHRvIGRybSBwYW5lbCwgaWYgcHJlc2VudAotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8g cHJpdmF0ZSBkaXNwbGF5IGRhdGEgc3RydWN0dXJlCi0gKiBAbW11X3NlY3VyZTogTU1VIGlkIGZv ciBzZWN1cmUgYnVmZmVycwotICogQG1tdV91bnNlY3VyZTogTU1VIGlkIGZvciB1bnNlY3VyZSBi dWZmZXJzCi0gKiBAbmFtZTogQVNDSUkgbmFtZSBvZiBjb25uZWN0b3IKLSAqIEBsb2NrOiBNdXRl eCBsb2NrIG9iamVjdCBmb3IgdGhpcyBzdHJ1Y3R1cmUKLSAqIEBvcHM6IExvY2FsIGNhbGxiYWNr IGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUKLSAqIEBkcG1zX21vZGU6IERQTVMgcHJvcGVydHkgc2V0 dGluZyBmcm9tIHVzZXIgc3BhY2UKLSAqIEBscF9tb2RlOiBMUCBwcm9wZXJ0eSBzZXR0aW5nIGZy b20gdXNlciBzcGFjZQotICogQGxhc3RfcGFuZWxfcG93ZXJfbW9kZTogTGFzdCBjb25zb2xpZGF0 ZWQgZHBtcy9scCBtb2RlIHNldHRpbmcKLSAqIEBwcm9wZXJ0eV9pbmZvOiBQcml2YXRlIHN0cnVj dHVyZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0eSBoYW5kbGluZwotICogQHByb3BlcnR5X2RhdGE6IEFy cmF5IG9mIHByaXZhdGUgZGF0YSBmb3IgZ2VuZXJpYyBwcm9wZXJ0eSBoYW5kbGluZwotICogQGJs b2JfY2FwczogUG9pbnRlciB0byBibG9iIHN0cnVjdHVyZSBmb3IgJ2NhcGFiaWxpdGllcycgcHJv cGVydHkKLSAqIEBibG9iX2hkcjogUG9pbnRlciB0byBibG9iIHN0cnVjdHVyZSBmb3IgJ2hkcl9w cm9wZXJ0aWVzJyBwcm9wZXJ0eQotICogQGJsb2JfZGl0aGVyOiBQb2ludGVyIHRvIGJsb2Igc3Ry dWN0dXJlIGZvciBkZWZhdWx0IGRpdGhlciBjb25maWcKLSAqIEBmYl9rbWFwOiB0cnVlIGlmIGtl cm5lbCBtYXBwaW5nIG9mIGZyYW1lYnVmZmVyIGlzIHJlcXVlc3RlZAotICogQGV2ZW50X3RhYmxl OiBBcnJheSBvZiByZWdpc3RlcmVkIGV2ZW50cwotICogQGV2ZW50X2xvY2s6IExvY2sgb2JqZWN0 IGZvciBldmVudF90YWJsZQotICogQGJsX2RldmljZTogYmFja2xpZ2h0IGRldmljZSBub2RlCi0g Ki8KLXN0cnVjdCBkcHVfY29ubmVjdG9yIHsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBiYXNlOwot Ci0JaW50IGNvbm5lY3Rvcl90eXBlOwotCi0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwot CXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOwotCXZvaWQgKmRpc3BsYXk7Ci0KLQlzdHJ1Y3QgbXNt X2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2VbRFBVX0lPTU1VX0RPTUFJTl9NQVhdOwotCi0JY2hh ciBuYW1lW0RQVV9DT05ORUNUT1JfTkFNRV9TSVpFXTsKLQotCXN0cnVjdCBtdXRleCBsb2NrOwot CXN0cnVjdCBkcHVfY29ubmVjdG9yX29wcyBvcHM7Ci0JaW50IGRwbXNfbW9kZTsKLQlpbnQgbHBf bW9kZTsKLQlpbnQgbGFzdF9wYW5lbF9wb3dlcl9tb2RlOwotCi0Jc3RydWN0IG1zbV9wcm9wZXJ0 eV9pbmZvIHByb3BlcnR5X2luZm87Ci0Jc3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRhIHByb3BlcnR5 X2RhdGFbQ09OTkVDVE9SX1BST1BfQ09VTlRdOwotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAq YmxvYl9jYXBzOwotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9oZHI7Ci0Jc3RydWN0 IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iX2RpdGhlcjsKLQotCWJvb2wgZmJfa21hcDsKLQlzdHJ1 Y3QgZHB1X2Nvbm5lY3Rvcl9ldnQgZXZlbnRfdGFibGVbRFBVX0NPTk5fRVZFTlRfQ09VTlRdOwot CXNwaW5sb2NrX3QgZXZlbnRfbG9jazsKLQotCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibF9k ZXZpY2U7Ci19OwotCi0vKioKLSAqIHRvX2RwdV9jb25uZWN0b3IgLSBjb252ZXJ0IGRybV9jb25u ZWN0b3IgcG9pbnRlciB0byBkcHUgY29ubmVjdG9yIHBvaW50ZXIKLSAqIEBYOiBQb2ludGVyIHRv IGRybV9jb25uZWN0b3Igc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIGRwdV9jb25u ZWN0b3Igc3RydWN0dXJlCi0gKi8KLSNkZWZpbmUgdG9fZHB1X2Nvbm5lY3Rvcih4KSAgICAgY29u dGFpbmVyX29mKCh4KSwgc3RydWN0IGRwdV9jb25uZWN0b3IsIGJhc2UpCi0KLS8qKgotICogZHB1 X2Nvbm5lY3Rvcl9nZXRfZGlzcGxheSAtIGdldCBkcHUgY29ubmVjdG9yJ3MgcHJpdmF0ZSBkaXNw bGF5IHBvaW50ZXIKLSAqIEBDOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0g KiBSZXR1cm5zOiBQb2ludGVyIHRvIGFzc29jaWF0ZWQgcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVy ZQotICovCi0jZGVmaW5lIGRwdV9jb25uZWN0b3JfZ2V0X2Rpc3BsYXkoQykgXAotCSgoQykgPyB0 b19kcHVfY29ubmVjdG9yKChDKSktPmRpc3BsYXkgOiAwKQotCi0vKioKLSAqIGRwdV9jb25uZWN0 b3JfZ2V0X3BhbmVsIC0gZ2V0IGRwdSBjb25uZWN0b3IncyBwcml2YXRlIHBhbmVsIHBvaW50ZXIK LSAqIEBDOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBQ b2ludGVyIHRvIGFzc29jaWF0ZWQgcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVyZQotICovCi0jZGVm aW5lIGRwdV9jb25uZWN0b3JfZ2V0X3BhbmVsKEMpIFwKLQkoKEMpID8gdG9fZHB1X2Nvbm5lY3Rv cigoQykpLT5wYW5lbCA6IE5VTEwpCi0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfZW5jb2Rl ciAtIGdldCBkcHUgY29ubmVjdG9yJ3MgcHJpdmF0ZSBlbmNvZGVyIHBvaW50ZXIKLSAqIEBDOiBQ b2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBQb2ludGVyIHRv IGFzc29jaWF0ZWQgcHJpdmF0ZSBlbmNvZGVyIHN0cnVjdHVyZQotICovCi0jZGVmaW5lIGRwdV9j b25uZWN0b3JfZ2V0X2VuY29kZXIoQykgXAotCSgoQykgPyB0b19kcHVfY29ubmVjdG9yKChDKSkt PmVuY29kZXIgOiAwKQotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BpbmZvIC0gZ2V0 IGRwdSBjb25uZWN0b3IncyBwcm9wZXJ0eSBpbmZvIHBvaW50ZXIKLSAqIEBDOiBQb2ludGVyIHRv IGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIGFzc29jaWF0 ZWQgcHJpdmF0ZSBwcm9wZXJ0eSBpbmZvIHN0cnVjdHVyZQotICovCi0jZGVmaW5lIGRwdV9jb25u ZWN0b3JfZ2V0X3Byb3BpbmZvKEMpIFwKLQkoKEMpID8gJnRvX2RwdV9jb25uZWN0b3IoKEMpKS0+ cHJvcGVydHlfaW5mbyA6IDApCi0KLS8qKgotICogc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUg LSBwcml2YXRlIGNvbm5lY3RvciBzdGF0dXMgc3RydWN0dXJlCi0gKiBAYmFzZTogQmFzZSBkcm0g Y29ubmVjdG9yIHN0cnVjdHVyZQotICogQG91dF9mYjogUG9pbnRlciB0byBvdXRwdXQgZnJhbWUg YnVmZmVyLCBpZiBhcHBsaWNhYmxlCi0gKiBAcHJvcGVydHlfc3RhdGU6IExvY2FsIHN0b3JhZ2Ug Zm9yIG1zbV9wcm9wIHByb3BlcnRpZXMKLSAqIEBwcm9wZXJ0eV92YWx1ZXM6IExvY2FsIGNhY2hl IG9mIGN1cnJlbnQgY29ubmVjdG9yIHByb3BlcnR5IHZhbHVlcwotICogQHByb3BlcnR5X2Jsb2Jz OiBibG9iIHByb3BlcnRpZXMKLSAqLwotc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgewotCXN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlIGJhc2U7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq b3V0X2ZiOwotCXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgcHJvcGVydHlfc3RhdGU7Ci0Jc3Ry dWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eV92YWx1ZXNbQ09OTkVDVE9SX1BST1BfQ09V TlRdOwotCi0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpwcm9wZXJ0eV9ibG9ic1tDT05ORUNU T1JfUFJPUF9CTE9CQ09VTlRdOwotfTsKLQotLyoqCi0gKiB0b19kcHVfY29ubmVjdG9yX3N0YXRl IC0gY29udmVydCBkcm1fY29ubmVjdG9yX3N0YXRlIHBvaW50ZXIgdG8KLSAqICAgICAgICAgICAg ICAgICAgICAgICAgICBkcHUgY29ubmVjdG9yIHN0YXRlIHBvaW50ZXIKLSAqIEBYOiBQb2ludGVy IHRvIGRybV9jb25uZWN0b3Jfc3RhdGUgc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBQb2ludGVyIHRv IGRwdV9jb25uZWN0b3Jfc3RhdGUgc3RydWN0dXJlCi0gKi8KLSNkZWZpbmUgdG9fZHB1X2Nvbm5l Y3Rvcl9zdGF0ZSh4KSBcCi0JY29udGFpbmVyX29mKCh4KSwgc3RydWN0IGRwdV9jb25uZWN0b3Jf c3RhdGUsIGJhc2UpCi0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkgLSBxdWVy eSBpbnRlZ2VyIHZhbHVlIG9mIGNvbm5lY3RvciBwcm9wZXJ0eQotICogQFM6IFBvaW50ZXIgdG8g ZHJtIGNvbm5lY3RvciBzdGF0ZQotICogQFg6IFByb3BlcnR5IGluZGV4LCBmcm9tIGVudW0gbXNt X21kcF9jb25uZWN0b3JfcHJvcGVydHkKLSAqIFJldHVybnM6IEludGVnZXIgdmFsdWUgb2YgcmVx dWVzdGVkIHByb3BlcnR5Ci0gKi8KLSNkZWZpbmUgZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHko UywgWCkgXAotCSgoUykgJiYgKChYKSA8IENPTk5FQ1RPUl9QUk9QX0NPVU5UKSA/IFwKLQkgKHRv X2RwdV9jb25uZWN0b3Jfc3RhdGUoKFMpKS0+cHJvcGVydHlfdmFsdWVzWyhYKV0udmFsdWUpIDog MCkKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2dldF9wcm9wZXJ0eV9zdGF0ZSAtIHJldHJpZXZl IHByb3BlcnR5IHN0YXRlIGNhY2hlCi0gKiBAUzogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0 YXRlCi0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIGxvY2FsIHByb3BlcnR5IHN0YXRlIHN0cnVjdHVy ZQotICovCi0jZGVmaW5lIGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5X3N0YXRlKFMpIFwKLQko KFMpID8gKCZ0b19kcHVfY29ubmVjdG9yX3N0YXRlKChTKSktPnByb3BlcnR5X3N0YXRlKSA6IE5V TEwpCi0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfb3V0X2ZiIC0gcXVlcnkgb3V0X2ZiIHZh bHVlIGZyb20gZHB1IGNvbm5lY3RvciBzdGF0ZQotICogQFM6IFBvaW50ZXIgdG8gZHJtIGNvbm5l Y3RvciBzdGF0ZQotICogUmV0dXJuczogT3V0cHV0IGZiIGFzc29jaWF0ZWQgd2l0aCBzcGVjaWZp ZWQgY29ubmVjdG9yIHN0YXRlCi0gKi8KLSNkZWZpbmUgZHB1X2Nvbm5lY3Rvcl9nZXRfb3V0X2Zi KFMpIFwKLQkoKFMpID8gdG9fZHB1X2Nvbm5lY3Rvcl9zdGF0ZSgoUykpLT5vdXRfZmIgOiAwKQot Ci0vKioKLSAqIGRwdV9jb25uZWN0b3JfZ2V0X3RvcG9sb2d5X25hbWUgLSBoZWxwZXIgYWNjZXNz b3IgdG8gcmV0cmlldmUgdG9wb2xvZ3lfbmFtZQotICogQGNvbm5lY3RvcjogcG9pbnRlciB0byBk cm0gY29ubmVjdG9yCi0gKiBSZXR1cm5zOiB2YWx1ZSBvZiB0aGUgQ09OTkVDVE9SX1BST1BfVE9Q T0xPR1lfTkFNRSBwcm9wZXJ0eSBvciAwCi0gKi8KLXN0YXRpYyBpbmxpbmUgdWludDY0X3QgZHB1 X2Nvbm5lY3Rvcl9nZXRfdG9wb2xvZ3lfbmFtZSgKLQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKLXsKLQlpZiAoIWNvbm5lY3RvciB8fCAhY29ubmVjdG9yLT5zdGF0ZSkKLQkJcmV0 dXJuIDA7Ci0JcmV0dXJuIGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KGNvbm5lY3Rvci0+c3Rh dGUsCi0JCQlDT05ORUNUT1JfUFJPUF9UT1BPTE9HWV9OQU1FKTsKLX0KLQotLyoqCi0gKiBkcHVf Y29ubmVjdG9yX2dldF9scCAtIGhlbHBlciBhY2Nlc3NvciB0byByZXRyaWV2ZSBMUCBzdGF0ZQot ICogQGNvbm5lY3RvcjogcG9pbnRlciB0byBkcm0gY29ubmVjdG9yCi0gKiBSZXR1cm5zOiB2YWx1 ZSBvZiB0aGUgQ09OTkVDVE9SX1BST1BfTFAgcHJvcGVydHkgb3IgMAotICovCi1zdGF0aWMgaW5s aW5lIHVpbnQ2NF90IGRwdV9jb25uZWN0b3JfZ2V0X2xwKAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQotewotCWlmICghY29ubmVjdG9yIHx8ICFjb25uZWN0b3ItPnN0YXRlKQot CQlyZXR1cm4gMDsKLQlyZXR1cm4gZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoY29ubmVjdG9y LT5zdGF0ZSwKLQkJCUNPTk5FQ1RPUl9QUk9QX0xQKTsKLX0KLQotLyoqCi0gKiBkcHVfY29ubmVj dG9yX3NldF9wcm9wZXJ0eV9mb3JfY29tbWl0IC0gYWRkIHByb3BlcnR5IHNldCB0byBhdG9taWMg c3RhdGUKLSAqCUFkZCBhIGNvbm5lY3RvciBzdGF0ZSBwcm9wZXJ0eSB1cGRhdGUgZm9yIHRoZSBz cGVjaWZpZWQgcHJvcGVydHkgaW5kZXgKLSAqCXRvIHRoZSBhdG9taWMgc3RhdGUgaW4gcHJlcGFy YXRpb24gZm9yIGEgZHJtX2F0b21pY19jb21taXQuCi0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRv IGRybSBjb25uZWN0b3IKLSAqIEBhdG9taWNfc3RhdGU6IFBvaW50ZXIgdG8gRFJNIGF0b21pYyBz dGF0ZSBzdHJ1Y3R1cmUgZm9yIGNvbW1pdAotICogQHByb3BlcnR5X2lkeDogQ29ubmVjdG9yIHBy b3BlcnR5IGluZGV4Ci0gKiBAdmFsdWU6IFVwZGF0ZWQgcHJvcGVydHkgdmFsdWUKLSAqIFJldHVy bnM6IFplcm8gb24gc3VjY2VzcwotICovCi1pbnQgZHB1X2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHlf Zm9yX2NvbW1pdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqYXRvbWljX3N0YXRlLAotCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgsIHVp bnQ2NF90IHZhbHVlKTsKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2luaXQgLSBjcmVhdGUgZHJt IGNvbm5lY3RvciBvYmplY3QgZm9yIGEgZ2l2ZW4gZGlzcGxheQotICogQGRldjogUG9pbnRlciB0 byBkcm0gZGV2aWNlIHN0cnVjdAotICogQGVuY29kZXI6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBl bmNvZGVyCi0gKiBAcGFuZWw6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBwYW5lbCwgY2FuIGJlIE5V TEwKLSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIGFzc29jaWF0ZWQgZGlzcGxheSBvYmplY3QKLSAq IEBvcHM6IFBvaW50ZXIgdG8gY2FsbGJhY2sgb3BlcmF0aW9ucyBmdW5jdGlvbiB0YWJsZQotICog QGNvbm5lY3Rvcl9wb2xsOiBTZXQgdG8gYXBwcm9wcmlhdGUgRFJNX0NPTk5FQ1RPUl9QT0xMXyBz ZXR0aW5nCi0gKiBAY29ubmVjdG9yX3R5cGU6IFNldCB0byBhcHByb3ByaWF0ZSBEUk1fTU9ERV9D T05ORUNUT1JfIHR5cGUKLSAqIFJldHVybnM6IFBvaW50ZXIgdG8gbmV3bHkgY3JlYXRlZCBkcm0g Y29ubmVjdG9yIHN0cnVjdAotICovCi1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqZHB1X2Nvbm5lY3Rv cl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlciwKLQkJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwsCi0JCXZvaWQgKmRpc3BsYXksCi0JCWNv bnN0IHN0cnVjdCBkcHVfY29ubmVjdG9yX29wcyAqb3BzLAotCQlpbnQgY29ubmVjdG9yX3BvbGws Ci0JCWludCBjb25uZWN0b3JfdHlwZSk7Ci0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfaW5m byAtIHF1ZXJ5IGRpc3BsYXkgc3BlY2lmaWMgaW5mb3JtYXRpb24KLSAqIEBjb25uZWN0b3I6IFBv aW50ZXIgdG8gZHJtIGNvbm5lY3RvciBvYmplY3QKLSAqIEBpbmZvOiBQb2ludGVyIHRvIG1zbSBk aXNwbGF5IGluZm9ybWF0aW9uIHN0cnVjdHVyZQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNz Ci0gKi8KLWludCBkcHVfY29ubmVjdG9yX2dldF9pbmZvKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCi0JCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvICppbmZvKTsKLQotLyoqCi0gKiBk cHVfY29ubmVjdG9yX2Nsa19jdHJsIC0gZW5hYmxlcy9kaXNhYmxlcyB0aGUgY29ubmVjdG9yIGNs a3MKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBvYmplY3QKLSAqIEBl bmFibGU6IHRydWUvZmFsc2UgdG8gZW5hYmxlL2Rpc2FibGUKLSAqLwotdm9pZCBkcHVfY29ubmVj dG9yX2Nsa19jdHJsKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZW5hYmxl KTsKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2dldF9kcG1zIC0gcXVlcnkgZHBtcyBzZXR0aW5n Ci0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBS ZXR1cm5zOiBDdXJyZW50IERQTVMgc2V0dGluZyBmb3IgY29ubmVjdG9yCi0gKi8KLWludCBkcHVf Y29ubmVjdG9yX2dldF9kcG1zKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwotCi0v KioKLSAqIGRwdV9jb25uZWN0b3JfdHJpZ2dlcl9ldmVudCAtIGluZGljYXRlIHRoYXQgYW4gZXZl bnQgaGFzIG9jY3VycmVkCi0gKglBbnkgY2FsbGJhY2tzIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVy ZWQgYWdhaW5zdCB0aGlzIGV2ZW50IHdpbGwKLSAqCWJlIGNhbGxlZCBmcm9tIHRoZSBzYW1lIHRo cmVhZCBjb250ZXh0LgotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0 cnVjdHVyZQotICogQGV2ZW50X2lkeDogSW5kZXggb2YgZXZlbnQgdG8gdHJpZ2dlcgotICogQGlu c3RhbmNlX2lkeDogRXZlbnQtc3BlY2lmaWMgImluc3RhbmNlIGluZGV4IiB0byBwYXNzIHRvIGNh bGxiYWNrCi0gKiBAZGF0YTA6IEV2ZW50LXNwZWNpZmljICJkYXRhIiB0byBwYXNzIHRvIGNhbGxi YWNrCi0gKiBAZGF0YTE6IEV2ZW50LXNwZWNpZmljICJkYXRhIiB0byBwYXNzIHRvIGNhbGxiYWNr Ci0gKiBAZGF0YTI6IEV2ZW50LXNwZWNpZmljICJkYXRhIiB0byBwYXNzIHRvIGNhbGxiYWNrCi0g KiBAZGF0YTM6IEV2ZW50LXNwZWNpZmljICJkYXRhIiB0byBwYXNzIHRvIGNhbGxiYWNrCi0gKiBS ZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRwdV9jb25uZWN0b3JfdHJpZ2dlcl9l dmVudCh2b2lkICpkcm1fY29ubmVjdG9yLAotCQl1aW50MzJfdCBldmVudF9pZHgsIHVpbnQzMl90 IGluc3RhbmNlX2lkeCwKLQkJdWludDMyX3QgZGF0YTAsIHVpbnQzMl90IGRhdGExLAotCQl1aW50 MzJfdCBkYXRhMiwgdWludDMyX3QgZGF0YTMpOwotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfcmVn aXN0ZXJfZXZlbnQgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhbiBldmVudAot ICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICogQGV2 ZW50X2lkeDogSW5kZXggb2YgZXZlbnQgdG8gcmVnaXN0ZXIKLSAqIEBjYl9mdW5jOiBQb2ludGVy IHRvIGRlc2lyZWQgY2FsbGJhY2sgZnVuY3Rpb24KLSAqIEB1c3I6IFVzZXIgcG9pbnRlciB0byBw YXNzIHRvIGNhbGxiYWNrIG9uIGV2ZW50IHRyaWdnZXIKLSAqIFJldHVybnM6IFplcm8gb24gc3Vj Y2VzcwotICovCi1pbnQgZHB1X2Nvbm5lY3Rvcl9yZWdpc3Rlcl9ldmVudChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAotCQl1aW50MzJfdCBldmVudF9pZHgsCi0JCXZvaWQgKCpjYl9m dW5jKSh1aW50MzJfdCBldmVudF9pZHgsCi0JCQl1aW50MzJfdCBpbnN0YW5jZV9pZHgsIHZvaWQg KnVzciwKLQkJCXVpbnQzMl90IGRhdGEwLCB1aW50MzJfdCBkYXRhMSwKLQkJCXVpbnQzMl90IGRh dGEyLCB1aW50MzJfdCBkYXRhMyksCi0JCXZvaWQgKnVzcik7Ci0KLS8qKgotICogZHB1X2Nvbm5l Y3Rvcl91bnJlZ2lzdGVyX2V2ZW50IC0gdW5yZWdpc3RlciBhbGwgY2FsbGJhY2tzIGZvciBhbiBl dmVudAotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQot ICogQGV2ZW50X2lkeDogSW5kZXggb2YgZXZlbnQgdG8gcmVnaXN0ZXIKLSAqLwotdm9pZCBkcHVf Y29ubmVjdG9yX3VucmVnaXN0ZXJfZXZlbnQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKLQkJdWludDMyX3QgZXZlbnRfaWR4KTsKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX3JlZ2lz dGVyX2N1c3RvbV9ldmVudCAtIHJlZ2lzdGVyIGZvciBhc3luYyBldmVudHMKLSAqIEBrbXM6IFBv aW50ZXIgdG8gZHB1X2ttcwotICogQGNvbm5fZHJtOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Ig b2JqZWN0Ci0gKiBAZXZlbnQ6IEV2ZW50IGZvciB3aGljaCByZXF1ZXN0IGlzIGJlaW5nIHNlbnQK LSAqIEBlbjogRmxhZyB0byBlbmFibGUvZGlzYWJsZSB0aGUgZXZlbnQKLSAqIFJldHVybnM6IFpl cm8gb24gc3VjY2VzcwotICovCi1pbnQgZHB1X2Nvbm5lY3Rvcl9yZWdpc3Rlcl9jdXN0b21fZXZl bnQoc3RydWN0IGRwdV9rbXMgKmttcywKLQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5fZHJt LCB1MzIgZXZlbnQsIGJvb2wgZW4pOwotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfcHJlX2tpY2tv ZmYgLSB0cmlnZ2VyIGtpY2tvZmYgdGltZSBmZWF0dXJlIHByb2dyYW1taW5nCi0gKiBAY29ubmVj dG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igb2JqZWN0Ci0gKiBSZXR1cm5zOiBaZXJvIG9u IHN1Y2Nlc3MKLSAqLwotaW50IGRwdV9jb25uZWN0b3JfcHJlX2tpY2tvZmYoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3Rvcik7Ci0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9uZWVkc19vZmZz ZXQgLSBhZGp1c3QgdGhlIG91dHB1dCBmZW5jZSBvZmZzZXQgYmFzZWQgb24KLSAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0eXBlCi0gKiBAY29ubmVjdG9yOiBQb2ludGVy IHRvIGRybSBjb25uZWN0b3Igb2JqZWN0Ci0gKiBSZXR1cm5zOiB0cnVlIGlmIG9mZnNldCBpcyBy ZXF1aXJlZCwgZmFsc2UgZm9yIGFsbCBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBi b29sIGRwdV9jb25uZWN0b3JfbmVlZHNfb2Zmc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQotCWlmICghY29ubmVj dG9yKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm5l Y3Rvcik7Ci0JcmV0dXJuIChjX2Nvbm4tPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5F Q1RPUl9WSVJUVUFMKTsKLX0KLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2dldF9kaXRoZXJfY2Zn IC0gZ2V0IGRpdGhlciBwcm9wZXJ0eSBkYXRhCi0gKiBAY29ubjogUG9pbnRlciB0byBkcm1fY29u bmVjdG9yIHN0cnVjdAotICogQHN0YXRlOiBQb2ludGVyIHRvIGRybV9jb25uZWN0b3Jfc3RhdGUg c3RydWN0Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIHBvaW50ZXIgdG8gZGl0aGVyIGNmZwotICogQGxl bjogbGVuZ3RoIG9mIHRoZSBkaXRoZXIgZGF0YQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNz Ci0gKi8KLWludCBkcHVfY29ubmVjdG9yX2dldF9kaXRoZXJfY2ZnKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uLAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsIHZvaWQgKipj ZmcsIHNpemVfdCAqbGVuKTsKLQotI2VuZGlmIC8qIF9EUFVfQ09OTkVDVE9SX0hfICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwppbmRleCAzODc5MTlhLi5hZDE5NWQ1 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKQEAgLTMzLDcgKzMz LDYgQEAKICNpbmNsdWRlICJkcHVfcGxhbmUuaCIKICNpbmNsdWRlICJkcHVfY29sb3JfcHJvY2Vz c2luZy5oIgogI2luY2x1ZGUgImRwdV9lbmNvZGVyLmgiCi0jaW5jbHVkZSAiZHB1X2Nvbm5lY3Rv ci5oIgogI2luY2x1ZGUgImRwdV92YmlmLmgiCiAjaW5jbHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5o IgogI2luY2x1ZGUgImRwdV9jb3JlX3BlcmYuaCIKQEAgLTMzNTksNyArMzM1OCw2IEBAIHN0YXRp YyBpbnQgZHB1X2NydGNfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CiAJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7CiAJc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyOwogCWludCBpLCByZXQgPSAtRUlOVkFMOwotCWJvb2wgY29ubl9vZmZzZXQgPSAwOwog CWJvb2wgaXNfY21kID0gdHJ1ZTsKIAogCWlmICghY3J0YyB8fCAhc3RhdGUpIHsKQEAgLTMzNjgs MTMgKzMzNjYsNiBAQCBzdGF0aWMgaW50IGRwdV9jcnRjX2F0b21pY19nZXRfcHJvcGVydHkoc3Ry dWN0IGRybV9jcnRjICpjcnRjLAogCQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwogCQlj c3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGNz dGF0ZS0+bnVtX2Nvbm5lY3RvcnM7ICsraSkgewotCQkJY29ubl9vZmZzZXQgPSBkcHVfY29ubmVj dG9yX25lZWRzX29mZnNldCgKLQkJCQkJCWNzdGF0ZS0+Y29ubmVjdG9yc1tpXSk7Ci0JCQlpZiAo Y29ubl9vZmZzZXQpCi0JCQkJYnJlYWs7Ci0JCX0KLQogCQkvKioKIAkJICogc2V0IHRoZSBjbWQg ZmxhZyBvbmx5IHdoZW4gYWxsIHRoZSBlbmNvZGVycyBhdHRhY2hlZAogCQkgKiB0byB0aGUgY3J0 YyBhcmUgaW4gY21kIG1vZGUuIENvbnNpZGVyIGFsbCBvdGhlciBjYXNlcwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKaW5kZXggMzAwNDU2OS4uMWIyMTk4NyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCkBAIC03MCw2 ICs3MCw4IEBACiAKICNkZWZpbmUgSURMRV9TSE9SVF9USU1FT1VUCTEKIAorI2RlZmluZSBNQVhf VkRJU1BMQVlfU1BMSVQgMTA4MAorCiAvKioKICAqIGVudW0gZHB1X2VuY19yY19ldmVudHMgLSBl dmVudHMgZm9yIHJlc291cmNlIGNvbnRyb2wgc3RhdGUgbWFjaGluZQogICogQERQVV9FTkNfUkNf RVZFTlRfS0lDS09GRjoKQEAgLTE3Miw3ICsxNzQsNiBAQCBlbnVtIGRwdV9lbmNfcmNfc3RhdGVz IHsKICAqIEBmcmFtZV9kb25lX3RpbWVyOgkJd2F0Y2hkb2cgdGltZXIgZm9yIGZyYW1lIGRvbmUg ZXZlbnQKICAqIEB2c3luY19ldmVudF90aW1lcjoJCXZzeW5jIHRpbWVyCiAgKiBAZGlzcF9pbmZv OgkJCWxvY2FsIGNvcHkgb2YgbXNtX2Rpc3BsYXlfaW5mbyBzdHJ1Y3QKLSAqIEBtb2RlX2luZm86 CQkJbG9jYWwgY29weSBvZiBtc21fbW9kZV9pbmZvIHN0cnVjdAogICogQG1pc3JfZW5hYmxlOgkJ bWlzciBlbmFibGUvZGlzYWJsZSBzdGF0dXMKICAqIEBtaXNyX2ZyYW1lX2NvdW50OgkJbWlzciBm cmFtZSBjb3VudCBiZWZvcmUgc3RhcnQgY2FwdHVyaW5nIHRoZSBkYXRhCiAgKiBAaWRsZV9wY19z dXBwb3J0ZWQ6CQlpbmRpY2F0ZSBpZiBpZGxlIHBvd2VyIGNvbGxhcHMgaXMgc3VwcG9ydGVkCkBA IC0yMTQsNyArMjE1LDYgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgewogCXN0cnVjdCB0aW1l cl9saXN0IHZzeW5jX2V2ZW50X3RpbWVyOwogCiAJc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gZGlz cF9pbmZvOwotCXN0cnVjdCBtc21fbW9kZV9pbmZvIG1vZGVfaW5mbzsKIAlib29sIG1pc3JfZW5h YmxlOwogCXUzMiBtaXNyX2ZyYW1lX2NvdW50OwogCkBAIC00OTcsOCArNDk3LDYgQEAgdm9pZCBk cHVfZW5jb2Rlcl9nZXRfaHdfcmVzb3VyY2VzKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywK IAkJaWYgKHBoeXMgJiYgcGh5cy0+b3BzLmdldF9od19yZXNvdXJjZXMpCiAJCQlwaHlzLT5vcHMu Z2V0X2h3X3Jlc291cmNlcyhwaHlzLCBod19yZXMsIGNvbm5fc3RhdGUpOwogCX0KLQotCWh3X3Jl cy0+dG9wb2xvZ3kgPSBkcHVfZW5jLT5tb2RlX2luZm8udG9wb2xvZ3k7CiB9CiAKIHZvaWQgZHB1 X2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCkBAIC02MDUsNiAr NjAzLDI1IEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9hZGp1c3RfbW9kZShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCX0KIH0KIAorc3RhdGljIHN0cnVjdCBtc21fZGlzcGxh eV90b3BvbG9neSBkcHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3koCisJCQlzdHJ1Y3QgZHB1X2VuY29k ZXJfdmlydCAqZHB1X2VuYywKKwkJCXN0cnVjdCBkcHVfa21zICpkcHVfa21zLAorCQkJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5 IHRvcG9sb2d5OworCWludCBpLCBpbnRmX2NvdW50ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBN QVhfUEhZU19FTkNPREVSU19QRVJfVklSVFVBTDsgaSsrKQorCQlpZiAoZHB1X2VuYy0+cGh5c19l bmNzW2ldKQorCQkJaW50Zl9jb3VudCsrOworCisJLyogVXNlciBzcGxpdCB0b3BvbG9neSBmb3Ig d2lkdGggPiAxMDgwICovCisJdG9wb2xvZ3kubnVtX2xtID0gKG1vZGUtPnZkaXNwbGF5ID4gTUFY X1ZESVNQTEFZX1NQTElUKSA/IDIgOiAxOworCXRvcG9sb2d5Lm51bV9lbmMgPSAwOworCXRvcG9s b2d5Lm51bV9pbnRmID0gaW50Zl9jb3VudDsKKworCXJldHVybiB0b3BvbG9neTsKK30KIHN0YXRp YyBpbnQgZHB1X2VuY29kZXJfdmlydF9hdG9taWNfY2hlY2soCiAJCXN0cnVjdCBkcm1fZW5jb2Rl ciAqZHJtX2VuYywKIAkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLApAQCAtNjE1 LDYgKzYzMiw3IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfdmlydF9hdG9taWNfY2hlY2soCiAJ c3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGU7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlOworCXN0cnVjdCBtc21f ZGlzcGxheV90b3BvbG9neSB0b3BvbG9neTsKIAlpbnQgaSA9IDA7CiAJaW50IHJldCA9IDA7CiAK QEAgLTY2MCw2ICs2NzgsOCBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3ZpcnRfYXRvbWljX2No ZWNrKAogCQl9CiAJfQogCisJdG9wb2xvZ3kgPSBkcHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3koZHB1 X2VuYywgZHB1X2ttcywgYWRqX21vZGUpOworCiAJLyogUmVzZXJ2ZSBkeW5hbWljIHJlc291cmNl cyBub3cuIEluZGljYXRpbmcgQXRvbWljVGVzdCBwaGFzZSAqLwogCWlmICghcmV0KSB7CiAJCS8q CkBAIC02NjksNyArNjg5LDcgQEAgc3RhdGljIGludCBkcHVfZW5jb2Rlcl92aXJ0X2F0b21pY19j aGVjaygKIAkJaWYgKGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpCiAJ CQkJJiYgZHB1X2VuYy0+bW9kZV9zZXRfY29tcGxldGUpIHsKIAkJCXJldCA9IGRwdV9ybV9yZXNl cnZlKCZkcHVfa21zLT5ybSwgZHJtX2VuYywgY3J0Y19zdGF0ZSwKLQkJCQljb25uX3N0YXRlLCB0 cnVlKTsKKwkJCQljb25uX3N0YXRlLCB0b3BvbG9neSwgdHJ1ZSk7CiAJCQlkcHVfZW5jLT5tb2Rl X3NldF9jb21wbGV0ZSA9IGZhbHNlOwogCQl9CiAJfQpAQCAtNjkwLDcgKzcxMCw2IEBAIHN0YXRp YyB2b2lkIF9kcHVfZW5jb2Rlcl91cGRhdGVfdnN5bmNfc291cmNlKHN0cnVjdCBkcHVfZW5jb2Rl cl92aXJ0ICpkcHVfZW5jLAogCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwogCXN0cnVjdCBkcHVf aHdfbWRwICpod19tZHB0b3A7CiAJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jOwotCXN0cnVj dCBtc21fbW9kZV9pbmZvICptb2RlX2luZm87CiAJaW50IGk7CiAKIAlpZiAoIWRwdV9lbmMgfHwg IWRpc3BfaW5mbykgewpAQCAtNzIwLDE5ICs3MzksMTIgQEAgc3RhdGljIHZvaWQgX2RwdV9lbmNv ZGVyX3VwZGF0ZV92c3luY19zb3VyY2Uoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMs CiAJCXJldHVybjsKIAl9CiAKLQltb2RlX2luZm8gPSAmZHB1X2VuYy0+bW9kZV9pbmZvOwotCWlm ICghbW9kZV9pbmZvKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBtb2RlIGluZm9cbiIpOwotCQly ZXR1cm47Ci0JfQotCiAJaWYgKGh3X21kcHRvcC0+b3BzLnNldHVwX3ZzeW5jX3NvdXJjZSAmJgog CQkJZGlzcF9pbmZvLT5jYXBhYmlsaXRpZXMgJiBNU01fRElTUExBWV9DQVBfQ01EX01PREUpIHsK IAkJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykKIAkJCXZzeW5j X2NmZy5wcG51bWJlcltpXSA9IGRwdV9lbmMtPmh3X3BwW2ldLT5pZHg7CiAKIAkJdnN5bmNfY2Zn LnBwX2NvdW50ID0gZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsKLQkJdnN5bmNfY2ZnLmZyYW1lX3Jh dGUgPSBtb2RlX2luZm8tPmZyYW1lX3JhdGU7CiAJCWlmIChkaXNwX2luZm8tPmlzX3RlX3VzaW5n X3dhdGNoZG9nX3RpbWVyKQogCQkJdnN5bmNfY2ZnLnZzeW5jX3NvdXJjZSA9IERQVV9WU1lOQ19T T1VSQ0VfV0RfVElNRVJfMDsKIAkJZWxzZQpAQCAtNzkxLDkgKzgwMyw2IEBAIHN0YXRpYyB2b2lk IF9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX2hlbHBlcihzdHJ1Y3QgZHJtX2VuY29kZXIg KmRybV9lbmMsCiAJCWRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoJnByaXYtPnBoYW5kbGUsCiAJ CQkJZHB1X2ttcy0+Y29yZV9jbGllbnQsIHRydWUpOwogCi0JCS8qIGVuYWJsZSBEU0kgY2xrcyAq LwotCQlkcHVfY29ubmVjdG9yX2Nsa19jdHJsKGRwdV9lbmMtPmN1cl9tYXN0ZXItPmNvbm5lY3Rv ciwgdHJ1ZSk7Ci0KIAkJLyogZW5hYmxlIGFsbCB0aGUgaXJxICovCiAJCV9kcHVfZW5jb2Rlcl9p cnFfY29udHJvbChkcm1fZW5jLCB0cnVlKTsKIApAQCAtODAxLDkgKzgxMCw2IEBAIHN0YXRpYyB2 b2lkIF9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX2hlbHBlcihzdHJ1Y3QgZHJtX2VuY29k ZXIgKmRybV9lbmMsCiAJCS8qIGRpc2FibGUgYWxsIHRoZSBpcnEgKi8KIAkJX2RwdV9lbmNvZGVy X2lycV9jb250cm9sKGRybV9lbmMsIGZhbHNlKTsKIAotCQkvKiBkaXNhYmxlIERTSSBjbGtzICov Ci0JCWRwdV9jb25uZWN0b3JfY2xrX2N0cmwoZHB1X2VuYy0+Y3VyX21hc3Rlci0+Y29ubmVjdG9y LCBmYWxzZSk7Ci0KIAkJLyogZGlzYWJsZSBEUFUgY29yZSBjbGtzICovCiAJCWRwdV9wb3dlcl9y ZXNvdXJjZV9lbmFibGUoJnByaXYtPnBoYW5kbGUsCiAJCQkJZHB1X2ttcy0+Y29yZV9jbGllbnQs IGZhbHNlKTsKQEAgLTgxNSw3ICs4MjEsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfcmVz b3VyY2VfY29udHJvbF9oZWxwZXIoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogc3RhdGlj IGludCBkcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJt X2VuYywKIAkJdTMyIHN3X2V2ZW50KQogewotCXVuc2lnbmVkIGludCBscCwgaWRsZV90aW1lb3V0 OwogCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOwogCXN0cnVjdCBtc21fZHJtX3By aXZhdGUgKnByaXY7CiAJc3RydWN0IG1zbV9kcm1fdGhyZWFkICpkaXNwX3RocmVhZDsKQEAgLTky MSwyNSArOTI2LDEzIEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbChz dHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCS8qIHNl dCBpZGxlIHRpbWVvdXQgYmFzZWQgb24gbWFzdGVyIGNvbm5lY3RvcidzIGxwIHZhbHVlICovCi0J CWlmIChkcHVfZW5jLT5jdXJfbWFzdGVyKQotCQkJbHAgPSBkcHVfY29ubmVjdG9yX2dldF9scCgK LQkJCQkJZHB1X2VuYy0+Y3VyX21hc3Rlci0+Y29ubmVjdG9yKTsKLQkJZWxzZQotCQkJbHAgPSBE UFVfTU9ERV9EUE1TX09OOwotCi0JCWlmIChscCA9PSBEUFVfTU9ERV9EUE1TX0xQMikKLQkJCWlk bGVfdGltZW91dCA9IElETEVfU0hPUlRfVElNRU9VVDsKLQkJZWxzZQotCQkJaWRsZV90aW1lb3V0 ID0gZHB1X2VuYy0+aWRsZV90aW1lb3V0OwotCiAJCWt0aHJlYWRfcXVldWVfZGVsYXllZF93b3Jr KAogCQkJJmRpc3BfdGhyZWFkLT53b3JrZXIsCiAJCQkmZHB1X2VuYy0+ZGVsYXllZF9vZmZfd29y aywKLQkJCW1zZWNzX3RvX2ppZmZpZXMoaWRsZV90aW1lb3V0KSk7CisJCQltc2Vjc190b19qaWZm aWVzKGRwdV9lbmMtPmlkbGVfdGltZW91dCkpOwogCiAJCURQVV9FVlQzMihEUk1JRChkcm1fZW5j KSwgc3dfZXZlbnQsIGRwdV9lbmMtPnJjX3N0YXRlLAotCQkJCWlkbGVfdGltZW91dCwgRFBVX0VW VExPR19GVU5DX0NBU0UyKTsKKwkJCQlkcHVfZW5jLT5pZGxlX3RpbWVvdXQsIERQVV9FVlRMT0df RlVOQ19DQVNFMik7CiAJCURQVV9ERUJVR19FTkMoZHB1X2VuYywgInN3X2V2ZW50OiVkLCB3b3Jr IHNjaGVkdWxlZFxuIiwKIAkJCQlzd19ldmVudCk7CiAJCWJyZWFrOwpAQCAtMTEzNCw4ICsxMTI3 LDkgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9tb2RlX3NldChzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmRybV9lbmMsCiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAJc3RydWN0IGxpc3Rf aGVhZCAqY29ubmVjdG9yX2xpc3Q7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4gPSBOVUxM LCAqY29ubl9pdGVyOwotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpkcHVfY29ubiA9IE5VTEw7CiAJ c3RydWN0IGRwdV9ybV9od19pdGVyIHBwX2l0ZXI7CisJc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9s b2d5IHRvcG9sb2d5OworCWVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUgdG9wb2xvZ3lfbmFtZTsK IAlpbnQgaSA9IDAsIHJldDsKIAogCWlmICghZHJtX2VuYykgewpAQCAtMTE2NCwzMyArMTE1OCwx MSBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X21vZGVfc2V0KHN0cnVjdCBkcm1fZW5j b2RlciAqZHJtX2VuYywKIAkJcmV0dXJuOwogCX0KIAotCWRwdV9jb25uID0gdG9fZHB1X2Nvbm5l Y3Rvcihjb25uKTsKLQlpZiAoZHB1X2Nvbm4pIHsKLQkJcmV0ID0gZHB1X2Nvbm4tPm9wcy5nZXRf bW9kZV9pbmZvKGFkal9tb2RlLCAmZHB1X2VuYy0+bW9kZV9pbmZvLAotCQkJCWRwdV9rbXMtPmNh dGFsb2ctPmNhcHMtPm1heF9taXhlcl93aWR0aCk7Ci0JCWlmIChyZXQpIHsKLQkJCURQVV9FUlJP Ul9FTkMoZHB1X2VuYywKLQkJCQkiaW52YWxpZCB0b3BvbG9neSBmb3IgdGhlIG1vZGVcbiIpOwot CQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyogcmVsZWFzZSByZXNvdXJjZXMgYmVmb3JlIHNlYW1s ZXNzIG1vZGUgY2hhbmdlICovCi0JaWYgKG1zbV9pc19tb2RlX3NlYW1sZXNzX2RtcyhhZGpfbW9k ZSkpIHsKLQkJLyogcmVzdG9yZSByZXNvdXJjZSBzdGF0ZSBiZWZvcmUgcmVsZWFzaW5nIHRoZW0g Ki8KLQkJcmV0ID0gZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbChkcm1fZW5jLAotCQkJCURQ VV9FTkNfUkNfRVZFTlRfUFJFX01PREVTRVQpOwotCQlpZiAocmV0KSB7Ci0JCQlEUFVfRVJST1Jf RU5DKGRwdV9lbmMsCi0JCQkJCSJkcHUgcmVzb3VyY2UgY29udHJvbCBmYWlsZWQ6ICVkXG4iLAot CQkJCQlyZXQpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQorCXRvcG9sb2d5ID0gZHB1X2VuY29kZXJf Z2V0X3RvcG9sb2d5KGRwdV9lbmMsIGRwdV9rbXMsIGFkal9tb2RlKTsKIAogCS8qIFJlc2VydmUg ZHluYW1pYyByZXNvdXJjZXMgbm93LiBJbmRpY2F0aW5nIG5vbi1BdG9taWNUZXN0IHBoYXNlICov CiAJcmV0ID0gZHB1X3JtX3Jlc2VydmUoJmRwdV9rbXMtPnJtLCBkcm1fZW5jLCBkcm1fZW5jLT5j cnRjLT5zdGF0ZSwKLQkJCWNvbm4tPnN0YXRlLCBmYWxzZSk7CisJCQljb25uLT5zdGF0ZSwgdG9w b2xvZ3ksIGZhbHNlKTsKIAlpZiAocmV0KSB7CiAJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywKIAkJ CQkiZmFpbGVkIHRvIHJlc2VydmUgaHcgcmVzb3VyY2VzLCAlZFxuIiwgcmV0KTsKQEAgLTEyMDUs NiArMTE3Nyw3IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfbW9kZV9zZXQoc3RydWN0 IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCQlkcHVfZW5jLT5od19wcFtpXSA9IChzdHJ1Y3QgZHB1 X2h3X3Bpbmdwb25nICopIHBwX2l0ZXIuaHc7CiAJfQogCisJdG9wb2xvZ3lfbmFtZSA9IGRwdV9y bV9nZXRfdG9wb2xvZ3lfbmFtZSh0b3BvbG9neSk7CiAJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMt Pm51bV9waHlzX2VuY3M7IGkrKykgewogCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5cyA9 IGRwdV9lbmMtPnBoeXNfZW5jc1tpXTsKIApAQCAtMTIxNiw2ICsxMTg5LDcgQEAgc3RhdGljIHZv aWQgZHB1X2VuY29kZXJfdmlydF9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMs CiAJCQl9CiAJCQlwaHlzLT5od19wcCA9IGRwdV9lbmMtPmh3X3BwW2ldOwogCQkJcGh5cy0+Y29u bmVjdG9yID0gY29ubi0+c3RhdGUtPmNvbm5lY3RvcjsKKwkJCXBoeXMtPnRvcG9sb2d5X25hbWUg PSB0b3BvbG9neV9uYW1lOwogCQkJaWYgKHBoeXMtPm9wcy5tb2RlX3NldCkKIAkJCQlwaHlzLT5v cHMubW9kZV9zZXQocGh5cywgbW9kZSwgYWRqX21vZGUpOwogCQl9CkBAIC0xNzEzLDggKzE2ODcs NiBAQCBpbnQgZHB1X2VuY29kZXJfaGVscGVyX3dhaXRfZXZlbnRfdGltZW91dCgKIHZvaWQgZHB1 X2VuY29kZXJfaGVscGVyX2h3X3Jlc2V0KHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2Vu YykKIHsKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYzsKLQlzdHJ1Y3QgZHB1X2Nv bm5lY3RvciAqZHB1X2NvbjsKLQl2b2lkICpkcHVfY29uX2Rpc3A7CiAJc3RydWN0IGRwdV9od19j dGwgKmN0bDsKIAlpbnQgcmM7CiAKQEAgLTE3MzEsMjIgKzE3MDMsNiBAQCB2b2lkIGRwdV9lbmNv ZGVyX2hlbHBlcl9od19yZXNldChzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCiAJ RFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAiY3RsICVkIHJlc2V0XG4iLCAgY3RsLT5pZHgpOwogCURQ VV9FVlQzMihEUk1JRChwaHlzX2VuYy0+cGFyZW50KSwgY3RsLT5pZHgpOwogCi0JaWYgKHBoeXNf ZW5jLT5vcHMuaXNfbWFzdGVyICYmIHBoeXNfZW5jLT5vcHMuaXNfbWFzdGVyKHBoeXNfZW5jKSAm JgotCQkJcGh5c19lbmMtPmNvbm5lY3RvcikgewotCQlkcHVfY29uID0gdG9fZHB1X2Nvbm5lY3Rv cihwaHlzX2VuYy0+Y29ubmVjdG9yKTsKLQkJZHB1X2Nvbl9kaXNwID0gZHB1X2Nvbm5lY3Rvcl9n ZXRfZGlzcGxheShwaHlzX2VuYy0+Y29ubmVjdG9yKTsKLQotCQlpZiAoZHB1X2Nvbi0+b3BzLnNv ZnRfcmVzZXQpIHsKLQkJCXJjID0gZHB1X2Nvbi0+b3BzLnNvZnRfcmVzZXQoZHB1X2Nvbl9kaXNw KTsKLQkJCWlmIChyYykgewotCQkJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywKLQkJCQkJCSJjb25u ZWN0b3Igc29mdCByZXNldCBmYWlsdXJlXG4iKTsKLQkJCQlEUFVfREJHX0RVTVAoImFsbCIsICJk YmdfYnVzIiwgInZiaWZfZGJnX2J1cyIsCi0JCQkJCQkJCSJwYW5pYyIpOwotCQkJfQotCQl9Ci0J fQotCiAJcmMgPSBjdGwtPm9wcy5yZXNldChjdGwpOwogCWlmIChyYykgewogCQlEUFVfRVJST1Jf RU5DKGRwdV9lbmMsICJjdGwgJWQgcmVzZXQgZmFpbHVyZVxuIiwgIGN0bC0+aWR4KTsKQEAgLTE4 NjQsMjIgKzE4MjAsNiBAQCB2b2lkIGRwdV9lbmNvZGVyX3RyaWdnZXJfa2lja29mZl9wZW5kaW5n KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9kcHVf ZW5jb2Rlcl9zZXR1cF9kaXRoZXIoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXMpCi17Ci0J dm9pZCAqZGl0aGVyX2NmZzsKLQlpbnQgcmV0ID0gMDsKLQlzaXplX3QgbGVuID0gMDsKLQotCWlm ICghcGh5cyB8fCAhcGh5cy0+Y29ubmVjdG9yIHx8ICFwaHlzLT5od19wcCB8fAotCQkJIXBoeXMt Pmh3X3BwLT5vcHMuc2V0dXBfZGl0aGVyKQotCQlyZXR1cm47Ci0KLQlyZXQgPSBkcHVfY29ubmVj dG9yX2dldF9kaXRoZXJfY2ZnKHBoeXMtPmNvbm5lY3RvciwKLQkJCQlwaHlzLT5jb25uZWN0b3It PnN0YXRlLCAmZGl0aGVyX2NmZywgJmxlbik7Ci0JaWYgKCFyZXQpCi0JCXBoeXMtPmh3X3BwLT5v cHMuc2V0dXBfZGl0aGVyKHBoeXMtPmh3X3BwLCBkaXRoZXJfY2ZnLCBsZW4pOwotfQotCiBzdGF0 aWMgdTMyIF9kcHVfZW5jb2Rlcl9jYWxjdWxhdGVfbGluZXRpbWUoc3RydWN0IGRwdV9lbmNvZGVy X3ZpcnQgKmRwdV9lbmMsCiAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogewpAQCAt MjAzMCw3ICsxOTcwLDYgQEAgdm9pZCBkcHVfZW5jb2Rlcl9wcmVwYXJlX2Zvcl9raWNrb2ZmKHN0 cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5 czsKIAlib29sIG5lZWRzX2h3X3Jlc2V0ID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IGk7Ci0JaW50 IHJjOwogCiAJaWYgKCFkcm1fZW5jIHx8ICFwYXJhbXMpIHsKIAkJRFBVX0VSUk9SKCJpbnZhbGlk IGFyZ3NcbiIpOwpAQCAtMjA1MCw3ICsxOTg5LDYgQEAgdm9pZCBkcHVfZW5jb2Rlcl9wcmVwYXJl X2Zvcl9raWNrb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJCQlwaHlzLT5vcHMu cHJlcGFyZV9mb3Jfa2lja29mZihwaHlzLCBwYXJhbXMpOwogCQkJaWYgKHBoeXMtPmVuYWJsZV9z dGF0ZSA9PSBEUFVfRU5DX0VSUl9ORUVEU19IV19SRVNFVCkKIAkJCQluZWVkc19od19yZXNldCA9 IHRydWU7Ci0JCQlfZHB1X2VuY29kZXJfc2V0dXBfZGl0aGVyKHBoeXMpOwogCQl9CiAJfQogCURQ VV9BVFJBQ0VfRU5EKCJlbmNfcHJlcGFyZV9mb3Jfa2lja29mZiIpOwpAQCAtMjA2NiwxNCArMjAw NCw2IEBAIHZvaWQgZHB1X2VuY29kZXJfcHJlcGFyZV9mb3Jfa2lja29mZihzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmRybV9lbmMsCiAJCQkJcGh5cy0+b3BzLmh3X3Jlc2V0KHBoeXMpOwogCQl9CiAJfQot Ci0JaWYgKGRwdV9lbmMtPmN1cl9tYXN0ZXIgJiYgZHB1X2VuYy0+Y3VyX21hc3Rlci0+Y29ubmVj dG9yKSB7Ci0JCXJjID0gZHB1X2Nvbm5lY3Rvcl9wcmVfa2lja29mZihkcHVfZW5jLT5jdXJfbWFz dGVyLT5jb25uZWN0b3IpOwotCQlpZiAocmMpCi0JCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJr aWNrb2ZmIGNvbm4lZCBmYWlsZWQgcmMgJWRcbiIsCi0JCQkJCWRwdV9lbmMtPmN1cl9tYXN0ZXIt PmNvbm5lY3Rvci0+YmFzZS5pZCwKLQkJCQkJcmMpOwotCX0KIH0KIAogdm9pZCBkcHVfZW5jb2Rl cl9raWNrb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKQEAgLTI3MDYsOCArMjYzNiw3 IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX2ZyYW1lX2RvbmVfdGltZW91dChzdHJ1Y3QgdGlt ZXJfbGlzdCAqdCkKIAkJLmVhcmx5X3VucmVnaXN0ZXIgPSBkcHVfZW5jb2Rlcl9lYXJseV91bnJl Z2lzdGVyLAogfTsKIAotc3RydWN0IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0KAotCQlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAoraW50IGRwdV9lbmNvZGVyX3NldHVwKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jLAogCQlzdHJ1Y3QgbXNtX2Rpc3Bs YXlfaW5mbyAqZGlzcF9pbmZvKQogewogCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwpAQCAtMjcxNywxMSArMjY0Niw3IEBAIHN0cnVjdCBkcm1fZW5jb2Rl ciAqZHB1X2VuY29kZXJfaW5pdCgKIAlpbnQgZHJtX2VuY19tb2RlID0gRFJNX01PREVfRU5DT0RF Ul9OT05FOwogCWludCByZXQgPSAwOwogCi0JZHB1X2VuYyA9IGt6YWxsb2Moc2l6ZW9mKCpkcHVf ZW5jKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkcHVfZW5jKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0J CWdvdG8gZmFpbDsKLQl9CisJZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZW5jKTsKIAog CW11dGV4X2luaXQoJmRwdV9lbmMtPmVuY19sb2NrKTsKIAlyZXQgPSBkcHVfZW5jb2Rlcl9zZXR1 cF9kaXNwbGF5KGRwdV9lbmMsIGRwdV9rbXMsIGRpc3BfaW5mbywKQEAgLTI3MzEsMTYgKzI2NTYs MTIgQEAgc3RydWN0IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0KAogCiAJZHB1X2VuYy0+ Y3VyX21hc3RlciA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmRwdV9lbmMtPmVuY19zcGlubG9j ayk7Ci0JZHJtX2VuYyA9ICZkcHVfZW5jLT5iYXNlOwotCWRybV9lbmNvZGVyX2luaXQoZGV2LCBk cm1fZW5jLCAmZHB1X2VuY29kZXJfZnVuY3MsIGRybV9lbmNfbW9kZSwgTlVMTCk7Ci0JZHJtX2Vu Y29kZXJfaGVscGVyX2FkZChkcm1fZW5jLCAmZHB1X2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKIAog CWF0b21pY19zZXQoJmRwdV9lbmMtPmZyYW1lX2RvbmVfdGltZW91dCwgMCk7CiAJdGltZXJfc2V0 dXAoJmRwdV9lbmMtPmZyYW1lX2RvbmVfdGltZXIsCiAJCQlkcHVfZW5jb2Rlcl9mcmFtZV9kb25l X3RpbWVvdXQsIDApOwogCi0JaWYgKChkaXNwX2luZm8tPmludGZfdHlwZSA9PSBEUk1fTU9ERV9D T05ORUNUT1JfRFNJKSAmJgotCQkJZGlzcF9pbmZvLT5pc19wcmltYXJ5KQorCWlmIChkaXNwX2lu Zm8tPmludGZfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKQogCQl0aW1lcl9zZXR1cCgm ZHB1X2VuYy0+dnN5bmNfZXZlbnRfdGltZXIsCiAJCQkJZHB1X2VuY29kZXJfdnN5bmNfZXZlbnRf aGFuZGxlciwKIAkJCQkwKTsKQEAgLTI3NTgsMTQgKzI2NzksMzIgQEAgc3RydWN0IGRybV9lbmNv ZGVyICpkcHVfZW5jb2Rlcl9pbml0KAogCiAJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAiY3JlYXRl ZFxuIik7CiAKLQlyZXR1cm4gZHJtX2VuYzsKKwlyZXR1cm4gcmV0OwogCiBmYWlsOgogCURQVV9F UlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBlbmNvZGVyXG4iKTsKIAlpZiAoZHJtX2VuYykKIAkJZHB1 X2VuY29kZXJfZGVzdHJveShkcm1fZW5jKTsKIAotCXJldHVybiBFUlJfUFRSKHJldCk7CisJcmV0 dXJuIHJldDsKKworCit9CisKK3N0cnVjdCBkcm1fZW5jb2RlciAqZHB1X2VuY29kZXJfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQlpbnQgZHJtX2VuY19tb2RlKQoreworCXN0cnVjdCBk cHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jID0gTlVMTDsKKworCWRwdV9lbmMgPSBremFsbG9jKHNp emVvZigqZHB1X2VuYyksIEdGUF9LRVJORUwpOworCWlmICghZHB1X2VuYykKKwkJcmV0dXJuIEVS Ul9QVFIoRU5PTUVNKTsKKworCWRybV9lbmNvZGVyX2luaXQoZGV2LCAmZHB1X2VuYy0+YmFzZSwg JmRwdV9lbmNvZGVyX2Z1bmNzLAorCQkJZHJtX2VuY19tb2RlLCBOVUxMKTsKKwlkcm1fZW5jb2Rl cl9oZWxwZXJfYWRkKCZkcHVfZW5jLT5iYXNlLCAmZHB1X2VuY29kZXJfaGVscGVyX2Z1bmNzKTsK KworCXJldHVybiAmZHB1X2VuYy0+YmFzZTsKIH0KIAogaW50IGRwdV9lbmNvZGVyX3dhaXRfZm9y X2V2ZW50KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oCmluZGV4IGIyNTYxOWQuLmQ4NTNhZDkgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaApAQCAtNDUsNyArNDUsNiBA QCBzdHJ1Y3QgZHB1X2VuY29kZXJfaHdfcmVzb3VyY2VzIHsKIAllbnVtIGRwdV9pbnRmX21vZGUg d2JzW1dCX01BWF07CiAJYm9vbCBuZWVkc19jZG07CiAJdTMyIGRpc3BsYXlfbnVtX29mX2hfdGls ZXM7Ci0Jc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5OwogfTsKIAogLyoqCkBA IC0xNjAsNiArMTU5LDE1IEBAIGludCBkcHVfZW5jb2Rlcl93YWl0X2Zvcl9ldmVudChzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmRybV9lbmNvZGVyLAogICovCiBzdHJ1Y3QgZHJtX2VuY29kZXIgKmRwdV9l bmNvZGVyX2luaXQoCiAJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCWludCBkcm1fZW5jX21v ZGUpOworCisvKioKKyAqIGRwdV9lbmNvZGVyX3NldHVwIC0gc2V0dXAgZHB1X2VuY29kZXIgZm9y IHRoZSBkaXNwbGF5IHByb2JlZAorICogQGRldjoJCVBvaW50ZXIgdG8gZHJtIGRldmljZSBzdHJ1 Y3R1cmUKKyAqIEBlbmM6CQlQb2ludGVyIHRvIHRoZSBkcm1fZW5jb2RlcgorICogQGRpc3BfaW5m bzoJUG9pbnRlciB0byB0aGUgZGlzcGxheSBpbmZvCisgKi8KK2ludCBkcHVfZW5jb2Rlcl9zZXR1 cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYywKIAkJc3Ry dWN0IG1zbV9kaXNwbGF5X2luZm8gKmRpc3BfaW5mbyk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oCmluZGV4IGQzYmZjOTkuLmJi NjNhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNv ZGVyX3BoeXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl cl9waHlzLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJkcHVfaHdfd2IuaCIKICNpbmNs dWRlICJkcHVfaHdfY2RtLmgiCiAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKLSNpbmNsdWRlICJk cHVfY29ubmVjdG9yLmgiCiAKICNkZWZpbmUgRFBVX0VOQ09ERVJfTkFNRV9NQVgJMTYKIApAQCAt MjIxLDYgKzIyMCw3IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl9pcnEgewogICogQHNwbGl0X3JvbGU6 CQlSb2xlIHRvIHBsYXkgaW4gYSBzcGxpdC1wYW5lbCBjb25maWd1cmF0aW9uCiAgKiBAaW50Zl9t b2RlOgkJSW50ZXJmYWNlIG1vZGUKICAqIEBpbnRmX2lkeDoJCUludGVyZmFjZSBpbmRleCBvbiBk cHUgaGFyZHdhcmUKKyAqIEB0b3BvbG9neV9uYW1lOgl0b3BvbG9neSBzZWxlY3RlZCBmb3IgdGhl IGRpc3BsYXkKICAqIEBlbmNfc3BpbmxvY2s6CVZpcnR1YWwtRW5jb2Rlci1XaWRlIFNwaW4gTG9j ayBmb3IgSVJRIHB1cnBvc2VzCiAgKiBAZW5hYmxlX3N0YXRlOglFbmFibGUgc3RhdGUgdHJhY2tp bmcKICAqIEB2YmxhbmtfcmVmY291bnQ6CVJlZmVyZW5jZSBjb3VudCBvZiB2YmxhbmsgcmVxdWVz dApAQCAtMjUwLDYgKzI1MCw3IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzIHsKIAllbnVtIGRw dV9lbmNfc3BsaXRfcm9sZSBzcGxpdF9yb2xlOwogCWVudW0gZHB1X2ludGZfbW9kZSBpbnRmX21v ZGU7CiAJZW51bSBkcHVfaW50ZiBpbnRmX2lkeDsKKwllbnVtIGRwdV9ybV90b3BvbG9neV9uYW1l IHRvcG9sb2d5X25hbWU7CiAJc3BpbmxvY2tfdCAqZW5jX3NwaW5sb2NrOwogCWVudW0gZHB1X2Vu Y19lbmFibGVfc3RhdGUgZW5hYmxlX3N0YXRlOwogCWF0b21pY190IHZibGFua19yZWZjb3VudDsK QEAgLTQ0MywxNCArNDQ0LDExIEBAIGludCBkcHVfZW5jb2Rlcl9oZWxwZXJfd2FpdF9ldmVudF90 aW1lb3V0KAogc3RhdGljIGlubGluZSBlbnVtIGRwdV8zZF9ibGVuZF9tb2RlIGRwdV9lbmNvZGVy X2hlbHBlcl9nZXRfM2RfYmxlbmRfbW9kZSgKIAkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBo eXNfZW5jKQogewotCWVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUgdG9wb2xvZ3k7Ci0KIAlpZiAo IXBoeXNfZW5jIHx8IHBoeXNfZW5jLT5lbmFibGVfc3RhdGUgPT0gRFBVX0VOQ19ESVNBQkxJTkcp CiAJCXJldHVybiBCTEVORF8zRF9OT05FOwogCi0JdG9wb2xvZ3kgPSBkcHVfY29ubmVjdG9yX2dl dF90b3BvbG9neV9uYW1lKHBoeXNfZW5jLT5jb25uZWN0b3IpOwogCWlmIChwaHlzX2VuYy0+c3Bs aXRfcm9sZSA9PSBFTkNfUk9MRV9TT0xPICYmCi0JCXRvcG9sb2d5ID09IERQVV9STV9UT1BPTE9H WV9EVUFMUElQRV8zRE1FUkdFKQorCQlwaHlzX2VuYy0+dG9wb2xvZ3lfbmFtZSA9PSBEUFVfUk1f VE9QT0xPR1lfRFVBTFBJUEVfM0RNRVJHRSkKIAkJcmV0dXJuIEJMRU5EXzNEX0hfUk9XX0lOVDsK IAogCXJldHVybiBCTEVORF8zRF9OT05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMKaW5kZXggYjY4MDcxOC4uNzNlNTkzOCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5 c192aWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9w aHlzX3ZpZC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSAiZHB1X2h3X2ludGVycnVwdHMu aCIKICNpbmNsdWRlICJkcHVfY29yZV9pcnEuaCIKICNpbmNsdWRlICJkcHVfZm9ybWF0cy5oIgot I2luY2x1ZGUgImRzaV9kaXNwbGF5LmgiCiAjaW5jbHVkZSAiZHB1X3RyYWNlLmgiCiAKICNkZWZp bmUgRFBVX0RFQlVHX1ZJREVOQyhlLCBmbXQsIC4uLikgRFBVX0RFQlVHKCJlbmMlZCBpbnRmJWQg IiBmbXQsIFwKQEAgLTM1NiwxMyArMzU1LDEwIEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3Bo eXNfdmlkX3VuZGVycnVuX2lycSh2b2lkICphcmcsIGludCBpcnFfaWR4KQogCiBzdGF0aWMgYm9v bCBfZHB1X2VuY29kZXJfcGh5c19pc19kdWFsX2N0bChzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAq cGh5c19lbmMpCiB7Ci0JZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZSB0b3BvbG9neTsKLQogCWlm ICghcGh5c19lbmMpCiAJCXJldHVybiBmYWxzZTsKIAotCXRvcG9sb2d5ID0gZHB1X2Nvbm5lY3Rv cl9nZXRfdG9wb2xvZ3lfbmFtZShwaHlzX2VuYy0+Y29ubmVjdG9yKTsKLQlpZiAodG9wb2xvZ3kg PT0gRFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFKQorCWlmIChwaHlzX2VuYy0+dG9wb2xvZ3lfbmFt ZSA9PSBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEUpCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJu IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2tt cy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCmluZGV4IDViMDdm NzcuLmNiOGU1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKQEAg LTI3LDEwICsyNyw2IEBACiAjaW5jbHVkZSAibXNtX21tdS5oIgogI2luY2x1ZGUgIm1zbV9nZW0u aCIKIAotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0jaW5jbHVkZSAiZHNpX2Rp c3BsYXkuaCIKLSNpbmNsdWRlICJkc2lfZHJtLmgiCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfRFJN X01TTV9XUklURUJBQ0sKICNpbmNsdWRlICJkcHVfd2IuaCIKICNlbmRpZgpAQCAtMzgsNyArMzQs NiBAQAogI2luY2x1ZGUgImRwL2RwX2Rpc3BsYXkuaCIKICNpbmNsdWRlICJkcF9kcm0uaCIKICNl bmRpZgotI2luY2x1ZGUgImRwdV9jb25uZWN0b3IuaCIKICNpbmNsdWRlICJkcHVfa21zLmgiCiAj aW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCiAjaW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKQEAgLTQ2 OCw5ICs0NjMsNyBAQCBzdGF0aWMgdm9pZCBkcHVfa21zX2NvbXBsZXRlX2NvbW1pdChzdHJ1Y3Qg bXNtX2ttcyAqa21zLAogCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IGRy bV9jcnRjICpjcnRjOwogCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGU7Ci0J c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg Km9sZF9jb25uX3N0YXRlOwotCWludCBpLCByYyA9IDA7CisJaW50IGk7CiAKIAlpZiAoIWttcyB8 fCAhb2xkX3N0YXRlKQogCQlyZXR1cm47CkBAIC00ODMsMTkgKzQ3Niw2IEBAIHN0YXRpYyB2b2lk IGRwdV9rbXNfY29tcGxldGVfY29tbWl0KHN0cnVjdCBtc21fa21zICprbXMsCiAJZm9yX2VhY2hf b2xkX2NydGNfaW5fc3RhdGUob2xkX3N0YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwgaSkKIAkJ ZHB1X2NydGNfY29tcGxldGVfY29tbWl0KGNydGMsIG9sZF9jcnRjX3N0YXRlKTsKIAotCWZvcl9l YWNoX29sZF9jb25uZWN0b3JfaW5fc3RhdGUob2xkX3N0YXRlLCBjb25uLCBvbGRfY29ubl9zdGF0 ZSwgaSkgewotCQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCi0JCWNfY29ubiA9IHRv X2RwdV9jb25uZWN0b3IoY29ubik7Ci0JCWlmICghY19jb25uLT5vcHMucG9zdF9raWNrb2ZmKQot CQkJY29udGludWU7Ci0JCXJjID0gY19jb25uLT5vcHMucG9zdF9raWNrb2ZmKGNvbm4pOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiQ29ubmVjdG9yIFBvc3Qga2lja29mZiBmYWlsZWQgcmM9JWRc biIsCi0JCQkJCSByYyk7Ci0JCX0KLQl9Ci0KIAlkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKCZw cml2LT5waGFuZGxlLCBkcHVfa21zLT5jb3JlX2NsaWVudCwgZmFsc2UpOwogCXBtX3J1bnRpbWVf cHV0X3N5bmMoZHB1X2ttcy0+ZGV2LT5kZXYpOwogCkBAIC01NjIsMjQgKzU0Miw2IEBAIHN0YXRp YyBpbnQgX2RwdV9rbXNfZ2V0X2Rpc3BsYXlzKHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQogCQly ZXR1cm4gLUVJTlZBTDsKIAl9CiAKLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwot CS8qIGRzaSAqLwotCWRwdV9rbXMtPmRzaV9kaXNwbGF5cyA9IE5VTEw7Ci0JZHB1X2ttcy0+ZHNp X2Rpc3BsYXlfY291bnQgPSBkc2lfZGlzcGxheV9nZXRfbnVtX29mX2Rpc3BsYXlzKCk7Ci0JaWYg KGRwdV9rbXMtPmRzaV9kaXNwbGF5X2NvdW50KSB7Ci0JCWRwdV9rbXMtPmRzaV9kaXNwbGF5cyA9 IGtjYWxsb2MoZHB1X2ttcy0+ZHNpX2Rpc3BsYXlfY291bnQsCi0JCQkJc2l6ZW9mKHZvaWQgKiks Ci0JCQkJR0ZQX0tFUk5FTCk7Ci0JCWlmICghZHB1X2ttcy0+ZHNpX2Rpc3BsYXlzKSB7Ci0JCQlE UFVfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBkc2kgZGlzcGxheXNcbiIpOwotCQkJZ290byBl eGl0X2RlaW5pdF9kc2k7Ci0JCX0KLQkJZHB1X2ttcy0+ZHNpX2Rpc3BsYXlfY291bnQgPQotCQkJ ZHNpX2Rpc3BsYXlfZ2V0X2FjdGl2ZV9kaXNwbGF5cyhkcHVfa21zLT5kc2lfZGlzcGxheXMsCi0J CQkJCWRwdV9rbXMtPmRzaV9kaXNwbGF5X2NvdW50KTsKLQl9Ci0jZW5kaWYKLQogI2lmZGVmIENP TkZJR19EUk1fTVNNX1dSSVRFQkFDSwogCS8qIHdiICovCiAJZHB1X2ttcy0+d2JfZGlzcGxheXMg PSBOVUxMOwpAQCAtNjI5LDE1ICs1OTEsNyBAQCBzdGF0aWMgaW50IF9kcHVfa21zX2dldF9kaXNw bGF5cyhzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKIAlkcHVfa21zLT53Yl9kaXNwbGF5X2NvdW50 ID0gMDsKIAlkcHVfa21zLT53Yl9kaXNwbGF5cyA9IE5VTEw7CiAjZW5kaWYKLSNpZmRlZiBDT05G SUdfRFJNX01TTV9EU0lfU1RBR0lORwotZXhpdF9kZWluaXRfZHNpOgotCWtmcmVlKGRwdV9rbXMt PmRzaV9kaXNwbGF5cyk7Ci0JZHB1X2ttcy0+ZHNpX2Rpc3BsYXlfY291bnQgPSAwOwotCWRwdV9r bXMtPmRzaV9kaXNwbGF5cyA9IE5VTEw7CiAJcmV0dXJuIHJjOwotI2Vsc2UKLQlyZXR1cm4gcmM7 Ci0jZW5kaWYKIH0KIAogLyoqCkBAIC02NTQsODggKzYwOCw0NCBAQCBzdGF0aWMgdm9pZCBfZHB1 X2ttc19yZWxlYXNlX2Rpc3BsYXlzKHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQogCWtmcmVlKGRw dV9rbXMtPndiX2Rpc3BsYXlzKTsKIAlkcHVfa21zLT53Yl9kaXNwbGF5cyA9IE5VTEw7CiAJZHB1 X2ttcy0+d2JfZGlzcGxheV9jb3VudCA9IDA7Ci0KLQlrZnJlZShkcHVfa21zLT5kc2lfZGlzcGxh eXMpOwotCWRwdV9rbXMtPmRzaV9kaXNwbGF5cyA9IE5VTEw7Ci0JZHB1X2ttcy0+ZHNpX2Rpc3Bs YXlfY291bnQgPSAwOwogfQogCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKIHN0 YXRpYyB2b2lkIF9kcHVfa21zX2luaXRpYWxpemVfZHNpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAJCQkJICAgIHN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBk cHVfa21zICpkcHVfa21zLAotCQkJCSAgICB1bnNpZ25lZCBtYXhfZW5jb2RlcnMpCisJCQkJICAg IHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQogewotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2Nv bm5lY3Rvcl9vcHMgZHNpX29wcyA9IHsKLQkJLnBvc3RfaW5pdCA9ICBkc2lfY29ubl9wb3N0X2lu aXQsCi0JCS5kZXRlY3QgPSAgICAgZHNpX2Nvbm5fZGV0ZWN0LAotCQkuZ2V0X21vZGVzID0gIGRz aV9jb25uZWN0b3JfZ2V0X21vZGVzLAotCQkucHV0X21vZGVzID0gIGRzaV9jb25uZWN0b3JfcHV0 X21vZGVzLAotCQkubW9kZV92YWxpZCA9IGRzaV9jb25uX21vZGVfdmFsaWQsCi0JCS5nZXRfaW5m byA9ICAgZHNpX2Rpc3BsYXlfZ2V0X2luZm8sCi0JCS5zZXRfYmFja2xpZ2h0ID0gZHNpX2Rpc3Bs YXlfc2V0X2JhY2tsaWdodCwKLQkJLnNvZnRfcmVzZXQgICA9IGRzaV9kaXNwbGF5X3NvZnRfcmVz ZXQsCi0JCS5wcmVfa2lja29mZiAgPSBkc2lfY29ubl9wcmVfa2lja29mZiwKLQkJLmNsa19jdHJs ID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwsCi0JCS5zZXRfcG93ZXIgPSBkc2lfZGlzcGxheV9zZXRf cG93ZXIsCi0JCS5nZXRfbW9kZV9pbmZvID0gZHNpX2Nvbm5fZ2V0X21vZGVfaW5mbywKLQkJLmdl dF9kc3RfZm9ybWF0ID0gZHNpX2Rpc3BsYXlfZ2V0X2RzdF9mb3JtYXQsCi0JCS5wb3N0X2tpY2tv ZmYgPSBkc2lfY29ubl9wb3N0X2tpY2tvZmYKLQl9OwotCXN0cnVjdCBtc21fZGlzcGxheV9pbmZv IGluZm87Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCXZvaWQgKmRpc3BsYXksICpj b25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gTlVMTDsKIAlpbnQgaSwg cmM7CiAKLQkvKiBkc2kgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZHB1X2ttcy0+ZHNpX2Rpc3BsYXlf Y291bnQgJiYKLQkJcHJpdi0+bnVtX2VuY29kZXJzIDwgbWF4X2VuY29kZXJzOyArK2kpIHsKLQkJ ZGlzcGxheSA9IGRwdV9rbXMtPmRzaV9kaXNwbGF5c1tpXTsKLQkJZW5jb2RlciA9IE5VTEw7CisJ LypUT0RPOiBTdXBwb3J0IHR3byBpbmRlcGVuZGVudCBEU0kgY29ubmVjdG9ycyAqLworCWVuY29k ZXIgPSBkcHVfZW5jb2Rlcl9pbml0KGRldiwgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7CisJaWYg KElTX0VSUl9PUl9OVUxMKGVuY29kZXIpKSB7CisJCURQVV9FUlJPUigiZW5jb2RlciBpbml0IGZh aWxlZCBmb3IgZHNpICVkXG4iLCBpKTsKKwkJcmV0dXJuOworCX0KIAotCQltZW1zZXQoJmluZm8s IDB4MCwgc2l6ZW9mKGluZm8pKTsKLQkJcmMgPSBkc2lfZGlzcGxheV9nZXRfaW5mbygmaW5mbywg ZGlzcGxheSk7Ci0JCWlmIChyYykgewotCQkJRFBVX0VSUk9SKCJkc2kgZ2V0X2luZm8gJWQgZmFp bGVkXG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJcHJpdi0+ZW5jb2RlcnNbcHJpdi0+bnVt X2VuY29kZXJzKytdID0gZW5jb2RlcjsKIAotCQllbmNvZGVyID0gZHB1X2VuY29kZXJfaW5pdChk ZXYsICZpbmZvKTsKLQkJaWYgKElTX0VSUl9PUl9OVUxMKGVuY29kZXIpKSB7Ci0JCQlEUFVfRVJS T1IoImVuY29kZXIgaW5pdCBmYWlsZWQgZm9yIGRzaSAlZFxuIiwgaSk7Ci0JCQljb250aW51ZTsK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcml2LT5kc2kpOyBpKyspIHsKKwkJaWYgKCFw cml2LT5kc2lbaV0pIHsKKwkJCURQVV9ERUJVRygiaW52YWxpZCBtc21fZHNpIGZvciBjdHJsICVk XG4iLCBpKTsKKwkJCXJldHVybjsKIAkJfQogCi0JCXJjID0gZHNpX2Rpc3BsYXlfZHJtX2JyaWRn ZV9pbml0KGRpc3BsYXksIGVuY29kZXIpOworCQlyYyA9IG1zbV9kc2lfbW9kZXNldF9pbml0KHBy aXYtPmRzaVtpXSwgZGV2LCBlbmNvZGVyKTsKIAkJaWYgKHJjKSB7Ci0JCQlEUFVfRVJST1IoImRz aSBicmlkZ2UgJWQgaW5pdCBmYWlsZWQsICVkXG4iLCBpLCByYyk7Ci0JCQlkcHVfZW5jb2Rlcl9k ZXN0cm95KGVuY29kZXIpOworCQkJRFBVX0VSUk9SKCJtb2Rlc2V0X2luaXQgZmFpbGVkIGZvciBk c2lbJWRdXG4iLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0KLQkJY29ubmVjdG9yID0gZHB1X2Nv bm5lY3Rvcl9pbml0KGRldiwKLQkJCQkJZW5jb2RlciwKLQkJCQkJMCwKLQkJCQkJZGlzcGxheSwK LQkJCQkJJmRzaV9vcHMsCi0JCQkJCURSTV9DT05ORUNUT1JfUE9MTF9IUEQsCi0JCQkJCURSTV9N T0RFX0NPTk5FQ1RPUl9EU0kpOwotCQlpZiAoY29ubmVjdG9yKSB7Ci0JCQlwcml2LT5lbmNvZGVy c1twcml2LT5udW1fZW5jb2RlcnMrK10gPSBlbmNvZGVyOwotCQl9IGVsc2UgewotCQkJRFBVX0VS Uk9SKCJkc2kgJWQgY29ubmVjdG9yIGluaXQgZmFpbGVkXG4iLCBpKTsKLQkJCWRzaV9kaXNwbGF5 X2RybV9icmlkZ2VfZGVpbml0KGRpc3BsYXkpOwotCQkJZHB1X2VuY29kZXJfZGVzdHJveShlbmNv ZGVyKTsKLQkJfQogCX0KIH0KLSNlbmRpZgorCiAKICNpZmRlZiBDT05GSUdfRFJNX01TTV9XUklU RUJBQ0sKIHN0YXRpYyB2b2lkIF9kcHVfa21zX2luaXRpYWxpemVfd2Ioc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2LAogCQkJCSAgIHN0 cnVjdCBkcHVfa21zICpkcHVfa21zLAotCQkJCSAgIHVuc2lnbmVkIG1heF9lbmNvZGVycykKKwkJ CQkgICB1bnNpZ25lZCBpbnQgbWF4X2VuY29kZXJzKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHB1X2Nvbm5lY3Rvcl9vcHMgd2Jfb3BzID0gewogCQkucG9zdF9pbml0ID0gICAgZHB1X3diX2Nv bm5lY3Rvcl9wb3N0X2luaXQsCkBAIC04MDAsNyArNzEwLDcgQEAgc3RhdGljIHZvaWQgX2RwdV9r bXNfaW5pdGlhbGl6ZV93YihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogc3RhdGljIHZvaWQgX2Rw dV9rbXNfaW5pdGlhbGl6ZV9kcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVj dCBtc21fZHJtX3ByaXZhdGUgKnByaXYsCiAJCQkJICAgc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMs Ci0JCQkJICAgdW5zaWduZWQgbWF4X2VuY29kZXJzKQorCQkJCSAgIHVuc2lnbmVkIGludCBtYXhf ZW5jb2RlcnMpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfY29ubmVjdG9yX29wcyBkcF9v cHMgPSB7CiAJCS5wb3N0X2luaXQgID0gZHBfY29ubmVjdG9yX3Bvc3RfaW5pdCwKQEAgLTg3Miwx OCArNzgyLDcgQEAgc3RhdGljIHZvaWQgX2RwdV9rbXNfc2V0dXBfZGlzcGxheXMoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiwKIAkJ CQkgICAgc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiB7Ci0JdW5zaWduZWQgbWF4X2VuY29kZXJz OwotCi0JbWF4X2VuY29kZXJzID0gZHB1X2ttcy0+ZHNpX2Rpc3BsYXlfY291bnQgKyBkcHVfa21z LT53Yl9kaXNwbGF5X2NvdW50ICsKLQkJCQlkcHVfa21zLT5kcF9kaXNwbGF5X2NvdW50OwotCWlm IChtYXhfZW5jb2RlcnMgPiBBUlJBWV9TSVpFKHByaXYtPmVuY29kZXJzKSkgewotCQltYXhfZW5j b2RlcnMgPSBBUlJBWV9TSVpFKHByaXYtPmVuY29kZXJzKTsKLQkJRFBVX0VSUk9SKCJjYXBwaW5n IG51bWJlciBvZiBkaXNwbGF5cyB0byAlZCIsIG1heF9lbmNvZGVycyk7Ci0JfQotCi0jaWZkZWYg Q09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLQlfZHB1X2ttc19pbml0aWFsaXplX2RzaShkZXYs IHByaXYsIGRwdV9rbXMsIG1heF9lbmNvZGVycyk7Ci0jZW5kaWYKKwlfZHB1X2ttc19pbml0aWFs aXplX2RzaShkZXYsIHByaXYsIGRwdV9rbXMpOwogCiAjaWZkZWYgQ09ORklHX0RSTV9NU01fV1JJ VEVCQUNLCiAJX2RwdV9rbXNfaW5pdGlhbGl6ZV93YihkZXYsIHByaXYsIGRwdV9rbXMsIG1heF9l bmNvZGVycyk7CkBAIC0xNTIxLDYgKzE0MjAsNyBAQCBzdGF0aWMgaW50IGRwdV9rbXNfYXRvbWlj X2NoZWNrKHN0cnVjdCBtc21fa21zICprbXMsCiAJCWRwdV9rbXMtPmFzcGFjZVtkb21haW5dIDog TlVMTDsKIH0KIAorI2lmZGVmIENPTkZJR19EUk1fTVNNX0RJU1BMQVlQT1JUCiBzdGF0aWMgdm9p ZCBfZHB1X2ttc19wb3N0X29wZW4oc3RydWN0IG1zbV9rbXMgKmttcywgc3RydWN0IGRybV9maWxl ICpmaWxlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBOVUxMOwpAQCAtMTU2MSwxMyAr MTQ2MSwxMiBAQCBzdGF0aWMgdm9pZCBfZHB1X2ttc19wb3N0X29wZW4oc3RydWN0IG1zbV9rbXMg Kmttcywgc3RydWN0IGRybV9maWxlICpmaWxlKQogCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2Nv bmZpZy5tdXRleCk7CiAKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50IGRwdV9rbXNfcG1fc3VzcGVu ZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRkZXY7CiAJc3Ry dWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4IGN0eDsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXIgY29ubl9pdGVyOwogCXN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKIAlp bnQgcmV0ID0gMCwgbnVtX2NydGNzID0gMDsKQEAgLTE2MTEsNDUgKzE1MTAsNiBAQCBzdGF0aWMg aW50IGRwdV9rbXNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJfQogCiAJc3RhdGUt PmFjcXVpcmVfY3R4ID0gJmN0eDsKLQlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdpbihkZGV2 LCAmY29ubl9pdGVyKTsKLQlkcm1fZm9yX2VhY2hfY29ubmVjdG9yX2l0ZXIoY29ubiwgJmNvbm5f aXRlcikgewotCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0JCXVpbnQ2NF90 IGxwOwotCi0JCWlmICghY29ubi0+c3RhdGUgfHwgIWNvbm4tPnN0YXRlLT5jcnRjIHx8Ci0JCQkJ Y29ubi0+ZHBtcyAhPSBEUk1fTU9ERV9EUE1TX09OKQotCQkJY29udGludWU7Ci0KLQkJbHAgPSBk cHVfY29ubmVjdG9yX2dldF9scChjb25uKTsKLQkJaWYgKGxwID09IERQVV9NT0RFX0RQTVNfTFAx KSB7Ci0JCQkvKiB0cmFuc2l0aW9uIExQMS0+TFAyIG9uIHBtIHN1c3BlbmQgKi8KLQkJCXJldCA9 IGRwdV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5X2Zvcl9jb21taXQoY29ubiwgc3RhdGUsCi0JCQkJ CUNPTk5FQ1RPUl9QUk9QX0xQLCBEUFVfTU9ERV9EUE1TX0xQMik7Ci0JCQlpZiAocmV0KSB7Ci0J CQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0IGxwMiBmb3IgY29ubiAlZFxuIiwKLQkJCQkJCWNv bm4tPmJhc2UuaWQpOwotCQkJCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKLQkJCQlnb3Rv IHVubG9jazsKLQkJCX0KLQkJfQotCi0JCWlmIChscCAhPSBEUFVfTU9ERV9EUE1TX0xQMikgewot CQkJLyogZm9yY2UgQ1JUQyB0byBiZSBpbmFjdGl2ZSAqLwotCQkJY3J0Y19zdGF0ZSA9IGRybV9h dG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsCi0JCQkJCWNvbm4tPnN0YXRlLT5jcnRjKTsKLQkJ CWlmIChJU19FUlJfT1JfTlVMTChjcnRjX3N0YXRlKSkgewotCQkJCURSTV9FUlJPUigiZmFpbGVk IHRvIGdldCBjcnRjICVkIHN0YXRlXG4iLAotCQkJCQkJY29ubi0+c3RhdGUtPmNydGMtPmJhc2Uu aWQpOwotCQkJCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKLQkJCQlnb3RvIHVubG9jazsK LQkJCX0KLQotCQkJaWYgKGxwICE9IERQVV9NT0RFX0RQTVNfTFAxKQotCQkJCWNydGNfc3RhdGUt PmFjdGl2ZSA9IGZhbHNlOwotCQkJKytudW1fY3J0Y3M7Ci0JCX0KLQl9Ci0JZHJtX2Nvbm5lY3Rv cl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwogCiAJLyogY2hlY2sgZm9yIG5vdGhpbmcgdG8g ZG8gKi8KIAlpZiAobnVtX2NydGNzID09IDApIHsKQEAgLTE3MjEsNiArMTU4MSwzNCBAQCBzdGF0 aWMgaW50IGRwdV9rbXNfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAlyZXR1cm4gMDsK IH0KIAordm9pZCBfZHB1X2ttc19zZXRfZW5jb2Rlcl9tb2RlKHN0cnVjdCBtc21fa21zICprbXMs CisJCQkJIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgYm9vbCBjbWRfbW9kZSkK K3sKKwlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyBpbmZvOworCXN0cnVjdCBtc21fZHJtX3ByaXZh dGUgKnByaXYgPSBlbmNvZGVyLT5kZXYtPmRldl9wcml2YXRlOworCWludCBpLCByYyA9IDA7CisK KwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisKKwlpbmZvLmludGZfdHlwZSA9IGVu Y29kZXItPmVuY29kZXJfdHlwZTsKKwlpbmZvLmNhcGFiaWxpdGllcyA9IGNtZF9tb2RlID8gTVNN X0RJU1BMQVlfQ0FQX0NNRF9NT0RFIDoKKwkJCU1TTV9ESVNQTEFZX0NBUF9WSURfTU9ERTsKKwor CS8qIFRPRE86IE5vIHN1cHBvcnQgZm9yIERTSSBzd2FwICovCisJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUocHJpdi0+ZHNpKTsgaSsrKSB7CisJCWlmIChwcml2LT5kc2lbaV0pIHsKKwkJCWlu Zm8uaF90aWxlX2luc3RhbmNlW2luZm8ubnVtX29mX2hfdGlsZXNdID0gaTsKKwkJCWluZm8ubnVt X29mX2hfdGlsZXMrKzsKKwkJfQorCX0KKworCXJjID0gZHB1X2VuY29kZXJfc2V0dXAoZW5jb2Rl ci0+ZGV2LCBlbmNvZGVyLCAmaW5mbyk7CisJaWYgKHJjKQorCQlEUFVfRVJST1IoImZhaWxlZCB0 byBzZXR1cCBEUFUgZW5jb2RlciAlZDogcmM6JWRcbiIsCisJCQllbmNvZGVyLT5iYXNlLmlkLCBy Yyk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNtX2ttc19mdW5jcyBrbXNfZnVuY3MgPSB7 CiAJLmh3X2luaXQgICAgICAgICA9IGRwdV9rbXNfaHdfaW5pdCwKIAkucG9zdGluaXQgICAgICAg ID0gZHB1X2ttc19wb3N0aW5pdCwKQEAgLTE3NDQsNyArMTYzMiwxMCBAQCBzdGF0aWMgaW50IGRw dV9rbXNfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAkucG1fcmVzdW1lICAgICAgID0g ZHB1X2ttc19wbV9yZXN1bWUsCiAJLmRlc3Ryb3kgICAgICAgICA9IGRwdV9rbXNfZGVzdHJveSwK IAkuZ2V0X2FkZHJlc3Nfc3BhY2UgPSBfZHB1X2ttc19nZXRfYWRkcmVzc19zcGFjZSwKKyNpZmRl ZiBDT05GSUdfRFJNX01TTV9ESVNQTEFZUE9SVAogCS5wb3N0b3BlbiA9IF9kcHVfa21zX3Bvc3Rf b3BlbiwKKyNlbmRpZgorCS5zZXRfZW5jb2Rlcl9tb2RlID0gX2RwdV9rbXNfc2V0X2VuY29kZXJf bW9kZSwKIH07CiAKIC8qIHRoZSBjYWxsZXIgYXBpIG5lZWRzIHRvIHR1cm4gb24gY2xvY2sgYmVm b3JlIGNhbGxpbmcgaXQgKi8KQEAgLTE4MzIsOCArMTcyMyw2IEBAIHN0YXRpYyBpbnQgX2RwdV9r bXNfbW11X2luaXQoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiAJCWdvdG8gZmFpbDsKIAl9CiAK LQlkcHVfa21zLT5hc3BhY2VbMF0gPSBhc3BhY2U7Ci0KIAlyZXQgPSBhc3BhY2UtPm1tdS0+ZnVu Y3MtPmF0dGFjaChhc3BhY2UtPm1tdSwKIAkJCQkoY29uc3QgY2hhciAqKilpb21tdV9wb3J0cywK IAkJCQlBUlJBWV9TSVpFKGlvbW11X3BvcnRzKSk7CkBAIC0xODQzLDYgKzE3MzIsNyBAQCBzdGF0 aWMgaW50IF9kcHVfa21zX21tdV9pbml0KHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQogCQlnb3Rv IGZhaWw7CiAJfQogCWFzcGFjZS0+ZG9tYWluX2F0dGFjaGVkID0gdHJ1ZTsKKwlkcHVfa21zLT5h c3BhY2VbMF0gPSBhc3BhY2U7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIGZhaWw6CkBAIC0yMDAxLDYg KzE4OTEsOCBAQCBzdGF0aWMgaW50IGRwdV9rbXNfaHdfaW5pdChzdHJ1Y3QgbXNtX2ttcyAqa21z KQogCQlnb3RvIHBvd2VyX2Vycm9yOwogCX0KIAorCWlmIChkcHVfa21zLT5hc3BhY2VbMF0pCisJ CWttcy0+YXNwYWNlID0gZHB1X2ttcy0+YXNwYWNlWzBdOwogI2lmZGVmIENPTkZJR19DSFJPTUVf UkVHRE1BCiAJLyogSW5pdGlhbGl6ZSByZWcgZG1hIGJsb2NrIHdoaWNoIGlzIGEgc2luZ2xldG9u ICovCiAJcmMgPSBkcHVfcmVnX2RtYV9pbml0KGRwdV9rbXMtPnJlZ19kbWEsIGRwdV9rbXMtPmNh dGFsb2csCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0u YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCmluZGV4IGM4YzEyZDMu LmFmODIwNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9y bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCkBAIC0yMyw3 ICsyMyw2IEBACiAjaW5jbHVkZSAiZHB1X2h3X2ludGYuaCIKICNpbmNsdWRlICJkcHVfaHdfd2Iu aCIKICNpbmNsdWRlICJkcHVfZW5jb2Rlci5oIgotI2luY2x1ZGUgImRwdV9jb25uZWN0b3IuaCIK IAogI2RlZmluZSBSRVNFUlZFRF9CWV9PVEhFUihoLCByKSBcCiAJKChoKS0+cnN2cCAmJiAoKGgp LT5yc3ZwLT5lbmNfaWQgIT0gKHIpLT5lbmNfaWQpKQpAQCAtMTU4LDYgKzE1NywxOCBAQCBzdHJ1 Y3QgZHB1X2h3X21kcCAqZHB1X3JtX2dldF9tZHAoc3RydWN0IGRwdV9ybSAqcm0pCiAJcmV0dXJu IHJtLT5od19tZHA7CiB9CiAKK2VudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUKK2RwdV9ybV9nZXRf dG9wb2xvZ3lfbmFtZShzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3kpCit7CisJ aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFBVX1JNX1RPUE9MT0dZX01BWDsgaSsrKQorCQlp ZiAoUk1fSVNfVE9QT0xPR1lfTUFUQ0goZ190b3BfdGFibGVbaV0sIHRvcG9sb2d5KSkKKwkJCXJl dHVybiBnX3RvcF90YWJsZVtpXS50b3BfbmFtZTsKKworCXJldHVybiBEUFVfUk1fVE9QT0xPR1lf Tk9ORTsKK30KKwogdm9pZCBkcHVfcm1faW5pdF9od19pdGVyKAogCQlzdHJ1Y3QgZHB1X3JtX2h3 X2l0ZXIgKml0ZXIsCiAJCXVpbnQzMl90IGVuY19pZCwKQEAgLTk1NCwyMCArOTY1LDE5IEBAIHN0 YXRpYyBpbnQgX2RwdV9ybV9wb3B1bGF0ZV9yZXF1aXJlbWVudHMoCiAJCXN0cnVjdCBkcm1fZW5j b2RlciAqZW5jLAogCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCXN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAotCQlzdHJ1Y3QgZHB1X3JtX3JlcXVp cmVtZW50cyAqcmVxcykKKwkJc3RydWN0IGRwdV9ybV9yZXF1aXJlbWVudHMgKnJlcXMsCisJCXN0 cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSByZXFfdG9wb2xvZ3kpCiB7CiAJY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0Y19zdGF0ZS0+bW9kZTsKIAlpbnQgaTsKIAog CW1lbXNldChyZXFzLCAwLCBzaXplb2YoKnJlcXMpKTsKIAotCXJlcXMtPnRvcF9jdHJsID0gZHB1 X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoY29ubl9zdGF0ZSwKLQkJCUNPTk5FQ1RPUl9QUk9QX1RP UE9MT0dZX0NPTlRST0wpOwogCWRwdV9lbmNvZGVyX2dldF9od19yZXNvdXJjZXMoZW5jLCAmcmVx cy0+aHdfcmVzLCBjb25uX3N0YXRlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBEUFVfUk1fVE9QT0xP R1lfTUFYOyBpKyspIHsKIAkJaWYgKFJNX0lTX1RPUE9MT0dZX01BVENIKGdfdG9wX3RhYmxlW2ld LAotCQkJCQlyZXFzLT5od19yZXMudG9wb2xvZ3kpKSB7CisJCQkJCXJlcV90b3BvbG9neSkpIHsK IAkJCXJlcXMtPnRvcG9sb2d5ID0gJmdfdG9wX3RhYmxlW2ldOwogCQkJYnJlYWs7CiAJCX0KQEAg LTk3OCwxMCArOTg4LDYgQEAgc3RhdGljIGludCBfZHB1X3JtX3BvcHVsYXRlX3JlcXVpcmVtZW50 cygKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogRFNDIGJsb2NrcyBhcmUgaGFyZHdpcmVk IGZvciBjb250cm9sIHBhdGggMCBhbmQgMSAqLwotCWlmIChyZXFzLT50b3BvbG9neS0+bnVtX2Nv bXBfZW5jKQotCQlyZXFzLT50b3BfY3RybCB8PSBCSVQoRFBVX1JNX1RPUENUTF9EU1BQKTsKLQog CS8qKgogCSAqIFNldCB0aGUgcmVxdWlyZW1lbnQgYmFzZWQgb24gY2FwcyBpZiBub3Qgc2V0IGZy b20gdXNlciBzcGFjZQogCSAqIFRoaXMgd2lsbCBlbnN1cmUgdG8gc2VsZWN0IExNIHRpZWQgd2l0 aCBEUyBibG9ja3MKQEAgLTExMTAsOSArMTExNiw2IEBAIHZvaWQgZHB1X3JtX3JlbGVhc2Uoc3Ry dWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQogCQlnb3RvIGVuZDsKIAl9 CiAKLQl0b3BfY3RybCA9IGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KGNvbm4tPnN0YXRlLAot CQkJQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfQ09OVFJPTCk7Ci0KIAlpZiAodG9wX2N0cmwgJiBC SVQoRFBVX1JNX1RPUENUTF9SRVNFUlZFX0xPQ0spKSB7CiAJCURQVV9ERUJVRygicnN2cFtzJWRl JWRdIG5vdCByZWxlYXNpbmcgbG9ja2VkIHJlc291cmNlc1xuIiwKIAkJCQlyc3ZwLT5zZXEsIHJz dnAtPmVuY19pZCk7CkBAIC0xMTIwLDEyICsxMTIzLDYgQEAgdm9pZCBkcHVfcm1fcmVsZWFzZShz dHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRybV9lbmNvZGVyICplbmMpCiAJCURQVV9ERUJVRygi cmVsZWFzZSByc3ZwW3MlZGUlZF1cbiIsIHJzdnAtPnNlcSwKIAkJCQlyc3ZwLT5lbmNfaWQpOwog CQlfZHB1X3JtX3JlbGVhc2VfcnN2cChybSwgcnN2cCwgY29ubik7Ci0KLQkJKHZvaWQpIG1zbV9w cm9wZXJ0eV9zZXRfcHJvcGVydHkoCi0JCQkJZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGluZm8oY29u biksCi0JCQkJZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHlfc3RhdGUoY29ubi0+c3RhdGUpLAot CQkJCUNPTk5FQ1RPUl9QUk9QX1RPUE9MT0dZX05BTUUsCi0JCQkJRFBVX1JNX1RPUE9MT0dZX05P TkUpOwogCX0KIAogZW5kOgpAQCAtMTE0MSwxOCArMTEzOCw2IEBAIHN0YXRpYyBpbnQgX2RwdV9y bV9jb21taXRfcnN2cCgKIAllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlOwogCWludCByZXQgPSAw OwogCi0JcmV0ID0gbXNtX3Byb3BlcnR5X3NldF9wcm9wZXJ0eSgKLQkJCWRwdV9jb25uZWN0b3Jf Z2V0X3Byb3BpbmZvKGNvbm5fc3RhdGUtPmNvbm5lY3RvciksCi0JCQlkcHVfY29ubmVjdG9yX2dl dF9wcm9wZXJ0eV9zdGF0ZShjb25uX3N0YXRlKSwKLQkJCUNPTk5FQ1RPUl9QUk9QX1RPUE9MT0dZ X05BTUUsCi0JCQlyc3ZwLT50b3BvbG9neSk7Ci0JaWYgKHJldCkgewotCQlEUFVfRVJST1IoImZh aWxlZCB0byBzZXQgdG9wb2xvZ3kgbmFtZSBwcm9wZXJ0eSwgcmV0ICVkXG4iLAotCQkJCXJldCk7 Ci0JCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJtLCByc3ZwLCBjb25uX3N0YXRlLT5jb25uZWN0b3Ip OwotCQlyZXR1cm4gcmV0OwotCX0KLQogCS8qIFN3YXAgbmV4dCByc3ZwIHRvIGJlIHRoZSBhY3Rp dmUgKi8KIAlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgRFBVX0hXX0JMS19NQVg7IHR5cGUrKykgewog CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsaywgJnJtLT5od19ibGtzW3R5cGVdLCBsaXN0KSB7CkBA IC0xMTc3LDYgKzExNjIsNyBAQCBpbnQgZHB1X3JtX3Jlc2VydmUoCiAJCXN0cnVjdCBkcm1fZW5j b2RlciAqZW5jLAogCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCXN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAorCQlzdHJ1Y3QgbXNtX2Rpc3BsYXlf dG9wb2xvZ3kgdG9wb2xvZ3ksCiAJCWJvb2wgdGVzdF9vbmx5KQogewogCXN0cnVjdCBkcHVfcm1f cnN2cCAqcnN2cF9jdXIsICpyc3ZwX254dDsKQEAgLTEyMDIsNyArMTE4OCw3IEBAIGludCBkcHVf cm1fcmVzZXJ2ZSgKIAlfZHB1X3JtX3ByaW50X3JzdnBzKHJtLCBEUFVfUk1fU1RBR0VfQkVHSU4p OwogCiAJcmV0ID0gX2RwdV9ybV9wb3B1bGF0ZV9yZXF1aXJlbWVudHMocm0sIGVuYywgY3J0Y19z dGF0ZSwKLQkJCWNvbm5fc3RhdGUsICZyZXFzKTsKKwkJCWNvbm5fc3RhdGUsICZyZXFzLCB0b3Bv bG9neSk7CiAJaWYgKHJldCkgewogCQlEUFVfRVJST1IoImZhaWxlZCB0byBwb3B1bGF0ZSBodyBy ZXF1aXJlbWVudHNcbiIpOwogCQlnb3RvIGVuZDsKQEAgLTEyMzcsMTIgKzEyMjMsNiBAQCBpbnQg ZHB1X3JtX3Jlc2VydmUoCiAJCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJtLCByc3ZwX2N1ciwgY29u bl9zdGF0ZS0+Y29ubmVjdG9yKTsKIAkJcnN2cF9jdXIgPSBOVUxMOwogCQlfZHB1X3JtX3ByaW50 X3JzdnBzKHJtLCBEUFVfUk1fU1RBR0VfQUZURVJfQ0xFQVIpOwotCQkodm9pZCkgbXNtX3Byb3Bl cnR5X3NldF9wcm9wZXJ0eSgKLQkJCQlkcHVfY29ubmVjdG9yX2dldF9wcm9waW5mbygKLQkJCQkJ CWNvbm5fc3RhdGUtPmNvbm5lY3RvciksCi0JCQkJZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHlf c3RhdGUoY29ubl9zdGF0ZSksCi0JCQkJQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfTkFNRSwKLQkJ CQlEUFVfUk1fVE9QT0xPR1lfTk9ORSk7CiAJfQogCiAJLyogQ2hlY2sgdGhlIHByb3Bvc2VkIHJl c2VydmF0aW9uLCBzdG9yZSBpdCBpbiBodydzICJuZXh0IiBmaWVsZCAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmggYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfcm0uaAppbmRleCA4YTZjYmNmLi40Yzc3ODc0IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uaApAQCAtMTI4LDYgKzEyOCw3IEBAIGludCBkcHVf cm1faW5pdChzdHJ1Y3QgZHB1X3JtICpybSwKICAqIEBkcm1fZW5jOiBEUk0gRW5jb2RlciBoYW5k bGUKICAqIEBjcnRjX3N0YXRlOiBQcm9wb3NlZCBBdG9taWMgRFJNIENSVEMgU3RhdGUgaGFuZGxl CiAgKiBAY29ubl9zdGF0ZTogUHJvcG9zZWQgQXRvbWljIERSTSBDb25uZWN0b3IgU3RhdGUgaGFu ZGxlCisgKiBAdG9wb2xvZ3k6IFBvaW50ZXIgdG8gdG9wb2xvZ3kgaW5mbyBmb3IgdGhlIGRpc3Bs YXkKICAqIEB0ZXN0X29ubHk6IEF0b21pYy1UZXN0IHBoYXNlLCBkaXNjYXJkIHJlc3VsdHMgKHVu bGVzcyBwcm9wZXJ0eSBvdmVycmlkZXMpCiAgKiBAUmV0dXJuOiAwIG9uIFN1Y2Nlc3Mgb3RoZXJ3 aXNlIC1FUlJPUgogICovCkBAIC0xMzUsNiArMTM2LDcgQEAgaW50IGRwdV9ybV9yZXNlcnZlKHN0 cnVjdCBkcHVfcm0gKnJtLAogCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3Rh dGUgKmNvbm5fc3RhdGUsCisJCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neSwK IAkJYm9vbCB0ZXN0X29ubHkpOwogCiAvKioKQEAgLTE4Nyw0ICsxODksMTMgQEAgdm9pZCBkcHVf cm1faW5pdF9od19pdGVyKAogICovCiBpbnQgZHB1X3JtX2NoZWNrX3Byb3BlcnR5X3RvcGN0bCh1 aW50NjRfdCB2YWwpOwogCisvKioKKyAqIGRwdV9ybV9nZXRfdG9wb2xvZ3lfbmFtZSAtIHJldHVy bnMgdGhlIG5hbWUgb2YgdGhlIHRoZSBnaXZlbiB0b3BvbG9neQorICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGVmaW5pdGlvbgorICogQHRvcG9sb2d5OiB0b3BvbG9neSBkZWZpbml0aW9u CisgKiBAUmV0dXJuOiBuYW1lIG9mIHRoZSB0b3BvbG9neQorICovCitlbnVtIGRwdV9ybV90b3Bv bG9neV9uYW1lCitkcHVfcm1fZ2V0X3RvcG9sb2d5X25hbWUoc3RydWN0IG1zbV9kaXNwbGF5X3Rv cG9sb2d5IHRvcG9sb2d5KTsKKwogI2VuZGlmIC8qIF9fRFBVX1JNX0hfXyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZGJnLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw dV9kYmcuYwppbmRleCAzNDFiNTk2Li41YzYyMzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2RwdV9kYmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9kYmcuYwpAQCAt MjU0NSw5ICsyNTQ1LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9kdW1wX2FycmF5KHN0cnVjdCBkcHVf ZGJnX3JlZ19iYXNlICpibGtfYXJyW10sCiAJaWYgKGR1bXBfZGJnYnVzX3ZiaWZfcnQpCiAJCV9k cHVfZGJnX2R1bXBfdmJpZl9kYmdfYnVzKCZkcHVfZGJnX2Jhc2UuZGJnYnVzX3ZiaWZfcnQpOwog Ci0JaWYgKGRwdV9kYmdfYmFzZS5kc2lfZGJnX2J1cyB8fCBkdW1wX2FsbCkKLQkJZHNpX2N0cmxf ZGVidWdfZHVtcCgpOwotCiAJaWYgKGRvX3BhbmljICYmIGRwdV9kYmdfYmFzZS5wYW5pY19vbl9l cnIpCiAJCXBhbmljKG5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwppbmRleCBhNzEwYjYzLi4w MTM3OTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwpAQCAtNTAsOSArNTAsNiBAQAogI2lmZGVmIENP TkZJR19EUk1fTVNNX1dSSVRFQkFDSwogI2luY2x1ZGUgImRwdV93Yi5oIgogI2VuZGlmCi0jaWZk ZWYgQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLSNpbmNsdWRlICJkc2lfZGlzcGxheS5oIgot I2VuZGlmCiAjaWZkZWYgQ09ORklHX0RSTV9NU01fRFBVCiAjaW5jbHVkZSAiZHB1X2RiZy5oIgog I2VuZGlmCkBAIC0xNjM5LDQyICsxNjM2LDYgQEAgc3RhdGljIGludCBhZGRfZGlzcGxheV9jb21w b25lbnRzKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlICptZHBfZGV2ID0gTlVM TDsKIAlpbnQgcmV0OwogCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFBVCi0Jc3RydWN0IGRldmlj ZV9ub2RlICpub2RlOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQlpZiAob2ZfZGV2aWNlX2lzX2Nv bXBhdGlibGUoZGV2LT5vZl9ub2RlLCAicWNvbSxkcHUta21zIikpIHsKLQkJc3RydWN0IGRldmlj ZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKLQkJdW5zaWduZWQgaW50IGk7Ci0JCWJvb2wgZm91 bmQgPSBmYWxzZTsKLQotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0JCWZvciAo aSA9IDA7IGkgPCBNQVhfRFNJX0FDVElWRV9ESVNQTEFZOyBpKyspIHsKLQkJCW5vZGUgPSBkc2lf ZGlzcGxheV9nZXRfYm9vdF9kaXNwbGF5KGkpOwotCi0JCQlpZiAobm9kZSAhPSBOVUxMKSB7Ci0J CQkJbmFtZSA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAibGFiZWwiLCBOVUxMKTsKLQkJCQljb21w b25lbnRfbWF0Y2hfYWRkKGRldiwgbWF0Y2hwdHIsIGNvbXBhcmVfb2YsCi0JCQkJCQlub2RlKTsK LQkJCQlwcl9kZWJ1ZygiQWRkZWQgY29tcG9uZW50ID0gJXNcbiIsIG5hbWUpOwotCQkJCWZvdW5k ID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlpZiAoIWZvdW5kKQotCQkJcmV0dXJuIC1FUFJPQkVfREVG RVI7Ci0jZW5kaWYKLQotCQlmb3IgKGkgPSAwOyA7IGkrKykgewotCQkJbm9kZSA9IG9mX3BhcnNl X3BoYW5kbGUobnAsICJjb25uZWN0b3JzIiwgaSk7Ci0JCQlpZiAoIW5vZGUpCi0JCQkJYnJlYWs7 Ci0KLQkJCWNvbXBvbmVudF9tYXRjaF9hZGQoZGV2LCBtYXRjaHB0ciwgY29tcGFyZV9vZiwgbm9k ZSk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotI2VuZGlmCi0KIAkvKgogCSAqIE1EUDUgYmFzZWQg ZGV2aWNlcyBkb24ndCBoYXZlIGEgZmxhdCBoaWVyYXJjaHkuIFRoZXJlIGlzIGEgdG9wIGxldmVs CiAJICogcGFyZW50OiBNRFNTLCBhbmQgY2hpbGRyZW46IE1EUDUsIERTSSwgSERNSSwgZURQIGV0 Yy4gUG9wdWxhdGUgdGhlCkBAIC0xNjk4LDcgKzE2NTksNyBAQCBzdGF0aWMgaW50IGFkZF9kaXNw bGF5X2NvbXBvbmVudHMoc3RydWN0IGRldmljZSAqZGV2LAogCQlwdXRfZGV2aWNlKG1kcF9kZXYp OwogCiAJCS8qIGFkZCB0aGUgTURQIGNvbXBvbmVudCBpdHNlbGYgKi8KLQkJY29tcG9uZW50X21h dGNoX2FkZChkZXYsIG1hdGNocHRyLCBjb21wYXJlX29mLAorCQlkcm1fb2ZfY29tcG9uZW50X21h dGNoX2FkZChkZXYsIG1hdGNocHRyLCBjb21wYXJlX29mLAogCQkJCSAgIG1kcF9kZXYtPm9mX25v ZGUpOwogCX0gZWxzZSB7CiAJCS8qIE1EUDQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKaW5kZXggZjk4 YzRlZi4uZmRlNjc1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTE1OSw4ICsxNTksNiBAQCBl bnVtIG1zbV9tZHBfY29ubl9wcm9wZXJ0eSB7CiAJQ09OTkVDVE9SX1BST1BfQURfQkxfU0NBTEUs CiAKIAkvKiBlbnVtL2JpdG1hc2sgcHJvcGVydGllcyAqLwotCUNPTk5FQ1RPUl9QUk9QX1RPUE9M T0dZX05BTUUsCi0JQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfQ09OVFJPTCwKIAlDT05ORUNUT1Jf UFJPUF9BVVRPUkVGUkVTSCwKIAlDT05ORUNUT1JfUFJPUF9MUCwKIApAQCAtMzMxLDU3ICszMjks MjAgQEAgc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHsKIH07CiAKIC8qKgotICogc3RydWN0 IG1zbV9tb2RlX2luZm8gLSBkZWZpbmVzIGFsbCBtc20gY3VzdG9tIG1vZGUgaW5mbwotICogQGZy YW1lX3JhdGU6ICAgICAgZnJhbWVfcmF0ZSBvZiB0aGUgbW9kZQotICogQHZ0b3RhbDogICAgICAg ICAgdnRvdGFsIGNhbGN1bGF0ZWQgZm9yIHRoZSBtb2RlCi0gKiBAcHJlZmlsbF9saW5lczogICBw cmVmaWxsIGxpbmVzIGJhc2VkIG9uIHBvcmNoZXMuCi0gKiBAaml0dGVyX251bWVyOglkaXNwbGF5 IHBhbmVsIGppdHRlciBudW1lcmF0b3IgY29uZmlndXJhdGlvbgotICogQGppdHRlcl9kZW5vbToJ ZGlzcGxheSBwYW5lbCBqaXR0ZXIgZGVub21pbmF0b3IgY29uZmlndXJhdGlvbgotICogQHRvcG9s b2d5OiAgICAgICAgc3VwcG9ydGVkIHRvcG9sb2d5IGZvciB0aGUgbW9kZQotICovCi1zdHJ1Y3Qg bXNtX21vZGVfaW5mbyB7Ci0JdWludDMyX3QgZnJhbWVfcmF0ZTsKLQl1aW50MzJfdCB2dG90YWw7 Ci0JdWludDMyX3QgcHJlZmlsbF9saW5lczsKLQl1aW50MzJfdCBqaXR0ZXJfbnVtZXI7Ci0JdWlu dDMyX3Qgaml0dGVyX2Rlbm9tOwotCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9n eTsKLX07Ci0KLS8qKgogICogc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gLSBkZWZpbmVzIGRpc3Bs YXkgcHJvcGVydGllcwogICogQGludGZfdHlwZTogICAgICAgICAgRFJNX01PREVfQ09OTkVDVE9S XyBkaXNwbGF5IHR5cGUKICAqIEBjYXBhYmlsaXRpZXM6ICAgICAgIEJpdG1hc2sgb2YgZGlzcGxh eSBmbGFncwogICogQG51bV9vZl9oX3RpbGVzOiAgICAgTnVtYmVyIG9mIGhvcml6b250YWwgdGls ZXMgaW4gY2FzZSBvZiBzcGxpdCBpbnRlcmZhY2UKICAqIEBoX3RpbGVfaW5zdGFuY2U6ICAgIENv bnRyb2xsZXIgaW5zdGFuY2UgdXNlZCBwZXIgdGlsZS4gTnVtYmVyIG9mIGVsZW1lbnRzIGlzCiAg KiAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBudW1fb2ZfaF90aWxlcwotICogQGlzX2Nv bm5lY3RlZDogICAgICAgU2V0IHRvIHRydWUgaWYgZGlzcGxheSBpcyBjb25uZWN0ZWQKLSAqIEB3 aWR0aF9tbTogICAgICAgICAgIFBoeXNpY2FsIHdpZHRoCi0gKiBAaGVpZ2h0X21tOiAgICAgICAg ICBQaHlzaWNhbCBoZWlnaHQKLSAqIEBtYXhfd2lkdGg6ICAgICAgICAgIE1heCB3aWR0aCBvZiBk aXNwbGF5LiBJbiBjYXNlIG9mIGhvdCBwbHVnZ2FibGUgZGlzcGxheQotICogICAgICAgICAgICAg ICAgICAgICAgdGhpcyBpcyBtYXggd2lkdGggc3VwcG9ydGVkIGJ5IGNvbnRyb2xsZXIKLSAqIEBt YXhfaGVpZ2h0OiAgICAgICAgIE1heCBoZWlnaHQgb2YgZGlzcGxheS4gSW4gY2FzZSBvZiBob3Qg cGx1Z2dhYmxlIGRpc3BsYXkKLSAqICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgbWF4IGhl aWdodCBzdXBwb3J0ZWQgYnkgY29udHJvbGxlcgotICogQGlzX3ByaW1hcnk6ICAgICAgICAgU2V0 IHRvIHRydWUgaWYgZGlzcGxheSBpcyBwcmltYXJ5IGRpc3BsYXkKICAqIEBpc190ZV91c2luZ193 YXRjaGRvZ190aW1lcjogIEJvb2xlYW4gdG8gaW5kaWNhdGUgd2F0Y2hkb2cgVEUgaXMKICAqCQkJ CSB1c2VkIGluc3RlYWQgb2YgcGFuZWwgVEUgaW4gY21kIG1vZGUgcGFuZWxzCiAgKi8KIHN0cnVj dCBtc21fZGlzcGxheV9pbmZvIHsKIAlpbnQgaW50Zl90eXBlOwogCXVpbnQzMl90IGNhcGFiaWxp dGllczsKLQogCXVpbnQzMl90IG51bV9vZl9oX3RpbGVzOwogCXVpbnQzMl90IGhfdGlsZV9pbnN0 YW5jZVtNQVhfSF9USUxFU19QRVJfRElTUExBWV07Ci0KLQlib29sIGlzX2Nvbm5lY3RlZDsKLQot CXVuc2lnbmVkIGludCB3aWR0aF9tbTsKLQl1bnNpZ25lZCBpbnQgaGVpZ2h0X21tOwotCi0JdWlu dDMyX3QgbWF4X3dpZHRoOwotCXVpbnQzMl90IG1heF9oZWlnaHQ7Ci0KLQlib29sIGlzX3ByaW1h cnk7CiAJYm9vbCBpc190ZV91c2luZ193YXRjaGRvZ190aW1lcjsKIH07CiAKLS0gClRoZSBRdWFs Y29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJv cmEgRm9ydW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWls aW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=