Attn: Development Editor, Latest OCaml Weekly News
Alan Schmitt <[email protected]> Tue, 07 Jul 2026 15:29:00 +0200
| Newsgroups | gmane.comp.lang.caml.inria |
|---|---|
| Message-ID | <[email protected]> |
--===-=-=
Content-Type: multipart/mixed; boundary="=-=-="
--=-=-=
Content-Type: multipart/alternative; boundary="==-=-="
--==-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl
ZWsgb2YgSnVuZSAzMCB0byBKdWx5DQowNywgMjAyNi4NCg0KVGFibGUgb2YgQ29udGVudHMNCuKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQpvcGFt
LW1pbnZlciAwLjIuMCAtIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIG1pbmltdW0gZGVwZW5kZW5j
eSB2ZXJzaW9ucw0KWmFudWRhIOKAkyBPQ2FtbCBsaW50ZXIgZXhwZXJpbWVudA0KcnBnbS1kZWNy
eXB0IOKAlCBhIGZvcm1hbGx5LXZlcmlmaWVkIFJQRyBNYWtlciBhc3NldCBkZWNyeXB0b3IgaW4g
T0NhbWwNCm1lbmhpcmZvcm1hdCAwLjEuMA0KU29sbzUgMC4xMi4wDQpMYW5kbWFya3MgMS43DQpX
aHkgT2NzaWdlbiBpcyBzdGF5aW5nIG9uIEx3dCAoZm9yIG5vdykNCkR1bmUgMy4yNA0KT2xkIENX
Tg0KDQoNCm9wYW0tbWludmVyIDAuMi4wIC0gYXV0b21hdGljYWxseSBkZXRlcm1pbmUgbWluaW11
bSBkZXBlbmRlbmN5IHZlcnNpb25zDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fu
bi1vcGFtLW1pbnZlci0wLTItMC1hdXRvbWF0aWNhbGx5LWRldGVybWluZS1taW5pbXVtLWRlcGVu
ZGVuY3ktdmVyc2lvbnMvMTgzMjgvMT4NCg0KDQpvbmV0aW1lcm9ib3QgYW5ub3VuY2VkDQrilIDi
lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
lIDilIANCg0KICBJIGhhdmUgcHVibGlzaGVkIG9wYW0tbWludmVyIDAuMi4wIChwcmV2aW91cyB2
ZXJzaW9ucyB3ZXJlIG5vdA0KICByZWxlYXNlZCB0byB0aGUgcHVibGljKS4gV2hhdCBpdCBkb2Vz
IGlzIHVzZSBhIGJpbmFyeSBzZWFyY2ggdG8gZmluZA0KICB0aGUgbWluaW11bSBwYXNzaW5nIHZl
cnNpb25zIG9mIGEgcHJvamVjdCdzIGRlcGVuZGVuY2llcyBsaXN0ZWQgaW4gaXRzDQogIG9wYW0g
ZmlsZSBhbmQgb3B0aW9uYWxseSB3cml0ZXMgdGhlbSBvdXQgdG8gdGhlIG9wYW0gZmlsZSBpbi1w
bGFjZS4gSQ0KICB3cm90ZSB0aGlzIGJlY2F1c2UgSSB3YXMgd29ya2luZyBvbiBhbm90aGVyIHBy
b2plY3QgKG5vdCB5ZXQNCiAgcHVibGlzaGVkKSBhbmQgZ290IHRvIHRoZSBwb2ludCBvZiBsaXN0
aW5nIGFsbCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQNCiAgcmVhbGl6aW5nIEkgaGFkIG5vIGlkZWEg
d2hhdCB2ZXJzaW9ucyBpdCB3YXMgY29tcGF0aWJsZSB3aXRoLiBUaGlzDQogIHRvb2wgZmluZHMg
dGhhdCBvdXQgYXV0b21hdGljYWxseS4NCg0KICBJdCdzIHByZXR0eSB3ZWxsIHBvbGlzaGVkIGF0
IHRoaXMgcG9pbnQsIGFuZCBpdCBoYXMgYSBjbWRsaW5lcg0KICBpbnRlcmZhY2UsIHN0b3JlcyBp
dHMgc3RhdGUgaW4gYSBqc29uIGZpbGUgc28gc2Vzc2lvbnMgY2FuIGJlIHJlc3VtZWQNCiAgaWYg
bmVlZCBiZSwgYW5kIGl0IGFsc28gZmluZHMgdGhlIG1pbmltdW0gY29tcGlsZXIgdmVyc2lvbnMg
YW5kDQogIGhhbmRsZXMgc3BsaXQgT0NhbWwgY29tcGlsZXIgYm91bmRzIGlmLCBmb3IgZXhhbXBs
ZSwgYSBwcm9qZWN0IGRvZXNuJ3QNCiAgd29yayBzcGVjaWZpY2FsbHkgd2l0aCBlYXJseSBPQ2Ft
bCA1IHZlcnNpb25zLiBUaGlzIGNvdWxkIGJlIHVzZWQgbm90DQogIG9ubHkgZm9yIG5ldyBwcm9q
ZWN0cywgYnV0IGFsc28gdG8gcmVsYXggdmVyc2lvbiBib3VuZHMgb24gYW55IHByb2plY3QNCiAg
d2hlcmUgdGhleSBoYXZlbid0IGJlZW4gZGV0ZXJtaW5lZCBwcmVjaXNlbHkuDQoNCiAgSG9tZXBh
Z2UgYW5kIHJlYWRtZSBpcyBoZXJlOg0KICA8aHR0cHM6Ly9naXRodWIuY29tL2x1bWlub3VzLW1v
b3NlL29wYW0tbWludmVyPg0KDQoNClphbnVkYSDigJMgT0NhbWwgbGludGVyIGV4cGVyaW1lbnQN
CuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQog
IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLXphbnVkYS1vY2FtbC1saW50ZXItZXhw
ZXJpbWVudC8xMTc4NC8xND4NCg0KDQpDb250aW51aW5nIHRoaXMgdGhyZWFkLCBLYWthZHUgYW5u
b3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
lIDilIDilIDilIDilIANCg0KICBaYW51ZGEgMi4xLjAgaXMgbWVyZ2VkIGludG8gb3BhbS1yZXBv
c2l0b3J5DQoNCiAg4oCiIE9DYW1sIDUuNSBzdXBwb3J0DQogIOKAoiBMaW50cyBjb3VsZCBiZSBk
aXNhYmxlZCB2aWEgYFtAQEB6YW51ZGEgIi1uYW1lIl0nDQogIOKAoiBMaW50cyByZXByZXNlbnRl
ZCBhcyBvY2FtbGZpbmQgcGFja2FnZXMgY291bGQgYmUgbG9hZGVkIGF0IHJ1bnRpbWUNCiAgICBh
bmQgZGVmaW5lZCBvdXRzaWRlIHphbnVkYSBjb2RlYmFzZS4gVGhpcyBtb2R1bGFyaXR5IGZvciBu
b3cgaXMNCiAgICBleHBlcmltZW50YWwuDQoNCg0KcnBnbS1kZWNyeXB0IOKAlCBhIGZvcm1hbGx5
LXZlcmlmaWVkIFJQRyBNYWtlciBhc3NldCBkZWNyeXB0b3IgaW4gT0NhbWwNCuKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1
c3Mub2NhbWwub3JnL3QvYW5uLXJwZ20tZGVjcnlwdC1hLWZvcm1hbGx5LXZlcmlmaWVkLXJwZy1t
YWtlci1hc3NldC1kZWNyeXB0b3ItaW4tb2NhbWwvMTgzMjQvMT4NCg0KDQpMdWxMYVMgYW5ub3Vu
Y2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0K
ICBIaSBldmVyeW9uZSkpKSA6c2xpZ2h0bHlfc21pbGluZ19mYWNlOg0KDQogIEknZCBsaWtlIHRv
IHNoYXJlICpycGdtLWRlY3J5cHQqLCBhIHNtYWxsIGNvbW1hbmQtbGluZSB0b29sIHRoYXQNCiAg
ZGVjcnlwdHMgYW5kIGV4dHJhY3RzIFJQRyBNYWtlciBhc3NldCBhcmNoaXZlcyAoWFAgLyBWWCAv
IFZYIEFjZSB2aWENCiAgYC5yZ3NzYWQnIC8gYC5yZ3NzMmEnIC8gYC5yZ3NzM2EnLCBhbmQgTVYg
LyBNWiB2aWEgdGhlIFhPUi1lbmNyeXB0ZWQNCiAgYXNzZXRzIGFuZCBgLnBhaycgYXJjaGl2ZXMp
Lg0KDQogIEl0IHN0YXJ0ZWQgYXMgYSBjbGVhbi1yb29tIHJlaW1wbGVtZW50YXRpb24gYW5kIGVu
ZGVkIHVwIGFzIGFuIGV4Y3VzZQ0KICB0byBwdXNoIE9DYW1sJ3MgY29ycmVjdG5lc3MgdG9vbGlu
ZyBhcyBmYXIgYXMgSSBjb3VsZCBvbiBhIHJlYWwNCiAgcHJvamVjdDoNCg0KICDigKIgKkdvc3Bl
bCogc3BlY2lmaWNhdGlvbnMgb24gdGhlIHB1cmUgY29yZSAoYCgqQCAuLi4gKiknIGluIHRoZQ0K
ICAgICB+Lm1saX5zKQ0KICDigKIgKldoeTMgKyBaMyogZGVkdWN0aXZlIHByb29mcyBvZiB0aGUg
a2V5IGRlcml2YXRpb24sIGxpdHRsZS1lbmRpYW4NCiAgICByZWFkcyBhbmQgYSBaaXAtU2xpcCBw
YXRoLXNhZmV0eSBpbnZhcmlhbnQgKDIzLzIzIGdvYWxzIGRpc2NoYXJnZWQpDQogIOKAoiAqUUNo
ZWNrKiBwcm9wZXJ0eSB0ZXN0cyAocm91bmQtdHJpcCAvIGludmFyaWFudHMpIGFsb25nc2lkZSB0
aGUgdW5pdA0KICAgICBzdWl0ZQ0KICDigKIgQ292ZXJhZ2UtZ3VpZGVkICphZmwtZnV6eiogb2Yg
dGhlIHBhcnNlcnMgaW4gQ0kgKDAgY3Jhc2hlcykNCiAg4oCiICpiaXNlY3RfcHB4KiBjb3ZlcmFn
ZSArIGEgc21hbGwgZGlyZWN0ZWQgbXV0YXRpb24tdGVzdGluZyBwYXNzDQogIOKAoiBTaGlwcyBh
cyBhIHNpbmdsZSBzdGF0aWMgYmluYXJ5IHZpYSBgZHVuZSAtLXByb2ZpbGUgc3RhdGljJzsgdGhl
DQogICAgb25seSBleHRlcm5hbCBkZXAgaXMgYGNhbWx6aXAnICh6bGliKSBmb3IgdGhlIE1aIGAu
cGFrJyBwYXRoDQoNCiAgQnVpbGQvdGVzdCBydW5zIG9uIHRoZSBuYXRpdmUgV2luZG93cyBPQ2Ft
bCBzd2l0Y2ggYXMgd2VsbCBhcyBMaW51eC4NCiAgTGljZW5zZWQgQXBhY2hlLTIuMC4NCg0KICBF
eGFtcGxlIHJ1bjoNCg0KICDilIzilIDilIDilIDilIANCiAg4pSCICQgcnBnbS1kZWNyeXB0ICJN
eUdhbWUiIG91dA0KICDilIIgc2Nhbm5lZD0xODE3IGRlY3J5cHRlZD0xNjg1IHBhc3N0aHJvdWdo
PTEzMiBza2lwcGVkPTAgZmFpbGVkPTAgZm9ybWF0cz1bTVY9MTgxN10NCiAg4pSU4pSA4pSA4pSA
4pSADQoNCiAgUmVwbywgZG9jcyBhbmQgcHJlYnVpbHQgV2luZG93cy9MaW51eCBiaW5hcmllczoN
Cg0KICA8aHR0cHM6Ly9naXRodWIuY29tL3JvbGFuZnJlZW1hbjYtcG5nL3JwZ20tZGVjcnlwdD4N
Cg0KICBGZWVkYmFjayBvbiB0aGUgc3BlYy9wcm9vZiBzZXR1cCBlc3BlY2lhbGx5IHdlbGNvbWUg
4oCUIGl0J3MgbXkgZmlyc3QNCiAgc2VyaW91cyBnbyBhdCBHb3NwZWwgKyBXaHkzLCBzbyBJJ2Qg
bG92ZSB0byBoZWFyIGhvdyBvdGhlcnMgc3RydWN0dXJlDQogIHRoYXQgb24gcmVhbCBjb2RlLg0K
DQoNCm1lbmhpcmZvcm1hdCAwLjEuMA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8vZGlzY3Vzcy5vY2Ft
bC5vcmcvdC9hbm4tbWVuaGlyZm9ybWF0LTAtMS0wLzE4MzIyLzE+DQoNCg0KRmVkZXJpY28gYW5u
b3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
lIDilIANCg0KICBIZWxsbywNCg0KICBJJ20gZ2xhZCB0byBhbm5vdW5jZSB0aGUgZmlyc3QgcmVs
ZWFzZSBvZiBgbWVuaGlyZm9ybWF0JywgYSBjb21tYW5kDQogIGxpbmUgdG9vbCB0aGF0IGZvcm1h
dHMgYW5kIGluZGVudHMgTWVuaGlyIGFuZCBvY2FtbGxleCBzb3VyY2UgY29kZS4gSXQNCiAgdXNl
cyB0aGUgW29jYW1sZm9ybWF0IFJQQ10gdG8gcHJldHR5LXByaW50IHRoZSBPQ2FtbCBzZWN0aW9u
cyBvZiB5b3VyDQogIGxleGVycyBhbmQgcGFyc2VyczsgaXQgYWxzbyB0cmllcyBpdHMgYmVzdCB0
byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwNCiAgbG9jYXRpb24gb2YgeW91ciBjb21tZW50cyAoc3Rp
bGwgbmVlZHMgd29yayBpbiByZWdhcmQgdG8gdGhpcw0KICB0aG91Z2ghKS4NCg0KICBUaGlzIGlz
IGEgc2F0ZWxsaXRlIHByb2plY3Qgb2YgbXkgb25nb2luZyBhbmQgY29uc2lkZXJhYmx5IGxhcmdl
cg0KICBlZmZvcnQgdG8gYWRkIExTUCBzdXBwb3J0IHRvIHRoZXNlIHR3byBPQ2FtbCBkaWFsZWN0
cywNCiAgW2BtZW5oaXItbHNwJ10uIFRoZSBmb3JtYXR0aW5nIGZ1bmN0aW9uYWxpdHkgd2FzIG9y
aWdpbmFsbHkgZW1iZWRkZWQNCiAgaW50byB0aGUgTFNQIHNlcnZlciB0byBoYW5kbGUgZG9jdW1l
bnQgZm9ybWF0dGluZyByZXF1ZXN0cywgYW5kIEkNCiAgc3BsaXQgaXQgb3V0IGFzIGEgc3RhbmRh
bG9uZSBhcHBsaWNhdGlvbiBhZnRlciBbdGhpcyBpc3N1ZV0uDQoNCiAgWW91IGNhbiB0cnkgaXQg
b3V0IHdpdGggYG9wYW0gaW5zdGFsbCBtZW5oaXJmb3JtYXQnLiBUaGUgQ0xJIGlzIGhpZ2hseQ0K
ICBpbnNwaXJlZCBieSBvY2FtbGZvcm1hdCdzIGFuZCB0YWtlcyB0aGUgZmlsZSB0byBmb3JtYXQg
YXMgYXJndW1lbnQsDQogIGUuZy4gYG1lbmhpcmZvcm1hdCBjYWxjLm1seScuIEl0IGV4cG9zZXMg
YSBzbWFsbCBjb25maWd1cmF0aW9uIGJ5DQogIHdoaWNoIHlvdXIgY2FuIHR3ZWFrIHRoZSBmb3Jt
YXR0ZXIncyBiZWhhdmlvcjsgcmVhZCBvbiB0aGUgYXZhaWxhYmxlDQogIG9wdGlvbnMgd2l0aCBg
bWVuaGlyZm9ybWF0IC0taGVscCcuDQoNCiAgWW91IG1heSBhbHNvIGludGVncmF0ZSBpdCBpbiB5
b3VyIGR1bmUgcHJvamVjdCBieSBzZXR0aW5nIHVwDQogIFtkaWFsZWN0c10gZm9yIE1lbmhpciBh
bmQgb2NhbWxsZXg6DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiAoZGlhbGVjdA0KICDilIIg
IChuYW1lIG1lbmhpcikNCiAg4pSCICAoaW1wbGVtZW50YXRpb24NCiAg4pSCICAgKGV4dGVuc2lv
biBtbHkpDQogIOKUgiAgIChmb3JtYXQNCiAg4pSCICAgIChydW4gbWVuaGlyZm9ybWF0ICV7aW5w
dXQtZmlsZX0pKSkpDQogIOKUgiANCiAg4pSCIChkaWFsZWN0DQogIOKUgiAgKG5hbWUgb2NhbWxs
ZXgpDQogIOKUgiAgKGltcGxlbWVudGF0aW9uDQogIOKUgiAgIChleHRlbnNpb24gbWxsKQ0KICDi
lIIgICAoZm9ybWF0DQogIOKUgiAgICAocnVuIG1lbmhpcmZvcm1hdCAle2lucHV0LWZpbGV9KSkp
KQ0KICDilJTilIDilIDilIDilIANCg0KICBUaGVuIHJ1bm5pbmcgYGR1bmUgYnVpbGQgQGZtdCcg
d2lsbCBmb3JtYXQgeW91ciBwcm9qZWN0J3MgLm1sbCBhbmQNCiAgLm1seSBmaWxlcyBhbmQgZGlz
cGxheSBhIGRpZmYuDQoNCiAgQXMgc29tZW9uZSB3aG8gY2FuJ3QgbGl2ZSB3aXRob3V0IGZvcm1h
dC1vbi1zYXZlIGluIHRoZWlyIElERSwgSSB3YXMNCiAgcmVhbGx5IG1pc3NpbmcgYSBmb3JtYXR0
ZXIgZm9yIE1lbmhpciBhbmQgb2NhbWxsZXggZmlsZXMgaW4gdGhlIE9DYW1sDQogIGVjb3N5c3Rl
bS4gSSBob3BlIGBtZW5oaXJmb3JtYXQnIGZpbGxzIHRoYXQgdm9pZC4NCg0KICBJJ20gaW50ZXJl
c3RlZCBpbiBvcGluaW9ucyBhYm91dCB0aGUgcXVhbGl0eSBvZiB0aGUgb3V0cHV0IGFuZCBhbHNv
IGluDQogIHN1Z2dlc3Rpb25zIGZvciBvdGhlciBjdXN0b21pemF0aW9uIHBvaW50cyBvZiB0aGUN
CiAgY29uZmlndXJhdGlvbi4gUGxlYXNlIHNoYXJlIGJlbG93IG9yIHRocm91Z2ggYSBHaXRIdWIg
aXNzdWUhDQoNCiAg4oCiIG9wYW0gcGFnZTogPGh0dHBzOi8vb2NhbWwub3JnL3AvbWVuaGlyZm9y
bWF0L2xhdGVzdD4NCiAg4oCiIFNvdXJjZSBjb2RlOg0KICAgIDxodHRwczovL2dpdGh1Yi5jb20v
ZGFscHMvbWVuaGlyLWxzcC90cmVlL21haW4vcHJldHR5cHJpbnQ+DQoNCiAgRW5qb3khDQoNCg0K
W29jYW1sZm9ybWF0IFJQQ10gPGh0dHBzOi8vb2NhbWwub3JnL3Avb2NhbWxmb3JtYXQtcnBjLWxp
Yi9sYXRlc3Q+DQoNCltgbWVuaGlyLWxzcCddIDxodHRwczovL2dpdGh1Yi5jb20vZGFscHMvbWVu
aGlyLWxzcD4NCg0KW3RoaXMgaXNzdWVdIDxodHRwczovL2dpdGh1Yi5jb20vZGFscHMvbWVuaGly
LWxzcC9pc3N1ZXMvMjU+DQoNCltkaWFsZWN0c10NCjxodHRwczovL2R1bmUucmVhZHRoZWRvY3Mu
aW8vZW4vbGF0ZXN0L3JlZmVyZW5jZS9kdW5lLXByb2plY3QvZGlhbGVjdC5odG1sI2RpYWxlY3Q+
DQoNCg0KU29sbzUgMC4xMi4wDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAN
Cg0KICBBcmNoaXZlOiA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1zb2xvNS0wLTEy
LTAvMTgzMjAvMT4NCg0KDQpIYW5uZXMgTWVobmVydCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gA0KDQogIFdlIGFyZSBkZWxpZ2h0ZWQgdG8gYW5ub3VuY2UgdGhlIHJlbGVhc2Ugb2YgW1NvbG81
IDAuMTIuMF0uIFRoaXMgaGFzDQogIHR3byBkaXN0aW5jdCBmZWF0dXJlczogYSBuZXcgaHZ0IFti
YWNrZW5kIGZvciBEcmFnb25GbHlCU0QgbnZtbV0sDQogIHRoYW5rcyB0byBmaXJzdC10aW1lIGNv
bnRyaWJ1dG9yIE1pY2hhZWwgTmV1bWFubiwgYW5kIFtzb2Z0IHBvd2VyLW9mZg0KICBvZiB2aXJ0
aW8gdW5pa2VybmVsc10gLSBhIFtsb25nLXN0YW5kaW5nIGZlYXR1cmUgcmVxdWVzdF0sIHdoaWNo
IG1ha2VzDQogIHVzaW5nIHNvbG81IGUuZy4gb24gR29vZ2xlIGNvbXB1dGUgbXVjaCBzbW9vdGhl
ciDigJMgdGhpcyB3YXMgaW5pdGlhbGx5DQogIHJlcXVlc3RlZCBieSBNaWNoYWVsIEJhY2FyZWxs
YSwgaW5jbHVkaW5nIGRyYWZ0IGltcGxlbWVudGF0aW9ucywgYW5kDQogIFtub3cgaW1wbGVtZW50
ZWRdIGFuZCBtZXJnZWQgYnkgUm9tYWluIENhbGFzY2liZXR0YS4NCg0KICBPdGhlciBub3Rld29y
dGh5IGZpeGVzIGluY2x1ZGUgdGhhdCBgY29uZmlndXJlLnNoJyBbbm93IGNoZWNrcyBmb3IgdGhl
DQogIEMgY29tcGlsZXIgdmVyc2lvbl0gdG8gYmUgYXQgbGVhc3QgR0NDIGluIHZlcnNpb24gOSBv
ciBjbGFuZyBpbg0KICB2ZXJzaW9uIDEwLiBUaGUgYHNvbG81LWh2dC1kZWJ1ZycgY3Jhc2hlZCBz
aW5jZSB0b28gc3RyaWN0IHNlY2NvbXANCiAgcnVsZXMgd2VyZSBhcHBsaWVkIChzaW5jZSBzb2xv
NSAwLjExLjApIC0gdGhhbmtzIHRvIEZlbGl4IFNvbGNoZXIgZm9yDQogIG9wZW5pbmcgdGhlIFtp
c3N1ZV0sIGFuZCBhZ2FpbiBSb21haW4gQ2FsYXNjaWJldHRhIGZvciB0aGUgW2ZpeF0uDQoNCiAg
QXdhaXRpbmcgb3BhbS1yZXBvc2l0b3J5IG1lcmdlIGF0DQogIDxodHRwczovL2dpdGh1Yi5jb20v
b2NhbWwvb3BhbS1yZXBvc2l0b3J5L3B1bGwvMzAxODI+DQoNCg0KW1NvbG81IDAuMTIuMF0gPGh0
dHBzOi8vZ2l0aHViLmNvbS9Tb2xvNS9zb2xvNS9yZWxlYXNlcy90YWcvdjAuMTIuMD4NCg0KW2Jh
Y2tlbmQgZm9yIERyYWdvbkZseUJTRCBudm1tXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9Tb2xvNS9z
b2xvNS9wdWxsLzY0MD4NCg0KW3NvZnQgcG93ZXItb2ZmIG9mIHZpcnRpbyB1bmlrZXJuZWxzXQ0K
PGh0dHBzOi8vZ2l0aHViLmNvbS9Tb2xvNS9zb2xvNS9wdWxsLzY0Nz4NCg0KW2xvbmctc3RhbmRp
bmcgZmVhdHVyZSByZXF1ZXN0XQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9Tb2xvNS9zb2xvNS9pc3N1
ZXMvNDk5Pg0KDQpbbm93IGltcGxlbWVudGVkXSA8aHR0cHM6Ly9naXRodWIuY29tL1NvbG81L3Nv
bG81L3B1bGwvNjQ3Pg0KDQpbbm93IGNoZWNrcyBmb3IgdGhlIEMgY29tcGlsZXIgdmVyc2lvbl0N
CjxodHRwczovL2dpdGh1Yi5jb20vU29sbzUvc29sbzUvcHVsbC82NDU+DQoNCltpc3N1ZV0gPGh0
dHBzOi8vZ2l0aHViLmNvbS9Tb2xvNS9zb2xvNS9pc3N1ZXMvNjQzPg0KDQpbZml4XSA8aHR0cHM6
Ly9naXRodWIuY29tL1NvbG81L3NvbG81L3B1bGwvNjQ0Pg0KDQoNCkxhbmRtYXJrcyAxLjcNCuKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6IDxodHRw
czovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWxhbmRtYXJrcy0xLTcvMTgzMTkvMT4NCg0KDQpO
aWNvbGFzIE9qZWRhIEJhciBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQog
IERlYXIgY29tbXVuaXR5LA0KDQogIFdlIGFyZSBwbGVhc2VkIHRvIGFubm91bmNlIGEgbmV3IHJl
bGVhc2Ugb2YgL0xhbmRtYXJrcy8sIGEgc2ltcGxlDQogIHJ1bnRpbWUgcHJvZmlsZXIgZm9yIE9D
YW1sLg0KDQogIDxodHRwczovL2dpdGh1Yi5jb20vTGV4aUZpL2xhbmRtYXJrcy9yZWxlYXNlcy90
YWcvdjEuNz4NCg0KICBUaGUgbWFpbiBub3ZlbHR5IGluIHRoaXMgcmVsZWFzZSBpcyB0aGUgcG9z
c2liaWxpdHkgb2YgZGVmaW5pbmcgY3VzdG9tDQogIGJhY2tlbmRzIHRvIGdlbmVyYXRlIHJlcG9y
dHMgdGhhdCBjYW4gYmUgY29uc3VtZWQgYnkgZXh0ZXJuYWwNCiAgdmlld2Vycy4gQW4gZXhhbXBs
ZSBiYWNrZW5kIHRoYXQgcHJvZHVjZXMNCiAgPGh0dHBzOi8vd3d3LnNwZWVkc2NvcGUuYXBwLz4g
cmVwb3J0cyBpcyBpbmNsdWRlZCBpbiBhIG5ldyBsaWJyYXJ5DQogIGBsYW5kbWFya3Mtc3BlZWRz
Y29wZScuIEN1c3RvbSBiYWNrZW5kcyBjYW4gYmUgZGVmaW5lZCBpbiBleHRlcm5hbA0KICBsaWJy
YXJpZXMgd2l0aG91dCBuZWVkaW5nIHRvIG1vZGlmeSBgbGFuZG1hcmtzJyBpdHNlbGYuIFRoaXMg
c3VwcG9ydA0KICB3YXMgYWRkZWQgYnkgQG1qYW1ib24uDQoNCiAgSGFwcHkgcHJvZmlsaW5nIQ0K
DQogIENoZWVycywgTmljb2xhcw0KDQoNCldoeSBPY3NpZ2VuIGlzIHN0YXlpbmcgb24gTHd0IChm
b3Igbm93KQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcv
dC93aHktb2NzaWdlbi1pcy1zdGF5aW5nLW9uLWx3dC1mb3Itbm93LzE4MzE4LzE+DQoNCg0KVmlu
Y2VudCBCYWxhdCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIE92ZXIgMjAyNSB3ZSBtaWdy
YXRlZCB0aGUgd2hvbGUgT2NzaWdlbiBzdGFjayAob2NzaWdlbnNlcnZlciwgRWxpb20sDQogIG9j
c2lnZW4tdG9vbGtpdCwgb2NzaWdlbi1zdGFydCkgZnJvbSBMd3QgdG8gRWlvLiBUaGUgbWlncmF0
aW9uDQogIGNvbXBpbGVzIGFuZCB0aGUgdGVzdCBzdWl0ZSBwYXNzZXMuIFdlIGhhdmUgbm9uZXRo
ZWxlc3MgZGVjaWRlZCAqKm5vdA0KICB0byByZWxlYXNlIGl0IGFuZCB0byBzdGF5IG9uIEx3dCBm
b3Igbm93KiosIGFuZCB3ZSB3cm90ZSB1cCB3aHkuDQoNCiAgVHdvIG9ic3RhY2xlcyBzdG9wcGVk
IHVzOg0KDQogIOKAoiAqTG9zcyBvZiBmdW5jdGlvbiBjb2xvcmluZy4qIFVuZGVyIEx3dCwgYSBg
XyBMd3QudCcgaW4gYSB0eXBlIHRlbGxzDQogICAgIHlvdSBhIGNhbGwgbWF5IHN1c3BlbmQgb3Ig
ZG8gSS9PLiBJbiBhIG11bHRpLXRpZXIgZnJhbWV3b3JrIGxpa2UNCiAgICAgRWxpb20gdGhpcyBp
cyBjcnVjaWFsOiB0aGUgKnNhbWUqIHNoYXJlZCBleHByZXNzaW9uIGNhbiBiZSBhIGxvY2FsDQog
ICAgIGNhbGwgb24gdGhlIHNlcnZlciBhbmQgYSBuZXR3b3JrIHJvdW5kLXRyaXAgb24gdGhlIGNs
aWVudC4gV2l0aG91dA0KICAgICBjb2xvcmluZywgbm90aGluZyBhdCB0aGUgY2FsbCBzaXRlIHRl
bGxzIHlvdSB3aGVyZSB0byBwdXQgYQ0KICAgICBzcGlubmVyLCBhbmQgcmVhY3RpdmUgY29tYmlu
YXRvcnMgKGBSZWFjdCcgLyBgbWFwX3MnKSBzaWxlbnRseSBsb3NlDQogICAgIHRoZSBndWFyYW50
ZWUgdGhhdCB0aGV5IGFyZSBwdXJlLg0KICDigKIgKkVpbydzIGhhbmRsZXIgbW9kZWwgdnMgYnJv
d3NlciBldmVudHMuKiBPbiB0aGUgY2xpZW50LCBET00gZXZlbnQNCiAgICAgaGFuZGxlcnMgYXJl
IGNhbGxlZCBkaXJlY3RseSBieSB0aGUgYnJvd3NlciB3aXRoIG5vIEVpbyBoYW5kbGVyIG9uDQog
ICAgIHRoZSBzdGFjaywgc28gYW55IGBwZXJmb3JtJyBjcmFzaGVzLiBUaGUgdXN1YWwgd29ya2Fy
b3VuZA0KICAgICAoYEVpb19qcy5zdGFydCcpIGRlZmVycyB0aGUgYm9keSB2aWEgYHNldFRpbWVv
dXQoMCknLCB3aGljaCBydW5zDQogICAgIGFmdGVyIGV2ZW50IHByb3BhZ2F0aW9uIGFuZCBicmVh
a3MgYHByZXZlbnREZWZhdWx0JyAvDQogICAgIGBzdG9wUHJvcGFnYXRpb24nLg0KDQogIFRoaXMg
aXMgKm5vdCogYW4gYW50aS1FaW8gcG9zdC4gRWZmZWN0cyBhcmUgYSBtYWpvciBhY2hpZXZlbWVu
dCBvZg0KICBPQ2FtbCA1IGFuZCB3ZSBhcmUgZ3JhdGVmdWwgdG8gdGhlIG11bHRpY29yZSB0ZWFt
LiBXZSBhbHNvIHRoaW5rIHRoZQ0KICBtb25hZGljIHN0eWxlIGlzIGdlbnVpbmVseSBmaW5lICh3
aXRoIGBsZXQqJyBpdCBpcyBjb21mb3J0YWJsZSB0bw0KICB3cml0ZSksIGFuZCBgTHd0X2RpcmVj
dCcgaXMgdGhlcmUgZm9yIHRob3NlIHdobyBkaXNsaWtlIG1vbmFkcy4NCg0KICBPdXIgYnJvYWRl
ciB3b3JyeSBpcyBlY29zeXN0ZW0gdW5pdHk6IHZlcnkgbGFyZ2UgTHd0IGNvZGViYXNlcyBleGlz
dCwNCiAgdW5kZXJmdW5kZWQgcHJvamVjdHMgY2Fubm90IGFmZm9yZCBzdWNoIGEgbWlncmF0aW9u
LCBhbmQgYSBzcGxpdCB3b3VsZA0KICBodXJ0IGEgY29tbXVuaXR5IHRoYXQgaXMgYWxyZWFkeSBz
bWFsbC4gVG8gaGVscCwgd2UgcmVsZWFzZWQNCiAgW2BjaWFvLWx3dCddIChMd3QtdG8tRWlvIG1p
Z3JhdGlvbiB0b29scyksIGZ1bmRlZCBieSBOTG5ldCB0aHJvdWdoIE5HSQ0KICBaZXJvIENvcmUg
YW5kIFRhcmlkZXMuIFdlIHdvdWxkIGxvdmUgdGhlIGVmZmVjdHMgY29tbXVuaXR5J3MgdmlldyBv
bg0KICBkaXJlY3Rpb25zIHRoYXQgY291bGQgdW5ibG9jayB1cywgaW5jbHVkaW5nIGltcHJvdmlu
ZyBMd3QgaXRzZWxmDQogIChpb191cmluZywgZWZmZWN0cywgbXVsdGljb3JlKS4NCg0KICBGdWxs
IHdyaXRlLXVwOg0KICA8aHR0cHM6Ly9vY3NpZ2VuLm9yZy9ibG9nL3Bvc3RzL3doeS1vY3NpZ2Vu
LXN0YXlzLW9uLWx3dC1mb3Itbm93Lmh0bWw+DQoNCiAgRmVlZGJhY2ssIGlkZWFzIGFuZCBjb25z
dHJ1Y3RpdmUgZGlzYWdyZWVtZW50IHZlcnkgd2VsY29tZS4NCg0KDQpbYGNpYW8tbHd0J10gPGh0
dHBzOi8vZ2l0aHViLmNvbS90YXJpZGVzL2NpYW8tbHd0Pg0KDQoNCkR1bmUgMy4yNA0K4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8vZGlzY3Vzcy5vY2Ft
bC5vcmcvdC9hbm4tZHVuZS0zLTI0LzE4MzE2LzE+DQoNCg0KU2hvbiBhbm5vdW5jZWQNCuKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFRoZSBEdW5lIHRlYW0g
aXMgcGxlYXNlZCB0byBhbm5vdW5jZSBbdGhlIHJlbGVhc2Ugb2YgZHVuZSAzLjI0LjBdLg0KDQog
IEhpZ2hsaWdodHMgaW5jbHVkZSB0aGUgZm9sbG93aW5nDQoNCiAg4oCiIER1bmUgcGFja2FnZSBt
YW5hZ2VtZW50IG5vdyB1c2VzIHRoZSByZWxvY2F0YWJsZSBjb21waWxlciBieQ0KICAgIGRlZmF1
bHQsIGZvciBhbGwgc3VwcG9ydGVkIGNvbXBpbGVyIHZlcnNpb25zLiBUaGlzIGJyaW5ncyBhIG1h
c3NpdmUNCiAgICBzcGVlZHVwIHRvIHdvcmtzcGFjZSBzZXR1cCBpbiB0aGUgbWFueSBjYXNlcyB3
aGVyZSBidWlsdCBjb21waWxlcg0KICAgIHZlcnNpb25zIGNhbiBiZSByZXVzZWQuIChbb2NhbWwv
ZHVuZSMxNDM1N10sIFtAQWxpenRlcl0pDQoNCiAg4oCiIERpcmVjdG9yeSB0YXJnZXRzIGFyZSBu
b3cgZ2VuZXJhbGx5IGF2YWlsYWJsZSAoW29jYW1sL2R1bmUjMTQ1NzldKSwNCiAgICBhbGxvd2lu
ZyB0b29scyB0byBwcm9kdWNlIGVudGlyZSBkaXJlY3RvcnkgdHJlZXMgYXMgdGFyZ2V0cy4gU2Vl
IHRoZQ0KICAgIFtkb2N1bWVudGF0aW9uIG9uIGRpcmVjdG9yeSB0YXJnZXRzXSBmb3IgZGV0YWls
cy4NCg0KICDigKIgUGF0aCBoYW5kbGluZyBoYXMgYmVlbiByZWZpbmVkLCBpbXByb3ZpbmcgdGhl
IGNvbnNpc3RlbmN5IG9mIHBhdGhzDQogICAgYWNyb3NzIHBsYXRmb3JtcyAoW29jYW1sL2R1bmUj
MTQyNzhdIGFuZCBbb2NhbWwvZHVuZSMxNDI3OF0pIGFuZA0KICAgIHVzaW5nIGEgbW9yZSBjb25z
aXN0ZW50IGFuZCBkaXNjaXBsaW5lZCBsb2NhdGlvbiBmb3IgYCV7YmluOk5BTUV9Jw0KICAgIHZh
cmlhYmxlIGV4cGFuc2lvbnMgKFtvY2FtbC9kdW5lIzE0NDMyXSkuDQoNCiAg4oCiIFBhdGgtdmFs
dWVkIHBlcmNlbnQgZm9ybXMgKGAle2JpbjouLi59JywgYCV7ZGVwOi4uLn0nLA0KICAgIGAle3Bh
dGg6Li4ufScsIGFuZCBmcmllbmRzKSBub3cgZXhwYW5kIHNhbWUtZGlyZWN0b3J5IHBhdGhzIHdp
dGggYQ0KICAgIGxlYWRpbmcgYC4vJywgc28gdGhhdCBzaGVsbHMgbGlrZSBgYmFzaCcgaW4gYChi
YXNoIC4uLiknIGFuZA0KICAgIGAoc3lzdGVtIC4uLiknIGFjdGlvbnMgZXhlY3V0ZSB0aGVtIGRp
cmVjdGx5IGluc3RlYWQgb2YgbG9va2luZyB0aGVtDQogICAgdXAgaW4gYFBBVEgnIChbb2NhbWwv
ZHVuZSMxNTE1Nl0pLiBUaGlzIGlzIGEgYnJlYWtpbmcgY2hhbmdlIGZvcg0KICAgIGNvbmZpZ3Vy
YXRpb25zIHRoYXQgd2VyZSBoYW5kbGluZyBwYXRocyBuYWl2ZWx5LCBhbmQgbmVnbGVjdGVkIHRv
DQogICAgbm9ybWFsaXplIHRoZSByZXByZXNlbnRhdGlvbiBiZWZvcmUgdXNpbmcgaXQgdGVzdCBm
aXh0dXJlcyBvciBmb3INCiAgICBjb25zdHJ1Y3Rpbmcgb3RoZXIgc3RyaW5ncy4NCg0KICDigKIg
VGhlIGRlcHJlY2F0ZWQgYGxhbmcgY29xJyBoYXMgYmVlbiByZW1vdmVkLCBhcyBzY2hlZHVsZWQs
IHN1cGVyc2VkZWQNCiAgICBieSBgbGFuZyByb2NxJy4gU2VlIFtvY2FtbC9kdW5lIzEyNzg4XSBm
b3IgZGV0YWlscy4NCg0KICBTZWUgW3RoZSBmdWxsIGNoYW5nZWxvZ10gZm9yIGFsbCBuZXcgZmVh
dHVyZXMgYW5kIGZpeGVzLCBhbmQgZm9yDQogIGF0dHJpYnV0aW9uIHRvIHRoZSBjb250cmlidXRv
cnMgd2hvIG1hZGUgaXQgYWxsIHBvc3NpYmxlLiBUaGFuayB5b3UsDQogIGNvbnRyaWJ1dG9ycyEN
Cg0KICBJZiB5b3UgZW5jb3VudGVyIGEgcHJvYmxlbSB3aXRoIHRoaXMgcmVsZWFzZSwgcGxlYXNl
IHJlcG9ydCBpdCBpbiBbb3VyDQogIGlzc3VlIHRyYWNrZXJdLg0KDQoNClt0aGUgcmVsZWFzZSBv
ZiBkdW5lIDMuMjQuMF0NCjxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvZHVuZS9yZWxlYXNlcy90
YWcvMy4yNC4wPg0KDQpbb2NhbWwvZHVuZSMxNDM1N10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2Ft
bC9kdW5lL3B1bGwvMTQzNTc+DQoNCltAQWxpenRlcl0gPGh0dHBzOi8vZ2l0aHViLmNvbS9BbGl6
dGVyPg0KDQpbb2NhbWwvZHVuZSMxNDU3OV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9kdW5l
L3B1bGwvMTQ1Nzk+DQoNCltkb2N1bWVudGF0aW9uIG9uIGRpcmVjdG9yeSB0YXJnZXRzXQ0KPGh0
dHBzOi8vZHVuZS5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvcmVmZXJlbmNlL2R1bmUvcnVsZS5o
dG1sI2RpcmVjdG9yeS10YXJnZXRzPg0KDQpbb2NhbWwvZHVuZSMxNDI3OF0gPGh0dHBzOi8vZ2l0
aHViLmNvbS9vY2FtbC9kdW5lL3B1bGwvMTQyNzg+DQoNCltvY2FtbC9kdW5lIzE0NDMyXSA8aHR0
cHM6Ly9naXRodWIuY29tL29jYW1sL2R1bmUvcHVsbC8xNDQzMj4NCg0KW29jYW1sL2R1bmUjMTUx
NTZdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvZHVuZS9wdWxsLzE1MTU2Pg0KDQpbb2NhbWwv
ZHVuZSMxMjc4OF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9kdW5lL2lzc3Vlcy8xMjc4OD4N
Cg0KW3RoZSBmdWxsIGNoYW5nZWxvZ10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9kdW5lL3Jl
bGVhc2VzL3RhZy8zLjI0LjA+DQoNCltvdXIgaXNzdWUgdHJhY2tlcl0gPGh0dHBzOi8vZ2l0aHVi
LmNvbS9vY2FtbC9kdW5lL2lzc3Vlcz4NCg0KDQpPbGQgQ1dODQrilZDilZDilZDilZDilZDilZDi
lZANCg0KICBJZiB5b3UgaGFwcGVuIHRvIG1pc3MgYSBDV04sIHlvdSBjYW4gW3NlbmQgbWUgYSBt
ZXNzYWdlXSBhbmQgSSdsbCBtYWlsDQogIGl0IHRvIHlvdSwgb3IgZ28gdGFrZSBhIGxvb2sgYXQg
W3RoZSBhcmNoaXZlXSBvciB0aGUgW1JTUyBmZWVkIG9mIHRoZQ0KICBhcmNoaXZlc10uDQoNCiAg
SWYgeW91IGFsc28gd2lzaCB0byByZWNlaXZlIGl0IGV2ZXJ5IHdlZWsgYnkgbWFpbCwgeW91IG1h
eSBzdWJzY3JpYmUNCiAgdG8gdGhlIFtjYW1sLWxpc3RdLg0KDQogIFtBbGFuIFNjaG1pdHRdDQoN
Cg0KW3NlbmQgbWUgYSBtZXNzYWdlXSA8bWFpbHRvOmFsYW4uc2NobWl0dEBwb2x5dGVjaG5pcXVl
Lm9yZz4NCg0KW3RoZSBhcmNoaXZlXSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC9jd24v
Pg0KDQpbUlNTIGZlZWQgb2YgdGhlIGFyY2hpdmVzXSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1l
Lm5ldC9jd24vY3duLnJzcz4NCg0KW2NhbWwtbGlzdF0gPGh0dHBzOi8vc3ltcGEuaW5yaWEuZnIv
c3ltcGEvaW5mby9jYW1sLWxpc3Q+DQoNCltBbGFuIFNjaG1pdHRdIDxodHRwczovL2FsYW4ucGV0
aXRlcG9tbWUubmV0Lz4NCg0K
--==-=-=
Content-Type: text/html; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
<?xml version=3D"1.0" encoding=3D"utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=3D"http://www.w3.org/1999/xhtml" lang=3D"en" xml:lang=3D"en">
<head>
<!-- 2026-07-07 Tue 15:27 -->
<meta http-equiv=3D"Content-Type" content=3D"text/html;charset=3Dutf-8" />
<meta name=3D"viewport" content=3D"width=3Ddevice-width, initial-scale=3D1"=
/>
<title>OCaml Weekly News</title>
<meta name=3D"generator" content=3D"Org Mode" />
<style type=3D"text/css">
#content { max-width: 60em; margin: auto; }
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #e6e6e6;
border-radius: 3px;
background-color: #f2f2f2;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: auto;
}
pre.src:before {
display: none;
position: absolute;
top: -8px;
right: 12px;
padding: 3px;
color: #555;
background-color: #f2f2f299;
}
pre.src:hover:before { display: inline; margin-top: 14px;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-authinfo::before { content: 'Authinfo'; }
pre.src-c:before { content: 'C'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'JavaScript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr {
font-size: smaller;
@supports (content: attr(data-linenr)) {
visibility: hidden;
&::before { content: attr(data-linenr); visibility: visible; }
}
}
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { }
</style>
<style type=3D"text/css">#table-of-contents h2 { display: none } .title { d=
isplay: none } .authorname { text-align: right }</style>
<style type=3D"text/css">.outline-2 {border-top: 1px solid black;}</style>
</head>
<body>
<div id=3D"content" class=3D"content">
<h1 class=3D"title">OCaml Weekly News</h1>
<p>
<a href=3D"https://alan.petitepomme.net/cwn/2026.06.30.html">Previous Week<=
/a> <a href=3D"https://alan.petitepomme.net/cwn/index.html">Up</a> <a href=
=3D"https://alan.petitepomme.net/cwn/2026.07.14.html">Next Week</a>
</p>
<p>
Hello
</p>
<p>
Here is the latest OCaml Weekly News, for the week of June 30 to July 07, 2=
026.
</p>
<div id=3D"table-of-contents" role=3D"doc-toc">
<h2>Table of Contents</h2>
<div id=3D"text-table-of-contents" role=3D"doc-toc">
<ul>
<li><a href=3D"#1">opam-minver 0.2.0 - automatically determine minimum depe=
ndency versions</a></li>
<li><a href=3D"#2">Zanuda – OCaml linter experiment</a></li>
<li><a href=3D"#3">rpgm-decrypt =E2=80=94 a formally-verified RPG Maker ass=
et decryptor in OCaml</a></li>
<li><a href=3D"#4">menhirformat 0.1.0</a></li>
<li><a href=3D"#5">Solo5 0.12.0</a></li>
<li><a href=3D"#6">Landmarks 1.7</a></li>
<li><a href=3D"#7">Why Ocsigen is staying on Lwt (for now)</a></li>
<li><a href=3D"#8">Dune 3.24</a></li>
<li><a href=3D"#orged0410c">Old CWN</a></li>
</ul>
</div>
</div>
<div id=3D"outline-container-1" class=3D"outline-2">
<h2 id=3D"1">opam-minver 0.2.0 - automatically determine minimum dependency=
versions</h2>
<div class=3D"outline-text-2" id=3D"text-1">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-opam-minver-0-2-0-autom=
atically-determine-minimum-dependency-versions/18328/1">https://discuss.oca=
ml.org/t/ann-opam-minver-0-2-0-automatically-determine-minimum-dependency-v=
ersions/18328/1</a>
</p>
</div>
<div id=3D"outline-container-org9263ae3" class=3D"outline-3">
<h3 id=3D"org9263ae3">onetimerobot announced</h3>
<div class=3D"outline-text-3" id=3D"text-org9263ae3">
<p>
I have published opam-minver 0.2.0 (previous versions were not released to =
the public). What it does is use a binary search to find the minimum passin=
g versions of a project's dependencies listed in its opam file and optional=
ly writes them out to the opam file in-place. I wrote this because I was wo=
rking on another project (not yet published) and got to the point of listin=
g all the dependencies, and realizing I had no idea what versions it was co=
mpatible with. This tool finds that out automatically.
</p>
<p>
It's pretty well polished at this point, and it has a cmdliner interface, s=
tores its state in a json file so sessions can be resumed if need be, and i=
t also finds the minimum compiler versions and handles split OCaml compiler=
bounds if, for example, a project doesn't work specifically with early OCa=
ml 5 versions. This could be used not only for new projects, but also to re=
lax version bounds on any project where they haven't been determined precis=
ely.
</p>
<p>
Homepage and readme is here: <a href=3D"https://github.com/luminous-moose/o=
pam-minver">https://github.com/luminous-moose/opam-minver</a>
</p>
</div>
</div>
</div>
<div id=3D"outline-container-2" class=3D"outline-2">
<h2 id=3D"2">Zanuda – OCaml linter experiment</h2>
<div class=3D"outline-text-2" id=3D"text-2">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-zanuda-ocaml-linter-exp=
eriment/11784/14">https://discuss.ocaml.org/t/ann-zanuda-ocaml-linter-exper=
iment/11784/14</a>
</p>
</div>
<div id=3D"outline-container-orgc705c54" class=3D"outline-3">
<h3 id=3D"orgc705c54">Continuing this thread, Kakadu announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgc705c54">
<p>
Zanuda 2.1.0 is merged into opam-repository
</p>
<ul class=3D"org-ul">
<li>OCaml 5.5 support</li>
<li>Lints could be disabled via <code>[@@@zanuda "-name"]</code></li>
<li>Lints represented as ocamlfind packages could be loaded at runtime and =
defined outside zanuda codebase. This modularity for now is experimental=
.</li>
</ul>
</div>
</div>
</div>
<div id=3D"outline-container-3" class=3D"outline-2">
<h2 id=3D"3">rpgm-decrypt =E2=80=94 a formally-verified RPG Maker asset dec=
ryptor in OCaml</h2>
<div class=3D"outline-text-2" id=3D"text-3">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-rpgm-decrypt-a-formally=
-verified-rpg-maker-asset-decryptor-in-ocaml/18324/1">https://discuss.ocaml=
.org/t/ann-rpgm-decrypt-a-formally-verified-rpg-maker-asset-decryptor-in-oc=
aml/18324/1</a>
</p>
</div>
<div id=3D"outline-container-org84996b9" class=3D"outline-3">
<h3 id=3D"org84996b9">LulLaS announced</h3>
<div class=3D"outline-text-3" id=3D"text-org84996b9">
<p>
Hi everyone))) :slightly_smiling_face:=20
</p>
<p>
I'd like to share <b>rpgm-decrypt</b>, a small command-line tool that decry=
pts and
extracts RPG Maker asset archives (XP / VX / VX Ace via <code>.rgssad</code=
> / <code>.rgss2a</code> / <code>.rgss3a</code>,
and MV / MZ via the XOR-encrypted assets and <code>.pak</code> archives).
</p>
<p>
It started as a clean-room reimplementation and ended up as an excuse to pu=
sh
OCaml's correctness tooling as far as I could on a real project:
</p>
<ul class=3D"org-ul">
<li><b>Gospel</b> specifications on the pure core (<code>(*@ ... *)</code> =
in the ~.mli~s)</li>
<li><b>Why3 + Z3</b> deductive proofs of the key derivation, little-endian =
reads and a
Zip-Slip path-safety invariant (23/23 goals discharged)</li>
<li><b>QCheck</b> property tests (round-trip / invariants) alongside the un=
it suite</li>
<li>Coverage-guided <b>afl-fuzz</b> of the parsers in CI (0 crashes)</li>
<li><b>bisect_ppx</b> coverage + a small directed mutation-testing pass</li>
<li>Ships as a single static binary via <code>dune --profile static</code>;=
the only external
dep is <code>camlzip</code> (zlib) for the MZ <code>.pak</code> path</li>
</ul>
<p>
Build/test runs on the native Windows OCaml switch as well as Linux.
Licensed Apache-2.0.
</p>
<p>
Example run:
</p>
<pre class=3D"example" id=3D"orga996882">
$ rpgm-decrypt "MyGame" out
scanned=3D1817 decrypted=3D1685 passthrough=3D132 skipped=3D0 failed=3D0 fo=
rmats=3D[MV=3D1817]
</pre>
<p>
Repo, docs and prebuilt Windows/Linux binaries:
</p>
<p>
<a href=3D"https://github.com/rolanfreeman6-png/rpgm-decrypt">https://githu=
b.com/rolanfreeman6-png/rpgm-decrypt</a>
</p>
<p>
Feedback on the spec/proof setup especially welcome =E2=80=94 it's my first=
serious go at
Gospel + Why3, so I'd love to hear how others structure that on real code.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-4" class=3D"outline-2">
<h2 id=3D"4">menhirformat 0.1.0</h2>
<div class=3D"outline-text-2" id=3D"text-4">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-menhirformat-0-1-0/1832=
2/1">https://discuss.ocaml.org/t/ann-menhirformat-0-1-0/18322/1</a>
</p>
</div>
<div id=3D"outline-container-org3629651" class=3D"outline-3">
<h3 id=3D"org3629651">Federico announced</h3>
<div class=3D"outline-text-3" id=3D"text-org3629651">
<p>
Hello,
</p>
<p>
I'm glad to announce the first release of <code>menhirformat</code>, a comm=
and line tool that formats and indents Menhir and ocamllex source code. It =
uses the <a href=3D"https://ocaml.org/p/ocamlformat-rpc-lib/latest">ocamlfo=
rmat RPC</a> to pretty-print the OCaml sections of your lexers and parsers;=
it also tries its best to preserve the original location of your comments =
(still needs work in regard to this though!).
</p>
<p>
This is a satellite project of my ongoing and considerably larger effort to=
add LSP support to these two OCaml dialects, <a href=3D"https://github.com=
/dalps/menhir-lsp"><code>menhir-lsp</code></a>. The formatting functionalit=
y was originally embedded into the LSP server to handle document formatting=
requests, and I split it out as a standalone application after <a href=3D"=
https://github.com/dalps/menhir-lsp/issues/25">this issue</a>.
</p>
<p>
You can try it out with <code>opam install menhirformat</code>. The CLI is =
highly inspired by ocamlformat's and takes the file to format as argument, =
e.g. <code>menhirformat calc.mly</code>. It exposes a small configuration b=
y which your can tweak the formatter's behavior; read on the available opti=
ons with <code>menhirformat --help</code>.
</p>
<p>
You may also integrate it in your dune project by setting up <a href=3D"htt=
ps://dune.readthedocs.io/en/latest/reference/dune-project/dialect.html#dial=
ect">dialects</a> for Menhir and ocamllex:
</p>
<pre class=3D"example" id=3D"orgba8f756">
(dialect
(name menhir)
(implementation
(extension mly)
(format
(run menhirformat %{input-file}))))
(dialect
(name ocamllex)
(implementation
(extension mll)
(format
(run menhirformat %{input-file}))))
</pre>
<p>
Then running <code>dune build @fmt</code> will format your project's .mll a=
nd .mly files and display a diff.
</p>
<p>
As someone who can't live without format-on-save in their IDE, I was really=
missing a formatter for Menhir and ocamllex files in the OCaml ecosystem. =
I hope <code>menhirformat</code> fills that void.
</p>
<p>
I'm interested in opinions about the quality of the output and also in sugg=
estions for other customization points of the configuration. Please share b=
elow or through a GitHub issue!
</p>
<ul class=3D"org-ul">
<li>opam page: <a href=3D"https://ocaml.org/p/menhirformat/latest">https://=
ocaml.org/p/menhirformat/latest</a></li>
<li>Source code: <a href=3D"https://github.com/dalps/menhir-lsp/tree/main/p=
rettyprint">https://github.com/dalps/menhir-lsp/tree/main/prettyprint</a></=
li>
</ul>
<p>
Enjoy!
</p>
</div>
</div>
</div>
<div id=3D"outline-container-5" class=3D"outline-2">
<h2 id=3D"5">Solo5 0.12.0</h2>
<div class=3D"outline-text-2" id=3D"text-5">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-solo5-0-12-0/18320/1">h=
ttps://discuss.ocaml.org/t/ann-solo5-0-12-0/18320/1</a>
</p>
</div>
<div id=3D"outline-container-orgb9a1dbd" class=3D"outline-3">
<h3 id=3D"orgb9a1dbd">Hannes Mehnert announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgb9a1dbd">
<p>
We are delighted to announce the release of <a href=3D"https://github.com/S=
olo5/solo5/releases/tag/v0.12.0">Solo5 0.12.0</a>. This has two distinct fe=
atures: a new hvt <a href=3D"https://github.com/Solo5/solo5/pull/640">backe=
nd for DragonFlyBSD nvmm</a>, thanks to first-time contributor Michael Neum=
ann, and <a href=3D"https://github.com/Solo5/solo5/pull/647">soft power-off=
of virtio unikernels</a> - a <a href=3D"https://github.com/Solo5/solo5/iss=
ues/499">long-standing feature request</a>, which makes using solo5 e.g. on=
Google compute much smoother – this was initially requested by Micha=
el Bacarella, including draft implementations, and <a href=3D"https://githu=
b.com/Solo5/solo5/pull/647">now implemented</a> and merged by Romain Calasc=
ibetta.
</p>
<p>
Other noteworthy fixes include that <code>configure.sh</code> <a href=3D"ht=
tps://github.com/Solo5/solo5/pull/645">now checks for the C compiler versio=
n</a> to be at least GCC in version 9 or clang in version 10. The <code>sol=
o5-hvt-debug</code> crashed since too strict seccomp rules were applied (si=
nce solo5 0.11.0) - thanks to Felix Solcher for opening the <a href=3D"http=
s://github.com/Solo5/solo5/issues/643">issue</a>, and again Romain Calascib=
etta for the <a href=3D"https://github.com/Solo5/solo5/pull/644">fix</a>.
</p>
<p>
Awaiting opam-repository merge at <a href=3D"https://github.com/ocaml/opam-=
repository/pull/30182">https://github.com/ocaml/opam-repository/pull/30182<=
/a>
</p>
</div>
</div>
</div>
<div id=3D"outline-container-6" class=3D"outline-2">
<h2 id=3D"6">Landmarks 1.7</h2>
<div class=3D"outline-text-2" id=3D"text-6">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-landmarks-1-7/18319/1">=
https://discuss.ocaml.org/t/ann-landmarks-1-7/18319/1</a>
</p>
</div>
<div id=3D"outline-container-orgf753b14" class=3D"outline-3">
<h3 id=3D"orgf753b14">Nicolas Ojeda Bar announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgf753b14">
<p>
Dear community,
</p>
<p>
We are pleased to announce a new release of <i>Landmarks</i>, a simple runt=
ime profiler for OCaml.=20
</p>
<p>
<a href=3D"https://github.com/LexiFi/landmarks/releases/tag/v1.7">https://g=
ithub.com/LexiFi/landmarks/releases/tag/v1.7</a>
</p>
<p>
The main novelty in this release is the possibility of defining custom back=
ends to generate reports that can be consumed by external viewers. An examp=
le backend that produces <a href=3D"https://www.speedscope.app/">https://ww=
w.speedscope.app/</a> reports is included in a new library <code>landmarks-=
speedscope</code>. Custom backends can be defined in external libraries wit=
hout needing to modify <code>landmarks</code> itself. This support was adde=
d by @mjambon.
</p>
<p>
Happy profiling!
</p>
<p>
Cheers,
Nicolas
</p>
</div>
</div>
</div>
<div id=3D"outline-container-7" class=3D"outline-2">
<h2 id=3D"7">Why Ocsigen is staying on Lwt (for now)</h2>
<div class=3D"outline-text-2" id=3D"text-7">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/why-ocsigen-is-staying-on-l=
wt-for-now/18318/1">https://discuss.ocaml.org/t/why-ocsigen-is-staying-on-l=
wt-for-now/18318/1</a>
</p>
</div>
<div id=3D"outline-container-org12d8f4b" class=3D"outline-3">
<h3 id=3D"org12d8f4b">Vincent Balat announced</h3>
<div class=3D"outline-text-3" id=3D"text-org12d8f4b">
<p>
Over 2025 we migrated the whole Ocsigen stack (ocsigenserver, Eliom, ocsige=
n-toolkit, ocsigen-start) from Lwt to Eio. The migration compiles and the t=
est suite passes. We have nonetheless decided <b><b>not to release it and t=
o stay on Lwt for now</b></b>, and we wrote up why.
</p>
<p>
Two obstacles stopped us:
</p>
<ul class=3D"org-ul">
<li><b>Loss of function coloring.</b> Under Lwt, a <code>_ Lwt.t</code> in =
a type tells you a call may suspend or do I/O. In a multi-tier framework li=
ke Eliom this is crucial: the <b>same</b> shared expression can be a local =
call on the server and a network round-trip on the client. Without coloring=
, nothing at the call site tells you where to put a spinner, and reactive c=
ombinators (<code>React</code> / <code>map_s</code>) silently lose the guar=
antee that they are pure.</li>
<li><b>Eio's handler model vs browser events.</b> On the client, DOM event =
handlers are called directly by the browser with no Eio handler on the stac=
k, so any <code>perform</code> crashes. The usual workaround (<code>Eio_js.=
start</code>) defers the body via <code>setTimeout(0)</code>, which runs af=
ter event propagation and breaks <code>preventDefault</code> / <code>stopPr=
opagation</code>.</li>
</ul>
<p>
This is <b>not</b> an anti-Eio post. Effects are a major achievement of OCa=
ml 5 and we are grateful to the multicore team. We also think the monadic s=
tyle is genuinely fine (with <code>let*</code> it is comfortable to write),=
and <code>Lwt_direct</code> is there for those who dislike monads.
</p>
<p>
Our broader worry is ecosystem unity: very large Lwt codebases exist, under=
funded projects cannot afford such a migration, and a split would hurt a co=
mmunity that is already small. To help, we released <a href=3D"https://gith=
ub.com/tarides/ciao-lwt"><code>ciao-lwt</code></a> (Lwt-to-Eio migration to=
ols), funded by NLnet through NGI Zero Core and Tarides. We would love the =
effects community's view on directions that could unblock us, including imp=
roving Lwt itself (io_uring, effects, multicore).
</p>
<p>
Full write-up: <a href=3D"https://ocsigen.org/blog/posts/why-ocsigen-stays-=
on-lwt-for-now.html">https://ocsigen.org/blog/posts/why-ocsigen-stays-on-lw=
t-for-now.html</a>
</p>
<p>
Feedback, ideas and constructive disagreement very welcome.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-8" class=3D"outline-2">
<h2 id=3D"8">Dune 3.24</h2>
<div class=3D"outline-text-2" id=3D"text-8">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-dune-3-24/18316/1">http=
s://discuss.ocaml.org/t/ann-dune-3-24/18316/1</a>
</p>
</div>
<div id=3D"outline-container-org4a626bd" class=3D"outline-3">
<h3 id=3D"org4a626bd">Shon announced</h3>
<div class=3D"outline-text-3" id=3D"text-org4a626bd">
<p>
The Dune team is pleased to announce <a href=3D"https://github.com/ocaml/du=
ne/releases/tag/3.24.0">the release of dune 3.24.0</a>.
</p>
<p>
Highlights include the following
</p>
<ul class=3D"org-ul">
<li>Dune package management now uses the relocatable compiler by default, f=
or all supported compiler versions. This brings a massive speedup to worksp=
ace setup in the many cases where built compiler versions can be reused. (<=
a href=3D"https://github.com/ocaml/dune/pull/14357">ocaml/dune#14357</a>, <=
a href=3D"https://github.com/Alizter">@Alizter</a>)</li>
<li>Directory targets are now generally available (<a href=3D"https://githu=
b.com/ocaml/dune/pull/14579">ocaml/dune#14579</a>), allowing tools to produ=
ce entire directory trees as targets. See the <a href=3D"https://dune.readt=
hedocs.io/en/stable/reference/dune/rule.html#directory-targets">documentati=
on on directory targets</a> for details.</li>
<li>Path handling has been refined, improving the consistency of paths acro=
ss platforms (<a href=3D"https://github.com/ocaml/dune/pull/14278">ocaml/du=
ne#14278</a> and <a href=3D"https://github.com/ocaml/dune/pull/14278">ocaml=
/dune#14278</a>) and using a more consistent and disciplined location for <=
code>%{bin:NAME}</code> variable expansions (<a href=3D"https://github.com/=
ocaml/dune/pull/14432">ocaml/dune#14432</a>).</li>
<li>Path-valued percent forms (<code>%{bin:...}</code>, <code>%{dep:...}</c=
ode>, <code>%{path:...}</code>, and friends) now expand same-directory path=
s with a leading <code>./</code>, so that shells like <code>bash</code> in =
<code>(bash ...)</code> and <code>(system ...)</code> actions execute them =
directly instead of looking them up in <code>PATH</code> (<a href=3D"https:=
//github.com/ocaml/dune/pull/15156">ocaml/dune#15156</a>). This is a breaki=
ng change for configurations that were handling paths naively, and neglecte=
d to normalize the representation before using it test fixtures or for cons=
tructing other strings.</li>
<li>The deprecated <code>lang coq</code> has been removed, as scheduled, su=
perseded by <code>lang rocq</code>. See <a href=3D"https://github.com/ocaml=
/dune/issues/12788">ocaml/dune#12788</a> for details.</li>
</ul>
<p>
See <a href=3D"https://github.com/ocaml/dune/releases/tag/3.24.0">the full =
changelog</a> for all new features and fixes, and for attribution to the co=
ntributors who made it all possible. Thank you, contributors!
</p>
<p>
If you encounter a problem with this release, please report it in <a href=
=3D"https://github.com/ocaml/dune/issues">our issue tracker</a>.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-orged0410c" class=3D"outline-2">
<h2 id=3D"orged0410c">Old CWN</h2>
<div class=3D"outline-text-2" id=3D"text-orged0410c">
<p>
If you happen to miss a CWN, you can <a href=3D"mailto:alan.schmitt@polytec=
hnique.org">send me a message</a> and I'll mail it to you, or go take a loo=
k at <a href=3D"https://alan.petitepomme.net/cwn/">the archive</a> or the <=
a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive=
s</a>.
</p>
<p>
If you also wish to receive it every week by mail, you may subscribe to the=
<a href=3D"https://sympa.inria.fr/sympa/info/caml-list">caml-list</a>.
</p>
<div class=3D"authorname" id=3D"org4f11ac6">
<p>
<a href=3D"https://alan.petitepomme.net/">Alan Schmitt</a>
</p>
</div>
</div>
</div>
</div>
</body>
</html>
--==-=-=--
--=-=-=--
--===-=-=
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQFvBAEBCABZFiEE6lXof/BsSVW56ZmGBA0KO07S5ccFAmpM/xwbFIAAAAAABAAO
bWFudTIsMi41KzEuMTIsMCwzHxxhbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5v
cmcACgkQBA0KO07S5cdwJQgAob2AhSOJb6+bUXJkyxJGbcl2h97t9HC64M7kGMeR
M5s893/tlaztXGHO94b1h8KFY9w6O0oRvDEI//CDcsd/JzjPdA2i3VfwqzmRfek6
vLqgYGgrgLPb5p6EBS5x4RRVGT4UvILQYVICMUwcI2CWwQFe2cpypuAklzrWdrMU
6h0N1aHM4zISXbHYAM0QNFXql3MTQ+64X1+a/eseM4OO2VwN0MfO3eWwYST69JFP
mkYfrTWdyXq0sa3A7Mfjo36mMoPom/yJl+0SJwKHnG+wVVzLetAhVloIXFWzza5h
5qpevXD6K59OVer51D1tlsaUP65q0jk5mJYZ2Z728XmllA==
=Ijgt
-----END PGP SIGNATURE-----
--===-=-=--