From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Mikael Djurfeldt Newsgroups: gmane.lisp.guile.devel,gmane.lisp.guile.user Subject: Keywords in GOOPS methods v2 Date: Sun, 24 Nov 2024 15:40:09 +0100 Message-ID: Reply-To: mikael@djurfeldt.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000646f750627a998de" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="36343"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Jan Nieuwenhuizen , Tomas Volf <~@wolfsden.cz>, Maxime Devos , David Pirotte , Mikael Djurfeldt To: guile-user , guile-devel , =?UTF-8?Q?Ludovic_Court=C3=A8s?= , Andy Wingo Original-X-From: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Sun Nov 24 15:40:53 2024 Return-path: Envelope-to: guile-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1tFDnA-0009Lo-Pf for guile-devel@m.gmane-mx.org; Sun, 24 Nov 2024 15:40:52 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tFDmm-0005Nf-QV; Sun, 24 Nov 2024 09:40:28 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tFDmk-0005NL-7X; Sun, 24 Nov 2024 09:40:26 -0500 Original-Received: from mail-ua1-f43.google.com ([209.85.222.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tFDmh-0005G7-V4; Sun, 24 Nov 2024 09:40:25 -0500 Original-Received: by mail-ua1-f43.google.com with SMTP id a1e0cc1a2514c-856e82a32bcso1261387241.1; Sun, 24 Nov 2024 06:40:21 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732459220; x=1733064020; h=cc:to:subject:message-id:date:from:reply-to:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=L9rbczw591ECIIu/Xs38GiKx9rQXdve0OCsGFsxhD1c=; b=uM9ICqyv6gZa00VaSzTfueLVwT14lX4judJHIrPM+1ae0p9mb/jgYYzcPHpSq9tBfA RUQgz6jjKTl1gNnRCtEFYwDWRctVm8B79siqBeZCUfr1Kbv1COukKbAcmKz89jwSNoGM HWy1kT1sv7lvsuDj0eivmo1zKo44WmL9vCsl0wfBg+8C78m2gxKNrverv1Kv7SrnRuGq rcH9ou8HIOfLniKU+GLC+CE0fHMbQo5yKfywt0BhGhbcznnM2/hB5zUN3Q9ww7nJWuJi dPQQWbORJgzYGhUanHdZtWux28jU8TyMWMftkLa7ZivCav2sNV/3N927uSdqrTZDbUzz F+tg== X-Forwarded-Encrypted: i=1; AJvYcCV9Y/OmS+H1xr+FrxdJp11Ar7vfJ9eSA0xdtFA8AecQl6fH7idRvHyPAdg0FDpuHPTZwdwTvg==@gnu.org, AJvYcCVtkM7rg5y2zPFQ2pxF4hRQTw9GNhuuiyPT2tHRn7tVaQp6j0r74E/TFvflVgjB7gJny3JgRNN0BDnIaQ==@gnu.org X-Gm-Message-State: AOJu0Yz/JY7mIKrsfQbI3GYK3IpK/G9MtlvMRDj3QMTDiiOMH3N7lE6t g+Nu2lzG8riVbpgOblvN2OC64/ak1ccYt7HbBgH95hpta60f/ZfyNWZo2Hhv4QLDPsSg30vaVQL +P/3BW1F8odbbhKrqPSgHek0hMdRr4tbx X-Gm-Gg: ASbGncs5XSJLUedSgt4YuXc36r5RFG6ypzgkll31BuO+xFZUzfikAAhUXXcWKn/T/wH 6f3hFxxjsIJX/e4uLTrhO6slFuOfmrM4g X-Google-Smtp-Source: AGHT+IFU93OgeBnQ4cVOciCvKPKCqVNOEQgYaNcfe1uviWWMZEXdovzFCE5BP+gVi9i852BT0H9iQxfLHdTT/v451Yo= X-Received: by 2002:a05:6102:5486:b0:4af:e16:aeb6 with SMTP id ada2fe7eead31-4af0e16b006mr2853146137.0.1732459219929; Sun, 24 Nov 2024 06:40:19 -0800 (PST) Received-SPF: pass client-ip=209.85.222.43; envelope-from=mdjurfeldt@gmail.com; helo=mail-ua1-f43.google.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.93, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Original-Sender: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.devel:22794 gmane.lisp.guile.user:19920 Archived-At: --000000000000646f750627a998de Content-Type: multipart/alternative; boundary="000000000000646f700627a998dc" --000000000000646f700627a998dc Content-Type: text/plain; charset="UTF-8" This is my second attempt at introducing keyword aware methods in GOOPS. I was split but finally decided to go with keeping keyword non-aware define-method and method and introducing keyword aware new syntax method* and define-method*. Arguments are: 1. It preserves simplicity in method and define-method such that other implementations (like guile-hoot) can choose to only define these (and possibly provide something like Mark's macro doe define-method*). 2. It aligns with lambda* and define*. 3. It is somewhat better at protecting backward compatibility. 4. It preserves the option to also in the internal implementation use something like Mark's macro once this gives equal performance. I've also committed these changes to https://github.com/mdjurfeldt/guile/tree/goops-keyword I'm going to start documenting this now and will then commit it to the Guile repo. Best regards, Mikael --000000000000646f700627a998dc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
This is my second attempt at introducing keyword awar= e methods in GOOPS.

I was split but finally decide= d to go with keeping keyword non-aware define-method and method and introdu= cing keyword aware new syntax method* and define-method*. Arguments are:

