tremor lowmem branch, need advice for C99 variable-length arrays

Ozkan Sezer <[email protected]> Tue, 30 Mar 2021 17:41:51 +0300
Newsgroups gmane.comp.multimedia.ogg.vorbis.devel
Message-ID <CAA2C=vApGj-TtX7r_dWEV5ryeTKL9fGnawz9e6wak6kMzDR_ZQ@mail.gmail.com>
--000000000000bb116705bec1ffca
Content-Type: text/plain; charset="UTF-8"

Hello:

I attempted porting Tremor lowmem branch to use C99 variable-length
arrays, and it works for me. See the attached two patches:

- 0001-scope.patch: tweaks alloca() scope a little:
  Can anyone see any gotchas, any adverse effects I may have missed?

- 0002-vla.patch: ports to C99 VLAs as an option with alloca() still
  being the default:  Comments?
  I am not happy with the solution I used in mapping_inverse(), but
  it was the only solution I could find. Can anyone propose something
  better?

Thanks.

--
O.S.

--000000000000bb116705bec1ffca
Content-Type: text/x-patch; charset="US-ASCII"; name="0001-scope.patch"
Content-Disposition: attachment; filename="0001-scope.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: file1

dHdlYWsgYWxsb2NhKCkgc2NvcGUgYSBsaXR0bGUuCgpkaWZmIC0tZ2l0IGEvY29kZWJvb2suYyBi
L2NvZGVib29rLmMKaW5kZXggYjc0NWU4Yi4uODgwNmUxOCAxMDA2NDQKLS0tIGEvY29kZWJvb2su
YworKysgYi9jb2RlYm9vay5jCkBAIC0xODcsMTEgKzE4Nyw4IEBAIHN0YXRpYyBpbnQgX21ha2Vf
d29yZHMoY2hhciAqbCxsb25nIG4sb2dnX3VpbnQzMl90ICpyLGxvbmcgcXVhbnR2YWxzLAogCiBz
dGF0aWMgaW50IF9tYWtlX2RlY29kZV90YWJsZShjb2RlYm9vayAqcyxjaGFyICpsZW5ndGhsaXN0
LGxvbmcgcXVhbnR2YWxzLAogCQkJICAgICAgb2dncGFja19idWZmZXIgKm9wYixpbnQgbWFwdHlw
ZSl7Ci0gIGludCBpOwotICBvZ2dfdWludDMyX3QgKndvcms7Ci0KICAgaWYocy0+ZGVjX25vZGVi
PT00KXsKLSAgICBzLT5kZWNfdGFibGU9X29nZ19tYWxsb2MoKHMtPnVzZWRfZW50cmllcyoyKzEp
KnNpemVvZigqd29yaykpOworICAgIHMtPmRlY190YWJsZT1fb2dnX21hbGxvYygocy0+dXNlZF9l
bnRyaWVzKjIrMSkqc2l6ZW9mKG9nZ191aW50MzJfdCkpOwogICAgIC8qICsxIChyYXRoZXIgdGhh
biAtMikgaXMgdG8gYWNjb21tb2RhdGUgMCBhbmQgMSBzaXplZCBib29rcywKICAgICAgICB3aGlj
aCBhcmUgc3BlY2lhbGNhc2VkIHRvIG5vZGViPT00ICovCiAgICAgaWYoX21ha2Vfd29yZHMobGVu
Z3RobGlzdCxzLT5lbnRyaWVzLApAQCAtMTk5LDggKzE5NiwxMCBAQCBzdGF0aWMgaW50IF9tYWtl
X2RlY29kZV90YWJsZShjb2RlYm9vayAqcyxjaGFyICpsZW5ndGhsaXN0LGxvbmcgcXVhbnR2YWxz
LAogICAgIAogICAgIHJldHVybiAwOwogICB9CisgZWxzZSB7IC8qICtzY29wZSAqLworICBvZ2df
dWludDMyX3QgKndvcms9YWxsb2NhKChzLT51c2VkX2VudHJpZXMqMi0yKSpzaXplb2YoKndvcmsp
KTsKKyAgaW50IGk7CiAKLSAgd29yaz1hbGxvY2EoKHMtPnVzZWRfZW50cmllcyoyLTIpKnNpemVv
Zigqd29yaykpOwogICBpZihfbWFrZV93b3JkcyhsZW5ndGhsaXN0LHMtPmVudHJpZXMsd29yayxx
dWFudHZhbHMscyxvcGIsbWFwdHlwZSkpcmV0dXJuIDE7CiAgIHMtPmRlY190YWJsZT1fb2dnX21h
bGxvYygocy0+dXNlZF9lbnRyaWVzKihzLT5kZWNfbGVhZncrMSktMikqCiAJCQkgICBzLT5kZWNf
bm9kZWIpOwpAQCAtMjg2LDcgKzI4NSw4IEBAIHN0YXRpYyBpbnQgX21ha2VfZGVjb2RlX3RhYmxl
KGNvZGVib29rICpzLGNoYXIgKmxlbmd0aGxpc3QsbG9uZyBxdWFudHZhbHMsCiAgICAgICB9CiAg
ICAgfQogICB9Ci0JCisgfSAvKiAtc2NvcGUgKi8KKwogICByZXR1cm4gMDsKIH0KIApAQCAtMzM1
LDcgKzMzNSw2IEBAIHZvaWQgdm9yYmlzX2Jvb2tfY2xlYXIoY29kZWJvb2sgKmIpewogfQogCiBp
bnQgdm9yYmlzX2Jvb2tfdW5wYWNrKG9nZ3BhY2tfYnVmZmVyICpvcGIsY29kZWJvb2sgKnMpewot
ICBjaGFyICAgICAgICAgKmxlbmd0aGxpc3Q9TlVMTDsKICAgaW50ICAgICAgICAgICBxdWFudHZh
bHM9MDsKICAgbG9uZyAgICAgICAgICBpLGo7CiAgIGludCAgICAgICAgICAgbWFwdHlwZTsKQEAg
LTM1MSwxMSArMzUwLDE0IEBAIGludCB2b3JiaXNfYm9va191bnBhY2sob2dncGFja19idWZmZXIg
Km9wYixjb2RlYm9vayAqcyl7CiAgIGlmKHMtPmVudHJpZXM9PS0xKWdvdG8gX2VvZm91dDsKIAog
ICAvKiBjb2Rld29yZCBvcmRlcmluZy4uLi4gbGVuZ3RoIG9yZGVyZWQgb3IgdW5vcmRlcmVkPyAq
LwotICBzd2l0Y2goKGludClvZ2dwYWNrX3JlYWQob3BiLDEpKXsKKyAgaj0oaW50KW9nZ3BhY2tf
cmVhZChvcGIsMSk7CisgIGlmIChqIT0wICYmIGohPTEpIC8qIEVPRiAqLworICAgIGdvdG8gX2Vv
Zm91dDsKKyBlbHNlIHsgLyogK3Njb3BlICovCisgIGNoYXIgKmxlbmd0aGxpc3Q9KGNoYXIgKilh
bGxvY2Eoc2l6ZW9mKCpsZW5ndGhsaXN0KSpzLT5lbnRyaWVzKTsKKyAgc3dpdGNoKGopewogICBj
YXNlIDA6CiAgICAgLyogdW5vcmRlcmVkICovCi0gICAgbGVuZ3RobGlzdD0oY2hhciAqKWFsbG9j
YShzaXplb2YoKmxlbmd0aGxpc3QpKnMtPmVudHJpZXMpOwotCiAgICAgLyogYWxsb2NhdGVkIGJ1
dCB1bnVzZWQgZW50cmllcz8gKi8KICAgICBpZihvZ2dwYWNrX3JlYWQob3BiLDEpKXsKICAgICAg
IC8qIHllcywgdW51c2VkIGVudHJpZXMgKi8KQEAgLTM4MCwxNiArMzgyLDEzIEBAIGludCB2b3Ji
aXNfYm9va191bnBhY2sob2dncGFja19idWZmZXIgKm9wYixjb2RlYm9vayAqcyl7CiAJaWYobnVt
KzE+cy0+ZGVjX21heGxlbmd0aClzLT5kZWNfbWF4bGVuZ3RoPW51bSsxOwogICAgICAgfQogICAg
IH0KLSAgICAKICAgICBicmVhazsKLSAgY2FzZSAxOgorICBkZWZhdWx0OgogICAgIC8qIG9yZGVy
ZWQgKi8KICAgICB7CiAgICAgICBsb25nIGxlbmd0aD1vZ2dwYWNrX3JlYWQob3BiLDUpKzE7CiAK
ICAgICAgIHMtPnVzZWRfZW50cmllcz1zLT5lbnRyaWVzOwotICAgICAgbGVuZ3RobGlzdD0oY2hh
ciAqKWFsbG9jYShzaXplb2YoKmxlbmd0aGxpc3QpKnMtPmVudHJpZXMpOwotICAgICAgCiAgICAg
ICBmb3IoaT0wO2k8cy0+ZW50cmllczspewogCWxvbmcgbnVtPW9nZ3BhY2tfcmVhZChvcGIsX2ls
b2cocy0+ZW50cmllcy1pKSk7CiAJaWYobnVtPT0tMSlnb3RvIF9lb2ZvdXQ7CkBAIC00MDAsMTIg
KzM5OSw4IEBAIGludCB2b3JiaXNfYm9va191bnBhY2sob2dncGFja19idWZmZXIgKm9wYixjb2Rl
Ym9vayAqcyl7CiAgICAgICB9CiAgICAgfQogICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgIC8q
IEVPRiAqLwotICAgIGdvdG8gX2VvZm91dDsKICAgfQogCi0KICAgLyogRG8gd2UgaGF2ZSBhIG1h
cHBpbmcgdG8gdW5wYWNrPyAqLwogICAKICAgaWYoKG1hcHR5cGU9b2dncGFja19yZWFkKG9wYiw0
KSk+MCl7CkBAIC00NTUsNyArNDUwLDcgQEAgaW50IHZvcmJpc19ib29rX3VucGFjayhvZ2dwYWNr
X2J1ZmZlciAqb3BiLGNvZGVib29rICpzKXsKIAkgICgob2dnX3VpbnQxNl90ICopcy0+cV92YWwp
W2ldPW9nZ3BhY2tfcmVhZChvcGIscy0+cV9iaXRzKTsKIAkKIAlpZihvZ2dwYWNrX2VvcChvcGIp
KXsKLQkgIHMtPnFfdmFsPTA7IC8qIGNsZWFudXAgbXVzdCBub3QgZnJlZSBhbGxvY2EgbWVtb3J5
ICovCisJICBzLT5xX3ZhbD1OVUxMOyAvKiBjbGVhbnVwIG11c3Qgbm90IGZyZWUgYWxsb2NhIG1l
bW9yeSAqLwogCSAgZ290byBfZW9mb3V0OwogCX0KIApAQCAtNDY1LDExICs0NjAsMTEgQEAgaW50
IHZvcmJpc19ib29rX3VucGFjayhvZ2dwYWNrX2J1ZmZlciAqb3BiLGNvZGVib29rICpzKXsKIAlz
LT5kZWNfbGVhZnc9X2RldGVybWluZV9sZWFmX3dvcmRzKHMtPmRlY19ub2RlYiwKIAkJCQkJICAg
KHMtPnFfYml0cypzLT5kaW0rOCkvOCk7IAogCWlmKF9tYWtlX2RlY29kZV90YWJsZShzLGxlbmd0
aGxpc3QscXVhbnR2YWxzLG9wYixtYXB0eXBlKSl7Ci0JICBzLT5xX3ZhbD0wOyAvKiBjbGVhbnVw
IG11c3Qgbm90IGZyZWUgYWxsb2NhIG1lbW9yeSAqLworCSAgcy0+cV92YWw9TlVMTDsgLyogY2xl
YW51cCBtdXN0IG5vdCBmcmVlIGFsbG9jYSBtZW1vcnkgKi8KIAkgIGdvdG8gX2Vycm91dDsKIAl9
CiAJCi0Jcy0+cV92YWw9MDsgLyogYWJvdXQgdG8gZ28gb3V0IG9mIHNjb3BlOyBfbWFrZV9kZWNv
ZGVfdGFibGUKKwlzLT5xX3ZhbD1OVUxMOyAvKiBhYm91dCB0byBnbyBvdXQgb2Ygc2NvcGU7IF9t
YWtlX2RlY29kZV90YWJsZQogICAgICAgICAgICAgICAgICAgICAgICB3YXMgdXNpbmcgaXQgKi8K
IAkKICAgICAgIH1lbHNlewpAQCAtNTM4LDYgKzUzMyw4IEBAIGludCB2b3JiaXNfYm9va191bnBh
Y2sob2dncGFja19idWZmZXIgKm9wYixjb2RlYm9vayAqcyl7CiAgICAgZ290byBfZXJyb3V0Owog
ICB9CiAKKyB9IC8qIC1zY29wZSAqLworCiAgIGlmKG9nZ3BhY2tfZW9wKG9wYikpZ290byBfZW9m
b3V0OwogCiAgIHJldHVybiAwOwpAQCAtNzc0LDcgKzc3MSw2IEBAIGxvbmcgdm9yYmlzX2Jvb2tf
ZGVjb2RldnZfYWRkKGNvZGVib29rICpib29rLG9nZ19pbnQzMl90ICoqYSwKIAkJCSAgICAgIGxv
bmcgb2Zmc2V0LGludCBjaCwKIAkJCSAgICAgIG9nZ3BhY2tfYnVmZmVyICpiLGludCBuLGludCBw
b2ludCl7CiAgIGlmKGJvb2stPnVzZWRfZW50cmllcz4wKXsKLSAgICAKICAgICBvZ2dfaW50MzJf
dCAqdiA9IChvZ2dfaW50MzJfdCAqKWFsbG9jYShzaXplb2YoKnYpKmJvb2stPmRpbSk7CiAgICAg
bG9uZyBpLGo7CiAgICAgaW50IGNocHRyPTA7CmRpZmYgLS1naXQgYS9tYXBwaW5nMC5jIGIvbWFw
cGluZzAuYwppbmRleCAxNTBhZmJmLi44NGZhM2MzIDEwMDY0NAotLS0gYS9tYXBwaW5nMC5jCisr
KyBiL21hcHBpbmcwLmMKQEAgLTEwOCw0MCArMTA4LDM1IEBAIGludCBtYXBwaW5nX2ludmVyc2Uo
dm9yYmlzX2RzcF9zdGF0ZSAqdmQsdm9yYmlzX2luZm9fbWFwcGluZyAqaW5mbyl7CiAgIGludCAg
ICAgICAgICAgICAgICAgICBpLGo7CiAgIGxvbmcgICAgICAgICAgICAgICAgICBuPWNpLT5ibG9j
a3NpemVzW3ZkLT5XXTsKIAotICBvZ2dfaW50MzJfdCAqKnBjbWJ1bmRsZT0KLSAgICBhbGxvY2Eo
c2l6ZW9mKCpwY21idW5kbGUpKnZpLT5jaGFubmVscyk7Ci0gIGludCAgICAgICAgICAqemVyb2J1
bmRsZT0KLSAgICBhbGxvY2Eoc2l6ZW9mKCp6ZXJvYnVuZGxlKSp2aS0+Y2hhbm5lbHMpOwotICBp
bnQgICAgICAgICAgKm5vbnplcm89Ci0gICAgYWxsb2NhKHNpemVvZigqbm9uemVybykqdmktPmNo
YW5uZWxzKTsKLSAgb2dnX2ludDMyX3QgKipmbG9vcm1lbW89Ci0gICAgYWxsb2NhKHNpemVvZigq
Zmxvb3JtZW1vKSp2aS0+Y2hhbm5lbHMpOworICBvZ2dfaW50MzJfdCAqKnBjbWJ1bmRsZSA9YWxs
b2NhKHNpemVvZigqcGNtYnVuZGxlKSp2aS0+Y2hhbm5lbHMpOworICBpbnQgICAgICAgICAgKnpl
cm9idW5kbGU9YWxsb2NhKHNpemVvZigqemVyb2J1bmRsZSkqdmktPmNoYW5uZWxzKTsKKyAgaW50
ICAgICAgICAgICpub256ZXJvICAgPWFsbG9jYShzaXplb2YoKm5vbnplcm8pKnZpLT5jaGFubmVs
cyk7CisgIG9nZ19pbnQzMl90ICoqZmxvb3JtZW1vID1hbGxvY2Eoc2l6ZW9mKCpmbG9vcm1lbW8p
KnZpLT5jaGFubmVscyk7CiAgIAogICAvKiByZWNvdmVyIHRoZSBzcGVjdHJhbCBlbnZlbG9wZTsg
c3RvcmUgaXQgaW4gdGhlIFBDTSB2ZWN0b3IgZm9yIG5vdyAqLwogICBmb3IoaT0wO2k8dmktPmNo
YW5uZWxzO2krKyl7CiAgICAgaW50IHN1Ym1hcD0wOwogICAgIGludCBmbG9vcm5vOworICAgIHZv
cmJpc19pbmZvX2Zsb29yICp2aWY7CiAgICAgCiAgICAgaWYoaW5mby0+c3VibWFwcz4xKQogICAg
ICAgc3VibWFwPWluZm8tPmNobXV4bGlzdFtpXTsKICAgICBmbG9vcm5vPWluZm8tPnN1Ym1hcGxp
c3Rbc3VibWFwXS5mbG9vcjsKICAgICAKKyAgICB2aWY9Y2ktPmZsb29yX3BhcmFtW2Zsb29ybm9d
OwogICAgIGlmKGNpLT5mbG9vcl90eXBlW2Zsb29ybm9dKXsKICAgICAgIC8qIGZsb29yIDEgKi8K
LSAgICAgIGZsb29ybWVtb1tpXT1hbGxvY2Eoc2l6ZW9mKCpmbG9vcm1lbW9baV0pKgotCQkJICBm
bG9vcjFfbWVtb3NpemUoY2ktPmZsb29yX3BhcmFtW2Zsb29ybm9dKSk7Ci0gICAgICBmbG9vcm1l
bW9baV09Zmxvb3IxX2ludmVyc2UxKHZkLGNpLT5mbG9vcl9wYXJhbVtmbG9vcm5vXSxmbG9vcm1l
bW9baV0pOworICAgICAgZmxvb3JtZW1vW2ldPWFsbG9jYShzaXplb2YoKmZsb29ybWVtb1tpXSkq
Zmxvb3IxX21lbW9zaXplKHZpZikpOworICAgICAgZmxvb3JtZW1vW2ldPWZsb29yMV9pbnZlcnNl
MSh2ZCx2aWYsZmxvb3JtZW1vW2ldKTsKICAgICB9ZWxzZXsKICAgICAgIC8qIGZsb29yIDAgKi8K
LSAgICAgIGZsb29ybWVtb1tpXT1hbGxvY2Eoc2l6ZW9mKCpmbG9vcm1lbW9baV0pKgotCQkJICBm
bG9vcjBfbWVtb3NpemUoY2ktPmZsb29yX3BhcmFtW2Zsb29ybm9dKSk7Ci0gICAgICBmbG9vcm1l
bW9baV09Zmxvb3IwX2ludmVyc2UxKHZkLGNpLT5mbG9vcl9wYXJhbVtmbG9vcm5vXSxmbG9vcm1l
bW9baV0pOworICAgICAgZmxvb3JtZW1vW2ldPWFsbG9jYShzaXplb2YoKmZsb29ybWVtb1tpXSkq
Zmxvb3IwX21lbW9zaXplKHZpZikpOworICAgICAgZmxvb3JtZW1vW2ldPWZsb29yMF9pbnZlcnNl
MSh2ZCx2aWYsZmxvb3JtZW1vW2ldKTsKICAgICB9Ci0gICAgCiAgICAgaWYoZmxvb3JtZW1vW2ld
KQogICAgICAgbm9uemVyb1tpXT0xOwogICAgIGVsc2UKLSAgICAgIG5vbnplcm9baV09MDsgICAg
ICAKKyAgICAgIG5vbnplcm9baV09MDsKICAgICBtZW1zZXQodmQtPndvcmtbaV0sMCxzaXplb2Yo
KnZkLT53b3JrW2ldKSpuLzIpOwogICB9CiAKZGlmZiAtLWdpdCBhL3JlczAxMi5jIGIvcmVzMDEy
LmMKaW5kZXggNGYzNTFlZC4uMTZmYWJkOSAxMDA2NDQKLS0tIGEvcmVzMDEyLmMKKysrIGIvcmVz
MDEyLmMKQEAgLTEwNCw3ICsxMDQsNiBAQCBpbnQgcmVzX2ludmVyc2Uodm9yYmlzX2RzcF9zdGF0
ZSAqdmQsdm9yYmlzX2luZm9fcmVzaWR1ZSAqaW5mbywKICAgICAgIGNoPXVzZWQ7CiAgICAgICAK
ICAgICAgIGlmKHVzZWQpewotCQogCWNoYXIgKipwYXJ0d29yZD0oY2hhciAqKilhbGxvY2EoY2gq
c2l6ZW9mKCpwYXJ0d29yZCkpOwogCWZvcihqPTA7ajxjaDtqKyspCiAJICBwYXJ0d29yZFtqXT0o
Y2hhciAqKWFsbG9jYShwYXJ0d29yZHMqcGFydGl0aW9uc19wZXJfd29yZCoKQEAgLTE3MCwxMyAr
MTY5LDEzIEBAIGludCByZXNfaW52ZXJzZSh2b3JiaXNfZHNwX3N0YXRlICp2ZCx2b3JiaXNfaW5m
b19yZXNpZHVlICppbmZvLAogICAgICAgaW50IHBhcnR2YWxzPW4vc2FtcGxlc19wZXJfcGFydGl0
aW9uOwogICAgICAgaW50IHBhcnR3b3Jkcz0ocGFydHZhbHMrcGFydGl0aW9uc19wZXJfd29yZC0x
KS9wYXJ0aXRpb25zX3Blcl93b3JkOwogICAgICAgCi0gICAgICBjaGFyICpwYXJ0d29yZD0KLQko
Y2hhciAqKWFsbG9jYShwYXJ0d29yZHMqcGFydGl0aW9uc19wZXJfd29yZCpzaXplb2YoKnBhcnR3
b3JkKSk7CiAgICAgICBpbnQgYmVnaW5vZmY9aW5mby0+YmVnaW4vY2g7CiAgICAgICAKICAgICAg
IGZvcihpPTA7aTxjaDtpKyspaWYobm9uemVyb1tpXSlicmVhazsKICAgICAgIGlmKGk9PWNoKXJl
dHVybigwKTsgLyogbm8gbm9uemVybyB2ZWN0b3JzICovCi0gICAgICAKKyAgICAgIGVsc2UKKyAg
ICAgeyAvKiArc2NvcGUgKi8KKyAgICAgIGNoYXIgKnBhcnR3b3JkPShjaGFyICopYWxsb2NhKHBh
cnR3b3JkcypwYXJ0aXRpb25zX3Blcl93b3JkKnNpemVvZigqcGFydHdvcmQpKTsKICAgICAgIHNh
bXBsZXNfcGVyX3BhcnRpdGlvbi89Y2g7CiAgICAgICAKICAgICAgIGZvcihzPTA7czxpbmZvLT5z
dGFnZXM7cysrKXsKQEAgLTIxNCw2ICsyMTMsNyBAQCBpbnQgcmVzX2ludmVyc2Uodm9yYmlzX2Rz
cF9zdGF0ZSAqdmQsdm9yYmlzX2luZm9fcmVzaWR1ZSAqaW5mbywKIAkgICAgfQogCX0KICAgICAg
IH0gCisgICAgIH0gLyogLXNjb3BlICovCiAgICAgfQogICB9CiAgZW9wYnJlYWs6Cg==
--000000000000bb116705bec1ffca
Content-Type: text/x-patch; charset="US-ASCII"; name="0002-vla.patch"
Content-Disposition: attachment; filename="0002-vla.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: file2

