[PATCH branch-1.6] eval: Add eval64 builtin [work in progress]

Eric Blake via M4-patches <[email protected]> Thu, 15 May 2025 21:34:40 -0500
Newsgroups gmane.comp.gnu.m4.patches
Message-ID <[email protected]>
VE9ETzogQWRkIG1vcmUgdGVzdHMsIGZpbGwgaW4gY2hhbmdlbG9nCi0tLQoKR2l2ZW4gdGhhdCBQ
T1NJWCBzYXlzIGluIG9uZSBwbGFjZSB0aGF0IGV2YWwgbXVzdCBvcGVyYXRlIG9uIGF0IGxlYXN0
CjMyLWJpdCBudW1iZXJzLCBhbmQgaW4gYW5vdGhlciB0aGF0IGl0IG11c3QgdXNlIGF0IGxlYXN0
ICdzaWduZWQKbG9uZyc7IGFuZCBnaXZlbiB0aGF0IG1vc3QgZGV2ZWxvcG1lbnQgbWFjaGluZXMg
dGhlc2UgZGF5cyBhcmUgNjQtYml0LApJIHRoaW5rIGl0J3MgaGlnaCB0aW1lIE00IG9mZmVycyA2
NC1iaXQgbWF0aC4gIEZvciBiYWNrLWNvbXBhdApyZWFzb25zLCBJJ20gdGhpbmtpbmcgb2Yga2Vl
cGluZyBldmFsIGF0IDMyLWJpdCBhbmQgYWRkaW5nIGEgbmV3CmV2YWw2NCAodGhlIHVzZXIgY2Fu
IGFsd2F5cyB1c2UgZGVmaW5lKGBldmFsJywgZGVmbihgZXZhbDY0JykpIHRvIG9wdAppbiB0byB0
aGUgbmV3ZXIgc2l6ZSkuCgpCdXQgSSdtIG5vdCBzdXJlIHdoZXRoZXIgZXZhbDY0IHNob3VsZCBi
ZSB2aXNpYmxlIGJ5IGRlZmF1bHQsIG9yIG9ubHkKb3B0LWluIHZpYSBhIGNvbW1hbmQgbGluZSBv
cHRpb24sIG9yIGV2ZW4gaWYgSSBjYW4gZ2V0IGRlZmluZShgZXZhbCcsCmJ1aWx0aW4oYGV2YWw2
NCcpKSB3b3JraW5nIGV2ZW4gd2hlbiBldmFsNjQgaXRzZWxmIGlzIG5vdCBwcmUtZGVmaW5lZC4K
U28gZm9yIG5vdywgSSdtIGp1c3QgcG9zdGluZyB3aGF0IEkgZ290IHdvcmtpbmcgaW4gb25lIGV2
ZW5pbmcsIGJ1dCBpdAppcyBub3QgeWV0IHRoZSBmaW5hbCBwYXRjaC4KClRob3VnaHRzIG9uIHRo
ZSBiZXN0IHdheSB0byBhZGQgdGhpcyBmZWF0dXJlPwoKIE5FV1MgICAgICAgICAgICB8ICAzICsr
LQogZG9jL200LnRleGkgICAgIHwgIDkgKysrKystLS0KIHNyYy9NYWtlZmlsZS5hbSB8ICAyICst
CiBzcmMvYnVpbHRpbi5jICAgfCAzNyArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiBz
cmMvZXZhbC5jICAgICAgfCA1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t
LS0tLS0tLS0tLS0tCiBzcmMvZXZhbDY0LmMgICAgfCAzOSArKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysKIHNyYy9tNC5oICAgICAgICB8ICA5ICsrKysrKy0tCiA3IGZpbGVzIGNoYW5n
ZWQsIDExOCBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzcmMvZXZhbDY0LmMKCmRpZmYgLS1naXQgYS9ORVdTIGIvTkVXUwppbmRleCA5N2M0ZDljMC4u
ZjYyMDQyMTcgMTAwNjQ0Ci0tLSBhL05FV1MKKysrIGIvTkVXUwpAQCAtMTI5LDcgKzEyOSw4IEBA
IEdOVSBNNCBORVdTIC0gVXNlciB2aXNpYmxlIGNoYW5nZXMuCiAqKiBFbmhhbmNlIHRoZSBgZXZh
bCcgYnVpbHRpbiB0byB1bmRlcnN0YW5kIHRoZSBgPzonIG9wZXJhdG9yLCBhbmQKICAgIGRvd25n
cmFkZSBhIGZhaWxlZCBwYXJzZSBkdWUgdG8gYW4gdW5rbm93biBvcGVyYXRvciBmcm9tIGFuIGVy
cm9yIHRvIGEKICAgIHdhcm5pbmcuICBGdXJ0aGVyLCB0aGUgYnVpbHRpbiBub3cgcmVmdXNlcyB0
byByZWNvZ25pemUgYD0nIGFzIGEKLSAgIHN5bm9ueW0gZm9yIGA9PScgKHRoaXMgaGFkIGVtaXR0
ZWQgYSB3YXJuaW5nIHNpbmNlIDEuNC44YikuCisgICBzeW5vbnltIGZvciBgPT0nICh0aGlzIGhh
ZCBlbWl0dGVkIGEgd2FybmluZyBzaW5jZSAxLjQuOGIpLiAgQWRkIGEgbmV3CisgICBgZXZhbDY0
JyBidWlsdGluIHRoYXQgb3BlcmF0ZXMgb24gNjQtYml0IGludGVnZXJzLgoKICoqIEEgbnVtYmVy
IG9mIHBvcnRhYmlsaXR5IGltcHJvdmVtZW50cyBpbmhlcml0ZWQgZnJvbSBnbnVsaWIuCgpkaWZm
IC0tZ2l0IGEvZG9jL200LnRleGkgYi9kb2MvbTQudGV4aQppbmRleCA4MTQ3NmJjOC4uNjA5OTJj
NWYgMTAwNjQ0Ci0tLSBhL2RvYy9tNC50ZXhpCisrKyBiL2RvYy9tNC50ZXhpCkBAIC03MDcwLDEz
ICs3MDcwLDE2IEBAIEV2YWwKIEludGVnZXIgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aXRo
IEBjb2Rle2V2YWx9OgoKIEBkZWZmbiBCdWlsdGluIGV2YWwgKEB2YXJ7ZXhwcmVzc2lvbn0sIEBk
dmFye3JhZGl4LCAxMH0sIEBvdmFye3dpZHRofSkKK0BkZWZmbnggQnVpbHRpbiBldmFsNjQgKEB2
YXJ7ZXhwcmVzc2lvbn0sIEBkdmFye3JhZGl4LCAxMH0sIEBvdmFye3dpZHRofSkKIEV4cGFuZHMg
dG8gdGhlIHZhbHVlIG9mIEB2YXJ7ZXhwcmVzc2lvbn0uICBUaGUgZXhwYW5zaW9uIGlzIGVtcHR5
CiBpZiBhIHByb2JsZW0gaXMgZW5jb3VudGVyZWQgd2hpbGUgcGFyc2luZyB0aGUgYXJndW1lbnRz
LiAgSWYgc3BlY2lmaWVkLAogQHZhcntyYWRpeH0gYW5kIEB2YXJ7d2lkdGh9IGNvbnRyb2wgdGhl
IGZvcm1hdCBvZiB0aGUgb3V0cHV0LgoKLUNhbGN1bGF0aW9ucyBhcmUgZG9uZSB3aXRoIDMyLWJp
dCBzaWduZWQgbnVtYmVycy4gIE92ZXJmbG93IHNpbGVudGx5Ci1yZXN1bHRzIGluIHdyYXBhcm91
bmQuICBBIHdhcm5pbmcgaXMgaXNzdWVkIGlmIGRpdmlzaW9uIGJ5IHplcm8gaXMKLWF0dGVtcHRl
ZCwgb3IgaWYgQHZhcntleHByZXNzaW9ufSBjb3VsZCBub3QgYmUgcGFyc2VkLgorQ2FsY3VsYXRp
b25zIGFyZSBkb25lIHdpdGggMzItYml0IHNpZ25lZCBudW1iZXJzIGZvciBAY29kZXtldmFsfSwg
YW5kCis2NC1iaXQgc2lnbmVkIG51bWJlcnMgZm9yIEBjb2Rle2V2YWw2NH0gKHRoZSBsYXR0ZXIg
d2FzIGludHJvZHVjZWQgaW4gTTQKKzEuNikuICBPdmVyZmxvdyBzaWxlbnRseSByZXN1bHRzIGlu
IHdyYXBhcm91bmQuICBBIHdhcm5pbmcgaXMgaXNzdWVkIGlmCitkaXZpc2lvbiBieSB6ZXJvIGlz
IGF0dGVtcHRlZCwgb3IgaWYgQHZhcntleHByZXNzaW9ufSBjb3VsZCBub3QgYmUKK3BhcnNlZC4K
CiBFeHByZXNzaW9ucyBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIG9wZXJhdG9ycywgbGlzdGVk
IGluIG9yZGVyIG9mCiBkZWNyZWFzaW5nIHByZWNlZGVuY2UuCmRpZmYgLS1naXQgYS9zcmMvTWFr
ZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KaW5kZXggMGY1NjcwMTIuLjA4ZjQ4YWZlIDEwMDY0
NAotLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrIGIvc3JjL01ha2VmaWxlLmFtCkBAIC0yNiw3ICsy
Niw3IEBAIEFNX0NGTEFHUyA9ICQoV0FSTl9DRkxBR1MpICQoV0VSUk9SX0NGTEFHUykKIEFNX0xE
RkxBR1MgPSAkKE9TMl9MREZMQUdTKQogYmluX1BST0dSQU1TID0gbTQKIG5vaW5zdF9IRUFERVJT
ID0gbTQuaAotbTRfU09VUkNFUyA9IG00LmMgYnVpbHRpbi5jIGRlYnVnLmMgZXZhbC5jIGZvcm1h
dC5jIGZyZWV6ZS5jIGlucHV0LmMgXAorbTRfU09VUkNFUyA9IG00LmMgYnVpbHRpbi5jIGRlYnVn
LmMgZXZhbC5jIGV2YWw2NC5jIGZvcm1hdC5jIGZyZWV6ZS5jIGlucHV0LmMgXAogbWFjcm8uYyBv
dXRwdXQuYyBwYXRoLmMgc3ltdGFiLmMKIExEQUREID0gLi4vbGliL2xpYm00LmEgJChMSUJNNF9M
SUJERVBTKSBcCiAgICQoQ0xPQ0tfVElNRV9MSUIpICQoR0VUTE9DQUxFTkFNRV9MX0xJQikgJChH
RVRSQU5ET01fTElCKSBcCmRpZmYgLS1naXQgYS9zcmMvYnVpbHRpbi5jIGIvc3JjL2J1aWx0aW4u
YwppbmRleCBiZjBkMTc5OC4uYmJhODBlMzMgMTAwNjQ0Ci0tLSBhL3NyYy9idWlsdGluLmMKKysr
IGIvc3JjL2J1aWx0aW4uYwpAQCAtNTcsNiArNTcsNyBAQCBERUNMQVJFIChtNF9kdW1wZGVmKTsK
IERFQ0xBUkUgKG00X2VycnByaW50KTsKIERFQ0xBUkUgKG00X2VzeXNjbWQpOwogREVDTEFSRSAo
bTRfZXZhbCk7CitERUNMQVJFIChtNF9ldmFsNjQpOwogREVDTEFSRSAobTRfZm9ybWF0KTsKIERF
Q0xBUkUgKG00X2lmZGVmKTsKIERFQ0xBUkUgKG00X2lmZWxzZSk7CkBAIC0xMDksNiArMTEwLDcg
QEAgc3RhdGljIGJ1aWx0aW4gY29uc3QgYnVpbHRpbl90YWJbXSA9IHsKICAgeyJlcnJwcmludCIs
IGZhbHNlLCBmYWxzZSwgdHJ1ZSwgbTRfZXJycHJpbnR9LAogICB7ImVzeXNjbWQiLCB0cnVlLCBm
YWxzZSwgdHJ1ZSwgbTRfZXN5c2NtZH0sCiAgIHsiZXZhbCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwg
bTRfZXZhbH0sCisgIHsiZXZhbDY0IiwgdHJ1ZSwgZmFsc2UsIHRydWUsIG00X2V2YWw2NH0sCiAg
IHsiZm9ybWF0IiwgdHJ1ZSwgZmFsc2UsIHRydWUsIG00X2Zvcm1hdH0sCiAgIHsiaWZkZWYiLCBm
YWxzZSwgdHJ1ZSwgdHJ1ZSwgbTRfaWZkZWZ9LAogICB7ImlmZWxzZSIsIGZhbHNlLCB0cnVlLCB0
cnVlLCBtNF9pZmVsc2V9LApAQCAtNTcxLDEwICs1NzMsMTAgQEAgc3RhdGljIGNoYXIgY29uc3Qg
ZGlnaXRzW10gPSAiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKIC8qIFRo
ZSBmdW5jdGlvbiBudG9hICgpIGNvbnZlcnRzIFZBTFVFIHRvIGEgc2lnbmVkIEFTQ0lJCiAgICBy
ZXByZXNlbnRhdGlvbiBpbiByYWRpeCBSQURJWCwgd2l0aCB0aGUgZW5kaW5nIFwwIGluICpFTkQu
ICAqLwogc3RhdGljIGNvbnN0IGNoYXIgKgotbnRvYSAoaW50MzJfdCB2YWx1ZSwgaW50IHJhZGl4
LCBjb25zdCBjaGFyICoqZW5kKQorbnRvYSAoaW50NjRfdCB2YWx1ZSwgaW50IHJhZGl4LCBjb25z
dCBjaGFyICoqZW5kKQogewogICBib29sIG5lZ2F0aXZlOwotICB1aW50MzJfdCB1dmFsdWU7Cisg
IHVpbnQ2NF90IHV2YWx1ZTsKICAgLyogU2l6ZWQgZm9yIHJhZGl4IDIsIHBsdXMgc2lnbiBhbmQg
dHJhaWxpbmcgTlVMLiAgKi8KICAgc3RhdGljIGNoYXIgc3RyW3NpemVvZiAodmFsdWUpICogQ0hB
Ul9CSVQgKyAyXTsKICAgY2hhciAqcyA9ICZzdHJbc2l6ZW9mIHN0cl07CkBAIC01ODUsMTIgKzU4
NywxMiBAQCBudG9hIChpbnQzMl90IHZhbHVlLCBpbnQgcmFkaXgsIGNvbnN0IGNoYXIgKiplbmQp
CiAgIGlmICh2YWx1ZSA8IDApCiAgICAgewogICAgICAgbmVnYXRpdmUgPSB0cnVlOwotICAgICAg
dXZhbHVlID0gLSh1aW50MzJfdCkgdmFsdWU7CisgICAgICB1dmFsdWUgPSAtKHVpbnQ2NF90KSB2
YWx1ZTsKICAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgICBuZWdhdGl2ZSA9IGZhbHNlOwotICAg
ICAgdXZhbHVlID0gKHVpbnQzMl90KSB2YWx1ZTsKKyAgICAgIHV2YWx1ZSA9ICh1aW50NjRfdCkg
dmFsdWU7CiAgICAgfQoKICAgZG8KQEAgLTEyNTMsMTAgKzEyNTUsMTEgQEAgbTRfc3lzdmFsIChz
dHJ1Y3Qgb2JzdGFjayAqb2JzLCBpbnQgYXJnYyBNQVlCRV9VTlVTRUQsCiAgICBUaGUgYWN0dWFs
IHdvcmsgaXMgZG9uZSBpbiB0aGUgZnVuY3Rpb24gZXZhbHVhdGUgKCksIHdoaWNoIGxpdmVzIGlu
CiAgICBldmFsLmMuICAqLwogc3RhdGljIHZvaWQKLW00X2V2YWwgKHN0cnVjdCBvYnN0YWNrICpv
YnMsIGludCBhcmdjLCBtYWNyb19hcmd1bWVudHMgKmFyZ3YpCitldmFsIChzdHJ1Y3Qgb2JzdGFj
ayAqb2JzLCBpbnQgYXJnYywgbWFjcm9fYXJndW1lbnRzICphcmd2LAorICAgICAgYm9vbCBmdW5j
IChjb25zdCBjYWxsX2luZm8gKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGludDY0X3QgKikpCiB7
CiAgIGNvbnN0IGNhbGxfaW5mbyAqbWUgPSBhcmdfaW5mbyAoYXJndik7Ci0gIGludDMyX3QgdmFs
dWUgPSAwOworICBpbnQ2NF90IHZhbHVlID0gMDsKICAgaW50IHJhZGl4ID0gMTA7CiAgIGludCBt
aW4gPSAxOwogICBjb25zdCBjaGFyICpzOwpAQCAtMTI4MywxNyArMTI4NiwyMyBAQCBtNF9ldmFs
IChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBpbnQgYXJnYywgbWFjcm9fYXJndW1lbnRzICphcmd2KQog
ICAgICAgcmV0dXJuOwogICAgIH0KCi0gIGlmIChldmFsdWF0ZSAobWUsIEFSRyAoMSksIEFSR19M
RU4gKDEpLCAmdmFsdWUpKQorICBpZiAoZnVuYyAobWUsIEFSRyAoMSksIEFSR19MRU4gKDEpLCAm
dmFsdWUpKQogICAgIHJldHVybjsKCiAgIGlmIChyYWRpeCA9PSAxKQogICAgIHsKKyAgICAgIGlm
ICh2YWx1ZSA8IElOVF9NSU4gfHwgdmFsdWUgPiBJTlRfTUFYKQorICAgICAgICB7CisgICAgICAg
ICAgbTRfd2FybiAoMCwgbWUsIF8oIm1hZ25pdHVkZSB0b28gbGFyZ2UgZm9yIGJhc2UgMTogJSIg
UFJJZDY0KSwKKyAgICAgICAgICAgICAgICAgICB2YWx1ZSk7CisgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAgICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICB7CiAgICAgICAgICAgb2Jz
dGFja18xZ3JvdyAob2JzLCAnLScpOwogICAgICAgICAgIHZhbHVlID0gLXZhbHVlOwogICAgICAg
ICB9Ci0gICAgICBpZiAodmFsdWUgKyAwVSA8IG1pbiArIDBVKQorICAgICAgaWYgKHZhbHVlICsg
MFVMTCA8IG1pbiArIDBVTEwpCiAgICAgICAgIHsKICAgICAgICAgICBvYnN0YWNrX2JsYW5rIChv
YnMsIG1pbiAtIHZhbHVlKTsKICAgICAgICAgICBtZW1zZXQgKChjaGFyICopIG9ic3RhY2tfbmV4
dF9mcmVlIChvYnMpIC0gKG1pbiAtIHZhbHVlKSwgJzAnLApAQCAtMTMyMSw2ICsxMzMwLDE4IEBA
IG00X2V2YWwgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGludCBhcmdjLCBtYWNyb19hcmd1bWVudHMg
KmFyZ3YpCiAgIG9ic3RhY2tfZ3JvdyAob2JzLCBzLCBsZW4pOwogfQoKK3N0YXRpYyB2b2lkCitt
NF9ldmFsIChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBpbnQgYXJnYywgbWFjcm9fYXJndW1lbnRzICph
cmd2KQoreworICBldmFsIChvYnMsIGFyZ2MsIGFyZ3YsIGV2YWx1YXRlKTsKK30KKworc3RhdGlj
IHZvaWQKK200X2V2YWw2NCAoc3RydWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIG1hY3JvX2Fy
Z3VtZW50cyAqYXJndikKK3sKKyAgZXZhbCAob2JzLCBhcmdjLCBhcmd2LCBldmFsdWF0ZTY0KTsK
K30KKwogc3RhdGljIHZvaWQKIG00X2luY3IgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGludCBhcmdj
LCBtYWNyb19hcmd1bWVudHMgKmFyZ3YpCiB7CmRpZmYgLS1naXQgYS9zcmMvZXZhbC5jIGIvc3Jj
L2V2YWwuYwppbmRleCAxNjNlMjYzNC4uYWU5OGEwM2YgMTAwNjQ0Ci0tLSBhL3NyYy9ldmFsLmMK
KysrIGIvc3JjL2V2YWwuYwpAQCAtMjIsOSArMjIsMTYgQEAKIC8qIFRoaXMgZmlsZSBjb250YWlu
cyB0aGUgZnVuY3Rpb25zIHRvIGV2YWx1YXRlIGludGVnZXIgZXhwcmVzc2lvbnMgZm9yCiAgICB0
aGUgImV2YWwiIG1hY3JvLiAgSXQgaXMgYSBsaXR0bGUsIGZhaXJseSBzZWxmLWNvbnRhaW5lZCBt
b2R1bGUsIHdpdGgKICAgIGl0cyBvd24gc2Nhbm5lciwgYW5kIGEgcmVjdXJzaXZlIGRlc2NlbnQg
cGFyc2VyLiAgVGhlIG9ubHkgZW50cnkgcG9pbnQKLSAgIGlzIGV2YWx1YXRlICgpLiAgKi8KKyAg
IGlzIGV2YWx1YXRlICgpLiAgVGhpcyBmaWxlIGlzIGFsc28gdXNlZCB0byBpbXBsZW1lbnQgZXZh
bDY0LiAgKi8KCi0jaW5jbHVkZSAibTQuaCIKKyNpZm5kZWYgRVZBTDY0CisjIGluY2x1ZGUgIm00
LmgiCisKKyMgZGVmaW5lIElOVCBpbnQzMl90CisjIGRlZmluZSBVSU5UIHVpbnQzMl90CisjIGRl
ZmluZSBTSElGVE1BU0sgMHgxZgorIyBkZWZpbmUgRVZBTFVBVEUgZXZhbHVhdGUKKyNlbmRpZiAv
KiAhRVZBTDY0ICovCgogLyogRXZhbHVhdGVzIHRva2VuIHR5cGVzLiAgKi8KCkBAIC04Nyw4ICs5
NCw5IEBAIHR5cGVkZWYgZW51bSBldmFsX2Vycm9yCiB9CiBldmFsX2Vycm9yOwoKLXN0YXRpYyBl
dmFsX2Vycm9yIHByaW1hcnkgKGludDMyX3QgKik7Ci1zdGF0aWMgZXZhbF9lcnJvciBwYXJzZV9l
eHByIChpbnQzMl90ICosIGV2YWxfZXJyb3IsIHVuc2lnbmVkKTsKKworc3RhdGljIGV2YWxfZXJy
b3IgcHJpbWFyeSAoSU5UICopOworc3RhdGljIGV2YWxfZXJyb3IgcGFyc2VfZXhwciAoSU5UICos
IGV2YWxfZXJyb3IsIHVuc2lnbmVkKTsKCiAvKiBMZXhpY2FsIGZ1bmN0aW9ucy4gICovCgpAQCAt
MTIwLDcgKzEyOCw3IEBAIGV2YWxfdW5kbyAodm9pZCkKIC8qIFZBTCBpcyBudW1lcmljYWwgdmFs
dWUsIGlmIGFueS4gICovCgogc3RhdGljIGV2YWxfdG9rZW4KLWV2YWxfbGV4IChpbnQzMl90ICp2
YWwpCitldmFsX2xleCAoSU5UICp2YWwpCiB7CiAgIHdoaWxlIChldmFsX3RleHQgIT0gZW5kX3Rl
eHQgJiYgY19pc3NwYWNlICgqZXZhbF90ZXh0KSkKICAgICBldmFsX3RleHQrKzsKQEAgLTEzOSw3
ICsxNDcsNyBAQCBldmFsX2xleCAoaW50MzJfdCAqdmFsKQogICAgICAgLyogVGhlIGRvY3VtZW50
YXRpb24gc2F5cyB0aGF0ICJvdmVyZmxvdyBzaWxlbnRseSByZXN1bHRzIGluIHdyYXBhcm91bmQi
LgogICAgICAgICAgVGhlcmVmb3JlIHVzZSBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgdG8gYXZv
aWQgdW5kZWZpbmVkIGJlaGF2aW91cgogICAgICAgICAgd2hlbiBwYXJzaW5nICctMjE0NzQ4MzY0
OCcuICAqLwotICAgICAgdWludDMyX3QgdmFsdWU7CisgICAgICBVSU5UIHZhbHVlOwoKICAgICAg
IGlmICgqZXZhbF90ZXh0ID09ICcwJykKICAgICAgICAgewpAQCAtMzE0LDEwICszMjIsMTAgQEAg
ZXZhbF9sZXggKGludDMyX3QgKnZhbCkKCiAvKiBQYXJzZSBgKGV4cHIpJywgdW5hcnkgb3BlcmF0
b3JzLCBhbmQgbnVtYmVycy4gICovCiBzdGF0aWMgZXZhbF9lcnJvcgotcHJpbWFyeSAoaW50MzJf
dCAqdjEpCitwcmltYXJ5IChJTlQgKnYxKQogewogICBldmFsX2Vycm9yIGVyOwotICBpbnQzMl90
IHYyOworICBJTlQgdjI7CgogICBzd2l0Y2ggKGV2YWxfbGV4ICh2MSkpCiAgICAgewpAQCAtMzUy
LDcgKzM2MCw3IEBAIHByaW1hcnkgKGludDMyX3QgKnYxKQogICAgICAgcmV0dXJuIHByaW1hcnkg
KHYxKTsKICAgICBjYXNlIE1JTlVTOgogICAgICAgZXIgPSBwcmltYXJ5ICh2MSk7Ci0gICAgICAq
djEgPSAoaW50MzJfdCkgLSh1aW50MzJfdCkgKnYxOworICAgICAgKnYxID0gKElOVCkgLShVSU5U
KSAqdjE7CiAgICAgICByZXR1cm4gZXI7CiAgICAgY2FzZSBOT1Q6CiAgICAgICBlciA9IHByaW1h
cnkgKHYxKTsKQEAgLTM4MCwxNSArMzg4LDE1IEBAIHByaW1hcnkgKGludDMyX3QgKnYxKQoKIC8q
IFBhcnNlIGJpbmFyeSBvcGVyYXRvcnMgd2l0aCBhdCBsZWFzdCBNSU5fUFJFQyBwcmVjZWRlbmNl
LiAgKi8KIHN0YXRpYyBldmFsX2Vycm9yCi1wYXJzZV9leHByIChpbnQzMl90ICp2MSwgZXZhbF9l
cnJvciBlciwgdW5zaWduZWQgbWluX3ByZWMpCitwYXJzZV9leHByIChJTlQgKnYxLCBldmFsX2Vy
cm9yIGVyLCB1bnNpZ25lZCBtaW5fcHJlYykKIHsKICAgZXZhbF90b2tlbiBldDsKICAgZXZhbF90
b2tlbiBldDI7CiAgIGV2YWxfZXJyb3IgZXIyOwogICBldmFsX2Vycm9yIGVyMzsKLSAgaW50MzJf
dCB2MjsKLSAgaW50MzJfdCB2MzsKLSAgdWludDMyX3QgdTE7CisgIElOVCB2MjsKKyAgSU5UIHYz
OworICBVSU5UIHUxOwoKICAgaWYgKGVyID49IFNZTlRBWF9FUlJPUikKICAgICByZXR1cm4gZXI7
CkBAIC00MzcsMjAgKzQ0NSwyMCBAQCBwYXJzZV9leHByIChpbnQzMl90ICp2MSwgZXZhbF9lcnJv
ciBlciwgdW5zaWduZWQgbWluX3ByZWMpCiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICB3aGlsZSAodjItLSA+IDApCi0gICAgICAgICAgICAgICAgdTEgKj0gKHVp
bnQzMl90KSAqdjE7CisgICAgICAgICAgICAgICAgdTEgKj0gKFVJTlQpICp2MTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAqdjEgPSB1MTsKICAgICAgICAgICBicmVhazsKCiAgICAgICAgIGNh
c2UgVElNRVM6Ci0gICAgICAgICAgKnYxID0gKGludDMyX3QpICgodWludDMyX3QpICp2MSAqICh1
aW50MzJfdCkgdjIpOworICAgICAgICAgICp2MSA9IChJTlQpICgoVUlOVCkgKnYxICogKFVJTlQp
IHYyKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBESVZJREU6CiAgICAgICAgICAg
aWYgKHYyID09IDApCiAgICAgICAgICAgICBlciA9IERJVklERV9aRVJPOwogICAgICAgICAgIGVs
c2UgaWYgKHYyID09IC0xKQogICAgICAgICAgICAgLyogQXZvaWQgb3ZlcmZsb3csIGFuZCB0aGUg
eDg2IFNJR0ZQRSBvbiBJTlRfTUlOIC8gLTEuICAqLwotICAgICAgICAgICAgKnYxID0gKGludDMy
X3QpIC0odWludDMyX3QpICp2MTsKKyAgICAgICAgICAgICp2MSA9IChJTlQpIC0oVUlOVCkgKnYx
OwogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICp2MSAvPSB2MjsKICAgICAgICAgICBicmVh
azsKQEAgLTQ2NSwyMCArNDczLDIwIEBAIHBhcnNlX2V4cHIgKGludDMyX3QgKnYxLCBldmFsX2Vy
cm9yIGVyLCB1bnNpZ25lZCBtaW5fcHJlYykKICAgICAgICAgICBicmVhazsKCiAgICAgICAgIGNh
c2UgUExVUzoKLSAgICAgICAgICAqdjEgPSAoaW50MzJfdCkgKCh1aW50MzJfdCkgKnYxICsgKHVp
bnQzMl90KSB2Mik7CisgICAgICAgICAgKnYxID0gKElOVCkgKChVSU5UKSAqdjEgKyAoVUlOVCkg
djIpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1JTlVTOgotICAgICAgICAgICp2
MSA9IChpbnQzMl90KSAoKHVpbnQzMl90KSAqdjEgLSAodWludDMyX3QpIHYyKTsKKyAgICAgICAg
ICAqdjEgPSAoSU5UKSAoKFVJTlQpICp2MSAtIChVSU5UKSB2Mik7CiAgICAgICAgICAgYnJlYWs7
CgogICAgICAgICBjYXNlIExTSElGVDoKICAgICAgICAgICB1MSA9ICp2MTsKLSAgICAgICAgICB1
MSA8PD0gKHVpbnQzMl90KSAodjIgJiAweDFmKTsKKyAgICAgICAgICB1MSA8PD0gKFVJTlQpICh2
MiAmIFNISUZUTUFTSyk7CiAgICAgICAgICAgKnYxID0gdTE7CiAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgUlNISUZUOgogICAgICAgICAgIHUxID0gKnYxIDwgMCA/IH4qdjEgOiAqdjE7
Ci0gICAgICAgICAgdTEgPj49ICh1aW50MzJfdCkgKHYyICYgMHgxZik7CisgICAgICAgICAgdTEg
Pj49IChVSU5UKSAodjIgJiBTSElGVE1BU0spOwogICAgICAgICAgICp2MSA9ICp2MSA8IDAgPyB+
dTEgOiB1MTsKICAgICAgICAgICBicmVhazsKCkBAIC01NjMsMTcgKzU3MSwxOCBAQCBwYXJzZV9l
eHByIChpbnQzMl90ICp2MSwgZXZhbF9lcnJvciBlciwgdW5zaWduZWQgbWluX3ByZWMpCgogLyog
TWFpbiBlbnRyeSBwb2ludCwgY2FsbGVkIGZyb20gImV2YWwiLiAgKi8KIGJvb2wKLWV2YWx1YXRl
IChjb25zdCBjYWxsX2luZm8gKm1lLCBjb25zdCBjaGFyICpleHByLCBzaXplX3QgbGVuLCBpbnQz
Ml90ICp2YWwpCitFVkFMVUFURSAoY29uc3QgY2FsbF9pbmZvICptZSwgY29uc3QgY2hhciAqZXhw
ciwgc2l6ZV90IGxlbiwgaW50NjRfdCAqcHZhbCkKIHsKICAgZXZhbF9lcnJvciBlcnI7CisgIElO
VCB2YWw7CgogICBldmFsX2luaXRfbGV4IChleHByLCBsZW4pOwotICBlcnIgPSBwcmltYXJ5ICh2
YWwpOwotICBlcnIgPSBwYXJzZV9leHByICh2YWwsIGVyciwgMSk7CisgIGVyciA9IHByaW1hcnkg
KCZ2YWwpOworICBlcnIgPSBwYXJzZV9leHByICgmdmFsLCBlcnIsIDEpOwoKICAgaWYgKGVyciA9
PSBOT19FUlJPUiAmJiBldmFsX3RleHQgIT0gZW5kX3RleHQpCiAgICAgewotICAgICAgaWYgKGV2
YWxfbGV4ICh2YWwpID09IEJBRE9QKQorICAgICAgaWYgKGV2YWxfbGV4ICgmdmFsKSA9PSBCQURP
UCkKICAgICAgICAgZXJyID0gSU5WQUxJRF9PUEVSQVRPUjsKICAgICAgIGVsc2UKICAgICAgICAg
ZXJyID0gRVhDRVNTX0lOUFVUOwpAQCAtNTg1LDYgKzU5NCw3IEBAIGV2YWx1YXRlIChjb25zdCBj
YWxsX2luZm8gKm1lLCBjb25zdCBjaGFyICpleHByLCBzaXplX3QgbGVuLCBpbnQzMl90ICp2YWwp
CiAgICAgewogICAgICAgLyogQ2FzZXMgd2hlcmUgcmVzdWx0IGlzIHByaW50ZWQuICAqLwogICAg
IGNhc2UgTk9fRVJST1I6CisgICAgICAqcHZhbCA9IHZhbDsKICAgICAgIHJldHVybiBmYWxzZTsK
CiAgICAgY2FzZSBFTVBUWV9BUkdVTUVOVDoKZGlmZiAtLWdpdCBhL3NyYy9ldmFsNjQuYyBiL3Ny
Yy9ldmFsNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNmQ1YWUxYjcK
LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZXZhbDY0LmMKQEAgLTAsMCArMSwzOSBAQAorLyogR05V
IG00IC0tIEEgc2ltcGxlIG1hY3JvIHByb2Nlc3NvcgorCisgICBDb3B5cmlnaHQgKEMpIDE5ODkt
MTk5NCwgMjAwNi0yMDE0LCAyMDE2LTIwMTcsIDIwMjAtMjAyNSBGcmVlCisgICBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBNNC4KKworICAg
R05VIE00IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBl
aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR05VIE00IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcv
bGljZW5zZXMvPi4KKyovCisKKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIHRv
IGV2YWx1YXRlIDY0LWJpdCBpbnRlZ2VyCisgICBleHByZXNzaW9ucyBmb3IgdGhlICJldmFsNjQi
IG1hY3JvLCBieSByZXVzaW5nIGNvZGUgZnJvbSBldmFsLiAgVGhlCisgICBvbmx5IGVudHJ5IHBv
aW50IGlzIGV2YWx1YXRlNjQgKCkuICAqLworCisjaW5jbHVkZSAibTQuaCIKKworI2RlZmluZSBF
VkFMNjQKKyNkZWZpbmUgSU5UIGludDY0X3QKKyNkZWZpbmUgVUlOVCB1aW50NjRfdAorI2RlZmlu
ZSBTSElGVE1BU0sgMHgzZgorI2RlZmluZSBFVkFMVUFURSBldmFsdWF0ZTY0CisKKyNpbmNsdWRl
ICJldmFsLmMiCisvKgorICBEZWZpbmVkIGJ5IGV2YWwuYzoKK2Jvb2wKK2V2YWx1YXRlNjQgKGNv
bnN0IGNhbGxfaW5mbyAqbWUsIGNvbnN0IGNoYXIgKmV4cHIsIHNpemVfdCBsZW4sIElOVCAqdmFs
KQorICovCmRpZmYgLS1naXQgYS9zcmMvbTQuaCBiL3NyYy9tNC5oCmluZGV4IDc5ZGNhNDM4Li5j
MTczNTMxOCAxMDA2NDQKLS0tIGEvc3JjL200LmgKKysrIGIvc3JjL200LmgKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlIDxjLWN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRl
IDxlcnJvci5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAj
aW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgpAQCAtNTQ2LDkgKzU0Nywx
MyBAQCBleHRlcm4gdm9pZCBpbmNsdWRlX2Vudl9pbml0ICh2b2lkKTsKIGV4dGVybiB2b2lkIGFk
ZF9pbmNsdWRlX2RpcmVjdG9yeSAoY29uc3QgY2hhciAqKTsKIGV4dGVybiBGSUxFICptNF9wYXRo
X3NlYXJjaCAoY29uc3QgY2hhciAqLCBib29sLCBjaGFyICoqKTsKIAwKLS8qIEZpbGU6IGV2YWwu
YyAgLS0tIGV4cHJlc3Npb24gZXZhbHVhdGlvbi4gICovCisvKiBGaWxlOiBldmFsLmMgIC0tLSAz
Mi1iaXQgZXhwcmVzc2lvbiBldmFsdWF0aW9uLiAgKi8KCi1leHRlcm4gYm9vbCBldmFsdWF0ZSAo
Y29uc3QgY2FsbF9pbmZvICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBpbnQzMl90ICopOworZXh0
ZXJuIGJvb2wgZXZhbHVhdGUgKGNvbnN0IGNhbGxfaW5mbyAqLCBjb25zdCBjaGFyICosIHNpemVf
dCwgaW50NjRfdCAqKTsKKwwKKy8qIEZpbGU6IGV2YWw2NC5jICAtLS0gNjQtYml0IGV4cHJlc3Np
b24gZXZhbHVhdGlvbi4gICovCisKK2V4dGVybiBib29sIGV2YWx1YXRlNjQgKGNvbnN0IGNhbGxf
aW5mbyAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgaW50NjRfdCAqKTsKIAwKIC8qIEZpbGU6IGZv
cm1hdC5jICAtLS0gcHJpbnRmIGxpa2UgZm9ybWF0dGluZy4gICovCgoKYmFzZS1jb21taXQ6IGRl
MmFkNmRkYzkwNGVhMDdmZTlhNmY2MWZhOTQxOGIxNWZmYmZjMGIKcHJlcmVxdWlzaXRlLXBhdGNo
LWlkOiA2MDlmN2YyZDEwNDQ2MzNmZGVkYjkwNTJjMDM2N2IxZDdiN2I4Y2NlCnByZXJlcXVpc2l0
ZS1wYXRjaC1pZDogYmNiYzgwZDQ0NWNjMTczN2RhM2I0NTNkNTA0MjZjOWY5NDQxODZjOQotLSAK
Mi40OS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TTQtcGF0Y2hlcyBtYWlsaW5nIGxpc3QKTTQtcGF0Y2hlc0BnbnUub3JnCmh0dHBzOi8vbGlzdHMu
Z251Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL200LXBhdGNoZXMK