From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH v2 3/3] drm/v3d: Introduce a new DRM driver for Broadcom V3D V3.x+ Date: Mon, 23 Apr 2018 17:46:10 -0700 Message-ID: <20180424004610.4637-4-eric@anholt.net> References: <20180424004610.4637-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180424004610.4637-1-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, Rob Herring , Mark Rutland , devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org List-Id: devicetree@vger.kernel.org VGhpcyBkcml2ZXIgd2lsbCBiZSB1c2VkIHRvIHN1cHBvcnQgTWVzYSBvbiB0aGUgQnJvYWRjb20g NzI2OCBhbmQgNzI3OApwbGF0Zm9ybXMuCgpWM0QgMy4zIGludHJvZHVjZXMgYW4gTU1VLCB3aGlj aCBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCBDTUEgb3IgdmM0J3MKY29tcGxpY2F0ZWQgQ0wvc2hh ZGVyIHZhbGlkYXRpb24gc2NoZW1lLiAgVGhpcyBtYXNzaXZlbHkgY2hhbmdlcyB0aGUKR0VNIGJl aGF2aW9yLCBzbyBJJ3ZlIGZvcmtlZCBvZmYgdG8gYSBuZXcgZHJpdmVyLgoKdjI6IE1hcmsgU1VC TUlUX0NMIGFzIG5lZWRpbmcgRFJNX0FVVEguICBjb2NjaW5lbGxlIGZpeGVzIGZyb20ga2J1aWxk CiAgICB0ZXN0IHJvYm90LiBEcm9wIHBlcnNvbmFsIGdpdCBsaW5rIGZyb20gTUFJTlRBSU5FUlMu ICBEb24ndAogICAgZG91YmxlLW1hcCBkbWEtYnVmIGltcG9ydGVkIEJPcy4gIEFkZCBrZXJuZWxk b2MgYWJvdXQgbmVlZGluZyBNTVUKICAgIGV2aWN0aW9uLiAgRHJvcCBwcmltZSB2bWFwL3VubWFw IHN0dWJzLiAgRGVsYXkgbW1hcCBvZmZzZXQgc2V0dXAKICAgIHRvIG1tYXAgdGltZS4gIFVzZSBk cm1fZGV2X2luaXQgaW5zdGVhZCBvZiBfYWxsb2MuICBVc2UKICAgIGt0aW1lX2dldCgpIGZvciB3 YWl0X2JvIHRpbWVvdXRzLiAgRHJvcCBkcm1fY2FuX3NsZWVwKCkgdXNhZ2UsCiAgICBzaW5jZSB3 ZSBkb24ndCBtb2Rlc2V0LiAgU3dpdGNoIHBhZ2UgdGFibGVzIGJhY2sgdG8gV0MgKGRlYnVnCiAg ICBjaGFuZ2UgdG8gY29oZXJlbnQgaGFkIHNsaXBwZWQgaW4pLiAgU3dpdGNoCiAgICBkcm1fZ2Vt X29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgpIHRvCiAgICBkcm1fZ2VtX29iamVjdF9wdXRf dW5sb2NrZWQoKS4gIFNpbXBsaWZ5IG92ZXJmbG93IG1lbSBoYW5kbGluZyBieQogICAgbm90IHNo YXJpbmcgb3ZlcmZsb3cgbWVtIGJldHdlZW4gam9icy4KClNpZ25lZC1vZmYtYnk6IEVyaWMgQW5o b2x0IDxlcmljQGFuaG9sdC5uZXQ+CkFja2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0 dGVyQGZmd2xsLmNoPgotLS0KIERvY3VtZW50YXRpb24vZ3B1L2RyaXZlcnMucnN0ICAgICAgICAg IHwgICAxICsKIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICsK IGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS92 M2QvS2NvbmZpZyAgICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS92M2QvTWFrZWZp bGUgICAgICAgICAgIHwgIDE4ICsKIGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2JvLmMgICAgICAg ICAgIHwgMzc5ICsrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kZWJ1Z2Zz LmMgICAgICB8IDE5MSArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kcnYuYyAgICAg ICAgICB8IDM3MSArKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2Lmgg ICAgICAgICAgfCAyOTQgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2ZlbmNl LmMgICAgICAgIHwgIDU4ICsrKwogZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZ2VtLmMgICAgICAg ICAgfCA2NjMgKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3YzZC92 M2RfaXJxLmMgICAgICAgICAgfCAyMDYgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92M2QvdjNk X21tdS5jICAgICAgICAgIHwgMTIyICsrKysrCiBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9yZWdz LmggICAgICAgICB8IDI5NSArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc2No ZWQuYyAgICAgICAgfCAyMjggKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF90cmFj ZS5oICAgICAgICB8ICA4MiArKysKIGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3RyYWNlX3BvaW50 cy5jIHwgICA5ICsKIGluY2x1ZGUvdWFwaS9kcm0vdjNkX2RybS5oICAgICAgICAgICAgIHwgMTkx ICsrKysrKysKIDE5IGZpbGVzIGNoYW5nZWQsIDMxMjggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92M2QvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS92M2QvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vdjNkL3YzZF9iby5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3YzZC92M2RfZGVidWdmcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Yz ZC92M2RfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9k cnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2ZlbmNlLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9nZW0uYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2lycS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfbW11LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9yZWdzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vdjNkL3YzZF9zY2hlZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3YzZC92M2RfdHJhY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92 M2QvdjNkX3RyYWNlX3BvaW50cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2Ry bS92M2RfZHJtLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcml2ZXJzLnJzdCBi L0RvY3VtZW50YXRpb24vZ3B1L2RyaXZlcnMucnN0CmluZGV4IGQzYWI2YWJhZTgzOC4uZjk4MjU1 OGZjMjVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcml2ZXJzLnJzdAorKysgYi9E b2N1bWVudGF0aW9uL2dwdS9kcml2ZXJzLnJzdApAQCAtMTAsNiArMTAsNyBAQCBHUFUgRHJpdmVy IERvY3VtZW50YXRpb24KICAgIHRlZ3JhCiAgICB0aW55ZHJtCiAgICB0dmUyMDAKKyAgIHYzZAog ICAgdmM0CiAgICBicmlkZ2UvZHctaGRtaQogICAgeGVuLWZyb250CmRpZmYgLS1naXQgYS9NQUlO VEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGJjYTNjMzJmYjE0MS4uNDZjNDljMDJkODdiIDEw MDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNDc5NSw2ICs0Nzk1 LDE0IEBAIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtLwogRjoJRG9j dW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdGkvCiAKK0RSTSBEUklWRVJT IEZPUiBWM0QKK006CUVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CitTOglTdXBwb3J0ZWQK K0Y6CWRyaXZlcnMvZ3B1L2RybS92M2QvCitGOglpbmNsdWRlL3VhcGkvZHJtL3YzZF9kcm0uaAor RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvYnJjbSxiY20tdjNk LnR4dAorVDoJZ2l0IGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2RybS9kcm0tbWlzYwor CiBEUk0gRFJJVkVSUyBGT1IgVkM0CiBNOglFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0Pgog VDoJZ2l0IGdpdDovL2dpdGh1Yi5jb20vYW5ob2x0L2xpbnV4CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDc1NzgyNWFj NjBkZi4uMWM3M2E0NTVmZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwor KysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjY3LDYgKzI2Nyw4IEBAIHNvdXJjZSAi ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2dw dS9kcm0vaW14L0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3YzZC9LY29uZmln IgorCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyIKIAogc291cmNlICJkcml2 ZXJzL2dwdS9kcm0vZXRuYXZpdi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDlkNjY2NTdlYTExNy4u N2E0MDFlZGQ4NzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIv ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC02MSw2ICs2MSw3IEBAIG9iai0kKENPTkZJR19E Uk1fTUdBKQkrPSBtZ2EvCiBvYmotJChDT05GSUdfRFJNX0k4MTApCSs9IGk4MTAvCiBvYmotJChD T05GSUdfRFJNX0k5MTUpCSs9IGk5MTUvCiBvYmotJChDT05GSUdfRFJNX01HQUcyMDApICs9IG1n YWcyMDAvCitvYmotJChDT05GSUdfRFJNX1YzRCkgICs9IHYzZC8KIG9iai0kKENPTkZJR19EUk1f VkM0KSAgKz0gdmM0Lwogb2JqLSQoQ09ORklHX0RSTV9DSVJSVVNfUUVNVSkgKz0gY2lycnVzLwog b2JqLSQoQ09ORklHX0RSTV9TSVMpICAgKz0gc2lzLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3YzZC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3YzZC9LY29uZmlnCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTBjMDI1OTM1NWJkCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorY29uZmln IERSTV9WM0QKKwl0cmlzdGF0ZSAiQnJvYWRjb20gVjNEIDMueCBhbmQgbmV3ZXIiCisJZGVwZW5k cyBvbiBBUkNIX0JDTSB8fCBBUkNIX0JDTVNUQiB8fCBDT01QSUxFX1RFU1QKKwlkZXBlbmRzIG9u IERSTQorCWRlcGVuZHMgb24gQ09NTU9OX0NMSworCXNlbGVjdCBEUk1fU0NIRUQKKwloZWxwCisJ ICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBoYXMgYSBCcm9h ZGNvbQorCSAgVjNEIDMueCBvciBuZXdlciBHUFUsIHN1Y2ggYXMgQkNNNzI2OC4KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL01h a2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzQ0NDZlMWRl NjRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC9NYWtlZmlsZQpAQCAt MCwwICsxLDE4IEBACisjIFBsZWFzZSBrZWVwIHRoZXNlIGJ1aWxkIGxpc3RzIHNvcnRlZCEKKwor IyBjb3JlIGRyaXZlciBjb2RlCit2M2QteSA6PSBcCisJdjNkX2JvLm8gXAorCXYzZF9kcnYubyBc CisJdjNkX2ZlbmNlLm8gXAorCXYzZF9nZW0ubyBcCisJdjNkX2lycS5vIFwKKwl2M2RfbW11Lm8g XAorCXYzZF90cmFjZV9wb2ludHMubyBcCisJdjNkX3NjaGVkLm8KKwordjNkLSQoQ09ORklHX0RF QlVHX0ZTKSArPSB2M2RfZGVidWdmcy5vCisKK29iai0kKENPTkZJR19EUk1fVjNEKSAgKz0gdjNk Lm8KKworQ0ZMQUdTX3YzZF90cmFjZV9wb2ludHMubyA6PSAtSSQoc3JjKQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Jv LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yYmU0ZThiNzE2MDQK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9iby5jCkBAIC0wLDAg KzEsMzc5IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qIENvcHly aWdodCAoQykgMjAxNS0yMDE4IEJyb2FkY29tICovCisKKy8qKgorICogRE9DOiBWM0QgR0VNIEJP IG1hbmFnZW1lbnQgc3VwcG9ydAorICoKKyAqIENvbXBhcmVkIHRvIFZDNCAoVjNEIDIueCksIFYz RCAzLjMgaW50cm9kdWNlcyBhbiBNTVUgYmV0d2VlbiB0aGUKKyAqIEdQVSBhbmQgdGhlIGJ1cywg YWxsb3dpbmcgdXMgdG8gdXNlIHNobWVtIG9iamVjdHMgZm9yIG91ciBzdG9yYWdlCisgKiBpbnN0 ZWFkIG9mIENNQS4KKyAqCisgKiBQaHlzaWNhbGx5IGNvbnRpZ3VvdXMgb2JqZWN0cyBtYXkgc3Rp bGwgYmUgaW1wb3J0ZWQgdG8gVjNELCBidXQgdGhlCisgKiBkcml2ZXIgZG9lc24ndCBhbGxvY2F0 ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgb2JqZWN0cyBvbiBpdHMgb3duLgorICogRGlzcGxheSBl bmdpbmVzIHJlcXVpcmluZyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYWxsb2NhdGlvbnMgc2hvdWxk CisgKiBsb29rIGludG8gTWVzYSdzICJyZW5kZXJvbmx5IiBzdXBwb3J0IChhcyB1c2VkIGJ5IHRo ZSBNZXNhIHBsMTExCisgKiBkcml2ZXIpIGZvciBhbiBleGFtcGxlIG9mIGhvdyB0byBpbnRlZ3Jh dGUgd2l0aCBWM0QuCisgKgorICogTG9uZyB0ZXJtLCB3ZSBzaG91bGQgc3VwcG9ydCBldmljdGlu ZyBwYWdlcyBmcm9tIHRoZSBNTVUgd2hlbiB1bmRlcgorICogbWVtb3J5IHByZXNzdXJlICh0aHVz IHRoZSB2M2RfYm9fZ2V0X3BhZ2VzKCkgcmVmY291bnRpbmcpLCBidXQKKyAqIHRoYXQncyBub3Qg YSBoaWdoIHByaW9yaXR5IHNpbmNlIG91ciBzeXN0ZW1zIHRlbmQgdG8gbm90IGhhdmUgc3dhcC4K KyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbl90 Lmg+CisKKyNpbmNsdWRlICJ2M2RfZHJ2LmgiCisjaW5jbHVkZSAidWFwaS9kcm0vdjNkX2RybS5o IgorCisvKiBQaW5zIHRoZSBzaG1lbSBwYWdlcywgZmlsbHMgaW4gdGhlIC5wYWdlcyBhbmQgLnNn dCBmaWVsZHMgb2YgdGhlIEJPLCBhbmQgbWFwcworICogaXQgZm9yIERNQS4KKyAqLworc3RhdGlj IGludAordjNkX2JvX2dldF9wYWdlcyhzdHJ1Y3QgdjNkX2JvICpibykKK3sKKwlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiA9ICZiby0+YmFzZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g b2JqLT5kZXY7CisJaW50IG5wYWdlcyA9IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOworCWludCBy ZXQgPSAwOworCisJbXV0ZXhfbG9jaygmYm8tPmxvY2spOworCWlmIChiby0+cGFnZXNfcmVmY291 bnQrKyAhPSAwKQorCQlnb3RvIHVubG9jazsKKworCWlmICghb2JqLT5pbXBvcnRfYXR0YWNoKSB7 CisJCWJvLT5wYWdlcyA9IGRybV9nZW1fZ2V0X3BhZ2VzKG9iaik7CisJCWlmIChJU19FUlIoYm8t PnBhZ2VzKSkgeworCQkJcmV0ID0gUFRSX0VSUihiby0+cGFnZXMpOworCQkJZ290byB1bmxvY2s7 CisJCX0KKworCQliby0+c2d0ID0gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKGJvLT5wYWdlcywgbnBh Z2VzKTsKKwkJaWYgKElTX0VSUihiby0+c2d0KSkgeworCQkJcmV0ID0gUFRSX0VSUihiby0+c2d0 KTsKKwkJCWdvdG8gcHV0X3BhZ2VzOworCQl9CisKKwkJLyogTWFwIHRoZSBwYWdlcyBmb3IgdXNl IGJ5IHRoZSBHUFUuICovCisJCWRtYV9tYXBfc2coZGV2LT5kZXYsIGJvLT5zZ3QtPnNnbCwKKwkJ CSAgIGJvLT5zZ3QtPm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7CisJfSBlbHNlIHsKKwkJYm8t PnBhZ2VzID0ga2NhbGxvYyhucGFnZXMsIHNpemVvZigqYm8tPnBhZ2VzKSwgR0ZQX0tFUk5FTCk7 CisJCWlmICghYm8tPnBhZ2VzKQorCQkJZ290byBwdXRfcGFnZXM7CisKKwkJZHJtX3ByaW1lX3Nn X3RvX3BhZ2VfYWRkcl9hcnJheXMoYm8tPnNndCwgYm8tPnBhZ2VzLAorCQkJCQkJIE5VTEwsIG5w YWdlcyk7CisKKwkJLyogTm90ZSB0aGF0IGRtYS1idWZzIGNvbWUgaW4gbWFwcGVkLiAqLworCX0K KworCW11dGV4X3VubG9jaygmYm8tPmxvY2spOworCisJcmV0dXJuIDA7CisKK3B1dF9wYWdlczoK Kwlkcm1fZ2VtX3B1dF9wYWdlcyhvYmosIGJvLT5wYWdlcywgdHJ1ZSwgdHJ1ZSk7CisJYm8tPnBh Z2VzID0gTlVMTDsKK3VubG9jazoKKwliby0+cGFnZXNfcmVmY291bnQtLTsKKwltdXRleF91bmxv Y2soJmJvLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAordjNkX2JvX3B1 dF9wYWdlcyhzdHJ1Y3QgdjNkX2JvICpibykKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiA9ICZiby0+YmFzZTsKKworCW11dGV4X2xvY2soJmJvLT5sb2NrKTsKKwlpZiAoLS1iby0+cGFn ZXNfcmVmY291bnQgPT0gMCkgeworCQlpZiAoIW9iai0+aW1wb3J0X2F0dGFjaCkgeworCQkJZG1h X3VubWFwX3NnKG9iai0+ZGV2LT5kZXYsIGJvLT5zZ3QtPnNnbCwKKwkJCQkgICAgIGJvLT5zZ3Qt Pm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7CisJCQlzZ19mcmVlX3RhYmxlKGJvLT5zZ3QpOwor CQkJa2ZyZWUoYm8tPnNndCk7CisJCQlkcm1fZ2VtX3B1dF9wYWdlcyhvYmosIGJvLT5wYWdlcywg dHJ1ZSwgdHJ1ZSk7CisJCX0gZWxzZSB7CisJCQlrZnJlZShiby0+cGFnZXMpOworCQl9CisJfQor CW11dGV4X3VubG9jaygmYm8tPmxvY2spOworfQorCitzdGF0aWMgc3RydWN0IHYzZF9ibyAqdjNk X2JvX2NyZWF0ZV9zdHJ1Y3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc2l6ZV90 IHVuYWxpZ25lZF9zaXplKQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRl dik7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IHYzZF9ibyAqYm87CisJ c2l6ZV90IHNpemUgPSByb3VuZHVwKHVuYWxpZ25lZF9zaXplLCBQQUdFX1NJWkUpOworCWludCBy ZXQ7CisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWJv ID0ga3phbGxvYyhzaXplb2YoKmJvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibykKKwkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7CisJb2JqID0gJmJvLT5iYXNlOworCisJSU5JVF9MSVNUX0hFQUQo JmJvLT52bWFzKTsKKwlJTklUX0xJU1RfSEVBRCgmYm8tPnVucmVmX2hlYWQpOworCW11dGV4X2lu aXQoJmJvLT5sb2NrKTsKKworCXJldCA9IGRybV9nZW1fb2JqZWN0X2luaXQoZGV2LCBvYmosIHNp emUpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9ibzsKKworCXNwaW5fbG9jaygmdjNkLT5tbV9s b2NrKTsKKwlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYygmdjNkLT5tbSwgJmJvLT5u b2RlLAorCQkJCQkgb2JqLT5zaXplID4+IFBBR0VfU0hJRlQsCisJCQkJCSBHTVBfR1JBTlVMQVJJ VFkgPj4gUEFHRV9TSElGVCwgMCwgMCk7CisJc3Bpbl91bmxvY2soJnYzZC0+bW1fbG9jayk7CisJ aWYgKHJldCkKKwkJZ290byBmcmVlX29iajsKKworCXJldHVybiBibzsKKworZnJlZV9vYmo6CisJ ZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOworZnJlZV9ibzoKKwlrZnJlZShibyk7CisJcmV0 dXJuIEVSUl9QVFIocmV0KTsKK30KKworc3RydWN0IHYzZF9ibyAqdjNkX2JvX2NyZWF0ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCSAgICAg c2l6ZV90IHVuYWxpZ25lZF9zaXplKQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2Rf ZGV2KGRldik7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IHYzZF9ibyAq Ym87CisJaW50IHJldDsKKworCWJvID0gdjNkX2JvX2NyZWF0ZV9zdHJ1Y3QoZGV2LCB1bmFsaWdu ZWRfc2l6ZSk7CisJaWYgKElTX0VSUihibykpCisJCXJldHVybiBibzsKKwlvYmogPSAmYm8tPmJh c2U7CisKKwliby0+cmVzdiA9ICZiby0+X3Jlc3Y7CisJcmVzZXJ2YXRpb25fb2JqZWN0X2luaXQo Ym8tPnJlc3YpOworCisJcmV0ID0gdjNkX2JvX2dldF9wYWdlcyhibyk7CisJaWYgKHJldCkKKwkJ Z290byBmcmVlX21tOworCisJdjNkX21tdV9pbnNlcnRfcHRlcyhibyk7CisKKwltdXRleF9sb2Nr KCZ2M2QtPmJvX2xvY2spOworCXYzZC0+Ym9fc3RhdHMubnVtX2FsbG9jYXRlZCsrOworCXYzZC0+ Ym9fc3RhdHMucGFnZXNfYWxsb2NhdGVkICs9IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOworCW11 dGV4X3VubG9jaygmdjNkLT5ib19sb2NrKTsKKworCXJldHVybiBibzsKKworZnJlZV9tbToKKwlz cGluX2xvY2soJnYzZC0+bW1fbG9jayk7CisJZHJtX21tX3JlbW92ZV9ub2RlKCZiby0+bm9kZSk7 CisJc3Bpbl91bmxvY2soJnYzZC0+bW1fbG9jayk7CisKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNl KG9iaik7CisJa2ZyZWUoYm8pOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKKy8qIENhbGxl ZCBEUk0gY29yZSBvbiB0aGUgbGFzdCB1c2Vyc3BhY2Uva2VybmVsIHVucmVmZXJlbmNlIG9mIHRo ZQorICogQk8uCisgKi8KK3ZvaWQgdjNkX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KG9iai0+ZGV2KTsK KwlzdHJ1Y3QgdjNkX2JvICpibyA9IHRvX3YzZF9ibyhvYmopOworCisJbXV0ZXhfbG9jaygmdjNk LT5ib19sb2NrKTsKKwl2M2QtPmJvX3N0YXRzLm51bV9hbGxvY2F0ZWQtLTsKKwl2M2QtPmJvX3N0 YXRzLnBhZ2VzX2FsbG9jYXRlZCAtPSBvYmotPnNpemUgPj4gUEFHRV9TSElGVDsKKwltdXRleF91 bmxvY2soJnYzZC0+Ym9fbG9jayk7CisKKwlyZXNlcnZhdGlvbl9vYmplY3RfZmluaSgmYm8tPl9y ZXN2KTsKKworCXYzZF9ib19wdXRfcGFnZXMoYm8pOworCisJaWYgKG9iai0+aW1wb3J0X2F0dGFj aCkKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgYm8tPnNndCk7CisKKwl2M2RfbW11X3Jl bW92ZV9wdGVzKGJvKTsKKwlzcGluX2xvY2soJnYzZC0+bW1fbG9jayk7CisJZHJtX21tX3JlbW92 ZV9ub2RlKCZiby0+bm9kZSk7CisJc3Bpbl91bmxvY2soJnYzZC0+bW1fbG9jayk7CisKKwltdXRl eF9kZXN0cm95KCZiby0+bG9jayk7CisKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisJ a2ZyZWUoYm8pOworfQorCitzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICp2M2RfcHJpbWVfcmVz X29iaihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgdjNkX2JvICpibyA9 IHRvX3YzZF9ibyhvYmopOworCisJcmV0dXJuIGJvLT5yZXN2OworfQorCitzdGF0aWMgdm9pZAor djNkX3NldF9tbWFwX3ZtYV9mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwl2 bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7CisJdm1hLT52bV9mbGFncyB8PSBWTV9NSVhFRE1B UDsKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2Vf cHJvdCh2bWEtPnZtX2ZsYWdzKSk7Cit9CisKK2ludCB2M2RfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9m YXVsdCAqdm1mKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLT52bWE7CisJ c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlzdHJ1 Y3QgdjNkX2JvICpibyA9IHRvX3YzZF9ibyhvYmopOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXBn b2ZmX3QgcGdvZmY7CisJaW50IHJldDsKKworCS8qIFdlIGRvbid0IHVzZSB2bWYtPnBnb2ZmIHNp bmNlIHRoYXQgaGFzIHRoZSBmYWtlIG9mZnNldDogKi8KKwlwZ29mZiA9ICh2bWYtPmFkZHJlc3Mg LSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCXBmbiA9IHBhZ2VfdG9fcGZuKGJvLT5w YWdlc1twZ29mZl0pOworCisJcmV0ID0gdm1faW5zZXJ0X21peGVkKHZtYSwgdm1mLT5hZGRyZXNz LCBfX3Bmbl90b19wZm5fdChwZm4sIFBGTl9ERVYpKTsKKworCXN3aXRjaCAocmV0KSB7CisJY2Fz ZSAtRUFHQUlOOgorCWNhc2UgMDoKKwljYXNlIC1FUkVTVEFSVFNZUzoKKwljYXNlIC1FSU5UUjoK KwljYXNlIC1FQlVTWToKKwkJLyoKKwkJICogRUJVU1kgaXMgb2s6IHRoaXMganVzdCBtZWFucyB0 aGF0IGFub3RoZXIgdGhyZWFkCisJCSAqIGFscmVhZHkgZGlkIHRoZSBqb2IuCisJCSAqLworCQly ZXR1cm4gVk1fRkFVTFRfTk9QQUdFOworCWNhc2UgLUVOT01FTToKKwkJcmV0dXJuIFZNX0ZBVUxU X09PTTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCX0KK30KKworaW50 IHYzZF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkK K3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXYzZF9zZXRfbW1hcF92bWFfZmxhZ3Modm1hKTsKKworCXJl dHVybiByZXQ7Cit9CisKK2ludCB2M2RfcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKworCXJldCA9 IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJldCA8IDApCisJ CXJldHVybiByZXQ7CisKKwl2M2Rfc2V0X21tYXBfdm1hX2ZsYWdzKHZtYSk7CisKKwlyZXR1cm4g MDsKK30KKworc3RydWN0IHNnX3RhYmxlICoKK3YzZF9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IHYzZF9ibyAqYm8gPSB0b192M2RfYm8o b2JqKTsKKwlpbnQgbnBhZ2VzID0gb2JqLT5zaXplID4+IFBBR0VfU0hJRlQ7CisKKwlyZXR1cm4g ZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKGJvLT5wYWdlcywgbnBhZ2VzKTsKK30KKworc3RydWN0IGRy bV9nZW1fb2JqZWN0ICoKK3YzZF9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCSAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAorCQkJICBz dHJ1Y3Qgc2dfdGFibGUgKnNndCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlz dHJ1Y3QgdjNkX2JvICpibzsKKworCWJvID0gdjNkX2JvX2NyZWF0ZV9zdHJ1Y3QoZGV2LCBhdHRh Y2gtPmRtYWJ1Zi0+c2l6ZSk7CisJaWYgKElTX0VSUihibykpCisJCXJldHVybiBFUlJfQ0FTVChi byk7CisJb2JqID0gJmJvLT5iYXNlOworCisJYm8tPnJlc3YgPSBhdHRhY2gtPmRtYWJ1Zi0+cmVz djsKKworCWJvLT5zZ3QgPSBzZ3Q7CisJdjNkX2JvX2dldF9wYWdlcyhibyk7CisKKwl2M2RfbW11 X2luc2VydF9wdGVzKGJvKTsKKworCXJldHVybiBvYmo7Cit9CisKK2ludCB2M2RfY3JlYXRlX2Jv X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3YzZF9jcmVhdGVfYm8gKmFyZ3MgPSBk YXRhOworCXN0cnVjdCB2M2RfYm8gKmJvID0gTlVMTDsKKwlpbnQgcmV0OworCisJYm8gPSB2M2Rf Ym9fY3JlYXRlKGRldiwgZmlsZV9wcml2LCBQQUdFX0FMSUdOKGFyZ3MtPnNpemUpKTsKKwlpZiAo SVNfRVJSKGJvKSkKKwkJcmV0dXJuIFBUUl9FUlIoYm8pOworCisJYXJncy0+b2Zmc2V0ID0gYm8t Pm5vZGUuc3RhcnQgPDwgUEFHRV9TSElGVDsKKworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0 ZShmaWxlX3ByaXYsICZiby0+YmFzZSwgJmFyZ3MtPmhhbmRsZSk7CisJZHJtX2dlbV9vYmplY3Rf cHV0X3VubG9ja2VkKCZiby0+YmFzZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdjNkX21t YXBfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAg c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV92M2RfbW1hcF9ibyAq YXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOworCWludCByZXQ7 CisKKwlnZW1fb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbGVfcHJpdiwgYXJncy0+aGFu ZGxlKTsKKwlpZiAoIWdlbV9vYmopIHsKKwkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gbG9vayB1cCBH RU0gQk8gJWRcbiIsIGFyZ3MtPmhhbmRsZSk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXJl dCA9IGRybV9nZW1fY3JlYXRlX21tYXBfb2Zmc2V0KGdlbV9vYmopOworCWlmIChyZXQgPT0gMCkK KwkJYXJncy0+b2Zmc2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZnZW1fb2JqLT52bWFf bm9kZSk7CisJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGdlbV9vYmopOworCisJcmV0dXJu IHJldDsKK30KKworaW50IHYzZF9nZXRfYm9fb2Zmc2V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7 CisJc3RydWN0IGRybV92M2RfZ2V0X2JvX29mZnNldCAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpnZW1fb2JqOworCXN0cnVjdCB2M2RfYm8gKmJvOworCisJZ2VtX29iaiA9 IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKCFn ZW1fb2JqKSB7CisJCURSTV9ERUJVRygiRmFpbGVkIHRvIGxvb2sgdXAgR0VNIEJPICVkXG4iLCBh cmdzLT5oYW5kbGUpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJYm8gPSB0b192M2RfYm8oZ2Vt X29iaik7CisKKwlhcmdzLT5vZmZzZXQgPSBiby0+bm9kZS5zdGFydCA8PCBQQUdFX1NISUZUOwor CisJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGdlbV9vYmopOworCXJldHVybiAwOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZGVidWdmcy5jIGIvZHJpdmVycy9n cHUvZHJtL3YzZC92M2RfZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uNGRiNjJjNTQ1NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L3YzZC92M2RfZGVidWdmcy5jCkBAIC0wLDAgKzEsMTkxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCsKKy8qIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEJyb2FkY29tICov CisKKyNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+ CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUu aD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisK KyNpbmNsdWRlICJ2M2RfZHJ2LmgiCisjaW5jbHVkZSAidjNkX3JlZ3MuaCIKKworI2RlZmluZSBS RUdERUYocmVnKSB7IHJlZywgI3JlZyB9CitzdHJ1Y3QgdjNkX3JlZ19kZWYgeworCXUzMiByZWc7 CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjNkX3JlZ19k ZWYgdjNkX2h1Yl9yZWdfZGVmc1tdID0geworCVJFR0RFRihWM0RfSFVCX0FYSUNGRyksCisJUkVH REVGKFYzRF9IVUJfVUlGQ0ZHKSwKKwlSRUdERUYoVjNEX0hVQl9JREVOVDApLAorCVJFR0RFRihW M0RfSFVCX0lERU5UMSksCisJUkVHREVGKFYzRF9IVUJfSURFTlQyKSwKKwlSRUdERUYoVjNEX0hV Ql9JREVOVDMpLAorCVJFR0RFRihWM0RfSFVCX0lOVF9TVFMpLAorCVJFR0RFRihWM0RfSFVCX0lO VF9NU0tfU1RTKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjNkX3JlZ19kZWYgdjNkX2dj YV9yZWdfZGVmc1tdID0geworCVJFR0RFRihWM0RfR0NBX1NBRkVfU0hVVERPV04pLAorCVJFR0RF RihWM0RfR0NBX1NBRkVfU0hVVERPV05fQUNLKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg djNkX3JlZ19kZWYgdjNkX2NvcmVfcmVnX2RlZnNbXSA9IHsKKwlSRUdERUYoVjNEX0NUTF9JREVO VDApLAorCVJFR0RFRihWM0RfQ1RMX0lERU5UMSksCisJUkVHREVGKFYzRF9DVExfSURFTlQyKSwK KwlSRUdERUYoVjNEX0NUTF9NSVNDQ0ZHKSwKKwlSRUdERUYoVjNEX0NUTF9JTlRfU1RTKSwKKwlS RUdERUYoVjNEX0NUTF9JTlRfTVNLX1NUUyksCisJUkVHREVGKFYzRF9DTEVfQ1QwQ1MpLAorCVJF R0RFRihWM0RfQ0xFX0NUMENBKSwKKwlSRUdERUYoVjNEX0NMRV9DVDBFQSksCisJUkVHREVGKFYz RF9DTEVfQ1QxQ1MpLAorCVJFR0RFRihWM0RfQ0xFX0NUMUNBKSwKKwlSRUdERUYoVjNEX0NMRV9D VDFFQSksCisKKwlSRUdERUYoVjNEX1BUQl9CUENBKSwKKwlSRUdERUYoVjNEX1BUQl9CUENTKSwK KworCVJFR0RFRihWM0RfTU1VX0NUTCksCisJUkVHREVGKFYzRF9NTVVfVklPX0FERFIpLAorCisJ UkVHREVGKFYzRF9HTVBfU1RBVFVTKSwKKwlSRUdERUYoVjNEX0dNUF9DRkcpLAorCVJFR0RFRihW M0RfR01QX1ZJT19BRERSKSwKK307CisKK3N0YXRpYyBpbnQgdjNkX3YzZF9kZWJ1Z2ZzX3JlZ3Mo c3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGRybV9pbmZvX25v ZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKiltLT5wcml2YXRlOworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCB2M2RfZGV2ICp2M2Qg PSB0b192M2RfZGV2KGRldik7CisJaW50IGksIGNvcmU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRSh2M2RfaHViX3JlZ19kZWZzKTsgaSsrKSB7CisJCXNlcV9wcmludGYobSwgIiVzICgw eCUwNHgpOiAweCUwOHhcbiIsCisJCQkgICB2M2RfaHViX3JlZ19kZWZzW2ldLm5hbWUsIHYzZF9o dWJfcmVnX2RlZnNbaV0ucmVnLAorCQkJICAgVjNEX1JFQUQodjNkX2h1Yl9yZWdfZGVmc1tpXS5y ZWcpKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2M2RfZ2NhX3JlZ19kZWZz KTsgaSsrKSB7CisJCXNlcV9wcmludGYobSwgIiVzICgweCUwNHgpOiAweCUwOHhcbiIsCisJCQkg ICB2M2RfZ2NhX3JlZ19kZWZzW2ldLm5hbWUsIHYzZF9nY2FfcmVnX2RlZnNbaV0ucmVnLAorCQkJ ICAgVjNEX0dDQV9SRUFEKHYzZF9nY2FfcmVnX2RlZnNbaV0ucmVnKSk7CisJfQorCisJZm9yIChj b3JlID0gMDsgY29yZSA8IHYzZC0+Y29yZXM7IGNvcmUrKykgeworCQlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRSh2M2RfY29yZV9yZWdfZGVmcyk7IGkrKykgeworCQkJc2VxX3ByaW50ZihtLCAi Y29yZSAlZCAlcyAoMHglMDR4KTogMHglMDh4XG4iLAorCQkJCSAgIGNvcmUsCisJCQkJICAgdjNk X2NvcmVfcmVnX2RlZnNbaV0ubmFtZSwKKwkJCQkgICB2M2RfY29yZV9yZWdfZGVmc1tpXS5yZWcs CisJCQkJICAgVjNEX0NPUkVfUkVBRChjb3JlLAorCQkJCQkJIHYzZF9jb3JlX3JlZ19kZWZzW2ld LnJlZykpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdjNkX3YzZF9k ZWJ1Z2ZzX2lkZW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVj dCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopbS0+cHJpdmF0 ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3Qg djNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOworCXUzMiBpZGVudDAsIGlkZW50MSwgaWRl bnQyLCBpZGVudDMsIGNvcmVzOworCWludCByZXQsIGNvcmU7CisKKwlyZXQgPSBwbV9ydW50aW1l X2dldF9zeW5jKHYzZC0+ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlk ZW50MCA9IFYzRF9SRUFEKFYzRF9IVUJfSURFTlQwKTsKKwlpZGVudDEgPSBWM0RfUkVBRChWM0Rf SFVCX0lERU5UMSk7CisJaWRlbnQyID0gVjNEX1JFQUQoVjNEX0hVQl9JREVOVDIpOworCWlkZW50 MyA9IFYzRF9SRUFEKFYzRF9IVUJfSURFTlQzKTsKKwljb3JlcyA9IFYzRF9HRVRfRklFTEQoaWRl bnQxLCBWM0RfSFVCX0lERU5UMV9OQ09SRVMpOworCisJc2VxX3ByaW50ZihtLCAiUmV2aXNpb246 ICAgJWQuJWQuJWQuJWRcbiIsCisJCSAgIFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSFVCX0lE RU5UMV9UVkVSKSwKKwkJICAgVjNEX0dFVF9GSUVMRChpZGVudDEsIFYzRF9IVUJfSURFTlQxX1JF ViksCisJCSAgIFYzRF9HRVRfRklFTEQoaWRlbnQzLCBWM0RfSFVCX0lERU5UM19JUFJFViksCisJ CSAgIFYzRF9HRVRfRklFTEQoaWRlbnQzLCBWM0RfSFVCX0lERU5UM19JUElEWCkpOworCXNlcV9w cmludGYobSwgIk1NVTogICAgICAgICVzXG4iLAorCQkgICAoaWRlbnQyICYgVjNEX0hVQl9JREVO VDJfV0lUSF9NTVUpID8gInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRmKG0sICJURlU6ICAgICAg ICAlc1xuIiwKKwkJICAgKGlkZW50MSAmIFYzRF9IVUJfSURFTlQxX1dJVEhfVEZVKSA/ICJ5ZXMi IDogIm5vIik7CisJc2VxX3ByaW50ZihtLCAiVFNZOiAgICAgICAgJXNcbiIsCisJCSAgIChpZGVu dDEgJiBWM0RfSFVCX0lERU5UMV9XSVRIX1RTWSkgPyAieWVzIiA6ICJubyIpOworCXNlcV9wcmlu dGYobSwgIk1TTzogICAgICAgICVzXG4iLAorCQkgICAoaWRlbnQxICYgVjNEX0hVQl9JREVOVDFf V0lUSF9NU08pID8gInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRmKG0sICJMM0M6ICAgICAgICAl cyAoJWRrYilcbiIsCisJCSAgIChpZGVudDEgJiBWM0RfSFVCX0lERU5UMV9XSVRIX0wzQykgPyAi eWVzIiA6ICJubyIsCisJCSAgIFYzRF9HRVRfRklFTEQoaWRlbnQyLCBWM0RfSFVCX0lERU5UMl9M M0NfTktCKSk7CisKKwlmb3IgKGNvcmUgPSAwOyBjb3JlIDwgY29yZXM7IGNvcmUrKykgeworCQl1 MzIgbWlzY2NmZzsKKwkJdTMyIG5zbGMsIG50bXUsIHF1cHM7CisKKwkJaWRlbnQwID0gVjNEX0NP UkVfUkVBRChjb3JlLCBWM0RfQ1RMX0lERU5UMCk7CisJCWlkZW50MSA9IFYzRF9DT1JFX1JFQUQo Y29yZSwgVjNEX0NUTF9JREVOVDEpOworCQlpZGVudDIgPSBWM0RfQ09SRV9SRUFEKGNvcmUsIFYz RF9DVExfSURFTlQyKTsKKwkJbWlzY2NmZyA9IFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0NUTF9N SVNDQ0ZHKTsKKworCQluc2xjID0gVjNEX0dFVF9GSUVMRChpZGVudDEsIFYzRF9JREVOVDFfTlNM Qyk7CisJCW50bXUgPSBWM0RfR0VUX0ZJRUxEKGlkZW50MSwgVjNEX0lERU5UMV9OVE1VKTsKKwkJ cXVwcyA9IFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSURFTlQxX1FVUFMpOworCisJCXNlcV9w cmludGYobSwgIkNvcmUgJWQ6XG4iLCBjb3JlKTsKKwkJc2VxX3ByaW50ZihtLCAiICBSZXZpc2lv bjogICAgICVkLiVkXG4iLAorCQkJICAgVjNEX0dFVF9GSUVMRChpZGVudDAsIFYzRF9JREVOVDBf VkVSKSwKKwkJCSAgIFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSURFTlQxX1JFVikpOworCQlz ZXFfcHJpbnRmKG0sICIgIFNsaWNlczogICAgICAgJWRcbiIsIG5zbGMpOworCQlzZXFfcHJpbnRm KG0sICIgIFRNVXM6ICAgICAgICAgJWRcbiIsIG5zbGMgKiBudG11KTsKKwkJc2VxX3ByaW50Ziht LCAiICBRUFVzOiAgICAgICAgICVkXG4iLCBuc2xjICogcXVwcyk7CisJCXNlcV9wcmludGYobSwg IiAgU2VtYXBob3JlczogICAlZFxuIiwKKwkJCSAgIFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0Rf SURFTlQxX05TRU0pKTsKKwkJc2VxX3ByaW50ZihtLCAiICBCQ0cgaW50OiAgICAgICVkXG4iLAor CQkJICAgKGlkZW50MiAmIFYzRF9JREVOVDJfQkNHX0lOVCkgIT0gMCk7CisJCXNlcV9wcmludGYo bSwgIiAgT3ZlcnJpZGUgVE1VOiAlZFxuIiwKKwkJCSAgIChtaXNjY2ZnICYgVjNEX01JU0NDRkdf T1ZSVE1VT1VUKSAhPSAwKTsKKwl9CisKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KHYzZC0+ ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCh2M2QtPmRldik7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCB2M2RfZGVidWdmc19ib19zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1 Y3QgZHJtX2luZm9fbm9kZSAqKW0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9IHRvX3YzZF9kZXYoZGV2 KTsKKworCW11dGV4X2xvY2soJnYzZC0+Ym9fbG9jayk7CisJc2VxX3ByaW50ZihtLCAiYWxsb2Nh dGVkIGJvczogICAgICAgICAgJWRcbiIsCisJCSAgIHYzZC0+Ym9fc3RhdHMubnVtX2FsbG9jYXRl ZCk7CisJc2VxX3ByaW50ZihtLCAiYWxsb2NhdGVkIGJvIHNpemUgKGtiKTogJWxkXG4iLAorCQkg ICAobG9uZyl2M2QtPmJvX3N0YXRzLnBhZ2VzX2FsbG9jYXRlZCA8PCAoUEFHRV9TSElGVCAtIDEw KSk7CisJbXV0ZXhfdW5sb2NrKCZ2M2QtPmJvX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2luZm9fbGlzdCB2M2RfZGVidWdmc19saXN0W10gPSB7CisJ eyJ2M2RfaWRlbnQiLCB2M2RfdjNkX2RlYnVnZnNfaWRlbnQsIDB9LAorCXsidjNkX3JlZ3MiLCB2 M2RfdjNkX2RlYnVnZnNfcmVncywgMH0sCisJeyJib19zdGF0cyIsIHYzZF9kZWJ1Z2ZzX2JvX3N0 YXRzLCAwfSwKK307CisKK2ludAordjNkX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICpt aW5vcikKK3sKKwlyZXR1cm4gZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKHYzZF9kZWJ1Z2ZzX2xp c3QsCisJCQkJCUFSUkFZX1NJWkUodjNkX2RlYnVnZnNfbGlzdCksCisJCQkJCW1pbm9yLT5kZWJ1 Z2ZzX3Jvb3QsIG1pbm9yKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNk X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zOGU4MDQxYjVmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kcnYuYwpAQCAtMCwwICsxLDM3MSBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBC cm9hZGNvbSAqLworCisvKioKKyAqIERPQzogQnJvYWRjb20gVjNEIEdyYXBoaWNzIERyaXZlcgor ICoKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBCcm9hZGNvbSBWM0QgMy4zIGFuZCA0LjEg T3BlbkdMIEVTIEdQVXMuCisgKiBGb3IgVjNEIDIueCBzdXBwb3J0LCBzZWUgdGhlIFZDNCBkcml2 ZXIuCisgKgorICogQ3VycmVudGx5IG9ubHkgc2luZ2xlLWNvcmUgcmVuZGVyaW5nIHVzaW5nIHRo ZSBiaW5uZXIgYW5kIHJlbmRlcmVyCisgKiBpcyBzdXBwb3J0ZWQuICBUaGUgVEZVICh0ZXh0dXJl IGZvcm1hdHRpbmcgdW5pdCkgYW5kIFYzRCA0LngncyBDU0QKKyAqIChjb21wdXRlIHNoYWRlciBk aXNwYXRjaCkgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgor I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+ CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1f cnVudGltZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fZmJfaGVscGVyLmg+CisKKyNpbmNsdWRlICJ1YXBpL2RybS92M2RfZHJtLmgiCisj aW5jbHVkZSAidjNkX2Rydi5oIgorI2luY2x1ZGUgInYzZF9yZWdzLmgiCisKKyNkZWZpbmUgRFJJ VkVSX05BTUUgInYzZCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkJyb2FkY29tIFYzRCBncmFwaGlj cyIKKyNkZWZpbmUgRFJJVkVSX0RBVEUgIjIwMTgwNDE5IgorI2RlZmluZSBEUklWRVJfTUFKT1Ig MQorI2RlZmluZSBEUklWRVJfTUlOT1IgMAorI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTCAwCisK KyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdjNkX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3Qg ZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRybSk7CisKKwl2M2Rf aXJxX2Rpc2FibGUodjNkKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh2M2QtPmNsayk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2M2RfcnVudGltZV9yZXN1bWUoc3RydWN0IGRl dmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2Rldihkcm0pOworCWludCByZXQ7 CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUodjNkLT5jbGspOworCWlmIChyZXQgIT0gMCkK KwkJcmV0dXJuIHJldDsKKworCS8qIFhYWDogVlBNIGJhc2UgKi8KKworCXYzZF9tbXVfc2V0X3Bh Z2VfdGFibGUodjNkKTsKKwl2M2RfaXJxX2VuYWJsZSh2M2QpOworCisJcmV0dXJuIDA7Cit9Cisj ZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHYzZF92M2RfcG1fb3BzID0g eworCVNFVF9SVU5USU1FX1BNX09QUyh2M2RfcnVudGltZV9zdXNwZW5kLCB2M2RfcnVudGltZV9y ZXN1bWUsIE5VTEwpCit9OworCitzdGF0aWMgaW50IHYzZF9nZXRfcGFyYW1faW9jdGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOwor CXN0cnVjdCBkcm1fdjNkX2dldF9wYXJhbSAqYXJncyA9IGRhdGE7CisJaW50IHJldDsKKwlzdGF0 aWMgY29uc3QgdTMyIHJlZ19tYXBbXSA9IHsKKwkJW0RSTV9WM0RfUEFSQU1fVjNEX1VJRkNGR10g PSBWM0RfSFVCX1VJRkNGRywKKwkJW0RSTV9WM0RfUEFSQU1fVjNEX0hVQl9JREVOVDFdID0gVjNE X0hVQl9JREVOVDEsCisJCVtEUk1fVjNEX1BBUkFNX1YzRF9IVUJfSURFTlQyXSA9IFYzRF9IVUJf SURFTlQyLAorCQlbRFJNX1YzRF9QQVJBTV9WM0RfSFVCX0lERU5UM10gPSBWM0RfSFVCX0lERU5U MywKKwkJW0RSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMF0gPSBWM0RfQ1RMX0lERU5UMCwK KwkJW0RSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMV0gPSBWM0RfQ1RMX0lERU5UMSwKKwkJ W0RSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMl0gPSBWM0RfQ1RMX0lERU5UMiwKKwl9Owor CisJaWYgKGFyZ3MtPnBhZCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE5vdGUgdGhh dCBEUk1fVjNEX1BBUkFNX1YzRF9DT1JFMF9JREVOVDAgaXMgMCwgc28gd2UgbmVlZAorCSAqIHRv IGV4cGxpY2l0bHkgYWxsb3cgaXQgaW4gdGhlICJ0aGUgcmVnaXN0ZXIgaW4gb3VyCisJICogcGFy YW1ldGVyIG1hcCIgY2hlY2suCisJICovCisJaWYgKGFyZ3MtPnBhcmFtIDwgQVJSQVlfU0laRShy ZWdfbWFwKSAmJgorCSAgICAocmVnX21hcFthcmdzLT5wYXJhbV0gfHwKKwkgICAgIGFyZ3MtPnBh cmFtID09IERSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMCkpIHsKKwkJdTMyIG9mZnNldCA9 IHJlZ19tYXBbYXJncy0+cGFyYW1dOworCisJCWlmIChhcmdzLT52YWx1ZSAhPSAwKQorCQkJcmV0 dXJuIC1FSU5WQUw7CisKKwkJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyh2M2QtPmRldik7CisJ CWlmIChhcmdzLT5wYXJhbSA+PSBEUk1fVjNEX1BBUkFNX1YzRF9DT1JFMF9JREVOVDAgJiYKKwkJ ICAgIGFyZ3MtPnBhcmFtIDw9IERSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMikgeworCQkJ YXJncy0+dmFsdWUgPSBWM0RfQ09SRV9SRUFEKDAsIG9mZnNldCk7CisJCX0gZWxzZSB7CisJCQlh cmdzLT52YWx1ZSA9IFYzRF9SRUFEKG9mZnNldCk7CisJCX0KKwkJcG1fcnVudGltZV9tYXJrX2xh c3RfYnVzeSh2M2QtPmRldik7CisJCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKHYzZC0+ZGV2 KTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQW55IHBhcmFtcyB0aGF0IGFyZW4ndCBqdXN0IHJl Z2lzdGVyIHJlYWRzIHdvdWxkIGdvIGhlcmUuICovCisKKwlEUk1fREVCVUcoIlVua25vd24gcGFy YW1ldGVyICVkXG4iLCBhcmdzLT5wYXJhbSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRp YyBpbnQKK3YzZF9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSkKK3sKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOworCXN0cnVj dCB2M2RfZmlsZV9wcml2ICp2M2RfcHJpdjsKKwlpbnQgaTsKKworCXYzZF9wcml2ID0ga3phbGxv YyhzaXplb2YoKnYzZF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2M2RfcHJpdikKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwl2M2RfcHJpdi0+djNkID0gdjNkOworCisJZm9yIChpID0gMDsgaSA8 IFYzRF9NQVhfUVVFVUVTOyBpKyspIHsKKwkJZHJtX3NjaGVkX2VudGl0eV9pbml0KCZ2M2QtPnF1 ZXVlW2ldLnNjaGVkLAorCQkJCSAgICAgICZ2M2RfcHJpdi0+c2NoZWRfZW50aXR5W2ldLAorCQkJ CSAgICAgICZ2M2QtPnF1ZXVlW2ldLnNjaGVkLnNjaGVkX3JxW0RSTV9TQ0hFRF9QUklPUklUWV9O T1JNQUxdLAorCQkJCSAgICAgIDMyLCBOVUxMKTsKKwl9CisKKwlmaWxlLT5kcml2ZXJfcHJpdiA9 IHYzZF9wcml2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit2M2RfcG9zdGNsb3Nl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1 Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOworCXN0cnVjdCB2M2RfZmlsZV9wcml2 ICp2M2RfcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2OworCWVudW0gdjNkX3F1ZXVlIHE7CisKKwlm b3IgKHEgPSAwOyBxIDwgVjNEX01BWF9RVUVVRVM7IHErKykgeworCQlkcm1fc2NoZWRfZW50aXR5 X2ZpbmkoJnYzZC0+cXVldWVbcV0uc2NoZWQsCisJCQkJICAgICAgJnYzZF9wcml2LT5zY2hlZF9l bnRpdHlbcV0pOworCX0KKworCWtmcmVlKHYzZF9wcml2KTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBmaWxlX29wZXJhdGlvbnMgdjNkX2RybV9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9E VUxFLAorCS5vcGVuID0gZHJtX29wZW4sCisJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkudW5s b2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCisJLm1tYXAgPSB2M2RfbW1hcCwKKwkucG9sbCA9IGRy bV9wb2xsLAorCS5yZWFkID0gZHJtX3JlYWQsCisJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRf aW9jdGwsCisJLmxsc2VlayA9IG5vb3BfbGxzZWVrLAorfTsKKworLyogRFJNX0FVVEggaXMgcmVx dWlyZWQgb24gU1VCTUlUX0NMIGZvciBub3csIHdoaWxlIHdlIGRvbid0IGhhdmUgR01QCisgKiBw cm90ZWN0aW9uIGJldHdlZW4gY2xpZW50cy4gIE5vdGUgdGhhdCByZW5kZXIgbm9kZXMgd291bGQg YmUgYmUKKyAqIGFibGUgdG8gc3VibWl0IENMcyB0aGF0IGNvdWxkIGFjY2VzcyBCT3MgZnJvbSBj bGllbnRzIGF1dGhlbnRpY2F0ZWQKKyAqIHdpdGggdGhlIG1hc3RlciBub2RlLgorICovCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIHYzZF9kcm1faW9jdGxzW10gPSB7CisJRFJN X0lPQ1RMX0RFRl9EUlYoVjNEX1NVQk1JVF9DTCwgdjNkX3N1Ym1pdF9jbF9pb2N0bCwgRFJNX1JF TkRFUl9BTExPVyB8IERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGX0RSVihWM0RfV0FJVF9CTywg djNkX3dhaXRfYm9faW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJW KFYzRF9DUkVBVEVfQk8sIHYzZF9jcmVhdGVfYm9faW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAor CURSTV9JT0NUTF9ERUZfRFJWKFYzRF9NTUFQX0JPLCB2M2RfbW1hcF9ib19pb2N0bCwgRFJNX1JF TkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoVjNEX0dFVF9QQVJBTSwgdjNkX2dldF9w YXJhbV9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoVjNEX0dF VF9CT19PRkZTRVQsIHYzZF9nZXRfYm9fb2Zmc2V0X2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdjNkX3ZtX29w cyA9IHsKKwkuZmF1bHQgPSB2M2RfZ2VtX2ZhdWx0LAorCS5vcGVuID0gZHJtX2dlbV92bV9vcGVu LAorCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9k cml2ZXIgdjNkX2RybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9IChEUklWRVJfR0VN IHwKKwkJCSAgICBEUklWRVJfUkVOREVSIHwKKwkJCSAgICBEUklWRVJfUFJJTUUgfAorCQkJICAg IERSSVZFUl9TWU5DT0JKKSwKKworCS5vcGVuID0gdjNkX29wZW4sCisJLnBvc3RjbG9zZSA9IHYz ZF9wb3N0Y2xvc2UsCisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwkuZGVidWdmc19p bml0ID0gdjNkX2RlYnVnZnNfaW5pdCwKKyNlbmRpZgorCisJLmdlbV9mcmVlX29iamVjdF91bmxv Y2tlZCA9IHYzZF9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9ICZ2M2Rfdm1fb3BzLAorCisJ LnByaW1lX2hhbmRsZV90b19mZCA9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAorCS5wcmlt ZV9mZF90b19oYW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwKKwkuZ2VtX3ByaW1l X2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJt X2dlbV9wcmltZV9leHBvcnQsCisJLmdlbV9wcmltZV9yZXNfb2JqID0gdjNkX3ByaW1lX3Jlc19v YmosCisJLmdlbV9wcmltZV9nZXRfc2dfdGFibGUJPSB2M2RfcHJpbWVfZ2V0X3NnX3RhYmxlLAor CS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gdjNkX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwK KwkuZ2VtX3ByaW1lX21tYXAgPSB2M2RfcHJpbWVfbW1hcCwKKworCS5pb2N0bHMgPSB2M2RfZHJt X2lvY3RscywKKwkubnVtX2lvY3RscyA9IEFSUkFZX1NJWkUodjNkX2RybV9pb2N0bHMpLAorCS5m b3BzID0gJnYzZF9kcm1fZm9wcywKKworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmRlc2MgPSBE UklWRVJfREVTQywKKwkuZGF0ZSA9IERSSVZFUl9EQVRFLAorCS5tYWpvciA9IERSSVZFUl9NQUpP UiwKKwkubWlub3IgPSBEUklWRVJfTUlOT1IsCisJLnBhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hM RVZFTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHYzZF9vZl9tYXRj aFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYnJjbSw3MjY4LXYzZCIgfSwKKwl7IC5jb21wYXRp YmxlID0gImJyY20sNzI3OC12M2QiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShv ZiwgdjNkX29mX21hdGNoKTsKKworc3RhdGljIGludAorbWFwX3JlZ3Moc3RydWN0IHYzZF9kZXYg KnYzZCwgdm9pZCBfX2lvbWVtICoqcmVncywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qg cmVzb3VyY2UgKnJlcyA9CisJCXBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUodjNkLT5wZGV2 LCBJT1JFU09VUkNFX01FTSwgbmFtZSk7CisKKwkqcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJj ZSh2M2QtPmRldiwgcmVzKTsKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKCpyZWdzKTsKK30KKwor c3RhdGljIGludCB2M2RfcGxhdGZvcm1fZHJtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZHJtOworCXN0cnVjdCB2M2RfZGV2ICp2M2Q7CisJaW50IHJldDsKKwl1MzIgaWRl bnQxOworCisJZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzNik7CisKKwl2 M2QgPSBremFsbG9jKHNpemVvZigqdjNkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2M2QpCisJCXJl dHVybiAtRU5PTUVNOworCXYzZC0+ZGV2ID0gZGV2OworCXYzZC0+cGRldiA9IHBkZXY7CisJZHJt ID0gJnYzZC0+ZHJtOworCisJcmV0ID0gbWFwX3JlZ3ModjNkLCAmdjNkLT5icmlkZ2VfcmVncywg ImJyaWRnZSIpOworCWlmIChyZXQpCisJCWdvdG8gZGV2X2ZyZWU7CisKKwlyZXQgPSBtYXBfcmVn cyh2M2QsICZ2M2QtPmh1Yl9yZWdzLCAiaHViIik7CisJaWYgKHJldCkKKwkJZ290byBkZXZfZnJl ZTsKKworCXJldCA9IG1hcF9yZWdzKHYzZCwgJnYzZC0+Y29yZV9yZWdzWzBdLCAiY29yZTAiKTsK KwlpZiAocmV0KQorCQlnb3RvIGRldl9mcmVlOworCisJaWRlbnQxID0gVjNEX1JFQUQoVjNEX0hV Ql9JREVOVDEpOworCXYzZC0+dmVyID0gKFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSFVCX0lE RU5UMV9UVkVSKSAqIDEwICsKKwkJICAgIFYzRF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSFVCX0lE RU5UMV9SRVYpKTsKKwl2M2QtPmNvcmVzID0gVjNEX0dFVF9GSUVMRChpZGVudDEsIFYzRF9IVUJf SURFTlQxX05DT1JFUyk7CisJV0FSTl9PTih2M2QtPmNvcmVzID4gMSk7IC8qIG11bHRpY29yZSBu b3QgeWV0IGltcGxlbWVudGVkICovCisKKwlpZiAodjNkLT52ZXIgPCA0MSkgeworCQlyZXQgPSBt YXBfcmVncyh2M2QsICZ2M2QtPmdjYV9yZWdzLCAiZ2NhIik7CisJCWlmIChyZXQpCisJCQlnb3Rv IGRldl9mcmVlOworCX0KKworCXYzZC0+bW11X3NjcmF0Y2ggPSBkbWFfYWxsb2Nfd2MoZGV2LCA0 MDk2LCAmdjNkLT5tbXVfc2NyYXRjaF9wYWRkciwKKwkJCQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX05P V0FSTiB8IF9fR0ZQX1pFUk8pOworCWlmICghdjNkLT5tbXVfc2NyYXRjaCkgeworCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBNTVUgc2NyYXRjaCBwYWdlXG4iKTsKKwkJcmV0ID0g LUVOT01FTTsKKwkJZ290byBkZXZfZnJlZTsKKwl9CisKKwlwbV9ydW50aW1lX3VzZV9hdXRvc3Vz cGVuZChkZXYpOworCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KGRldiwgNTApOwor CXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKwlyZXQgPSBkcm1fZGV2X2luaXQoJnYzZC0+ZHJt LCAmdjNkX2RybV9kcml2ZXIsIGRldik7CisJaWYgKHJldCkKKwkJZ290byBkbWFfZnJlZTsKKwor CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRybSk7CisJZHJtLT5kZXZfcHJpdmF0ZSA9IHYz ZDsKKworCXJldCA9IHYzZF9nZW1faW5pdChkcm0pOworCWlmIChyZXQpCisJCWdvdG8gZGV2X2Rl c3Ryb3k7CisKKwl2M2RfaXJxX2luaXQodjNkKTsKKworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIo ZHJtLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGdlbV9kZXN0cm95OworCisJcmV0dXJuIDA7CisK K2dlbV9kZXN0cm95OgorCXYzZF9nZW1fZGVzdHJveShkcm0pOworZGV2X2Rlc3Ryb3k6CisJZHJt X2Rldl9wdXQoZHJtKTsKK2RtYV9mcmVlOgorCWRtYV9mcmVlX3djKGRldiwgNDA5NiwgdjNkLT5t bXVfc2NyYXRjaCwgdjNkLT5tbXVfc2NyYXRjaF9wYWRkcik7CitkZXZfZnJlZToKKwlrZnJlZSh2 M2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdjNkX3BsYXRmb3JtX2RybV9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9 IHRvX3YzZF9kZXYoZHJtKTsKKworCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworCisJdjNkX2dl bV9kZXN0cm95KGRybSk7CisKKwlkcm1fZGV2X3B1dChkcm0pOworCisJZG1hX2ZyZWVfd2ModjNk LT5kZXYsIDQwOTYsIHYzZC0+bW11X3NjcmF0Y2gsIHYzZC0+bW11X3NjcmF0Y2hfcGFkZHIpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHYzZF9wbGF0 Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHYzZF9wbGF0Zm9ybV9kcm1fcHJvYmUsCisJLnJl bW92ZQkJPSB2M2RfcGxhdGZvcm1fZHJtX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJ PSAidjNkIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gdjNkX29mX21hdGNoLAorCX0sCit9OworCitz dGF0aWMgaW50IF9faW5pdCB2M2RfZHJtX3JlZ2lzdGVyKHZvaWQpCit7CisJcmV0dXJuIHBsYXRm b3JtX2RyaXZlcl9yZWdpc3RlcigmdjNkX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2 b2lkIF9fZXhpdCB2M2RfZHJtX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJf dW5yZWdpc3RlcigmdjNkX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHYzZF9k cm1fcmVnaXN0ZXIpOworbW9kdWxlX2V4aXQodjNkX2RybV91bnJlZ2lzdGVyKTsKKworTU9EVUxF X0FMSUFTKCJwbGF0Zm9ybTp2M2QtZHJtIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29t IFYzRCBEUk0gRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJFcmljIEFuaG9sdCA8ZXJpY0Bhbmhv bHQubmV0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3YzZC92M2RfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kcnYuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmEwNDNhYzNhYWU5OAotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Rydi5oCkBAIC0wLDAgKzEs Mjk0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qIENvcHlyaWdo dCAoQykgMjAxNS0yMDE4IEJyb2FkY29tICovCisKKyNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlv bi5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lbmNvZGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRlIDxkcm0vZ3B1X3NjaGVkdWxlci5o PgorCisjZGVmaW5lIEdNUF9HUkFOVUxBUklUWSAoMTI4ICogMTAyNCkKKworLyogRW51bSBmb3Ig ZWFjaCBvZiB0aGUgVjNEIHF1ZXVlcy4gIFdlIG1haW50YWluIHZhcmlvdXMgcXVldWUKKyAqIHRy YWNraW5nIGFzIGFuIGFycmF5IGJlY2F1c2UgYXQgc29tZSBwb2ludCB3ZSdsbCB3YW50IHRvIHN1 cHBvcnQKKyAqIHRoZSBURlUgKHRleHR1cmUgZm9ybWF0dGluZyB1bml0KSBhcyBhbm90aGVyIHF1 ZXVlLgorICovCitlbnVtIHYzZF9xdWV1ZSB7CisJVjNEX0JJTiwKKwlWM0RfUkVOREVSLAorfTsK KworI2RlZmluZSBWM0RfTUFYX1FVRVVFUyAoVjNEX1JFTkRFUiArIDEpCisKK3N0cnVjdCB2M2Rf cXVldWVfc3RhdGUgeworCXN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciBzY2hlZDsKKworCXU2NCBm ZW5jZV9jb250ZXh0OworCXU2NCBlbWl0X3NlcW5vOworCXU2NCBmaW5pc2hlZF9zZXFubzsKK307 CisKK3N0cnVjdCB2M2RfZGV2IHsKKwlzdHJ1Y3QgZHJtX2RldmljZSBkcm07CisKKwkvKiBTaG9y dCByZXByZXNlbnRhdGlvbiAoZS5nLiAzMywgNDEpIG9mIHRoZSBWM0QgdGVjaCB2ZXJzaW9uCisJ ICogYW5kIHJldmlzaW9uLgorCSAqLworCWludCB2ZXI7CisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7 CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwl2b2lkIF9faW9tZW0gKmh1Yl9yZWdz OworCXZvaWQgX19pb21lbSAqY29yZV9yZWdzWzNdOworCXZvaWQgX19pb21lbSAqYnJpZGdlX3Jl Z3M7CisJdm9pZCBfX2lvbWVtICpnY2FfcmVnczsKKwlzdHJ1Y3QgY2xrICpjbGs7CisKKwkvKiBW aXJ0dWFsIGFuZCBETUEgYWRkcmVzc2VzIG9mIHRoZSBzaW5nbGUgc2hhcmVkIHBhZ2UgdGFibGUu ICovCisJdm9sYXRpbGUgdTMyICpwdDsKKwlkbWFfYWRkcl90IHB0X3BhZGRyOworCisJLyogVmly dHVhbCBhbmQgRE1BIGFkZHJlc3NlcyBvZiB0aGUgTU1VJ3Mgc2NyYXRjaCBwYWdlLiAgV2hlbgor CSAqIGEgcmVhZCBvciB3cml0ZSBpcyBpbnZhbGlkIGluIHRoZSBNTVUsIGl0IHdpbGwgYmUKKwkg KiByZWRpcmVjdGVkIGhlcmUuCisJICovCisJdm9pZCAqbW11X3NjcmF0Y2g7CisJZG1hX2FkZHJf dCBtbXVfc2NyYXRjaF9wYWRkcjsKKworCS8qIE51bWJlciBvZiBWM0QgY29yZXMuICovCisJdTMy IGNvcmVzOworCisJLyogQWxsb2NhdG9yIG1hbmFnaW5nIHRoZSBhZGRyZXNzIHNwYWNlLiAgQWxs IHVuaXRzIGFyZSBpbgorCSAqIG51bWJlciBvZiBwYWdlcy4KKwkgKi8KKwlzdHJ1Y3QgZHJtX21t IG1tOworCXNwaW5sb2NrX3QgbW1fbG9jazsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCBvdmVyZmxv d19tZW1fd29yazsKKworCXN0cnVjdCB2M2RfZXhlY19pbmZvICpiaW5fam9iOworCXN0cnVjdCB2 M2RfZXhlY19pbmZvICpyZW5kZXJfam9iOworCisJc3RydWN0IHYzZF9xdWV1ZV9zdGF0ZSBxdWV1 ZVtWM0RfTUFYX1FVRVVFU107CisKKwkvKiBTcGlubG9jayB1c2VkIHRvIHN5bmNocm9uaXplIHRo ZSBvdmVyZmxvdyBtZW1vcnkKKwkgKiBtYW5hZ2VtZW50IGFnYWluc3QgYmluIGpvYiBzdWJtaXNz aW9uLgorCSAqLworCXNwaW5sb2NrX3Qgam9iX2xvY2s7CisKKwkvKiBQcm90ZWN0cyBib19zdGF0 cyAqLworCXN0cnVjdCBtdXRleCBib19sb2NrOworCisJLyogTG9jayB0YWtlbiB3aGVuIHJlc2V0 dGluZyB0aGUgR1BVLCB0byBrZWVwIG11bHRpcGxlCisJICogcHJvY2Vzc2VzIGZyb20gdHJ5aW5n IHRvIHBhcmsgdGhlIHNjaGVkdWxlciB0aHJlYWRzIGFuZAorCSAqIHJlc2V0IGF0IG9uY2UuCisJ ICovCisJc3RydWN0IG11dGV4IHJlc2V0X2xvY2s7CisKKwlzdHJ1Y3QgeworCQl1MzIgbnVtX2Fs bG9jYXRlZDsKKwkJdTMyIHBhZ2VzX2FsbG9jYXRlZDsKKwl9IGJvX3N0YXRzOworfTsKKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgdjNkX2RldiAqCit0b192M2RfZGV2KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCit7CisJcmV0dXJuIChzdHJ1Y3QgdjNkX2RldiAqKWRldi0+ZGV2X3ByaXZhdGU7Cit9 CisKKy8qIFRoZSBwZXItZmQgc3RydWN0LCB3aGljaCB0cmFja3MgdGhlIE1NVSBtYXBwaW5ncy4g Ki8KK3N0cnVjdCB2M2RfZmlsZV9wcml2IHsKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkOworCisJc3Ry dWN0IGRybV9zY2hlZF9lbnRpdHkgc2NoZWRfZW50aXR5W1YzRF9NQVhfUVVFVUVTXTsKK307CisK Ky8qIFRyYWNrcyBhIG1hcHBpbmcgb2YgYSBCTyBpbnRvIGEgcGVyLWZkIGFkZHJlc3Mgc3BhY2Ug Ki8KK3N0cnVjdCB2M2Rfdm1hIHsKKwlzdHJ1Y3QgdjNkX3BhZ2VfdGFibGUgKnB0OworCXN0cnVj dCBsaXN0X2hlYWQgbGlzdDsgLyogZW50cnkgaW4gdjNkX2JvLnZtYXMgKi8KK307CisKK3N0cnVj dCB2M2RfYm8geworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCBiYXNlOworCisJc3RydWN0IG11dGV4 IGxvY2s7CisKKwlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKKworCXUzMiBwYWdlc19yZWZjb3Vu dDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXN0cnVjdCBzZ190YWJsZSAqc2d0OworCXZvaWQg KnZhZGRyOworCisJc3RydWN0IGxpc3RfaGVhZCB2bWFzOyAgICAvKiBsaXN0IG9mIHYzZF92bWEg Ki8KKworCS8qIExpc3QgZW50cnkgZm9yIHRoZSBCTydzIHBvc2l0aW9uIGluCisJICogdjNkX2V4 ZWNfaW5mby0+dW5yZWZfbGlzdAorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgdW5yZWZfaGVhZDsK KworCS8qIG5vcm1hbGx5IChyZXN2ID09ICZfcmVzdikgZXhjZXB0IGZvciBpbXBvcnRlZCBibydz ICovCisJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlzdHJ1Y3QgcmVzZXJ2YXRp b25fb2JqZWN0IF9yZXN2OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdjNkX2JvICoKK3Rv X3YzZF9ibyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJvKQoreworCXJldHVybiAoc3RydWN0IHYz ZF9ibyAqKWJvOworfQorCitzdHJ1Y3QgdjNkX2ZlbmNlIHsKKwlzdHJ1Y3QgZG1hX2ZlbmNlIGJh c2U7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwkvKiB2M2Qgc2Vxbm8gZm9yIHNpZ25hbGVk KCkgdGVzdCAqLworCXU2NCBzZXFubzsKKwllbnVtIHYzZF9xdWV1ZSBxdWV1ZTsKK307CisKK3N0 YXRpYyBpbmxpbmUgc3RydWN0IHYzZF9mZW5jZSAqCit0b192M2RfZmVuY2Uoc3RydWN0IGRtYV9m ZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuIChzdHJ1Y3QgdjNkX2ZlbmNlICopZmVuY2U7Cit9CisK KyNkZWZpbmUgVjNEX1JFQUQob2Zmc2V0KSByZWFkbCh2M2QtPmh1Yl9yZWdzICsgb2Zmc2V0KQor I2RlZmluZSBWM0RfV1JJVEUob2Zmc2V0LCB2YWwpIHdyaXRlbCh2YWwsIHYzZC0+aHViX3JlZ3Mg KyBvZmZzZXQpCisKKyNkZWZpbmUgVjNEX0JSSURHRV9SRUFEKG9mZnNldCkgcmVhZGwodjNkLT5i cmlkZ2VfcmVncyArIG9mZnNldCkKKyNkZWZpbmUgVjNEX0JSSURHRV9XUklURShvZmZzZXQsIHZh bCkgd3JpdGVsKHZhbCwgdjNkLT5icmlkZ2VfcmVncyArIG9mZnNldCkKKworI2RlZmluZSBWM0Rf R0NBX1JFQUQob2Zmc2V0KSByZWFkbCh2M2QtPmdjYV9yZWdzICsgb2Zmc2V0KQorI2RlZmluZSBW M0RfR0NBX1dSSVRFKG9mZnNldCwgdmFsKSB3cml0ZWwodmFsLCB2M2QtPmdjYV9yZWdzICsgb2Zm c2V0KQorCisjZGVmaW5lIFYzRF9DT1JFX1JFQUQoY29yZSwgb2Zmc2V0KSByZWFkbCh2M2QtPmNv cmVfcmVnc1tjb3JlXSArIG9mZnNldCkKKyNkZWZpbmUgVjNEX0NPUkVfV1JJVEUoY29yZSwgb2Zm c2V0LCB2YWwpIHdyaXRlbCh2YWwsIHYzZC0+Y29yZV9yZWdzW2NvcmVdICsgb2Zmc2V0KQorCitz dHJ1Y3QgdjNkX2pvYiB7CisJc3RydWN0IGRybV9zY2hlZF9qb2IgYmFzZTsKKworCXN0cnVjdCB2 M2RfZXhlY19pbmZvICpleGVjOworCisJLyogQW4gb3B0aW9uYWwgZmVuY2UgdXNlcnNwYWNlIGNh biBwYXNzIGluIGZvciB0aGUgam9iIHRvIGRlcGVuZCBvbi4gKi8KKwlzdHJ1Y3QgZG1hX2ZlbmNl ICppbl9mZW5jZTsKKworCS8qIHYzZCBmZW5jZSB0byBiZSBzaWduYWxlZCBieSBJUlEgaGFuZGxl ciB3aGVuIHRoZSBqb2IgaXMgY29tcGxldGUuICovCisJc3RydWN0IGRtYV9mZW5jZSAqZG9uZV9m ZW5jZTsKKworCS8qIEdQVSB2aXJ0dWFsIGFkZHJlc3NlcyBvZiB0aGUgc3RhcnQvZW5kIG9mIHRo ZSBDTCBqb2IuICovCisJdTMyIHN0YXJ0LCBlbmQ7Cit9OworCitzdHJ1Y3QgdjNkX2V4ZWNfaW5m byB7CisJc3RydWN0IHYzZF9kZXYgKnYzZDsKKworCXN0cnVjdCB2M2Rfam9iIGJpbiwgcmVuZGVy OworCisJLyogRmVuY2UgZm9yIHdoZW4gdGhlIHNjaGVkdWxlciBjb25zaWRlcnMgdGhlIGJpbm5l ciB0byBiZQorCSAqIGRvbmUsIGZvciByZW5kZXIgdG8gZGVwZW5kIG9uLgorCSAqLworCXN0cnVj dCBkbWFfZmVuY2UgKmJpbl9kb25lX2ZlbmNlOworCisJc3RydWN0IGtyZWYgcmVmY291bnQ7CisK KwkvKiBUaGlzIGlzIHRoZSBhcnJheSBvZiBCT3MgdGhhdCB3ZXJlIGxvb2tlZCB1cCBhdCB0aGUg c3RhcnQgb2YgZXhlYy4gKi8KKwlzdHJ1Y3QgdjNkX2JvICoqYm87CisJdTMyIGJvX2NvdW50Owor CisJLyogTGlzdCBvZiBvdmVyZmxvdyBCT3MgdXNlZCBpbiB0aGUgam9iIHRoYXQgbmVlZCB0byBi ZQorCSAqIHJlbGVhc2VkIG9uY2UgdGhlIGpvYiBpcyBjb21wbGV0ZS4KKwkgKi8KKwlzdHJ1Y3Qg bGlzdF9oZWFkIHVucmVmX2xpc3Q7CisKKwkvKiBTdWJtaXR0ZWQgdGlsZSBtZW1vcnkgYWxsb2Nh dGlvbiBzdGFydC9zaXplLCB0aWxlIHN0YXRlLiAqLworCXUzMiBxbWEsIHFtcywgcXRzOworfTsK KworLyoqCisgKiBfd2FpdF9mb3IgLSBtYWdpYyAocmVnaXN0ZXIpIHdhaXQgbWFjcm8KKyAqCisg KiBEb2VzIHRoZSByaWdodCB0aGluZyBmb3IgbW9kZXNldCBwYXRocyB3aGVuIHJ1biB1bmRlciBr ZGdiIG9yIHNpbWlsYXIgYXRvbWljCisgKiBjb250ZXh0cy4gTm90ZSB0aGF0IGl0J3MgaW1wb3J0 YW50IHRoYXQgd2UgY2hlY2sgdGhlIGNvbmRpdGlvbiBhZ2FpbiBhZnRlcgorICogaGF2aW5nIHRp bWVkIG91dCwgc2luY2UgdGhlIHRpbWVvdXQgY291bGQgYmUgZHVlIHRvIHByZWVtcHRpb24gb3Ig c2ltaWxhciBhbmQKKyAqIHdlJ3ZlIG5ldmVyIGhhZCBhIGNoYW5jZSB0byBjaGVjayB0aGUgY29u ZGl0aW9uIGJlZm9yZSB0aGUgdGltZW91dC4KKyAqLworI2RlZmluZSB3YWl0X2ZvcihDT05ELCBN UykgKHsgXAorCXVuc2lnbmVkIGxvbmcgdGltZW91dF9fID0gamlmZmllcyArIG1zZWNzX3RvX2pp ZmZpZXMoTVMpICsgMTsJXAorCWludCByZXRfXyA9IDA7CQkJCQkJCVwKKwl3aGlsZSAoIShDT05E KSkgewkJCQkJCVwKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dF9fKSkgewkJCVwK KwkJCWlmICghKENPTkQpKQkJCQkJXAorCQkJCXJldF9fID0gLUVUSU1FRE9VVDsJCQlcCisJCQli cmVhazsJCQkJCQlcCisJCX0JCQkJCQkJXAorCQltc2xlZXAoMSk7CQkJCQlcCisJfQkJCQkJCQkJ XAorCXJldF9fOwkJCQkJCQkJXAorfSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5z ZWNzX3RvX2ppZmZpZXNfdGltZW91dChjb25zdCB1NjQgbikKK3sKKwkvKiBuc2Vjc190b19qaWZm aWVzNjQoKSBkb2VzIG5vdCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93ICovCisJaWYgKE5TRUNfUEVS X1NFQyAlIEhaICYmCisJICAgIGRpdl91NjQobiwgTlNFQ19QRVJfU0VDKSA+PSBNQVhfSklGRllf T0ZGU0VUIC8gSFopCisJCXJldHVybiBNQVhfSklGRllfT0ZGU0VUOworCisJcmV0dXJuIG1pbl90 KHU2NCwgTUFYX0pJRkZZX09GRlNFVCwgbnNlY3NfdG9famlmZmllczY0KG4pICsgMSk7Cit9CisK Ky8qIHYzZF9iby5jICovCit2b2lkIHYzZF9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKmdlbV9vYmopOworc3RydWN0IHYzZF9ibyAqdjNkX2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCSAgICAgc2l6ZV90IHNp emUpOworaW50IHYzZF9jcmVhdGVfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCB2M2RfbW1hcF9i b19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgdjNkX2dldF9ib19vZmZzZXRfaW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdik7CitpbnQgdjNkX2dlbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7Citp bnQgdjNkX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h KTsKK3N0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKnYzZF9wcmltZV9yZXNfb2JqKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqKTsKK2ludCB2M2RfcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworc3RydWN0IHNnX3RhYmxl ICp2M2RfcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3N0 cnVjdCBkcm1fZ2VtX29iamVjdCAqdjNkX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkJCQkJIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwK KwkJCQkJCSBzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7CisKKy8qIHYzZF9kZWJ1Z2ZzLmMgKi8KK2lu dCB2M2RfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKworLyogdjNkX2Zl bmNlLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyB2M2RfZmVuY2Vfb3Bz Oworc3RydWN0IGRtYV9mZW5jZSAqdjNkX2ZlbmNlX2NyZWF0ZShzdHJ1Y3QgdjNkX2RldiAqdjNk LCBlbnVtIHYzZF9xdWV1ZSBxdWV1ZSk7CisKKy8qIHYzZF9nZW0uYyAqLworaW50IHYzZF9nZW1f aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgdjNkX2dlbV9kZXN0cm95KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOworaW50IHYzZF9zdWJtaXRfY2xfaW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsK K2ludCB2M2Rfd2FpdF9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAorCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cit2b2lkIHYzZF9leGVjX3B1 dChzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYyk7Cit2b2lkIHYzZF9yZXNldChzdHJ1Y3QgdjNk X2RldiAqdjNkKTsKK3ZvaWQgdjNkX2ludmFsaWRhdGVfY2FjaGVzKHN0cnVjdCB2M2RfZGV2ICp2 M2QpOwordm9pZCB2M2RfZmx1c2hfY2FjaGVzKHN0cnVjdCB2M2RfZGV2ICp2M2QpOworCisvKiB2 M2RfaXJxLmMgKi8KK3ZvaWQgdjNkX2lycV9pbml0KHN0cnVjdCB2M2RfZGV2ICp2M2QpOwordm9p ZCB2M2RfaXJxX2VuYWJsZShzdHJ1Y3QgdjNkX2RldiAqdjNkKTsKK3ZvaWQgdjNkX2lycV9kaXNh YmxlKHN0cnVjdCB2M2RfZGV2ICp2M2QpOwordm9pZCB2M2RfaXJxX3Jlc2V0KHN0cnVjdCB2M2Rf ZGV2ICp2M2QpOworCisvKiB2M2RfbW11LmMgKi8KK2ludCB2M2RfbW11X2dldF9vZmZzZXQoc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCB2M2RfYm8gKmJvLAorCQkgICAgICAgdTMy ICpvZmZzZXQpOworaW50IHYzZF9tbXVfc2V0X3BhZ2VfdGFibGUoc3RydWN0IHYzZF9kZXYgKnYz ZCk7Cit2b2lkIHYzZF9tbXVfaW5zZXJ0X3B0ZXMoc3RydWN0IHYzZF9ibyAqYm8pOwordm9pZCB2 M2RfbW11X3JlbW92ZV9wdGVzKHN0cnVjdCB2M2RfYm8gKmJvKTsKKworLyogdjNkX3NjaGVkLmMg Ki8KK2ludCB2M2Rfc2NoZWRfaW5pdChzdHJ1Y3QgdjNkX2RldiAqdjNkKTsKK3ZvaWQgdjNkX3Nj aGVkX2Zpbmkoc3RydWN0IHYzZF9kZXYgKnYzZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdjNkL3YzZF9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZmVuY2UuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA4N2Q0OWM4Y2IxMgotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2ZlbmNlLmMKQEAgLTAsMCArMSw1 OCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKiBDb3B5cmlnaHQg KEMpIDIwMTctMjAxOCBCcm9hZGNvbSAqLworCisjaW5jbHVkZSAidjNkX2Rydi5oIgorCitzdHJ1 Y3QgZG1hX2ZlbmNlICp2M2RfZmVuY2VfY3JlYXRlKHN0cnVjdCB2M2RfZGV2ICp2M2QsIGVudW0g djNkX3F1ZXVlIHF1ZXVlKQoreworCXN0cnVjdCB2M2RfZmVuY2UgKmZlbmNlOworCisJZmVuY2Ug PSBremFsbG9jKHNpemVvZigqZmVuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZlbmNlKQorCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWZlbmNlLT5kZXYgPSAmdjNkLT5kcm07CisJZmVu Y2UtPnF1ZXVlID0gcXVldWU7CisJZmVuY2UtPnNlcW5vID0gKyt2M2QtPnF1ZXVlW3F1ZXVlXS5l bWl0X3NlcW5vOworCWRtYV9mZW5jZV9pbml0KCZmZW5jZS0+YmFzZSwgJnYzZF9mZW5jZV9vcHMs ICZ2M2QtPmpvYl9sb2NrLAorCQkgICAgICAgdjNkLT5xdWV1ZVtxdWV1ZV0uZmVuY2VfY29udGV4 dCwgZmVuY2UtPnNlcW5vKTsKKworCXJldHVybiAmZmVuY2UtPmJhc2U7Cit9CisKK3N0YXRpYyBj b25zdCBjaGFyICp2M2RfZmVuY2VfZ2V0X2RyaXZlcl9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZl bmNlKQoreworCXJldHVybiAidjNkIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnYzZF9mZW5j ZV9nZXRfdGltZWxpbmVfbmFtZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlzdHJ1Y3Qg djNkX2ZlbmNlICpmID0gdG9fdjNkX2ZlbmNlKGZlbmNlKTsKKworCWlmIChmLT5xdWV1ZSA9PSBW M0RfQklOKQorCQlyZXR1cm4gInYzZC1iaW4iOworCWVsc2UKKwkJcmV0dXJuICJ2M2QtcmVuZGVy IjsKK30KKworc3RhdGljIGJvb2wgdjNkX2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGRt YV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHYzZF9m ZW5jZV9zaWduYWxlZChzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlzdHJ1Y3QgdjNkX2Zl bmNlICpmID0gdG9fdjNkX2ZlbmNlKGZlbmNlKTsKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9f djNkX2RldihmLT5kZXYpOworCisJcmV0dXJuIHYzZC0+cXVldWVbZi0+cXVldWVdLmZpbmlzaGVk X3NlcW5vID49IGYtPnNlcW5vOworfQorCitjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyB2M2Rf ZmVuY2Vfb3BzID0geworCS5nZXRfZHJpdmVyX25hbWUgPSB2M2RfZmVuY2VfZ2V0X2RyaXZlcl9u YW1lLAorCS5nZXRfdGltZWxpbmVfbmFtZSA9IHYzZF9mZW5jZV9nZXRfdGltZWxpbmVfbmFtZSwK KwkuZW5hYmxlX3NpZ25hbGluZyA9IHYzZF9mZW5jZV9lbmFibGVfc2lnbmFsaW5nLAorCS5zaWdu YWxlZCA9IHYzZF9mZW5jZV9zaWduYWxlZCwKKwkud2FpdCA9IGRtYV9mZW5jZV9kZWZhdWx0X3dh aXQsCisJLnJlbGVhc2UgPSBkbWFfZmVuY2VfZnJlZSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdjNkL3YzZF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2dlbS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZmEzOWExZTM1MjYzCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZ2VtLmMKQEAgLTAsMCArMSw2 NjMgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyogQ29weXJpZ2h0 IChDKSAyMDE0LTIwMTggQnJvYWRjb20gKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9zeW5jb2JqLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGlt ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cisj aW5jbHVkZSA8bGludXgvc2NoZWQvc2lnbmFsLmg+CisKKyNpbmNsdWRlICJ1YXBpL2RybS92M2Rf ZHJtLmgiCisjaW5jbHVkZSAidjNkX2Rydi5oIgorI2luY2x1ZGUgInYzZF9yZWdzLmgiCisjaW5j bHVkZSAidjNkX3RyYWNlLmgiCisKK3N0YXRpYyB2b2lkCit2M2RfaW5pdF9jb3JlKHN0cnVjdCB2 M2RfZGV2ICp2M2QsIGludCBjb3JlKQoreworCS8qIFNldCBPVlJUTVVPVVQsIHdoaWNoIG1lYW5z IHRoYXQgdGhlIHRleHR1cmUgc2FtcGxlciB1bmlmb3JtCisJICogY29uZmlndXJhdGlvbidzIHRt dSBvdXRwdXQgdHlwZSBmaWVsZCBpcyB1c2VkLCBpbnN0ZWFkIG9mCisJICogdXNpbmcgdGhlIGhh cmR3YXJlIGRlZmF1bHQgYmVoYXZpb3IgYmFzZWQgb24gdGhlIHRleHR1cmUKKwkgKiB0eXBlLiAg SWYgeW91IHdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHlvdSBjYW4gc3RpbGwgcHV0CisJICog IjIiIGluIHRoZSBpbmRpcmVjdCB0ZXh0dXJlIHN0YXRlJ3Mgb3V0cHV0X3R5cGUgZmllbGQuCisJ ICovCisJVjNEX0NPUkVfV1JJVEUoY29yZSwgVjNEX0NUTF9NSVNDQ0ZHLCBWM0RfTUlTQ0NGR19P VlJUTVVPVVQpOworCisJLyogV2hlbmV2ZXIgd2UgZmx1c2ggdGhlIEwyVCBjYWNoZSwgd2UgYWx3 YXlzIHdhbnQgdG8gZmx1c2gKKwkgKiB0aGUgd2hvbGUgdGhpbmcuCisJICovCisJVjNEX0NPUkVf V1JJVEUoY29yZSwgVjNEX0NUTF9MMlRGTFNUQSwgMCk7CisJVjNEX0NPUkVfV1JJVEUoY29yZSwg VjNEX0NUTF9MMlRGTEVORCwgfjApOworfQorCisvKiBTZXRzIGludmFyaWFudCBzdGF0ZSBmb3Ig dGhlIEhXLiAqLworc3RhdGljIHZvaWQKK3YzZF9pbml0X2h3X3N0YXRlKHN0cnVjdCB2M2RfZGV2 ICp2M2QpCit7CisJdjNkX2luaXRfY29yZSh2M2QsIDApOworfQorCitzdGF0aWMgdm9pZAordjNk X2lkbGVfYXhpKHN0cnVjdCB2M2RfZGV2ICp2M2QsIGludCBjb3JlKQoreworCVYzRF9DT1JFX1dS SVRFKGNvcmUsIFYzRF9HTVBfQ0ZHLCBWM0RfR01QX0NGR19TVE9QX1JFUSk7CisKKwlpZiAod2Fp dF9mb3IoKFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0dNUF9TVEFUVVMpICYKKwkJICAgICAgKFYz RF9HTVBfU1RBVFVTX1JEX0NPVU5UX01BU0sgfAorCQkgICAgICAgVjNEX0dNUF9TVEFUVVNfV1Jf Q09VTlRfTUFTSyB8CisJCSAgICAgICBWM0RfR01QX1NUQVRVU19DRkdfQlVTWSkpID09IDAsIDEw MCkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gd2FpdCBmb3Igc2FmZSBHTVAgc2h1dGRvd25c biIpOworCX0KK30KKworc3RhdGljIHZvaWQKK3YzZF9pZGxlX2djYShzdHJ1Y3QgdjNkX2RldiAq djNkKQoreworCWlmICh2M2QtPnZlciA+PSA0MSkKKwkJcmV0dXJuOworCisJVjNEX0dDQV9XUklU RShWM0RfR0NBX1NBRkVfU0hVVERPV04sIFYzRF9HQ0FfU0FGRV9TSFVURE9XTl9FTik7CisKKwlp ZiAod2FpdF9mb3IoKFYzRF9HQ0FfUkVBRChWM0RfR0NBX1NBRkVfU0hVVERPV05fQUNLKSAmCisJ CSAgICAgIFYzRF9HQ0FfU0FGRV9TSFVURE9XTl9BQ0tfQUNLRUQpID09CisJCSAgICAgVjNEX0dD QV9TQUZFX1NIVVRET1dOX0FDS19BQ0tFRCwgMTAwKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0 byB3YWl0IGZvciBzYWZlIEdDQSBzaHV0ZG93blxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZAor djNkX3Jlc2V0X3YzZChzdHJ1Y3QgdjNkX2RldiAqdjNkKQoreworCWludCB2ZXJzaW9uID0gVjNE X0JSSURHRV9SRUFEKFYzRF9UT1BfR1JfQlJJREdFX1JFVklTSU9OKTsKKworCWlmIChWM0RfR0VU X0ZJRUxEKHZlcnNpb24sIFYzRF9UT1BfR1JfQlJJREdFX01BSk9SKSA9PSAyKSB7CisJCVYzRF9C UklER0VfV1JJVEUoVjNEX1RPUF9HUl9CUklER0VfU1dfSU5JVF8wLAorCQkJCSBWM0RfVE9QX0dS X0JSSURHRV9TV19JTklUXzBfVjNEX0NMS18xMDhfU1dfSU5JVCk7CisJCVYzRF9CUklER0VfV1JJ VEUoVjNEX1RPUF9HUl9CUklER0VfU1dfSU5JVF8wLCAwKTsKKworCQkvKiBHRlhILTEzODM6IFRo ZSBTV19JTklUIG1heSBjYXVzZSBhIHN0cmF5IHdyaXRlIHRvIGFkZHJlc3MgMAorCQkgKiBvZiB0 aGUgdW5pdCwgc28gcmVzZXQgaXQgdG8gaXRzIHBvd2VyLW9uIHZhbHVlIGhlcmUuCisJCSAqLwor CQlWM0RfV1JJVEUoVjNEX0hVQl9BWElDRkcsIFYzRF9IVUJfQVhJQ0ZHX01BWF9MRU5fTUFTSyk7 CisJfSBlbHNlIHsKKwkJV0FSTl9PTl9PTkNFKFYzRF9HRVRfRklFTEQodmVyc2lvbiwKKwkJCQkJ ICAgVjNEX1RPUF9HUl9CUklER0VfTUFKT1IpICE9IDcpOworCQlWM0RfQlJJREdFX1dSSVRFKFYz RF9UT1BfR1JfQlJJREdFX1NXX0lOSVRfMSwKKwkJCQkgVjNEX1RPUF9HUl9CUklER0VfU1dfSU5J VF8xX1YzRF9DTEtfMTA4X1NXX0lOSVQpOworCQlWM0RfQlJJREdFX1dSSVRFKFYzRF9UT1BfR1Jf QlJJREdFX1NXX0lOSVRfMSwgMCk7CisJfQorCisJdjNkX2luaXRfaHdfc3RhdGUodjNkKTsKK30K Kwordm9pZAordjNkX3Jlc2V0KHN0cnVjdCB2M2RfZGV2ICp2M2QpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9ICZ2M2QtPmRybTsKKworCURSTV9FUlJPUigiUmVzZXR0aW5nIEdQVS5cbiIp OworCXRyYWNlX3YzZF9yZXNldF9iZWdpbihkZXYpOworCisJLyogWFhYOiBvbmx5IG5lZWRlZCBm b3Igc2FmZSBwb3dlcmRvd24sIG5vdCByZXNldC4gKi8KKwlpZiAoZmFsc2UpCisJCXYzZF9pZGxl X2F4aSh2M2QsIDApOworCisJdjNkX2lkbGVfZ2NhKHYzZCk7CisJdjNkX3Jlc2V0X3YzZCh2M2Qp OworCisJdjNkX21tdV9zZXRfcGFnZV90YWJsZSh2M2QpOworCXYzZF9pcnFfcmVzZXQodjNkKTsK KworCXRyYWNlX3YzZF9yZXNldF9lbmQoZGV2KTsKK30KKworc3RhdGljIHZvaWQKK3YzZF9mbHVz aF9sMyhzdHJ1Y3QgdjNkX2RldiAqdjNkKQoreworCWlmICh2M2QtPnZlciA8IDQxKSB7CisJCXUz MiBnY2FfY3RybCA9IFYzRF9HQ0FfUkVBRChWM0RfR0NBX0NBQ0hFX0NUUkwpOworCisJCVYzRF9H Q0FfV1JJVEUoVjNEX0dDQV9DQUNIRV9DVFJMLAorCQkJICAgICAgZ2NhX2N0cmwgfCBWM0RfR0NB X0NBQ0hFX0NUUkxfRkxVU0gpOworCisJCWlmICh2M2QtPnZlciA8IDMzKSB7CisJCQlWM0RfR0NB X1dSSVRFKFYzRF9HQ0FfQ0FDSEVfQ1RSTCwKKwkJCQkgICAgICBnY2FfY3RybCAmIH5WM0RfR0NB X0NBQ0hFX0NUUkxfRkxVU0gpOworCQl9CisJfQorfQorCisvKiBJbnZhbGlkYXRlcyB0aGUgKHJl YWQtb25seSkgTDIgY2FjaGUuICovCitzdGF0aWMgdm9pZAordjNkX2ludmFsaWRhdGVfbDIoc3Ry dWN0IHYzZF9kZXYgKnYzZCwgaW50IGNvcmUpCit7CisJVjNEX0NPUkVfV1JJVEUoY29yZSwgVjNE X0NUTF9MMkNBQ1RMLAorCQkgICAgICAgVjNEX0wyQ0FDVExfTDJDQ0xSIHwKKwkJICAgICAgIFYz RF9MMkNBQ1RMX0wyQ0VOQSk7Cit9CisKK3N0YXRpYyB2b2lkCit2M2RfaW52YWxpZGF0ZV9sMXRk KHN0cnVjdCB2M2RfZGV2ICp2M2QsIGludCBjb3JlKQoreworCVYzRF9DT1JFX1dSSVRFKGNvcmUs IFYzRF9DVExfTDJUQ0FDVEwsIFYzRF9MMlRDQUNUTF9UTVVXQ0YpOworCWlmICh3YWl0X2Zvcigh KFYzRF9DT1JFX1JFQUQoY29yZSwgVjNEX0NUTF9MMlRDQUNUTCkgJgorCQkgICAgICAgVjNEX0wy VENBQ1RMX0wyVEZMUyksIDEwMCkpIHsKKwkJRFJNX0VSUk9SKCJUaW1lb3V0IHdhaXRpbmcgZm9y IEwxVCB3cml0ZSBjb21iaW5lciBmbHVzaFxuIik7CisJfQorfQorCisvKiBJbnZhbGlkYXRlcyB0 ZXh0dXJlIEwyIGNhY2hlbGluZXMgKi8KK3N0YXRpYyB2b2lkCit2M2RfZmx1c2hfbDJ0KHN0cnVj dCB2M2RfZGV2ICp2M2QsIGludCBjb3JlKQoreworCXYzZF9pbnZhbGlkYXRlX2wxdGQodjNkLCBj b3JlKTsKKworCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9DVExfTDJUQ0FDVEwsCisJCSAgICAg ICBWM0RfTDJUQ0FDVExfTDJURkxTIHwKKwkJICAgICAgIFYzRF9TRVRfRklFTEQoVjNEX0wyVENB Q1RMX0ZMTV9GTFVTSCwgVjNEX0wyVENBQ1RMX0ZMTSkpOworCWlmICh3YWl0X2ZvcighKFYzRF9D T1JFX1JFQUQoY29yZSwgVjNEX0NUTF9MMlRDQUNUTCkgJgorCQkgICAgICAgVjNEX0wyVENBQ1RM X0wyVEZMUyksIDEwMCkpIHsKKwkJRFJNX0VSUk9SKCJUaW1lb3V0IHdhaXRpbmcgZm9yIEwyVCBm bHVzaFxuIik7CisJfQorfQorCisvKiBJbnZhbGlkYXRlcyB0aGUgc2xpY2UgY2FjaGVzLiAgVGhl c2UgYXJlIHJlYWQtb25seSBjYWNoZXMuICovCitzdGF0aWMgdm9pZAordjNkX2ludmFsaWRhdGVf c2xpY2VzKHN0cnVjdCB2M2RfZGV2ICp2M2QsIGludCBjb3JlKQoreworCVYzRF9DT1JFX1dSSVRF KGNvcmUsIFYzRF9DVExfU0xDQUNUTCwKKwkJICAgICAgIFYzRF9TRVRfRklFTEQoMHhmLCBWM0Rf U0xDQUNUTF9UVkNDUykgfAorCQkgICAgICAgVjNEX1NFVF9GSUVMRCgweGYsIFYzRF9TTENBQ1RM X1REQ0NTKSB8CisJCSAgICAgICBWM0RfU0VUX0ZJRUxEKDB4ZiwgVjNEX1NMQ0FDVExfVUNDKSB8 CisJCSAgICAgICBWM0RfU0VUX0ZJRUxEKDB4ZiwgVjNEX1NMQ0FDVExfSUNDKSk7Cit9CisKKy8q IEludmFsaWRhdGVzIHRleHR1cmUgTDIgY2FjaGVsaW5lcyAqLworc3RhdGljIHZvaWQKK3YzZF9p bnZhbGlkYXRlX2wydChzdHJ1Y3QgdjNkX2RldiAqdjNkLCBpbnQgY29yZSkKK3sKKwlWM0RfQ09S RV9XUklURShjb3JlLAorCQkgICAgICAgVjNEX0NUTF9MMlRDQUNUTCwKKwkJICAgICAgIFYzRF9M MlRDQUNUTF9MMlRGTFMgfAorCQkgICAgICAgVjNEX1NFVF9GSUVMRChWM0RfTDJUQ0FDVExfRkxN X0NMRUFSLCBWM0RfTDJUQ0FDVExfRkxNKSk7CisJaWYgKHdhaXRfZm9yKCEoVjNEX0NPUkVfUkVB RChjb3JlLCBWM0RfQ1RMX0wyVENBQ1RMKSAmCisJCSAgICAgICBWM0RfTDJUQ0FDVExfTDJURkxT KSwgMTAwKSkgeworCQlEUk1fRVJST1IoIlRpbWVvdXQgd2FpdGluZyBmb3IgTDJUIGludmFsaWRh dGVcbiIpOworCX0KK30KKwordm9pZAordjNkX2ludmFsaWRhdGVfY2FjaGVzKHN0cnVjdCB2M2Rf ZGV2ICp2M2QpCit7CisJdjNkX2ZsdXNoX2wzKHYzZCk7CisKKwl2M2RfaW52YWxpZGF0ZV9sMih2 M2QsIDApOworCXYzZF9pbnZhbGlkYXRlX3NsaWNlcyh2M2QsIDApOworCXYzZF9mbHVzaF9sMnQo djNkLCAwKTsKK30KKwordm9pZAordjNkX2ZsdXNoX2NhY2hlcyhzdHJ1Y3QgdjNkX2RldiAqdjNk KQoreworCXYzZF9pbnZhbGlkYXRlX2wxdGQodjNkLCAwKTsKKwl2M2RfaW52YWxpZGF0ZV9sMnQo djNkLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3YzZF9hdHRhY2hfb2JqZWN0X2ZlbmNlcyhzdHJ1 Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYykKK3sKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpvdXRfZmVuY2Ug PSAmZXhlYy0+cmVuZGVyLmJhc2Uuc19mZW5jZS0+ZmluaXNoZWQ7CisJc3RydWN0IHYzZF9ibyAq Ym87CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZXhlYy0+Ym9fY291bnQ7IGkrKykgewor CQlibyA9IHRvX3YzZF9ibygmZXhlYy0+Ym9baV0tPmJhc2UpOworCisJCS8qIFhYWDogVXNlIHNo YXJlZCBmZW5jZXMgZm9yIHJlYWQtb25seSBvYmplY3RzLiAqLworCQlyZXNlcnZhdGlvbl9vYmpl Y3RfYWRkX2V4Y2xfZmVuY2UoYm8tPnJlc3YsIG91dF9mZW5jZSk7CisJfQorfQorCitzdGF0aWMg dm9pZAordjNkX3VubG9ja19ib19yZXNlcnZhdGlvbnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCSAgIHN0cnVjdCB2M2RfZXhlY19pbmZvICpleGVjLAorCQkJICAgc3RydWN0IHd3X2FjcXVp cmVfY3R4ICphY3F1aXJlX2N0eCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBleGVj LT5ib19jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB2M2RfYm8gKmJvID0gdG9fdjNkX2JvKCZleGVj LT5ib1tpXS0+YmFzZSk7CisKKwkJd3dfbXV0ZXhfdW5sb2NrKCZiby0+cmVzdi0+bG9jayk7CisJ fQorCisJd3dfYWNxdWlyZV9maW5pKGFjcXVpcmVfY3R4KTsKK30KKworLyogVGFrZXMgdGhlIHJl c2VydmF0aW9uIGxvY2sgb24gYWxsIHRoZSBCT3MgYmVpbmcgcmVmZXJlbmNlZCwgc28gdGhhdAor ICogYXQgcXVldWUgc3VibWl0IHRpbWUgd2UgY2FuIHVwZGF0ZSB0aGUgcmVzZXJ2YXRpb25zLgor ICoKKyAqIFdlIGRvbid0IGxvY2sgdGhlIFJDTCB0aGUgdGlsZSBhbGxvYy9zdGF0ZSBCT3MsIG9y IG92ZXJmbG93IG1lbW9yeQorICogKGFsbCBvZiB3aGljaCBhcmUgb24gZXhlYy0+dW5yZWZfbGlz dCkuICBUaGV5J3JlIGVudGlyZWx5IHByaXZhdGUKKyAqIHRvIHYzZCwgc28gd2UgZG9uJ3QgYXR0 YWNoIGRtYS1idWYgZmVuY2VzIHRvIHRoZW0uCisgKi8KK3N0YXRpYyBpbnQKK3YzZF9sb2NrX2Jv X3Jlc2VydmF0aW9ucyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCB2M2RfZXhl Y19pbmZvICpleGVjLAorCQkJIHN0cnVjdCB3d19hY3F1aXJlX2N0eCAqYWNxdWlyZV9jdHgpCit7 CisJaW50IGNvbnRlbmRlZF9sb2NrID0gLTE7CisJaW50IGksIHJldDsKKwlzdHJ1Y3QgdjNkX2Jv ICpibzsKKworCXd3X2FjcXVpcmVfaW5pdChhY3F1aXJlX2N0eCwgJnJlc2VydmF0aW9uX3d3X2Ns YXNzKTsKKworcmV0cnk6CisJaWYgKGNvbnRlbmRlZF9sb2NrICE9IC0xKSB7CisJCWJvID0gdG9f djNkX2JvKCZleGVjLT5ib1tjb250ZW5kZWRfbG9ja10tPmJhc2UpOworCQlyZXQgPSB3d19tdXRl eF9sb2NrX3Nsb3dfaW50ZXJydXB0aWJsZSgmYm8tPnJlc3YtPmxvY2ssCisJCQkJCQkgICAgICAg YWNxdWlyZV9jdHgpOworCQlpZiAocmV0KSB7CisJCQl3d19hY3F1aXJlX2RvbmUoYWNxdWlyZV9j dHgpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBleGVjLT5i b19jb3VudDsgaSsrKSB7CisJCWlmIChpID09IGNvbnRlbmRlZF9sb2NrKQorCQkJY29udGludWU7 CisKKwkJYm8gPSB0b192M2RfYm8oJmV4ZWMtPmJvW2ldLT5iYXNlKTsKKworCQlyZXQgPSB3d19t dXRleF9sb2NrX2ludGVycnVwdGlibGUoJmJvLT5yZXN2LT5sb2NrLCBhY3F1aXJlX2N0eCk7CisJ CWlmIChyZXQpIHsKKwkJCWludCBqOworCisJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisJ CQkJYm8gPSB0b192M2RfYm8oJmV4ZWMtPmJvW2pdLT5iYXNlKTsKKwkJCQl3d19tdXRleF91bmxv Y2soJmJvLT5yZXN2LT5sb2NrKTsKKwkJCX0KKworCQkJaWYgKGNvbnRlbmRlZF9sb2NrICE9IC0x ICYmIGNvbnRlbmRlZF9sb2NrID49IGkpIHsKKwkJCQlibyA9IHRvX3YzZF9ibygmZXhlYy0+Ym9b Y29udGVuZGVkX2xvY2tdLT5iYXNlKTsKKworCQkJCXd3X211dGV4X3VubG9jaygmYm8tPnJlc3Yt PmxvY2spOworCQkJfQorCisJCQlpZiAocmV0ID09IC1FREVBRExLKSB7CisJCQkJY29udGVuZGVk X2xvY2sgPSBpOworCQkJCWdvdG8gcmV0cnk7CisJCQl9CisKKwkJCXd3X2FjcXVpcmVfZG9uZShh Y3F1aXJlX2N0eCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJd3dfYWNxdWlyZV9kb25l KGFjcXVpcmVfY3R4KTsKKworCS8qIFJlc2VydmUgc3BhY2UgZm9yIG91ciBzaGFyZWQgKHJlYWQt b25seSkgZmVuY2UgcmVmZXJlbmNlcywKKwkgKiBiZWZvcmUgd2UgY29tbWl0IHRoZSBDTCB0byB0 aGUgaGFyZHdhcmUuCisJICovCisJZm9yIChpID0gMDsgaSA8IGV4ZWMtPmJvX2NvdW50OyBpKysp IHsKKwkJYm8gPSB0b192M2RfYm8oJmV4ZWMtPmJvW2ldLT5iYXNlKTsKKworCQlyZXQgPSByZXNl cnZhdGlvbl9vYmplY3RfcmVzZXJ2ZV9zaGFyZWQoYm8tPnJlc3YpOworCQlpZiAocmV0KSB7CisJ CQl2M2RfdW5sb2NrX2JvX3Jlc2VydmF0aW9ucyhkZXYsIGV4ZWMsIGFjcXVpcmVfY3R4KTsKKwkJ CXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2M2RfY2xf bG9va3VwX2JvcygpIC0gU2V0cyB1cCBleGVjLT5ib1tdIHdpdGggdGhlIEdFTSBvYmplY3RzCisg KiByZWZlcmVuY2VkIGJ5IHRoZSBqb2IuCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAZmlsZV9w cml2OiBEUk0gZmlsZSBmb3IgdGhpcyBmZAorICogQGV4ZWM6IFYzRCBqb2IgYmVpbmcgc2V0IHVw CisgKgorICogVGhlIGNvbW1hbmQgdmFsaWRhdG9yIG5lZWRzIHRvIHJlZmVyZW5jZSBCT3MgYnkg dGhlaXIgaW5kZXggd2l0aGluCisgKiB0aGUgc3VibWl0dGVkIGpvYidzIEJPIGxpc3QuICBUaGlz IGRvZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGpvYidzCisgKiBCTyBsaXN0IGFuZCByZWZlcmVu Y2UgY291bnRpbmcgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgam9iLgorICoKKyAqIE5vdGUgdGhh dCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byB1bnJlZmVyZW5jZSB0aGUgQk9zIG9uCisg KiBmYWlsdXJlLCBiZWNhdXNlIHRoYXQgd2lsbCBoYXBwZW4gYXQgdjNkX2V4ZWNfY2xlYW51cCgp IHRpbWUuCisgKi8KK3N0YXRpYyBpbnQKK3YzZF9jbF9sb29rdXBfYm9zKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCisJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgc3RydWN0IGRy bV92M2Rfc3VibWl0X2NsICphcmdzLAorCQkgIHN0cnVjdCB2M2RfZXhlY19pbmZvICpleGVjKQor eworCXUzMiAqaGFuZGxlczsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWV4ZWMtPmJvX2Nv dW50ID0gYXJncy0+Ym9faGFuZGxlX2NvdW50OworCisJaWYgKCFleGVjLT5ib19jb3VudCkgewor CQkvKiBTZWUgY29tbWVudCBvbiBib19pbmRleCBmb3Igd2h5IHdlIGhhdmUgdG8gY2hlY2sKKwkJ ICogdGhpcy4KKwkJICovCisJCURSTV9ERUJVRygiUmVuZGVyaW5nIHJlcXVpcmVzIEJPc1xuIik7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWV4ZWMtPmJvID0ga3ZtYWxsb2NfYXJyYXkoZXhl Yy0+Ym9fY291bnQsCisJCQkJICBzaXplb2Yoc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqKSwK KwkJCQkgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwlpZiAoIWV4ZWMtPmJvKSB7CisJCURS TV9ERUJVRygiRmFpbGVkIHRvIGFsbG9jYXRlIHZhbGlkYXRlZCBCTyBwb2ludGVyc1xuIik7CisJ CXJldHVybiAtRU5PTUVNOworCX0KKworCWhhbmRsZXMgPSBrdm1hbGxvY19hcnJheShleGVjLT5i b19jb3VudCwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCWlmICghaGFuZGxlcykgeworCQly ZXQgPSAtRU5PTUVNOworCQlEUk1fREVCVUcoIkZhaWxlZCB0byBhbGxvY2F0ZSBpbmNvbWluZyBH RU0gaGFuZGxlc1xuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIo aGFuZGxlcywKKwkJCSAgICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpYXJncy0+Ym9faGFuZGxl cywKKwkJCSAgIGV4ZWMtPmJvX2NvdW50ICogc2l6ZW9mKHUzMikpKSB7CisJCXJldCA9IC1FRkFV TFQ7CisJCURSTV9ERUJVRygiRmFpbGVkIHRvIGNvcHkgaW4gR0VNIGhhbmRsZXNcbiIpOworCQln b3RvIGZhaWw7CisJfQorCisJc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOworCWZv ciAoaSA9IDA7IGkgPCBleGVjLT5ib19jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqYm8gPSBpZHJfZmluZCgmZmlsZV9wcml2LT5vYmplY3RfaWRyLAorCQkJCQkJICAgICBo YW5kbGVzW2ldKTsKKwkJaWYgKCFibykgeworCQkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gbG9vayB1 cCBHRU0gQk8gJWQ6ICVkXG4iLAorCQkJCSAgaSwgaGFuZGxlc1tpXSk7CisJCQlyZXQgPSAtRU5P RU5UOworCQkJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7CisJCQlnb3RvIGZh aWw7CisJCX0KKwkJZHJtX2dlbV9vYmplY3RfZ2V0KGJvKTsKKwkJZXhlYy0+Ym9baV0gPSB0b192 M2RfYm8oYm8pOworCX0KKwlzcGluX3VubG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKKwor ZmFpbDoKKwlrdmZyZWUoaGFuZGxlcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQK K3YzZF9leGVjX2NsZWFudXAoc3RydWN0IGtyZWYgKnJlZikKK3sKKwlzdHJ1Y3QgdjNkX2V4ZWNf aW5mbyAqZXhlYyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCB2M2RfZXhlY19pbmZvLAorCQkJ CQkJICByZWZjb3VudCk7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9IGV4ZWMtPnYzZDsKKwl1bnNp Z25lZCBpbnQgaTsKKwlzdHJ1Y3QgdjNkX2JvICpibywgKnNhdmU7CisKKwlkbWFfZmVuY2VfcHV0 KGV4ZWMtPmJpbi5pbl9mZW5jZSk7CisJZG1hX2ZlbmNlX3B1dChleGVjLT5yZW5kZXIuaW5fZmVu Y2UpOworCisJZG1hX2ZlbmNlX3B1dChleGVjLT5iaW4uZG9uZV9mZW5jZSk7CisJZG1hX2ZlbmNl X3B1dChleGVjLT5yZW5kZXIuZG9uZV9mZW5jZSk7CisKKwlkbWFfZmVuY2VfcHV0KGV4ZWMtPmJp bl9kb25lX2ZlbmNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBleGVjLT5ib19jb3VudDsgaSsrKQor CQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJmV4ZWMtPmJvW2ldLT5iYXNlKTsKKwlrdmZy ZWUoZXhlYy0+Ym8pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJvLCBzYXZlLCAmZXhl Yy0+dW5yZWZfbGlzdCwgdW5yZWZfaGVhZCkgeworCQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2Nr ZWQoJmJvLT5iYXNlKTsKKwl9CisKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KHYzZC0+ZGV2 KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCh2M2QtPmRldik7CisKKwlrZnJlZShleGVj KTsKK30KKwordm9pZCB2M2RfZXhlY19wdXQoc3RydWN0IHYzZF9leGVjX2luZm8gKmV4ZWMpCit7 CisJa3JlZl9wdXQoJmV4ZWMtPnJlZmNvdW50LCB2M2RfZXhlY19jbGVhbnVwKTsKK30KKworaW50 Cit2M2Rfd2FpdF9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAor CQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWludCByZXQ7CisJc3RydWN0IGRy bV92M2Rfd2FpdF9ibyAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1f b2JqOworCXN0cnVjdCB2M2RfYm8gKmJvOworCWt0aW1lX3Qgc3RhcnQgPSBrdGltZV9nZXQoKTsK Kwl1NjQgZGVsdGFfbnM7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0X2ppZmZpZXMgPQorCQluc2Vj c190b19qaWZmaWVzX3RpbWVvdXQoYXJncy0+dGltZW91dF9ucyk7CisKKwlpZiAoYXJncy0+cGFk ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZ2VtX29iaiA9IGRybV9nZW1fb2JqZWN0X2xv b2t1cChmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKCFnZW1fb2JqKSB7CisJCURSTV9E RUJVRygiRmFpbGVkIHRvIGxvb2sgdXAgR0VNIEJPICVkXG4iLCBhcmdzLT5oYW5kbGUpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisJYm8gPSB0b192M2RfYm8oZ2VtX29iaik7CisKKwlyZXQgPSBy ZXNlcnZhdGlvbl9vYmplY3Rfd2FpdF90aW1lb3V0X3JjdShiby0+cmVzdiwKKwkJCQkJCSAgdHJ1 ZSwgdHJ1ZSwKKwkJCQkJCSAgdGltZW91dF9qaWZmaWVzKTsKKworCWlmIChyZXQgPT0gMCkKKwkJ cmV0ID0gLUVUSU1FOworCWVsc2UgaWYgKHJldCA+IDApCisJCXJldCA9IDA7CisKKwkvKiBEZWNy ZW1lbnQgdGhlIHVzZXIncyB0aW1lb3V0LCBpbiBjYXNlIHdlIGdvdCBpbnRlcnJ1cHRlZAorCSAq IHN1Y2ggdGhhdCB0aGUgaW9jdGwgd2lsbCBiZSByZXN0YXJ0ZWQuCisJICovCisJZGVsdGFfbnMg PSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfZ2V0KCksIHN0YXJ0KSk7CisJaWYgKGRlbHRh X25zIDwgYXJncy0+dGltZW91dF9ucykKKwkJYXJncy0+dGltZW91dF9ucyAtPSBkZWx0YV9uczsK KwllbHNlCisJCWFyZ3MtPnRpbWVvdXRfbnMgPSAwOworCisJLyogQXNrZWQgdG8gd2FpdCBiZXlv bmQgdGhlIGppZmZpZS9zY2hlZHVsZXIgcHJlY2lzaW9uPyAqLworCWlmIChyZXQgPT0gLUVUSU1F ICYmIGFyZ3MtPnRpbWVvdXRfbnMpCisJCXJldCA9IC1FQUdBSU47CisKKwlkcm1fZ2VtX29iamVj dF9wdXRfdW5sb2NrZWQoZ2VtX29iaik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHYz ZF9zdWJtaXRfY2xfaW9jdGwoKSAtIFN1Ym1pdHMgYSBqb2IgKGZyYW1lKSB0byB0aGUgVjNELgor ICogQGRldjogRFJNIGRldmljZQorICogQGRhdGE6IGlvY3RsIGFyZ3VtZW50CisgKiBAZmlsZV9w cml2OiBEUk0gZmlsZSBmb3IgdGhpcyBmZAorICoKKyAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnlw b2ludCBmb3IgdXNlcnNwYWNlIHRvIHN1Ym1pdCBhIDNEIGZyYW1lIHRvCisgKiB0aGUgR1BVLiAg VXNlcnNwYWNlIHByb3ZpZGVzIHRoZSBiaW5uZXIgY29tbWFuZCBsaXN0IChpZgorICogYXBwbGlj YWJsZSksIGFuZCB0aGUga2VybmVsIHNldHMgdXAgdGhlIHJlbmRlciBjb21tYW5kIGxpc3QgdG8g ZHJhdworICogdG8gdGhlIGZyYW1lYnVmZmVyIGRlc2NyaWJlZCBpbiB0aGUgaW9jdGwsIHVzaW5n IHRoZSBjb21tYW5kIGxpc3RzCisgKiB0aGF0IHRoZSAzRCBlbmdpbmUncyBiaW5uZXIgd2lsbCBw cm9kdWNlLgorICovCitpbnQKK3YzZF9zdWJtaXRfY2xfaW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQorewor CXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRldik7CisJc3RydWN0IHYzZF9maWxl X3ByaXYgKnYzZF9wcml2ID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKKwlzdHJ1Y3QgZHJtX3Yz ZF9zdWJtaXRfY2wgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCB2M2RfZXhlY19pbmZvICpleGVjOwor CXN0cnVjdCB3d19hY3F1aXJlX2N0eCBhY3F1aXJlX2N0eDsKKwlzdHJ1Y3QgZHJtX3N5bmNvYmog KnN5bmNfb3V0OworCWludCByZXQgPSAwOworCisJZXhlYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpl eGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFleGVjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJl dCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmModjNkLT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWtm cmVlKGV4ZWMpOworCQlyZXR1cm4gcmV0OworCX0KKworCWtyZWZfaW5pdCgmZXhlYy0+cmVmY291 bnQpOworCisJcmV0ID0gZHJtX3N5bmNvYmpfZmluZF9mZW5jZShmaWxlX3ByaXYsIGFyZ3MtPmlu X3N5bmNfYmNsLAorCQkJCSAgICAgJmV4ZWMtPmJpbi5pbl9mZW5jZSk7CisJaWYgKHJldCA9PSAt RUlOVkFMKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBkcm1fc3luY29ial9maW5kX2ZlbmNlKGZp bGVfcHJpdiwgYXJncy0+aW5fc3luY19yY2wsCisJCQkJICAgICAmZXhlYy0+cmVuZGVyLmluX2Zl bmNlKTsKKwlpZiAocmV0ID09IC1FSU5WQUwpCisJCWdvdG8gZmFpbDsKKworCWV4ZWMtPnFtYSA9 IGFyZ3MtPnFtYTsKKwlleGVjLT5xbXMgPSBhcmdzLT5xbXM7CisJZXhlYy0+cXRzID0gYXJncy0+ cXRzOworCWV4ZWMtPmJpbi5leGVjID0gZXhlYzsKKwlleGVjLT5iaW4uc3RhcnQgPSBhcmdzLT5i Y2xfc3RhcnQ7CisJZXhlYy0+YmluLmVuZCA9IGFyZ3MtPmJjbF9lbmQ7CisJZXhlYy0+cmVuZGVy LmV4ZWMgPSBleGVjOworCWV4ZWMtPnJlbmRlci5zdGFydCA9IGFyZ3MtPnJjbF9zdGFydDsKKwll eGVjLT5yZW5kZXIuZW5kID0gYXJncy0+cmNsX2VuZDsKKwlleGVjLT52M2QgPSB2M2Q7CisJSU5J VF9MSVNUX0hFQUQoJmV4ZWMtPnVucmVmX2xpc3QpOworCisJcmV0ID0gdjNkX2NsX2xvb2t1cF9i b3MoZGV2LCBmaWxlX3ByaXYsIGFyZ3MsIGV4ZWMpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsK KworCXJldCA9IHYzZF9sb2NrX2JvX3Jlc2VydmF0aW9ucyhkZXYsIGV4ZWMsICZhY3F1aXJlX2N0 eCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJaWYgKGV4ZWMtPmJpbi5zdGFydCAhPSBl eGVjLT5iaW4uZW5kKSB7CisJCXJldCA9IGRybV9zY2hlZF9qb2JfaW5pdCgmZXhlYy0+YmluLmJh c2UsCisJCQkJCSAmdjNkLT5xdWV1ZVtWM0RfQklOXS5zY2hlZCwKKwkJCQkJICZ2M2RfcHJpdi0+ c2NoZWRfZW50aXR5W1YzRF9CSU5dLAorCQkJCQkgdjNkX3ByaXYpOworCQlpZiAocmV0KQorCQkJ Z290byBmYWlsX3VucmVzZXJ2ZTsKKworCQlleGVjLT5iaW5fZG9uZV9mZW5jZSA9CisJCQlkbWFf ZmVuY2VfZ2V0KCZleGVjLT5iaW4uYmFzZS5zX2ZlbmNlLT5maW5pc2hlZCk7CisKKwkJa3JlZl9n ZXQoJmV4ZWMtPnJlZmNvdW50KTsgLyogcHV0IGJ5IHNjaGVkdWxlciBqb2IgY29tcGxldGlvbiAq LworCQlkcm1fc2NoZWRfZW50aXR5X3B1c2hfam9iKCZleGVjLT5iaW4uYmFzZSwKKwkJCQkJICAm djNkX3ByaXYtPnNjaGVkX2VudGl0eVtWM0RfQklOXSk7CisJfQorCisJcmV0ID0gZHJtX3NjaGVk X2pvYl9pbml0KCZleGVjLT5yZW5kZXIuYmFzZSwKKwkJCQkgJnYzZC0+cXVldWVbVjNEX1JFTkRF Ul0uc2NoZWQsCisJCQkJICZ2M2RfcHJpdi0+c2NoZWRfZW50aXR5W1YzRF9SRU5ERVJdLAorCQkJ CSB2M2RfcHJpdik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX3VucmVzZXJ2ZTsKKworCWtyZWZf Z2V0KCZleGVjLT5yZWZjb3VudCk7IC8qIHB1dCBieSBzY2hlZHVsZXIgam9iIGNvbXBsZXRpb24g Ki8KKwlkcm1fc2NoZWRfZW50aXR5X3B1c2hfam9iKCZleGVjLT5yZW5kZXIuYmFzZSwKKwkJCQkg ICZ2M2RfcHJpdi0+c2NoZWRfZW50aXR5W1YzRF9SRU5ERVJdKTsKKworCXYzZF9hdHRhY2hfb2Jq ZWN0X2ZlbmNlcyhleGVjKTsKKworCXYzZF91bmxvY2tfYm9fcmVzZXJ2YXRpb25zKGRldiwgZXhl YywgJmFjcXVpcmVfY3R4KTsKKworCS8qIFVwZGF0ZSB0aGUgcmV0dXJuIHN5bmMgb2JqZWN0IGZv ciB0aGUgKi8KKwlzeW5jX291dCA9IGRybV9zeW5jb2JqX2ZpbmQoZmlsZV9wcml2LCBhcmdzLT5v dXRfc3luYyk7CisJaWYgKHN5bmNfb3V0KSB7CisJCWRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uo c3luY19vdXQsCisJCQkJCSAgJmV4ZWMtPnJlbmRlci5iYXNlLnNfZmVuY2UtPmZpbmlzaGVkKTsK KwkJZHJtX3N5bmNvYmpfcHV0KHN5bmNfb3V0KTsKKwl9CisKKwl2M2RfZXhlY19wdXQoZXhlYyk7 CisKKwlyZXR1cm4gMDsKKworZmFpbF91bnJlc2VydmU6CisJdjNkX3VubG9ja19ib19yZXNlcnZh dGlvbnMoZGV2LCBleGVjLCAmYWNxdWlyZV9jdHgpOworZmFpbDoKKwl2M2RfZXhlY19wdXQoZXhl Yyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK3YzZF9nZW1faW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRldik7CisJ dTMyIHB0X3NpemUgPSA0MDk2ICogMTAyNDsKKwlpbnQgcmV0LCBpOworCisJZm9yIChpID0gMDsg aSA8IFYzRF9NQVhfUVVFVUVTOyBpKyspCisJCXYzZC0+cXVldWVbaV0uZmVuY2VfY29udGV4dCA9 IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpOworCisJc3Bpbl9sb2NrX2luaXQoJnYzZC0+bW1f bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnYzZC0+am9iX2xvY2spOworCW11dGV4X2luaXQoJnYz ZC0+Ym9fbG9jayk7CisJbXV0ZXhfaW5pdCgmdjNkLT5yZXNldF9sb2NrKTsKKworCS8qIE5vdGU6 IFdlIGRvbid0IGFsbG9jYXRlIGFkZHJlc3MgMC4gIFZhcmlvdXMgYml0cyBvZiBIVworCSAqIHRy ZWF0IDAgYXMgc3BlY2lhbCwgc3VjaCBhcyB0aGUgb2NjbHVzaW9uIHF1ZXJ5IGNvdW50ZXJzCisJ ICogd2hlcmUgMCBtZWFucyAiZGlzYWJsZWQiLgorCSAqLworCWRybV9tbV9pbml0KCZ2M2QtPm1t LCAxLCBwdF9zaXplIC8gc2l6ZW9mKHUzMikgLSAxKTsKKworCXYzZC0+cHQgPSBkbWFfYWxsb2Nf d2ModjNkLT5kZXYsIHB0X3NpemUsCisJCQkgICAgICAgJnYzZC0+cHRfcGFkZHIsCisJCQkgICAg ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8pOworCWlmICghdjNkLT5w dCkgeworCQlkcm1fbW1fdGFrZWRvd24oJnYzZC0+bW0pOworCQlkZXZfZXJyKHYzZC0+ZGV2LAor CQkJIkZhaWxlZCB0byBhbGxvY2F0ZSBwYWdlIHRhYmxlcy4gIgorCQkJIlBsZWFzZSBlbnN1cmUg eW91IGhhdmUgQ01BIGVuYWJsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdjNk X2luaXRfaHdfc3RhdGUodjNkKTsKKwl2M2RfbW11X3NldF9wYWdlX3RhYmxlKHYzZCk7CisKKwly ZXQgPSB2M2Rfc2NoZWRfaW5pdCh2M2QpOworCWlmIChyZXQpIHsKKwkJZHJtX21tX3Rha2Vkb3du KCZ2M2QtPm1tKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQodjNkLT5kZXYsIDQwOTYgKiAxMDI0LCAo dm9pZCAqKXYzZC0+cHQsCisJCQkJICB2M2QtPnB0X3BhZGRyKTsKKwl9CisKKwlyZXR1cm4gMDsK K30KKwordm9pZAordjNkX2dlbV9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJ c3RydWN0IHYzZF9kZXYgKnYzZCA9IHRvX3YzZF9kZXYoZGV2KTsKKwllbnVtIHYzZF9xdWV1ZSBx OworCisJdjNkX3NjaGVkX2ZpbmkodjNkKTsKKworCS8qIFdhaXRpbmcgZm9yIGV4ZWMgdG8gZmlu aXNoIHdvdWxkIG5lZWQgdG8gYmUgZG9uZSBiZWZvcmUKKwkgKiB1bnJlZ2lzdGVyaW5nIFYzRC4K KwkgKi8KKwlmb3IgKHEgPSAwOyBxIDwgVjNEX01BWF9RVUVVRVM7IHErKykgeworCQlXQVJOX09O KHYzZC0+cXVldWVbcV0uZW1pdF9zZXFubyAhPQorCQkJdjNkLT5xdWV1ZVtxXS5maW5pc2hlZF9z ZXFubyk7CisJfQorCisJZHJtX21tX3Rha2Vkb3duKCZ2M2QtPm1tKTsKKworCWRtYV9mcmVlX2Nv aGVyZW50KHYzZC0+ZGV2LCA0MDk2ICogMTAyNCwgKHZvaWQgKil2M2QtPnB0LCB2M2QtPnB0X3Bh ZGRyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2lycS5jIGIvZHJp dmVycy9ncHUvZHJtL3YzZC92M2RfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi43N2UxZmEwNDZjMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vdjNkL3YzZF9pcnEuYwpAQCAtMCwwICsxLDIwNiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjArCisvKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBCcm9hZGNvbSAqLwor CisvKioKKyAqIERPQzogSW50ZXJydXB0IG1hbmFnZW1lbnQgZm9yIHRoZSBWM0QgZW5naW5lCisg KgorICogV2hlbiB3ZSB0YWtlIGEgYmlubmluZyBvciByZW5kZXJpbmcgZmx1c2ggZG9uZSBpbnRl cnJ1cHQsIHdlIG5lZWQKKyAqIHRvIHNpZ25hbCB0aGUgZmVuY2UgZm9yIHRoYXQgam9iIHNvIHRo YXQgdGhlIHNjaGVkdWxlciBjYW4gcXVldWUgdXAKKyAqIHRoZSBuZXh0IG9uZSBhbmQgdW5ibG9j ayBhbnkgd2FpdGVycy4KKyAqCisgKiBXaGVuIHdlIHRha2UgdGhlIGJpbm5lciBvdXQgb2YgbWVt b3J5IGludGVycnVwdCwgd2UgbmVlZCB0bworICogYWxsb2NhdGUgc29tZSBuZXcgbWVtb3J5IGFu ZCBwYXNzIGl0IHRvIHRoZSBiaW5uZXIgc28gdGhhdCB0aGUKKyAqIGN1cnJlbnQgam9iIGNhbiBt YWtlIHByb2dyZXNzLgorICovCisKKyNpbmNsdWRlICJ2M2RfZHJ2LmgiCisjaW5jbHVkZSAidjNk X3JlZ3MuaCIKKworI2RlZmluZSBWM0RfQ09SRV9JUlFTICgodTMyKShWM0RfSU5UX09VVE9NRU0g fAlcCisJCQkgICAgIFYzRF9JTlRfRkxET05FIHwJXAorCQkJICAgICBWM0RfSU5UX0ZSRE9ORSB8 CVwKKwkJCSAgICAgVjNEX0lOVF9HTVBWKSkKKworI2RlZmluZSBWM0RfSFVCX0lSUVMgKCh1MzIp KFYzRF9IVUJfSU5UX01NVV9XUlYgfAlcCisJCQkgICAgVjNEX0hVQl9JTlRfTU1VX1BUSSB8CVwK KwkJCSAgICBWM0RfSFVCX0lOVF9NTVVfQ0FQKSkKKworc3RhdGljIHZvaWQKK3YzZF9vdmVyZmxv d19tZW1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHYzZF9kZXYg KnYzZCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdjNkX2Rldiwgb3ZlcmZsb3dfbWVt X3dvcmspOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmdjNkLT5kcm07CisJc3RydWN0IHYz ZF9ibyAqYm8gPSB2M2RfYm9fY3JlYXRlKGRldiwgTlVMTCAvKiBYWFg6IEdNUCAqLywgMjU2ICog MTAyNCk7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlmIChJU19FUlIoYm8pKSB7CisJ CURSTV9FUlJPUigiQ291bGRuJ3QgYWxsb2NhdGUgYmlubmVyIG92ZXJmbG93IG1lbVxuIik7CisJ CXJldHVybjsKKwl9CisKKwkvKiBXZSBsb3N0IGEgcmFjZSwgYW5kIG91ciB3b3JrIHRhc2sgY2Ft ZSBpbiBhZnRlciB0aGUgYmluIGpvYgorCSAqIGNvbXBsZXRlZCBhbmQgZXhpdGVkLiAgVGhpcyBj YW4gaGFwcGVuIGJlY2F1c2UgdGhlIEhXCisJICogc2lnbmFscyBPT00gYmVmb3JlIGl0J3MgZnVs bHkgT09NLCBzbyB0aGUgYmlubmVyIG1pZ2h0IGp1c3QKKwkgKiBiYXJlbHkgY29tcGxldGUuCisJ ICoKKwkgKiBJZiB3ZSBsb3NlIHRoZSByYWNlIGFuZCBvdXIgd29yayB0YXNrIGNvbWVzIGluIGFm dGVyIGEgbmV3CisJICogYmluIGpvYiBnb3Qgc2NoZWR1bGVkLCB0aGF0J3MgZmluZS4gIFdlJ2xs IGp1c3QgZ2l2ZSB0aGVtCisJICogc29tZSBiaW5uZXIgcG9vbCBhbnl3YXkuCisJICovCisJc3Bp bl9sb2NrX2lycXNhdmUoJnYzZC0+am9iX2xvY2ssIGlycWZsYWdzKTsKKwlpZiAoIXYzZC0+Ymlu X2pvYikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2M2QtPmpvYl9sb2NrLCBpcnFmbGFn cyk7CisJCWdvdG8gb3V0OworCX0KKworCWRybV9nZW1fb2JqZWN0X2dldCgmYm8tPmJhc2UpOwor CWxpc3RfYWRkX3RhaWwoJmJvLT51bnJlZl9oZWFkLCAmdjNkLT5iaW5fam9iLT51bnJlZl9saXN0 KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2M2QtPmpvYl9sb2NrLCBpcnFmbGFncyk7CisK KwlWM0RfQ09SRV9XUklURSgwLCBWM0RfUFRCX0JQT0EsIGJvLT5ub2RlLnN0YXJ0IDw8IFBBR0Vf U0hJRlQpOworCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9QVEJfQlBPUywgYm8tPmJhc2Uuc2l6ZSk7 CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJmJvLT5iYXNlKTsKK30KKwor c3RhdGljIGlycXJldHVybl90Cit2M2RfaXJxKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1 Y3QgdjNkX2RldiAqdjNkID0gYXJnOworCXUzMiBpbnRzdHM7CisJaXJxcmV0dXJuX3Qgc3RhdHVz ID0gSVJRX05PTkU7CisKKwlpbnRzdHMgPSBWM0RfQ09SRV9SRUFEKDAsIFYzRF9DVExfSU5UX1NU Uyk7CisKKwkvKiBBY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0cyB3ZSdyZSBoYW5kbGluZyBoZXJl LiAqLworCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9DVExfSU5UX0NMUiwgaW50c3RzKTsKKworCWlm IChpbnRzdHMgJiBWM0RfSU5UX09VVE9NRU0pIHsKKwkJLyogTm90ZSB0aGF0IHRoZSBPT00gc3Rh dHVzIGlzIGVkZ2Ugc2lnbmFsZWQsIHNvIHRoZQorCQkgKiBpbnRlcnJ1cHQgd29uJ3QgaGFwcGVu IGFnYWluIHVudGlsIHRoZSB3ZSBhY3R1YWxseQorCQkgKiBhZGQgbW9yZSBtZW1vcnkuCisJCSAq LworCQlzY2hlZHVsZV93b3JrKCZ2M2QtPm92ZXJmbG93X21lbV93b3JrKTsKKwkJc3RhdHVzID0g SVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGludHN0cyAmIFYzRF9JTlRfRkxET05FKSB7CisJCXYz ZC0+cXVldWVbVjNEX0JJTl0uZmluaXNoZWRfc2Vxbm8rKzsKKwkJZG1hX2ZlbmNlX3NpZ25hbCh2 M2QtPmJpbl9qb2ItPmJpbi5kb25lX2ZlbmNlKTsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJ fQorCisJaWYgKGludHN0cyAmIFYzRF9JTlRfRlJET05FKSB7CisJCXYzZC0+cXVldWVbVjNEX1JF TkRFUl0uZmluaXNoZWRfc2Vxbm8rKzsKKwkJZG1hX2ZlbmNlX3NpZ25hbCh2M2QtPnJlbmRlcl9q b2ItPnJlbmRlci5kb25lX2ZlbmNlKTsKKworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisK KwkvKiBXZSBzaG91bGRuJ3QgYmUgdHJpZ2dlcmluZyB0aGVzZSBpZiB3ZSBoYXZlIEdNUCBpbgor CSAqIGFsd2F5cy1hbGxvd2VkIG1vZGUuCisJICovCisJaWYgKGludHN0cyAmIFYzRF9JTlRfR01Q VikKKwkJZGV2X2Vycih2M2QtPmRldiwgIkdNUCB2aW9sYXRpb25cbiIpOworCisJcmV0dXJuIHN0 YXR1czsKK30KKworc3RhdGljIGlycXJldHVybl90Cit2M2RfaHViX2lycShpbnQgaXJxLCB2b2lk ICphcmcpCit7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9IGFyZzsKKwl1MzIgaW50c3RzOworCWly cXJldHVybl90IHN0YXR1cyA9IElSUV9OT05FOworCisJaW50c3RzID0gVjNEX1JFQUQoVjNEX0hV Ql9JTlRfU1RTKTsKKworCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHRzIHdlJ3JlIGhhbmRs aW5nIGhlcmUuICovCisJVjNEX1dSSVRFKFYzRF9IVUJfSU5UX0NMUiwgaW50c3RzKTsKKworCWlm IChpbnRzdHMgJiAoVjNEX0hVQl9JTlRfTU1VX1dSViB8CisJCSAgICAgIFYzRF9IVUJfSU5UX01N VV9QVEkgfAorCQkgICAgICBWM0RfSFVCX0lOVF9NTVVfQ0FQKSkgeworCQl1MzIgYXhpX2lkID0g VjNEX1JFQUQoVjNEX01NVV9WSU9fSUQpOworCQl1NjQgdmlvX2FkZHIgPSAodTY0KVYzRF9SRUFE KFYzRF9NTVVfVklPX0FERFIpIDw8IDg7CisKKwkJZGV2X2Vycih2M2QtPmRldiwgIk1NVSBlcnJv ciBmcm9tIGNsaWVudCAlZCBhdCAweCUwOGxseCVzJXMlc1xuIiwKKwkJCWF4aV9pZCwgKGxvbmcg bG9uZyl2aW9fYWRkciwKKwkJCSgoaW50c3RzICYgVjNEX0hVQl9JTlRfTU1VX1dSVikgPworCQkJ ICIsIHdyaXRlIHZpb2xhdGlvbiIgOiAiIiksCisJCQkoKGludHN0cyAmIFYzRF9IVUJfSU5UX01N VV9QVEkpID8KKwkJCSAiLCBwdGUgaW52YWxpZCIgOiAiIiksCisJCQkoKGludHN0cyAmIFYzRF9I VUJfSU5UX01NVV9DQVApID8KKwkJCSAiLCBjYXAgZXhjZWVkZWQiIDogIiIpKTsKKwkJc3RhdHVz ID0gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKwordm9pZAordjNkX2ly cV9pbml0KHN0cnVjdCB2M2RfZGV2ICp2M2QpCit7CisJaW50IHJldCwgY29yZTsKKworCUlOSVRf V09SSygmdjNkLT5vdmVyZmxvd19tZW1fd29yaywgdjNkX292ZXJmbG93X21lbV93b3JrKTsKKwor CS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgc29tZW9uZSBtaWdodCBoYXZlIGxlZnQg YXJvdW5kCisJICogZm9yIHVzLgorCSAqLworCWZvciAoY29yZSA9IDA7IGNvcmUgPCB2M2QtPmNv cmVzOyBjb3JlKyspCisJCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9DVExfSU5UX0NMUiwgVjNE X0NPUkVfSVJRUyk7CisJVjNEX1dSSVRFKFYzRF9IVUJfSU5UX0NMUiwgVjNEX0hVQl9JUlFTKTsK KworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEodjNkLT5kZXYsIHBsYXRmb3JtX2dldF9pcnEodjNk LT5wZGV2LCAwKSwKKwkJCSAgICAgICB2M2RfaHViX2lycSwgSVJRRl9TSEFSRUQsCisJCQkgICAg ICAgInYzZF9odWIiLCB2M2QpOworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEodjNkLT5kZXYsIHBs YXRmb3JtX2dldF9pcnEodjNkLT5wZGV2LCAxKSwKKwkJCSAgICAgICB2M2RfaXJxLCBJUlFGX1NI QVJFRCwKKwkJCSAgICAgICAidjNkX2NvcmUwIiwgdjNkKTsKKwlpZiAocmV0KQorCQlkZXZfZXJy KHYzZC0+ZGV2LCAiSVJRIHNldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7CisKKwl2M2RfaXJxX2Vu YWJsZSh2M2QpOworfQorCit2b2lkCit2M2RfaXJxX2VuYWJsZShzdHJ1Y3QgdjNkX2RldiAqdjNk KQoreworCWludCBjb3JlOworCisJLyogRW5hYmxlIG91ciBzZXQgb2YgaW50ZXJydXB0cywgbWFz a2luZyBvdXQgYW55IG90aGVycy4gKi8KKwlmb3IgKGNvcmUgPSAwOyBjb3JlIDwgdjNkLT5jb3Jl czsgY29yZSsrKSB7CisJCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9DVExfSU5UX01TS19TRVQs IH5WM0RfQ09SRV9JUlFTKTsKKwkJVjNEX0NPUkVfV1JJVEUoY29yZSwgVjNEX0NUTF9JTlRfTVNL X0NMUiwgVjNEX0NPUkVfSVJRUyk7CisJfQorCisJVjNEX1dSSVRFKFYzRF9IVUJfSU5UX01TS19T RVQsIH5WM0RfSFVCX0lSUVMpOworCVYzRF9XUklURShWM0RfSFVCX0lOVF9NU0tfQ0xSLCBWM0Rf SFVCX0lSUVMpOworfQorCit2b2lkCit2M2RfaXJxX2Rpc2FibGUoc3RydWN0IHYzZF9kZXYgKnYz ZCkKK3sKKwlpbnQgY29yZTsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMuICovCisJZm9y IChjb3JlID0gMDsgY29yZSA8IHYzZC0+Y29yZXM7IGNvcmUrKykKKwkJVjNEX0NPUkVfV1JJVEUo Y29yZSwgVjNEX0NUTF9JTlRfTVNLX1NFVCwgfjApOworCVYzRF9XUklURShWM0RfSFVCX0lOVF9N U0tfU0VULCB+MCk7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIHdlIG1pZ2h0 IGhhdmUgbGVmdC4gKi8KKwlmb3IgKGNvcmUgPSAwOyBjb3JlIDwgdjNkLT5jb3JlczsgY29yZSsr KQorCQlWM0RfQ09SRV9XUklURShjb3JlLCBWM0RfQ1RMX0lOVF9DTFIsIFYzRF9DT1JFX0lSUVMp OworCVYzRF9XUklURShWM0RfSFVCX0lOVF9DTFIsIFYzRF9IVUJfSVJRUyk7CisKKwljYW5jZWxf d29ya19zeW5jKCZ2M2QtPm92ZXJmbG93X21lbV93b3JrKTsKK30KKworLyoqIFJlaW5pdGlhbGl6 ZXMgaW50ZXJydXB0IHJlZ2lzdGVycyB3aGVuIGEgR1BVIHJlc2V0IGlzIHBlcmZvcm1lZC4gKi8K K3ZvaWQgdjNkX2lycV9yZXNldChzdHJ1Y3QgdjNkX2RldiAqdjNkKQoreworCXYzZF9pcnFfZW5h YmxlKHYzZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9tbXUuYyBi L2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uYjAwZjk3YzMxYjcwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3YzZC92M2RfbW11LmMKQEAgLTAsMCArMSwxMjIgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wKworLyogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQnJvYWRjb20g Ki8KKworLyoqCisgKiBET0M6IEJyb2FkY29tIFYzRCBNTVUKKyAqCisgKiBUaGUgVjNEIDMueCBo YXJkd2FyZSAoY29tcGFyZWQgdG8gVkM0KSBub3cgaW5jbHVkZXMgYW4gTU1VLiAgSXQgaGFzCisg KiBhIHNpbmdsZSBsZXZlbCBvZiBwYWdlIHRhYmxlcyBmb3IgdGhlIFYzRCdzIDRHQiBhZGRyZXNz IHNwYWNlIHRvCisgKiBtYXAgdG8gQVhJIGJ1cyBhZGRyZXNzZXMsIHRodXMgaXQgY291bGQgbmVl ZCB1cCB0byA0TUIgb2YKKyAqIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgdG8gc3RvcmUg dGhlIFBURXMuCisgKgorICogQmVjYXVzZSB0aGUgNE1CIG9mIGNvbnRpZ3VvdXMgbWVtb3J5IGZv ciBwYWdlIHRhYmxlcyBpcyBwcmVjaW91cywKKyAqIGFuZCBzd2l0Y2hpbmcgYmV0d2VlbiB0aGVt IGlzIGV4cGVuc2l2ZSwgd2UgbG9hZCBhbGwgQk9zIGludG8gdGhlCisgKiBzYW1lIDRHQiBhZGRy ZXNzIHNwYWNlLgorICoKKyAqIFRvIHByb3RlY3QgY2xpZW50cyBmcm9tIGVhY2ggb3RoZXIsIHdl IHNob3VsZCB1c2UgdGhlIEdNUCB0bworICogcXVpY2tseSBtYXNrIG91dCAoYXQgMTI4a2IgZ3Jh bnVsYXJpdHkpIHdoYXQgcGFnZXMgYXJlIGF2YWlsYWJsZSB0bworICogZWFjaCBjbGllbnQuICBU aGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgKi8KKworI2luY2x1ZGUgInYzZF9kcnYuaCIK KyNpbmNsdWRlICJ2M2RfcmVncy5oIgorCisjZGVmaW5lIFYzRF9NTVVfUEFHRV9TSElGVCAxMgor CisvKiBOb3RlOiBBbGwgUFRFcyBmb3IgdGhlIDFNQiBzdXBlcnBhZ2UgbXVzdCBiZSBmaWxsZWQg d2l0aCB0aGUKKyAqIHN1cGVycGFnZSBiaXQgc2V0LgorICovCisjZGVmaW5lIFYzRF9QVEVfU1VQ RVJQQUdFIEJJVCgzMSkKKyNkZWZpbmUgVjNEX1BURV9XUklURUFCTEUgQklUKDI5KQorI2RlZmlu ZSBWM0RfUFRFX1ZBTElEIEJJVCgyOCkKKworc3RhdGljIGludCB2M2RfbW11X2ZsdXNoX2FsbChz dHJ1Y3QgdjNkX2RldiAqdjNkKQoreworCWludCByZXQ7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBh bm90aGVyIGZsdXNoIGlzbid0IGFscmVhZHkgcnVubmluZyB3aGVuIHdlCisJICogc3RhcnQgdGhp cyBvbmUuCisJICovCisJcmV0ID0gd2FpdF9mb3IoIShWM0RfUkVBRChWM0RfTU1VX0NUTCkgJgor CQkJIFYzRF9NTVVfQ1RMX1RMQl9DTEVBUklORyksIDEwMCk7CisJaWYgKHJldCkKKwkJZGV2X2Vy cih2M2QtPmRldiwgIlRMQiBjbGVhciB3YWl0IGlkbGUgcHJlLXdhaXQgZmFpbGVkXG4iKTsKKwor CVYzRF9XUklURShWM0RfTU1VX0NUTCwgVjNEX1JFQUQoVjNEX01NVV9DVEwpIHwKKwkJICBWM0Rf TU1VX0NUTF9UTEJfQ0xFQVIpOworCisJVjNEX1dSSVRFKFYzRF9NTVVDX0NPTlRST0wsCisJCSAg VjNEX01NVUNfQ09OVFJPTF9GTFVTSCB8CisJCSAgVjNEX01NVUNfQ09OVFJPTF9FTkFCTEUpOwor CisJcmV0ID0gd2FpdF9mb3IoIShWM0RfUkVBRChWM0RfTU1VX0NUTCkgJgorCQkJIFYzRF9NTVVf Q1RMX1RMQl9DTEVBUklORyksIDEwMCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHYzZC0+ZGV2 LCAiVExCIGNsZWFyIHdhaXQgaWRsZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwor CXJldCA9IHdhaXRfZm9yKCEoVjNEX1JFQUQoVjNEX01NVUNfQ09OVFJPTCkgJgorCQkJIFYzRF9N TVVDX0NPTlRST0xfRkxVU0hJTkcpLCAxMDApOworCWlmIChyZXQpCisJCWRldl9lcnIodjNkLT5k ZXYsICJNTVVDIGZsdXNoIHdhaXQgaWRsZSBmYWlsZWRcbiIpOworCisJcmV0dXJuIHJldDsKK30K KworaW50IHYzZF9tbXVfc2V0X3BhZ2VfdGFibGUoc3RydWN0IHYzZF9kZXYgKnYzZCkKK3sKKwlW M0RfV1JJVEUoVjNEX01NVV9QVF9QQV9CQVNFLCB2M2QtPnB0X3BhZGRyID4+IFYzRF9NTVVfUEFH RV9TSElGVCk7CisJVjNEX1dSSVRFKFYzRF9NTVVfQ1RMLAorCQkgIFYzRF9NTVVfQ1RMX0VOQUJM RSB8CisJCSAgVjNEX01NVV9DVExfUFRfSU5WQUxJRCB8CisJCSAgVjNEX01NVV9DVExfUFRfSU5W QUxJRF9BQk9SVCB8CisJCSAgVjNEX01NVV9DVExfV1JJVEVfVklPTEFUSU9OX0FCT1JUIHwKKwkJ ICBWM0RfTU1VX0NUTF9DQVBfRVhDRUVERURfQUJPUlQpOworCVYzRF9XUklURShWM0RfTU1VX0lM TEVHQUxfQUREUiwKKwkJICAodjNkLT5tbXVfc2NyYXRjaF9wYWRkciA+PiBWM0RfTU1VX1BBR0Vf U0hJRlQpIHwKKwkJICBWM0RfTU1VX0lMTEVHQUxfQUREUl9FTkFCTEUpOworCVYzRF9XUklURShW M0RfTU1VQ19DT05UUk9MLCBWM0RfTU1VQ19DT05UUk9MX0VOQUJMRSk7CisKKwlyZXR1cm4gdjNk X21tdV9mbHVzaF9hbGwodjNkKTsKK30KKwordm9pZCB2M2RfbW11X2luc2VydF9wdGVzKHN0cnVj dCB2M2RfYm8gKmJvKQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGJvLT5i YXNlLmRldik7CisJdTMyIHBhZ2UgPSBiby0+bm9kZS5zdGFydDsKKwl1MzIgcGFnZV9wcm90ID0g VjNEX1BURV9XUklURUFCTEUgfCBWM0RfUFRFX1ZBTElEOworCXVuc2lnbmVkIGludCBjb3VudDsK KwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbDsKKworCWZvcl9lYWNoX3NnKGJvLT5zZ3QtPnNnbCwg c2dsLCBiby0+c2d0LT5uZW50cywgY291bnQpIHsKKwkJdTMyIHBhZ2VfYWRkcmVzcyA9IHNnX2Rt YV9hZGRyZXNzKHNnbCkgPj4gVjNEX01NVV9QQUdFX1NISUZUOworCQl1MzIgcHRlID0gcGFnZV9w cm90IHwgcGFnZV9hZGRyZXNzOworCQl1MzIgaTsKKworCQlCVUdfT04ocGFnZV9hZGRyZXNzICsg KHNnX2RtYV9sZW4oc2dsKSA+PiBWM0RfTU1VX1BBR0VfU0hJRlQpID49CisJCSAgICAgICBCSVQo MjQpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbihzZ2wpID4+IFYzRF9NTVVfUEFH RV9TSElGVDsgaSsrKQorCQkJdjNkLT5wdFtwYWdlKytdID0gcHRlICsgaTsKKwl9CisKKwlXQVJO X09OX09OQ0UocGFnZSAtIGJvLT5ub2RlLnN0YXJ0ICE9CisJCSAgICAgYm8tPmJhc2Uuc2l6ZSA+ PiBWM0RfTU1VX1BBR0VfU0hJRlQpOworCisJaWYgKHYzZF9tbXVfZmx1c2hfYWxsKHYzZCkpCisJ CWRldl9lcnIodjNkLT5kZXYsICJNTVUgZmx1c2ggdGltZW91dFxuIik7Cit9CisKK3ZvaWQgdjNk X21tdV9yZW1vdmVfcHRlcyhzdHJ1Y3QgdjNkX2JvICpibykKK3sKKwlzdHJ1Y3QgdjNkX2RldiAq djNkID0gdG9fdjNkX2Rldihiby0+YmFzZS5kZXYpOworCXUzMiBucGFnZXMgPSBiby0+YmFzZS5z aXplID4+IFYzRF9NTVVfUEFHRV9TSElGVDsKKwl1MzIgcGFnZTsKKworCWZvciAocGFnZSA9IGJv LT5ub2RlLnN0YXJ0OyBwYWdlIDwgYm8tPm5vZGUuc3RhcnQgKyBucGFnZXM7IHBhZ2UrKykKKwkJ djNkLT5wdFtwYWdlXSA9IDA7CisKKwlpZiAodjNkX21tdV9mbHVzaF9hbGwodjNkKSkKKwkJZGV2 X2Vycih2M2QtPmRldiwgIk1NVSBmbHVzaCB0aW1lb3V0XG4iKTsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS92M2QvdjNkX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3Jl Z3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZjMTMyODJkZmMy ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3JlZ3MuaApAQCAt MCwwICsxLDI5NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKiBD b3B5cmlnaHQgKEMpIDIwMTctMjAxOCBCcm9hZGNvbSAqLworCisjaWZuZGVmIFYzRF9SRUdTX0gK KyNkZWZpbmUgVjNEX1JFR1NfSAorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKKyNkZWZp bmUgVjNEX01BU0soaGlnaCwgbG93KSAoKHUzMilHRU5NQVNLKGhpZ2gsIGxvdykpCisvKiBVc2lu ZyB0aGUgR05VIHN0YXRlbWVudCBleHByZXNzaW9uIGV4dGVuc2lvbiAqLworI2RlZmluZSBWM0Rf U0VUX0ZJRUxEKHZhbHVlLCBmaWVsZCkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQl1MzIgZmllbGR2 YWwgPSAodmFsdWUpIDw8IGZpZWxkIyNfU0hJRlQ7CQlcCisJCVdBUk5fT04oKGZpZWxkdmFsICYg fmZpZWxkIyNfTUFTSykgIT0gMCk7CQlcCisJCWZpZWxkdmFsICYgZmllbGQjI19NQVNLOwkJCQlc CisJIH0pCisKKyNkZWZpbmUgVjNEX0dFVF9GSUVMRCh3b3JkLCBmaWVsZCkgKCgod29yZCkgJiBm aWVsZCMjX01BU0spID4+CQlcCisJCQkJICAgIGZpZWxkIyNfU0hJRlQpCisKKy8qIEh1YiByZWdp c3RlcnMgZm9yIHNoYXJlZCBoYXJkd2FyZSBiZXR3ZWVuIFYzRCBjb3Jlcy4gKi8KKworI2RlZmlu ZSBWM0RfSFVCX0FYSUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAK KyMgZGVmaW5lIFYzRF9IVUJfQVhJQ0ZHX01BWF9MRU5fTUFTSyAgICAgICAgICAgICAgICAgICBW M0RfTUFTSygzLCAwKQorIyBkZWZpbmUgVjNEX0hVQl9BWElDRkdfTUFYX0xFTl9TSElGVCAgICAg ICAgICAgICAgICAgIDAKKyNkZWZpbmUgVjNEX0hVQl9VSUZDRkcgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDAwMDA0CisjZGVmaW5lIFYzRF9IVUJfSURFTlQwICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOAorCisjZGVmaW5lIFYzRF9IVUJfSURFTlQxICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYworIyBkZWZpbmUgVjNEX0hVQl9J REVOVDFfV0lUSF9NU08gICAgICAgICAgICAgICAgICAgICAgIEJJVCgxOSkKKyMgZGVmaW5lIFYz RF9IVUJfSURFTlQxX1dJVEhfVFNZICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTgpCisjIGRl ZmluZSBWM0RfSFVCX0lERU5UMV9XSVRIX1RGVSAgICAgICAgICAgICAgICAgICAgICAgQklUKDE3 KQorIyBkZWZpbmUgVjNEX0hVQl9JREVOVDFfV0lUSF9MM0MgICAgICAgICAgICAgICAgICAgICAg IEJJVCgxNikKKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX05IT1NUU19NQVNLICAgICAgICAgICAg ICAgICAgICBWM0RfTUFTSygxNSwgMTIpCisjIGRlZmluZSBWM0RfSFVCX0lERU5UMV9OSE9TVFNf U0hJRlQgICAgICAgICAgICAgICAgICAgMTIKKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX05DT1JF U19NQVNLICAgICAgICAgICAgICAgICAgICBWM0RfTUFTSygxMSwgOCkKKyMgZGVmaW5lIFYzRF9I VUJfSURFTlQxX05DT1JFU19TSElGVCAgICAgICAgICAgICAgICAgICA4CisjIGRlZmluZSBWM0Rf SFVCX0lERU5UMV9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgVjNEX01BU0soNywgNCkK KyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0 CisjIGRlZmluZSBWM0RfSFVCX0lERU5UMV9UVkVSX01BU0sgICAgICAgICAgICAgICAgICAgICAg VjNEX01BU0soMywgMCkKKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX1RWRVJfU0hJRlQgICAgICAg ICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgVjNEX0hVQl9JREVOVDIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMDEwCisjIGRlZmluZSBWM0RfSFVCX0lERU5UMl9XSVRIX01N VSAgICAgICAgICAgICAgICAgICAgICAgQklUKDgpCisjIGRlZmluZSBWM0RfSFVCX0lERU5UMl9M M0NfTktCX01BU0sgICAgICAgICAgICAgICAgICAgVjNEX01BU0soNywgMCkKKyMgZGVmaW5lIFYz RF9IVUJfSURFTlQyX0wzQ19OS0JfU0hJRlQgICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUg VjNEX0hVQl9JREVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE0Cisj IGRlZmluZSBWM0RfSFVCX0lERU5UM19JUFJFVl9NQVNLICAgICAgICAgICAgICAgICAgICAgVjNE X01BU0soMTUsIDgpCisjIGRlZmluZSBWM0RfSFVCX0lERU5UM19JUFJFVl9TSElGVCAgICAgICAg ICAgICAgICAgICAgOAorIyBkZWZpbmUgVjNEX0hVQl9JREVOVDNfSVBJRFhfTUFTSyAgICAgICAg ICAgICAgICAgICAgIFYzRF9NQVNLKDcsIDApCisjIGRlZmluZSBWM0RfSFVCX0lERU5UM19JUElE WF9TSElGVCAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIFYzRF9IVUJfSU5UX1NUUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1MAorI2RlZmluZSBWM0RfSFVCX0lO VF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNTQKKyNkZWZpbmUgVjNE X0hVQl9JTlRfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDU4CisjZGVm aW5lIFYzRF9IVUJfSU5UX01TS19TVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1 YworI2RlZmluZSBWM0RfSFVCX0lOVF9NU0tfU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAwNjAKKyNkZWZpbmUgVjNEX0hVQl9JTlRfTVNLX0NMUiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAweDAwMDY0CisjIGRlZmluZSBWM0RfSFVCX0lOVF9NTVVfV1JWICAgICAgICAgICAg ICAgICAgICAgICAgICAgQklUKDUpCisjIGRlZmluZSBWM0RfSFVCX0lOVF9NTVVfUFRJICAgICAg ICAgICAgICAgICAgICAgICAgICAgQklUKDQpCisjIGRlZmluZSBWM0RfSFVCX0lOVF9NTVVfQ0FQ ICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDMpCisjIGRlZmluZSBWM0RfSFVCX0lOVF9N U08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDIpCisjIGRlZmluZSBWM0RfSFVC X0lOVF9URlVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBW M0RfSFVCX0lOVF9URlVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNk ZWZpbmUgVjNEX0dDQV9DQUNIRV9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw MDBjCisjIGRlZmluZSBWM0RfR0NBX0NBQ0hFX0NUUkxfRkxVU0ggICAgICAgICAgICAgICAgICAg ICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dDQV9TQUZFX1NIVVRET1dOICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMGIwCisjIGRlZmluZSBWM0RfR0NBX1NBRkVfU0hVVERPV05fRU4gICAg ICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dDQV9TQUZFX1NIVVRET1dO X0FDSyAgICAgICAgICAgICAgICAgICAgICAweDAwMGI0CisjIGRlZmluZSBWM0RfR0NBX1NBRkVf U0hVVERPV05fQUNLX0FDS0VEICAgICAgICAgICAgICAgMworCisjIGRlZmluZSBWM0RfVE9QX0dS X0JSSURHRV9SRVZJU0lPTiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMAorIyBkZWZpbmUgVjNE X1RPUF9HUl9CUklER0VfTUFKT1JfTUFTSyAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDE1LCA4 KQorIyBkZWZpbmUgVjNEX1RPUF9HUl9CUklER0VfTUFKT1JfU0hJRlQgICAgICAgICAgICAgICAg IDgKKyMgZGVmaW5lIFYzRF9UT1BfR1JfQlJJREdFX01JTk9SX01BU0sgICAgICAgICAgICAgICAg ICBWM0RfTUFTSyg3LCAwKQorIyBkZWZpbmUgVjNEX1RPUF9HUl9CUklER0VfTUlOT1JfU0hJRlQg ICAgICAgICAgICAgICAgIDAKKworLyogNzI2OCByZXNldCByZWcgKi8KKyMgZGVmaW5lIFYzRF9U T1BfR1JfQlJJREdFX1NXX0lOSVRfMCAgICAgICAgICAgICAgICAgICAweDAwMDA4CisjIGRlZmlu ZSBWM0RfVE9QX0dSX0JSSURHRV9TV19JTklUXzBfVjNEX0NMS18xMDhfU1dfSU5JVCBCSVQoMCkK Ky8qIDcyNzggcmVzZXQgcmVnICovCisjIGRlZmluZSBWM0RfVE9QX0dSX0JSSURHRV9TV19JTklU XzEgICAgICAgICAgICAgICAgICAgMHgwMDAwYworIyBkZWZpbmUgVjNEX1RPUF9HUl9CUklER0Vf U1dfSU5JVF8xX1YzRF9DTEtfMTA4X1NXX0lOSVQgQklUKDApCisKKy8qIFBlci1NTVUgcmVnaXN0 ZXJzLiAqLworCisjZGVmaW5lIFYzRF9NTVVDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMTAwMAorIyBkZWZpbmUgVjNEX01NVUNfQ09OVFJPTF9DTEVBUiAgICAgICAg ICAgICAgICAgICAgICAgIEJJVCgzKQorIyBkZWZpbmUgVjNEX01NVUNfQ09OVFJPTF9GTFVTSElO RyAgICAgICAgICAgICAgICAgICAgIEJJVCgyKQorIyBkZWZpbmUgVjNEX01NVUNfQ09OVFJPTF9G TFVTSCAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQorIyBkZWZpbmUgVjNEX01NVUNfQ09O VFJPTF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQorCisjZGVmaW5lIFYzRF9N TVVfQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTIwMAorIyBkZWZp bmUgVjNEX01NVV9DVExfQ0FQX0VYQ0VFREVEICAgICAgICAgICAgICAgICAgICAgIEJJVCgyNykK KyMgZGVmaW5lIFYzRF9NTVVfQ1RMX0NBUF9FWENFRURFRF9BQk9SVCAgICAgICAgICAgICAgICBC SVQoMjYpCisjIGRlZmluZSBWM0RfTU1VX0NUTF9DQVBfRVhDRUVERURfSU5UICAgICAgICAgICAg ICAgICAgQklUKDI1KQorIyBkZWZpbmUgVjNEX01NVV9DVExfQ0FQX0VYQ0VFREVEX0VYQ0VQVElP TiAgICAgICAgICAgIEJJVCgyNCkKKyMgZGVmaW5lIFYzRF9NTVVfQ1RMX1BUX0lOVkFMSUQgICAg ICAgICAgICAgICAgICAgICAgICBCSVQoMjApCisjIGRlZmluZSBWM0RfTU1VX0NUTF9QVF9JTlZB TElEX0FCT1JUICAgICAgICAgICAgICAgICAgQklUKDE5KQorIyBkZWZpbmUgVjNEX01NVV9DVExf UFRfSU5WQUxJRF9JTlQgICAgICAgICAgICAgICAgICAgIEJJVCgxOCkKKyMgZGVmaW5lIFYzRF9N TVVfQ1RMX1BUX0lOVkFMSURfRVhDRVBUSU9OICAgICAgICAgICAgICBCSVQoMTcpCisjIGRlZmlu ZSBWM0RfTU1VX0NUTF9XUklURV9WSU9MQVRJT04gICAgICAgICAgICAgICAgICAgQklUKDE2KQor IyBkZWZpbmUgVjNEX01NVV9DVExfV1JJVEVfVklPTEFUSU9OX0FCT1JUICAgICAgICAgICAgIEJJ VCgxMSkKKyMgZGVmaW5lIFYzRF9NTVVfQ1RMX1dSSVRFX1ZJT0xBVElPTl9JTlQgICAgICAgICAg ICAgICBCSVQoMTApCisjIGRlZmluZSBWM0RfTU1VX0NUTF9XUklURV9WSU9MQVRJT05fRVhDRVBU SU9OICAgICAgICAgQklUKDkpCisjIGRlZmluZSBWM0RfTU1VX0NUTF9UTEJfQ0xFQVJJTkcgICAg ICAgICAgICAgICAgICAgICAgQklUKDcpCisjIGRlZmluZSBWM0RfTU1VX0NUTF9UTEJfU1RBVFNf Q0xFQVIgICAgICAgICAgICAgICAgICAgQklUKDMpCisjIGRlZmluZSBWM0RfTU1VX0NUTF9UTEJf Q0xFQVIgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDIpCisjIGRlZmluZSBWM0RfTU1VX0NU TF9UTEJfU1RBVFNfRU5BQkxFICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBWM0Rf TU1VX0NUTF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZp bmUgVjNEX01NVV9QVF9QQV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMjA0 CisjZGVmaW5lIFYzRF9NTVVfSElUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgwMTIwOAorI2RlZmluZSBWM0RfTU1VX01JU1NFUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDEyMGMKKyNkZWZpbmUgVjNEX01NVV9TVEFMTFMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDAxMjEwCisKKyNkZWZpbmUgVjNEX01NVV9BRERSX0NBUCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweDAxMjE0CisjIGRlZmluZSBWM0RfTU1VX0FERFJfQ0FQ X0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgQklUKDMxKQorIyBkZWZpbmUgVjNEX01NVV9B RERSX0NBUF9NUEFHRV9NQVNLICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDExLCAwKQorIyBk ZWZpbmUgVjNEX01NVV9BRERSX0NBUF9NUEFHRV9TSElGVCAgICAgICAgICAgICAgICAgIDAKKwor I2RlZmluZSBWM0RfTU1VX1NIT09UX0RPV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDEyMTgKKyMgZGVmaW5lIFYzRF9NTVVfU0hPT1RfRE9XTl9TSE9PVElORyAgICAgICAgICAgICAg ICAgICBCSVQoMjkpCisjIGRlZmluZSBWM0RfTU1VX1NIT09UX0RPV05fU0hPT1QgICAgICAgICAg ICAgICAgICAgICAgQklUKDI4KQorIyBkZWZpbmUgVjNEX01NVV9TSE9PVF9ET1dOX1BBR0VfTUFT SyAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDI3LCAwKQorIyBkZWZpbmUgVjNEX01NVV9TSE9P VF9ET1dOX1BBR0VfU0hJRlQgICAgICAgICAgICAgICAgIDAKKworI2RlZmluZSBWM0RfTU1VX0JZ UEFTU19TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEyMWMKKyNkZWZpbmUgVjNE X01NVV9CWVBBU1NfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMjIwCisKKy8q IEFYSSBJRCBvZiB0aGUgYWNjZXNzIHRoYXQgZmF1bHRlZCAqLworI2RlZmluZSBWM0RfTU1VX1ZJ T19JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEyMmMKKworLyogQWRkcmVz cyBmb3IgaWxsZWdhbCBQVEVzIHRvIHJldHVybiAqLworI2RlZmluZSBWM0RfTU1VX0lMTEVHQUxf QUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEyMzAKKyMgZGVmaW5lIFYzRF9NTVVf SUxMRUdBTF9BRERSX0VOQUJMRSAgICAgICAgICAgICAgICAgICBCSVQoMzEpCisKKy8qIEFkZHJl c3MgdGhhdCBmYXVsdGVkICovCisjZGVmaW5lIFYzRF9NTVVfVklPX0FERFIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMTIzNAorCisvKiBQZXItVjNELWNvcmUgcmVnaXN0ZXJzICov CisKKyNkZWZpbmUgVjNEX0NUTF9JREVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAwMDAwCisjIGRlZmluZSBWM0RfSURFTlQwX1ZFUl9NQVNLICAgICAgICAgICAgICAgICAg ICAgICAgICAgVjNEX01BU0soMzEsIDI0KQorIyBkZWZpbmUgVjNEX0lERU5UMF9WRVJfU0hJRlQg ICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKyNkZWZpbmUgVjNEX0NUTF9JREVOVDEgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0CisvKiBNdWx0aXBsZXMgb2YgMWti ICovCisjIGRlZmluZSBWM0RfSURFTlQxX1ZQTV9TSVpFX01BU0sgICAgICAgICAgICAgICAgICAg ICAgVjNEX01BU0soMzEsIDI4KQorIyBkZWZpbmUgVjNEX0lERU5UMV9WUE1fU0laRV9TSElGVCAg ICAgICAgICAgICAgICAgICAgIDI4CisjIGRlZmluZSBWM0RfSURFTlQxX05TRU1fTUFTSyAgICAg ICAgICAgICAgICAgICAgICAgICAgVjNEX01BU0soMjMsIDE2KQorIyBkZWZpbmUgVjNEX0lERU5U MV9OU0VNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjIGRlZmluZSBWM0RfSURF TlQxX05UTVVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgVjNEX01BU0soMTUsIDEyKQor IyBkZWZpbmUgVjNEX0lERU5UMV9OVE1VX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEy CisjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAg VjNEX01BU0soMTEsIDgpCisjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNfU0hJRlQgICAgICAgICAg ICAgICAgICAgICAgICAgOAorIyBkZWZpbmUgVjNEX0lERU5UMV9OU0xDX01BU0sgICAgICAgICAg ICAgICAgICAgICAgICAgIFYzRF9NQVNLKDcsIDQpCisjIGRlZmluZSBWM0RfSURFTlQxX05TTENf U0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNAorIyBkZWZpbmUgVjNEX0lERU5UMV9SRVZf TUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDMsIDApCisjIGRlZmluZSBW M0RfSURFTlQxX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5l IFYzRF9DVExfSURFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOAor IyBkZWZpbmUgVjNEX0lERU5UMl9CQ0dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJ VCgyOCkKKworI2RlZmluZSBWM0RfQ1RMX01JU0NDRkcgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAwMTgKKyMgZGVmaW5lIFYzRF9NSVNDQ0ZHX09WUlRNVU9VVCAgICAgICAgICAg ICAgICAgICAgICAgICBCSVQoMCkKKworI2RlZmluZSBWM0RfQ1RMX0wyQ0FDVEwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAKKyMgZGVmaW5lIFYzRF9MMkNBQ1RMX0wyQ0NM UiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMikKKyMgZGVmaW5lIFYzRF9MMkNBQ1RM X0wyQ0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMSkKKyMgZGVmaW5lIFYzRF9M MkNBQ1RMX0wyQ0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkKKworI2RlZmlu ZSBWM0RfQ1RMX1NMQ0FDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjQK KyMgZGVmaW5lIFYzRF9TTENBQ1RMX1RWQ0NTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICBW M0RfTUFTSygyNywgMjQpCisjIGRlZmluZSBWM0RfU0xDQUNUTF9UVkNDU19TSElGVCAgICAgICAg ICAgICAgICAgICAgICAgMjQKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1REQ0NTX01BU0sgICAgICAg ICAgICAgICAgICAgICAgICBWM0RfTUFTSygxOSwgMTYpCisjIGRlZmluZSBWM0RfU0xDQUNUTF9U RENDU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTYKKyMgZGVmaW5lIFYzRF9TTENBQ1RM X1VDQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICBWM0RfTUFTSygxMSwgOCkKKyMgZGVm aW5lIFYzRF9TTENBQ1RMX1VDQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4CisjIGRl ZmluZSBWM0RfU0xDQUNUTF9JQ0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgVjNEX01B U0soMywgMCkKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX0lDQ19TSElGVCAgICAgICAgICAgICAgICAg ICAgICAgICAwCisKKyNkZWZpbmUgVjNEX0NUTF9MMlRDQUNUTCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMDMwCisjIGRlZmluZSBWM0RfTDJUQ0FDVExfVE1VV0NGICAgICAgICAg ICAgICAgICAgICAgICAgICAgQklUKDgpCisjIGRlZmluZSBWM0RfTDJUQ0FDVExfTDJUX05PX1dN ICAgICAgICAgICAgICAgICAgICAgICAgQklUKDQpCisjIGRlZmluZSBWM0RfTDJUQ0FDVExfRkxN X0ZMVVNIICAgICAgICAgICAgICAgICAgICAgICAgMAorIyBkZWZpbmUgVjNEX0wyVENBQ1RMX0ZM TV9DTEVBUiAgICAgICAgICAgICAgICAgICAgICAgIDEKKyMgZGVmaW5lIFYzRF9MMlRDQUNUTF9G TE1fQ0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAyCisjIGRlZmluZSBWM0RfTDJUQ0FDVExf RkxNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgVjNEX01BU0soMiwgMSkKKyMgZGVmaW5l IFYzRF9MMlRDQUNUTF9GTE1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxCisjIGRlZmlu ZSBWM0RfTDJUQ0FDVExfTDJURkxTICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisj ZGVmaW5lIFYzRF9DVExfTDJURkxTVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDAzNAorI2RlZmluZSBWM0RfQ1RMX0wyVEZMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAwMzgKKworI2RlZmluZSBWM0RfQ1RMX0lOVF9TVFMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MDAwNTAKKyNkZWZpbmUgVjNEX0NUTF9JTlRfU0VUICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwMDU0CisjZGVmaW5lIFYzRF9DVExfSU5UX0NMUiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1OAorI2RlZmluZSBWM0RfQ1RMX0lOVF9N U0tfU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNWMKKyNkZWZpbmUgVjNEX0NU TF9JTlRfTVNLX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDYwCisjZGVmaW5l IFYzRF9DVExfSU5UX01TS19DTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2NAor IyBkZWZpbmUgVjNEX0lOVF9RUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYz RF9NQVNLKDI3LCAxNikKKyMgZGVmaW5lIFYzRF9JTlRfUVBVX1NISUZUICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxNgorIyBkZWZpbmUgVjNEX0lOVF9HTVBWICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJJVCg1KQorIyBkZWZpbmUgVjNEX0lOVF9UUkZCICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEJJVCg0KQorIyBkZWZpbmUgVjNEX0lOVF9TUElMTFVTRSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQorIyBkZWZpbmUgVjNEX0lOVF9PVVRP TUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgyKQorIyBkZWZpbmUgVjNEX0lO VF9GTERPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQorIyBkZWZpbmUg VjNEX0lOVF9GUkRPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQorCisj ZGVmaW5lIFYzRF9DTEVfQ1QwQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDEwMAorI2RlZmluZSBWM0RfQ0xFX0NUMUNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAxMDQKKyNkZWZpbmUgVjNEX0NMRV9DVE5DUyhuKSAoVjNEX0NMRV9DVDBDUyArIDQg KiBuKQorI2RlZmluZSBWM0RfQ0xFX0NUMEVBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAxMDgKKyNkZWZpbmUgVjNEX0NMRV9DVDFFQSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMTBjCisjZGVmaW5lIFYzRF9DTEVfQ1RORUEobikgKFYzRF9DTEVfQ1Qw RUEgKyA0ICogbikKKyNkZWZpbmUgVjNEX0NMRV9DVDBDQSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMTEwCisjZGVmaW5lIFYzRF9DTEVfQ1QxQ0EgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDExNAorI2RlZmluZSBWM0RfQ0xFX0NUTkNBKG4pIChWM0Rf Q0xFX0NUMENBICsgNCAqIG4pCisjZGVmaW5lIFYzRF9DTEVfQ1QwUkEgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDExOAorI2RlZmluZSBWM0RfQ0xFX0NUMVJBICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMWMKKyNkZWZpbmUgVjNEX0NMRV9DVDBMQyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTIwCisjZGVmaW5lIFYzRF9DTEVf Q1QxTEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEyNAorI2RlZmluZSBW M0RfQ0xFX0NUMFBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMjgKKyNk ZWZpbmUgVjNEX0NMRV9DVDFQQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw MTJjCisjZGVmaW5lIFYzRF9DTEVfUENTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgwMDEzMAorI2RlZmluZSBWM0RfQ0xFX0JGQyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDAxMzQKKyNkZWZpbmUgVjNEX0NMRV9SRkMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMTM4CisjZGVmaW5lIFYzRF9DTEVfVEZCQyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEzYworI2RlZmluZSBWM0RfQ0xFX1RGSVQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNDAKKyNkZWZpbmUgVjNEX0NMRV9D VDFDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTQ0CisjZGVmaW5lIFYz RF9DTEVfQ1QxVElMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE0OAorI2Rl ZmluZSBWM0RfQ0xFX0NUMVRTS0lQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAx NGMKKyNkZWZpbmUgVjNEX0NMRV9DVDFQVENUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAwMTUwCisjZGVmaW5lIFYzRF9DTEVfQ1QwU1lOQyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDE1NAorI2RlZmluZSBWM0RfQ0xFX0NUMVNZTkMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDAxNTgKKyNkZWZpbmUgVjNEX0NMRV9DVDBRVFMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweDAwMTVjCisjIGRlZmluZSBWM0RfQ0xFX0NUMFFUU19F TkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lIFYzRF9DTEVfQ1Qw UUJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE2MAorI2RlZmluZSBWM0Rf Q0xFX0NUMVFCQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNjQKKyNkZWZp bmUgVjNEX0NMRV9DVE5RQkEobikgKFYzRF9DTEVfQ1QwUUJBICsgNCAqIG4pCisjZGVmaW5lIFYz RF9DTEVfQ1QwUUVBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE2OAorI2Rl ZmluZSBWM0RfQ0xFX0NUMVFFQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAx NmMKKyNkZWZpbmUgVjNEX0NMRV9DVE5RRUEobikgKFYzRF9DTEVfQ1QwUUVBICsgNCAqIG4pCisj ZGVmaW5lIFYzRF9DTEVfQ1QwUU1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDE3MAorI2RlZmluZSBWM0RfQ0xFX0NUMFFNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAxNzQKKyNkZWZpbmUgVjNEX0NMRV9DVDFRQ0ZHICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMTc4CisvKiBJZiBzZXQgd2l0aG91dCBFVFBST0MsIGVudGlyZWx5IHNr aXAgdGlsZXMgd2l0aCBubyBwcmltaXRpdmVzLiAqLworIyBkZWZpbmUgVjNEX0NMRV9RQ0ZHX0VU RklMVCAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg3KQorLyogSWYgc2V0IHdpdGggRVRG SUxULCBqdXN0IHdyaXRlIHRoZSBjbGVhciBjb2xvciB0byB0aWxlcyB3aXRoIG5vCisgKiBwcmlt aXRpdmVzLgorICovCisjIGRlZmluZSBWM0RfQ0xFX1FDRkdfRVRQUk9DICAgICAgICAgICAgICAg ICAgICAgICAgICAgQklUKDYpCisjIGRlZmluZSBWM0RfQ0xFX1FDRkdfRVRTRkxVU0ggICAgICAg ICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBWM0RfQ0xFX1FDRkdfTUNESVMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX1BUQl9CUENBICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwCisjZGVmaW5lIFYzRF9QVEJf QlBDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwNAorI2RlZmluZSBW M0RfUFRCX0JQT0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMDgKKyNk ZWZpbmUgVjNEX1BUQl9CUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw MzBjCisKKyNkZWZpbmUgVjNEX1BUQl9CWENGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwMzEwCisjIGRlZmluZSBWM0RfUFRCX0JYQ0ZfUldPUkRFUkRJU0EgICAgICAgICAg ICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBWM0RfUFRCX0JYQ0ZfQ0xJUERJU0EgICAgICAg ICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dNUF9TVEFUVVMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwCisjIGRlZmluZSBWM0RfR01QX1NUQVRV U19HTVBSU1QgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDMxKQorIyBkZWZpbmUgVjNEX0dN UF9TVEFUVVNfV1JfQ09VTlRfTUFTSyAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDMwLCAyNCkK KyMgZGVmaW5lIFYzRF9HTVBfU1RBVFVTX1dSX0NPVU5UX1NISUZUICAgICAgICAgICAgICAgICAy NAorIyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNfUkRfQ09VTlRfTUFTSyAgICAgICAgICAgICAgICAg IFYzRF9NQVNLKDIyLCAxNikKKyMgZGVmaW5lIFYzRF9HTVBfU1RBVFVTX1JEX0NPVU5UX1NISUZU ICAgICAgICAgICAgICAgICAxNgorIyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNfV1JfQUNUSVZFICAg ICAgICAgICAgICAgICAgICAgIEJJVCg1KQorIyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNfUkRfQUNU SVZFICAgICAgICAgICAgICAgICAgICAgIEJJVCg0KQorIyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNf Q0ZHX0JVU1kgICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQorIyBkZWZpbmUgVjNEX0dNUF9T VEFUVVNfQ05UT1ZGICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgyKQorIyBkZWZpbmUgVjNE X0dNUF9TVEFUVVNfSU5WUFJPVCAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQorIyBkZWZp bmUgVjNEX0dNUF9TVEFUVVNfVklPICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQor CisjZGVmaW5lIFYzRF9HTVBfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgwMDgwNAorIyBkZWZpbmUgVjNEX0dNUF9DRkdfTEJVUlNURU4gICAgICAgICAgICAgICAgICAg ICAgICAgIEJJVCgzKQorIyBkZWZpbmUgVjNEX0dNUF9DRkdfUEdDUlNFTiAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJJVCgpCisjIGRlZmluZSBWM0RfR01QX0NGR19TVE9QX1JFUSAgICAgICAg ICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBWM0RfR01QX0NGR19QUk9UX0VOQUJM RSAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dNUF9WSU9fQURE UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODA4CisjZGVmaW5lIFYzRF9HTVBf VklPX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwYworI2RlZmluZSBW M0RfR01QX1RBQkxFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MTAKKyNk ZWZpbmUgVjNEX0dNUF9DTEVBUl9MT0FEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw ODE0CisjZGVmaW5lIFYzRF9HTVBfUFJFU0VSVkVfTE9BRCAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgwMDgxOAorI2RlZmluZSBWM0RfR01QX1ZBTElEX0xJTkVTICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDA4MjAKKworI2VuZGlmIC8qIFYzRF9SRUdTX0ggKi8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3NjaGVkLmMgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3Yz ZF9zY2hlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjA3YmVj ZTk0MTdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc2NoZWQu YwpAQCAtMCwwICsxLDIyOCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAr CisvKiBDb3B5cmlnaHQgKEMpIDIwMTggQnJvYWRjb20gKi8KKworLyoqCisgKiBET0M6IEJyb2Fk Y29tIFYzRCBzY2hlZHVsaW5nCisgKgorICogVGhlIHNoYXJlZCBEUk0gR1BVIHNjaGVkdWxlciBp cyB1c2VkIHRvIGNvb3JkaW5hdGUgc3VibWl0dGluZyBqb2JzCisgKiB0byB0aGUgaGFyZHdhcmUu ICBFYWNoIERSTSBmZCAocm91Z2hseSBhIGNsaWVudCBwcm9jZXNzKSBnZXRzIGl0cworICogb3du IHNjaGVkdWxlciBlbnRpdHksIHdoaWNoIHdpbGwgcHJvY2VzcyBqb2JzIGluIG9yZGVyLiAgVGhl IEdQVQorICogc2NoZWR1bGVyIHdpbGwgcm91bmQtcm9iaW4gYmV0d2VlbiBjbGllbnRzIHRvIHN1 Ym1pdCB0aGUgbmV4dCBqb2IuCisgKgorICogRm9yIHNpbXBsaWNpdHksIGFuZCBpbiBvcmRlciB0 byBrZWVwIGxhdGVuY3kgbG93IGZvciBpbnRlcmFjdGl2ZQorICogam9icyB3aGVuIGJ1bGsgYmFj a2dyb3VuZCBqb2JzIGFyZSBxdWV1ZWQgdXAsIHdlIHN1Ym1pdCBhIG5ldyBqb2IKKyAqIHRvIHRo ZSBIVyBvbmx5IHdoZW4gaXQgaGFzIGNvbXBsZXRlZCB0aGUgbGFzdCBvbmUsIGluc3RlYWQgb2YK KyAqIGZpbGxpbmcgdXAgdGhlIENUWzAxXVEgRklGT3Mgd2l0aCBqb2JzLiAgU2ltaWxhcmx5LCB3 ZSB1c2UKKyAqIHYzZF9qb2JfZGVwZW5kZW5jeSgpIHRvIG1hbmFnZSB0aGUgZGVwZW5kZW5jeSBi ZXR3ZWVuIGJpbiBhbmQKKyAqIHJlbmRlciwgaW5zdGVhZCBvZiBoYXZpbmcgdGhlIGNsaWVudHMg c3VibWl0IGpvYnMgd2l0aCB1c2luZyB0aGUKKyAqIEhXJ3Mgc2VtYXBob3JlcyB0byBpbnRlcmxv Y2sgYmV0d2VlbiB0aGVtLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisKKyNp bmNsdWRlICJ2M2RfZHJ2LmgiCisjaW5jbHVkZSAidjNkX3JlZ3MuaCIKKyNpbmNsdWRlICJ2M2Rf dHJhY2UuaCIKKworc3RhdGljIHN0cnVjdCB2M2Rfam9iICoKK3RvX3YzZF9qb2Ioc3RydWN0IGRy bV9zY2hlZF9qb2IgKnNjaGVkX2pvYikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNjaGVkX2pv Yiwgc3RydWN0IHYzZF9qb2IsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZAordjNkX2pvYl9mcmVl KHN0cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2IpCit7CisJc3RydWN0IHYzZF9qb2IgKmpv YiA9IHRvX3YzZF9qb2Ioc2NoZWRfam9iKTsKKworCXYzZF9leGVjX3B1dChqb2ItPmV4ZWMpOwor fQorCisvKioKKyAqIFJldHVybnMgdGhlIGZlbmNlcyB0aGF0IHRoZSBiaW4gam9iIGRlcGVuZHMg b24sIG9uZSBieSBvbmUuCisgKiB2M2Rfam9iX3J1bigpIHdvbid0IGJlIGNhbGxlZCB1bnRpbCBh bGwgb2YgdGhlbSBoYXZlIGJlZW4gc2lnbmFsZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZG1hX2Zl bmNlICoKK3YzZF9qb2JfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9i LAorCQkgICBzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSAqc19lbnRpdHkpCit7CisJc3RydWN0IHYz ZF9qb2IgKmpvYiA9IHRvX3YzZF9qb2Ioc2NoZWRfam9iKTsKKwlzdHJ1Y3QgdjNkX2V4ZWNfaW5m byAqZXhlYyA9IGpvYi0+ZXhlYzsKKwllbnVtIHYzZF9xdWV1ZSBxID0gam9iID09ICZleGVjLT5i aW4gPyBWM0RfQklOIDogVjNEX1JFTkRFUjsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKKwor CWZlbmNlID0gam9iLT5pbl9mZW5jZTsKKwlpZiAoZmVuY2UpIHsKKwkJam9iLT5pbl9mZW5jZSA9 IE5VTEw7CisJCXJldHVybiBmZW5jZTsKKwl9CisKKwlpZiAocSA9PSBWM0RfUkVOREVSKSB7CisJ CS8qIElmIHdlIGhhZCBhIGJpbiBqb2IsIHRoZSByZW5kZXIgam9iIGRlZmluaXRlbHkgZGVwZW5k cyBvbgorCQkgKiBpdC4gV2UgZmlyc3QgaGF2ZSB0byB3YWl0IGZvciBiaW4gdG8gYmUgc2NoZWR1 bGVkLCBzbyB0aGF0CisJCSAqIGl0cyBkb25lX2ZlbmNlIGlzIGNyZWF0ZWQuCisJCSAqLworCQlm ZW5jZSA9IGV4ZWMtPmJpbl9kb25lX2ZlbmNlOworCQlpZiAoZmVuY2UpIHsKKwkJCWV4ZWMtPmJp bl9kb25lX2ZlbmNlID0gTlVMTDsKKwkJCXJldHVybiBmZW5jZTsKKwkJfQorCX0KKworCS8qIFhY WDogV2FpdCBvbiBhIGZlbmNlIGZvciBzd2l0Y2hpbmcgdGhlIEdNUCBpZiBuZWNlc3NhcnksCisJ ICogYW5kIHRoZW4gZG8gc28uCisJICovCisKKwlyZXR1cm4gZmVuY2U7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgZG1hX2ZlbmNlICp2M2Rfam9iX3J1bihzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc2NoZWRf am9iKQoreworCXN0cnVjdCB2M2Rfam9iICpqb2IgPSB0b192M2Rfam9iKHNjaGVkX2pvYik7CisJ c3RydWN0IHYzZF9leGVjX2luZm8gKmV4ZWMgPSBqb2ItPmV4ZWM7CisJZW51bSB2M2RfcXVldWUg cSA9IGpvYiA9PSAmZXhlYy0+YmluID8gVjNEX0JJTiA6IFYzRF9SRU5ERVI7CisJc3RydWN0IHYz ZF9kZXYgKnYzZCA9IGV4ZWMtPnYzZDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJnYzZC0+ ZHJtOworCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7 CisKKwlpZiAodW5saWtlbHkoam9iLT5iYXNlLnNfZmVuY2UtPmZpbmlzaGVkLmVycm9yKSkKKwkJ cmV0dXJuIE5VTEw7CisKKwkvKiBMb2NrIHJlcXVpcmVkIGFyb3VuZCBiaW5fam9iIHVwZGF0ZSB2 cworCSAqIHYzZF9vdmVyZmxvd19tZW1fd29yaygpLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZl KCZ2M2QtPmpvYl9sb2NrLCBpcnFmbGFncyk7CisJaWYgKHEgPT0gVjNEX0JJTikgeworCQl2M2Qt PmJpbl9qb2IgPSBqb2ItPmV4ZWM7CisKKwkJLyogQ2xlYXIgb3V0IHRoZSBvdmVyZmxvdyBhbGxv Y2F0aW9uLCBzbyB3ZSBkb24ndAorCQkgKiByZXVzZSB0aGUgb3ZlcmZsb3cgYXR0YWNoZWQgdG8g YSBwcmV2aW91cyBqb2IuCisJCSAqLworCQlWM0RfQ09SRV9XUklURSgwLCBWM0RfUFRCX0JQT1Ms IDApOworCX0gZWxzZSB7CisJCXYzZC0+cmVuZGVyX2pvYiA9IGpvYi0+ZXhlYzsKKwl9CisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmdjNkLT5qb2JfbG9jaywgaXJxZmxhZ3MpOworCisJLyogQ2Fu IHdlIGF2b2lkIHRoaXMgZmx1c2ggd2hlbiBxPT1SRU5ERVI/ICBXZSBuZWVkIHRvIGJlCisJICog Y2FyZWZ1bCBvZiBzY2hlZHVsaW5nLCB0aG91Z2ggLS0gaW1hZ2luZSBqb2IwIHJlbmRlcmluZyB0 bworCSAqIHRleHR1cmUgYW5kIGpvYjEgcmVhZGluZywgYW5kIHRoZW0gYmVpbmcgZXhlY3V0ZWQg YXMgYmluMCwKKwkgKiBiaW4xLCByZW5kZXIwLCByZW5kZXIxLCBzbyB0aGF0IHJlbmRlcjEncyBm bHVzaCBhdCBiaW4gdGltZQorCSAqIHdhc24ndCBlbm91Z2guCisJICovCisJdjNkX2ludmFsaWRh dGVfY2FjaGVzKHYzZCk7CisKKwlmZW5jZSA9IHYzZF9mZW5jZV9jcmVhdGUodjNkLCBxKTsKKwlp ZiAoIWZlbmNlKQorCQlyZXR1cm4gZmVuY2U7CisKKwlpZiAoam9iLT5kb25lX2ZlbmNlKQorCQlk bWFfZmVuY2VfcHV0KGpvYi0+ZG9uZV9mZW5jZSk7CisJam9iLT5kb25lX2ZlbmNlID0gZG1hX2Zl bmNlX2dldChmZW5jZSk7CisKKwl0cmFjZV92M2Rfc3VibWl0X2NsKGRldiwgcSA9PSBWM0RfUkVO REVSLCB0b192M2RfZmVuY2UoZmVuY2UpLT5zZXFubywKKwkJCSAgICBqb2ItPnN0YXJ0LCBqb2It PmVuZCk7CisKKwlpZiAocSA9PSBWM0RfQklOKSB7CisJCWlmIChleGVjLT5xbWEpIHsKKwkJCVYz RF9DT1JFX1dSSVRFKDAsIFYzRF9DTEVfQ1QwUU1BLCBleGVjLT5xbWEpOworCQkJVjNEX0NPUkVf V1JJVEUoMCwgVjNEX0NMRV9DVDBRTVMsIGV4ZWMtPnFtcyk7CisJCX0KKwkJaWYgKGV4ZWMtPnF0 cykgeworCQkJVjNEX0NPUkVfV1JJVEUoMCwgVjNEX0NMRV9DVDBRVFMsCisJCQkJICAgICAgIFYz RF9DTEVfQ1QwUVRTX0VOQUJMRSB8CisJCQkJICAgICAgIGV4ZWMtPnF0cyk7CisJCX0KKwl9IGVs c2UgeworCQkvKiBYWFg6IFNldCB0aGUgUUNGRyAqLworCX0KKworCS8qIFNldCB0aGUgY3VycmVu dCBhbmQgZW5kIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgbGlzdC4KKwkgKiBXcml0aW5nIHRoZSBl bmQgcmVnaXN0ZXIgaXMgd2hhdCBzdGFydHMgdGhlIGpvYi4KKwkgKi8KKwlWM0RfQ09SRV9XUklU RSgwLCBWM0RfQ0xFX0NUTlFCQShxKSwgam9iLT5zdGFydCk7CisJVjNEX0NPUkVfV1JJVEUoMCwg VjNEX0NMRV9DVE5RRUEocSksIGpvYi0+ZW5kKTsKKworCXJldHVybiBmZW5jZTsKK30KKworc3Rh dGljIHZvaWQKK3YzZF9qb2JfdGltZWRvdXQoc3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pv YikKK3sKKwlzdHJ1Y3QgdjNkX2pvYiAqam9iID0gdG9fdjNkX2pvYihzY2hlZF9qb2IpOworCXN0 cnVjdCB2M2RfZXhlY19pbmZvICpleGVjID0gam9iLT5leGVjOworCXN0cnVjdCB2M2RfZGV2ICp2 M2QgPSBleGVjLT52M2Q7CisJZW51bSB2M2RfcXVldWUgcTsKKworCW11dGV4X2xvY2soJnYzZC0+ cmVzZXRfbG9jayk7CisKKwkvKiBibG9jayBzY2hlZHVsZXIgKi8KKwlmb3IgKHEgPSAwOyBxIDwg VjNEX01BWF9RVUVVRVM7IHErKykgeworCQlzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVk ID0gJnYzZC0+cXVldWVbcV0uc2NoZWQ7CisKKwkJa3RocmVhZF9wYXJrKHNjaGVkLT50aHJlYWQp OworCQlkcm1fc2NoZWRfaHdfam9iX3Jlc2V0KHNjaGVkLCAoc2NoZWRfam9iLT5zY2hlZCA9PSBz Y2hlZCA/CisJCQkJCSAgICAgICBzY2hlZF9qb2IgOiBOVUxMKSk7CisJfQorCisJLyogZ2V0IHRo ZSBHUFUgYmFjayBpbnRvIHRoZSBpbml0IHN0YXRlICovCisJdjNkX3Jlc2V0KHYzZCk7CisKKwkv KiBVbmJsb2NrIHNjaGVkdWxlcnMgYW5kIHJlc3RhcnQgdGhlaXIgam9icy4gKi8KKwlmb3IgKHEg PSAwOyBxIDwgVjNEX01BWF9RVUVVRVM7IHErKykgeworCQlkcm1fc2NoZWRfam9iX3JlY292ZXJ5 KCZ2M2QtPnF1ZXVlW3FdLnNjaGVkKTsKKwkJa3RocmVhZF91bnBhcmsodjNkLT5xdWV1ZVtxXS5z Y2hlZC50aHJlYWQpOworCX0KKworCW11dGV4X3VubG9jaygmdjNkLT5yZXNldF9sb2NrKTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fc2NoZWRfYmFja2VuZF9vcHMgdjNkX3NjaGVkX29w cyA9IHsKKwkuZGVwZW5kZW5jeSA9IHYzZF9qb2JfZGVwZW5kZW5jeSwKKwkucnVuX2pvYiA9IHYz ZF9qb2JfcnVuLAorCS50aW1lZG91dF9qb2IgPSB2M2Rfam9iX3RpbWVkb3V0LAorCS5mcmVlX2pv YiA9IHYzZF9qb2JfZnJlZQorfTsKKworaW50Cit2M2Rfc2NoZWRfaW5pdChzdHJ1Y3QgdjNkX2Rl diAqdjNkKQoreworCWludCBod19qb2JzX2xpbWl0ID0gMTsKKwlpbnQgam9iX2hhbmdfbGltaXQg PSAwOworCWludCBoYW5nX2xpbWl0X21zID0gNTAwOworCWludCByZXQ7CisKKwlyZXQgPSBkcm1f c2NoZWRfaW5pdCgmdjNkLT5xdWV1ZVtWM0RfQklOXS5zY2hlZCwKKwkJCSAgICAgJnYzZF9zY2hl ZF9vcHMsCisJCQkgICAgIGh3X2pvYnNfbGltaXQsIGpvYl9oYW5nX2xpbWl0LAorCQkJICAgICBt c2Vjc190b19qaWZmaWVzKGhhbmdfbGltaXRfbXMpLAorCQkJICAgICAidjNkX2JpbiIpOworCWlm IChyZXQpIHsKKwkJZGV2X2Vycih2M2QtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgYmluIHNjaGVk dWxlcjogJWQuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkcm1fc2NoZWRf aW5pdCgmdjNkLT5xdWV1ZVtWM0RfUkVOREVSXS5zY2hlZCwKKwkJCSAgICAgJnYzZF9zY2hlZF9v cHMsCisJCQkgICAgIGh3X2pvYnNfbGltaXQsIGpvYl9oYW5nX2xpbWl0LAorCQkJICAgICBtc2Vj c190b19qaWZmaWVzKGhhbmdfbGltaXRfbXMpLAorCQkJICAgICAidjNkX3JlbmRlciIpOworCWlm IChyZXQpIHsKKwkJZGV2X2Vycih2M2QtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgcmVuZGVyIHNj aGVkdWxlcjogJWQuIiwKKwkJCXJldCk7CisJCWRybV9zY2hlZF9maW5pKCZ2M2QtPnF1ZXVlW1Yz RF9CSU5dLnNjaGVkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9p ZAordjNkX3NjaGVkX2Zpbmkoc3RydWN0IHYzZF9kZXYgKnYzZCkKK3sKKwllbnVtIHYzZF9xdWV1 ZSBxOworCisJZm9yIChxID0gMDsgcSA8IFYzRF9NQVhfUVVFVUVTOyBxKyspCisJCWRybV9zY2hl ZF9maW5pKCZ2M2QtPnF1ZXVlW3FdLnNjaGVkKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92M2QvdjNkX3RyYWNlLmggYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF90cmFjZS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODVkZDM1MWUxZTA5Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfdHJhY2UuaApAQCAtMCwwICsx LDgyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qIENvcHlyaWdo dCAoQykgMjAxNS0yMDE4IEJyb2FkY29tICovCisKKyNpZiAhZGVmaW5lZChfVjNEX1RSQUNFX0hf KSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVjNEX1RSQUNF X0hfCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBl cy5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI3VuZGVmIFRSQUNFX1NZU1RF TQorI2RlZmluZSBUUkFDRV9TWVNURU0gdjNkCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSB2 M2RfdHJhY2UKKworVFJBQ0VfRVZFTlQodjNkX3N1Ym1pdF9jbCwKKwkgICAgVFBfUFJPVE8oc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBpc19yZW5kZXIsCisJCSAgICAgdWludDY0X3Qgc2Vx bm8sCisJCSAgICAgdTMyIGN0bnFiYSwgdTMyIGN0bnFlYSksCisJICAgIFRQX0FSR1MoZGV2LCBp c19yZW5kZXIsIHNlcW5vLCBjdG5xYmEsIGN0bnFlYSksCisKKwkgICAgVFBfU1RSVUNUX19lbnRy eSgKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKKwkJCSAgICAgX19maWVsZChib29sLCBpc19y ZW5kZXIpCisJCQkgICAgIF9fZmllbGQodTY0LCBzZXFubykKKwkJCSAgICAgX19maWVsZCh1MzIs IGN0bnFiYSkKKwkJCSAgICAgX19maWVsZCh1MzIsIGN0bnFlYSkKKwkJCSAgICAgKSwKKworCSAg ICBUUF9mYXN0X2Fzc2lnbigKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5k ZXg7CisJCQkgICBfX2VudHJ5LT5pc19yZW5kZXIgPSBpc19yZW5kZXI7CisJCQkgICBfX2VudHJ5 LT5zZXFubyA9IHNlcW5vOworCQkJICAgX19lbnRyeS0+Y3RucWJhID0gY3RucWJhOworCQkJICAg X19lbnRyeS0+Y3RucWVhID0gY3RucWVhOworCQkJICAgKSwKKworCSAgICBUUF9wcmludGsoImRl dj0ldSwgJXMsIHNlcW5vPSVsbHUsIDB4JTA4eC4uMHglMDh4IiwKKwkJICAgICAgX19lbnRyeS0+ ZGV2LAorCQkgICAgICBfX2VudHJ5LT5pc19yZW5kZXIgPyAiUkNMIiA6ICJCQ0wiLAorCQkgICAg ICBfX2VudHJ5LT5zZXFubywKKwkJICAgICAgX19lbnRyeS0+Y3RucWJhLAorCQkgICAgICBfX2Vu dHJ5LT5jdG5xZWEpCispOworCitUUkFDRV9FVkVOVCh2M2RfcmVzZXRfYmVnaW4sCisJICAgIFRQ X1BST1RPKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpLAorCSAgICBUUF9BUkdTKGRldiksCisKKwkg ICAgVFBfU1RSVUNUX19lbnRyeSgKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKKwkJCSAgICAg KSwKKworCSAgICBUUF9mYXN0X2Fzc2lnbigKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJp bWFyeS0+aW5kZXg7CisJCQkgICApLAorCisJICAgIFRQX3ByaW50aygiZGV2PSV1IiwKKwkJICAg ICAgX19lbnRyeS0+ZGV2KQorKTsKKworVFJBQ0VfRVZFTlQodjNkX3Jlc2V0X2VuZCwKKwkgICAg VFBfUFJPVE8oc3RydWN0IGRybV9kZXZpY2UgKmRldiksCisJICAgIFRQX0FSR1MoZGV2KSwKKwor CSAgICBUUF9TVFJVQ1RfX2VudHJ5KAorCQkJICAgICBfX2ZpZWxkKHUzMiwgZGV2KQorCQkJICAg ICApLAorCisJICAgIFRQX2Zhc3RfYXNzaWduKAorCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2LT5w cmltYXJ5LT5pbmRleDsKKwkJCSAgICksCisKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUiLAorCQkg ICAgICBfX2VudHJ5LT5kZXYpCispOworCisjZW5kaWYgLyogX1YzRF9UUkFDRV9IXyAqLworCisv KiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyN1bmRlZiBUUkFDRV9J TkNMVURFX1BBVEgKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIC4KKyNpbmNsdWRlIDx0cmFj ZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3Ry YWNlX3BvaW50cy5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfdHJhY2VfcG9pbnRzLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40ODI5MjJkN2M3ZTEKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF90cmFjZV9wb2ludHMuYwpAQCAt MCwwICsxLDkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyogQ29w eXJpZ2h0IChDKSAyMDE1IEJyb2FkY29tICovCisKKyNpbmNsdWRlICJ2M2RfZHJ2LmgiCisKKyNp Zm5kZWYgX19DSEVDS0VSX18KKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUg InYzZF90cmFjZS5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL3YzZF9k cm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vdjNkX2RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMjAxYTA3NjQ1YmRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVk ZS91YXBpL2RybS92M2RfZHJtLmgKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAxNC0yMDE4IEJyb2FkY29tCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX1YzRF9EUk1fSF8KKyNkZWZpbmUgX1YzRF9EUk1f SF8KKworI2luY2x1ZGUgImRybS5oIgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVy biAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgRFJNX1YzRF9TVUJNSVRfQ0wgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMAorI2RlZmluZSBEUk1fVjNEX1dBSVRfQk8gICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAxCisjZGVmaW5lIERSTV9WM0RfQ1JFQVRFX0JPICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDIKKyNkZWZpbmUgRFJNX1YzRF9NTUFQX0JPICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMworI2RlZmluZSBEUk1fVjNEX0dFVF9QQVJBTSAgICAgICAgICAgICAgICAg ICAgICAgICAweDA0CisjZGVmaW5lIERSTV9WM0RfR0VUX0JPX09GRlNFVCAgICAgICAgICAgICAg ICAgICAgIDB4MDUKKworI2RlZmluZSBEUk1fSU9DVExfVjNEX1NVQk1JVF9DTCAgICAgICAgICAg RFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WM0RfU1VCTUlUX0NMLCBzdHJ1Y3QgZHJt X3YzZF9zdWJtaXRfY2wpCisjZGVmaW5lIERSTV9JT0NUTF9WM0RfV0FJVF9CTyAgICAgICAgICAg ICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1YzRF9XQUlUX0JPLCBzdHJ1Y3QgZHJt X3YzZF93YWl0X2JvKQorI2RlZmluZSBEUk1fSU9DVExfVjNEX0NSRUFURV9CTyAgICAgICAgICAg RFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WM0RfQ1JFQVRFX0JPLCBzdHJ1Y3QgZHJt X3YzZF9jcmVhdGVfYm8pCisjZGVmaW5lIERSTV9JT0NUTF9WM0RfTU1BUF9CTyAgICAgICAgICAg ICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1YzRF9NTUFQX0JPLCBzdHJ1Y3QgZHJt X3YzZF9tbWFwX2JvKQorI2RlZmluZSBEUk1fSU9DVExfVjNEX0dFVF9QQVJBTSAgICAgICAgICAg RFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WM0RfR0VUX1BBUkFNLCBzdHJ1Y3QgZHJt X3YzZF9nZXRfcGFyYW0pCisjZGVmaW5lIERSTV9JT0NUTF9WM0RfR0VUX0JPX09GRlNFVCAgICAg ICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1YzRF9HRVRfQk9fT0ZGU0VULCBzdHJ1 Y3QgZHJtX3YzZF9nZXRfYm9fb2Zmc2V0KQorCisvKioKKyAqIHN0cnVjdCBkcm1fdjNkX3N1Ym1p dF9jbCAtIGlvY3RsIGFyZ3VtZW50IGZvciBzdWJtaXR0aW5nIGNvbW1hbmRzIHRvIHRoZSAzRAor ICogZW5naW5lLgorICoKKyAqIFRoaXMgYXNrcyB0aGUga2VybmVsIHRvIGhhdmUgdGhlIEdQVSBl eGVjdXRlIGFuIG9wdGlvbmFsIGJpbm5lcgorICogY29tbWFuZCBsaXN0LCBhbmQgYSByZW5kZXIg Y29tbWFuZCBsaXN0LgorICovCitzdHJ1Y3QgZHJtX3YzZF9zdWJtaXRfY2wgeworCS8qIFBvaW50 ZXIgdG8gdGhlIGJpbm5lciBjb21tYW5kIGxpc3QuCisJICoKKwkgKiBUaGlzIGlzIHRoZSBmaXJz dCBzZXQgb2YgY29tbWFuZHMgZXhlY3V0ZWQsIHdoaWNoIHJ1bnMgdGhlCisJICogY29vcmRpbmF0 ZSBzaGFkZXIgdG8gZGV0ZXJtaW5lIHdoZXJlIHByaW1pdGl2ZXMgbGFuZCBvbiB0aGUgc2NyZWVu LAorCSAqIHRoZW4gd3JpdGVzIG91dCB0aGUgc3RhdGUgdXBkYXRlcyBhbmQgZHJhdyBjYWxscyBu ZWNlc3NhcnkgcGVyIHRpbGUKKwkgKiB0byB0aGUgdGlsZSBhbGxvY2F0aW9uIEJPLgorCSAqLwor CV9fdTMyIGJjbF9zdGFydDsKKworCSAvKiogRW5kIGFkZHJlc3Mgb2YgdGhlIEJDTCAoZmlyc3Qg Ynl0ZSBhZnRlciB0aGUgQkNMKSAqLworCV9fdTMyIGJjbF9lbmQ7CisKKwkvKiBPZmZzZXQgb2Yg dGhlIHJlbmRlciBjb21tYW5kIGxpc3QuCisJICoKKwkgKiBUaGlzIGlzIHRoZSBzZWNvbmQgc2V0 IG9mIGNvbW1hbmRzIGV4ZWN1dGVkLCB3aGljaCB3aWxsIGVpdGhlcgorCSAqIGV4ZWN1dGUgdGhl IHRpbGVzIHRoYXQgaGF2ZSBiZWVuIHNldCB1cCBieSB0aGUgQkNMLCBvciBhIGZpeGVkIHNldAor CSAqIG9mIHRpbGVzIChpbiB0aGUgY2FzZSBvZiBSQ0wtb25seSBibGl0cykuCisJICovCisJX191 MzIgcmNsX3N0YXJ0OworCisJIC8qKiBFbmQgYWRkcmVzcyBvZiB0aGUgUkNMIChmaXJzdCBieXRl IGFmdGVyIHRoZSBSQ0wpICovCisJX191MzIgcmNsX2VuZDsKKworCS8qKiBBbiBvcHRpb25hbCBz eW5jIG9iamVjdCB0byB3YWl0IG9uIGJlZm9yZSBzdGFydGluZyB0aGUgQkNMLiAqLworCV9fdTMy IGluX3N5bmNfYmNsOworCS8qKiBBbiBvcHRpb25hbCBzeW5jIG9iamVjdCB0byB3YWl0IG9uIGJl Zm9yZSBzdGFydGluZyB0aGUgUkNMLiAqLworCV9fdTMyIGluX3N5bmNfcmNsOworCS8qKiBBbiBv cHRpb25hbCBzeW5jIG9iamVjdCB0byBwbGFjZSB0aGUgY29tcGxldGlvbiBmZW5jZSBpbi4gKi8K KwlfX3UzMiBvdXRfc3luYzsKKworCS8qIE9mZnNldCBvZiB0aGUgdGlsZSBhbGxvYyBtZW1vcnkK KwkgKgorCSAqIFRoaXMgaXMgb3B0aW9uYWwgb24gVjNEIDMuMyAod2hlcmUgdGhlIENMIGNhbiBz ZXQgdGhlIHZhbHVlKSBidXQKKwkgKiByZXF1aXJlZCBvbiBWM0QgNC4xLgorCSAqLworCV9fdTMy IHFtYTsKKworCS8qKiBTaXplIG9mIHRoZSB0aWxlIGFsbG9jIG1lbW9yeS4gKi8KKwlfX3UzMiBx bXM7CisKKwkvKiogT2Zmc2V0IG9mIHRoZSB0aWxlIHN0YXRlIGRhdGEgYXJyYXkuICovCisJX191 MzIgcXRzOworCisJLyogUG9pbnRlciB0byBhIHUzMiBhcnJheSBvZiB0aGUgQk9zIHRoYXQgYXJl IHJlZmVyZW5jZWQgYnkgdGhlIGpvYi4KKwkgKi8KKwlfX3U2NCBib19oYW5kbGVzOworCisJLyog TnVtYmVyIG9mIEJPIGhhbmRsZXMgcGFzc2VkIGluIChzaXplIGlzIHRoYXQgdGltZXMgNCkuICov CisJX191MzIgYm9faGFuZGxlX2NvdW50OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHJtX3YzZF93 YWl0X2JvIC0gaW9jdGwgYXJndW1lbnQgZm9yIHdhaXRpbmcgZm9yCisgKiBjb21wbGV0aW9uIG9m IHRoZSBsYXN0IERSTV9WM0RfU1VCTUlUX0NMIG9uIGEgQk8uCisgKgorICogVGhpcyBpcyB1c2Vm dWwgZm9yIGNhc2VzIHdoZXJlIG11bHRpcGxlIHByb2Nlc3NlcyBtaWdodCBiZQorICogcmVuZGVy aW5nIHRvIGEgQk8gYW5kIHlvdSB3YW50IHRvIHdhaXQgZm9yIGFsbCByZW5kZXJpbmcgdG8gYmUK KyAqIGNvbXBsZXRlZC4KKyAqLworc3RydWN0IGRybV92M2Rfd2FpdF9ibyB7CisJX191MzIgaGFu ZGxlOworCV9fdTMyIHBhZDsKKwlfX3U2NCB0aW1lb3V0X25zOworfTsKKworLyoqCisgKiBzdHJ1 Y3QgZHJtX3YzZF9jcmVhdGVfYm8gLSBpb2N0bCBhcmd1bWVudCBmb3IgY3JlYXRpbmcgVjNEIEJP cy4KKyAqCisgKiBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHZhbHVlcyBmb3IgdGhlIGZsYWdzIGFy Z3VtZW50LCBidXQgaXQgbWF5IGJlCisgKiB1c2VkIGluIGEgZnV0dXJlIGV4dGVuc2lvbi4KKyAq Lworc3RydWN0IGRybV92M2RfY3JlYXRlX2JvIHsKKwlfX3UzMiBzaXplOworCV9fdTMyIGZsYWdz OworCS8qKiBSZXR1cm5lZCBHRU0gaGFuZGxlIGZvciB0aGUgQk8uICovCisJX191MzIgaGFuZGxl OworCS8qKgorCSAqIFJldHVybmVkIG9mZnNldCBmb3IgdGhlIEJPIGluIHRoZSBWM0QgYWRkcmVz cyBzcGFjZS4gIFRoaXMgb2Zmc2V0CisJICogaXMgcHJpdmF0ZSB0byB0aGUgRFJNIGZkIGFuZCBp cyB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBHRU0KKwkgKiBoYW5kbGUuCisJICoKKwkg KiBUaGlzIG9mZnNldCB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBub256ZXJvLCBzaW5jZSB2YXJpb3Vz IEhXCisJICogdW5pdHMgdHJlYXQgMCBzcGVjaWFsbHkuCisJICovCisJX191MzIgb2Zmc2V0Owor fTsKKworLyoqCisgKiBzdHJ1Y3QgZHJtX3YzZF9tbWFwX2JvIC0gaW9jdGwgYXJndW1lbnQgZm9y IG1hcHBpbmcgVjNEIEJPcy4KKyAqCisgKiBUaGlzIGRvZXNuJ3QgYWN0dWFsbHkgcGVyZm9ybSBh biBtbWFwLiAgSW5zdGVhZCwgaXQgcmV0dXJucyB0aGUKKyAqIG9mZnNldCB5b3UgbmVlZCB0byB1 c2UgaW4gYW4gbW1hcCBvbiB0aGUgRFJNIGRldmljZSBub2RlLiAgVGhpcworICogbWVhbnMgdGhh dCB0b29scyBsaWtlIHZhbGdyaW5kIGVuZCB1cCBrbm93aW5nIGFib3V0IHRoZSBtYXBwZWQKKyAq IG1lbW9yeS4KKyAqCisgKiBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHZhbHVlcyBmb3IgdGhlIGZs YWdzIGFyZ3VtZW50LCBidXQgaXQgbWF5IGJlCisgKiB1c2VkIGluIGEgZnV0dXJlIGV4dGVuc2lv bi4KKyAqLworc3RydWN0IGRybV92M2RfbW1hcF9ibyB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9i amVjdCBiZWluZyBtYXBwZWQuICovCisJX191MzIgaGFuZGxlOworCV9fdTMyIGZsYWdzOworCS8q KiBvZmZzZXQgaW50byB0aGUgZHJtIG5vZGUgdG8gdXNlIGZvciBzdWJzZXF1ZW50IG1tYXAgY2Fs bC4gKi8KKwlfX3U2NCBvZmZzZXQ7Cit9OworCitlbnVtIGRybV92M2RfcGFyYW0geworCURSTV9W M0RfUEFSQU1fVjNEX1VJRkNGRywKKwlEUk1fVjNEX1BBUkFNX1YzRF9IVUJfSURFTlQxLAorCURS TV9WM0RfUEFSQU1fVjNEX0hVQl9JREVOVDIsCisJRFJNX1YzRF9QQVJBTV9WM0RfSFVCX0lERU5U MywKKwlEUk1fVjNEX1BBUkFNX1YzRF9DT1JFMF9JREVOVDAsCisJRFJNX1YzRF9QQVJBTV9WM0Rf Q09SRTBfSURFTlQxLAorCURSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMiwKK307CisKK3N0 cnVjdCBkcm1fdjNkX2dldF9wYXJhbSB7CisJX191MzIgcGFyYW07CisJX191MzIgcGFkOworCV9f dTY0IHZhbHVlOworfTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBvZmZzZXQgZm9yIHRoZSBCTyBp biB0aGUgVjNEIGFkZHJlc3Mgc3BhY2UgZm9yIHRoaXMgRFJNIGZkLgorICogVGhpcyBpcyB0aGUg c2FtZSB2YWx1ZSByZXR1cm5lZCBieSBkcm1fdjNkX2NyZWF0ZV9ibywgaWYgdGhhdCB3YXMgY2Fs bGVkCisgKiBmcm9tIHRoaXMgRFJNIGZkLgorICovCitzdHJ1Y3QgZHJtX3YzZF9nZXRfYm9fb2Zm c2V0IHsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgb2Zmc2V0OworfTsKKworI2lmIGRlZmluZWQo X19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9WM0RfRFJNX0hfICovCi0tIAoy LjE3LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK