From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Authentication-Results: plum.tunbury.org; dkim=pass (1024-bit key; unprotected) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=PnWUdBHL; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=polytechnique.org header.i=@polytechnique.org header.a=rsa-sha256 header.s=svoboda header.b=Pk1CMJN+; dkim-atps=neutral Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.134.164.83; helo=mail2-relais-roc.national.inria.fr; envelope-from=caml-list-owner@inria.fr; receiver=tunbury.org Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by plum.tunbury.org (Postfix) with ESMTPS id C011D40065 for ; Tue, 4 Mar 2025 14:01:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:to:date:message-id:mime-version:subject:reply-to: sender:list-id:list-help:list-subscribe:list-unsubscribe: list-post:list-owner:list-archive; bh=s8Vorf3sYMKdCBRvI+M06KjT7jFLoaXVxbdd5fChIPY=; b=PnWUdBHLQmnltCvW9Rj0I/riF4wQhXPRBkV+vAsPmR5JSJMROi3ABfsE IbjKxos8BjlIK242xcuneKn5bmWDkmyARguuOkvemS1/URLdou/v2ley2 cgb4VII3KikBrcBLywI8Stbpo27BcCQIUirc0ynhf2O7i2BV9dI31Y6bi Q=; Received-SPF: Pass (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr designates 128.93.162.160 as permitted sender) identity=mailfrom; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 include:mailout.safebrands.com a:basic-mail.safebrands.com a:basic-mail01.safebrands.com a:basic-mail02.safebrands.com ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:128.93.162.3 ip4:128.93.162.88 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@sympa.inria.fr) identity=helo; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@sympa.inria.fr"; x-conformance=spf_only Authentication-Results: mail2-relais-roc.national.inria.fr; spf=Pass smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr; dkim=hardfail (signature did not verify [final]) header.i=@polytechnique.org X-IronPort-AV: E=Sophos;i="6.14,220,1736809200"; d="scan'208,217";a="211132660" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 04 Mar 2025 15:01:53 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id 53A7CE0264; Tue, 4 Mar 2025 15:01:52 +0100 (CET) Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 0397DE0260 for ; Tue, 4 Mar 2025 15:01:48 +0100 (CET) IronPort-SDR: 67c707c9_g5/UfcTaVFrvPbIp8KcGE1OG9VH8+CLUZFwdmqwwR+fe96b JZM4muyzCQmUMQSVTskP97FvElG//my0+zjbOpA== X-IPAS-Result: =?us-ascii?q?A0HLegDNBsdndyIeaIFaglwCgT9bKBkBY1ozBwhIA4RTg?= =?us-ascii?q?WOBbIUtiHSRSoI8gQmFA4EfgRCBVhSBEQMYFgUeFAEDAQ0uAQUNAQIEAQEDA?= =?us-ascii?q?QIBggyBPXFABAICFop/Ah8GAQQwCQ4BAgQBAQEBAwIDAQEBAQEBEAEBBQEBA?= =?us-ascii?q?QIBAQIEBgECEAFDSYV7DUkBAQEBAgEGBIFrUUEwYQQDBgYBAQEBAQEBAQEnA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIMA?= =?us-ascii?q?SkKD1oCAQIGBAYTAQE4GCMDCQcEAQYDAgQNATUDARMBEhqCEFmCH0UDBQwGP?= =?us-ascii?q?5IMmzsQen8zgQGCDAEBBoEIPgIBAgkCAgMBDgklAdoHgWUJgTAYhWyCSRoBB?= =?us-ascii?q?SVIagKESAmEMycPgVVEgRWCeW+BQn0LFwEBAQEYfw0YAQEICTwJCYMcgmmCH?= =?us-ascii?q?BeBCDOBWCpegQyBbIRPEk8FgTx4gReBNh0cIwpGgQ4WIRoIeCyBVoJ4OwQSV?= =?us-ascii?q?x0SPYJKV4J1gQ4oS4kKgUciAyYzLAFVExcLBwVhgRADKjQxgUZ6OYIMaUk6A?= =?us-ascii?q?g0CNYIeJFiCK4MUgTqEPYRAhVSCEYIIiS6EbB1AAwttPTcUG6E/CTc1ATqDR?= =?us-ascii?q?QQHJA4KARQfAQEVGwwcBwECGAkFAwIBCgkIDgEBCQQTAi4IDgsKFgcDGB4JC?= =?us-ascii?q?gQVBgECDRkGCwEEAQUCKwKNDIU2JBUDgSGwPIEKNAeEHoFdBgyJBYEki2OCS?= =?us-ascii?q?4dPhAOBV4sxhwCSSyKYWyKCNoYZgQ0KgRsJYIEPapVVEyaFHoFRFjo8bwEBG?= =?us-ascii?q?gIMBzMaMEMNBhSCDAEBATEJCjwcD41/KwMWgQwBB4FmXkF9gRsGBYF0O1GCH?= =?us-ascii?q?MA4MUI1AgEBBAMIKQIHAQoBAQMJhUUdAQGBToE2gheEay0FamEBAQ?= IronPort-PHdr: A9a23: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 MybspjThXraEImWtReKAnfSKg== IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:gRfOJaMDoFPxJsBcTvyjsMiBIKoaSvp037BL7TETdfUxSKalfq +V8sjzuSWYtN9zYhEdcLK7WZVoKEm0nfVICOIqUotKMjOLhEKYaKlcqaHizzfjFyCWzJ8+6Y 5QN45kBpnVBVh+5PyKhDVQ/uxQpeW6zA== X-Talos-CUID: 9a23:yDwDgW7zqe/Ftqr6rdss1xQtA9IsQ0Lm3Fz2Ax+hOF9YWr6sRgrF X-Talos-MUID: =?us-ascii?q?9a23=3AX88vxg8eIZ/0+tLbi5zmRVOQf9VZ54+CFEkOrYt?= =?us-ascii?q?cifOqJzwzFjaF3TviFw=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-URL-LookUp-ScanningError: 1 X-IronPort-AV: E=Sophos;i="6.14,220,1736809200"; d="scan'208,217";a="110627070" X-MGA-submission: =?us-ascii?q?MDGKUJ/0+Z0klooifQ+i0Ts+4yMwS7fSNl+NKu?= =?us-ascii?q?bnCnoJ1iseGkYGtIUf8MliwaeTKvcfN220sj3yvcyFrfEW5I1pruUmaH?= =?us-ascii?q?EQDN4/qbxIgPeYICTpeFxunRlCQnQ/ZEr/Mv6IQT/75K4pveZBWezrAs?= =?us-ascii?q?EbZYWMvX73bDyHz4QtAbJ9Sg=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Mar 2025 15:01:45 +0100 Received: from TM.local (mac-03220211.irisa.fr [131.254.21.249]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id D6357564C57; Tue, 4 Mar 2025 15:01:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1741096903; bh=GxS3phYrnxN0Dt0bFRUK/vZZMopR184KVYYtvQ/NK2g=; h=From:To:Subject:Date:Message-ID; b=Pk1CMJN+VLam3XodVD+nqEWJZZFg9dv5rBr5mgdAfkJ1sU0cQrKyxFTfbMtQwyNRY SXtsVir+pBXik7sEC6YXl+/G8o3QDpWYXg+TLtO4LHYq3+2fQ0dYq3iwSKqJ18bsKK KTtHcBqFoDRwzXcU7xrapA8jqe/GIDv0FsTNaTmM= From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 04 Mar 2025 15:01:43 +0100 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Mar 4 15:01:44 2025 +0100 (CET)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.469386, queueID=28305564C59 X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 19277 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgRmVicnVhcnkgMjUgdG8NCk1hcmNoIDA0LCAyMDI1Lg0KDQpUYWJsZSBvZiBDb250ZW50 cw0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoN CkJ5dGVjb2RlIGRlYnVnZ2luZyBpbiBPQ2FtbCA1LjMNClphbnVkYSDigJMgT0NhbWwgbGludGVy IGV4cGVyaW1lbnQNClFDaGVjayAwLjI0DQpCb2d1ZSwgdGhlIE9DYW1sIEdVSQ0KT3BhbSByZXBv c2l0b3J5IGFyY2hpdmFsIC0gbmV4dCBwaGFzZQ0KVXBjb21pbmcgQ21kbGluZXIgMi4wIGNoYW5n ZXMgdGhhdCBuZWVkIHlvdXIgYXR0ZW50aW9uDQpPQ2FtbCBFZGl0b3JzIFBsdWdpbnMgU3VydmV5 DQpEdW5lIGRldiBtZWV0aW5nDQpQbGF0Zm9ybSBOZXdzbGV0dGVyOiBTZXB0ZW1iZXIgLSBEZWNl bWJlciAyMDI0DQpPdGhlciBPQ2FtbCBOZXdzDQpPbGQgQ1dODQoNCg0KQnl0ZWNvZGUgZGVidWdn aW5nIGluIE9DYW1sIDUuMw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoN CiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9ieXRlY29kZS1kZWJ1 Z2dpbmctaW4tb2NhbWwtNS0zLzE2MTc3Lzc+DQoNCg0KQ29udGludWluZyB0aGlzIHRocmVhZCwg SGVucnkgVGlsbCBzYWlkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIANCg0KICBQcm9iYWJseSB3b3J0aCBzaGFyaW5nIGhlcmU6DQog IOKAoiBbZ2RiLnB5XQ0KICDigKIgW2dkYl9vY2FtbHJ1bi5weV0NCiAg4oCiIFtsbGRiLnB5XQ0K ICDigKIgW0dldHRpbmcgU3RhcnRlZCB3aXRoIEdEQiBvbiBPQ2FtbF0NCg0KDQpbZ2RiLnB5XQ0K PGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9ibG9iL2YwOGU4YTFhZDQ4MDEzZGJkZWZj MGU1NDE1YzJiZjQ4YTY4ODFkZTgvdG9vbHMvZ2RiLnB5Pg0KDQpbZ2RiX29jYW1scnVuLnB5XQ0K PGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9ibG9iL2YwOGU4YTFhZDQ4MDEzZGJkZWZj MGU1NDE1YzJiZjQ4YTY4ODFkZTgvdG9vbHMvZ2RiX29jYW1scnVuLnB5Pg0KDQpbbGxkYi5weV0N CjxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwvYmxvYi9mMDhlOGExYWQ0ODAxM2RiZGVm YzBlNTQxNWMyYmY0OGE2ODgxZGU4L3Rvb2xzL2xsZGIucHk+DQoNCltHZXR0aW5nIFN0YXJ0ZWQg d2l0aCBHREIgb24gT0NhbWxdDQo8aHR0cHM6Ly9rY3Nyay5pbmZvL29jYW1sL2dkYi8yMDI0LzAx LzIwL2dkYi1vY2FtbC8+DQoNCg0KQ2hldCBNdXJ0aHkgYWxzbyBzYWlkDQrilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBG b3IgdGhvc2Ugd2hvIChsaWtlIG1lKSBoYXZlIGFsd2F5cyBiZWVuIHBlcnBsZXhlZCB3aGVuIHRo ZXkgdHJ5IHRvDQogIHVzZSBvY2FtbGRlYnVnLCBiL2MgaXQganVzdCBkb2Vzbid0IHNlZW0gdG8g d29yayBsaWtlIGdkYiBvciBwZXJsJ3MNCiAgZGVidWdnZXIsIG9yIGFueSBvdGhlciBkZWJ1Z2dl ciBJJ3ZlIHRyaWVkLCB0aGlzIHZpZGVvIHdhcyBpbW1lbnNlbHkNCiAgaGVscGZ1bC4NCg0KICA8 aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1ER3ZKazE0c2ZpOCZ0PTcyNHM+DQoNCiAg U3BlY2lmaWNhbGx5LCBJIGxlYXJuZWQgdGhhdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcm9n cmFtLCB0byBzZXQgYQ0KICBicmVha3BvaW50IGluIHRoZSBtYWluIHByb2dyYW0gZmlsZSwgSSBu ZWVkIHRvIGRvIHNvbWV0aGluZyBsaWtlIChmb3INCiAgYSBmaWxlICJleHRyYWN0X2Vudmlyb25t ZW50cy5tbCIsIGFuZCBsaW5lIDc5KToNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBicmVhayBA ZXh0cmFjdF9lbnZpcm9ubWVudHMgNzkNCiAg4pSU4pSA4pSA4pSA4pSADQogIFRoYXQgd2FzIGJs b2NraW5nIG1lIEZPUkVWRVIsIGIvYyBob2x5IGNvdyB0aGVyZSdzIGEgdG9uIG9mDQogIGluaXRp YWxpemF0aW9uLCBhbmQgSSBqdXN0IGRpZG4ndCBrbm93IGhvdyB0byBydW4gdGhydSBhbGwgdGhh dCBhbmQNCiAgZ2V0IHRvIHRoZSBmaXJzdCBtZWFuaW5nZnVsIGxpbmUgb2YgbXkgbWFpbiBwcm9n cmFtLg0KDQogIE5vdyBJIGRvLiAgSSBjYW4gbW92ZSBmb3J3YXJkIGZyb20gaGVyZSB3aXRoIG9j YW1sZGVidWcuICBGaW5hbGx5IQ0KDQoNClphbnVkYSDigJMgT0NhbWwgbGludGVyIGV4cGVyaW1l bnQNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6 DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLXphbnVkYS1vY2FtbC1saW50ZXIt ZXhwZXJpbWVudC8xMTc4NC8yPg0KDQoNCktha2FkdSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEknbSB1c2luZyB0aGlzIGxp bnRlciBmb3IgdGVhY2hpbmcgZm9yIHR3byB5ZWFycywgYW5kIEknbSB2ZXJ5IGhhcHB5DQogIHRo YXQgSSBpbXBsZW1lbnRlZCBpdC4gU3R1ZGVudCdzIGNvZGUgaXMgbXVjaCBsZXNzIGFubm95aW5n IHRvIHJlYWQNCiAgOnNsaWdodF9zbWlsZToNCg0KDQpSZWxlYXNlIDEuMS4wDQrilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICDigKIgIzIyOiBBZGQgJ3Jldmlld2Vy JyB0b29sIHRvIHJlcG9ydCBsaW50J3MgYSBHaXRodWIgcmV2aWV3Lg0KICDigKIgIzEzOiBEaXNj b3VyYWdlIG1hdGNoaW5nIGEgdHVwbGUgdXNpbmcgJ21hdGNoJyBleHByZXNzaW9uIHdpdGgNCiAg ICAgc2luZ2xlIGJyYW5jaA0KICAgIOKUjOKUgOKUgOKUgOKUgA0KICAgIOKUgiBtYXRjaCB4IHdp dGggKGEsYikgLT4gLi4uDQogICAg4pSU4pSA4pSA4pSA4pSADQogIOKAoiAjMTg6IFdhcm4gYWJv dXQgdW5uZWVkZWQgbXV0dWFsbHkgcmVjdXJzaXZlIHR5cGVzDQogIOKAoiAjMjM6IEltcGxlbWVu dCBhIHRyaWFsIHZlcnNpb24gb2YgdGhlIEZpeCBtb2R1bGUgZm9yIGF1dG8tY29ycmVjdGlvbg0K ICAgIG9mIGxpbnRzLiAgSXQgcHJvZHVjZXMgYSBkaWZmIHRoYXQgY291bGQgYmUgYXBwbGllZCBs YXRlci4gRHVuZQ0KICAgIHN1cHBvcnQgaXMgbGFja2luZw0KICDigKIgQWRkIGNvbW1hbmQgbGlu ZSBzd2l0Y2ggJy1za2lwLWxldmVsLWFsbG93IDxib29sPicgdG8gZW5hYmxlL2Rpc2FibGUNCiAg ICBsaW50cyB3aXRoIGxldmVsPUFsbG93LiBGYWxzZSBoYXMgaGlnaGVyIHByaW9yaXR5IHRoYW4g cGVyLWxpbnQNCiAgICBjb21tYW5kIGxpbmUgc3dpdGNoIChmb3IgZXhhbXBsZSwgYC1uby1zdHJp bmdfY29uY2F0JykNCiAg4oCiICMyODogV2FybiBhYm91dCB0b28gbWFueSBuZXN0ZWQgYGlmJyBl eHByZXNzaW9ucy4NCiAg4oCiICMzMjogV2FybiBhYm91dCBjb25zdHJ1Y3RvciBuYW1lcyB0aGF0 IGhpZGUgZGVmYXVsdCBjb25zdHJ1Y3Rvcg0KICAgICBuYW1lcw0KICDigKIgIzM1OiBEZXRlY3Qg bWFudWFsIGltcGxlbWVudGF0aW9ucyBvZiBMaXN0Lm1hcC9mb2xkIGZ1bmN0aW9ucw0KICDigKIg IzUwOiBQcm9wb3NlIGV0YSByZWR1Y3Rpb24gd2hlbiBhdmFpbGFibGUNCiAg4oCiICM1MTogV2Fy biBhYm91dCBwYXR0ZXJuIG1hdGNoaW5nIG9uIGJvb2xlYW4gdmFsdWVzDQogIOKAoiAjNTM6IFdh cm4gYWJvdXQgYCIlcyInIGluIGZvcm1hdHRlZCBzdHJpbmdzDQogIOKAoiAjNTQ6IERldGVjdGlv biBvZiB1bnVzZWQgcHVibGljIGRlY2xhcmF0aW9ucyBpbiAubWxpIGZpbGUuDQogIOKAoiAjNTY6 IFNpbXBsaWZ5IGxpbnQgYWJvdXQgbWlzc2luZyBsaWNlbnNlLiBXZSBsb29rIGZvciByZXF1aXJl ZA0KICAgICBkb2MtY29tbWVudHMgYW55d2hlcmUgaW4gdGhlIGZpbGUsIG5vdCBvbmx5IGluIHRo ZSBiZWdpbm5pbmcuDQogIOKAoiAjNjA6IFNraXAgc29tZSBjaGVja3MgZm9yIHNvbWUgc291cmNl IGZpbGVzIChjb25maWd1cmVkIHZpYQ0KICAgICAnLnphbnVkYScgY29uZmlnIGZpbGUpLg0KICDi gKIgIzE1OiBTcGxpdCAnc3RyaW5nX2NvbmNhdCcgbGludCB0byBjaGVjayBzZXBhcmF0ZWx5IHBh dHRlcm5zICdhXmJeYycNCiAgICAgKGxldmVsPUFsbG93KSBhbmQgJ0xpc3QuZm9sZF9sZWZ0IChe KScgKGxldmVsPVdhcm4pLg0KDQoNClFDaGVjayAwLjI0DQrilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZANCg0KICBBcmNoaXZlOiA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fu bi1xY2hlY2stMC0yNC8xNjE5OC8xPg0KDQoNCkphbiBNaWR0Z2FhcmQgYW5ub3VuY2VkDQrilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIANCg0KICBJJ20gaGFwcHkgdG8gYW5ub3VuY2UgdGhlIDAuMjQgcmVsZWFzZSBvZiBg cWNoZWNrJywgYHFjaGVjay1jb3JlJywNCiAgYHFjaGVjay1hbGNvdGVzdCcsIGFuZCBgcWNoZWNr LW91bml0JywgYWxvbmcgd2l0aCBhIDAuNiByZWxlYXNlIG9mDQogIGBwcHhfZGVyaXZpbmdfcWNo ZWNrJyA6dGFkYToNCg0KICBgUUNoZWNrJyBpcyBhIGxpYnJhcnkgZm9yIHJhbmRvbWl6ZWQgcHJv cGVydHktYmFzZWQgdGVzdGluZywgaW5zcGlyZWQNCiAgYnkgSGFza2VsbCdzIHNlbWluYWwgUXVp Y2tDaGVjayBsaWJyYXJ5LiBUaGUgMC4yNCByZWxlYXNlIGNvbnRhaW5zIGENCiAgcmFuZ2Ugb2Yg aW1wcm92ZW1lbnRzIHRvIHRoZSBpbnRlZ3JhdGVkIHNocmlua2luZyBvZiBgUUNoZWNrMicsDQog IGluaXRpYWxseSBpbnRyb2R1Y2VkIGluIHRoZSAwLjE4IHJlbGVhc2UuIEFzIGEgY29uc2VxdWVu Y2UsIGl0cw0KICBzaHJpbmtpbmcgYWxnb3JpdGhtcyBzaG91bGQgYWN0IG1vcmUgcHJlZGljdGFi bHksIHJlZHVjZSBmYXN0ZXIsIGFuZA0KICByZXBvcnQgc21hbGxlciBjb3VudGVyZXhhbXBsZXMu IEluIGVzc2VuY2UsIHRoZSAwLjI0IHJlbGVhc2UgaXMgd2hhdA0KICB3ZSBob3BlZCAwLjE4IHdv dWxkIGJlLiBUaGUgcmVsZWFzZSBhbHNvIGFkZHMgbWlzc2luZyBgcmVzdWx0JywNCiAgYGludDMy JywgYW5kIGBpbnQ2NCcgY29tYmluYXRvcnMsIGFzIHdlbGwgYXMgbW9yZSBkb2N1bWVudGF0aW9u Lg0KDQogIElmIHlvdSd2ZSBwcmV2aW91c2x5IGdpdmVuIGBRQ2hlY2syJydzIGludGVncmF0ZWQg c2hyaW5raW5nIGEgc3BpbiwgSQ0KICBlbmNvdXJhZ2UgeW91IHRvIHRyeSBpdCBhZ2FpbiB3aXRo IHRoZSBwYXRjaGVkIDAuMjQgcmVsZWFzZS4gRm9yIG5ldw0KICB1c2VycywgdGhlIDAuMjQgcmVs ZWFzZSBpcyBhbHNvIGEgZ29vZCBjYW5kaWRhdGUgdG8gY2hlY2sgb3V0IQ0KICA6c21pbGV5OiBQ bGVhc2Ugc2hhcmUgYW55IHByb2JsZW1zIHlvdSBlbmNvdW50ZXIgb24gdGhlIGBxY2hlY2snIHJl cG86DQogIDxodHRwczovL2dpdGh1Yi5jb20vYy1jdWJlL3FjaGVjaz4NCg0KICBGdWxsIGNoYW5n ZSBsb2c6DQoNCiAg4oCiIFtxY2hlY2stYWxjb3Rlc3RdIEFkZCBhbiBvcHRpb25hbCBgc3BlZWRf bGV2ZWwnIHBhcmFtZXRlciB0bw0KICAgIGB0b19hbGNvdGVzdCcNCiAg4oCiIEFkanVzdCB0aGUg YFFDaGVjazIuR2VuLmxpc3QnIHNocmlua2VyIHRvIHByb2R1Y2UgbWluaW1hbA0KICAgIGNvdW50 ZXJleGFtcGxlcyBhdCBzaXplIDMgdG9vDQogIOKAoiBSZXBsYWNlIHRoZSBgUUNoZWNrMicgT0Nh bWwgNCBgUmFuZG9tLlN0YXRlLnNwbGl0JyBoYWNrIHdpdGggYQ0KICAgIGZhc3RlciBvbmUNCiAg 4oCiIEltcHJvdmUgdGhlIGBRQ2hlY2syLkdlbi5saXN0JyBzaHJpbmtlciBoZXVyaXN0aWMgYW5k IHV0aWxpemUgdGhlDQogICAgaW1wcm92ZWQgc2hyaW5rZXIgaW4gb3RoZXIgYFFDaGVjazInDQog ICAgYHtsaXN0LGFycmF5LGJ5dGVzLHN0cmluZyxmdW5jdGlvbn0qJyBzaHJpbmtlcnMNCiAg4oCi IFVzZSBgc3BsaXQnIGFuZCBgY29weScgaW4gYFJhbmRvbS5TdGF0ZScgdW5kZXJseWluZyBgUUNo ZWNrMicgdG8NCiAgICBhdm9pZCBub24tZGV0ZXJtaW5pc3RpYyBzaHJpbmtpbmcgYmVoYXZpb3Vy DQogIOKAoiBBZGQgbWlzc2luZyBkb2N1bWVudGF0aW9uIHN0cmluZ3MgZm9yDQogICAgYFFDaGVj ay57UHJpbnQsSXRlcixTaHJpbmssR2VufScgYW5kIGBRQ2hlY2syLkdlbicuDQogIOKAoiBBZGQg YHJlc3VsdCcgY29tYmluYXRvcnMgdG8gYFFDaGVjaycsDQogICAgYFFDaGVjay57R2VuLFByaW50 LFNocmluayxPYnNlcnZhYmxlfScsIGFuZA0KICAgIGBRQ2hlY2syLntHZW4sUHJpbnQsT2JzZXJ2 YWJsZX0nLg0KICDigKIgQWRkIG1pc3NpbmcgY29tYmluYXRvcnMgYFFDaGVja3ssMn0uUHJpbnQu aW50ezMyLDY0fScsDQogICAgYFFDaGVjay5HZW4uaW50ezMyLDY0fScsIGBRQ2hlY2t7LDJ9Lk9i c2VydmFibGUuaW50ezMyLDY0fScsIGFuZA0KICAgIGRlcHJlY2F0ZSBgUUNoZWNrLkdlbi57dWkz Mix1aTY0fScNCiAg4oCiIERvY3VtZW50IGBkdW5lJyB1c2FnZSBpbiBSRUFETUUNCg0KICBIYXBw eSB0ZXN0aW5nISA6c21pbGV5OiA6a2V5Ym9hcmQ6DQoNCg0KQm9ndWUsIHRoZSBPQ2FtbCBHVUkN CuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWJvZ3Vl LXRoZS1vY2FtbC1ndWkvOTA5OS82Mz4NCg0KDQpzYW5ldHRlIGFubm91bmNlZA0K4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgRGVhciBhbGws DQoNCiAgSeKAmW0gaGFwcHkgdG8gYW5ub3VuY2UgYSBuZXcgdmVyc2lvbiBvZiBbQm9ndWVdLCB2 ZXJzaW9uIDIwMjUwMjI0LCBub3cNCiAgYXZhaWxibGUgb24gYG9wYW0nLg0KDQogIFRoZSBtYWlu IG5vdmVsdHkgaXMgYSBicmFuZCBuZXcgKkZpbGUgZGlhbG9nKi4gSXQgd2lsbCBvcGVuIGEgbmV3 DQogIHdpbmRvdyAob3IgcG9wdXApIHdoaWNoIHdpbGwgbGV0IHRoZSB1c2VyIG5hdmlnYXRlIHRo ZSBmaWxlIHN5c3RlbSBhbmQNCiAgc2VsZWN0IG9uZSBvciBtb3JlIGZpbGVzIG9yIGRpcmVjdG9y aWVzLg0KDQogIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIG5ldyBbRmlsZV0gbW9kdWxlLg0KDQog IFlvdSBtaWdodCBhbHNvIGJlIGludGVyZXN0ZWQgaW4gdGhlIFtNb25pdG9yXSBzdWJtb2R1bGUs IHdoaWNoDQogIGltcGxlbWVudHMgYSAqZmlsZSBtb25pdG9yaW5nKiBBUEkgYmFzZWQgb24gYGZz d2F0Y2gnIChpZiBhdmFpbGFibGUpDQogIG9yIGBVbml4LnN0YXQnLg0KDQogIElmIHlvdSBhcmUg Y3VyaW91cywgaGVyZSBpcyBhIGdyYXBoaWNhbCBzdW1tYXJ5IG9mIHRoZSBjdXJyZW50DQogIGZ1 bmN0aW9uYWxpdGllcyBvZiBCb2d1ZSdzIGZpbGUgZGlhbG9nIChJIGhvcGUgdGhhdCBtb3JlIHdp bGwgYmUgYWRkZWQNCiAgc29vbjsgSSdtIG9wZW4gdG8gc3VnZ2VzdGlvbnMpDQoNCiAgPGh0dHBz Oi8vdXMxLmRpc2NvdXJzZS1jZG4uY29tL2ZsZXgwMjAvdXBsb2Fkcy9vY2FtbC9vcmlnaW5hbC8y WC9iL2I2ZWZiZTVlYjQwMjM3ZGIwZmM0YjVmMDM2YjE2MzdhNzlkZTc4NzUucG5nPg0KDQogIFBT OiBAU2FjaGluZHJhX1JhZ3VsLCB5ZXMgd2UgZGlkIGl0IGZpbmFsbHkgOykgYmV0dGVyIGxhdGUg dGhhbiBuZXZlcg0KDQoNCltCb2d1ZV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9zYW5ldHRlL2JvZ3Vl Pg0KDQpbRmlsZV0gPGh0dHA6Ly9zYW5ldHRlLmdpdGh1Yi5pby9ib2d1ZS9Cb2d1ZS5GaWxlLmh0 bWw+DQoNCltNb25pdG9yXSA8aHR0cDovL3NhbmV0dGUuZ2l0aHViLmlvL2JvZ3VlL0JvZ3VlLkZp bGUuTW9uaXRvci5odG1sPg0KDQoNCk9wYW0gcmVwb3NpdG9yeSBhcmNoaXZhbCAtIG5leHQgcGhh c2UNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qvb3BhbS1yZXBv c2l0b3J5LWFyY2hpdmFsLW5leHQtcGhhc2UvMTYyMDMvMT4NCg0KDQpIYW5uZXMgTWVobmVydCBh bm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIERlYXIgZXZlcnlvbmUsDQoNCiAgc29ycnkg Zm9yIHRoZSBzaWxlbmNlIOKAkyB0aGUgcGhhc2UgMyBvZiB0aGUgb3BhbSByZXBvc2l0b3J5IGFy Y2hpdmFsDQogICh0YWtpbmcgdGhlIHgtbWFpbnRlbmFuY2UtaW50ZW50IGludG8gYWNjb3VudCkg aGFzIHRvIGJlIGRlbGF5ZWQgYnkNCiAgKHRlbnRhdGl2ZWx5KSBvbmUgbW9udGguIFRoZSByZWFz b24gaXMgdGhhdCBvdXIgdG9vbGluZyBpcyBub3QgcmVhZHkgLQ0KICB0aGUgdGFzaywgZ2l2ZW4g YW4gb3BhbSByZXBvc2l0b3J5IGFuZCBtYWludGVuYW5jZS1pbnRlbnQgb24gcGFja2FnZXMsDQog IHdoaWNoIGNhbiBiZSBzYWZlbHkgYXJjaGl2ZWQsIGlzIGhhcmRlciB0aGFuIGl0IHNlZW1zOg0K ICDigKIgd2UndmUgdG8gdGFrZSBjb21waWxlciB2ZXJzaW9ucyBpbnRvIGFjY291bnQNCiAg4oCi IHRoZXJlIG1heSBiZSBhIHBhY2thZ2UgWCBpbiB2ZXJzaW9uIDEgYW5kIDIsIGJvdGggc3VwcG9y dGluZyBPQ2FtbA0KICAgIDQuMDgsIGJ1dCBkZXBlbmQgb24gcGFja2FnZSBZICh3aGVyZSBYLjEg ZGVwZW5kcyBvbiBZID49IDEsIGFuZCBYLjINCiAgICBkZXBlbmRzIG9uIFkgPj0gMikg4oCTIG5v dyBZLjEgY291bGQgc3VwcG9ydCBPQ2FtbCA0LjA4LCBhbmQgWS4yIG9ubHkNCiAgICBPQ2FtbCA0 LjEyIOKAkyBzbyBpdCBpcyBub3Qgc2FmZSB0byBhcmNoaXZlIFguMSAoc2luY2Ugb24gT0NhbWwg NC4wOA0KICAgIHRoZXJlIHdvbid0IGJlIGFueSBYIGluc3RhbGxhYmxlKS4gQW5kIHRoaXMgbWF5 IGJlIGRlZXBseSBuZXN0ZWQgaW4NCiAgICB0aGUgZGVwZW5kZW5jeSBjaGFpbg0KDQogIEl0IGlz IHVzZWZ1bCBpZiB5b3UgbWFyayB5b3VyIHBhY2thZ2VzIHdpdGggYHgtbWFpbnRlbmFuY2UtaW50 ZW50JyAoYXMNCiAgbWVudGlvbmVkIGluDQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qv b3BhbS1yZXBvc2l0b3J5LWFyY2hpdmUtY2xhcmlmaWNhdGlvbi1vZi10aGUtb3BhbS1maWVsZHM+ KS4NCg0KICBXZSdsbCBsZXQgeW91IGtub3cgb25jZSB3ZSBoYXZlIHRvb2xpbmcgaW4gcGxhY2Ug dG8gY29wZSB3aXRoIHRoZSB0YXNrDQogIGRlc2NyaWJlZCBhYm92ZSAoZGV2ZWxvcG1lbnQgaXMg aGFwcGVuaW5nIGhlcmU6DQogIDxodHRwczovL2dpdGh1Yi5jb20vaGFubmVzbS9tYWludGVuYW5j ZS1pbnRlbnQtZmlsdGVyPikuDQoNCg0KVXBjb21pbmcgQ21kbGluZXIgMi4wIGNoYW5nZXMgdGhh dCBuZWVkIHlvdXIgYXR0ZW50aW9uDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9y Zy90L3VwY29taW5nLWNtZGxpbmVyLTItMC1jaGFuZ2VzLXRoYXQtbmVlZC15b3VyLWF0dGVudGlv bi8xNjIxMS8xPg0KDQoNCkRhbmllbCBCw7xuemxpIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoN CiAgSWYgeW91IGFyZSBhIHVzZXIgb2YgYGNtZGxpbmVyJyBub3RlIHRoYXQgY21kbGluZXIgMi4w IOKAkyBpbiBleGNoYW5nZQ0KICBmb3IgYXV0by1jb21wbGV0aW9uIHN1cHBvcnQg4oCTIHdpbGwg cmVtb3ZlIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkNCiAgY29tbWFuZCBhbmQgb3B0aW9ucyBuYW1l cyBieSB1bmFtYmlndW91cyBwcmVmaXhlcyBhY2NvcmRpbmcgdG8gW3RoaXMNCiAgcGxhbiBvZiBh Y3Rpb25dLg0KDQogIElmIHlvdSBhcmUgaG9ycmlmaWVkIGJ5IGl0IHBsZWFzZSBjaGltZSBpbiBv biB0aGUgaXNzdWUuDQoNCg0KW3RoaXMgcGxhbiBvZiBhY3Rpb25dIDxodHRwczovL2dpdGh1Yi5j b20vZGJ1ZW56bGkvY21kbGluZXIvaXNzdWVzLzIwMD4NCg0KDQpPQ2FtbCBFZGl0b3JzIFBsdWdp bnMgU3VydmV5DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8 aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L29jYW1sLWVkaXRvcnMtcGx1Z2lucy1zdXJ2ZXkv MTYyMTYvMT4NCg0KDQpQaXppZUR1c3QgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBIZWxsbywgd2UgYXJlIGNv bmR1Y3RpbmcgYSBzaG9ydCBzdXJ2ZXkgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IHlvdQ0KICB1 c2UgdGhlIGRpZmZlcmVudCBlZGl0b3IgcGx1Z2lucyBhdmFpbGFibGUgZm9yIE9DYW1sLiBQbGVh c2UgdGFrZSBhDQogIGZldyBtaW51dGVzIChpZGVhbGx5IDUpIHRvIGZpbGwgb3V0IHRoZSBmb3Jt Lg0KDQogIDxodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9mb3Jtcy9kL2UvMUZBSXBRTFNmR0dGWkJp dzRQRjdMMHl0MkRCWDg0NDNHNV83YUZMNXY2d3ZvNnA1TXdMLURXOFEvdmlld2Zvcm0/dXNwPXBw X3VybCZlbnRyeS40NTQwMTM4NTg9RGlzY3Vzcz4NCg0KICBUaGFuayB5b3UgOikgOmNhbWVsOg0K DQoNCkR1bmUgZGV2IG1lZXRpbmcNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qv YW5uLWR1bmUtZGV2LW1lZXRpbmcvMTQ5OTQvMjU+DQoNCg0KRXRpZW5uZSBNYXJhaXMgYW5ub3Vu Y2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIANCg0KICBIaSBldmVyeW9uZSA6Y2FtZWw6DQoNCiAgVGhlIG5l eHQgRHVuZSBEZXYgTWVldGluZyB3aWxsIGJlIG9uICpXZWRuZXNkYXksIE1hcmNoLCA1dGggYXQg OTowMA0KICBDRVQqLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgb25lLWhvdXItbG9uZyBtZWV0aW5n Lg0KDQogIFdoZXRoZXIgeW91IGFyZSBhIG1haW50YWluZXIsIGEgcmVndWxhciBjb250cmlidXRv ciwgYSBuZXcgam9pbmVyIG9yDQogIGp1c3QgY3VyaW91cywgeW91IGFyZSB3ZWxjb21lIHRvIGpv aW46IHRoZXNlIGRpc2N1c3Npb25zIGFyZSBvcGVuZWQhDQogIFRoZSBnb2FsIG9mIHRoZXNlIG1l ZXRpbmdzIGlzIHRvIHByb3ZpZGUgYSBwbGFjZSB0byBkaXNjdXNzIHRoZQ0KICBvbmdvaW5nIHdv cmsgdG9nZXRoZXIgYW5kIHN5bmNocm9uaXplIHdpdGggdGhlIER1bmUgZGV2ZWxvcGVycyA6c21p bGU6DQoNCiAgVGhlIGFnZW5kYSBpcyBhdmFpbGFibGUgb24gdGhlIFttZWV0aW5nIGRlZGljYXRl ZCBwYWdlXS4gRmVlbCBmcmVlIHRvDQogIGFkZCBtb3JlIGl0ZW1zIGluIGl0Lg0KDQogIOKAoiBN ZWV0aW5nIGxpbms6IFt6b29tXQ0KICDigKIgQ2FsZW5kYXIgZXZlbnQ6IFtnb29nbGUgY2FsZW5k YXJdDQogIOKAoiBXaWtpIHdpdGggaW5mb3JtYXRpb25zIGFuZCBwcmV2aW91cyBub3RlczogW2R1 bmUgd2lraSBvbiBnaXRodWJdDQoNCg0KW21lZXRpbmcgZGVkaWNhdGVkIHBhZ2VdDQo8aHR0cHM6 Ly9naXRodWIuY29tL29jYW1sL2R1bmUvd2lraS9kZXYtbWVldGluZy0yMDI1LTAzLTA1Pg0KDQpb em9vbV0NCjxodHRwczovL3VzMDZ3ZWIuem9vbS51cy9qLzg1MDk2ODc3Nzc2P3B3ZD1jV05oVTFk SFExWk5Talp1T1VaQ1EwaDJieTlVZHowOT4NCg0KW2dvb2dsZSBjYWxlbmRhcl0NCjxodHRwczov L2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvdS8wL2VtYmVkP3NyYz1jXzVjZDY5OGRmNjc4 NGUzODViMWNkY2RjMWRiY2ExOGMwNjFmYWE5Njk1OWEwNDc4MTU2NmQzMDRkYzllYzczMTlAZ3Jv dXAuY2FsZW5kYXIuZ29vZ2xlLmNvbT4NCg0KW2R1bmUgd2lraSBvbiBnaXRodWJdIDxodHRwczov L2dpdGh1Yi5jb20vb2NhbWwvZHVuZS93aWtpPg0KDQoNClBsYXRmb3JtIE5ld3NsZXR0ZXI6IFNl cHRlbWJlciAtIERlY2VtYmVyIDIwMjQNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFy Y2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvcGxhdGZvcm0tbmV3c2xldHRl ci1zZXB0ZW1iZXItZGVjZW1iZXItMjAyNC8xNjIyMS8xPg0KDQoNClNhYmluZSBTY2htYWx0eiBh bm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFdlbGNvbWUgdG8gdGhlIHRoaXJ0ZWVu dGggZWRpdGlvbiBvZiB0aGUgT0NhbWwgUGxhdGZvcm0gbmV3c2xldHRlciENCg0KICBJbiB0aGlz IFNlcHRlbWJlci1EZWNlbWJlciAyMDI0IGVkaXRpb24sIHdlIGFyZSBleGNpdGVkIHRvIGJyaW5n IHlvdQ0KICB0aGUgbGF0ZXN0IG9uIHRoZSBPQ2FtbCBQbGF0Zm9ybSwgY29udGludWluZyBvdXIg dHJhZGl0aW9uIG9mDQogIGhpZ2hsaWdodGluZyByZWNlbnQgZGV2ZWxvcG1lbnRzIGFzIHNlZW4g aW4gW3ByZXZpb3VzIGVkaXRpb25zXS4gVG8NCiAgdW5kZXJzdGFuZCB0aGUgZGlyZWN0aW9uIHdl J3JlIGhlYWRlZCwgZXNwZWNpYWxseSByZWdhcmRpbmcNCiAgZGV2ZWxvcG1lbnQgd29ya2Zsb3dz IGFuZCB1c2VyIGV4cGVyaWVuY2UgaW1wcm92ZW1lbnRzLCBjaGVjayBvdXQgb3VyDQogIFtyb2Fk bWFwXS4NCg0KICAqSGlnaGxpZ2h0czoqDQoNCiAg4oCiICpEdW5lIEVuYWJsZXMgQ2FjaGUgQnkg RGVmYXVsdCwgQWRkcyBXZWJBc3NlbWJseSBTdXBwb3J0KiBUaGUgbGF0ZXN0DQogICAgRHVuZSBy ZWxlYXNlcyBtYXJrIHNpZ25pZmljYW50IHByb2dyZXNzIGluIGJ1aWxkIHBlcmZvcm1hbmNlIGFu ZA0KICAgIGxhbmd1YWdlIHN1cHBvcnQuIFZlcnNpb24gMy4xNy4wIGVuYWJsZXMgdGhlIER1bmUg Y2FjaGUgYnkgZGVmYXVsdA0KICAgIGZvciBrbm93bi1zYWZlIG9wZXJhdGlvbnMsIGltcHJvdmlu ZyBidWlsZCB0aW1lcyBmb3IgY29tbW9uDQogICAgdGFza3MuIFRoZSBhZGRpdGlvbiBvZiBXYXNt X29mX29jYW1sIHN1cHBvcnQgb3BlbnMgbmV3IHBvc3NpYmlsaXRpZXMNCiAgICBmb3IgT0NhbWwg cHJvamVjdHMgdGFyZ2V0aW5nIHRoZSB3ZWIgb3Igb3RoZXIgV2ViQXNzZW1ibHkNCiAgICBydW50 aW1lcy4gSW4gYWRkaXRpb24sIER1bmUgbm93IHN1cHBvcnRzIGFkZGluZyBDb2RlYmVyZyBhbmQg R2l0TGFiDQogICAgcmVwb3NpdG9yaWVzIHZpYSB0aGUgYChzb3VyY2UpJyBzdGFuemEuDQogIOKA oiAqb3BhbSAyLjMuMCogQXMgYW5ub3VuY2VkIHdpdGggb3BhbSAyLjIsIG9wYW0gcmVsZWFzZXMg YXJlIG5vdw0KICAgIHRpbWUtYmFzZWQgd2l0aCBhIGNhZGVuY2Ugb2YgNiBtb250aHMuIE9wYW0g Mi4zIGhhcyBiZWVuIHJlbGVhc2VkDQogICAgbGFzdCBOb3ZlbWJlci4gSXQgY29udGFpbnMgYSBt YWpvciBicmVha2luZyBjaGFuZ2UgcmVnYXJkaW5nDQogICAgZXh0cmEtZmlsZXMgaGFuZGxpbmc6 IGV4dHJhLWZpbGVzIGFyZSBub3cgaWdub3JlZCB3aGVuIHRoZXkgYXJlIG5vdA0KICAgIHByZXNl bnQgaW4gdGhlIG9wYW0gZmlsZS4gUHJldmlvdXNseSB0aGV5IHdlcmUgc2lsZW50bHkgYWRkZWQu IFRoaXMNCiAgICByZWxlYXNlIGFkZHMgYWxzbyBzb21lIG5ldyBjb21tYW5kcyBsaWtlIGBvcGFt IGxpc3QgLS1sYXRlc3Qtb25seScNCiAgICBvciBgb3BhbSBpbnN0YWxsIGZvbyAtLXZlcmJvc2Ut b24gYmFyJywgYW1vbmcgb3RoZXIgZml4ZXMgYW5kDQogICAgZW5oYW5jZW1lbnRzLg0KICDigKIg KkltcHJvdmVkIEVkaXRvciBXb3JrZmxvd3Mgd2l0aCBPQ2FtbC1MU1AgYW5kIE1lcmxpbiogQSBt YWpvcg0KICAgIG1pbGVzdG9uZSBmb3IgcHJvamVjdC13aWRlIGZlYXR1cmVzIGhhcyBiZWVuIHJl YWNoZWQgd2l0aCB0aGUNCiAgICByZWxlYXNlIG9mIE9DYW1sIDUuMzogTFNQJ3MgcmVuYW1pbmcg ZmVhdHVyZSBub3cgW19yZW5hbWVzIHN5bWJvbHMNCiAgICBpbiB0aGUgZW50aXJlIHByb2plY3Rf XSBpZiB0aGUgaW5kZXggaXMgYnVpbHQuIEFkZGl0aW9uYWxseSxhbGwgb2YNCiAgICB0aGUgY2xh c3NpYyBtZXJsaW4tc2VydmVyIGNvbW1hbmRzIGFyZSBub3cgYXZhaWxhYmxlIGFzIExTUCBjdXN0 b20NCiAgICByZXF1ZXN0czogdGhpcyBlbmFibGVkIHRoZSBhZGRpdGlvbiBvZiBbbWFueSBuZXcg ZmVhdHVyZXMgdG8gdGhlDQogICAgVmlzdWFsIFN0dWRpbyBDb2RlIHBsdWdpbl0uIEZpbmFsbHkg YSBicmFuZCBuZXcgRW1hY3MgbW9kZSwgYmFzZWQgb24NCiAgICBMU1AgYW5kIHRoZSBuZXcgY3Vz dG9tIHF1ZXJpZXMgaXMgW25vdyBhdmFpbGFibGUgb24gTWVscGFdLg0KICDigKIgKlBlcmZvcm1h bmNlIGFuZCBTZWN1cml0eSBFbmhhbmNlbWVudHMqIFJlY2VudCB1cGRhdGVzIGFjcm9zcyB0aGUN CiAgICBwbGF0Zm9ybSBmb2N1cyBvbiBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuIER1bmUg b3B0aW1pemVkIGl0cw0KICAgIGhhbmRsaW5nIG9mIC5jbXhzIGZpbGVzLCB3aGlsZSBvcGFtIGlt cGxlbWVudGVkIHN0cmljdGVyIGdpdA0KICAgIHN1Ym1vZHVsZSBlcnJvciBjaGVja2luZy4gT0Nh bWwtTFNQIHJlc29sdmVkIGZpbGUgZGVzY3JpcHRvciBsZWFrcywNCiAgICBjb250cmlidXRpbmcg dG8gYSBtb3JlIHN0YWJsZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4NCg0KICAqRmVhdHVyZSBH dWlkZXMgJiBBbm5vdW5jZW1lbnRzOioNCg0KICDigKIgW0luc3RhbGxpbmcgRGV2ZWxvcGVyIFRv b2xzIHdpdGggRHVuZV0NCiAg4oCiIFtTaGVsbCBDb21wbGV0aW9ucyBpbiBEdW5lIERldmVsb3Bl ciBQcmV2aWV3XQ0KICDigKIgW09DYW1sIEluZnJhc3RydWN0dXJlOiBFbmhhbmNpbmcgUGxhdGZv cm0gU3VwcG9ydCBhbmQgVXNlcg0KICAgIEV4cGVyaWVuY2VdDQogIOKAoiBbQ2FsbCBmb3IgRmVl ZGJhY2tdDQoNCiAgKlJlbGVhc2VzOioNCg0KICDigKIgW09DYW1sLUxTUCAxLjIwLjFdDQogIOKA oiBbb3BhbS1wdWJsaXNoIDIuNS4wXQ0KICDigKIgW01lcmxpbiA1LjMtNTAyIGZvciBPQ2FtbCA1 LjIgYW5kIDQuMTgtNDE0IGZvciBPQ2FtbCA0LjE0XQ0KICDigKIgW0R1bmUgMy4xNy4xXQ0KICDi gKIgW09DYW1sZm9ybWF0IDAuMjcuMF0NCiAg4oCiIFtEdW5lIDMuMTcuMF0NCiAg4oCiIFtvcGFt IDIuMy4wXQ0KICDigKIgW0R1bmUgMy4xNi4xXQ0KICDigKIgW01lcmxpbiA1LjIuMS01MDIgZm9y IE9DYW1sIDUuMiBhbmQgNC4xNy4xIGZvciBPQ2FtbCA1LjEgYW5kIDQuMTRdDQoNCg0KW3ByZXZp b3VzIGVkaXRpb25zXSA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90YWcvcGxhdGZvcm0tbmV3 c2xldHRlcj4NCg0KW3JvYWRtYXBdIDxodHRwczovL29jYW1sLm9yZy9kb2NzL3BsYXRmb3JtLXJv YWRtYXA+DQoNCltfcmVuYW1lcyBzeW1ib2xzIGluIHRoZSBlbnRpcmUgcHJvamVjdF9dDQo8aHR0 cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1tZXJsaW4tYW5kLW9jYW1sLWxzcC1zdXBwb3J0 LWV4cGVyaW1lbnRhbC1wcm9qZWN0LXdpZGUtcmVuYW1pbmcvMTYwMDg+DQoNClttYW55IG5ldyBm ZWF0dXJlcyB0byB0aGUgVmlzdWFsIFN0dWRpbyBDb2RlIHBsdWdpbl0NCjxodHRwczovL3Rhcmlk ZXMuY29tL2Jsb2cvMjAyNS0wMi0yOC1mdWxsLWJsb3duLXByb2R1Y3Rpdml0eS1pbi12c2NvZGUt d2l0aC1vY2FtbC8+DQoNCltub3cgYXZhaWxhYmxlIG9uIE1lbHBhXSA8aHR0cHM6Ly9tZWxwYS5v cmcvIy9vY2FtbC1lZ2xvdD4NCg0KW0luc3RhbGxpbmcgRGV2ZWxvcGVyIFRvb2xzIHdpdGggRHVu ZV0NCjxodHRwczovL29jYW1sLm9yZy9jaGFuZ2Vsb2cvMjAyNC0xMS0xNS1pbnN0YWxsaW5nLWRl dmVsb3Blci10b29scy13aXRoLWR1bmU+DQoNCltTaGVsbCBDb21wbGV0aW9ucyBpbiBEdW5lIERl dmVsb3BlciBQcmV2aWV3XQ0KPGh0dHBzOi8vb2NhbWwub3JnL2NoYW5nZWxvZy8yMDI0LTEwLTI5 LXNoZWxsLWNvbXBsZXRpb25zLWluLWR1bmUtZGV2ZWxvcGVyLXByZXZpZXc+DQoNCltPQ2FtbCBJ bmZyYXN0cnVjdHVyZTogRW5oYW5jaW5nIFBsYXRmb3JtIFN1cHBvcnQgYW5kIFVzZXIgRXhwZXJp ZW5jZV0NCjxodHRwczovL29jYW1sLm9yZy9jaGFuZ2Vsb2cvMjAyNC0xMC0wMi11cGRhdGVzPg0K DQpbQ2FsbCBmb3IgRmVlZGJhY2tdDQo8aHR0cHM6Ly9vY2FtbC5vcmcvY2hhbmdlbG9nLzIwMjQt MDktMjUtY2FsbC1mb3ItZmVlZGJhY2s+DQoNCltPQ2FtbC1MU1AgMS4yMC4xXQ0KPGh0dHBzOi8v b2NhbWwub3JnL2NoYW5nZWxvZy8yMDI0LTEyLTIzLW9jYW1sLWxzcC0xLjIwLjE+DQoNCltvcGFt LXB1Ymxpc2ggMi41LjBdDQo8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sLW9wYW0vb3BhbS1wdWJs aXNoL3JlbGVhc2VzL3RhZy8yLjUuMD4NCg0KW01lcmxpbiA1LjMtNTAyIGZvciBPQ2FtbCA1LjIg YW5kIDQuMTgtNDE0IGZvciBPQ2FtbCA0LjE0XQ0KPGh0dHBzOi8vb2NhbWwub3JnL2NoYW5nZWxv Zy8yMDI0LTEyLTIzLW1lcmxpbi01LjMuNTAyLWFuZC00LjE4LjQxND4NCg0KW0R1bmUgMy4xNy4x XSA8aHR0cHM6Ly9vY2FtbC5vcmcvY2hhbmdlbG9nLzIwMjQtMTItMTgtZHVuZS4zLjE3LjE+DQoN CltPQ2FtbGZvcm1hdCAwLjI3LjBdDQo8aHR0cHM6Ly9vY2FtbC5vcmcvY2hhbmdlbG9nLzIwMjQt MTItMDItb2NhbWxmb3JtYXQtMC4yNy4wPg0KDQpbRHVuZSAzLjE3LjBdIDxodHRwczovL29jYW1s Lm9yZy9jaGFuZ2Vsb2cvMjAyNC0xMS0yNy1kdW5lLjMuMTcuMD4NCg0KW29wYW0gMi4zLjBdIDxo dHRwczovL29jYW1sLm9yZy9jaGFuZ2Vsb2cvMjAyNC0xMS0xMy1vcGFtLTItMy0wPg0KDQpbRHVu ZSAzLjE2LjFdIDxodHRwczovL29jYW1sLm9yZy9jaGFuZ2Vsb2cvMjAyNC0xMC0zMC1kdW5lLjMu MTYuMT4NCg0KW01lcmxpbiA1LjIuMS01MDIgZm9yIE9DYW1sIDUuMiBhbmQgNC4xNy4xIGZvciBP Q2FtbCA1LjEgYW5kIDQuMTRdDQo8aHR0cHM6Ly9vY2FtbC5vcmcvY2hhbmdlbG9nLzIwMjQtMDkt MjctbWVybGluLTUuMi4xPg0KDQoqRHVuZSoNCuKVjOKVjOKVjOKVjOKVjOKVjA0KDQogICpSb2Fk bWFwOiogW0RldmVsb3AgLyAoVzQpIEJ1aWxkIGEgUHJvamVjdF0NCg0KICBbRHVuZSAzLjE3IHdh cyByZWxlYXNlZF0gd2l0aCBzaWduaWZpY2FudCBpbXByb3ZlbWVudHMgdG8gcGFja2FnZQ0KICBt YW5hZ2VtZW50LiBLZXkgZmVhdHVyZXMgaW5jbHVkZSBiaW5hcnkgZGlzdHJpYnV0aW9uIHN1cHBv cnQsIGJldHRlcg0KICBlcnJvciBtZXNzYWdlcyBmb3IgbWlzc2luZyBwYWNrYWdlcywgYW5kIFdp bmRvd3Mgc3VwcG9ydCB3aXRob3V0DQogIHJlcXVpcmluZyBPUEFNLg0KDQogIFRoZSBbRHVuZSBE ZXZlbG9wZXIgUHJldmlldyB3ZWJzaXRlXSBub3cgcHJvdmlkZXMgZWRpdG9yIHNldHVwDQogIGlu c3RydWN0aW9ucyBhbmQgcGFja2FnZSBtYW5hZ2VtZW50IHR1dG9yaWFscy4NCg0KICBEdW5lJ3Mg cGFja2FnZSBtYW5hZ2VtZW50IGZlYXR1cmVzIFt3ZXJlIHRlc3RlZCBhY3Jvc3MgaHVuZHJlZHMg b2YNCiAgcGFja2FnZXNdIGluIHRoZSBvcGFtIHJlcG9zaXRvcnksIGFuZCBhIGNvdmVyYWdlIHRv b2wgd2FzIGRldmVsb3BlZCB0bw0KICB0cmFjayBidWlsZCBzdWNjZXNzIHJhdGVzLiBGb3IgbG9j YWwgZGV2ZWxvcG1lbnQsIER1bmUgYWRkZWQgc3VwcG9ydA0KICBmb3IgYnVpbGRpbmcgZGVwZW5k ZW5jaWVzIHZpYSBgQHBrZy1pbnN0YWxsJywgY2FjaGluZyBmb3IgcGFja2FnZQ0KICBidWlsZHMs IGFuZCBhdXRvbWF0ZWQgYmluYXJ5IGJ1aWxkcyBvZiBkZXZlbG9wbWVudCB0b29scy4gVGhlIHN5 c3RlbQ0KICBzdXBwb3J0cyBib3RoIG1vbm9yZXBvIGFuZCBwb2x5cmVwbyB3b3JrZmxvd3MsIHdp dGggb3B0aW9ucyBmb3INCiAgaW5zdGFsbGluZyBpbmRpdmlkdWFsIGRlcGVuZGVuY2llcyBvciBj b21wbGV0ZSBkZXZlbG9wbWVudA0KICBlbnZpcm9ubWVudHMuDQoNCiAgVGhlIGFkZGl0aW9uIG9m IFtXYXNtX29mX29jYW1sIHN1cHBvcnQgaW4gRHVuZV0gb3BlbnMgbmV3DQogIHBvc3NpYmlsaXRp ZXMgZm9yIE9DYW1sIHByb2plY3RzIHRhcmdldGluZyB0aGUgd2ViIG9yIG90aGVyDQogIFdlYkFz c2VtYmx5IHJ1bnRpbWVzLg0KDQogICpBY3Rpdml0aWVzOioNCiAg4oCiIFVwZGF0ZWQgcHJldmll dyB3ZWJzaXRlIHdpdGggZWRpdG9yIHNldHVwIGluc3RydWN0aW9ucyBhdA0KICAgIDxodHRwczov L3ByZXZpZXcuZHVuZS5idWlsZD4gYW5kIHB1Ymxpc2hlZCBiaW5hcnkgaW5zdGFsbGVyDQogICAg cHJvdmlkaW5nIHByZWJ1aWx0IER1bmUgYmluYXJpZXMNCiAg4oCiIFtFbmFibGUgZHVuZSBjYWNo ZSBieSBkZWZhdWx0XQ0KICDigKIgW0FkZGVkIHdhc21fb2Zfb2NhbWwgc3VwcG9ydF0NCiAg4oCi IEFkZGVkIHN1cHBvcnQgZm9yIFtDb2RlYmVyZ10gYW5kIFtHaXRMYWIgb3JnYW5pemF0aW9uc10g aW4gdGhlDQogICAgYChzb3VyY2UpJyBzdGFuemENCiAg4oCiIFtBZGRlZCBzdXBwb3J0IGZvciBg LUgnIGNvbXBpbGVyIGZsYWddIGVuYWJsaW5nIGJldHRlciBzZW1hbnRpY3MgZm9yDQogICAgYChp bXBsaWNpdF90cmFuc2l0aXZlX2RlcHMgZmFsc2UpJw0KDQogICpNYWludGFpbmVkIGJ5OiogUnVk aSBHcmluYmVyZyAoQHJncmluYmVyZywgSmFuZSBTdHJlZXQpLCBOaWNvbMOhcw0KICAgT2plZGEg QsOkciAoQG5vamIsIExleGlGaSksIE1hcmVrIEt1YmljYSAoQExlb25pZGFzLWZyb20tWElWLA0K ICAgVGFyaWRlcyksIEV0aWVubmUgTWlsbG9uIChAZW1pbGxvbiwgVGFyaWRlcyksIFN0ZXBoZW4g U2hlcnJhdHQNCiAgIChAZ3JpZGJ1Z3MsIFRhcmlkZXMpLCBBbnRvbmlvIE51bm8gTW9udGVpcm8g KEBhbm1vbnRlaXJvKQ0KDQoNCltEZXZlbG9wIC8gKFc0KSBCdWlsZCBhIFByb2plY3RdDQo8aHR0 cHM6Ly9vY2FtbC5vcmcvZG9jcy9wbGF0Zm9ybS1yb2FkbWFwI3c0LWJ1aWxkLWEtcHJvamVjdD4N Cg0KW0R1bmUgMy4xNyB3YXMgcmVsZWFzZWRdDQo8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90 L2Fubi1kdW5lLTMtMTcvMTU3NzA+DQoNCltEdW5lIERldmVsb3BlciBQcmV2aWV3IHdlYnNpdGVd IDxodHRwczovL3ByZXZpZXcuZHVuZS5idWlsZD4NCg0KW3dlcmUgdGVzdGVkIGFjcm9zcyBodW5k cmVkcyBvZiBwYWNrYWdlc10gPGh0dHBzOi8vZHVuZS5jaGVjay5jaS5kZXYvPg0KDQpbV2FzbV9v Zl9vY2FtbCBzdXBwb3J0IGluIER1bmVdDQo8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL2R1bmUv cHVsbC8xMTA5Mz4NCg0KW0VuYWJsZSBkdW5lIGNhY2hlIGJ5IGRlZmF1bHRdDQo8aHR0cHM6Ly9n aXRodWIuY29tL29jYW1sL2R1bmUvcHVsbC8xMDcxMD4NCg0KW0FkZGVkIHdhc21fb2Zfb2NhbWwg c3VwcG9ydF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9kdW5lL3B1bGwvMTEwOTM+DQoNCltD b2RlYmVyZ10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9kdW5lL3B1bGwvMTA5MDQ+DQoNCltH aXRMYWIgb3JnYW5pemF0aW9uc10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9kdW5lL3B1bGwv MTA3NjY+DQoNCltBZGRlZCBzdXBwb3J0IGZvciBgLUgnIGNvbXBpbGVyIGZsYWddDQo8aHR0cHM6 Ly9naXRodWIuY29tL29jYW1sL2R1bmUvcHVsbC8xMDY0ND4NCg0KDQoqRWRpdG9yIFRvb2xzKg0K 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgKlJvYWRtYXA6 KiBbRWRpdCAvIChXMTkpIE5hdmlnYXRlIENvZGVdLCBbRWRpdCAvIChXMjApIFJlZmFjdG9yIENv ZGVdDQoNCiAgRGV2ZWxvcGVyIHRvb2xpbmcgcmVjZWl2ZWQgc3Vic3RhbnRpYWwgdXBncmFkZXMg ZHVyaW5nIHRoZSBlbmQgb2YgbGFzdA0KICB5ZWFyIGFuZCB0aGUgYmVnaW5uaW5nIDIwMjUuIEEg bWFqb3IgbWlsZXN0b25lIGZvciBwcm9qZWN0LXdpZGUNCiAgZmVhdHVyZXMgaGFzIGJlZW4gcmVh Y2hlZCB3aXRoIHRoZSByZWxlYXNlIG9mIE9DYW1sIDUuMzogTFNQJ3MNCiAgcmVuYW1pbmcgZmVh dHVyZSBub3cgW19yZW5hbWVzIHN5bWJvbHMgaW4gdGhlIGVudGlyZSBwcm9qZWN0X10gaWYgdGhl DQogIGluZGV4IGlzIGJ1aWx0LiBBZGRpdGlvbmFsbHksIGFsbCBvZiB0aGUgY2xhc3NpYyBtZXJs aW4tc2VydmVyDQogIGNvbW1hbmRzIGFyZSBub3cgYXZhaWxhYmxlIGFzIExTUCBjdXN0b20gcmVx dWVzdHM6IHRoaXMgZW5hYmxlZCB0aGUNCiAgYWRkaXRpb24gb2YgW21hbnkgbmV3IGZlYXR1cmVz IHRvIHRoZSBWaXN1YWwgU3R1ZGlvIENvZGUgcGx1Z2luXSBhbmQNCiAgdGhlIGNyZWF0aW9uIG9m IGEgYnJhbmQgbmV3IEVtYWNzIG1vZGUsIGJhc2VkIG9uIExTUCwgW25vdyBhdmFpbGFibGUNCiAg b24gTWVscGFdLg0KDQogIFRoZXNlIGZlYXR1cmVzIGJyaW5nIE9DYW1sIGVkaXRvciBzdXBwb3J0 IGNsb3NlciB0byBtb2Rlcm4gSURFDQogIGNhcGFiaWxpdGllcywgd2l0aCBpbXBsZW1lbnRhdGlv bnMgYXZhaWxhYmxlIGFjcm9zcyBtdWx0aXBsZSBlZGl0b3JzLg0KDQoNCltFZGl0IC8gKFcxOSkg TmF2aWdhdGUgQ29kZV0NCjxodHRwczovL29jYW1sLm9yZy90b29scy9wbGF0Zm9ybS1yb2FkbWFw I3cxOS1uYXZpZ2F0ZS1jb2RlPg0KDQpbRWRpdCAvIChXMjApIFJlZmFjdG9yIENvZGVdDQo8aHR0 cHM6Ly9vY2FtbC5vcmcvdG9vbHMvcGxhdGZvcm0tcm9hZG1hcCN3MjAtcmVmYWN0b3ItY29kZT4N Cg0KW19yZW5hbWVzIHN5bWJvbHMgaW4gdGhlIGVudGlyZSBwcm9qZWN0X10NCjxodHRwczovL2Rp c2N1c3Mub2NhbWwub3JnL3QvYW5uLW1lcmxpbi1hbmQtb2NhbWwtbHNwLXN1cHBvcnQtZXhwZXJp bWVudGFsLXByb2plY3Qtd2lkZS1yZW5hbWluZy8xNjAwOD4NCg0KW21hbnkgbmV3IGZlYXR1cmVz IHRvIHRoZSBWaXN1YWwgU3R1ZGlvIENvZGUgcGx1Z2luXQ0KPGh0dHBzOi8vdGFyaWRlcy5jb20v YmxvZy8yMDI1LTAyLTI4LWZ1bGwtYmxvd24tcHJvZHVjdGl2aXR5LWluLXZzY29kZS13aXRoLW9j YW1sLz4NCg0KW25vdyBhdmFpbGFibGUgb24gTWVscGFdIDxodHRwczovL21lbHBhLm9yZy8jL29j YW1sLWVnbG90Pg0KDQril4ogTWVybGluIGFuZCBPQ2FtbCBMU1AgU2VydmVyDQoNCiAgU3VwcG9y dCBmb3IgcHJvamVjdCB3aWRlIHJlbmFtaW5nLCBzZWFyY2gtYnktdHlwZSwgYW5kDQogIG9jYW1s LWxzcC1zZXJ2ZXIgbm93IGV4cG9zZXMgYWxsIE1lcmxpbiBmZWF0dXJlcyB2aWEgTFNQIGN1c3Rv bQ0KICBxdWVyaWVzLg0KDQogICpOb3RhYmxlIEFjdGl2aXR5Kg0KICDigKIgT0NhbWwgNS4zIHN1 cHBvcnQgKFttZXJsaW4jMTg1MF0pDQogIOKAoiBQcm9qZWN0LXdpZGUgcmVuYW1pbmcgaXMgbm93 IGF2YWlsYWJsZS4gKFtvY2FtbC1sc3AjMTQzMV0gYW5kDQogICAgW21lcmxpbiMxODc3XSkNCiAg 4oCiIEEgbmV3IG9wdGlvbiB0byBtdXRlIGhvdmVyIHJlc3BvbnNlcyBoYXMgYmVlbiBhZGRlZCBm b3IgYmV0dGVyDQogICAgaW50ZWdyYXRpb24gd2l0aCBhbHRlcm5hdGl2ZSBob3ZlciBwcm92aWRl cnMgKFtvY2FtbC1sc3AjMTQxNl0pDQogIOKAoiBOZXcgdHlwZS1iYXNlZCBzZWFyY2ggc3VwcG9y dCBzaW1pbGFyIHRvIEhvb2dsZSAoW29jYW1sLWxzcCMxMzY5XQ0KICAgIGFuZCBbbWVybGluIzE4 MjhdKQ0KDQogICpCdWcgRml4ZXMqDQogIOKAoiBGaXhlZCBjb21wbGV0aW9uIHJhbmdlIGlzc3Vl cyB3aXRoIHBvbHltb3JwaGljIHZhcmlhbnRzDQogICAgKFtvY2FtbC1sc3AjMTQyN10pDQogIOKA oiBGaXhlZCB2YXJpb3VzIGlzc3VlcyB3aXRoIGp1bXAgY29kZSBhY3Rpb25zIGFuZCBhZGRlZCBj dXN0b21pemF0aW9uDQogICAgb3B0aW9ucyAoW29jYW1sLWxzcCMxMzc2XSkNCiAg4oCiIFZhcmlv dXMgZml4ZXMgYW5kIGltcHJvdmVtZW50cyBoYXZlIGJlZW4gbWFkZSB0byBzaWduYXR1cmUgaGVs cCBhbmQNCiAgICBpbmxheSBoaW50cw0KDQoNCiAgW21lcmxpbiMxODUwXSA8aHR0cHM6Ly9naXRo dWIuY29tL29jYW1sL21lcmxpbi9wdWxsLzE4NTA+DQoNCiAgW29jYW1sLWxzcCMxNDMxXSA8aHR0 cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sLWxzcC9wdWxsLzE0MzE+DQoNCiAgW21lcmxpbiMx ODc3XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL21lcmxpbi9wdWxsLzE4Nzc+DQoNCiAgW29j YW1sLWxzcCMxNDE2XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sLWxzcC9wdWxsLzE0 MTY+DQoNCiAgW29jYW1sLWxzcCMxMzY5XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1s LWxzcC9wdWxsLzEzNjk+DQoNCiAgW21lcmxpbiMxODI4XSA8aHR0cHM6Ly9naXRodWIuY29tL29j YW1sL21lcmxpbi9wdWxsLzE4Mjg+DQoNCiAgW29jYW1sLWxzcCMxNDI3XSA8aHR0cHM6Ly9naXRo dWIuY29tL29jYW1sL29jYW1sLWxzcC9pc3N1ZXMvMTQyNz4NCg0KICBbb2NhbWwtbHNwIzEzNzZd IDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2NhbWwtbHNwL3B1bGwvMTM3Nj4NCg0KDQril4og VmlzdWFsIFN0dWRpbyBDb2RlIHBsdWdpbg0KDQogIEFkZGVkIHN1cHBvcnQgZm9yIG1vc3Qgb2Yg dGhlIE1lcmxpbiBmZWF0dXJlcyBoaXN0b3JpY2FsbHkgYXZhaWxiYWxlDQogIHRvIEVtYWNzIGFu ZCBWaW0gdXNlcnMsIHZpYSB0aGUgbmV3IExTUCBjdXN0b20gcmVxdWVzdHMuDQoNCiAgKk5vdGFi bGUgQWN0aXZpdHkqDQoNCiAg4oCiIEltcHJvdmVkIHR5cGVkLW9mLXNlbGVjdGlvbiBmZWF0dXJl LCB3aXRoIGFiaWxpdHkgdG8gZ3JvdyBvciBzaHJpbmsNCiAgICB0aGUgc2VsZWN0aW9uIGFuZCBp bmNyZWFzZSB2ZXJib3NpdHkgKFsjMTY3NV0pLg0KICDigKIgSW1wcm92ZWQganVtcCBuYXZpZ2F0 aW9uIChbIzE2NTRdKSwgc2VhcmNoLWJ5LXR5cGUgKFsjMTYyNl0pDQogIOKAoiBJbXByb3ZlZCB0 eXBlZCBob2xlcyBuYXZpZ2F0aW9uIChbIzE2NjZdKS5naXQgcHVzaCDigJNzZXQtdXBzdHJlYW0N CiAgICBvcmlnaW4gcHVibGlzaF9wbGF0Zm9ybV9uZXdzbGV0dGVyX3E0XzI0DQogIOKAoiBOZXcg c2VhcmNoLWJ5LXR5cGUgY29tbWFuZCAoWyMxNjI2XSkuDQoNCiAgKk9DYW1sIExTUCBTZXJ2ZXIg bWFpbnRhaW5lZCBieToqIFVseXNzZSBHw6lyYXJkIChAdm9vZG9vcywgVGFyaWRlcyksDQogICBY YXZpZXIgVmFuIGRlIFdvZXN0eW5lIChAeHZ3LCBUYXJpZGVzKSwgUnVkaSBHcmluYmVyZyAoQHJn cmluYmVyZywNCiAgIEphbmUgU3RyZWV0KQ0KDQogICpNZXJsaW4gbWFpbnRhaW5lZCBieToqIFVs eXNzZSBHw6lyYXJkIChAdm9vZG9vcywgVGFyaWRlcyksIFhhdmllciBWYW4NCiAgIGRlIFdvZXN0 eW5lIChAeHZ3LCBUYXJpZGVzKQ0KDQoNCiAgWyMxNjc1XSA8aHR0cHM6Ly9naXRodWIuY29tL29j YW1sbGFicy92c2NvZGUtb2NhbWwtcGxhdGZvcm0vcHVsbC8xNjc1Pg0KDQogIFsjMTY1NF0gPGh0 dHBzOi8vZ2l0aHViLmNvbS9vY2FtbGxhYnMvdnNjb2RlLW9jYW1sLXBsYXRmb3JtL3B1bGwvMTY1 ND4NCg0KICBbIzE2MjZdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWxsYWJzL3ZzY29kZS1vY2Ft bC1wbGF0Zm9ybS9wdWxsLzE2MjY+DQoNCiAgWyMxNjY2XSA8aHR0cHM6Ly9naXRodWIuY29tL29j YW1sbGFicy92c2NvZGUtb2NhbWwtcGxhdGZvcm0vcHVsbC8xNjY2Pg0KDQoNCuKXiiBFbWFjcyBz dXBwb3J0DQoNCiAgQSBicmFuZCBuZXcgRW1hY3MgcGx1Z2luIGJhc2VkIG9uIHRoZSBFZ2xvdCBM U1AgY2xpZW50IGlzIG5vdyByZWFkeQ0KICBmb3IgZGFpbHkgdXNhZ2U6IDxodHRwczovL2dpdGh1 Yi5jb20vdGFyaWRlcy9vY2FtbC1lZ2xvdD4uDQoNCg0KKkRvY3VtZW50YXRpb24gVG9vbHMqDQri lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYwNCg0KICAqUm9hZG1hcDoqIFtTaGFyZSAvIChXMjUpIEdlbmVyYXRlIERvY3VtZW50YXRp b25dDQoNCg0KW1NoYXJlIC8gKFcyNSkgR2VuZXJhdGUgRG9jdW1lbnRhdGlvbl0NCjxodHRwczov L29jYW1sLm9yZy90b29scy9wbGF0Zm9ybS1yb2FkbWFwI3cyNS1nZW5lcmF0ZS1kb2N1bWVudGF0 aW9uPg0KDQril4ogT2RvYw0KDQogICpNYWludGFpbmVkIGJ5OiogSm9uIEx1ZGxhbSAoQGpvbmx1 ZGxhbSwgVGFyaWRlcyksIERhbmllbCBCw7xuemxpDQogICAoQGRidWVuemxpKSwgSnVsZXMgQWd1 aWxsb24gKEBqdWxvdywgVGFyaWRlcyksIFBhdWwtRWxsaW90IEFuZ2zDqHMNCiAgIGQnQXVyaWFj IChAcGFuZ2xlc2QsIFRhcmlkZXMpLCBFbWlsZSBUcm90aWdub24gKEBFbWlsZVRyb3RpZ25vbiwN CiAgIFRhcmlkZXMsIHRoZW4gQWhyZWZzKQ0KDQogIFRoZXJlIGlzIG5vdyBhIFtiZXRhIHJlbGVh c2UgZm9yIG9kb2MgM10gdGhhdCB5b3UgY2FuIHRyeSBvdXQgYW5kIGdpdmUNCiAgZmVlZGJhY2sg b24hDQoNCiAgRHVyaW5nIHRoZSBxdWFydGVyLCBvZG9jIGhhcyBiZWVuIG1ha2luZyBzdGVhZHkg cHJvZ3Jlc3MgdG93YXJkIGl0cw0KICAzLjAgcmVsZWFzZSB3aXRoIHNldmVyYWwgbm90YWJsZSBp bXByb3ZlbWVudHM6DQogIOKAoiAqRW5oYW5jZWQgTmF2aWdhdGlvbio6IFRoZSBzaWRlYmFyIGFu ZCBicmVhZGNydW1icyBuYXZpZ2F0aW9uIGhhcw0KICAgICBiZWVuIHVuaWZpZWQgYW5kIGltcHJv dmVkIChbIzEyNTFdKSwgbWFraW5nIHRoZSBkb2N1bWVudGF0aW9uDQogICAgIGhpZXJhcmNoeSBt b3JlIGNvbnNpc3RlbnQgYW5kIGZsZXhpYmxlLiBUaGlzIGFsbG93cyBiZXR0ZXINCiAgICAgb3Jn YW5pemF0aW9uIG9mIG1vZHVsZXMsIHBhZ2VzLCBhbmQgc291cmNlIGZpbGVzIGluIHRoZQ0KICAg ICBkb2N1bWVudGF0aW9uLg0KICDigKIgKkRvY3VtZW50YXRpb24gRmVhdHVyZXMqOiBOZXcgZmVh dHVyZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIE9kb2MgMw0KICAgICAoWyMxMjY0XSksIGluY2x1ZGlu ZzoNCiAgICDigKIgU3VwcG9ydCBmb3IgaW1hZ2VzIHdpdGggZW1iZWRkZWQgYXNzZXRzDQogICAg 4oCiIENyb3NzLXBhY2thZ2UgbGlua2luZyAobGlua2luZyB0byBtb2R1bGVzIGZyb20gZXh0ZXJu YWwgbGlicmFyaWVzKQ0KICDigKIgKlNlYXJjaCBJbnRlZ3JhdGlvbio6IFNoZXJsb2RvYywgdGhl IHNlYXJjaCBmdW5jdGlvbmFsaXR5LCBoYXMgYmVlbg0KICAgICBtZXJnZWQgaW50byB0aGUgbWFp biBvZG9jIGNvZGViYXNlIChbIzEyNjNdKSwgZW5zdXJpbmcgYmV0dGVyDQogICAgIG1haW50ZW5h bmNlIGFuZCBzeW5jaHJvbml6ZWQgcmVsZWFzZXMuDQoNCiAgKk5vdGFibGUgQWN0aXZpdHkqDQog IOKAoiBbT2RvYyAzIEJldGEgUmVsZWFzZV0NCg0KDQogIFtiZXRhIHJlbGVhc2UgZm9yIG9kb2Mg M10NCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tb2RvYy0zLWJldGEtcmVsZWFz ZS8xNjA0Mz4NCg0KICBbIzEyNTFdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb2RvYy9wdWxs LzEyNTE+DQoNCiAgWyMxMjY0XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29kb2MvcHVsbC8x MjY0Pg0KDQogIFsjMTI2M10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vZG9jL3B1bGwvMTI2 Mz4NCg0KICBbT2RvYyAzIEJldGEgUmVsZWFzZV0NCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5v cmcvdC9hbm4tb2RvYy0zLWJldGEtcmVsZWFzZS8xNjA0Mz4NCg0KDQril4ogTWR4IHVwZ3JhZGVk IHRvIE9DYW1sIDUuMw0KDQogICpNYWludGFpbmVkIGJ5OiogTWFyZWsgS3ViaWNhIChATGVvbmlk YXMtZnJvbS1YSVYsIFRhcmlkZXMpLCBUaG9tYXMNCiAgIEdhemFnbmFpcmUgKEBzYW1vaHQsIFRh cmlkZXMpDQoNCiAgV2l0aCBPQ2FtbCA1LjMsIHNvbWUgY29tcGlsZXIgZXJyb3IgbWVzc2FnZXMg Y2hhbmdlZCwgc28gTURYIHdhcw0KICB1cGRhdGVkIHRvIHVzZSBhIG1vcmUgZXhwcmVzc2l2ZSB0 YWcgc3lzdGVtIHRvIGNob29zZSB3aGljaCB2ZXJzaW9uIG9mDQogIHRoZSBjb21waWxlciBjYW4g cnVuIHdoaWNoIGNvZGUgYmxvY2suIFRoaXMgZWZmb3J0IHVuY292ZXJlZCBhIGJ1ZyBpbg0KICB0 aGUgY3VycmVudCBoYW5kbGluZyBvZiBza2lwcGVkIGJsb2NrcyBmb3IgYG1saScgZmlsZXMsIHdo aWNoIHdhcw0KICBmaXhlZC4NCg0KICAqTm90YWJsZSBBY3Rpdml0eSoNCiAg4oCiIE9DYW1sIDUu MyBzdXBwb3J0IChbIzQ1N10pLCBlbnN1cmluZyB0aGUgdG9vbCByZW1haW5zIGNvbXBhdGlibGUN CiAgICB3aXRoIHRoZSBsYXRlc3QgT0NhbWwgcmVsZWFzZXMuDQogIOKAoiBGaXhlZCBlcnJvciBo YW5kbGluZyBmb3Igc2tpcHBlZCBibG9ja3MgaW4gYG1saScgZmlsZXMgKFsjNDYyXSkNCiAg4oCi IEltcHJvdmVkIHN5bnRheCBoaWdobGlnaHRpbmcgKFsjNDYxXSkNCiAg4oCiIEFkZGVkIHN1cHBv cnQgZm9yIG11bHRpcGxlIHZlcnNpb24gbGFiZWxzIChbIzQ1OF0pLCBpbXByb3ZpbmcgdGhlDQog ICAgYWJpbGl0eSB0byB0ZXN0IGNvZGUgYWNyb3NzIGRpZmZlcmVudCBPQ2FtbCB2ZXJzaW9ucy4N Cg0KDQogIFsjNDU3XSA8aHR0cHM6Ly9naXRodWIuY29tL3JlYWx3b3JsZG9jYW1sL21keC9wdWxs LzQ1Nz4NCg0KICBbIzQ2Ml0gPGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFsd29ybGRvY2FtbC9tZHgv cHVsbC80NjI+DQoNCiAgWyM0NjFdIDxodHRwczovL2dpdGh1Yi5jb20vcmVhbHdvcmxkb2NhbWwv bWR4L3B1bGwvNDYxPg0KDQogIFsjNDU4XSA8aHR0cHM6Ly9naXRodWIuY29tL3JlYWx3b3JsZG9j YW1sL21keC9wdWxsLzQ1OD4NCg0KDQoqUGFja2FnZSBNYW5hZ2VtZW50Kg0K4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCuKXiiBP cGFtDQoNCiAgW09wYW0gMi4zLjAgd2FzIHJlbGVhc2VkIGluIE5vdmVtYmVyXS4gV2UgYXJlIG5v dyB3b3JraW5nIHRvd2FyZHMgdGhlDQogIDIuNCByZWxlYXNlLCB3aXRoIHNvbWUgbmV3IHN1YiBj b21tYW5kcyAoYGFkbWluJywgYHNvdXJjZScsIGBzd2l0Y2gnLA0KICBldGMuKSwgZml4ZXMgKHBp bm5pbmcsIHN3aXRjaCwgc29mdHdhcmUgaGVyaXRhZ2UgZmFsbGJhY2ssIFVJKSBhbmQNCiAgZW5o YW5jZW1lbnRzLg0KDQogICpOb3RhYmxlIEFjdGl2aXR5Kg0KICDigKIgQWRkIHNldmVyYWwgY2hl Y2tzdW0sIGBleHRyYS1maWxlcycgYW5kIGBleHRyYS1zb3VyY2UnIGxpbnRzIC0NCiAgICBbIzU1 NjFdDQogIOKAoiBBZGQgb3B0aW9ucyBgb3BhbSBzb3VyY2UgLS1yZXF1aXJlLWNoZWNrc3Vtcycg YW5kIGAtLW5vLWNoZWNrc3VtcycNCiAgICB0byBoYXJtb25pc2Ugd2l0aCBgb3BhbSBpbnN0YWxs JyAtIFsjNTU2M10NCiAg4oCiIEFkZCB0aGUgY3VycmVudCBWQ1MgcmV2aXNpb24gaW5mb3JtYXRp b24gdG8gYG9wYW0gcGluIGxpc3QnIC0NCiAgICBbIzYyNzRdIC0gZml4IFsjNTUzM10NCiAg4oCi IE1ha2Ugb3BhbWZpbGUgcGFyc2luZyBtb3JlIHJvYnVzdCBmb3IgZnV0dXJlIGNoYW5nZXMgLSBb IzYxOTldIC0gZml4DQogICAgWyM2MTg4XQ0KICDigKIgRml4IGBvcGFtIHN3aXRjaCByZW1vdmUg PGRpcj4nIGZhaWx1cmUgd2hlbiBpdCBpcyBhIGxpbmtlZCBzd2l0Y2ggLQ0KICAgIFsjNjI3Nl0g LSBmaXggWyM2Mjc1XQ0KICDigKIgRml4IGBvcGFtIHN3aXRjaCBsaXN0LWF2YWlsYWJsZScgd2hl biBnaXZlbiBzZXZlcmFsIGFyZ3VtZW50cyAtDQogICAgWyM2MzE4XQ0KICDigKIgQ29ycmVjdGx5 IGhhbmRsZSBgcGtnLnZlcnNpb24nIHBhdHRlcm4gaW4gYG9wYW0gc3dpdGNoDQogICAgbGlzdC1h dmFpbGFibGUnIC0gWyM2MTg2XSAtIGZpeCBbIzYxNTJdDQogIOKAoiBGaXggc2FuZGJveCBmb3Ig Tml4T1MgWyM2MzMzXSwgYW5kIGBEVU5FX0NBQ0hFX1JPT1QnIGVudmlyb25tZW50DQogICAgdmFy aWFiYWxlIHVzYWdlIC0gWyM2MzI2XQ0KICDigKIgQWRkIGBvcGFtIGFkbWluIGNvbXBhcmUtdmVy c2lvbnMnIHRvIGVhc2UgdmVyc2lvbiBjb21wYXJpc29uIGZvcg0KICAgIHNhbml0eSBjaGVja3Mg WyM2MTk3XSBhbmQgZml4IGBvcGFtIGFkbWluIGNoZWNrJyBpbiB0aGUgcHJlc2VuY2Ugb2YNCiAg ICBzb21lIHVuZGVmaW5lZCB2YXJpYWJsZXMgLSBbIzYzMzFdIC0gZml4IFsjNjMyOV0NCiAg4oCi IFdoZW4gbG9hZGluZyBhIHJlcG9zaXRvcnksIGRvbuKAmXQgYXV0b21hdGljYWxseSBwb3B1bGF0 ZQ0KICAgIGBleHRyYS1maWxlczonIGZpZWxkIHdpdGggZm91bmQgZmlsZXMgaW4gYGZpbGVzLycg LSBbIzU1NjRdDQogIOKAoiBVcGRhdGUgYW5kIGZpeCBTb2Z0d2FyZSBIZXJpdGFnZSBmYWxsYmFj ayAtIFsjNjAzNl0gLSBmaXggWyM1NzIxXQ0KICDigKIgV2FybiBpZiBhIHJlcG9zaXRvcnkgdG8g cmVtb3ZlIGRvZXNu4oCZdCBleGlzdCAtIFsjNTAxNF0gLSBmaXggWyM1MDEyXQ0KICDigKIgU2ls ZW50bHkgbWFyayBwYWNrYWdlcyByZXF1aXJpbmcgYW4gdW5zdXBwb3J0ZWQgdmVyc2lvbiBvZiBv cGFtIGFzDQogICAgdW5hdmFpbGFibGUgLSBbIzU2NjVdIC0gZml4IFsjNTYzMV0NCiAg4oCiIERp c3BsYXkgc3dpdGNoIGludmFyaWFudCB3aXRoIHRoZSBzYW1lIHN5bnRheCB0aGF0IGl0IGlzIHdy aXR0ZW4gaW4NCiAgICBmaWxlIChubyBwcmV0dHkgcHJpbnRpbmcpIC0gWyM1NjE5XSAtIGZpeCBb IzU0OTFdDQogIOKAoiBGaXggb3V0cHV0IGRpc3BsYXkgcmVnYXJkaW5nIHRlcm1pbmFsIHNpemUg WyM2MjQ0XSAtIGZpeCBbIzYyNDNdDQogIOKAoiBDaGFuZ2UgZGVmYXVsdCBhbnN3ZXIgZGlzcGxh eSAtIFsjNjI4OV0gLSBmaXggWyM2Mjg4XQ0KICDigKIgQWRkIGEgd2FybmluZyB3aGVuIHNldHRp bmcgYSB2YXJpYWJsZSB3aXRoIGBvcGFtIHZhcicgaWYgYW4gb3B0aW9uDQogICAgaXMgc2hhZG93 ZWQgLSBbIzQ5MDRdIC0gZml4IFsjNDczMF0NCiAg4oCiIEltcHJvdmUgdGhlIGVycm9yIG1lc3Nh Z2Ugd2hlbiBhIGRpcmVjdG9yeSBpcyBub3QgYXZhaWxhYmxlIHdoaWxlDQogICAgZmV0Y2hpbmcg dXNpbmcgcnN5bmMgLSBbIzYwMjddDQogIOKAoiBGaXggYGluc3RhbGwuZXhlJyBzZWFyY2ggcGF0 aCBvbiBXaW5kb3dzIC0gWyM2MTkwXQ0KICDigKIgQWRkIGBBTFRMaW51eCcgc3VwcG9ydCBmb3Ig ZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIC0gWyM2MjA3XQ0KICDigKIgTWFrZSBgdW5hbWUnIGluZm9y bWF0aW9uIG1vcmUgcm9idXN0IGFjY3JvcyBkaXRyaWJ1dGlvbnMgLSBbIzYxMjddDQoNCiAgKk1h aW50YWluZWQgYnk6KiBSYWphIEJvdWpiZWwgKEByamJvdSAtIE9DYW1sUHJvKSwgS2F0ZSBEZXBs YWl4DQogICAoQGtpdC10eS1rYXRlLCBBaHJlZnMpLCBEYXZpZCBBbGxzb3BwIChAZHJhMjcsIFRh cmlkZXMpDQoNCg0KICBbT3BhbSAyLjMuMCB3YXMgcmVsZWFzZWQgaW4gTm92ZW1iZXJdDQogIDxo dHRwczovL29jYW1sLm9yZy9jaGFuZ2Vsb2cvMjAyNC0xMS0xMy1vcGFtLTItMy0wPg0KDQogIFsj NTU2MV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy81NTYxPg0KDQogIFsj NTU2M10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy81NTYzPg0KDQogIFsj NjI3NF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82Mjc0Pg0KDQogIFsj NTUzM10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy81NTMzPg0KDQogIFsj NjE5OV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MTk5Pg0KDQogIFsj NjE4OF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MTg4Pg0KDQogIFsj NjI3Nl0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82Mjc2Pg0KDQogIFsj NjI3NV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82Mjc1Pg0KDQogIFsj NjMxOF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MzE4Pg0KDQogIFsj NjE4Nl0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MTg2Pg0KDQogIFsj NjE1Ml0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MTUyPg0KDQogIFsj NjMzM10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MzMzPg0KDQogIFsj NjMyNl0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MzI2Pg0KDQogIFsj NjE5N10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MTk3Pg0KDQogIFsj NjMzMV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MzMxPg0KDQogIFsj NjMyOV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MzI5Pg0KDQogIFsj NTU2NF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy81NTY0Pg0KDQogIFsj NjAzNl0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MDM2Pg0KDQogIFsj NTcyMV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy81NzIxPg0KDQogIFsj NTAxNF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy81MDE0Pg0KDQogIFsj NTAxMl0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy81MDEyPg0KDQogIFsj NTY2NV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy81NjY1Pg0KDQogIFsj NTYzMV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy81NjMxPg0KDQogIFsj NTYxOV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy81NjE5Pg0KDQogIFsj NTQ5MV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy81NDkxPg0KDQogIFsj NjI0NF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MjQ0Pg0KDQogIFsj NjI0M10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MjQzPg0KDQogIFsj NjI4OV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82Mjg5Pg0KDQogIFsj NjI4OF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82Mjg4Pg0KDQogIFsj NDkwNF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy80OTA0Pg0KDQogIFsj NDczMF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy80NzMwPg0KDQogIFsj NjAyN10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MDI3Pg0KDQogIFsj NjE5MF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MTkwPg0KDQogIFsj NjIwN10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MjA3Pg0KDQogIFsj NjEyN10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL2lzc3Vlcy82MTI3Pg0KDQoNCuKX iiBEdW5lLXJlbGVhc2UNCg0KICAqUm9hZG1hcDoqIFtTaGFyZSAvIChXMjYpIFBhY2thZ2UgUHVi bGljYXRpb25dDQoNCiAgRHVuZS1yZWxlYXNlIGhhcyBiZWVuIGltcHJvdmVkIHRvIGJldHRlciBo YW5kbGUgcHVibGlzaGluZyBwYWNrYWdlcw0KICBmcm9tIGN1c3RvbSByZXBvc2l0b3JpZXMgYW5k IHByaXZhdGUgR2l0IHJlcG9zaXRvcmllcy4NCg0KICAqTm90YWJsZSBBY3Rpdml0eSoNCiAg4oCi IFN1cHBvcnQgZm9yIG92ZXJ3cml0aW5nIHRoZSBkZXYtcmVwbyBmaWVsZCB3aGVuIGNyZWF0aW5n IEdpdEh1Yg0KICAgIHRhZ3MvcmVsZWFzZXMgKFsjNDk0XSksIHdoaWNoIGEgdXNlZnVsIGZvciBw cml2YXRlIHByb2plY3RzDQoNCiAgKk1haW50YWluZWQgYnk6KiBUaG9tYXMgR2F6YWduYWlyZSAo QHNhbW9odCwgVGFyaWRlcyksIEV0aWVubmUgTWlsbG9uDQogICAoQGVtaWxsb24sIFRhcmlkZXMp LCBNYXJlayBLdWJpY2EgKEBMZW9uaWRhcy1mcm9tLVhJViwgVGFyaWRlcykNCg0KDQogIFtTaGFy ZSAvIChXMjYpIFBhY2thZ2UgUHVibGljYXRpb25dDQogIDxodHRwczovL29jYW1sLm9yZy90b29s cy9wbGF0Zm9ybS1yb2FkbWFwI3cyNi1wYWNrYWdlLXB1YmxpY2F0aW9uPg0KDQogIFsjNDk0XSA8 aHR0cHM6Ly9naXRodWIuY29tL3RhcmlkZXMvZHVuZS1yZWxlYXNlL3B1bGwvNDk0Pg0KDQoNCuKX iiBPcGFtLXB1Ymxpc2gNCg0KICAqTm90YWJsZSBBY3Rpdml0eSoNCiAg4oCiIEludGVncmF0aW9u IG9mIE9wYW0gQ0kgTGludCBmdW5jdGlvbmFsaXR5IGludG8gYG9wYW0tcHVibGlzaCcNCiAgICAo WyMxNjZdLCBbIzE2NV0pIHRvIHZhbGlkYXRlIHBhY2thZ2VzIGJlZm9yZSBzdWJtaXNzaW9uDQog IOKAoiBBIG5ldyBgLS1wcmUtcmVsZWFzZScgYXJndW1lbnQgYWRkZWQgdG8gaGFuZGxlIHByZS1y ZWxlYXNlIHBhY2thZ2VzDQogICAgY29ycmVjdGx5IChbIzE2NF0pDQoNCiAgKk1haW50YWluZWQg Ynk6KiBSYWphIEJvdWpiZWwgKEByamJvdSAtIE9DYW1sUHJvKSwgS2F0ZSBEZXBsYWl4DQogICAo QGtpdC10eS1rYXRlLCBBaHJlZnMpDQoNCg0KICBbIzE2Nl0gPGh0dHBzOi8vZ2l0aHViLmNvbS9v Y2FtbC1vcGFtL29wYW0tcHVibGlzaC9wdWxsLzE2Nj4NCg0KICBbIzE2NV0gPGh0dHBzOi8vZ2l0 aHViLmNvbS9vY2FtbC1vcGFtL29wYW0tcHVibGlzaC9pc3N1ZXMvMTY1Pg0KDQogIFsjMTY0XSA8 aHR0cHM6Ly9naXRodWIuY29tL29jYW1sLW9wYW0vb3BhbS1wdWJsaXNoL3B1bGwvMTY0Pg0KDQoN Ck90aGVyIE9DYW1sIE5ld3MNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkA0KDQpGcm9tIHRoZSBvY2FtbC5vcmcgYmxvZw0K4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAg SGVyZSBhcmUgbGlua3MgZnJvbSBtYW55IE9DYW1sIGJsb2dzIGFnZ3JlZ2F0ZWQgYXQgW3RoZSBv Y2FtbC5vcmcNCiAgYmxvZ10uDQoNCiAg4oCiIFtGdWxsIGJsb3duIHByb2R1Y3Rpdml0eSBpbiBW U0NvZGUgd2l0aCBPQ2FtbF0NCg0KDQpbdGhlIG9jYW1sLm9yZyBibG9nXSA8aHR0cHM6Ly9vY2Ft bC5vcmcvYmxvZy8+DQoNCltGdWxsIGJsb3duIHByb2R1Y3Rpdml0eSBpbiBWU0NvZGUgd2l0aCBP Q2FtbF0NCjxodHRwczovL3RhcmlkZXMuY29tL2Jsb2cvMjAyNS0wMi0yOC1mdWxsLWJsb3duLXBy b2R1Y3Rpdml0eS1pbi12c2NvZGUtd2l0aC1vY2FtbD4NCg0KDQpPbGQgQ1dODQrilZDilZDilZDi lZDilZDilZDilZANCg0KICBJZiB5b3UgaGFwcGVuIHRvIG1pc3MgYSBDV04sIHlvdSBjYW4gW3Nl bmQgbWUgYSBtZXNzYWdlXSBhbmQgSSdsbCBtYWlsDQogIGl0IHRvIHlvdSwgb3IgZ28gdGFrZSBh IGxvb2sgYXQgW3RoZSBhcmNoaXZlXSBvciB0aGUgW1JTUyBmZWVkIG9mIHRoZQ0KICBhcmNoaXZl c10uDQoNCiAgSWYgeW91IGFsc28gd2lzaCB0byByZWNlaXZlIGl0IGV2ZXJ5IHdlZWsgYnkgbWFp bCwgeW91IG1heSBzdWJzY3JpYmUNCiAgdG8gdGhlIFtjYW1sLWxpc3RdLg0KDQogIFtBbGFuIFNj aG1pdHRdDQoNCg0KW3NlbmQgbWUgYSBtZXNzYWdlXSA8bWFpbHRvOmFsYW4uc2NobWl0dEBwb2x5 dGVjaG5pcXVlLm9yZz4NCg0KW3RoZSBhcmNoaXZlXSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1l Lm5ldC9jd24vPg0KDQpbUlNTIGZlZWQgb2YgdGhlIGFyY2hpdmVzXSA8aHR0cHM6Ly9hbGFuLnBl dGl0ZXBvbW1lLm5ldC9jd24vY3duLnJzcz4NCg0KW2NhbWwtbGlzdF0gPGh0dHBzOi8vc3ltcGEu aW5yaWEuZnIvc3ltcGEvaW5mby9jYW1sLWxpc3Q+DQoNCltBbGFuIFNjaG1pdHRdIDxodHRwczov L2FsYW4ucGV0aXRlcG9tbWUubmV0Lz4NCg0K --=-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week<= /a> Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of February 25 to March = 04, 2025.