1. It preserves simplicity in method and define-= method such that other implementations (like guile-hoot) can choose to only= define these (and possibly provide something like Mark's macro doe def= ine-method*).
2. It aligns with lambda* and define*.
3.= It is somewhat better at protecting backward compatibility.
4. I= t preserves the option to also in the internal implementation use something= like Mark's macro once this gives equal performance.

I've also committed these changes to

<= a href=3D"https://github.com/mdjurfeldt/guile/tree/goops-keyword">https://g= ithub.com/mdjurfeldt/guile/tree/goops-keyword

= I'm going to start documenting this now and will then commit it to the = Guile repo.

Best regards,
Mikael

--000000000000646f700627a998dc-- --000000000000646f750627a998de Content-Type: text/x-patch; charset="US-ASCII"; name="goops-kw-patch-2.patch" Content-Disposition: attachment; filename="goops-kw-patch-2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m3vp7cdd0 ZGlmZiAtLWdpdCBhL21vZHVsZS9vb3AvZ29vcHMuc2NtIGIvbW9kdWxlL29vcC9nb29wcy5zY20K aW5kZXggOGVkNjg2OTRjLi4wMWJmMTYxMmUgMTAwNjQ0Ci0tLSBhL21vZHVsZS9vb3AvZ29vcHMu c2NtCisrKyBiL21vZHVsZS9vb3AvZ29vcHMuc2NtCkBAIC0zMyw5ICszMywxMCBAQAogICAjOnVz ZS1tb2R1bGUgKChsYW5ndWFnZSB0cmVlLWlsIHByaW1pdGl2ZXMpCiAgICAgICAgICAgICAgICAg OnNlbGVjdCAoYWRkLWludGVyZXN0aW5nLXByaW1pdGl2ZSEpKQogICAjOmV4cG9ydC1zeW50YXgg KGRlZmluZS1jbGFzcyBjbGFzcyBzdGFuZGFyZC1kZWZpbmUtY2xhc3MKLSAgICAgICAgICAgICAg ICAgICAgZGVmaW5lLWdlbmVyaWMgZGVmaW5lLWFjY2Vzc29yIGRlZmluZS1tZXRob2QKKyAgICAg ICAgICAgICAgICAgICAgZGVmaW5lLWdlbmVyaWMgZGVmaW5lLWFjY2Vzc29yCisgICAgICAgICAg ICAgICAgICAgIGRlZmluZS1tZXRob2QgZGVmaW5lLW1ldGhvZCoKICAgICAgICAgICAgICAgICAg ICAgZGVmaW5lLWV4dGVuZGVkLWdlbmVyaWMgZGVmaW5lLWV4dGVuZGVkLWdlbmVyaWNzCi0gICAg ICAgICAgICAgICAgICAgIG1ldGhvZCkKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kIG1ldGhv ZCopCiAgICM6ZXhwb3J0ICggOzsgVGhlIHJvb3Qgb2YgZXZlcnl0aGluZy4KICAgICAgICAgICAg IDx0b3A+CiAgICAgICAgICAgICA8Y2xhc3M+IDxvYmplY3Q+CkBAIC0yMDI0LDggKzIwMjUsNyBA QCBmdW5jdGlvbi4iCiAgICAgICAgICAgIChlbHNlCiAgICAgICAgICAgICAoYW5kIChtZW1xIChj YXIgc3BlY3MpIChjbGFzcy1wcmVjZWRlbmNlLWxpc3QgKGNhciB0eXBlcykpKQogICAgICAgICAg ICAgICAgICAobHAgKGNkciBzcGVjcykgKGNkciB0eXBlcykpKSkpKSkpKSkKLSAgKGxldCAoKG4g KGxlbmd0aCBhcmdzKSkKLSAgICAgICAgKHR5cGVzIChtYXAgY2xhc3Mtb2YgYXJncykpKQorICAo bGV0ICgodHlwZXMgKG1hcCBjbGFzcy1vZiBhcmdzKSkpCiAgICAgKGxldCBscCAoKG1ldGhvZHMg KGdlbmVyaWMtZnVuY3Rpb24tbWV0aG9kcyBnZikpCiAgICAgICAgICAgICAgKGFwcGxpY2FibGUg JygpKSkKICAgICAgIChpZiAobnVsbD8gbWV0aG9kcykKQEAgLTIwNDIsNiArMjA0MiwzNiBAQCBm dW5jdGlvbi4iCiAoZGVmaW5lICh0b3BsZXZlbC1kZWZpbmUhIG5hbWUgdmFsKQogICAobW9kdWxl LWRlZmluZSEgKGN1cnJlbnQtbW9kdWxlKSBuYW1lIHZhbCkpCiAKKzs7OworOzs7IFRoZSBHT09Q UyBBUEkgd291bGQgaGF2ZSBiZWVuIHNpbXBsZXIgYnkgaW50cm9kdWNpbmcga2V5d29yZCBmb3Jt YWxzCis7OzsgaW4gZGVmaW5lLW1ldGhvZCBpdHNlbGYsIGJ1dCBpbiBvcmRlciB0byBhbGlnbiB3 aXRoIGxhbWJkYSogYW5kCis7OzsgZGVmaW5lKiwgd2UgaW50cm9kdWNlIG1ldGhvZCogYW5kIGRl ZmluZS1tZXRob2QqIGluIHBhcmFsbGVsIHRvCis7OzsgbWV0aG9kIGFuZCBkZWZpbmUtbWV0aG9k LgorOzs7Cis7OzsgVGhlcmUgaXMgc29tZSBjb2RlIHJlcGV0aXRpb24gaGVyZS4gVGhlIG1vdGl2 YXRpb24gZm9yIHRoYXQgaXMgdG8KKzs7OyBwYXkgc29tZSBoZXJlIGluIG9yZGVyIHRvIHNwZWVk IHVwIGxvYWRpbmcgYW5kIGNvbXBpbGF0aW9uIG9mIGxhcmdlcgorOzs7IGNodW5rcyBvZiBHT09Q UyBjb2RlIGFzIHdlbGwgYXMgdG8gbWFrZSBzdXJlIHRoYXQgbWV0aG9kKjpzIGFyZSBhcworOzs7 IGVmZmljaWVudCBhcyBjYW4gYmUuCis7OzsKKzs7OyBBIG1vcmUgZWxlZ2FudCBzb2x1dGlvbiB3 b3VsZCBoYXZlIGJlZW4gdG8gdXNlIHNvbWV0aGluZyBha2luIHRvCis7OzsgTWFyayBILiBXZWF2 ZXJzIG1hY3JvOgorOzs7Cis7OzsgKGRlZmluZS1zeW50YXggZGVmaW5lLW1ldGhvZCoKKzs7OyAg IChsYW1iZGEgKHgpCis7OzsgICAgIChzeW50YXgtY2FzZSB4ICgpCis7OzsgICAgICAgKChfIChn ZW5lcmljIGFyZy1zcGVjIC4uLiAuIHRhaWwpIGJvZHkgLi4uKQorOzs7ICAgICAgICAobGV0LXZh bHVlcyAoKChyZXF1aXJlZC1hcmctc3BlY3Mgb3RoZXItYXJnLXNwZWNzKQorOzs7ICAgICAgICAg ICAgICAgICAgICAgIChicmVhayAoY29tcG9zZSBrZXl3b3JkPyBzeW50YXgtPmRhdHVtKQorOzs7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJyhhcmctc3BlYyAuLi4pKSkpCis7OzsgICAg ICAgICAgI2AoZGVmaW5lLW1ldGhvZCAoZ2VuZXJpYyAjLEByZXF1aXJlZC1hcmctc3BlY3MgLiBy ZXN0KQorOzs7ICAgICAgICAgICAgICAoYXBwbHkgKGxhbWJkYSogKCMsQG90aGVyLWFyZy1zcGVj cyAuIHRhaWwpCis7OzsgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgLi4uKQorOzs7ICAgICAg ICAgICAgICAgICAgICAgcmVzdCkpKSkpKSkKKzs7OworOzs7IFdpdGggdGhlIGN1cnJlbnQgc3Rh dGUgb2YgdGhlIGNvbXBpbGVyLCB0aGlzIHJlc3VsdHMgaW4gc2xvd2VyIGNvZGUKKzs7OyB0aGFu IHRoZSBpbXBsZW1lbnRhdGlvbiBiZWxvdyBzaW5jZSB0aGUgYXBwbHkgY2FsbCBpc24ndCBlbGlt aW5hdGVkLgorOzs7CisKIChkZWZpbmUtc3ludGF4IGRlZmluZS1tZXRob2QKICAgKHN5bnRheC1y dWxlcyAoc2V0dGVyKQogICAgICgoXyAoKHNldHRlciBuYW1lKSAuIGFyZ3MpIGJvZHkgLi4uKQpA QCAtMjA2NCwxMCArMjA5NCw3NiBAQCBmdW5jdGlvbi4iCiAgICAgICAgICAodG9wbGV2ZWwtZGVm aW5lISAnbmFtZSAobWFrZSA8Z2VuZXJpYz4gIzpuYW1lICduYW1lKSkpCiAgICAgICAgKGFkZC1t ZXRob2QhIG5hbWUgKG1ldGhvZCBhcmdzIGJvZHkgLi4uKSkpKSkpCiAKLShkZWZpbmUtc3ludGF4 IG1ldGhvZAotICAobGFtYmRhICh4KQotICAgIChkZWZpbmUgKHBhcnNlLWFyZ3MgYXJncykKLSAg ICAgIChsZXQgbHAgKChscyBhcmdzKSAoZm9ybWFscyAnKCkpIChzcGVjaWFsaXplcnMgJygpKSkK KyhkZWZpbmUtc3ludGF4IGRlZmluZS1tZXRob2QqCisgIChzeW50YXgtcnVsZXMgKHNldHRlcikK KyAgICAoKF8gKChzZXR0ZXIgbmFtZSkgLiBhcmdzKSBib2R5IC4uLikKKyAgICAgKGJlZ2luCisg ICAgICAgKHdoZW4gKG9yIChub3QgKGRlZmluZWQ/ICduYW1lKSkKKyAgICAgICAgICAgICAgICAg KG5vdCAoaXMtYT8gbmFtZSA8YWNjZXNzb3I+KSkpCisgICAgICAgICAodG9wbGV2ZWwtZGVmaW5l ISAnbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuc3VyZS1hY2Nlc3NvcgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoZGVmaW5lZD8gJ25hbWUpIG5hbWUgI2YpICdu YW1lKSkpCisgICAgICAgKGFkZC1tZXRob2QhIChzZXR0ZXIgbmFtZSkgKG1ldGhvZCogYXJncyBi b2R5IC4uLikpKSkKKyAgICAoKF8gKG5hbWUgLiBhcmdzKSBib2R5IC4uLikKKyAgICAgKGJlZ2lu CisgICAgICAgKHdoZW4gKG9yIChub3QgKGRlZmluZWQ/ICduYW1lKSkKKyAgICAgICAgICAgICAg ICAgKG5vdCBuYW1lKSkKKyAgICAgICAgICh0b3BsZXZlbC1kZWZpbmUhICduYW1lIChtYWtlIDxn ZW5lcmljPiAjOm5hbWUgJ25hbWUpKSkKKyAgICAgICAoYWRkLW1ldGhvZCEgbmFtZSAobWV0aG9k KiBhcmdzIGJvZHkgLi4uKSkpKSkpCisKKzs7OyBUaGlzIHNlY3Rpb24gb2YgaGVscGVycyBpcyB1 c2VkIGJ5IGJvdGggdGhlIG1ldGhvZCBhbmQgbWV0aG9kKiBzeW50YXgKKzs7OworKGV2YWwtd2hl biAoZXhwYW5kIGxvYWQgZXZhbCkKKworICAgIDs7IHBhcnNlLWZvcm1hbHMgTUVUSE9ELUZPUk1B TFMKKyAgICA7OworICAgIDs7IHJldHVybiAoRk9STUFMUyBTUEVDSUFMSVpFUlMgS0VZV09SRC1G T1JNQUxTKQorICAgIDs7CisgICAgOzsgRk9STUFMUyBpcyB0aGUgcG9zc2libHkgaW1wcm9wZXIg bGlzdCBvZiBzcGVjaWFsaXphYmxlIGZvcm1hbHMuCisgICAgOzsKKyAgICA7OyBTUEVDSUFMSVpF UlMgaXMgYSBwcm9wZXIgbGlzdCBvZiB0aGUgY29ycmVzcG9uZGluZyBzcGVjaWFsaXplcnMuCisg ICAgOzsgSXRzIGxhc3QgZWxlbWVudCBjb3JyZXNwb25kcyB0byB0aGUgY2RyIG9mIHRoZSBsYXN0 IGVsZW1lbnQgaW4KKyAgICA7OyBNRVRIT0QtRk9STUFMUyBzdWNoIHRoYXQgdGhlIHBvc3NpYmx5 IGltcHJvcGVyIGxpc3QgY29ycmVzcG9uZGluZworICAgIDs7IHRvIEZPUk1BTFMgY2FuIGJlIG9i dGFpbmVkIGJ5IGFwcGx5aW5nIGNvbnMqIHRvIFNQRUNJQUxJWkVSUy4KKyAgICA7OyBUaGUgcmVh c29uIGZvciBoYW5kbGluZyBpdCBsaWtlIHRoaXMgaXMgdGhhdCB0aGUgc3BlY2lhbGl6ZXJzIGFy ZQorICAgIDs7IGVhY2ggZXZhbHVhdGVkIHRvIHRoZWlyIHZhbHVlcyBhbmQgdGhlcmVmb3JlICpt dXN0KiBiZSBwcm92aWRlZAorICAgIDs7IGJ5IGEgY29ucyogaW4gdGhlIChtYWtlIDxtZXRob2Q+ IC4uLikgZXhwcmVzc2lvbi4KKyAgICA7OworICAgIDs7IEtFWVdPUkRfRk9STUFMUyBpcyB0aGUg cGFydCBvZiBNRVRIT0QtRk9STUFMUyB3aGljaCBzdGFydHMgd2l0aCBhCisgICAgOzsga2V5d29y ZCBhbmQgY29ycmVzcG9uZHMgdG8gdGhlIGtleXdvcmQtc3ludGF4IG9mIGxhbWJkYSouIFRoZXNl CisgICAgOzsgYXJlIG5vdCBzcGVjaWFsaXphYmxlICh3aGljaCBhbHNvIGNvcnJlc3BvbmRzIHRv IENMT1MKKyAgICA7OyBmdW5jdGlvbmFsaXR5KS4KKyAgICA7OworICAgIChkZWZpbmUgKHBhcnNl LWtleXdvcmQtZm9ybWFscyBtZXRob2QtZm9ybWFscykKKyAgICAgIChsZXQgbHAgKChscyBtZXRo b2QtZm9ybWFscykgKGZvcm1hbHMgJygpKSAoc3BlY2lhbGl6ZXJzICcoKSkpCisgICAgICAgIChz eW50YXgtY2FzZSBscyAoKQorICAgICAgICAgICgoKGYgcykgLiByZXN0KQorICAgICAgICAgICAo YW5kIChpZGVudGlmaWVyPyAjJ2YpIChpZGVudGlmaWVyPyAjJ3MpKQorICAgICAgICAgICAobHAg IydyZXN0CisgICAgICAgICAgICAgICAoY29ucyAjJ2YgZm9ybWFscykKKyAgICAgICAgICAgICAg IChjb25zICMncyBzcGVjaWFsaXplcnMpKSkKKyAgICAgICAgICAoKGYgLiByZXN0KQorICAgICAg ICAgICAoaWRlbnRpZmllcj8gIydmKQorICAgICAgICAgICAobHAgIydyZXN0CisgICAgICAgICAg ICAgICAoY29ucyAjJ2YgZm9ybWFscykKKyAgICAgICAgICAgICAgIChjb25zICMnPHRvcD4gc3Bl Y2lhbGl6ZXJzKSkpCisgICAgICAgICAgKChmIC4gcmVzdCkKKyAgICAgICAgICAgKGtleXdvcmQ/ IChzeW50YXgtPmRhdHVtICMnZikpCisgICAgICAgICAgIChsaXN0IChyZXZlcnNlIGZvcm1hbHMp CisgICAgICAgICAgICAgICAgIChyZXZlcnNlIChjb25zICMnPHRvcD4gc3BlY2lhbGl6ZXJzKSkg O3RvIGJlIGNvbnMqOmVkCisgICAgICAgICAgICAgICAgIChjb25zICMnZiAjJ3Jlc3QpKSkKKyAg ICAgICAgICAoKCkKKyAgICAgICAgICAgKGxpc3QgKHJldmVyc2UgZm9ybWFscykKKyAgICAgICAg ICAgICAgICAgKHJldmVyc2UgKGNvbnMgIycnKCkgc3BlY2lhbGl6ZXJzKSkKKyAgICAgICAgICAg ICAgICAgJygpKSkgICAgICAgICAgICAgICAgICA7eWVzLCBub3QgIycnKCk7IHVzZWQgaW4gdGVz dHMKKyAgICAgICAgICAodGFpbAorICAgICAgICAgICAoaWRlbnRpZmllcj8gIyd0YWlsKQorICAg ICAgICAgICAobGlzdCAoYXBwZW5kIChyZXZlcnNlIGZvcm1hbHMpICMndGFpbCkKKyAgICAgICAg ICAgICAgICAgKHJldmVyc2UgKGNvbnMgIyc8dG9wPiBzcGVjaWFsaXplcnMpKQorICAgICAgICAg ICAgICAgICAnKCkpKSkpKQorCisgICAgKGRlZmluZSAocGFyc2UtZm9ybWFscyBtZXRob2QtZm9y bWFscykKKyAgICAgIChsZXQgbHAgKChscyBtZXRob2QtZm9ybWFscykgKGZvcm1hbHMgJygpKSAo c3BlY2lhbGl6ZXJzICcoKSkpCiAgICAgICAgIChzeW50YXgtY2FzZSBscyAoKQogICAgICAgICAg ICgoKGYgcykgLiByZXN0KQogICAgICAgICAgICAoYW5kIChpZGVudGlmaWVyPyAjJ2YpIChpZGVu dGlmaWVyPyAjJ3MpKQpAQCAtMjA5OCw0MyArMjE5NCw4NyBAQCBmdW5jdGlvbi4iCiAgICAgICAg ICAgIChhbmQgKGZyZWUtaWRlbnRpZmllcj0/ICMneCBpZCkgaWQpKSkKICAgICAgICAgKF8gI2Yp KSkKIAotICAgIChkZWZpbmUgKGNvbXB1dGUtcHJvY2VkdXJlIGZvcm1hbHMgYm9keSkKKyAgICAo ZGVmaW5lIChjb21wdXRlLXByb2NlZHVyZSBmb3JtYWxzIGtleXdvcmQtZm9ybWFscyBib2R5KQog ICAgICAgKHN5bnRheC1jYXNlIGJvZHkgKCkKICAgICAgICAgKChib2R5MCAuLi4pCi0gICAgICAg ICAod2l0aC1zeW50YXggKChmb3JtYWxzIGZvcm1hbHMpKQotICAgICAgICAgICAjJyhsYW1iZGEg Zm9ybWFscyBib2R5MCAuLi4pKSkpKQotCi0gICAgKGRlZmluZSAoLT5wcm9wZXIgYXJncykKLSAg ICAgIChsZXQgbHAgKChscyBhcmdzKSAob3V0ICcoKSkpCisgICAgICAgICAobGV0ICgoZm9ybWFs cyAoaWYgKG51bGw/IGtleXdvcmQtZm9ybWFscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmb3JtYWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGVuZCBmb3JtYWxzIGtl eXdvcmQtZm9ybWFscykpKSkKKyAgICAgICAgICAgKHdpdGgtc3ludGF4ICgoZm9ybWFscyBmb3Jt YWxzKSkKKyAgICAgICAgICAgICAjYChsYW1iZGEqIGZvcm1hbHMgYm9keTAgLi4uKSkpKSkpCisK KyAgICA7OyAtPmZvcm1hbC1pZHMgRk9STUFMUworICAgIDs7CisgICAgOzsgY29udmVydCBGT1JN QUxTIGludG8gZm9ybWFsLWlkcyBmb3JtYXQsIHdoaWNoIGlzIGEgY2VsbCB3aGVyZSB0aGUKKyAg ICA7OyBjYXIgaXMgdGhlIGxpc3Qgb2YgY2FyOnMgaW4gRk9STUFMUyBhbmQgdGhlIGNkciBpcyB0 aGUgY2RyIG9mIHRoZQorICAgIDs7IGxhc3QgY2VsbCBpbiBGT1JNQUxTLgorICAgIDs7CisgICAg OzsgVGhlIG1vdGl2YXRpb24gZm9yIHRoaXMgZm9ybWF0IGlzIHRvIGRldGVybWluZSBhdCBsb3cg Y29zdCBpZgorICAgIDs7IEZPUk1BTFMgaXMgaW1wcm9wZXIgb3Igbm90IGFuZCB0byBlYXNpbHkg YmUgYWJsZSB0byBnZW5lcmF0ZSB0aGUKKyAgICA7OyBjb3JyZXNwb25kaW5nIG5leHQtbWV0aG9k IGNhbGwuCisgICAgOzsKKyAgICAoZGVmaW5lICgtPmZvcm1hbC1pZHMgZm9ybWFscykKKyAgICAg IChsZXQgbHAgKChscyBmb3JtYWxzKSAob3V0ICcoKSkpCiAgICAgICAgIChzeW50YXgtY2FzZSBs cyAoKQotICAgICAgICAgICgoeCAuIHhzKSAgICAgICAgKGxwICMneHMgKGNvbnMgIyd4IG91dCkp KQotICAgICAgICAgICgoKSAgICAgICAgICAgICAgKHJldmVyc2Ugb3V0KSkKLSAgICAgICAgICAo dGFpbCAgICAgICAgICAgIChyZXZlcnNlIChjb25zICMndGFpbCBvdXQpKSkpKSkKKyAgICAgICAg ICAoKHggLiB4cykgKGxwICMneHMgKGNvbnMgIyd4IG91dCkpKQorICAgICAgICAgICgoKSAgICAg ICAoY29ucyAocmV2ZXJzZSBvdXQpICcoKSkpCisgICAgICAgICAgKHRhaWwgICAgIChjb25zIChy ZXZlcnNlIG91dCkgIyd0YWlsKSkpKSkKKworICAgIDs7IGtleXdvcmQtZm9ybWFsLWlkcyBLRVlX T1JELUZPUk1BTFMKKyAgICA7OworICAgIDs7IHJldHVybiBhIGZvcm0gY29ycmVzcG9uZGluZyB0 byBLRVlXT1JELUZPUk1BTFMgYnV0IHdpdGgKKyAgICA7OyBpZGVudGlmaWVycyBvbmx5IChrZXl3 b3JkcyByZW1vdmVkKSBUaGUgdmFsdWUgcmV0dXJuZWQgaGFzIHRoZQorICAgIDs7IGZvcm1hbHMt aWRzIGZvcm1hdCBhcyBkZXNjcmliZWQgYWJvdmUuCisgICAgOzsKKyAgICA7OyBUaGUgb3V0cHV0 IGlzIHVzZWQgaW4gdGhlIG5leHQtbWV0aG9kIGFwcGxpY2F0aW9uIGZvcm0uCisgICAgOzsKKyAg ICAoZGVmaW5lICgtPmtleXdvcmQtZm9ybWFsLWlkcyBrZXl3b3JkLWZvcm1hbHMpCisgICAgICAo bGV0IGxwICgobHMga2V5d29yZC1mb3JtYWxzKSAob3V0ICcoKSkpCisgICAgICAgIChzeW50YXgt Y2FzZSBscyAoKQorICAgICAgICAgICgoKGYgdmFsKSAuIHJlc3QpCisgICAgICAgICAgIChscCAj J3Jlc3Qgb3V0KSkKKyAgICAgICAgICAoKCM6cmVzdCBmKQorICAgICAgICAgICAoY29ucyAocmV2 ZXJzZSBvdXQpICMnZikpCisgICAgICAgICAgKChmIC4gcmVzdCkKKyAgICAgICAgICAgKGtleXdv cmQ/IChzeW50YXgtPmRhdHVtICMnZikpCisgICAgICAgICAgIChscCAjJ3Jlc3Qgb3V0KSkKKyAg ICAgICAgICAoKGYgLiByZXN0KQorICAgICAgICAgICAobHAgIydyZXN0IChjb25zICMnZiBvdXQp KSkKKyAgICAgICAgICAoKCkKKyAgICAgICAgICAgKGNvbnMgKHJldmVyc2Ugb3V0KSAnKCkpKQor ICAgICAgICAgICh0YWlsCisgICAgICAgICAgIChjb25zIChyZXZlcnNlIG91dCkgIyd0YWlsKSkp KSkKIAotICAgIChkZWZpbmUgKGNvbXB1dGUtbWFrZS1wcm9jZWR1cmUgZm9ybWFscyBib2R5IG5l eHQtbWV0aG9kKQorICAgIChkZWZpbmUgKGNvbXB1dGUtbWFrZS1wcm9jZWR1cmUgZm9ybWFscyBr ZXl3b3JkLWZvcm1hbHMgYm9keSBuZXh0LW1ldGhvZCkKICAgICAgIChzeW50YXgtY2FzZSBib2R5 ICgpCiAgICAgICAgICgoYm9keSAuLi4pCi0gICAgICAgICAod2l0aC1zeW50YXggKChuZXh0LW1l dGhvZCBuZXh0LW1ldGhvZCkpCi0gICAgICAgICAgIChzeW50YXgtY2FzZSBmb3JtYWxzICgpCi0g ICAgICAgICAgICAgKChmb3JtYWwgLi4uKQotICAgICAgICAgICAgICAjJyhsYW1iZGEgKHJlYWwt bmV4dC1tZXRob2QpCi0gICAgICAgICAgICAgICAgICAobGFtYmRhIChmb3JtYWwgLi4uKQotICAg ICAgICAgICAgICAgICAgICAobGV0ICgobmV4dC1tZXRob2QgKGxhbWJkYSBhcmdzCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAobnVsbD8gYXJncykKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWFsLW5leHQtbWV0aG9k IGZvcm1hbCAuLi4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoYXBwbHkgcmVhbC1uZXh0LW1ldGhvZCBhcmdzKSkpKSkKLSAgICAgICAgICAgICAgICAgICAg ICBib2R5IC4uLikpKSkKLSAgICAgICAgICAgICAoZm9ybWFscwotICAgICAgICAgICAgICAod2l0 aC1zeW50YXggKCgoZm9ybWFsIC4uLikgKC0+cHJvcGVyICMnZm9ybWFscykpKQotICAgICAgICAg ICAgICAgICMnKGxhbWJkYSAocmVhbC1uZXh0LW1ldGhvZCkKLSAgICAgICAgICAgICAgICAgICAg KGxhbWJkYSBmb3JtYWxzCi0gICAgICAgICAgICAgICAgICAgICAgKGxldCAoKG5leHQtbWV0aG9k IChsYW1iZGEgYXJncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChpZiAobnVsbD8gYXJncykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGFwcGx5IHJlYWwtbmV4dC1tZXRob2QgZm9ybWFsIC4uLikKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGx5IHJlYWwtbmV4dC1tZXRo b2QgYXJncykpKSkpCisgICAgICAgICAobGV0ICgoZm9ybWFscyAoaWYgKG51bGw/IGtleXdvcmQt Zm9ybWFscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYWxzICAgICA7bWlnaHQg YmUgaW1wcm9wZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIGZvcm1hbHMg a2V5d29yZC1mb3JtYWxzKSkpCisgICAgICAgICAgICAgICAoZm9ybWFsLWlkcworICAgICAgICAg ICAgICAgIChpZiAobnVsbD8ga2V5d29yZC1mb3JtYWxzKQorICAgICAgICAgICAgICAgICAgICAo LT5mb3JtYWwtaWRzIGZvcm1hbHMpCisgICAgICAgICAgICAgICAgICAgIChsZXQgKChrdy1mb3Jt YWwtaWRzICgtPmtleXdvcmQtZm9ybWFsLWlkcyBrZXl3b3JkLWZvcm1hbHMpKSkKKyAgICAgICAg ICAgICAgICAgICAgICA7OyBpbnB1dCBhbmQgcmVzdWx0IGluIGZvcm1hbHMtaWRzIGZvcm1hdAor ICAgICAgICAgICAgICAgICAgICAgIChjb25zIChhcHBlbmQgZm9ybWFscyAoY2FyIGt3LWZvcm1h bC1pZHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIga3ctZm9ybWFsLWlkcykp KSkpKQorICAgICAgICAgICAod2l0aC1zeW50YXggKChuZXh0LW1ldGhvZCBuZXh0LW1ldGhvZCkp CisgICAgICAgICAgICAgKHN5bnRheC1jYXNlIGZvcm1hbHMgKCkKKyAgICAgICAgICAgICAgIChm b3JtYWxzCisgICAgICAgICAgICAgICAgI2AobGFtYmRhIChyZWFsLW5leHQtbWV0aG9kKQorICAg ICAgICAgICAgICAgICAgICAobGFtYmRhKiBmb3JtYWxzCisgICAgICAgICAgICAgICAgICAgICAg KGxldCAoKG5leHQtbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEg YXJncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAobnVsbD8gYXJncykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIywoaWYgKG51bGw/IChjZHIgZm9ybWFs LWlkcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNgKHJlYWwt bmV4dC1tZXRob2QgIyxAKGNhciBmb3JtYWwtaWRzKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgI2AoYXBwbHkgcmVhbC1uZXh0LW1ldGhvZAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjLEAoY2FyIGZvcm1hbC1pZHMp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMsKGNk ciBmb3JtYWwtaWRzKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcHBs eSByZWFsLW5leHQtbWV0aG9kIGFyZ3MpKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYm9k eSAuLi4pKSkpKSkpKSkpCiAKLSAgICAoZGVmaW5lIChjb21wdXRlLXByb2NlZHVyZXMgZm9ybWFs cyBib2R5KQorICAgIChkZWZpbmUgKGNvbXB1dGUtcHJvY2VkdXJlcyBmb3JtYWxzIGtleXdvcmQt Zm9ybWFscyBib2R5KQogICAgICAgOzsgU28sIG91ciB1c2Ugb2YgdGhpcyBpcyBicm9rZW4sIGJl Y2F1c2UgaXQgb3BlcmF0ZXMgb24gdGhlCiAgICAgICA7OyBwcmUtZXhwYW5zaW9uIHNvdXJjZSBj b2RlLiBJdCdzIGVxdWl2YWxlbnQgdG8ganVzdCBzZWFyY2hpbmcKICAgICAgIDs7IGZvciByZWZl cmVudCBpbiB0aGUgZGF0dW1zLiBBaCB3ZWxsLgpAQCAtMjE0MiwyMyArMjI4Miw1NSBAQCBmdW5j dGlvbi4iCiAgICAgICAgIChpZiBpZAogICAgICAgICAgICAgOzsgcmV0dXJuIGEgbWFrZS1wcm9j ZWR1cmUKICAgICAgICAgICAgICh2YWx1ZXMgIycjZgotICAgICAgICAgICAgICAgICAgICAoY29t cHV0ZS1tYWtlLXByb2NlZHVyZSBmb3JtYWxzIGJvZHkgaWQpKQotICAgICAgICAgICAgKHZhbHVl cyAoY29tcHV0ZS1wcm9jZWR1cmUgZm9ybWFscyBib2R5KQorICAgICAgICAgICAgICAgICAgICAo Y29tcHV0ZS1tYWtlLXByb2NlZHVyZSBmb3JtYWxzIGtleXdvcmQtZm9ybWFscyBib2R5IGlkKSkK KyAgICAgICAgICAgICh2YWx1ZXMgKGNvbXB1dGUtcHJvY2VkdXJlIGZvcm1hbHMga2V5d29yZC1m b3JtYWxzIGJvZHkpCiAgICAgICAgICAgICAgICAgICAgICMnI2YpKSkpCisgICAgKQorCisoZGVm aW5lLXN5bnRheCBtZXRob2QKKyAgKGxhbWJkYSAoeCkKKyAgICAoc3ludGF4LWNhc2UgeCAoKQor ICAgICAgKChfIGZvcm1hbHMpICMnKG1ldGhvZCBmb3JtYWxzIChpZiAjZiAjZikpKQorICAgICAg KChfIGZvcm1hbHMgYm9keTAgYm9keTEgLi4uKQorICAgICAgICh3aXRoLXN5bnRheCAoKChmb3Jt YWxzIChzcGVjaWFsaXplciAuLi4pKQorICAgICAgICAgICAgICAgICAgICAgIChwYXJzZS1mb3Jt YWxzICMnZm9ybWFscykpKQorICAgICAgICAgKGNhbGwtd2l0aC12YWx1ZXMKKyAgICAgICAgICAg ICAobGFtYmRhICgpCisgICAgICAgICAgICAgICAoY29tcHV0ZS1wcm9jZWR1cmVzICMnZm9ybWFs cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIycoYm9keTAgYm9keTEgLi4uKSkpCisgICAgICAgICAgIChs YW1iZGEgKHByb2NlZHVyZSBtYWtlLXByb2NlZHVyZSkKKyAgICAgICAgICAgICAod2l0aC1zeW50 YXggKChwcm9jZWR1cmUgcHJvY2VkdXJlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1h a2UtcHJvY2VkdXJlIG1ha2UtcHJvY2VkdXJlKSkKKyAgICAgICAgICAgICAgICNgKG1ha2UgPG1l dGhvZD4KKyAgICAgICAgICAgICAgICAgICAjOnNwZWNpYWxpemVycyAoY29ucyogc3BlY2lhbGl6 ZXIgLi4uKSA7eWVzLCB0aGlzCisgICAgICAgICAgICAgICAgICAgOzsgVGhlIGNvbnMqIGlzIG5l ZWRlZCB0byBnZXQgdGhlIHZhbHVlIG9mIGVhY2gKKyAgICAgICAgICAgICAgICAgICA7OyBzcGVj aWFsaXplci4KKyAgICAgICAgICAgICAgICAgICAjOmZvcm1hbHMgJ2Zvcm1hbHMgO21pZ2h0IGJl IGltcHJvcGVyCisgICAgICAgICAgICAgICAgICAgIzpib2R5ICcoYm9keTAgYm9keTEgLi4uKQor ICAgICAgICAgICAgICAgICAgICM6bWFrZS1wcm9jZWR1cmUgbWFrZS1wcm9jZWR1cmUKKyAgICAg ICAgICAgICAgICAgICAjOnByb2NlZHVyZSBwcm9jZWR1cmUpKSkpKSkpKSkKIAorKGRlZmluZS1z eW50YXggbWV0aG9kKgorICAobGFtYmRhICh4KQogICAgIChzeW50YXgtY2FzZSB4ICgpCi0gICAg ICAoKF8gYXJncykgIycobWV0aG9kIGFyZ3MgKGlmICNmICNmKSkpCi0gICAgICAoKF8gYXJncyBi b2R5MCBib2R5MSAuLi4pCi0gICAgICAgKHdpdGgtc3ludGF4ICgoKGZvcm1hbHMgKHNwZWNpYWxp emVyIC4uLikpIChwYXJzZS1hcmdzICMnYXJncykpKQorICAgICAgKChfIGZvcm1hbHMpICMnKG1l dGhvZCBmb3JtYWxzIChpZiAjZiAjZikpKQorICAgICAgKChfIGZvcm1hbHMgYm9keTAgYm9keTEg Li4uKQorICAgICAgICh3aXRoLXN5bnRheCAoKChmb3JtYWxzIChzcGVjaWFsaXplciAuLi4pIGtl eXdvcmQtZm9ybWFscykKKyAgICAgICAgICAgICAgICAgICAgICAocGFyc2Uta2V5d29yZC1mb3Jt YWxzICMnZm9ybWFscykpKQogICAgICAgICAgKGNhbGwtd2l0aC12YWx1ZXMKICAgICAgICAgICAg ICAobGFtYmRhICgpCi0gICAgICAgICAgICAgICAoY29tcHV0ZS1wcm9jZWR1cmVzICMnZm9ybWFs cyAjJyhib2R5MCBib2R5MSAuLi4pKSkKKyAgICAgICAgICAgICAgIChjb21wdXRlLXByb2NlZHVy ZXMgIydmb3JtYWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMna2V5d29y ZC1mb3JtYWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMnKGJvZHkwIGJv ZHkxIC4uLikpKQogICAgICAgICAgICAobGFtYmRhIChwcm9jZWR1cmUgbWFrZS1wcm9jZWR1cmUp CiAgICAgICAgICAgICAgKHdpdGgtc3ludGF4ICgocHJvY2VkdXJlIHByb2NlZHVyZSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChtYWtlLXByb2NlZHVyZSBtYWtlLXByb2NlZHVyZSkpCi0g ICAgICAgICAgICAgICAjJyhtYWtlIDxtZXRob2Q+CisgICAgICAgICAgICAgICAjYChtYWtlIDxt ZXRob2Q+CiAgICAgICAgICAgICAgICAgICAgIzpzcGVjaWFsaXplcnMgKGNvbnMqIHNwZWNpYWxp emVyIC4uLikKLSAgICAgICAgICAgICAgICAgICAjOmZvcm1hbHMgJ2Zvcm1hbHMKKyAgICAgICAg ICAgICAgICAgICAjOmZvcm1hbHMgKGlmIChudWxsPyAna2V5d29yZC1mb3JtYWxzKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvcm1hbHMgO21pZ2h0IGJlIGltcHJvcGVyCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kICdmb3JtYWxzICdrZXl3b3Jk LWZvcm1hbHMpKQogICAgICAgICAgICAgICAgICAgICM6Ym9keSAnKGJvZHkwIGJvZHkxIC4uLikK ICAgICAgICAgICAgICAgICAgICAjOm1ha2UtcHJvY2VkdXJlIG1ha2UtcHJvY2VkdXJlCiAgICAg ICAgICAgICAgICAgICAgIzpwcm9jZWR1cmUgcHJvY2VkdXJlKSkpKSkpKSkpCg== --000000000000646f750627a998de--