From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2FDC7C4361B for ; Fri, 18 Dec 2020 06:04:41 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D63E823A5B for ; Fri, 18 Dec 2020 06:04:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D63E823A5B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B6B9289A8B; Fri, 18 Dec 2020 06:04:38 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [205.139.111.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id EF89D89A8B for ; Fri, 18 Dec 2020 06:04:34 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-488-XKMHIj8nMnq6Onm_JBMqMw-1; Fri, 18 Dec 2020 01:04:31 -0500 X-MC-Unique: XKMHIj8nMnq6Onm_JBMqMw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 55980100558A for ; Fri, 18 Dec 2020 06:04:30 +0000 (UTC) Received: from dreadlord-bne-redhat-com.bne.redhat.com (unknown [10.64.32.209]) by smtp.corp.redhat.com (Postfix) with ESMTP id BC6AA60BE5 for ; Fri, 18 Dec 2020 06:04:29 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Fri, 18 Dec 2020 16:04:13 +1000 Message-Id: <20201218060420.3203-7-airlied@gmail.com> In-Reply-To: <20201218060420.3203-1-airlied@gmail.com> References: <20201218060420.3203-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 06/13] drm/i915: refactor some crtc code out of intel display. (v2) X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoZXJlIG1heSBiZSBtb3Jl IGNydGMgY29kZSB0aGF0IGNhbiBiZSBwdWxsZWQgb3V0LCBidXQgdGhpcwppcyBhIGdvb2Qgc3Rh cnQuCgp2MjogbW92ZSBwbGFuZSBiZWZvcmUgdGhpcy4KClNpZ25lZC1vZmYtYnk6IERhdmUgQWly bGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CltKYW5pOiBjbGVhbmVkIHVwIGludGVsX2NydGMuaCBh IGJpdC5dClNpZ25lZC1vZmYtYnk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+ Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmMgICAgfCAzMjYgKysr KysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRj LmggICAgfCAgMjIgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eS5jIHwgMzA2ICstLS0tLS0tLS0tLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDM1MCBpbnNlcnRp b25zKCspLCAzMDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5k ZXggYzFmYTVhOTMxMGY5Li45ZjUwMTY1MDA0ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0x OTYsNiArMTk2LDcgQEAgaTkxNS15ICs9IFwKIAlkaXNwbGF5L2ludGVsX2NvbG9yLm8gXAogCWRp c3BsYXkvaW50ZWxfY29tYm9fcGh5Lm8gXAogCWRpc3BsYXkvaW50ZWxfY29ubmVjdG9yLm8gXAor CWRpc3BsYXkvaW50ZWxfY3J0Yy5vIFwKIAlkaXNwbGF5L2ludGVsX2Nzci5vIFwKIAlkaXNwbGF5 L2ludGVsX2N1cnNvci5vIFwKIAlkaXNwbGF5L2ludGVsX2Rpc3BsYXkubyBcCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uYWQ2M2RmMTYzODUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmMKQEAgLTAsMCArMSwzMjYgQEAKKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRl bCBDb3Jwb3JhdGlvbgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgImludGVsX2F0b21pYy5o IgorI2luY2x1ZGUgImludGVsX2F0b21pY19wbGFuZS5oIgorI2luY2x1ZGUgImludGVsX2NvbG9y LmgiCisjaW5jbHVkZSAiaW50ZWxfY3J0Yy5oIgorI2luY2x1ZGUgImludGVsX2N1cnNvci5oIgor I2luY2x1ZGUgImludGVsX2Rpc3BsYXlfZGVidWdmcy5oIgorI2luY2x1ZGUgImludGVsX2Rpc3Bs YXlfdHlwZXMuaCIKKyNpbmNsdWRlICJpbnRlbF9waXBlX2NyYy5oIgorI2luY2x1ZGUgImludGVs X3Nwcml0ZS5oIgorI2luY2x1ZGUgImk5eHhfcGxhbmUuaCIKKworc3RhdGljIHZvaWQgYXNzZXJ0 X3ZibGFua19kaXNhYmxlZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaWYgKEk5MTVfU1RB VEVfV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpID09IDApKQorCQlkcm1fY3J0Y192 YmxhbmtfcHV0KGNydGMpOworfQorCit1MzIgaW50ZWxfY3J0Y19nZXRfdmJsYW5rX2NvdW50ZXIo c3RydWN0IGludGVsX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNy dGMtPmJhc2UuZGV2OworCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYtPnZi bGFua1tkcm1fY3J0Y19pbmRleCgmY3J0Yy0+YmFzZSldOworCisJaWYgKCF2YmxhbmstPm1heF92 YmxhbmtfY291bnQpCisJCXJldHVybiAodTMyKWRybV9jcnRjX2FjY3VyYXRlX3ZibGFua19jb3Vu dCgmY3J0Yy0+YmFzZSk7CisKKwlyZXR1cm4gY3J0Yy0+YmFzZS5mdW5jcy0+Z2V0X3ZibGFua19j b3VudGVyKCZjcnRjLT5iYXNlKTsKK30KKwordTMyIGludGVsX2NydGNfbWF4X3ZibGFua19jb3Vu dChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPnVhcGkuY3J0 Yy0+ZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19z dGF0ZS0+dWFwaS5jcnRjKTsKKwl1MzIgbW9kZV9mbGFncyA9IGNydGMtPm1vZGVfZmxhZ3M7CisK KwkvKgorCSAqIEZyb20gR2VuIDExLCBJbiBjYXNlIG9mIGRzaSBjbWQgbW9kZSwgZnJhbWUgY291 bnRlciB3b3VsZG50CisJICogaGF2ZSB1cGRhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgVEUsIGlm IHdlIHdhbnQgdG8gdXNlCisJICogdGhlIGh3IGNvdW50ZXIsIHRoZW4gd2Ugd291bGQgZmluZCBp dCB1cGRhdGVkIGluIG9ubHkKKwkgKiB0aGUgbmV4dCBURSwgaGVuY2Ugc3dpdGNoaW5nIHRvIHN3 IGNvdW50ZXIuCisJICovCisJaWYgKG1vZGVfZmxhZ3MgJiAoSTkxNV9NT0RFX0ZMQUdfRFNJX1VT RV9URTAgfCBJOTE1X01PREVfRkxBR19EU0lfVVNFX1RFMSkpCisJCXJldHVybiAwOworCisJLyoK KwkgKiBPbiBpOTY1Z20gdGhlIGhhcmR3YXJlIGZyYW1lIGNvdW50ZXIgcmVhZHMKKwkgKiB6ZXJv IHdoZW4gdGhlIFRWIGVuY29kZXIgaXMgZW5hYmxlZCA6KAorCSAqLworCWlmIChJU19JOTY1R00o ZGV2X3ByaXYpICYmCisJICAgIChjcnRjX3N0YXRlLT5vdXRwdXRfdHlwZXMgJiBCSVQoSU5URUxf T1VUUFVUX1RWT1VUKSkpCisJCXJldHVybiAwOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gNSB8fCBJU19HNFgoZGV2X3ByaXYpKQorCQlyZXR1cm4gMHhmZmZmZmZmZjsgLyogZnVsbCAz MiBiaXQgY291bnRlciAqLworCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMykKKwkJ cmV0dXJuIDB4ZmZmZmZmOyAvKiBvbmx5IDI0IGJpdHMgb2YgZnJhbWUgY291bnQgKi8KKwllbHNl CisJCXJldHVybiAwOyAvKiBHZW4yIGRvZXNuJ3QgaGF2ZSBhIGhhcmR3YXJlIGZyYW1lIGNvdW50 ZXIgKi8KK30KKwordm9pZCBpbnRlbF9jcnRjX3ZibGFua19vbihjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRv X2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKKworCWFzc2VydF92YmxhbmtfZGlz YWJsZWQoJmNydGMtPmJhc2UpOworCWRybV9jcnRjX3NldF9tYXhfdmJsYW5rX2NvdW50KCZjcnRj LT5iYXNlLAorCQkJCSAgICAgIGludGVsX2NydGNfbWF4X3ZibGFua19jb3VudChjcnRjX3N0YXRl KSk7CisJZHJtX2NydGNfdmJsYW5rX29uKCZjcnRjLT5iYXNlKTsKK30KKwordm9pZCBpbnRlbF9j cnRjX3ZibGFua19vZmYoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp Cit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUt PnVhcGkuY3J0Yyk7CisKKwlkcm1fY3J0Y192Ymxhbmtfb2ZmKCZjcnRjLT5iYXNlKTsKKwlhc3Nl cnRfdmJsYW5rX2Rpc2FibGVkKCZjcnRjLT5iYXNlKTsKK30KKworc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmludGVsX2NydGNfc3RhdGVfYWxsb2Moc3RydWN0IGludGVsX2NydGMgKmNydGMpCit7 CisJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisKKwljcnRjX3N0YXRlID0g a21hbGxvYyhzaXplb2YoKmNydGNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKworCWlmIChjcnRjX3N0 YXRlKQorCQlpbnRlbF9jcnRjX3N0YXRlX3Jlc2V0KGNydGNfc3RhdGUsIGNydGMpOworCisJcmV0 dXJuIGNydGNfc3RhdGU7Cit9CisKK3ZvaWQgaW50ZWxfY3J0Y19zdGF0ZV9yZXNldChzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YykKK3sKKwltZW1zZXQoY3J0Y19zdGF0ZSwgMCwgc2l6ZW9mKCpjcnRjX3N0YXRlKSk7CisK KwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfc3RhdGVfcmVzZXQoJmNydGNfc3RhdGUtPnVhcGks ICZjcnRjLT5iYXNlKTsKKworCWNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyID0gSU5WQUxJRF9U UkFOU0NPREVSOworCWNydGNfc3RhdGUtPm1hc3Rlcl90cmFuc2NvZGVyID0gSU5WQUxJRF9UUkFO U0NPREVSOworCWNydGNfc3RhdGUtPmhzd193b3JrYXJvdW5kX3BpcGUgPSBJTlZBTElEX1BJUEU7 CisJY3J0Y19zdGF0ZS0+b3V0cHV0X2Zvcm1hdCA9IElOVEVMX09VVFBVVF9GT1JNQVRfSU5WQUxJ RDsKKwljcnRjX3N0YXRlLT5zY2FsZXJfc3RhdGUuc2NhbGVyX2lkID0gLTE7CisJY3J0Y19zdGF0 ZS0+bXN0X21hc3Rlcl90cmFuc2NvZGVyID0gSU5WQUxJRF9UUkFOU0NPREVSOworfQorCitzdGF0 aWMgc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGNfYWxsb2Modm9pZCkKK3sKKwlzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsK KworCWNydGMgPSBremFsbG9jKHNpemVvZigqY3J0YyksIEdGUF9LRVJORUwpOworCWlmICghY3J0 YykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwljcnRjX3N0YXRlID0gaW50ZWxfY3J0 Y19zdGF0ZV9hbGxvYyhjcnRjKTsKKwlpZiAoIWNydGNfc3RhdGUpIHsKKwkJa2ZyZWUoY3J0Yyk7 CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCWNydGMtPmJhc2Uuc3RhdGUgPSAm Y3J0Y19zdGF0ZS0+dWFwaTsKKwljcnRjLT5jb25maWcgPSBjcnRjX3N0YXRlOworCisJcmV0dXJu IGNydGM7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfZnJlZShzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YykKK3sKKwlpbnRlbF9jcnRjX2Rlc3Ryb3lfc3RhdGUoJmNydGMtPmJhc2UsIGNydGMt PmJhc2Uuc3RhdGUpOworCWtmcmVlKGNydGMpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRj X2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKworCWRybV9jcnRjX2NsZWFudXAoY3J0 Yyk7CisJa2ZyZWUoaW50ZWxfY3J0Yyk7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfY3J0Y19sYXRl X3JlZ2lzdGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlpbnRlbF9jcnRjX2RlYnVnZnNf YWRkKGNydGMpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIElOVEVMX0NSVENfRlVOQ1MgXAor CS5nYW1tYV9zZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9sZWdhY3lfZ2FtbWFfc2V0LCBcCisJLnNl dF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLCBcCisJLmRlc3Ryb3kgPSBp bnRlbF9jcnRjX2Rlc3Ryb3ksIFwKKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFn ZV9mbGlwLCBcCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9jcnRjX2R1cGxpY2F0 ZV9zdGF0ZSwgXAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX2NydGNfZGVzdHJveV9z dGF0ZSwgXAorCS5zZXRfY3JjX3NvdXJjZSA9IGludGVsX2NydGNfc2V0X2NyY19zb3VyY2UsIFwK KwkudmVyaWZ5X2NyY19zb3VyY2UgPSBpbnRlbF9jcnRjX3ZlcmlmeV9jcmNfc291cmNlLCBcCisJ LmdldF9jcmNfc291cmNlcyA9IGludGVsX2NydGNfZ2V0X2NyY19zb3VyY2VzLCBcCisJLmxhdGVf cmVnaXN0ZXIgPSBpbnRlbF9jcnRjX2xhdGVfcmVnaXN0ZXIKKworc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fY3J0Y19mdW5jcyBiZHdfY3J0Y19mdW5jcyA9IHsKKwlJTlRFTF9DUlRDX0ZVTkNTLAor CisJLmdldF92YmxhbmtfY291bnRlciA9IGc0eF9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJs ZV92YmxhbmsgPSBiZHdfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBiZHdfZGlz YWJsZV92YmxhbmssCisJLmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJs YW5rX3RpbWVzdGFtcCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3Mg aWxrX2NydGNfZnVuY3MgPSB7CisJSU5URUxfQ1JUQ19GVU5DUywKKworCS5nZXRfdmJsYW5rX2Nv dW50ZXIgPSBnNHhfZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gaWxrX2Vu YWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gaWxrX2Rpc2FibGVfdmJsYW5rLAorCS5n ZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGc0eF9jcnRjX2Z1bmNzID0g eworCUlOVEVMX0NSVENfRlVOQ1MsCisKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gZzR4X2dldF92 YmxhbmtfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IGk5NjVfZW5hYmxlX3ZibGFuaywKKwku ZGlzYWJsZV92YmxhbmsgPSBpOTY1X2Rpc2FibGVfdmJsYW5rLAorCS5nZXRfdmJsYW5rX3RpbWVz dGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGk5NjVfY3J0Y19mdW5jcyA9IHsKKwlJTlRFTF9DUlRD X0ZVTkNTLAorCisJLmdldF92YmxhbmtfY291bnRlciA9IGk5MTVfZ2V0X3ZibGFua19jb3VudGVy LAorCS5lbmFibGVfdmJsYW5rID0gaTk2NV9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFu ayA9IGk5NjVfZGlzYWJsZV92YmxhbmssCisJLmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxf Y3J0Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2NydGNfZnVuY3MgaTkxNWdtX2NydGNfZnVuY3MgPSB7CisJSU5URUxfQ1JUQ19GVU5DUywKKwor CS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBpOTE1X2dldF92YmxhbmtfY291bnRlciwKKwkuZW5hYmxl X3ZibGFuayA9IGk5MTVnbV9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IGk5MTVn bV9kaXNhYmxlX3ZibGFuaywKKwkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dl dF92YmxhbmtfdGltZXN0YW1wLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19m dW5jcyBpOTE1X2NydGNfZnVuY3MgPSB7CisJSU5URUxfQ1JUQ19GVU5DUywKKworCS5nZXRfdmJs YW5rX2NvdW50ZXIgPSBpOTE1X2dldF92YmxhbmtfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9 IGk4eHhfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBpOHh4X2Rpc2FibGVfdmJs YW5rLAorCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1l c3RhbXAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGk4eHhfY3J0 Y19mdW5jcyA9IHsKKwlJTlRFTF9DUlRDX0ZVTkNTLAorCisJLyogbm8gaHcgdmJsYW5rIGNvdW50 ZXIgKi8KKwkuZW5hYmxlX3ZibGFuayA9IGk4eHhfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92 YmxhbmsgPSBpOHh4X2Rpc2FibGVfdmJsYW5rLAorCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGlu dGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCit9OworCitpbnQgaW50ZWxfY3J0Y19pbml0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCit7CisJ c3RydWN0IGludGVsX3BsYW5lICpwcmltYXJ5LCAqY3Vyc29yOworCWNvbnN0IHN0cnVjdCBkcm1f Y3J0Y19mdW5jcyAqZnVuY3M7CisJc3RydWN0IGludGVsX2NydGMgKmNydGM7CisJaW50IHNwcml0 ZSwgcmV0OworCisJY3J0YyA9IGludGVsX2NydGNfYWxsb2MoKTsKKwlpZiAoSVNfRVJSKGNydGMp KQorCQlyZXR1cm4gUFRSX0VSUihjcnRjKTsKKworCWNydGMtPnBpcGUgPSBwaXBlOworCWNydGMt Pm51bV9zY2FsZXJzID0gUlVOVElNRV9JTkZPKGRldl9wcml2KS0+bnVtX3NjYWxlcnNbcGlwZV07 CisKKwlwcmltYXJ5ID0gaW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUp OworCWlmIChJU19FUlIocHJpbWFyeSkpIHsKKwkJcmV0ID0gUFRSX0VSUihwcmltYXJ5KTsKKwkJ Z290byBmYWlsOworCX0KKwljcnRjLT5wbGFuZV9pZHNfbWFzayB8PSBCSVQocHJpbWFyeS0+aWQp OworCisJZm9yX2VhY2hfc3ByaXRlKGRldl9wcml2LCBwaXBlLCBzcHJpdGUpIHsKKwkJc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZTsKKworCQlwbGFuZSA9IGludGVsX3Nwcml0ZV9wbGFuZV9jcmVh dGUoZGV2X3ByaXYsIHBpcGUsIHNwcml0ZSk7CisJCWlmIChJU19FUlIocGxhbmUpKSB7CisJCQly ZXQgPSBQVFJfRVJSKHBsYW5lKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQljcnRjLT5wbGFuZV9p ZHNfbWFzayB8PSBCSVQocGxhbmUtPmlkKTsKKwl9CisKKwljdXJzb3IgPSBpbnRlbF9jdXJzb3Jf cGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlKTsKKwlpZiAoSVNfRVJSKGN1cnNvcikpIHsKKwkJ cmV0ID0gUFRSX0VSUihjdXJzb3IpOworCQlnb3RvIGZhaWw7CisJfQorCWNydGMtPnBsYW5lX2lk c19tYXNrIHw9IEJJVChjdXJzb3ItPmlkKTsKKworCWlmIChIQVNfR01DSChkZXZfcHJpdikpIHsK KwkJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpIHx8CisJCSAgICBJU19WQUxMRVlWSUVXKGRl dl9wcml2KSB8fCBJU19HNFgoZGV2X3ByaXYpKQorCQkJZnVuY3MgPSAmZzR4X2NydGNfZnVuY3M7 CisJCWVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwgNCkpCisJCQlmdW5jcyA9ICZpOTY1X2NydGNf ZnVuY3M7CisJCWVsc2UgaWYgKElTX0k5NDVHTShkZXZfcHJpdikgfHwgSVNfSTkxNUdNKGRldl9w cml2KSkKKwkJCWZ1bmNzID0gJmk5MTVnbV9jcnRjX2Z1bmNzOworCQllbHNlIGlmIChJU19HRU4o ZGV2X3ByaXYsIDMpKQorCQkJZnVuY3MgPSAmaTkxNV9jcnRjX2Z1bmNzOworCQllbHNlCisJCQlm dW5jcyA9ICZpOHh4X2NydGNfZnVuY3M7CisJfSBlbHNlIHsKKwkJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gOCkKKwkJCWZ1bmNzID0gJmJkd19jcnRjX2Z1bmNzOworCQllbHNlCisJCQlmdW5j cyA9ICZpbGtfY3J0Y19mdW5jczsKKwl9CisKKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxh bmVzKCZkZXZfcHJpdi0+ZHJtLCAmY3J0Yy0+YmFzZSwKKwkJCQkJJnByaW1hcnktPmJhc2UsICZj dXJzb3ItPmJhc2UsCisJCQkJCWZ1bmNzLCAicGlwZSAlYyIsIHBpcGVfbmFtZShwaXBlKSk7CisJ aWYgKHJldCkKKwkJZ290byBmYWlsOworCisJQlVHX09OKHBpcGUgPj0gQVJSQVlfU0laRShkZXZf cHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmcpIHx8CisJICAgICAgIGRldl9wcml2LT5waXBlX3Rv X2NydGNfbWFwcGluZ1twaXBlXSAhPSBOVUxMKTsKKwlkZXZfcHJpdi0+cGlwZV90b19jcnRjX21h cHBpbmdbcGlwZV0gPSBjcnRjOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA5KSB7CisJ CWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcHJpbWFyeS0+aTl4eF9wbGFuZTsKKwor CQlCVUdfT04oaTl4eF9wbGFuZSA+PSBBUlJBWV9TSVpFKGRldl9wcml2LT5wbGFuZV90b19jcnRj X21hcHBpbmcpIHx8CisJCSAgICAgICBkZXZfcHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2k5 eHhfcGxhbmVdICE9IE5VTEwpOworCQlkZXZfcHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nW2k5 eHhfcGxhbmVdID0gY3J0YzsKKwl9CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkK KwkJZHJtX2NydGNfY3JlYXRlX3NjYWxpbmdfZmlsdGVyX3Byb3BlcnR5KCZjcnRjLT5iYXNlLAor CQkJCQkJQklUKERSTV9TQ0FMSU5HX0ZJTFRFUl9ERUZBVUxUKSB8CisJCQkJCQlCSVQoRFJNX1ND QUxJTkdfRklMVEVSX05FQVJFU1RfTkVJR0hCT1IpKTsKKworCWludGVsX2NvbG9yX2luaXQoY3J0 Yyk7CisKKwlpbnRlbF9jcnRjX2NyY19pbml0KGNydGMpOworCisJZHJtX1dBUk5fT04oJmRldl9w cml2LT5kcm0sIGRybV9jcnRjX2luZGV4KCZjcnRjLT5iYXNlKSAhPSBjcnRjLT5waXBlKTsKKwor CXJldHVybiAwOworCitmYWlsOgorCWludGVsX2NydGNfZnJlZShjcnRjKTsKKworCXJldHVybiBy ZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Ny dGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDgxMTJkNTU3NDExCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmgKQEAgLTAs MCArMSwyMiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoKKyAqIENv cHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfSU5URUxf Q1JUQ19IXworI2RlZmluZSBfSU5URUxfQ1JUQ19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4KKworZW51bSBwaXBlOworc3RydWN0IGRybV9pOTE1X3ByaXZhdGU7CitzdHJ1Y3QgaW50ZWxf Y3J0YzsKK3N0cnVjdCBpbnRlbF9jcnRjX3N0YXRlOworCit1MzIgaW50ZWxfY3J0Y19tYXhfdmJs YW5rX2NvdW50KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKK2lu dCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVt IHBpcGUgcGlwZSk7CitzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfY3J0Y19zdGF0ZV9h bGxvYyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7Cit2b2lkIGludGVsX2NydGNfc3RhdGVfcmVz ZXQoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgc3RydWN0IGlu dGVsX2NydGMgKmNydGMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggMTRlNzE0ZmIzYjQ5Li41MTRiODM3OGFjZjEgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCkBAIC02OCw4ICs2 OCw4IEBACiAjaW5jbHVkZSAiaW50ZWxfYncuaCIKICNpbmNsdWRlICJpbnRlbF9jZGNsay5oIgog I2luY2x1ZGUgImludGVsX2NvbG9yLmgiCisjaW5jbHVkZSAiaW50ZWxfY3J0Yy5oIgogI2luY2x1 ZGUgImludGVsX2Nzci5oIgotI2luY2x1ZGUgImludGVsX2N1cnNvci5oIgogI2luY2x1ZGUgImlu dGVsX2Rpc3BsYXlfdHlwZXMuaCIKICNpbmNsdWRlICJpbnRlbF9kcF9saW5rX3RyYWluaW5nLmgi CiAjaW5jbHVkZSAiaW50ZWxfZmJjLmgiCkBAIC0xMTQsNyArMTE0LDYgQEAgc3RhdGljIHZvaWQg c2tsX3BmaXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl KTsKIHN0YXRpYyB2b2lkIGlsa19wZml0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSk7CiBzdGF0aWMgdm9pZCBpbnRlbF9tb2Rlc2V0X3NldHVwX2h3X3N0 YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNx dWlyZV9jdHggKmN0eCk7Ci1zdGF0aWMgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmludGVsX2Ny dGNfc3RhdGVfYWxsb2Moc3RydWN0IGludGVsX2NydGMgKmNydGMpOwogCiBzdHJ1Y3QgaW50ZWxf bGltaXQgewogCXN0cnVjdCB7CkBAIC0xMjUzLDEyICsxMjUyLDYgQEAgc3RhdGljIHZvaWQgYXNz ZXJ0X3BsYW5lc19kaXNhYmxlZChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAkJYXNzZXJ0X3Bs YW5lX2Rpc2FibGVkKHBsYW5lKTsKIH0KIAotc3RhdGljIHZvaWQgYXNzZXJ0X3ZibGFua19kaXNh YmxlZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0JaWYgKEk5MTVfU1RBVEVfV0FSTl9PTihk cm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpID09IDApKQotCQlkcm1fY3J0Y192YmxhbmtfcHV0KGNy dGMpOwotfQotCiB2b2lkIGFzc2VydF9wY2hfdHJhbnNjb2Rlcl9kaXNhYmxlZChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJICAgIGVudW0gcGlwZSBwaXBlKQogewpAQCAt MTc0Myw1NSArMTczNiw2IEBAIGVudW0gcGlwZSBpbnRlbF9jcnRjX3BjaF90cmFuc2NvZGVyKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogCQlyZXR1cm4gY3J0Yy0+cGlwZTsKIH0KIAotc3RhdGlj IHUzMiBpbnRlbF9jcnRjX21heF92YmxhbmtfY291bnQoY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7Ci0Jc3RydWN0IGludGVsX2Ny dGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Ci0JdTMyIG1v ZGVfZmxhZ3MgPSBjcnRjLT5tb2RlX2ZsYWdzOwotCi0JLyoKLQkgKiBGcm9tIEdlbiAxMSwgSW4g Y2FzZSBvZiBkc2kgY21kIG1vZGUsIGZyYW1lIGNvdW50ZXIgd291bGRudAotCSAqIGhhdmUgdXBk YXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIFRFLCBpZiB3ZSB3YW50IHRvIHVzZQotCSAqIHRoZSBo dyBjb3VudGVyLCB0aGVuIHdlIHdvdWxkIGZpbmQgaXQgdXBkYXRlZCBpbiBvbmx5Ci0JICogdGhl IG5leHQgVEUsIGhlbmNlIHN3aXRjaGluZyB0byBzdyBjb3VudGVyLgotCSAqLwotCWlmIChtb2Rl X2ZsYWdzICYgKEk5MTVfTU9ERV9GTEFHX0RTSV9VU0VfVEUwIHwgSTkxNV9NT0RFX0ZMQUdfRFNJ X1VTRV9URTEpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogT24gaTk2NWdtIHRoZSBoYXJkd2Fy ZSBmcmFtZSBjb3VudGVyIHJlYWRzCi0JICogemVybyB3aGVuIHRoZSBUViBlbmNvZGVyIGlzIGVu YWJsZWQgOigKLQkgKi8KLQlpZiAoSVNfSTk2NUdNKGRldl9wcml2KSAmJgotCSAgICAoY3J0Y19z dGF0ZS0+b3V0cHV0X3R5cGVzICYgQklUKElOVEVMX09VVFBVVF9UVk9VVCkpKQotCQlyZXR1cm4g MDsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkK LQkJcmV0dXJuIDB4ZmZmZmZmZmY7IC8qIGZ1bGwgMzIgYml0IGNvdW50ZXIgKi8KLQllbHNlIGlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDMpCi0JCXJldHVybiAweGZmZmZmZjsgLyogb25seSAy NCBiaXRzIG9mIGZyYW1lIGNvdW50ICovCi0JZWxzZQotCQlyZXR1cm4gMDsgLyogR2VuMiBkb2Vz bid0IGhhdmUgYSBoYXJkd2FyZSBmcmFtZSBjb3VudGVyICovCi19Ci0KLXZvaWQgaW50ZWxfY3J0 Y192Ymxhbmtfb24oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17 Ci0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVh cGkuY3J0Yyk7Ci0KLQlhc3NlcnRfdmJsYW5rX2Rpc2FibGVkKCZjcnRjLT5iYXNlKTsKLQlkcm1f Y3J0Y19zZXRfbWF4X3ZibGFua19jb3VudCgmY3J0Yy0+YmFzZSwKLQkJCQkgICAgICBpbnRlbF9j cnRjX21heF92YmxhbmtfY291bnQoY3J0Y19zdGF0ZSkpOwotCWRybV9jcnRjX3ZibGFua19vbigm Y3J0Yy0+YmFzZSk7Ci19Ci0KLXZvaWQgaW50ZWxfY3J0Y192Ymxhbmtfb2ZmKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9jcnRjICpj cnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwotCi0JZHJtX2NydGNf dmJsYW5rX29mZigmY3J0Yy0+YmFzZSk7Ci0JYXNzZXJ0X3ZibGFua19kaXNhYmxlZCgmY3J0Yy0+ YmFzZSk7Ci19Ci0KIHZvaWQgaW50ZWxfZW5hYmxlX3BpcGUoY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlKQogewogCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0g dG9faW50ZWxfY3J0YyhuZXdfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKQEAgLTExNDQ0LDMzICsx MTM4OCw2IEBAIHN0YXRpYyB2b2lkIGlsa19wY2hfY2xvY2tfZ2V0KHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjLAogCQkJCQkgJnBpcGVfY29uZmlnLT5mZGlfbV9uKTsKIH0KIAotc3RhdGljIHZvaWQg aW50ZWxfY3J0Y19zdGF0ZV9yZXNldChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKLQkJCQkgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKLXsKLQltZW1zZXQoY3J0Y19zdGF0 ZSwgMCwgc2l6ZW9mKCpjcnRjX3N0YXRlKSk7Ci0KLQlfX2RybV9hdG9taWNfaGVscGVyX2NydGNf c3RhdGVfcmVzZXQoJmNydGNfc3RhdGUtPnVhcGksICZjcnRjLT5iYXNlKTsKLQotCWNydGNfc3Rh dGUtPmNwdV90cmFuc2NvZGVyID0gSU5WQUxJRF9UUkFOU0NPREVSOwotCWNydGNfc3RhdGUtPm1h c3Rlcl90cmFuc2NvZGVyID0gSU5WQUxJRF9UUkFOU0NPREVSOwotCWNydGNfc3RhdGUtPmhzd193 b3JrYXJvdW5kX3BpcGUgPSBJTlZBTElEX1BJUEU7Ci0JY3J0Y19zdGF0ZS0+b3V0cHV0X2Zvcm1h dCA9IElOVEVMX09VVFBVVF9GT1JNQVRfSU5WQUxJRDsKLQljcnRjX3N0YXRlLT5zY2FsZXJfc3Rh dGUuc2NhbGVyX2lkID0gLTE7Ci0JY3J0Y19zdGF0ZS0+bXN0X21hc3Rlcl90cmFuc2NvZGVyID0g SU5WQUxJRF9UUkFOU0NPREVSOwotfQotCi1zdGF0aWMgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmludGVsX2NydGNfc3RhdGVfYWxsb2Moc3RydWN0IGludGVsX2NydGMgKmNydGMpCi17Ci0Jc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0KLQljcnRjX3N0YXRlID0ga21hbGxv YyhzaXplb2YoKmNydGNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChjcnRjX3N0YXRlKQot CQlpbnRlbF9jcnRjX3N0YXRlX3Jlc2V0KGNydGNfc3RhdGUsIGNydGMpOwotCi0JcmV0dXJuIGNy dGNfc3RhdGU7Ci19Ci0KIC8qIFJldHVybnMgdGhlIGN1cnJlbnRseSBwcm9ncmFtbWVkIG1vZGUg b2YgdGhlIGdpdmVuIGVuY29kZXIuICovCiBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqCiBpbnRl bF9lbmNvZGVyX2N1cnJlbnRfbW9kZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKQEAg LTExNTExLDE0ICsxMTQyOCw2IEBAIGludGVsX2VuY29kZXJfY3VycmVudF9tb2RlKHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyKQogCXJldHVybiBtb2RlOwogfQogCi1zdGF0aWMgdm9pZCBp bnRlbF9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0cnVjdCBpbnRl bF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQotCWRybV9jcnRjX2Ns ZWFudXAoY3J0Yyk7Ci0Ja2ZyZWUoaW50ZWxfY3J0Yyk7Ci19Ci0KIC8qKgogICogaW50ZWxfd21f bmVlZF91cGRhdGUgLSBDaGVjayB3aGV0aGVyIHdhdGVybWFya3MgbmVlZCB1cGRhdGluZwogICog QGN1cjogY3VycmVudCBwbGFuZSBzdGF0ZQpAQCAtMTQ3MjIsMTcgKzE0NjMxLDYgQEAgc3RhdGlj IGludCBpbnRlbF9hdG9taWNfcHJlcGFyZV9jb21taXQoc3RydWN0IGludGVsX2F0b21pY19zdGF0 ZSAqc3RhdGUpCiAJcmV0dXJuIDA7CiB9CiAKLXUzMiBpbnRlbF9jcnRjX2dldF92YmxhbmtfY291 bnRlcihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5rID0gJmRl di0+dmJsYW5rW2RybV9jcnRjX2luZGV4KCZjcnRjLT5iYXNlKV07Ci0KLQlpZiAoIXZibGFuay0+ bWF4X3ZibGFua19jb3VudCkKLQkJcmV0dXJuICh1MzIpZHJtX2NydGNfYWNjdXJhdGVfdmJsYW5r X2NvdW50KCZjcnRjLT5iYXNlKTsKLQotCXJldHVybiBjcnRjLT5iYXNlLmZ1bmNzLT5nZXRfdmJs YW5rX2NvdW50ZXIoJmNydGMtPmJhc2UpOwotfQotCiB2b2lkIGludGVsX2NydGNfYXJtX2ZpZm9f dW5kZXJydW4oc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCQkJICBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIHsKQEAgLTE1Nzg1LDExNCArMTU2ODMsNiBAQCB2b2lkIGlu dGVsX3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiAJa2ZyZWUodG9faW50 ZWxfcGxhbmUocGxhbmUpKTsKIH0KIAotc3RhdGljIGludCBpbnRlbF9jcnRjX2xhdGVfcmVnaXN0 ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCWludGVsX2NydGNfZGVidWdmc19hZGQoY3J0 Yyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgSU5URUxfQ1JUQ19GVU5DUyBcCi0JLmdhbW1h X3NldCA9IGRybV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQsIFwKLQkuc2V0X2NvbmZp ZyA9IGRybV9hdG9taWNfaGVscGVyX3NldF9jb25maWcsIFwKLQkuZGVzdHJveSA9IGludGVsX2Ny dGNfZGVzdHJveSwgXAotCS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAs IFwKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX2NydGNfZHVwbGljYXRlX3N0YXRl LCBcCi0JLmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxfY3J0Y19kZXN0cm95X3N0YXRlLCBc Ci0JLnNldF9jcmNfc291cmNlID0gaW50ZWxfY3J0Y19zZXRfY3JjX3NvdXJjZSwgXAotCS52ZXJp ZnlfY3JjX3NvdXJjZSA9IGludGVsX2NydGNfdmVyaWZ5X2NyY19zb3VyY2UsIFwKLQkuZ2V0X2Ny Y19zb3VyY2VzID0gaW50ZWxfY3J0Y19nZXRfY3JjX3NvdXJjZXMsIFwKLQkubGF0ZV9yZWdpc3Rl ciA9IGludGVsX2NydGNfbGF0ZV9yZWdpc3RlcgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9j cnRjX2Z1bmNzIGJkd19jcnRjX2Z1bmNzID0gewotCUlOVEVMX0NSVENfRlVOQ1MsCi0KLQkuZ2V0 X3ZibGFua19jb3VudGVyID0gZzR4X2dldF92YmxhbmtfY291bnRlciwKLQkuZW5hYmxlX3ZibGFu ayA9IGJkd19lbmFibGVfdmJsYW5rLAotCS5kaXNhYmxlX3ZibGFuayA9IGJkd19kaXNhYmxlX3Zi bGFuaywKLQkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGlt ZXN0YW1wLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbGtfY3J0 Y19mdW5jcyA9IHsKLQlJTlRFTF9DUlRDX0ZVTkNTLAotCi0JLmdldF92YmxhbmtfY291bnRlciA9 IGc0eF9nZXRfdmJsYW5rX2NvdW50ZXIsCi0JLmVuYWJsZV92YmxhbmsgPSBpbGtfZW5hYmxlX3Zi bGFuaywKLQkuZGlzYWJsZV92YmxhbmsgPSBpbGtfZGlzYWJsZV92YmxhbmssCi0JLmdldF92Ymxh bmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwKLX07Ci0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgZzR4X2NydGNfZnVuY3MgPSB7Ci0JSU5U RUxfQ1JUQ19GVU5DUywKLQotCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBnNHhfZ2V0X3ZibGFua19j b3VudGVyLAotCS5lbmFibGVfdmJsYW5rID0gaTk2NV9lbmFibGVfdmJsYW5rLAotCS5kaXNhYmxl X3ZibGFuayA9IGk5NjVfZGlzYWJsZV92YmxhbmssCi0JLmdldF92YmxhbmtfdGltZXN0YW1wID0g aW50ZWxfY3J0Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2NydGNfZnVuY3MgaTk2NV9jcnRjX2Z1bmNzID0gewotCUlOVEVMX0NSVENfRlVOQ1Ms Ci0KLQkuZ2V0X3ZibGFua19jb3VudGVyID0gaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIsCi0JLmVu YWJsZV92YmxhbmsgPSBpOTY1X2VuYWJsZV92YmxhbmssCi0JLmRpc2FibGVfdmJsYW5rID0gaTk2 NV9kaXNhYmxlX3ZibGFuaywKLQkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dl dF92YmxhbmtfdGltZXN0YW1wLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19m dW5jcyBpOTE1Z21fY3J0Y19mdW5jcyA9IHsKLQlJTlRFTF9DUlRDX0ZVTkNTLAotCi0JLmdldF92 YmxhbmtfY291bnRlciA9IGk5MTVfZ2V0X3ZibGFua19jb3VudGVyLAotCS5lbmFibGVfdmJsYW5r ID0gaTkxNWdtX2VuYWJsZV92YmxhbmssCi0JLmRpc2FibGVfdmJsYW5rID0gaTkxNWdtX2Rpc2Fi bGVfdmJsYW5rLAotCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFu a190aW1lc3RhbXAsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGk5 MTVfY3J0Y19mdW5jcyA9IHsKLQlJTlRFTF9DUlRDX0ZVTkNTLAotCi0JLmdldF92YmxhbmtfY291 bnRlciA9IGk5MTVfZ2V0X3ZibGFua19jb3VudGVyLAotCS5lbmFibGVfdmJsYW5rID0gaTh4eF9l bmFibGVfdmJsYW5rLAotCS5kaXNhYmxlX3ZibGFuayA9IGk4eHhfZGlzYWJsZV92YmxhbmssCi0J LmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwK LX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaTh4eF9jcnRjX2Z1bmNz ID0gewotCUlOVEVMX0NSVENfRlVOQ1MsCi0KLQkvKiBubyBodyB2YmxhbmsgY291bnRlciAqLwot CS5lbmFibGVfdmJsYW5rID0gaTh4eF9lbmFibGVfdmJsYW5rLAotCS5kaXNhYmxlX3ZibGFuayA9 IGk4eHhfZGlzYWJsZV92YmxhbmssCi0JLmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0 Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50ZWxfY3J0YyAq aW50ZWxfY3J0Y19hbGxvYyh2b2lkKQotewotCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlOwotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwotCi0JY3J0YyA9IGt6YWxsb2Moc2l6 ZW9mKCpjcnRjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjcnRjKQotCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKLQotCWNydGNfc3RhdGUgPSBpbnRlbF9jcnRjX3N0YXRlX2FsbG9jKGNydGMpOwot CWlmICghY3J0Y19zdGF0ZSkgewotCQlrZnJlZShjcnRjKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7Ci0JfQotCi0JY3J0Yy0+YmFzZS5zdGF0ZSA9ICZjcnRjX3N0YXRlLT51YXBpOwotCWNy dGMtPmNvbmZpZyA9IGNydGNfc3RhdGU7Ci0KLQlyZXR1cm4gY3J0YzsKLX0KLQotc3RhdGljIHZv aWQgaW50ZWxfY3J0Y19mcmVlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQotewotCWludGVsX2Ny dGNfZGVzdHJveV9zdGF0ZSgmY3J0Yy0+YmFzZSwgY3J0Yy0+YmFzZS5zdGF0ZSk7Ci0Ja2ZyZWUo Y3J0Yyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGludGVsX3BsYW5lX3Bvc3NpYmxlX2NydGNzX2luaXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCXN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmU7CkBAIC0xNTkwNSwxMDAgKzE1Njk1LDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfcGxh bmVfcG9zc2libGVfY3J0Y3NfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiAJfQogfQogCi1zdGF0aWMgaW50IGludGVsX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAq cHJpbWFyeSwgKmN1cnNvcjsKLQljb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgKmZ1bmNzOwot CXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwotCWludCBzcHJpdGUsIHJldDsKLQotCWNydGMgPSBp bnRlbF9jcnRjX2FsbG9jKCk7Ci0JaWYgKElTX0VSUihjcnRjKSkKLQkJcmV0dXJuIFBUUl9FUlIo Y3J0Yyk7Ci0KLQljcnRjLT5waXBlID0gcGlwZTsKLQljcnRjLT5udW1fc2NhbGVycyA9IFJVTlRJ TUVfSU5GTyhkZXZfcHJpdiktPm51bV9zY2FsZXJzW3BpcGVdOwotCi0JcHJpbWFyeSA9IGludGVs X3ByaW1hcnlfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlKTsKLQlpZiAoSVNfRVJSKHByaW1h cnkpKSB7Ci0JCXJldCA9IFBUUl9FUlIocHJpbWFyeSk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JY3J0 Yy0+cGxhbmVfaWRzX21hc2sgfD0gQklUKHByaW1hcnktPmlkKTsKLQotCWZvcl9lYWNoX3Nwcml0 ZShkZXZfcHJpdiwgcGlwZSwgc3ByaXRlKSB7Ci0JCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7 Ci0KLQkJcGxhbmUgPSBpbnRlbF9zcHJpdGVfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlLCBz cHJpdGUpOwotCQlpZiAoSVNfRVJSKHBsYW5lKSkgewotCQkJcmV0ID0gUFRSX0VSUihwbGFuZSk7 Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQkJY3J0Yy0+cGxhbmVfaWRzX21hc2sgfD0gQklUKHBsYW5l LT5pZCk7Ci0JfQotCi0JY3Vyc29yID0gaW50ZWxfY3Vyc29yX3BsYW5lX2NyZWF0ZShkZXZfcHJp diwgcGlwZSk7Ci0JaWYgKElTX0VSUihjdXJzb3IpKSB7Ci0JCXJldCA9IFBUUl9FUlIoY3Vyc29y KTsKLQkJZ290byBmYWlsOwotCX0KLQljcnRjLT5wbGFuZV9pZHNfbWFzayB8PSBCSVQoY3Vyc29y LT5pZCk7Ci0KLQlpZiAoSEFTX0dNQ0goZGV2X3ByaXYpKSB7Ci0JCWlmIChJU19DSEVSUllWSUVX KGRldl9wcml2KSB8fAotCQkgICAgSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfRzRYKGRl dl9wcml2KSkKLQkJCWZ1bmNzID0gJmc0eF9jcnRjX2Z1bmNzOwotCQllbHNlIGlmIChJU19HRU4o ZGV2X3ByaXYsIDQpKQotCQkJZnVuY3MgPSAmaTk2NV9jcnRjX2Z1bmNzOwotCQllbHNlIGlmIChJ U19JOTQ1R00oZGV2X3ByaXYpIHx8IElTX0k5MTVHTShkZXZfcHJpdikpCi0JCQlmdW5jcyA9ICZp OTE1Z21fY3J0Y19mdW5jczsKLQkJZWxzZSBpZiAoSVNfR0VOKGRldl9wcml2LCAzKSkKLQkJCWZ1 bmNzID0gJmk5MTVfY3J0Y19mdW5jczsKLQkJZWxzZQotCQkJZnVuY3MgPSAmaTh4eF9jcnRjX2Z1 bmNzOwotCX0gZWxzZSB7Ci0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpCi0JCQlmdW5j cyA9ICZiZHdfY3J0Y19mdW5jczsKLQkJZWxzZQotCQkJZnVuY3MgPSAmaWxrX2NydGNfZnVuY3M7 Ci0JfQotCi0JcmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcygmZGV2X3ByaXYtPmRybSwg JmNydGMtPmJhc2UsCi0JCQkJCSZwcmltYXJ5LT5iYXNlLCAmY3Vyc29yLT5iYXNlLAotCQkJCQlm dW5jcywgInBpcGUgJWMiLCBwaXBlX25hbWUocGlwZSkpOwotCWlmIChyZXQpCi0JCWdvdG8gZmFp bDsKLQotCUJVR19PTihwaXBlID49IEFSUkFZX1NJWkUoZGV2X3ByaXYtPnBpcGVfdG9fY3J0Y19t YXBwaW5nKSB8fAotCSAgICAgICBkZXZfcHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmdbcGlwZV0g IT0gTlVMTCk7Ci0JZGV2X3ByaXYtPnBpcGVfdG9fY3J0Y19tYXBwaW5nW3BpcGVdID0gY3J0YzsK LQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOSkgewotCQllbnVtIGk5eHhfcGxhbmVfaWQg aTl4eF9wbGFuZSA9IHByaW1hcnktPmk5eHhfcGxhbmU7Ci0KLQkJQlVHX09OKGk5eHhfcGxhbmUg Pj0gQVJSQVlfU0laRShkZXZfcHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nKSB8fAotCQkgICAg ICAgZGV2X3ByaXYtPnBsYW5lX3RvX2NydGNfbWFwcGluZ1tpOXh4X3BsYW5lXSAhPSBOVUxMKTsK LQkJZGV2X3ByaXYtPnBsYW5lX3RvX2NydGNfbWFwcGluZ1tpOXh4X3BsYW5lXSA9IGNydGM7Ci0J fQotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCi0JCWRybV9jcnRjX2NyZWF0ZV9z Y2FsaW5nX2ZpbHRlcl9wcm9wZXJ0eSgmY3J0Yy0+YmFzZSwKLQkJCQkJCUJJVChEUk1fU0NBTElO R19GSUxURVJfREVGQVVMVCkgfAotCQkJCQkJQklUKERSTV9TQ0FMSU5HX0ZJTFRFUl9ORUFSRVNU X05FSUdIQk9SKSk7Ci0KLQlpbnRlbF9jb2xvcl9pbml0KGNydGMpOwotCi0JaW50ZWxfY3J0Y19j cmNfaW5pdChjcnRjKTsKLQotCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBkcm1fY3J0Y19p bmRleCgmY3J0Yy0+YmFzZSkgIT0gY3J0Yy0+cGlwZSk7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoK LQlpbnRlbF9jcnRjX2ZyZWUoY3J0Yyk7Ci0KLQlyZXR1cm4gcmV0OwotfQogCiBpbnQgaW50ZWxf Z2V0X3BpcGVfZnJvbV9jcnRjX2lkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCiAJCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQotLSAKMi4yNy4wCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK