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 lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 DEB65C87FCB for ; Wed, 30 Jul 2025 05:36:02 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ugzTk-0002js-TS; Wed, 30 Jul 2025 01:35:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ugzTY-0002RH-Ru for grub-devel@gnu.org; Wed, 30 Jul 2025 01:35:40 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ugzTU-00030P-Px for grub-devel@gnu.org; Wed, 30 Jul 2025 01:35:39 -0400 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56U01tEM011637; Wed, 30 Jul 2025 05:35:35 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=IjyEeyQUoIEoFmzwX gXQvyk1+H7L4uOrwvxBQX7xaCQ=; b=YuswxksTFrKr0/DZcUY/DtibZRCMic1qB SBTR/mrKkJ3BdKJijKVdjNdNw4tITA/EIZhklHnBxTxOcXaW5HHhwzbTRlU4tC3/ Eb6hT0wFnqwjgDTrDsHlI+cRqxAOBDYbIutnuw1kMXk6NyfLFkSTCg8CC+OtSuPb Th+h1Wde/ESKHuCCLfVhCMb8ffVwNwltNJ4QdNfcBR3z2CXTB5KXvmwBI5Vds+jP SXVO++0g2NfQvvI7V1hruiKH8hADg7Of8DjC+sATO6HSRiFj1GRQlE92rGFPlFJn z9ChMztt2DwZqiPxRbVtipUBidaSq1f+zq5GcZo+E/Fg0UNJk/VDw== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 484qcg2vy5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 30 Jul 2025 05:35:34 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 56U1RCjp018354; Wed, 30 Jul 2025 05:35:34 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 485abp60h9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 30 Jul 2025 05:35:34 +0000 Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 56U5ZMj353739966 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 30 Jul 2025 05:35:22 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CAE6B2004D; Wed, 30 Jul 2025 05:35:22 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 43B7420043; Wed, 30 Jul 2025 05:35:21 +0000 (GMT) Received: from localhost.localdomain (unknown [9.109.249.65]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 30 Jul 2025 05:35:21 +0000 (GMT) From: Avnish Chouhan To: grub-devel@gnu.org Cc: daniel.kiper@oracle.com, brking@linux.ibm.com, meghanaprakash@in.ibm.com, mchang@suse.com, Avnish Chouhan , Diego Domingos Subject: [PATCH v6 4/6] ieee1275: add support for NVMeoFC Date: Wed, 30 Jul 2025 11:04:03 +0530 Message-ID: <20250730053405.41417-5-avnish@linux.ibm.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20250730053405.41417-1-avnish@linux.ibm.com> References: <20250730053405.41417-1-avnish@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzMwMDAzNSBTYWx0ZWRfX/LuUrcG54WsX 5rC9zr+alIbiA0D0DWkb6lFinPRhvDhftX0SmQOtX/cUjXTTusG2sTj9OLednWnoThXdHCLCruz s1lvhakWWxS+Pah0L+E8erAEVJuRWiuqXZtYG7lCwsQKTm1vJvDe/S9ZFZVCzgF5Vrx1i6CFNo9 bo5Xt4GUGsfWZcSeMKsG4njQJ85UXA6wGwhnot2G8hA4xoUpZPRTre80n5bPu4dquHbgRzlrdZP l8N2JsJwyJbUiLQ9tQBESt5LAXT354AQEc84oAG14Zz0TlcyFUZ5HJtRE/xfY7C54BZTFZ9I1EN 9QLQAyMhqP62XyMYH+ePh60t74NJlHV8gkFu/1/I/wdYxlml2ad2Rgg69F+u5UP49+Y9lDwSlDB XYVBC3LWHOGPZg4ckHMp0U8MtdD8+uUDF6JrHsC9XoOBYPbHAz9i7o0cpaP/YTlkLDHiTjuI X-Proofpoint-ORIG-GUID: tnFfRxaydUJ6rWgXbTHkSwHKOfnrfO5F X-Authority-Analysis: v=2.4 cv=Lp2Symdc c=1 sm=1 tr=0 ts=6889af27 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Wb1JkmetP80A:10 a=VnNF1IyMAAAA:8 a=qHowBz1KRnLDitKh7jUA:9 X-Proofpoint-GUID: tnFfRxaydUJ6rWgXbTHkSwHKOfnrfO5F X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-30_02,2025-07-28_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 impostorscore=0 mlxscore=0 priorityscore=1501 adultscore=0 clxscore=1011 lowpriorityscore=0 malwarescore=0 suspectscore=0 mlxlogscore=999 spamscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507300035 Received-SPF: pass client-ip=148.163.158.5; envelope-from=avnish@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgdG8gc2NhbiBhbmQgZGlzY292ZXJ5 IG9mIE5WTWVvRkMuCgpTaWduZWQtb2ZmLWJ5OiBEaWVnbyBEb21pbmdvcyA8ZGllZ29kb0Bici5p Ym0uY29tPgpTaWduZWQtb2ZmLWJ5OiBBdm5pc2ggQ2hvdWhhbiA8YXZuaXNoQGxpbnV4LmlibS5j b20+Ci0tLQogZ3J1Yi1jb3JlL2Rpc2svaWVlZTEyNzUvb2ZkaXNrLmMgfCAzOTcgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDI5OCBpbnNlcnRpb25zKCspLCA5OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9n cnViLWNvcmUvZGlzay9pZWVlMTI3NS9vZmRpc2suYyBiL2dydWItY29yZS9kaXNrL2llZWUxMjc1 L29mZGlzay5jCmluZGV4IDViZTIzZWMuLjFmYjk2MTEgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9k aXNrL2llZWUxMjc1L29mZGlzay5jCisrKyBiL2dydWItY29yZS9kaXNrL2llZWUxMjc1L29mZGlz ay5jCkBAIC0yMjAsMTE4ICsyMjAsMzE3IEBAIGRldl9pdGVyYXRlX3JlYWwgKGNvbnN0IGNoYXIg Km5hbWUsIGNvbnN0IGNoYXIgKnBhdGgpCiAgIHJldHVybjsKIH0KIAotc3RhdGljIHZvaWQKLWRl dl9pdGVyYXRlIChjb25zdCBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9kZXZhbGlhcyAqYWxpYXMpCi17 Ci0gIGlmIChncnViX3N0cmNtcCAoYWxpYXMtPnR5cGUsICJmY3AiKSA9PSAwKQotICAgIHsKLSAg ICAgIC8qCi0gICAgICAgKiBJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGZjcCBkZXZpY2VzLCB3ZSBu ZWVkCi0gICAgICAgKiB0byBmaW5kIHRoZSBXV1BOcyBhbmQgTFVOcyB0byBpdGVyYXRlIHRoZW0K LSAgICAgICAqLwotICAgICAgZ3J1Yl9pZWVlMTI3NV9paGFuZGxlX3QgaWhhbmRsZTsKLSAgICAg IGdydWJfdWludDY0X3QgKnB0cl90YXJnZXRzLCAqcHRyX2x1bnMsIGssIGw7Ci0gICAgICB1bnNp Z25lZCBpbnQgaSwgaiwgcG9zOwotICAgICAgY2hhciAqYnVmLCAqYnVmcHRyOwotICAgICAgc3Ry dWN0IHNldF9mY3BfdGFyZ2V0c19hcmdzCi0gICAgICB7Ci0gICAgICAgIHN0cnVjdCBncnViX2ll ZWUxMjc1X2NvbW1vbl9oZHIgY29tbW9uOwotICAgICAgICBncnViX2llZWUxMjc1X2NlbGxfdCBt ZXRob2Q7Ci0gICAgICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGloYW5kbGU7Ci0gICAgICAgIGdy dWJfaWVlZTEyNzVfY2VsbF90IGNhdGNoX3Jlc3VsdDsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9j ZWxsX3QgbmVudHJpZXM7Ci0gICAgICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOwotICAg ICAgfSBhcmdzX3RhcmdldHM7Ci0KLSAgICAgIHN0cnVjdCBzZXRfZmNwX2x1bnNfYXJncwotICAg ICAgewotICAgICAgICBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9jb21tb25faGRyIGNvbW1vbjsKLSAg ICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbWV0aG9kOwotICAgICAgICBncnViX2llZWUxMjc1 X2NlbGxfdCBpaGFuZGxlOwotICAgICAgICBncnViX2llZWUxMjc1X2NlbGxfdCB3d3BuX2g7Ci0g ICAgICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHd3cG5fbDsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3 NV9jZWxsX3QgY2F0Y2hfcmVzdWx0OwotICAgICAgICBncnViX2llZWUxMjc1X2NlbGxfdCBuZW50 cmllczsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgdGFibGU7Ci0gICAgICB9IGFyZ3Nf bHVuczsKLQotICAgICAgc3RydWN0IGFyZ3NfcmV0Ci0gICAgICB7Ci0gICAgICAgIGdydWJfdWlu dDY0X3QgYWRkcjsKLSAgICAgICAgZ3J1Yl91aW50NjRfdCBsZW47Ci0gICAgICB9OworZGV2X2l0 ZXJhdGVfZmNwX2Rpc2tzIChjb25zdCBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9kZXZhbGlhcyAqYWxp YXMpCisgeworICAvKgorICAgKiBJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGZjcCBkZXZpY2VzLCB3 ZSBuZWVkCisgICAqIHRvIGZpbmQgdGhlIFdXUE5zIGFuZCBMVU5zIHRvIGl0ZXJhdGUgdGhlbQor ICAgKi8KKyAgZ3J1Yl9pZWVlMTI3NV9paGFuZGxlX3QgaWhhbmRsZTsKKyAgZ3J1Yl91aW50NjRf dCAqcHRyX3RhcmdldHMsICpwdHJfbHVucywgaywgbDsKKyAgdW5zaWduZWQgaW50IGksIGosIHBv czsKKyAgY2hhciAqYnVmLCAqYnVmcHRyOworICBzdHJ1Y3Qgc2V0X2ZjcF90YXJnZXRzX2FyZ3MK KyAgeworICAgIHN0cnVjdCBncnViX2llZWUxMjc1X2NvbW1vbl9oZHIgY29tbW9uOworICAgIGdy dWJfaWVlZTEyNzVfY2VsbF90IG1ldGhvZDsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBpaGFu ZGxlOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGNhdGNoX3Jlc3VsdDsKKyAgICBncnViX2ll ZWUxMjc1X2NlbGxfdCBuZW50cmllczsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCB0YWJsZTsK KyAgfSBhcmdzX3RhcmdldHM7CisKKyAgc3RydWN0IHNldF9mY3BfbHVuc19hcmdzCisgIHsKKyAg ICBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9jb21tb25faGRyIGNvbW1vbjsKKyAgICBncnViX2llZWUx Mjc1X2NlbGxfdCBtZXRob2Q7CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgaWhhbmRsZTsKKyAg ICBncnViX2llZWUxMjc1X2NlbGxfdCB3d3BuX2g7CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qg d3dwbl9sOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGNhdGNoX3Jlc3VsdDsKKyAgICBncnVi X2llZWUxMjc1X2NlbGxfdCBuZW50cmllczsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCB0YWJs ZTsKKyAgfSBhcmdzX2x1bnM7CisKKyAgc3RydWN0IGFyZ3NfcmV0CisgIHsKKyAgICBncnViX3Vp bnQ2NF90IGFkZHI7CisgICAgZ3J1Yl91aW50NjRfdCBsZW47CisgIH07CisgIHN0cnVjdCBhcmdz X3JldCAqdGFyZ2V0c190YWJsZTsKKyAgc3RydWN0IGFyZ3NfcmV0ICpsdW5zX3RhYmxlOwogCi0g ICAgICBpZiAoZ3J1Yl9pZWVlMTI3NV9vcGVuIChhbGlhcy0+cGF0aCwgJmloYW5kbGUpKQotICAg ICAgICB7Ci0gICAgICAgICAgZ3J1Yl9kcHJpbnRmICgiZGlzayIsICJmYWlsZWQgdG8gb3BlbiB0 aGUgZGlzayB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYWxpYXMtPnBhdGgp OwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICBpZiAoZ3J1Yl9pZWVlMTI3NV9vcGVu IChhbGlhcy0+cGF0aCwgJmloYW5kbGUpKQorICAgIHsKKyAgICAgIGdydWJfZHByaW50ZiAoImRp c2siLCAiZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sgd2hpbGUgaXRlcmF0aW5nIEZDUCBkaXNrIHBh dGg9JXNcbiIsIGFsaWFzLT5wYXRoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAgIC8q IFNldHVwIHRoZSBmY3AtdGFyZ2V0cyBtZXRob2QgdG8gY2FsbCB2aWEgcGZ3Ki8KLSAgICAgIElO SVRfSUVFRTEyNzVfQ09NTU9OICgmYXJnc190YXJnZXRzLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwg MiwgMyk7Ci0gICAgICBhcmdzX3RhcmdldHMubWV0aG9kID0gKGdydWJfaWVlZTEyNzVfY2VsbF90 KSAiZmNwLXRhcmdldHMiOwotICAgICAgYXJnc190YXJnZXRzLmloYW5kbGUgPSBpaGFuZGxlOwor ICAvKiBTZXR1cCB0aGUgZmNwLXRhcmdldHMgbWV0aG9kIHRvIGNhbGwgdmlhIHBmdyovCisgIElO SVRfSUVFRTEyNzVfQ09NTU9OICgmYXJnc190YXJnZXRzLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwg MiwgMyk7CisgIGFyZ3NfdGFyZ2V0cy5tZXRob2QgPSAoZ3J1Yl9pZWVlMTI3NV9jZWxsX3QpICJm Y3AtdGFyZ2V0cyI7CisgIGFyZ3NfdGFyZ2V0cy5paGFuZGxlID0gaWhhbmRsZTsKIAotICAgICAg LyogU2V0dXAgdGhlIGZjcC1sdW5zIG1ldGhvZCB0byBjYWxsIHZpYSBwZncgKi8KLSAgICAgIElO SVRfSUVFRTEyNzVfQ09NTU9OICgmYXJnc19sdW5zLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgNCwg Myk7Ci0gICAgICBhcmdzX2x1bnMubWV0aG9kID0gKGdydWJfaWVlZTEyNzVfY2VsbF90KSAiZmNw LWx1bnMiOwotICAgICAgYXJnc19sdW5zLmloYW5kbGUgPSBpaGFuZGxlOwotICAgICAgaWYgKElF RUUxMjc1X0NBTExfRU5UUllfRk4gKCZhcmdzX3RhcmdldHMpID09IC0xKQotICAgICAgICB7Ci0g ICAgICAgICAgZ3J1Yl9kcHJpbnRmICgiZGlzayIsICJmYWlsZWQgdG8gZ2V0IHRoZSB0YXJnZXRz IHdoaWxlIGl0ZXJhdGluZyBGQ1AgZGlzayBwYXRoPSVzXG4iLCBhbGlhcy0+cGF0aCk7Ci0gICAg ICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7Ci0gICAgICAgICAgcmV0dXJuOwot ICAgICAgICB9Ci0gICAgICBidWYgPSBncnViX21hbGxvYyAoZ3J1Yl9zdHJsZW4gKGFsaWFzLT5w YXRoKSArIDMyICsgMzIpOwotICAgICAgaWYgKCFidWYpCi0gICAgICAgIHsKLSAgICAgICAgICBn cnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAg IH0KLSAgICAgIGJ1ZnB0ciA9IGdydWJfc3RwY3B5IChidWYsIGFsaWFzLT5wYXRoKTsKLQotICAg ICAgLyoKLSAgICAgICAqIEl0ZXJhdGUgb3ZlciBlbnRyaWVzIHJldHVybmVkIGJ5IHBmdy4gRWFj aCBlbnRyeSBjb250YWlucyBhCi0gICAgICAgKiBwb2ludGVyIHRvIHd3cG4gdGFibGUgYW5kIGhp cyBsZW5ndGguCi0gICAgICAgKi8KLSAgICAgIHN0cnVjdCBhcmdzX3JldCAqdGFyZ2V0c190YWJs ZSA9IChzdHJ1Y3QgYXJnc19yZXQgKikgKGFyZ3NfdGFyZ2V0cy50YWJsZSk7Ci0gICAgICBmb3Ig KGkgPSAwOyBpIDwgYXJnc190YXJnZXRzLm5lbnRyaWVzOyBpKyspCisgIC8qIFNldHVwIHRoZSBm Y3AtbHVucyBtZXRob2QgdG8gY2FsbCB2aWEgcGZ3ICovCisgIElOSVRfSUVFRTEyNzVfQ09NTU9O ICgmYXJnc19sdW5zLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgNCwgMyk7CisgIGFyZ3NfbHVucy5t ZXRob2QgPSAoZ3J1Yl9pZWVlMTI3NV9jZWxsX3QpICJmY3AtbHVucyI7CisgIGFyZ3NfbHVucy5p aGFuZGxlID0gaWhhbmRsZTsKKyAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllfRk4gKCZhcmdzX3Rh cmdldHMpID09IC0xKQorICAgIHsKKyAgICAgIGdydWJfZHByaW50ZiAoImRpc2siLCAiZmFpbGVk IHRvIGdldCB0aGUgdGFyZ2V0cyB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwg YWxpYXMtPnBhdGgpOworICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7CisgICAg ICByZXR1cm47CisgICAgfQorICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1aWxkaW5nIHRoZSBw YXRoICovCisgIGJ1ZiA9IGdydWJfbWFsbG9jIChncnViX3N0cmxlbiAoYWxpYXMtPnBhdGgpICsg RVhURU5EX1BBVEhfNjQpOworICBpZiAoIWJ1ZikKKyAgICB7CisgICAgICBncnViX2llZWUxMjc1 X2Nsb3NlIChpaGFuZGxlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGJ1ZnB0ciA9IGdydWJf c3RwY3B5IChidWYsIGFsaWFzLT5wYXRoKTsKKworICAvKgorICAgKiBJdGVyYXRlIG92ZXIgZW50 cmllcyByZXR1cm5lZCBieSBwZncuIEVhY2ggZW50cnkgY29udGFpbnMgYQorICAgKiBwb2ludGVy IHRvIHd3cG4gdGFibGUgYW5kIGhpcyBsZW5ndGguCisgICAqLworICB0YXJnZXRzX3RhYmxlID0g KHN0cnVjdCBhcmdzX3JldCAqKSAoYXJnc190YXJnZXRzLnRhYmxlKTsKKyAgZm9yIChpID0gMDsg aSA8IGFyZ3NfdGFyZ2V0cy5uZW50cmllczsgaSsrKQorICAgIHsKKyAgICAgIHB0cl90YXJnZXRz ID0gKGdydWJfdWludDY0X3QqKSB0YXJnZXRzX3RhYmxlW2ldLmFkZHI7CisgICAgICAvKiBJdGVy YXRlIG92ZXIgYWxsIHd3cG5zIGluIGdpdmVuIHRhYmxlICovCisgICAgICBmb3IgKGsgPSAwOyBr IDwgdGFyZ2V0c190YWJsZVtpXS5sZW47IGsrKykKICAgICAgICAgewotICAgICAgICAgIHB0cl90 YXJnZXRzID0gKGdydWJfdWludDY0X3QqKSB0YXJnZXRzX3RhYmxlW2ldLmFkZHI7Ci0gICAgICAg ICAgLyogSXRlcmF0ZSBvdmVyIGFsbCB3d3BucyBpbiBnaXZlbiB0YWJsZSAqLwotICAgICAgICAg IGZvcihrID0gMDsgayA8IHRhcmdldHNfdGFibGVbaV0ubGVuOyBrKyspCisgICAgICAgICAgYXJn c19sdW5zLnd3cG5fbCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkgKCpwdHJfdGFyZ2V0cyk7Cisg ICAgICAgICAgYXJnc19sdW5zLnd3cG5faCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkgKCpwdHJf dGFyZ2V0cyA+PiAzMik7CisgICAgICAgICAgcG9zID0gZ3J1Yl9zbnByaW50ZiAoYnVmcHRyLCAz MiwgIi9kaXNrQCUiIFBSSXhHUlVCX1VJTlQ2NF9ULAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdydWJfZ2V0X3VuYWxpZ25lZDY0ICgqcHRyX3RhcmdldHMrKykpOworICAgICAgICAg IC8qIEdldCB0aGUgbHVucyBmb3IgZ2l2ZW4gd3dwbiB0YXJnZXQgKi8KKyAgICAgICAgICBpZiAo SUVFRTEyNzVfQ0FMTF9FTlRSWV9GTiAoJmFyZ3NfbHVucykgPT0gLTEpCiAgICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgIGFyZ3NfbHVucy53d3BuX2wgPSAoZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qp ICgqcHRyX3RhcmdldHMpOwotICAgICAgICAgICAgICBhcmdzX2x1bnMud3dwbl9oID0gKGdydWJf aWVlZTEyNzVfY2VsbF90KSAoKnB0cl90YXJnZXRzID4+IDMyKTsKLSAgICAgICAgICAgICAgcG9z ID0gZ3J1Yl9zbnByaW50ZiAoYnVmcHRyLCAzMiwgIi9kaXNrQCUiIFBSSXhHUlVCX1VJTlQ2NF9U LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfZ2V0X3VuYWxpZ25lZDY0 ICgqcHRyX3RhcmdldHMrKykpOwotICAgICAgICAgICAgICAvKiBHZXQgdGhlIGx1bnMgZm9yIGdp dmVuIHd3cG4gdGFyZ2V0ICovCi0gICAgICAgICAgICAgIGlmIChJRUVFMTI3NV9DQUxMX0VOVFJZ X0ZOICgmYXJnc19sdW5zKSA9PSAtMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg ICAgICBncnViX2RwcmludGYgKCJkaXNrIiwgImZhaWxlZCB0byBnZXQgdGhlIExVTlMgd2hpbGUg aXRlcmF0aW5nIEZDUCBkaXNrIHBhdGg9JXNcbiIsIGJ1Zik7Ci0gICAgICAgICAgICAgICAgICBn cnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKLSAgICAgICAgICAgICAgICAgIGdydWJfZnJl ZSAoYnVmKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgIHN0cnVjdCBhcmdzX3JldCAqbHVuc190YWJsZSA9IChzdHJ1Y3QgYXJnc19y ZXQgKikgKGFyZ3NfbHVucy50YWJsZSk7CisgICAgICAgICAgICAgIGdydWJfZHByaW50ZiAoImRp c2siLCAiZmFpbGVkIHRvIGdldCB0aGUgTFVOUyB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0 aD0lc1xuIiwgYnVmKTsKKyAgICAgICAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRs ZSk7CisgICAgICAgICAgICAgIGdydWJfZnJlZSAoYnVmKTsKKyAgICAgICAgICAgICAgcmV0dXJu OworICAgICAgICAgICAgfQorICAgICAgICAgIGx1bnNfdGFibGUgPSAoc3RydWN0IGFyZ3NfcmV0 ICopIChhcmdzX2x1bnMudGFibGUpOwogCi0gICAgICAgICAgICAgIC8qIEl0ZXJhdGUgb3ZlciBh bGwgTFVOcyAqLwotICAgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBhcmdzX2x1bnMubmVudHJp ZXM7IGorKykKKyAgICAgICAgICAvKiBJdGVyYXRlIG92ZXIgYWxsIExVTnMgKi8KKyAgICAgICAg ICBmb3IgKGogPSAwOyBqIDwgYXJnc19sdW5zLm5lbnRyaWVzOyBqKyspCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIHB0cl9sdW5zID0gKGdydWJfdWludDY0X3QqKSBsdW5zX3RhYmxlW2pd LmFkZHI7CisgICAgICAgICAgICAgIGZvciAobCA9IDA7IGwgPCBsdW5zX3RhYmxlW2pdLmxlbjsg bCsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHB0cl9sdW5zID0gKGdy dWJfdWludDY0X3QqKSBsdW5zX3RhYmxlW2pdLmFkZHI7Ci0gICAgICAgICAgICAgICAgICBmb3Io bCA9IDA7IGwgPCBsdW5zX3RhYmxlW2pdLmxlbjsgbCsrKQotICAgICAgICAgICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9zbnByaW50ZiAoJmJ1ZnB0cltwb3NdLCAzMCwg IiwlIiBQUkl4R1JVQl9VSU5UNjRfVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdydWJfZ2V0X3VuYWxpZ25lZDY0ICgqcHRyX2x1bnMrKykpOwotICAgICAgICAgICAgICAg ICAgICAgIGRldl9pdGVyYXRlX3JlYWwgKGJ1ZiwgYnVmKTsKLSAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgZ3J1Yl9zbnByaW50ZiAoJmJ1ZnB0cltwb3NdLCAzMCwgIiwl IiBQUkl4R1JVQl9VSU5UNjRfVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdy dWJfZ2V0X3VuYWxpZ25lZDY0ICgqcHRyX2x1bnMrKykpOworICAgICAgICAgICAgICAgICAgZGV2 X2l0ZXJhdGVfcmVhbCAoYnVmLCBidWYpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg IH0KICAgICAgICAgfQotICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7CisgICAg fQorICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKKyAgZ3J1Yl9mcmVlIChidWYpOwor ICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitkZXZfaXRlcmF0ZV9mY3BfbnZtZW9mIChjb25z dCBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9kZXZhbGlhcyAqYWxpYXMpCit7CisgIGNoYXIgKmJ1ZnB0 cjsKKyAgZ3J1Yl9pZWVlMTI3NV9paGFuZGxlX3QgaWhhbmRsZTsKKworICAvKiBDcmVhdGUgdGhl IHN0cnVjdHMgZm9yIHRoZSBwYXJhbWV0ZXJzIHBhc3NpbmcgdG8gUEZXICovCisgIHN0cnVjdCBu dm1lX2FyZ3MKKyAgeworICAgIHN0cnVjdCBncnViX2llZWUxMjc1X2NvbW1vbl9oZHIgY29tbW9u OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG1ldGhvZDsKKyAgICBncnViX2llZWUxMjc1X2Nl bGxfdCBpaGFuZGxlOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGNhdGNoX3Jlc3VsdDsKKyAg ICBncnViX2llZWUxMjc1X2NlbGxfdCBuZW50cmllczsKKyAgICBncnViX2llZWUxMjc1X2NlbGxf dCB0YWJsZTsKKyAgfSBudm1lX2Rpc2NvdmVyeV9jb250cm9sbGVyc19hcmdzLCBudm1lX2NvbnRy b2xsZXJzX2FyZ3MsIG52bWVfbmFtZXNwYWNlc19hcmdzOworCisgIC8qIENyZWF0ZSB0aGUgc3Ry dWN0cyBmb3IgdGhlIHJlc3VsdHMgZnJvbSBQRlcgKi8KKyAgc3RydWN0IGRpc2NvdmVyeV9jb250 cm9sbGVyc190YWJsZV9zdHJ1Y3QKKyAgeworICAgIGdydWJfdWludDY0X3QgdGFibGVbMjU2XTsK KyAgICBncnViX3VpbnQzMl90IGxlbjsKKyAgfSBkaXNjb3ZlcnlfY29udHJvbGxlcnNfdGFibGU7 CisKKyAgLyoKKyAgICogc3RydWN0IG52bWVfY29udHJvbGxlcnNfdGFibGVfZW50cnkKKyAgICog dGhpcyB0aGUgcmV0dXJuIG9mIG52bWUtY29udHJvbGxlcnMgbWV0aG9kIHRhYmxlcywgY29udGFp bmluZzoKKyAgICogLSAyLWJ5dGUgY29udHJvbGxlciBJRAorICAgKiAtIDI1Ni1ieXRlIHRyYW5z cG9ydCBhZGRyZXNzIHN0cmluZworICAgKiAtIDI1Ni1ieXRlIGZpZWxkIGNvbnRhaW5pbmcgbnVs bC10ZXJtaW5hdGVkIE5WTSBzdWJzeXN0ZW0gTlFOIHN0cmluZyB1cCB0byAyMjMgY2hhcmFjdGVy cworICAgKi8KKyAgc3RydWN0IG52bWVfY29udHJvbGxlcnNfdGFibGVfZW50cnkKKyAgeworICAg IGdydWJfdWludDE2X3QgaWQ7CisgICAgY2hhciB3d3BuWzI1Nl07CisgICAgY2hhciBucW5bMjU2 XTsKKyAgfTsKKworICBzdHJ1Y3QgbnZtZV9jb250cm9sbGVyc190YWJsZV9lbnRyeV9yZWFsCisg IHsKKyAgICBncnViX3VpbnQxNl90IGlkOworICAgIGNoYXIgd3dwblsyNTZdOworICAgIGNoYXIg bnFuWzI1Nl07CisgIH07CisKKyAgc3RydWN0IG52bWVfY29udHJvbGxlcnNfdGFibGVfZW50cnkq IG52bWVfY29udHJvbGxlcnNfdGFibGU7CisgIGdydWJfdWludDMyX3QgbnZtZV9jb250cm9sbGVy c190YWJsZV9lbnRyaWVzOworICBjaGFyICpidWY7CisgIHVuc2lnbmVkIGludCBpID0gMDsKKyAg aW50IGN1cnJlbnRfYnVmZmVyX2luZGV4OworICBpbnQgbnZtZV9jb250cm9sbGVyX2luZGV4Owor ICBpbnQgYnVmcHRyX3BvczI7CisgIGdydWJfdWludDMyX3QgbmFtZXNwYWNlX2luZGV4ID0gMDsK KyAgc3RydWN0IG52bWVfY29udHJvbGxlcnNfdGFibGVfZW50cnkqIG52bWVfY29udHJvbGxlcnNf dGFibGVfYnVmOworCisgIG52bWVfY29udHJvbGxlcnNfdGFibGUgPSBncnViX21hbGxvYyAoc2l6 ZW9mIChzdHJ1Y3QgbnZtZV9jb250cm9sbGVyc190YWJsZV9lbnRyeSkgKiAyNTYpOworICAvKiBB bGxvY2F0ZSBtZW1vcnkgZm9yIGJ1aWxkaW5nIHRoZSBOVk1lb0YgcGF0aCAqLworICBidWYgPSBn cnViX21hbGxvYyAoZ3J1Yl9zdHJsZW4gKGFsaWFzLT5wYXRoKSArIEVYVEVORF9QQVRIXzUxMik7 CisKKyAgaWYgKCFidWYgfHwgIW52bWVfY29udHJvbGxlcnNfdGFibGUpCisgICAgeworICAgICAg Z3J1Yl9mcmVlIChudm1lX2NvbnRyb2xsZXJzX3RhYmxlKTsKICAgICAgIGdydWJfZnJlZSAoYnVm KTsKICAgICAgIHJldHVybjsKICAgICB9CisKKyAgLyogQ29weSB0aGUgYWxpYXMtPnBhdGggdG8g YnVmIHNvIHdlIGNhbiB3b3JrIHdpdGggKi8KKyAgYnVmcHRyID0gZ3J1Yl9zdHBjcHkgKGJ1Ziwg YWxpYXMtPnBhdGgpOworICBncnViX3NucHJpbnRmIChidWZwdHIsIDMyLCAiL252bWUtb2YiKTsK KworICAvKgorICAgKiAgT3BlbiB0aGUgbnZtZS1vZiBsYXllcgorICAgKiAgRXguICAvcGNpQGJ1 cy9maWJyZS1jaGFubmVsQEBkZXYsZnVuYy9udm1lLW9mCisgICAqLworICBpZiAoZ3J1Yl9pZWVl MTI3NV9vcGVuIChidWYsICZpaGFuZGxlKSkKKyAgICB7CisgICAgICBncnViX2RwcmludGYgKCJk aXNrIiwgImZhaWxlZCB0byBvcGVuIHRoZSBkaXNrIHdoaWxlIGl0ZXJhdGluZyBGQ1AgZGlzayBw YXRoPSVzXG4iLCBidWYpOworICAgICAgZ3J1Yl9mcmVlIChudm1lX2NvbnRyb2xsZXJzX3RhYmxl KTsKKyAgICAgIGdydWJfZnJlZSAoYnVmKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyoK KyAgICogQ2FsbCB0byBudm1lLWRpc2NvdmVyeS1jb250cm9sbGVycyBtZXRob2QgZnJvbSB0aGUg bnZtZS1vZiBsYXllcgorICAgKiB0byBnZXQgYSBsaXN0IG9mIHRoZSBOVk1lIGRpc2NvdmVyeSBj b250cm9sbGVycyBwZXIgdGhlIGJpbmRpbmcKKyAgICovCisgIElOSVRfSUVFRTEyNzVfQ09NTU9O ICgmbnZtZV9kaXNjb3ZlcnlfY29udHJvbGxlcnNfYXJncy5jb21tb24sICJjYWxsLW1ldGhvZCIs IDIsIDIpOworICBudm1lX2Rpc2NvdmVyeV9jb250cm9sbGVyc19hcmdzLm1ldGhvZCA9IChncnVi X2llZWUxMjc1X2NlbGxfdCkgIm52bWUtZGlzY292ZXJ5LWNvbnRyb2xsZXJzIjsKKyAgbnZtZV9k aXNjb3ZlcnlfY29udHJvbGxlcnNfYXJncy5paGFuZGxlID0gaWhhbmRsZTsKKyAgaWYgKElFRUUx Mjc1X0NBTExfRU5UUllfRk4gKCZudm1lX2Rpc2NvdmVyeV9jb250cm9sbGVyc19hcmdzKSA9PSAt MSkKKyAgICB7CisgICAgICBncnViX2RwcmludGYgKCJkaXNrIiwgImZhaWxlZCB0byBnZXQgdGhl IHRhcmdldHMgd2hpbGUgaXRlcmF0aW5nIEZDUCBkaXNrIHBhdGg9JXNcbiIsIGJ1Zik7CisgICAg ICBncnViX2ZyZWUgKG52bWVfY29udHJvbGxlcnNfdGFibGUpOworICAgICAgZ3J1Yl9mcmVlIChi dWYpOworICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7CisgICAgICByZXR1cm47 CisgICAgfQorCisgIC8qIEFmdGVyIGNsb3NpbmcgdGhlIGRldmljZSwgdGhlIGluZm8gaXMgbG9z dC4gU28gbGV0cyBjb3B5IGVhY2ggYnVmZmVyIGluIHRoZSBidWZmZXJzIHRhYmxlICovCisgIGRp c2NvdmVyeV9jb250cm9sbGVyc190YWJsZS5sZW4gPSAoZ3J1Yl91aW50MzJfdCkgbnZtZV9kaXNj b3ZlcnlfY29udHJvbGxlcnNfYXJncy5uZW50cmllczsKKworICBmb3IgKGkgPSAwOyBpIDwgZGlz Y292ZXJ5X2NvbnRyb2xsZXJzX3RhYmxlLmxlbjsgaSsrKQorICAgIHsKKyAgICAgIGRpc2NvdmVy eV9jb250cm9sbGVyc190YWJsZS50YWJsZVtpXSA9ICgoZ3J1Yl91aW50NjRfdCopIG52bWVfZGlz Y292ZXJ5X2NvbnRyb2xsZXJzX2FyZ3MudGFibGUpW2ldOworICAgIH0KKyAgZ3J1Yl9pZWVlMTI3 NV9jbG9zZSAoaWhhbmRsZSk7CisgIGdydWJfZHByaW50ZiAoIm9mZGlzayIsIk5WTWVvRjogRm91 bmQgJWQgZGlzY292ZXJ5IGNvbnRyb2xsZXJzXG4iLCBkaXNjb3ZlcnlfY29udHJvbGxlcnNfdGFi bGUubGVuKTsKKworICAvKiBGb3IgZWFjaCBudm1lIGRpc2NvdmVyeSBjb250cm9sbGVyICovCisg IGZvciAoY3VycmVudF9idWZmZXJfaW5kZXggPSAwOyBjdXJyZW50X2J1ZmZlcl9pbmRleCA8IChp bnQpIGRpc2NvdmVyeV9jb250cm9sbGVyc190YWJsZS5sZW47IGN1cnJlbnRfYnVmZmVyX2luZGV4 KyspCisgICAgeworICAgICAgZ3J1Yl9zbnByaW50ZiAoYnVmcHRyLCA2NCwgIi9udm1lLW9mL2Nv bnRyb2xsZXJAJSIgUFJJeEdSVUJfVUlOVDY0X1QgIixmZmZmIiwKKyAgICAgICAgICAgICAgICAg ICAgIGRpc2NvdmVyeV9jb250cm9sbGVyc190YWJsZS50YWJsZVtjdXJyZW50X2J1ZmZlcl9pbmRl eF0pOworICAgICAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwgIm52bWVvZiBjb250cm9sbGVyPSVz XG4iLCBidWYpOworICAgICAgaWYgKGdydWJfaWVlZTEyNzVfb3BlbiAoYnVmLCAmaWhhbmRsZSkp CisgICAgICAgIHsKKyAgICAgICAgICBncnViX2RwcmludGYgKCJvZmRpc2siLCAiZmFpbGVkIHRv IG9wZW4gdGhlIGRpc2sgd2hpbGUgZ2V0dGluZyBudm1lLWNvbnRyb2xsZXJzICBwYXRoPSVzXG4i LCBidWYpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICBJTklUX0lFRUUx Mjc1X0NPTU1PTiAoJm52bWVfY29udHJvbGxlcnNfYXJncy5jb21tb24sICJjYWxsLW1ldGhvZCIs IDIsIDIpOworICAgICAgbnZtZV9jb250cm9sbGVyc19hcmdzLm1ldGhvZCA9IChncnViX2llZWUx Mjc1X2NlbGxfdCkgIm52bWUtY29udHJvbGxlcnMiOworICAgICAgbnZtZV9jb250cm9sbGVyc19h cmdzLmloYW5kbGUgPSBpaGFuZGxlOworICAgICAgbnZtZV9jb250cm9sbGVyc19hcmdzLmNhdGNo X3Jlc3VsdCA9IDA7CisKKyAgICAgIGlmIChJRUVFMTI3NV9DQUxMX0VOVFJZX0ZOICgmbnZtZV9j b250cm9sbGVyc19hcmdzKSA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgIGdydWJfZHByaW50 ZiAoIm9mZGlzayIsICJmYWlsZWQgdG8gZ2V0IHRoZSBudm1lLWNvbnRyb2xsZXJzIHdoaWxlIGl0 ZXJhdGluZyBGQ1AgZGlzayBwYXRoXG4iKTsKKyAgICAgICAgICBncnViX2llZWUxMjc1X2Nsb3Nl IChpaGFuZGxlKTsKKyAgICAgICAgICBjb250aW51ZTsKKwkgfQorCisgICAgICAvKiBDb3B5IHRo ZSBidWZmZXIgbGlzdCB0byBudm1lX2NvbnRyb2xsZXJzX3RhYmxlICovCisgICAgICBudm1lX2Nv bnRyb2xsZXJzX3RhYmxlX2VudHJpZXMgPSAoKGdydWJfdWludDMyX3QpIG52bWVfY29udHJvbGxl cnNfYXJncy5uZW50cmllcyk7CisgICAgICBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2J1ZiA9IChz dHJ1Y3QgbnZtZV9jb250cm9sbGVyc190YWJsZV9lbnRyeSopIG52bWVfY29udHJvbGxlcnNfYXJn cy50YWJsZTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2Vu dHJpZXM7IGkrKykKKyAgICAgICAgeworCSAgIG52bWVfY29udHJvbGxlcnNfdGFibGVbaV0uaWQg PSAoZ3J1Yl91aW50MTZfdCkgbnZtZV9jb250cm9sbGVyc190YWJsZV9idWZbaV0uaWQ7CisgICAg ICAgICAgZ3J1Yl9zdHJjcHkgKG52bWVfY29udHJvbGxlcnNfdGFibGVbaV0ud3dwbiwgbnZtZV9j b250cm9sbGVyc190YWJsZV9idWZbaV0ud3dwbik7CisgICAgICAgICAgZ3J1Yl9zdHJjcHkgKG52 bWVfY29udHJvbGxlcnNfdGFibGVbaV0ubnFuLCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2J1Zltp XS5ucW4pOworCSB9CisgICAgICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKKyAgICAg IGdydWJfZHByaW50ZiAoIm9mZGlzayIsICJOVk1lb0Y6IGZvdW5kICVkIG52bWUgY29udHJvbGxl cnNcbiIsIChpbnQpIG52bWVfY29udHJvbGxlcnNfYXJncy5uZW50cmllcyk7CisKKyAgICAgIC8q IEZvciBlYWNoIG52bWUgY29udHJvbGxlciAqLworICAgICAgZm9yIChudm1lX2NvbnRyb2xsZXJf aW5kZXggPSAwOyBudm1lX2NvbnRyb2xsZXJfaW5kZXggPCAoaW50KSBudm1lX2NvbnRyb2xsZXJz X2FyZ3MubmVudHJpZXM7IG52bWVfY29udHJvbGxlcl9pbmRleCsrKQorICAgICAgIHsKKyAgICAg ICAgIC8qCisJICAgKiBPcGVuIHRoZSBudm1lIGNvbnRyb2xsZXIKKyAgICAgICAgICAqIC9wY2lA YnVzL2ZpYnJlLWNoYW5uZWxAZGV2LGZ1bmMvbnZtZS1vZi9jb250cm9sbGVyQHRyYW5zcG9ydC1h ZGRyLGN0bHItaWQ6bnFuPXRndC1zdWJzeXN0ZW0tbnFuCisgICAgICAgICAgKi8KKyAgICAgICAg IGJ1ZnB0cl9wb3MyID0gZ3J1Yl9zbnByaW50ZiAoYnVmcHRyLCA1MTIsICIvbnZtZS1vZi9jb250 cm9sbGVyQCVzLGZmZmY6bnFuPSVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG52bWVfY29udHJvbGxlcnNfdGFibGVbbnZtZV9jb250cm9sbGVyX2luZGV4XS53d3Bu LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnZtZV9jb250cm9sbGVy c190YWJsZVtudm1lX2NvbnRyb2xsZXJfaW5kZXhdLm5xbik7CisJICBncnViX2RwcmludGYgKCJv ZmRpc2siLCAiTlZNZW9GOiBudm1lb2YgY29udHJvbGxlcj0lc1xuIiwgYnVmKTsKKyAgICAgICAg IGlmIChncnViX2llZWUxMjc1X29wZW4gKGJ1ZiwgJmloYW5kbGUpKQorCSAgICB7CisgICAgICAg ICAgICAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNrIiwgImZhaWxlZCB0byBvcGVuIHRoZSBwYXRoPSVz XG4iLCBidWYpOworICAgICAgICAgICAgIGNvbnRpbnVlOworCSAgICB9CisgICAgICAgICBJTklU X0lFRUUxMjc1X0NPTU1PTiAoJm52bWVfbmFtZXNwYWNlc19hcmdzLmNvbW1vbiwgImNhbGwtbWV0 aG9kIiwgMiwgMik7CisgICAgICAgICBudm1lX25hbWVzcGFjZXNfYXJncy5tZXRob2QgPSAoZ3J1 Yl9pZWVlMTI3NV9jZWxsX3QpICJnZXQtbmFtZXNwYWNlLWxpc3QiOworICAgICAgICAgbnZtZV9u YW1lc3BhY2VzX2FyZ3MuaWhhbmRsZSA9IGloYW5kbGU7CisgICAgICAgICBudm1lX25hbWVzcGFj ZXNfYXJncy5jYXRjaF9yZXN1bHQgPSAwOworCisJICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9G TiAoJm52bWVfbmFtZXNwYWNlc19hcmdzKSA9PSAtMSkKKyAgICAgICAgICAgeworICAgICAgICAg ICAgIGdydWJfZHByaW50ZiAoIm9mZGlzayIsICJmYWlsZWQgdG8gZ2V0IHRoZSBudm1lLW5hbWVz cGFjZS1saXN0IHdoaWxlIGl0ZXJhdGluZyBGQ1AgZGlzayBwYXRoXG4iKTsKKyAgICAgICAgICAg ICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKKyAgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgICAgfQorICAgICAgICAgZ3J1Yl91aW50MzJfdCAqbmFtZXNwYWNlcyA9IChncnVi X3VpbnQzMl90KikgbnZtZV9uYW1lc3BhY2VzX2FyZ3MudGFibGU7CisgICAgICAgICBncnViX2Rw cmludGYgKCJvZmRpc2siLCAiTlZNZW9GOiBmb3VuZCAlZCBuYW1lc3BhY2VzXG4iLCAoaW50KW52 bWVfbmFtZXNwYWNlc19hcmdzLm5lbnRyaWVzKTsKKwkgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGlo YW5kbGUpOworICAgICAgICAgbmFtZXNwYWNlX2luZGV4ID0gMDsKKyAgICAgICAgIGZvciAobmFt ZXNwYWNlX2luZGV4PTA7IG5hbWVzcGFjZV9pbmRleCA8IG52bWVfbmFtZXNwYWNlc19hcmdzLm5l bnRyaWVzOyBuYW1lc3BhY2VfaW5kZXgrKykKKyAgICAgICAgICAgeworCSAgICAgIGdydWJfc25w cmludGYgKGJ1ZnB0citidWZwdHJfcG9zMiwgNTEyLCAiL25hbWVzcGFjZUAlIlBSSXhHUlVCX1VJ TlQzMl9ULCBuYW1lc3BhY2VzW25hbWVzcGFjZV9pbmRleF0pOworICAgICAgICAgICAgIGdydWJf ZHByaW50ZiAoIm9mZGlzayIsICJOVk1lb0Y6IG5hbWVzcGFjZT0lc1xuIiwgYnVmKTsKKyAgICAg ICAgICAgICBkZXZfaXRlcmF0ZV9yZWFsIChidWYsIGJ1Zik7CisgICAgICAgICAgIH0KKyAgICAg ICAgIGRldl9pdGVyYXRlX3JlYWwgKGJ1ZiwgYnVmKTsKKwl9CisgICAgfQorICBncnViX2ZyZWUg KGJ1Zik7CisgIGdydWJfZnJlZSAobnZtZV9jb250cm9sbGVyc190YWJsZSk7CisgIHJldHVybjsK K30KKworc3RhdGljIHZvaWQKK2Rldl9pdGVyYXRlIChjb25zdCBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3 NV9kZXZhbGlhcyAqYWxpYXMpCit7CisgIGlmIChncnViX3N0cmNtcCAoYWxpYXMtPnR5cGUsICJm Y3AiKSA9PSAwKQorICAgIHsKKyAgICAgIC8qIEl0ZXJhdGUgZGlza3MgKi8KKyAgICAgIGRldl9p dGVyYXRlX2ZjcF9kaXNrcyAoYWxpYXMpOworICAgICAgLyogSXRlcmF0ZSBOVk1lb0YgKi8KKyAg ICAgIGRldl9pdGVyYXRlX2ZjcF9udm1lb2YgKGFsaWFzKTsKKyAgICB9CiAgIGVsc2UgaWYgKGdy dWJfc3RyY21wIChhbGlhcy0+dHlwZSwgInZzY3NpIikgPT0gMCkKICAgICB7CiAgICAgICBzdGF0 aWMgZ3J1Yl9pZWVlMTI3NV9paGFuZGxlX3QgaWhhbmRsZTsKLS0gCjIuMzkuMwoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkdydWItZGV2ZWwgbWFpbGlu ZyBsaXN0CkdydWItZGV2ZWxAZ251Lm9yZwpodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9s aXN0aW5mby9ncnViLWRldmVsCg==