[mh] Tasmota_HTTP_item.pm
Giles Godart-Brown <[email protected]> Mon, 18 Dec 2023 11:08:12 +0000
| Newsgroups | gmane.comp.misc.misterhouse.user |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format.
--------------uHefEVulzqwAEajfPTM3GqKK
Content-Type: multipart/alternative;
boundary="------------1p60H8Zj1TWXbzNmzLNSw3qf"
--------------1p60H8Zj1TWXbzNmzLNSw3qf
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
All
I've been working on the async mode with Tasmota devices (I have over 50
of them) and have made the following changes to
Tasmota_HTTP_item.pm (attached - search for GGB to find changes)
1) moved the output file for async calls to data/tasmota_http to stop
the data directory getting clogged in large installations
2) changed many of the print_log statements to use the new format
print_log(message,severity,source) and added a few I needed
to debug my additions
3) added condition checks at start of set code to allow devices detected
elsewhere to be marked inactive or unplugged
unplugged is for devices temporarily unplugged e.g. Xmas tree lights
active is used for devices found not to be working but ought to be OK
4) bug fix to change $self->send_cmnd($cmd) to $self->send_cmd($cmd)
5) added a "this_set_by" attribute so that the set_by attribute is
preserved in async calls and not
always set to "process item"
5) added a print log to the async process_check to print out the status
in the event of a failure
Before i do a pull request, does anyone have any other additions?
Happy Christmas/Holidays
Giles
--------------1p60H8Zj1TWXbzNmzLNSw3qf
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<font size="4" face="Calibri">All<br>
I've been working on the async mode with Tasmota devices (I have
over 50 of them) and have made the following changes to <br>
Tasmota_HTTP_item.pm (attached - search for GGB to find changes)<br>
<br>
1) moved the output file for async calls to data/tasmota_http to
stop the data directory getting clogged in large installations<br>
2) changed many of the print_log statements to use the new format
print_log(message,severity,source) and added a few I needed <br>
to debug my additions<br>
3) added condition checks at start of set code to allow devices
detected elsewhere to be marked inactive or unplugged<br>
unplugged is for devices temporarily unplugged e.g. Xmas tree
lights <br>
active is used for devices found not to be working but ought to
be OK<br>
4) bug fix to change $self->send_cmnd($cmd) to
$self->send_cmd($cmd)<br>
5) added a "this_set_by" attribute so that the set_by attribute is
preserved in async calls and not <br>
always set to "process item"<br>
5) added a print log to the async process_check to print out the
status in the event of a failure<br>
<br>
Before i do a pull request, does anyone have any other additions?<br>
<br>
Happy Christmas/Holidays<br>
Giles<br>
</font>
</body>
</html>
--------------1p60H8Zj1TWXbzNmzLNSw3qf--
--------------uHefEVulzqwAEajfPTM3GqKK
Content-Type: text/x-perl-script; charset=UTF-8; name="Tasmota_HTTP_Item.pm"
Content-Disposition: attachment; filename="Tasmota_HTTP_Item.pm"
Content-Transfer-Encoding: base64
PWJlZ2luIGNvbW1lbnQKClRhc21vdGFfSFRUUF9JdGVtLnBtCgpCYXNpYyBUYXNtb3RhIHN1
cHBvcnQgdXNpbmcgdGhlIEhUVFAgaW50ZXJmYWNlIHJhdGhlciB0aGFuIE1RVFQKQ29weXJp
Z2h0IChDKSAyMDIwIEplZmYgU2lkZGFsbCAoamVmZkBzaWRkYWxsLm5hbWUpCkxhc3QgbW9k
aWZpZWQ6IDIwMjEtMDItMjIgdG8gcHVzaCwgcG93ZXIsIHJyZCBhbmQgYXN5bmMgc3VwcG9y
dCAoaHApCgpDT05GSUcuSU5JCnNldHRpbmcgdGFzbW90YV9zeW5jPTEgaW4gY29uZmlnLmlu
aSB3aWxsIHVzZSBhIGRpcmVjdCBnZXQgcmF0aGVyIHRoYW4gYSBQcm9jZXNzX0l0ZW0gdG8g
cHJldmVudCBwYXVzZXMgaW4gbWFpbiBsb29wIAoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m
dHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBv
ZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
ClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgpUaGlz
IG1vZHVsZSBjdXJyZW50bHkgc3VwcG9ydHMgVGFzbW90YSBzd2l0Y2gsIHBvd2VyIG1vbml0
b3JpbmcgYW5kIGZhbiB0eXBlIGRldmljZXMgYnV0IG90aGVyCmRldmljZXMgY2FuIGJlIGFk
ZGVkIHdpdGggZXh0cmEgcGFja2FnZXMKClJlcXVpcmVtZW50czoKCiAgVGhlIFRhc21vdGEg
ZGV2aWNlIG5lZWRzIHRvIGJlIHNldHVwIHdpdGggYSBydWxlIHRvIHNlbmQgSFRUUCByZXF1
ZXN0cyB0byBNSAogIGlmIHR3by13YXkgY29tbXVuaWNhdGlvbiBpcyBkZXNpcmVkLiAgRm9y
IGV4YW1wbGUsIGEgU29ub2ZmIE1pbmkgc3dpdGNoIGlucHV0CiAgY2FuIGJlIHNlbnQgdG8g
TUggd2l0aCB0aGUgcnVsZToKICBSdWxlMSBPTiBQb3dlcjEjU3RhdGUgRE8gV2ViU2VuZCBb
MTkyLjE2OC4wLjE6ODBdIC9TRVQ7bm9uZT9zZWxlY3RfaXRlbT1LaXRjaGVuX0xpZ2h0JnNl
bGVjdF9zdGF0ZT0ldmFsdWUlIEVORE9OCgogIEZvciBBc3luY2hyb25vdXMgc2V0dXAsIHRo
ZXJlIGFyZSAyIHJ1bGVzIChjaGFuZ2UgbWhpcDpwb3J0IHRvIHRoZSBtaXN0ZXJob3VzZSBp
cCBhZGRyZXNzIGFuZCBwb3J0KQogIFJ1bGUxIE9OIFJ1bGVzI1RpbWVyPTEgRE8gQkFDS0xP
RyBXZWJTZW5kIFttaGlwOnBvcnRdIC9TVUIlM0J0YXNtb3RhX3B1c2goaGIpOyBSdWxlVGlt
ZXIxIDEwIEVORE9OCiAgUnVsZTEgNAogIFJ1bGVUaW1lciAxMAogIAogICogUnVsZSAxIHNl
bmRzIGEgJ2hlYXJ0YmVhdCcgd2ViIGNhbGwgZXZlcnkgMTAgc2Vjb25kcy4gSWYgTUggZG9l
c24ndCByZWNlaXZlIGEgaGVhcnRiZWF0IGZvciBhIGRldmljZSB3aXRoaW4gYSBtaW51dGUs
IHRoZQogICAgZGV2aWNlIHN0YXRlIGlzIHNldCB0byAndW5rbm93bicuIFRoaXMgY2FuIGJl
IGRpc2FibGVkIHdpdGggdGhlIG5vaGIgb3B0aW9uCiAgICAKICBSdWxlMiBPTiBQb3dlcjEj
U3RhdGUgRE8gV2ViU2VuZCBbbWhpcDpwb3J0XSAvU1VCO3Rhc21vdGFfcHVzaChzdGF0ZSwl
dmFsdWUlKSBFTkRPTgogIAogICogUnVsZSAyIGlzIGEgbW9yZSBnZW5lcmljIHdlYiBjYWxs
LiBJdCBkb2Vzbid0IHJlcXVpcmUgc2V0dGluZyB0aGUgdGFzbW90YSBkZXZpY2UgdG8gdGhl
IHNwZWNpZmljIE1IIG9iamVjdC4gSW5zdGVhZAogICAgVGhlIHNvdXJjZSBhZGRyZXNzIG9m
IHRoZSBkZXZpY2UgaXMgdXNlZCB0byBsb29rIHVwIHRoZSBwcm9wZXIgTUggb2JqZWN0Lgog
ICAgCiAgKioqIElNUE9SVEFOVCAqKiogOiB0aGUgdGFzbW90YSBkZXZpY2UgbmVlZHMgdG8g
YmUgc2V0IHVwIHdpdGggdGhlIElQIGFkZHJlc3MgcmF0aGVyIHRoYW4gYSBETlMgbmFtZQog
IAogIC0tLS0tIE90aGVyIFJ1bGVzIC0tLS0tCiAgKiBQb3dlciBNb25pdG9yaW5nCiAgUnVs
ZTMKICAgT04gRW5lcmd5I1Bvd2VyIERPIFZBUjEgJXZhbHVlJSBFTkRPTgogICBPTiBFbmVy
Z3kjQ3VycmVudCBETyBWQVIyICV2YWx1ZSUgRU5ET04KICAgT04gTWFyZ2lucyNQb3dlckRl
bHRhIERPIEJBQ0tMT0cgVkFSMyAxOyBSdWxlVGltZXIyIDEgRU5ET04KICAgT04gVkFSMyNT
dGF0ZSA+IDYgMCBETyBCQUNLTE9HIFJ1bGVUaW1lcjIgMCA7IFZBUjMgMCBFTkRPTgogICBP
TiBSdWxlcyNUaW1lcj0yIERPIEJBQ0tMT0cgV2ViU2VuZCBbbWhpcDpwb3J0XSAvU1VCJTNC
dGFzbW90YV9wdXNoKHBvd2VyLCV2YXIxJSwldmFyMiUpOyBSdWxlVGltZXIyIDE7IEFERDMg
MSAgRU5ET04KCiAgUG93ZXJEZWx0YSAxMAogIFZBUjMgMAogIAogICogUnVsZSAzIHRyaWdn
ZXJzIHdoZW4gUG93ZXJEZWx0YSUgcG93ZXIgY2hhbmdlIGhhcyBvY2N1cnJlZC4gSXQgdGhl
biBzZW5kcyBwb3dlciBkYXRhIHRvIE1IIGZvciB0aGUgbmV4dCA1IHNlY29uZHMsIHRvIAog
ICAgZW5zdXJlIGEgcHJvcGVyIHJlYWRpbmcgaXMgY2FwdHVyZWQuCgoKClNldHVwOgoKSW4g
eW91ciBjb2RlIGRlZmluZSBUYXNtb3RhX0hUVFA6OlRoaW5ncyBpbiBhbiBNSFQ6CgogIFRB
U01PVEFfSFRUUF9TV0lUQ0gsICAgMTkyLjE2OC54LnksICAgS2l0Y2hlbl9MaWdodCwgICBQ
T1dFUjEsICAgS2l0Y2hlbiwgb3B0aW9ucwogIAogIHdoZXJlIG9wdGlvbnMgYXJlIHN5bmMg
KGZvciBzZW5kaW5nIGEgZ2V0IGRpcmVjdGx5IGluIHRoZSBsb29wKSwgbm9oYiAoZGlzYWJs
ZSBoZWFydGJlYXQgY2hlY2tpbmcpLCBkZWJ1ZyBvciBycmQgKGZvciBwb3dlciBtb25pdG9y
aW5nKQoKT3IgaW4gYSBjb2RlIGZpbGU6CgogJEtpdGNoZW5fTGlnaHQgPSBuZXcgVGFzbW90
YV9IVFRQOjpTd2l0Y2goIjE5Mi4xNjgueC55IiwgIlBPV0VSMSIpOwogV2hlcmU6CiAgIDE5
Mi4xNjgueC55IGlzIHRoZSBJUHY0IGFkZHJlc3Mgb3IgaG9zdG5hbWUgb2YgdGhlIFRhc21v
dGEgZGV2aWNlCiAgIFBPV0VSMSBpcyB0aGUgbmFtZSBvZiB0aGUgVGFzbW90YSBvdXRwdXQg
dG8gY29udHJvbCAoUE9XRVIxIGlmIG5vdCBzcGVjaWZpZWQpCgogJEtpdGNoZW5fTGlnaHQt
PnNldChPTik7CgpEZWNlbWJlciAyMDIzIEdHQiBhZGRpdGlvbnMKMSkgbW92ZWQgdGhlIG91
dHB1dCBmaWxlIGZvciBhc3luYyBjYWxscyB0byBkYXRhL3Rhc21vdGFfaHR0cCB0byBzdG9w
IHRoZSBkYXRhIGRpcmVjdG9yeSBnZXR0aW5nIGNsb2dnZWQgaW4gbGFyZ2UgaW5zdGFsbGF0
aW9ucwoyKSBjaGFuZ2VkIG1hbnkgb2YgdGhlIHByaW50X2xvZyBzdGF0ZW1lbnRzIHRvIHVz
ZSB0aGUgbmV3IGZvcm1hdCBwcmludF9sb2cobWVzc2FnZSxzZXZlcml0eSxzb3VyY2UpIGFu
ZCBhZGRlZCBhIGZldyBJIG5lZWRlZCAKICAgdG8gZGVidWcgbXkgYWRkaXRpb25zCjMpIGFk
ZGVkIGNvbmRpdGlvbiBjaGVja3MgYXQgc3RhcnQgb2Ygc2V0IGNvZGUgYWxsb3cgZGV2aWNl
cyBkZXRlY3RlZCBlbHNld2hlcmUgdG8gYmUgbWFya2VkIGluYWN0aXZlIG9yIHVtcGx1Z2dl
ZAogICB1bnBsdWdnZWQgaXMgZm9yIGRldmljZXMgdGVtcG9yYXJpbHkgdW5wbHVnZ2VkIGUu
Zy4gWG1hcyB0cmVlIGxpZ2h0cyAKICAgYWN0aXZlIGlzIHVzZWQgZm9yIGRldmljZXMgZm91
bmQgbm90IHRvIGJlIHdvcmtpbmcgYnV0IG91Z2h0IHRvIGJlIE9LCjQpIGJ1ZyBmaXggdG8g
Y2hhbmNlICRzZWxmLT5zZW5kX2NtbmQoJGNtZCkgdG8gJHNlbGYtPnNlbmRfY21kKCRjbWQp
CjUpIGFkZGVkIGEgdGhpc19zZXRfYnkgYXR0cmlidXRlIHNvIHRoYXQgdGhlIHNldF9ieSBh
dHRyaWJ1dGUgaXMgcHJlc2VydmVkIGluIGFzeW5jIGNhbGxzIGFuZCBub3QgCiAgIGFsd2F5
cyBzZXQgdG8gInByb2Nlc3MgaXRlbSIKNSkgYWRkZWQgYSBwcmludCBsb2cgdG8gdGhlIGFz
eW5jIHByb2Nlc3NfY2hlY2sgdG8gcHJpbnQgb3V0IHRoZSBzdGF0dXMgaW4gdGhlIGV2ZW50
IG9mIGEgZmFpbHVyZQoKPWN1dAoKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQojCiMgR2VuZXJpYyBUYXNtb3RhX0hUVFA6Okl0ZW0KIwojPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CgojIFRoZSBUYXNtb3RhX0hUVFA6Okl0ZW0gaXMgYSBiYXNlIGl0
ZW0gZm9yIG90aGVyIHJlYWwgZGV2aWNlcyAoc2VlIGJlbG93KQoKb3VyICRUYXNtb3RhX0hU
VFBfSXRlbXMgPXt9OyAjaGFzaCBvZiBhZGRyZXNzZXMgYW5kIGRldmljZSB0eXBlIHVzZWQg
Zm9yIHB1c2ggcHJvY2Vzc2luZwoKcGFja2FnZSBUYXNtb3RhX0hUVFA6Okl0ZW07CnVzZSBz
dHJpY3Q7CnVzZSBwYXJlbnQgJ0dlbmVyaWNfSXRlbSc7CgoKdXNlIERhdGE6OkR1bXBlcjsK
dXNlIExXUDo6VXNlckFnZW50ICgpOwp1c2UgSlNPTjsKdXNlIFVSSTo6RXNjYXBlOwoJCiMg
SXRlbSBjbGFzcyBjb25zdHJ1Y3RvcgpzdWIgbmV3IHsKICAgIG15ICggJGNsYXNzLCAkYWRk
cmVzcywgJG91dHB1dCwgJG9wdGlvbnMgKSA9IEBfOwoKICAgICMgQ2FsbCB0aGUgcGFyZW50
IGNsYXNzIGNvbnN0cnVjdG9yIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGltcG9ydGFudCB0aGlu
Z3MgYXJlIGRvbmUKICAgIG15ICRzZWxmID0gbmV3IEdlbmVyaWNfSXRlbSgpOwogICAgYmxl
c3MgJHNlbGYsICRjbGFzczsKCiAgICAjIEFkZGl0aW9uYWwgVGFzbW90YSB2YXJpYWJsZXMK
ICAgICRzZWxmLT57YWRkcmVzc30gICAgID0gJGFkZHJlc3M7CgogICAgJHNlbGYtPnthc3lu
Y30gPSAxOwogICAgJHNlbGYtPnthc3luY30gPSAwIGlmICgkbWFpbjo6Y29uZmlnX3Bhcm1z
e3Rhc21vdGFfc3luY30gb3IgKCRvcHRpb25zID1+IC9zeW5jL2kpKTsKICAgICRzZWxmLT57
YXN5bmN9ID0gMSBpZiAoJG1haW46OmNvbmZpZ19wYXJtc3t0YXNtb3RhX2FzeW5jfSBvciAo
JG9wdGlvbnMgPX4gL2FzeW5jL2kpKTsKCiAgCiAgICAkc2VsZi0+e2xvZ2xldmVsfSA9IDE7
ICNzaG93IElORk8gbWVzc2FnZXMKICAgICRzZWxmLT57ZGVidWd9ID0gMDsKICAgICRzZWxm
LT57ZGVidWd9ID0gMSBpZiAoJG1haW46OkRlYnVne3Rhc21vdGF9IG9yICgkb3B0aW9ucyA9
fiAvZGVidWcvaSkpOwoKICAgIAogICAgaWYgKGRlZmluZWQoJG91dHB1dCkpIHsKICAgICAg
ICAkc2VsZi0+e291dHB1dF9uYW1lfSA9ICRvdXRwdXQ7CiAgICB9IGVsc2UgewogICAgICAg
ICRzZWxmLT57b3V0cHV0X25hbWV9ID0gJ1BPV0VSMSc7CiAgICB9CiAgICAkc2VsZi0+e2Fj
a30gICAgICAgICA9IDA7CiAgICAkc2VsZi0+e2xhc3RfaHR0cF9zdGF0dXN9OwoKICAgIGlm
ICgoICRvcHRpb25zID1+IG0vbm9oYi9pICkgb3IgKCAkb3B0aW9ucyA9fiBtL25vaGVhcnRi
ZWF0L2kgKSkgewogICAgICAgICRzZWxmLT57aGVhcnRiZWF0X2VuYWJsZX0gPSAwOwogICAg
ICAgICZtYWluOjpwcmludF9sb2coIltUYXNtb3RhX0hUVFA6Okl0ZW1dICIgLiAkc2VsZi0+
e2FkZHJlc3N9IC4gIiBoZWFydGJlYXQgY2hlY2sgRElTQUJMRUQiLCJERUJVRyIsICJUYXNt
b3RhX0hUVFBfaXRlbS5uZXciICk7ICAgCgogICAgfSBlbHNlIHsKICAgICAgICAkc2VsZi0+
e2hlYXJ0YmVhdF9lbmFibGV9ID0gMTsKICAgICAgICAkc2VsZi0+e2hlYXJ0YmVhdF90aW1l
c3RhbXB9ID0gMDsKICAgICAgICAkc2VsZi0+e2hlYXJ0YmVhdF90aW1lcn0gPSBuZXcgVGlt
ZXI7CiAgICAgICAgJHNlbGYtPntoZWFydGJlYXRfdGltZXJ9LT5zZXQoNjApOwogICAgICAg
ICZtYWluOjpwcmludF9sb2coIltUYXNtb3RhX0hUVFA6Okl0ZW1dICIgLiAkc2VsZi0+e2Fk
ZHJlc3N9IC4gIiBoZWFydGJlYXQgY2hlY2sgZW5hYmxlZCB3aXRoIDYwIHNlY29uZCB0aW1l
b3V0IiwiREVCVUciLCAiVGFzbW90YV9IVFRQX2l0ZW0ubmV3IiApOyAgIAoKICAgIH0KICAg
IG15ICRtb2RlID0gInN5bmNocm9ub3VzIGdldCI7CiAgICAKICAgIGlmICgkc2VsZi0+e2Fz
eW5jfSkgewogICAgICAgIEB7ICRzZWxmLT57Y21kX3F1ZXVlfSB9ID0gKCk7CiAgICAgICAg
JHNlbGYtPnttYXhfY21kX3F1ZXVlfSAgICAgICAgICA9IDY7CiAgICAgICAgJHNlbGYtPntt
YXhfY21kX3F1ZXVlfSAgICAgICAgICA9ICRtYWluOjpjb25maWdfcGFybXN7dGFzbW90YV9t
YXhfY21kX3F1ZXVlfSAgICAgaWYgKCBkZWZpbmVkICRtYWluOjpjb25maWdfcGFybXN7dGFz
bW90YV9tYXhfY21kX3F1ZXVlfSApOzsgIAogICAgICAgCiAgICAgICAgIyBHR0IgbW92ZWQg
Y29tbWFuZCByZXNwb25zZXMgdG8gYSBzdWIgZGlyZWN0b3J5ICBzbyBpbnN0YWxsYXRpb25z
IHdpdGggYSBsb3Qgb2YgZGV2aWNlcyBkb250IGNsb2cgdXAgdGhlIGRhdGEgZGlyZWN0b3J5
ICAgCiAgICAgICAgCiAgICAgICAgbWtkaXIoJDo6Y29uZmlnX3Bhcm1ze2RhdGFfZGlyfSAu
ICIvdGFzbW90YV9odHRwIikgdW5sZXNzICgtZCAkOjpjb25maWdfcGFybXN7ZGF0YV9kaXJ9
IC4gIi90YXNtb3RhX2h0dHAiKTsgICAKICAgICAgICAjeW91IG1heSB3YW50IHRvIGNob3du
IHRoaXMgZGlyIHRvIHBpOnBpIGRlcGVuZGluZyBvbiB5b3VyIGluc3RhbGxhdGlvbiAgIAog
ICAgICAgICMkc2VsZi0+e2NtZF9kYXRhX2ZpbGV9ID0gIiQ6OmNvbmZpZ19wYXJtc3tkYXRh
X2Rpcn0vdGFzbW90YV9jbWRfIiAuICRzZWxmLT57YWRkcmVzc30gLiAiLmRhdGEiOwogICAg
ICAgICRzZWxmLT57Y21kX2RhdGFfZmlsZX0gPSAiJDo6Y29uZmlnX3Bhcm1ze2RhdGFfZGly
fS90YXNtb3RhX2h0dHAvdGFzbW90YV9jbWRfIiAuICRzZWxmLT57YWRkcmVzc30gLiAiLmRh
dGEiOwogICAgICAgICN1bmxpbmsgIiQ6OmNvbmZpZ19wYXJtc3tkYXRhX2Rpcn0vdGFzbW90
YV9jbWRfIiAuICRzZWxmLT57YWRkcmVzc30gLiAiLmRhdGEiOwogICAgICAgIHVubGluayAi
JDo6Y29uZmlnX3Bhcm1ze2RhdGFfZGlyfS90YXNtb3RhX2h0dHAvdGFzbW90YV9jbWRfIiAu
ICRzZWxmLT57YWRkcmVzc30gLiAiLmRhdGEiOyAgICAgICAKICAgICAgICAjIGVuZCBHR0IK
ICAgICAgICAgCiAgICAgICAgCiAgICAgICAgJHNlbGYtPntjbWRfcHJvY2Vzc30gPSBuZXcg
UHJvY2Vzc19JdGVtOwogICAgICAgICRzZWxmLT57Y21kX3Byb2Nlc3N9LT5zZXRfb3V0cHV0
KCAkc2VsZi0+e2NtZF9kYXRhX2ZpbGV9ICk7CiAgICAgICAgJjo6TWFpbkxvb3BfcG9zdF9h
ZGRfaG9vayggXCZUYXNtb3RhX0hUVFA6Okl0ZW06OnByb2Nlc3NfY2hlY2ssIDAsICRzZWxm
ICk7ICNjaGVjayBmb3IgY2hhbmdlcyB0byBvdXRwdXQgZmlsZSwgYW5kIHRoZW4gcHJvY2Vz
cyByZXN1bHRzCiAgICAgICAgJFRhc21vdGFfSFRUUF9JdGVtcy0+eyRzZWxmLT57YWRkcmVz
c319LT57b2JqZWN0fSA9IFwleyRzZWxmfTsKICAgICAgICAkVGFzbW90YV9IVFRQX0l0ZW1z
LT57JHNlbGYtPnthZGRyZXNzfX0tPnt0eXBlfSA9ICJnZW5lcmljIjsKICAgICAgICAkbW9k
ZSA9ICJhc3luY2hyb25vdXMgcHJvY2Vzc19pdGVtIjsKICAgIH0KICAgIAogICAgI0dHQiBl
ZGl0IHRvIGRlYnVnIHByaW50CiAgICMgJm1haW46OnByaW50X2xvZygiW1Rhc21vdGFfSFRU
UDo6SXRlbV0gIiAuICRzZWxmLT57YWRkcmVzc30gLiAiIHNldCBmb3IgIiAuICRtb2RlIC4g
IiBkYXRhIG1vZGUiLCJERUJVRyIsICJUYXNtb3RhX0hUVFBfaXRlbS5uZXciICk7ICAKICAg
ICAmbWFpbjo6cHJpbnRfbG9nKCRzZWxmLT57YWRkcmVzc30gLiAiIHNldCBmb3IgIiAuICRt
b2RlIC4gIiBkYXRhIG1vZGUiLCJERUJVRyIsICJUYXNtb3RhX0hUVFBfaXRlbS5uZXciICk7
ICAgICAgICAKICAgICMgZW5kIEdHQiBlZGl0CiAgICAKICAgIHJldHVybiAkc2VsZjsKfQoK
IyBVc2UgSFRUUCBnZXQgY2FsbHMgdG8gc2V0IHRoZSBUYXNtb3RhIGl0ZW0sIGJlaW5nIHN1
cmUgdG8gY2hlY2sgdGhhdCB0aGUgc2V0IGRpZCBub3QgY29tZQojIGZyb20gdGhlIGRldmlj
ZSBpdHNlbGYKc3ViIHNldCB7CiAgICBteSAoICRzZWxmLCAkc3RhdGUsICRzZXRfYnksICRy
ZXNwb25kICkgPSBAXzsKICAgIAogICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICMgYWRkZWQgYnkgR0dC
ICB0byBhbGxvdyBkZXZpY2VzIGRldGVjdGVkIGVsc2V3aGVyZSB0byBiZSBtYXJrZWQgaW5h
Y3RpdmUgb3IgdW1wbHVnZ2VkCiAgIyBlLmcuIHVucGx1Z2dlZCBpcyBmb3IgZGV2aWNlcyB0
ZW1wb3JhcmlseSB1bnBsdWdnZWQgbGlrZSBYbWFzIHRyZWUgbGlnaHRzIAogICMgYWN0aXZl
IGlzIHVzZWQgZm9yIGZvdW5kIG5vdCB0byBiZSB3b3JraW5nIGJ1dCBvdWdodCB0byBiZSBP
SwogICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogIAogIGlmICggJHNlbGYtPnthY3RpdmV9ICE9IDEgKSB7
CgkJJm1haW46OnByaW50X2xvZyggc3Vic3RyKCAkc2VsZi0+e29iamVjdF9uYW1lfSwgMSAp
IC4gIiBpcyBvZmZsaW5lICgiIC4gJHNlbGYtPnthY3RpdmV9IC4gIikiLCAiREVCVUciLCAi
VGFzbW90YV9IVFRQIiApOwoJCXJldHVybjsKCX0KCWlmICggJHNlbGYtPnt1bnBsdWdnZWR9
IGVxICJ5IikgewoJCSZtYWluOjpwcmludF9sb2coIHN1YnN0ciggJHNlbGYtPntvYmplY3Rf
bmFtZX0sIDEgKSAuICIgaXMgdW5wbHVnZ2VkIiAsICJERUJVRyIsICJUYXNtb3RhX0hUVFAi
ICk7CgkJcmV0dXJuOwoJfQoJICAgIAkkc2VsZi0+e3RoaXNfc2V0X2J5fSA9ICRzZXRfYnk7
CgkKICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogICMgZW5kIG9mIGFkZGVkIGJ5IEdHQgogICMtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogICAgCiAgICAjIERlYnVnIGxvZ2dpbmcKICAgIG15ICRkZWJ1ZyA9ICRzZWxm
LT57ZGVidWd9IHx8ICRtYWluOjpEZWJ1Z3t0YXNtb3RhfTsKICAgIGlmICggJHNldF9ieSBl
cSAicHVzaCIgKSB7CiAgICAgICAgICAgICRzZWxmLT5TVVBFUjo6c2V0KCAkc3RhdGUsICRz
ZXRfYnksICRyZXNwb25kICk7CiAgICAKICAgICMgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVw
ZGF0ZSBjYW1lIGZyb20gdGhlIFRhc21vdGEgZGV2aWNlIGl0c2VsZiBhbmQgY29udmVydCBz
dGF0ZXMKICAgICMgYW5kIHJlY29yZCB0aGUgc2V0IGFzIGFuIGFjawogICAgfSBlbHNpZiAo
ICRzZXRfYnkgZXEgIndlYiBbJHNlbGYtPnthZGRyZXNzfV0iICkgewoKICAgICAgICAjIENv
bnZlcnQgVGFzbW90YSBzdGF0ZXMgdG8gTUggc3RhdGVzCiAgICAgICAgJHN0YXRlID0gJHNl
bGYtPnt0YXNtb3RhX3RvX3N0YXRlfXskc3RhdGV9OwoKICAgICAgICAjIElmIHRoZSBjdXJy
ZW50IHN0YXRlIGlzIHRoZSBzYW1lIGFzIHRoZSByZWNlaXZlZCBzdGF0ZSwgYW5kIGFjaz0w
IHRoZW4gY29uc2lkZXIKICAgICAgICAjIHRoaXMgc2V0IGFuIGFjayBhbmQgZG8gbm90IHVw
ZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIGl0ZW0KICAgICAgICBpZiAoICggJHN0YXRlIGVxICRz
ZWxmLT57c3RhdGV9ICkgJiYgKCAkc2VsZi0+e2Fja30gPT0gMCApICkgewogICAgICAgICAg
ICAmbWFpbjo6cHJpbnRfbG9nKCJSZWNlaXZlZCBhY2sgZnJvbSAkc2VsZi0+e29iamVjdF9u
YW1lfSAoJHNlbGYtPnthZGRyZXNzfSkiLCJERUJVRyIsICJUYXNtb3RhX0hUVFBfaXRlbS5u
ZXciKTsKICAgICAgICAgICAgJHNlbGYtPnthY2t9ID0gMTsKICAgICAgICB9CiAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICZtYWluOjpwcmludF9sb2coIlJlY2VpdmVkIHNldCBzdGF0
ZSB0byAkc3RhdGUgZnJvbSAkc2VsZi0+e29iamVjdF9uYW1lfSAoJHNlbGYtPnthZGRyZXNz
fSkiLCJERUJVRyIsICJUYXNtb3RhX0hUVFBfaXRlbS5uZXciKTsKCiAgICAgICAgICAgICMg
Q2FsbCB0aGUgcGFyZW50IGNsYXNzIHNldCB0byBtYWtlIHN1cmUgYWxsIHRoZSBpbXBvcnRh
bnQgdGhpbmdzIGFyZSBkb25lCiAgICAgICAgICAgICRzZWxmLT5TVVBFUjo6c2V0KCAkc3Rh
dGUsICRzZXRfYnksICRyZXNwb25kICk7CiAgICAgICAgfQoKICAgICAgICAjIE9ubHkgc2Vu
ZCBhbiB1cGRhdGUgdG8gdGhlIGRldmljZSBpZiB0aGUgc2V0IGRpZCBub3QgY29tZSBmcm9t
IHRoZSBkZXZpY2UgdG8gcHJldmVudAogICAgICAgICMgc2V0IGxvb3BzCiAgICB9IGVsc2lm
ICgkc2VsZi0+e2FzeW5jfSkgewogICAgCiAgICAgICAgbXkgJGNtZCA9ICIkc2VsZi0+e291
dHB1dF9uYW1lfSUyMCRzZWxmLT57c3RhdGVfdG9fdGFzbW90YX17JHN0YXRlfSI7CiAgICAg
ICAgIyBHR0IgbmV4dCBsaW5lIGNvbW1lbnRlZCBhcyBpdCB0aHJvd3MgYW4gZXJyb3IKICAg
ICAgICAjJHNlbGYtPnNlbmRfY21uZCgkY21kKTsgICAKICAgICAgICAkc2VsZi0+c2VuZF9j
bWQoJGNtZCk7ICAgCiAgICAgICAgIyBlbmQgR0dCIGVkaXQgICAgICAKCiAgICB9IGVsc2Ug
ewoKICAgICAgICAjIFVzZSBhIHNtYWxsIHRpbWVvdXQgc2luY2UgZGV2aWNlcyBhcmUgdHlw
aWNhbGx5IGxvY2FsIGFuZCBzaG91bGQgcmVzcG9uZCBxdWlja2x5CiAgICAgICAgIyA1IHNl
Y29uZHMgc2hvdWxkIGFsbG93IGZvciAzIHN5biBhdHRlbXB0cyBwbHVzIGFub3RoZXIgc2Vj
b25kIHRvIGdldCBhIHJlc3BvbnNlCiAgICAgICAgbXkgJHVhID0gTFdQOjpVc2VyQWdlbnQt
Pm5ldyggdGltZW91dCA9PiA1ICk7CgogICAgICAgICMgUmVzZXQgdGhlIGFjayBmbGFnCiAg
ICAgICAgJHNlbGYtPnthY2t9ID0gMDsKCiAgICAgICAgIyBTZW5kIHRoZSBIVFRQIHJlcXVl
c3QKICAgICAgICBteSAkcmVzcG9uc2UgPSAkdWEtPmdldCgiaHR0cDovLyRzZWxmLT57YWRk
cmVzc30vY20/Y21uZD0kc2VsZi0+e291dHB1dF9uYW1lfSUyMCRzZWxmLT57c3RhdGVfdG9f
dGFzbW90YX17JHN0YXRlfSIpOwoKICAgICAgICAjIFJlY29yZCB0aGUgc3RhdHVzIG9mIHRo
ZSBsYXN0IHJlcXVlc3QKICAgICAgICAkc2VsZi0+e2xhc3RfaHR0cF9zdGF0dXN9ID0gJHJl
c3BvbnNlLT5zdGF0dXNfbGluZTsKCiAgICAgICAgIyBMb2cgcmVxdWVzdCBmYWlsdXJlcwog
ICAgICAgIGlmICggISRyZXNwb25zZS0+aXNfc3VjY2VzcyApIHsKICAgICAgICAgICAgJm1h
aW46OnByaW50X2xvZygiW1Rhc21vdGFfSFRUUDo6SXRlbV0gRVJST1I6IFJlY2VpdmVkIEhU
VFAgcmVzcG9uc2UgY29kZSAkc2VsZi0+e2xhc3RfaHR0cF9zdGF0dXN9IGZyb20gbGFzdCBj
b21tYW5kKSIpOwogICAgICAgIH0KCiAgICAgICAgIyBDYWxsIHRoZSBwYXJlbnQgY2xhc3Mg
c2V0IHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGltcG9ydGFudCB0aGluZ3MgYXJlIGRvbmUKICAg
ICAgICAkc2VsZi0+U1VQRVI6OnNldCggJHN0YXRlLCAkc2V0X2J5LCAkcmVzcG9uZCApOwog
ICAgICAgICZtYWluOjpwcmludF9sb2coIltUYXNtb3RhX0hUVFA6Okl0ZW1dIERFQlVHOiBT
ZXQgJHNlbGYtPntvYmplY3RfbmFtZX0gc3RhdGUgdG8gJHN0YXRlIikgaWYgJGRlYnVnOwog
ICAgfQp9CgpzdWIgc2VuZF9jbWQgewogICAgbXkgKCRzZWxmLCRjbW5kKSA9IEBfOwogICAg
CiAgICBteSAkY21kID0gImdldF91cmwgLXJlc3BvbnNlX2NvZGUgLXN0YXR1c19saW5lIGh0
dHA6Ly8kc2VsZi0+e2FkZHJlc3N9L2NtP2NtbmQ9JGNtbmQiOwogICAgCiAgICAjIGFkZGVk
IGV4dHJhIGRlYnVnIHByaW50IGJ5IEdHQgogICAgJm1haW46OnByaW50X2xvZygiU2VuZGlu
ZyAkY21kIiwiREVCVUciLCAiVGFzbW90YV9IVFRQX2l0ZW0uc2VuZF9jbWQiKTsKICAgICMg
ZW5kIGFkZCBHR0IKICAgIAogICAgaWYgKCRzZWxmLT57Y21kX3Byb2Nlc3N9LT5kb25lKCkp
IHsKICAgIAkjIHRpbWVvdXQgYWRkZWQgYnkgR0dCCiAgICAJJHNlbGYtPntjbWRfcHJvY2Vz
c30tPnNldF90aW1lb3V0KDEwKTsKICAgIAkjIGVuZCBhZGQgYnkgR0dCCiAgICAgICAgJHNl
bGYtPntjbWRfcHJvY2Vzc30tPnNldCgkY21kKTsKICAgICAgICAkc2VsZi0+e2NtZF9wcm9j
ZXNzfS0+c3RhcnQoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJm1haW46OnByaW50X2xvZygi
W1Rhc21vdGFfSFRUUDo6SXRlbV0gJHNlbGYtPnthZGRyZXNzfSBJTkZPOiBsYXN0IGNvbW1h
bmQgaGFzIG5vdCBmaW5pc2hlZC4gUXVldWluZyBjb21tYW5kICRjbWQiKSBpZiAoJHNlbGYt
Pntsb2dsZXZlbH0pOyAgIAogICAgfQogICAgcHVzaCBAeyAkc2VsZi0+e2NtZF9xdWV1ZX0g
fSwgWyRjbWQsJG1haW46OlRpbWUsMF07ICAKfSAgIAoKIyBVc2UgSFRUUCBnZXQgY2FsbHMg
dG8gc2VuZCBhIGNvbW1hbmQgdG8gdGhlIFRhc21vdGEgaXRlbQojIHJldHVybnMgdGhlIEpT
T04gcmVzcG9uc2UgZnJvbSB0aGUgVGFzbW90YSBhbmQgc2V0cyAkc2VsZi0+e3J1bl9jbW5k
X3Jlc3BvbnNlfQojIGl0IHVybGVuY29kZXMgdGhlIGNvbW1hbmQgc28gdXNlciBkb2VzbnQg
bmVlZCB0bwojIGlmIG5vIGNvbW1hbmQgc2VudCBpdCBkZWNvZGVzIHRoZSBqc29uIGFuZCBy
ZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgZGV2aWNlIGUuZy4KIyAkZGV2aWNlLT5ydW5fY21u
ZCgpIHJldHVybnMgb24gb3Igb2ZmCiMgJGRldmljZS0+cnVuX2NtbmQoJ3N0YXR1cyAxMCcp
IHJldHVybnMgYSBqc29uIHN0cmluZyBvZiB0aGUgc2Vuc29yIHN0YXR1cwojICRkZXZpY2Ut
PnJ1bl9jbW5kKCdyZXN0YXJ0IDEnKSByZWJvb3RzIHRoZSBUYXNtb3RhCiMgVGhpcyBpcyBh
IHN5bmNocm9ub3VzIGNhbGwgYXQgdGhpcyB0aW1lCgpzdWIgcnVuX2NtbmQgewoJbXkgKCAk
c2VsZiwgJGNvbW1hbmQgKSA9IEBfOwoKCSMgYWRkZWQgZXh0cmEgZGVidWcgYnkgR0dCCiAg
ICAmbWFpbjo6cHJpbnRfbG9nKCJTZW5kaW5nICRjb21tYW5kIiwiSU5GTyIsICJUYXNtb3Rh
X0hUVFBfaXRlbS5ydW5fY21uZCIpOwogICAgIyBlbmQgYWRkIEdHQgogICAgCgkjIERlYnVn
IGxvZ2dpbmcKCW15ICRkZWJ1ZyA9ICRzZWxmLT57ZGVidWd9IHx8ICRtYWluOjpEZWJ1Z3t0
YXNtb3RhfTsKCgkjIFVzZSBhIHNtYWxsIHRpbWVvdXQgc2luY2UgZGV2aWNlcyBhcmUgdHlw
aWNhbGx5IGxvY2FsIGFuZCBzaG91bGQgcmVzcG9uZCBxdWlja2x5CgkjIDUgc2Vjb25kcyBz
aG91bGQgYWxsb3cgZm9yIDMgc3luIGF0dGVtcHRzIHBsdXMgYW5vdGhlciBzZWNvbmQgdG8g
Z2V0IGEgcmVzcG9uc2UKCW15ICR1YSA9IExXUDo6VXNlckFnZW50LT5uZXcoIHRpbWVvdXQg
PT4gNSApOwoKCSMgUmVzZXQgdGhlIGFjayBmbGFnCgkkc2VsZi0+e2Fja30gPSAwOwoJbXkg
JGRlY29kZV9KU09OID0gMDsKCgkjIFNlbmQgdGhlIEhUVFAgcmVxdWVzdAoJaWYgKCAhZGVm
aW5lZCgkY29tbWFuZCkgKSB7CgkJJGNvbW1hbmQgICAgID0gJHNlbGYtPntvdXRwdXRfbmFt
ZX07CgkJJGRlY29kZV9KU09OID0gMTsKCX0KCSMgbm93IFVSSSBlbmNvZGUgdGhlIGNvbW1h
bmQKCSRjb21tYW5kID0gVVJJOjpFc2NhcGU6OnVyaV9lc2NhcGVfdXRmOCgkY29tbWFuZCk7
CgoJbXkgJHJlc3BvbnNlID0gJHVhLT5nZXQoImh0dHA6Ly8kc2VsZi0+e2FkZHJlc3N9L2Nt
P2NtbmQ9JGNvbW1hbmQiKTsKCgkjIFJlY29yZCB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IHJl
cXVlc3QKCSRzZWxmLT57bGFzdF9odHRwX3N0YXR1c30gPSAkcmVzcG9uc2UtPnN0YXR1c19s
aW5lOwoKCSMgTG9nIHJlcXVlc3QgZmFpbHVyZXMKCWlmICggISRyZXNwb25zZS0+aXNfc3Vj
Y2VzcyApIHsKCQkmbWFpbjo6cHJpbnRfbG9nKCJFUlJPUjogcmVjZWl2ZWQgSFRUUCByZXNw
b25zZSBjb2RlICRzZWxmLT57bGFzdF9odHRwX3N0YXR1c30pIGZyb20gJGNvbW1hbmQiLCJX
QVJOSU5HIiwiVGFzbW90YV9IVFRQX2l0ZW0ucnVuX2NtbmQiKTsKCX0KCgkkc2VsZi0+e3J1
bl9jbW5kX3Jlc3BvbnNlfSAgPSAkcmVzcG9uc2UtPmRlY29kZWRfY29udGVudDsKCglpZiAo
JGRlY29kZV9KU09OKSB7CgkJbXkgJG91dHB1dF9uYW1lID0gJHNlbGYtPntvdXRwdXRfbmFt
ZX07CgoJCSMgb2RkbHkgaWYgeW91IHNlbmQgUE9XRVIxIG9yIFBPV0VSIGl0IHJldHVybnMg
UE9XRVIKCQlpZiAoICRvdXRwdXRfbmFtZSBlcSAiUE9XRVIxIiApIHsKCQkJJG91dHB1dF9u
YW1lID0gIlBPV0VSIjsKCQl9CgkJbXkgJGpzb25zdGF0dXMgPSBkZWNvZGVfanNvbigkc2Vs
Zi0+e3J1bl9jbW5kX3Jlc3BvbnNlfSk7CgkJJHNlbGYtPntydW5fY21uZF9yZXNwb25zZX0g
PSBsYyggJGpzb25zdGF0dXMtPnskb3V0cHV0X25hbWV9ICk7Cgl9CgoJJm1haW46OnByaW50
X2xvZygKCQkiW1Rhc21vdGFfSFRUUDo6SXRlbV0gREVCVUc6ICIgLiBzdWJzdHIoICRzZWxm
LT57b2JqZWN0X25hbWV9LCAxICkgLiAiIHJ1bl9jbW5uZCByZXR1cm5zICIgLiAkc2VsZi0+
e3J1bl9jbW5kX3Jlc3BvbnNlfSwKCQkiSU5GT1JNQVRJT05BTCIsICJUYXNtb3RhX0hUVFA6
OnJ1bl9jbW5kIiApCgkgIGlmICRkZWJ1ZzsKCglyZXR1cm4gJHNlbGYtPntydW5fY21uZF9y
ZXNwb25zZX07Cn0KCnN1YiBwcm9jZXNzX2NoZWNrIHsKICAgIG15ICgkc2VsZikgPSBAXzsK
ICAgIAogICAgaWYgKCAkc2VsZi0+e2NtZF9wcm9jZXNzfS0+ZG9uZV9ub3coKSApIHsKICAg
ICAgICAKICAgICAgICBtYWluOjpwcmludF9sb2coICJbVGFzbW90YV9IVFRQOjpJdGVtXSAi
IC4gJHNlbGYtPnthZGRyZXNzfSAuICIgQ29tbWFuZCBwcm9jZXNzIGNvbXBsZXRlZCIgKSBp
ZiAoJHNlbGYtPntsb2dsZXZlbH0pOwoKCQkKICAgICAgICBteSAkZmlsZV9kYXRhID0gJm1h
aW46OmZpbGVfcmVhZCggJHNlbGYtPntjbWRfZGF0YV9maWxlfSApOwoKICAgICAgICBteSAo
JHN0YXR1cykgPSAkZmlsZV9kYXRhID1+IG0vU1RBVFVTTElORVw6KC4qKVxuLzsKICAgICAg
ICBteSAoJHN0YXRlKSA9ICAkZmlsZV9kYXRhID1+IG0vXDpcIihbYS16QS1aMC05XSspXCJ9
LzsKICAgICAgICBteSAoJHBvd2VyKSA9ICRmaWxlX2RhdGEgPX4gbS9cIlBvd2VyXCJcOihc
ZCtcLj9cZCopLzsKICAgICAgICBteSAoJGN1cnJlbnQpID0gJGZpbGVfZGF0YSA9fiBtL1wi
Q3VycmVudFwiXDooXGQrXC4/XGQqKS87CiAgICAgICAgbWFpbjo6cHJpbnRfbG9nKCAiW1Rh
c21vdGFfSFRUUDo6SXRlbV0gIiAuICRzZWxmLT57YWRkcmVzc30gLiAiIGZpbGVfZGF0YT1b
IiAuICRmaWxlX2RhdGEgLiAiXSIpIGlmICgkc2VsZi0+e2RlYnVnfSk7ICAgCiAgICAgICAg
bWFpbjo6cHJpbnRfbG9nKCAiW1Rhc21vdGFfSFRUUDo6SXRlbV0gIiAuICRzZWxmLT57YWRk
cmVzc30gLiAiIHN0YXR1cz0kc3RhdHVzIHN0YXRlPSRzdGF0ZSBwb3dlcj0kcG93ZXIgY3Vy
cmVudD0kY3VycmVudCIpIGlmICgkc2VsZi0+e2RlYnVnfSk7ICAgCiAgICAgICAKICAgICAg
ICBpZiAoJHN0YXR1cyBlcSAiMjAwIE9LIikgewogICAgICAgICAgICBpZiAoJHN0YXRlKSB7
CiAgICAgICAgICAgIAkjIEdHQiBhZGRlZCB0aGlzX3NldF9ieSB0byBwcmVzZXJ2ZSB0aGUg
cmVhc29uIG9mIHRoZSBvcmlnaW5hbCBjYWxsZXIKICAgICAgICAgICAgICAgICRzZWxmLT5T
VVBFUjo6c2V0KCAkc3RhdGUsICRzZWxmLT57dGhpc19zZXRfYnl9KSB1bmxlc3MgKGxjICRz
dGF0ZSBlcSBsYyAkc2VsZi0+c3RhdGUoKSk7CiAgICAgICAgICAgICAgICAjIEdHQgogICAg
ICAgICAgICAgICAgIyAkc2VsZi0+U1VQRVI6OnNldCggJHN0YXRlLCAicHJvY2VzcyBpdGVt
IikgdW5sZXNzIChsYyAkc3RhdGUgZXEgbGMgJHNlbGYtPnN0YXRlKCkpOwogICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRwb3dlcikgewogICAgICAg
ICAgICAgICAgJHNlbGYtPnVwZGF0ZV9wb3dlcigkcG93ZXIsJGN1cnJlbnQpOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgICMgYWRkZWQgZGVidWcgb24gZXJy
b3IgYnkgR0dCCiAgICAgICAgZWxzZSB7CiAgICAgICAgCW1haW46OnByaW50X2xvZyggIkVy
cm9yIGNoYW5naW5nICAiIC4gc3Vic3RyKCAkc2VsZi0+e29iamVjdF9uYW1lfSwgMSApIC4g
IiAoIiAuICRzZWxmLT57YWRkcmVzc30gLiAiKSBFcnJvcj0iIC4gJHN0YXR1cyAsIldBUk5J
TkciLCJUYXNtb3RhX0hUVFBfSXRlbSBwcm9jZXNzX2NoZWNrIik7ICAgICAgICAgICAJCiAg
ICAgICAgfQogICAgICAgICMgZW5kIGFkZGVkIGJ5IEdHQgogICAgICAgIAogICAgICAgIHNo
aWZ0IEB7ICRzZWxmLT57Y21kX3F1ZXVlfSB9OyAjc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCB0
byByZW1vdmUgaXRlbSBmcm9tIHRoZSBxdWV1ZQogICAgICAgIAogICAgICAgICNjaGVjayBp
ZiB0aGVyZSBpcyBhIHF1ZXVlIG9mIGl0ZW1zOwogICAgICAgIGlmIChzY2FsYXIgQHsgJHNl
bGYtPntjbWRfcXVldWV9fSkgewogICAgICAgICAgICBteSAoJGNtZCwgJHRpbWUsICRyZXRy
eSkgPSBAIHsgJHsgJHNlbGYtPntjbWRfcXVldWV9IH1bMF0gfTsKICAgICAgICAgICAgJHNl
bGYtPntjbWRfcHJvY2Vzc30tPnNldCgkY21kKTsKICAgICAgICAgICAgJHNlbGYtPntjbWRf
cHJvY2Vzc30tPnN0YXJ0KCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICAKICAgIAogICAg
CiAgICBpZiAoJHNlbGYtPntoZWFydGJlYXRfZW5hYmxlfSkgewoKICAgICAgICBpZiAoJHNl
bGYtPntoZWFydGJlYXRfdGltZXJ9LT5leHBpcmVkKCkpIHsKICAgICAgICAgICAgJm1haW46
OnByaW50X2xvZygiW1Rhc21vdGFfSFRUUDo6SXRlbV0gJHNlbGYtPnthZGRyZXNzfSBXQVJO
SU5HLiBMb3N0IGhlYXJ0YmVhdC4gRGV2aWNlIG1pZ2h0IGJlIG9mZmxpbmUiKTsKICAgICAg
ICAgICAgJHNlbGYtPlNVUEVSOjpzZXQoICd1bmtub3duJywgJ2hlYXJ0YmVhdCcpOwogICAg
ICAgIH0KICAgIH0KfQoKc3ViIGhlYXJ0YmVhdCB7CiAgICBteSAoJHNlbGYpID0gQF87Cgog
ICAgcmV0dXJuICRzZWxmLT57aGVhcnRiZWF0X3RpbWVzdGFtcH07Cn0KCnN1YiBtYWluOjp0
YXNtb3RhX3B1c2ggewogICAgbXkgKCRhdHRyaWJ1dGUsJHZhbHVlLCR2YWx1ZTIsJHZhbHVl
MykgPSBAXzsKICAgIAogICAgbXkgJGNsaWVudF9pcF9hZGRyZXNzID0gJG1haW46OlNvY2tl
dF9Qb3J0c3todHRwfXtjbGllbnRfaXBfYWRkcmVzc307CiAgICBteSAkdHlwZSA9ICRUYXNt
b3RhX0hUVFBfSXRlbXMtPnskY2xpZW50X2lwX2FkZHJlc3N9LT57dHlwZX07CiAgICBpZiAo
JHR5cGUpIHsKICAgICAgICBteSAkZGVidWcgPSAgJFRhc21vdGFfSFRUUF9JdGVtcy0+eyRj
bGllbnRfaXBfYWRkcmVzc30tPntvYmplY3R9LT57ZGVidWd9OwogICAgICAgIG15ICRsb2ds
ZXZlbCA9ICRUYXNtb3RhX0hUVFBfSXRlbXMtPnskY2xpZW50X2lwX2FkZHJlc3N9LT57b2Jq
ZWN0fS0+e2xvZ2xldmVsfTsKICAgICAgICAmbWFpbjo6cHJpbnRfbG9nKCJ3ZWJBUEkgY2xp
ZW50PSRjbGllbnRfaXBfYWRkcmVzcyBhdHRyaWJ1dGU9JGF0dHJpYnV0ZSB2YWx1ZT0kdmFs
dWUgdmFsdWUyPSR2YWx1ZTIgdmFsdWUzPSR2YWx1ZTMgdHlwZT0kdHlwZSBhdHRyaWJ1dGU9
JGF0dHJpYnV0ZSIsIklORk8iLCJUYXNtb3RhX0hUVFA6dGFzbW90YV9wdXNoIik7CiAKICAg
ICAgICBpZiAoJGF0dHJpYnV0ZSBlcSAiIikgewogICAgICAgICAgICAmbWFpbjo6cHJpbnRf
bG9nKCJFUlJPUiB0YXNtb3RhIGRldmljZSB3aXRoIElQIGFkZHJlc3MgJGNsaWVudF9pcF9h
ZGRyZXNzIHNlbmQgdW5rbm93biBhdHRyaWJ1dGUiLCJXQVJOSU5HIiwiVGFzbW90YV9IVFRQ
OnRhc21vdGFfcHVzaCIpOwogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgCiAgICAg
ICAgfSBlbHNpZiAoJGF0dHJpYnV0ZSBlcSAic3RhdGUiKSB7CiAgICAgICAgICAgIG15ICRz
dGF0ZSA9ICRUYXNtb3RhX0hUVFBfSXRlbXMtPnskY2xpZW50X2lwX2FkZHJlc3N9LT57b2Jq
ZWN0fS0+e3Rhc21vdGFfdG9fc3RhdGV9eyR2YWx1ZX07CiAgICAgICAgICAgICZtYWluOjpw
cmludF9sb2coIltUYXNtb3RhX0hUVFA6Okl0ZW1dIElORk8gUmVjZWl2ZWQgc3RhdGUgJHN0
YXRlIGZvciB0YXNtb3RhIGRldmljZSB3aXRoIElQIGFkZHJlc3MgJGNsaWVudF9pcF9hZGRy
ZXNzIiwiSU5GTyIsIlRhc21vdGFfSFRUUDp0YXNtb3RhX3B1c2giLCJJTkZPIiwiVGFzbW90
YV9IVFRQOnRhc21vdGFfcHVzaCIpOwogICAgICAgICAgICAkVGFzbW90YV9IVFRQX0l0ZW1z
LT57JGNsaWVudF9pcF9hZGRyZXNzfS0+e29iamVjdH0tPnNldCgkc3RhdGUsJ3B1c2gnKTsK
CiAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZSBlcSAiaGIiKSB7CiAgICAgICAgICAgICZt
YWluOjpwcmludF9sb2coIlJlY2VpdmVkIGhlYXJ0YmVhdCBmb3IgdGFzbW90YSBkZXZpY2Ug
d2l0aCBJUCBhZGRyZXNzICRjbGllbnRfaXBfYWRkcmVzcyIsIklORk8iLCJUYXNtb3RhX0hU
VFA6dGFzbW90YV9wdXNoIik7CiAgICAgICAgICAgICRUYXNtb3RhX0hUVFBfSXRlbXMtPnsk
Y2xpZW50X2lwX2FkZHJlc3N9LT57b2JqZWN0fS0+e2hlYXJ0YmVhdF90aW1lcn0tPnJlc3Rh
cnQoKTsKICAgICAgICAgICAgJFRhc21vdGFfSFRUUF9JdGVtcy0+eyRjbGllbnRfaXBfYWRk
cmVzc30tPntvYmplY3R9LT57aGVhcnRiZWF0X3RpbWVzdGFtcH0gPSAkbWFpbjo6VGltZTsK
ICAgICAgICAgICAgJFRhc21vdGFfSFRUUF9JdGVtcy0+eyRjbGllbnRfaXBfYWRkcmVzc30t
PntvYmplY3R9LT5zZW5kX2NtZCgkVGFzbW90YV9IVFRQX0l0ZW1zLT57JGNsaWVudF9pcF9h
ZGRyZXNzfS0+e29iamVjdH0tPntvdXRwdXRfbmFtZX0pIGlmIChsYyAkVGFzbW90YV9IVFRQ
X0l0ZW1zLT57JGNsaWVudF9pcF9hZGRyZXNzfS0+e29iamVjdH0tPnN0YXRlIGVxICJ1bmtu
b3duIikKICAgICAgICB9CiAgICAgICAgaWYgKCR0eXBlIGVxICJzd2l0Y2hfcG93ZXJtb24i
KSB7CiAgICAgICAgICAgIGlmICgkYXR0cmlidXRlIGVxICJwb3dlciIpIHsKICAgICAgICAg
ICAgICAgJm1haW46OnByaW50X2xvZygiUnJlY2VpdmVkIHBvd2VyIGluZm9ybWF0aW9uIGZv
ciAkY2xpZW50X2lwX2FkZHJlc3MuIFBvd2VyOiAkdmFsdWUgQ3VycmVudDogJHZhbHVlMiIs
IklORk8iLCJUYXNtb3RhX0hUVFA6dGFzbW90YV9wdXNoIik7CiAgICAgICAgICAgICAgICRU
YXNtb3RhX0hUVFBfSXRlbXMtPnskY2xpZW50X2lwX2FkZHJlc3N9LT57b2JqZWN0fS0+dXBk
YXRlX3Bvd2VyKCR2YWx1ZSwkdmFsdWUyKTsKICAgICAgICAgICAgfSAKICAgICAgICB9CiAg
ICB9IGVsc2UgewogICAgCiAgICAgICAgJm1haW46OnByaW50X2xvZygiW1Rhc21vdGFfSFRU
UDo6SXRlbV0gd2VwQVBJIEVSUk9SLCBjb3VsZCBub3QgZmluZCBvYmplY3QgYXNzb2NpYXRl
ZCB3aXRoIElQIGFkZHJlc3MgJGNsaWVudF9pcF9hZGRyZXNzISIsIldBUk5JTkciLCJUYXNt
b3RhX0hUVFA6dGFzbW90YV9wdXNoIikgdW5sZXNzICgkY2xpZW50X2lwX2FkZHJlc3MgZXEg
JG1haW46OkluZm97SVBBZGRyZXNzX2xvY2FsfSk7ICNpZ25vcmUgdGhlIHJhbmRvbSBjYWxs
cyBmcm9tIE1IIGludGVybmFsPwogICAgCiAgICB9CgogcmV0dXJuICIiOwp9CgojPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMKIyBCYXNpYyBUYXNtb3RhX0hUVFA6OlN3
aXRjaAojCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiMgVG8gYWRkIHRh
YmxlIHN1cHBvcnQsIGFkZCB0aGVzZSBsaW5lcyB0byB0aGUgcmVhZF90YWJsZV9BLnBsIGZp
bGU6CiMgZWxzaWYgKCAkdHlwZSBlcSAiVEFTTU9UQV9IVFRQX1NXSVRDSCIgKSB7CiMgICAg
IHJlcXVpcmUgVGFzbW90YV9IVFRQX0l0ZW07CiMgICAgICggJGFkZHJlc3MsICRuYW1lLCAk
Z3JvdXBsaXN0ICkgPSBAaXRlbV9pbmZvOwojICAgICAkb2JqZWN0ID0gIlRhc21vdGFfSFRU
UDo6U3dpdGNoKCckYWRkcmVzcycpIjsKIyB9CgpwYWNrYWdlIFRhc21vdGFfSFRUUDo6U3dp
dGNoOwp1c2Ugc3RyaWN0Owp1c2UgcGFyZW50LW5vcmVxdWlyZSwgJ1Rhc21vdGFfSFRUUDo6
SXRlbSc7CgojIFN3aXRjaCBjbGFzcyBjb25zdHJ1Y3RvcgpzdWIgbmV3IHsKICAgIG15ICRj
bGFzcyA9IHNoaWZ0OwoKICAgICMgQ2FsbCB0aGUgcGFyZW50IGNsYXNzIGNvbnN0cnVjdG9y
IHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGltcG9ydGFudCB0aGluZ3MgYXJlIGRvbmUKICAgIG15
ICRzZWxmID0gJGNsYXNzLT5TVVBFUjo6bmV3KEBfKTsKCiAgICAjIEFkZGl0aW9uYWwgc3dp
dGNoIHZhcmlhYmxlcwogICAgIyBBZGQgYWRkaXRpb25hbCBoYXNoIHBhaXJzIChyb3dzKSB0
byB0aGlzIHZhcmlhYmxlIHRvIHNlbmQgb3RoZXIgc3RhdGVzIHRvIGRldmljZXMKICAgICRz
ZWxmLT57c3RhdGVfdG9fdGFzbW90YX0gPSB7CiAgICAgICAgIm9mZiIgPT4gIjAiLAogICAg
ICAgICJvbiIgID0+ICIxIiwKICAgIH07CgogICAgIyBBZGQgYWRkaXRpb25hbCBoYXNoIHBh
aXJzIChyb3dzKSB0byB0aGlzIHZhcmlhYmxlIHRvIHVzZSBvdGhlciBzdGF0ZXMgZnJvbSBk
ZXZpY2VzCiAgICAkc2VsZi0+e3Rhc21vdGFfdG9fc3RhdGV9ID0gewogICAgICAgICIwIiA9
PiAib2ZmIiwKICAgICAgICAiMSIgPT4gIm9uIiwKICAgIH07CgogICAgIyBJbml0aWFsaXpl
IHN0YXRlcwogICAgcHVzaCggQHsgJHNlbGYtPntzdGF0ZXN9IH0sIGtleXMoICV7ICRzZWxm
LT57c3RhdGVfdG9fdGFzbW90YX0gfSApICk7CgogICAgIyBMb2cgdGhlIHNldHVwIG9mIHRo
ZSBpdGVtCiAgICAmbWFpbjo6cHJpbnRfbG9nKCJbVGFzbW90YV9IVFRQOjpTd2l0Y2hdIENy
ZWF0ZWQgaXRlbSB3aXRoIGFkZHJlc3MgJHNlbGYtPnthZGRyZXNzfSIpOwogICAgJFRhc21v
dGFfSFRUUF9JdGVtcy0+eyRzZWxmLT57YWRkcmVzc319LT57dHlwZX0gPSAic3dpdGNoIjsK
ICAgIHJldHVybiAkc2VsZjsKfQoKcGFja2FnZSBUYXNtb3RhX0hUVFA6OlN3aXRjaF9Qb3dl
ck1vbjsKdXNlIHN0cmljdDsKdXNlIHBhcmVudC1ub3JlcXVpcmUsICdUYXNtb3RhX0hUVFA6
Okl0ZW0nOwoKIyBTd2l0Y2ggY2xhc3MgY29uc3RydWN0b3IKc3ViIG5ldyB7CiAgICBteSAo
ICRjbGFzcywgJGFkZHJlc3MsICRvdXRwdXQsICRvcHRpb25zICkgPSBAXzsKICAgICNteSAk
Y2xhc3MgPSBzaGlmdDsgICAgCiAgICAjIENhbGwgdGhlIHBhcmVudCBjbGFzcyBjb25zdHJ1
Y3RvciB0byBtYWtlIHN1cmUgYWxsIHRoZSBpbXBvcnRhbnQgdGhpbmdzIGFyZSBkb25lCiAg
ICBteSAkc2VsZiA9ICRjbGFzcy0+U1VQRVI6Om5ldygkYWRkcmVzcywkb3V0cHV0LCRvcHRp
b25zKTsKCiAgICAjIEFkZGl0aW9uYWwgc3dpdGNoIHZhcmlhYmxlcwogICAgIyBBZGQgYWRk
aXRpb25hbCBoYXNoIHBhaXJzIChyb3dzKSB0byB0aGlzIHZhcmlhYmxlIHRvIHNlbmQgb3Ro
ZXIgc3RhdGVzIHRvIGRldmljZXMKICAgICRzZWxmLT57c3RhdGVfdG9fdGFzbW90YX0gPSB7
CiAgICAgICAgIm9mZiIgPT4gIjAiLAogICAgICAgICJvbiIgID0+ICIxIiwKICAgIH07Cgog
ICAgIyBBZGQgYWRkaXRpb25hbCBoYXNoIHBhaXJzIChyb3dzKSB0byB0aGlzIHZhcmlhYmxl
IHRvIHVzZSBvdGhlciBzdGF0ZXMgZnJvbSBkZXZpY2VzCiAgICAkc2VsZi0+e3Rhc21vdGFf
dG9fc3RhdGV9ID0gewogICAgICAgICIwIiA9PiAib2ZmIiwKICAgICAgICAiMSIgPT4gIm9u
IiwKICAgIH07CgogICAgJHNlbGYtPntSUkR9ID0gMDsKICAgICRzZWxmLT57UlJEfSA9IDEg
aWYgKCAkb3B0aW9ucyA9fiBtL3JyZC9pICk7CgogICAgZXZhbCB7CiAgICAgICAgcmVxdWly
ZSBSUkQ6OlNpbXBsZTsKICAgICAgICByZXF1aXJlIFJSRHM7CiAgICB9OwogICAgaWYgKCRA
KSB7IAogICAgICAgICZtYWluOjpwcmludF9sb2coIltUYXNtb3RhX0hUVFA6OlN3aXRjaF9Q
b3dlck1vbl0gV2FybmluZywgUlJEIHNwZWNpZmllZCBidXQgUlJEOjpTaW1wbGUgYW5kL29y
IFJSRHMgYXJlIG5vdCBmb3VuZC4gRGlzYWJsaW5nIFJSRCBmdW5jdGlvbmFsaXR5Iik7CiAg
ICAgICAgJHNlbGYtPntSUkR9ID0gMDsKICAgIH0KICAgIAogICAgaWYgKCRzZWxmLT57UlJE
fSkgewogICAgICAgIAogICAgICAgIG1rZGlyKCQkOjpjb25maWdfcGFybXN7ZGF0YV9kaXJ9
IC4gIi9ycmQiKSB1bmxlc3MgKC1kICQ6OmNvbmZpZ19wYXJtc3tkYXRhX2Rpcn0gLiAiL3Jy
ZCIpOwogICAgICAgICRzZWxmLT5zZXRfcnJkKCQ6OmNvbmZpZ19wYXJtc3tkYXRhX2Rpcn0g
LiAiL3JyZC8iIC4gJHNlbGYtPnthZGRyZXNzfSAuICIucnJkIiwicG93ZXIsY3VycmVudCIp
OwogICAgICAgIHVubGVzcyAoIC1lICRzZWxmLT5nZXRfcnJkKCkpIHsKICAgICAgICAgICAg
Jm1haW46OnByaW50X2xvZygiW1Rhc21vdGFfSFRUUDo6U3dpdGNoX1Bvd2VyTW9uXSAkc2Vs
Zi0+e2FkZHJlc3N9IENyZWF0aW5nIFJSRCBmaWxlICIgLiAkc2VsZi0+Z2V0X3JyZCgpIC4g
IiBmb3IgcG93ZXIgdXNhZ2UiKTsKICAgICAgICAgICAgY3JlYXRlX3JyZCgkc2VsZi0+Z2V0
X3JyZCgpKTsKICAgICAgICB9CiAgICAgICAgJjo6TWFpbkxvb3BfcG9zdF9hZGRfaG9vaygg
XCZUYXNtb3RhX0hUVFA6OlN3aXRjaF9Qb3dlck1vbjo6dXBkYXRlX3JyZCwgMCwgJHNlbGYg
KTsgI2NoZWNrIGZvciAkTmV3X01pbnV0ZSBhbmQgdGhlIHVwZGF0ZSB0aGUgUlJEIHdpdGgg
dGhlIG1heGltdW0gdmFsdWUgZHVyaW5nIHRoZSBsYXN0IG1pbnV0ZQogICAgfQogICAgCiAg
ICAjaW5pdGlhbGl6ZSBwb3dlciB2YWx1ZXMKICAgICRzZWxmLT57bW9uaXRvcn0tPntwb3dl
cn0gPSAwOwogICAgJHNlbGYtPnttb25pdG9yfS0+e3ByZXZwb3dlcn0gPSAwOwogICAgJHNl
bGYtPnttb25pdG9yfS0+e21heHBvd2VyfSA9IDA7CgogICAgJHNlbGYtPnttb25pdG9yfS0+
e2N1cnJlbnR9ID0gMDsKICAgICRzZWxmLT57bW9uaXRvcn0tPntwcmV2Y3VycmVudH0gPSAw
OwogICAgJHNlbGYtPnttb25pdG9yfS0+e21heGN1cnJlbnR9ID0gMDsKCiAgICAjIEluaXRp
YWxpemUgc3RhdGVzCiAgICBwdXNoKCBAeyAkc2VsZi0+e3N0YXRlc30gfSwga2V5cyggJXsg
JHNlbGYtPntzdGF0ZV90b190YXNtb3RhfSB9ICkgKTsKICAgIHVuZGVmICRzZWxmLT57cG93
ZXJfc3RhdGVfY2hhbmdlZH07CiAgICAkc2VsZi0+e3Bvd2VyX3N0YXRlX2NoYW5nZWRfbG9v
cH0gPSAwOwoKICAgICMgTG9nIHRoZSBzZXR1cCBvZiB0aGUgaXRlbQogICAgJm1haW46OnBy
aW50X2xvZygiW1Rhc21vdGFfSFRUUDo6U3dpdGNoX1Bvd2VyTW9uXSBDcmVhdGVkIGl0ZW0g
d2l0aCBhZGRyZXNzICRzZWxmLT57YWRkcmVzc30iKTsKICAgICRUYXNtb3RhX0hUVFBfSXRl
bXMtPnskc2VsZi0+e2FkZHJlc3N9fS0+e3R5cGV9ID0gInN3aXRjaF9wb3dlcm1vbiI7CiAg
ICAmOjpNYWluTG9vcF9wb3N0X2FkZF9ob29rKCBcJlRhc21vdGFfSFRUUDo6U3dpdGNoX1Bv
d2VyTW9uOjpyZXNldF9wb3dlcl9zdGF0ZSwgMCwgJHNlbGYgKTsgI2NoZWNrIGZvciBjaGFu
Z2VzIHRvIG91dHB1dCBmaWxlLCBhbmQgdGhlbiBwcm9jZXNzIHJlc3VsdHMKICAgICRzZWxm
LT5zZW5kX2NtZCgkc2VsZi0+e291dHB1dF9uYW1lfSk7ICNxdWVyeSB0aGUgY3VycmVudCBz
dGF0ZQogICAgJHNlbGYtPnNlbmRfY21kKCdzdGF0dXMlMjA4Jyk7ICNxdWVyeSB0aGUgY3Vy
cmVudCBwb3dlciB1c2FnZQogICAgcmV0dXJuICRzZWxmOwp9CgojdGhpcyBpcyB0byBzZXQg
CnN1YiByZXNldF9wb3dlcl9zdGF0ZSB7CiAgICBteSAoJHNlbGYpID0gQF87CiAgICAgICAg
aWYgKCRzZWxmLT57cG93ZXJfc3RhdGVfY2hhbmdlZH0pIHsKICAgICAgICAgICAgaWYgKCRz
ZWxmLT57cG93ZXJfc3RhdGVfY2hhbmdlZF9sb29wfSkgeyAjd2FpdCBmb3IgYSBsb29wIHRv
IHJlc2V0IHBvd2VyX3N0YXRlX2NoYW5nZWQKICAgICAgICAgICAgICAgIHVuZGVmICRzZWxm
LT57cG93ZXJfc3RhdGVfY2hhbmdlZH07CiAgICAgICAgICAgICAgICAkc2VsZi0+e3Bvd2Vy
X3N0YXRlX2NoYW5nZWRfbG9vcH0gPSAwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgJHNlbGYtPntwb3dlcl9zdGF0ZV9jaGFuZ2VkX2xvb3B9ID0gMTsKICAgICAg
ICAgICAgfQogICAgICAgIH0KfQoKc3ViIHVwZGF0ZV9ycmQgewogICAgbXkgKCRzZWxmKSA9
IEBfOwogICAgaWYgKCRtYWluOjpOZXdfTWludXRlKSB7CiAgICAgICAgbXkgJHJyZCA9IFJS
RDo6U2ltcGxlLT5uZXcoIGZpbGUgPT4gJHNlbGYtPmdldF9ycmQoKSApOwogICAgICAgICNV
c2UgbWF4aW11bSB2YWx1ZXMgaW4gdGhlIG1pbnV0ZSB0byBhdm9pZCB0aGUgbG9zcyBvZiBh
bnkgcG93ZXIgc3Bpa2VzIGluIHRoYXQgbWludXRlCiAgICAgICAgJm1haW46OnByaW50X2xv
ZygiW1Rhc21vdGFfSFRUUDo6UG93ZXJNb25dICRzZWxmLT57YWRkcmVzc30gV3JpdGluZyB0
byBSUkQ6IHBvd2VyPSIgLiAkc2VsZi0+e21vbml0b3J9LT57bWF4cG93ZXJ9IC4gIiBjdXJy
ZW50PSIgLiAkc2VsZi0+e21vbml0b3J9LT57bWF4Y3VycmVudH0pIGlmICgkc2VsZi0+e2Rl
YnVnfSk7CiAgICAgICAgCiAgICAgICAgI3dyYXAgdGhpcyBpbiBhIGV2YWwgaW4gY2FzZSB0
aGVyZSdzIGFuIGlzc3VlIHdpdGggdGhlIFJSRCwgZG9uJ3Qgd2FudCB0byBicmluZyBkb3du
IE1ICiAgICAgICAgZXZhbCB7CiAgICAgICAgICAgICRycmQtPnVwZGF0ZSgKICAgICAgICAg
ICAgICAgIHBvd2VyID0+ICRzZWxmLT57bW9uaXRvcn0tPnttYXhwb3dlcn0sCiAgICAgICAg
ICAgICAgICBjdXJyZW50ID0+ICRzZWxmLT57bW9uaXRvcn0tPnttYXhjdXJyZW50fQogICAg
ICAgICAgICApOwogICAgICAgIH07CiAgICAgICAgaWYgKCRAKSB7CiAgICAgICAgICAgIG1h
aW46OnByaW50X2xvZyggIltUYXNtb3RhX0hUVFA6OlBvd2VyTW9uXSAiIC4gJHNlbGYtPnth
ZGRyZXNzfSAuICJdIEVSUk9SIHVwZGF0aW5nIFJSRCEgJEBcbiIgKTsKICAgICAgICB9CiAg
ICAgICAgI3Jlc2V0IHRoZSBtYXhpbXVtIHRvIHRoZSBjdXJyZW50IHBvd2VyIGxldmVsCiAg
ICAgICAgJHNlbGYtPnttb25pdG9yfS0+e21heHBvd2VyfSA9ICRzZWxmLT57bW9uaXRvcn0t
Pntwb3dlcn07CiAgICAgICAgJHNlbGYtPnttb25pdG9yfS0+e21heGN1cnJlbnR9ID0gJHNl
bGYtPnttb25pdG9yfS0+e2N1cnJlbnR9OwogICAgfQp9CgpzdWIgdXBkYXRlX3Bvd2VyIHsK
ICAgIG15ICgkc2VsZiwkcG93ZXIsICRjdXJyZW50KSA9IEBfOwogICAgJHNlbGYtPnttb25p
dG9yfS0+e3ByZXZwb3dlcn0gPSAkc2VsZi0+e21vbml0b3J9LT57cG93ZXJ9OwogICAgJHNl
bGYtPnttb25pdG9yfS0+e3Bvd2VyfSA9ICRwb3dlcjsKICAgICRzZWxmLT57bW9uaXRvcn0t
PnttYXhwb3dlcn0gPSAkcG93ZXIgaWYgKCRzZWxmLT57bW9uaXRvcn0tPntwb3dlcn0gPiAk
c2VsZi0+e21vbml0b3J9LT57bWF4cG93ZXJ9KTsKICAgICRzZWxmLT57cG93ZXJfc3RhdGVf
Y2hhbmdlZH0gPSAkcG93ZXIgdW5sZXNzICgkc2VsZi0+e21vbml0b3J9LT57cHJldnBvd2Vy
fSA9PSAkc2VsZi0+e21vbml0b3J9LT57cG93ZXJ9KTsKICAgICRzZWxmLT57bW9uaXRvcn0t
PntwcmV2Y3VycmVudH0gPSAkc2VsZi0+e21vbml0b3J9LT57Y3VycmVudH07CiAgICAkc2Vs
Zi0+e21vbml0b3J9LT57Y3VycmVudH0gPSAkY3VycmVudDsgICAgCiAgICAkc2VsZi0+e21v
bml0b3J9LT57bWF4Y3VycmVudH0gPSAkY3VycmVudCBpZiAoJHNlbGYtPnttb25pdG9yfS0+
e2N1cnJlbnR9ID4gJHNlbGYtPnttb25pdG9yfS0+e21heGN1cnJlbnR9KTsKfQoKc3ViIHBv
d2VyIHsKICAgIG15ICgkc2VsZikgPSBAXzsKICAgIHJldHVybiAkc2VsZi0+e21vbml0b3J9
LT57cG93ZXJ9Owp9CgpzdWIgcG93ZXJfY2hhbmdlZCB7CiAgICBteSAoJHNlbGYpID0gQF87
CiAgICByZXR1cm4gJHNlbGYtPntwb3dlcl9zdGF0ZV9jaGFuZ2VkfTsKfQoKc3ViIGN1cnJl
bnQgewogICAgbXkgKCRzZWxmKSA9IEBfOwogICAgcmV0dXJuICRzZWxmLT57bW9uaXRvcn0t
PntjdXJyZW50fTsKfQoKc3ViIHBvd2VyX2ZhY3RvciB7Cgp9CgpzdWIgY3JlYXRlX3JyZCB7
CiAgICBteSAoJGZpbGUpID0gQF87CgogICAgI2NyZWF0ZSB0aGUgUlJEIHNpbWlsYXIgdG8g
dGhlIHdlYXRoZXIgUlJEIGNvbmZpZ3VyYXRpb24KICAgIFJSRHM6OmNyZWF0ZSAkZmlsZSwK
ICAgICAgJy1iJywgJG1haW46OlRpbWUsICctcycsIDYwLAogICAgICAiRFM6cG93ZXI6R0FV
R0U6MzAwOjA6VSIsCiAgICAgICJEUzpjdXJyZW50OkdBVUdFOjMwMDowOlUiLAogICAgICAn
UlJBOkFWRVJBR0U6MC41OjE6ODAxJywgICAgIyBkZXRhaWxzIGZvciA2IGhvdXJzIChhZ3Jl
Z2F0ZSAxIG1pbnV0ZSkKICAgICAgJ1JSQTpNSU46MC41OjI6ODAxJywgICAgICAgICMgMSBk
YXkgKGFncmVnYXRlIDIgbWludXRlcykKICAgICAgJ1JSQTpBVkVSQUdFOjAuNToyOjgwMScs
ICdSUkE6TUFYOjAuNToyOjgwMScsCiAgICAgICdSUkE6TUlOOjAuNTo1OjY0MScsICAgICAg
ICAjIDIgZGF5IChhZ3JlZ2F0ZSA1IG1pbnV0ZXMpCiAgICAgICdSUkE6QVZFUkFHRTowLjU6
NTo2NDEnLCAnUlJBOk1BWDowLjU6NTo2NDEnLAogICAgICAnUlJBOk1JTjowLjU6MTg6NjIz
JywgICAgICAgIyAxIHdlZWsgKGFncmVnYXRlIDE4IG1pbnV0ZXMpCiAgICAgICdSUkE6QVZF
UkFHRTowLjU6MTg6NjIzJywgJ1JSQTpNQVg6MC41OjE4OjYyMycsCiAgICAgICdSUkE6TUlO
OjAuNTozNTo2MTgnLCAgICAgICAjIDIgd2Vla3MgKGFncmVnYXRlIDM1IG1pbnV0ZXMpCiAg
ICAgICdSUkE6QVZFUkFHRTowLjU6MzU6NjE4JywgJ1JSQTpNQVg6MC41OjM1OjYxOCcsCiAg
ICAgICdSUkE6TUlOOjAuNTo3NTo2OTQnLCAgICAgICAjIDEgbW9udGggKGFncmVnYXRlIDFo
MTVtbikKICAgICAgJ1JSQTpBVkVSQUdFOjAuNTo3NTo2OTQnLCAnUlJBOk1BWDowLjU6NzU6
Njk0JywKICAgICAgJ1JSQTpNSU46MC41OjE1MDo2OTQnLCAgICAgICMgMiBtb250aHMgKGFn
cmVnYXRlIDJoMzBtbikKICAgICAgJ1JSQTpBVkVSQUdFOjAuNToxNTA6Njk0JywgJ1JSQTpN
QVg6MC41OjE1MDo2OTQnLAogICAgICAnUlJBOk1JTjowLjU6MTA4MDoyNjgnLCAgICAgIyA2
IG1vbnRocyAoYWdyZWdhdGUgMTggaG91cnMpCiAgICAgICdSUkE6QVZFUkFHRTowLjU6MTA4
MDoyNjgnLCAnUlJBOk1BWDowLjU6MTA4MDoyNjgnLAogICAgICAnUlJBOk1JTjowLjU6Mjg4
MDoyMDknLCAgICAgIyAxMiBtb250aHMgKGFncmVnYXRlIDIgZGF5cykKICAgICAgJ1JSQTpB
VkVSQUdFOjAuNToyODgwOjIwOScsICdSUkE6TUFYOjAuNToyODgwOjIwOScsCiAgICAgICdS
UkE6TUlOOjAuNTo0MzIwOjI3OScsICAgICAjIDIgeWVhcnMgKGFncmVnYXRlIDMgZGF5cykK
ICAgICAgJ1JSQTpBVkVSQUdFOjAuNTo0MzIwOjI3OScsICdSUkE6TUFYOjAuNTo0MzIwOjI3
OScsCiAgICAgICdSUkE6TUlOOjAuNTo4NjQwOjMzNCcsICAgICAjIDUgbW9udGhzIChhZ3Jl
Z2F0ZSA2IGRheXMpCiAgICAgICdSUkE6QVZFUkFHRTowLjU6ODY0MDozMzQnLCAnUlJBOk1B
WDowLjU6ODY0MDozMzQnOwoKICAgIG1haW46OnByaW50X2xvZyggIltUYXNtb3RhX0hUVFA6
OlBvd2VyTW9uIF0gRVJST1IgY3JlYXRpbmcgUlJEICRmaWxlISIgKSBpZiBSUkRzOjplcnJv
cjsKfQoKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgQmFzaWMgVGFz
bW90YV9IVFRQOjpGYW4KIwojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgoj
IFRvIGFkZCB0YWJsZSBzdXBwb3J0LCBhZGQgdGhlc2UgbGluZXMgdG8gdGhlIHJlYWRfdGFi
bGVfQS5wbCBmaWxlOgojIGVsc2lmICggJHR5cGUgZXEgIlRBU01PVEFfSFRUUF9GQU4iICkg
ewojICAgICByZXF1aXJlIFRhc21vdGFfSFRUUF9JdGVtOwojICAgICAoICRhZGRyZXNzLCAk
bmFtZSwgJGdyb3VwbGlzdCApID0gQGl0ZW1faW5mbzsKIyAgICAgJG9iamVjdCA9ICJUYXNt
b3RhX0hUVFA6OkZhbignJGFkZHJlc3MnKSI7CiMgfQoKcGFja2FnZSBUYXNtb3RhX0hUVFA6
OkZhbjsKdXNlIHN0cmljdDsKdXNlIHBhcmVudC1ub3JlcXVpcmUsICdUYXNtb3RhX0hUVFA6
Okl0ZW0nOwoKIyBTd2l0Y2ggY2xhc3MgY29uc3RydWN0b3IKc3ViIG5ldyB7CiAgICBteSAk
Y2xhc3MgPSBzaGlmdDsKCiAgICAjIENhbGwgdGhlIHBhcmVudCBjbGFzcyBjb25zdHJ1Y3Rv
ciB0byBtYWtlIHN1cmUgYWxsIHRoZSBpbXBvcnRhbnQgdGhpbmdzIGFyZSBkb25lCiAgICBt
eSAkc2VsZiA9ICRjbGFzcy0+U1VQRVI6Om5ldyhAXyk7CiAgICAjIEZhbnMgdXNlIGEgZGlm
ZmVyZW50IG91dHB1dCBuYW1lCiAgICAkc2VsZi0+e291dHB1dF9uYW1lfSA9ICdGYW5TcGVl
ZCc7CgogICAgIyBBZGRpdGlvbmFsIGZhbiB2YXJpYWJsZXMKICAgICMgQWRkIGFkZGl0aW9u
YWwgaGFzaCBwYWlycyAocm93cykgdG8gdGhpcyB2YXJpYWJsZSB0byBzZW5kIG90aGVyIHN0
YXRlcyB0byBkZXZpY2VzCiAgICAkc2VsZi0+e3N0YXRlX3RvX3Rhc21vdGF9ID0gewogICAg
ICAgICJvZmYiID0+ICIwIiwKICAgICAgICAiMCIgPT4gIjAiLAogICAgICAgICIxIiA9PiAi
MSIsCiAgICAgICAgIjIiID0+ICIyIiwKICAgICAgICAiMyIgPT4gIjMiLAogICAgICAgICJv
biIgPT4gIjMiLAogICAgfTsKCiAgICAjIEFkZCBhZGRpdGlvbmFsIGhhc2ggcGFpcnMgKHJv
d3MpIHRvIHRoaXMgdmFyaWFibGUgdG8gdXNlIG90aGVyIHN0YXRlcyBmcm9tIGRldmljZXMK
ICAgICRzZWxmLT57dGFzbW90YV90b19zdGF0ZX0gPSB7CiAgICAgICAgIjAiID0+ICJvZmYi
LAogICAgICAgICIxIiA9PiAiMSIsCiAgICAgICAgIjIiID0+ICIyIiwKICAgICAgICAiMyIg
PT4gIjMiLAogICAgfTsKCiAgICAjIEluaXRpYWxpemUgc3RhdGVzCiAgICBwdXNoKCBAeyAk
c2VsZi0+e3N0YXRlc30gfSwga2V5cyggJXsgJHNlbGYtPntzdGF0ZV90b190YXNtb3RhfSB9
ICkgKTsKCiAgICAjIExvZyB0aGUgc2V0dXAgb2YgdGhlIGl0ZW0KICAgICZtYWluOjpwcmlu
dF9sb2coIltUYXNtb3RhX0hUVFA6OkZhbl0gQ3JlYXRlZCBpdGVtIHdpdGggYWRkcmVzcyAk
c2VsZi0+e2FkZHJlc3N9Iik7CiAgICAkVGFzbW90YV9IVFRQX0l0ZW1zLT57JHNlbGYtPnth
ZGRyZXNzfX0tPnt0eXBlfSA9ICJmYW4iOwogICAgCiAgICByZXR1cm4gJHNlbGY7Cn0KCiMg
UGVybCBtb2R1bGVzIG5lZWQgdG8gcmV0dXJuIHRydWUKMTsK
--------------uHefEVulzqwAEajfPTM3GqKK
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
--------------uHefEVulzqwAEajfPTM3GqKK
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
________________________________________________________
To unsubscribe from this list, go to: https://lists.sourceforge.net/lists/listinfo/misterhouse-users
--------------uHefEVulzqwAEajfPTM3GqKK--