Bytecode debugging in OCaml 5.3

Continuing this thread, Henry Till said

Chet Murthy also said

For those who (like me) have always been perplexed when they try to use oca= mldebug, b/c it just doesn't seem to work like gdb or perl's debugger, or a= ny other debugger I've tried, this video was immensely helpful.

http= s://www.youtube.com/watch?v=3DDGvJk14sfi8&t=3D724s

Specifically, I learned that at the beginning of the program, to set a brea= kpoint in the main program file, I need to do something like (for a file "e= xtract_environments.ml", and line 79):

break @extract_environments 79

That was blocking me FOREVER, b/c holy cow there's a ton of initialization,= and I just didn't know how to run thru all that and get to the first meani= ngful line of my main program.

Now I do. I can move forward from here with ocamldebug. Finally!

Zanuda – OCaml linter experiment

Kakadu announced

I'm using this linter for teaching for two years, and I'm very happy that I= implemented it. Student's code is much less annoying to read :slight_smile= :=20

Release 1.1.0

  • #22: Add 'reviewer' tool to report lint's a Github review.
  • #13: Discourage matching a tuple using 'match' expression with single branch

    match x with=
     (a,b) -> ...
    
  • #18: Warn about unneeded mutually recursive types
  • #23: Implement a trial version of the Fix module for auto-correction of= lints. It produces a diff that could be applied later. Dune support is lacking
  • Add command line switch '-skip-level-allow <bool>' to enable/disa= ble lints with level=3DAllow. False has higher priority than per-lint command line sw= itch (for example, -no-string_concat)
  • #28: Warn about too many nested if expressions.
  • #32: Warn about constructor names that hide default constructor names
  • #35: Detect manual implementations of List.map/fold functions
  • #50: Propose eta reduction when available
  • #51: Warn about pattern matching on boolean values
  • #53: Warn about "%s" in formatted strings
  • #54: Detection of unused public declarations in .mli file.
  • #56: Simplify lint about missing license. We look for required doc-comm= ents anywhere in the file, not only in the beginning.
  • #60: Skip some checks for some source files (configured via '.zanuda' c= onfig file).
  • #15: Split 'string_concat' lint to check separately patterns 'a^b^c' (l= evel=3DAllow) and 'List.fold_left (^)' (level=3DWarn).

