From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 66F3D41C53;
	Thu,  9 Feb 2023 17:48:00 +0100 (CET)
Received: from mails.dpdk.org (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 53F5E42670;
	Thu,  9 Feb 2023 17:48:00 +0100 (CET)
Received: from mail-oi1-f169.google.com (mail-oi1-f169.google.com
 [209.85.167.169])
 by mails.dpdk.org (Postfix) with ESMTP id 78C374161A
 for <dev@dpdk.org>; Thu,  9 Feb 2023 17:47:58 +0100 (CET)
Received: by mail-oi1-f169.google.com with SMTP id cz14so2115091oib.12
 for <dev@dpdk.org>; Thu, 09 Feb 2023 08:47:58 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=nGbPoGAGcdy55aM0Ov8Ey0itL0JzFj0IJAzYN4SZxkk=;
 b=idFk/4laWcviHpJp5gdaLlHG7vaOcsfad4vX8Q5Mcr0zfpCusywusSggypcKUCCAKy
 /+k+rt/yXPIAh5NUV4Dswp2locfXp5Fk2/vsCcMzCYP47P+qOpfvZmCFsKzFqKeQ2oii
 UQGYggrRMJlnZqfu5J7LEN7BRhr1k9uz0D8wI=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=nGbPoGAGcdy55aM0Ov8Ey0itL0JzFj0IJAzYN4SZxkk=;
 b=GkfKebN226wPyuQyKPDD3a+uJEgVsQuYiPX9FjU++GMXKcZgGg1wSlC2iUbVkyDxRB
 Xwl1yfEnG3prt1hvseHbK5B9Vg10TpXp/C1dYivILNA+gguq7/nPjYL4JFIRm27lcXK1
 bK1OpEa76DJSwAewY50ExRldyhOx1UD36LZLeEXqaJfa7XZtJ6zuod8YSohLjEbShKka
 /sv3YywR6V8Ua/zBPbRerrL+gyFtBmZymJtM793jApboDiQL/cDnIIR8vAfWKOCngvbd
 vflVQAcXW8/Z2uuKoh2U3Lmsa2UgR/GkTCN75QOlWnI+ZJSMG3jRTqha02C5qlcCucEQ
 KrZg==
X-Gm-Message-State: AO0yUKUMzW8XxM+SB5TEZTDp/1jnuT1EoLqxdStsx75hpxnYZhxeaPnB
 ok071AK2L1YkzMjWxNRhWFhvXOTcjijUjlyP3BKuOQ==
X-Google-Smtp-Source: AK7set/AyAhHuKbZNIjbmbiucuZFUpcMOahMVGsNrZGGRbFLUJVBqvSWKDfQQQF5j7iZGVVcf8xZGewGkZCDHyeySac=
X-Received: by 2002:a05:6808:11c5:b0:37b:73b1:fae with SMTP id
 p5-20020a05680811c500b0037b73b10faemr827987oiv.269.1675961276274; Thu, 09 Feb
 2023 08:47:56 -0800 (PST)
MIME-Version: 1.0
References: <20221114165438.1133783-1-juraj.linkes@pantheon.tech>
 <20230117154906.860916-1-juraj.linkes@pantheon.tech>
 <CAHx6DYCM4=9q68s7CLhm+ZR_ZBT20JBVkmCXyuDSotkHabT6yw@mail.gmail.com>
In-Reply-To: <CAHx6DYCM4=9q68s7CLhm+ZR_ZBT20JBVkmCXyuDSotkHabT6yw@mail.gmail.com>
From: Patrick Robb <probb@iol.unh.edu>
Date: Thu, 9 Feb 2023 11:47:45 -0500
Message-ID: <CAJvnSUD-TpZO17fAxyHUq6QtOaHFZ-CFiCKeksX7XmR3G4aPLw@mail.gmail.com>
Subject: Re: [PATCH v3 00/10] dts: add hello world testcase
To: Owen Hilyard <ohilyard@iol.unh.edu>
Cc: =?UTF-8?Q?Juraj_Linke=C5=A1?= <juraj.linkes@pantheon.tech>, 
 thomas@monjalon.net, Honnappa.Nagarahalli@arm.com, lijuan.tu@intel.com, 
 bruce.richardson@intel.com, dev@dpdk.org
Content-Type: multipart/alternative; boundary="00000000000087b18305f447242b"
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

--00000000000087b18305f447242b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Jan 19, 2023 at 11:16 AM Owen Hilyard <ohilyard@iol.unh.edu> wrote:

> Everything looks good to me with the exception of some issues I ran into
> with terminal codes. Setting TERM=3Ddumb before running fixed it, but we
> might want to set that inside of DTS since I can't think of a reason why =
we
> would need colors or any of the other "fancy" features of the vt220, and
> setting everything to teletype mode should make our lives easier when
> parsing output.
>
> I think that later on it might make sense to have "CPU" be a device class
> like NIC or Cryptodev, but that can be revisited once we get closer to
> interacting with hardware.
>
> On Tue, Jan 17, 2023 at 10:49 AM Juraj Linke=C5=A1 <juraj.linkes@pantheon=
.tech>
> wrote:
>
>> Add code needed to run the HelloWorld testcase which just runs the hello
>> world dpdk application.
>>
>> The patchset currently heavily refactors this original DTS code needed
>> to run the testcase:
>> * The whole architecture has been redone into more sensible class
>>   hierarchy
>> * DPDK build on the System under Test
>> * DPDK eal args construction, app running and shutting down
>> * SUT hugepage memory configuration
>> * Test runner
>> * Test results
>> * TestSuite class
>> * Test runner parts interfacing with TestSuite
>> * The HelloWorld testsuite itself
>>
>> The code is divided into sub-packages, some of which are divided
>> further.
>>
>> There patch may need to be divided into smaller chunks. If so, proposals
>> on where exactly to split it would be very helpful.
>>
>> v3:
>> Finished refactoring everything in this patch, with test suite and test
>> results being the last parts.
>> Also changed the directory structure. It's now simplified and the
>> imports look much better.
>> I've also many many minor changes such as renaming variables here and
>> there.
>>
>> Juraj Linke=C5=A1 (10):
>>   dts: add node and os abstractions
>>   dts: add ssh command verification
>>   dts: add dpdk build on sut
>>   dts: add dpdk execution handling
>>   dts: add node memory setup
>>   dts: add test suite module
>>   dts: add hello world testplan
>>   dts: add hello world testsuite
>>   dts: add test suite config and runner
>>   dts: add test results module
>>
>>  dts/conf.yaml                                 |  19 +-
>>  dts/framework/config/__init__.py              | 132 +++++++-
>>  dts/framework/config/arch.py                  |  57 ++++
>>  dts/framework/config/conf_yaml_schema.json    | 150 ++++++++-
>>  dts/framework/dts.py                          | 185 ++++++++--
>>  dts/framework/exception.py                    | 100 +++++-
>>  dts/framework/logger.py                       |  24 +-
>>  dts/framework/remote_session/__init__.py      |  30 +-
>>  dts/framework/remote_session/linux_session.py | 114 +++++++
>>  dts/framework/remote_session/os_session.py    | 177 ++++++++++
>>  dts/framework/remote_session/posix_session.py | 221 ++++++++++++
>>  .../remote_session/remote/__init__.py         |  16 +
>>  .../remote_session/remote/remote_session.py   | 155 +++++++++
>>  .../{ =3D> remote}/ssh_session.py               |  91 ++++-
>>  .../remote_session/remote_session.py          |  95 ------
>>  dts/framework/settings.py                     |  79 ++++-
>>  dts/framework/test_result.py                  | 316 ++++++++++++++++++
>>  dts/framework/test_suite.py                   | 254 ++++++++++++++
>>  dts/framework/testbed_model/__init__.py       |  20 +-
>>  dts/framework/testbed_model/dpdk.py           |  78 +++++
>>  dts/framework/testbed_model/hw/__init__.py    |  27 ++
>>  dts/framework/testbed_model/hw/cpu.py         | 253 ++++++++++++++
>>  .../testbed_model/hw/virtual_device.py        |  16 +
>>  dts/framework/testbed_model/node.py           | 165 +++++++--
>>  dts/framework/testbed_model/sut_node.py       | 261 +++++++++++++++
>>  dts/framework/utils.py                        |  39 ++-
>>  dts/test_plans/hello_world_test_plan.rst      |  68 ++++
>>  dts/tests/TestSuite_hello_world.py            |  59 ++++
>>  28 files changed, 2998 insertions(+), 203 deletions(-)
>>  create mode 100644 dts/framework/config/arch.py
>>  create mode 100644 dts/framework/remote_session/linux_session.py
>>  create mode 100644 dts/framework/remote_session/os_session.py
>>  create mode 100644 dts/framework/remote_session/posix_session.py
>>  create mode 100644 dts/framework/remote_session/remote/__init__.py
>>  create mode 100644 dts/framework/remote_session/remote/remote_session.p=
y
>>  rename dts/framework/remote_session/{ =3D> remote}/ssh_session.py (65%)
>>  delete mode 100644 dts/framework/remote_session/remote_session.py
>>  create mode 100644 dts/framework/test_result.py
>>  create mode 100644 dts/framework/test_suite.py
>>  create mode 100644 dts/framework/testbed_model/dpdk.py
>>  create mode 100644 dts/framework/testbed_model/hw/__init__.py
>>  create mode 100644 dts/framework/testbed_model/hw/cpu.py
>>  create mode 100644 dts/framework/testbed_model/hw/virtual_device.py
>>  create mode 100644 dts/framework/testbed_model/sut_node.py
>>  create mode 100644 dts/test_plans/hello_world_test_plan.rst
>>  create mode 100644 dts/tests/TestSuite_hello_world.py
>>
>> --
>> 2.30.2
>>
>>
Tested-by: Patrick Robb <probb@iol.unh.edu>
--=20

Patrick Robb

Technical Service Manager

UNH InterOperability Laboratory

21 Madbury Rd, Suite 100, Durham, NH 03824

www.iol.unh.edu

--00000000000087b18305f447242b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Thu, Jan 19, 2023 at 11:16 AM Owen=
 Hilyard &lt;<a href=3D"mailto:ohilyard@iol.unh.edu" target=3D"_blank">ohil=
yard@iol.unh.edu</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" =
style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pa=
dding-left:1ex"><div dir=3D"ltr">Everything looks good to me with the excep=
tion of some issues I ran into with terminal codes. Setting TERM=3Ddumb bef=
ore running fixed it, but we might want to set that inside of DTS since I c=
an&#39;t think of a reason why we would need colors or any of the other &qu=
ot;fancy&quot; features of the=C2=A0vt220, and setting everything to telety=
pe mode should make our lives easier when parsing output.<div><br></div><di=
v>I think that later on it might make sense to have &quot;CPU&quot; be a de=
vice class like NIC or Cryptodev, but that can be revisited once we get clo=
ser to interacting with hardware.=C2=A0</div></div><br><div class=3D"gmail_=
quote"><div dir=3D"ltr" class=3D"gmail_attr">On Tue, Jan 17, 2023 at 10:49 =
AM Juraj Linke=C5=A1 &lt;juraj.linkes@pantheon.tech&gt; wrote:<br></div><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t:1px solid rgb(204,204,204);padding-left:1ex">Add code needed to run the H=
elloWorld testcase which just runs the hello<br>
world dpdk application.<br>
<br>
The patchset currently heavily refactors this original DTS code needed<br>
to run the testcase:<br>
* The whole architecture has been redone into more sensible class<br>
=C2=A0 hierarchy<br>
* DPDK build on the System under Test<br>
* DPDK eal args construction, app running and shutting down<br>
* SUT hugepage memory configuration<br>
* Test runner<br>
* Test results<br>
* TestSuite class<br>
* Test runner parts interfacing with TestSuite<br>
* The HelloWorld testsuite itself<br>
<br>
The code is divided into sub-packages, some of which are divided<br>
further.<br>
<br>
There patch may need to be divided into smaller chunks. If so, proposals<br=
>
on where exactly to split it would be very helpful.<br>
<br>
v3:<br>
Finished refactoring everything in this patch, with test suite and test<br>
results being the last parts.<br>
Also changed the directory structure. It&#39;s now simplified and the<br>
imports look much better.<br>
I&#39;ve also many many minor changes such as renaming variables here and<b=
r>
there.<br>
<br>
Juraj Linke=C5=A1 (10):<br>
=C2=A0 dts: add node and os abstractions<br>
=C2=A0 dts: add ssh command verification<br>
=C2=A0 dts: add dpdk build on sut<br>
=C2=A0 dts: add dpdk execution handling<br>
=C2=A0 dts: add node memory setup<br>
=C2=A0 dts: add test suite module<br>
=C2=A0 dts: add hello world testplan<br>
=C2=A0 dts: add hello world testsuite<br>
=C2=A0 dts: add test suite config and runner<br>
=C2=A0 dts: add test results module<br>
<br>
=C2=A0dts/conf.yaml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 19 +-=
<br>
=C2=A0dts/framework/config/__init__.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 | 132 +++++++-<br>
=C2=A0dts/framework/config/arch.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 57 ++++<br>
=C2=A0dts/framework/config/conf_yaml_schema.json=C2=A0 =C2=A0 | 150 +++++++=
+-<br>
=C2=A0dts/framework/dts.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 185 ++++++++--<br>
=C2=A0dts/framework/exception.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 | 100 +++++-<br>
=C2=A0dts/framework/logger.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 24 +-<br>
=C2=A0dts/framework/remote_session/__init__.py=C2=A0 =C2=A0 =C2=A0 |=C2=A0 =
30 +-<br>
=C2=A0dts/framework/remote_session/linux_session.py | 114 +++++++<br>
=C2=A0dts/framework/remote_session/os_session.py=C2=A0 =C2=A0 | 177 +++++++=
+++<br>
=C2=A0dts/framework/remote_session/posix_session.py | 221 ++++++++++++<br>
=C2=A0.../remote_session/remote/__init__.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0|=C2=A0 16 +<br>
=C2=A0.../remote_session/remote/remote_session.py=C2=A0 =C2=A0| 155 +++++++=
++<br>
=C2=A0.../{ =3D&gt; remote}/ssh_session.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 91 ++++-<br>
=C2=A0.../remote_session/remote_session.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 |=C2=A0 95 ------<br>
=C2=A0dts/framework/settings.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 79 ++++-<br>
=C2=A0dts/framework/test_result.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 | 316 ++++++++++++++++++<br>
=C2=A0dts/framework/test_suite.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0| 254 ++++++++++++++<br>
=C2=A0dts/framework/testbed_model/__init__.py=C2=A0 =C2=A0 =C2=A0 =C2=A0|=
=C2=A0 20 +-<br>
=C2=A0dts/framework/testbed_model/dpdk.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0|=C2=A0 78 +++++<br>
=C2=A0dts/framework/testbed_model/hw/__init__.py=C2=A0 =C2=A0 |=C2=A0 27 ++=
<br>
=C2=A0dts/framework/testbed_model/hw/cpu.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0| 253 ++++++++++++++<br>
=C2=A0.../testbed_model/hw/virtual_device.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 |=
=C2=A0 16 +<br>
=C2=A0dts/framework/testbed_model/node.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0| 165 +++++++--<br>
=C2=A0dts/framework/testbed_model/sut_node.py=C2=A0 =C2=A0 =C2=A0 =C2=A0| 2=
61 +++++++++++++++<br>
=C2=A0dts/framework/utils.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 39 ++-<br>
=C2=A0dts/test_plans/hello_world_test_plan.rst=C2=A0 =C2=A0 =C2=A0 |=C2=A0 =
68 ++++<br>
=C2=A0dts/tests/TestSuite_hello_world.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 |=C2=A0 59 ++++<br>
=C2=A028 files changed, 2998 insertions(+), 203 deletions(-)<br>
=C2=A0create mode 100644 dts/framework/config/arch.py<br>
=C2=A0create mode 100644 dts/framework/remote_session/linux_session.py<br>
=C2=A0create mode 100644 dts/framework/remote_session/os_session.py<br>
=C2=A0create mode 100644 dts/framework/remote_session/posix_session.py<br>
=C2=A0create mode 100644 dts/framework/remote_session/remote/__init__.py<br=
>
=C2=A0create mode 100644 dts/framework/remote_session/remote/remote_session=
.py<br>
=C2=A0rename dts/framework/remote_session/{ =3D&gt; remote}/ssh_session.py =
(65%)<br>
=C2=A0delete mode 100644 dts/framework/remote_session/remote_session.py<br>
=C2=A0create mode 100644 dts/framework/test_result.py<br>
=C2=A0create mode 100644 dts/framework/test_suite.py<br>
=C2=A0create mode 100644 dts/framework/testbed_model/dpdk.py<br>
=C2=A0create mode 100644 dts/framework/testbed_model/hw/__init__.py<br>
=C2=A0create mode 100644 dts/framework/testbed_model/hw/cpu.py<br>
=C2=A0create mode 100644 dts/framework/testbed_model/hw/virtual_device.py<b=
r>
=C2=A0create mode 100644 dts/framework/testbed_model/sut_node.py<br>
=C2=A0create mode 100644 dts/test_plans/hello_world_test_plan.rst<br>
=C2=A0create mode 100644 dts/tests/TestSuite_hello_world.py<br>
<br>
-- <br>
2.30.2<br>
<br>
</blockquote></div>
</blockquote></div><br clear=3D"all"><div>Tested-by: Patrick Robb &lt;<a hr=
ef=3D"mailto:probb@iol.unh.edu" target=3D"_blank">probb@iol.unh.edu</a>&gt;=
<br></div>-- <br><div dir=3D"ltr"><div dir=3D"ltr"><p dir=3D"ltr" style=3D"=
line-height:1.2;margin-top:0pt;margin-bottom:0pt"><font color=3D"#000000" f=
ace=3D"Arial"><span style=3D"font-size:13.3333px;white-space:pre-wrap">Patr=
ick Robb</span></font></p><p style=3D"color:rgb(34,34,34);line-height:1.2;m=
argin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:=
Arial;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline=
;white-space:pre-wrap">Technical Service Manager</span></p><p dir=3D"ltr" s=
tyle=3D"color:rgb(34,34,34);line-height:1.2;margin-top:0pt;margin-bottom:0p=
t"><span style=3D"font-size:10pt;font-family:Arial;color:rgb(0,0,0);backgro=
und-color:transparent;vertical-align:baseline;white-space:pre-wrap">UNH Int=
erOperability Laboratory</span></p><p dir=3D"ltr" style=3D"color:rgb(34,34,=
34);line-height:1.2;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-s=
ize:10pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;ve=
rtical-align:baseline;white-space:pre-wrap">21 Madbury Rd, Suite 100, Durha=
m, NH 03824</span></p><p dir=3D"ltr" style=3D"color:rgb(34,34,34);line-heig=
ht:1.2;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font=
-family:Arial;color:rgb(17,85,204);background-color:transparent;vertical-al=
ign:baseline;white-space:pre-wrap"><a href=3D"http://www.iol.unh.edu/" styl=
e=3D"color:rgb(17,85,204)" target=3D"_blank">www.iol.unh.edu</a></span></p>=
<p dir=3D"ltr" style=3D"color:rgb(34,34,34);line-height:1.2;margin-top:0pt;=
margin-bottom:0pt"><br></p><p dir=3D"ltr" style=3D"color:rgb(34,34,34);line=
-height:1.2;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt=
;font-family:Arial;color:rgb(51,51,51);background-color:transparent;vertica=
l-align:baseline;white-space:pre-wrap"><img src=3D"https://lh4.googleuserco=
ntent.com/7sTY8VswXadak_YT0J13osh5ockNVRX2BuYaRsKoTTpkpilBokA0WlocYHLB4q7XU=
gXNHka6-ns47S8R_am0sOt7MYQQ1ILQ3S-P5aezsrjp3-IsJMmMrErHWmTARNgZhpAx06n2" wi=
dth=3D"150" height=3D"37" style=3D"border:none"></span></p></div></div></di=
v>

--00000000000087b18305f447242b--