From mboxrd@z Thu Jan 1 00:00:00 1970 From: Francisco Jerez Subject: [PATCHv8] drm/i915: Added Programming of the MOCS Date: Wed, 8 Jul 2015 17:51:22 +0300 Message-ID: <1436367082-24434-1-git-send-email-currojerez@riseup.net> References: <878uaqsqsf.fsf@riseup.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by gabe.freedesktop.org (Postfix) with ESMTPS id E250B6EAA8 for ; Wed, 8 Jul 2015 07:50:27 -0700 (PDT) In-Reply-To: <878uaqsqsf.fsf@riseup.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+CgpUaGlzIGNoYW5n ZSBhZGRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aGUgTU9DUyByZWdpc3RlcnMgdG8gdGhlIGdlbiA5 KwpwbGF0Zm9ybXMuIFRoZSBzZXQgb2YgTU9DUyBjb25maWd1cmF0aW9uIGVudHJpZXMgaW50cm9k dWNlZCBieSB0aGlzCnBhdGNoIGlzIGludGVuZGVkIHRvIGJlIG1pbmltYWwgYnV0IHN1ZmZpY2ll bnQgdG8gY292ZXIgdGhlIG5lZWRzIG9mCmN1cnJlbnQgdXNlcnNwYWNlIC0gaS5lLiBhIGdvb2Qg c2V0IG9mIGRlZmF1bHRzLiBJdCBpcyBleHBlY3RlZCB0byBiZQpleHRlbmRlZCBpbiB0aGUgZnV0 dXJlIHRvIHByb3ZpZGUgZnVydGhlciBkZWZhdWx0IHZhbHVlcyBvciB0byBhbGxvdwp1c2Vyc3Bh Y2UgdG8gcmVkZWZpbmUgaXRzIHByaXZhdGUgTU9DUyB0YWJsZXMgYmFzZWQgb24gaXRzIGRlbWFu ZCBmb3IKYWRkaXRpb25hbCBjYWNoaW5nIGNvbmZpZ3VyYXRpb25zLiBJbiB0aGlzIHNldHVwLCB1 c2Vyc3BhY2Ugc2hvdWxkCm9ubHkgdXRpbGl6ZSB0aGUgZmlyc3QgTiBlbnRyaWVzLCBoaWdoZXIg ZW50cmllcyBhcmUgcmVzZXJ2ZWQgZm9yCmZ1dHVyZSB1c2UuCgpJdCBjcmVhdGVzIGEgZml4ZWQg cmVnaXN0ZXIgc2V0IHRoYXQgaXMgcHJvZ3JhbW1lZCBhY3Jvc3MgdGhlIGRpZmZlcmVudAplbmdp bmVzIHNvIHRoYXQgYWxsIGVuZ2luZXMgaGF2ZSB0aGUgc2FtZSB0YWJsZS4gVGhpcyBpcyBkb25l IGFzIHRoZQptYWluIFJDUyBjb250ZXh0IG9ubHkgaG9sZHMgdGhlIHJlZ2lzdGVycyBmb3IgaXRz ZWxmIGFuZCB0aGUgc2hhcmVkCkwzIHZhbHVlcy4gQnkgdHJ5aW5nIHRvIGtlZXAgdGhlIHJlZ2lz dGVycyBjb25zaXN0ZW50IGFjcm9zcyB0aGUKZGlmZmVyZW50IGVuZ2luZXMgaXQgc2hvdWxkIG1h a2UgdGhlIHByb2dyYW1taW5nIGZvciB0aGUgcmVnaXN0ZXJzCmNvbnNpc3RlbnQuCgp2MjoKLSdz dGF0aWMgY29uc3QnIGZvciBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBhbmQgc3R5bGUgY2hhbmdl cy4oTWF0dCBUdXJuZXIpCnYzOgotIE1ha2UgdGhlIHRhYmxlcyAic2xpZ2h0bHkiIG1vcmUgcmVh ZGFibGUuIChEYW1pZW4gTGVzcGlhdSkKLSBVcGRhdGVkIHRhYmxlcyBmaXggcGVyZm9ybWFuY2Ug cmVncmVzc2lvbi4KdjQ6Ci0gQ29kZSBmb3JtYXR0aW5nLiAoQ2hyaXMgV2lsc29uKQotIHJlLXBy aXZhdGlzZWQgbW9jcyBjb2RlLiAoRGFuaWVsIFZldHRlcikKdjU6Ci0gQ2hhbmdlZCB0aGUgbmFt ZSBvZiBhIGZ1bmN0aW9uLiAoQ2hyaXMgV2lsc29uKQp2NjoKLSByZS1iYXNlZAotIEFkZGVkIE1l c2EgdGFibGUgZW50cnkgKHNreWxha2UgJiBicm94dG9uKSAoRnJhbmNpc2NvIEplcmV6KQotIFRp ZGllZCB1cCB0aGUgcmVhZGFiaWxpdHkgZGVmaW5lcyAoRnJhbmNpc2NvIEplcmV6KQotIE5VTUJF UiBvZiBlbnRyaWVzIGRlZmluZXMgd3JvbmcuIChKaW0gQmlzaCkKLSBBZGRlZCBjb21tZW50cyB0 byBjbGVhciB1cCB0aGUgbWVhbmluZyBvZiB0aGUgdGFibGVzIChKaW0gQmlzaCkKClNpZ25lZC1v ZmYtYnk6IFBldGVyIEFudG9pbmUgPHBldGVyLmFudG9pbmVAaW50ZWwuY29tPgoKdjcgKEZyYW5j aXNjbyBKZXJleik6Ci0gRG9uJ3Qgd3JpdGUgTDMtc3BlY2lmaWMgTU9DU19FU0MvU0NDIHZhbHVl cyBpbnRvIHRoZSBlL0xMQyBjb250cm9sCiAgdGFibGVzLiAgUHJlZml4IEwzLXNwZWNpZmljIGRl ZmluZXMgY29uc2lzdGVudGx5IHdpdGggTDNfIGFuZAogIGUvTExDLXNwZWNpZmljIGRlZmluZXMg d2l0aCBMRV8gdG8gYXZvaWQgdGhpcyBraW5kIG9mIGNvbmZ1c2lvbiBpbgogIHRoZSBmdXR1cmUu Ci0gQ2hhbmdlIEwzQ0MgV1QgZGVmaW5lIGJhY2sgdG8gUkVTRVJWRUQgKG1hdGNoZXMgbXkgaGFy ZHdhcmUKICBkb2N1bWVudGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgcGF0Y2gsIHByb2JhYmx5IGEg bWlzdW5kZXJzdGFuZGluZwogIG9mIG15IG93biBwcmV2aW91cyBjb21tZW50KS4KLSBEcm9wIEFu ZHJvaWQgdGFibGVzLCBkZWZpbmUgbmV3IG1pbmltYWwgdGFibGVzIG1vcmUgc3VpdGFibGUgZm9y IHRoZQogIG9wZW4gc291cmNlIHN0YWNrLgotIEFkZCBjb21tZW50IHRoYXQgdGhlIE1PQ1MgdGFi bGVzIGFyZSBwYXJ0IG9mIHRoZSBrZXJuZWwgQUJJLgotIE1vdmUgaW50ZWxfbG9naWNhbF9yaW5n X2JlZ2luKCkgYW5kIF9hZHZhbmNlKCkgY2FsbHMgb25lIGxldmVsIGRvd24KICAoQ2hyaXMgV2ls c29uKS4KLSBNaW5vciBmb3JtYXR0aW5nIGFuZCBzdHlsZSBmaXhlcy4KCnY4IChGcmFuY2lzY28g SmVyZXopOgotIEFkZCB0YWJsZSBzaXplIHNhbml0eSBjaGVjayB0byBlbWl0X21vY3NfY29udHJv bC9sM2NjX3RhYmxlKCkgKENocmlzCiAgV2lsc29uKS4KLSBBZGQgY29tbWVudCBhYm91dCB1bmRl ZmluZWQgZW50cmllcyBiZWluZyBpbXBsaWNpdGx5IHNldCB0byB1bmNhY2hlZAogIGZvciBmb3J3 YXJkcyBjb21wYXRpYmlsaXR5LgoKU2lnbmVkLW9mZi1ieTogRnJhbmNpc2NvIEplcmV6IDxjdXJy b2plcmV6QHJpc2V1cC5uZXQ+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAg IHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICB8ICAgOSArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAgfCAgMTEgKy0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5oICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Nz LmMgfCAzMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX21vY3MuaCB8ICA1NyArKysrKysrCiA2IGZpbGVzIGNoYW5nZWQs IDQxNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggZGUy MTk2NS4uZTUyZTAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTM2LDYgKzM2LDcgQEAgaTkx NS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKIAkgIGk5MTVfdHJhY2VfcG9pbnRzLm8gXAogCSAg aW50ZWxfaG90cGx1Zy5vIFwKIAkgIGludGVsX2xyYy5vIFwKKwkgIGludGVsX21vY3MubyBcCiAJ ICBpbnRlbF9yaW5nYnVmZmVyLm8gXAogCSAgaW50ZWxfdW5jb3JlLm8KIApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmgKaW5kZXggMmEyOWJjYy4uOWIxNzI2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o CkBAIC03OTA2LDQgKzc5MDYsMTMgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7CiAjZGVm aW5lIF9QQUxFVFRFX0EgKGRldl9wcml2LT5pbmZvLmRpc3BsYXlfbW1pb19vZmZzZXQgKyAweGEw MDApCiAjZGVmaW5lIF9QQUxFVFRFX0IgKGRldl9wcml2LT5pbmZvLmRpc3BsYXlfbW1pb19vZmZz ZXQgKyAweGE4MDApCiAKKy8qIE1PQ1MgKE1lbW9yeSBPYmplY3QgQ29udHJvbCBTdGF0ZSkgcmVn aXN0ZXJzICovCisjZGVmaW5lIEdFTjlfTE5DRkNNT0NTMAkJKDB4QjAyMCkJLyogTDMgQ2FjaGUg Q29udHJvbCBiYXNlICovCisKKyNkZWZpbmUgR0VOOV9HRlhfTU9DU18wCQkoMHhjODAwKQkvKiBH cmFwaGljcyBNT0NTIGJhc2UgcmVnaXN0ZXIqLworI2RlZmluZSBHRU45X01GWDBfTU9DU18wCSgw eGM5MDApCS8qIE1lZGlhIDAgTU9DUyBiYXNlIHJlZ2lzdGVyKi8KKyNkZWZpbmUgR0VOOV9NRlgx X01PQ1NfMAkoMHhjQTAwKQkvKiBNZWRpYSAxIE1PQ1MgYmFzZSByZWdpc3RlciovCisjZGVmaW5l IEdFTjlfVkVCT1hfTU9DU18wCSgweGNCMDApCS8qIFZpZGVvIE1PQ1MgYmFzZSByZWdpc3Rlciov CisjZGVmaW5lIEdFTjlfQkxUX01PQ1NfMAkJKDB4Y2MwMCkJLyogQmxpdHRlciBNT0NTIGJhc2Ug cmVnaXN0ZXIqLworCiAjZW5kaWYgLyogX0k5MTVfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5jCmluZGV4IGQ0ZjhiNDMuLjQ2NmQxN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5j CkBAIC0xMzUsNiArMTM1LDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgPGRy bS9pOTE1X2RybS5oPgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfbW9j cy5oIgogCiAjZGVmaW5lIEdFTjlfTFJfQ09OVEVYVF9SRU5ERVJfU0laRSAoMjIgKiBQQUdFX1NJ WkUpCiAjZGVmaW5lIEdFTjhfTFJfQ09OVEVYVF9SRU5ERVJfU0laRSAoMjAgKiBQQUdFX1NJWkUp CkBAIC03NzIsOCArNzczLDcgQEAgc3RhdGljIGludCBsb2dpY2FsX3JpbmdfcHJlcGFyZShzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwgaW50IGJ5dGVzKQogICoKICAqIFJldHVybjog bm9uLXplcm8gaWYgdGhlIHJpbmdidWZmZXIgaXMgbm90IHJlYWR5IHRvIGJlIHdyaXR0ZW4gdG8u CiAgKi8KLXN0YXRpYyBpbnQgaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxLAotCQkJCSAgICBpbnQgbnVtX2R3b3JkcykKK2ludCBpbnRlbF9s b2dpY2FsX3JpbmdfYmVnaW4oc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBu dW1fZHdvcmRzKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKIAlpbnQg cmV0OwpAQCAtMTY3NSw2ICsxNjc1LDEzIEBAIHN0YXRpYyBpbnQgZ2VuOF9pbml0X3Jjc19jb250 ZXh0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQogCWlmIChyZXQpCiAJCXJldHVy biByZXQ7CiAKKwkvKgorCSAqIEZhaWxpbmcgdG8gcHJvZ3JhbSB0aGUgTU9DUyBpcyBub24tZmF0 YWwuVGhlIHN5c3RlbSB3aWxsIG5vdAorCSAqIHJ1biBhdCBwZWFrIHBlcmZvcm1hbmNlLiBTbyBn ZW5lcmF0ZSBhIHdhcm5pbmcgYW5kIGNhcnJ5IG9uLgorCSAqLworCWlmIChpbnRlbF9yY3NfY29u dGV4dF9pbml0X21vY3MocmVxKSAhPSAwKQorCQlEUk1fRVJST1IoIk1PQ1MgZmFpbGVkIHRvIHBy b2dyYW06IGV4cGVjdCBwZXJmb3JtYW5jZSBpc3N1ZXMuIik7CisKIAlyZXR1cm4gaW50ZWxfbHJf Y29udGV4dF9yZW5kZXJfc3RhdGVfaW5pdChyZXEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5oCmluZGV4IGUwMjk5ZmIuLjY0Zjg5Zjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaApA QCAtNDIsNiArNDIsNyBAQCBpbnQgaW50ZWxfbG9naWNhbF9yaW5nX3Jlc2VydmVfc3BhY2Uoc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIHZvaWQgaW50ZWxfbG9naWNhbF9y aW5nX3N0b3Aoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7CiB2b2lkIGludGVsX2xvZ2lj YWxfcmluZ19jbGVhbnVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwogaW50IGludGVs X2xvZ2ljYWxfcmluZ3NfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBpbnRlbF9s b2dpY2FsX3JpbmdfYmVnaW4oc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBu dW1fZHdvcmRzKTsKIAogaW50IGxvZ2ljYWxfcmluZ19mbHVzaF9hbGxfY2FjaGVzKHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKTsKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbW9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGJjYmUKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMKQEAgLTAsMCArMSwzMzcg QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICog T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpbnRl bF9tb2NzLmgiCisjaW5jbHVkZSAiaW50ZWxfbHJjLmgiCisjaW5jbHVkZSAiaW50ZWxfcmluZ2J1 ZmZlci5oIgorCisvKiBzdHJ1Y3R1cmVzIHJlcXVpcmVkICovCitzdHJ1Y3QgZHJtX2k5MTVfbW9j c19lbnRyeSB7CisJdTMyCWNvbnRyb2xfdmFsdWU7CisJdTE2CWwzY2NfdmFsdWU7Cit9OworCitz dHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSB7CisJdTMyCQkJCQlzaXplOworCWNvbnN0IHN0cnVj dCBkcm1faTkxNV9tb2NzX2VudHJ5CSp0YWJsZTsKK307CisKKy8qIERlZmluZXMgZm9yIHRoZSB0 YWJsZXMgKFhYWF9NT0NTXzAgLSBYWFhfTU9DU182MykgKi8KKyNkZWZpbmUgTEVfQ0FDSEVBQklM SVRZKHZhbHVlKQkodmFsdWUgPDwgMCkKKyNkZWZpbmUgTEVfVEdUX0NBQ0hFKHZhbHVlKQkodmFs dWUgPDwgMikKKyNkZWZpbmUgTEVfTFJVTSh2YWx1ZSkJCSh2YWx1ZSA8PCA0KQorI2RlZmluZSBM RV9BT00odmFsdWUpCQkodmFsdWUgPDwgNikKKyNkZWZpbmUgTEVfUlNDKHZhbHVlKQkJKHZhbHVl IDw8IDcpCisjZGVmaW5lIExFX1NDQyh2YWx1ZSkJCSh2YWx1ZSA8PCA4KQorI2RlZmluZSBMRV9Q Rk0odmFsdWUpCQkodmFsdWUgPDwgMTEpCisjZGVmaW5lIExFX1NDRih2YWx1ZSkJCSh2YWx1ZSA8 PCAxNCkKKworLyogRGVmaW5lcyBmb3IgdGhlIHRhYmxlcyAoTE5DRk1PQ1MwIC0gTE5DRk1PQ1Mz MSkgLSB0d28gZW50cmllcyBwZXIgd29yZCAqLworI2RlZmluZSBMM19FU0ModmFsdWUpCQkodmFs dWUgPDwgMCkKKyNkZWZpbmUgTDNfU0NDKHZhbHVlKQkJKHZhbHVlIDw8IDEpCisjZGVmaW5lIEwz X0NBQ0hFQUJJTElUWSh2YWx1ZSkJKHZhbHVlIDw8IDQpCisKKy8qIEhlbHBlciBkZWZpbmVzICov CisjZGVmaW5lIEdFTjlfTlVNX01PQ1NfRU5UUklFUwkoNjIpICAvKiA2MiBvdXQgb2YgNjQgLSA2 MyAmIDY0IGFyZSByZXNlcnZlZC4gKi8KKworLyogKGUpTExDIGNhY2hpbmcgb3B0aW9ucyAqLwor I2RlZmluZSBMRV9QQUdFVEFCTEUJCSgwKQorI2RlZmluZSBMRV9VQwkJCSgxKQorI2RlZmluZSBM RV9XVAkJCSgyKQorI2RlZmluZSBMRV9XQgkJCSgzKQorCisvKiBMMyBjYWNoaW5nIG9wdGlvbnMg Ki8KKyNkZWZpbmUgTDNfRElSRUNUCQkoMCkKKyNkZWZpbmUgTDNfVUMJCQkoMSkKKyNkZWZpbmUg TDNfUkVTRVJWRUQJCSgyKQorI2RlZmluZSBMM19XQgkJCSgzKQorCisvKiBUYXJnZXQgY2FjaGUg Ki8KKyNkZWZpbmUgRUxMQwkJCSgwKQorI2RlZmluZSBMTEMJCQkoMSkKKyNkZWZpbmUgTExDX0VM TEMJCSgyKQorCisvKgorICogTU9DUyB0YWJsZXMKKyAqCisgKiBUaGVzZSBhcmUgdGhlIE1PQ1Mg dGFibGVzIHRoYXQgYXJlIHByb2dyYW1tZWQgYWNyb3NzIGFsbCB0aGUgcmluZ3MuCisgKiBUaGUg Y29udHJvbCB2YWx1ZSBpcyBwcm9ncmFtbWVkIHRvIGFsbCB0aGUgcmluZ3MgdGhhdCBzdXBwb3J0 IHRoZQorICogTU9DUyByZWdpc3RlcnMuIFdoaWxlIHRoZSBsM2NjX3ZhbHVlcyBhcmUgb25seSBw cm9ncmFtbWVkIHRvIHRoZQorICogTE5DRkNNT0NTMCAtIExOQ0ZDTU9DUzMyIHJlZ2lzdGVycy4K KyAqCisgKiBUaGVzZSB0YWJsZXMgYXJlIGludGVuZGVkIHRvIGJlIGtlcHQgcmVhc29uYWJseSBj b25zaXN0ZW50IGFjcm9zcworICogcGxhdGZvcm1zLiBIb3dldmVyIHNvbWUgb2YgdGhlIGZpZWxk cyBhcmUgbm90IGFwcGxpY2FibGUgdG8gYWxsIG9mCisgKiB0aGVtLgorICoKKyAqIEVudHJpZXMg bm90IHBhcnQgb2YgdGhlIGZvbGxvd2luZyB0YWJsZXMgYXJlIHVuZGVmaW5lZCBhcyBmYXIgYXMK KyAqIHVzZXJzcGFjZSBpcyBjb25jZXJuZWQgYW5kIHNob3VsZG4ndCBiZSByZWxpZWQgdXBvbi4g IEZvciB0aGUgdGltZQorICogYmVpbmcgdGhleSB3aWxsIGJlIGltcGxpY2l0bHkgaW5pdGlhbGl6 ZWQgdG8gdGhlIHN0cmljdGVzdCBjYWNoaW5nCisgKiBjb25maWd1cmF0aW9uICh1bmNhY2hlZCkg dG8gZ3VhcmFudGVlIGZvcndhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAorICogdXNlcnNwYWNlIHBy b2dyYW1zIHdyaXR0ZW4gYWdhaW5zdCBtb3JlIHJlY2VudCBrZXJuZWxzIHByb3ZpZGluZworICog YWRkaXRpb25hbCBNT0NTIGVudHJpZXMuCisgKgorICogTk9URTogVGhlc2UgdGFibGVzIE1VU1Qg c3RhcnQgd2l0aCBiZWluZyB1bmNhY2hlZCBhbmQgdGhlIGxlbmd0aAorICogICAgICAgTVVTVCBi ZSBsZXNzIHRoYW4gNjMgYXMgdGhlIGxhc3QgdHdvIHJlZ2lzdGVycyBhcmUgcmVzZXJ2ZWQKKyAq ICAgICAgIGJ5IHRoZSBoYXJkd2FyZS4gIFRoZXNlIHRhYmxlcyBhcmUgcGFydCBvZiB0aGUga2Vy bmVsIEFCSSBhbmQKKyAqICAgICAgIG1heSBvbmx5IGJlIHVwZGF0ZWQgaW5jcmVtZW50YWxseSBi eSBhZGRpbmcgZW50cmllcyBhdCB0aGUKKyAqICAgICAgIGVuZC4KKyAqLworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1faTkxNV9tb2NzX2VudHJ5IHNreWxha2VfbW9jc190YWJsZVtdID0geworCS8q IHsgMHgwMDAwMDAwOSwgMHgwMDEwIH0gKi8KKwl7IChMRV9DQUNIRUFCSUxJVFkoTEVfVUMpIHwg TEVfVEdUX0NBQ0hFKExMQ19FTExDKSB8IExFX0xSVU0oMCkgfAorCSAgIExFX0FPTSgwKSB8IExF X1JTQygwKSB8IExFX1NDQygwKSB8IExFX1BGTSgwKSB8IExFX1NDRigwKSksCisJICAoTDNfRVND KDApIHwgTDNfU0NDKDApIHwgTDNfQ0FDSEVBQklMSVRZKEwzX1VDKSkgfSwKKwkvKiB7IDB4MDAw MDAwMzgsIDB4MDAzMCB9ICovCisJeyAoTEVfQ0FDSEVBQklMSVRZKExFX1BBR0VUQUJMRSkgfCBM RV9UR1RfQ0FDSEUoTExDX0VMTEMpIHwgTEVfTFJVTSgzKSB8CisJICAgTEVfQU9NKDApIHwgTEVf UlNDKDApIHwgTEVfU0NDKDApIHwgTEVfUEZNKDApIHwgTEVfU0NGKDApKSwKKwkgIChMM19FU0Mo MCkgfCBMM19TQ0MoMCkgfCBMM19DQUNIRUFCSUxJVFkoTDNfV0IpKSB9LAorCS8qIHsgMHgwMDAw MDAzYiwgMHgwMDMwIH0gKi8KKwl7IChMRV9DQUNIRUFCSUxJVFkoTEVfV0IpIHwgTEVfVEdUX0NB Q0hFKExMQ19FTExDKSB8IExFX0xSVU0oMykgfAorCSAgIExFX0FPTSgwKSB8IExFX1JTQygwKSB8 IExFX1NDQygwKSB8IExFX1BGTSgwKSB8IExFX1NDRigwKSksCisJICAoTDNfRVNDKDApIHwgTDNf U0NDKDApIHwgTDNfQ0FDSEVBQklMSVRZKEwzX1dCKSkgfQorfTsKKworLyogTk9URTogdGhlIExF X1RHVF9DQUNIRSBpcyBub3QgdXNlZCBvbiBCcm94dG9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9pOTE1X21vY3NfZW50cnkgYnJveHRvbl9tb2NzX3RhYmxlW10gPSB7CisJLyogeyAweDAw MDAwMDA5LCAweDAwMTAgfSAqLworCXsgKExFX0NBQ0hFQUJJTElUWShMRV9VQykgfCBMRV9UR1Rf Q0FDSEUoTExDX0VMTEMpIHwgTEVfTFJVTSgwKSB8CisJICAgTEVfQU9NKDApIHwgTEVfUlNDKDAp IHwgTEVfU0NDKDApIHwgTEVfUEZNKDApIHwgTEVfU0NGKDApKSwKKwkgIChMM19FU0MoMCkgfCBM M19TQ0MoMCkgfCBMM19DQUNIRUFCSUxJVFkoTDNfVUMpKSB9LAorCS8qIHsgMHgwMDAwMDAzOCwg MHgwMDMwIH0gKi8KKwl7IChMRV9DQUNIRUFCSUxJVFkoTEVfUEFHRVRBQkxFKSB8IExFX1RHVF9D QUNIRShMTENfRUxMQykgfCBMRV9MUlVNKDMpIHwKKwkgICBMRV9BT00oMCkgfCBMRV9SU0MoMCkg fCBMRV9TQ0MoMCkgfCBMRV9QRk0oMCkgfCBMRV9TQ0YoMCkpLAorCSAgKEwzX0VTQygwKSB8IEwz X1NDQygwKSB8IEwzX0NBQ0hFQUJJTElUWShMM19XQikpIH0sCisJLyogeyAweDAwMDAwMDNiLCAw eDAwMzAgfSAqLworCXsgKExFX0NBQ0hFQUJJTElUWShMRV9XQikgfCBMRV9UR1RfQ0FDSEUoTExD X0VMTEMpIHwgTEVfTFJVTSgzKSB8CisJICAgTEVfQU9NKDApIHwgTEVfUlNDKDApIHwgTEVfU0ND KDApIHwgTEVfUEZNKDApIHwgTEVfU0NGKDApKSwKKwkgIChMM19FU0MoMCkgfCBMM19TQ0MoMCkg fCBMM19DQUNIRUFCSUxJVFkoTDNfV0IpKSB9Cit9OworCisvKioKKyAqIGdldF9tb2NzX3NldHRp bmdzCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgdmFsdWVzIG9mIHRoZSBN T0NTIHRhYmxlIHRoYXQgbmVlZHMgdG8KKyAqIGJlIHByb2dyYW1tZWQgZm9yIHRoZSBwbGF0Zm9y bS4gSXQgd2lsbCByZXR1cm4gdGhlIHZhbHVlcyB0aGF0IG5lZWQKKyAqIHRvIGJlIHByb2dyYW1t ZWQgYW5kIGlmIHRoZXkgbmVlZCB0byBiZSBwcm9ncmFtbWVkLgorICoKKyAqIElmIHRoZSByZXR1 cm4gdmFsdWVzIGlzIGZhbHNlIHRoZW4gdGhlIHJlZ2lzdGVycyBkbyBub3QgbmVlZCBwcm9ncmFt bWluZy4KKyAqLworc3RhdGljIGJvb2wgZ2V0X21vY3Nfc2V0dGluZ3Moc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9tb2NzX3RhYmxlICp0YWJsZSkKK3sK Kwlib29sIHJlc3VsdCA9IGZhbHNlOworCisJaWYgKElTX1NLWUxBS0UoZGV2KSkgeworCQl0YWJs ZS0+c2l6ZSAgPSBBUlJBWV9TSVpFKHNreWxha2VfbW9jc190YWJsZSk7CisJCXRhYmxlLT50YWJs ZSA9IHNreWxha2VfbW9jc190YWJsZTsKKwkJcmVzdWx0ID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKElT X0JST1hUT04oZGV2KSkgeworCQl0YWJsZS0+c2l6ZSAgPSBBUlJBWV9TSVpFKGJyb3h0b25fbW9j c190YWJsZSk7CisJCXRhYmxlLT50YWJsZSA9IGJyb3h0b25fbW9jc190YWJsZTsKKwkJcmVzdWx0 ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQkvKiBQbGF0Zm9ybSB0aGF0IHNob3VsZCBoYXZlIGEgTU9D UyB0YWJsZSBkb2VzIG5vdCAqLworCQlXQVJOX09OKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDkp OworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZW1pdF9tb2NzX2NvbnRyb2xf dGFibGUoKSAtIGVtaXQgdGhlIG1vY3MgY29udHJvbCB0YWJsZQorICogQHJlcToJUmVxdWVzdCB0 byBzZXQgdXAgdGhlIE1PQ1MgdGFibGUgZm9yLgorICogQHRhYmxlOglUaGUgdmFsdWVzIHRvIHBy b2dyYW0gaW50byB0aGUgY29udHJvbCByZWdzLgorICogQHJlZ19iYXNlOglUaGUgYmFzZSBmb3Ig dGhlIGVuZ2luZSB0aGF0IG5lZWRzIHRvIGJlIHByb2dyYW1tZWQuCisgKgorICogVGhpcyBmdW5j dGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9MT0FEX1JFR0lTVEVSX0lNTSBjb21tYW5kIGZvciB0aGUK KyAqIGdpdmVuIHRhYmxlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRyZXNzLgorICoKKyAqIEBy ZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgdGhlIGVycm9yIHN0YXR1cy4KKyAqLworc3Rh dGljIGludCBlbWl0X21vY3NfY29udHJvbF90YWJsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSAqdGFibGUs CisJCQkJICAgdTMyIHJlZ19iYXNlKQoreworCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5n YnVmID0gcmVxLT5yaW5nYnVmOworCXVuc2lnbmVkIGludCBpbmRleDsKKwlpbnQgcmV0OworCisJ aWYgKFdBUk5fT04odGFibGUtPnNpemUgPiBHRU45X05VTV9NT0NTX0VOVFJJRVMpKQorCQlyZXR1 cm4gLUVOT0RFVjsKKworCXJldCA9IGludGVsX2xvZ2ljYWxfcmluZ19iZWdpbihyZXEsIDIgKyAy ICogR0VOOV9OVU1fTU9DU19FTlRSSUVTKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERUJVRygiaW50 ZWxfbG9naWNhbF9yaW5nX2JlZ2luIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLAorCQkJCU1JX0xPQURfUkVH SVNURVJfSU1NKEdFTjlfTlVNX01PQ1NfRU5UUklFUykpOworCisJZm9yIChpbmRleCA9IDA7IGlu ZGV4IDwgdGFibGUtPnNpemU7IGluZGV4KyspIHsKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQo cmluZ2J1ZiwgcmVnX2Jhc2UgKyBpbmRleCAqIDQpOworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1p dChyaW5nYnVmLAorCQkJCQl0YWJsZS0+dGFibGVbaW5kZXhdLmNvbnRyb2xfdmFsdWUpOworCX0K KworCS8qCisJICogT2ssIG5vdyBzZXQgdGhlIHVudXNlZCBlbnRyaWVzIHRvIHVuY2FjaGVkLiBU aGVzZSBlbnRyaWVzCisJICogYXJlIG9mZmljaWFsbHkgdW5kZWZpbmVkIGFuZCBubyBjb250cmFj dCBmb3IgdGhlIGNvbnRlbnRzCisJICogYW5kIHNldHRpbmdzIGlzIGdpdmVuIGZvciB0aGVzZSBl bnRyaWVzLgorCSAqCisJICogRW50cnkgMCBpbiB0aGUgdGFibGUgaXMgdW5jYWNoZWQgLSBzbyB3 ZSBhcmUganVzdCB3cml0aW5nCisJICogdGhhdCB2YWx1ZSB0byBhbGwgdGhlIHVzZWQgZW50cmll cy4KKwkgKi8KKwlmb3IgKDsgaW5kZXggPCBHRU45X05VTV9NT0NTX0VOVFJJRVM7IGluZGV4Kysp IHsKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgcmVnX2Jhc2UgKyBpbmRleCAq IDQpOworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCB0YWJsZS0+dGFibGVbMF0u Y29udHJvbF92YWx1ZSk7CisJfQorCisJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1Ziwg TUlfTk9PUCk7CisJaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2UocmluZ2J1Zik7CisKKwlyZXR1 cm4gMDsKK30KKworLyoqCisgKiBlbWl0X21vY3NfbDNjY190YWJsZSgpIC0gZW1pdCB0aGUgbW9j cyBjb250cm9sIHRhYmxlCisgKiBAcmVxOglSZXF1ZXN0IHRvIHNldCB1cCB0aGUgTU9DUyB0YWJs ZSBmb3IuCisgKiBAdGFibGU6CVRoZSB2YWx1ZXMgdG8gcHJvZ3JhbSBpbnRvIHRoZSBjb250cm9s IHJlZ3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9MT0FEX1JFR0lT VEVSX0lNTSBjb21tYW5kIGZvciB0aGUKKyAqIGdpdmVuIHRhYmxlIHN0YXJ0aW5nIGF0IHRoZSBn aXZlbiBhZGRyZXNzLiBUaGlzIHJlZ2lzdGVyIHNldCBpcworICogcHJvZ3JhbW1lZCBpbiBwYWly cy4KKyAqCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHRoZSBlcnJvciBzdGF0 dXMuCisgKi8KK3N0YXRpYyBpbnQgZW1pdF9tb2NzX2wzY2NfdGFibGUoc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXEsCisJCQkJY29uc3Qgc3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUg KnRhYmxlKQoreworCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0gcmVxLT5yaW5n YnVmOworCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgdmFsdWU7 CisJdTMyIGZpbGxlciA9ICh0YWJsZS0+dGFibGVbMF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgfAor CQkJKCh0YWJsZS0+dGFibGVbMF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgPDwgMTYpOworCWludCBy ZXQ7CisKKwlpZiAoV0FSTl9PTih0YWJsZS0+c2l6ZSA+IEdFTjlfTlVNX01PQ1NfRU5UUklFUykp CisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKHJl cSwgMiArIEdFTjlfTlVNX01PQ1NfRU5UUklFUyk7CisJaWYgKHJldCkgeworCQlEUk1fREVCVUco ImludGVsX2xvZ2ljYWxfcmluZ19iZWdpbiBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwKKwkJCU1JX0xPQURf UkVHSVNURVJfSU1NKEdFTjlfTlVNX01PQ1NfRU5UUklFUyAvIDIpKTsKKworCWZvciAoaSA9IDAs IGNvdW50ID0gMDsgaSA8IHRhYmxlLT5zaXplIC8gMjsgaSsrLCBjb3VudCArPSAyKSB7CisJCXZh bHVlID0gKHRhYmxlLT50YWJsZVtjb3VudF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgfAorCQkJKCh0 YWJsZS0+dGFibGVbY291bnQgKyAxXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSA8PCAxNik7CisKKwkJ aW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmluZ2J1ZiwgR0VOOV9MTkNGQ01PQ1MwICsgaSAqIDQp OworCQlpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdChyaW5nYnVmLCB2YWx1ZSk7CisJfQorCisJaWYg KHRhYmxlLT5zaXplICYgMHgwMSkgeworCQkvKiBPZGQgdGFibGUgc2l6ZSAtIDEgbGVmdCBvdmVy ICovCisJCXZhbHVlID0gKHRhYmxlLT50YWJsZVtjb3VudF0ubDNjY192YWx1ZSAmIDB4ZmZmZikg fAorCQkJKCh0YWJsZS0+dGFibGVbMF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgPDwgMTYpOworCX0g ZWxzZQorCQl2YWx1ZSA9IGZpbGxlcjsKKworCS8qCisJICogTm93IHNldCB0aGUgcmVzdCBvZiB0 aGUgdGFibGUgdG8gdW5jYWNoZWQgLSB1c2UgZW50cnkgMCBhcworCSAqIHRoaXMgd2lsbCBiZSB1 bmNhY2hlZC4gTGVhdmUgdGhlIGxhc3QgcGFpciB1bmluaXRpYWxpc2VkIGFzCisJICogdGhleSBh cmUgcmVzZXJ2ZWQgYnkgdGhlIGhhcmR3YXJlLgorCSAqLworCWZvciAoOyBpIDwgR0VOOV9OVU1f TU9DU19FTlRSSUVTIC8gMjsgaSsrKSB7CisJCWludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdi dWYsIEdFTjlfTE5DRkNNT0NTMCArIGkgKiA0KTsKKwkJaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQo cmluZ2J1ZiwgdmFsdWUpOworCisJCXZhbHVlID0gZmlsbGVyOworCX0KKworCWludGVsX2xvZ2lj YWxfcmluZ19lbWl0KHJpbmdidWYsIE1JX05PT1ApOworCWludGVsX2xvZ2ljYWxfcmluZ19hZHZh bmNlKHJpbmdidWYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaW50ZWxfcmNzX2NvbnRl eHRfaW5pdF9tb2NzKCkgLSBwcm9ncmFtIHRoZSBNT0NTIHJlZ2lzdGVyLgorICoKKyAqIEByZXE6 CVJlcXVlc3QgdG8gc2V0IHVwIHRoZSBNT0NTIHRhYmxlcyBmb3IuCisgKgorICogVGhpcyBmdW5j dGlvbiB3aWxsIGVtaXQgYSBiYXRjaCBidWZmZXIgd2l0aCB0aGUgdmFsdWVzIHJlcXVpcmVkIGZv cgorICogcHJvZ3JhbW1pbmcgdGhlIE1PQ1MgcmVnaXN0ZXIgdmFsdWVzIGZvciBhbGwgdGhlIGN1 cnJlbnRseSBzdXBwb3J0ZWQKKyAqIHJpbmdzLgorICoKKyAqIFRoZXNlIHJlZ2lzdGVycyBhcmUg cGFydGlhbGx5IHN0b3JlZCBpbiB0aGUgUkNTIGNvbnRleHQsIHNvIHRoZXkgYXJlCisgKiBlbWl0 dGVkIGF0IHRoZSBzYW1lIHRpbWUgc28gdGhhdCB3aGVuIGEgY29udGV4dCBpcyBjcmVhdGVkIHRo ZXNlIHJlZ2lzdGVycworICogYXJlIHNldCB1cC4gVGhlc2UgcmVnaXN0ZXJzIGhhdmUgdG8gYmUg ZW1pdHRlZCBpbnRvIHRoZSBzdGFydCBvZiB0aGUKKyAqIGNvbnRleHQgYXMgc2V0dGluZyB0aGUg RUxTUCB3aWxsIHJlLWluaXQgc29tZSBvZiB0aGVzZSByZWdpc3RlcnMgYmFjaworICogdG8gdGhl IGh3IHZhbHVlcy4KKyAqCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHRoZSBl cnJvciBzdGF0dXMuCisgKi8KK2ludCBpbnRlbF9yY3NfY29udGV4dF9pbml0X21vY3Moc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGRybV9pOTE1X21vY3NfdGFi bGUgdDsKKwlpbnQgcmV0OworCisJaWYgKGdldF9tb2NzX3NldHRpbmdzKHJlcS0+cmluZy0+ZGV2 LCAmdCkpIHsKKwkJLyogUHJvZ3JhbSB0aGUgY29udHJvbCByZWdpc3RlcnMgKi8KKwkJcmV0ID0g ZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmVxLCAmdCwgR0VOOV9HRlhfTU9DU18wKTsKKwkJaWYg KHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUo cmVxLCAmdCwgR0VOOV9NRlgwX01PQ1NfMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0Owor CisJCXJldCA9IGVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJlcSwgJnQsIEdFTjlfTUZYMV9NT0NT XzApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBlbWl0X21vY3NfY29u dHJvbF90YWJsZShyZXEsICZ0LCBHRU45X1ZFQk9YX01PQ1NfMCk7CisJCWlmIChyZXQpCisJCQly ZXR1cm4gcmV0OworCisJCXJldCA9IGVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJlcSwgJnQsIEdF TjlfQkxUX01PQ1NfMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIE5vdyBw cm9ncmFtIHRoZSBsM2NjIHJlZ2lzdGVycyAqLworCQlyZXQgPSBlbWl0X21vY3NfbDNjY190YWJs ZShyZXEsICZ0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJRFJNX0RFQlVHKCJN T0NTOiBUYWJsZSBzZXQgaW4gY29udGV4dC5cbiIpOworCX0gZWxzZSB7CisJCURSTV9ERUJVRygi TU9DUzogVGFibGUgbm90IHN1cHBvcnRlZCBvbiBwbGF0Zm9ybS5cbiIpOworCX0KKworCXJldHVy biAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjc2ZTQ1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9tb2NzLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisg KiBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIElOVEVMX01PQ1NfSAorI2RlZmluZSBJTlRFTF9N T0NTX0gKKworLyoqCisgKiBET0M6IE1lbW9yeSBPYmplY3RzIENvbnRyb2wgU3RhdGUgKE1PQ1Mp CisgKgorICogTW90aXZhdGlvbjoKKyAqIEluIHByZXZpb3VzIEdlbnMgdGhlIE1PQ1Mgc2V0dGlu Z3Mgd2FzIGEgdmFsdWUgdGhhdCB3YXMgc2V0IGJ5IHVzZXIgbGFuZCBhcworICogcGFydCBvZiB0 aGUgYmF0Y2guIEluIEdlbjkgdGhpcyBoYXMgY2hhbmdlZCB0byBiZSBhIHNpbmdsZSB0YWJsZSAo cGVyIHJpbmcpCisgKiB0aGF0IGFsbCBiYXRjaGVzIG5vdyByZWZlcmVuY2UgYnkgaW5kZXggaW5z dGVhZCBvZiBwcm9ncmFtbWluZyB0aGUgTU9DUworICogZGlyZWN0bHkuCisgKgorICogVGhlIG9u ZSB3cmlua2xlIGluIHRoaXMgaXMgdGhhdCBvbmx5IFBBUlQgb2YgdGhlIE1PQ1MgdGFibGVzIGFy ZSBpbmNsdWRlZAorICogaW4gY29udGV4dCAoVGhlIEdGWF9NT0NTXzAgLSBHRlhfTU9DU182NCBh bmQgdGhlIExOQ0ZDTU9DUzAgLSBMTkNGQ01PQ1MzMgorICogcmVnaXN0ZXJzKS4gVGhlIHJlc3Qg YXJlIG5vdCAodGhlIHNldHRpbmdzIGZvciB0aGUgb3RoZXIgcmluZ3MpLgorICoKKyAqIFRoaXMg dGFibGUgbmVlZHMgdG8gYmUgc2V0IGF0IHN5c3RlbSBzdGFydC11cCBiZWNhdXNlIHRoZSB3YXkg dGhlIHRhYmxlCisgKiBpbnRlcmFjdHMgd2l0aCB0aGUgY29udGV4dHMgYW5kIHRoZSBHbW1MaWIg aW50ZXJmYWNlLgorICoKKyAqCisgKiBJbXBsZW1lbnRhdGlvbjoKKyAqCisgKiBUaGUgdGFibGVz IChvbmUgcGVyIHN1cHBvcnRlZCBwbGF0Zm9ybSkgYXJlIGRlZmluZWQgaW4gaW50ZWxfbW9jcy5j CisgKiBhbmQgYXJlIHByb2dyYW1tZWQgaW4gdGhlIGZpcnN0IGJhdGNoIGFmdGVyIHRoZSBjb250 ZXh0IGlzIGxvYWRlZAorICogKHdpdGggdGhlIGhhcmR3YXJlIHdvcmthcm91bmRzKS4gVGhpcyB3 aWxsIHRoZW4gbGV0IHRoZSB1c3VhbAorICogY29udGV4dCBoYW5kbGluZyBrZWVwIHRoZSBNT0NT IGluIHN0ZXAuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAiaTkxNV9k cnYuaCIKKworaW50IGludGVsX3Jjc19jb250ZXh0X2luaXRfbW9jcyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSk7CisKKyNlbmRpZgotLSAKMi40LjMKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==