QCheck 0.24

Jan Midtgaard announced

I'm happy to announce the 0.24 release of qcheck, qcheck= -core, qcheck-alcotest, and qcheck-ounit, = along with a 0.6 release of ppx_deriving_qcheck :tada:=20

QCheck is a library for randomized property-based testing, ins= pired by Haskell's seminal QuickCheck library. The 0.24 release contains a = range of improvements to the integrated shrinking of QCheck2, = initially introduced in the 0.18 release. As a consequence, its shrinking a= lgorithms should act more predictably, reduce faster, and report smaller co= unterexamples. In essence, the 0.24 release is what we hoped 0.18 would be.= The release also adds missing result, int32, and= int64 combinators, as well as more documentation.

If you've previously given QCheck2's integrated shrinking a sp= in, I encourage you to try it again with the patched 0.24 release. For new = users, the 0.24 release is also a good candidate to check out! :smiley: Please share any problems you encounter on the qcheck repo: https://github.com/c-cube/qcheck=

Full change log:

  • [qcheck-alcotest] Add an optional speed_level parameter to= to_alcotest
  • Adjust the QCheck2.Gen.list shrinker to produce minimal co= unterexamples at size 3 too
  • Replace the QCheck2 OCaml 4 Random.State.split hack with a faster one
  • Improve the QCheck2.Gen.list shrinker heuristic and utiliz= e the improved shrinker in other QCheck2 {list,array,byt= es,string,function}* shrinkers
  • Use split and copy in Random.State underlying QCheck2 to avoid non-deterministic shrinking beh= aviour
  • Add missing documentation strings for QCheck.{Print,Iter,Shrink,G= en} and QCheck2.Gen.
  • Add result combinators to QCheck, QChec= k.{Gen,Print,Shrink,Observable}, and QCheck2.{Gen,Print,Observ= able}.
  • Add missing combinators QCheck{,2}.Print.int{32,64}, QCheck.Gen.int{32,64}, QCheck{,2}.Observable.int{32,64}, and deprecate QCheck.Gen.{ui32,ui64}
  • Document dune usage in README