ZGlmZiAtdXJwIC0tZXhjbHVkZT0uZ2l0IHRyZW1vci0wMS9jb2RlYm9vay5jIHRyZW1vci0wMi9j
b2RlYm9vay5jCi0tLSB0cmVtb3ItMDEvY29kZWJvb2suYwkyMDIxLTAzLTMwIDE0OjQ4OjM3LjQ4
OTM3MjY4NiArMDMwMAorKysgdHJlbW9yLTAyL2NvZGVib29rLmMJMjAyMS0wMy0zMCAxNjo0NDo1
Ny4yMzcyODg0MjYgKzAzMDAKQEAgLTE5Nyw3ICsxOTcsNyBAQCBzdGF0aWMgaW50IF9tYWtlX2Rl
Y29kZV90YWJsZShjb2RlYm9vayAqCiAgICAgcmV0dXJuIDA7CiAgIH0KICBlbHNlIHsgLyogK3Nj
b3BlICovCi0gIG9nZ191aW50MzJfdCAqd29yaz1hbGxvY2EoKHMtPnVzZWRfZW50cmllcyoyLTIp
KnNpemVvZigqd29yaykpOworICBWQVJfU1RBQ0sob2dnX3VpbnQzMl90LHdvcmsscy0+dXNlZF9l
bnRyaWVzKjItMik7CiAgIGludCBpOwogCiAgIGlmKF9tYWtlX3dvcmRzKGxlbmd0aGxpc3Qscy0+
ZW50cmllcyx3b3JrLHF1YW50dmFscyxzLG9wYixtYXB0eXBlKSlyZXR1cm4gMTsKQEAgLTM1NCw3
ICszNTQsNyBAQCBpbnQgdm9yYmlzX2Jvb2tfdW5wYWNrKG9nZ3BhY2tfYnVmZmVyICpvCiAgIGlm
IChqIT0wICYmIGohPTEpIC8qIEVPRiAqLwogICAgIGdvdG8gX2VvZm91dDsKICBlbHNlIHsgLyog
K3Njb3BlICovCi0gIGNoYXIgKmxlbmd0aGxpc3Q9KGNoYXIgKilhbGxvY2Eoc2l6ZW9mKCpsZW5n
dGhsaXN0KSpzLT5lbnRyaWVzKTsKKyAgVkFSX1NUQUNLKGNoYXIsbGVuZ3RobGlzdCxzLT5lbnRy
aWVzKTsKICAgc3dpdGNoKGopewogICBjYXNlIDA6CiAgICAgLyogdW5vcmRlcmVkICovCkBAIC00
NDUsNyArNDQ1LDggQEAgaW50IHZvcmJpc19ib29rX3VucGFjayhvZ2dwYWNrX2J1ZmZlciAqbwog
CS8qIHVzZSBkZWNfdHlwZSAxOiB2ZWN0b3Igb2YgcGFja2VkIHZhbHVlcyAqLwogCiAJLyogbmVl
ZCBxdWFudGl6ZWQgdmFsdWVzIGJlZm9yZSAgKi8KLQlzLT5xX3ZhbD1hbGxvY2Eoc2l6ZW9mKG9n
Z191aW50MTZfdCkqcXVhbnR2YWxzKTsKKwlWQVJfU1RBQ0sob2dnX3VpbnQxNl90LHEscXVhbnR2
YWxzKTsKKwlzLT5xX3ZhbD1xOwogCWZvcihpPTA7aTxxdWFudHZhbHM7aSsrKQogCSAgKChvZ2df
dWludDE2X3QgKilzLT5xX3ZhbClbaV09b2dncGFja19yZWFkKG9wYixzLT5xX2JpdHMpOwogCQpA
QCAtNzEzLDcgKzcxNCw3IEBAIGxvbmcgdm9yYmlzX2Jvb2tfZGVjb2RldnNfYWRkKGNvZGVib29r
ICoKIAkJCSAgICAgIG9nZ3BhY2tfYnVmZmVyICpiLGludCBuLGludCBwb2ludCl7CiAgIGlmKGJv
b2stPnVzZWRfZW50cmllcz4wKXsKICAgICBpbnQgc3RlcD1uL2Jvb2stPmRpbTsKLSAgICBvZ2df
aW50MzJfdCAqdiA9IChvZ2dfaW50MzJfdCAqKWFsbG9jYShzaXplb2YoKnYpKmJvb2stPmRpbSk7
CisgICAgVkFSX1NUQUNLKG9nZ19pbnQzMl90LHYsYm9vay0+ZGltKTsKICAgICBpbnQgaSxqLG87
CiAgICAgCiAgICAgZm9yIChqPTA7ajxzdGVwO2orKyl7CkBAIC03MjksNyArNzMwLDcgQEAgbG9u
ZyB2b3JiaXNfYm9va19kZWNvZGV2c19hZGQoY29kZWJvb2sgKgogbG9uZyB2b3JiaXNfYm9va19k
ZWNvZGV2X2FkZChjb2RlYm9vayAqYm9vayxvZ2dfaW50MzJfdCAqYSwKIAkJCSAgICAgb2dncGFj
a19idWZmZXIgKmIsaW50IG4saW50IHBvaW50KXsKICAgaWYoYm9vay0+dXNlZF9lbnRyaWVzPjAp
ewotICAgIG9nZ19pbnQzMl90ICp2ID0gKG9nZ19pbnQzMl90ICopYWxsb2NhKHNpemVvZigqdikq
Ym9vay0+ZGltKTsKKyAgICBWQVJfU1RBQ0sob2dnX2ludDMyX3Qsdixib29rLT5kaW0pOwogICAg
IGludCBpLGo7CiAgICAgCiAgICAgZm9yKGk9MDtpPG47KXsKQEAgLTc0Nyw3ICs3NDgsNyBAQCBs
b25nIHZvcmJpc19ib29rX2RlY29kZXZfYWRkKGNvZGVib29rICpiCiBsb25nIHZvcmJpc19ib29r
X2RlY29kZXZfc2V0KGNvZGVib29rICpib29rLG9nZ19pbnQzMl90ICphLAogCQkJICAgICBvZ2dw
YWNrX2J1ZmZlciAqYixpbnQgbixpbnQgcG9pbnQpewogICBpZihib29rLT51c2VkX2VudHJpZXM+
MCl7Ci0gICAgb2dnX2ludDMyX3QgKnYgPSAob2dnX2ludDMyX3QgKilhbGxvY2Eoc2l6ZW9mKCp2
KSpib29rLT5kaW0pOworICAgIFZBUl9TVEFDSyhvZ2dfaW50MzJfdCx2LGJvb2stPmRpbSk7CiAg
ICAgaW50IGksajsKICAgICAKICAgICBmb3IoaT0wO2k8bjspewpAQCAtNzcxLDcgKzc3Miw3IEBA
IGxvbmcgdm9yYmlzX2Jvb2tfZGVjb2RldnZfYWRkKGNvZGVib29rICoKIAkJCSAgICAgIGxvbmcg
b2Zmc2V0LGludCBjaCwKIAkJCSAgICAgIG9nZ3BhY2tfYnVmZmVyICpiLGludCBuLGludCBwb2lu
dCl7CiAgIGlmKGJvb2stPnVzZWRfZW50cmllcz4wKXsKLSAgICBvZ2dfaW50MzJfdCAqdiA9IChv
Z2dfaW50MzJfdCAqKWFsbG9jYShzaXplb2YoKnYpKmJvb2stPmRpbSk7CisgICAgVkFSX1NUQUNL
KG9nZ19pbnQzMl90LHYsYm9vay0+ZGltKTsKICAgICBsb25nIGksajsKICAgICBpbnQgY2hwdHI9
MDsKICAgICBsb25nIG09b2Zmc2V0K247CmRpZmYgLXVycCAtLWV4Y2x1ZGU9LmdpdCB0cmVtb3It
MDEvY29uZmlndXJlLmFjIHRyZW1vci0wMi9jb25maWd1cmUuYWMKLS0tIHRyZW1vci0wMS9jb25m
aWd1cmUuYWMJMjAyMS0wMy0zMCAxMzozNTozMi4wMDAwMDAwMDAgKzAzMDAKKysrIHRyZW1vci0w
Mi9jb25maWd1cmUuYWMJMjAyMS0wMy0zMCAxNjo0NDo1Ny4yMzgyODgzOTUgKzAzMDAKQEAgLTEy
Miw2ICsxMjIsMTQgQEAgZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
QUNfRlVOQ19BTExPQ0EKIEFDX0ZVTkNfTUVNQ01QCiAKK0FDX01TR19DSEVDS0lORyhmb3IgQzk5
IHZhcmlhYmxlLXNpemUgYXJyYXlzKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JB
TShbW11dLAorICBbW3N0YXRpYyBpbnQgeDsgY2hhciBhWysreF07IGFbc2l6ZW9mIGEgLSAxXSA9
IDA7IGludCBOOyByZXR1cm4gYVswXTtdXSApXSwKKyAgW2hhc192YXJfYXJyYXlzPXllcztBQ19E
RUZJTkUoW1ZBUl9BUlJBWVNdLFtdLFtVc2UgQzk5IHZhcmlhYmxlLXNpemUgYXJyYXlzXSldLAor
ICBbaGFzX3Zhcl9hcnJheXM9bm9dCispCitBQ19NU0dfUkVTVUxUKCRoYXNfdmFyX2FycmF5cykK
KwogCiBkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIGRubCBWZXJzaW9uIHNjcmlwdCAoZXhwb3J0ZWQgc3ltYm9scyBjb250cm9sLikKZGlmZiAt
dXJwIC0tZXhjbHVkZT0uZ2l0IHRyZW1vci0wMS9mbG9vcjAuYyB0cmVtb3ItMDIvZmxvb3IwLmMK
LS0tIHRyZW1vci0wMS9mbG9vcjAuYwkyMDIxLTAzLTMwIDE0OjI2OjAzLjMyNjA4NzI3NyArMDMw
MAorKysgdHJlbW9yLTAyL2Zsb29yMC5jCTIwMjEtMDMtMzAgMTY6NDQ6NTcuMjM4Mjg4Mzk1ICsw
MzAwCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCB2b3JiaXNfbHNwX3RvX2N1cnZlKG9nZ19pbnQz
Ml90ICpjdQogICBpbnQgaTsKICAgaW50IGFtcG9mZnNldGk9YW1wb2Zmc2V0KjQwOTY7CiAgIGlu
dCBhbXBpPWFtcDsKLSAgb2dnX2ludDMyX3QgKmlsc3A9KG9nZ19pbnQzMl90ICopYWxsb2NhKG0q
c2l6ZW9mKCppbHNwKSk7CisgIFZBUl9TVEFDSyhvZ2dfaW50MzJfdCxpbHNwLG0pOwogCiAvKiAg
b2dnX3VpbnQzMl90IGlueXE9ICgxVUw8PDMxKSAvIHRvQkFSSyhueXEpOyovIC8qIFVOVVNFRCAq
LwogICBvZ2dfdWludDMyX3QgaW1hcD0gKDFVTDw8MzEpIC8gbG47CmRpZmYgLXVycCAtLWV4Y2x1
ZGU9LmdpdCB0cmVtb3ItMDEvaW5mby5jIHRyZW1vci0wMi9pbmZvLmMKLS0tIHRyZW1vci0wMS9p
bmZvLmMJMjAyMS0wMy0zMCAxNDoyNjowMy4zMjYwODcyNzcgKzAzMDAKKysrIHRyZW1vci0wMi9p
bmZvLmMJMjAyMS0wMy0zMCAxNjo0NDo1Ny4yMzkyODgzNjUgKzAzMDAKQEAgLTU4LDcgKzU4LDcg
QEAgY2hhciAqdm9yYmlzX2NvbW1lbnRfcXVlcnkodm9yYmlzX2NvbW1lbgogICBsb25nIGk7CiAg
IGludCBmb3VuZCA9IDA7CiAgIGludCB0YWdsZW4gPSBzdHJsZW4odGFnKSsxOyAvKiArMSBmb3Ig
dGhlID0gd2UgYXBwZW5kICovCi0gIGNoYXIgKmZ1bGx0YWcgPSAoY2hhciAqKWFsbG9jYSh0YWds
ZW4rIDEpOworICBWQVJfU1RBQ0soY2hhcixmdWxsdGFnLHRhZ2xlbisxKTsKIAogICBzdHJjcHko
ZnVsbHRhZywgdGFnKTsKICAgc3RyY2F0KGZ1bGx0YWcsICI9Iik7CkBAIC03OCw3ICs3OCw3IEBA
IGNoYXIgKnZvcmJpc19jb21tZW50X3F1ZXJ5KHZvcmJpc19jb21tZW4KIGludCB2b3JiaXNfY29t
bWVudF9xdWVyeV9jb3VudCh2b3JiaXNfY29tbWVudCAqdmMsIGNoYXIgKnRhZyl7CiAgIGludCBp
LGNvdW50PTA7CiAgIGludCB0YWdsZW4gPSBzdHJsZW4odGFnKSsxOyAvKiArMSBmb3IgdGhlID0g
d2UgYXBwZW5kICovCi0gIGNoYXIgKmZ1bGx0YWcgPSAoY2hhciAqKWFsbG9jYSh0YWdsZW4rMSk7
CisgIFZBUl9TVEFDSyhjaGFyLGZ1bGx0YWcsdGFnbGVuKzEpOwogICBzdHJjcHkoZnVsbHRhZyx0
YWcpOwogICBzdHJjYXQoZnVsbHRhZywgIj0iKTsKIApkaWZmIC11cnAgLS1leGNsdWRlPS5naXQg
dHJlbW9yLTAxL21hcHBpbmcwLmMgdHJlbW9yLTAyL21hcHBpbmcwLmMKLS0tIHRyZW1vci0wMS9t
YXBwaW5nMC5jCTIwMjEtMDMtMzAgMTU6Mjg6MzEuMjQzMTk2MzI3ICswMzAwCisrKyB0cmVtb3It
MDIvbWFwcGluZzAuYwkyMDIxLTAzLTMwIDE2OjQ0OjU3LjI0MDI4ODMzNyArMDMwMApAQCAtMTA4
LDEyICsxMDgsMjUgQEAgaW50IG1hcHBpbmdfaW52ZXJzZSh2b3JiaXNfZHNwX3N0YXRlICp2ZAog
ICBpbnQgICAgICAgICAgICAgICAgICAgaSxqOwogICBsb25nICAgICAgICAgICAgICAgICAgbj1j
aS0+YmxvY2tzaXplc1t2ZC0+V107CiAKLSAgb2dnX2ludDMyX3QgKipwY21idW5kbGUgPWFsbG9j
YShzaXplb2YoKnBjbWJ1bmRsZSkqdmktPmNoYW5uZWxzKTsKLSAgaW50ICAgICAgICAgICp6ZXJv
YnVuZGxlPWFsbG9jYShzaXplb2YoKnplcm9idW5kbGUpKnZpLT5jaGFubmVscyk7Ci0gIGludCAg
ICAgICAgICAqbm9uemVybyAgID1hbGxvY2Eoc2l6ZW9mKCpub256ZXJvKSp2aS0+Y2hhbm5lbHMp
OwotICBvZ2dfaW50MzJfdCAqKmZsb29ybWVtbyA9YWxsb2NhKHNpemVvZigqZmxvb3JtZW1vKSp2
aS0+Y2hhbm5lbHMpOworICBWQVJfU1RBQ0sob2dnX2ludDMyX3QgKixwY21idW5kbGUsdmktPmNo
YW5uZWxzKTsKKyAgVkFSX1NUQUNLKGludCwgICAgICAgICAgemVyb2J1bmRsZSx2aS0+Y2hhbm5l
bHMpOworICBWQVJfU1RBQ0soaW50LCAgICAgICAgICBub256ZXJvLHZpLT5jaGFubmVscyk7Cisg
IFZBUl9TVEFDSyhvZ2dfaW50MzJfdCAqLGZsb29ybWVtbyx2aS0+Y2hhbm5lbHMpOwogICAKICAg
LyogcmVjb3ZlciB0aGUgc3BlY3RyYWwgZW52ZWxvcGU7IHN0b3JlIGl0IGluIHRoZSBQQ00gdmVj
dG9yIGZvciBub3cgKi8KKyAgZm9yKGk9MCxqPTA7aTx2aS0+Y2hhbm5lbHM7aSsrKXsKKyAgICBp
bnQgc3VibWFwPTA7CisgICAgaW50IGZsb29ybm87CisKKyAgICBpZihpbmZvLT5zdWJtYXBzPjEp
IHN1Ym1hcD1pbmZvLT5jaG11eGxpc3RbaV07CisgICAgZmxvb3Jubz1pbmZvLT5zdWJtYXBsaXN0
W3N1Ym1hcF0uZmxvb3I7CisgICAgaiArPSAoY2ktPmZsb29yX3R5cGVbZmxvb3Jub10pPyBmbG9v
cjFfbWVtb3NpemUoY2ktPmZsb29yX3BhcmFtW2Zsb29ybm9dKSA6CisJCQkJICAgIGZsb29yMF9t
ZW1vc2l6ZShjaS0+Zmxvb3JfcGFyYW1bZmxvb3Jub10pOworICB9CisKKyB7LyordmxhIHNjb3Bl
ICovCisgIFZBUl9TVEFDSyhvZ2dfaW50MzJfdCx0bXAsaik7CisgIG9nZ19pbnQzMl90ICpwPXRt
cDsKICAgZm9yKGk9MDtpPHZpLT5jaGFubmVscztpKyspewogICAgIGludCBzdWJtYXA9MDsKICAg
ICBpbnQgZmxvb3JubzsKQEAgLTEyNiwxMiArMTM5LDEyIEBAIGludCBtYXBwaW5nX2ludmVyc2Uo
dm9yYmlzX2RzcF9zdGF0ZSAqdmQKICAgICB2aWY9Y2ktPmZsb29yX3BhcmFtW2Zsb29ybm9dOwog
ICAgIGlmKGNpLT5mbG9vcl90eXBlW2Zsb29ybm9dKXsKICAgICAgIC8qIGZsb29yIDEgKi8KLSAg
ICAgIGZsb29ybWVtb1tpXT1hbGxvY2Eoc2l6ZW9mKCpmbG9vcm1lbW9baV0pKmZsb29yMV9tZW1v
c2l6ZSh2aWYpKTsKLSAgICAgIGZsb29ybWVtb1tpXT1mbG9vcjFfaW52ZXJzZTEodmQsdmlmLGZs
b29ybWVtb1tpXSk7CisgICAgICBmbG9vcm1lbW9baV09Zmxvb3IxX2ludmVyc2UxKHZkLHZpZixw
KTsKKyAgICAgIHAgKz0gZmxvb3IxX21lbW9zaXplKHZpZik7CiAgICAgfWVsc2V7CiAgICAgICAv
KiBmbG9vciAwICovCi0gICAgICBmbG9vcm1lbW9baV09YWxsb2NhKHNpemVvZigqZmxvb3JtZW1v
W2ldKSpmbG9vcjBfbWVtb3NpemUodmlmKSk7Ci0gICAgICBmbG9vcm1lbW9baV09Zmxvb3IwX2lu
dmVyc2UxKHZkLHZpZixmbG9vcm1lbW9baV0pOworICAgICAgZmxvb3JtZW1vW2ldPWZsb29yMF9p
bnZlcnNlMSh2ZCx2aWYscCk7CisgICAgICBwICs9IGZsb29yMF9tZW1vc2l6ZSh2aWYpOwogICAg
IH0KICAgICBpZihmbG9vcm1lbW9baV0pCiAgICAgICBub256ZXJvW2ldPTE7CkBAIC0yMzAsNiAr
MjQzLDggQEAgaW50IG1hcHBpbmdfaW52ZXJzZSh2b3JiaXNfZHNwX3N0YXRlICp2ZAogICAvL2Zv
cihqPTA7ajx2aS0+Y2hhbm5lbHM7aisrKQogICAvL19hbmFseXNpc19vdXRwdXQoImltZGN0Iixz
ZXEraix2Yi0+cGNtW2pdLC0yNCxuLDAsMCk7CiAKKyB9LyotdmxhIHNjb3BlICovCisKICAgLyog
YWxsIGRvbmUhICovCiAgIHJldHVybigwKTsKIH0KZGlmZiAtdXJwIC0tZXhjbHVkZT0uZ2l0IHRy
ZW1vci0wMS9vcy5oIHRyZW1vci0wMi9vcy5oCi0tLSB0cmVtb3ItMDEvb3MuaAkyMDIxLTAzLTMw
IDEzOjM1OjMyLjAwMDAwMDAwMCArMDMwMAorKysgdHJlbW9yLTAyL29zLmgJMjAyMS0wMy0zMCAx
Njo0NDo1Ny4yNDAyODgzMzcgKzAzMDAKQEAgLTQxLDEwICs0MSwzMyBAQAogIyAgaW5jbHVkZSA8
bWFsbG9jLmg+CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfQUxMT0NBX0gKLSMgIGluY2x1ZGUgPGFs
bG9jYS5oPgorI2lmIGRlZmluZWQgSEFWRV9BTExPQ0EKKworIyBpZmRlZiBfV0lOMzIKKyMgIGlu
Y2x1ZGUgPG1hbGxvYy5oPgorIyAgZGVmaW5lIFZBUl9TVEFDSyh0eXBlLCB2YXIsIHNpemUpIHR5
cGUgKnZhciA9ICgodHlwZSopX2FsbG9jYShzaXplb2YodHlwZSkqKHNpemUpKSkKKyMgZWxzZQor
IyAgaWZkZWYgSEFWRV9BTExPQ0FfSAorIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorIyAgZWxzZQor
IyAgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoX19BUk9TX18p
ICYmIGRlZmluZWQoX19HTlVDX18pCisgLyogYnlwYXNzIF9fYWxsb2NhX2dldF9zdGFja19saW1p
dCgpIGNhbGwgaW4gYWxsb2NhLmgKKyAgIGZyb20gb2xkIEFST1MgU0RLcywgZGlyZWN0bHkgdXNl
IF9fYnVpbHRpbl9hbGxvY2EoKS4gKi8KKyMgICB1bmRlZiBhbGxvY2EKKyMgICBkZWZpbmUgYWxs
b2NhIF9fYnVpbHRpbl9hbGxvY2EKKyMgIGVuZGlmCisjICBkZWZpbmUgVkFSX1NUQUNLKHR5cGUs
IHZhciwgc2l6ZSkgdHlwZSAqdmFyID0gKCh0eXBlKikgYWxsb2NhKHNpemVvZih0eXBlKSooc2l6
ZSkpKQorIyBlbmRpZgorCisjZWxpZiBkZWZpbmVkIFZBUl9BUlJBWVMKKworIyAgZGVmaW5lIFZB
Ul9TVEFDSyh0eXBlLCB2YXIsIHNpemUpIHR5cGUgdmFyW3NpemVdCisKICNlbHNlCi0jICBpbmNs
dWRlIDxzdGRsaWIuaD4KKworI2Vycm9yICJFaXRoZXIgVkFSX0FSUkFZUyBvciBIQVZFX0FMTE9D
QSBtdXN0IGJlIGRlZmluZWQgdG8gc2VsZWN0IHRoZSBzdGFjayBhbGxvY2F0aW9uIG1vZGUiCiAj
ZW5kaWYKIAogI2lmZGVmIFVTRV9NRU1PUllfSApkaWZmIC11cnAgLS1leGNsdWRlPS5naXQgdHJl
bW9yLTAxL3JlczAxMi5jIHRyZW1vci0wMi9yZXMwMTIuYwotLS0gdHJlbW9yLTAxL3JlczAxMi5j
CTIwMjEtMDMtMzAgMTQ6NTA6MDQuODk3NzQzMzcyICswMzAwCisrKyB0cmVtb3ItMDIvcmVzMDEy
LmMJMjAyMS0wMy0zMCAxNjo0NDo1Ny4yNDEyODgzMTAgKzAzMDAKQEAgLTEwNCwxMCArMTA0LDE0
IEBAIGludCByZXNfaW52ZXJzZSh2b3JiaXNfZHNwX3N0YXRlICp2ZCx2b3IKICAgICAgIGNoPXVz
ZWQ7CiAgICAgICAKICAgICAgIGlmKHVzZWQpeworCSNpZmRlZiBIQVZFX0FMTE9DQQogCWNoYXIg
KipwYXJ0d29yZD0oY2hhciAqKilhbGxvY2EoY2gqc2l6ZW9mKCpwYXJ0d29yZCkpOwogCWZvcihq
PTA7ajxjaDtqKyspCiAJICBwYXJ0d29yZFtqXT0oY2hhciAqKWFsbG9jYShwYXJ0d29yZHMqcGFy
dGl0aW9uc19wZXJfd29yZCoKIAkJCQkgICAgIHNpemVvZigqcGFydHdvcmRbal0pKTsKKwkjZWxz
ZSAvKiBWQVJfQVJSQVlTICovCisJY2hhciBwYXJ0d29yZFtjaF1bcGFydHdvcmRzKnBhcnRpdGlv
bnNfcGVyX3dvcmRdOworCSNlbmRpZgogCQogCWZvcihzPTA7czxpbmZvLT5zdGFnZXM7cysrKXsK
IAkgIApAQCAtMTc1LDcgKzE3OSw3IEBAIGludCByZXNfaW52ZXJzZSh2b3JiaXNfZHNwX3N0YXRl
ICp2ZCx2b3IKICAgICAgIGlmKGk9PWNoKXJldHVybigwKTsgLyogbm8gbm9uemVybyB2ZWN0b3Jz
ICovCiAgICAgICBlbHNlCiAgICAgIHsgLyogK3Njb3BlICovCi0gICAgICBjaGFyICpwYXJ0d29y
ZD0oY2hhciAqKWFsbG9jYShwYXJ0d29yZHMqcGFydGl0aW9uc19wZXJfd29yZCpzaXplb2YoKnBh
cnR3b3JkKSk7CisgICAgICBWQVJfU1RBQ0soY2hhcixwYXJ0d29yZCxwYXJ0d29yZHMqcGFydGl0
aW9uc19wZXJfd29yZCk7CiAgICAgICBzYW1wbGVzX3Blcl9wYXJ0aXRpb24vPWNoOwogICAgICAg
CiAgICAgICBmb3Iocz0wO3M8aW5mby0+c3RhZ2VzO3MrKyl7Cg==
--000000000000bb116705bec1ffca
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVm9yYmlzLWRl
diBtYWlsaW5nIGxpc3QKVm9yYmlzLWRldkB4aXBoLm9yZwpodHRwOi8vbGlzdHMueGlwaC5vcmcv
bWFpbG1hbi9saXN0aW5mby92b3JiaXMtZGV2Cg==

--000000000000bb116705bec1ffca--