Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 May 2015 17:19:34 +0000
From:      "zbb (Zbigniew Bodek)" <phabric-noreply@FreeBSD.org>
To:        freebsd-arm@freebsd.org
Subject:   [Differential] [Updated, 1, 488 lines] D2357: Port x86 busdma to ARM64
Message-ID:  <1538bc4ebbf7d3d51276fdc30340efcf@localhost.localdomain>
In-Reply-To: <differential-rev-PHID-DREV-h7f3zkqdq4qxyli7oe3v-req@FreeBSD.org>
References:  <differential-rev-PHID-DREV-h7f3zkqdq4qxyli7oe3v-req@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--b1_1538bc4ebbf7d3d51276fdc30340efcf
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

zbb updated this revision to Diff 5182.

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D2357?vs=4971&id=5182

REVISION DETAIL
  https://reviews.freebsd.org/D2357

AFFECTED FILES
  sys/arm64/arm64/busdma_bounce.c
  sys/arm64/arm64/busdma_machdep.c
  sys/arm64/include/bus_dma_impl.h
  sys/conf/files.arm64

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: zbb, emaste, ian, imp, andrew
Cc: onwahe-gmail-com, emaste, freebsd-arm

--b1_1538bc4ebbf7d3d51276fdc30340efcf
Content-Type: text/x-patch; charset=utf-8; name="D2357.5182.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D2357.5182.patch"

ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK
LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg
LTUsNiArNSw3IEBACiBhcm02NC9hcm02NC9iY29weS5jCQlzdGFuZGFyZAogYXJtNjQvYXJtNjQv
YnVzX21hY2hkZXAuYwlzdGFuZGFyZAogYXJtNjQvYXJtNjQvYnVzX3NwYWNlX2FzbS5TCXN0YW5k
YXJkCithcm02NC9hcm02NC9idXNkbWFfYm91bmNlLmMJc3RhbmRhcmQKIGFybTY0L2FybTY0L2J1
c2RtYV9tYWNoZGVwLmMJc3RhbmRhcmQKIGFybTY0L2FybTY0L2Nsb2NrLmMJCXN0YW5kYXJkCiBh
cm02NC9hcm02NC9jb3B5aW5vdXQuUwkJc3RhbmRhcmQKZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9p
bmNsdWRlL2J1c19kbWFfaW1wbC5oIGIvc3lzL2FybTY0L2luY2x1ZGUvYnVzX2RtYV9pbXBsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYXJtNjQvaW5jbHVk
ZS9idXNfZG1hX2ltcGwuaApAQCAtMCwwICsxLDk2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg
MjAxMyBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBLb25zdGFudGluIEJlbG91c292IDxr
aWJARnJlZUJTRC5vcmc+CisgKiB1bmRlciBzcG9uc29yc2hpcCBmcm9tIHRoZSBGcmVlQlNEIEZv
dW5kYXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmCV9NQUNISU5FX0JVU19ETUFf
SU1QTF9IXworI2RlZmluZQlfTUFDSElORV9CVVNfRE1BX0lNUExfSF8KKworc3RydWN0IGJ1c19k
bWFfdGFnX2NvbW1vbiB7CisJc3RydWN0IGJ1c19kbWFfaW1wbCAqaW1wbDsKKwlzdHJ1Y3QgYnVz
X2RtYV90YWdfY29tbW9uICpwYXJlbnQ7CisJYnVzX3NpemVfdAkgIGFsaWdubWVudDsKKwlidXNf
YWRkcl90CSAgYm91bmRhcnk7CisJYnVzX2FkZHJfdAkgIGxvd2FkZHI7CisJYnVzX2FkZHJfdAkg
IGhpZ2hhZGRyOworCWJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlcjsKKwl2b2lkCQkgKmZpbHRlcmFy
ZzsKKwlidXNfc2l6ZV90CSAgbWF4c2l6ZTsKKwl1X2ludAkJICBuc2VnbWVudHM7CisJYnVzX3Np
emVfdAkgIG1heHNlZ3N6OworCWludAkJICBmbGFnczsKKwlidXNfZG1hX2xvY2tfdAkgKmxvY2tm
dW5jOworCXZvaWQJCSAqbG9ja2Z1bmNhcmc7CisJaW50CQkgIHJlZl9jb3VudDsKK307CisKK3N0
cnVjdCBidXNfZG1hX2ltcGwgeworCWludCAoKnRhZ19jcmVhdGUpKGJ1c19kbWFfdGFnX3QgcGFy
ZW50LAorCSAgICBidXNfc2l6ZV90IGFsaWdubWVudCwgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVz
X2FkZHJfdCBsb3dhZGRyLAorCSAgICBidXNfYWRkcl90IGhpZ2hhZGRyLCBidXNfZG1hX2ZpbHRl
cl90ICpmaWx0ZXIsCisJICAgIHZvaWQgKmZpbHRlcmFyZywgYnVzX3NpemVfdCBtYXhzaXplLCBp
bnQgbnNlZ21lbnRzLAorCSAgICBidXNfc2l6ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsIGJ1c19k
bWFfbG9ja190ICpsb2NrZnVuYywKKwkgICAgdm9pZCAqbG9ja2Z1bmNhcmcsIGJ1c19kbWFfdGFn
X3QgKmRtYXQpOworCWludCAoKnRhZ19kZXN0cm95KShidXNfZG1hX3RhZ190IGRtYXQpOworCWlu
dCAoKm1hcF9jcmVhdGUpKGJ1c19kbWFfdGFnX3QgZG1hdCwgaW50IGZsYWdzLCBidXNfZG1hbWFw
X3QgKm1hcHApOworCWludCAoKm1hcF9kZXN0cm95KShidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19k
bWFtYXBfdCBtYXApOworCWludCAoKm1lbV9hbGxvYykoYnVzX2RtYV90YWdfdCBkbWF0LCB2b2lk
KiogdmFkZHIsIGludCBmbGFncywKKwkgICAgYnVzX2RtYW1hcF90ICptYXBwKTsKKwl2b2lkICgq
bWVtX2ZyZWUpKGJ1c19kbWFfdGFnX3QgZG1hdCwgdm9pZCAqdmFkZHIsIGJ1c19kbWFtYXBfdCBt
YXApOworCWludCAoKmxvYWRfbWEpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1h
cCwKKwkgICAgc3RydWN0IHZtX3BhZ2UgKiptYSwgYnVzX3NpemVfdCB0bGVuLCBpbnQgbWFfb2Zm
cywgaW50IGZsYWdzLAorCSAgICBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50ICpzZWdwKTsK
KwlpbnQgKCpsb2FkX3BoeXMpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwK
KwkgICAgdm1fcGFkZHJfdCBidWYsIGJ1c19zaXplX3QgYnVmbGVuLCBpbnQgZmxhZ3MsCisJICAg
IGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgKnNlZ3ApOworCWludCAoKmxvYWRfYnVmZmVy
KShidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsCisJICAgIHZvaWQgKmJ1Ziwg
YnVzX3NpemVfdCBidWZsZW4sIHBtYXBfdCBwbWFwLCBpbnQgZmxhZ3MsCisJICAgIGJ1c19kbWFf
c2VnbWVudF90ICpzZWdzLCBpbnQgKnNlZ3ApOworCXZvaWQgKCptYXBfd2FpdG9rKShidXNfZG1h
X3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsCisJICAgIHN0cnVjdCBtZW1kZXNjICptZW0s
IGJ1c19kbWFtYXBfY2FsbGJhY2tfdCAqY2FsbGJhY2ssCisJICAgIHZvaWQgKmNhbGxiYWNrX2Fy
Zyk7CisJYnVzX2RtYV9zZWdtZW50X3QgKigqbWFwX2NvbXBsZXRlKShidXNfZG1hX3RhZ190IGRt
YXQsIGJ1c19kbWFtYXBfdCBtYXAsCisJICAgIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQg
bnNlZ3MsIGludCBlcnJvcik7CisJdm9pZCAoKm1hcF91bmxvYWQpKGJ1c19kbWFfdGFnX3QgZG1h
dCwgYnVzX2RtYW1hcF90IG1hcCk7CisJdm9pZCAoKm1hcF9zeW5jKShidXNfZG1hX3RhZ190IGRt
YXQsIGJ1c19kbWFtYXBfdCBtYXAsCisJICAgIGJ1c19kbWFzeW5jX29wX3Qgb3ApOworfTsKKwor
dm9pZCBidXNfZG1hX2RmbHRfbG9jayh2b2lkICphcmcsIGJ1c19kbWFfbG9ja19vcF90IG9wKTsK
K2ludCBidXNfZG1hX3J1bl9maWx0ZXIoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqZG1hdCwg
YnVzX2FkZHJfdCBwYWRkcik7CitpbnQgY29tbW9uX2J1c19kbWFfdGFnX2NyZWF0ZShzdHJ1Y3Qg
YnVzX2RtYV90YWdfY29tbW9uICpwYXJlbnQsCisgICAgYnVzX3NpemVfdCBhbGlnbm1lbnQsCisg
ICAgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVzX2FkZHJfdCBsb3dhZGRyLCBidXNfYWRkcl90IGhp
Z2hhZGRyLAorICAgIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwgdm9pZCAqZmlsdGVyYXJnLCBi
dXNfc2l6ZV90IG1heHNpemUsCisgICAgaW50IG5zZWdtZW50cywgYnVzX3NpemVfdCBtYXhzZWdz
eiwgaW50IGZsYWdzLCBidXNfZG1hX2xvY2tfdCAqbG9ja2Z1bmMsCisgICAgdm9pZCAqbG9ja2Z1
bmNhcmcsIHNpemVfdCBzeiwgdm9pZCAqKmRtYXQpOworCitleHRlcm4gc3RydWN0IGJ1c19kbWFf
aW1wbCBidXNfZG1hX2JvdW5jZV9pbXBsOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3N5cy9hcm02
NC9hcm02NC9idXNkbWFfbWFjaGRlcC5jIGIvc3lzL2FybTY0L2FybTY0L2J1c2RtYV9tYWNoZGVw
LmMKLS0tIGEvc3lzL2FybTY0L2FybTY0L2J1c2RtYV9tYWNoZGVwLmMKKysrIGIvc3lzL2FybTY0
L2FybTY0L2J1c2RtYV9tYWNoZGVwLmMKQEAgLTEsMjIgKzEsMjkyIEBACi0vKiAkRnJlZUJTRCQg
Ki8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4IEp1c3RpbiBULiBHaWJicy4KKyAq
IENvcHlyaWdodCAoYykgMjAxMywgMjAxNSBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBL
b25zdGFudGluIEJlbG91c292IDxraWJARnJlZUJTRC5vcmc+CisgKiB1bmRlciBzcG9uc29yc2hp
cCBmcm9tIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUG9ydGlvbnMgb2YgdGhpcyBz
b2Z0d2FyZSB3ZXJlIGRldmVsb3BlZCBieSBTZW1paGFsZgorICogdW5kZXIgc3BvbnNvcnNoaXAg
b2YgdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBt
b2RpZmljYXRpb24sIGltbWVkaWF0ZWx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCisg
KiAyLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgog
X19GQlNESUQoIiRGcmVlQlNEJCIpOwogCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVk
ZSA8c3lzL3N5c3RtLmg+Ci0KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz
L2J1cy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+Cisj
aW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbWVtZGVzYy5oPgorI2luY2x1ZGUg
PHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KICNpbmNsdWRlIDx2bS92bS5oPgor
I2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgogI2luY2x1ZGUgPHZtL3BtYXAuaD4KIAogI2luY2x1
ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8YXJtNjQvaW5jbHVkZS9idXNfZG1hX2ltcGwu
aD4KKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBtYW5pcHVsYXRpbmcgZHJpdmVy
IGxvY2tzIGZyb20gYnVzZG1hIChkdXJpbmcKKyAqIGJ1c2RtYV9zd2ksIGZvciBleGFtcGxlKS4g
IERyaXZlcnMgdGhhdCBkb24ndCBwcm92aWRlIHRoZWlyIG93biBsb2NrcworICogc2hvdWxkIHNw
ZWNpZnkgJkdpYW50IHRvIGRtYXQtPmxvY2tmdW5jYXJnLiAgRHJpdmVycyB0aGF0IHVzZSB0aGVp
ciBvd24KKyAqIG5vbi1tdXRleCBsb2NraW5nIHNjaGVtZSBkb24ndCBoYXZlIHRvIHVzZSB0aGlz
IGF0IGFsbC4KKyAqLwordm9pZAorYnVzZG1hX2xvY2tfbXV0ZXgodm9pZCAqYXJnLCBidXNfZG1h
X2xvY2tfb3BfdCBvcCkKK3sKKwlzdHJ1Y3QgbXR4ICpkbXR4OworCisJZG10eCA9IChzdHJ1Y3Qg
bXR4ICopYXJnOworCXN3aXRjaCAob3ApIHsKKwljYXNlIEJVU19ETUFfTE9DSzoKKwkJbXR4X2xv
Y2soZG10eCk7CisJCWJyZWFrOworCWNhc2UgQlVTX0RNQV9VTkxPQ0s6CisJCW10eF91bmxvY2so
ZG10eCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBhbmljKCJVbmtub3duIG9wZXJhdGlvbiAw
eCV4IGZvciBidXNkbWFfbG9ja19tdXRleCEiLCBvcCk7CisJfQorfQorCisvKgorICogZGZsdF9s
b2NrIHNob3VsZCBuZXZlciBnZXQgY2FsbGVkLiAgSXQgZ2V0cyBwdXQgaW50byB0aGUgZG1hIHRh
ZyB3aGVuCisgKiBsb2NrZnVuYyA9PSBOVUxMLCB3aGljaCBpcyBvbmx5IHZhbGlkIGlmIHRoZSBt
YXBzIHRoYXQgYXJlIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIHRhZyBhcmUgbWVhbnQgdG8gbmV2
ZXIgYmUgZGVmZXJlZC4KKyAqIFhYWCBTaG91bGQgaGF2ZSBhIHdheSB0byBpZGVudGlmeSB3aGlj
aCBkcml2ZXIgaXMgcmVzcG9uc2libGUgaGVyZS4KKyAqLwordm9pZAorYnVzX2RtYV9kZmx0X2xv
Y2sodm9pZCAqYXJnLCBidXNfZG1hX2xvY2tfb3BfdCBvcCkKK3sKKworCXBhbmljKCJkcml2ZXIg
ZXJyb3I6IGJ1c2RtYSBkZmx0X2xvY2sgY2FsbGVkIik7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1
ZSBpZiBhIG1hdGNoIGlzIG1hZGUuCisgKgorICogVG8gZmluZCBhIG1hdGNoIHdhbGsgdGhlIGNo
YWluIG9mIGJ1c19kbWFfdGFnX3QncyBsb29raW5nIGZvciAncGFkZHInLgorICoKKyAqIElmIHBh
ZGRyIGlzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBkbWEgdGFnIHRoZW4gY2FsbCB0aGUgZmls
dGVyIGNhbGxiYWNrCisgKiB0byBjaGVjayBmb3IgYSBtYXRjaCwgaWYgdGhlcmUgaXMgbm8gZmls
dGVyIGNhbGxiYWNrIHRoZW4gYXNzdW1lIGEgbWF0Y2guCisgKi8KK2ludAorYnVzX2RtYV9ydW5f
ZmlsdGVyKHN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjLCBidXNfYWRkcl90IHBhZGRyKQor
eworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSAwOworCWRvIHsKKwkJaWYgKCgocGFkZHIgPiB0
Yy0+bG93YWRkciAmJiBwYWRkciA8PSB0Yy0+aGlnaGFkZHIpIHx8CisJCSAgICAoKHBhZGRyICYg
KHRjLT5hbGlnbm1lbnQgLSAxKSkgIT0gMCkpICYmCisJCSAgICAodGMtPmZpbHRlciA9PSBOVUxM
IHx8CisJCSAgICAoKnRjLT5maWx0ZXIpKHRjLT5maWx0ZXJhcmcsIHBhZGRyKSAhPSAwKSkKKwkJ
CXJldHZhbCA9IDE7CisKKwkJdGMgPSB0Yy0+cGFyZW50OwkJCisJfSB3aGlsZSAocmV0dmFsID09
IDAgJiYgdGMgIT0gTlVMTCk7CisJcmV0dXJuIChyZXR2YWwpOworfQorCitpbnQKK2NvbW1vbl9i
dXNfZG1hX3RhZ19jcmVhdGUoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqcGFyZW50LAorICAg
IGJ1c19zaXplX3QgYWxpZ25tZW50LCBidXNfYWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxv
d2FkZHIsCisgICAgYnVzX2FkZHJfdCBoaWdoYWRkciwgYnVzX2RtYV9maWx0ZXJfdCAqZmlsdGVy
LCB2b2lkICpmaWx0ZXJhcmcsCisgICAgYnVzX3NpemVfdCBtYXhzaXplLCBpbnQgbnNlZ21lbnRz
LCBidXNfc2l6ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsCisgICAgYnVzX2RtYV9sb2NrX3QgKmxv
Y2tmdW5jLCB2b2lkICpsb2NrZnVuY2FyZywgc2l6ZV90IHN6LCB2b2lkICoqZG1hdCkKK3sKKwl2
b2lkICpuZXd0YWc7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqY29tbW9uOworCisJS0FT
U0VSVChzeiA+PSBzaXplb2Yoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiksICgic3oiKSk7CisJ
LyogQmFzaWMgc2FuaXR5IGNoZWNraW5nICovCisJaWYgKGJvdW5kYXJ5ICE9IDAgJiYgYm91bmRh
cnkgPCBtYXhzZWdzeikKKwkJbWF4c2Vnc3ogPSBib3VuZGFyeTsKKwlpZiAobWF4c2Vnc3ogPT0g
MCkKKwkJcmV0dXJuIChFSU5WQUwpOworCS8qIFJldHVybiBhIE5VTEwgdGFnIG9uIGZhaWx1cmUg
Ki8KKwkqZG1hdCA9IE5VTEw7CisKKwluZXd0YWcgPSBtYWxsb2Moc3osIE1fREVWQlVGLCBNX1pF
Uk8gfCBNX05PV0FJVCk7CisJaWYgKG5ld3RhZyA9PSBOVUxMKSB7CisJCUNUUjQoS1RSX0JVU0RN
QSwgIiVzIHJldHVybmVkIHRhZyAlcCB0YWcgZmxhZ3MgMHgleCBlcnJvciAlZCIsCisJCSAgICBf
X2Z1bmNfXywgbmV3dGFnLCAwLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCisJ
Y29tbW9uID0gbmV3dGFnOworCWNvbW1vbi0+aW1wbCA9ICZidXNfZG1hX2JvdW5jZV9pbXBsOwor
CWNvbW1vbi0+cGFyZW50ID0gcGFyZW50OworCWNvbW1vbi0+YWxpZ25tZW50ID0gYWxpZ25tZW50
OworCWNvbW1vbi0+Ym91bmRhcnkgPSBib3VuZGFyeTsKKwljb21tb24tPmxvd2FkZHIgPSB0cnVu
Y19wYWdlKCh2bV9wYWRkcl90KWxvd2FkZHIpICsgKFBBR0VfU0laRSAtIDEpOworCWNvbW1vbi0+
aGlnaGFkZHIgPSB0cnVuY19wYWdlKCh2bV9wYWRkcl90KWhpZ2hhZGRyKSArIChQQUdFX1NJWkUg
LSAxKTsKKwljb21tb24tPmZpbHRlciA9IGZpbHRlcjsKKwljb21tb24tPmZpbHRlcmFyZyA9IGZp
bHRlcmFyZzsKKwljb21tb24tPm1heHNpemUgPSBtYXhzaXplOworCWNvbW1vbi0+bnNlZ21lbnRz
ID0gbnNlZ21lbnRzOworCWNvbW1vbi0+bWF4c2Vnc3ogPSBtYXhzZWdzejsKKwljb21tb24tPmZs
YWdzID0gZmxhZ3M7CisJY29tbW9uLT5yZWZfY291bnQgPSAxOyAvKiBDb3VudCBvdXJzZWxmICov
CisJaWYgKGxvY2tmdW5jICE9IE5VTEwpIHsKKwkJY29tbW9uLT5sb2NrZnVuYyA9IGxvY2tmdW5j
OworCQljb21tb24tPmxvY2tmdW5jYXJnID0gbG9ja2Z1bmNhcmc7CisJfSBlbHNlIHsKKwkJY29t
bW9uLT5sb2NrZnVuYyA9IGJ1c19kbWFfZGZsdF9sb2NrOworCQljb21tb24tPmxvY2tmdW5jYXJn
ID0gTlVMTDsKKwl9CisKKwkvKiBUYWtlIGludG8gYWNjb3VudCBhbnkgcmVzdHJpY3Rpb25zIGlt
cG9zZWQgYnkgb3VyIHBhcmVudCB0YWcgKi8KKwlpZiAocGFyZW50ICE9IE5VTEwpIHsKKwkJY29t
bW9uLT5pbXBsID0gcGFyZW50LT5pbXBsOworCQljb21tb24tPmxvd2FkZHIgPSBNSU4ocGFyZW50
LT5sb3dhZGRyLCBjb21tb24tPmxvd2FkZHIpOworCQljb21tb24tPmhpZ2hhZGRyID0gTUFYKHBh
cmVudC0+aGlnaGFkZHIsIGNvbW1vbi0+aGlnaGFkZHIpOworCQlpZiAoY29tbW9uLT5ib3VuZGFy
eSA9PSAwKQorCQkJY29tbW9uLT5ib3VuZGFyeSA9IHBhcmVudC0+Ym91bmRhcnk7CisJCWVsc2Ug
aWYgKHBhcmVudC0+Ym91bmRhcnkgIT0gMCkgeworCQkJY29tbW9uLT5ib3VuZGFyeSA9IE1JTihw
YXJlbnQtPmJvdW5kYXJ5LAorCQkJICAgIGNvbW1vbi0+Ym91bmRhcnkpOworCQl9CisJCWlmIChj
b21tb24tPmZpbHRlciA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogU2hvcnQgY2lyY3VpdCBsb29r
aW5nIGF0IG91ciBwYXJlbnQgZGlyZWN0bHkKKwkJCSAqIHNpbmNlIHdlIGhhdmUgZW5jYXBzdWxh
dGVkIGFsbCBvZiBpdHMgaW5mb3JtYXRpb24KKwkJCSAqLworCQkJY29tbW9uLT5maWx0ZXIgPSBw
YXJlbnQtPmZpbHRlcjsKKwkJCWNvbW1vbi0+ZmlsdGVyYXJnID0gcGFyZW50LT5maWx0ZXJhcmc7
CisJCQljb21tb24tPnBhcmVudCA9IHBhcmVudC0+cGFyZW50OworCQl9CisJCWF0b21pY19hZGRf
aW50KCZwYXJlbnQtPnJlZl9jb3VudCwgMSk7CisJfQorCSpkbWF0ID0gY29tbW9uOworCXJldHVy
biAoMCk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIGRldmljZSBzcGVjaWZpYyBkbWFfdGFnLgor
ICovCitpbnQKK2J1c19kbWFfdGFnX2NyZWF0ZShidXNfZG1hX3RhZ190IHBhcmVudCwgYnVzX3Np
emVfdCBhbGlnbm1lbnQsCisgICAgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVzX2FkZHJfdCBsb3dh
ZGRyLCBidXNfYWRkcl90IGhpZ2hhZGRyLAorICAgIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwg
dm9pZCAqZmlsdGVyYXJnLCBidXNfc2l6ZV90IG1heHNpemUsCisgICAgaW50IG5zZWdtZW50cywg
YnVzX3NpemVfdCBtYXhzZWdzeiwgaW50IGZsYWdzLCBidXNfZG1hX2xvY2tfdCAqbG9ja2Z1bmMs
CisgICAgdm9pZCAqbG9ja2Z1bmNhcmcsIGJ1c19kbWFfdGFnX3QgKmRtYXQpCit7CisJc3RydWN0
IGJ1c19kbWFfdGFnX2NvbW1vbiAqdGM7CisJaW50IGVycm9yOworCisJaWYgKHBhcmVudCA9PSBO
VUxMKSB7CisJCWVycm9yID0gYnVzX2RtYV9ib3VuY2VfaW1wbC50YWdfY3JlYXRlKHBhcmVudCwg
YWxpZ25tZW50LAorCQkgICAgYm91bmRhcnksIGxvd2FkZHIsIGhpZ2hhZGRyLCBmaWx0ZXIsIGZp
bHRlcmFyZywgbWF4c2l6ZSwKKwkJICAgIG5zZWdtZW50cywgbWF4c2Vnc3osIGZsYWdzLCBsb2Nr
ZnVuYywgbG9ja2Z1bmNhcmcsIGRtYXQpOworCX0gZWxzZSB7CisJCXRjID0gKHN0cnVjdCBidXNf
ZG1hX3RhZ19jb21tb24gKilwYXJlbnQ7CisJCWVycm9yID0gdGMtPmltcGwtPnRhZ19jcmVhdGUo
cGFyZW50LCBhbGlnbm1lbnQsCisJCSAgICBib3VuZGFyeSwgbG93YWRkciwgaGlnaGFkZHIsIGZp
bHRlciwgZmlsdGVyYXJnLCBtYXhzaXplLAorCQkgICAgbnNlZ21lbnRzLCBtYXhzZWdzeiwgZmxh
Z3MsIGxvY2tmdW5jLCBsb2NrZnVuY2FyZywgZG1hdCk7CisJfQorCXJldHVybiAoZXJyb3IpOwor
fQorCitpbnQKK2J1c19kbWFfdGFnX2Rlc3Ryb3koYnVzX2RtYV90YWdfdCBkbWF0KQoreworCXN0
cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFn
X2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+dGFnX2Rlc3Ryb3koZG1hdCkpOwor
fQorCisvKgorICogQWxsb2NhdGUgYSBoYW5kbGUgZm9yIG1hcHBpbmcgZnJvbSBrdmEvdXZhL3Bo
eXNpY2FsCisgKiBhZGRyZXNzIHNwYWNlIGludG8gYnVzIGRldmljZSBzcGFjZS4KKyAqLworaW50
CitidXNfZG1hbWFwX2NyZWF0ZShidXNfZG1hX3RhZ190IGRtYXQsIGludCBmbGFncywgYnVzX2Rt
YW1hcF90ICptYXBwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMg
PSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+
bWFwX2NyZWF0ZShkbWF0LCBmbGFncywgbWFwcCkpOworfQorCisvKgorICogRGVzdHJveSBhIGhh
bmRsZSBmb3IgbWFwcGluZyBmcm9tIGt2YS91dmEvcGh5c2ljYWwKKyAqIGFkZHJlc3Mgc3BhY2Ug
aW50byBidXMgZGV2aWNlIHNwYWNlLgorICovCitpbnQKK2J1c19kbWFtYXBfZGVzdHJveShidXNf
ZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXApCit7CisJc3RydWN0IGJ1c19kbWFfdGFn
X2NvbW1vbiAqdGM7CisKKwl0YyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uICopZG1hdDsK
KwlyZXR1cm4gKHRjLT5pbXBsLT5tYXBfZGVzdHJveShkbWF0LCBtYXApKTsKK30KKworCisvKgor
ICogQWxsb2NhdGUgYSBwaWVjZSBvZiBtZW1vcnkgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgbWFw
cGVkIGludG8KKyAqIGJ1cyBkZXZpY2Ugc3BhY2UgYmFzZWQgb24gdGhlIGNvbnN0cmFpbnRzIGxp
c3RlZCBpbiB0aGUgZG1hIHRhZy4KKyAqIEEgZG1hbWFwIHRvIGZvciB1c2Ugd2l0aCBkbWFtYXBf
bG9hZCBpcyBhbHNvIGFsbG9jYXRlZC4KKyAqLworaW50CitidXNfZG1hbWVtX2FsbG9jKGJ1c19k
bWFfdGFnX3QgZG1hdCwgdm9pZCoqIHZhZGRyLCBpbnQgZmxhZ3MsCisgICAgYnVzX2RtYW1hcF90
ICptYXBwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3Ry
dWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bWVtX2Fs
bG9jKGRtYXQsIHZhZGRyLCBmbGFncywgbWFwcCkpOworfQorCisvKgorICogRnJlZSBhIHBpZWNl
IG9mIG1lbW9yeSBhbmQgaXQncyBhbGxvY2lhdGVkIGRtYW1hcCwgdGhhdCB3YXMgYWxsb2NhdGVk
CisgKiB2aWEgYnVzX2RtYW1lbV9hbGxvYy4gIE1ha2UgdGhlIHNhbWUgY2hvaWNlIGZvciBmcmVl
L2NvbnRpZ2ZyZWUuCisgKi8KK3ZvaWQKK2J1c19kbWFtZW1fZnJlZShidXNfZG1hX3RhZ190IGRt
YXQsIHZvaWQgKnZhZGRyLCBidXNfZG1hbWFwX3QgbWFwKQoreworCXN0cnVjdCBidXNfZG1hX3Rh
Z19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7
CisJdGMtPmltcGwtPm1lbV9mcmVlKGRtYXQsIHZhZGRyLCBtYXApOworfQogCiBpbnQKIF9idXNf
ZG1hbWFwX2xvYWRfcGh5cyhidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsIHZt
X3BhZGRyX3QgYnVmLAogICAgIGJ1c19zaXplX3QgYnVmbGVuLCBpbnQgZmxhZ3MsIGJ1c19kbWFf
c2VnbWVudF90ICpzZWdzLCBpbnQgKnNlZ3ApCiB7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1v
biAqdGM7CiAKLQlwYW5pYygiX2J1c19kbWFtYXBfbG9hZF9waHlzIik7CisJdGMgPSAoc3RydWN0
IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bG9hZF9waHlz
KGRtYXQsIG1hcCwgYnVmLCBidWZsZW4sIGZsYWdzLCBzZWdzLAorCSAgICBzZWdwKSk7CiB9CiAK
IGludApAQCAtMjQsOCArMjk0LDExIEBACiAgICAgYnVzX3NpemVfdCB0bGVuLCBpbnQgbWFfb2Zm
cywgaW50IGZsYWdzLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywKICAgICBpbnQgKnNlZ3ApCiB7
CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqdGM7CiAKLQlwYW5pYygiX2J1c19kbWFtYXBf
bG9hZF9tYSIpOworCXRjID0gKHN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKilkbWF0OworCXJl
dHVybiAodGMtPmltcGwtPmxvYWRfbWEoZG1hdCwgbWFwLCBtYSwgdGxlbiwgbWFfb2ZmcywgZmxh
Z3MsCisJICAgIHNlZ3MsIHNlZ3ApKTsKIH0KIAogaW50CkBAIC0zMywzNiArMzA2LDUwIEBACiAg
ICAgYnVzX3NpemVfdCBidWZsZW4sIHBtYXBfdCBwbWFwLCBpbnQgZmxhZ3MsIGJ1c19kbWFfc2Vn
bWVudF90ICpzZWdzLAogICAgIGludCAqc2VncCkKIHsKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfY29t
bW9uICp0YzsKIAotCXBhbmljKCJfYnVzX2RtYW1hcF9sb2FkX2J1ZmZlciIpOworCXRjID0gKHN0
cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKilkbWF0OworCXJldHVybiAodGMtPmltcGwtPmxvYWRf
YnVmZmVyKGRtYXQsIG1hcCwgYnVmLCBidWZsZW4sIHBtYXAsIGZsYWdzLCBzZWdzLAorCSAgICBz
ZWdwKSk7CiB9CiAKIHZvaWQKIF9fYnVzX2RtYW1hcF93YWl0b2soYnVzX2RtYV90YWdfdCBkbWF0
LCBidXNfZG1hbWFwX3QgbWFwLAogICAgIHN0cnVjdCBtZW1kZXNjICptZW0sIGJ1c19kbWFtYXBf
Y2FsbGJhY2tfdCAqY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2FyZykKIHsKKwlzdHJ1Y3QgYnVz
X2RtYV90YWdfY29tbW9uICp0YzsKIAotCXBhbmljKCJfX2J1c19kbWFtYXBfd2FpdG9rIik7CisJ
dGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJdGMtPmltcGwtPm1hcF93
YWl0b2soZG1hdCwgbWFwLCBtZW0sIGNhbGxiYWNrLCBjYWxsYmFja19hcmcpOwogfQogCiBidXNf
ZG1hX3NlZ21lbnRfdCAqCiBfYnVzX2RtYW1hcF9jb21wbGV0ZShidXNfZG1hX3RhZ190IGRtYXQs
IGJ1c19kbWFtYXBfdCBtYXAsCiAgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2Vn
cywgaW50IGVycm9yKQogeworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOwogCi0JcGFu
aWMoIl9idXNfZG1hbWFwX2NvbXBsZXRlIik7CisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2Nv
bW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bWFwX2NvbXBsZXRlKGRtYXQsIG1hcCwg
c2VncywgbnNlZ3MsIGVycm9yKSk7CiB9CiAKKy8qCisgKiBSZWxlYXNlIHRoZSBtYXBwaW5nIGhl
bGQgYnkgbWFwLgorICovCiB2b2lkCiBfYnVzX2RtYW1hcF91bmxvYWQoYnVzX2RtYV90YWdfdCBk
bWF0LCBidXNfZG1hbWFwX3QgbWFwKQogeworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRj
OwogCi0JcGFuaWMoIl9idXNfZG1hbWFwX3VubG9hZCIpOworCXRjID0gKHN0cnVjdCBidXNfZG1h
X3RhZ19jb21tb24gKilkbWF0OworCXRjLT5pbXBsLT5tYXBfdW5sb2FkKGRtYXQsIG1hcCk7CiB9
CiAKIHZvaWQKIF9idXNfZG1hbWFwX3N5bmMoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFw
X3QgbWFwLCBidXNfZG1hc3luY19vcF90IG9wKQogeworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21t
b24gKnRjOwogCi0JcGFuaWMoIl9idXNfZG1hbWFwX3N5bmMiKTsKKwl0YyA9IChzdHJ1Y3QgYnVz
X2RtYV90YWdfY29tbW9uICopZG1hdDsKKwl0Yy0+aW1wbC0+bWFwX3N5bmMoZG1hdCwgbWFwLCBv
cCk7CiB9CmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvYnVzZG1hX2JvdW5jZS5jIGIvc3lz
L2FybTY0L2FybTY0L2J1c2RtYV9ib3VuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl
di9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9idXNkbWFfYm91bmNlLmMKQEAgLTAsMCArMSwx
MDg2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCBKdXN0aW4gVC4gR2liYnMu
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZGV2
ZWxvcGVkIGJ5IFNlbWloYWxmCisgKiB1bmRlciBzcG9uc29yc2hpcCBvZiB0aGUgRnJlZUJTRCBG
b3VuZGF0aW9uLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgaW1t
ZWRpYXRlbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KKyAqIDIuIFRoZSBuYW1lIG9m
IHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVC
U0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4K
KyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUg
PHN5cy9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lz
L2t0ci5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNp
bmNsdWRlIDxzeXMvbWVtZGVzYy5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUg
PHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisKKyNpbmNsdWRlIDx2bS92bS5o
PgorI2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgorI2luY2x1ZGUgPHZtL3ZtX2tlcm4uaD4KKyNp
bmNsdWRlIDx2bS92bV9wYWdlLmg+CisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+CisKKyNpbmNsdWRl
IDxtYWNoaW5lL2F0b21pYy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8
bWFjaGluZS9tZF92YXIuaD4KKyNpbmNsdWRlIDxhcm02NC9pbmNsdWRlL2J1c19kbWFfaW1wbC5o
PgorCisjZGVmaW5lIE1BWF9CUEFHRVMgNDA5NgorCitlbnVtIHsKKwlCVVNfRE1BX0NPVUxEX0JP
VU5DRQk9IDB4MDEsCisJQlVTX0RNQV9NSU5fQUxMT0NfQ09NUAk9IDB4MDIsCisJQlVTX0RNQV9L
TUVNX0FMTE9DCT0gMHgwNCwKK307CisKK3N0cnVjdCBib3VuY2Vfem9uZTsKKworc3RydWN0IGJ1
c19kbWFfdGFnIHsKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uIGNvbW1vbjsKKwlpbnQJCQlt
YXBfY291bnQ7CisJaW50CQkJYm91bmNlX2ZsYWdzOworCWJ1c19kbWFfc2VnbWVudF90CSpzZWdt
ZW50czsKKwlzdHJ1Y3QgYm91bmNlX3pvbmUJKmJvdW5jZV96b25lOworfTsKKworc3RydWN0IGJv
dW5jZV9wYWdlIHsKKwl2bV9vZmZzZXRfdAl2YWRkcjsJCS8qIGt2YSBvZiBib3VuY2UgYnVmZmVy
ICovCisJYnVzX2FkZHJfdAlidXNhZGRyOwkvKiBQaHlzaWNhbCBhZGRyZXNzICovCisJdm1fb2Zm
c2V0X3QJZGF0YXZhZGRyOwkvKiBrdmEgb2YgY2xpZW50IGRhdGEgKi8KKwlidXNfYWRkcl90CWRh
dGFhZGRyOwkvKiBjbGllbnQgcGh5c2ljYWwgYWRkcmVzcyAqLworCWJ1c19zaXplX3QJZGF0YWNv
dW50OwkvKiBjbGllbnQgZGF0YSBjb3VudCAqLworCVNUQUlMUV9FTlRSWShib3VuY2VfcGFnZSkg
bGlua3M7Cit9OworCitpbnQgYnVzZG1hX3N3aV9wZW5kaW5nOworCitzdHJ1Y3QgYm91bmNlX3pv
bmUgeworCVNUQUlMUV9FTlRSWShib3VuY2Vfem9uZSkgbGlua3M7CisJU1RBSUxRX0hFQUQoYnBf
bGlzdCwgYm91bmNlX3BhZ2UpIGJvdW5jZV9wYWdlX2xpc3Q7CisJaW50CQl0b3RhbF9icGFnZXM7
CisJaW50CQlmcmVlX2JwYWdlczsKKwlpbnQJCXJlc2VydmVkX2JwYWdlczsKKwlpbnQJCWFjdGl2
ZV9icGFnZXM7CisJaW50CQl0b3RhbF9ib3VuY2VkOworCWludAkJdG90YWxfZGVmZXJyZWQ7CisJ
aW50CQltYXBfY291bnQ7CisJYnVzX3NpemVfdAlhbGlnbm1lbnQ7CisJYnVzX2FkZHJfdAlsb3dh
ZGRyOworCWNoYXIJCXpvbmVpZFs4XTsKKwljaGFyCQlsb3dhZGRyaWRbMjBdOworCXN0cnVjdCBz
eXNjdGxfY3R4X2xpc3Qgc3lzY3RsX3RyZWU7CisJc3RydWN0IHN5c2N0bF9vaWQgKnN5c2N0bF90
cmVlX3RvcDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXR4IGJvdW5jZV9sb2NrOworc3RhdGljIGlu
dCB0b3RhbF9icGFnZXM7CitzdGF0aWMgaW50IGJ1c2RtYV96b25lY291bnQ7CitzdGF0aWMgU1RB
SUxRX0hFQUQoLCBib3VuY2Vfem9uZSkgYm91bmNlX3pvbmVfbGlzdDsKKworc3RhdGljIFNZU0NU
TF9OT0RFKF9odywgT0lEX0FVVE8sIGJ1c2RtYSwgQ1RMRkxBR19SRCwgMCwgIkJ1c2RtYSBwYXJh
bWV0ZXJzIik7CitTWVNDVExfSU5UKF9od19idXNkbWEsIE9JRF9BVVRPLCB0b3RhbF9icGFnZXMs
IENUTEZMQUdfUkQsICZ0b3RhbF9icGFnZXMsIDAsCisJICAgIlRvdGFsIGJvdW5jZSBwYWdlcyIp
OworCitzdHJ1Y3QgYnVzX2RtYW1hcCB7CisJc3RydWN0IGJwX2xpc3QJICAgICAgIGJwYWdlczsK
KwlpbnQJCSAgICAgICBwYWdlc25lZWRlZDsKKwlpbnQJCSAgICAgICBwYWdlc3Jlc2VydmVkOwor
CWJ1c19kbWFfdGFnX3QJICAgICAgIGRtYXQ7CisJc3RydWN0IG1lbWRlc2MJICAgICAgIG1lbTsK
KwlidXNfZG1hbWFwX2NhbGxiYWNrX3QgKmNhbGxiYWNrOworCXZvaWQJCSAgICAgICpjYWxsYmFj
a19hcmc7CisJU1RBSUxRX0VOVFJZKGJ1c19kbWFtYXApIGxpbmtzOworfTsKKworc3RhdGljIFNU
QUlMUV9IRUFEKCwgYnVzX2RtYW1hcCkgYm91bmNlX21hcF93YWl0aW5nbGlzdDsKK3N0YXRpYyBT
VEFJTFFfSEVBRCgsIGJ1c19kbWFtYXApIGJvdW5jZV9tYXBfY2FsbGJhY2tsaXN0Oworc3RhdGlj
IHN0cnVjdCBidXNfZG1hbWFwIG5vYm91bmNlX2RtYW1hcDsKKworc3RhdGljIHZvaWQgaW5pdF9i
b3VuY2VfcGFnZXModm9pZCAqZHVtbXkpOworc3RhdGljIGludCBhbGxvY19ib3VuY2Vfem9uZShi
dXNfZG1hX3RhZ190IGRtYXQpOworc3RhdGljIGludCBhbGxvY19ib3VuY2VfcGFnZXMoYnVzX2Rt
YV90YWdfdCBkbWF0LCB1X2ludCBudW1wYWdlcyk7CitzdGF0aWMgaW50IHJlc2VydmVfYm91bmNl
X3BhZ2VzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkJCQlpbnQgY29t
bWl0KTsKK3N0YXRpYyBidXNfYWRkcl90IGFkZF9ib3VuY2VfcGFnZShidXNfZG1hX3RhZ190IGRt
YXQsIGJ1c19kbWFtYXBfdCBtYXAsCisJCQkJICB2bV9vZmZzZXRfdCB2YWRkciwgYnVzX2FkZHJf
dCBhZGRyLAorCQkJCSAgYnVzX3NpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIGZyZWVfYm91bmNl
X3BhZ2UoYnVzX2RtYV90YWdfdCBkbWF0LCBzdHJ1Y3QgYm91bmNlX3BhZ2UgKmJwYWdlKTsKK2lu
dCBydW5fZmlsdGVyKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2FkZHJfdCBwYWRkcik7CitzdGF0
aWMgdm9pZCBfYnVzX2RtYW1hcF9jb3VudF9wYWdlcyhidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19k
bWFtYXBfdCBtYXAsCisJCQkJICAgIHBtYXBfdCBwbWFwLCB2b2lkICpidWYsIGJ1c19zaXplX3Qg
YnVmbGVuLAorCQkJCSAgICBpbnQgZmxhZ3MpOworc3RhdGljIHZvaWQgX2J1c19kbWFtYXBfY291
bnRfcGh5cyhidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsCisJCQkJICAgdm1f
cGFkZHJfdCBidWYsIGJ1c19zaXplX3QgYnVmbGVuLAorCQkJCSAgIGludCBmbGFncyk7CitzdGF0
aWMgaW50IF9idXNfZG1hbWFwX3Jlc2VydmVfcGFnZXMoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNf
ZG1hbWFwX3QgbWFwLAorCQkJCSAgICAgaW50IGZsYWdzKTsKKworLyoKKyAqIEFsbG9jYXRlIGEg
ZGV2aWNlIHNwZWNpZmljIGRtYV90YWcuCisgKi8KK3N0YXRpYyBpbnQKK2JvdW5jZV9idXNfZG1h
X3RhZ19jcmVhdGUoYnVzX2RtYV90YWdfdCBwYXJlbnQsIGJ1c19zaXplX3QgYWxpZ25tZW50LAor
ICAgIGJ1c19hZGRyX3QgYm91bmRhcnksIGJ1c19hZGRyX3QgbG93YWRkciwgYnVzX2FkZHJfdCBo
aWdoYWRkciwKKyAgICBidXNfZG1hX2ZpbHRlcl90ICpmaWx0ZXIsIHZvaWQgKmZpbHRlcmFyZywg
YnVzX3NpemVfdCBtYXhzaXplLAorICAgIGludCBuc2VnbWVudHMsIGJ1c19zaXplX3QgbWF4c2Vn
c3osIGludCBmbGFncywgYnVzX2RtYV9sb2NrX3QgKmxvY2tmdW5jLAorICAgIHZvaWQgKmxvY2tm
dW5jYXJnLCBidXNfZG1hX3RhZ190ICpkbWF0KQoreworCWJ1c19kbWFfdGFnX3QgbmV3dGFnOwor
CWludCBlcnJvcjsKKworCSpkbWF0ID0gTlVMTDsKKwllcnJvciA9IGNvbW1vbl9idXNfZG1hX3Rh
Z19jcmVhdGUocGFyZW50ICE9IE5VTEwgPyAmcGFyZW50LT5jb21tb24gOgorCSAgICBOVUxMLCBh
bGlnbm1lbnQsIGJvdW5kYXJ5LCBsb3dhZGRyLCBoaWdoYWRkciwgZmlsdGVyLCBmaWx0ZXJhcmcs
CisJICAgIG1heHNpemUsIG5zZWdtZW50cywgbWF4c2Vnc3osIGZsYWdzLCBsb2NrZnVuYywgbG9j
a2Z1bmNhcmcsCisJICAgIHNpemVvZiAoc3RydWN0IGJ1c19kbWFfdGFnKSwgKHZvaWQgKiopJm5l
d3RhZyk7CisJaWYgKGVycm9yICE9IDApCisJCXJldHVybiAoZXJyb3IpOworCisJbmV3dGFnLT5j
b21tb24uaW1wbCA9ICZidXNfZG1hX2JvdW5jZV9pbXBsOworCW5ld3RhZy0+bWFwX2NvdW50ID0g
MDsKKwluZXd0YWctPnNlZ21lbnRzID0gTlVMTDsKKworCWlmIChwYXJlbnQgIT0gTlVMTCAmJiAo
KG5ld3RhZy0+Y29tbW9uLmZpbHRlciAhPSBOVUxMKSB8fAorCSAgICAoKHBhcmVudC0+Ym91bmNl
X2ZsYWdzICYgQlVTX0RNQV9DT1VMRF9CT1VOQ0UpICE9IDApKSkKKwkJbmV3dGFnLT5ib3VuY2Vf
ZmxhZ3MgfD0gQlVTX0RNQV9DT1VMRF9CT1VOQ0U7CisKKwlpZiAobmV3dGFnLT5jb21tb24ubG93
YWRkciA8IHB0b2EoKHZtX3BhZGRyX3QpTWF4bWVtKSB8fAorCSAgICBuZXd0YWctPmNvbW1vbi5h
bGlnbm1lbnQgPiAxKQorCQluZXd0YWctPmJvdW5jZV9mbGFncyB8PSBCVVNfRE1BX0NPVUxEX0JP
VU5DRTsKKworCWlmICgoKG5ld3RhZy0+Ym91bmNlX2ZsYWdzICYgQlVTX0RNQV9DT1VMRF9CT1VO
Q0UpICE9IDApICYmCisJICAgIChmbGFncyAmIEJVU19ETUFfQUxMT0NOT1cpICE9IDApIHsKKwkJ
c3RydWN0IGJvdW5jZV96b25lICpiejsKKworCQkvKiBNdXN0IGJvdW5jZSAqLworCQlpZiAoKGVy
cm9yID0gYWxsb2NfYm91bmNlX3pvbmUobmV3dGFnKSkgIT0gMCkgeworCQkJZnJlZShuZXd0YWcs
IE1fREVWQlVGKTsKKwkJCXJldHVybiAoZXJyb3IpOworCQl9CisJCWJ6ID0gbmV3dGFnLT5ib3Vu
Y2Vfem9uZTsKKworCQlpZiAocHRvYShiei0+dG90YWxfYnBhZ2VzKSA8IG1heHNpemUpIHsKKwkJ
CWludCBwYWdlczsKKworCQkJcGFnZXMgPSBhdG9wKG1heHNpemUpIC0gYnotPnRvdGFsX2JwYWdl
czsKKworCQkJLyogQWRkIHBhZ2VzIHRvIG91ciBib3VuY2UgcG9vbCAqLworCQkJaWYgKGFsbG9j
X2JvdW5jZV9wYWdlcyhuZXd0YWcsIHBhZ2VzKSA8IHBhZ2VzKQorCQkJCWVycm9yID0gRU5PTUVN
OworCQl9CisJCS8qIFBlcmZvcm1lZCBpbml0aWFsIGFsbG9jYXRpb24gKi8KKwkJbmV3dGFnLT5i
b3VuY2VfZmxhZ3MgfD0gQlVTX0RNQV9NSU5fQUxMT0NfQ09NUDsKKwl9IGVsc2UKKwkJZXJyb3Ig
PSAwOworCQorCWlmIChlcnJvciAhPSAwKQorCQlmcmVlKG5ld3RhZywgTV9ERVZCVUYpOworCWVs
c2UKKwkJKmRtYXQgPSBuZXd0YWc7CisJQ1RSNChLVFJfQlVTRE1BLCAiJXMgcmV0dXJuZWQgdGFn
ICVwIHRhZyBmbGFncyAweCV4IGVycm9yICVkIiwKKwkgICAgX19mdW5jX18sIG5ld3RhZywgKG5l
d3RhZyAhPSBOVUxMID8gbmV3dGFnLT5jb21tb24uZmxhZ3MgOiAwKSwKKwkgICAgZXJyb3IpOwor
CXJldHVybiAoZXJyb3IpOworfQorCitzdGF0aWMgaW50Citib3VuY2VfYnVzX2RtYV90YWdfZGVz
dHJveShidXNfZG1hX3RhZ190IGRtYXQpCit7CisJYnVzX2RtYV90YWdfdCBkbWF0X2NvcHksIHBh
cmVudDsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IDA7CisJZG1hdF9jb3B5ID0gZG1hdDsKKwor
CWlmIChkbWF0ICE9IE5VTEwpIHsKKwkJaWYgKGRtYXQtPm1hcF9jb3VudCAhPSAwKSB7CisJCQll
cnJvciA9IEVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KKwkJd2hpbGUgKGRtYXQgIT0gTlVMTCkg
eworCQkJcGFyZW50ID0gKGJ1c19kbWFfdGFnX3QpZG1hdC0+Y29tbW9uLnBhcmVudDsKKwkJCWF0
b21pY19zdWJ0cmFjdF9pbnQoJmRtYXQtPmNvbW1vbi5yZWZfY291bnQsIDEpOworCQkJaWYgKGRt
YXQtPmNvbW1vbi5yZWZfY291bnQgPT0gMCkgeworCQkJCWlmIChkbWF0LT5zZWdtZW50cyAhPSBO
VUxMKQorCQkJCQlmcmVlKGRtYXQtPnNlZ21lbnRzLCBNX0RFVkJVRik7CisJCQkJZnJlZShkbWF0
LCBNX0RFVkJVRik7CisJCQkJLyoKKwkJCQkgKiBMYXN0IHJlZmVyZW5jZSBjb3VudCwgc28KKwkJ
CQkgKiByZWxlYXNlIG91ciByZWZlcmVuY2UKKwkJCQkgKiBjb3VudCBvbiBvdXIgcGFyZW50Lgor
CQkJCSAqLworCQkJCWRtYXQgPSBwYXJlbnQ7CisJCQl9IGVsc2UKKwkJCQlkbWF0ID0gTlVMTDsK
KwkJfQorCX0KK291dDoKKwlDVFIzKEtUUl9CVVNETUEsICIlcyB0YWcgJXAgZXJyb3IgJWQiLCBf
X2Z1bmNfXywgZG1hdF9jb3B5LCBlcnJvcik7CisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisg
KiBBbGxvY2F0ZSBhIGhhbmRsZSBmb3IgbWFwcGluZyBmcm9tIGt2YS91dmEvcGh5c2ljYWwKKyAq
IGFkZHJlc3Mgc3BhY2UgaW50byBidXMgZGV2aWNlIHNwYWNlLgorICovCitzdGF0aWMgaW50Citi
b3VuY2VfYnVzX2RtYW1hcF9jcmVhdGUoYnVzX2RtYV90YWdfdCBkbWF0LCBpbnQgZmxhZ3MsIGJ1
c19kbWFtYXBfdCAqbWFwcCkKK3sKKwlzdHJ1Y3QgYm91bmNlX3pvbmUgKmJ6OworCWludCBlcnJv
ciwgbWF4cGFnZXMsIHBhZ2VzOworCisJZXJyb3IgPSAwOworCisJaWYgKGRtYXQtPnNlZ21lbnRz
ID09IE5VTEwpIHsKKwkJZG1hdC0+c2VnbWVudHMgPSAoYnVzX2RtYV9zZWdtZW50X3QgKiltYWxs
b2MoCisJCSAgICBzaXplb2YoYnVzX2RtYV9zZWdtZW50X3QpICogZG1hdC0+Y29tbW9uLm5zZWdt
ZW50cywKKwkJICAgIE1fREVWQlVGLCBNX05PV0FJVCk7CisJCWlmIChkbWF0LT5zZWdtZW50cyA9
PSBOVUxMKSB7CisJCQlDVFIzKEtUUl9CVVNETUEsICIlczogdGFnICVwIGVycm9yICVkIiwKKwkJ
CSAgICBfX2Z1bmNfXywgZG1hdCwgRU5PTUVNKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQor
CX0KKworCS8qCisJICogQm91bmNpbmcgbWlnaHQgYmUgcmVxdWlyZWQgaWYgdGhlIGRyaXZlciBh
c2tzIGZvciBhbiBhY3RpdmUKKwkgKiBleGNsdXNpb24gcmVnaW9uLCBhIGRhdGEgYWxpZ25tZW50
IHRoYXQgaXMgc3RyaWN0ZXIgdGhhbiAxLCBhbmQvb3IKKwkgKiBhbiBhY3RpdmUgYWRkcmVzcyBi
b3VuZGFyeS4KKwkgKi8KKwlpZiAoZG1hdC0+Ym91bmNlX2ZsYWdzICYgQlVTX0RNQV9DT1VMRF9C
T1VOQ0UpIHsKKwkJLyogTXVzdCBib3VuY2UgKi8KKwkJaWYgKGRtYXQtPmJvdW5jZV96b25lID09
IE5VTEwpIHsKKwkJCWlmICgoZXJyb3IgPSBhbGxvY19ib3VuY2Vfem9uZShkbWF0KSkgIT0gMCkK
KwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCQlieiA9IGRtYXQtPmJvdW5jZV96b25lOworCisJ
CSptYXBwID0gKGJ1c19kbWFtYXBfdCltYWxsb2Moc2l6ZW9mKCoqbWFwcCksIE1fREVWQlVGLAor
CQkgICAgTV9OT1dBSVQgfCBNX1pFUk8pOworCQlpZiAoKm1hcHAgPT0gTlVMTCkgeworCQkJQ1RS
MyhLVFJfQlVTRE1BLCAiJXM6IHRhZyAlcCBlcnJvciAlZCIsCisJCQkgICAgX19mdW5jX18sIGRt
YXQsIEVOT01FTSk7CisJCQlyZXR1cm4gKEVOT01FTSk7CisJCX0KKworCQkvKiBJbml0aWFsaXpl
IHRoZSBuZXcgbWFwICovCisJCVNUQUlMUV9JTklUKCYoKCptYXBwKS0+YnBhZ2VzKSk7CisKKwkJ
LyoKKwkJICogQXR0ZW1wdCB0byBhZGQgcGFnZXMgdG8gb3VyIHBvb2wgb24gYSBwZXItaW5zdGFu
Y2UKKwkJICogYmFzaXMgdXAgdG8gYSBzYW5lIGxpbWl0LgorCQkgKi8KKwkJaWYgKGRtYXQtPmNv
bW1vbi5hbGlnbm1lbnQgPiAxKQorCQkJbWF4cGFnZXMgPSBNQVhfQlBBR0VTOworCQllbHNlCisJ
CQltYXhwYWdlcyA9IE1JTihNQVhfQlBBR0VTLCBNYXhtZW0gLQorCQkJICAgIGF0b3AoZG1hdC0+
Y29tbW9uLmxvd2FkZHIpKTsKKwkJaWYgKChkbWF0LT5ib3VuY2VfZmxhZ3MgJiBCVVNfRE1BX01J
Tl9BTExPQ19DT01QKSA9PSAwIHx8CisJCSAgICAoYnotPm1hcF9jb3VudCA+IDAgJiYgYnotPnRv
dGFsX2JwYWdlcyA8IG1heHBhZ2VzKSkgeworCQkJcGFnZXMgPSBNQVgoYXRvcChkbWF0LT5jb21t
b24ubWF4c2l6ZSksIDEpOworCQkJcGFnZXMgPSBNSU4obWF4cGFnZXMgLSBiei0+dG90YWxfYnBh
Z2VzLCBwYWdlcyk7CisJCQlwYWdlcyA9IE1BWChwYWdlcywgMSk7CisJCQlpZiAoYWxsb2NfYm91
bmNlX3BhZ2VzKGRtYXQsIHBhZ2VzKSA8IHBhZ2VzKQorCQkJCWVycm9yID0gRU5PTUVNOworCQkJ
aWYgKChkbWF0LT5ib3VuY2VfZmxhZ3MgJiBCVVNfRE1BX01JTl9BTExPQ19DT01QKQorCQkJICAg
ID09IDApIHsKKwkJCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJCQlkbWF0LT5ib3VuY2VfZmxhZ3Mg
fD0KKwkJCQkJICAgIEJVU19ETUFfTUlOX0FMTE9DX0NPTVA7CisJCQkJfQorCQkJfSBlbHNlCisJ
CQkJZXJyb3IgPSAwOworCQl9CisJCWJ6LT5tYXBfY291bnQrKzsKKwl9IGVsc2UgeworCQkqbWFw
cCA9IE5VTEw7CisJfQorCWlmIChlcnJvciA9PSAwKQorCQlkbWF0LT5tYXBfY291bnQrKzsKKwlD
VFI0KEtUUl9CVVNETUEsICIlczogdGFnICVwIHRhZyBmbGFncyAweCV4IGVycm9yICVkIiwKKwkg
ICAgX19mdW5jX18sIGRtYXQsIGRtYXQtPmNvbW1vbi5mbGFncywgZXJyb3IpOworCXJldHVybiAo
ZXJyb3IpOworfQorCisvKgorICogRGVzdHJveSBhIGhhbmRsZSBmb3IgbWFwcGluZyBmcm9tIGt2
YS91dmEvcGh5c2ljYWwKKyAqIGFkZHJlc3Mgc3BhY2UgaW50byBidXMgZGV2aWNlIHNwYWNlLgor
ICovCitzdGF0aWMgaW50Citib3VuY2VfYnVzX2RtYW1hcF9kZXN0cm95KGJ1c19kbWFfdGFnX3Qg
ZG1hdCwgYnVzX2RtYW1hcF90IG1hcCkKK3sKKworCWlmIChtYXAgIT0gTlVMTCAmJiBtYXAgIT0g
Jm5vYm91bmNlX2RtYW1hcCkgeworCQlpZiAoU1RBSUxRX0ZJUlNUKCZtYXAtPmJwYWdlcykgIT0g
TlVMTCkgeworCQkJQ1RSMyhLVFJfQlVTRE1BLCAiJXM6IHRhZyAlcCBlcnJvciAlZCIsCisJCQkg
ICAgX19mdW5jX18sIGRtYXQsIEVCVVNZKTsKKwkJCXJldHVybiAoRUJVU1kpOworCQl9CisJCWlm
IChkbWF0LT5ib3VuY2Vfem9uZSkKKwkJCWRtYXQtPmJvdW5jZV96b25lLT5tYXBfY291bnQtLTsK
KwkJZnJlZShtYXAsIE1fREVWQlVGKTsKKwl9CisJZG1hdC0+bWFwX2NvdW50LS07CisJQ1RSMihL
VFJfQlVTRE1BLCAiJXM6IHRhZyAlcCBlcnJvciAwIiwgX19mdW5jX18sIGRtYXQpOworCXJldHVy
biAoMCk7Cit9CisKKworLyoKKyAqIEFsbG9jYXRlIGEgcGllY2Ugb2YgbWVtb3J5IHRoYXQgY2Fu
IGJlIGVmZmljaWVudGx5IG1hcHBlZCBpbnRvCisgKiBidXMgZGV2aWNlIHNwYWNlIGJhc2VkIG9u
IHRoZSBjb25zdHJhaW50cyBsaXRlZCBpbiB0aGUgZG1hIHRhZy4KKyAqIEEgZG1hbWFwIHRvIGZv
ciB1c2Ugd2l0aCBkbWFtYXBfbG9hZCBpcyBhbHNvIGFsbG9jYXRlZC4KKyAqLworc3RhdGljIGlu
dAorYm91bmNlX2J1c19kbWFtZW1fYWxsb2MoYnVzX2RtYV90YWdfdCBkbWF0LCB2b2lkKiogdmFk
ZHIsIGludCBmbGFncywKKyAgICBidXNfZG1hbWFwX3QgKm1hcHApCit7CisJLyoKKwkgKiBYWFgg
QVJNNjRUT0RPOgorCSAqIFRoaXMgYnVzX2RtYSBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyBJTy1D
b2hlcmVudCBhcmNoaXRlY3V0cmUuCisJICogSWYgSU8tQ29oZXJlbmN5IGlzIG5vdCBndWFyYW50
ZWVkLCB0aGUgQlVTX0RNQV9DT0hFUkVOVCBmbGFnIGhhcworCSAqIHRvIGJlIGltcGxlbnRlZCB1
c2luZyBub24tY2FjaGVhYmxlIG1lbW9yeS4KKwkgKi8KKworCXZtX21lbWF0dHJfdCBhdHRyOwor
CWludCBtZmxhZ3M7CisKKwlpZiAoZmxhZ3MgJiBCVVNfRE1BX05PV0FJVCkKKwkJbWZsYWdzID0g
TV9OT1dBSVQ7CisJZWxzZQorCQltZmxhZ3MgPSBNX1dBSVRPSzsKKworCS8qIElmIHdlIHN1Y2Nl
ZWQsIG5vIG1hcHBpbmcvYm91bmNpbmcgd2lsbCBiZSByZXF1aXJlZCAqLworCSptYXBwID0gTlVM
TDsKKworCWlmIChkbWF0LT5zZWdtZW50cyA9PSBOVUxMKSB7CisJCWRtYXQtPnNlZ21lbnRzID0g
KGJ1c19kbWFfc2VnbWVudF90ICopbWFsbG9jKAorCQkgICAgc2l6ZW9mKGJ1c19kbWFfc2VnbWVu
dF90KSAqIGRtYXQtPmNvbW1vbi5uc2VnbWVudHMsCisJCSAgICBNX0RFVkJVRiwgbWZsYWdzKTsK
KwkJaWYgKGRtYXQtPnNlZ21lbnRzID09IE5VTEwpIHsKKwkJCUNUUjQoS1RSX0JVU0RNQSwgIiVz
OiB0YWcgJXAgdGFnIGZsYWdzIDB4JXggZXJyb3IgJWQiLAorCQkJICAgIF9fZnVuY19fLCBkbWF0
LCBkbWF0LT5jb21tb24uZmxhZ3MsIEVOT01FTSk7CisJCQlyZXR1cm4gKEVOT01FTSk7CisJCX0K
Kwl9CisJaWYgKGZsYWdzICYgQlVTX0RNQV9aRVJPKQorCQltZmxhZ3MgfD0gTV9aRVJPOworCWlm
IChmbGFncyAmIEJVU19ETUFfTk9DQUNIRSkKKwkJYXR0ciA9IFZNX01FTUFUVFJfVU5DQUNIRUFC
TEU7CisJZWxzZQorCQlhdHRyID0gVk1fTUVNQVRUUl9ERUZBVUxUOworCisJLyogCisJICogWFhY
OgorCSAqIChkbWF0LT5hbGlnbm1lbnQgPCBkbWF0LT5tYXhzaXplKSBpcyBqdXN0IGEgcXVpY2sg
aGFjazsgdGhlIGV4YWN0CisJICogYWxpZ25tZW50IGd1YXJhbnRlZXMgb2YgbWFsbG9jIG5lZWQg
dG8gYmUgbmFpbGVkIGRvd24sIGFuZCB0aGUKKwkgKiBjb2RlIGJlbG93IHNob3VsZCBiZSByZXdy
aXR0ZW4gdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudC4KKwkgKgorCSAqIEluIHRoZSBtZWFudGlt
ZSwgd2UnbGwgd2FybiB0aGUgdXNlciBpZiBtYWxsb2MgZ2V0cyBpdCB3cm9uZy4KKwkgKi8KKwlp
ZiAoKGRtYXQtPmNvbW1vbi5tYXhzaXplIDw9IFBBR0VfU0laRSkgJiYKKwkgICAoZG1hdC0+Y29t
bW9uLmFsaWdubWVudCA8IGRtYXQtPmNvbW1vbi5tYXhzaXplKSAmJgorCSAgICBkbWF0LT5jb21t
b24ubG93YWRkciA+PSBwdG9hKCh2bV9wYWRkcl90KU1heG1lbSkgJiYKKwkgICAgYXR0ciA9PSBW
TV9NRU1BVFRSX0RFRkFVTFQpIHsKKwkJKnZhZGRyID0gbWFsbG9jKGRtYXQtPmNvbW1vbi5tYXhz
aXplLCBNX0RFVkJVRiwgbWZsYWdzKTsKKwl9IGVsc2UgaWYgKGRtYXQtPmNvbW1vbi5uc2VnbWVu
dHMgPj0gYnRvYyhkbWF0LT5jb21tb24ubWF4c2l6ZSkgJiYKKwkgICAgZG1hdC0+Y29tbW9uLmFs
aWdubWVudCA8PSBQQUdFX1NJWkUgJiYKKwkgICAgKGRtYXQtPmNvbW1vbi5ib3VuZGFyeSA9PSAw
IHx8CisJICAgIGRtYXQtPmNvbW1vbi5ib3VuZGFyeSA+PSBkbWF0LT5jb21tb24ubG93YWRkcikp
IHsKKwkJLyogUGFnZS1iYXNlZCBtdWx0aS1zZWdtZW50IGFsbG9jYXRpb25zIGFsbG93ZWQgKi8K
KwkJKnZhZGRyID0gKHZvaWQgKilrbWVtX2FsbG9jX2F0dHIoa2VybmVsX2FyZW5hLAorCQkgICAg
ZG1hdC0+Y29tbW9uLm1heHNpemUsIG1mbGFncywgMHVsLCBkbWF0LT5jb21tb24ubG93YWRkciwK
KwkJICAgIGF0dHIpOworCQlkbWF0LT5ib3VuY2VfZmxhZ3MgfD0gQlVTX0RNQV9LTUVNX0FMTE9D
OworCX0gZWxzZSB7CisJCSp2YWRkciA9ICh2b2lkICopa21lbV9hbGxvY19jb250aWcoa2VybmVs
X2FyZW5hLAorCQkgICAgZG1hdC0+Y29tbW9uLm1heHNpemUsIG1mbGFncywgMHVsLCBkbWF0LT5j
b21tb24ubG93YWRkciwKKwkJICAgIGRtYXQtPmNvbW1vbi5hbGlnbm1lbnQgIT0gMCA/IGRtYXQt
PmNvbW1vbi5hbGlnbm1lbnQgOiAxdWwsCisJCSAgICBkbWF0LT5jb21tb24uYm91bmRhcnksIGF0
dHIpOworCQlkbWF0LT5ib3VuY2VfZmxhZ3MgfD0gQlVTX0RNQV9LTUVNX0FMTE9DOworCX0KKwlp
ZiAoKnZhZGRyID09IE5VTEwpIHsKKwkJQ1RSNChLVFJfQlVTRE1BLCAiJXM6IHRhZyAlcCB0YWcg
ZmxhZ3MgMHgleCBlcnJvciAlZCIsCisJCSAgICBfX2Z1bmNfXywgZG1hdCwgZG1hdC0+Y29tbW9u
LmZsYWdzLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfSBlbHNlIGlmICh2dG9waHlz
KCp2YWRkcikgJiAoZG1hdC0+Y29tbW9uLmFsaWdubWVudCAtIDEpKSB7CisJCXByaW50ZigiYnVz
X2RtYW1lbV9hbGxvYyBmYWlsZWQgdG8gYWxpZ24gbWVtb3J5IHByb3Blcmx5LlxuIik7CisJfQor
CUNUUjQoS1RSX0JVU0RNQSwgIiVzOiB0YWcgJXAgdGFnIGZsYWdzIDB4JXggZXJyb3IgJWQiLAor
CSAgICBfX2Z1bmNfXywgZG1hdCwgZG1hdC0+Y29tbW9uLmZsYWdzLCAwKTsKKwlyZXR1cm4gKDAp
OworfQorCisvKgorICogRnJlZSBhIHBpZWNlIG9mIG1lbW9yeSBhbmQgaXQncyBhbGxvY2lhdGVk
IGRtYW1hcCwgdGhhdCB3YXMgYWxsb2NhdGVkCisgKiB2aWEgYnVzX2RtYW1lbV9hbGxvYy4gIE1h
a2UgdGhlIHNhbWUgY2hvaWNlIGZvciBmcmVlL2NvbnRpZ2ZyZWUuCisgKi8KK3N0YXRpYyB2b2lk
Citib3VuY2VfYnVzX2RtYW1lbV9mcmVlKGJ1c19kbWFfdGFnX3QgZG1hdCwgdm9pZCAqdmFkZHIs
IGJ1c19kbWFtYXBfdCBtYXApCit7CisJLyoKKwkgKiBkbWFtZW0gZG9lcyBub3QgbmVlZCB0byBi
ZSBib3VuY2VkLCBzbyB0aGUgbWFwIHNob3VsZCBiZQorCSAqIE5VTEwgYW5kIHRoZSBCVVNfRE1B
X0tNRU1fQUxMT0MgZmxhZyBjbGVhcmVkIGlmIG1hbGxvYygpCisJICogd2FzIHVzZWQgYW5kIHNl
dCBpZiBrbWVtX2FsbG9jX2NvbnRpZygpIHdhcyB1c2VkLgorCSAqLworCWlmIChtYXAgIT0gTlVM
TCkKKwkJcGFuaWMoImJ1c19kbWFtZW1fZnJlZTogSW52YWxpZCBtYXAgZnJlZWRcbiIpOworCWlm
ICgoZG1hdC0+Ym91bmNlX2ZsYWdzICYgQlVTX0RNQV9LTUVNX0FMTE9DKSA9PSAwKQorCQlmcmVl
KHZhZGRyLCBNX0RFVkJVRik7CisJZWxzZQorCQlrbWVtX2ZyZWUoa2VybmVsX2FyZW5hLCAodm1f
b2Zmc2V0X3QpdmFkZHIsCisJCSAgICBkbWF0LT5jb21tb24ubWF4c2l6ZSk7CisJQ1RSMyhLVFJf
QlVTRE1BLCAiJXM6IHRhZyAlcCBmbGFncyAweCV4IiwgX19mdW5jX18sIGRtYXQsCisJICAgIGRt
YXQtPmJvdW5jZV9mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitfYnVzX2RtYW1hcF9jb3VudF9w
aHlzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgdm1fcGFkZHJfdCBidWYs
CisgICAgYnVzX3NpemVfdCBidWZsZW4sIGludCBmbGFncykKK3sKKwlidXNfYWRkcl90IGN1cmFk
ZHI7CisJYnVzX3NpemVfdCBzZ3NpemU7CisKKwlpZiAoKG1hcCAhPSAmbm9ib3VuY2VfZG1hbWFw
ICYmIG1hcC0+cGFnZXNuZWVkZWQgPT0gMCkpIHsKKwkJLyoKKwkJICogQ291bnQgdGhlIG51bWJl
ciBvZiBib3VuY2UgcGFnZXMKKwkJICogbmVlZGVkIGluIG9yZGVyIHRvIGNvbXBsZXRlIHRoaXMg
dHJhbnNmZXIKKwkJICovCisJCWN1cmFkZHIgPSBidWY7CisJCXdoaWxlIChidWZsZW4gIT0gMCkg
eworCQkJc2dzaXplID0gTUlOKGJ1ZmxlbiwgZG1hdC0+Y29tbW9uLm1heHNlZ3N6KTsKKwkJCWlm
IChidXNfZG1hX3J1bl9maWx0ZXIoJmRtYXQtPmNvbW1vbiwgY3VyYWRkcikpIHsKKwkJCQlzZ3Np
emUgPSBNSU4oc2dzaXplLCBQQUdFX1NJWkUpOworCQkJCW1hcC0+cGFnZXNuZWVkZWQrKzsKKwkJ
CX0KKwkJCWN1cmFkZHIgKz0gc2dzaXplOworCQkJYnVmbGVuIC09IHNnc2l6ZTsKKwkJfQorCQlD
VFIxKEtUUl9CVVNETUEsICJwYWdlc25lZWRlZD0gJWRcbiIsIG1hcC0+cGFnZXNuZWVkZWQpOwor
CX0KK30KKworc3RhdGljIHZvaWQKK19idXNfZG1hbWFwX2NvdW50X3BhZ2VzKGJ1c19kbWFfdGFn
X3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgcG1hcF90IHBtYXAsCisgICAgdm9pZCAqYnVmLCBi
dXNfc2l6ZV90IGJ1ZmxlbiwgaW50IGZsYWdzKQoreworCXZtX29mZnNldF90IHZhZGRyOworCXZt
X29mZnNldF90IHZlbmRhZGRyOworCWJ1c19hZGRyX3QgcGFkZHI7CisJYnVzX3NpemVfdCBzZ19s
ZW47CisKKwlpZiAoKG1hcCAhPSAmbm9ib3VuY2VfZG1hbWFwICYmIG1hcC0+cGFnZXNuZWVkZWQg
PT0gMCkpIHsKKwkJQ1RSNChLVFJfQlVTRE1BLCAibG93YWRkcj0gJWQgTWF4bWVtPSAlZCwgYm91
bmRhcnk9ICVkLCAiCisJCSAgICAiYWxpZ25tZW50PSAlZCIsIGRtYXQtPmNvbW1vbi5sb3dhZGRy
LAorCQkgICAgcHRvYSgodm1fcGFkZHJfdClNYXhtZW0pLAorCQkgICAgZG1hdC0+Y29tbW9uLmJv
dW5kYXJ5LCBkbWF0LT5jb21tb24uYWxpZ25tZW50KTsKKwkJQ1RSMyhLVFJfQlVTRE1BLCAibWFw
PSAlcCwgbm9ib3VuY2VtYXA9ICVwLCBwYWdlc25lZWRlZD0gJWQiLAorCQkgICAgbWFwLCAmbm9i
b3VuY2VfZG1hbWFwLCBtYXAtPnBhZ2VzbmVlZGVkKTsKKwkJLyoKKwkJICogQ291bnQgdGhlIG51
bWJlciBvZiBib3VuY2UgcGFnZXMKKwkJICogbmVlZGVkIGluIG9yZGVyIHRvIGNvbXBsZXRlIHRo
aXMgdHJhbnNmZXIKKwkJICovCisJCXZhZGRyID0gKHZtX29mZnNldF90KWJ1ZjsKKwkJdmVuZGFk
ZHIgPSAodm1fb2Zmc2V0X3QpYnVmICsgYnVmbGVuOworCisJCXdoaWxlICh2YWRkciA8IHZlbmRh
ZGRyKSB7CisJCQlzZ19sZW4gPSBQQUdFX1NJWkUgLSAoKHZtX29mZnNldF90KXZhZGRyICYgUEFH
RV9NQVNLKTsKKwkJCWlmIChwbWFwID09IGtlcm5lbF9wbWFwKQorCQkJCXBhZGRyID0gcG1hcF9r
ZXh0cmFjdCh2YWRkcik7CisJCQllbHNlCisJCQkJcGFkZHIgPSBwbWFwX2V4dHJhY3QocG1hcCwg
dmFkZHIpOworCQkJaWYgKGJ1c19kbWFfcnVuX2ZpbHRlcigmZG1hdC0+Y29tbW9uLCBwYWRkcikg
IT0gMCkgeworCQkJCXNnX2xlbiA9IHJvdW5kdXAyKHNnX2xlbiwKKwkJCQkgICAgZG1hdC0+Y29t
bW9uLmFsaWdubWVudCk7CisJCQkJbWFwLT5wYWdlc25lZWRlZCsrOworCQkJfQorCQkJdmFkZHIg
Kz0gc2dfbGVuOworCQl9CisJCUNUUjEoS1RSX0JVU0RNQSwgInBhZ2VzbmVlZGVkPSAlZFxuIiwg
bWFwLT5wYWdlc25lZWRlZCk7CisJfQorfQorCitzdGF0aWMgaW50CitfYnVzX2RtYW1hcF9yZXNl
cnZlX3BhZ2VzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgaW50IGZsYWdz
KQoreworCisJLyogUmVzZXJ2ZSBOZWNlc3NhcnkgQm91bmNlIFBhZ2VzICovCisJbXR4X2xvY2so
JmJvdW5jZV9sb2NrKTsKKwlpZiAoZmxhZ3MgJiBCVVNfRE1BX05PV0FJVCkgeworCQlpZiAocmVz
ZXJ2ZV9ib3VuY2VfcGFnZXMoZG1hdCwgbWFwLCAwKSAhPSAwKSB7CisJCQltdHhfdW5sb2NrKCZi
b3VuY2VfbG9jayk7CisJCQlyZXR1cm4gKEVOT01FTSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAo
cmVzZXJ2ZV9ib3VuY2VfcGFnZXMoZG1hdCwgbWFwLCAxKSAhPSAwKSB7CisJCQkvKiBRdWV1ZSB1
cyBmb3IgcmVzb3VyY2VzICovCisJCQlTVEFJTFFfSU5TRVJUX1RBSUwoJmJvdW5jZV9tYXBfd2Fp
dGluZ2xpc3QsIG1hcCwgbGlua3MpOworCQkJbXR4X3VubG9jaygmYm91bmNlX2xvY2spOworCQkJ
cmV0dXJuIChFSU5QUk9HUkVTUyk7CisJCX0KKwl9CisJbXR4X3VubG9jaygmYm91bmNlX2xvY2sp
OworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIEFkZCBhIHNpbmdsZSBjb250aWd1b3VzIHBo
eXNpY2FsIHJhbmdlIHRvIHRoZSBzZWdtZW50IGxpc3QuCisgKi8KK3N0YXRpYyBpbnQKK19idXNf
ZG1hbWFwX2FkZHNlZyhidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsIGJ1c19h
ZGRyX3QgY3VyYWRkciwKKyAgICBidXNfc2l6ZV90IHNnc2l6ZSwgYnVzX2RtYV9zZWdtZW50X3Qg
KnNlZ3MsIGludCAqc2VncCkKK3sKKwlidXNfYWRkcl90IGJhZGRyLCBibWFzazsKKwlpbnQgc2Vn
OworCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgY3Jvc3MgYW55IGJvdW5kYXJpZXMuCisJ
ICovCisJYm1hc2sgPSB+KGRtYXQtPmNvbW1vbi5ib3VuZGFyeSAtIDEpOworCWlmIChkbWF0LT5j
b21tb24uYm91bmRhcnkgPiAwKSB7CisJCWJhZGRyID0gKGN1cmFkZHIgKyBkbWF0LT5jb21tb24u
Ym91bmRhcnkpICYgYm1hc2s7CisJCWlmIChzZ3NpemUgPiAoYmFkZHIgLSBjdXJhZGRyKSkKKwkJ
CXNnc2l6ZSA9IChiYWRkciAtIGN1cmFkZHIpOworCX0KKworCS8qCisJICogSW5zZXJ0IGNodW5r
IGludG8gYSBzZWdtZW50LCBjb2FsZXNjaW5nIHdpdGgKKwkgKiBwcmV2aW91cyBzZWdtZW50IGlm
IHBvc3NpYmxlLgorCSAqLworCXNlZyA9ICpzZWdwOworCWlmIChzZWcgPT0gLTEpIHsKKwkJc2Vn
ID0gMDsKKwkJc2Vnc1tzZWddLmRzX2FkZHIgPSBjdXJhZGRyOworCQlzZWdzW3NlZ10uZHNfbGVu
ID0gc2dzaXplOworCX0gZWxzZSB7CisJCWlmIChjdXJhZGRyID09IHNlZ3Nbc2VnXS5kc19hZGRy
ICsgc2Vnc1tzZWddLmRzX2xlbiAmJgorCQkgICAgKHNlZ3Nbc2VnXS5kc19sZW4gKyBzZ3NpemUp
IDw9IGRtYXQtPmNvbW1vbi5tYXhzZWdzeiAmJgorCQkgICAgKGRtYXQtPmNvbW1vbi5ib3VuZGFy
eSA9PSAwIHx8CisJCSAgICAgKHNlZ3Nbc2VnXS5kc19hZGRyICYgYm1hc2spID09IChjdXJhZGRy
ICYgYm1hc2spKSkKKwkJCXNlZ3Nbc2VnXS5kc19sZW4gKz0gc2dzaXplOworCQllbHNlIHsKKwkJ
CWlmICgrK3NlZyA+PSBkbWF0LT5jb21tb24ubnNlZ21lbnRzKQorCQkJCXJldHVybiAoMCk7CisJ
CQlzZWdzW3NlZ10uZHNfYWRkciA9IGN1cmFkZHI7CisJCQlzZWdzW3NlZ10uZHNfbGVuID0gc2dz
aXplOworCQl9CisJfQorCSpzZWdwID0gc2VnOworCXJldHVybiAoc2dzaXplKTsKK30KKworLyoK
KyAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gbG9hZCBhIHBoeXNpY2FsIGJ1ZmZlci4gIHNlZ3AgY29u
dGFpbnMKKyAqIHRoZSBzdGFydGluZyBzZWdtZW50IG9uIGVudHJhY2UsIGFuZCB0aGUgZW5kaW5n
IHNlZ21lbnQgb24gZXhpdC4KKyAqLworc3RhdGljIGludAorYm91bmNlX2J1c19kbWFtYXBfbG9h
ZF9waHlzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICB2bV9wYWRk
cl90IGJ1ZiwgYnVzX3NpemVfdCBidWZsZW4sIGludCBmbGFncywgYnVzX2RtYV9zZWdtZW50X3Qg
KnNlZ3MsCisgICAgaW50ICpzZWdwKQoreworCWJ1c19zaXplX3Qgc2dzaXplOworCWJ1c19hZGRy
X3QgY3VyYWRkcjsKKwlpbnQgZXJyb3I7CisKKwlpZiAobWFwID09IE5VTEwpCisJCW1hcCA9ICZu
b2JvdW5jZV9kbWFtYXA7CisKKwlpZiAoc2VncyA9PSBOVUxMKQorCQlzZWdzID0gZG1hdC0+c2Vn
bWVudHM7CisKKwlpZiAoKGRtYXQtPmJvdW5jZV9mbGFncyAmIEJVU19ETUFfQ09VTERfQk9VTkNF
KSAhPSAwKSB7CisJCV9idXNfZG1hbWFwX2NvdW50X3BoeXMoZG1hdCwgbWFwLCBidWYsIGJ1Zmxl
biwgZmxhZ3MpOworCQlpZiAobWFwLT5wYWdlc25lZWRlZCAhPSAwKSB7CisJCQllcnJvciA9IF9i
dXNfZG1hbWFwX3Jlc2VydmVfcGFnZXMoZG1hdCwgbWFwLCBmbGFncyk7CisJCQlpZiAoZXJyb3Ip
CisJCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKwl9CisKKwl3aGlsZSAoYnVmbGVuID4gMCkgewor
CQljdXJhZGRyID0gYnVmOworCQlzZ3NpemUgPSBNSU4oYnVmbGVuLCBkbWF0LT5jb21tb24ubWF4
c2Vnc3opOworCQlpZiAoKChkbWF0LT5ib3VuY2VfZmxhZ3MgJiBCVVNfRE1BX0NPVUxEX0JPVU5D
RSkgIT0gMCkgJiYKKwkJICAgIG1hcC0+cGFnZXNuZWVkZWQgIT0gMCAmJgorCQkgICAgYnVzX2Rt
YV9ydW5fZmlsdGVyKCZkbWF0LT5jb21tb24sIGN1cmFkZHIpKSB7CisJCQlzZ3NpemUgPSBNSU4o
c2dzaXplLCBQQUdFX1NJWkUpOworCQkJY3VyYWRkciA9IGFkZF9ib3VuY2VfcGFnZShkbWF0LCBt
YXAsIDAsIGN1cmFkZHIsCisJCQkgICAgc2dzaXplKTsKKwkJfQorCQlzZ3NpemUgPSBfYnVzX2Rt
YW1hcF9hZGRzZWcoZG1hdCwgbWFwLCBjdXJhZGRyLCBzZ3NpemUsIHNlZ3MsCisJCSAgICBzZWdw
KTsKKwkJaWYgKHNnc2l6ZSA9PSAwKQorCQkJYnJlYWs7CisJCWJ1ZiArPSBzZ3NpemU7CisJCWJ1
ZmxlbiAtPSBzZ3NpemU7CisJfQorCisJLyoKKwkgKiBEaWQgd2UgZml0PworCSAqLworCXJldHVy
biAoYnVmbGVuICE9IDAgPyBFRkJJRyA6IDApOyAvKiBYWFggYmV0dGVyIHJldHVybiB2YWx1ZSBo
ZXJlPyAqLworfQorCisvKgorICogVXRpbGl0eSBmdW5jdGlvbiB0byBsb2FkIGEgbGluZWFyIGJ1
ZmZlci4gIHNlZ3AgY29udGFpbnMKKyAqIHRoZSBzdGFydGluZyBzZWdtZW50IG9uIGVudHJhY2Us
IGFuZCB0aGUgZW5kaW5nIHNlZ21lbnQgb24gZXhpdC4KKyAqLworc3RhdGljIGludAorYm91bmNl
X2J1c19kbWFtYXBfbG9hZF9idWZmZXIoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3Qg
bWFwLCB2b2lkICpidWYsCisgICAgYnVzX3NpemVfdCBidWZsZW4sIHBtYXBfdCBwbWFwLCBpbnQg
ZmxhZ3MsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLAorICAgIGludCAqc2VncCkKK3sKKwlidXNf
c2l6ZV90IHNnc2l6ZSwgbWF4X3Nnc2l6ZTsKKwlidXNfYWRkcl90IGN1cmFkZHI7CisJdm1fb2Zm
c2V0X3QgdmFkZHI7CisJaW50IGVycm9yOworCisJaWYgKG1hcCA9PSBOVUxMKQorCQltYXAgPSAm
bm9ib3VuY2VfZG1hbWFwOworCisJaWYgKHNlZ3MgPT0gTlVMTCkKKwkJc2VncyA9IGRtYXQtPnNl
Z21lbnRzOworCisJaWYgKChkbWF0LT5ib3VuY2VfZmxhZ3MgJiBCVVNfRE1BX0NPVUxEX0JPVU5D
RSkgIT0gMCkgeworCQlfYnVzX2RtYW1hcF9jb3VudF9wYWdlcyhkbWF0LCBtYXAsIHBtYXAsIGJ1
ZiwgYnVmbGVuLCBmbGFncyk7CisJCWlmIChtYXAtPnBhZ2VzbmVlZGVkICE9IDApIHsKKwkJCWVy
cm9yID0gX2J1c19kbWFtYXBfcmVzZXJ2ZV9wYWdlcyhkbWF0LCBtYXAsIGZsYWdzKTsKKwkJCWlm
IChlcnJvcikKKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCX0KKworCXZhZGRyID0gKHZtX29m
ZnNldF90KWJ1ZjsKKwl3aGlsZSAoYnVmbGVuID4gMCkgeworCQkvKgorCQkgKiBHZXQgdGhlIHBo
eXNpY2FsIGFkZHJlc3MgZm9yIHRoaXMgc2VnbWVudC4KKwkJICovCisJCWlmIChwbWFwID09IGtl
cm5lbF9wbWFwKQorCQkJY3VyYWRkciA9IHBtYXBfa2V4dHJhY3QodmFkZHIpOworCQllbHNlCisJ
CQljdXJhZGRyID0gcG1hcF9leHRyYWN0KHBtYXAsIHZhZGRyKTsKKworCQkvKgorCQkgKiBDb21w
dXRlIHRoZSBzZWdtZW50IHNpemUsIGFuZCBhZGp1c3QgY291bnRzLgorCQkgKi8KKwkJbWF4X3Nn
c2l6ZSA9IE1JTihidWZsZW4sIGRtYXQtPmNvbW1vbi5tYXhzZWdzeik7CisJCXNnc2l6ZSA9IFBB
R0VfU0laRSAtICgodm1fb2Zmc2V0X3QpY3VyYWRkciAmIFBBR0VfTUFTSyk7CisJCWlmICgoKGRt
YXQtPmJvdW5jZV9mbGFncyAmIEJVU19ETUFfQ09VTERfQk9VTkNFKSAhPSAwKSAmJgorCQkgICAg
bWFwLT5wYWdlc25lZWRlZCAhPSAwICYmCisJCSAgICBidXNfZG1hX3J1bl9maWx0ZXIoJmRtYXQt
PmNvbW1vbiwgY3VyYWRkcikpIHsKKwkJCXNnc2l6ZSA9IHJvdW5kdXAyKHNnc2l6ZSwgZG1hdC0+
Y29tbW9uLmFsaWdubWVudCk7CisJCQlzZ3NpemUgPSBNSU4oc2dzaXplLCBtYXhfc2dzaXplKTsK
KwkJCWN1cmFkZHIgPSBhZGRfYm91bmNlX3BhZ2UoZG1hdCwgbWFwLCB2YWRkciwgY3VyYWRkciwK
KwkJCSAgICBzZ3NpemUpOworCQl9IGVsc2UgeworCQkJc2dzaXplID0gTUlOKHNnc2l6ZSwgbWF4
X3Nnc2l6ZSk7CisJCX0KKwkJc2dzaXplID0gX2J1c19kbWFtYXBfYWRkc2VnKGRtYXQsIG1hcCwg
Y3VyYWRkciwgc2dzaXplLCBzZWdzLAorCQkgICAgc2VncCk7CisJCWlmIChzZ3NpemUgPT0gMCkK
KwkJCWJyZWFrOworCQl2YWRkciArPSBzZ3NpemU7CisJCWJ1ZmxlbiAtPSBzZ3NpemU7CisJfQor
CisJLyoKKwkgKiBEaWQgd2UgZml0PworCSAqLworCXJldHVybiAoYnVmbGVuICE9IDAgPyBFRkJJ
RyA6IDApOyAvKiBYWFggYmV0dGVyIHJldHVybiB2YWx1ZSBoZXJlPyAqLworfQorCitzdGF0aWMg
dm9pZAorYm91bmNlX2J1c19kbWFtYXBfd2FpdG9rKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2Rt
YW1hcF90IG1hcCwKKyAgICBzdHJ1Y3QgbWVtZGVzYyAqbWVtLCBidXNfZG1hbWFwX2NhbGxiYWNr
X3QgKmNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19hcmcpCit7CisKKwlpZiAobWFwID09IE5VTEwp
CisJCXJldHVybjsKKwltYXAtPm1lbSA9ICptZW07CisJbWFwLT5kbWF0ID0gZG1hdDsKKwltYXAt
PmNhbGxiYWNrID0gY2FsbGJhY2s7CisJbWFwLT5jYWxsYmFja19hcmcgPSBjYWxsYmFja19hcmc7
Cit9CisKK3N0YXRpYyBidXNfZG1hX3NlZ21lbnRfdCAqCitib3VuY2VfYnVzX2RtYW1hcF9jb21w
bGV0ZShidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsCisgICAgYnVzX2RtYV9z
ZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9yKQoreworCisJaWYgKHNlZ3MgPT0g
TlVMTCkKKwkJc2VncyA9IGRtYXQtPnNlZ21lbnRzOworCXJldHVybiAoc2Vncyk7Cit9CisKKy8q
CisgKiBSZWxlYXNlIHRoZSBtYXBwaW5nIGhlbGQgYnkgbWFwLgorICovCitzdGF0aWMgdm9pZAor
Ym91bmNlX2J1c19kbWFtYXBfdW5sb2FkKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90
IG1hcCkKK3sKKwlzdHJ1Y3QgYm91bmNlX3BhZ2UgKmJwYWdlOworCisJd2hpbGUgKChicGFnZSA9
IFNUQUlMUV9GSVJTVCgmbWFwLT5icGFnZXMpKSAhPSBOVUxMKSB7CisJCVNUQUlMUV9SRU1PVkVf
SEVBRCgmbWFwLT5icGFnZXMsIGxpbmtzKTsKKwkJZnJlZV9ib3VuY2VfcGFnZShkbWF0LCBicGFn
ZSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYm91bmNlX2J1c19kbWFtYXBfc3luYyhidXNfZG1h
X3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsCisgICAgYnVzX2RtYXN5bmNfb3BfdCBvcCkK
K3sKKwlzdHJ1Y3QgYm91bmNlX3BhZ2UgKmJwYWdlOworCisJLyoKKwkgKiBYWFggQVJNNjRUT0RP
OgorCSAqIFRoaXMgYnVzX2RtYSBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyBJTy1Db2hlcmVudCBh
cmNoaXRlY3V0cmUuCisJICogSWYgSU8tQ29oZXJlbmN5IGlzIG5vdCBndWFyYW50ZWVkLCBjYWNo
ZSBvcGVyYXRpb25zIGhhdmUgdG8gYmUKKwkgKiBhZGRlZCB0byB0aGlzIGZ1bmN0aW9uLgorCSAq
LworCisJaWYgKChicGFnZSA9IFNUQUlMUV9GSVJTVCgmbWFwLT5icGFnZXMpKSAhPSBOVUxMKSB7
CisJCS8qCisJCSAqIEhhbmRsZSBkYXRhIGJvdW5jaW5nLiAgV2UgbWlnaHQgYWxzbworCQkgKiB3
YW50IHRvIGFkZCBzdXBwb3J0IGZvciBpbnZhbGlkYXRpbmcKKwkJICogdGhlIGNhY2hlcyBvbiBi
cm9rZW4gaGFyZHdhcmUKKwkJICovCisJCUNUUjQoS1RSX0JVU0RNQSwgIiVzOiB0YWcgJXAgdGFn
IGZsYWdzIDB4JXggb3AgMHgleCAiCisJCSAgICAicGVyZm9ybWluZyBib3VuY2UiLCBfX2Z1bmNf
XywgZG1hdCwKKwkJICAgIGRtYXQtPmNvbW1vbi5mbGFncywgb3ApOworCisJCWlmICgob3AgJiBC
VVNfRE1BU1lOQ19QUkVXUklURSkgIT0gMCkgeworCQkJd2hpbGUgKGJwYWdlICE9IE5VTEwpIHsK
KwkJCQlpZiAoYnBhZ2UtPmRhdGF2YWRkciAhPSAwKSB7CisJCQkJCWJjb3B5KCh2b2lkICopYnBh
Z2UtPmRhdGF2YWRkciwKKwkJCQkJICAgICh2b2lkICopYnBhZ2UtPnZhZGRyLAorCQkJCQkgICAg
YnBhZ2UtPmRhdGFjb3VudCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGh5c2NvcHlvdXQoYnBhZ2Ut
PmRhdGFhZGRyLAorCQkJCQkgICAgKHZvaWQgKilicGFnZS0+dmFkZHIsCisJCQkJCSAgICBicGFn
ZS0+ZGF0YWNvdW50KTsKKwkJCQl9CisJCQkJYnBhZ2UgPSBTVEFJTFFfTkVYVChicGFnZSwgbGlu
a3MpOworCQkJfQorCQkJZG1hdC0+Ym91bmNlX3pvbmUtPnRvdGFsX2JvdW5jZWQrKzsKKwkJfQor
CisJCWlmICgob3AgJiBCVVNfRE1BU1lOQ19QT1NUUkVBRCkgIT0gMCkgeworCQkJd2hpbGUgKGJw
YWdlICE9IE5VTEwpIHsKKwkJCQlpZiAoYnBhZ2UtPmRhdGF2YWRkciAhPSAwKSB7CisJCQkJCWJj
b3B5KCh2b2lkICopYnBhZ2UtPnZhZGRyLAorCQkJCQkgICAgKHZvaWQgKilicGFnZS0+ZGF0YXZh
ZGRyLAorCQkJCQkgICAgYnBhZ2UtPmRhdGFjb3VudCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGh5
c2NvcHlpbigodm9pZCAqKWJwYWdlLT52YWRkciwKKwkJCQkJICAgIGJwYWdlLT5kYXRhYWRkciwK
KwkJCQkJICAgIGJwYWdlLT5kYXRhY291bnQpOworCQkJCX0KKwkJCQlicGFnZSA9IFNUQUlMUV9O
RVhUKGJwYWdlLCBsaW5rcyk7CisJCQl9CisJCQlkbWF0LT5ib3VuY2Vfem9uZS0+dG90YWxfYm91
bmNlZCsrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAoraW5pdF9ib3VuY2VfcGFnZXModm9p
ZCAqZHVtbXkgX191bnVzZWQpCit7CisKKwl0b3RhbF9icGFnZXMgPSAwOworCVNUQUlMUV9JTklU
KCZib3VuY2Vfem9uZV9saXN0KTsKKwlTVEFJTFFfSU5JVCgmYm91bmNlX21hcF93YWl0aW5nbGlz
dCk7CisJU1RBSUxRX0lOSVQoJmJvdW5jZV9tYXBfY2FsbGJhY2tsaXN0KTsKKwltdHhfaW5pdCgm
Ym91bmNlX2xvY2ssICJib3VuY2UgcGFnZXMgbG9jayIsIE5VTEwsIE1UWF9ERUYpOworfQorU1lT
SU5JVChicGFnZXMsIFNJX1NVQl9MT0NLLCBTSV9PUkRFUl9BTlksIGluaXRfYm91bmNlX3BhZ2Vz
LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBzeXNjdGxfY3R4X2xpc3QgKgorYnVzZG1hX3N5c2N0
bF90cmVlKHN0cnVjdCBib3VuY2Vfem9uZSAqYnopCit7CisJcmV0dXJuICgmYnotPnN5c2N0bF90
cmVlKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNjdGxfb2lkICoKK2J1c2RtYV9zeXNjdGxfdHJl
ZV90b3Aoc3RydWN0IGJvdW5jZV96b25lICpieikKK3sKKwlyZXR1cm4gKGJ6LT5zeXNjdGxfdHJl
ZV90b3ApOworfQorCitzdGF0aWMgaW50CithbGxvY19ib3VuY2Vfem9uZShidXNfZG1hX3RhZ190
IGRtYXQpCit7CisJc3RydWN0IGJvdW5jZV96b25lICpiejsKKworCS8qIENoZWNrIHRvIHNlZSBp
ZiB3ZSBhbHJlYWR5IGhhdmUgYSBzdWl0YWJsZSB6b25lICovCisJU1RBSUxRX0ZPUkVBQ0goYnos
ICZib3VuY2Vfem9uZV9saXN0LCBsaW5rcykgeworCQlpZiAoKGRtYXQtPmNvbW1vbi5hbGlnbm1l
bnQgPD0gYnotPmFsaWdubWVudCkgJiYKKwkJICAgIChkbWF0LT5jb21tb24ubG93YWRkciA+PSBi
ei0+bG93YWRkcikpIHsKKwkJCWRtYXQtPmJvdW5jZV96b25lID0gYno7CisJCQlyZXR1cm4gKDAp
OworCQl9CisJfQorCisJaWYgKChieiA9IChzdHJ1Y3QgYm91bmNlX3pvbmUgKiltYWxsb2Moc2l6
ZW9mKCpieiksIE1fREVWQlVGLAorCSAgICBNX05PV0FJVCB8IE1fWkVSTykpID09IE5VTEwpCisJ
CXJldHVybiAoRU5PTUVNKTsKKworCVNUQUlMUV9JTklUKCZiei0+Ym91bmNlX3BhZ2VfbGlzdCk7
CisJYnotPmZyZWVfYnBhZ2VzID0gMDsKKwliei0+cmVzZXJ2ZWRfYnBhZ2VzID0gMDsKKwliei0+
YWN0aXZlX2JwYWdlcyA9IDA7CisJYnotPmxvd2FkZHIgPSBkbWF0LT5jb21tb24ubG93YWRkcjsK
Kwliei0+YWxpZ25tZW50ID0gTUFYKGRtYXQtPmNvbW1vbi5hbGlnbm1lbnQsIFBBR0VfU0laRSk7
CisJYnotPm1hcF9jb3VudCA9IDA7CisJc25wcmludGYoYnotPnpvbmVpZCwgOCwgInpvbmUlZCIs
IGJ1c2RtYV96b25lY291bnQpOworCWJ1c2RtYV96b25lY291bnQrKzsKKwlzbnByaW50Zihiei0+
bG93YWRkcmlkLCAxOCwgIiUjangiLCAodWludG1heF90KWJ6LT5sb3dhZGRyKTsKKwlTVEFJTFFf
SU5TRVJUX1RBSUwoJmJvdW5jZV96b25lX2xpc3QsIGJ6LCBsaW5rcyk7CisJZG1hdC0+Ym91bmNl
X3pvbmUgPSBiejsKKworCXN5c2N0bF9jdHhfaW5pdCgmYnotPnN5c2N0bF90cmVlKTsKKwliei0+
c3lzY3RsX3RyZWVfdG9wID0gU1lTQ1RMX0FERF9OT0RFKCZiei0+c3lzY3RsX3RyZWUsCisJICAg
IFNZU0NUTF9TVEFUSUNfQ0hJTERSRU4oX2h3X2J1c2RtYSksIE9JRF9BVVRPLCBiei0+em9uZWlk
LAorCSAgICBDVExGTEFHX1JELCAwLCAiIik7CisJaWYgKGJ6LT5zeXNjdGxfdHJlZV90b3AgPT0g
TlVMTCkgeworCQlzeXNjdGxfY3R4X2ZyZWUoJmJ6LT5zeXNjdGxfdHJlZSk7CisJCXJldHVybiAo
MCk7CS8qIFhYWCBlcnJvciBjb2RlPyAqLworCX0KKworCVNZU0NUTF9BRERfSU5UKGJ1c2RtYV9z
eXNjdGxfdHJlZShieiksCisJICAgIFNZU0NUTF9DSElMRFJFTihidXNkbWFfc3lzY3RsX3RyZWVf
dG9wKGJ6KSksIE9JRF9BVVRPLAorCSAgICAidG90YWxfYnBhZ2VzIiwgQ1RMRkxBR19SRCwgJmJ6
LT50b3RhbF9icGFnZXMsIDAsCisJICAgICJUb3RhbCBib3VuY2UgcGFnZXMiKTsKKwlTWVNDVExf
QUREX0lOVChidXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVz
ZG1hX3N5c2N0bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgImZyZWVfYnBhZ2VzIiwg
Q1RMRkxBR19SRCwgJmJ6LT5mcmVlX2JwYWdlcywgMCwKKwkgICAgIkZyZWUgYm91bmNlIHBhZ2Vz
Iik7CisJU1lTQ1RMX0FERF9JTlQoYnVzZG1hX3N5c2N0bF90cmVlKGJ6KSwKKwkgICAgU1lTQ1RM
X0NISUxEUkVOKGJ1c2RtYV9zeXNjdGxfdHJlZV90b3AoYnopKSwgT0lEX0FVVE8sCisJICAgICJy
ZXNlcnZlZF9icGFnZXMiLCBDVExGTEFHX1JELCAmYnotPnJlc2VydmVkX2JwYWdlcywgMCwKKwkg
ICAgIlJlc2VydmVkIGJvdW5jZSBwYWdlcyIpOworCVNZU0NUTF9BRERfSU5UKGJ1c2RtYV9zeXNj
dGxfdHJlZShieiksCisJICAgIFNZU0NUTF9DSElMRFJFTihidXNkbWFfc3lzY3RsX3RyZWVfdG9w
KGJ6KSksIE9JRF9BVVRPLAorCSAgICAiYWN0aXZlX2JwYWdlcyIsIENUTEZMQUdfUkQsICZiei0+
YWN0aXZlX2JwYWdlcywgMCwKKwkgICAgIkFjdGl2ZSBib3VuY2UgcGFnZXMiKTsKKwlTWVNDVExf
QUREX0lOVChidXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVz
ZG1hX3N5c2N0bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgInRvdGFsX2JvdW5jZWQi
LCBDVExGTEFHX1JELCAmYnotPnRvdGFsX2JvdW5jZWQsIDAsCisJICAgICJUb3RhbCBib3VuY2Ug
cmVxdWVzdHMiKTsKKwlTWVNDVExfQUREX0lOVChidXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAg
ICBTWVNDVExfQ0hJTERSRU4oYnVzZG1hX3N5c2N0bF90cmVlX3RvcChieikpLCBPSURfQVVUTywK
KwkgICAgInRvdGFsX2RlZmVycmVkIiwgQ1RMRkxBR19SRCwgJmJ6LT50b3RhbF9kZWZlcnJlZCwg
MCwKKwkgICAgIlRvdGFsIGJvdW5jZSByZXF1ZXN0cyB0aGF0IHdlcmUgZGVmZXJyZWQiKTsKKwlT
WVNDVExfQUREX1NUUklORyhidXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJ
TERSRU4oYnVzZG1hX3N5c2N0bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgImxvd2Fk
ZHIiLCBDVExGTEFHX1JELCBiei0+bG93YWRkcmlkLCAwLCAiIik7CisJU1lTQ1RMX0FERF9VQVVU
TyhidXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVzZG1hX3N5
c2N0bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgImFsaWdubWVudCIsIENUTEZMQUdf
UkQsICZiei0+YWxpZ25tZW50LCAiIik7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50
CithbGxvY19ib3VuY2VfcGFnZXMoYnVzX2RtYV90YWdfdCBkbWF0LCB1X2ludCBudW1wYWdlcykK
K3sKKwlzdHJ1Y3QgYm91bmNlX3pvbmUgKmJ6OworCWludCBjb3VudDsKKworCWJ6ID0gZG1hdC0+
Ym91bmNlX3pvbmU7CisJY291bnQgPSAwOworCXdoaWxlIChudW1wYWdlcyA+IDApIHsKKwkJc3Ry
dWN0IGJvdW5jZV9wYWdlICpicGFnZTsKKworCQlicGFnZSA9IChzdHJ1Y3QgYm91bmNlX3BhZ2Ug
KiltYWxsb2Moc2l6ZW9mKCpicGFnZSksIE1fREVWQlVGLAorCQkJCQkJICAgICBNX05PV0FJVCB8
IE1fWkVSTyk7CisKKwkJaWYgKGJwYWdlID09IE5VTEwpCisJCQlicmVhazsKKwkJYnBhZ2UtPnZh
ZGRyID0gKHZtX29mZnNldF90KWNvbnRpZ21hbGxvYyhQQUdFX1NJWkUsIE1fREVWQlVGLAorCQkJ
CQkJCSBNX05PV0FJVCwgMHVsLAorCQkJCQkJCSBiei0+bG93YWRkciwKKwkJCQkJCQkgUEFHRV9T
SVpFLAorCQkJCQkJCSAwKTsKKwkJaWYgKGJwYWdlLT52YWRkciA9PSAwKSB7CisJCQlmcmVlKGJw
YWdlLCBNX0RFVkJVRik7CisJCQlicmVhazsKKwkJfQorCQlicGFnZS0+YnVzYWRkciA9IHBtYXBf
a2V4dHJhY3QoYnBhZ2UtPnZhZGRyKTsKKwkJbXR4X2xvY2soJmJvdW5jZV9sb2NrKTsKKwkJU1RB
SUxRX0lOU0VSVF9UQUlMKCZiei0+Ym91bmNlX3BhZ2VfbGlzdCwgYnBhZ2UsIGxpbmtzKTsKKwkJ
dG90YWxfYnBhZ2VzKys7CisJCWJ6LT50b3RhbF9icGFnZXMrKzsKKwkJYnotPmZyZWVfYnBhZ2Vz
Kys7CisJCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKKwkJY291bnQrKzsKKwkJbnVtcGFnZXMt
LTsKKwl9CisJcmV0dXJuIChjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc2VydmVfYm91bmNl
X3BhZ2VzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgaW50IGNvbW1pdCkK
K3sKKwlzdHJ1Y3QgYm91bmNlX3pvbmUgKmJ6OworCWludCBwYWdlczsKKworCW10eF9hc3NlcnQo
JmJvdW5jZV9sb2NrLCBNQV9PV05FRCk7CisJYnogPSBkbWF0LT5ib3VuY2Vfem9uZTsKKwlwYWdl
cyA9IE1JTihiei0+ZnJlZV9icGFnZXMsIG1hcC0+cGFnZXNuZWVkZWQgLSBtYXAtPnBhZ2VzcmVz
ZXJ2ZWQpOworCWlmIChjb21taXQgPT0gMCAmJiBtYXAtPnBhZ2VzbmVlZGVkID4gKG1hcC0+cGFn
ZXNyZXNlcnZlZCArIHBhZ2VzKSkKKwkJcmV0dXJuIChtYXAtPnBhZ2VzbmVlZGVkIC0gKG1hcC0+
cGFnZXNyZXNlcnZlZCArIHBhZ2VzKSk7CisJYnotPmZyZWVfYnBhZ2VzIC09IHBhZ2VzOworCWJ6
LT5yZXNlcnZlZF9icGFnZXMgKz0gcGFnZXM7CisJbWFwLT5wYWdlc3Jlc2VydmVkICs9IHBhZ2Vz
OworCXBhZ2VzID0gbWFwLT5wYWdlc25lZWRlZCAtIG1hcC0+cGFnZXNyZXNlcnZlZDsKKworCXJl
dHVybiAocGFnZXMpOworfQorCitzdGF0aWMgYnVzX2FkZHJfdAorYWRkX2JvdW5jZV9wYWdlKGJ1
c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgdm1fb2Zmc2V0X3QgdmFkZHIsCisJ
CWJ1c19hZGRyX3QgYWRkciwgYnVzX3NpemVfdCBzaXplKQoreworCXN0cnVjdCBib3VuY2Vfem9u
ZSAqYno7CisJc3RydWN0IGJvdW5jZV9wYWdlICpicGFnZTsKKworCUtBU1NFUlQoZG1hdC0+Ym91
bmNlX3pvbmUgIT0gTlVMTCwgKCJubyBib3VuY2Ugem9uZSBpbiBkbWEgdGFnIikpOworCUtBU1NF
UlQobWFwICE9IE5VTEwgJiYgbWFwICE9ICZub2JvdW5jZV9kbWFtYXAsCisJICAgICgiYWRkX2Jv
dW5jZV9wYWdlOiBiYWQgbWFwICVwIiwgbWFwKSk7CisKKwlieiA9IGRtYXQtPmJvdW5jZV96b25l
OworCWlmIChtYXAtPnBhZ2VzbmVlZGVkID09IDApCisJCXBhbmljKCJhZGRfYm91bmNlX3BhZ2U6
IG1hcCBkb2Vzbid0IG5lZWQgYW55IHBhZ2VzIik7CisJbWFwLT5wYWdlc25lZWRlZC0tOworCisJ
aWYgKG1hcC0+cGFnZXNyZXNlcnZlZCA9PSAwKQorCQlwYW5pYygiYWRkX2JvdW5jZV9wYWdlOiBt
YXAgZG9lc24ndCBuZWVkIGFueSBwYWdlcyIpOworCW1hcC0+cGFnZXNyZXNlcnZlZC0tOworCisJ
bXR4X2xvY2soJmJvdW5jZV9sb2NrKTsKKwlicGFnZSA9IFNUQUlMUV9GSVJTVCgmYnotPmJvdW5j
ZV9wYWdlX2xpc3QpOworCWlmIChicGFnZSA9PSBOVUxMKQorCQlwYW5pYygiYWRkX2JvdW5jZV9w
YWdlOiBmcmVlIHBhZ2UgbGlzdCBpcyBlbXB0eSIpOworCisJU1RBSUxRX1JFTU9WRV9IRUFEKCZi
ei0+Ym91bmNlX3BhZ2VfbGlzdCwgbGlua3MpOworCWJ6LT5yZXNlcnZlZF9icGFnZXMtLTsKKwli
ei0+YWN0aXZlX2JwYWdlcysrOworCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKKworCWlmIChk
bWF0LT5jb21tb24uZmxhZ3MgJiBCVVNfRE1BX0tFRVBfUEdfT0ZGU0VUKSB7CisJCS8qIFBhZ2Ug
b2Zmc2V0IG5lZWRzIHRvIGJlIHByZXNlcnZlZC4gKi8KKwkJYnBhZ2UtPnZhZGRyIHw9IGFkZHIg
JiBQQUdFX01BU0s7CisJCWJwYWdlLT5idXNhZGRyIHw9IGFkZHIgJiBQQUdFX01BU0s7CisJfQor
CWJwYWdlLT5kYXRhdmFkZHIgPSB2YWRkcjsKKwlicGFnZS0+ZGF0YWFkZHIgPSBhZGRyOworCWJw
YWdlLT5kYXRhY291bnQgPSBzaXplOworCVNUQUlMUV9JTlNFUlRfVEFJTCgmKG1hcC0+YnBhZ2Vz
KSwgYnBhZ2UsIGxpbmtzKTsKKwlyZXR1cm4gKGJwYWdlLT5idXNhZGRyKTsKK30KKworc3RhdGlj
IHZvaWQKK2ZyZWVfYm91bmNlX3BhZ2UoYnVzX2RtYV90YWdfdCBkbWF0LCBzdHJ1Y3QgYm91bmNl
X3BhZ2UgKmJwYWdlKQoreworCXN0cnVjdCBidXNfZG1hbWFwICptYXA7CisJc3RydWN0IGJvdW5j
ZV96b25lICpiejsKKworCWJ6ID0gZG1hdC0+Ym91bmNlX3pvbmU7CisJYnBhZ2UtPmRhdGF2YWRk
ciA9IDA7CisJYnBhZ2UtPmRhdGFjb3VudCA9IDA7CisJaWYgKGRtYXQtPmNvbW1vbi5mbGFncyAm
IEJVU19ETUFfS0VFUF9QR19PRkZTRVQpIHsKKwkJLyoKKwkJICogUmVzZXQgdGhlIGJvdW5jZSBw
YWdlIHRvIHN0YXJ0IGF0IG9mZnNldCAwLiAgT3RoZXIgdXNlcworCQkgKiBvZiB0aGlzIGJvdW5j
ZSBwYWdlIG1heSBuZWVkIHRvIHN0b3JlIGEgZnVsbCBwYWdlIG9mCisJCSAqIGRhdGEgYW5kL29y
IGFzc3VtZSBpdCBzdGFydHMgb24gYSBwYWdlIGJvdW5kYXJ5LgorCQkgKi8KKwkJYnBhZ2UtPnZh
ZGRyICY9IH5QQUdFX01BU0s7CisJCWJwYWdlLT5idXNhZGRyICY9IH5QQUdFX01BU0s7CisJfQor
CisJbXR4X2xvY2soJmJvdW5jZV9sb2NrKTsKKwlTVEFJTFFfSU5TRVJUX0hFQUQoJmJ6LT5ib3Vu
Y2VfcGFnZV9saXN0LCBicGFnZSwgbGlua3MpOworCWJ6LT5mcmVlX2JwYWdlcysrOworCWJ6LT5h
Y3RpdmVfYnBhZ2VzLS07CisJaWYgKChtYXAgPSBTVEFJTFFfRklSU1QoJmJvdW5jZV9tYXBfd2Fp
dGluZ2xpc3QpKSAhPSBOVUxMKSB7CisJCWlmIChyZXNlcnZlX2JvdW5jZV9wYWdlcyhtYXAtPmRt
YXQsIG1hcCwgMSkgPT0gMCkgeworCQkJU1RBSUxRX1JFTU9WRV9IRUFEKCZib3VuY2VfbWFwX3dh
aXRpbmdsaXN0LCBsaW5rcyk7CisJCQlTVEFJTFFfSU5TRVJUX1RBSUwoJmJvdW5jZV9tYXBfY2Fs
bGJhY2tsaXN0LAorCQkJICAgIG1hcCwgbGlua3MpOworCQkJYnVzZG1hX3N3aV9wZW5kaW5nID0g
MTsKKwkJCWJ6LT50b3RhbF9kZWZlcnJlZCsrOworCQkJc3dpX3NjaGVkKHZtX2loLCAwKTsKKwkJ
fQorCX0KKwltdHhfdW5sb2NrKCZib3VuY2VfbG9jayk7Cit9CisKK3ZvaWQKK2J1c2RtYV9zd2ko
dm9pZCkKK3sKKwlidXNfZG1hX3RhZ190IGRtYXQ7CisJc3RydWN0IGJ1c19kbWFtYXAgKm1hcDsK
KworCW10eF9sb2NrKCZib3VuY2VfbG9jayk7CisJd2hpbGUgKChtYXAgPSBTVEFJTFFfRklSU1Qo
JmJvdW5jZV9tYXBfY2FsbGJhY2tsaXN0KSkgIT0gTlVMTCkgeworCQlTVEFJTFFfUkVNT1ZFX0hF
QUQoJmJvdW5jZV9tYXBfY2FsbGJhY2tsaXN0LCBsaW5rcyk7CisJCW10eF91bmxvY2soJmJvdW5j
ZV9sb2NrKTsKKwkJZG1hdCA9IG1hcC0+ZG1hdDsKKwkJKGRtYXQtPmNvbW1vbi5sb2NrZnVuYyko
ZG1hdC0+Y29tbW9uLmxvY2tmdW5jYXJnLCBCVVNfRE1BX0xPQ0spOworCQlidXNfZG1hbWFwX2xv
YWRfbWVtKG1hcC0+ZG1hdCwgbWFwLCAmbWFwLT5tZW0sCisJCSAgICBtYXAtPmNhbGxiYWNrLCBt
YXAtPmNhbGxiYWNrX2FyZywgQlVTX0RNQV9XQUlUT0spOworCQkoZG1hdC0+Y29tbW9uLmxvY2tm
dW5jKShkbWF0LT5jb21tb24ubG9ja2Z1bmNhcmcsCisJCSAgICBCVVNfRE1BX1VOTE9DSyk7CisJ
CW10eF9sb2NrKCZib3VuY2VfbG9jayk7CisJfQorCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsK
K30KKworc3RydWN0IGJ1c19kbWFfaW1wbCBidXNfZG1hX2JvdW5jZV9pbXBsID0geworCS50YWdf
Y3JlYXRlID0gYm91bmNlX2J1c19kbWFfdGFnX2NyZWF0ZSwKKwkudGFnX2Rlc3Ryb3kgPSBib3Vu
Y2VfYnVzX2RtYV90YWdfZGVzdHJveSwKKwkubWFwX2NyZWF0ZSA9IGJvdW5jZV9idXNfZG1hbWFw
X2NyZWF0ZSwKKwkubWFwX2Rlc3Ryb3kgPSBib3VuY2VfYnVzX2RtYW1hcF9kZXN0cm95LAorCS5t
ZW1fYWxsb2MgPSBib3VuY2VfYnVzX2RtYW1lbV9hbGxvYywKKwkubWVtX2ZyZWUgPSBib3VuY2Vf
YnVzX2RtYW1lbV9mcmVlLAorCS5sb2FkX3BoeXMgPSBib3VuY2VfYnVzX2RtYW1hcF9sb2FkX3Bo
eXMsCisJLmxvYWRfYnVmZmVyID0gYm91bmNlX2J1c19kbWFtYXBfbG9hZF9idWZmZXIsCisJLmxv
YWRfbWEgPSBidXNfZG1hbWFwX2xvYWRfbWFfdHJpdiwKKwkubWFwX3dhaXRvayA9IGJvdW5jZV9i
dXNfZG1hbWFwX3dhaXRvaywKKwkubWFwX2NvbXBsZXRlID0gYm91bmNlX2J1c19kbWFtYXBfY29t
cGxldGUsCisJLm1hcF91bmxvYWQgPSBib3VuY2VfYnVzX2RtYW1hcF91bmxvYWQsCisJLm1hcF9z
eW5jID0gYm91bmNlX2J1c19kbWFtYXBfc3luYworfTsKCg==


--b1_1538bc4ebbf7d3d51276fdc30340efcf--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1538bc4ebbf7d3d51276fdc30340efcf>