AF:
NF:0
PS:10
SRH:1
SFN:
DSR:
MID:<20070123155404.445bb459@ripper.onstor.net>
CFG:
PT:0
S:andy.sharp@onstor.com
RQ:
SSV:onstor-exch02.onstor.net
NSV:
SSH:
R:<larry.scheer@onstor.com>
MAID:1
X-Sylpheed-Privacy-System:
X-Sylpheed-Sign:0
SCF:#mh/Mailbox/sent
RMID:#imap/andys@onstor.net@onstor-exch02.onstor.net/INBOX	0	BB375AF679D4A34E9CA8DFA650E2B04E02215601@onstor-exch02.onstor.net
X-Sylpheed-End-Special-Headers: 1
Date: Tue, 23 Jan 2007 15:54:47 -0800
From: Andrew Sharp <andy.sharp@onstor.com>
To: "Larry Scheer" <larry.scheer@onstor.com>
Subject: Re: give verify_install.sh a try
Message-ID: <20070123155447.0ab6ad68@ripper.onstor.net>
In-Reply-To: <BB375AF679D4A34E9CA8DFA650E2B04E02215601@onstor-exch02.onstor.net>
References: <20070123100011.7522f220@ripper.onstor.net>
	<BB375AF679D4A34E9CA8DFA650E2B04E02215601@onstor-exch02.onstor.net>
Organization: Onstor
X-Mailer: Sylpheed-Claws 2.6.0 (GTK+ 2.8.20; x86_64-pc-linux-gnu)
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="MP_FvHnAJsOn/ntybulo/lPgvP"

--MP_FvHnAJsOn/ntybulo/lPgvP
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

OK, I cleaned it up just a bit, but no real changes.  After looking at
umount_secondary and how it's used, it doesn't want error checking
either, which is probably why we didn't have it checking errors in the
first place.

umount_secondary has to have a for-loop because it has to add the
"/mnt1" to all the mount paths, so it might as well just umount it at
that point.  It's often called even though the umounts it does are
expected to fail under normal circumstances.

Cheers,

a




 On Tue, 23 Jan 2007 11:55:09 -0800 "Larry Scheer"
<larry.scheer@onstor.com> wrote:

> Gave your updates a try. I saw these problems with the mount:
> 
> Extracting manifest files from archive file
> mount_ffs: /dev/wd1a on /mnt1: Device busy
> umount: /mnt1: Device busy
> Unmounting secondary disk...
> umount: /usr/local/agile/conf: Device busy
> Checking file systems...
> Mounting secondary disk...
> mount_ffs: /dev/wd1a on /mnt1: Device busy
> Unmounting secondary disk...
> umount: /usr/local/agile/conf: Device busy
> umount: /mnt1: Device busy
> umount: /mnt1/usr: Device busy
> umount: /mnt1/usr/local/agile: Device busy
> Updating the manifest file
> tar: Unable to
> access ./usr/local/agile/conf/R2.2.0.DEV-BCDBG-012307.bom <No such
> file or directory> tar: Unable to
> access ./usr/local/agile/conf/current.bom <No such file or directory>
> tar: WARNING! These file names were not selected:
> ./usr/local/agile/conf/R2.2.0.DEV-BCDBG-012307.bom
> ./usr/local/agile/conf/current.bom
> tar: End of archive volume 1 reached
> tar: Sorry, unable to determine archive format.
> Aborting: Problem verifying or updating the manifest file.
> Unmounting secondary disk...
> umount: /usr/local/agile/conf: Device busy
> umount: /mnt1: Device busy
> umount: /mnt1/usr: Device busy
> Installation failed, exiting...
> % Command failure
> 
> -----Original Message-----
> From: Andrew Sharp [mailto:andy.sharp@onstor.com] 
> Sent: Tuesday, January 23, 2007 10:00 AM
> To: Larry Scheer
> Subject: give verify_install.sh a try
> 
> Hi Larry,
> 
> Please give that version of verify_install.sh that I emailed you on
> Friday a try today, and look it over as well and let me know how it
> fares and what you think.
> 
> Cheers,
> 
> a

--MP_FvHnAJsOn/ntybulo/lPgvP
Content-Type: application/x-shellscript; name=verify_install.sh
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=verify_install.sh