Happy testing! :smiley: :keyboard:

Bogue, the OCaml GUI

sanette announced

Dear all,

I=E2=80=99m happy to announce a new version of Bogue, version 20250224, now availble on opam.

The main novelty is a brand new File dialog. It will open a new wind= ow (or popup) which will let the user navigate the file system and select o= ne or more files or directories.

This corresponds to the new File module.

You might also be interested in the Monitor submodule, which implements a fi= le monitoring API based on fswatch (if available) or Unix.stat.=20

If you are curious, here is a graphical summary of the current functionalit= ies of Bogue's file dialog (I hope that more will be added soon; I'm open t= o suggestions)

3D"b6efbe5eb40237db=

PS: @Sachindra_Ragul, yes we did it finally ;) better late than never

Opam repository archival - next phase

Hannes Mehnert announced

Dear everyone,

sorry for the silence – the phase 3 of the opam repository archival = (taking the x-maintenance-intent into account) has to be delayed by (tentat= ively) one month. The reason is that our tooling is not ready - the task, g= iven an opam repository and maintenance-intent on packages, which can be sa= fely archived, is harder than it seems:

  • we've to take compiler versions into account
  • there may be a package X in version 1 and 2, both supporting OCaml 4.08= , but depend on package Y (where X.1 depends on Y >=3D 1, and X.2 depend= s on Y >=3D 2) – now Y.1 could support OCaml 4.08, and Y.2 only O= Caml 4.12 – so it is not safe to archive X.1 (since on OCaml 4.08 th= ere won't be any X installable). And this may be deeply nested in the depen= dency chain

It is useful if you mark your packages with x-maintenance-intent (as mentioned in https://discuss.ocaml.org/t/opam-= repository-archive-clarification-of-the-opam-fields).

We'll let you know once we have tooling in place to cope with the task desc= ribed above (development is happening here: https://github.com/hannesm/maintenance-in= tent-filter).

Upcoming Cmdliner 2.0 changes that need your attention

Daniel B=C3=BCnzli announced

If you are a user of cmdliner note that cmdliner 2.0 =E2=80=93= in exchange for auto-completion support =E2=80=93 will remove the ability = to specify command and options names by unambiguous prefixes according to <= a href=3D"https://github.com/dbuenzli/cmdliner/issues/200">this plan of act= ion.=20

If you are horrified by it please chime in on the issue.

OCaml Editors Plugins Survey

PizieDust announced

Hello, we are conducting a short survey to better understand how you use th= e different editor plugins available for OCaml. Please take a few minutes (= ideally 5) to fill out the form.=20

https://docs.google.com/forms/d/e/1FAIpQLSfGGFZBiw4PF7L0yt2DBX8443G5_7= aFL5v6wvo6p5MwL-DW8Q/viewform?usp=3Dpp_url&entry.454013858=3DDiscuss

Thank you :) :camel:

Dune dev meeting

Etienne Marais announced

Hi everyone :camel:=20

The next Dune Dev Meeting will be on Wednesday, March, 5th at 9:00 CET. This is going to be a one-hour-long meeting.

Whether you are a maintainer, a regular contributor, a new joiner or just c= urious, you are welcome to join: these discussions are opened! The goal of = these meetings is to provide a place to discuss the ongoing work together a= nd synchronize with the Dune developers :smile:=20

The agenda is available on the meeting dedicated page. Feel free to add more= items in it.

Platform Newsletter: September - December 2024

Sabine Schmaltz announced

Welcome to the thirteenth edition of the OCaml Platform newsletter!

In this September-December 2024 edition, we are excited to bring you the la= test on the OCaml Platform, continuing our tradition of highlighting recent= developments as seen in previous editions. To understand the direction we're headed= , especially regarding development workflows and user experience improvemen= ts, check out our roadm= ap.

Highlights:

Feature Guides & Announcements:

Releases:

Dune

Roadmap: Develop / (W4) Build a Project

Dune 3.17 was r= eleased with significant improvements to package management. Key featur= es include binary distribution support, better error messages for missing p= ackages, and Windows support without requiring OPAM.

The Dune Developer Preview website now provides editor setup instructions and package management tutorials.

Dune's package management features w= ere tested across hundreds of packages in the opam repository, and a co= verage tool was developed to track build success rates. For local developme= nt, Dune added support for building dependencies via @pkg-install, caching for package builds, and automated binary builds of development= tools. The system supports both monorepo and polyrepo workflows, with opti= ons for installing individual dependencies or complete development environm= ents.

The addition of Wasm_o= f_ocaml support in Dune opens new possibilities for OCaml projects targ= eting the web or other WebAssembly runtimes.=20

Activities:

Maintained by: Rudi Grinberg (@rgrinberg, Jane Street), Nicol=C3=A1s= Ojeda B=C3=A4r (@nojb, LexiFi), Marek Kubica (@Leonidas-from-XIV, Tarides)= , Etienne Millon (@emillon, Tarides), Stephen Sherratt (@gridbugs, Tarides)= , Antonio Nuno Monteiro (@anmonteiro)

Editor Tools

Roadmap: Edit / (W19) Navigate Code, Edit / (W20) Refactor Code

Developer tooling received substantial upgrades during the end of last year= and the beginning 2025. A major milestone for project-wide features has be= en reached with the release of OCaml 5.3: LSP's renaming feature now renames symbols = in the entire project if the index is built. Additionally, all o= f the classic merlin-server commands are now available as LSP custom reques= ts: this enabled the addition of many new features to th= e Visual Studio Code plugin and the creation of a brand new Emacs mode,= based on LSP, now available on= Melpa.

These features bring OCaml editor support closer to modern IDE capabilities= , with implementations available across multiple editors.

  • Merlin and OCaml LSP Server

    Support for project wide renaming, search-by-type, and ocaml-lsp-server now= exposes all Merlin features via LSP custom queries.

    Notable Activity

    Bug Fixes

    • Fixed completion range issues with polymorphic variants (ocaml-lsp#1427)
    • Fixed various issues with jump code actions and added customization opt= ions (ocaml-lsp#13= 76)
    • Various fixes and improvements have been made to signature help and inl= ay hints
  • Visual Studio Code plugin

    Added support for most of the Merlin features historically availbale to Ema= cs and Vim users, via the new LSP custom requests.=20

    Notable Activity

    • Improved typed-of-selection feature, with ability to grow or shrink the= selection and increase verbosity (#1675).
    • Improved jump navigation (#1654), search-by-type (#1626)
    • Improved typed holes navigation (#1666).git push –set-upstream= origin publish_platform_newsletter_q4_24
    • New search-by-type command (#1626).

    OCaml LSP Server maintained by: Ulysse G=C3=A9rard (@voodoos, Taride= s), Xavier Van de Woestyne (@xvw, Tarides), Rudi Grinberg (@rgrinberg, Jane= Street)

    Merlin maintained by: Ulysse G=C3=A9rard (@voodoos, Tarides), Xavier= Van de Woestyne (@xvw, Tarides)

  • Emacs support

    A brand new Emacs plugin based on the Eglot LSP client is now ready for dai= ly usage: https://github= .com/tarides/ocaml-eglot.

Documentation Tools

  • Odoc

    Maintained by: Jon Ludlam (@jonludlam, Tarides), Daniel B=C3=BCnzli = (@dbuenzli), Jules Aguillon (@julow, Tarides), Paul-Elliot Angl=C3=A8s d'Au= riac (@panglesd, Tarides), Emile Trotignon (@EmileTrotignon, Tarides, then = Ahrefs)=20

    There is now a beta release for odoc 3 that you can try out and give feedbac= k on!

    During the quarter, odoc has been making steady progress toward its 3.0 rel= ease with several notable improvements:

    • Enhanced Navigation: The sidebar and breadcrumbs navigation has = been unified and improved (#1251), making the documentation hierarchy more consistent and flex= ible. This allows better organization of modules, pages, and source files i= n the documentation.
    • Documentation Features: New features have been added to Odoc 3 (= #1264), including:
      • Support for images with embedded assets
      • Cross-package linking (linking to modules from external libraries)
    • Search Integration: Sherlodoc, the search functionality, has bee= n merged into the main odoc codebase (#1263), ensuring better maintenance and synchronized rel= eases.

    Notable Activity

  • Mdx upgraded to OCaml 5.3

    Maintained by: Marek Kubica (@Leonidas-from-XIV, Tarides), Thomas Ga= zagnaire (@samoht, Tarides)

    With OCaml 5.3, some compiler error messages changed, so MDX was updated to= use a more expressive tag system to choose which version of the compiler c= an run which code block. This effort uncovered a bug in the current handlin= g of skipped blocks for mli files, which was fixed.

    Notable Activity

    • OCaml 5.3 support (#457), ensuring the tool remains compatible with the latest OCam= l releases.
    • Fixed error handling for skipped blocks in mli files (#462)
    • Improved syntax highlighting (#461)
    • Added support for multiple version labels (#458), improving the ability to test cod= e across different OCaml versions.

Package Management

Other OCaml News

From the ocaml.org blog

Here are links from many OCaml blogs aggregated at the ocaml.org blog.

Old CWN

If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a loo= k at the archive or the <= a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive= s.

If you also wish to receive it every week by mail, you may subscribe to the= caml-list.

--=-=-=--