From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yao Cheng Subject: [RFC PATCH v2 2/4] drm/ipvr: drm driver for VED Date: Tue, 21 Oct 2014 14:36:42 +0800 Message-ID: <1413873402-4331-3-git-send-email-yao.cheng@intel.com> References: <1413873402-4331-1-git-send-email-yao.cheng@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1413873402-4331-1-git-send-email-yao.cheng@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, sean.v.kelley@intel.com, daniel.vetter@intel.com Cc: michael.j.abel@intel.com, fei.jiang@intel.com, ram.r.rao@intel.com List-Id: intel-gfx@lists.freedesktop.org UHJvYmVzIFZFRCBhbmQgY3JlYXRlcyBhIG5ldyBkcm0gZGV2aWNlIGZvciBoYXJkd2FyZSBhY2Nl bGVyYXRlZAp2aWRlbyBkZWNvZGluZy4KQ3VycmVudGx5IHN1cHBvcnQgVlA4IGRlY29kaW5nIG9u IHZhbGxleXZpZXcuCgpTaWduZWQtb2ZmLWJ5OiBZYW8gQ2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5j b20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICB8ICAgIDIgKwogZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJt L2lwdnIvS2NvbmZpZyAgICAgICB8ICAgMTYgKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvTWFrZWZp bGUgICAgICB8ICAgMjEgKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9idWZmZXIuYyB8IDEy NjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9p cHZyL2lwdnJfYnVmZmVyLmggfCAgMTg4ICsrKysrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2 cl9kZWJ1Zy5jICB8ICAyNjMgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZGVi dWcuaCAgfCAgIDUwICsrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2RybS5oICAgIHwgIDI2 NyArKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kcnYuYyAgICB8ICA3NTkgKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2Rydi5oICAgIHwg IDQ0MiArKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2V4ZWMuYyAgIHwg IDUzMCArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZXhlYy5oICAg fCAgIDY4ICsrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2ZlbmNlLmMgIHwgIDU1MCArKysr KysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2ZlbmNlLmggIHwgICA2OCAr KwogZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9nZW0uYyAgICB8ICAxOTEgKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2dlbS5oICAgIHwgICA0NiArKwogZHJpdmVycy9ncHUvZHJt L2lwdnIvaXB2cl9tbXUuYyAgICB8ICA4MDcgKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZl cnMvZ3B1L2RybS9pcHZyL2lwdnJfbW11LmggICAgfCAgMTM1ICsrKysKIGRyaXZlcnMvZ3B1L2Ry bS9pcHZyL2lwdnJfdHJhY2UuYyAgfCAgIDExICsKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJf dHJhY2UuaCAgfCAgMjk2ICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2NtZC5j ICAgICB8IDEyNjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vaXB2ci92ZWRfY21kLmggICAgIHwgIDEwNCArKysKIGRyaXZlcnMvZ3B1L2RybS9p cHZyL3ZlZF9lYy5jICAgICAgfCAgNTg0ICsrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vaXB2ci92ZWRfZWMuaCAgICAgIHwgIDIwNyArKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pcHZy L3ZlZF9mdy5jICAgICAgfCAgNjYwICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9pcHZyL3ZlZF9mdy5oICAgICAgfCAgIDczICsrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVk X2luaXQuYyAgICB8ICA4MjkgKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9pcHZyL3ZlZF9pbml0LmggICAgfCAgIDYxICsrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRf bXNnLmggICAgIHwgIDM2NCArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX3Bt LmMgICAgICB8ICAzOTIgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9wbS5o ICAgICAgfCAgIDU1ICsrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcmVnLmggICAgIHwgIDYw OSArKysrKysrKysrKysrKysrKwogMzMgZmlsZXMgY2hhbmdlZCwgMTExODIgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL0tjb25maWcKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9NYWtlZmlsZQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfYnVmZmVyLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2J1ZmZlci5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kcm0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pcHZyL2lwdnJfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaXB2ci9pcHZyX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lw dnIvaXB2cl9leGVjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9p cHZyX2V4ZWMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJf ZmVuY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZmVu Y2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZ2VtLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2dlbS5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9tbXUuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfbW11LmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX3RyYWNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX3RyYWNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfY21kLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaXB2ci92ZWRfY21kLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaXB2ci92ZWRfZWMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZy L3ZlZF9lYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2Z3 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfZncuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9pbml0LmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfaW5pdC5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX21zZy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX3BtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaXB2ci92ZWRfcG0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pcHZyL3ZlZF9yZWcuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIv ZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggZTNiNGIwZi4uYWQ3NTg1ZCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcK QEAgLTE2NSw2ICsxNjUsOCBAQCBjb25maWcgRFJNX1NBVkFHRQogCSAgQ2hvb3NlIHRoaXMgb3B0 aW9uIGlmIHlvdSBoYXZlIGEgU2F2YWdlM0QvNC9TdXBlclNhdmFnZS9Qcm8vVHdpc3RlcgogCSAg Y2hpcHNldC4gSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhdmFn ZS4KIAorc291cmNlICJkcml2ZXJzL2dwdS9kcm0vaXB2ci9LY29uZmlnIgorCiBzb3VyY2UgImRy aXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggOTI5MmE3Ni4uOGVjNGJkYSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQpAQCAtNDEsNiArNDEsNyBAQCBvYmotJChDT05GSUdfRFJNX1JBREVPTikrPSByYWRlb24vCiBv YmotJChDT05GSUdfRFJNX01HQSkJKz0gbWdhLwogb2JqLSQoQ09ORklHX0RSTV9JODEwKQkrPSBp ODEwLwogb2JqLSQoQ09ORklHX0RSTV9JOTE1KSAgKz0gaTkxNS8KK29iai0kKENPTkZJR19EUk1f SVBWUikgICs9IGlwdnIvCiBvYmotJChDT05GSUdfRFJNX01HQUcyMDApICs9IG1nYWcyMDAvCiBv YmotJChDT05GSUdfRFJNX0NJUlJVU19RRU1VKSArPSBjaXJydXMvCiBvYmotJChDT05GSUdfRFJN X1NJUykgICArPSBzaXMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9LY29uZmln IGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi42MWQzMTE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lw dnIvS2NvbmZpZwpAQCAtMCwwICsxLDE2IEBACitjb25maWcgRFJNX0lQVlIKKyAgICAgICB0cmlz dGF0ZSAiSVBWUiB2aWRlbyBkZWNvZGUgZHJpdmVyIgorICAgICAgIGRlcGVuZHMgb24gRFJNCisg ICAgICAgc2VsZWN0IFNITUVNCisgICAgICAgc2VsZWN0IFRNUEZTCisgICAgICAgZGVmYXVsdCBt CisgICAgICAgaGVscAorICAgICAgICAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRv IGVuYWJsZSBhY2NlbGVyYXRlZCB2aWRlbyBkZWNvZGUgd2l0aCBWRUQgaGFyZHdhcmUuCisJCSBD dXJyZW50bHkgc3VwcG9ydCBWUDggZGVjb2Rpbmcgb24gdmFsbGV5dmlldy4KKworY29uZmlnIERS TV9JUFZSX0VDCisgICAgICAgYm9vbCAiW0VYUEVSSU1FTlRBTF0gZXJyb3IgY29uY2VhbG1lbnQg Zm9yIElQVlIgZGVjb2RpbmciCisgICAgICAgZGVwZW5kcyBvbiBEUk1fSVBWUgorICAgICAgIGRl ZmF1bHQgeQorICAgICAgIGhlbHAKKyAgICAgICAgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ug d2FudCB0byBlbmFibGUgaGFyZHdhcmUgZXJyb3IgY29uY2VhbG1lbnQgZm9yIFZFRCB2aWRlbyBk ZWNvZGluZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vaXB2ci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5lMjVhN2QzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvTWFr ZWZpbGUKQEAgLTAsMCArMSwyMSBAQAorCitjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQorCitp cHZyLXkgOj0gXAorICAgICAgICBpcHZyX2dlbS5vIFwKKyAgICAgICAgaXB2cl9kcnYubyBcCisg ICAgICAgIGlwdnJfYnVmZmVyLm8gXAorICAgICAgICBpcHZyX2V4ZWMubyBcCisgICAgICAgIGlw dnJfZmVuY2UubyBcCisgICAgICAgIGlwdnJfbW11Lm8gXAorICAgICAgICBpcHZyX2RlYnVnLm8g XAorICAgICAgICBpcHZyX3RyYWNlLm8gXAorICAgICAgICB2ZWRfcG0ubyBcCisgICAgICAgIHZl ZF9lYy5vIFwKKyAgICAgICAgdmVkX2NtZC5vIFwKKyAgICAgICAgdmVkX2Z3Lm8gXAorICAgICAg ICB2ZWRfaW5pdC5vCisKK29iai0kKENPTkZJR19EUk1fSVBWUikgKz0gaXB2ci5vCisKK0NGTEFH U19pcHZyX3RyYWNlLm8gOj0gLUkkKHNyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p cHZyL2lwdnJfYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2J1ZmZlci5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjkxZTAKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2J1ZmZlci5jCkBAIC0wLDAgKzEsMTI2NCBA QAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKiBpcHZyX2J1ZmZlci5jOiBJUFZSIGJ1ZmZlciBjcmVh dGlvbiwgZGVzdG9yeSwgbWFwIGV0YworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBD b3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWls cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5r bGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICog QXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlh byBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK KyNpbmNsdWRlIDxkcm1QLmg+CisjaW5jbHVkZSAiaXB2cl9idWZmZXIuaCIKKyNpbmNsdWRlICJp cHZyX3RyYWNlLmgiCisKK2V4dGVybiBpbnQgZmFrZV9ib19kZWJ1ZzsKKworLyogRW5zdXJlIHRo YXQgdGhlIGFzc29jaWF0ZWQgcGFnZXMgYXJlIGdhdGhlcmVkIGZyb20gdGhlIGJhY2tpbmcgc3Rv cmFnZQorICogYW5kIHBpbm5lZCBpbnRvIG91ciBvYmplY3QuIGlwdnJfZ2VtX29iamVjdF9nZXRf cGFnZXMoKSBtYXkgYmUgY2FsbGVkCisgKiBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdGhleSBhcmUg cmVsZWFzZWQgYnkgYSBzaW5nbGUgY2FsbCB0bworICogaXB2cl9nZW1fb2JqZWN0X3B1dF9wYWdl cygpIC0gb25jZSB0aGUgcGFnZXMgYXJlIG5vIGxvbmdlciByZWZlcmVuY2VkCisgKiBlaXRoZXIg YXMgYSByZXN1bHQgb2YgbWVtb3J5IHByZXNzdXJlIChyZWFwaW5nIHBhZ2VzIHVuZGVyIHRoZSBz aHJpbmtlcikKKyAqIG9yIGFzIHRoZSBvYmplY3QgaXMgaXRzZWxmIHJlbGVhc2VkLgorICovCisv KiBmb3IgZmFrZSBkZWJ1Zywgd2lsbCBhbGxvY2F0ZSBibyB3aXRoIGFsbG9jX3BhZ2UsIGluc3Rl YWQgb2YgdXNpbmcgc2cgICovCitzdGF0aWMgaW50MzJfdCBpcHZyX2dlbV9vYmplY3RfZ2V0X3Bh Z2VzKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9pcHZy X3ByaXZhdGUgKmRldl9wcml2ID0gb2JqLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CisJY29uc3Qg c3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3Rfb3BzICpvcHMgPSBvYmotPm9wczsKKwlpbnQzMl90 IHJldCwgcjsKKworCWlmIChvYmotPnNnX3RhYmxlKQorCQlyZXR1cm4gMDsKKworCUJVR19PTihv YmotPnBhZ2VzX3Bpbl9jb3VudCk7CisKKwlpZiAoZmFrZV9ib19kZWJ1ZykgeworCQlnZnBfdCBn ZnBfZmxhZ3MgPSBHRlBfVVNFUiB8IEdGUF9ETUEzMiB8IF9fR0ZQX0lPOworCQlzdHJ1Y3QgcGFn ZSAqcCA9IE5VTEw7CisJCW9iai0+ZmFrZV9wYWdlcyA9CisJCQlkcm1fY2FsbG9jX2xhcmdlKG9i ai0+YmFzZS5zaXplIC8gNDA5Niwgc2l6ZW9mKHZvaWQqKSk7CisJCUlQVlJfREVCVUdfR0VORVJB TCgiZmFrZSBjYWxsIGFsbG9jX3BhZ2UgdG8gYWxsb2MgcGFnZXMuXG4iKTsKKwkJZm9yIChyID0g MDsgciA8IG9iai0+YmFzZS5zaXplIC8gNDA5NjsgKytyKSB7CisJCQlwID0gYWxsb2NfcGFnZShn ZnBfZmxhZ3MpOworCQkJaWYgKCFwKSB7CisJCQkJSVBWUl9FUlJPUigiVW5hYmxlIHRvIGFsbG9j YXRlIHBhZ2VcbiIpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJb2JqLT5mYWtlX3Bh Z2VzW3JdID0gcDsKKwkJCXN3aXRjaCAob2JqLT5jYWNoZV9sZXZlbCkgeworCQkJY2FzZSBJUFZS X0NBQ0hFX05PTkU6CisJCQkJcmV0ID0gc2V0X3BhZ2VzX3VjKHAsIDEpOworCQkJCWJyZWFrOwor CQkJY2FzZSBJUFZSX0NBQ0hFX1dDOgorCQkJCXJldCA9IHNldF9tZW1vcnlfd2MoCisJCQkJCSh1 bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwKSwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIElQ VlJfQ0FDSEVfV0I6CisJCQkJcmV0ID0gc2V0X3BhZ2VzX3diKHAsIDEpOworCQkJCWJyZWFrOwor CQkJZGVmYXVsdDoKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYg KHJldCkgeworCQkJCUlQVlJfREVCVUdfV0FSTigiZmFpbGVkIHRvIHNldCBwYWdlIGNhY2hlLlxu Iik7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKwl9CisJLyogd2lsbCBjYWxsIGlw dnJfZ2VtX29iamVjdF9nZXRfcGFnZXNfbW11ICovCisJcmV0ID0gb3BzLT5nZXRfcGFnZXMob2Jq KTsKKwlpZiAocmV0KSB7CisJCUlQVlJfRVJST1IoImZhaWxlZCB0byBjYWxsIG9wcy0+Z2V0X3Bh Z2VzXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBkbyB3ZSBuZWVkIGxvY2sgaGVyZT8g Ki8KKwlsaXN0X2FkZF90YWlsKCZvYmotPmdsb2JhbF9saXN0LCAmZGV2X3ByaXYtPmlwdnJfbW0u dW5ib3VuZF9saXN0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludDMyX3QgaXB2cl9nZW1f b2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCWNv bnN0IHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0X29wcyAqb3BzID0gb2JqLT5vcHM7CisKKwlp ZiAob2JqLT5zZ190YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChvYmotPnBhZ2Vz X3Bpbl9jb3VudCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWxpc3RfZGVsKCZvYmotPmdsb2JhbF9s aXN0KTsKKworCW9wcy0+cHV0X3BhZ2VzKG9iaik7CisJb2JqLT5zZ190YWJsZSA9IE5VTEw7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludDMyX3QgaXB2cl9nZW1fb2JqZWN0X2dldF9wYWdl c19zZyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCXVpbnQzMl90IHBhZ2Vf Y291bnQsIGk7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisJc3RydWN0IHNnX3Rh YmxlICpzdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBzZ19wYWdlX2l0ZXIg c2dfaXRlcjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CisJc3RydWN0IHBhZ2UgKipwYWdl X2FycmF5ID0gTlVMTDsKKwlpbnQgY2FycmF5ID0gMDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfcGZu ID0gMDsJLyogc3VwcHJlc3MgZ2NjIHdhcm5pbmcgKi8KKwlnZnBfdCBnZnA7CisJaW50MzJfdCBy ZXQ7CisKKwkvKiBBc3NlcnQgdGhhdCB0aGUgb2JqZWN0IGlzIG5vdCBjdXJyZW50bHkgaW4gYW55 IEdQVSBkb21haW4uIEFzIGl0CisJICogd2Fzbid0IGluIHRoZSBNTVUsIHRoZXJlIHNob3VsZG4n dCBiZSBhbnkgd2F5IGl0IGNvdWxkIGhhdmUgYmVlbiBpbgorCSAqIGEgR1BVIGNhY2hlCisJICov CisJQlVHX09OKG9iai0+YmFzZS5yZWFkX2RvbWFpbnMgJiBJUFZSX0dFTV9ET01BSU5fR1BVKTsK KwlCVUdfT04ob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIElQVlJfR0VNX0RPTUFJTl9HUFUpOwor CisJc3QgPSBrbWFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3QgPT0gTlVM TCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYWdlX2NvdW50ID0gb2JqLT5iYXNlLnNpemUgLyBQ QUdFX1NJWkU7CisKKwlpZiAoc2dfYWxsb2NfdGFibGUoc3QsIHBhZ2VfY291bnQsIEdGUF9LRVJO RUwpKSB7CisJCXNnX2ZyZWVfdGFibGUoc3QpOworCQlrZnJlZShzdCk7CisJCXJldHVybiAtRU5P TUVNOworCX0KKworCXBhZ2VfYXJyYXkgPSBrbWFsbG9jKHBhZ2VfY291bnQgKiBzaXplb2Yoc3Ry dWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghcGFnZV9hcnJheSkpIHsK KwkJc2dfZnJlZV90YWJsZShzdCk7CisJCWtmcmVlKHN0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJ fQorCS8qIEdldCB0aGUgbGlzdCBvZiBwYWdlcyBvdXQgb2Ygb3VyIHN0cnVjdCBmaWxlLiAgVGhl eSdsbCBiZSBwaW5uZWQKKwkgKiBhdCB0aGlzIHBvaW50IHVudGlsIHdlIHJlbGVhc2UgdGhlbS4K KwkgKgorCSAqIEZhaWwgc2lsZW50bHkgd2l0aG91dCBzdGFydGluZyB0aGUgc2hyaW5rZXIKKwkg Ki8KKwltYXBwaW5nID0gZmlsZV9pbm9kZShvYmotPmJhc2UuZmlscCktPmlfbWFwcGluZzsKKwln ZnAgPSBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpOworCS8qIHRvZG86IG5lZWQgc2V0IGNvcnJl Y3QgZ2ZwICovCisJZ2ZwIHw9IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9O T19LU1dBUEQ7CisJZ2ZwIHw9IEdGUF9ETUEzMiB8IF9fR0ZQX0lPOworCXNnID0gc3QtPnNnbDsK KwlzdC0+bmVudHMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKKwkJ cGFnZSA9IHNobWVtX3JlYWRfbWFwcGluZ19wYWdlX2dmcChtYXBwaW5nLCBpLCBnZnApOworCQlp ZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQkvKiBkb2Vzbid0IHN1cHBvcnQgc2hyaW5rCisJCQkgKiBz aW5jZSBpcHZyIGhhcyA0R2lCIGFkZHJlc3Mgc3BhY2UgKi8KKwkJCWdvdG8gZXJyX3BhZ2VzOwor CQl9CisJCXBhZ2VfYXJyYXlbY2FycmF5KytdID0gcGFnZTsKKworI2lmZGVmIENPTkZJR19TV0lP VExCCisJCWlmIChzd2lvdGxiX25yX3RibCgpKSB7CisJCQlzdC0+bmVudHMrKzsKKwkJCXNnX3Nl dF9wYWdlKHNnLCBwYWdlLCBQQUdFX1NJWkUsIDApOworCQkJc2cgPSBzZ19uZXh0KHNnKTsKKwkJ CWNvbnRpbnVlOworCQl9CisjZW5kaWYKKwkJaWYgKCFpIHx8IHBhZ2VfdG9fcGZuKHBhZ2UpICE9 IGxhc3RfcGZuICsgMSkgeworCQkJaWYgKGkpCisJCQkJc2cgPSBzZ19uZXh0KHNnKTsKKwkJCXN0 LT5uZW50cysrOworCQkJc2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIFBBR0VfU0laRSwgMCk7CisJCX0g ZWxzZSB7CisJCQlzZy0+bGVuZ3RoICs9IFBBR0VfU0laRTsKKwkJfQorCQlsYXN0X3BmbiA9IHBh Z2VfdG9fcGZuKHBhZ2UpOworCX0KKyNpZmRlZiBDT05GSUdfU1dJT1RMQgorCWlmICghc3dpb3Rs Yl9ucl90YmwoKSkKKyNlbmRpZgorCQlzZ19tYXJrX2VuZChzZyk7CisJb2JqLT5zZ190YWJsZSA9 IHN0OworCisJc3dpdGNoIChvYmotPmNhY2hlX2xldmVsKSB7CisJY2FzZSBJUFZSX0NBQ0hFX05P TkU6CisJCXJldCA9IHNldF9wYWdlc19hcnJheV91YyhwYWdlX2FycmF5LCBjYXJyYXkpOworCQli cmVhazsKKwljYXNlIElQVlJfQ0FDSEVfV0M6CisJCXJldCA9IHNldF9wYWdlc19hcnJheV93Yyhw YWdlX2FycmF5LCBjYXJyYXkpOworCQlicmVhazsKKwljYXNlIElQVlJfQ0FDSEVfV0I6CisJCXJl dCA9IHNldF9wYWdlc19hcnJheV93YihwYWdlX2FycmF5LCBjYXJyYXkpOworCQlicmVhazsKKwlk ZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJaWYgKHJldCkgeworCQlJ UFZSX0RFQlVHX1dBUk4oImZhaWxlZCB0byBzZXQgcGFnZSBjYWNoZS5cbiIpOworCQlnb3RvIGVy cl9wYWdlczsKKwl9CisJa2ZyZWUocGFnZV9hcnJheSk7CisJcmV0dXJuIDA7CisKK2Vycl9wYWdl czoKKwlzZ19tYXJrX2VuZChzZyk7CisJZm9yX2VhY2hfc2dfcGFnZShzdC0+c2dsLCAmc2dfaXRl ciwgc3QtPm5lbnRzLCAwKQorCQlwYWdlX2NhY2hlX3JlbGVhc2Uoc2dfcGFnZV9pdGVyX3BhZ2Uo JnNnX2l0ZXIpKTsKKwlzZ19mcmVlX3RhYmxlKHN0KTsKKwlrZnJlZShzdCk7CisJaWYgKHBhZ2Vf YXJyYXkpCisJCWtmcmVlKHBhZ2VfYXJyYXkpOworCXJldHVybiBQVFJfRVJSKHBhZ2UpOworfQor CitzdGF0aWMgYm9vbCBjcHVfY2FjaGVfaXNfY29oZXJlbnQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKKwkJCQkJZW51bSBpcHZyX2NhY2hlX2xldmVsIGxldmVsKQoreworCS8qIHRvZG86IG5lZWQg Y2hlY2sgaWYgY2FjaGUgc25vb3AgaXMgZW5hYmxlZCAqLworCWlmIChsZXZlbCA9PSBJUFZSX0NB Q0hFX1dCKQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gdHJ1ZTsKK30KKworYm9v bCBpcHZyX2dlbV9jbGZsdXNoX29iamVjdChzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2Jq LCBib29sIGZvcmNlKQoreworCS8qIElmIHdlIGRvbid0IGhhdmUgYSBwYWdlIGxpc3Qgc2V0IHVw LCB0aGVuIHdlJ3JlIG5vdCBwaW5uZWQKKwkgKiB0byBHUFUsIGFuZCB3ZSBjYW4gaWdub3JlIHRo ZSBjYWNoZSBmbHVzaCBiZWNhdXNlIGl0J2xsIGhhcHBlbgorCSAqIGFnYWluIGF0IGJpbmQgdGlt ZS4KKwkgKi8KKwlpZiAob2JqLT5zZ190YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisK KwkvKiBJZiB0aGUgR1BVIGlzIHNub29waW5nIHRoZSBjb250ZW50cyBvZiB0aGUgQ1BVIGNhY2hl LAorCSAqIHdlIGRvIG5vdCBuZWVkIHRvIG1hbnVhbGx5IGNsZWFyIHRoZSBDUFUgY2FjaGUgbGlu ZXMuICBIb3dldmVyLAorCSAqIHRoZSBjYWNoZXMgYXJlIG9ubHkgc25vb3BlZCB3aGVuIHRoZSBy ZW5kZXIgY2FjaGUgaXMKKwkgKiBmbHVzaGVkL2ludmFsaWRhdGVkLiAgQXMgd2UgYWx3YXlzIGhh dmUgdG8gZW1pdCBpbnZhbGlkYXRpb25zCisJICogYW5kIGZsdXNoZXMgd2hlbiBtb3ZpbmcgaW50 byBhbmQgb3V0IG9mIHRoZSBSRU5ERVIgZG9tYWluLCBjb3JyZWN0CisJICogc25vb3BpbmcgYmVo YXZpb3VyIG9jY3VycyBuYXR1cmFsbHkgYXMgdGhlIHJlc3VsdCBvZiBvdXIgZG9tYWluCisJICog dHJhY2tpbmcuCisJICovCisJaWYgKCFmb3JjZSAmJiBjcHVfY2FjaGVfaXNfY29oZXJlbnQob2Jq LT5iYXNlLmRldiwgb2JqLT5jYWNoZV9sZXZlbCkpCisJCXJldHVybiBmYWxzZTsKKworCWRybV9j bGZsdXNoX3NnKG9iai0+c2dfdGFibGUpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICog TW92ZXMgYSBzaW5nbGUgb2JqZWN0IHRvIHRoZSBDUFUgcmVhZCwgYW5kIHBvc3NpYmx5IHdyaXRl IGRvbWFpbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgd2hlbiB0aGUgbW92ZSBpcyBj b21wbGV0ZSwgaW5jbHVkaW5nIHdhaXRpbmcgb24KKyAqIGZsdXNoZXMgdG8gb2NjdXIuCisgKi8K K2ludDMyX3QKK2lwdnJfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihzdHJ1Y3QgZHJtX2lw dnJfZ2VtX29iamVjdCAqb2JqLCBib29sIHdyaXRlKQoreworCXVpbnQzMl90IG9sZF93cml0ZV9k b21haW4sIG9sZF9yZWFkX2RvbWFpbnM7CisJaW50MzJfdCByZXQ7CisKKwlpZiAob2JqLT5iYXNl LndyaXRlX2RvbWFpbiA9PSBJUFZSX0dFTV9ET01BSU5fQ1BVKQorCQlyZXR1cm4gMDsKKworCXJl dCA9IGlwdnJfZmVuY2Vfd2FpdChvYmotPmZlbmNlLCB0cnVlLCBmYWxzZSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCW9sZF93cml0ZV9kb21haW4gPSBvYmotPmJhc2Uud3JpdGVfZG9t YWluOworCW9sZF9yZWFkX2RvbWFpbnMgPSBvYmotPmJhc2UucmVhZF9kb21haW5zOworCisJLyog Rmx1c2ggdGhlIENQVSBjYWNoZSBpZiBpdCdzIHN0aWxsIGludmFsaWQuICovCisJaWYgKChvYmot PmJhc2UucmVhZF9kb21haW5zICYgSVBWUl9HRU1fRE9NQUlOX0NQVSkgPT0gMCkgeworCQlpcHZy X2dlbV9jbGZsdXNoX29iamVjdChvYmosIGZhbHNlKTsKKworCQlvYmotPmJhc2UucmVhZF9kb21h aW5zIHw9IElQVlJfR0VNX0RPTUFJTl9DUFU7CisJfQorCisJLyogSXQgc2hvdWxkIG5vdyBiZSBv dXQgb2YgYW55IG90aGVyIHdyaXRlIGRvbWFpbnMsIGFuZCB3ZSBjYW4gdXBkYXRlCisJICogdGhl IGRvbWFpbiB2YWx1ZXMgZm9yIG91ciBjaGFuZ2VzLgorCSAqLworCUJVR19PTigob2JqLT5iYXNl LndyaXRlX2RvbWFpbiAmIH5JUFZSX0dFTV9ET01BSU5fQ1BVKSAhPSAwKTsKKworCS8qIElmIHdl J3JlIHdyaXRpbmcgdGhyb3VnaCB0aGUgQ1BVLCB0aGVuIHRoZSBHUFUgcmVhZCBkb21haW5zIHdp bGwKKwkgKiBuZWVkIHRvIGJlIGludmFsaWRhdGVkIGF0IG5leHQgdXNlLgorCSAqLworCWlmICh3 cml0ZSkgeworCQlvYmotPmJhc2UucmVhZF9kb21haW5zID0gSVBWUl9HRU1fRE9NQUlOX0NQVTsK KwkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IElQVlJfR0VNX0RPTUFJTl9DUFU7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwdnJfZ2VtX29iamVjdF9wdXRfcGFnZXNfc2co c3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3Qgc2dfcGFnZV9pdGVy IHNnX2l0ZXI7CisJaW50MzJfdCByZXQ7CisKKwlyZXQgPSBpcHZyX2dlbV9vYmplY3Rfc2V0X3Rv X2NwdV9kb21haW4ob2JqLCB0cnVlKTsKKwlpZiAocmV0KSB7CisJCS8qIEluIHRoZSBldmVudCBv ZiBhIGRpc2FzdGVyLCBhYmFuZG9uIGFsbCBjYWNoZXMgYW5kCisJCSAqIGhvcGUgZm9yIHRoZSBi ZXN0LgorCQkgKi8KKwkJV0FSTl9PTihyZXQgIT0gLUVJTyk7CisJCWlwdnJfZ2VtX2NsZmx1c2hf b2JqZWN0KG9iaiwgdHJ1ZSk7CisJCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSBJUFZSX0dFTV9E T01BSU5fQ1BVOworCQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gSVBWUl9HRU1fRE9NQUlOX0NQ VTsKKwl9CisKKwlJUFZSX0RFQlVHX0dFTkVSQUwoInN0YXJ0IHRvIGZyZWUgcGFnZXMuXG4iKTsK Kwlmb3JfZWFjaF9zZ19wYWdlKG9iai0+c2dfdGFibGUtPnNnbCwKKwkJCSZzZ19pdGVyLCBvYmot PnNnX3RhYmxlLT5uZW50cywgMCkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2VfaXRl cl9wYWdlKCZzZ19pdGVyKTsKKworCQlpZiAob2JqLT5kaXJ0eSkKKwkJCXNldF9wYWdlX2RpcnR5 KHBhZ2UpOworCQkvKiBuZWVkIHNldCBiYWNrIHRvIHdiIGJlZm9yZSByZWxlYXNlIHBhZ2UgKi8K KwkJcmV0ID0gc2V0X3BhZ2VzX3diKHBhZ2UsIDEpOworCQlpZiAocmV0KQorCQkJSVBWUl9FUlJP UigiZmFpbGVkIHRvIHNldCBwYWdlIGFzIHdiLlxuIik7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShw YWdlKTsKKwl9CisJb2JqLT5kaXJ0eSA9IDA7CisKKwlzZ19mcmVlX3RhYmxlKG9iai0+c2dfdGFi bGUpOworCWtmcmVlKG9iai0+c2dfdGFibGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9pcHZyX2dlbV9vYmplY3Rfb3BzIGlwdnJfZ2VtX29iamVjdF9vcHMgPSB7CisJLmdldF9wYWdl cyA9IGlwdnJfZ2VtX29iamVjdF9nZXRfcGFnZXNfc2csCisJLnB1dF9wYWdlcyA9IGlwdnJfZ2Vt X29iamVjdF9wdXRfcGFnZXNfc2csCit9OworCisvKiBBbGwgdGhlIG5ldyBWTSBzdHVmZiAqLwor dW5zaWduZWQgbG9uZyBpcHZyX2dlbV9vYmpfbW11X29mZnNldChzdHJ1Y3QgZHJtX2lwdnJfZ2Vt X29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IG9i ai0+YmFzZS5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpcHZyX3ZtYSAqdm1hOworCisJc3Ry dWN0IGlwdnJfYWRkcmVzc19zcGFjZSAqdm0gPSAmZGV2X3ByaXYtPmFkZHJfc3BhY2U7CisKKwlC VUdfT04obGlzdF9lbXB0eSgmb2JqLT52bWFfbGlzdCkpOworCWxpc3RfZm9yX2VhY2hfZW50cnko dm1hLCAmb2JqLT52bWFfbGlzdCwgdm1hX2xpbmspIHsKKwkJLyogdG9kbzogZm9yIHVzZXIgcHRy IG9iaiwgbmVlZCBjb25zaWRlciBvZmZzZXQgaW4gcGFnZSBpbiBmdXR1cmUgKi8KKwkJaWYgKHZt YS0+dm0gPT0gdm0pIHsKKwkJCUlQVlJfREVCVUdfR0VORVJBTCgibm9kZSBzdGFydCBpcyAweCVs eC5cbiIsCisJCQkJCXZtYS0+bm9kZS5zdGFydCk7CisJCQlyZXR1cm4gdm1hLT5ub2RlLnN0YXJ0 OworCQl9CisJfQorCisJSVBWUl9FUlJPUigiZmFpbGVkIHRvIGZpbmQgdm1hIGNvcnJlc3BvbmRp bmcgdG8gdGhpcyBiby5cbiIpOworCXJldHVybiBJUFZSX0VSUl9PRkZTRVQoLUVJTlZBTCk7Cit9 CisKK3N0YXRpYyB2b2lkICppcHZyX2dlbV9vYmplY3RfYWxsb2Moc3RydWN0IGRybV9kZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOworCWlmIChkZXZfcHJpdiA9PSBOVUxMKQorCQlJUFZSX0VSUk9SKCJlcnJvcjogZGV2 X3ByaXZlIGlzIE5VTEwuXG4iKTsKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhkZXZfcHJpdi0+ aXB2cl9ib19zbGFiLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cit9CisKK3N0YXRpYyB2b2lk IGlwdnJfZ2VtX29iamVjdF9mcmVlKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7 CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gb2JqLT5iYXNlLmRldi0+ZGV2 X3ByaXZhdGU7CisJa21lbV9jYWNoZV9mcmVlKGRldl9wcml2LT5pcHZyX2JvX3NsYWIsIG9iaik7 Cit9CisKKy8qIHNvbWUgYm9va2tlZXBpbmcgKi8KK3N0YXRpYyB2b2lkCitpcHZyX2dlbV9pbmZv X2FkZF9vYmooc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LCBzaXplX3Qgc2l6ZSkK K3sKKwlzcGluX2xvY2soJmRldl9wcml2LT5pcHZyX21tLm9iamVjdF9zdGF0X2xvY2spOworCWRl dl9wcml2LT5pcHZyX21tLm9iamVjdF9jb3VudCsrOworCWRldl9wcml2LT5pcHZyX21tLm9iamVj dF9tZW1vcnkgKz0gc2l6ZTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPmlwdnJfbW0ub2JqZWN0 X3N0YXRfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitpcHZyX2dlbV9pbmZvX3JlbW92ZV9vYmoo c3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LCBzaXplX3Qgc2l6ZSkKK3sKKwlzcGlu X2xvY2soJmRldl9wcml2LT5pcHZyX21tLm9iamVjdF9zdGF0X2xvY2spOworCWRldl9wcml2LT5p cHZyX21tLm9iamVjdF9jb3VudC0tOworCWRldl9wcml2LT5pcHZyX21tLm9iamVjdF9tZW1vcnkg LT0gc2l6ZTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPmlwdnJfbW0ub2JqZWN0X3N0YXRfbG9j ayk7Cit9CisKK3ZvaWQgaXB2cl9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9pcHZyX2dlbV9v YmplY3QgKm9iaiwKKwkJCQljb25zdCBzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdF9vcHMgKm9w cykKK3sKKwlJTklUX0xJU1RfSEVBRCgmb2JqLT5nbG9iYWxfbGlzdCk7CisJSU5JVF9MSVNUX0hF QUQoJm9iai0+dm1hX2xpc3QpOworCisJb2JqLT5vcHMgPSBvcHM7CisKKwlpcHZyX2dlbV9pbmZv X2FkZF9vYmoob2JqLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGUsIG9iai0+YmFzZS5zaXplKTsKK30K Kworc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKgoraXB2cl9nZW1fYWxsb2Nfb2JqZWN0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkcm1faXB2cl9n ZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisJZ2ZwX3Qg bWFzazsKKworCW9iaiA9IGlwdnJfZ2VtX29iamVjdF9hbGxvYyhkZXYpOworCWlmIChvYmogPT0g TlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKCpvYmopKTsKKwor CWlmIChkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgJm9iai0+YmFzZSwgc2l6ZSkgIT0gMCkgewor CQlpcHZyX2dlbV9vYmplY3RfZnJlZShvYmopOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbml0 X3dhaXRxdWV1ZV9oZWFkKCZvYmotPmV2ZW50X3F1ZXVlKTsKKwlhdG9taWNfc2V0KCZvYmotPmNw dV93cml0ZXJzLCAwKTsKKwkvKiB0b2RvOiBuZWVkIHNldCBjb3JyZWN0IG1hc2sgKi8KKwltYXNr ID0gR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVDTEFJTUFCTEU7CisKKwkvKiBpcHZyIGNhbm5vdCBy ZWxvY2F0ZSBvYmplY3RzIGFib3ZlIDRHaUIuICovCisJbWFzayAmPSB+X19HRlBfSElHSE1FTTsK KwltYXNrIHw9IF9fR0ZQX0RNQTMyOworCisJbWFwcGluZyA9IGZpbGVfaW5vZGUob2JqLT5iYXNl LmZpbHApLT5pX21hcHBpbmc7CisJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgbWFzayk7 CisKKwlpcHZyX2dlbV9vYmplY3RfaW5pdChvYmosICZpcHZyX2dlbV9vYmplY3Rfb3BzKTsKKwor CW9iai0+YmFzZS53cml0ZV9kb21haW4gPSBJUFZSX0dFTV9ET01BSU5fQ1BVOworCW9iai0+YmFz ZS5yZWFkX2RvbWFpbnMgPSBJUFZSX0dFTV9ET01BSU5fQ1BVOworCisJcmV0dXJuIG9iajsKK30K KworaW50MzJfdCBpcHZyX2dlbV9tbXVfYmluZF9vYmplY3Qoc3RydWN0IGRybV9pcHZyX2dlbV9v YmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBvYmot PmJhc2UuZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCByZXQsIHR5cGUgPSAwOworCWNvbnN0 IHVuc2lnbmVkIGxvbmcgZW50cnkgPSBpcHZyX2dlbV9vYmpfbW11X29mZnNldChvYmopOworCisJ aWYgKElQVlJfSVNfRVJSKGVudHJ5KSkgeworCQlyZXR1cm4gSVBWUl9PRkZTRVRfRVJSKGVudHJ5 KTsKKwl9CisKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImVudHJ5IGlzIDB4JWx4LCBzaXplIGlzICV6 dSwgbmVudHMgaXMgJWQuXG4iLAorCQkJZW50cnksIG9iai0+YmFzZS5zaXplLCBvYmotPnNnX3Rh YmxlLT5uZW50cyk7CisKKwkvKiB0b2RvOiBpdCBpcyBiZXR0ZXIgYWxzbyBwYXNzIFJPLCBXTyBp bmZvICovCisJdHlwZSA9IChvYmotPmNhY2hlX2xldmVsID09IElQVlJfQ0FDSEVfV0IpID8KKwkJ CQkJCUlQVlJfTU1VX0NBQ0hFRF9NRU1PUlkgOiAwOworCisJLyogc2hvdWxkIG5vdCB1c2UgZGV2 X3ByaXYtPnBmX3BkICovCisJaWYgKGZha2VfYm9fZGVidWcpIHsKKwkJcmV0ID0gaXB2cl9tbXVf aW5zZXJ0X3BhZ2VzKGRldl9wcml2LT5tbXUtPmRlZmF1bHRfcGQsCisJCQlvYmotPmZha2VfcGFn ZXMsCisJCQllbnRyeSwgb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCwKKwkJCTAsCisJCQkw LCB0eXBlKTsKKwl9IGVsc2UgeworCQl1aW50MzJfdCBpID0gMDsKKwkJc3RydWN0IHBhZ2UgKipw YWdlczsKKwkJc3RydWN0IHNnX3BhZ2VfaXRlciBzZ19pdGVyOworCQlwYWdlcyA9IGRybV9tYWxs b2NfYWIob2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCwKKwkJCQlzaXplb2YoKnBhZ2VzKSk7 CisJCWlmIChwYWdlcyA9PSBOVUxMKSB7CisJCQlJUFZSX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IHNw YWNlIGZvciBwYWdlc1xuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlmb3JfZWFjaF9z Z19wYWdlKG9iai0+c2dfdGFibGUtPnNnbCwgJnNnX2l0ZXIsCisJCQkJb2JqLT5zZ190YWJsZS0+ bmVudHMsIDApCisJCQlwYWdlc1tpKytdID0gc2dfcGFnZV9pdGVyX3BhZ2UoJnNnX2l0ZXIpOwor CQlyZXQgPSBpcHZyX21tdV9pbnNlcnRfcGFnZXMoZGV2X3ByaXYtPm1tdS0+ZGVmYXVsdF9wZCwK KwkJCXBhZ2VzLCBlbnRyeSwgb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCwKKwkJCTAsIDAs IHR5cGUpOworCQlpZiAocGFnZXMpCisJCQlkcm1fZnJlZV9sYXJnZShwYWdlcyk7CisJfQorCXJl dHVybiByZXQ7Cit9CisKK3VpbnQ2NF90IGlwdnJfZ2VtX21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1f aXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJaW50MzJfdCByZXQ7CisJcmV0ID0gZHJtX2dlbV9j cmVhdGVfbW1hcF9vZmZzZXQoJm9iai0+YmFzZSk7CisKKwlpZiAocmV0KSB7CisJCUlQVlJfRVJS T1IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtbWFwIG9mZnNldDogJWRcbiIsIHJldCk7CisJCXJldHVy biAwOworCX0KKworCXJldHVybiBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm9iai0+YmFzZS52 bWFfbm9kZSk7Cit9CisKK2ludDMyX3QgaXB2cl9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJdWludDY0X3Qgc2l6ZSwgdWlu dDMyX3QgdGlsaW5nLCB1aW50MzJfdCBjYWNoZV9sZXZlbCwKKwkJCXVpbnQ2NF90ICpyc2l6ZV9w LCB1aW50MzJfdCAqaGFuZGxlX3AsCisJCQl1aW50NjRfdCAqb2Zmc2V0X3AsIHVpbnQ2NF90ICpt YXBfaGFuZGxlX3ApCit7CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iajsKKwlpbnQz Ml90IHJldDsKKwl1aW50MzJfdCBoYW5kbGU7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImNyZWF0ZSBi byBzaXplIGlzICVsbGQsIHRpbGluZyBpcyAlZCwgIgorCQkJImNhY2hlIGxldmVsIGlzICVkLlxu IiwKKwkJCXNpemUsIHRpbGluZywgY2FjaGVfbGV2ZWwpOworCisJc2l6ZSA9IHJvdW5kdXAoc2l6 ZSwgUEFHRV9TSVpFKTsKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqcnNp emVfcCA9IHNpemU7CisKKwkvKiBBbGxvY2F0ZSB0aGUgbmV3IG9iamVjdCAqLworCW9iaiA9IGlw dnJfZ2VtX2FsbG9jX29iamVjdChkZXYsIHNpemUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0 dXJuIC1FTk9NRU07CisJb2JqLT5kcnZfbmFtZSA9ICJpcHZyIjsKKwlvYmotPmZlbmNlID0gTlVM TDsKKwlvYmotPnRpbGluZyA9IHRpbGluZzsKKwlvYmotPmNhY2hlX2xldmVsID0gY2FjaGVfbGV2 ZWw7CisJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgJm9iai0+YmFzZSwg JmhhbmRsZSk7CisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xk cyBpdCBub3cgKi8KKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5i YXNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCSpoYW5kbGVfcCA9IGhhbmRsZTsKKwor CS8qIGZvcmNlIHRvIGdldCBwYWdlcyBhdCBhbGxvY2F0aW9uIHN0YWdlICovCisJcmV0ID0gaXB2 cl9nZW1fb2JqZWN0X2JpbmRfdG9fdm0ob2JqLCAmZGV2X3ByaXYtPmFkZHJfc3BhY2UsIDQwOTYp OworCWlmIChyZXQpIHsKKwkJSVBWUl9FUlJPUigiZmFpbGVkIHRvIGNhbGwgaXB2cl9nZW1fb2Jq ZWN0X2JpbmRfdG9fdm06ICVkLlxuIiwgcmV0KTsKKwkJaXB2cl9nZW1fZnJlZV9vYmplY3QoJm9i ai0+YmFzZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gaXB2cl9nZW1fbW11X2JpbmRf b2JqZWN0KG9iaik7CisJaWYgKHJldCkgeworCQlJUFZSX0VSUk9SKCJmYWlsZWQgdG8gY2FsbCBp cHZyX2dlbV9tbXVfYmluZF9vYmplY3Q6ICVkLlxuIiwgcmV0KTsKKwkJaXB2cl9nZW1fZnJlZV9v YmplY3QoJm9iai0+YmFzZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJKm9mZnNldF9wID0gaXB2 cl9nZW1fb2JqX21tdV9vZmZzZXQob2JqKTsKKwlpZiAoSVBWUl9JU19FUlIoKm9mZnNldF9wKSkK KwkJcmV0dXJuIElQVlJfT0ZGU0VUX0VSUigqb2Zmc2V0X3ApOworCisJLyogTWFrZSBpdCBtbWFw YWJsZSAqLworCSptYXBfaGFuZGxlX3AgPSBpcHZyX2dlbV9tbWFwX29mZnNldChvYmopOworCisJ SVBWUl9ERUJVR19HRU5FUkFMKCJibyBjcmVhdGUgZG9uZSwgZ3B1IG9mZnNldDogMHglbGx4Llxu IiwgKm9mZnNldF9wKTsKKworCXRyYWNlX2lwdnJfZ2VtX2NyZWF0ZShvYmosICpvZmZzZXRfcCk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKgoraXB2cl9n ZW1fb2JqX2NyZWF0ZV9hbmRfYmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6 ZSkKK3sKKwl1aW50MzJfdCByZXQ7CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iajsK KwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwor CisJc2l6ZSA9IHJvdW5kdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKwlpZiAoc2l6ZSA9PSAwKSB7CisJ CUlQVlJfRVJST1IoIlBhc3NlZCBzaXplIGlzIDAsIG5vdCBjb3JyZWN0LlxuIik7CisJCXJldHVy biBOVUxMOworCX0KKworCS8qIEFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0ICovCisJb2JqID0gaXB2 cl9nZW1fYWxsb2Nfb2JqZWN0KGRldiwgc2l6ZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCUlQ VlJfRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBpcHZyIG9iamVjdC5cbiIpOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwlyZXQgPSBpcHZyX2dlbV9vYmplY3RfYmluZF90b192bShvYmosICZkZXZf cHJpdi0+YWRkcl9zcGFjZSwgNDA5Nik7CisJaWYgKHJldCkgeworCQlJUFZSX0VSUk9SKCJGYWls ZWQgdG8gYmluZCBvYmogdG8gdm0uXG4iKTsKKwkJaXB2cl9nZW1fZnJlZV9vYmplY3QoJm9iai0+ YmFzZSk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXQgPSBpcHZyX2dlbV9tbXVfYmluZF9vYmpl Y3Qob2JqKTsKKwlpZiAocmV0KSB7CisJCUlQVlJfRVJST1IoIkZhaWxlZCB0byBiaW5kIG9iaiB0 byBtbXUuXG4iKTsKKwkJaXB2cl9nZW1fZnJlZV9vYmplY3QoJm9iai0+YmFzZSk7CisJCXJldHVy biBOVUxMOworCX0KKworCXJldHVybiBvYmo7Cit9CisKK3N0cnVjdCBpcHZyX3ZtYSAqaXB2cl9n ZW1fb2JqX3RvX3ZtYShzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqLAorCQkJCQlzdHJ1 Y3QgaXB2cl9hZGRyZXNzX3NwYWNlICp2bSkKK3sKKwlzdHJ1Y3QgaXB2cl92bWEgKnZtYTsKKwls aXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm9iai0+dm1hX2xpc3QsIHZtYV9saW5rKQorCQlpZiAo dm1hLT52bSA9PSB2bSkKKwkJCXJldHVybiB2bWE7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3Ry dWN0IGlwdnJfdm1hICppcHZyX2dlbV92bWFfY3JlYXRlKHN0cnVjdCBkcm1faXB2cl9nZW1fb2Jq ZWN0ICpvYmosCisJCQkJCXN0cnVjdCBpcHZyX2FkZHJlc3Nfc3BhY2UgKnZtKQoreworCXN0cnVj dCBpcHZyX3ZtYSAqdm1hID0ga3phbGxvYyhzaXplb2YoKnZtYSksIEdGUF9LRVJORUwpOworCWlm ICh2bWEgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlJTklUX0xJU1Rf SEVBRCgmdm1hLT52bWFfbGluayk7CisJSU5JVF9MSVNUX0hFQUQoJnZtYS0+bW1fbGlzdCk7CisJ dm1hLT52bSA9IHZtOworCXZtYS0+b2JqID0gb2JqOworCisJbGlzdF9hZGRfdGFpbCgmdm1hLT52 bWFfbGluaywgJm9iai0+dm1hX2xpc3QpOworCisJcmV0dXJuIHZtYTsKK30KKworc3RhdGljIHZv aWQgaXB2cl9nZW1fdm1hX2Rlc3Ryb3koc3RydWN0IGlwdnJfdm1hICp2bWEpCit7CisJV0FSTl9P Tih2bWEtPm5vZGUuYWxsb2NhdGVkKTsKKwlsaXN0X2RlbCgmdm1hLT52bWFfbGluayk7CisJa2Zy ZWUodm1hKTsKK30KKworc3RydWN0IGlwdnJfdm1hICoKK2lwdnJfZ2VtX29ial9sb29rdXBfb3Jf Y3JlYXRlX3ZtYShzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqLAorCQkJCQkJc3RydWN0 IGlwdnJfYWRkcmVzc19zcGFjZSAqdm0pCit7CisJc3RydWN0IGlwdnJfdm1hICp2bWE7CisKKwl2 bWEgPSBpcHZyX2dlbV9vYmpfdG9fdm1hKG9iaiwgdm0pOworCWlmICghdm1hKQorCQl2bWEgPSBp cHZyX2dlbV92bWFfY3JlYXRlKG9iaiwgdm0pOworCisJcmV0dXJuIHZtYTsKK30KKwordm9pZCBp cHZyX2dlbV9vYmplY3RfcGluX3BhZ2VzKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmop Cit7CisJQlVHX09OKG9iai0+c2dfdGFibGUgPT0gTlVMTCk7CisJb2JqLT5wYWdlc19waW5fY291 bnQrKzsKK30KKwordm9pZCBpcHZyX2dlbV9vYmplY3RfdW5waW5fcGFnZXMoc3RydWN0IGRybV9p cHZyX2dlbV9vYmplY3QgKm9iaikKK3sKKwlCVUdfT04ob2JqLT5wYWdlc19waW5fY291bnQgPT0g MCk7CisJb2JqLT5wYWdlc19waW5fY291bnQtLTsKK30KKworc3RhdGljIGJvb2wgaXB2cl9nZW1f dmFsaWRfbW11X3NwYWNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZHJt X21tX25vZGUgKm1tdV9zcGFjZSwKKwkJCQkJCXVpbnQzMl90IGNhY2hlX2xldmVsKQoreworCXN0 cnVjdCBkcm1fbW1fbm9kZSAqb3RoZXI7CisKKwlpZiAoIWRybV9tbV9ub2RlX2FsbG9jYXRlZCht bXVfc3BhY2UpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChsaXN0X2VtcHR5KCZtbXVfc3BhY2Ut Pm5vZGVfbGlzdCkpCisJCXJldHVybiB0cnVlOworCisJb3RoZXIgPSBsaXN0X2VudHJ5KG1tdV9z cGFjZS0+bm9kZV9saXN0LnByZXYsCisJCQlzdHJ1Y3QgZHJtX21tX25vZGUsIG5vZGVfbGlzdCk7 CisJaWYgKG90aGVyLT5hbGxvY2F0ZWQgJiYgIW90aGVyLT5ob2xlX2ZvbGxvd3MgJiYKKwkJCQlv dGhlci0+Y29sb3IgIT0gY2FjaGVfbGV2ZWwpCisJCXJldHVybiBmYWxzZTsKKworCW90aGVyID0g bGlzdF9lbnRyeShtbXVfc3BhY2UtPm5vZGVfbGlzdC5uZXh0LAorCQkJc3RydWN0IGRybV9tbV9u b2RlLCBub2RlX2xpc3QpOworCWlmIChvdGhlci0+YWxsb2NhdGVkICYmICFtbXVfc3BhY2UtPmhv bGVfZm9sbG93cyAmJgorCQkJCW90aGVyLT5jb2xvciAhPSBjYWNoZV9sZXZlbCkKKwkJcmV0dXJu IGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogRmluZHMgZnJlZSBzcGFjZSBp biB0aGUgTU1VIGFwZXJ0dXJlIGFuZCBiaW5kcyB0aGUgb2JqZWN0IHRoZXJlLgorICovCitpbnQz Ml90IGlwdnJfZ2VtX29iamVjdF9iaW5kX3RvX3ZtKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0 ICpvYmosCisJCQkJCXN0cnVjdCBpcHZyX2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJCQl1aW50MzJf dCBhbGlnbm1lbnQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7 CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KwlzdHJ1Y3QgaXB2cl92bWEgKnZtYTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHNpemU7 CisJaW50MzJfdCByZXQ7CisJc3RydWN0IGRybV9tbSAqbW07CisJaWYgKG9iai0+dGlsaW5nKSB7 CisJCW1tID0gJnZtLT50aWxpbmdfbW07CisJCXN0YXJ0ID0gdm0tPnRpbGluZ19zdGFydDsKKwkJ ZW5kID0gdm0tPnRpbGluZ19zdGFydCArIHZtLT50aWxpbmdfdG90YWw7CisJfSBlbHNlIHsKKwkJ bW0gPSAmdm0tPmxpbmVhcl9tbTsKKwkJc3RhcnQgPSB2bS0+bGluZWFyX3N0YXJ0OworCQllbmQg PSB2bS0+bGluZWFyX3N0YXJ0ICsgdm0tPmxpbmVhcl90b3RhbDsKKwl9CisJc2l6ZSA9IG9iai0+ YmFzZS5zaXplOworCisJcmV0ID0gaXB2cl9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOworCWlm IChyZXQpIHsKKwkJSVBWUl9FUlJPUigiZmFpbGVkIHRvIGNhbGwgaXB2cl9nZW1fb2JqZWN0X2dl dF9wYWdlcy5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlwdnJfZ2VtX29iamVjdF9waW5f cGFnZXMob2JqKTsKKworCXZtYSA9IGlwdnJfZ2VtX29ial9sb29rdXBfb3JfY3JlYXRlX3ZtYShv YmosIHZtKTsKKwlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJcmV0ID0gUFRSX0VSUih2bWEpOworCQlJ UFZSX0VSUk9SKCJmYWlsZWQgb24gaXB2cl9nZW1fb2JqX2xvb2t1cF9vcl9jcmVhdGVfdm1hLlxu Iik7CisJCWdvdG8gZXJyX3VucGluOworCX0KKworCS8qIEZvciBub3cgd2Ugb25seSBldmVyIHVz ZSAxIHZtYSBwZXIgb2JqZWN0ICovCisJQlVHX09OKCFsaXN0X2lzX3Npbmd1bGFyKCZvYmotPnZt YV9saXN0KSk7CisKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImNhbGwgZHJtX21tX2luc2VydF9ub2Rl X2luX3JhbmdlX2dlbmVyaWMuXG4iKTsKKwlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFu Z2VfZ2VuZXJpYyhtbSwgJnZtYS0+bm9kZSwgc2l6ZSwKKwkJCQkJCWFsaWdubWVudCwgb2JqLT5j YWNoZV9sZXZlbCwKKwkJCQkJCXN0YXJ0LCBlbmQsCisJCQkJCQlEUk1fTU1fU0VBUkNIX0RFRkFV TFQsCisJCQkJCQlEUk1fTU1fQ1JFQVRFX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJLyoKKwkJ ICogaXB2ciBkb2Vzbid0IHN1cHBvcnQgc2hyaW5rIHNvIGZhciBzaW5jZSBpdCBoYXMgNEdpQiBh ZGRyIHNwYWNlCisJCSAqLworCQlJUFZSX0VSUk9SKCJmYWlsZWQgb24gZHJtX21tX2luc2VydF9u b2RlX2luX3JhbmdlX2dlbmVyaWMuXG4iKTsKKwkJZ290byBlcnJfZnJlZV92bWE7CisJfQorCisJ aWYgKHVubGlrZWx5KCFpcHZyX2dlbV92YWxpZF9tbXVfc3BhY2UoZGV2LCAmdm1hLT5ub2RlLAor CQkJCQlvYmotPmNhY2hlX2xldmVsKSkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJSVBWUl9FUlJP UigiZmFpbGVkIG9uIGlwdnJfZ2VtX3ZhbGlkX21tdV9zcGFjZS5cbiIpOworCQlnb3RvIGVycl9y ZW1vdmVfbm9kZTsKKwl9CisKKwlsaXN0X21vdmVfdGFpbCgmb2JqLT5nbG9iYWxfbGlzdCwgJmRl dl9wcml2LT5pcHZyX21tLmJvdW5kX2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJnZtYS0+bW1fbGlz dCwgJnZtLT5pbmFjdGl2ZV9saXN0KTsKKworCS8qIGlwdnJfZ2VtX3ZlcmlmeV9ndHQgY2FuIGJl IGFkZGVkIGhlcmUgZm9yIGRlYnVnICovCisJcmV0dXJuIDA7CisKK2Vycl9yZW1vdmVfbm9kZToK Kwlkcm1fbW1fcmVtb3ZlX25vZGUoJnZtYS0+bm9kZSk7CitlcnJfZnJlZV92bWE6CisJaXB2cl9n ZW1fdm1hX2Rlc3Ryb3kodm1hKTsKK2Vycl91bnBpbjoKKwlpcHZyX2dlbV9vYmplY3RfdW5waW5f cGFnZXMob2JqKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkICppcHZyX2dlbV9vYmplY3Rfdm1h cChzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCWludDMyX3QgaTsKKwl2b2lk ICphZGRyID0gTlVMTDsKKwlzdHJ1Y3Qgc2dfcGFnZV9pdGVyIHNnX2l0ZXI7CisJc3RydWN0IHBh Z2UgKipwYWdlczsKKworCWlmIChmYWtlX2JvX2RlYnVnKSB7CisJCWFkZHIgPSB2bWFwKG9iai0+ ZmFrZV9wYWdlcywgb2JqLT5iYXNlLnNpemUgLyA0MDk2LAorCQkJVk1fTUFQLCBwZ3Byb3Rfd3Jp dGVjb21iaW5lKFBBR0VfS0VSTkVMKSk7CisJCWlmIChhZGRyID09IE5VTEwpIHsKKwkJCUlQVlJf RVJST1IoIkZhaWxlZCB0byB2bWFwIHBhZ2VzXG4iKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOworCQl9CisJCXJldHVybiBhZGRyOworCX0KKworCXBhZ2VzID0gZHJtX21hbGxvY19hYihv YmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZULCBzaXplb2YoKnBhZ2VzKSk7CisJaWYgKHBhZ2Vz ID09IE5VTEwpIHsKKwkJSVBWUl9FUlJPUigiRmFpbGVkIHRvIGdldCBzcGFjZSBmb3IgcGFnZXNc biIpOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwlpID0gMDsKKwlmb3JfZWFjaF9zZ19wYWdlKG9i ai0+c2dfdGFibGUtPnNnbCwgJnNnX2l0ZXIsCisJCQlvYmotPnNnX3RhYmxlLT5uZW50cywgMCkg eworCQlwYWdlc1tpXSA9IHNnX3BhZ2VfaXRlcl9wYWdlKCZzZ19pdGVyKTsKKwkJaSsrOworCX0K KworCWFkZHIgPSB2bWFwKHBhZ2VzLCBpLCBWTV9NQVAsIHBncHJvdF93cml0ZWNvbWJpbmUoUEFH RV9LRVJORUwpKTsKKwlpZiAoYWRkciA9PSBOVUxMKSB7CisJCUlQVlJfRVJST1IoIkZhaWxlZCB0 byB2bWFwIHBhZ2VzXG4iKTsKKwkJZ290byBmaW5pc2g7CisJfQorCitmaW5pc2g6CisJaWYgKHBh Z2VzKQorCQlkcm1fZnJlZV9sYXJnZShwYWdlcyk7CisJcmV0dXJuIGFkZHI7Cit9CisKK2ludDMy X3QgaXB2cl9nZW1fb2JqZWN0X2ZpbmlzaF9ncHUoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3Qg Km9iaikKK3sKKwlpbnQzMl90IHJldCA9IDA7CisKKwlpZiAoKG9iai0+YmFzZS5yZWFkX2RvbWFp bnMgJiBJUFZSX0dFTV9ET01BSU5fR1BVKSA9PSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogRW5z dXJlIHRoYXQgd2UgaW52YWxpZGF0ZSB0aGUgR1BVJ3MgY2FjaGVzIGFuZCBUTEJzLiAqLworCW9i ai0+YmFzZS5yZWFkX2RvbWFpbnMgJj0gfklQVlJfR0VNX0RPTUFJTl9HUFU7CisJcmV0dXJuIHJl dDsKK30KKworLyoqCisgKiBpcHZyX2dlbV9yZWxlYXNlX21tYXAgLSByZW1vdmUgcGh5c2ljYWwg cGFnZSBtYXBwaW5ncworICogQG9iajogb2JqIGluIHF1ZXN0aW9uCisgKgorICogSWYgdGhlIG9i amVjdCBoYXMgYmVlbiBtb3ZlZCBvdXQgb2YgdGhlIGFwZXJ0dXJlLAorICogdGhlbiBwYWdlcyBt YXBwZWQgaW50byB1c2Vyc3BhY2UgbXVzdCBiZSByZXZva2VkLiBSZW1vdmluZyB0aGUKKyAqIG1h cHBpbmcgd2lsbCB0aGVuIHRyaWdnZXIgYSBwYWdlIGZhdWx0IG9uIHRoZSBuZXh0IHVzZXIgYWNj ZXNzLCBhbGxvd2luZworICogZml4dXAgYnkgaXB2cl9nZW1fZmF1bHQoKS4KKyAqLwordm9pZCBp cHZyX2dlbV9yZWxlYXNlX21tYXAoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaikKK3sK KwkvKiB0b2RvOgorCSAqIHdpbGwgbm90IGNhbGwgZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQs CisJICogaXB2ciBkb250JyBuZWVkIHVzZSBtbWFwIGZvciBkZXYgbWFwCisJICovCisJZHJtX3Zt YV9ub2RlX3VubWFwKCZvYmotPmJhc2Uudm1hX25vZGUsCisJCQkgICBvYmotPmJhc2UuZGV2LT5h bm9uX2lub2RlLT5pX21hcHBpbmcpOworCisJLyogdG9kbzoKKwkgKiBpdCBzZWVtcyBpdCBuZWVk IGNhdXNlIGtlcm5lbCBwYW5pYywgZGlzYWJsZSB2bV9tdW5tYXAgYXMgd29ya2Fyb3VuZAorCSAq LworCWlmIChvYmotPm1tYXBfYmFzZSkgeworCQlJUFZSX0RFQlVHX0dFTkVSQUwoImNhbGwgdm1f bXVubWFwIHRvIHVubWFwIGJvLCBiYXNlIGlzIDB4JWx4LlxuIiwKKwkJCQlvYmotPm1tYXBfYmFz ZSk7CisJCW9iai0+bW1hcF9iYXNlID0gMDsKKwl9Cit9CisKK2ludDMyX3QgaXB2cl9nZW1fb2Jq ZWN0X3ZtYV91bmJpbmQoc3RydWN0IGlwdnJfdm1hICp2bWEpCit7CisJc3RydWN0IGRybV9pcHZy X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+b2JqOworCWRybV9pcHZyX3ByaXZhdGVfdCAqZGV2X3By aXYgPSBvYmotPmJhc2UuZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGVudHJ5Owor CWludDMyX3QgcmV0OworCisJaWYgKGxpc3RfZW1wdHkoJnZtYS0+dm1hX2xpbmspKQorCQlyZXR1 cm4gMDsKKworCWlmICghZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUpKQorCQlnb3Rv IGRlc3Ryb3k7CisKKwlpZiAob2JqLT5waW5fY291bnQpCisJCXJldHVybiAtRUJVU1k7CisKKwlC VUdfT04ob2JqLT5zZ190YWJsZSA9PSBOVUxMKTsKKwllbnRyeSA9IGlwdnJfZ2VtX29ial9tbXVf b2Zmc2V0KG9iaik7CisJaWYgKElQVlJfSVNfRVJSKGVudHJ5KSkKKwkJcmV0dXJuIElQVlJfT0ZG U0VUX0VSUihlbnRyeSk7CisKKwlyZXQgPSBpcHZyX2dlbV9vYmplY3RfZmluaXNoX2dwdShvYmop OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBDb250aW51ZSBvbiBpZiB3ZSBmYWls IGR1ZSB0byBFSU8sIHRoZSBHUFUgaXMgaHVuZyBzbyB3ZQorCSAqIHNob3VsZCBiZSBzYWZlIGFu ZCB3ZSBuZWVkIHRvIGNsZWFudXAgb3IgZWxzZSB3ZSBtaWdodAorCSAqIGNhdXNlIG1lbW9yeSBj b3JydXB0aW9uIHRocm91Z2ggdXNlLWFmdGVyLWZyZWUuCisJICovCisJaXB2cl9nZW1fcmVsZWFz ZV9tbWFwKG9iaik7CisKKwkvKiByZW1vdmUgdGhlIGJvIGZyb20gdGhlIG1tdSAqLworCWlwdnJf bW11X3JlbW92ZV9wYWdlcyhkZXZfcHJpdi0+bW11LT5kZWZhdWx0X3BkLCBlbnRyeSwKKwkJCW9i ai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQsIDAsIDApOworCisJaXB2cl9nZW1fb2JqZWN0X3Vu cGluX3BhZ2VzKG9iaik7CisKKwlsaXN0X2RlbCgmdm1hLT5tbV9saXN0KTsKKworCWRybV9tbV9y ZW1vdmVfbm9kZSgmdm1hLT5ub2RlKTsKKworZGVzdHJveToKKwlpcHZyX2dlbV92bWFfZGVzdHJv eSh2bWEpOworCisJLyogU2luY2UgdGhlIHVuYm91bmQgbGlzdCBpcyBnbG9iYWwsIG9ubHkgbW92 ZSB0byB0aGF0IGxpc3QgaWYKKwkgKiBubyBtb3JlIFZNQXMgZXhpc3QuCisJICogTkI6IFVudGls IHdlIGhhdmUgcmVhbCBWTUFzIHRoZXJlIHdpbGwgb25seSBldmVyIGJlIG9uZSAqLworCVdBUk5f T04oIWxpc3RfZW1wdHkoJm9iai0+dm1hX2xpc3QpKTsKKwlpZiAobGlzdF9lbXB0eSgmb2JqLT52 bWFfbGlzdCkpCisJCWxpc3RfbW92ZV90YWlsKCZvYmotPmdsb2JhbF9saXN0LAorCQkJJmRldl9w cml2LT5pcHZyX21tLnVuYm91bmRfbGlzdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgaXB2cl9nZW1fb2JqZWN0X2ZyZWVfbW1hcF9vZmZzZXQoc3RydWN0IGRybV9pcHZyX2dlbV9v YmplY3QgKm9iaikKK3sKKwlkcm1fZ2VtX2ZyZWVfbW1hcF9vZmZzZXQoJm9iai0+YmFzZSk7Cit9 CisKKy8qKgorICogQ2FsbGVkIGFmdGVyIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0 IGhhcyBiZWVuIGxvc3QuCisgKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHN0cnVjdF8gbXV0ZXgK KyAqCisgKiBGcmVlcyB0aGUgb2JqZWN0CisgKi8KK3N0YXRpYyB2b2lkIGlwdnJfX2dlbV9mcmVl X29iamVjdChzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdl bV9vYmogPSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICopa3JlZjsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gZ2VtX29iai0+ZGV2OworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmog PSB0b19pcHZyX2JvKGdlbV9vYmopOworCWRybV9pcHZyX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpcHZyX3ZtYSAqdm1hLCAqbmV4dDsKKwlpbnQzMl90 IHJldDsKKworCS8vIEZJWE1FOiBjb25zaWRlciB1bmxvY2tlZCBjYXNlCisJV0FSTl9PTighbXV0 ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOworCisJZHJtX2dlbV9mcmVlX21tYXBf b2Zmc2V0KGdlbV9vYmopOworCisJaWYgKG9iai0+ZmVuY2UpIHsKKwkJcmV0ID0gaXB2cl9mZW5j ZV93YWl0KG9iai0+ZmVuY2UsIHRydWUsIGZhbHNlKTsKKwkJaWYgKHJldCkKKwkJCUlQVlJfREVC VUdfV0FSTigiRmFpbGVkIHRvIHdhaXQgZmVuY2Ugc2lnbmFsZWQuXG4iKTsKKwl9CisKKwlvYmot PnBpbl9jb3VudCA9IDA7CisJLyogTkI6IDAgb3IgMSBlbGVtZW50cyAqLworCVdBUk5fT04oIWxp c3RfZW1wdHkoJm9iai0+dm1hX2xpc3QpICYmCisJCSFsaXN0X2lzX3Npbmd1bGFyKCZvYmotPnZt YV9saXN0KSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgbmV4dCwgJm9iai0+dm1h X2xpc3QsIHZtYV9saW5rKSB7CisJCWludCByZXQgPSBpcHZyX2dlbV9vYmplY3Rfdm1hX3VuYmlu ZCh2bWEpOworCQlpZiAoV0FSTl9PTihyZXQgPT0gLUVSRVNUQVJUU1lTKSkgeworCQkJYm9vbCB3 YXNfaW50ZXJydXB0aWJsZTsKKworCQkJd2FzX2ludGVycnVwdGlibGUgPSBkZXZfcHJpdi0+aXB2 cl9tbS5pbnRlcnJ1cHRpYmxlOworCQkJZGV2X3ByaXYtPmlwdnJfbW0uaW50ZXJydXB0aWJsZSA9 IGZhbHNlOworCisJCQlXQVJOX09OKGlwdnJfZ2VtX29iamVjdF92bWFfdW5iaW5kKHZtYSkpOwor CisJCQlkZXZfcHJpdi0+aXB2cl9tbS5pbnRlcnJ1cHRpYmxlID0gd2FzX2ludGVycnVwdGlibGU7 CisJCX0KKwl9CisKKwlpZiAoV0FSTl9PTihvYmotPnBhZ2VzX3Bpbl9jb3VudCkpCisJCW9iai0+ cGFnZXNfcGluX2NvdW50ID0gMDsKKwlpcHZyX2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7CisJ aXB2cl9nZW1fb2JqZWN0X2ZyZWVfbW1hcF9vZmZzZXQob2JqKTsKKworCUJVR19PTihvYmotPnNn X3RhYmxlKTsKKworCWlmIChvYmotPmJhc2UuaW1wb3J0X2F0dGFjaCkKKwkJZHJtX3ByaW1lX2dl bV9kZXN0cm95KCZvYmotPmJhc2UsIE5VTEwpOworCisJaWYgKG9iai0+b3BzLT5yZWxlYXNlKQor CQlvYmotPm9wcy0+cmVsZWFzZShvYmopOworCisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZSgmb2Jq LT5iYXNlKTsKKwlpcHZyX2dlbV9pbmZvX3JlbW92ZV9vYmooZGV2X3ByaXYsIG9iai0+YmFzZS5z aXplKTsKKworCXRyYWNlX2lwdnJfX2dlbV9mcmVlX29iamVjdChvYmopOworCisJaXB2cl9nZW1f b2JqZWN0X2ZyZWUob2JqKTsKK30KKworLyoKKyAqIFdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIHRv IGEgR0VNIG9iamVjdCBpcyByZWxlYXNlZCB0aGUgR0VNIGNvcmUgY2FsbHMgdGhlCisgKiBkcm1f ZHJpdmVyIC5nZW1fZnJlZV9vYmplY3QoKSBvcGVyYXRpb24uIFRoYXQgb3BlcmF0aW9uIGlzIG1h bmRhdG9yeSBmb3IKKyAqIEdFTS1lbmFibGVkIGRyaXZlcnMgYW5kIG11c3QgZnJlZSB0aGUgR0VN IG9iamVjdCBhbmQgYWxsIGFzc29jaWF0ZWQKKyAqIHJlc291cmNlcy4KKyovCit2b2lkIGlwdnJf Z2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaikKK3sKKwlpcHZy X19nZW1fZnJlZV9vYmplY3QoKHN0cnVjdCBrcmVmICopZ2VtX29iaik7Cit9CisKK3N0YXRpYyBz dHJ1Y3QKK2lwdnJfZ2VtX3VzZXJwdHJfb2JqZWN0ICp0b191c2VycHRyX29iamVjdChzdHJ1Y3Qg ZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCXJldHVybiBjb250YWluZXJfb2Yob2JqLCBz dHJ1Y3QgaXB2cl9nZW1fdXNlcnB0cl9vYmplY3QsIGdlbSk7Cit9CisKK3N0YXRpYyBpbnQzMl90 IGlwdnJfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3NnKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0 ICpvYmopIHsKKwlzdHJ1Y3QgaXB2cl9nZW1fdXNlcnB0cl9vYmplY3QgKnZtYXAgPSB0b191c2Vy cHRyX29iamVjdChvYmopOworCWludDMyX3QgbnVtX3BhZ2VzID0gb2JqLT5iYXNlLnNpemUgPj4g UEFHRV9TSElGVDsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnN0OworCXN0cnVjdCBzY2F0dGVybGlzdCAq c2c7CisJc3RydWN0IHBhZ2UgKipwdmVjOworCWludDMyX3QgbiwgcGlubmVkLCByZXQ7CisKKwlp ZiAoIWFjY2Vzc19vayh2bWFwLT5yZWFkX29ubHkgPyBWRVJJRllfUkVBRCA6IFZFUklGWV9XUklU RSwKKwkJICAgICAgIChjaGFyIF9fdXNlciAqKXZtYXAtPnVzZXJfcHRyLCB2bWFwLT51c2VyX3Np emUpKSB7CisJCUlQVlJfRVJST1IoImFjY2Vzc19vayBjaGVjayBmYWlsZWQuXG4iKTsKKwkJcmV0 dXJuIC1FRkFVTFQ7CisJfQorCisJLyogSWYgdXNlcnNwYWNlIHNob3VsZCBlbmdpbmVlciB0aGF0 IHRoZXNlIHBhZ2VzIGFyZSByZXBsYWNlZCBpbgorCSAqIHRoZSB2bWEgYmV0d2VlbiB1cyBiaW5k aW5nIHRoaXMgcGFnZSBpbnRvIHRoZSBHVFQgYW5kIGNvbXBsZXRpb24KKwkgKiBvZiByZW5kZXJp bmcuLi4gVGhlaXIgbG9zcy4gSWYgdGhleSBjaGFuZ2UgdGhlIG1hcHBpbmcgb2YgdGhlaXIKKwkg KiBwYWdlcyB0aGV5IG5lZWQgdG8gY3JlYXRlIGEgbmV3IGJvIHRvIHBvaW50IHRvIHRoZSBuZXcg dm1hLgorCSAqCisJICogSG93ZXZlciwgdGhhdCBzdGlsbCBsZWF2ZXMgb3BlbiB0aGUgcG9zc2li aWxpdHkgb2YgdGhlIHZtYQorCSAqIGJlaW5nIGNvcGllZCB1cG9uIGZvcmsuIFdoaWNoIGZhbGxz IHVuZGVyIHRoZSBzYW1lIHVzZXJzcGFjZQorCSAqIHN5bmNocm9uaXNhdGlvbiBpc3N1ZSBhcyBh IHJlZ3VsYXIgYm8sIGV4Y2VwdCB0aGF0IHRoaXMgdGltZQorCSAqIHRoZSBwcm9jZXNzIG1heSBu b3QgYmUgZXhwZWN0aW5nIHRoYXQgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mCisJICogbWVtb3J5IGlz IHRpZWQgdG8gdGhlIEdQVS4KKwkgKgorCSAqIEZvcnR1bmF0ZWx5LCB3ZSBjYW4gaG9vayBpbnRv IHRoZSBtbXVfbm90aWZpZXIgaW4gb3JkZXIgdG8KKwkgKiBkaXNjYXJkIHRoZSBwYWdlIHJlZmVy ZW5jZXMgcHJpb3IgdG8gYW55dGhpbmcgbmFzdHkgaGFwcGVuaW5nCisJICogdG8gdGhlIHZtYSAo ZGlzY2FyZCBvciBjbG9uaW5nKSB3aGljaCBzaG91bGQgcHJldmVudCB0aGUgbW9yZQorCSAqIGVn cmVnaW91cyBjYXNlcyBmcm9tIGNhdXNpbmcgaGFybS4KKwkgKi8KKworCXB2ZWMgPSBrbWFsbG9j KG51bV9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKKwkJICAgICAgIEdGUF9LRVJORUwg fCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9OT1JFVFJZKTsKKwlpZiAocHZlYyA9PSBOVUxMKSB7CisJ CXB2ZWMgPSBkcm1fbWFsbG9jX2FiKG51bV9wYWdlcywgc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsK KwkJaWYgKHB2ZWMgPT0gTlVMTCkgeworCQkJSVBWUl9FUlJPUigicHZlYyBhbGxvYyBmYWlsdXJl XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJcGlubmVkID0gX19nZXRfdXNl cl9wYWdlc19mYXN0KHZtYXAtPnVzZXJfcHRyLCBudW1fcGFnZXMsCisJCQkJIXZtYXAtPnJlYWRf b25seSwgcHZlYyk7CisJaWYgKHBpbm5lZCA8IG51bV9wYWdlcykgeworCQlzdHJ1Y3QgbW1fc3Ry dWN0ICptbSA9IGN1cnJlbnQtPm1tOworCQlyZXQgPSAwOworCQlkb3duX3JlYWQoJm1tLT5tbWFw X3NlbSk7CisJCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLAorCQkJCXZtYXAtPnVz ZXJfcHRyICsgKHBpbm5lZCA8PCBQQUdFX1NISUZUKSwKKwkJCQludW1fcGFnZXMgLSBwaW5uZWQs CisJCQkJIXZtYXAtPnJlYWRfb25seSwgMCwKKwkJCQlwdmVjICsgcGlubmVkLAorCQkJCU5VTEwp OworCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlpZiAocmV0ID4gMCkKKwkJCXBpbm5lZCAr PSByZXQ7CisKKwkJaWYgKG9iai0+c2dfdGFibGUgfHwgcGlubmVkIDwgbnVtX3BhZ2VzKSB7CisJ CQlyZXQgPSBvYmotPnNnX3RhYmxlID8gMCA6IC1FRkFVTFQ7CisJCQlJUFZSX0VSUk9SKCJvYmot PnNnX3RhYmxlIGlzIE5VTExcbiIpOworCQkJZ290byBjbGVhbnVwX3Bpbm5lZDsKKwkJfQorCX0K KworCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0ID09IE5V TEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBjbGVhbnVwX3Bpbm5lZDsKKwl9CisKKwlp ZiAoc2dfYWxsb2NfdGFibGUoc3QsIG51bV9wYWdlcywgR0ZQX0tFUk5FTCkpIHsKKwkJcmV0ID0g LUVOT01FTTsKKwkJZ290byBjbGVhbnVwX3N0OworCX0KKworCWZvcl9lYWNoX3NnKHN0LT5zZ2ws IHNnLCBudW1fcGFnZXMsIG4pCisJCXNnX3NldF9wYWdlKHNnLCBwdmVjW25dLCBQQUdFX1NJWkUs IDApOworCWRybV9mcmVlX2xhcmdlKHB2ZWMpOworCisJb2JqLT5zZ190YWJsZSA9IHN0OworCXJl dHVybiAwOworCitjbGVhbnVwX3N0OgorCWtmcmVlKHN0KTsKK2NsZWFudXBfcGlubmVkOgorCXJl bGVhc2VfcGFnZXMocHZlYywgcGlubmVkLCAwKTsKKwlkcm1fZnJlZV9sYXJnZShwdmVjKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpcHZyX2dlbV91c2VycHRyX3B1dF9wYWdlc19z ZyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKSB7CisJc3RydWN0IHNjYXR0ZXJsaXN0 ICpzZzsKKwlpbnQzMl90IGk7CisKKwlmb3JfZWFjaF9zZyhvYmotPnNnX3RhYmxlLT5zZ2wsIHNn LCBvYmotPnNnX3RhYmxlLT5uZW50cywgaSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3Bh Z2Uoc2cpOworCisJCWlmIChvYmotPmRpcnR5KQorCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisK KwkJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7 CisJfQorCW9iai0+ZGlydHkgPSAwOworCisJc2dfZnJlZV90YWJsZShvYmotPnNnX3RhYmxlKTsK KwlrZnJlZShvYmotPnNnX3RhYmxlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faXB2 cl9nZW1fb2JqZWN0X29wcyBpcHZyX2dlbV91c2VycHRyX29wcyA9IHsKKwkuZ2V0X3BhZ2VzID0g aXB2cl9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2csCisJLnB1dF9wYWdlcyA9IGlwdnJfZ2VtX3Vz ZXJwdHJfcHV0X3BhZ2VzX3NnLAorfTsKKworaW50MzJfdCBpcHZyX2dlbV91c2VycHRyKHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJdWludDY0 X3QgdXNlcl9wdHIsIHVpbnQ2NF90IHVzZXJfc2l6ZSwKKwkJCXVpbnQzMl90IGNhY2hlX2xldmVs LCB1aW50MzJfdCB0aWxpbmcsIHVpbnQzMl90ICpoYW5kbGVfcCwKKwkJCXVpbnQ2NF90ICpvZmZz ZXRfcCkKK3sKKwlzdHJ1Y3QgaXB2cl9nZW1fdXNlcnB0cl9vYmplY3QgKm9iajsKKwlpbnQzMl90 IHJldCA9IDA7CisJdWludDMyX3QgaGFuZGxlLCBudW1fcGFnZXM7CisJbG9mZl90IGZpcnN0X2Rh dGFfcGFnZSwgbGFzdF9kYXRhX3BhZ2U7CisKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCUlQVlJfREVCVUdfR0VORVJBTCgiY3JlYXRlIHVz ZXIgYm8gdXNlcnB0ciBpcyAlbGx4LCBzaXplIGlzICVsbGQsICIKKwkJCSJjYWNoZSBsZXZlbCBp cyAlZC5cbiIsCisJCQl1c2VyX3B0ciwgdXNlcl9zaXplLCBjYWNoZV9sZXZlbCk7CisKKwlmaXJz dF9kYXRhX3BhZ2UgPSB1c2VyX3B0ciAvIFBBR0VfU0laRTsKKwlsYXN0X2RhdGFfcGFnZSA9ICh1 c2VyX3B0ciArIHVzZXJfc2l6ZSAtIDEpIC8gUEFHRV9TSVpFOworCW51bV9wYWdlcyA9IGxhc3Rf ZGF0YV9wYWdlIC0gZmlyc3RfZGF0YV9wYWdlICsgMTsKKworCS8qIG9ubHkgc3VwcG9ydCBwYWdl IGFsaWduZWQgYnVmZmVyIGZvciBub3cgKi8KKwlpZiAob2Zmc2V0X2luX3BhZ2UodXNlcl9wdHIp ICE9IDAgfHwgKHVzZXJfc2l6ZSAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwkvKiBBbGxvY2F0ZSB0aGUgbmV3IG9iamVjdCAqLworCW9iaiA9IGlwdnJfZ2Vt X29iamVjdF9hbGxvYyhkZXYpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07 CisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKCpvYmopKTsKKworCWRybV9nZW1fcHJpdmF0ZV9vYmpl Y3RfaW5pdChkZXYsICZvYmotPmdlbS5iYXNlLAorCQkJCQludW1fcGFnZXMgKiBQQUdFX1NJWkUp OworCisJaXB2cl9nZW1fb2JqZWN0X2luaXQoJm9iai0+Z2VtLCAmaXB2cl9nZW1fdXNlcnB0cl9v cHMpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmb2JqLT5nZW0uZXZlbnRfcXVldWUpOworCWF0 b21pY19zZXQoJm9iai0+Z2VtLmNwdV93cml0ZXJzLCAwKTsKKworCW9iai0+Z2VtLmRydl9uYW1l ID0gImlwdnIiOworCW9iai0+Z2VtLmZlbmNlID0gTlVMTDsKKwlvYmotPmdlbS5jYWNoZV9sZXZl bCA9IGNhY2hlX2xldmVsOworCW9iai0+Z2VtLnRpbGluZyA9IHRpbGluZzsKKworCW9iai0+dXNl cl9wdHIgPSB1c2VyX3B0cjsKKwlvYmotPnVzZXJfc2l6ZSA9IHVzZXJfc2l6ZTsKKworCXJldCA9 IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZvYmotPmdlbS5iYXNlLCAmaGFuZGxl KTsKKwkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0IG5v dyAqLworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZvYmotPmdlbS5iYXNl KTsKKwlpZiAocmV0KSB7CisJCUlQVlJfRVJST1IoImZhaWxlZCBkcm1fZ2VtX2hhbmRsZV9jcmVh dGUgZm9yIG9iaiAweCVseFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKW9iaik7CisJCWdvdG8gZXJy OworCX0KKworCSpoYW5kbGVfcCA9IGhhbmRsZTsKKworCS8qIGZvcmNlIHRvIGdldCBwYWdlcyBh dCBhbGxvY2F0aW9uIHN0YWdlICovCisJcmV0ID0gaXB2cl9nZW1fb2JqZWN0X2JpbmRfdG9fdm0o Jm9iai0+Z2VtLAorCQkJCQkmZGV2X3ByaXYtPmFkZHJfc3BhY2UsIDQwOTYpOworCWlmIChyZXQp IHsKKwkJSVBWUl9FUlJPUigiZmFpbGVkIGlwdnJfZ2VtX29iamVjdF9iaW5kX3RvX3ZtIGZvciBv YmogMHglbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZylvYmopOworCQlnb3RvIGVycjsKKwl9CisK KwlyZXQgPSBpcHZyX2dlbV9tbXVfYmluZF9vYmplY3QoJm9iai0+Z2VtKTsKKwlpZiAocmV0KSB7 CisJCUlQVlJfRVJST1IoImZhaWxlZCBpcHZyX2dlbV9tbXVfYmluZF9vYmplY3QgZm9yIG9iaiAw eCVseFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKW9iaik7CisJCWdvdG8gZXJyOworCX0KKworCSpv ZmZzZXRfcCA9IGlwdnJfZ2VtX29ial9tbXVfb2Zmc2V0KCZvYmotPmdlbSkgKyBvZmZzZXRfaW5f cGFnZSh1c2VyX3B0cik7CisJaWYgKElQVlJfSVNfRVJSKCpvZmZzZXRfcCkpIHsKKwkJcmV0ID0g SVBWUl9PRkZTRVRfRVJSKCpvZmZzZXRfcCk7CisJCWdvdG8gZXJyOworCX0KKworCUlQVlJfREVC VUdfR0VORVJBTCgiYm8gY3JlYXRlIGRvbmUsIGdwdSBvZmZzZXQ6IDB4JWxseC5cbiIsICpvZmZz ZXRfcCk7CisKK2VycjoKKwlpZiAocmV0KQorCQlpcHZyX2dlbV9vYmplY3RfZnJlZSgmb2JqLT5n ZW0pOworCXJldHVybiByZXQ7Cit9CisKK2ludDMyX3QgaXB2cl9nZW1fZmF1bHQoc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCBkcm1f Z2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJdW5zaWduZWQgbG9u ZyBwZm47CisJcGdvZmZfdCBwZ29mZjsKKwlpbnQgcmV0OworCXN0cnVjdCBkcm1faXB2cl9nZW1f b2JqZWN0ICppcHZyX29iaiA9IHRvX2lwdnJfYm8ob2JqKTsKKworCXBhZ2VzID0gZHJtX21hbGxv Y19hYihvYmotPnNpemUgPj4gUEFHRV9TSElGVCwKKwkJCXNpemVvZigqcGFnZXMpKTsKKworCS8q IE1ha2Ugc3VyZSB3ZSBkb24ndCBwYXJhbGxlbCB1cGRhdGUgb24gYSBmYXVsdCwgbm9yIG1vdmUg b3IgcmVtb3ZlCisJICogc29tZXRoaW5nIGZyb20gYmVuZWF0aCBvdXIgZmVldAorCSAqLworCXJl dCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChy ZXQpCisJCWdvdG8gb3V0OworCisJaWYgKCFpcHZyX29iai0+c2dfdGFibGUpIHsKKwkJcmV0ID0g LUVOT0RBVEE7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlyZXQgPSBkcm1fcHJpbWVfc2df dG9fcGFnZV9hZGRyX2FycmF5cyhpcHZyX29iai0+c2dfdGFibGUsCisJCXBhZ2VzLCBOVUxMLCBv YmotPnNpemUgPj4gUEFHRV9TSElGVCk7CisJaWYgKHJldCkgeworCQlJUFZSX0VSUk9SKCJmYWls ZWQgdG8gY2FsbCBkcm1fcHJpbWVfc2dfdG9fcGFnZV9hZGRyX2FycmF5czogJWQuXG4iLCByZXQp OworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyogV2UgZG9uJ3QgdXNlIHZtZi0+cGdvZmYg c2luY2UgdGhhdCBoYXMgdGhlIGZha2Ugb2Zmc2V0OiAqLworCXBnb2ZmID0gKCh1bnNpZ25lZCBs b25nKXZtZi0+dmlydHVhbF9hZGRyZXNzIC0KKwkJCXZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJ RlQ7CisKKwlwZm4gPSBwYWdlX3RvX3BmbihwYWdlc1twZ29mZl0pOworCisJSVBWUl9ERUJVR19H RU5FUkFMKCJJbnNlcnRpbmcgJXAgcGZuICVseCwgcGEgJWx4Iiwgdm1mLT52aXJ0dWFsX2FkZHJl c3MsCisJCQlwZm4sIHBmbiA8PCBQQUdFX1NISUZUKTsKKworCXJldCA9IHZtX2luc2VydF9wZm4o dm1hLCAodW5zaWduZWQgbG9uZyl2bWYtPnZpcnR1YWxfYWRkcmVzcywgcGZuKTsKKworb3V0X3Vu bG9jazoKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK291dDoKKwlpZiAocGFn ZXMpCisJCWRybV9mcmVlX2xhcmdlKHBhZ2VzKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgLUVB R0FJTjoKKwljYXNlIDA6CisJY2FzZSAtRVJFU1RBUlRTWVM6CisJY2FzZSAtRUlOVFI6CisJY2Fz ZSAtRUJVU1k6CisJCS8qCisJCSAqIEVCVVNZIGlzIG9rOiB0aGlzIGp1c3QgbWVhbnMgdGhhdCBh bm90aGVyIHRocmVhZAorCQkgKiBhbHJlYWR5IGRpZCB0aGUgam9iLgorCQkgKi8KKwkJcmV0dXJu IFZNX0ZBVUxUX05PUEFHRTsKKwljYXNlIC1FTk9NRU06CisJCXJldHVybiBWTV9GQVVMVF9PT007 CisJZGVmYXVsdDoKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKwl9Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2lw dnIvaXB2cl9idWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDcz ZDEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9idWZmZXIu aApAQCAtMCwwICsxLDE4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpcHZyX2J1ZmZlci5o OiBJUFZSIGJ1ZmZlciBoYW5kbGluZyBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoYykg MjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRz IFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lv biAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAq IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwK KyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNv bT4KKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKKworI2lmbmRlZiBfSVBWUl9CVUZGRVJfSF8KKyNkZWZpbmUgX0lQVlJfQlVG RkVSX0hfCisKKyNpbmNsdWRlIDxkcm1QLmg+CisjaW5jbHVkZSA8ZHJtX2dlbS5oPgorI2luY2x1 ZGUgPGxpbnV4L3NobWVtX2ZzLmg+CisjaW5jbHVkZSAiaXB2cl9kcnYuaCIKKyNpbmNsdWRlICJp cHZyX2RybS5oIgorI2luY2x1ZGUgImlwdnJfZmVuY2UuaCIKKworc3RydWN0IGlwdnJfZmVuY2U7 CisKK3N0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0IHsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg YmFzZTsKKworCS8qIHVzZWQgdG8gZGlzaW5ndWlzaCBiZXR3ZWVuIGk5MTUgYW5kIGlwdnIgKi8K KwljaGFyICpkcnZfbmFtZTsKKworCWNvbnN0IHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0X29w cyAqb3BzOworCisJLyoqIExpc3Qgb2YgVk1BcyBiYWNrZWQgYnkgdGhpcyBvYmplY3QgKi8KKwlz dHJ1Y3QgbGlzdF9oZWFkIHZtYV9saXN0OworCisJLyogZm9yIGlwdnIgY2FzZSwgYnVmZmVyIGlz IGJvdW5kIGludG8gbW11LCB3aWxsIG5vdCBiZSB1bmJvdW5kICovCisJc3RydWN0IGxpc3RfaGVh ZCBnbG9iYWxfbGlzdDsKKworCS8qKgorCSAqIGlmIHRoaXMgYm8gaXMgYSB0aWxpbmcgYnVmZmVy CisJICogd2UgY2FuIHN1cHBvcnQgbXVsdGlwbGUgbW9kZSBvZiB0aWxpbmcsIHdoaWNoIGhhcyBk aWZmZXJlbnQgc3RyaWRlCisJICogYnV0IG9ubHkgb25lIHRpbGluZyBtb2RlIGNhbiBiZSBlbmFi bGVkLgorCSAqLworCWJvb2wgdGlsaW5nOworCisJZW51bSBpcHZyX2NhY2hlX2xldmVsIGNhY2hl X2xldmVsOworCisJLyoqCisJICogVGhpcyBpcyBzZXQgaWYgdGhlIG9iamVjdCBpcyBvbiB0aGUg YWN0aXZlIGxpc3RzIChoYXMgcGVuZGluZworCSAqIHJlbmRlcmluZyBhbmQgc28gYSBub24temVy byBzZXFubyksIGFuZCBpcyBub3Qgc2V0IGlmIGl0IGlzIG9uCisJICogaW5hY3RpdmUgKHJlYWR5 IHRvIGJlIHVuYm91bmQpIGxpc3QuCisJICovCisJdWludDMyX3QgYWN0aXZlOjE7CisKKwkvKioK KwkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gc2luY2Ug bGFzdCBib3VuZAorCSAqIHRvIHRoZSBHVFQKKwkgKi8KKwl1aW50MzJfdCBkaXJ0eToxOworCisJ dWludDMyX3QgcGluX2NvdW50OjU7CisjZGVmaW5lIERSTV9JUFZSX0dFTV9PQkpFQ1RfTUFYX1BJ Tl9DT1VOVCAweDFmCisKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNnX3RhYmxlOworCWludDMyX3QgcGFn ZXNfcGluX2NvdW50OworCisJLyoqIFVzZXIgc3BhY2UgcGluIGNvdW50IGFuZCBmaWxwIG93bmlu ZyB0aGUgcGluICovCisJdWludDMyX3QgdXNlcl9waW5fY291bnQ7CisJc3RydWN0IGRybV9maWxl ICpwaW5fZmlscDsKKworCXN0cnVjdCBpcHZyX2ZlbmNlICpmZW5jZTsKKwlhdG9taWNfdCByZXNl cnZlZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBldmVudF9xdWV1ZTsKKwlhdG9taWNfdCBjcHVfd3Jp dGVyczsKKworCXVuc2lnbmVkIGxvbmcgbW1hcF9iYXNlOworCXVpbnQ2NF90IG1tYXBfc2l6ZTsK KworCXN0cnVjdCBwYWdlICoqZmFrZV9wYWdlczsKK307CisKK3N0cnVjdCBpcHZyX2dlbV91c2Vy cHRyX29iamVjdCB7CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgZ2VtOworCXVpbnRwdHJf dCB1c2VyX3B0cjsKKwlzaXplX3QgdXNlcl9zaXplOworCWludDMyX3QgcmVhZF9vbmx5OworCXN0 cnVjdCBtbV9zdHJ1Y3QgKm1tOworI2lmIGRlZmluZWQoQ09ORklHX01NVV9OT1RJRklFUikKKwlz dHJ1Y3QgbW11X25vdGlmaWVyIG1uOworI2VuZGlmCit9OworCit1bmlvbiBkcm1faXB2cl9nZW1f b2JqZWN0cyB7CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgYmFzZTsKKwlzdHJ1Y3QgaXB2 cl9nZW1fdXNlcnB0cl9vYmplY3Qgdm1hcDsKK307CisKK3N0cnVjdCBkcm1faXB2cl9nZW1fb2Jq ZWN0X29wcyB7CisJLyoKKwkgKiBJbnRlcmZhY2UgYmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQg aXRzIGJhY2tpbmcgc3RvcmFnZS4KKwkgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBwcmlv ciB0byB0aGUgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIHNldAorCSAqIG9mIHBhZ2VzIGJlZm9yZSB0 byBiaW5kaW5nIHRoZW0gaW50byB0aGUgR1RULCBhbmQgcHV0X3BhZ2VzKCkgaXMKKwkgKiBjYWxs ZWQgYWZ0ZXIgd2Ugbm8gbG9uZ2VyIG5lZWQgdGhlbS4gQXMgd2UgZXhwZWN0IHRoZXJlIHRvIGJl CisJICogYXNzb2NpYXRlZCBjb3N0IHdpdGggbWlncmF0aW5nIHBhZ2VzIGJldHdlZW4gdGhlIGJh Y2tpbmcgc3RvcmFnZQorCSAqIGFuZCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgZm9yIHRoZSBHUFUg KGUuZy4gY2xmbHVzaCksIHdlIG1heSBob2xkCisJICogb250byB0aGUgcGFnZXMgYWZ0ZXIgdGhl eSBhcmUgbm8gbG9uZ2VyIHJlZmVyZW5jZWQgYnkgdGhlIEdQVQorCSAqIGluIGNhc2UgdGhleSBt YXkgYmUgdXNlZCBhZ2FpbiBzaG9ydGx5IChmb3IgZXhhbXBsZSBtaWdyYXRpbmcgdGhlCisJICog cGFnZXMgdG8gYSBkaWZmZXJlbnQgbWVtb3J5IGRvbWFpbiB3aXRoaW4gdGhlIEdUVCkuIHB1dF9w YWdlcygpCisJICogd2lsbCB0aGVyZWZvcmUgbW9zdCBsaWtlbHkgYmUgY2FsbGVkIHdoZW4gdGhl IG9iamVjdCBpdHNlbGYgaXMKKwkgKiBiZWluZyByZWxlYXNlZCBvciB1bmRlciBtZW1vcnkgcHJl c3N1cmUgKHdoZXJlIHdlIGF0dGVtcHQgdG8KKwkgKiByZWFwIHBhZ2VzIGZvciB0aGUgc2hyaW5r ZXIpLgorCSAqLworCWludCAoKmdldF9wYWdlcykoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3Qg Kik7CisJdm9pZCAoKnB1dF9wYWdlcykoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKik7CisJ dm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICopOworCWJvb2wgKCpp c191c2VycHRyX29iaikodm9pZCk7Cit9OworCisvKgorICogQSBWTUEgcmVwcmVzZW50cyBhIEdF TSBCTyB0aGF0IGlzIGJvdW5kIGludG8gYW4gYWRkcmVzcyBzcGFjZS4gVGhlcmVmb3JlLCBhCisg KiBWTUEncyBwcmVzZW5jZSBjYW5ub3QgYmUgZ3VhcmFudGVlZCBiZWZvcmUgYmluZGluZywgb3Ig YWZ0ZXIgdW5iaW5kaW5nIHRoZQorICogb2JqZWN0IGludG8vZnJvbSB0aGUgYWRkcmVzcyBzcGFj ZS4KKyAqCisgKiBUbyBtYWtlIHRoaW5ncyBhcyBzaW1wbGUgYXMgcG9zc2libGUgKGllLiBubyBy ZWZjb3VudGluZyksIGEgVk1BJ3MgbGlmZXRpbWUKKyAqIHdpbGwgYWx3YXlzIGJlIDw9IGFuIG9i amVjdHMgbGlmZXRpbWUuIFNvIG9iamVjdCByZWZjb3VudGluZyBzaG91bGQgY292ZXIgdXMuCisg Ki8KK3N0cnVjdCBpcHZyX3ZtYSB7CisJc3RydWN0IGRybV9tbV9ub2RlIG5vZGU7CisJc3RydWN0 IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgaXB2cl9hZGRyZXNzX3NwYWNlICp2 bTsKKworCS8qIFRoaXMgb2JqZWN0J3MgcGxhY2Ugb24gdGhlIGFjdGl2ZS9pbmFjdGl2ZSBsaXN0 cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgbW1fbGlzdDsKKworCXN0cnVjdCBsaXN0X2hlYWQgdm1h X2xpbms7IC8qIExpbmsgaW4gdGhlIG9iamVjdCdzIFZNQSBsaXN0ICovCit9OworCitpbnQzMl90 IGlwdnJfZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKKwkJCXVpbnQ2NF90IHNpemUsIHVpbnQzMl90IHRpbGluZywgdWludDMyX3Qg Y2FjaGVfbGV2ZWwsCisJCQl1aW50NjRfdCAqcnNpemVfcCwgdWludDMyX3QgKmhhbmRsZV9wLAor CQkJdWludDY0X3QgKm9mZnNldF9wLCB1aW50NjRfdCAqbWFwX2hhbmRsZV9wKTsKKworc3RydWN0 IGRybV9pcHZyX2dlbV9vYmplY3QgKgoraXB2cl9nZW1fb2JqX2NyZWF0ZV9hbmRfYmluZChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSk7CisKK3N0cnVjdCBkcm1faXB2cl9nZW1f b2JqZWN0ICoKK2lwdnJfZ2VtX2FsbG9jX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz aXplX3Qgc2l6ZSk7CisKK2ludDMyX3QgaXB2cl9nZW1fb2JqZWN0X2JpbmRfdG9fdm0oc3RydWN0 IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaiwKKwkJCXN0cnVjdCBpcHZyX2FkZHJlc3Nfc3BhY2Ug KnZtLAorCQkJdWludDMyX3QgYWxpZ25tZW50KTsKKwordW5zaWduZWQgbG9uZyBpcHZyX2dlbV9v YmpfbW11X29mZnNldChzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKTsKKworaW50MzJf dCBpcHZyX2dlbV9tbXVfYmluZF9vYmplY3Qoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9i aik7CisKK3ZvaWQgKmlwdnJfZ2VtX29iamVjdF92bWFwKHN0cnVjdCBkcm1faXB2cl9nZW1fb2Jq ZWN0ICpvYmopOworCitpbnQgaXB2cl9nZW1faW5pdF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopOworCit2b2lkIGlwdnJfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKTsKKworYm9vbCBpcHZyX2dlbV9jbGZsdXNoX29iamVjdChzdHJ1Y3QgZHJtX2lw dnJfZ2VtX29iamVjdCAqb2JqLCBib29sIGZvcmNlKTsKKwordWludDY0X3QgaXB2cl9nZW1fbW1h cF9vZmZzZXQoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaik7CisKK2ludDMyX3QgaXB2 cl9nZW1fdXNlcnB0cihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCXVpbnQ2NF90IHVzZXJfcHRyLCB1aW50NjRfdCB1c2VyX3NpemUsCisJCQl1 aW50MzJfdCBjYWNoZV9sZXZlbCwgdWludDMyX3QgdGlsaW5nLAorCQkJdWludDMyX3QgKmhhbmRs ZV9wLCB1aW50NjRfdCAqb2Zmc2V0X3ApOworCitpbnQzMl90IGlwdnJfZ2VtX2ZhdWx0KHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5jIGIvZHJpdmVycy9n cHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmVlY2Y4ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZy X2RlYnVnLmMKQEAgLTAsMCArMSwyNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXB2cl9k ZWJ1Zy5jOiBJUFZSIGRlYnVnZnMgc3VwcG9ydCB0byBhc3Npc3QgYnVnIHRyaWFnZQorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNB CisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRo CisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8ZmVp LmppYW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVk KENPTkZJR19ERUJVR19GUykKKworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVk ZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgImlwdnJfZGVidWcuaCIKKyNpbmNsdWRlICJp cHZyX2Rydi5oIgorI2luY2x1ZGUgInZlZF9yZWcuaCIKKwordW5pb24gaXB2cl9kZWJ1Z2ZzX3Zh cnMgZGVidWdmc192YXJzOworCitzdGF0aWMgaW50MzJfdCBpcHZyX2RlYnVnX2luZm8oc3RydWN0 IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2Rl ID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNlcV9wcmludGYobSwgImlwdnIgcGxhdGZv cm0gcmV2aXNvbiBpZDogMHgleFxuIiwKKwkJZGV2X3ByaXYtPnBsYXRmb3JtX3Jldl9pZCk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludDMyX3QgaXB2cl9kZWJ1Z19nZW1fb2JqZWN0X2lu Zm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkKiBkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19u b2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IGRybV9pcHZyX3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQzMl90IHJldDsKKworCXJl dCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlzZXFfcHJpbnRmKG0sICJpcHZyIHRvdGFsIGFsbG9jYXRl ICV1IG9iamVjdHMsICV6dSBieXRlc1xuIiwKKwkJICAgZGV2X3ByaXYtPmlwdnJfbW0ub2JqZWN0 X2NvdW50LAorCQkgICBkZXZfcHJpdi0+aXB2cl9tbS5vYmplY3RfbWVtb3J5KTsKKworCW11dGV4 X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQzMl90IGlwdnJfZGVidWdfZ2VtX3NlcW5vX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lk ICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5m b19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1p bm9yLT5kZXY7CisJZHJtX2lwdnJfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJaW50MzJfdCByZXQ7CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRl di0+c3RydWN0X211dGV4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2VxX3ByaW50 ZihtLCAibGFzdCBzaWduYWxlZCBzZXEgaXMgJWQsIGxhc3QgZW1pdHRlZCBzZXEgaXMgJWRcbiIs CisJCWF0b21pY19yZWFkKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LnNpZ25hbGVkX3NlcSksCisJCWRl dl9wcml2LT5mZW5jZV9kcnYuc3luY19zZXEpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVj dF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaXB2cl9kZWJ1Z192 ZWRfcmVnX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkJCQlz aXplX3QgbWF4LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZp bHAtPnByaXZhdGVfZGF0YTsKKwlkcm1faXB2cl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKKwljaGFyIGJ1ZlsyMDBdLCBvZmZzZXRbMjBdLCBvcGVyYXRpb25bMTBdLCBm b3JtYXRbMjBdLCB2YWxbMjBdOworCWludDMyX3QgbGVuID0gMCwgcmV0LCBub19vZl90b2tlbnM7 CisJdW5zaWduZWQgbG9uZyByZWdfb2Zmc2V0LCByZWdfdG9fd3JpdGU7CisKKwlpZiAoZGVidWdm c192YXJzLnJlZy5yZWdfaW5wdXQgPT0gMCkKKwkJcmV0dXJuIGxlbjsKKworCXNucHJpbnRmKGZv cm1hdCwgc2l6ZW9mKGZvcm1hdCksICIlJSV6dXMgJSUlenVzICUlJXp1cyIsCisJCQlzaXplb2Yo b3BlcmF0aW9uKSwgc2l6ZW9mKG9mZnNldCksIHNpemVvZih2YWwpKTsKKworCW5vX29mX3Rva2Vu cyA9IHNzY2FuZihkZWJ1Z2ZzX3ZhcnMucmVnLnJlZ192YXJzLAorCQkJCQlmb3JtYXQsIG9wZXJh dGlvbiwgb2Zmc2V0LCB2YWwpOworCisJaWYgKG5vX29mX3Rva2VucyA8IDMpCisJCXJldHVybiBs ZW47CisKKwlsZW4gPSBzaXplb2YoZGVidWdmc192YXJzLnJlZy5yZWdfdmFycyk7CisKKwlpZiAo c3RyY21wKG9wZXJhdGlvbiwgSVBWUl9SRUFEX1RPS0VOKSA9PSAwKSB7CisJCXJldCA9IGtzdHJ0 b3VsKG9mZnNldCwgMTYsICZyZWdfb2Zmc2V0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRUlO VkFMOworCisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHgleDogMHgleFxu IiwKKwkJCSh1aW50MzJfdClyZWdfb2Zmc2V0LAorCQkJVkVEX1JFR19SRUFEMzIoKHVpbnQzMl90 KXJlZ19vZmZzZXQpKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChvcGVyYXRpb24sIElQVlJfV1JJVEVf VE9LRU4pID09IDApIHsKKwkJcmV0ID0ga3N0cnRvdWwob2Zmc2V0LCAxNiwgJnJlZ19vZmZzZXQp OworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmV0ID0ga3N0cnRvdWwodmFs LCAxNiwgJnJlZ190b193cml0ZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwor CQlWRURfUkVHX1dSSVRFMzIocmVnX29mZnNldCwgcmVnX3RvX3dyaXRlKTsKKwkJbGVuID0gc2Nu cHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCQkJIjB4JXg6IDB4JXhcbiIsCisJCQkJKHVpbnQz Ml90KXJlZ19vZmZzZXQsCisJCQkJKHVpbnQzMl90KVZFRF9SRUdfUkVBRDMyKHJlZ19vZmZzZXQp KTsKKwl9IGVsc2UgeworCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIk9wZXJh dGlvbiBOb3QgU3VwcG9ydGVkXG4iKTsKKwl9CisKKwlkZWJ1Z2ZzX3ZhcnMucmVnLnJlZ19pbnB1 dCA9IDA7CisKKwlzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBtYXgsIHBwb3MsIGJ1Ziwg bGVuKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90CitpcHZyX2RlYnVnX3Zl ZF9yZWdfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJ CQlzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCit7CisJLyogcmVzZXQgdGhlIHN0cmluZyAqLwor CW1lbXNldChkZWJ1Z2ZzX3ZhcnMucmVnLnJlZ192YXJzLCAwLCBJUFZSX01BWF9CVUZGRVJfU1RS X0xFTik7CisKKwlpZiAoY250ID4gMCkgeworCQlpZiAoY250ID4gc2l6ZW9mKGRlYnVnZnNfdmFy cy5yZWcucmVnX3ZhcnMpIC0gMSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChjb3B5X2Zy b21fdXNlcihkZWJ1Z2ZzX3ZhcnMucmVnLnJlZ192YXJzLCB1YnVmLCBjbnQpKQorCQkJcmV0dXJu IC1FRkFVTFQ7CisKKwkJZGVidWdmc192YXJzLnJlZy5yZWdfdmFyc1tjbnRdID0gMDsKKworCQkv KiBFbmFibGUgUmVhZCAqLworCQlkZWJ1Z2ZzX3ZhcnMucmVnLnJlZ19pbnB1dCA9IDE7CisJfQor CisJcmV0dXJuIGNudDsKK30KKworLyogQXMgdGhlIGRybV9kZWJ1Z2ZzX2luaXQoKSByb3V0aW5l cyBhcmUgY2FsbGVkIGJlZm9yZSBkZXYtPmRldl9wcml2YXRlIGlzCisgKiBhbGxvY2F0ZWQgd2Ug bmVlZCB0byBob29rIGludG8gdGhlIG1pbm9yIGZvciByZWxlYXNlLiAqLworc3RhdGljIGludDMy X3QgaXB2cl9hZGRfZmFrZV9pbmZvX25vZGUoc3RydWN0IGRybV9taW5vciAqbWlub3IsCisJCQkJ CXN0cnVjdCBkZW50cnkgKmVudCwgY29uc3Qgdm9pZCAqa2V5KQoreworCXN0cnVjdCBkcm1faW5m b19ub2RlICpub2RlOworCisJbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1faW5mb19u b2RlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG5vZGUgPT0gTlVMTCkgeworCQlkZWJ1Z2ZzX3JlbW92 ZShlbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlub2RlLT5taW5vciA9IG1pbm9yOwor CW5vZGUtPmRlbnQgPSBlbnQ7CisJbm9kZS0+aW5mb19lbnQgPSAodm9pZCAqKSBrZXk7CisKKwlt dXRleF9sb2NrKCZtaW5vci0+ZGVidWdmc19sb2NrKTsKKwlsaXN0X2FkZCgmbm9kZS0+bGlzdCwg Jm1pbm9yLT5kZWJ1Z2ZzX2xpc3QpOworCW11dGV4X3VubG9jaygmbWlub3ItPmRlYnVnZnNfbG9j ayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludDMyX3QgaXB2cl9kZWJ1Z2ZzX2NyZWF0 ZShzdHJ1Y3QgZGVudHJ5ICpyb290LAorCQkJICAgICAgIHN0cnVjdCBkcm1fbWlub3IgKm1pbm9y LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGZp bGVfb3BlcmF0aW9ucyAqZm9wcykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3It PmRldjsKKwlzdHJ1Y3QgZGVudHJ5ICplbnQ7CisKKwllbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxl KG5hbWUsCisJCQkJICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQkgIHJvb3QsIGRldiwKKwkJCQkg IGZvcHMpOworCWlmIChJU19FUlIoZW50KSkKKwkJcmV0dXJuIFBUUl9FUlIoZW50KTsKKworCXJl dHVybiBpcHZyX2FkZF9mYWtlX2luZm9fbm9kZShtaW5vciwgZW50LCBmb3BzKTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXB2cl92ZWRfcmVnX2ZvcHMgPSB7CisJ Lm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBzaW1wbGVfb3BlbiwKKwkucmVhZCA9IGlw dnJfZGVidWdfdmVkX3JlZ19yZWFkLAorCS53cml0ZSA9IGlwdnJfZGVidWdfdmVkX3JlZ193cml0 ZSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3RydWN0IGRybV9p bmZvX2xpc3QgaXB2cl9kZWJ1Z2ZzX2xpc3RbXSA9IHsKKwl7ImlwdnJfY2FwYWJpbGl0aWVzIiwg aXB2cl9kZWJ1Z19pbmZvLCAwfSwKKwl7ImlwdnJfZ2VtX29iamVjdHMiLCBpcHZyX2RlYnVnX2dl bV9vYmplY3RfaW5mbywgMH0sCisJeyJpcHZyX2dlbV9zZXFubyIsIGlwdnJfZGVidWdfZ2VtX3Nl cW5vX2luZm8sIDB9LAorCit9OworI2RlZmluZSBJUFZSX0RFQlVHRlNfRU5UUklFUyBBUlJBWV9T SVpFKGlwdnJfZGVidWdmc19saXN0KQorCitzdGF0aWMgc3RydWN0IGlwdnJfZGVidWdmc19maWxl cyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpm b3BzOworfSBpcHZyX2RlYnVnZnNfZmlsZXNbXSA9IHsKKwl7ImlwdnJfdmVkX3JlZ19hcGkiLCAm aXB2cl92ZWRfcmVnX2ZvcHN9LAorfTsKKworaW50MzJfdCBpcHZyX2RlYnVnZnNfaW5pdChzdHJ1 Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlpbnQzMl90IHJldCwgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGlwdnJfZGVidWdmc19maWxlcyk7IGkrKykgeworCQlyZXQgPSBpcHZy X2RlYnVnZnNfY3JlYXRlKG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yLAorCQkJCSAgIGlwdnJf ZGVidWdmc19maWxlc1tpXS5uYW1lLAorCQkJCSAgIGlwdnJfZGVidWdmc19maWxlc1tpXS5mb3Bz KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIGRybV9kZWJ1Z2Zz X2NyZWF0ZV9maWxlcyhpcHZyX2RlYnVnZnNfbGlzdCwKKwkJCQkgSVBWUl9ERUJVR0ZTX0VOVFJJ RVMsCisJCQkJIG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yKTsKK30KKwordm9pZCBpcHZyX2Rl YnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlpbnQzMl90IGk7CisK Kwlkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoaXB2cl9kZWJ1Z2ZzX2xpc3QsCisJCQkgIElQVlJf REVCVUdGU19FTlRSSUVTLCBtaW5vcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShp cHZyX2RlYnVnZnNfZmlsZXMpOyBpKyspIHsKKwkJc3RydWN0IGRybV9pbmZvX2xpc3QgKmluZm9f bGlzdCA9CisJCQkoc3RydWN0IGRybV9pbmZvX2xpc3QgKilpcHZyX2RlYnVnZnNfZmlsZXNbaV0u Zm9wczsKKworCQlkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoaW5mb19saXN0LCAxLCBtaW5vcik7 CisJfQorfQorCisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2RlYnVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZy X2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiZWI3MwotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZGVidWcuaApAQCAtMCww ICsxLDUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlwdnJfZGVidWcuaDogSVBWUiBkZWJ1 Z2ZzIHN1cHBvcnQgaGVhZGVyIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwg Q29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lU SE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFu a2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAq IEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKgorICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX0lQVlJfREVCVUdfSF8KKyNkZWZpbmUgX0lQ VlJfREVCVUdfSF8KKworI2luY2x1ZGUgImRybVAuaCIKKworLyogT3BlcmF0aW9ucyBzdXBwb3J0 ZWQgKi8KKyNkZWZpbmUgSVBWUl9NQVhfQlVGRkVSX1NUUl9MRU4JCTIwMAorCisjZGVmaW5lIElQ VlJfUkVBRF9UT0tFTgkJCSJSRUFEIgorI2RlZmluZSBJUFZSX1dSSVRFX1RPS0VOCQkiV1JJVEUi CisKKy8qIERlYnVnRlMgVmFyaWFibGUgZGVjbGFyYXRpb24gKi8KK3N0cnVjdCBpcHZyX2RlYnVn ZnNfcmVnX3ZhcnMgeworCWNoYXIgcmVnX3ZhcnNbSVBWUl9NQVhfQlVGRkVSX1NUUl9MRU5dOwor CXVpbnQzMl90IHJlZ19pbnB1dDsKK307CisKK3VuaW9uIGlwdnJfZGVidWdmc192YXJzIHsKKwlz dHJ1Y3QgaXB2cl9kZWJ1Z2ZzX3JlZ192YXJzIHJlZzsKK307CisKK2ludDMyX3QgaXB2cl9kZWJ1 Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwordm9pZCBpcHZyX2RlYnVnZnNfY2xl YW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kcm0uaCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJf ZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExMzQzOQotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZHJtLmgKQEAgLTAsMCArMSwy NjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXB2cl9kcm0uaDogSVBWUiBoZWFkZXIgZmls ZSBleHBvcnRlZCB0byB1c2VyIHNwYWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVs IENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJ VEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRh aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJh bmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisg KiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29tPgorICogICAg WWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KworCisvKiB0aGlzIGZpbGUgb25seSBkZWZpbmUgc3RydWN0cyBhbmQgbWFjcm8gd2hpY2ggbmVl ZCBleHBvcnQgdG8gdXNlciBzcGFjZSAqLworI2lmbmRlZiBfSVBWUl9EUk1fSF8KKyNkZWZpbmUg X0lQVlJfRFJNX0hfCisKKyNpbmNsdWRlIDxkcm0vZHJtLmg+CitzdHJ1Y3QgZHJtX2lwdnJfY29u dGV4dF9jcmVhdGUgeworCS8qIHBhc3NlZCBjdHhfaW5mbywgaW5jbHVkaW5nIGNvZGVjLCBwcm9m aWxlIGluZm8gKi8KKwl1aW50MzJfdCBjdHhfdHlwZTsKKwkvKiByZXR1cm5lZCBiYWNrIGN0eF9p ZCAqLworCXVpbnQzMl90IGN0eF9pZDsKKwkvKgorCSAqIGZvbGxvd2luZyB0aWxpbmcgc3RyaWRl cyBmb3IgVkVEIGFyZSBzdXBwb3J0ZWQ6CisJICogc3RyaWRlIDA6IDUxMiBmb3Igc2NoZW1lIDAs IDEwMjQgZm9yIHNjaGVtZSAxCisJICogc3RyaWRlIDE6IDEwMjQgZm9yIHNjaGVtZSAwLCAyMDQ4 IGZvciBzY2hlbWUgMQorCSAqIHN0cmlkZSAyOiAyMDQ4IGZvciBzY2hlbWUgMCwgNDA5NiBmb3Ig c2NoZW1lIDEKKwkgKiBzdHJpZGUgMzogNDA5NiBmb3Igc2NoZW1lIDAKKwkgKi8KKwl1aW50MzJf dCB0aWxpbmdfc3RyaWRlOworCS8qCisJICogc2NoZW1lIDA6IHRpbGUgaXMgMjU2eDE2LCB3aGls ZSBtaW5pbWFsIHRpbGUgc3RyaWRlIGlzIDUxMgorCSAqIHNjaGVtZSAxOiB0aWxlIGlzIDUxMng4 LCB3aGlsZSBtaW5pbWFsIHRpbGUgc3RyaWRlIGlzIDEwMjQKKwkgKi8KKwl1aW50MzJfdCB0aWxp bmdfc2NoZW1lOworfTsKKworc3RydWN0IGRybV9pcHZyX2NvbnRleHRfZGVzdHJveSB7CisJdWlu dDMyX3QgY3R4X2lkOworCXVpbnQzMl90IHBhZDY0OworfTsKKworZW51bSBkcm1faXB2cl9taXNj X2tleSB7CisJSVBWUl9ERVZJQ0VfSU5GTywKKwlJUFZSX1VQREFURV9USUxJTkcsCisJSVBWUl9T RVRfRElTUExBWUlOR19GUkFNRSwKKwlJUFZSX0dFVF9ESVNQTEFZSU5HX0ZSQU1FLAorCUlQVlJf UVVFUllfRU5UUlkKK307CisKKy8qCisgKiBkaWZmZXJlbnQgY29udGV4dCBtYXliZSBoYXMgZGlm ZmVyZW50IHRpbGluZyBzdHJpZGUsCisgKiB0aGVuIHRpbGluZyBpbmZvIG5lZWQgYmUgYm91bmQg d2l0aCBjdHgKKyAqLworc3RydWN0IGRybV9pcHZyX3VwZGF0ZV90aWxpbmcgeworCXVpbnQzMl90 IGN0eF9pZDsKKwl1aW50MzJfdCB0aWxpbmdfc3RyaWRlOworCXVpbnQzMl90IHRpbGluZ19zY2hl bWU7CisJdWludDMyX3QgcGFkNjQ7Cit9OworCisvKiBJb2N0bCB0byBzZXQvZ2V0IG1pc2MgcGFy YW1zOgorICovCitzdHJ1Y3QgZHJtX2lwdnJfbWlzYyB7CisJdWludDY0X3Qga2V5OworCXVpbnQ2 NF90IGFyZzsJCS8qIGFyZ3VtZW50IHBvaW50ZXIgKi8KKwl1aW50NjRfdCB2YWx1ZTsJLyogZmVl ZCBiYWNrIHBvaW50ZXIgKi8KK307CisKK3N0cnVjdCBpcHZyX3ZhbGlkYXRlX2FyZyB7CisJLyog cG9pbnQgdG8gbmV4dCBpcHZyX3ZhbGlkYXRlX2FyZyAqLworCXVpbnQ2NF90IG5leHQ7CisJdWlu dDY0X3QgcHJlc3VtZWRfZ3B1X29mZnNldDsKKwkvKiBVc2VyJ3MgaGFuZGxlIGZvciBhIGJ1ZmZl ciAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7CisJLyogZmVuY2luZyAqLwor CXVpbnQzMl90IHNraXBfZmVuY2U7CisJaW50MzJfdCBmZW5jZV9mZDsKK307CisKKyNkZWZpbmUg TUFYX1NMSUNFU19QRVJfUElDVFVSRSA3Mgorc3RydWN0IGRybV9pcHZyX21iX3JlZ2lvbiB7CisJ dWludDMyX3Qgc3RhcnQ7CisJdWludDMyX3QgZW5kOworfTsKKworc3RydWN0IGRybV9pcHZyX2Rl Y29kZV9zdGF0dXMgeworCXVpbnQzMl90IG51bV9yZWdpb247CisJdWludDMyX3QgcGFkOworCXN0 cnVjdCBkcm1faXB2cl9tYl9yZWdpb24gbWJfcmVnaW9uc1tNQVhfU0xJQ0VTX1BFUl9QSUNUVVJF XTsKK307CisKK3N0cnVjdCBkcm1faXB2cl9nZW1fZXhlY2J1ZmZlciB7CisJLyoKKwkgKiBMaXN0 IG9mIGlwdnJfdmFsaWRhdGVfYXJnIHN0cnVjdHMKKwkgKi8KKwl1aW50NjRfdCBidWZmZXJfbGlz dDsKKwl1aW50MzJfdCBidWZmZXJfY291bnQ7CisKKwkvKiBmcm9tIHVzZXIgc3BhY2UgcG9pbnQs IHRoaXMgaXMgbXNnIGJ1ZmZlciBhY3R1YWxseSAqLworCXVpbnQzMl90IGNtZGJ1Zl9oYW5kbGU7 CisJdWludDMyX3QgY21kYnVmX3NpemU7CisKKwl1aW50MzJfdCBjdHhfaWQ7Cit9OworCitlbnVt IGlwdnJfY2FjaGVfbGV2ZWwgeworCUlQVlJfQ0FDSEVfTk9ORSA9IDAsCS8qIHVuY2FjaGVhYmxl ICovCisJSVBWUl9DQUNIRV9XQiwJCS8qIHdyaXRlIGJhY2sgY2FjaGVhYmxlICovCisJSVBWUl9D QUNIRV9XQywJCS8qIHdyaXRlIGNvbWJpbmUsIHVuY2FjaGVhYmxlICovCisJSVBWUl9DQUNIRV9N QVgsCit9OworCitzdHJ1Y3QgZHJtX2lwdnJfZ2VtX2NyZWF0ZSB7CisJLyoKKwkgKiBSZXF1ZXN0 ZWQgc2l6ZSBmb3IgdGhlIG9iamVjdC4KKwkgKiBUaGUgKHBhZ2UtYWxpZ25lZCkgYWxsb2NhdGVk IHNpemUgZm9yIHRoZSBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4KKwkgKi8KKwl1aW50NjRfdCBz aXplOworCXVpbnQ2NF90IHJvdW5kZWRfc2l6ZTsKKwl1aW50NjRfdCBncHVfb2Zmc2V0OworCS8q CisJICogUmV0dXJuZWQgaGFuZGxlIGZvciB0aGUgb2JqZWN0LgorCSAqIE9iamVjdCBoYW5kbGVz IGFyZSBub256ZXJvLgorCSAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCB0aWxpbmc7 CisJdWludDMyX3QgY2FjaGVfbGV2ZWw7CisJdWludDMyX3QgcGFkNjQ7CisJLyoKKwkgKiBIYW5k bGUgdXNlZCBmb3IgdXNlciB0byBtbWFwIEJPCisJICovCisJdWludDY0X3QgbWFwX2hhbmRsZTsK K307CisKK3N0cnVjdCBkcm1faXB2cl9nZW1fYnVzeSB7CisJLyogSGFuZGxlIG9mIHRoZSBidWZm ZXIgdG8gY2hlY2sgZm9yIGJ1c3kgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKgorCSAqIFJl dHVybiBidXN5IHN0YXR1cyAoMSBpZiBidXN5LCAwIGlmIGlkbGUpLgorCSAqIFRoZSBoaWdoIHdv cmQgaXMgdXNlZCB0byBpbmRpY2F0ZSBvbiB3aGljaCByaW5ncyB0aGUgb2JqZWN0CisJICogY3Vy cmVudGx5IHJlc2lkZXM6CisJICogIDE2OjMxIC0gYnVzeSAociBvciByL3cpIHJpbmdzICgxNiBy ZW5kZXIsIDE3IGJzZCwgMTggYmx0LCBldGMpCisJICovCisJdWludDMyX3QgYnVzeTsKK307CisK K3N0cnVjdCBkcm1faXB2cl9nZW1fbW1hcF9vZmZzZXQgeworCS8qKiBIYW5kbGUgZm9yIHRoZSBv YmplY3QgYmVpbmcgbWFwcGVkLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7 CisJLyoqCisJICogRmFrZSBvZmZzZXQgdG8gdXNlIGZvciBzdWJzZXF1ZW50IG1tYXAgY2FsbAor CSAqCisJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0 eS4KKwkgKi8KKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCisvKgorICogQUNDRVNTIG1vZGUgZmxh Z3MgZm9yIFNZTkNDUFUuCisgKgorICogSVBWUl9TWU5DQ1BVX01PREVfUkVBRCB3aWxsIGd1YXJh bnRlZSB0aGF0IHRoZSBHUFUgaXMgbm90CisgKiB3cml0aW5nIHRvIHRoZSBidWZmZXIuCisgKgor ICogSVBWUl9TWU5DQ1BVX01PREVfV1JJVEUgd2lsbCBndWFyYW50ZWUgdGhhdCB0aGUgR1BVIGlz IG5vdAorICogYWNjZXNzaW5nIHRoZSBidWZmZXIuCisgKgorICogSVBWUl9TWU5DQ1BVX01PREVf Tk9fQkxPQ0sgbWFrZXMgc3VyZSB0aGUgY2FsbCBkb2VzIG5vdCB3YWl0CisgKiBmb3IgR1BVIGFj Y2Vzc2VzIHRvIGZpbmlzaCBidXQgcmV0dXJuIC1FQlVTWS4KKyAqCisgKiBJUFZSX1NZTkNDUFVf TU9ERV9UUllDQUNIRUQgVHJ5IHRvIHBsYWNlIHRoZSBidWZmZXIgaW4gY2FjaGVhYmxlCisgKiBt ZW1vcnkgd2hpbGUgc3luY2hyb25pemVkIGZvciBDUFUuCisgKgorICovCisKKyNkZWZpbmUgSVBW Ul9TWU5DQ1BVX01PREVfUkVBRCAgICAgICgxIDw8IDApCisjZGVmaW5lIElQVlJfU1lOQ0NQVV9N T0RFX1dSSVRFICAgICAoMSA8PCAxKQorI2RlZmluZSBJUFZSX1NZTkNDUFVfTU9ERV9OT19CTE9D SyAgKDEgPDwgMikKKyNkZWZpbmUgSVBWUl9TWU5DQ1BVX01PREVfVFJZQ0FDSEVEICgxIDw8IDMp CisKK2VudW0gZHJtX2lwdnJfc3luY19jcHVfb3AgeworCUlQVlJfU1lOQ0NQVV9PUF9HUkFCLAor CUlQVlJfU1lOQ0NQVV9PUF9SRUxFQVNFLAorfTsKKworc3RydWN0IGRybV9pcHZyX3N5bmNfY3B1 IHsKKwkvKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWlu dDMyX3QgYWNjZXNzX21vZGU7CisJdWludDMyX3Qgb3A7CisJdWludDMyX3QgcGFkNjQ7Cit9Owor CitzdHJ1Y3QgZHJtX2lwdnJfZ2VtX3dhaXQgeworCS8qIEhhbmRsZSBvZiBCTyB3ZSBzaGFsbCB3 YWl0IG9uICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IGZsYWdzOworfTsKKworc3Ry dWN0IGRybV9pcHZyX2dlbV91c2VycHRyIHsKKwl1aW50NjRfdCB1c2VyX3B0cjsKKwl1aW50NjRf dCB1c2VyX3NpemU7CisJdWludDY0X3QgZ3B1X29mZnNldDsKKwl1aW50MzJfdCBjYWNoZV9sZXZl bDsKKyAgICB1aW50MzJfdCB0aWxpbmc7CisJLyoKKwkgKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRo ZSBvYmplY3QuCisJICogT2JqZWN0IGhhbmRsZXMgYXJlIG5vbnplcm8uCisJICovCisJdWludDMy X3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKK307CisKKy8qCisgKiBJUFZSIEdFTSBzcGVjaWZp YyBpb2N0bHMKKyAqIFRoZSBkZXZpY2Ugc3BlY2lmaWMgaW9jdGwgcmFuZ2UgaXMgMHg1MCB0byAw eDVmLgorICovCisjZGVmaW5lIERSTV9JUFZSX0NPTlRFWFRfQ1JFQVRFCQkweDAwCisjZGVmaW5l IERSTV9JUFZSX0NPTlRFWFRfREVTVFJPWQkweDAxCisjZGVmaW5lIERSTV9JUFZSX01JU0MJCQkJ MHgwMgorI2RlZmluZSBEUk1fSVBWUl9HRU1fRVhFQ0JVRkZFUgkJMHgwMworI2RlZmluZSBEUk1f SVBWUl9HRU1fQlVTWQkJCTB4MDQKKyNkZWZpbmUgRFJNX0lQVlJfR0VNX0NSRUFURQkJCTB4MDUK KyNkZWZpbmUgRFJNX0lQVlJfU1lOQ19DUFUJCQkweDA2CisjZGVmaW5lIERSTV9JUFZSX0dFTV9X QUlUCQkJMHgwNworI2RlZmluZSBEUk1fSVBWUl9HRU1fVVNFUlBUUgkJMHgwOAorI2RlZmluZSBE Uk1fSVBWUl9HRU1fTU1BUF9PRkZTRVQJMHgwOQorCisjZGVmaW5lIERSTV9JT0NUTF9JUFZSX0NP TlRFWFRfQ1JFQVRFCVwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0lQVlJfQ09O VEVYVF9DUkVBVEUsIHN0cnVjdCBkcm1faXB2cl9jb250ZXh0X2NyZWF0ZSkKKyNkZWZpbmUgRFJN X0lPQ1RMX0lQVlJfQ09OVEVYVF9ERVNUUk9ZCVwKKwlEUk1fSU9XKERSTV9DT01NQU5EX0JBU0Ug KyBEUk1fSVBWUl9DT05URVhUX0RFU1RST1ksIHN0cnVjdCBkcm1faXB2cl9jb250ZXh0X2Rlc3Ry b3kpCisjZGVmaW5lIERSTV9JT0NUTF9JUFZSX01JU0MJCVwKKwlEUk1fSU9XUihEUk1fQ09NTUFO RF9CQVNFICsgRFJNX0lQVlJfTUlTQywgc3RydWN0IGRybV9pcHZyX21pc2MpCisjZGVmaW5lIERS TV9JT0NUTF9JUFZSX0dFTV9FWEVDQlVGRkVSCVwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNF ICsgRFJNX0lQVlJfR0VNX0VYRUNCVUZGRVIsIHN0cnVjdCBkcm1faXB2cl9nZW1fZXhlY2J1ZmZl cikKKyNkZWZpbmUgRFJNX0lPQ1RMX0lQVlJfR0VNX0JVU1kJCVwKKwlEUk1fSU9XUihEUk1fQ09N TUFORF9CQVNFICsgRFJNX0lQVlJfR0VNX0JVU1ksIHN0cnVjdCBkcm1faXB2cl9nZW1fYnVzeSkK KyNkZWZpbmUgRFJNX0lPQ1RMX0lQVlJfR0VNX0NSRUFURQlcCisJRFJNX0lPV1IoRFJNX0NPTU1B TkRfQkFTRSArIERSTV9JUFZSX0dFTV9DUkVBVEUsIHN0cnVjdCBkcm1faXB2cl9nZW1fY3JlYXRl KQorI2RlZmluZSBEUk1fSU9DVExfSVBWUl9TWU5DX0NQVQlcCisJRFJNX0lPVyhEUk1fQ09NTUFO RF9CQVNFICsgRFJNX0lQVlJfU1lOQ19DUFUsIHN0cnVjdCBkcm1faXB2cl9zeW5jX2NwdSkKKyNk ZWZpbmUgRFJNX0lPQ1RMX0lQVlJfR0VNX1dBSVQJCVwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9C QVNFICsgRFJNX0lQVlJfR0VNX1dBSVQsIHN0cnVjdCBkcm1faXB2cl9nZW1fd2FpdCkKKyNkZWZp bmUgRFJNX0lPQ1RMX0lQVlJfR0VNX1VTRVJQVFIJXAorCURSTV9JT1dSKERSTV9DT01NQU5EX0JB U0UgKyBEUk1fSVBWUl9HRU1fVVNFUlBUUiwgc3RydWN0IGRybV9pcHZyX2dlbV91c2VycHRyKQor I2RlZmluZSBEUk1fSU9DVExfSVBWUl9HRU1fTU1BUF9PRkZTRVQJXAorCURSTV9JT1dSKERSTV9D T01NQU5EX0JBU0UgKyBEUk1fSVBWUl9HRU1fTU1BUF9PRkZTRVQsIHN0cnVjdCBkcm1faXB2cl9n ZW1fbW1hcF9vZmZzZXQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lw dnIvaXB2cl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZHJ2LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5YTMzOAotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZHJ2LmMKQEAgLTAsMCArMSw3NTkgQEAKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorICogaXB2cl9kcnYuYzogSVBWUiBkcml2ZXIgY29tbW9uIGZpbGUgZm9yIGlu aXRpYWxpemF0aW9uL2RlLWluaXRpYWxpemF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0 IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVz ZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29u ZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIs IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwg YnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9y ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICog NTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4K KyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29tPgor ICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdmVy c2lvbi5oPgorI2luY2x1ZGUgPHVhcGkvZHJtL2RybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1 bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgImlwdnJfZHJ2Lmgi CisjaW5jbHVkZSAiaXB2cl9nZW0uaCIKKyNpbmNsdWRlICJpcHZyX21tdS5oIgorI2luY2x1ZGUg ImlwdnJfZXhlYy5oIgorI2luY2x1ZGUgImlwdnJfYnVmZmVyLmgiCisjaW5jbHVkZSAiaXB2cl9k ZWJ1Zy5oIgorI2luY2x1ZGUgInZlZF9pbml0LmgiCisjaW5jbHVkZSAidmVkX3BtLmgiCisjaW5j bHVkZSAidmVkX3JlZy5oIgorI2luY2x1ZGUgInZlZF9jbWQuaCIKKyNpbmNsdWRlICJpcHZyX3Ry YWNlLmgiCisKK2ludDMyX3QgZHJtX2lwdnJfY3B1cmVsYXggPSAwOworaW50MzJfdCBkcm1faXB2 cl91ZGVsYXlkaXZpZGVyID0gMTsKK2ludDMyX3QgZHJtX2lwdnJfdHJhcF9wYWdlZmF1bHRzID0g MDsKK2ludDMyX3QgZHJtX2lwdnJfdGlsaW5nID0gMTsKK2ludDMyX3QgZHJtX2lwdnJfZGVidWcg PSAweDgwOworYm9vbCBmYWtlX2JvX2RlYnVnID0gZmFsc2U7CitpbnQzMl90IGRybV9pcHZyX2Zy ZXEgPSBJUF9GUkVRXzMyMF8wMDsKKworbW9kdWxlX3BhcmFtX25hbWVkKHRyYXBfcGFnZWZhdWx0 cywgZHJtX2lwdnJfdHJhcF9wYWdlZmF1bHRzLCBpbnQsIDA2MDApOworbW9kdWxlX3BhcmFtX25h bWVkKGRlYnVnLCBkcm1faXB2cl9kZWJ1ZywgaW50LCAwNjAwKTsKK21vZHVsZV9wYXJhbV9uYW1l ZChmcmVxLCBkcm1faXB2cl9mcmVxLCBpbnQsIDA2MDApOworCitNT0RVTEVfUEFSTV9ERVNDKGRl YnVnLAorCQkiY29udHJvbCBkZWJ1ZyBpbmZvIG91dHB1dCIKKwkJImRlZmF1bHQ6IDAiCisJCSIw eDAxOklQVlJfRF9HRU5FUkFMLCAweDAyOklQVlJfRF9JTklULCAweDA0OklQVlJfRF9JUlEsIDB4 MDg6SVBWUl9EX0VOVFJZIgorCQkiMHgxMDpJUFZSX0RfUE0sIDB4MjA6SVBWUl9EX1JFRywgMHg0 MDpJUFZSX0RfVkVELCAweDgwOklQVlJfRF9XQVJOIik7CitNT0RVTEVfUEFSTV9ERVNDKGZyZXEs CisJCSJjb250cm9sIFZFRCBmcmVxdWVuY3kiCisJCSJkZWZhdWx0OiAweDBiICgyNjYuNjcgTUh6 KSIKKwkJIjB4MWY6IDEwMC4wMCBNSHoiCisJCSIweDFkOiAxMDYuNjcgTUh6IgorCQkiMHgxNzog MTMzLjMwIE1IeiIKKwkJIjB4MTM6IDE2MC4wMCBNSHoiCisJCSIweDExOiAxNzcuNzggTUh6Igor CQkiMHgwZjogMjAwLjAwIE1IeiIKKwkJIjB4MGU6IDIxMy4zMyBNSHoiCisJCSIweDBiOiAyNjYu NjcgTUh6IgorCQkiMHgwOTogMzIwLjAwIE1IeiIpOworCit1aW50MzJfdCBSRUdJU1RFUl9SRUFE KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHJlZykKK3sKKwlzdHJ1Y3QgZHJtX2lw dnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXJldHVybiBpb3JlYWQz MihkZXZfcHJpdi0+dmVkX3JlZ19iYXNlICsgZGV2X3ByaXYtPnZlZF9yZWdfb2Zmc2V0ICsgcmVn KTsKK30KKworc3RhdGljIGludDMyX3QKK2lwdnJfY29udGV4dF9jcmVhdGVfaW9jdGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pcHZyX2NvbnRleHRfY3JlYXRlICphcmdzID0g ZGF0YTsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOworCXN0cnVjdCBpcHZyX2NvbnRleHQgKmlwdnJfY3R4ICA9IE5VTEw7CisJdW5zaWduZWQg bG9uZyBpcnFfZmxhZ3M7CisJaW50MzJfdCBjdHhfaWQsIHJldCA9IDA7CisKKwlJUFZSX0RFQlVH X0VOVFJZKCJlbnRlclxuIik7CisJLyogYWRkIHZpZGVvIGRlY29kZSBjb250ZXh0ICovCisJaXB2 cl9jdHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXB2cl9jb250ZXh0KSwgR0ZQX0tFUk5FTCk7 CisJaWYgKGlwdnJfY3R4ICA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWN0eF9pZCA9 IGlkcl9hbGxvYygmZGV2X3ByaXYtPmlwdnJfY3R4X2lkciwgaXB2cl9jdHggLAorCQkJICAgSVBW Ul9NSU5fQ09OVEVYVF9JRCwgSVBWUl9NQVhfQ09OVEVYVF9JRCwKKwkJCSAgIEdGUF9LRVJORUwp OworCWlmIChjdHhfaWQgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpcHZyX2N0eC0+Y3R4X2lk ID0gY3R4X2lkOworCisJSU5JVF9MSVNUX0hFQUQoJmlwdnJfY3R4LT5oZWFkKTsKKwlpcHZyX2N0 eC0+Y3R4X3R5cGUgPSBhcmdzLT5jdHhfdHlwZTsKKwlpcHZyX2N0eC0+aXB2cl9mcHJpdiA9IGZp bGVfcHJpdi0+ZHJpdmVyX3ByaXY7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcHZy X2N0eF9sb2NrLCBpcnFfZmxhZ3MpOworCWxpc3RfYWRkKCZpcHZyX2N0eCAtPmhlYWQsICZkZXZf cHJpdi0+aXB2cl9jdHhfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYt PmlwdnJfY3R4X2xvY2ssIGlycV9mbGFncyk7CisJYXJncy0+Y3R4X2lkID0gY3R4X2lkOworCUlQ VlJfREVCVUdfSU5JVCgiYWRkIGN0eCBwcm9maWxlICVkLCBlbnRyeSAlZCwgY3R4X2lkIGlzICVk LCAiCisJCQkicHJvdGVjdGVkIGlzICVkLlxuIiwKKwkJCShpcHZyX2N0eC0+Y3R4X3R5cGUgPj4g OCkgJiAweGZmLAorCQkJaXB2cl9jdHgtPmN0eF90eXBlICYgMHhmZiwgY3R4X2lkLAorCQkJaXB2 cl9jdHgtPmN0eF90eXBlICYgVkFfUlRfRk9STUFUX1BST1RFQ1RFRCk7CisJLyoKKwkgKiB0b2Rv OiBvbmx5IG9uZSB0aWxpbmcgcmVnaW9uIGlzIHN1cHBvcnRlZCBub3csCisJICogbWF5YmUgd2Ug bmVlZCBjcmVhdGUgYWRkaXRpb25hbCB0aWxpbmcgcmVnaW9uIGZvciByb3RhdGlvbiBjYXNlLAor CSAqIHdoaWNoIGhhcyBkaWZmZXJlbnQgdGlsaW5nIHN0cmlkZQorCSAqLworCWlmICgoYXJncy0+ dGlsaW5nX3NjaGVtZSA9PSAwICYmIGFyZ3MtPnRpbGluZ19zdHJpZGUgPD0gMykgfHwKKwkJKGFy Z3MtPnRpbGluZ19zY2hlbWUgPT0gMSAmJiBhcmdzLT50aWxpbmdfc3RyaWRlIDw9IDIpKSB7CisJ CWlwdnJfY3R4LT50aWxpbmdfc2NoZW1lID0gYXJncy0+dGlsaW5nX3NjaGVtZTsKKwkJaXB2cl9j dHgtPnRpbGluZ19zdHJpZGUgPSBhcmdzLT50aWxpbmdfc3RyaWRlOworCX0gZWxzZSB7CisJCUlQ VlJfREVCVUdfV0FSTigidW5zdXBwb3J0ZWQgdGlsaW5nIHNjaGVtZSAlZCBhbmQgc3RpZGUgJWQu XG4iLAorCQkJYXJncy0+dGlsaW5nX3NjaGVtZSwgYXJncy0+dGlsaW5nX3N0cmlkZSk7CisJCXJl dCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QKK2lw dnJfY29udGV4dF9kZXN0cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAg ICAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3Qg ZHJtX2lwdnJfY29udGV4dF9kZXN0cm95ICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2lwdnJf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faXB2cl9m aWxlX3ByaXZhdGUgKmZwcml2ID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKKwlzdHJ1Y3QgdmVk X3ByaXZhdGUgKnZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCXN0cnVjdCBpcHZy X2NvbnRleHQgKmlwdnJfY3R4ICA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisK KwlJUFZSX0RFQlVHX0VOVFJZKCJlbnRlclxuIik7CisJaXB2cl9jdHggPSAoc3RydWN0IGlwdnJf Y29udGV4dCAqKQorCQkJaWRyX2ZpbmQoJmRldl9wcml2LT5pcHZyX2N0eF9pZHIsIGFyZ3MtPmN0 eF9pZCk7CisJaWYgKCFpcHZyX2N0eCAgfHwgKGlwdnJfY3R4LT5pcHZyX2Zwcml2ICE9IGZpbGVf cHJpdi0+ZHJpdmVyX3ByaXYpKSB7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlJUFZSX0RFQlVH X1BNKCJWaWRlbzpyZW1vdmUgY29udGV4dCBwcm9maWxlICVkLCBlbnRyeXBvaW50ICVkXG4iLAor CQkoaXB2cl9jdHgtPmN0eF90eXBlID4+IDgpICYgMHhmZiwKKwkJKGlwdnJfY3R4LT5jdHhfdHlw ZSAmIDB4ZmYpKTsKKwltdXRleF9sb2NrKCZ2ZWRfcHJpdi0+dmVkX211dGV4KTsKKwlpZiAodmVk X3ByaXYtPmlwdnJfY3R4ID09IGlwdnJfY3R4ICkKKwkJdmVkX3ByaXYtPmlwdnJfY3R4ID0gTlVM TDsKKwltdXRleF91bmxvY2soJnZlZF9wcml2LT52ZWRfbXV0ZXgpOworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJmRldl9wcml2LT5pcHZyX2N0eF9sb2NrLCBpcnFfZmxhZ3MpOworCWxpc3RfZGVsKCZp cHZyX2N0eC0+aGVhZCk7CisJZnByaXYtPmN0eF9pZCA9IElQVlJfQ09OVEVYVF9JTlZBTElEX0lE OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcHZyX2N0eF9sb2NrLCBpcnFf ZmxhZ3MpOworCisJaWRyX3JlbW92ZSgmZGV2X3ByaXYtPmlwdnJfY3R4X2lkciwgaXB2cl9jdHgt PmN0eF9pZCk7CisKKwlrZnJlZShpcHZyX2N0eCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQzMl90CitpcHZyX21pc2NfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKKwkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faXB2cl9t aXNjICphcmdzID0gZGF0YTsKKwlpbnQzMl90IHJldCA9IDA7CisJdWludDY0X3QgdmFsdWU7CisK KwlJUFZSX0RFQlVHX0VOVFJZKCJlbnRlclxuIik7CisJaWYgKCFkZXZfcHJpdikgeworCQlJUFZS X0RFQlVHX1dBUk4oImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uLlxuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKwlzd2l0Y2ggKGFyZ3MtPmtleSkgeworCWNhc2UgSVBWUl9ERVZJQ0Vf SU5GTzogeworCQkvKiB0b2RvOiByZW1vdmUgaGFyZC1jb2RpbmcgKi8KKwkJdWludDMyX3QgZGV2 aWNlX2luZm8gPSAweGYzMSA8PCAxNjsKKwkJcmV0ID0gY29weV90b191c2VyKCh2b2lkIF9fdXNl ciAqKSgodW5zaWduZWQgbG9uZylhcmdzLT52YWx1ZSksCisJCQkmZGV2aWNlX2luZm8sIHNpemVv ZihkZXZpY2VfaW5mbykpOworCQlicmVhazsKKwl9CisJY2FzZSBJUFZSX1VQREFURV9USUxJTkc6 IHsKKwkJc3RydWN0IGRybV9pcHZyX3VwZGF0ZV90aWxpbmcgdGlsaW5nOworCQlzdHJ1Y3QgaXB2 cl9jb250ZXh0ICppcHZyX2N0eCAgPSBOVUxMOworCQlyZXQgPSBjb3B5X2Zyb21fdXNlcigmdGls aW5nLAorCQkJCSh2b2lkIF9fdXNlciAqKSgodW5zaWduZWQgbG9uZylhcmdzLT5hcmcpLAorCQkJ CXNpemVvZih0aWxpbmcpKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCisJCWlwdnJfY3R4ICA9 IChzdHJ1Y3QgaXB2cl9jb250ZXh0ICopCisJCQlpZHJfZmluZCgmZGV2X3ByaXYtPmlwdnJfY3R4 X2lkciwgdGlsaW5nLmN0eF9pZCk7CisJCWlmICghaXB2cl9jdHggfHwKKwkJCShpcHZyX2N0eC0+ aXB2cl9mcHJpdiAhPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2KSkgeworCQkJSVBWUl9ERUJVR19X QVJOKCJmYWlsIHRvIGZpbmQgY3R4ICVkIiwgdGlsaW5nLmN0eF9pZCk7CisJCQlyZXR1cm4gLUVO T0VOVDsKKwkJfQorCQlJUFZSX0RFQlVHX0dFTkVSQUwoIlZpZGVvOiB1cGRhdGUgdmlkZW8gdGls aW5nIGZvciBjdHggJWQsICIKKwkJCSJvbGQgdGlsaW5nIHNjaGVtZSBpcyAlZCwgb2xkIHRpbGlu ZyBzdHJpZGUgaXMgJWQsICIKKwkJCSJuZXcgdGlsaW5nIHNjaGVtZSBpcyAlZCwgbmV3IHRpbGlu ZyBzdHJpZGUgaXMgJWQuXG4iLAorCQkJdGlsaW5nLmN0eF9pZCwKKwkJCWlwdnJfY3R4IC0+dGls aW5nX3NjaGVtZSwgaXB2cl9jdHggLT50aWxpbmdfc3RyaWRlLAorCQkJdGlsaW5nLnRpbGluZ19z Y2hlbWUsIHRpbGluZy50aWxpbmdfc3RyaWRlKTsKKwkJaWYgKCh0aWxpbmcudGlsaW5nX3NjaGVt ZSA9PSAwICYmIHRpbGluZy50aWxpbmdfc3RyaWRlIDw9IDMpIHx8CisJCSh0aWxpbmcudGlsaW5n X3NjaGVtZSA9PSAxICYmIHRpbGluZy50aWxpbmdfc3RyaWRlIDw9IDIpKSB7CisJCQlpcHZyX2N0 eCAtPnRpbGluZ19zY2hlbWUgPSB0aWxpbmcudGlsaW5nX3NjaGVtZTsKKwkJCWlwdnJfY3R4IC0+ dGlsaW5nX3N0cmlkZSA9IHRpbGluZy50aWxpbmdfc3RyaWRlOworCQl9IGVsc2UgeworCQkJSVBW Ul9FUlJPUigidW5zdXBwb3J0ZWQgdGlsZSBzY2hlbWU6ICVkLCBzdGlkZTogJWQuXG4iLAorCQkJ CXRpbGluZy50aWxpbmdfc2NoZW1lLCB0aWxpbmcudGlsaW5nX3N0cmlkZSk7CisJCQlyZXQgPSAt RUlOVkFMOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlpZiAoY29weV9mcm9tX3Vz ZXIoJnZhbHVlLAorCQkJCSh2b2lkIF9fdXNlciAqKSgodW5zaWduZWQgbG9uZylhcmdzLT52YWx1 ZSksCisJCQkJc2l6ZW9mKHZhbHVlKSkpIHsKKwkJCUlQVlJfREVCVUdfV0FSTigiY29weV9mcm9t X3VzZXIgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCWlmIChjb3B5X3Rv X3VzZXIoKHZvaWQgX191c2VyICopKCh1bnNpZ25lZCBsb25nKWFyZ3MtPnZhbHVlKSwKKwkJCQkm dmFsdWUsIHNpemVvZih2YWx1ZSkpKSB7CisJCQlJUFZSX0RFQlVHX1dBUk4oImNvcHlfdG9fdXNl ciBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJcmV0ID0gLUVGQVVMVDsK KwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2lvY3Rs X2Rlc2MgaXB2cl9nZW1faW9jdGxzW10gPSB7CisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBWUl9DT05U RVhUX0NSRUFURSwKKwkJCWlwdnJfY29udGV4dF9jcmVhdGVfaW9jdGwsIERSTV9VTkxPQ0tFRCks CisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBWUl9DT05URVhUX0RFU1RST1ksCisJCQlpcHZyX2NvbnRl eHRfZGVzdHJveV9pb2N0bCwgRFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGX0RSVihJUFZS X01JU0MsCisJCQlpcHZyX21pc2NfaW9jdGwsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGX0RS VihJUFZSX0dFTV9FWEVDQlVGRkVSLAorCQkJaXB2cl9nZW1fZXhlY2J1ZmZlcl9pb2N0bCwgRFJN X0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGX0RSVihJUFZSX0dFTV9CVVNZLAor CQkJaXB2cl9nZW1fYnVzeV9pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9D VExfREVGX0RSVihJUFZSX0dFTV9DUkVBVEUsCisJCQlpcHZyX2dlbV9jcmVhdGVfaW9jdGwsIERS TV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBWUl9TWU5DX0NQVSwKKwkJCWlwdnJf Z2VtX3N5bmNjcHVfaW9jdGwsIERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBW Ul9HRU1fV0FJVCwKKwkJCWlwdnJfZ2VtX3dhaXRfaW9jdGwsIERSTV9BVVRIfERSTV9VTkxPQ0tF RCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBWUl9HRU1fVVNFUlBUUiwKKwkJCWlwdnJfZ2VtX3Vz ZXJwdHJfaW9jdGwsIERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBWUl9HRU1f TU1BUF9PRkZTRVQsCisJCQlpcHZyX2dlbV9tbWFwX29mZnNldF9pb2N0bCwgRFJNX1VOTE9DS0VE KSwKK307CisKK3N0YXRpYyB2b2lkIGlwdnJfZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOworCisJZGV2X3ByaXYtPmlwdnJfYm9fc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJpcHZy X2dlbV9vYmplY3QiLAorCQkJCSAgc2l6ZW9mKHVuaW9uIGRybV9pcHZyX2dlbV9vYmplY3RzKSwg MCwKKwkJCQkgIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CisKKwlJTklUX0xJU1RfSEVBRCgm ZGV2X3ByaXYtPmlwdnJfbW0udW5ib3VuZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3By aXYtPmlwdnJfbW0uYm91bmRfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5pcHZy X21tLm9iamVjdF9zdGF0X2xvY2spOworCisJZGV2X3ByaXYtPmlwdnJfbW0uaW50ZXJydXB0aWJs ZSA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGlwdnJfZ2VtX3NldHVwX21tdShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxpbmVhcl9zdGFydCwKKwkJ CQkgICAgICAgdW5zaWduZWQgbG9uZyBsaW5lYXJfZW5kLAorCQkJCSAgICAgICB1bnNpZ25lZCBs b25nIHRpbGluZ19zdGFydCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB0aWxpbmdfZW5kKQor eworCS8qIExldCBHRU0gTWFuYWdlIGFsbCBvZiB0aGUgYXBlcnR1cmUuCisJICoKKwkgKiBIb3dl dmVyLCBsZWF2ZSBvbmUgcGFnZSBhdCB0aGUgZW5kIHN0aWxsIGJvdW5kIHRvIHRoZSBzY3JhdGNo IHBhZ2UuCisJICogVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBsYWNlcyB3aGVyZSBoYXJkd2FyZSBh cHBhcmVudGx5IHByZWZldGNoZXMKKwkgKiBwYXN0IHRoZSBlbmQgb2YgdGhlIG9iamVjdCwgYW5k IHdlJ3ZlIHNlZW4gbXVsdGlwbGUgaGFuZ3Mgd2l0aCB0aGUKKwkgKiBHUFUgaGVhZCBwb2ludGVy IHN0dWNrIGluIGEgYmF0Y2hidWZmZXIgYm91bmQgYXQgbGFzdCBwYWdlIG9mIHRoZQorCSAqIGFw ZXJ0dXJlLiAgT25lIHBhZ2Ugc2hvdWxkIGJlIGVub3VnaCB0byBrZWVwIGFueSBwcmVmZXRjaGlu ZyBpbnNpZGUKKwkgKiBvZiB0aGUgYXBlcnR1cmUuCisJICovCisJc3RydWN0IGRybV9pcHZyX3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaXB2cl9hZGRyZXNz X3NwYWNlICphZGRyX3NwYWNlID0gJmRldl9wcml2LT5hZGRyX3NwYWNlOworCisJLyogdG9kbzog YWRkIHNhbml0eSBjaGVjayAqLworCWFkZHJfc3BhY2UtPmRldiA9IGRldl9wcml2LT5kZXY7CisJ SU5JVF9MSVNUX0hFQUQoJmFkZHJfc3BhY2UtPmFjdGl2ZV9saXN0KTsKKwlJTklUX0xJU1RfSEVB RCgmYWRkcl9zcGFjZS0+aW5hY3RpdmVfbGlzdCk7CisKKwkvKiBTdWJ0cmFjdCB0aGUgZ3VhcmQg cGFnZSAuLi4gKi8KKwlkcm1fbW1faW5pdCgmYWRkcl9zcGFjZS0+bGluZWFyX21tLCBsaW5lYXJf c3RhcnQsCisJCSAgICBsaW5lYXJfZW5kIC0gbGluZWFyX3N0YXJ0IC0gUEFHRV9TSVpFKTsKKwlk ZXZfcHJpdi0+YWRkcl9zcGFjZS5saW5lYXJfc3RhcnQgPSBsaW5lYXJfc3RhcnQ7CisJZGV2X3By aXYtPmFkZHJfc3BhY2UubGluZWFyX3RvdGFsID0gbGluZWFyX2VuZCAtIGxpbmVhcl9zdGFydDsK KworCWRybV9tbV9pbml0KCZhZGRyX3NwYWNlLT50aWxpbmdfbW0sIHRpbGluZ19zdGFydCwKKwkJ ICAgIHRpbGluZ19lbmQgLSB0aWxpbmdfc3RhcnQgLSBQQUdFX1NJWkUpOworCWRldl9wcml2LT5h ZGRyX3NwYWNlLnRpbGluZ19zdGFydCA9IHRpbGluZ19zdGFydDsKKwlkZXZfcHJpdi0+YWRkcl9z cGFjZS50aWxpbmdfdG90YWwgPSB0aWxpbmdfZW5kIC0gdGlsaW5nX3N0YXJ0OworfQorCitzdGF0 aWMgdm9pZCBpcHZyX2RvX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJLyog dG9kbzogbmVlZCBjaGVjayBpZiBuZWVkIGNsZWFuIHVwIG1tIGhlcmUgKi8KKwlpcHZyX3ZlZF91 bmluaXQoZGV2KTsKK30KKworc3RhdGljIGludDMyX3QgaXB2cl9kcm1fdW5sb2FkKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKKworCUJVR19PTighZGV2LT5wbGF0Zm9ybWRldik7CisJQlVHX09O KGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmVkX3Bvd2VyX3VzYWdlKSk7CisKKwlJUFZSX0RFQlVH X0VOVFJZKCJlbnRlcmVkLiIpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmZGV2LT5wbGF0Zm9ybWRl di0+ZGV2KTsKKwlpZiAoZGV2X3ByaXYpIHsKKwkJaWYgKGRldl9wcml2LT5pcHZyX2JvX3NsYWIp CisJCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZGV2X3ByaXYtPmlwdnJfYm9fc2xhYik7CisJCWlwdnJf ZmVuY2VfZHJpdmVyX2ZpbmkoZGV2X3ByaXYpOworCisJCWlmICh2ZWRfcG93ZXJfb24oZGV2KSkg eworCQkJaXB2cl9kb190YWtlZG93bihkZXYpOworCQkJV0FSTl9PTighdmVkX3Bvd2VyX29mZihk ZXYpKTsKKwkJfQorCQllbHNlCisJCQlJUFZSX0VSUk9SKCJmYWlsZWQgdG8gcG93ZXIgb24gVkVE XG4iKTsKKworCQlpZiAoZGV2X3ByaXYtPnZhbGlkYXRlX2N0eC5idWZmZXJzKQorCQkJdmZyZWUo ZGV2X3ByaXYtPnZhbGlkYXRlX2N0eC5idWZmZXJzKTsKKworCQlpZiAoZGV2X3ByaXYtPnBmX3Bk KSB7CisJCQlpcHZyX21tdV9mcmVlX3BhZ2VkaXIoZGV2X3ByaXYtPnBmX3BkKTsKKwkJCWRldl9w cml2LT5wZl9wZCA9IE5VTEw7CisJCX0KKwkJaWYgKGRldl9wcml2LT5tbXUpIHsKKwkJCWlwdnJf bW11X2RyaXZlcl90YWtlZG93bihkZXZfcHJpdi0+bW11KTsKKwkJCWRldl9wcml2LT5tbXUgPSBO VUxMOworCQl9CisKKwkJaWYgKGRldl9wcml2LT52ZWRfcmVnX2Jhc2UpIHsKKwkJCWlvdW5tYXAo ZGV2X3ByaXYtPnZlZF9yZWdfYmFzZSAtIGRldl9wcml2LT52ZWRfcmVnX29mZnNldCk7CisJCQlk ZXZfcHJpdi0+dmVkX3JlZ19iYXNlID0gTlVMTDsKKwkJCWRldl9wcml2LT52ZWRfcmVnX29mZnNl dCA9IDA7CisJCX0KKworCQlsaXN0X2RlbCgmZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmhlYWQpOwor CQlpZHJfcmVtb3ZlKCZkZXZfcHJpdi0+aXB2cl9jdHhfaWRyLCBkZXZfcHJpdi0+ZGVmYXVsdF9j dHguY3R4X2lkKTsKKwkJa2ZyZWUoZGV2X3ByaXYpOworCisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQzMl90IGlwdnJfZHJtX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5z aWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXY7 CisJaW50MzJfdCBjdHhfaWQsIHJldCA9IDA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxh dGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19tbWlvLCAqcmVzX3JlZzsKKwl2b2lkIF9faW9t ZW0qIG1taW9fYWRkcjsKKworCWRldl9wcml2ID0ga3phbGxvYyhzaXplb2YoKmRldl9wcml2KSwg R0ZQX0tFUk5FTCk7CisJaWYgKGRldl9wcml2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwor CisJZGV2LT5kZXZfcHJpdmF0ZSA9IGRldl9wcml2OworCWRldl9wcml2LT5kZXYgPSBkZXY7CisK KwlCVUdfT04oIWRldi0+cGxhdGZvcm1kZXYpOworCXBsYXRkZXYgPSBkZXYtPnBsYXRmb3JtZGV2 OworCisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmNtZGJ1Zl9tdXRleCk7CisJSU5JVF9MSVNUX0hF QUQoJmRldl9wcml2LT52YWxpZGF0ZV9jdHgudmFsaWRhdGVfbGlzdCk7CisKKwlkZXZfcHJpdi0+ cGNpX3Jvb3QgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCBQQ0lfREVWRk4oMCwgMCkpOworCWlm ICghZGV2X3ByaXYtPnBjaV9yb290KSB7CisJCWtmcmVlKGRldl9wcml2KTsKKwkJcmV0dXJuIC1F Tk9ERVY7CisJfQorCisJZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBsYXRkZXYsIDApOwor CWlmIChkZXYtPmlycSA8IDApIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZXJyOwor CX0KKworCXJlc19tbWlvID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBsYXRkZXYsIElPUkVTT1VS Q0VfTUVNLCAwKTsKKwlyZXNfcmVnID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBsYXRkZXYsIElP UkVTT1VSQ0VfUkVHLCAwKTsKKwlpZiAoIXJlc19tbWlvIHx8ICFyZXNfcmVnKSB7CisJCXJldCA9 IC1FTlhJTzsKKwkJZ290byBvdXRfZXJyOworCX0KKworCW1taW9fYWRkciA9IGlvcmVtYXBfd2Mo cmVzX21taW8tPnN0YXJ0LAorCQkJCQlyZXNfbW1pby0+ZW5kIC0gcmVzX21taW8tPnN0YXJ0KTsK KwlpZiAoSVNfRVJSKG1taW9fYWRkcikpIHsKKwkJcmV0ID0gLUVBQ0NFUzsKKwkJZ290byBvdXRf ZXJyOworCX0KKworCWRldl9wcml2LT52ZWRfcmVnX2Jhc2UgPSBtbWlvX2FkZHIgKyByZXNfcmVn LT5zdGFydDsKKwlkZXZfcHJpdi0+dmVkX3JlZ19vZmZzZXQgPSByZXNfcmVnLT5zdGFydDsKKwlJ UFZSX0RFQlVHX1ZFRCgidmVkX3JlZ19iYXNlIGlzICVwLCByYW5nZSBpcyAweCVsbHggLSAweCVs bHguXG4iLAorCQlkZXZfcHJpdi0+dmVkX3JlZ19iYXNlLAorCQlyZXNfcmVnLT5zdGFydCwgcmVz X3JlZy0+ZW5kKTsKKworCWlmICghdmVkX3Bvd2VyX29uKGRldikpIHsKKwkJcmV0ID0gLUVCVVNZ OworCQlnb3RvIG91dF9lcnI7CisJfQorCisJSVBWUl9ERUJVR19JTklUKCJNU1ZEWF9DT1JFX1JF Vl9PRkZTRVQgYnkgcmVhZGwgaXMgMHgleC5cbiIsCisJCXJlYWRsKGRldl9wcml2LT52ZWRfcmVn X2Jhc2UgKyAweDY0MCkpOworCUlQVlJfREVCVUdfSU5JVCgiTVNWRFhfQ09SRV9SRVZfT0ZGU0VU IGJ5IFZFRF9SRUdfUkVBRDMyIGlzIDB4JXguXG4iLAorCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9D T1JFX1JFVl9PRkZTRVQpKTsKKworCS8qIG1tdSBpbml0ICovCisJZGV2X3ByaXYtPm1tdSA9IGlw dnJfbW11X2RyaXZlcl9pbml0KCh2b2lkICopMCwKKwkJZHJtX2lwdnJfdHJhcF9wYWdlZmF1bHRz LAorCQkwLCBkZXZfcHJpdik7CisJaWYgKCFkZXZfcHJpdi0+bW11KSB7CisJCXJldCA9IC1FQlVT WTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWRldl9wcml2LT5wZl9wZCA9IGlwdnJfbW11X2Fs bG9jX3BkKGRldl9wcml2LT5tbXUsIDEsIDApOworCWlmICghZGV2X3ByaXYtPnBmX3BkKSB7CisJ CXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlpcHZyX21tdV9zZXRfcGRf Y29udGV4dChpcHZyX21tdV9nZXRfZGVmYXVsdF9wZChkZXZfcHJpdi0+bW11KSwgMCk7CisJaXB2 cl9tbXVfc2V0X3BkX2NvbnRleHQoZGV2X3ByaXYtPnBmX3BkLCAxKTsKKworCS8qCisJICogSW5p dGlhbGl6ZSBzZXF1ZW5jZSBudW1iZXJzIGZvciB0aGUgZGlmZmVyZW50IGNvbW1hbmQKKwkgKiBz dWJtaXNzaW9uIG1lY2hhbmlzbXMuCisJICovCisJZGV2X3ByaXYtPmxhc3Rfc2VxID0gMTsKKwor CWlwdnJfZ2VtX2luaXQoZGV2KTsKKworCWlwdnJfZ2VtX3NldHVwX21tdShkZXYsCisJCUlQVlJf TUVNX01NVV9MSU5FQVJfU1RBUlQsCisJCUlQVlJfTUVNX01NVV9MSU5FQVJfRU5ELAorCQlJUFZS X01FTV9NTVVfVElMSU5HX1NUQVJULAorCQlJUFZSX01FTV9NTVVfVElMSU5HX0VORCk7CisKKwlp cHZyX3ZlZF9pbml0KGRldik7CisKKwlXQVJOX09OKCF2ZWRfcG93ZXJfb2ZmKGRldikpOworCisJ ZGV2X3ByaXYtPnZlZF9wcml2YXRlLT52ZWRfbmVlZHNfcmVzZXQgPSAxOworCW11dGV4X2luaXQo JmRldl9wcml2LT52ZWRfcG1fbXV0ZXgpOworCWF0b21pY19zZXQoJmRldl9wcml2LT52ZWRfcG93 ZXJfdXNhZ2UsIDApOworCisJaXB2cl9mZW5jZV9kcml2ZXJfaW5pdChkZXZfcHJpdik7CisKKwlk ZXZfcHJpdi0+dmFsaWRhdGVfY3R4LmJ1ZmZlcnMgPQorCQl2bWFsbG9jKElQVlJfTlVNX1ZBTElE QVRFX0JVRkZFUlMgKgorCQkJc2l6ZW9mKHN0cnVjdCBpcHZyX3ZhbGlkYXRlX2J1ZmZlcikpOwor CWlmICghZGV2X3ByaXYtPnZhbGlkYXRlX2N0eC5idWZmZXJzKSB7CisJCXJldCA9IC1FTk9NRU07 CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwkvKiBpcHZyIGNvbnRleHQgaW5pdGlhbGl6YXRpb24g Ki8KKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPmlwdnJfY3R4X2xpc3QpOworCXNwaW5fbG9j a19pbml0KCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jayk7CisJaWRyX2luaXQoJmRldl9wcml2LT5p cHZyX2N0eF9pZHIpOworCS8qIGRlZmF1bHQgaXB2ciBjb250ZXh0IGlzIHVzZWQgZm9yIHNjYWxp bmcsIHJvdGF0aW9uIGNhc2UgKi8KKwljdHhfaWQgPSBpZHJfYWxsb2MoJmRldl9wcml2LT5pcHZy X2N0eF9pZHIsICZkZXZfcHJpdi0+ZGVmYXVsdF9jdHgsCisJCQkgICBJUFZSX01JTl9DT05URVhU X0lELCBJUFZSX01BWF9DT05URVhUX0lELAorCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKGN0eF9p ZCA8IDApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0X2VycjsKKwl9CisJZGV2X3By aXYtPmRlZmF1bHRfY3R4LmN0eF9pZCA9IGN0eF9pZDsKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3By aXYtPmRlZmF1bHRfY3R4LmhlYWQpOworCWRldl9wcml2LT5kZWZhdWx0X2N0eC5jdHhfdHlwZSA9 IDA7CisJZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmlwdnJfZnByaXYgPSBOVUxMOworCisJLyogZG9u J3QgbmVlZCBwcm90ZWN0IHdpdGggc3BpbmxvY2sgZHVyaW5nIG1vZHVsZSBsb2FkIHN0YWdlICov CisJbGlzdF9hZGQoJmRldl9wcml2LT5kZWZhdWx0X2N0eC5oZWFkLCAmZGV2X3ByaXYtPmlwdnJf Y3R4X2xpc3QpOworCWRldl9wcml2LT5kZWZhdWx0X2N0eC50aWxpbmdfc2NoZW1lID0gMDsKKwlk ZXZfcHJpdi0+ZGVmYXVsdF9jdHgudGlsaW5nX3N0cmlkZSA9IDA7CisKKwlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShkZXYtPnBsYXRmb3JtZGV2LCBkZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZkZXYt PnBsYXRmb3JtZGV2LT5kZXYpOworCisJcmV0dXJuIDA7CitvdXRfZXJyOgorCWlwdnJfZHJtX3Vu bG9hZChkZXYpOworCXJldHVybiByZXQ7CisKK30KKworLyoKKyAqIFRoZSAub3BlbigpIG1ldGhv ZCBpcyBjYWxsZWQgZXZlcnkgdGltZSB0aGUgZGV2aWNlIGlzIG9wZW5lZCBieSBhbgorICogYXBw bGljYXRpb24uIERyaXZlcnMgY2FuIGFsbG9jYXRlIHBlci1maWxlIHByaXZhdGUgZGF0YSBpbiB0 aGlzIG1ldGhvZCBhbmQKKyAqIHN0b3JlIHRoZW0gaW4gdGhlIHN0cnVjdCBkcm1fZmlsZTo6ZHJp dmVyX3ByaXYgZmllbGQuIE5vdGUgdGhhdCB0aGUgLm9wZW4oKQorICogbWV0aG9kIGlzIGNhbGxl ZCBiZWZvcmUgLmZpcnN0b3BlbigpLgorICovCitzdGF0aWMgaW50MzJfdAoraXB2cl9kcm1fb3Bl bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sK KwlzdHJ1Y3QgZHJtX2lwdnJfZmlsZV9wcml2YXRlICppcHZyX2ZwOworCUlQVlJfREVCVUdfRU5U UlkoImVudGVyXG4iKTsKKworCWlwdnJfZnAgPSBremFsbG9jKHNpemVvZigqaXB2cl9mcCksIEdG UF9LRVJORUwpOworCWlmICh1bmxpa2VseShpcHZyX2ZwID09IE5VTEwpKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWZpbGVfcHJpdi0+ZHJpdmVyX3ByaXYgPSBpcHZyX2ZwOworCisJcmV0dXJuIDA7 Cit9CisKKy8qCisgKiBUaGUgY2xvc2Ugb3BlcmF0aW9uIGlzIHNwbGl0IGludG8gLnByZWNsb3Nl KCkgYW5kIC5wb3N0Y2xvc2UoKSBtZXRob2RzLgorICogRHJpdmVycyBtdXN0IHN0b3AgYW5kIGNs ZWFudXAgYWxsIHBlci1maWxlIG9wZXJhdGlvbnMgaW4gdGhlIC5wcmVjbG9zZSgpCisgKiBtZXRo b2QuIEZvciBpbnN0YW5jZSBwZW5kaW5nIHZlcnRpY2FsIGJsYW5raW5nIGFuZCBwYWdlIGZsaXAg ZXZlbnRzIG11c3QgYmUKKyAqIGNhbmNlbGxlZC4gTm8gcGVyLWZpbGUgb3BlcmF0aW9uIGlzIGFs bG93ZWQgb24gdGhlIGZpbGUgaGFuZGxlIGFmdGVyCisgKiByZXR1cm5pbmcgZnJvbSB0aGUgLnBy ZWNsb3NlKCkgbWV0aG9kLgorICovCitzdGF0aWMgdm9pZAoraXB2cl9kcm1fcHJlY2xvc2Uoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJLyog aWYgdXNlciBkaWRuJ3QgZGVzdG9yeSBjdHggZXhwbGljaXRseSwgcmVtb3ZlIGN0eCBoZXJlICov CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2OworCXN0cnVjdCBkcm1faXB2cl9m aWxlX3ByaXZhdGUgKmlwdnJfZnByaXY7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdjsK KwlzdHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0eCAgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcg aXJxX2ZsYWdzOworCisJSVBWUl9ERUJVR19FTlRSWSgiZW50ZXJcbiIpOworCWRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpcHZyX2Zwcml2ID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsK Kwl2ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsKKworCWlmIChpcHZyX2Zwcml2LT5j dHhfaWQgPT0gSVBWUl9DT05URVhUX0lOVkFMSURfSUQpCisJCXJldHVybjsKKwlpcHZyX2N0eCA9 IChzdHJ1Y3QgaXB2cl9jb250ZXh0ICopCisJCQlpZHJfZmluZCgmZGV2X3ByaXYtPmlwdnJfY3R4 X2lkciwgaXB2cl9mcHJpdi0+Y3R4X2lkKTsKKwlpZiAoIWlwdnJfY3R4ICB8fCAoaXB2cl9jdHgt PmlwdnJfZnByaXYgIT0gaXB2cl9mcHJpdikpIHsKKwkJSVBWUl9ERUJVR19HRU5FUkFMKCJjdHgg Zm9yIGlkICVkIGhhcyBhbHJlYWR5IGRlc3Ryb3llZFxuIiwKKwkJCQlpcHZyX2Zwcml2LT5jdHhf aWQpOworCQlyZXR1cm47CisJfQorCUlQVlJfREVCVUdfUE0oIlZpZGVvOnJlbW92ZSBjb250ZXh0 IHByb2ZpbGUgJWQsIGVudHJ5cG9pbnQgJWRcbiIsCisJCShpcHZyX2N0eC0+Y3R4X3R5cGUgPj4g OCkgJiAweGZmLAorCQkoaXB2cl9jdHgtPmN0eF90eXBlICYgMHhmZikpOworCW11dGV4X2xvY2so JnZlZF9wcml2LT52ZWRfbXV0ZXgpOworCWlmICh2ZWRfcHJpdi0+aXB2cl9jdHggPT0gaXB2cl9j dHggKQorCQl2ZWRfcHJpdi0+aXB2cl9jdHggPSBOVUxMOworCW11dGV4X3VubG9jaygmdmVkX3By aXYtPnZlZF9tdXRleCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlwdnJfY3R4 X2xvY2ssIGlycV9mbGFncyk7CisJbGlzdF9kZWwoJmlwdnJfY3R4LT5oZWFkKTsKKwlpcHZyX2Zw cml2LT5jdHhfaWQgPSBJUFZSX0NPTlRFWFRfSU5WQUxJRF9JRDsKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jaywgaXJxX2ZsYWdzKTsKKworCWlkcl9yZW1v dmUoJmRldl9wcml2LT5pcHZyX2N0eF9pZHIsIGlwdnJfY3R4LT5jdHhfaWQpOworCisJa2ZyZWUo aXB2cl9jdHggKTsKKwlrZnJlZShpcHZyX2Zwcml2KTsKK30KKworc3RhdGljIGlycXJldHVybl90 IGlwdnJfaXJxX2hhbmRsZXIoaW50MzJfdCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKKwlXQVJOX09OKHZlZF9p cnFfaGFuZGxlcihkZXYpKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwdnJfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01P RFVMRSwKKwkub3BlbiA9IGRybV9vcGVuLAorCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJLnVu bG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0 X2lvY3RsID0gZHJtX2lvY3RsLAorI2VuZGlmCisJLm1tYXAgPSBkcm1fZ2VtX21tYXAsCit9Owor CitzdGF0aWMgaW50MzJfdCBpcHZyX2RybV9mcmVlemUoc3RydWN0IGRybV9kZXZpY2UgKmRldikK K3sKKwlpbnQzMl90IHJldDsKKwlpbnQzMl90IHBvd2VyX3VzYWdlOworCXN0cnVjdCBkcm1faXB2 cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJSVBWUl9ERUJVR19FTlRS WSgiZW50ZXJcbiIpOworCXBvd2VyX3VzYWdlID0gYXRvbWljX3JlYWQoJmRldl9wcml2LT52ZWRf cG93ZXJfdXNhZ2UpOworCVdBUk5fT04ocG93ZXJfdXNhZ2UgPCAwKTsKKwlpZiAocG93ZXJfdXNh Z2UgPiAwKSB7CisJCUlQVlJfREVCVUdfUE0oIlZFRCBwb3dlciB1c2FnZSBpcyAlZCwgc2tpcCBm cmVlemluZ1xuIiwgcG93ZXJfdXNhZ2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSB2ZWRf Y2hlY2tfaWRsZShkZXYpOworCWlmIChyZXQpIHsKKwkJSVBWUl9ERUJVR19QTSgiVkVEIGNoZWNr IGlkbGUgZmFpbDogJWQsIHNraXAgZnJlZXppbmdcbiIsIHJldCk7CisJCXJldHVybiAwOworCX0K KworCWlmIChkZXYtPmlycV9lbmFibGVkKSB7CisJCXJldCA9IGRybV9pcnFfdW5pbnN0YWxsKGRl dik7CisJCWlmIChyZXQpIHsKKwkJCUlQVlJfRVJST1IoIkZhaWxlZCB0byB1bmluc3RhbGwgZHJt IGlycSBoYW5kbGVyOiAlZFxuIiwgcmV0KTsKKwkJfQorCX0KKworCWlmIChpc192ZWRfb24oZGV2 KSkgeworCQlpZiAoIXZlZF9wb3dlcl9vZmYoZGV2KSkgeworCQkJSVBWUl9FUlJPUigiRmFpbGVk IHRvIHBvd2VyIG9mZiBWRURcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJSVBWUl9E RUJVR19QTSgiU3VjY2Vzc2Z1bGx5IHBvd2VyZWQgb2ZmXG4iKTsKKwl9IGVsc2UgeworCQlJUFZS X0RFQlVHX1BNKCJTa2lwZWQgcG93ZXItb2ZmIHNpbmNlIGFscmVhZHkgcG93ZXJlZCBvZmZcbiIp OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50MzJfdCBpcHZyX2RybV90aGF3KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKwlJUFZSX0RFQlVHX0VOVFJZKCJl bnRlclxuIik7CisJaWYgKCFpc192ZWRfb24oZGV2KSkgeworCQlpZiAoIXZlZF9wb3dlcl9vbihk ZXYpKSB7CisJCQlJUFZSX0VSUk9SKCJGYWlsZWQgdG8gcG93ZXIgb24gVkVEXG4iKTsKKwkJCXJl dHVybiAtRUZBVUxUOworCQl9CisJCUlQVlJfREVCVUdfUE0oIlN1Y2Nlc3NmdWxseSBwb3dlcmVk IG9uXG4iKTsKKwl9IGVsc2UgeworCQlJUFZSX0RFQlVHX1BNKCJTa2lwZWQgcG93ZXItb24gc2lu Y2UgYWxyZWFkeSBwb3dlcmVkIG9uXG4iKTsKKwl9CisKKwlpZiAoIWRldi0+aXJxX2VuYWJsZWQp IHsKKwkJcmV0ID0gZHJtX2lycV9pbnN0YWxsKGRldiwgZGV2LT5pcnEpOworCQlpZiAocmV0KSB7 CisJCQlJUFZSX0VSUk9SKCJGYWlsZWQgdG8gaW5zdGFsbCBkcm0gaXJxIGhhbmRsZXI6ICVkXG4i LCByZXQpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQzMl90IGlwdnJf cG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGxhdGZvcm1kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBsYXRmb3JtZGV2KTsKKwlJUFZS X0RFQlVHX1BNKCJQTSBzdXNwZW5kIGNhbGxlZFxuIik7CisJcmV0dXJuIGRybV9kZXY/IGlwdnJf ZHJtX2ZyZWV6ZShkcm1fZGV2KTogMDsKK30KK3N0YXRpYyBpbnQzMl90IGlwdnJfcG1fcmVzdW1l KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9y bWRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1f ZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGxhdGZvcm1kZXYpOworCUlQVlJfREVCVUdfUE0o IlBNIHJlc3VtZSBjYWxsZWRcbiIpOworCXJldHVybiBkcm1fZGV2PyBpcHZyX2RybV90aGF3KGRy bV9kZXYpOiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0 IGlwdnJfZ2VtX3ZtX29wcyA9IHsKKwkuZmF1bHQgPSBpcHZyX2dlbV9mYXVsdCwKKwkub3BlbiA9 IGRybV9nZW1fdm1fb3BlbiwKKwkuY2xvc2UgPSBkcm1fZ2VtX3ZtX2Nsb3NlLAorfTsKKworLyoK KyAqIGR1bXAgR0VNIEFQSSBpcyBtYWlubHkgZm9yIGR1bWIgYnVmZmVycyBzdWl0YWJsZSBmb3Ig c2Nhbm91dCwKKyAqIGl0IGlzIG5vdCBuZWVkZWQgZm9yIGlwdnIgZHJpdmVyLgorICogZ2VtX3Zt X29wcyBpcyB1c2VkIGZvciBtbWFwIGNhc2UsIGFsc28gbm90IG5lZWRlZCBmb3IgaXB2cgorICog dG9kbzogcHJpbWUgc3VwcG9ydCBjYW4gYmUgZW5hYmxlZCBsYXRlcgorICovCitzdGF0aWMgc3Ry dWN0IGRybV9kcml2ZXIgaXB2cl9kcm1fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBE UklWRVJfSEFWRV9JUlEgfCBEUklWRVJfR0VNLAorCS5sb2FkID0gaXB2cl9kcm1fbG9hZCwKKwku dW5sb2FkID0gaXB2cl9kcm1fdW5sb2FkLAorCS5vcGVuID0gaXB2cl9kcm1fb3BlbiwKKwkucHJl Y2xvc2UgPSBpcHZyX2RybV9wcmVjbG9zZSwKKwkuaXJxX2hhbmRsZXIgPSBpcHZyX2lycV9oYW5k bGVyLAorCS5nZW1fZnJlZV9vYmplY3QgPSBpcHZyX2dlbV9mcmVlX29iamVjdCwKKyNpZmRlZiBD T05GSUdfREVCVUdfRlMKKwkuZGVidWdmc19pbml0ID0gaXB2cl9kZWJ1Z2ZzX2luaXQsCisJLmRl YnVnZnNfY2xlYW51cCA9IGlwdnJfZGVidWdmc19jbGVhbnVwLAorI2VuZGlmCisJLmdlbV92bV9v cHMgPSAmaXB2cl9nZW1fdm1fb3BzLAorCS5pb2N0bHMgPSBpcHZyX2dlbV9pb2N0bHMsCisJLm51 bV9pb2N0bHMgPSBBUlJBWV9TSVpFKGlwdnJfZ2VtX2lvY3RscyksCisJLmZvcHMgPSAmaXB2cl9m b3BzLAorCS5uYW1lID0gSVBWUl9EUklWRVJfTkFNRSwKKwkuZGVzYyA9IElQVlJfRFJJVkVSX0RF U0MsCisJLmRhdGUgPSBJUFZSX0RSSVZFUl9EQVRFLAorCS5tYWpvciA9IElQVlJfRFJJVkVSX01B Sk9SLAorCS5taW5vciA9IElQVlJfRFJJVkVSX01JTk9SLAorCS5wYXRjaGxldmVsID0gSVBWUl9E UklWRVJfUEFUQ0hMRVZFTCwKK307CisKK3N0YXRpYyBpbnQzMl90IGlwdnJfcGxhdF9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCit7CisJcmV0dXJuIGRybV9wbGF0Zm9ybV9p bml0KCZpcHZyX2RybV9kcml2ZXIsIGRldmljZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IGlwdnJf cGxhdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBk cm1fZGV2aWNlICpkcm1fZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlJUFZS X0RFQlVHX1BNKCJlbnRlclxuIik7CisJZHJtX3B1dF9kZXYoZHJtX2Rldik7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBpcHZyX3BtX29wcyA9IHsKKwkuc3VzcGVu ZCA9IGlwdnJfcG1fc3VzcGVuZCwKKwkucmVzdW1lID0gaXB2cl9wbV9yZXN1bWUsCisJLmZyZWV6 ZSA9IGlwdnJfcG1fc3VzcGVuZCwKKwkudGhhdyA9IGlwdnJfcG1fcmVzdW1lLAorCS5wb3dlcm9m ZiA9IGlwdnJfcG1fc3VzcGVuZCwKKwkucmVzdG9yZSA9IGlwdnJfcG1fcmVzdW1lLAorI2lmZGVm IENPTkZJR19QTV9SVU5USU1FCisJLnJ1bnRpbWVfc3VzcGVuZCA9IGlwdnJfcG1fc3VzcGVuZCwK KwkucnVudGltZV9yZXN1bWUgPSBpcHZyX3BtX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXB2cl92bHZfcGxhdF9kcml2ZXIgPSB7CisJLmRyaXZl ciA9IHsKKwkJLm5hbWUgPSAiaXB2ci12ZWQtdmx2IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUs CisjaWZkZWYgQ09ORklHX1BNCisJCS5wbSA9ICZpcHZyX3BtX29wcywKKyNlbmRpZgorCX0sCisJ LnByb2JlID0gaXB2cl9wbGF0X3Byb2JlLAorCS5yZW1vdmUgPSBpcHZyX3BsYXRfcmVtb3ZlLAor fTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihpcHZyX3Zsdl9wbGF0X2RyaXZlcik7CitNT0RV TEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZy X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kcnYuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi43ZWRhOTVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2lwdnIvaXB2cl9kcnYuaApAQCAtMCwwICsxLDQ0MiBAQAorLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgKiBpcHZyX2Rydi5oOiBJUFZSIGRyaXZlciBjb21tb24gaGVhZGVyIGZpbGUKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVT QQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5k ZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0 aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZl aS5qaWFuZ0BpbnRlbC5jb20+CisgKiAgICBZYW8gQ2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5jb20+ CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JUFZSX0RSVl9IXworI2RlZmlu ZSBfSVBWUl9EUlZfSF8KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiaXB2cl9kcm0uaCIK KyNpbmNsdWRlICJpcHZyX21tdS5oIgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNs dWRlIDxsaW51eC9pby1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVk ZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Cisj aW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+Cisj aW5jbHVkZSA8bGludXgvcG1fcW9zLmg+CisjaW5jbHVkZSA8bGludXgvbW11X25vdGlmaWVyLmg+ CisKKyNkZWZpbmUgSVBWUl9EUklWRVJfQVVUSE9SCQkiSW50ZWwsIEluYy4iCisjZGVmaW5lIElQ VlJfRFJJVkVSX05BTUUJCSJpcHZyIgorI2RlZmluZSBJUFZSX0RSSVZFUl9ERVNDCQkiVnhkMzky IFZQOCBkcml2ZXIgZm9yIEJheXRyYWlsIgorI2RlZmluZSBJUFZSX0RSSVZFUl9EQVRFCQkiMjAx NDEwMjAiCisjZGVmaW5lIElQVlJfRFJJVkVSX01BSk9SCQkwCisjZGVmaW5lIElQVlJfRFJJVkVS X01JTk9SCQkxCisjZGVmaW5lIElQVlJfRFJJVkVSX1BBVENITEVWRUwJMAorCisvKiBHZW5lcmFs IGN1c3RvbWl6YXRpb246CisgKi8KKworI2RlZmluZSBJUFZSX01NVV9DQUNIRURfTUVNT1JZCSAg MHgwMDAxCS8qIEJpbmQgdG8gTU1VIG9ubHkgKi8KKyNkZWZpbmUgSVBWUl9NTVVfUk9fTUVNT1JZ CSAgCSAgMHgwMDAyCS8qIE1NVSBSTyBtZW1vcnkgKi8KKyNkZWZpbmUgSVBWUl9NTVVfV09fTUVN T1JZCSAgICAgIDB4MDAwNAkvKiBNTVUgV08gbWVtb3J5ICovCisKKy8qCisgKlBURSdzIGFuZCBQ REUncworICovCisKKyNkZWZpbmUgSVBWUl9QREVfTUFTSwkJMHgwMDNGRkZGRgorI2RlZmluZSBJ UFZSX1BERV9TSElGVAkJMjIKKyNkZWZpbmUgSVBWUl9QVEVfU0hJRlQJCTEyCisKKyNkZWZpbmUg SVBWUl9QVEVfVkFMSUQJCTB4MDAwMQkvKiBQVEUgLyBQREUgdmFsaWQgKi8KKyNkZWZpbmUgSVBW Ul9QVEVfV08JCQkweDAwMDIJLyogV3JpdGUgb25seSAqLworI2RlZmluZSBJUFZSX1BURV9STwkJ CTB4MDAwNAkvKiBSZWFkIG9ubHkgKi8KKyNkZWZpbmUgSVBWUl9QVEVfQ0FDSEVECQkweDAwMDgJ LyogQ1BVIGNhY2hlIGNvaGVyZW50ICovCisKKy8qCisgKiBsaW5lYXIgTU1VIHNpemUgaXMgNTEy TSA6IDAgLSA1MTJNCisgKiB0aWxpbmcgTU1VIHNpemUgaXMgNTEyTSA6IDUxMk0gLSAxMDI0TQor ICovCisjZGVmaW5lIElQVlJfTUVNX01NVV9MSU5FQVJfU1RBUlQJMHgwMDAwMDAwMAorI2RlZmlu ZSBJUFZSX01FTV9NTVVfTElORUFSX0VORAkJMHgyMDAwMDAwMAorI2RlZmluZSBJUFZSX01FTV9N TVVfVElMSU5HX1NUQVJUCTB4MjAwMDAwMDAKKyNkZWZpbmUgSVBWUl9NRU1fTU1VX1RJTElOR19F TkQJCTB4NDAwMDAwMDAKKworI2RlZmluZSBJUFZSX0dFTV9ET01BSU5fQ1BVCQkweDAwMDAwMDAx CisjZGVmaW5lIElQVlJfR0VNX0RPTUFJTl9HUFUJCTB4MDAwMDAwMDIKKworLyogdmlkZW8gY29u dGV4dCAqLworI2RlZmluZSBWQV9SVF9GT1JNQVRfUFJPVEVDVEVECTB4ODAwMDAwMDAKKworI2Rl ZmluZSBJUFZSX0NPTlRFWFRfSU5WQUxJRF9JRCAwCisjZGVmaW5lIElQVlJfTUlOX0NPTlRFWFRf SUQgMQorI2RlZmluZSBJUFZSX01BWF9DT05URVhUX0lEIDB4ZmYKKworLyogdmlkZW8gZXJyb3Ig c3RhdHVzIHJlcG9ydCAqLworI2RlZmluZSBNQVhfU0xJQ0VTX1BFUl9QSUNUVVJFIDcyCisjZGVm aW5lIE1BWF9ERUNPREVfQlVGRkVSUyAoMjQpCisjZGVmaW5lIFZFRF9NQVhfRUNfSU5TVEFOQ0Ug KDQpCisKKy8qCisgKkRlYnVnIHByaW50IGJpdHMgc2V0dGluZworICovCisjZGVmaW5lIElQVlJf RF9HRU5FUkFMCSgxIDw8IDApCisjZGVmaW5lIElQVlJfRF9JTklUCSgxIDw8IDEpCisjZGVmaW5l IElQVlJfRF9JUlEJKDEgPDwgMikKKyNkZWZpbmUgSVBWUl9EX0VOVFJZCSgxIDw8IDMpCisjZGVm aW5lIElQVlJfRF9QTQkoMSA8PCA0KQorI2RlZmluZSBJUFZSX0RfUkVHCSgxIDw8IDUpCisjZGVm aW5lIElQVlJfRF9WRUQJKDEgPDwgNikKKyNkZWZpbmUgSVBWUl9EX1dBUk4JKDEgPDwgNykKKwor I2RlZmluZSBJUFZSX0RFQlVHX0dFTkVSQUwoX2ZtdCwgX2FyZy4uLikgXAorCUlQVlJfREVCVUco SVBWUl9EX0dFTkVSQUwsIF9mbXQsICMjX2FyZykKKyNkZWZpbmUgSVBWUl9ERUJVR19JTklUKF9m bXQsIF9hcmcuLi4pIFwKKwlJUFZSX0RFQlVHKElQVlJfRF9JTklULCBfZm10LCAjI19hcmcpCisj ZGVmaW5lIElQVlJfREVCVUdfSVJRKF9mbXQsIF9hcmcuLi4pIFwKKwlJUFZSX0RFQlVHKElQVlJf RF9JUlEsIF9mbXQsICMjX2FyZykKKyNkZWZpbmUgSVBWUl9ERUJVR19FTlRSWShfZm10LCBfYXJn Li4uKSBcCisJSVBWUl9ERUJVRyhJUFZSX0RfRU5UUlksIF9mbXQsICMjX2FyZykKKyNkZWZpbmUg SVBWUl9ERUJVR19QTShfZm10LCBfYXJnLi4uKSBcCisJSVBWUl9ERUJVRyhJUFZSX0RfUE0sIF9m bXQsICMjX2FyZykKKyNkZWZpbmUgSVBWUl9ERUJVR19SRUcoX2ZtdCwgX2FyZy4uLikgXAorCUlQ VlJfREVCVUcoSVBWUl9EX1JFRywgX2ZtdCwgIyNfYXJnKQorI2RlZmluZSBJUFZSX0RFQlVHX1ZF RChfZm10LCBfYXJnLi4uKSBcCisJSVBWUl9ERUJVRyhJUFZSX0RfVkVELCBfZm10LCAjI19hcmcp CisjZGVmaW5lIElQVlJfREVCVUdfV0FSTihfZm10LCBfYXJnLi4uKSBcCisJSVBWUl9ERUJVRyhJ UFZSX0RfV0FSTiwgX2ZtdCwgIyNfYXJnKQorCisjZGVmaW5lIElQVlJfREVCVUcoX2ZsYWcsIF9m bXQsIF9hcmcuLi4pCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICh1bmxpa2VseSgoX2ZsYWcp ICYgZHJtX2lwdnJfZGVidWcpKQkJXAorCQkJcHJpbnRrKEtFUk5fSU5GTwkJCQlcCisJCQkgICAg ICAgIltpcHZyOjB4JTAyeDolc10gIiBfZm10ICwgX2ZsYWcsCVwKKwkJCSAgICAgICBfX2Z1bmNf XyAsICMjX2FyZyk7CQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBWUl9FUlJPUihfZm10 LCBfYXJnLi4uKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJCXByaW50ayhLRVJOX0VSUgkJCQkJ XAorCQkJICAgICAgICJbaXB2cjpFUlJPUjolc10gIiBfZm10ICwJCVwKKwkJCSAgICAgICBfX2Z1 bmNfXyAsICMjX2FyZyk7CQkJXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBzZXQgY3B1X3JlbGF4 ID0gMSBpbiBzeXNmcyB0byB1c2UgY3B1X3JlbGF4IGluc3RlYWQgb2YgdWRlbGF5IGJ5c3kgbG9v cAorICogc2V0IHVkZWxheV9kaXZpZGVyIHRvIHJlZHVjZSB0aGUgdWRlbGF5IHZhbHVlcyxlLmcu PSAxMCwgcmVkdWNlIDEwIHRpbWVzCisgKi8KKyNkZWZpbmUgSVBWUl9VREVMQVkodXNlYykJCQkJ CVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoZHJtX2lwdnJfY3B1cmVsYXggPT0gMCkJCQkJXAorCQlE Uk1fVURFTEFZKHVzZWMgLyBkcm1faXB2cl91ZGVsYXlkaXZpZGVyKTsJXAorCWVsc2UJCQkJCQkJ XAorCQljcHVfcmVsYXgoKTsJCQkJCVwKK30gd2hpbGUgKDApCisKK3R5cGVkZWYgc3RydWN0IGlw dnJfdmFsaWRhdGVfYnVmZmVyIGlwdnJfdmFsaWRhdGVfYnVmZmVyX3Q7CisKK3VpbnQzMl90IFJF R0lTVEVSX1JFQUQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgcmVnKTsKKyNkZWZp bmUgUkVHX1JFQUQocmVnKQkgICAgICAgUkVHSVNURVJfUkVBRChkZXYsIChyZWcpKQorCisjZGVm aW5lIHRvX2lwdnJfYm8oeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBkcm1faXB2cl9nZW1fb2Jq ZWN0LCBiYXNlKQorCitleHRlcm4gaW50IGRybV9pcHZyX2RlYnVnOworZXh0ZXJuIGludCBkcm1f aXB2cl91ZGVsYXlkaXZpZGVyOworZXh0ZXJuIGludCBkcm1faXB2cl9jcHVyZWxheDsKKy8qKgor ICpzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9jb250ZXh0CisgKgorICpAYnVmZmVyczoJIGFycmF5IG9m IHByZS1hbGxvY2F0ZWQgdmFsaWRhdGUgYnVmZmVycy4KKyAqQHVzZWRfYnVmZmVyczogbnVtYmVy IG9mIGJ1ZmZlcnMgaW4gQGJ1ZmZlcnMgYXJyYXkgY3VycmVudGx5IGluIHVzZS4KKyAqQHZhbGlk YXRlX2J1ZmZlcjogYnVmZmVycyB2YWxpZGF0ZWQgZnJvbSB1c2VyLXNwYWNlLgorICpAa2Vybl92 YWxpZGF0ZV9idWZmZXJzIDogYnVmZmVycyB2YWxpZGF0ZWQgZnJvbSBrZXJuZWwtc3BhY2UuCisg KkBmZW5jZV9mbGFncyA6IEZlbmNlIGZsYWdzIHRvIGJlIHVzZWQgZm9yIGZlbmNlIGNyZWF0aW9u LgorICoKKyAqVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBkdXJpbmcgZXhlY2J1ZiB2YWxpZGF0aW9u LgorICovCitzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9jb250ZXh0IHsKKwlpcHZyX3ZhbGlkYXRlX2J1 ZmZlcl90ICpidWZmZXJzOworCXVpbnQzMl90IHVzZWRfYnVmZmVyczsKKwlzdHJ1Y3QgbGlzdF9o ZWFkIHZhbGlkYXRlX2xpc3Q7Cit9OworCitzdHJ1Y3QgaXB2cl9tbXVfZHJpdmVyOworc3RydWN0 IGlwdnJfbW11X3BkOworCisvKgorICogbWF5IGJlIG5vdCBuZWVkZWQsIEJPcyBhcmUgYWx3YXlz IGJvdW5kIGludG8gbW11LAorICogc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgYm91bmRfbGlzdCBh bmQgdW5ib3VuZF9saXN0CisgKi8KK3N0cnVjdCBpcHZyX2dlbV9tbSB7CisJLyoqIExpc3Qgb2Yg YWxsIG9iamVjdHMgaW4gbW11IHNwYWNlLiBVc2VkIHRvIHJlc3RvcmUgbW11CisJICogbWFwcGlu Z3Mgb24gcmVzdW1lICovCisJc3RydWN0IGxpc3RfaGVhZCBib3VuZF9saXN0OworCS8qKgorCSAq IExpc3Qgb2Ygb2JqZWN0cyB3aGljaCBhcmUgbm90IGJvdW5kIHRvIHRoZSBtbXUgKHRodXMKKwkg KiBhcmUgaWRsZSBhbmQgbm90IHVzZWQgYnkgdGhlIEdQVSkgYnV0IHN0aWxsIGhhdmUKKwkgKiAo cHJlc3VtYWJseSB1bmNhY2hlZCkgcGFnZXMgc3RpbGwgYXR0YWNoZWQuCisJICovCisJc3RydWN0 IGxpc3RfaGVhZCB1bmJvdW5kX2xpc3Q7CisKKwkvKioKKwkgKiBBcmUgd2UgaW4gYSBub24taW50 ZXJydXB0aWJsZSBzZWN0aW9uIG9mIGNvZGUgbGlrZQorCSAqIG1vZGVzZXR0aW5nPworCSAqLwor CWJvb2wgaW50ZXJydXB0aWJsZTsKKworCS8qIGFjY291bnRpbmcsIHVzZWZ1bCBmb3IgdXNlcmxh bmQgZGVidWdnaW5nICovCisJc3BpbmxvY2tfdCBvYmplY3Rfc3RhdF9sb2NrOworCXNpemVfdCBv YmplY3RfbWVtb3J5OworCXVpbnQzMl90IG9iamVjdF9jb3VudDsKK307CisKK3N0cnVjdCBpcHZy X2FkZHJlc3Nfc3BhY2UgeworCXN0cnVjdCBkcm1fbW0gbGluZWFyX21tOworCXN0cnVjdCBkcm1f bW0gdGlsaW5nX21tOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJdW5zaWduZWQgbG9uZyBs aW5lYXJfc3RhcnQ7CisJc2l6ZV90IGxpbmVhcl90b3RhbDsKKwl1bnNpZ25lZCBsb25nIHRpbGlu Z19zdGFydDsKKwlzaXplX3QgdGlsaW5nX3RvdGFsOworCisJLyogbmVlZCBpdCBkdXJpbmcgY2xl YXJfcmFuZ2UgKi8KKwlzdHJ1Y3QgeworCQlkbWFfYWRkcl90IGFkZHI7CisJCXN0cnVjdCBwYWdl ICpwYWdlOworCX0gc2NyYXRjaDsKKworCS8qKgorCSAqIExpc3Qgb2Ygb2JqZWN0cyBjdXJyZW50 bHkgaW52b2x2ZWQgaW4gcmVuZGVyaW5nLgorCSAqCisJICogSW5jbHVkZXMgYnVmZmVycyBoYXZp bmcgdGhlIGNvbnRlbnRzIG9mIHRoZWlyIEdQVSBjYWNoZXMKKwkgKiBmbHVzaGVkLCBub3QgbmVj ZXNzYXJpbHkgcHJpbWl0aXZlcy4gIGxhc3RfcmVuZGVyaW5nX3NlcW5vCisJICogcmVwcmVzZW50 cyB3aGVuIHRoZSByZW5kZXJpbmcgaW52b2x2ZWQgd2lsbCBiZSBjb21wbGV0ZWQuCisJICoKKwkg KiBBIHJlZmVyZW5jZSBpcyBoZWxkIG9uIHRoZSBidWZmZXIgd2hpbGUgb24gdGhpcyBsaXN0Lgor CSAqLworCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX2xpc3Q7CisKKwkvKioKKwkgKiBMUlUgbGlz dCBvZiBvYmplY3RzIHdoaWNoIGFyZSBub3QgaW4gdGhlIHJpbmdidWZmZXIgYW5kCisJICogYXJl IHJlYWR5IHRvIHVuYmluZCwgYnV0IGFyZSBzdGlsbCBpbiB0aGUgR1RULgorCSAqCisJICogbGFz dF9yZW5kZXJpbmdfc2Vxbm8gaXMgMCB3aGlsZSBhbiBvYmplY3QgaXMgaW4gdGhpcyBsaXN0Lgor CSAqCisJICogQSByZWZlcmVuY2UgaXMgbm90IGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0 aGlzIGxpc3QsCisJICogYXMgbWVyZWx5IGJlaW5nIEdUVC1ib3VuZCBzaG91bGRuJ3QgcHJldmVu dCBpdHMgYmVpbmcKKwkgKiBmcmVlZCwgYW5kIHdlJ2xsIHB1bGwgaXQgb2ZmIHRoZSBsaXN0IGlu IHRoZSBmcmVlIHBhdGguCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBpbmFjdGl2ZV9saXN0Owor CisJLyogdG9kbzogaXQgc2hvdWxkIGJlIG5lZWRlZCB0byBhdm9pZCBzZWN1cml0eSBwcm9ibGVt LAorCSAqIHdoZW4gZGVzdHJveSBibywgbmVlZCBzZXQgc2NyYXRjaCBwYWdlIHRoZSBibyBtbXUg ZW50cnkKKwkgKi8KKwl2b2lkICgqY2xlYXJfcmFuZ2UpKHN0cnVjdCBpcHZyX2FkZHJlc3Nfc3Bh Y2UgKnZtLAorCQkJICAgIHVuc2lnbmVkIGludCBmaXJzdF9lbnRyeSwKKwkJCSAgICB1bnNpZ25l ZCBpbnQgbnVtX2VudHJpZXMpOworCS8qIHRvZG86IGRpcmVjdGx5IGNhbGwgbW11IGZ1bmN0aW9u LCB0aGUgZnVuYyBwdHIgaXMgbm90IG5lZWRlZCAqLworCXZvaWQgKCppbnNlcnRfZW50cmllcyko c3RydWN0IGlwdnJfYWRkcmVzc19zcGFjZSAqdm0sCisJCQkgICAgICAgc3RydWN0IHNnX3RhYmxl ICpzdCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RfZW50cnksCisJCQkgICAgICAgaW50 IGNhY2hlX2xldmVsKTsKKwl2b2lkICgqY2xlYW51cCkoc3RydWN0IGlwdnJfYWRkcmVzc19zcGFj ZSAqdm0pOworfTsKKworc3RydWN0IGlwdnJfZmVuY2VfZHJpdmVyIHsKKwl1aW50MTZfdAlzeW5j X3NlcTsKKwlhdG9taWNfdAlzaWduYWxlZF9zZXE7CisJdW5zaWduZWQgbG9uZwlsYXN0X2FjdGl2 aXR5OworCWJvb2wJCWluaXRpYWxpemVkOworCXNwaW5sb2NrX3QJZmVuY2VfbG9jazsKK307CisK K3N0cnVjdCBpcHZyX2NvbnRleHQgeworCS8qIHVzZWQgdG8gbGluayBpbnRvIGlwdnJfY3R4X2xp c3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJdWludDMyX3QgY3R4X2lkOworCS8qIHVz ZWQgdG8gZG91YmxlIGNoZWNrIGN0eCB3aGVuIGZpbmQgd2l0aCBpZHIsIG1heSBiZSByZW1vdmVk ICovCisJc3RydWN0IGRybV9pcHZyX2ZpbGVfcHJpdmF0ZSAqaXB2cl9mcHJpdjsgLyogRFJNIGRl dmljZSBmaWxlIHBvaW50ZXIgKi8KKwl1aW50MzJfdCBjdHhfdHlwZTsgLyogcHJvZmlsZSA8PCA4 IHwgZW50cnlwb2ludCAqLworCisJdWludDE2X3QgY3VyX3NlcTsKKworCS8qIGZvciBJTUcgRERL LCBvbmx5IHVzZSB0aWxpbmcgZm9yIDJrIGFuZCA0ayBidWZmZXIgc3RyaWRlICovCisJLyoKKwkg KiBmb2xsb3dpbmcgdGlsaW5nIHN0cmlkZXMgZm9yIFZFRCBhcmUgc3VwcG9ydGVkOgorCSAqIHN0 cmlkZSAwOiA1MTIgZm9yIHNjaGVtZSAwLCAxMDI0IGZvciBzY2hlbWUgMQorCSAqIHN0cmlkZSAx OiAxMDI0IGZvciBzY2hlbWUgMCwgMjA0OCBmb3Igc2NoZW1lIDEKKwkgKiBzdHJpZGUgMjogMjA0 OCBmb3Igc2NoZW1lIDAsIDQwOTYgZm9yIHNjaGVtZSAxCisJICogc3RyaWRlIDM6IDQwOTYgZm9y IHNjaGVtZSAwCisJICovCisJdWludDhfdCB0aWxpbmdfc3RyaWRlOworCS8qCisJICogc2NoZW1l IDA6IHRpbGUgaXMgMjU2eDE2LCB3aGlsZSBtaW5pbWFsIHRpbGUgc3RyaWRlIGlzIDUxMgorCSAq IHNjaGVtZSAxOiB0aWxlIGlzIDUxMng4LCB3aGlsZSBtaW5pbWFsIHRpbGUgc3RyaWRlIGlzIDEw MjQKKwkgKi8KKwl1aW50OF90IHRpbGluZ19zY2hlbWU7Cit9OworCit0eXBlZGVmIHN0cnVjdCBk cm1faXB2cl9wcml2YXRlIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBwY2lf ZGV2ICpwY2lfcm9vdDsKKwkvKiBwY2kgcmV2aXNpb24gaWQgZm9yIEIwOkQyOkYwICovCisJdWlu dDhfdCBwbGF0Zm9ybV9yZXZfaWQ7CisKKwl1aW50MzJfdCBkZXZpY2VfaWQ7CisKKwkvKiBJTUcg dmlkZW8gY29udGV4dCAqLworCXN0cnVjdCBsaXN0X2hlYWQgaXB2cl9jdHhfbGlzdDsKKwlzcGlu bG9ja190IGlwdnJfY3R4X2xvY2s7CisJc3RydWN0IGlkciBpcHZyX2N0eF9pZHI7CisJc3RydWN0 IGlwdnJfY29udGV4dCBkZWZhdWx0X2N0eDsKKworCS8qIFBNIHJlbGF0ZWQgKi8KKwlzdHJ1Y3Qg bXV0ZXggdmVkX3BtX211dGV4OworCWF0b21pY190IHZlZF9wb3dlcl91c2FnZTsKKworCS8qIGV4 ZWMgcmVsYXRlZCAqLworCXN0cnVjdCBtdXRleCBjbWRidWZfbXV0ZXg7CisJc3RydWN0IGlwdnJf dmFsaWRhdGVfY29udGV4dCB2YWxpZGF0ZV9jdHg7CisKKwkvKiBJTUcgTU1VIHNwZWNpZmljICov CisJc3RydWN0IGlwdnJfbW11X2RyaXZlciAqbW11OworCXN0cnVjdCBpcHZyX21tdV9wZCAqcGZf cGQ7CisJYXRvbWljX3QgaXB2cl9tbXVfaW52YWxkYzsKKworCS8qIEdFTSBtbSByZWxhdGVkICov CisJc3RydWN0IGlwdnJfZ2VtX21tIGlwdnJfbW07CisJc3RydWN0IGttZW1fY2FjaGUgKmlwdnJf Ym9fc2xhYjsKKwlzdHJ1Y3QgaXB2cl9hZGRyZXNzX3NwYWNlIGFkZHJfc3BhY2U7CisKKwkvKiBm ZW5jZSByZWxhdGVkICovCisJdWludDMyX3QgbGFzdF9zZXE7CisJd2FpdF9xdWV1ZV9oZWFkX3Qg ZmVuY2VfcXVldWU7CisJc3RydWN0IGlwdnJfZmVuY2VfZHJpdmVyIGZlbmNlX2RydjsKKworCS8q CisJICogVkVEIHNwZWNpZmljCisJICovCisJdWludDhfdCBfX2lvbWVtKiB2ZWRfcmVnX2Jhc2U7 CisJdW5zaWduZWQgbG9uZyB2ZWRfcmVnX29mZnNldDsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZl ZF9wcml2YXRlOworfWRybV9pcHZyX3ByaXZhdGVfdDsKKworc3RydWN0IHZlZF9tYl9yZWdpb24g eworCXVpbnQzMl90IHN0YXJ0OworCXVpbnQzMl90IGVuZDsKK307CisKK3N0cnVjdCB2ZWRfZGVj b2RlX3N0YXR1cyB7CisJdWludDMyX3QgbnVtX3JlZ2lvbjsKKwlzdHJ1Y3QgdmVkX21iX3JlZ2lv biBtYl9yZWdpb25zW01BWF9TTElDRVNfUEVSX1BJQ1RVUkVdOworfTsKKworc3RydWN0IHZlZF9m cmFtZV9pbmZvIHsKKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3Qgc3VyZmFjZV9pZDsKKwl1 aW50MTZfdCBmZW5jZTsKKwl1aW50MzJfdCBidWZmZXJfc3RyaWRlOworCXVpbnQzMl90IGJ1ZmZl cl9zaXplOworCXVpbnQzMl90IHBpY3R1cmVfd2lkdGhfbWI7CisJdWludDMyX3QgZndfc3RhdHVz OworCXVpbnQzMl90IHNpemVfbWI7CisJc3RydWN0IHZlZF9kZWNvZGVfc3RhdHVzIGRlY29kZV9z dGF0dXM7Cit9OworCitzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdDsKKworLyogVkVEIHByaXZh dGUgc3RydWN0dXJlICovCitzdHJ1Y3QgdmVkX3ByaXZhdGUgeworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXY7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2OworCisJLyogdXNlZCB0 byByZWNvcmQgc2VxIGdvdCBmcm9tIGlycSBmdy10by1ob3N0IG1zZyAqLworCXVpbnQxNl90IHZl ZF9jdXJfc2VxOworCisJLyoKKwkgKiBWRUQgUmVuZGVjIE1lbW9yeQorCSAqLworCXN0cnVjdCBk cm1faXB2cl9nZW1fb2JqZWN0ICpjY2IwOworCXVpbnQzMl90IGJhc2VfYWRkcjA7CisJc3RydWN0 IGRybV9pcHZyX2dlbV9vYmplY3QgKmNjYjE7CisJdWludDMyX3QgYmFzZV9hZGRyMTsKKwlib29s IHJlbmRlY19pbml0aWFsaXplZDsKKworCS8qIFZFRCBmaXJtd2FyZSByZWxhdGVkICovCisJc3Ry dWN0IGRybV9pcHZyX2dlbV9vYmplY3QgICpmd19ibzsKKwl1aW50MzJfdCBmd19vZmZzZXQ7CisJ dWludDMyX3QgbXR4X21lbV9zaXplOworCWJvb2wgZndfbG9hZGVkX3RvX2JvOworCWJvb2wgdmVk X2Z3X2xvYWRlZDsKKwl2b2lkICp2ZWRfZndfcHRyOworCWludCB2ZWRfZndfc2l6ZTsKKwl1aW50 MzJfdCBmd19iMF91cGxvYWRlZDsKKwkvKgorCSogdGhlcmUgYXJlIHR3byB3YXlzIHRvIGxvYWQg Znc6CisJKiAxLCBsb2FkIGZ3IGRpcmVjdGx5IGJ5IGtlcm5lbCBkcml2ZXIsIGJ5dCB1c2UgdGhp cyB3YXkKKwkqIDIsIGxvYWQgYnkgcHVuaXQsIHdoaWNoIGhhcyBzZWN1cml0eSBiZW5lZml0cwor CSovCisJYm9vbCBmd19sb2FkZWRfYnlfcHVuaXQ7CisKKwkvKgorCSAqIHZlZCBjb21tYW5kIHF1 ZXVlCisJICovCisJc3BpbmxvY2tfdCB2ZWRfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdmVkX211dGV4 OworCXN0cnVjdCBsaXN0X2hlYWQgdmVkX3F1ZXVlOworCS8qIGJ1c3kgbWVhbnMgY21kIHN1Ym1p dHRlZCB0byBmdywgd2hpbGUgaXJxIGhhc24ndCBiZWVuIHJlY2VpZXZlZCAqLworCWJvb2wgdmVk X2J1c3k7CisJLyogVkVEIHN0YXR1cyByZWFkIGZyb20gcmVnaXN0ZXIgMHgyMEQwICovCisJdWlu dDMyX3QgdmVkX2h3X2J1c3k7CisKKwl1aW50MzJfdCB2ZWRfZGFzaF9hY2Nlc3NfY3RybDsKKwl1 aW50MzJfdCBkZWNvZGluZ19lcnI7CisKKwlzdHJ1Y3QgdmVkX2ZyYW1lX2luZm8gZnJhbWVfaW5m b1tNQVhfREVDT0RFX0JVRkZFUlNdOworCXN0cnVjdCB2ZWRfZGVjb2RlX3N0YXR1cyBkZWNvZGVf c3RhdHVzOworCXVpbnQzMl90IGhvc3RfYmVfb3BwX2VuYWJsZWQ7CisKKwkvKiBlcnJvciBjb25j ZWFsbWVudCByZWxhdGVkICovCisJc3RydWN0IHdvcmtfc3RydWN0IGVjX3dvcms7CisJc3RydWN0 IGRybV9maWxlICp0ZmlsZTsgLyogcHJvdGVjdGVkIGJ5IGNtZGJ1Zl9tdXRleCAqLworCXN0cnVj dCB2ZWRfZWNfY29udGV4dCAqdmVkX2VjX2N0eFtWRURfTUFYX0VDX0lOU1RBTkNFXTsKKwlzdHJ1 Y3QgdmVkX2VjX2NvbnRleHQgKmN1cl9tc3ZkeF9lY19jdHg7CisJdWludDMyX3QgZGVibG9ja19j bWRfb2Zmc2V0OworCWludCBudW1fY21kOworCXVpbnQzMl90IHZlY19lY19tZW1fZGF0YVs1XTsK Kwl1aW50MzJfdCB2ZWNfZWNfbWVtX3NhdmVkOworCisJLyogcG0gcmVsYXRlZCAqLworCWludCB2 ZWRfbmVlZHNfcmVzZXQ7CisJdW5zaWduZWQgaW50IHZlZF9wbXN0YXRlOworCXN0cnVjdCBrZXJu ZnNfbm9kZSAqc3lzZnNfcG1zdGF0ZTsKKwl1aW50MzJfdCBwbV9nYXRpbmdfY291bnQ7CisJLyog cG0gc3VzcGVuZCB3cSwgdXNlIHdxIGZvciBjdXJyZW50IGltcGxlbWVudGF0aW9uICovCisJc3Ry dWN0IGRlbGF5ZWRfd29yayB2ZWRfc3VzcGVuZF93cTsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qg dmVkX3N1c3BlbmRfdHE7CisKKwkvKiBwcm90ZWN0ZWQgYnkgdmVkX211dGV4ICovCisJLyogY3Vy cmVudCB2ZWQgZGVjb2RlIGNvbnRleHQgKi8KKwlzdHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0 eDsKKworCXN0cnVjdCBwYWdlICptbXVfcmVjb3Zlcl9wYWdlOworfTsKKworc3RydWN0IGRybV9p cHZyX2ZpbGVfcHJpdmF0ZSB7CisJdWludDMyX3QgY3R4X2lkOworfTsKKworI2VuZGlmCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2V4ZWMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pcHZyL2lwdnJfZXhlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3 OWU2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2V4ZWMu YwpAQCAtMCwwICsxLDUzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpcHZyX2V4ZWMuYzog SVBWUiBjb21tYW5kIGJ1ZmZlciBleGVjdXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQg SW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQWxsIFJpZ2h0cyBSZXNl cnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBi dXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3Jl IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1 MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgor ICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+Cisg KiAgICBZYW8gQ2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworCisjaW5jbHVkZSAiaXB2cl9leGVjLmgiCisjaW5jbHVkZSAiaXB2cl9nZW0uaCIKKyNp bmNsdWRlICJpcHZyX21tdS5oIgorI2luY2x1ZGUgImlwdnJfYnVmZmVyLmgiCisjaW5jbHVkZSAi aXB2cl9mZW5jZS5oIgorI2luY2x1ZGUgImlwdnJfdHJhY2UuaCIKKyNpbmNsdWRlICJ2ZWRfZncu aCIKKyNpbmNsdWRlICJ2ZWRfbXNnLmgiCisjaW5jbHVkZSAidmVkX3JlZy5oIgorI2luY2x1ZGUg InZlZF9lYy5oIgorI2luY2x1ZGUgInZlZF9pbml0LmgiCisjaW5jbHVkZSAidmVkX3BtLmgiCisj aW5jbHVkZSAidmVkX2NtZC5oIgorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxs aW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworc3RhdGljIGlu bGluZSBib29sIGlwdnJfYm9faXNfcmVzZXJ2ZWQoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3Qg Km9iaikKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJm9iai0+cmVzZXJ2ZWQpOworfQorCitzdGF0 aWMgaW50MzJfdAoraXB2cl9ib193YWl0X3VucmVzZXJ2ZWQoc3RydWN0IGRybV9pcHZyX2dlbV9v YmplY3QgKm9iaiwgYm9vbCBpbnRlcnJ1cHRpYmxlKQoreworCWlmIChpbnRlcnJ1cHRpYmxlKSB7 CisJCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUob2JqLT5ldmVudF9xdWV1ZSwKKwkJ CQkJICAgICAgICFpcHZyX2JvX2lzX3Jlc2VydmVkKG9iaikpOworCX0gZWxzZSB7CisJCXdhaXRf ZXZlbnQob2JqLT5ldmVudF9xdWV1ZSwgIWlwdnJfYm9faXNfcmVzZXJ2ZWQob2JqKSk7CisJCXJl dHVybiAwOworCX0KK30KKworLyoqCisgKiBpcHZyX2JvX3Jlc2VydmUgLSByZXNlcnZlIHRoZSBn aXZlbiBibworICoKKyAqIEBvYmo6ICAgICBUaGUgYnVmZmVyIG9iamVjdCB0byByZXNlcnZlLgor ICogQGludGVycnVwdGlibGU6ICAgICB3aGV0aGVyIHRoZSB3YWl0aW5nIGlzIGludGVycnVwdGli bGUgb3Igbm90LgorICogQG5vX3dhaXQ6ICAgIGZsYWcgdG8gaW5kaWNhdGUgcmV0dXJuaW5nIGlt bWVkaWF0ZWx5CisgKgorICogUmV0dXJuczoKKyAqIC1FQlVTWTogaWYgYm8gaXMgYnVzeSBhbmQg QG5vX3dhaXQgaXMgdHJ1ZS4KKyAqIC1FUkVTVEFSVFNZUyBpZiB3YWl0aW5nIHdhcyBpbnRlcnJ1 cHRlZCBieSBhIHNpZ25hbC4KKyAqIDAgaWYgcmVzZXJ2aW5nIHN1Y2NlZWRlZC4KKyAqLworaW50 MzJfdCBpcHZyX2JvX3Jlc2VydmUoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaiwKKwkJ CWJvb2wgaW50ZXJydXB0aWJsZSwgYm9vbCBub193YWl0KQoreworCWludDMyX3QgcmV0OworCisJ d2hpbGUgKHVubGlrZWx5KGF0b21pY194Y2hnKCZvYmotPnJlc2VydmVkLCAxKSAhPSAwKSkgewor CQlpZiAobm9fd2FpdCkKKwkJCXJldHVybiAtRUJVU1k7CisJCUlQVlJfREVCVUdfR0VORVJBTCgi d2FpdCBibyB1bnJlc2VydmVkLCBhZGQgdG8gd2FpdCBxdWV1ZS5cbiIpOworCQlyZXQgPSBpcHZy X2JvX3dhaXRfdW5yZXNlcnZlZChvYmosIGludGVycnVwdGlibGUpOworCQlpZiAodW5saWtlbHko cmV0KSkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXB2 cl9ib191bnJlc2VydmUgLSB1bnJlc2VydmUgdGhlIGdpdmVuIGJvCisgKgorICogQG9iajogICAg IFRoZSBidWZmZXIgb2JqZWN0IHRvIHJlc2VydmUuCisgKgorICogTm8gcmV0dXJuIHZhbHVlLgor ICovCit2b2lkIGlwdnJfYm9fdW5yZXNlcnZlKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpv YmopCit7CisJYXRvbWljX3NldCgmb2JqLT5yZXNlcnZlZCwgMCk7CisJd2FrZV91cF9hbGwoJm9i ai0+ZXZlbnRfcXVldWUpOworfQorCitzdGF0aWMgdm9pZCBpcHZyX2JhY2tvZmZfcmVzZXJ2YXRp b24oc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9idWZm ZXIgKmVudHJ5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbGlzdCwgaGVhZCkgewor CQlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqID0gZW50cnktPmlwdnJfZ2VtX2JvOwor CQlpZiAoIWF0b21pY19yZWFkKCZvYmotPnJlc2VydmVkKSkKKwkJCWNvbnRpbnVlOworCQlhdG9t aWNfc2V0KCZvYmotPnJlc2VydmVkLCAwKTsKKwkJd2FrZV91cF9hbGwoJm9iai0+ZXZlbnRfcXVl dWUpOworCX0KK30KKworLyoKKyAqIGlwdnJfcmVzZXJ2ZV9idWZmZXJzIC0gUmVzZXJ2ZSBidWZm ZXJzIGZvciB2YWxpZGF0aW9uLgorICoKKyAqIEBsaXN0OiAgICAgcG9pbnRzIHRvIGEgYm8gbGlz dCB0byBiZSBiYWNrb2ZmZWQKKyAqCisgKiBJZiBhIGJ1ZmZlciBpbiB0aGUgbGlzdCBpcyBtYXJr ZWQgZm9yIENQVSBhY2Nlc3MsIHdlIGJhY2sgb2ZmIGFuZAorICogd2FpdCBmb3IgdGhhdCBidWZm ZXIgdG8gYmVjb21lIGZyZWUgZm9yIEdQVSBhY2Nlc3MuCisgKgorICogSWYgYSBidWZmZXIgaXMg cmVzZXJ2ZWQgZm9yIGFub3RoZXIgdmFsaWRhdGlvbiwgdGhlIHZhbGlkYXRvciB3aXRoCisgKiB0 aGUgaGlnaGVzdCB2YWxpZGF0aW9uIHNlcXVlbmNlIGJhY2tzIG9mZiBhbmQgd2FpdHMgZm9yIHRo YXQgYnVmZmVyCisgKiB0byBiZWNvbWUgdW5yZXNlcnZlZC4gVGhpcyBwcmV2ZW50cyBkZWFkbG9j a3Mgd2hlbiB2YWxpZGF0aW5nIG11bHRpcGxlCisgKiBidWZmZXJzIGluIGRpZmZlcmVudCBvcmRl cnMuCisgKgorICogUmV0dXJuczoKKyAqIC1FQlVTWTogaWYgYm8gaXMgYnVzeSBhbmQgQG5vX3dh aXQgaXMgdHJ1ZS4KKyAqIC1FUkVTVEFSVFNZUyBpZiB3YWl0aW5nIHdhcyBpbnRlcnJ1cHRlZCBi eSBhIHNpZ25hbC4KKyAqIDAgaWYgcmVzZXJ2aW5nIHN1Y2NlZWRlZC4KKyAqLworaW50MzJfdCBp cHZyX3Jlc2VydmVfYnVmZmVycyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXN0cnVjdCBp cHZyX3ZhbGlkYXRlX2J1ZmZlciAqZW50cnk7CisJaW50MzJfdCByZXQ7CisKKwlpZiAobGlzdF9l bXB0eShsaXN0KSkKKwkJcmV0dXJuIDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBs aXN0LCBoZWFkKSB7CisJCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpibyA9IGVudHJ5LT5p cHZyX2dlbV9ibzsKKworCQlyZXQgPSBpcHZyX2JvX3Jlc2VydmUoYm8sIHRydWUsIHRydWUpOwor CQlzd2l0Y2ggKHJldCkgeworCQljYXNlIDA6CisJCQlicmVhazsKKwkJY2FzZSAtRUJVU1k6CisJ CQlyZXQgPSBpcHZyX2JvX3Jlc2VydmUoYm8sIHRydWUsIGZhbHNlKTsKKwkJCWlmICghcmV0KQor CQkJCWJyZWFrOworCQkJZWxzZQorCQkJCWdvdG8gZXJyOworCQlkZWZhdWx0OgorCQkJZ290byBl cnI7CisJCX0KKworCQlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJvLT5jcHVfd3JpdGVycykg PiAwKSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlyZXR1 cm4gMDsKK2VycjoKKwlpcHZyX2JhY2tvZmZfcmVzZXJ2YXRpb24obGlzdCk7CisJcmV0dXJuIHJl dDsKK30KKworLyoqCisgKiBpcHZyX3NldF90aWxlIC0gZ2xvYmFsIHNldHRpbmcgb2YgdGlsaW5n IGluZm8KKyAqCisgKiBAZGV2OiAgICAgdGhlIGlwdnIgZHJtIGRldmljZQorICogQHRpbGluZ19z Y2hlbWU6ICAgICBzZWUgaXB2cl9kcm0uaCBmb3IgZGV0YWlscworICogQHRpbGluZ19zdHJpZGU6 ICAgICBzZWUgaXB2cl9kcm0uaCBmb3IgZGV0YWlscworICoKKyAqIHZ4ZDM5MiBoYXJkd2FyZSBz dXBwb3J0cyBvbmx5IG9uZSB0aWxlIHJlZ2lvbiBzbyB0aGlzIGNvbmZpZ3VyYXRpb24KKyAqIGlz IGdsb2JhbC4KKyAqLwordm9pZCBpcHZyX3NldF90aWxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CisJCXVpbnQ4X3QgdGlsaW5nX3NjaGVtZSwgdWludDhfdCB0aWxpbmdfc3RyaWRlKQoreworCXN0 cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWlu dDMyX3QgY21kOworCXVpbnQzMl90IHN0YXJ0ID0gSVBWUl9NRU1fTU1VX1RJTElOR19TVEFSVDsK Kwl1aW50MzJfdCBlbmQgPSBJUFZSX01FTV9NTVVfVElMSU5HX0VORDsKKworCS8qIEVuYWJsZSBt ZW1vcnkgdGlsaW5nICovCisJY21kID0gKChzdGFydCA+PiAyMCkgKyAoKChlbmQgPj4gMjApIC0g MSkgPDwgMTIpICsKKwkJCQkoKDB4OCB8IHRpbGluZ19zdHJpZGUpIDw8IDI0KSk7CisJSVBWUl9E RUJVR19HRU5FUkFMKCJWRUQ6IE1NVSBUaWxpbmcgcmVnaXN0ZXIwICUwOHguXG4iLCBjbWQpOwor CUlQVlJfREVCVUdfR0VORVJBTCgiUmVnaW9uIDB4JTA4eC0weCUwOHguXG4iLCBzdGFydCwgZW5k KTsKKwlWRURfUkVHX1dSSVRFMzIoY21kLCBNU1ZEWF9NTVVfVElMRV9CQVNFMF9PRkZTRVQpOwor CisJLyogd2UgbmVlZCBzZXQgdGlsZSBmb3JtYXQgYXMgNTEyeDggb24gQmF5dHJhaWwsIHdoaWNo IGlzIHNoY2VtZSAxICovCisJVkVEX1JFR19XUklURTMyKHRpbGluZ19zY2hlbWUgPDwgMywgTVNW RFhfTU1VX0NPTlRST0wyX09GRlNFVCk7Cit9CisKKy8qKgorICogaXB2cl9maW5kX2N0eF93aXRo X2ZlbmNlIC0gbG9va3VwIHRoZSBjb250ZXh0IHdpdGggZ2l2ZW4gZmVuY2Ugc2Vxbm8KKyAqCisg KiBAZGV2X3ByaXY6ICAgICB0aGUgaXB2ciBkcm0gZGV2aWNlCisgKiBAZmVuY2U6ICAgICBmZW5j ZSBzZXFubyBnZW5lcmF0ZWQgYnkgdGhlIGNvbnRleHQKKyAqCisgKiBSZXR1cm5zOgorICogY29u dGV4dCBwb2ludGVyIGlmIGZvdW5kLgorICogTlVMTCBpZiBub3QgZm91bmQuCisgKi8KK3N0cnVj dCBpcHZyX2NvbnRleHQqCitpcHZyX2ZpbmRfY3R4X3dpdGhfZmVuY2Uoc3RydWN0IGRybV9pcHZy X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MTZfdCBmZW5jZSkKK3sKKwlzdHJ1Y3QgaXB2cl9jb250 ZXh0ICpwb3MgPSBOVUxMLCAqbiA9IE5VTEw7CisKKwlpZiAodW5saWtlbHkoZGV2X3ByaXYgPT0g TlVMTCkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+aXB2 cl9jdHhfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgJmRldl9wcml2 LT5pcHZyX2N0eF9saXN0LCBoZWFkKSB7CisJCWlmIChwb3MtPmN1cl9zZXEgPT0gZmVuY2UpIHsK KwkJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jayk7CisJCQlyZXR1cm4gcG9z OworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jayk7CisKKwly ZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaXB2cl91bnJlZmVyZW5jZV9idWZmZXJzKHN0 cnVjdCBpcHZyX3ZhbGlkYXRlX2NvbnRleHQgKmNvbnRleHQpCit7CisJc3RydWN0IGlwdnJfdmFs aWRhdGVfYnVmZmVyICplbnRyeSwgKm5leHQ7CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3Qg Km9iajsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gJmNvbnRleHQtPnZhbGlkYXRlX2xpc3Q7 CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsIGxpc3QsIGhlYWQpIHsK KwkJb2JqID0gZW50cnktPmlwdnJfZ2VtX2JvOworCQlsaXN0X2RlbCgmZW50cnktPmhlYWQpOwor CQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwkJY29udGV4dC0+dXNl ZF9idWZmZXJzLS07CisJfQorfQorCitzdGF0aWMgaW50IGlwdnJfdXBkYXRlX2J1ZmZlcnMoc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJCXN0cnVjdCBpcHZyX3ZhbGlkYXRlX2NvbnRl eHQgKmNvbnRleHQsCisJCQkJCXVpbnQ2NF90IGJ1ZmZlcl9saXN0LAorCQkJCQlpbnQzMl90IGNv dW50KQoreworCXN0cnVjdCBpcHZyX3ZhbGlkYXRlX2J1ZmZlciAqZW50cnk7CisJc3RydWN0IGlw dnJfdmFsaWRhdGVfYXJnICp2YWxfYXJnID0KKwkJKHN0cnVjdCBpcHZyX3ZhbGlkYXRlX2FyZyBf X3VzZXIgKikodW5zaWduZWQgbG9uZykgYnVmZmVyX2xpc3Q7CisKKwlpZiAobGlzdF9lbXB0eSgm Y29udGV4dC0+dmFsaWRhdGVfbGlzdCkpCisJCXJldHVybiAwOworCisJbGlzdF9mb3JfZWFjaF9l bnRyeShlbnRyeSwgJmNvbnRleHQtPnZhbGlkYXRlX2xpc3QsIGhlYWQpIHsKKwkJaWYgKCF2YWxf YXJnKSB7CisJCQlJUFZSX0RFQlVHX1dBUk4oInVuZXhwZWN0ZWQgZW5kIG9mIHZhbF9hcmcgbGlz dCEhIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAodW5saWtlbHkoY29weV90 b191c2VyKHZhbF9hcmcsICZlbnRyeS0+dmFsX3JlcSwKKwkJCQkJICAgIHNpemVvZihlbnRyeS0+ dmFsX3JlcSkpKSkgeworCQkJSVBWUl9FUlJPUigiY29weV90b191c2VyIGZhdWx0LlxuIik7CisJ CQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQl2YWxfYXJnID0gKHN0cnVjdCBpcHZyX3ZhbGlkYXRl X2FyZyBfX3VzZXIgKikKKwkJCQkJKHVuc2lnbmVkIGxvbmcpZW50cnktPnZhbF9yZXEubmV4dDsK Kwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB2cl9yZWZlcmVuY2VfYnVmZmVycyhz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkJc3RydWN0IGlwdnJfdmFsaWRhdGVfY29u dGV4dCAqY29udGV4dCwKKwkJCQkJdWludDY0X3QgYnVmZmVyX2xpc3QsCisJCQkJCWludDMyX3Qg Y291bnQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZpbGVfcHJpdi0+bWlub3ItPmRl djsKKwlzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9hcmcgKnZhbF9hcmcgPQorCQkoc3RydWN0IGlwdnJf dmFsaWRhdGVfYXJnIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKSBidWZmZXJfbGlzdDsKKwlzdHJ1 Y3QgaXB2cl92YWxpZGF0ZV9idWZmZXIgKml0ZW07CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmpl Y3QgKm9iajsKKwlpbnQzMl90IHJldCA9IDA7CisKKwl3aGlsZSAobGlrZWx5KHZhbF9hcmcgIT0g MCkgJiYgKGNvbnRleHQtPnVzZWRfYnVmZmVycyA8PSBjb3VudCkpIHsKKwkJaWYgKHVubGlrZWx5 KGNvbnRleHQtPnVzZWRfYnVmZmVycyA+PQorCQkJICAgICBJUFZSX05VTV9WQUxJREFURV9CVUZG RVJTKSkgeworCQkJSVBWUl9FUlJPUigiVG9vIG1hbnkgYnVmZmVycyAiCisJCQkJICAib24gdmFs aWRhdGUgbGlzdC5cbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X2VycjsKKwkJ fQorCQlpdGVtID0gJmNvbnRleHQtPmJ1ZmZlcnNbY29udGV4dC0+dXNlZF9idWZmZXJzXTsKKwkJ aWYgKHVubGlrZWx5KGNvcHlfZnJvbV91c2VyKCZpdGVtLT52YWxfcmVxLCB2YWxfYXJnLAorCQkJ CQkgICAgc2l6ZW9mKGl0ZW0tPnZhbF9yZXEpKSAhPSAwKSkgeworCQkJSVBWUl9FUlJPUigiY29w eV9mcm9tX3VzZXIgZmF1bHQuXG4iKTsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dF9l cnI7CisJCX0KKwkJSU5JVF9MSVNUX0hFQUQoJml0ZW0tPmhlYWQpOworCQlvYmogPSB0b19pcHZy X2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwKKwkJCQkJCWl0ZW0tPnZh bF9yZXEuaGFuZGxlKSk7CisJCWlmICgmb2JqLT5iYXNlID09IE5VTEwpIHsKKwkJCXJldCA9IC1F Tk9FTlQ7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwkJaXRlbS0+aXB2cl9nZW1fYm8gPSBvYmo7 CisKKwkJbGlzdF9hZGRfdGFpbCgmaXRlbS0+aGVhZCwgJmNvbnRleHQtPnZhbGlkYXRlX2xpc3Qp OworCQljb250ZXh0LT51c2VkX2J1ZmZlcnMrKzsKKworCQl2YWxfYXJnID0gKHN0cnVjdCBpcHZy X3ZhbGlkYXRlX2FyZyBfX3VzZXIgKikKKwkJCQkJKHVuc2lnbmVkIGxvbmcpaXRlbS0+dmFsX3Jl cS5uZXh0OworCX0KKworCXJldHVybiAwOworCitvdXRfZXJyOgorCWlwdnJfdW5yZWZlcmVuY2Vf YnVmZmVycyhjb250ZXh0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50MzJfdCBpcHZy X3ZhbGlkYXRlX2J1ZmZlcl9saXN0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCQlz dHJ1Y3QgaXB2cl92YWxpZGF0ZV9jb250ZXh0ICpjb250ZXh0KQoreworCXN0cnVjdCBpcHZyX3Zh bGlkYXRlX2J1ZmZlciAqZW50cnk7CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iajsK KwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gJmNvbnRleHQtPnZhbGlkYXRlX2xpc3Q7CisJaW50 MzJfdCByZXQgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbGlzdCwgaGVhZCkg eworCQlvYmogPSBlbnRyeS0+aXB2cl9nZW1fYm87CisJCS8qKgorCQkgKiBuZWVkIHZhbGlkYXRl IGJvIGxvY2F0ZSBpbiB0aGUgbW11IHNwYWNlCisJCSAqIGNoZWNrIGlmIHByZXN1bWVkIG9mZnNl dCBpcyBjb3JyZWN0CisJCSAqIHdpdGggdmVkX2NoZWNrX3ByZXN1bWVkLCBpZiBwcmVzdW1lIGlz IG5vdCBjb3JyZWN0LAorCQkgKiBjYWxsIGZpeHVwIHJlbG9jcyB3aXRoIHZlZF9maXh1cF9yZWxv Y3MuCisJCSAqIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0IHNocmluay9l dmljdCwKKwkJICogc28gbmVlZG4ndCB2YWxpZGF0ZSBtbXUgb2Zmc2V0LgorCQkgKiBuZWVkIGJl IGltcGxlbWVudGVkIGluIHRoZSBmdXR1cmUgaWYgc2hyaW5rL2V2aWN0CisJCSAqIGlzIHN1cHBv cnRlZC4KKwkJICovCisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcHZyX2dlbV9k b19leGVjYnVmZmVyIC0gbG9va3VwIHRoZSBjb250ZXh0IHdpdGggZ2l2ZW4gZmVuY2Ugc2Vxbm8K KyAqCisgKiBAZGV2OiAgICAgdGhlIGlwdnIgZHJtIGRldmljZQorICogQGZpbGVfcHJpdjogICAg ICB0aGUgaXB2ciBkcm0gZmlsZSBwb2ludGVyCisgKiBAYXJnczogICAgICBpbnB1dCBhcmd1bWVu dCBwYXNzZWQgZnJvbSB1c2VybGFuZAorICogQHZtOiAgICAgIGlwdnIgYWRkcmVzcyBzcGFjZSBm b3IgYWxsIHRoZSBibyB0byBiaW5kIHRvCisgKgorICogUmV0dXJuczoKKyAqIC1FTk9FTlQgaWYg Y29udGV4dCBub3QgZm91bmQsIG9yIGNtZGJ1ZiBibyBub3QgZm91bmQKKyAqIC1FSU5WQUwgaWYg cmVmZXJlbmNpbmcgYnVmZmVyIGZhaWxzLCBvciBleGVjdXRpbmcgY21kYnVmIGZhaWxzCisgKiAt RUlOVFIgaWYgZmFpbHMgdG8gbG9jayBtdXRleAorICogLUVCVVNZIGlmIGZhaWxzIHRvIGdldCBw b3dlciB3ZWxsLCBvciBleGVjdXRpb24gZmFpbHMKKyAqIC1FUkVTVEFSVFNZUyBpZiByZXNlcnZh dGluZyBidWZmZXIgZmFpbHMKKyAqIC1FTk9NRU0gaWYgZXhlY3V0aW9uIGZhaWxzCisgKiAtRUZB VUxUIGlmIGV4ZWN1dGlvbiBmYWlscworICogMCBpZiBzdWNjZXNzZnVsCisgKi8KK3N0YXRpYyBp bnQzMl90IGlwdnJfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJCXN0cnVjdCBkcm1faXB2cl9nZW1f ZXhlY2J1ZmZlciAqYXJncywKKwkJCQkJc3RydWN0IGlwdnJfYWRkcmVzc19zcGFjZSAqdm0pCit7 CisJZHJtX2lwdnJfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3Ry dWN0IGlwdnJfdmFsaWRhdGVfY29udGV4dCAqY29udGV4dCA9ICZkZXZfcHJpdi0+dmFsaWRhdGVf Y3R4OworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZh dGU7CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKmNtZF9idWZmZXI7CisJc3RydWN0IGlw dnJfY29udGV4dCAqaXB2cl9jdHggID0gTlVMTDsKKwlpbnQzMl90IHJldCwgY3R4X2lkOworCisJ LyogaWYgbm90IHBhc3MgMCwgdXNlIGRlZmF1bHQgY29udGV4dCBpbnN0ZWFkICovCisJaWYgKGFy Z3MtPmN0eF9pZCA9PSAwKQorCQljdHhfaWQgPSBkZXZfcHJpdi0+ZGVmYXVsdF9jdHguY3R4X2lk OworCWVsc2UKKwkJY3R4X2lkID0gYXJncy0+Y3R4X2lkOworCisJSVBWUl9ERUJVR19HRU5FUkFM KCJ0cnkgdG8gZmluZCBjdHggYWNjb3JkaW5nIGN0eF9pZCAlZC5cbiIsIGN0eF9pZCk7CisJaXB2 cl9jdHggPSAoc3RydWN0IGlwdnJfY29udGV4dCAqKQorCQkJaWRyX2ZpbmQoJmRldl9wcml2LT5p cHZyX2N0eF9pZHIsIGN0eF9pZCk7CisJaWYgKCFpcHZyX2N0eCkgeworCQlJUFZSX0RFQlVHX1dB Uk4oInZpZGVvIGN0eCBpcyBub3QgZm91bmQuXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQor CisJSVBWUl9ERUJVR19HRU5FUkFMKCJyZWZlcmVuY2UgYWxsIGJ1ZmZlcnMgcGFzc2VkIHRocm91 Z2ggYnVmZmVyX2xpc3QuXG4iKTsKKwlyZXQgPSBpcHZyX3JlZmVyZW5jZV9idWZmZXJzKGZpbGVf cHJpdiwgY29udGV4dCwKKwkJCQlhcmdzLT5idWZmZXJfbGlzdCwgYXJncy0+YnVmZmVyX2NvdW50 KTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCUlQVlJfREVCVUdfV0FSTigicmVmZXJl bmNlIGJ1ZmZlciBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJSVBWUl9E RUJVR19HRU5FUkFMKCJyZXNlcnZlIGFsbCBidWZmZXJzIHRvIG1ha2UgdGhlbSBub3QgYWNjZXNz ZWQgIgorCQkJImJ5IG90aGVyIHRocmVhZHMuXG4iKTsKKwlyZXQgPSBpcHZyX3Jlc2VydmVfYnVm ZmVycygmY29udGV4dC0+dmFsaWRhdGVfbGlzdCk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkg eworCQlJUFZSX0RFQlVHX1dBUk4oInJlc2VydmUgYnVmZmVycyBmYWlsZWQuXG4iKTsKKwkJLyog LUVCVVNZIG9yIC1FUkVTVEFSVFNZUyAqLworCQlnb3RvIG91dF91bnJlZl9idWY7CisJfQorCisJ SVBWUl9ERUJVR19HRU5FUkFMKCJ2YWxpZGF0ZSBidWZmZXIgbGlzdCwgbWFpbmx5IGNoZWNrICIK KwkJCSJ0aGUgYm8gZ3B1IG9mZnNldC5cbiIpOworCXJldCA9IGlwdnJfdmFsaWRhdGVfYnVmZmVy X2xpc3QoZmlsZV9wcml2LCBjb250ZXh0KTsKKwlpZiAocmV0KSB7CisJCUlQVlJfREVCVUdfV0FS TigidmFsaWRhdGUgYnVmZmVycyBmYWlsZWQuXG4iKTsKKwkJZ290byBvdXRfYmFja29mZl9yZXNl cnY7CisJfQorCisJY21kX2J1ZmZlciA9IHRvX2lwdnJfYm8oaWRyX2ZpbmQoJmZpbGVfcHJpdi0+ b2JqZWN0X2lkciwKKwkJCQkJYXJncy0+Y21kYnVmX2hhbmRsZSkpOworCWlmICghY21kX2J1ZmZl cikgeworCQlJUFZSX0RFQlVHX1dBUk4oIkludmFsaWQgY21kIG9iamVjdCBoYW5kbGUgMHgleC5c biIsCisJCQlhcmdzLT5jbWRidWZfaGFuZGxlKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBv dXRfYmFja29mZl9yZXNlcnY7CisJfQorCisJLyoKKwkgKiBoZXJlIFZFRCBpcyBzdXBwb3J0ZWQg Y3VycmVudGx5CisJICogd2hlbiBzdXBwb3J0IFZFQyBhbmQgVlNQLCBuZWVkIGltcGxlbWVudCBh IGdlbmVyYWwgd2F5IHRvCisJICogY2FsbCBzdWItZW5naW5lIGZ1bmN0aW9ucworCSAqLworCWF0 b21pY19pbmMoJmRldl9wcml2LT52ZWRfcG93ZXJfdXNhZ2UpOworCUlQVlJfREVCVUdfR0VORVJB TCgiZ2V0IFZFRCBwb3dlciB3aXRoIHVzYWdlPSVkLlxuIiwKKwkJYXRvbWljX3JlYWQoJmRldi0+ cGxhdGZvcm1kZXYtPmRldi5wb3dlci51c2FnZV9jb3VudCkpOworCXJldCA9IHBtX3J1bnRpbWVf Z2V0X3N5bmMoJmRldi0+cGxhdGZvcm1kZXYtPmRldik7CisJaWYgKHVubGlrZWx5KHJldCA8IDAp KSB7CisJCUlQVlJfRVJST1IoIkVycm9yIGdldCBWRUQgcG93ZXI6ICVkXG4iLCByZXQpOworCQly ZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0X2JhY2tvZmZfcmVzZXJ2OworCX0KKworCXJldCA9IG11 dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdmVkX3ByaXYtPnZlZF9tdXRleCk7CisJaWYgKHVubGlr ZWx5KHJldCkpIHsKKwkJSVBWUl9FUlJPUigiRXJyb3IgZ2V0IFZFRCBtdXRleDogJWRcbiIsIHJl dCk7CisJCS8qIC1FSU5UUiAqLworCQlnb3RvIG91dF9wb3dlcl9wdXQ7CisJfQorCisJSVBWUl9E RUJVR19HRU5FUkFMKCJwYXJzZSBjbWQgYnVmZmVyIGFuZCBzZW5kIHRvIFZFRC5cbiIpOworCXJl dCA9IHZlZF9jbWRidWZfdmlkZW8oZmlsZV9wcml2LCBjbWRfYnVmZmVyLAorCQkJYXJncy0+Y21k YnVmX3NpemUsIGlwdnJfY3R4ICk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJSVBWUl9ERUJV R19XQVJOKCJ2ZWRfY21kYnVmX3ZpZGVvIHJldHVybnMgJWQuXG4iLCByZXQpOworCQkvKiAtRUlO VkFMLCAtRU5PTUVNLCAtRUZBVUxULCAtRUJVU1kgKi8KKwkJZ290byBvdXRfcG93ZXJfcHV0Owor CX0KKworCW11dGV4X3VubG9jaygmdmVkX3ByaXYtPnZlZF9tdXRleCk7CisKKwkvKioKKwkgKiB1 cGRhdGUgbW11X29mZnNldHMgYW5kIGZlbmNlIGZkcyB0byB1c2VyCisJICovCisJcmV0ID0gaXB2 cl91cGRhdGVfYnVmZmVycyhmaWxlX3ByaXYsIGNvbnRleHQsCisJCQkJYXJncy0+YnVmZmVyX2xp c3QsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJSVBWUl9E RUJVR19XQVJOKCJpcHZyX3VwZGF0ZV9idWZmZXJzIHJldHVybnMgZXJyb3IgJWQuXG4iLCByZXQp OworCQlyZXQgPSAwOworCX0KKworb3V0X3Bvd2VyX3B1dDoKKwlpZiAocmV0KSB7CisJCXJldCA9 IHBtX3J1bnRpbWVfcHV0KCZkZXYtPnBsYXRmb3JtZGV2LT5kZXYpOworCQlpZiAodW5saWtlbHko cmV0IDwgMCkpCisJCQlJUFZSX0VSUk9SKCJFcnJvciBwdXQgVkVEIHBvd2VyOiAlZFxuIiwgcmV0 KTsKKwkJSVBWUl9ERUJVR19HRU5FUkFMKCJWRUQgcG93ZXIgcHV0LiB1c2FnZSBiZWNhbWUgJWQu XG4iLAorCQkJYXRvbWljX3JlYWQoJmRldi0+cGxhdGZvcm1kZXYtPmRldi5wb3dlci51c2FnZV9j b3VudCkpOworCX0KKworb3V0X2JhY2tvZmZfcmVzZXJ2OgorCUlQVlJfREVCVUdfR0VORVJBTCgi dW5yZXNlcnZlIGJ1ZmZlciBsaXN0LlxuIik7CisJaXB2cl9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZj b250ZXh0LT52YWxpZGF0ZV9saXN0KTsKKworb3V0X3VucmVmX2J1ZjoKKwlJUFZSX0RFQlVHX0dF TkVSQUwoInVucmVmIGJ1ZnMgd2hpY2ggYXJlIHJlZmVyZWQgZHVyaW5nIGJvIGxvb2t1cC5cbiIp OworCWlwdnJfdW5yZWZlcmVuY2VfYnVmZmVycyhjb250ZXh0KTsKKworCXJldHVybiByZXQ7Cit9 CisKKy8qKgorICogaXB2cl9nZW1fZG9fZXhlY2J1ZmZlciAtIGxvb2t1cCB0aGUgY29udGV4dCB3 aXRoIGdpdmVuIGZlbmNlIHNlcW5vCisgKgorICogaW9jdGwgZW50cnkgZm9yIERSTV9JUFZSX0dF TV9FWEVDQlVGRkVSCisgKgorICogUmV0dXJuczoKKyAqIC1FTk9FTlQgaWYgY29udGV4dCBub3Qg Zm91bmQsIG9yIGNtZGJ1ZiBibyBub3QgZm91bmQKKyAqIC1FSU5WQUwgaWYgcmVmZXJlbmNpbmcg YnVmZmVyIGZhaWxzLCBvciBleGVjdXRpbmcgY21kYnVmIGZhaWxzCisgKiAtRUlOVFIgaWYgZmFp bHMgdG8gbG9jayBtdXRleAorICogLUVCVVNZIGlmIGZhaWxzIHRvIGdldCBwb3dlciB3ZWxsLCBv ciBleGVjdXRpb24gZmFpbHMKKyAqIC1FUkVTVEFSVFNZUyBpZiByZXNlcnZhdGluZyBidWZmZXIg ZmFpbHMKKyAqIC1FTk9NRU0gaWYgZXhlY3V0aW9uIGZhaWxzCisgKiAtRUZBVUxUIGlmIGV4ZWN1 dGlvbiBmYWlscworICogMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludDMyX3QgaXB2cl9nZW1fZXhl Y2J1ZmZlcl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCXN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pcHZyX2dlbV9leGVjYnVm ZmVyICphcmdzID0gZGF0YTsKKwlpbnQzMl90IHJldDsKKwlzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9j b250ZXh0ICpjb250ZXh0ID0gJmRldl9wcml2LT52YWxpZGF0ZV9jdHg7CisKKwlpZiAoIWNvbnRl eHQgfHwgIWNvbnRleHQtPmJ1ZmZlcnMpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwljb250ZXh0LT51c2VkX2J1ZmZlcnMgPSAwOworCisJaWYgKGFyZ3MtPmJ1ZmZl cl9jb3VudCA8IDEgfHwKKwkJYXJncy0+YnVmZmVyX2NvdW50ID4KKwkJCShVSU5UX01BWCAvIHNp emVvZihzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9idWZmZXIpKSkgeworCQlJUFZSX0VSUk9SKCJ2YWxp ZGF0ZSAlZCBidWZmZXJzLlxuIiwgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJdHJhY2VfaXB2cl9nZW1fZXhlY19pb2N0bChhcmdzKTsKKwlyZXQgPSBpcHZy X2dlbV9kb19leGVjYnVmZmVyKGRldiwgZmlsZV9wcml2LCBhcmdzLAorCQkJCSAgICAmZGV2X3By aXYtPmFkZHJfc3BhY2UpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaXB2ci9pcHZyX2V4ZWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZXhlYy5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NDA1ZGYKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2V4ZWMuaApAQCAtMCwwICsxLDY4IEBA CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKyAqIGlwdnJfZXhlYy5oOiBJUFZSIGhlYWRlciBmaWxlIGZv ciBjb21tYW5kIGJ1ZmZlciBleGVjdXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50 ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZl ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg V0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRl dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBG cmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoK KyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKgor ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JUFZSX0VYRUNfSF8KKyNkZWZpbmUgX0lQ VlJfRVhFQ19IXworCisjaW5jbHVkZSAiaXB2cl9kcnYuaCIKKyNpbmNsdWRlICJpcHZyX2RybS5o IgorI2luY2x1ZGUgImlwdnJfZ2VtLmgiCisjaW5jbHVkZSAiaXB2cl9mZW5jZS5oIgorCitzdHJ1 Y3QgZHJtX2lwdnJfcHJpdmF0ZTsKKworI2RlZmluZSBJUFZSX05VTV9WQUxJREFURV9CVUZGRVJT IDIwNDgKKworI2RlZmluZSBJUFZSX01BWF9SRUxPQ19QQUdFUyAxMDI0CisKKy8qIHN0YXR1cyBv ZiB0aGUgY29tbWFuZCBzZW50IHRvIHRoZSBpcHZyIGRldmljZSAqLworZW51bSBpcHZyX2NtZF9z dGF0dXMgeworCUlQVlJfQ01EX1NVQ0NFU1MsCisJSVBWUl9DTURfRkFJTEVELAorCUlQVlJfQ01E X0xPQ0tVUCwKKwlJUFZSX0NNRF9TS0lQCit9OworCitzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9idWZm ZXIgeworCXN0cnVjdCBpcHZyX3ZhbGlkYXRlX2FyZyB2YWxfcmVxOworCXN0cnVjdCBsaXN0X2hl YWQgaGVhZDsKKwlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqaXB2cl9nZW1fYm87CisJc3Ry dWN0IGlwdnJfZmVuY2UgKm9sZF9mZW5jZTsKK307CisKK2ludCBpcHZyX2JvX3Jlc2VydmUoc3Ry dWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgICBib29sIGludGVycnVwdGlibGUs IGJvb2wgbm9fd2FpdCk7CisKK3ZvaWQgaXB2cl9ib191bnJlc2VydmUoc3RydWN0IGRybV9pcHZy X2dlbV9vYmplY3QgKm9iaik7CisKK3N0cnVjdCBpcHZyX2NvbnRleHQqCitpcHZyX2ZpbmRfY3R4 X3dpdGhfZmVuY2Uoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LCB1aW50MTZfdCBm ZW5jZSk7CisKK3ZvaWQgaXB2cl9zZXRfdGlsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQl1 aW50OF90IHRpbGluZ19zY2hlbWUsIHVpbnQ4X3QgdGlsaW5nX3N0cmlkZSk7CisKK2ludCBpcHZy X2NtZGJ1Zl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCXN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaXB2ci9pcHZyX2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2Zl bmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4ZTBkNAotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZmVuY2UuYwpAQCAtMCwwICsx LDU1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpcHZyX2ZlbmNlLmM6IElQVlIgZmVuY2Ug aGFuZGxpbmcgdG8gdHJhY2sgY29tbWFuZCBleGVjdHVpb24gc3RhdHVzCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFs bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0 ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisg KiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRo aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdA aW50ZWwuY29tPgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImlwdnJfZmVuY2UuaCIKKyNpbmNsdWRlICJ2 ZWRfcmVnLmgiCisjaW5jbHVkZSAidmVkX2Z3LmgiCisjaW5jbHVkZSAidmVkX2NtZC5oIgorI2lu Y2x1ZGUgImlwdnJfZXhlYy5oIgorI2luY2x1ZGUgImlwdnJfYnVmZmVyLmgiCisjaW5jbHVkZSAi aXB2cl90cmFjZS5oIgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51 eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMu aD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Cisj aW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVk ZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KKworc3RhdGljIGludDMyX3QgaXB2cl91c3JmZW5jZV9y ZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyB1 aW50MzJfdCBpcHZyX3VzcmZlbmNlX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUg KndhaXQpOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXB2cl91c3JmZW5j ZV9mb3BzID0geworCS5yZWxlYXNlID0gaXB2cl91c3JmZW5jZV9yZWxlYXNlLAorCS5wb2xsID0g aXB2cl91c3JmZW5jZV9wb2xsLAorfTsKKworLyoqCisgKiBpcHZyX2ZlbmNlX2NyZWF0ZSAtIGNy ZWF0ZSBhbmQgaW5pdCBhIGZlbmNlCisgKgorICogQGRldl9wcml2OiBkcm1faXB2cl9wcml2YXRl IHBvaW50ZXIKKyAqIEBmZW5jZTogaXB2ciBmZW5jZSBvYmplY3QKKyAqIEBmZW5jZV9mZDogZmls ZSBkZXNjcmlwdG9yIGZvciBleHBvcnRpbmcgZmVuY2UKKyAqCisgKiBDcmVhdGUgYSBmZW5jZSwg YWN0dWFsbHkgdGhlIGZlbmNlIGlzIHdyaXR0ZW4gdG8gaXB2ciB0aHJvdWdoIG1zZy4KKyAqIGV4 cG9ydGluZyBhIG5ldyBmaWxlIGRlc2NyaXB0b3IgdG8gdXNlcnNwYWNlLgorICogUmV0dXJucyAw IG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS4KKyAqLworaW50MzJfdAoraXB2cl9mZW5j ZV9jcmVhdGUoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LAorICAgICAgICAgICAg ICAgICAgc3RydWN0IGlwdnJfZmVuY2UgKipmZW5jZSwKKyAgICAgICAgICAgICAgICAgIGludCAq ZmVuY2VfZmQpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJdWludDE2X3Qgb2xkX3Nl cTsKKwlpbnQgZmQ7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdjsKKwlCVUdfT04oIWZl bmNlX2ZkIHx8ICpmZW5jZV9mZCA+PSAwKTsKKwlmZCA9IGdldF91bnVzZWRfZmQoKTsKKwl2ZWRf cHJpdiA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsKKworCWlmIChmZCA8IDApIHsKKwkJSVBWUl9F UlJPUigiQUxBUk0hISEgbm8gdW51c2VkIEZEIGZvdW5kIVxuIik7CisJCXJldHVybiBmZDsKKwl9 CisKKwkqZmVuY2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXB2cl9mZW5jZSksIEdGUF9LRVJO RUwpOworCWlmICgoKmZlbmNlKSA9PSBOVUxMKSB7CisJCXB1dF91bnVzZWRfZmQoZmQpOworCQly ZXR1cm4gLUVOT01FTTsKKwl9CisJKCpmZW5jZSktPmZpbGUgPSBhbm9uX2lub2RlX2dldGZpbGUo ImlwdnJfdXNyZmVuY2UiLCAmaXB2cl91c3JmZW5jZV9mb3BzLAorCQkJCQkgKmZlbmNlLCAwKTsK KwlpZiAoSVNfRVJSKCgqZmVuY2UpLT5maWxlKSkgeworCQlrZnJlZSgqZmVuY2UpOworCQlwdXRf dW51c2VkX2ZkKGZkKTsKKwkJSVBWUl9FUlJPUigiQUxBUk0hISEgYW5vbl9pbm9kZV9nZXRmaWxl IGNhbGwgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJa3JlZl9pbml0KCYo KCpmZW5jZSktPmtyZWYpKTsKKwkoKmZlbmNlKS0+ZGV2X3ByaXYgPSBkZXZfcHJpdjsKKworCXNw aW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZlbmNlX2xvY2ssIGlycV9mbGFn cyk7CisJLyogY21kcyBpbiBvbmUgYmF0Y2ggdXNlIGRpZmZlcmVudCBmZW5jZSB2YWx1ZSAqLwor CW9sZF9zZXEgPSBkZXZfcHJpdi0+ZmVuY2VfZHJ2LnN5bmNfc2VxOworCWRldl9wcml2LT5mZW5j ZV9kcnYuc3luY19zZXEgPSBkZXZfcHJpdi0+bGFzdF9zZXErKzsKKwlkZXZfcHJpdi0+ZmVuY2Vf ZHJ2LnN5bmNfc2VxIDw8PSA0OworCWRldl9wcml2LT5mZW5jZV9kcnYuc3luY19zZXEgKz0gdmVk X3ByaXYtPm51bV9jbWQ7CisJKCpmZW5jZSktPnNlcSA9IGRldl9wcml2LT5mZW5jZV9kcnYuc3lu Y19zZXE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZl bmNlX2xvY2ssIGlycV9mbGFncyk7CisKKwlmZF9pbnN0YWxsKGZkLCAoKmZlbmNlKS0+ZmlsZSk7 CisJa3JlZl9nZXQoJigqZmVuY2UpLT5rcmVmKTsKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImZlbmNl IGlzIGNyZWF0ZWQgYW5kIGl0cyBzZXEgaXMgJXUgKDB4JTA0eCksIGZkIGlzICVkLlxuIiwKKwkJ KCpmZW5jZSktPnNlcSwgKCpmZW5jZSktPnNlcSwgZmQpOworCSpmZW5jZV9mZCA9IGZkOworCXJl dHVybiAwOworfQorCisvKioKKyAqIGlwdnJfZmVuY2VfZGVzdHJveSAtIGRlc3Ryb3kgYSBmZW5j ZQorICoKKyAqIEBrcmVmOiBmZW5jZSBrcmVmCisgKgorICogRnJlZXMgdGhlIGZlbmNlIG9iamVj dCAoYWxsIGFzaWNzKS4KKyAqLworc3RhdGljIHZvaWQgaXB2cl9mZW5jZV9kZXN0cm95KHN0cnVj dCBrcmVmICprcmVmKQoreworCXN0cnVjdCBpcHZyX2ZlbmNlICpmZW5jZTsKKworCWZlbmNlID0g Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBpcHZyX2ZlbmNlLCBrcmVmKTsKKwlrZnJlZShmZW5j ZSk7Cit9CisKKy8qKgorICogaXB2cl9mZW5jZV9wcm9jZXNzIC0gcHJvY2VzcyBhIGZlbmNlCisg KgorICogQGRldl9wcml2OiBkcm1faXB2cl9wcml2YXRlIHBvaW50ZXIKKyAqIEBzZXE6IGluZGlj YXRlIHRoZSBmZW5jZSBzZXEgaGFzIGJlZW4gc2lnbmFsZWQKKyAqIEBlcnI6IGluZGljYXRlIGlm IGVyciBoYXBwZW5lZCwgZm9yIGZ1dHVyZSB1c2UKKyAqCisgKiBDaGVja3MgdGhlIGN1cnJlbnQg ZmVuY2UgdmFsdWUgYW5kIHdha2VzIHRoZSBmZW5jZSBxdWV1ZQorICogaWYgdGhlIHNlcXVlbmNl IG51bWJlciBoYXMgaW5jcmVhc2VkIChhbGwgYXNpY3MpLgorICovCit2b2lkIGlwdnJfZmVuY2Vf cHJvY2VzcyhzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQl1aW50MTZfdCBz ZXEsIHVpbnQ4X3QgZXJyKQoreworCWludCBzaWduYWxlZF9zZXFfaW50OworCXVpbnQxNl90IHNp Z25hbGVkX3NlcTsKKwl1aW50MTZfdCBsYXN0X2VtaXR0ZWQ7CisKKwlzaWduYWxlZF9zZXFfaW50 ID0gYXRvbWljX3JlYWQoJmRldl9wcml2LT5mZW5jZV9kcnYuc2lnbmFsZWRfc2VxKTsKKwlzaWdu YWxlZF9zZXEgPSAodWludDE2X3Qpc2lnbmFsZWRfc2VxX2ludDsKKwlsYXN0X2VtaXR0ZWQgPSBk ZXZfcHJpdi0+ZmVuY2VfZHJ2LnN5bmNfc2VxOworCisJaWYgKGlwdnJfc2VxX2FmdGVyKHNlcSwg bGFzdF9lbWl0dGVkKSkgeworCQlJUFZSX0RFQlVHX1dBUk4oInNlcSBlcnJvciwgc2VxIGlzICV1 LCBzaWduYWxlZF9zZXEgaXMgJXUsICIKKwkJCQkibGFzdF9lbWl0dGVkIGlzICV1LlxuIiwKKwkJ CQlzZXEsIHNpZ25hbGVkX3NlcSwgbGFzdF9lbWl0dGVkKTsKKwkJcmV0dXJuOworCX0KKwlpZiAo aXB2cl9zZXFfYWZ0ZXIoc2VxLCBzaWduYWxlZF9zZXEpKSB7CisJCWF0b21pY194Y2hnKCZkZXZf cHJpdi0+ZmVuY2VfZHJ2LnNpZ25hbGVkX3NlcSwgc2VxKTsKKwkJZGV2X3ByaXYtPmZlbmNlX2Ry di5sYXN0X2FjdGl2aXR5ID0gamlmZmllczsKKwkJSVBWUl9ERUJVR19HRU5FUkFMKCJsYXN0IGVt aXR0ZWQgc2VxICV1IGlzIHVwZGF0ZWQuXG4iLCBzZXEpOworCQl3YWtlX3VwX2FsbCgmZGV2X3By aXYtPmZlbmNlX3F1ZXVlKTsKKwl9Cit9CisKKy8qKgorICogaXB2cl9mZW5jZV9zaWduYWxlZCAt IGNoZWNrIGlmIGEgZmVuY2Ugc2VxdWV1Y2UgbnVtYmVyIGhhcyBzaWduYWxlZAorICoKKyAqIEBk ZXZfcHJpdjogaXB2ciBkZXZpY2UgcG9pbnRlcgorICogQHNlcTogc2VxdWVuY2UgbnVtYmVyCisg KgorICogQ2hlY2sgaWYgdGhlIGxhc3Qgc2luZ2xlZCBmZW5jZSBzZXF1bmNlIG51bWJlciBpcyA+ PSB0aGUgcmVxdWVzdGVkCisgKiBzZXF1ZW5jZSBudW1iZXIgKGFsbCBhc2ljcykuCisgKiBSZXR1 cm5zIHRydWUgaWYgdGhlIGZlbmNlIGhhcyBzaWduYWxlZCAoY3VycmVudCBmZW5jZSB2YWx1ZQor ICogaXMgPj0gcmVxdWVzdGVkIHZhbHVlKSBvciBmYWxzZSBpZiBpdCBoYXMgbm90IChjdXJyZW50 IGZlbmNlCisgKiB2YWx1ZSBpcyA8IHRoZSByZXF1ZXN0ZWQgdmFsdWUuCisgKi8KK3N0YXRpYyBi b29sIGlwdnJfZmVuY2Vfc2lnbmFsZWQoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2 LCB1aW50MTZfdCBzZXEpCit7CisJdWludDE2X3QgY3Vycl9zZXEsIHNpZ25hbGVkX3NlcTsKKwl1 bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmZl bmNlX2Rydi5mZW5jZV9sb2NrLCBpcnFfZmxhZ3MpOworCWN1cnJfc2VxID0gZGV2X3ByaXYtPnZl ZF9wcml2YXRlLT52ZWRfY3VyX3NlcTsKKwlzaWduYWxlZF9zZXEgPSBhdG9taWNfcmVhZCgmZGV2 X3ByaXYtPmZlbmNlX2Rydi5zaWduYWxlZF9zZXEpOworCisJaWYgKGlwdnJfc2VxX2FmdGVyKHNl cSwgc2lnbmFsZWRfc2VxKSkgeworCQkvKiBwb2xsIG5ldyBsYXN0IHNlcXVlbmNlIGF0IGxlYXN0 IG9uY2UgKi8KKwkJaXB2cl9mZW5jZV9wcm9jZXNzKGRldl9wcml2LCBjdXJyX3NlcSwgSVBWUl9D TURfU1VDQ0VTUyk7CisJCXNpZ25hbGVkX3NlcSA9IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+ZmVu Y2VfZHJ2LnNpZ25hbGVkX3NlcSk7CisJCWlmIChpcHZyX3NlcV9hZnRlcihzZXEsIHNpZ25hbGVk X3NlcSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5mZW5jZV9kcnYu ZmVuY2VfbG9jaywKKwkJCQkJCWlycV9mbGFncyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9 CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmZlbmNlX2Rydi5mZW5jZV9sb2Nr LCBpcnFfZmxhZ3MpOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIGlwdnJfZmVuY2VfbG9j a3VwIC0gaXB2ciBsb2NrdXAgaXMgZGV0ZWN0ZWQKKyAqCisgKiBAZGV2X3ByaXY6IGlwdnIgZGV2 aWNlIHBvaW50ZXIKKyAqIEBmZW5jZTogbG9ja3VwIGRldGVjdGVkIHdoZW4gd2FpdCB0aGUgc3Bl Y2lmaWMgZmVuY2UKKyAqCisgKiBEdXJpbmcgdGhlIGNhbGxpbmcgb2YgaXB2cl9mZW5jZV93YWl0 LCBpZiB3YWl0IHRvIHRpbWVvdXQsCisgKiBpbmRpY2F0ZSBsb2NrdXAgaGFwcGVuZWQsIG5lZWQg Zmx1c2ggY21kIHF1ZXVlIGFuZCByZXNldCB2ZWQKKyAqIElmIGlwdnJfZmVuY2Vfd2FpdF9lbXB0 eV9sb2NrZWQgZW5jb3VudGVyIGxvY2t1cCwgZmVuY2UgaXMgTlVMTAorICovCisKK3N0YXRpYyB2 b2lkCitpcHZyX2ZlbmNlX2xvY2t1cChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYs IHN0cnVjdCBpcHZyX2ZlbmNlICpmZW5jZSkKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopZGV2X3ByaXYt PmRldjsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2 YXRlOworCisJSVBWUl9ERUJVR19XQVJOKCJ0aW1lb3V0IGRldGVjdGVkLCBmbHVzaCBxdWV1ZWQg Y21kLCBtYXliZSBsb2NrdXAuXG4iKTsKKwlJUFZSX0RFQlVHX1dBUk4oIk1TVkRYX0NPTU1TX0ZX X1NUQVRVUyByZWcgaXMgMHgleC5cbiIsCisJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19G V19TVEFUVVMpKTsKKworCWlmIChmZW5jZSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3By aXYtPmZlbmNlX2Rydi5mZW5jZV9sb2NrLCBpcnFfZmxhZ3MpOworCQlpcHZyX2ZlbmNlX3Byb2Nl c3MoZGV2X3ByaXYsIGZlbmNlLT5zZXEsIElQVlJfQ01EX0xPQ0tVUCk7CisJCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmRldl9wcml2LT5mZW5jZV9kcnYuZmVuY2VfbG9jaywgaXJxX2ZsYWdzKTsK Kwl9CisJdmVkX2ZsdXNoX2NtZF9xdWV1ZShkZXYpOworCisJaWYgKHZlZF9wcml2LT5md19sb2Fk ZWRfYnlfcHVuaXQpCisJCXZlZF9wcml2LT52ZWRfbmVlZHNfcmVzZXQgfD0gTVNWRFhfUkVTRVRf TkVFRFNfUkVVUExPQURfRlcgfAorCQkJTVNWRFhfUkVTRVRfTkVFRFNfSU5JVF9GVzsKKwllbHNl CisJCXZlZF9wcml2LT52ZWRfbmVlZHNfcmVzZXQgPSAxOworfQorCisvKioKKyAqIGlwdnJfZmVu Y2Vfd2FpdF9zZXEgLSB3YWl0IGZvciBhIHNwZWNpZmljIHNlcXVlbmNlIG51bWJlcgorICoKKyAq IEBkZXZfcHJpdjogaXB2ciBkZXZpY2UgcG9pbnRlcgorICogQHRhcmdldF9zZXE6IHNlcXVlbmNl IG51bWJlciB3ZSB3YW50IHRvIHdhaXQgZm9yCisgKiBAaW50cjogdXNlIGludGVycnVwdGFibGUg c2xlZXAKKyAqCisgKiBXYWl0IGZvciB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlIG51bWJlciB0byBi ZSB3cml0dGVuLgorICogQGludHIgc2VsZWN0cyB3aGV0aGVyIHRvIHVzZSBpbnRlcnJ1cHRhYmxl ICh0cnVlKSBvciBub24taW50ZXJydXB0YWJsZQorICogKGZhbHNlKSBzbGVlcCB3aGVuIHdhaXRp bmcgZm9yIHRoZSBzZXF1ZW5jZSBudW1iZXIuCisgKiBSZXR1cm5zIDAgaWYgdGhlIHNlcXVlbmNl IG51bWJlciBoYXMgcGFzc2VkLCBlcnJvciBmb3IgYWxsIG90aGVyIGNhc2VzLgorICogLUVERUFE TEsgaXMgcmV0dXJuZWQgd2hlbiBhIEdQVSBsb2NrdXAgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgKi8K K3N0YXRpYyBpbnQzMl90IGlwdnJfZmVuY2Vfd2FpdF9zZXEoc3RydWN0IGRybV9pcHZyX3ByaXZh dGUgKmRldl9wcml2LAorCQkJCQl1aW50MTZfdCB0YXJnZXRfc2VxLCBib29sIGludHIpCit7CisJ c3RydWN0IGlwdnJfZmVuY2VfZHJpdmVyCSpmZW5jZV9kcnYgPSAmZGV2X3ByaXYtPmZlbmNlX2Ry djsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGxhc3RfYWN0aXZpdHk7CisJdWludDE2X3Qgc2ln bmFsZWRfc2VxOworCWludDMyX3QgcmV0OworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWJv b2wgc2lnbmFsZWQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5mZW5jZV9kcnYuZmVu Y2VfbG9jaywgaXJxX2ZsYWdzKTsKKworCXdoaWxlIChpcHZyX3NlcV9hZnRlcih0YXJnZXRfc2Vx LAorCQkJKHVpbnQxNl90KWF0b21pY19yZWFkKCZmZW5jZV9kcnYtPnNpZ25hbGVkX3NlcSkpKSB7 CisJCS8qIHNlZW1zIHRoZSBmZW5jZV9kcnYtPmxhc3RfYWN0aXZpdHkgaXMgdXNlbGVzcz8gKi8K KwkJdGltZW91dCA9IElQVlJfRkVOQ0VfSklGRklFU19USU1FT1VUOworCQlzaWduYWxlZF9zZXEg PSBhdG9taWNfcmVhZCgmZmVuY2VfZHJ2LT5zaWduYWxlZF9zZXEpOworCQkvKiBzYXZlIGxhc3Qg YWN0aXZpdHkgdmFsdWVlLCB1c2VkIHRvIGNoZWNrIGZvciBHUFUgbG9ja3VwcyAqLworCQlsYXN0 X2FjdGl2aXR5ID0gZmVuY2VfZHJ2LT5sYXN0X2FjdGl2aXR5OworCisJCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmRldl9wcml2LT5mZW5jZV9kcnYuZmVuY2VfbG9jaywgaXJxX2ZsYWdzKTsKKwkJ aWYgKGludHIpIHsKKwkJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAor CQkJCWRldl9wcml2LT5mZW5jZV9xdWV1ZSwKKwkJCQkoc2lnbmFsZWQgPSBpcHZyX2ZlbmNlX3Np Z25hbGVkKGRldl9wcml2LCB0YXJnZXRfc2VxKSksCisJCQkJdGltZW91dCk7CisJCX0gZWxzZSB7 CisJCQlyZXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoCisJCQkJZGV2X3ByaXYtPmZlbmNlX3F1ZXVl LAorCQkJCShzaWduYWxlZCA9IGlwdnJfZmVuY2Vfc2lnbmFsZWQoZGV2X3ByaXYsIHRhcmdldF9z ZXEpKSwKKwkJCQl0aW1lb3V0KTsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYt PmZlbmNlX2Rydi5mZW5jZV9sb2NrLCBpcnFfZmxhZ3MpOworCisJCWlmICh1bmxpa2VseSghc2ln bmFsZWQpKSB7CisJCQkvKiB3ZSB3ZXJlIGludGVycnVwdGVkIGZvciBzb21lIHJlYXNvbiBhbmQg ZmVuY2UKKwkJCSAqIGlzbid0IHNpZ25hbGVkIHlldCwgcmVzdW1lIHdhaXRpbmcgdW50aWwgdGlt ZW91dCAgKi8KKwkJCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQkJCS8qIHNob3VsZCByZXR1 cm4gLUVSRVNUQVJUU1lTLAorCQkJCSAqIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsICovCisJCQkJ Y29udGludWU7CisJCQl9CisKKwkJCS8qIGNoZWNrIGlmIHNlcXVlbmNlIHZhbHVlIGhhcyBjaGFu Z2VkIHNpbmNlCisJCQkgKiBsYXN0X2FjdGl2aXR5ICovCisJCQlpZiAoc2lnbmFsZWRfc2VxICE9 CisJCQkJYXRvbWljX3JlYWQoJmZlbmNlX2Rydi0+c2lnbmFsZWRfc2VxKSkgeworCQkJCWNvbnRp bnVlOworCQkJfQorCisJCQlpZiAobGFzdF9hY3Rpdml0eSAhPSBmZW5jZV9kcnYtPmxhc3RfYWN0 aXZpdHkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogbG9ja3VwIGhhcHBlbiwgaXQg aXMgYmV0dGVyIGhhdmUgc29tZSByZWcgdG8gY2hlY2sgKi8KKwkJCUlQVlJfREVCVUdfV0FSTigi R1BVIGxvY2t1cCAod2FpdGluZyBmb3IgMHglMHggbGFzdCAiCisJCQkJCSJzaWduYWxlZCBmZW5j ZSBpZCAweCV4KS5cbiIsCisJCQkJCXRhcmdldF9zZXEsIHNpZ25hbGVkX3NlcSk7CisKKwkJCS8q IGNoYW5nZSBsYXN0IGFjdGl2aXR5IHNvIG5vYm9keSBlbHNlCisJCQkgKiB0aGluayB0aGVyZSBp cyBhIGxvY2t1cCAqLworCQkJZmVuY2VfZHJ2LT5sYXN0X2FjdGl2aXR5ID0gamlmZmllczsKKwkJ CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5mZW5jZV9kcnYuZmVuY2VfbG9jaywK KwkJCQkJaXJxX2ZsYWdzKTsKKwkJCXJldHVybiAtRURFQURMSzsKKworCQl9CisJfQorCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5mZW5jZV9kcnYuZmVuY2VfbG9jaywgaXJxX2Zs YWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcHZyX2ZlbmNlX3dhaXQgLSB3YWl0IGZv ciBhIGZlbmNlIHRvIHNpZ25hbAorICoKKyAqIEBmZW5jZTogaXB2ciBmZW5jZSBvYmplY3QKKyAq IEBpbnRyOiB1c2UgaW50ZXJydXB0YWJsZSBzbGVlcAorICogQG5vX3dhaXQ6IG5vdCBzaWduYWxl ZCwgaWYgbmVlZCBhZGQgaW50byB3YWl0IHF1ZXVlCisgKgorICogV2FpdCBmb3IgdGhlIHJlcXVl c3RlZCBmZW5jZSB0byBzaWduYWwgKGFsbCBhc2ljcykuCisgKiBAaW50ciBzZWxlY3RzIHdoZXRo ZXIgdG8gdXNlIGludGVycnVwdGFibGUgKHRydWUpIG9yIG5vbi1pbnRlcnJ1cHRhYmxlCisgKiAo ZmFsc2UpIHNsZWVwIHdoZW4gd2FpdGluZyBmb3IgdGhlIGZlbmNlLgorICogUmV0dXJucyAwIGlm IHRoZSBmZW5jZSBoYXMgcGFzc2VkLCBlcnJvciBmb3IgYWxsIG90aGVyIGNhc2VzLgorICovCitp bnQzMl90IGlwdnJfZmVuY2Vfd2FpdChzdHJ1Y3QgaXB2cl9mZW5jZSAqZmVuY2UsIGJvb2wgaW50 ciwgYm9vbCBub193YWl0KQoreworCWludDMyX3QgcmV0OworCXN0cnVjdCBkcm1faXB2cl9wcml2 YXRlICpkZXZfcHJpdjsKKworCWlmIChmZW5jZSA9PSBOVUxMIHx8IGZlbmNlLT5zZXEgPT0gSVBW Ul9GRU5DRV9TSUdOQUxFRF9TRVEpIHsKKwkJSVBWUl9ERUJVR19HRU5FUkFMKCJmZW5jZSBpcyBO VUxMIG9yIGhhcyBiZWVuIHNpbmdhbGVkLlxuIik7CisJCXJldHVybiAwOworCX0KKwlkZXZfcHJp diA9IGZlbmNlLT5kZXZfcHJpdjsKKworCUlQVlJfREVCVUdfR0VORVJBTCgid2FpdCBmZW5jZSBz ZXEgJXUsIGxhc3Qgc2lnbmFsZWQgc2VxIGlzICVkLCAiCisJCQkibGFzdCBlbWl0dGVkIHNlcSBp cyAldS5cbiIsIGZlbmNlLT5zZXEsCisJCQlhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmZlbmNlX2Ry di5zaWduYWxlZF9zZXEpLAorCQkJZGV2X3ByaXYtPmZlbmNlX2Rydi5zeW5jX3NlcSk7CisJdHJh Y2VfaXB2cl9mZW5jZV93YWl0KGZlbmNlLAorCQkJYXRvbWljX3JlYWQoJmRldl9wcml2LT5mZW5j ZV9kcnYuc2lnbmFsZWRfc2VxKSwKKwkJCWRldl9wcml2LT5mZW5jZV9kcnYuc3luY19zZXEpOwor CisJaWYgKGlwdnJfZmVuY2Vfc2lnbmFsZWQoZGV2X3ByaXYsIGZlbmNlLT5zZXEpKSB7CisJCUlQ VlJfREVCVUdfR0VORVJBTCgiZmVuY2UgaGFzIGJlZW4gc2lnbmFsZWQuXG4iKTsKKwkJLyoKKwkJ ICogY29tcGFyZSB3aXRoIHR0bV9ib193YWl0LCBkb24ndCBuZWVkIGNyZWF0ZSBhIHRtcF9vYmoK KwkJICogaXQgaXMgYmV0dGVyIHdlIGFsc28gc2V0IGJvLT5mZW5jZSA9IE5VTEwKKwkJICovCisJ CWZlbmNlLT5zZXEgPSBJUFZSX0ZFTkNFX1NJR05BTEVEX1NFUTsKKwkJaXB2cl9mZW5jZV91bnJl ZigmZmVuY2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobm9fd2FpdCkKKwkJcmV0dXJuIC1F QlVTWTsKKworCXJldCA9IGlwdnJfZmVuY2Vfd2FpdF9zZXEoZGV2X3ByaXYsIGZlbmNlLT5zZXEs IGludHIpOworCWlmIChyZXQpIHsKKwkJaWYgKHJldCA9PSAtRURFQURMSykKKwkJCWlwdnJfZmVu Y2VfbG9ja3VwKGRldl9wcml2LCBmZW5jZSk7CisJCXJldHVybiByZXQ7CisJfQorCWZlbmNlLT5z ZXEgPSBJUFZSX0ZFTkNFX1NJR05BTEVEX1NFUTsKKworCXJldHVybiAwOworfQorCisvKioKKyAq IGlwdnJfZmVuY2VfZHJpdmVyX2luaXQgLSBpbml0IHRoZSBmZW5jZSBkcml2ZXIKKyAqCisgKiBA ZGV2X3ByaXY6IGlwdnIgZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBJbml0IHRoZSBmZW5jZSBkcml2 ZXIsIHdpbGwgbm90IGZhaWwKKyAqLwordm9pZCBpcHZyX2ZlbmNlX2RyaXZlcl9pbml0KHN0cnVj dCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3By aXYtPmZlbmNlX2Rydi5mZW5jZV9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXZfcHJp di0+ZmVuY2VfcXVldWUpOworCWRldl9wcml2LT5mZW5jZV9kcnYuc3luY19zZXEgPSAwOworCWF0 b21pY19zZXQoJmRldl9wcml2LT5mZW5jZV9kcnYuc2lnbmFsZWRfc2VxLCAwKTsKKwlkZXZfcHJp di0+ZmVuY2VfZHJ2Lmxhc3RfYWN0aXZpdHkgPSBqaWZmaWVzOworCWRldl9wcml2LT5mZW5jZV9k cnYuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKK30KKworLyoqCisgKiBpcHZyX2ZlbmNlX3dhaXRfZW1w dHlfbG9ja2VkIC0gd2FpdCBmb3IgYWxsIGZlbmNlcyB0byBzaWduYWwKKyAqCisgKiBAZGV2X3By aXY6IGlwdnIgZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBXYWl0IGZvciBhbGwgZmVuY2VzIHRvIGJl IHNpZ25hbGxlZC4KKyAqLwordm9pZCBpcHZyX2ZlbmNlX3dhaXRfZW1wdHlfbG9ja2VkKHN0cnVj dCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1aW50MTZfdCBzZXE7CisKKwlzZXEg PSBkZXZfcHJpdi0+ZmVuY2VfZHJ2LnN5bmNfc2VxOworCisJd2hpbGUoMSkgeworCQlpbnQzMl90 IHJldDsKKwkJcmV0ID0gaXB2cl9mZW5jZV93YWl0X3NlcShkZXZfcHJpdiwgc2VxLCBmYWxzZSk7 CisJCWlmIChyZXQgPT0gMCkgeworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHJldCA9PSAtRURF QURMSykgeworCQkJaXB2cl9mZW5jZV9sb2NrdXAoZGV2X3ByaXYsIE5VTEwpOworCQkJSVBWUl9E RUJVR19XQVJOKCJMb2NrdXAgZm91bmQgd2FpdGluZyBmb3Igc2VxICVkLlxuIiwKKwkJCQkJc2Vx KTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorfQorCisv KioKKyAqIGlwdnJfZmVuY2VfZHJpdmVyX2ZpbmkgLSB0ZWFyIGRvd24gdGhlIGZlbmNlIGRyaXZl cgorICogZm9yIGFsbCBwb3NzaWJsZSByaW5ncy4KKyAqCisgKiBAZGV2X3ByaXY6IGlwdnIgZGV2 aWNlIHBvaW50ZXIKKyAqCisgKiBUZWFyIGRvd24gdGhlIGZlbmNlIGRyaXZlciBmb3IgYWxsIHBv c3NpYmxlIHJpbmdzIChhbGwgYXNpY3MpLgorICovCit2b2lkIGlwdnJfZmVuY2VfZHJpdmVyX2Zp bmkoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2KQoreworCWlmICghZGV2X3ByaXYt PmZlbmNlX2Rydi5pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCWlwdnJfZmVuY2Vfd2FpdF9lbXB0 eV9sb2NrZWQoZGV2X3ByaXYpOworCXdha2VfdXBfYWxsKCZkZXZfcHJpdi0+ZmVuY2VfcXVldWUp OworCWRldl9wcml2LT5mZW5jZV9kcnYuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKK30KKworLyoqCisg KiBpcHZyX2ZlbmNlX3JlZiAtIHRha2UgYSByZWYgb24gYSBmZW5jZQorICoKKyAqIEBmZW5jZTog ZmVuY2Ugb2JqZWN0CisgKgorICogVGFrZSBhIHJlZmVyZW5jZSBvbiBhIGZlbmNlIChhbGwgYXNp Y3MpLgorICogUmV0dXJucyB0aGUgZmVuY2UuCisgKi8KK3N0cnVjdCBpcHZyX2ZlbmNlICppcHZy X2ZlbmNlX3JlZihzdHJ1Y3QgaXB2cl9mZW5jZSAqZmVuY2UpCit7CisJa3JlZl9nZXQoJmZlbmNl LT5rcmVmKTsKKwlyZXR1cm4gZmVuY2U7Cit9CisKKy8qKgorICogaXB2cl9mZW5jZV91bnJlZiAt IHJlbW92ZSBhIHJlZiBvbiBhIGZlbmNlCisgKgorICogQGZlbmNlOiBpcHZyIGZlbmNlIG9iamVj dAorICoKKyAqIFJlbW92ZSBhIHJlZmVyZW5jZSBvbiBhIGZlbmNlLCBpZiByZWYgPT0gMCwgZGVz dG9yeSB0aGUgZmVuY2UuCisgKi8KK3ZvaWQgaXB2cl9mZW5jZV91bnJlZihzdHJ1Y3QgaXB2cl9m ZW5jZSAqKmZlbmNlKQoreworCXN0cnVjdCBpcHZyX2ZlbmNlICp0bXAgPSAqZmVuY2U7CisKKwkq ZmVuY2UgPSBOVUxMOworCWlmICh0bXApIHsKKwkJa3JlZl9wdXQoJnRtcC0+a3JlZiwgJmlwdnJf ZmVuY2VfZGVzdHJveSk7CisJfQorfQorCisvKioKKyAqIGlwdnJfZmVuY2VfYnVmZmVyX29iamVj dHMgLSBiaW5kIGZlbmNlIHRvIGJ1ZmZlciBsaXN0CisgKgorICogQGxpc3Q6IHZhbGlkYXRpb24g YnVmZmVyIGxpc3QKKyAqIEBmZW5jZTogaXB2ciBmZW5jZSBvYmplY3QKKyAqCisgKiBiaW5kIGEg ZmVuY2UgdG8gYWxsIG9iaiBpbiB0aGUgdmFsaWRhdGlvbiBsaXN0CisgKi8KK3ZvaWQKK2lwdnJf ZmVuY2VfYnVmZmVyX29iamVjdHMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IGlwdnJf ZmVuY2UgKmZlbmNlLCBpbnQgZmVuY2VfZmQpCit7CisJc3RydWN0IGlwdnJfdmFsaWRhdGVfYnVm ZmVyICplbnRyeTsKKwlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqOworCisJaWYgKGxp c3RfZW1wdHkobGlzdCkpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnks IGxpc3QsIGhlYWQpIHsKKwkJb2JqID0gZW50cnktPmlwdnJfZ2VtX2JvOworCQkvKioKKwkJICog ZG8gbm90IHVwZGF0ZSBmZW5jZSBpZiB2YWxfYXJncyBzcGVjaWZpZXMgc28KKwkJICovCisJCWlm ICghZW50cnktPnZhbF9yZXEuc2tpcF9mZW5jZSkgeworCQkJZW50cnktPm9sZF9mZW5jZSA9IG9i ai0+ZmVuY2U7CisJCQlvYmotPmZlbmNlID0gaXB2cl9mZW5jZV9yZWYoZmVuY2UpOworCQkJZW50 cnktPnZhbF9yZXEuZmVuY2VfZmQgPSBmZW5jZV9mZDsKKwkJfQorCQllbHNlIHsKKwkJCUlQVlJf REVCVUdfR0VORVJBTCgib2JqIDB4JWx4IG1hcmtlZCBhcyBub24tZmVuY2VcbiIsCisJCQkJaXB2 cl9nZW1fb2JqX21tdV9vZmZzZXQob2JqKSk7CisJCX0KKwkJaXB2cl9ib191bnJlc2VydmUob2Jq KTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBsaXN0LCBoZWFkKSB7CisJCWlm ICghZW50cnktPnZhbF9yZXEuc2tpcF9mZW5jZSAmJiBlbnRyeS0+b2xkX2ZlbmNlKQorCQkJaXB2 cl9mZW5jZV91bnJlZigmZW50cnktPm9sZF9mZW5jZSk7CisJfQorfQorCitzdGF0aWMgaW50MzJf dCBpcHZyX3VzcmZlbmNlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUg KmZpbGUpCit7CisJc3RydWN0IGlwdnJfZmVuY2UgKmZlbmNlID0gZmlsZS0+cHJpdmF0ZV9kYXRh OworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IE5VTEw7CisJaW50IHJldDsK KwlCVUdfT04oIWZlbmNlKTsKKwlkZXZfcHJpdiA9IGZlbmNlLT5kZXZfcHJpdjsKKwlyZXQgPSBr cmVmX3B1dCgmZmVuY2UtPmtyZWYsICZpcHZyX2ZlbmNlX2Rlc3Ryb3kpOworCUlQVlJfREVCVUdf R0VORVJBTCgiZmVuY2UgZm9yIHNlcSAldSBpcyByZWxlYXNlZCBieSB1c3Igc3BhY2VcbiIsIGZl bmNlLT5zZXEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBpcHZyX3VzcmZl bmNlX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0 IGlwdnJfZmVuY2UgKmZlbmNlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1faXB2 cl9wcml2YXRlICpkZXZfcHJpdiA9IE5VTEw7CisJQlVHX09OKCFmZW5jZSk7CisJZGV2X3ByaXYg PSBmZW5jZS0+ZGV2X3ByaXY7CisJaWYgKGlwdnJfZmVuY2Vfc2lnbmFsZWQoZGV2X3ByaXYsIGZl bmNlLT5zZXEpKSB7CisJCUlQVlJfREVCVUdfR0VORVJBTCgic2VxICV1IGlzIGFscmVhZHkgc2ln bmFsbGVkLCByZXR1cm4gUE9MTElOIGltbWVkaWF0ZWx5XG4iLCBmZW5jZS0+c2VxKTsKKwkJcmV0 dXJuIFBPTExJTjsKKwl9CisJSVBWUl9ERUJVR19HRU5FUkFMKCJzZXEgJXUgaXMgbm90IHNpZ25h bGxlZCwgd2FpdCBmb3IgZmVuY2VfcXVldWUgYXQgJWx1XG4iLCBmZW5jZS0+c2VxLCBqaWZmaWVz KTsKKwlwb2xsX3dhaXQoZmlsZSwgJmRldl9wcml2LT5mZW5jZV9xdWV1ZSwgd2FpdCk7CisKKwkv KgorCSAqIE1ha2Ugc3VyZSB0aGF0IHJlYWRzIHRvIGZlbmNlLT5zdGF0dXMgYXJlIG9yZGVyZWQg d2l0aCB0aGUKKwkgKiB3YWl0IHF1ZXVlIGV2ZW50IHRyaWdnZXJpbmcKKwkgKi8KKwkvKiBzbXBf cm1iKCk7ICovCisJSVBWUl9ERUJVR19HRU5FUkFMKCJzZXEgJXUsIGZlbmNlX3F1ZXVlIGF3YWtl biB1cCBhdCAlbHVcbiIsIGZlbmNlLT5zZXEsIGppZmZpZXMpOworCisJaWYgKGlwdnJfZmVuY2Vf c2lnbmFsZWQoZGV2X3ByaXYsIGZlbmNlLT5zZXEpKSB7CisJCUlQVlJfREVCVUdfR0VORVJBTCgi c2VxICV1IGlzIHNpZ25hbGxlZCBhZnRlciB3YWl0aW5nXG4iLCBmZW5jZS0+c2VxKTsKKwkJcmV0 dXJuIFBPTExJTjsKKwl9CisJZWxzZSB7CisJCUlQVlJfREVCVUdfR0VORVJBTCgic2VxICV1IGlz IHN0aWxsIE5PVCBzaWduYWxsZWQgYWZ0ZXIgd2FpdGluZ1xuIiwgZmVuY2UtPnNlcSk7CisJCXJl dHVybiAwOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZmVu Y2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZmVuY2UuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi41NDg0NmRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2lwdnIvaXB2cl9mZW5jZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgorICogaXB2cl9mZW5jZS5oOiBJUFZSIGhlYWRlciBmaWxlIGZvciBmZW5jZSBoYW5kbGlu ZworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGlsbHNib3Jv LCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh bG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBK aWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5nQGlu dGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0lQVlJfRkVOQ0Vf SF8KKyNkZWZpbmUgX0lQVlJfRkVOQ0VfSF8KKworI2luY2x1ZGUgImlwdnJfZHJ2LmgiCisKKy8q IHNlcV9hZnRlcihhLGIpIHJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxIGEgaXMgYWZ0ZXIgc2VxIGIu Ki8KKyNkZWZpbmUgaXB2cl9zZXFfYWZ0ZXIoYSxiKSAgICAgXAorICAgICh0eXBlY2hlY2sodWlu dDE2X3QsIGEpICYmIFwKKyAgICAgdHlwZWNoZWNrKHVpbnQxNl90LCBiKSAmJiBcCisgICAgICgo aW50MTZfdCkoYSAtIGIpID4gMCkpCisKKyNkZWZpbmUgSVBWUl9GRU5DRV9KSUZGSUVTX1RJTUVP VVQJCShIWiAvIDIpCisvKiBmZW5jZSBzZXEgYXJlIHNldCB0byB0aGlzIG51bWJlciB3aGVuIHNp Z25hbGVkICovCisjZGVmaW5lIElQVlJfRkVOQ0VfU0lHTkFMRURfU0VRCQkwTEwKKworc3RydWN0 IGlwdnJfZmVuY2UgeworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlCQkqZGV2X3ByaXY7CisJc3Ry dWN0IGtyZWYJCQlrcmVmOworCS8qIHByb3RlY3RlZCBieSBkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZl bmNlX2xvY2sgKi8KKwl1aW50MTZfdAkJCXNlcTsKKwkvKiBmaWVsZHMgZm9yIHVzcmZlbmNlICov CisJc3RydWN0IGZpbGUJCQkqZmlsZTsKKwljaGFyCQkJCW5hbWVbMzJdOworfTsKKworaW50MzJf dCBpcHZyX2ZlbmNlX3dhaXQoc3RydWN0IGlwdnJfZmVuY2UgKmZlbmNlLCBib29sIGludHIsIGJv b2wgbm9fd2FpdCk7CisKK3ZvaWQgaXB2cl9mZW5jZV9wcm9jZXNzKHN0cnVjdCBkcm1faXB2cl9w cml2YXRlICpkZXZfcHJpdiwKKwkJCSB1aW50MTZfdCBzZXEsIHVpbnQ4X3QgZXJyKTsKKwordm9p ZCBpcHZyX2ZlbmNlX2RyaXZlcl9pbml0KHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJp dik7CisKK3ZvaWQgaXB2cl9mZW5jZV9kcml2ZXJfZmluaShzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0 ZSAqZGV2X3ByaXYpOworCitpbnQzMl90IGlwdnJfZmVuY2VfY3JlYXRlKHN0cnVjdCBkcm1faXB2 cl9wcml2YXRlICpkZXZfcHJpdiwKKwkJCXN0cnVjdCBpcHZyX2ZlbmNlICoqZmVuY2UsIGludCAq ZmVuY2VfZmQpOworCit2b2lkCitpcHZyX2ZlbmNlX2J1ZmZlcl9vYmplY3RzKHN0cnVjdCBsaXN0 X2hlYWQgKmxpc3QsIHN0cnVjdCBpcHZyX2ZlbmNlICpmZW5jZSwgaW50IGZlbmNlX2ZkKTsKKwor dm9pZCBpcHZyX2ZlbmNlX3VucmVmKHN0cnVjdCBpcHZyX2ZlbmNlICoqZmVuY2UpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZ2VtLmMgYi9kcml2ZXJz L2dwdS9kcm0vaXB2ci9pcHZyX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmU3MjQ4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZy X2dlbS5jCkBAIC0wLDAgKzEsMTkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlwdnJfZ2Vt LmM6IElQVlIgaG9vayBmaWxlIGZvciBnZW0gaW9jdGxzCisgKgorICogQ29weXJpZ2h0IChjKSAy MDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFsbCBSaWdodHMg UmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1 bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICog bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAor ICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29t PgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKworI2luY2x1ZGUgImlwdnJfZ2VtLmgiCisjaW5jbHVkZSAiaXB2cl9idWZmZXIu aCIKKyNpbmNsdWRlICJpcHZyX2ZlbmNlLmgiCisjaW5jbHVkZSAiaXB2cl9leGVjLmgiCisjaW5j bHVkZSAiaXB2cl90cmFjZS5oIgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxs aW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1h LWJ1Zi5oPgorI2luY2x1ZGUgPGRybV9nZW0uaD4KKy8qKgorICogQ3JlYXRlcyBhIG5ldyBtbSBv YmplY3QgYW5kIHJldHVybnMgYSBoYW5kbGUgdG8gaXQuCisgKi8KK2ludDMyX3QgaXB2cl9nZW1f Y3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pcHZyX2dlbV9jcmVhdGUg KmFyZ3MgPSBkYXRhOworCWlmIChhcmdzLT5jYWNoZV9sZXZlbCA+PSBJUFZSX0NBQ0hFX01BWCkK KwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGlwdnJfZ2VtX2NyZWF0ZShmaWxlX3ByaXYsIGRl diwgYXJncy0+c2l6ZSwgYXJncy0+dGlsaW5nLAorCQkJICAgICAgYXJncy0+Y2FjaGVfbGV2ZWws ICZhcmdzLT5yb3VuZGVkX3NpemUsCisJCQkgICAgICAmYXJncy0+aGFuZGxlLCAmYXJncy0+Z3B1 X29mZnNldCwgJmFyZ3MtPm1hcF9oYW5kbGUpOworfQorCitpbnQzMl90IGlwdnJfZ2VtX2J1c3lf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX2J1c3kgKmFyZ3MgPSBk YXRhOworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmo7CisJaW50MzJfdCByZXQgPSAw OworCisJb2JqID0gdG9faXB2cl9ibyhkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3By aXYsIGFyZ3MtPmhhbmRsZSkpOworCWlmICghb2JqIHx8ICZvYmotPmJhc2UgPT0gTlVMTCkgewor CQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJSVBWUl9ERUJVR19HRU5FUkFMKCJDaGVja2luZyBibyAl cCAoZmVuY2UgJXAgc2VxICV1KSBidXN5IHN0YXR1c1xuIiwKKyAgICAgICAgb2JqLCBvYmotPmZl bmNlLCAoKG9iai0+ZmVuY2UpPyBvYmotPmZlbmNlLT5zZXE6IDApKTsKKworCXJldCA9IGlwdnJf Ym9fcmVzZXJ2ZShvYmosIHRydWUsIGZhbHNlKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQor CQlnb3RvIG91dDsKKwlyZXQgPSBpcHZyX2ZlbmNlX3dhaXQob2JqLT5mZW5jZSwgdHJ1ZSwgdHJ1 ZSk7CisJaXB2cl9ib191bnJlc2VydmUob2JqKTsKKworICAgIGFyZ3MtPmJ1c3kgPSByZXQ/IDE6 IDA7CitvdXQ6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJcmV0 dXJuIHJldDsKK30KKworaW50MzJfdCBpcHZyX3N5bmNfY3B1X2dyYWIoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCQlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCWludDMy X3QgcmV0ID0gMDsKKwlyZXQgPSBpcHZyX2JvX3Jlc2VydmUob2JqLCB0cnVlLCBmYWxzZSk7CisJ aWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXQ7CisJcmV0ID0gaXB2cl9mZW5jZV93 YWl0KG9iai0+ZmVuY2UsIHRydWUsIGZhbHNlKTsKKwlpZiAobGlrZWx5KHJldCA9PSAwKSkKKwkJ YXRvbWljX2luYygmb2JqLT5jcHVfd3JpdGVycyk7CisJZWxzZQorCQlJUFZSX0RFQlVHX1dBUk4o IkZhaWxlZCB0byBjYWxsIGlwdnJfZmVuY2Vfd2FpdC5cbiIpOworCWlwdnJfYm9fdW5yZXNlcnZl KG9iaik7CitvdXQ6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJ cmV0dXJuIHJldDsKK30KK2ludDMyX3QgaXB2cl9zeW5jX2NwdV9yZWxlYXNlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaikKK3sKKwlp cHZyX2dlbV9jbGZsdXNoX29iamVjdChvYmosIGZhbHNlKTsKKwlhdG9taWNfZGVjKCZvYmotPmNw dV93cml0ZXJzKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwly ZXR1cm4gMDsKK30KK2ludDMyX3QgaXB2cl9nZW1fc3luY2NwdV9pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAorCQkJCXZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQor eworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pcHZyX3N5 bmNfY3B1ICphcmdzID0gZGF0YTsKKworCUlQVlJfREVCVUdfRU5UUlkoImVudGVyXG4iKTsKKwlv YmogPSB0b19pcHZyX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJn cy0+aGFuZGxlKSk7CisJaWYgKCZvYmotPmJhc2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9FTlQ7 CisKKwlzd2l0Y2ggKGFyZ3MtPm9wKSB7CisJY2FzZSBJUFZSX1NZTkNDUFVfT1BfR1JBQjoKKwkJ cmV0dXJuIGlwdnJfc3luY19jcHVfZ3JhYihkZXYsIG9iaik7CisJY2FzZSBJUFZSX1NZTkNDUFVf T1BfUkVMRUFTRToKKwkJcmV0dXJuIGlwdnJfc3luY19jcHVfcmVsZWFzZShkZXYsIG9iaik7CisJ ZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKioKKyAqIGlwdnJfZ2VtX3dh aXRfaW9jdGwgLSBpbXBsZW1lbnRzIERSTV9JT0NUTF9JUFZSX0dFTV9XQUlUCisgKiBARFJNX0lP Q1RMX0FSR1M6IHN0YW5kYXJkIGlvY3RsIGFyZ3VtZW50cworICoKKyAqIFJldHVybnMgMCBpZiBz dWNjZXNzZnVsLCBlbHNlIGFuIGVycm9yIGlzIHJldHVybmVkIHdpdGggdGhlIHJlbWFpbmluZyB0 aW1lIGluCisgKiB0aGUgdGltZW91dCBwYXJhbWV0ZXIuCisgKiAgLUVUSU1FOiBvYmplY3QgaXMg c3RpbGwgYnVzeSBhZnRlciB0aW1lb3V0CisgKiAgLUVSRVNUQVJUU1lTOiBzaWduYWwgaW50ZXJy dXB0ZWQgdGhlIHdhaXQKKyAqICAtRU5PTkVOVDogb2JqZWN0IGRvZXNuJ3QgZXhpc3QKKyAqIEFs c28gcG9zc2libGUsIGJ1dCByYXJlOgorICogIC1FQUdBSU46IEdQVSB3ZWRnZWQKKyAqICAtRU5P TUVNOiBkYW1uCisgKiAgLUVOT0RFVjogSW50ZXJuYWwgSVJRIGZhaWwKKyAqICAtRT86IFRoZSBh ZGQgcmVxdWVzdCBmYWlsZWQKKyAqCisgKiBUaGUgd2FpdCBpb2N0bCB3aXRoIGEgdGltZW91dCBv ZiAwIHJlaW1wbGVtZW50cyB0aGUgYnVzeSBpb2N0bC4gV2l0aCBhbnkKKyAqIG5vbi16ZXJvIHRp bWVvdXQgcGFyYW1ldGVyIHRoZSB3YWl0IGlvY3RsIHdpbGwgd2FpdCBmb3IgdGhlIGdpdmVuIG51 bWJlciBvZgorICogbmFub3NlY29uZHMgb24gYW4gb2JqZWN0IGJlY29taW5nIHVuYnVzeS4gU2lu Y2UgdGhlIHdhaXQgaXRzZWxmIGRvZXMgc28KKyAqIHdpdGhvdXQgaG9sZGluZyBzdHJ1Y3RfbXV0 ZXggdGhlIG9iamVjdCBtYXkgYmVjb21lIHJlLWJ1c2llZCBiZWZvcmUgdGhpcworICogZnVuY3Rp b24gY29tcGxldGVzLiBBIHNpbWlsYXIgYnV0IHNob3J0ZXIgKiByYWNlIGNvbmRpdGlvbiBleGlz dHMgaW4gdGhlIGJ1c3kKKyAqIGlvY3RsCisgKi8KK2ludDMyX3QgaXB2cl9nZW1fd2FpdF9pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faXB2cl9nZW1fd2FpdCAqYXJncyA9IGRhdGE7 CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iajsKKwlpbnQzMl90IHJldCA9IDA7CisK KwlJUFZSX0RFQlVHX0VOVFJZKCJ3YWl0ICVkIGJ1ZmZlciB0byBmaW5pc2ggZXhlY3V0aW9uLlxu IiwgYXJncy0+aGFuZGxlKTsKKwlvYmogPSB0b19pcHZyX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1 cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKSk7CisJaWYgKCZvYmotPmJhc2UgPT0gTlVM TCkgeworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXQgPSBpcHZyX2JvX3Jlc2VydmUob2Jq LCB0cnVlLCBmYWxzZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXQ7CisK Kwl0cmFjZV9pcHZyX2dlbV93YWl0X2lvY3RsKG9iaik7CisJcmV0ID0gaXB2cl9mZW5jZV93YWl0 KG9iai0+ZmVuY2UsIHRydWUsIGZhbHNlKTsKKworCWlwdnJfYm9fdW5yZXNlcnZlKG9iaik7CisK K291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwlyZXR1cm4g cmV0OworfQorCitpbnQzMl90IGlwdnJfZ2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sK KwlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX3VzZXJwdHIgKmFyZ3MgPSBkYXRhOworCXJldHVybiBpcHZy X2dlbV91c2VycHRyKGZpbGVfcHJpdiwgZGV2LCBhcmdzLT51c2VyX3B0ciwKKwkJCQlhcmdzLT51 c2VyX3NpemUsIGFyZ3MtPmNhY2hlX2xldmVsLCBhcmdzLT50aWxpbmcsCisJCQkJJmFyZ3MtPmhh bmRsZSwgJmFyZ3MtPmdwdV9vZmZzZXQpOworfQorCitpbnQzMl90IGlwdnJfZ2VtX21tYXBfb2Zm c2V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJdm9pZCAqZGF0YSwgc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pcHZyX2dlbV9tbWFwX29mZnNl dCAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iajsKKworCUlQ VlJfREVCVUdfRU5UUlkoImdldHRpbmcgbW1hcCBvZmZzZXQgZm9yIEJPICV1LlxuIiwgYXJncy0+ aGFuZGxlKTsKKwlvYmogPSB0b19pcHZyX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZp bGVfcHJpdiwgYXJncy0+aGFuZGxlKSk7CisKKwlhcmdzLT5vZmZzZXQgPSBpcHZyX2dlbV9tbWFw X29mZnNldChvYmopOworCXJldHVybiBhcmdzLT5vZmZzZXQ/IDA6IC1FRkFVTFQ7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2dlbS5oIGIvZHJpdmVycy9ncHUvZHJt L2lwdnIvaXB2cl9nZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmIx NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9nZW0uaApA QCAtMCwwICsxLDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlwdnJfZ2VtLmg6IElQVlIg aGVhZGVyIGZpbGUgZm9yIEdFTSBpb2N0bHMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50 ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZl ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg V0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRl dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBG cmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoK KyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKgor ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JUFZSX0dFTV9IXworI2RlZmluZSBfSVBW Ul9HRU1fSF8KKworI2luY2x1ZGUgImlwdnJfZHJ2LmgiCisKKy8qIGlwdnJfZ2VtLmMgKi8KK2lu dDMyX3QgaXB2cl9nZW1fZXhlY2J1ZmZlcl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor CQkJCXZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludDMyX3QgaXB2 cl9nZW1fYnVzeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXZvaWQgKmRhdGEs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludDMyX3QgaXB2cl9nZW1fY3JlYXRlX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJdm9pZCAqZGF0YSwgc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYpOworaW50MzJfdCBpcHZyX2dlbV9zeW5jY3B1X2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCisJCQkJdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYpOworaW50MzJfdCBpcHZyX2dlbV93YWl0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CisJCQkJdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50MzJfdCBp cHZyX2dlbV91c2VycHRyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50MzJfdCBpcHZyX2dlbV9tbWFw X29mZnNldF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXZvaWQgKmRhdGEsIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaXB2ci9pcHZyX21tdS5jIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9tbXUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDZmNTM2Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9tbXUuYwpAQCAtMCwwICsxLDgwNyBA QAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKiBpcHZyX21tdS5jOiBJUFZSIE1NVSBoYW5kbGluZyB0 byBzdXBwb3J0IFZFRCwgVkVDLCBWU1AgYnVmZmVyIGFjY2VzcworICoKKyAqIENvcHlyaWdodCAo YykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBDb3B5cmln aHQgKGMpIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLCBVSworICogQ29weXJpZ2h0 IChjKSAyMDAzIFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAq IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Us CisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAq IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlh bmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImlwdnJf bW11LmgiCisKKy8qCisgKiBDb2RlIGZvciB0aGUgVkVEIE1NVSwgbWF5YmUgYWxzbyBlbmFibGVk IGZvciBWRUMvVlNQCisgKi8KKworLyoKKyAqIGNsZmx1c2ggb24gb25lIHByb2Nlc3NvciBvbmx5 OgorICogY2xmbHVzaCBzaG91bGQgYXBwYXJlbnRseSBmbHVzaCB0aGUgY2FjaGUgbGluZSBvbiBh bGwgcHJvY2Vzc29ycyBpbiBhbgorICogU01QIHN5c3RlbS4KKyAqLworCisvKgorICoga21hcCBh dG9taWM6CisgKiBVc2FnZSBvZiB0aGUgc2xvdHMgbXVzdCBiZSBjb21wbGV0ZWx5IGVuY2Fwc3Vs YXRlZCB3aXRoaW4gYSBzcGlubG9jaywgYW5kCisgKiBubyBvdGhlciBmdW5jdGlvbnMgdGhhdCBt YXkgYmUgdXNpbmcgdGhlIGxvY2tzIGZvciBvdGhlciBwdXJwb3NlZCBtYXkgYmUKKyAqIGNhbGxl ZCBmcm9tIHdpdGhpbiB0aGUgbG9ja2VkIHJlZ2lvbi4KKyAqIFNpbmNlIHRoZSBzbG90cyBhcmUg cGVyIHByb2Nlc3NvciwgdGhpcyB3aWxsIGd1YXJhbnRlZSB0aGF0IHdlIGFyZSB0aGUgb25seQor ICogdXNlci4KKyAqLworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGlwdnJfbW11X3B0X2luZGV4 KHVpbnQzMl90IG9mZnNldCkKK3sKKwlyZXR1cm4gKG9mZnNldCA+PiBJUFZSX1BURV9TSElGVCkg JiAweDNGRjsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBpcHZyX21tdV9wZF9pbmRleCh1 aW50MzJfdCBvZmZzZXQpCit7CisJcmV0dXJuIG9mZnNldCA+PiBJUFZSX1BERV9TSElGVDsKK30K KworI2lmIGRlZmluZWQoQ09ORklHX1g4NikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcHZyX2NsZmx1 c2godm9pZCAqYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xmbHVzaCAoJTApXG4i IDogOiAiciIoYWRkcikgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXB2 cl9tbXVfY2xmbHVzaChzdHJ1Y3QgaXB2cl9tbXVfZHJpdmVyICpkcml2ZXIsIHZvaWQgKmFkZHIp Cit7CisJaWYgKCFkcml2ZXItPmhhc19jbGZsdXNoKQorCQlyZXR1cm47CisKKwltYigpOworCWlw dnJfY2xmbHVzaChhZGRyKTsKKwltYigpOworfQorCitzdGF0aWMgdm9pZAoraXB2cl9tbXVfcGFn ZV9jbGZsdXNoKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHBhZ2UqIHBh Z2UpCit7CisJdWludDMyX3QgY2xmbHVzaF9hZGQgPSBkcml2ZXItPmNsZmx1c2hfYWRkID4+IFBB R0VfU0hJRlQ7CisJdWludDMyX3QgY2xmbHVzaF9jb3VudCA9IFBBR0VfU0laRSAvIGNsZmx1c2hf YWRkOworCWludCBpOworCXVpbnQ4X3QgKmNsZjsKKworCWNsZiA9IGttYXBfYXRvbWljKHBhZ2Up OworCisJbWIoKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2xmbHVzaF9jb3VudDsgKytpKSB7CisJCWlw dnJfY2xmbHVzaChjbGYpOworCQljbGYgKz0gY2xmbHVzaF9hZGQ7CisJfQorCW1iKCk7CisKKwlr dW5tYXBfYXRvbWljKGNsZik7Cit9CisKK3N0YXRpYyB2b2lkIGlwdnJfbW11X3BhZ2VzX2NsZmx1 c2goc3RydWN0IGlwdnJfbW11X2RyaXZlciAqZHJpdmVyLAorCQkJCXN0cnVjdCBwYWdlICpwYWdl W10sIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQoreworCWludCBpOworCisJaWYgKCFkcml2ZXIt Pmhhc19jbGZsdXNoKQorCQlyZXR1cm4gOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsg aSsrKQorCQlpcHZyX21tdV9wYWdlX2NsZmx1c2goZHJpdmVyLCAqcGFnZSsrKTsKK30KKyNlbHNl CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXB2cl9tbXVfY2xmbHVzaChzdHJ1Y3QgaXB2cl9tbXVf ZHJpdmVyICpkcml2ZXIsIHZvaWQgKmFkZHIpCit7CisJOworfQorCitzdGF0aWMgdm9pZCBpcHZy X21tdV9wYWdlc19jbGZsdXNoKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlciwKKwkJCQlz dHJ1Y3QgcGFnZSAqcGFnZVtdLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKK3sKKwlwcmludGso IkR1bXkgaXB2cl9tbXVfcGFnZXNfY2xmbHVzaFxuIik7Cit9CisKKyNlbmRpZgorCitzdGF0aWMg dm9pZAoraXB2cl9tbXVfZmx1c2hfcGRfbG9ja2VkKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRy aXZlciwgaW50MzJfdCBmb3JjZSkKK3sKKwlpZiAoYXRvbWljX3JlYWQoJmRyaXZlci0+bmVlZHNf dGxiZmx1c2gpIHx8IGZvcmNlKSB7CisJCWlmICghZHJpdmVyLT5kZXZfcHJpdikKKwkJCWdvdG8g b3V0OworCisJCWF0b21pY19zZXQoCisJCQkmZHJpdmVyLT5kZXZfcHJpdi0+aXB2cl9tbXVfaW52 YWxkYywKKwkJCTEpOworCisJfQorb3V0OgorCWF0b21pY19zZXQoJmRyaXZlci0+bmVlZHNfdGxi Zmx1c2gsIDApOworfQorCit2b2lkIGlwdnJfbW11X2ZsdXNoKHN0cnVjdCBpcHZyX21tdV9kcml2 ZXIgKmRyaXZlciwgaW50MzJfdCByY19wcm90KQoreworCWlmIChyY19wcm90KQorCQlkb3duX3dy aXRlKCZkcml2ZXItPnNlbSk7CisKKwlpZiAoIWRyaXZlci0+ZGV2X3ByaXYpCisJCWdvdG8gb3V0 OworCisJYXRvbWljX3NldCgmZHJpdmVyLT5kZXZfcHJpdi0+aXB2cl9tbXVfaW52YWxkYywgMSk7 CisKK291dDoKKwlpZiAocmNfcHJvdCkKKwkJdXBfd3JpdGUoJmRyaXZlci0+c2VtKTsKK30KKwor dm9pZCBpcHZyX21tdV9zZXRfcGRfY29udGV4dChzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkLCBpbnQz Ml90IGh3X2NvbnRleHQpCit7CisJLyp0dG1fdHRfY2FjaGVfZmx1c2goJnBkLT5wLCAxKTsqLwor CWlwdnJfbW11X3BhZ2VzX2NsZmx1c2gocGQtPmRyaXZlciwgJnBkLT5wLCAxKTsKKwlkb3duX3dy aXRlKCZwZC0+ZHJpdmVyLT5zZW0pOworCXdtYigpOworCWlwdnJfbW11X2ZsdXNoX3BkX2xvY2tl ZChwZC0+ZHJpdmVyLCAxKTsKKwlwZC0+aHdfY29udGV4dCA9IGh3X2NvbnRleHQ7CisJdXBfd3Jp dGUoJnBkLT5kcml2ZXItPnNlbSk7CisKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25n CitpcHZyX3BkX2FkZHJfZW5kKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQp Cit7CisKKwlhZGRyID0gKGFkZHIgKyBJUFZSX1BERV9NQVNLICsgMSkgJiB+SVBWUl9QREVfTUFT SzsKKwlyZXR1cm4gKGFkZHIgPCBlbmQpID8gYWRkciA6IGVuZDsKK30KKworc3RhdGljIGlubGlu ZSB1aW50MzJfdCBpcHZyX21tdV9tYXNrX3B0ZSh1aW50MzJfdCBwZm4sIGludDMyX3QgdHlwZSkK K3sKKwl1aW50MzJfdCBtYXNrID0gSVBWUl9QVEVfVkFMSUQ7CisKKwlpZiAodHlwZSAmIElQVlJf TU1VX0NBQ0hFRF9NRU1PUlkpCisJCW1hc2sgfD0gSVBWUl9QVEVfQ0FDSEVEOworCWlmICh0eXBl ICYgSVBWUl9NTVVfUk9fTUVNT1JZKQorCQltYXNrIHw9IElQVlJfUFRFX1JPOworCWlmICh0eXBl ICYgSVBWUl9NTVVfV09fTUVNT1JZKQorCQltYXNrIHw9IElQVlJfUFRFX1dPOworCisJcmV0dXJu IChwZm4gPDwgUEFHRV9TSElGVCkgfCBtYXNrOworfQorCitzdHJ1Y3QgaXB2cl9tbXVfcGQgKmlw dnJfbW11X2FsbG9jX3BkKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlciwKKwkJCQlpbnQz Ml90IHRyYXBfcGFnZWZhdWx0cywgaW50MzJfdCBpbnZhbGlkX3R5cGUpCit7CisJc3RydWN0IGlw dnJfbW11X3BkICpwZCA9IGttYWxsb2Moc2l6ZW9mKCpwZCksIEdGUF9LRVJORUwpOworCXVpbnQz Ml90ICp2OworCWludDMyX3QgaTsKKworCWlmICghcGQpCisJCXJldHVybiBOVUxMOworCisJcGQt PnAgPSBhbGxvY19wYWdlKEdGUF9ETUEzMik7CisJaWYgKCFwZC0+cCkKKwkJZ290byBvdXRfZXJy MTsKKwlwZC0+ZHVtbXlfcHQgPSBhbGxvY19wYWdlKEdGUF9ETUEzMik7CisJaWYgKCFwZC0+ZHVt bXlfcHQpCisJCWdvdG8gb3V0X2VycjI7CisJcGQtPmR1bW15X3BhZ2UgPSBhbGxvY19wYWdlKEdG UF9ETUEzMik7CisJaWYgKCFwZC0+ZHVtbXlfcGFnZSkKKwkJZ290byBvdXRfZXJyMzsKKworCWlm ICghdHJhcF9wYWdlZmF1bHRzKSB7CisJCXBkLT5pbnZhbGlkX3BkZSA9CisJCQlpcHZyX21tdV9t YXNrX3B0ZShwYWdlX3RvX3BmbihwZC0+ZHVtbXlfcHQpLAorCQkJCQkgaW52YWxpZF90eXBlKTsK KwkJcGQtPmludmFsaWRfcHRlID0KKwkJCWlwdnJfbW11X21hc2tfcHRlKHBhZ2VfdG9fcGZuKHBk LT5kdW1teV9wYWdlKSwKKwkJCQkJIGludmFsaWRfdHlwZSk7CisJfSBlbHNlIHsKKwkJcGQtPmlu dmFsaWRfcGRlID0gMDsKKwkJcGQtPmludmFsaWRfcHRlID0gMDsKKwl9CisKKwl2ID0ga21hcChw ZC0+ZHVtbXlfcHQpOworCWlmICghdikKKwkJZ290byBvdXRfZXJyNDsKKwlmb3IgKGkgPSAwOyBp IDwgKFBBR0VfU0laRSAvIHNpemVvZih1aW50MzJfdCkpOyArK2kpCisJCXZbaV0gPSBwZC0+aW52 YWxpZF9wdGU7CisKKwlrdW5tYXAocGQtPmR1bW15X3B0KTsKKworCXYgPSBrbWFwKHBkLT5wKTsK KwlpZiAoIXYpCisJCWdvdG8gb3V0X2VycjQ7CisJZm9yIChpID0gMDsgaSA8IChQQUdFX1NJWkUg LyBzaXplb2YodWludDMyX3QpKTsgKytpKQorCQl2W2ldID0gcGQtPmludmFsaWRfcGRlOworCisJ a3VubWFwKHBkLT5wKTsKKworCXYgPSBrbWFwKHBkLT5kdW1teV9wYWdlKTsKKwlpZiAoIXYpCisJ CWdvdG8gb3V0X2VycjQ7CisJY2xlYXJfcGFnZSh2KTsKKwlrdW5tYXAocGQtPmR1bW15X3BhZ2Up OworCisJcGQtPnRhYmxlcyA9IHZtYWxsb2NfdXNlcihzaXplb2Yoc3RydWN0IGlwdnJfbW11X3B0 ICopICogMTAyNCk7CisJaWYgKCFwZC0+dGFibGVzKQorCQlnb3RvIG91dF9lcnI0OworCisJcGQt Pmh3X2NvbnRleHQgPSAtMTsKKwlwZC0+cGRfbWFzayA9IElQVlJfUFRFX1ZBTElEOworCXBkLT5k cml2ZXIgPSBkcml2ZXI7CisKKwlyZXR1cm4gcGQ7CisKK291dF9lcnI0OgorCV9fZnJlZV9wYWdl KHBkLT5kdW1teV9wYWdlKTsKK291dF9lcnIzOgorCV9fZnJlZV9wYWdlKHBkLT5kdW1teV9wdCk7 CitvdXRfZXJyMjoKKwlfX2ZyZWVfcGFnZShwZC0+cCk7CitvdXRfZXJyMToKKwlrZnJlZShwZCk7 CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgaXB2cl9tbXVfZnJlZV9wdChzdHJ1Y3QgaXB2cl9t bXVfcHQgKnB0KQoreworCV9fZnJlZV9wYWdlKHB0LT5wKTsKKwlrZnJlZShwdCk7Cit9CisKK3Zv aWQgaXB2cl9tbXVfZnJlZV9wYWdlZGlyKHN0cnVjdCBpcHZyX21tdV9wZCAqcGQpCit7CisJc3Ry dWN0IGlwdnJfbW11X2RyaXZlciAqZHJpdmVyID0gcGQtPmRyaXZlcjsKKwlzdHJ1Y3QgaXB2cl9t bXVfcHQgKnB0OworCWludDMyX3QgaTsKKworCWRvd25fd3JpdGUoJmRyaXZlci0+c2VtKTsKKwlp ZiAocGQtPmh3X2NvbnRleHQgIT0gLTEpCisJCWlwdnJfbW11X2ZsdXNoX3BkX2xvY2tlZChkcml2 ZXIsIDEpOworCisJLyogU2hvdWxkIHRha2UgdGhlIHNwaW5sb2NrIGhlcmUsIGJ1dCB3ZSBkb24n dCBuZWVkIHRvIGRvIHRoYXQKKwkgICBzaW5jZSB3ZSBoYXZlIHRoZSBzZW1hcGhvcmUgaW4gd3Jp dGUgbW9kZS4gKi8KKworCWZvciAoaSA9IDA7IGkgPCAxMDI0OyArK2kpIHsKKwkJcHQgPSBwZC0+ dGFibGVzW2ldOworCQlpZiAocHQpCisJCQlpcHZyX21tdV9mcmVlX3B0KHB0KTsKKwl9CisKKwl2 ZnJlZShwZC0+dGFibGVzKTsKKwlfX2ZyZWVfcGFnZShwZC0+ZHVtbXlfcGFnZSk7CisJX19mcmVl X3BhZ2UocGQtPmR1bW15X3B0KTsKKwlfX2ZyZWVfcGFnZShwZC0+cCk7CisJa2ZyZWUocGQpOwor CXVwX3dyaXRlKCZkcml2ZXItPnNlbSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXB2cl9tbXVfcHQg KmlwdnJfbW11X2FsbG9jX3B0KHN0cnVjdCBpcHZyX21tdV9wZCAqcGQpCit7CisJc3RydWN0IGlw dnJfbW11X3B0ICpwdCA9IGttYWxsb2Moc2l6ZW9mKCpwdCksIEdGUF9LRVJORUwpOworCXZvaWQg KnY7CisJdWludDMyX3QgY2xmbHVzaF9hZGQgPSBwZC0+ZHJpdmVyLT5jbGZsdXNoX2FkZCA+PiBQ QUdFX1NISUZUOworCXVpbnQzMl90IGNsZmx1c2hfY291bnQgPSBQQUdFX1NJWkUgLyBjbGZsdXNo X2FkZDsKKwlzcGlubG9ja190ICpsb2NrID0gJnBkLT5kcml2ZXItPmxvY2s7CisJdWludDhfdCAq Y2xmOworCXVpbnQzMl90ICpwdGVzOworCWludDMyX3QgaTsKKworCWlmICghcHQpCisJCXJldHVy biBOVUxMOworCisJcHQtPnAgPSBhbGxvY19wYWdlKEdGUF9ETUEzMik7CisJaWYgKCFwdC0+cCkg eworCQlrZnJlZShwdCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXNwaW5fbG9jayhsb2NrKTsK KworCXYgPSBrbWFwX2F0b21pYyhwdC0+cCk7CisKKwljbGYgPSAodWludDhfdCAqKSB2OworCXB0 ZXMgPSAodWludDMyX3QgKikgdjsKKwlmb3IgKGkgPSAwOyBpIDwgKFBBR0VfU0laRSAvIHNpemVv Zih1aW50MzJfdCkpOyArK2kpCisJCSpwdGVzKysgPSBwZC0+aW52YWxpZF9wdGU7CisKKworI2lm IGRlZmluZWQoQ09ORklHX1g4NikKKwlpZiAocGQtPmRyaXZlci0+aGFzX2NsZmx1c2ggJiYgcGQt Pmh3X2NvbnRleHQgIT0gLTEpIHsKKwkJbWIoKTsKKwkJZm9yIChpID0gMDsgaSA8IGNsZmx1c2hf Y291bnQ7ICsraSkgeworCQkJaXB2cl9jbGZsdXNoKGNsZik7CisJCQljbGYgKz0gY2xmbHVzaF9h ZGQ7CisJCX0KKwkJbWIoKTsKKwl9CisjZW5kaWYKKwlrdW5tYXBfYXRvbWljKHYpOworCisJc3Bp bl91bmxvY2sobG9jayk7CisKKwlwdC0+Y291bnQgPSAwOworCXB0LT5wZCA9IHBkOworCXB0LT5p bmRleCA9IDA7CisKKwlyZXR1cm4gcHQ7Cit9CisKK3N0cnVjdCBpcHZyX21tdV9wdCAqCitpcHZy X21tdV9wdF9hbGxvY19tYXBfbG9jayhzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkLCB1bnNpZ25lZCBs b25nIGFkZHIpCit7CisJdWludDMyX3QgaW5kZXggPSBpcHZyX21tdV9wZF9pbmRleChhZGRyKTsK KwlzdHJ1Y3QgaXB2cl9tbXVfcHQgKnB0OworCXVpbnQzMl90ICp2OworCXNwaW5sb2NrX3QgKmxv Y2sgPSAmcGQtPmRyaXZlci0+bG9jazsKKworCXNwaW5fbG9jayhsb2NrKTsKKwlwdCA9IHBkLT50 YWJsZXNbaW5kZXhdOworCXdoaWxlICghcHQpIHsKKwkJc3Bpbl91bmxvY2sobG9jayk7CisJCXB0 ID0gaXB2cl9tbXVfYWxsb2NfcHQocGQpOworCQlpZiAoIXB0KQorCQkJcmV0dXJuIE5VTEw7CisJ CXNwaW5fbG9jayhsb2NrKTsKKworCQlpZiAocGQtPnRhYmxlc1tpbmRleF0pIHsKKwkJCXNwaW5f dW5sb2NrKGxvY2spOworCQkJaXB2cl9tbXVfZnJlZV9wdChwdCk7CisJCQlzcGluX2xvY2sobG9j ayk7CisJCQlwdCA9IHBkLT50YWJsZXNbaW5kZXhdOworCQkJY29udGludWU7CisJCX0KKworCQl2 ID0ga21hcF9hdG9taWMocGQtPnApOworCisJCXBkLT50YWJsZXNbaW5kZXhdID0gcHQ7CisJCXZb aW5kZXhdID0gKHBhZ2VfdG9fcGZuKHB0LT5wKSA8PCAxMikgfAorCQkJcGQtPnBkX21hc2s7CisK KworCQlwdC0+aW5kZXggPSBpbmRleDsKKworCQlrdW5tYXBfYXRvbWljKCh2b2lkICopIHYpOwor CisJCWlmIChwZC0+aHdfY29udGV4dCAhPSAtMSkgeworCQkJaXB2cl9tbXVfY2xmbHVzaChwZC0+ ZHJpdmVyLCAodm9pZCAqKSAmdltpbmRleF0pOworCQkJYXRvbWljX3NldCgmcGQtPmRyaXZlci0+ bmVlZHNfdGxiZmx1c2gsIDEpOworCQl9CisJfQorCisJcHQtPnYgPSBrbWFwX2F0b21pYyhwdC0+ cCk7CisKKwlyZXR1cm4gcHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXB2cl9tbXVfcHQgKgoraXB2 cl9tbXVfcHRfbWFwX2xvY2soc3RydWN0IGlwdnJfbW11X3BkICpwZCwgdW5zaWduZWQgbG9uZyBh ZGRyKQoreworCXVpbnQzMl90IGluZGV4ID0gaXB2cl9tbXVfcGRfaW5kZXgoYWRkcik7CisJc3Ry dWN0IGlwdnJfbW11X3B0ICpwdDsKKwlzcGlubG9ja190ICpsb2NrID0gJnBkLT5kcml2ZXItPmxv Y2s7CisKKwlzcGluX2xvY2sobG9jayk7CisJcHQgPSBwZC0+dGFibGVzW2luZGV4XTsKKwlpZiAo IXB0KSB7CisJCXNwaW5fdW5sb2NrKGxvY2spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwdC0+ diA9IGttYXBfYXRvbWljKHB0LT5wKTsKKworCXJldHVybiBwdDsKK30KKworc3RhdGljIHZvaWQg aXB2cl9tbXVfcHRfdW5tYXBfdW5sb2NrKHN0cnVjdCBpcHZyX21tdV9wdCAqcHQpCit7CisJc3Ry dWN0IGlwdnJfbW11X3BkICpwZCA9IHB0LT5wZDsKKwl1aW50MzJfdCAqdjsKKworCWt1bm1hcF9h dG9taWMocHQtPnYpOworCisJaWYgKHB0LT5jb3VudCA9PSAwKSB7CisJCXYgPSBrbWFwX2F0b21p YyhwZC0+cCk7CisKKwkJdltwdC0+aW5kZXhdID0gcGQtPmludmFsaWRfcGRlOworCQlwZC0+dGFi bGVzW3B0LT5pbmRleF0gPSBOVUxMOworCisJCWlmIChwZC0+aHdfY29udGV4dCAhPSAtMSkgewor CQkJaXB2cl9tbXVfY2xmbHVzaChwZC0+ZHJpdmVyLAorCQkJCQkodm9pZCAqKSAmdltwdC0+aW5k ZXhdKTsKKwkJCWF0b21pY19zZXQoJnBkLT5kcml2ZXItPm5lZWRzX3RsYmZsdXNoLCAxKTsKKwkJ fQorCisJCWt1bm1hcF9hdG9taWMocHQtPnYpOworCisJCXNwaW5fdW5sb2NrKCZwZC0+ZHJpdmVy LT5sb2NrKTsKKwkJaXB2cl9tbXVfZnJlZV9wdChwdCk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91 bmxvY2soJnBkLT5kcml2ZXItPmxvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2lwdnJf bW11X3NldF9wdGUoc3RydWN0IGlwdnJfbW11X3B0ICpwdCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1 aW50MzJfdCBwdGUpCit7CisJcHQtPnZbaXB2cl9tbXVfcHRfaW5kZXgoYWRkcildID0gcHRlOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2lwdnJfbW11X2ludmFsaWRhdGVfcHRlKHN0cnVjdCBp cHZyX21tdV9wdCAqcHQsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlwdC0+dltpcHZyX21tdV9w dF9pbmRleChhZGRyKV0gPSBwdC0+cGQtPmludmFsaWRfcHRlOworfQorCitzdHJ1Y3QgaXB2cl9t bXVfcGQgKmlwdnJfbW11X2dldF9kZWZhdWx0X3BkKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRy aXZlcikKK3sKKwlzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkOworCisJLyogZG93bl9yZWFkKCZkcml2 ZXItPnNlbSk7ICovCisJcGQgPSBkcml2ZXItPmRlZmF1bHRfcGQ7CisJLyogdXBfcmVhZCgmZHJp dmVyLT5zZW0pOyAqLworCisJcmV0dXJuIHBkOworfQorCisvKiBSZXR1cm5zIHRoZSBwaHlzaWNh bCBhZGRyZXNzIG9mIHRoZSBQRCBzaGFyZWQgYnkgc2d4L21zdmR4ICovCit1aW50MzJfdCBpcHZy X2dldF9kZWZhdWx0X3BkX2FkZHIoc3RydWN0IGlwdnJfbW11X2RyaXZlciAqZHJpdmVyKQorewor CXN0cnVjdCBpcHZyX21tdV9wZCAqcGQ7CisKKwlwZCA9IGlwdnJfbW11X2dldF9kZWZhdWx0X3Bk KGRyaXZlcik7CisJcmV0dXJuIHBhZ2VfdG9fcGZuKHBkLT5wKSA8PCBQQUdFX1NISUZUOworfQor Cit2b2lkIGlwdnJfbW11X2RyaXZlcl90YWtlZG93bihzdHJ1Y3QgaXB2cl9tbXVfZHJpdmVyICpk cml2ZXIpCit7CisJaXB2cl9tbXVfZnJlZV9wYWdlZGlyKGRyaXZlci0+ZGVmYXVsdF9wZCk7CisJ a2ZyZWUoZHJpdmVyKTsKK30KKworc3RydWN0IGlwdnJfbW11X2RyaXZlciAqCitpcHZyX21tdV9k cml2ZXJfaW5pdCh1aW50OF90IF9faW9tZW0gKiByZWdpc3RlcnMsIGludDMyX3QgdHJhcF9wYWdl ZmF1bHRzLAorCQlpbnQzMl90IGludmFsaWRfdHlwZSwgc3RydWN0IGRybV9pcHZyX3ByaXZhdGUg KmRldl9wcml2KQoreworCXN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlcjsKKworCWRyaXZl ciA9IGttYWxsb2Moc2l6ZW9mKCpkcml2ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRyaXZlcikK KwkJcmV0dXJuIE5VTEw7CisKKwlkcml2ZXItPmRldl9wcml2ID0gZGV2X3ByaXY7CisKKwlkcml2 ZXItPmRlZmF1bHRfcGQgPQorCQlpcHZyX21tdV9hbGxvY19wZChkcml2ZXIsIHRyYXBfcGFnZWZh dWx0cywgaW52YWxpZF90eXBlKTsKKwlpZiAoIWRyaXZlci0+ZGVmYXVsdF9wZCkKKwkJZ290byBv dXRfZXJyMTsKKworCXNwaW5fbG9ja19pbml0KCZkcml2ZXItPmxvY2spOworCWluaXRfcndzZW0o JmRyaXZlci0+c2VtKTsKKwlkb3duX3dyaXRlKCZkcml2ZXItPnNlbSk7CisJZHJpdmVyLT5yZWdp c3Rlcl9tYXAgPSByZWdpc3RlcnM7CisJYXRvbWljX3NldCgmZHJpdmVyLT5uZWVkc190bGJmbHVz aCwgMSk7CisKKwlkcml2ZXItPmhhc19jbGZsdXNoID0gMDsKKworI2lmIGRlZmluZWQoQ09ORklH X1g4NikKKwlpZiAoY3B1X2hhc19jbGZsdXNoKSB7CisJCXVpbnQzMl90IHRmbXMsIG1pc2MsIGNh cDAsIGNhcDQsIGNsZmx1c2hfc2l6ZTsKKworCQkvKgorCQkgKiBjbGZsdXNoIHNpemUgaXMgZGV0 ZXJtaW5lZCBhdCBrZXJuZWwgc2V0dXAgZm9yIHg4Nl82NAorCQkgKiAgYnV0IG5vdCBmb3IgaTM4 Ni4gV2UgaGF2ZSB0byBkbyBpdCBoZXJlLgorCQkgKi8KKworCQljcHVpZCgweDAwMDAwMDAxLCAm dGZtcywgJm1pc2MsICZjYXAwLCAmY2FwNCk7CisJCWNsZmx1c2hfc2l6ZSA9ICgobWlzYyA+PiA4 KSAmIDB4ZmYpICogODsKKwkJZHJpdmVyLT5oYXNfY2xmbHVzaCA9IDE7CisJCWRyaXZlci0+Y2xm bHVzaF9hZGQgPQorCQkJUEFHRV9TSVpFICogY2xmbHVzaF9zaXplIC8gc2l6ZW9mKHVpbnQzMl90 KTsKKwkJZHJpdmVyLT5jbGZsdXNoX21hc2sgPSBkcml2ZXItPmNsZmx1c2hfYWRkIC0gMTsKKwkJ ZHJpdmVyLT5jbGZsdXNoX21hc2sgPSB+ZHJpdmVyLT5jbGZsdXNoX21hc2s7CisJfQorI2VuZGlm CisKKwl1cF93cml0ZSgmZHJpdmVyLT5zZW0pOworCXJldHVybiBkcml2ZXI7CisKK291dF9lcnIx OgorCWtmcmVlKGRyaXZlcik7CisJcmV0dXJuIE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJ R19YODYpCitzdGF0aWMgdm9pZCBpcHZyX21tdV9mbHVzaF9wdGVzKHN0cnVjdCBpcHZyX21tdV9w ZCAqcGQsCisJCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkJdWludDMyX3QgbnVtX3Bh Z2VzLAorCQkJCQl1aW50MzJfdCBkZXNpcmVkX3RpbGVfc3RyaWRlLAorCQkJCQl1aW50MzJfdCBo d190aWxlX3N0cmlkZSkKK3sKKwlzdHJ1Y3QgaXB2cl9tbXVfcHQgKnB0OworCXVpbnQzMl90IHJv d3MgPSAxOworCXVpbnQzMl90IGk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxv bmcgZW5kOworCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwl1bnNpZ25lZCBsb25nIGFkZDsKKwl1bnNp Z25lZCBsb25nIHJvd19hZGQ7CisJdW5zaWduZWQgbG9uZyBjbGZsdXNoX2FkZCA9IHBkLT5kcml2 ZXItPmNsZmx1c2hfYWRkOworCXVuc2lnbmVkIGxvbmcgY2xmbHVzaF9tYXNrID0gcGQtPmRyaXZl ci0+Y2xmbHVzaF9tYXNrOworCUlQVlJfREVCVUdfR0VORVJBTCgiY2FsbCB4ODYgaXB2cl9tbXVf Zmx1c2hfcHRlcywgYWRkcmVzcyBpcyAweCVseCwgIgorCQkJIm51bSBwYWdlcyBpcyAlZC5cbiIs IGFkZHJlc3MsIG51bV9wYWdlcyk7CisJaWYgKCFwZC0+ZHJpdmVyLT5oYXNfY2xmbHVzaCkgewor CQlJUFZSX0RFQlVHX0dFTkVSQUwoImNhbGwgaXB2cl9tbXVfcGFnZXNfY2xmbHVzaC5cbiIpOwor CQlpcHZyX21tdV9wYWdlc19jbGZsdXNoKHBkLT5kcml2ZXIsICZwZC0+cCwgbnVtX3BhZ2VzKTsK KwkJcmV0dXJuOworCX0KKworCWlmIChod190aWxlX3N0cmlkZSkKKwkJcm93cyA9IG51bV9wYWdl cyAvIGRlc2lyZWRfdGlsZV9zdHJpZGU7CisJZWxzZQorCQlkZXNpcmVkX3RpbGVfc3RyaWRlID0g bnVtX3BhZ2VzOworCisJYWRkID0gZGVzaXJlZF90aWxlX3N0cmlkZSA8PCBQQUdFX1NISUZUOwor CXJvd19hZGQgPSBod190aWxlX3N0cmlkZSA8PCBQQUdFX1NISUZUOworCW1iKCk7CisJZm9yIChp ID0gMDsgaSA8IHJvd3M7ICsraSkgeworCQlhZGRyID0gYWRkcmVzczsKKwkJZW5kID0gYWRkciAr IGFkZDsKKworCQlkbyB7CisJCQluZXh0ID0gaXB2cl9wZF9hZGRyX2VuZChhZGRyLCBlbmQpOwor CQkJcHQgPSBpcHZyX21tdV9wdF9tYXBfbG9jayhwZCwgYWRkcik7CisJCQlpZiAoIXB0KQorCQkJ CWNvbnRpbnVlOworCQkJZG8geworCQkJCWlwdnJfY2xmbHVzaCgmcHQtPnYKKwkJCQkJICAgIFtp cHZyX21tdV9wdF9pbmRleChhZGRyKV0pOworCQkJfSB3aGlsZSAoYWRkciArPQorCQkJCQkgY2xm bHVzaF9hZGQsCisJCQkJIChhZGRyICYgY2xmbHVzaF9tYXNrKSA8IG5leHQpOworCisJCQlpcHZy X21tdV9wdF91bm1hcF91bmxvY2socHQpOworCQl9IHdoaWxlIChhZGRyID0gbmV4dCwgbmV4dCAh PSBlbmQpOworCQlhZGRyZXNzICs9IHJvd19hZGQ7CisJfQorCW1iKCk7Cit9CisjZWxzZQorCitz dGF0aWMgdm9pZCBpcHZyX21tdV9mbHVzaF9wdGVzKHN0cnVjdCBpcHZyX21tdV9wZCAqcGQsCisJ CQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkJdWludDMyX3QgbnVtX3BhZ2VzLAorCQkJ CQl1aW50MzJfdCBkZXNpcmVkX3RpbGVfc3RyaWRlLAorCQkJCQl1aW50MzJfdCBod190aWxlX3N0 cmlkZSkKK3sKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImNhbGwgbm9uLXg4NiBpcHZyX21tdV9mbHVz aF9wdGVzLlxuIik7Cit9CisjZW5kaWYKKwordm9pZCBpcHZyX21tdV9yZW1vdmVfcGZuX3NlcXVl bmNlKHN0cnVjdCBpcHZyX21tdV9wZCAqcGQsCisJCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3Ms CisJCQkJCQl1aW50MzJfdCBudW1fcGFnZXMpCit7CisJc3RydWN0IGlwdnJfbW11X3B0ICpwdDsK Kwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJdW5zaWduZWQgbG9u ZyBuZXh0OworCXVuc2lnbmVkIGxvbmcgZl9hZGRyZXNzID0gYWRkcmVzczsKKworCWRvd25fcmVh ZCgmcGQtPmRyaXZlci0+c2VtKTsKKworCWFkZHIgPSBhZGRyZXNzOworCWVuZCA9IGFkZHIgKyAo bnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQpOworCisJZG8geworCQluZXh0ID0gaXB2cl9wZF9hZGRy X2VuZChhZGRyLCBlbmQpOworCQlwdCA9IGlwdnJfbW11X3B0X2FsbG9jX21hcF9sb2NrKHBkLCBh ZGRyKTsKKwkJaWYgKCFwdCkKKwkJCWdvdG8gb3V0OworCQlkbyB7CisJCQlpcHZyX21tdV9pbnZh bGlkYXRlX3B0ZShwdCwgYWRkcik7CisJCQktLXB0LT5jb3VudDsKKwkJfSB3aGlsZSAoYWRkciAr PSBQQUdFX1NJWkUsIGFkZHIgPCBuZXh0KTsKKwkJaXB2cl9tbXVfcHRfdW5tYXBfdW5sb2NrKHB0 KTsKKworCX0gd2hpbGUgKGFkZHIgPSBuZXh0LCBuZXh0ICE9IGVuZCk7CisKK291dDoKKwlpZiAo cGQtPmh3X2NvbnRleHQgIT0gLTEpCisJCWlwdnJfbW11X2ZsdXNoX3B0ZXMocGQsIGZfYWRkcmVz cywgbnVtX3BhZ2VzLCAxLCAxKTsKKworCXVwX3JlYWQoJnBkLT5kcml2ZXItPnNlbSk7CisKKwlp ZiAocGQtPmh3X2NvbnRleHQgIT0gLTEpCisJCWlwdnJfbW11X2ZsdXNoKHBkLT5kcml2ZXIsIDAp OworCisJcmV0dXJuOworfQorCit2b2lkIGlwdnJfbW11X3JlbW92ZV9wYWdlcyhzdHJ1Y3QgaXB2 cl9tbXVfcGQgKnBkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQl1aW50MzJfdCBudW1fcGFn ZXMsIHVpbnQzMl90IGRlc2lyZWRfdGlsZV9zdHJpZGUsCisJCQl1aW50MzJfdCBod190aWxlX3N0 cmlkZSkKK3sKKwlzdHJ1Y3QgaXB2cl9tbXVfcHQgKnB0OworCXVpbnQzMl90IHJvd3MgPSAxOwor CXVpbnQzMl90IGk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgZW5kOwor CXVuc2lnbmVkIGxvbmcgbmV4dDsKKwl1bnNpZ25lZCBsb25nIGFkZDsKKwl1bnNpZ25lZCBsb25n IHJvd19hZGQ7CisJdW5zaWduZWQgbG9uZyBmX2FkZHJlc3MgPSBhZGRyZXNzOworCisJaWYgKGh3 X3RpbGVfc3RyaWRlKQorCQlyb3dzID0gbnVtX3BhZ2VzIC8gZGVzaXJlZF90aWxlX3N0cmlkZTsK KwllbHNlCisJCWRlc2lyZWRfdGlsZV9zdHJpZGUgPSBudW1fcGFnZXM7CisKKwlhZGQgPSBkZXNp cmVkX3RpbGVfc3RyaWRlIDw8IFBBR0VfU0hJRlQ7CisJcm93X2FkZCA9IGh3X3RpbGVfc3RyaWRl IDw8IFBBR0VfU0hJRlQ7CisKKwkvKiBkb3duX3JlYWQoJnBkLT5kcml2ZXItPnNlbSk7ICovCisK KwkvKiBNYWtlIHN1cmUgd2Ugb25seSBuZWVkIHRvIGZsdXNoIHRoaXMgcHJvY2Vzc29yJ3MgY2Fj aGUgKi8KKworCWZvciAoaSA9IDA7IGkgPCByb3dzOyArK2kpIHsKKworCQlhZGRyID0gYWRkcmVz czsKKwkJZW5kID0gYWRkciArIGFkZDsKKworCQlkbyB7CisJCQluZXh0ID0gaXB2cl9wZF9hZGRy X2VuZChhZGRyLCBlbmQpOworCQkJcHQgPSBpcHZyX21tdV9wdF9tYXBfbG9jayhwZCwgYWRkcik7 CisJCQlpZiAoIXB0KQorCQkJCWNvbnRpbnVlOworCQkJZG8geworCQkJCWlwdnJfbW11X2ludmFs aWRhdGVfcHRlKHB0LCBhZGRyKTsKKwkJCQktLXB0LT5jb3VudDsKKworCQkJfSB3aGlsZSAoYWRk ciArPSBQQUdFX1NJWkUsIGFkZHIgPCBuZXh0KTsKKwkJCWlwdnJfbW11X3B0X3VubWFwX3VubG9j ayhwdCk7CisKKwkJfSB3aGlsZSAoYWRkciA9IG5leHQsIG5leHQgIT0gZW5kKTsKKwkJYWRkcmVz cyArPSByb3dfYWRkOworCX0KKwlpZiAocGQtPmh3X2NvbnRleHQgIT0gLTEpCisJCWlwdnJfbW11 X2ZsdXNoX3B0ZXMocGQsIGZfYWRkcmVzcywgbnVtX3BhZ2VzLAorCQkJCSAgIGRlc2lyZWRfdGls ZV9zdHJpZGUsIGh3X3RpbGVfc3RyaWRlKTsKKworCS8qIHVwX3JlYWQoJnBkLT5kcml2ZXItPnNl bSk7ICovCisKKwlpZiAocGQtPmh3X2NvbnRleHQgIT0gLTEpCisJCWlwdnJfbW11X2ZsdXNoKHBk LT5kcml2ZXIsIDApOworfQorCitpbnQzMl90IGlwdnJfbW11X2luc2VydF9wZm5fc2VxdWVuY2Uo c3RydWN0IGlwdnJfbW11X3BkICpwZCwKKwkJCQkJCXVpbnQzMl90IHN0YXJ0X3BmbiwKKwkJCQkJ CXVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkJCXVpbnQzMl90IG51bV9wYWdlcywKKwkJCQkJ CWludDMyX3QgdHlwZSkKK3sKKwlzdHJ1Y3QgaXB2cl9tbXVfcHQgKnB0OworCXVpbnQzMl90IHB0 ZTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJdW5zaWduZWQg bG9uZyBuZXh0OworCXVuc2lnbmVkIGxvbmcgZl9hZGRyZXNzID0gYWRkcmVzczsKKwlpbnQzMl90 IHJldCA9IDA7CisKKwlkb3duX3JlYWQoJnBkLT5kcml2ZXItPnNlbSk7CisKKwlhZGRyID0gYWRk cmVzczsKKwllbmQgPSBhZGRyICsgKG51bV9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKworCWRvIHsK KwkJbmV4dCA9IGlwdnJfcGRfYWRkcl9lbmQoYWRkciwgZW5kKTsKKwkJcHQgPSBpcHZyX21tdV9w dF9hbGxvY19tYXBfbG9jayhwZCwgYWRkcik7CisJCWlmICghcHQpIHsKKwkJCXJldCA9IC1FTk9N RU07CisJCQlnb3RvIG91dDsKKwkJfQorCQlkbyB7CisJCQlwdGUgPSBpcHZyX21tdV9tYXNrX3B0 ZShzdGFydF9wZm4rKywgdHlwZSk7CisKKwkJCWlwdnJfbW11X3NldF9wdGUocHQsIGFkZHIsIHB0 ZSk7CisJCQlwdC0+Y291bnQrKzsKKwkJfSB3aGlsZSAoYWRkciArPSBQQUdFX1NJWkUsIGFkZHIg PCBuZXh0KTsKKwkJaXB2cl9tbXVfcHRfdW5tYXBfdW5sb2NrKHB0KTsKKworCX0gd2hpbGUgKGFk ZHIgPSBuZXh0LCBuZXh0ICE9IGVuZCk7CisKK291dDoKKwlpZiAocGQtPmh3X2NvbnRleHQgIT0g LTEpCisJCWlwdnJfbW11X2ZsdXNoX3B0ZXMocGQsIGZfYWRkcmVzcywgbnVtX3BhZ2VzLCAxLCAx KTsKKworCXVwX3JlYWQoJnBkLT5kcml2ZXItPnNlbSk7CisKKwlpZiAocGQtPmh3X2NvbnRleHQg IT0gLTEpCisJCWlwdnJfbW11X2ZsdXNoKHBkLT5kcml2ZXIsIDEpOworCisJcmV0dXJuIHJldDsK K30KKworaW50MzJfdCBpcHZyX21tdV9pbnNlcnRfcGFnZXMoc3RydWN0IGlwdnJfbW11X3BkICpw ZCwgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVpbnQz Ml90IG51bV9wYWdlcywKKwkJCQl1aW50MzJfdCBkZXNpcmVkX3RpbGVfc3RyaWRlLAorCQkJCXVp bnQzMl90IGh3X3RpbGVfc3RyaWRlLCBpbnQzMl90IHR5cGUpCit7CisJc3RydWN0IGlwdnJfbW11 X3B0ICpwdDsKKwl1aW50MzJfdCByb3dzID0gMTsKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IHB0 ZTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJdW5zaWduZWQg bG9uZyBuZXh0OworCXVuc2lnbmVkIGxvbmcgYWRkOworCXVuc2lnbmVkIGxvbmcgcm93X2FkZDsK Kwl1bnNpZ25lZCBsb25nIGZfYWRkcmVzcyA9IGFkZHJlc3M7CisJaW50MzJfdCByZXQgPSAwOwor CisJaWYgKGh3X3RpbGVfc3RyaWRlKSB7CisJCWlmIChudW1fcGFnZXMgJSBkZXNpcmVkX3RpbGVf c3RyaWRlICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcm93cyA9IG51bV9wYWdlcyAvIGRl c2lyZWRfdGlsZV9zdHJpZGU7CisJfSBlbHNlIHsKKwkJZGVzaXJlZF90aWxlX3N0cmlkZSA9IG51 bV9wYWdlczsKKwl9CisKKwlhZGQgPSBkZXNpcmVkX3RpbGVfc3RyaWRlIDw8IFBBR0VfU0hJRlQ7 CisJcm93X2FkZCA9IGh3X3RpbGVfc3RyaWRlIDw8IFBBR0VfU0hJRlQ7CisKKwlkb3duX3JlYWQo JnBkLT5kcml2ZXItPnNlbSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcm93czsgKytpKSB7CisKKwkJ YWRkciA9IGFkZHJlc3M7CisJCWVuZCA9IGFkZHIgKyBhZGQ7CisKKwkJZG8geworCQkJbmV4dCA9 IGlwdnJfcGRfYWRkcl9lbmQoYWRkciwgZW5kKTsKKwkJCXB0ID0gaXB2cl9tbXVfcHRfYWxsb2Nf bWFwX2xvY2socGQsIGFkZHIpOworCQkJaWYgKCFwdCkgeworCQkJCXJldCA9IC1FTk9NRU07CisJ CQkJZ290byBvdXQ7CisJCQl9CisJCQlkbyB7CisJCQkJcHRlID0gaXB2cl9tbXVfbWFza19wdGUo CisJCQkJCXBhZ2VfdG9fcGZuKCpwYWdlcysrKSwKKwkJCQkJdHlwZSk7CisJCQkJaXB2cl9tbXVf c2V0X3B0ZShwdCwgYWRkciwgcHRlKTsKKwkJCQlwdC0+Y291bnQrKzsKKwkJCX0gd2hpbGUgKGFk ZHIgKz0gUEFHRV9TSVpFLCBhZGRyIDwgbmV4dCk7CisJCQlpcHZyX21tdV9wdF91bm1hcF91bmxv Y2socHQpOworCisJCX0gd2hpbGUgKGFkZHIgPSBuZXh0LCBuZXh0ICE9IGVuZCk7CisKKwkJYWRk cmVzcyArPSByb3dfYWRkOworCX0KK291dDoKKwlpZiAocGQtPmh3X2NvbnRleHQgIT0gLTEpCisJ CWlwdnJfbW11X2ZsdXNoX3B0ZXMocGQsIGZfYWRkcmVzcywgbnVtX3BhZ2VzLAorCQkJCSAgIGRl c2lyZWRfdGlsZV9zdHJpZGUsIGh3X3RpbGVfc3RyaWRlKTsKKworCXVwX3JlYWQoJnBkLT5kcml2 ZXItPnNlbSk7CisKKwlpZiAocGQtPmh3X2NvbnRleHQgIT0gLTEpCisJCWlwdnJfbW11X2ZsdXNo KHBkLT5kcml2ZXIsIDEpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pcHZyL2lwdnJfbW11LmggYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX21tdS5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYTRiNjkKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX21tdS5oCkBAIC0wLDAgKzEsMTM1IEBA CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKyAqIGlwdnJfbW11Lmg6IElQVlIgaGVhZGVyIGZpbGUgZm9y IFZFRC9WRUMvVlNQIE1NVSBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRl bCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIEltYWdp bmF0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLCBVSworICogQ29weXJpZ2h0IChjKSAyMDAzIFR1 bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAqIEFsbCBSaWdodHMg UmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1 bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICog bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAor ICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29t PgorICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqCisgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisKKyNpZm5kZWYgX0lQVlJfTU1VX0hfCisjZGVmaW5lIF9JUFZSX01NVV9IXworCisj aW5jbHVkZSAiaXB2cl9kcnYuaCIKKworc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBJ UFZSX0lTX0VSUihfX2ZvcmNlIGNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVy biB1bmxpa2VseSgob2Zmc2V0KSA+PSAodW5zaWduZWQgbG9uZyktTUFYX0VSUk5PKTsKK30KKwor c3RhdGljIGlubGluZSBpbnQzMl90IF9fbXVzdF9jaGVjayBJUFZSX09GRlNFVF9FUlIoX19mb3Jj ZSBjb25zdCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gKGludDMyX3Qpb2Zmc2V0 OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIElQVlJfRVJS X09GRlNFVChfX2ZvcmNlIGNvbnN0IGludDMyX3QgZXJyKQoreworCXJldHVybiAodW5zaWduZWQg bG9uZyllcnI7Cit9CisKK3N0cnVjdCBpcHZyX21tdV9wZDsKKworc3RydWN0IGlwdnJfbW11X3B0 IHsKKwlzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkOworCXVpbnQzMl90IGluZGV4OworCXVpbnQzMl90 IGNvdW50OworCXN0cnVjdCBwYWdlICpwOworCXVpbnQzMl90ICp2OworfTsKKworc3RydWN0IGlw dnJfbW11X2RyaXZlciB7CisJLyogcHJvdGVjdHMgZHJpdmVyLSBhbmQgcGQgc3RydWN0dXJlcy4g QWx3YXlzIHRha2UgaW4gcmVhZCBtb2RlCisJICogYmVmb3JlIHRha2luZyB0aGUgcGFnZSB0YWJs ZSBzcGlubG9jay4KKwkgKi8KKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIHNlbTsKKworCS8qIHByb3Rl Y3RzIHBhZ2UgdGFibGVzLCBkaXJlY3RvcnkgdGFibGVzIGFuZCBwdCB0YWJsZXMuCisJICogYW5k IHB0IHN0cnVjdHVyZXMuCisJICovCisJc3BpbmxvY2tfdCBsb2NrOworCisJYXRvbWljX3QgbmVl ZHNfdGxiZmx1c2g7CisKKwl1aW50OF90IF9faW9tZW0gKnJlZ2lzdGVyX21hcDsKKwlzdHJ1Y3Qg aXB2cl9tbXVfcGQgKmRlZmF1bHRfcGQ7CisKKwlpbnQzMl90IGhhc19jbGZsdXNoOworCWludDMy X3QgY2xmbHVzaF9hZGQ7CisJdW5zaWduZWQgbG9uZyBjbGZsdXNoX21hc2s7CisKKwlzdHJ1Y3Qg ZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXY7Cit9OworCitzdHJ1Y3QgaXB2cl9tbXVfcGQgewor CXN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlcjsKKwlpbnQzMl90IGh3X2NvbnRleHQ7CisJ c3RydWN0IGlwdnJfbW11X3B0ICoqdGFibGVzOworCXN0cnVjdCBwYWdlICpwOworCXN0cnVjdCBw YWdlICpkdW1teV9wdDsKKwlzdHJ1Y3QgcGFnZSAqZHVtbXlfcGFnZTsKKwl1aW50MzJfdCBwZF9t YXNrOworCXVpbnQzMl90IGludmFsaWRfcGRlOworCXVpbnQzMl90IGludmFsaWRfcHRlOworfTsK Kworc3RydWN0IGlwdnJfbW11X2RyaXZlciAqaXB2cl9tbXVfZHJpdmVyX2luaXQodWludDhfdCBf X2lvbWVtICpyZWdpc3RlcnMsCisJCQkJCWludDMyX3QgdHJhcF9wYWdlZmF1bHRzLAorCQkJCQlp bnQzMl90IGludmFsaWRfdHlwZSwKKwkJCQkJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9w cml2KTsKKwordm9pZCBpcHZyX21tdV9kcml2ZXJfdGFrZWRvd24oc3RydWN0IGlwdnJfbW11X2Ry aXZlciAqZHJpdmVyKTsKKworc3RydWN0IGlwdnJfbW11X3BkICoKK2lwdnJfbW11X2dldF9kZWZh dWx0X3BkKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlcik7CisKK3N0cnVjdCBpcHZyX21t dV9wZCAqaXB2cl9tbXVfYWxsb2NfcGQoc3RydWN0IGlwdnJfbW11X2RyaXZlciAqZHJpdmVyLAor CQkJCQlpbnQzMl90IHRyYXBfcGFnZWZhdWx0cywKKwkJCQkJaW50MzJfdCBpbnZhbGlkX3R5cGUp OworCit2b2lkIGlwdnJfbW11X2ZyZWVfcGFnZWRpcihzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkKTsK Kwordm9pZCBpcHZyX21tdV9mbHVzaChzdHJ1Y3QgaXB2cl9tbXVfZHJpdmVyICpkcml2ZXIsIGlu dCByY19wcm90KTsKKwordm9pZCBpcHZyX21tdV9yZW1vdmVfcGZuX3NlcXVlbmNlKHN0cnVjdCBp cHZyX21tdV9wZCAqcGQsCisJCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkJCQl1aW50 MzJfdCBudW1fcGFnZXMpOworCitpbnQzMl90IGlwdnJfbW11X2luc2VydF9wZm5fc2VxdWVuY2Uo c3RydWN0IGlwdnJfbW11X3BkICpwZCwKKwkJCQkJCXVpbnQzMl90IHN0YXJ0X3BmbiwKKwkJCQkJ CXVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkJCXVpbnQzMl90IG51bV9wYWdlcywKKwkJCQkJ CWludDMyX3QgdHlwZSk7CisKK3ZvaWQgaXB2cl9tbXVfc2V0X3BkX2NvbnRleHQoc3RydWN0IGlw dnJfbW11X3BkICpwZCwgaW50MzJfdCBod19jb250ZXh0KTsKKworaW50MzJfdCBpcHZyX21tdV9p bnNlcnRfcGFnZXMoc3RydWN0IGlwdnJfbW11X3BkICpwZCwgc3RydWN0IHBhZ2UgKipwYWdlcywK KwkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVpbnQzMl90IG51bV9wYWdlcywKKwkJCQl1aW50 MzJfdCBkZXNpcmVkX3RpbGVfc3RyaWRlLAorCQkJCXVpbnQzMl90IGh3X3RpbGVfc3RyaWRlLCBp bnQzMl90IHR5cGUpOworCit2b2lkIGlwdnJfbW11X3JlbW92ZV9wYWdlcyhzdHJ1Y3QgaXB2cl9t bXVfcGQgKnBkLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdWludDMyX3QgbnVtX3BhZ2Vz LAorCQkJCXVpbnQzMl90IGRlc2lyZWRfdGlsZV9zdHJpZGUsCisJCQkJdWludDMyX3QgaHdfdGls ZV9zdHJpZGUpOworCit1aW50MzJfdCBpcHZyX2dldF9kZWZhdWx0X3BkX2FkZHIoc3RydWN0IGlw dnJfbW11X2RyaXZlciAqZHJpdmVyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaXB2ci9pcHZyX3RyYWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX3RyYWNl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjMGJkYQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfdHJhY2UuYwpAQCAtMCwwICsxLDEx IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBB dXRob3JzOgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPj4KKyAqLworCisj aWZuZGVmIF9fQ0hFQ0tFUl9fCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRl ICJpcHZyX3RyYWNlLmgiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZy L2lwdnJfdHJhY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfdHJhY2UuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzIwOWRmCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl90cmFjZS5oCkBAIC0wLDAgKzEsMjk2IEBACisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqIGlwdnJfdHJhY2UuaDogSVBWUiBoZWFkZXIgZmlsZSBmb3IgdHJh Y2Ugc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwg SGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAq ICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8eWFv LmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAhZGVmaW5l ZChfSVBWUl9UUkFDRV9IXykgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNk ZWZpbmUgX0lQVlJfVFJBQ0VfSF8KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCisj aW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlICJpcHZyX2J1ZmZlci5oIgorI2luY2x1ZGUg ImlwdnJfZmVuY2UuaCIKKyNpbmNsdWRlICJ2ZWRfbXNnLmgiCisKKyN1bmRlZiBUUkFDRV9TWVNU RU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIGlwdnIKKyNkZWZpbmUgVFJBQ0VfU1lTVEVNX1NUUklO RyBfX3N0cmluZ2lmeShUUkFDRV9TWVNURU0pCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSBp cHZyX3RyYWNlCisKKy8qIG9iamVjdCB0cmFja2luZyAqLworCitUUkFDRV9FVkVOVChpcHZyX2dl bV9jcmVhdGUsCisJVFBfUFJPVE8oc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaiwgdWlu dDY0X3QgZ3B1X29mZnNldCksCisJVFBfQVJHUyhvYmosIGdwdV9vZmZzZXQpLAorCVRQX1NUUlVD VF9fZW50cnkoCisJCV9fZmllbGQoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKiwgb2JqKQor CQlfX2ZpZWxkKHVpbnQzMl90LCBzaXplKQorCQlfX2ZpZWxkKGJvb2wsIHRpbGluZykKKwkJX19m aWVsZCh1aW50MzJfdCwgY2FjaGVfbGV2ZWwpCisJCV9fZmllbGQodWludDY0X3QsIGdwdV9vZmZz ZXQpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+b2JqID0gb2JqOworCQlfX2Vu dHJ5LT5zaXplID0gb2JqLT5iYXNlLnNpemU7CisJCV9fZW50cnktPnRpbGluZyA9IG9iai0+dGls aW5nOworCQlfX2VudHJ5LT5jYWNoZV9sZXZlbCA9IG9iai0+Y2FjaGVfbGV2ZWw7CisJCV9fZW50 cnktPmdwdV9vZmZzZXQgPSBncHVfb2Zmc2V0OworCSksCisJVFBfcHJpbnRrKCJvYmo9MHglcCwg c2l6ZT0ldSwgdGlsaW5nPSV1LCBjYWNoZT0ldSwgZ3B1X29mZnNldD0weCVsbHgiLAorCQlfX2Vu dHJ5LT5vYmosIF9fZW50cnktPnNpemUsIF9fZW50cnktPnRpbGluZywKKwkJX19lbnRyeS0+Y2Fj aGVfbGV2ZWwsIF9fZW50cnktPmdwdV9vZmZzZXQpCispOworCitUUkFDRV9FVkVOVChpcHZyX19n ZW1fZnJlZV9vYmplY3QsCisJVFBfUFJPVE8oc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9i aiksCisJVFBfQVJHUyhvYmopLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoc3RydWN0 IGRybV9pcHZyX2dlbV9vYmplY3QgKiwgb2JqKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9f ZW50cnktPm9iaiA9IG9iajsKKwkpLAorCVRQX3ByaW50aygib2JqPTB4JXAiLCBfX2VudHJ5LT5v YmopCispOworCitUUkFDRV9FVkVOVChpcHZyX2dlbV93YWl0X2lvY3RsLAorCVRQX1BST1RPKHN0 cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopLAorCVRQX0FSR1Mob2JqKSwKKwlUUF9TVFJV Q1RfX2VudHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICosIG9iaikK KwkJX19maWVsZChzdHJ1Y3QgaXB2cl9mZW5jZSAqLCBmZW5jZSkKKwkpLAorCVRQX2Zhc3RfYXNz aWduKAorCQlfX2VudHJ5LT5vYmogPSBvYmo7CisJCV9fZW50cnktPmZlbmNlID0gb2JqLT5mZW5j ZTsKKwkpLAorCVRQX3ByaW50aygib2JqPSVwLCBmZW5jZT0lcCAiLCBfX2VudHJ5LT5vYmosIF9f ZW50cnktPmZlbmNlKQorKTsKKworVFJBQ0VfRVZFTlQoaXB2cl9mZW5jZV93YWl0LAorCVRQX1BS T1RPKHN0cnVjdCBpcHZyX2ZlbmNlICpmZW5jZSwKKwkJdWludDMyX3Qgc2lnbmFsZWRfc2VxLAor CQl1aW50MTZfdCBzeW5jX3NlcSksCisJVFBfQVJHUyhmZW5jZSwgc2lnbmFsZWRfc2VxLCBzeW5j X3NlcSksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3QgaXB2cl9mZW5jZSAq LCBmZW5jZSkKKwkJX19maWVsZCh1aW50MTZfdCwgZmVuY2Vfc2VxKQorCQlfX2ZpZWxkKHVpbnQz Ml90LCBzaWduYWxlZF9zZXEpCisJCV9fZmllbGQodWludDE2X3QsIHN5bmNfc2VxKQorCSksCisJ VFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmZlbmNlID0gZmVuY2U7CisJCV9fZW50cnktPmZl bmNlX3NlcSA9IGZlbmNlLT5zZXE7CisJCV9fZW50cnktPnNpZ25hbGVkX3NlcSA9IHNpZ25hbGVk X3NlcTsKKwkJX19lbnRyeS0+c3luY19zZXEgPSBzeW5jX3NlcTsKKwkpLAorCVRQX3ByaW50aygi ZmVuY2U9JXAsIGZlbmNlX3NlcT0lZCwgc2lnbmFsZWRfc2VxPSVkLCBzeW5jX3NlcT0lZCIsCisJ CV9fZW50cnktPmZlbmNlLCBfX2VudHJ5LT5mZW5jZV9zZXEsCisJCV9fZW50cnktPnNpZ25hbGVk X3NlcSwgX19lbnRyeS0+c3luY19zZXEpCispOworCitUUkFDRV9FVkVOVChpcHZyX2dlbV9tbWFw LAorCVRQX1BST1RPKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmosIHVuc2lnbmVkIGxv bmcgbW1hcF9iYXNlKSwKKwlUUF9BUkdTKG9iaiwgbW1hcF9iYXNlKSwKKwlUUF9TVFJVQ1RfX2Vu dHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICosIG9iaikKKwkJX19m aWVsZCh1bnNpZ25lZCBsb25nLCBtbWFwX2Jhc2UpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJ X19lbnRyeS0+b2JqID0gb2JqOworCQlfX2VudHJ5LT5tbWFwX2Jhc2UgPSBtbWFwX2Jhc2U7CisJ KSwKKwlUUF9wcmludGsoIm9iaj0lcCwgbW1hcF9iYXNlPTB4JWx4IiwgX19lbnRyeS0+b2JqLCBf X2VudHJ5LT5tbWFwX2Jhc2UpCispOworCisKK1RSQUNFX0VWRU5UKGlwdnJfZ2VtX2V4ZWNfaW9j dGwsCisJVFBfUFJPVE8oc3RydWN0IGRybV9pcHZyX2dlbV9leGVjYnVmZmVyICpleGVjKSwKKwlU UF9BUkdTKGV4ZWMpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQodWludDY0X3QsIGJ1 ZmZlcl9saXN0KQorCQlfX2ZpZWxkKHVpbnQzMl90LCBidWZmZXJfY291bnQpCisJCV9fZmllbGQo dWludDMyX3QsIGNtZGJ1Zl9oYW5kbGUpCisJCV9fZmllbGQodWludDMyX3QsIGNtZGJ1Zl9zaXpl KQorCQlfX2ZpZWxkKHVpbnQzMl90LCBjdHhfaWQpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJ X19lbnRyeS0+YnVmZmVyX2xpc3QgPSBleGVjLT5idWZmZXJfbGlzdDsKKwkJX19lbnRyeS0+YnVm ZmVyX2NvdW50ID0gZXhlYy0+YnVmZmVyX2NvdW50OworCQlfX2VudHJ5LT5jbWRidWZfaGFuZGxl ID0gZXhlYy0+Y21kYnVmX2hhbmRsZTsKKwkJX19lbnRyeS0+Y21kYnVmX3NpemUgPSBleGVjLT5j bWRidWZfc2l6ZTsKKwkJX19lbnRyeS0+Y3R4X2lkID0gZXhlYy0+Y3R4X2lkOworCSksCisJVFBf cHJpbnRrKCJidWZmZXJfbGlzdD0weCVsbHgsIGJ1ZmZlcl9jb3VudD0weCVkLCAiCisJCSJjbWRi dWZfaGFuZGxlPTB4JXgsIGNtZGJ1Zl9zaXplPSV1LCBjdHhfaWQ9JWQiLAorCQlfX2VudHJ5LT5i dWZmZXJfbGlzdCwgX19lbnRyeS0+YnVmZmVyX2NvdW50LAorCQlfX2VudHJ5LT5jbWRidWZfaGFu ZGxlLCBfX2VudHJ5LT5jbWRidWZfc2l6ZSwKKwkJX19lbnRyeS0+Y3R4X2lkKQorKTsKKworVFJB Q0VfRVZFTlQodmVkX2NtZF9zZW5kLAorCVRQX1BST1RPKHVpbnQzMl90IGNtZF9pZCwgdWludDMy X3Qgc2VxKSwKKwlUUF9BUkdTKGNtZF9pZCwgc2VxKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlf X2ZpZWxkKHVpbnQzMl90LCBjbWRfaWQpCisJCV9fZmllbGQodWludDMyX3QsIHNlcSkKKwkpLAor CVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5jbWRfaWQgPSBjbWRfaWQ7CisJCV9fZW50cnkt PnNlcSA9IHNlcTsKKwkpLAorCVRQX3ByaW50aygiY21kX2lkPTB4JTA4eCwgc2VxPTB4JTA4eCIs CisJCV9fZW50cnktPmNtZF9pZCwgX19lbnRyeS0+c2VxKQorKTsKKworVFJBQ0VfRVZFTlQodmVk X3Bvd2VyX29uLAorCVRQX1BST1RPKGludCBmcmVxKSwKKwlUUF9BUkdTKGZyZXEpLAorCVRQX1NU UlVDVF9fZW50cnkoCisJCV9fZmllbGQoaW50LCBmcmVxKQorCSksCisJVFBfZmFzdF9hc3NpZ24o CisJCV9fZW50cnktPmZyZXEgPSBmcmVxOworCSksCisJVFBfcHJpbnRrKCJmcmVxdWVuY3kgJWQg TUh6IiwgX19lbnRyeS0+ZnJlcSkKKyk7CisKK1RSQUNFX0VWRU5UKHZlZF9wb3dlcl9vZmYsCisJ VFBfUFJPVE8oaW50IGZyZXEpLAorCVRQX0FSR1MoZnJlcSksCisJVFBfU1RSVUNUX19lbnRyeSgK KwkJX19maWVsZChpbnQsIGZyZXEpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ ZnJlcSA9IGZyZXE7CisJKSwKKwlUUF9wcmludGsoImZyZXF1ZW5jeSAlZCBNSHoiLCBfX2VudHJ5 LT5mcmVxKQorKTsKKworVFJBQ0VfRVZFTlQodmVkX2lycV9jb21wbGV0ZWQsCisJVFBfUFJPVE8o c3RydWN0IGZ3X2NvbXBsZXRlZF9tc2cgKmNvbXBsZXRlZF9tc2cpLAorCVRQX0FSR1MoY29tcGxl dGVkX21zZyksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCh1aW50MTZfdCwgc2Vxbm8p CisJCV9fZmllbGQodWludDMyX3QsIGZsYWdzKQorCQlfX2ZpZWxkKHVpbnQzMl90LCB2ZGViY3Ip CisJCV9fZmllbGQodWludDE2X3QsIHN0YXJ0X21iKQorCQlfX2ZpZWxkKHVpbnQxNl90LCBsYXN0 X21iKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnNlcW5vID0gY29tcGxldGVk X21zZy0+aGVhZGVyLmJpdHMubXNnX2ZlbmNlOworCQlfX2VudHJ5LT5mbGFncyA9IGNvbXBsZXRl ZF9tc2ctPmZsYWdzOworCQlfX2VudHJ5LT52ZGViY3IgPSBjb21wbGV0ZWRfbXNnLT52ZGViY3I7 CisJCV9fZW50cnktPnN0YXJ0X21iID0gY29tcGxldGVkX21zZy0+bWIuYml0cy5zdGFydF9tYjsK KwkJX19lbnRyeS0+bGFzdF9tYiA9IGNvbXBsZXRlZF9tc2ctPm1iLmJpdHMubGFzdF9tYjsKKwkp LAorCVRQX3ByaW50aygic2VxPTB4JTA0eCwgZmxhZ3M9MHglMDh4LCB2ZGViY3I9MHglMDh4LCBt Yj1bJXUsICV1XSIsCisJCV9fZW50cnktPnNlcW5vLAorCQlfX2VudHJ5LT5mbGFncywKKwkJX19l bnRyeS0+dmRlYmNyLAorCQlfX2VudHJ5LT5zdGFydF9tYiwKKwkJX19lbnRyeS0+bGFzdF9tYikK Kyk7CisKK1RSQUNFX0VWRU5UKHZlZF9pcnFfcGFuaWMsCisJVFBfUFJPVE8oc3RydWN0IGZ3X3Bh bmljX21zZyAqcGFuaWNfbXNnLCB1aW50MzJfdCBlcnJfdHJpZywKKwkJdWludDMyX3QgaXJxX3N0 YXR1cywgdWludDMyX3QgbW11X3N0YXR1cywgdWludDMyX3QgZG1hY19zdGF0dXMpLAorCVRQX0FS R1MocGFuaWNfbXNnLCBlcnJfdHJpZywgaXJxX3N0YXR1cywgbW11X3N0YXR1cywgZG1hY19zdGF0 dXMpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQodWludDE2X3QsIHNlcW5vKQorCQlf X2ZpZWxkKHVpbnQzMl90LCBmZV9zdGF0dXMpCisJCV9fZmllbGQodWludDMyX3QsIGJlX3N0YXR1 cykKKwkJX19maWVsZCh1aW50MTZfdCwgcnN2ZCkKKwkJX19maWVsZCh1aW50MTZfdCwgbGFzdF9t YikKKwkJX19maWVsZCh1aW50MzJfdCwgZXJyX3RyaWcpCisJCV9fZmllbGQodWludDMyX3QsIGly cV9zdGF0dXMpCisJCV9fZmllbGQodWludDMyX3QsIG1tdV9zdGF0dXMpCisJCV9fZmllbGQodWlu dDMyX3QsIGRtYWNfc3RhdHVzKQorCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ c2Vxbm8gPSBwYW5pY19tc2ctPmhlYWRlci5iaXRzLm1zZ19mZW5jZTsKKwkJX19lbnRyeS0+ZmVf c3RhdHVzID0gcGFuaWNfbXNnLT5mZV9zdGF0dXM7CisJCV9fZW50cnktPmJlX3N0YXR1cyA9IHBh bmljX21zZy0+YmVfc3RhdHVzOworCQlfX2VudHJ5LT5yc3ZkID0gcGFuaWNfbXNnLT5tYi5iaXRz LnJlc2VydmVkMjsKKwkJX19lbnRyeS0+bGFzdF9tYiA9IHBhbmljX21zZy0+bWIuYml0cy5sYXN0 X21iOworCQlfX2VudHJ5LT5lcnJfdHJpZyA9IGVycl90cmlnOworCQlfX2VudHJ5LT5pcnFfc3Rh dHVzID0gaXJxX3N0YXR1czsKKwkJX19lbnRyeS0+bW11X3N0YXR1cyA9IG1tdV9zdGF0dXM7CisJ CV9fZW50cnktPmRtYWNfc3RhdHVzID0gZG1hY19zdGF0dXM7CisJKSwKKwlUUF9wcmludGsoInNl cT0weCUwNHgsIHN0YXR1cz1bZmUgMHglMDh4IGJlIDB4JTA4eF0sIHJzdmQ9MHglMDR4LCAiCisJ CSJsYXN0X21iPSV1LCBlcnJfdHJpZz0weCUwOHgsIGlycV9zdGF0dXM9MHglMDh4LCAiCisJCSJt bXVfc3RhdHVzPTB4JTA4eCwgZG1hY19zdGF0dXM9MHglMDh4IiwKKwkJX19lbnRyeS0+c2Vxbm8s CisJCV9fZW50cnktPmZlX3N0YXR1cywKKwkJX19lbnRyeS0+YmVfc3RhdHVzLAorCQlfX2VudHJ5 LT5yc3ZkLAorCQlfX2VudHJ5LT5sYXN0X21iLAorCQlfX2VudHJ5LT5lcnJfdHJpZywKKwkJX19l bnRyeS0+aXJxX3N0YXR1cywKKwkJX19lbnRyeS0+bW11X3N0YXR1cywKKwkJX19lbnRyeS0+ZG1h Y19zdGF0dXMpCispOworCitUUkFDRV9FVkVOVCh2ZWRfaXJxX2NvbnRpZ3VpdHksCisJVFBfUFJP VE8oc3RydWN0IGZ3X2NvbnRpZ3VpdHlfbXNnICptc2cpLAorCVRQX0FSR1MobXNnKSwKKwlUUF9T VFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHVpbnQxNl90LCBzZXFubykKKwkJX19maWVsZCh1aW50 MTZfdCwgYmVnaW5fbWIpCisJCV9fZmllbGQodWludDE2X3QsIGVuZF9tYikKKwkpLAorCVRQX2Zh c3RfYXNzaWduKAorCQlfX2VudHJ5LT5zZXFubyA9IG1zZy0+aGVhZGVyLmJpdHMubXNnX2ZlbmNl OworCQlfX2VudHJ5LT5iZWdpbl9tYiA9IG1zZy0+bWIuYml0cy5iZWdpbl9tYl9udW07CisJCV9f ZW50cnktPmVuZF9tYiA9IG1zZy0+bWIuYml0cy5lbmRfbWJfbnVtOworCSksCisJVFBfcHJpbnRr KCJzZXE9MHglMDR4LCBtYj1bJXUsICV1XSIsCisJCV9fZW50cnktPnNlcW5vLAorCQlfX2VudHJ5 LT5iZWdpbl9tYiwKKwkJX19lbnRyeS0+ZW5kX21iKQorKTsKKworVFJBQ0VfRVZFTlQodmVkX2ly cV9kZWJsb2NrX3JlcXVpcmVkLAorCVRQX1BST1RPKHN0cnVjdCBmd19kZWJsb2NrX3JlcXVpcmVk X21zZyAqbXNnKSwKKwlUUF9BUkdTKG1zZyksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVs ZCh1aW50MTZfdCwgc2Vxbm8pCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+c2Vx bm8gPSBtc2ctPmhlYWRlci5iaXRzLm1zZ19mZW5jZTsKKwkpLAorCVRQX3ByaW50aygic2VxPTB4 JTA0eCIsCisJCV9fZW50cnktPnNlcW5vKQorKTsKKworI2VuZGlmIC8qIF9JUFZSX1RSQUNFX0hf ICovCisKKyAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyN1bmRl ZiBUUkFDRV9JTkNMVURFX1BBVEgKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIC4KKyNpbmNs dWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p cHZyL3ZlZF9jbWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9jbWQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWU0NmU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2lwdnIvdmVkX2NtZC5jCkBAIC0wLDAgKzEsMTI2OSBAQAorLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKiB2ZWRfY21kLmM6IFZFRCBjb21tYW5kIGhhbmRsaW5nIGJldHdlZW4gaG9z dCBkcml2ZXIgYW5kIFZFRCBmaXJtd2FyZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRl bCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIEltYWdp bmF0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLCBVSworICogQ29weXJpZ2h0IChjKSAyMDAzIFR1 bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAqIEFsbCBSaWdodHMg UmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1 bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICog bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAor ICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29t PgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKworI2luY2x1ZGUgImlwdnJfZ2VtLmgiCisjaW5jbHVkZSAiaXB2cl9tbXUuaCIK KyNpbmNsdWRlICJpcHZyX2J1ZmZlci5oIgorI2luY2x1ZGUgImlwdnJfdHJhY2UuaCIKKyNpbmNs dWRlICJpcHZyX2ZlbmNlLmgiCisjaW5jbHVkZSAidmVkX2NtZC5oIgorI2luY2x1ZGUgInZlZF9m dy5oIgorI2luY2x1ZGUgInZlZF9tc2cuaCIKKyNpbmNsdWRlICJ2ZWRfcmVnLmgiCisjaW5jbHVk ZSAidmVkX2VjLmgiCisjaW5jbHVkZSAidmVkX2luaXQuaCIKKyNpbmNsdWRlICJ2ZWRfcG0uaCIK KyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgor I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpZm5kZWYgbGlzdF9maXJzdF9lbnRyeQorI2Rl ZmluZSBsaXN0X2ZpcnN0X2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBcCisJbGlzdF9lbnRyeSgo cHRyKS0+bmV4dCwgdHlwZSwgbWVtYmVyKQorI2VuZGlmCisKK2ludDMyX3QgdmVkX210eF9zZW5k KHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwgY29uc3Qgdm9pZCAqbXNnKQorewor CXN0YXRpYyBzdHJ1Y3QgZndfcGFkZGluZ19tc2cgcGFkX21zZzsKKwljb25zdCB1aW50MzJfdCAq cF9tc2cgPSAodWludDMyX3QgKiltc2c7CisJdWludDMyX3QgbXNnX251bSwgd29yZHNfZnJlZSwg cmlkeCwgd2lkeCwgYnVmX3NpemUsIGJ1Zl9vZmZzZXQ7CisJaW50MzJfdCByZXQgPSAwOworCWlu dCBpOworCXVuaW9uIG1zZ19oZWFkZXIgKmhlYWRlcjsKKwloZWFkZXIgPSAodW5pb24gbXNnX2hl YWRlciAqKW1zZzsKKworCUlQVlJfREVCVUdfRU5UUlkoImVudGVyLlxuIik7CisKKwkvKiB3ZSBu ZWVkIGNsb2NrcyBlbmFibGVkIGJlZm9yZSB3ZSB0b3VjaCBWRUMgbG9jYWwgcmFtLAorCSAqIGJ1 dCBmdyB3aWxsIHRha2UgY2FyZSBvZiB0aGUgY2xvY2sgYWZ0ZXIgZncgaXMgbG9hZGVkCisJICov CisKKwltc2dfbnVtID0gKGhlYWRlci0+Yml0cy5tc2dfc2l6ZSArIDMpIC8gNDsKKworCS8qIGRl YnVnIGNvZGUgZm9yIG1zZyBkdW1wICovCisJSVBWUl9ERUJVR19WRUQoIk1TVkRYOiB2ZWRfbXR4 X3NlbmQgaXMgJWREV1xuIiwgbXNnX251bSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXNnX251bTsg aSsrKQorCQlJUFZSX0RFQlVHX1ZFRCgiICAgMHglMDh4XG4iLCBwX21zZ1tpXSk7CisKKwlidWZf c2l6ZSA9IFZFRF9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX1RPX01UWF9CVUZfU0laRSkgJgorCQkg ICAoKDEgPDwgMTYpIC0gMSk7CisKKwlpZiAobXNnX251bSA+IGJ1Zl9zaXplKSB7CisJCXJldCA9 IC1FSU5WQUw7CisJCUlQVlJfRVJST1IoIlZFRDogbWVzc2FnZSBleGNlZWQgbWF4aW11bSwgcmV0 OiVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyaWR4ID0gVkVEX1JFR19SRUFEMzIo TVNWRFhfQ09NTVNfVE9fTVRYX1JEX0lOREVYKTsKKwl3aWR4ID0gVkVEX1JFR19SRUFEMzIoTVNW RFhfQ09NTVNfVE9fTVRYX1dSVF9JTkRFWCk7CisKKworCWJ1Zl9zaXplID0gVkVEX1JFR19SRUFE MzIoTVNWRFhfQ09NTVNfVE9fTVRYX0JVRl9TSVpFKSAmCisJCSAgICgoMSA8PCAxNikgLSAxKTsK KwkvKjB4MjAwMCBpcyBWRUMgTG9jYWwgUmFtIG9mZnNldCovCisJYnVmX29mZnNldCA9CisJCShW RURfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19UT19NVFhfQlVGX1NJWkUpID4+IDE2KSArIDB4MjAw MDsKKworCS8qIG1lc3NhZ2Ugd291bGQgd3JhcCwgbmVlZCB0byBzZW5kIGEgcGFkIG1lc3NhZ2Ug Ki8KKwlpZiAod2lkeCArIG1zZ19udW0gPiBidWZfc2l6ZSkgeworCQkvKiBTaG91bGRuJ3QgaGFw cGVuIGZvciBhIFBBRCBtZXNzYWdlIGl0c2VsZiAqLworCQlpZiAoaGVhZGVyLT5iaXRzLm1zZ190 eXBlID09IE1UWF9NU0dJRF9QQURESU5HKQorCQkJSVBWUl9ERUJVR19XQVJOKCJWRUQ6IHNob3Vs ZCBub3Qgd3JhcCBwYWQgbXNnLCAiCisJCQkJImJ1Zl9zaXplIGlzICVkLCB3aWR4IGlzICVkLCBt c2dfbnVtIGlzICVkLlxuIiwKKwkJCQlidWZfc2l6ZSwgd2lkeCwgbXNnX251bSk7CisKKwkJLyog aWYgdGhlIHJlYWQgcG9pbnRlciBpcyBhdCB6ZXJvIHRoZW4gd2UgbXVzdCB3YWl0IGZvciBpdCB0 bworCQkgKiBjaGFuZ2Ugb3RoZXJ3aXNlIHRoZSB3cml0ZSBwb2ludGVyIHdpbGwgZXF1YWwgdGhl IHJlYWQKKwkJICogcG9pbnRlcix3aGljaCBzaG91bGQgb25seSBoYXBwZW4gd2hlbiB0aGUgYnVm ZmVyIGlzIGVtcHR5CisJCSAqCisJCSAqIFRoaXMgd2lsbCBvbmx5IGhhcHBlbnMgaWYgd2UgdHJ5 IHRvIG92ZXJmaWxsIHRoZSBxdWV1ZSwKKwkJICogcXVldWUgbWFuYWdlbWVudCBzaG91bGQgbWFr ZQorCQkgKiBzdXJlIHRoaXMgbmV2ZXIgaGFwcGVucyBpbiB0aGUgZmlyc3QgcGxhY2UuCisJCSAq LworCQlpZiAoMCA9PSByaWR4KSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJSVBWUl9FUlJPUigi TVNWRFg6IFJJbmRleD0wLCByZXQ6JWRcbiIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJ CS8qIFNlbmQgYSBwYWQgbWVzc2FnZSAqLworCQlwYWRfbXNnLmhlYWRlci5iaXRzLm1zZ19zaXpl ID0gKGJ1Zl9zaXplIC0gd2lkeCkgPDwgMjsKKwkJcGFkX21zZy5oZWFkZXIuYml0cy5tc2dfdHlw ZSA9IE1UWF9NU0dJRF9QQURESU5HOworCQl2ZWRfbXR4X3NlbmQoZGV2X3ByaXYsICh2b2lkICop JnBhZF9tc2cpOworCQl3aWR4ID0gVkVEX1JFR19SRUFEMzIoTVNWRFhfQ09NTVNfVE9fTVRYX1dS VF9JTkRFWCk7CisJfQorCisJaWYgKHdpZHggPj0gcmlkeCkKKwkJd29yZHNfZnJlZSA9IGJ1Zl9z aXplIC0gKHdpZHggLSByaWR4KSAtIDE7CisJZWxzZQorCQl3b3Jkc19mcmVlID0gcmlkeCAtIHdp ZHggLSAxOworCisJaWYgKG1zZ19udW0gPiB3b3Jkc19mcmVlKSB7CisJCXJldCA9IC1FSU5WQUw7 CisJCUlQVlJfRVJST1IoIk1TVkRYOiBtc2dfbnVtID4gd29yZHNfZnJlZSwgcmV0OiVkXG4iLCBy ZXQpOworCQlnb3RvIG91dDsKKwl9CisJd2hpbGUgKG1zZ19udW0gPiAwKSB7CisJCVZFRF9SRUdf V1JJVEUzMigqcF9tc2crKywgYnVmX29mZnNldCArICh3aWR4IDw8IDIpKTsKKwkJbXNnX251bS0t OworCQl3aWR4Kys7CisJCWlmIChidWZfc2l6ZSA9PSB3aWR4KQorCQkJd2lkeCA9IDA7CisJfQor CisJVkVEX1JFR19XUklURTMyKHdpZHgsIE1TVkRYX0NPTU1TX1RPX01UWF9XUlRfSU5ERVgpOwor CisJLyogTWFrZSBzdXJlIGNsb2NrcyBhcmUgZW5hYmxlZCBiZWZvcmUgd2Uga2ljaworCSAqIGJ1 dCBmdyB3aWxsIHRha2UgY2FyZSBvZiB0aGUgY2xvY2sgYWZ0ZXIgZncgaXMgbG9hZGVkCisJICov CisKKwkvKiBzaWduYWwgYW4gaW50ZXJydXB0IHRvIGxldCB0aGUgbXR4IGtub3cgdGhlcmUgaXMg YSBuZXcgbWVzc2FnZSAqLworCVZFRF9SRUdfV1JJVEUzMigxLCBNVFhfS0lDS19JTlBVVF9PRkZT RVQpOworCisJLyogUmVhZCBNU1ZEWCBSZWdpc3RlciBzZXZlcmFsIHRpbWVzIGluIGNhc2UgSWRs ZSBzaWduYWwgYXNzZXJ0ICovCisJVkVEX1JFR19SRUFEMzIoTVNWRFhfSU5URVJSVVBUX1NUQVRV U19PRkZTRVQpOworCVZFRF9SRUdfUkVBRDMyKE1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfT0ZGU0VU KTsKKwlWRURfUkVHX1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX09GRlNFVCk7CisJVkVE X1JFR19SRUFEMzIoTVNWRFhfSU5URVJSVVBUX1NUQVRVU19PRkZTRVQpOworCitvdXQ6CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QgdmVkX2NtZF9zZW5kKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmNtZCwKKwkJCXVpbnQzMl90IGNtZF9zaXplLCBzdHJ1Y3QgaXB2cl9j b250ZXh0ICppcHZyX2N0eCkKK3sKKwlpbnQzMl90IHJldCA9IDA7CisJc3RydWN0IGRybV9pcHZy X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bmlvbiBtc2dfaGVhZGVy ICpoZWFkZXI7CisJdWludDMyX3QgY3VyX3NlcSA9IDB4ZmZmZmZmZmY7CisKKwl3aGlsZSAoY21k X3NpemUgPiAwKSB7CisJCXVpbnQzMl90IGN1cl9jbWRfc2l6ZSwgY3VyX2NtZF9pZDsKKwkJaGVh ZGVyID0gKHVuaW9uIG1zZ19oZWFkZXIgKiljbWQ7CisJCWN1cl9jbWRfc2l6ZSA9IGhlYWRlci0+ Yml0cy5tc2dfc2l6ZTsKKwkJY3VyX2NtZF9pZCA9IGhlYWRlci0+Yml0cy5tc2dfdHlwZTsKKwor CQljdXJfc2VxID0gKChzdHJ1Y3QgZndfbXNnX2hlYWRlciAqKWNtZCktPmhlYWRlci5iaXRzLm1z Z19mZW5jZTsKKworCQlpZiAoY3VyX3NlcSAhPSAweGZmZmZmZmZmKSB7CisJCQlpcHZyX2N0eC0+ Y3VyX3NlcSA9IGN1cl9zZXE7CisJCX0KKworCQlpZiAoY3VyX2NtZF9zaXplID4gY21kX3NpemUp IHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlJUFZSX0VSUk9SKCJWRUQ6IGNtZF9zaXplICV1IGN1 cl9jbWRfc2l6ZSAldS5cbiIsCisJCQkJICBjbWRfc2l6ZSwgY3VyX2NtZF9zaXplKTsKKwkJCWdv dG8gb3V0OworCQl9CisKKwkJLyogU2VuZCB0aGUgbWVzc2FnZSB0byBoL3cgKi8KKwkJdHJhY2Vf dmVkX2NtZF9zZW5kKGN1cl9jbWRfaWQsIGN1cl9zZXEpOworCQlyZXQgPSB2ZWRfbXR4X3NlbmQo ZGV2X3ByaXYsIGNtZCk7CisJCWlmIChyZXQpIHsKKwkJCUlQVlJfREVCVUdfV0FSTigiVkVEOiBy ZXQ6JWRcbiIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQljbWQgKz0gY3VyX2NtZF9zaXpl OworCQljbWRfc2l6ZSAtPSBjdXJfY21kX3NpemU7CisJCWlmIChjdXJfY21kX2lkID09IE1UWF9N U0dJRF9IT1NUX0JFX09QUCB8fAorCQkJY3VyX2NtZF9pZCA9PSBNVFhfTVNHSURfREVCTE9DSyB8 fAorCQkJY3VyX2NtZF9pZCA9PSBNVFhfTVNHSURfSU5UUkFfT09MRCkgeworCQkJY21kICs9IChz aXplb2Yoc3RydWN0IGZ3X2RlYmxvY2tfbXNnKSAtIGN1cl9jbWRfc2l6ZSk7CisJCQljbWRfc2l6 ZSAtPQorCQkJCShzaXplb2Yoc3RydWN0IGZ3X2RlYmxvY2tfbXNnKSAtIGN1cl9jbWRfc2l6ZSk7 CisJCX0KKwl9CitvdXQ6CisJSVBWUl9ERUJVR19WRUQoIlZFRDogcmV0OiVkXG4iLCByZXQpOwor CXJldHVybiByZXQ7Cit9CisKK2ludDMyX3QgdmVkX2NtZF9kZXF1ZXVlX3NlbmQoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB2ZWRfY21kX3F1ZXVlICp2ZWRfY21kID0gTlVMTDsK KwlpbnQzMl90IHJldCA9IDA7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9w cml2LT52ZWRfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCXNwaW5fbG9j a19pcnFzYXZlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJaWYgKGxpc3RfZW1w dHkoJnZlZF9wcml2LT52ZWRfcXVldWUpKSB7CisJCUlQVlJfREVCVUdfVkVEKCJWRUQ6IHZlZCBj bWQgcXVldWUgZW1wdHkuXG4iKTsKKwkJdmVkX3ByaXYtPnZlZF9idXN5ID0gMDsKKwkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwl2ZWRfY21kID0gbGlzdF9maXJzdF9lbnRyeSgmdmVkX3ByaXYt PnZlZF9xdWV1ZSwKKwkJCQkgICAgIHN0cnVjdCB2ZWRfY21kX3F1ZXVlLCBoZWFkKTsKKwlsaXN0 X2RlbCgmdmVkX2NtZC0+aGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVkX3ByaXYt PnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworCisJSVBWUl9ERUJVR19WRUQoIlZFRDogY21kIHF1ZXVl IHNlcSBpcyAlMDh4LlxuIiwgdmVkX2NtZC0+Y21kX3NlcSk7CisKKwlpZiAoZHJtX2lwdnJfdGls aW5nKQorCQlpcHZyX3NldF90aWxlKGRldiwgdmVkX2NtZC0+dGlsaW5nX3NjaGVtZSwKKwkJCQkg ICB2ZWRfY21kLT50aWxpbmdfc3RyaWRlKTsKKworI2lmZGVmIENPTkZJR19EUk1fSVBWUl9FQwor CS8qIFNlcGVyYXRlIHVwZGF0ZSBmcmFtZSBhbmQgYmFja3VwIGNtZHMgYmVjYXVzZSBpZiBhIGJh dGNoIG9mIGNtZHMKKwkgKiBkb2Vzbid0IGhhdmUgKiBob3N0X2JlX29wcCBtZXNzYWdlLCBubyBu ZWVkIHRvIHVwZGF0ZSBmcmFtZSBpbmZvCisJICogYnV0IHN0aWxsIG5lZWQgdG8gYmFja3VwIGNt ZHMuCisJICogVGhpcyBjYXNlIGNhbiBoYXBwZW4gaWYgYW4gYmF0Y2ggb2YgY21kcyBpcyBub3Qg dGhlIGVudGlyZSBmcmFtZQorCSovCisJaWYgKHZlZF9jbWQtPmhvc3RfYmVfb3BwX2VuYWJsZWQp CisJCXZlZF91cGRhdGVfZnJhbWVfaW5mbyh2ZWRfcHJpdiwgdmVkX2NtZC0+dGZpbGUsCisJCQl2 ZWRfY21kLT5jbWQgKyB2ZWRfY21kLT5kZWJsb2NrX2NtZF9vZmZzZXQpOworCisJdmVkX2JhY2t1 cF9jbWQodmVkX3ByaXYsIHZlZF9jbWQtPnRmaWxlLAorCQkJdmVkX2NtZC0+Y21kLAorCQkJdmVk X2NtZC0+Y21kX3NpemUsCisJCQl2ZWRfY21kLT5kZWJsb2NrX2NtZF9vZmZzZXQpOworI2VuZGlm CisJcmV0ID0gdmVkX2NtZF9zZW5kKGRldiwgdmVkX2NtZC0+Y21kLAorCQkJICAgdmVkX2NtZC0+ Y21kX3NpemUsIHZlZF9jbWQtPmlwdnJfY3R4KTsKKwlpZiAocmV0KSB7CisJCUlQVlJfRVJST1Io IlZFRDogdmVkX2NtZF9zZW5kIGZhaWxlZC5cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKwor CWtmcmVlKHZlZF9jbWQtPmNtZCk7CisJa2ZyZWUodmVkX2NtZCk7CisKKwlyZXR1cm4gcmV0Owor fQorCit2b2lkIHZlZF9mbHVzaF9jbWRfcXVldWUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sK KwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwor CXN0cnVjdCB2ZWRfY21kX3F1ZXVlICp2ZWRfY21kOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Qs ICpuZXh0OworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3By aXZhdGU7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZl ZF9wcml2LT52ZWRfbG9jaywgaXJxX2ZsYWdzKTsKKwkvKiBGbHVzaCB0aGUgVkVEIGNtZCBxdWV1 ZSBhbmQgc2lnbmFsIGFsbCBmZW5jZXMgaW4gdGhlIHF1ZXVlICovCisJbGlzdF9mb3JfZWFjaF9z YWZlKGxpc3QsIG5leHQsICZ2ZWRfcHJpdi0+dmVkX3F1ZXVlKSB7CisJCXZlZF9jbWQgPSBsaXN0 X2VudHJ5KGxpc3QsIHN0cnVjdCB2ZWRfY21kX3F1ZXVlLCBoZWFkKTsKKwkJbGlzdF9kZWwobGlz dCk7CisJCUlQVlJfREVCVUdfVkVEKCJWRUQ6IGZsdXNoaW5nIHNlcXVlbmNlOjB4JTA4eC5cbiIs CisJCQkJICB2ZWRfY21kLT5jbWRfc2VxKTsKKwkJdmVkX3ByaXYtPnZlZF9jdXJfc2VxID0gdmVk X2NtZC0+Y21kX3NlcTsKKworCQlpcHZyX2ZlbmNlX3Byb2Nlc3MoZGV2X3ByaXYsIHZlZF9jbWQt PmNtZF9zZXEsIElQVlJfQ01EX1NLSVApOworCisJCWtmcmVlKHZlZF9jbWQtPmNtZCk7CisJCWtm cmVlKHZlZF9jbWQpOworCX0KKwl2ZWRfcHJpdi0+dmVkX2J1c3kgPSAwOworCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnZlZF9wcml2LT52ZWRfbG9jaywgaXJxX2ZsYWdzKTsKK30KKworLyoKKyAq IFJldHVybnM6CisgKiAtRUlOVkFMIGlmIGludmFsaWQgYXJndW1lbnQgZm91bmQKKyAqIC1FRkFV TFQgaWYgbWFwcGluZyBjb21tYW5kIGJ1ZmZlciBmYWlscworICogLUVOT01FTSBpZiBtZW1vcnkg bm90IGVub3VnaCBmb3IgY29weWluZyBjb21tYW5kCisgKiAwIGlmIHN1Y2Nlc3NmdWwuCisgKi8K K3N0YXRpYyBpbnQzMl90Cit2ZWRfbWFwX2NvbW1hbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCQlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqY21kX2J1ZmZlciwKKwkJCQl1aW50MzJf dCBjbWRfc2l6ZSwgdm9pZCAqKnZlZF9jbWQsCisJCQkJdWludDE2X3Qgc2VxdWVuY2UsIGludDMy X3QgY29weV9jbWQsCisJCQkJc3RydWN0IGlwdnJfY29udGV4dCAqaXB2cl9jdHgpCit7CisJc3Ry dWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1 Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCWludDMy X3QgcmV0ID0gMDsKKwl1aW50MzJfdCBjbWRfc2l6ZV9yZW1haW47CisJdm9pZCAqY21kLCAqY21k X2NvcHksICpjbWRfc3RhcnQ7CisJdW5pb24gbXNnX2hlYWRlciAqaGVhZGVyOworCXN0cnVjdCBp cHZyX2ZlbmNlICpmZW5jZSA9IE5VTEw7CisJaW50IGZlbmNlX2ZkID0gLTE7CisKKwkvKiBjb21t YW5kIGJ1ZmZlcnMgbWF5IG5vdCBleGNlZWQgcGFnZSBib3VuZGFyeSAqLworCWlmIChjbWRfc2l6 ZSA+IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbWRfc3RhcnQgPSBrbWFwKHNn X3BhZ2UoY21kX2J1ZmZlci0+c2dfdGFibGUtPnNnbCkpOworCWlmICghY21kX3N0YXJ0KSB7CisJ CUlQVlJfRVJST1IoIlZFRDoga21hcCBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJ fQorCisJY21kID0gY21kX3N0YXJ0OworCWNtZF9zaXplX3JlbWFpbiA9IGNtZF9zaXplOworCisJ dmVkX3ByaXYtPmhvc3RfYmVfb3BwX2VuYWJsZWQgPSAwOworCXZlZF9wcml2LT5kZWJsb2NrX2Nt ZF9vZmZzZXQgPSBWRURfSU5WQUxJRF9PRkZTRVQ7CisKKwl3aGlsZSAoY21kX3NpemVfcmVtYWlu ID4gMCkgeworCQl1aW50MzJfdCBjdXJfY21kX3NpemUsIGN1cl9jbWRfaWQsIG1tdV9wdGQsIG1z dmR4X21tdV9pbnZhbGlkOworCQlpZiAoY21kX3NpemVfcmVtYWluIDwgTVRYX0dFTk1TR19IRUFE RVJfU0laRSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWhlYWRl ciA9ICh1bmlvbiBtc2dfaGVhZGVyICopY21kOworCQljdXJfY21kX3NpemUgPSBoZWFkZXItPmJp dHMubXNnX3NpemU7CisJCWN1cl9jbWRfaWQgPSBoZWFkZXItPmJpdHMubXNnX3R5cGU7CisJCW1t dV9wdGQgPSAwOworCQltc3ZkeF9tbXVfaW52YWxpZCA9IDA7CisKKwkJSVBWUl9ERUJVR19WRUQo ImNtZCBzdGFydCBhdCAlbHggY3VyX2NtZF9zaXplID0gJWQiCisJCQkgICAgICAgIiBjdXJfY21k X2lkID0gJTAyeCBmZW5jZSA9ICUwOHhcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpY21k LCBjdXJfY21kX3NpemUsCisJCQkgICAgICAgY3VyX2NtZF9pZCwgc2VxdWVuY2UpOworCQlpZiAo KGN1cl9jbWRfc2l6ZSAlIHNpemVvZih1aW50MzJfdCkpCisJCSAgICB8fCAoY3VyX2NtZF9zaXpl ID4gY21kX3NpemVfcmVtYWluKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCUlQVlJfRVJST1Io IlZFRDogY21kIHNpemUgZXJyLCByZXQ6JWQuXG4iLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0K KworCQlzd2l0Y2ggKGN1cl9jbWRfaWQpIHsKKwkJY2FzZSBNVFhfTVNHSURfREVDT0RFX0ZFOiB7 CisJCQlzdHJ1Y3QgZndfZGVjb2RlX21zZyAqZGVjb2RlX21zZzsKKwkJCWlmIChzaXplb2Yoc3Ry dWN0IGZ3X2RlY29kZV9tc2cpID4gY21kX3NpemVfcmVtYWluKSB7CisJCQkJLyogTXNnIHNpemUg aXMgbm90IGNvcnJlY3QgKi8KKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCUlQVlJfREVCVUdfVkVE KCJNU1ZEWDogd3JvbmcgbXNnIHNpemUuXG4iKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWRl Y29kZV9tc2cgPSAoc3RydWN0IGZ3X2RlY29kZV9tc2cgKiljbWQ7CisJCQlkZWNvZGVfbXNnLT5o ZWFkZXIuYml0cy5tc2dfZmVuY2UgPSBzZXF1ZW5jZTsKKworCQkJbW11X3B0ZCA9IGlwdnJfZ2V0 X2RlZmF1bHRfcGRfYWRkcihkZXZfcHJpdi0+bW11KTsKKwkJCW1zdmR4X21tdV9pbnZhbGlkID0K KwkJCQlhdG9taWNfY21weGNoZygmZGV2X3ByaXYtPmlwdnJfbW11X2ludmFsZGMsCisJCQkJCSAg ICAgICAxLCAwKTsKKwkJCWlmIChtc3ZkeF9tbXVfaW52YWxpZCA9PSAxKSB7CisJCQkJZGVjb2Rl X21zZy0+ZmxhZ19zaXplLmJpdHMuZmxhZ3MgfD0KKwkJCQkJCUZXX0lOVkFMSURBVEVfTU1VOwor CQkJCUlQVlJfREVCVUdfVkVEKCJWRUQ6IFNldCBNTVUgaW52YWxpZGF0ZVxuIik7CisJCQl9CisJ CQkvKgorCQkJaWYgKG1zdmR4X21tdV9pbnZhbGlkID09IDEpCisJCQkJaXB2cl9tbXVfcGd0YWJs ZV9kdW1wKGRldik7CisJCQkqLworCQkJLyogaWYgY3R4X2lkIGlzIG5vdCBwYXNzZWQsIHVzZSBk ZWZhdWx0IGlkICovCisJCQlpZiAoZGVjb2RlX21zZy0+bW11X2NvbnRleHQuYml0cy5jb250ZXh0 ID09IDApCisJCQkJZGVjb2RlX21zZy0+bW11X2NvbnRleHQuYml0cy5jb250ZXh0ID0KKwkJCQkJ ZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmN0eF9pZDsKKworCQkJZGVjb2RlX21zZy0+bW11X2NvbnRl eHQuYml0cy5tbXVfcHRkID0gbW11X3B0ZCA+PiA4OworCQkJSVBWUl9ERUJVR19WRUQoIlZFRDog TVNHSURfREVDT0RFX0ZFOiIKKwkJCQkJIiAtIGZlbmNlOiAlMDh4IgorCQkJCQkiIC0gZmxhZ3M6 ICUwOHggLSBidWZmZXJfc2l6ZTogJTA4eCIKKwkJCQkJIiAtIGNydGxfYWxsb2NfYWRkcjogJTA4 eCIKKwkJCQkJIiAtIGNvbnRleHQ6ICUwOHggLSBtbXVfcHRkOiAlMDh4IgorCQkJCQkiIC0gb3Bl cmF0aW5nX21vZGU6ICUwOHguXG4iLAorCQkJCQlkZWNvZGVfbXNnLT5oZWFkZXIuYml0cy5tc2df ZmVuY2UsCisJCQkJCWRlY29kZV9tc2ctPmZsYWdfc2l6ZS5iaXRzLmZsYWdzLAorCQkJCQlkZWNv ZGVfbXNnLT5mbGFnX3NpemUuYml0cy5idWZmZXJfc2l6ZSwKKwkJCQkJZGVjb2RlX21zZy0+Y3J0 bF9hbGxvY19hZGRyLAorCQkJCQlkZWNvZGVfbXNnLT5tbXVfY29udGV4dC5iaXRzLmNvbnRleHQs CisJCQkJCWRlY29kZV9tc2ctPm1tdV9jb250ZXh0LmJpdHMubW11X3B0ZCwKKwkJCQkJZGVjb2Rl X21zZy0+b3BlcmF0aW5nX21vZGUpOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIE1UWF9NU0dJ RF9IT1NUX0JFX09QUF9NRkxEOgorCQkJdmVkX3ByaXYtPmhvc3RfYmVfb3BwX2VuYWJsZWQgPSAx OworCQkJdmVkX3ByaXYtPmRlYmxvY2tfY21kX29mZnNldCA9CisJCQkJCWNtZF9zaXplIC0gY21k X3NpemVfcmVtYWluOworCQljYXNlIE1UWF9NU0dJRF9JTlRSQV9PT0xEX01GTEQ6CisJCWNhc2Ug TVRYX01TR0lEX0RFQkxPQ0tfTUZMRDogeworCQkJc3RydWN0IGZ3X2RlYmxvY2tfbXNnICpkZWJs b2NrX21zZzsKKwkJCWlmIChzaXplb2Yoc3RydWN0IGZ3X2RlYmxvY2tfbXNnKSA+IGNtZF9zaXpl X3JlbWFpbikgeworCQkJCS8qIE1zZyBzaXplIGlzIG5vdCBjb3JyZWN0ICovCisJCQkJcmV0ID0g LUVJTlZBTDsKKwkJCQlJUFZSX0RFQlVHX1ZFRCgiTVNWRFg6IHdyb25nIG1zZyBzaXplLlxuIik7 CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlkZWJsb2NrX21zZyA9IChzdHJ1Y3QgZndfZGVibG9j a19tc2cgKiljbWQ7CisJCQltbXVfcHRkID0gaXB2cl9nZXRfZGVmYXVsdF9wZF9hZGRyKGRldl9w cml2LT5tbXUpOworCQkJbXN2ZHhfbW11X2ludmFsaWQgPQorCQkJCWF0b21pY19jbXB4Y2hnKCZk ZXZfcHJpdi0+aXB2cl9tbXVfaW52YWxkYywKKwkJCQkJCTEsIDApOworCQkJaWYgKG1zdmR4X21t dV9pbnZhbGlkID09IDEpIHsKKwkJCQlkZWJsb2NrX21zZy0+ZmxhZ190eXBlLmJpdHMuZmxhZ3Mg fD0KKwkJCQkJCQlGV19JTlZBTElEQVRFX01NVTsKKwkJCQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBT ZXQgTU1VIGludmFsaWRhdGVcbiIpOworCQkJfQorCisJCQkvKiBwYXRjaCB0byByaWdodCBjbWQg dHlwZSAqLworCQkJZGVibG9ja19tc2ctPmhlYWRlci5iaXRzLm1zZ190eXBlID0KKwkJCQkJY3Vy X2NtZF9pZCAtCisJCQkJCU1UWF9NU0dJRF9ERUJMT0NLX01GTEQgKworCQkJCQlNVFhfTVNHSURf REVCTE9DSzsKKworCQkJZGVibG9ja19tc2ctPmhlYWRlci5iaXRzLm1zZ19mZW5jZSA9IHNlcXVl bmNlICYgMHhmZmZmOworCQkJZGVibG9ja19tc2ctPm1tdV9jb250ZXh0LmJpdHMubW11X3B0ZCA9 IChtbXVfcHRkID4+IDgpOworCQkJLyogaWYgY3R4X2lkIGlzIG5vdCBwYXNzZWQsIHVzZSBkZWZh dWx0IGlkICovCisJCQlpZiAoZGVibG9ja19tc2ctPm1tdV9jb250ZXh0LmJpdHMuY29udGV4dCA9 PSAwKQorCQkJCWRlYmxvY2tfbXNnLT5tbXVfY29udGV4dC5iaXRzLmNvbnRleHQgPQorCQkJCQlk ZXZfcHJpdi0+ZGVmYXVsdF9jdHguY3R4X2lkOworCQkJSVBWUl9ERUJVR19WRUQoIlZFRDogTVNH SURfREVCTE9DSzoiCisJCQkJIiAtIGZlbmNlOiAlMDh4IgorCQkJCSIgLSBmbGFnczogJTA4eCAt IHNsaWNlX2ZpZWxkX3R5cGU6ICUwOHgiCisJCQkJIiAtIG9wZXJhdGluZ19tb2RlOiAlMDh4Igor CQkJCSIgLSBjb250ZXh0OiAlMDh4IC0gbW11X3B0ZDogJTA4eCIKKwkJCQkiIC0gZnJhbWVfaGVp Z2h0X21iOiAlMDh4IC0gcGljX3dpZHRoX21iOiAlMDh4IgorCQkJCSIgLSBhZGRyZXNzX2EwOiAl MDh4IC0gYWRkcmVzc19hMTogJTA4eCIKKwkJCQkiIC0gbWJfcGFyYW1fYWRkcmVzczogJTA4eCIK KwkJCQkiIC0gZXh0X3N0cmlkZV9hOiAlMDh4IgorCQkJCSIgLSBhZGRyZXNzX2IwOiAlMDh4IC0g YWRkcmVzc19iMTogJTA4eCIKKwkJCQkiIC0gYWx0X291dHB1dF9mbGFnc19iOiAlMDh4LlxuIiwK KwkJCQlkZWJsb2NrX21zZy0+aGVhZGVyLmJpdHMubXNnX2ZlbmNlLAorCQkJCWRlYmxvY2tfbXNn LT5mbGFnX3R5cGUuYml0cy5mbGFncywKKwkJCQlkZWJsb2NrX21zZy0+ZmxhZ190eXBlLmJpdHMu c2xpY2VfZmllbGRfdHlwZSwKKwkJCQlkZWJsb2NrX21zZy0+b3BlcmF0aW5nX21vZGUsCisJCQkJ ZGVibG9ja19tc2ctPm1tdV9jb250ZXh0LmJpdHMuY29udGV4dCwKKwkJCQlkZWJsb2NrX21zZy0+ bW11X2NvbnRleHQuYml0cy5tbXVfcHRkLAorCQkJCWRlYmxvY2tfbXNnLT5waWNfc2l6ZS5iaXRz LmZyYW1lX2hlaWdodF9tYiwKKwkJCQlkZWJsb2NrX21zZy0+cGljX3NpemUuYml0cy5waWNfd2lk dGhfbWIsCisJCQkJZGVibG9ja19tc2ctPmFkZHJlc3NfYTAsCisJCQkJZGVibG9ja19tc2ctPmFk ZHJlc3NfYTEsCisJCQkJZGVibG9ja19tc2ctPm1iX3BhcmFtX2FkZHJlc3MsCisJCQkJZGVibG9j a19tc2ctPmV4dF9zdHJpZGVfYSwKKwkJCQlkZWJsb2NrX21zZy0+YWRkcmVzc19iMCwKKwkJCQlk ZWJsb2NrX21zZy0+YWRkcmVzc19iMSwKKwkJCQlkZWJsb2NrX21zZy0+YWx0X291dHB1dF9mbGFn c19iKTsKKwkJCWNtZCArPSAoc2l6ZW9mKHN0cnVjdCBmd19kZWJsb2NrX21zZykgLSBjdXJfY21k X3NpemUpOworCQkJY21kX3NpemVfcmVtYWluIC09IChzaXplb2Yoc3RydWN0IGZ3X2RlYmxvY2tf bXNnKSAtCisJCQkJCQljdXJfY21kX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoK KwkJCS8qIE1zZyBub3Qgc3VwcG9ydGVkICovCisJCQlyZXQgPSAtRUlOVkFMOworCQkJSVBWUl9E RUJVR19XQVJOKCJWRUQ6IG1zZyBub3Qgc3VwcG9ydGVkLlxuIik7CisJCQlnb3RvIG91dDsKKwkJ fQorCisJCWNtZCArPSBjdXJfY21kX3NpemU7CisJCWNtZF9zaXplX3JlbWFpbiAtPSBjdXJfY21k X3NpemU7CisJCWlmICgoKHNlcXVlbmNlKyspICYgMHhmKSA9PSAweGYpIHsKKwkJCXJldCA9IC1F SU5WQUw7CisJCQlJUFZSX0RFQlVHX1dBUk4oIlZFRDogdG9vIG1hbnkgY21kcywgYWJvcnQuXG4i KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJdmVkX3ByaXYtPm51bV9jbWQgPSAoKC0tc2Vx dWVuY2UpICYgMHhmKTsKKworCWlwdnJfZmVuY2VfY3JlYXRlKGRldl9wcml2LCAmZmVuY2UsICZm ZW5jZV9mZCk7CisKKwlpcHZyX2ZlbmNlX2J1ZmZlcl9vYmplY3RzKCZkZXZfcHJpdi0+dmFsaWRh dGVfY3R4LnZhbGlkYXRlX2xpc3QsCisJCQkJZmVuY2UsIGZlbmNlX2ZkKTsKKworCWlmIChjb3B5 X2NtZCkgeworCQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBjb3B5aW5nIGNvbW1hbmQuXG4iKTsKKwor CQljbWRfY29weSA9IGt6YWxsb2MoY21kX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoY21kX2Nv cHkgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCUlQVlJfRVJST1IoIlZFRDogZmFp bCB0byBjYWxsYywgcmV0PTolZFxuIiwgcmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCW1lbWNw eShjbWRfY29weSwgY21kX3N0YXJ0LCBjbWRfc2l6ZSk7CisJCSp2ZWRfY21kID0gY21kX2NvcHk7 CisJfSBlbHNlIHsKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogZGlkIE5PVCBjb3B5IGNvbW1hbmQu XG4iKTsKKwkJaWYgKGRybV9pcHZyX3RpbGluZykKKwkJCWlwdnJfc2V0X3RpbGUoZGV2LCB2ZWRf cHJpdi0+aXB2cl9jdHgtPnRpbGluZ19zY2hlbWUsCisJCQkJCXZlZF9wcml2LT5pcHZyX2N0eC0+ dGlsaW5nX3N0cmlkZSk7CisKKyNpZmRlZiBDT05GSUdfRFJNX0lQVlJfRUMKKwkJaWYgKHZlZF9w cml2LT5ob3N0X2JlX29wcF9lbmFibGVkKSB7CisJCQl2ZWRfdXBkYXRlX2ZyYW1lX2luZm8odmVk X3ByaXYsCisJCQkJdmVkX3ByaXYtPnRmaWxlLAorCQkJCWNtZF9zdGFydCArIHZlZF9wcml2LT5k ZWJsb2NrX2NtZF9vZmZzZXQpOworCQl9CisJCXZlZF9iYWNrdXBfY21kKHZlZF9wcml2LCB2ZWRf cHJpdi0+dGZpbGUsCisJCQkJY21kX3N0YXJ0LAorCQkJCWNtZF9zaXplLAorCQkJCXZlZF9wcml2 LT5kZWJsb2NrX2NtZF9vZmZzZXQpOworI2VuZGlmCisJCXJldCA9IHZlZF9jbWRfc2VuZChkZXYs IGNtZF9zdGFydCwgY21kX3NpemUsIGlwdnJfY3R4KTsKKwkJaWYgKHJldCkgeworCQkJSVBWUl9F UlJPUigiVkVEOiB2ZWRfY21kX3NlbmQgZmFpbGVkXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJ CX0KKwl9CisKK291dDoKKwlrdW5tYXAoc2dfcGFnZShjbWRfYnVmZmVyLT5zZ190YWJsZS0+c2ds KSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJuczoKKyAqIC1FSU5WQUwKKyAq IC1FRkFVTFQKKyAqIC1FTk9NRU0KKyAqIDAKKyAqLworc3RhdGljIGludDMyX3QKK3ZlZF9zdWJt aXRfY21kYnVmX2NvcHkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZHJtX2lw dnJfZ2VtX29iamVjdCAqY21kX2J1ZmZlciwKKwkJCQl1aW50MzJfdCBjbWRfc2l6ZSwKKwkJCQlz dHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0eCwKKwkJCQl1aW50MzJfdCBmZW5jZV9mbGFnKQor eworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7 CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsK KwlzdHJ1Y3QgdmVkX2NtZF9xdWV1ZSAqdmVkX2NtZDsKKwl1aW50MTZfdCBzZXF1ZW5jZSA9ICAo ZGV2X3ByaXYtPmxhc3Rfc2VxIDw8IDQpOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXZv aWQgKmNtZCA9IE5VTEw7CisJaW50MzJfdCByZXQ7CisKKwkvKiBxdWV1ZSB0aGUgY29tbWFuZCB0 byBiZSBzZW50IHdoZW4gdGhlIGgvdyBpcyByZWFkeSAqLworCUlQVlJfREVCVUdfVkVEKCJWRUQ6 IHF1ZXVlaW5nIHNlcXVlbmNlOiUwOHguXG4iLAorCQkJICBzZXF1ZW5jZSk7CisJdmVkX2NtZCA9 IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2ZWRfY21kX3F1ZXVlKSwKKwkJCSAgICBHRlBfS0VSTkVM KTsKKwlpZiAodmVkX2NtZCA9PSBOVUxMKSB7CisJCUlQVlJfRVJST1IoIk1TVkRYUVVFOiBPdXQg b2YgbWVtb3J5Li4uXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gdmVkX21h cF9jb21tYW5kKGRldiwgY21kX2J1ZmZlciwgY21kX3NpemUsCisJCQkJJmNtZCwgc2VxdWVuY2Us IDEsIGlwdnJfY3R4KTsKKwlpZiAocmV0KSB7CisJCUlQVlJfRVJST1IoIlZFRDogRmFpbGVkIHRv IGV4dHJhY3QgY21kXG4iKTsKKwkJa2ZyZWUodmVkX2NtZCk7CisJCS8qIC1FSU5WQUwgb3IgLUVG QVVMVCBvciAtRU5PTUVNICovCisJCXJldHVybiByZXQ7CisJfQorCXZlZF9jbWQtPmNtZCA9IGNt ZDsKKwl2ZWRfY21kLT5jbWRfc2l6ZSA9IGNtZF9zaXplOworCXZlZF9jbWQtPmNtZF9zZXEgPSBz ZXF1ZW5jZTsKKworCXZlZF9jbWQtPnRpbGluZ19zY2hlbWUgPSB2ZWRfcHJpdi0+aXB2cl9jdHgt PnRpbGluZ19zY2hlbWU7CisJdmVkX2NtZC0+dGlsaW5nX3N0cmlkZSA9IHZlZF9wcml2LT5pcHZy X2N0eC0+dGlsaW5nX3N0cmlkZTsKKwl2ZWRfY21kLT5kZWJsb2NrX2NtZF9vZmZzZXQgPQorCQl2 ZWRfcHJpdi0+ZGVibG9ja19jbWRfb2Zmc2V0OworCXZlZF9jbWQtPmhvc3RfYmVfb3BwX2VuYWJs ZWQgPQorCQl2ZWRfcHJpdi0+aG9zdF9iZV9vcHBfZW5hYmxlZDsKKwl2ZWRfY21kLT50ZmlsZSA9 CisJCXZlZF9wcml2LT50ZmlsZTsKKwl2ZWRfY21kLT5pcHZyX2N0eCA9IGlwdnJfY3R4OworCXNw aW5fbG9ja19pcnFzYXZlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJbGlzdF9h ZGRfdGFpbCgmdmVkX2NtZC0+aGVhZCwgJnZlZF9wcml2LT52ZWRfcXVldWUpOworCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnZlZF9wcml2LT52ZWRfbG9jaywgaXJxX2ZsYWdzKTsKKwlpZiAoIXZl ZF9wcml2LT52ZWRfYnVzeSkgeworCQl2ZWRfcHJpdi0+dmVkX2J1c3kgPSAxOworCQlJUFZSX0RF QlVHX1ZFRCgiVkVEOiBOZWVkIGltbWVkaWF0ZSBkZXF1ZXVlLlxuIik7CisJCXZlZF9jbWRfZGVx dWV1ZV9zZW5kKGRldik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50MzJfdAordmVkX3N1 Ym1pdF92aWRlb19jbWRidWYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZHJt X2lwdnJfZ2VtX29iamVjdCAqY21kX2J1ZmZlciwKKwkJCQl1aW50MzJfdCBjbWRfc2l6ZSwKKwkJ CQlzdHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0eCwKKwkJCQl1aW50MzJfdCBmZW5jZV9mbGFn KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJdWludDE2X3Qgc2VxdWVuY2UgPSAgKGRldl9wcml2LT5sYXN0X3NlcSA8PCA0KSAmIDB4 ZmZmZjsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQzMl90IHJldCA9IDA7CisJc3Ry dWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsKKyNpZmRl ZiBDT05GSUdfRFJNX0lQVlJfRUMKKwlpbnQgb2Zmc2V0ID0gMDsKKyNlbmRpZgorCisJaWYgKHNl cXVlbmNlID09IElQVlJfRkVOQ0VfU0lHTkFMRURfU0VRKSB7CisJCXNlcXVlbmNlID0gICgrK2Rl dl9wcml2LT5sYXN0X3NlcSA8PCA0KSAmIDB4ZmZmZjsKKwl9CisKKwlpZiAoIXZlZF9wcml2LT5m d19iMF91cGxvYWRlZCl7CisJCS8qIG5vdCBuZWVkZWQgZm9yIGJheXRyYWlsICovCisJfQorCisJ aWYgKCFpcHZyX2N0eCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IG51bGwgY3R4XG4iKTsKKwkJcmV0 dXJuIC1FRkFVTFQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlZF9wcml2LT52ZWRfbG9j aywgaXJxX2ZsYWdzKTsKKworCXZlZF9wcml2LT5pcHZyX2N0eCA9IGlwdnJfY3R4OworCisJSVBW Ul9ERUJVR19WRUQoInNlcXVlbmNlIGlzIDB4JXgsIG5lZWRzX3Jlc2V0IGlzIDB4JXguXG4iLAor CQkJc2VxdWVuY2UsIHZlZF9wcml2LT52ZWRfbmVlZHNfcmVzZXQpOworCisJaWYgKHZlZF9wcml2 LT52ZWRfYnVzeSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWRfcHJpdi0+dmVkX2xv Y2ssIGlycV9mbGFncyk7CisJCXJldCA9IHZlZF9zdWJtaXRfY21kYnVmX2NvcHkoZGV2LCBjbWRf YnVmZmVyLAorCQkJICAgIGNtZF9zaXplLCBpcHZyX2N0eCwgZmVuY2VfZmxhZyk7CisKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlpZiAodmVkX3ByaXYtPnZlZF9uZWVkc19yZXNldCkgeworCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJCUlQ VlJfREVCVUdfVkVEKCJWRUQ6IHdpbGwgcmVzZXQgbXN2ZHguXG4iKTsKKworCQlpZiAoIXZlZF9w cml2LT5md19sb2FkZWRfYnlfcHVuaXQpIHsKKwkJCWlmICh2ZWRfY29yZV9yZXNldChkZXZfcHJp dikpIHsKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJSVBWUl9FUlJPUigiVkVEOiBSZXNldCBmYWls ZWQuXG4iKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisKKwkJdmVkX3ByaXYtPnZlZF9u ZWVkc19yZXNldCA9IDA7CisJCXZlZF9wcml2LT52ZWRfYnVzeSA9IDA7CisKKwkJaWYgKHZlZF9w cml2LT5md19sb2FkZWRfYnlfcHVuaXQpeworCQkJcmV0ID0gdmVkX3Bvc3RfaW5pdChkZXYpOwor CQkJaWYgKHJldCkgeworCQkJCXJldCA9IC1FQlVTWTsKKwkJCQlJUFZSX0RFQlVHX1dBUk4oIlZF RDogdmVkX3Bvc3RfaW5pdCBmYWlsLlxuIik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQor CQllbHNleworCQkJaWYgKGlwdnJfdmVkX2luaXQoZGV2KSkgeworCQkJCXJldCA9IC1FQlVTWTsK KwkJCQlJUFZSX0RFQlVHX1dBUk4oIlZFRDogaXB2cl92ZWRfaW5pdCBmYWlsLlxuIik7CisJCQkJ cmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCisjaWZkZWYgQ09ORklHX0RSTV9JUFZSX0VDCisJCS8q IHJlc3RvcmUgdGhlIHN0YXRlIHdoZW4gcG93ZXIgdXAgZHVyaW5nIEVDICovCisJCWlmICh2ZWRf cHJpdi0+dmVjX2VjX21lbV9zYXZlZCkgeworCQkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCA0 OyArK29mZnNldCkKKwkJCQlWRURfUkVHX1dSSVRFMzIoCisJCQkJCXZlZF9wcml2LT52ZWNfZWNf bWVtX2RhdGFbb2Zmc2V0XSwKKwkJCQkJMHgyY2IwICsgb2Zmc2V0ICogNCk7CisKKwkJCVZFRF9S RUdfV1JJVEUzMih2ZWRfcHJpdi0+dmVjX2VjX21lbV9kYXRhWzRdLAorCQkJCQkweDJjYzQpOwor CQkJdmVkX3ByaXYtPnZlY19lY19tZW1fc2F2ZWQgPSAwOworCQl9CisjZW5kaWYKKworCQlzcGlu X2xvY2tfaXJxc2F2ZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworCX0KKworCWlm ICh2ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1bml0ICYmICF2ZWRfcHJpdi0+cmVuZGVjX2luaXRp YWxpemVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlZF9wcml2LT52ZWRfbG9jaywg aXJxX2ZsYWdzKTsKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogc2V0dXAgbXN2ZHguXG4iKTsKKwkJ cmV0ID0gdmVkX3Bvc3RfYm9vdF9pbml0KGRldik7CisJCWlmIChyZXQpIHsKKwkJCUlQVlJfRVJS T1IoIlZFRDogZmFpbCB0byBzZXR1cCBtc3ZkeC5cbiIpOworCQkJLyogRklYTUU6IGZpbmQgYSBw cm9wZXIgcmV0dXJuIHZhbHVlICovCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQl2ZWRfcHJp di0+cmVuZGVjX2luaXRpYWxpemVkID0gMTsKKworCQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBzZXR1 cCBtc3ZkeCBzdWNjZXNzZnVsbHkuXG4iKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnZlZF9wcml2 LT52ZWRfbG9jaywgaXJxX2ZsYWdzKTsKKwl9CisKKwlpZiAoIXZlZF9wcml2LT5md19sb2FkZWRf YnlfcHVuaXQgJiYgIXZlZF9wcml2LT52ZWRfZndfbG9hZGVkKSB7CisJCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnZlZF9wcml2LT52ZWRfbG9jaywgaXJxX2ZsYWdzKTsKKwkJSVBWUl9ERUJVR19W RUQoIlZFRDogcmVsb2FkIEZXIHRvIE1UWFxuIik7CisJCXJldCA9IHZlZF9zZXR1cF9mdyhkZXYp OworCQlpZiAocmV0KSB7CisJCQlJUFZSX0VSUk9SKCJWRUQ6IGZhaWwgdG8gbG9hZCBGV1xuIik7 CisJCQkvKiBGSVhNRTogZmluZCBhIHByb3BlciByZXR1cm4gdmFsdWUgKi8KKwkJCXJldHVybiAt RUZBVUxUOworCQl9CisJCXZlZF9wcml2LT52ZWRfZndfbG9hZGVkID0gMTsKKworCQlJUFZSX0RF QlVHX1ZFRCgiVkVEOiBsb2FkIGZpcm13YXJlIHN1Y2Nlc3NmdWxseVxuIik7CisJCXNwaW5fbG9j a19pcnFzYXZlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJfQorCisJdmVkX3By aXYtPnZlZF9idXN5ID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWRfcHJpdi0+dmVk X2xvY2ssIGlycV9mbGFncyk7CisJSVBWUl9ERUJVR19WRUQoIlZFRDogY29tbWl0IGNvbW1hbmQg dG8gSFcsc2VxPTB4JTA4eFxuIiwKKwkJCSAgc2VxdWVuY2UpOworCXJldCA9IHZlZF9tYXBfY29t bWFuZChkZXYsIGNtZF9idWZmZXIsIGNtZF9zaXplLAorCQkJCU5VTEwsIHNlcXVlbmNlLCAwLCBp cHZyX2N0eCk7CisJaWYgKHJldCkKKwkJSVBWUl9FUlJPUigiVkVEOiBGYWlsZWQgdG8gZXh0cmFj dCBjbWQuXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFJldHVybnM6CisgKiAtRUlOVkFM CisgKiAtRU5PTUVNCisgKiAtRUZBVUxUCisgKiAtRUJVU1kKKyAqLworaW50MzJfdCB2ZWRfY21k YnVmX3ZpZGVvKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCQkJc3RydWN0IGRybV9p cHZyX2dlbV9vYmplY3QgKmNtZF9idWZmZXIsCisJCQkJCQl1aW50MzJfdCBjbWRidWZfc2l6ZSwK KwkJCQkJCXN0cnVjdCBpcHZyX2NvbnRleHQgKmlwdnJfY3R4KQoreworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBmaWxlX3ByaXYtPm1pbm9yLT5kZXY7CisJaW50MzJfdCByZXQ7CisKKwkvKgor CSAqIENoZWNrIHRoaXMuIERvZXNuJ3Qgc2VlbSByaWdodC4gSGF2ZSBmZW5jaW5nIGRvbmUgQUZU RVIgY29tbWFuZAorCSAqIHN1Ym1pc3Npb24gYW5kIG1ha2Ugc3VyZSBkcm1fdmVkX2lkbGUgaWRs ZXMgdGhlIFZFRCBjb21wbGV0ZWx5LgorCSAqLworCXJldCA9IHZlZF9zdWJtaXRfdmlkZW9fY21k YnVmKGRldiwgY21kX2J1ZmZlciwgY21kYnVmX3NpemUsIGlwdnJfY3R4LCAwKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQzMl90IHZlZF9o YW5kbGVfcGFuaWNfbXNnKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYsCisJCQkJCXN0cnVj dCBmd19wYW5pY19tc2cgKnBhbmljX21zZykKK3sKKwkvKiBGb3IgVlhEMzg1IGZpcm13YXJlLCBm ZW5jZSB2YWx1ZSBpcyBub3QgdmFsaWRhdGUgaGVyZSAqLworCXVpbnQzMl90IGksIGRpZmYgPSAw OworCXVpbnQxNl90IGZlbmNlOworCXVpbnQzMl90IGVycl90cmlnLCBpcnFfc3RzLCBtbXVfc3Rz LCBkbWFjX3N0czsKKwlzdHJ1Y3QgdmVkX2ZyYW1lX2luZm8gKmZhaWxlZF9mcmFtZSA9IE5VTEw7 CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gdmVkX3ByaXYtPmRldl9wcml2 OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCUlQVlJfREVCVUdf V0FSTigiTVNWRFg6IE1TR0lEX0NNRF9IV19QQU5JQzoiCisJCSAgIkZhdWx0IGRldGVjdGVkIgor CQkgICIgLSBGZW5jZTogJTA4eCIKKwkJICAiIC0gZmVfc3RhdHVzIG1iOiAlMDh4IgorCQkgICIg LSBiZV9zdGF0dXMgbWI6ICUwOHgiCisJCSAgIiAtIHJlc2VydmVkMjogJTA4eCIKKwkJICAiIC0g bGFzdCBtYjogJTA4eCIKKwkJICAiIC0gcmVzZXR0aW5nIGFuZCBpZ25vcmluZyBlcnJvclxuIiwK KwkJICBwYW5pY19tc2ctPmhlYWRlci5iaXRzLm1zZ19mZW5jZSwKKwkJICBwYW5pY19tc2ctPmZl X3N0YXR1cywKKwkJICBwYW5pY19tc2ctPmJlX3N0YXR1cywKKwkJICBwYW5pY19tc2ctPm1iLmJp dHMucmVzZXJ2ZWQyLAorCQkgIHBhbmljX21zZy0+bWIuYml0cy5sYXN0X21iKTsKKwkvKgorCSAq IElmIGJpdCA4IG9mIE1TVkRYX0lOVEVSUlVQVF9TVEFUVVMgaXMgc2V0IHRoZSBmYXVsdAorCSAq IHdhcyBjYXVzZWQgaW4gdGhlIERNQUMuIEluIHRoaXMgY2FzZSB5b3Ugc2hvdWxkCisJICogY2hl Y2sgYml0cyAyMDoyMiBvZiBNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTLgorCSAqIElmIGJpdCAyMCBp cyBzZXQgdGhlcmUgd2FzIGEgcHJvYmxlbSBETUFpbmcgdGhlIGJ1ZmZlcgorCSAqIGJhY2sgdG8g aG9zdC4gSWYgYml0IDIyIGlzIHNldCB5b3UnbGwgbmVlZCB0byBnZXQgdGhlCisJICogdmFsdWUg b2YgTVNWRFhfRE1BQ19TVFJFQU1fU1RBVFVTICgweDY0OCkuCisJICogSWYgYml0IDEgaXMgc2V0 IHRoZW4gdGhlcmUgd2FzIGFuIGlzc3VlIERNQWluZworCSAqIHRoZSBiaXRzdHJlYW0gb3IgdGVy bWluYXRpb24gY29kZSBmb3IgcGFyc2luZy4KKwkgKi8KKwllcnJfdHJpZyA9IFZFRF9SRUdfUkVB RDMyKE1TVkRYX0NPTU1TX0VSUk9SX1RSSUcpOworCWlycV9zdHMgPSBWRURfUkVHX1JFQUQzMihN U1ZEWF9JTlRFUlJVUFRfU1RBVFVTX09GRlNFVCk7CisJbW11X3N0cyA9IFZFRF9SRUdfUkVBRDMy KE1TVkRYX01NVV9TVEFUVVNfT0ZGU0VUKTsKKwlkbWFjX3N0cyA9IFZFRF9SRUdfUkVBRDMyKE1T VkRYX0RNQUNfU1RSRUFNX1NUQVRVU19PRkZTRVQpOworCUlQVlJfREVCVUdfVkVEKCJNU1ZEWDog TVNWRFhfQ09NTVNfRVJST1JfVFJJRyBpcyAweCV4LCIKKwkJIk1TVkRYX0lOVEVSUlVQVF9TVEFU VVMgaXMgMHgleCwiCisJCSJNU1ZEWF9NTVVfU1RBVFVTIGlzIDB4JXgsIgorCQkiTVNWRFhfRE1B Q19TVFJFQU1fU1RBVFVTIGlzIDB4JXguXG4iLAorCQllcnJfdHJpZywgaXJxX3N0cywgbW11X3N0 cywgZG1hY19zdHMpOworCisJdHJhY2VfdmVkX2lycV9wYW5pYyhwYW5pY19tc2csIGVycl90cmln LCBpcnFfc3RzLCBtbXVfc3RzLCBkbWFjX3N0cyk7CisKKwlmZW5jZSA9IHBhbmljX21zZy0+aGVh ZGVyLmJpdHMubXNnX2ZlbmNlOworCisJaWYgKHZlZF9wcml2LT5md19sb2FkZWRfYnlfcHVuaXQp CisJCXZlZF9wcml2LT52ZWRfbmVlZHNfcmVzZXQgfD0gTVNWRFhfUkVTRVRfTkVFRFNfUkVVUExP QURfRlcgfAorCQkJCQlNU1ZEWF9SRVNFVF9ORUVEU19JTklUX0ZXOworCWVsc2UKKwkJdmVkX3By aXYtPnZlZF9uZWVkc19yZXNldCA9IDE7CisKKwlkaWZmID0gdmVkX3ByaXYtPnZlZF9jdXJfc2Vx IC0gZGV2X3ByaXYtPmxhc3Rfc2VxOworCWlmIChkaWZmID4gMHgwRkZGRkZGRikKKwkJdmVkX3By aXYtPnZlZF9jdXJfc2VxKys7CisKKwlJUFZSX0RFQlVHX1dBUk4oIlZFRDogRmVuY2UgSUQgbWlz c2luZywgYXNzdW1pbmcgJTA4eFxuIiwKKwkJCXZlZF9wcml2LT52ZWRfY3VyX3NlcSk7CisKKwlp cHZyX2ZlbmNlX3Byb2Nlc3MoZGV2X3ByaXYsIHZlZF9wcml2LT52ZWRfY3VyX3NlcSwgSVBWUl9D TURfRkFJTEVEKTsKKworCS8qIEZsdXNoIHRoZSBjb21tYW5kIHF1ZXVlICovCisJdmVkX2ZsdXNo X2NtZF9xdWV1ZShkZXYpOworCWlmICh2ZWRfcHJpdi0+aG9zdF9iZV9vcHBfZW5hYmxlZCkgewor CQkvKiBnZXQgdGhlIGZyYW1lX2luZm8gc3RydWN0IGZvciBlYyBmcmFtZSAqLworCQlmb3IgKGkg PSAwOyBpIDwgTUFYX0RFQ09ERV9CVUZGRVJTOyBpKyspIHsKKwkJCS8qIGJ5IGRlZmF1bHQgZmVu Y2UgaXMgMCwgc28gdGhlcmUgaXMgcHJvYmxlbSBoZXJlICovCisJCQlpZiAodmVkX3ByaXYtPmZy YW1lX2luZm9baV0uZmVuY2UgPT0gZmVuY2UpIHsKKwkJCQlmYWlsZWRfZnJhbWUgPSAmdmVkX3By aXYtPmZyYW1lX2luZm9baV07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFmYWlsZWRf ZnJhbWUpIHsKKwkJCUlQVlJfRVJST1IoIlZFRDogZGlkbid0IGZpbmQgZnJhbWVfaW5mbyB3aGlj aCBtYXRjaGVkICIKKwkJCQkidGhlIGZlbmNlICVkIGluIHBhbmljIG1lc3NhZ2VcbiIsIGZlbmNl KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZmFpbGVkX2ZyYW1lLT5md19zdGF0dXMg PSAxOyAvKiBzZXQgRVJST1IgZmxhZyAqLworCX0KKwl2ZWRfcHJpdi0+ZGVjb2RpbmdfZXJyID0g MTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludDMyX3QKK3ZlZF9oYW5kbGVfY29tcGxldGVk X21zZyhzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2LAorCQkJCXN0cnVjdCBmd19jb21wbGV0 ZWRfbXNnICpjb21wbGV0ZWRfbXNnKQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZf cHJpdiA9IHZlZF9wcml2LT5kZXZfcHJpdjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2 X3ByaXYtPmRldjsKKwl1aW50MTZfdCBmZW5jZSwgZmxhZ3M7CisJc3RydWN0IGlwdnJfY29udGV4 dCAqaXB2cl9jdHg7CisKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBNU0dJRF9DTURfQ09NUExFVEVE OiIKKwkJIiAtIEZlbmNlOiAlMDh4IC0gZmxhZ3M6ICUwOHggLSB2ZGViY3I6ICUwOHgiCisJCSIg LSBmaXJzdF9tYiA6ICVkIC0gbGFzdF9tYjogJWRcbiIsCisJCWNvbXBsZXRlZF9tc2ctPmhlYWRl ci5iaXRzLm1zZ19mZW5jZSwKKwkJY29tcGxldGVkX21zZy0+ZmxhZ3MsIGNvbXBsZXRlZF9tc2ct PnZkZWJjciwKKwkJY29tcGxldGVkX21zZy0+bWIuYml0cy5zdGFydF9tYiwKKwkJY29tcGxldGVk X21zZy0+bWIuYml0cy5sYXN0X21iKTsKKworCXRyYWNlX3ZlZF9pcnFfY29tcGxldGVkKGNvbXBs ZXRlZF9tc2cpOworCisJZmxhZ3MgPSBjb21wbGV0ZWRfbXNnLT5mbGFnczsKKwlmZW5jZSA9IGNv bXBsZXRlZF9tc2ctPmhlYWRlci5iaXRzLm1zZ19mZW5jZTsKKworCXZlZF9wcml2LT52ZWRfY3Vy X3NlcSA9IGZlbmNlOworCisjaWYgMAorCWlmIChJU19NUkZMRChkZXYpKQorCQl2ZWRfZndfZXJy b3JfZGV0ZWN0ZWQoZGV2LCBmZW5jZSwgZmxhZ3MpOworI2VuZGlmCisKKwlpcHZyX2ZlbmNlX3By b2Nlc3MoZGV2X3ByaXYsIGZlbmNlLCBJUFZSX0NNRF9TVUNDRVNTKTsKKworCWlwdnJfY3R4ID0g aXB2cl9maW5kX2N0eF93aXRoX2ZlbmNlKGRldl9wcml2LCBmZW5jZSk7CisJaWYgKHVubGlrZWx5 KGlwdnJfY3R4ID09IE5VTEwpKSB7CisJCUlQVlJfREVCVUdfR0VORVJBTCgiYWJub3JtYWwgY29t cGxldGUgbXNnLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChmbGFncyAmIEZX X1ZBX1JFTkRFUl9IT1NUX0lOVCkgeworCQkvKiBOb3cgc2VuZCB0aGUgbmV4dCBjb21tYW5kIGZy b20gdGhlIG1zdmR4IGNtZCBxdWV1ZSAqLworCQl2ZWRfY21kX2RlcXVldWVfc2VuZChkZXYpOwor CX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludDMyX3QKK3ZlZF9oYW5kbGVfY29udGlndWl0 eV9tc2coc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiwKKwkJCQlzdHJ1Y3QgZndfY29udGln dWl0eV9tc2cgKmNvbnRpZ3VpdHlfbXNnKQoreworCXN0cnVjdCB2ZWRfZGVjb2RlX3N0YXR1cyAq ZmF1bHRfcmVnaW9uID0gTlVMTDsKKwlzdHJ1Y3QgdmVkX2VjX2NvbnRleHQgKnZlZF9lY19jdHgg PSBOVUxMOworCXVpbnQzMl90IHJlZ19pZHgsIGksIGZlbmNlLCBzdGFydCwgZW5kOworCWludDMy X3QgZm91bmQgPSAwOworCXN0cnVjdCB2ZWRfZGVjb2RlX3N0YXR1cyAqY3VyX2RlY19zdGF0dXM7 CisKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBNU0dJRF9DT05USUdVSVRZX1dBUk5JTkc6Iik7CisJ SVBWUl9ERUJVR19WRUQoIi0gRmVuY2U6ICUwOHggLSBlbmRfbWI6ICUwOHggLSBiZWdpbl9tYjog JTA4eFxuIiwKKwkJCWNvbnRpZ3VpdHlfbXNnLT5oZWFkZXIuYml0cy5tc2dfZmVuY2UsCisJCQlj b250aWd1aXR5X21zZy0+bWIuYml0cy5lbmRfbWJfbnVtLAorCQkJY29udGlndWl0eV9tc2ctPm1i LmJpdHMuYmVnaW5fbWJfbnVtKTsKKworCXRyYWNlX3ZlZF9pcnFfY29udGlndWl0eShjb250aWd1 aXR5X21zZyk7CisJLyogZ2V0IGVycm8gaW5mbyAqLworCWZlbmNlID0gY29udGlndWl0eV9tc2ct PmhlYWRlci5iaXRzLm1zZ19mZW5jZTsKKwlzdGFydCA9IGNvbnRpZ3VpdHlfbXNnLT5tYi5iaXRz LmJlZ2luX21iX251bTsKKwllbmQgPSBjb250aWd1aXR5X21zZy0+bWIuYml0cy5lbmRfbWJfbnVt OworCisJLypnZXQgdGhlIGZyYW1lX2luZm8gc3RydWN0IGZvciBlcnJvciBjb25jZWFsbWVudCBm cmFtZSovCisJZm9yIChpID0gMDsgaSA8IFZFRF9NQVhfRUNfSU5TVEFOQ0U7IGkrKykKKwkJaWYg KHZlZF9wcml2LT52ZWRfZWNfY3R4W2ldLT5mZW5jZSA9PSAoZmVuY2UgJiAofjB4ZikpKSB7CisJ CQl2ZWRfZWNfY3R4ID0gdmVkX3ByaXYtPnZlZF9lY19jdHhbaV07CisJCQlmb3VuZCsrOworCQl9 CisJLyogdmVkX210eF9tZXNzYWdlX2R1bXAoZGV2KTsgKi8KKwlpZiAoIXZlZF9lY19jdHggfHwg ISh2ZWRfZWNfY3R4LT50ZmlsZSkgfHwgZm91bmQgPiAxKSB7CisJCUlQVlJfREVCVUdfVkVEKCJu byBtYXRjaGVkIGN0eDogZmVuY2UgMHgleCwgIgorCQkJImZvdW5kICVkLCBjdHggMHglMDhseFxu IiwKKwkJCWZlbmNlLCBmb3VuZCwgKHVuc2lnbmVkIGxvbmcpdmVkX2VjX2N0eCk7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWlmICh2ZWRfZWNfY3R4LT5jdXJfZnJhbWVfaW5mbykKKwkJY3Vy X2RlY19zdGF0dXMgPSAmdmVkX2VjX2N0eC0+Y3VyX2ZyYW1lX2luZm8tPmRlY29kZV9zdGF0dXM7 CisKKwlmYXVsdF9yZWdpb24gPSAmdmVkX2VjX2N0eC0+ZGVjb2RlX3N0YXR1czsKKwlpZiAoc3Rh cnQgPiBlbmQpCisJCXN0YXJ0ID0gZW5kOworCWlmIChzdGFydCA8IFZFRF9FQ19ST0xMQkFDSykK KwkJc3RhcnQgPSAwOworCWVsc2UKKwkJc3RhcnQgLT0gVkVEX0VDX1JPTExCQUNLOworCisJaWYg KGZhdWx0X3JlZ2lvbi0+bnVtX3JlZ2lvbikgeworCQlyZWdfaWR4ID0gZmF1bHRfcmVnaW9uLT5u dW1fcmVnaW9uIC0gMTsKKwkJaWYgKChzdGFydCA8PSBmYXVsdF9yZWdpb24tPm1iX3JlZ2lvbnNb cmVnX2lkeF0uZW5kKSAmJgorCQkgICAgKGVuZCA+IGZhdWx0X3JlZ2lvbi0+bWJfcmVnaW9uc1ty ZWdfaWR4XS5lbmQpKSB7CisJCQlmYXVsdF9yZWdpb24tPm1iX3JlZ2lvbnNbcmVnX2lkeF0uZW5k ID0gZW5kOworCQkJaWYgKHZlZF9lY19jdHgtPmN1cl9mcmFtZV9pbmZvKSB7CisJCQkJY3VyX2Rl Y19zdGF0dXMtPm1iX3JlZ2lvbnNbcmVnX2lkeF0uZW5kID0gZW5kOworCQkJfQorCQl9CisJCWVs c2UgeworCQkJcmVnX2lkeCA9IGZhdWx0X3JlZ2lvbi0+bnVtX3JlZ2lvbisrOworCQkJaWYgKHVu bGlrZWx5KHJlZ19pZHggPj0gTUFYX1NMSUNFU19QRVJfUElDVFVSRSkpIHsKKwkJCQlJUFZSX0RF QlVHX1ZFRCgidG9vIG1hbnkgZmF1bHQgcmVnaW9ucy5cbiIpOworCQkJCXJldHVybiAtRUlOVkFM OworCQkJfQorCQkJZmF1bHRfcmVnaW9uLT5tYl9yZWdpb25zW3JlZ19pZHhdLnN0YXJ0ID0gc3Rh cnQ7CisJCQlmYXVsdF9yZWdpb24tPm1iX3JlZ2lvbnNbcmVnX2lkeF0uZW5kID0gZW5kOworCQkJ aWYgKHZlZF9lY19jdHgtPmN1cl9mcmFtZV9pbmZvKSB7CisJCQkJY3VyX2RlY19zdGF0dXMtPm51 bV9yZWdpb24gPQorCQkJCQlmYXVsdF9yZWdpb24tPm51bV9yZWdpb247CisJCQkJY3VyX2RlY19z dGF0dXMtPm1iX3JlZ2lvbnNbcmVnX2lkeF0uc3RhcnQgPQorCQkJCQlzdGFydDsKKwkJCQljdXJf ZGVjX3N0YXR1cy0+bWJfcmVnaW9uc1tyZWdfaWR4XS5lbmQgPSBlbmQ7CisJCQl9CisJCX0KKwl9 IGVsc2UgeworCQlmYXVsdF9yZWdpb24tPm51bV9yZWdpb24rKzsKKwkJZmF1bHRfcmVnaW9uLT5t Yl9yZWdpb25zWzBdLnN0YXJ0ID0gc3RhcnQ7CisJCWZhdWx0X3JlZ2lvbi0+bWJfcmVnaW9uc1sw XS5lbmQgPSBlbmQ7CisJCWlmICh2ZWRfZWNfY3R4LT5jdXJfZnJhbWVfaW5mbykgeworCQkJY3Vy X2RlY19zdGF0dXMtPm51bV9yZWdpb24gPSBmYXVsdF9yZWdpb24tPm51bV9yZWdpb247CisJCQlj dXJfZGVjX3N0YXR1cy0+bWJfcmVnaW9uc1swXS5zdGFydCA9IHN0YXJ0OworCQkJY3VyX2RlY19z dGF0dXMtPm1iX3JlZ2lvbnNbMF0uZW5kID0gZW5kOworCQl9CisJfQorCXJldHVybiAwOworfQor CitzdGF0aWMgaW50MzJfdAordmVkX2hhbmRsZV9kZWJsb2NrX3JlcXVpcmVkX21zZyhzdHJ1Y3Qg dmVkX3ByaXZhdGUgKnZlZF9wcml2LAorCQkJc3RydWN0IGZ3X2RlYmxvY2tfcmVxdWlyZWRfbXNn ICpkZWJsb2NrX3JlcXVpcmVkX21zZykKK3sKKwl1aW50MzJfdCBpOworCWludDMyX3QgZm91bmQg PSAwOworCXN0cnVjdCB2ZWRfZWNfY29udGV4dCAqdmVkX2VjX2N0eCA9IE5VTEw7CisJc3RydWN0 IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gdmVkX3ByaXYtPmRldl9wcml2OworCXVpbnQx Nl90IGZlbmNlID0gZGVibG9ja19yZXF1aXJlZF9tc2ctPmhlYWRlci5iaXRzLm1zZ19mZW5jZTsK KwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBNVFhfTVNHSURfREVCTE9DS19SRVFVSVJFRCBGZW5jZT0l MDh4LlxuIiwgZmVuY2UpOworCUlQVlJfREVCVUdfVkVEKCJHZXQgZGVibG9jayByZXF1aXJlZCBt c2cgZm9yIGVjLlxuIik7CisJZm9yIChpID0gMDsgaSA8IFZFRF9NQVhfRUNfSU5TVEFOQ0U7IGkr KykKKwkJaWYgKHZlZF9wcml2LT52ZWRfZWNfY3R4W2ldLT5mZW5jZSA9PSAoZmVuY2UgJiAofjB4 ZikpKSB7CisJCQl2ZWRfZWNfY3R4ID0gdmVkX3ByaXYtPnZlZF9lY19jdHhbaV07CisJCQlmb3Vu ZCsrOworCQl9CisKKwl0cmFjZV92ZWRfaXJxX2RlYmxvY2tfcmVxdWlyZWQoZGVibG9ja19yZXF1 aXJlZF9tc2cpOworCisJLyogaWYgZm91bmQgPiAxLCBmZW5jZSB3cmFwcGluZyBoYXBwZW5zICov CisJaWYgKCF2ZWRfZWNfY3R4IHx8ICEodmVkX2VjX2N0eC0+dGZpbGUpIHx8IGZvdW5kID4gMSkg eworCQlJUFZSX0RFQlVHX1ZFRCgibm8gbWF0Y2hlZCBjdHg6IGZlbmNlIDB4JXgsICIKKwkJCSJm b3VuZCAlZCwgY3R4IDB4JTA4bHhcbiIsCisJCQlmZW5jZSwgZm91bmQsICh1bnNpZ25lZCBsb25n KXZlZF9lY19jdHgpOworCQlWRURfUkVHX1dSSVRFMzIoMCwgTVNWRFhfQ01EU19FTkRfU0xJQ0Vf UElDVFVSRV9PRkZTRVQpOworCQlWRURfUkVHX1dSSVRFMzIoMSwgTVNWRFhfQ01EU19FTkRfU0xJ Q0VfUElDVFVSRV9PRkZTRVQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2ZWRfZWNfY3R4 LT5jdXJfZnJhbWVfaW5mby0+Zndfc3RhdHVzID0gMTsKKwl2ZWRfcHJpdi0+Y3VyX21zdmR4X2Vj X2N0eCA9IHZlZF9lY19jdHg7CisKKwkvKmRvIGVycm9yIGNvbmNlYWxtZW50IHdpdGggaHcqLwor CXNjaGVkdWxlX3dvcmsoJnZlZF9wcml2LT5lY193b3JrKTsKKwlyZXR1cm4gMDsKK30KKworLyoK KyAqIE1TVkRYIE1UWCBpbnRlcnJ1cHQKKyAqLworc3RhdGljIHZvaWQgdmVkX210eF9pbnRlcnJ1 cHQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0YXRpYyB1aW50MzJfdCBidWZbMTI4XTsg LyogbWVzc2FnZSBidWZmZXIgKi8KKwl1aW50MzJfdCByaWR4LCB3aWR4LCBidWZfc2l6ZSwgYnVm X29mZnNldDsKKwl1aW50MzJfdCBudW0sIG9mczsgLyogbWVzc2FnZSBudW0gYW5kIG9mZnNldCAq LworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7 CisJdW5pb24gbXNnX2hlYWRlciAqaGVhZGVyOworCWludDMyX3QgY21kX2NvbXBsZXRlID0gMDsK KwlpbnQgcmV0OworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IEdvdCBhIFZFRCBNVFggaW50ZXJydXB0 LlxuIik7CisKKwkvKiB3ZSBuZWVkIGNsb2NrcyBlbmFibGVkIGJlZm9yZSB3ZSB0b3VjaCBWRUMg bG9jYWwgcmFtLAorCSAqIGJ1dCBmdyB3aWxsIHRha2UgY2FyZSBvZiB0aGUgY2xvY2sgYWZ0ZXIg ZncgaXMgbG9hZGVkCisJICovCisKK2xvb3A6IC8qIGp1c3QgZm9yIGNvZGluZyBzdHlsZSBjaGVj ayAqLworCXJpZHggPSBWRURfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19UT19IT1NUX1JEX0lOREVY KTsKKwl3aWR4ID0gVkVEX1JFR19SRUFEMzIoTVNWRFhfQ09NTVNfVE9fSE9TVF9XUlRfSU5ERVgp OworCisJLyogR2V0IG91dCBvZiBoZXJlIGlmIG5vdGhpbmcgKi8KKwlpZiAocmlkeCA9PSB3aWR4 KQorCQlnb3RvIGRvbmU7CisKKwlidWZfc2l6ZSA9IFZFRF9SRUdfUkVBRDMyKE1TVkRYX0NPTU1T X1RPX0hPU1RfQlVGX1NJWkUpICYKKwkJKCgxIDw8IDE2KSAtIDEpOworCS8qMHgyMDAwIGlzIFZF QyBMb2NhbCBSYW0gb2Zmc2V0Ki8KKwlidWZfb2Zmc2V0ID0gKFZFRF9SRUdfUkVBRDMyKE1TVkRY X0NPTU1TX1RPX0hPU1RfQlVGX1NJWkUpID4+IDE2KQorCQkrIDB4MjAwMDsKKworCW9mcyA9IDA7 CisJYnVmW29mc10gPSBWRURfUkVHX1JFQUQzMihidWZfb2Zmc2V0ICsgKHJpZHggPDwgMikpOwor CWhlYWRlciA9ICh1bmlvbiBtc2dfaGVhZGVyICopYnVmOworCisJLyogcm91bmQgdG8gbmVhcmVz dCB3b3JkICovCisJbnVtID0gKGhlYWRlci0+Yml0cy5tc2dfc2l6ZSArIDMpIC8gNDsKKworCS8q IEFTU0VSVChudW0gPD0gc2l6ZW9mKGJ1ZikgLyBzaXplb2YodWludDMyX3QpKTsgKi8KKworCWlm ICgrK3JpZHggPj0gYnVmX3NpemUpCisJCXJpZHggPSAwOworCisJZm9yIChvZnMrKzsgb2ZzIDwg bnVtOyBvZnMrKykgeworCQlidWZbb2ZzXSA9IFZFRF9SRUdfUkVBRDMyKGJ1Zl9vZmZzZXQgKyAo cmlkeCA8PCAyKSk7CisKKwkJaWYgKCsrcmlkeCA+PSBidWZfc2l6ZSkKKwkJCXJpZHggPSAwOwor CX0KKworCS8qIFVwZGF0ZSB0aGUgUmVhZCBpbmRleCAqLworCVZFRF9SRUdfV1JJVEUzMihyaWR4 LCBNU1ZEWF9DT01NU19UT19IT1NUX1JEX0lOREVYKTsKKworCWlmICh2ZWRfcHJpdi0+dmVkX25l ZWRzX3Jlc2V0KQorCQlnb3RvIGxvb3A7CisKKwlzd2l0Y2ggKGhlYWRlci0+Yml0cy5tc2dfdHlw ZSkgeworCWNhc2UgTVRYX01TR0lEX0hXX1BBTklDOiB7CisJCXN0cnVjdCBmd19wYW5pY19tc2cg KnBhbmljX21zZyA9IChzdHJ1Y3QgZndfcGFuaWNfbXNnICopYnVmOworCQljbWRfY29tcGxldGUg PSAxOworCQl2ZWRfaGFuZGxlX3BhbmljX21zZyh2ZWRfcHJpdiwgcGFuaWNfbXNnKTsKKwkJZ290 byBkb25lOworCX0KKworCWNhc2UgTVRYX01TR0lEX0NPTVBMRVRFRDogeworCQlzdHJ1Y3QgZndf Y29tcGxldGVkX21zZyAqY29tcGxldGVkX21zZyA9CisJCQkJCShzdHJ1Y3QgZndfY29tcGxldGVk X21zZyAqKWJ1ZjsKKwkJY21kX2NvbXBsZXRlID0gMTsKKwkJaWYgKHZlZF9oYW5kbGVfY29tcGxl dGVkX21zZyh2ZWRfcHJpdiwgY29tcGxldGVkX21zZykpCisJCQljbWRfY29tcGxldGUgPSAwOwor CQlicmVhazsKKwl9CisKKwljYXNlIE1UWF9NU0dJRF9DT05USUdVSVRZX1dBUk5JTkc6IHsKKwkJ c3RydWN0IGZ3X2NvbnRpZ3VpdHlfbXNnICpjb250aWd1aXR5X21zZyA9CisJCQkJCShzdHJ1Y3Qg ZndfY29udGlndWl0eV9tc2cgKilidWY7CisJCXZlZF9oYW5kbGVfY29udGlndWl0eV9tc2codmVk X3ByaXYsIGNvbnRpZ3VpdHlfbXNnKTsKKwkJYnJlYWs7CisKKwl9CisKKwljYXNlIE1UWF9NU0dJ RF9ERUJMT0NLX1JFUVVJUkVEOiB7CisJCXN0cnVjdCBmd19kZWJsb2NrX3JlcXVpcmVkX21zZyAq ZGVibG9ja19yZXF1aXJlZF9tc2cgPQorCQkJCQkoc3RydWN0IGZ3X2RlYmxvY2tfcmVxdWlyZWRf bXNnICopYnVmOworCQl2ZWRfaGFuZGxlX2RlYmxvY2tfcmVxdWlyZWRfbXNnKHZlZF9wcml2LCBk ZWJsb2NrX3JlcXVpcmVkX21zZyk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlJUFZSX0VS Uk9SKCJWRUQ6IHVua25vd24gbWVzc2FnZSBmcm9tIE1UWCwgSUQ6MHglMDh4LlxuIiwKKwkJCWhl YWRlci0+Yml0cy5tc2dfdHlwZSk7CisJCWdvdG8gZG9uZTsKKwl9CisKK2RvbmU6CisJSVBWUl9E RUJVR19WRUQoIlZFRCBJbnRlcnJ1cHQ6IGZpbmlzaCBwcm9jZXNzIGEgbWVzc2FnZS5cbiIpOwor CWlmIChyaWR4ICE9IHdpZHgpIHsKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogdGhlcmUgYXJlIG1v cmUgbWVzc2FnZSB0byBiZSByZWFkLlxuIik7CisJCWdvdG8gbG9vcDsKKwl9CisKKwlhdG9taWNf ZGVjKCZkZXZfcHJpdi0+dmVkX3Bvd2VyX3VzYWdlKTsKKwlyZXQgPSBwbV9ydW50aW1lX3B1dCgm ZGV2LT5wbGF0Zm9ybWRldi0+ZGV2KTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJSVBW Ul9FUlJPUigiRXJyb3IgcHV0IFZFRCBwb3dlcjogJWRcbiIsIHJldCk7CisJfQorCUlQVlJfREVC VUdfUE0oIlZFRCBwb3dlciBwdXQsIHVzYWdlIGJlY2FtZSAlZFxuIiwKKwkJYXRvbWljX3JlYWQo JmRldi0+cGxhdGZvcm1kZXYtPmRldi5wb3dlci51c2FnZV9jb3VudCkpOworCisJbWIoKTsJLyog VEJEIGNoZWNrIHRoaXMuLi4gKi8KK30KKworLyoKKyAqIE1TVkRYIGludGVycnVwdC4KKyAqLwor aW50MzJfdCB2ZWRfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXY7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRf cHJpdjsKKwl1aW50MzJfdCBtc3ZkeF9zdGF0OworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCUlQ VlJfRVJST1IoIlZFRDogaW52YWxpZCBkZXYuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJdmVkX3ByaXYgPSBkZXZfcHJpdi0+ dmVkX3ByaXZhdGU7CisJbXN2ZHhfc3RhdCA9IFZFRF9SRUdfUkVBRDMyKE1TVkRYX0lOVEVSUlVQ VF9TVEFUVVNfT0ZGU0VUKTsKKworCS8qIGRyaXZlciBvbmx5IG5lZWRzIHRvIGhhbmRsZSBtdHgg aXJxCisJICogRm9yIE1NVSBmYXVsdCBpcnEsIHRoZXJlJ3MgYWx3YXlzIGEgSFcgUEFOSUMgZ2Vu ZXJhdGVkCisJICogaWYgSFcvRlcgaXMgdG90YWxseSBoYW5nLCB0aGUgbG9ja3VwIGZ1bmN0aW9u IHdpbGwgaGFuZGxlCisJICogdGhlIHJlc2V0aW5nCisJICovCisJaWYgKG1zdmR4X3N0YXQgJiBN U1ZEWF9JTlRFUlJVUFRfU1RBVFVTX01NVV9GQVVMVF9JUlFfTUFTSykgeworCQkvKklkZWFsbHkg d2Ugc2hvdWxkIHdlIHNob3VsZCBuZXZlciBnZXQgdG8gdGhpcyAqLworCQlJUFZSX0RFQlVHX0lS USgiVkVEOiBNTVUgRmF1bHQ6MHgleFxuIiwgbXN2ZHhfc3RhdCk7CisKKwkJLyogUGF1c2UgTU1V ICovCisJCVZFRF9SRUdfV1JJVEUzMihNU1ZEWF9NTVVfQ09OVFJPTDBfTU1VX1BBVVNFX01BU0ss CisJCQkgICAgIE1TVkRYX01NVV9DT05UUk9MMF9PRkZTRVQpOworCQl3bWIoKTsKKworCQkvKiBD bGVhciB0aGlzIGludGVydXB0IGJpdCBvbmx5ICovCisJCVZFRF9SRUdfV1JJVEUzMihNU1ZEWF9J TlRFUlJVUFRfU1RBVFVTX01NVV9GQVVMVF9JUlFfTUFTSywKKwkJCSAgICAgTVNWRFhfSU5URVJS VVBUX0NMRUFSX09GRlNFVCk7CisJCVZFRF9SRUdfUkVBRDMyKE1TVkRYX0lOVEVSUlVQVF9DTEVB Ul9PRkZTRVQpOworCQlybWIoKTsKKworCQl2ZWRfcHJpdi0+dmVkX25lZWRzX3Jlc2V0ID0gMTsK Kwl9IGVsc2UgaWYgKG1zdmR4X3N0YXQgJiBNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX01UWF9JUlFf TUFTSykgeworCQlJUFZSX0RFQlVHX0lSUSgiVkVEOiBtc3ZkeF9zdGF0OiAweCV4KE1UWClcbiIs IG1zdmR4X3N0YXQpOworCisJCS8qIENsZWFyIGFsbCBpbnRlcnVwdCBiaXRzICovCisJCWlmICh2 ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1bml0KQorCQkJVkVEX1JFR19XUklURTMyKE1TVkRYX0lO VEVSUlVQVF9TVEFUVVNfTVRYX0lSUV9NQVNLLAorCQkJCSAgICAgTVNWRFhfSU5URVJSVVBUX0NM RUFSX09GRlNFVCk7CisJCWVsc2UKKwkJCVZFRF9SRUdfV1JJVEUzMigweGZmZmYsIE1TVkRYX0lO VEVSUlVQVF9DTEVBUl9PRkZTRVQpOworCisJCVZFRF9SRUdfUkVBRDMyKE1TVkRYX0lOVEVSUlVQ VF9DTEVBUl9PRkZTRVQpOworCQlybWIoKTsKKworCQl2ZWRfbXR4X2ludGVycnVwdChkZXYpOwor CX0KKworCXJldHVybiAwOworfQorCitpbnQzMl90IHZlZF9jaGVja19pZGxlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2OworCXN0 cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXY7CisJdWludDMyX3QgbG9vcCwgcmV0OworCisJZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWlmICghZGV2X3ByaXYpCisJCXJldHVybiAtRU5P REVWOworCisJdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisJaWYgKCF2ZWRfcHJp dikKKwkJcmV0dXJuIDA7CisKKwlpZiAodmVkX3ByaXYtPmZ3X2xvYWRlZF9ieV9wdW5pdCAmJiB2 ZWRfcHJpdi0+cmVuZGVjX2luaXRpYWxpemVkID09IDApCisJCXJldHVybiAwOworCisJaWYgKCF2 ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1bml0ICYmIHZlZF9wcml2LT52ZWRfZndfbG9hZGVkID09 IDApCisJCXJldHVybiAwOworCisJaWYgKHZlZF9wcml2LT52ZWRfYnVzeSkgeworCQlJUFZSX0RF QlVHX1BNKCJWRUQ6IHZlZF9idXN5IHdhcyBzZXQsIHJldHVybiBidXN5LlxuIik7CisJCXJldHVy biAtRUJVU1k7CisJfQorCisJaWYgKHZlZF9wcml2LT5md19sb2FkZWRfYnlfcHVuaXQpIHsKKwkJ aWYgKCEoVkVEX1JFR19SRUFEMzIoTVNWRFhfQ09NTVNfRldfU1RBVFVTKSAmCisJCQkJCU1TVkRY X0ZXX1NUQVRVU19IV19JRExFKSkgeworCQkJSVBWUl9ERUJVR19QTSgiTVNWRFhfQ09NTVNfU0lH TkFUVVJFIHJlZyBpcyAweCV4LFxuIgorCQkJCSJNU1ZEWF9DT01NU19GV19TVEFUVVMgcmVnIGlz IDB4JXgsXG4iCisJCQkJImluZGljYXRlIGh3IGlzIGJ1c3kuXG4iLAorCQkJCVZFRF9SRUdfUkVB RDMyKE1TVkRYX0NPTU1TX1NJR05BVFVSRSksCisJCQkJVkVEX1JFR19SRUFEMzIoTVNWRFhfQ09N TVNfRldfU1RBVFVTKSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJLyogb24gc29t ZSBjb3JlcyBiZWxvdyA1MDUwMiwgdGhlcmUgaXMgb25lIGluc3RhbmNlIHRoYXQKKwkgKiByZWFk IHJlcXVlc3RzIG1heSBub3QgZ28gdG8gemVybyBpcyBpbiB0aGUgY2FzZSBvZiBhIHBhZ2UgZmF1 bHQsCisJICogY2hlY2sgY29yZSByZXZpc2lvbiBieSByZWcgTVNWRFhfQ09SRV9SRVYsIDM4NSBj b3JlIGlzIDB4MjAwMDEKKwkgKiBjaGVjayBpZiBtbXUgcGFnZSBmYXVsdCBoYXBwZW5kIGJ5IHJl ZyBNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTLAorCSAqIGNoZWNrIHdhcyBpdCBhIHBhZ2UgdGFibGUg cmF0aGVyIHRoYW4gYSBwcm90ZWN0aW9uIGZhdWx0CisJICogYnkgcmVnIE1TVkRYX01NVV9TVEFU VVMsIGZvciBzdWNoIGNhc2UsCisJICogbmVlZCBjYWxsIHZlZF9jb3JlX3Jlc2V0IGFzIHRoZSB3 b3JrIGFyb3VuZCAqLworCWlmICgoVkVEX1JFR19SRUFEMzIoTVNWRFhfQ09SRV9SRVZfT0ZGU0VU KSA8IDB4MDAwNTA1MDIpICYmCisJCShWRURfUkVHX1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRfU1RB VFVTX09GRlNFVCkKKwkJCSYgTVNWRFhfSU5URVJSVVBUX1NUQVRVU19NTVVfRkFVTFRfSVJRX01B U0spICYmCisJCShWRURfUkVHX1JFQUQzMihNU1ZEWF9NTVVfU1RBVFVTX09GRlNFVCkgJiAxKSkg eworCQlJUFZSX0RFQlVHX1dBUk4oIm1tdSBwYWdlIGZhdWx0LCByZWNvdmVyIGJ5IGNvcmVfcmVz ZXQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogY2hlY2sgTVNWRFhfTU1VX01FTV9SRVEg dG8gY29uZmlybSB0aGVyZSdzIG5vIG1lbW9yeSByZXF1ZXN0cyAqLworCWZvciAobG9vcCA9IDA7 IGxvb3AgPCAxMDsgbG9vcCsrKQorCQlyZXQgPSB2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3By aXYsCisJCQkJCU1TVkRYX01NVV9NRU1fUkVRX09GRlNFVCwKKwkJCQkJMCwgMHhmZiwgMTAwLCAx KTsKKwlpZiAocmV0KSB7CisJCUlQVlJfREVCVUdfV0FSTigiTVNWRFg6IE1TVkRYX01NVV9NRU1f UkVRIHJlZyBpcyAweCV4LFxuIgorCQkJCSJpbmRpY2F0ZSBtZW0gYnVzeSwgcHJldmVudCBwb3dl ciBvZmYgdmVkLCIKKwkJCQkiTVNWRFhfQ09NTVNfRldfU1RBVFVTIHJlZyBpcyAweCV4LCIKKwkJ CQkiTVNWRFhfQ09NTVNfRVJST1JfVFJJRyByZWcgaXMgMHgleCwiLAorCQkJCVZFRF9SRUdfUkVB RDMyKE1TVkRYX01NVV9NRU1fUkVRX09GRlNFVCksCisJCQkJVkVEX1JFR19SRUFEMzIoTVNWRFhf Q09NTVNfRldfU1RBVFVTKSwKKwkJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19FUlJPUl9U UklHKSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCS8qCisJCWlmICh2ZWRfcHJpdi0+dmVkX2h3 X2J1c3kpIHsKKwkJCUlQVlJfREVCVUdfUE0oIlZFRDogJXMsIEhXIGlzIGJ1c3lcbiIsIF9fZnVu Y19fKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkqLworCXJldHVybiAwOworfQorCit2b2lk IHZlZF9jaGVja19yZXNldF9mdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBk cm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHZl ZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsKKwl1bnNpZ25lZCBs b25nIGlycV9mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ss IGlycV9mbGFncyk7CisKKwkvKiBoYW5kbGluZyBmdyB1cGxvYWQgaGVyZSBpZiByZXF1aXJlZCAq LworCS8qIHBvd2VyIG9mZiBmaXJzdCwgdGhlbiBod19iZWdpbiB3aWxsIHBvd2VyIHVwL3VwbG9h ZCBGVyBjb3JyZWN0bHkgKi8KKwlpZiAodmVkX3ByaXYtPnZlZF9uZWVkc19yZXNldCAmIE1TVkRY X1JFU0VUX05FRURTX1JFVVBMT0FEX0ZXKSB7CisJCXZlZF9wcml2LT52ZWRfbmVlZHNfcmVzZXQg Jj0gfk1TVkRYX1JFU0VUX05FRURTX1JFVVBMT0FEX0ZXOworCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJCUlQVlJfREVCVUdfVkVEKCJW RUQ6IGZvcmNlIHBvd2VyIG9mZiBWRUQgZHVlIHRvIGRlY29kZSBlcnJcbiIpOworCQkvKm9zcG1f YXBtX3Bvd2VyX2Rvd25fdmVkKGRldiwgMSk7Ki8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnZlZF9w cml2LT52ZWRfbG9jaywgaXJxX2ZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm dmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2lwdnIvdmVkX2NtZC5oIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2NtZC5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYjUxMzgKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfY21kLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgorICogdmVkX2NtZC5oOiBWRUQgaGVhZGVyIGZpbGUgdG8gc3VwcG9y dCBjb21tYW5kIGJ1ZmZlciBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRl bCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIEltYWdp bmF0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLCBVSworICogQ29weXJpZ2h0IChjKSAyMDAzIFR1 bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAqIEFsbCBSaWdodHMg UmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1 bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICog bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAor ICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29t PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVkVEX0NNRF9IXworI2RlZmlu ZSBfVkVEX0NNRF9IXworCisjaW5jbHVkZSAiaXB2cl9kcnYuaCIKKyNpbmNsdWRlICJpcHZyX2Ry bS5oIgorI2luY2x1ZGUgImlwdnJfZ2VtLmgiCisjaW5jbHVkZSAidmVkX3JlZy5oIgorI2luY2x1 ZGUgInZlZF9lYy5oIgorI2luY2x1ZGUgInZlZF9wbS5oIgorI2luY2x1ZGUgImlwdnJfZmVuY2Uu aCIKKyNpbmNsdWRlICJpcHZyX2V4ZWMuaCIKKworZXh0ZXJuIGludDMyX3QgZHJtX2lwdnJfdGls aW5nOworCisvKiBIT1NUX0JFX09QUCBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgSE9TVF9CRV9PUFBf UEFSQU1TIHsKKwl1aW50MzJfdCBoYW5kbGU7CS8qIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAq IG9mIFJFR0lPICovCisJdWludDMyX3QgYnVmZmVyX3N0cmlkZTsKKwl1aW50MzJfdCBidWZmZXJf c2l6ZTsKKwl1aW50MzJfdCBwaWN0dXJlX3dpZHRoX21iOworCXVpbnQzMl90IHNpemVfbWI7Cit9 OworCitzdHJ1Y3QgdmVkX2NtZF9xdWV1ZSB7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCXZv aWQgKmNtZDsKKwl1aW50MzJfdCBjbWRfc2l6ZTsKKwl1aW50MTZfdCBjbWRfc2VxOworCXVpbnQz Ml90IGZlbmNlX2ZsYWc7CisJdWludDhfdCB0aWxpbmdfc2NoZW1lOworCXVpbnQ4X3QgdGlsaW5n X3N0cmlkZTsKKwl1aW50MzJfdCBob3N0X2JlX29wcF9lbmFibGVkOworCXVpbnQzMl90IGRlYmxv Y2tfY21kX29mZnNldDsKKwlzdHJ1Y3QgZHJtX2ZpbGUgKnRmaWxlOworCXN0cnVjdCBpcHZyX2Nv bnRleHQgKmlwdnJfY3R4OworCWludDMyX3QgZnJhbWVfYm91bmRhcnk7Cit9OworCisjZGVmaW5l IFZFRF9QTVNUQVRFX1BPV0VSVVAgICAgICAgICAgICAgMAorI2RlZmluZSBWRURfUE1TVEFURV9D TE9DS0dBVEVEICAgICAgICAgIDEKKyNkZWZpbmUgVkVEX1BNU1RBVEVfUE9XRVJET1dOICAgICAg ICAgICAyCisKKyNkZWZpbmUgVkVEX05FV19QTVNUQVRFKGRybV9kZXYsIHZlZF9wcml2LCBuZXdf c3RhdGUpCQkJXAorZG8gewkJCQkJCQkJCVwKKwl2ZWRfcHJpdi0+dmVkX3Btc3RhdGUgPSBuZXdf c3RhdGU7CQkJCVwKKwlpZiAobmV3X3N0YXRlID09IFZFRF9QTVNUQVRFX1BPV0VSRE9XTikJCQkJ XAorCQl2ZWRfcHJpdi0+cG1fZ2F0aW5nX2NvdW50Kys7CQkJCVwKKwlzeXNmc19ub3RpZnlfZGly ZW50KHZlZF9wcml2LT5zeXNmc19wbXN0YXRlKTsJCQlcCisJSVBWUl9ERUJVR19QTSgiVkVEOiAl cywgcG93ZXIgZ2F0aW5nIGNvdW50IDB4JTA4eFxuIiwJCVwKKwkJKG5ld19zdGF0ZSA9PSBWRURf UE1TVEFURV9QT1dFUlVQKSA/ICJwb3dlcnVwIgkJXAorCQk6ICgobmV3X3N0YXRlID09IFZFRF9Q TVNUQVRFX1BPV0VSRE9XTikgPyAicG93ZXJkb3duIglcCisJCQk6ICJjbG9ja2dhdGVkIiksIHZl ZF9wcml2LT5wbV9nYXRpbmdfY291bnQpOwlcCit9IHdoaWxlICgwKQorCitpbnQzMl90IHZlZF9p cnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworaW50MzJfdCB2ZWRfbXR4X3Nl bmQoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LCBjb25zdCB2b2lkICptc2cpOwor CitpbnQzMl90IHZlZF9jaGVja19pZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCit2b2lk IHZlZF9jaGVja19yZXNldF9mdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKwordm9pZCB2ZWRf Zmx1c2hfY21kX3F1ZXVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCitpbnQzMl90IHZlZF9j bWRidWZfdmlkZW8oc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJc3RydWN0IGRybV9p cHZyX2dlbV9vYmplY3QgKmNtZF9idWZmZXIsCisJCQkJdWludDMyX3QgY21kYnVmX3NpemUsCisJ CQkJc3RydWN0IGlwdnJfY29udGV4dCAqaXB2cl9jdHgpOworCitpbnQzMl90IHZlZF9zdWJtaXRf dmlkZW9fY21kYnVmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkcm1faXB2 cl9nZW1fb2JqZWN0ICpjbWRfYnVmZmVyLAorCQkJCQl1aW50MzJfdCBjbWRfc2l6ZSwKKwkJCQkJ c3RydWN0IGlwdnJfY29udGV4dCAqaXB2cl9jdHgsCisJCQkJCXVpbnQzMl90IGZlbmNlX2ZsYWcp OworCitpbnQzMl90IHZlZF9jbWRfZGVxdWV1ZV9zZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9lYy5jIGIv ZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2VjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMmFhNTJjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZy L3ZlZF9lYy5jCkBAIC0wLDAgKzEsNTg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHZlZF9l Yy5jOiBWRUQgZXJyb3IgY29uY2VhbG1lbnQgc3VwcG9ydCB3aGVuIGRlY29kaW5nIGVycm9yIGhh cHBlbmVkCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxs c2Jvcm8sIE9SLCBVU0EKKyAqIENvcHlyaWdodCAoYykgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVz IExpbWl0ZWQsIFVLCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkg b3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZl aSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIExpIFplbmcgPGxpLnplbmdAaW50 ZWwuY29tPgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInZlZF9lYy5oIgor I2luY2x1ZGUgInZlZF9jbWQuaCIKKyNpbmNsdWRlICJ2ZWRfbXNnLmgiCisjaW5jbHVkZSAidmVk X3JlZy5oIgorI2luY2x1ZGUgInZlZF9mdy5oIgorI2luY2x1ZGUgInZlZF9wbS5oIgorI2luY2x1 ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2RlZmluZSBNQVhfU0laRV9JTl9NQgkJKDQwOTYg LyAxNikKKworc3RhdGljIGlubGluZSBpbnQzMl90Cit2ZWRfY21kX3BvcnRfd3JpdGUoc3RydWN0 IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LAorCQl1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90 IHZhbHVlLCB1aW50MzJfdCAqY21kX3NwYWNlKQoreworCXVpbnQzMl90IG1heF9hdHRlbXB0cyA9 IDB4ZmY7CisJdWludDMyX3QgYXR0ZW1wdHMgPSAwOworCisJbWF4X2F0dGVtcHRzID0gMHhmZjsK Kwl3aGlsZSAoKmNtZF9zcGFjZSA9PSAwKSB7CisJCSpjbWRfc3BhY2UgPSBWRURfUkVHX1JFQUQz MigKKwkJCU1TVkRYX0NPUkVfQ1JfTVNWRFhfQ09NTUFORF9TUEFDRV9PRkZTRVQgKworCQkJTVNW RFhfQ09SRV9CQVNFKTsKKwkJaWYgKCpjbWRfc3BhY2UpCisJCQlicmVhazsKKwkJSVBWUl9VREVM QVkoMik7CisJCWF0dGVtcHRzKys7CisJCWlmIChhdHRlbXB0cyA+IG1heF9hdHRlbXB0cykgewor CQkJSVBWUl9ERUJVR19XQVJOKCJWRUQ6IHBvbGwgY21kIHNwYWNlIHRpbWVvdXQuXG4iKTsKKwkJ CXJldHVybiAtMTsKKwkJfQorCX0KKworCVZFRF9SRUdfV1JJVEUzMih2YWx1ZSwgb2Zmc2V0ICsg TVNWRFhfQ01EU19CQVNFKTsKKwkoKmNtZF9zcGFjZSktLTsKKwkvKgorCSAqSVBWUl9ERUJVR19X QVJOKCJWRUQ6IHBvbGwgY21kIHNwYWNlIGF0dGVtcHRzICVkXG4iLCBhdHRlbXB0cyk7CisJKi8K KwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBWRURfQ01EUE9SVF9XUklURShfZGV2X3ByaXZfLCBf b2Zmc2V0XywgX2NtZF8sIF9jbWRfc3BhY2VfKQlcCisJZG8gewkJCQkJCQkJXAorCQlyZXQgPSB2 ZWRfY21kX3BvcnRfd3JpdGUoX2Rldl9wcml2XywJCQlcCisJCQkJIF9vZmZzZXRfLCBfY21kXywg Jl9jbWRfc3BhY2VfKTsJXAorCQlpZiAocmV0KSB7CQkJCQkJXAorCQkJSVBWUl9ERUJVR19XQVJO KCJWRUQ6IHdyaXRlIGNtZCBmYWlsLCBhYm9ydFxuIik7XAorCQkJZ290byBlY19kb25lOwkJCQkJ XAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSBWRURfQ01EUE9SVF9XUklU RV9GQVNUKF9kZXZfcHJpdl8sIF9vZmZzZXRfLCBfY21kXywgX2NtZF9zcGFjZV8pXAorCXZlZF9j bWRfcG9ydF93cml0ZShfZGV2X3ByaXZfLCBfb2Zmc2V0XywgX2NtZF8sICZfY21kX3NwYWNlXyk7 CVwKKwordm9pZCB2ZWRfZG9fY29uY2VhbG1lbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQor eworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPQorCQkJY29udGFpbmVyX29mKHdvcmss IHN0cnVjdCB2ZWRfcHJpdmF0ZSwgZWNfd29yayk7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUg KmRldl9wcml2ID0gTlVMTDsKKwlzdHJ1Y3QgdmVkX2VjX2NvbnRleHQgKnZlZF9lY19jdHggPSB2 ZWRfcHJpdi0+Y3VyX21zdmR4X2VjX2N0eDsKKwlzdHJ1Y3QgdmVkX2RlY29kZV9zdGF0dXMgKmZh dWx0X3JlZ2lvbiA9IE5VTEw7CisJc3RydWN0IGZ3X2RlYmxvY2tfbXNnICpkZWJsb2NrX21zZyA9 CisJCShzdHJ1Y3QgZndfZGVibG9ja19tc2cgKikodmVkX2VjX2N0eC0+dW5mZW5jZWRfY21kICsK KwkJCXZlZF9lY19jdHgtPmRlYmxvY2tfY21kX29mZnNldCk7CisJdWludDMyX3Qgd2lkdGhfaW5f bWIsIGhlaWdodF9pbl9tYiwgY21kOworCWludDMyX3QgY29uY2VhbF9hYm92ZV9yb3cgPSAwLCBs b29wLCBtYl9sb29wOworCXVpbnQzMl90IGNtZF9zcGFjZSA9IDA7CisJaW50MzJfdCByZXQgPSAw OworCWludDMyX3QgcG1fcmV0ID0gMDsKKworCXBtX3JldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMo JmRldl9wcml2LT5kZXYtPnBsYXRmb3JtZGV2LT5kZXYpOworCWlmICh1bmxpa2VseShwbV9yZXQg PCAwKSkgeworCQlJUFZSX0VSUk9SKCJFcnJvciBnZXQgVkVEIHBvd2VyOiAlZFxuIiwgcG1fcmV0 KTsKKwkJcmV0dXJuOworCX0KKworCWRldl9wcml2ID0gdmVkX3ByaXYtPmRldl9wcml2OworCWZh dWx0X3JlZ2lvbiA9ICZ2ZWRfZWNfY3R4LT5kZWNvZGVfc3RhdHVzOworCisJLyogQ29uY2VhbG1l bnQgc2hvdWxkIGJlIGRvbmUgaW4gdGltZSwKKwkgKiBvdGhlcndpc2UgcGFuaWMgbXNnIHdpbGwg YmUgc2lnbmFsZWQgaW4gbXN2ZHgKKwkgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCWlmICh2 ZWRfZWNfY3R4LT5kZWJsb2NrX2NtZF9vZmZzZXQgPT0gVkVEX0lOVkFMSURfT0ZGU0VUKSB7CisJ CUlQVlJfREVCVUdfV0FSTigiVkVEOiBpbnZhbGlkIG1zZyBvZmZzZXQsIGFib3J0IGNvbmNlYWwu XG4iKTsKKwkJZ290byBlY19kb25lOworCX0KKworCWlmIChmYXVsdF9yZWdpb24tPm51bV9yZWdp b24gPT0gMCkgeworCQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBubyBmYXVsdCByZWdpb24uXG4iKTsK KwkJZ290byBlY19kb25lOworCX0KKworCXdpZHRoX2luX21iID0gZGVibG9ja19tc2ctPnBpY19z aXplLmJpdHMucGljX3dpZHRoX21iOworCWhlaWdodF9pbl9tYiA9IGRlYmxvY2tfbXNnLT5waWNf c2l6ZS5iaXRzLmZyYW1lX2hlaWdodF9tYjsKKworCXsKKwkJaW50MzJfdCBpOworCQlmb3IgKGkg PSAwOyBpIDwgZmF1bHRfcmVnaW9uLT5udW1fcmVnaW9uOyBpKyspCisJCQlJUFZSX0RFQlVHX1ZF RCgiW3JlZ2lvbiAlZF0gaXMgJWQgdG8gJWRcbiIsCisJCQkJCSBpLAorCQkJCQkgZmF1bHRfcmVn aW9uLT5tYl9yZWdpb25zW2ldLnN0YXJ0LAorCQkJCQkgZmF1bHRfcmVnaW9uLT5tYl9yZWdpb25z W2ldLmVuZCk7CisJCUlQVlJfREVCVUdfVkVEKCJNU1ZEWDogTVNHSURfREVCTE9DSzoiCisJCQki IC0gZmVuY2U6ICUwOHgiCisJCQkiIC0gZmxhZ3M6ICUwOHggLSBzbGljZV9maWVsZF90eXBlOiAl MDh4IgorCQkJIiAtIG9wZXJhdGluZ19tb2RlOiAlMDh4IgorCQkJIiAtIGNvbnRleHQ6ICUwOHgg LSBtbXVfcHRkOiAlMDh4IgorCQkJIiAtIGZyYW1lX2hlaWdodF9tYjogJTA4eCAtIHBpY193aWR0 aF9tYjogJTA4eCIKKwkJCSIgLSBhZGRyZXNzX2EwOiAlMDh4IC0gYWRkcmVzc19hMTogJTA4eCIK KwkJCSIgLSBtYl9wYXJhbV9hZGRyZXNzOiAlMDh4IgorCQkJIiAtIGV4dF9zdHJpZGVfYTogJTA4 eCIKKwkJCSIgLSBhZGRyZXNzX2IwOiAlMDh4IC0gYWRkcmVzc19iMTogJTA4eCIKKwkJCSIgLSBh bHRfb3V0cHV0X2ZsYWdzX2I6ICUwOHguXG4iLAorCQkJZGVibG9ja19tc2ctPmhlYWRlci5iaXRz Lm1zZ19mZW5jZSwKKwkJCWRlYmxvY2tfbXNnLT5mbGFnX3R5cGUuYml0cy5mbGFncywKKwkJCWRl YmxvY2tfbXNnLT5mbGFnX3R5cGUuYml0cy5zbGljZV9maWVsZF90eXBlLAorCQkJZGVibG9ja19t c2ctPm9wZXJhdGluZ19tb2RlLAorCQkJZGVibG9ja19tc2ctPm1tdV9jb250ZXh0LmJpdHMuY29u dGV4dCwKKwkJCWRlYmxvY2tfbXNnLT5tbXVfY29udGV4dC5iaXRzLm1tdV9wdGQsCisJCQlkZWJs b2NrX21zZy0+cGljX3NpemUuYml0cy5mcmFtZV9oZWlnaHRfbWIsCisJCQlkZWJsb2NrX21zZy0+ cGljX3NpemUuYml0cy5waWNfd2lkdGhfbWIsCisJCQlkZWJsb2NrX21zZy0+YWRkcmVzc19hMCwK KwkJCWRlYmxvY2tfbXNnLT5hZGRyZXNzX2ExLAorCQkJZGVibG9ja19tc2ctPm1iX3BhcmFtX2Fk ZHJlc3MsCisJCQlkZWJsb2NrX21zZy0+ZXh0X3N0cmlkZV9hLAorCQkJZGVibG9ja19tc2ctPmFk ZHJlc3NfYjAsCisJCQlkZWJsb2NrX21zZy0+YWRkcmVzc19iMSwKKwkJCWRlYmxvY2tfbXNnLT5h bHRfb3V0cHV0X2ZsYWdzX2IpOworCQlJUFZSX0RFQlVHX1ZFRCgiZGVibG9jayBhZGRyX2MwIGlz CTB4JTA4eFxuIiwKKwkJCQkJZGVibG9ja19tc2ctPmFkZHJlc3NfYzApOworCQlJUFZSX0RFQlVH X1ZFRCgiZGVibG9jayBhZGRyX2MxIGlzCTB4JTA4eFxuIiwKKwkJCQkJZGVibG9ja19tc2ctPmFk ZHJlc3NfYzEpOworCX0KKworCWlmICh1bmxpa2VseSghd2lkdGhfaW5fbWIgfHwgIWhlaWdodF9p bl9tYiB8fAorCQl3aWR0aF9pbl9tYiA+IE1BWF9TSVpFX0lOX01CIHx8CisJCWhlaWdodF9pbl9t YiA+IE1BWF9TSVpFX0lOX01CKSkgeworCQlJUFZSX0RFQlVHX1ZFRCgid3JvbmcgcGljIHNpemVc biIpOworCQlnb3RvIGVjX2RvbmU7CisJfQorCisJY21kID0gMDsKKwlSRUdJT19XUklURV9GSUVM RF9MSVRFKGNtZCwgTVNWRFhfQ01EUywKKwkJCSAgICAgICBESVNQTEFZX1BJQ1RVUkVfU0laRV9E SVNQTEFZX1BJQ1RVUkVfSEVJR0hULAorCQkJICAgICAgIChoZWlnaHRfaW5fbWIgKiAxNikgLSAx KTsKKwlSRUdJT19XUklURV9GSUVMRF9MSVRFKGNtZCwgTVNWRFhfQ01EUywKKwkJCSAgICAgICBE SVNQTEFZX1BJQ1RVUkVfU0laRV9ESVNQTEFZX1BJQ1RVUkVfV0lEVEgsCisJCQkgICAgICAgKHdp ZHRoX2luX21iICogMTYpIC0gMSk7CisJVkVEX0NNRFBPUlRfV1JJVEUoZGV2X3ByaXYsCisJCQkJ IE1TVkRYX0NNRFNfRElTUExBWV9QSUNUVVJFX1NJWkVfT0ZGU0VULAorCQkJCSBjbWQsIGNtZF9z cGFjZSk7CisKKwljbWQgPSAwOworCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUoY21kLCBNU1ZEWF9D TURTLAorCQkJICAgICAgIENPREVEX1BJQ1RVUkVfU0laRV9DT0RFRF9QSUNUVVJFX0hFSUdIVCwK KwkJCSAgICAgICAoaGVpZ2h0X2luX21iICogMTYpIC0gMSk7CisJUkVHSU9fV1JJVEVfRklFTERf TElURShjbWQsIE1TVkRYX0NNRFMsCisJCQkgICAgICAgQ09ERURfUElDVFVSRV9TSVpFX0NPREVE X1BJQ1RVUkVfV0lEVEgsCisJCQkgICAgICAgKHdpZHRoX2luX21iICogMTYpIC0gMSk7CisJVkVE X0NNRFBPUlRfV1JJVEUoZGV2X3ByaXYsCisJCQkJIE1TVkRYX0NNRFNfQ09ERURfUElDVFVSRV9T SVpFX09GRlNFVCwKKwkJCQkgY21kLCBjbWRfc3BhY2UpOworCisJY21kID0gZGVibG9ja19tc2ct Pm9wZXJhdGluZ19tb2RlOworCVJFR0lPX1dSSVRFX0ZJRUxEKGNtZCwgTVNWRFhfQ01EU19PUEVS QVRJTkdfTU9ERSwKKwkJCSAgQ0hST01BX0ZPUk1BVCwgMSk7CisJUkVHSU9fV1JJVEVfRklFTEQo Y21kLCBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFLAorCQkJICBBU1lOQ19NT0RFLCAxKTsKKwlS RUdJT19XUklURV9GSUVMRChjbWQsIE1TVkRYX0NNRFNfT1BFUkFUSU5HX01PREUsCisJCQkgIENP REVDX01PREUsIDMpOworCVJFR0lPX1dSSVRFX0ZJRUxEKGNtZCwgTVNWRFhfQ01EU19PUEVSQVRJ TkdfTU9ERSwKKwkJCSAgQ09ERUNfUFJPRklMRSwgMSk7CisJVkVEX0NNRFBPUlRfV1JJVEUoZGV2 X3ByaXYsIE1TVkRYX0NNRFNfT1BFUkFUSU5HX01PREVfT0ZGU0VULAorCQkJICBjbWQsIGNtZF9z cGFjZSk7CisKKwkvKiBkZXN0IGZyYW1lIGFkZHJlc3MgKi8KKwlWRURfQ01EUE9SVF9XUklURShk ZXZfcHJpdiwKKwkJTVNWRFhfQ01EU19MVU1BX1JFQ09OU1RSVUNURURfUElDVFVSRV9CQVNFX0FE RFJFU1NFU19PRkZTRVQsCisJCQkJIGRlYmxvY2tfbXNnLT5hZGRyZXNzX2EwLAorCQkJCSBjbWRf c3BhY2UpOworCisJVkVEX0NNRFBPUlRfV1JJVEUoZGV2X3ByaXYsCisJCU1TVkRYX0NNRFNfQ0hS T01BX1JFQ09OU1RSVUNURURfUElDVFVSRV9CQVNFX0FERFJFU1NFU19PRkZTRVQsCisJCQkJIGRl YmxvY2tfbXNnLT5hZGRyZXNzX2ExLAorCQkJCSBjbWRfc3BhY2UpOworCisJLyogY29uY2VhbCBm cmFtZSBhZGRyZXNzICovCisJVkVEX0NNRFBPUlRfV1JJVEUoZGV2X3ByaXYsCisJCU1TVkRYX0NN RFNfUkVGRVJFTkNFX1BJQ1RVUkVfQkFTRV9BRERSRVNTRVNfT0ZGU0VULAorCQkJCSBkZWJsb2Nr X21zZy0+YWRkcmVzc19iMCwKKwkJCQkgY21kX3NwYWNlKTsKKwlWRURfQ01EUE9SVF9XUklURShk ZXZfcHJpdiwKKwkJTVNWRFhfQ01EU19SRUZFUkVOQ0VfUElDVFVSRV9CQVNFX0FERFJFU1NFU19P RkZTRVQgKyA0LAorCQkJCSBkZWJsb2NrX21zZy0+YWRkcmVzc19iMSwKKwkJCQkgY21kX3NwYWNl KTsKKwljbWQgPSAwOworCVJFR0lPX1dSSVRFX0ZJRUxEKGNtZCwgTVNWRFhfQ01EU19TTElDRV9Q QVJBTVMsIFNMSUNFX0ZJRUxEX1RZUEUsIDIpOworCVJFR0lPX1dSSVRFX0ZJRUxEKGNtZCwgTVNW RFhfQ01EU19TTElDRV9QQVJBTVMsIFNMSUNFX0NPREVfVFlQRSwgMSk7CisKKwlWRURfQ01EUE9S VF9XUklURShkZXZfcHJpdiwKKwkJCQkgTVNWRFhfQ01EU19TTElDRV9QQVJBTVNfT0ZGU0VULAor CQkJCSBjbWQsIGNtZF9zcGFjZSk7CisKKwljbWQgPSBkZWJsb2NrX21zZy0+YWx0X291dHB1dF9m bGFnc19iOworCWlmICgoY21kICYgMykgIT0gMCkgeworCQlJUFZSX0RFQlVHX1ZFRCgiTVNWRFg6 IGNvbmNlYWwgdG8gcm90YXRlIHN1cmZhY2VcbiIpOworCX0gZWxzZSB7CisJCVZFRF9DTURQT1JU X1dSSVRFKGRldl9wcml2LAorCQkJTVNWRFhfQ01EU19BTFRFUk5BVElWRV9PVVRQVVRfUElDVFVS RV9ST1RBVElPTl9PRkZTRVQsCisJCQkJCSBjbWQsIGNtZF9zcGFjZSk7CisKKwkJVkVEX0NNRFBP UlRfV1JJVEUoZGV2X3ByaXYsCisJCQlNU1ZEWF9DTURTX1ZDMV9MVU1BX1JBTkdFX01BUFBJTkdf QkFTRV9BRERSRVNTX09GRlNFVCwKKwkJCQkgMCwgY21kX3NwYWNlKTsKKworCQlWRURfQ01EUE9S VF9XUklURShkZXZfcHJpdiwKKwkJCU1TVkRYX0NNRFNfVkMxX0NIUk9NQV9SQU5HRV9NQVBQSU5H X0JBU0VfQUREUkVTU19PRkZTRVQsCisJCQkJIDAsIGNtZF9zcGFjZSk7CisKKwkJVkVEX0NNRFBP UlRfV1JJVEUoZGV2X3ByaXYsCisJCQlNU1ZEWF9DTURTX1ZDMV9SQU5HRV9NQVBQSU5HX0ZMQUdT X09GRlNFVCwKKwkJCQkgMCwgY21kX3NwYWNlKTsKKwl9CisKKwljbWQgPSBkZWJsb2NrX21zZy0+ ZXh0X3N0cmlkZV9hOworCVZFRF9DTURQT1JUX1dSSVRFKGRldl9wcml2LAorCQkJICBNU1ZEWF9D TURTX0VYVEVOREVEX1JPV19TVFJJREVfT0ZGU0VULAorCQkJICBjbWQsIGNtZF9zcGFjZSk7CisK Kwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgZmF1bHRfcmVnaW9uLT5udW1fcmVnaW9uOyBsb29wKysp IHsKKworCQl1aW50MzJfdCBzdGFydCA9IGZhdWx0X3JlZ2lvbi0+bWJfcmVnaW9uc1tsb29wXS5z dGFydDsKKwkJdWludDMyX3QgZW5kID0gZmF1bHRfcmVnaW9uLT5tYl9yZWdpb25zW2xvb3BdLmVu ZDsKKwkJdWludDMyX3QgeCwgeTsKKworCQlJUFZSX0RFQlVHX1ZFRCgiTVNWRFg6IHJlZ2lvbigl ZCkgaXMgJWR+JWRcbiIsCisJCQlsb29wLCBzdGFydCwgZW5kKTsKKworCQlpZiAoY29uY2VhbF9h Ym92ZV9yb3cpCisJCQlzdGFydCAtPSB3aWR0aF9pbl9tYjsKKwkJaWYgKGVuZCA+ICh3aWR0aF9p bl9tYiAqIGhlaWdodF9pbl9tYiAtIDEpKQorCQkJZW5kID0gKHdpZHRoX2luX21iICogaGVpZ2h0 X2luX21iIC0gMSk7CisJCWlmIChzdGFydCA+IGVuZCkKKwkJCXN0YXJ0ID0gMDsKKworCQlJUFZS X0RFQlVHX1ZFRCgiTVNWRFg6IG1vZGlmeSByZWdpb24oJWQpIGlzICVkfiVkXG4iLAorCQkJbG9v cCwgc3RhcnQsIGVuZCk7CisKKwkJeCA9IHN0YXJ0ICUgd2lkdGhfaW5fbWI7CisJCXkgPSBzdGFy dCAvIHdpZHRoX2luX21iOworCisJCWZvciAobWJfbG9vcCA9IHN0YXJ0OyBtYl9sb29wIDw9IGVu ZDsgbWJfbG9vcCsrLCB4KyspIHsKKwkJCWlmICh4ID49IHdpZHRoX2luX21iKSB7CisJCQkJeCA9 IDA7CisJCQkJeSsrOworCQkJfQorCisJCQkvKiBJUFZSX0RFQlVHX1ZFRCgiTVNWRFg6IGNvbmNs ZWFtZW50ICglZCwlZClcbiIsCisJCQkJeCwgeSk7ICovCisJCQlpZiAoKHggPT0gMCkgJiYgKG1i X2xvb3AgIT0gc3RhcnQpKQorCQkJCVZFRF9DTURQT1JUX1dSSVRFX0ZBU1QoZGV2X3ByaXYsCisJ CQkJCU1TVkRYX0NNRFNfRU5EX1NMSUNFX1BJQ1RVUkVfT0ZGU0VULAorCQkJCQkwLCBjbWRfc3Bh Y2UpOworCQkJY21kID0gMDsKKwkJCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUoY21kLAorCQkJCQkg ICAgICAgTVNWRFhfQ01EU19NQUNST0JMT0NLX05VTUJFUiwKKwkJCQkJICAgICAgIE1CX0NPREVf VFlQRSwgMSk7CisJCQlSRUdJT19XUklURV9GSUVMRF9MSVRFKGNtZCwKKwkJCQkJICAgICAgIE1T VkRYX0NNRFNfTUFDUk9CTE9DS19OVU1CRVIsCisJCQkJCSAgICAgICBNQl9OT19YLCB4KTsKKwkJ CVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUoY21kLAorCQkJCQkgICAgICAgTVNWRFhfQ01EU19NQUNS T0JMT0NLX05VTUJFUiwKKwkJCQkJICAgICAgIE1CX05PX1ksIHkpOworCQkJVkVEX0NNRFBPUlRf V1JJVEVfRkFTVChkZXZfcHJpdiwKKwkJCQlNU1ZEWF9DTURTX01BQ1JPQkxPQ0tfTlVNQkVSX09G RlNFVCwKKwkJCQljbWQsIGNtZF9zcGFjZSk7CisJCQlWRURfQ01EUE9SVF9XUklURV9GQVNUKGRl dl9wcml2LAorCQkJCU1TVkRYX0NNRFNfTUFDUk9CTE9DS19SRVNJRFVBTF9GT1JNQVRfT0ZGU0VU LAorCQkJCTAsIGNtZF9zcGFjZSk7CisJCQljbWQgPSAwOworCQkJUkVHSU9fV1JJVEVfRklFTERf TElURShjbWQsCisJCQkJCU1TVkRYX0NNRFNfSU5URVJfQkxPQ0tfUFJFRElDVElPTiwKKwkJCQkJ ICAgICAgIFJFRl9JTkRFWF9BX1ZBTElELCAxKTsKKwkJCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUo Y21kLAorCQkJCQlNU1ZEWF9DTURTX0lOVEVSX0JMT0NLX1BSRURJQ1RJT04sCisJCQkJCSAgICAg ICBJTlRFUl9QUkVEX0JMT0NLX1NJWkUsIDApOworCQkJUkVHSU9fV1JJVEVfRklFTERfTElURShj bWQsCisJCQkJCU1TVkRYX0NNRFNfSU5URVJfQkxPQ0tfUFJFRElDVElPTiwKKwkJCQkJICAgICAg IFJFRl9JTkRFWF9BLCAwKTsKKwkJCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUoY21kLAorCQkJCU1T VkRYX0NNRFNfSU5URVJfQkxPQ0tfUFJFRElDVElPTiwKKwkJCQlSRUZfSU5ERVhfQiwgMCk7CisJ CQlWRURfQ01EUE9SVF9XUklURV9GQVNUKGRldl9wcml2LAorCQkJCU1TVkRYX0NNRFNfSU5URVJf QkxPQ0tfUFJFRElDVElPTl9PRkZTRVQsCisJCQkJY21kLCBjbWRfc3BhY2UpOworCQkJVkVEX0NN RFBPUlRfV1JJVEVfRkFTVChkZXZfcHJpdiwKKwkJCQlNU1ZEWF9DTURTX01PVElPTl9WRUNUT1Jf T0ZGU0VULAorCQkJCTAsIGNtZF9zcGFjZSk7CisJCX0KKworCQlWRURfQ01EUE9SVF9XUklURShk ZXZfcHJpdiwKKwkJCQlNU1ZEWF9DTURTX0VORF9TTElDRV9QSUNUVVJFX09GRlNFVCwKKwkJCQkw LCBjbWRfc3BhY2UpOworCX0KKworZWNfZG9uZToKKwkvKiB0cnkgdG8gdW5ibG9jayByZW5kZWMg Ki8KKwlyZXQgPSBWRURfQ01EUE9SVF9XUklURV9GQVNUKGRldl9wcml2LAorCQkJCU1TVkRYX0NN RFNfRU5EX1NMSUNFX1BJQ1RVUkVfT0ZGU0VULAorCQkJCTEsIGNtZF9zcGFjZSk7CisKKwlmYXVs dF9yZWdpb24tPm51bV9yZWdpb24gPSAwOworCisJcHJlZW1wdF9lbmFibGUoKTsKKworCXBtX3Jl dCA9IHBtX3J1bnRpbWVfcHV0KCZkZXZfcHJpdi0+ZGV2LT5wbGF0Zm9ybWRldi0+ZGV2KTsKKwlp ZiAodW5saWtlbHkocG1fcmV0IDwgMCkpCisJCUlQVlJfRVJST1IoIkVycm9yIHB1dCBWRUQgcG93 ZXI6ICVkXG4iLCBwbV9yZXQpOworCisJSVBWUl9ERUJVR19WRUQoIlZFRDogRUMgZG9uZSwgdW5s b2NrIG1zdmR4IHJldCAlZC5cbiIsIHJldCk7CisKKwlyZXR1cm47Cit9CisKK3N0cnVjdCB2ZWRf ZWNfY29udGV4dCAqdmVkX2ZpbmRfZWNfY3R4KHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYs CisJCQkJCXN0cnVjdCBkcm1fZmlsZSAqdGZpbGUsIHZvaWQgKmNtZCkKK3sKKwlpbnQzMl90IGks IGZyZWVfaWR4OworCXN0cnVjdCB2ZWRfZWNfY29udGV4dCAqZWNfY3R4ID0gTlVMTDsKKwlzdHJ1 Y3QgZndfZGVibG9ja19tc2cgKmRlYmxvY2tfbXNnID0gKHN0cnVjdCBmd19kZWJsb2NrX21zZyAq KWNtZDsKKworCWZyZWVfaWR4ID0gLTE7CisJZm9yIChpID0gMDsgaSA8IFZFRF9NQVhfRUNfSU5T VEFOQ0U7IGkrKykgeworCQlpZiAodmVkX3ByaXYtPnZlZF9lY19jdHhbaV0tPnRmaWxlID09IHRm aWxlKQorCQkJYnJlYWs7CisJCWVsc2UgaWYgKGZyZWVfaWR4IDwgMCAmJgorCQkJIHZlZF9wcml2 LT52ZWRfZWNfY3R4W2ldLT50ZmlsZSA9PSBOVUxMKQorCQkJZnJlZV9pZHggPSBpOworCX0KKwor CWlmIChpIDwgVkVEX01BWF9FQ19JTlNUQU5DRSkKKwkJZWNfY3R4ID0gdmVkX3ByaXYtPnZlZF9l Y19jdHhbaV07CisJZWxzZSBpZiAoZnJlZV9pZHggPj0gMCAmJiBjbWQpIHsKKwkJSVBWUl9ERUJV R19WRUQoImFjcXVpcmUgZWMgY3R4IGlkeCAlZCBmb3IgdGZpbGUgMHglMDhseC5cbiIsCisJCQkJ ZnJlZV9pZHgsICh1bnNpZ25lZCBsb25nKXRmaWxlKTsKKwkJZWNfY3R4ID0gdmVkX3ByaXYtPnZl ZF9lY19jdHhbZnJlZV9pZHhdOworCQltZW1zZXQoZWNfY3R4LCAwLCBzaXplb2YoKmVjX2N0eCkp OworCQllY19jdHgtPnRmaWxlID0gdGZpbGU7CisJCWVjX2N0eC0+Y29udGV4dF9pZCA9IGRlYmxv Y2tfbXNnLT5tbXVfY29udGV4dC5iaXRzLmNvbnRleHQ7CisJfSBlbHNlIHsKKwkJSVBWUl9ERUJV R19WRUQoIkF2YWlsYWJsZSBlYyBjdHggaXMgbm90IGZvdW5kLlxuIik7CisJfQorCisJcmV0dXJu IGVjX2N0eDsKK30KKwordm9pZCB2ZWRfdXBkYXRlX2ZyYW1lX2luZm8oc3RydWN0IHZlZF9wcml2 YXRlICp2ZWRfcHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKnRmaWxlLAl2b2lkICpjbWQpCit7 CisKKwlpbnQzMl90IGksIGZyZWVfaWR4OworCXN0cnVjdCB2ZWRfZnJhbWVfaW5mbyAqZnJhbWVf aW5mbzsKKwlzdHJ1Y3QgZndfZGVibG9ja19tc2cgKmRlYmxvY2tfbXNnID0gKHN0cnVjdCBmd19k ZWJsb2NrX21zZyAqKWNtZDsKKwl1aW50MzJfdCBidWZmZXJfaGFuZGxlID0gZGVibG9ja19tc2ct Pm1iX3BhcmFtX2FkZHJlc3M7CisKKwlzdHJ1Y3QgdmVkX2VjX2NvbnRleHQgKmVjX2N0eDsKKwor CUlQVlJfREVCVUdfVkVEKAorCQkidXBkYXRlIGZyYW1lIGluZm8gKGhhbmRsZSAweCUwOHgpIGZv ciBlcnJvciBjb25jZWFsbWVudFxuIiwKKwkJYnVmZmVyX2hhbmRsZSk7CisKKwllY19jdHggPSB2 ZWRfZmluZF9lY19jdHgodmVkX3ByaXYsIHRmaWxlLCBjbWQpOworCisJaWYgKCFlY19jdHgpCisJ CXJldHVybjsKKworCWZyZWVfaWR4ID0gLTE7CisJZm9yIChpID0gMDsgaSA8IE1BWF9ERUNPREVf QlVGRkVSUzsgaSsrKSB7CisJCWlmIChidWZmZXJfaGFuZGxlID09IGVjX2N0eC0+ZnJhbWVfaW5m b1tpXS5oYW5kbGUpCisJCQlicmVhazsKKwkJaWYgKGZyZWVfaWR4IDwgMCAmJiBlY19jdHgtPmZy YW1lX2luZm9baV0uaGFuZGxlID09IDApCisJCQlmcmVlX2lkeCA9IGk7CisJfQorCisJaWYgKGkg PCBNQVhfREVDT0RFX0JVRkZFUlMpCisJCWZyYW1lX2luZm8gPSAmZWNfY3R4LT5mcmFtZV9pbmZv W2ldOworCWVsc2UgaWYgKGZyZWVfaWR4ID49IDApIHsKKwkJSVBWUl9ERUJVR19WRUQoImFjcXVp cmUgZnJhbWVfaW5mbyBzb2x0IGlkeCAlZFxuIiwgZnJlZV9pZHgpOworCQlmcmFtZV9pbmZvID0g JmVjX2N0eC0+ZnJhbWVfaW5mb1tmcmVlX2lkeF07CisJfSBlbHNlIHsKKwkJSVBWUl9ERUJVR19W RUQoIiVkIHNvbHRzIG9jY3VwaWVkLCBhYm9ydCB1cGRhdGUgZnJhbWVfaW5mb1xuIiwKKwkJCQlN QVhfREVDT0RFX0JVRkZFUlMpOworCQlyZXR1cm47CisJfQorCisJZnJhbWVfaW5mby0+Zndfc3Rh dHVzID0gMDsKKwlmcmFtZV9pbmZvLT5oYW5kbGUgPSBidWZmZXJfaGFuZGxlOworCWZyYW1lX2lu Zm8tPmZlbmNlID0gKGRlYmxvY2tfbXNnLT5oZWFkZXIuYml0cy5tc2dfZmVuY2UgJiAofjB4Zikp OworCWZyYW1lX2luZm8tPmRlY29kZV9zdGF0dXMubnVtX3JlZ2lvbiA9IDA7CisJZWNfY3R4LT5j dXJfZnJhbWVfaW5mbyA9IGZyYW1lX2luZm87Cit9CisKK3ZvaWQgdmVkX2JhY2t1cF9jbWQoc3Ry dWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiwgc3RydWN0IGRybV9maWxlICp0ZmlsZSwKKwkJCXZv aWQgKmNtZCwgdWludDMyX3QgY21kX3NpemUsCisJCQl1aW50MzJfdCBkZWJsb2NrX2NtZF9vZmZz ZXQpCit7CisJc3RydWN0IGZ3X2RlYmxvY2tfbXNnICpkZWJsb2NrX21zZyA9IE5VTEw7CisKKwlz dHJ1Y3QgdmVkX2VjX2NvbnRleHQgKmVjX2N0eDsKKwl1bmlvbiBtc2dfaGVhZGVyICpoZWFkZXI7 CisKKwlJUFZSX0RFQlVHX1ZFRCgiYmFja3VwIGNtZCBmb3IgdmVkIGVycm9yIGNvbmNlYWxtZW50 XG4iKTsKKworCWVjX2N0eCA9IHZlZF9maW5kX2VjX2N0eCh2ZWRfcHJpdiwgdGZpbGUsIE5VTEwp OworCisJaWYgKCFlY19jdHgpIHsKKwkJSVBWUl9ERUJVR19WRUQoInRoaXMgaXMgbm90IGEgZWMg Y3R4LCBhYm9ydCBiYWNrdXAgY21kXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkZWJsb2Nr X2NtZF9vZmZzZXQgIT0gVkVEX0lOVkFMSURfT0ZGU0VUKQorCQlkZWJsb2NrX21zZyA9IChzdHJ1 Y3QgZndfZGVibG9ja19tc2cgKikKKwkJCQkoY21kICsgZGVibG9ja19jbWRfb2Zmc2V0KTsKKwor CWlmIChkZWJsb2NrX21zZyAmJgorCSAgICBlY19jdHgtPmNvbnRleHRfaWQgIT0gZGVibG9ja19t c2ctPm1tdV9jb250ZXh0LmJpdHMuY29udGV4dCkgeworCQlJUFZSX0RFQlVHX1ZFRCgiYmFja3Vw IGNtZCBidXQgZmluZCBtaXMtbWF0Y2ggY29udGV4dCBpZFxuIik7CisJCXJldHVybjsKKwl9CisK KwllY19jdHgtPmNtZF9zaXplID0gY21kX3NpemU7CisJZWNfY3R4LT5kZWJsb2NrX2NtZF9vZmZz ZXQgPSBkZWJsb2NrX2NtZF9vZmZzZXQ7CisJbWVtY3B5KGVjX2N0eC0+dW5mZW5jZWRfY21kLCBj bWQsIGNtZF9zaXplKTsKKwllY19jdHgtPmZlbmNlID0gVkVEX0lOVkFMSURfRkVOQ0U7CisJaGVh ZGVyID0gKHVuaW9uIG1zZ19oZWFkZXIgKillY19jdHgtPnVuZmVuY2VkX2NtZDsKKwlpZiAoY21k X3NpemUpCisJCWVjX2N0eC0+ZmVuY2UgPSBoZWFkZXItPmJpdHMubXNnX2ZlbmNlOworCWVjX2N0 eC0+ZmVuY2UgJj0gKH4weGYpOworCUlQVlJfREVCVUdfVkVEKCJiYWNrdXAgY21kIGZvciB2ZWQ6 IGZlbmNlIDB4JTA4eCwgY21kX3NpemUgJWRcbiIsCisJCWVjX2N0eC0+ZmVuY2UsIGNtZF9zaXpl KTsKK30KKwordm9pZCB2ZWRfbXR4X21lc3NhZ2VfZHVtcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJaW50MzJfdCBpLCBidWZfc2l6ZSwgYnVmX29mZnNldDsKKwlidWZfc2l6ZSA9CisJCVZF RF9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX1RPX0hPU1RfQlVGX1NJWkUpICYgKCgxIDw8IDE2KSAt IDEpOworCWJ1Zl9vZmZzZXQgPQorCQkoVkVEX1JFR19SRUFEMzIoTVNWRFhfQ09NTVNfVE9fSE9T VF9CVUZfU0laRSkgPj4gMTYpICsgMHgyMDAwOworCisJSVBWUl9ERUJVR19WRUQoIkR1bXAgdG8g SE9TVCBtZXNzYWdlIGJ1ZmZlciAob2Zmc2V0OnNpemUpJTA0eDolMDR4XG4iLAorCQkJYnVmX29m ZnNldCwgYnVmX3NpemUpOworCWZvciAoaSA9IDA7IGkgPCBidWZfc2l6ZTsgaSArPSA0KSB7CisJ CXVpbnQzMl90IHJlZzEsIHJlZzIsIHJlZzMsIHJlZzQ7CisJCXJlZzEgPSBWRURfUkVHX1JFQUQz MihidWZfb2Zmc2V0ICsgaSAqIDQpOworCQlyZWcyID0gVkVEX1JFR19SRUFEMzIoYnVmX29mZnNl dCArIGkgKiA0ICsgNCk7CisJCXJlZzMgPSBWRURfUkVHX1JFQUQzMihidWZfb2Zmc2V0ICsgaSAq IDQgKyA4KTsKKwkJcmVnNCA9IFZFRF9SRUdfUkVBRDMyKGJ1Zl9vZmZzZXQgKyBpICogNCArIDEy KTsKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogMHglMDR4OiAweCUwOHggMHglMDh4IDB4JTA4eCAw eCUwOHhcbiIsCisJCQkJKGJ1Zl9vZmZzZXQgKyBpICogNCksIHJlZzEsIHJlZzIsIHJlZzMsIHJl ZzQpOworCX0KKworCWJ1Zl9zaXplID0gVkVEX1JFR19SRUFEMzIoTVNWRFhfQ09NTVNfVE9fTVRY X0JVRl9TSVpFKSAmICgoMSA8PCAxNikgLSAxKTsKKwlidWZfb2Zmc2V0ID0gKFZFRF9SRUdfUkVB RDMyKE1TVkRYX0NPTU1TX1RPX01UWF9CVUZfU0laRSkgPj4gMTYpICsgMHgyMDAwOworCisJSVBW Ul9ERUJVR19WRUQoIkR1bXAgdG8gTVRYIG1lc3NhZ2UgYnVmZmVyIChvZmZzZXQ6c2l6ZSklMDR4 OiUwNHhcbiIsCisJCQlidWZfb2Zmc2V0LCBidWZfc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IGJ1 Zl9zaXplOyBpICs9IDQpIHsKKwkJdWludDMyX3QgcmVnMSwgcmVnMiwgcmVnMywgcmVnNDsKKwkJ cmVnMSA9IFZFRF9SRUdfUkVBRDMyKGJ1Zl9vZmZzZXQgKyBpICogNCk7CisJCXJlZzIgPSBWRURf UkVHX1JFQUQzMihidWZfb2Zmc2V0ICsgaSAqIDQgKyA0KTsKKwkJcmVnMyA9IFZFRF9SRUdfUkVB RDMyKGJ1Zl9vZmZzZXQgKyBpICogNCArIDgpOworCQlyZWc0ID0gVkVEX1JFR19SRUFEMzIoYnVm X29mZnNldCArIGkgKiA0ICsgMTIpOworCQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiAweCUwNHg6IDB4 JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eFxuIiwKKwkJCQkoYnVmX29mZnNldCArIGkgKiA0KSwg cmVnMSwgcmVnMiwgcmVnMywgcmVnNCk7CisJfQorCisJYnVmX3NpemUgPSAxMjsKKwlidWZfb2Zm c2V0ID0gMHhGRDAgKyAweDIwMDA7CisKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBDb21tIGhlYWRl ciAob2Zmc2V0OnNpemUpJTA0eDolMDR4XG4iLAorCQkJYnVmX29mZnNldCwgYnVmX3NpemUpOwor CWZvciAoaSA9IDA7IGkgPCBidWZfc2l6ZTsgaSArPSA0KSB7CisJCXVpbnQzMl90IHJlZzEsIHJl ZzIsIHJlZzMsIHJlZzQ7CisJCXJlZzEgPSBWRURfUkVHX1JFQUQzMihidWZfb2Zmc2V0ICsgaSAq IDQpOworCQlyZWcyID0gVkVEX1JFR19SRUFEMzIoYnVmX29mZnNldCArIGkgKiA0ICsgNCk7CisJ CXJlZzMgPSBWRURfUkVHX1JFQUQzMihidWZfb2Zmc2V0ICsgaSAqIDQgKyA4KTsKKwkJcmVnNCA9 IFZFRF9SRUdfUkVBRDMyKGJ1Zl9vZmZzZXQgKyBpICogNCArIDEyKTsKKwkJSVBWUl9ERUJVR19W RUQoIlZFRDogMHglMDR4OiAweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCisJCQkJKGJ1 Zl9vZmZzZXQgKyBpICogNCksIHJlZzEsIHJlZzIsIHJlZzMsIHJlZzQpOworCX0KKworCUlQVlJf REVCVUdfVkVEKCJWRUQ6IEVycm9yIHN0YXR1cyAweDJjYzQ6IDB4JTA4eFxuIiwKKwkJCVZFRF9S RUdfUkVBRDMyKDB4MmNjNCkpOworfQorCit2b2lkIHZlZF9md19lcnJvcl9kZXRlY3RlZChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXVpbnQzMl90IGZlbmNlLCB1aW50MzJfdCBmbGFncykK K3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7 CisJc3RydWN0IHZlZF9lY19jb250ZXh0ICp2ZWRfZWNfY3R4ID0gTlVMTDsKKwlzdHJ1Y3QgdmVk X2ZyYW1lX2luZm8gKmZyYW1lX2luZm8gPSBOVUxMOworCWludDMyX3QgaSwgZm91bmQgPSAwOwor CisJaWYgKCEoZmxhZ3MgJiBGV19ERVZBX0VSUk9SX0RFVEVDVEVEKSkKKwkJcmV0dXJuOworCisJ LypnZXQgdGhlIGZyYW1lX2luZm8gc3RydWN0IGZvciBlcnJvciBjb25jZWFsbWVudCBmcmFtZSov CisJZm9yIChpID0gMDsgaSA8IFZFRF9NQVhfRUNfSU5TVEFOQ0U7IGkrKykKKwkJaWYgKHZlZF9w cml2LT52ZWRfZWNfY3R4W2ldLT5mZW5jZSA9PQorCQkJCQkJKGZlbmNlICYgKH4weGYpKSkgewor CQkJdmVkX2VjX2N0eCA9IHZlZF9wcml2LT52ZWRfZWNfY3R4W2ldOworCQkJZm91bmQrKzsKKwkJ fQorCS8qIHZlZF9tdHhfbWVzc2FnZV9kdW1wKGRldik7ICovCisJaWYgKCF2ZWRfZWNfY3R4IHx8 ICEodmVkX2VjX2N0eC0+dGZpbGUpIHx8IGZvdW5kID4gMSkgeworCQlJUFZSX0RFQlVHX1ZFRCgK KwkJIm5vIG1hdGNoZWQgY3R4OiBmZW5jZSAweCV4LCBmb3VuZCAlZCwgY3R4IDB4JTA4bHhcbiIs CisJCQlmZW5jZSwgZm91bmQsICh1bnNpZ25lZCBsb25nKXZlZF9lY19jdHgpOworCQlyZXR1cm47 CisJfQorCisJaWYgKHZlZF9lY19jdHgtPmN1cl9mcmFtZV9pbmZvICYmCisJCXZlZF9lY19jdHgt PmN1cl9mcmFtZV9pbmZvLT5mZW5jZSA9PSAoZmVuY2UgJiAofjB4ZikpKSB7CisJCWZyYW1lX2lu Zm8gPSB2ZWRfZWNfY3R4LT5jdXJfZnJhbWVfaW5mbzsKKwl9IGVsc2UgeworCQlpZiAodmVkX2Vj X2N0eC0+Y3VyX2ZyYW1lX2luZm8pCisJCQlJUFZSX0RFQlVHX1ZFRCgKKwkJCSJjdXJfZnJhbWVf aW5mbyBmZW5jZSgleCkgZG9lc24ndCBtYXRjaCBmZW5jZSAoJXgpLlxuIiwKKwkJCQl2ZWRfZWNf Y3R4LT5jdXJfZnJhbWVfaW5mby0+ZmVuY2UsIGZlbmNlKTsKKwkJZWxzZQorCQkJSVBWUl9ERUJV R19WRUQoCisJCQkiVGhlIHBvaW50ZXIgdmVkX2VjX2N0eC0+Y3VyX2ZyYW1lX2luZm8gaXMgbnVs bFxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZnJhbWVfaW5mby0+ZGVjb2RlX3N0YXR1cy5u dW1fcmVnaW9uKSB7CisJCUlQVlJfREVCVUdfVkVEKCJFcnJvciBhbHJlYWR5IHJlY29yZCwgbm8g bmVlZCByZWNvcmQgYWdhaW5cbiIpOworCQlyZXR1cm47CisJfQorCisJSVBWUl9ERUJVR19WRUQo InJlY29yZCBlcnJvciBhcyBmaXJzdCBmYXVsdCByZWdpb24uXG4iKTsKKwlmcmFtZV9pbmZvLT5k ZWNvZGVfc3RhdHVzLm51bV9yZWdpb24rKzsKKwlmcmFtZV9pbmZvLT5kZWNvZGVfc3RhdHVzLm1i X3JlZ2lvbnNbMF0uc3RhcnQgPSAwOworCWZyYW1lX2luZm8tPmRlY29kZV9zdGF0dXMubWJfcmVn aW9uc1swXS5lbmQgPSAwOworCisJLyoKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RFQ09ERV9CVUZG RVJTOyBpKyspIHsKKwkJaWYgKHZlZF9lY19jdHgtPmZyYW1lX2luZm9baV0uZmVuY2UgPT0gKGZl bmNlICYgKH4weGYpKSkgeworCQkJYnJlYWs7CisJCX0KKworCX0KKwkqLworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2VjLmggYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92 ZWRfZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWY5ZmU2Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2VjLmgKQEAgLTAsMCArMSwy MDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICogdmVkX2VjLmg6IFZFRCBlcnJvciBjb25jZWFs bWVudCBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3Jh dGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIEltYWdpbmF0aW9uIFRl Y2hub2xvZ2llcyBMaW1pdGVkLCBVSworICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICog QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hB TlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgor ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAt IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcnM6 CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKiAgICBMaSBaZW5nIDxs aS56ZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1ZF RF9FQ19IXworI2RlZmluZSBfVkVEX0VDX0hfCisKKyNpbmNsdWRlICJpcHZyX2Rydi5oIgorCisj ZGVmaW5lIFZFRF9JTlZBTElEX0ZFTkNFICgweGZmZmYpCisjZGVmaW5lIFZFRF9JTlZBTElEX09G RlNFVCAoMHhmZmZmZmZmZikKKyNkZWZpbmUgVkVEX0VDX1JPTExCQUNLICg5KQorCitzdHJ1Y3Qg dmVkX2VjX2NvbnRleHQgeworCXN0cnVjdCBkcm1fZmlsZSAqdGZpbGU7IC8qIHByb3RlY3RlZCBi eSBjbWRidWZfbXV0ZXggKi8KKwl1aW50MzJfdCBjb250ZXh0X2lkOworCXN0cnVjdCB2ZWRfZnJh bWVfaW5mbyBmcmFtZV9pbmZvW01BWF9ERUNPREVfQlVGRkVSU107CisJc3RydWN0IHZlZF9mcmFt ZV9pbmZvICpjdXJfZnJhbWVfaW5mbzsKKwlpbnQzMl90IGZyYW1lX2lkeDsKKworCS8qIDEyIHJl bmRlciBtc2cgKyAxIGRlYmxvY2sgbXNnCisJICogMTIgKiAyMCArIDEgKiA0OCA9IDI4ODsKKwkq LworCXVpbnQ4X3QgdW5mZW5jZWRfY21kWzMwMF07CisJdWludDMyX3QgY21kX3NpemU7CisJdWlu dDMyX3QgZGVibG9ja19jbWRfb2Zmc2V0OworCXVpbnQxNl90IGZlbmNlOworCXN0cnVjdCB2ZWRf ZGVjb2RlX3N0YXR1cyBkZWNvZGVfc3RhdHVzOworfTsKKworI2RlZmluZSBfUFNCX01TVkRYX0VD X0hfCisKKyNkZWZpbmUgTVNWRFhfQ01EU19CQVNFIDB4MTAwMAorI2RlZmluZSBNU1ZEWF9DTURT X0RJU1BMQVlfUElDVFVSRV9TSVpFX09GRlNFVCAoMHgwMDAwKQorCisvKiBNU1ZEWF9DTURTLCBE SVNQTEFZX1BJQ1RVUkVfU0laRSwgRElTUExBWV9QSUNUVVJFX0hFSUdIVCAqLworI2RlZmluZSBN U1ZEWF9DTURTX0RJU1BMQVlfUElDVFVSRV9TSVpFX0RJU1BMQVlfUElDVFVSRV9IRUlHSFRfTUFT SyBcCisJKDB4MDBGRkYwMDApCisjZGVmaW5lIE1TVkRYX0NNRFNfRElTUExBWV9QSUNUVVJFX1NJ WkVfRElTUExBWV9QSUNUVVJFX0hFSUdIVF9TSElGVCAoMTIpCisKKy8qIE1TVkRYX0NNRFMsIERJ U1BMQVlfUElDVFVSRV9TSVpFLCBESVNQTEFZX1BJQ1RVUkVfV0lEVEggKi8KKyNkZWZpbmUgTVNW RFhfQ01EU19ESVNQTEFZX1BJQ1RVUkVfU0laRV9ESVNQTEFZX1BJQ1RVUkVfV0lEVEhfTUFTSyAo MHgwMDAwMEZGRikKKyNkZWZpbmUgTVNWRFhfQ01EU19ESVNQTEFZX1BJQ1RVUkVfU0laRV9ESVNQ TEFZX1BJQ1RVUkVfV0lEVEhfU0hJRlQgKDApCisKKyNkZWZpbmUgTVNWRFhfQ01EU19DT0RFRF9Q SUNUVVJFX1NJWkVfT0ZGU0VUICgweDAwMDQpCisKKy8qIE1TVkRYX0NNRFMsIENPREVEX1BJQ1RV UkVfU0laRSwgQ09ERURfUElDVFVSRV9IRUlHSFQgKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19DT0RF RF9QSUNUVVJFX1NJWkVfQ09ERURfUElDVFVSRV9IRUlHSFRfTUFTSyAoMHgwMEZGRjAwMCkKKyNk ZWZpbmUgTVNWRFhfQ01EU19DT0RFRF9QSUNUVVJFX1NJWkVfQ09ERURfUElDVFVSRV9IRUlHSFRf U0hJRlQgKDEyKQorCisvKiBNU1ZEWF9DTURTLCBDT0RFRF9QSUNUVVJFX1NJWkUsIENPREVEX1BJ Q1RVUkVfV0lEVEggKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19DT0RFRF9QSUNUVVJFX1NJWkVfQ09E RURfUElDVFVSRV9XSURUSF9NQVNLICgweDAwMDAwRkZGKQorI2RlZmluZSBNU1ZEWF9DTURTX0NP REVEX1BJQ1RVUkVfU0laRV9DT0RFRF9QSUNUVVJFX1dJRFRIX1NISUZUICgwKQorCisjZGVmaW5l IE1TVkRYX0NNRFNfT1BFUkFUSU5HX01PREVfT0ZGU0VUICgweDAwMDgpCisKKy8qIE1TVkRYX0NN RFMsIE9QRVJBVElOR19NT0RFLCBSUFJfRU5BQkxFICovCisjZGVmaW5lIE1TVkRYX0NNRFNfT1BF UkFUSU5HX01PREVfUlBSX0VOQUJMRV9NQVNLICgweDIwMDAwMDAwKQorI2RlZmluZSBNU1ZEWF9D TURTX09QRVJBVElOR19NT0RFX1JQUl9FTkFCTEVfU0hJRlQgKDI5KQorCisvKiBNU1ZEWF9DTURT LCBPUEVSQVRJTkdfTU9ERSwgVVNFX0VYVF9ST1dfU1RSSURFICovCisjZGVmaW5lIE1TVkRYX0NN RFNfT1BFUkFUSU5HX01PREVfVVNFX0VYVF9ST1dfU1RSSURFX01BU0sgKDB4MTAwMDAwMDApCisj ZGVmaW5lIE1TVkRYX0NNRFNfT1BFUkFUSU5HX01PREVfVVNFX0VYVF9ST1dfU1RSSURFX1NISUZU ICgyOCkKKworLyogTVNWRFhfQ01EUywgT1BFUkFUSU5HX01PREUsIENIUk9NQV9JTlRFUkxFQVZF RCAqLworI2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX0NIUk9NQV9JTlRFUkxFQVZF RF9NQVNLICgweDA4MDAwMDAwKQorI2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX0NI Uk9NQV9JTlRFUkxFQVZFRF9TSElGVCAoMjcpCisvKiBNU1ZEWF9DTURTLCBPUEVSQVRJTkdfTU9E RSwgUk9XX1NUUklERSAqLworI2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX1JPV19T VFJJREVfTUFTSyAoMHgwNzAwMDAwMCkKKyNkZWZpbmUgTVNWRFhfQ01EU19PUEVSQVRJTkdfTU9E RV9ST1dfU1RSSURFX1NISUZUICgyNCkKKworLyogTVNWRFhfQ01EUywgT1BFUkFUSU5HX01PREUs IENPREVDX1BST0ZJTEUgKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19PUEVSQVRJTkdfTU9ERV9DT0RF Q19QUk9GSUxFX01BU0sgKDB4MDAzMDAwMDApCisjZGVmaW5lIE1TVkRYX0NNRFNfT1BFUkFUSU5H X01PREVfQ09ERUNfUFJPRklMRV9TSElGVCAoMjApCisKKy8qIE1TVkRYX0NNRFMsIE9QRVJBVElO R19NT0RFLCBDT0RFQ19NT0RFICovCisjZGVmaW5lIE1TVkRYX0NNRFNfT1BFUkFUSU5HX01PREVf Q09ERUNfTU9ERV9NQVNLICgweDAwMEYwMDAwKQorI2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElO R19NT0RFX0NPREVDX01PREVfU0hJRlQgKDE2KQorCisvKiBNU1ZEWF9DTURTLCBPUEVSQVRJTkdf TU9ERSwgQVNZTkNfTU9ERSAqLworI2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX0FT WU5DX01PREVfTUFTSyAoMHgwMDAwNjAwMCkKKyNkZWZpbmUgTVNWRFhfQ01EU19PUEVSQVRJTkdf TU9ERV9BU1lOQ19NT0RFX1NISUZUICgxMykKKworLyogTVNWRFhfQ01EUywgT1BFUkFUSU5HX01P REUsIENIUk9NQV9GT1JNQVQgKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19PUEVSQVRJTkdfTU9ERV9D SFJPTUFfRk9STUFUX01BU0sgKDB4MDAwMDEwMDApCisjZGVmaW5lIE1TVkRYX0NNRFNfT1BFUkFU SU5HX01PREVfQ0hST01BX0ZPUk1BVF9TSElGVCAoMTIpCisKKy8qIE1TVkRYX0NNRFMsIE9QRVJB VElOR19NT0RFLCBJTlRFUkxBQ0VEICovCisjZGVmaW5lIE1TVkRYX0NNRFNfT1BFUkFUSU5HX01P REVfSU5URVJMQUNFRF9NQVNLICgweDAwMDAwODAwKQorI2RlZmluZSBNU1ZEWF9DTURTX09QRVJB VElOR19NT0RFX0lOVEVSTEFDRURfU0hJRlQgKDExKQorCisvKiBNU1ZEWF9DTURTLCBPUEVSQVRJ TkdfTU9ERSwgT1ZFUkxBUCAqLworI2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX09W RVJMQVBfTUFTSyAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTVNWRFhfQ01EU19PUEVSQVRJTkdfTU9E RV9PVkVSTEFQX1NISUZUICgxMCkKKworLyogTVNWRFhfQ01EUywgT1BFUkFUSU5HX01PREUsIFBJ Q19DT05ET1ZFUiAqLworI2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX1BJQ19DT05E T1ZFUl9NQVNLICgweDAwMDAwMzAwKQorI2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RF X1BJQ19DT05ET1ZFUl9TSElGVCAoOCkKKy8qIE1TVkRYX0NNRFMsIE9QRVJBVElOR19NT0RFLCBE RUJMT0NLX1NUUkVOR1RIICovCisjZGVmaW5lIE1TVkRYX0NNRFNfT1BFUkFUSU5HX01PREVfREVC TE9DS19TVFJFTkdUSF9NQVNLICgweDAwMDAwMEUwKQorI2RlZmluZSBNU1ZEWF9DTURTX09QRVJB VElOR19NT0RFX0RFQkxPQ0tfU1RSRU5HVEhfU0hJRlQgKDUpCisKKy8qIE1TVkRYX0NNRFMsIE9Q RVJBVElOR19NT0RFLCBQSUNfUVVBTlQgKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19PUEVSQVRJTkdf TU9ERV9QSUNfUVVBTlRfTUFTSyAoMHgwMDAwMDAxRikKKyNkZWZpbmUgTVNWRFhfQ01EU19PUEVS QVRJTkdfTU9ERV9QSUNfUVVBTlRfU0hJRlQgKDApCisKKyNkZWZpbmUgTVNWRFhfQ01EU19MVU1B X1JFQ09OU1RSVUNURURfUElDVFVSRV9CQVNFX0FERFJFU1NFU19PRkZTRVQgKDB4MDAwQykKKyNk ZWZpbmUgTVNWRFhfQ01EU19DSFJPTUFfUkVDT05TVFJVQ1RFRF9QSUNUVVJFX0JBU0VfQUREUkVT U0VTX09GRlNFVCAoMHgwMDEwKQorCisjZGVmaW5lIE1TVkRYX0NNRFNfUkVGRVJFTkNFX1BJQ1RV UkVfQkFTRV9BRERSRVNTRVNfT0ZGU0VUICgweDAxMDApCisKKyNkZWZpbmUgTVNWRFhfQ01EU19T TElDRV9QQVJBTVNfT0ZGU0VUICgweDA0MDApCisKKy8qIE1TVkRYX0NNRFMsIFNMSUNFX1BBUkFN UywgU0xJQ0VfRklFTERfVFlQRSAqLworI2RlZmluZSBNU1ZEWF9DTURTX1NMSUNFX1BBUkFNU19T TElDRV9GSUVMRF9UWVBFX01BU0sgKDB4MDAwMDAwMEMpCisjZGVmaW5lIE1TVkRYX0NNRFNfU0xJ Q0VfUEFSQU1TX1NMSUNFX0ZJRUxEX1RZUEVfU0hJRlQgKDIpCisKKworLyogTVNWRFhfQ01EUywg U0xJQ0VfUEFSQU1TLCBTTElDRV9DT0RFX1RZUEUgKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19TTElD RV9QQVJBTVNfU0xJQ0VfQ09ERV9UWVBFX01BU0sgKDB4MDAwMDAwMDMpCisjZGVmaW5lIE1TVkRY X0NNRFNfU0xJQ0VfUEFSQU1TX1NMSUNFX0NPREVfVFlQRV9TSElGVCAoMCkKKworI2RlZmluZSBN U1ZEWF9DTURTX0FMVEVSTkFUSVZFX09VVFBVVF9QSUNUVVJFX1JPVEFUSU9OX09GRlNFVCAoMHgw MDNDKQorCisjZGVmaW5lIE1TVkRYX0NNRFNfVkMxX0xVTUFfUkFOR0VfTUFQUElOR19CQVNFX0FE RFJFU1NfT0ZGU0VUICgweDAwMjgpCisjZGVmaW5lIE1TVkRYX0NNRFNfVkMxX0NIUk9NQV9SQU5H RV9NQVBQSU5HX0JBU0VfQUREUkVTU19PRkZTRVQgKDB4MDAyQykKKyNkZWZpbmUgTVNWRFhfQ01E U19WQzFfUkFOR0VfTUFQUElOR19GTEFHU19PRkZTRVQgKDB4MDAzMCkKKworI2RlZmluZSBNU1ZE WF9DTURTX0VYVEVOREVEX1JPV19TVFJJREVfT0ZGU0VUICgweDAwNDApCisKKyNkZWZpbmUgTVNW RFhfQ01EU19NQUNST0JMT0NLX05VTUJFUl9PRkZTRVQgKDB4MDQwOCkKKworLyogTVNWRFhfQ01E UywgTUFDUk9CTE9DS19OVU1CRVIsIE1CX0NPREVfVFlQRSAqLworI2RlZmluZSBNU1ZEWF9DTURT X01BQ1JPQkxPQ0tfTlVNQkVSX01CX0NPREVfVFlQRV9NQVNLICgweDAwMDMwMDAwKQorI2RlZmlu ZSBNU1ZEWF9DTURTX01BQ1JPQkxPQ0tfTlVNQkVSX01CX0NPREVfVFlQRV9TSElGVCAoMTYpCisK Ky8qIE1TVkRYX0NNRFMsIE1BQ1JPQkxPQ0tfTlVNQkVSLCBNQl9OT19ZICovCisjZGVmaW5lIE1T VkRYX0NNRFNfTUFDUk9CTE9DS19OVU1CRVJfTUJfTk9fWV9NQVNLICgweDAwMDBGRjAwKQorI2Rl ZmluZSBNU1ZEWF9DTURTX01BQ1JPQkxPQ0tfTlVNQkVSX01CX05PX1lfU0hJRlQgKDgpCisKKy8q IE1TVkRYX0NNRFMsIE1BQ1JPQkxPQ0tfTlVNQkVSLCBNQl9OT19YICovCisjZGVmaW5lIE1TVkRY X0NNRFNfTUFDUk9CTE9DS19OVU1CRVJfTUJfTk9fWF9NQVNLICgweDAwMDAwMEZGKQorI2RlZmlu ZSBNU1ZEWF9DTURTX01BQ1JPQkxPQ0tfTlVNQkVSX01CX05PX1hfU0hJRlQgKDApCisKKyNkZWZp bmUgTVNWRFhfQ01EU19NQUNST0JMT0NLX1JFU0lEVUFMX0ZPUk1BVF9PRkZTRVQgKDB4MDQxOCkK KworI2RlZmluZSBNU1ZEWF9DTURTX0lOVEVSX0JMT0NLX1BSRURJQ1RJT05fT0ZGU0VUICgweDA0 MzApCisKKy8qIE1TVkRYX0NNRFMsIElOVEVSX0JMT0NLX1BSRURJQ1RJT04sIFJFRl9JTkRFWF9B X1ZBTElEICovCisjZGVmaW5lIE1TVkRYX0NNRFNfSU5URVJfQkxPQ0tfUFJFRElDVElPTl9SRUZf SU5ERVhfQV9WQUxJRF9NQVNLICgweDAwMDAwMDIwKQorI2RlZmluZSBNU1ZEWF9DTURTX0lOVEVS X0JMT0NLX1BSRURJQ1RJT05fUkVGX0lOREVYX0FfVkFMSURfU0hJRlQgKDUpCisKKy8qIE1TVkRY X0NNRFMsIElOVEVSX0JMT0NLX1BSRURJQ1RJT04sIElOVEVSX1BSRURfQkxPQ0tfU0laRSAqLwor I2RlZmluZSBNU1ZEWF9DTURTX0lOVEVSX0JMT0NLX1BSRURJQ1RJT05fSU5URVJfUFJFRF9CTE9D S19TSVpFX01BU0sgKDB4NzAwMDApCisjZGVmaW5lIE1TVkRYX0NNRFNfSU5URVJfQkxPQ0tfUFJF RElDVElPTl9JTlRFUl9QUkVEX0JMT0NLX1NJWkVfU0hJRlQgKDE2KQorCisvKiBNU1ZEWF9DTURT LCBJTlRFUl9CTE9DS19QUkVESUNUSU9OLCBSRUZfSU5ERVhfQSAqLworI2RlZmluZSBNU1ZEWF9D TURTX0lOVEVSX0JMT0NLX1BSRURJQ1RJT05fUkVGX0lOREVYX0FfTUFTSyAoMHgwMDAwMDAwRikK KyNkZWZpbmUgTVNWRFhfQ01EU19JTlRFUl9CTE9DS19QUkVESUNUSU9OX1JFRl9JTkRFWF9BX1NI SUZUICgwKQorCisvKiBNU1ZEWF9DTURTLCBJTlRFUl9CTE9DS19QUkVESUNUSU9OLCBSRUZfSU5E RVhfQiAqLworI2RlZmluZSBNU1ZEWF9DTURTX0lOVEVSX0JMT0NLX1BSRURJQ1RJT05fUkVGX0lO REVYX0JfTUFTSyAoMHgwMDAwMEYwMCkKKyNkZWZpbmUgTVNWRFhfQ01EU19JTlRFUl9CTE9DS19Q UkVESUNUSU9OX1JFRl9JTkRFWF9CX1NISUZUICg4KQorCisjZGVmaW5lIE1TVkRYX0NNRFNfTU9U SU9OX1ZFQ1RPUl9PRkZTRVQgKDB4MDUwMCkKKworI2RlZmluZSBNU1ZEWF9DT1JFX0NSX01TVkRY X0NPTU1BTkRfU1BBQ0VfT0ZGU0VUICgweDAwMjgpCisKKyNkZWZpbmUgTVNWRFhfQ09SRV9CQVNF CSgweDYwMCkKKwordm9pZCB2ZWRfdXBkYXRlX2ZyYW1lX2luZm8oc3RydWN0IHZlZF9wcml2YXRl ICp2ZWRfcHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKnRmaWxlLAl2b2lkICpjbWQpOworCit2 b2lkIHZlZF9iYWNrdXBfY21kKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYsCisJCQlzdHJ1 Y3QgZHJtX2ZpbGUgKnRmaWxlLAl2b2lkICpjbWQsCisJCQl1aW50MzJfdCBjbWRfc2l6ZSwgdWlu dDMyX3QgZGVibG9ja19jbWRfb2Zmc2V0KTsKKwordm9pZCB2ZWRfbXR4X21lc3NhZ2VfZHVtcChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKwordm9pZCB2ZWRfZG9fY29uY2VhbG1lbnQoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKTsKKwordm9pZCB2ZWRfZndfZXJyb3JfZGV0ZWN0ZWQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCQl1aW50MzJfdCBmZW5jZSwgdWludDMyX3QgZmxhZ3MpOwor CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9mdy5jIGIvZHJp dmVycy9ncHUvZHJtL2lwdnIvdmVkX2Z3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNDdmYmFkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3Zl ZF9mdy5jCkBAIC0wLDAgKzEsNjYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHZlZF9mdy5j OiBWRUQgaW5pdGlhbGl6YXRpb24gYW5kIG10eC1maXJtd2FyZSB1cGxvYWQKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICog Q29weXJpZ2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZCwgVUsKKyAqIENv cHlyaWdodCAoYykgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4 YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3 aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3Rv biwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8 ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRl ICJ2ZWRfZncuaCIKKyNpbmNsdWRlICJpcHZyX2dlbS5oIgorI2luY2x1ZGUgInZlZF9jbWQuaCIK KyNpbmNsdWRlICJ2ZWRfcmVnLmgiCisjaW5jbHVkZSAidmVkX2luaXQuaCIKKyNpbmNsdWRlICJp cHZyX2J1ZmZlci5oIgorI2luY2x1ZGUgImlwdnJfbW11LmgiCisjaW5jbHVkZSA8bGludXgvZmly bXdhcmUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorCisjZGVmaW5lIFVQTE9BRF9GV19CWV9ETUEgMQorI2RlZmluZSBTVEFDS0dVQVJE V09SRAkJCTB4MTAxMDEwMTAKKyNkZWZpbmUgTVNWRFhfTVRYX0RBVEFfTE9DQVRJT04JCTB4ODI4 ODAwMDAKKyNkZWZpbmUgVU5JTklUSUxJU0VfTUVNCQkJMHhjZGNkY2RjZAorI2RlZmluZSBGSVJN V0FSRV9OQU1FICJtc3ZkeF9md19tZmxkX0RFMi4wLmJpbiIKKworLyogVkVEIEZXIGhlYWRlciAq Lworc3RydWN0IHZlZF9mdyB7CisJdWludDMyX3QgdmVyOworCXVpbnQzMl90IHRleHRfc2l6ZTsK Kwl1aW50MzJfdCBkYXRhX3NpemU7CisJdWludDMyX3QgZGF0YV9sb2NhdGlvbjsKK307CisKKyNp ZiBVUExPQURfRldfQllfRE1BCisKK3N0YXRpYyB2b2lkIHZlZF9nZXRfbXR4X2NvbnRyb2xfZnJv bV9kYXNoKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgdmVk X3ByaXZhdGUgKnZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCWludDMyX3QgY291 bnQgPSAwOworCXVpbnQzMl90IHJlZ192YWwgPSAwOworCisJUkVHSU9fV1JJVEVfRklFTEQocmVn X3ZhbCwgTVNWRFhfTVRYX0RFQlVHLCBNVFhfREJHX0lTX1NMQVZFLCAxKTsKKwlSRUdJT19XUklU RV9GSUVMRChyZWdfdmFsLCBNU1ZEWF9NVFhfREVCVUcsIE1UWF9EQkdfR1BJT19JTiwgMHgwMik7 CisJVkVEX1JFR19XUklURTMyKHJlZ192YWwsIE1TVkRYX01UWF9ERUJVR19PRkZTRVQpOworCisJ ZG8geworCQlyZWdfdmFsID0gVkVEX1JFR19SRUFEMzIoTVNWRFhfTVRYX0RFQlVHX09GRlNFVCk7 CisJCWNvdW50Kys7CisJfSB3aGlsZSAoKChyZWdfdmFsICYgMHgxOCkgIT0gMCkgJiYgY291bnQg PCA1MDAwMCk7CisKKwlpZiAoY291bnQgPj0gNTAwMDApCisJCUlQVlJfREVCVUdfVkVEKCJWRUQ6 IHRpbWVvdXQgaW4gZ2V0X210eF9jb250cm9sX2Zyb21fZGFzaC5cbiIpOworCisJLyogU2F2ZSB0 aGUgYWNjZXNzIGNvbnRyb2wgcmVnaXN0ZXIuLi4qLworCXZlZF9wcml2LT52ZWRfZGFzaF9hY2Nl c3NfY3RybCA9IFZFRF9SRUdfUkVBRDMyKE1UWF9SQU1fQUNDRVNTX0NPTlRST0xfT0ZGU0VUKTsK K30KKworc3RhdGljIHZvaWQKK3ZlZF9yZWxlYXNlX210eF9jb250cm9sX2Zyb21fZGFzaChzdHJ1 Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IHZlZF9wcml2YXRlICp2 ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsKKworCS8qIHJlc3RvcmUgYWNjZXNzIGNv bnRyb2wgKi8KKwlWRURfUkVHX1dSSVRFMzIodmVkX3ByaXYtPnZlZF9kYXNoX2FjY2Vzc19jdHJs LCBNVFhfUkFNX0FDQ0VTU19DT05UUk9MX09GRlNFVCk7CisJLyogcmVsZWFzZSBidXMgKi8KKwlW RURfUkVHX1dSSVRFMzIoMHg0LCBNU1ZEWF9NVFhfREVCVUdfT0ZGU0VUKTsKK30KKworLyogZm9y IGZ1dHVyZSBkZWJ1ZyBpbmZvIG9mIG1zdmR4IHJlbGF0ZWQgcmVnaXN0ZXJzICovCitzdGF0aWMg dm9pZAordmVkX3NldHVwX2Z3X2R1bXAoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2 LCB1aW50MzJfdCBkbWFfY2hhbm5lbCkKK3sKKwlJUFZSX0RFQlVHX1JFRygiZHVtcCByZWdpc3Rl cnMgZHVyaW5nIGZ3IHVwbG9hZCBmb3IgZGVidWc6XG4iKTsKKwkvKiBmb3IgRE1BQyBSRUdJU1RF UiAqLworCUlQVlJfREVCVUdfUkVHKCJNVFhfU1lTQ19DRE1BQSBpcyAweCV4XG4iLAorCQkJVkVE X1JFR19SRUFEMzIoTVRYX1NZU0NfQ0RNQUFfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1U WF9TWVNDX0NETUFDIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihNVFhfU1lT Q19DRE1BQ19PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiRE1BQ19TRVRVUCB2YWx1ZSBpcyAw eCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoRE1BQ19ETUFDX1NFVFVQX09GRlNFVCArIGRtYV9j aGFubmVsKSk7CisJSVBWUl9ERUJVR19SRUcoIkRNQUNfRE1BQ19DT1VOVCB2YWx1ZSBpcyAweCV4 XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoRE1BQ19ETUFDX0NPVU5UX09GRlNFVCArIGRtYV9jaGFu bmVsKSk7CisJSVBWUl9ERUJVR19SRUcoIkRNQUNfRE1BQ19QRVJJUEhfT0ZGU0VUIHZhbHVlIGlz IDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihETUFDX0RNQUNfUEVSSVBIX09GRlNFVCArIGRt YV9jaGFubmVsKSk7CisJSVBWUl9ERUJVR19SRUcoIkRNQUNfRE1BQ19QRVJJUEhFUkFMX0FERFIg dmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKERNQUNfRE1BQ19QRVJJUEhFUkFM X0FERFJfT0ZGU0VUICsKKwkJCQkgICAgICAgZG1hX2NoYW5uZWwpKTsKKwlJUFZSX0RFQlVHX1JF RygiTVNWRFhfQ09OVFJPTCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoTVNW RFhfQ09OVFJPTF9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiRE1BQ19ETUFDX0lSUV9TVEFU IHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihETUFDX0RNQUNfSVJRX1NUQVRf T0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX01NVV9DT05UUk9MMCB2YWx1ZSBpcyAw eCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoTVNWRFhfTU1VX0NPTlRST0wwX09GRlNFVCkpOwor CUlQVlJfREVCVUdfUkVHKCJETUFDX0RNQUNfQ09VTlQgMjIyMiB2YWx1ZSBpcyAweCV4XG4iLAor CQkJVkVEX1JFR19SRUFEMzIoRE1BQ19ETUFDX0NPVU5UX09GRlNFVCArIGRtYV9jaGFubmVsKSk7 CisKKwkvKiBmb3IgTVRYIFJFR0lTVEVSICovCisJSVBWUl9ERUJVR19SRUcoIk1UWF9FTkFCTEVf T0ZGU0VUIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihNVFhfRU5BQkxFX09GRlNFVCkp OworCUlQVlJfREVCVUdfUkVHKCJNVFhfS0lDS19JTlBVVF9PRkZTRVQgdmFsdWUgaXMgMHgleFxu IiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1UWF9LSUNLX0lOUFVUX09GRlNFVCkpOworCUlQVlJfREVC VUdfUkVHKCJNVFhfUkVHX1JFQURfV1JJVEVfUkVRVUVTVF9PRkZTRVQgdmFsdWUgaXMgMHgleFxu IiwKKwkJVkVEX1JFR19SRUFEMzIoTVRYX1JFR0lTVEVSX1JFQURfV1JJVEVfUkVRVUVTVF9PRkZT RVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVRYX1JBTV9BQ0NFU1NfQ09OVFJPTF9PRkZTRVQgdmFs dWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1UWF9SQU1fQUNDRVNTX0NPTlRST0xf T0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1UWF9SQU1fQUNDRVNTX1NUQVRVU19PRkZTRVQg dmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1UWF9SQU1fQUNDRVNTX1NUQVRV U19PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVRYX1NZU0NfVElNRVJESVZfT0ZGU0VUIHZh bHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihNVFhfU1lTQ19USU1FUkRJVl9PRkZT RVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVRYX1NZU0NfQ0RNQUNfT0ZGU0VUIHZhbHVlIGlzIDB4 JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihNVFhfU1lTQ19DRE1BQ19PRkZTRVQpKTsKKwlJUFZS X0RFQlVHX1JFRygiTVRYX1NZU0NfQ0RNQUFfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlW RURfUkVHX1JFQUQzMihNVFhfU1lTQ19DRE1BQV9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygi TVRYX1NZU0NfQ0RNQVMwX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFE MzIoTVRYX1NZU0NfQ0RNQVMwX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJNVFhfU1lTQ19D RE1BVF9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1UWF9TWVND X0NETUFUX09GRlNFVCkpOworCisJLyogZm9yIE1TVkRYIENPUkUgUkVHSVNURVIgKi8KKwlJUFZS X0RFQlVHX1JFRygiTVNWRFhfQ09OVFJPTF9PRkZTRVQgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdf UkVBRDMyKE1TVkRYX0NPTlRST0xfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX0lO VEVSUlVQVF9DTEVBUl9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMy KE1TVkRYX0lOVEVSUlVQVF9DTEVBUl9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVNWRFhf SU5URVJSVVBUX1NUQVRVU19PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVB RDMyKE1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1N U1ZEWF9IT1NUX0lOVEVSUlVQVF9FTkFCTEVfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlW RURfUkVHX1JFQUQzMihNU1ZEWF9IT1NUX0lOVEVSUlVQVF9FTkFCTEVfT0ZGU0VUKSk7CisJSVBW Ul9ERUJVR19SRUcoIk1TVkRYX01BTl9DTEtfRU5BQkxFX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4i LAorCQkJVkVEX1JFR19SRUFEMzIoTVNWRFhfTUFOX0NMS19FTkFCTEVfT0ZGU0VUKSk7CisJSVBW Ul9ERUJVR19SRUcoIk1TVkRYX0NPUkVfSURfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlW RURfUkVHX1JFQUQzMihNU1ZEWF9DT1JFX0lEX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJN U1ZEWF9NTVVfU1RBVFVTX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFE MzIoTVNWRFhfTU1VX1NUQVRVU19PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiRkVfTVNWRFhf V0RUX0NPTlRST0xfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihG RV9NU1ZEWF9XRFRfQ09OVFJPTF9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiRkVfTVNWRFhf V0RUSU1FUl9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKEZFX01T VkRYX1dEVElNRVJfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIkJFX01TVkRYX1dEVF9DT05U Uk9MX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoQkVfTVNWRFhf V0RUX0NPTlRST0xfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIkJFX01TVkRYX1dEVElNRVJf T0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihCRV9NU1ZEWF9XRFRJ TUVSX09GRlNFVCkpOworCisJLyogZm9yIE1TVkRYIFJFTkRFQyBSRUdJU1RFUiAqLworCUlQVlJf REVCVUdfUkVHKCJWRUNfU0hJRlRSRUdfQ09OVFJPTF9PRkZTRVQgaXMgMHgleFxuIiwKKwkJCVZF RF9SRUdfUkVBRDMyKFZFQ19TSElGVFJFR19DT05UUk9MX09GRlNFVCkpOworCUlQVlJfREVCVUdf UkVHKCJNU1ZEWF9SRU5ERUNfQ09OVFJPTDBfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlW RURfUkVHX1JFQUQzMihNU1ZEWF9SRU5ERUNfQ09OVFJPTDBfT0ZGU0VUKSk7CisJSVBWUl9ERUJV R19SRUcoIk1TVkRYX1JFTkRFQ19CVUZGRVJfU0laRV9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwK KwkJCVZFRF9SRUdfUkVBRDMyKE1TVkRYX1JFTkRFQ19CVUZGRVJfU0laRV9PRkZTRVQpKTsKKwlJ UFZSX0RFQlVHX1JFRygiTVNWRFhfUkVOREVDX0JBU0VfQUREUjBfT0ZGU0VUIHZhbHVlIGlzIDB4 JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9SRU5ERUNfQkFTRV9BRERSMF9PRkZTRVQp KTsKKwlJUFZSX0RFQlVHX1JFRygiTU1TVkRYX1JFTkRFQ19CQVNFX0FERFIxX09GRlNFVCB2YWx1 ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoTVNWRFhfUkVOREVDX0JBU0VfQUREUjFf T0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX1JFTkRFQ19SRUFEX0RBVEFfT0ZGU0VU IHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9SRU5ERUNfUkVBRF9E QVRBX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJNU1ZEWF9SRU5ERUNfQ09OVEVYVDBfT0ZG U0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9SRU5ERUNfQ09O VEVYVDBfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX1JFTkRFQ19DT05URVhUMV9P RkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1TVkRYX1JFTkRFQ19D T05URVhUMV9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVNWRFhfQ01EU19FTkRfU0xJQ0Vf UElDVFVSRV9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1TVkRY X0NNRFNfRU5EX1NMSUNFX1BJQ1RVUkVfT0ZGU0VUKSk7CisKKwlJUFZSX0RFQlVHX1JFRygiTVNW RFhfTU1VX01FTV9SRVEgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1TVkRY X01NVV9NRU1fUkVRX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJNU1ZEWF9TWVNfTUVNT1JZ X0RFQlVHMiB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoMHg2ZmMpKTsKK30K Kworc3RhdGljIHZvaWQgdmVkX3VwbG9hZF9mdyhzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2 X3ByaXYsCisJCQkJdWludDMyX3QgYWRkcmVzcywgY29uc3QgdWludDMyX3Qgd29yZHMpCit7CisJ dWludDMyX3QgcmVnX3ZhbCA9IDA7CisJdWludDMyX3QgY21kOworCXVpbnQzMl90IHVDb3VudFJl Zywgb2Zmc2V0LCBtbXVfcHRkOworCXVpbnQzMl90IHNpemUgPSB3b3JkcyAqIDQ7IC8qIGJ5dGUg Y291bnQgKi8KKwl1aW50MzJfdCBkbWFfY2hhbm5lbCA9IDA7IC8qIFNldHVwIGEgU2ltcGxlIERN QSBmb3IgQ2gwICovCisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52 ZWRfcHJpdmF0ZTsKKworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IFVwbG9hZCBmaXJtd2FyZSBieSBE TUEuXG4iKTsKKwl2ZWRfZ2V0X210eF9jb250cm9sX2Zyb21fZGFzaChkZXZfcHJpdik7CisKKwkv KgorCSAqIGRtYSB0cmFuc2ZlcnMgdG8vZnJvbSB0aGUgbXR4IGhhdmUgdG8gYmUgMzItYml0IGFs aWduZWQgYW5kCisJICogaW4gbXVsdGlwbGVzIG9mIDMyIGJpdHMKKwkgKi8KKwlWRURfUkVHX1dS SVRFMzIoYWRkcmVzcywgTVRYX1NZU0NfQ0RNQUFfT0ZGU0VUKTsKKworCS8qIGJ1cnN0IHNpemUg aW4gbXVsdGlwbGVzIG9mIDY0IGJpdHMgKGFsbG93ZWQgdmFsdWVzIGFyZSAyIG9yIDQpICovCisJ UkVHSU9fV1JJVEVfRklFTERfTElURShyZWdfdmFsLCBNVFhfU1lTQ19DRE1BQywgQlVSU1RTSVpF LCA0KTsKKwkvKiBmYWxzZSBtZWFucyB3cml0ZSB0byBtdHggbWVtLCB0cnVlIG1lYW5zIHJlYWQg ZnJvbSBtdHggbWVtICovCisJUkVHSU9fV1JJVEVfRklFTERfTElURShyZWdfdmFsLCBNVFhfU1lT Q19DRE1BQywgUk5XLCAwKTsKKwkvKiBiZWdpbiB0cmFuc2ZlciAqLworCVJFR0lPX1dSSVRFX0ZJ RUxEX0xJVEUocmVnX3ZhbCwgTVRYX1NZU0NfQ0RNQUMsIEVOQUJMRSwJMSk7CisJLyogc3BlY2lm aWVzIHRyYW5zZmVyIHNpemUgb2YgdGhlIERNQSBvcGVyYXRpb24gYnkgMzItYml0IHdvcmRzICov CisJUkVHSU9fV1JJVEVfRklFTERfTElURShyZWdfdmFsLCBNVFhfU1lTQ19DRE1BQywgTEVOR1RI LAl3b3Jkcyk7CisJVkVEX1JFR19XUklURTMyKHJlZ192YWwsIE1UWF9TWVNDX0NETUFDX09GRlNF VCk7CisKKwkvKiB0b2dnbGUgY2hhbm5lbCAwIHVzYWdlIGJldHdlZW4gbXR4IGFuZCBvdGhlciBt c3ZkeCBwZXJpcGhlcmFscyAqLworCXsKKwkJcmVnX3ZhbCA9IFZFRF9SRUdfUkVBRDMyKE1TVkRY X0NPTlRST0xfT0ZGU0VUKTsKKwkJUkVHSU9fV1JJVEVfRklFTEQocmVnX3ZhbCwgTVNWRFhfQ09O VFJPTCwgRE1BQ19DSDBfU0VMRUNULCAgMCk7CisJCVZFRF9SRUdfV1JJVEUzMihyZWdfdmFsLCBN U1ZEWF9DT05UUk9MX09GRlNFVCk7CisJfQorCisJLyogQ2xlYXIgdGhlIERNQUMgU3RhdHMgKi8K KwlWRURfUkVHX1dSSVRFMzIoMCAsIERNQUNfRE1BQ19JUlFfU1RBVF9PRkZTRVQgKyBkbWFfY2hh bm5lbCk7CisKKwlvZmZzZXQgPSB2ZWRfcHJpdi0+Zndfb2Zmc2V0OworCUlQVlJfREVCVUdfVkVE KCJmdyBncHUgb2Zmc2V0IGlzIDB4JXguXG4iLCBvZmZzZXQpOworCisJLyogdXNlIGJhbmsgMCAq LworCWNtZCA9IDA7CisJVkVEX1JFR19XUklURTMyKGNtZCwgTVNWRFhfTU1VX0JBTktfSU5ERVhf T0ZGU0VUKTsKKworCS8qIFdyaXRlIFBURCB0byBtbXUgYmFzZSAwKi8KKwltbXVfcHRkID0gaXB2 cl9nZXRfZGVmYXVsdF9wZF9hZGRyKGRldl9wcml2LT5tbXUpOworCVZFRF9SRUdfV1JJVEUzMiht bXVfcHRkLCBNU1ZEWF9NTVVfRElSX0xJU1RfQkFTRV9PRkZTRVQgKyAwKTsKKwlJUFZSX0RFQlVH X1ZFRCgibW11X3B0ZCBpcyAlZC5cbiIsIG1tdV9wdGQpOworCisJLyogSW52YWxpZGF0ZSAqLwor CXJlZ192YWwgPSBWRURfUkVHX1JFQUQzMihNU1ZEWF9NTVVfQ09OVFJPTDBfT0ZGU0VUKTsKKwly ZWdfdmFsICY9IH4weGY7CisJUkVHSU9fV1JJVEVfRklFTEQocmVnX3ZhbCwgTVNWRFhfTU1VX0NP TlRST0wwLCBNTVVfSU5WQUxEQywgMSk7CisJVkVEX1JFR19XUklURTMyKHJlZ192YWwsIE1TVkRY X01NVV9DT05UUk9MMF9PRkZTRVQpOworCisJVkVEX1JFR19XUklURTMyKG9mZnNldCwgRE1BQ19E TUFDX1NFVFVQX09GRlNFVCArIGRtYV9jaGFubmVsKTsKKworCS8qIE9ubHkgdXNlIGEgc2luZ2xl IGRtYSAtIGFzc2VydCB0aGF0IHRoaXMgaXMgdmFsaWQgKi8KKwlpZiAoKHNpemUgLyA0KSA+PSAo MSA8PCAxNSkpIHsKKwkJSVBWUl9FUlJPUigiRE1BIHNpemUgYmV5b25kIGxpbWl0LCBhYm9ydCBm aXJtd2FyZSB1cGxvYWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXVDb3VudFJlZyA9IFBTQl9E TUFDX1ZBTFVFX0NPVU5UKFBTQl9ETUFDX0JTV0FQX05PX1NXQVAsIDAsCisJCQkJCSBQU0JfRE1B Q19ESVJfTUVNX1RPX1BFUklQSCwgMCwKKwkJCQkJIChzaXplIC8gNCkpOworCS8qIFNldCB0aGUg bnVtYmVyIG9mIGJ5dGVzIHRvIGRtYSovCisJVkVEX1JFR19XUklURTMyKHVDb3VudFJlZywgRE1B Q19ETUFDX0NPVU5UX09GRlNFVCArIGRtYV9jaGFubmVsKTsKKworCWNtZCA9IFBTQl9ETUFDX1ZB TFVFX1BFUklQSF9QQVJBTShQU0JfRE1BQ19BQ0NfREVMXzAsCisJCQkJCSAgUFNCX0RNQUNfSU5D Ul9PRkYsCisJCQkJCSAgUFNCX0RNQUNfQlVSU1RfMik7CisJVkVEX1JFR19XUklURTMyKGNtZCwg RE1BQ19ETUFDX1BFUklQSF9PRkZTRVQgKyBkbWFfY2hhbm5lbCk7CisKKwkvKiBTZXQgZGVzdGlu YXRpb24gcG9ydCBmb3IgZG1hICovCisJY21kID0gMDsKKwlSRUdJT19XUklURV9GSUVMRChjbWQs IERNQUNfRE1BQ19QRVJJUEhFUkFMX0FERFIsIEFERFIsCisJCQkgIE1UWF9TWVNDX0NETUFUX09G RlNFVCk7CisJVkVEX1JFR19XUklURTMyKGNtZCwgRE1BQ19ETUFDX1BFUklQSEVSQUxfQUREUl9P RkZTRVQgKyBkbWFfY2hhbm5lbCk7CisKKworCS8qIEZpbmFsbHksIHJld3JpdGUgdGhlIGNvdW50 IHJlZ2lzdGVyIHdpdGggdGhlIGVuYWJsZSBiaXQgc2V0ICovCisJVkVEX1JFR19XUklURTMyKHVD b3VudFJlZyB8IERNQUNfRE1BQ19DT1VOVF9FTl9NQVNLLAorCQkJRE1BQ19ETUFDX0NPVU5UX09G RlNFVCArIGRtYV9jaGFubmVsKTsKKworCS8qIFdhaXQgZm9yIGFsbCB0byBiZSBkb25lICovCisJ aWYgKHZlZF93YWl0X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwKKwkJCQkgIERNQUNfRE1BQ19JUlFf U1RBVF9PRkZTRVQgKyBkbWFfY2hhbm5lbCwKKwkJCQkgIERNQUNfRE1BQ19JUlFfU1RBVF9UUkFO U0ZFUl9GSU5fTUFTSywKKwkJCQkgIERNQUNfRE1BQ19JUlFfU1RBVF9UUkFOU0ZFUl9GSU5fTUFT SywKKwkJCQkgIDIwMDAwMDAsIDUpKSB7CisJCXZlZF9zZXR1cF9md19kdW1wKGRldl9wcml2LCBk bWFfY2hhbm5lbCk7CisJCXZlZF9yZWxlYXNlX210eF9jb250cm9sX2Zyb21fZGFzaChkZXZfcHJp dik7CisJCXJldHVybjsKKwl9CisKKwkvKiBBc3NlcnQgdGhhdCB0aGUgTVRYIERNQSBwb3J0IGlz IGFsbCBkb25lIGFzd2VsbCAqLworCWlmICh2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYs CisJCQlNVFhfU1lTQ19DRE1BUzBfT0ZGU0VULAorCQkJMSwgMSwgMjAwMDAwMCwgNSkpIHsKKwkJ dmVkX3JlbGVhc2VfbXR4X2NvbnRyb2xfZnJvbV9kYXNoKGRldl9wcml2KTsKKwkJcmV0dXJuOwor CX0KKworCXZlZF9yZWxlYXNlX210eF9jb250cm9sX2Zyb21fZGFzaChkZXZfcHJpdik7CisKKwlJ UFZSX0RFQlVHX1ZFRCgiVkVEOiBVcGxvYWQgZG9uZVxuIik7Cit9CisKKyNlbHNlCisKK3N0YXRp YyB2b2lkIHZlZF91cGxvYWRfZncoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LAor CQkJCWNvbnN0IHVpbnQzMl90IGRhdGFfbWVtLAorCQkJCXVpbnQzMl90IHJhbV9iYW5rX3NpemUs IHVpbnQzMl90IGFkZHJlc3MsCisJCQkJY29uc3QgdWludDMyX3Qgd29yZHMsCisJCQkJY29uc3Qg dWludDMyX3QgKiBjb25zdCBkYXRhKQoreworCXVpbnQzMl90IGxvb3AsIGN0cmwsIHJhbV9pZCwg YWRkciwgY3VyX2JhbmsgPSAodWludDMyX3QpIH4wOworCXVpbnQzMl90IGFjY2Vzc19jdHJsOwor CisJSVBWUl9ERUJVR19WRUQoIlZFRDogVXBsb2FkIGZpcm13YXJlIGJ5IHJlZ2lzdGVyIGludGVy ZmFjZS5cbiIpOworCS8qIFNhdmUgdGhlIGFjY2VzcyBjb250cm9sIHJlZ2lzdGVyLi4uICovCisJ YWNjZXNzX2N0cmwgPSBWRURfUkVHX1JFQUQzMihNVFhfUkFNX0FDQ0VTU19DT05UUk9MX09GRlNF VCk7CisKKwkvKiBXYWl0IGZvciBNQ01TVEFUIHRvIGJlY29tZSBiZSBpZGxlIDEgKi8KKwl2ZWRf d2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsIE1UWF9SQU1fQUNDRVNTX1NUQVRVU19PRkZTRVQs CisJCQkgICAgICAxLAkvKiBSZXF1aXJlZCBWYWx1ZSAqLworCQkJICAgICAgMHhmZmZmZmZmZiwg LyogRW5hYmxlcyAqLworCQkJICAgICAgMjAwMDAwMCwgNSk7CisKKwlmb3IgKGxvb3AgPSAwOyBs b29wIDwgd29yZHM7IGxvb3ArKykgeworCQlyYW1faWQgPSBkYXRhX21lbSArIChhZGRyZXNzIC8g cmFtX2Jhbmtfc2l6ZSk7CisJCWlmIChyYW1faWQgIT0gY3VyX2JhbmspIHsKKwkJCWFkZHIgPSBh ZGRyZXNzID4+IDI7CisJCQljdHJsID0gMDsKKwkJCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUoY3Ry bCwKKwkJCQkJICAgICAgIE1UWF9SQU1fQUNDRVNTX0NPTlRST0wsCisJCQkJCSAgICAgICBNVFhf TUNNSUQsIHJhbV9pZCk7CisJCQlSRUdJT19XUklURV9GSUVMRF9MSVRFKGN0cmwsCisJCQkJCSAg ICAgICBNVFhfUkFNX0FDQ0VTU19DT05UUk9MLAorCQkJCQkgICAgICAgTVRYX01DTV9BRERSLCBh ZGRyKTsKKwkJCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUoY3RybCwKKwkJCQkJICAgICAgIE1UWF9S QU1fQUNDRVNTX0NPTlRST0wsCisJCQkJCSAgICAgICBNVFhfTUNNQUksIDEpOworCQkJVkVEX1JF R19XUklURTMyKGN0cmwsIE1UWF9SQU1fQUNDRVNTX0NPTlRST0xfT0ZGU0VUKTsKKwkJCWN1cl9i YW5rID0gcmFtX2lkOworCQl9CisJCWFkZHJlc3MgKz0gNDsKKworCQlWRURfUkVHX1dSSVRFMzIo ZGF0YVtsb29wXSwKKwkJCQlNVFhfUkFNX0FDQ0VTU19EQVRBX1RSQU5TRkVSX09GRlNFVCk7CisK KwkJLyogV2FpdCBmb3IgTUNNU1RBVCB0byBiZWNvbWUgYmUgaWRsZSAxICovCisJCXZlZF93YWl0 X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwgTVRYX1JBTV9BQ0NFU1NfU1RBVFVTX09GRlNFVCwKKwkJ CQkgICAgICAxLAkvKiBSZXF1aXJlZCBWYWx1ZSAqLworCQkJCSAgICAgIDB4ZmZmZmZmZmYsIC8q IEVuYWJsZXMgKi8KKwkJCQkgICAgICAyMDAwMDAwLCA1KTsKKwl9CisJSVBWUl9ERUJVR19WRUQo IlZFRDogVXBsb2FkIGRvbmVcbiIpOworCisJLyogUmVzdG9yZSB0aGUgYWNjZXNzIGNvbnRyb2wg cmVnaXN0ZXIuLi4gKi8KKwlWRURfUkVHX1dSSVRFMzIoYWNjZXNzX2N0cmwsIE1TVkRYX01UWF9S QU1fQUNDRVNTX0NPTlRST0wpOworfQorCisjZW5kaWYKKworc3RhdGljIGludDMyX3QgdmVkX2dl dF9md19ibyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBmaXJt d2FyZSAqKnJhdywgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludDMyX3QgcmMsIGZ3X3NpemU7CisJdm9pZCAq cHRyID0gTlVMTDsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2ID0gZGV2X3ByaXYtPnZl ZF9wcml2YXRlOworCXZvaWQgKmZ3X2JvX2FkZHIgPSBOVUxMOworCXVpbnQzMl90ICpsYXN0X3dv cmQ7CisJc3RydWN0IHZlZF9mdyAqZnc7CisKKwlyYyA9IHJlcXVlc3RfZmlybXdhcmUocmF3LCBu YW1lLCAmZGV2LT5wbGF0Zm9ybWRldi0+ZGV2KTsKKwlpZiAoKnJhdyA9PSBOVUxMIHx8IHJjIDwg MCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6ICVzIHJlcXVlc3RfZmlybXdhcmUgZmFpbGVkOiBSZWFz b24gJWQuXG4iLAorCQkJICBuYW1lLCByYyk7CisJCXJldHVybiAxOworCX0KKworCWlmICgoKnJh dyktPnNpemUgPCBzaXplb2Yoc3RydWN0IHZlZF9mdykpIHsKKwkJSVBWUl9FUlJPUigiVkVEOiAl cyBpcyBpcyBub3QgY29ycmVjdCBzaXplKCV6ZCkuXG4iLAorCQkJICBuYW1lLCAoKnJhdyktPnNp emUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwdHIgPSAodm9pZCAqKSgoKnJhdykpLT5kYXRhOwor CWlmICghcHRyKSB7CisJCUlQVlJfRVJST1IoIlZFRDogRmFpbGVkIHRvIGxvYWQgJXMuXG4iLCBu YW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogYW5vdGhlciBzYW5pdHkgY2hlY2suLi4gKi8K Kwlmd19zaXplID0gc2l6ZW9mKHN0cnVjdCB2ZWRfZncpICsKKwkJICBzaXplb2YodWludDMyX3Qp ICogKChzdHJ1Y3QgdmVkX2Z3ICopIHB0ciktPnRleHRfc2l6ZSArCisJCSAgc2l6ZW9mKHVpbnQz Ml90KSAqICgoc3RydWN0IHZlZF9mdyAqKSBwdHIpLT5kYXRhX3NpemU7CisJaWYgKCgqcmF3KS0+ c2l6ZSA8IGZ3X3NpemUpIHsKKwkJSVBWUl9FUlJPUigiVkVEOiAlcyBpcyBpcyBub3QgY29ycmVj dCBzaXplKCV6ZCkuXG4iLAorCQkJICBuYW1lLCAoKnJhdyktPnNpemUpOworCQlyZXR1cm4gMTsK Kwl9CisKKwlmd19ib19hZGRyID0gaXB2cl9nZW1fb2JqZWN0X3ZtYXAodmVkX3ByaXYtPmZ3X2Jv KTsKKwlpZiAoSVNfRVJSKGZ3X2JvX2FkZHIpKSB7CisJCUlQVlJfRVJST1IoIlZFRDoga21hcCBm YWlsZWQgZm9yIGZ3IGJ1ZmZlci5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmdyA9IChzdHJ1 Y3QgdmVkX2Z3ICopcHRyOworCW1lbXNldChmd19ib19hZGRyLCBVTklOSVRJTElTRV9NRU0sIHZl ZF9wcml2LT5tdHhfbWVtX3NpemUpOworCW1lbWNweShmd19ib19hZGRyLCBwdHIgKyBzaXplb2Yo c3RydWN0IHZlZF9mdyksCisJICAgICAgIHNpemVvZih1aW50MzJfdCkgKiBmdy0+dGV4dF9zaXpl KTsKKwltZW1jcHkoZndfYm9fYWRkciArIChmdy0+ZGF0YV9sb2NhdGlvbiAtIE1TVkRYX01UWF9E QVRBX0xPQ0FUSU9OKSwKKwkgICAgICAgKHZvaWQgKilwdHIgKyBzaXplb2Yoc3RydWN0IHZlZF9m dykgKyBzaXplb2YodWludDMyX3QpICogZnctPnRleHRfc2l6ZSwKKwkgICAgICAgc2l6ZW9mKHVp bnQzMl90KSAqIGZ3LT5kYXRhX3NpemUpOworCWxhc3Rfd29yZCA9ICh1aW50MzJfdCAqKShmd19i b19hZGRyICsgdmVkX3ByaXYtPm10eF9tZW1fc2l6ZSAtIDQpOworCS8qCisJICogV3JpdGUgYSBr bm93IHZhbHVlIHRvIGxhc3Qgd29yZCBpbiBtdHggbWVtb3J5CisJICogVXNlZnVsbCBmb3IgZGV0 ZWN0aW9uIG9mIHN0YWNrIG92ZXJydW4KKwkgKi8KKwkqbGFzdF93b3JkID0gU1RBQ0tHVUFSRFdP UkQ7CisKKwl2dW5tYXAoZndfYm9fYWRkcik7CisJSVBWUl9ERUJVR19WRUQoIlZFRDogcmVsZWFz aW5nIGZpcm13YXJlIHJlc291Y2VzLlxuIik7CisJSVBWUl9ERUJVR19WRUQoIlZFRDogTG9hZCBm aXJtd2FyZSBpbnRvIEJPIHN1Y2Nlc3NmdWxseS5cbiIpOworCXJlbGVhc2VfZmlybXdhcmUoKnJh dyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdWludDMyX3QgKgordmVkX2dldF9mdyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipyYXcsIGNoYXIgKm5h bWUpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKKwlpbnQzMl90IHJjLCBmd19zaXplOworCXZvaWQgKnB0ciA9IE5VTEw7CisJc3RydWN0 IHZlZF9mdyAqZnc7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52 ZWRfcHJpdmF0ZTsKKworCXJjID0gcmVxdWVzdF9maXJtd2FyZShyYXcsIG5hbWUsICZkZXYtPnBs YXRmb3JtZGV2LT5kZXYpOworCWlmICgqcmF3ID09IE5VTEwgfHwgcmMgPCAwKSB7CisJCUlQVlJf RVJST1IoIlZFRDogJXMgcmVxdWVzdF9maXJtd2FyZSBmYWlsZWQ6IFJlYXNvbiAlZFxuIiwKKwkJ CSAgbmFtZSwgcmMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoKCpyYXcpLT5zaXplIDwg c2l6ZW9mKHN0cnVjdCB2ZWRfZncpKSB7CisJCUlQVlJfRVJST1IoIlZFRDogJXMgaXMgaXMgbm90 IGNvcnJlY3Qgc2l6ZSglemQpXG4iLAorCQkJICBuYW1lLCAoKnJhdyktPnNpemUpOworCQlyZWxl YXNlX2Zpcm13YXJlKCpyYXcpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwdHIgPSAoaW50ICop KCgqcmF3KSktPmRhdGE7CisJaWYgKCFwdHIpIHsKKwkJSVBWUl9FUlJPUigiVkVEOiBGYWlsZWQg dG8gbG9hZCAlcy5cbiIsIG5hbWUpOworCQlyZWxlYXNlX2Zpcm13YXJlKCpyYXcpOworCQlyZXR1 cm4gTlVMTDsKKwl9CisJZncgPSAoc3RydWN0IHZlZF9mdyAqKXB0cjsKKworCS8qIGFub3RoZXIg c2FuaXR5IGNoZWNrLi4uICovCisJZndfc2l6ZSA9IHNpemVvZihmdykgKworCQkgIHNpemVvZih1 aW50MzJfdCkgKiBmdy0+dGV4dF9zaXplICsKKwkJICBzaXplb2YodWludDMyX3QpICogZnctPmRh dGFfc2l6ZTsKKwlpZiAoKCpyYXcpLT5zaXplIDwgZndfc2l6ZSkgeworCQlJUFZSX0VSUk9SKCJW RUQ6ICVzIGlzIGlzIG5vdCBjb3JyZWN0IHNpemUoJXpkKS5cbiIsCisJCQkgICBuYW1lLCAoKnJh dyktPnNpemUpOworCQlyZWxlYXNlX2Zpcm13YXJlKCpyYXcpOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwl2ZWRfcHJpdi0+dmVkX2Z3X3B0ciA9IGt6YWxsb2MoZndfc2l6ZSwgR0ZQX0tFUk5FTCk7 CisJaWYgKHZlZF9wcml2LT52ZWRfZndfcHRyID09IE5VTEwpCisJCUlQVlJfRVJST1IoIlZFRDog YWxsb2NhdGUgRlcgYnVmZmVyIGZhaWxlZC5cbiIpOworCWVsc2UgeworCQltZW1jcHkodmVkX3By aXYtPnZlZF9md19wdHIsIHB0ciwgZndfc2l6ZSk7CisJCXZlZF9wcml2LT52ZWRfZndfc2l6ZSA9 IGZ3X3NpemU7CisJfQorCisJSVBWUl9ERUJVR19WRUQoIlZFRDogcmVsZWFzaW5nIGZpcm13YXJl IHJlc291Y2VzLlxuIik7CisJcmVsZWFzZV9maXJtd2FyZSgqcmF3KTsKKworCXJldHVybiB2ZWRf cHJpdi0+dmVkX2Z3X3B0cjsKK30KKworc3RhdGljIHZvaWQKK3ZlZF93cml0ZV9tdHhfY29yZV9y ZWcoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgIGNvbnN0IHVp bnQzMl90IGNvcmVfcmVnLCBjb25zdCB1aW50MzJfdCB2YWwpCit7CisJdWludDMyX3QgcmVnID0g MDsKKworCS8qIFB1dCBkYXRhIGluIE1UWF9SV19EQVRBICovCisJVkVEX1JFR19XUklURTMyKHZh bCwgTVRYX1JFR0lTVEVSX1JFQURfV1JJVEVfREFUQV9PRkZTRVQpOworCisJLyogRFJFQURZIGlz IHNldCB0byAwIGFuZCByZXF1ZXN0IGEgd3JpdGUgKi8KKwlyZWcgPSBjb3JlX3JlZzsKKwlSRUdJ T19XUklURV9GSUVMRF9MSVRFKHJlZywgTVRYX1JFR0lTVEVSX1JFQURfV1JJVEVfUkVRVUVTVCwK KwkJCSAgICAgICBNVFhfUk5XLCAwKTsKKwlSRUdJT19XUklURV9GSUVMRF9MSVRFKHJlZywgTVRY X1JFR0lTVEVSX1JFQURfV1JJVEVfUkVRVUVTVCwKKwkJCSAgICAgICBNVFhfRFJFQURZLCAwKTsK KwlWRURfUkVHX1dSSVRFMzIocmVnLCBNVFhfUkVHSVNURVJfUkVBRF9XUklURV9SRVFVRVNUX09G RlNFVCk7CisKKwl2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsCisJCQkgICAgICBNVFhf UkVHSVNURVJfUkVBRF9XUklURV9SRVFVRVNUX09GRlNFVCwKKwkJCSAgICAgIE1UWF9SRUdJU1RF Ul9SRUFEX1dSSVRFX1JFUVVFU1RfTVRYX0RSRUFEWV9NQVNLLAorCQkJICAgICAgTVRYX1JFR0lT VEVSX1JFQURfV1JJVEVfUkVRVUVTVF9NVFhfRFJFQURZX01BU0ssCisJCQkgICAgICAyMDAwMDAw LCA1KTsKK30KKworaW50MzJfdCB2ZWRfYWxsb2NfZndfYm8oc3RydWN0IGRybV9pcHZyX3ByaXZh dGUgKmRldl9wcml2KQoreworCXVpbnQzMl90IGNvcmVfcmV2OworCXN0cnVjdCB2ZWRfcHJpdmF0 ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisKKwljb3JlX3JldiA9IFZFRF9S RUdfUkVBRDMyKE1TVkRYX0NPUkVfUkVWX09GRlNFVCk7CisKKwlpZiAoKGNvcmVfcmV2ICYgMHhm ZmZmZmYpIDwgMHgwMjAwMDApCisJCXZlZF9wcml2LT5tdHhfbWVtX3NpemUgPSAxNiAqIDEwMjQ7 CisJZWxzZQorCQl2ZWRfcHJpdi0+bXR4X21lbV9zaXplID0gNTYgKiAxMDI0OworCisJSVBWUl9E RUJVR19JTklUKCJWRUQ6IE1UWCBtZW0gc2l6ZSBpcyAweCUwOHggYnl0ZXMsIgorCQkJImFsbG9j YXRlIGZpcm13YXJlIEJPIHNpemUgMHglMDh4LlxuIiwKKwkJCXZlZF9wcml2LT5tdHhfbWVtX3Np emUsCisJCQl2ZWRfcHJpdi0+bXR4X21lbV9zaXplICsgNDA5Nik7CisKKwkvKiBBbGxvY2F0ZSB0 aGUgbmV3IG9iamVjdCAqLworCXZlZF9wcml2LT5md19ibyA9IGlwdnJfZ2VtX29ial9jcmVhdGVf YW5kX2JpbmQoZGV2X3ByaXYtPmRldiwKKwkJCQkJCXZlZF9wcml2LT5tdHhfbWVtX3NpemUgKyA0 MDk2KTsKKwlpZiAodmVkX3ByaXYtPmZ3X2JvID09IE5VTEwpIHsKKwkJSVBWUl9FUlJPUigiVkVE OiBmYWlsZWQgdG8gYWxsb2NhdGUgZncgYnVmZmVyLlxuIik7CisJCXZlZF9wcml2LT5md19ibyA9 IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl2ZWRfcHJpdi0+Zndfb2Zmc2V0ID0gaXB2 cl9nZW1fb2JqX21tdV9vZmZzZXQodmVkX3ByaXYtPmZ3X2JvKTsKKwlpZiAoSVBWUl9JU19FUlIo dmVkX3ByaXYtPmZ3X29mZnNldCkpIHsKKwkJdmVkX3ByaXYtPmZ3X2JvID0gTlVMTDsKKwkJcmV0 dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludDMyX3QgdmVkX3NldHVwX2Z3 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCByYW1fYmFua19zaXplOworCXN0 cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisJaW50 MzJfdCByZXQgPSAwOworCXN0cnVjdCB2ZWRfZncgKmZ3OworCXVpbnQzMl90ICpmd19wdHIgPSBO VUxMOworCXVpbnQzMl90ICp0ZXh0X3B0ciA9IE5VTEw7CisJdWludDMyX3QgKmRhdGFfcHRyID0g TlVMTDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnJhdyA9IE5VTEw7CisKKwkvKiB0b2RvIDog QXNzZXJ0IHRoZSBjbG9jayBpcyBvbiAtIGlmIG5vdCB0dXJuIGl0IG9uIHRvIHVwbG9hZCBjb2Rl ICovCisJSVBWUl9ERUJVR19WRUQoIlZFRDogdmVkX3NldHVwX2Z3LlxuIik7CisKKwl2ZWRfc2V0 X2Nsb2NrcyhkZXZfcHJpdi0+ZGV2LCBjbGtfZW5hYmxlX2FsbCk7CisKKwkvKiBSZXNldCBNVFgg Ki8KKwlWRURfUkVHX1dSSVRFMzIoTVRYX1NPRlRfUkVTRVRfTVRYX1JFU0VUX01BU0ssCisJCQlN VFhfU09GVF9SRVNFVF9PRkZTRVQpOworCisJVkVEX1JFR19XUklURTMyKEZJUk1XQVJFSUQsIE1T VkRYX0NPTU1TX0ZJUk1XQVJFX0lEKTsKKworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT01N U19FUlJPUl9UUklHKTsKKwlWRURfUkVHX1dSSVRFMzIoMTk5LCBNVFhfU1lTQ19USU1FUkRJVl9P RkZTRVQpOyAvKiBNVFhfU1lTQ19USU1FUkRJViAqLworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZE WF9FWFRfRldfRVJST1JfU1RBVEUpOyAvKiBFWFRfRldfRVJST1JfU1RBVEUgKi8KKwlWRURfUkVH X1dSSVRFMzIoMCwgTVNWRFhfQ09NTVNfTVNHX0NPVU5URVIpOworCVZFRF9SRUdfV1JJVEUzMigw LCBNU1ZEWF9DT01NU19TSUdOQVRVUkUpOworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT01N U19UT19IT1NUX1JEX0lOREVYKTsKKwlWRURfUkVHX1dSSVRFMzIoMCwgTVNWRFhfQ09NTVNfVE9f SE9TVF9XUlRfSU5ERVgpOworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT01NU19UT19NVFhf UkRfSU5ERVgpOworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT01NU19UT19NVFhfV1JUX0lO REVYKTsKKwlWRURfUkVHX1dSSVRFMzIoMCwgTVNWRFhfQ09NTVNfRldfU1RBVFVTKTsKKwlWRURf UkVHX1dSSVRFMzIoRFNJQUJMRV9JRExFX0dQSU9fU0lHIHwKKwkJCURTSUFCTEVfQXV0b19DTE9D S19HQVRJTkcgfAorCQkJUkVUVVJOX1ZERUJfREFUQV9JTl9DT01QTEVUSU9OIHwKKwkJCU5PVF9F TkFCTEVfT05fSE9TVF9DT05DRUFMTUVOVCwKKwkJCU1TVkRYX0NPTU1TX09GRlNFVF9GTEFHUyk7 CisJVkVEX1JFR19XUklURTMyKDAsIE1TVkRYX0NPTU1TX1NJR05BVFVSRSk7CisKKwkvKiByZWFk IHJlZ2lzdGVyIGJhbmsgc2l6ZSAqLworCXsKKwkJdWludDMyX3QgYmFua19zaXplLCByZWc7CisJ CXJlZyA9IFZFRF9SRUdfUkVBRDMyKE1TVkRYX01UWF9SQU1fQkFOS19PRkZTRVQpOworCQliYW5r X3NpemUgPQorCQkJUkVHSU9fUkVBRF9GSUVMRChyZWcsIE1TVkRYX01UWF9SQU1fQkFOSywKKwkJ CQkJIE1UWF9SQU1fQkFOS19TSVpFKTsKKwkJcmFtX2Jhbmtfc2l6ZSA9ICh1aW50MzJfdCkoMSA8 PCAoYmFua19zaXplICsgMikpOworCX0KKworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IFJBTSBiYW5r IHNpemUgPSAlZCBieXRlc1xuIiwgcmFtX2Jhbmtfc2l6ZSk7CisKKwkvKiBpZiBGVyBhbHJlYWR5 IGxvYWRlZCBmcm9tIHN0b3JhZ2UgKi8KKwlpZiAodmVkX3ByaXYtPnZlZF9md19wdHIpIHsKKwkJ ZndfcHRyID0gdmVkX3ByaXYtPnZlZF9md19wdHI7CisJfSBlbHNlIHsKKwkJZndfcHRyID0gdmVk X2dldF9mdyhkZXYsICZyYXcsIEZJUk1XQVJFX05BTUUpOworCQlJUFZSX0RFQlVHX1ZFRCgiVkVE OmxvYWQgbXN2ZHhfZndfbWZsZF9ERTIuMC5iaW4gYnkgdWRldmRcbiIpOworCX0KKwlpZiAoIWZ3 X3B0cikgeworCQlJUFZSX0VSUk9SKCJWRUQ6bG9hZCB2ZWRfZncuYmluIGZhaWxlZCxpcyB1ZGV2 ZCBydW5uaW5nP1xuIik7CisJCXJldCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghdmVk X3ByaXYtPmZ3X2xvYWRlZF90b19ibykgeyAvKiBMb2FkIGZpcm13YXJlIGludG8gQk8gKi8KKwkJ SVBWUl9ERUJVR19WRUQoIk1TVkRYOmxvYWQgdmVkX2Z3LmJpbiBieSB1ZGV2ZCBpbnRvIEJPXG4i KTsKKwkJcmV0ID0gdmVkX2dldF9md19ibyhkZXYsICZyYXcsIEZJUk1XQVJFX05BTUUpOworCQlp ZiAocmV0KSB7CisJCQlJUFZSX0VSUk9SKCJWRUQ6IGZhaWxlZCB0byBjYWxsIHZlZF9nZXRfZndf Ym8uXG4iKTsKKwkJCXJldCA9IDE7CisJCQlnb3RvIG91dDsKKwkJfQorCQl2ZWRfcHJpdi0+Zndf bG9hZGVkX3RvX2JvID0gMTsKKwl9CisKKwlmdyA9IChzdHJ1Y3QgdmVkX2Z3ICopIGZ3X3B0cjsK KworCS8qIG5lZWQgY2hlY2sgZnctPnZlcj8gKi8KKwl0ZXh0X3B0ciA9ICh1aW50MzJfdCAqKSgo dWludDhfdCAqKSBmd19wdHIgKyBzaXplb2Yoc3RydWN0IHZlZF9mdykpOworCWRhdGFfcHRyID0g dGV4dF9wdHIgKyBmdy0+dGV4dF9zaXplOworCisJLyogbWF5YmUgd2UgY2FuIGp1ZGdlIGZ3IHZl cnNpb24gYWNjb3JkaW5nIHRvIGZ3IHRleHQgc2l6ZSAqLworCisJSVBWUl9ERUJVR19WRUQoIlZF RDogUmV0cmlldmVkIHBvaW50ZXJzIGZvciBmaXJtd2FyZVxuIik7CisJSVBWUl9ERUJVR19WRUQo IlZFRDogdGV4dF9zaXplOiAlZFxuIiwgZnctPnRleHRfc2l6ZSk7CisJSVBWUl9ERUJVR19WRUQo IlZFRDogZGF0YV9zaXplOiAlZFxuIiwgZnctPmRhdGFfc2l6ZSk7CisJSVBWUl9ERUJVR19WRUQo IlZFRDogZGF0YV9sb2NhdGlvbjogMHgleFxuIiwgZnctPmRhdGFfbG9jYXRpb24pOworCUlQVlJf REVCVUdfVkVEKCJWRUQ6IEZpcnN0IDQgYnl0ZXMgb2YgdGV4dDogMHgleFxuIiwgKnRleHRfcHRy KTsKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBGaXJzdCA0IGJ5dGVzIG9mIGRhdGE6IDB4JXhcbiIs ICpkYXRhX3B0cik7CisJSVBWUl9ERUJVR19WRUQoIlZFRDogVXBsb2FkaW5nIGZpcm13YXJlXG4i KTsKKworI2lmIFVQTE9BRF9GV19CWV9ETUEKKwl2ZWRfdXBsb2FkX2Z3KGRldl9wcml2LCAwLCB2 ZWRfcHJpdi0+bXR4X21lbV9zaXplIC8gNCk7CisjZWxzZQorCXZlZF91cGxvYWRfZncoZGV2X3By aXYsIE1UWF9DT1JFX0NPREVfTUVNLCByYW1fYmFua19zaXplLAorCQkgICAgICBQQ19TVEFSVF9B RERSRVNTIC0gTVRYX0NPREVfQkFTRSwgZnctPnRleHRfc2l6ZSwKKwkJICAgICAgdGV4dF9wdHIp OworCXZlZF91cGxvYWRfZncoZGV2X3ByaXYsIE1UWF9DT1JFX0RBVEFfTUVNLCByYW1fYmFua19z aXplLAorCQkgICAgICBmdy0+ZGF0YV9sb2NhdGlvbiAtIE1UWF9EQVRBX0JBU0UsIGZ3LT5kYXRh X3NpemUsCisJCSAgICAgIGRhdGFfcHRyKTsKKyNlbmRpZgorCisJLyoJLS0gU2V0IHN0YXJ0aW5n IFBDIGFkZHJlc3MJKi8KKwl2ZWRfd3JpdGVfbXR4X2NvcmVfcmVnKGRldl9wcml2LCBNVFhfUEMs IFBDX1NUQVJUX0FERFJFU1MpOworCisJLyoJLS0gVHVybiBvbiB0aGUgdGhyZWFkCSovCisJVkVE X1JFR19XUklURTMyKE1UWF9FTkFCTEVfTVRYX0VOQUJMRV9NQVNLLCBNVFhfRU5BQkxFX09GRlNF VCk7CisKKwkvKiBXYWl0IGZvciB0aGUgc2lnbmF0dXJlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gYmFj ayAqLworCXJldCA9IHZlZF93YWl0X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwgTVNWRFhfQ09NTVNf U0lHTkFUVVJFLAorCQkJCSAgICBNU1ZEWF9DT01NU19TSUdOQVRVUkVfVkFMVUUsCisJCQkJICAg IDB4ZmZmZmZmZmYsIC8qIEVuYWJsZWQgYml0cyAqLworCQkJCSAgICAyMDAwMDAwLCA1KTsKKwlp ZiAocmV0KSB7CisJCUlQVlJfRVJST1IoIlZFRDogZmlybXdhcmUgZmFpbHMgdG8gaW5pdGlhbGl6 ZS5cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBNVFggSW5p dGlhbCBpbmRpY2F0aW9ucyBPSy5cbiIpOworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IE1TVkRYX0NP TU1TX0FSRUFfQUREUiA9ICUwOHguXG4iLAorCQkgICAgICAgTVNWRFhfQ09NTVNfQVJFQV9BRERS KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lw dnIvdmVkX2Z3LmggYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfZncuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzJkYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2lwdnIvdmVkX2Z3LmgKQEAgLTAsMCArMSw3MyBAQAorLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgKiB2ZWRfZncuaDogVkVEIGZpcm13YXJlIHN1cHBvcnQgaGVhZGVyIGZpbGUKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVT QQorICogQ29weXJpZ2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZCwgVUsK KyAqIENvcHlyaWdodCAoYykgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFy aywgVGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh bG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBK aWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwor I2lmbmRlZiBfVkVEX0ZXX0hfCisjZGVmaW5lIF9WRURfRldfSF8KKworI2luY2x1ZGUgImlwdnJf ZHJ2LmgiCisKKyNkZWZpbmUgRklSTVdBUkVJRAkJMHgwMTRkNDJhYgorCisvKiAgTm9uLU9wdGlt YWwgSW52YWxpZGF0aW9uIGlzIG5vdCBkZWZhdWx0ICovCisjZGVmaW5lIE1TVkRYX0RFVklDRV9O T0RFX0ZMQUdTX01NVV9OT05PUFRfSU5WCTIKKworI2RlZmluZSBGV19WQV9SRU5ERVJfSE9TVF9J TlQJCTB4MDAwMDQwMDAKKyNkZWZpbmUgTVNWRFhfREVWSUNFX05PREVfRkxBR1NfTU1VX0hXX0lO VkFMSURBVElPTgkweDAwMDAwMDIwCisjZGVmaW5lIEZXX0RFVkFfRVJST1JfREVURUNURUQgMHgw ODAwMDAwMAorCisvKiBUaGVyZSBpcyBubyB3b3JrIGN1cnJlbnRseSB1bmRlcndheSBvbiB0aGUg aGFyZHdhcmUgKi8KKyNkZWZpbmUgTVNWRFhfRldfU1RBVFVTX0hXX0lETEUJMHgwMDAwMDAwMQor I2RlZmluZSBNU1ZEWF9ERVZJQ0VfTk9ERV9GTEFHX0JSTjIzMTU0X0JMT0NLX09OX0ZFCTB4MDAw MDAyMDAKKyNkZWZpbmUgTVNWRFhfREVWSUNFX05PREVfRkxBR1NfREVGQVVMVF9EMAkJCQlcCisJ KE1TVkRYX0RFVklDRV9OT0RFX0ZMQUdTX01NVV9OT05PUFRfSU5WIHwJCQlcCisJCU1TVkRYX0RF VklDRV9OT0RFX0ZMQUdTX01NVV9IV19JTlZBTElEQVRJT04gfAkJXAorCQlNU1ZEWF9ERVZJQ0Vf Tk9ERV9GTEFHX0JSTjIzMTU0X0JMT0NLX09OX0ZFKQorCisjZGVmaW5lIE1TVkRYX0RFVklDRV9O T0RFX0ZMQUdTX0RFRkFVTFRfRDEJCQkJXAorCShNU1ZEWF9ERVZJQ0VfTk9ERV9GTEFHU19NTVVf SFdfSU5WQUxJREFUSU9OIHwJCQlcCisJCU1TVkRYX0RFVklDRV9OT0RFX0ZMQUdfQlJOMjMxNTRf QkxPQ0tfT05fRkUpCisKKyNkZWZpbmUgTVRYX0NPREVfQkFTRQkJKDB4ODA5MDAwMDApCisjZGVm aW5lIE1UWF9EQVRBX0JBU0UJCSgweDgyODgwMDAwKQorI2RlZmluZSBQQ19TVEFSVF9BRERSRVNT CSgweDgwOTAwMDAwKQorCisjZGVmaW5lIE1UWF9DT1JFX0NPREVfTUVNCSgweDEwKQorI2RlZmlu ZSBNVFhfQ09SRV9EQVRBX01FTQkoMHgxOCkKKworI2RlZmluZSBSRU5ERUNfQV9TSVpFCSg0ICog MTAyNCAqIDEwMjQpCisjZGVmaW5lIFJFTkRFQ19CX1NJWkUJKDEwMjQgKiAxMDI0KQorCisjZGVm aW5lIFRFUk1JTkFUSU9OX1NJWkUJNDgKKworI2RlZmluZSBNU1ZEWF9SRVNFVF9ORUVEU19SRVVQ TE9BRF9GVwkJKDB4MikKKyNkZWZpbmUgTVNWRFhfUkVTRVRfTkVFRFNfSU5JVF9GVwkJKDB4MSkK KworaW50MzJfdCB2ZWRfYWxsb2NfZndfYm8oc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9w cml2KTsKKworaW50MzJfdCB2ZWRfc2V0dXBfZncoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2luaXQuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYmY4MmRmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZy L3ZlZF9pbml0LmMKQEAgLTAsMCArMSw4MjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdmVk X2luaXQuYzogVkVEIGluaXRpYWxpemF0aW9uIGFuZCBkZWluaXRpYWxpemF0aW9uCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EK KyAqIENvcHlyaWdodCAoYykgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQsIFVLCisg KiBDb3B5cmlnaHQgKGMpIDIwMDMgVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIENlZGFyIFBhcmss IFRleGFzLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAor ICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxv bmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlh bmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKiAgICBMaSBaZW5nIDxsaS56ZW5nQGludGVsLmNv bT4KKyAqICAgIEJpbmdsaW4gQ2hlbiA8YmluZ2xpbi5jaGVuQGludGVsLmNvbT4KKyAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKworI2luY2x1ZGUgImlwdnJfZ2VtLmgiCisjaW5jbHVkZSAiaXB2cl9idWZm ZXIuaCIKKyNpbmNsdWRlICJ2ZWRfaW5pdC5oIgorI2luY2x1ZGUgInZlZF9jbWQuaCIKKyNpbmNs dWRlICJ2ZWRfbXNnLmgiCisjaW5jbHVkZSAidmVkX3JlZy5oIgorI2luY2x1ZGUgInZlZF9lYy5o IgorI2luY2x1ZGUgInZlZF9wbS5oIgorI2luY2x1ZGUgInZlZF9mdy5oIgorI2luY2x1ZGUgPGxp bnV4L2Zpcm13YXJlLmg+CisKK3N0YXRpYyBzc2l6ZV90Cit2ZWRfcG1zdGF0ZV9zaG93KHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikK K3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor CXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IE5VTEw7CisJc3RydWN0IHZlZF9w cml2YXRlICp2ZWRfcHJpdiA9IE5VTEw7CisJaW50MzJfdCByZXQgPSAtRUlOVkFMOworCisJaWYg KGRybV9kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlkZXZfcHJpdiA9IGRybV9kZXYtPmRl dl9wcml2YXRlOworCXZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih2ZWRfcG1zdGF0ZSwgMDQ0NCwgdmVkX3Btc3Rh dGVfc2hvdywgTlVMTCk7CisKK3ZvaWQgdmVkX2NsZWFyX2lycShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7CisJdWludDMyX3QgbXR4X2ludCA9IDA7CisKKwkvKiBDbGVhciBNVFggaW50ZXJydXB0 ICovCisJUkVHSU9fV1JJVEVfRklFTERfTElURShtdHhfaW50LCBNU1ZEWF9JTlRFUlJVUFRfU1RB VFVTLCBNVFhfSVJRLCAxKTsKKwlWRURfUkVHX1dSSVRFMzIobXR4X2ludCwgTVNWRFhfSU5URVJS VVBUX0NMRUFSX09GRlNFVCk7Cit9CisKKy8qIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFsc28g d29ya3MgZm9yIENMViBhbmQgTUZMRCAqLworLyogSVBWUl9JTlRfRU5BQkxFX1IgaXMgc2V0IGlu IGlwdnJfaXJxXyh1bilpbnN0YWxsX2lzbGFuZHMgKi8KK3ZvaWQgdmVkX2Rpc2FibGVfaXJxKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwkvKnVpbnQzMl90IGllciA9IGRldl9wcml2LT52ZGNf aXJxX21hc2sgJiAofl9QU0JfSVJRX01TVkRYX0ZMQUcpOyAqLworCisJdWludDMyX3QgZW5hYmxl cyA9IDA7CisKKwlSRUdJT19XUklURV9GSUVMRF9MSVRFKGVuYWJsZXMsIE1TVkRYX0lOVEVSUlVQ VF9TVEFUVVMsIE1UWF9JUlEsIDApOworCVZFRF9SRUdfV1JJVEUzMihlbmFibGVzLCBNU1ZEWF9I T1NUX0lOVEVSUlVQVF9FTkFCTEVfT0ZGU0VUKTsKKworCS8qIHdyaXRlIGluIHN5c2lycS5jICov CisJLyogUFNCX1dWREMzMihpZXIsIFBTQl9JTlRfRU5BQkxFX1IpOyAvXCogZXNzZW50aWFsICpc LyAqLworfQorCit2b2lkIHZlZF9lbmFibGVfaXJxKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KwkvKiB1aW50MzJfdCBpZXIgPSBkZXZfcHJpdi0+dmRjX2lycV9tYXNrIHwgX1BTQl9JUlFfTVNW RFhfRkxBRzsgKi8KKwl1aW50MzJfdCBlbmFibGVzID0gMDsKKworCS8qIE9ubHkgZW5hYmxlIHRo ZSBtYXN0ZXIgY29yZSBJUlEqLworCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUoZW5hYmxlcywgTVNW RFhfSU5URVJSVVBUX1NUQVRVUywgTVRYX0lSUSwKKwkJCSAgICAgICAxKTsKKwlWRURfUkVHX1dS SVRFMzIoZW5hYmxlcywgTVNWRFhfSE9TVF9JTlRFUlJVUFRfRU5BQkxFX09GRlNFVCk7CisKKwkv KiB3cml0ZSBpbiBzeXNpcnEuYyAqLworCS8qIFBTQl9XVkRDMzIoaWVyLCBQU0JfSU5UX0VOQUJM RV9SKTsgL1wqIGVzc2VudGlhbCAqXC8gKi8KK30KKworLyoKKyAqIHRoZSBvcmlnaW5hbCAxMDAw IG9mIHVkZWxheSBpcyBkZXJpdmUgZnJvbSByZWZlcmVuY2UgZHJpdmVyCisgKiBGcm9tIExpdSwg SGFpeWFuZywgY2hhbmdlZCB0aGUgb3JpZ2luaWFsIHVkZWxheSB2YWx1ZSBmcm9tIDEwMDAgdG8g NQorICogY2FuIHNhdmUgMyUgQzAgcmVzaWRlbmNlCisgKi8KK2ludDMyX3QKK3ZlZF93YWl0X2Zv cl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgdWlu dDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgdWludDMyX3QgZW5hYmxlLAorCQkJICAgIHVp bnQzMl90IHBvbGxfY250LCB1aW50MzJfdCB0aW1lb3V0KQoreworCXVpbnQzMl90IHJlZ192YWx1 ZSA9IDA7CisJd2hpbGUgKHBvbGxfY250KSB7CisJCXJlZ192YWx1ZSA9IFZFRF9SRUdfUkVBRDMy KG9mZnNldCk7CisJCWlmICh2YWx1ZSA9PSAocmVnX3ZhbHVlICYgZW5hYmxlKSkKKwkJCXJldHVy biAwOworCisJCS8qIFdhaXQgYSBiaXQgKi8KKwkJSVBWUl9VREVMQVkodGltZW91dCk7CisJCXBv bGxfY250LS07CisJfQorCUlQVlJfREVCVUdfUkVHKCJNU1ZEWDogVGltZW91dCB3aGlsZSB3YWl0 aW5nIGZvciByZWdpc3RlciAlMDh4OiIKKwkJICAgICAgICIgZXhwZWN0aW5nICUwOHggKG1hc2sg JTA4eCksIGdvdCAlMDh4XG4iLAorCQkgICAgICAgb2Zmc2V0LCB2YWx1ZSwgZW5hYmxlLCByZWdf dmFsdWUpOworCisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKK3ZvaWQKK3ZlZF9zZXRfY2xvY2tzKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGNsb2NrX3N0YXRlKQoreworCXN0cnVjdCBk cm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3Qg b2xkX2Nsb2NrX3N0YXRlID0gMDsKKwkvKiBJUFZSX0RFQlVHX1ZFRCgiU2V0Q2xvY2tzIHRvICV4 LlxuIiwgY2xvY2tfc3RhdGUpOyAqLworCW9sZF9jbG9ja19zdGF0ZSA9IFZFRF9SRUdfUkVBRDMy KE1TVkRYX01BTl9DTEtfRU5BQkxFX09GRlNFVCk7CisJaWYgKG9sZF9jbG9ja19zdGF0ZSA9PSBj bG9ja19zdGF0ZSkKKwkJcmV0dXJuOworCisJaWYgKGNsb2NrX3N0YXRlID09IDApIHsKKwkJLyog VHVybiBvZmYgY2xvY2tzIHByb2NlZHVyZSAqLworCQlpZiAob2xkX2Nsb2NrX3N0YXRlKSB7CisJ CQkvKiBUdXJuIG9mZiBhbGwgdGhlIGNsb2NrcyBleGNlcHQgY29yZSAqLworCQkJVkVEX1JFR19X UklURTMyKAorCQkJCU1TVkRYX01BTl9DTEtfRU5BQkxFX0NPUkVfTUFOX0NMS19FTkFCTEVfTUFT SywKKwkJCQlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9PRkZTRVQpOworCisJCQkvKiBNYWtlIHN1cmUg YWxsIHRoZSBjbG9ja3MgYXJlIG9mZiBleGNlcHQgY29yZSAqLworCQkJdmVkX3dhaXRfZm9yX3Jl Z2lzdGVyKGRldl9wcml2LAorCQkJCU1TVkRYX01BTl9DTEtfRU5BQkxFX09GRlNFVCwKKwkJCQlN U1ZEWF9NQU5fQ0xLX0VOQUJMRV9DT1JFX01BTl9DTEtfRU5BQkxFX01BU0ssCisJCQkJMHhmZmZm ZmZmZiwgMjAwMDAwMCwgNSk7CisKKwkJCS8qIFR1cm4gb2ZmIGNvcmUgY2xvY2sgKi8KKwkJCVZF RF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9PRkZTRVQpOworCQl9CisJfSBl bHNlIHsKKwkJdWludDMyX3QgY2xvY2tzX2VuID0gY2xvY2tfc3RhdGU7CisKKwkJLypNYWtlIHN1 cmUgdGhhdCBjb3JlIGNsb2NrIGlzIG5vdCBhY2NpZGVudGFsbHkgdHVybmVkIG9mZiAqLworCQlj bG9ja3NfZW4gfD0gTVNWRFhfTUFOX0NMS19FTkFCTEVfQ09SRV9NQU5fQ0xLX0VOQUJMRV9NQVNL OworCisJCS8qIElmIGFsbCBjbG9ja3Mgd2VyZSBkaXNhYmxlIGRvIHRoZSBicmluZyB1cCBwcm9j ZWR1cmUgKi8KKwkJaWYgKG9sZF9jbG9ja19zdGF0ZSA9PSAwKSB7CisJCQkvKiB0dXJuIG9uIGNv cmUgY2xvY2sgKi8KKwkJCVZFRF9SRUdfV1JJVEUzMigKKwkJCQlNU1ZEWF9NQU5fQ0xLX0VOQUJM RV9DT1JFX01BTl9DTEtfRU5BQkxFX01BU0ssCisJCQkJTVNWRFhfTUFOX0NMS19FTkFCTEVfT0ZG U0VUKTsKKworCQkJLyogTWFrZSBzdXJlIGNvcmUgY2xvY2sgaXMgb24gKi8KKwkJCXZlZF93YWl0 X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwKKwkJCQlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9PRkZTRVQs CisJCQkJTVNWRFhfTUFOX0NMS19FTkFCTEVfQ09SRV9NQU5fQ0xLX0VOQUJMRV9NQVNLLAorCQkJ CTB4ZmZmZmZmZmYsIDIwMDAwMDAsIDUpOworCisJCQkvKiB0dXJuIG9uIHRoZSBvdGhlciBjbG9j a3MgYXMgd2VsbCAqLworCQkJVkVEX1JFR19XUklURTMyKGNsb2Nrc19lbiwgTVNWRFhfTUFOX0NM S19FTkFCTEVfT0ZGU0VUKTsKKworCQkJLyogTWFrZSBzdXJlIHRoYXQgYWxsIHRoZXkgYXJlIG9u ICovCisJCQl2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsCisJCQkJCU1TVkRYX01BTl9D TEtfRU5BQkxFX09GRlNFVCwKKwkJCQkJY2xvY2tzX2VuLCAweGZmZmZmZmZmLCAyMDAwMDAwLCA1 KTsKKwkJfSBlbHNlIHsKKwkJCVZFRF9SRUdfV1JJVEUzMihjbG9ja3NfZW4sIE1TVkRYX01BTl9D TEtfRU5BQkxFX09GRlNFVCk7CisKKwkJCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZXkgYXJlIG9uICov CisJCQl2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsCisJCQkJCU1TVkRYX01BTl9DTEtf RU5BQkxFX09GRlNFVCwKKwkJCQkJY2xvY2tzX2VuLCAweGZmZmZmZmZmLCAyMDAwMDAwLCA1KTsK KwkJfQorCX0KK30KKworaW50MzJfdCB2ZWRfY29yZV9yZXNldChzdHJ1Y3QgZHJtX2lwdnJfcHJp dmF0ZSAqZGV2X3ByaXYpCit7CisJaW50MzJfdCByZXQgPSAwOworCWludDMyX3QgbG9vcDsKKwl1 aW50MzJfdCBjbWQ7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52 ZWRfcHJpdmF0ZTsKKwkvKiBFbmFibGUgQ2xvY2tzICovCisJSVBWUl9ERUJVR19HRU5FUkFMKCJF bmFibGluZyBjbG9ja3MuXG4iKTsKKwl2ZWRfc2V0X2Nsb2NrcyhkZXZfcHJpdi0+ZGV2LCBjbGtf ZW5hYmxlX2FsbCk7CisKKwkvKiBBbHdheXMgcGF1c2UgdGhlIE1NVSBhcyB0aGUgY29yZSBtYXkg YmUgc3RpbGwgYWN0aXZlCisJICogd2hlbiByZXNldHRpbmcuICBJdCBpcyB2ZXJ5IGJhZCB0byBo YXZlIG1lbW9yeQorCSAqIGFjdGl2aXR5IGF0IHRoZSBzYW1lIHRpbWUgYXMgYSByZXNldCAtIFZl cnkgVmVyeSBiYWQKKwkgKi8KKwlWRURfUkVHX1dSSVRFMzIoMiwgTVNWRFhfTU1VX0NPTlRST0ww X09GRlNFVCk7CisKKwkvKiBCUk4yNjEwNiwgQlJOMjM5NDQsIEJSTjMzNjcxICovCisJLyogVGhp cyBpcyBuZWNjZXNzYXJ5IGZvciBhbGwgY29yZXMgdXAgdG8gVG91cm1hbGluZSAqLworCWlmICgo VkVEX1JFR19SRUFEMzIoTVNWRFhfQ09SRV9SRVZfT0ZGU0VUKSA8IDB4MDAwNTA1MDIpICYmCisJ CShWRURfUkVHX1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX09GRlNFVCkKKwkJCSYgTVNW RFhfSU5URVJSVVBUX1NUQVRVU19NTVVfRkFVTFRfSVJRX01BU0spICYmCisJCShWRURfUkVHX1JF QUQzMihNU1ZEWF9NTVVfU1RBVFVTX09GRlNFVCkgJiAxKSkgeworCQl1aW50MzJfdCAqcHB0ZDsK KwkJdWludDMyX3QgbG9vcDsKKwkJdWludDMyX3QgcHRkX2FkZHI7CisKKwkJLyogZG8gd29yayBh cm91bmQgKi8KKwkJcHRkX2FkZHIgPSBwYWdlX3RvX3Bmbih2ZWRfcHJpdi0+bW11X3JlY292ZXJf cGFnZSkKKwkJCQkJPDwgUEFHRV9TSElGVDsKKwkJcHB0ZCA9IGttYXAodmVkX3ByaXYtPm1tdV9y ZWNvdmVyX3BhZ2UpOworCQlpZiAoIXBwdGQpIHsKKwkJCUlQVlJfRVJST1IoImZhaWxlZCB0byBr bWFwIG1tdSByZWNvdmVyIHBhZ2UuXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlmb3IgKGxv b3AgPSAwOyBsb29wIDwgMTAyNDsgbG9vcCsrKQorCQkJcHB0ZFtsb29wXSA9IHB0ZF9hZGRyIHwg MHgwMDAwMDAwMzsKKwkJVkVEX1JFR19XUklURTMyKHB0ZF9hZGRyLCBNU1ZEWF9NTVVfRElSX0xJ U1RfQkFTRV9PRkZTRVQgKyAgMCk7CisJCVZFRF9SRUdfV1JJVEUzMihwdGRfYWRkciwgTVNWRFhf TU1VX0RJUl9MSVNUX0JBU0VfT0ZGU0VUICsgIDQpOworCQlWRURfUkVHX1dSSVRFMzIocHRkX2Fk ZHIsIE1TVkRYX01NVV9ESVJfTElTVF9CQVNFX09GRlNFVCArICA4KTsKKwkJVkVEX1JFR19XUklU RTMyKHB0ZF9hZGRyLCBNU1ZEWF9NTVVfRElSX0xJU1RfQkFTRV9PRkZTRVQgKyAxMik7CisKKwkJ VkVEX1JFR19XUklURTMyKDYsIE1TVkRYX01NVV9DT05UUk9MMF9PRkZTRVQpOworCQlWRURfUkVH X1dSSVRFMzIoTVNWRFhfSU5URVJSVVBUX1NUQVRVU19NTVVfRkFVTFRfSVJRX01BU0ssCisJCQkJ CU1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfT0ZGU0VUKTsKKwkJa3VubWFwKHZlZF9wcml2LT5tbXVf cmVjb3Zlcl9wYWdlKTsKKwl9CisKKwkvKiBtYWtlIHN1cmUgKkFMTCogb3V0c3RhbmRpbmcgcmVh ZHMgaGF2ZSBnb25lIGF3YXkgKi8KKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMTA7IGxvb3ArKykK KwkJcmV0ID0gdmVkX3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2LCBNU1ZEWF9NTVVfTUVNX1JF UV9PRkZTRVQsCisJCQkJCSAgICAwLCAweGZmLCAxMDAsIDEpOworCWlmIChyZXQpIHsKKwkJSVBW Ul9ERUJVR19XQVJOKCJNU1ZEWF9NTVVfTUVNX1JFUSBpcyAlZCxcbiIKKwkJCSJpbmRpY2F0ZSBv dXRzdGFuZGluZyByZWFkIHJlcXVlc3QgMC5cbiIsCisJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9N TVVfTUVNX1JFUV9PRkZTRVQpKTsKKwkJcmV0ID0gLTE7CisJCXJldHVybiByZXQ7CisJfQorCS8q IGRpc2Nvbm5lY3QgUkVOREVDIGRlY29kZXJzIGZyb20gbWVtb3J5ICovCisJY21kID0gVkVEX1JF R19SRUFEMzIoTVNWRFhfUkVOREVDX0NPTlRST0wxX09GRlNFVCk7CisJUkVHSU9fV1JJVEVfRklF TEQoY21kLCBNU1ZEWF9SRU5ERUNfQ09OVFJPTDEsIFJFTkRFQ19ERUNfRElTQUJMRSwgMSk7CisJ VkVEX1JFR19XUklURTMyKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRST0wxX09GRlNFVCk7CisKKwkv KiBJc3N1ZSBzb2Z0d2FyZSByZXNldCBmb3IgYWxsIGJ1dCBjb3JlICovCisJVkVEX1JFR19XUklU RTMyKCh1bnNpZ25lZCBpbnQpfk1TVkRYX0NPTlRST0xfTVNWRFhfU09GVF9SRVNFVF9NQVNLLAor CQkJTVNWRFhfQ09OVFJPTF9PRkZTRVQpOworCVZFRF9SRUdfUkVBRDMyKE1TVkRYX0NPTlRST0xf T0ZGU0VUKTsKKwkvKiBiaXQgZm9ybWF0IGlzIHNldCBhcyBsaXR0bGUgZW5kaWFuICovCisJVkVE X1JFR19XUklURTMyKDAsIE1TVkRYX0NPTlRST0xfT0ZGU0VUKTsKKwkvKiBtYWtlIHN1cmUgcmVh ZCByZXF1ZXN0cyBhcmUgemVybyAqLworCXJldCA9IHZlZF93YWl0X2Zvcl9yZWdpc3RlcihkZXZf cHJpdiwgTVNWRFhfTU1VX01FTV9SRVFfT0ZGU0VULAorCQkJCSAgICAwLCAweGZmLCAxMDAsIDEw MCk7CisJaWYgKCFyZXQpIHsKKwkJLyogSXNzdWUgc29mdHdhcmUgcmVzZXQgKi8KKwkJVkVEX1JF R19XUklURTMyKE1TVkRYX0NPTlRST0xfTVNWRFhfU09GVF9SRVNFVF9NQVNLLAorCQkJCU1TVkRY X0NPTlRST0xfT0ZGU0VUKTsKKworCQlyZXQgPSB2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3By aXYsIE1TVkRYX0NPTlRST0xfT0ZGU0VULCAwLAorCQkJCQlNU1ZEWF9DT05UUk9MX01TVkRYX1NP RlRfUkVTRVRfTUFTSywKKwkJCQkJMjAwMDAwMCwgNSk7CisJCWlmICghcmV0KSB7CisJCQkvKiBD bGVhciBpbnRlcnJ1cHQgZW5hYmxlZCBmbGFnICovCisJCQlWRURfUkVHX1dSSVRFMzIoMCwgTVNW RFhfSE9TVF9JTlRFUlJVUFRfRU5BQkxFX09GRlNFVCk7CisKKwkJCS8qIENsZWFyIGFueSBwZW5k aW5nIGludGVycnVwdCBmbGFncyAqLworCQkJVkVEX1JFR19XUklURTMyKDB4RkZGRkZGRkYsIE1T VkRYX0lOVEVSUlVQVF9DTEVBUl9PRkZTRVQpOworCQl9IGVsc2UgeworCQkJSVBWUl9ERUJVR19X QVJOKCJNU1ZEWF9DT05UUk9MX09GRlNFVCBpcyAlZCxcbiIKKwkJCQkiaW5kaWNhdGUgc29mdHdh cmUgcmVzZXQgZmFpbGVkLlxuIiwKKwkJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9DT05UUk9MX09G RlNFVCkpOworCQl9CisJfSBlbHNlIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJNU1ZEWF9NTVVfTUVN X1JFUSBpcyAlZCxcbiIKKwkJCSJpbmRpY2F0ZSBvdXRzdGFuZGluZyByZWFkIHJlcXVlc3QgMS5c biIsCisJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9NTVVfTUVNX1JFUV9PRkZTRVQpKTsKKwl9CisJ cmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJlc2V0IGNoaXAgYW5kIGRpc2FibGUgaW50ZXJydXB0 cy4KKyAqIFJldHVybiAwIHN1Y2Nlc3MsIDEgZmFpbHVyZQorICogdXNlIHZlZF9jb3JlX3Jlc2V0 IGluc3RlYWQgb2YgdmVkX3Jlc2V0CisgKi8KK2ludDMyX3QgdmVkX3Jlc2V0KHN0cnVjdCBkcm1f aXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpbnQzMl90IHJldCA9IDA7CisKKwkvKiBJc3N1 ZSBzb2Z0d2FyZSByZXNldCAqLworCS8qIFZFRF9SRUdfV1JJVEUzMihtc3ZkeF9zd19yZXNldF9h bGwsIE1TVkRYX0NPTlRST0wpOyAqLworCVZFRF9SRUdfV1JJVEUzMihNU1ZEWF9DT05UUk9MX01T VkRYX1NPRlRfUkVTRVRfTUFTSywKKwkJCU1TVkRYX0NPTlRST0xfT0ZGU0VUKTsKKworCXJldCA9 IHZlZF93YWl0X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwgTVNWRFhfQ09OVFJPTF9PRkZTRVQsIDAs CisJCQlNU1ZEWF9DT05UUk9MX01TVkRYX1NPRlRfUkVTRVRfTUFTSywgMjAwMDAwMCwgNSk7CisJ aWYgKCFyZXQpIHsKKwkJLyogQ2xlYXIgaW50ZXJydXB0IGVuYWJsZWQgZmxhZyAqLworCQlWRURf UkVHX1dSSVRFMzIoMCwgTVNWRFhfSE9TVF9JTlRFUlJVUFRfRU5BQkxFX09GRlNFVCk7CisKKwkJ LyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGZsYWdzICovCisJCVZFRF9SRUdfV1JJVEUz MigweEZGRkZGRkZGLCBNU1ZEWF9JTlRFUlJVUFRfQ0xFQVJfT0ZGU0VUKTsKKwl9IGVsc2Ugewor CQlJUFZSX0RFQlVHX1dBUk4oIk1TVkRYX0NPTlRST0xfT0ZGU0VUIGlzICVkLFxuIgorCQkJImlu ZGljYXRlIHNvZnR3YXJlIHJlc2V0IGZhaWxlZC5cbiIsCisJCQlWRURfUkVHX1JFQUQzMihNU1ZE WF9DT05UUk9MX09GRlNFVCkpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQz Ml90IHZlZF9hbGxvY19jY2JfZm9yX3JlbmRlYyhzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2 LAorCQkJCQkJCQkJCWludDMyX3QgY2NiMF9zaXplLAorCQkJCQkJCQkJCWludDMyX3QgY2NiMV9z aXplKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB2ZWRfcHJpdi0+ZGV2X3ByaXYtPmRl djsKKwlzaXplX3Qgc2l6ZTsKKwl1aW50OF90ICpjY2IwX2FkZHIgPSBOVUxMOworCXVpbnQ4X3Qg KmNjYjFfYWRkciA9IE5VTEw7CisKKwlJUFZSX0RFQlVHX0lOSVQoIlZFRDogc2V0dGluZyB1cCBS RU5ERUMsIGFsbG9jYXRlIENDQiAwLzFcbiIpOworCisJLypoYW5kbGluZyBmb3IgY2NiMCovCisJ aWYgKHZlZF9wcml2LT5jY2IwID09IE5VTEwpIHsKKwkJc2l6ZSA9IHJvdW5kdXAoY2NiMF9zaXpl LCBQQUdFX1NJWkUpOworCQlpZiAoc2l6ZSA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJ LyogQWxsb2NhdGUgdGhlIG5ldyBvYmplY3QgKi8KKwkJdmVkX3ByaXYtPmNjYjAgPSBpcHZyX2dl bV9vYmpfY3JlYXRlX2FuZF9iaW5kKGRldiwgc2l6ZSk7CisJCWlmICh2ZWRfcHJpdi0+Y2NiMCA9 PSBOVUxMKSB7CisJCQlJUFZSX0VSUk9SKCJWRUQ6IGZhaWxlZCB0byBhbGxvY2F0ZSBjY2IwIGJ1 ZmZlci5cbiIpOworCQkJdmVkX3ByaXYtPmNjYjAgPSBOVUxMOworCQkJcmV0dXJuIC1FTk9NRU07 CisJCX0KKworCQl2ZWRfcHJpdi0+YmFzZV9hZGRyMCA9IGlwdnJfZ2VtX29ial9tbXVfb2Zmc2V0 KHZlZF9wcml2LT5jY2IwKTsKKworCQljY2IwX2FkZHIgPSBpcHZyX2dlbV9vYmplY3Rfdm1hcCh2 ZWRfcHJpdi0+Y2NiMCk7CisJCWlmIChJU19FUlIoY2NiMF9hZGRyKSkgeworCQkJSVBWUl9FUlJP UigiVkVEOiBrbWFwIGZhaWxlZCBmb3IgY2NiMCBidWZmZXIuXG4iKTsKKwkJCXJldHVybiBQVFJf RVJSKGNjYjBfYWRkcik7CisJCX0KKworCQltZW1zZXQoY2NiMF9hZGRyLCAwLCBzaXplKTsKKwkJ dnVubWFwKGNjYjBfYWRkcik7CisJfQorCisJLypoYW5kbGluZyBmb3IgY2NiMSovCisJaWYgKHZl ZF9wcml2LT5jY2IxID09IE5VTEwpIHsKKwkJc2l6ZSA9IHJvdW5kdXAoY2NiMV9zaXplLCBQQUdF X1NJWkUpOworCQlpZiAoc2l6ZSA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJLyogQWxs b2NhdGUgdGhlIG5ldyBvYmplY3QgKi8KKwkJdmVkX3ByaXYtPmNjYjEgPSBpcHZyX2dlbV9vYmpf Y3JlYXRlX2FuZF9iaW5kKGRldiwgc2l6ZSk7CisJCWlmICh2ZWRfcHJpdi0+Y2NiMSA9PSBOVUxM KSB7CisJCQlJUFZSX0VSUk9SKCJWRUQ6IGZhaWxlZCB0byBhbGxvY2F0ZSBjY2IxIGJ1ZmZlci5c biIpOworCQkJdmVkX3ByaXYtPmNjYjEgPSBOVUxMOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0K KworCQl2ZWRfcHJpdi0+YmFzZV9hZGRyMSA9IGlwdnJfZ2VtX29ial9tbXVfb2Zmc2V0KHZlZF9w cml2LT5jY2IxKTsKKworCQljY2IxX2FkZHIgPSBpcHZyX2dlbV9vYmplY3Rfdm1hcCh2ZWRfcHJp di0+Y2NiMSk7CisJCWlmIChJU19FUlIoY2NiMV9hZGRyKSkgeworCQkJSVBWUl9FUlJPUigiVkVE OiBrbWFwIGZhaWxlZCBmb3IgY2NiMSBidWZmZXIuXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGNj YjFfYWRkcik7CisJCX0KKworCQltZW1zZXQoY2NiMV9hZGRyLCAwLCBzaXplKTsKKwkJdnVubWFw KGNjYjFfYWRkcik7CisJfQorCisJSVBWUl9ERUJVR19JTklUKCJWRUQ6IFJFTkRFQyBBOiAlMDh4 IFJFTkRFQyBCOiAlMDh4XG4iLAorCQkJdmVkX3ByaXYtPmJhc2VfYWRkcjAsIHZlZF9wcml2LT5i YXNlX2FkZHIxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2ZWRfZnJlZV9jY2Io c3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdikKK3sKKwlpZiAodmVkX3ByaXYtPmNjYjApIHsK KwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJnZlZF9wcml2LT5jY2IwLT5i YXNlKTsKKwkJdmVkX3ByaXYtPmNjYjAgPSBOVUxMOworCX0KKwlpZiAodmVkX3ByaXYtPmNjYjEp IHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJnZlZF9wcml2LT5jY2Ix LT5iYXNlKTsKKwkJdmVkX3ByaXYtPmNjYjEgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQg dmVkX3JlbmRlY19pbml0X2J5X3JlZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVj dCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0 IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsKKwl1aW50MzJf dCBjbWQ7CisKKwlWRURfUkVHX1dSSVRFMzIodmVkX3ByaXYtPmJhc2VfYWRkcjAsIE1TVkRYX1JF TkRFQ19CQVNFX0FERFIwX09GRlNFVCk7CisJVkVEX1JFR19XUklURTMyKHZlZF9wcml2LT5iYXNl X2FkZHIxLCBNU1ZEWF9SRU5ERUNfQkFTRV9BRERSMV9PRkZTRVQpOworCisJY21kID0gMDsKKwlS RUdJT19XUklURV9GSUVMRChjbWQsIE1TVkRYX1JFTkRFQ19CVUZGRVJfU0laRSwKKwkJCVJFTkRF Q19CVUZGRVJfU0laRTAsIFJFTkRFQ19BX1NJWkUgLyA0MDk2KTsKKwlSRUdJT19XUklURV9GSUVM RChjbWQsIE1TVkRYX1JFTkRFQ19CVUZGRVJfU0laRSwKKwkJCVJFTkRFQ19CVUZGRVJfU0laRTEs IFJFTkRFQ19CX1NJWkUgLyA0MDk2KTsKKwlWRURfUkVHX1dSSVRFMzIoY21kLCBNU1ZEWF9SRU5E RUNfQlVGRkVSX1NJWkVfT0ZGU0VUKTsKKworCWNtZCA9IDA7CisJUkVHSU9fV1JJVEVfRklFTEQo Y21kLCBNU1ZEWF9SRU5ERUNfQ09OVFJPTDEsCisJCQlSRU5ERUNfREVDT0RFX1NUQVJUX1NJWkUs IDApOworCVJFR0lPX1dSSVRFX0ZJRUxEKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRST0wxLAorCQkJ UkVOREVDX0JVUlNUX1NJWkVfVywgMSk7CisJUkVHSU9fV1JJVEVfRklFTEQoY21kLCBNU1ZEWF9S RU5ERUNfQ09OVFJPTDEsCisJCQlSRU5ERUNfQlVSU1RfU0laRV9SLCAxKTsKKwlSRUdJT19XUklU RV9GSUVMRChjbWQsIE1TVkRYX1JFTkRFQ19DT05UUk9MMSwKKwkJCVJFTkRFQ19FWFRFUk5BTF9N RU1PUlksIDEpOworCVZFRF9SRUdfV1JJVEUzMihjbWQsIE1TVkRYX1JFTkRFQ19DT05UUk9MMV9P RkZTRVQpOworCisJY21kID0gMHgwMDEwMTAxMDsKKwlWRURfUkVHX1dSSVRFMzIoY21kLCBNU1ZE WF9SRU5ERUNfQ09OVEVYVDBfT0ZGU0VUKTsKKwlWRURfUkVHX1dSSVRFMzIoY21kLCBNU1ZEWF9S RU5ERUNfQ09OVEVYVDFfT0ZGU0VUKTsKKwlWRURfUkVHX1dSSVRFMzIoY21kLCBNU1ZEWF9SRU5E RUNfQ09OVEVYVDJfT0ZGU0VUKTsKKwlWRURfUkVHX1dSSVRFMzIoY21kLCBNU1ZEWF9SRU5ERUNf Q09OVEVYVDNfT0ZGU0VUKTsKKwlWRURfUkVHX1dSSVRFMzIoY21kLCBNU1ZEWF9SRU5ERUNfQ09O VEVYVDRfT0ZGU0VUKTsKKwlWRURfUkVHX1dSSVRFMzIoY21kLCBNU1ZEWF9SRU5ERUNfQ09OVEVY VDVfT0ZGU0VUKTsKKworCWNtZCA9IDA7CisJUkVHSU9fV1JJVEVfRklFTEQoY21kLCBNU1ZEWF9S RU5ERUNfQ09OVFJPTDAsIFJFTkRFQ19JTklUSUFMSVNFLAorCQkJMSk7CisJVkVEX1JFR19XUklU RTMyKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRST0wwX09GRlNFVCk7Cit9CisKK2ludDMyX3QgdmVk X3JlbmRlY19pbml0X2J5X21zZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBk cm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHZl ZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsKKworCS8qIGF0IHRo aXMgc3RhZ2UsIEZXIGlzIHVwbGFvZGVkIHN1Y2Nlc3NmdWxseSwKKwkgKiBjYW4gc2VuZCBSRU5E RUMgaW5pdCBtZXNzYWdlICovCisJc3RydWN0IGZ3X2luaXRfbXNnIGluaXRfbXNnOworCWluaXRf bXNnLmhlYWRlci5iaXRzLm1zZ19zaXplID0gc2l6ZW9mKHN0cnVjdCBmd19pbml0X21zZyk7CisJ aW5pdF9tc2cuaGVhZGVyLmJpdHMubXNnX3R5cGUgPSBNVFhfTVNHSURfSU5JVDsKKwlpbml0X21z Zy5yZW5kZWNfYWRkcjAgPSB2ZWRfcHJpdi0+YmFzZV9hZGRyMDsKKwlpbml0X21zZy5yZW5kZWNf YWRkcjEgPSB2ZWRfcHJpdi0+YmFzZV9hZGRyMTsKKwlpbml0X21zZy5yZW5kZWNfc2l6ZS5iaXRz LnJlbmRlY19zaXplMCA9IFJFTkRFQ19BX1NJWkUgLyAoNCAqIDEwMjQpOworCWluaXRfbXNnLnJl bmRlY19zaXplLmJpdHMucmVuZGVjX3NpemUxID0gUkVOREVDX0JfU0laRSAvICg0ICogMTAyNCk7 CisJcmV0dXJuIHZlZF9tdHhfc2VuZChkZXZfcHJpdiwgKHZvaWQgKikmaW5pdF9tc2cpOworfQor CisjaWZkZWYgQ09ORklHX0RSTV9JUFZSX0VDCitzdGF0aWMgdm9pZCB2ZWRfaW5pdF9lYyhzdHJ1 Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpk ZXZfcHJpdiA9IHZlZF9wcml2LT5kZXZfcHJpdjsKKworCS8qIHdlIHNob3VsZCByZXN0b3JlIHRo ZSBzdGF0ZSwgaWYgd2UgcG93ZXIgZG93bi91cCBkdXJpbmcgRUMgKi8KKwlWRURfUkVHX1dSSVRF MzIoMCwgMHgyMDAwICsgMHhjYzQpOyAvKiBFWFRfRldfRVJST1JfU1RBVEUgKi8KKwlWRURfUkVH X1dSSVRFMzIoMCwgMHgyMDAwICsgMHhjYjApOyAvKiBFWFRfRldfTEFTVF9NQlMgKi8KKwlWRURf UkVHX1dSSVRFMzIoMCwgMHgyMDAwICsgMHhjYjQpOyAvKiBFWFRfRldfTEFTVF9NQlMgKi8KKwlW RURfUkVHX1dSSVRFMzIoMCwgMHgyMDAwICsgMHhjYjgpOyAvKiBFWFRfRldfTEFTVF9NQlMgKi8K KwlWRURfUkVHX1dSSVRFMzIoMCwgMHgyMDAwICsgMHhjYmMpOyAvKiBFWFRfRldfTEFTVF9NQlMg Ki8KKworCXZlZF9wcml2LT52ZWNfZWNfbWVtX3NhdmVkID0gMTsKKworCXZlZF9wcml2LT52ZWRf ZWNfY3R4WzBdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHZlZF9lY19jb250ZXh0KSAqCisJ CQkJVkVEX01BWF9FQ19JTlNUQU5DRSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAodmVkX3ByaXYt PnZlZF9lY19jdHhbMF0gPT0gTlVMTCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IGZhaWwgdG8gYWxs b2NhdGUgbWVtb3J5IGZvciBlYyBjdHguXG4iKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJZm9y IChpID0gMTsgaSA8IFZFRF9NQVhfRUNfSU5TVEFOQ0U7IGkrKykKKwkJCXZlZF9wcml2LT52ZWRf ZWNfY3R4W2ldID0KKwkJCQl2ZWRfcHJpdi0+dmVkX2VjX2N0eFswXSArIGk7CisJCWZvciAoaSA9 IDA7IGkgPCBWRURfTUFYX0VDX0lOU1RBTkNFOyBpKyspCisJCQl2ZWRfcHJpdi0+dmVkX2VjX2N0 eFtpXS0+ZmVuY2UgPQorCQkJCQlWRURfSU5WQUxJRF9GRU5DRTsKKwl9CisJSU5JVF9XT1JLKCYo dmVkX3ByaXYtPmVjX3dvcmspLCB2ZWRfZG9fY29uY2VhbG1lbnQpOworCXJldHVybjsKK30KKyNl bmRpZgorCitzdGF0aWMgaW50MzJfdCB2ZWRfc3RhcnR1cF9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2OworCisJdmVkX3ByaXYgPSBr bWFsbG9jKHNpemVvZihzdHJ1Y3QgdmVkX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAodmVk X3ByaXYgPT0gTlVMTCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IGFsbG9jIHZlZF9wcml2YXRlIGZh aWxlZC5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXZfcHJpdi0+dmVkX3ByaXZh dGUgPSB2ZWRfcHJpdjsKKwltZW1zZXQodmVkX3ByaXYsIDAsIHNpemVvZihzdHJ1Y3QgdmVkX3By aXZhdGUpKTsKKwl2ZWRfcHJpdi0+ZGV2X3ByaXYgPSBkZXZfcHJpdjsKKwl2ZWRfcHJpdi0+ZGV2 ID0gZGV2OworCXZlZF9wcml2LT5md19sb2FkZWRfYnlfcHVuaXQgPSAwOworCisJdmVkX3ByaXYt PnBtX2dhdGluZ19jb3VudCA9IDA7CisKKwkvKiBnZXQgZGV2aWNlIC0tPiBkcm1fZGV2aWNlIC0t PiBkcm1faXB2cl9wcml2YXRlIC0tPiB2ZWRfcHJpdgorCSAqIGZvciB2ZWRfcG1zdGF0ZV9zaG93 OiB2ZWRfcG1wb2xpY3kKKwkgKiBpZiBub3QgcGNpX3NldF9kcnZkYXRhLCBjYW4ndCBnZXQgZHJt X2RldmljZSBmcm9tIGRldmljZQorCSAqLworCS8qIHBjaV9zZXRfZHJ2ZGF0YShkZXYtPnBkZXYs IGRldik7ICovCisJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5wbGF0Zm9ybWRldi0+ZGV2 LAorCQkJICAgICAgICZkZXZfYXR0cl92ZWRfcG1zdGF0ZSkpCisJCUlQVlJfRVJST1IoIlZFRDog Y291bGQgbm90IGNyZWF0ZSBzeXNmcyBmaWxlXG4iKTsKKworCXZlZF9wcml2LT5zeXNmc19wbXN0 YXRlID0gc3lzZnNfZ2V0X2RpcmVudCgKKwkJCQkJCWRldi0+cGxhdGZvcm1kZXYtPmRldi5rb2Jq LnNkLAorCQkJCQkJInZlZF9wbXN0YXRlIik7CisKKyNpZmRlZiBDT05GSUdfRFJNX0lQVlJfRUMK Kwl2ZWRfaW5pdF9lYyh2ZWRfcHJpdik7CisjZW5kaWYKKworCS8qIEluaXRpYWxpemUgY29tYW5k IHZlZCBxdWV1ZWluZyAqLworCUlOSVRfTElTVF9IRUFEKCZ2ZWRfcHJpdi0+dmVkX3F1ZXVlKTsK KwltdXRleF9pbml0KCZ2ZWRfcHJpdi0+dmVkX211dGV4KTsKKwlzcGluX2xvY2tfaW5pdCgmdmVk X3ByaXYtPnZlZF9sb2NrKTsKKwl2ZWRfcHJpdi0+bW11X3JlY292ZXJfcGFnZSA9IGFsbG9jX3Bh Z2UoR0ZQX0RNQTMyKTsKKwlpZiAoIXZlZF9wcml2LT5tbXVfcmVjb3Zlcl9wYWdlKQorCQlnb3Rv IGVycl9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9leGl0OgorCUlQVlJfRVJST1IoIlZFRDog aW5pdCBvbmUgdGltZSBmYWlsZWQuXG4iKTsKKwlrZnJlZShkZXZfcHJpdi0+dmVkX3ByaXZhdGUp OworCisJcmV0dXJuIDE7Cit9CisKKy8qIFRoaXMgdmFsdWUgaXMgaGFyZGNvZGVkIGluIEZXICov CisjZGVmaW5lIFdEVF9DTE9DS19ESVZJREVSIDEyOAoraW50MzJfdCB2ZWRfcG9zdF9ib290X2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3By aXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisJdWludDMyX3QgZGV2aWNlX25vZGVfZmxhZ3Mg PQorCQkJRFNJQUJMRV9JRExFX0dQSU9fU0lHIHwgRFNJQUJMRV9BdXRvX0NMT0NLX0dBVElORyB8 CisJCQlSRVRVUk5fVkRFQl9EQVRBX0lOX0NPTVBMRVRJT04gfAorCQkJTk9UX0VOQUJMRV9PTl9I T1NUX0NPTkNFQUxNRU5UOworCisJLyogRERLIHNldCBmZV93ZHRfY2xrcyBhcyAweDgyMCBhbmQg YmVfd2R0X2Nsa3MgYXMgMHg4MjAwICovCisJdWludDMyX3QgZmVfd2R0X2Nsa3MgPSAweDMzNCAq IFdEVF9DTE9DS19ESVZJREVSOworCXVpbnQzMl90IGJlX3dkdF9jbGtzID0gMHgyMDA4ICogV0RU X0NMT0NLX0RJVklERVI7CisKKwlWRURfUkVHX1dSSVRFMzIoRklSTVdBUkVJRCwgTVNWRFhfQ09N TVNfRklSTVdBUkVfSUQpOworCVZFRF9SRUdfV1JJVEUzMihkZXZpY2Vfbm9kZV9mbGFncywgTVNW RFhfQ09NTVNfT0ZGU0VUX0ZMQUdTKTsKKworCS8qIHJlYWQgcmVnaXN0ZXIgYmFuayBzaXplICov CisJeworCQl1aW50MzJfdCByYW1fYmFua19zaXplOworCQl1aW50MzJfdCBiYW5rX3NpemUsIHJl ZzsKKwkJcmVnID0gVkVEX1JFR19SRUFEMzIoTVNWRFhfTVRYX1JBTV9CQU5LX09GRlNFVCk7CisJ CWJhbmtfc2l6ZSA9CisJCQlSRUdJT19SRUFEX0ZJRUxEKHJlZywgTVNWRFhfTVRYX1JBTV9CQU5L LAorCQkJCQkgTVRYX1JBTV9CQU5LX1NJWkUpOworCQlyYW1fYmFua19zaXplID0gKHVpbnQzMl90 KSgxIDw8IChiYW5rX3NpemUgKyAyKSk7CisJCUlQVlJfREVCVUdfSU5JVCgiVkVEOiBSQU0gYmFu ayBzaXplID0gJWQgYnl0ZXNcbiIsCisJCQkJcmFtX2Jhbmtfc2l6ZSk7CisJfQorCS8qIGhvc3Qg ZW5kICovCisKKwkvKiBEREsgc2V0dXAgdGlsaW5nIHJlZ2lvbiBoZXJlICovCisJLyogRERLIHNl dCBNTVVfQ09OVFJPTDIgcmVnaXN0ZXIgKi8KKworCS8qIHNldCB3YXRjaGRvZyB0aW1lciBoZXJl ICovCisJaWYgKCF2ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1bml0KSB7CisJCWludCByZWdfdmFs ID0gMDsKKwkJUkVHSU9fV1JJVEVfRklFTEQocmVnX3ZhbCwgRkVfTVNWRFhfV0RUX0NPTlRST0ws CisJCQkJICBGRV9XRFRfQ05UX0NUUkwsIDB4Myk7CisJCVJFR0lPX1dSSVRFX0ZJRUxEKHJlZ192 YWwsIEZFX01TVkRYX1dEVF9DT05UUk9MLAorCQkJCSAgRkVfV0RUX0VOQUJMRSwgMCk7CisJCVJF R0lPX1dSSVRFX0ZJRUxEKHJlZ192YWwsIEZFX01TVkRYX1dEVF9DT05UUk9MLAorCQkJCSAgRkVf V0RUX0FDVElPTjAsIDEpOworCQlSRUdJT19XUklURV9GSUVMRChyZWdfdmFsLCBGRV9NU1ZEWF9X RFRfQ09OVFJPTCwKKwkJCQkgIEZFX1dEVF9DTEVBUl9TRUxFQ1QsIDEpOworCQlSRUdJT19XUklU RV9GSUVMRChyZWdfdmFsLCBGRV9NU1ZEWF9XRFRfQ09OVFJPTCwKKwkJCQkgIEZFX1dEVF9DTEtE SVZfU0VMRUNULCA3KTsKKwkJVkVEX1JFR19XUklURTMyKGZlX3dkdF9jbGtzIC8gV0RUX0NMT0NL X0RJVklERVIsCisJCQkJRkVfTVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9PRkZTRVQpOworCQlWRURf UkVHX1dSSVRFMzIocmVnX3ZhbCwgRkVfTVNWRFhfV0RUX0NPTlRST0xfT0ZGU0VUKTsKKworCQly ZWdfdmFsID0gMDsKKwkJLyogRERLIHNldCBCRV9XRFRfQ05UX0NUUkwgYXMgMHg1IGFuZCBCRV9X RFRfQ0xFQVJfU0VMRUNUIGFzIDB4MSAqLworCQlSRUdJT19XUklURV9GSUVMRChyZWdfdmFsLCBC RV9NU1ZEWF9XRFRfQ09OVFJPTCwKKwkJCQkgIEJFX1dEVF9DTlRfQ1RSTCwgMHg3KTsKKwkJUkVH SU9fV1JJVEVfRklFTEQocmVnX3ZhbCwgQkVfTVNWRFhfV0RUX0NPTlRST0wsCisJCQkJICBCRV9X RFRfRU5BQkxFLCAwKTsKKwkJUkVHSU9fV1JJVEVfRklFTEQocmVnX3ZhbCwgQkVfTVNWRFhfV0RU X0NPTlRST0wsCisJCQkJICBCRV9XRFRfQUNUSU9OMCwgMSk7CisJCVJFR0lPX1dSSVRFX0ZJRUxE KHJlZ192YWwsIEJFX01TVkRYX1dEVF9DT05UUk9MLAorCQkJCSAgQkVfV0RUX0NMRUFSX1NFTEVD VCwgMHhkKTsKKwkJUkVHSU9fV1JJVEVfRklFTEQocmVnX3ZhbCwgQkVfTVNWRFhfV0RUX0NPTlRS T0wsCisJCQkJICBCRV9XRFRfQ0xLRElWX1NFTEVDVCwgNyk7CisKKwkJVkVEX1JFR19XUklURTMy KGJlX3dkdF9jbGtzIC8gV0RUX0NMT0NLX0RJVklERVIsCisJCQkJQkVfTVNWRFhfV0RUX0NPTVBB UkVNQVRDSF9PRkZTRVQpOworCQlWRURfUkVHX1dSSVRFMzIocmVnX3ZhbCwgQkVfTVNWRFhfV0RU X0NPTlRST0xfT0ZGU0VUKTsKKwl9IGVsc2UgeworCQkvKiBmb3IgdGhlIG90aGVyIHR3bywgdXNl IHRoZSBkZWZhdWx0IHZhbHVlIHB1bml0IHNldCAqLworCQlWRURfUkVHX1dSSVRFMzIoZmVfd2R0 X2Nsa3MgLyBXRFRfQ0xPQ0tfRElWSURFUiwKKwkJCQlGRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENI X09GRlNFVCk7CisJCVZFRF9SRUdfV1JJVEUzMihiZV93ZHRfY2xrcyAvIFdEVF9DTE9DS19ESVZJ REVSLAorCQkJCUJFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfT0ZGU0VUKTsKKwl9CisKKwlyZXR1 cm4gdmVkX3JlbmRlY19pbml0X2J5X21zZyhkZXYpOworfQorCitzdGF0aWMgdm9pZCB2ZWRfcG9z dF9wb3dlcnVwX2NvcmVfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg ZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXZlZF9zZXRf Y2xvY2tzKGRldl9wcml2LT5kZXYsIGNsa19lbmFibGVfYWxsKTsKKworCS8qIHZlZF9jbGVhcl9p cnEgb25seSBjbGVhciBDUl9NVFhfSVJRIGludCwKKwkgKiB3aGlsZSBEREsgc2V0IDB4RkZGRkZG RkYgKi8KKwl2ZWRfY2xlYXJfaXJxKGRldik7CisJdmVkX2VuYWJsZV9pcnEoZGV2KTsKK30KKwor c3RhdGljIGludDMyX3QgdmVkX210eF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludDMy X3QgZXJyb3JfcmVzZXQpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBjbGtfZGl2aWRlciA9IDIwMDsKKwlpbnQzMl90 IHJldDsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2 YXRlOworCisJLyogVGhlc2Ugc2hvdWxkIG5vdCBiZSByZXByb2dyYW1lcyBhZnRlciBhIGVycm9y IHJlc2V0ICovCisJaWYgKCFlcnJvcl9yZXNldCkgeworCQlWRURfUkVHX1dSSVRFMzIoMCwgTVNW RFhfQ09NTVNfTVNHX0NPVU5URVIpOworCQlWRURfUkVHX1dSSVRFMzIoMCwgTVNWRFhfRVhUX0ZX X0VSUk9SX1NUQVRFKTsKKwl9CisKKwlWRURfUkVHX1dSSVRFMzIoMCwgTVNWRFhfQ09NTVNfRVJS T1JfVFJJRyk7CisJVkVEX1JFR19XUklURTMyKDAsIE1TVkRYX0NPTU1TX1RPX0hPU1RfUkRfSU5E RVgpOworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT01NU19UT19IT1NUX1dSVF9JTkRFWCk7 CisJVkVEX1JFR19XUklURTMyKDAsIE1TVkRYX0NPTU1TX1RPX01UWF9SRF9JTkRFWCk7CisJVkVE X1JFR19XUklURTMyKDAsIE1TVkRYX0NPTU1TX1RPX01UWF9XUlRfSU5ERVgpOworCVZFRF9SRUdf V1JJVEUzMigwLCBNU1ZEWF9DT01NU19GSVJNV0FSRV9JRCk7CisJLyoKKwkgKiBJTUcgRERLIHNl dCBhczogZ3VpMzJEZXZpY2VOb2RlRmxhZ3MgJiAweDQwMDAsCisJICogd2hpbGUgaXQgaXMgbm90 IHNldCBpbiBmdyBzcGVjCisJICogVGhlIGJpdCBuZWVkZSB0byBiZSBzZXQgcHJlYm9vdCBpcyB0 aGUgcGVyZm9ybWNlIGRhdGEgYml0IHNpbmNlIHRoaXMKKwkgKiBjb250cm9scyBjYXVzZWQgdGhl IGZpcm13YXJlIHRvIHJlYmFsYW5jZSB0aGUgbWVzc2FnZSBxdWV1ZXMuCisJICovCisJVkVEX1JF R19XUklURTMyKDAsIE1TVkRYX0NPTU1TX09GRlNFVF9GTEFHUyk7CisKKwkvKiBEREs6IGNoZWNr IGRldmljZV9ub2RlX2ZsYWdzIHdpdGggMHg0MDAgdG8gfCAoMTw8MTYpLAorCSAqIHdoaWxlIGl0 IGlzIG5vdCBzZXQgaW4gZncgc3BlYyAqLworCVZFRF9SRUdfV1JJVEUzMihjbGtfZGl2aWRlciAt IDEsIE1UWF9TWVNDX1RJTUVSRElWX09GRlNFVCk7CisKKwkvKiBEREs6IExMRE1BIHVwbG9hZCBm dywgd2hpY2ggaXMgbm93IGRvbmUgYnkgZ3VuaXQgKi8KKworCS8qIERESzogcmVkZWZpbmUgdG9I b3N0IGFuZCB0b01UWCBtc2cgYnVmZmVyLCBzZWVtcyBub3QgbmVlZGVkICovCisKKwkvKiBXYWl0 IGZvciB0aGUgc2lnbmF0dXJlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gYmFjayAqLworCXJldCA9IHZl ZF93YWl0X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwgTVNWRFhfQ09NTVNfU0lHTkFUVVJFLAorCQkJ CSAgICBNU1ZEWF9DT01NU19TSUdOQVRVUkVfVkFMVUUsCisJCQkJICAgIDB4ZmZmZmZmZmYsCisJ CQkJICAgIDEwMDAsIDEwMDApOworCWlmIChyZXQpIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJXQVJO OiBHdW5pdCB1cGxvYWQgZncgZmFpbHVyZSxcbiIKKwkJCQkiTVNWRFhfQ09NTVNfU0lHTkFUVVJF IHJlZyBpcyAweCV4LCIKKwkJCQkiTVNWRFhfQ09NTVNfRldfU1RBVFVTIHJlZyBpcyAweCV4LCIK KwkJCQkiTVRYX0VOQUJMRSByZWcgaXMgMHgleC5cbiIsCisJCQkJVkVEX1JFR19SRUFEMzIoTVNW RFhfQ09NTVNfU0lHTkFUVVJFKSwKKwkJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19GV19T VEFUVVMpLAorCQkJCVZFRF9SRUdfUkVBRDMyKE1UWF9FTkFCTEVfT0ZGU0VUKSk7CisJCXZlZF9w cml2LT52ZWRfbmVlZHNfcmVzZXQgfD0KKwkJCQlNU1ZEWF9SRVNFVF9ORUVEU19SRVVQTE9BRF9G VyB8CisJCQkJTVNWRFhfUkVTRVRfTkVFRFNfSU5JVF9GVzsKKwl9CisJcmV0dXJuIHJldDsKK30K KworaW50MzJfdCB2ZWRfcG9zdF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50 MzJfdCBjbWQ7CisJaW50IHJldDsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2OworCisJ aWYgKCFkZXZfcHJpdiB8fCAhZGV2X3ByaXYtPnZlZF9wcml2YXRlKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCXZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCisJdmVkX3ByaXYtPnZl ZF9idXN5ID0gMDsKKwl2ZWRfcHJpdi0+dmVkX2h3X2J1c3kgPSAxOworCisJaWYgKHZlZF9wcml2 LT5md19sb2FkZWRfYnlfcHVuaXQpIHsKKwkJLyogRERLOiBDb25maWd1cmUgTVNWRFggTWVtb3J5 IFN0YWxsaW5nIGl3dGggdGhlIG1pbiwgbWF4IGFuZCByYXRpbyBvZiBhY2Nlc3MgKi8KKwkJdmVk X3Bvc3RfcG93ZXJ1cF9jb3JlX3Jlc2V0KGRldik7CisJfQorCisJaWYgKCF2ZWRfcHJpdi0+Zndf bG9hZGVkX2J5X3B1bml0KSB7CisJCS8qIEVuYWJsZSBNTVUgYnkgcmVtb3ZpbmcgYWxsIGJ5cGFz cyBiaXRzICovCisJCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9NTVVfQ09OVFJPTDBfT0ZGU0VU KTsKKwl9IGVsc2UgeworCQl2ZWRfcHJpdi0+cmVuZGVjX2luaXRpYWxpemVkID0gMDsKKwkJcmV0 ID0gdmVkX210eF9pbml0KGRldiwgdmVkX3ByaXYtPmRlY29kaW5nX2Vycik7CisJCWlmIChyZXQp IHsKKwkJCUlQVlJfRVJST1IoIlZFRDogdmVkX210eF9pbml0IGZhaWxlZC5cbiIpOworCQkJcmV0 dXJuIHJldDsKKwkJfQorCX0KKworCWlmICghdmVkX3ByaXYtPmZ3X2xvYWRlZF9ieV9wdW5pdCkg eworCQl2ZWRfcmVuZGVjX2luaXRfYnlfcmVnKGRldik7CisJCWlmICghdmVkX3ByaXYtPmZ3X2Jv KSB7CisJCQlyZXQgPSB2ZWRfYWxsb2NfZndfYm8oZGV2X3ByaXYpOworCQkJaWYgKHJldCkgewor CQkJCUlQVlJfRVJST1IoIlZFRDogdmVkX2FsbG9jX2Z3X2JvIGZhaWxlZC5cbiIpOworCQkJCXJl dHVybiByZXQ7CisJCQl9CisJCX0KKwkJLyogbW92ZSBmdyBsb2FkaW5nIHRvIHRoZSBwbGFjZSBy ZWNlaXZpbmcgZmlyc3QgY21kIGJ1ZmZlciAqLworCQl2ZWRfcHJpdi0+dmVkX2Z3X2xvYWRlZCA9 IDA7IC8qIG5lZWQgdG8gbG9hZCBmaXJ3YXJlICovCisJCS8qIGl0IHNob3VsZCBiZSBzZXQgYXQg cHVuaXQgcG9zdCBib290IGluaXQgcGhhc2UgKi8KKwkJVkVEX1JFR19XUklURTMyKDgyMCwgRkVf TVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9PRkZTRVQpOworCQlWRURfUkVHX1dSSVRFMzIoODIwMCwg QkVfTVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9PRkZTRVQpOworCisJCVZFRF9SRUdfV1JJVEUzMig4 MjAsIEZFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfT0ZGU0VUKTsKKwkJVkVEX1JFR19XUklURTMy KDgyMDAsIEJFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfT0ZGU0VUKTsKKworCQl2ZWRfY2xlYXJf aXJxKGRldik7CisJCXZlZF9lbmFibGVfaXJxKGRldik7CisKKwkJY21kID0gMDsKKwkJY21kID0g VkVEX1JFR19SRUFEMzIoVkVDX1NISUZUUkVHX0NPTlRST0xfT0ZGU0VUKTsKKwkJUkVHSU9fV1JJ VEVfRklFTEQoY21kLCBWRUNfU0hJRlRSRUdfQ09OVFJPTCwKKwkJICBTUl9NQVNURVJfU0VMRUNU LCAxKTsgIC8qIEhvc3QgKi8KKwkJVkVEX1JFR19XUklURTMyKGNtZCwgVkVDX1NISUZUUkVHX0NP TlRST0xfT0ZGU0VUKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50MzJfdCBpcHZyX3ZlZF9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQzMl90IHJldDsKKworCWlmICghZGV2 X3ByaXYtPnZlZF9wcml2YXRlKSB7CisJCXJldCA9IHZlZF9zdGFydHVwX2luaXQoZGV2KTsKKwkJ aWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCUlQVlJfRVJST1IoIlZFRDogdmVkX3N0YXJ0dXBfaW5p dCBmYWlsZWQuXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlpZiAodW5saWtlbHko ZGV2X3ByaXYtPnZlZF9wcml2YXRlID09IE5VTEwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJl dCA9IHZlZF9hbGxvY19jY2JfZm9yX3JlbmRlYyhkZXZfcHJpdi0+dmVkX3ByaXZhdGUsCisJCQlS RU5ERUNfQV9TSVpFLCBSRU5ERUNfQl9TSVpFKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlJ UFZSX0VSUk9SKCJWRUQ6IG1zdmR4X2FsbG9jX2NjYl9mb3JfcmVuZGVjIGZhaWxlZC5cbiIpOwor CQl2ZWRfZnJlZV9jY2IoZGV2X3ByaXYtPnZlZF9wcml2YXRlKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXQgPSB2ZWRfcG9zdF9pbml0KGRldik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJ SVBWUl9FUlJPUigiVkVEOiB2ZWRfcG9zdF9pbml0IGZhaWxlZC5cbiIpOworCQlyZXR1cm4gcmV0 OworCX0KKworCXJldHVybiAwOworfQorCitpbnQzMl90IGlwdnJfdmVkX3VuaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9w cml2LT52ZWRfcHJpdmF0ZTsKKworCS8qIFZFRF9SRUdfV1JJVEUzMiAoY2xrX2VuYWJsZV9taW5p bWFsLCBNU1ZEWF9NQU5fQ0xLX0VOQUJMRSk7ICovCisJSVBWUl9ERUJVR19JTklUKCJWRUQ6IHNl dCB0aGUgVkVEIGNsb2NrIHRvIDAuXG4iKTsKKwl2ZWRfc2V0X2Nsb2NrcyhkZXZfcHJpdi0+ZGV2 LCAwKTsKKworCWlmIChOVUxMID09IHZlZF9wcml2KSB7CisJCUlQVlJfRVJST1IoIlZFRDogaXB2 cl92ZWRfdW5pbml0OiB2ZWRfcHJpdiBpcyBOVUxMIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisK KwlpZiAodmVkX3ByaXYtPmNjYjAgfHwgdmVkX3ByaXYtPmNjYjEpCisJCXZlZF9mcmVlX2NjYih2 ZWRfcHJpdik7CisKKwlpZiAodmVkX3ByaXYtPmZ3X2JvKSB7CisJCWRybV9nZW1fb2JqZWN0X3Vu cmVmZXJlbmNlX3VubG9ja2VkKCZ2ZWRfcHJpdi0+ZndfYm8tPmJhc2UpOworCQl2ZWRfcHJpdi0+ ZndfYm8gPSBOVUxMOworCX0KKworCWlmICghdmVkX3ByaXYtPmZ3X2xvYWRlZF9ieV9wdW5pdCkg eworCQlpZiAodmVkX3ByaXYtPnZlZF9md19wdHIpCisJCQlrZnJlZSh2ZWRfcHJpdi0+dmVkX2Z3 X3B0cik7CisJfQorCisJa2ZyZWUodmVkX3ByaXYtPnZlZF9lY19jdHhbMF0pOworCisJaWYgKHZl ZF9wcml2LT5tbXVfcmVjb3Zlcl9wYWdlKQorCQlfX2ZyZWVfcGFnZSh2ZWRfcHJpdi0+bW11X3Jl Y292ZXJfcGFnZSk7CisKKwlpZiAodmVkX3ByaXYpIHsKKwkJLyogcGNpX3NldF9kcnZkYXRhKGRl di0+cGRldiwgTlVMTCk7ICovCisJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5wbGF0Zm9ybWRl di0+ZGV2LAorCQkJCSAgICZkZXZfYXR0cl92ZWRfcG1zdGF0ZSk7CisJCXN5c2ZzX3B1dCh2ZWRf cHJpdi0+c3lzZnNfcG1zdGF0ZSk7CisJCXZlZF9wcml2LT5zeXNmc19wbXN0YXRlID0gTlVMTDsK KwkJa2ZyZWUodmVkX3ByaXYpOworCQlkZXZfcHJpdi0+dmVkX3ByaXZhdGUgPSBOVUxMOworCX0K KworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2lu aXQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYWI1N2YwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaXB2ci92ZWRfaW5pdC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICogdmVkX2luaXQuaDogVkVEIGluaXRpYWxpemF0aW9uIGhlYWRlciBmaWxlCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EK KyAqIENvcHlyaWdodCAoYykgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQsIFVLCisg KiBDb3B5cmlnaHQgKGMpIDIwMDMgVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIENlZGFyIFBhcmss IFRleGFzLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAor ICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxv bmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlh bmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNp Zm5kZWYgX1ZFRF9JTklUX0hfCisjZGVmaW5lIF9WRURfSU5JVF9IXworCisjaW5jbHVkZSAiaXB2 cl9kcnYuaCIKKwordm9pZCB2ZWRfY2xlYXJfaXJxKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwor Cit2b2lkIHZlZF9kaXNhYmxlX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKwordm9pZCB2 ZWRfZW5hYmxlX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworaW50MzJfdCB2ZWRfd2Fp dF9mb3JfcmVnaXN0ZXIoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAg dWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgdWludDMyX3QgZW5hYmxlLAorCQkJICAg dWludDMyX3QgcG9sbF9jbnQsIHVpbnQzMl90IHRpbWVvdXQpOworCit2b2lkIHZlZF9zZXRfY2xv Y2tzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGNsb2NrX3N0YXRlKTsKKworaW50 MzJfdCB2ZWRfY29yZV9yZXNldChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpOwor CisvKiB0b2RvOiB2ZWRfcmVzZXQgaXMgdXNlZCBmb3IgdGhlIGNhc2Ugb2YgZncgbG9hZGluZyBi eSBkcml2ZXIKKyAqIExhdGVyIHdlIGNhbiB0ZXN0IGlmIGl0IGNhbiBiZSByZW1vdmVkLiAqLwor aW50MzJfdCB2ZWRfcmVzZXQoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2KTsKKwor aW50MzJfdCB2ZWRfcmVuZGVjX2luaXRfYnlfbXNnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwor CitpbnQzMl90IHZlZF9wb3N0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKK2ludDMy X3QgdmVkX3Bvc3RfYm9vdF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCitpbnQzMl90 IGlwdnJfdmVkX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKK2ludDMyX3QgaXB2cl92 ZWRfdW5pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9tc2cuaCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3Zl ZF9tc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmZiYTdlCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX21zZy5oCkBAIC0wLDAgKzEs MzY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHZlZF9tc2cuaDogVkVEIG1lc3NhZ2UgZGVm aW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGls bHNib3JvLCBPUiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSW1hZ2luYXRpb24gVGVjaG5v bG9naWVzIExpbWl0ZWQsIFVLCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAq ICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIExpIFplbmcgPGxpLnpl bmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVkVEX01T R19IXworI2RlZmluZSBfVkVEX01TR19IXworCisvKiBTdGFydCBvZiBwYXJzZXIgc3BlY2lmaWMg SG9zdC0+TVRYIG1lc3NhZ2VzLiAqLworI2RlZmluZQlGV1JLX01TR0lEX1NUQVJUX1BTUl9IT1NU TVRYX01TRwkoMHg4MCkKKworLyogU3RhcnQgb2YgcGFyc2VyIHNwZWNpZmljIE1UWC0+SG9zdCBt ZXNzYWdlcy4gKi8KKyNkZWZpbmUJRldSS19NU0dJRF9TVEFSVF9QU1JfTVRYSE9TVF9NU0cJKDB4 QzApCisKKy8qIEhvc3QgZGVmaW5lZCBtc2csIGp1c3QgZm9yIGhvc3QgdXNlLCBNVFggbm90IHJl Y2duaXplICovCisjZGVmaW5lCUZXUktfTVNHSURfSE9TVF9FTVVMQVRFRAkJKDB4NDApCisKKy8q IFRoaXMgdHlwZSBkZWZpbmVzIHRoZSBmcmFtZXdvcmsgc3BlY2lmaWVkIG1lc3NhZ2UgaWRzICov CitlbnVtIHsKKwkvKiAhIFNlbnQgYnkgdGhlIFZBIGRyaXZlciBvbiB0aGUgaG9zdCB0byB0aGUg bXR4IGZpcm13YXJlLgorCSAqLworCU1UWF9NU0dJRF9QQURESU5HID0gMCwKKwlNVFhfTVNHSURf SU5JVCA9IEZXUktfTVNHSURfU1RBUlRfUFNSX0hPU1RNVFhfTVNHLAorCU1UWF9NU0dJRF9ERUNP REVfRkUsCisJTVRYX01TR0lEX0RFQkxPQ0ssCisJTVRYX01TR0lEX0lOVFJBX09PTEQsCisJTVRY X01TR0lEX0RFQ09ERV9CRSwKKwlNVFhfTVNHSURfSE9TVF9CRV9PUFAsCisKKwkvKiEgU2VudCBi eSB0aGUgbXR4IGZpcm13YXJlIHRvIGl0c2VsZi4KKwkgKi8KKwlNVFhfTVNHSURfUkVOREVSX01D X0lOVEVSUlVQVCwKKworCS8qIHVzZWQgdG8gZGl0aW5ndWlzaCBtcnN0IGFuZCBtZmxkICovCisJ TVRYX01TR0lEX0RFQkxPQ0tfTUZMRCA9IEZXUktfTVNHSURfSE9TVF9FTVVMQVRFRCwKKwlNVFhf TVNHSURfSU5UUkFfT09MRF9NRkxELAorCU1UWF9NU0dJRF9ERUNPREVfQkVfTUZMRCwKKwlNVFhf TVNHSURfSE9TVF9CRV9PUFBfTUZMRCwKKworCS8qISBTZW50IGJ5IHRoZSBEWFZBIGZpcm13YXJl IG9uIHRoZSBNVFggdG8gdGhlIGhvc3QuCisJICovCisJTVRYX01TR0lEX0NPTVBMRVRFRCA9IEZX UktfTVNHSURfU1RBUlRfUFNSX01UWEhPU1RfTVNHLAorCU1UWF9NU0dJRF9DT01QTEVURURfQkFU Q0gsCisJTVRYX01TR0lEX0RFQkxPQ0tfUkVRVUlSRUQsCisJTVRYX01TR0lEX1RFU1RfUkVTUE9O Q0UsCisJTVRYX01TR0lEX0FDSywKKwlNVFhfTVNHSURfRkFJTEVELAorCU1UWF9NU0dJRF9DT05U SUdVSVRZX1dBUk5JTkcsCisJTVRYX01TR0lEX0hXX1BBTklDLAorfTsKKworI2RlZmluZSBNVFhf R0VOTVNHX1NJWkVfVFlQRQkJdWludDhfdAorI2RlZmluZSBNVFhfR0VOTVNHX1NJWkVfTUFTSwkJ KDB4RkYpCisjZGVmaW5lIE1UWF9HRU5NU0dfU0laRV9TSElGVAkJKDApCisjZGVmaW5lIE1UWF9H RU5NU0dfU0laRV9PRkZTRVQJCSgweDAwMDApCisKKyNkZWZpbmUgTVRYX0dFTk1TR19JRF9UWVBF CQl1aW50OF90CisjZGVmaW5lIE1UWF9HRU5NU0dfSURfTUFTSwkJKDB4RkYpCisjZGVmaW5lIE1U WF9HRU5NU0dfSURfU0hJRlQJCSgwKQorI2RlZmluZSBNVFhfR0VOTVNHX0lEX09GRlNFVAkJKDB4 MDAwMSkKKworI2RlZmluZSBNVFhfR0VOTVNHX0hFQURFUl9TSVpFCQkyCisKKyNkZWZpbmUgTVRY X0dFTk1TR19GRU5DRV9UWVBFCQl1aW50MTZfdAorI2RlZmluZSBNVFhfR0VOTVNHX0ZFTkNFX01B U0sJCSgweEZGRkYpCisjZGVmaW5lIE1UWF9HRU5NU0dfRkVOQ0VfT0ZGU0VUCQkoMHgwMDAyKQor I2RlZmluZSBNVFhfR0VOTVNHX0ZFTkNFX1NISUZUCQkoMCkKKworI2RlZmluZSBGV19JTlZBTElE QVRFX01NVQkJKDB4MDAxMCkKKwordW5pb24gbXNnX2hlYWRlciB7CisJc3RydWN0IHsKKwkJdWlu dDMyX3QgbXNnX3NpemU6ODsKKwkJdWludDMyX3QgbXNnX3R5cGU6ODsKKwkJdWludDMyX3QgbXNn X2ZlbmNlOjE2OworCX0gYml0czsKKwl1aW50MzJfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBmd19p bml0X21zZyB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgbXNnX3NpemU6ODsK KwkJCXVpbnQzMl90IG1zZ190eXBlOjg7CisJCQl1aW50MzJfdCByZXNlcnZlZDoxNjsKKwkJfSBi aXRzOworCQl1aW50MzJfdCB2YWx1ZTsKKwl9IGhlYWRlcjsKKwl1aW50MzJfdCByZW5kZWNfYWRk cjA7CisJdWludDMyX3QgcmVuZGVjX2FkZHIxOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVp bnQzMl90IHJlbmRlY19zaXplMDoxNjsKKwkJCXVpbnQzMl90IHJlbmRlY19zaXplMToxNjsKKwkJ fSBiaXRzOworCQl1aW50MzJfdCB2YWx1ZTsKKwl9IHJlbmRlY19zaXplOworfTsKKworc3RydWN0 IGZ3X2RlY29kZV9tc2cgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IG1zZ19z aXplOjg7CisJCQl1aW50MzJfdCBtc2dfdHlwZTo4OworCQkJdWludDMyX3QgbXNnX2ZlbmNlOjE2 OworCQl9IGJpdHM7CisJCXVpbnQzMl90IHZhbHVlOworCX0gaGVhZGVyOworCXVuaW9uIHsKKwkJ c3RydWN0IHsKKwkJCXVpbnQzMl90IGZsYWdzOjE2OworCQkJdWludDMyX3QgYnVmZmVyX3NpemU6 MTY7CisJCX0gYml0czsKKwkJdWludDMyX3QgdmFsdWU7CisJfSBmbGFnX3NpemU7CisJdWludDMy X3QgY3J0bF9hbGxvY19hZGRyOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGNv bnRleHQ6ODsKKwkJCXVpbnQzMl90IG1tdV9wdGQ6MjQ7CisJCX0gYml0czsKKwkJdWludDMyX3Qg dmFsdWU7CisJfSBtbXVfY29udGV4dDsKKwl1aW50MzJfdCBvcGVyYXRpbmdfbW9kZTsKK307CisK K3N0cnVjdCBmd19kZWJsb2NrX21zZyB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMy X3QgbXNnX3NpemU6ODsKKwkJCXVpbnQzMl90IG1zZ190eXBlOjg7CisJCQl1aW50MzJfdCBtc2df ZmVuY2U6MTY7CisJCX0gYml0czsKKwkJdWludDMyX3QgdmFsdWU7CisJfSBoZWFkZXI7CisJdW5p b24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgZmxhZ3M6MTY7CisJCQl1aW50MzJfdCBzbGlj ZV9maWVsZF90eXBlOjI7CisJCQl1aW50MzJfdCByZXNlcnZlZDoxNDsKKwkJfSBiaXRzOworCQl1 aW50MzJfdCB2YWx1ZTsKKwl9IGZsYWdfdHlwZTsKKwl1aW50MzJfdCBvcGVyYXRpbmdfbW9kZTsK Kwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBjb250ZXh0Ojg7CisJCQl1aW50MzJf dCBtbXVfcHRkOjI0OworCQl9IGJpdHM7CisJCXVpbnQzMl90IHZhbHVlOworCX0gbW11X2NvbnRl eHQ7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgZnJhbWVfaGVpZ2h0X21iOjE2 OworCQkJdWludDMyX3QgcGljX3dpZHRoX21iOjE2OworCQl9IGJpdHM7CisJCXVpbnQzMl90IHZh bHVlOworCX0gcGljX3NpemU7CisJdWludDMyX3QgYWRkcmVzc19hMDsKKwl1aW50MzJfdCBhZGRy ZXNzX2ExOworCXVpbnQzMl90IG1iX3BhcmFtX2FkZHJlc3M7CisJdWludDMyX3QgZXh0X3N0cmlk ZV9hOworCXVpbnQzMl90IGFkZHJlc3NfYjA7CisJdWludDMyX3QgYWRkcmVzc19iMTsKKwl1aW50 MzJfdCBhbHRfb3V0cHV0X2ZsYWdzX2I7CisJLyogYWRkaXRpb25hbCBtc2cgb3V0c2lkZSBvZiBJ TUcgbXNnICovCisJdWludDMyX3QgYWRkcmVzc19jMDsKKwl1aW50MzJfdCBhZGRyZXNzX2MxOwor fTsKKworI2RlZmluZSBNVFhfUEFETVNHX1NJWkUgMgorc3RydWN0IGZ3X3BhZGRpbmdfbXNnIHsK Kwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBtc2dfc2l6ZTo4OworCQkJdWludDMy X3QgbXNnX3R5cGU6ODsKKwkJfSBiaXRzOworCQl1aW50MTZfdCB2YWx1ZTsKKwl9IGhlYWRlcjsK K307CisKK3N0cnVjdCBmd19tc2dfaGVhZGVyIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1 aW50MzJfdCBtc2dfc2l6ZTo4OworCQkJdWludDMyX3QgbXNnX3R5cGU6ODsKKwkJCXVpbnQzMl90 IG1zZ19mZW5jZToxNjsKKwkJfSBiaXRzOworCQl1aW50MzJfdCB2YWx1ZTsKKwl9IGhlYWRlcjsK K307CisKK3N0cnVjdCBmd19jb21wbGV0ZWRfbXNnIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJ CQl1aW50MzJfdCBtc2dfc2l6ZTo4OworCQkJdWludDMyX3QgbXNnX3R5cGU6ODsKKwkJCXVpbnQz Ml90IG1zZ19mZW5jZToxNjsKKwkJfSBiaXRzOworCQl1aW50MzJfdCB2YWx1ZTsKKwl9IGhlYWRl cjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBzdGFydF9tYjoxNjsKKwkJCXVp bnQzMl90IGxhc3RfbWI6MTY7CisJCX0gYml0czsKKwkJdWludDMyX3QgdmFsdWU7CisJfSBtYjsK Kwl1aW50MzJfdCBmbGFnczsKKwl1aW50MzJfdCB2ZGViY3I7Cit9OworCitzdHJ1Y3QgZndfZGVi bG9ja19yZXF1aXJlZF9tc2cgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IG1z Z19zaXplOjg7CisJCQl1aW50MzJfdCBtc2dfdHlwZTo4OworCQkJdWludDMyX3QgbXNnX2ZlbmNl OjE2OworCQl9IGJpdHM7CisJCXVpbnQzMl90IHZhbHVlOworCX0gaGVhZGVyOworfTsKKworc3Ry dWN0IGZ3X3BhbmljX21zZyB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgbXNn X3NpemU6ODsKKwkJCXVpbnQzMl90IG1zZ190eXBlOjg7CisJCQl1aW50MzJfdCBtc2dfZmVuY2U6 MTY7CisJCX0gYml0czsKKwkJdWludDMyX3QgdmFsdWU7CisJfSBoZWFkZXI7CisJdWludDMyX3Qg ZmVfc3RhdHVzOworCXVpbnQzMl90IGJlX3N0YXR1czsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJ CQl1aW50MzJfdCBsYXN0X21iOjE2OworCQkJdWludDMyX3QgcmVzZXJ2ZWQyOjE2OworCQl9IGJp dHM7CisJCXVpbnQzMl90IHZhbHVlOworCX0gbWI7Cit9OworCitzdHJ1Y3QgZndfY29udGlndWl0 eV9tc2cgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IG1zZ19zaXplOjg7CisJ CQl1aW50MzJfdCBtc2dfdHlwZTo4OworCQkJdWludDMyX3QgbXNnX2ZlbmNlOjE2OworCQl9IGJp dHM7CisJCXVpbnQzMl90IHZhbHVlOworCX0gaGVhZGVyOworCXVuaW9uIHsKKwkJc3RydWN0IHsK KwkJCXVpbnQzMl90IGVuZF9tYl9udW06MTY7CisJCQl1aW50MzJfdCBiZWdpbl9tYl9udW06MTY7 CisJCX0gYml0czsKKwkJdWludDMyX3QgdmFsdWU7CisJfSBtYjsKK307CisKK3N0cnVjdCBmd19z bGljZV9oZWFkZXJfZXh0cmFjdF9tc2cgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQz Ml90IG1zZ19zaXplOjg7CisJCQl1aW50MzJfdCBtc2dfdHlwZTo4OworCQkJdWludDMyX3QgbXNn X2ZlbmNlOjE2OworCQl9IGJpdHM7CisJCXVpbnQzMl90IHZhbHVlOworCX0gaGVhZGVyOworCisJ dW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgZmxhZ3M6MTY7CisJCQl1aW50MzJfdCBy ZXM6MTY7CisJCX0gYml0czsKKwkJdWludDMyX3QgdmFsdWU7CisJfSBmbGFnczsKKworCXVpbnQz Ml90IHNyYzsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGNvbnRleHQ6ODsK KwkJCXVpbnQzMl90IG1tdV9wdGQ6MjQ7CisJCX0gYml0czsKKwkJdWludDMyX3QgdmFsdWU7CisJ fSBtbXVfY29udGV4dDsKKworCXVpbnQzMl90IGRzdDsKKwl1aW50MzJfdCBzcmNfc2l6ZTsKKwl1 aW50MzJfdCBkc3Rfc2l6ZTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGV4 cGVjdGVkX3Bwc19pZDo4OworCQkJdWludDMyX3QgbmFsdV9oZWFkZXJfdW5pdF90eXBlOjU7CisJ CQl1aW50MzJfdCBuYWx1X2hlYWRlcl9yZWZfaWRjOjI7CisJCQl1aW50MzJfdCBuYWx1X2hlYWRl cl9yZXNlcnZlZDoxOworCQkJdWludDMyX3QgY29udGludWVfcGFyc2VfZmxhZzoxOworCQkJdWlu dDMyX3QgZnJhbWVfbWJzX29ubHlfZmxhZzoxOworCQkJdWludDMyX3QgcGljX29yZGVyX3ByZXNl bnRfZmxhZzoxOworCQkJdWludDMyX3QgZGVsdGFfcGljX29yZGVyX2Fsd2F5c196ZXJvX2ZsYWc6 MTsKKwkJCXVpbnQzMl90IHJlZHVuZGFudF9waWNfY250X3ByZXNlbnRfZmxhZzoxOworCQkJdWlu dDMyX3Qgd2VpZ2h0ZWRfcHJlZF9mbGFnOjE7CisJCQl1aW50MzJfdCBlbnRyb3B5X2NvZGluZ19t b2RlX2ZsYWc6MTsKKwkJCXVpbnQzMl90IGRlYmxvY2tpbmdfZmlsdGVyX2NvbnRyb2xfcHJlc2Vu dF9mbGFnOjE7CisJCQl1aW50MzJfdCB3ZWlnaHRlZF9iaXByZWRfaWRjOjI7CisJCQl1aW50MzJf dCByZXNpZHVhbF9jb2xvdXJfdHJhbnNmb3JtX2ZsYWc6MTsKKwkJCXVpbnQzMl90IGNocm9tYV9m b3JtYXRfaWRjOjI7CisJCQl1aW50MzJfdCBpZHJfZmxhZzoxOworCQkJdWludDMyX3QgcGljX29y ZGVyX2NudF90eXBlOjI7CisJCX0gYml0czsKKwkJdWludDMyX3QgdmFsdWU7CisJfSBmbGFnX2Jp dGZpZWxkOworCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDhfdCBudW1fc2xpY2VfZ3Jv dXBzX21pbnVzMTozOworCQkJdWludDhfdCBudW1fcmVmX2lkY19sMV9hY3RpdmVfbWludXMxOjU7 CisJCQl1aW50OF90IHNsaWNlX2dyb3VwX21hcF90eXBlOjM7CisJCQl1aW50OF90IG51bV9yZWZf aWRjX2wwX2FjdGl2ZV9taW51czE6NTsKKwkJCXVpbnQ4X3QgbG9nMl9zbGljZV9ncm91cF9jaGFu Z2VfY3ljbGU6NDsKKwkJCXVpbnQ4X3Qgc2xpY2VfaGVhZGVyX2JpdF9vZmZzZXQ6NDsKKwkJCXVp bnQ4X3QgbG9nMl9tYXhfZnJhbWVfbnVtX21pbnVzNDo0OworCQkJdWludDhfdCBsb2dzX21heF9w aWNfb3JkZXJfY250X2xzYl9taW51czQ6NDsKKwkJfSBiaXRzOworCQl1aW50MzJfdCB2YWx1ZTsK Kwl9IHBpY19wYXJhbTA7Cit9OworCitzdHJ1Y3QgZndfc2xpY2VfaGVhZGVyX2V4dHJhY3RfZG9u ZV9tc2cgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IG1zZ19zaXplOjg7CisJ CQl1aW50MzJfdCBtc2dfdHlwZTo4OworCQkJdWludDMyX3QgbXNnX2ZlbmNlOjE2OworCQl9IGJp dHM7CisJCXVpbnQzMl90IHZhbHVlOworCX0gaGVhZGVyOworfTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZy L3ZlZF9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZWU2NTAKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcG0uYwpAQCAtMCwwICsx LDM5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB2ZWRfcG0uYzogVkVEIHBvd2VyIG1hbmFn ZW1lbnQgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlv biwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFO VEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0g RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoK KyAqICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8 eWFvLmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1 ZGUgInZlZF9wbS5oIgorI2luY2x1ZGUgInZlZF9pbml0LmgiCisjaW5jbHVkZSAidmVkX3JlZy5o IgorI2luY2x1ZGUgInZlZF9jbWQuaCIKKyNpbmNsdWRlICJ2ZWRfZncuaCIKKyNpbmNsdWRlICJp cHZyX3RyYWNlLmgiCisKKyNpZmRlZiBDT05GSUdfSU5URUxfU09DX1BNQworI2luY2x1ZGUgPGxp bnV4L2ludGVsX21pZF9wbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCitleHRlcm4gaW50MzJfdCBkcm1faXB2cl9m cmVxOworCisjaWZkZWYgQ09ORklHX0lOVEVMX1NPQ19QTUMKK2V4dGVybiBpbnQgcG1jX25jX3Nl dF9wb3dlcl9zdGF0ZShpbnQgaXNsYW5kcywgaW50IHN0YXRlX3R5cGUsIGludCByZWcpOworZXh0 ZXJuIGludCBwbWNfbmNfZ2V0X3Bvd2VyX3N0YXRlKGludCBpc2xhbmRzLCBpbnQgcmVnKTsKKyNl bmRpZgorCisjZGVmaW5lIFBDSV9ST09UX01TR0JVU19DVFJMX1JFRwkweEQwCisjZGVmaW5lIFBD SV9ST09UX01TR0JVU19EQVRBX1JFRwkweEQ0CisjZGVmaW5lIFBDSV9ST09UX01TR0JVU19DVFJM X0VYVF9SRUcJMHhEOAorI2RlZmluZSBQQ0lfUk9PVF9NU0dCVVNfUkVBRAkJMHgxMAorI2RlZmlu ZSBQQ0lfUk9PVF9NU0dCVVNfV1JJVEUJCTB4MTEKKyNkZWZpbmUgUENJX1JPT1RfTVNHQlVTX0RX T1JEX0VOQUJMRQkweGYwCisKKy8qIFZFRCBwb3dlciBzdGF0ZSBzZXQvZ2V0ICovCisjZGVmaW5l IFBVTklUX1BPUlQJCQkweDA0CisjZGVmaW5lIFZFRFNTUE0wIAkJCTB4MzIKKyNkZWZpbmUgVkVE U1NQTTEgCQkJMHgzMworI2RlZmluZSBWRURTU0MJCQkJMHgxCisKKy8qIFZFRCBmcmVxdWVuY3kg c2V0L2dldCAqLworI2RlZmluZSBJUF9GUkVRX1ZBTElEICAgICAweDgwICAgICAvKiBGcmVxIGlz IHZhbGlkIGJpdCAqLworCisjZGVmaW5lIElQX0ZSRVFfU0laRSAgICAgICAgIDUgICAgIC8qIG51 bWJlciBvZiBiaXRzIGluIGZyZXEgZmllbGRzICovCisjZGVmaW5lIElQX0ZSRVFfTUFTSyAgICAg IDB4MWYgICAgIC8qIEJpdCBtYXNrIGZvciBmcmVxIGZpZWxkICovCisKKy8qICBQb3NpdGlvbnMg b2YgdmFyaW91cyBmcmVxdWVuY3kgZmllbGRzICovCisjZGVmaW5lIElQX0ZSRVFfUE9TICAgICAg ICAgIDAgICAgIC8qIEZyZXEgY29udHJvbCBbNDowXSAqLworI2RlZmluZSBJUF9GUkVRX0dVQVJf UE9TICAgICA4ICAgICAvKiBGcmVxIGd1YXIgICBbMTI6OF0gKi8KKyNkZWZpbmUgSVBfRlJFUV9T VEFUX1BPUyAgICAyNCAgICAgLyogRnJlcSBzdGF0dXMgWzI4OjI0XSAqLworCisjZGVmaW5lIElQ X0ZSRVFfUkVTVU1FX1NFVCAweDY0CisKKyNkZWZpbmUgSVBWUl9WRURfQ0xPQ0tHQVRJTkdfT0ZG U0VUCSAgMHgyMDY0CisKK2VudW0gQVBNX1ZFRF9TVEFUVVMgeworCVZFRF9BUE1fU1RTX0QwID0g MCwKKwlWRURfQVBNX1NUU19EMSwKKwlWRURfQVBNX1NUU19EMiwKKwlWRURfQVBNX1NUU19EMwor fTsKKworc3RhdGljIGludDMyX3QgdmVkX3NhdmVfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJp dmF0ZTsKKwlpbnQzMl90IG9mZnNldDsKKwlpbnQgcmV0OworCisJaWYgKHZlZF9wcml2LT5md19s b2FkZWRfYnlfcHVuaXQpCisJCXZlZF9wcml2LT52ZWRfbmVlZHNfcmVzZXQgPSBNU1ZEWF9SRVNF VF9ORUVEU19JTklUX0ZXOworCWVsc2UKKwkJdmVkX3ByaXYtPnZlZF9uZWVkc19yZXNldCA9IDE7 CisKKyNpZmRlZiBDT05GSUdfRFJNX0lQVlJfRUMKKwkvKiB3ZSBzaG91bGQgcmVzdG9yZSB0aGUg c3RhdGUsIGlmIHdlIHBvd2VyIGRvd24vdXAgZHVyaW5nIEVDICovCisJZm9yIChvZmZzZXQgPSAw OyBvZmZzZXQgPCA0OyArK29mZnNldCkKKwkJdmVkX3ByaXYtPnZlY19lY19tZW1fZGF0YVtvZmZz ZXRdID0KKwkJCVZFRF9SRUdfUkVBRDMyKDB4MmNiMCArIG9mZnNldCAqIDQpOworCisJdmVkX3By aXYtPnZlY19lY19tZW1fZGF0YVs0XSA9IFZFRF9SRUdfUkVBRDMyKDB4MmNjNCk7CisKKwl2ZWRf cHJpdi0+dmVjX2VjX21lbV9zYXZlZCA9IDE7CisJSVBWUl9ERUJVR19WRUQoImVjIGxhc3QgbWIg JWQgJWQgJWQgJWRcbiIsCisJCQl2ZWRfcHJpdi0+dmVjX2VjX21lbV9kYXRhWzBdLAorCQkJdmVk X3ByaXYtPnZlY19lY19tZW1fZGF0YVsxXSwKKwkJCXZlZF9wcml2LT52ZWNfZWNfbWVtX2RhdGFb Ml0sCisJCQl2ZWRfcHJpdi0+dmVjX2VjX21lbV9kYXRhWzNdKTsKKwlJUFZSX0RFQlVHX1ZFRCgi ZWMgZXJyb3Igc3RhdGUgJWRcbiIsIHZlZF9wcml2LT52ZWNfZWNfbWVtX2RhdGFbNF0pOworI2Vu ZGlmCisKKwkvKiBSZXNldCBNVFggKi8KKwlWRURfUkVHX1dSSVRFMzIoTVRYX1NPRlRfUkVTRVRf TVRYUkVTRVQsIE1UWF9TT0ZUX1JFU0VUX09GRlNFVCk7CisKKwkvKiB3aHkgbmVlZCByZXNldCBt c3ZkeCBiZWZvcmUgcG93ZXIgb2ZmIGl0LCBuZWVkIGNoZWNrIElNRyAqLworCXJldCA9IHZlZF9j b3JlX3Jlc2V0KGRldl9wcml2KTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJSVBWUl9ERUJVR19X QVJOKCJmYWlsZWQgdG8gY2FsbCB2ZWRfY29yZV9yZXNldDogJWRcbiIsIHJldCk7CisKKwkvKiBJ bml0aWFsaXplIFZFQyBMb2NhbCBSQU0gKi8KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IFZF Q19MT0NBTF9NRU1fQllURV9TSVpFIC8gNDsgKytvZmZzZXQpCisJCVZFRF9SRUdfV1JJVEUzMigw LCBWRUNfTE9DQUxfTUVNX09GRlNFVCArIG9mZnNldCAqIDQpOworCisJaWYgKHZlZF9wcml2LT5m d19sb2FkZWRfYnlfcHVuaXQpIHsKKwkJVkVEX1JFR19XUklURTMyKDAsIE1UWF9FTkFCTEVfT0ZG U0VUKTsKKwkJdmVkX3NldF9jbG9ja3MoZGV2X3ByaXYtPmRldiwgMCk7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB1MzIgX19pcHZyX21zZ2J1c19yZWFkMzIoc3RydWN0IHBjaV9kZXYg KnBjaV9yb290LCB1OCBwb3J0LCB1MzIgYWRkcikKK3sKKyAgICB1aW50MzJfdCBkYXRhOworICAg IHVpbnQzMl90IGNtZDsKKyAgICB1aW50MzJfdCBjbWRleHQ7CisKKyAgICBjbWQgPSAoUENJX1JP T1RfTVNHQlVTX1JFQUQgPDwgMjQpIHwgKHBvcnQgPDwgMTYpIHwKKyAgICAgICAgKChhZGRyICYg MHhmZikgPDwgOCkgfCBQQ0lfUk9PVF9NU0dCVVNfRFdPUkRfRU5BQkxFOworICAgIGNtZGV4dCA9 IGFkZHIgJiAweGZmZmZmZjAwOworCisgICAgaWYgKGNtZGV4dCkgeworICAgICAgICAvKiBUaGlz IHJlc2V0cyB0byAwIGF1dG9tYXRpY2FsbHksIG5vIG5lZWQgdG8gd3JpdGUgMCAqLworICAgICAg ICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9yb290LCBQQ0lfUk9PVF9NU0dCVVNfQ1RSTF9F WFRfUkVHLAorICAgICAgICAgICAgICAgICAgICBjbWRleHQpOworICAgIH0KKworICAgIHBjaV93 cml0ZV9jb25maWdfZHdvcmQocGNpX3Jvb3QsIFBDSV9ST09UX01TR0JVU19DVFJMX1JFRywgY21k KTsKKyAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX3Jvb3QsIFBDSV9ST09UX01TR0JVU19E QVRBX1JFRywgJmRhdGEpOworCisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIF9f aXB2cl9tc2didXNfd3JpdGUzMihzdHJ1Y3QgcGNpX2RldiAqcGNpX3Jvb3QsIHU4IHBvcnQsIHUz MiBhZGRyLCB1MzIgZGF0YSkKK3sKKyAgICB1aW50MzJfdCBjbWQ7CisgICAgdWludDMyX3QgY21k ZXh0OworCisgICAgY21kID0gKFBDSV9ST09UX01TR0JVU19XUklURSA8PCAyNCkgfCAocG9ydCA8 PCAxNikgfAorICAgICAgICAoKGFkZHIgJiAweEZGKSA8PCA4KSB8IFBDSV9ST09UX01TR0JVU19E V09SRF9FTkFCTEU7CisgICAgY21kZXh0ID0gYWRkciAmIDB4ZmZmZmZmMDA7CisKKyAgICBwY2lf d3JpdGVfY29uZmlnX2R3b3JkKHBjaV9yb290LCBQQ0lfUk9PVF9NU0dCVVNfREFUQV9SRUcsIGRh dGEpOworCisgICAgaWYgKGNtZGV4dCkgeworICAgICAgICAvKiBUaGlzIHJlc2V0cyB0byAwIGF1 dG9tYXRpY2FsbHksIG5vIG5lZWQgdG8gd3JpdGUgMCAqLworICAgICAgICBwY2lfd3JpdGVfY29u ZmlnX2R3b3JkKHBjaV9yb290LCBQQ0lfUk9PVF9NU0dCVVNfQ1RSTF9FWFRfUkVHLAorICAgICAg ICAgICAgY21kZXh0KTsKKyAgICB9CisKKyAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9y b290LCBQQ0lfUk9PVF9NU0dCVVNfQ1RSTF9SRUcsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgX19p cHZyX3BtX2NtZF9mcmVxX3dhaXQoc3RydWN0IHBjaV9kZXYgKnBjaV9yb290LCB1MzIgcmVnX2Zy ZXEsIHUzMiAqZnJlcV9jb2RlX3JsemQpCit7CisJaW50MzJfdCB0Y291bnQ7CisJdWludDMyX3Qg ZnJlcV92YWw7CisKKwlmb3IgKHRjb3VudCA9IDA7IDsgdGNvdW50KyspIHsKKwkJZnJlcV92YWwg PSBfX2lwdnJfbXNnYnVzX3JlYWQzMihwY2lfcm9vdCwgUFVOSVRfUE9SVCwgcmVnX2ZyZXEpOwor CQlpZiAoKGZyZXFfdmFsICYgSVBfRlJFUV9WQUxJRCkgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAo dGNvdW50ID4gNTAwKSB7CisJCQlJUFZSX0VSUk9SKCJQLVVuaXQgZnJlcSByZXF1ZXN0IHdhaXQg dGltZW91dCAleCIsCisJCQkJZnJlcV92YWwpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQl1 ZGVsYXkoMSk7CisJfQorCisJaWYgKGZyZXFfY29kZV9ybHpkKSB7CisJCSpmcmVxX2NvZGVfcmx6 ZCA9ICgoZnJlcV92YWwgPj4gSVBfRlJFUV9TVEFUX1BPUykgJgorCQkJSVBfRlJFUV9NQVNLKTsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludDMyX3QgX19pcHZyX3BtX2NtZF9mcmVx X2dldChzdHJ1Y3QgcGNpX2RldiAqcGNpX3Jvb3QsIHUzMiByZWdfZnJlcSkKK3sKKwl1aW50MzJf dCBmcmVxX3ZhbDsKKwlpbnQzMl90IGZyZXFfY29kZT0wOworCisJX19pcHZyX3BtX2NtZF9mcmVx X3dhaXQocGNpX3Jvb3QsIHJlZ19mcmVxLCBOVUxMKTsKKworCWZyZXFfdmFsID0gX19pcHZyX21z Z2J1c19yZWFkMzIocGNpX3Jvb3QsIFBVTklUX1BPUlQsIHJlZ19mcmVxKTsKKwlmcmVxX2NvZGUg PShpbnQpKChmcmVxX3ZhbD4+SVBfRlJFUV9TVEFUX1BPUykgJiB+SVBfRlJFUV9WQUxJRCk7CisJ cmV0dXJuIGZyZXFfY29kZTsKK30KKworc3RhdGljIGludDMyX3QgX19pcHZyX3BtX2NtZF9mcmVx X3NldChzdHJ1Y3QgcGNpX2RldiAqcGNpX3Jvb3QsIHUzMiByZWdfZnJlcSwgdTMyIGZyZXFfY29k ZSwgdTMyICpwX2ZyZXFfY29kZV9ybHpkKQoreworCXVpbnQzMl90IGZyZXFfdmFsOworCXVpbnQz Ml90IGZyZXFfY29kZV9yZWFsaXplZDsKKwlpbnQzMl90IHJ2YTsKKworCXJ2YSA9IF9faXB2cl9w bV9jbWRfZnJlcV93YWl0KHBjaV9yb290LCByZWdfZnJlcSwgTlVMTCk7CisJaWYgKHJ2YSA8IDAp IHsKKwkJSVBWUl9FUlJPUigicG1fY21kX2ZyZXFfd2FpdCAxIGZhaWxlZDogJWRcbiIsIHJ2YSk7 CisJCXJldHVybiBydmE7CisJfQorCisJZnJlcV92YWwgPSBJUF9GUkVRX1ZBTElEIHwgZnJlcV9j b2RlOworCV9faXB2cl9tc2didXNfd3JpdGUzMihwY2lfcm9vdCwgUFVOSVRfUE9SVCwgcmVnX2Zy ZXEsIGZyZXFfdmFsKTsKKworCXJ2YSA9IF9faXB2cl9wbV9jbWRfZnJlcV93YWl0KHBjaV9yb290 LCByZWdfZnJlcSwgJmZyZXFfY29kZV9yZWFsaXplZCk7CisJaWYgKHJ2YSA8IDApIHsKKwkJSVBW Ul9FUlJPUigicG1fY21kX2ZyZXFfd2FpdCAyIGZhaWxlZDogJWRcbiIsIHJ2YSk7CisJCXJldHVy biBydmE7CisJfQorCisJaWYgKHBfZnJlcV9jb2RlX3JsemQpCisJCSpwX2ZyZXFfY29kZV9ybHpk ID0gZnJlcV9jb2RlX3JlYWxpemVkOworCisJcmV0dXJuIHJ2YTsKK30KKworc3RhdGljIGludDMy X3QgdmVkX3NldF9mcmVxKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBmcmVxX2NvZGUpCit7 CisJdWludDMyX3QgZnJlcV9jb2RlX3JsemQgPSAwOworCWludDMyX3QgcmV0OworCXN0cnVjdCBk cm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSopZGV2 LT5kZXZfcHJpdmF0ZTsKKworCXJldCA9IF9faXB2cl9wbV9jbWRfZnJlcV9zZXQoZGV2X3ByaXYt PnBjaV9yb290LCBWRURTU1BNMSwgZnJlcV9jb2RlLCAmZnJlcV9jb2RlX3JsemQpOworCWlmIChy ZXQgPCAwKSB7CisJCUlQVlJfRVJST1IoImZhaWxlZCB0byBzZXQgZnJlcWVuY3ksIGN1cnJlbnQg aXMgJXhcbiIsCisJCQlmcmVxX2NvZGVfcmx6ZCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludDMyX3QgdmVkX2dldF9mcmVxKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJ c3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gKHN0cnVjdCBkcm1faXB2cl9wcml2 YXRlKilkZXYtPmRldl9wcml2YXRlOworCXJldHVybiBfX2lwdnJfcG1fY21kX2ZyZXFfZ2V0KGRl dl9wcml2LT5wY2lfcm9vdCwgVkVEU1NQTTEpOworfQorCisjaWZkZWYgQ09ORklHX0lOVEVMX1NP Q19QTUMKK2Jvb2wgdmVkX3Bvd2VyX29uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50 MzJfdCB2ZWRfZnJlcTsKKwlpbnQzMl90IHJldDsKKwlJUFZSX0RFQlVHX1BNKCJWRUQ6IHBvd2Vy IG9uIG1zdmR4IHVzaW5nIEFUT01fUE1DLlxuIik7CisKKwlyZXQgPSBwbWNfbmNfc2V0X3Bvd2Vy X3N0YXRlKFZFRFNTQywgMCwgVkVEU1NQTTApOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUlQ VlJfRVJST1IoIlZFRDogcG11X25jX3NldF9wb3dlcl9zdGF0ZSBPTiBmYWlsIVxuIik7CisJCXJl dHVybiBmYWxzZTsKKwl9CisKKwl2ZWRfZnJlcSA9IHZlZF9nZXRfZnJlcShkZXYpOworCisJSVBW Ul9ERUJVR19QTSgiVkVEIGZyZXFlbmN5OiBjb2RlICVkICglZE1IeilcbiIsIHZlZF9mcmVxLCBH RVRfVkVEX0ZSRVFVRU5DWSh2ZWRfZnJlcSkpOworCisJdHJhY2VfdmVkX3Bvd2VyX29uKEdFVF9W RURfRlJFUVVFTkNZKHZlZF9mcmVxKSk7CisJcmV0dXJuIHRydWU7Cit9Citib29sIHZlZF9wb3dl cl9vZmYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlpbnQzMl90IHZlZF9mcmVxOworCWlu dDMyX3QgcmV0OworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IChzdHJ1Y3Qg ZHJtX2lwdnJfcHJpdmF0ZSopZGV2LT5kZXZfcHJpdmF0ZTsKKwlJUFZSX0RFQlVHX1BNKCJWRUQ6 IHBvd2VyIG9mZiBtc3ZkeCB1c2luZyBBVE9NX1BNQy5cbiIpOworCisJaWYgKGRldl9wcml2LT52 ZWRfcHJpdmF0ZSkgeworCQlyZXQgPSB2ZWRfc2F2ZV9jb250ZXh0KGRldik7CisJCWlmICh1bmxp a2VseShyZXQpKSB7CisJCQlJUFZSX0VSUk9SKCJGYWlsZWQgdG8gc2F2ZSBWRUQgY29udGV4dCwg c3RvcCBwb3dlcmluZyBvZmZcbiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJdmVk X2ZyZXEgPSB2ZWRfZ2V0X2ZyZXEoZGV2KTsKKwlJUFZSX0RFQlVHX1BNKCJWRUQgZnJlcWVuY3k6 IGNvZGUgJWQgKCVkTUh6KVxuIiwgdmVkX2ZyZXEsIEdFVF9WRURfRlJFUVVFTkNZKHZlZF9mcmVx KSk7CisKKwlyZXQgPSBwbWNfbmNfc2V0X3Bvd2VyX3N0YXRlKFZFRFNTQywgMSwgVkVEU1NQTTAp OworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUlQVlJfRVJST1IoIlZFRDogcG11X25jX3NldF9w b3dlcl9zdGF0ZSBET1dOIGZhaWwhXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXRyYWNl X3ZlZF9wb3dlcl9vZmYoR0VUX1ZFRF9GUkVRVUVOQ1kodmVkX2ZyZXEpKTsKKwlyZXR1cm4gdHJ1 ZTsKK30KKyNlbHNlCitib29sIHZlZF9wb3dlcl9vbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQor eworCWludDMyX3QgdmVkX2ZyZXFfYmVmb3JlLCB2ZWRfZnJlcV9hZnRlcjsKKwl1aW50MzJfdCBw d3Jfc3RzOworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IChzdHJ1Y3QgZHJt X2lwdnJfcHJpdmF0ZSopZGV2LT5kZXZfcHJpdmF0ZTsKKwlJUFZSX0RFQlVHX1BNKCJWRUQ6IHBv d2VyIG9uIG1zdmR4LlxuIik7CisKKwkvKiBGSVhNRTogYWRkIHRpbWVvdXQgY2hlY2sgKi8KKwlk byB7CisJCV9faXB2cl9tc2didXNfd3JpdGUzMihkZXZfcHJpdi0+cGNpX3Jvb3QsIFBVTklUX1BP UlQsIFZFRFNTUE0wLCBWRURfQVBNX1NUU19EMCk7CisJCXVkZWxheSgxMCk7CisJCXB3cl9zdHMg PSBfX2lwdnJfbXNnYnVzX3JlYWQzMihkZXZfcHJpdi0+cGNpX3Jvb3QsIFBVTklUX1BPUlQsIFZF RFNTUE0wKTsKKwl9IHdoaWxlIChwd3Jfc3RzICE9IDB4MCk7CisKKwlkbyB7CisJCV9faXB2cl9t c2didXNfd3JpdGUzMihkZXZfcHJpdi0+cGNpX3Jvb3QsIFBVTklUX1BPUlQsIFZFRFNTUE0wLCBW RURfQVBNX1NUU19EMyk7CisJCXVkZWxheSgxMCk7CisJCXB3cl9zdHMgPSBfX2lwdnJfbXNnYnVz X3JlYWQzMihkZXZfcHJpdi0+cGNpX3Jvb3QsIFBVTklUX1BPUlQsIFZFRFNTUE0wKTsKKwl9IHdo aWxlIChwd3Jfc3RzICE9IDB4MDMwMDAwMDMpOworCisJZG8geworCQlfX2lwdnJfbXNnYnVzX3dy aXRlMzIoZGV2X3ByaXYtPnBjaV9yb290LCBQVU5JVF9QT1JULCBWRURTU1BNMCwgVkVEX0FQTV9T VFNfRDApOworCQl1ZGVsYXkoMTApOworCQlwd3Jfc3RzID0gX19pcHZyX21zZ2J1c19yZWFkMzIo ZGV2X3ByaXYtPnBjaV9yb290LCBQVU5JVF9QT1JULCBWRURTU1BNMCk7CisJfSB3aGlsZSAocHdy X3N0cyAhPSAweDApOworCisJdmVkX2ZyZXFfYmVmb3JlID0gdmVkX2dldF9mcmVxKGRldik7CisK KwlpZiAodmVkX3NldF9mcmVxKGRldiwgZHJtX2lwdnJfZnJlcSkpIHsKKwkJSVBWUl9FUlJPUigi RmFpbGVkIHRvIHNldCBWRUQgZnJlcXVlbmN5XG4iKTsKKwl9CisKKwl2ZWRfZnJlcV9hZnRlciA9 IHZlZF9nZXRfZnJlcShkZXYpOworCUlQVlJfREVCVUdfUE0oIlZFRCBmcmVxZW5jeTogJWRNSHog PT4gJWRNSHpcbiIsCisJCUdFVF9WRURfRlJFUVVFTkNZKHZlZF9mcmVxX2JlZm9yZSksIEdFVF9W RURfRlJFUVVFTkNZKHZlZF9mcmVxX2FmdGVyKSk7CisKKwl0cmFjZV92ZWRfcG93ZXJfb24oR0VU X1ZFRF9GUkVRVUVOQ1kodmVkX2ZyZXFfYWZ0ZXIpKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9v bCB2ZWRfcG93ZXJfb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdWludDMyX3QgcHdy X3N0czsKKwlpbnQzMl90IHZlZF9mcmVxOworCWludDMyX3QgcmV0OworCXN0cnVjdCBkcm1faXB2 cl9wcml2YXRlICpkZXZfcHJpdiA9IChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSopZGV2LT5kZXZf cHJpdmF0ZTsKKwlJUFZSX0RFQlVHX1BNKCJWRUQ6IHBvd2VyIG9mZiBtc3ZkeC5cbiIpOworCisJ aWYgKGRldl9wcml2LT52ZWRfcHJpdmF0ZSkgeworCQlyZXQgPSB2ZWRfc2F2ZV9jb250ZXh0KGRl dik7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlJUFZSX0VSUk9SKCJGYWlsZWQgdG8gc2F2 ZSBWRUQgY29udGV4dDogJWQsIHN0b3AgcG93ZXJpbmcgb2ZmXG4iLCByZXQpOworCQkJcmV0dXJu IGZhbHNlOworCQl9CisJfQorCisJdmVkX2ZyZXEgPSB2ZWRfZ2V0X2ZyZXEoZGV2KTsKKwlJUFZS X0RFQlVHX1BNKCJWRUQgZnJlcWVuY3k6IGNvZGUgJWQgKCVkTUh6KVxuIiwgdmVkX2ZyZXEsIEdF VF9WRURfRlJFUVVFTkNZKHZlZF9mcmVxKSk7CisKKwkvKiBGSVhNRTogYWRkIHRpbWVvdXQgY2hl Y2sgKi8KKwlkbyB7CisJCV9faXB2cl9tc2didXNfd3JpdGUzMihkZXZfcHJpdi0+cGNpX3Jvb3Qs IFBVTklUX1BPUlQsIFZFRFNTUE0wLCBWRURfQVBNX1NUU19EMyk7CisJCXVkZWxheSgxMCk7CisJ CXB3cl9zdHMgPSBfX2lwdnJfbXNnYnVzX3JlYWQzMihkZXZfcHJpdi0+cGNpX3Jvb3QsIFBVTklU X1BPUlQsIFZFRFNTUE0wKTsKKwl9IHdoaWxlIChwd3Jfc3RzICE9IDB4MDMwMDAwMDMpOworCisJ dHJhY2VfdmVkX3Bvd2VyX29mZihHRVRfVkVEX0ZSRVFVRU5DWSh2ZWRfZnJlcSkpOworCXJldHVy biB0cnVlOworfQorCisjZW5kaWYKKy8qKgorICogaXNfaXNsYW5kX29uCisgKgorICogRGVzY3Jp cHRpb246IGNoZWNrcyB0byBzZWUgaWYgdGhlIGlzbGFuZCBpcyB1cAorICogcmV0dXJucyB0cnVl IGlmIGh3X2lzbGFuZCBpcyBPTgorICogcmV0dXJucyBmYWxzZSBpZiBod19pc2xhbmQgaXMgT0ZG CisgKi8KK2Jvb2wgaXNfdmVkX29uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdWludDMy X3QgcHdyX3N0czsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOworCisJcHdyX3N0cyA9IF9faXB2cl9tc2didXNfcmVhZDMyKGRldl9wcml2LT5w Y2lfcm9vdCwgUFVOSVRfUE9SVCwgVkVEU1NQTTApOworCisJcmV0dXJuIChwd3Jfc3RzID09IFZF RF9BUE1fU1RTX0QwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9w bS5oIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX3BtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMWYwMGY4YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pcHZyL3ZlZF9wbS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICog dmVkX3BtLmg6IFZFRCBwb3dlciBtYW5hZ2VtZW50IGhlYWRlciBmaWxlCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFs bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0 ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisg KiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRo aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdA aW50ZWwuY29tPgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVkVEX1BNX0hfCisjZGVmaW5lIF9WRURfUE1f SF8KKworI2luY2x1ZGUgImlwdnJfZHJ2LmgiCisKKyNkZWZpbmUgSVBfRlJFUV8xMDBfMDAgMHgx ZiAgICAgICAgLyogMGIxMTExMSAxMDAuMDAgKi8KKyNkZWZpbmUgSVBfRlJFUV8xMDZfNjcgMHgx ZCAgICAgICAgLyogMGIxMTEwMSAxMDYuNjcgKi8KKyNkZWZpbmUgSVBfRlJFUV8xMzNfMzAgMHgx NyAgICAgICAgLyogMGIxMDExMSAxMzMuMzAgKi8KKyNkZWZpbmUgSVBfRlJFUV8xNjBfMDAgMHgx MyAgICAgICAgLyogMGIxMDAxMSAxNjAuMDAgKi8KKyNkZWZpbmUgSVBfRlJFUV8xNzdfNzggMHgx MSAgICAgICAgLyogMGIxMDAwMSAxNzcuNzggKi8KKyNkZWZpbmUgSVBfRlJFUV8yMDBfMDAgMHgw ZiAgICAgICAgLyogMGIwMTExMSAyMDAuMDAgKi8KKyNkZWZpbmUgSVBfRlJFUV8yMTNfMzMgMHgw ZSAgICAgICAgLyogMGIwMTExMCAyMTMuMzMgKi8KKyNkZWZpbmUgSVBfRlJFUV8yNjZfNjcgMHgw YiAgICAgICAgLyogMGIwMTAxMSAyNjYuNjcgKi8KKyNkZWZpbmUgSVBfRlJFUV8zMjBfMDAgMHgw OSAgICAgICAgLyogMGIwMTAwMSAzMjAuMDAgKi8KKyNkZWZpbmUgSVBfRlJFUV8zNTVfNTYgMHgw OCAgICAgICAgLyogMGIwMTAwMCAzNTUuNTYgKi8KKyNkZWZpbmUgSVBfRlJFUV80MDBfMDAgMHgw NyAgICAgICAgLyogMGIwMDExMSA0MDAuMDAgKi8KKyNkZWZpbmUgSVBfRlJFUV80NTdfMTQgMHgw NiAgICAgICAgLyogMGIwMDExMCA0NTcuMTQgKi8KKyNkZWZpbmUgSVBfRlJFUV81MzNfMzMgMHgw NSAgICAgICAgLyogMGIwMDEwMSA1MzMuMzMgKi8KKyNkZWZpbmUgSVBfRlJFUV82NDBfMDAgMHgw NCAgICAgICAgLyogMGIwMDEwMCA2NDAuMDAgKi8KKyNkZWZpbmUgSVBfRlJFUV84MDBfMDAgMHgw MyAgICAgICAgLyogMGIwMDAxMSA4MDAuMDAgKi8KKworI2RlZmluZSBHRVRfVkVEX0ZSRVFVRU5D WShmcmVxX2NvZGUpCSgoMTYwMCAqIDIpLygoZnJlcV9jb2RlKSArIDEpKQorCitib29sIGlzX3Zl ZF9vbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworYm9vbCB2ZWRfcG93ZXJfb24oc3RydWN0 IGRybV9kZXZpY2UgKmRldik7CisKK2Jvb2wgdmVkX3Bvd2VyX29mZihzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRf cmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMWQ1NWYyYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pcHZyL3ZlZF9yZWcuaApAQCAtMCwwICsxLDYwOSBAQAorLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CisgKiB2ZWRfcmVnLmg6IFZFRCByZWdpc3RlciBkZWZpbml0aW9uCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIENvcHly aWdodCAoYykgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQsIFVLCisgKiBBbGwgUmln aHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMg YW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVy c2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IK KyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHBy b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVs LmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1ZFRF9SRUdfSF8KKyNk ZWZpbmUgX1ZFRF9SRUdfSF8KKworI2luY2x1ZGUgImlwdnJfZHJ2LmgiCisKKyNpZiAoZGVmaW5l ZCBNRkxEX01TVkRYX0ZBQlJJQ19ERUJVRykgJiYgTUZMRF9NU1ZEWF9GQUJSSUNfREVCVUcKKyNk ZWZpbmUgVkVEX1JFR19XUklURTMyKF92YWwsIF9vZmZzKQkJCQkJXAorZG8gewkJCQkJCQkJCVwK KwlpZiAoaXB2cl9nZXRfcG93ZXJfc3RhdGUoT1NQTV9WSURFT19ERUNfSVNMQU5EKSA9PSAwKQkJ XAorCQlwYW5pYygibXN2ZHggcmVnIDB4JXggd3JpdGUgZmFpbGVkLlxuIiwJCQlcCisJCQkJKHVu c2lnbmVkIGludCkoX29mZnMpKTsJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlpb3dyaXRlMzIoX3Zh bCwgZGV2X3ByaXYtPnZlZF9yZWdfYmFzZSArIChfb2ZmcykpOwkJXAorfSB3aGlsZSAoMCkKKwor c3RhdGljIGlubGluZSB1aW50MzJfdCBWRURfUkVHX1JFQUQzMih1aW50MzJfdCBfb2ZmcykKK3sK KwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQkoc3RydWN0IGRybV9pcHZy X3ByaXZhdGUgKilncERybURldmljZS0+ZGV2X3ByaXZhdGU7CisJaWYgKGlwdnJfZ2V0X3Bvd2Vy X3N0YXRlKE9TUE1fVklERU9fREVDX0lTTEFORCkgPT0gMCkgeworCQlwYW5pYygibXN2ZHggcmVn IDB4JXggcmVhZCBmYWlsZWQuXG4iLCAodW5zaWduZWQgaW50KShfb2ZmcykpOworCQlyZXR1cm4g MDsKKwl9IGVsc2UgeworCQlyZXR1cm4gaW9yZWFkMzIoZGV2X3ByaXYtPnZlZF9yZWdfYmFzZSAr IChfb2ZmcykpOworCX0KK30KKworI2VsaWYgKGRlZmluZWQgTVNWRFhfUkVHX0RVTVApICYmIE1T VkRYX1JFR19EVU1QCisKKyNkZWZpbmUgVkVEX1JFR19XUklURTMyKF92YWwsIF9vZmZzKSBcCitk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXBy aW50ayhLRVJOX0lORk8iTVNWRFg6IHdyaXRlICUwOHggdG8gcmVnIDB4JTA4eFxuIiwgXAorCQkJ KHVuc2lnbmVkIGludCkoX3ZhbCksICAgICAgIFwKKwkJCSh1bnNpZ25lZCBpbnQpKF9vZmZzKSk7 ICAgICBcCisJaW93cml0ZTMyKF92YWwsIGRldl9wcml2LT52ZWRfcmVnX2Jhc2UgKyAoX29mZnMp KTsgICBcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFZFRF9SRUdfUkVB RDMyKHVpbnQzMl90IF9vZmZzKQoreworCXVpbnQzMl90IHZhbCA9IGlvcmVhZDMyKGRldl9wcml2 LT52ZWRfcmVnX2Jhc2UgKyAoX29mZnMpKTsKKwlwcmludGsoS0VSTl9JTkZPIk1TVkRYOiByZWFk IHJlZyAweCUwOHgsIGdldCAlMDh4XG4iLAorCQkJKHVuc2lnbmVkIGludCkoX29mZnMpLCB2YWwp OworCXJldHVybiB2YWw7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgVkVEX1JFR19XUklURTMyKF92 YWwsIF9vZmZzKSBcCisJaW93cml0ZTMyKF92YWwsIGRldl9wcml2LT52ZWRfcmVnX2Jhc2UgKyAo X29mZnMpKQorI2RlZmluZSBWRURfUkVHX1JFQUQzMihfb2ZmcykgXAorCWlvcmVhZDMyKGRldl9w cml2LT52ZWRfcmVnX2Jhc2UgKyAoX29mZnMpKQorCisjZW5kaWYKKworI2RlZmluZSBSRUdJU1RF UihfX2dyb3VwX18sIF9fcmVnX18pIChfX2dyb3VwX18jI18jI19fcmVnX18jI19PRkZTRVQpCisK KyNkZWZpbmUgTVRYX0lOVEVSTkFMX1JFRyhSX1NQRUNJRklFUiAsIFVfU1BFQ0lGSUVSKQlcCisJ KCgoUl9TUEVDSUZJRVIpPDw0KSB8IChVX1NQRUNJRklFUikpCisjZGVmaW5lIE1UWF9QQwkJTVRY X0lOVEVSTkFMX1JFRygwLCA1KQorCisjZGVmaW5lIE1FTUlPX1JFQURfRklFTEQodnBNZW0sIGZp ZWxkKQkJCQkJCVwKKwkoKHVpbnQzMl90KSgoKCooKGZpZWxkIyNfVFlQRSopKCgodWludDMyX3Qp dnBNZW0pICsgZmllbGQjI19PRkZTRVQpKSkgXAorCQkJJiBmaWVsZCMjX01BU0spID4+IGZpZWxk IyNfU0hJRlQpKQkJCVwKKworI2RlZmluZSBNRU1JT19XUklURV9GSUVMRCh2cE1lbSwgZmllbGQs IHZhbHVlKQkJCQkJXAorZG8geyAJCQkJCQkJCQkJXAorCSgoKigoZmllbGQjI19UWVBFKikoKCh1 aW50MzJfdCl2cE1lbSkgKyBmaWVsZCMjX09GRlNFVCkpKSA9CVwKKwkJKCgqKChmaWVsZCMjX1RZ UEUqKSgoKHVpbnQzMl90KXZwTWVtKSArIGZpZWxkIyNfT0ZGU0VUKSkpCVwKKwkJCSYgKGZpZWxk IyNfVFlQRSl+ZmllbGQjI19NQVNLKSB8CQkJXAorCShmaWVsZCMjX1RZUEUpKCgodWludDMyX3Qp KHZhbHVlKSA8PCBmaWVsZCMjX1NISUZUKSAmIGZpZWxkIyNfTUFTSykpOyBcCit9IHdoaWxlICgw KQorCisjZGVmaW5lIE1FTUlPX1dSSVRFX0ZJRUxEX0xJVEUodnBNZW0sIGZpZWxkLCB2YWx1ZSkJ CQkJXAorZG8gewkJCQkJCQkJCQlcCisJICgqKChmaWVsZCMjX1RZUEUqKSgoKHVpbnQzMl90KXZw TWVtKSArIGZpZWxkIyNfT0ZGU0VUKSkpID0JCVwKKwkoKCooKGZpZWxkIyNfVFlQRSopKCgodWlu dDMyX3QpdnBNZW0pICsgZmllbGQjI19PRkZTRVQpKSkgfAkJXAorCQkoZmllbGQjI19UWVBFKSgo KHVpbnQzMl90KSh2YWx1ZSkgPDwgZmllbGQjI19TSElGVCkpKTsJXAorfSB3aGlsZSAoMCkKKwor I2RlZmluZSBSRUdJT19SRUFEX0ZJRUxEKHJlZ192YWwsIHJlZywgZmllbGQpCQkJCQlcCisJKChy ZWdfdmFsICYgcmVnIyNfIyNmaWVsZCMjX01BU0spID4+IHJlZyMjXyMjZmllbGQjI19TSElGVCkK KworI2RlZmluZSBSRUdJT19XUklURV9GSUVMRChyZWdfdmFsLCByZWcsIGZpZWxkLCB2YWx1ZSkJ CQkJXAorZG8gewkJCQkJCQkJCQlcCisJKHJlZ192YWwpID0JCQkJCQkJCVwKKwkoKHJlZ192YWwp ICYgfihyZWcjI18jI2ZpZWxkIyNfTUFTSykpIHwJCQkJXAorCSgoKHZhbHVlKSA8PCAocmVnIyNf IyNmaWVsZCMjX1NISUZUKSkgJiAocmVnIyNfIyNmaWVsZCMjX01BU0spKTsJXAorfSB3aGlsZSAo MCkKKworCisjZGVmaW5lIFJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUocmVnX3ZhbCwgcmVnLCBmaWVs ZCwgdmFsdWUpCQkJXAorZG8gewkJCQkJCQkJCQlcCisJKHJlZ192YWwpID0gKChyZWdfdmFsKSB8 ICgodmFsdWUpIDw8IChyZWcjI18jI2ZpZWxkIyNfU0hJRlQpKSk7CVwKK30gd2hpbGUgKDApCisK Ky8qKioqKiogTVNWRFguVGVjaG5pY2FsIFJlZmVyZW5jZSBNYW51YWwuMi4wLjIuNC5FeHRlcm5h bCBWWEQzOHggKioqKioqKioqKioqKioKK09mZnNldCBhZGRyZXNzIAkJCU5hbWUgCQkJSWRlbnRp ZmllcgorMHgwMDAwIC0gMHgwM0ZGICgxMDI0QikJCU1UWCBSZWdpc3RlcgkJUkVHX01TVkRYX01U WAorMHgwNDAwIC0gMHgwNDdGICgxMjhCKQkJVkRNQyBSZWdpc3RlcgkJUkVHX01TVkRYIF9WRE1D CisweDA0ODAgLSAweDA0RkYgKDEyOEIpCQlWREVCIFJlZ2lzdGVyCQlSRUdfTVNWRFggX1ZERUIK KzB4MDUwMCAtIDB4MDVGRiAoMjU2QikJCURNQUMgUmVnaXN0ZXIJCVJFR19NU1ZEWCBfRE1BQwor MHgwNjAwIC0gMHgwNkZGICgyNTZCKQkJTVNWRFggQ29yZSBSZWdpc3RlcglSRUdfTVNWRFggX1NZ UworMHgwNzAwIC0gMHgwN0ZGICgyNTZCKQkJVkVDIGlRIE1hdHJpeCBSQU0gCVJFR19NU1ZEWF9W RUNfSVFSQU0KKzB4MDgwMCAtIDB4MEZGRiAoMjA0OEIpCQlWRUMgUmVnaXN0ZXJzCQlSRUdfTVNW RFggX1ZFQworMHgxMDAwIC0gMHgxRkZGICg0a0IpCQlDb21tYW5kIFJlZ2lzdGVyCVJFR19NU1ZE WCBfQ01ECisweDIwMDAgLSAweDJGRkYgKDRrQikJCVZFQyBMb2NhbCBSQU0JCVJFR19NU1ZEWCBf VkVDX1JBTQorMHgzMDAwIC0gMHg0RkZGICg4a0IpCQlWRUMgVkxDIFRhYmxlCQlSQU0gUkVHX01T VkRYIF9WRUNfVkxDCisweDUwMDAgLSAweDVGRkYgKDRrQikJCUFYSSBSZWdpc3RlcgkJUkVHX01T VkRYIF9BWEkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKiBNVFgg cmVnaXN0ZXJzIHN0YXJ0OiAweDAwMDAgLSAweDAzRkYgKDEwMjRCKSAqKioqKioqKioqKioqKioq LworI2RlZmluZSBNVFhfRU5BQkxFX09GRlNFVAkJCQkoMHgwMDAwKQorI2RlZmluZSBNVFhfRU5B QkxFX01UWF9FTkFCTEVfTUFTSwkJCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTVRYX0VOQUJMRV9N VFhfRU5BQkxFX1NISUZUCQkJCSgwKQorCisjZGVmaW5lIE1UWF9LSUNLX0lOUFVUX09GRlNFVAkJ CQkoMHgwMDgwKQorCisjZGVmaW5lIE1UWF9SRUdJU1RFUl9SRUFEX1dSSVRFX1JFUVVFU1RfT0ZG U0VUCQkoMHgwMEZDKQorI2RlZmluZSBNVFhfUkVHSVNURVJfUkVBRF9XUklURV9SRVFVRVNUX01U WF9EUkVBRFlfTUFTSwkoMHg4MDAwMDAwMCkKKyNkZWZpbmUgTVRYX1JFR0lTVEVSX1JFQURfV1JJ VEVfUkVRVUVTVF9NVFhfRFJFQURZX1NISUZUCSgzMSkKKyNkZWZpbmUgTVRYX1JFR0lTVEVSX1JF QURfV1JJVEVfUkVRVUVTVF9NVFhfUk5XX01BU0sJCSgweDAwMDEwMDAwKQorI2RlZmluZSBNVFhf UkVHSVNURVJfUkVBRF9XUklURV9SRVFVRVNUX01UWF9STldfU0hJRlQJCSgxNikKKworI2RlZmlu ZSBNVFhfUkVHSVNURVJfUkVBRF9XUklURV9EQVRBX09GRlNFVAkJKDB4MDBGOCkKKworI2RlZmlu ZSBNVFhfUkFNX0FDQ0VTU19EQVRBX1RSQU5TRkVSX09GRlNFVAkJKDB4MDEwNCkKKworI2RlZmlu ZSBNVFhfUkFNX0FDQ0VTU19DT05UUk9MX09GRlNFVAkJCSgweDAxMDgpCisjZGVmaW5lIE1UWF9S QU1fQUNDRVNTX0NPTlRST0xfTVRYX01DTUlEX01BU0sJCQkoMHgwRkYwMDAwMCkKKyNkZWZpbmUg TVRYX1JBTV9BQ0NFU1NfQ09OVFJPTF9NVFhfTUNNSURfU0hJRlQJCQkoMjApCisjZGVmaW5lIE1U WF9SQU1fQUNDRVNTX0NPTlRST0xfTVRYX01DTV9BRERSX01BU0sJCSgweDAwMEZGRkZDKQorI2Rl ZmluZSBNVFhfUkFNX0FDQ0VTU19DT05UUk9MX01UWF9NQ01fQUREUl9TSElGVAkJKDIpCisjZGVm aW5lIE1UWF9SQU1fQUNDRVNTX0NPTlRST0xfTVRYX01DTUFJX01BU0sJCQkoMHgwMDAwMDAwMikK KyNkZWZpbmUgTVRYX1JBTV9BQ0NFU1NfQ09OVFJPTF9NVFhfTUNNQUlfU0hJRlQJCQkoMSkKKyNk ZWZpbmUgTVRYX1JBTV9BQ0NFU1NfQ09OVFJPTF9NVFhfTUNNUl9NQVNLCQkJKDB4MDAwMDAwMDEp CisjZGVmaW5lIE1UWF9SQU1fQUNDRVNTX0NPTlRST0xfTVRYX01DTVJfU0hJRlQJCQkoMCkKKwor I2RlZmluZSBNVFhfUkFNX0FDQ0VTU19TVEFUVVNfT0ZGU0VUCQkJKDB4MDEwQykKKworI2RlZmlu ZSBNVFhfU09GVF9SRVNFVF9PRkZTRVQJCQkJKDB4MDIwMCkKKyNkZWZpbmUgTVRYX1NPRlRfUkVT RVRfTVRYX1JFU0VUX01BU0sJCQkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1UWF9TT0ZUX1JFU0VU X01UWF9SRVNFVF9TSElGVAkJCQkoMCkKKyNkZWZpbmUJTVRYX1NPRlRfUkVTRVRfTVRYUkVTRVQJ CQkJKDB4MDAwMDAwMDEpCisKKyNkZWZpbmUgTVRYX1NZU0NfVElNRVJESVZfT0ZGU0VUCQkJKDB4 MDIwOCkKKworI2RlZmluZSBNVFhfU1lTQ19DRE1BQ19PRkZTRVQJCQkJKDB4MDM0MCkKKyNkZWZp bmUgTVRYX1NZU0NfQ0RNQUNfQlVSU1RTSVpFX01BU0sJCQkJKDB4MDcwMDAwMDApCisjZGVmaW5l IE1UWF9TWVNDX0NETUFDX0JVUlNUU0laRV9TSElGVAkJCQkoMjQpCisjZGVmaW5lIE1UWF9TWVND X0NETUFDX1JOV19NQVNLCQkJCSgweDAwMDIwMDAwKQorI2RlZmluZSBNVFhfU1lTQ19DRE1BQ19S TldfU0hJRlQJCQkJKDE3KQorI2RlZmluZSBNVFhfU1lTQ19DRE1BQ19FTkFCTEVfTUFTSwkJCQko MHgwMDAxMDAwMCkKKyNkZWZpbmUgTVRYX1NZU0NfQ0RNQUNfRU5BQkxFX1NISUZUCQkJCSgxNikK KyNkZWZpbmUgTVRYX1NZU0NfQ0RNQUNfTEVOR1RIX01BU0sJCQkJKDB4MDAwMEZGRkYpCisjZGVm aW5lIE1UWF9TWVNDX0NETUFDX0xFTkdUSF9TSElGVAkJCQkoMCkKKworI2RlZmluZSBNVFhfU1lT Q19DRE1BQV9PRkZTRVQJCQkJKDB4MDM0NCkKKworI2RlZmluZSBNVFhfU1lTQ19DRE1BUzBfT0ZG U0VUICAgICAgCQkJKDB4MDM0OCkKKworI2RlZmluZSBNVFhfU1lTQ19DRE1BVF9PRkZTRVQJCQkJ KDB4MDM1MCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiBNVFggcmVnaXN0ZXJzIGVuZCAq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKiogRE1BQyBSZWdp c3RlcnM6IDB4MDUwMCAtIDB4MDVGRiAoMjU2QikgKioqKioqKioqKioqKioqLworI2RlZmluZSBE TUFDX0RNQUNfQ09VTlRfRU5fTUFTSyAgICAgICAgIAkJKDB4MDAwMTAwMDApCisjZGVmaW5lIERN QUNfRE1BQ19JUlFfU1RBVF9UUkFOU0ZFUl9GSU5fTUFTSyAgICAgICAgICAgICgweDAwMDIwMDAw KQorCisjZGVmaW5lIERNQUNfRE1BQ19TRVRVUF9PRkZTRVQJCQkJKDB4MDUwMCkKKworI2RlZmlu ZSBETUFDX0RNQUNfQ09VTlRfT0ZGU0VUCQkJCSgweDA1MDQpCisjZGVmaW5lIERNQUNfRE1BQ19D T1VOVF9CU1dBUF9MU0JNQVNLICAgICAgICAgICAJCSgweDAwMDAwMDAxKQorI2RlZmluZSBETUFD X0RNQUNfQ09VTlRfQlNXQVBfU0hJRlQgICAgICAgICAgICAJCSgzMCkKKyNkZWZpbmUgRE1BQ19E TUFDX0NPVU5UX1BXX0xTQk1BU0sJCQkJKDB4MDAwMDAwMDMpCisjZGVmaW5lIERNQUNfRE1BQ19D T1VOVF9QV19TSElGVCAgICAgICAgICAgICAgICAJCSgyNykKKyNkZWZpbmUgRE1BQ19ETUFDX0NP VU5UX0RJUl9MU0JNQVNLCQkJCSgweDAwMDAwMDAxKQorI2RlZmluZSBETUFDX0RNQUNfQ09VTlRf RElSX1NISUZUCQkJCSgyNikKKyNkZWZpbmUgRE1BQ19ETUFDX0NPVU5UX1BJX0xTQk1BU0sJCQkJ KDB4MDAwMDAwMDMpCisjZGVmaW5lIERNQUNfRE1BQ19DT1VOVF9QSV9TSElGVAkJCQkoMjQpCisj ZGVmaW5lIERNQUNfRE1BQ19DT1VOVF9DTlRfTFNCTUFTSwkJCQkoMHgwMDAwRkZGRikKKyNkZWZp bmUgRE1BQ19ETUFDX0NPVU5UX0NOVF9TSElGVAkJCQkoMCkKKyNkZWZpbmUgRE1BQ19ETUFDX0NP VU5UX0VOX01BU0sJCQkJKDB4MDAwMTAwMDApCisjZGVmaW5lIERNQUNfRE1BQ19DT1VOVF9FTl9T SElGVAkJCQkoMTYpCisKKyNkZWZpbmUgRE1BQ19ETUFDX1BFUklQSF9PRkZTRVQJCQkJKDB4MDUw OCkKKyNkZWZpbmUgRE1BQ19ETUFDX1BFUklQSF9BQ0NfREVMX0xTQk1BU0sJCQkoMHgwMDAwMDAw NykKKyNkZWZpbmUgRE1BQ19ETUFDX1BFUklQSF9BQ0NfREVMX1NISUZUCQkJCSgyOSkKKyNkZWZp bmUgRE1BQ19ETUFDX1BFUklQSF9JTkNSX0xTQk1BU0sJCQkJKDB4MDAwMDAwMDEpCisjZGVmaW5l IERNQUNfRE1BQ19QRVJJUEhfSU5DUl9TSElGVAkJCQkoMjcpCisjZGVmaW5lIERNQUNfRE1BQ19Q RVJJUEhfQlVSU1RfTFNCTUFTSwkJCQkoMHgwMDAwMDAwNykKKyNkZWZpbmUgRE1BQ19ETUFDX1BF UklQSF9CVVJTVF9TSElGVAkJCQkoMjQpCisKKyNkZWZpbmUgRE1BQ19ETUFDX0lSUV9TVEFUX09G RlNFVAkJCSgweDA1MEMpCisjZGVmaW5lIERNQUNfRE1BQ19JUlFfU1RBVF9UUkFOU0ZFUl9GSU5f TUFTSwkJCSgweDAwMDIwMDAwKQorCisjZGVmaW5lIERNQUNfRE1BQ19QRVJJUEhFUkFMX0FERFJf T0ZGU0VUCQkoMHgwNTE0KQorI2RlZmluZSBETUFDX0RNQUNfUEVSSVBIRVJBTF9BRERSX0FERFJf TUFTSwkJCSgweDAwN0ZGRkZGKQorI2RlZmluZSBETUFDX0RNQUNfUEVSSVBIRVJBTF9BRERSX0FE RFJfTFNCTUFTSwkJCSgweDAwN0ZGRkZGKQorI2RlZmluZSBETUFDX0RNQUNfUEVSSVBIRVJBTF9B RERSX0FERFJfU0hJRlQJCQkoMCkKKworLyogRE1BQyBjb250cm9sICovCisjZGVmaW5lIFBTQl9E TUFDX1ZBTFVFX0NPVU5UKEJTV0FQLCBQVywgRElSLCBQRVJJUEhfSU5DUiwgQ09VTlQpIAlcCisJ CSgoKChCU1dBUCkgJiBETUFDX0RNQUNfQ09VTlRfQlNXQVBfTFNCTUFTSykgPDwJXAorCQkJRE1B Q19ETUFDX0NPVU5UX0JTV0FQX1NISUZUKSB8IAkJXAorCQkoKChQVykgJiBETUFDX0RNQUNfQ09V TlRfUFdfTFNCTUFTSykgPDwJCVwKKwkJCURNQUNfRE1BQ19DT1VOVF9QV19TSElGVCkgfCAJCQlc CisJCSgoKERJUikgJiBETUFDX0RNQUNfQ09VTlRfRElSX0xTQk1BU0spIDw8CQlcCisJCQlETUFD X0RNQUNfQ09VTlRfRElSX1NISUZUKSB8CQkJXAorCQkoKChQRVJJUEhfSU5DUikgJiBETUFDX0RN QUNfQ09VTlRfUElfTFNCTUFTSykgPDwJXAorCQkJRE1BQ19ETUFDX0NPVU5UX1BJX1NISUZUKSB8 CQkJXAorCQkoKChDT1VOVCkgJiBETUFDX0RNQUNfQ09VTlRfQ05UX0xTQk1BU0spIDw8CQlcCisJ CQlETUFDX0RNQUNfQ09VTlRfQ05UX1NISUZUKSkKKworI2RlZmluZSBQU0JfRE1BQ19WQUxVRV9Q RVJJUEhfUEFSQU0oQUNDX0RFTCwgSU5DUiwgQlVSU1QpCQlcCisJCSgoKChBQ0NfREVMKSAmIERN QUNfRE1BQ19QRVJJUEhfQUNDX0RFTF9MU0JNQVNLKSA8PAlcCisJCQlETUFDX0RNQUNfUEVSSVBI X0FDQ19ERUxfU0hJRlQpIHwgCQlcCisJCSgoKElOQ1IpICYgRE1BQ19ETUFDX1BFUklQSF9JTkNS X0xTQk1BU0spIDw8CQlcCisJCQlETUFDX0RNQUNfUEVSSVBIX0lOQ1JfU0hJRlQpIHwgCQlcCisJ CSgoKEJVUlNUKSAmIERNQUNfRE1BQ19QRVJJUEhfQlVSU1RfTFNCTUFTSykgPDwJCVwKKwkJCURN QUNfRE1BQ19QRVJJUEhfQlVSU1RfU0hJRlQpKQorCit0eXBlZGVmIGVudW0geworCS8qICE8IE5v IGJ5dGUgc3dhcHBpbmcgd2lsbCBiZSBwZXJmb3JtZWQuICovCisJUFNCX0RNQUNfQlNXQVBfTk9f U1dBUCA9IDB4MCwKKwkvKiAhPCBCeXRlIG9yZGVyIHdpbGwgYmUgcmV2ZXJzZWQuICovCisJUFNC X0RNQUNfQlNXQVBfUkVWRVJTRSA9IDB4MSwKK30gRE1BQ19lQlN3YXA7CisKK3R5cGVkZWYgZW51 bSB7CisJLyogITwgRGF0YSBmcm9tIG1lbW9yeSB0byBwZXJpcGhlcmFsLiAqLworCVBTQl9ETUFD X0RJUl9NRU1fVE9fUEVSSVBIID0gMHgwLAorCS8qICE8IERhdGEgZnJvbSBwZXJpcGhlcmFsIHRv IG1lbW9yeS4gKi8KKwlQU0JfRE1BQ19ESVJfUEVSSVBIX1RPX01FTSA9IDB4MSwKK30gRE1BQ19l RGlyOworCit0eXBlZGVmIGVudW0geworCVBTQl9ETUFDX0FDQ19ERUxfMAk9IDB4MCwJLyogITwg QWNjZXNzIGRlbGF5IHplcm8gY2xvY2sgY3ljbGVzICovCisJUFNCX0RNQUNfQUNDX0RFTF8yNTYg ICAgPSAweDEsCS8qICE8IEFjY2VzcyBkZWxheSAyNTYgY2xvY2sgY3ljbGVzICovCisJUFNCX0RN QUNfQUNDX0RFTF81MTIgICAgPSAweDIsCS8qICE8IEFjY2VzcyBkZWxheSA1MTIgY2xvY2sgY3lj bGVzICovCisJUFNCX0RNQUNfQUNDX0RFTF83NjggICAgPSAweDMsCS8qICE8IEFjY2VzcyBkZWxh eSA3NjggY2xvY2sgY3ljbGVzICovCisJUFNCX0RNQUNfQUNDX0RFTF8xMDI0ICAgPSAweDQsCS8q ICE8IEFjY2VzcyBkZWxheSAxMDI0IGNsb2NrIGN5Y2xlcyAqLworCVBTQl9ETUFDX0FDQ19ERUxf MTI4MCAgID0gMHg1LAkvKiAhPCBBY2Nlc3MgZGVsYXkgMTI4MCBjbG9jayBjeWNsZXMgKi8KKwlQ U0JfRE1BQ19BQ0NfREVMXzE1MzYgICA9IDB4NiwJLyogITwgQWNjZXNzIGRlbGF5IDE1MzYgY2xv Y2sgY3ljbGVzICovCisJUFNCX0RNQUNfQUNDX0RFTF8xNzkyICAgPSAweDcsCS8qICE8IEFjY2Vz cyBkZWxheSAxNzkyIGNsb2NrIGN5Y2xlcyAqLworfSBETUFDX2VBY2NEZWw7CisKK3R5cGVkZWYg ZW51bSB7CisJUFNCX0RNQUNfSU5DUl9PRkYJPSAwLAkvKiAhPCBTdGF0aWMgcGVyaXBoZXJhbCBh ZGRyZXNzLiAqLworCVBTQl9ETUFDX0lOQ1JfT04JPSAxLAkvKiAhPCBJbmNyZW1lbnRpbmcgcGVy aXBoZXJhbCBhZGRyZXNzLiAqLworfSBETUFDX2VJbmNyOworCit0eXBlZGVmIGVudW0geworCVBT Ql9ETUFDX0JVUlNUXzAJPSAweDAsCS8qICE8IGJ1cnN0IHNpemUgb2YgMCAqLworCVBTQl9ETUFD X0JVUlNUXzEgICAgICAgID0gMHgxLAkvKiAhPCBidXJzdCBzaXplIG9mIDEgKi8KKwlQU0JfRE1B Q19CVVJTVF8yICAgICAgICA9IDB4MiwJLyogITwgYnVyc3Qgc2l6ZSBvZiAyICovCisJUFNCX0RN QUNfQlVSU1RfMyAgICAgICAgPSAweDMsCS8qICE8IGJ1cnN0IHNpemUgb2YgMyAqLworCVBTQl9E TUFDX0JVUlNUXzQgICAgICAgID0gMHg0LAkvKiAhPCBidXJzdCBzaXplIG9mIDQgKi8KKwlQU0Jf RE1BQ19CVVJTVF81ICAgICAgICA9IDB4NSwJLyogITwgYnVyc3Qgc2l6ZSBvZiA1ICovCisJUFNC X0RNQUNfQlVSU1RfNiAgICAgICAgPSAweDYsCS8qICE8IGJ1cnN0IHNpemUgb2YgNiAqLworCVBT Ql9ETUFDX0JVUlNUXzcgICAgICAgID0gMHg3LAkvKiAhPCBidXJzdCBzaXplIG9mIDcgKi8KK30g RE1BQ19lQnVyc3Q7CisvKioqKioqKioqKioqKioqKioqKioqKioqKiogRE1BQyBSZWdpc3RlcnMg ZW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKiBNU1ZE WCBDb3JlIFJlZ2lzdGVyczogMHgwNjAwIC0gMHgwNkZGICgyNTZCKSAqKioqKioqKioqKioqKiov CisjZGVmaW5lIE1TVkRYX0NPTlRST0xfT0ZGU0VUCQkJCQkoMHgwNjAwKQorI2RlZmluZSBNU1ZE WF9DT05UUk9MX01TVkRYX1NPRlRfUkVTRVRfTUFTSwkJCSgweDAwMDAwMTAwKQorI2RlZmluZSBN U1ZEWF9DT05UUk9MX01TVkRYX1NPRlRfUkVTRVRfU0hJRlQJCQkoOCkKKyNkZWZpbmUgTVNWRFhf Q09OVFJPTF9ETUFDX0NIMF9TRUxFQ1RfTUFTSwkJCSgweDAwMDAxMDAwKQorI2RlZmluZSBNU1ZE WF9DT05UUk9MX0RNQUNfQ0gwX1NFTEVDVF9TSElGVAkJCSgxMikKKyNkZWZpbmUgTVNWRFhfQ09O VFJPTF9NU1ZEWF9TT0ZUX1JFU0VUX01BU0sJCQkoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTVNWRFhf Q09OVFJPTF9NU1ZEWF9TT0ZUX1JFU0VUX1NISUZUCQkJKDgpCisjZGVmaW5lIE1TVkRYX0NPTlRS T0xfTVNWRFhfRkVfU09GVF9SRVNFVF9NQVNLCQkJKDB4MDAwMTAwMDApCisjZGVmaW5lIE1TVkRY X0NPTlRST0xfTVNWRFhfQkVfU09GVF9SRVNFVF9NQVNLCQkJKDB4MDAxMDAwMDApCisjZGVmaW5l IE1TVkRYX0NPTlRST0xfTVNWRFhfVkVDX01FTUlGX1NPRlRfUkVTRVRfTUFTSwkJKDB4MDEwMDAw MDApCisjZGVmaW5lIE1TVkRYX0NPTlRST0xfTVNWRFhfVkVDX1JFTkRFQ19ERUNfU09GVF9SRVNF VF9NQVNLIAkoMHgxMDAwMDAwMCkKKyNkZWZpbmUgbXN2ZHhfc3dfcmVzZXRfYWxsIFwKKwkoTVNW RFhfQ09OVFJPTF9NU1ZEWF9TT0ZUX1JFU0VUX01BU0sgfAkgIAkJXAorCU1TVkRYX0NPTlRST0xf TVNWRFhfRkVfU09GVF9SRVNFVF9NQVNLIHwJCVwKKwlNU1ZEWF9DT05UUk9MX01TVkRYX0JFX1NP RlRfUkVTRVRfTUFTSwl8CQlcCisJTVNWRFhfQ09OVFJPTF9NU1ZEWF9WRUNfTUVNSUZfU09GVF9S RVNFVF9NQVNLIHwJXAorCU1TVkRYX0NPTlRST0xfTVNWRFhfVkVDX1JFTkRFQ19ERUNfU09GVF9S RVNFVF9NQVNLKQorCisjZGVmaW5lIE1TVkRYX0lOVEVSUlVQVF9DTEVBUl9PRkZTRVQJCQkoMHgw NjBDKQorCisjZGVmaW5lIE1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfT0ZGU0VUCQkJKDB4MDYwOCkK KyNkZWZpbmUgTVNWRFhfSU5URVJSVVBUX1NUQVRVU19NTVVfRkFVTFRfSVJRX01BU0sJCSgweDAw MDAwRjAwKQorI2RlZmluZSBNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX01NVV9GQVVMVF9JUlFfU0hJ RlQJCSg4KQorI2RlZmluZSBNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX01UWF9JUlFfTUFTSwkJCSgw eDAwMDA0MDAwKQorI2RlZmluZSBNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX01UWF9JUlFfU0hJRlQJ CQkoMTQpCisKKyNkZWZpbmUgTVNWRFhfSE9TVF9JTlRFUlJVUFRfRU5BQkxFX09GRlNFVAkJKDB4 MDYxMCkKKworI2RlZmluZSBNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9PRkZTRVQJCQkoMHgwNjIwKQor I2RlZmluZSBNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9DT1JFX01BTl9DTEtfRU5BQkxFX01BU0sJCSgw eDAwMDAwMDAxKQorI2RlZmluZSBNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WREVCX1BST0NFU1NfTUFO X0NMS19FTkFCTEVfTUFTSyAJKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1TVkRYX01BTl9DTEtfRU5B QkxFX1ZERUJfQUNDRVNTX01BTl9DTEtfRU5BQkxFX01BU0sgCSgweDAwMDAwMDA0KQorI2RlZmlu ZSBNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WRE1DX01BTl9DTEtfRU5BQkxFX01BU0sgCQkoMHgwMDAw MDAwOCkKKyNkZWZpbmUgTVNWRFhfTUFOX0NMS19FTkFCTEVfVkVDX0VOVERFQ19NQU5fQ0xLX0VO QUJMRV9NQVNLIAkoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVNWRFhfTUFOX0NMS19FTkFCTEVfVkVD X0lUUkFOU19NQU5fQ0xLX0VOQUJMRV9NQVNLIAkoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTVNWRFhf TUFOX0NMS19FTkFCTEVfTVRYX01BTl9DTEtfRU5BQkxFX01BU0sJCSgweDAwMDAwMDQwKQorI2Rl ZmluZSBNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WREVCX1BST0NFU1NfQVVUT19DTEtfRU5BQkxFX01B U0sgKDB4MDAwMjAwMDApCisjZGVmaW5lIE1TVkRYX01BTl9DTEtfRU5BQkxFX1ZERUJfQUNDRVNT X0FVVE9fQ0xLX0VOQUJMRV9NQVNLCSgweDAwMDQwMDAwKQorI2RlZmluZSBNU1ZEWF9NQU5fQ0xL X0VOQUJMRV9WRE1DX0FVVE9fQ0xLX0VOQUJMRV9NQVNLIAkoMHgwMDA4MDAwMCkKKyNkZWZpbmUg TVNWRFhfTUFOX0NMS19FTkFCTEVfVkVDX0VOVERFQ19BVVRPX0NMS19FTkFCTEVfTUFTSyAJKDB4 MDAxMDAwMDApCisjZGVmaW5lIE1TVkRYX01BTl9DTEtfRU5BQkxFX1ZFQ19JVFJBTlNfQVVUT19D TEtfRU5BQkxFX01BU0sgCSgweDAwMjAwMDAwKQorCisjZGVmaW5lIGNsa19lbmFibGVfYWxsCVwK KwkoTVNWRFhfTUFOX0NMS19FTkFCTEVfQ09SRV9NQU5fQ0xLX0VOQUJMRV9NQVNLCQkJfCBcCisJ TVNWRFhfTUFOX0NMS19FTkFCTEVfVkRFQl9QUk9DRVNTX01BTl9DTEtfRU5BQkxFX01BU0sgCQl8 IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WREVCX0FDQ0VTU19NQU5fQ0xLX0VOQUJMRV9NQVNL IAkJfCBcCisJTVNWRFhfTUFOX0NMS19FTkFCTEVfVkRNQ19NQU5fQ0xLX0VOQUJMRV9NQVNLCSAJ CXwgXAorCU1TVkRYX01BTl9DTEtfRU5BQkxFX1ZFQ19FTlRERUNfTUFOX0NMS19FTkFCTEVfTUFT SyAJCXwgXAorCU1TVkRYX01BTl9DTEtfRU5BQkxFX1ZFQ19JVFJBTlNfTUFOX0NMS19FTkFCTEVf TUFTSyAJCXwgXAorCU1TVkRYX01BTl9DTEtfRU5BQkxFX01UWF9NQU5fQ0xLX0VOQUJMRV9NQVNL KQorCisjZGVmaW5lIGNsa19lbmFibGVfbWluaW1hbCBcCisJKE1TVkRYX01BTl9DTEtfRU5BQkxF X0NPUkVfTUFOX0NMS19FTkFCTEVfTUFTSyB8IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9NVFhf TUFOX0NMS19FTkFCTEVfTUFTSykKKworI2RlZmluZSBjbGtfZW5hYmxlX2F1dG8JXAorCShNU1ZE WF9NQU5fQ0xLX0VOQUJMRV9WREVCX1BST0NFU1NfQVVUT19DTEtfRU5BQkxFX01BU0sJfCBcCisJ TVNWRFhfTUFOX0NMS19FTkFCTEVfVkRFQl9BQ0NFU1NfQVVUT19DTEtfRU5BQkxFX01BU0sJCXwg XAorCU1TVkRYX01BTl9DTEtfRU5BQkxFX1ZETUNfQVVUT19DTEtfRU5BQkxFX01BU0sJCQl8IFwK KwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WRUNfRU5UREVDX0FVVE9fQ0xLX0VOQUJMRV9NQVNLCQl8 IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WRUNfSVRSQU5TX0FVVE9fQ0xLX0VOQUJMRV9NQVNL CQl8IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9DT1JFX01BTl9DTEtfRU5BQkxFX01BU0sJCQl8 IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9NVFhfTUFOX0NMS19FTkFCTEVfTUFTSykKKworI2Rl ZmluZSBNU1ZEWF9DT1JFX0lEX09GRlNFVAkJCQkoMHgwNjMwKQorI2RlZmluZSBNU1ZEWF9DT1JF X1JFVl9PRkZTRVQJCQkJKDB4MDY0MCkKKworI2RlZmluZSBNU1ZEWF9ETUFDX1NUUkVBTV9TVEFU VVNfT0ZGU0VUCQkJKDB4MDY0OCkKKworI2RlZmluZSBNU1ZEWF9NTVVfQ09OVFJPTDBfT0ZGU0VU CQkJKDB4MDY4MCkKKyNkZWZpbmUgTVNWRFhfTU1VX0NPTlRST0wwX01NVV9QQVVTRV9NQVNLCQkJ KDB4MDAwMDAwMDIpCisjZGVmaW5lIE1TVkRYX01NVV9DT05UUk9MMF9NTVVfUEFVU0VfU0hJRlQJ CQkoMSkKKyNkZWZpbmUgTVNWRFhfTU1VX0NPTlRST0wwX01NVV9JTlZBTERDX01BU0sgICAgICAg ICAgCQkoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTVNWRFhfTU1VX0NPTlRST0wwX01NVV9JTlZBTERD X1NISUZUICAgICAgICAgCQkoMykKKworI2RlZmluZSBNU1ZEWF9NTVVfQkFOS19JTkRFWF9PRkZT RVQJCQkoMHgwNjg4KQorCisjZGVmaW5lIE1TVkRYX01NVV9TVEFUVVNfT0ZGU0VUCQkJCSgweDA2 OEMpCisKKyNkZWZpbmUgTVNWRFhfTU1VX0NPTlRST0wyX09GRlNFVAkJCSgweDA2OTApCisKKyNk ZWZpbmUgTVNWRFhfTU1VX0RJUl9MSVNUX0JBU0VfT0ZGU0VUCQkJKDB4MDY5NCkKKworI2RlZmlu ZSBNU1ZEWF9NTVVfTUVNX1JFUV9PRkZTRVQJCQkoMHgwNkQwKQorCisjZGVmaW5lIE1TVkRYX01N VV9USUxFX0JBU0UwX09GRlNFVAkJCSgweDA2RDQpCisKKyNkZWZpbmUgTVNWRFhfTU1VX1RJTEVf QkFTRTFfT0ZGU0VUCQkJKDB4MDZEOCkKKworI2RlZmluZSBNU1ZEWF9NVFhfUkFNX0JBTktfT0ZG U0VUCQkJKDB4MDZGMCkKKyNkZWZpbmUgTVNWRFhfTVRYX1JBTV9CQU5LX01UWF9SQU1fQkFOS19T SVpFX01BU0sJCSgweDAwMEYwMDAwKQorI2RlZmluZSBNU1ZEWF9NVFhfUkFNX0JBTktfTVRYX1JB TV9CQU5LX1NJWkVfU0hJRlQJCSgxNikKKworI2RlZmluZSBNU1ZEWF9NVFhfREVCVUdfT0ZGU0VU CQkJCU1TVkRYX01UWF9SQU1fQkFOS19PRkZTRVQKKyNkZWZpbmUgTVNWRFhfTVRYX0RFQlVHX01U WF9EQkdfSVNfU0xBVkVfTUFTSwkJCSgweDAwMDAwMDA0KQorI2RlZmluZSBNU1ZEWF9NVFhfREVC VUdfTVRYX0RCR19JU19TTEFWRV9MU0JNQVNLCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTVNWRFhf TVRYX0RFQlVHX01UWF9EQkdfSVNfU0xBVkVfU0hJRlQJCQkoMikKKyNkZWZpbmUgTVNWRFhfTVRY X0RFQlVHX01UWF9EQkdfR1BJT19JTl9NQVNLCQkJKDB4MDAwMDAwMDMpCisjZGVmaW5lIE1TVkRY X01UWF9ERUJVR19NVFhfREJHX0dQSU9fSU5fTFNCTUFTSwkJKDB4MDAwMDAwMDMpCisjZGVmaW5l IE1TVkRYX01UWF9ERUJVR19NVFhfREJHX0dQSU9fSU5fU0hJRlQJCQkoMCkKKworLyp3YXRjaCBk b2cgZm9yIEZFIGFuZCBCRSovCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT05UUk9MX09GRlNFVAkJ CSgweDA2NjQpCisvKiBNU1ZEWF9DT1JFLCBDUl9GRV9NU1ZEWF9XRFRfQ09OVFJPTCwgRkVfV0RU X0NOVF9DVFJMICovCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT05UUk9MX0ZFX1dEVF9DTlRfQ1RS TF9NQVNLCQkoMHgwMDA2MDAwMCkKKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RU X0NOVF9DVFJMX0xTQk1BU0sJCSgweDAwMDAwMDAzKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09O VFJPTF9GRV9XRFRfQ05UX0NUUkxfU0hJRlQJCSgxNykKKy8qIE1TVkRYX0NPUkUsIENSX0ZFX01T VkRYX1dEVF9DT05UUk9MLCBGRV9XRFRfRU5BQkxFICovCisjZGVmaW5lIEZFX01TVkRYX1dEVF9D T05UUk9MX0ZFX1dEVF9FTkFCTEVfTUFTSwkJKDB4MDAwMTAwMDApCisjZGVmaW5lIEZFX01TVkRY X1dEVF9DT05UUk9MX0ZFX1dEVF9FTkFCTEVfTFNCTUFTSwkJKDB4MDAwMDAwMDEpCisjZGVmaW5l IEZFX01TVkRYX1dEVF9DT05UUk9MX0ZFX1dEVF9FTkFCTEVfU0hJRlQJCSgxNikKKy8qIE1TVkRY X0NPUkUsIENSX0ZFX01TVkRYX1dEVF9DT05UUk9MLCBGRV9XRFRfQUNUSU9OMSAqLworI2RlZmlu ZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRfQUNUSU9OMV9NQVNLCQkoMHgwMDAwMzAwMCkK KyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0FDVElPTjFfTFNCTUFTSwkJKDB4 MDAwMDAwMDMpCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT05UUk9MX0ZFX1dEVF9BQ1RJT04xX1NI SUZUCQkoMTIpCisvKiBNU1ZEWF9DT1JFLCBDUl9GRV9NU1ZEWF9XRFRfQ09OVFJPTCwgRkVfV0RU X0FDVElPTjAgKi8KKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0FDVElPTjBf TUFTSwkJKDB4MDAwMDAxMDApCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT05UUk9MX0ZFX1dEVF9B Q1RJT04wX0xTQk1BU0sJCSgweDAwMDAwMDAxKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJP TF9GRV9XRFRfQUNUSU9OMF9TSElGVAkJKDgpCisvKiBNU1ZEWF9DT1JFLCBDUl9GRV9NU1ZEWF9X RFRfQ09OVFJPTCwgRkVfV0RUX0NMRUFSX1NFTEVDVCAqLworI2RlZmluZSBGRV9NU1ZEWF9XRFRf Q09OVFJPTF9GRV9XRFRfQ0xFQVJfU0VMRUNUX01BU0sJCSgweDAwMDAwMDMwKQorI2RlZmluZSBG RV9NU1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRfQ0xFQVJfU0VMRUNUX0xTQk1BU0sJKDB4MDAwMDAw MDMpCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT05UUk9MX0ZFX1dEVF9DTEVBUl9TRUxFQ1RfU0hJ RlQJCSg0KQorLyogTVNWRFhfQ09SRSwgQ1JfRkVfTVNWRFhfV0RUX0NPTlRST0wsIEZFX1dEVF9D TEtESVZfU0VMRUNUICovCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT05UUk9MX0ZFX1dEVF9DTEtE SVZfU0VMRUNUX01BU0sJCSgweDAwMDAwMDA3KQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJP TF9GRV9XRFRfQ0xLRElWX1NFTEVDVF9MU0JNQVNLCSgweDAwMDAwMDA3KQorI2RlZmluZSBGRV9N U1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRfQ0xLRElWX1NFTEVDVF9TSElGVAkoMCkKKworI2RlZmlu ZSBGRV9NU1ZEWF9XRFRJTUVSX09GRlNFVAkJCQkoMHgwNjY4KQorLyogTVNWRFhfQ09SRSwgQ1Jf RkVfTVNWRFhfV0RUSU1FUiwgRkVfV0RUX0NPVU5URVIgKi8KKyNkZWZpbmUgRkVfTVNWRFhfV0RU SU1FUl9GRV9XRFRfQ09VTlRFUl9NQVNLCQkJKDB4MDAwMEZGRkYpCisjZGVmaW5lIEZFX01TVkRY X1dEVElNRVJfRkVfV0RUX0NPVU5URVJfTFNCTUFTSwkJKDB4MDAwMEZGRkYpCisjZGVmaW5lIEZF X01TVkRYX1dEVElNRVJfRkVfV0RUX0NPVU5URVJfU0hJRlQJCQkoMCkKKworI2RlZmluZSBGRV9N U1ZEWF9XRFRfQ09NUEFSRU1BVENIX09GRlNFVAkJKDB4MDY2YykKKy8qIE1TVkRYX0NPUkUsIENS X0ZFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0gsIEZFX1dEVF9DTTEgKi8KKyNkZWZpbmUgRkVfTVNW RFhfV0RUX0NPTVBBUkVNQVRDSF9GRV9XRFRfQ00xX01BU0sJCSgweEZGRkYwMDAwKQorI2RlZmlu ZSBGRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENIX0ZFX1dEVF9DTTFfTFNCTUFTSwkJKDB4MDAwMEZG RkYpCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfRkVfV0RUX0NNMV9TSElGVAkJ KDE2KQorLyogTVNWRFhfQ09SRSwgQ1JfRkVfTVNWRFhfV0RUX0NPTVBBUkVNQVRDSCwgRkVfV0RU X0NNMCAqLworI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENIX0ZFX1dEVF9DTTBfTUFT SwkJKDB4MDAwMEZGRkYpCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfRkVfV0RU X0NNMF9MU0JNQVNLCQkoMHgwMDAwRkZGRikKKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTVBBUkVN QVRDSF9GRV9XRFRfQ00wX1NISUZUCQkoMCkKKworI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJP TF9PRkZTRVQJCQkoMHgwNjcwKQorLyogTVNWRFhfQ09SRSwgQ1JfQkVfTVNWRFhfV0RUX0NPTlRS T0wsIEJFX1dEVF9DTlRfQ1RSTCAqLworI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJPTF9CRV9X RFRfQ05UX0NUUkxfTUFTSwkJKDB4MDAxRTAwMDApCisjZGVmaW5lIEJFX01TVkRYX1dEVF9DT05U Uk9MX0JFX1dEVF9DTlRfQ1RSTF9MU0JNQVNLCQkoMHgwMDAwMDAwRikKKyNkZWZpbmUgQkVfTVNW RFhfV0RUX0NPTlRST0xfQkVfV0RUX0NOVF9DVFJMX1NISUZUCQkoMTcpCisvKiBNU1ZEWF9DT1JF LCBDUl9CRV9NU1ZEWF9XRFRfQ09OVFJPTCwgQkVfV0RUX0VOQUJMRSAqLworI2RlZmluZSBCRV9N U1ZEWF9XRFRfQ09OVFJPTF9CRV9XRFRfRU5BQkxFX01BU0sJCSgweDAwMDEwMDAwKQorI2RlZmlu ZSBCRV9NU1ZEWF9XRFRfQ09OVFJPTF9CRV9XRFRfRU5BQkxFX0xTQk1BU0sJCSgweDAwMDAwMDAx KQorI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJPTF9CRV9XRFRfRU5BQkxFX1NISUZUCQkoMTYp CisvKiBNU1ZEWF9DT1JFLCBDUl9CRV9NU1ZEWF9XRFRfQ09OVFJPTCwgQkVfV0RUX0FDVElPTjAg Ki8KKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfQkVfV0RUX0FDVElPTjBfTUFTSwkJKDB4 MDAwMDAxMDApCisjZGVmaW5lIEJFX01TVkRYX1dEVF9DT05UUk9MX0JFX1dEVF9BQ1RJT04wX0xT Qk1BU0sJCSgweDAwMDAwMDAxKQorI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJPTF9CRV9XRFRf QUNUSU9OMF9TSElGVAkJKDgpCisvKiBNU1ZEWF9DT1JFLCBDUl9CRV9NU1ZEWF9XRFRfQ09OVFJP TCwgQkVfV0RUX0NMRUFSX1NFTEVDVCAqLworI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJPTF9C RV9XRFRfQ0xFQVJfU0VMRUNUX01BU0sJCSgweDAwMDAwMEYwKQorI2RlZmluZSBCRV9NU1ZEWF9X RFRfQ09OVFJPTF9CRV9XRFRfQ0xFQVJfU0VMRUNUX0xTQk1BU0sJKDB4MDAwMDAwMEYpCisjZGVm aW5lIEJFX01TVkRYX1dEVF9DT05UUk9MX0JFX1dEVF9DTEVBUl9TRUxFQ1RfU0hJRlQJCSg0KQor LyogTVNWRFhfQ09SRSwgQ1JfQkVfTVNWRFhfV0RUX0NPTlRST0wsIEJFX1dEVF9DTEtESVZfU0VM RUNUICovCisjZGVmaW5lIEJFX01TVkRYX1dEVF9DT05UUk9MX0JFX1dEVF9DTEtESVZfU0VMRUNU X01BU0sJCSgweDAwMDAwMDA3KQorI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJPTF9CRV9XRFRf Q0xLRElWX1NFTEVDVF9MU0JNQVNLCSgweDAwMDAwMDA3KQorI2RlZmluZSBCRV9NU1ZEWF9XRFRf Q09OVFJPTF9CRV9XRFRfQ0xLRElWX1NFTEVDVF9TSElGVAkoMCkKKworI2RlZmluZSBCRV9NU1ZE WF9XRFRJTUVSX09GRlNFVAkJCQkoMHgwNjc0KQorLyogTVNWRFhfQ09SRSwgQ1JfQkVfTVNWRFhf V0RUSU1FUiwgQkVfV0RUX0NPVU5URVIgKi8KKyNkZWZpbmUgQkVfTVNWRFhfV0RUSU1FUl9CRV9X RFRfQ09VTlRFUl9NQVNLCQkJKDB4MDAwMEZGRkYpCisjZGVmaW5lIEJFX01TVkRYX1dEVElNRVJf QkVfV0RUX0NPVU5URVJfTFNCTUFTSwkJKDB4MDAwMEZGRkYpCisjZGVmaW5lIEJFX01TVkRYX1dE VElNRVJfQkVfV0RUX0NPVU5URVJfU0hJRlQJCQkoMCkKKworI2RlZmluZSBCRV9NU1ZEWF9XRFRf Q09NUEFSRU1BVENIX09GRlNFVAkJKDB4Njc4KQorLyogTVNWRFhfQ09SRSwgQ1JfQkVfTVNWRFhf V0RUX0NPTVBBUkVNQVRDSCwgQkVfV0RUX0NNMCAqLworI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09N UEFSRU1BVENIX0JFX1dEVF9DTTBfTUFTSwkJKDB4MDAwMEZGRkYpCisjZGVmaW5lIEJFX01TVkRY X1dEVF9DT01QQVJFTUFUQ0hfQkVfV0RUX0NNMF9MU0JNQVNLCQkoMHgwMDAwRkZGRikKKyNkZWZp bmUgQkVfTVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9CRV9XRFRfQ00wX1NISUZUCQkoMCkKKworLyp3 YXRjaCBkb2cgZW5kKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiBNU1ZEWCBDb3JlIFJl Z2lzdGVycyBlbmQgKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioq KioqKiogVkVDIFJlZ2lzdGVyczogMHgwODAwIC0gMHgwRkZGICgyMDQ4QikgKioqKioqKioqKioq KioqKioqLworI2RlZmluZSBWRUNfU0hJRlRSRUdfQ09OVFJPTF9PRkZTRVQJCQkoMHgwODE4KQor I2RlZmluZSBWRUNfU0hJRlRSRUdfQ09OVFJPTF9TUl9NQVNURVJfU0VMRUNUX01BU0sJCSgweDAw MDAwMzAwKQorI2RlZmluZSBWRUNfU0hJRlRSRUdfQ09OVFJPTF9TUl9NQVNURVJfU0VMRUNUX1NI SUZUCQkoOCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiBWRUMgUmVnaXN0ZXJzIGVuZCAq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioq IFJFTkRFQyBSZWdpc3RlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIE1T VkRYX1JFTkRFQ19DT05UUk9MMF9PRkZTRVQJCQkoMHgwODY4KQorI2RlZmluZSBNU1ZEWF9SRU5E RUNfQ09OVFJPTDBfUkVOREVDX0lOSVRJQUxJU0VfTUFTSwkJKDB4MDAwMDAwMDEpCisjZGVmaW5l IE1TVkRYX1JFTkRFQ19DT05UUk9MMF9SRU5ERUNfSU5JVElBTElTRV9TSElGVAkJKDApCisKKyNk ZWZpbmUgTVNWRFhfUkVOREVDX0NPTlRST0wxX09GRlNFVAkJCSgweDA4NkMpCisjZGVmaW5lIE1T VkRYX1JFTkRFQ19DT05UUk9MMV9SRU5ERUNfREVDT0RFX1NUQVJUX1NJWkVfTUFTSwkoMHgwMDAw MDBGRikKKyNkZWZpbmUgTVNWRFhfUkVOREVDX0NPTlRST0wxX1JFTkRFQ19ERUNPREVfU1RBUlRf U0laRV9TSElGVAkoMCkKKyNkZWZpbmUgTVNWRFhfUkVOREVDX0NPTlRST0wxX1JFTkRFQ19CVVJT VF9TSVpFX1dfTUFTSwkJKDB4MDAwQzAwMDApCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19DT05UUk9M MV9SRU5ERUNfQlVSU1RfU0laRV9XX1NISUZUCQkoMTgpCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19D T05UUk9MMV9SRU5ERUNfQlVSU1RfU0laRV9SX01BU0sJCSgweDAwMDMwMDAwKQorI2RlZmluZSBN U1ZEWF9SRU5ERUNfQ09OVFJPTDFfUkVOREVDX0JVUlNUX1NJWkVfUl9TSElGVAkJKDE2KQorI2Rl ZmluZSBNU1ZEWF9SRU5ERUNfQ09OVFJPTDFfUkVOREVDX0VYVEVSTkFMX01FTU9SWV9NQVNLCSgw eDAxMDAwMDAwKQorI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVFJPTDFfUkVOREVDX0VYVEVSTkFM X01FTU9SWV9TSElGVAkoMjQpCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19DT05UUk9MMV9SRU5ERUNf REVDX0RJU0FCTEVfTUFTSwkJKDB4MDgwMDAwMDApCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19DT05U Uk9MMV9SRU5ERUNfREVDX0RJU0FCTEVfU0hJRlQJCSgyNykKKworI2RlZmluZSBNU1ZEWF9SRU5E RUNfQlVGRkVSX1NJWkVfT0ZGU0VUCQkJKDB4MDg3MCkKKyNkZWZpbmUgTVNWRFhfUkVOREVDX0JV RkZFUl9TSVpFX1JFTkRFQ19CVUZGRVJfU0laRTBfTUFTSwkoMHgwMDAwRkZGRikKKyNkZWZpbmUg TVNWRFhfUkVOREVDX0JVRkZFUl9TSVpFX1JFTkRFQ19CVUZGRVJfU0laRTBfU0hJRlQJKDApCisj ZGVmaW5lIE1TVkRYX1JFTkRFQ19CVUZGRVJfU0laRV9SRU5ERUNfQlVGRkVSX1NJWkUxX01BU0sJ KDB4RkZGRjAwMDApCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19CVUZGRVJfU0laRV9SRU5ERUNfQlVG RkVSX1NJWkUxX1NISUZUCSgxNikKKworI2RlZmluZSBNU1ZEWF9SRU5ERUNfQkFTRV9BRERSMF9P RkZTRVQJCQkoMHgwODc0KQorCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19CQVNFX0FERFIxX09GRlNF VAkJCSgweDA4NzgpCisKKyNkZWZpbmUgTVNWRFhfUkVOREVDX1JFQURfREFUQV9PRkZTRVQJCQko MHgwODk4KQorCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19DT05URVhUMF9PRkZTRVQJCQkoMHgwOTUw KQorCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19DT05URVhUMV9PRkZTRVQJCQkoMHgwOTU0KQorCisj ZGVmaW5lIE1TVkRYX1JFTkRFQ19DT05URVhUMl9PRkZTRVQJCQkoMHgwOTU4KQorCisjZGVmaW5l IE1TVkRYX1JFTkRFQ19DT05URVhUM19PRkZTRVQJCQkoMHgwOTVDKQorCisjZGVmaW5lIE1TVkRY X1JFTkRFQ19DT05URVhUNF9PRkZTRVQJCQkoMHgwOTYwKQorCisjZGVmaW5lIE1TVkRYX1JFTkRF Q19DT05URVhUNV9PRkZTRVQJCQkoMHgwOTY0KQorLyoqKioqKioqKioqKioqKioqKioqKioqKioq KiBSRU5ERUMgcmVnaXN0ZXJzIGVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisv KioqKioqKioqKioqKioqKioqKiogQ01EIFJlZ2lzdGVyOiAweDEwMDAgLSAweDFGRkYgKDRrQikg KioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIE1TVkRYX0NNRFNfRU5EX1NMSUNFX1BJQ1RV UkVfT0ZGU0VUCQkoMHgxNDA0KQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDTUQg UmVnaXN0ZXIgZW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioq KioqKioqKioqKiogVkVDIExvY2FsIFJBTTogMHgyMDAwIC0gMHgyRkZGICg0a0IpICoqKioqKioq KioqKioqKioqKiovCisvKiB2ZWMgbG9jYWwgTUVNIHNhdmUvcmVzdG9yZSAqLworI2RlZmluZSBW RUNfTE9DQUxfTUVNX0JZVEVfU0laRSAoNCAqIDEwMjQpCisjZGVmaW5lIFZFQ19MT0NBTF9NRU1f T0ZGU0VUIDB4MjAwMAorCisjZGVmaW5lIE1TVkRYX0VYVF9GV19FUlJPUl9TVEFURSAJCSgweDJD QzQpCisvKiBEZWNvZGUgb3BlcmF0aW9ucyBpbiBwcm9ncmVzcyBvciBub3QgY29tcGxldGUgKi8K KyNkZWZpbmUgTVNWRFhfRldfU1RBVFVTX0lOX1BST0dSRVNTCQkJMHgwMDAwMDAwMAorLyogdGhl cmUncyBubyB3b3JrIHVuZGVyd2F5IG9uIHRoZSBoYXJkd2FyZSwgaWRsZSwgY2FuIGJlIHBvd2Vy ZWQgZG93biAqLworI2RlZmluZSBNU1ZEWF9GV19TVEFUVVNfSFdfSURMRQkJCQkweDAwMDAwMDAx CisvKiBQYW5pYywgd2FpdGluZyB0byBiZSByZWxvYWRlZCAqLworI2RlZmluZSBNU1ZEWF9GV19T VEFUVVNfSFdfUEFOSUMJCQkweDAwMDAwMDAzCisKKy8qCisgKiBUaGlzIGRlZmluZXMgdGhlIE1T VkRYIGNvbW11bmljYXRpb24gYnVmZmVyCisgKi8KKyNkZWZpbmUgTVNWRFhfQ09NTVNfU0lHTkFU VVJFX1ZBTFVFCSgweEE1QTVBNUE1KQkvKiE8IFNpZ25hdHVyZSB2YWx1ZSAqLworLyohPCBIb3N0 IGJ1ZmZlciBzaXplIChpbiAzMi1iaXQgd29yZHMpICovCisjZGVmaW5lIE5VTV9XT1JEU19IT1NU X0JVRgkJKDEwMCkKKy8qITwgTVRYIGJ1ZmZlciBzaXplIChpbiAzMi1iaXQgd29yZHMpICovCisj ZGVmaW5lIE5VTV9XT1JEU19NVFhfQlVGCQkoMTAwKQorCisjZGVmaW5lIE1TVkRYX0NPTU1TX0FS RUFfQUREUgkJCSgweDAyZmUwKQorI2RlZmluZSBNU1ZEWF9DT01NU19DT1JFX1dURAkJCShNU1ZE WF9DT01NU19BUkVBX0FERFIgLSAweDA4KQorI2RlZmluZSBNU1ZEWF9DT01NU19FUlJPUl9UUklH CQkJKE1TVkRYX0NPTU1TX0FSRUFfQUREUiAtIDB4MDgpCisjZGVmaW5lIE1TVkRYX0NPTU1TX0ZJ Uk1XQVJFX0lECQkJKE1TVkRYX0NPTU1TX0FSRUFfQUREUiAtIDB4MEMpCisjZGVmaW5lIE1TVkRY X0NPTU1TX09GRlNFVF9GTEFHUwkJKE1TVkRYX0NPTU1TX0FSRUFfQUREUiArIDB4MTgpCisjZGVm aW5lCU1TVkRYX0NPTU1TX01TR19DT1VOVEVSCQkJKE1TVkRYX0NPTU1TX0FSRUFfQUREUiAtIDB4 MDQpCisjZGVmaW5lIE1TVkRYX0NPTU1TX0ZXX1NUQVRVUwkJCShNU1ZEWF9DT01NU19BUkVBX0FE RFIgLSAweDEwKQorI2RlZmluZQlNU1ZEWF9DT01NU19TSUdOQVRVUkUJCQkoTVNWRFhfQ09NTVNf QVJFQV9BRERSICsgMHgwMCkKKyNkZWZpbmUJTVNWRFhfQ09NTVNfVE9fSE9TVF9CVUZfU0laRQkJ KE1TVkRYX0NPTU1TX0FSRUFfQUREUiArIDB4MDQpCisjZGVmaW5lIE1TVkRYX0NPTU1TX1RPX0hP U1RfUkRfSU5ERVgJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgKyAweDA4KQorI2RlZmluZSBNU1ZE WF9DT01NU19UT19IT1NUX1dSVF9JTkRFWAkJKE1TVkRYX0NPTU1TX0FSRUFfQUREUiArIDB4MEMp CisjZGVmaW5lIE1TVkRYX0NPTU1TX1RPX01UWF9CVUZfU0laRQkJKE1TVkRYX0NPTU1TX0FSRUFf QUREUiArIDB4MTApCisjZGVmaW5lIE1TVkRYX0NPTU1TX1RPX01UWF9SRF9JTkRFWAkJKE1TVkRY X0NPTU1TX0FSRUFfQUREUiArIDB4MTQpCisjZGVmaW5lIE1TVkRYX0NPTU1TX1RPX01UWF9DQl9S RF9JTkRFWAkJKE1TVkRYX0NPTU1TX0FSRUFfQUREUiArIDB4MTgpCisjZGVmaW5lIE1TVkRYX0NP TU1TX1RPX01UWF9XUlRfSU5ERVgJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgKyAweDFDKQorI2Rl ZmluZSBNU1ZEWF9DT01NU19UT19IT1NUX0JVRgkJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgKyAw eDIwKQorI2RlZmluZSBNU1ZEWF9DT01NU19UT19NVFhfQlVGCVwKKwkJCShNU1ZEWF9DT01NU19U T19IT1NUX0JVRiArIChOVU1fV09SRFNfSE9TVF9CVUYgPDwgMikpCisKKy8qCisgKiBGVyBGTEFH czogaXQgc2hhbGwgYmUgd3JpdHRlbiBieSB0aGUgaG9zdCBwcmlvciB0byBzdGFydGluZyB0aGUg RmlybXdhcmUuCisgKi8KKy8qIERpc2FibGUgRmlybXdhcmUgYmFzZWQgV2F0Y2ggZG9nIHRpbWVy cy4gKi8KKyNkZWZpbmUgRFNJQUJMRV9GV19XRFQJCQkJMHgwMDA4CisJLyogQWJvcnQgSW1tZWRp YXRlbHkgb24gZXJyb3JzICovCisjZGVmaW5lIEFCT1JUX09OX0VSUk9SU19JTU1FRElBVEUJCTB4 MDAxMAorCS8qIEFib3J0cyBmYXVsdGVkIHNsaWNlcyBhcyBzb29uIGFzIHBvc3NpYmxlLiBBbGxv d3Mgbm9uIGZhdWx0ZWQgc2xpY2VzCisJICogdG8gcmVhY2ggYmFja2VuZCBidXQgZmF1bHRlZCBz bGljZSB3aWxsIG5vdCBiZSBhbGxvd2VkIHRvIHN0YXJ0LiAqLworI2RlZmluZSBBQk9SVF9GQVVM VEVEX1NMSUNFX0lNTUVESUFURQkJMHgwMDIwCisJLyogRmx1c2ggZmF1bHRlZCBzbGljZXMgLSBE ZWJ1ZyBvcHRpb24gKi8KKyNkZWZpbmUgRkxVU0hfRkFVTFRFRF9TTElDRVMJCQkweDAwODAKKwkv KiBEb24ndCBpbnRlcnJ1cHQgaG9zdCB3aGVuIHRvIGhvc3QgYnVmZmVyIGJlY29tZXMgZnVsbC4K KwkgKiBTdGFsbCB1bnRpbCBzcGFjZSBpcyBmcmVlZCB1cCBieSBob3N0IG9uIGl0J3Mgb3duLiAq LworI2RlZmluZSBOT1RfSU5URVJSVVBUX1dIRU5fSE9TVF9JU19GVUxMCQkweDAyMDAKKwkvKiBD b250aWd1aXR5IHdhcm5pbmcgbXNnIHdpbGwgYmUgc2VuZCB0byBob3N0IGZvciBzdHJlYW0gd2l0 aAorICAgICAgICAgKiBGV19FUlJPUl9ERVRFQ1RJT05fQU5EX1JFQ09WRVJZIGZsYWcgc2V0IGlm IG5vbi1jb250aWd1b3VzCisJICogbWFjcm9ibG9ja3MgYXJlIGRldGVjdGVkLiAqLworI2RlZmlu ZSBOT1RfRU5BQkxFX09OX0hPU1RfQ09OQ0VBTE1FTlQJCTB4MDQwMAorCS8qIFJldHVybiBWREVC IFNpZ25hdHVyZSBWYWx1ZSBpbiBDb21wbGV0aW9uIG1lc3NhZ2UuCisJICogVGhpcyByZXF1aXJl cyBhIFZERUIgZGF0YSBmbHVzaCBldmVyeSBzbGljZSBmb3IgY29uc3RhbnQgcmVzdWx0cy4qLwor I2RlZmluZSBSRVRVUk5fVkRFQl9EQVRBX0lOX0NPTVBMRVRJT04JCTB4MDgwMAorCS8qIERpc2Fi bGUgQXV0byBDbG9jayBHYXRpbmcuICovCisjZGVmaW5lIERTSUFCTEVfQXV0b19DTE9DS19HQVRJ TkcJCTB4MTAwMAorCS8qIERpc2FibGUgSWRsZSBHUElPIHNpZ25hbC4gKi8KKyNkZWZpbmUgRFNJ QUJMRV9JRExFX0dQSU9fU0lHCQkJMHgyMDAwCisJLyogRW5hYmxlIFNldHVwLCBGRSBhbmQgQkUg VGltZSBzdGFtcHMgaW4gY29tcGxldGlvbiBtZXNzYWdlLgorCSAqIFVzZWQgYnkgSU1HIG9ubHkg Zm9yIGZpcm13YXJlIHByb2ZpbGluZy4gKi8KKyNkZWZpbmUgRU5BQkxFX1RJTUVTVEFNUFNfSU5f Q09NUExFVEVfTVNHCTB4NDAwMAorCS8qIERpc2FibGUgb2ZmLWhvc3QgMm5kIHBhc3MgRGVibG9j a2luZyBpbiBGaXJtd2FyZS4gICovCisjZGVmaW5lIERTSUFCTEVfT0ZGSE9TVF9TRUNPTkRfREVC TE9DSwkJMHgyMDAwMAorCS8qIFN1bSBhZGRyZXNzIHNpZ25hdHVyZSB0byBkYXRhIHNpZ25hdHVy ZQorCSAqIHdoZW4gcmV0dXJuaW5nIFZERUIgc2lnbmF0dXJlIHZhbHVlcy4gKi8KKyNkZWZpbmUg U1VNX0FERF9TSUdfVE9fREFUQV9TSUdOQVRVUkUJCTB4ODAwMDAKKworLyoKKyNkZWZpbmUgTVNW RFhfQ09NTVNfQVJFQV9FTkQJXAorICAoTVNWRFhfQ09NTVNfVE9fTVRYX0JVRiArIChOVU1fV09S RFNfSE9TVF9CVUYgPDwgMikpCisqLworI2RlZmluZSBNU1ZEWF9DT01NU19BUkVBX0VORCAweDAz MDAwCisKKyNpZiAoTVNWRFhfQ09NTVNfQVJFQV9FTkQgIT0gMHgwMzAwMCkKKyNlcnJvcgorI2Vu ZGlmCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVkVDIExvY2FsIFJBTSBlbmQgKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNlbmRpZgotLSAKMS45LjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==