[OpenAFS-devel] [PATCH] new features for pam_afs

Carsten Jacobi jacobi@de.ibm.com
Mon, 27 Aug 2001 16:27:52 +0200


--0__=C1256AB5004CE0648f9e8a93df938690918cC1256AB5004CE064
Content-type: text/plain; charset=us-ascii

Hello ... I am coming up with an old issue from April this year.
At that time, I wanted to introduce some new changes to the pam_afs module,
but Mr.Mueller
and Mr.Hahn (also from Germany) had addressed some deficiencies in my
suggestions.
Now we have found a compromise and I am glad to present it with this
posting.
The "big part" has been implemented by Mr.Mueller and there are some
additions
by Mr.Hahn and me.
The patches target at many requirements still not met to run a comfortable
AFS setup
on office workstations. To give some examples the patched pam_afs should
improve
the functionality of samba servers, X session and window managers, X screen
savers,
the apache http server, and the su command. The session management was
improved
and now there are more capabilities to create local and AFS users on the
client
machines. I hope my additions to the "QuickStartUnix"-Guide describe the
modifications
in proper detail (part of my patch).
Actually, the modules were verified on Linux systems only, but from my
point of view they
should run on the other *ix-Systems as well ... I would be glad to get some
feedback.
I hope the patch is helpful for many sysadmins out there ... best regards

Carsten Jacobi

(See attached file: openafs-1.1.1-pam_combi.patch)
--0__=C1256AB5004CE0648f9e8a93df938690918cC1256AB5004CE064
Content-type: application/octet-stream; 
	name="openafs-1.1.1-pam_combi.patch"
Content-Disposition: attachment; filename="openafs-1.1.1-pam_combi.patch"
Content-transfer-encoding: base64

