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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 33454C433F5 for ; Tue, 9 Nov 2021 00:48:57 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 47B6761167 for ; Tue, 9 Nov 2021 00:48:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 47B6761167 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 2284D838DA; Tue, 9 Nov 2021 01:48:54 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="JPloYfbQ"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 9669A8364F; Tue, 9 Nov 2021 01:48:52 +0100 (CET) Received: from mail-lf1-x12f.google.com (mail-lf1-x12f.google.com [IPv6:2a00:1450:4864:20::12f]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 5EA018363C for ; Tue, 9 Nov 2021 01:48:48 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: phobos.denx.de; spf=fail smtp.mailfrom=roman.bacik@broadcom.com Received: by mail-lf1-x12f.google.com with SMTP id j2so40359312lfg.3 for ; Mon, 08 Nov 2021 16:48:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:references:in-reply-to:mime-version:thread-index:date :message-id:subject:to:cc; bh=ewqYgzjYbl3ujxMdgxCq3GJeyjoI9IaomNXMBn7TsUs=; b=JPloYfbQok26e3/umA44N0N6Gwl2dAXhQIRXHJqVaqHUhiSXzjnNquqV76HHFadhhT hw0OxIxvH9mvNJ3y+nLrEFdfTchFJlB+rcxNOnABuBQHrMmtzFfXQXUEpgts4dTUwuND GQ6HncAAyVN0Nl09s7ORbpQeP6p9oxP53LK/Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:references:in-reply-to:mime-version :thread-index:date:message-id:subject:to:cc; bh=ewqYgzjYbl3ujxMdgxCq3GJeyjoI9IaomNXMBn7TsUs=; b=2H8nA2X5ycm/0HbbGaoy2g0ejCInKbtWJGpD2c8y9c0kQn4A80Aa5BPVsNxcF+n15X 12XRSdKzCYxYfcBJlWGrBYym+rMc9TED2x+EOB5anGpaHQZSib/DbpTxpihHlXzf/Gl9 yOojK2rx26MSgPE2ITIhi2Qa4HATt0AYju9Al4sYeEtanhKO+EfRf5dpZVaJ16I8fO8c 1eTsaOJpAGWym6Go95cXAMJRgvtt791f3WqFWKR+YjfKJ9R0mrHz82a64KzRxuDkBBQi sLafkkj1vii5+Psz/qZuJgY6uCGcimyROgcT3t0IslyRG3bINB7D+EOcygTd6cRJrMbs aHHA== X-Gm-Message-State: AOAM532mdXn0tGAughAr039LOl8VPOv8Kqw2MsDw+iwYQExSAUkorKVx fK1kRLgwTFbNAgwrNEXG4Os8oD/fz8j9V421PgeQy1XIBO4b4ORYul4e4hRCL7l+E0vvtbcmTlF sp/DUopXYokFR42MLlUrZ X-Google-Smtp-Source: ABdhPJxhVzS32yR3o1vHyYdQDKYOPY4gK9EU7uO2lfV5JgyzjJoJpx6VLZo/sDFuJcZpJ308KRyT4KrwUqGtUGGcAVY= X-Received: by 2002:ac2:4312:: with SMTP id l18mr3076366lfh.602.1636418927573; Mon, 08 Nov 2021 16:48:47 -0800 (PST) From: Roman Bacik References: <20211108144556.v10.1.I1edaad77041c1300213c307eef6741499504047@changeid> <20211109004306.6203a36a@thinkpad> In-Reply-To: <20211109004306.6203a36a@thinkpad> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQGcN1zRrIOAFt2qM2M0xG1b3TriYALDR9VVrFtwYXA= Date: Mon, 8 Nov 2021 16:48:33 -0800 Message-ID: <3fee453a14f2a06628e5bb48044fde39@mail.gmail.com> Subject: RE: [PATCH v10 1/2] net: brcm: netXtreme driver To: =?UTF-8?B?TWFyZWsgQmVow7pu?= Cc: U-Boot Mailing List , Pali Rohar , Bharat Gooty , Joe Hershberger , Ramon Fried Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="000000000000e6797605d050783a" X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean --000000000000e6797605d050783a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Marek, > -----Original Message----- > From: Marek Beh=C3=BAn > Sent: Monday, November 8, 2021 3:43 PM > To: Roman Bacik > Cc: U-Boot Mailing List ; Pali Rohar > ; Bharat Gooty ; Joe > Hershberger ; Ramon Fried > > Subject: Re: [PATCH v10 1/2] net: brcm: netXtreme driver > > Hello Roman, > > some last requests from me. > > On Mon, 8 Nov 2021 14:46:10 -0800 > Roman Bacik wrote: > > > +#define bnxt_down_chip(bp) bnxt_hwrm_run(down_chip, bp, 0) > > +#define bnxt_bring_chip(bp) bnxt_hwrm_run(bring_chip, bp, 1) > > Could these be changed to functions instead of macros, please? Ok, we will make the change. > > > +int bnxt_free_rx_iob(struct bnxt *bp) > > +{ > > + unsigned int i; > > + > > + if (!(FLAG_TEST(bp->flag_hwrm, VALID_RX_IOB))) > > + return STATUS_SUCCESS; > > Please change all STATUS_SUCCESS to 0 and STATUS_FAILURE to either -1 > or appropriate -errno, as is customary in U-Boot. This status is returned from our HW/FW so it would make more sense to keep it as is. But we will change it per your request and we will replace STATUS_SUCCESS with 0 and STATUS_FAILURE with -1 and hence loose status codes actually returned by HW/FW. > > At first I thought that you have implemented this driver by starting > from kernel's implementation. They look very similar. But it was > probably an old version of kernel implementation (perhaps broadcom > internal?), because many things are different now. > > > +static void set_rx_desc(u8 *buf, void *iob, u16 cons_id, u32 iob_idx) > > +{ > > + struct rx_prod_pkt_bd *desc; > > + u16 off =3D cons_id * sizeof(struct rx_prod_pkt_bd); > > + > > + desc =3D (struct rx_prod_pkt_bd *)&buf[off]; > > + desc->flags_type =3D RX_PROD_PKT_BD_TYPE_RX_PROD_PKT; > > + desc->len =3D MAX_ETHERNET_PACKET_BUFFER_SIZE; > > What bugs me with this driver most is that it reimplements many things on > its own. MAX_ETHERNET_PACKET_BUFFER_SIZE is 1536, but we have > PKTSIZE_ALIGN in include/net.h for that. > > > + bp->link_status =3D STATUS_LINK_DOWN; > > This can be a simple bool: link is either up or down... The bp structure is passed to our HW/FW, which expects a valid integer link_status. We cannot make this change and have the driver working. > > > > +typedef int (*hwrm_func_t)(struct bnxt *bp); > > + > > +hwrm_func_t down_chip[] =3D { > > + bnxt_hwrm_cfa_l2_filter_free, /* Free l2 filter */ > > + bnxt_free_rx_iob, /* Free rx iob */ > > + bnxt_hwrm_vnic_free, /* Free vnic */ > > + bnxt_hwrm_ring_free_grp, /* Free ring group */ > > + bnxt_hwrm_ring_free_rx, /* Free rx ring */ > > + bnxt_hwrm_ring_free_tx, /* Free tx ring */ > > + bnxt_hwrm_ring_free_cq, /* Free CQ ring */ > > + bnxt_hwrm_stat_ctx_free, /* Free Stat ctx */ > > + bnxt_hwrm_func_drv_unrgtr, /* unreg driver */ > > + NULL, > > +}; > > + > > +hwrm_func_t bring_chip[] =3D { > > + bnxt_hwrm_ver_get, /* HWRM_VER_GET */ > > + bnxt_hwrm_func_reset_req, /* HWRM_FUNC_RESET */ > > + bnxt_hwrm_func_drv_rgtr, /* HWRM_FUNC_DRV_RGTR */ > > + bnxt_hwrm_func_resource_qcaps, /* > HWRM_FUNC_RESOURCE_QCAPS */ > > + bnxt_hwrm_func_qcfg_req, /* HWRM_FUNC_QCFG */ > > + bnxt_hwrm_func_qcaps_req, /* HWRM_FUNC_QCAPS */ > > + bnxt_hwrm_get_link_speed, /* HWRM_NVM_GET_VARIABLE - > 203 */ > > + bnxt_hwrm_port_mac_cfg, /* HWRM_PORT_MAC_CFG */ > > + bnxt_qphy_link, /* HWRM_PORT_PHY_QCFG */ > > + bnxt_hwrm_func_cfg_req, /* HWRM_FUNC_CFG - ring > resource*/ > > + bnxt_hwrm_stat_ctx_alloc, /* Allocate Stat Ctx ID */ > > + bnxt_hwrm_ring_alloc_cq, /* Allocate CQ Ring */ > > + bnxt_hwrm_ring_alloc_tx, /* Allocate Tx ring */ > > + bnxt_hwrm_ring_alloc_rx, /* Allocate Rx Ring */ > > + bnxt_hwrm_ring_alloc_grp, /* Create Ring Group */ > > + post_rx_buffers, /* Post RX buffers */ > > + bnxt_hwrm_set_async_event, /* ENABLES_ASYNC_EVENT_CR > */ > > + bnxt_hwrm_vnic_alloc, /* Alloc VNIC */ > > + bnxt_hwrm_vnic_cfg, /* Config VNIC */ > > + bnxt_hwrm_cfa_l2_filter_alloc, /* Alloc L2 Filter */ > > + get_phy_link, /* Get Physical Link */ > > + NULL, > > +}; > > + > > +int bnxt_hwrm_run(hwrm_func_t cmds[], struct bnxt *bp, int flag) > > +{ > > + hwrm_func_t *ptr; > > + int ret; > > + int status =3D STATUS_SUCCESS; > > + > > + for (ptr =3D cmds; *ptr; ++ptr) { > > + ret =3D (*ptr)(bp); > > + if (ret) { > > + status =3D STATUS_FAILURE; > > + /* Continue till all cleanup routines are called */ > > + if (flag) > > + return STATUS_FAILURE; > > Please change this function to return 0 on success and the error value > from last failed function on failure: > int ret =3D 0; > for (...) { > ret =3D (*ptr)(bp); > if (ret) > break; > } > return ret; > > If you can, maybe return -errno codes that make sense on failures in > places where you now return STATUS_FAILURE. > We will change the method as requested. Note the status code is coming from HW/FW so returning it to uboot upper layers would not make much sense. But we will change STATUS_SUCCESS and STATUS_FAILURE to 0 and -1 as requested. > > I'll be honest that I don't like how this driver uses code construct > that are many time different from that in U-Boot/Linux. I guess this > is how the Broadcom people wrote it, and it probably looked this way > also in Linux, but was changed since then to conform to Linux style. (Or > maybe they didn't accept it until it conformed?) > > Anyway, these are probably the last changes that I will be suggesting. > I don't like many things here, but I guess beggars cannot be choosers, > and we in U-Boot are more on the side of beggars when talking about > man-hours companies are willing to spend for U-Boot :( Since the > driver works for you, maybe we should accept it as it is. > > Marek To be honest changing status codes coming from FW does not seem right. But we will try to make the requested changes. Thanks, Roman --=20 This electronic communication and the information and any files transmitted= =20 with it, or attached to it, are confidential and are intended solely for=20 the use of the individual or entity to whom it is addressed and may contain= =20 information that is confidential, legally privileged, protected by privacy= =20 laws, or otherwise restricted from disclosure to anyone else. If you are=20 not the intended recipient or the person responsible for delivering the=20 e-mail to the intended recipient, you are hereby notified that any use,=20 copying, distributing, dissemination, forwarding, printing, or copying of= =20 this e-mail is strictly prohibited. If you received this e-mail in error,= =20 please return the e-mail to the sender, delete it from your computer, and= =20 destroy any printed copy of it. --000000000000e6797605d050783a Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIIQagYJKoZIhvcNAQcCoIIQWzCCEFcCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg gg3BMIIFDTCCA/WgAwIBAgIQeEqpED+lv77edQixNJMdADANBgkqhkiG9w0BAQsFADBMMSAwHgYD VQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UE AxMKR2xvYmFsU2lnbjAeFw0yMDA5MTYwMDAwMDBaFw0yODA5MTYwMDAwMDBaMFsxCzAJBgNVBAYT AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIEdDQyBS MyBQZXJzb25hbFNpZ24gMiBDQSAyMDIwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA vbCmXCcsbZ/a0fRIQMBxp4gJnnyeneFYpEtNydrZZ+GeKSMdHiDgXD1UnRSIudKo+moQ6YlCOu4t rVWO/EiXfYnK7zeop26ry1RpKtogB7/O115zultAz64ydQYLe+a1e/czkALg3sgTcOOcFZTXk38e aqsXsipoX1vsNurqPtnC27TWsA7pk4uKXscFjkeUE8JZu9BDKaswZygxBOPBQBwrA5+20Wxlk6k1 e6EKaaNaNZUy30q3ArEf30ZDpXyfCtiXnupjSK8WU2cK4qsEtj09JS4+mhi0CTCrCnXAzum3tgcH cHRg0prcSzzEUDQWoFxyuqwiwhHu3sPQNmFOMwIDAQABo4IB2jCCAdYwDgYDVR0PAQH/BAQDAgGG MGAGA1UdJQRZMFcGCCsGAQUFBwMCBggrBgEFBQcDBAYKKwYBBAGCNxQCAgYKKwYBBAGCNwoDBAYJ KwYBBAGCNxUGBgorBgEEAYI3CgMMBggrBgEFBQcDBwYIKwYBBQUHAxEwEgYDVR0TAQH/BAgwBgEB /wIBADAdBgNVHQ4EFgQUljPR5lgXWzR1ioFWZNW+SN6hj88wHwYDVR0jBBgwFoAUj/BLf6guRSSu TVD6Y5qL3uLdG7wwegYIKwYBBQUHAQEEbjBsMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9i YWxzaWduLmNvbS9yb290cjMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5j b20vY2FjZXJ0L3Jvb3QtcjMuY3J0MDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFs c2lnbi5jb20vcm9vdC1yMy5jcmwwWgYDVR0gBFMwUTALBgkrBgEEAaAyASgwQgYKKwYBBAGgMgEo CjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAN BgkqhkiG9w0BAQsFAAOCAQEAdAXk/XCnDeAOd9nNEUvWPxblOQ/5o/q6OIeTYvoEvUUi2qHUOtbf jBGdTptFsXXe4RgjVF9b6DuizgYfy+cILmvi5hfk3Iq8MAZsgtW+A/otQsJvK2wRatLE61RbzkX8 9/OXEZ1zT7t/q2RiJqzpvV8NChxIj+P7WTtepPm9AIj0Keue+gS2qvzAZAY34ZZeRHgA7g5O4TPJ /oTd+4rgiU++wLDlcZYd/slFkaT3xg4qWDepEMjT4T1qFOQIL+ijUArYS4owpPg9NISTKa1qqKWJ jFoyms0d0GwOniIIbBvhI2MJ7BSY9MYtWVT5jJO3tsVHwj4cp92CSFuGwunFMzCCA18wggJHoAMC AQICCwQAAAAAASFYUwiiMA0GCSqGSIb3DQEBCwUAMEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9v dCBDQSAtIFIzMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTA5 MDMxODEwMDAwMFoXDTI5MDMxODEwMDAwMFowTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENB IC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMJXaQeQZ4Ihb1wIO2hMoonv0FdhHFrYhy/EYCQ8eyip0E XyTLLkvhYIJG4VKrDIFHcGzdZNHr9SyjD4I9DCuul9e2FIYQebs7E4B3jAjhSdJqYi8fXvqWaN+J J5U4nwbXPsnLJlkNc96wyOkmDoMVxu9bi9IEYMpJpij2aTv2y8gokeWdimFXN6x0FNx04Druci8u nPvQu7/1PQDhBjPogiuuU6Y6FnOM3UEOIDrAtKeh6bJPkC4yYOlXy7kEkmho5TgmYHWyn3f/kRTv riBJ/K1AFUjRAjFhGV64l++td7dkmnq/X8ET75ti+w1s4FRpFqkD2m7pg5NxdsZphYIXAgMBAAGj QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSP8Et/qC5FJK5N UPpjmove4t0bvDANBgkqhkiG9w0BAQsFAAOCAQEAS0DbwFCq/sgM7/eWVEVJu5YACUGssxOGhigH M8pr5nS5ugAtrqQK0/Xx8Q+Kv3NnSoPHRHt44K9ubG8DKY4zOUXDjuS5V2yq/BKW7FPGLeQkbLmU Y/vcU2hnVj6DuM81IcPJaP7O2sJTqsyQiunwXUaMld16WCgaLx3ezQA3QY/tRG3XUyiXfvNnBB4V 14qWtNPeTCekTBtzc3b0F5nCH3oO4y0IrQocLP88q1UOD5F+NuvDV0m+4S4tfGCLw0FREyOdzvcy a5QBqJnnLDMfOjsl0oZAzjsshnjJYS8Uuu7bVW/fhO4FCU29KNhyztNiUGUe65KXgzHZs7XKR1g/ XzCCBUkwggQxoAMCAQICDCFEwxkoxpWFSXQM7zANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJC RTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTExMC8GA1UEAxMoR2xvYmFsU2lnbiBHQ0MgUjMg UGVyc29uYWxTaWduIDIgQ0EgMjAyMDAeFw0yMTAyMjIxNDA4NDlaFw0yMjA5MjIxNDMwNTZaMIGM MQswCQYDVQQGEwJJTjESMBAGA1UECBMJS2FybmF0YWthMRIwEAYDVQQHEwlCYW5nYWxvcmUxFjAU BgNVBAoTDUJyb2FkY29tIEluYy4xFDASBgNVBAMTC1JvbWFuIEJhY2lrMScwJQYJKoZIhvcNAQkB Fhhyb21hbi5iYWNpa0Bicm9hZGNvbS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQDjz0l/8twCYGN0z9Sq+zp3YdbAIb1oxv1D69gAlA9kgZXJL/jItncBCmZvwQU+2zbHpWisfn88 9rKAgzhnlhnJFGIxgsEs3r0jQBhT8LoqL1MZMXKV0ih5ZvH0SQJi+bZD0BZH8tVLFHFcUIYAoRdQ tSCGGcVmzhvTC99CIpuW3URgSPD/01DNG0OsdH+bZ2VpSzl7DoW0S+AQwrffRv+lkWfTbUU+o+CE 6kRRYRlzjF1rVR3PZvtVpwKTcWvwqez9YnB5W7zFh0J6WXsQJsLKZoRNvv4VXAk2vycIsWR+aeNb l0x6vipMzcE90s2JZ/wqJlxX8dutql3gueCzZ2SxAgMBAAGjggHZMIIB1TAOBgNVHQ8BAf8EBAMC BaAwgaMGCCsGAQUFBwEBBIGWMIGTME4GCCsGAQUFBzAChkJodHRwOi8vc2VjdXJlLmdsb2JhbHNp Z24uY29tL2NhY2VydC9nc2djY3IzcGVyc29uYWxzaWduMmNhMjAyMC5jcnQwQQYIKwYBBQUHMAGG NWh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjNwZXJzb25hbHNpZ24yY2EyMDIwME0G A1UdIARGMEQwQgYKKwYBBAGgMgEoCjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxz aWduLmNvbS9yZXBvc2l0b3J5LzAJBgNVHRMEAjAAMEkGA1UdHwRCMEAwPqA8oDqGOGh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5jb20vZ3NnY2NyM3BlcnNvbmFsc2lnbjJjYTIwMjAuY3JsMCMGA1UdEQQc MBqBGHJvbWFuLmJhY2lrQGJyb2FkY29tLmNvbTATBgNVHSUEDDAKBggrBgEFBQcDBDAfBgNVHSME GDAWgBSWM9HmWBdbNHWKgVZk1b5I3qGPzzAdBgNVHQ4EFgQUFIRMHHEZDi127CpeMcPLPgCva8Aw DQYJKoZIhvcNAQELBQADggEBAJ3AlGS8SnTzvdaHc1sGWw7/pdUpzU59NLy5p827v5YbcxopZQPL v2q6YbcQTpQnxVa++htLqp+WyOb3PTzydNsHb5B++mR/jz9/+mJsa7yvtLkcDDcQrOfrZus6usQs oGwMj7g7D2OvJHuBtBRpqnKDRO4Wi7MHuGDfW6Wm+YJ3iibIl8OPWiqXlfOlkYxAaZcAAW84IeeM umNUQbWNMoBfa5qSHxe3ZWGNFZWnpTN7vp4rmu8Z1qrZGrSVc9IO3z+3/AD9GdYdelj8miFNczvR 0iiTaHiP8f5hiC8LUlKosTub10tap8TP0SCcuXM5RgS1q9QJ/zmwbg1zPbTTGkgxggJtMIICaQIB ATBrMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhH bG9iYWxTaWduIEdDQyBSMyBQZXJzb25hbFNpZ24gMiBDQSAyMDIwAgwhRMMZKMaVhUl0DO8wDQYJ YIZIAWUDBAIBBQCggdQwLwYJKoZIhvcNAQkEMSIEIBbyLtE3Wh9PlYXuaL7MaEwQDkz7AfxUIO11 Lp/ZYn2iMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIxMTEwOTAw NDg0N1owaQYJKoZIhvcNAQkPMVwwWjALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl AwQBAjAKBggqhkiG9w0DBzALBgkqhkiG9w0BAQowCwYJKoZIhvcNAQEHMAsGCWCGSAFlAwQCATAN BgkqhkiG9w0BAQEFAASCAQAB3KA4IbezY5AS5PMYaVwIUN1WywhV+WurtoSGUU7jNa5ung3CUy9/ R6pQcJg+cziF54kEpnEk1UJWZEyS4EXLH4D9NnaeYub+xDR/QJrsIYL+TdowPdNUSwWGxRP6fbb3 yOdD8hKlhaDc9VGWVaX7FR/hO2xG0r+9f+2WvAlNqZ0BII8DUBx8gMR5Ifhxta+7AgV5Q1CN+zi5 lboi5iVxml/srxYJUn0HKXMgjU29oKotN4b4X6obEqZ5/KxOYnWZBHANvGrWk5YJbQIaHqqn/Tmc 2aZ2L0TnYRY7Wi0UesgAAfBMJE7itCXup+WWMJkvERkl1f96gjl9MQZLk4S6 --000000000000e6797605d050783a--