From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH v2 7/9] drm/vc4: Add support for drawing 3D frames. Date: Tue, 8 Dec 2015 10:30:16 -0800 Message-ID: <1449599418-20780-8-git-send-email-eric@anholt.net> References: <1449599418-20780-1-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1449599418-20780-1-git-send-email-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 Cc: linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org VGhlIHVzZXIgc3VibWlzc2lvbiBpcyBiYXNpY2FsbHkgYSBwb2ludGVyIHRvIGEgY29tbWFuZCBs aXN0IGFuZCBhCnBvaW50ZXIgdG8gdW5pZm9ybXMuICBXZSBjb3B5IHRob3NlIGluIHRvIHRoZSBr ZXJuZWwsIHZhbGlkYXRlIGFuZApyZWxvY2F0ZSB0aGVtLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBp biBhIEdQVSBCTyB3aGljaCB3ZSBxdWV1ZSBmb3IKZXhlY3V0aW9uLgoKU2lnbmVkLW9mZi1ieTog RXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KLS0tCgp2MjogRHJvcCBzdXBwb3J0IGZvciBO ViBzaGFkZXIgcmVjcyAobm90IG5lY2Vzc2FyeSBmb3IgR0wpLCBzaW1wbGlmeQogICAgdmM0X3Vz ZV9ibygpLCBpbXByb3ZlIGJpbiBmbHVzaC9zZW1hcGhvcmUgY2hlY2tzLCB1c2UgX191MzIgc3R5 bGUKICAgIHR5cGVzLgoKIGRyaXZlcnMvZ3B1L2RybS92YzQvTWFrZWZpbGUgICAgICAgICAgIHwg ICA3ICsKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jICAgICAgICAgIHwgIDE1ICstCiBk cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaCAgICAgICAgICB8IDE4MiArKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF9nZW0uYyAgICAgICAgICB8IDY0MiArKysrKysrKysrKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaXJxLmMgICAgICAgICAgfCAyMTAgKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BhY2tldC5oICAgICAgIHwgMzk5ICsrKysr KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcmVuZGVyX2NsLmMgICAgfCA2MzQg KysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3RyYWNlLmgg ICAgICAgIHwgIDYzICsrKwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdHJhY2VfcG9pbnRzLmMg fCAgMTQgKwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdjNkLmMgICAgICAgICAgfCAgMzcgKysK IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3ZhbGlkYXRlLmMgICAgIHwgOTAwICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS91YXBpL2RybS92YzRfZHJtLmggICAgICAg ICAgICAgfCAxNDEgKysrKysrCiAxMiBmaWxlcyBjaGFuZ2VkLCAzMjQzIGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2lycS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGFja2V0LmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZW5kZXJfY2wuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3RyYWNlLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF90cmFjZV9wb2ludHMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3ZhbGlkYXRlLmMKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9N YWtlZmlsZQppbmRleCBlODdhNmYyLi40YzZhOTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vdmM0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvTWFrZWZpbGUKQEAgLTgs MTIgKzgsMTkgQEAgdmM0LXkgOj0gXAogCXZjNF9jcnRjLm8gXAogCXZjNF9kcnYubyBcCiAJdmM0 X2ttcy5vIFwKKwl2YzRfZ2VtLm8gXAogCXZjNF9oZG1pLm8gXAogCXZjNF9odnMubyBcCisJdmM0 X2lycS5vIFwKIAl2YzRfcGxhbmUubyBcCisJdmM0X3JlbmRlcl9jbC5vIFwKKwl2YzRfdHJhY2Vf cG9pbnRzLm8gXAogCXZjNF92M2QubyBcCisJdmM0X3ZhbGlkYXRlLm8gXAogCXZjNF92YWxpZGF0 ZV9zaGFkZXJzLm8KIAogdmM0LSQoQ09ORklHX0RFQlVHX0ZTKSArPSB2YzRfZGVidWdmcy5vCiAK IG9iai0kKENPTkZJR19EUk1fVkM0KSAgKz0gdmM0Lm8KKworQ0ZMQUdTX3ZjNF90cmFjZV9wb2lu dHMubyA6PSAtSSQoc3JjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2 LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYwppbmRleCBkYjU4ZDc0Li4yY2ZlZTU5 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF9kcnYuYwpAQCAtNzQsNiArNzQsOSBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IGZpbGVfb3BlcmF0aW9ucyB2YzRfZHJtX2ZvcHMgPSB7CiB9OwogCiBzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9pb2N0bF9kZXNjIHZjNF9kcm1faW9jdGxzW10gPSB7CisJRFJNX0lPQ1RMX0RF Rl9EUlYoVkM0X1NVQk1JVF9DTCwgdmM0X3N1Ym1pdF9jbF9pb2N0bCwgMCksCisJRFJNX0lPQ1RM X0RFRl9EUlYoVkM0X1dBSVRfU0VRTk8sIHZjNF93YWl0X3NlcW5vX2lvY3RsLCAwKSwKKwlEUk1f SU9DVExfREVGX0RSVihWQzRfV0FJVF9CTywgdmM0X3dhaXRfYm9faW9jdGwsIDApLAogCURSTV9J T0NUTF9ERUZfRFJWKFZDNF9DUkVBVEVfQk8sIHZjNF9jcmVhdGVfYm9faW9jdGwsIDApLAogCURS TV9JT0NUTF9ERUZfRFJWKFZDNF9NTUFQX0JPLCB2YzRfbW1hcF9ib19pb2N0bCwgMCksCiAJRFJN X0lPQ1RMX0RFRl9EUlYoVkM0X0NSRUFURV9TSEFERVJfQk8sIHZjNF9jcmVhdGVfc2hhZGVyX2Jv X2lvY3RsLCAwKSwKQEAgLTgzLDEwICs4NiwxNiBAQCBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIg dmM0X2RybV9kcml2ZXIgPSB7CiAJLmRyaXZlcl9mZWF0dXJlcyA9IChEUklWRVJfTU9ERVNFVCB8 CiAJCQkgICAgRFJJVkVSX0FUT01JQyB8CiAJCQkgICAgRFJJVkVSX0dFTSB8CisJCQkgICAgRFJJ VkVSX0hBVkVfSVJRIHwKIAkJCSAgICBEUklWRVJfUFJJTUUpLAogCS5sYXN0Y2xvc2UgPSB2YzRf bGFzdGNsb3NlLAogCS5wcmVjbG9zZSA9IHZjNF9kcm1fcHJlY2xvc2UsCiAKKwkuaXJxX2hhbmRs ZXIgPSB2YzRfaXJxLAorCS5pcnFfcHJlaW5zdGFsbCA9IHZjNF9pcnFfcHJlaW5zdGFsbCwKKwku aXJxX3Bvc3RpbnN0YWxsID0gdmM0X2lycV9wb3N0aW5zdGFsbCwKKwkuaXJxX3VuaW5zdGFsbCA9 IHZjNF9pcnFfdW5pbnN0YWxsLAorCiAJLmVuYWJsZV92YmxhbmsgPSB2YzRfZW5hYmxlX3ZibGFu aywKIAkuZGlzYWJsZV92YmxhbmsgPSB2YzRfZGlzYWJsZV92YmxhbmssCiAJLmdldF92Ymxhbmtf Y291bnRlciA9IGRybV92YmxhbmtfY291bnQsCkBAIC0xODEsOSArMTkwLDExIEBAIHN0YXRpYyBp bnQgdmM0X2RybV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAlpZiAocmV0KQogCQlnb3RvIHVu cmVmOwogCisJdmM0X2dlbV9pbml0KGRybSk7CisKIAlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwo ZGV2LCBkcm0pOwogCWlmIChyZXQpCi0JCWdvdG8gdW5yZWY7CisJCWdvdG8gZ2VtX2Rlc3Ryb3k7 CiAKIAlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CiAJaWYgKHJldCA8IDApCkBAIC0y MDcsNiArMjE4LDggQEAgdW5yZWdpc3RlcjoKIAlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKIHVu YmluZF9hbGw6CiAJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOworZ2VtX2Rlc3Ryb3k6 CisJdmM0X2dlbV9kZXN0cm95KGRybSk7CiB1bnJlZjoKIAlkcm1fZGV2X3VucmVmKGRybSk7CiAJ dmM0X2JvX2NhY2hlX2Rlc3Ryb3koZHJtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKaW5kZXggODk0NTQ2 My4uMGJjOGM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKQEAgLTQ5LDYgKzQ5LDQ4IEBAIHN0cnVj dCB2YzRfZGV2IHsKIAogCS8qIFByb3RlY3RzIGJvX2NhY2hlIGFuZCB0aGUgQk8gc3RhdHMuICov CiAJc3RydWN0IG11dGV4IGJvX2xvY2s7CisKKwkvKiBTZXF1ZW5jZSBudW1iZXIgZm9yIHRoZSBs YXN0IGpvYiBxdWV1ZWQgaW4gam9iX2xpc3QuCisJICogU3RhcnRzIGF0IDAgKG5vIGpvYnMgZW1p dHRlZCkuCisJICovCisJdWludDY0X3QgZW1pdF9zZXFubzsKKworCS8qIFNlcXVlbmNlIG51bWJl ciBmb3IgdGhlIGxhc3QgY29tcGxldGVkIGpvYiBvbiB0aGUgR1BVLgorCSAqIFN0YXJ0cyBhdCAw IChubyBqb2JzIGNvbXBsZXRlZCkuCisJICovCisJdWludDY0X3QgZmluaXNoZWRfc2Vxbm87CisK KwkvKiBMaXN0IG9mIGFsbCBzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyBmb3Igam9icyB0byBiZSBleGVj dXRlZC4KKwkgKiBUaGUgZmlyc3Qgam9iIGluIHRoZSBsaXN0IGlzIHRoZSBvbmUgY3VycmVudGx5 IHByb2dyYW1tZWQKKwkgKiBpbnRvIGN0MGNhL2N0MWNhIGZvciBleGVjdXRpb24uCisJICovCisJ c3RydWN0IGxpc3RfaGVhZCBqb2JfbGlzdDsKKwkvKiBMaXN0IG9mIHRoZSBmaW5pc2hlZCB2YzRf ZXhlY19pbmZvcyB3YWl0aW5nIHRvIGJlIGZyZWVkIGJ5CisJICogam9iX2RvbmVfd29yay4KKwkg Ki8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGpvYl9kb25lX2xpc3Q7CisJLyogU3BpbmxvY2sgdXNlZCB0 byBzeW5jaHJvbml6ZSB0aGUgam9iX2xpc3QgYW5kIHNlcW5vCisJICogYWNjZXNzZXMgYmV0d2Vl biB0aGUgSVJRIGhhbmRsZXIgYW5kIEdFTSBpb2N0bHMuCisJICovCisJc3BpbmxvY2tfdCBqb2Jf bG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBqb2Jfd2FpdF9xdWV1ZTsKKwlzdHJ1Y3Qgd29ya19z dHJ1Y3Qgam9iX2RvbmVfd29yazsKKworCS8qIFRoZSBiaW5uZXIgb3ZlcmZsb3cgbWVtb3J5IHRo YXQncyBjdXJyZW50bHkgc2V0IHVwIGluCisJICogQlBPQS9CUE9TIHJlZ2lzdGVycy4gIFdoZW4g b3ZlcmZsb3cgb2NjdXJzIGFuZCBhIG5ldyBvbmUgaXMKKwkgKiBhbGxvY2F0ZWQsIHRoZSBwcmV2 aW91cyBvbmUgd2lsbCBiZSBtb3ZlZCB0bworCSAqIHZjNC0+Y3VycmVudF9leGVjJ3MgZnJlZSBs aXN0LgorCSAqLworCXN0cnVjdCB2YzRfYm8gKm92ZXJmbG93X21lbTsKKwlzdHJ1Y3Qgd29ya19z dHJ1Y3Qgb3ZlcmZsb3dfbWVtX3dvcms7CisKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCBsYXN0X2N0 MGNhLCBsYXN0X2N0MWNhOworCQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwkJc3RydWN0IHdv cmtfc3RydWN0IHJlc2V0X3dvcms7CisJfSBoYW5nY2hlY2s7CisKKwlzdHJ1Y3Qgc2VtYXBob3Jl IGFzeW5jX21vZGVzZXQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfZGV2ICoKQEAg LTYwLDYgKzEwMiw5IEBAIHRvX3ZjNF9kZXYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHN0cnVj dCB2YzRfYm8gewogCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgYmFzZTsKIAorCS8qIHNlcW5v IG9mIHRoZSBsYXN0IGpvYiB0byByZW5kZXIgdG8gdGhpcyBCTy4gKi8KKwl1aW50NjRfdCBzZXFu bzsKKwogCS8qIExpc3QgZW50cnkgZm9yIHRoZSBCTydzIHBvc2l0aW9uIGluIGVpdGhlcgogCSAq IHZjNF9leGVjX2luZm8tPnVucmVmX2xpc3Qgb3IgdmM0X2Rldi0+Ym9fY2FjaGUudGltZV9saXN0 CiAJICovCkBAIC0xMzAsNiArMTc1LDEwMSBAQCB0b192YzRfZW5jb2RlcihzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCiAjZGVmaW5lIEhWU19SRUFEKG9mZnNldCkgcmVhZGwodmM0LT5odnMt PnJlZ3MgKyBvZmZzZXQpCiAjZGVmaW5lIEhWU19XUklURShvZmZzZXQsIHZhbCkgd3JpdGVsKHZh bCwgdmM0LT5odnMtPnJlZ3MgKyBvZmZzZXQpCiAKK3N0cnVjdCB2YzRfZXhlY19pbmZvIHsKKwkv KiBTZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgYmluL3JlbmRlciBqb2IuICovCisJdWludDY0X3Qg c2Vxbm87CisKKwkvKiBLZXJuZWwtc3BhY2UgY29weSBvZiB0aGUgaW9jdGwgYXJndW1lbnRzICov CisJc3RydWN0IGRybV92YzRfc3VibWl0X2NsICphcmdzOworCisJLyogVGhpcyBpcyB0aGUgYXJy YXkgb2YgQk9zIHRoYXQgd2VyZSBsb29rZWQgdXAgYXQgdGhlIHN0YXJ0IG9mIGV4ZWMuCisJICog Q29tbWFuZCB2YWxpZGF0aW9uIHdpbGwgdXNlIGluZGljZXMgaW50byB0aGlzIGFycmF5LgorCSAq LworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKipibzsKKwl1aW50MzJfdCBib19jb3VudDsK KworCS8qIFBvaW50ZXJzIGZvciBvdXIgcG9zaXRpb24gaW4gdmM0LT5qb2JfbGlzdCAqLworCXN0 cnVjdCBsaXN0X2hlYWQgaGVhZDsKKworCS8qIExpc3Qgb2Ygb3RoZXIgQk9zIHVzZWQgaW4gdGhl IGpvYiB0aGF0IG5lZWQgdG8gYmUgcmVsZWFzZWQKKwkgKiBvbmNlIHRoZSBqb2IgaXMgY29tcGxl dGUuCisJICovCisJc3RydWN0IGxpc3RfaGVhZCB1bnJlZl9saXN0OworCisJLyogQ3VycmVudCB1 bnZhbGlkYXRlZCBpbmRpY2VzIGludG8gQGJvIGxvYWRlZCBieSB0aGUgbm9uLWhhcmR3YXJlCisJ ICogVkM0X1BBQ0tFVF9HRU1fSEFORExFUy4KKwkgKi8KKwl1aW50MzJfdCBib19pbmRleFsyXTsK KworCS8qIFRoaXMgaXMgdGhlIEJPIHdoZXJlIHdlIHN0b3JlIHRoZSB2YWxpZGF0ZWQgY29tbWFu ZCBsaXN0cywgc2hhZGVyCisJICogcmVjb3JkcywgYW5kIHVuaWZvcm1zLgorCSAqLworCXN0cnVj dCBkcm1fZ2VtX2NtYV9vYmplY3QgKmV4ZWNfYm87CisKKwkvKioKKwkgKiBUaGlzIHRyYWNrcyB0 aGUgcGVyLXNoYWRlci1yZWNvcmQgc3RhdGUgKHBhY2tldCA2NCkgdGhhdAorCSAqIGRldGVybWlu ZXMgdGhlIGxlbmd0aCBvZiB0aGUgc2hhZGVyIHJlY29yZCBhbmQgdGhlIG9mZnNldAorCSAqIGl0 J3MgZXhwZWN0ZWQgdG8gYmUgZm91bmQgYXQuICBJdCBnZXRzIHJlYWQgaW4gZnJvbSB0aGUKKwkg KiBjb21tYW5kIGxpc3RzLgorCSAqLworCXN0cnVjdCB2YzRfc2hhZGVyX3N0YXRlIHsKKwkJdWlu dDMyX3QgYWRkcjsKKwkJLyogTWF4aW11bSB2ZXJ0ZXggaW5kZXggcmVmZXJlbmNlZCBieSBhbnkg cHJpbWl0aXZlIHVzaW5nIHRoaXMKKwkJICogc2hhZGVyIHN0YXRlLgorCQkgKi8KKwkJdWludDMy X3QgbWF4X2luZGV4OworCX0gKnNoYWRlcl9zdGF0ZTsKKworCS8qKiBIb3cgbWFueSBzaGFkZXIg c3RhdGVzIHRoZSB1c2VyIGRlY2xhcmVkIHRoZXkgd2VyZSB1c2luZy4gKi8KKwl1aW50MzJfdCBz aGFkZXJfc3RhdGVfc2l6ZTsKKwkvKiogSG93IG1hbnkgc2hhZGVyIHN0YXRlIHJlY29yZHMgdGhl IHZhbGlkYXRvciBoYXMgc2Vlbi4gKi8KKwl1aW50MzJfdCBzaGFkZXJfc3RhdGVfY291bnQ7CisK Kwlib29sIGZvdW5kX3RpbGVfYmlubmluZ19tb2RlX2NvbmZpZ19wYWNrZXQ7CisJYm9vbCBmb3Vu ZF9zdGFydF90aWxlX2Jpbm5pbmdfcGFja2V0OworCWJvb2wgZm91bmRfaW5jcmVtZW50X3NlbWFw aG9yZV9wYWNrZXQ7CisJYm9vbCBmb3VuZF9mbHVzaDsKKwl1aW50OF90IGJpbl90aWxlc194LCBi aW5fdGlsZXNfeTsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICp0aWxlX2JvOworCXVpbnQz Ml90IHRpbGVfYWxsb2Nfb2Zmc2V0OworCisJLyoqCisJICogQ29tcHV0ZWQgYWRkcmVzc2VzIHBv aW50aW5nIGludG8gZXhlY19ibyB3aGVyZSB3ZSBzdGFydCB0aGUKKwkgKiBiaW4gdGhyZWFkIChj dDApIGFuZCByZW5kZXIgdGhyZWFkIChjdDEpLgorCSAqLworCXVpbnQzMl90IGN0MGNhLCBjdDBl YTsKKwl1aW50MzJfdCBjdDFjYSwgY3QxZWE7CisKKwkvKiBQb2ludGVyIHRvIHRoZSB1bnZhbGlk YXRlZCBiaW4gQ0wgKGlmIHByZXNlbnQpLiAqLworCXZvaWQgKmJpbl91OworCisJLyogUG9pbnRl cnMgdG8gdGhlIHNoYWRlciByZWNzLiAgVGhlc2UgcGFkZHIgZ2V0cyBpbmNyZW1lbnRlZCBhcyBD TAorCSAqIHBhY2tldHMgYXJlIHJlbG9jYXRlZCBpbiB2YWxpZGF0ZV9nbF9zaGFkZXJfc3RhdGUs IGFuZCB0aGUgdmFkZHJzCisJICogKHUgYW5kIHYpIGdldCBpbmNyZW1lbnRlZCBhbmQgc2l6ZSBk ZWNyZW1lbnRlZCBhcyB0aGUgc2hhZGVyIHJlY3MKKwkgKiB0aGVtc2VsdmVzIGFyZSB2YWxpZGF0 ZWQuCisJICovCisJdm9pZCAqc2hhZGVyX3JlY191OworCXZvaWQgKnNoYWRlcl9yZWNfdjsKKwl1 aW50MzJfdCBzaGFkZXJfcmVjX3A7CisJdWludDMyX3Qgc2hhZGVyX3JlY19zaXplOworCisJLyog UG9pbnRlcnMgdG8gdGhlIHVuaWZvcm0gZGF0YS4gIFRoZXNlIHBvaW50ZXJzIGFyZSBpbmNyZW1l bnRlZCwgYW5kCisJICogc2l6ZSBkZWNyZW1lbnRlZCwgYXMgZWFjaCBiYXRjaCBvZiB1bmlmb3Jt cyBpcyB1cGxvYWRlZC4KKwkgKi8KKwl2b2lkICp1bmlmb3Jtc191OworCXZvaWQgKnVuaWZvcm1z X3Y7CisJdWludDMyX3QgdW5pZm9ybXNfcDsKKwl1aW50MzJfdCB1bmlmb3Jtc19zaXplOworfTsK Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqCit2YzRfZmlyc3Rfam9iKHN0 cnVjdCB2YzRfZGV2ICp2YzQpCit7CisJaWYgKGxpc3RfZW1wdHkoJnZjNC0+am9iX2xpc3QpKQor CQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeSgmdmM0LT5qb2JfbGlzdCwg c3RydWN0IHZjNF9leGVjX2luZm8sIGhlYWQpOworfQorCiAvKioKICAqIHN0cnVjdCB2YzRfdGV4 dHVyZV9zYW1wbGVfaW5mbyAtIHNhdmVzIHRoZSBvZmZzZXRzIGludG8gdGhlIFVCTyBmb3IgdGV4 dHVyZQogICogc2V0dXAgcGFyYW1ldGVycy4KQEAgLTIzMSwxMCArMzcxLDMxIEBAIHZvaWQgdmM0 X2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CiAvKiB2YzRfZHJ2LmMg Ki8KIHZvaWQgX19pb21lbSAqdmM0X2lvcmVtYXBfcmVncyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpkZXYsIGludCBpbmRleCk7CiAKKy8qIHZjNF9nZW0uYyAqLwordm9pZCB2YzRfZ2VtX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIHZjNF9nZW1fZGVzdHJveShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKK2ludCB2YzRfc3VibWl0X2NsX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQg dmM0X3dhaXRfc2Vxbm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK KwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgdmM0X3dhaXRfYm9faW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYpOwordm9pZCB2YzRfc3VibWl0X25leHRfam9iKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOworaW50IHZjNF93YWl0X2Zvcl9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB1aW50NjRfdCBzZXFubywKKwkJICAgICAgIHVpbnQ2NF90IHRpbWVvdXRfbnMsIGJvb2wgaW50 ZXJydXB0aWJsZSk7Cit2b2lkIHZjNF9qb2JfaGFuZGxlX2NvbXBsZXRlZChzdHJ1Y3QgdmM0X2Rl diAqdmM0KTsKKwogLyogdmM0X2hkbWkuYyAqLwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgdmM0X2hkbWlfZHJpdmVyOwogaW50IHZjNF9oZG1pX2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2Vx X2ZpbGUgKm0sIHZvaWQgKnVudXNlZCk7CiAKKy8qIHZjNF9pcnEuYyAqLworaXJxcmV0dXJuX3Qg dmM0X2lycShpbnQgaXJxLCB2b2lkICphcmcpOwordm9pZCB2YzRfaXJxX3ByZWluc3RhbGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgdmM0X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKK3ZvaWQgdmM0X2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7Cit2b2lkIHZjNF9pcnFfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKIC8q IHZjNF9odnMuYyAqLwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmM0X2h2c19kcml2 ZXI7CiB2b2lkIHZjNF9odnNfZHVtcF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAg LTI1Myw2ICs0MTQsMjcgQEAgdTMyIHZjNF9wbGFuZV9kbGlzdF9zaXplKHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKnN0YXRlKTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZjNF92M2Rf ZHJpdmVyOwogaW50IHZjNF92M2RfZGVidWdmc19pZGVudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZv aWQgKnVudXNlZCk7CiBpbnQgdmM0X3YzZF9kZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNlcV9maWxlICpt LCB2b2lkICp1bnVzZWQpOworaW50IHZjNF92M2Rfc2V0X3Bvd2VyKHN0cnVjdCB2YzRfZGV2ICp2 YzQsIGJvb2wgb24pOworCisvKiB2YzRfdmFsaWRhdGUuYyAqLworaW50Cit2YzRfdmFsaWRhdGVf YmluX2NsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICB2b2lkICp2YWxpZGF0ZWQsCisJ CSAgICB2b2lkICp1bnZhbGlkYXRlZCwKKwkJICAgIHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVj KTsKKworaW50Cit2YzRfdmFsaWRhdGVfc2hhZGVyX3JlY3Moc3RydWN0IGRybV9kZXZpY2UgKmRl diwgc3RydWN0IHZjNF9leGVjX2luZm8gKmV4ZWMpOworCitzdHJ1Y3QgZHJtX2dlbV9jbWFfb2Jq ZWN0ICp2YzRfdXNlX2JvKHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjLAorCQkJCSAgICAgIHVp bnQzMl90IGhpbmRleCk7CisKK2ludCB2YzRfZ2V0X3JjbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYyk7CisKK2Jvb2wgdmM0X2NoZWNrX3RleF9zaXpl KHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjLAorCQkJc3RydWN0IGRybV9nZW1fY21hX29iamVj dCAqZmJvLAorCQkJdWludDMyX3Qgb2Zmc2V0LCB1aW50OF90IHRpbGluZ19mb3JtYXQsCisJCQl1 aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCB1aW50OF90IGNwcCk7CiAKIC8qIHZjNF92 YWxpZGF0ZV9zaGFkZXIuYyAqLwogc3RydWN0IHZjNF92YWxpZGF0ZWRfc2hhZGVyX2luZm8gKgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZ2VtLmMgYi9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9nZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzZk ZGRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZ2VtLmMKQEAg LTAsMCArMSw2NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBCcm9hZGNvbQorICoKKyAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQg ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cisg KgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUu CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUg InVhcGkvZHJtL3ZjNF9kcm0uaCIKKyNpbmNsdWRlICJ2YzRfZHJ2LmgiCisjaW5jbHVkZSAidmM0 X3JlZ3MuaCIKKyNpbmNsdWRlICJ2YzRfdHJhY2UuaCIKKworc3RhdGljIHZvaWQKK3ZjNF9xdWV1 ZV9oYW5nY2hlY2soc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmM0X2RldiAq dmM0ID0gdG9fdmM0X2RldihkZXYpOworCisJbW9kX3RpbWVyKCZ2YzQtPmhhbmdjaGVjay50aW1l ciwKKwkJICByb3VuZF9qaWZmaWVzX3VwKGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMCkp KTsKK30KKworc3RhdGljIHZvaWQKK3ZjNF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQor eworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisKKwlEUk1fSU5GTygi UmVzZXR0aW5nIEdQVS5cbiIpOworCXZjNF92M2Rfc2V0X3Bvd2VyKHZjNCwgZmFsc2UpOworCXZj NF92M2Rfc2V0X3Bvd2VyKHZjNCwgdHJ1ZSk7CisKKwl2YzRfaXJxX3Jlc2V0KGRldik7CisKKwkv KiBSZWFybSB0aGUgaGFuZ2NoZWNrIC0tIGFub3RoZXIgam9iIG1pZ2h0IGhhdmUgYmVlbiB3YWl0 aW5nCisJICogZm9yIG91ciBodW5nIG9uZSB0byBnZXQga2lja2VkIG9mZiwgYW5kIHZjNF9pcnFf cmVzZXQoKQorCSAqIHdvdWxkIGhhdmUgc3RhcnRlZCBpdC4KKwkgKi8KKwl2YzRfcXVldWVfaGFu Z2NoZWNrKGRldik7Cit9CisKK3N0YXRpYyB2b2lkCit2YzRfcmVzZXRfd29yayhzdHJ1Y3Qgd29y a19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9CisJCWNvbnRhaW5lcl9v Zih3b3JrLCBzdHJ1Y3QgdmM0X2RldiwgaGFuZ2NoZWNrLnJlc2V0X3dvcmspOworCisJdmM0X3Jl c2V0KHZjNC0+ZGV2KTsKK30KKworc3RhdGljIHZvaWQKK3ZjNF9oYW5nY2hlY2tfZWxhcHNlZCh1 bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3Qg ZHJtX2RldmljZSAqKWRhdGE7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2 KTsKKwl1aW50MzJfdCBjdDBjYSwgY3QxY2E7CisKKwkvKiBJZiBpZGxlLCB3ZSBjYW4gc3RvcCB3 YXRjaGluZyBmb3IgaGFuZ3MuICovCisJaWYgKGxpc3RfZW1wdHkoJnZjNC0+am9iX2xpc3QpKQor CQlyZXR1cm47CisKKwljdDBjYSA9IFYzRF9SRUFEKFYzRF9DVE5DQSgwKSk7CisJY3QxY2EgPSBW M0RfUkVBRChWM0RfQ1ROQ0EoMSkpOworCisJLyogSWYgd2UndmUgbWFkZSBhbnkgcHJvZ3Jlc3Mg aW4gZXhlY3V0aW9uLCByZWFybSB0aGUgdGltZXIKKwkgKiBhbmQgd2FpdC4KKwkgKi8KKwlpZiAo Y3QwY2EgIT0gdmM0LT5oYW5nY2hlY2subGFzdF9jdDBjYSB8fAorCSAgICBjdDFjYSAhPSB2YzQt PmhhbmdjaGVjay5sYXN0X2N0MWNhKSB7CisJCXZjNC0+aGFuZ2NoZWNrLmxhc3RfY3QwY2EgPSBj dDBjYTsKKwkJdmM0LT5oYW5nY2hlY2subGFzdF9jdDFjYSA9IGN0MWNhOworCQl2YzRfcXVldWVf aGFuZ2NoZWNrKGRldik7CisJCXJldHVybjsKKwl9CisKKwkvKiBXZSd2ZSBnb25lIHRvbyBsb25n IHdpdGggbm8gcHJvZ3Jlc3MsIHJlc2V0LiAgVGhpcyBoYXMgdG8KKwkgKiBiZSBkb25lIGZyb20g YSB3b3JrIHN0cnVjdCwgc2luY2UgcmVzZXR0aW5nIGNhbiBzbGVlcCBhbmQKKwkgKiB0aGlzIHRp bWVyIGhvb2sgaXNuJ3QgYWxsb3dlZCB0by4KKwkgKi8KKwlzY2hlZHVsZV93b3JrKCZ2YzQtPmhh bmdjaGVjay5yZXNldF93b3JrKTsKK30KKworc3RhdGljIHZvaWQKK3N1Ym1pdF9jbChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCB0aHJlYWQsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJf dCBlbmQpCit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKworCS8q IFNldCB0aGUgY3VycmVudCBhbmQgZW5kIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgbGlzdC4KKwkg KiBXcml0aW5nIHRoZSBlbmQgcmVnaXN0ZXIgaXMgd2hhdCBzdGFydHMgdGhlIGpvYi4KKwkgKi8K KwlWM0RfV1JJVEUoVjNEX0NUTkNBKHRocmVhZCksIHN0YXJ0KTsKKwlWM0RfV1JJVEUoVjNEX0NU TkVBKHRocmVhZCksIGVuZCk7Cit9CisKK2ludAordmM0X3dhaXRfZm9yX3NlcW5vKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHVpbnQ2NF90IHNlcW5vLCB1aW50NjRfdCB0aW1lb3V0X25zLAorCQkg ICBib29sIGludGVycnVwdGlibGUpCit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9k ZXYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXRfZXhwaXJlOwor CURFRklORV9XQUlUKHdhaXQpOworCisJaWYgKHZjNC0+ZmluaXNoZWRfc2Vxbm8gPj0gc2Vxbm8p CisJCXJldHVybiAwOworCisJaWYgKHRpbWVvdXRfbnMgPT0gMCkKKwkJcmV0dXJuIC1FVElNRTsK KworCXRpbWVvdXRfZXhwaXJlID0gamlmZmllcyArIG5zZWNzX3RvX2ppZmZpZXModGltZW91dF9u cyk7CisKKwl0cmFjZV92YzRfd2FpdF9mb3Jfc2Vxbm9fYmVnaW4oZGV2LCBzZXFubywgdGltZW91 dF9ucyk7CisJZm9yICg7OykgeworCQlwcmVwYXJlX3RvX3dhaXQoJnZjNC0+am9iX3dhaXRfcXVl dWUsICZ3YWl0LAorCQkJCWludGVycnVwdGlibGUgPyBUQVNLX0lOVEVSUlVQVElCTEUgOgorCQkJ CVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCQlpZiAoaW50ZXJydXB0aWJsZSAmJiBzaWduYWxf cGVuZGluZyhjdXJyZW50KSkgeworCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJYnJlYWs7CisJ CX0KKworCQlpZiAodmM0LT5maW5pc2hlZF9zZXFubyA+PSBzZXFubykKKwkJCWJyZWFrOworCisJ CWlmICh0aW1lb3V0X25zICE9IH4wdWxsKSB7CisJCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVz LCB0aW1lb3V0X2V4cGlyZSkpIHsKKwkJCQlyZXQgPSAtRVRJTUU7CisJCQkJYnJlYWs7CisJCQl9 CisJCQlzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXRfZXhwaXJlIC0gamlmZmllcyk7CisJCX0gZWxz ZSB7CisJCQlzY2hlZHVsZSgpOworCQl9CisJfQorCisJZmluaXNoX3dhaXQoJnZjNC0+am9iX3dh aXRfcXVldWUsICZ3YWl0KTsKKwl0cmFjZV92YzRfd2FpdF9mb3Jfc2Vxbm9fZW5kKGRldiwgc2Vx bm8pOworCisJaWYgKHJldCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTKSB7CisJCURSTV9FUlJPUigi dGltZW91dCB3YWl0aW5nIGZvciByZW5kZXIgdGhyZWFkIGlkbGVcbiIpOworCQlyZXR1cm4gcmV0 OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordmM0X2ZsdXNoX2NhY2hlcyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRf ZGV2KGRldik7CisKKwkvKiBGbHVzaCB0aGUgR1BVIEwyIGNhY2hlcy4gIFRoZXNlIGNhY2hlcyBz aXQgb24gdG9wIG9mIHN5c3RlbQorCSAqIEwzICh0aGUgMTI4a2Igb3Igc28gc2hhcmVkIHdpdGgg dGhlIENQVSksIGFuZCBhcmUKKwkgKiBub24tYWxsb2NhdGluZyBpbiB0aGUgTDMuCisJICovCisJ VjNEX1dSSVRFKFYzRF9MMkNBQ1RMLAorCQkgIFYzRF9MMkNBQ1RMX0wyQ0NMUik7CisKKwlWM0Rf V1JJVEUoVjNEX1NMQ0FDVEwsCisJCSAgVkM0X1NFVF9GSUVMRCgweGYsIFYzRF9TTENBQ1RMX1Qx Q0MpIHwKKwkJICBWQzRfU0VUX0ZJRUxEKDB4ZiwgVjNEX1NMQ0FDVExfVDBDQykgfAorCQkgIFZD NF9TRVRfRklFTEQoMHhmLCBWM0RfU0xDQUNUTF9VQ0MpIHwKKwkJICBWQzRfU0VUX0ZJRUxEKDB4 ZiwgVjNEX1NMQ0FDVExfSUNDKSk7Cit9CisKKy8qIFNldHMgdGhlIHJlZ2lzdGVycyBmb3IgdGhl IG5leHQgam9iIHRvIGJlIGFjdHVhbGx5IGJlIGV4ZWN1dGVkIGluCisgKiB0aGUgaGFyZHdhcmUu CisgKgorICogVGhlIGpvYl9sb2NrIHNob3VsZCBiZSBoZWxkIGR1cmluZyB0aGlzLgorICovCit2 b2lkCit2YzRfc3VibWl0X25leHRfam9iKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKwlzdHJ1Y3QgdmM0X2V4ZWNfaW5m byAqZXhlYyA9IHZjNF9maXJzdF9qb2IodmM0KTsKKworCWlmICghZXhlYykKKwkJcmV0dXJuOwor CisJdmM0X2ZsdXNoX2NhY2hlcyhkZXYpOworCisJLyogRGlzYWJsZSB0aGUgYmlubmVyJ3MgcHJl LWxvYWRlZCBvdmVyZmxvdyBtZW1vcnkgYWRkcmVzcyAqLworCVYzRF9XUklURShWM0RfQlBPQSwg MCk7CisJVjNEX1dSSVRFKFYzRF9CUE9TLCAwKTsKKworCWlmIChleGVjLT5jdDBjYSAhPSBleGVj LT5jdDBlYSkKKwkJc3VibWl0X2NsKGRldiwgMCwgZXhlYy0+Y3QwY2EsIGV4ZWMtPmN0MGVhKTsK KwlzdWJtaXRfY2woZGV2LCAxLCBleGVjLT5jdDFjYSwgZXhlYy0+Y3QxZWEpOworfQorCitzdGF0 aWMgdm9pZAordmM0X3VwZGF0ZV9ib19zZXFub3Moc3RydWN0IHZjNF9leGVjX2luZm8gKmV4ZWMs IHVpbnQ2NF90IHNlcW5vKQoreworCXN0cnVjdCB2YzRfYm8gKmJvOworCXVuc2lnbmVkIGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgZXhlYy0+Ym9fY291bnQ7IGkrKykgeworCQlibyA9IHRvX3ZjNF9i bygmZXhlYy0+Ym9baV0tPmJhc2UpOworCQliby0+c2Vxbm8gPSBzZXFubzsKKwl9CisKKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGJvLCAmZXhlYy0+dW5yZWZfbGlzdCwgdW5yZWZfaGVhZCkgeworCQli by0+c2Vxbm8gPSBzZXFubzsKKwl9Cit9CisKKy8qIFF1ZXVlcyBhIHN0cnVjdCB2YzRfZXhlY19p bmZvIGZvciBleGVjdXRpb24uICBJZiBubyBqb2IgaXMKKyAqIGN1cnJlbnRseSBleGVjdXRpbmcs IHRoZW4gc3VibWl0cyBpdC4KKyAqCisgKiBVbmxpa2UgbW9zdCBHUFVzLCBvdXIgaGFyZHdhcmUg b25seSBoYW5kbGVzIG9uZSBjb21tYW5kIGxpc3QgYXQgYQorICogdGltZS4gIFRvIHF1ZXVlIG11 bHRpcGxlIGpvYnMgYXQgb25jZSwgd2UnZCBuZWVkIHRvIGVkaXQgdGhlCisgKiBwcmV2aW91cyBj b21tYW5kIGxpc3QgdG8gaGF2ZSBhIGp1bXAgdG8gdGhlIG5ldyBvbmUgYXQgdGhlIGVuZCwgYW5k CisgKiB0aGVuIGJ1bXAgdGhlIGVuZCBhZGRyZXNzLiAgVGhhdCdzIGEgY2hhbmdlIGZvciBhIGxh dGVyIGRhdGUsCisgKiB0aG91Z2guCisgKi8KK3N0YXRpYyB2b2lkCit2YzRfcXVldWVfc3VibWl0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjKQorewor CXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJdWludDY0X3Qgc2Vxbm87 CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2YzQtPmpv Yl9sb2NrLCBpcnFmbGFncyk7CisKKwlzZXFubyA9ICsrdmM0LT5lbWl0X3NlcW5vOworCWV4ZWMt PnNlcW5vID0gc2Vxbm87CisJdmM0X3VwZGF0ZV9ib19zZXFub3MoZXhlYywgc2Vxbm8pOworCisJ bGlzdF9hZGRfdGFpbCgmZXhlYy0+aGVhZCwgJnZjNC0+am9iX2xpc3QpOworCisJLyogSWYgbm8g am9iIHdhcyBleGVjdXRpbmcsIGtpY2sgb3VycyBvZmYuICBPdGhlcndpc2UsIGl0J2xsCisJICog Z2V0IHN0YXJ0ZWQgd2hlbiB0aGUgcHJldmlvdXMgam9iJ3MgZnJhbWUgZG9uZSBpbnRlcnJ1cHQK KwkgKiBvY2N1cnMuCisJICovCisJaWYgKHZjNF9maXJzdF9qb2IodmM0KSA9PSBleGVjKSB7CisJ CXZjNF9zdWJtaXRfbmV4dF9qb2IoZGV2KTsKKwkJdmM0X3F1ZXVlX2hhbmdjaGVjayhkZXYpOwor CX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjNC0+am9iX2xvY2ssIGlycWZsYWdzKTsK K30KKworLyoqCisgKiBMb29rcyB1cCBhIGJ1bmNoIG9mIEdFTSBoYW5kbGVzIGZvciBCT3MgYW5k IHN0b3JlcyB0aGUgYXJyYXkgZm9yCisgKiB1c2UgaW4gdGhlIGNvbW1hbmQgdmFsaWRhdG9yIHRo YXQgYWN0dWFsbHkgd3JpdGVzIHJlbG9jYXRlZAorICogYWRkcmVzc2VzIHBvaW50aW5nIHRvIHRo ZW0uCisgKi8KK3N0YXRpYyBpbnQKK3ZjNF9jbF9sb29rdXBfYm9zKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgc3RydWN0IHZjNF9l eGVjX2luZm8gKmV4ZWMpCit7CisJc3RydWN0IGRybV92YzRfc3VibWl0X2NsICphcmdzID0gZXhl Yy0+YXJnczsKKwl1aW50MzJfdCAqaGFuZGxlczsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKwor CWV4ZWMtPmJvX2NvdW50ID0gYXJncy0+Ym9faGFuZGxlX2NvdW50OworCisJaWYgKCFleGVjLT5i b19jb3VudCkgeworCQkvKiBTZWUgY29tbWVudCBvbiBib19pbmRleCBmb3Igd2h5IHdlIGhhdmUg dG8gY2hlY2sKKwkJICogdGhpcy4KKwkJICovCisJCURSTV9FUlJPUigiUmVuZGVyaW5nIHJlcXVp cmVzIEJPcyB0byB2YWxpZGF0ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWV4ZWMt PmJvID0ga2NhbGxvYyhleGVjLT5ib19jb3VudCwgc2l6ZW9mKHN0cnVjdCBkcm1fZ2VtX2NtYV9v YmplY3QgKiksCisJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWV4ZWMtPmJvKSB7CisJCURSTV9F UlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHZhbGlkYXRlZCBCTyBwb2ludGVyc1xuIik7CisJCXJl dHVybiAtRU5PTUVNOworCX0KKworCWhhbmRsZXMgPSBkcm1fbWFsbG9jX2FiKGV4ZWMtPmJvX2Nv dW50LCBzaXplb2YodWludDMyX3QpKTsKKwlpZiAoIWhhbmRsZXMpIHsKKwkJRFJNX0VSUk9SKCJG YWlsZWQgdG8gYWxsb2NhdGUgaW5jb21pbmcgR0VNIGhhbmRsZXNcbiIpOworCQlnb3RvIGZhaWw7 CisJfQorCisJcmV0ID0gY29weV9mcm9tX3VzZXIoaGFuZGxlcywKKwkJCSAgICAgKHZvaWQgX191 c2VyICopKHVpbnRwdHJfdClhcmdzLT5ib19oYW5kbGVzLAorCQkJICAgICBleGVjLT5ib19jb3Vu dCAqIHNpemVvZih1aW50MzJfdCkpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gY29weSBpbiBHRU0gaGFuZGxlc1xuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlzcGluX2xv Y2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IGV4ZWMtPmJvX2Nv dW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpibyA9IGlkcl9maW5kKCZmaWxl X3ByaXYtPm9iamVjdF9pZHIsCisJCQkJCQkgICAgIGhhbmRsZXNbaV0pOworCQlpZiAoIWJvKSB7 CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb29rIHVwIEdFTSBCTyAlZDogJWRcbiIsCisJCQkJ ICBpLCBoYW5kbGVzW2ldKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlzcGluX3VubG9jaygmZmls ZV9wcml2LT50YWJsZV9sb2NrKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlkcm1fZ2VtX29iamVj dF9yZWZlcmVuY2UoYm8pOworCQlleGVjLT5ib1tpXSA9IChzdHJ1Y3QgZHJtX2dlbV9jbWFfb2Jq ZWN0ICopYm87CisJfQorCXNwaW5fdW5sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOworCitm YWlsOgorCWtmcmVlKGhhbmRsZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2YzRf Z2V0X2JjbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhl YykKK3sKKwlzdHJ1Y3QgZHJtX3ZjNF9zdWJtaXRfY2wgKmFyZ3MgPSBleGVjLT5hcmdzOworCXZv aWQgKnRlbXAgPSBOVUxMOworCXZvaWQgKmJpbjsKKwlpbnQgcmV0ID0gMDsKKwl1aW50MzJfdCBi aW5fb2Zmc2V0ID0gMDsKKwl1aW50MzJfdCBzaGFkZXJfcmVjX29mZnNldCA9IHJvdW5kdXAoYmlu X29mZnNldCArIGFyZ3MtPmJpbl9jbF9zaXplLAorCQkJCQkgICAgIDE2KTsKKwl1aW50MzJfdCB1 bmlmb3Jtc19vZmZzZXQgPSBzaGFkZXJfcmVjX29mZnNldCArIGFyZ3MtPnNoYWRlcl9yZWNfc2l6 ZTsKKwl1aW50MzJfdCBleGVjX3NpemUgPSB1bmlmb3Jtc19vZmZzZXQgKyBhcmdzLT51bmlmb3Jt c19zaXplOworCXVpbnQzMl90IHRlbXBfc2l6ZSA9IGV4ZWNfc2l6ZSArIChzaXplb2Yoc3RydWN0 IHZjNF9zaGFkZXJfc3RhdGUpICoKKwkJCQkJICBhcmdzLT5zaGFkZXJfcmVjX2NvdW50KTsKKwlz dHJ1Y3QgdmM0X2JvICpibzsKKworCWlmICh1bmlmb3Jtc19vZmZzZXQgPCBzaGFkZXJfcmVjX29m ZnNldCB8fAorCSAgICBleGVjX3NpemUgPCB1bmlmb3Jtc19vZmZzZXQgfHwKKwkgICAgYXJncy0+ c2hhZGVyX3JlY19jb3VudCA+PSAoVUlOVF9NQVggLworCQkJCQkgIHNpemVvZihzdHJ1Y3QgdmM0 X3NoYWRlcl9zdGF0ZSkpIHx8CisJICAgIHRlbXBfc2l6ZSA8IGV4ZWNfc2l6ZSkgeworCQlEUk1f RVJST1IoIm92ZXJmbG93IGluIGV4ZWMgYXJndW1lbnRzXG4iKTsKKwkJZ290byBmYWlsOworCX0K KworCS8qIEFsbG9jYXRlIHNwYWNlIHdoZXJlIHdlJ2xsIHN0b3JlIHRoZSBjb3BpZWQgaW4gdXNl ciBjb21tYW5kIGxpc3RzCisJICogYW5kIHNoYWRlciByZWNvcmRzLgorCSAqCisJICogV2UgZG9u J3QganVzdCBjb3B5IGRpcmVjdGx5IGludG8gdGhlIEJPcyBiZWNhdXNlIHdlIG5lZWQgdG8KKwkg KiByZWFkIHRoZSBjb250ZW50cyBiYWNrIGZvciB2YWxpZGF0aW9uLCBhbmQgSSB0aGluayB0aGUK KwkgKiBiby0+dmFkZHIgaXMgdW5jYWNoZWQgYWNjZXNzLgorCSAqLworCXRlbXAgPSBrbWFsbG9j KHRlbXBfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZW1wKSB7CisJCURSTV9FUlJPUigiRmFp bGVkIHRvIGFsbG9jYXRlIHN0b3JhZ2UgZm9yIGNvcHlpbmcgIgorCQkJICAiaW4gYmluL3JlbmRl ciBDTHMuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwliaW4gPSB0 ZW1wICsgYmluX29mZnNldDsKKwlleGVjLT5zaGFkZXJfcmVjX3UgPSB0ZW1wICsgc2hhZGVyX3Jl Y19vZmZzZXQ7CisJZXhlYy0+dW5pZm9ybXNfdSA9IHRlbXAgKyB1bmlmb3Jtc19vZmZzZXQ7CisJ ZXhlYy0+c2hhZGVyX3N0YXRlID0gdGVtcCArIGV4ZWNfc2l6ZTsKKwlleGVjLT5zaGFkZXJfc3Rh dGVfc2l6ZSA9IGFyZ3MtPnNoYWRlcl9yZWNfY291bnQ7CisKKwlyZXQgPSBjb3B5X2Zyb21fdXNl cihiaW4sCisJCQkgICAgICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpYXJncy0+YmluX2NsLAor CQkJICAgICBhcmdzLT5iaW5fY2xfc2l6ZSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZh aWxlZCB0byBjb3B5IGluIGJpbiBjbFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXQgPSBj b3B5X2Zyb21fdXNlcihleGVjLT5zaGFkZXJfcmVjX3UsCisJCQkgICAgICh2b2lkIF9fdXNlciAq KSh1aW50cHRyX3QpYXJncy0+c2hhZGVyX3JlYywKKwkJCSAgICAgYXJncy0+c2hhZGVyX3JlY19z aXplKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNvcHkgaW4gc2hhZGVy IHJlY3NcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJcmV0ID0gY29weV9mcm9tX3VzZXIoZXhl Yy0+dW5pZm9ybXNfdSwKKwkJCSAgICAgKHZvaWQgX191c2VyICopKHVpbnRwdHJfdClhcmdzLT51 bmlmb3JtcywKKwkJCSAgICAgYXJncy0+dW5pZm9ybXNfc2l6ZSk7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoIkZhaWxlZCB0byBjb3B5IGluIHVuaWZvcm1zIGNsXG4iKTsKKwkJZ290byBmYWls OworCX0KKworCWJvID0gdmM0X2JvX2NyZWF0ZShkZXYsIGV4ZWNfc2l6ZSwgdHJ1ZSk7CisJaWYg KCFibykgeworCQlEUk1fRVJST1IoIkNvdWxkbid0IGFsbG9jYXRlIEJPIGZvciBiaW5uaW5nXG4i KTsKKwkJcmV0ID0gUFRSX0VSUihleGVjLT5leGVjX2JvKTsKKwkJZ290byBmYWlsOworCX0KKwll eGVjLT5leGVjX2JvID0gJmJvLT5iYXNlOworCisJbGlzdF9hZGRfdGFpbCgmdG9fdmM0X2JvKCZl eGVjLT5leGVjX2JvLT5iYXNlKS0+dW5yZWZfaGVhZCwKKwkJICAgICAgJmV4ZWMtPnVucmVmX2xp c3QpOworCisJZXhlYy0+Y3QwY2EgPSBleGVjLT5leGVjX2JvLT5wYWRkciArIGJpbl9vZmZzZXQ7 CisKKwlleGVjLT5iaW5fdSA9IGJpbjsKKworCWV4ZWMtPnNoYWRlcl9yZWNfdiA9IGV4ZWMtPmV4 ZWNfYm8tPnZhZGRyICsgc2hhZGVyX3JlY19vZmZzZXQ7CisJZXhlYy0+c2hhZGVyX3JlY19wID0g ZXhlYy0+ZXhlY19iby0+cGFkZHIgKyBzaGFkZXJfcmVjX29mZnNldDsKKwlleGVjLT5zaGFkZXJf cmVjX3NpemUgPSBhcmdzLT5zaGFkZXJfcmVjX3NpemU7CisKKwlleGVjLT51bmlmb3Jtc192ID0g ZXhlYy0+ZXhlY19iby0+dmFkZHIgKyB1bmlmb3Jtc19vZmZzZXQ7CisJZXhlYy0+dW5pZm9ybXNf cCA9IGV4ZWMtPmV4ZWNfYm8tPnBhZGRyICsgdW5pZm9ybXNfb2Zmc2V0OworCWV4ZWMtPnVuaWZv cm1zX3NpemUgPSBhcmdzLT51bmlmb3Jtc19zaXplOworCisJcmV0ID0gdmM0X3ZhbGlkYXRlX2Jp bl9jbChkZXYsCisJCQkJICBleGVjLT5leGVjX2JvLT52YWRkciArIGJpbl9vZmZzZXQsCisJCQkJ ICBiaW4sCisJCQkJICBleGVjKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSB2 YzRfdmFsaWRhdGVfc2hhZGVyX3JlY3MoZGV2LCBleGVjKTsKKworZmFpbDoKKwlrZnJlZSh0ZW1w KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAordmM0X2NvbXBsZXRlX2V4ZWMoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IHZjNF9leGVjX2luZm8gKmV4ZWMpCit7CisJdW5z aWduZWQgaTsKKworCS8qIE5lZWQgdGhlIHN0cnVjdCBsb2NrIGZvciBkcm1fZ2VtX29iamVjdF91 bnJlZmVyZW5jZSgpLiAqLworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAo ZXhlYy0+Ym8pIHsKKwkJZm9yIChpID0gMDsgaSA8IGV4ZWMtPmJvX2NvdW50OyBpKyspCisJCQlk cm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZXhlYy0+Ym9baV0tPmJhc2UpOworCQlrZnJlZShl eGVjLT5ibyk7CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZleGVjLT51bnJlZl9saXN0KSkg eworCQlzdHJ1Y3QgdmM0X2JvICpibyA9IGxpc3RfZmlyc3RfZW50cnkoJmV4ZWMtPnVucmVmX2xp c3QsCisJCQkJCQkgICAgIHN0cnVjdCB2YzRfYm8sIHVucmVmX2hlYWQpOworCQlsaXN0X2RlbCgm Ym8tPnVucmVmX2hlYWQpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmYm8tPmJhc2Uu YmFzZSk7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJa2ZyZWUo ZXhlYyk7Cit9CisKK3ZvaWQKK3ZjNF9qb2JfaGFuZGxlX2NvbXBsZXRlZChzdHJ1Y3QgdmM0X2Rl diAqdmM0KQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmdmM0LT5qb2JfbG9jaywgaXJxZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmdmM0LT5q b2JfZG9uZV9saXN0KSkgeworCQlzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYyA9CisJCQlsaXN0 X2ZpcnN0X2VudHJ5KCZ2YzQtPmpvYl9kb25lX2xpc3QsCisJCQkJCSBzdHJ1Y3QgdmM0X2V4ZWNf aW5mbywgaGVhZCk7CisJCWxpc3RfZGVsKCZleGVjLT5oZWFkKTsKKworCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZ2YzQtPmpvYl9sb2NrLCBpcnFmbGFncyk7CisJCXZjNF9jb21wbGV0ZV9leGVj KHZjNC0+ZGV2LCBleGVjKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnZjNC0+am9iX2xvY2ssIGly cWZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmM0LT5qb2JfbG9jaywgaXJx ZmxhZ3MpOworfQorCisvKiBTY2hlZHVsZWQgd2hlbiBhbnkgam9iIGhhcyBiZWVuIGNvbXBsZXRl ZCwgdGhpcyB3YWxrcyB0aGUgbGlzdCBvZgorICogam9icyB0aGF0IGhhZCBjb21wbGV0ZWQgYW5k IHVucmVmcyB0aGVpciBCT3MgYW5kIGZyZWVzIHRoZWlyIGV4ZWMKKyAqIHN0cnVjdHMuCisgKi8K K3N0YXRpYyB2b2lkCit2YzRfam9iX2RvbmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp Cit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qg dmM0X2Rldiwgam9iX2RvbmVfd29yayk7CisKKwl2YzRfam9iX2hhbmRsZV9jb21wbGV0ZWQodmM0 KTsKK30KKworc3RhdGljIGludAordmM0X3dhaXRfZm9yX3NlcW5vX2lvY3RsX2hlbHBlcihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXVpbnQ2NF90IHNlcW5vLAorCQkJCXVpbnQ2NF90ICp0 aW1lb3V0X25zKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOworCWludCByZXQg PSB2YzRfd2FpdF9mb3Jfc2Vxbm8oZGV2LCBzZXFubywgKnRpbWVvdXRfbnMsIHRydWUpOworCisJ aWYgKChyZXQgPT0gLUVJTlRSIHx8IHJldCA9PSAtRVJFU1RBUlRTWVMpICYmICp0aW1lb3V0X25z ICE9IH4wdWxsKSB7CisJCXVpbnQ2NF90IGRlbHRhID0gamlmZmllc190b19uc2VjcyhqaWZmaWVz IC0gc3RhcnQpOworCisJCWlmICgqdGltZW91dF9ucyA+PSBkZWx0YSkKKwkJCSp0aW1lb3V0X25z IC09IGRlbHRhOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludAordmM0X3dhaXRfc2Vxbm9f aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3ZjNF93YWl0X3NlcW5vICphcmdz ID0gZGF0YTsKKworCXJldHVybiB2YzRfd2FpdF9mb3Jfc2Vxbm9faW9jdGxfaGVscGVyKGRldiwg YXJncy0+c2Vxbm8sCisJCQkJCSAgICAgICAmYXJncy0+dGltZW91dF9ucyk7Cit9CisKK2ludAor dmM0X3dhaXRfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJ ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBkcm1f dmM0X3dhaXRfYm8gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29i ajsKKwlzdHJ1Y3QgdmM0X2JvICpibzsKKworCWdlbV9vYmogPSBkcm1fZ2VtX29iamVjdF9sb29r dXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKCFnZW1fb2JqKSB7CisJCURS TV9FUlJPUigiRmFpbGVkIHRvIGxvb2sgdXAgR0VNIEJPICVkXG4iLCBhcmdzLT5oYW5kbGUpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJYm8gPSB0b192YzRfYm8oZ2VtX29iaik7CisKKwlyZXQg PSB2YzRfd2FpdF9mb3Jfc2Vxbm9faW9jdGxfaGVscGVyKGRldiwgYm8tPnNlcW5vLAorCQkJCQkg ICAgICAmYXJncy0+dGltZW91dF9ucyk7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91 bmxvY2tlZChnZW1fb2JqKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIFN1Ym1pdHMgYSBj b21tYW5kIGxpc3QgdG8gdGhlIFZDNC4KKyAqCisgKiBUaGlzIGlzIHdoYXQgaXMgY2FsbGVkIGJh dGNoYnVmZmVyIGVtaXR0aW5nIG9uIG90aGVyIGhhcmR3YXJlLgorICovCitpbnQKK3ZjNF9zdWJt aXRfY2xfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192 YzRfZGV2KGRldik7CisJc3RydWN0IGRybV92YzRfc3VibWl0X2NsICphcmdzID0gZGF0YTsKKwlz dHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYzsKKwlpbnQgcmV0OworCisJaWYgKChhcmdzLT5mbGFn cyAmIH5WQzRfU1VCTUlUX0NMX1VTRV9DTEVBUl9DT0xPUikgIT0gMCkgeworCQlEUk1fRVJST1Io IlVua25vd24gZmxhZ3M6IDB4JTAyeFxuIiwgYXJncy0+ZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlleGVjID0ga2NhbGxvYygxLCBzaXplb2YoKmV4ZWMpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWV4ZWMpIHsKKwkJRFJNX0VSUk9SKCJtYWxsb2MgZmFpbHVyZSBvbiBleGVjIHN0cnVj dFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWV4ZWMtPmFyZ3MgPSBhcmdzOworCUlO SVRfTElTVF9IRUFEKCZleGVjLT51bnJlZl9saXN0KTsKKworCXJldCA9IHZjNF9jbF9sb29rdXBf Ym9zKGRldiwgZmlsZV9wcml2LCBleGVjKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlp ZiAoZXhlYy0+YXJncy0+YmluX2NsX3NpemUgIT0gMCkgeworCQlyZXQgPSB2YzRfZ2V0X2JjbChk ZXYsIGV4ZWMpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCWV4ZWMt PmN0MGNhID0gMDsKKwkJZXhlYy0+Y3QwZWEgPSAwOworCX0KKworCXJldCA9IHZjNF9nZXRfcmNs KGRldiwgZXhlYyk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJLyogQ2xlYXIgdGhpcyBv dXQgb2YgdGhlIHN0cnVjdCB3ZSdsbCBiZSBwdXR0aW5nIGluIHRoZSBxdWV1ZSwKKwkgKiBzaW5j ZSBpdCdzIHBhcnQgb2Ygb3VyIHN0YWNrLgorCSAqLworCWV4ZWMtPmFyZ3MgPSBOVUxMOworCisJ dmM0X3F1ZXVlX3N1Ym1pdChkZXYsIGV4ZWMpOworCisJLyogUmV0dXJuIHRoZSBzZXFubyBmb3Ig b3VyIGpvYi4gKi8KKwlhcmdzLT5zZXFubyA9IHZjNC0+ZW1pdF9zZXFubzsKKworCXJldHVybiAw OworCitmYWlsOgorCXZjNF9jb21wbGV0ZV9leGVjKHZjNC0+ZGV2LCBleGVjKTsKKworCXJldHVy biByZXQ7Cit9CisKK3ZvaWQKK3ZjNF9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQor eworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisKKwlJTklUX0xJU1Rf SEVBRCgmdmM0LT5qb2JfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnZjNC0+am9iX2RvbmVfbGlz dCk7CisJc3Bpbl9sb2NrX2luaXQoJnZjNC0+am9iX2xvY2spOworCisJSU5JVF9XT1JLKCZ2YzQt PmhhbmdjaGVjay5yZXNldF93b3JrLCB2YzRfcmVzZXRfd29yayk7CisJc2V0dXBfdGltZXIoJnZj NC0+aGFuZ2NoZWNrLnRpbWVyLAorCQkgICAgdmM0X2hhbmdjaGVja19lbGFwc2VkLAorCQkgICAg KHVuc2lnbmVkIGxvbmcpZGV2KTsKKworCUlOSVRfV09SSygmdmM0LT5qb2JfZG9uZV93b3JrLCB2 YzRfam9iX2RvbmVfd29yayk7Cit9CisKK3ZvaWQKK3ZjNF9nZW1fZGVzdHJveShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7 CisKKwkvKiBXYWl0aW5nIGZvciBleGVjIHRvIGZpbmlzaCB3b3VsZCBuZWVkIHRvIGJlIGRvbmUg YmVmb3JlCisJICogdW5yZWdpc3RlcmluZyBWM0QuCisJICovCisJV0FSTl9PTih2YzQtPmVtaXRf c2Vxbm8gIT0gdmM0LT5maW5pc2hlZF9zZXFubyk7CisKKwkvKiBWM0Qgc2hvdWxkIGFscmVhZHkg aGF2ZSBkaXNhYmxlZCBpdHMgaW50ZXJydXB0IGFuZCBjbGVhcmVkCisJICogdGhlIG92ZXJmbG93 IGFsbG9jYXRpb24gcmVnaXN0ZXJzLiAgTm93IGZyZWUgdGhlIG9iamVjdC4KKwkgKi8KKwlpZiAo dmM0LT5vdmVyZmxvd19tZW0pIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2Nr ZWQoJnZjNC0+b3ZlcmZsb3dfbWVtLT5iYXNlLmJhc2UpOworCQl2YzQtPm92ZXJmbG93X21lbSA9 IE5VTEw7CisJfQorCisJdmM0X2JvX2NhY2hlX2Rlc3Ryb3koZGV2KTsKK30KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf aXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4MDYwZQotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2lycS5jCkBAIC0wLDAgKzEsMjEw IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgQnJvYWRjb20KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAor ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworLyoqIERPQzogSW50ZXJydXB0IG1h bmFnZW1lbnQgZm9yIHRoZSBWM0QgZW5naW5lLgorICoKKyAqIFdlIGhhdmUgYW4gaW50ZXJydXB0 IHN0YXR1cyByZWdpc3RlciAoVjNEX0lOVENUTCkgd2hpY2ggcmVwb3J0cworICogaW50ZXJydXB0 cywgYW5kIHdoZXJlIHdyaXRpbmcgMSBiaXRzIGNsZWFycyB0aG9zZSBpbnRlcnJ1cHRzLgorICog VGhlcmUgYXJlIGFsc28gYSBwYWlyIG9mIGludGVycnVwdCByZWdpc3RlcnMKKyAqIChWM0RfSU5U RU5BL1YzRF9JTlRESVMpIHdoZXJlIHdyaXRpbmcgYSAxIHRvIHRoZWlyIGJpdHMgZW5hYmxlcyBv cgorICogZGlzYWJsZXMgdGhhdCBzcGVjaWZpYyBpbnRlcnJ1cHQsIGFuZCAwcyB3cml0dGVuIGFy ZSBpZ25vcmVkCisgKiAocmVhZGluZyBlaXRoZXIgb25lIHJldHVybnMgdGhlIHNldCBvZiBlbmFi bGVkIGludGVycnVwdHMpLgorICoKKyAqIFdoZW4gd2UgdGFrZSBhIHJlbmRlciBmcmFtZSBpbnRl cnJ1cHQsIHdlIG5lZWQgdG8gd2FrZSB0aGUKKyAqIHByb2Nlc3NlcyB3YWl0aW5nIGZvciBzb21l IGZyYW1lIHRvIGJlIGRvbmUsIGFuZCBnZXQgdGhlIG5leHQgZnJhbWUKKyAqIHN1Ym1pdHRlZCBB U0FQIChzbyB0aGUgaGFyZHdhcmUgZG9lc24ndCBzaXQgaWRsZSB3aGVuIHRoZXJlJ3Mgd29yawor ICogdG8gZG8pLgorICoKKyAqIFdoZW4gd2UgdGFrZSB0aGUgYmlubmVyIG91dCBvZiBtZW1vcnkg aW50ZXJydXB0LCB3ZSBuZWVkIHRvCisgKiBhbGxvY2F0ZSBzb21lIG5ldyBtZW1vcnkgYW5kIHBh c3MgaXQgdG8gdGhlIGJpbm5lciBzbyB0aGF0IHRoZQorICogY3VycmVudCBqb2IgY2FuIG1ha2Ug cHJvZ3Jlc3MuCisgKi8KKworI2luY2x1ZGUgInZjNF9kcnYuaCIKKyNpbmNsdWRlICJ2YzRfcmVn cy5oIgorCisjZGVmaW5lIFYzRF9EUklWRVJfSVJRUyAoVjNEX0lOVF9PVVRPTUVNIHwgXAorCQkJ IFYzRF9JTlRfRlJET05FKQorCitERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZW5kZXJfd2FpdCk7 CisKK3N0YXRpYyB2b2lkCit2YzRfb3ZlcmZsb3dfbWVtX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQoreworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPQorCQljb250YWluZXJfb2Yod29yaywg c3RydWN0IHZjNF9kZXYsIG92ZXJmbG93X21lbV93b3JrKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gdmM0LT5kZXY7CisJc3RydWN0IHZjNF9ibyAqYm87CisKKwlibyA9IHZjNF9ib19jcmVh dGUoZGV2LCAyNTYgKiAxMDI0LCB0cnVlKTsKKwlpZiAoIWJvKSB7CisJCURSTV9FUlJPUigiQ291 bGRuJ3QgYWxsb2NhdGUgYmlubmVyIG92ZXJmbG93IG1lbVxuIik7CisJCXJldHVybjsKKwl9CisK KwkvKiBJZiB0aGVyZSdzIGEgam9iIGV4ZWN1dGluZyBjdXJyZW50bHksIHRoZW4gb3VyIHByZXZp b3VzCisJICogb3ZlcmZsb3cgYWxsb2NhdGlvbiBpcyBnZXR0aW5nIHVzZWQgaW4gdGhhdCBqb2Ig YW5kIHdlIG5lZWQKKwkgKiB0byBxdWV1ZSBpdCB0byBiZSByZWxlYXNlZCB3aGVuIHRoZSBqb2Ig aXMgZG9uZS4gIEJ1dCBpZiBubworCSAqIGpvYiBpcyBleGVjdXRpbmcgYXQgYWxsLCB0aGVuIHdl IGNhbiBmcmVlIHRoZSBvbGQgb3ZlcmZsb3cKKwkgKiBvYmplY3QgZGlyZWNjdGx5LgorCSAqCisJ ICogTm8gbG9jayBuZWNlc3NhcnkgZm9yIHRoaXMgcG9pbnRlciBzaW5jZSB3ZSdyZSB0aGUgb25s eQorCSAqIG9uZXMgdGhhdCB1cGRhdGUgdGhlIHBvaW50ZXIsIGFuZCBvdXIgd29ya3F1ZXVlIHdv bid0CisJICogcmVlbnRlci4KKwkgKi8KKwlpZiAodmM0LT5vdmVyZmxvd19tZW0pIHsKKwkJc3Ry dWN0IHZjNF9leGVjX2luZm8gKmN1cnJlbnRfZXhlYzsKKwkJdW5zaWduZWQgbG9uZyBpcnFmbGFn czsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmM0LT5qb2JfbG9jaywgaXJxZmxhZ3MpOworCQlj dXJyZW50X2V4ZWMgPSB2YzRfZmlyc3Rfam9iKHZjNCk7CisJCWlmIChjdXJyZW50X2V4ZWMpIHsK KwkJCXZjNC0+b3ZlcmZsb3dfbWVtLT5zZXFubyA9IHZjNC0+ZmluaXNoZWRfc2Vxbm8gKyAxOwor CQkJbGlzdF9hZGRfdGFpbCgmdmM0LT5vdmVyZmxvd19tZW0tPnVucmVmX2hlYWQsCisJCQkJICAg ICAgJmN1cnJlbnRfZXhlYy0+dW5yZWZfbGlzdCk7CisJCQl2YzQtPm92ZXJmbG93X21lbSA9IE5V TEw7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmM0LT5qb2JfbG9jaywgaXJxZmxh Z3MpOworCX0KKworCWlmICh2YzQtPm92ZXJmbG93X21lbSkKKwkJZHJtX2dlbV9vYmplY3RfdW5y ZWZlcmVuY2VfdW5sb2NrZWQoJnZjNC0+b3ZlcmZsb3dfbWVtLT5iYXNlLmJhc2UpOworCXZjNC0+ b3ZlcmZsb3dfbWVtID0gYm87CisKKwlWM0RfV1JJVEUoVjNEX0JQT0EsIGJvLT5iYXNlLnBhZGRy KTsKKwlWM0RfV1JJVEUoVjNEX0JQT1MsIGJvLT5iYXNlLmJhc2Uuc2l6ZSk7CisJVjNEX1dSSVRF KFYzRF9JTlRDVEwsIFYzRF9JTlRfT1VUT01FTSk7CisJVjNEX1dSSVRFKFYzRF9JTlRFTkEsIFYz RF9JTlRfT1VUT01FTSk7Cit9CisKK3N0YXRpYyB2b2lkCit2YzRfaXJxX2ZpbmlzaF9qb2Ioc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2Rl dihkZXYpOworCXN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjID0gdmM0X2ZpcnN0X2pvYih2YzQp OworCisJaWYgKCFleGVjKQorCQlyZXR1cm47CisKKwl2YzQtPmZpbmlzaGVkX3NlcW5vKys7CisJ bGlzdF9tb3ZlX3RhaWwoJmV4ZWMtPmhlYWQsICZ2YzQtPmpvYl9kb25lX2xpc3QpOworCXZjNF9z dWJtaXRfbmV4dF9qb2IoZGV2KTsKKworCXdha2VfdXBfYWxsKCZ2YzQtPmpvYl93YWl0X3F1ZXVl KTsKKwlzY2hlZHVsZV93b3JrKCZ2YzQtPmpvYl9kb25lX3dvcmspOworfQorCitpcnFyZXR1cm5f dAordmM0X2lycShpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGFyZzsKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCXVpbnQz Ml90IGludGN0bDsKKwlpcnFyZXR1cm5fdCBzdGF0dXMgPSBJUlFfTk9ORTsKKworCWJhcnJpZXIo KTsKKwlpbnRjdGwgPSBWM0RfUkVBRChWM0RfSU5UQ1RMKTsKKworCS8qIEFja25vd2xlZGdlIHRo ZSBpbnRlcnJ1cHRzIHdlJ3JlIGhhbmRsaW5nIGhlcmUuIFRoZSByZW5kZXIKKwkgKiBmcmFtZSBk b25lIGludGVycnVwdCB3aWxsIGJlIGNsZWFyZWQsIHdoaWxlIE9VVE9NRU0gd2lsbAorCSAqIHN0 YXkgaGlnaCB1bnRpbCB0aGUgdW5kZXJseWluZyBjYXVzZSBpcyBjbGVhcmVkLgorCSAqLworCVYz RF9XUklURShWM0RfSU5UQ1RMLCBpbnRjdGwpOworCisJaWYgKGludGN0bCAmIFYzRF9JTlRfT1VU T01FTSkgeworCQkvKiBEaXNhYmxlIE9VVE9NRU0gdW50aWwgdGhlIHdvcmsgaXMgZG9uZS4gKi8K KwkJVjNEX1dSSVRFKFYzRF9JTlRESVMsIFYzRF9JTlRfT1VUT01FTSk7CisJCXNjaGVkdWxlX3dv cmsoJnZjNC0+b3ZlcmZsb3dfbWVtX3dvcmspOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9 CisKKwlpZiAoaW50Y3RsICYgVjNEX0lOVF9GUkRPTkUpIHsKKwkJc3Bpbl9sb2NrKCZ2YzQtPmpv Yl9sb2NrKTsKKwkJdmM0X2lycV9maW5pc2hfam9iKGRldik7CisJCXNwaW5fdW5sb2NrKCZ2YzQt PmpvYl9sb2NrKTsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIHN0YXR1 czsKK30KKwordm9pZAordmM0X2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKworCWluaXRfd2Fp dHF1ZXVlX2hlYWQoJnZjNC0+am9iX3dhaXRfcXVldWUpOworCUlOSVRfV09SSygmdmM0LT5vdmVy Zmxvd19tZW1fd29yaywgdmM0X292ZXJmbG93X21lbV93b3JrKTsKKworCS8qIENsZWFyIGFueSBw ZW5kaW5nIGludGVycnVwdHMgc29tZW9uZSBtaWdodCBoYXZlIGxlZnQgYXJvdW5kCisJICogZm9y IHVzLgorCSAqLworCVYzRF9XUklURShWM0RfSU5UQ1RMLCBWM0RfRFJJVkVSX0lSUVMpOworfQor CitpbnQKK3ZjNF9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCisJLyogRW5hYmxlIGJvdGgg dGhlIHJlbmRlciBkb25lIGFuZCBvdXQgb2YgbWVtb3J5IGludGVycnVwdHMuICovCisJVjNEX1dS SVRFKFYzRF9JTlRFTkEsIFYzRF9EUklWRVJfSVJRUyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9p ZAordmM0X2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg dmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCisJLyogRGlzYWJsZSBzZW5kaW5nIGlu dGVycnVwdHMgZm9yIG91ciBkcml2ZXIncyBJUlFzLiAqLworCVYzRF9XUklURShWM0RfSU5URElT LCBWM0RfRFJJVkVSX0lSUVMpOworCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cyB3 ZSBtaWdodCBoYXZlIGxlZnQuICovCisJVjNEX1dSSVRFKFYzRF9JTlRDVEwsIFYzRF9EUklWRVJf SVJRUyk7CisKKwljYW5jZWxfd29ya19zeW5jKCZ2YzQtPm92ZXJmbG93X21lbV93b3JrKTsKK30K KworLyoqIFJlaW5pdGlhbGl6ZXMgaW50ZXJydXB0IHJlZ2lzdGVycyB3aGVuIGEgR1BVIHJlc2V0 IGlzIHBlcmZvcm1lZC4gKi8KK3ZvaWQgdmM0X2lycV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQoreworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJdW5zaWdu ZWQgbG9uZyBpcnFmbGFnczsKKworCS8qIEFja25vd2xlZGdlIGFueSBzdGFsZSBJUlFzLiAqLwor CVYzRF9XUklURShWM0RfSU5UQ1RMLCBWM0RfRFJJVkVSX0lSUVMpOworCisJLyoKKwkgKiBUdXJu IGFsbCBvdXIgaW50ZXJydXB0cyBvbi4gIEJpbm5lciBvdXQgb2YgbWVtb3J5IGlzIHRoZQorCSAq IG9ubHkgb25lIHdlIGV4cGVjdCB0byB0cmlnZ2VyIGF0IHRoaXMgcG9pbnQsIHNpbmNlIHdlJ3Zl CisJICoganVzdCBjb21lIGZyb20gcG93ZXJvbiBhbmQgaGF2ZW4ndCBzdXBwbGllZCBhbnkgb3Zl cmZsb3cKKwkgKiBtZW1vcnkgeWV0LgorCSAqLworCVYzRF9XUklURShWM0RfSU5URU5BLCBWM0Rf RFJJVkVSX0lSUVMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZjNC0+am9iX2xvY2ssIGlycWZs YWdzKTsKKwl2YzRfaXJxX2ZpbmlzaF9qb2IoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZ2YzQtPmpvYl9sb2NrLCBpcnFmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9wYWNrZXQuaCBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BhY2tldC5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMzFjYzAKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wYWNrZXQuaApAQCAtMCwwICsxLDM5OSBAQAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IEJyb2FkY29tCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgVkM0X1BBQ0tFVF9ICisjZGVm aW5lIFZDNF9QQUNLRVRfSAorCisjaW5jbHVkZSAidmM0X3JlZ3MuaCIgLyogZm9yIFZDNF9NQVNL LCBWQzRfR0VUX0ZJRUxELCBWQzRfU0VUX0ZJRUxEICovCisKK2VudW0gdmM0X3BhY2tldCB7CisJ VkM0X1BBQ0tFVF9IQUxUID0gMCwKKwlWQzRfUEFDS0VUX05PUCA9IDEsCisKKwlWQzRfUEFDS0VU X0ZMVVNIID0gNCwKKwlWQzRfUEFDS0VUX0ZMVVNIX0FMTCA9IDUsCisJVkM0X1BBQ0tFVF9TVEFS VF9USUxFX0JJTk5JTkcgPSA2LAorCVZDNF9QQUNLRVRfSU5DUkVNRU5UX1NFTUFQSE9SRSA9IDcs CisJVkM0X1BBQ0tFVF9XQUlUX09OX1NFTUFQSE9SRSA9IDgsCisKKwlWQzRfUEFDS0VUX0JSQU5D SCA9IDE2LAorCVZDNF9QQUNLRVRfQlJBTkNIX1RPX1NVQl9MSVNUID0gMTcsCisKKwlWQzRfUEFD S0VUX1NUT1JFX01TX1RJTEVfQlVGRkVSID0gMjQsCisJVkM0X1BBQ0tFVF9TVE9SRV9NU19USUxF X0JVRkZFUl9BTkRfRU9GID0gMjUsCisJVkM0X1BBQ0tFVF9TVE9SRV9GVUxMX1JFU19USUxFX0JV RkZFUiA9IDI2LAorCVZDNF9QQUNLRVRfTE9BRF9GVUxMX1JFU19USUxFX0JVRkZFUiA9IDI3LAor CVZDNF9QQUNLRVRfU1RPUkVfVElMRV9CVUZGRVJfR0VORVJBTCA9IDI4LAorCVZDNF9QQUNLRVRf TE9BRF9USUxFX0JVRkZFUl9HRU5FUkFMID0gMjksCisKKwlWQzRfUEFDS0VUX0dMX0lOREVYRURf UFJJTUlUSVZFID0gMzIsCisJVkM0X1BBQ0tFVF9HTF9BUlJBWV9QUklNSVRJVkUgPSAzMywKKwor CVZDNF9QQUNLRVRfQ09NUFJFU1NFRF9QUklNSVRJVkUgPSA0OCwKKwlWQzRfUEFDS0VUX0NMSVBQ RURfQ09NUFJFU1NFRF9QUklNSVRJVkUgPSA0OSwKKworCVZDNF9QQUNLRVRfUFJJTUlUSVZFX0xJ U1RfRk9STUFUID0gNTYsCisKKwlWQzRfUEFDS0VUX0dMX1NIQURFUl9TVEFURSA9IDY0LAorCVZD NF9QQUNLRVRfTlZfU0hBREVSX1NUQVRFID0gNjUsCisJVkM0X1BBQ0tFVF9WR19TSEFERVJfU1RB VEUgPSA2NiwKKworCVZDNF9QQUNLRVRfQ09ORklHVVJBVElPTl9CSVRTID0gOTYsCisJVkM0X1BB Q0tFVF9GTEFUX1NIQURFX0ZMQUdTID0gOTcsCisJVkM0X1BBQ0tFVF9QT0lOVF9TSVpFID0gOTgs CisJVkM0X1BBQ0tFVF9MSU5FX1dJRFRIID0gOTksCisJVkM0X1BBQ0tFVF9SSFRfWF9CT1VOREFS WSA9IDEwMCwKKwlWQzRfUEFDS0VUX0RFUFRIX09GRlNFVCA9IDEwMSwKKwlWQzRfUEFDS0VUX0NM SVBfV0lORE9XID0gMTAyLAorCVZDNF9QQUNLRVRfVklFV1BPUlRfT0ZGU0VUID0gMTAzLAorCVZD NF9QQUNLRVRfWl9DTElQUElORyA9IDEwNCwKKwlWQzRfUEFDS0VUX0NMSVBQRVJfWFlfU0NBTElO RyA9IDEwNSwKKwlWQzRfUEFDS0VUX0NMSVBQRVJfWl9TQ0FMSU5HID0gMTA2LAorCisJVkM0X1BB Q0tFVF9USUxFX0JJTk5JTkdfTU9ERV9DT05GSUcgPSAxMTIsCisJVkM0X1BBQ0tFVF9USUxFX1JF TkRFUklOR19NT0RFX0NPTkZJRyA9IDExMywKKwlWQzRfUEFDS0VUX0NMRUFSX0NPTE9SUyA9IDEx NCwKKwlWQzRfUEFDS0VUX1RJTEVfQ09PUkRJTkFURVMgPSAxMTUsCisKKwkvKiBOb3QgYW4gYWN0 dWFsIGhhcmR3YXJlIHBhY2tldCAtLSB0aGlzIGlzIHdoYXQgd2UgdXNlIHRvIHB1dAorCSAqIHJl ZmVyZW5jZXMgdG8gR0VNIGJvcyBpbiB0aGUgY29tbWFuZCBzdHJlYW0sIHNpbmNlIHdlIG5lZWQg dGhlIHUzMgorCSAqIGludCB0aGUgYWN0dWFsIGFkZHJlc3MgcGFja2V0IGluIG9yZGVyIHRvIHN0 b3JlIHRoZSBvZmZzZXQgZnJvbSB0aGUKKwkgKiBzdGFydCBvZiB0aGUgQk8uCisJICovCisJVkM0 X1BBQ0tFVF9HRU1fSEFORExFUyA9IDI1NCwKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18p KTsKKworI2RlZmluZSBWQzRfUEFDS0VUX0hBTFRfU0laRQkJCQkJCTEKKyNkZWZpbmUgVkM0X1BB Q0tFVF9OT1BfU0laRQkJCQkJCTEKKyNkZWZpbmUgVkM0X1BBQ0tFVF9GTFVTSF9TSVpFCQkJCQkJ MQorI2RlZmluZSBWQzRfUEFDS0VUX0ZMVVNIX0FMTF9TSVpFCQkJCQkxCisjZGVmaW5lIFZDNF9Q QUNLRVRfU1RBUlRfVElMRV9CSU5OSU5HX1NJWkUJCQkJMQorI2RlZmluZSBWQzRfUEFDS0VUX0lO Q1JFTUVOVF9TRU1BUEhPUkVfU0laRQkJCQkxCisjZGVmaW5lIFZDNF9QQUNLRVRfV0FJVF9PTl9T RU1BUEhPUkVfU0laRQkJCQkxCisjZGVmaW5lIFZDNF9QQUNLRVRfQlJBTkNIX1NJWkUJCQkJCQk1 CisjZGVmaW5lIFZDNF9QQUNLRVRfQlJBTkNIX1RPX1NVQl9MSVNUX1NJWkUJCQkJNQorI2RlZmlu ZSBWQzRfUEFDS0VUX1NUT1JFX01TX1RJTEVfQlVGRkVSX1NJWkUJCQkJMQorI2RlZmluZSBWQzRf UEFDS0VUX1NUT1JFX01TX1RJTEVfQlVGRkVSX0FORF9FT0ZfU0laRQkJCTEKKyNkZWZpbmUgVkM0 X1BBQ0tFVF9TVE9SRV9GVUxMX1JFU19USUxFX0JVRkZFUl9TSVpFCQkJNQorI2RlZmluZSBWQzRf UEFDS0VUX0xPQURfRlVMTF9SRVNfVElMRV9CVUZGRVJfU0laRQkJCTUKKyNkZWZpbmUgVkM0X1BB Q0tFVF9TVE9SRV9USUxFX0JVRkZFUl9HRU5FUkFMX1NJWkUJCQk3CisjZGVmaW5lIFZDNF9QQUNL RVRfTE9BRF9USUxFX0JVRkZFUl9HRU5FUkFMX1NJWkUJCQk3CisjZGVmaW5lIFZDNF9QQUNLRVRf R0xfSU5ERVhFRF9QUklNSVRJVkVfU0laRQkJCQkxNAorI2RlZmluZSBWQzRfUEFDS0VUX0dMX0FS UkFZX1BSSU1JVElWRV9TSVpFCQkJCTEwCisjZGVmaW5lIFZDNF9QQUNLRVRfQ09NUFJFU1NFRF9Q UklNSVRJVkVfU0laRQkJCQkxCisjZGVmaW5lIFZDNF9QQUNLRVRfQ0xJUFBFRF9DT01QUkVTU0VE X1BSSU1JVElWRV9TSVpFCQkJMQorI2RlZmluZSBWQzRfUEFDS0VUX1BSSU1JVElWRV9MSVNUX0ZP Uk1BVF9TSVpFCQkJCTIKKyNkZWZpbmUgVkM0X1BBQ0tFVF9HTF9TSEFERVJfU1RBVEVfU0laRQkJ CQkJNQorI2RlZmluZSBWQzRfUEFDS0VUX05WX1NIQURFUl9TVEFURV9TSVpFCQkJCQk1CisjZGVm aW5lIFZDNF9QQUNLRVRfVkdfU0hBREVSX1NUQVRFX1NJWkUJCQkJCTUKKyNkZWZpbmUgVkM0X1BB Q0tFVF9DT05GSUdVUkFUSU9OX0JJVFNfU0laRQkJCQk0CisjZGVmaW5lIFZDNF9QQUNLRVRfRkxB VF9TSEFERV9GTEFHU19TSVpFCQkJCTUKKyNkZWZpbmUgVkM0X1BBQ0tFVF9QT0lOVF9TSVpFX1NJ WkUJCQkJCTUKKyNkZWZpbmUgVkM0X1BBQ0tFVF9MSU5FX1dJRFRIX1NJWkUJCQkJCTUKKyNkZWZp bmUgVkM0X1BBQ0tFVF9SSFRfWF9CT1VOREFSWV9TSVpFCQkJCQkzCisjZGVmaW5lIFZDNF9QQUNL RVRfREVQVEhfT0ZGU0VUX1NJWkUJCQkJCTUKKyNkZWZpbmUgVkM0X1BBQ0tFVF9DTElQX1dJTkRP V19TSVpFCQkJCQk5CisjZGVmaW5lIFZDNF9QQUNLRVRfVklFV1BPUlRfT0ZGU0VUX1NJWkUJCQkJ CTUKKyNkZWZpbmUgVkM0X1BBQ0tFVF9aX0NMSVBQSU5HX1NJWkUJCQkJCTkKKyNkZWZpbmUgVkM0 X1BBQ0tFVF9DTElQUEVSX1hZX1NDQUxJTkdfU0laRQkJCQk5CisjZGVmaW5lIFZDNF9QQUNLRVRf Q0xJUFBFUl9aX1NDQUxJTkdfU0laRQkJCQk5CisjZGVmaW5lIFZDNF9QQUNLRVRfVElMRV9CSU5O SU5HX01PREVfQ09ORklHX1NJWkUJCQkxNgorI2RlZmluZSBWQzRfUEFDS0VUX1RJTEVfUkVOREVS SU5HX01PREVfQ09ORklHX1NJWkUJCQkxMQorI2RlZmluZSBWQzRfUEFDS0VUX0NMRUFSX0NPTE9S U19TSVpFCQkJCQkxNAorI2RlZmluZSBWQzRfUEFDS0VUX1RJTEVfQ09PUkRJTkFURVNfU0laRQkJ CQkzCisjZGVmaW5lIFZDNF9QQUNLRVRfR0VNX0hBTkRMRVNfU0laRQkJCQkJOQorCisvKiBOdW1i ZXIgb2YgbXVsdGlzYW1wbGVzIHN1cHBvcnRlZC4gKi8KKyNkZWZpbmUgVkM0X01BWF9TQU1QTEVT CQkJCQkJCTQKKy8qIFNpemUgb2YgYSBmdWxsIHJlc29sdXRpb24gY29sb3Igb3IgWiB0aWxlIGJ1 ZmZlciBsb2FkL3N0b3JlLiAqLworI2RlZmluZSBWQzRfVElMRV9CVUZGRVJfU0laRQkJCSg2NCAq IDY0ICogNCkKKworLyoqIEB7CisgKiBCaXRzIHVzZWQgYnkgcGFja2V0cyBsaWtlIFZDNF9QQUNL RVRfU1RPUkVfVElMRV9CVUZGRVJfR0VORVJBTCBhbmQKKyAqIFZDNF9QQUNLRVRfVElMRV9SRU5E RVJJTkdfTU9ERV9DT05GSUcuCisqLworI2RlZmluZSBWQzRfVElMSU5HX0ZPUk1BVF9MSU5FQVIg ICAgMAorI2RlZmluZSBWQzRfVElMSU5HX0ZPUk1BVF9UICAgICAgICAgMQorI2RlZmluZSBWQzRf VElMSU5HX0ZPUk1BVF9MVCAgICAgICAgMgorLyoqIEB9ICovCisKKy8qKiBAeworICoKKyAqIGxv dyBiaXRzIG9mIFZDNF9QQUNLRVRfU1RPUkVfRlVMTF9SRVNfVElMRV9CVUZGRVIgYW5kCisgKiBW QzRfUEFDS0VUX0xPQURfRlVMTF9SRVNfVElMRV9CVUZGRVIuCisgKi8KKyNkZWZpbmUgVkM0X0xP QURTVE9SRV9GVUxMX1JFU19FT0YgICAgICAgICAgICAgICAgICAgICBCSVQoMykKKyNkZWZpbmUg VkM0X0xPQURTVE9SRV9GVUxMX1JFU19ESVNBQkxFX0NMRUFSX0FMTCAgICAgICBCSVQoMikKKyNk ZWZpbmUgVkM0X0xPQURTVE9SRV9GVUxMX1JFU19ESVNBQkxFX1pTICAgICAgICAgICAgICBCSVQo MSkKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9GVUxMX1JFU19ESVNBQkxFX0NPTE9SICAgICAgICAg ICBCSVQoMCkKKworLyoqIEB7CisgKgorICogbG93IGJpdHMgb2YgVkM0X1BBQ0tFVF9TVE9SRV9G VUxMX1JFU19USUxFX0JVRkZFUiBhbmQKKyAqIFZDNF9QQUNLRVRfTE9BRF9GVUxMX1JFU19USUxF X0JVRkZFUi4KKyAqLworI2RlZmluZSBWQzRfTE9BRFNUT1JFX0ZVTExfUkVTX0VPRiAgICAgICAg ICAgICAgICAgICAgIEJJVCgzKQorI2RlZmluZSBWQzRfTE9BRFNUT1JFX0ZVTExfUkVTX0RJU0FC TEVfQ0xFQVJfQUxMICAgICAgIEJJVCgyKQorI2RlZmluZSBWQzRfTE9BRFNUT1JFX0ZVTExfUkVT X0RJU0FCTEVfWlMgICAgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBWQzRfTE9BRFNUT1JFX0ZV TExfUkVTX0RJU0FCTEVfQ09MT1IgICAgICAgICAgIEJJVCgwKQorCisvKiogQHsKKyAqCisgKiBi eXRlIDIgb2YgVkM0X1BBQ0tFVF9TVE9SRV9USUxFX0JVRkZFUl9HRU5FUkFMIGFuZAorICogVkM0 X1BBQ0tFVF9MT0FEX1RJTEVfQlVGRkVSX0dFTkVSQUwgKGxvdyBiaXRzIG9mIHRoZSBhZGRyZXNz KQorICovCisKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9FT0YgICAgICAgICAg ICAgICAgICBCSVQoMykKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9ESVNBQkxF X0ZVTExfVkdfTUFTSyBCSVQoMikKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9E SVNBQkxFX0ZVTExfWlMgICAgICBCSVQoMSkKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JV RkZFUl9ESVNBQkxFX0ZVTExfQ09MT1IgICBCSVQoMCkKKworLyoqIEB9ICovCisKKy8qKiBAewor ICoKKyAqIGJ5dGUgMC0xIG9mIFZDNF9QQUNLRVRfU1RPUkVfVElMRV9CVUZGRVJfR0VORVJBTCBh bmQKKyAqIFZDNF9QQUNLRVRfTE9BRF9USUxFX0JVRkZFUl9HRU5FUkFMCisgKi8KKyNkZWZpbmUg VkM0X1NUT1JFX1RJTEVfQlVGRkVSX0RJU0FCTEVfVkdfTUFTS19DTEVBUiBCSVQoMTUpCisjZGVm aW5lIFZDNF9TVE9SRV9USUxFX0JVRkZFUl9ESVNBQkxFX1pTX0NMRUFSICAgICBCSVQoMTQpCisj ZGVmaW5lIFZDNF9TVE9SRV9USUxFX0JVRkZFUl9ESVNBQkxFX0NPTE9SX0NMRUFSICBCSVQoMTMp CisjZGVmaW5lIFZDNF9TVE9SRV9USUxFX0JVRkZFUl9ESVNBQkxFX1NXQVAgICAgICAgICBCSVQo MTIpCisKKyNkZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9GT1JNQVRfTUFTSyAgICAg IFZDNF9NQVNLKDksIDgpCisjZGVmaW5lIFZDNF9MT0FEU1RPUkVfVElMRV9CVUZGRVJfRk9STUFU X1NISUZUICAgICA4CisjZGVmaW5lIFZDNF9MT0FEU1RPUkVfVElMRV9CVUZGRVJfUkdCQTg4ODgg ICAgICAgICAwCisjZGVmaW5lIFZDNF9MT0FEU1RPUkVfVElMRV9CVUZGRVJfQkdSNTY1X0RJVEhF UiAgICAxCisjZGVmaW5lIFZDNF9MT0FEU1RPUkVfVElMRV9CVUZGRVJfQkdSNTY1ICAgICAgICAg ICAyCisvKiogQH0gKi8KKworLyoqIEB7CisgKgorICogYnl0ZSAwIG9mIFZDNF9QQUNLRVRfU1RP UkVfVElMRV9CVUZGRVJfR0VORVJBTCBhbmQKKyAqIFZDNF9QQUNLRVRfTE9BRF9USUxFX0JVRkZF Ul9HRU5FUkFMCisgKi8KKyNkZWZpbmUgVkM0X1NUT1JFX1RJTEVfQlVGRkVSX01PREVfTUFTSyAg ICAgICAgICAgIFZDNF9NQVNLKDcsIDYpCisjZGVmaW5lIFZDNF9TVE9SRV9USUxFX0JVRkZFUl9N T0RFX1NISUZUICAgICAgICAgICA2CisjZGVmaW5lIFZDNF9TVE9SRV9USUxFX0JVRkZFUl9NT0RF X1NBTVBMRTAgICAgICAgICAoMCA8PCA2KQorI2RlZmluZSBWQzRfU1RPUkVfVElMRV9CVUZGRVJf TU9ERV9ERUNJTUFURV9YNCAgICAgKDEgPDwgNikKKyNkZWZpbmUgVkM0X1NUT1JFX1RJTEVfQlVG RkVSX01PREVfREVDSU1BVEVfWDE2ICAgICgyIDw8IDYpCisKKy8qKiBUaGUgdmFsdWVzIG9mIHRo ZSBmaWVsZCBhcmUgVkM0X1RJTElOR19GT1JNQVRfKiAqLworI2RlZmluZSBWQzRfTE9BRFNUT1JF X1RJTEVfQlVGRkVSX1RJTElOR19NQVNLICAgICAgVkM0X01BU0soNSwgNCkKKyNkZWZpbmUgVkM0 X0xPQURTVE9SRV9USUxFX0JVRkZFUl9USUxJTkdfU0hJRlQgICAgIDQKKworI2RlZmluZSBWQzRf TE9BRFNUT1JFX1RJTEVfQlVGRkVSX0JVRkZFUl9NQVNLICAgICAgVkM0X01BU0soMiwgMCkKKyNk ZWZpbmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9CVUZGRVJfU0hJRlQgICAgIDAKKyNkZWZp bmUgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9OT05FICAgICAgICAgICAgIDAKKyNkZWZpbmUg VkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9DT0xPUiAgICAgICAgICAgIDEKKyNkZWZpbmUgVkM0 X0xPQURTVE9SRV9USUxFX0JVRkZFUl9aUyAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVkM0X0xP QURTVE9SRV9USUxFX0JVRkZFUl9aICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgVkM0X0xPQURT VE9SRV9USUxFX0JVRkZFUl9WR19NQVNLICAgICAgICAgIDQKKyNkZWZpbmUgVkM0X0xPQURTVE9S RV9USUxFX0JVRkZFUl9GVUxMICAgICAgICAgICAgIDUKKy8qKiBAfSAqLworCisjZGVmaW5lIFZD NF9JTkRFWF9CVUZGRVJfVTggICAgICAgICAgICAgICAgICAgICAgICAoMCA8PCA0KQorI2RlZmlu ZSBWQzRfSU5ERVhfQlVGRkVSX1UxNiAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKwor LyogVGhpcyBmbGFnIGlzIG9ubHkgcHJlc2VudCBpbiBOViBzaGFkZXIgc3RhdGUuICovCisjZGVm aW5lIFZDNF9TSEFERVJfRkxBR19TSEFERURfQ0xJUF9DT09SRFMgICAgICAgICBCSVQoMykKKyNk ZWZpbmUgVkM0X1NIQURFUl9GTEFHX0VOQUJMRV9DTElQUElORyAgICAgICAgICAgIEJJVCgyKQor I2RlZmluZSBWQzRfU0hBREVSX0ZMQUdfVlNfUE9JTlRfU0laRSAgICAgICAgICAgICAgQklUKDEp CisjZGVmaW5lIFZDNF9TSEFERVJfRkxBR19GU19TSU5HTEVfVEhSRUFEICAgICAgICAgICBCSVQo MCkKKworLyoqIEB7IGJ5dGUgMiBvZiBjb25maWcgYml0cy4gKi8KKyNkZWZpbmUgVkM0X0NPTkZJ R19CSVRTX0VBUkxZX1pfVVBEQVRFICAgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBWQzRfQ09O RklHX0JJVFNfRUFSTFlfWiAgICAgICAgICAgICAgICAgICAgQklUKDApCisvKiogQH0gKi8KKwor LyoqIEB7IGJ5dGUgMSBvZiBjb25maWcgYml0cy4gKi8KKyNkZWZpbmUgVkM0X0NPTkZJR19CSVRT X1pfVVBEQVRFICAgICAgICAgICAgICAgICAgIEJJVCg3KQorLyoqIHNhbWUgdmFsdWVzIGluIHRo aXMgMy1iaXQgZmllbGQgYXMgUElQRV9GVU5DXyogKi8KKyNkZWZpbmUgVkM0X0NPTkZJR19CSVRT X0RFUFRIX0ZVTkNfU0hJRlQgICAgICAgICAgIDQKKyNkZWZpbmUgVkM0X0NPTkZJR19CSVRTX0NP VkVSQUdFX1JFQURfTEVBVkUgICAgICAgIEJJVCgzKQorCisjZGVmaW5lIFZDNF9DT05GSUdfQklU U19DT1ZFUkFHRV9VUERBVEVfTk9OWkVSTyAgICAoMCA8PCAxKQorI2RlZmluZSBWQzRfQ09ORklH X0JJVFNfQ09WRVJBR0VfVVBEQVRFX09ERCAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgVkM0X0NP TkZJR19CSVRTX0NPVkVSQUdFX1VQREFURV9PUiAgICAgICAgICgyIDw8IDEpCisjZGVmaW5lIFZD NF9DT05GSUdfQklUU19DT1ZFUkFHRV9VUERBVEVfWkVSTyAgICAgICAoMyA8PCAxKQorCisjZGVm aW5lIFZDNF9DT05GSUdfQklUU19DT1ZFUkFHRV9QSVBFX1NFTEVDVCAgICAgICBCSVQoMCkKKy8q KiBAfSAqLworCisvKiogQHsgYnl0ZSAwIG9mIGNvbmZpZyBiaXRzLiAqLworI2RlZmluZSBWQzRf Q09ORklHX0JJVFNfUkFTVEVSSVpFUl9PVkVSU0FNUExFX05PTkUgKDAgPDwgNikKKyNkZWZpbmUg VkM0X0NPTkZJR19CSVRTX1JBU1RFUklaRVJfT1ZFUlNBTVBMRV80WCAgICgxIDw8IDYpCisjZGVm aW5lIFZDNF9DT05GSUdfQklUU19SQVNURVJJWkVSX09WRVJTQU1QTEVfMTZYICAoMiA8PCA2KQor CisjZGVmaW5lIFZDNF9DT05GSUdfQklUU19BQV9QT0lOVFNfQU5EX0xJTkVTICAgICAgICBCSVQo NCkKKyNkZWZpbmUgVkM0X0NPTkZJR19CSVRTX0VOQUJMRV9ERVBUSF9PRkZTRVQgICAgICAgIEJJ VCgzKQorI2RlZmluZSBWQzRfQ09ORklHX0JJVFNfQ1dfUFJJTUlUSVZFUyAgICAgICAgICAgICAg QklUKDIpCisjZGVmaW5lIFZDNF9DT05GSUdfQklUU19FTkFCTEVfUFJJTV9CQUNLICAgICAgICAg ICBCSVQoMSkKKyNkZWZpbmUgVkM0X0NPTkZJR19CSVRTX0VOQUJMRV9QUklNX0ZST05UICAgICAg ICAgIEJJVCgwKQorLyoqIEB9ICovCisKKy8qKiBAeyBiaXRzIGluIHRoZSBsYXN0IHU4IG9mIFZD NF9QQUNLRVRfVElMRV9CSU5OSU5HX01PREVfQ09ORklHICovCisjZGVmaW5lIFZDNF9CSU5fQ09O RklHX0RCX05PTl9NUyAgICAgICAgICAgICAgICAgICBCSVQoNykKKworI2RlZmluZSBWQzRfQklO X0NPTkZJR19BTExPQ19CTE9DS19TSVpFX01BU0sgICAgICAgVkM0X01BU0soNiwgNSkKKyNkZWZp bmUgVkM0X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRV9TSElGVCAgICAgIDUKKyNkZWZpbmUg VkM0X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRV8zMiAgICAgICAgIDAKKyNkZWZpbmUgVkM0 X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRV82NCAgICAgICAgIDEKKyNkZWZpbmUgVkM0X0JJ Tl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRV8xMjggICAgICAgIDIKKyNkZWZpbmUgVkM0X0JJTl9D T05GSUdfQUxMT0NfQkxPQ0tfU0laRV8yNTYgICAgICAgIDMKKworI2RlZmluZSBWQzRfQklOX0NP TkZJR19BTExPQ19JTklUX0JMT0NLX1NJWkVfTUFTSyAgVkM0X01BU0soNCwgMykKKyNkZWZpbmUg VkM0X0JJTl9DT05GSUdfQUxMT0NfSU5JVF9CTE9DS19TSVpFX1NISUZUIDMKKyNkZWZpbmUgVkM0 X0JJTl9DT05GSUdfQUxMT0NfSU5JVF9CTE9DS19TSVpFXzMyICAgIDAKKyNkZWZpbmUgVkM0X0JJ Tl9DT05GSUdfQUxMT0NfSU5JVF9CTE9DS19TSVpFXzY0ICAgIDEKKyNkZWZpbmUgVkM0X0JJTl9D T05GSUdfQUxMT0NfSU5JVF9CTE9DS19TSVpFXzEyOCAgIDIKKyNkZWZpbmUgVkM0X0JJTl9DT05G SUdfQUxMT0NfSU5JVF9CTE9DS19TSVpFXzI1NiAgIDMKKworI2RlZmluZSBWQzRfQklOX0NPTkZJ R19BVVRPX0lOSVRfVFNEQSAgICAgICAgICAgICAgQklUKDIpCisjZGVmaW5lIFZDNF9CSU5fQ09O RklHX1RJTEVfQlVGRkVSXzY0QklUICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgVkM0X0JJTl9D T05GSUdfTVNfTU9ERV80WCAgICAgICAgICAgICAgICAgIEJJVCgwKQorLyoqIEB9ICovCisKKy8q KiBAeyBiaXRzIGluIHRoZSBsYXN0IHUxNiBvZiBWQzRfUEFDS0VUX1RJTEVfUkVOREVSSU5HX01P REVfQ09ORklHICovCisjZGVmaW5lIFZDNF9SRU5ERVJfQ09ORklHX0RCX05PTl9NUyAgICAgICAg ICAgICAgICBCSVQoMTIpCisjZGVmaW5lIFZDNF9SRU5ERVJfQ09ORklHX0VBUkxZX1pfQ09WRVJB R0VfRElTQUJMRSBCSVQoMTEpCisjZGVmaW5lIFZDNF9SRU5ERVJfQ09ORklHX0VBUkxZX1pfRElS RUNUSU9OX0cgICAgICBCSVQoMTApCisjZGVmaW5lIFZDNF9SRU5ERVJfQ09ORklHX0NPVkVSQUdF X01PREUgICAgICAgICAgICBCSVQoOSkKKyNkZWZpbmUgVkM0X1JFTkRFUl9DT05GSUdfRU5BQkxF X1ZHX01BU0sgICAgICAgICAgIEJJVCg4KQorCisvKiogVGhlIHZhbHVlcyBvZiB0aGUgZmllbGQg YXJlIFZDNF9USUxJTkdfRk9STUFUXyogKi8KKyNkZWZpbmUgVkM0X1JFTkRFUl9DT05GSUdfTUVN T1JZX0ZPUk1BVF9NQVNLICAgICAgIFZDNF9NQVNLKDcsIDYpCisjZGVmaW5lIFZDNF9SRU5ERVJf Q09ORklHX01FTU9SWV9GT1JNQVRfU0hJRlQgICAgICA2CisKKyNkZWZpbmUgVkM0X1JFTkRFUl9D T05GSUdfREVDSU1BVEVfTU9ERV8xWCAgICAgICAgICgwIDw8IDQpCisjZGVmaW5lIFZDNF9SRU5E RVJfQ09ORklHX0RFQ0lNQVRFX01PREVfNFggICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBWQzRf UkVOREVSX0NPTkZJR19ERUNJTUFURV9NT0RFXzE2WCAgICAgICAgKDIgPDwgNCkKKworI2RlZmlu ZSBWQzRfUkVOREVSX0NPTkZJR19GT1JNQVRfTUFTSyAgICAgICAgICAgICAgVkM0X01BU0soMywg MikKKyNkZWZpbmUgVkM0X1JFTkRFUl9DT05GSUdfRk9STUFUX1NISUZUICAgICAgICAgICAgIDIK KyNkZWZpbmUgVkM0X1JFTkRFUl9DT05GSUdfRk9STUFUX0JHUjU2NV9ESVRIRVJFRCAgIDAKKyNk ZWZpbmUgVkM0X1JFTkRFUl9DT05GSUdfRk9STUFUX1JHQkE4ODg4ICAgICAgICAgIDEKKyNkZWZp bmUgVkM0X1JFTkRFUl9DT05GSUdfRk9STUFUX0JHUjU2NSAgICAgICAgICAgIDIKKworI2RlZmlu ZSBWQzRfUkVOREVSX0NPTkZJR19USUxFX0JVRkZFUl82NEJJVCAgICAgICAgQklUKDEpCisjZGVm aW5lIFZDNF9SRU5ERVJfQ09ORklHX01TX01PREVfNFggICAgICAgICAgICAgICBCSVQoMCkKKwor I2RlZmluZSBWQzRfUFJJTUlUSVZFX0xJU1RfRk9STUFUXzE2X0lOREVYICAgICAgICAgKDEgPDwg NCkKKyNkZWZpbmUgVkM0X1BSSU1JVElWRV9MSVNUX0ZPUk1BVF8zMl9YWSAgICAgICAgICAgICgz IDw8IDQpCisjZGVmaW5lIFZDNF9QUklNSVRJVkVfTElTVF9GT1JNQVRfVFlQRV9QT0lOVFMgICAg ICAoMCA8PCAwKQorI2RlZmluZSBWQzRfUFJJTUlUSVZFX0xJU1RfRk9STUFUX1RZUEVfTElORVMg ICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgVkM0X1BSSU1JVElWRV9MSVNUX0ZPUk1BVF9UWVBFX1RS SUFOR0xFUyAgICgyIDw8IDApCisjZGVmaW5lIFZDNF9QUklNSVRJVkVfTElTVF9GT1JNQVRfVFlQ RV9SSFQgICAgICAgICAoMyA8PCAwKQorCitlbnVtIHZjNF90ZXh0dXJlX2RhdGFfdHlwZSB7CisJ VkM0X1RFWFRVUkVfVFlQRV9SR0JBODg4OCA9IDAsCisJVkM0X1RFWFRVUkVfVFlQRV9SR0JYODg4 OCA9IDEsCisJVkM0X1RFWFRVUkVfVFlQRV9SR0JBNDQ0NCA9IDIsCisJVkM0X1RFWFRVUkVfVFlQ RV9SR0JBNTU1MSA9IDMsCisJVkM0X1RFWFRVUkVfVFlQRV9SR0I1NjUgPSA0LAorCVZDNF9URVhU VVJFX1RZUEVfTFVNSU5BTkNFID0gNSwKKwlWQzRfVEVYVFVSRV9UWVBFX0FMUEhBID0gNiwKKwlW QzRfVEVYVFVSRV9UWVBFX0xVTUFMUEhBID0gNywKKwlWQzRfVEVYVFVSRV9UWVBFX0VUQzEgPSA4 LAorCVZDNF9URVhUVVJFX1RZUEVfUzE2RiA9IDksCisJVkM0X1RFWFRVUkVfVFlQRV9TOCA9IDEw LAorCVZDNF9URVhUVVJFX1RZUEVfUzE2ID0gMTEsCisJVkM0X1RFWFRVUkVfVFlQRV9CVzEgPSAx MiwKKwlWQzRfVEVYVFVSRV9UWVBFX0E0ID0gMTMsCisJVkM0X1RFWFRVUkVfVFlQRV9BMSA9IDE0 LAorCVZDNF9URVhUVVJFX1RZUEVfUkdCQTY0ID0gMTUsCisJVkM0X1RFWFRVUkVfVFlQRV9SR0JB MzJSID0gMTYsCisJVkM0X1RFWFRVUkVfVFlQRV9ZVVY0MjJSID0gMTcsCit9OworCisjZGVmaW5l IFZDNF9URVhfUDBfT0ZGU0VUX01BU0sgICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSygzMSwg MTIpCisjZGVmaW5lIFZDNF9URVhfUDBfT0ZGU0VUX1NISUZUICAgICAgICAgICAgICAgICAgICAx MgorI2RlZmluZSBWQzRfVEVYX1AwX0NTV0laX01BU0sgICAgICAgICAgICAgICAgICAgICAgVkM0 X01BU0soMTEsIDEwKQorI2RlZmluZSBWQzRfVEVYX1AwX0NTV0laX1NISUZUICAgICAgICAgICAg ICAgICAgICAgMTAKKyNkZWZpbmUgVkM0X1RFWF9QMF9DTU1PREVfTUFTSyAgICAgICAgICAgICAg ICAgICAgIFZDNF9NQVNLKDksIDkpCisjZGVmaW5lIFZDNF9URVhfUDBfQ01NT0RFX1NISUZUICAg ICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFZDNF9URVhfUDBfRkxJUFlfTUFTSyAgICAgICAg ICAgICAgICAgICAgICBWQzRfTUFTSyg4LCA4KQorI2RlZmluZSBWQzRfVEVYX1AwX0ZMSVBZX1NI SUZUICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBWQzRfVEVYX1AwX1RZUEVfTUFTSyAg ICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soNywgNCkKKyNkZWZpbmUgVkM0X1RFWF9QMF9U WVBFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVkM0X1RFWF9QMF9NSVBM VkxTX01BU0sgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDMsIDApCisjZGVmaW5lIFZDNF9U RVhfUDBfTUlQTFZMU19TSElGVCAgICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgVkM0X1RF WF9QMV9UWVBFNF9NQVNLICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDMxLCAzMSkKKyNk ZWZpbmUgVkM0X1RFWF9QMV9UWVBFNF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVm aW5lIFZDNF9URVhfUDFfSEVJR0hUX01BU0sgICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSygz MCwgMjApCisjZGVmaW5lIFZDNF9URVhfUDFfSEVJR0hUX1NISUZUICAgICAgICAgICAgICAgICAg ICAyMAorI2RlZmluZSBWQzRfVEVYX1AxX0VUQ0ZMSVBfTUFTSyAgICAgICAgICAgICAgICAgICAg VkM0X01BU0soMTksIDE5KQorI2RlZmluZSBWQzRfVEVYX1AxX0VUQ0ZMSVBfU0hJRlQgICAgICAg ICAgICAgICAgICAgMTkKKyNkZWZpbmUgVkM0X1RFWF9QMV9XSURUSF9NQVNLICAgICAgICAgICAg ICAgICAgICAgIFZDNF9NQVNLKDE4LCA4KQorI2RlZmluZSBWQzRfVEVYX1AxX1dJRFRIX1NISUZU ICAgICAgICAgICAgICAgICAgICAgOAorCisjZGVmaW5lIFZDNF9URVhfUDFfTUFHRklMVF9NQVNL ICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSyg3LCA3KQorI2RlZmluZSBWQzRfVEVYX1AxX01B R0ZJTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgNworIyBkZWZpbmUgVkM0X1RFWF9QMV9NQUdG SUxUX0xJTkVBUiAgICAgICAgICAgICAgICAgMAorIyBkZWZpbmUgVkM0X1RFWF9QMV9NQUdGSUxU X05FQVJFU1QgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFZDNF9URVhfUDFfTUlORklMVF9N QVNLICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSyg2LCA0KQorI2RlZmluZSBWQzRfVEVYX1Ax X01JTkZJTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgNAorIyBkZWZpbmUgVkM0X1RFWF9QMV9N SU5GSUxUX0xJTkVBUiAgICAgICAgICAgICAgICAgMAorIyBkZWZpbmUgVkM0X1RFWF9QMV9NSU5G SUxUX05FQVJFU1QgICAgICAgICAgICAgICAgMQorIyBkZWZpbmUgVkM0X1RFWF9QMV9NSU5GSUxU X05FQVJfTUlQX05FQVIgICAgICAgICAgMgorIyBkZWZpbmUgVkM0X1RFWF9QMV9NSU5GSUxUX05F QVJfTUlQX0xJTiAgICAgICAgICAgMworIyBkZWZpbmUgVkM0X1RFWF9QMV9NSU5GSUxUX0xJTl9N SVBfTkVBUiAgICAgICAgICAgNAorIyBkZWZpbmUgVkM0X1RFWF9QMV9NSU5GSUxUX0xJTl9NSVBf TElOICAgICAgICAgICAgNQorCisjZGVmaW5lIFZDNF9URVhfUDFfV1JBUF9UX01BU0sgICAgICAg ICAgICAgICAgICAgICBWQzRfTUFTSygzLCAyKQorI2RlZmluZSBWQzRfVEVYX1AxX1dSQVBfVF9T SElGVCAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBWQzRfVEVYX1AxX1dSQVBfU19NQVNL ICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMSwgMCkKKyNkZWZpbmUgVkM0X1RFWF9QMV9X UkFQX1NfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAKKyMgZGVmaW5lIFZDNF9URVhfUDFfV1JB UF9SRVBFQVQgICAgICAgICAgICAgICAgICAgIDAKKyMgZGVmaW5lIFZDNF9URVhfUDFfV1JBUF9D TEFNUCAgICAgICAgICAgICAgICAgICAgIDEKKyMgZGVmaW5lIFZDNF9URVhfUDFfV1JBUF9NSVJS T1IgICAgICAgICAgICAgICAgICAgIDIKKyMgZGVmaW5lIFZDNF9URVhfUDFfV1JBUF9CT1JERVIg ICAgICAgICAgICAgICAgICAgIDMKKworI2RlZmluZSBWQzRfVEVYX1AyX1BUWVBFX01BU0sgICAg ICAgICAgICAgICAgICAgICAgVkM0X01BU0soMzEsIDMwKQorI2RlZmluZSBWQzRfVEVYX1AyX1BU WVBFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMzAKKyMgZGVmaW5lIFZDNF9URVhfUDJfUFRZ UEVfSUdOT1JFRCAgICAgICAgICAgICAgICAgIDAKKyMgZGVmaW5lIFZDNF9URVhfUDJfUFRZUEVf Q1VCRV9NQVBfU1RSSURFICAgICAgICAgIDEKKyMgZGVmaW5lIFZDNF9URVhfUDJfUFRZUEVfQ0hJ TERfSU1BR0VfRElNRU5TSU9OUyAgIDIKKyMgZGVmaW5lIFZDNF9URVhfUDJfUFRZUEVfQ0hJTERf SU1BR0VfT0ZGU0VUUyAgICAgIDMKKworLyogVkM0X1RFWF9QMl9QVFlQRV9DVUJFX01BUF9TVFJJ REUgYml0cyAqLworI2RlZmluZSBWQzRfVEVYX1AyX0NNU1RfTUFTSyAgICAgICAgICAgICAgICAg ICAgICAgVkM0X01BU0soMjksIDEyKQorI2RlZmluZSBWQzRfVEVYX1AyX0NNU1RfU0hJRlQgICAg ICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgVkM0X1RFWF9QMl9CU0xPRF9NQVNLICAgICAg ICAgICAgICAgICAgICAgIFZDNF9NQVNLKDAsIDApCisjZGVmaW5lIFZDNF9URVhfUDJfQlNMT0Rf U0hJRlQgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIFZDNF9URVhfUDJfUFRZUEVfQ0hJTERf SU1BR0VfRElNRU5TSU9OUyAqLworI2RlZmluZSBWQzRfVEVYX1AyX0NIRUlHSFRfTUFTSyAgICAg ICAgICAgICAgICAgICAgVkM0X01BU0soMjIsIDEyKQorI2RlZmluZSBWQzRfVEVYX1AyX0NIRUlH SFRfU0hJRlQgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgVkM0X1RFWF9QMl9DV0lEVEhf TUFTSyAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDEwLCAwKQorI2RlZmluZSBWQzRfVEVY X1AyX0NXSURUSF9TSElGVCAgICAgICAgICAgICAgICAgICAgMAorCisvKiBWQzRfVEVYX1AyX1BU WVBFX0NISUxEX0lNQUdFX09GRlNFVFMgKi8KKyNkZWZpbmUgVkM0X1RFWF9QMl9DWU9GRl9NQVNL ICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDIyLCAxMikKKyNkZWZpbmUgVkM0X1RFWF9Q Ml9DWU9GRl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFZDNF9URVhfUDJf Q1hPRkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSygxMCwgMCkKKyNkZWZpbmUg VkM0X1RFWF9QMl9DWE9GRl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAKKworI2VuZGlmIC8q IFZDNF9QQUNLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcmVu ZGVyX2NsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZW5kZXJfY2wuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJhMzEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfcmVuZGVyX2NsLmMKQEAgLTAsMCArMSw2MzQgQEAKKy8qCisg KiBDb3B5cmlnaHQgwqkgMjAxNC0yMDE1IEJyb2FkY29tCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qKgorICogRE9DOiBSZW5kZXIgY29tbWFu ZCBsaXN0IGdlbmVyYXRpb24KKyAqCisgKiBJbiB0aGUgVkM0IGRyaXZlciwgcmVuZGVyIGNvbW1h bmQgbGlzdCBnZW5lcmF0aW9uIGlzIHBlcmZvcm1lZCBieSB0aGUKKyAqIGtlcm5lbCBpbnN0ZWFk IG9mIHVzZXJzcGFjZS4gIFdlIGRvIHRoaXMgYmVjYXVzZSB2YWxpZGF0aW5nIGEKKyAqIHVzZXIt c3VibWl0dGVkIGNvbW1hbmQgbGlzdCBpcyBoYXJkIHRvIGdldCByaWdodCBhbmQgaGFzIGhpZ2gg Q1BVIG92ZXJoZWFkLAorICogd2hpbGUgdGhlIG51bWJlciBvZiB2YWxpZCBjb25maWd1cmF0aW9u cyBmb3IgcmVuZGVyIGNvbW1hbmQgbGlzdHMgaXMKKyAqIGFjdHVhbGx5IGZhaXJseSBsb3cuCisg Ki8KKworI2luY2x1ZGUgInVhcGkvZHJtL3ZjNF9kcm0uaCIKKyNpbmNsdWRlICJ2YzRfZHJ2Lmgi CisjaW5jbHVkZSAidmM0X3BhY2tldC5oIgorCitzdHJ1Y3QgdmM0X3JjbF9zZXR1cCB7CisJc3Ry dWN0IGRybV9nZW1fY21hX29iamVjdCAqY29sb3JfcmVhZDsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFf b2JqZWN0ICpjb2xvcl93cml0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICp6c19yZWFk OworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKnpzX3dyaXRlOworCXN0cnVjdCBkcm1fZ2Vt X2NtYV9vYmplY3QgKm1zYWFfY29sb3Jfd3JpdGU7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVj dCAqbXNhYV96c193cml0ZTsKKworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKnJjbDsKKwl1 MzIgbmV4dF9vZmZzZXQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgcmNsX3U4KHN0cnVjdCB2 YzRfcmNsX3NldHVwICpzZXR1cCwgdTggdmFsKQoreworCSoodTggKikoc2V0dXAtPnJjbC0+dmFk ZHIgKyBzZXR1cC0+bmV4dF9vZmZzZXQpID0gdmFsOworCXNldHVwLT5uZXh0X29mZnNldCArPSAx OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmNsX3UxNihzdHJ1Y3QgdmM0X3JjbF9zZXR1cCAq c2V0dXAsIHUxNiB2YWwpCit7CisJKih1MTYgKikoc2V0dXAtPnJjbC0+dmFkZHIgKyBzZXR1cC0+ bmV4dF9vZmZzZXQpID0gdmFsOworCXNldHVwLT5uZXh0X29mZnNldCArPSAyOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgcmNsX3UzMihzdHJ1Y3QgdmM0X3JjbF9zZXR1cCAqc2V0dXAsIHUzMiB2 YWwpCit7CisJKih1MzIgKikoc2V0dXAtPnJjbC0+dmFkZHIgKyBzZXR1cC0+bmV4dF9vZmZzZXQp ID0gdmFsOworCXNldHVwLT5uZXh0X29mZnNldCArPSA0OworfQorCisvKgorICogRW1pdHMgYSBu by1vcCBTVE9SRV9USUxFX0JVRkZFUl9HRU5FUkFMLgorICoKKyAqIElmIHdlIGVtaXQgYSBQQUNL RVRfVElMRV9DT09SRElOQVRFUywgaXQgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHN0b3JlIG9mCisg KiBzb21lIHNvcnQgYmVmb3JlIGFub3RoZXIgbG9hZCBpcyB0cmlnZ2VyZWQuCisgKi8KK3N0YXRp YyB2b2lkIHZjNF9zdG9yZV9iZWZvcmVfbG9hZChzdHJ1Y3QgdmM0X3JjbF9zZXR1cCAqc2V0dXAp Cit7CisJcmNsX3U4KHNldHVwLCBWQzRfUEFDS0VUX1NUT1JFX1RJTEVfQlVGRkVSX0dFTkVSQUwp OworCXJjbF91MTYoc2V0dXAsCisJCVZDNF9TRVRfRklFTEQoVkM0X0xPQURTVE9SRV9USUxFX0JV RkZFUl9OT05FLAorCQkJICAgICAgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9CVUZGRVIpIHwK KwkJVkM0X1NUT1JFX1RJTEVfQlVGRkVSX0RJU0FCTEVfQ09MT1JfQ0xFQVIgfAorCQlWQzRfU1RP UkVfVElMRV9CVUZGRVJfRElTQUJMRV9aU19DTEVBUiB8CisJCVZDNF9TVE9SRV9USUxFX0JVRkZF Ul9ESVNBQkxFX1ZHX01BU0tfQ0xFQVIpOworCXJjbF91MzIoc2V0dXAsIDApOyAvKiBubyBhZGRy ZXNzLCBzaW5jZSB3ZSdyZSBpbiBOb25lIG1vZGUgKi8KK30KKworLyoKKyAqIENhbGN1bGF0ZXMg dGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIGEgdGlsZSBpbiBhIFJDTCBzdXJm YWNlLgorICoKKyAqIFVubGlrZSB0aGUgb3RoZXIgbG9hZC9zdG9yZSBwYWNrZXRzLAorICogVkM0 X1BBQ0tFVF9MT0FEL1NUT1JFX0ZVTExfUkVTX1RJTEVfQlVGRkVSIGRvbid0IGxvb2sgYXQgdGhl IHRpbGUKKyAqIGNvb3JkaW5hdGVzIHBhY2tldCwgYW5kIGluc3RlYWQganVzdCBzdG9yZSB0byB0 aGUgYWRkcmVzcyBnaXZlbi4KKyAqLworc3RhdGljIHVpbnQzMl90IHZjNF9mdWxsX3Jlc19vZmZz ZXQoc3RydWN0IHZjNF9leGVjX2luZm8gKmV4ZWMsCisJCQkJICAgIHN0cnVjdCBkcm1fZ2VtX2Nt YV9vYmplY3QgKmJvLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3ZjNF9zdWJtaXRfcmNsX3N1cmZhY2Ug KnN1cmYsCisJCQkJICAgIHVpbnQ4X3QgeCwgdWludDhfdCB5KQoreworCXJldHVybiBiby0+cGFk ZHIgKyBzdXJmLT5vZmZzZXQgKyBWQzRfVElMRV9CVUZGRVJfU0laRSAqCisJCShESVZfUk9VTkRf VVAoZXhlYy0+YXJncy0+d2lkdGgsIDMyKSAqIHkgKyB4KTsKK30KKworLyoKKyAqIEVtaXRzIGEg UEFDS0VUX1RJTEVfQ09PUkRJTkFURVMgaWYgb25lIGlzbid0IGFscmVhZHkgcGVuZGluZy4KKyAq CisgKiBUaGUgdGlsZSBjb29yZGluYXRlcyBwYWNrZXQgdHJpZ2dlcnMgYSBwZW5kaW5nIGxvYWQg aWYgdGhlcmUgaXMgb25lLCBhcmUKKyAqIHVzZWQgZm9yIGNsaXBwaW5nIGR1cmluZyByZW5kZXJp bmcsIGFuZCBkZXRlcm1pbmUgd2hlcmUgbG9hZHMvc3RvcmVzIGhhcHBlbgorICogcmVsYXRpdmUg dG8gdGhlaXIgYmFzZSBhZGRyZXNzLgorICovCitzdGF0aWMgdm9pZCB2YzRfdGlsZV9jb29yZGlu YXRlcyhzdHJ1Y3QgdmM0X3JjbF9zZXR1cCAqc2V0dXAsCisJCQkJIHVpbnQzMl90IHgsIHVpbnQz Ml90IHkpCit7CisJcmNsX3U4KHNldHVwLCBWQzRfUEFDS0VUX1RJTEVfQ09PUkRJTkFURVMpOwor CXJjbF91OChzZXR1cCwgeCk7CisJcmNsX3U4KHNldHVwLCB5KTsKK30KKworc3RhdGljIHZvaWQg ZW1pdF90aWxlKHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjLAorCQkgICAgICBzdHJ1Y3QgdmM0 X3JjbF9zZXR1cCAqc2V0dXAsCisJCSAgICAgIHVpbnQ4X3QgeCwgdWludDhfdCB5LCBib29sIGZp cnN0LCBib29sIGxhc3QpCit7CisJc3RydWN0IGRybV92YzRfc3VibWl0X2NsICphcmdzID0gZXhl Yy0+YXJnczsKKwlib29sIGhhc19iaW4gPSBhcmdzLT5iaW5fY2xfc2l6ZSAhPSAwOworCisJLyog Tm90ZSB0aGF0IHRoZSBsb2FkIGRvZXNuJ3QgYWN0dWFsbHkgb2NjdXIgdW50aWwgdGhlCisJICog dGlsZSBjb29yZHMgcGFja2V0IGlzIHByb2Nlc3NlZCwgYW5kIG9ubHkgb25lIGxvYWQKKwkgKiBt YXkgYmUgb3V0c3RhbmRpbmcgYXQgYSB0aW1lLgorCSAqLworCWlmIChzZXR1cC0+Y29sb3JfcmVh ZCkgeworCQlpZiAoYXJncy0+Y29sb3JfcmVhZC5mbGFncyAmCisJCSAgICBWQzRfU1VCTUlUX1JD TF9TVVJGQUNFX1JFQURfSVNfRlVMTF9SRVMpIHsKKwkJCXJjbF91OChzZXR1cCwgVkM0X1BBQ0tF VF9MT0FEX0ZVTExfUkVTX1RJTEVfQlVGRkVSKTsKKwkJCXJjbF91MzIoc2V0dXAsCisJCQkJdmM0 X2Z1bGxfcmVzX29mZnNldChleGVjLCBzZXR1cC0+Y29sb3JfcmVhZCwKKwkJCQkJCSAgICAmYXJn cy0+Y29sb3JfcmVhZCwgeCwgeSkgfAorCQkJCVZDNF9MT0FEU1RPUkVfRlVMTF9SRVNfRElTQUJM RV9aUyk7CisJCX0gZWxzZSB7CisJCQlyY2xfdTgoc2V0dXAsIFZDNF9QQUNLRVRfTE9BRF9USUxF X0JVRkZFUl9HRU5FUkFMKTsKKwkJCXJjbF91MTYoc2V0dXAsIGFyZ3MtPmNvbG9yX3JlYWQuYml0 cyk7CisJCQlyY2xfdTMyKHNldHVwLCBzZXR1cC0+Y29sb3JfcmVhZC0+cGFkZHIgKworCQkJCWFy Z3MtPmNvbG9yX3JlYWQub2Zmc2V0KTsKKwkJfQorCX0KKworCWlmIChzZXR1cC0+enNfcmVhZCkg eworCQlpZiAoYXJncy0+enNfcmVhZC5mbGFncyAmCisJCSAgICBWQzRfU1VCTUlUX1JDTF9TVVJG QUNFX1JFQURfSVNfRlVMTF9SRVMpIHsKKwkJCXJjbF91OChzZXR1cCwgVkM0X1BBQ0tFVF9MT0FE X0ZVTExfUkVTX1RJTEVfQlVGRkVSKTsKKwkJCXJjbF91MzIoc2V0dXAsCisJCQkJdmM0X2Z1bGxf cmVzX29mZnNldChleGVjLCBzZXR1cC0+enNfcmVhZCwKKwkJCQkJCSAgICAmYXJncy0+enNfcmVh ZCwgeCwgeSkgfAorCQkJCVZDNF9MT0FEU1RPUkVfRlVMTF9SRVNfRElTQUJMRV9DT0xPUik7CisJ CX0gZWxzZSB7CisJCQlpZiAoc2V0dXAtPmNvbG9yX3JlYWQpIHsKKwkJCQkvKiBFeGVjIHByZXZp b3VzIGxvYWQuICovCisJCQkJdmM0X3RpbGVfY29vcmRpbmF0ZXMoc2V0dXAsIHgsIHkpOworCQkJ CXZjNF9zdG9yZV9iZWZvcmVfbG9hZChzZXR1cCk7CisJCQl9CisKKwkJCXJjbF91OChzZXR1cCwg VkM0X1BBQ0tFVF9MT0FEX1RJTEVfQlVGRkVSX0dFTkVSQUwpOworCQkJcmNsX3UxNihzZXR1cCwg YXJncy0+enNfcmVhZC5iaXRzKTsKKwkJCXJjbF91MzIoc2V0dXAsIHNldHVwLT56c19yZWFkLT5w YWRkciArCisJCQkJYXJncy0+enNfcmVhZC5vZmZzZXQpOworCQl9CisJfQorCisJLyogQ2xpcHBp bmcgZGVwZW5kcyBvbiB0aWxlIGNvb3JkaW5hdGVzIGhhdmluZyBiZWVuCisJICogZW1pdHRlZCwg c28gd2UgYWx3YXlzIG5lZWQgb25lIGhlcmUuCisJICovCisJdmM0X3RpbGVfY29vcmRpbmF0ZXMo c2V0dXAsIHgsIHkpOworCisJLyogV2FpdCBmb3IgdGhlIGJpbm5lciBiZWZvcmUganVtcGluZyB0 byB0aGUgZmlyc3QKKwkgKiB0aWxlJ3MgbGlzdHMuCisJICovCisJaWYgKGZpcnN0ICYmIGhhc19i aW4pCisJCXJjbF91OChzZXR1cCwgVkM0X1BBQ0tFVF9XQUlUX09OX1NFTUFQSE9SRSk7CisKKwlp ZiAoaGFzX2JpbikgeworCQlyY2xfdTgoc2V0dXAsIFZDNF9QQUNLRVRfQlJBTkNIX1RPX1NVQl9M SVNUKTsKKwkJcmNsX3UzMihzZXR1cCwgKGV4ZWMtPnRpbGVfYm8tPnBhZGRyICsKKwkJCQlleGVj LT50aWxlX2FsbG9jX29mZnNldCArCisJCQkJKHkgKiBleGVjLT5iaW5fdGlsZXNfeCArIHgpICog MzIpKTsKKwl9CisKKwlpZiAoc2V0dXAtPm1zYWFfY29sb3Jfd3JpdGUpIHsKKwkJYm9vbCBsYXN0 X3RpbGVfd3JpdGUgPSAoIXNldHVwLT5tc2FhX3pzX3dyaXRlICYmCisJCQkJCSFzZXR1cC0+enNf d3JpdGUgJiYKKwkJCQkJIXNldHVwLT5jb2xvcl93cml0ZSk7CisJCXVpbnQzMl90IGJpdHMgPSBW QzRfTE9BRFNUT1JFX0ZVTExfUkVTX0RJU0FCTEVfWlM7CisKKwkJaWYgKCFsYXN0X3RpbGVfd3Jp dGUpCisJCQliaXRzIHw9IFZDNF9MT0FEU1RPUkVfRlVMTF9SRVNfRElTQUJMRV9DTEVBUl9BTEw7 CisJCWVsc2UgaWYgKGxhc3QpCisJCQliaXRzIHw9IFZDNF9MT0FEU1RPUkVfRlVMTF9SRVNfRU9G OworCQlyY2xfdTgoc2V0dXAsIFZDNF9QQUNLRVRfU1RPUkVfRlVMTF9SRVNfVElMRV9CVUZGRVIp OworCQlyY2xfdTMyKHNldHVwLAorCQkJdmM0X2Z1bGxfcmVzX29mZnNldChleGVjLCBzZXR1cC0+ bXNhYV9jb2xvcl93cml0ZSwKKwkJCQkJICAgICZhcmdzLT5tc2FhX2NvbG9yX3dyaXRlLCB4LCB5 KSB8CisJCQliaXRzKTsKKwl9CisKKwlpZiAoc2V0dXAtPm1zYWFfenNfd3JpdGUpIHsKKwkJYm9v bCBsYXN0X3RpbGVfd3JpdGUgPSAoIXNldHVwLT56c193cml0ZSAmJgorCQkJCQkhc2V0dXAtPmNv bG9yX3dyaXRlKTsKKwkJdWludDMyX3QgYml0cyA9IFZDNF9MT0FEU1RPUkVfRlVMTF9SRVNfRElT QUJMRV9DT0xPUjsKKworCQlpZiAoc2V0dXAtPm1zYWFfY29sb3Jfd3JpdGUpCisJCQl2YzRfdGls ZV9jb29yZGluYXRlcyhzZXR1cCwgeCwgeSk7CisJCWlmICghbGFzdF90aWxlX3dyaXRlKQorCQkJ Yml0cyB8PSBWQzRfTE9BRFNUT1JFX0ZVTExfUkVTX0RJU0FCTEVfQ0xFQVJfQUxMOworCQllbHNl IGlmIChsYXN0KQorCQkJYml0cyB8PSBWQzRfTE9BRFNUT1JFX0ZVTExfUkVTX0VPRjsKKwkJcmNs X3U4KHNldHVwLCBWQzRfUEFDS0VUX1NUT1JFX0ZVTExfUkVTX1RJTEVfQlVGRkVSKTsKKwkJcmNs X3UzMihzZXR1cCwKKwkJCXZjNF9mdWxsX3Jlc19vZmZzZXQoZXhlYywgc2V0dXAtPm1zYWFfenNf d3JpdGUsCisJCQkJCSAgICAmYXJncy0+bXNhYV96c193cml0ZSwgeCwgeSkgfAorCQkJYml0cyk7 CisJfQorCisJaWYgKHNldHVwLT56c193cml0ZSkgeworCQlib29sIGxhc3RfdGlsZV93cml0ZSA9 ICFzZXR1cC0+Y29sb3Jfd3JpdGU7CisKKwkJaWYgKHNldHVwLT5tc2FhX2NvbG9yX3dyaXRlIHx8 IHNldHVwLT5tc2FhX3pzX3dyaXRlKQorCQkJdmM0X3RpbGVfY29vcmRpbmF0ZXMoc2V0dXAsIHgs IHkpOworCisJCXJjbF91OChzZXR1cCwgVkM0X1BBQ0tFVF9TVE9SRV9USUxFX0JVRkZFUl9HRU5F UkFMKTsKKwkJcmNsX3UxNihzZXR1cCwgYXJncy0+enNfd3JpdGUuYml0cyB8CisJCQkobGFzdF90 aWxlX3dyaXRlID8KKwkJCSAwIDogVkM0X1NUT1JFX1RJTEVfQlVGRkVSX0RJU0FCTEVfQ09MT1Jf Q0xFQVIpKTsKKwkJcmNsX3UzMihzZXR1cCwKKwkJCShzZXR1cC0+enNfd3JpdGUtPnBhZGRyICsg YXJncy0+enNfd3JpdGUub2Zmc2V0KSB8CisJCQkoKGxhc3QgJiYgbGFzdF90aWxlX3dyaXRlKSA/ CisJCQkgVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9FT0YgOiAwKSk7CisJfQorCisJaWYgKHNl dHVwLT5jb2xvcl93cml0ZSkgeworCQlpZiAoc2V0dXAtPm1zYWFfY29sb3Jfd3JpdGUgfHwgc2V0 dXAtPm1zYWFfenNfd3JpdGUgfHwKKwkJICAgIHNldHVwLT56c193cml0ZSkgeworCQkJdmM0X3Rp bGVfY29vcmRpbmF0ZXMoc2V0dXAsIHgsIHkpOworCQl9CisKKwkJaWYgKGxhc3QpCisJCQlyY2xf dTgoc2V0dXAsIFZDNF9QQUNLRVRfU1RPUkVfTVNfVElMRV9CVUZGRVJfQU5EX0VPRik7CisJCWVs c2UKKwkJCXJjbF91OChzZXR1cCwgVkM0X1BBQ0tFVF9TVE9SRV9NU19USUxFX0JVRkZFUik7CisJ fQorfQorCitzdGF0aWMgaW50IHZjNF9jcmVhdGVfcmNsX2JvKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjLAorCQkJICAgICBzdHJ1Y3QgdmM0X3JjbF9z ZXR1cCAqc2V0dXApCit7CisJc3RydWN0IGRybV92YzRfc3VibWl0X2NsICphcmdzID0gZXhlYy0+ YXJnczsKKwlib29sIGhhc19iaW4gPSBhcmdzLT5iaW5fY2xfc2l6ZSAhPSAwOworCXVpbnQ4X3Qg bWluX3hfdGlsZSA9IGFyZ3MtPm1pbl94X3RpbGU7CisJdWludDhfdCBtaW5feV90aWxlID0gYXJn cy0+bWluX3lfdGlsZTsKKwl1aW50OF90IG1heF94X3RpbGUgPSBhcmdzLT5tYXhfeF90aWxlOwor CXVpbnQ4X3QgbWF4X3lfdGlsZSA9IGFyZ3MtPm1heF95X3RpbGU7CisJdWludDhfdCB4dGlsZXMg PSBtYXhfeF90aWxlIC0gbWluX3hfdGlsZSArIDE7CisJdWludDhfdCB5dGlsZXMgPSBtYXhfeV90 aWxlIC0gbWluX3lfdGlsZSArIDE7CisJdWludDhfdCB4LCB5OworCXVpbnQzMl90IHNpemUsIGxv b3BfYm9keV9zaXplOworCisJc2l6ZSA9IFZDNF9QQUNLRVRfVElMRV9SRU5ERVJJTkdfTU9ERV9D T05GSUdfU0laRTsKKwlsb29wX2JvZHlfc2l6ZSA9IFZDNF9QQUNLRVRfVElMRV9DT09SRElOQVRF U19TSVpFOworCisJaWYgKGFyZ3MtPmZsYWdzICYgVkM0X1NVQk1JVF9DTF9VU0VfQ0xFQVJfQ09M T1IpIHsKKwkJc2l6ZSArPSBWQzRfUEFDS0VUX0NMRUFSX0NPTE9SU19TSVpFICsKKwkJCVZDNF9Q QUNLRVRfVElMRV9DT09SRElOQVRFU19TSVpFICsKKwkJCVZDNF9QQUNLRVRfU1RPUkVfVElMRV9C VUZGRVJfR0VORVJBTF9TSVpFOworCX0KKworCWlmIChzZXR1cC0+Y29sb3JfcmVhZCkgeworCQlp ZiAoYXJncy0+Y29sb3JfcmVhZC5mbGFncyAmCisJCSAgICBWQzRfU1VCTUlUX1JDTF9TVVJGQUNF X1JFQURfSVNfRlVMTF9SRVMpIHsKKwkJCWxvb3BfYm9keV9zaXplICs9IFZDNF9QQUNLRVRfTE9B RF9GVUxMX1JFU19USUxFX0JVRkZFUl9TSVpFOworCQl9IGVsc2UgeworCQkJbG9vcF9ib2R5X3Np emUgKz0gVkM0X1BBQ0tFVF9MT0FEX1RJTEVfQlVGRkVSX0dFTkVSQUxfU0laRTsKKwkJfQorCX0K KwlpZiAoc2V0dXAtPnpzX3JlYWQpIHsKKwkJaWYgKGFyZ3MtPnpzX3JlYWQuZmxhZ3MgJgorCQkg ICAgVkM0X1NVQk1JVF9SQ0xfU1VSRkFDRV9SRUFEX0lTX0ZVTExfUkVTKSB7CisJCQlsb29wX2Jv ZHlfc2l6ZSArPSBWQzRfUEFDS0VUX0xPQURfRlVMTF9SRVNfVElMRV9CVUZGRVJfU0laRTsKKwkJ fSBlbHNlIHsKKwkJCWlmIChzZXR1cC0+Y29sb3JfcmVhZCAmJgorCQkJICAgICEoYXJncy0+Y29s b3JfcmVhZC5mbGFncyAmCisJCQkgICAgICBWQzRfU1VCTUlUX1JDTF9TVVJGQUNFX1JFQURfSVNf RlVMTF9SRVMpKSB7CisJCQkJbG9vcF9ib2R5X3NpemUgKz0gVkM0X1BBQ0tFVF9USUxFX0NPT1JE SU5BVEVTX1NJWkU7CisJCQkJbG9vcF9ib2R5X3NpemUgKz0gVkM0X1BBQ0tFVF9TVE9SRV9USUxF X0JVRkZFUl9HRU5FUkFMX1NJWkU7CisJCQl9CisJCQlsb29wX2JvZHlfc2l6ZSArPSBWQzRfUEFD S0VUX0xPQURfVElMRV9CVUZGRVJfR0VORVJBTF9TSVpFOworCQl9CisJfQorCisJaWYgKGhhc19i aW4pIHsKKwkJc2l6ZSArPSBWQzRfUEFDS0VUX1dBSVRfT05fU0VNQVBIT1JFX1NJWkU7CisJCWxv b3BfYm9keV9zaXplICs9IFZDNF9QQUNLRVRfQlJBTkNIX1RPX1NVQl9MSVNUX1NJWkU7CisJfQor CisJaWYgKHNldHVwLT5tc2FhX2NvbG9yX3dyaXRlKQorCQlsb29wX2JvZHlfc2l6ZSArPSBWQzRf UEFDS0VUX1NUT1JFX0ZVTExfUkVTX1RJTEVfQlVGRkVSX1NJWkU7CisJaWYgKHNldHVwLT5tc2Fh X3pzX3dyaXRlKQorCQlsb29wX2JvZHlfc2l6ZSArPSBWQzRfUEFDS0VUX1NUT1JFX0ZVTExfUkVT X1RJTEVfQlVGRkVSX1NJWkU7CisKKwlpZiAoc2V0dXAtPnpzX3dyaXRlKQorCQlsb29wX2JvZHlf c2l6ZSArPSBWQzRfUEFDS0VUX1NUT1JFX1RJTEVfQlVGRkVSX0dFTkVSQUxfU0laRTsKKwlpZiAo c2V0dXAtPmNvbG9yX3dyaXRlKQorCQlsb29wX2JvZHlfc2l6ZSArPSBWQzRfUEFDS0VUX1NUT1JF X01TX1RJTEVfQlVGRkVSX1NJWkU7CisKKwkvKiBXZSBuZWVkIGEgVkM0X1BBQ0tFVF9USUxFX0NP T1JESU5BVEVTIGluIGJldHdlZW4gZWFjaCBzdG9yZS4gKi8KKwlsb29wX2JvZHlfc2l6ZSArPSBW QzRfUEFDS0VUX1RJTEVfQ09PUkRJTkFURVNfU0laRSAqCisJCSgoc2V0dXAtPm1zYWFfY29sb3Jf d3JpdGUgIT0gTlVMTCkgKworCQkgKHNldHVwLT5tc2FhX3pzX3dyaXRlICE9IE5VTEwpICsKKwkJ IChzZXR1cC0+Y29sb3Jfd3JpdGUgIT0gTlVMTCkgKworCQkgKHNldHVwLT56c193cml0ZSAhPSBO VUxMKSAtIDEpOworCisJc2l6ZSArPSB4dGlsZXMgKiB5dGlsZXMgKiBsb29wX2JvZHlfc2l6ZTsK KworCXNldHVwLT5yY2wgPSAmdmM0X2JvX2NyZWF0ZShkZXYsIHNpemUsIHRydWUpLT5iYXNlOwor CWlmICghc2V0dXAtPnJjbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbGlzdF9hZGRfdGFpbCgmdG9f dmM0X2JvKCZzZXR1cC0+cmNsLT5iYXNlKS0+dW5yZWZfaGVhZCwKKwkJICAgICAgJmV4ZWMtPnVu cmVmX2xpc3QpOworCisJcmNsX3U4KHNldHVwLCBWQzRfUEFDS0VUX1RJTEVfUkVOREVSSU5HX01P REVfQ09ORklHKTsKKwlyY2xfdTMyKHNldHVwLAorCQkoc2V0dXAtPmNvbG9yX3dyaXRlID8gKHNl dHVwLT5jb2xvcl93cml0ZS0+cGFkZHIgKworCQkJCSAgICAgICBhcmdzLT5jb2xvcl93cml0ZS5v ZmZzZXQpIDoKKwkJIDApKTsKKwlyY2xfdTE2KHNldHVwLCBhcmdzLT53aWR0aCk7CisJcmNsX3Ux NihzZXR1cCwgYXJncy0+aGVpZ2h0KTsKKwlyY2xfdTE2KHNldHVwLCBhcmdzLT5jb2xvcl93cml0 ZS5iaXRzKTsKKworCS8qIFRoZSB0aWxlIGJ1ZmZlciBnZXRzIGNsZWFyZWQgd2hlbiB0aGUgcHJl dmlvdXMgdGlsZSBpcyBzdG9yZWQuICBJZgorCSAqIHRoZSBjbGVhciB2YWx1ZXMgY2hhbmdlZCBi ZXR3ZWVuIGZyYW1lcywgdGhlbiB0aGUgdGlsZSBidWZmZXIgaGFzCisJICogc3RhbGUgY2xlYXIg dmFsdWVzIGluIGl0LCBzbyB3ZSBoYXZlIHRvIGRvIGEgc3RvcmUgaW4gTm9uZSBtb2RlIChubwor CSAqIHdyaXRlcykgc28gdGhhdCB3ZSB0cmlnZ2VyIHRoZSB0aWxlIGJ1ZmZlciBjbGVhci4KKwkg Ki8KKwlpZiAoYXJncy0+ZmxhZ3MgJiBWQzRfU1VCTUlUX0NMX1VTRV9DTEVBUl9DT0xPUikgewor CQlyY2xfdTgoc2V0dXAsIFZDNF9QQUNLRVRfQ0xFQVJfQ09MT1JTKTsKKwkJcmNsX3UzMihzZXR1 cCwgYXJncy0+Y2xlYXJfY29sb3JbMF0pOworCQlyY2xfdTMyKHNldHVwLCBhcmdzLT5jbGVhcl9j b2xvclsxXSk7CisJCXJjbF91MzIoc2V0dXAsIGFyZ3MtPmNsZWFyX3opOworCQlyY2xfdTgoc2V0 dXAsIGFyZ3MtPmNsZWFyX3MpOworCisJCXZjNF90aWxlX2Nvb3JkaW5hdGVzKHNldHVwLCAwLCAw KTsKKworCQlyY2xfdTgoc2V0dXAsIFZDNF9QQUNLRVRfU1RPUkVfVElMRV9CVUZGRVJfR0VORVJB TCk7CisJCXJjbF91MTYoc2V0dXAsIFZDNF9MT0FEU1RPUkVfVElMRV9CVUZGRVJfTk9ORSk7CisJ CXJjbF91MzIoc2V0dXAsIDApOyAvKiBubyBhZGRyZXNzLCBzaW5jZSB3ZSdyZSBpbiBOb25lIG1v ZGUgKi8KKwl9CisKKwlmb3IgKHkgPSBtaW5feV90aWxlOyB5IDw9IG1heF95X3RpbGU7IHkrKykg eworCQlmb3IgKHggPSBtaW5feF90aWxlOyB4IDw9IG1heF94X3RpbGU7IHgrKykgeworCQkJYm9v bCBmaXJzdCA9ICh4ID09IG1pbl94X3RpbGUgJiYgeSA9PSBtaW5feV90aWxlKTsKKwkJCWJvb2wg bGFzdCA9ICh4ID09IG1heF94X3RpbGUgJiYgeSA9PSBtYXhfeV90aWxlKTsKKworCQkJZW1pdF90 aWxlKGV4ZWMsIHNldHVwLCB4LCB5LCBmaXJzdCwgbGFzdCk7CisJCX0KKwl9CisKKwlCVUdfT04o c2V0dXAtPm5leHRfb2Zmc2V0ICE9IHNpemUpOworCWV4ZWMtPmN0MWNhID0gc2V0dXAtPnJjbC0+ cGFkZHI7CisJZXhlYy0+Y3QxZWEgPSBzZXR1cC0+cmNsLT5wYWRkciArIHNldHVwLT5uZXh0X29m ZnNldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZjNF9mdWxsX3Jlc19ib3VuZHNf Y2hlY2soc3RydWN0IHZjNF9leGVjX2luZm8gKmV4ZWMsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2dl bV9jbWFfb2JqZWN0ICpvYmosCisJCQkJICAgICBzdHJ1Y3QgZHJtX3ZjNF9zdWJtaXRfcmNsX3N1 cmZhY2UgKnN1cmYpCit7CisJc3RydWN0IGRybV92YzRfc3VibWl0X2NsICphcmdzID0gZXhlYy0+ YXJnczsKKwl1MzIgcmVuZGVyX3RpbGVzX3N0cmlkZSA9IERJVl9ST1VORF9VUChleGVjLT5hcmdz LT53aWR0aCwgMzIpOworCisJaWYgKHN1cmYtPm9mZnNldCA+IG9iai0+YmFzZS5zaXplKSB7CisJ CURSTV9FUlJPUigic3VyZmFjZSBvZmZzZXQgJWQgPiBCTyBzaXplICV6ZFxuIiwKKwkJCSAgc3Vy Zi0+b2Zmc2V0LCBvYmotPmJhc2Uuc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlm ICgob2JqLT5iYXNlLnNpemUgLSBzdXJmLT5vZmZzZXQpIC8gVkM0X1RJTEVfQlVGRkVSX1NJWkUg PAorCSAgICByZW5kZXJfdGlsZXNfc3RyaWRlICogYXJncy0+bWF4X3lfdGlsZSArIGFyZ3MtPm1h eF94X3RpbGUpIHsKKwkJRFJNX0VSUk9SKCJNU0FBIHRpbGUgJWQsICVkIG91dCBvZiBib3VuZHMg IgorCQkJICAiKGJvIHNpemUgJXpkLCBvZmZzZXQgJWQpLlxuIiwKKwkJCSAgYXJncy0+bWF4X3hf dGlsZSwgYXJncy0+bWF4X3lfdGlsZSwKKwkJCSAgb2JqLT5iYXNlLnNpemUsCisJCQkgIHN1cmYt Pm9mZnNldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHZjNF9yY2xfbXNhYV9zdXJmYWNlX3NldHVwKHN0cnVjdCB2YzRfZXhlY19pbmZvICpl eGVjLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKipvYmosCisJCQkJICAg ICAgc3RydWN0IGRybV92YzRfc3VibWl0X3JjbF9zdXJmYWNlICpzdXJmKQoreworCWlmIChzdXJm LT5mbGFncyAhPSAwIHx8IHN1cmYtPmJpdHMgIT0gMCkgeworCQlEUk1fRVJST1IoIk1TQUEgc3Vy ZmFjZSBoYWQgbm9uemVybyBmbGFncy9iaXRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJaWYgKHN1cmYtPmhpbmRleCA9PSB+MCkKKwkJcmV0dXJuIDA7CisKKwkqb2JqID0gdmM0X3Vz ZV9ibyhleGVjLCBzdXJmLT5oaW5kZXgpOworCWlmICghKm9iaikKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlpZiAoc3VyZi0+b2Zmc2V0ICYgMHhmKSB7CisJCURSTV9FUlJPUigiTVNBQSB3cml0ZSBt dXN0IGJlIDE2YiBhbGlnbmVkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVy biB2YzRfZnVsbF9yZXNfYm91bmRzX2NoZWNrKGV4ZWMsICpvYmosIHN1cmYpOworfQorCitzdGF0 aWMgaW50IHZjNF9yY2xfc3VyZmFjZV9zZXR1cChzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYywK KwkJCQkgc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqKm9iaiwKKwkJCQkgc3RydWN0IGRybV92 YzRfc3VibWl0X3JjbF9zdXJmYWNlICpzdXJmKQoreworCXVpbnQ4X3QgdGlsaW5nID0gVkM0X0dF VF9GSUVMRChzdXJmLT5iaXRzLAorCQkJCSAgICAgICBWQzRfTE9BRFNUT1JFX1RJTEVfQlVGRkVS X1RJTElORyk7CisJdWludDhfdCBidWZmZXIgPSBWQzRfR0VUX0ZJRUxEKHN1cmYtPmJpdHMsCisJ CQkJICAgICAgIFZDNF9MT0FEU1RPUkVfVElMRV9CVUZGRVJfQlVGRkVSKTsKKwl1aW50OF90IGZv cm1hdCA9IFZDNF9HRVRfRklFTEQoc3VyZi0+Yml0cywKKwkJCQkgICAgICAgVkM0X0xPQURTVE9S RV9USUxFX0JVRkZFUl9GT1JNQVQpOworCWludCBjcHA7CisJaW50IHJldDsKKworCWlmIChzdXJm LT5mbGFncyAmIH5WQzRfU1VCTUlUX1JDTF9TVVJGQUNFX1JFQURfSVNfRlVMTF9SRVMpIHsKKwkJ RFJNX0VSUk9SKCJFeHRyYSBmbGFncyBzZXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlpZiAoc3VyZi0+aGluZGV4ID09IH4wKQorCQlyZXR1cm4gMDsKKworCSpvYmogPSB2YzRfdXNl X2JvKGV4ZWMsIHN1cmYtPmhpbmRleCk7CisJaWYgKCEqb2JqKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCWlmIChzdXJmLT5mbGFncyAmIFZDNF9TVUJNSVRfUkNMX1NVUkZBQ0VfUkVBRF9JU19GVUxM X1JFUykgeworCQlpZiAoc3VyZiA9PSAmZXhlYy0+YXJncy0+enNfd3JpdGUpIHsKKwkJCURSTV9F UlJPUigiZ2VuZXJhbCB6cyB3cml0ZSBtYXkgbm90IGJlIGEgZnVsbC1yZXMuXG4iKTsKKwkJCXJl dHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHN1cmYtPmJpdHMgIT0gMCkgeworCQkJRFJNX0VS Uk9SKCJsb2FkL3N0b3JlIGdlbmVyYWwgYml0cyBzZXQgd2l0aCAiCisJCQkJICAiZnVsbCByZXMg bG9hZC9zdG9yZS5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlyZXQgPSB2YzRf ZnVsbF9yZXNfYm91bmRzX2NoZWNrKGV4ZWMsICpvYmosIHN1cmYpOworCQlpZiAoIXJldCkKKwkJ CXJldHVybiByZXQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN1cmYtPmJpdHMgJiB+KFZD NF9MT0FEU1RPUkVfVElMRV9CVUZGRVJfVElMSU5HX01BU0sgfAorCQkJICAgVkM0X0xPQURTVE9S RV9USUxFX0JVRkZFUl9CVUZGRVJfTUFTSyB8CisJCQkgICBWQzRfTE9BRFNUT1JFX1RJTEVfQlVG RkVSX0ZPUk1BVF9NQVNLKSkgeworCQlEUk1fRVJST1IoIlVua25vd24gYml0cyBpbiBsb2FkL3N0 b3JlOiAweCUwNHhcbiIsCisJCQkgIHN1cmYtPmJpdHMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlpZiAodGlsaW5nID4gVkM0X1RJTElOR19GT1JNQVRfTFQpIHsKKwkJRFJNX0VSUk9SKCJC YWQgdGlsaW5nIGZvcm1hdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChidWZm ZXIgPT0gVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9aUykgeworCQlpZiAoZm9ybWF0ICE9IDAp IHsKKwkJCURSTV9FUlJPUigiTm8gY29sb3IgZm9ybWF0IHNob3VsZCBiZSBzZXQgZm9yIFpTXG4i KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWNwcCA9IDQ7CisJfSBlbHNlIGlmIChidWZm ZXIgPT0gVkM0X0xPQURTVE9SRV9USUxFX0JVRkZFUl9DT0xPUikgeworCQlzd2l0Y2ggKGZvcm1h dCkgeworCQljYXNlIFZDNF9MT0FEU1RPUkVfVElMRV9CVUZGRVJfQkdSNTY1OgorCQljYXNlIFZD NF9MT0FEU1RPUkVfVElMRV9CVUZGRVJfQkdSNTY1X0RJVEhFUjoKKwkJCWNwcCA9IDI7CisJCQli cmVhazsKKwkJY2FzZSBWQzRfTE9BRFNUT1JFX1RJTEVfQlVGRkVSX1JHQkE4ODg4OgorCQkJY3Bw ID0gNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJCYWQgdGlsZSBidWZm ZXIgZm9ybWF0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJRFJN X0VSUk9SKCJCYWQgbG9hZC9zdG9yZSBidWZmZXIgJWQuXG4iLCBidWZmZXIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlpZiAoc3VyZi0+b2Zmc2V0ICYgMHhmKSB7CisJCURSTV9FUlJPUigi bG9hZC9zdG9yZSBidWZmZXIgbXVzdCBiZSAxNmIgYWxpZ25lZC5cbiIpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlpZiAoIXZjNF9jaGVja190ZXhfc2l6ZShleGVjLCAqb2JqLCBzdXJmLT5v ZmZzZXQsIHRpbGluZywKKwkJCQlleGVjLT5hcmdzLT53aWR0aCwgZXhlYy0+YXJncy0+aGVpZ2h0 LCBjcHApKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50Cit2YzRfcmNsX3JlbmRlcl9jb25maWdfc3VyZmFjZV9zZXR1cChzdHJ1Y3QgdmM0X2V4 ZWNfaW5mbyAqZXhlYywKKwkJCQkgICAgc3RydWN0IHZjNF9yY2xfc2V0dXAgKnNldHVwLAorCQkJ CSAgICBzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICoqb2JqLAorCQkJCSAgICBzdHJ1Y3QgZHJt X3ZjNF9zdWJtaXRfcmNsX3N1cmZhY2UgKnN1cmYpCit7CisJdWludDhfdCB0aWxpbmcgPSBWQzRf R0VUX0ZJRUxEKHN1cmYtPmJpdHMsCisJCQkJICAgICAgIFZDNF9SRU5ERVJfQ09ORklHX01FTU9S WV9GT1JNQVQpOworCXVpbnQ4X3QgZm9ybWF0ID0gVkM0X0dFVF9GSUVMRChzdXJmLT5iaXRzLAor CQkJCSAgICAgICBWQzRfUkVOREVSX0NPTkZJR19GT1JNQVQpOworCWludCBjcHA7CisKKwlpZiAo c3VyZi0+ZmxhZ3MgIT0gMCkgeworCQlEUk1fRVJST1IoIk5vIGZsYWdzIHN1cHBvcnRlZCBvbiBy ZW5kZXIgY29uZmlnLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdXJmLT5i aXRzICYgfihWQzRfUkVOREVSX0NPTkZJR19NRU1PUllfRk9STUFUX01BU0sgfAorCQkJICAgVkM0 X1JFTkRFUl9DT05GSUdfRk9STUFUX01BU0sgfAorCQkJICAgVkM0X1JFTkRFUl9DT05GSUdfTVNf TU9ERV80WCB8CisJCQkgICBWQzRfUkVOREVSX0NPTkZJR19ERUNJTUFURV9NT0RFXzRYKSkgewor CQlEUk1fRVJST1IoIlVua25vd24gYml0cyBpbiByZW5kZXIgY29uZmlnOiAweCUwNHhcbiIsCisJ CQkgIHN1cmYtPmJpdHMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3VyZi0+aGlu ZGV4ID09IH4wKQorCQlyZXR1cm4gMDsKKworCSpvYmogPSB2YzRfdXNlX2JvKGV4ZWMsIHN1cmYt PmhpbmRleCk7CisJaWYgKCEqb2JqKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0aWxpbmcg PiBWQzRfVElMSU5HX0ZPUk1BVF9MVCkgeworCQlEUk1fRVJST1IoIkJhZCB0aWxpbmcgZm9ybWF0 XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNl IFZDNF9SRU5ERVJfQ09ORklHX0ZPUk1BVF9CR1I1NjVfRElUSEVSRUQ6CisJY2FzZSBWQzRfUkVO REVSX0NPTkZJR19GT1JNQVRfQkdSNTY1OgorCQljcHAgPSAyOworCQlicmVhazsKKwljYXNlIFZD NF9SRU5ERVJfQ09ORklHX0ZPUk1BVF9SR0JBODg4ODoKKwkJY3BwID0gNDsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJCYWQgdGlsZSBidWZmZXIgZm9ybWF0XG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCF2YzRfY2hlY2tfdGV4X3NpemUoZXhlYywgKm9iaiwg c3VyZi0+b2Zmc2V0LCB0aWxpbmcsCisJCQkJZXhlYy0+YXJncy0+d2lkdGgsIGV4ZWMtPmFyZ3Mt PmhlaWdodCwgY3BwKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30K KworaW50IHZjNF9nZXRfcmNsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCB2YzRfZXhl Y19pbmZvICpleGVjKQoreworCXN0cnVjdCB2YzRfcmNsX3NldHVwIHNldHVwID0gezB9OworCXN0 cnVjdCBkcm1fdmM0X3N1Ym1pdF9jbCAqYXJncyA9IGV4ZWMtPmFyZ3M7CisJYm9vbCBoYXNfYmlu ID0gYXJncy0+YmluX2NsX3NpemUgIT0gMDsKKwlpbnQgcmV0OworCisJaWYgKGFyZ3MtPm1pbl94 X3RpbGUgPiBhcmdzLT5tYXhfeF90aWxlIHx8CisJICAgIGFyZ3MtPm1pbl95X3RpbGUgPiBhcmdz LT5tYXhfeV90aWxlKSB7CisJCURSTV9FUlJPUigiQmFkIHJlbmRlciB0aWxlIHNldCAoJWQsJWQp LSglZCwlZClcbiIsCisJCQkgIGFyZ3MtPm1pbl94X3RpbGUsIGFyZ3MtPm1pbl95X3RpbGUsCisJ CQkgIGFyZ3MtPm1heF94X3RpbGUsIGFyZ3MtPm1heF95X3RpbGUpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlpZiAoaGFzX2JpbiAmJgorCSAgICAoYXJncy0+bWF4X3hfdGlsZSA+IGV4ZWMt PmJpbl90aWxlc194IHx8CisJICAgICBhcmdzLT5tYXhfeV90aWxlID4gZXhlYy0+YmluX3RpbGVz X3kpKSB7CisJCURSTV9FUlJPUigiUmVuZGVyIHRpbGVzICglZCwlZCkgb3V0c2lkZSBvZiBiaW4g Y29uZmlnICIKKwkJCSAgIiglZCwlZClcbiIsCisJCQkgIGFyZ3MtPm1heF94X3RpbGUsIGFyZ3Mt Pm1heF95X3RpbGUsCisJCQkgIGV4ZWMtPmJpbl90aWxlc194LCBleGVjLT5iaW5fdGlsZXNfeSk7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHZjNF9yY2xfcmVuZGVyX2NvbmZpZ19z dXJmYWNlX3NldHVwKGV4ZWMsICZzZXR1cCwKKwkJCQkJCSAgJnNldHVwLmNvbG9yX3dyaXRlLAor CQkJCQkJICAmYXJncy0+Y29sb3Jfd3JpdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXQgPSB2YzRfcmNsX3N1cmZhY2Vfc2V0dXAoZXhlYywgJnNldHVwLmNvbG9yX3JlYWQsICZh cmdzLT5jb2xvcl9yZWFkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdmM0 X3JjbF9zdXJmYWNlX3NldHVwKGV4ZWMsICZzZXR1cC56c19yZWFkLCAmYXJncy0+enNfcmVhZCk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHZjNF9yY2xfc3VyZmFjZV9zZXR1 cChleGVjLCAmc2V0dXAuenNfd3JpdGUsICZhcmdzLT56c193cml0ZSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IHZjNF9yY2xfbXNhYV9zdXJmYWNlX3NldHVwKGV4ZWMsICZz ZXR1cC5tc2FhX2NvbG9yX3dyaXRlLAorCQkJCQkgJmFyZ3MtPm1zYWFfY29sb3Jfd3JpdGUpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB2YzRfcmNsX21zYWFfc3VyZmFjZV9z ZXR1cChleGVjLCAmc2V0dXAubXNhYV96c193cml0ZSwKKwkJCQkJICZhcmdzLT5tc2FhX3pzX3dy aXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogV2Ugc2hvdWxkbid0IGV2ZW4g aGF2ZSB0aGUgam9iIHN1Ym1pdHRlZCB0byB1cyBpZiB0aGVyZSdzIG5vCisJICogc3VyZmFjZSB0 byB3cml0ZSBvdXQuCisJICovCisJaWYgKCFzZXR1cC5jb2xvcl93cml0ZSAmJiAhc2V0dXAuenNf d3JpdGUgJiYKKwkgICAgIXNldHVwLm1zYWFfY29sb3Jfd3JpdGUgJiYgIXNldHVwLm1zYWFfenNf d3JpdGUpIHsKKwkJRFJNX0VSUk9SKCJSQ0wgcmVxdWlyZXMgY29sb3Igb3IgWi9TIHdyaXRlXG4i KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHZjNF9jcmVhdGVfcmNsX2JvKGRl diwgZXhlYywgJnNldHVwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0 X3RyYWNlLmggYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF90cmFjZS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkN2IxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF90cmFjZS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln aHQgKEMpIDIwMTUgQnJvYWRjb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAq IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZiAh ZGVmaW5lZChfVkM0X1RSQUNFX0hfKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFE KQorI2RlZmluZSBfVkM0X1RSQUNFX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4K KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4K KworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gdmM0CisjZGVmaW5l IFRSQUNFX0lOQ0xVREVfRklMRSB2YzRfdHJhY2UKKworVFJBQ0VfRVZFTlQodmM0X3dhaXRfZm9y X3NlcW5vX2JlZ2luLAorCSAgICBUUF9QUk9UTyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50 NjRfdCBzZXFubywgdWludDY0X3QgdGltZW91dCksCisJICAgIFRQX0FSR1MoZGV2LCBzZXFubywg dGltZW91dCksCisKKwkgICAgVFBfU1RSVUNUX19lbnRyeSgKKwkJCSAgICAgX19maWVsZCh1MzIs IGRldikKKwkJCSAgICAgX19maWVsZCh1NjQsIHNlcW5vKQorCQkJICAgICBfX2ZpZWxkKHU2NCwg dGltZW91dCkKKwkJCSAgICAgKSwKKworCSAgICBUUF9mYXN0X2Fzc2lnbigKKwkJCSAgIF9fZW50 cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CisJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNl cW5vOworCQkJICAgX19lbnRyeS0+dGltZW91dCA9IHRpbWVvdXQ7CisJCQkgICApLAorCisJICAg IFRQX3ByaW50aygiZGV2PSV1LCBzZXFubz0lbGx1LCB0aW1lb3V0PSVsbHUiLAorCQkgICAgICBf X2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vLCBfX2VudHJ5LT50aW1lb3V0KQorKTsKKworVFJB Q0VfRVZFTlQodmM0X3dhaXRfZm9yX3NlcW5vX2VuZCwKKwkgICAgVFBfUFJPVE8oc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdWludDY0X3Qgc2Vxbm8pLAorCSAgICBUUF9BUkdTKGRldiwgc2Vxbm8p LAorCisJICAgIFRQX1NUUlVDVF9fZW50cnkoCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCisJ CQkgICAgIF9fZmllbGQodTY0LCBzZXFubykKKwkJCSAgICAgKSwKKworCSAgICBUUF9mYXN0X2Fz c2lnbigKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CisJCQkgICBf X2VudHJ5LT5zZXFubyA9IHNlcW5vOworCQkJICAgKSwKKworCSAgICBUUF9wcmludGsoImRldj0l dSwgc2Vxbm89JWxsdSIsCisJCSAgICAgIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCisp OworCisjZW5kaWYgLyogX1ZDNF9UUkFDRV9IXyAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBv dXRzaWRlIHByb3RlY3Rpb24gKi8KKyN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgKKyNkZWZpbmUg VFJBQ0VfSU5DTFVERV9QQVRIIC4KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3RyYWNlX3BvaW50cy5jIGIvZHJpdmVy cy9ncHUvZHJtL3ZjNC92YzRfdHJhY2VfcG9pbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZTYyNzhmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X3RyYWNlX3BvaW50cy5jCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg KEMpIDIwMTUgQnJvYWRjb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRl ICJ2YzRfZHJ2LmgiCisKKyNpZm5kZWYgX19DSEVDS0VSX18KKyNkZWZpbmUgQ1JFQVRFX1RSQUNF X1BPSU5UUworI2luY2x1ZGUgInZjNF90cmFjZS5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF92M2QuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3YzZC5j CmluZGV4IDA0MGFkMGQuLjQyNGQ1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQv dmM0X3YzZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3YzZC5jCkBAIC0xNDQsNiAr MTQ0LDIxIEBAIGludCB2YzRfdjNkX2RlYnVnZnNfaWRlbnQoc3RydWN0IHNlcV9maWxlICptLCB2 b2lkICp1bnVzZWQpCiB9CiAjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCiAKKy8qCisgKiBB c2tzIHRoZSBmaXJtd2FyZSB0byB0dXJuIG9uIHBvd2VyIHRvIHRoZSBWM0QgZW5naW5lLgorICoK KyAqIFRoaXMgbWF5IGJlIGRvYWJsZSB3aXRoIGp1c3QgdGhlIGNsb2NrcyBpbnRlcmZhY2UsIHRo b3VnaCB0aGlzCisgKiBwYWNrZXQgZG9lcyBzb21lIG90aGVyIHJlZ2lzdGVyIHNldHVwIGZyb20g dGhlIGZpcm13YXJlLCB0b28uCisgKi8KK2ludAordmM0X3YzZF9zZXRfcG93ZXIoc3RydWN0IHZj NF9kZXYgKnZjNCwgYm9vbCBvbikKK3sKKwlpZiAob24pCisJCXJldHVybiBwbV9nZW5lcmljX3Bv d2Vyb2ZmKCZ2YzQtPnYzZC0+cGRldi0+ZGV2KTsKKwllbHNlCisJCXJldHVybiBwbV9nZW5lcmlj X3Jlc3VtZSgmdmM0LT52M2QtPnBkZXYtPmRldik7Cit9CisKIHN0YXRpYyB2b2lkIHZjNF92M2Rf aW5pdF9odyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2YzRfZGV2ICp2YzQg PSB0b192YzRfZGV2KGRldik7CkBAIC0xNjEsNiArMTc2LDcgQEAgc3RhdGljIGludCB2YzRfdjNk X2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRh dGEpCiAJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwog CXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRybSk7CiAJc3RydWN0IHZjNF92M2Qg KnYzZCA9IE5VTEw7CisJaW50IHJldDsKIAogCXYzZCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2 LCBzaXplb2YoKnYzZCksIEdGUF9LRVJORUwpOwogCWlmICghdjNkKQpAQCAtMTgwLDggKzE5Niwy MCBAQCBzdGF0aWMgaW50IHZjNF92M2RfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk ZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyog UmVzZXQgdGhlIGJpbm5lciBvdmVyZmxvdyBhZGRyZXNzL3NpemUgYXQgc2V0dXAsIHRvIGJlIHN1 cmUKKwkgKiB3ZSBkb24ndCByZXVzZSBhbiBvbGQgb25lLgorCSAqLworCVYzRF9XUklURShWM0Rf QlBPQSwgMCk7CisJVjNEX1dSSVRFKFYzRF9CUE9TLCAwKTsKKwogCXZjNF92M2RfaW5pdF9odyhk cm0pOwogCisJcmV0ID0gZHJtX2lycV9pbnN0YWxsKGRybSwgcGxhdGZvcm1fZ2V0X2lycShwZGV2 LCAwKSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbnN0YWxsIElSUSBo YW5kbGVyXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkx LDYgKzIxOSwxNSBAQCBzdGF0aWMgdm9pZCB2YzRfdjNkX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2 X2dldF9kcnZkYXRhKG1hc3Rlcik7CiAJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYo ZHJtKTsKIAorCWRybV9pcnFfdW5pbnN0YWxsKGRybSk7CisKKwkvKiBEaXNhYmxlIHRoZSBiaW5u ZXIncyBvdmVyZmxvdyBtZW1vcnkgYWRkcmVzcywgc28gdGhlIG5leHQKKwkgKiBkcml2ZXIgcHJv YmUgKGlmIGFueSkgZG9lc24ndCB0cnkgdG8gcmV1c2Ugb3VyIG9sZAorCSAqIGFsbG9jYXRpb24u CisJICovCisJVjNEX1dSSVRFKFYzRF9CUE9BLCAwKTsKKwlWM0RfV1JJVEUoVjNEX0JQT1MsIDAp OworCiAJdmM0LT52M2QgPSBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF92YWxpZGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdmFsaWRhdGUuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmI1Yjk5Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdmFsaWRhdGUuYwpAQCAtMCwwICsxLDkwMCBA QAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IEJyb2FkY29tCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qKgorICogQ29tbWFuZCBsaXN0IHZh bGlkYXRvciBmb3IgVkM0LgorICoKKyAqIFRoZSBWQzQgaGFzIG5vIElPTU1VIGJldHdlZW4gaXQg YW5kIHN5c3RlbSBtZW1vcnkuICBTbywgYSB1c2VyIHdpdGgKKyAqIGFjY2VzcyB0byBleGVjdXRl IGNvbW1hbmQgbGlzdHMgY291bGQgZXNjYWxhdGUgcHJpdmlsZWdlIGJ5CisgKiBvdmVyd3JpdGlu ZyBzeXN0ZW0gbWVtb3J5IChkcmF3aW5nIHRvIGl0IGFzIGEgZnJhbWVidWZmZXIpIG9yCisgKiBy ZWFkaW5nIHN5c3RlbSBtZW1vcnkgaXQgc2hvdWxkbid0IChyZWFkaW5nIGl0IGFzIGEgdGV4dHVy ZSwgb3IKKyAqIHVuaWZvcm0gZGF0YSwgb3IgdmVydGV4IGRhdGEpLgorICoKKyAqIFRoaXMgdmFs aWRhdGVzIGNvbW1hbmQgbGlzdHMgdG8gZW5zdXJlIHRoYXQgYWxsIGFjY2Vzc2VzIGFyZSB3aXRo aW4KKyAqIHRoZSBib3VuZHMgb2YgdGhlIEdFTSBvYmplY3RzIHJlZmVyZW5jZWQuICBJdCBleHBs aWNpdGx5IHdoaXRlbGlzdHMKKyAqIHBhY2tldHMsIGFuZCBsb29rcyBhdCB0aGUgb2Zmc2V0cyBp biBhbnkgYWRkcmVzcyBmaWVsZHMgdG8gbWFrZQorICogc3VyZSB0aGV5J3JlIGNvbnN0cmFpbmVk IHdpdGhpbiB0aGUgQk9zIHRoZXkgcmVmZXJlbmNlLgorICoKKyAqIE5vdGUgdGhhdCBiZWNhdXNl IG9mIHRoZSB2YWxpZGF0aW9uIHRoYXQncyBoYXBwZW5pbmcgYW55d2F5LCB0aGlzCisgKiBpcyB3 aGVyZSBHRU0gcmVsb2NhdGlvbiBwcm9jZXNzaW5nIGhhcHBlbnMuCisgKi8KKworI2luY2x1ZGUg InVhcGkvZHJtL3ZjNF9kcm0uaCIKKyNpbmNsdWRlICJ2YzRfZHJ2LmgiCisjaW5jbHVkZSAidmM0 X3BhY2tldC5oIgorCisjZGVmaW5lIFZBTElEQVRFX0FSR1MgXAorCXN0cnVjdCB2YzRfZXhlY19p bmZvICpleGVjLAkJCVwKKwl2b2lkICp2YWxpZGF0ZWQsCQkJCVwKKwl2b2lkICp1bnRydXN0ZWQK KworLyoqIFJldHVybiB0aGUgd2lkdGggaW4gcGl4ZWxzIG9mIGEgNjQtYnl0ZSBtaWNyb3RpbGUu ICovCitzdGF0aWMgdWludDMyX3QKK3V0aWxlX3dpZHRoKGludCBjcHApCit7CisJc3dpdGNoIChj cHApIHsKKwljYXNlIDE6CisJY2FzZSAyOgorCQlyZXR1cm4gODsKKwljYXNlIDQ6CisJCXJldHVy biA0OworCWNhc2UgODoKKwkJcmV0dXJuIDI7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJ1bmtu b3duIGNwcDogJWRcbiIsIGNwcCk7CisJCXJldHVybiAxOworCX0KK30KKworLyoqIFJldHVybiB0 aGUgaGVpZ2h0IGluIHBpeGVscyBvZiBhIDY0LWJ5dGUgbWljcm90aWxlLiAqLworc3RhdGljIHVp bnQzMl90Cit1dGlsZV9oZWlnaHQoaW50IGNwcCkKK3sKKwlzd2l0Y2ggKGNwcCkgeworCWNhc2Ug MToKKwkJcmV0dXJuIDg7CisJY2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDg6CisJCXJldHVybiA0 OworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigidW5rbm93biBjcHA6ICVkXG4iLCBjcHApOworCQly ZXR1cm4gMTsKKwl9Cit9CisKKy8qKgorICogVGhlIHRleHR1cmUgdW5pdCBkZWNpZGVzIHdoYXQg dGlsaW5nIGZvcm1hdCBhIHBhcnRpY3VsYXIgbWlwbGV2ZWwgaXMgdXNpbmcKKyAqIHRoaXMgZnVu Y3Rpb24sIHNvIHdlIGxheSBvdXQgb3VyIG1pcHRyZWVzIGFjY29yZGluZ2x5LgorICovCitzdGF0 aWMgYm9vbAorc2l6ZV9pc19sdCh1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCBpbnQg Y3BwKQoreworCXJldHVybiAod2lkdGggPD0gNCAqIHV0aWxlX3dpZHRoKGNwcCkgfHwKKwkJaGVp Z2h0IDw9IDQgKiB1dGlsZV9oZWlnaHQoY3BwKSk7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX2NtYV9v YmplY3QgKgordmM0X3VzZV9ibyhzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYywgdWludDMyX3Qg aGluZGV4KQoreworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgdmM0 X2JvICpibzsKKworCWlmIChoaW5kZXggPj0gZXhlYy0+Ym9fY291bnQpIHsKKwkJRFJNX0VSUk9S KCJCTyBpbmRleCAlZCBncmVhdGVyIHRoYW4gQk8gY291bnQgJWRcbiIsCisJCQkgIGhpbmRleCwg ZXhlYy0+Ym9fY291bnQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJb2JqID0gZXhlYy0+Ym9baGlu ZGV4XTsKKwlibyA9IHRvX3ZjNF9ibygmb2JqLT5iYXNlKTsKKworCWlmIChiby0+dmFsaWRhdGVk X3NoYWRlcikgeworCQlEUk1fRVJST1IoIlRyeWluZyB0byB1c2Ugc2hhZGVyIEJPIGFzIHNvbWV0 aGluZyBvdGhlciB0aGFuICIKKwkJCSAgImEgc2hhZGVyXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJcmV0dXJuIG9iajsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3Qg KgordmM0X3VzZV9oYW5kbGUoc3RydWN0IHZjNF9leGVjX2luZm8gKmV4ZWMsIHVpbnQzMl90IGdl bV9oYW5kbGVzX3BhY2tldF9pbmRleCkKK3sKKwlyZXR1cm4gdmM0X3VzZV9ibyhleGVjLCBleGVj LT5ib19pbmRleFtnZW1faGFuZGxlc19wYWNrZXRfaW5kZXhdKTsKK30KKworc3RhdGljIGJvb2wK K3ZhbGlkYXRlX2Jpbl9wb3Moc3RydWN0IHZjNF9leGVjX2luZm8gKmV4ZWMsIHZvaWQgKnVudHJ1 c3RlZCwgdWludDMyX3QgcG9zKQoreworCS8qIE5vdGUgdGhhdCB0aGUgdW50cnVzdGVkIHBvaW50 ZXIgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucyBpcworCSAqIGluY3JlbWVudGVkIHBhc3QgdGhl IHBhY2tldCBieXRlLgorCSAqLworCXJldHVybiAodW50cnVzdGVkIC0gMSA9PSBleGVjLT5iaW5f dSArIHBvcyk7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorZ2xfc2hhZGVyX3JlY19zaXplKHVpbnQz Ml90IHBvaW50ZXJfYml0cykKK3sKKwl1aW50MzJfdCBhdHRyaWJ1dGVfY291bnQgPSBwb2ludGVy X2JpdHMgJiA3OworCWJvb2wgZXh0ZW5kZWQgPSBwb2ludGVyX2JpdHMgJiA4OworCisJaWYgKGF0 dHJpYnV0ZV9jb3VudCA9PSAwKQorCQlhdHRyaWJ1dGVfY291bnQgPSA4OworCisJaWYgKGV4dGVu ZGVkKQorCQlyZXR1cm4gMTAwICsgYXR0cmlidXRlX2NvdW50ICogNDsKKwllbHNlCisJCXJldHVy biAzNiArIGF0dHJpYnV0ZV9jb3VudCAqIDg7Cit9CisKK2Jvb2wKK3ZjNF9jaGVja190ZXhfc2l6 ZShzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYywgc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAq ZmJvLAorCQkgICB1aW50MzJfdCBvZmZzZXQsIHVpbnQ4X3QgdGlsaW5nX2Zvcm1hdCwKKwkJICAg dWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgdWludDhfdCBjcHApCit7CisJdWludDMy X3QgYWxpZ25lZF93aWR0aCwgYWxpZ25lZF9oZWlnaHQsIHN0cmlkZSwgc2l6ZTsKKwl1aW50MzJf dCB1dGlsZV93ID0gdXRpbGVfd2lkdGgoY3BwKTsKKwl1aW50MzJfdCB1dGlsZV9oID0gdXRpbGVf aGVpZ2h0KGNwcCk7CisKKwkvKiBUaGUgc2hhZGVkIHZlcnRleCBmb3JtYXQgc3RvcmVzIHNpZ25l ZCAxMi40IGZpeGVkIHBvaW50CisJICogKC0yMDQ4LDIwNDcpIG9mZnNldHMgZnJvbSB0aGUgdmll d3BvcnQgY2VudGVyLCBzbyB3ZSBzaG91bGQKKwkgKiBuZXZlciBoYXZlIGEgcmVuZGVyIHRhcmdl dCBsYXJnZXIgdGhhbiA0MDk2LiAgVGhlIHRleHR1cmUKKwkgKiB1bml0IGNhbiBvbmx5IHNhbXBs ZSBmcm9tIDIwNDh4MjA0OCwgc28gaXQncyBldmVuIG1vcmUKKwkgKiByZXN0cmljdGVkLiAgVGhp cyBsZXRzIHVzIGF2b2lkIHdvcnJ5aW5nIGFib3V0IG92ZXJmbG93IGluCisJICogb3VyIG1hdGgu CisJICovCisJaWYgKHdpZHRoID4gNDA5NiB8fCBoZWlnaHQgPiA0MDk2KSB7CisJCURSTV9FUlJP UigiU3VyZmFjZSBkaW1lc2lvbnMgKCVkLCVkKSB0b28gbGFyZ2UiLCB3aWR0aCwgaGVpZ2h0KTsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCXN3aXRjaCAodGlsaW5nX2Zvcm1hdCkgeworCWNhc2Ug VkM0X1RJTElOR19GT1JNQVRfTElORUFSOgorCQlhbGlnbmVkX3dpZHRoID0gcm91bmRfdXAod2lk dGgsIHV0aWxlX3cpOworCQlhbGlnbmVkX2hlaWdodCA9IGhlaWdodDsKKwkJYnJlYWs7CisJY2Fz ZSBWQzRfVElMSU5HX0ZPUk1BVF9UOgorCQlhbGlnbmVkX3dpZHRoID0gcm91bmRfdXAod2lkdGgs IHV0aWxlX3cgKiA4KTsKKwkJYWxpZ25lZF9oZWlnaHQgPSByb3VuZF91cChoZWlnaHQsIHV0aWxl X2ggKiA4KTsKKwkJYnJlYWs7CisJY2FzZSBWQzRfVElMSU5HX0ZPUk1BVF9MVDoKKwkJYWxpZ25l ZF93aWR0aCA9IHJvdW5kX3VwKHdpZHRoLCB1dGlsZV93KTsKKwkJYWxpZ25lZF9oZWlnaHQgPSBy b3VuZF91cChoZWlnaHQsIHV0aWxlX2gpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJS T1IoImJ1ZmZlciB0aWxpbmcgJWQgdW5zdXBwb3J0ZWRcbiIsIHRpbGluZ19mb3JtYXQpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJc3RyaWRlID0gYWxpZ25lZF93aWR0aCAqIGNwcDsKKwlzaXpl ID0gc3RyaWRlICogYWxpZ25lZF9oZWlnaHQ7CisKKwlpZiAoc2l6ZSArIG9mZnNldCA8IHNpemUg fHwKKwkgICAgc2l6ZSArIG9mZnNldCA+IGZiby0+YmFzZS5zaXplKSB7CisJCURSTV9FUlJPUigi T3ZlcmZsb3cgaW4gJWR4JWQgKCVkeCVkKSBmYm8gc2l6ZSAoJWQgKyAlZCA+ICV6ZClcbiIsCisJ CQkgIHdpZHRoLCBoZWlnaHQsCisJCQkgIGFsaWduZWRfd2lkdGgsIGFsaWduZWRfaGVpZ2h0LAor CQkJICBzaXplLCBvZmZzZXQsIGZiby0+YmFzZS5zaXplKTsKKwkJcmV0dXJuIGZhbHNlOworCX0K KworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50Cit2YWxpZGF0ZV9mbHVzaChWQUxJREFU RV9BUkdTKQoreworCWlmICghdmFsaWRhdGVfYmluX3BvcyhleGVjLCB1bnRydXN0ZWQsIGV4ZWMt PmFyZ3MtPmJpbl9jbF9zaXplIC0gMSkpIHsKKwkJRFJNX0VSUk9SKCJCaW4gQ0wgbXVzdCBlbmQg d2l0aCBWQzRfUEFDS0VUX0ZMVVNIXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWV4ZWMt PmZvdW5kX2ZsdXNoID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2YWxp ZGF0ZV9zdGFydF90aWxlX2Jpbm5pbmcoVkFMSURBVEVfQVJHUykKK3sKKwlpZiAoZXhlYy0+Zm91 bmRfc3RhcnRfdGlsZV9iaW5uaW5nX3BhY2tldCkgeworCQlEUk1fRVJST1IoIkR1cGxpY2F0ZSBW QzRfUEFDS0VUX1NUQVJUX1RJTEVfQklOTklOR1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0K KwlleGVjLT5mb3VuZF9zdGFydF90aWxlX2Jpbm5pbmdfcGFja2V0ID0gdHJ1ZTsKKworCWlmICgh ZXhlYy0+Zm91bmRfdGlsZV9iaW5uaW5nX21vZGVfY29uZmlnX3BhY2tldCkgeworCQlEUk1fRVJS T1IoIm1pc3NpbmcgVkM0X1BBQ0tFVF9USUxFX0JJTk5JTkdfTU9ERV9DT05GSUdcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordmFsaWRh dGVfaW5jcmVtZW50X3NlbWFwaG9yZShWQUxJREFURV9BUkdTKQoreworCWlmICghdmFsaWRhdGVf YmluX3BvcyhleGVjLCB1bnRydXN0ZWQsIGV4ZWMtPmFyZ3MtPmJpbl9jbF9zaXplIC0gMikpIHsK KwkJRFJNX0VSUk9SKCJCaW4gQ0wgbXVzdCBlbmQgd2l0aCAiCisJCQkgICJWQzRfUEFDS0VUX0lO Q1JFTUVOVF9TRU1BUEhPUkVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZXhlYy0+Zm91 bmRfaW5jcmVtZW50X3NlbWFwaG9yZV9wYWNrZXQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2luZGV4ZWRfcHJpbV9saXN0KFZBTElEQVRFX0FSR1MpCit7 CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqaWI7CisJdWludDMyX3QgbGVuZ3RoID0gKih1 aW50MzJfdCAqKSh1bnRydXN0ZWQgKyAxKTsKKwl1aW50MzJfdCBvZmZzZXQgPSAqKHVpbnQzMl90 ICopKHVudHJ1c3RlZCArIDUpOworCXVpbnQzMl90IG1heF9pbmRleCA9ICoodWludDMyX3QgKiko dW50cnVzdGVkICsgOSk7CisJdWludDMyX3QgaW5kZXhfc2l6ZSA9ICgqKHVpbnQ4X3QgKikodW50 cnVzdGVkICsgMCkgPj4gNCkgPyAyIDogMTsKKwlzdHJ1Y3QgdmM0X3NoYWRlcl9zdGF0ZSAqc2hh ZGVyX3N0YXRlOworCisJLyogQ2hlY2sgb3ZlcmZsb3cgY29uZGl0aW9uICovCisJaWYgKGV4ZWMt PnNoYWRlcl9zdGF0ZV9jb3VudCA9PSAwKSB7CisJCURSTV9FUlJPUigic2hhZGVyIHN0YXRlIG11 c3QgcHJlY2VkZSBwcmltaXRpdmVzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNoYWRl cl9zdGF0ZSA9ICZleGVjLT5zaGFkZXJfc3RhdGVbZXhlYy0+c2hhZGVyX3N0YXRlX2NvdW50IC0g MV07CisKKwlpZiAobWF4X2luZGV4ID4gc2hhZGVyX3N0YXRlLT5tYXhfaW5kZXgpCisJCXNoYWRl cl9zdGF0ZS0+bWF4X2luZGV4ID0gbWF4X2luZGV4OworCisJaWIgPSB2YzRfdXNlX2hhbmRsZShl eGVjLCAwKTsKKwlpZiAoIWliKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvZmZzZXQgPiBp Yi0+YmFzZS5zaXplIHx8CisJICAgIChpYi0+YmFzZS5zaXplIC0gb2Zmc2V0KSAvIGluZGV4X3Np emUgPCBsZW5ndGgpIHsKKwkJRFJNX0VSUk9SKCJJQiBhY2Nlc3Mgb3ZlcmZsb3cgKCVkICsgJWQq JWQgPiAlemQpXG4iLAorCQkJICBvZmZzZXQsIGxlbmd0aCwgaW5kZXhfc2l6ZSwgaWItPmJhc2Uu c2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSoodWludDMyX3QgKikodmFsaWRhdGVk ICsgNSkgPSBpYi0+cGFkZHIgKyBvZmZzZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dAordmFsaWRhdGVfZ2xfYXJyYXlfcHJpbWl0aXZlKFZBTElEQVRFX0FSR1MpCit7CisJdWludDMy X3QgbGVuZ3RoID0gKih1aW50MzJfdCAqKSh1bnRydXN0ZWQgKyAxKTsKKwl1aW50MzJfdCBiYXNl X2luZGV4ID0gKih1aW50MzJfdCAqKSh1bnRydXN0ZWQgKyA1KTsKKwl1aW50MzJfdCBtYXhfaW5k ZXg7CisJc3RydWN0IHZjNF9zaGFkZXJfc3RhdGUgKnNoYWRlcl9zdGF0ZTsKKworCS8qIENoZWNr IG92ZXJmbG93IGNvbmRpdGlvbiAqLworCWlmIChleGVjLT5zaGFkZXJfc3RhdGVfY291bnQgPT0g MCkgeworCQlEUk1fRVJST1IoInNoYWRlciBzdGF0ZSBtdXN0IHByZWNlZGUgcHJpbWl0aXZlc1xu Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzaGFkZXJfc3RhdGUgPSAmZXhlYy0+c2hhZGVy X3N0YXRlW2V4ZWMtPnNoYWRlcl9zdGF0ZV9jb3VudCAtIDFdOworCisJaWYgKGxlbmd0aCArIGJh c2VfaW5kZXggPCBsZW5ndGgpIHsKKwkJRFJNX0VSUk9SKCJwcmltaXRpdmUgdmVydGV4IGNvdW50 IG92ZXJmbG93XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW1heF9pbmRleCA9IGxlbmd0 aCArIGJhc2VfaW5kZXggLSAxOworCisJaWYgKG1heF9pbmRleCA+IHNoYWRlcl9zdGF0ZS0+bWF4 X2luZGV4KQorCQlzaGFkZXJfc3RhdGUtPm1heF9pbmRleCA9IG1heF9pbmRleDsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50Cit2YWxpZGF0ZV9nbF9zaGFkZXJfc3RhdGUoVkFMSURBVEVf QVJHUykKK3sKKwl1aW50MzJfdCBpID0gZXhlYy0+c2hhZGVyX3N0YXRlX2NvdW50Kys7CisKKwlp ZiAoaSA+PSBleGVjLT5zaGFkZXJfc3RhdGVfc2l6ZSkgeworCQlEUk1fRVJST1IoIk1vcmUgcmVx dWVzdHMgZm9yIHNoYWRlciBzdGF0ZXMgdGhhbiBkZWNsYXJlZFxuIik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCWV4ZWMtPnNoYWRlcl9zdGF0ZVtpXS5hZGRyID0gKih1aW50MzJfdCAqKXVu dHJ1c3RlZDsKKwlleGVjLT5zaGFkZXJfc3RhdGVbaV0ubWF4X2luZGV4ID0gMDsKKworCWlmIChl eGVjLT5zaGFkZXJfc3RhdGVbaV0uYWRkciAmIH4weGYpIHsKKwkJRFJNX0VSUk9SKCJoaWdoIGJp dHMgc2V0IGluIEdMIHNoYWRlciByZWMgcmVmZXJlbmNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJKih1aW50MzJfdCAqKXZhbGlkYXRlZCA9IChleGVjLT5zaGFkZXJfcmVjX3AgKwor CQkJCSAgZXhlYy0+c2hhZGVyX3N0YXRlW2ldLmFkZHIpOworCisJZXhlYy0+c2hhZGVyX3JlY19w ICs9CisJCXJvdW5kdXAoZ2xfc2hhZGVyX3JlY19zaXplKGV4ZWMtPnNoYWRlcl9zdGF0ZVtpXS5h ZGRyKSwgMTYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX3RpbGVf YmlubmluZ19jb25maWcoVkFMSURBVEVfQVJHUykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gZXhlYy0+ZXhlY19iby0+YmFzZS5kZXY7CisJc3RydWN0IHZjNF9ibyAqdGlsZV9ibzsKKwl1 aW50OF90IGZsYWdzOworCXVpbnQzMl90IHRpbGVfc3RhdGVfc2l6ZSwgdGlsZV9hbGxvY19zaXpl OworCXVpbnQzMl90IHRpbGVfY291bnQ7CisKKwlpZiAoZXhlYy0+Zm91bmRfdGlsZV9iaW5uaW5n X21vZGVfY29uZmlnX3BhY2tldCkgeworCQlEUk1fRVJST1IoIkR1cGxpY2F0ZSBWQzRfUEFDS0VU X1RJTEVfQklOTklOR19NT0RFX0NPTkZJR1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwll eGVjLT5mb3VuZF90aWxlX2Jpbm5pbmdfbW9kZV9jb25maWdfcGFja2V0ID0gdHJ1ZTsKKworCWV4 ZWMtPmJpbl90aWxlc194ID0gKih1aW50OF90ICopKHVudHJ1c3RlZCArIDEyKTsKKwlleGVjLT5i aW5fdGlsZXNfeSA9ICoodWludDhfdCAqKSh1bnRydXN0ZWQgKyAxMyk7CisJdGlsZV9jb3VudCA9 IGV4ZWMtPmJpbl90aWxlc194ICogZXhlYy0+YmluX3RpbGVzX3k7CisJZmxhZ3MgPSAqKHVpbnQ4 X3QgKikodW50cnVzdGVkICsgMTQpOworCisJaWYgKGV4ZWMtPmJpbl90aWxlc194ID09IDAgfHwK KwkgICAgZXhlYy0+YmluX3RpbGVzX3kgPT0gMCkgeworCQlEUk1fRVJST1IoIlRpbGUgYmlubmlu ZyBjb25maWcgb2YgJWR4JWQgdG9vIHNtYWxsXG4iLAorCQkJICBleGVjLT5iaW5fdGlsZXNfeCwg ZXhlYy0+YmluX3RpbGVzX3kpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZmxhZ3Mg JiAoVkM0X0JJTl9DT05GSUdfREJfTk9OX01TIHwKKwkJICAgICBWQzRfQklOX0NPTkZJR19USUxF X0JVRkZFUl82NEJJVCkpIHsKKwkJRFJNX0VSUk9SKCJ1bnN1cHBvcnRlZCBiaW5uaW5nIGNvbmZp ZyBmbGFncyAweCUwMnhcbiIsIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyog VGhlIHRpbGUgc3RhdGUgZGF0YSBhcnJheSBpcyA0OCBieXRlcyBwZXIgdGlsZSwgYW5kIHdlIHB1 dCBpdCBhdAorCSAqIHRoZSBzdGFydCBvZiBhIEJPIGNvbnRhaW5pbmcgYm90aCBpdCBhbmQgdGhl IHRpbGUgYWxsb2MuCisJICovCisJdGlsZV9zdGF0ZV9zaXplID0gNDggKiB0aWxlX2NvdW50Owor CisJLyogU2luY2UgdGhlIHRpbGUgYWxsb2MgYXJyYXkgd2lsbCBmb2xsb3cgdXMsIGFsaWduLiAq LworCWV4ZWMtPnRpbGVfYWxsb2Nfb2Zmc2V0ID0gcm91bmR1cCh0aWxlX3N0YXRlX3NpemUsIDQw OTYpOworCisJKih1aW50OF90ICopKHZhbGlkYXRlZCArIDE0KSA9CisJCSgoZmxhZ3MgJiB+KFZD NF9CSU5fQ09ORklHX0FMTE9DX0lOSVRfQkxPQ0tfU0laRV9NQVNLIHwKKwkJCSAgICBWQzRfQklO X0NPTkZJR19BTExPQ19CTE9DS19TSVpFX01BU0spKSB8CisJCSBWQzRfQklOX0NPTkZJR19BVVRP X0lOSVRfVFNEQSB8CisJCSBWQzRfU0VUX0ZJRUxEKFZDNF9CSU5fQ09ORklHX0FMTE9DX0lOSVRf QkxPQ0tfU0laRV8zMiwKKwkJCSAgICAgICBWQzRfQklOX0NPTkZJR19BTExPQ19JTklUX0JMT0NL X1NJWkUpIHwKKwkJIFZDNF9TRVRfRklFTEQoVkM0X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0la RV8xMjgsCisJCQkgICAgICAgVkM0X0JJTl9DT05GSUdfQUxMT0NfQkxPQ0tfU0laRSkpOworCisJ LyogSW5pdGlhbCBibG9jayBzaXplLiAqLworCXRpbGVfYWxsb2Nfc2l6ZSA9IDMyICogdGlsZV9j b3VudDsKKworCS8qCisJICogVGhlIGluaXRpYWwgYWxsb2NhdGlvbiBnZXRzIHJvdW5kZWQgdG8g dGhlIG5leHQgMjU2IGJ5dGVzIGJlZm9yZQorCSAqIHRoZSBoYXJkd2FyZSBzdGFydHMgZnVsZmls bGluZyBmdXJ0aGVyIGFsbG9jYXRpb25zLgorCSAqLworCXRpbGVfYWxsb2Nfc2l6ZSA9IHJvdW5k dXAodGlsZV9hbGxvY19zaXplLCAyNTYpOworCisJLyogQWRkIHNwYWNlIGZvciB0aGUgZXh0cmEg YWxsb2NhdGlvbnMuICBUaGlzIGlzIHdoYXQgZ2V0cyB1c2VkIGZpcnN0LAorCSAqIGJlZm9yZSBv dmVyZmxvdyBtZW1vcnkuICBJdCBtdXN0IGhhdmUgYXQgbGVhc3QgNDA5NiBieXRlcywgYnV0IHdl CisJICogd2FudCB0byBhdm9pZCBvdmVyZmxvdyBtZW1vcnkgdXNhZ2UgaWYgcG9zc2libGUuCisJ ICovCisJdGlsZV9hbGxvY19zaXplICs9IDEwMjQgKiAxMDI0OworCisJdGlsZV9ibyA9IHZjNF9i b19jcmVhdGUoZGV2LCBleGVjLT50aWxlX2FsbG9jX29mZnNldCArIHRpbGVfYWxsb2Nfc2l6ZSwK KwkJCQl0cnVlKTsKKwlleGVjLT50aWxlX2JvID0gJnRpbGVfYm8tPmJhc2U7CisJaWYgKCFleGVj LT50aWxlX2JvKQorCQlyZXR1cm4gLUVOT01FTTsKKwlsaXN0X2FkZF90YWlsKCZ0aWxlX2JvLT51 bnJlZl9oZWFkLCAmZXhlYy0+dW5yZWZfbGlzdCk7CisKKwkvKiB0aWxlIGFsbG9jIGFkZHJlc3Mu ICovCisJKih1aW50MzJfdCAqKSh2YWxpZGF0ZWQgKyAwKSA9IChleGVjLT50aWxlX2JvLT5wYWRk ciArCisJCQkJCWV4ZWMtPnRpbGVfYWxsb2Nfb2Zmc2V0KTsKKwkvKiB0aWxlIGFsbG9jIHNpemUu ICovCisJKih1aW50MzJfdCAqKSh2YWxpZGF0ZWQgKyA0KSA9IHRpbGVfYWxsb2Nfc2l6ZTsKKwkv KiB0aWxlIHN0YXRlIGFkZHJlc3MuICovCisJKih1aW50MzJfdCAqKSh2YWxpZGF0ZWQgKyA4KSA9 IGV4ZWMtPnRpbGVfYm8tPnBhZGRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Zh bGlkYXRlX2dlbV9oYW5kbGVzKFZBTElEQVRFX0FSR1MpCit7CisJbWVtY3B5KGV4ZWMtPmJvX2lu ZGV4LCB1bnRydXN0ZWQsIHNpemVvZihleGVjLT5ib19pbmRleCkpOworCXJldHVybiAwOworfQor CisjZGVmaW5lIFZDNF9ERUZJTkVfUEFDS0VUKHBhY2tldCwgZnVuYykgXAorCVtwYWNrZXRdID0g eyBwYWNrZXQgIyMgX1NJWkUsICNwYWNrZXQsIGZ1bmMgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGNtZF9pbmZvIHsKKwl1aW50MTZfdCBsZW47CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpm dW5jKShzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYywgdm9pZCAqdmFsaWRhdGVkLAorCQkgICAg dm9pZCAqdW50cnVzdGVkKTsKK30gY21kX2luZm9bXSA9IHsKKwlWQzRfREVGSU5FX1BBQ0tFVChW QzRfUEFDS0VUX0hBTFQsIE5VTEwpLAorCVZDNF9ERUZJTkVfUEFDS0VUKFZDNF9QQUNLRVRfTk9Q LCBOVUxMKSwKKwlWQzRfREVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX0ZMVVNILCB2YWxpZGF0ZV9m bHVzaCksCisJVkM0X0RFRklORV9QQUNLRVQoVkM0X1BBQ0tFVF9GTFVTSF9BTEwsIE5VTEwpLAor CVZDNF9ERUZJTkVfUEFDS0VUKFZDNF9QQUNLRVRfU1RBUlRfVElMRV9CSU5OSU5HLAorCQkJICB2 YWxpZGF0ZV9zdGFydF90aWxlX2Jpbm5pbmcpLAorCVZDNF9ERUZJTkVfUEFDS0VUKFZDNF9QQUNL RVRfSU5DUkVNRU5UX1NFTUFQSE9SRSwKKwkJCSAgdmFsaWRhdGVfaW5jcmVtZW50X3NlbWFwaG9y ZSksCisKKwlWQzRfREVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX0dMX0lOREVYRURfUFJJTUlUSVZF LAorCQkJICB2YWxpZGF0ZV9pbmRleGVkX3ByaW1fbGlzdCksCisJVkM0X0RFRklORV9QQUNLRVQo VkM0X1BBQ0tFVF9HTF9BUlJBWV9QUklNSVRJVkUsCisJCQkgIHZhbGlkYXRlX2dsX2FycmF5X3By aW1pdGl2ZSksCisKKwlWQzRfREVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX1BSSU1JVElWRV9MSVNU X0ZPUk1BVCwgTlVMTCksCisKKwlWQzRfREVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX0dMX1NIQURF Ul9TVEFURSwgdmFsaWRhdGVfZ2xfc2hhZGVyX3N0YXRlKSwKKworCVZDNF9ERUZJTkVfUEFDS0VU KFZDNF9QQUNLRVRfQ09ORklHVVJBVElPTl9CSVRTLCBOVUxMKSwKKwlWQzRfREVGSU5FX1BBQ0tF VChWQzRfUEFDS0VUX0ZMQVRfU0hBREVfRkxBR1MsIE5VTEwpLAorCVZDNF9ERUZJTkVfUEFDS0VU KFZDNF9QQUNLRVRfUE9JTlRfU0laRSwgTlVMTCksCisJVkM0X0RFRklORV9QQUNLRVQoVkM0X1BB Q0tFVF9MSU5FX1dJRFRILCBOVUxMKSwKKwlWQzRfREVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX1JI VF9YX0JPVU5EQVJZLCBOVUxMKSwKKwlWQzRfREVGSU5FX1BBQ0tFVChWQzRfUEFDS0VUX0RFUFRI X09GRlNFVCwgTlVMTCksCisJVkM0X0RFRklORV9QQUNLRVQoVkM0X1BBQ0tFVF9DTElQX1dJTkRP VywgTlVMTCksCisJVkM0X0RFRklORV9QQUNLRVQoVkM0X1BBQ0tFVF9WSUVXUE9SVF9PRkZTRVQs IE5VTEwpLAorCVZDNF9ERUZJTkVfUEFDS0VUKFZDNF9QQUNLRVRfQ0xJUFBFUl9YWV9TQ0FMSU5H LCBOVUxMKSwKKwkvKiBOb3RlOiBUaGUgZG9jcyBzYXkgdGhpcyB3YXMgYWxzbyAxMDUsIGJ1dCBp dCB3YXMgMTA2IGluIHRoZQorCSAqIGluaXRpYWwgdXNlcmxhbmQgY29kZSBkcm9wLgorCSAqLwor CVZDNF9ERUZJTkVfUEFDS0VUKFZDNF9QQUNLRVRfQ0xJUFBFUl9aX1NDQUxJTkcsIE5VTEwpLAor CisJVkM0X0RFRklORV9QQUNLRVQoVkM0X1BBQ0tFVF9USUxFX0JJTk5JTkdfTU9ERV9DT05GSUcs CisJCQkgIHZhbGlkYXRlX3RpbGVfYmlubmluZ19jb25maWcpLAorCisJVkM0X0RFRklORV9QQUNL RVQoVkM0X1BBQ0tFVF9HRU1fSEFORExFUywgdmFsaWRhdGVfZ2VtX2hhbmRsZXMpLAorfTsKKwor aW50Cit2YzRfdmFsaWRhdGVfYmluX2NsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICB2 b2lkICp2YWxpZGF0ZWQsCisJCSAgICB2b2lkICp1bnZhbGlkYXRlZCwKKwkJICAgIHN0cnVjdCB2 YzRfZXhlY19pbmZvICpleGVjKQoreworCXVpbnQzMl90IGxlbiA9IGV4ZWMtPmFyZ3MtPmJpbl9j bF9zaXplOworCXVpbnQzMl90IGRzdF9vZmZzZXQgPSAwOworCXVpbnQzMl90IHNyY19vZmZzZXQg PSAwOworCisJd2hpbGUgKHNyY19vZmZzZXQgPCBsZW4pIHsKKwkJdm9pZCAqZHN0X3BrdCA9IHZh bGlkYXRlZCArIGRzdF9vZmZzZXQ7CisJCXZvaWQgKnNyY19wa3QgPSB1bnZhbGlkYXRlZCArIHNy Y19vZmZzZXQ7CisJCXU4IGNtZCA9ICoodWludDhfdCAqKXNyY19wa3Q7CisJCWNvbnN0IHN0cnVj dCBjbWRfaW5mbyAqaW5mbzsKKworCQlpZiAoY21kID49IEFSUkFZX1NJWkUoY21kX2luZm8pKSB7 CisJCQlEUk1fRVJST1IoIjB4JTA4eDogcGFja2V0ICVkIG91dCBvZiBib3VuZHNcbiIsCisJCQkJ ICBzcmNfb2Zmc2V0LCBjbWQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpbmZvID0g JmNtZF9pbmZvW2NtZF07CisJCWlmICghaW5mby0+bmFtZSkgeworCQkJRFJNX0VSUk9SKCIweCUw OHg6IHBhY2tldCAlZCBpbnZhbGlkXG4iLAorCQkJCSAgc3JjX29mZnNldCwgY21kKTsKKwkJCXJl dHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHNyY19vZmZzZXQgKyBpbmZvLT5sZW4gPiBsZW4p IHsKKwkJCURSTV9FUlJPUigiMHglMDh4OiBwYWNrZXQgJWQgKCVzKSBsZW5ndGggMHglMDh4ICIK KwkJCQkgICJleGNlZWRzIGJvdW5kcyAoMHglMDh4KVxuIiwKKwkJCQkgIHNyY19vZmZzZXQsIGNt ZCwgaW5mby0+bmFtZSwgaW5mby0+bGVuLAorCQkJCSAgc3JjX29mZnNldCArIGxlbik7CisJCQly ZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChjbWQgIT0gVkM0X1BBQ0tFVF9HRU1fSEFORExF UykKKwkJCW1lbWNweShkc3RfcGt0LCBzcmNfcGt0LCBpbmZvLT5sZW4pOworCisJCWlmIChpbmZv LT5mdW5jICYmIGluZm8tPmZ1bmMoZXhlYywKKwkJCQkJICAgICBkc3RfcGt0ICsgMSwKKwkJCQkJ ICAgICBzcmNfcGt0ICsgMSkpIHsKKwkJCURSTV9FUlJPUigiMHglMDh4OiBwYWNrZXQgJWQgKCVz KSBmYWlsZWQgdG8gdmFsaWRhdGVcbiIsCisJCQkJICBzcmNfb2Zmc2V0LCBjbWQsIGluZm8tPm5h bWUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzcmNfb2Zmc2V0ICs9IGluZm8tPmxl bjsKKwkJLyogR0VNIGhhbmRsZSBsb2FkaW5nIGRvZXNuJ3QgcHJvZHVjZSBIVyBwYWNrZXRzLiAq LworCQlpZiAoY21kICE9IFZDNF9QQUNLRVRfR0VNX0hBTkRMRVMpCisJCQlkc3Rfb2Zmc2V0ICs9 IGluZm8tPmxlbjsKKworCQkvKiBXaGVuIHRoZSBDTCBoaXRzIGhhbHQsIGl0J2xsIHN0b3AgcmVh ZGluZyBhbnl0aGluZyBlbHNlLiAqLworCQlpZiAoY21kID09IFZDNF9QQUNLRVRfSEFMVCkKKwkJ CWJyZWFrOworCX0KKworCWV4ZWMtPmN0MGVhID0gZXhlYy0+Y3QwY2EgKyBkc3Rfb2Zmc2V0Owor CisJaWYgKCFleGVjLT5mb3VuZF9zdGFydF90aWxlX2Jpbm5pbmdfcGFja2V0KSB7CisJCURSTV9F UlJPUigiQmluIENMIG1pc3NpbmcgVkM0X1BBQ0tFVF9TVEFSVF9USUxFX0JJTk5JTkdcbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGUgYmluIENMIG11c3QgYmUgZW5kZWQgd2l0 aCBJTkNSRU1FTlRfU0VNQVBIT1JFIGFuZCBGTFVTSC4gIFRoZQorCSAqIHNlbWFwaG9yZSBpcyB1 c2VkIHRvIHRyaWdnZXIgdGhlIHJlbmRlciBDTCB0byBzdGFydCB1cCwgYW5kIHRoZQorCSAqIEZM VVNIIGlzIHdoYXQgY2FwcyB0aGUgYmluIGxpc3RzIHdpdGgKKwkgKiBWQzRfUEFDS0VUX1JFVFVS Tl9GUk9NX1NVQl9MSVNUIChzbyB0aGV5IGp1bXAgYmFjayB0byB0aGUgbWFpbgorCSAqIHJlbmRl ciBDTCB3aGVuIHRoZXkgZ2V0IGNhbGxlZCB0bykgYW5kIGFjdHVhbGx5IHRyaWdnZXJzIHRoZSBx dWV1ZWQKKwkgKiBzZW1hcGhvcmUgaW5jcmVtZW50LgorCSAqLworCWlmICghZXhlYy0+Zm91bmRf aW5jcmVtZW50X3NlbWFwaG9yZV9wYWNrZXQgfHwgIWV4ZWMtPmZvdW5kX2ZsdXNoKSB7CisJCURS TV9FUlJPUigiQmluIENMIG1pc3NpbmcgVkM0X1BBQ0tFVF9JTkNSRU1FTlRfU0VNQVBIT1JFICsg IgorCQkJICAiVkM0X1BBQ0tFVF9GTFVTSFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbAorcmVsb2NfdGV4KHN0cnVjdCB2YzRfZXhlY19p bmZvICpleGVjLAorCSAgdm9pZCAqdW5pZm9ybV9kYXRhX3UsCisJICBzdHJ1Y3QgdmM0X3RleHR1 cmVfc2FtcGxlX2luZm8gKnNhbXBsZSwKKwkgIHVpbnQzMl90IHRleHR1cmVfaGFuZGxlX2luZGV4 KQorCit7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqdGV4OworCXVpbnQzMl90IHAwID0g Kih1aW50MzJfdCAqKSh1bmlmb3JtX2RhdGFfdSArIHNhbXBsZS0+cF9vZmZzZXRbMF0pOworCXVp bnQzMl90IHAxID0gKih1aW50MzJfdCAqKSh1bmlmb3JtX2RhdGFfdSArIHNhbXBsZS0+cF9vZmZz ZXRbMV0pOworCXVpbnQzMl90IHAyID0gKHNhbXBsZS0+cF9vZmZzZXRbMl0gIT0gfjAgPworCQkg ICAgICAgKih1aW50MzJfdCAqKSh1bmlmb3JtX2RhdGFfdSArIHNhbXBsZS0+cF9vZmZzZXRbMl0p IDogMCk7CisJdWludDMyX3QgcDMgPSAoc2FtcGxlLT5wX29mZnNldFszXSAhPSB+MCA/CisJCSAg ICAgICAqKHVpbnQzMl90ICopKHVuaWZvcm1fZGF0YV91ICsgc2FtcGxlLT5wX29mZnNldFszXSkg OiAwKTsKKwl1aW50MzJfdCAqdmFsaWRhdGVkX3AwID0gZXhlYy0+dW5pZm9ybXNfdiArIHNhbXBs ZS0+cF9vZmZzZXRbMF07CisJdWludDMyX3Qgb2Zmc2V0ID0gcDAgJiBWQzRfVEVYX1AwX09GRlNF VF9NQVNLOworCXVpbnQzMl90IG1pcGxldmVscyA9IFZDNF9HRVRfRklFTEQocDAsIFZDNF9URVhf UDBfTUlQTFZMUyk7CisJdWludDMyX3Qgd2lkdGggPSBWQzRfR0VUX0ZJRUxEKHAxLCBWQzRfVEVY X1AxX1dJRFRIKTsKKwl1aW50MzJfdCBoZWlnaHQgPSBWQzRfR0VUX0ZJRUxEKHAxLCBWQzRfVEVY X1AxX0hFSUdIVCk7CisJdWludDMyX3QgY3BwLCB0aWxpbmdfZm9ybWF0LCB1dGlsZV93LCB1dGls ZV9oOworCXVpbnQzMl90IGk7CisJdWludDMyX3QgY3ViZV9tYXBfc3RyaWRlID0gMDsKKwllbnVt IHZjNF90ZXh0dXJlX2RhdGFfdHlwZSB0eXBlOworCisJdGV4ID0gdmM0X3VzZV9ibyhleGVjLCB0 ZXh0dXJlX2hhbmRsZV9pbmRleCk7CisJaWYgKCF0ZXgpCisJCXJldHVybiBmYWxzZTsKKworCWlm IChzYW1wbGUtPmlzX2RpcmVjdCkgeworCQl1aW50MzJfdCByZW1haW5pbmdfc2l6ZSA9IHRleC0+ YmFzZS5zaXplIC0gcDA7CisKKwkJaWYgKHAwID4gdGV4LT5iYXNlLnNpemUgLSA0KSB7CisJCQlE Uk1fRVJST1IoIlVCTyBvZmZzZXQgZ3JlYXRlciB0aGFuIFVCTyBzaXplXG4iKTsKKwkJCWdvdG8g ZmFpbDsKKwkJfQorCQlpZiAocDEgPiByZW1haW5pbmdfc2l6ZSAtIDQpIHsKKwkJCURSTV9FUlJP UigiVUJPIGNsYW1wIHdvdWxkIGFsbG93IHJlYWRzICIKKwkJCQkgICJvdXRzaWRlIG9mIFVCT1xu Iik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJKnZhbGlkYXRlZF9wMCA9IHRleC0+cGFkZHIgKyBw MDsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKHdpZHRoID09IDApCisJCXdpZHRoID0gMjA0 ODsKKwlpZiAoaGVpZ2h0ID09IDApCisJCWhlaWdodCA9IDIwNDg7CisKKwlpZiAocDAgJiBWQzRf VEVYX1AwX0NNTU9ERV9NQVNLKSB7CisJCWlmIChWQzRfR0VUX0ZJRUxEKHAyLCBWQzRfVEVYX1Ay X1BUWVBFKSA9PQorCQkgICAgVkM0X1RFWF9QMl9QVFlQRV9DVUJFX01BUF9TVFJJREUpCisJCQlj dWJlX21hcF9zdHJpZGUgPSBwMiAmIFZDNF9URVhfUDJfQ01TVF9NQVNLOworCQlpZiAoVkM0X0dF VF9GSUVMRChwMywgVkM0X1RFWF9QMl9QVFlQRSkgPT0KKwkJICAgIFZDNF9URVhfUDJfUFRZUEVf Q1VCRV9NQVBfU1RSSURFKSB7CisJCQlpZiAoY3ViZV9tYXBfc3RyaWRlKSB7CisJCQkJRFJNX0VS Uk9SKCJDdWJlIG1hcCBzdHJpZGUgc2V0IHR3aWNlXG4iKTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9 CisKKwkJCWN1YmVfbWFwX3N0cmlkZSA9IHAzICYgVkM0X1RFWF9QMl9DTVNUX01BU0s7CisJCX0K KwkJaWYgKCFjdWJlX21hcF9zdHJpZGUpIHsKKwkJCURSTV9FUlJPUigiQ3ViZSBtYXAgc3RyaWRl IG5vdCBzZXRcbiIpOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJdHlwZSA9IChWQzRfR0VU X0ZJRUxEKHAwLCBWQzRfVEVYX1AwX1RZUEUpIHwKKwkJKFZDNF9HRVRfRklFTEQocDEsIFZDNF9U RVhfUDFfVFlQRTQpIDw8IDQpKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVkM0X1RFWFRV UkVfVFlQRV9SR0JBODg4ODoKKwljYXNlIFZDNF9URVhUVVJFX1RZUEVfUkdCWDg4ODg6CisJY2Fz ZSBWQzRfVEVYVFVSRV9UWVBFX1JHQkEzMlI6CisJCWNwcCA9IDQ7CisJCWJyZWFrOworCWNhc2Ug VkM0X1RFWFRVUkVfVFlQRV9SR0JBNDQ0NDoKKwljYXNlIFZDNF9URVhUVVJFX1RZUEVfUkdCQTU1 NTE6CisJY2FzZSBWQzRfVEVYVFVSRV9UWVBFX1JHQjU2NToKKwljYXNlIFZDNF9URVhUVVJFX1RZ UEVfTFVNQUxQSEE6CisJY2FzZSBWQzRfVEVYVFVSRV9UWVBFX1MxNkY6CisJY2FzZSBWQzRfVEVY VFVSRV9UWVBFX1MxNjoKKwkJY3BwID0gMjsKKwkJYnJlYWs7CisJY2FzZSBWQzRfVEVYVFVSRV9U WVBFX0xVTUlOQU5DRToKKwljYXNlIFZDNF9URVhUVVJFX1RZUEVfQUxQSEE6CisJY2FzZSBWQzRf VEVYVFVSRV9UWVBFX1M4OgorCQljcHAgPSAxOworCQlicmVhazsKKwljYXNlIFZDNF9URVhUVVJF X1RZUEVfRVRDMToKKwljYXNlIFZDNF9URVhUVVJFX1RZUEVfQlcxOgorCWNhc2UgVkM0X1RFWFRV UkVfVFlQRV9BNDoKKwljYXNlIFZDNF9URVhUVVJFX1RZUEVfQTE6CisJY2FzZSBWQzRfVEVYVFVS RV9UWVBFX1JHQkE2NDoKKwljYXNlIFZDNF9URVhUVVJFX1RZUEVfWVVWNDIyUjoKKwlkZWZhdWx0 OgorCQlEUk1fRVJST1IoIlRleHR1cmUgZm9ybWF0ICVkIHVuc3VwcG9ydGVkXG4iLCB0eXBlKTsK KwkJZ290byBmYWlsOworCX0KKwl1dGlsZV93ID0gdXRpbGVfd2lkdGgoY3BwKTsKKwl1dGlsZV9o ID0gdXRpbGVfaGVpZ2h0KGNwcCk7CisKKwlpZiAodHlwZSA9PSBWQzRfVEVYVFVSRV9UWVBFX1JH QkEzMlIpIHsKKwkJdGlsaW5nX2Zvcm1hdCA9IFZDNF9USUxJTkdfRk9STUFUX0xJTkVBUjsKKwl9 IGVsc2UgeworCQlpZiAoc2l6ZV9pc19sdCh3aWR0aCwgaGVpZ2h0LCBjcHApKQorCQkJdGlsaW5n X2Zvcm1hdCA9IFZDNF9USUxJTkdfRk9STUFUX0xUOworCQllbHNlCisJCQl0aWxpbmdfZm9ybWF0 ID0gVkM0X1RJTElOR19GT1JNQVRfVDsKKwl9CisKKwlpZiAoIXZjNF9jaGVja190ZXhfc2l6ZShl eGVjLCB0ZXgsIG9mZnNldCArIGN1YmVfbWFwX3N0cmlkZSAqIDUsCisJCQkJdGlsaW5nX2Zvcm1h dCwgd2lkdGgsIGhlaWdodCwgY3BwKSkgeworCQlnb3RvIGZhaWw7CisJfQorCisJLyogVGhlIG1p cG1hcCBsZXZlbHMgYXJlIHN0b3JlZCBiZWZvcmUgdGhlIGJhc2Ugb2YgdGhlIHRleHR1cmUuICBN YWtlCisJICogc3VyZSB0aGVyZSBpcyBhY3R1YWxseSBzcGFjZSBpbiB0aGUgQk8uCisJICovCisJ Zm9yIChpID0gMTsgaSA8PSBtaXBsZXZlbHM7IGkrKykgeworCQl1aW50MzJfdCBsZXZlbF93aWR0 aCA9IG1heCh3aWR0aCA+PiBpLCAxdSk7CisJCXVpbnQzMl90IGxldmVsX2hlaWdodCA9IG1heCho ZWlnaHQgPj4gaSwgMXUpOworCQl1aW50MzJfdCBhbGlnbmVkX3dpZHRoLCBhbGlnbmVkX2hlaWdo dDsKKwkJdWludDMyX3QgbGV2ZWxfc2l6ZTsKKworCQkvKiBPbmNlIHRoZSBsZXZlbHMgZ2V0IHNt YWxsIGVub3VnaCwgdGhleSBkcm9wIGZyb20gVCB0byBMVC4gKi8KKwkJaWYgKHRpbGluZ19mb3Jt YXQgPT0gVkM0X1RJTElOR19GT1JNQVRfVCAmJgorCQkgICAgc2l6ZV9pc19sdChsZXZlbF93aWR0 aCwgbGV2ZWxfaGVpZ2h0LCBjcHApKSB7CisJCQl0aWxpbmdfZm9ybWF0ID0gVkM0X1RJTElOR19G T1JNQVRfTFQ7CisJCX0KKworCQlzd2l0Y2ggKHRpbGluZ19mb3JtYXQpIHsKKwkJY2FzZSBWQzRf VElMSU5HX0ZPUk1BVF9UOgorCQkJYWxpZ25lZF93aWR0aCA9IHJvdW5kX3VwKGxldmVsX3dpZHRo LCB1dGlsZV93ICogOCk7CisJCQlhbGlnbmVkX2hlaWdodCA9IHJvdW5kX3VwKGxldmVsX2hlaWdo dCwgdXRpbGVfaCAqIDgpOworCQkJYnJlYWs7CisJCWNhc2UgVkM0X1RJTElOR19GT1JNQVRfTFQ6 CisJCQlhbGlnbmVkX3dpZHRoID0gcm91bmRfdXAobGV2ZWxfd2lkdGgsIHV0aWxlX3cpOworCQkJ YWxpZ25lZF9oZWlnaHQgPSByb3VuZF91cChsZXZlbF9oZWlnaHQsIHV0aWxlX2gpOworCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQlhbGlnbmVkX3dpZHRoID0gcm91bmRfdXAobGV2ZWxfd2lkdGgs IHV0aWxlX3cpOworCQkJYWxpZ25lZF9oZWlnaHQgPSBsZXZlbF9oZWlnaHQ7CisJCQlicmVhazsK KwkJfQorCisJCWxldmVsX3NpemUgPSBhbGlnbmVkX3dpZHRoICogY3BwICogYWxpZ25lZF9oZWln aHQ7CisKKwkJaWYgKG9mZnNldCA8IGxldmVsX3NpemUpIHsKKwkJCURSTV9FUlJPUigiTGV2ZWwg JWQgKCVkeCVkIC0+ICVkeCVkKSBzaXplICVkYiAiCisJCQkJICAib3ZlcmZsb3dlZCBidWZmZXIg Ym91bmRzIChvZmZzZXQgJWQpXG4iLAorCQkJCSAgaSwgbGV2ZWxfd2lkdGgsIGxldmVsX2hlaWdo dCwKKwkJCQkgIGFsaWduZWRfd2lkdGgsIGFsaWduZWRfaGVpZ2h0LAorCQkJCSAgbGV2ZWxfc2l6 ZSwgb2Zmc2V0KTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCW9mZnNldCAtPSBsZXZlbF9zaXpl OworCX0KKworCSp2YWxpZGF0ZWRfcDAgPSB0ZXgtPnBhZGRyICsgcDA7CisKKwlyZXR1cm4gdHJ1 ZTsKKyBmYWlsOgorCURSTV9JTkZPKCJUZXh0dXJlIHAwIGF0ICVkOiAweCUwOHhcbiIsIHNhbXBs ZS0+cF9vZmZzZXRbMF0sIHAwKTsKKwlEUk1fSU5GTygiVGV4dHVyZSBwMSBhdCAlZDogMHglMDh4 XG4iLCBzYW1wbGUtPnBfb2Zmc2V0WzFdLCBwMSk7CisJRFJNX0lORk8oIlRleHR1cmUgcDIgYXQg JWQ6IDB4JTA4eFxuIiwgc2FtcGxlLT5wX29mZnNldFsyXSwgcDIpOworCURSTV9JTkZPKCJUZXh0 dXJlIHAzIGF0ICVkOiAweCUwOHhcbiIsIHNhbXBsZS0+cF9vZmZzZXRbM10sIHAzKTsKKwlyZXR1 cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2dsX3NoYWRlcl9yZWMoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjLAor CQkgICAgICAgc3RydWN0IHZjNF9zaGFkZXJfc3RhdGUgKnN0YXRlKQoreworCXVpbnQzMl90ICpz cmNfaGFuZGxlczsKKwl2b2lkICpwa3RfdSwgKnBrdF92OworCXN0YXRpYyBjb25zdCB1aW50MzJf dCBzaGFkZXJfcmVsb2Nfb2Zmc2V0c1tdID0geworCQk0LCAvKiBmcyAqLworCQkxNiwgLyogdnMg Ki8KKwkJMjgsIC8qIGNzICovCisJfTsKKwl1aW50MzJfdCBzaGFkZXJfcmVsb2NfY291bnQgPSBB UlJBWV9TSVpFKHNoYWRlcl9yZWxvY19vZmZzZXRzKTsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2Jq ZWN0ICpib1tzaGFkZXJfcmVsb2NfY291bnQgKyA4XTsKKwl1aW50MzJfdCBucl9hdHRyaWJ1dGVz LCBucl9yZWxvY3MsIHBhY2tldF9zaXplOworCWludCBpOworCisJbnJfYXR0cmlidXRlcyA9IHN0 YXRlLT5hZGRyICYgMHg3OworCWlmIChucl9hdHRyaWJ1dGVzID09IDApCisJCW5yX2F0dHJpYnV0 ZXMgPSA4OworCXBhY2tldF9zaXplID0gZ2xfc2hhZGVyX3JlY19zaXplKHN0YXRlLT5hZGRyKTsK KworCW5yX3JlbG9jcyA9IEFSUkFZX1NJWkUoc2hhZGVyX3JlbG9jX29mZnNldHMpICsgbnJfYXR0 cmlidXRlczsKKwlpZiAobnJfcmVsb2NzICogNCA+IGV4ZWMtPnNoYWRlcl9yZWNfc2l6ZSkgewor CQlEUk1fRVJST1IoIm92ZXJmbG93ZWQgc2hhZGVyIHJlY3MgcmVhZGluZyAlZCBoYW5kbGVzICIK KwkJCSAgImZyb20gJWQgYnl0ZXMgbGVmdFxuIiwKKwkJCSAgbnJfcmVsb2NzLCBleGVjLT5zaGFk ZXJfcmVjX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc3JjX2hhbmRsZXMgPSBleGVj LT5zaGFkZXJfcmVjX3U7CisJZXhlYy0+c2hhZGVyX3JlY191ICs9IG5yX3JlbG9jcyAqIDQ7CisJ ZXhlYy0+c2hhZGVyX3JlY19zaXplIC09IG5yX3JlbG9jcyAqIDQ7CisKKwlpZiAocGFja2V0X3Np emUgPiBleGVjLT5zaGFkZXJfcmVjX3NpemUpIHsKKwkJRFJNX0VSUk9SKCJvdmVyZmxvd2VkIHNo YWRlciByZWNzIGNvcHlpbmcgJWRiIHBhY2tldCAiCisJCQkgICJmcm9tICVkIGJ5dGVzIGxlZnRc biIsCisJCQkgIHBhY2tldF9zaXplLCBleGVjLT5zaGFkZXJfcmVjX3NpemUpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisJcGt0X3UgPSBleGVjLT5zaGFkZXJfcmVjX3U7CisJcGt0X3YgPSBleGVj LT5zaGFkZXJfcmVjX3Y7CisJbWVtY3B5KHBrdF92LCBwa3RfdSwgcGFja2V0X3NpemUpOworCWV4 ZWMtPnNoYWRlcl9yZWNfdSArPSBwYWNrZXRfc2l6ZTsKKwkvKiBTaGFkZXIgcmVjcyBoYXZlIHRv IGJlIGFsaWduZWQgdG8gMTYgYnl0ZXMgKGR1ZSB0byB0aGUgYXR0cmlidXRlCisJICogZmxhZ3Mg YmVpbmcgaW4gdGhlIGxvdyBieXRlcyksIHNvIHJvdW5kIHRoZSBuZXh0IHZhbGlkYXRlZCBzaGFk ZXIKKwkgKiByZWMgYWRkcmVzcyB1cC4gIFRoaXMgc2hvdWxkIGJlIHNhZmUsIHNpbmNlIHdlJ3Zl IGdvdCBzbyBtYW55CisJICogcmVsb2NhdGlvbnMgaW4gYSBzaGFkZXIgcmVjIHBhY2tldC4KKwkg Ki8KKwlCVUdfT04ocm91bmR1cChwYWNrZXRfc2l6ZSwgMTYpIC0gcGFja2V0X3NpemUgPiBucl9y ZWxvY3MgKiA0KTsKKwlleGVjLT5zaGFkZXJfcmVjX3YgKz0gcm91bmR1cChwYWNrZXRfc2l6ZSwg MTYpOworCWV4ZWMtPnNoYWRlcl9yZWNfc2l6ZSAtPSBwYWNrZXRfc2l6ZTsKKworCWlmICghKCoo dWludDE2X3QgKilwa3RfdSAmIFZDNF9TSEFERVJfRkxBR19GU19TSU5HTEVfVEhSRUFEKSkgewor CQlEUk1fRVJST1IoIk11bHRpLXRocmVhZGVkIGZyYWdtZW50IHNoYWRlcnMgbm90IHN1cHBvcnRl ZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2hhZGVy X3JlbG9jX2NvdW50OyBpKyspIHsKKwkJaWYgKHNyY19oYW5kbGVzW2ldID4gZXhlYy0+Ym9fY291 bnQpIHsKKwkJCURSTV9FUlJPUigiU2hhZGVyIGhhbmRsZSAlZCB0b28gYmlnXG4iLCBzcmNfaGFu ZGxlc1tpXSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWJvW2ldID0gZXhlYy0+Ym9b c3JjX2hhbmRsZXNbaV1dOworCQlpZiAoIWJvW2ldKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQor CWZvciAoaSA9IHNoYWRlcl9yZWxvY19jb3VudDsgaSA8IG5yX3JlbG9jczsgaSsrKSB7CisJCWJv W2ldID0gdmM0X3VzZV9ibyhleGVjLCBzcmNfaGFuZGxlc1tpXSk7CisJCWlmICghYm9baV0pCisJ CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2hhZGVyX3JlbG9jX2Nv dW50OyBpKyspIHsKKwkJc3RydWN0IHZjNF92YWxpZGF0ZWRfc2hhZGVyX2luZm8gKnZhbGlkYXRl ZF9zaGFkZXI7CisJCXVpbnQzMl90IG8gPSBzaGFkZXJfcmVsb2Nfb2Zmc2V0c1tpXTsKKwkJdWlu dDMyX3Qgc3JjX29mZnNldCA9ICoodWludDMyX3QgKikocGt0X3UgKyBvKTsKKwkJdWludDMyX3Qg KnRleHR1cmVfaGFuZGxlc191OworCQl2b2lkICp1bmlmb3JtX2RhdGFfdTsKKwkJdWludDMyX3Qg dGV4OworCisJCSoodWludDMyX3QgKikocGt0X3YgKyBvKSA9IGJvW2ldLT5wYWRkciArIHNyY19v ZmZzZXQ7CisKKwkJaWYgKHNyY19vZmZzZXQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJTaGFkZXJz IG11c3QgYmUgYXQgb2Zmc2V0IDAgb2YgIgorCQkJCSAgInRoZSBCTy5cbiIpOworCQkJcmV0dXJu IC1FSU5WQUw7CisJCX0KKworCQl2YWxpZGF0ZWRfc2hhZGVyID0gdG9fdmM0X2JvKCZib1tpXS0+ YmFzZSktPnZhbGlkYXRlZF9zaGFkZXI7CisJCWlmICghdmFsaWRhdGVkX3NoYWRlcikKKwkJCXJl dHVybiAtRUlOVkFMOworCisJCWlmICh2YWxpZGF0ZWRfc2hhZGVyLT51bmlmb3Jtc19zcmNfc2l6 ZSA+CisJCSAgICBleGVjLT51bmlmb3Jtc19zaXplKSB7CisJCQlEUk1fRVJST1IoIlVuaWZvcm1z IHNyYyBidWZmZXIgb3ZlcmZsb3dcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQl0 ZXh0dXJlX2hhbmRsZXNfdSA9IGV4ZWMtPnVuaWZvcm1zX3U7CisJCXVuaWZvcm1fZGF0YV91ID0g KHRleHR1cmVfaGFuZGxlc191ICsKKwkJCQkgIHZhbGlkYXRlZF9zaGFkZXItPm51bV90ZXh0dXJl X3NhbXBsZXMpOworCisJCW1lbWNweShleGVjLT51bmlmb3Jtc192LCB1bmlmb3JtX2RhdGFfdSwK KwkJICAgICAgIHZhbGlkYXRlZF9zaGFkZXItPnVuaWZvcm1zX3NpemUpOworCisJCWZvciAodGV4 ID0gMDsKKwkJICAgICB0ZXggPCB2YWxpZGF0ZWRfc2hhZGVyLT5udW1fdGV4dHVyZV9zYW1wbGVz OworCQkgICAgIHRleCsrKSB7CisJCQlpZiAoIXJlbG9jX3RleChleGVjLAorCQkJCSAgICAgICB1 bmlmb3JtX2RhdGFfdSwKKwkJCQkgICAgICAgJnZhbGlkYXRlZF9zaGFkZXItPnRleHR1cmVfc2Ft cGxlc1t0ZXhdLAorCQkJCSAgICAgICB0ZXh0dXJlX2hhbmRsZXNfdVt0ZXhdKSkgeworCQkJCXJl dHVybiAtRUlOVkFMOworCQkJfQorCQl9CisKKwkJKih1aW50MzJfdCAqKShwa3RfdiArIG8gKyA0 KSA9IGV4ZWMtPnVuaWZvcm1zX3A7CisKKwkJZXhlYy0+dW5pZm9ybXNfdSArPSB2YWxpZGF0ZWRf c2hhZGVyLT51bmlmb3Jtc19zcmNfc2l6ZTsKKwkJZXhlYy0+dW5pZm9ybXNfdiArPSB2YWxpZGF0 ZWRfc2hhZGVyLT51bmlmb3Jtc19zaXplOworCQlleGVjLT51bmlmb3Jtc19wICs9IHZhbGlkYXRl ZF9zaGFkZXItPnVuaWZvcm1zX3NpemU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5yX2F0dHJp YnV0ZXM7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICp2Ym8gPQorCQkJYm9b QVJSQVlfU0laRShzaGFkZXJfcmVsb2Nfb2Zmc2V0cykgKyBpXTsKKwkJdWludDMyX3QgbyA9IDM2 ICsgaSAqIDg7CisJCXVpbnQzMl90IG9mZnNldCA9ICoodWludDMyX3QgKikocGt0X3UgKyBvICsg MCk7CisJCXVpbnQzMl90IGF0dHJfc2l6ZSA9ICoodWludDhfdCAqKShwa3RfdSArIG8gKyA0KSAr IDE7CisJCXVpbnQzMl90IHN0cmlkZSA9ICoodWludDhfdCAqKShwa3RfdSArIG8gKyA1KTsKKwkJ dWludDMyX3QgbWF4X2luZGV4OworCisJCWlmIChzdGF0ZS0+YWRkciAmIDB4OCkKKwkJCXN0cmlk ZSB8PSAoKih1aW50MzJfdCAqKShwa3RfdSArIDEwMCArIGkgKiA0KSkgJiB+MHhmZjsKKworCQlp ZiAodmJvLT5iYXNlLnNpemUgPCBvZmZzZXQgfHwKKwkJICAgIHZiby0+YmFzZS5zaXplIC0gb2Zm c2V0IDwgYXR0cl9zaXplKSB7CisJCQlEUk1fRVJST1IoIkJPIG9mZnNldCBvdmVyZmxvdyAoJWQg KyAlZCA+ICVkKVxuIiwKKwkJCQkgIG9mZnNldCwgYXR0cl9zaXplLCB2Ym8tPmJhc2Uuc2l6ZSk7 CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChzdHJpZGUgIT0gMCkgeworCQkJbWF4 X2luZGV4ID0gKCh2Ym8tPmJhc2Uuc2l6ZSAtIG9mZnNldCAtIGF0dHJfc2l6ZSkgLworCQkJCSAg ICAgc3RyaWRlKTsKKwkJCWlmIChzdGF0ZS0+bWF4X2luZGV4ID4gbWF4X2luZGV4KSB7CisJCQkJ RFJNX0VSUk9SKCJwcmltaXRpdmVzIHVzZSBpbmRleCAlZCBvdXQgb2YgIgorCQkJCQkgICJzdXBw bGllZCAlZFxuIiwKKwkJCQkJICBzdGF0ZS0+bWF4X2luZGV4LCBtYXhfaW5kZXgpOworCQkJCXJl dHVybiAtRUlOVkFMOworCQkJfQorCQl9CisKKwkJKih1aW50MzJfdCAqKShwa3RfdiArIG8pID0g dmJvLT5wYWRkciArIG9mZnNldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50Cit2YzRfdmFs aWRhdGVfc2hhZGVyX3JlY3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgdmM0 X2V4ZWNfaW5mbyAqZXhlYykKK3sKKwl1aW50MzJfdCBpOworCWludCByZXQgPSAwOworCisJZm9y IChpID0gMDsgaSA8IGV4ZWMtPnNoYWRlcl9zdGF0ZV9jb3VudDsgaSsrKSB7CisJCXJldCA9IHZh bGlkYXRlX2dsX3NoYWRlcl9yZWMoZGV2LCBleGVjLCAmZXhlYy0+c2hhZGVyX3N0YXRlW2ldKTsK KwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAt LWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vdmM0X2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS92YzRf ZHJtLmgKaW5kZXggNzRkZTE4NC4uZmU0MTYxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2Ry bS92YzRfZHJtLmgKKysrIGIvaW5jbHVkZS91YXBpL2RybS92YzRfZHJtLmgKQEAgLTI2LDE0ICsy NiwxNTUgQEAKIAogI2luY2x1ZGUgImRybS5oIgogCisjZGVmaW5lIERSTV9WQzRfU1VCTUlUX0NM ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgRFJNX1ZDNF9XQUlUX1NFUU5P ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBEUk1fVkM0X1dBSVRfQk8gICAg ICAgICAgICAgICAgICAgICAgICAgICAweDAyCiAjZGVmaW5lIERSTV9WQzRfQ1JFQVRFX0JPICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDMKICNkZWZpbmUgRFJNX1ZDNF9NTUFQX0JPICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwNAogI2RlZmluZSBEUk1fVkM0X0NSRUFURV9TSEFERVJf Qk8gICAgICAgICAgICAgICAgICAweDA1CiAKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZDNF9TVUJNSVRf Q0wgICAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVkM0X1NVQk1JVF9D TCwgc3RydWN0IGRybV92YzRfc3VibWl0X2NsKQorI2RlZmluZSBEUk1fSU9DVExfVkM0X1dBSVRf U0VRTk8gICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WQzRfV0FJVF9T RVFOTywgc3RydWN0IGRybV92YzRfd2FpdF9zZXFubykKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZDNF9X QUlUX0JPICAgICAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVkM0X1dB SVRfQk8sIHN0cnVjdCBkcm1fdmM0X3dhaXRfYm8pCiAjZGVmaW5lIERSTV9JT0NUTF9WQzRfQ1JF QVRFX0JPICAgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZDNF9DUkVB VEVfQk8sIHN0cnVjdCBkcm1fdmM0X2NyZWF0ZV9ibykKICNkZWZpbmUgRFJNX0lPQ1RMX1ZDNF9N TUFQX0JPICAgICAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVkM0X01N QVBfQk8sIHN0cnVjdCBkcm1fdmM0X21tYXBfYm8pCiAjZGVmaW5lIERSTV9JT0NUTF9WQzRfQ1JF QVRFX1NIQURFUl9CTyAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZDNF9DUkVB VEVfU0hBREVSX0JPLCBzdHJ1Y3QgZHJtX3ZjNF9jcmVhdGVfc2hhZGVyX2JvKQogCitzdHJ1Y3Qg ZHJtX3ZjNF9zdWJtaXRfcmNsX3N1cmZhY2UgeworCV9fdTMyIGhpbmRleDsgLyogSGFuZGxlIGlu ZGV4LCBvciB+MCBpZiBub3QgcHJlc2VudC4gKi8KKwlfX3UzMiBvZmZzZXQ7IC8qIE9mZnNldCB0 byBzdGFydCBvZiBidWZmZXIuICovCisJLyoKKwkgKiBCaXRzIGZvciBlaXRoZXIgcmVuZGVyIGNv bmZpZyAoY29sb3Jfd3JpdGUpIG9yIGxvYWQvc3RvcmUgcGFja2V0LgorCSAqIEJpdHMgc2hvdWxk IGFsbCBiZSAwIGZvciBNU0FBIGxvYWQvc3RvcmVzLgorCSAqLworCV9fdTE2IGJpdHM7CisKKyNk ZWZpbmUgVkM0X1NVQk1JVF9SQ0xfU1VSRkFDRV9SRUFEX0lTX0ZVTExfUkVTCQkoMSA8PCAwKQor CV9fdTE2IGZsYWdzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHJtX3ZjNF9zdWJtaXRfY2wgLSBp b2N0bCBhcmd1bWVudCBmb3Igc3VibWl0dGluZyBjb21tYW5kcyB0byB0aGUgM0QKKyAqIGVuZ2lu ZS4KKyAqCisgKiBEcml2ZXJzIHR5cGljYWxseSB1c2UgR1BVIEJPcyB0byBzdG9yZSBiYXRjaGJ1 ZmZlcnMgLyBjb21tYW5kIGxpc3RzIGFuZAorICogdGhlaXIgYXNzb2NpYXRlZCBzdGF0ZS4gIEhv d2V2ZXIsIGJlY2F1c2UgdGhlIFZDNCBsYWNrcyBhbiBNTVUsIHdlIGhhdmUgdG8KKyAqIGRvIHZh bGlkYXRpb24gb2YgbWVtb3J5IGFjY2Vzc2VzIGJ5IHRoZSBHUFUgY29tbWFuZHMuICBJZiB3ZSB3 ZXJlIHRvIHN0b3JlCisgKiBvdXIgY29tbWFuZHMgaW4gQk9zLCB3ZSdkIG5lZWQgdG8gZG8gdW5j YWNoZWQgcmVhZGJhY2sgZnJvbSB0aGVtIHRvIGRvIHRoZQorICogdmFsaWRhdGlvbiBwcm9jZXNz LCB3aGljaCBpcyB0b28gZXhwZW5zaXZlLiAgSW5zdGVhZCwgdXNlcnNwYWNlIGFjY3VtdWxhdGVz CisgKiBjb21tYW5kcyBhbmQgYXNzb2NpYXRlZCBzdGF0ZSBpbiBwbGFpbiBtZW1vcnksIHRoZW4g dGhlIGtlcm5lbCBjb3BpZXMgdGhlCisgKiBkYXRhIHRvIGl0cyBvd24gYWRkcmVzcyBzcGFjZSwg YW5kIHRoZW4gdmFsaWRhdGVzIGFuZCBzdG9yZXMgaXQgaW4gYSBHUFUKKyAqIEJPLgorICovCitz dHJ1Y3QgZHJtX3ZjNF9zdWJtaXRfY2wgeworCS8qIFBvaW50ZXIgdG8gdGhlIGJpbm5lciBjb21t YW5kIGxpc3QuCisJICoKKwkgKiBUaGlzIGlzIHRoZSBmaXJzdCBzZXQgb2YgY29tbWFuZHMgZXhl Y3V0ZWQsIHdoaWNoIHJ1bnMgdGhlCisJICogY29vcmRpbmF0ZSBzaGFkZXIgdG8gZGV0ZXJtaW5l IHdoZXJlIHByaW1pdGl2ZXMgbGFuZCBvbiB0aGUgc2NyZWVuLAorCSAqIHRoZW4gd3JpdGVzIG91 dCB0aGUgc3RhdGUgdXBkYXRlcyBhbmQgZHJhdyBjYWxscyBuZWNlc3NhcnkgcGVyIHRpbGUKKwkg KiB0byB0aGUgdGlsZSBhbGxvY2F0aW9uIEJPLgorCSAqLworCV9fdTY0IGJpbl9jbDsKKworCS8q IFBvaW50ZXIgdG8gdGhlIHNoYWRlciByZWNvcmRzLgorCSAqCisJICogU2hhZGVyIHJlY29yZHMg YXJlIHRoZSBzdHJ1Y3R1cmVzIHJlYWQgYnkgdGhlIGhhcmR3YXJlIHRoYXQgY29udGFpbgorCSAq IHBvaW50ZXJzIHRvIHVuaWZvcm1zLCBzaGFkZXJzLCBhbmQgdmVydGV4IGF0dHJpYnV0ZXMuICBU aGUKKwkgKiByZWZlcmVuY2UgdG8gdGhlIHNoYWRlciByZWNvcmQgaGFzIGVub3VnaCBpbmZvcm1h dGlvbiB0byBkZXRlcm1pbmUKKwkgKiBob3cgbWFueSBwb2ludGVycyBhcmUgbmVjZXNzYXJ5IChm aXhlZCBudW1iZXIgZm9yIHNoYWRlcnMvdW5pZm9ybXMsCisJICogYW5kIGFuIGF0dHJpYnV0ZSBj b3VudCksIHNvIHRob3NlIEJPIGluZGljZXMgaW50byBib19oYW5kbGVzIGFyZQorCSAqIGp1c3Qg c3RvcmVkIGFzIF9fdTMycyBiZWZvcmUgZWFjaCBzaGFkZXIgcmVjb3JkIHBhc3NlZCBpbi4KKwkg Ki8KKwlfX3U2NCBzaGFkZXJfcmVjOworCisJLyogUG9pbnRlciB0byB1bmlmb3JtIGRhdGEgYW5k IHRleHR1cmUgaGFuZGxlcyBmb3IgdGhlIHRleHR1cmVzCisJICogcmVmZXJlbmNlZCBieSB0aGUg c2hhZGVyLgorCSAqCisJICogRm9yIGVhY2ggc2hhZGVyIHN0YXRlIHJlY29yZCwgdGhlcmUgaXMg YSBzZXQgb2YgdW5pZm9ybSBkYXRhIGluIHRoZQorCSAqIG9yZGVyIHJlZmVyZW5jZWQgYnkgdGhl IHJlY29yZCAoRlMsIFZTLCB0aGVuIENTKS4gIEVhY2ggc2V0IG9mCisJICogdW5pZm9ybSBkYXRh IGhhcyBhIF9fdTMyIGluZGV4IGludG8gYm9faGFuZGxlcyBwZXIgdGV4dHVyZQorCSAqIHNhbXBs ZSBvcGVyYXRpb24sIGluIHRoZSBvcmRlciB0aGUgUVBVX1dfVE1Vbl9TIHdyaXRlcyBhcHBlYXIg aW4KKwkgKiB0aGUgcHJvZ3JhbS4gIEZvbGxvd2luZyB0aGUgdGV4dHVyZSBCTyBoYW5kbGUgaW5k aWNlcyBpcyB0aGUgYWN0dWFsCisJICogdW5pZm9ybSBkYXRhLgorCSAqCisJICogVGhlIGluZGl2 aWR1YWwgdW5pZm9ybSBzdGF0ZSBibG9ja3MgZG9uJ3QgaGF2ZSBzaXplcyBwYXNzZWQgaW4sCisJ ICogYmVjYXVzZSB0aGUga2VybmVsIGhhcyB0byBkZXRlcm1pbmUgdGhlIHNpemVzIGFueXdheSBk dXJpbmcgc2hhZGVyCisJICogY29kZSB2YWxpZGF0aW9uLgorCSAqLworCV9fdTY0IHVuaWZvcm1z OworCV9fdTY0IGJvX2hhbmRsZXM7CisKKwkvKiBTaXplIGluIGJ5dGVzIG9mIHRoZSBiaW5uZXIg Y29tbWFuZCBsaXN0LiAqLworCV9fdTMyIGJpbl9jbF9zaXplOworCS8qIFNpemUgaW4gYnl0ZXMg b2YgdGhlIHNldCBvZiBzaGFkZXIgcmVjb3Jkcy4gKi8KKwlfX3UzMiBzaGFkZXJfcmVjX3NpemU7 CisJLyogTnVtYmVyIG9mIHNoYWRlciByZWNvcmRzLgorCSAqCisJICogVGhpcyBjb3VsZCBqdXN0 IGJlIGNvbXB1dGVkIGZyb20gdGhlIGNvbnRlbnRzIG9mIHNoYWRlcl9yZWNvcmRzIGFuZAorCSAq IHRoZSBhZGRyZXNzIGJpdHMgb2YgcmVmZXJlbmNlcyB0byB0aGVtIGZyb20gdGhlIGJpbiBDTCwg YnV0IGl0CisJICoga2VlcHMgdGhlIGtlcm5lbCBmcm9tIGhhdmluZyB0byByZXNpemUgc29tZSBh bGxvY2F0aW9ucyBpdCBtYWtlcy4KKwkgKi8KKwlfX3UzMiBzaGFkZXJfcmVjX2NvdW50OworCS8q IFNpemUgaW4gYnl0ZXMgb2YgdGhlIHVuaWZvcm0gc3RhdGUuICovCisJX191MzIgdW5pZm9ybXNf c2l6ZTsKKworCS8qIE51bWJlciBvZiBCTyBoYW5kbGVzIHBhc3NlZCBpbiAoc2l6ZSBpcyB0aGF0 IHRpbWVzIDQpLiAqLworCV9fdTMyIGJvX2hhbmRsZV9jb3VudDsKKworCS8qIFJDTCBzZXR1cDog Ki8KKwlfX3UxNiB3aWR0aDsKKwlfX3UxNiBoZWlnaHQ7CisJX191OCBtaW5feF90aWxlOworCV9f dTggbWluX3lfdGlsZTsKKwlfX3U4IG1heF94X3RpbGU7CisJX191OCBtYXhfeV90aWxlOworCXN0 cnVjdCBkcm1fdmM0X3N1Ym1pdF9yY2xfc3VyZmFjZSBjb2xvcl9yZWFkOworCXN0cnVjdCBkcm1f dmM0X3N1Ym1pdF9yY2xfc3VyZmFjZSBjb2xvcl93cml0ZTsKKwlzdHJ1Y3QgZHJtX3ZjNF9zdWJt aXRfcmNsX3N1cmZhY2UgenNfcmVhZDsKKwlzdHJ1Y3QgZHJtX3ZjNF9zdWJtaXRfcmNsX3N1cmZh Y2UgenNfd3JpdGU7CisJc3RydWN0IGRybV92YzRfc3VibWl0X3JjbF9zdXJmYWNlIG1zYWFfY29s b3Jfd3JpdGU7CisJc3RydWN0IGRybV92YzRfc3VibWl0X3JjbF9zdXJmYWNlIG1zYWFfenNfd3Jp dGU7CisJX191MzIgY2xlYXJfY29sb3JbMl07CisJX191MzIgY2xlYXJfejsKKwlfX3U4IGNsZWFy X3M7CisKKwlfX3UzMiBwYWQ6MjQ7CisKKyNkZWZpbmUgVkM0X1NVQk1JVF9DTF9VU0VfQ0xFQVJf Q09MT1IJCQkoMSA8PCAwKQorCV9fdTMyIGZsYWdzOworCisJLyogUmV0dXJuZWQgdmFsdWUgb2Yg dGhlIHNlcW5vIG9mIHRoaXMgcmVuZGVyIGpvYiAoZm9yIHRoZQorCSAqIHdhaXQgaW9jdGwpLgor CSAqLworCV9fdTY0IHNlcW5vOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHJtX3ZjNF93YWl0X3Nl cW5vIC0gaW9jdGwgYXJndW1lbnQgZm9yIHdhaXRpbmcgZm9yCisgKiBEUk1fVkM0X1NVQk1JVF9D TCBjb21wbGV0aW9uIHVzaW5nIGl0cyByZXR1cm5lZCBzZXFuby4KKyAqCisgKiB0aW1lb3V0X25z IGlzIHRoZSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzLCB3aGVyZSAiMCIgbWVhbnMgImRvbid0Cisg KiBibG9jaywganVzdCByZXR1cm4gdGhlIHN0YXR1cy4iCisgKi8KK3N0cnVjdCBkcm1fdmM0X3dh aXRfc2Vxbm8geworCV9fdTY0IHNlcW5vOworCV9fdTY0IHRpbWVvdXRfbnM7Cit9OworCisvKioK KyAqIHN0cnVjdCBkcm1fdmM0X3dhaXRfYm8gLSBpb2N0bCBhcmd1bWVudCBmb3Igd2FpdGluZyBm b3IKKyAqIGNvbXBsZXRpb24gb2YgdGhlIGxhc3QgRFJNX1ZDNF9TVUJNSVRfQ0wgb24gYSBCTy4K KyAqCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgY2FzZXMgd2hlcmUgbXVsdGlwbGUgcHJvY2Vzc2Vz IG1pZ2h0IGJlCisgKiByZW5kZXJpbmcgdG8gYSBCTyBhbmQgeW91IHdhbnQgdG8gd2FpdCBmb3Ig YWxsIHJlbmRlcmluZyB0byBiZQorICogY29tcGxldGVkLgorICovCitzdHJ1Y3QgZHJtX3ZjNF93 YWl0X2JvIHsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOworCV9fdTY0IHRpbWVvdXRfbnM7 Cit9OworCiAvKioKICAqIHN0cnVjdCBkcm1fdmM0X2NyZWF0ZV9ibyAtIGlvY3RsIGFyZ3VtZW50 IGZvciBjcmVhdGluZyBWQzQgQk9zLgogICoKLS0gCjIuNi4yCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=