ZGlmZiAtdXJOIG9wZW5hZnMtMS4xLjEub3JpZy9kb2MvaHRtbC9RdWlja1N0YXJ0VW5peC9hdXFi
ZzAwNy5odG0gb3BlbmFmcy0xLjEuMS9kb2MvaHRtbC9RdWlja1N0YXJ0VW5peC9hdXFiZzAwNy5o
dG0KLS0tIG9wZW5hZnMtMS4xLjEub3JpZy9kb2MvaHRtbC9RdWlja1N0YXJ0VW5peC9hdXFiZzAw
Ny5odG0JV2VkIEF1ZyAgOCAxNDowOToxMSAyMDAxCisrKyBvcGVuYWZzLTEuMS4xL2RvYy9odG1s
L1F1aWNrU3RhcnRVbml4L2F1cWJnMDA3Lmh0bQlNb24gQXVnIDI3IDE1OjQ0OjEzIDIwMDEKQEAg
LTk3MSw2ICs5NzEsNyBAQAogPFA+VGhlIHJlY29tbWVuZGVkIEFGUy1yZWxhdGVkIGVudHJpZXMg
aW4gdGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgbWFrZSB1c2UKIG9mIG9uZSBvciBtb3JlIG9m
IHRoZSBmb2xsb3dpbmcgdGhyZWUgYXR0cmlidXRlcy4KIDxETD4KKzxoND48YnI+QXV0aGVudGlj
YXRpb24gTWFuYWdlbWVudDwvaDQ+CiA8UD48RFQ+PEI+PFRUPnRyeV9maXJzdF9wYXNzPC9UVD4K
IDwvQj48REQ+VGhpcyBpcyBhIHN0YW5kYXJkIFBBTSBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgaW5j
bHVkZWQgb24gZW50cmllcyBhZnRlciB0aGUKIGZpcnN0IG9uZSBmb3IgYSBzZXJ2aWNlOyBpdCBk
aXJlY3RzIHRoZSBtb2R1bGUgdG8gdXNlIHRoZSBwYXNzd29yZCB0aGF0CkBAIC05NzksODMgKzk4
MCwyNTYgQEAKIHRoZSB1c2VyJ3MgY29ycmVjdCBBRlMgcGFzc3dvcmQuIEZvciBmdXJ0aGVyIGRp
c2N1c3Npb24gb2YgdGhpcwogYXR0cmlidXRlIGFuZCBpdHMgYWx0ZXJuYXRpdmVzLCBzZWUgdGhl
IG9wZXJhdGluZyBzeXN0ZW0ncyBQQU0KIGRvY3VtZW50YXRpb24uCis8UD4KIDxQPjxEVD48Qj48
VFQ+aWdub3JlX3Jvb3Q8L1RUPgogPC9CPjxERD5UaGlzIGF0dHJpYnV0ZSwgc3BlY2lmaWMgdG8g
dGhlIEFGUyBQQU0gbW9kdWxlLCBkaXJlY3RzIGl0IHRvIGlnbm9yZSBub3QKIG9ubHkgdGhlIGxv
Y2FsIHN1cGVydXNlciA8Qj4gcm9vdDwvQj4sIGJ1dCBhbHNvIGFueSB1c2VyIHdpdGggVUlEIDAK
ICh6ZXJvKS4KKzxQPjxEVD48Qj48VFQ+aWdub3JlX3VpZCA8aT51aWQ8L2k+PC9UVD4KKzwvQj48
REQ+VGhpcyBvcHRpb24gaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSAmcXVvdDtpZ25vcmVfcm9vdCZx
dW90OyBzd2l0Y2guIFRoZSBhZGRpdGlvbmFsCitwYXJhbWV0ZXIgaXMgYSBsaW1pdC4gVXNlcnMg
d2l0aCBhIHVpZCB1cCB0byB0aGUgZ2l2ZW4gcGFyYW1ldGVyIGFyZSBpZ25vcmVkCitieSA8aT5w
YW1fYWZzLnNvPC9pPi4gVGh1cywgYSBzeXN0ZW0gYWRtaW5pc3RyYXRvciBzdGlsbCBoYXMgdGhl
IG9wcG9ydHVuaXR5IHRvCithZGQgbG9jYWwgdXNlciBhY2NvdW50cyB0byBoaXMgc3lzdGVtIGJ5
IGNob29zaW5nIGJldHdlZW4gJnF1b3Q7bG93JnF1b3Q7IGFuZAorJnF1b3Q7aGlnaCZxdW90OyB1
c2VyIGlkcy48YnI+CitBbiBleGFtcGxlIC9ldGMvcGFzc3dkIGZpbGUgZm9yICZxdW90O2lnbm9y
ZV91aWQgMTAwJnF1b3Q7IG1heSBoYXZlIGVudHJpZXMgbGlrZSB0aGVzZToKKzxQUkU+CisgICAg
ICAgIC4KKyAgICAgICAgLgorYWZzdXNlcm9uZTp4Ojk5OjEwMDo6L2Fmcy9hZnNjZWxsL3UvYWZz
dXNlcm9uZTovYmluL2Jhc2gKK2Fmc3VzZXJ0d286eDoxMDA6MTAwOjovYWZzL2Fmc2NlbGwvdS9h
ZnN1c2VydHdvOi9iaW4vYmFzaAorbG9jYWx1c2Vyb25lOng6MTAxOjEwMDo6L2hvbWUvbG9jYWx1
c2Vyb25lOi9iaW4vYmFzaAorbG9jYWx1c2VydHdvOng6MTAyOjEwMDo6L2hvbWUvbG9jYWx1c2Vy
dHdvOi9iaW4vYmFzaAorICAgICAgICAuCisgICAgICAgIC4KKzwvUFJFPjxicj4KK0FGUyBhY2Nv
dW50cyBzaG91bGQgYmUgbG9ja2VkIGluIHRoZSBmaWxlIC9ldGMvc2hhZG93IGxpa2UgdGhpczoK
KzxQUkU+CisgICAgICAgIC4KKyAgICAgICAgLgorYWZzdXNlcm9uZTohIToxMTUwMDowOjk5OTk5
Ojc6OjoKK2Fmc3VzZXJ0d286ISE6MTE1MDA6MDo5OTk5OTo3Ojo6Citsb2NhbHVzZXJvbmU6Jmx0
O3RoZWxvY2FsdXNlcm9uZSdza2V5Jmd0OzoxMTUwMDowOjk5OTk5Ojc6OjoKK2xvY2FsdXNlcnR3
bzombHQ7dGhlbG9jYWx1c2VydHdvJ3NrZXkmZ3Q7OjExNTAwOjA6OTk5OTk6Nzo6OgorICAgICAg
ICAuCisgICAgICAgIC4KKzwvUFJFPjxicj4KK1RoZXJlIGlzIG5vIG5lZWQgdG8gc3RvcmUgYSBs
b2NhbCBrZXkgaW4gdGhpcyBmaWxlIHNpbmNlIHRoZSBBRlMKK3Bhc3N3b3JkIGlzIHNlbnQgYW5k
IHZlcmZpZWQgYXQgdGhlIEFGUyBjZWxsIHNlcnZlciEKKworPFA+PERUPjxCPjxUVD5jaGVja19w
d19lbnRyeTwvVFQ+Cis8L0I+PEREPlRoZSBzd2l0Y2ggJnF1b3Q7Y2hlY2tfcHdfZW50cnkmcXVv
dDsgaXMgYW5vdGhlciBvcHRpb24gdG8gZGlmZmVyIGJldHdlZW4KK2xvY2FsIHVzZXJzIGFuZCBB
RlMgdXNlcnMuIEluIGNvbnRyYXN0IHRvICZxdW90O2lnbm9yZV91aWQmcXVvdDssIHRoZSBjcml0
ZXJpb24gaW5kaWNhdGluZword2hldGhlciB0aGUgdXNlciBpcyBsb2NhbCBvciBiZWxvbmdzIHRv
IHRoZSBBRlMgY2VsbCBpcyBub3QgdGhlIHVzZXIgaWQsIGJ1dCB0aGUgdXNlcidzCitwYXNzd29y
ZCBlbnRyeSBpbiB0aGUgbG9jYWwgL2V0Yy9wYXNzd2QgZmlsZS4gSWYgdGhlIHBhc3N3b3JkIGlz
IHNldCBhcyAmcXVvdDtVU0UgQUZTJnF1b3Q7LCB0aGUKK3VzZXIgaXMgYXV0aGVudGljYXRlZCBh
Z2FpbnN0IEFGUyBhbmQgaWdub3JlZCBieSA8aT5wYW1fYWZzLnNvPC9pPiBlbHNlLjxicj4KK1Vz
aW5nIHRoaXMgb3B0aW9uIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBhIHBlciB1c2VyIHNlbGVjdGlv
biBmb3IgdGhlIGRlY2lzaW9uIHdoaWNoIHVzZXIKK2JlbG9uZ3MgdG8gdGhlIEFGUyBhbmQgd2hp
Y2ggdXNlciBpcyBsb2NhbC4gSG93ZXZlciwgb2xkZXIgdW5peCBzeXN0ZW1zIG1heSBzdGlsbCB1
c2UKK3RoZSBwYXNzd29yZCBmaWVsZCBmb3IgaXRzIG9yaWdpbmFsIHB1cnBvc2UuPGJyPgorPGI+
Q2F1dGlvbjogRG9uJ3QgdXNlIHRoaXMgb3B0aW9uIG9uIGEgc3lzdGVtIHRoYXQgc3RpbGwgcmVx
dWlyZXMgdGhlIHBhc3N3b3JkIGZpZWxkIG9mCit0aGUgZmlsZSAvZXRjL3Bhc3N3ZCE8L2I+PGJy
PgorQW4gZXhhbXBsZSAvZXRjL3Bhc3N3ZCBmaWxlIG1heSBoYXZlIGVudHJpZXMgbGlrZSB0aGVz
ZToKKzxQUkU+CisgICAgICAgIC4KKyAgICAgICAgLgorYWZzdXNlcm9uZTpVU0UgQUZTOjUwMDox
MDA6Oi9hZnMvYWZzY2VsbC91L2Fmc3VzZXJvbmU6L2Jpbi9iYXNoCitsb2NhbHVzZXJvbmU6eDo1
MDE6MTAwOjovaG9tZS9sb2NhbHVzZXJvbmU6L2Jpbi9iYXNoCitsb2NhbHVzZXJ0d286eDo1MDI6
MTAwOjovaG9tZS9sb2NhbHVzZXJ0d286L2Jpbi9iYXNoCithZnN1c2VydHdvOlVTRSBBRlM6NTAz
OjEwMDo6L2Fmcy9hZnNjZWxsL3UvYWZzdXNlcnR3bzovYmluL2Jhc2gKKyAgICAgICAgLgorICAg
ICAgICAuCis8L1BSRT48YnI+CitBbHNvIGhlcmUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIGxvY2sg
dGhlIEFGUyB1c2VycyBpbiB0aGUgZmlsZSAvZXRjL3NoYWRvdy4KKwogPFA+PERUPjxCPjxUVD5z
ZXRlbnZfcGFzc3dvcmRfZXhwaXJlczwvVFQ+CiA8L0I+PEREPlRoaXMgYXR0cmlidXRlLCBzcGVj
aWZpYyB0byB0aGUgQUZTIFBBTSBtb2R1bGUsIHNldHMgdGhlIGVudmlyb25tZW50CiB2YXJpYWJs
ZSBQQVNTV09SRF9FWFBJUkVTIHRvIHRoZSBleHBpcmF0aW9uIGRhdGUgb2YgdGhlIHVzZXIncyBB
RlMKIHBhc3N3b3JkLCB3aGljaCBpcyByZWNvcmRlZCBpbiB0aGUgQXV0aGVudGljYXRpb24gRGF0
YWJhc2UuCis8UD48RFQ+PEI+PFRUPnNldF90b2tlbjwvVFQ+Cis8L0I+PEREPlNvbWUgYXBwbGlj
YXRpb25zIGRvbid0IGNhbGwgPGk+cGFtX3NldGNyZWQoKTwvaT4gaW4gb3JkZXIgdG8gcmV0cmll
dmUgdGhlIGFwcHJvcHJpYXRlCitjcmVkZW50aWFscyAoaGVyZSB0aGUgQUZTIHRva2VuKSBmb3Ig
dGhlaXIgc2Vzc2lvbi4gVGhpcyBzd2l0Y2ggc2V0cyB0aGUgY3JlZGVudGlhbHMKK2FscmVhZHkg
aW4gPGk+cGFtX3NtX2F1dGhlbnRpY2F0ZSgpPC9pPiBvYnNvbGV0aW5nIGEgY2FsbCB0byA8aT5w
YW1fc2V0Y3JlZCgpPC9pPi48YnI+Cis8Yj5DYXV0aW9uOiBEb24ndCB1c2UgdGhpcyBzd2l0Y2gg
Zm9yIGFwcGxpY2F0aW9ucyB3aGljaCBkbyBjYWxsIDxpPnBhbV9zZXRjcmVkKCk8L2k+ITwvYj4K
K09uZSBleGFtcGxlIGZvciBhbiBhcHBsaWNhdGlvbiBub3QgY2FsbGluZyA8aT5wYW1fc2V0Y3Jl
ZCgpPC9pPiBhcmUgb2xkZXIgdmVyc2lvbnMgb2YKK3RoZSBzYW1iYSBzZXJ2ZXIuPGJyPgorTmV2
ZXJ0aGVsZXNzLCB1c2luZyBhcHBsaWNhdGlvbnMgd2l0aCB3b3JraW5nIHBhbSBzZXNzaW9uIG1h
bmFnZW1lbnQgaXMgcmVjb21tZW5kZWQgYXMgdGhpcworc2V0dXAgY29uZm9ybXMgYmV0dGVyIHdp
dGggdGhlIFBBTSBkZWZpbml0aW9ucy4KKzxQPjxEVD48Qj48VFQ+cmVmcmVzaF90b2tlbjwvVFQ+
Cis8L0I+PEREPlRoaXMgb3B0aW9ucyBpcyBpZGVudGljYWwgdG8gJnF1b3Q7c2V0X3Rva2VuJnF1
b3Q7IGV4Y2VwdCB0aGF0IG5vIG5ldyBQQUcgaXMgZ2VuZXJhdGVkLgorVGhpcyBpcyBuZWNlc3Nh
cnkgdG8gaGFuZGxlIHByb2Nlc3NlcyBsaWtlIHhsb2NrIG9yIHhzY3JlZW5zYXZlci4gSXQgaXMg
bm90IGVub3VnaCB0byBnaXZlCit0aGUgc2NyZWVuIGFuZCB0aGUga2V5Ym9hcmQgZnJlZSBmb3Ig
dGhlIHVzZXIgd2hvIHJlYWN0aXZhdGVkIGhpcyBzY3JlZW4gdHlwaW5nIGluIHRoZQorY29ycmVj
dCBBRlMgcGFzc3dvcmQsIGJ1dCBvbmUgbWF5IGFsc28gbmVlZCBmcmVzaCB0b2tlbnMgd2l0aCBm
dWxsCitsaXZldGltZSBpbiBvcmRlciB0byB3b3JrIG9uLCBhbmQgdGhlIG5ldyB0b2tlbiBtdXN0
IGJlIHJlZnJlc2hlZCBpbiB0aGUgYWxyZWFkeSBleGlzdGluZyBQQUcKK2ZvciB0aGUgcHJvY2Vz
c2VzIHRoYXQgaGF2ZSBiZWVuIHN0YXJ0ZWQuIFRoaXMgaXMgYWNoaWV2ZWQgdXNpbmcgdGhpcyBv
cHRpb24uCis8UD48RFQ+PEI+PFRUPnVzZV9rbG9nPC9UVD4KKzwvQj48REQ+QWN0aXZhdGluZyB0
aGlzIHN3aXRjaCB0aGUgYXV0aGVudGljYXRpb24gaXMgZG9uZSBieSBjYWxsaW5nIHRoZSBleHRl
cm5hbCBwcm9ncmFtICZxdW90O2tsb2cmcXVvdDsuCitPbmUgcHJvZ3JhbSByZXF1aXJpbmcgdGhp
cyBpcyBmb3IgZXhhbXBsZSA8aT5rZG08L2k+IG9mIEtERSAyLnguPGJyPjwvREQ+Cis8UD48RFQ+
PEI+PFRUPmRvbnRfZm9yazwvVFQ+Cis8L0I+PEREPlVzdWFsbHksIHRoZSBwYXNzd29yZCB2ZXJp
ZmljYXRpb24gYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIHRoZSB0b2tlbiBpcyBwZXJmb3JtZWQK
K2luIGEgc3ViIHByb2Nlc3MuIFVzaW5nIHRoaXMgb3B0aW9uIHBhbV9hZnMgZG9lcyBub3QgZm9y
ayBhbmQgcGVyZm9ybXMgYWxsIGFjdGlvbnMgaW4gYSBzaW5nbGUKK3Byb2Nlc3MuIDxiPk9ubHkg
dXNlIHRoaXMgb3B0aW9ucyBpbiBjYXNlIHlvdSBub3RpY2Ugc2VyaW91cyBwcm9ibGVtcyBjYXVz
ZWQgYnkgdGhlIHN1YiBwcm9jZXNzLjwvYj4KK1RoaXMgb3B0aW9uIGhhcyBiZWVuIGRldmVsb3Bl
ZCBpbiByZXNwZWN0IHRvIHRoZSAmcXVvdDttb2RfYXV0aF9wYW0mcXVvdDstcHJvamVjdCAoc2Vl
IGFsc28KKzxBIEhSRUY9Imh0dHA6Ly9wYW0uc291cmNlZm9yZ2UubmV0L21vZF9hdXRoX3BhbS8i
Pm1vZF9hdXRoX3BhbTwvQT4pLiBUaGUgbW9kX2F1dGhfcGFtCittb2R1bGUgZW5hYmxlcyBQQU0g
YXV0aGVudGljYXRpb24gZm9yIHRoZSBhcGFjaGUgaHR0cCBzZXJ2ZXIgcGFja2FnZS4KKworPGg0
Pjxicj5TZXNzaW9uIE1hbmFnZW1lbnQ8L2g0PgorCis8UD48RFQ+PEI+PFRUPm5vX3VubG9nPC9U
VD4KKzwvQj48REQ+Tm9ybWFsbHkgdGhlIHRva2VucyBhcmUgZGVsZXRlZCAoaW4gbWVtb3J5KSBh
ZnRlciB0aGUgc2Vzc2lvbiBlbmRzLiBVc2luZyB0aGlzIG9wdGlvbnMgdGhlIHRva2VucyBhcmUg
bGVmdAordW50b3VjaGVkLiA8Yj5UaGlzIGJlaGF2aW91ciBoYXMgYmVlbiB0aGUgZGVmYXVsdCBp
biBwYW1fYWZzIHVudGlsIG9wZW5hZnMtMS4xLjEhPC9iPgorPFA+PERUPjxCPjxUVD5yZW1haW5s
aWZldGltZSA8aT5zZWM8L2k+PC9UVD4KKzwvQj48REQ+VGhlIHRva2VucyBhcmUga2VwdCBhY3Rp
dmUgZm9yIDxpPnNlYzwvaT4gc2Vjb25kcyBiZWZvcmUgdGhleSBhcmUgZGVsZXRlZC4gWCBkaXNw
bGF5IG1hbmFnZXJzCitpLmUuIGFyZSB1c2VkIHRvIGluZm9ybSB0aGUgYXBwbGljYXRpb25zIHN0
YXJ0ZWQgaW4gdGhlIFggc2Vzc2lvbiBiZWZvcmUgdGhlIGxvZ291dCBhbmQgdGhlbgorZW5kIHRo
ZW1zZWx2ZXMuIElmIHRoZSB0b2tlbiB3YXMgZGVsZXRlZCBpbW1lZGlhdGVseSB0aGUgYXBwbGlj
YXRpb25zIHdvdWxkIGhhdmUgbm8gY2hhbmNlIHRvCit3cml0ZSBiYWNrIHRoZWlyIHNldHRpbmdz
IHRvIGkuZS4gdGhlIHVzZXIncyBBRlMgaG9tZSBzcGFjZS4gVGhpcyBvcHRpb24gbWF5IGhlbHAg
dG8gYXZvaWQgdGhlCitwcm9ibGVtLjxicj4KKwogPC9ETD4KIDxQPlBlcmZvcm0gdGhlIGZvbGxv
d2luZyBzdGVwcyB0byBlbmFibGUgQUZTIGxvZ2luLgogPE9MIFRZUEU9MT4KIDxQPjxMST5Nb3Vu
dCB0aGUgQUZTIENELVJPTSBmb3IgTGludXggb24gdGhlIDxCPi9jZHJvbTwvQj4gZGlyZWN0b3J5
LCBpZiBpdAogaXMgbm90IGFscmVhZHkuIFRoZW4gY2hhbmdlIHRvIHRoZSBkaXJlY3RvcnkgZm9y
IFBBTSBtb2R1bGVzLCB3aGljaAotZGVwZW5kcyBvbiB3aGljaCBMaW51eCBkaXN0cmlidXRpb24g
eW91IGFyZSB1c2luZy4gCitkZXBlbmRzIG9uIHdoaWNoIExpbnV4IGRpc3RyaWJ1dGlvbiB5b3Ug
YXJlIHVzaW5nLgogPFA+SWYgeW91IGFyZSB1c2luZyBhIExpbnV4IGRpc3RyaWJ1dGlvbiBmcm9t
IFJlZCBIYXQgU29mdHdhcmU6Ci08UFJFPiAgIAotICAgIyA8Qj5jZCAvbGliL3NlY3VyaXR5PC9C
PiAgIAotPC9QUkU+IAorPFBSRT4KKyAgICMgPEI+Y2QgL2xpYi9zZWN1cml0eTwvQj4KKzwvUFJF
PgogPFA+SWYgeW91IGFyZSB1c2luZyBhbm90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbjoKLTxQUkU+
ICAgCis8UFJFPgogICAgIyA8Qj5jZCAvdXNyL2xpYi9zZWN1cml0eTwvQj4KLSAgIAorCiA8L1BS
RT4KIDxQPjxMST5Db3B5IHRoZSBhcHByb3ByaWF0ZSBBRlMgYXV0aGVudGljYXRpb24gbGlicmFy
eSBmaWxlIHRvIHRoZSBkaXJlY3RvcnkgdG8KIHdoaWNoIHlvdSBjaGFuZ2VkIGluIHRoZSBwcmV2
aW91cyBzdGVwLiBDcmVhdGUgYSBzeW1ib2xpYyBsaW5rIHdob3NlCiBuYW1lIGRvZXMgbm90IG1l
bnRpb24gdGhlIHZlcnNpb24uIE9taXR0aW5nIHRoZSB2ZXJzaW9uIGVsaW1pbmF0ZXMgdGhlCiBu
ZWVkIHRvIGVkaXQgdGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgaWYgeW91IGxhdGVyIHVwZGF0
ZSB0aGUgbGlicmFyeQotZmlsZS4gCitmaWxlLgogPFA+SWYgeW91IHVzZSB0aGUgQUZTIEF1dGhl
bnRpY2F0aW9uIFNlcnZlciAoPEI+a2FzZXJ2ZXI8L0I+CiBwcm9jZXNzKToKLTxQUkU+ICAgCis8
UFJFPgogICAgIyA8Qj5jcCAvY2Ryb20vaTM4Nl9saW51eDIyL2xpYi9wYW1fYWZzLnNvLjEgIC48
L0I+Ci0gICAKLSAgICMgPEI+bG4gLXMgcGFtX2Fmcy5zby4xIHBhbV9hZnMuc288L0I+ICAgCi08
L1BSRT4gCisKKyAgICMgPEI+bG4gLXMgcGFtX2Fmcy5zby4xIHBhbV9hZnMuc288L0I+Cis8L1BS
RT4KIDxQPklmIHlvdSB1c2UgYSBLZXJiZXJvcyBpbXBsZW1lbnRhdGlvbiBvZiBBRlMgYXV0aGVu
dGljYXRpb246Ci08UFJFPiAgIAorPFBSRT4KICAgICMgPEI+Y3AgL2Nkcm9tL2kzODZfbGludXgy
Mi9saWIvcGFtX2Fmcy5rcmIuc28uMSAgIC48L0I+Ci0gICAKKwogICAgIyA8Qj5sbiAtcyBwYW1f
YWZzLmtyYi5zby4xIHBhbV9hZnMuc288L0I+Ci0gICAKKwogPC9QUkU+CiA8UD48TEk+Rm9yIGVh
Y2ggc2VydmljZSB3aXRoIHdoaWNoIHlvdSB3YW50IHRvIHVzZSBBRlMgYXV0aGVudGljYXRpb24s
IGluc2VydCBhbgogZW50cnkgZm9yIHRoZSBBRlMgUEFNIG1vZHVsZSBpbnRvIHRoZSA8VFQ+YXV0
aDwvVFQ+IHNlY3Rpb24gb2YgdGhlCiBzZXJ2aWNlJ3MgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZS4g
KExpbnV4IHVzZXMgYSBzZXBhcmF0ZQogY29uZmlndXJhdGlvbiBmaWxlIGZvciBlYWNoIHNlcnZp
Y2UsIHVubGlrZSBzb21lIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIHdoaWNoCiBsaXN0IGFsbCBz
ZXJ2aWNlcyBpbiBhIHNpbmdsZSBmaWxlLikgTWFyayB0aGUgZW50cnkgYXMKLTxUVD5zdWZmaWNp
ZW50PC9UVD4gaW4gdGhlIHNlY29uZCBmaWVsZC4gCis8VFQ+c3VmZmljaWVudDwvVFQ+IGluIHRo
ZSBzZWNvbmQgZmllbGQuCiA8UD5QbGFjZSB0aGUgQUZTIGVudHJ5IGJlbG93IGFueSBlbnRyaWVz
IHRoYXQgaW1wb3NlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2gKIHlvdSB3YW50IHRoZSBzZXJ2aWNl
IHRvIGZhaWwgZm9yIGEgdXNlciB3aG8gZG9lcyBub3QgbWVldCB0aGUgZW50cnkncwogcmVxdWly
ZW1lbnRzLiBNYXJrIHRoZXNlIGVudHJpZXMgPFRUPnJlcXVpcmVkPC9UVD4uIFBsYWNlIHRoZQog
QUZTIGVudHJ5IGFib3ZlIGFueSBlbnRyaWVzIHRoYXQgbmVlZCB0byBleGVjdXRlIG9ubHkgaWYg
QUZTIGF1dGhlbnRpY2F0aW9uCi1mYWlscy4gCitmYWlscy4KIDxQPkluc2VydCB0aGUgZm9sbG93
aW5nIEFGUyBlbnRyeSBpZiB1c2luZyB0aGUgUmVkIEhhdCBkaXN0cmlidXRpb246Ci08UFJFPiAg
IAotICAgYXV0aCAgc3VmZmljaWVudCAgL2xpYi9zZWN1cml0eS9wYW1fYWZzLnNvICAgdHJ5X2Zp
cnN0X3Bhc3MgIGlnbm9yZV9yb290ICAgCi08L1BSRT4gCis8UFJFPgorICAgYXV0aCAgc3VmZmlj
aWVudCAgL2xpYi9zZWN1cml0eS9wYW1fYWZzLnNvICAgdHJ5X2ZpcnN0X3Bhc3MgIGlnbm9yZV9y
b290Cis8L1BSRT4KIDxQPkluc2VydCB0aGUgZm9sbG93aW5nIEFGUyBlbnRyeSBpZiB1c2luZyBh
bm90aGVyIGRpc3RyaWJ1dGlvbjoKLTxQUkU+ICAgCi0gICBhdXRoICBzdWZmaWNpZW50ICAvdXNy
L2xpYi9zZWN1cml0eS9wYW1fYWZzLnNvICB0cnlfZmlyc3RfcGFzcyAgaWdub3JlX3Jvb3QgICAK
LTwvUFJFPiAKLTxQPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpbGx1c3RyYXRlcyB0aGUgcmVjb21t
ZW5kZWQgY29uZmlndXJhdGlvbiBvZiB0aGUKLWNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIDxC
PmxvZ2luPC9CPiBzZXJ2aWNlCi0oPEI+L2V0Yy9wYW0uZC9sb2dpbjwvQj4pIG9uIGEgbWFjaGlu
ZSB1c2luZyB0aGUgUmVkIEhhdAotZGlzdHJpYnV0aW9uLgotPFBSRT4gICAKKzxQUkU+CisgICBh
dXRoICBzdWZmaWNpZW50ICAvdXNyL2xpYi9zZWN1cml0eS9wYW1fYWZzLnNvICB0cnlfZmlyc3Rf
cGFzcyAgaWdub3JlX3Jvb3QKKzwvUFJFPgorPFA+Q2hlY2sgdGhlIFBBTSBjb25maWcgZmlsZXMg
YWxzbyBmb3IgJnF1b3Q7c2Vzc2lvbiZxdW90OyBlbnRyaWVzLiBJZiB0aGVyZSBhcmUKK2xpbmVz
IGJlZ2lubmluZyB3aXRoICZxdW90O3Nlc3Npb24mcXVvdDsgdGhlbiBwbGVhc2UgaW5zZXJ0IHRo
aXMgbGluZSB0b286Cis8UFJFPgorICAgc2Vzc2lvbiAgb3B0aW9uYWwgIC9saWIvc2VjdXJpdHkv
cGFtX2Fmcy5zbworPC9QUkU+Cis8UD5vcgorPFBSRT4KKyAgIHNlc3Npb24gIG9wdGlvbmFsICAv
dXNyL2xpYi9zZWN1cml0eS9wYW1fYWZzLnNvCis8L1BSRT4KKzxQPlRoaXMgZ3VhcmFudGllcyB0
aGF0IHRoZSB1c2VyJ3MgdG9rZW5zIGFyZSBkZWxldGVkIGZyb20gbWVtb3J5IGFmdGVyIGhpcwor
c2Vzc2lvbiBlbmRzIHNvIHRoYXQgbm8gb3RoZXIgdXNlciBjb2luY2lkZW50bHkgZ2V0cyB0aG9z
ZSB0b2tlbnMgd2l0aG91dCBhdXRob3JpemF0aW9uIQorVGhlIGZvbGxvd2luZyBleGFtcGxlcyBp
bGx1c3RyYXRlIHRoZSByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uIG9mIHRoZQorY29uZmlndXJh
dGlvbiBmaWxlIGZvciBzZXZlcmFsIHNlcnZpY2VzOjxicj4KKworPGg0Pjxicj5BdXRoZW50aWNh
dGlvbiBNYW5hZ2VtZW50PC9oND4KKworKDxCPi9ldGMvcGFtLmQvbG9naW48L0I+KQorPFBSRT4K
ICAgICMlUEFNLTEuMAogICAgYXV0aCAgICAgIHJlcXVpcmVkICAgL2xpYi9zZWN1cml0eS9wYW1f
c2VjdXJldHR5LnNvCiAgICBhdXRoICAgICAgcmVxdWlyZWQgICAvbGliL3NlY3VyaXR5L3BhbV9u
b2xvZ2luLnNvCiAgICBhdXRoICAgICAgc3VmZmljaWVudCAvbGliL3NlY3VyaXR5L3BhbV9hZnMu
c28gdHJ5X2ZpcnN0X3Bhc3MgaWdub3JlX3Jvb3QKKyAgICMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorICAgI1Ro
aXMgZW5hYmxlcyBBRlMgYXV0aGVudGljYXRpb24gZm9yIGV2ZXJ5IHVzZXIgYnV0IHJvb3QKICAg
IGF1dGggICAgICByZXF1aXJlZCAgIC9saWIvc2VjdXJpdHkvcGFtX3B3ZGIuc28gc2hhZG93IG51
bGxvawogICAgYWNjb3VudCAgIHJlcXVpcmVkICAgL2xpYi9zZWN1cml0eS9wYW1fcHdkYi5zbwog
ICAgcGFzc3dvcmQgIHJlcXVpcmVkICAgL2xpYi9zZWN1cml0eS9wYW1fY3JhY2tsaWIuc28KICAg
IHBhc3N3b3JkICByZXF1aXJlZCAgIC9saWIvc2VjdXJpdHkvcGFtX3B3ZGIuc28gc2hhZG93IG51
bGxvayB1c2VfYXV0aHRvaworICAgc2Vzc2lvbiAgIG9wdGlvbmFsICAgL2xpYi9zZWN1cml0eS9w
YW1fYWZzLnNvCisgICAjTWFrZSBzdXJlIHRva2VucyBhcmUgZGVsZXRlZCBhZnRlciB0aGUgdXNl
ciBsb2dzIG91dAogICAgc2Vzc2lvbiAgIHJlcXVpcmVkICAgL2xpYi9zZWN1cml0eS9wYW1fcHdk
Yi5zbwotICAgCisKKzwvUFJFPjxicj4KKyg8Yj4vZXRjL3BhbS5kL3NhbWJhPC9iPikKKzxQUkU+
CisgICBhdXRoICAgICAgIHJlcXVpcmVkICAgICAvbGliL3NlY3VyaXR5L3BhbV9hZnMuc28gaWdu
b3JlX3VpZCAxMDAgc2V0X3Rva2VuCisgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisgICAjSGVyZSwgdXNl
cnMgd2l0aCB1aWQmZ3Q7MTAwIGFyZSBjb25zaWRlcmVkIHRvIGJlbG9uZyB0byB0aGUgQUZTIGFu
ZCB1c2VycworICAgI3dpdGggdWlkJmx0Oz0xMDAgYXJlIGlnbm9yZWQgYnkgcGFtX2Fmcy4gVGhl
IHRva2VuIGlzIHJldHJpZXZlZCBhbHJlYWR5IGluCisgICAjcGFtX3NtX2F1dGhlbnRpY2F0ZSgp
ICh0aGlzIGlzIGFuIGV4YW1wbGUgcGFtIGNvbmZpZyBmb3IgYSBzYW1iYSB2ZXJzaW9uCisgICAj
dGhhdCBkb2VzIG5vdCBjYWxsIHBhbV9zZXRjcmVkKCksIGl0IGFsc28gZG9lcyBubyBzZW5zZSB0
byBpbmNsdWRlIHNlc3Npb24KKyAgICNlbnRyaWVzIGhlcmUgc2luY2UgdGhleSB3b3VsZCBiZSBp
Z25vcmVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBzYW1iYSApLgorICAgYWNjb3VudCAgICByZXF1aXJl
ZCAgICAgL2xpYi9zZWN1cml0eS9wYW1fcHdkYi5zbworPC9QUkU+CisoPGI+L2V0Yy9wYW0uZC94
c2NyZWVuc2F2ZXI8L2I+KQorPFBSRT4KKyAgIGF1dGggICAgICAgc3VmZmljaWVudCAgIC9saWIv
c2VjdXJpdHkvcGFtX2Fmcy5zbyBpZ25vcmVfdWlkIDEwMCByZWZyZXNoX3Rva2VuCisgICAjICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXl5eXl5eXl5eXl5eXgorICAgI0F2b2lkIGdlbmVyYXRpbmcgYSBuZXcgUEFHIGZvciB0aGUg
bmV3IHRva2VucywgdXNlIHRoZSBhbHJlYWR5IGV4aXN0aW5nIFBBRyBhbmQKKyAgICNlc3RhYmxp
c2ggYSBmcmVzaCB0b2tlbiBpbiBpdC4KKyAgIGF1dGggICAgICAgcmVxdWlyZWQgICAgIC9saWIv
c2VjdXJpdHkvcGFtX3B3ZGIuc28gdHJ5X2ZpcnN0X3Bhc3MKKzwvUFJFPgorKDxiPi9ldGMvcGFt
LmQvaHR0cGQ8L2I+KQorPFBSRT4KKyAgIGF1dGggICAgICAgcmVxdWlyZWQgICAvbGliL3NlY3Vy
aXR5L3BhbV9hZnMuc28gaWdub3JlX3VpZCAxMDAgZG9udF9mb3JrCisgICAjICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5e
XgorICAgI0Rvbid0IGZvcmsgZm9yIHRoZSB2ZXJpZmljYXRpb24gb2YgdGhlIHBhc3N3b3JkLgor
PC9QUkU+CisKKzxoND48YnI+U2Vzc2lvbiBNYW5hZ2VtZW50PC9oND4KKworKDxiPi9ldGMvcGFt
LmQvc3U8L2I+KQorPFBSRT4KKyAgIGF1dGggICAgICAgc3VmZmljaWVudCAgIC9saWIvc2VjdXJp
dHkvcGFtX2Fmcy5zbyBpZ25vcmVfdWlkIDEwMAorICAgYXV0aCAgICAgICByZXF1aXJlZCAgICAg
L2xpYi9zZWN1cml0eS9wYW1fcHdkYi5zbyB0cnlfZmlyc3RfcGFzcworICAgYWNjb3VudCAgICBy
ZXF1aXJlZCAgICAgL2xpYi9zZWN1cml0eS9wYW1fcHdkYi5zbworICAgcGFzc3dvcmQgICByZXF1
aXJlZCAgICAgL2xpYi9zZWN1cml0eS9wYW1fY3JhY2tsaWIuc28KKyAgIHBhc3N3b3JkICAgcmVx
dWlyZWQgICAgIC9saWIvc2VjdXJpdHkvcGFtX3B3ZGIuc28gdXNlX2F1dGh0b2sKKyAgIHNlc3Np
b24gICAgcmVxdWlyZWQgICAgIC9saWIvc2VjdXJpdHkvcGFtX3B3ZGIuc28KKyAgIHNlc3Npb24g
ICAgb3B0aW9uYWwgICAgIC9saWIvc2VjdXJpdHkvcGFtX2Fmcy5zbyBub191bmxvZworICAgIyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eCisg
ICAjRG9uJ3QgZGVsZXRlIHRoZSB0b2tlbiBpbiB0aGlzIGNhc2UsIHNpbmNlIHRoZSB1c2VyIG1h
eSBzdGlsbAorICAgI25lZWQgaXQgKGZvciBleGFtcGxlIGlmIHNvbWVib2R5IGxvZ3MgaW4gYW5k
IGNoYW5nZXMgdG8gcm9vdAorICAgI2FmdGVyd2FyZHMgaGUgbWF5IHN0aWxsIHdhbnQgdG8gYWNj
ZXNzIGhpcyBob21lIHNwYWNlIGluIEFGUykuCisgICBzZXNzaW9uICAgIHJlcXVpcmVkICAgICAv
bGliL3NlY3VyaXR5L3BhbV9sb2dpbl9hY2Nlc3Muc28KKyAgIHNlc3Npb24gICAgb3B0aW9uYWwg
ICAgIC9saWIvc2VjdXJpdHkvcGFtX3hhdXRoLnNvCis8L1BSRT4KKyg8Yj4vZXRjL3BhbS5kL3hk
bTwvYj4pCis8UFJFPgorICAgYXV0aCAgICAgICByZXF1aXJlZCAgICAgL2xpYi9zZWN1cml0eS9w
YW1fbm9sb2dpbi5zbworICAgYXV0aCAgICAgICByZXF1aXJlZCAgICAgL2xpYi9zZWN1cml0eS9w
YW1fbG9naW5fYWNjZXNzLnNvCisgICBhdXRoICAgICAgIHN1ZmZpY2llbnQgICAvbGliL3NlY3Vy
aXR5L3BhbV9hZnMuc28gaWdub3JlX3VpZCAxMDAgdXNlX2tsb2cKKyAgIGF1dGggICAgICAgcmVx
dWlyZWQgICAgIC9saWIvc2VjdXJpdHkvcGFtX3B3ZGIuc28gdHJ5X2ZpcnN0X3Bhc3MKKyAgIGFj
Y291bnQgICAgcmVxdWlyZWQgICAgIC9saWIvc2VjdXJpdHkvcGFtX3B3ZGIuc28KKyAgIHBhc3N3
b3JkICAgcmVxdWlyZWQgICAgIC9saWIvc2VjdXJpdHkvcGFtX2NyYWNrbGliLnNvCisgICBwYXNz
d29yZCAgIHJlcXVpcmVkICAgICAvbGliL3NlY3VyaXR5L3BhbV9wd2RiLnNvIHNoYWRvdyBudWxs
b2sgdXNlX2F1dGh0b2sKKyAgIHNlc3Npb24gICAgb3B0aW9uYWwgICAgIC9saWIvc2VjdXJpdHkv
cGFtX2Fmcy5zbyByZW1haW5saWZldGltZSAxMAorICAgIyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eCisgICAjV2FpdCAxMCBz
ZWNvbmRzIGJlZm9yZSBkZWxldGluZyB0aGUgQUZTIHRva2VucyBpbiBvcmRlciB0byBnaXZlCisg
ICAjdGhlIHByb2dyYW1zIG9mIHRoZSBYIHNlc3Npb24gc29tZSB0aW1lIHRvIHNhdmUgdGhlaXIg
c2V0dGluZ3MKKyAgICN0byBBRlMuCisgICBzZXNzaW9uICAgIHJlcXVpcmVkICAgICAvbGliL3Nl
Y3VyaXR5L3BhbV9wd2RiLnNvCiA8L1BSRT4KKwogPFA+PExJPlByb2NlZWQgdG8gPEEgSFJFRj0i
I0hEUldRMTQ1Ij5Mb2FkaW5nIGFuZCBDcmVhdGluZyBDbGllbnQgRmlsZXM8L0E+LgogPC9PTD4K
IDxBIE5BTUU9IklEWDI5ODYiPjwvQT4KZGlmZiAtdXJOIG9wZW5hZnMtMS4xLjEub3JpZy9zcmMv
cGFtL2Fmc19hdXRoLmMgb3BlbmFmcy0xLjEuMS9zcmMvcGFtL2Fmc19hdXRoLmMKLS0tIG9wZW5h
ZnMtMS4xLjEub3JpZy9zcmMvcGFtL2Fmc19hdXRoLmMJV2VkIEF1ZyAgOCAxMzo0MToyMyAyMDAx
CisrKyBvcGVuYWZzLTEuMS4xL3NyYy9wYW0vYWZzX2F1dGguYwlUaHUgQXVnIDE2IDE3OjI4OjQy
IDIwMDEKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2RlZmluZSBSRVQoeCkgeyByZXRjb2RlID0gKHgp
OyBnb3RvIG91dDsgfQogCi0KIGV4dGVybiBpbnQKIHBhbV9zbV9hdXRoZW50aWNhdGUoCiAJcGFt
X2hhbmRsZV90CSpwYW1oLApAQCAtNDUsMTQgKzQ0LDI1IEBACiAgICAgaW50IG5vd2FybiA9IDA7
CiAgICAgaW50IHVzZV9maXJzdF9wYXNzID0gMDsKICAgICBpbnQgdHJ5X2ZpcnN0X3Bhc3MgPSAw
OwotICAgIGludCBpZ25vcmVfcm9vdCA9IDA7Ci0gICAgaW50IHRydXN0X3Jvb3QgPSAwOwotICAg
IGludCBjYXRjaF9zdSA9IDA7CisgICAgaW50IGlnbm9yZV91aWQgID0gMDsKKyAgICBpbnQgY2hl
Y2tfcHdfZW50cnkgPSAwOworICAgIHVpZF90IGlnbm9yZV91aWRfaWQgPSAwOworICAgIGNoYXIg
bXlfcGFzc3dvcmRfYnVmWzI1Nl07CisgICAgLyoKKyAgICAgKiB0aGVzZSBvcHRpb25zIGFyZSBh
ZGRlZCB0byBoYW5kbGUgc3R1cGlkIGFwcHMsIHdoaWNoIHdvbid0IGNhbGwKKyAgICAgKiBwYW1f
c2V0X2NyZWQoKQorICAgICAqLworICAgIGludCByZWZyZXNoX3Rva2VuID0gMDsKKyAgICBpbnQg
c2V0X3Rva2VuID0gMDsKKyAgICBpbnQgZG9udF9mb3JrID0gMDsKKyAgICAvKiBzYXRpc2Z5IGtk
bSAyLngKKyAgICAgKi8KKyAgICBpbnQgdXNlX2tsb2cgPSAwOwogICAgIGludCBzZXRfZXhwaXJl
cyA9IDA7ICAvKiBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgaW4gcGFtX3NldF9jcmVkKCkgKi8K
ICAgICBpbnQgZ290X2F1dGh0b2sgPSAwOwkvKiBnb3QgUEFNX0FVVEhUT0sgdXBvbiBlbnRyeSAq
LwogICAgIGludCBub3VzZXIgPSAwOwotICAgIGNoYXIgbXlfcGFzc3dvcmRfYnVmWzI1Nl07CiAg
ICAgY2hhciAqdXNlciA9IE5VTEwsICpwYXNzd29yZCA9IE5VTEw7CisgICAgbG9uZyBwYXNzd29y
ZF9leHBpcmVzID0gLTE7CiAgICAgaW50IHRvcmNoX3Bhc3N3b3JkID0gMTsKICAgICBpbnQgaTsK
ICAgICBzdHJ1Y3QgcGFtX2NvbnYgKnBhbV9jb252cCA9IE5VTEw7CkBAIC02Nyw3ICs3Nyw3IEBA
CiAKIAogI2lmbmRlZiBBRlNfU1VONTZfRU5WCi0gICAgb3BlbmxvZyhwYW1fYWZzX2lkZW50LCBM
T0dfQ09OUywgTE9HX0FVVEgpOworICAgIG9wZW5sb2cocGFtX2Fmc19pZGVudCwgTE9HX0NPTlN8
TE9HX1BJRCwgTE9HX0FVVEgpOwogI2VuZGlmCiAgICAgb3JpZ21hc2sgPSBzZXRsb2dtYXNrKGxv
Z21hc2spOwogCkBAIC04NSwxMSArOTUsMzMgQEAKIAl9IGVsc2UgaWYgKHN0cmNhc2VjbXAoYXJn
dltpXSwgInRyeV9maXJzdF9wYXNzIikgPT0gMCkgewogCSAgICB0cnlfZmlyc3RfcGFzcyA9IDE7
CiAJfSBlbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbaV0sICJpZ25vcmVfcm9vdCIgICApID09IDAp
IHsKLQkgICAgaWdub3JlX3Jvb3QgPSAxOwotCX0gZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2W2ld
LCAidHJ1c3Rfcm9vdCIgICApID09IDApIHsKLQkgICAgdHJ1c3Rfcm9vdCA9IDE7Ci0JfSBlbHNl
IGlmIChzdHJjYXNlY21wKGFyZ3ZbaV0sICJjYXRjaF9zdSIgICApID09IDApIHsKLQkgICAgY2F0
Y2hfc3UgPSAxOworCSAgICBpZ25vcmVfdWlkID0gMTsKKwkgICAgaWdub3JlX3VpZF9pZCA9IDA7
CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2W2ldLCAiaWdub3JlX3VpZCIgICAg
KSA9PSAwKSB7CisJICAgIGkrKzsKKwkgICAgaWYgKGkgPT0gYXJnYykgeworICAgICAgICAgICAg
ICAgIHBhbV9hZnNfc3lzbG9nKExPR19FUlIsIFBBTUFGU19JR05PUkVVSUQsICJpZ25vcmVfdWlk
IG1pc3NpbmcgYXJndW1lbnQiKTsKKwkJaWdub3JlX3VpZCA9IDA7CisJICAgIH0gZWxzZSB7CisJ
ICAgICAgICBpZ25vcmVfdWlkID0gMTsKKwkgICAgICAgIGlnbm9yZV91aWRfaWQgPSAodWlkX3Qp
IHN0cnRvbChhcmd2W2ldLCAoY2hhcioqKU5VTEwsIDEwKTsKKwkJaWYgKCAoaWdub3JlX3VpZF9p
ZCAgPCAwKSB8fCAoaWdub3JlX3VpZF9pZCA+IElHTk9SRV9NQVgpKSB7CisJCSAgICAgICAgaWdu
b3JlX3VpZCA9IDA7CisJCSAgICAgICAgcGFtX2Fmc19zeXNsb2coTE9HX0VSUiwgUEFNQUZTX0lH
Tk9SRVVJRCwgYXJndltpXSk7CisgICAgICAgICAgICAgICAgfQorCSAgICB9CisJfSBlbHNlIGlm
IChzdHJjYXNlY21wKGFyZ3ZbaV0sICJjaGVja19wd19lbnRyeSIpID09IDApIHsKKyAgICAgICAg
ICAgIGNoZWNrX3B3X2VudHJ5ID0gMTsKKwl9IGVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndltpXSwg
InJlZnJlc2hfdG9rZW4iICkgPT0gMCkgeworCSAgICByZWZyZXNoX3Rva2VuID0gMTsKKwl9IGVs
c2UgaWYgKHN0cmNhc2VjbXAoYXJndltpXSwgInNldF90b2tlbiIgKSA9PSAwKSB7CisJICAgIHNl
dF90b2tlbiA9IDE7CisJfSBlbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbaV0sICJkb250X2Zvcmsi
ICkgPT0gMCkgeworCSAgICBpZiAoIXVzZV9rbG9nKSBkb250X2ZvcmsgPSAxOworCSAgICBlbHNl
IHBhbV9hZnNfc3lzbG9nKExPR19FUlIsIFBBTUFGU19DT05GTElDVE9QVCwgImRvbnRfZm9yayIp
OworCX0gZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2W2ldLCAidXNlX2tsb2ciICkgPT0gMCkgewor
CSAgICBpZiAoIWRvbnRfZm9yaykgdXNlX2tsb2cgPSAxOworCSAgICBlbHNlIHBhbV9hZnNfc3lz
bG9nKExPR19FUlIsIFBBTUFGU19DT05GTElDVE9QVCwgInVzZV9rbG9nIik7CiAJfSBlbHNlIGlm
IChzdHJjYXNlY21wKGFyZ3ZbaV0sICJzZXRlbnZfcGFzc3dvcmRfZXhwaXJlcyIpID09IDApIHsK
ICAgICAgICAgICAgIHNldF9leHBpcmVzID0gMTsKIAl9IGVsc2UgewpAQCAtMTAyLDMzICsxMzQs
MzMgQEAKICAgICAvKiBzbyB0dXJuIHRoYXQgZmxhZyBvZmYgcmlnaHQgbm93LgkJCQkgICovCiAg
ICAgaWYgKHVzZV9maXJzdF9wYXNzKSB0cnlfZmlyc3RfcGFzcyA9IDA7CiAKLSAgICBwYW1fYWZz
X3N5c2xvZyhMT0dfREVCVUcsIFBBTUFGU19PUFRJT05TLCBub3dhcm4sIHVzZV9maXJzdF9wYXNz
LCB0cnlfZmlyc3RfcGFzcyk7CisgICAgaWYgKGxvZ21hc2sgJiYgTE9HX01BU0soTE9HX0RFQlVH
KSkKKwkgICAgcGFtX2Fmc19zeXNsb2coTE9HX0RFQlVHLCBQQU1BRlNfT1BUSU9OUywgbm93YXJu
LCB1c2VfZmlyc3RfcGFzcywgdHJ5X2ZpcnN0X3Bhc3MsIGlnbm9yZV91aWQsIGlnbm9yZV91aWRf
aWQsIHJlZnJlc2hfdG9rZW4sIHNldF90b2tlbiwgZG9udF9mb3JrLCB1c2Vfa2xvZyk7CiAKICAg
ICAvKiBUcnkgdG8gZ2V0IHRoZSB1c2VyLWludGVyYWN0aW9uIGluZm8sIGlmIGF2YWlsYWJsZS4g
Ki8KLSAgICBlcnJjb2RlID0gcGFtX2dldF9pdGVtKHBhbWgsIFBBTV9DT05WLCAodm9pZCAqKikg
JnBhbV9jb252cCk7CisgICAgZXJyY29kZSA9IHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fQ09OViwg
KGNvbnN0IHZvaWQgKiopICZwYW1fY29udnApOwogICAgIGlmIChlcnJjb2RlICE9IFBBTV9TVUND
RVNTKSB7CiAJcGFtX2Fmc19zeXNsb2coTE9HX1dBUk5JTkcsIFBBTUFGU19OT19VU0VSX0lOVCk7
CiAJcGFtX2NvbnZwID0gTlVMTDsKICAgICB9CiAKICAgICAvKiBXaG8gYXJlIHdlIHRyeWluZyB0
byBhdXRoZW50aWNhdGUgaGVyZT8gKi8KLSAgICBpZiAoKGVycmNvZGUgPSBwYW1fZ2V0X3VzZXIo
cGFtaCwgJnVzZXIsICJsb2dpbjogIikpICE9IFBBTV9TVUNDRVNTKSB7CisgICAgaWYgKChlcnJj
b2RlID0gcGFtX2dldF91c2VyKHBhbWgsIChjb25zdCBjaGFyICoqKSZ1c2VyLCAibG9naW46ICIp
KSAhPSBQQU1fU1VDQ0VTUykgewogCXBhbV9hZnNfc3lzbG9nKExPR19FUlIsIFBBTUFGU19OT1VT
RVIsIGVycmNvZGUpOwogCVJFVChQQU1fVVNFUl9VTktOT1dOKTsKICAgICB9CiAKLSAgICBpZiAo
KCFzdHJuY21wICgicm9vdCIsIHVzZXIsIDQpKSAmJiB0cnVzdF9yb290KSB7Ci0JcGFtX2Fmc19z
eXNsb2coTE9HX0lORk8sIFBBTUFGU19UUlVTVFJPT1QsIHVzZXIpOwotCVJFVChQQU1fU1VDQ0VT
Uyk7Ci0gICAgfQotCi0gICAgcGFtX2Fmc19zeXNsb2coTE9HX0RFQlVHLCBQQU1BRlNfVVNFUk5B
TUVERUJVRywgdXNlcik7CisgICAgaWYgKGxvZ21hc2sgJiYgTE9HX01BU0soTE9HX0RFQlVHKSkK
KwkgICAgcGFtX2Fmc19zeXNsb2coTE9HX0RFQlVHLCBQQU1BRlNfVVNFUk5BTUVERUJVRywgdXNl
cik7CiAKICAgICAvKgogICAgICAqIElmIHRoZSB1c2VyIGhhcyBhICJsb2NhbCIgKG9yIHZpYSBu
c3MsIHBvc3NpYmx5IG5zc19kY2UpIHB3ZW50LAogICAgICAqIGFuZCBpdHMgdWlkPT0wLCBhbmQg
Imlnbm9yZV9yb290IiB3YXMgZ2l2ZW4gaW4gcGFtLmNvbmYsCiAgICAgICogaWdub3JlIHRoZSB1
c2VyLgogICAgICAqLworICAgIC8qIGVuaGFuY2VkOiB1c2UgImlnbm9yZV91aWQgPG51bWJlcj4i
IHRvIHNwZWNpZnkgdGhlIGxhcmdlc3QgdWlkCisgICAgICogd2hpY2ggc2hvdWxkIGJlIGlnbm9y
ZWQgYnkgdGhpcyBtb2R1bGUKKyAgICAgKi8KICNpZglkZWZpbmVkKEFGU19IUFVYX0VOVikKICNp
ZiAgICAgZGVmaW5lZChBRlNfSFBVWDExMF9FTlYpCiAgICAgaSA9IGdldHB3bmFtX3IodXNlciwg
JnVuaXhfcHdkLCB1cHdkX2J1Ziwgc2l6ZW9mKHVwd2RfYnVmKSwgJnVwd2QpOwpAQCAtMTM3LDQz
ICsxNjksNjkgQEAKICAgICBpZiAoIGkgPT0gMCApCQkJLyogZ2V0cHduYW1fciBzdWNjZXNzICov
CiAJdXB3ZCA9ICZ1bml4X3B3ZDsgCiAjZW5kaWYgIC8qIGVsc2UgQUZTX0hQVVgxMTBfRU5WICov
Ci0gICAgaWYgKGlnbm9yZV9yb290ICYmIGkgPT0gMCAgJiYgdXB3ZC0+cHdfdWlkID09IDApIHsK
KyAgICBpZiAoaWdub3JlX3VpZCAmJiBpID09IDAgICYmIHVwd2QtPnB3X3VpZCA8PSBpZ25vcmVf
dWlkX2lkKSB7CiAJcGFtX2Fmc19zeXNsb2coTE9HX0lORk8sIFBBTUFGU19JR05PUklOR1JPT1Qs
IHVzZXIpOwogCVJFVChQQU1fQVVUSF9FUlIpOwogICAgIH0KKworICAgIC8qIENoZWNrIG91dCB0
aGUgcGFzc3dkIGVudHJ5ICovCisgICAgaWYgKGNoZWNrX3B3X2VudHJ5KQorICAgICAgeworCS8q
IElmIHRoZSBwYXNzd29yZCBlbnRyeSBsaXN0cyAiVVNFIEFGUyIgdGhpcyB1c2VyIGlzIHRvIGJl
CisJICAgYXV0aGVudGljYXRlZCBieSBBRlMgKi8KKwlpZiAoc3RybmNtcCh1cHdkLT5wd19wYXNz
d2QsICJVU0UgQUZTXDAiLCA4KSAhPSAwKQorCSAgeworCQkgIGlmIChsb2dtYXNrICYmIExPR19N
QVNLKExPR19ERUJVRykpCisJCQkgIHN5c2xvZyAoTE9HX0RFQlVHLCAiVXNlciAlcyBpcyBub3Qg
cmVnaXN0ZXJlZCBhcyBBRlMgdXNlclxuIiwgdXB3ZC0+cHdfbmFtZSk7CisJICAgIFJFVChQQU1f
VVNFUl9VTktOT1dOKTsKKwkgIH0KKyAgICAgIH0KKwogI2Vsc2UKICNpZmRlZiBBRlNfTElOVVgy
MF9FTlYKICAgICB1cHdkID0gZ2V0cHduYW0odXNlcik7CiAjZWxzZQogICAgIHVwd2QgPSBnZXRw
d25hbV9yKHVzZXIsICZ1bml4X3B3ZCwgdXB3ZF9idWYsIHNpemVvZih1cHdkX2J1ZikpOwogI2Vu
ZGlmCi0gICAgaWYgKHVwd2QgIT0gTlVMTCAmJiB1cHdkLT5wd191aWQgPT0gMCkgewotCWlmIChp
Z25vcmVfcm9vdCkgeyAKKyAgICBpZiAoaWdub3JlX3VpZCAmJiB1cHdkICE9IE5VTEwgJiYgdXB3
ZC0+cHdfdWlkIDw9IGlnbm9yZV91aWRfaWQpIHsKIAkJcGFtX2Fmc19zeXNsb2coTE9HX0lORk8s
IFBBTUFGU19JR05PUklOR1JPT1QsIHVzZXIpOwogCQlSRVQoUEFNX0FVVEhfRVJSKTsKLQl9IGVs
c2UgaWYgKHRydXN0X3Jvb3QgJiYgIWNhdGNoX3N1KSB7Ci0JCXBhbV9hZnNfc3lzbG9nKExPR19J
TkZPLCBQQU1BRlNfVFJVU1RST09ULCB1c2VyKTsKLQkJUkVUKFBBTV9TVUNDRVNTKTsKLQl9CiAg
ICAgfQorCisgICAgLyogQ2hlY2sgb3V0IHRoZSBwYXNzd2QgZW50cnkgKi8KKyAgICBpZiAoY2hl
Y2tfcHdfZW50cnkpCisgICAgICB7CisJLyogSWYgdGhlIHBhc3N3b3JkIGVudHJ5IGxpc3RzICJV
U0UgQUZTIiB0aGlzIHVzZXIgaXMgdG8gYmUKKwkgICBhdXRoZW50aWNhdGVkIGJ5IEFGUyAqLwor
CWlmIChzdHJuY21wKHVwd2QtPnB3X3Bhc3N3ZCwgIlVTRSBBRlNcMCIsIDgpICE9IDApCisJICB7
CisJCSAgaWYgKGxvZ21hc2sgJiYgTE9HX01BU0soTE9HX0RFQlVHKSkKKwkJCSAgc3lzbG9nIChM
T0dfREVCVUcsICJVc2VyICVzIGlzIG5vdCByZWdpc3RlcmVkIGFzIEFGUyB1c2VyXG4iLCB1cHdk
LT5wd19uYW1lKTsKKwkgICAgUkVUKFBBTV9VU0VSX1VOS05PV04pOworCSAgfQorICAgICAgfQor
CiAjZW5kaWYKLSAgICBlcnJjb2RlID0gcGFtX2dldF9pdGVtKHBhbWgsIFBBTV9BVVRIVE9LLCAo
dm9pZCAqKikgJnBhc3N3b3JkKTsKKworICAgIGVycmNvZGUgPSBwYW1fZ2V0X2l0ZW0ocGFtaCwg
UEFNX0FVVEhUT0ssIChjb25zdCB2b2lkICoqKSAmcGFzc3dvcmQpOwogICAgIGlmIChlcnJjb2Rl
ICE9IFBBTV9TVUNDRVNTIHx8IHBhc3N3b3JkID09IE5VTEwpIHsKIAlpZiAodXNlX2ZpcnN0X3Bh
c3MpIHsKIAkgICAgcGFtX2Fmc19zeXNsb2coTE9HX0VSUiwgUEFNQUZTX1BBU1NXRF9SRVEsIHVz
ZXIpOwogCSAgICBSRVQoUEFNX0FVVEhfRVJSKTsKIAl9CiAJcGFzc3dvcmQgPSBOVUxMOwkvKiBJ
biBjYXNlIGl0IGlzbid0IGFscmVhZHkgTlVMTCAqLwotCXBhbV9hZnNfc3lzbG9nKExPR19ERUJV
RywgUEFNQUZTX05PRklSU1RQQVNTLCB1c2VyKTsKKwlpZiAobG9nbWFzayAmJiBMT0dfTUFTSyhM
T0dfREVCVUcpKQorCSAgcGFtX2Fmc19zeXNsb2coTE9HX0RFQlVHLCBQQU1BRlNfTk9GSVJTVFBB
U1MsIHVzZXIpOwogICAgIH0gZWxzZSBpZiAocGFzc3dvcmRbMF0gPT0gJ1wwJykgewogCS8qIEFj
dHVhbGx5IHdlICpkaWQqIGdldCBvbmUgYnV0IGl0IHdhcyBlbXB0eS4gKi8KIAl0b3JjaF9wYXNz
d29yZCA9IDA7CiAJcGFtX2Fmc19zeXNsb2coTE9HX0lORk8sIFBBTUFGU19OSUxQQVNTV09SRCwg
dXNlcik7CiAJUkVUKFBBTV9ORVdfQVVUSFRPS19SRVFEKTsKICAgICB9IGVsc2UgeworICAgICAg
aWYgKGxvZ21hc2sgJiYgTE9HX01BU0soTE9HX0RFQlVHKSkKIAlwYW1fYWZzX3N5c2xvZyhMT0df
REVCVUcsIFBBTUFGU19HT1RQQVNTLCB1c2VyKTsKLQl0b3JjaF9wYXNzd29yZCA9IDA7Ci0JZ290
X2F1dGh0b2sgPSAxOworICAgICAgdG9yY2hfcGFzc3dvcmQgPSAwOworICAgICAgZ290X2F1dGh0
b2sgPSAxOwogICAgIH0KICAgICBpZiAoISh1c2VfZmlyc3RfcGFzcyB8fCB0cnlfZmlyc3RfcGFz
cykpIHsKIAlwYXNzd29yZCA9IE5VTEw7CkBAIC0yMTEsMTUgKzI2OSwzMCBAQAogICAgICAgICAg
KiB0aGlzIHN0b3JhZ2UsIGNvcHkgaXQgdG8gYSBidWZmZXIgdGhhdCB3b24ndCBuZWVkIHRvIGJl
IGZyZWVkCiAgICAgICAgICAqIGxhdGVyLCBhbmQgZnJlZSB0aGlzIHN0b3JhZ2Ugbm93LgogICAg
ICAgICAgKi8KKwogICAgICAgICBzdHJuY3B5KG15X3Bhc3N3b3JkX2J1ZiwgcGFzc3dvcmQsIHNp
emVvZihteV9wYXNzd29yZF9idWYpKTsKICAgICAgICAgbXlfcGFzc3dvcmRfYnVmW3NpemVvZiht
eV9wYXNzd29yZF9idWYpLTFdID0gJ1wwJzsKICAgICAgICAgbWVtc2V0KHBhc3N3b3JkLCAwLCBz
dHJsZW4ocGFzc3dvcmQpKTsKICAgICAgICAgZnJlZShwYXNzd29yZCk7CiAgICAgICAgIHBhc3N3
b3JkID0gbXlfcGFzc3dvcmRfYnVmOwogCisgICAgfQogCisgICAgLyogQmUgc3VyZSB0byBhbGxv
Y2F0ZSBhIFBBRyBoZXJlIGlmIHdlIHNob3VsZCBzZXQgYSB0b2tlbiwKKyAgICAgKiBBbGwgb2Yg
dGhlIHJlbWFpbmluZyBzdHVmZiB0byBhdXRoZW50aWNhdGUgdGhlIHVzZXIgYW5kIHRvCisgICAg
ICogZ2V0IGEgdG9rZW4gaXMgZG9uZSBpbiBhIGNoaWxkIHByb2Nlc3MgLSBpZiBub3Qgc3VwcHJl
c3NlZCBieSB0aGUgY29uZmlnLAorICAgICAqIHNlZSBiZWxvdworICAgICAqIEJ1dCBkb250IGdl
dCBhIFBBRyBpZiB0aGUgcmVmcmVzaF90b2tlbiBvcHRpb24gd2FzIHNldAorICAgICAqIFdlIGhh
dmUgdG8gZG8gdGhpcyBpbiBzdWNoIGEgd2F5IGJlY2F1c2Ugc29tZQorICAgICAqIGFwcHMgKHN1
Y2ggYXMgc2NyZWVuc2F2ZXJzKSB3b250IGNhbGwgc2V0Y3JlZCBidXQgYXV0aGVudGljYXRlIDot
KAorICAgICAqLworICAgIGlmICghcmVmcmVzaF90b2tlbikgeworICAgICAgIHNldHBhZygpOwor
ICAgICAgIGlmIChsb2dtYXNrICYmIExPR19NQVNLKExPR19ERUJVRykpCisJIHN5c2xvZyhMT0df
REVCVUcsICJOZXcgUEFHIGNyZWF0ZWQgaW4gcGFtX2F1dGhlbnRpY2F0ZSgpIik7CiAgICAgfQog
CisgICAgaWYgKCFkb250X2ZvcmspIHsKICAgICAvKiBQcmVwYXJlIGZvciBmb3JrKCk6IHNldCBT
SUdDSExEIHNpZ25hbCBoYW5kbGVyIHRvIGRlZmF1bHQgKi8KICAgICBzaWdlbXB0eXNldCgmbmV3
QWN0aW9uLnNhX21hc2spOwogICAgIG5ld0FjdGlvbi5zYV9oYW5kbGVyICAgPSBTSUdfREZMOwpA
QCAtMjM0LDkgKzMwNywzNSBAQAogICAgICAqIG1lbW9yeS9zb2NrZXRzIGFsbG9jYXRlZCB3aWxs
IGdldCBjbGVhbmVkIHVwIHdoZW4gdGhlIGNoaWxkCiAgICAgICogZXhpdHM6IGRlZmVjdCAxMTY4
Ni4KICAgICAgKi8KKwlpZiAodXNlX2tsb2cpIHsgLyogdXNlZCBieSBrZG0gMi54ICovCisJICAg
aWYgKHJlZnJlc2hfdG9rZW4gfHwgc2V0X3Rva2VuKSB7CisJICAgICAgaSA9IGRvX2tsb2codXNl
ciwgcGFzc3dvcmQsIE5VTEwpOworCSAgIH0gZWxzZSB7CisJICAgICAgaSA9IGRvX2tsb2codXNl
ciwgcGFzc3dvcmQsICIwMDowMDowMSIpOworCSAgICAgIGt0Y19Gb3JnZXRBbGxUb2tlbnMoKTsK
KyAgICAgICAgICAgfQorCSAgIGlmIChsb2dtYXNrICYmIExPR19NQVNLKExPR19ERUJVRykpCisJ
ICAgICBzeXNsb2coTE9HX0RFQlVHLCAiZG9fa2xvZyByZXR1cm5lZCAlZCIsIGkpOworCSAgIGF1
dGhfb2sgPSBpID8gMCA6IDE7CisJfSBlbHNlIHsKKwkgIGlmIChsb2dtYXNrICYmIExPR19NQVNL
KExPR19ERUJVRykpCisJICAgIHN5c2xvZyhMT0dfREVCVUcsICJmb3JraW5nIC4uLiIpOwogICAg
IGNwaWQgPSBmb3JrKCk7CiAgICAgaWYgKGNwaWQgPD0gMCkgeyAgICAgLyogVGhlIGNoaWxkIHBy
b2Nlc3MgKi8KLSAgICAgICBjb2RlID0ga2FfVmVyaWZ5VXNlclBhc3N3b3JkKEtBX1VTRVJBVVRI
X1ZFUlNJT04gKyBLQV9VU0VSQVVUSF9ET1NFVFBBRywKKyAgICAgIGlmIChsb2dtYXNrICYmIExP
R19NQVNLKExPR19ERUJVRykpCisJc3lzbG9nKExPR19ERUJVRywgImluIGNoaWxkIik7CisgICAg
ICAgICAgICAgIGlmIChyZWZyZXNoX3Rva2VuIHx8IHNldF90b2tlbikKKyAgICAgICAgICAgICAg
ICAgY29kZSA9IGthX1VzZXJBdXRoZW50aWNhdGVHZW5lcmFsKEtBX1VTRVJBVVRIX1ZFUlNJT04s
CisJCQkJICAgIHVzZXIsIC8qIGtlcmJlcm9zIG5hbWUgKi8KKwkJCQkgICAgKGNoYXIgKikwLCAv
KiBpbnN0YW5jZSAqLworCQkJCSAgICAoY2hhciAqKTAsIC8qIHJlYWxtICovCisJCQkJICAgIHBh
c3N3b3JkLCAvKiBwYXNzd29yZCAqLworCQkJCSAgICAwLCAvKiBkZWZhdWx0IGxpZmV0aW1lICov
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFzc3dvcmRfZXhwaXJlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIHNwYXJlIDIgKi8KKwkJ
CQkgICAgJnJlYXNvbiAvKiBlcnJvciBzdHJpbmcgKi8gKTsKKyAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICBjb2RlID0ga2FfVmVyaWZ5VXNlclBhc3N3b3JkKEtBX1VTRVJBVVRI
X1ZFUlNJT04sCiAJCQkJICAgIHVzZXIsIC8qIGtlcmJlcm9zIG5hbWUgKi8KIAkJCQkgICAgKGNo
YXIgKikwLCAvKiBpbnN0YW5jZSAqLwogCQkJCSAgICAoY2hhciAqKTAsIC8qIHJlYWxtICovCkBA
IC0yNDksOSArMzQ4LDEzIEBACiAgICAgICAgfSBlbHNlIHsKIAkgIGF1dGhfb2sgPSAxOwogICAg
ICAgIH0KKyAgICAgICBpZiAobG9nbWFzayAmJiBMT0dfTUFTSyhMT0dfREVCVUcpKQorCSBzeXNs
b2coTE9HX0RFQlVHLCAiY2hpbGQ6IGF1dGhfb2s9JWQiLCBhdXRoX29rKTsKICAgICAgICBpZiAo
Y3BpZCA9PSAwKSBleGl0KGF1dGhfb2spOwogICAgIH0gZWxzZSB7CiAgICAgICAgZG8geworCSBp
ZiAobG9nbWFzayAmJiBMT0dfTUFTSyhMT0dfREVCVUcpKQorCSAgIHN5c2xvZyhMT0dfREVCVUcs
ICJpbiBwYXJlbnQsIHdhaXRpbmcgLi4uIik7CiAJICByY3BpZCA9IHdhaXRwaWQoY3BpZCwgJnN0
YXR1cywgMCk7CiAgICAgICAgfSB3aGlsZSAoKHJjcGlkID09IC0xKSAmJiAoZXJybm8gPT0gRUlO
VFIpKTsKIAkKQEAgLTI2MCwxMyArMzYzLDQ3IEBACiAgICAgICAgfSBlbHNlIHsKIAkgIGF1dGhf
b2sgPSAwOwogICAgICAgIH0KKyAgICAgICBpZiAobG9nbWFzayAmJiBMT0dfTUFTSyhMT0dfREVC
VUcpKQorCSBzeXNsb2coTE9HX0RFQlVHLCAicGFyZW50OiBhdXRoX29rPSVkIiwgYXV0aF9vayk7
CisgICAgICAgICAgIH0KICAgICB9Ci0KICAgICAvKiBSZXN0b3JlIG9sZCBzaWduYWwgaGFuZGxl
ciAqLwogICAgIGNvZGUgPSBzaWdhY3Rpb24oU0lHQ0hMRCwgJm9yaWdBY3Rpb24sIChzdHJ1Y3Qg
c2lnYWN0aW9uICopMCk7CiAgICAgaWYgKGNvZGUpIHsKICAgICAgICBwYW1fYWZzX3N5c2xvZyhM
T0dfRVJSLCBQQU1BRlNfUEFNRVJST1IsIGVycm5vKTsKICAgICB9CisgICAgfSBlbHNlIHsgLyog
ZG9udF9mb3JrLCB1c2VkIGJ5IGh0dHBkICovCisgICAgICBpZiAobG9nbWFzayAmJiBMT0dfTUFT
SyhMT0dfREVCVUcpKQorICAgICAgICBzeXNsb2coTE9HX0RFQlVHLCAiZG9udF9mb3JrIik7Cisg
ICAgICAgIGlmIChyZWZyZXNoX3Rva2VuIHx8IHNldF90b2tlbikKKyAgICAgICAgICAgIGNvZGUg
PSBrYV9Vc2VyQXV0aGVudGljYXRlR2VuZXJhbChLQV9VU0VSQVVUSF9WRVJTSU9OLAorCQkJCSAg
ICB1c2VyLCAvKiBrZXJiZXJvcyBuYW1lICovCisJCQkJICAgIChjaGFyICopMCwgLyogaW5zdGFu
Y2UgKi8KKwkJCQkgICAgKGNoYXIgKikwLCAvKiByZWFsbSAqLworCQkJCSAgICBwYXNzd29yZCwg
LyogcGFzc3dvcmQgKi8KKwkJCQkgICAgMCwgLyogZGVmYXVsdCBsaWZldGltZSAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhc3N3b3JkX2V4cGlyZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiBzcGFyZSAyICovCisJCQkJICAgICZy
ZWFzb24gLyogZXJyb3Igc3RyaW5nICovICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNv
ZGUgPSBrYV9WZXJpZnlVc2VyUGFzc3dvcmQoS0FfVVNFUkFVVEhfVkVSU0lPTiwKKwkJCQkgICAg
dXNlciwgLyoga2VyYmVyb3MgbmFtZSAqLworCQkJCSAgICAoY2hhciAqKTAsIC8qIGluc3RhbmNl
ICovCisJCQkJICAgIChjaGFyICopMCwgLyogcmVhbG0gKi8KKwkJCQkgICAgcGFzc3dvcmQsIC8q
IHBhc3N3b3JkICovCisJCQkJICAgIDAsIC8qIHNwYXJlIDIgKi8KKwkJCQkgICAgJnJlYXNvbiAv
KiBlcnJvciBzdHJpbmcgKi8gKTsKKwlpZiAobG9nbWFzayAmJiBMT0dfTUFTSyhMT0dfREVCVUcp
KQorCSAgc3lzbG9nKExPR19ERUJVRywgImRvbnRfZm9yaywgY29kZSA9ICVkIixjb2RlKTsKKyAg
ICAgICAgaWYgKGNvZGUpIHsKKwkgICAgcGFtX2Fmc19zeXNsb2coTE9HX0VSUiwgUEFNQUZTX0xP
R0lOX0ZBSUxFRCwgdXNlciwgcmVhc29uKTsKKwkgICAgYXV0aF9vayA9IDA7CisgICAgICAgIH0g
ZWxzZSB7CisJICAgIGF1dGhfb2sgPSAxOworICAgICAgICB9CisJaWYgKGxvZ21hc2sgJiYgTE9H
X01BU0soTE9HX0RFQlVHKSkKKwkgIHN5c2xvZyhMT0dfREVCVUcsICJkb250X2Zvcms6IGF1dGhf
b2s9JWQiLCBhdXRoX29rKTsKKyAgICB9CiAKICAgICBpZiAoIWF1dGhfb2sgJiYgdHJ5X2ZpcnN0
X3Bhc3MpIHsKIAlwYXNzd29yZCA9IE5VTEw7CkBAIC0yNzQsMTEgKzQxMSwxOCBAQAogICAgIH0K
IAogICAgIC8qIFdlIGRvbid0IGNhcmUgaWYgdGhpcyBmYWlsczsgYWxsIHdlIGNhbiBkbyBpcyB0
cnkuICovCi0gICAgaWYgKGF1dGhfb2sgJiYgIWdvdF9hdXRodG9rKSB7CisgICAgLyogSXQgaXMg
bm90IHJlYXNvbmFibGUgdG8gc3RvcmUgdGhlIHBhc3N3b3JkIG9ubHkgaWYgaXQgd2FzIGNvcnJl
Y3QKKyAgICAgKiBiZWNhdXNlIGl0IGNvdWxkIHNhdGlzZnkgYW5vdGhlciBtb2R1bGUgdGhhdCBp
cyBjYWxsZWQgaW4gdGhlIGNoYWluCisgICAgICogYWZ0ZXIgcGFtX2FmcworICAgICAqLworICAg
IGlmICghZ290X2F1dGh0b2spIHsKIAl0b3JjaF9wYXNzd29yZCA9IDA7Ci0gICAgICAgIHBhbV9z
ZXRfaXRlbShwYW1oLCBQQU1fQVVUSFRPSywgcGFzc3dvcmQpOworICAgICAgICAodm9pZCkgcGFt
X3NldF9pdGVtKHBhbWgsIFBBTV9BVVRIVE9LLCBwYXNzd29yZCk7CiAgICAgfQogCisgICAgaWYg
KGxvZ21hc2sgJiYgTE9HX01BU0soTE9HX0RFQlVHKSkKKyAgICAgIHN5c2xvZyhMT0dfREVCVUcs
ICJsZWF2aW5nIGF1dGg6IGF1dGhfb2s9JWQiLCBhdXRoX29rKTsKKyAgICBpZiAoY29kZSA9PSBL
QU5PRU5UKSBSRVQoUEFNX1VTRVJfVU5LTk9XTik7CiAgICAgUkVUKGF1dGhfb2sgPyBQQU1fU1VD
Q0VTUyA6IFBBTV9BVVRIX0VSUik7CiAJCiAgb3V0OgpkaWZmIC11ck4gb3BlbmFmcy0xLjEuMS5v
cmlnL3NyYy9wYW0vYWZzX21lc3NhZ2UuYyBvcGVuYWZzLTEuMS4xL3NyYy9wYW0vYWZzX21lc3Nh
Z2UuYwotLS0gb3BlbmFmcy0xLjEuMS5vcmlnL3NyYy9wYW0vYWZzX21lc3NhZ2UuYwlXZWQgQXVn
ICA4IDEzOjQxOjIzIDIwMDEKKysrIG9wZW5hZnMtMS4xLjEvc3JjL3BhbS9hZnNfbWVzc2FnZS5j
CVdlZCBBdWcgIDggMTM6NDE6NTcgMjAwMQpAQCAtNDAsMTMgKzQwLDEzIEBACiAgICAgIkFGUyBu
b3QgYXZhaWxhYmxlIiwJCQkvKiAxMDogQUZTX1VOQVZBSUwJKi8KICAgICAiQUZTIGVycm9yIGNv
ZGUgMHgleCIsCQkJLyogMTE6IEFGU19FUlJPUgkqLwogICAgICJBRlMgQXV0aGVudGljYXRpb24g
c3VjY2VlZGVkLlxuIiwJCS8qIDEyOiBMT0dJTl9PSwkJKi8KLSAgICAiQUZTIEF1dGhlbnRpY2F0
aW9uIGZhaWxlZCBmb3IgdXNlciAlcyAlc1xuIiwKKyAgICAiQUZTIEF1dGhlbnRpY2F0aW9uIGZh
aWxlZCBmb3IgdXNlciAlcy4gJXNcbiIsCiAJCQkJCQkvKiAxMzogTE9HSU5fRkFJTEVECSovCiAg
ICAgIkFGUyBQQU0gZXJyb3IsIGNvZGU9JWQiLAkJCS8qIDE0OiBQQU1FUlJPUgkJKi8KICAgICAi
QUZTIHVpZCBleGNlZWRzIE9TIGJvdW5kcy5cbiIsCQkvKiAxNTogVUlEX09WRVJGTE9XCSovCiAg
ICAgIlRoZSBBRlMgUEFNIG1vZHVsZSBtYXkgbm90IGJlIHVzZWQgZnJvbSBhIG5vbi1NVCBwcm9n
cmFtLlxuIiwKIAkJCQkJCS8qIDE2OiBOT05fTVRfUFJPRwkqLwotICAgICJBRlMgT3B0aW9uczog
bm93YXJuPSVkLCB1c2VfZmlyc3RfcGFzcz0lZCwgdHJ5X2ZpcnN0X3Bhc3M9JWQiLAorICAgICJB
RlMgT3B0aW9uczogbm93YXJuPSVkLCB1c2VfZmlyc3RfcGFzcz0lZCwgdHJ5X2ZpcnN0X3Bhc3M9
JWQsIGlnbm9yZV91aWQgPSAlZCwgaWdub3JlX3VpZF9pZCA9ICVkLCByZWZyZXNoX3Rva2VuPSVk
LCBzZXRfdG9rZW49JWQsIGRvbnRfZm9yaz0lZCwgdXNlX2tsb2c9JWQiLAogCQkJCQkJLyogMTc6
IE9QVElPTlMJCSovCiAgICAgIkFGUyBObyBwYW1fY29udiBjb252ZXJzYXRpb24gc3RydWN0dXJl
IGZvdW5kOyBubyB1c2VyIGludGVyYWN0aW9uIiwKIAkJCQkJCS8qIDE4OiBOT19VU0VSX0lOVAkq
LwpAQCAtNjgsMTcgKzY4LDIzIEBACiAgICAgIkFGUyBSZUluaXRpYWxpemluZyBjcmVkcyBmb3Ig
dXNlciAlc1xuIiwJLyogMzE6IFJFSU5JVENSRUQJKi8KICAgICAiQUZTIEZhaWxlZCB0byBzZXQg
UEFTU1dPUkRfRVhQSVJFUyBmb3IgdXNlciAlc1xuIiwKIAkJCQkJCS8qIDMyOiBQQVNTRVhQRkFJ
TCAgICAgICovCi0gICAgIiIsCi0JCQkJCQkvKiAzMzogKi8KLSAgICAiIiwKLQkJCQkJCS8qIDM0
OiAqLwotICAgICJBRlMgYmxpbmRseSB0cnVzdGluZyB1c2VyICVzXG4iLAkJLyogMzU6IFRSVVNU
Uk9PVAkqLwotICAgICJOZXcgQUZTIFBhc3N3b3JkOiAiLCAgICAgICAgICAgICAgICAgICAgICAg
LyogMzY6IE5FV19QV0RfUFJPTVBUICAgKi8KLSAgICAiTmV3IEFGUyBQYXNzd29yZCAoYWdhaW4p
OiAiLCAgICAgICAgICAgICAgIC8qIDM3OiBWRVJJRllfUFdEX1BST01QVCAqLwotICAgICJGYWls
ZWQgdG8gY2hhbmdlIEFGUyBwYXNzd29yZCIsICAgICAgICAgICAgLyogMzg6IEtSQlBBU1NfRkFJ
TCAgICAgKi8KLSAgICAiTWlzc2luZyBQQU0gZmxhZzogJXMiLCAgICAgICAgICAgICAgICAgICAg
IC8qIDM5OiBGTEFHUyAgICAgICAgICAgICovCi0gICAgImthIGVycm9yLCBjb2RlPSVkIiwgICAg
ICAgICAgICAgICAgICAgICAgICAvKiA0MDogS0FFUlJPUiAgICAgICAgICAqLwotICAgICJQYXNz
d29yZHMgYXJlIG5vdCBlcXVhbCIgICAgICAgICAgICAgICAgICAgLyogNDE6IE5FX1BBU1NXT1JE
ICAgICAgKi8KKyAgICAiQUZTIEZhaWxlZCB0byBjaG93biBrcmIgdGlja2V0ZmlsZVxuIiwgICAg
IC8qIDMzOiBDSE9XTktSQiAgICAgICAgICovCisgICAgIkFGUyBGYWlsZWQgdG8gc2V0IEtSQlRL
VEZJTEVcbiIsICAgICAgICAgICAvKiAzNDogS1JCRkFJTCAgICAgICAgICAqLworICAgICJBRlMg
VW5rbm93biByZW1haW5pbmcgbGlmZXRpbWUgJXMgdXNpbmcgZGVmYXVsdCAlZCBzZWNvbmRzXG4i
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzU6
IFJFTUFJTkxJRkVUSU1FICAgKi8KKyAgICAiQUZTIFNlc3Npb24gY2xvc2VkIiwgICAgICAgICAg
ICAgICAgICAgICAgIC8qIDM2OiBTRVNTSU9OQ0xPU0VEMSAgICovCisgICAgIkFGUyBTZXNzaW9u
IGNsb3NlZCwgVG9rZW5zIGRlc3Ryb3llZFxuIiwgICAvKiAzNzogU0VTU0lPTkNMT1NFRDIgICAq
LworICAgICJBRlMgT3B0aW9uIGNvbmZsaWN0IGRvbnRfZm9yayBhbmQgdXNlX2tsb2c6ICVzXG4i
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzg6
IENPTkZMSUNUT1BUICAgICAgKi8KKyAgICAiQUZTIFVua25vd24gdWlkOiAlcywgb3B0aW9uIGln
bm9yZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvKiAzOTogSUdOT1JFVUlEICAgICAgICAqLworICAgICJOZXcgQUZTIFBhc3N3b3JkOiAiLCAg
ICAgICAgICAgICAgICAgICAgICAgLyogNDA6IE5FV19QV0RfUFJPTVBUICAgKi8KKyAgICAiTmV3
IEFGUyBQYXNzd29yZCAoYWdhaW4pOiAiLCAgICAgICAgICAgICAgIC8qIDQxOiBWRVJJRllfUFdE
X1BST01QVCAqLworICAgICJGYWlsZWQgdG8gY2hhbmdlIEFGUyBwYXNzd29yZCIsICAgICAgICAg
ICAgLyogNDI6IEtSQlBBU1NfRkFJTCAgICAgKi8KKyAgICAiTWlzc2luZyBQQU0gZmxhZzogJXMi
LCAgICAgICAgICAgICAgICAgICAgIC8qIDQzOiBGTEFHUyAgICAgICAgICAgICovCisgICAgImth
IGVycm9yLCBjb2RlPSVkIiwgICAgICAgICAgICAgICAgICAgICAgICAvKiA0NDogS0FFUlJPUiAg
ICAgICAgICAqLworICAgICJQYXNzd29yZHMgYXJlIG5vdCBlcXVhbCIsICAgICAgICAgICAgICAg
ICAgLyogNDU6IE5FX1BBU1NXT1JEICAgICAgKi8KKyAgICAiQUZTIGlnbm9yaW5nIHVucmVnaXN0
ZXJlZCB1c2VyICVzXG4iICAgICAgIC8qIDQ2OiBJR05PUkVfVU5SRUcgICAgICovCiB9OwogCiBz
dGF0aWMgaW50IG51bV9mYWxsYmFja3MgPSBzaXplb2YoZmFsbGJhY2tfbWVzc2FnZXMpL3NpemVv
ZihjaGFyICopOwpkaWZmIC11ck4gb3BlbmFmcy0xLjEuMS5vcmlnL3NyYy9wYW0vYWZzX21lc3Nh
Z2UuaCBvcGVuYWZzLTEuMS4xL3NyYy9wYW0vYWZzX21lc3NhZ2UuaAotLS0gb3BlbmFmcy0xLjEu
MS5vcmlnL3NyYy9wYW0vYWZzX21lc3NhZ2UuaAlXZWQgQXVnICA4IDEzOjQxOjIzIDIwMDEKKysr
IG9wZW5hZnMtMS4xLjEvc3JjL3BhbS9hZnNfbWVzc2FnZS5oCVdlZCBBdWcgIDggMTM6NDE6NTcg
MjAwMQpAQCAtNDUsMTMgKzQ1LDE5IEBACiAjZGVmaW5lIFBBTUFGU19QQVNTRVhQRkFJTAkzMiAv
KiAiRmFpbGVkIHRvIHNldCBQQVNTV09SRF9FWFBJUkVTIiAgKi8KICNkZWZpbmUgUEFNQUZTX0NI
T1dOS1JCCQkzMyAvKiAiRmFpbGVkIHRvIGNob3duIGtyYiB0aWNrZXRmaWxlIiAgKi8KICNkZWZp
bmUgUEFNQUZTX0tSQkZBSUwJCTM0IC8qICJGYWlsZWQgdG8gc2V0IEtSQlRLVEZJTEUiICAgICAg
ICAqLwotI2RlZmluZSBQQU1BRlNfVFJVU1RST09UCTM1IC8qICJJZ25vcmluZyBzdXBlcnVzZXIg
JXMiCQkqLwotI2RlZmluZSBQQU1BRlNfTkVXX1BXRF9QUk9NUFQgICAzNiAvKiAiTmV3IEFGUyBQ
YXNzd29yZDoiICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUEFNQUZTX1ZFUklGWV9QV0RfUFJP
TVBUICAzNyAvKiAiTmV3IEFGUyBQYXNzd29yZCAoYWdhaW4pOiIgICAgICovCi0jZGVmaW5lIFBB
TUFGU19LQVBBU1NfRkFJTCAgICAgIDM4IC8qICJGYWlsZWQgdG8gY2hhbmdlIEFGUyBwYXNzd29y
ZCIgICAqLwotI2RlZmluZSBQQU1BRlNfRkxBR1MgICAgICAgICAgICAzOSAvKiAiTWlzc2luZyBQ
QU0gZmxhZzoiICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUEFNQUZTX0tBRVJST1IgICAgICAg
ICAgNDAgLyogImthIGVycm9yLCBjb2RlPSVkIiAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFBB
TUFGU19ORV9QQVNTV09SRCAgICAgIDQxIC8qICJQYXNzd29yZHMgYXJlIG5vdCBlcXVhbCIgICAg
ICAgICAqLyAgCisjZGVmaW5lIFBBTUFGU19SRU1BSU5MSUZFVElNRSAgIDM1IC8qICJVbmtub3du
IHJlbWFpbmluZyBsaWZldGltZSIgICAgICAqLworI2RlZmluZSBQQU1BRlNfU0VTU0lPTkNMT1NF
RDEgICAzNiAvKiAiU2Vzc2lvbiBjbG9zZWQiICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUg
UEFNQUZTX1NFU1NJT05DTE9TRUQyICAgMzcgLyogIlNlc3Npb24gY2xvc2VkLCBUb2tlbnMgZGVz
dHJveWVkIiovCisjZGVmaW5lIFBBTUFGU19DT05GTElDVE9QVCAgICAgIDM4IC8qICJPcHRpb24g
Y29uZmxpY3QiICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQU1BRlNfSUdOT1JFVUlEICAg
ICAgICAzOSAvKiAiVW5rbm93biB1aWQiICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUg
UEFNQUZTX05FV19QV0RfUFJPTVBUICAgNDAgLyogIk5ldyBBRlMgUGFzc3dvcmQ6IiAgICAgICAg
ICAgICAgICovCisjZGVmaW5lIFBBTUFGU19WRVJJRllfUFdEX1BST01QVCAgNDEgLyogIk5ldyBB
RlMgUGFzc3dvcmQgKGFnYWluKToiICAgICAqLworI2RlZmluZSBQQU1BRlNfS0FQQVNTX0ZBSUwg
ICAgICA0MiAvKiAiRmFpbGVkIHRvIGNoYW5nZSBBRlMgcGFzc3dvcmQiICAgKi8KKyNkZWZpbmUg
UEFNQUZTX0ZMQUdTICAgICAgICAgICAgNDMgLyogIk1pc3NpbmcgUEFNIGZsYWc6IiAgICAgICAg
ICAgICAgICovCisjZGVmaW5lIFBBTUFGU19LQUVSUk9SICAgICAgICAgIDQ0IC8qICJrYSBlcnJv
ciwgY29kZT0lZCIgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQU1BRlNfTkVfUEFTU1dPUkQg
ICAgICA0NSAvKiAiUGFzc3dvcmRzIGFyZSBub3QgZXF1YWwiICAgICAgICAgKi8KKyNkZWZpbmUg
UEFNQUZTX0lHTk9SRV9VTlJFRyAgICAgNDYgLyogIkFGUyBpZ25vcmluZyB1bnJlZ2lzdGVyZWQg
dXNlciIgICovCisKIAogY2hhciAqcGFtX2Fmc19tZXNzYWdlKGludCBtc2dudW0sIGludCAqZnJl
ZWl0KTsKIHZvaWQgcGFtX2Fmc19zeXNsb2coaW50IHByaW9yaXR5LCBpbnQgbXNnaWQsIC4uLik7
CmRpZmYgLXVyTiBvcGVuYWZzLTEuMS4xLm9yaWcvc3JjL3BhbS9hZnNfcGFzc3dvcmQuYyBvcGVu
YWZzLTEuMS4xL3NyYy9wYW0vYWZzX3Bhc3N3b3JkLmMKLS0tIG9wZW5hZnMtMS4xLjEub3JpZy9z
cmMvcGFtL2Fmc19wYXNzd29yZC5jCVdlZCBBdWcgIDggMTM6NDE6MjMgMjAwMQorKysgb3BlbmFm
cy0xLjEuMS9zcmMvcGFtL2Fmc19wYXNzd29yZC5jCVdlZCBBdWcgMTUgMDk6MTY6NDkgMjAwMQpA
QCAtOTMsOCArOTMsMTEgQEAKIAogICAgIGlmICh1c2VfZmlyc3RfcGFzcykgdHJ5X2ZpcnN0X3Bh
c3MgPSAwOwogCi0gICAgcGFtX2Fmc19zeXNsb2coTE9HX0RFQlVHLCBQQU1BRlNfT1BUSU9OUywg
bm93YXJuLCB1c2VfZmlyc3RfcGFzcywgdHJ5X2ZpcnN0X3Bhc3MpOwotICAgIHBhbV9hZnNfc3lz
bG9nKExPR19ERUJVRywgUEFNQUZTX1BBTUVSUk9SLCBmbGFncyk7CisgICAgaWYgKGxvZ21hc2sg
JiYgTE9HX01BU0soTE9HX0RFQlVHKSkKKyAgICAgIHsKKwlwYW1fYWZzX3N5c2xvZyhMT0dfREVC
VUcsIFBBTUFGU19PUFRJT05TLCBub3dhcm4sIHVzZV9maXJzdF9wYXNzLCB0cnlfZmlyc3RfcGFz
cyk7CisJcGFtX2Fmc19zeXNsb2coTE9HX0RFQlVHLCBQQU1BRlNfUEFNRVJST1IsIGZsYWdzKTsK
KyAgICAgIH0KIAogICAgIC8qIFRyeSB0byBnZXQgdGhlIHVzZXItaW50ZXJhY3Rpb24gaW5mbywg
aWYgYXZhaWxhYmxlLiAqLwogICAgIGVycmNvZGUgPSBwYW1fZ2V0X2l0ZW0ocGFtaCwgUEFNX0NP
TlYsIChjb25zdCB2b2lkICoqKSAmcGFtX2NvbnZwKTsKQEAgLTEwOSw3ICsxMTIsOCBAQAogCVJF
VChQQU1fVVNFUl9VTktOT1dOKTsKICAgICB9CiAKLSAgICBwYW1fYWZzX3N5c2xvZyhMT0dfREVC
VUcsIFBBTUFGU19VU0VSTkFNRURFQlVHLCB1c2VyKTsKKyAgICBpZiAobG9nbWFzayAmJiBMT0df
TUFTSyhMT0dfREVCVUcpKQorICAgICAgcGFtX2Fmc19zeXNsb2coTE9HX0RFQlVHLCBQQU1BRlNf
VVNFUk5BTUVERUJVRywgdXNlcik7CiAKICAgICAvKgogICAgICAqIElmIHRoZSB1c2VyIGhhcyBh
ICJsb2NhbCIgKG9yIHZpYSBuc3MsIHBvc3NpYmx5IG5zc19kY2UpIHB3ZW50LApAQCAtMTQ3LDEz
ICsxNTEsMTUgQEAKIAkgICAgUkVUKFBBTV9BVVRIX0VSUik7CiAJfQogCXBhc3N3b3JkID0gTlVM
TDsJLyogSW4gY2FzZSBpdCBpc24ndCBhbHJlYWR5IE5VTEwgKi8KLQlwYW1fYWZzX3N5c2xvZyhM
T0dfREVCVUcsIFBBTUFGU19OT0ZJUlNUUEFTUywgdXNlcik7CisJaWYgKGxvZ21hc2sgJiYgTE9H
X01BU0soTE9HX0RFQlVHKSkKKwkgIHBhbV9hZnNfc3lzbG9nKExPR19ERUJVRywgUEFNQUZTX05P
RklSU1RQQVNTLCB1c2VyKTsKICAgICB9IGVsc2UgaWYgKHBhc3N3b3JkWzBdID09ICdcMCcpIHsK
IAkvKiBBY3R1YWxseSB3ZSAqZGlkKiBnZXQgb25lIGJ1dCBpdCB3YXMgZW1wdHkuICovCiAJdG9y
Y2hfcGFzc3dvcmQgPSAwOwogCXBhbV9hZnNfc3lzbG9nKExPR19JTkZPLCBQQU1BRlNfTklMUEFT
U1dPUkQsIHVzZXIpOwogCVJFVChQQU1fTkVXX0FVVEhUT0tfUkVRRCk7CiAgICAgfSBlbHNlIHsK
KyAgICAgIGlmIChsb2dtYXNrICYmIExPR19NQVNLKExPR19ERUJVRykpCiAJcGFtX2Fmc19zeXNs
b2coTE9HX0RFQlVHLCBQQU1BRlNfR09UUEFTUywgdXNlcik7CiAJdG9yY2hfcGFzc3dvcmQgPSAw
OwogCWdvdF9hdXRodG9rID0gMTsKZGlmZiAtdXJOIG9wZW5hZnMtMS4xLjEub3JpZy9zcmMvcGFt
L2Fmc19zZXNzaW9uLmMgb3BlbmFmcy0xLjEuMS9zcmMvcGFtL2Fmc19zZXNzaW9uLmMKLS0tIG9w
ZW5hZnMtMS4xLjEub3JpZy9zcmMvcGFtL2Fmc19zZXNzaW9uLmMJV2VkIEF1ZyAgOCAxMzo0MToy
MyAyMDAxCisrKyBvcGVuYWZzLTEuMS4xL3NyYy9wYW0vYWZzX3Nlc3Npb24uYwlXZWQgQXVnIDE1
IDA5OjE4OjUwIDIwMDEKQEAgLTE0LDYgKzE0LDEzIEBACiAKICNpbmNsdWRlIDxzZWN1cml0eS9w
YW1fYXBwbC5oPgogI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9tb2R1bGVzLmg+CisjaW5jbHVkZSA8
c3lzbG9nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJhZnNfbWVzc2Fn
ZS5oIgorI2luY2x1ZGUgImFmc191dGlsLmgiCiAKIGV4dGVybiBpbnQKIHBhbV9zbV9vcGVuX3Nl
c3Npb24oCkBAIC0yNiw2ICszMyw4IEBACiB9CiAKIAorI2RlZmluZSBSRU1BSU5MSUZFVElNRSAz
MDAKKwogZXh0ZXJuIGludAogcGFtX3NtX2Nsb3NlX3Nlc3Npb24oCiAJcGFtX2hhbmRsZV90CSpw
YW1oLApAQCAtMzMsNSArNDIsNjggQEAKIAlpbnQJCWFyZ2MsCiAJY29uc3QgY2hhcgkqKmFyZ3Yp
CiB7CisgICAgaW50IGk7CisgICAgaW50IGxvZ21hc2sgPSBMT0dfVVBUTyhMT0dfSU5GTyk7Cisg
ICAgaW50IG9yaWdtYXNrOworICAgIGludCByZW1haW4gPSAwOworICAgIGludCByZW1haW5saWZl
dGltZSA9IFJFTUFJTkxJRkVUSU1FOworICAgIGludCBub191bmxvZyA9IDA7CisKKyAgICBvcGVu
bG9nKHBhbV9hZnNfaWRlbnQsIExPR19DT05TfExPR19QSUQsIExPR19BVVRIKTsKKyAgICBvcmln
bWFzayA9IHNldGxvZ21hc2sobG9nbWFzayk7CisKKyAgICAvKgorICAgICAqIFBhcnNlIHRoZSB1
c2VyIG9wdGlvbnMuICBMb2cgYW4gZXJyb3IgZm9yIGFueSB1bmtub3duIG9wdGlvbnMuCisgICAg
ICovCisgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworICAgICAgICBpZiAoICAgICAg
IHN0cmNhc2VjbXAoYXJndltpXSwgImRlYnVnIiAgICAgICAgICkgPT0gMCkgeworICAgICAgICAg
ICAgbG9nbWFzayB8PSBMT0dfTUFTSyhMT0dfREVCVUcpOworICAgICAgICAgICAgKHZvaWQpIHNl
dGxvZ21hc2sobG9nbWFzayk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2W2ld
LCAicmVtYWluIiAgICAgICAgKSA9PSAwKSB7CisgICAgICAgICAgICByZW1haW4gPSAxOworICAg
ICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndltpXSwgInJlbWFpbmxpZmV0aW1lIikgPT0g
MCkgeworICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgcmVtYWluID0gMTsKKyAgICAgICAg
ICAgIHJlbWFpbmxpZmV0aW1lID0gKGludCkgc3RydG9sKGFyZ3ZbaV0sIChjaGFyKiopTlVMTCwg
MTApOworICAgICAgICAgICAgaWYgKHJlbWFpbmxpZmV0aW1lID09IDApCisgICAgICAgICAgICAg
ICAgaWYoKGVycm5vID09IEVJTlZBTCkgfHwgKGVycm5vID09IEVSQU5HRSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmVtYWlubGlmZXRpbWUgPSBSRU1BSU5MSUZFVElNRTsKKyAgICAgICAgICAg
ICAgICAgICAgcGFtX2Fmc19zeXNsb2coTE9HX0VSUiwgUEFNQUZTX1JFTUFJTkxJRkVUSU1FLCBh
cmd2W2ldLCBSRU1BSU5MSUZFVElNRSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgbm9fdW5sb2cgPSAwOworICAgICAgICAgICAgICAgICAgICByZW1haW4g
PSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYXJndltp
XSwgIm5vX3VubG9nIikgPT0gMCkgeworICAgICAgICAgICAgICAgIG5vX3VubG9nID0gMTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhbV9hZnNfc3lzbG9nKExPR19FUlIsIFBBTUFG
U19VTktOT1dOT1BULCBhcmd2W2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAKKyAgICBp
ZiAobG9nbWFzayAmJiBMT0dfTUFTSyhMT0dfREVCVUcpKQorICAgICAgc3lzbG9nKExPR19ERUJV
RywgInBhbV9hZnNfc2Vzc2lvbl9jbG9zZTogcmVtYWluOiAlZCwgcmVtYWlubGlmZXRpbWU6ICVk
LCBub191bmxvZzogJWQiLHJlbWFpbixyZW1haW5saWZldGltZSxub191bmxvZyk7CisgICAgaWYo
cmVtYWluICYmICFub191bmxvZykgeworICAgICAgICBzd2l0Y2ggKGZvcmsoKSkgeworICAgICAg
ICAgICAgY2FzZSAtMSA6IC8qIGVycm9yICovCisgICAgICAgICAgICAgICAgIHJldHVybihQQU1f
U0VTU0lPTl9FUlIpOworICAgICAgICAgICAgY2FzZSAwICA6IC8qIGNoaWxkICovCisjaWZkZWYg
QUZTX0xJTlVYMjBfRU5WIAorCQkgc2V0cGdycCgpOworI2VuZGlmCisgICAgICAgICAgICAgICAg
IHNldHNpZCgpOworCQkgZm9yIChpID0gMDsgaSA8NjQ7IGkrKykgY2xvc2UgKGkpOworICAgICAg
ICAgICAgICAgICBzbGVlcChyZW1haW5saWZldGltZSk7CisgICAgICAgICAgICAgICAgIGt0Y19G
b3JnZXRBbGxUb2tlbnMoKTsKKyAgICAgICAgICAgICAgICAgcGFtX2Fmc19zeXNsb2coTE9HX0lO
Rk8sIFBBTUFGU19TRVNTSU9OQ0xPU0VEMik7CisgICAgICAgICAgICAgICAgIGV4aXQoMCk7Cisg
ICAgICAgICAgICBkZWZhdWx0IDogLyogcGFyZW50ICovCisgICAgICAgICAgICAgICAgIHBhbV9h
ZnNfc3lzbG9nKExPR19JTkZPLCBQQU1BRlNfU0VTU0lPTkNMT1NFRDEpOworICAgICAgICAgICAg
ICAgICByZXR1cm4oUEFNX1NVQ0NFU1MpOworICAgICAgICB9CisgICAgfSAKKyAgICBpZiAoIW5v
X3VubG9nICYmIGt0Y19Gb3JnZXRBbGxUb2tlbnMoKSkKKwkgICAgcmV0dXJuIFBBTV9TRVNTSU9O
X0VSUjsKKyAgICBpZiAobG9nbWFzayAmJiBMT0dfTUFTSyhMT0dfREVCVUcpKQorICAgICAgc3lz
bG9nKExPR19ERUJVRywgInBhbV9hZnNfc2Vzc2lvbl9jbG9zZTogU2Vzc2lvbiBjbG9zZWQiKTsK
ICAgICByZXR1cm4gUEFNX1NVQ0NFU1M7CiB9CmRpZmYgLXVyTiBvcGVuYWZzLTEuMS4xLm9yaWcv
c3JjL3BhbS9hZnNfc2V0Y3JlZC5jIG9wZW5hZnMtMS4xLjEvc3JjL3BhbS9hZnNfc2V0Y3JlZC5j
Ci0tLSBvcGVuYWZzLTEuMS4xLm9yaWcvc3JjL3BhbS9hZnNfc2V0Y3JlZC5jCVdlZCBBdWcgIDgg
MTM6NDE6MjMgMjAwMQorKysgb3BlbmFmcy0xLjEuMS9zcmMvcGFtL2Fmc19zZXRjcmVkLmMJVGh1
IEF1ZyAyMyAxNzo0NToxNSAyMDAxCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAjaW5jbHVkZSA8cHdkLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJy
bm8uaD4KICNpbmNsdWRlIDxhZnNjb25maWcuaD4KICNpbmNsdWRlIDxhZnMvcGFyYW0uaD4KIApA
QCAtNDQsMTIgKzQ1LDE2IEBACiAgICAgaW50IG9yaWdtYXNrOwogICAgIGludCBsb2dtYXNrID0g
TE9HX1VQVE8oTE9HX0lORk8pOwogICAgIGludCBub3dhcm4gPSAwOwotICAgIGludCB1c2VfZmly
c3RfcGFzcyA9IDE7IC8qIHVzZSB0aGUgcGFzc3dvcmQgcGFzc2VkIGluIGJ5IGF1dGggKi8KKyAg
ICBpbnQgdXNlX2ZpcnN0X3Bhc3MgPSAwOyAvKiB1c2UgdGhlIHBhc3N3b3JkIHBhc3NlZCBpbiBi
eSBhdXRoICovCiAgICAgaW50IHRyeV9maXJzdF9wYXNzID0gMDsKICAgICBpbnQgZ290X2F1dGh0
b2sgPSAwOwotICAgIGludCBpZ25vcmVfcm9vdCA9IDA7Ci0gICAgaW50IHRydXN0X3Jvb3QgPSAw
OworICAgIGludCBpZ25vcmVfdWlkICA9IDA7CisgICAgaW50IGNoZWNrX3B3X2VudHJ5ID0gMDsK
KyAgICBpbnQgbm9fdW5sb2cgPSAwOworICAgIHVpZF90IGlnbm9yZV91aWRfaWQgPSAwOworICAg
IGludCByZWZyZXNoX3Rva2VuID0gMDsKICAgICBpbnQgc2V0X2V4cGlyZXMgPSAwOyAvKiB0aGUg
ZGVmYXVsdCBpcyB0byBub3QgdG8gc2V0IHRoZSBlbnYgdmFyaWFibGUgKi8KKyAgICBpbnQgdXNl
X2tsb2cgPSAwOwogICAgIGludCBpOwogICAgIHN0cnVjdCBwYW1fY29udiAqcGFtX2NvbnZwID0g
TlVMTDsKICAgICBjaGFyIG15X3Bhc3N3b3JkX2J1ZlsyNTZdOwpAQCAtODMsMTEgKzg4LDMzIEBA
CiAJfSBlbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbaV0sICJ0cnlfZmlyc3RfcGFzcyIpID09IDAp
IHsKIAkgICAgdHJ5X2ZpcnN0X3Bhc3MgPSAxOwogICAgICAgICB9IGVsc2UgaWYgKHN0cmNhc2Vj
bXAoYXJndltpXSwgImlnbm9yZV9yb290IiAgICkgPT0gMCkgewotICAgICAgICAgICAgaWdub3Jl
X3Jvb3QgPSAxOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndltpXSwgInRydXN0
X3Jvb3QiICAgKSA9PSAwKSB7Ci0gICAgICAgICAgICB0cnVzdF9yb290ID0gMTsKLSAgICAgICAg
fSBlbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbaV0sICJjYXRjaF9zdSIgICApID09IDApIHsKLSAg
ICAgICAgICAgIHVzZV9maXJzdF9wYXNzID0gMDsKKyAgICAgICAgICAgIGlnbm9yZV91aWQgPSAx
OworCSAgICBpZ25vcmVfdWlkX2lkID0gMDsKKwl9IGVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndltp
XSwgImlnbm9yZV91aWQiICAgICkgPT0gMCkgeworCSAgICBpKys7CisJICAgIGlmIChpID09IGFy
Z2MpIHsKKyAgICAgICAgICAgICAgICBwYW1fYWZzX3N5c2xvZyhMT0dfRVJSLCBQQU1BRlNfSUdO
T1JFVUlELCAiaWdub3JlX3VpZCBtaXNzaW5nIGFyZ3VtZW50Iik7CisJCWlnbm9yZV91aWQgPSAw
OworCSAgICB9IGVsc2UgeworCSAgICAgICAgaWdub3JlX3VpZCA9IDE7CisJICAgICAgICBpZ25v
cmVfdWlkX2lkID0gKHVpZF90KSBzdHJ0b2woYXJndltpXSwgKGNoYXIqKilOVUxMLCAxMCk7CisJ
ICAgICAgICBpZiAoICgwID4gaWdub3JlX3VpZF9pZCkgfHwgKGlnbm9yZV91aWRfaWQgPiBJR05P
UkVfTUFYKSApIHsKKwkJICAgICAgICBpZ25vcmVfdWlkID0gMDsKKwkJICAgICAgICBwYW1fYWZz
X3N5c2xvZyhMT0dfRVJSLCBQQU1BRlNfSUdOT1JFVUlELCBhcmd2W2ldKTsKKyAgICAgICAgICAg
ICAgICB9CisJICAgIH0KKwl9IGVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndltpXSwgImNoZWNrX3B3
X2VudHJ5IikgPT0gMCkgeworICAgICAgICAgICAgY2hlY2tfcHdfZW50cnkgPSAxOworCX0gZWxz
ZSBpZiAoc3RyY2FzZWNtcChhcmd2W2ldLCAibm9fdW5sb2ciKSA9PSAwKSB7CisJICAgIG5vX3Vu
bG9nID0gMTsKKwl9IGVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndltpXSwgInJlZnJlc2hfdG9rZW4i
ICkgPT0gMCkgeworCSAgICByZWZyZXNoX3Rva2VuID0gMTsKKwl9IGVsc2UgaWYgKHN0cmNhc2Vj
bXAoYXJndltpXSwgInNldF90b2tlbiIgKSA9PSAwKSB7CisJICAgIDsKKwl9IGVsc2UgaWYgKHN0
cmNhc2VjbXAoYXJndltpXSwgImRvbnRfZm9yayIgKSA9PSAwKSB7CisJICAgIDsKKwl9IGVsc2Ug
aWYgKHN0cmNhc2VjbXAoYXJndltpXSwgInVzZV9rbG9nIiApID09IDApIHsKKwkgICAgdXNlX2ts
b2cgPSAxOwogCX0gZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2W2ldLCAic2V0ZW52X3Bhc3N3b3Jk
X2V4cGlyZXMiKT09MCkgewogCSAgICBzZXRfZXhwaXJlcyA9IDE7CiAJfSBlbHNlIHsKQEAgLTk3
LDE2ICsxMjQsMTggQEAKIAogICAgIGlmICh1c2VfZmlyc3RfcGFzcykgdHJ5X2ZpcnN0X3Bhc3Mg
PSAwOwogCi0gICAgcGFtX2Fmc19zeXNsb2coTE9HX0RFQlVHLCBQQU1BRlNfT1BUSU9OUywgbm93
YXJuLCB1c2VfZmlyc3RfcGFzcywgdHJ5X2ZpcnN0X3Bhc3MpOworICAgIGlmIChsb2dtYXNrICYm
IExPR19NQVNLKExPR19ERUJVRykpCisgICAgICBwYW1fYWZzX3N5c2xvZyhMT0dfREVCVUcsIFBB
TUFGU19PUFRJT05TLCBub3dhcm4sIHVzZV9maXJzdF9wYXNzLCB0cnlfZmlyc3RfcGFzcywgaWdu
b3JlX3VpZCwgaWdub3JlX3VpZF9pZCwgOCwgOCwgOCwgOCk7CiAgICAgLyogVHJ5IHRvIGdldCB0
aGUgdXNlci1pbnRlcmFjdGlvbiBpbmZvLCBpZiBhdmFpbGFibGUuICovCi0gICAgZXJyY29kZSA9
IHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fQ09OViwgKHZvaWQgKiopICZwYW1fY29udnApOworICAg
IGVycmNvZGUgPSBwYW1fZ2V0X2l0ZW0ocGFtaCwgUEFNX0NPTlYsIChjb25zdCB2b2lkICoqKSAm
cGFtX2NvbnZwKTsKICAgICBpZiAoZXJyY29kZSAhPSBQQU1fU1VDQ0VTUykgeworICAgICAgaWYg
KGxvZ21hc2sgJiYgTE9HX01BU0soTE9HX0RFQlVHKSkKIAlwYW1fYWZzX3N5c2xvZyhMT0dfREVC
VUcsIFBBTUFGU19OT19VU0VSX0lOVCk7CiAJcGFtX2NvbnZwID0gTlVMTDsKICAgICB9CiAKICAg
ICAvKiBXaG8gYXJlIHdlIHRyeWluZyB0byBhdXRoZW50aWNhdGUgaGVyZT8gKi8KLSAgICBpZiAo
KGVycmNvZGUgPSBwYW1fZ2V0X3VzZXIocGFtaCwgJnVzZXIsICJBRlMgdXNlcm5hbWU6IikpICE9
IFBBTV9TVUNDRVNTKSB7CisgICAgaWYgKChlcnJjb2RlID0gcGFtX2dldF91c2VyKHBhbWgsIChj
b25zdCBjaGFyICoqKSZ1c2VyLCAiQUZTIHVzZXJuYW1lOiIpKSAhPSBQQU1fU1VDQ0VTUykgewog
ICAgICAgICBwYW1fYWZzX3N5c2xvZyhMT0dfRVJSLCBQQU1BRlNfTk9VU0VSLCBlcnJjb2RlKTsK
ICAgICAgICAgUkVUKFBBTV9VU0VSX1VOS05PV04pOwogICAgIH0KQEAgLTExNSw2ICsxNDQsOSBA
QAogICAgICAqIGFuZCBpdHMgdWlkPT0wLCBhbmQgImlnbm9yZV9yb290IiB3YXMgZ2l2ZW4gaW4g
cGFtLmNvbmYsCiAgICAgICogaWdub3JlIHRoZSB1c2VyLgogICAgICAqLworICAgIC8qIGVuaGFu
Y2VkOiB1c2UgImlnbm9yZV91aWQgPG51bWJlcj4iIHRvIHNwZWNpZnkgdGhlIGxhcmdlc3QgdWlk
CisgICAgICogd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhpcyBtb2R1bGUKKyAgICAgKi8K
ICNpZglkZWZpbmVkKEFGU19IUFVYX0VOVikKICNpZiAgICAgZGVmaW5lZChBRlNfSFBVWDExMF9F
TlYpCiAgICAgaSA9IGdldHB3bmFtX3IodXNlciwgJnVuaXhfcHdkLCB1cHdkX2J1Ziwgc2l6ZW9m
KHVwd2RfYnVmKSwgJnVwd2QpOwpAQCAtMTIzLDcgKzE1NSw3IEBACiAgICAgaWYgKCBpID09IDAg
KSAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0cHduYW1fciBzdWNjZXNzICovCiAgICAgICAg
IHVwd2QgPSAmdW5peF9wd2Q7CiAjZW5kaWYgIC8qIEFGU19IUFVYMTEwX0VOViAqLwotICAgIGlm
IChpZ25vcmVfcm9vdCAmJiBpID09IDAgJiYgdXB3ZC0+cHdfdWlkID09IDApIHsKKyAgICBpZiAo
aWdub3JlX3VpZCAmJiBpID09IDAgJiYgdXB3ZC0+cHdfdWlkIDw9IGlnbm9yZV91aWRfaWQpIHsK
ICAgICAgICAgcGFtX2Fmc19zeXNsb2coTE9HX0lORk8sIFBBTUFGU19JR05PUklOR1JPT1QsIHVz
ZXIpOwogICAgICAgICBSRVQoUEFNX0FVVEhfRVJSKTsKICAgICB9CkBAIC0xMzMsMjggKzE2NSwz
OSBAQAogI2Vsc2UKICAgICB1cHdkID0gZ2V0cHduYW1fcih1c2VyLCAmdW5peF9wd2QsIHVwd2Rf
YnVmLCBzaXplb2YodXB3ZF9idWYpKTsKICNlbmRpZgotICAgIGlmICh1cHdkICE9IE5VTEwgJiYg
dXB3ZC0+cHdfdWlkID09IDApIHsKLQlpZiAoaWdub3JlX3Jvb3QpIHsgCisgICAgaWYgKGlnbm9y
ZV91aWQgJiYgdXB3ZCAhPSBOVUxMICYmIHVwd2QtPnB3X3VpZCA8PSBpZ25vcmVfdWlkX2lkKSB7
CiAJCXBhbV9hZnNfc3lzbG9nKExPR19JTkZPLCBQQU1BRlNfSUdOT1JJTkdST09ULCB1c2VyKTsK
IAkJUkVUKFBBTV9BVVRIX0VSUik7Ci0JfSBlbHNlIGlmICh0cnVzdF9yb290KSB7Ci0JCXBhbV9h
ZnNfc3lzbG9nKExPR19JTkZPLCBQQU1BRlNfVFJVU1RST09ULCB1c2VyKTsKLQkJUkVUKFBBTV9T
VUNDRVNTKTsKLQl9CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAoZmxhZ3MgJiBQQU1fREVMRVRF
X0NSRUQpIHsKKyAgICAgIGlmIChsb2dtYXNrICYmIExPR19NQVNLKExPR19ERUJVRykpCiAJcGFt
X2Fmc19zeXNsb2coTE9HX0RFQlVHLCBQQU1BRlNfREVMQ1JFRCwgdXNlcik7CiAKIAlSRVQoUEFN
X1NVQ0NFU1MpOwogICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBQQU1fUkVJTklUSUFMSVpFX0NSRUQp
IHsKIAorICAgICAgaWYgKGxvZ21hc2sgJiYgTE9HX01BU0soTE9HX0RFQlVHKSkKICAgICAgICAg
cGFtX2Fmc19zeXNsb2coTE9HX0RFQlVHLCBQQU1BRlNfUkVJTklUQ1JFRCwgdXNlcik7CiAgICAg
ICAgIFJFVChQQU1fU1VDQ0VTUyk7CiAKICAgICB9IGVsc2UgeyAvKiBmbGFncyBhcmUgUEFNX1JF
RlJFU0hfQ1JFRCwgUEFNX0VTVEFCTElTSF9DUkVELCB1bmtub3duICovCiAKKyAgICAgIC8qIENo
ZWNrIG91dCB0aGUgcGFzc3dkIGVudHJ5ICovCisgICAgICBpZiAoY2hlY2tfcHdfZW50cnkpCisJ
eworCSAgLyogSWYgdGhlIHBhc3N3b3JkIGVudHJ5IGxpc3RzICJVU0UgQUZTIiB0aGlzIHVzZXIg
aXMgdG8gYmUKKwkgICAgIGF1dGhlbnRpY2F0ZWQgYnkgQUZTICovCisJICBpZiAoc3RybmNtcCh1
cHdkLT5wd19wYXNzd2QsICJVU0UgQUZTXDAiLCA4KSAhPSAwKQorCSAgICB7CisJICAgICAgaWYg
KGxvZ21hc2sgJiYgTE9HX01BU0soTE9HX0RFQlVHKSkKKwkJc3lzbG9nIChMT0dfREVCVUcsICJV
c2VyICVzIGlzIG5vdCByZWdpc3RlcmVkIGFzIEFGUyB1c2VyXG4iLCB1cHdkLT5wd19uYW1lKTsK
KwkgICAgICBSRVQoUEFNX1VTRVJfVU5LTk9XTik7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChs
b2dtYXNrICYmIExPR19NQVNLKExPR19ERUJVRykpCiAJcGFtX2Fmc19zeXNsb2coTE9HX0RFQlVH
LCBQQU1BRlNfRVNUQUJDUkVELCB1c2VyKTsKIAogCWVycmNvZGUgPSBwYW1fZ2V0X2RhdGEocGFt
aCwgcGFtX2Fmc19saCwgKGNvbnN0IHZvaWQgKiopICZwYXNzd29yZCk7CkBAIC0xNjQsNyArMjA3
LDggQEAKIAkJUkVUKFBBTV9BVVRIX0VSUik7CiAJICAgIH0KIAkgICAgcGFzc3dvcmQgPSBOVUxM
OwkvKiBJbiBjYXNlIGl0IGlzbid0IGFscmVhZHkgTlVMTCAqLwotCSAgICBwYW1fYWZzX3N5c2xv
ZyhMT0dfREVCVUcsIFBBTUFGU19OT0ZJUlNUUEFTUywgdXNlcik7CisJICAgIGlmIChsb2dtYXNr
ICYmIExPR19NQVNLKExPR19ERUJVRykpCisJICAgICAgcGFtX2Fmc19zeXNsb2coTE9HX0RFQlVH
LCBQQU1BRlNfTk9GSVJTVFBBU1MsIHVzZXIpOwogCX0gZWxzZSBpZiAocGFzc3dvcmRbMF0gPT0g
J1wwJykgewogCSAgICAvKiBBY3R1YWxseSB3ZSAqZGlkKiBnZXQgb25lIGJ1dCBpdCB3YXMgZW1w
dHkuICovCiAJICAgIGdvdF9hdXRodG9rID0gMTsKQEAgLTE3NSw4ICsyMTksMTAgQEAKIAkJcGFt
X2Fmc19zeXNsb2coTE9HX0VSUiwgUEFNQUZTX1BBU1NXRF9SRVEsIHVzZXIpOwogCQlSRVQoUEFN
X05FV19BVVRIVE9LX1JFUUQpOwogCSAgICB9Ci0JICAgIHBhbV9hZnNfc3lzbG9nKExPR19ERUJV
RywgUEFNQUZTX05JTFBBU1NXT1JELCB1c2VyKTsKKwkgICAgaWYgKGxvZ21hc2sgJiYgTE9HX01B
U0soTE9HX0RFQlVHKSkKKwkgICAgICBwYW1fYWZzX3N5c2xvZyhMT0dfREVCVUcsIFBBTUFGU19O
SUxQQVNTV09SRCwgdXNlcik7CiAJfSBlbHNlIHsKKwkgIGlmIChsb2dtYXNrICYmIExPR19NQVNL
KExPR19ERUJVRykpCiAJICAgIHBhbV9hZnNfc3lzbG9nKExPR19ERUJVRywgUEFNQUZTX0dPVFBB
U1MsIHVzZXIpOwogCSAgICB0b3JjaF9wYXNzd29yZCA9IDA7CiAJICAgIGdvdF9hdXRodG9rID0g
MTsKQEAgLTIwNiw2ICsyNTIsNyBAQAogCQlSRVQoUEFNX0FVVEhfRVJSKTsKIAkgICAgfQogCSAg
ICBpZiAocGFzc3dvcmRbMF0gPT0gJ1wwJykgeworCSAgICAgIGlmIChsb2dtYXNrICYmIExPR19N
QVNLKExPR19ERUJVRykpCiAJCXBhbV9hZnNfc3lzbG9nKExPR19ERUJVRywgUEFNQUZTX05JTFBB
U1NXT1JEKTsKIAkJUkVUKFBBTV9ORVdfQVVUSFRPS19SRVFEKTsKIAkgICAgfQpAQCAtMjE2LDE2
ICsyNjMsMzAgQEAKIAkgICAgICogdGhpcyBzdG9yYWdlLCBjb3B5IGl0IHRvIGEgYnVmZmVyIHRo
YXQgd29uJ3QgbmVlZCB0byBiZSBmcmVlZAogCSAgICAgKiBsYXRlciwgYW5kIGZyZWUgdGhpcyBz
dG9yYWdlIG5vdy4KIAkgICAgICovCisKIAkgICAgc3RybmNweShteV9wYXNzd29yZF9idWYsIHBh
c3N3b3JkLCBzaXplb2YobXlfcGFzc3dvcmRfYnVmKSk7CiAJICAgIG15X3Bhc3N3b3JkX2J1Zltz
aXplb2YobXlfcGFzc3dvcmRfYnVmKS0xXSA9ICdcMCc7CiAJICAgIG1lbXNldChwYXNzd29yZCwg
MCwgc3RybGVuKHBhc3N3b3JkKSk7CiAJICAgIGZyZWUocGFzc3dvcmQpOwogCSAgICBwYXNzd29y
ZCA9IG15X3Bhc3N3b3JkX2J1ZjsKIAl9CisJLyoKKwkgKiBXZSBvbmx5IHNldCBhIFBBRyBoZXJl
LCBpZiB3ZSBoYXZlbid0IGdvdCBvbmUgYmVmb3JlIGluCisJICogcGFtX3NtX2F1dGhlbnRpY2F0
ZSgpIG9yIGlmIGl0IHdhcyBkZXN0cm95ZWQgYnkgdGhlIGFwcGxpY2F0aW9uCisJICovCisJaWYg
KCghcmVmcmVzaF90b2tlbikgJiYgKGdldFBBRygpID09IC0xKSkgeworCSAgaWYgKGxvZ21hc2sg
JiYgTE9HX01BU0soTE9HX0RFQlVHKSkKKwkgICAgc3lzbG9nKExPR19ERUJVRywgIk5ldyBQQUcg
Y3JlYXRlZCBpbiBwYW1fc2V0Y3JlZCgpIik7CisJICAgc2V0cGFnKCk7CisJfQogCiAJaWYgKCBm
bGFncyAmIFBBTV9SRUZSRVNIX0NSRUQgKSB7CisJICAgIGlmICh1c2Vfa2xvZykgeworICAgICAg
ICAgICAgICAgYXV0aF9vayA9IGRvX2tsb2codXNlciwgcGFzc3dvcmQsICIwMDowMDowMSIpOwor
CSAgICAgICBrdGNfRm9yZ2V0QWxsVG9rZW5zKCk7CisJICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBpZiAoIGthX1ZlcmlmeVVzZXJQYXNzd29yZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IEtBX1VTRVJBVVRIX1ZFUlNJT04gKyBLQV9VU0VSQVVUSF9ET1NFVFBBRywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEtBX1VTRVJBVVRIX1ZFUlNJT04sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VyLCAvKiBrZXJiZXJvcyBuYW1lICovCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoY2hhciAqKTAsIC8qIGluc3RhbmNlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY2hhciAqKTAsIC8qIHJlYWxtICovCkBAIC0yMzgsMTAgKzI5OSwxMyBAQAogCQlhdXRoX29r
ID0gMTsKIAkgICAgfQkKIAl9CisJfQogCSAgICAKIAlpZiAoICBmbGFncyAmIFBBTV9FU1RBQkxJ
U0hfQ1JFRCApIHsKKwkgICBpZiAodXNlX2tsb2cpIGF1dGhfb2sgPSBkb19rbG9nKHVzZXIsIHBh
c3N3b3JkLCBOVUxMKTsKKwkgICBlbHNlIHsKIAkgICAgaWYgKCBrYV9Vc2VyQXV0aGVudGljYXRl
R2VuZXJhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEtBX1VTRVJBVVRIX1ZFUlNJT04g
KyBLQV9VU0VSQVVUSF9ET1NFVFBBRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEtBX1VT
RVJBVVRIX1ZFUlNJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLCAvKiBrZXJi
ZXJvcyBuYW1lICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKTAsIC8qIGlu
c3RhbmNlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKTAsIC8qIHJlYWxt
ICovCkBAIC0yNTYsMTkgKzMyMCwyMiBAQAogCSAgICAgICBhdXRoX29rID0gMTsKIAkgICAgfQog
CX0KKwl9CiAKIAlpZiAoIWF1dGhfb2sgJiYgdHJ5X2ZpcnN0X3Bhc3MpIHsKIAkgICAgcGFzc3dv
cmQgPSBOVUxMOwogCSAgICBnb3RvIHRyeV9hdXRoOwogCX0KIAotCWlmIChhdXRoX29rICYmICFn
b3RfYXV0aHRvaykgewotCSAgICB0b3JjaF9wYXNzd29yZCA9IDA7Ci0JICAgICh2b2lkKSBwYW1f
c2V0X2l0ZW0ocGFtaCwgUEFNX0FVVEhUT0ssIHBhc3N3b3JkKTsKLQl9CisJLyogcGFtX3NtX2F1
dGhlbnRpY2F0ZSBzaG91bGQgaGF2ZSBzZXQgdGhpcyAKKwkgKiBpZiAoYXV0aF9vayAmJiAhZ290
X2F1dGh0b2spIHsKKwkgKiAgICAgdG9yY2hfcGFzc3dvcmQgPSAwOworCSAqICAgICAodm9pZCkg
cGFtX3NldF9pdGVtKHBhbWgsIFBBTV9BVVRIVE9LLCBwYXNzd29yZCk7CisgICAgICAgICAqIH0K
KwkgKi8KIAogCWlmIChhdXRoX29rKSB7Ci0JICAgIGlmIChzZXRfZXhwaXJlcyAmJiAgKHBhc3N3
b3JkX2V4cGlyZXMgPj0gMCkgKSB7CisJICAgIGlmIChzZXRfZXhwaXJlcyAmJiAhdXNlX2tsb2cg
JiYgIChwYXNzd29yZF9leHBpcmVzID49IDApICkgewogCQlzdHJjcHkoc2J1ZmZlciwgIlBBU1NX
T1JEX0VYUElSRVM9Iik7CiAJCXN0cmNhdChzYnVmZmVyLCBjdjJzdHJpbmcoJnNidWZmZXJbMTAw
XSwgcGFzc3dvcmRfZXhwaXJlcykpOwogCQllcnJjb2RlID0gcGFtX3B1dGVudiggcGFtaCwgc2J1
ZmZlcik7IApAQCAtMjc2LDE0ICszNDMsMTUgQEAKIAkJICAgIHBhbV9hZnNfc3lzbG9nKExPR19F
UlIsIFBBTUFGU19QQVNTRVhQRkFJTCwgdXNlcik7CiAJICAgIH0KICNpZiBkZWZpbmVkKEFGU19L
RVJCRVJPU19FTlYpCi0gICAgCSAgICBpZiAodXB3ZCkKLSAgICAJICAgIHsKKyAgICAJICAgIGlm
ICghdXNlX2tsb2cpIHsKKyAgICAgICAgICAgICAgIGlmICh1cHdkKSB7CiAgICAgICAgIAlpZiAo
IGNob3duKGt0Y190a3Rfc3RyaW5nKCksIHVwd2QtPnB3X3VpZCwgdXB3ZC0+cHdfZ2lkKSA8IDAg
KQogCQkgICAgcGFtX2Fmc19zeXNsb2coTE9HX0VSUiwgUEFNQUZTX0NIT1dOS1JCLCB1c2VyKTsK
IAkJc3ByaW50ZihzYnVmZmVyLCAiS1JCVEtGSUxFPSVzIiwga3RjX3RrdF9zdHJpbmcoKSk7CiAJ
CWVycmNvZGUgPSBwYW1fcHV0ZW52KCBwYW1oLCBzYnVmZmVyKTsKICAgICAgICAgICAgICAgICBp
ZiAoIGVycmNvZGUgIT0gUEFNX1NVQ0NFU1MgKQogICAgICAgICAgICAgICAgICAgICBwYW1fYWZz
X3N5c2xvZyhMT0dfRVJSLCBQQU1BRlNfS1JCRkFJTCwgdXNlcik7CisJICAgICAgIH0KICAgICAJ
ICAgIH0KICNlbmRpZgogCmRpZmYgLXVyTiBvcGVuYWZzLTEuMS4xLm9yaWcvc3JjL3BhbS9hZnNf
dXRpbC5jIG9wZW5hZnMtMS4xLjEvc3JjL3BhbS9hZnNfdXRpbC5jCi0tLSBvcGVuYWZzLTEuMS4x
Lm9yaWcvc3JjL3BhbS9hZnNfdXRpbC5jCVdlZCBBdWcgIDggMTM6NDE6MjMgMjAwMQorKysgb3Bl
bmFmcy0xLjEuMS9zcmMvcGFtL2Fmc191dGlsLmMJV2VkIEF1ZyAxNSAwOTozMzozNyAyMDAxCkBA
IC05LDkgKzksMTMgQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXNs
b2cuaD4KICNpbmNsdWRlIDxzZWN1cml0eS9wYW1fYXBwbC5oPgogI2luY2x1ZGUgPGFmc2NvbmZp
Zy5oPgogI2luY2x1ZGUgPGFmcy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAKIFJD
U0lEKCIkSGVhZGVyOiAvY3ZzL29wZW5hZnMvc3JjL3BhbS9hZnNfdXRpbC5jLHYgMS40IDIwMDEv
MDcvMTIgMTk6NTg6NTMgc2hhZG93IEV4cCAkIik7CiAKQEAgLTUzLDEyICs1NywxMiBAQAogCiAj
aWYgIWRlZmluZWQoQUZTX0hQVVgxMTBfRU5WKQogLyogRm9yIEhQIDExLjAsIHRoaXMgZnVuY3Rp
b24gaXMgaW4gdXRpbC9ocHV0aWwuYyAqLwotc2lndmVjKCkKK3NpZ3ZlYyhpbnQgc2lnLCBjb25z
dCBzdHJ1Y3Qgc2lndmVjKiB2ZWMsIHN0cnVjdCBzaWd2ZWMqIG92ZWMpCiB7CiAJYXNzZXJ0KDAp
OwogfQogI2VuZGlmICAvKiBBRlNfSFBVWDExMF9FTlYgKi8KLXNpZ3NldG1hc2soKQorc2lnc2V0
bWFzayhpbnQgbWFzaykKIHsKIAlhc3NlcnQoMCk7CiB9CkBAIC04NSwzICs4OSwxMTUgQEAKICAg
ICByZXR1cm4gdHA7CiB9CiAKK2ludCBkb19rbG9nKGNvbnN0IGNoYXIqIHVzZXIsIGNvbnN0IGNo
YXIqIHBhc3N3b3JkLCBjb25zdCBjaGFyKiBsaWZldGltZSkKK3sKK3BpZF90CXBpZDsKK2ludAlw
aXBlZGVzWzJdOworaW50CXN0YXR1czsKK2NoYXIqICAgYXJndlszMl07CitpbnQgICAgIGFyZ2Mg
PSAwOworY2hhciogICBrbG9nX3Byb2c7CitpbnQJcmV0ID0gMTsKKworI2lmIGRlZmluZWQoQUZT
X0tFUkJFUk9TX0VOVikgCisgICBrbG9nX3Byb2cgPSBLTE9HS1JCOworI2Vsc2UKKyAgIGtsb2df
cHJvZyA9IEtMT0c7CisjZW5kaWYKKyAgIGlmIChhY2Nlc3Moa2xvZ19wcm9nLCBYX09LKSAhPSAw
KSB7CisgICAgICBzeXNsb2coTE9HX0VSUiwgImNhbiBub3QgYWNjZXNzIGtsb2cgcHJvZ3JhbSAn
JXMnIiwgS0xPRyk7CisgICAgICBnb3RvIG91dDsKKyAgIH0KKyNpZiBkZWZpbmVkKEFGU19LRVJC
RVJPU19FTlYpIAorICAgYXJndlthcmdjKytdID0gImtsb2cua3JiIjsKKworI2Vsc2UKKyAgIGFy
Z3ZbYXJnYysrXSA9ICJrbG9nIjsKKyNlbmRpZgorICAgYXJndlthcmdjKytdID0gKGNoYXIqKXVz
ZXI7CisgICBhcmd2W2FyZ2MrK10gPSAiLXNpbGVudCI7CisgICBhcmd2W2FyZ2MrK10gPSAiLXBp
cGUiOworICAgaWYgKGxpZmV0aW1lICE9IE5VTEwpIHsKKyAgICAgIGFyZ3ZbYXJnYysrXSA9ICIt
bGlmZXRpbWUiOworICAgICAgYXJndlthcmdjKytdID0gKGNoYXIqKWxpZmV0aW1lOworICAgfQor
ICAgYXJndlthcmdjXSA9IE5VTEw7CisKKyAgIGlmIChwaXBlKHBpcGVkZXMpICE9IDApIHsKKyAg
ICAgIHN5c2xvZyhMT0dfRVJSLCAiY2FuIG5vdCBvcGVuIHBpcGU6ICVzIiwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgIGdvdG8gb3V0OworICAgfQorICAgcGlkID0gZm9yaygpOworICAgc3dpdGNo
KHBpZCkgeworICAgICAgY2FzZSAoLTEpOiAvKiBFcnJvcjogZm9yayBmYWlsZWQgKi8KKyAgICAg
ICAgIHN5c2xvZyhMT0dfRVJSLCAiZm9yayBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsK
KwkgZ290byBvdXQ7CisgICAgICBjYXNlICgwKSA6IC8qIGNoaWxkICovCisJIGNsb3NlKDApOwor
CSBkdXAocGlwZWRlc1swXSk7CisJIGNsb3NlKHBpcGVkZXNbMF0pOworCSBjbG9zZSgxKTsKKwkg
ZHVwKHBpcGVkZXNbMV0pOworCSBjbG9zZShwaXBlZGVzWzFdKTsKKwkgZXhlY3Yoa2xvZ19wcm9n
LCBhcmd2KTsKKwkgLyogbm90cmVhY2hlZCAqLworCSBzeXNsb2coTE9HX0VSUiwgImV4ZWN2IGZh
aWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCSBjbG9zZSgwKTsKKwkgY2xvc2UoMSk7CisJ
IGdvdG8gb3V0OworICAgICAgZGVmYXVsdCA6CisJIHdyaXRlKHBpcGVkZXNbMV0sIHBhc3N3b3Jk
LCBzdHJsZW4ocGFzc3dvcmQpKTsKKwkgd3JpdGUocGlwZWRlc1sxXSwgIlxuIiwgMSk7CisJIGNs
b3NlKHBpcGVkZXNbMF0pOworCSBjbG9zZShwaXBlZGVzWzFdKTsKKwkgaWYgKHBpZCAhPSB3YWl0
KCZzdGF0dXMpKSByZXR1cm4oMCk7CisJIGlmIChXSUZFWElURUQoc3RhdHVzKSkgeworICAgICAg
ICAgICAgcmV0ID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKKwkgICAgZ290byBvdXQ7CisgICAgICAg
ICB9CisJIHN5c2xvZyhMT0dfTk9USUNFLCAiJXMgZm9yICVzIGZhaWxlZCIsIGtsb2dfcHJvZywg
dXNlcikgOworICAgfQorb3V0OgorICAgLyogICBzeXNsb2coTE9HX0RFQlVHLCAiZG9fa2xvZyBy
ZXR1cm5zICVkIiwgcmV0KTsgKi8KKyAgIHJldHVybihyZXQpOworfQorCisvKiBnZXQgdGhlIGN1
cnJlbnQgQUZTIHBhZyBmb3IgdGhlIGNhbGxpbmcgcHJvY2VzcyAqLworc3RhdGljIGFmc19pbnQz
MiBjdXJwYWcoKQoreworICAgZ2lkX3QgZ3JvdXBzWzMwXTsKKyAgIGFmc191aW50MzIgZzAsIGcx
OworICAgYWZzX3VpbnQzMiBoLCBsLCByZXQ7CisgICAgICAKKyAgIGlmIChnZXRncm91cHMoc2l6
ZW9mIGdyb3Vwcy9zaXplb2YgZ3JvdXBzWzBdLCBncm91cHMpIDwgMikgcmV0dXJuIDA7CisJIAor
ICAgZzAgPSBncm91cHNbMF0gICYgMHhmZmZmOworICAgZzEgPSBncm91cHNbMV0gICYgMHhmZmZm
OworICAgZzAgLT0gMHgzZjAwOworICAgZzEgLT0gMHgzZjAwOworICAgaWYgKGcwIDwgMHhjMDAw
ICYmIGcxIDwgMHhjMDAwKSB7CisgICAgICBsID0gKChnMCAmIDB4M2ZmZikgPDwgMTQpIHwgKGcx
ICYgMHgzZmZmKTsKKyAgICAgIGggPSAoZzAgPj4gMTQpOworICAgICAgaCA9IChnMSA+PiAxNCkg
KyBoICsgaCArIGg7CisgICAgICByZXQgPSAoKGggPDwgMjgpIHwgbCk7CisgICAgICAvKiBBZGRp
dGlvbmFsIHRlc3RpbmcgKi8KKyAgICAgIGlmICgoKHJldCA+PiAyNCkgJiAweGZmKSA9PSAnQScp
CisgICAgICAgICByZXR1cm4gcmV0OworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICB9CisgICByZXR1cm4gLTE7Cit9CisKKy8qIFJldHVybnMgdGhlIEFGUyBwYWcgbnVtYmVy
LCBpZiBhbnksIG90aGVyd2lzZSByZXR1cm4gLTEgKi8KK2Fmc19pbnQzMiBnZXRQQUcoKQorewor
ICAgYWZzX2ludDMyIHBhZzsKKyAgIAorICAgcGFnID0gY3VycGFnKCk7CisgICBpZiAocGFnID09
IDAgfHwgcGFnID09IC0xKQorICAgICAgcmV0dXJuIC0xOworICAgICAgIAorICAgLyogaGlnaCBv
cmRlciBieXRlIGlzIGFsd2F5cyAnQSc7IGFjdHVhbCBwYWcgdmFsdWUgaXMgbG93IDI0IGJpdHMg
Ki8KKyAgIHJldHVybiAocGFnICYgMHhGRkZGRkYpOworfQpkaWZmIC11ck4gb3BlbmFmcy0xLjEu
MS5vcmlnL3NyYy9wYW0vYWZzX3V0aWwuaCBvcGVuYWZzLTEuMS4xL3NyYy9wYW0vYWZzX3V0aWwu
aAotLS0gb3BlbmFmcy0xLjEuMS5vcmlnL3NyYy9wYW0vYWZzX3V0aWwuaAlXZWQgQXVnICA4IDEz
OjQxOjIzIDIwMDEKKysrIG9wZW5hZnMtMS4xLjEvc3JjL3BhbS9hZnNfdXRpbC5oCVdlZCBBdWcg
IDggMTM6NDE6NTcgMjAwMQpAQCAtMjcsNiArMjcsMTEgQEAKIAogZXh0ZXJuIGNoYXIqCWN2MnN0
cmluZygpOwogCisjZGVmaW5lIEtMT0cgIi91c3IvYWZzd3MvYmluL2tsb2ciCisjZGVmaW5lIEtM
T0dLUkIgIi91c3IvYWZzd3MvYmluL2tsb2cua3JiIgorI2RlZmluZSBVTkxPRyAiL3Vzci9hZnN3
cy9iaW4vdW5sb2ciCisjZGVmaW5lIElHTk9SRV9NQVggMTAwMAorCiAjaWYJZGVmaW5lZChBRlNf
SFBVWF9FTlYpCiAKICNpZiAhZGVmaW5lZChBRlNfSFBVWDExMF9FTlYpCmRpZmYgLXVyTiBvcGVu
YWZzLTEuMS4xLm9yaWcvc3JjL3BhbS90ZXN0X3BhbS5jIG9wZW5hZnMtMS4xLjEvc3JjL3BhbS90
ZXN0X3BhbS5jCi0tLSBvcGVuYWZzLTEuMS4xLm9yaWcvc3JjL3BhbS90ZXN0X3BhbS5jCVdlZCBB
dWcgIDggMTM6NDE6MjMgMjAwMQorKysgb3BlbmFmcy0xLjEuMS9zcmMvcGFtL3Rlc3RfcGFtLmMJ
V2VkIEF1ZyAgOCAxMzo0MTo1NyAyMDAxCkBAIC00Myw2ICs0Myw3IEBACiAgICAgaW50IGF1dGhl
bnRpY2F0ZWQgPSAwOwogICAgIGludCByZXRjb2RlOwogICAgIGNoYXIgKnVzZXJuYW1lOworICAg
IGludCBzZXRjcmVkID0gMTsKIAogICAgIGlmIChhcmdjIDwgMiB8fCBhcmdjID4gMykgewogCWZw
cmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFstdV0gPHVzZXI+XG4iLCBhcmd2WzBdKTsKQEAgLTUz
LDcgKzU0LDggQEAKIAkgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgWy11XSA8dXNlcj5c
biIsIGFyZ3ZbMF0pOwogCSAgICBleGl0KDEpOwogCX0KLQlzZXJ2aWNlID0gInVuaXh0ZXN0IjsK
KwkvKiBzZXJ2aWNlID0gInVuaXh0ZXN0IjsgKi8KKyAgICAgICAgc2V0Y3JlZCA9IDA7CiAJdXNl
cm5hbWUgPSBhcmd2WzJdOwogICAgIH0gZWxzZSB7CiAJdXNlcm5hbWUgPSBhcmd2WzFdOwpAQCAt
ODEsMTIgKzgzLDE4IEBACiAKICAgICAvKiBwYW1fb3Blbl9zZXNzaW9uICovCiAKKyAgICBpZiAo
c2V0Y3JlZCkKICAgICBpZiAoKHJldGNvZGUgPSBwYW1fc2V0Y3JlZChwYW1oLCBQQU1fRVNUQUJM
SVNIX0NSRUQpKSAhPSBQQU1fU1VDQ0VTUykgewogCWZwcmludGYoc3RkZXJyLCAicGFtX3NldGNy
ZWQgcmV0dXJuZWQgJWQuXG4iLCByZXRjb2RlKTsKIAlwYW1fZW5kKHBhbWgsIFBBTV9BQk9SVCk7
CiAJZXhpdCgxKTsKICAgICB9CiAKKyAgICBpZiAoKHJldGNvZGUgPSBwYW1fb3Blbl9zZXNzaW9u
KHBhbWgsIFBBTV9TSUxFTlQpKSAhPSBQQU1fU1VDQ0VTUykgeworCWZwcmludGYoc3RkZXJyLCAi
cGFtX29wZW5fc2Vzc2lvbiByZXR1cm5lZCAlZC5cbiIsIHJldGNvZGUpOworCXBhbV9lbmQocGFt
aCwgUEFNX0FCT1JUKTsKKwlleGl0KDEpOworICAgIH0KICAgICBwYW1fZW5kKHBhbWgsIFBBTV9T
VUNDRVNTKTsKIAogICAgIHB1dGVudihuZXdfZW52c3RyaW5nKTsK

--0__=C1256AB5004CE0648f9e8a93df938690918cC1256AB5004CE064--