Re: chipsec-1.5.0 in EFI Shell

Holtsclaw, Brent <[email protected]> Tue, 29 Dec 2020 17:59:00 +0000
Newsgroups dev.linux.lists.oe-chipsec
Message-ID <MW3PR11MB47467F7E6BC2FE277003885DFBD80@MW3PR11MB4746.namprd11.prod.outlook.com>
--===============6874041782243895695==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Please try putting the chipsec files in a chipsec folder and running.  Ther=
e have been problems in the past when the chipsec files are placed within t=
he root directory.

Thanks,
Brent

From: Vorname Nachname <[email protected]>
Sent: Friday, June 5, 2020 2:20 AM
To: chipsec(a)lists.01.org
Subject: [chipsec] Re: chipsec-1.5.0 in EFI Shell

Hello,

I saw a new chipsec version 1.5.1 is released now. I followed the instructi=
ons
from chipsec-manual.pdf and used the python version from chipsec archive. I=
 took
the shell from edk2 package again. See this both links:

https://github.com/chipsec/chipsec/archive/1.5.1.tar.gz
https://github.com/tianocore/edk2/archive/edk2-stable201903.tar.gz

I got almost the same error as before with a different number. I attached a
screenshot.

Can anyone verify this issue?

Best Regards,
Philipp

Am Fr., 29. Mai 2020 um 17:16 Uhr schrieb Vorname Nachname <ldevlzero(a)gma=
il.com<mailto:[email protected]>>:
Hello,

Many thanks for the quick answers. I followed the instructions from the chi=
psec-manual.pdf of chipsec-1.5.0. In my first test I used python version fr=
om chipsec-1.5.0 (chipsec_uefi_x64.zip) and UEFI-Shell from edk2 release 20=
19-03-08 (https://github.com/tianocore/edk2/archive/edk2-stable201903.tar.g=
z). This includes a precompiled UEFI-Shell binary which I used (edk2-edk2-s=
table201903/ShellBinPkg/UefiShell/X64). With this setup I got this error:

OSError: [Errno 22] Invalid argument: 'FS0:FS0:chipsec'

Can you tell me your working setup (UEFI-Binary and pyhton version)?

Best regards
Philipp

Am Fr., 29. Mai 2020 um 17:13 Uhr schrieb Vorname Nachname <ldevlzero(a)gma=
il.com<mailto:[email protected]>>:
Hello,

Many thanks for the quick answers. I followed the instructions from the chi=
psec-manual.pdf of chipsec-1.5.0. In my first test I used python version fr=
om chipsec-1.5.0 (chipsec_uefi_x64.zip) and UEFI-Shell from edk2 release 20=
19-03-08 (https://github.com/tianocore/edk2/archive/edk2-stable201903.tar.g=
z). This includes a precompiled UEFI-Shell binary which I used (edk2-edk2-s=
table201903/ShellBinPkg/UefiShell/X64). With this setup I got this error:

OSError: [Errno 22] Invalid argument: 'FS0:FS0:chipsec'

Can you tell me your working setup (UEFI-Binary and pyhton version)?

Best regards
Philipp

Am Fr., 29. Mai 2020 um 00:24 Uhr schrieb Holtsclaw, Brent <brent.holtsclaw=
(a)intel.com<mailto:[email protected]>>:
Did you follow the instructions from https://github.com/chipsec/chipsec/wik=
i/Creating-a-Bootable-USB-drive-with-UEFI-Shell?  They should have enough i=
nformation to help out.  It sounds like UEFI SHELL is not the problem in th=
is case.  Can you elaborate on the python that you are using.  There is a p=
ython.efi module within the chipsec_uefi zipfile.  Python has been modified=
 to include some chipsec specific commands with chipsec.  There are steps t=
o reproduce the build, however I'm not sure that they work with the latest =
EDK and you may need to build from an older version.  To my knowledge the c=
ode within chipsec is still compatible with python2 at this point and you s=
hould be able to use 1.5.0.  If you can run chipsec with the debug flag and=
 let us know where it is failing that would help.

Thanks,
Brent

-----Original Message-----
From: Blibbet <blibbet(a)gmail.com<mailto:[email protected]>>
Sent: Thursday, May 28, 2020 2:55 PM
To: Vorname Nachname <ldevlzero(a)gmail.com<mailto:[email protected]>>
Cc: chipsec(a)lists.01.org<mailto:[email protected]>
Subject: [chipsec] Re: chipsec-1.5.0 in EFI Shell

What UEFI Shell are you using? "EFI Shell" may mean an ancient one. I think=
 I recall some thread where someone was trying to get CHIPSEC running using=
 an old (1.x?) OEM's shell (Apple?), and they had to provide their own inst=
