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 smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (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 476C0C4167B for ; Mon, 30 Oct 2023 15:35:27 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 04D857096E; Mon, 30 Oct 2023 15:35:27 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 04D857096E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=osuosl.org; s=default; t=1698680127; bh=NcZCUX5ucDZG84RbhsvXBy/LMjg/3QqVPiwu2KAkOA0=; h=From:To:Date:References:In-Reply-To:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: Cc:From; b=Ys3CGco1E8F/sHRhCFHHOjBRWqR5krhXsMzJ8NazZSpYxBhjUw4iM9LdWhQKu4qdG +viL+I0LvyXDgnslvDCer/5B8FniGK4yGeKNflypsq8wXMy8asz89D/Ds8LI327QRu 8r3YsQZG3Ood7anEdqSKI4SlI3GWI8LQr3CFbHO5ZlC1bGnxKdC6rpwL09g9TjAvh8 DFm33WrvkbAuH0HfAuyXCBrYJyZsXggEWbrp4Zvi3UtE6PO5N4QXb1afgszV0CajP1 CwVC3hNuhQOoj3C3bXiH++hzMWaF6lSFJ3ZFo14RwIoK1bqOESgXCqXal6zjkLPQSh rjqXAKx4u8Sgw== X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id jlsOSCVTIDe0; Mon, 30 Oct 2023 15:35:24 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by smtp3.osuosl.org (Postfix) with ESMTP id 36D2C709E0; Mon, 30 Oct 2023 15:35:24 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 36D2C709E0 Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by ash.osuosl.org (Postfix) with ESMTP id DE8E81BF3F3 for ; Thu, 26 Oct 2023 10:19:13 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id A4D9842154 for ; Thu, 26 Oct 2023 10:19:13 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org A4D9842154 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id W7kRIjVpdoys for ; Thu, 26 Oct 2023 10:19:11 +0000 (UTC) Received: from smtp-fw-52002.amazon.com (smtp-fw-52002.amazon.com [52.119.213.150]) by smtp4.osuosl.org (Postfix) with ESMTPS id 4EA0F42214 for ; Thu, 26 Oct 2023 10:19:11 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 4EA0F42214 X-IronPort-AV: E=Sophos;i="6.03,253,1694736000"; d="scan'208";a="591398862" Thread-Topic: [PATCH 2/3] treewide: Convert some ethtool_sprintf() to ethtool_puts() Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-pdx-2c-m6i4x-b1c0e1d0.us-west-2.amazon.com) ([10.43.8.6]) by smtp-border-fw-52002.iad7.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Oct 2023 10:19:07 +0000 Received: from smtpout.prod.us-west-2.prod.farcaster.email.amazon.dev (pdx2-ws-svc-p26-lb5-vlan3.pdx.amazon.com [10.39.38.70]) by email-inbound-relay-pdx-2c-m6i4x-b1c0e1d0.us-west-2.amazon.com (Postfix) with ESMTPS id D6D7B80E40; Thu, 26 Oct 2023 10:19:03 +0000 (UTC) Received: from EX19MTAEUB002.ant.amazon.com [10.0.17.79:46197] by smtpin.naws.eu-west-1.prod.farcaster.email.amazon.dev [10.0.36.96:2525] with esmtp (Farcaster) id 85256702-e469-4e16-8dcd-084e4fa9d666; Thu, 26 Oct 2023 10:19:02 +0000 (UTC) X-Farcaster-Flow-ID: 85256702-e469-4e16-8dcd-084e4fa9d666 Received: from EX19D047EUA001.ant.amazon.com (10.252.50.171) by EX19MTAEUB002.ant.amazon.com (10.252.51.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.39; Thu, 26 Oct 2023 10:19:02 +0000 Received: from EX19D022EUA002.ant.amazon.com (10.252.50.201) by EX19D047EUA001.ant.amazon.com (10.252.50.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.39; Thu, 26 Oct 2023 10:19:01 +0000 Received: from EX19D022EUA002.ant.amazon.com ([fe80::7f87:7d63:def0:157d]) by EX19D022EUA002.ant.amazon.com ([fe80::7f87:7d63:def0:157d%3]) with mapi id 15.02.1118.039; Thu, 26 Oct 2023 10:19:01 +0000 From: "Kiyanovski, Arthur" To: Przemek Kitszel , Justin Stitt , "David S. Miller" , "Eric Dumazet" , Jakub Kicinski , Paolo Abeni , "Agroskin, Shay" , "Arinzon, David" , "Dagan, Noam" , "Bshara, Saeed" , Rasesh Mody , Sudarsana Kalluru , "GR-Linux-NIC-Dev@marvell.com" , Dimitris Michailidis , Yisen Zhuang , Salil Mehta , Jesse Brandeburg , Tony Nguyen , Louis Peens , Shannon Nelson , Brett Creeley , "drivers@pensando.io" , "K. Y. Srinivasan" , Haiyang Zhang , "Wei Liu" , Dexuan Cui , Ronak Doshi , VMware PV-Drivers Reviewers , Andy Whitcroft , Joe Perches , "Dwaipayan Ray" , Lukas Bulwahn Thread-Index: AQHaB5y2ypM5j5ENE0OQVi1jMBjB87BbzPmAgAANCMA= Date: Thu, 26 Oct 2023 10:18:32 +0000 Deferred-Delivery: Thu, 26 Oct 2023 10:17:40 +0000 Message-ID: References: <20231025-ethtool_puts_impl-v1-0-6a53a93d3b72@google.com> <20231025-ethtool_puts_impl-v1-2-6a53a93d3b72@google.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.85.143.173] MIME-Version: 1.0 Precedence: Bulk X-Mailman-Approved-At: Mon, 30 Oct 2023 15:34:59 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1698315552; x=1729851552; h=from:to:cc:date:message-id:references:in-reply-to: content-transfer-encoding:mime-version:subject; bh=sishIOfug9LDx/UiCb7UCKHDn8owOWZQ2SxuDSjpDHo=; b=cUkh9yseY9L1f4CDMWLxlvIIh9R80D1rhkmNJRKFmS75p4keZRTfonpW 0ztImlPAUcVIfibZqxHzIC13oVqufIWWyji98BulQE/DQ0ppSISrU/XcS 0EB7T9R7PmVT+2PCfv5lHM7LABuX07FoBHR7kSCo+tM4g5VpXig1P0a7y 4=; X-Mailman-Original-Authentication-Results: smtp4.osuosl.org; dkim=pass (1024-bit key, unprotected) header.d=amazon.com header.i=@amazon.com header.a=rsa-sha256 header.s=amazon201209 header.b=cUkh9yse Subject: Re: [Intel-wired-lan] [PATCH 2/3] treewide: Convert some ethtool_sprintf() to ethtool_puts() X-BeenThere: intel-wired-lan@osuosl.org X-Mailman-Version: 2.1.29 List-Id: Intel Wired Ethernet Linux Kernel Driver Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "linux-hyperv@vger.kernel.org" , Kees Cook , "netdev@vger.kernel.org" , Nick Desaulniers , "linux-kernel@vger.kernel.org" , Nathan Chancellor , "oss-drivers@corigine.com" , "intel-wired-lan@lists.osuosl.org" Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: intel-wired-lan-bounces@osuosl.org Sender: "Intel-wired-lan" > -----Original Message----- > From: Przemek Kitszel > Sent: Thursday, October 26, 2023 12:24 PM > To: Justin Stitt ; David S. Miller > ; Eric Dumazet ; Jakub > Kicinski ; Paolo Abeni ; Agroskin, Shay > ; Kiyanovski, Arthur ; Arinzon, > David ; Dagan, Noam ; > Bshara, Saeed ; Rasesh Mody ; > Sudarsana Kalluru ; GR-Linux-NIC-Dev@marvell.com; > Dimitris Michailidis ; Yisen Zhuang > ; Salil Mehta ; Jesse > Brandeburg ; Tony Nguyen > ; Louis Peens ; > Shannon Nelson ; Brett Creeley > ; drivers@pensando.io; K. Y. Srinivasan > ; Haiyang Zhang ; Wei Liu > ; Dexuan Cui ; Ronak Doshi > ; VMware PV-Drivers Reviewers drivers@vmware.com>; Andy Whitcroft ; Joe Perches > ; Dwaipayan Ray ; Lukas > Bulwahn > Cc: linux-kernel@vger.kernel.org; netdev@vger.kernel.org; Nick Desaulniers > ; Nathan Chancellor ; Kees > Cook ; intel-wired-lan@lists.osuosl.org; oss- > drivers@corigine.com; linux-hyperv@vger.kernel.org > Subject: RE: [EXTERNAL] [PATCH 2/3] treewide: Convert some ethtool_sprintf() > to ethtool_puts() > > CAUTION: This email originated from outside of the organization. Do not click > links or open attachments unless you can confirm the sender and know the > content is safe. > > > > On 10/26/23 01:40, Justin Stitt wrote: > > This patch converts some basic cases of ethtool_sprintf() to > > ethtool_puts(). > > > > The conversions are used in cases where ethtool_sprintf() was being > > used with just two arguments: > > | ethtool_sprintf(&data, buffer[i].name); > > or when it's used with format string: "%s" > > | ethtool_sprintf(&data, "%s", buffer[i].name); > > which both now become: > > | ethtool_puts(&data, buffer[i].name); > > > > There are some outstanding patches [1] that I've sent using plain "%s" > > with ethtool_sprintf() that should be ethtool_puts() now. Some have > > been picked up as-is but I will send new versions for the others. > > > > [1]: > > https://lore.kernel.org/all/?q=dfb%3Aethtool_sprintf+AND+f%3Ajustinsti > > tt > > > > Signed-off-by: Justin Stitt > > --- > > drivers/net/ethernet/amazon/ena/ena_ethtool.c | 4 +- > > drivers/net/ethernet/brocade/bna/bnad_ethtool.c | 2 +- > > .../net/ethernet/fungible/funeth/funeth_ethtool.c | 8 +-- > > drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c | 2 +- > > .../net/ethernet/hisilicon/hns/hns_dsaf_xgmac.c | 2 +- > > drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 66 +++++++++++----------- > > drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 4 +- > > drivers/net/ethernet/intel/ice/ice_ethtool.c | 10 ++-- > > drivers/net/ethernet/intel/igb/igb_ethtool.c | 6 +- > > drivers/net/ethernet/intel/igc/igc_ethtool.c | 6 +- > > drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 5 +- > > .../net/ethernet/netronome/nfp/nfp_net_ethtool.c | 44 +++++++-------- > > drivers/net/ethernet/pensando/ionic/ionic_stats.c | 4 +- > > drivers/net/hyperv/netvsc_drv.c | 4 +- > > drivers/net/vmxnet3/vmxnet3_ethtool.c | 10 ++-- > > 15 files changed, 87 insertions(+), 90 deletions(-) > > > > diff --git a/drivers/net/ethernet/amazon/ena/ena_ethtool.c > > b/drivers/net/ethernet/amazon/ena/ena_ethtool.c > > index d671df4b76bc..e3ef081aa42b 100644 > > --- a/drivers/net/ethernet/amazon/ena/ena_ethtool.c > > +++ b/drivers/net/ethernet/amazon/ena/ena_ethtool.c > > @@ -299,13 +299,13 @@ static void ena_get_strings(struct ena_adapter > > *adapter, > > > > for (i = 0; i < ENA_STATS_ARRAY_GLOBAL; i++) { > > ena_stats = &ena_stats_global_strings[i]; > > - ethtool_sprintf(&data, ena_stats->name); > > + ethtool_puts(&data, ena_stats->name); > > } > > > > if (eni_stats_needed) { > > for (i = 0; i < ENA_STATS_ARRAY_ENI(adapter); i++) { > > ena_stats = &ena_stats_eni_strings[i]; > > - ethtool_sprintf(&data, ena_stats->name); > > + ethtool_puts(&data, ena_stats->name); > > } > > } > > > > diff --git a/drivers/net/ethernet/brocade/bna/bnad_ethtool.c > > b/drivers/net/ethernet/brocade/bna/bnad_ethtool.c > > index df10edff5603..d1ad6c9f8140 100644 > > --- a/drivers/net/ethernet/brocade/bna/bnad_ethtool.c > > +++ b/drivers/net/ethernet/brocade/bna/bnad_ethtool.c > > @@ -608,7 +608,7 @@ bnad_get_strings(struct net_device *netdev, u32 > > stringset, u8 *string) > > > > for (i = 0; i < BNAD_ETHTOOL_STATS_NUM; i++) { > > BUG_ON(!(strlen(bnad_net_stats_strings[i]) < ETH_GSTRING_LEN)); > > - ethtool_sprintf(&string, bnad_net_stats_strings[i]); > > + ethtool_puts(&string, bnad_net_stats_strings[i]); > > } > > > > bmap = bna_tx_rid_mask(&bnad->bna); diff --git > > a/drivers/net/ethernet/fungible/funeth/funeth_ethtool.c > > b/drivers/net/ethernet/fungible/funeth/funeth_ethtool.c > > index 31aa185f4d17..091c93bd7587 100644 > > --- a/drivers/net/ethernet/fungible/funeth/funeth_ethtool.c > > +++ b/drivers/net/ethernet/fungible/funeth/funeth_ethtool.c > > @@ -655,7 +655,7 @@ static void fun_get_strings(struct net_device *netdev, > u32 sset, u8 *data) > > i); > > } > > for (j = 0; j < ARRAY_SIZE(txq_stat_names); j++) > > - ethtool_sprintf(&p, txq_stat_names[j]); > > + ethtool_puts(&p, txq_stat_names[j]); > > > > for (i = 0; i < fp->num_xdpqs; i++) { > > for (j = 0; j < ARRAY_SIZE(xdpq_stat_names); > > j++) @@ -663,7 +663,7 @@ static void fun_get_strings(struct net_device > *netdev, u32 sset, u8 *data) > > xdpq_stat_names[j], i); > > } > > for (j = 0; j < ARRAY_SIZE(xdpq_stat_names); j++) > > - ethtool_sprintf(&p, xdpq_stat_names[j]); > > + ethtool_puts(&p, xdpq_stat_names[j]); > > > > for (i = 0; i < netdev->real_num_rx_queues; i++) { > > for (j = 0; j < ARRAY_SIZE(rxq_stat_names); j++) > > @@ -671,10 +671,10 @@ static void fun_get_strings(struct net_device > *netdev, u32 sset, u8 *data) > > i); > > } > > for (j = 0; j < ARRAY_SIZE(rxq_stat_names); j++) > > - ethtool_sprintf(&p, rxq_stat_names[j]); > > + ethtool_puts(&p, rxq_stat_names[j]); > > > > for (j = 0; j < ARRAY_SIZE(tls_stat_names); j++) > > - ethtool_sprintf(&p, tls_stat_names[j]); > > + ethtool_puts(&p, tls_stat_names[j]); > > break; > > default: > > break; > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c > > b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c > > index 8f391e2adcc0..bdb7afaabdd0 100644 > > --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c > > +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c > > @@ -678,7 +678,7 @@ static void hns_gmac_get_strings(u32 stringset, u8 > *data) > > return; > > > > for (i = 0; i < ARRAY_SIZE(g_gmac_stats_string); i++) > > - ethtool_sprintf(&buff, g_gmac_stats_string[i].desc); > > + ethtool_puts(&buff, g_gmac_stats_string[i].desc); > > } > > > > static int hns_gmac_get_sset_count(int stringset) diff --git > > a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_xgmac.c > > b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_xgmac.c > > index fc26ffaae620..c58833eb4830 100644 > > --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_xgmac.c > > +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_xgmac.c > > @@ -752,7 +752,7 @@ static void hns_xgmac_get_strings(u32 stringset, u8 > *data) > > return; > > > > for (i = 0; i < ARRAY_SIZE(g_xgmac_stats_string); i++) > > - ethtool_sprintf(&buff, g_xgmac_stats_string[i].desc); > > + ethtool_puts(&buff, g_xgmac_stats_string[i].desc); > > } > > > > /** > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c > > b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c > > index b54f3706fb97..b40415910e57 100644 > > --- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c > > +++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c > > @@ -912,42 +912,42 @@ static void hns_get_strings(struct net_device > > *netdev, u32 stringset, u8 *data) > > > > if (stringset == ETH_SS_TEST) { > > if (priv->ae_handle->phy_if != PHY_INTERFACE_MODE_XGMII) > > - ethtool_sprintf(&buff, > > - hns_nic_test_strs[MAC_INTERNALLOOP_MAC]); > > - ethtool_sprintf(&buff, > > - hns_nic_test_strs[MAC_INTERNALLOOP_SERDES]); > > + ethtool_puts(&buff, > > + hns_nic_test_strs[MAC_INTERNALLOOP_MAC]); > > + ethtool_puts(&buff, > > + > > + hns_nic_test_strs[MAC_INTERNALLOOP_SERDES]); > > if ((netdev->phydev) && (!netdev->phydev->is_c45)) > > - ethtool_sprintf(&buff, > > - hns_nic_test_strs[MAC_INTERNALLOOP_PHY]); > > + ethtool_puts(&buff, > > + > > + hns_nic_test_strs[MAC_INTERNALLOOP_PHY]); > > > > } else { > > - ethtool_sprintf(&buff, "rx_packets"); > > - ethtool_sprintf(&buff, "tx_packets"); > > - ethtool_sprintf(&buff, "rx_bytes"); > > - ethtool_sprintf(&buff, "tx_bytes"); > > - ethtool_sprintf(&buff, "rx_errors"); > > - ethtool_sprintf(&buff, "tx_errors"); > > - ethtool_sprintf(&buff, "rx_dropped"); > > - ethtool_sprintf(&buff, "tx_dropped"); > > - ethtool_sprintf(&buff, "multicast"); > > - ethtool_sprintf(&buff, "collisions"); > > - ethtool_sprintf(&buff, "rx_over_errors"); > > - ethtool_sprintf(&buff, "rx_crc_errors"); > > - ethtool_sprintf(&buff, "rx_frame_errors"); > > - ethtool_sprintf(&buff, "rx_fifo_errors"); > > - ethtool_sprintf(&buff, "rx_missed_errors"); > > - ethtool_sprintf(&buff, "tx_aborted_errors"); > > - ethtool_sprintf(&buff, "tx_carrier_errors"); > > - ethtool_sprintf(&buff, "tx_fifo_errors"); > > - ethtool_sprintf(&buff, "tx_heartbeat_errors"); > > - ethtool_sprintf(&buff, "rx_length_errors"); > > - ethtool_sprintf(&buff, "tx_window_errors"); > > - ethtool_sprintf(&buff, "rx_compressed"); > > - ethtool_sprintf(&buff, "tx_compressed"); > > - ethtool_sprintf(&buff, "netdev_rx_dropped"); > > - ethtool_sprintf(&buff, "netdev_tx_dropped"); > > - > > - ethtool_sprintf(&buff, "netdev_tx_timeout"); > > + ethtool_puts(&buff, "rx_packets"); > > + ethtool_puts(&buff, "tx_packets"); > > + ethtool_puts(&buff, "rx_bytes"); > > + ethtool_puts(&buff, "tx_bytes"); > > + ethtool_puts(&buff, "rx_errors"); > > + ethtool_puts(&buff, "tx_errors"); > > + ethtool_puts(&buff, "rx_dropped"); > > + ethtool_puts(&buff, "tx_dropped"); > > + ethtool_puts(&buff, "multicast"); > > + ethtool_puts(&buff, "collisions"); > > + ethtool_puts(&buff, "rx_over_errors"); > > + ethtool_puts(&buff, "rx_crc_errors"); > > + ethtool_puts(&buff, "rx_frame_errors"); > > + ethtool_puts(&buff, "rx_fifo_errors"); > > + ethtool_puts(&buff, "rx_missed_errors"); > > + ethtool_puts(&buff, "tx_aborted_errors"); > > + ethtool_puts(&buff, "tx_carrier_errors"); > > + ethtool_puts(&buff, "tx_fifo_errors"); > > + ethtool_puts(&buff, "tx_heartbeat_errors"); > > + ethtool_puts(&buff, "rx_length_errors"); > > + ethtool_puts(&buff, "tx_window_errors"); > > + ethtool_puts(&buff, "rx_compressed"); > > + ethtool_puts(&buff, "tx_compressed"); > > + ethtool_puts(&buff, "netdev_rx_dropped"); > > + ethtool_puts(&buff, "netdev_tx_dropped"); > > + > > + ethtool_puts(&buff, "netdev_tx_timeout"); > > > > h->dev->ops->get_strings(h, stringset, buff); > > } > > diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c > > b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c > > index bd1321bf7e26..2641b2a4fcb0 100644 > > --- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c > > +++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c > > @@ -2512,11 +2512,11 @@ static void i40e_get_priv_flag_strings(struct > net_device *netdev, u8 *data) > > u8 *p = data; > > > > for (i = 0; i < I40E_PRIV_FLAGS_STR_LEN; i++) > > - ethtool_sprintf(&p, i40e_gstrings_priv_flags[i].flag_string); > > + ethtool_puts(&p, > > + i40e_gstrings_priv_flags[i].flag_string); > > if (pf->hw.pf_id != 0) > > return; > > for (i = 0; i < I40E_GL_PRIV_FLAGS_STR_LEN; i++) > > - ethtool_sprintf(&p, i40e_gl_gstrings_priv_flags[i].flag_string); > > + ethtool_puts(&p, > > + i40e_gl_gstrings_priv_flags[i].flag_string); > > } > > > > static void i40e_get_strings(struct net_device *netdev, u32 > > stringset, diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c > > b/drivers/net/ethernet/intel/ice/ice_ethtool.c > > index ad4d4702129f..7871bba4b099 100644 > > --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c > > +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c > > @@ -1060,8 +1060,8 @@ __ice_get_strings(struct net_device *netdev, u32 > stringset, u8 *data, > > switch (stringset) { > > case ETH_SS_STATS: > > for (i = 0; i < ICE_VSI_STATS_LEN; i++) > > - ethtool_sprintf(&p, > > - ice_gstrings_vsi_stats[i].stat_string); > > + ethtool_puts(&p, > > + > > + ice_gstrings_vsi_stats[i].stat_string); > > this would now fit into one line > (perhaps it's the same in other cases, I just checked this one manually) > > > > > if (ice_is_port_repr_netdev(netdev)) > > return; > > @@ -1080,8 +1080,8 @@ __ice_get_strings(struct net_device *netdev, u32 > stringset, u8 *data, > > return; > > > > for (i = 0; i < ICE_PF_STATS_LEN; i++) > > - ethtool_sprintf(&p, > > - ice_gstrings_pf_stats[i].stat_string); > > + ethtool_puts(&p, > > + > > + ice_gstrings_pf_stats[i].stat_string); > > > > for (i = 0; i < ICE_MAX_USER_PRIORITY; i++) { > > ethtool_sprintf(&p, "tx_priority_%u_xon.nic", > > i); @@ -1097,7 +1097,7 @@ __ice_get_strings(struct net_device *netdev, u32 > stringset, u8 *data, > > break; > > case ETH_SS_PRIV_FLAGS: > > for (i = 0; i < ICE_PRIV_FLAG_ARRAY_SIZE; i++) > > - ethtool_sprintf(&p, ice_gstrings_priv_flags[i].name); > > + ethtool_puts(&p, > > + ice_gstrings_priv_flags[i].name); > > break; > > default: > > break; > > diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c > > b/drivers/net/ethernet/intel/igb/igb_ethtool.c > > index 319ed601eaa1..e0a24c7c37f9 100644 > > --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c > > +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c > > @@ -2356,11 +2356,9 @@ static void igb_get_strings(struct net_device > *netdev, u32 stringset, u8 *data) > > break; > > case ETH_SS_STATS: > > for (i = 0; i < IGB_GLOBAL_STATS_LEN; i++) > > - ethtool_sprintf(&p, > > - igb_gstrings_stats[i].stat_string); > > + ethtool_puts(&p, > > + igb_gstrings_stats[i].stat_string); > > for (i = 0; i < IGB_NETDEV_STATS_LEN; i++) > > - ethtool_sprintf(&p, > > - igb_gstrings_net_stats[i].stat_string); > > + ethtool_puts(&p, > > + igb_gstrings_net_stats[i].stat_string); > > for (i = 0; i < adapter->num_tx_queues; i++) { > > ethtool_sprintf(&p, "tx_queue_%u_packets", i); > > ethtool_sprintf(&p, "tx_queue_%u_bytes", i); > > diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c > > b/drivers/net/ethernet/intel/igc/igc_ethtool.c > > index 7ab6dd58e400..2aac55ebdf5a 100644 > > --- a/drivers/net/ethernet/intel/igc/igc_ethtool.c > > +++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c > > @@ -773,10 +773,10 @@ static void igc_ethtool_get_strings(struct > net_device *netdev, u32 stringset, > > break; > > case ETH_SS_STATS: > > for (i = 0; i < IGC_GLOBAL_STATS_LEN; i++) > > - ethtool_sprintf(&p, igc_gstrings_stats[i].stat_string); > > + ethtool_puts(&p, > > + igc_gstrings_stats[i].stat_string); > > for (i = 0; i < IGC_NETDEV_STATS_LEN; i++) > > - ethtool_sprintf(&p, > > - igc_gstrings_net_stats[i].stat_string); > > + ethtool_puts(&p, > > + > > + igc_gstrings_net_stats[i].stat_string); > > for (i = 0; i < adapter->num_tx_queues; i++) { > > ethtool_sprintf(&p, "tx_queue_%u_packets", i); > > ethtool_sprintf(&p, "tx_queue_%u_bytes", i); > > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c > > b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c > > index 0bbad4a5cc2f..dd722b0381e0 100644 > > --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c > > +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c > > @@ -1413,12 +1413,11 @@ static void ixgbe_get_strings(struct net_device > *netdev, u32 stringset, > > switch (stringset) { > > case ETH_SS_TEST: > > for (i = 0; i < IXGBE_TEST_LEN; i++) > > - ethtool_sprintf(&p, ixgbe_gstrings_test[i]); > > + ethtool_puts(&p, ixgbe_gstrings_test[i]); > > break; > > case ETH_SS_STATS: > > for (i = 0; i < IXGBE_GLOBAL_STATS_LEN; i++) > > - ethtool_sprintf(&p, > > - ixgbe_gstrings_stats[i].stat_string); > > + ethtool_puts(&p, > > + ixgbe_gstrings_stats[i].stat_string); > > for (i = 0; i < netdev->num_tx_queues; i++) { > > ethtool_sprintf(&p, "tx_queue_%u_packets", i); > > ethtool_sprintf(&p, "tx_queue_%u_bytes", i); > > diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > index e75cbb287625..1636ce61a3c0 100644 > > --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > @@ -800,7 +800,7 @@ static void nfp_get_self_test_strings(struct > > net_device *netdev, u8 *data) > > > > for (i = 0; i < NFP_TEST_TOTAL_NUM; i++) > > if (nfp_self_test[i].is_supported(netdev)) > > - ethtool_sprintf(&data, nfp_self_test[i].name); > > + ethtool_puts(&data, nfp_self_test[i].name); > > } > > > > static int nfp_get_self_test_count(struct net_device *netdev) @@ > > -852,24 +852,24 @@ static u8 *nfp_vnic_get_sw_stats_strings(struct > net_device *netdev, u8 *data) > > ethtool_sprintf(&data, "rvec_%u_tx_busy", i); > > } > > > > - ethtool_sprintf(&data, "hw_rx_csum_ok"); > > - ethtool_sprintf(&data, "hw_rx_csum_inner_ok"); > > - ethtool_sprintf(&data, "hw_rx_csum_complete"); > > - ethtool_sprintf(&data, "hw_rx_csum_err"); > > - ethtool_sprintf(&data, "rx_replace_buf_alloc_fail"); > > - ethtool_sprintf(&data, "rx_tls_decrypted_packets"); > > - ethtool_sprintf(&data, "hw_tx_csum"); > > - ethtool_sprintf(&data, "hw_tx_inner_csum"); > > - ethtool_sprintf(&data, "tx_gather"); > > - ethtool_sprintf(&data, "tx_lso"); > > - ethtool_sprintf(&data, "tx_tls_encrypted_packets"); > > - ethtool_sprintf(&data, "tx_tls_ooo"); > > - ethtool_sprintf(&data, "tx_tls_drop_no_sync_data"); > > - > > - ethtool_sprintf(&data, "hw_tls_no_space"); > > - ethtool_sprintf(&data, "rx_tls_resync_req_ok"); > > - ethtool_sprintf(&data, "rx_tls_resync_req_ign"); > > - ethtool_sprintf(&data, "rx_tls_resync_sent"); > > + ethtool_puts(&data, "hw_rx_csum_ok"); > > + ethtool_puts(&data, "hw_rx_csum_inner_ok"); > > + ethtool_puts(&data, "hw_rx_csum_complete"); > > + ethtool_puts(&data, "hw_rx_csum_err"); > > + ethtool_puts(&data, "rx_replace_buf_alloc_fail"); > > + ethtool_puts(&data, "rx_tls_decrypted_packets"); > > + ethtool_puts(&data, "hw_tx_csum"); > > + ethtool_puts(&data, "hw_tx_inner_csum"); > > + ethtool_puts(&data, "tx_gather"); > > + ethtool_puts(&data, "tx_lso"); > > + ethtool_puts(&data, "tx_tls_encrypted_packets"); > > + ethtool_puts(&data, "tx_tls_ooo"); > > + ethtool_puts(&data, "tx_tls_drop_no_sync_data"); > > + > > + ethtool_puts(&data, "hw_tls_no_space"); > > + ethtool_puts(&data, "rx_tls_resync_req_ok"); > > + ethtool_puts(&data, "rx_tls_resync_req_ign"); > > + ethtool_puts(&data, "rx_tls_resync_sent"); > > > > return data; > > } > > @@ -943,13 +943,13 @@ nfp_vnic_get_hw_stats_strings(u8 *data, unsigned > int num_vecs, bool repr) > > swap_off = repr * NN_ET_SWITCH_STATS_LEN; > > > > for (i = 0; i < NN_ET_SWITCH_STATS_LEN; i++) > > - ethtool_sprintf(&data, nfp_net_et_stats[i + swap_off].name); > > + ethtool_puts(&data, nfp_net_et_stats[i + > > + swap_off].name); > > > > for (i = NN_ET_SWITCH_STATS_LEN; i < NN_ET_SWITCH_STATS_LEN * 2; > i++) > > - ethtool_sprintf(&data, nfp_net_et_stats[i - swap_off].name); > > + ethtool_puts(&data, nfp_net_et_stats[i - > > + swap_off].name); > > > > for (i = NN_ET_SWITCH_STATS_LEN * 2; i < NN_ET_GLOBAL_STATS_LEN; > i++) > > - ethtool_sprintf(&data, nfp_net_et_stats[i].name); > > + ethtool_puts(&data, nfp_net_et_stats[i].name); > > > > for (i = 0; i < num_vecs; i++) { > > ethtool_sprintf(&data, "rxq_%u_pkts", i); diff --git > > a/drivers/net/ethernet/pensando/ionic/ionic_stats.c > > b/drivers/net/ethernet/pensando/ionic/ionic_stats.c > > index 9859a4432985..1f6022fb7679 100644 > > --- a/drivers/net/ethernet/pensando/ionic/ionic_stats.c > > +++ b/drivers/net/ethernet/pensando/ionic/ionic_stats.c > > @@ -258,10 +258,10 @@ static void ionic_sw_stats_get_strings(struct > ionic_lif *lif, u8 **buf) > > int i, q_num; > > > > for (i = 0; i < IONIC_NUM_LIF_STATS; i++) > > - ethtool_sprintf(buf, ionic_lif_stats_desc[i].name); > > + ethtool_puts(buf, ionic_lif_stats_desc[i].name); > > > > for (i = 0; i < IONIC_NUM_PORT_STATS; i++) > > - ethtool_sprintf(buf, ionic_port_stats_desc[i].name); > > + ethtool_puts(buf, ionic_port_stats_desc[i].name); > > > > for (q_num = 0; q_num < MAX_Q(lif); q_num++) > > ionic_sw_stats_get_tx_strings(lif, buf, q_num); diff > > --git a/drivers/net/hyperv/netvsc_drv.c > > b/drivers/net/hyperv/netvsc_drv.c index 3ba3c8fb28a5..cbd9405fc2f3 > > 100644 > > --- a/drivers/net/hyperv/netvsc_drv.c > > +++ b/drivers/net/hyperv/netvsc_drv.c > > @@ -1582,10 +1582,10 @@ static void netvsc_get_strings(struct net_device > *dev, u32 stringset, u8 *data) > > switch (stringset) { > > case ETH_SS_STATS: > > for (i = 0; i < ARRAY_SIZE(netvsc_stats); i++) > > - ethtool_sprintf(&p, netvsc_stats[i].name); > > + ethtool_puts(&p, netvsc_stats[i].name); > > > > for (i = 0; i < ARRAY_SIZE(vf_stats); i++) > > - ethtool_sprintf(&p, vf_stats[i].name); > > + ethtool_puts(&p, vf_stats[i].name); > > > > for (i = 0; i < nvdev->num_chn; i++) { > > ethtool_sprintf(&p, "tx_queue_%u_packets", i); > > diff --git a/drivers/net/vmxnet3/vmxnet3_ethtool.c > > b/drivers/net/vmxnet3/vmxnet3_ethtool.c > > index 98c22d7d87a2..8f5f202cde39 100644 > > --- a/drivers/net/vmxnet3/vmxnet3_ethtool.c > > +++ b/drivers/net/vmxnet3/vmxnet3_ethtool.c > > @@ -245,20 +245,20 @@ vmxnet3_get_strings(struct net_device *netdev, > > u32 stringset, u8 *buf) > > > > for (j = 0; j < adapter->num_tx_queues; j++) { > > for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_dev_stats); i++) > > - ethtool_sprintf(&buf, vmxnet3_tq_dev_stats[i].desc); > > + ethtool_puts(&buf, > > + vmxnet3_tq_dev_stats[i].desc); > > for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_driver_stats); i++) > > - ethtool_sprintf(&buf, vmxnet3_tq_driver_stats[i].desc); > > + ethtool_puts(&buf, > > + vmxnet3_tq_driver_stats[i].desc); > > } > > > > for (j = 0; j < adapter->num_rx_queues; j++) { > > for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_dev_stats); i++) > > - ethtool_sprintf(&buf, vmxnet3_rq_dev_stats[i].desc); > > + ethtool_puts(&buf, > > + vmxnet3_rq_dev_stats[i].desc); > > for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_driver_stats); i++) > > - ethtool_sprintf(&buf, vmxnet3_rq_driver_stats[i].desc); > > + ethtool_puts(&buf, > > + vmxnet3_rq_driver_stats[i].desc); > > } > > > > for (i = 0; i < ARRAY_SIZE(vmxnet3_global_stats); i++) > > - ethtool_sprintf(&buf, vmxnet3_global_stats[i].desc); > > + ethtool_puts(&buf, vmxnet3_global_stats[i].desc); > > } > > > > netdev_features_t vmxnet3_fix_features(struct net_device *netdev, > > > Thanks for submitting this patch Acked-by: Arthur Kiyanovski _______________________________________________ Intel-wired-lan mailing list Intel-wired-lan@osuosl.org https://lists.osuosl.org/mailman/listinfo/intel-wired-lan From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 452C42D043; Thu, 26 Oct 2023 10:19:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="cUkh9yse" Received: from smtp-fw-52002.amazon.com (smtp-fw-52002.amazon.com [52.119.213.150]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DAB5EC1; Thu, 26 Oct 2023 03:19:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1698315552; x=1729851552; h=from:to:cc:date:message-id:references:in-reply-to: content-transfer-encoding:mime-version:subject; bh=sishIOfug9LDx/UiCb7UCKHDn8owOWZQ2SxuDSjpDHo=; b=cUkh9yseY9L1f4CDMWLxlvIIh9R80D1rhkmNJRKFmS75p4keZRTfonpW 0ztImlPAUcVIfibZqxHzIC13oVqufIWWyji98BulQE/DQ0ppSISrU/XcS 0EB7T9R7PmVT+2PCfv5lHM7LABuX07FoBHR7kSCo+tM4g5VpXig1P0a7y 4=; X-IronPort-AV: E=Sophos;i="6.03,253,1694736000"; d="scan'208";a="591398862" Subject: RE: [PATCH 2/3] treewide: Convert some ethtool_sprintf() to ethtool_puts() Thread-Topic: [PATCH 2/3] treewide: Convert some ethtool_sprintf() to ethtool_puts() Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-pdx-2c-m6i4x-b1c0e1d0.us-west-2.amazon.com) ([10.43.8.6]) by smtp-border-fw-52002.iad7.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Oct 2023 10:19:07 +0000 Received: from smtpout.prod.us-west-2.prod.farcaster.email.amazon.dev (pdx2-ws-svc-p26-lb5-vlan3.pdx.amazon.com [10.39.38.70]) by email-inbound-relay-pdx-2c-m6i4x-b1c0e1d0.us-west-2.amazon.com (Postfix) with ESMTPS id D6D7B80E40; Thu, 26 Oct 2023 10:19:03 +0000 (UTC) Received: from EX19MTAEUB002.ant.amazon.com [10.0.17.79:46197] by smtpin.naws.eu-west-1.prod.farcaster.email.amazon.dev [10.0.36.96:2525] with esmtp (Farcaster) id 85256702-e469-4e16-8dcd-084e4fa9d666; Thu, 26 Oct 2023 10:19:02 +0000 (UTC) X-Farcaster-Flow-ID: 85256702-e469-4e16-8dcd-084e4fa9d666 Received: from EX19D047EUA001.ant.amazon.com (10.252.50.171) by EX19MTAEUB002.ant.amazon.com (10.252.51.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.39; Thu, 26 Oct 2023 10:19:02 +0000 Received: from EX19D022EUA002.ant.amazon.com (10.252.50.201) by EX19D047EUA001.ant.amazon.com (10.252.50.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.39; Thu, 26 Oct 2023 10:19:01 +0000 Received: from EX19D022EUA002.ant.amazon.com ([fe80::7f87:7d63:def0:157d]) by EX19D022EUA002.ant.amazon.com ([fe80::7f87:7d63:def0:157d%3]) with mapi id 15.02.1118.039; Thu, 26 Oct 2023 10:19:01 +0000 From: "Kiyanovski, Arthur" To: Przemek Kitszel , Justin Stitt , "David S. Miller" , "Eric Dumazet" , Jakub Kicinski , Paolo Abeni , "Agroskin, Shay" , "Arinzon, David" , "Dagan, Noam" , "Bshara, Saeed" , Rasesh Mody , Sudarsana Kalluru , "GR-Linux-NIC-Dev@marvell.com" , Dimitris Michailidis , Yisen Zhuang , Salil Mehta , Jesse Brandeburg , Tony Nguyen , Louis Peens , Shannon Nelson , Brett Creeley , "drivers@pensando.io" , "K. Y. Srinivasan" , Haiyang Zhang , "Wei Liu" , Dexuan Cui , Ronak Doshi , VMware PV-Drivers Reviewers , Andy Whitcroft , Joe Perches , "Dwaipayan Ray" , Lukas Bulwahn CC: "linux-kernel@vger.kernel.org" , "netdev@vger.kernel.org" , Nick Desaulniers , Nathan Chancellor , Kees Cook , "intel-wired-lan@lists.osuosl.org" , "oss-drivers@corigine.com" , "linux-hyperv@vger.kernel.org" Thread-Index: AQHaB5y2ypM5j5ENE0OQVi1jMBjB87BbzPmAgAANCMA= Date: Thu, 26 Oct 2023 10:18:32 +0000 Deferred-Delivery: Thu, 26 Oct 2023 10:17:40 +0000 Message-ID: References: <20231025-ethtool_puts_impl-v1-0-6a53a93d3b72@google.com> <20231025-ethtool_puts_impl-v1-2-6a53a93d3b72@google.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.85.143.173] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-hyperv@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Precedence: Bulk PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBQcnplbWVrIEtpdHN6ZWwgPHBy emVteXNsYXcua2l0c3plbEBpbnRlbC5jb20+DQo+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDI2 LCAyMDIzIDEyOjI0IFBNDQo+IFRvOiBKdXN0aW4gU3RpdHQgPGp1c3RpbnN0aXR0QGdvb2dsZS5j b20+OyBEYXZpZCBTLiBNaWxsZXINCj4gPGRhdmVtQGRhdmVtbG9mdC5uZXQ+OyBFcmljIER1bWF6 ZXQgPGVkdW1hemV0QGdvb2dsZS5jb20+OyBKYWt1Yg0KPiBLaWNpbnNraSA8a3ViYUBrZXJuZWwu b3JnPjsgUGFvbG8gQWJlbmkgPHBhYmVuaUByZWRoYXQuY29tPjsgQWdyb3NraW4sIFNoYXkNCj4g PHNoYXlhZ3JAYW1hem9uLmNvbT47IEtpeWFub3Zza2ksIEFydGh1ciA8YWtpeWFub0BhbWF6b24u Y29tPjsgQXJpbnpvbiwNCj4gRGF2aWQgPGRhcmluem9uQGFtYXpvbi5jb20+OyBEYWdhbiwgTm9h bSA8bmRhZ2FuQGFtYXpvbi5jb20+Ow0KPiBCc2hhcmEsIFNhZWVkIDxzYWVlZGJAYW1hem9uLmNv bT47IFJhc2VzaCBNb2R5IDxybW9keUBtYXJ2ZWxsLmNvbT47DQo+IFN1ZGFyc2FuYSBLYWxsdXJ1 IDxza2FsbHVydUBtYXJ2ZWxsLmNvbT47IEdSLUxpbnV4LU5JQy1EZXZAbWFydmVsbC5jb207DQo+ IERpbWl0cmlzIE1pY2hhaWxpZGlzIDxkbWljaGFpbEBmdW5naWJsZS5jb20+OyBZaXNlbiBaaHVh bmcNCj4gPHlpc2VuLnpodWFuZ0BodWF3ZWkuY29tPjsgU2FsaWwgTWVodGEgPHNhbGlsLm1laHRh QGh1YXdlaS5jb20+OyBKZXNzZQ0KPiBCcmFuZGVidXJnIDxqZXNzZS5icmFuZGVidXJnQGludGVs LmNvbT47IFRvbnkgTmd1eWVuDQo+IDxhbnRob255Lmwubmd1eWVuQGludGVsLmNvbT47IExvdWlz IFBlZW5zIDxsb3Vpcy5wZWVuc0Bjb3JpZ2luZS5jb20+Ow0KPiBTaGFubm9uIE5lbHNvbiA8c2hh bm5vbi5uZWxzb25AYW1kLmNvbT47IEJyZXR0IENyZWVsZXkNCj4gPGJyZXR0LmNyZWVsZXlAYW1k LmNvbT47IGRyaXZlcnNAcGVuc2FuZG8uaW87IEsuIFkuIFNyaW5pdmFzYW4NCj4gPGt5c0BtaWNy b3NvZnQuY29tPjsgSGFpeWFuZyBaaGFuZyA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT47IFdlaSBM aXUNCj4gPHdlaS5saXVAa2VybmVsLm9yZz47IERleHVhbiBDdWkgPGRlY3VpQG1pY3Jvc29mdC5j b20+OyBSb25hayBEb3NoaQ0KPiA8ZG9zaGlyQHZtd2FyZS5jb20+OyBWTXdhcmUgUFYtRHJpdmVy cyBSZXZpZXdlcnMgPHB2LQ0KPiBkcml2ZXJzQHZtd2FyZS5jb20+OyBBbmR5IFdoaXRjcm9mdCA8 YXB3QGNhbm9uaWNhbC5jb20+OyBKb2UgUGVyY2hlcw0KPiA8am9lQHBlcmNoZXMuY29tPjsgRHdh aXBheWFuIFJheSA8ZHdhaXBheWFucmF5MUBnbWFpbC5jb20+OyBMdWthcw0KPiBCdWx3YWhuIDxs dWthcy5idWx3YWhuQGdtYWlsLmNvbT4NCj4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5v cmc7IG5ldGRldkB2Z2VyLmtlcm5lbC5vcmc7IE5pY2sgRGVzYXVsbmllcnMNCj4gPG5kZXNhdWxu aWVyc0Bnb29nbGUuY29tPjsgTmF0aGFuIENoYW5jZWxsb3IgPG5hdGhhbkBrZXJuZWwub3JnPjsg S2Vlcw0KPiBDb29rIDxrZWVzY29va0BjaHJvbWl1bS5vcmc+OyBpbnRlbC13aXJlZC1sYW5AbGlz dHMub3N1b3NsLm9yZzsgb3NzLQ0KPiBkcml2ZXJzQGNvcmlnaW5lLmNvbTsgbGludXgtaHlwZXJ2 QHZnZXIua2VybmVsLm9yZw0KPiBTdWJqZWN0OiBSRTogW0VYVEVSTkFMXSBbUEFUQ0ggMi8zXSB0 cmVld2lkZTogQ29udmVydCBzb21lIGV0aHRvb2xfc3ByaW50ZigpDQo+IHRvIGV0aHRvb2xfcHV0 cygpDQo+IA0KPiBDQVVUSU9OOiBUaGlzIGVtYWlsIG9yaWdpbmF0ZWQgZnJvbSBvdXRzaWRlIG9m IHRoZSBvcmdhbml6YXRpb24uIERvIG5vdCBjbGljaw0KPiBsaW5rcyBvciBvcGVuIGF0dGFjaG1l bnRzIHVubGVzcyB5b3UgY2FuIGNvbmZpcm0gdGhlIHNlbmRlciBhbmQga25vdyB0aGUNCj4gY29u dGVudCBpcyBzYWZlLg0KPiANCj4gDQo+IA0KPiBPbiAxMC8yNi8yMyAwMTo0MCwgSnVzdGluIFN0 aXR0IHdyb3RlOg0KPiA+IFRoaXMgcGF0Y2ggY29udmVydHMgc29tZSBiYXNpYyBjYXNlcyBvZiBl dGh0b29sX3NwcmludGYoKSB0bw0KPiA+IGV0aHRvb2xfcHV0cygpLg0KPiA+DQo+ID4gVGhlIGNv bnZlcnNpb25zIGFyZSB1c2VkIGluIGNhc2VzIHdoZXJlIGV0aHRvb2xfc3ByaW50ZigpIHdhcyBi ZWluZw0KPiA+IHVzZWQgd2l0aCBqdXN0IHR3byBhcmd1bWVudHM6DQo+ID4gfCAgICAgICBldGh0 b29sX3NwcmludGYoJmRhdGEsIGJ1ZmZlcltpXS5uYW1lKTsNCj4gPiBvciB3aGVuIGl0J3MgdXNl ZCB3aXRoIGZvcm1hdCBzdHJpbmc6ICIlcyINCj4gPiB8ICAgICAgIGV0aHRvb2xfc3ByaW50Zigm ZGF0YSwgIiVzIiwgYnVmZmVyW2ldLm5hbWUpOw0KPiA+IHdoaWNoIGJvdGggbm93IGJlY29tZToN Cj4gPiB8ICAgICAgIGV0aHRvb2xfcHV0cygmZGF0YSwgYnVmZmVyW2ldLm5hbWUpOw0KPiA+DQo+ ID4gVGhlcmUgYXJlIHNvbWUgb3V0c3RhbmRpbmcgcGF0Y2hlcyBbMV0gdGhhdCBJJ3ZlIHNlbnQg dXNpbmcgcGxhaW4gIiVzIg0KPiA+IHdpdGggZXRodG9vbF9zcHJpbnRmKCkgdGhhdCBzaG91bGQg YmUgZXRodG9vbF9wdXRzKCkgbm93LiBTb21lIGhhdmUNCj4gPiBiZWVuIHBpY2tlZCB1cCBhcy1p cyBidXQgSSB3aWxsIHNlbmQgbmV3IHZlcnNpb25zIGZvciB0aGUgb3RoZXJzLg0KPiA+DQo+ID4g WzFdOg0KPiA+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2FsbC8/cT1kZmIlM0FldGh0b29sX3Nw cmludGYrQU5EK2YlM0FqdXN0aW5zdGkNCj4gPiB0dA0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTog SnVzdGluIFN0aXR0IDxqdXN0aW5zdGl0dEBnb29nbGUuY29tPg0KPiA+IC0tLQ0KPiA+ICAgZHJp dmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL2VuYS9lbmFfZXRodG9vbC5jICAgICAgfCAgNCArLQ0K PiA+ICAgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvY2FkZS9ibmEvYm5hZF9ldGh0b29sLmMgICAg fCAgMiArLQ0KPiA+ICAgLi4uL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX2V0 aHRvb2wuYyAgfCAgOCArLS0NCj4gPiAgIGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9o bnMvaG5zX2RzYWZfZ21hYy5jIHwgIDIgKy0NCj4gPiAgIC4uLi9uZXQvZXRoZXJuZXQvaGlzaWxp Y29uL2hucy9obnNfZHNhZl94Z21hYy5jICAgIHwgIDIgKy0NCj4gPiAgIGRyaXZlcnMvbmV0L2V0 aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2V0aHRvb2wuYyAgIHwgNjYgKysrKysrKysrKystLS0t LS0tLS0tLQ0KPiA+ICAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRv b2wuYyAgICAgfCAgNCArLQ0KPiA+ICAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2lj ZV9ldGh0b29sLmMgICAgICAgfCAxMCArKy0tDQo+ID4gICBkcml2ZXJzL25ldC9ldGhlcm5ldC9p bnRlbC9pZ2IvaWdiX2V0aHRvb2wuYyAgICAgICB8ICA2ICstDQo+ID4gICBkcml2ZXJzL25ldC9l dGhlcm5ldC9pbnRlbC9pZ2MvaWdjX2V0aHRvb2wuYyAgICAgICB8ICA2ICstDQo+ID4gICBkcml2 ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmMgICB8ICA1ICstDQo+ ID4gICAuLi4vbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmMgICB8 IDQ0ICsrKysrKystLS0tLS0tLQ0KPiA+ICAgZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8v aW9uaWMvaW9uaWNfc3RhdHMuYyAgfCAgNCArLQ0KPiA+ICAgZHJpdmVycy9uZXQvaHlwZXJ2L25l dHZzY19kcnYuYyAgICAgICAgICAgICAgICAgICAgfCAgNCArLQ0KPiA+ICAgZHJpdmVycy9uZXQv dm14bmV0My92bXhuZXQzX2V0aHRvb2wuYyAgICAgICAgICAgICAgfCAxMCArKy0tDQo+ID4gICAx NSBmaWxlcyBjaGFuZ2VkLCA4NyBpbnNlcnRpb25zKCspLCA5MCBkZWxldGlvbnMoLSkNCj4gPg0K PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vZW5hL2VuYV9ldGh0 b29sLmMNCj4gPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9lbmEvZW5hX2V0aHRvb2wu Yw0KPiA+IGluZGV4IGQ2NzFkZjRiNzZiYy4uZTNlZjA4MWFhNDJiIDEwMDY0NA0KPiA+IC0tLSBh L2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9lbmEvZW5hX2V0aHRvb2wuYw0KPiA+ICsrKyBi L2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9lbmEvZW5hX2V0aHRvb2wuYw0KPiA+IEBAIC0y OTksMTMgKzI5OSwxMyBAQCBzdGF0aWMgdm9pZCBlbmFfZ2V0X3N0cmluZ3Moc3RydWN0IGVuYV9h ZGFwdGVyDQo+ID4gKmFkYXB0ZXIsDQo+ID4NCj4gPiAgICAgICBmb3IgKGkgPSAwOyBpIDwgRU5B X1NUQVRTX0FSUkFZX0dMT0JBTDsgaSsrKSB7DQo+ID4gICAgICAgICAgICAgICBlbmFfc3RhdHMg PSAmZW5hX3N0YXRzX2dsb2JhbF9zdHJpbmdzW2ldOw0KPiA+IC0gICAgICAgICAgICAgZXRodG9v bF9zcHJpbnRmKCZkYXRhLCBlbmFfc3RhdHMtPm5hbWUpOw0KPiA+ICsgICAgICAgICAgICAgZXRo dG9vbF9wdXRzKCZkYXRhLCBlbmFfc3RhdHMtPm5hbWUpOw0KPiA+ICAgICAgIH0NCj4gPg0KPiA+ ICAgICAgIGlmIChlbmlfc3RhdHNfbmVlZGVkKSB7DQo+ID4gICAgICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgRU5BX1NUQVRTX0FSUkFZX0VOSShhZGFwdGVyKTsgaSsrKSB7DQo+ID4gICAgICAg ICAgICAgICAgICAgICAgIGVuYV9zdGF0cyA9ICZlbmFfc3RhdHNfZW5pX3N0cmluZ3NbaV07DQo+ ID4gLSAgICAgICAgICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmZGF0YSwgZW5hX3N0YXRz LT5uYW1lKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZXRodG9vbF9wdXRzKCZkYXRhLCBl bmFfc3RhdHMtPm5hbWUpOw0KPiA+ICAgICAgICAgICAgICAgfQ0KPiA+ICAgICAgIH0NCj4gPg0K PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkX2V0 aHRvb2wuYw0KPiA+IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvY2FkZS9ibmEvYm5hZF9ldGh0 b29sLmMNCj4gPiBpbmRleCBkZjEwZWRmZjU2MDMuLmQxYWQ2YzlmODE0MCAxMDA2NDQNCj4gPiAt LS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkX2V0aHRvb2wuYw0KPiA+ ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2NhZGUvYm5hL2JuYWRfZXRodG9vbC5jDQo+ ID4gQEAgLTYwOCw3ICs2MDgsNyBAQCBibmFkX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNl ICpuZXRkZXYsIHUzMg0KPiA+IHN0cmluZ3NldCwgdTggKnN0cmluZykNCj4gPg0KPiA+ICAgICAg IGZvciAoaSA9IDA7IGkgPCBCTkFEX0VUSFRPT0xfU1RBVFNfTlVNOyBpKyspIHsNCj4gPiAgICAg ICAgICAgICAgIEJVR19PTighKHN0cmxlbihibmFkX25ldF9zdGF0c19zdHJpbmdzW2ldKSA8IEVU SF9HU1RSSU5HX0xFTikpOw0KPiA+IC0gICAgICAgICAgICAgZXRodG9vbF9zcHJpbnRmKCZzdHJp bmcsIGJuYWRfbmV0X3N0YXRzX3N0cmluZ3NbaV0pOw0KPiA+ICsgICAgICAgICAgICAgZXRodG9v bF9wdXRzKCZzdHJpbmcsIGJuYWRfbmV0X3N0YXRzX3N0cmluZ3NbaV0pOw0KPiA+ICAgICAgIH0N Cj4gPg0KPiA+ICAgICAgIGJtYXAgPSBibmFfdHhfcmlkX21hc2soJmJuYWQtPmJuYSk7IGRpZmYg LS1naXQNCj4gPiBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhf ZXRodG9vbC5jDQo+ID4gYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVu ZXRoX2V0aHRvb2wuYw0KPiA+IGluZGV4IDMxYWExODVmNGQxNy4uMDkxYzkzYmQ3NTg3IDEwMDY0 NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhf ZXRodG9vbC5jDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRo L2Z1bmV0aF9ldGh0b29sLmMNCj4gPiBAQCAtNjU1LDcgKzY1NSw3IEBAIHN0YXRpYyB2b2lkIGZ1 bl9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LA0KPiB1MzIgc3NldCwgdTgg KmRhdGEpDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGkpOw0KPiA+ICAgICAgICAgICAgICAgfQ0KPiA+ICAgICAgICAgICAgICAgZm9yIChqID0gMDsg aiA8IEFSUkFZX1NJWkUodHhxX3N0YXRfbmFtZXMpOyBqKyspDQo+ID4gLSAgICAgICAgICAgICAg ICAgICAgIGV0aHRvb2xfc3ByaW50ZigmcCwgdHhxX3N0YXRfbmFtZXNbal0pOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBldGh0b29sX3B1dHMoJnAsIHR4cV9zdGF0X25hbWVzW2pdKTsNCj4g Pg0KPiA+ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZwLT5udW1feGRwcXM7IGkrKykg ew0KPiA+ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRSh4 ZHBxX3N0YXRfbmFtZXMpOw0KPiA+IGorKykgQEAgLTY2Myw3ICs2NjMsNyBAQCBzdGF0aWMgdm9p ZCBmdW5fZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UNCj4gKm5ldGRldiwgdTMyIHNzZXQs IHU4ICpkYXRhKQ0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB4ZHBxX3N0YXRfbmFtZXNbal0sIGkpOw0KPiA+ICAgICAgICAgICAgICAgfQ0KPiA+ICAg ICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoeGRwcV9zdGF0X25hbWVzKTsg aisrKQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICBldGh0b29sX3NwcmludGYoJnAsIHhkcHFf c3RhdF9uYW1lc1tqXSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGV0aHRvb2xfcHV0cygm cCwgeGRwcV9zdGF0X25hbWVzW2pdKTsNCj4gPg0KPiA+ICAgICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IG5ldGRldi0+cmVhbF9udW1fcnhfcXVldWVzOyBpKyspIHsNCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocnhxX3N0YXRfbmFtZXMpOyBq KyspDQo+ID4gQEAgLTY3MSwxMCArNjcxLDEwIEBAIHN0YXRpYyB2b2lkIGZ1bl9nZXRfc3RyaW5n cyhzdHJ1Y3QgbmV0X2RldmljZQ0KPiAqbmV0ZGV2LCB1MzIgc3NldCwgdTggKmRhdGEpDQo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkpOw0KPiA+ICAg ICAgICAgICAgICAgfQ0KPiA+ICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJ WkUocnhxX3N0YXRfbmFtZXMpOyBqKyspDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgIGV0aHRv b2xfc3ByaW50ZigmcCwgcnhxX3N0YXRfbmFtZXNbal0pOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICBldGh0b29sX3B1dHMoJnAsIHJ4cV9zdGF0X25hbWVzW2pdKTsNCj4gPg0KPiA+ICAgICAg ICAgICAgICAgZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUodGxzX3N0YXRfbmFtZXMpOyBqKysp DQo+ID4gLSAgICAgICAgICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmcCwgdGxzX3N0YXRf bmFtZXNbal0pOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBldGh0b29sX3B1dHMoJnAsIHRs c19zdGF0X25hbWVzW2pdKTsNCj4gPiAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICAgICAgIGRl ZmF1bHQ6DQo+ID4gICAgICAgICAgICAgICBicmVhazsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9nbWFjLmMNCj4gPiBiL2RyaXZl cnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfZ21hYy5jDQo+ID4gaW5kZXgg OGYzOTFlMmFkY2MwLi5iZGI3YWZhYWJkZDAgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQv ZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9nbWFjLmMNCj4gPiArKysgYi9kcml2ZXJz L25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX2dtYWMuYw0KPiA+IEBAIC02Nzgs NyArNjc4LDcgQEAgc3RhdGljIHZvaWQgaG5zX2dtYWNfZ2V0X3N0cmluZ3ModTMyIHN0cmluZ3Nl dCwgdTgNCj4gKmRhdGEpDQo+ID4gICAgICAgICAgICAgICByZXR1cm47DQo+ID4NCj4gPiAgICAg ICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShnX2dtYWNfc3RhdHNfc3RyaW5nKTsgaSsrKQ0K PiA+IC0gICAgICAgICAgICAgZXRodG9vbF9zcHJpbnRmKCZidWZmLCBnX2dtYWNfc3RhdHNfc3Ry aW5nW2ldLmRlc2MpOw0KPiA+ICsgICAgICAgICAgICAgZXRodG9vbF9wdXRzKCZidWZmLCBnX2dt YWNfc3RhdHNfc3RyaW5nW2ldLmRlc2MpOw0KPiA+ICAgfQ0KPiA+DQo+ID4gICBzdGF0aWMgaW50 IGhuc19nbWFjX2dldF9zc2V0X2NvdW50KGludCBzdHJpbmdzZXQpIGRpZmYgLS1naXQNCj4gPiBh L2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfeGdtYWMuYw0KPiA+ IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl94Z21hYy5jDQo+ ID4gaW5kZXggZmMyNmZmYWFlNjIwLi5jNTg4MzNlYjQ4MzAgMTAwNjQ0DQo+ID4gLS0tIGEvZHJp dmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl94Z21hYy5jDQo+ID4gKysr IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl94Z21hYy5jDQo+ ID4gQEAgLTc1Miw3ICs3NTIsNyBAQCBzdGF0aWMgdm9pZCBobnNfeGdtYWNfZ2V0X3N0cmluZ3Mo dTMyIHN0cmluZ3NldCwgdTgNCj4gKmRhdGEpDQo+ID4gICAgICAgICAgICAgICByZXR1cm47DQo+ ID4NCj4gPiAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShnX3hnbWFjX3N0YXRzX3N0 cmluZyk7IGkrKykNCj4gPiAtICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmYnVmZiwgZ194 Z21hY19zdGF0c19zdHJpbmdbaV0uZGVzYyk7DQo+ID4gKyAgICAgICAgICAgICBldGh0b29sX3B1 dHMoJmJ1ZmYsIGdfeGdtYWNfc3RhdHNfc3RyaW5nW2ldLmRlc2MpOw0KPiA+ICAgfQ0KPiA+DQo+ ID4gICAvKioNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29u L2hucy9obnNfZXRodG9vbC5jDQo+ID4gYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24v aG5zL2huc19ldGh0b29sLmMNCj4gPiBpbmRleCBiNTRmMzcwNmZiOTcuLmI0MDQxNTkxMGU1NyAx MDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19l dGh0b29sLmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2hu c19ldGh0b29sLmMNCj4gPiBAQCAtOTEyLDQyICs5MTIsNDIgQEAgc3RhdGljIHZvaWQgaG5zX2dl dF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlDQo+ID4gKm5ldGRldiwgdTMyIHN0cmluZ3NldCwg dTggKmRhdGEpDQo+ID4NCj4gPiAgICAgICBpZiAoc3RyaW5nc2V0ID09IEVUSF9TU19URVNUKSB7 DQo+ID4gICAgICAgICAgICAgICBpZiAocHJpdi0+YWVfaGFuZGxlLT5waHlfaWYgIT0gUEhZX0lO VEVSRkFDRV9NT0RFX1hHTUlJKQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICBldGh0b29sX3Nw cmludGYoJmJ1ZmYsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo bnNfbmljX3Rlc3Rfc3Ryc1tNQUNfSU5URVJOQUxMT09QX01BQ10pOw0KPiA+IC0gICAgICAgICAg ICAgZXRodG9vbF9zcHJpbnRmKCZidWZmLA0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGhuc19uaWNfdGVzdF9zdHJzW01BQ19JTlRFUk5BTExPT1BfU0VSREVTXSk7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGV0aHRvb2xfcHV0cygmYnVmZiwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhuc19uaWNfdGVzdF9zdHJzW01BQ19JTlRFUk5BTExPT1Bf TUFDXSk7DQo+ID4gKyAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsDQo+ID4gKw0KPiA+ ICsgaG5zX25pY190ZXN0X3N0cnNbTUFDX0lOVEVSTkFMTE9PUF9TRVJERVNdKTsNCj4gPiAgICAg ICAgICAgICAgIGlmICgobmV0ZGV2LT5waHlkZXYpICYmICghbmV0ZGV2LT5waHlkZXYtPmlzX2M0 NSkpDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmYnVmZiwNCj4g PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhuc19uaWNfdGVzdF9zdHJz W01BQ19JTlRFUk5BTExPT1BfUEhZXSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGV0aHRv b2xfcHV0cygmYnVmZiwNCj4gPiArDQo+ID4gKyBobnNfbmljX3Rlc3Rfc3Ryc1tNQUNfSU5URVJO QUxMT09QX1BIWV0pOw0KPiA+DQo+ID4gICAgICAgfSBlbHNlIHsNCj4gPiAtICAgICAgICAgICAg IGV0aHRvb2xfc3ByaW50ZigmYnVmZiwgInJ4X3BhY2tldHMiKTsNCj4gPiAtICAgICAgICAgICAg IGV0aHRvb2xfc3ByaW50ZigmYnVmZiwgInR4X3BhY2tldHMiKTsNCj4gPiAtICAgICAgICAgICAg IGV0aHRvb2xfc3ByaW50ZigmYnVmZiwgInJ4X2J5dGVzIik7DQo+ID4gLSAgICAgICAgICAgICBl dGh0b29sX3NwcmludGYoJmJ1ZmYsICJ0eF9ieXRlcyIpOw0KPiA+IC0gICAgICAgICAgICAgZXRo dG9vbF9zcHJpbnRmKCZidWZmLCAicnhfZXJyb3JzIik7DQo+ID4gLSAgICAgICAgICAgICBldGh0 b29sX3NwcmludGYoJmJ1ZmYsICJ0eF9lcnJvcnMiKTsNCj4gPiAtICAgICAgICAgICAgIGV0aHRv b2xfc3ByaW50ZigmYnVmZiwgInJ4X2Ryb3BwZWQiKTsNCj4gPiAtICAgICAgICAgICAgIGV0aHRv b2xfc3ByaW50ZigmYnVmZiwgInR4X2Ryb3BwZWQiKTsNCj4gPiAtICAgICAgICAgICAgIGV0aHRv b2xfc3ByaW50ZigmYnVmZiwgIm11bHRpY2FzdCIpOw0KPiA+IC0gICAgICAgICAgICAgZXRodG9v bF9zcHJpbnRmKCZidWZmLCAiY29sbGlzaW9ucyIpOw0KPiA+IC0gICAgICAgICAgICAgZXRodG9v bF9zcHJpbnRmKCZidWZmLCAicnhfb3Zlcl9lcnJvcnMiKTsNCj4gPiAtICAgICAgICAgICAgIGV0 aHRvb2xfc3ByaW50ZigmYnVmZiwgInJ4X2NyY19lcnJvcnMiKTsNCj4gPiAtICAgICAgICAgICAg IGV0aHRvb2xfc3ByaW50ZigmYnVmZiwgInJ4X2ZyYW1lX2Vycm9ycyIpOw0KPiA+IC0gICAgICAg ICAgICAgZXRodG9vbF9zcHJpbnRmKCZidWZmLCAicnhfZmlmb19lcnJvcnMiKTsNCj4gPiAtICAg ICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmYnVmZiwgInJ4X21pc3NlZF9lcnJvcnMiKTsNCj4g PiAtICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmYnVmZiwgInR4X2Fib3J0ZWRfZXJyb3Jz Iik7DQo+ID4gLSAgICAgICAgICAgICBldGh0b29sX3NwcmludGYoJmJ1ZmYsICJ0eF9jYXJyaWVy X2Vycm9ycyIpOw0KPiA+IC0gICAgICAgICAgICAgZXRodG9vbF9zcHJpbnRmKCZidWZmLCAidHhf Zmlmb19lcnJvcnMiKTsNCj4gPiAtICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmYnVmZiwg InR4X2hlYXJ0YmVhdF9lcnJvcnMiKTsNCj4gPiAtICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50 ZigmYnVmZiwgInJ4X2xlbmd0aF9lcnJvcnMiKTsNCj4gPiAtICAgICAgICAgICAgIGV0aHRvb2xf c3ByaW50ZigmYnVmZiwgInR4X3dpbmRvd19lcnJvcnMiKTsNCj4gPiAtICAgICAgICAgICAgIGV0 aHRvb2xfc3ByaW50ZigmYnVmZiwgInJ4X2NvbXByZXNzZWQiKTsNCj4gPiAtICAgICAgICAgICAg IGV0aHRvb2xfc3ByaW50ZigmYnVmZiwgInR4X2NvbXByZXNzZWQiKTsNCj4gPiAtICAgICAgICAg ICAgIGV0aHRvb2xfc3ByaW50ZigmYnVmZiwgIm5ldGRldl9yeF9kcm9wcGVkIik7DQo+ID4gLSAg ICAgICAgICAgICBldGh0b29sX3NwcmludGYoJmJ1ZmYsICJuZXRkZXZfdHhfZHJvcHBlZCIpOw0K PiA+IC0NCj4gPiAtICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmYnVmZiwgIm5ldGRldl90 eF90aW1lb3V0Iik7DQo+ID4gKyAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsICJyeF9w YWNrZXRzIik7DQo+ID4gKyAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsICJ0eF9wYWNr ZXRzIik7DQo+ID4gKyAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsICJyeF9ieXRlcyIp Ow0KPiA+ICsgICAgICAgICAgICAgZXRodG9vbF9wdXRzKCZidWZmLCAidHhfYnl0ZXMiKTsNCj4g PiArICAgICAgICAgICAgIGV0aHRvb2xfcHV0cygmYnVmZiwgInJ4X2Vycm9ycyIpOw0KPiA+ICsg ICAgICAgICAgICAgZXRodG9vbF9wdXRzKCZidWZmLCAidHhfZXJyb3JzIik7DQo+ID4gKyAgICAg ICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsICJyeF9kcm9wcGVkIik7DQo+ID4gKyAgICAgICAg ICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsICJ0eF9kcm9wcGVkIik7DQo+ID4gKyAgICAgICAgICAg ICBldGh0b29sX3B1dHMoJmJ1ZmYsICJtdWx0aWNhc3QiKTsNCj4gPiArICAgICAgICAgICAgIGV0 aHRvb2xfcHV0cygmYnVmZiwgImNvbGxpc2lvbnMiKTsNCj4gPiArICAgICAgICAgICAgIGV0aHRv b2xfcHV0cygmYnVmZiwgInJ4X292ZXJfZXJyb3JzIik7DQo+ID4gKyAgICAgICAgICAgICBldGh0 b29sX3B1dHMoJmJ1ZmYsICJyeF9jcmNfZXJyb3JzIik7DQo+ID4gKyAgICAgICAgICAgICBldGh0 b29sX3B1dHMoJmJ1ZmYsICJyeF9mcmFtZV9lcnJvcnMiKTsNCj4gPiArICAgICAgICAgICAgIGV0 aHRvb2xfcHV0cygmYnVmZiwgInJ4X2ZpZm9fZXJyb3JzIik7DQo+ID4gKyAgICAgICAgICAgICBl dGh0b29sX3B1dHMoJmJ1ZmYsICJyeF9taXNzZWRfZXJyb3JzIik7DQo+ID4gKyAgICAgICAgICAg ICBldGh0b29sX3B1dHMoJmJ1ZmYsICJ0eF9hYm9ydGVkX2Vycm9ycyIpOw0KPiA+ICsgICAgICAg ICAgICAgZXRodG9vbF9wdXRzKCZidWZmLCAidHhfY2Fycmllcl9lcnJvcnMiKTsNCj4gPiArICAg ICAgICAgICAgIGV0aHRvb2xfcHV0cygmYnVmZiwgInR4X2ZpZm9fZXJyb3JzIik7DQo+ID4gKyAg ICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsICJ0eF9oZWFydGJlYXRfZXJyb3JzIik7DQo+ ID4gKyAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsICJyeF9sZW5ndGhfZXJyb3JzIik7 DQo+ID4gKyAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsICJ0eF93aW5kb3dfZXJyb3Jz Iik7DQo+ID4gKyAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsICJyeF9jb21wcmVzc2Vk Iik7DQo+ID4gKyAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsICJ0eF9jb21wcmVzc2Vk Iik7DQo+ID4gKyAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYsICJuZXRkZXZfcnhfZHJv cHBlZCIpOw0KPiA+ICsgICAgICAgICAgICAgZXRodG9vbF9wdXRzKCZidWZmLCAibmV0ZGV2X3R4 X2Ryb3BwZWQiKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZmYs ICJuZXRkZXZfdHhfdGltZW91dCIpOw0KPiA+DQo+ID4gICAgICAgICAgICAgICBoLT5kZXYtPm9w cy0+Z2V0X3N0cmluZ3MoaCwgc3RyaW5nc2V0LCBidWZmKTsNCj4gPiAgICAgICB9DQo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMN Cj4gPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMNCj4g PiBpbmRleCBiZDEzMjFiZjdlMjYuLjI2NDFiMmE0ZmNiMCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2 ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jDQo+ID4gKysrIGIvZHJp dmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYw0KPiA+IEBAIC0yNTEy LDExICsyNTEyLDExIEBAIHN0YXRpYyB2b2lkIGk0MGVfZ2V0X3ByaXZfZmxhZ19zdHJpbmdzKHN0 cnVjdA0KPiBuZXRfZGV2aWNlICpuZXRkZXYsIHU4ICpkYXRhKQ0KPiA+ICAgICAgIHU4ICpwID0g ZGF0YTsNCj4gPg0KPiA+ICAgICAgIGZvciAoaSA9IDA7IGkgPCBJNDBFX1BSSVZfRkxBR1NfU1RS X0xFTjsgaSsrKQ0KPiA+IC0gICAgICAgICAgICAgZXRodG9vbF9zcHJpbnRmKCZwLCBpNDBlX2dz dHJpbmdzX3ByaXZfZmxhZ3NbaV0uZmxhZ19zdHJpbmcpOw0KPiA+ICsgICAgICAgICAgICAgZXRo dG9vbF9wdXRzKCZwLA0KPiA+ICsgaTQwZV9nc3RyaW5nc19wcml2X2ZsYWdzW2ldLmZsYWdfc3Ry aW5nKTsNCj4gPiAgICAgICBpZiAocGYtPmh3LnBmX2lkICE9IDApDQo+ID4gICAgICAgICAgICAg ICByZXR1cm47DQo+ID4gICAgICAgZm9yIChpID0gMDsgaSA8IEk0MEVfR0xfUFJJVl9GTEFHU19T VFJfTEVOOyBpKyspDQo+ID4gLSAgICAgICAgICAgICBldGh0b29sX3NwcmludGYoJnAsIGk0MGVf Z2xfZ3N0cmluZ3NfcHJpdl9mbGFnc1tpXS5mbGFnX3N0cmluZyk7DQo+ID4gKyAgICAgICAgICAg ICBldGh0b29sX3B1dHMoJnAsDQo+ID4gKyBpNDBlX2dsX2dzdHJpbmdzX3ByaXZfZmxhZ3NbaV0u ZmxhZ19zdHJpbmcpOw0KPiA+ICAgfQ0KPiA+DQo+ID4gICBzdGF0aWMgdm9pZCBpNDBlX2dldF9z dHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMg0KPiA+IHN0cmluZ3NldCwgZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jDQo+ ID4gYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYw0KPiA+IGlu ZGV4IGFkNGQ0NzAyMTI5Zi4uNzg3MWJiYTRiMDk5IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jDQo+ID4gKysrIGIvZHJpdmVycy9u ZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMNCj4gPiBAQCAtMTA2MCw4ICsxMDYw LDggQEAgX19pY2VfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyDQo+ IHN0cmluZ3NldCwgdTggKmRhdGEsDQo+ID4gICAgICAgc3dpdGNoIChzdHJpbmdzZXQpIHsNCj4g PiAgICAgICBjYXNlIEVUSF9TU19TVEFUUzoNCj4gPiAgICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBJQ0VfVlNJX1NUQVRTX0xFTjsgaSsrKQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICBl dGh0b29sX3NwcmludGYoJnAsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpY2VfZ3N0cmluZ3NfdnNpX3N0YXRzW2ldLnN0YXRfc3RyaW5nKTsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgZXRodG9vbF9wdXRzKCZwLA0KPiA+ICsNCj4gPiArIGljZV9nc3RyaW5n c192c2lfc3RhdHNbaV0uc3RhdF9zdHJpbmcpOw0KPiANCj4gdGhpcyB3b3VsZCBub3cgZml0IGlu dG8gb25lIGxpbmUNCj4gKHBlcmhhcHMgaXQncyB0aGUgc2FtZSBpbiBvdGhlciBjYXNlcywgSSBq dXN0IGNoZWNrZWQgdGhpcyBvbmUgbWFudWFsbHkpDQo+IA0KPiA+DQo+ID4gICAgICAgICAgICAg ICBpZiAoaWNlX2lzX3BvcnRfcmVwcl9uZXRkZXYobmV0ZGV2KSkNCj4gPiAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuOw0KPiA+IEBAIC0xMDgwLDggKzEwODAsOCBAQCBfX2ljZV9nZXRfc3Ry aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzINCj4gc3RyaW5nc2V0LCB1OCAqZGF0 YSwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KPiA+DQo+ID4gICAgICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgSUNFX1BGX1NUQVRTX0xFTjsgaSsrKQ0KPiA+IC0gICAgICAg ICAgICAgICAgICAgICBldGh0b29sX3NwcmludGYoJnAsDQo+ID4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpY2VfZ3N0cmluZ3NfcGZfc3RhdHNbaV0uc3RhdF9zdHJpbmcp Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBldGh0b29sX3B1dHMoJnAsDQo+ID4gKw0KPiA+ ICsgaWNlX2dzdHJpbmdzX3BmX3N0YXRzW2ldLnN0YXRfc3RyaW5nKTsNCj4gPg0KPiA+ICAgICAg ICAgICAgICAgZm9yIChpID0gMDsgaSA8IElDRV9NQVhfVVNFUl9QUklPUklUWTsgaSsrKSB7DQo+ ID4gICAgICAgICAgICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmcCwgInR4X3ByaW9yaXR5 XyV1X3hvbi5uaWMiLA0KPiA+IGkpOyBAQCAtMTA5Nyw3ICsxMDk3LDcgQEAgX19pY2VfZ2V0X3N0 cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyDQo+IHN0cmluZ3NldCwgdTggKmRh dGEsDQo+ID4gICAgICAgICAgICAgICBicmVhazsNCj4gPiAgICAgICBjYXNlIEVUSF9TU19QUklW X0ZMQUdTOg0KPiA+ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IElDRV9QUklWX0ZMQUdf QVJSQVlfU0laRTsgaSsrKQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICBldGh0b29sX3Nwcmlu dGYoJnAsIGljZV9nc3RyaW5nc19wcml2X2ZsYWdzW2ldLm5hbWUpOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICBldGh0b29sX3B1dHMoJnAsDQo+ID4gKyBpY2VfZ3N0cmluZ3NfcHJpdl9mbGFn c1tpXS5uYW1lKTsNCj4gPiAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICAgICAgIGRlZmF1bHQ6 DQo+ID4gICAgICAgICAgICAgICBicmVhazsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv ZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmMNCj4gPiBiL2RyaXZlcnMvbmV0L2V0aGVy bmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jDQo+ID4gaW5kZXggMzE5ZWQ2MDFlYWExLi5lMGEy NGM3YzM3ZjkgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdi L2lnYl9ldGh0b29sLmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2Iv aWdiX2V0aHRvb2wuYw0KPiA+IEBAIC0yMzU2LDExICsyMzU2LDkgQEAgc3RhdGljIHZvaWQgaWdi X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlDQo+ICpuZXRkZXYsIHUzMiBzdHJpbmdzZXQs IHU4ICpkYXRhKQ0KPiA+ICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gICAgICAgY2FzZSBFVEhf U1NfU1RBVFM6DQo+ID4gICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSUdCX0dMT0JBTF9T VEFUU19MRU47IGkrKykNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgZXRodG9vbF9zcHJpbnRm KCZwLA0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdiX2dzdHJp bmdzX3N0YXRzW2ldLnN0YXRfc3RyaW5nKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZXRo dG9vbF9wdXRzKCZwLA0KPiA+ICsgaWdiX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfc3RyaW5nKTsN Cj4gPiAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBJR0JfTkVUREVWX1NUQVRTX0xFTjsg aSsrKQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICBldGh0b29sX3NwcmludGYoJnAsDQo+ID4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ2JfZ3N0cmluZ3NfbmV0X3N0 YXRzW2ldLnN0YXRfc3RyaW5nKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZXRodG9vbF9w dXRzKCZwLA0KPiA+ICsgaWdiX2dzdHJpbmdzX25ldF9zdGF0c1tpXS5zdGF0X3N0cmluZyk7DQo+ ID4gICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsg aSsrKSB7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmcCwgInR4 X3F1ZXVlXyV1X3BhY2tldHMiLCBpKTsNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgZXRodG9v bF9zcHJpbnRmKCZwLCAidHhfcXVldWVfJXVfYnl0ZXMiLCBpKTsNCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19ldGh0b29sLmMNCj4gPiBiL2RyaXZl cnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfZXRodG9vbC5jDQo+ID4gaW5kZXggN2FiNmRk NThlNDAwLi4yYWFjNTVlYmRmNWEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJu ZXQvaW50ZWwvaWdjL2lnY19ldGh0b29sLmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5l dC9pbnRlbC9pZ2MvaWdjX2V0aHRvb2wuYw0KPiA+IEBAIC03NzMsMTAgKzc3MywxMCBAQCBzdGF0 aWMgdm9pZCBpZ2NfZXRodG9vbF9nZXRfc3RyaW5ncyhzdHJ1Y3QNCj4gbmV0X2RldmljZSAqbmV0 ZGV2LCB1MzIgc3RyaW5nc2V0LA0KPiA+ICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gICAgICAg Y2FzZSBFVEhfU1NfU1RBVFM6DQo+ID4gICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSUdD X0dMT0JBTF9TVEFUU19MRU47IGkrKykNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgZXRodG9v bF9zcHJpbnRmKCZwLCBpZ2NfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9zdHJpbmcpOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICBldGh0b29sX3B1dHMoJnAsDQo+ID4gKyBpZ2NfZ3N0cmluZ3Nf c3RhdHNbaV0uc3RhdF9zdHJpbmcpOw0KPiA+ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IElHQ19ORVRERVZfU1RBVFNfTEVOOyBpKyspDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgIGV0 aHRvb2xfc3ByaW50ZigmcCwNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlnY19nc3RyaW5nc19uZXRfc3RhdHNbaV0uc3RhdF9zdHJpbmcpOw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBldGh0b29sX3B1dHMoJnAsDQo+ID4gKw0KPiA+ICsgaWdjX2dzdHJpbmdz X25ldF9zdGF0c1tpXS5zdGF0X3N0cmluZyk7DQo+ID4gICAgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7DQo+ID4gICAgICAgICAgICAgICAg ICAgICAgIGV0aHRvb2xfc3ByaW50ZigmcCwgInR4X3F1ZXVlXyV1X3BhY2tldHMiLCBpKTsNCj4g PiAgICAgICAgICAgICAgICAgICAgICAgZXRodG9vbF9zcHJpbnRmKCZwLCAidHhfcXVldWVfJXVf Ynl0ZXMiLCBpKTsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwv aXhnYmUvaXhnYmVfZXRodG9vbC5jDQo+ID4gYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9p eGdiZS9peGdiZV9ldGh0b29sLmMNCj4gPiBpbmRleCAwYmJhZDRhNWNjMmYuLmRkNzIyYjAzODFl MCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdi ZV9ldGh0b29sLmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9p eGdiZV9ldGh0b29sLmMNCj4gPiBAQCAtMTQxMywxMiArMTQxMywxMSBAQCBzdGF0aWMgdm9pZCBp eGdiZV9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZQ0KPiAqbmV0ZGV2LCB1MzIgc3RyaW5n c2V0LA0KPiA+ICAgICAgIHN3aXRjaCAoc3RyaW5nc2V0KSB7DQo+ID4gICAgICAgY2FzZSBFVEhf U1NfVEVTVDoNCj4gPiAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBJWEdCRV9URVNUX0xF TjsgaSsrKQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICBldGh0b29sX3NwcmludGYoJnAsIGl4 Z2JlX2dzdHJpbmdzX3Rlc3RbaV0pOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBldGh0b29s X3B1dHMoJnAsIGl4Z2JlX2dzdHJpbmdzX3Rlc3RbaV0pOw0KPiA+ICAgICAgICAgICAgICAgYnJl YWs7DQo+ID4gICAgICAgY2FzZSBFVEhfU1NfU1RBVFM6DQo+ID4gICAgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgSVhHQkVfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKQ0KPiA+IC0gICAgICAgICAg ICAgICAgICAgICBldGh0b29sX3NwcmludGYoJnAsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpeGdiZV9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X3N0cmluZyk7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIGV0aHRvb2xfcHV0cygmcCwNCj4gPiArIGl4Z2JlX2dz dHJpbmdzX3N0YXRzW2ldLnN0YXRfc3RyaW5nKTsNCj4gPiAgICAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBuZXRkZXYtPm51bV90eF9xdWV1ZXM7IGkrKykgew0KPiA+ICAgICAgICAgICAgICAg ICAgICAgICBldGh0b29sX3NwcmludGYoJnAsICJ0eF9xdWV1ZV8ldV9wYWNrZXRzIiwgaSk7DQo+ ID4gICAgICAgICAgICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmcCwgInR4X3F1ZXVlXyV1 X2J5dGVzIiwgaSk7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJv bm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmMNCj4gPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25l dHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmMNCj4gPiBpbmRleCBlNzVjYmIyODc2MjUuLjE2 MzZjZTYxYTNjMCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25v bWUvbmZwL25mcF9uZXRfZXRodG9vbC5jDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQv bmV0cm9ub21lL25mcC9uZnBfbmV0X2V0aHRvb2wuYw0KPiA+IEBAIC04MDAsNyArODAwLDcgQEAg c3RhdGljIHZvaWQgbmZwX2dldF9zZWxmX3Rlc3Rfc3RyaW5ncyhzdHJ1Y3QNCj4gPiBuZXRfZGV2 aWNlICpuZXRkZXYsIHU4ICpkYXRhKQ0KPiA+DQo+ID4gICAgICAgZm9yIChpID0gMDsgaSA8IE5G UF9URVNUX1RPVEFMX05VTTsgaSsrKQ0KPiA+ICAgICAgICAgICAgICAgaWYgKG5mcF9zZWxmX3Rl c3RbaV0uaXNfc3VwcG9ydGVkKG5ldGRldikpDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgIGV0 aHRvb2xfc3ByaW50ZigmZGF0YSwgbmZwX3NlbGZfdGVzdFtpXS5uYW1lKTsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgZXRodG9vbF9wdXRzKCZkYXRhLCBuZnBfc2VsZl90ZXN0W2ldLm5hbWUp Ow0KPiA+ICAgfQ0KPiA+DQo+ID4gICBzdGF0aWMgaW50IG5mcF9nZXRfc2VsZl90ZXN0X2NvdW50 KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpIEBADQo+ID4gLTg1MiwyNCArODUyLDI0IEBAIHN0 YXRpYyB1OCAqbmZwX3ZuaWNfZ2V0X3N3X3N0YXRzX3N0cmluZ3Moc3RydWN0DQo+IG5ldF9kZXZp Y2UgKm5ldGRldiwgdTggKmRhdGEpDQo+ID4gICAgICAgICAgICAgICBldGh0b29sX3NwcmludGYo JmRhdGEsICJydmVjXyV1X3R4X2J1c3kiLCBpKTsNCj4gPiAgICAgICB9DQo+ID4NCj4gPiAtICAg ICBldGh0b29sX3NwcmludGYoJmRhdGEsICJod19yeF9jc3VtX29rIik7DQo+ID4gLSAgICAgZXRo dG9vbF9zcHJpbnRmKCZkYXRhLCAiaHdfcnhfY3N1bV9pbm5lcl9vayIpOw0KPiA+IC0gICAgIGV0 aHRvb2xfc3ByaW50ZigmZGF0YSwgImh3X3J4X2NzdW1fY29tcGxldGUiKTsNCj4gPiAtICAgICBl dGh0b29sX3NwcmludGYoJmRhdGEsICJod19yeF9jc3VtX2VyciIpOw0KPiA+IC0gICAgIGV0aHRv b2xfc3ByaW50ZigmZGF0YSwgInJ4X3JlcGxhY2VfYnVmX2FsbG9jX2ZhaWwiKTsNCj4gPiAtICAg ICBldGh0b29sX3NwcmludGYoJmRhdGEsICJyeF90bHNfZGVjcnlwdGVkX3BhY2tldHMiKTsNCj4g PiAtICAgICBldGh0b29sX3NwcmludGYoJmRhdGEsICJod190eF9jc3VtIik7DQo+ID4gLSAgICAg ZXRodG9vbF9zcHJpbnRmKCZkYXRhLCAiaHdfdHhfaW5uZXJfY3N1bSIpOw0KPiA+IC0gICAgIGV0 aHRvb2xfc3ByaW50ZigmZGF0YSwgInR4X2dhdGhlciIpOw0KPiA+IC0gICAgIGV0aHRvb2xfc3By aW50ZigmZGF0YSwgInR4X2xzbyIpOw0KPiA+IC0gICAgIGV0aHRvb2xfc3ByaW50ZigmZGF0YSwg InR4X3Rsc19lbmNyeXB0ZWRfcGFja2V0cyIpOw0KPiA+IC0gICAgIGV0aHRvb2xfc3ByaW50Zigm ZGF0YSwgInR4X3Rsc19vb28iKTsNCj4gPiAtICAgICBldGh0b29sX3NwcmludGYoJmRhdGEsICJ0 eF90bHNfZHJvcF9ub19zeW5jX2RhdGEiKTsNCj4gPiAtDQo+ID4gLSAgICAgZXRodG9vbF9zcHJp bnRmKCZkYXRhLCAiaHdfdGxzX25vX3NwYWNlIik7DQo+ID4gLSAgICAgZXRodG9vbF9zcHJpbnRm KCZkYXRhLCAicnhfdGxzX3Jlc3luY19yZXFfb2siKTsNCj4gPiAtICAgICBldGh0b29sX3Nwcmlu dGYoJmRhdGEsICJyeF90bHNfcmVzeW5jX3JlcV9pZ24iKTsNCj4gPiAtICAgICBldGh0b29sX3Nw cmludGYoJmRhdGEsICJyeF90bHNfcmVzeW5jX3NlbnQiKTsNCj4gPiArICAgICBldGh0b29sX3B1 dHMoJmRhdGEsICJod19yeF9jc3VtX29rIik7DQo+ID4gKyAgICAgZXRodG9vbF9wdXRzKCZkYXRh LCAiaHdfcnhfY3N1bV9pbm5lcl9vayIpOw0KPiA+ICsgICAgIGV0aHRvb2xfcHV0cygmZGF0YSwg Imh3X3J4X2NzdW1fY29tcGxldGUiKTsNCj4gPiArICAgICBldGh0b29sX3B1dHMoJmRhdGEsICJo d19yeF9jc3VtX2VyciIpOw0KPiA+ICsgICAgIGV0aHRvb2xfcHV0cygmZGF0YSwgInJ4X3JlcGxh Y2VfYnVmX2FsbG9jX2ZhaWwiKTsNCj4gPiArICAgICBldGh0b29sX3B1dHMoJmRhdGEsICJyeF90 bHNfZGVjcnlwdGVkX3BhY2tldHMiKTsNCj4gPiArICAgICBldGh0b29sX3B1dHMoJmRhdGEsICJo d190eF9jc3VtIik7DQo+ID4gKyAgICAgZXRodG9vbF9wdXRzKCZkYXRhLCAiaHdfdHhfaW5uZXJf Y3N1bSIpOw0KPiA+ICsgICAgIGV0aHRvb2xfcHV0cygmZGF0YSwgInR4X2dhdGhlciIpOw0KPiA+ ICsgICAgIGV0aHRvb2xfcHV0cygmZGF0YSwgInR4X2xzbyIpOw0KPiA+ICsgICAgIGV0aHRvb2xf cHV0cygmZGF0YSwgInR4X3Rsc19lbmNyeXB0ZWRfcGFja2V0cyIpOw0KPiA+ICsgICAgIGV0aHRv b2xfcHV0cygmZGF0YSwgInR4X3Rsc19vb28iKTsNCj4gPiArICAgICBldGh0b29sX3B1dHMoJmRh dGEsICJ0eF90bHNfZHJvcF9ub19zeW5jX2RhdGEiKTsNCj4gPiArDQo+ID4gKyAgICAgZXRodG9v bF9wdXRzKCZkYXRhLCAiaHdfdGxzX25vX3NwYWNlIik7DQo+ID4gKyAgICAgZXRodG9vbF9wdXRz KCZkYXRhLCAicnhfdGxzX3Jlc3luY19yZXFfb2siKTsNCj4gPiArICAgICBldGh0b29sX3B1dHMo JmRhdGEsICJyeF90bHNfcmVzeW5jX3JlcV9pZ24iKTsNCj4gPiArICAgICBldGh0b29sX3B1dHMo JmRhdGEsICJyeF90bHNfcmVzeW5jX3NlbnQiKTsNCj4gPg0KPiA+ICAgICAgIHJldHVybiBkYXRh Ow0KPiA+ICAgfQ0KPiA+IEBAIC05NDMsMTMgKzk0MywxMyBAQCBuZnBfdm5pY19nZXRfaHdfc3Rh dHNfc3RyaW5ncyh1OCAqZGF0YSwgdW5zaWduZWQNCj4gaW50IG51bV92ZWNzLCBib29sIHJlcHIp DQo+ID4gICAgICAgc3dhcF9vZmYgPSByZXByICogTk5fRVRfU1dJVENIX1NUQVRTX0xFTjsNCj4g Pg0KPiA+ICAgICAgIGZvciAoaSA9IDA7IGkgPCBOTl9FVF9TV0lUQ0hfU1RBVFNfTEVOOyBpKysp DQo+ID4gLSAgICAgICAgICAgICBldGh0b29sX3NwcmludGYoJmRhdGEsIG5mcF9uZXRfZXRfc3Rh dHNbaSArIHN3YXBfb2ZmXS5uYW1lKTsNCj4gPiArICAgICAgICAgICAgIGV0aHRvb2xfcHV0cygm ZGF0YSwgbmZwX25ldF9ldF9zdGF0c1tpICsNCj4gPiArIHN3YXBfb2ZmXS5uYW1lKTsNCj4gPg0K PiA+ICAgICAgIGZvciAoaSA9IE5OX0VUX1NXSVRDSF9TVEFUU19MRU47IGkgPCBOTl9FVF9TV0lU Q0hfU1RBVFNfTEVOICogMjsNCj4gaSsrKQ0KPiA+IC0gICAgICAgICAgICAgZXRodG9vbF9zcHJp bnRmKCZkYXRhLCBuZnBfbmV0X2V0X3N0YXRzW2kgLSBzd2FwX29mZl0ubmFtZSk7DQo+ID4gKyAg ICAgICAgICAgICBldGh0b29sX3B1dHMoJmRhdGEsIG5mcF9uZXRfZXRfc3RhdHNbaSAtDQo+ID4g KyBzd2FwX29mZl0ubmFtZSk7DQo+ID4NCj4gPiAgICAgICBmb3IgKGkgPSBOTl9FVF9TV0lUQ0hf U1RBVFNfTEVOICogMjsgaSA8IE5OX0VUX0dMT0JBTF9TVEFUU19MRU47DQo+IGkrKykNCj4gPiAt ICAgICAgICAgICAgIGV0aHRvb2xfc3ByaW50ZigmZGF0YSwgbmZwX25ldF9ldF9zdGF0c1tpXS5u YW1lKTsNCj4gPiArICAgICAgICAgICAgIGV0aHRvb2xfcHV0cygmZGF0YSwgbmZwX25ldF9ldF9z dGF0c1tpXS5uYW1lKTsNCj4gPg0KPiA+ICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmVjczsg aSsrKSB7DQo+ID4gICAgICAgICAgICAgICBldGh0b29sX3NwcmludGYoJmRhdGEsICJyeHFfJXVf cGt0cyIsIGkpOyBkaWZmIC0tZ2l0DQo+ID4gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5k by9pb25pYy9pb25pY19zdGF0cy5jDQo+ID4gYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5k by9pb25pYy9pb25pY19zdGF0cy5jDQo+ID4gaW5kZXggOTg1OWE0NDMyOTg1Li4xZjYwMjJmYjc2 NzkgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMv aW9uaWNfc3RhdHMuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lv bmljL2lvbmljX3N0YXRzLmMNCj4gPiBAQCAtMjU4LDEwICsyNTgsMTAgQEAgc3RhdGljIHZvaWQg aW9uaWNfc3dfc3RhdHNfZ2V0X3N0cmluZ3Moc3RydWN0DQo+IGlvbmljX2xpZiAqbGlmLCB1OCAq KmJ1ZikNCj4gPiAgICAgICBpbnQgaSwgcV9udW07DQo+ID4NCj4gPiAgICAgICBmb3IgKGkgPSAw OyBpIDwgSU9OSUNfTlVNX0xJRl9TVEFUUzsgaSsrKQ0KPiA+IC0gICAgICAgICAgICAgZXRodG9v bF9zcHJpbnRmKGJ1ZiwgaW9uaWNfbGlmX3N0YXRzX2Rlc2NbaV0ubmFtZSk7DQo+ID4gKyAgICAg ICAgICAgICBldGh0b29sX3B1dHMoYnVmLCBpb25pY19saWZfc3RhdHNfZGVzY1tpXS5uYW1lKTsN Cj4gPg0KPiA+ICAgICAgIGZvciAoaSA9IDA7IGkgPCBJT05JQ19OVU1fUE9SVF9TVEFUUzsgaSsr KQ0KPiA+IC0gICAgICAgICAgICAgZXRodG9vbF9zcHJpbnRmKGJ1ZiwgaW9uaWNfcG9ydF9zdGF0 c19kZXNjW2ldLm5hbWUpOw0KPiA+ICsgICAgICAgICAgICAgZXRodG9vbF9wdXRzKGJ1ZiwgaW9u aWNfcG9ydF9zdGF0c19kZXNjW2ldLm5hbWUpOw0KPiA+DQo+ID4gICAgICAgZm9yIChxX251bSA9 IDA7IHFfbnVtIDwgTUFYX1EobGlmKTsgcV9udW0rKykNCj4gPiAgICAgICAgICAgICAgIGlvbmlj X3N3X3N0YXRzX2dldF90eF9zdHJpbmdzKGxpZiwgYnVmLCBxX251bSk7IGRpZmYNCj4gPiAtLWdp dCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMNCj4gPiBiL2RyaXZlcnMvbmV0L2h5 cGVydi9uZXR2c2NfZHJ2LmMgaW5kZXggM2JhM2M4ZmIyOGE1Li5jYmQ5NDA1ZmMyZjMNCj4gPiAx MDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jDQo+ID4gKysr IGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYw0KPiA+IEBAIC0xNTgyLDEwICsxNTgy LDEwIEBAIHN0YXRpYyB2b2lkIG5ldHZzY19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZQ0K PiAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkNCj4gPiAgICAgICBzd2l0Y2ggKHN0cmlu Z3NldCkgew0KPiA+ICAgICAgIGNhc2UgRVRIX1NTX1NUQVRTOg0KPiA+ICAgICAgICAgICAgICAg Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmV0dnNjX3N0YXRzKTsgaSsrKQ0KPiA+IC0gICAg ICAgICAgICAgICAgICAgICBldGh0b29sX3NwcmludGYoJnAsIG5ldHZzY19zdGF0c1tpXS5uYW1l KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZXRodG9vbF9wdXRzKCZwLCBuZXR2c2Nfc3Rh dHNbaV0ubmFtZSk7DQo+ID4NCj4gPiAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKHZmX3N0YXRzKTsgaSsrKQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICBldGh0b29s X3NwcmludGYoJnAsIHZmX3N0YXRzW2ldLm5hbWUpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBldGh0b29sX3B1dHMoJnAsIHZmX3N0YXRzW2ldLm5hbWUpOw0KPiA+DQo+ID4gICAgICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbnZkZXYtPm51bV9jaG47IGkrKykgew0KPiA+ICAgICAgICAg ICAgICAgICAgICAgICBldGh0b29sX3NwcmludGYoJnAsICJ0eF9xdWV1ZV8ldV9wYWNrZXRzIiwg aSk7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29s LmMNCj4gPiBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMNCj4gPiBpbmRl eCA5OGMyMmQ3ZDg3YTIuLjhmNWYyMDJjZGUzOSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25l dC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvdm14bmV0 My92bXhuZXQzX2V0aHRvb2wuYw0KPiA+IEBAIC0yNDUsMjAgKzI0NSwyMCBAQCB2bXhuZXQzX2dl dF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsDQo+ID4gdTMyIHN0cmluZ3NldCwg dTggKmJ1ZikNCj4gPg0KPiA+ICAgICAgIGZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5udW1fdHhf cXVldWVzOyBqKyspIHsNCj4gPiAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKHZteG5ldDNfdHFfZGV2X3N0YXRzKTsgaSsrKQ0KPiA+IC0gICAgICAgICAgICAgICAgICAg ICBldGh0b29sX3NwcmludGYoJmJ1Ziwgdm14bmV0M190cV9kZXZfc3RhdHNbaV0uZGVzYyk7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIGV0aHRvb2xfcHV0cygmYnVmLA0KPiA+ICsgdm14bmV0 M190cV9kZXZfc3RhdHNbaV0uZGVzYyk7DQo+ID4gICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRSh2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cyk7IGkrKykNCj4gPiAtICAgICAg ICAgICAgICAgICAgICAgZXRodG9vbF9zcHJpbnRmKCZidWYsIHZteG5ldDNfdHFfZHJpdmVyX3N0 YXRzW2ldLmRlc2MpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1 ZiwNCj4gPiArIHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzW2ldLmRlc2MpOw0KPiA+ICAgICAgIH0N Cj4gPg0KPiA+ICAgICAgIGZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBq KyspIHsNCj4gPiAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5l dDNfcnFfZGV2X3N0YXRzKTsgaSsrKQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICBldGh0b29s X3NwcmludGYoJmJ1Ziwgdm14bmV0M19ycV9kZXZfc3RhdHNbaV0uZGVzYyk7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGV0aHRvb2xfcHV0cygmYnVmLA0KPiA+ICsgdm14bmV0M19ycV9kZXZf c3RhdHNbaV0uZGVzYyk7DQo+ID4gICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRSh2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyk7IGkrKykNCj4gPiAtICAgICAgICAgICAgICAg ICAgICAgZXRodG9vbF9zcHJpbnRmKCZidWYsIHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzW2ldLmRl c2MpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBldGh0b29sX3B1dHMoJmJ1ZiwNCj4gPiAr IHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzW2ldLmRlc2MpOw0KPiA+ICAgICAgIH0NCj4gPg0KPiA+ ICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfZ2xvYmFsX3N0YXRzKTsg aSsrKQ0KPiA+IC0gICAgICAgICAgICAgZXRodG9vbF9zcHJpbnRmKCZidWYsIHZteG5ldDNfZ2xv YmFsX3N0YXRzW2ldLmRlc2MpOw0KPiA+ICsgICAgICAgICAgICAgZXRodG9vbF9wdXRzKCZidWYs IHZteG5ldDNfZ2xvYmFsX3N0YXRzW2ldLmRlc2MpOw0KPiA+ICAgfQ0KPiA+DQo+ID4gICBuZXRk ZXZfZmVhdHVyZXNfdCB2bXhuZXQzX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0 ZGV2LA0KPiA+DQo+IA0KDQpUaGFua3MgZm9yIHN1Ym1pdHRpbmcgdGhpcyBwYXRjaA0KDQpBY2tl ZC1ieTogQXJ0aHVyIEtpeWFub3Zza2kgPGFraXlhbm9AYW1hem9uLmNvbT4NCg==