IyEgL2Jpbi9rc2gKIwojIFByb2dyYW06IHZlcmlmeV9pbnN0YWxsLnNoCiMgQ29weXJpZ2h0IChD
KSAyMDA3IE9uc3RvciBTdG9yYWdlLCBJbmMuCiMKIyBDcmVhdGVkIGJ5OiBMYXJyeSBTY2hlZXIK
IwojIERhdGUgQ3JlYXRlZDogMDEvMTIvMjAwNwojCiMgRnVuY3Rpb246IEEgc2NyaXB0IHRoYXQg
Y2hlY2tzIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZpbGUgc3lzdGVtIG9mIHRoZQojIE5BUyBHYXRl
d2F5LiBJdCBpcyBjYWxsZWQgYnkgdGhlIG5meHNoIHN5c3RlbSB1cGdyYWRlIGNvbW1hbmQgdG8g
Y2hlY2sKIyB3aGljaCBmaWxlcyBhcmUgb3V0IG9mIGRhdGUgd2l0aCByZXNwZWN0IHRvIHRoZSBy
ZWxlYXNlIGRpc3RyaWJ1dGlvbiBhbmQKIyBpbnN0YWxsIHRob3NlIGZpbGVzIG9uIHRoZSBjb21w
YWN0IGZsYXNoLgojCiMgSW4gdGhlIHVubGlrZWx5IGNhc2UgdGhlIHN5c3RlbSB1cGdyYWRlIGNv
bW1hbmQgYmVjb21lcyB1bnVzYWJsZSB0aGlzCiMgc2NyaXB0LCB3aGVuIGdpdmVuIHRoZSBwcm9w
ZXIgb3B0aW9ucywgY2FuIHBlcmZvcm0gdGhlIGZpbGUgc3lzdGVtCiMgc29mdHdhcmUgaW5zdGFs
bGF0aW9uIHRvIHRoZSBjb21wYWN0IGZsYXNoLgojCiMgTmVlZGVkIEVuaGFuY2VtZW50czoKIwkx
LiBFcnJvciBleGl0IGlmIG5vIG1hbmlmZXN0IGZpbGUgZm91bmQgaW4gZGlzdHJpYnV0aW9uCiMJ
Mi4gUmVtb3ZhbCBvZiBjcCBtZXRob2Qgb2YgaW5zdGFsbAojCTMuIFRha2Ugb3ZlciBtb3JlIGZ1
bmN0aW9ucyBmb3VuZCBpbiBjbWRfdXBncmFkZS5jIChpLmUuIG10cmVlLCB2ZXJzaW9uCiMJICAg
Y2hlY2tpbmcsIGV0Yy4pCiMKClVTQUdFPSJVc2FnZTogYGJhc2VuYW1lICQwYCBbLWYgZnRwLy9V
UkxdIHwgWy1yXSB8IC1zIHwgLXAgfCBbLWhdIHwgWy1hXSIKCiNpbml0aWxpemUgZ2xvYmFscyBh
bmQgc2V0IGRlZmF1bHRzClRBUkJPTT0iIgpNTlQxPS9tbnQxCkNGX0RJUj0kTU5UMQpUQVJfRElS
PS9tbnQKREJHTE9HPS90bXAvdmVyaWZ5X2ZsYXNoLmxvZwpTWVNMT0c9L3Zhci9sb2cvc3lzX3Vw
Z3JhZGUubG9nCkxPRz0ke1RBUl9ESVJ9L3N5c191cGdyYWRlLmxvZwpET19TRUNPTkRBUlk9IiIK
RE9fUFJJTUFSWT0iIgpET19SRUlOU1RBTEw9IiIKRE9fRE9XTkxPQUQ9IiIKRE9fRE9XTkxPQUQ9
IiIKUlVOX1NUQU5EQUxPTkU9IiIKTkVFRF9ORVdfREVWUz0iIgoKIyBkZXRlcm1pbmUgb25zdG9y
IHBhdGgKaWYgbW91bnQgfCBncmVwIC91c3IvbG9jYWwvYWdpbGUgOyB0aGVuCglPTlNUT1JfUEFU
SD0vdXNyL2xvY2FsL2FnaWxlCmVsaWYgbW91bnQgfCBncmVwIC9vbnN0b3IgOyB0aGVuCglPTlNU
T1JfUEFUSD0vb25zdG9yCmVsc2UKCWVjaG8gIkNhbm5vdCBmaW5kIE9OU1RPUiBwYXRoISIKCWV4
aXQgMQpmaQoKT05TVE9SX0NPTkY9JHtPTlNUT1JfUEFUSH0vY29uZgpPTlNUT1JfRVRDPSR7T05T
VE9SX1BBVEh9L2V0YwpPTlNUT1JfQklOPSR7T05TVE9SX1BBVEh9L2JpbgpERVNDUj0ke09OU1RP
Ul9FVEN9L2Rlc2NyClNSQ0JPTT0ke09OU1RPUl9DT05GfS9jdXJyZW50LmJvbQpQUkVWQk9NPSR7
T05TVE9SX0NPTkZ9L3ByZXZpb3VzLmJvbQoKU1lTX0NORl9GSUxFUz0iJE9OU1RPUl9DT05GL2Fn
aWxlLmNvbmYgXAoJJE9OU1RPUl9DT05GL2NsdXN0ZXIuY29uZiBcCgkkT05TVE9SX0NPTkYvY2x1
c3Rlci5kYi5EQjAgXAoJJE9OU1RPUl9DT05GL2NsdXN0ZXIuZGIuREJTWVMxIFwKCSRPTlNUT1Jf
RVRDL2Vsb2cuY29uZiBcCgkkT05TVE9SX0VUQy9zeXNsb2cuY29uZiBcCgkvZXRjL2hvc3RzIFwK
CS9ldGMvbXlnYXRlIFwKCS9ldGMvaG9zdG5hbWUuc2MxIFwKCS9ldGMvaG9zdG5hbWUuc2MyIFwK
CS9ldGMvbWFzdGVyLnBhc3N3ZCBcCgkvZXRjL3Bhc3N3ZCBcCgkvZXRjL3B3ZC5kYiBcCgkvZXRj
L3Nwd2QuZGIgXAoJL2V0Yy9teW5hbWUgXAoJL2V0Yy9yZXNvbHYuY29uZiBcCgkvZXRjL3NzaC9z
c2hfaG9zdF9kc2Ffa2V5LnB1YiBcCgkvZXRjL3NzaC9zc2hfaG9zdF9yc2Ffa2V5LnB1YiBcCgkv
ZXRjL3NzaC9zc2hfaG9zdF9kc2Ffa2V5IFwKCS9ldGMvc3NoL3NzaF9ob3N0X3JzYV9rZXkgXAoJ
L2V0Yy9zc2gvc3NoX2hvc3Rfa2V5LnB1YiBcCgkvZXRjL3NzaC9zc2hfaG9zdF9rZXkgXAoJL2V0
Yy9sb2NhbHRpbWUgXAoJL2V0Yy9zeXNsb2cuY29uZiBcCgkvZXRjL250cC5jb25mIFwKCS9ldGMv
bnRwL3N0ZXAtdGlja2VycyIKClBBVEg9L3NiaW46L3Vzci9zYmluOi9iaW46L3Vzci9iaW46L3Vz
ci9sb2NhbC9iaW46JHtPTlNUT1JfQklOfQpleHBvcnQgUEFUSAoKYXJncz0iJCoiCmlmIFsgLXog
IiRhcmdzIiBdIDsgdGhlbgoJZWNobyAiJFVTQUdFIgoJZXhpdCAxCmZpCgpvcHRpb25zPSJmOmFo
cHJzIgoKd2hpbGUgZ2V0b3B0cyAkb3B0aW9ucyBvcHQgOyBkbwoJY2FzZSAkb3B0IGluCglmKQoJ
CURPX0RPV05MT0FEPXllcwoJCWlmIFsgIiRPUFRBUkciIF0gOyB0aGVuCgkJCVVSTD0kT1BUQVJH
CgkJCUJVSUxEPWBlY2hvICRVUkwgfCBzZWQgJ3MlLiovXCguKlwpWy5ddGFyWy5dZ3olXDElJ2AK
CQkJVEFSQk9NPSR7T05TVE9SX0NPTkZ9LyR7QlVJTER9LmJvbQoJCQlleHBvcnQgVVJMIEJVSUxE
IFRBUkJPTQoJCWVsc2UKCQkJZWNobyAiJFVTQUdFIgoJCQllY2hvICJNdXN0IHNwZWNpZnkgYSBm
dHAgVVJMIgoJCQlleGl0IDIKCQlmaQoJCWNvbnRpbnVlCgkJOzsKCWEpCgkJUlVOX1NUQU5EQUxP
TkU9eWVzCgkJOzsKCXMpCgkJQ0ZfRElSPS9tbnQxCgkJRE9fU0VDT05EQVJZPXllcwoJCVJPT1Q9
JENGX0RJUgoJCWNvbnRpbnVlCgkJOzsKCXApCgkJQ0ZfRElSPScnCgkJIyBWYXJpYWJsZSB1c2Vk
IHRvIHNodXQgZG93biBwbSBhbmQgcmVib290IHN5c3RlbQoJCURPX1BSSU1BUlk9eWVzCgkJRE9f
U0VDT05EQVJZPSIiCgkJUk9PVD0vCgkJY29udGludWUKCQk7OwoJcikKCQlET19SRUlOU1RBTEw9
eWVzCgkJY29udGludWUKCQk7OwoJaHxcPykKCQllY2hvICIkVVNBR0UiCgkJZWNobyAiCS1zIENo
ZWNrIHNlY29uZGFyeSBmbGFzaCIKCQllY2hvICIJLXAgQ2hlY2sgcHJpbWFyeSBmbGFzaCIKCQll
Y2hvICIJLWYgZnRwOi8vVVJMIERvd25sb2FkIGRpc3RyaWJ1dGlvbiBpbnRvIG1lbW9yeSBmaWxl
c3lzdGVtIgoJCWVjaG8gIgktciBJbnN0YWxsIGZpbGVzIGFzIG5lZWRlZCBmcm9tIHRoZSBkaXN0
cmlidXRpb24iCgkJZWNobyAiCS1hIFN0YW5kYWxvbmUgb3BlcmF0aW9uIFVzZWQgd2hlbiBub3Qg
Y2FsbGVkIGJ5IHN5c3RlbSB1cGdyYWRlIgoJCWVjaG8gIgktaCBQcmludCB0aGlzIG1lc3NhZ2Ui
CgkJZXhpdCAxCgkJOzsKCWVzYWMKZG9uZQoKcmVjb3JkKCkKewoJaWYgWyAiJE5PX1JFQ09SRCIg
XSA7IHRoZW4KCQl0ZWVfY21kPSIiCgllbHNlCgkJdGVlX2NtZD0iIHwgdGVlIC1hICRMT0ciCglm
aQoKCWV2YWwgZWNobyAiJEAiICR0ZWVfY21kCn0KCmVycm9yX2NsZWFudXAoKQp7CgkjY2xlYW4g
dXAgYW5kIHJldHVybgoJIyBtaWdodCBoYXZlIHJldHVybmVkIGZyb20gYSBmdW5jdGlvbiB0aGF0
IGRpZCBhIGNkIGludG8gQ0ZfRElSIG9yIC9tbnQKCWNkIC8KCXVtb3VudF9zZWNvbmRhcnkKCXVt
b3VudF9wYXRocyAkVEFSX0RJUgp9Cgptb3VudF9lcnJvcl9oYW5kbGVyKCkKewoJc3RhdHVzPSQ/
CglyZWNvcmQgIkVycm9yIGluIG1vdW50L3Vtb3VudCBvZiBgZXZhbCAiJEAiYCIKCXJlY29yZCAi
RXhpdGluZy4uLiIKCWVycm9yX2NsZWFudXAKCXJldHVybiAkc3RhdHVzCn0KCnJlbW91bnRfcHJp
bWFyeSgpCnsKCU1QVEg9LzsgbW91bnQgLXV3ICRNUFRIICYmCglNUFRIPS91c3I7IG1vdW50IC11
dyAkTVBUSCAmJgoJTVBUSD0kT05TVE9SX1BBVEg7IG1vdW50IC11dyAkTVBUSCB8fAoJbW91bnRf
ZXJyb3JfaGFuZGxlciAkTVBUSAp9CgojIGdldCB0aGUgbW91bnQgcG9pbnRzIGZyb20gdGhlIGZz
dGFiIGZpbGUgb24gdGhlIHNlY29uZGFyeSBmbGFzaC4KIyB0aGV5IG1pZ2h0IGJlIGRpZmZlcmVu
dCBmcm9tIHByaW1hcnk7IGFuZCB0aGV5CiMgbWlnaHQgYmUgIndyb25nIiBpbiB0aGF0IHRoZXkg
bWF5IGhhdmUgdGhlIHdyb25nCiMgZGV2aWNlcyAoc2F5LCBmb3IgaW5zdGFuY2UsIGlmIENGIGNh
cmRzIHdlcmUgc3dhcHBlZCkKaWRfc2Vjb25kYXJ5KCkKewoJcm9vdD1gZGYgLyB8IGZncmVwIC9k
ZXYgfCBhd2sgJ3twcmludCAkMX0nYAogICAgY2FzZSAkcm9vdCBpbgoJCS9kZXYvd2QwYSkKCQkJ
c19iYXNlPS9kZXYvd2QxCgkJCTs7CgkJL2Rldi93ZDFhKQoJCQlzX2Jhc2U9L2Rldi93ZDAKCQkJ
OzsKCWVzYWMKCgkjIG1vdW50IHRoZSBzZWNvbmRhcnkgcm9vdAoJbW91bnQgJHtzX2Jhc2V9YSAk
TU5UMSB8fCB7CgkJcmVjb3JkICJpZF9zZWNvbmRhcnk6IHByb2JsZW0gbW91bnRpbmcgc2Vjb25k
YXJ5IGZsYXNoIHJvb3QgZmlsZSBzeXN0ZW0gb24gZGV2aWNlICR7c19iYXNlfWEiCgkJcmV0dXJu
IDEKCX0KCglpZiBbICEgLXIgJE1OVDEvZXRjL2ZzdGFiIF0gOyB0aGVuCgkJcmVjb3JkICJTZWNv
bmRhcnkgZmxhc2ggZG9lcyBub3QgaGF2ZSBhIHJlYWRhYmxlIC9ldGMvZnN0YWIgZmlsZSEiCgkJ
cmVjb3JkICJZb3UgbXVzdCBmaXJzdCBpbml0aWFsaXplIHlvdXIgc2Vjb25kYXJ5IGZsYXNoIGJ5
IGV4ZWN1dGluZyIKCQlyZWNvcmQgInRoZSBuZnhzaCBjb21tYW5kICdzeXN0ZW0gY29weSBhbGwg
LWknIgoJCXJldHVybiAxCglmaQoJd2hpbGUgcmVhZCBzZGV2IHNwYXRoIHN0eXBlIHJlc3QgOyBk
bwoJCWlmIFsgIiRzdHlwZSIgPSAic3ciIC1vICIkc3R5cGUiID0gInN3YXAiIF0gOyB0aGVuCgkJ
CWNvbnRpbnVlCgkJZmkKCQlpZiBbICIkc3BhdGgiID0gIi8iIF0gOyB0aGVuCgkJCWlmIFsgIiRz
ZGV2IiAhPSAiJHtzX2Jhc2V9YSIgXSA7IHRoZW4KCQkJCWRldl9pbmNvcnJlY3Q9MQoJCQlmaQoJ
CQkjIHN0YXJ0IHRoZSB0d28gZm9yd2FyZCBsaXN0cyBhbmQgdGhlIGJhY2t3YXJkIGxpc3QKCQkJ
U0VDX0RFVl9MSVNUPSIke3NfYmFzZX1hIgoJCQlTRUNfTU5UX0xJU1Q9Ii8iCgkJCVNFQ19NTlRf
QkxJU1Q9Ii8iCgkJCWNvbnRpbnVlCgkJZmkKCQlpZiBbICIkZGV2X2luY29ycmVjdCIgXSA7IHRo
ZW4KCQkJc2Rldj1gZWNobyAkc2RldiB8IHNlZCAicysvZGV2L3dkLiskc19iYXNlImAKCQlmaQoJ
CSMgc3RvcmUgdGhlbSBpbiBvcmRlcgoJCVNFQ19ERVZfTElTVD0iJFNFQ19ERVZfTElTVCAkc2Rl
diIKCQlTRUNfTU5UX0xJU1Q9IiRTRUNfTU5UX0xJU1QgJHNwYXRoIgoJCVNFQ19NTlRfQkxJU1Q9
IiRzcGF0aCAkU0VDX01OVF9CTElTVCIKCWRvbmUgPCAkTU5UMS9ldGMvZnN0YWIKCglleHBvcnQg
U0VDX0RFVl9MSVNUIFNFQ19NTlRfTElTVCBTRUNfTU5UX0JMSVNUCgoJIyB1bm1vdW50IHNlY29u
ZGFyeSByb290Cgl1bW91bnQgJE1OVDEKfQoKIyB0YWtlcyBhIGxpc3Qgb2YgcGF0aHMgYXMgYXJn
dW1lbnRzIGFuZCB1bm1vdW50cyB0aGVtIGlmIHRoZXkgYXJlIG1vdW50ZWQuCiMgZG9lcyBubyBl
cnJvciBjaGVja2luZy4gIHRoaXMgZnVuYyBpcyBvbmx5IHVzZWQgaW4gIm9uLXRoZS13YXktb3V0
IiBjb2RlCiMgIHBhdGhzIHRoYXQgdXN1YWxseSBhcmUgYWxyZWFkeSByZWFjdGluZyB0byBhIHBy
ZXZpb3VzIGVycm9yLgojIG5vdGU6IGNvdW50cyBvbiBtdGFiIG5vdCBjb3JydXB0ZWQ/CiMgbm90
ZTogc2luY2Ugd2UgYXJlIGNoZWNraW5nIHRvIHNlZSBpZiBpdCdzIG1vdW50ZWQsIHBlcmhhcHMg
c3RkZXJyIG91dHB1dAojICBzaG91bGQgbm90IGJlIHN1cHByZXNzZWQuCnVtb3VudF9wYXRocygp
CnsKCSMgdW1vdW50IG9ubHkgcGF0aHMgdGhhdCBhcmUgbW91bnRlZAoJbW91bnRzPSIkQCIKCWZv
ciBtIGluICAkbW91bnRzIDsgZG8KCQltb3VudF9wdD1gbW91bnQgfCBmZ3JlcCAkbSB8IGF3ayAn
e3ByaW50ICQzfSdgCgkJaWYgWyAiJG1vdW50X3B0IiBdIDsgdGhlbgoJCQl1bW91bnQgJG1vdW50
X3B0IDI+JjEgPi9kZXYvbnVsbAoJCWZpCglkb25lCn0KCm1vdW50X3NlY29uZGFyeSgpCnsKCXJl
Y29yZCAiTW91bnRpbmcgc2Vjb25kYXJ5IGRpc2suLi4iCgoJZGk9MAoJZm9yIGQgaW4gJFNFQ19E
RVZfTElTVCA7IGRvCgkJZGk9YGV4cHIgJGRpICsgMWAKCQlwaT0wCgkJZm9yIHAgaW4gJFNFQ19N
TlRfTElTVCA7IGRvCgkJCXBpPWBleHByICRwaSArIDFgCgkJCWlmIFsgJGRpIC1lcSAkZGkgXSA7
IHRoZW4KCQkJCW1vdW50ICRkICR7TU5UMX0ke3B9IHx8IHsKCQkJCQllcnJvcl9jbGVhbnVwCgkJ
CQkJcmV0dXJuIDEKCQkJCX0KCQkJZmkKCQlkb25lCglkb25lCn0KCiMgd2UgZG9uJ3QgY2FyZSBh
Ym91dCBlcnJvcnMgaGVyZSwgYnV0IGRvbid0IGdpdmUgdXAganVzdCBiZWNhdXNlIG9uZQojIGZh
aWxzIHRvIHVubW91bnQuICB0aGlzIGZ1bmMgaXMgY2FsbGVkIGV4cGVjdGluZyB0aGF0IHNvbWUg
b3IgYWxsCiMgb2YgdGhlIHVtb3VudHMgd2lsbCBmYWlsLiAgRG9uJ3QgY291bnQgb24gbXRhYiBj
b3JyZWN0bmVzcy4KdW1vdW50X3NlY29uZGFyeSgpCnsKCXJlY29yZCAiVW5tb3VudGluZyBzZWNv
bmRhcnkgZGlzay4uLiIKCnNldCAteAoJIyB1bm1vdW50IHRoZSBkaXJlY3RvcmllcwoJZm9yIHAg
aW4gJFNFQ19NTlRfQkxJU1QgOyBkbwoJCXVtb3VudCAke01OVDF9JHtwfSAyPiYxID4vZGV2L251
bGwKCWRvbmUKc2V0ICt4Cn0KCmNoZWNrX3NlY29uZGFyeSgpCnsKCXJlY29yZCAiQ2hlY2tpbmcg
ZmlsZSBzeXN0ZW1zLi4uIgoJZm9yIGQgaW4gJFNFQ19ERVZfTElTVCA7IGRvCgkJL3NiaW4vZnNj
ayAteSAkZCAyPiYxID4+L2Rldi9udWxsIHx8IHsKCQkJZWNobyAiRmFpbHVyZSBjaGVja2luZyBm
aWxlc3lzdGVtIG9uIGRldmljZSAkZCIKCQkJcmV0dXJuIDEKCQl9Cglkb25lCn0KCmNkX2ZsYXNo
KCkKewoJaWYgWyAiJERPX1NFQ09OREFSWSIgXSA7IHRoZW4KCQljZCAkQ0ZfRElSCgllbHNlCgkJ
Y2QgLwoJZmkKCglyZXR1cm4gMAp9Cgppbml0X2xvZygpCnsKCSNpbml0aWFsaXplIGRlYnVnIGxv
ZwoJWyAtciAkREJHTE9HIC1hIC1zICREQkdMT0cgXSAmJiBybSAkREJHTE9HCgl0b3VjaCAkREJH
TE9HCgoJcmV0dXJuIDAKfQoKd2Fybl91c2VyX2Fib3V0X2RldmljZXMoKQp7CglyZWNvcmQgIioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqIgoJcmVjb3JkICJXYXJuaW5nOiAvZGV2L01BS0VERVYgaGFzIGNoYW5nZWQgaW4gdGhpcyBy
ZWxlYXNlIGRpc3RyaWJ1dGlvbiIKCXJlY29yZCAiYW5kIHlvdSBjaG9zZSB0byB1cGRhdGUgdGhl
IHByaW1hcnkgZmxhc2guIgoJcmVjb3JkICJEZXZpY2VzIGNhbm5vdCBiZSB1cGRhdGVkIG9uIGEg
cnVubmluZyBzeXN0ZW0uIFJlLWJvb3Qgd2l0aCAiCglyZWNvcmQgJ3N5c3RlbSByZWJvb3QgLXMg
YW5kIHJ1biBzeXN0ZW0gdXBncmFkZSAtcyAtZiB0byB1cGRhdGUgL2RldicKCXJlY29yZCAiV2Fy
bmluZzogeW91ciBpbnN0YWxsYXRpb24gaXMgaW5jb21wbGV0ZS4iCglyZWNvcmQgIioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgoK
CXJldHVybiAwCn0KCnVwZGF0ZV9kZXZpY2VzKCkKewoJbG9jYWwgZXJyCgoJIyBDYW4ndCB1cGRh
dGUgZGV2aWNlcyBvbiBwcmltYXJ5IGZsYXNoCglpZiBbICIkRE9fUFJJTUFSWSIgXSA7IHRoZW4K
CQl3YXJuX3VzZXJfYWJvdXRfZGV2aWNlcwoJZWxzZQoJCXJlY29yZAoJCXJlY29yZCAiVXBkYXRp
bmcgZGV2aWNlcyBvbiBgZGF0ZWAiCgkJY2RfZmxhc2gKCQljZCBkZXYKCQkuL01BS0VERVYgYWxs
ID4+L2Rldi9udWxsIDI+JjEgJiYgewoJCQlyZWNvcmQgIk5ldyBkZXZpY2VzIGluc3RhbGxlZCBv
biBgZGF0ZWAiCgkJCXJlY29yZAoJCX0gfHwgewoJCQllcnI9JD8KCQkJcmVjb3JkICJOZXcgZGV2
aWNlcyBub3QgdXBkYXRlZC4gIE1BS0VERVYgZmFpbGVkOiAkZXJyIgoJCX0KCQljZCAvCglmaQoK
CXJldHVybiAkZXJyCn0KCnJlaW5zdGFsbCgpCnsKCSMKCSMgVXNlIHRhciB0byBpbnN0YWxsIGZp
bGVzIG9uIGZsYXNoCgkjCgkjIFRoZSB0YXIgbWV0aG9kIHVzZXMgZmFyIGxlc3MgbWVtb3J5IGFu
ZCBwcmVzZXJ2ZXMgaGFyZCBsaW5rcy4KCSMgSXQgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdWN0
aW9uIHdpdGggaXQncyBkb3dubG9hZCBvcHRpb24uCgkjIFRoZSB0YXIgbWV0aG9kIGZpcnN0IGNy
ZWF0ZXMgYSBmaWxlIGxpc3RpbmcgYWxsIGZpbGVzIG5lZWRpbmcgdXBncmFkZQoJIyBPbmx5IGZp
bGVzIGluIHRoZSBsaXN0d2lsbCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgZGlzdHJpYnV0aW9uLgoJ
IyBUaGlzIGlzIGRvbmUgdG8gbWluaW1pemUgd3JpdGVzIHRvIHRoZSBjb21wYWN0IGZsYXNoLgoJ
IyBUaGUgcmVhc29uIGEgZmlsZSBpcyB1c2VkIHZlcnN1cyBqdXN0IGdpdmluZyB0YXIgdGhlIGZp
bGVuYW1lcyB0bwoJIyBleHRyYWN0IGlzIHRoZSBmaWxlbmFtZSBsaXN0IGNvdWxkIHBvdGVudGlh
bGx5IGJlIGxhcmdlIGVub3VnaCB0bwoJIyBvdmVyZmxvdyBidWZmZXJzLgoJIwoKCSMgcmVtb3Vu
dCBwcmltYXJ5IGZsYXNoIHJ3IGlmIG5lZWRlZAoJaWYgWyAiJERPX1BSSU1BUlkiIC1hICIkUlVO
X1NUQU5EQUxPTkUiIF0gOyB0aGVuCgkJcmVjb3JkICJSZW1vdW50aW5nIHRoZSBsb2NhbCBmaWxl
c3lzdGVtIHJlYWQtd3JpdGUuLi4iCgkJcmVtb3VudF9wcmltYXJ5IHx8IHJldHVybgoJZmkKCgkj
SW5pdGlhbGl6ZSB0aGUgbGlzdCBmaWxlIGZvciB0aGUgdGFyIG9wdGlvbgoJdW50YXJ0aGVzZT0k
e1RBUl9ESVJ9L2ZpbGVzLXRvX3VwZ3JhZGUubHN0CglbIC1mICR1bnRhcnRoZXNlIF0gJiYgcm0g
LWYgJHVudGFydGhlc2UKCVsgIiRET19ET1dOTE9BRCIgXSAmJiB0b3VjaCAkdW50YXJ0aGVzZQoK
CSNBZGQgdGhlIGZpbGUgdG8gdGhlIGxpc3QKCWZvciBmIGluICRET19PVkVSUyA7IGRvCgkJaWYg
WyAiJERPX0RPV05MT0FEIiBdIDsgdGhlbgoJCQllY2hvICIuLyR7Zn0iID4+ICR1bnRhcnRoZXNl
CgkJZmkKCWRvbmUKCgkjIFRoZSB0YXIgbWV0aG9kCglpZiBbIC1zICR1bnRhcnRoZXNlICAtYSAi
JERPX0RPV05MT0FEIiBdIDsgdGhlbgoJCXJlY29yZCAiSW5zdGFsbGluZyBkaXN0cmlidXRpb24g
ZmlsZXMgb24gYGRhdGVgIgoJCXJlY29yZCAiVGhpcyB3aWxsIHRha2UgYSB3aGlsZS4uLiIKCQly
ZWNvcmQgIkNvbW1hbmQ6IHRhciB4dnpwZiAke1RBUl9ESVJ9LyR7QlVJTER9LnRhci5neiAtQyAk
Uk9PVCAtVCAkdW50YXJ0aGVzZSIKCQl0YXIgeHZ6cGYgJHtUQVJfRElSfS8ke0JVSUxEfS50YXIu
Z3ogLUMgJFJPT1QgLVQgJHVudGFydGhlc2UgfAoJCQkJdGVlICAtYSAkTE9HIHx8IHsKCQkJIyB0
YXIgZmFpbGVkCgkJCXJlY29yZCAidGFyIGNvbW1hbmQgaW4gX3JlaW5zdGFsbCBmYWlsZWQ6ICQ/
IgoJCQlyZXR1cm4gMQoJCX0KCgkJIyBwdXQgYSBibGFuayBsaW5lIGluIGxvZyBmaWxlCgkJcmVj
b3JkCglmaQoKCSMgQ2FsbCBmdW5jdGlvbiB0byB1cGRhdGVkIHRoZSBkZXZpY2VzIGlmIG5lZWRl
ZAoJaWYgWyAiJE5FRURfTkVXX0RFVlMiIF0gOyB0aGVuCgkJdXBkYXRlX2RldmljZXMgfHwgcmV0
dXJuIDEKCWZpCgoJcmVjb3JkICJGaWxzeXN0ZW0gdXBkYXRlZCBvbiBgZGF0ZWAiCgoJcmV0dXJu
IDAKfQoKbGVzc19tZW1fZG93bmxvYWQoKQp7CgltYW5pZmVzdD0iLiR7VEFSQk9NfSAuJHtTUkNC
T019IC4ke0RFU0NSfSAuL3ZlcnNpb24iCgltdHJlZT0iLi9ldGMvbXRyZWUvNC40QlNELmRpc3Qi
Cgl1bW91bnQgLWYgJFRBUl9ESVIKCSMgY3JlYXRlIG1lbW9yeSBwYXJ0aXRpb24gdG8gc3RvcmUg
ZGlzdHJpYnV0aW9uCgkvc2Jpbi9tb3VudF9tZnMgLW0gMCAtcyAxMjAwMDAgc3dhcCAkVEFSX0RJ
UiB8fCB7CgkJZXJyPSQ/CgkJcmVjb3JkICJVbmFibGUgdG8gY3JlYXRlIFJBTSBmaWxlc3lzdGVt
OiAkZXJyIgoJCXJldHVybiAkZXJyCgl9Cglpbml0X2xvZwoJcmVjb3JkICJEb3dubG9hZGluZyBl
eHRlcm5hbCBzeXN0ZW0gc29mdHdhcmUgZGlzdHJpYnV0aW9uLiIKCSMgRG93bmxvYWQgdGhlIGRp
c3RyaWJ1dGlvbiB0YXIgZmlsZSBvbmx5IGV4dHJhY3QgdGhlIG1hbmlmZXN0LgoJY2QgJFRBUl9E
SVIKCS91c3IvYmluL2Z0cCAgLW0gJFVSTCB8fCB7CgkJZXJyPSQ/CgkJcmVjb3JkICJGdHAgcmV0
cmlldmFsIG9mIHVwZ3JhZGUgYXJjaGl2ZSBmaWxlIGZhaWxlZDogJGVyciIKCQlyZXR1cm4gJGVy
cgoJfQoJcmVjb3JkICJFeHRyYWN0aW5nIG1hbmlmZXN0IGZpbGVzIGZyb20gYXJjaGl2ZSBmaWxl
IgoJdGFyIHh2enBmICR7QlVJTER9LnRhci5neiAkbWFuaWZlc3QgJG10cmVlIDI+JjEgPj4gJERC
R0xPRyB8fCB7CgkJZXJyPSQ/CgkJcmVjb3JkICJFeHRyYWN0aW9uIG9mIG1hbmlmZXN0IGZpbGVz
IGZyb20gYXJjaGl2ZSBmaWxlIGZhaWxlZDogJGVyciIKCX0KCXJldHVybiAkZXJyCn0KCnVwZGF0
ZV9tYW5pZmVzdCgpCnsKCXJlY29yZCAiVXBkYXRpbmcgdGhlIG1hbmlmZXN0IGZpbGUiCgkjIHVw
ZGF0ZSB0aGUgY3VycmVudC5ib20gbGluayBhbmQgaW5zdGFsbCB0aGlzIGRpc3RyaWJ1dGlvbidz
IG1hbmlmZXN0IGZpbGUKCShjZCAkVEFSX0RJUiAmJiB0YXIgY2YgLSAiLiR7VEFSQk9NfSIgIi4k
e1NSQ0JPTX0iKSB8IHRhciB4dnBmIC0KfQoKdmVyaWZ5X21hbmlmZXN0KCkKewoJIwoJIyBWZXJp
ZnkgbWFuaWZlc3QgZmlsZSBpbnN0YWxsZWQgb24gZmxhc2ggaXMgY3VycmVudC4KCSMgQ2FsbCB1
cGRhdGVfbWFuaWZlc3QgaWYgaXQgZG9lc24ndCBleGlzdCBvciBpcyBvdXQgb2YgZGF0ZQoJIwoJ
IyBJbiB0aGUgZGlzdHJpYnV0aW9uOiBjdXJyZW50LmJvbSAtLT4gcmVsZWFzZS1uYW1lLmJvbQoJ
IwoKCWNkX2ZsYXNoCgoJIyBXYW50IGN1cnJlbnQuYm9tIHNob3VsZCBiZSBhIHN5bSBsaW5rIHNv
IHJlbW92ZSBpZiBpdCBpc24ndC4KCVsgLXIgLiR7U1JDQk9NfSAtYSAtaCAuJHtTUkNCT019IF0g
fHwgIHJtIC1mIC4ke1NSQ0JPTX0KCgkjIENoZWNrIHRoZSBkb3dubG9hZCBhcmVhIGZvciBtYW5p
ZmVzdCBmaWxlIGJ5IG5hbWUgaWYga25vd24gYW5kIGdldCBpdHMKCSMgY2hlY2sgc3VtLgoJaWYg
WyAiJFRBUkJPTSIgXSA7IHRoZW4KCQkjIGNoZWNrIHN1bSBvZiB0aGUgZGlzdHJpYnV0aW9uIG1h
bmlmZXN0IGZpbGUKCQlbIC1mICR7VEFSX0RJUn0ke1RBUkJPTX0gXSAmJiAgdGRic3VtPSJgY2tz
dW0gJHtUQVJfRElSfSR7VEFSQk9NfWAiCgkJIyBTZWUgaWYgYSBmaWxlIG9mIHRoZSBzYW1lIG5h
bWUgZXhpc3RzIG9uIHRoZSBmbGFzaCBhbmQgZ2V0IGl0cyBzdW0KCQlbIC1mIC4ke1RBUkJPTX0g
XSAmJiBjZmJzdW09ImBja3N1bSAuJHtUQVJCT019YCIKCWVsaWYgWyAtciAke1RBUl9ESVJ9JHtT
UkNCT019IF0gOyB0aGVuCgkJIyBkb24ndCBrbm93IHRoZSBuYW1lIG9mIHRoZSBtYW5pZmVzdCBm
aWxlIHNvIHVzZSBpdHMgbGluayB0byBnZXQgc3VtCgkJdGRic3VtPSJgY2tzdW0gJHtUQVJfRElS
fSR7U1JDQk9NfWAiCgllbHNlCgkJIyBUaGUgZG93bmxvYWQgc2hvdWxkIGhhdmUgdW5wYWNrZWQg
YSBtYW5pZmVzdCBmaWxlLCBwZXJoYXBzIHRoZSB1c2VyCgkJIyBqdXN0IHdhbnRzIHRvIHZlcmlm
eSBhbiBleGl0aW5nIGluc3RhbGxhdGlvbiB3aXRoIGFuIGFscmVhZHkKCQkjIGluc3RhbGxlZCBt
YW5pZmVzdCBmaWxlIGFuZCBkaWRuJ3QgZG8gYSBkb3dubG9hZC4KCQl0ZGJzdW09IiIKCWZpCgoJ
IyBPbmx5IHVwZGF0ZSBjdXJyZW50IG1hbmlmZXN0IGZpbGUgaWYgaXQgZG9lc24ndCBtYXRjaCBk
aXN0cnVidXRpb24gb3IKCSMgZG9lc24ndCBleGlzdC4KCWlmIFsgLWggLiR7U1JDQk9NfSBdIDsg
dGhlbgoJCSMgY2hlY2sgc3VtIG9mIHRoZSBmaWxlIGN1cnJlbnQuYm9tIGxpbmtzIHRvCgkJY2xi
c3VtPSJgY2tzdW0gLiR7U1JDQk9NfWAiCgkJIyBjaGVjayBpZiBjdXJyZW50IGRvZXMgbm90IG1h
dGNoIGRpc3RyaWJ1dGlvbiBhbmQgcmVuYW1lIGl0CgkJIyBhbmQgdXBkYXRlCgkJaWYgWyAiJHRk
YnN1bSIgLWEgIiR0ZGJzdW0iICE9ICIkY2xic3VtIiBdIDsgdGhlbgoJCQltdiAuJHtTUkNCT019
IC4ke1BSRVZCT019CgkJCXVwZGF0ZV9tYW5pZmVzdCB8fCByZXR1cm4gJD8KCQlmaQoJIyBJZiBu
YW1lZCBtYW5pZmVzdCBmaWxlIGRpZmZlcnMgd2l0aCBkaXN0cmlidXRpb24gdXBkYXRlIGl0Cgll
bGlmIFsgIiR0ZGJzdW0iIC1hICIkY2Zic3VtIiBdIDsgdGhlbgoJCWlmIFsgIiR0ZGJzdW0iCSE9
ICIkY2Zic3VtIiBdICA7IHRoZW4KCQkJdXBkYXRlX21hbmlmZXN0IHx8IHJldHVybiAkPwoJCWZp
CgllbHNlCgkJdXBkYXRlX21hbmlmZXN0IHx8IHJldHVybiAkPwoJZmkKCn0KCnJlbW92ZV9vbGRf
bWFuaWZlc3QoKQp7CgljZF9mbGFzaAoJY2QgdXNyL2xvY2FsL2FnaWxlL2NvbmYKCWFsbF9ib21z
PSJgbHMgLTEgKi5ib21gIgoJaW51c2U9ImBscyAtbCBjdXJyZW50LmJvbSB8IGF3ayAne3ByaW50
ICRORn0nYCIKCW9uZWJhY2s9ImBscyAtbCBwcmV2aW91cy5ib20gfCBhd2sgJ3twcmludCAkTkZ9
J2AiCglmb3IgZiBpbiAkYWxsX2JvbXMgOyBkbwoJCWlmIFsgIiRpbnVzZSIgLWEgJGYgPSAiJGlu
dXNlIiBdIDsgdGhlbgoJCQljb250aW51ZQoJCWVsaWYgWyAiJG9uZWJhY2siIC1hICRmID0gIiRv
bmViYWNrIiBdIDsgdGhlbgoJCQljb250aW51ZQoJCWVsaWYgWyAkZiA9IGN1cnJlbnQuYm9tIF0g
OyB0aGVuCgkJCWNvbnRpbnVlCgkJZWxpZiBbICRmID0gcHJldmlvdXMuYm9tIF0gOyB0aGVuCgkJ
CWNvbnRpbnVlCgkJZWxzZQoJCQlybSAtZiAkZgoJCWZpCglkb25lCgljZCAvCgoJcmV0dXJuIDAK
fQoKdmVyaWZ5X3N1bXMoKQp7CgljZF9mbGFzaAoKCURPX09WRVJTPSIiCgkjIFByZWZlciB0aGUg
bWFuaWZlc3QgZmlsZSBpbiB0aGUgZGlzdHJpYnV0aW9uIHZlcnN1cyB0aGUgb25lIG9uIGZsYXNo
LgoJaWYgWyAiJFRBUkJPTSIgLWEgLWYgJHtUQVJfRElSfSR7VEFSQk9NfSBdIDsgdGhlbgoJCVNS
Q0JPTT0ke1RBUl9ESVJ9JHtUQVJCT019CgllbGlmIFsgLWggJHtUQVJfRElSfSR7T05TVE9SX0NP
TkZ9L2N1cnJlbnQuYm9tIF0gOyB0aGVuCgkJU1JDQk9NPSR7VEFSX0RJUn0ke09OU1RPUl9DT05G
fS9jdXJyZW50LmJvbQoJZmkKCglyZWNvcmQgIlZlcmlmeWluZyBmaWxlc3lzdGVtIGludGVncml0
eSIKCXdoaWxlIHJlYWQgZmlsZXN1bSA7IGRvCgkJIyBHZXQgZmlsZW5hbWUgYW5kIHN0cmlwIGxl
YWRpbmcgJy4vJwoJCWZuYW1lPWBlY2hvICIkZmlsZXN1bSIgfCBhd2sgJ3twcmludCAkTkZ9JyB8
IHNlZCAncyVeWy5dLyUlJ2AKCQkjIElkZW50aWZ5IHByb20gaW1hZ2VzIG1heSBuZWVkIGZ1cnRo
ZXIgcHJvY2Vzc2luZy4uLgoJCWlzcHJvbT0iYGZncmVwIHByb20gJHtUQVJfRElSfSR7REVTQ1J9
IHwgZmdyZXAgJGZuYW1lYCIKCQkjIElnbm9yZSBjb25maWd1cmF0aW9uIGZpbGVzIGxpc3RlZCBp
biB0aGUgREVTQ1IgZmlsZS4KCQl0b3NraXA9ImBlZ3JlcCAnY29uZmlnfHNlcnZpY2UnICR7VEFS
X0RJUn0ke0RFU0NSfSB8IGZncmVwICRmbmFtZWAiCgkJaWYgWyAiJHRvc2tpcCIgXSA7IHRoZW4K
CQkJIyBXZWxsIGlmIHRoZXkgYXJlIG1pc3NpbmcgbGV0J3MgdXBncmFkZSB0aGVtLgoJCQlpZiBb
ICEgLXIgIiRmbmFtZSIgXSA7IHRoZW4KCQkJCXJlY29yZCAiTWlzc2luZyBjb25maWd1cmF0aW9u
IGZpbGU6ICRmbmFtZSIKCQkJCURPX09WRVJTPSIkRE9fT1ZFUlMgJGZuYW1lIgoJCQlmaQoJCQlj
b250aW51ZQoJCWZpCgkJIyBWZXJpZnkgdGhlIHJlc3Qgb2YgdGhlIGRpc3RyaWJ1dGlvbgoJCWlm
IFsgLWUgIi4vJHtmbmFtZX0iIF0gOyB0aGVuCgkJCXJlY29yZCAiQ2hlY2tpbmc6ICRmbmFtZSIK
CQkJY2tzdW09ImBja3N1bSAuLyR7Zm5hbWV9YCIKCQllbHNlCgkJCXJlY29yZCAiJGZuYW1lIGlz
IG5vdCBpbnN0YWxsZWQiCgkJCURPX09WRVJTPSIkRE9fT1ZFUlMgJGZuYW1lIgoJCQkjIGRldi9N
QUtFREVWIG1pc3NpbmcgbmVlZCB0byB1cGRhdGUgZGV2aWNlcwoJCQlpZiBbICIkZm5hbWUiID0g
ImRldi9NQUtFREVWIiBdIDsgdGhlbgoJCQkJTkVFRF9ORVdfREVWUz15ZXMKCQkJCWV4cG9ydCBO
RUVEX05FV19ERVZTCgkJCWZpCgkJZmkKCQlpZiBbICIkY2tzdW0iICE9ICIkZmlsZXN1bSIgXSA7
IHRoZW4KCQkJIyBJZiBkZXYvTUFLRURFViBjaGFuZ2VkIHRoZW4gZmxhZyBjaGFuZ2UgZm9yIGZ1
dHVyZSBwcm9jZXNzaW5nCgkJCWlmIFsgIiRmbmFtZSIgPSAiZGV2L01BS0VERVYiIF0gOyB0aGVu
CgkJCQlORUVEX05FV19ERVZTPXllcwoJCQkJZXhwb3J0IE5FRURfTkVXX0RFVlMKCQkJZmkKCgkJ
CSMgQ2hlY2sgdG8gc2VlIGlmIHN1bSBtYXRjaCBsYXN0IHZlcnNpb24gaW5zdGFsbGVkLgoJCQkj
IFRoaXMgYW4gZXh0cmEgZGlhZ25vc3RpYyBmb3IgZGV2ZWxvcG1lbnQncyB1c2UuCgkJCSMgSW4g
YSBiYWNrLXRvLWJhY2sgdmVyaWZ5IGl0IHdpbGwgZmxhZyBmaWxlcyBtaXNzZWQgYnkgdXBncmFk
ZQoJCQlbIC1yIC4vJHtQUkVWQk9NfSBdICYmICBwcmV2c3VtPSJgZmdyZXAgIiRja3N1bSIgLi8k
e1BSRVZCT019YCIKCQkJaWYgWyAiJHByZXZzdW0iIC1hICIkcHJldnN1bSIgPSAiJGNrc3VtIiBd
IDsgdGhlbgoJCQkJcmVjb3JkICIkZm5hbWUgbWF0Y2hlcyBwcmV2aW91cyBpbnN0YWxsZWQgdmVy
c2lvbiIKCQkJCXJlY29yZCAiJGZuYW1lIG5lZWRzIHVwZ3JhZGUiCgkJCQlET19PVkVSUz0iJERP
X09WRVJTICRmbmFtZSIKCQkJZWxzZQoJCQkJIyBQb3NzaWJsZSBmaWxlIGNvcnJ1cHRpb24gb3Ig
b2xkIHZlcnNpb24gZGV0ZWN0ZWQKCQkJCXJlY29yZCAiJGZuYW1lIG5lZWRzIHVwZ3JhZGUiCgkJ
CQkjIENhc3VhbCB1c2VycyBkb24ndCBuZWVkIHRvIHNlZSB0aGUgZm9sbG93aW5nLgoJCQkJZWNo
byAiJGZuYW1lIHZlcmlmaWNhdGlvbiBmYWlsZWQiID4+ICREQkdMT0cKCQkJCWVjaG8gIlNyYzog
JGZpbGVzdW0iICA+PiAkREJHTE9HCgkJCQllY2hvICJUZ3Q6ICRja3N1bSIgID4+ICREQkdMT0cK
CQkJCXJlY29yZAoJCQkJRE9fT1ZFUlM9IiRET19PVkVSUyAkZm5hbWUiCgkJCWZpCgkJZmkKCWRv
bmUgPCAke1NSQ0JPTX0KCWV4cG9ydCBET19PVkVSUwoKCXJldHVybiAwCn0KCnByaW50X2RvX292
ZXJzKCkKewoJIyBQcmludCB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IGNoYW5nZWQuCglyZWNvcmQK
CXJlY29yZCAiVGhlIGZvbGxvd2luZyBmaWxlcyBuZWVkIHVwZ3JhZGluZzoiCglyZWNvcmQKCWZv
ciBmIGluICRET19PVkVSUyA7IGRvCgkJcmVjb3JkICIkZiIKCWRvbmUKCXJlY29yZAoKCXJldHVy
biAwCn0KCnJlcG9ydF92ZXJpZnlfcmVzdWx0cygpCnsKCSMgUmVwb3J0IHJlc3VsdHMgb2YgdmVy
aWZpY2F0aW9uIHN0ZXAKCWlmIFsgImBlY2hvICRET19PVkVSUyB8IGhlYWQgLTFgIiBdIDsgdGhl
bgoJCXByaW50X2RvX292ZXJzCgllbHNlCgkJcmVjb3JkCgkJcmVjb3JkICJmaWxlcyBhcmUgc2Ft
ZSBvbiBzb3VyY2UgYW5kIHRhcmdldCBsb2NhdGlvbjoiCgkJcmVjb3JkCglmaQoKCXJldHVybiAw
Cn0KCnNodXRkb3duX3BtKCkKewoJIyBGb3IgcHJpbWFyeSBmbGFzaCB1cGdyYWRlcyBhbGwgU1ND
IGRhZW1vbnMgbXVzdCBiZSBzdG9wcGVkLgoJJHtPTlNUT1JfQklOfS9lbXJzY3JvbiAtcgoJcmVj
b3JkICJTaHV0dGluZyBkb3duIFBNLi4uIgoJcG1fcGlkPWBjYXQgL3Zhci9ydW4vcG0ucGlkYAoJ
a2lsbCAkcG1fcGlkCgl3YWl0ICRwbV9waWQgMj4vZGV2L251bGwKfQoKIyBjb3B5IHRoZSBzeXN0
ZW0gY29uZmlnIGZpbGVzLiAgQSBkdXBlIG9mIHRoZSBDIGNvZGUgaW4gY21kX2ZsYXNoLAojIHVu
dGlsIHRoYXQgY29kZSBjYW4gYmUgbW9kaWZpZWQgdG8ganVzdCB1c2UgdGhpcyBzY3JpcHQgaW5z
dGVhZCwgTEdJLgpjb3B5X2NvbmZpZ19maWxlcygpCnsKCXJlY29yZAoJcmVjb3JkICJVcGRhdGlu
ZyBjb25maWd1cmF0aW9uIGZpbGVzLCBTdGFydCB0aW1lOiBgZGF0ZWAiCglmb3IgZiBpbiAkU1lT
X0NORl9GSUxFUyA7IGRvCgkJZWNobyAkZiA+PiAvdG1wL3JhbWRpc2svY2ZsaXN0Cglkb25lCgl0
YXIgY2YgLSAtRiAvdG1wL3JhbWRpc2svY2ZsaXN0IHwgKGNkICRNTlQxICYmIHRhciB4dmYgLSkg
IHwKCQl0ZWUgLWEgJExPRyB8fCB7CgkJCXJlY29yZCAiRmFpbHVyZTogY29uZmlnIGZpbGVzIG5v
dCBmdWxseSB1cGRhdGVkLiIKCQkJcmV0dXJuIDEKCQl9CgoJcm0gLWYgL3RtcC9yYW1kaXNrL2Nm
bGlzdAoJcmVjb3JkICJVcGRhdGluZyBjb25maWd1cmF0aW9uIGZpbGVzLCAgRW5kIHRpbWU6IGBk
YXRlYCIKfQoKZmluaXNoX3N0YW5kYWxvbmVfaW5zdGFsbCgpCnsKCSMKCSMgVGhlc2Ugc3RlcHMg
YXJlIG5vcm1hbGx5IGRvbmUgYnkgY29tbWFuZCB1cGdyYWRlLiBJbiBjYXNlIHRoaXMgc2NyaXB0
CgkjIGlzIGV2ZXIgbmVlZGVkIHRvIHBlcmZvcm0gYW4gaW5zdGFsbCBpbiBwbGFjZSBvZiBjb21t
YW5kIHVwZ3JhZGUgdGhpcwoJIyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZmluYWwgc3RlcHMgb2Yg
dGhlIHVwZ3JhZGUgcHJvY2Vzcy4KCSMKCgkjIENvcHkgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZGF0
YSB0byBzZWNvbmRhcnkgZmxhc2gKCWlmIFsgIiRET19SRUlOU1RBTEwiIC1hICAiJERPX1NFQ09O
REFSWSIgXSA7IHRoZW4KCQljb3B5X2NvbmZpZ19maWxlcyB8fCB7CgkJCWVycm9yX2NsZWFudXAK
CQkJZXhpdCAxCgkJfQoJZmkKCglpZiBbICIkRE9fU0VDT05EQVJZIiBdIDsgdGhlbgoJCXJlY29y
ZCAiVXBncmFkZSBvZiB0aGUgc3RhbmRieSBmbGFzaCBjb21wbGV0ZWQiCgllbHNlCgkJcmVjb3Jk
ICJVcGdyYWRlIG9mIHRoZSBwcmltYXJ5IGZsYXNoIGNvbXBsZXRlZCIKCWZpCgoJcmVjb3JkICJT
eXN0ZW0gVXBncmFkZSBjb21wbGV0ZWQgYXQ6IGBkYXRlYCIKCgkjIE1vdmUgdGhlIGxvZyBvZiB0
aGlzIHRyYW5zYWN0aW9uIHRvIGZsYXNoCglpZiBbICIkRE9fUkVJTlNUQUxMIiBdIDsgdGhlbgoJ
CSMgTmVlZCB0byByZW1vdW50IENGIGRpcnMKCQlpZiBbICIkRE9fU0VDT05EQVJZIiBdIDsgdGhl
bgoJCQltb3VudCAkc2VjX3ZhciAkQ0ZfRElSL3ZhcgoJCQltdiAkTE9HICR7Q0ZfRElSfSR7U1lT
TE9HfQoJCQl1bW91bnQgJHtDRl9ESVJ9L3ZhcgoJCWVsc2UKCQkJbXYgJExPRyAkU1lTTE9HCgkJ
ZmkKCWZpCgoJdW1vdW50X3NlY29uZGFyeQoKCWlmIFsgIiRET19QUklNQVJZIiBdIDsgdGhlbgoJ
CXJlY29yZCAiVW5tb3VudGluZyBmaWxlc3lzdGVtcyBhbmQgUmVib290aW5nIHRoZSBzeXN0ZW0i
CgkJIyBwbSBuZWVkcyB0byBiZSB1cCBiZWZvcmUgc3lzdGVtIHJlYm9vdCB3aWxsIHdvcmsKCQkk
e09OU1RPUl9CSU59L3BtCgkJc2xlZXAgNQoJCXJlY29yZCAiU2FmZSBzaHV0b3duIGluIHByb2dy
ZXNzIgoJCW5meHNoIC1lICAic3lzdGVtIHJlYm9vdCAteSIKCWZpCn0KCiMKIyBtYWluIGJlZ2lu
cyBoZXJlCiMKCnRyYXAgJ3JlY29yZCAiSW50ZXJydXB0IGRldGVjdGVkIGNsZWFuaW5nIHVwIjsg
ZXJyb3JfY2xlYW51cDsgZXhpdCcgMSAyIDE1CgppZiBbIC16ICIkUlVOX1NUQU5EQUxPTkUiIF0g
OyB0aGVuCglMT0c9JFNZU0xPRwpmaQoKaWYgWyAhIC1kICRNTlQxIF0gOyB0aGVuCgltb3VudCAt
dSAtdyAvICYmCglta2RpciAtcCAkTU5UMSAmJgoJbW91bnQgLXUgLXIgLwpmaQoKaWYgWyAiJERP
X0RPV05MT0FEIiBdIDsgdGhlbgoJbGVzc19tZW1fZG93bmxvYWQgfHwgewoJCXVtb3VudF9wYXRo
cyAkVEFSX0RJUgoJCXJlY29yZCAiVXBncmFkZSBmYWlsZWQ6IHRlcm1pbmF0aW5nLiIKCQlleGl0
IDEKCX0KZmkKCmlmIFsgIiRET19TRUNPTkRBUlkiIF0gOyB0aGVuCglpZF9zZWNvbmRhcnkKCXVt
b3VudF9zZWNvbmRhcnkKCWNoZWNrX3NlY29uZGFyeSB8fCB7CgkJIyBmc2NrIHB1a2VkIG9uIHVz
OiBub3QgZ29vZAoJCXJlY29yZCAiQ291bGQgbm90IGZpeCBhIGZpbGVzeXN0ZW0sIHVwZ3JhZGUg
Y2FuY2VsbGVkLiIKCQl1bW91bnRfcGF0aHMgJFRBUl9ESVIKCQlleGl0IDEKCX0KCW1vdW50X3Nl
Y29uZGFyeSB8fCB7CgkJcmVjb3JkICJQcm9ibGVtIGVuY291bnRlcmVkIG1vdW50aW5nIHNlY29u
ZGFyeSBDRiwgdGVybWluYXRpbmcuIgoJCWV4aXQgMQoJfQpmaQoKY2RfZmxhc2gKCiNwcmVzZXJ2
ZSBwcmV2aW91cyBpbnN0YWxsJ3MgbG9nIChqdXN0IGxhc3QgdmVyc2lvbiB3aWxsIGJlIHNhdmVk
KQpbICIkUlVOX1NUQU5EQUxPTkUiIC1hIC1yICRTWVNMT0cgXSAmJiBtdiAkU1lTTE9HICR7U1lT
TE9HfS5wcmV2aW91cwoKIyBWZXJpZnkgdGhlIG1hbmlmZXN0IGZpbGVzLgp2ZXJpZnlfbWFuaWZl
c3QgfHwgewoJcmVjb3JkICJBIHByb2JsZW0gdmVyaWZ5aW5nIG9yIHVwZGF0aW5nIHRoZSBtYW5p
ZmVzdCBtYW5pZmVzdHMgd2UgYWJvcnQuIgoJZXJyb3JfY2xlYW51cAoJZXhpdCAxCn0KCiMgQ2hl
Y2sgZmlsZXMgZm9yIGludGVncml0eSBhbmQgbmVlZCB0byB1cGdyYWRlLgp2ZXJpZnlfc3Vtcwpy
ZXBvcnRfdmVyaWZ5X3Jlc3VsdHMKCiMgcmV0dXJuIHRvIHJvb3QgYWZ0ZXIgdmVyaWZ5X3N1bXMK
Y2QgLwoKIyBBbmQgb3B0aW9uYWxseSBpbnN0YWxsIGlmIG5lZWRlZC4gRG9uJ3QgYm90aGVyIGlu
c3RhbGxpbmcgaWYgbm8gZmlsZXMgY2hhbmdlZC4KaWYgWyAiYGVjaG8gJERPX09WRVJTIHwgaGVh
ZCAtMWAiIC1hICAiJERPX1JFSU5TVEFMTCIgXSA7IHRoZW4KCWlmIFsgIiRET19QUklNQVJZIiAt
YSAiJFJVTl9TVEFOREFMT05FIiBdIDsgdGhlbgoJCXNodXRkb3duX3BtCglmaQoJcmVpbnN0YWxs
IHx8IHsKCQlyZWNvcmQgIlNlcmlvdXMgcHJvYmxlbSBlbmNvdW50ZXJlZC4gIEFib3J0aW5nIHVw
Z3JhZGUuIgoJCWVycm9yX2NsZWFudXAKCQlleGl0IDEKCX0KCXN5bmMKCSMgdmVyaWZ5IHRoZSBp
bnN0YWxsYXRpb24gd2VudCBva2F5LgoJdmVyaWZ5X3N1bXMKCXJlcG9ydF92ZXJpZnlfcmVzdWx0
cwoJY2QgLwpmaQoKcmVtb3ZlX29sZF9tYW5pZmVzdAoKaWYgWyAiJFJVTl9TVEFOREFMT05FIiBd
IDsgdGhlbgoJZmluaXNoX3N0YW5kYWxvbmVfaW5zdGFsbApmaQoKIyBEb25lIHdpdGggTUZTIHNv
IHVubW91bnQKaWYgWyAiJERPX0RPV05MT0FEIiBdIDsgdGhlbgoJdW1vdW50ICRUQVJfRElSCmZp
Cg==

--MP_FvHnAJsOn/ntybulo/lPgvP--