ead. There is an older and a newer UEFI Shell.

You should also include info about other Python code you were able to succe=
ssfully run in this EFI Shell. Maybe CHIPSEC is not the issue, the issue is=
 your EFI Shell and Python.

Instead of building your own UEFI Python, what happens when you use the CHI=
PSEC instructions and use their supplied python.efi? Wasn't there some spec=
ial CHIPSEC-centric options needed to build Python with? If so, that should=
 be clarified better in build docs.

(Granted, it sucks having a security tool ship a pre-compiled Python binary=
 in their source tree, built in an unknown manner, with no checksums, and n=
o reproducable builds, and have the tool rely on this for determining platf=
orm security. But that's another issue...)

Intel has abandoned CPython V2 for UEFI patch, and is instead is working on=
 MicroPython for UEFI (which has some Python V3 support). Though Python V2 =
is deprecated and most of world has moved to Python V3, CHIPSEC team is sti=
ll using/bundling CPython V2, and hasn't switched over to using/relying-on/=
bundling MicroPython for UEFI.

FWIW, I rarely see replies from the team for support questions on this mail=
ing list nor the Google Groups lists. It I was looking for a reply, I'd fil=
e a Github issue (and include more info), or use Twitter.

You might want to clarify that you're trying to run this on an Intel system=
, not another ISA (like AMD or ARM or RISC-V), as that'd also not work.

HTH,
Lee

On 5/28/20 7:36 AM, Vorname Nachname wrote:
> Hello,
>
> I tried to run chipsec-1.5.0 in EFI Shell without operating system but
> unfortunately it doesn't run in the EFI Shell. I ran these commands:
>
> Shell> fs0:
> FS0:\> python -^# chipsec_main.py -m debugenabled
>
> This results in a traceback with the last file chipsec/defines.py
> called function get_version().
>
> OSError: [Errno 22] Invalud argument: 'FS0:FS0:chipsec'
>
> After that I compiled python 2.7.2 and python 2.7.10 from edk2 package
> version edk2-stable201903. This is the last package version with
> pyhton inside. With this version of pyhton I received another error
> message with the last line:
>
> ImportError: No module named expat; use SimpleXMLTreeBuilder instead.
>
> What is the best way to start the latest version of chipsec in the EFI
> Shell? What version of EFI Shell and pyhton is required?
>
> best wishes
> Philipp
>
>
> _______________________________________________
> chipsec mailing list -- chipsec(a)lists.01.org<mailto:[email protected].=
org> To unsubscribe send an
> email to chipsec-leave(a)lists.01.org<mailto:[email protected]>
_______________________________________________
chipsec mailing list -- chipsec(a)lists.01.org<mailto:[email protected]=
g> To unsubscribe send an email to chipsec-leave(a)lists.01.org<mailto:chip=
[email protected]>
_______________________________________________
chipsec mailing list -- chipsec(a)lists.01.org<mailto:[email protected]=
g>
To unsubscribe send an email to chipsec-leave(a)lists.01.org<mailto:chipsec=
[email protected]>

--===============6874041782243895695==
Content-Type: text/html
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="attachment.htm"

PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy
bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt
YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj
cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg
Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv
ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxl
PjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6
IkNhbWJyaWEgTWF0aCI7DQoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1m
YWNlDQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQoJcGFub3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAy
IDQ7fQ0KLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCnAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWws
IGRpdi5Nc29Ob3JtYWwNCgl7bWFyZ2luOjBpbjsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJ
Zm9udC1zaXplOjExLjBwdDsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjt9DQph
OmxpbmssIHNwYW4uTXNvSHlwZXJsaW5rDQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsNCgljb2xv
cjpibHVlOw0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0Kc3Bhbi5FbWFpbFN0eWxlMTgN
Cgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7DQoJZm9udC1mYW1pbHk6IkNhbGlicmki
LHNhbnMtc2VyaWY7DQoJY29sb3I6d2luZG93dGV4dDt9DQouTXNvQ2hwRGVmYXVsdA0KCXttc28t
c3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglmb250LXNpemU6MTAuMHB0Ow0KCWZvbnQtZmFtaWx5
OiJDYWxpYnJpIixzYW5zLXNlcmlmO30NCkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjguNWlu
IDExLjBpbjsNCgltYXJnaW46MS4waW4gMS4waW4gMS4waW4gMS4waW47fQ0KZGl2LldvcmRTZWN0
aW9uMQ0KCXtwYWdlOldvcmRTZWN0aW9uMTt9DQotLT48L3N0eWxlPjwhLS1baWYgZ3RlIG1zbyA5
XT48eG1sPg0KPG86c2hhcGVkZWZhdWx0cyB2OmV4dD0iZWRpdCIgc3BpZG1heD0iMTAyNiIgLz4N
CjwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KPG86c2hhcGVsYXlv
dXQgdjpleHQ9ImVkaXQiPg0KPG86aWRtYXAgdjpleHQ9ImVkaXQiIGRhdGE9IjEiIC8+DQo8L286
c2hhcGVsYXlvdXQ+PC94bWw+PCFbZW5kaWZdLS0+DQo8L2hlYWQ+DQo8Ym9keSBsYW5nPSJFTi1V
UyIgbGluaz0iYmx1ZSIgdmxpbms9InB1cnBsZSI+DQo8ZGl2IGNsYXNzPSJXb3JkU2VjdGlvbjEi
Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+UGxlYXNlIHRyeSBwdXR0aW5nIHRoZSBjaGlwc2VjIGZp
bGVzIGluIGEgY2hpcHNlYyBmb2xkZXIgYW5kIHJ1bm5pbmcuJm5ic3A7IFRoZXJlIGhhdmUgYmVl
biBwcm9ibGVtcyBpbiB0aGUgcGFzdCB3aGVuIHRoZSBjaGlwc2VjIGZpbGVzIGFyZSBwbGFjZWQg
d2l0aGluIHRoZSByb290IGRpcmVjdG9yeS4mbmJzcDsNCjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xh
c3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs
Ij5UaGFua3MsPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5CcmVudDxvOnA+
PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8
cCBjbGFzcz0iTXNvTm9ybWFsIj48Yj5Gcm9tOjwvYj4gVm9ybmFtZSBOYWNobmFtZSAmbHQ7bGRl
dmx6ZXJvQGdtYWlsLmNvbSZndDsgPGJyPg0KPGI+U2VudDo8L2I+IEZyaWRheSwgSnVuZSA1LCAy
MDIwIDI6MjAgQU08YnI+DQo8Yj5Ubzo8L2I+IGNoaXBzZWNAbGlzdHMuMDEub3JnPGJyPg0KPGI+
U3ViamVjdDo8L2I+IFtjaGlwc2VjXSBSZTogY2hpcHNlYy0xLjUuMCBpbiBFRkkgU2hlbGw8bzpw
PjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0K
PGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPkhlbGxvLDxicj4NCjxicj4NCkkgc2F3IGEgbmV3
IGNoaXBzZWMgdmVyc2lvbiAxLjUuMSBpcyByZWxlYXNlZCBub3cuIEkgZm9sbG93ZWQgdGhlIGlu
c3RydWN0aW9uczxicj4NCmZyb20gY2hpcHNlYy1tYW51YWwucGRmIGFuZCB1c2VkIHRoZSBweXRo
b24gdmVyc2lvbiBmcm9tIGNoaXBzZWMgYXJjaGl2ZS4gSSB0b29rPGJyPg0KdGhlIHNoZWxsIGZy
b20gZWRrMiBwYWNrYWdlIGFnYWluLiBTZWUgdGhpcyBib3RoIGxpbmtzOjxicj4NCjxicj4NCjxh
IGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaGlwc2VjL2NoaXBzZWMvYXJjaGl2ZS8xLjUuMS50
YXIuZ3oiPmh0dHBzOi8vZ2l0aHViLmNvbS9jaGlwc2VjL2NoaXBzZWMvYXJjaGl2ZS8xLjUuMS50
YXIuZ3o8L2E+PGJyPg0KPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsy
L2FyY2hpdmUvZWRrMi1zdGFibGUyMDE5MDMudGFyLmd6Ij5odHRwczovL2dpdGh1Yi5jb20vdGlh
bm9jb3JlL2VkazIvYXJjaGl2ZS9lZGsyLXN0YWJsZTIwMTkwMy50YXIuZ3o8L2E+PGJyPg0KPGJy
Pg0KSSBnb3QgYWxtb3N0IHRoZSBzYW1lIGVycm9yIGFzIGJlZm9yZSB3aXRoIGEgZGlmZmVyZW50
IG51bWJlci4gSSBhdHRhY2hlZCBhPGJyPg0Kc2NyZWVuc2hvdC48YnI+DQo8YnI+DQpDYW4gYW55
b25lIHZlcmlmeSB0aGlzIGlzc3VlPzxicj4NCjxicj4NCkJlc3QgUmVnYXJkcyw8YnI+DQpQaGls
aXBwPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5i
c3A7PC9vOnA+PC9wPg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5BbSBGci4s
IDI5LiBNYWkgMjAyMCB1bSAxNzoxNiZuYnNwO1VociBzY2hyaWViIFZvcm5hbWUgTmFjaG5hbWUg
Jmx0OzxhIGhyZWY9Im1haWx0bzpsZGV2bHplcm9AZ21haWwuY29tIj5sZGV2bHplcm9AZ21haWwu
Y29tPC9hPiZndDs6PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxibG9ja3F1b3RlIHN0eWxlPSJi
b3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MGluIDBp
biAwaW4gNi4wcHQ7bWFyZ2luLWxlZnQ6NC44cHQ7bWFyZ2luLXRvcDo1LjBwdDttYXJnaW4tcmln
aHQ6MGluO21hcmdpbi1ib3R0b206NS4wcHQiPg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi
PkhlbGxvLDxicj4NCjxicj4NCk1hbnkgdGhhbmtzIGZvciB0aGUgcXVpY2sgYW5zd2Vycy4gSSBm
b2xsb3dlZCB0aGUgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIGNoaXBzZWMtbWFudWFsLnBkZiBvZiBj
aGlwc2VjLTEuNS4wLiBJbiBteSBmaXJzdCB0ZXN0IEkgdXNlZCBweXRob24gdmVyc2lvbiBmcm9t
IGNoaXBzZWMtMS41LjAgKGNoaXBzZWNfdWVmaV94NjQuemlwKSBhbmQgVUVGSS1TaGVsbCBmcm9t
IGVkazIgcmVsZWFzZSAyMDE5LTAzLTA4ICg8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGlh
bm9jb3JlL2VkazIvYXJjaGl2ZS9lZGsyLXN0YWJsZTIwMTkwMy50YXIuZ3oiIHRhcmdldD0iX2Js
YW5rIj5odHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazIvYXJjaGl2ZS9lZGsyLXN0YWJs
ZTIwMTkwMy50YXIuZ3o8L2E+KS4NCiBUaGlzIGluY2x1ZGVzIGEgcHJlY29tcGlsZWQgVUVGSS1T
aGVsbCBiaW5hcnkgd2hpY2ggSSB1c2VkIChlZGsyLWVkazItc3RhYmxlMjAxOTAzL1NoZWxsQmlu
UGtnL1VlZmlTaGVsbC9YNjQpLiBXaXRoIHRoaXMgc2V0dXAgSSBnb3QgdGhpcyBlcnJvcjo8YnI+
DQo8YnI+DQpPU0Vycm9yOiBbRXJybm8gMjJdIEludmFsaWQgYXJndW1lbnQ6ICdGUzA6RlMwOmNo
aXBzZWMnPGJyPg0KPGJyPg0KQ2FuIHlvdSB0ZWxsIG1lIHlvdXIgd29ya2luZyBzZXR1cCAoVUVG
SS1CaW5hcnkgYW5kIHB5aHRvbiB2ZXJzaW9uKT88YnI+DQo8YnI+DQpCZXN0IHJlZ2FyZHM8YnI+
DQpQaGlsaXBwPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxv
OnA+Jm5ic3A7PC9vOnA+PC9wPg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5B
bSBGci4sIDI5LiBNYWkgMjAyMCB1bSAxNzoxMyZuYnNwO1VociBzY2hyaWViIFZvcm5hbWUgTmFj
aG5hbWUgJmx0OzxhIGhyZWY9Im1haWx0bzpsZGV2bHplcm9AZ21haWwuY29tIiB0YXJnZXQ9Il9i
bGFuayI+bGRldmx6ZXJvQGdtYWlsLmNvbTwvYT4mZ3Q7OjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+
DQo8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgI0NDQ0ND
QyAxLjBwdDtwYWRkaW5nOjBpbiAwaW4gMGluIDYuMHB0O21hcmdpbi1sZWZ0OjQuOHB0O21hcmdp
bi10b3A6NS4wcHQ7bWFyZ2luLXJpZ2h0OjBpbjttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxkaXY+
DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5IZWxsbyw8YnI+DQo8YnI+DQpNYW55IHRoYW5rcyBmb3Ig
dGhlIHF1aWNrIGFuc3dlcnMuIEkgZm9sbG93ZWQgdGhlIGluc3RydWN0aW9ucyBmcm9tIHRoZSBj
aGlwc2VjLW1hbnVhbC5wZGYgb2YgY2hpcHNlYy0xLjUuMC4gSW4gbXkgZmlyc3QgdGVzdCBJIHVz
ZWQgcHl0aG9uIHZlcnNpb24gZnJvbSBjaGlwc2VjLTEuNS4wIChjaGlwc2VjX3VlZmlfeDY0Lnpp
cCkgYW5kIFVFRkktU2hlbGwgZnJvbSBlZGsyIHJlbGVhc2UgMjAxOS0wMy0wOCAoPGEgaHJlZj0i
aHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2FyY2hpdmUvZWRrMi1zdGFibGUyMDE5
MDMudGFyLmd6IiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9l
ZGsyL2FyY2hpdmUvZWRrMi1zdGFibGUyMDE5MDMudGFyLmd6PC9hPikuDQogVGhpcyBpbmNsdWRl
cyBhIHByZWNvbXBpbGVkIFVFRkktU2hlbGwgYmluYXJ5IHdoaWNoIEkgdXNlZCAoZWRrMi1lZGsy
LXN0YWJsZTIwMTkwMy9TaGVsbEJpblBrZy9VZWZpU2hlbGwvWDY0KS4gV2l0aCB0aGlzIHNldHVw
IEkgZ290IHRoaXMgZXJyb3I6PGJyPg0KPGJyPg0KT1NFcnJvcjogW0Vycm5vIDIyXSBJbnZhbGlk
IGFyZ3VtZW50OiAnRlMwOkZTMDpjaGlwc2VjJzxicj4NCjxicj4NCkNhbiB5b3UgdGVsbCBtZSB5
b3VyIHdvcmtpbmcgc2V0dXAgKFVFRkktQmluYXJ5IGFuZCBweWh0b24gdmVyc2lvbik/PGJyPg0K
PGJyPg0KQmVzdCByZWdhcmRzPGJyPg0KUGhpbGlwcDxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8
cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxkaXY+DQo8ZGl2Pg0K
PHAgY2xhc3M9Ik1zb05vcm1hbCI+QW0gRnIuLCAyOS4gTWFpIDIwMjAgdW0gMDA6MjQmbmJzcDtV
aHIgc2NocmllYiBIb2x0c2NsYXcsIEJyZW50ICZsdDs8YSBocmVmPSJtYWlsdG86YnJlbnQuaG9s
dHNjbGF3QGludGVsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmJyZW50LmhvbHRzY2xhd0BpbnRlbC5j
b208L2E+Jmd0Ozo8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGJsb2NrcXVvdGUgc3R5bGU9ImJv
cmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkICNDQ0NDQ0MgMS4wcHQ7cGFkZGluZzowaW4gMGlu
IDBpbiA2LjBwdDttYXJnaW4tbGVmdDo0LjhwdDttYXJnaW4tdG9wOjUuMHB0O21hcmdpbi1yaWdo
dDowaW47bWFyZ2luLWJvdHRvbTo1LjBwdCI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5EaWQgeW91
IGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGZyb20gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29t
L2NoaXBzZWMvY2hpcHNlYy93aWtpL0NyZWF0aW5nLWEtQm9vdGFibGUtVVNCLWRyaXZlLXdpdGgt
VUVGSS1TaGVsbCIgdGFyZ2V0PSJfYmxhbmsiPg0KaHR0cHM6Ly9naXRodWIuY29tL2NoaXBzZWMv
Y2hpcHNlYy93aWtpL0NyZWF0aW5nLWEtQm9vdGFibGUtVVNCLWRyaXZlLXdpdGgtVUVGSS1TaGVs
bDwvYT4/Jm5ic3A7IFRoZXkgc2hvdWxkIGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGhlbHAg
b3V0LiZuYnNwOyBJdCBzb3VuZHMgbGlrZSBVRUZJIFNIRUxMIGlzIG5vdCB0aGUgcHJvYmxlbSBp
biB0aGlzIGNhc2UuJm5ic3A7IENhbiB5b3UgZWxhYm9yYXRlIG9uIHRoZSBweXRob24gdGhhdCB5
b3UgYXJlIHVzaW5nLiZuYnNwOyBUaGVyZQ0KIGlzIGEgcHl0aG9uLmVmaSBtb2R1bGUgd2l0aGlu
IHRoZSBjaGlwc2VjX3VlZmkgemlwZmlsZS4mbmJzcDsgUHl0aG9uIGhhcyBiZWVuIG1vZGlmaWVk
IHRvIGluY2x1ZGUgc29tZSBjaGlwc2VjIHNwZWNpZmljIGNvbW1hbmRzIHdpdGggY2hpcHNlYy4m
bmJzcDsgVGhlcmUgYXJlIHN0ZXBzIHRvIHJlcHJvZHVjZSB0aGUgYnVpbGQsIGhvd2V2ZXIgSSdt
IG5vdCBzdXJlIHRoYXQgdGhleSB3b3JrIHdpdGggdGhlIGxhdGVzdCBFREsgYW5kIHlvdSBtYXkg
bmVlZCB0byBidWlsZA0KIGZyb20gYW4gb2xkZXIgdmVyc2lvbi4mbmJzcDsgVG8gbXkga25vd2xl
ZGdlIHRoZSBjb2RlIHdpdGhpbiBjaGlwc2VjIGlzIHN0aWxsIGNvbXBhdGlibGUgd2l0aCBweXRo
b24yIGF0IHRoaXMgcG9pbnQgYW5kIHlvdSBzaG91bGQgYmUgYWJsZSB0byB1c2UgMS41LjAuJm5i
c3A7IElmIHlvdSBjYW4gcnVuIGNoaXBzZWMgd2l0aCB0aGUgZGVidWcgZmxhZyBhbmQgbGV0IHVz
IGtub3cgd2hlcmUgaXQgaXMgZmFpbGluZyB0aGF0IHdvdWxkIGhlbHAuPGJyPg0KPGJyPg0KVGhh
bmtzLDxicj4NCkJyZW50PGJyPg0KPGJyPg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS08YnI+
DQpGcm9tOiBCbGliYmV0ICZsdDs8YSBocmVmPSJtYWlsdG86YmxpYmJldEBnbWFpbC5jb20iIHRh
cmdldD0iX2JsYW5rIj5ibGliYmV0QGdtYWlsLmNvbTwvYT4mZ3Q7DQo8YnI+DQpTZW50OiBUaHVy
c2RheSwgTWF5IDI4LCAyMDIwIDI6NTUgUE08YnI+DQpUbzogVm9ybmFtZSBOYWNobmFtZSAmbHQ7
PGEgaHJlZj0ibWFpbHRvOmxkZXZsemVyb0BnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5sZGV2
bHplcm9AZ21haWwuY29tPC9hPiZndDs8YnI+DQpDYzogPGEgaHJlZj0ibWFpbHRvOmNoaXBzZWNA
bGlzdHMuMDEub3JnIiB0YXJnZXQ9Il9ibGFuayI+Y2hpcHNlY0BsaXN0cy4wMS5vcmc8L2E+PGJy
Pg0KU3ViamVjdDogW2NoaXBzZWNdIFJlOiBjaGlwc2VjLTEuNS4wIGluIEVGSSBTaGVsbDxicj4N
Cjxicj4NCldoYXQgVUVGSSBTaGVsbCBhcmUgeW91IHVzaW5nPyAmcXVvdDtFRkkgU2hlbGwmcXVv
dDsgbWF5IG1lYW4gYW4gYW5jaWVudCBvbmUuIEkgdGhpbmsgSSByZWNhbGwgc29tZSB0aHJlYWQg
d2hlcmUgc29tZW9uZSB3YXMgdHJ5aW5nIHRvIGdldCBDSElQU0VDIHJ1bm5pbmcgdXNpbmcgYW4g
b2xkICgxLng/KSBPRU0ncyBzaGVsbCAoQXBwbGU/KSwgYW5kIHRoZXkgaGFkIHRvIHByb3ZpZGUg
dGhlaXIgb3duIGluc3RlYWQuIFRoZXJlIGlzIGFuIG9sZGVyIGFuZCBhIG5ld2VyDQogVUVGSSBT
aGVsbC48YnI+DQo8YnI+DQpZb3Ugc2hvdWxkIGFsc28gaW5jbHVkZSBpbmZvIGFib3V0IG90aGVy
IFB5dGhvbiBjb2RlIHlvdSB3ZXJlIGFibGUgdG8gc3VjY2Vzc2Z1bGx5IHJ1biBpbiB0aGlzIEVG
SSBTaGVsbC4gTWF5YmUgQ0hJUFNFQyBpcyBub3QgdGhlIGlzc3VlLCB0aGUgaXNzdWUgaXMgeW91
ciBFRkkgU2hlbGwgYW5kIFB5dGhvbi48YnI+DQo8YnI+DQpJbnN0ZWFkIG9mIGJ1aWxkaW5nIHlv
dXIgb3duIFVFRkkgUHl0aG9uLCB3aGF0IGhhcHBlbnMgd2hlbiB5b3UgdXNlIHRoZSBDSElQU0VD
IGluc3RydWN0aW9ucyBhbmQgdXNlIHRoZWlyIHN1cHBsaWVkIHB5dGhvbi5lZmk/IFdhc24ndCB0
aGVyZSBzb21lIHNwZWNpYWwgQ0hJUFNFQy1jZW50cmljIG9wdGlvbnMgbmVlZGVkIHRvIGJ1aWxk
IFB5dGhvbiB3aXRoPyBJZiBzbywgdGhhdCBzaG91bGQgYmUgY2xhcmlmaWVkIGJldHRlciBpbiBi
dWlsZCBkb2NzLjxicj4NCjxicj4NCihHcmFudGVkLCBpdCBzdWNrcyBoYXZpbmcgYSBzZWN1cml0
eSB0b29sIHNoaXAgYSBwcmUtY29tcGlsZWQgUHl0aG9uIGJpbmFyeSBpbiB0aGVpciBzb3VyY2Ug
dHJlZSwgYnVpbHQgaW4gYW4gdW5rbm93biBtYW5uZXIsIHdpdGggbm8gY2hlY2tzdW1zLCBhbmQg
bm8gcmVwcm9kdWNhYmxlIGJ1aWxkcywgYW5kIGhhdmUgdGhlIHRvb2wgcmVseSBvbiB0aGlzIGZv
ciBkZXRlcm1pbmluZyBwbGF0Zm9ybSBzZWN1cml0eS4gQnV0IHRoYXQncyBhbm90aGVyDQogaXNz
dWUuLi4pPGJyPg0KPGJyPg0KSW50ZWwgaGFzIGFiYW5kb25lZCBDUHl0aG9uIFYyIGZvciBVRUZJ
IHBhdGNoLCBhbmQgaXMgaW5zdGVhZCBpcyB3b3JraW5nIG9uIE1pY3JvUHl0aG9uIGZvciBVRUZJ
ICh3aGljaCBoYXMgc29tZSBQeXRob24gVjMgc3VwcG9ydCkuIFRob3VnaCBQeXRob24gVjIgaXMg
ZGVwcmVjYXRlZCBhbmQgbW9zdCBvZiB3b3JsZCBoYXMgbW92ZWQgdG8gUHl0aG9uIFYzLCBDSElQ
U0VDIHRlYW0gaXMgc3RpbGwgdXNpbmcvYnVuZGxpbmcgQ1B5dGhvbiBWMiwgYW5kDQogaGFzbid0
IHN3aXRjaGVkIG92ZXIgdG8gdXNpbmcvcmVseWluZy1vbi9idW5kbGluZyBNaWNyb1B5dGhvbiBm
b3IgVUVGSS48YnI+DQo8YnI+DQpGV0lXLCBJIHJhcmVseSBzZWUgcmVwbGllcyBmcm9tIHRoZSB0
ZWFtIGZvciBzdXBwb3J0IHF1ZXN0aW9ucyBvbiB0aGlzIG1haWxpbmcgbGlzdCBub3IgdGhlIEdv
b2dsZSBHcm91cHMgbGlzdHMuIEl0IEkgd2FzIGxvb2tpbmcgZm9yIGEgcmVwbHksIEknZCBmaWxl
IGEgR2l0aHViIGlzc3VlIChhbmQgaW5jbHVkZSBtb3JlIGluZm8pLCBvciB1c2UgVHdpdHRlci48
YnI+DQo8YnI+DQpZb3UgbWlnaHQgd2FudCB0byBjbGFyaWZ5IHRoYXQgeW91J3JlIHRyeWluZyB0
byBydW4gdGhpcyBvbiBhbiBJbnRlbCBzeXN0ZW0sIG5vdCBhbm90aGVyIElTQSAobGlrZSBBTUQg
b3IgQVJNIG9yIFJJU0MtViksIGFzIHRoYXQnZCBhbHNvIG5vdCB3b3JrLjxicj4NCjxicj4NCkhU
SCw8YnI+DQpMZWU8YnI+DQo8YnI+DQpPbiA1LzI4LzIwIDc6MzYgQU0sIFZvcm5hbWUgTmFjaG5h
bWUgd3JvdGU6PGJyPg0KJmd0OyBIZWxsbyw8YnI+DQomZ3Q7PGJyPg0KJmd0OyBJIHRyaWVkIHRv
IHJ1biBjaGlwc2VjLTEuNS4wIGluIEVGSSBTaGVsbCB3aXRob3V0IG9wZXJhdGluZyBzeXN0ZW0g
YnV0IDxicj4NCiZndDsgdW5mb3J0dW5hdGVseSBpdCBkb2Vzbid0IHJ1biBpbiB0aGUgRUZJIFNo
ZWxsLiBJIHJhbiB0aGVzZSBjb21tYW5kczo8YnI+DQomZ3Q7PGJyPg0KJmd0OyBTaGVsbCZndDsg
ZnMwOjxicj4NCiZndDsgRlMwOlwmZ3Q7IHB5dGhvbiAtXiMgY2hpcHNlY19tYWluLnB5IC1tIGRl
YnVnZW5hYmxlZDxicj4NCiZndDs8YnI+DQomZ3Q7IFRoaXMgcmVzdWx0cyBpbiBhIHRyYWNlYmFj
ayB3aXRoIHRoZSBsYXN0IGZpbGUgY2hpcHNlYy9kZWZpbmVzLnB5IDxicj4NCiZndDsgY2FsbGVk
IGZ1bmN0aW9uIGdldF92ZXJzaW9uKCkuPGJyPg0KJmd0Ozxicj4NCiZndDsgT1NFcnJvcjogW0Vy
cm5vIDIyXSBJbnZhbHVkIGFyZ3VtZW50OiAnRlMwOkZTMDpjaGlwc2VjJzxicj4NCiZndDs8YnI+
DQomZ3Q7IEFmdGVyIHRoYXQgSSBjb21waWxlZCBweXRob24gMi43LjIgYW5kIHB5dGhvbiAyLjcu
MTAgZnJvbSBlZGsyIHBhY2thZ2UgPGJyPg0KJmd0OyB2ZXJzaW9uIGVkazItc3RhYmxlMjAxOTAz
LiBUaGlzIGlzIHRoZSBsYXN0IHBhY2thZ2UgdmVyc2lvbiB3aXRoIDxicj4NCiZndDsgcHlodG9u
IGluc2lkZS4gV2l0aCB0aGlzIHZlcnNpb24gb2YgcHlodG9uIEkgcmVjZWl2ZWQgYW5vdGhlciBl
cnJvciA8YnI+DQomZ3Q7IG1lc3NhZ2Ugd2l0aCB0aGUgbGFzdCBsaW5lOjxicj4NCiZndDs8YnI+
DQomZ3Q7IEltcG9ydEVycm9yOiBObyBtb2R1bGUgbmFtZWQgZXhwYXQ7IHVzZSBTaW1wbGVYTUxU
cmVlQnVpbGRlciBpbnN0ZWFkLjxicj4NCiZndDs8YnI+DQomZ3Q7IFdoYXQgaXMgdGhlIGJlc3Qg
d2F5IHRvIHN0YXJ0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBjaGlwc2VjIGluIHRoZSBFRkkgPGJy
Pg0KJmd0OyBTaGVsbD8gV2hhdCB2ZXJzaW9uIG9mIEVGSSBTaGVsbCBhbmQgcHlodG9uIGlzIHJl
cXVpcmVkPzxicj4NCiZndDs8YnI+DQomZ3Q7IGJlc3Qgd2lzaGVzPGJyPg0KJmd0OyBQaGlsaXBw
PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7IF9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fPGJyPg0KJmd0OyBjaGlwc2VjIG1haWxpbmcgbGlzdCAtLSA8
YSBocmVmPSJtYWlsdG86Y2hpcHNlY0BsaXN0cy4wMS5vcmciIHRhcmdldD0iX2JsYW5rIj5jaGlw
c2VjQGxpc3RzLjAxLm9yZzwvYT4gVG8gdW5zdWJzY3JpYmUgc2VuZCBhbg0KPGJyPg0KJmd0OyBl
bWFpbCB0byA8YSBocmVmPSJtYWlsdG86Y2hpcHNlYy1sZWF2ZUBsaXN0cy4wMS5vcmciIHRhcmdl
dD0iX2JsYW5rIj5jaGlwc2VjLWxlYXZlQGxpc3RzLjAxLm9yZzwvYT48YnI+DQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj4NCmNoaXBzZWMgbWFpbGlu
ZyBsaXN0IC0tIDxhIGhyZWY9Im1haWx0bzpjaGlwc2VjQGxpc3RzLjAxLm9yZyIgdGFyZ2V0PSJf
YmxhbmsiPmNoaXBzZWNAbGlzdHMuMDEub3JnPC9hPiBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVt
YWlsIHRvDQo8YSBocmVmPSJtYWlsdG86Y2hpcHNlYy1sZWF2ZUBsaXN0cy4wMS5vcmciIHRhcmdl
dD0iX2JsYW5rIj5jaGlwc2VjLWxlYXZlQGxpc3RzLjAxLm9yZzwvYT48YnI+DQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj4NCmNoaXBzZWMgbWFpbGlu
ZyBsaXN0IC0tIDxhIGhyZWY9Im1haWx0bzpjaGlwc2VjQGxpc3RzLjAxLm9yZyIgdGFyZ2V0PSJf
YmxhbmsiPmNoaXBzZWNAbGlzdHMuMDEub3JnPC9hPjxicj4NClRvIHVuc3Vic2NyaWJlIHNlbmQg
YW4gZW1haWwgdG8gPGEgaHJlZj0ibWFpbHRvOmNoaXBzZWMtbGVhdmVAbGlzdHMuMDEub3JnIiB0
YXJnZXQ9Il9ibGFuayI+DQpjaGlwc2VjLWxlYXZlQGxpc3RzLjAxLm9yZzwvYT48bzpwPjwvbzpw
PjwvcD4NCjwvYmxvY2txdW90ZT4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPC9kaXY+DQo8L2Js
b2NrcXVvdGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K

--===============6874041782243895695==--