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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id C70E5E67A97 for ; Tue, 3 Mar 2026 08:43:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0A6F910E67B; Tue, 3 Mar 2026 08:43:14 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Gt7ddZ00"; dkim-atps=neutral Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) by gabe.freedesktop.org (Postfix) with ESMTPS id 745B310E67A for ; Tue, 3 Mar 2026 08:43:12 +0000 (UTC) Received: by mail-lj1-f182.google.com with SMTP id 38308e7fff4ca-3870902760cso88670401fa.3 for ; Tue, 03 Mar 2026 00:43:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772527391; x=1773132191; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IPkq+nTUsJcZaKGe1citY1IgXLqCL2rHUfn5Jdh0u20=; b=Gt7ddZ004sbBPJHdW03CJ7FcABBVhn8+WDINibBb07BH1n0UUyXLJH3OMHx/1DZslw y2ekwtcVu1kzpHAc8KGgLBUQ7yBvNa3Mk37MaQf1Xk7CBQ4Mi6dxCukZyzglHeCQrMzL B1n6OVQTL5HunvUgO59qYmaCCR8rzw8j8dUPHlJ+KcXqkSGtrAqMLAxXEHYhqKWEVxc3 0pyvc3RrakptDlICe79qt1nNarwVFnHOl0ppTpXGQ4/kSoGyooLJOo4hX4b69xmZb/TA 7jV4lh9BTU43BiaIpCjbYYDDynZjkQ6Es6H4fqIzLbTp6D2Zq2EZsFcuOwmvTVVkEY5h vxdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772527391; x=1773132191; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=IPkq+nTUsJcZaKGe1citY1IgXLqCL2rHUfn5Jdh0u20=; b=AckEZ/914vJ6amYN5EPwncMNAI2n4zdUUUVJbMAYstGQIA7CWtYWcSn9F6Fd4hIt7/ WQdohL+Aa80kNZLyygj0lHTsjfMIB+13c6Ll9WXFAXK1zfSCXr95nUfFTKwXkrDvdPR6 n4n1PAsXIKgqS4gefmI1L5USHTREsShuntvUDB1IFx4KGJ0tfo5MZKes1TzJGYpgOgb9 2AvmosEahSCq00d9V2XhfLk3LO1EVsSmznFugyxEdTY+vA+9rFBhU/+vY7cssl6VNSn5 AFOdkGlwHWUy1R1ikxznH2489RBQzdLRRA6qMXayRJCBbVtVLJpNmENWvNgRsvDt04Yq 7HmA== X-Forwarded-Encrypted: i=1; AJvYcCW1hYKcOWdPP7rKivOOLEQL3N77fuuKCMlewQI/Nj0X/7TrWTUVgSwzsXatwqBJl+KMOt+rwVIwbR4=@lists.freedesktop.org X-Gm-Message-State: AOJu0YzJx19AIhm7jGjm2UeD4hYwzhFUqx3OwJYRWq68u/Tmsp21XwtZ nNgYApxsYsERi3wVA7iuvB1RWYmom2hVdiFQ7KPrHn7+WoNOISd4ANQL X-Gm-Gg: ATEYQzyh1ak8eZ3kT8AfzhFMcORKM2RxatOkFxBxTKKA8wQ6mXyfKWmiLUh2OYwb3Ka 0wbp8pTQutOrRrdx7pvFwT4t/ZEfzqDrafaDM3TaonEwlELA2wkfPF1LsqEUN1iXkHOv5Kyt1Be mJ8tztyJS7YqHccon4wfjPCDOgAd4wpDh6oSmIMsDOeYL65p4dPKz5WvufnOlxvvkSfWnBgWUoy KS2K+DSk35ELjX/kZ5qFNWbTq2dT78iPFufG7bH0jEwk01Mg6W58D6XhAfM/pZPQn5geH3thBbm ewHygPrwlojoCw1Tb5wCPDLrvt/P00/r14JNKCVI9yLTgFgpMTwnmFuIgThiCQykCv2wyimGJ76 Tvw3pXjqK4YAiQaWUFK4SUOMdNAu5kTwvM4MfpXYqyuWCN1EcSGAW5nJtXBFW9HgOOr8ly1/K4r 5JY/HseM3ILif1 X-Received: by 2002:a05:651c:b21:b0:387:bf2:da5 with SMTP id 38308e7fff4ca-389ff359412mr104376451fa.35.1772527390416; Tue, 03 Mar 2026 00:43:10 -0800 (PST) Received: from xeon ([188.163.112.72]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-389f30227a9sm32599471fa.42.2026.03.03.00.43.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Mar 2026 00:43:09 -0800 (PST) From: Svyatoslav Ryhel To: Thierry Reding , Thierry Reding , Mikko Perttunen , David Airlie , Simona Vetter , Jonathan Hunter , Sowjanya Komatineni , Luca Ceresoli , Mauro Carvalho Chehab , Greg Kroah-Hartman , Hans Verkuil , Svyatoslav Ryhel Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org, linux-media@vger.kernel.org, linux-staging@lists.linux.dev Subject: [PATCH v7 15/15] staging: media: tegra-video: add CSI support for Tegra20 and Tegra30 Date: Tue, 3 Mar 2026 10:42:38 +0200 Message-ID: <20260303084239.15007-16-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260303084239.15007-1-clamor95@gmail.com> References: <20260303084239.15007-1-clamor95@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" QWRkIHN1cHBvcnQgZm9yIE1JUEkgQ1NJIGRldmljZSBhbmQgY2FsaWJyYXRpb24gbG9naWMgZm91 bmQgaW4gVGVncmEyMCBhbmQKVGVncmEzMCBTb0MuCgpUbyBnZXQgQ1NJIG9wZXJhdGlvbmFsLCBh biBhZGRpdGlvbmFsIHN5bmNwb2ludCB3YXMgYWxsb2NhdGVkIHRvIHNlcnZlIGFzCnRoZSBDU0kg ZnJhbWUgY291bnRlci4gQm90aCBWSVAgYW5kIENTSSB1c2UgYW4gZXhpc3Rpbmcgc3luY3BvaW50 IGZvciBWSQpmcmFtZSBzdGFydCBldmVudHMuIFRoYXQgc2FpZCwgdGhlIGZyYW1lIGNhcHR1cmUg ZnVuY3Rpb24gd2FzIHJlZmFjdG9yZWQKdG8gcmVmbGVjdCB0aGUgYWRkaXRpb24gb2YgdGhlIENT SSBzeW5jcG9pbnQsIGFuZCB0aGUgQ1NJLXNwZWNpZmljCmNvbmZpZ3VyYXRpb24gaXMgZ3VhcmRl ZCBieSB0aGUgcHJlc2VuY2Ugb2YgYSBwYXNzZWQgQ1NJIGNoYW5uZWwgc3RydWN0dXJlCnBvaW50 ZXIuCgpUaGUgY2FtZXJhIGNhcHR1cmUgc2V0dXAncyBjb25maWd1cmF0aW9uIHdhcyByZWNvbnNp ZGVyZWQ6IHRoZSBmaXJzdCB0d28Kd3JpdGVzIG11c3QgYmUgZG9uZSBiZWZvcmUgdGVncmFfY2hh bm5lbF9zZXRfc3RyZWFtIGZvciBNSVBJIGNhbGlicmF0aW9uCnRvIHdvcmsgcHJvcGVybHk7IHRo ZSB0aGlyZCB3cml0ZSB3YXMgbW92ZWQgdG8gVklQL0NTSS1zcGVjaWZpYyBmdW5jdGlvbnMKc2lu Y2UgaXQgbXVzdCBiZSBzb3VyY2Utc3BlY2lmaWM7IHRoZSBmdW5jdGlvbiB3YXMgcGxhY2VkIGFm dGVyCnRlZ3JhX2NoYW5uZWxfc2V0X3N0cmVhbSBzbyB0aGUgaW5pdGlhbCBzZXF1ZW5jZSBpcyBw cmVzZXJ2ZWQgYW5kIGV4cGFuZGVkLgoKQ1NJIGNvbmZpZ3VyYXRpb24gc2VxdWVuY2VzIHdlcmUg YWRkZWQgYmFzZWQgb24gZG93bnN0cmVhbSAzLjEga2VybmVsCnNvdXJjZXMgYW5kIGFkanVzdGVk IHRvIHRoZSBleGlzdGluZyB2aWRlby10ZWdyYSBmcmFtZXdvcmsuIEFsdGhvdWdoClRlZ3JhMjAg YW5kIFRlZ3JhMzAgaGF2ZSB0aGUgc2FtZSBzZXQgb2YgY29uZmlndXJhdGlvbnMsIHRoZXkgZGlm ZmVyIGJ5CnRoZSBudW1iZXIgb2YgY2xvY2tzIHVzZWQgYnkgQ1NJLgoKRHJvcHBlZCB0aGUgc29m dHdhcmUgc3luY3BvaW50IGNvdW50ZXJzIGluIGZhdm9yIG9mIHJlYWRpbmcgc3luY3BvaW50cwpk aXJlY3RseSBhbmQgcGFzc2luZyB0aGUgaW5jcmVtZW50ZWQgdmFsdWUgdG8gdGhlIHBvbGxpbmcg ZnVuY3Rpb24uIElmIHRoZQpzeW5jcG9pbnQgaW5jcmVhc2UgZmFpbHMsIHRoZSBQUCBpcyByZXNl dC4gVGhpcyBjaGFuZ2Ugc2hvdWxkIHByZXZlbnQKcG9zc2libGUgcmFjZSBjb25kaXRpb25zLgoK TUlQSSBjYWxpYnJhdGlvbiBsb2dpYyB3YXMgcmVnaXN0ZXJlZCBpbiBDU0kgc2luY2UgVGVncmEy MCBhbmQgVGVncmEzMApoYXZlIG5vIGRlZGljYXRlZCBoYXJkd2FyZSBibG9jayBmb3IgdGhlc2Ug b3BlcmF0aW9ucyBhbmQgdXNlIENTSS4gVGhlc2UKY2FsbHMgYXJlIHVzZWQgZm9yIGJvdGggQ1NJ IGFuZCBEU0kgdG8gd29yayBwcm9wZXJseSwgd2hpY2ggaXMgd2h5IE1JUEkKY2FsaWJyYXRpb24g Y2Fubm90IGJlIGNvbnRhaW5lZCB3aXRoaW4gQ1NJLiBUaGUgcGFkcyBwYXNzZWQgdG8gdGhlCmNh bGlicmF0aW9uIGNhbGxzIHJlc2VtYmxlIENTSSBQT1JUX0EgKDApLCBDU0kgUE9SVF9CICgxKSwg RFNJLUEgKDMpIGFuZApEU0ktQiAoNCkuCgpUZXN0ZWQtYnk6IEx1Y2EgQ2VyZXNvbGkgPGx1Y2Eu Y2VyZXNvbGlAYm9vdGxpbi5jb20+ICMgdGVncmEyMCwgcGFyYWxsZWwgY2FtZXJhCkNvLWRldmVs b3BlZC1ieTogSm9uYXMgU2Nod8O2YmVsIDxqb25hc3NjaHdvZWJlbEB5YWhvby5kZT4KU2lnbmVk LW9mZi1ieTogSm9uYXMgU2Nod8O2YmVsIDxqb25hc3NjaHdvZWJlbEB5YWhvby5kZT4KU2lnbmVk LW9mZi1ieTogU3Z5YXRvc2xhdiBSeWhlbCA8Y2xhbW9yOTVAZ21haWwuY29tPgpSZXZpZXdlZC1i eTogTWlra28gUGVydHR1bmVuIDxtcGVydHR1bmVuQG52aWRpYS5jb20+Ci0tLQogZHJpdmVycy9z dGFnaW5nL21lZGlhL3RlZ3JhLXZpZGVvL2NzaS5jICAgICB8ICAxNyArCiBkcml2ZXJzL3N0YWdp bmcvbWVkaWEvdGVncmEtdmlkZW8vY3NpLmggICAgIHwgIDEwICsKIGRyaXZlcnMvc3RhZ2luZy9t ZWRpYS90ZWdyYS12aWRlby90ZWdyYTIwLmMgfCA2MjAgKysrKysrKysrKysrKysrKysrLS0KIGRy aXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS12aWRlby92aS5oICAgICAgfCAgIDIgLQogZHJpdmVy cy9zdGFnaW5nL21lZGlhL3RlZ3JhLXZpZGVvL3ZpZGVvLmMgICB8ICAgNiArCiA1IGZpbGVzIGNo YW5nZWQsIDYwOCBpbnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEtdmlkZW8vY3NpLmMgYi9kcml2ZXJzL3N0YWdpbmcv bWVkaWEvdGVncmEtdmlkZW8vY3NpLmMKaW5kZXggYzRkMzUxNGYxOWIzLi40MWQ1N2RhYzYxYTcg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS12aWRlby9jc2kuYworKysg Yi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEtdmlkZW8vY3NpLmMKQEAgLTgyNyw2ICs4Mjcs MTcgQEAgc3RhdGljIGludCB0ZWdyYV9jc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKIAogCWNzaS0+ZGV2ID0gJnBkZXYtPmRldjsKIAljc2ktPm9wcyA9IGNzaS0+c29jLT5v cHM7CisKKwlpZiAoY3NpLT5zb2MtPm1pcGlfb3BzKSB7CisJCXJldCA9IGRldm1fdGVncmFfbWlw aV9hZGRfcHJvdmlkZXIoJnBkZXYtPmRldiwgcGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCQkgICBj c2ktPnNvYy0+bWlwaV9vcHMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIGRldl9lcnJfcHJvYmUo JnBkZXYtPmRldiwgcmV0LAorCQkJCQkgICAgICJmYWlsZWQgdG8gYWRkIE1JUEkgY2FsaWJyYXRp b24gb3BlcmF0aW9uc1xuIik7CisJfQorCisJbXV0ZXhfaW5pdCgmY3NpLT5taXBpX2xvY2spOwor CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY3NpKTsKIAlwbV9ydW50aW1lX2VuYWJsZSgm cGRldi0+ZGV2KTsKIApAQCAtODU5LDYgKzg3MCwxMiBAQCBzdGF0aWMgdm9pZCB0ZWdyYV9jc2lf cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB9CiAKIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRlZ3JhX2NzaV9vZl9pZF90YWJsZVtdID0geworI2lmIGRlZmlu ZWQoQ09ORklHX0FSQ0hfVEVHUkFfMnhfU09DKQorCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRl Z3JhMjAtY3NpIiwgLmRhdGEgPSAmdGVncmEyMF9jc2lfc29jIH0sCisjZW5kaWYKKyNpZiBkZWZp bmVkKENPTkZJR19BUkNIX1RFR1JBXzN4X1NPQykKKwl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0 ZWdyYTMwLWNzaSIsIC5kYXRhID0gJnRlZ3JhMzBfY3NpX3NvYyB9LAorI2VuZGlmCiAjaWYgZGVm aW5lZChDT05GSUdfQVJDSF9URUdSQV8yMTBfU09DKQogCXsgLmNvbXBhdGlibGUgPSAibnZpZGlh LHRlZ3JhMjEwLWNzaSIsIC5kYXRhID0gJnRlZ3JhMjEwX2NzaV9zb2MgfSwKICNlbmRpZgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhLXZpZGVvL2NzaS5oIGIvZHJpdmVy cy9zdGFnaW5nL21lZGlhL3RlZ3JhLXZpZGVvL2NzaS5oCmluZGV4IDUzNDQwODhhYTAyMi4uZjAy NzdjYjQyNDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEtdmlkZW8v Y3NpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhLXZpZGVvL2NzaS5oCkBAIC0x MTUsNiArMTE1LDcgQEAgc3RydWN0IHRlZ3JhX2NzaV9vcHMgewogICogc3RydWN0IHRlZ3JhX2Nz aV9zb2MgLSBOVklESUEgVGVncmEgQ1NJIFNvQyBzdHJ1Y3R1cmUKICAqCiAgKiBAb3BzOiBjc2kg aGFyZHdhcmUgb3BlcmF0aW9ucworICogQG1pcGlfb3BzOiBNSVBJIGNhbGlicmF0aW9uIG9wZXJh dGlvbnMKICAqIEBjc2lfbWF4X2NoYW5uZWxzOiBzdXBwb3J0ZWQgbWF4IHN0cmVhbWluZyBjaGFu bmVscwogICogQGNsa19uYW1lczogY3NpIGFuZCBjaWwgY2xvY2sgbmFtZXMKICAqIEBudW1fY2xr czogdG90YWwgY2xvY2tzIGNvdW50CkBAIC0xMjMsNiArMTI0LDcgQEAgc3RydWN0IHRlZ3JhX2Nz aV9vcHMgewogICovCiBzdHJ1Y3QgdGVncmFfY3NpX3NvYyB7CiAJY29uc3Qgc3RydWN0IHRlZ3Jh X2NzaV9vcHMgKm9wczsKKwljb25zdCBzdHJ1Y3QgdGVncmFfbWlwaV9vcHMgKm1pcGlfb3BzOwog CXVuc2lnbmVkIGludCBjc2lfbWF4X2NoYW5uZWxzOwogCWNvbnN0IGNoYXIgKiBjb25zdCAqY2xr X25hbWVzOwogCXVuc2lnbmVkIGludCBudW1fY2xrczsKQEAgLTEzMCw2ICsxMzIsMTIgQEAgc3Ry dWN0IHRlZ3JhX2NzaV9zb2MgewogCXVuc2lnbmVkIGludCB0cGdfZnJtcmF0ZV90YWJsZV9zaXpl OwogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfVEVHUkFfMnhfU09DKQorZXh0ZXJuIGNv bnN0IHN0cnVjdCB0ZWdyYV9jc2lfc29jIHRlZ3JhMjBfY3NpX3NvYzsKKyNlbmRpZgorI2lmIGRl ZmluZWQoQ09ORklHX0FSQ0hfVEVHUkFfM3hfU09DKQorZXh0ZXJuIGNvbnN0IHN0cnVjdCB0ZWdy YV9jc2lfc29jIHRlZ3JhMzBfY3NpX3NvYzsKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FS Q0hfVEVHUkFfMjEwX1NPQykKIGV4dGVybiBjb25zdCBzdHJ1Y3QgdGVncmFfY3NpX3NvYyB0ZWdy YTIxMF9jc2lfc29jOwogI2VuZGlmCkBAIC0xNDQsNiArMTUyLDcgQEAgZXh0ZXJuIGNvbnN0IHN0 cnVjdCB0ZWdyYV9jc2lfc29jIHRlZ3JhMjEwX2NzaV9zb2M7CiAgKiBAdmRkOiB2ZGQgcmVndWxh dG9yIGZvciBDU0kgaGFyZHdhcmUsIHVzdWFsbHkgYXZkZF9kc2lfY3NpCiAgKiBAc29jOiBwb2lu dGVyIHRvIFNvQyBkYXRhIHN0cnVjdHVyZQogICogQG9wczogY3NpIG9wZXJhdGlvbnMKKyAqIEBt aXBpX2xvY2s6IGZvciBNSVBJIGNhbGlicmF0aW9uIG9wZXJhdGlvbnMKICAqIEBjc2lfY2hhbnM6 IGxpc3QgaGVhZCBmb3IgQ1NJIGNoYW5uZWxzCiAgKi8KIHN0cnVjdCB0ZWdyYV9jc2kgewpAQCAt MTU0LDYgKzE2Myw3IEBAIHN0cnVjdCB0ZWdyYV9jc2kgewogCXN0cnVjdCByZWd1bGF0b3IgKnZk ZDsKIAljb25zdCBzdHJ1Y3QgdGVncmFfY3NpX3NvYyAqc29jOwogCWNvbnN0IHN0cnVjdCB0ZWdy YV9jc2lfb3BzICpvcHM7CisJc3RydWN0IG11dGV4IG1pcGlfbG9jazsgLyogZm9yIHJlZ2lzdGVy IGFjY2VzcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgY3NpX2NoYW5zOwogfTsKIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhLXZpZGVvL3RlZ3JhMjAuYyBiL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS90ZWdyYS12aWRlby90ZWdyYTIwLmMKaW5kZXggMWI4ZjJhMjIxM2YyLi43 MDU2Y2ZiZTk4OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS12aWRl by90ZWdyYTIwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhLXZpZGVvL3RlZ3Jh MjAuYwpAQCAtNCw2ICs0LDkgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjMgU0tJREFUQSBH bWJICiAgKiBBdXRob3I6IEx1Y2EgQ2VyZXNvbGkgPGx1Y2EuY2VyZXNvbGlAYm9vdGxpbi5jb20+ CisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1IFN2eWF0b3NsYXYgUnloZWwgPGNsYW1vcjk1QGdt YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAyNSBKb25hcyBTY2h3w7ZiZWwgPGpvbmFzc2No d29lYmVsQHlhaG9vLmRlPgogICovCiAKIC8qCkBAIC0xMiwxMCArMTUsMTUgQEAKICAqLwogCiAj aW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNs dWRlIDxsaW51eC9jbGsvdGVncmEuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1 ZGUgPGxpbnV4L2hvc3QxeC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgogI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxs aW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdGVncmEtbWlwaS1jYWwuaD4KICNp bmNsdWRlIDxsaW51eC92NGwyLW1lZGlhYnVzLmg+CiAKICNpbmNsdWRlICJ2aXAuaCIKQEAgLTQy LDYgKzUwLDkgQEAgZW51bSB0ZWdyYV92aV9vdXQgewogI2RlZmluZSAgICAgICBWSV9DT05UX1NZ TkNQVF9PVVRfQ09OVElOVU9VU19TWU5DUFQJQklUKDgpCiAjZGVmaW5lICAgICAgIFZJX0NPTlRf U1lOQ1BUX09VVF9TWU5DUFRfSURYX1NGVAkJMAogCisjZGVmaW5lIFRFR1JBX1ZJX0NPTlRfU1lO Q1BUX0NTSV9QUF9GUkFNRV9TVEFSVChuKQkoMHgwMDcwICsgKG4pICogOCkKKyNkZWZpbmUgVEVH UkFfVklfQ09OVF9TWU5DUFRfQ1NJX1BQX0ZSQU1FX0VORChuKQkoMHgwMDc0ICsgKG4pICogOCkK KwogI2RlZmluZSBURUdSQV9WSV9WSV9JTlBVVF9DT05UUk9MCQkJMHgwMDg4CiAjZGVmaW5lICAg ICAgIFZJX0lOUFVUX0ZJRUxEX0RFVEVDVAkJCUJJVCgyNykKICNkZWZpbmUgICAgICAgVklfSU5Q VVRfQlQ2NTYJCQkJQklUKDI1KQpAQCAtODgsNiArOTksOCBAQCBlbnVtIHRlZ3JhX3ZpX291dCB7 CiAjZGVmaW5lICAgICAgIFZJX09VVFBVVF9PVVRQVVRfRk9STUFUX1lVVjQyMlBPU1QJKDMgPDwg VklfT1VUUFVUX09VVFBVVF9GT1JNQVRfU0ZUKQogI2RlZmluZSAgICAgICBWSV9PVVRQVVRfT1VU UFVUX0ZPUk1BVF9ZVVY0MjBQTEFOQVIJKDYgPDwgVklfT1VUUFVUX09VVFBVVF9GT1JNQVRfU0ZU KQogLyogVEVHUkFfVklfT1VUXzIgc3VwcG9ydGVkIGZvcm1hdHMgKi8KKyNkZWZpbmUgICAgICAg VklfT1VUUFVUX09VVFBVVF9GT1JNQVRfQ1NJX1BQQV9CQVlFUgkoNyA8PCBWSV9PVVRQVVRfT1VU UFVUX0ZPUk1BVF9TRlQpCisjZGVmaW5lICAgICAgIFZJX09VVFBVVF9PVVRQVVRfRk9STUFUX0NT SV9QUEJfQkFZRVIJKDggPDwgVklfT1VUUFVUX09VVFBVVF9GT1JNQVRfU0ZUKQogI2RlZmluZSAg ICAgICBWSV9PVVRQVVRfT1VUUFVUX0ZPUk1BVF9WSVBfQkFZRVJfRElSRUNUCSg5IDw8IFZJX09V VFBVVF9PVVRQVVRfRk9STUFUX1NGVCkKIAogI2RlZmluZSBURUdSQV9WSV9WSVBfSF9BQ1RJVkUJ CQkJMHgwMGE0CkBAIC0xNTIsOCArMTY1LDEwNiBAQCBlbnVtIHRlZ3JhX3ZpX291dCB7CiAjZGVm aW5lIFRFR1JBX1ZJX1ZJX1JBSVNFCQkJCTB4MDFhYwogI2RlZmluZSAgICAgICBWSV9WSV9SQUlT RV9PTl9FREdFCQkJQklUKDApCiAKKyNkZWZpbmUgVEVHUkFfVklfQ1NJX1BQX1JBSVNFX0ZSQU1F X1NUQVJUKG4pCQkoMHgwMWQ4ICsgKG4pICogOCkKKyNkZWZpbmUgVEVHUkFfVklfQ1NJX1BQX1JB SVNFX0ZSQU1FX0VORChuKQkJKDB4MDFkYyArIChuKSAqIDgpCisjZGVmaW5lIFRFR1JBX1ZJX0NT SV9QUF9IX0FDVElWRShuKQkJCSgweDAxZTggKyAobikgKiA4KQorI2RlZmluZSBURUdSQV9WSV9D U0lfUFBfVl9BQ1RJVkUobikJCQkoMHgwMWVjICsgKG4pICogOCkKKworLyogVGVncmEyMCBDU0kg cmVnaXN0ZXJzOiBTdGFydHMgZnJvbSAweDgwMCwgb2Zmc2V0IDB4MCAqLworI2RlZmluZSBURUdS QV9DU0lfVklfSU5QVVRfU1RSRUFNX0NPTlRST0wJCTB4MDAwMAorI2RlZmluZSBURUdSQV9DU0lf SE9TVF9JTlBVVF9TVFJFQU1fQ09OVFJPTAkJMHgwMDA4CisjZGVmaW5lIFRFR1JBX0NTSV9JTlBV VF9TVFJFQU1fQ09OVFJPTChuKQkJKDB4MDAxMCArIChuKSAqIDB4MmMpCisjZGVmaW5lICAgICAg IENTSV9TS0lQX1BBQ0tFVF9USFJFU0hPTEQobikJCSgoKG4pICYgMHhmZikgPDwgMTYpCisjZGVm aW5lIFRFR1JBX0NTSV9QSVhFTF9TVFJFQU1fQ09OVFJPTDAobikJCSgweDAwMTggKyAobikgKiAw eDJjKQorI2RlZmluZSAgICAgICBDU0lfUFBfUEFEX0ZSQU1FX1BBRDBTCQkJKDAgPDwgMjgpCisj ZGVmaW5lICAgICAgIENTSV9QUF9QQURfRlJBTUVfUEFEMVMJCQkoMSA8PCAyOCkKKyNkZWZpbmUg ICAgICAgQ1NJX1BQX1BBRF9GUkFNRV9OT1BBRAkJCSgyIDw8IDI4KQorI2RlZmluZSAgICAgICBD U0lfUFBfSEVBREVSX0VDX0VOQUJMRQkJCUJJVCgyNykKKyNkZWZpbmUgICAgICAgQ1NJX1BQX1BB RF9TSE9SVF9MSU5FX1BBRDBTCQkoMCA8PCAyNCkKKyNkZWZpbmUgICAgICAgQ1NJX1BQX1BBRF9T SE9SVF9MSU5FX1BBRDFTCQkoMSA8PCAyNCkKKyNkZWZpbmUgICAgICAgQ1NJX1BQX1BBRF9TSE9S VF9MSU5FX05PUEFECQkoMiA8PCAyNCkKKyNkZWZpbmUgICAgICAgQ1NJX1BQX0VNQkVEREVEX0RB VEFfRU1CRURERUQJCUJJVCgyMCkKKyNkZWZpbmUgICAgICAgQ1NJX1BQX09VVFBVVF9GT1JNQVRf QVJCSVRSQVJZCQkoMCA8PCAxNikKKyNkZWZpbmUgICAgICAgQ1NJX1BQX09VVFBVVF9GT1JNQVRf UElYRUwJCSgxIDw8IDE2KQorI2RlZmluZSAgICAgICBDU0lfUFBfT1VUUFVUX0ZPUk1BVF9QSVhF TF9SRVAJCSgyIDw8IDE2KQorI2RlZmluZSAgICAgICBDU0lfUFBfT1VUUFVUX0ZPUk1BVF9TVE9S RQkJKDMgPDwgMTYpCisjZGVmaW5lICAgICAgIENTSV9QUF9WSVJUVUFMX0NIQU5ORUxfSUQobikJ CSgoKG4pIC0gMSkgPDwgMTQpCisjZGVmaW5lICAgICAgIENTSV9QUF9EQVRBX1RZUEUobikJCQko KG4pIDw8IDgpCisjZGVmaW5lICAgICAgIENTSV9QUF9DUkNfQ0hFQ0tfRU5BQkxFCQkJQklUKDcp CisjZGVmaW5lICAgICAgIENTSV9QUF9XT1JEX0NPVU5UX0hFQURFUgkJCUJJVCg2KQorI2RlZmlu ZSAgICAgICBDU0lfUFBfREFUQV9JREVOVElGSUVSX0VOQUJMRQkJQklUKDUpCisjZGVmaW5lICAg ICAgIENTSV9QUF9QQUNLRVRfSEVBREVSX1NFTlQJCQlCSVQoNCkKKyNkZWZpbmUgVEVHUkFfQ1NJ X1BJWEVMX1NUUkVBTV9DT05UUk9MMShuKQkJKDB4MDAxYyArIChuKSAqIDB4MmMpCisjZGVmaW5l IFRFR1JBX0NTSV9QSVhFTF9TVFJFQU1fV09SRF9DT1VOVChuKQkJKDB4MDAyMCArIChuKSAqIDB4 MmMpCisjZGVmaW5lIFRFR1JBX0NTSV9QSVhFTF9TVFJFQU1fR0FQKG4pCQkJKDB4MDAyNCArIChu KSAqIDB4MmMpCisjZGVmaW5lICAgICAgIENTSV9QUF9GUkFNRV9NSU5fR0FQKG4pCQkJKCgobikg JiAweGZmZmYpIDw8IDE2KQorI2RlZmluZSAgICAgICBDU0lfUFBfTElORV9NSU5fR0FQKG4pCQkJ KCgobikgJiAweGZmZmYpKQorI2RlZmluZSBURUdSQV9DU0lfUElYRUxfU1RSRUFNX1BQX0NPTU1B TkQobikJCSgweDAwMjggKyAobikgKiAweDJjKQorI2RlZmluZSAgICAgICBDU0lfUFBfU1RBUlRf TUFSS0VSX0ZSQU1FX01BWChuKQkJKCgobikgJiAweGYpIDw8IDEyKQorI2RlZmluZSAgICAgICBD U0lfUFBfU1RBUlRfTUFSS0VSX0ZSQU1FX01JTihuKQkJKCgobikgJiAweGYpIDw8IDgpCisjZGVm aW5lICAgICAgIENTSV9QUF9WU1lOQ19TVEFSVF9NQVJLRVIJCQlCSVQoNCkKKyNkZWZpbmUgICAg ICAgQ1NJX1BQX1NJTkdMRV9TSE9UCQkJQklUKDIpCisjZGVmaW5lICAgICAgIENTSV9QUF9OT1AJ CQkJMAorI2RlZmluZSAgICAgICBDU0lfUFBfRU5BQkxFCQkJCTEKKyNkZWZpbmUgICAgICAgQ1NJ X1BQX0RJU0FCTEUJCQkJMgorI2RlZmluZSAgICAgICBDU0lfUFBfUkVTRVQJCQkJMworI2RlZmlu ZSBURUdSQV9DU0lfUEhZX0NJTF9DT01NQU5ECQkJMHgwMDY4CisjZGVmaW5lICAgICAgIENTSV9B X1BIWV9DSUxfTk9QCQkJCTB4MAorI2RlZmluZSAgICAgICBDU0lfQV9QSFlfQ0lMX0VOQUJMRQkJ CTB4MQorI2RlZmluZSAgICAgICBDU0lfQV9QSFlfQ0lMX0RJU0FCTEUJCQkweDIKKyNkZWZpbmUg ICAgICAgQ1NJX0FfUEhZX0NJTF9FTkFCTEVfTUFTSwkJCTB4MworI2RlZmluZSAgICAgICBDU0lf Ql9QSFlfQ0lMX05PUAkJCQkoMHgwIDw8IDE2KQorI2RlZmluZSAgICAgICBDU0lfQl9QSFlfQ0lM X0VOQUJMRQkJCSgweDEgPDwgMTYpCisjZGVmaW5lICAgICAgIENTSV9CX1BIWV9DSUxfRElTQUJM RQkJCSgweDIgPDwgMTYpCisjZGVmaW5lICAgICAgIENTSV9CX1BIWV9DSUxfRU5BQkxFX01BU0sJ CQkoMHgzIDw8IDE2KQorI2RlZmluZSBURUdSQV9DU0lfUEhZX0NJTF9DT05UUk9MMChuKQkJCSgw eDAwNmMgKyAobikgKiA0KQorI2RlZmluZSAgICAgICBDU0lfQ09OVElOVU9VU19DTE9DS19NT0RF X0VOQUJMRQkJQklUKDUpCisjZGVmaW5lIFRFR1JBX0NTSV9DU0lfUElYRUxfUEFSU0VSX1NUQVRV UwkJMHgwMDc4CisjZGVmaW5lIFRFR1JBX0NTSV9DU0lfQ0lMX1NUQVRVUwkJCTB4MDA3YworI2Rl ZmluZSAgICAgICBDU0lfTUlQSV9BVVRPX0NBTF9ET05FCQkJQklUKDE1KQorI2RlZmluZSBURUdS QV9DU0lfQ1NJX1BJWEVMX1BBUlNFUl9JTlRFUlJVUFRfTUFTSwkweDAwODAKKyNkZWZpbmUgVEVH UkFfQ1NJX0NTSV9DSUxfSU5URVJSVVBUX01BU0sJCTB4MDA4NAorI2RlZmluZSBURUdSQV9DU0lf Q1NJX1JFQURPTkxZX1NUQVRVUwkJCTB4MDA4OAorI2RlZmluZSBURUdSQV9DU0lfRVNDQVBFX01P REVfQ09NTUFORAkJCTB4MDA4YworI2RlZmluZSBURUdSQV9DU0lfRVNDQVBFX01PREVfREFUQQkJ CTB4MDA5MAorI2RlZmluZSBURUdSQV9DU0lfQ0lMX1BBRF9DT05GSUcwKG4pCQkJKDB4MDA5NCAr IChuKSAqIDgpCisjZGVmaW5lIFRFR1JBX0NTSV9DSUxfUEFEX0NPTkZJRzEobikJCQkoMHgwMDk4 ICsgKG4pICogOCkKKyNkZWZpbmUgVEVHUkFfQ1NJX0NJTF9QQURfQ09ORklHCQkJMHgwMGE0Cisj ZGVmaW5lIFRFR1JBX0NTSV9DSUxBX01JUElfQ0FMX0NPTkZJRwkJCTB4MDBhOAorI2RlZmluZSBU RUdSQV9DU0lfQ0lMQl9NSVBJX0NBTF9DT05GSUcJCQkweDAwYWMKKyNkZWZpbmUgICAgICAgQ1NJ X0NJTF9NSVBJX0NBTF9TVEFSVENBTAkJCUJJVCgzMSkKKyNkZWZpbmUgICAgICAgQ1NJX0NJTF9N SVBJX0NBTF9PVkVSSURFX0EJCUJJVCgzMCkKKyNkZWZpbmUgICAgICAgQ1NJX0NJTF9NSVBJX0NB TF9PVkVSSURFX0IJCUJJVCgzMCkKKyNkZWZpbmUgICAgICAgQ1NJX0NJTF9NSVBJX0NBTF9OT0lT RV9GTFQobikJCSgoKG4pICYgMHhmKSA8PCAyNikKKyNkZWZpbmUgICAgICAgQ1NJX0NJTF9NSVBJ X0NBTF9QUkVTQ0FMRShuKQkJKCgobikgJiAweDMpIDw8IDI0KQorI2RlZmluZSAgICAgICBDU0lf Q0lMX01JUElfQ0FMX1NFTF9BCQkJQklUKDIxKQorI2RlZmluZSAgICAgICBDU0lfQ0lMX01JUElf Q0FMX1NFTF9CCQkJQklUKDIxKQorI2RlZmluZSAgICAgICBDU0lfQ0lMX01JUElfQ0FMX0hTUERP UyhuKQkJKCgobikgJiAweDFmKSA8PCAxNikKKyNkZWZpbmUgICAgICAgQ1NJX0NJTF9NSVBJX0NB TF9IU1BVT1MobikJCSgoKG4pICYgMHgxZikgPDwgOCkKKyNkZWZpbmUgICAgICAgQ1NJX0NJTF9N SVBJX0NBTF9URVJNT1MobikJCSgoKG4pICYgMHgxZikpCisjZGVmaW5lIFRFR1JBX0NTSV9DSUxf TUlQSV9DQUxfU1RBVFVTCQkJMHgwMGIwCisjZGVmaW5lIFRFR1JBX0NTSV9DTEtFTl9PVkVSUklE RQkJCTB4MDBiNAorI2RlZmluZSBURUdSQV9DU0lfREVCVUdfQ09OVFJPTAkJCQkweDAwYjgKKyNk ZWZpbmUgICAgICAgQ1NJX0RFQlVHX0NPTlRST0xfREVCVUdfRU5fRU5BQkxFRAlCSVQoMCkKKyNk ZWZpbmUgICAgICAgQ1NJX0RFQlVHX0NPTlRST0xfQ0xSX0RCR19DTlRfMAkJQklUKDQpCisjZGVm aW5lICAgICAgIENTSV9ERUJVR19DT05UUk9MX0NMUl9EQkdfQ05UXzEJCUJJVCg1KQorI2RlZmlu ZSAgICAgICBDU0lfREVCVUdfQ09OVFJPTF9DTFJfREJHX0NOVF8yCQlCSVQoNikKKyNkZWZpbmUg ICAgICAgQ1NJX0RFQlVHX0NPTlRST0xfREJHX0NOVF9TRUwobiwgdikJKCh2KSA8PCAoOCArIDgg KiAobikpKQorI2RlZmluZSBURUdSQV9DU0lfREVCVUdfQ09VTlRFUihuKQkJCSgweDAwYmMgKyAo bikgKiA0KQorI2RlZmluZSBURUdSQV9DU0lfUElYRUxfU1RSRUFNX0VYUEVDVEVEX0ZSQU1FKG4p CSgweDAwYzggKyAobikgKiA0KQorI2RlZmluZSAgICAgICBDU0lfUFBfRVhQX0ZSQU1FX0hFSUdI VChuKQkJKCgobikgJiAweDFmZmYpIDw8IDE2KQorI2RlZmluZSAgICAgICBDU0lfUFBfTUFYX0NM T0NLUyhuKQkJCSgoKG4pICYgMHhmZmYpIDw8IDQpCisjZGVmaW5lICAgICAgIENTSV9QUF9MSU5F X1RJTUVPVVRfRU5BQkxFCQlCSVQoMCkKKyNkZWZpbmUgVEVHUkFfQ1NJX0RTSV9NSVBJX0NBTF9D T05GSUcJCQkweDAwZDAKKyNkZWZpbmUgVEVHUkFfQ1NJX01JUElCSUFTX1BBRF9DT05GSUcJCQkw eDAwZDQKKyNkZWZpbmUgICAgICAgQ1NJX1BBRF9EUklWX0ROX1JFRihuKQkJCSgoKG4pICYgMHg3 KSA8PCAxNikKKyNkZWZpbmUgICAgICAgQ1NJX1BBRF9EUklWX1VQX1JFRihuKQkJCSgoKG4pICYg MHg3KSA8PCA4KQorI2RlZmluZSAgICAgICBDU0lfUEFEX1RFUk1fUkVGKG4pCQkJKCgobikgJiAw eDcpIDw8IDApCisjZGVmaW5lIFRFR1JBX0NTSV9DU0lfQ0lMQV9TVEFUVVMJCQkweDAwZDgKKyNk ZWZpbmUgVEVHUkFfQ1NJX0NTSV9DSUxCX1NUQVRVUwkJCTB4MDBkYworCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotICogVkkKKyAqIFJlYWQgYW5kIFdyaXRlIGhlbHBlcnMKICAqLwogCiBzdGF0aWMg dm9pZCB0ZWdyYTIwX3ZpX3dyaXRlKHN0cnVjdCB0ZWdyYV92aV9jaGFubmVsICpjaGFuLCB1bnNp Z25lZCBpbnQgYWRkciwgdTMyIHZhbCkKQEAgLTE2MSw2ICsyNzIsMzUgQEAgc3RhdGljIHZvaWQg dGVncmEyMF92aV93cml0ZShzdHJ1Y3QgdGVncmFfdmlfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQg aW50IGFkZHIsIHUKIAl3cml0ZWwodmFsLCBjaGFuLT52aS0+aW9tZW0gKyBhZGRyKTsKIH0KIAor c3RhdGljIGludCBfX21heWJlX3VudXNlZCB0ZWdyYTIwX3ZpX3JlYWQoc3RydWN0IHRlZ3JhX3Zp X2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBhZGRyKQoreworCXJldHVybiByZWFkbChjaGFu LT52aS0+aW9tZW0gKyBhZGRyKTsKK30KKworc3RhdGljIHZvaWQgdGVncmEyMF9jc2lfd3JpdGUo c3RydWN0IHRlZ3JhX2NzaV9jaGFubmVsICpjc2lfY2hhbiwgdW5zaWduZWQgaW50IGFkZHIsIHUz MiB2YWwpCit7CisJd3JpdGVsKHZhbCwgY3NpX2NoYW4tPmNzaS0+aW9tZW0gKyBhZGRyKTsKK30K Kworc3RhdGljIGludCBfX21heWJlX3VudXNlZCB0ZWdyYTIwX2NzaV9yZWFkKHN0cnVjdCB0ZWdy YV9jc2lfY2hhbm5lbCAqY3NpX2NoYW4sIHVuc2lnbmVkIGludCBhZGRyKQoreworCXJldHVybiBy ZWFkbChjc2lfY2hhbi0+Y3NpLT5pb21lbSArIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCB0ZWdy YTIwX21pcGlfd3JpdGUoc3RydWN0IHRlZ3JhX2NzaSAqY3NpLCB1bnNpZ25lZCBpbnQgYWRkciwg dTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBjc2ktPmlvbWVtICsgYWRkcik7Cit9CisKK3N0YXRp YyBpbnQgX19tYXliZV91bnVzZWQgdGVncmEyMF9taXBpX3JlYWQoc3RydWN0IHRlZ3JhX2NzaSAq Y3NpLCB1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gcmVhZGwoY3NpLT5pb21lbSArIGFk ZHIpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVkkKKyAqLworCiAvKgogICogR2V0 IHRoZSBtYWluIGlucHV0IGZvcm1hdCAoWVVWL1JHQi4uLikgYW5kIHRoZSBZVVYgdmFyaWFudCBh cyB2YWx1ZXMgdG8KICAqIGJlIHdyaXR0ZW4gaW50byByZWdpc3RlcnMgZm9yIHRoZSBjdXJyZW50 IFZJIGlucHV0IG1idXMgY29kZS4KQEAgLTI4MywyMCArNDIzLDI3IEBAIHN0YXRpYyBpbnQgdGVn cmEyMF92aV9lbmFibGUoc3RydWN0IHRlZ3JhX3ZpICp2aSwgYm9vbCBvbikKIHN0YXRpYyBpbnQg dGVncmEyMF9jaGFubmVsX2hvc3QxeF9zeW5jcHRfaW5pdChzdHJ1Y3QgdGVncmFfdmlfY2hhbm5l bCAqY2hhbikKIHsKIAlzdHJ1Y3QgdGVncmFfdmkgKnZpID0gY2hhbi0+dmk7Ci0Jc3RydWN0IGhv c3QxeF9zeW5jcHQgKm91dF9zcDsKKwlzdHJ1Y3QgaG9zdDF4X3N5bmNwdCAqb3V0X3NwLCAqZnNf c3A7CiAKIAlvdXRfc3AgPSBob3N0MXhfc3luY3B0X3JlcXVlc3QoJnZpLT5jbGllbnQsIEhPU1Qx WF9TWU5DUFRfQ0xJRU5UX01BTkFHRUQpOwogCWlmICghb3V0X3NwKQotCQlyZXR1cm4gLUVOT01F TTsKKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUodmktPmRldiwgLUVCVVNZLCAiZmFpbGVkIHRvIHJl cXVlc3QgbXcgYWNrIHN5bmNwb2ludFxuIik7CiAKIAljaGFuLT5td19hY2tfc3BbMF0gPSBvdXRf c3A7CiAKKwlmc19zcCA9IGhvc3QxeF9zeW5jcHRfcmVxdWVzdCgmdmktPmNsaWVudCwgSE9TVDFY X1NZTkNQVF9DTElFTlRfTUFOQUdFRCk7CisJaWYgKCFmc19zcCkKKwkJcmV0dXJuIGRldl9lcnJf cHJvYmUodmktPmRldiwgLUVCVVNZLCAiZmFpbGVkIHRvIHJlcXVlc3QgZnJhbWUgc3RhcnQgc3lu Y3BvaW50XG4iKTsKKworCWNoYW4tPmZyYW1lX3N0YXJ0X3NwWzBdID0gZnNfc3A7CisKIAlyZXR1 cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdGVncmEyMF9jaGFubmVsX2hvc3QxeF9zeW5jcHRfZnJl ZShzdHJ1Y3QgdGVncmFfdmlfY2hhbm5lbCAqY2hhbikKIHsKIAlob3N0MXhfc3luY3B0X3B1dChj aGFuLT5td19hY2tfc3BbMF0pOworCWhvc3QxeF9zeW5jcHRfcHV0KGNoYW4tPmZyYW1lX3N0YXJ0 X3NwWzBdKTsKIH0KIAogc3RhdGljIHZvaWQgdGVncmEyMF9mbXRfYWxpZ24oc3RydWN0IHY0bDJf cGl4X2Zvcm1hdCAqcGl4LCB1bnNpZ25lZCBpbnQgYnBwKQpAQCAtNDI0LDQxICs1NzEsOTEgQEAg c3RhdGljIHZvaWQgdGVncmEyMF9jaGFubmVsX3ZpX2J1ZmZlcl9zZXR1cChzdHJ1Y3QgdGVncmFf dmlfY2hhbm5lbCAqY2hhbiwKIH0KIAogc3RhdGljIGludCB0ZWdyYTIwX2NoYW5uZWxfY2FwdHVy ZV9mcmFtZShzdHJ1Y3QgdGVncmFfdmlfY2hhbm5lbCAqY2hhbiwKLQkJCQkJIHN0cnVjdCB0ZWdy YV9jaGFubmVsX2J1ZmZlciAqYnVmKQorCQkJCQkgc3RydWN0IHRlZ3JhX2NoYW5uZWxfYnVmZmVy ICpidWYsCisJCQkJCSBzdHJ1Y3QgdGVncmFfY3NpX2NoYW5uZWwgKmNzaV9jaGFuKQogeworCXUz MiB2YWw7CiAJaW50IGVycjsKIAotCWNoYW4tPm5leHRfb3V0X3NwX2lkeCsrOwotCiAJdGVncmEy MF9jaGFubmVsX3ZpX2J1ZmZlcl9zZXR1cChjaGFuLCBidWYpOwogCi0JdGVncmEyMF92aV93cml0 ZShjaGFuLCBURUdSQV9WSV9DQU1FUkFfQ09OVFJPTCwgVklfQ0FNRVJBX0NPTlRST0xfVklQX0VO QUJMRSk7CisJaWYgKGNzaV9jaGFuKSB7CisJCXUzMiBwb3J0ID0gY3NpX2NoYW4tPmNzaV9wb3J0 X251bXNbMF0gJiAxOworCisJCXRlZ3JhMjBfY3NpX3dyaXRlKGNzaV9jaGFuLCBURUdSQV9DU0lf UElYRUxfU1RSRUFNX1BQX0NPTU1BTkQocG9ydCksCisJCQkJICBDU0lfUFBfU1RBUlRfTUFSS0VS X0ZSQU1FX01BWCgweGYpIHwKKwkJCQkgIENTSV9QUF9TSU5HTEVfU0hPVCB8IENTSV9QUF9FTkFC TEUpOworCisJCS8qCisJCSAqIEVSRVNUQVJUU1lTIHdvcmthcm91bmQgZm9yIHN5bmNwb2ludHMg aXMgdXNlZCBiZWNhdXNlIGhvc3QxeF9zeW5jcHRfd2FpdAorCQkgKiBpcyB1bmNvbmRpdGlvbmFs bHkgaW50ZXJydXB0aWJsZS4gVGhpcyBpcyBub3QgYW4gaXNzdWUgd2l0aCBzaW5nbGUgc2hvdHMK KwkJICogb3IgbG93IHJlc29sdXRpb24gY2FwdHVyZSwgYnV0IC1FUkVTVEFSVFNZUyBvY2N1cnMg cXVpdGUgb2Z0ZW4gd2l0aCBoaWdoCisJCSAqIHJlc29sdXRpb24gb3IgaGlnaCBmcmFtZXJhdGUg Y2FwdHVyZXMgYW5kIGlmIG5vdCBhZGRyZXNzZWQgaGVyZSB3aWxsCisJCSAqIGNhdXNlIGNhcHR1 cmUgdG8gZmFpbCBlbnRpcmVseS4KKwkJICoKKwkJICogVE9ETzogb25jZSB1bmludGVycnVwdGli bGUgdmVyc2lvbiBvZiBob3N0MXhfc3luY3B0X3dhaXQgaXMgYXZhaWxhYmxlLAorCQkgKiBob3N0 MXhfc3luY3B0X3dhaXQgc2hvdWxkIGJlIHN3YXBwZWQgYW5kIEVSRVNUQVJUU1lTIHdvcmthcm91 bmQgY2FuIGJlCisJCSAqIHJlbW92ZWQuCisJCSAqLworCisJCXZhbCA9IGhvc3QxeF9zeW5jcHRf cmVhZChjaGFuLT5mcmFtZV9zdGFydF9zcFswXSk7CisJCWRvIHsKKwkJCWVyciA9IGhvc3QxeF9z eW5jcHRfd2FpdChjaGFuLT5mcmFtZV9zdGFydF9zcFswXSwKKwkJCQkJCSB2YWwgKyAxLCBURUdS QV9WSV9TWU5DUFRfV0FJVF9USU1FT1VULCBOVUxMKTsKKwkJfSB3aGlsZSAoZXJyID09IC1FUkVT VEFSVFNZUyk7CisKKwkJaWYgKGVycikgeworCQkJaWYgKGVyciAhPSAtRVJFU1RBUlRTWVMpCisJ CQkJZGV2X2Vycl9yYXRlbGltaXRlZCgmY2hhbi0+dmlkZW8uZGV2LAorCQkJCQkJICAgICJmcmFt ZSBzdGFydCBzeW5jcHQgdGltZW91dDogJWRcbiIsIGVycik7CisKKwkJCXRlZ3JhMjBfY3NpX3dy aXRlKGNzaV9jaGFuLCBURUdSQV9DU0lfUElYRUxfU1RSRUFNX1BQX0NPTU1BTkQocG9ydCksCisJ CQkJCSAgQ1NJX1BQX1NUQVJUX01BUktFUl9GUkFNRV9NQVgoMHhmKSB8IENTSV9QUF9SRVNFVCk7 CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hhbiwgVEVH UkFfQ1NJX1BJWEVMX1NUUkVBTV9QUF9DT01NQU5EKHBvcnQpLAorCQkJCSAgQ1NJX1BQX1NUQVJU X01BUktFUl9GUkFNRV9NQVgoMHhmKSB8CisJCQkJICBDU0lfUFBfRElTQUJMRSk7CisJfSBlbHNl IHsKKwkJdGVncmEyMF92aV93cml0ZShjaGFuLCBURUdSQV9WSV9DQU1FUkFfQ09OVFJPTCwgVklf Q0FNRVJBX0NPTlRST0xfVklQX0VOQUJMRSk7CisJfQorCisJdmFsID0gaG9zdDF4X3N5bmNwdF9y ZWFkKGNoYW4tPm13X2Fja19zcFswXSk7CisJZG8geworCQllcnIgPSBob3N0MXhfc3luY3B0X3dh aXQoY2hhbi0+bXdfYWNrX3NwWzBdLCB2YWwgKyAxLAorCQkJCQkgVEVHUkFfVklfU1lOQ1BUX1dB SVRfVElNRU9VVCwgTlVMTCk7CisJfSB3aGlsZSAoZXJyID09IC1FUkVTVEFSVFNZUyk7CiAKLQkv KiBXYWl0IGZvciBzeW5jcHQgY291bnRlciB0byByZWFjaCBmcmFtZSBzdGFydCBldmVudCB0aHJl c2hvbGQgKi8KLQllcnIgPSBob3N0MXhfc3luY3B0X3dhaXQoY2hhbi0+bXdfYWNrX3NwWzBdLCBj aGFuLT5uZXh0X291dF9zcF9pZHgsCi0JCQkJIFRFR1JBX1ZJX1NZTkNQVF9XQUlUX1RJTUVPVVQs IE5VTEwpOwogCWlmIChlcnIpIHsKLQkJaG9zdDF4X3N5bmNwdF9pbmNyKGNoYW4tPm13X2Fja19z cFswXSk7Ci0JCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmNoYW4tPnZpZGVvLmRldiwgImZyYW1lIHN0 YXJ0IHN5bmNwdCB0aW1lb3V0OiAlZFxuIiwgZXJyKTsKLQkJcmVsZWFzZV9idWZmZXIoY2hhbiwg YnVmLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKLQkJcmV0dXJuIGVycjsKKwkJaWYgKGVyciAhPSAt RVJFU1RBUlRTWVMpCisJCQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZjaGFuLT52aWRlby5kZXYsICJt dyBhY2sgc3luY3B0IHRpbWVvdXQ6ICVkXG4iLCBlcnIpOworCQlnb3RvIGV4aXQ7CiAJfQogCi0J dGVncmEyMF92aV93cml0ZShjaGFuLCBURUdSQV9WSV9DQU1FUkFfQ09OVFJPTCwKLQkJCSBWSV9D QU1FUkFfQ09OVFJPTF9TVE9QX0NBUFRVUkUgfCBWSV9DQU1FUkFfQ09OVFJPTF9WSVBfRU5BQkxF KTsKKwlpZiAoIWNzaV9jaGFuKQorCQl0ZWdyYTIwX3ZpX3dyaXRlKGNoYW4sIFRFR1JBX1ZJX0NB TUVSQV9DT05UUk9MLAorCQkJCSBWSV9DQU1FUkFfQ09OVFJPTF9TVE9QX0NBUFRVUkUgfCBWSV9D QU1FUkFfQ09OVFJPTF9WSVBfRU5BQkxFKTsKIAorZXhpdDoKIAlyZWxlYXNlX2J1ZmZlcihjaGFu LCBidWYsIFZCMl9CVUZfU1RBVEVfRE9ORSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwog fQogCiBzdGF0aWMgaW50IHRlZ3JhMjBfY2hhbl9jYXB0dXJlX2t0aHJlYWRfc3RhcnQodm9pZCAq ZGF0YSkKIHsKIAlzdHJ1Y3QgdGVncmFfdmlfY2hhbm5lbCAqY2hhbiA9IGRhdGE7CiAJc3RydWN0 IHRlZ3JhX2NoYW5uZWxfYnVmZmVyICpidWY7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpjc2lfc3Vi ZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdGVncmFfY3NpX2NoYW5uZWwgKmNzaV9jaGFuID0gTlVMTDsK IAl1bnNpZ25lZCBpbnQgcmV0cmllcyA9IDA7CiAJaW50IGVyciA9IDA7CiAKKwljc2lfc3ViZGV2 ID0gdGVncmFfY2hhbm5lbF9nZXRfcmVtb3RlX2NzaV9zdWJkZXYoY2hhbik7CisJaWYgKGNzaV9z dWJkZXYpCisJCWNzaV9jaGFuID0gdG9fY3NpX2NoYW4oY3NpX3N1YmRldik7CisKIAl3aGlsZSAo MSkgewogCQkvKgogCQkgKiBTb3VyY2UgaXMgbm90IHN0cmVhbWluZyBpZiBlcnJvciBpcyBub24t emVyby4KQEAgLTQ4Myw3ICs2ODAsNyBAQCBzdGF0aWMgaW50IHRlZ3JhMjBfY2hhbl9jYXB0dXJl X2t0aHJlYWRfc3RhcnQodm9pZCAqZGF0YSkKIAkJbGlzdF9kZWxfaW5pdCgmYnVmLT5xdWV1ZSk7 CiAJCXNwaW5fdW5sb2NrKCZjaGFuLT5zdGFydF9sb2NrKTsKIAotCQllcnIgPSB0ZWdyYTIwX2No YW5uZWxfY2FwdHVyZV9mcmFtZShjaGFuLCBidWYpOworCQllcnIgPSB0ZWdyYTIwX2NoYW5uZWxf Y2FwdHVyZV9mcmFtZShjaGFuLCBidWYsIGNzaV9jaGFuKTsKIAkJaWYgKCFlcnIpIHsKIAkJCXJl dHJpZXMgPSAwOwogCQkJY29udGludWU7CkBAIC01MTAsMjggKzcwNyw2IEBAIHN0YXRpYyB2b2lk IHRlZ3JhMjBfY2FtZXJhX2NhcHR1cmVfc2V0dXAoc3RydWN0IHRlZ3JhX3ZpX2NoYW5uZWwgKmNo YW4pCiAJZW51bSB0ZWdyYV92aV9vdXQgb3V0cHV0X2NoYW5uZWwgPSAoZGF0YV90eXBlID09IFRF R1JBX0lNQUdFX0RUX1JBVzggfHwKIAkJCQkJICAgIGRhdGFfdHlwZSA9PSBURUdSQV9JTUFHRV9E VF9SQVcxMCkgPwogCQkJCQkgICAgVEVHUkFfVklfT1VUXzIgOiBURUdSQV9WSV9PVVRfMTsKLQlp bnQgbWFpbl9vdXRwdXRfZm9ybWF0OwotCWludCB5dXZfb3V0cHV0X2Zvcm1hdDsKLQotCXRlZ3Jh MjBfdmlfZ2V0X291dHB1dF9mb3JtYXRzKGNoYW4sICZtYWluX291dHB1dF9mb3JtYXQsICZ5dXZf b3V0cHV0X2Zvcm1hdCk7Ci0KLQkvKgotCSAqIFNldCB1cCBsb3cgcGFzcyBmaWx0ZXIuICBVc2Ug MHgyNDAgZm9yIGNocm9tYXRpY2l0eSBhbmQgMHgyNDAKLQkgKiBmb3IgbHVtaW5hbmNlLCB3aGlj aCBpcyB0aGUgZGVmYXVsdCBhbmQgbWVhbnMgbm90IHRvIHRvdWNoCi0JICogYW55dGhpbmcuCi0J ICovCi0JdGVncmEyMF92aV93cml0ZShjaGFuLCBURUdSQV9WSV9IX0xQRl9DT05UUk9MLAotCQkJ IDB4MDI0MCA8PCBWSV9IX0xQRl9DT05UUk9MX0xVTUFfU0ZUIHwKLQkJCSAweDAyNDAgPDwgVklf SF9MUEZfQ09OVFJPTF9DSFJPTUFfU0ZUKTsKLQotCS8qIFNldCB1cCByYWlzZS1vbi1lZGdlLCBz byB3ZSBnZXQgYW4gaW50ZXJydXB0IG9uIGVuZCBvZiBmcmFtZS4gKi8KLQl0ZWdyYTIwX3ZpX3dy aXRlKGNoYW4sIFRFR1JBX1ZJX1ZJX1JBSVNFLCBWSV9WSV9SQUlTRV9PTl9FREdFKTsKLQotCXRl Z3JhMjBfdmlfd3JpdGUoY2hhbiwgVEVHUkFfVklfVklfT1VUUFVUX0NPTlRST0wob3V0cHV0X2No YW5uZWwpLAotCQkJIChjaGFuLT52ZmxpcCA/IFZJX09VVFBVVF9WX0RJUkVDVElPTiA6IDApIHwK LQkJCSAoY2hhbi0+aGZsaXAgPyBWSV9PVVRQVVRfSF9ESVJFQ1RJT04gOiAwKSB8Ci0JCQkgeXV2 X291dHB1dF9mb3JtYXQgPDwgVklfT1VUUFVUX1lVVl9PVVRQVVRfRk9STUFUX1NGVCB8Ci0JCQkg bWFpbl9vdXRwdXRfZm9ybWF0IDw8IFZJX09VVFBVVF9PVVRQVVRfRk9STUFUX1NGVCk7CiAKIAkv KiBTZXQgdXAgZnJhbWUgc2l6ZSAqLwogCXRlZ3JhMjBfdmlfd3JpdGUoY2hhbiwgVEVHUkFfVklf T1VUUFVUX0ZSQU1FX1NJWkUob3V0cHV0X2NoYW5uZWwpLApAQCAtNTYyLDE4ICs3MzcsMjggQEAg c3RhdGljIGludCB0ZWdyYTIwX3ZpX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2 cSwgdTMyIGNvdW50KQogCXN0cnVjdCBtZWRpYV9waXBlbGluZSAqcGlwZSA9ICZjaGFuLT52aWRl by5waXBlOwogCWludCBlcnI7CiAKLQljaGFuLT5uZXh0X291dF9zcF9pZHggPSBob3N0MXhfc3lu Y3B0X3JlYWQoY2hhbi0+bXdfYWNrX3NwWzBdKTsKLQogCWVyciA9IHZpZGVvX2RldmljZV9waXBl bGluZV9zdGFydCgmY2hhbi0+dmlkZW8sIHBpcGUpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3Jf cGlwZWxpbmVfc3RhcnQ7CiAKLQl0ZWdyYTIwX2NhbWVyYV9jYXB0dXJlX3NldHVwKGNoYW4pOwor CS8qCisJICogU2V0IHVwIGxvdyBwYXNzIGZpbHRlci4gIFVzZSAweDI0MCBmb3IgY2hyb21hdGlj aXR5IGFuZCAweDI0MAorCSAqIGZvciBsdW1pbmFuY2UsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGFu ZCBtZWFucyBub3QgdG8gdG91Y2gKKwkgKiBhbnl0aGluZy4KKwkgKi8KKwl0ZWdyYTIwX3ZpX3dy aXRlKGNoYW4sIFRFR1JBX1ZJX0hfTFBGX0NPTlRST0wsCisJCQkgMHgwMjQwIDw8IFZJX0hfTFBG X0NPTlRST0xfTFVNQV9TRlQgfAorCQkJIDB4MDI0MCA8PCBWSV9IX0xQRl9DT05UUk9MX0NIUk9N QV9TRlQpOworCisJLyogU2V0IHVwIHJhaXNlLW9uLWVkZ2UsIHNvIHdlIGdldCBhbiBpbnRlcnJ1 cHQgb24gZW5kIG9mIGZyYW1lLiAqLworCXRlZ3JhMjBfdmlfd3JpdGUoY2hhbiwgVEVHUkFfVklf VklfUkFJU0UsIFZJX1ZJX1JBSVNFX09OX0VER0UpOwogCiAJZXJyID0gdGVncmFfY2hhbm5lbF9z ZXRfc3RyZWFtKGNoYW4sIHRydWUpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3Jfc2V0X3N0cmVh bTsKIAorCXRlZ3JhMjBfY2FtZXJhX2NhcHR1cmVfc2V0dXAoY2hhbik7CisKIAljaGFuLT5zZXF1 ZW5jZSA9IDA7CiAKIAljaGFuLT5rdGhyZWFkX3N0YXJ0X2NhcHR1cmUgPSBrdGhyZWFkX3J1bih0 ZWdyYTIwX2NoYW5fY2FwdHVyZV9rdGhyZWFkX3N0YXJ0LApAQCAtNjY4LDYgKzg1MywzNDUgQEAg Y29uc3Qgc3RydWN0IHRlZ3JhX3ZpX3NvYyB0ZWdyYTIwX3ZpX3NvYyA9IHsKIAkuaGFzX2hfdl9m bGlwID0gdHJ1ZSwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNSVBJIENhbGlicmF0 aW9uCisgKi8KK3N0YXRpYyBpbnQgdGVncmEyMF9zdGFydF9wYWRfY2FsaWJyYXRpb24oc3RydWN0 IHRlZ3JhX21pcGlfZGV2aWNlICptaXBpKQoreworCXN0cnVjdCB0ZWdyYV9jc2kgKmNzaSA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKG1pcGktPnBkZXYpOworCXVuc2lnbmVkIGludCBwb3J0ID0gbWlw aS0+cGFkczsKKwl1MzIgdmFsdWU7CisJaW50IHJldDsKKworCWd1YXJkKG11dGV4KSgmY3NpLT5t aXBpX2xvY2spOworCisJcmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChjc2ktPmRldik7 CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjc2ktPmRldiwgImZhaWxlZCB0byBnZXQgcnVu dGltZSBQTTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJdGVncmEyMF9taXBp X3dyaXRlKGNzaSwgVEVHUkFfQ1NJX0RTSV9NSVBJX0NBTF9DT05GSUcsCisJCQkgICBDU0lfQ0lM X01JUElfQ0FMX0hTUERPUyg0KSB8CisJCQkgICBDU0lfQ0lMX01JUElfQ0FMX0hTUFVPUygzKSB8 CisJCQkgICBDU0lfQ0lMX01JUElfQ0FMX1RFUk1PUygwKSk7CisJdGVncmEyMF9taXBpX3dyaXRl KGNzaSwgVEVHUkFfQ1NJX01JUElCSUFTX1BBRF9DT05GSUcsCisJCQkgICBDU0lfUEFEX0RSSVZf RE5fUkVGKDUpIHwKKwkJCSAgIENTSV9QQURfRFJJVl9VUF9SRUYoNykgfAorCQkJICAgQ1NJX1BB RF9URVJNX1JFRigwKSk7CisKKwkvKiBDU0kgQiAqLworCXZhbHVlID0gQ1NJX0NJTF9NSVBJX0NB TF9IU1BET1MoMCkgfAorCQlDU0lfQ0lMX01JUElfQ0FMX0hTUFVPUygwKSB8CisJCUNTSV9DSUxf TUlQSV9DQUxfVEVSTU9TKDQpOworCisJaWYgKHBvcnQgPT0gUE9SVF9CKQorCQl2YWx1ZSB8PSBD U0lfQ0lMX01JUElfQ0FMX1NFTF9COworCisJdGVncmEyMF9taXBpX3dyaXRlKGNzaSwgVEVHUkFf Q1NJX0NJTEJfTUlQSV9DQUxfQ09ORklHLCB2YWx1ZSk7CisKKwkvKiBDU0kgQSAqLworCXZhbHVl ID0gQ1NJX0NJTF9NSVBJX0NBTF9TVEFSVENBTCB8CisJCUNTSV9DSUxfTUlQSV9DQUxfTk9JU0Vf RkxUKDB4YSkgfAorCQlDU0lfQ0lMX01JUElfQ0FMX1BSRVNDQUxFKDB4MikgfAorCQlDU0lfQ0lM X01JUElfQ0FMX0hTUERPUygwKSB8CisJCUNTSV9DSUxfTUlQSV9DQUxfSFNQVU9TKDApIHwKKwkJ Q1NJX0NJTF9NSVBJX0NBTF9URVJNT1MoNCk7CisKKwlpZiAocG9ydCA9PSBQT1JUX0EpCisJCXZh bHVlIHw9IENTSV9DSUxfTUlQSV9DQUxfU0VMX0E7CisKKwl0ZWdyYTIwX21pcGlfd3JpdGUoY3Np LCBURUdSQV9DU0lfQ0lMQV9NSVBJX0NBTF9DT05GSUcsIHZhbHVlKTsKKworCXRlZ3JhMjBfbWlw aV93cml0ZShjc2ksIFRFR1JBX0NTSV9DSUxfUEFEX0NPTkZJRywgMCk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCB0ZWdyYTIwX2ZpbmlzaF9wYWRfY2FsaWJyYXRpb24oc3RydWN0IHRl Z3JhX21pcGlfZGV2aWNlICptaXBpKQoreworCXN0cnVjdCB0ZWdyYV9jc2kgKmNzaSA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKG1pcGktPnBkZXYpOworCXZvaWQgX19pb21lbSAqY2lsX3N0YXR1c19y ZWcgPSBjc2ktPmlvbWVtICsgVEVHUkFfQ1NJX0NTSV9DSUxfU1RBVFVTOworCXVuc2lnbmVkIGlu dCBwb3J0ID0gbWlwaS0+cGFkczsKKwl1MzIgdmFsdWUsIHBwID0gMCwgY2lsID0gMDsKKwlpbnQg cmV0OworCisJLyogVGhpcyBwYXJ0IGlzIG9ubHkgZm9yIENTSSAqLworCWlmIChwb3J0ID4gUE9S VF9CKSB7CisJCXBtX3J1bnRpbWVfcHV0KGNzaS0+ZGV2KTsKKworCQlyZXR1cm4gMDsKKwl9CisK KwlndWFyZChtdXRleCkoJmNzaS0+bWlwaV9sb2NrKTsKKworCXJldCA9IHJlYWRsX3JlbGF4ZWRf cG9sbF90aW1lb3V0KGNpbF9zdGF0dXNfcmVnLCB2YWx1ZSwKKwkJCQkJIHZhbHVlICYgQ1NJX01J UElfQVVUT19DQUxfRE9ORSwgNTAsIDI1MDAwMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3dh cm4oY3NpLT5kZXYsICJNSVBJIGNhbGlicmF0aW9uIHRpbWVvdXQhXG4iKTsKKwkJZ290byBleGl0 OworCX0KKworCS8qIGNsZWFyIHN0YXR1cyAqLworCXRlZ3JhMjBfbWlwaV93cml0ZShjc2ksIFRF R1JBX0NTSV9DU0lfQ0lMX1NUQVRVUywgdmFsdWUpOworCXJldCA9IHJlYWRsX3JlbGF4ZWRfcG9s bF90aW1lb3V0KGNpbF9zdGF0dXNfcmVnLCB2YWx1ZSwKKwkJCQkJICEodmFsdWUgJiBDU0lfTUlQ SV9BVVRPX0NBTF9ET05FKSwgNTAsIDI1MDAwMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3dh cm4oY3NpLT5kZXYsICJNSVBJIGNhbGlicmF0aW9uIHN0YXR1cyB0aW1lb3V0IVxuIik7CisJCWdv dG8gZXhpdDsKKwl9CisKKwlwcCA9IHRlZ3JhMjBfbWlwaV9yZWFkKGNzaSwgVEVHUkFfQ1NJX0NT SV9QSVhFTF9QQVJTRVJfU1RBVFVTKTsKKwljaWwgPSB0ZWdyYTIwX21pcGlfcmVhZChjc2ksIFRF R1JBX0NTSV9DU0lfQ0lMX1NUQVRVUyk7CisJaWYgKHBwIHwgY2lsKSB7CisJCWRldl93YXJuKGNz aS0+ZGV2LCAiQ2FsaWJyYXRpb24gc3RhdHVzIG5vdCBiZWVuIGNsZWFyZWQhXG4iKTsKKwkJcmV0 ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworZXhpdDoKKwl0ZWdyYTIwX21pcGlfd3Jp dGUoY3NpLCBURUdSQV9DU0lfQ1NJX0NJTF9TVEFUVVMsIHBwKTsKKworCS8qIHVuLXNlbGVjdCB0 byBhdm9pZCBpbnRlcmZlcmVuY2Ugd2l0aCBEU0kgKi8KKwl0ZWdyYTIwX21pcGlfd3JpdGUoY3Np LCBURUdSQV9DU0lfQ0lMQl9NSVBJX0NBTF9DT05GSUcsCisJCQkgICBDU0lfQ0lMX01JUElfQ0FM X0hTUERPUygwKSB8CisJCQkgICBDU0lfQ0lMX01JUElfQ0FMX0hTUFVPUygwKSB8CisJCQkgICBD U0lfQ0lMX01JUElfQ0FMX1RFUk1PUyg0KSk7CisKKwl0ZWdyYTIwX21pcGlfd3JpdGUoY3NpLCBU RUdSQV9DU0lfQ0lMQV9NSVBJX0NBTF9DT05GSUcsCisJCQkgICBDU0lfQ0lMX01JUElfQ0FMX05P SVNFX0ZMVCgweGEpIHwKKwkJCSAgIENTSV9DSUxfTUlQSV9DQUxfUFJFU0NBTEUoMHgyKSB8CisJ CQkgICBDU0lfQ0lMX01JUElfQ0FMX0hTUERPUygwKSB8CisJCQkgICBDU0lfQ0lMX01JUElfQ0FM X0hTUFVPUygwKSB8CisJCQkgICBDU0lfQ0lMX01JUElfQ0FMX1RFUk1PUyg0KSk7CisKKwlwbV9y dW50aW1lX3B1dChjc2ktPmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IHRlZ3JhX21pcGlfb3BzIHRlZ3JhMjBfbWlwaV9vcHMgPSB7CisJLnN0YXJ0X2NhbGli cmF0aW9uID0gdGVncmEyMF9zdGFydF9wYWRfY2FsaWJyYXRpb24sCisJLmZpbmlzaF9jYWxpYnJh dGlvbiA9IHRlZ3JhMjBfZmluaXNoX3BhZF9jYWxpYnJhdGlvbiwKK307CisKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKiBDU0kKKyAqLworc3RhdGljIHZvaWQgdGVncmEyMF9jc2lfY2FwdHVyZV9j bGVhbihzdHJ1Y3QgdGVncmFfY3NpX2NoYW5uZWwgKmNzaV9jaGFuKQoreworCXRlZ3JhMjBfY3Np X3dyaXRlKGNzaV9jaGFuLCBURUdSQV9DU0lfVklfSU5QVVRfU1RSRUFNX0NPTlRST0wsIDApOwor CXRlZ3JhMjBfY3NpX3dyaXRlKGNzaV9jaGFuLCBURUdSQV9DU0lfSE9TVF9JTlBVVF9TVFJFQU1f Q09OVFJPTCwgMCk7CisKKwl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hhbiwgVEVHUkFfQ1NJX0NT SV9QSVhFTF9QQVJTRVJfU1RBVFVTLCAwKTsKKwl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hhbiwg VEVHUkFfQ1NJX0NTSV9DSUxfU1RBVFVTLCAwKTsKKwl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hh biwgVEVHUkFfQ1NJX0NTSV9QSVhFTF9QQVJTRVJfSU5URVJSVVBUX01BU0ssIDApOworCXRlZ3Jh MjBfY3NpX3dyaXRlKGNzaV9jaGFuLCBURUdSQV9DU0lfQ1NJX0NJTF9JTlRFUlJVUFRfTUFTSywg MCk7CisJdGVncmEyMF9jc2lfd3JpdGUoY3NpX2NoYW4sIFRFR1JBX0NTSV9DU0lfUkVBRE9OTFlf U1RBVFVTLCAwKTsKKwl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hhbiwgVEVHUkFfQ1NJX0VTQ0FQ RV9NT0RFX0NPTU1BTkQsIDApOworCXRlZ3JhMjBfY3NpX3dyaXRlKGNzaV9jaGFuLCBURUdSQV9D U0lfRVNDQVBFX01PREVfREFUQSwgMCk7CisKKwl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hhbiwg VEVHUkFfQ1NJX0NJTF9QQURfQ09ORklHLCAwKTsKKwl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hh biwgVEVHUkFfQ1NJX0NJTF9NSVBJX0NBTF9TVEFUVVMsIDApOworCXRlZ3JhMjBfY3NpX3dyaXRl KGNzaV9jaGFuLCBURUdSQV9DU0lfQ0xLRU5fT1ZFUlJJREUsIDApOworCisJdGVncmEyMF9jc2lf d3JpdGUoY3NpX2NoYW4sIFRFR1JBX0NTSV9ERUJVR19DT05UUk9MLAorCQkJICBDU0lfREVCVUdf Q09OVFJPTF9DTFJfREJHX0NOVF8wIHwKKwkJCSAgQ1NJX0RFQlVHX0NPTlRST0xfQ0xSX0RCR19D TlRfMSB8CisJCQkgIENTSV9ERUJVR19DT05UUk9MX0NMUl9EQkdfQ05UXzIpOworfQorCitzdGF0 aWMgaW50IHRlZ3JhMjBfY3NpX3BvcnRfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB0ZWdyYV9jc2lf Y2hhbm5lbCAqY3NpX2NoYW4sCisJCQkJCSAgICB1OCBwb3J0bm8pCit7CisJc3RydWN0IHRlZ3Jh X3ZpX2NoYW5uZWwgKnZpX2NoYW4gPSB2NGwyX2dldF9zdWJkZXZfaG9zdGRhdGEoJmNzaV9jaGFu LT5zdWJkZXYpOworCWludCB3aWR0aCAgPSB2aV9jaGFuLT5mb3JtYXQud2lkdGg7CisJaW50IGhl aWdodCA9IHZpX2NoYW4tPmZvcm1hdC5oZWlnaHQ7CisJdTMyIGRhdGFfdHlwZSA9IHZpX2NoYW4t PmZtdGluZm8tPmltZ19kdDsKKwl1MzIgd29yZF9jb3VudCA9ICh3aWR0aCAqIHZpX2NoYW4tPmZt dGluZm8tPmJpdF93aWR0aCkgLyA4OworCWVudW0gdGVncmFfdmlfb3V0IG91dHB1dF9jaGFubmVs ID0gVEVHUkFfVklfT1VUXzE7CisKKwl1bnNpZ25lZCBpbnQgbWFpbl9vdXRwdXRfZm9ybWF0LCB5 dXZfb3V0cHV0X2Zvcm1hdDsKKwl1bnNpZ25lZCBpbnQgcG9ydCA9IHBvcnRubyAmIDE7CisJdTMy IHZhbHVlOworCisJdGVncmEyMF92aV9nZXRfb3V0cHV0X2Zvcm1hdHModmlfY2hhbiwgJm1haW5f b3V0cHV0X2Zvcm1hdCwgJnl1dl9vdXRwdXRfZm9ybWF0KTsKKworCXN3aXRjaCAoZGF0YV90eXBl KSB7CisJY2FzZSBURUdSQV9JTUFHRV9EVF9SQVc4OgorCWNhc2UgVEVHUkFfSU1BR0VfRFRfUkFX MTA6CisJCW91dHB1dF9jaGFubmVsID0gVEVHUkFfVklfT1VUXzI7CisJCWlmIChwb3J0ID09IFBP UlRfQSkKKwkJCW1haW5fb3V0cHV0X2Zvcm1hdCA9IFZJX09VVFBVVF9PVVRQVVRfRk9STUFUX0NT SV9QUEFfQkFZRVI7CisJCWVsc2UKKwkJCW1haW5fb3V0cHV0X2Zvcm1hdCA9IFZJX09VVFBVVF9P VVRQVVRfRk9STUFUX0NTSV9QUEJfQkFZRVI7CisJCWJyZWFrOworCX0KKworCXRlZ3JhMjBfY3Np X2NhcHR1cmVfY2xlYW4oY3NpX2NoYW4pOworCisJLyogQ1NJIHBvcnQgY2xlYW51cCAqLworCXRl Z3JhMjBfY3NpX3dyaXRlKGNzaV9jaGFuLCBURUdSQV9DU0lfSU5QVVRfU1RSRUFNX0NPTlRST0wo cG9ydCksIDApOworCXRlZ3JhMjBfY3NpX3dyaXRlKGNzaV9jaGFuLCBURUdSQV9DU0lfUElYRUxf U1RSRUFNX0NPTlRST0wwKHBvcnQpLCAwKTsKKwl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hhbiwg VEVHUkFfQ1NJX1BJWEVMX1NUUkVBTV9DT05UUk9MMShwb3J0KSwgMCk7CisJdGVncmEyMF9jc2lf d3JpdGUoY3NpX2NoYW4sIFRFR1JBX0NTSV9QSVhFTF9TVFJFQU1fV09SRF9DT1VOVChwb3J0KSwg MCk7CisJdGVncmEyMF9jc2lfd3JpdGUoY3NpX2NoYW4sIFRFR1JBX0NTSV9QSVhFTF9TVFJFQU1f R0FQKHBvcnQpLCAwKTsKKwl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hhbiwgVEVHUkFfQ1NJX1BJ WEVMX1NUUkVBTV9QUF9DT01NQU5EKHBvcnQpLCAwKTsKKwl0ZWdyYTIwX2NzaV93cml0ZShjc2lf Y2hhbiwgVEVHUkFfQ1NJX1BJWEVMX1NUUkVBTV9FWFBFQ1RFRF9GUkFNRShwb3J0KSwgMCk7CisJ dGVncmEyMF9jc2lfd3JpdGUoY3NpX2NoYW4sIFRFR1JBX0NTSV9QSFlfQ0lMX0NPTlRST0wwKHBv cnQpLCAwKTsKKwl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hhbiwgVEVHUkFfQ1NJX0NJTF9QQURf Q09ORklHMChwb3J0KSwgMCk7CisJdGVncmEyMF9jc2lfd3JpdGUoY3NpX2NoYW4sIFRFR1JBX0NT SV9DSUxfUEFEX0NPTkZJRzEocG9ydCksIDApOworCisJdGVncmEyMF92aV93cml0ZSh2aV9jaGFu LCBURUdSQV9WSV9WSV9DT1JFX0NPTlRST0wsIEJJVCgyNSArIHBvcnQpKTsgLyogQ1NJX1BQX1lV VjQyMiAqLworCisJdGVncmEyMF92aV93cml0ZSh2aV9jaGFuLCBURUdSQV9WSV9IX0RPV05TQ0FM RV9DT05UUk9MLCBCSVQoMiArIHBvcnQpKTsgLyogQ1NJX1BQICovCisJdGVncmEyMF92aV93cml0 ZSh2aV9jaGFuLCBURUdSQV9WSV9WX0RPV05TQ0FMRV9DT05UUk9MLCBCSVQoMiArIHBvcnQpKTsg LyogQ1NJX1BQICovCisKKwl0ZWdyYTIwX3ZpX3dyaXRlKHZpX2NoYW4sIFRFR1JBX1ZJX0NTSV9Q UF9IX0FDVElWRShwb3J0KSwgd2lkdGggPDwgMTYpOworCXRlZ3JhMjBfdmlfd3JpdGUodmlfY2hh biwgVEVHUkFfVklfQ1NJX1BQX1ZfQUNUSVZFKHBvcnQpLCBoZWlnaHQgPDwgMTYpOworCisJdGVn cmEyMF9jc2lfd3JpdGUoY3NpX2NoYW4sIFRFR1JBX0NTSV9QSVhFTF9TVFJFQU1fQ09OVFJPTDEo cG9ydCksIDB4MSk7CisKKwl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hhbiwgVEVHUkFfQ1NJX1BJ WEVMX1NUUkVBTV9XT1JEX0NPVU5UKHBvcnQpLCB3b3JkX2NvdW50KTsKKwl0ZWdyYTIwX2NzaV93 cml0ZShjc2lfY2hhbiwgVEVHUkFfQ1NJX1BJWEVMX1NUUkVBTV9HQVAocG9ydCksCisJCQkgIENT SV9QUF9GUkFNRV9NSU5fR0FQKDB4MTQpKTsgLyogMTQgdmkgY2xrcyBiZXR3ZWVuIGZyYW1lcyAq LworCisJdGVncmEyMF9jc2lfd3JpdGUoY3NpX2NoYW4sIFRFR1JBX0NTSV9QSVhFTF9TVFJFQU1f RVhQRUNURURfRlJBTUUocG9ydCksCisJCQkgIENTSV9QUF9FWFBfRlJBTUVfSEVJR0hUKGhlaWdo dCkgfAorCQkJICBDU0lfUFBfTUFYX0NMT0NLUygweDMwMCkgfCAvKiB3YWl0IDB4MzAwIHZpIGNs a3MgZm9yIHRpbWVvdXQgKi8KKwkJCSAgQ1NJX1BQX0xJTkVfVElNRU9VVF9FTkFCTEUpOworCisJ dGVncmEyMF9jc2lfd3JpdGUoY3NpX2NoYW4sIFRFR1JBX0NTSV9QSVhFTF9TVFJFQU1fQ09OVFJP TDAocG9ydCksCisJCQkgIENTSV9QUF9PVVRQVVRfRk9STUFUX1BJWEVMIHwKKwkJCSAgQ1NJX1BQ X0RBVEFfVFlQRShkYXRhX3R5cGUpIHwKKwkJCSAgQ1NJX1BQX0NSQ19DSEVDS19FTkFCTEUgfAor CQkJICBDU0lfUFBfV09SRF9DT1VOVF9IRUFERVIgfAorCQkJICBDU0lfUFBfREFUQV9JREVOVElG SUVSX0VOQUJMRSB8CisJCQkgIENTSV9QUF9QQUNLRVRfSEVBREVSX1NFTlQgfAorCQkJICBwb3J0 KTsKKworCXRlZ3JhMjBfY3NpX3dyaXRlKGNzaV9jaGFuLCBURUdSQV9DU0lfSU5QVVRfU1RSRUFN X0NPTlRST0wocG9ydCksCisJCQkgIENTSV9TS0lQX1BBQ0tFVF9USFJFU0hPTEQoMHgzZikgfAor CQkJICAoY3NpX2NoYW4tPm51bWxhbmVzIC0gMSkpOworCisJdGVncmEyMF9jc2lfd3JpdGUoY3Np X2NoYW4sIFRFR1JBX0NTSV9QSFlfQ0lMX0NPTlRST0wwKHBvcnQpLAorCQkJICBDU0lfQ09OVElO VU9VU19DTE9DS19NT0RFX0VOQUJMRSB8CisJCQkgIDB4NSk7IC8qIENsb2NrIHNldHRsZSB0aW1l ICovCisKKwl0ZWdyYTIwX3ZpX3dyaXRlKHZpX2NoYW4sIFRFR1JBX1ZJX0NPTlRfU1lOQ1BUX0NT SV9QUF9GUkFNRV9TVEFSVChwb3J0KSwKKwkJCSBWSV9DT05UX1NZTkNQVF9PVVRfQ09OVElOVU9V U19TWU5DUFQgfAorCQkJIGhvc3QxeF9zeW5jcHRfaWQodmlfY2hhbi0+ZnJhbWVfc3RhcnRfc3Bb MF0pCisJCQkgPDwgVklfQ09OVF9TWU5DUFRfT1VUX1NZTkNQVF9JRFhfU0ZUKTsKKworCXRlZ3Jh MjBfdmlfd3JpdGUodmlfY2hhbiwgVEVHUkFfVklfQ09OVF9TWU5DUFRfT1VUKG91dHB1dF9jaGFu bmVsKSwKKwkJCSBWSV9DT05UX1NZTkNQVF9PVVRfQ09OVElOVU9VU19TWU5DUFQgfAorCQkJIGhv c3QxeF9zeW5jcHRfaWQodmlfY2hhbi0+bXdfYWNrX3NwWzBdKQorCQkJIDw8IFZJX0NPTlRfU1lO Q1BUX09VVF9TWU5DUFRfSURYX1NGVCk7CisKKwl2YWx1ZSA9IChwb3J0ID09IFBPUlRfQSkgPyBD U0lfQV9QSFlfQ0lMX0VOQUJMRSB8IENTSV9CX1BIWV9DSUxfRElTQUJMRSA6CisJCUNTSV9CX1BI WV9DSUxfRU5BQkxFIHwgQ1NJX0FfUEhZX0NJTF9ESVNBQkxFOworCXRlZ3JhMjBfY3NpX3dyaXRl KGNzaV9jaGFuLCBURUdSQV9DU0lfUEhZX0NJTF9DT01NQU5ELCB2YWx1ZSk7CisKKwl0ZWdyYTIw X2NzaV93cml0ZShjc2lfY2hhbiwgVEVHUkFfQ1NJX1BJWEVMX1NUUkVBTV9QUF9DT01NQU5EKHBv cnQpLAorCQkJICBDU0lfUFBfU1RBUlRfTUFSS0VSX0ZSQU1FX01BWCgweGYpIHwKKwkJCSAgQ1NJ X1BQX0RJU0FCTEUpOworCisJdGVncmEyMF92aV93cml0ZSh2aV9jaGFuLCBURUdSQV9WSV9WSV9P VVRQVVRfQ09OVFJPTChvdXRwdXRfY2hhbm5lbCksCisJCQkgKHZpX2NoYW4tPnZmbGlwID8gVklf T1VUUFVUX1ZfRElSRUNUSU9OIDogMCkgfAorCQkJICh2aV9jaGFuLT5oZmxpcCA/IFZJX09VVFBV VF9IX0RJUkVDVElPTiA6IDApIHwKKwkJCSB5dXZfb3V0cHV0X2Zvcm1hdCB8IG1haW5fb3V0cHV0 X2Zvcm1hdCk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyB2b2lkIHRlZ3JhMjBfY3NpX3Bv cnRfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHRlZ3JhX2NzaV9jaGFubmVsICpjc2lfY2hhbiwgdTgg cG9ydG5vKQoreworCXN0cnVjdCB0ZWdyYV9jc2kgKmNzaSA9IGNzaV9jaGFuLT5jc2k7CisJdW5z aWduZWQgaW50IHBvcnQgPSBwb3J0bm8gJiAxOworCXUzMiB2YWx1ZTsKKworCXZhbHVlID0gdGVn cmEyMF9jc2lfcmVhZChjc2lfY2hhbiwgVEVHUkFfQ1NJX0NTSV9QSVhFTF9QQVJTRVJfU1RBVFVT KTsKKwlkZXZfZGJnKGNzaS0+ZGV2LCAiVEVHUkFfQ1NJX0NTSV9QSVhFTF9QQVJTRVJfU1RBVFVT IDB4JTA4eFxuIiwgdmFsdWUpOworCXRlZ3JhMjBfY3NpX3dyaXRlKGNzaV9jaGFuLCBURUdSQV9D U0lfQ1NJX1BJWEVMX1BBUlNFUl9TVEFUVVMsIHZhbHVlKTsKKworCXZhbHVlID0gdGVncmEyMF9j c2lfcmVhZChjc2lfY2hhbiwgVEVHUkFfQ1NJX0NTSV9DSUxfU1RBVFVTKTsKKwlkZXZfZGJnKGNz aS0+ZGV2LCAiVEVHUkFfQ1NJX0NTSV9DSUxfU1RBVFVTIDB4JTA4eFxuIiwgdmFsdWUpOworCXRl Z3JhMjBfY3NpX3dyaXRlKGNzaV9jaGFuLCBURUdSQV9DU0lfQ1NJX0NJTF9TVEFUVVMsIHZhbHVl KTsKKworCXRlZ3JhMjBfY3NpX3dyaXRlKGNzaV9jaGFuLCBURUdSQV9DU0lfUElYRUxfU1RSRUFN X1BQX0NPTU1BTkQocG9ydCksCisJCQkgIENTSV9QUF9TVEFSVF9NQVJLRVJfRlJBTUVfTUFYKDB4 ZikgfAorCQkJICBDU0lfUFBfRElTQUJMRSk7CisKKwlpZiAoY3NpX2NoYW4tPm51bWxhbmVzID09 IDQpIHsKKwkJdGVncmEyMF9jc2lfd3JpdGUoY3NpX2NoYW4sIFRFR1JBX0NTSV9QSFlfQ0lMX0NP TU1BTkQsCisJCQkJICBDU0lfQV9QSFlfQ0lMX0RJU0FCTEUgfCBDU0lfQl9QSFlfQ0lMX0RJU0FC TEUpOworCX0gZWxzZSB7CisJCXZhbHVlID0gKHBvcnQgPT0gUE9SVF9BKSA/IENTSV9BX1BIWV9D SUxfRElTQUJMRSB8IENTSV9CX1BIWV9DSUxfTk9QIDoKKwkJCUNTSV9CX1BIWV9DSUxfRElTQUJM RSB8IENTSV9BX1BIWV9DSUxfTk9QOworCQl0ZWdyYTIwX2NzaV93cml0ZShjc2lfY2hhbiwgVEVH UkFfQ1NJX1BIWV9DSUxfQ09NTUFORCwgdmFsdWUpOworCX0KK30KKworc3RhdGljIGludCB0ZWdy YTIwX2NzaV9zdGFydF9zdHJlYW1pbmcoc3RydWN0IHRlZ3JhX2NzaV9jaGFubmVsICpjc2lfY2hh bikKK3sKKwl1OCAqcG9ydG5vcyA9IGNzaV9jaGFuLT5jc2lfcG9ydF9udW1zOworCWludCByZXQs IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3NpX2NoYW4tPm51bWdhbmdwb3J0czsgaSsrKSB7CisJ CXJldCA9IHRlZ3JhMjBfY3NpX3BvcnRfc3RhcnRfc3RyZWFtaW5nKGNzaV9jaGFuLCBwb3J0bm9z W2ldKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gc3RyZWFtX3N0YXJ0X2ZhaWw7CisJfQorCisJcmV0 dXJuIDA7CisKK3N0cmVhbV9zdGFydF9mYWlsOgorCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGkt LSkKKwkJdGVncmEyMF9jc2lfcG9ydF9zdG9wX3N0cmVhbWluZyhjc2lfY2hhbiwgcG9ydG5vc1tp XSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0ZWdyYTIwX2NzaV9zdG9wX3N0 cmVhbWluZyhzdHJ1Y3QgdGVncmFfY3NpX2NoYW5uZWwgKmNzaV9jaGFuKQoreworCXU4ICpwb3J0 bm9zID0gY3NpX2NoYW4tPmNzaV9wb3J0X251bXM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgY3NpX2NoYW4tPm51bWdhbmdwb3J0czsgaSsrKQorCQl0ZWdyYTIwX2NzaV9wb3J0X3N0b3Bf c3RyZWFtaW5nKGNzaV9jaGFuLCBwb3J0bm9zW2ldKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCB0ZWdyYV9jc2lfb3BzIHRlZ3JhMjBfY3NpX29wcyA9IHsKKwkuY3NpX3N0YXJ0X3N0cmVhbWlu ZyA9IHRlZ3JhMjBfY3NpX3N0YXJ0X3N0cmVhbWluZywKKwkuY3NpX3N0b3Bfc3RyZWFtaW5nID0g dGVncmEyMF9jc2lfc3RvcF9zdHJlYW1pbmcsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNv bnN0IHRlZ3JhMjBfY3NpX2Nsa3NbXSA9IHsKKwlOVUxMLAorfTsKKworY29uc3Qgc3RydWN0IHRl Z3JhX2NzaV9zb2MgdGVncmEyMF9jc2lfc29jID0geworCS5vcHMgPSAmdGVncmEyMF9jc2lfb3Bz LAorCS5taXBpX29wcyA9ICZ0ZWdyYTIwX21pcGlfb3BzLAorCS5jc2lfbWF4X2NoYW5uZWxzID0g MiwgLyogQ1NJLUEgYW5kIENTSS1CICovCisJLmNsa19uYW1lcyA9IHRlZ3JhMjBfY3NpX2Nsa3Ms CisJLm51bV9jbGtzID0gQVJSQVlfU0laRSh0ZWdyYTIwX2NzaV9jbGtzKSwKK307CisKK3N0YXRp YyBjb25zdCBjaGFyICogY29uc3QgdGVncmEzMF9jc2lfY2xrc1tdID0geworCSJjc2kiLAorCSJj c2lhLXBhZCIsCisJImNzaWItcGFkIiwKK307CisKK2NvbnN0IHN0cnVjdCB0ZWdyYV9jc2lfc29j IHRlZ3JhMzBfY3NpX3NvYyA9IHsKKwkub3BzID0gJnRlZ3JhMjBfY3NpX29wcywKKwkubWlwaV9v cHMgPSAmdGVncmEyMF9taXBpX29wcywKKwkuY3NpX21heF9jaGFubmVscyA9IDIsIC8qIENTSS1B IGFuZCBDU0ktQiAqLworCS5jbGtfbmFtZXMgPSB0ZWdyYTMwX2NzaV9jbGtzLAorCS5udW1fY2xr cyA9IEFSUkFZX1NJWkUodGVncmEzMF9jc2lfY2xrcyksCit9OworCiAvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICogVklQCiAgKi8KQEAgLTY4NywxMCArMTIxMSwxMSBAQCBzdGF0aWMgaW50IHRlZ3Jh MjBfdmlwX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdGVncmFfdmlwX2NoYW5uZWwgKnZpcF9jaGFu KQogCWVudW0gdGVncmFfdmlfb3V0IG91dHB1dF9jaGFubmVsID0gKGRhdGFfdHlwZSA9PSBURUdS QV9JTUFHRV9EVF9SQVc4IHx8CiAJCQkJCSAgICBkYXRhX3R5cGUgPT0gVEVHUkFfSU1BR0VfRFRf UkFXMTApID8KIAkJCQkJICAgIFRFR1JBX1ZJX09VVF8yIDogVEVHUkFfVklfT1VUXzE7Ci0JdW5z aWduZWQgaW50IG1haW5faW5wdXRfZm9ybWF0OwotCXVuc2lnbmVkIGludCB5dXZfaW5wdXRfZm9y bWF0OworCXVuc2lnbmVkIGludCBtYWluX2lucHV0X2Zvcm1hdCwgeXV2X2lucHV0X2Zvcm1hdDsK Kwl1bnNpZ25lZCBpbnQgbWFpbl9vdXRwdXRfZm9ybWF0LCB5dXZfb3V0cHV0X2Zvcm1hdDsKIAog CXRlZ3JhMjBfdmlfZ2V0X2lucHV0X2Zvcm1hdHModmlfY2hhbiwgJm1haW5faW5wdXRfZm9ybWF0 LCAmeXV2X2lucHV0X2Zvcm1hdCk7CisJdGVncmEyMF92aV9nZXRfb3V0cHV0X2Zvcm1hdHModmlf Y2hhbiwgJm1haW5fb3V0cHV0X2Zvcm1hdCwgJnl1dl9vdXRwdXRfZm9ybWF0KTsKIAogCXRlZ3Jh MjBfdmlfd3JpdGUodmlfY2hhbiwgVEVHUkFfVklfVklfQ09SRV9DT05UUk9MLCAwKTsKIApAQCAt NzIzLDYgKzEyNDgsMTEgQEAgc3RhdGljIGludCB0ZWdyYTIwX3ZpcF9zdGFydF9zdHJlYW1pbmco c3RydWN0IHRlZ3JhX3ZpcF9jaGFubmVsICp2aXBfY2hhbikKIAogCXRlZ3JhMjBfdmlfd3JpdGUo dmlfY2hhbiwgVEVHUkFfVklfQ0FNRVJBX0NPTlRST0wsIFZJX0NBTUVSQV9DT05UUk9MX1NUT1Bf Q0FQVFVSRSk7CiAKKwl0ZWdyYTIwX3ZpX3dyaXRlKHZpX2NoYW4sIFRFR1JBX1ZJX1ZJX09VVFBV VF9DT05UUk9MKG91dHB1dF9jaGFubmVsKSwKKwkJCSAodmlfY2hhbi0+dmZsaXAgPyBWSV9PVVRQ VVRfVl9ESVJFQ1RJT04gOiAwKSB8CisJCQkgKHZpX2NoYW4tPmhmbGlwID8gVklfT1VUUFVUX0hf RElSRUNUSU9OIDogMCkgfAorCQkJICB5dXZfb3V0cHV0X2Zvcm1hdCB8IG1haW5fb3V0cHV0X2Zv cm1hdCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21l ZGlhL3RlZ3JhLXZpZGVvL3ZpLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEtdmlkZW8v dmkuaAppbmRleCBiZmFkZGU4ODU4ZDQuLjQ2MzI4ZTQ4OGFhMyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9zdGFnaW5nL21lZGlhL3RlZ3JhLXZpZGVvL3ZpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL21l ZGlhL3RlZ3JhLXZpZGVvL3ZpLmgKQEAgLTEyNSw3ICsxMjUsNiBAQCBzdHJ1Y3QgdGVncmFfdmkg ewogICoJCWZyYW1lIHRocm91Z2ggaG9zdDF4IHN5bmNwb2ludCBjb3VudGVycyAoT24gVGVncmEy MCB1c2VkIGZvciB0aGUKICAqICAgICAgICAgICAgICBPVVRfMSBzeW5jcHQpCiAgKiBAc3BfaW5j cl9sb2NrOiBwcm90ZWN0cyBjcHUgc3luY3BvaW50IGluY3JlbWVudC4KLSAqIEBuZXh0X291dF9z cF9pZHg6IG5leHQgZXhwZWN0ZWQgdmFsdWUgZm9yIG13X2Fja19zcFswXSwgaS5lLiBPVVRfMSAo VGVncmEyMCkKICAqCiAgKiBAa3RocmVhZF9zdGFydF9jYXB0dXJlOiBrdGhyZWFkIHRvIHN0YXJ0 IGNhcHR1cmUgb2Ygc2luZ2xlIGZyYW1lIHdoZW4KICAqCQl2YiBidWZmZXIgaXMgYXZhaWxhYmxl LiBUaGlzIHRocmVhZCBwcm9ncmFtcyBWSSBDU0kgaGFyZHdhcmUKQEAgLTE4OCw3ICsxODcsNiBA QCBzdHJ1Y3QgdGVncmFfdmlfY2hhbm5lbCB7CiAJc3RydWN0IGhvc3QxeF9zeW5jcHQgKm13X2Fj a19zcFtHQU5HX1BPUlRTX01BWF07CiAJLyogcHJvdGVjdHMgdGhlIGNwdSBzeW5jcG9pbnQgaW5j cmVtZW50ICovCiAJc3BpbmxvY2tfdCBzcF9pbmNyX2xvY2tbR0FOR19QT1JUU19NQVhdOwotCXUz MiBuZXh0X291dF9zcF9pZHg7CiAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmt0aHJlYWRfc3RhcnRf Y2FwdHVyZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBzdGFydF93YWl0OwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhLXZpZGVvL3ZpZGVvLmMgYi9kcml2ZXJzL3N0YWdpbmcv bWVkaWEvdGVncmEtdmlkZW8vdmlkZW8uYwppbmRleCBiMDA5Y2VlZmRhMTQuLjJlODQzODU3MDhi YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhLXZpZGVvL3ZpZGVvLmMK KysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhLXZpZGVvL3ZpZGVvLmMKQEAgLTEyNSw2 ICsxMjUsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaG9zdDF4X3ZpZGVv X3N1YmRldnNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTIwLXZpcCIsIH0s CiAJeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEyMC12aSIsIH0sCiAjZW5kaWYKKyNpZiBk ZWZpbmVkKENPTkZJR19BUkNIX1RFR1JBXzJ4X1NPQykKKwl7IC5jb21wYXRpYmxlID0gIm52aWRp YSx0ZWdyYTIwLWNzaSIsIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX1RFR1JB XzN4X1NPQykKKwl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTMwLWNzaSIsIH0sCisjZW5k aWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX1RFR1JBXzIxMF9TT0MpCiAJeyAuY29tcGF0aWJs ZSA9ICJudmlkaWEsdGVncmEyMTAtY3NpIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0 ZWdyYTIxMC12aSIsIH0sCi0tIAoyLjUxLjAKCg==