[PATCH branch-1.6] builtin: Stage 30: add qindir builtin

Eric Blake via M4-patches <[email protected]> Sat, 10 May 2025 20:56:41 -0500
Newsgroups gmane.comp.gnu.m4.patches
Message-ID <[email protected]>
KiBkb2MvbTQudGV4aSAoSW5kaXJlY3Rpb24pOiBOZXcgY2hhcHRlciwgY29udGFpbmluZyBwcmUt
ZXhpc3RpbmcKSW5kaXIgYW5kIEJ1aWx0aW4gc2VjdGlvbnMuCihRaW5kaXIpOiBOZXcgc2VjdGlv
bi4KKEJ1aWx0aW4pOiBEb2N1bWVudCBpbnRlcmFjdGlvbiB3aXRoIHFpbmRpci4KKiBzcmMvYnVp
bHRpbi9jIChpbmRpciwgbTRfcWluZGlyKTogTmV3IGZ1bmN0aW9ucy4KKGJ1aWx0aW5fdGFiKTog
UmVnaXN0ZXIgbmV3IGJ1aWx0aW4uCiogc3JjL2lucHV0LmMgKGlucHV0X3R5cGUpOiBBZGQgSU5Q
VVRfRklMRV9RLgoocHVzaF9xdW90ZV93cmFwcGVyKTogTmV3IGZ1bmN0aW9uLgoocHVzaF9maWxl
LCBwdXNoX3N0cmluZ19pbml0LCBwdXNoX3N0cmluZ19maW5pc2gsIHBvcF9pbnB1dCkKKHBvcF93
cmFwdXAsIGlucHV0X3ByaW50LCBuZXh0X2J1ZmZlciwgY29uc3VtZV9idWZmZXIsIHBlZWtfaW5w
dXQpCihuZXh0X2NoYXJfMSwgc2tpcF9saW5lKTogTWFuYWdlIHF1b3RlIGluamVjdGlvbi4KKiBz
cmMvbTQuaCAocHVzaF9xdW90ZV93cmFwcGVyKTogTmV3IGRlY2xhcmF0aW9uLgoqIE5FV1M6IERv
Y3VtZW50IHRoZSBuZXcgbWFjcm8uCi0tLQoKSSdtIHRyeWluZyB0byBwb3J0IHJlbWFpbmluZyBw
YXRjaGVzIGZyb20gdGhlIGFyZ3ZfcmVmIGJyYW5jaCBpbnRvCmJyYW5jaC0xLjY7IHRoaXMgb25l
IGNvbWVzIGZyb20gY29tbWl0IDQ4YTNiZDAzIG9uIHRoYXQgYnJhbmNoLgoKIE5FV1MgICAgICAg
ICAgfCAgIDMgKwogZG9jL200LnRleGkgICB8IDE4OSArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKy0tCiBzcmMvYnVpbHRpbi5jIHwgIDMyICsrKysrLQogc3JjL2lucHV0LmMgICB8IDMwMSAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogc3JjL200
LmggICAgICB8ICAgMSArCiA1IGZpbGVzIGNoYW5nZWQsIDQ1MCBpbnNlcnRpb25zKCspLCA3NiBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ORVdTIGIvTkVXUwppbmRleCAzNTViM2ZlYS4uODlj
YWZlNmUgMTAwNjQ0Ci0tLSBhL05FV1MKKysrIGIvTkVXUwpAQCAtNzcsNiArNzcsOSBAQCBHTlUg
TTQgTkVXUyAtIFVzZXIgdmlzaWJsZSBjaGFuZ2VzLgogICAgQWxzbywgdGhlIHBvc2l0aW9uIG9m
IGAtZCcgd2l0aCByZXNwZWN0IHRvIGZpbGVzIG9uIHRoZSBjb21tYW5kIGxpbmUgaXMKICAgIG5v
dyBzaWduaWZpY2FudC4KCisqKiBBIG5ldyBgcWluZGlyJyBidWlsdGluIGlzIGFkZGVkLCBzaW1p
bGFyIHRvIGBpbmRpcicsIGJ1dCB3aGVyZSB0aGUKKyAgIG91dHB1dCBpcyBxdW90ZWQgcmF0aGVy
IHRoYW4gcmVzY2FubmVkIGZvciBmdXJ0aGVyIG1hY3JvIGV4cGFuc2lvbi4KKwogKiogQSBuZXcg
cHJlZGVmaW5lZCB0ZXh0IG1hY3JvLCBgX19tNF92ZXJzaW9uX18nLCBleHBhbmRzIHRvIHRoZSB1
bnF1b3RlZAogICAgdmVyc2lvbiBudW1iZXIgb2YgTTQsIGlmIEdOVSBleHRlbnNpb25zIGFyZSBl
bmFibGVkLiAgV2hpbGUgeW91IHNob3VsZAogICAgZ2VuZXJhbGx5IGZhdm9yIGZlYXR1cmUgdGVz
dHMgb3ZlciB2ZXJzaW9uIG51bWJlciBjaGVja3MsIHRoaXMgbWFjcm8gY2FuCmRpZmYgLS1naXQg
YS9kb2MvbTQudGV4aSBiL2RvYy9tNC50ZXhpCmluZGV4IDEwMzE0ZDQyLi4yMzA1MmUwZCAxMDA2
NDQKLS0tIGEvZG9jL200LnRleGkKKysrIGIvZG9jL200LnRleGkKQEAgLTExMCw2ICsxMTAsNyBA
QCBUb3AKCiAqIE1hY3Jvczo6ICAgICAgICAgICAgICAgICAgICAgIEhvdyB0byBpbnZva2UgbWFj
cm9zCiAqIERlZmluaXRpb25zOjogICAgICAgICAgICAgICAgIEhvdyB0byBkZWZpbmUgbmV3IG1h
Y3JvcworKiBJbmRpcmVjdGlvbjo6ICAgICAgICAgICAgICAgICBVc2luZyBpbmFjY2Vzc2libGUg
bWFjcm9zCiAqIENvbmRpdGlvbmFsczo6ICAgICAgICAgICAgICAgIENvbmRpdGlvbmFscywgbG9v
cHMsIGFuZCByZWN1cnNpb24KCiAqIERlYnVnZ2luZzo6ICAgICAgICAgICAgICAgICAgIEhvdyB0
byBkZWJ1ZyBtYWNyb3MgYW5kIGlucHV0CkBAIC0xNzUsOCArMTc2LDExIEBAIFRvcAogKiBEZWZu
OjogICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWluZyBtYWNyb3MKICogUHVzaGRlZjo6ICAg
ICAgICAgICAgICAgICAgICAgVGVtcG9yYXJpbHkgcmVkZWZpbmluZyBtYWNyb3MKCi0qIEluZGly
OjogICAgICAgICAgICAgICAgICAgICAgIEluZGlyZWN0IGNhbGwgb2YgbWFjcm9zCi0qIEJ1aWx0
aW46OiAgICAgICAgICAgICAgICAgICAgIEluZGlyZWN0IGNhbGwgb2YgYnVpbHRpbnMKK1VzaW5n
IGluYWNjZXNzaWJsZSBtYWNyb3MKKworKiBJbmRpcjo6ICAgICAgICAgICAgICAgICAgICAgICBV
bnF1b3RlZCBpbmRpcmVjdCBjYWxsIG9mIG1hY3JvcworKiBRaW5kaXI6OiAgICAgICAgICAgICAg
ICAgICAgICBRdW90ZWQgaW5kaXJlY3QgY2FsbCBvZiBtYWNyb3MKKyogQnVpbHRpbjo6ICAgICAg
ICAgICAgICAgICAgICAgVW5xdW90ZWQgaW5kaXJlY3QgY2FsbCBvZiBidWlsdGlucwoKIENvbmRp
dGlvbmFscywgbG9vcHMsIGFuZCByZWN1cnNpb24KCkBAIC0xODkzLDkgKzE4OTcsNiBAQCBEZWZp
bml0aW9ucwogKiBVbmRlZmluZTo6ICAgICAgICAgICAgICAgICAgICBEZWxldGluZyBhIG1hY3Jv
CiAqIERlZm46OiAgICAgICAgICAgICAgICAgICAgICAgIFJlbmFtaW5nIG1hY3JvcwogKiBQdXNo
ZGVmOjogICAgICAgICAgICAgICAgICAgICBUZW1wb3JhcmlseSByZWRlZmluaW5nIG1hY3Jvcwot
Ci0qIEluZGlyOjogICAgICAgICAgICAgICAgICAgICAgIEluZGlyZWN0IGNhbGwgb2YgbWFjcm9z
Ci0qIEJ1aWx0aW46OiAgICAgICAgICAgICAgICAgICAgIEluZGlyZWN0IGNhbGwgb2YgYnVpbHRp
bnMKIEBlbmQgbWVudQoKIEBub2RlIERlZmluZQpAQCAtMjczNCwxMCArMjczNSwzMCBAQCBQdXNo
ZGVmCiBAcmVzdWx0e30KIEBlbmQgZXhhbXBsZQoKLUBub2RlIEluZGlyCi1Ac2VjdGlvbiBJbmRp
cmVjdCBjYWxsIG9mIG1hY3JvcworQG5vZGUgSW5kaXJlY3Rpb24KK0BjaGFwdGVyIFVzaW5nIGlu
YWNjZXNzaWJsZSBtYWNyb3MKCi1AY2luZGV4IGluZGlyZWN0IGNhbGwgb2YgbWFjcm9zCitAY2lu
ZGV4IGluZGlyZWN0aW9uCitAY2luZGV4IGludm9raW5nIGluYWNjZXNzaWJsZSBtYWNyb3MKK0Bj
aW5kZXggaW5hY2Nlc3NpYmxlIG1hY3JvcywgaW52b2tpbmcKK0BjaW5kZXggaGlkZGVuIG1hY3Jv
cywgaW52b2tpbmcKK0dOVSBNNCBwbGFjZXMgbm8gcmVzdHJpY3Rpb25zIG9uIHRoZSBzdHJpbmdz
IHRoYXQgY2FuIGJlIHVzZWQgd2hlbgorZGVmaW5pbmcgYSBtYWNybyBuYW1lLCBldmVuIGlmIHRo
ZSBuYW1lIHdpbGwgbm90IGJlIHBhcnNlZCBhcyBhIHdvcmQgaWYKK2l0IG9jY3VycyBpbiBpc29s
YXRpb24uICBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIG5vdGhpbmcgd3Jvbmcgd2l0aAoraGlkaW5n
IHRoZSBkZWZpbml0aW9uIG9mIGJ1aWx0aW4gbWFjcm9zIHRoYXQgbWlnaHQgYWR2ZXJzZWx5IGlt
cGFjdAorb3V0cHV0IGlmIGluYWR2ZXJ0ZW50bHkgZXhwYW5kZWQuICBUaGVyZWZvcmUsIHRoZXJl
IGFyZSBhIGZldyBidWlsdGlucworZGVzaWduZWQgZm9yIG1hbmlwdWxhdGlvbiBvZiBpbmRpcmVj
dCBtYWNybyBuYW1lcy4KKworQG1lbnUKKyogSW5kaXI6OiAgICAgICAgICAgICAgICAgICAgICAg
VW5xdW90ZWQgaW5kaXJlY3QgY2FsbCBvZiBtYWNyb3MKKyogUWluZGlyOjogICAgICAgICAgICAg
ICAgICAgICAgUXVvdGVkIGluZGlyZWN0IGNhbGwgb2YgbWFjcm9zCisqIEJ1aWx0aW46OiAgICAg
ICAgICAgICAgICAgICAgIFVucXVvdGVkIGluZGlyZWN0IGNhbGwgb2YgYnVpbHRpbnMKK0BlbmQg
bWVudQorCitAbm9kZSBJbmRpcgorQHNlY3Rpb24gVW5xdW90ZWQgaW5kaXJlY3QgY2FsbCBvZiBt
YWNyb3MKKworQGNpbmRleCBpbmRpcmVjdCBjYWxsIG9mIG1hY3JvcywgdW5xdW90ZWQKIEBjaW5k
ZXggY2FsbCBvZiBtYWNyb3MsIGluZGlyZWN0CiBAY2luZGV4IG1hY3JvcywgaW5kaXJlY3QgY2Fs
bCBvZgogQGNpbmRleCBHTlUgZXh0ZW5zaW9ucwpAQCAtMjgyOCw4ICsyODQ5LDE0MiBAQCBJbmRp
cgogQHJlc3VsdHt9MAogQGVuZCBleGFtcGxlCgorQG5vZGUgUWluZGlyCitAc2VjdGlvbiBRdW90
ZWQgaW5kaXJlY3QgY2FsbCBvZiBtYWNyb3MKKworQGNpbmRleCBpbmRpcmVjdCBjYWxsIG9mIG1h
Y3JvcywgcXVvdGVkCitAY2luZGV4IGNhbGwgb2YgbWFjcm9zLCBpbmRpcmVjdAorQGNpbmRleCBt
YWNyb3MsIGluZGlyZWN0IGNhbGwgb2YKK0BjaW5kZXggYWRkaW5nIHF1b3RlcworQGNpbmRleCBx
dW90ZXMsIGFkZGluZworQGNpbmRleCBHTlUgZXh0ZW5zaW9ucworU29tZXRpbWVzLCBpdCBpcyBk
ZXNpcmFibGUgdG8gYXZvaWQgcmVzY2FubmluZyB0aGUgb3V0cHV0IG9mIGEgbWFjcm8KK2ludm9j
YXRpb24uICBJdCBpcyBwb3NzaWJsZSB0byBhZGQgcXVvdGVzIGFyb3VuZCBhbnkgbWFjcm8gd2l0
aAorQGNvZGV7cWluZGlyfToKKworQGRlZmZuIEJ1aWx0aW4gcWluZGlyIChAdmFye25hbWV9LCBA
b3ZhcnthcmdzQGRvdHN7fX0pCitSZXN1bHRzIGluIGEgY2FsbCB0byB0aGUgbWFjcm8gQHZhcntu
YW1lfSwgd2hpY2ggaXMgcGFzc2VkIHRoZQorcmVzdCBvZiB0aGUgYXJndW1lbnRzIEB2YXJ7YXJn
c30uICBJZiBAdmFye25hbWV9IGlzIG5vdCBkZWZpbmVkLCBhbgorZXJyb3IgbWVzc2FnZSBpcyBw
cmludGVkLCBhbmQgdGhlIGV4cGFuc2lvbiBpcyB2b2lkLiAgT3RoZXJ3aXNlLCB0aGUKK291dHB1
dCBnZW5lcmF0ZWQgYnkgQHZhcntuYW1lfSBpcyBhZGRpdGlvbmFsbHkgc3Vycm91bmRlZCBieSB0
aGUgY3VycmVudAorcXVvdGVzIGF0IHRoZSBlbmQgb2YgdGhlIGluZGlyZWN0IGludm9jYXRpb24u
CisKK1RoaXMgbWFjcm8gd2FzIGludHJvZHVjZWQgaW4gR05VIE00IDEuNi4KKworVGhlIG1hY3Jv
IEBjb2Rle3FpbmRpcn0gaXMgcmVjb2duaXplZCBvbmx5IHdpdGggcGFyYW1ldGVycy4KK0BlbmQg
ZGVmZm4KKworTWFueSBidWlsdGluIG1hY3JvcyByZXR1cm4gdGhlaXIgb3V0cHV0IHVucXVvdGVk
LCBzbyB0aGF0IGl0IGNhbiBiZQorcmVzY2FubmVkIGZvciBmdXJ0aGVyIG1hY3JvIG5hbWVzLiAg
QnV0IGluIHNvbWUgY29udGV4dHMsIGl0IGlzCitkZXNpcmFibGUgdG8gYXZvaWQgdGhlIHJlc2Nh
bm5pbmcgc3RlcCwgcGFydGljdWxhcmx5IHdoZW4gdXNpbmcgYQorYnVpbHRpbiBtYWNybyB0byBv
cGVyYXRlIG9uIGFuIG9wYXF1ZSBibG9jayBvZiB0ZXh0IGFuZCByZXN1bHQgaW4KK2Fub3RoZXIg
YmxvY2sgb2YgdGV4dC4gIE9ic2VydmUgaG93IEBjb2Rle3FpbmRpcn0gY2FuIGJlIHVzZWQgdG8g
bWFrZQordGhlIG91dHB1dCBvZiBAY29kZXtzdWJzdHJ9IGJlIHF1b3RlZCAoQHB4cmVme1N1YnN0
cn0pOgorCitAZXhhbXBsZQorZGVmaW5lKGBiJywgYEInKQorQHJlc3VsdHt9CitzdWJzdHIoYGFi
YycsIGAxJywgYDEnKQorQHJlc3VsdHt9QgorcWluZGlyKGBzdWJzdHInLCBgYWJjJywgYDEnLCBg
MScpCitAcmVzdWx0e31iCitAZW5kIGV4YW1wbGUKKworRm9yIHRleHQgbWFjcm9zLCBAY29kZXtx
aW5kaXJ9IGFuZCBAY29kZXtkZWZufSBhcmUgc29tZXdoYXQgc2ltaWxhcgorKEBweHJlZntEZWZu
fSk7IGJvdGggc3RvcCB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBtYWNybyByYXRoZXIgdGhh
bgordHJpZ2dlcmluZyBhbnkgcmVjdXJzaXZlIGV4cGFuc2lvbnMuICBIb3dldmVyLCB0aGVyZSBp
cyBhIG5vdGFibGUKK2RpZmZlcmVuY2UsIGluIHRoYXQgQGNvZGV7cWluZGlyfSB3aWxsIGV4cGFu
ZCBhcmd1bWVudHMgZW5jb3VudGVyZWQKK3dpdGhpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbi4KKwor
QGV4YW1wbGUKK2RlZmluZShgZm9vJywgYGRpdm51bSAkMSAkIycpCitAcmVzdWx0e30KK2Zvbwor
QHJlc3VsdHt9MCAgMAorZm9vKGBvbmUnKQorQHJlc3VsdHt9MCBvbmUgMQorZm9vKGBvbmUnLCBg
dHdvJykKK0ByZXN1bHR7fTAgb25lIDIKK2RlZm4oYGZvbycpCitAcmVzdWx0e31kaXZudW0gJDEg
JCMKK3FpbmRpcihgZm9vJykKK0ByZXN1bHR7fWRpdm51bSAgMAorcWluZGlyKGBmb28nLCBgb25l
JykKK0ByZXN1bHR7fWRpdm51bSBvbmUgMQorcWluZGlyKGBmb28nLCBgb25lJywgYHR3bycpCitA
cmVzdWx0e31kaXZudW0gb25lIDIKK0BlbmQgZXhhbXBsZQorCitUaGlzIG1hY3JvIGlzIHNpbWls
YXIgdG8gQGNvZGV7aW5kaXJ9IGluIGl0cyBhYmlsaXR5IHRvIGNhbGwgbWFjcm9zIHdpdGgKK2Nv
bXB1dGVkIG9yIGBgaW52YWxpZCcnIG5hbWVzOgorCitAZXhhbXBsZQorZGVmaW5lKGAkJGludGVy
bmFsJG1hY3JvJywgYEludGVybmFsIG1hY3JvIChuYW1lIGAkMCcpJykKK0ByZXN1bHR7fQorJCRp
bnRlcm5hbCRtYWNybworQHJlc3VsdHt9JCRpbnRlcm5hbCRtYWNybworaW5kaXIoYCQkaW50ZXJu
YWwkbWFjcm8nKQorQHJlc3VsdHt9SW50ZXJuYWwgbWFjcm8gKG5hbWUgJCRpbnRlcm5hbCRtYWNy
bykKK3FpbmRpcihgJCRpbnRlcm5hbCRtYWNybycpCitAcmVzdWx0e31JbnRlcm5hbCBtYWNybyAo
bmFtZSBgJCRpbnRlcm5hbCRtYWNybycpCitAZW5kIGV4YW1wbGUKKworSXQgaXMgc2FmZSB0byB1
c2UgQGNvZGV7cWluZGlyfSBvbiBhbnkgbWFjcm8sIGluY2x1ZGluZworQGNvZGV7Y2hhbmdlcXVv
dGV9IChAcHhyZWZ7Q2hhbmdlcXVvdGV9KSwgYmVjYXVzZSB0aGUgaW5kaXJlY3QgbWFjcm8KK3Jl
c3VsdCBpcyBzdXJyb3VuZGVkIGJ5IHRoZSBxdW90ZXMgdGhhdCB3ZXJlIGN1cnJlbnQgYXQgdGhl
IGVuZCBvZiB0aGUKK2luZGlyZWN0aW9uLiAgTmVzdGVkIGludm9jYXRpb25zIGNhbiBiZSB1c2Vk
IHRvIGFkZCBhZGRpdGlvbmFsIGxheWVycyBvZgorcXVvdGluZy4gIEhvd2V2ZXIsIGEgd2Fybmlu
ZyBpcyBpc3N1ZWQsIGFuZCBubyBxdW90aW5nIGFkZGVkLCB3aGVuCitAdmFye25hbWV9IGlzIG5v
dCBhIG1hY3JvLgorCitAZXhhbXBsZQorJCBAa2Jke200IC1kfQordHJhY2VvbihgcWluZGlyJykK
K0ByZXN1bHR7fQorcWluZGlyKGBxaW5kaXInLCBgY2hhbmdlcXVvdGUnLCBgWycsIGBdJykKK0Bl
cnJvcnt9bTR0cmFjZTogLTEtIHFpbmRpcihgY2hhbmdlcXVvdGUnLCBgWycsIGBdJykgLT4gW1td
XQorQGVycm9ye31tNHRyYWNlOiAtMS0gcWluZGlyKGBxaW5kaXInLCBgY2hhbmdlcXVvdGUnLCBg
WycsIGBdJykgLT4gW1tbXV1dCitAcmVzdWx0e31bXQorcWluZGlyKFtjaGFuZ2VxdW90ZV0pCitA
ZXJyb3J7fW00dHJhY2U6IC0xLSBxaW5kaXIoW2NoYW5nZXF1b3RlXSkgLT4gYGAnJworQHJlc3Vs
dHt9CitxaW5kaXIocWluZGlyKGRlZm4oYHFpbmRpcicpKSkKK0BlcnJvcnt9bTQ6c3RkaW46NDog
d2FybmluZzogcWluZGlyOiBpbnZhbGlkIG1hY3JvIG5hbWUgaWdub3JlZAorQGVycm9ye31tNHRy
YWNlOiAtMi0gcWluZGlyKDxxaW5kaXI+KSAtPiBgJworQGVycm9ye31tNDpzdGRpbjo0OiB3YXJu
aW5nOiBxaW5kaXI6IHVuZGVmaW5lZCBtYWNybyAnJworQGVycm9ye31tNHRyYWNlOiAtMS0gcWlu
ZGlyKGAnKSAtPiBgJworQHJlc3VsdHt9CitAZW5kIGV4YW1wbGUKKworQGlnbm9yZQorQGNvbW1l
bnQgVGhpcyBleGFtcGxlIGlzIG5vdCB3b3J0aCBwdXR0aW5nIGluIHRoZSBtYW51YWwsIGJ1dCBp
dCBpcworQGNvbW1lbnQgbmVlZGVkIGZvciBmdWxsIGNvdmVyYWdlLgorCitAY29tbWVudCBleGFt
cGxlcworQGV4YW1wbGUKKyQgQGtiZHttNCAtZCAtSWV4YW1wbGVzfQorZGVmaW5lKGBiYXInLCBg
aGVsbG8nKQorQHJlc3VsdHt9CitpbmNsdWRlKGBmb28nKWRubAorQHJlc3VsdHt9aGVsbG8KK3Ry
YWNlb24oYHFpbmRpcicpCitAcmVzdWx0e30KK3FpbmRpcihgaW5jbHVkZScsIGBmb28nKWRubAor
QGVycm9ye31tNHRyYWNlOiAtMS0gcWluZGlyKGBpbmNsdWRlJywgYGZvbycpIC0+IGBgPGZpbGU6
IGV4YW1wbGVzL2Zvbz4nJworQHJlc3VsdHt9YmFyCitxaW5kaXIoYHRyYWNlb2ZmJywgYHFpbmRp
cicpCitAZXJyb3J7fW00dHJhY2U6IC0xLSBxaW5kaXIoYHRyYWNlb2ZmJywgYHFpbmRpcicpIC0+
IGBgJycKK0ByZXN1bHR7fQorbTR3cmFwKGBtNHdyYXAoYAorJylxaW5kaXIoYHFpbmRpcicsIGBk
bmwnKScpCitAcmVzdWx0e30KK15ECitAZXJyb3J7fW00OnN0ZGluOjY6IHdhcm5pbmc6IGRubDog
ZW5kIG9mIGZpbGUgdHJlYXRlZCBhcyBuZXdsaW5lCitAcmVzdWx0e31gJworQGVuZCBleGFtcGxl
CitAZW5kIGlnbm9yZQorCiBAbm9kZSBCdWlsdGluCi1Ac2VjdGlvbiBJbmRpcmVjdCBjYWxsIG9m
IGJ1aWx0aW5zCitAc2VjdGlvbiBVbnF1b3RlZCBpbmRpcmVjdCBjYWxsIG9mIGJ1aWx0aW5zCgog
QGNpbmRleCBpbmRpcmVjdCBjYWxsIG9mIGJ1aWx0aW5zCiBAY2luZGV4IGNhbGwgb2YgYnVpbHRp
bnMsIGluZGlyZWN0CkBAIC0yOTI2LDYgKzMwODEsMjIgQEAgQnVpbHRpbgogQHJlc3VsdHt9CiBA
ZW5kIGV4YW1wbGUKCitUaGVyZSBpcyBubyBuZWVkIGZvciBhIHF1b3RlZCB2ZXJzaW9uIG9mIEBj
b2Rle2J1aWx0aW59OyBpdCBpcworc3VmZmljaWVudCB0byB1c2UgQGNvZGV7cWluZGlyfSB3aGVu
IGV4dHJhIHF1b3RpbmcgaXMgbmVlZGVkLgorCitAZXhhbXBsZQorZGVmaW5lKGBiJywgYEInKQor
QHJlc3VsdHt9CitzdWJzdHIoYGFiYycsIGAxJywgYDEnKQorQHJlc3VsdHt9QgorYnVpbHRpbihg
c3Vic3RyJywgYGFiYycsIGAxJywgYDEnKQorQHJlc3VsdHt9QgorcWluZGlyKGBidWlsdGluJywg
YHN1YnN0cicsIGBhYmMnLCBgMScsIGAxJykKK0ByZXN1bHR7fWIKK2J1aWx0aW4oYHFpbmRpcics
IGBzdWJzdHInLCBgYWJjJywgYDEnLCBgMScpCitAcmVzdWx0e31iCitAZW5kIGV4YW1wbGUKKwog
QGlnbm9yZQogQGNvbW1lbnQgVGhpcyBleGFtcGxlIGlzIG5vdCB3b3J0aCBwdXR0aW5nIGluIHRo
ZSBtYW51YWwsIGJ1dCBpdCBpcwogQGNvbW1lbnQgbmVlZGVkIGZvciBmdWxsIGNvdmVyYWdlLiAg
QXV0b2NvbmYncyBtNF9pbmNsdWRlIHJlbGllcyBoZWF2aWx5CmRpZmYgLS1naXQgYS9zcmMvYnVp
bHRpbi5jIGIvc3JjL2J1aWx0aW4uYwppbmRleCA2NWUwZmY3Mi4uY2UwMGU5ZWIgMTAwNjQ0Ci0t
LSBhL3NyYy9idWlsdGluLmMKKysrIGIvc3JjL2J1aWx0aW4uYwpAQCAtNzIsNiArNzIsNyBAQCBE
RUNMQVJFIChtNF9ta3N0ZW1wKTsKIERFQ0xBUkUgKG00X3BhdHN1YnN0KTsKIERFQ0xBUkUgKG00
X3BvcGRlZik7CiBERUNMQVJFIChtNF9wdXNoZGVmKTsKK0RFQ0xBUkUgKG00X3FpbmRpcik7CiBE
RUNMQVJFIChtNF9yZWdleHApOwogREVDTEFSRSAobTRfc2hpZnQpOwogREVDTEFSRSAobTRfc2lu
Y2x1ZGUpOwpAQCAtMTIzLDYgKzEyNCw3IEBAIHN0YXRpYyBidWlsdGluIGNvbnN0IGJ1aWx0aW5f
dGFiW10gPSB7CiAgIHsicGF0c3Vic3QiLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgbTRfcGF0c3Vic3R9
LAogICB7InBvcGRlZiIsIGZhbHNlLCB0cnVlLCB0cnVlLCBtNF9wb3BkZWZ9LAogICB7InB1c2hk
ZWYiLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgbTRfcHVzaGRlZn0sCisgIHsicWluZGlyIiwgdHJ1ZSwg
dHJ1ZSwgdHJ1ZSwgbTRfcWluZGlyfSwKICAgeyJyZWdleHAiLCB0cnVlLCBmYWxzZSwgdHJ1ZSwg
bTRfcmVnZXhwfSwKICAgeyJzaGlmdCIsIGZhbHNlLCB0cnVlLCB0cnVlLCBtNF9zaGlmdH0sCiAg
IHsic2luY2x1ZGUiLCBmYWxzZSwgZmFsc2UsIHRydWUsIG00X3NpbmNsdWRlfSwKQEAgLTk0Nywx
MiArOTQ5LDEwIEBAIG00X2J1aWx0aW4gKHN0cnVjdCBvYnN0YWNrICpvYnMsIGludCBhcmdjLCBt
YWNyb19hcmd1bWVudHMgKmFyZ3YpCiAgICAgfQogfQoKLS8qIFRoZSBidWlsdGluICJpbmRpciIg
YWxsb3dzIGluZGlyZWN0IGNhbGxzIHRvIG1hY3JvcywgZXZlbiBpZiB0aGVpcgotICAgbmFtZSBp
cyBub3QgYSBwcm9wZXIgbWFjcm8gbmFtZS4gIEl0IGlzIHRodXMgcG9zc2libGUgdG8gZGVmaW5l
Ci0gICBtYWNyb3Mgd2l0aCBpbGwtZm9ybWVkIG5hbWVzIGZvciBpbnRlcm5hbCB1c2UgaW4gbGFy
Z2VyIG1hY3JvCi0gICBwYWNrYWdlcy4gIFRoaXMgbWFjcm8gaXMgbm90IGF2YWlsYWJsZSBpbiBj
b21wYXRpYmlsaXR5IG1vZGUuICAqLworLyogQ29tbW9uIGNvZGUgZm9yIGluZGlyIGFuZCBxaW5k
aXIuICBTdXJyb3VuZCB0aGUgb3V0cHV0IGluIHRoZQorICAgY3VycmVudCBxdW90ZXMgaWYgUVVP
VEUgaXMgdHJ1ZSwgYmVpbmcgY2FyZWZ1bCBvZiBjaGFuZ2VxdW90ZS4gICovCiBzdGF0aWMgdm9p
ZAotbTRfaW5kaXIgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGludCBhcmdjLCBtYWNyb19hcmd1bWVu
dHMgKmFyZ3YpCitpbmRpciAoc3RydWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIG1hY3JvX2Fy
Z3VtZW50cyAqYXJndiwgYm9vbCBxdW90ZSkKIHsKICAgY29uc3QgY2FsbF9pbmZvICptZSA9IGFy
Z19pbmZvIChhcmd2KTsKICAgc3ltYm9sICpzOwpAQCAtOTgyLDkgKzk4MiwzMSBAQCBtNF9pbmRp
ciAoc3RydWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIG1hY3JvX2FyZ3VtZW50cyAqYXJndikK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhU1lNQk9M
X01BQ1JPX0FSR1MgKHMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNZTUJPTF9UUkFDRUQgKHMpKTsKICAgICAgIGNhbGxfbWFjcm8gKHMsIG5ld19h
cmd2LCBvYnMpOworICAgICAgaWYgKHF1b3RlKQorICAgICAgICBwdXNoX3F1b3RlX3dyYXBwZXIg
KCk7CiAgICAgfQogfQoKKy8qIFRoZSBidWlsdGluICJpbmRpciIgYWxsb3dzIGluZGlyZWN0IGNh
bGxzIHRvIG1hY3JvcywgZXZlbiBpZiB0aGVpcgorICAgbmFtZSBpcyBub3QgYSBwcm9wZXIgbWFj
cm8gbmFtZS4gIEl0IGlzIHRodXMgcG9zc2libGUgdG8gZGVmaW5lCisgICBtYWNyb3Mgd2l0aCBp
bGwtZm9ybWVkIG5hbWVzIGZvciBpbnRlcm5hbCB1c2UgaW4gbGFyZ2VyIG1hY3JvCisgICBwYWNr
YWdlcy4gIFRoaXMgbWFjcm8gaXMgbm90IGF2YWlsYWJsZSBpbiBjb21wYXRpYmlsaXR5IG1vZGUu
ICAqLworc3RhdGljIHZvaWQKK200X2luZGlyIChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBpbnQgYXJn
YywgbWFjcm9fYXJndW1lbnRzICphcmd2KQoreworICBpbmRpciAob2JzLCBhcmdjLCBhcmd2LCBm
YWxzZSk7Cit9CisKKy8qIFRoZSBidWlsdGluICJxaW5kaXIiIGlzIGxpa2UgImluZGlyIiwgZXhj
ZXB0IHRoYXQgdGhlIG91dHB1dCBpcworICAgc3Vycm91bmRlZCBieSB0aGUgcXVvdGVzIGluIGVm
ZmVjdCBhdCB0aGUgZW5kIG9mIGV4cGFuc2lvbi4gIFRoaXMKKyAgIGFsbG93cyB3cmFwcGluZyBv
dGhlciBtYWNyb3MgdG8gcHJvdmlkZSBxdW90ZWQgb3V0cHV0IHdoZXJlIHRoZWlyCisgICBvdXRw
dXQgaXMgbm9ybWFsbHkgcmVzY2FubmVkLiAgKi8KK3N0YXRpYyB2b2lkCittNF9xaW5kaXIgKHN0
cnVjdCBvYnN0YWNrICpvYnMsIGludCBhcmdjLCBtYWNyb19hcmd1bWVudHMgKmFyZ3YpCit7Cisg
IGluZGlyIChvYnMsIGFyZ2MsIGFyZ3YsIHRydWUpOworfQorCiAvKiBUaGUgbWFjcm8gImRlZm4i
IHJldHVybnMgdGhlIHF1b3RlZCBkZWZpbml0aW9uIG9mIHRoZSBtYWNybyBuYW1lZAogICAgYnkg
dGhlIGZpcnN0IGFyZ3VtZW50LiAgSWYgdGhlIG1hY3JvIGlzIGJ1aWx0aW4sIGl0IHdpbGwgcHVz
aCBhCiAgICBzcGVjaWFsIG1hY3JvLWRlZmluaXRpb24gdG9rZW4gb24gdGhlIGlucHV0IHN0YWNr
LiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbnB1dC5jIGIvc3JjL2lucHV0LmMKaW5kZXggMTYzMTdl
NWYuLjc4NmE1YjM5IDEwMDY0NAotLS0gYS9zcmMvaW5wdXQuYworKysgYi9zcmMvaW5wdXQuYwpA
QCAtNzQsNiArNzQsNyBAQCBlbnVtIGlucHV0X3R5cGUKIHsKICAgSU5QVVRfU1RSSU5HLCAgICAg
ICAgICAgICAgICAgLyogU3RyaW5nIHJlc3VsdGluZyBmcm9tIG1hY3JvIGV4cGFuc2lvbi4gICov
CiAgIElOUFVUX0ZJTEUsICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgZnJvbSBjb21tYW5kIGxp
bmUgb3IgaW5jbHVkZS4gICovCisgIElOUFVUX0ZJTEVfUSwgICAgICAgICAgICAgICAgIC8qIFF1
b3RhdGlvbiBhcm91bmQgYSBmaWxlLCB2aWEgcWluZGlyLiAgKi8KICAgSU5QVVRfQ0hBSU4sICAg
ICAgICAgICAgICAgICAgLyogRklGTyBjaGFpbiBvZiBzZXBhcmF0ZSBzdHJpbmdzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGlucywgYW5kICRAIHJlZnMuICAqLwog
ICBJTlBVVF9FT0YgICAgICAgICAgICAgICAgICAgICAvKiBQbGFjZWhvbGRlciBhdCBib3R0b20g
b2YgaW5wdXQgc3RhY2suICAqLwpAQCAtMTA3LDYgKzEwOCwxMiBAQCBzdHJ1Y3QgaW5wdXRfYmxv
Y2sKICAgICB9CiAgICAgdV9mOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElOUFVUX0ZJTEUg
Ki8KICAgICBzdHJ1Y3QKKyAgICB7CisgICAgICBzdHJpbmdfcGFpciAqcXVvdGVzOyAgICAgIC8q
IFF1b3RlcyB0byB1c2Ugd2hlbiB3cmFwcGluZy4gICovCisgICAgICBzaXplX3QgY291bnQ7ICAg
ICAgICAgICAgIC8qIENvdW50IG9mIHF1b3RlcyB0byB3cmFwLiAgKi8KKyAgICB9CisgICAgdV9x
OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElOUFVUX0ZJTEVfUSAqLworICAgIHN0cnVjdAog
ICAgIHsKICAgICAgIHRva2VuX2NoYWluICpjaGFpbjsgICAgICAgLyogQ3VycmVudCBsaW5rIGlu
IGNoYWluLiAgKi8KICAgICAgIHRva2VuX2NoYWluICplbmQ7ICAgICAgICAgLyogTGFzdCBsaW5r
IGluIGNoYWluLiAgKi8KQEAgLTIyNiwxNSArMjMzLDIxIEBAIHB1c2hfZmlsZSAoRklMRSAqZnAs
IGNvbnN0IGNoYXIgKnRpdGxlLCBib29sIGNsb3NlX3doZW5fZG9uZSkKCiAgIGlmIChuZXh0ICE9
IE5VTEwpCiAgICAgewotICAgICAgb2JzdGFja19mcmVlIChjdXJyZW50X2lucHV0LCBuZXh0KTsK
LSAgICAgIG5leHQgPSBOVUxMOworICAgICAgYXNzZXJ0IChvYnN0YWNrX29iamVjdF9zaXplIChj
dXJyZW50X2lucHV0KSA9PSAwCisgICAgICAgICAgICAgICYmIG5leHQtPnR5cGUgPT0gSU5QVVRf
U1RSSU5HKTsKKyAgICAgIGkgPSBuZXh0OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGkg
PSAoaW5wdXRfYmxvY2sgKikgb2JzdGFja19hbGxvYyAoY3VycmVudF9pbnB1dCwgc2l6ZW9mICpp
KTsKKyAgICAgIGktPnByZXYgPSBpc3A7CisgICAgICBpc3AgPSBpOwogICAgIH0KCiAgIGlmIChk
ZWJ1Z19sZXZlbCAmIERFQlVHX1RSQUNFX0lOUFVUKQogICAgIGRlYnVnX21lc3NhZ2UgKCJpbnB1
dCByZWFkIGZyb20gJXMiLAogICAgICAgICAgICAgICAgICAgIHF1b3RlYXJnX3N0eWxlIChsb2Nh
bGVfcXVvdGluZ19zdHlsZSwgdGl0bGUpKTsKCi0gIGkgPSAoaW5wdXRfYmxvY2sgKikgb2JzdGFj
a19hbGxvYyAoY3VycmVudF9pbnB1dCwgc2l6ZW9mICppKTsKICAgaS0+dHlwZSA9IElOUFVUX0ZJ
TEU7CiAgIGktPmZpbGUgPSAoY2hhciAqKSBvYnN0YWNrX2NvcHkwICgmZmlsZV9uYW1lcywgdGl0
bGUsIHN0cmxlbiAodGl0bGUpKTsKICAgaS0+bGluZSA9IDE7CkBAIC0yNDUsOSArMjU4LDYgQEAg
cHVzaF9maWxlIChGSUxFICpmcCwgY29uc3QgY2hhciAqdGl0bGUsIGJvb2wgY2xvc2Vfd2hlbl9k
b25lKQogICBpLT51LnVfZi5jbG9zZSA9IGNsb3NlX3doZW5fZG9uZTsKICAgaS0+dS51X2YuYWR2
YW5jZSA9IHN0YXJ0X29mX2lucHV0X2xpbmU7CiAgIG91dHB1dF9jdXJyZW50X2xpbmUgPSAtMTsK
LQotICBpLT5wcmV2ID0gaXNwOwotICBpc3AgPSBpOwogfQoKIC8qIEdpdmVuIGFuIG9ic3RhY2sg
T0JTLCBjYXB0dXJlIGFueSB1bmZpbmlzaGVkIHRleHQgYXMgYSBsaW5rLCB0aGVuCkBAIC0zMDIs
NiArMzEyLDcgQEAgcHVzaF9zdHJpbmdfaW5pdCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUp
CgogICAvKiBSZXNlcnZlIHRoZSBuZXh0IGxvY2F0aW9uIG9uIHRoZSBvYnN0YWNrLiAgKi8KICAg
bmV4dCA9IChpbnB1dF9ibG9jayAqKSBvYnN0YWNrX2FsbG9jIChjdXJyZW50X2lucHV0LCBzaXpl
b2YgKm5leHQpOworICBuZXh0LT5wcmV2ID0gaXNwOwogICBuZXh0LT50eXBlID0gSU5QVVRfU1RS
SU5HOwogICBuZXh0LT5maWxlID0gZmlsZTsKICAgbmV4dC0+bGluZSA9IGxpbmU7CkBAIC00NzQs
NiArNDg1LDY4IEBAIHB1c2hfdG9rZW4gKHRva2VuX2RhdGEgKnRva2VuLCBpbnQgbGV2ZWwsIGJv
b2wgaW51c2UpCiAgIHJldHVybiBpbnVzZTsKIH0KCisvKiBXcmFwIHRoZSBjdXJyZW50IHBlbmRp
bmcgZXhwYW5zaW9uIGluIGFub3RoZXIgbGV2ZWwgb2YgcXVvdGVzLiAgKi8KK3ZvaWQKK3B1c2hf
cXVvdGVfd3JhcHBlciAodm9pZCkKK3sKKyAgdG9rZW5fY2hhaW4gKmNoYWluOworICBzaXplX3Qg
bGVuID0gb2JzdGFja19vYmplY3Rfc2l6ZSAoY3VycmVudF9pbnB1dCk7CisKKyAgYXNzZXJ0IChu
ZXh0KTsKKyAgaWYgKG5leHQtPnR5cGUgPT0gSU5QVVRfRklMRSkKKyAgICB7CisgICAgICBpbnB1
dF9ibG9jayAqYmxvY2s7CisgICAgICBzdHJpbmdfcGFpciAqcXVvdGVzOworICAgICAgYXNzZXJ0
ICghbGVuKTsKKyAgICAgIGJsb2NrID0gKGlucHV0X2Jsb2NrICopIG9ic3RhY2tfYWxsb2MgKGN1
cnJlbnRfaW5wdXQsIHNpemVvZiAqYmxvY2spOworICAgICAgcXVvdGVzID0gKHN0cmluZ19wYWly
ICopIG9ic3RhY2tfYWxsb2MgKGN1cnJlbnRfaW5wdXQsIHNpemVvZiAqcXVvdGVzKTsKKyAgICAg
IHF1b3Rlcy0+c3RyMSA9IChjaGFyICopIG9ic3RhY2tfY29weSAoY3VycmVudF9pbnB1dCwgY3Vy
cl9xdW90ZS5zdHIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyX3F1b3RlLmxlbjEpOworICAgICAgcXVvdGVzLT5sZW4xID0gY3Vycl9xdW90ZS5sZW4x
OworICAgICAgb2JzdGFja19ncm93IChjdXJyZW50X2lucHV0LCBjdXJyX3F1b3RlLnN0cjIsIGN1
cnJfcXVvdGUubGVuMik7CisgICAgICBibG9jay0+dHlwZSA9IElOUFVUX0ZJTEVfUTsKKyAgICAg
IGJsb2NrLT5maWxlID0gY3VycmVudF9maWxlOworICAgICAgYmxvY2stPmxpbmUgPSBjdXJyZW50
X2xpbmU7CisgICAgICBibG9jay0+cHJldiA9IG5leHQ7CisgICAgICBibG9jay0+dS51X3EucXVv
dGVzID0gcXVvdGVzOworICAgICAgYmxvY2stPnUudV9xLmNvdW50ID0gMTsKKyAgICAgIG5leHQg
PSBibG9jazsKKyAgICB9CisgIGVsc2UgaWYgKG5leHQtPnR5cGUgPT0gSU5QVVRfRklMRV9RKQor
ICAgIHsKKyAgICAgIGFzc2VydCAobGVuID09IGN1cnJfcXVvdGUubGVuMiAqIG5leHQtPnUudV9x
LmNvdW50KTsKKyAgICAgIG5leHQtPnUudV9xLmNvdW50Kys7CisgICAgICBvYnN0YWNrX2dyb3cg
KGN1cnJlbnRfaW5wdXQsIGN1cnJfcXVvdGUuc3RyMiwgY3Vycl9xdW90ZS5sZW4yKTsKKyAgICB9
CisgIGVsc2UgaWYgKCFsZW4gJiYgbmV4dC0+dHlwZSA9PSBJTlBVVF9TVFJJTkcpCisgICAgewor
ICAgICAgb2JzdGFja19ncm93IChjdXJyZW50X2lucHV0LCBjdXJyX3F1b3RlLnN0cjEsIGN1cnJf
cXVvdGUubGVuMSk7CisgICAgICBvYnN0YWNrX2dyb3cgKGN1cnJlbnRfaW5wdXQsIGN1cnJfcXVv
dGUuc3RyMiwgY3Vycl9xdW90ZS5sZW4yKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBv
YnN0YWNrX2dyb3cgKGN1cnJlbnRfaW5wdXQsIGN1cnJfcXVvdGUuc3RyMiwgY3Vycl9xdW90ZS5s
ZW4yKTsKKyAgICAgIGlmIChuZXh0LT50eXBlID09IElOUFVUX1NUUklORykKKyAgICAgICAgewor
ICAgICAgICAgIG5leHQtPnR5cGUgPSBJTlBVVF9DSEFJTjsKKyAgICAgICAgICBuZXh0LT51LnVf
Yy5jaGFpbiA9IG5leHQtPnUudV9jLmVuZCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIGFzc2Vy
dCAobmV4dC0+dHlwZSA9PSBJTlBVVF9DSEFJTik7CisgICAgICBtYWtlX3RleHRfbGluayAoY3Vy
cmVudF9pbnB1dCwgJm5leHQtPnUudV9jLmNoYWluLCAmbmV4dC0+dS51X2MuZW5kKTsKKyAgICAg
IGFzc2VydCAob2JzdGFja19vYmplY3Rfc2l6ZSAoY3VycmVudF9pbnB1dCkgPT0gMCAmJiBuZXh0
LT51LnVfYy5jaGFpbik7CisgICAgICBjaGFpbiA9ICh0b2tlbl9jaGFpbiAqKSBvYnN0YWNrX2Fs
bG9jIChjdXJyZW50X2lucHV0LCBzaXplb2YgKmNoYWluKTsKKyAgICAgIGNoYWluLT5uZXh0ID0g
bmV4dC0+dS51X2MuY2hhaW47CisgICAgICBuZXh0LT51LnVfYy5jaGFpbiA9IGNoYWluOworICAg
ICAgY2hhaW4tPnR5cGUgPSBDSEFJTl9TVFI7CisgICAgICBjaGFpbi0+cXVvdGVfYWdlID0gMDsK
KyAgICAgIGNoYWluLT51LnVfcy5zdHIgPQorICAgICAgICAoY2hhciAqKSBvYnN0YWNrX2NvcHkg
KGN1cnJlbnRfaW5wdXQsIGN1cnJfcXVvdGUuc3RyMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyX3F1b3RlLmxlbjEpOworICAgICAgY2hhaW4tPnUudV9zLmxlbiA9IGN1cnJf
cXVvdGUubGVuMTsKKyAgICAgIGNoYWluLT51LnVfcy5sZXZlbCA9IC0xOworICAgIH0KK30KKwog
LyogTGFzdCBoYWxmIG9mIHB1c2hfc3RyaW5nICgpLiAgQWxsIHJlbWFpbmluZyB1bmZpbmlzaGVk
IHRleHQgb24KICAgIHRoZSBvYnN0YWNrIHJldHVybmVkIGZyb20gcHVzaF9zdHJpbmdfaW5pdCBp
cyBjb2xsZWN0ZWQgaW50byB0aGUKICAgIGlucHV0IHN0YWNrLiAgKi8KQEAgLTQ4MiwxMyArNTU1
LDIwIEBAIHB1c2hfc3RyaW5nX2ZpbmlzaCAodm9pZCkKIHsKICAgc2l6ZV90IGxlbiA9IG9ic3Rh
Y2tfb2JqZWN0X3NpemUgKGN1cnJlbnRfaW5wdXQpOwoKLSAgaWYgKG5leHQgPT0gTlVMTCkKKyAg
YXNzZXJ0IChuZXh0KTsKKyAgaWYgKG5leHQtPnR5cGUgPT0gSU5QVVRfRklMRSkKICAgICB7CiAg
ICAgICBhc3NlcnQgKCFsZW4pOwotICAgICAgcmV0dXJuOworICAgICAgaXNwID0gbmV4dDsKICAg
ICB9Ci0KLSAgaWYgKGxlbiB8fCBuZXh0LT50eXBlID09IElOUFVUX0NIQUlOKQorICBlbHNlIGlm
IChuZXh0LT50eXBlID09IElOUFVUX0ZJTEVfUSkKKyAgICB7CisgICAgICBhc3NlcnQgKGxlbiA9
PSBuZXh0LT51LnVfcS5jb3VudCAqIGN1cnJfcXVvdGUubGVuMik7CisgICAgICBuZXh0LT51LnVf
cS5xdW90ZXMtPnN0cjIgPSAoY2hhciAqKSBvYnN0YWNrX2ZpbmlzaCAoY3VycmVudF9pbnB1dCk7
CisgICAgICBuZXh0LT51LnVfcS5xdW90ZXMtPmxlbjIgPSBsZW47CisgICAgICBpc3AgPSBuZXh0
OworICAgIH0KKyAgZWxzZSBpZiAobGVuIHx8IG5leHQtPnR5cGUgPT0gSU5QVVRfQ0hBSU4pCiAg
ICAgewogICAgICAgaWYgKG5leHQtPnR5cGUgPT0gSU5QVVRfU1RSSU5HKQogICAgICAgICB7CkBA
IC00OTcsNyArNTc3LDYgQEAgcHVzaF9zdHJpbmdfZmluaXNoICh2b2lkKQogICAgICAgICB9CiAg
ICAgICBlbHNlCiAgICAgICAgIG1ha2VfdGV4dF9saW5rIChjdXJyZW50X2lucHV0LCAmbmV4dC0+
dS51X2MuY2hhaW4sICZuZXh0LT51LnVfYy5lbmQpOwotICAgICAgbmV4dC0+cHJldiA9IGlzcDsK
ICAgICAgIGlzcCA9IG5leHQ7CiAgICAgICBpbnB1dF9jaGFuZ2UgPSB0cnVlOwogICAgIH0KQEAg
LTYwOCw2ICs2ODcsOCBAQCBwb3BfaW5wdXQgKGJvb2wgY2xlYW51cCkKICAgICAgICAgfQogICAg
ICAgYnJlYWs7CgorICAgIGNhc2UgSU5QVVRfRklMRV9ROgorICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGNhc2UgSU5QVVRfRklMRToKICAgICAgIGlmICghY2xlYW51cCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtNjM5LDkgKzcyMCwxNSBAQCBwb3BfaW5wdXQgKGJvb2wgY2xlYW51cCkKICAg
ICAgIGFzc2VydCAoISJwb3BfaW5wdXQiKTsKICAgICAgIGFib3J0ICgpOwogICAgIH0KKyAgaWYg
KG5leHQpCisgICAgeworICAgICAgLyogT25seSBwb3NzaWJsZSBhZnRlciBkbmwuICAqLworICAg
ICAgYXNzZXJ0IChvYnN0YWNrX29iamVjdF9zaXplIChjdXJyZW50X2lucHV0KSA9PSAwCisgICAg
ICAgICAgICAgICYmIG5leHQtPnR5cGUgPT0gSU5QVVRfU1RSSU5HKTsKKyAgICAgIG5leHQgPSBO
VUxMOworICAgIH0KICAgb2JzdGFja19mcmVlIChjdXJyZW50X2lucHV0LCBpc3ApOwogICBjYWNo
ZWRfcXVvdGUgPSBOVUxMOwotICBuZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBtaWdo
dCBiZSBzZXQgaW4gcHVzaF9zdHJpbmdfaW5pdCAoKSAqLwoKICAgaXNwID0gdG1wOwogICBpbnB1
dF9jaGFuZ2UgPSB0cnVlOwpAQCAtNjU1LDcgKzc0Miw3IEBAIHBvcF9pbnB1dCAoYm9vbCBjbGVh
bnVwKQogYm9vbAogcG9wX3dyYXB1cCAodm9pZCkKIHsKLSAgbmV4dCA9IE5VTEw7CisgIGFzc2Vy
dCAoIW5leHQpOwogICBvYnN0YWNrX2ZyZWUgKGN1cnJlbnRfaW5wdXQsIE5VTEwpOwogICBmcmVl
IChjdXJyZW50X2lucHV0KTsKCkBAIC02ODksMjUgKzc3NiwzMyBAQCBpbnB1dF9wcmludCAoc3Ry
dWN0IG9ic3RhY2sgKm9icykKICAgc2l6ZV90IGxlbiA9IG9ic3RhY2tfb2JqZWN0X3NpemUgKGN1
cnJlbnRfaW5wdXQpOwogICBzaXplX3QgbWF4bGVuID0gbWF4X2RlYnVnX2FyZ3VtZW50X2xlbmd0
aDsKICAgdG9rZW5fY2hhaW4gKmNoYWluOworICBpbnB1dF9ibG9jayAqYmxvY2sgPSBuZXh0ID8g
bmV4dCA6IGlzcDsKKyAgc2l6ZV90IGNvdW50OwoKLSAgaWYgKCFuZXh0KQotICAgIHsKLSAgICAg
IGFzc2VydCAoIWxlbik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICBzd2l0Y2ggKG5leHQtPnR5
cGUpCisgIHN3aXRjaCAoYmxvY2stPnR5cGUpCiAgICAgewogICAgIGNhc2UgSU5QVVRfU1RSSU5H
OgotICAgICAgYXNzZXJ0ICghbmV4dC0+dS51X3MubGVuKTsKKyAgICAgIGFzc2VydCAobmV4dCAm
JiAhYmxvY2stPnUudV9zLmxlbik7CisgICAgICBicmVhazsKKyAgICBjYXNlIElOUFVUX0ZJTEVf
UToKKyAgICAgIGFzc2VydCAobmV4dCAmJiBsZW4pOworICAgICAgY291bnQgPSBibG9jay0+dS51
X3EuY291bnQ7CisgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgaWYgKHNoaXBvdXRfc3Ry
aW5nX3RydW5jIChvYnMsIGJsb2NrLT51LnVfcS5xdW90ZXMtPnN0cjEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnUudV9xLnF1b3Rlcy0+bGVuMSwgJm1heGxlbikp
CisgICAgICAgICAgcmV0dXJuOworICAgICAgb2JzdGFja19ncm93IChvYnMsICI8ZmlsZTogIiwg
c3RybGVuICgiPGZpbGU6ICIpKTsKKyAgICAgIG9ic3RhY2tfZ3JvdyAob2JzLCBibG9jay0+cHJl
di0+ZmlsZSwgc3RybGVuIChibG9jay0+cHJldi0+ZmlsZSkpOworICAgICAgb2JzdGFja18xZ3Jv
dyAob2JzLCAnPicpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBJTlBVVF9GSUxFOgogICAgICAg
YXNzZXJ0ICghbGVuKTsKICAgICAgIG9ic3RhY2tfZ3JvdyAob2JzLCAiPGZpbGU6ICIsIHN0cmxl
biAoIjxmaWxlOiAiKSk7Ci0gICAgICBvYnN0YWNrX2dyb3cgKG9icywgbmV4dC0+ZmlsZSwgc3Ry
bGVuIChuZXh0LT5maWxlKSk7CisgICAgICBvYnN0YWNrX2dyb3cgKG9icywgYmxvY2stPmZpbGUs
IHN0cmxlbiAoYmxvY2stPmZpbGUpKTsKICAgICAgIG9ic3RhY2tfMWdyb3cgKG9icywgJz4nKTsK
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSU5QVVRfQ0hBSU46Ci0gICAgICBjaGFpbiA9IG5leHQt
PnUudV9jLmNoYWluOworICAgICAgY2hhaW4gPSBibG9jay0+dS51X2MuY2hhaW47CiAgICAgICB3
aGlsZSAoY2hhaW4pCiAgICAgICAgIHsKICAgICAgICAgICBzd2l0Y2ggKGNoYWluLT50eXBlKQpA
QCAtNzYyLDM5ICs4NTcsNjMgQEAgc3RhdGljIGNvbnN0IGNoYXIgKgogbmV4dF9idWZmZXIgKHNp
emVfdCAqbGVuLCBib29sIGFsbG93X3F1b3RlKQogewogICB0b2tlbl9jaGFpbiAqY2hhaW47Cisg
IGlucHV0X2Jsb2NrICpibG9jayA9IGlzcDsKCiAgIHdoaWxlICgxKQogICAgIHsKLSAgICAgIGFz
c2VydCAoaXNwKTsKKyAgICAgIGFzc2VydCAoYmxvY2spOwogICAgICAgaWYgKGlucHV0X2NoYW5n
ZSkKICAgICAgICAgewotICAgICAgICAgIGN1cnJlbnRfZmlsZSA9IGlzcC0+ZmlsZTsKLSAgICAg
ICAgICBjdXJyZW50X2xpbmUgPSBpc3AtPmxpbmU7CisgICAgICAgICAgY3VycmVudF9maWxlID0g
YmxvY2stPmZpbGU7CisgICAgICAgICAgY3VycmVudF9saW5lID0gYmxvY2stPmxpbmU7CiAgICAg
ICAgICAgaW5wdXRfY2hhbmdlID0gZmFsc2U7CiAgICAgICAgIH0KCi0gICAgICBzd2l0Y2ggKGlz
cC0+dHlwZSkKKyAgICAgIHN3aXRjaCAoYmxvY2stPnR5cGUpCiAgICAgICAgIHsKICAgICAgICAg
Y2FzZSBJTlBVVF9TVFJJTkc6Ci0gICAgICAgICAgaWYgKGlzcC0+dS51X3MubGVuKQorICAgICAg
ICAgIGlmIChibG9jay0+dS51X3MubGVuKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAq
bGVuID0gaXNwLT51LnVfcy5sZW47Ci0gICAgICAgICAgICAgIHJldHVybiBpc3AtPnUudV9zLnN0
cjsKKyAgICAgICAgICAgICAgKmxlbiA9IGJsb2NrLT51LnVfcy5sZW47CisgICAgICAgICAgICAg
IHJldHVybiBibG9jay0+dS51X3Muc3RyOwogICAgICAgICAgICAgfQogICAgICAgICAgIGJyZWFr
OwoKKyAgICAgICAgY2FzZSBJTlBVVF9GSUxFX1E6CisgICAgICAgICAgaWYgKGJsb2NrLT51LnVf
cS5jb3VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHVzaF9zdHJpbmdfaW5pdCAo
YmxvY2stPmZpbGUsIGJsb2NrLT5saW5lKTsKKyAgICAgICAgICAgICAgd2hpbGUgKGJsb2NrLT51
LnVfcS5jb3VudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBvYnN0YWNr
X2dyb3cgKGN1cnJlbnRfaW5wdXQsIGJsb2NrLT51LnVfcS5xdW90ZXMtPnN0cjEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT51LnVfcS5xdW90ZXMtPmxlbjEpOworICAg
ICAgICAgICAgICAgICAgYmxvY2stPnUudV9xLmNvdW50LS07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICBwdXNoX3N0cmluZ19maW5pc2ggKCk7CisgICAgICAgICAgICAgIHJldHVy
biBuZXh0X2J1ZmZlciAobGVuLCBhbGxvd19xdW90ZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgaWYgKGJsb2NrLT5wcmV2LT51LnVfZi5lbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIHN0cmluZ19wYWlyICpwYWlyID0gYmxvY2stPnUudV9xLnF1b3RlczsKKyAgICAgICAgICAg
ICAgYmxvY2stPnR5cGUgPSBJTlBVVF9TVFJJTkc7CisgICAgICAgICAgICAgIGJsb2NrLT51LnVf
cy5zdHIgPSBwYWlyLT5zdHIyOworICAgICAgICAgICAgICBibG9jay0+dS51X3MubGVuID0gcGFp
ci0+bGVuMjsKKyAgICAgICAgICAgICAgcmV0dXJuIG5leHRfYnVmZmVyIChsZW4sIGFsbG93X3F1
b3RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBibG9jayA9IGJsb2NrLT5wcmV2OworICAg
ICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICBjYXNlIElOUFVUX0ZJTEU6CiAgICAgICAgICAg
aWYgKHN0YXJ0X29mX2lucHV0X2xpbmUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHN0
YXJ0X29mX2lucHV0X2xpbmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgY3VycmVudF9saW5lID0g
Kytpc3AtPmxpbmU7CisgICAgICAgICAgICAgIGN1cnJlbnRfbGluZSA9ICsrYmxvY2stPmxpbmU7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGlzcC0+dS51X2YuZW5kKQorICAgICAgICAg
IGlmIChibG9jay0+dS51X2YuZW5kKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgcmV0
dXJuIGZyZWFkcHRyIChpc3AtPnUudV9mLmZwLCBsZW4pOworICAgICAgICAgIHJldHVybiBmcmVh
ZHB0ciAoYmxvY2stPnUudV9mLmZwLCBsZW4pOwoKICAgICAgICAgY2FzZSBJTlBVVF9DSEFJTjoK
LSAgICAgICAgICBjaGFpbiA9IGlzcC0+dS51X2MuY2hhaW47CisgICAgICAgICAgY2hhaW4gPSBi
bG9jay0+dS51X2MuY2hhaW47CiAgICAgICAgICAgd2hpbGUgKGNoYWluKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICBpZiAoYWxsb3dfcXVvdGUgJiYgY2hhaW4tPnF1b3RlX2FnZSA9PSBj
dXJyZW50X3F1b3RlX2FnZSkKQEAgLTgyMiwxNiArOTQxLDE2IEBAIG5leHRfYnVmZmVyIChzaXpl
X3QgKmxlbiwgYm9vbCBhbGxvd19xdW90ZSkKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAvKiBObyBidWZmZXIgdG8gcHJvdmlkZS4gICovCiAg
ICAgICAgICAgICAgICAgY2FzZSBDSEFJTl9MT0M6Ci0gICAgICAgICAgICAgICAgICBpc3AtPmZp
bGUgPSBjaGFpbi0+dS51X2wuZmlsZTsKLSAgICAgICAgICAgICAgICAgIGlzcC0+bGluZSA9IGNo
YWluLT51LnVfbC5saW5lOworICAgICAgICAgICAgICAgICAgYmxvY2stPmZpbGUgPSBjaGFpbi0+
dS51X2wuZmlsZTsKKyAgICAgICAgICAgICAgICAgIGJsb2NrLT5saW5lID0gY2hhaW4tPnUudV9s
LmxpbmU7CiAgICAgICAgICAgICAgICAgICBpbnB1dF9jaGFuZ2UgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgaXNwLT51LnVfYy5jaGFpbiA9IGNoYWluLT5uZXh0OworICAgICAgICAgICAgICAg
ICAgYmxvY2stPnUudV9jLmNoYWluID0gY2hhaW4tPm5leHQ7CiAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV4dF9idWZmZXIgKGxlbiwgYWxsb3dfcXVvdGUpOwogICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICBhc3NlcnQgKCEibmV4dF9idWZmZXIiKTsKICAgICAg
ICAgICAgICAgICAgIGFib3J0ICgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
aXNwLT51LnVfYy5jaGFpbiA9IGNoYWluID0gY2hhaW4tPm5leHQ7CisgICAgICAgICAgICAgIGJs
b2NrLT51LnVfYy5jaGFpbiA9IGNoYWluID0gY2hhaW4tPm5leHQ7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgYnJlYWs7CgpAQCAtODQ1LDYgKzk2NCw3IEBAIG5leHRfYnVmZmVyIChzaXplX3Qg
KmxlbiwgYm9vbCBhbGxvd19xdW90ZSkKCiAgICAgICAvKiBFbmQgb2YgaW5wdXQgc291cmNlIC0t
LSBwb3Agb25lIGxldmVsLiAgKi8KICAgICAgIHBvcF9pbnB1dCAodHJ1ZSk7CisgICAgICBibG9j
ayA9IGlzcDsKICAgICB9CiB9CgpAQCAtODU4LDE5ICs5NzgsMjQgQEAgY29uc3VtZV9idWZmZXIg
KHNpemVfdCBsZW4pCiAgIGNvbnN0IGNoYXIgKmJ1ZjsKICAgY29uc3QgY2hhciAqcDsKICAgc2l6
ZV90IGJ1Zl9sZW47CisgIGlucHV0X2Jsb2NrICpibG9jayA9IGlzcDsKCi0gIGFzc2VydCAoaXNw
ICYmICFpbnB1dF9jaGFuZ2UgJiYgbGVuKTsKLSAgc3dpdGNoIChpc3AtPnR5cGUpCisgIGFzc2Vy
dCAoYmxvY2sgJiYgIWlucHV0X2NoYW5nZSAmJiBsZW4pOworICBzd2l0Y2ggKGJsb2NrLT50eXBl
KQogICAgIHsKICAgICBjYXNlIElOUFVUX1NUUklORzoKLSAgICAgIGFzc2VydCAobGVuIDw9IGlz
cC0+dS51X3MubGVuKTsKLSAgICAgIGlzcC0+dS51X3MubGVuIC09IGxlbjsKLSAgICAgIGlzcC0+
dS51X3Muc3RyICs9IGxlbjsKKyAgICAgIGFzc2VydCAobGVuIDw9IGJsb2NrLT51LnVfcy5sZW4p
OworICAgICAgYmxvY2stPnUudV9zLmxlbiAtPSBsZW47CisgICAgICBibG9jay0+dS51X3Muc3Ry
ICs9IGxlbjsKICAgICAgIGJyZWFrOwoKKyAgICBjYXNlIElOUFVUX0ZJTEVfUToKKyAgICAgIGFz
c2VydCAoIWJsb2NrLT51LnVfcS5jb3VudCk7CisgICAgICBibG9jayA9IGJsb2NrLT5wcmV2Owor
ICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJTlBVVF9GSUxFOgotICAgICAgYXNzZXJ0ICgh
c3RhcnRfb2ZfaW5wdXRfbGluZSk7Ci0gICAgICBidWYgPSBmcmVhZHB0ciAoaXNwLT51LnVfZi5m
cCwgJmJ1Zl9sZW4pOworICAgICAgYXNzZXJ0ICghc3RhcnRfb2ZfaW5wdXRfbGluZSAmJiAhYmxv
Y2stPnUudV9mLmVuZCk7CisgICAgICBidWYgPSBmcmVhZHB0ciAoYmxvY2stPnUudV9mLmZwLCAm
YnVmX2xlbik7CiAgICAgICBhc3NlcnQgKGJ1ZiAmJiBsZW4gPD0gYnVmX2xlbik7CiAgICAgICBi
dWZfbGVuID0gMDsKICAgICAgIHdoaWxlICgocCA9IChjaGFyICopIG1lbWNociAoYnVmICsgYnVm
X2xlbiwgJ1xuJywgbGVuIC0gYnVmX2xlbikpKQpAQCAtODc4LDE1ICsxMDAzLDE1IEBAIGNvbnN1
bWVfYnVmZmVyIChzaXplX3QgbGVuKQogICAgICAgICAgIGlmIChwID09IGJ1ZiArIGxlbiAtIDEp
CiAgICAgICAgICAgICBzdGFydF9vZl9pbnB1dF9saW5lID0gdHJ1ZTsKICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjdXJyZW50X2xpbmUgPSArK2lzcC0+bGluZTsKKyAgICAgICAgICAgIGN1
cnJlbnRfbGluZSA9ICsrYmxvY2stPmxpbmU7CiAgICAgICAgICAgYnVmX2xlbiA9IHAgLSBidWYg
KyAxOwogICAgICAgICB9Ci0gICAgICBpZiAoZnJlYWRzZWVrIChpc3AtPnUudV9mLmZwLCBsZW4p
ICE9IDApCisgICAgICBpZiAoZnJlYWRzZWVrIChibG9jay0+dS51X2YuZnAsIGxlbikgIT0gMCkK
ICAgICAgICAgYXNzZXJ0IChmYWxzZSk7CiAgICAgICBicmVhazsKCiAgICAgY2FzZSBJTlBVVF9D
SEFJTjoKLSAgICAgIGNoYWluID0gaXNwLT51LnVfYy5jaGFpbjsKKyAgICAgIGNoYWluID0gYmxv
Y2stPnUudV9jLmNoYWluOwogICAgICAgYXNzZXJ0IChjaGFpbiAmJiBjaGFpbi0+dHlwZSA9PSBD
SEFJTl9TVFIgJiYgbGVuIDw9IGNoYWluLT51LnVfcy5sZW4pOwogICAgICAgLyogUGFydGlhbCBj
b25zdW1wdGlvbiBpbnZhbGlkYXRlcyBxdW90ZSBhZ2UuICAqLwogICAgICAgY2hhaW4tPnF1b3Rl
X2FnZSA9IDA7CkBAIC05MjQsNiArMTA0OSwyOSBAQCBwZWVrX2lucHV0IChib29sIGFsbG93X2Fy
Z3YpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICByZXR1cm4gdG9fdWNoYXIgKGJsb2Nr
LT51LnVfcy5zdHJbMF0pOwoKKyAgICAgICAgY2FzZSBJTlBVVF9GSUxFX1E6CisgICAgICAgICAg
aWYgKGJsb2NrLT51LnVfcS5jb3VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHVz
aF9zdHJpbmdfaW5pdCAoYmxvY2stPmZpbGUsIGJsb2NrLT5saW5lKTsKKyAgICAgICAgICAgICAg
d2hpbGUgKGJsb2NrLT51LnVfcS5jb3VudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICBvYnN0YWNrX2dyb3cgKGN1cnJlbnRfaW5wdXQsIGJsb2NrLT51LnVfcS5xdW90ZXMt
PnN0cjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT51LnVfcS5xdW90
ZXMtPmxlbjEpOworICAgICAgICAgICAgICAgICAgYmxvY2stPnUudV9xLmNvdW50LS07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICBwdXNoX3N0cmluZ19maW5pc2ggKCk7CisgICAg
ICAgICAgICAgIHJldHVybiBwZWVrX2lucHV0IChhbGxvd19hcmd2KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICBpZiAoYmxvY2stPnByZXYtPnUudV9mLmVuZCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgc3RyaW5nX3BhaXIgKnBhaXIgPSBibG9jay0+dS51X3EucXVvdGVzOworICAg
ICAgICAgICAgICBibG9jay0+dHlwZSA9IElOUFVUX1NUUklORzsKKyAgICAgICAgICAgICAgYmxv
Y2stPnUudV9zLnN0ciA9IHBhaXItPnN0cjI7CisgICAgICAgICAgICAgIGJsb2NrLT51LnVfcy5s
ZW4gPSBwYWlyLT5sZW4yOworICAgICAgICAgICAgICByZXR1cm4gcGVla19pbnB1dCAoYWxsb3df
YXJndik7CisgICAgICAgICAgICB9CisgICAgICAgICAgYmxvY2sgPSBibG9jay0+cHJldjsKKyAg
ICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgY2FzZSBJTlBVVF9GSUxFOgogICAgICAgICAg
IGNoID0gZ2V0YyAoYmxvY2stPnUudV9mLmZwKTsKICAgICAgICAgICBpZiAoY2ggIT0gRU9GKQpA
QCAtMTAxNiw0NiArMTE2NCw3MSBAQCBuZXh0X2NoYXJfMSAoYm9vbCBhbGxvd19xdW90ZSwgYm9v
bCBhbGxvd19hcmd2KQogewogICBpbnQgY2g7CiAgIHRva2VuX2NoYWluICpjaGFpbjsKKyAgaW5w
dXRfYmxvY2sgKmJsb2NrID0gaXNwOwoKICAgd2hpbGUgKDEpCiAgICAgewotICAgICAgYXNzZXJ0
IChpc3ApOworICAgICAgYXNzZXJ0IChibG9jayk7CiAgICAgICBpZiAoaW5wdXRfY2hhbmdlKQog
ICAgICAgICB7Ci0gICAgICAgICAgY3VycmVudF9maWxlID0gaXNwLT5maWxlOwotICAgICAgICAg
IGN1cnJlbnRfbGluZSA9IGlzcC0+bGluZTsKKyAgICAgICAgICBjdXJyZW50X2ZpbGUgPSBibG9j
ay0+ZmlsZTsKKyAgICAgICAgICBjdXJyZW50X2xpbmUgPSBibG9jay0+bGluZTsKICAgICAgICAg
ICBpbnB1dF9jaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgfQoKLSAgICAgIHN3aXRjaCAoaXNwLT50
eXBlKQorICAgICAgc3dpdGNoIChibG9jay0+dHlwZSkKICAgICAgICAgewogICAgICAgICBjYXNl
IElOUFVUX1NUUklORzoKLSAgICAgICAgICBpZiAoIWlzcC0+dS51X3MubGVuKQorICAgICAgICAg
IGlmICghYmxvY2stPnUudV9zLmxlbikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGlz
cC0+dS51X3MubGVuLS07Ci0gICAgICAgICAgcmV0dXJuIHRvX3VjaGFyICgqaXNwLT51LnVfcy5z
dHIrKyk7CisgICAgICAgICAgYmxvY2stPnUudV9zLmxlbi0tOworICAgICAgICAgIHJldHVybiB0
b191Y2hhciAoKmJsb2NrLT51LnVfcy5zdHIrKyk7CgorICAgICAgICBjYXNlIElOUFVUX0ZJTEVf
UToKKyAgICAgICAgICBpZiAoYmxvY2stPnUudV9xLmNvdW50KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBwdXNoX3N0cmluZ19pbml0IChibG9jay0+ZmlsZSwgYmxvY2stPmxpbmUpOwor
ICAgICAgICAgICAgICB3aGlsZSAoYmxvY2stPnUudV9xLmNvdW50KQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgIG9ic3RhY2tfZ3JvdyAoY3VycmVudF9pbnB1dCwgYmxvY2st
PnUudV9xLnF1b3Rlcy0+c3RyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPnUudV9xLnF1b3Rlcy0+bGVuMSk7CisgICAgICAgICAgICAgICAgICBibG9jay0+dS51X3Eu
Y291bnQtLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHB1c2hfc3RyaW5nX2Zp
bmlzaCAoKTsKKyAgICAgICAgICAgICAgcmV0dXJuIG5leHRfY2hhcl8xIChhbGxvd19xdW90ZSwg
YWxsb3dfYXJndik7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKGJsb2NrLT5wcmV2LT51
LnVfZi5lbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cmluZ19wYWlyICpwYWly
ID0gYmxvY2stPnUudV9xLnF1b3RlczsKKyAgICAgICAgICAgICAgYmxvY2stPnR5cGUgPSBJTlBV
VF9TVFJJTkc7CisgICAgICAgICAgICAgIGJsb2NrLT51LnVfcy5zdHIgPSBwYWlyLT5zdHIyOwor
ICAgICAgICAgICAgICBibG9jay0+dS51X3MubGVuID0gcGFpci0+bGVuMjsKKyAgICAgICAgICAg
ICAgcmV0dXJuIG5leHRfY2hhcl8xIChhbGxvd19xdW90ZSwgYWxsb3dfYXJndik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgYmxvY2sgPSBibG9jay0+cHJldjsKKyAgICAgICAgICBGQUxMVEhS
T1VHSDsKICAgICAgICAgY2FzZSBJTlBVVF9GSUxFOgogICAgICAgICAgIGlmIChzdGFydF9vZl9p
bnB1dF9saW5lKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBzdGFydF9vZl9pbnB1dF9s
aW5lID0gZmFsc2U7Ci0gICAgICAgICAgICAgIGN1cnJlbnRfbGluZSA9ICsraXNwLT5saW5lOwor
ICAgICAgICAgICAgICBjdXJyZW50X2xpbmUgPSArK2Jsb2NrLT5saW5lOwogICAgICAgICAgICAg
fQoKICAgICAgICAgICAvKiBJZiBzdGRpbiBpcyBhIHRlcm1pbmFsLCBjYWxsaW5nIGdldGMgYWZ0
ZXIgcGVla19pbnB1dAogICAgICAgICAgICAgIGFscmVhZHkgY2FsbGVkIGl0IHdvdWxkIG1ha2Ug
dGhlIHVzZXIgaGF2ZSB0byBoaXQgXkQKICAgICAgICAgICAgICB0d2ljZSB0byBxdWl0LiAgKi8K
LSAgICAgICAgICBjaCA9IGlzcC0+dS51X2YuZW5kID8gRU9GIDogZ2V0YyAoaXNwLT51LnVfZi5m
cCk7CisgICAgICAgICAgY2ggPSBibG9jay0+dS51X2YuZW5kID8gRU9GIDogZ2V0YyAoYmxvY2st
PnUudV9mLmZwKTsKICAgICAgICAgICBpZiAoY2ggIT0gRU9GKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICBpZiAoY2ggPT0gJ1xuJykKICAgICAgICAgICAgICAgICBzdGFydF9vZl9pbnB1
dF9saW5lID0gdHJ1ZTsKICAgICAgICAgICAgICAgcmV0dXJuIGNoOwogICAgICAgICAgICAgfQor
ICAgICAgICAgIGJsb2NrLT51LnVfZi5lbmQgPSB0cnVlOwogICAgICAgICAgIGJyZWFrOwoKICAg
ICAgICAgY2FzZSBJTlBVVF9DSEFJTjoKLSAgICAgICAgICBjaGFpbiA9IGlzcC0+dS51X2MuY2hh
aW47CisgICAgICAgICAgY2hhaW4gPSBibG9jay0+dS51X2MuY2hhaW47CiAgICAgICAgICAgd2hp
bGUgKGNoYWluKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJn
YzsKQEAgLTEwOTksNyArMTI3Miw3IEBAIG5leHRfY2hhcl8xIChib29sIGFsbG93X3F1b3RlLCBi
b29sIGFsbG93X2FyZ3YpCiAgICAgICAgICAgICAgICAgICAvKiBSYXRoZXIgdGhhbiBkaXJlY3Rs
eSBwYXJzZSBhcmd2IGhlcmUsIHdlIHB1c2gKICAgICAgICAgICAgICAgICAgICAgIGFub3RoZXIg
aW5wdXQgYmxvY2sgY29udGFpbmluZyB0aGUgbmV4dCB1bnBhcnNlZAogICAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnQgZnJvbSBhcmd2LiAgKi8KLSAgICAgICAgICAgICAgICAgIHB1c2hfc3Ry
aW5nX2luaXQgKGlzcC0+ZmlsZSwgaXNwLT5saW5lKTsKKyAgICAgICAgICAgICAgICAgIHB1c2hf
c3RyaW5nX2luaXQgKGJsb2NrLT5maWxlLCBibG9jay0+bGluZSk7CiAgICAgICAgICAgICAgICAg
ICBwdXNoX2FyZ19xdW90ZSAoY3VycmVudF9pbnB1dCwgY2hhaW4tPnUudV9hLmFyZ3YsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhaW4tPnUudV9hLmluZGV4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlX2NhY2hlIChOVUxMLCBjaGFpbi0+cXVv
dGVfYWdlLApAQCAtMTEwOSwxNiArMTI4MiwxNiBAQCBuZXh0X2NoYXJfMSAoYm9vbCBhbGxvd19x
dW90ZSwgYm9vbCBhbGxvd19hcmd2KQogICAgICAgICAgICAgICAgICAgcHVzaF9zdHJpbmdfZmlu
aXNoICgpOwogICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRfY2hhcl8xIChhbGxvd19xdW90
ZSwgYWxsb3dfYXJndik7CiAgICAgICAgICAgICAgICAgY2FzZSBDSEFJTl9MT0M6Ci0gICAgICAg
ICAgICAgICAgICBpc3AtPmZpbGUgPSBjaGFpbi0+dS51X2wuZmlsZTsKLSAgICAgICAgICAgICAg
ICAgIGlzcC0+bGluZSA9IGNoYWluLT51LnVfbC5saW5lOworICAgICAgICAgICAgICAgICAgYmxv
Y2stPmZpbGUgPSBjaGFpbi0+dS51X2wuZmlsZTsKKyAgICAgICAgICAgICAgICAgIGJsb2NrLT5s
aW5lID0gY2hhaW4tPnUudV9sLmxpbmU7CiAgICAgICAgICAgICAgICAgICBpbnB1dF9jaGFuZ2Ug
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgaXNwLT51LnVfYy5jaGFpbiA9IGNoYWluLT5uZXh0
OworICAgICAgICAgICAgICAgICAgYmxvY2stPnUudV9jLmNoYWluID0gY2hhaW4tPm5leHQ7CiAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dF9jaGFyXzEgKGFsbG93X3F1b3RlLCBhbGxvd19h
cmd2KTsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgYXNzZXJ0
ICghIm5leHRfY2hhcl8xIik7CiAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgIGlzcC0+dS51X2MuY2hhaW4gPSBjaGFpbiA9IGNoYWlu
LT5uZXh0OworICAgICAgICAgICAgICBibG9jay0+dS51X2MuY2hhaW4gPSBjaGFpbiA9IGNoYWlu
LT5uZXh0OwogICAgICAgICAgICAgfQogICAgICAgICAgIGJyZWFrOwoKQEAgLTExMzIsNiArMTMw
NSw3IEBAIG5leHRfY2hhcl8xIChib29sIGFsbG93X3F1b3RlLCBib29sIGFsbG93X2FyZ3YpCgog
ICAgICAgLyogRW5kIG9mIGlucHV0IHNvdXJjZSAtLS0gcG9wIG9uZSBsZXZlbC4gICovCiAgICAg
ICBwb3BfaW5wdXQgKHRydWUpOworICAgICAgYmxvY2sgPSBpc3A7CiAgICAgfQogfQoKQEAgLTEx
NjcsNiArMTM0MSw5IEBAIHNraXBfbGluZSAoY29uc3QgY2FsbF9pbmZvICpuYW1lKQogICAgIH0K
ICAgaWYgKGNoID09IENIQVJfRU9GKQogICAgIG00X3dhcm4gKDAsIG5hbWUsIF8oImVuZCBvZiBm
aWxlIHRyZWF0ZWQgYXMgbmV3bGluZSIpKTsKKyAgaWYgKCFuZXh0KQorICAgIC8qIFBvc3NpYmxl
IGlmIGRubCBwb3BwZWQgaW5wdXQgbG9va2luZyBmb3IgbmV3bGluZS4gICovCisgICAgcHVzaF9z
dHJpbmdfaW5pdCAoY3VycmVudF9maWxlLCBjdXJyZW50X2xpbmUpOwogfQoKIC8qIFdoZW4gbmV4
dF90b2tlbigpIHNlZXMgYSBidWlsdGluIHRva2VuIHdpdGggcGVla19pbnB1dCwgdGhpcwpkaWZm
IC0tZ2l0IGEvc3JjL200LmggYi9zcmMvbTQuaAppbmRleCBmYTJjZGY2NS4uNGU1Y2E1ZmQgMTAw
NjQ0Ci0tLSBhL3NyYy9tNC5oCisrKyBiL3NyYy9tNC5oCkBAIC0zNTcsNiArMzU3LDcgQEAgZXh0
ZXJuIHZvaWQgYXBwZW5kX21hY3JvIChzdHJ1Y3Qgb2JzdGFjayAqLCBidWlsdGluX2Z1bmMgKiwg
dG9rZW5fY2hhaW4gKiosCiBleHRlcm4gdm9pZCBwdXNoX21hY3JvIChzdHJ1Y3Qgb2JzdGFjayAq
LCBidWlsdGluX2Z1bmMgKik7CiBleHRlcm4gc3RydWN0IG9ic3RhY2sgKnB1c2hfc3RyaW5nX2lu
aXQgKGNvbnN0IGNoYXIgKiwgaW50KTsKIGV4dGVybiBib29sIHB1c2hfdG9rZW4gKHRva2VuX2Rh
dGEgKiwgaW50LCBib29sKTsKK2V4dGVybiB2b2lkIHB1c2hfcXVvdGVfd3JhcHBlciAodm9pZCk7
CiBleHRlcm4gdm9pZCBwdXNoX3N0cmluZ19maW5pc2ggKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBv
YnN0YWNrICpwdXNoX3dyYXB1cF9pbml0IChjb25zdCBjYWxsX2luZm8gKiwgdG9rZW5fY2hhaW4g
KioqKTsKIGV4dGVybiB2b2lkIHB1c2hfd3JhcHVwX2ZpbmlzaCAodm9pZCk7CgpiYXNlLWNvbW1p
dDogZWU3ZDliN2I4NTYzNjEwOTU2ZDJlNDdjMDFjNGNiZjRkNmY4YjdiMApwcmVyZXF1aXNpdGUt
cGF0Y2gtaWQ6IDExYTU2Y2UzMWFmMzUzZDNlMWExYWI4MzdkNGU3MGNhNDg3ODA0OTAKcHJlcmVx
dWlzaXRlLXBhdGNoLWlkOiBkZDQ2YzIxOTQwNDc5ZDFmZDI1MGQ2MzJhMWVkMmUwNjA4MjM5YmQ0
Ci0tIAoyLjQ5LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNNC1wYXRjaGVzIG1haWxpbmcgbGlzdApNNC1wYXRjaGVzQGdudS5vcmcKaHR0cHM6Ly9s
aXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vbTQtcGF0Y2hlcwo=