From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Maxime Devos Newsgroups: gmane.lisp.guile.devel Subject: Re: [PATCH v3] docs/match: pattern matcher example makeover Date: Wed, 1 Feb 2023 17:40:23 +0100 Message-ID: <9725d8d9-faf2-3306-94ae-209086aa5a82@telenet.be> References: <20230201130930.6624-1-blake@reproduciblemedia.com> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------l7kyA7lI0ccuXmILFyUNWfcb" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="40916"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 To: Blake Shaw , guile-devel@gnu.org Original-X-From: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Wed Feb 01 17:40:56 2023 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 1pNGAJ-000AQa-T6 for guile-devel@m.gmane-mx.org; Wed, 01 Feb 2023 17:40:56 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pNGA1-0000wP-VH; Wed, 01 Feb 2023 11:40:38 -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 1pNG9z-0000vr-DX for guile-devel@gnu.org; Wed, 01 Feb 2023 11:40:35 -0500 Original-Received: from michel.telenet-ops.be ([2a02:1800:110:4::f00:18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pNG9v-0005vu-9U for guile-devel@gnu.org; Wed, 01 Feb 2023 11:40:35 -0500 Original-Received: from [IPV6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16] ([IPv6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16]) by michel.telenet-ops.be with bizsmtp id FsgR2900C20ykKC06sgRS8; Wed, 01 Feb 2023 17:40:26 +0100 Content-Language: en-US In-Reply-To: <20230201130930.6624-1-blake@reproduciblemedia.com> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r23; t=1675269626; bh=3Z+g+49JZEsLtglkUBtJIMbgN9q06d5Nhfn/FNNe4Kc=; h=Date:To:References:From:Subject:In-Reply-To; b=OF8fPWc5fIUinUsvt58aD4ysVl8/VuIe5qCRUT3EbhfEAj1CDHSS6BJNDCSWyLGzX nBVzkPZz5tTXiiaCdQr5pahWNTpoH+vdN/6Boe+/B2QG7VFjErXjP/RfvYw0moRaXx ZnKSQeYO8TDZqr1XafRVGPuiggZCEw6p+8vIVqKfFXYuJs6xFRkyTDqO+NsgWsRp4M dH/SFPj/L/E7ODyp7fIwPqtlMw+9hVhPUwq4W0ZTJ01cebeO9wtpDTUJ5OG6c30SHG Cqm6qio3Ylx1D5Gf0QvEKAEZqB/WBxp46DtteVpBVGCHxsrImfXCStIsr2m/h9+T6h tRRr+I86m+skQ== Received-SPF: pass client-ip=2a02:1800:110:4::f00:18; envelope-from=maximedevos@telenet.be; helo=michel.telenet-ops.be X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, NICE_REPLY_A=-0.09, RCVD_IN_DNSWL_LOW=-0.7, 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:21671 Archived-At: This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------l7kyA7lI0ccuXmILFyUNWfcb Content-Type: multipart/mixed; boundary="------------2OdqcNZr4V0DMer47fqN53M4"; protected-headers="v1" From: Maxime Devos To: Blake Shaw , guile-devel@gnu.org Message-ID: <9725d8d9-faf2-3306-94ae-209086aa5a82@telenet.be> Subject: Re: [PATCH v3] docs/match: pattern matcher example makeover References: <20230201130930.6624-1-blake@reproduciblemedia.com> In-Reply-To: <20230201130930.6624-1-blake@reproduciblemedia.com> --------------2OdqcNZr4V0DMer47fqN53M4 Content-Type: multipart/mixed; boundary="------------eENdTihUZi1AXC5PisrMu99J" --------------eENdTihUZi1AXC5PisrMu99J Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 DQoNCk9uIDAxLTAyLTIwMjMgMTQ6MDksIEJsYWtlIFNoYXcgd3JvdGU6DQo+ICBbLi4uXQ0K PiAtDQo+IHN0eWxlOiBjbGVhbi11cCBuZXdsaW5lcw0KPiAtLQ0KPiBJdCBhcHBlYXJzIHRo YXQgd2hpbGUgdGhlIFBERiBuZWVkcyBhZGRpdGlvbmFsIG5ld2xpbmVzDQo+IHRvIGJlIHBy ZXNlbnRhYmxlLCB0aGVzZSBhcHBlYXIgdG8gaGF2ZSBhIG5lZ2F0aXZlIGVmZmVjdA0KPiBv biB0aGUgcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXhpbmZvIGRvYy4NCj4gDQo+IEkgZG9uJ3Qg a25vdyBob3cgdG8gZml4IHRoaXMsIGJ1dCBmcm9tIGxvb2tpbmcgYXQgdGhlIFBERiwNCj4g aXQgYXBwZWFycyB0aGF0IHRoZSBzdHJhdGVneSB1bnRpbCBub3cgaGFzIGJlZW4gdG8gcHJp dmlsZWdlDQo+IHRleGluZm8gYXQgdGhlIGV4cGVuc2Ugb2YgUERGIHJlYWRhYmlsaXR5ICh0 aGUgUERGIGlzIG1vcmUNCj4gb3IgbGVzcyAic3F1aXNoZWQgdG9nZXRoZXIiKQ0KPiANCj4g U28gaW4gdGhhdCByZWdhcmQsIHRoZXNlIGVkaXRzIG1ha2UgbXkgcGFzdCBlZGl0cyBtb3Jl IGluIHN5bmMNCj4gd2l0aCBwYXN0IEd1aWxlIGRvY3MuDQoNCklJUkMsIFRleGluZm8gaGFz IGEgQGlmdGV4IEBlbmRpZiBjb25zdHJ1Y3Qgb3Igc3VjaC4gWW91IGNvdWxkIHVzZSB0aGlz IA0KdG8gZGVmaW5lIGEgQHBkZi1uZXdsaW5lIG1hY3JvLCB0byBvbmx5IGluc2VydCBuZXds aW5lcyBpbiB0aGUgUERGIChUZVggDQppcyB1c2VkIGZvciB0aGUgUERGKS4NCj4gLQ0KPiBl eGFtcGxlczogcmVwbGFjZSB3aXRoIGRpZGFjdGljIGV4LiB0aGF0IGNhbiBjb3BpZWQgJiBw YXN0ZWQNCj4gLS0NCj4gVGhlIGV4aXN0aW5nIGV4YW1wbGUgY2FuJ3QgYmUgY29waWVkIGFu ZCBwYXN0ZWQuDQo+IA0KPiBUaGlzIGV4YW1wbGUgYm90aCBmaXhlcyB0aGUgcGFzdCBvbmUg YW5kIGltcHJvdmVzIG9uIGl0cyByZWxhdGlvbg0KPiB0byB0aGUgdGV4dC4NCj4gDQo+IC0N Cj4gc3R5bGU6IHN3aXRjaCB0byAiSW5kaWFuYSBzdHlsZSIsIGJyYWNrZXRpbmcgbGV0cyBh bmQgY2xhdXNlcw0KPiAtLQ0KPiBBZnRlciBzcGVuZGluZyBtdWNoIHRpbWUgbG9va2luZyBh dCB0aGUgZXhhbXBsZXMgaW4gYmxhY2sgJiB3aGl0ZQ0KPiB0byBlZGl0IHRoZSB0ZXhpbmZv IGRvY3VtZW50LCBpdCBvY2N1cnJlZCB0byBtZSBqdXN0IGhvdyBtdWNoIHRoZQ0KPiBicmFj a2V0cyBpbXByb3ZlIGxlZ2liaWxpdHkuIFRoZXJlZm9yZSwgSSBoYXZlIGRlY2lkZWQgdG8g YWRvcHQNCj4gdGhlICJJbmRpYW5hIiBzdHlsZSBvZiB1c2luZyBicmFja2V0cywgdXNlZCBi eSBLZW50IER5YnZpZywgRGFuDQo+IEZyaWVkbWFuIGFuZCBXaWxsIEJ5cmQgYXQgSW5kaWFu YSBVbml2ZXJzaXR5Lg0KPiANCj4gQ3VycmVudGx5IHRoZSBkb2NzIHVzZSB0aGlzIHN0eWxl IGluIHNvbWUgcGxhY2VzIGJ1dCBub3QgaW4gb3RoZXJzLg0KPiANCj4gQ29uc2lkZXJpbmcg c29tZSBhcmUgY29sb3IgYmxpbmQsIGFuZCB0aGF0IGZldyB3aWxsIGhhdmUgcmlnZ2VkDQo+ IHRoZWlyIHRleGluZm8gY29uZmlndXJhdGlvbiB0byB1c2UgcmFpbmJvdy1kZWxpbWl0ZXJz IGluIHRoZSB3aGlsZQ0KPiByZWFkaW5nIGRvY3VtZW50YXRpb24sIEkgdGhpbmsgdGhpcyBz aG91bGQgYmUgY29uc2lkZXJlZCBhIGdlbmVyYWwNCj4gYWNjZXNzaWJpbGl0eSBpbXByb3Zl bWVudC4NCg0KSU1FLCAoKCApKSBpcyBxdWl0ZSByZWFkYWJsZSAoYW5kIEkgZG9uJ3QgdXNl IHJhaW5ib3cgZGVsaW1pdGVycykuDQpUaGF0IG1pZ2h0IGxhcmdlbHkgYmUgJ2R1ZSB0byBl eHBlcmllbmNlJywgdGhvdWdoLiAgV2hpbGUgSSB3b3VsZA0KZXhwZWN0IChbIF0gWyBdKSB0 byBiZSB1bmNvbnZlbnRpb25hbCBmb3IgbWFueSBHdWlsZXJzLCBpdCBzaG91bGQgYmUgDQpy ZWFkYWJsZSB0b28gdGhvdWdoLCBzbyBJIHN1cHBvc2UgaXQgY291bGQgYmUgZ29vZCB0byBq dXN0IGNoYW5nZSB0aGUgDQpjb252ZW50aW9uLCB0aGVuLg0KDQpZb3UgYXJlIGN1cnJlbnRs eSBtYWtpbmcgdGhlIG1hbnVhbCBtb3JlIGluY29uc2lzdGVudCBieSB1c2luZyB0aGlzIChm b3IgDQpHdWlsZSkgbW9zdGx5IG5vbi1zdGFuZGFyZCBub3RhdGlvbiB0aG91Z2g7IElJUkMg dGhlIG1hbnVhbCBtb3N0bHkgZG9lcyANCigoICkpIGFuZCBub3QgKFsgXSkuICBZZXQsIGlu IHRoZSByZXZpZXcgb2YgdGhlIHYxLCB5b3UgbWVudGlvbmVkDQoNCj4gTm8sIEknbSBub3Qs IEknbSBiZWluZyB0b3RhbGx5IGJvcmluZyBhbmQgbm9ybWFsIGluIHRoaXMgcmVnYXJkIGJl Y2F1c2UgY29sbGVjdGl2ZWx5IGF1dGhvcmVkIGRvY3VtZW50YXRpb24gaXMgc29tZXRoaW5n IHlvdSBzaG91bGQgbmV2ZXIgYWRvcHQgbm9uLXN0YW5kYXJkIHdyaXRpbmcgbm90YXRpb24g aW4gdGhlIGNvdXJzZSBvZiBhdXRob3JpbmcsIGp1c3QgdG8gb25lIHVwIHNvbWVvbmUgb24g YSBtYWlsaW5nIGxpc3QNCj4gDQo+IFRvIGJlIGhvbmVzdCwgaXQncyB0aGlzIGtpbmQgb2Yg YXR0aXR1ZGUgdGhhdCBoYXMgcmVzdWx0ZWQgaW4gdGhlIGN1cnJlbnQgZG9jcyB0aGF0IHNv IG1hbnkgcGVvcGxlIGZpbmQgdXR0ZXJseSBpbmNvbXByZWhlbnNpYmxlLiBUaGUgY29yZSBw b2ludCBvZiBteSB0YWxrIHRoYXQgd2hhdCBtYWtlcyBJbmZvIEd1aWxlIHNvIGhhcmQgdG8g cmVhZCBpcyB0aGUgbGFjayBvZiBzdHlsaXN0aWMgY29uc2lzdGVuY3kuIEVkaXRvcnMgYW5k IGVkaXRpbmcgZXhpc3QgZm9yIGEgdmVyeSBnb29kIHJlYXNvbi4NCg0KLCB3aGljaCBpcyB2 ZXJ5IG11Y2ggYWdhaW5zdCBub24tc3RhbmRhcmQgbm90YXRpb24gYW5kIGZvciBjb25zaXN0 ZW5jeS4gDQpBcyBzdWNoLCBJIHByb3Bvc2U6DQoNCiAgIGEpIEJlZm9yZSAob3IgYWZ0ZXIp IHRoaXMgcGF0Y2gsIGNoYW5nZSBldmVyeXRoaW5nIGluIHRoZSBtYW51YWwgdG8NCiAgICAg ICJJbmRpYW5hIHN0eWxlIiwgZm9yIGNvbnNpc3RlbmN5LiAgSWYgeW91IGdvIGZvciAnYWZ0 ZXIgdGhpcw0KICAgICAgcGF0Y2gnLCBJIG1lYW4gaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcywg YmVjYXVzZSBHdWlsZSBjb250cmlidXRvcnMNCiAgICAgIHRlbmQgdG8gY29tZSBhbmQgZ28s IGFuZCBkZWxheWluZyB0aGluZ3MgdGVuZHMgdG8gYmVjb21lIG5ldmVyDQogICAgICBkb2lu ZyB0aGluZ3MuDQoNCiAgIGIpIG9yOiBkbyBpdCBpbiBub24tSW5kaWFuYSBzdHlsZSAobGlr ZWx5IG5vdCB0aGUgb3B0aW9uIHlvdSB3aWxsDQogICAgICB0YWtlLCBidXQgaXQgd291bGQg YmUgbW9yZSBzdHlsaXN0aWNhbGx5IGNvbnNpc3RlbnQgdGhhbiB0aGUNCiAgICAgIGN1cnJl bnQgdmVyc2lvbiBvZiB0aGUgcGF0Y2ggLi4uKQ0KDQogICBjKSBvcjogZG9uJ3QgYWRqdXN0 IGV2ZXJ5dGhpbmcgaW4gdGhlIG1hbnVhbCB0byBJbmRpYW5hIHN0eWxlIHlldCwNCiAgICAg IGJ1dCBhbHNvIG1ha2UgaXQgYSBydWxlIHRoYXQgdGhlIG1hbnVhbCAoYW5kIEd1aWxlIGNv ZGUgaW4gR3VpbGUNCiAgICAgIHByb3BlciwgSSBndWVzcykgZG9lcyBJbmRpYW5hIHN0eWxl LCBhbmQgdGhhdCBhbGwgY3VycmVudA0KICAgICAgZGV2aWF0aW9ucyBmcm9tIEluZGlhbmEg c3R5bGUgYXJlIG9sZCBzdHlsZSB0byBiZSB1cGRhdGVkIGluIHRoZQ0KICAgICAgZnV0dXJl Lg0KDQogICAgICBJZiB0aGlzIHdlcmUgR3VpeCwgeW91IGNvdWxkIG1ha2UgdGhpcyBhIHJ1 bGUgYnkgYWRkaW5nIGl0DQogICAgICB0byB0aGUgIkNvbnRyaWJ1dGluZyIgc2VjdGlvbi4g IEd1aWxlIGRvZXMgbm90IGhhdmUgYXBwZWFyIHRvIGhhdmUNCiAgICAgIHN1Y2ggYSBzZWN0 aW9uLCBidXQgIjEuOCBUeXBvZ3JhaGljYWwgQ29udmVudGlvbnMiIG1pZ2h0IGJlIGEgZ29v ZA0KICAgICAgcGxhY2UuDQoNCkFkZGl0aW9uYWxseSwgY2hhbmdpbmcgdGhlIHBhcmVudGhl c2lzIGNvbnZlbnRpb24gaW4gR3VpbGUgaXMgbm90IGp1c3QgYSANCmNoYW5nZSB0byB0aGUg J21hdGNoJyBkb2N1bWVudGF0aW9uLCBidXQgdGhlIHN1YmplY3QgbGluZSBvbmx5IG1lbnRp b25zIA0KJ21hdGNoJy4gIFdoaWxlIEluZGlhbmEgc3R5bGVzIHNlZW1zIGEgZ29vZCB0aGlu ZyB0byBtZSBhdCBmaXJzdCBzaWdodCANCm5vdyB5b3UgbWVudGlvbiB0aGUgYmVuZWZpdHMs IGl0IG5lZWRzIGEgc2VwYXJhdGUgZS1tYWlsIHRocmVhZCBzdWNoIA0KdGhhdCBwZW9wbGUg aW50ZXJlc3RlZCBpbiAoKS9bXSBzdHVmZiBidXQgbm90IGluICdtYXRjaCcgc3R1ZmYgd2ls bCBoYXZlIA0KYW4gb3Bwb3J0dW5pdHkgdG8gcmVzcG9uZC4NCg0KPiBpbmRlbnRhdGlvbjog bWFrZSBjb25zaXN0ZW50IGFjY29yZGluZyB0byBydWxlIGRlZmluZWQgYmVsb3cNCj4gDQo+ IElmIGEgbmV3IHBhcmFncmFwaCBvcGVucyBvbnRvIGEgbmV3IHRvcGljLCBpdCBzaG91bGQg bmF0dXJhbGx5DQo+IGluZGVudCAoaS5lLCBubyBpbmRlbnRhdGlvbiBtYXJrdXAgaXMgcmVx dWlyZWQpDQo+IA0KPiBJZiBhIG5ldyBwYXJhZ3JhcGggaXMgYSBjb250aW51YXRpb24gb2Yg dGhlIGN1cnJlbnQgc3ViamVjdCwNCj4gdGhlIG1hcmt1cCBAbm9pZGVudCBzaG91bGQgYmUg YXBwbGllZA0KPiANCj4gbWFya3VwOiByZXBsYWNlIEB2YXIgd2l0aCBAY29kZSB1bmxlc3Mg QHZhciBpcyBhIEBkZWZuIGFyZ3VtZW50DQo+IA0KPiBUaGUgd2F5IHRoYXQgaXQgcmVuZGVy cyBpbiB0ZXhpbmZvIG1lYW5zIHRoYXQgaXQgcmVuZGVycyBAdmFycw0KPiBpbiB1cHBlcmNh c2UsIHRoZSB3YXkgdGhhdCBpcyBjb252ZW50aW9uYWxseSBkb25lIGZvciBkZWZpbml0aW9u DQo+IGFyZ3VtZW50cy4NCg0KSSdtIG5vdCB0b28gZmFtaWxpYXIgd2l0aCBUZXhpbmZvIFBE RiBvdXRwdXQgYnV0IEknbGwgdGFrZSB5b3VyIHdvcmQgZm9yIA0KaXQuICBIb3dldmVyLCB0 aGlzIGlzIG5vdCB0aGUgY2FzZSBhdCBsZWFzdCBmb3IgSFRNTCBvdXRwdXQsIGFzIHlvdSBj YW4gDQpzZWUgYXQgDQo8aHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvL21h bnVhbC90ZXhpbmZvL2h0bWxfbm9kZS9fMDA0MHZhci5odG1sPiwgDQpmb3IgSFRNTCBkb2N1 bWVudGF0aW9uIGl0IHJlbWFpbnMgbG93ZXJjYXNlLg0KDQo+IFRoZXJlZm9yZSBJJ3ZlIGNo YW5nZWQgYWxsIEB2YXJzIHRvIEBjb2RlIHVubGVzcyBAdmFyIGlzIGEgQGRlZm4NCj4gYXJn dW1lbnQNCg0KSSdtIG1pc3Npbmcgd2hhdCB5b3UgbWVhbiB3aXRoIHRoZSAnVGhlcmVmb3Jl Jy4gIEhvdyBkb2VzIHRoaXMgcmVsYXRlIHRvIA0KeW91ciBwcmV2aW91cyBwYXJhZ3JhcGgg KEkgZG9uJ3QgZ2V0IHdoYXQgeW91ciBwb2ludCBpcyBhYm91dCANCidkZWZpbml0aW9uIGFy Z3VtZW50cycpPyAgRG8geW91IG1lYW4gdGhhdCB1cHBlcmNhc2UgQHZhciBiYWQgYW5kIHRo YXQgDQppdCBzaG91bGQgYmUgbG93ZXJjYXNlIGluc3RlYWQ/ICBJZiBzbywgaXQgd291bGQg YmUgYmV0dGVyIHRvIG1vZGlmeSANClRleGluZm8gaXRzZWxmIHRvIGxldCBAdmFyIG5vdCBj aGFuZ2UgdGhlIGNhc2UsIHRoZW4gZXZlcnkgbWFudWFsIGluIA0KVGV4aW5mbyB3b3VsZCBi ZW5lZml0IGluc3RlYWQgb2Ygb25seSB0aGUgR3VpbGUgbWFudWFsLg0KDQpBbHNvLCB5b3Ug Y291bGQgYXNrIHRoZSBUZXhpbmZvIHBlb3BsZSBpZiB0aGVyZSBpcyBhIHJlYXNvbiBmb3Ig DQp1cHBlcmNhc2UgQHZhcjsgbWF5YmUgdGhleSBkZXRlcm1pbmVkIHRoYXQgaXQgaXMgbW9y ZSByZWFkYWJsZSB0byBtb3JlIA0KcGVvcGxlIChJJ20ganVzdCBzcGVjdWxhdGluZywgSSBk b24ndCBrbm93IHRoZSByZWFzb24pPyAtLSBQcmVzdW1hYmx5IA0KdGhlcmUncyBzb21lIGdv b2QgcmVhc29uIChvciBtYXliZSBub3QsIEkgZG9uJ3Qga25vdywgYnV0IHlvdSBjb3VsZCBh c2sgDQp0aGVtIGZpcnN0KS4NCg0KT3RoZXJ3aXNlLCBpZiB5b3UgbWFrZSB0aGlzIEd1aWxl LXNwZWNpZmljIGNoYW5nZSwgeW91IHdvdWxkIGNyZWF0ZSANCnN0eWxpc3RpY2FsIGluY29u c2lzdGVuY2llcyBiZXR3ZWVuIHByb2plY3RzIHVzaW5nIFRleGluZm8uICBNb3JlIA0Kc3Bl Y2lmaWNhbGx5LCB5b3UgYXJlIGNyZWF0aW5nIHN0eWxpc3RpY2FsIGluY29uc2lzZW5jaWVz IGJldHdlZW4gR05VIA0KcHJvamVjdHMuDQoNCkFkZGl0aW9uYWxseSwgeW91IGFyZSBub3Qg bWVyZWx5IHJlbW92aW5nIHRoZSB1cHBlcmNhc2luZyB0aGluZywgeW91IGFyZSANCmFsc28g cmVtb3ZpbmcgdGhlICdzbGFudGVkJyB0aGluZyAtLSB0aGUgcmVzdWx0IG9mIEB2YXIgaXMg c2xhbnRlZCANCnR5cGV3cml0ZXIsIHRoZSByZXN1bHQgb2YgQGNvZGUgaXMgbWVyZWx5IHR5 cGV3cml0ZXIsIHdoaWNoIG1ha2VzIGl0IA0Kc2xpZ2h0bHkgaGFyZGVyIHRvIGRpc3Rpbmd1 aXNoIG1ldGF2YXJpYWJsZXMgZnJvbSBvdGhlciBjb2RlLg0KDQpZb3UgYXJlIGFsc28gb25s eSBtYWtpbmcgdGhpcyBzdHlsaXN0aWNhbCBjaGFuZ2UgaW4gdGhlIGRvY3VtZW50YXRpb24g b2YgDQonbWF0Y2gnOyB0aGUgcmVtYWluZGVyIG9mIHRoZSBtYW51YWwgc3RpbGwgaGFzIHRo ZSBvbGQgQHZhci4gIElmIHlvdSANCmNoYW5nZSB0aW5ncywgaXQgd291bGQgYmUgYmV0dGVy IHRvIGNoYW5nZSB0aGluZ3MgZm9yIHRoZSB3aG9sZSBtYW51YWwuIA0KSSB0aGluayB5b3Ug Y2FuIGRvIHRoaXMgYnkgcmVkZWZpbmluZyB0aGUgQHZhciBtYWNybyB0byB3aGF0ZXZlciB5 b3UgDQp3YW50IGluIHRoZSBwcmVsdWRlIChhdCBsZWFzdCB0aGF0IGNhbiBiZSBkb25lIGlu IFRlWCkuDQoNCj4gLQ0KPiByZW1vdmU6IHBhcmFncmFwaCB0aGF0IHJlZmVycmVkIHRvIGEg c2luY2UgcmVtb3ZlZCBleGFtcGxlDQo+IC0tDQo+IA0KPiBmaXg6IHVuY29tbWVudCBAeHJl ZntzeG1sLW1hdGNofQ0KPiAtLS0NCj4gICBkb2MvcmVmL21hdGNoLnRleGkgfCAyNTIgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tDQo+ICAgMSBmaWxl IGNoYW5nZWQsIDE2NyBpbnNlcnRpb25zKCspLCA4NSBkZWxldGlvbnMoLSkNCj4gDQo+IGRp ZmYgLS1naXQgYS9kb2MvcmVmL21hdGNoLnRleGkgYi9kb2MvcmVmL21hdGNoLnRleGkNCj4g aW5kZXggZjVlYTQzMTE4Li40ZTY1N2I5NzYgMTAwNjQ0DQo+IC0tLSBhL2RvYy9yZWYvbWF0 Y2gudGV4aQ0KPiArKysgYi9kb2MvcmVmL21hdGNoLnRleGkNCj4gQEAgLTIzLDcxICsyMywx NDIgQEAgVGhlIEBjb2RleyhpY2UtOSBtYXRjaCl9IG1vZHVsZSBwcm92aWRlcyBhIEBkZm57 cGF0dGVybiBtYXRjaGVyfSwNCj4gICB3cml0dGVuIGJ5IEFsZXggU2hpbm4sIGFuZCBjb21w YXRpYmxlIHdpdGggQW5kcmV3IEsuIFdyaWdodCdzIHBhdHRlcm4NCj4gICBtYXRjaGVyIGZv dW5kIGluIG1hbnkgU2NoZW1lIGltcGxlbWVudGF0aW9ucy4NCj4gICANCj4gLUBjaW5kZXgg cGF0dGVybiB2YXJpYWJsZQ0KPiAtQSBwYXR0ZXJuIG1hdGNoZXIgY2FuIG1hdGNoIGFuIG9i amVjdCBhZ2FpbnN0IHNldmVyYWwgcGF0dGVybnMgYW5kDQo+IC1leHRyYWN0IHRoZSBlbGVt ZW50cyB0aGF0IG1ha2UgaXQgdXAuICBQYXR0ZXJucyBjYW4gcmVwcmVzZW50IGFueSBTY2hl bWUNCj4gLW9iamVjdDogbGlzdHMsIHN0cmluZ3MsIHN5bWJvbHMsIHJlY29yZHMsIGV0Yy4g IFRoZXkgY2FuIG9wdGlvbmFsbHkgY29udGFpbg0KPiAtQGRmbntwYXR0ZXJuIHZhcmlhYmxl c30uICBXaGVuIGEgbWF0Y2hpbmcgcGF0dGVybiBpcyBmb3VuZCwgYW4NCj4gLWV4cHJlc3Np b24gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXR0ZXJuIGlzIGV2YWx1YXRlZCwgb3B0aW9uYWxs eSB3aXRoIGFsbA0KPiAtcGF0dGVybiB2YXJpYWJsZXMgYm91bmQgdG8gdGhlIGNvcnJlc3Bv bmRpbmcgZWxlbWVudHMgb2YgdGhlIG9iamVjdDoNCj4gK0Bub2luZGVudCBBIHBhdHRlcm4g bWF0Y2hlciBkb2VzIHByZWNpc2VseSB3aGF0IHRoZSBuYW1lIGltcGxpZXM6IGl0DQo+ICtt YXRjaGVzIHNvbWUgYXJiaXRyYXJ5IHBhdHRlcm4sIGFuZCByZXR1cm5zIHNvbWUgcmVzdWx0 IGFjY29yZGluZ2x5Lg0KDQpBZ2FpbiwgYXMgSSBtZW50aW9uZWQgcHJldmlvdXNseSwgaW4g dGhlIGdlbmVyYWwgY2FzZSBpdCBtYXRjaGVzIA0KYXJiaXRyYXJ5IHBhdHRlcm5zIChwbHVy YWwpIGFuZCByZXR1cm5zIHJlc3VsdHMgKHBsdXJhbCkgLS0gdGhlICdtYXRjaCcgDQpjb25z dHJ1Y3QgaXMgbm90IGFzIGxpbWl0ZWQgYXMgeW91IGFyZSBpbXBseWluZyBpdCB0byBiZSBo ZXJlLg0KDQo+ICAgDQo+ICAgQGV4YW1wbGUNCj4gLShsZXQgKChsICcoaGVsbG8gKHdvcmxk KSkpKQ0KPiAtICAobWF0Y2ggbCAgICAgICAgICAgOzsgPC0gdGhlIGlucHV0IG9iamVjdA0K PiAtICAgICgoJ2hlbGxvICh3aG8pKSAgOzsgPC0gdGhlIHBhdHRlcm4NCj4gLSAgICAgd2hv KSkpICAgICAgICAgIDs7IDwtIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlZCB1cG9uIG1hdGNo aW5nDQo+IC1AcmVzdWx0e30gd29ybGQNCj4gKyhkZWZpbmUgKGVuZ2xpc2gtYmFzZS10ZW4t Pm51bWJlciBuYW1lKQ0KPiArICAobWF0Y2ggbmFtZQ0KPiArICAgICgnemVybyAgIDApDQo+ ICsgICAgKCdvbmUgICAgMSkNCj4gKyAgICAoJ3R3byAgICAyKQ0KPiArICAgICgndGhyZWUg IDMpDQo+ICsgICAgKCdmb3VyICAgNCkNCj4gKyAgICAoJ2ZpdmUgICA1KQ0KPiArICAgICgn c2l4ICAgIDYpDQo+ICsgICAgKCdzZXZlbiAgNykNCj4gKyAgICAoJ2VpZ2h0ICA4KQ0KPiAr ICAgICgnbmluZSAgIDkpKSkNCj4gKw0KPiArKGVuZ2xpc2gtYmFzZS10ZW4tPm51bWJlciAn c2l4KQ0KPiArQHJlc3VsdHt9IDYNCg0KTXkgcHJldmlvdXMgY29tbWVudCBzdGlsbCBhcHBs aWVzOg0KDQo+IFRoaXMgaXMgYSBzdWJvcHRpbWFsIGV4YW1wbGU7IHRoaXMgd291bGQgYmUg YmV0dGVyIGRvbmUgd2l0aCAnY2FzZScuDQo+IEkgcHJvcG9zZSByZXBsYWNpbmcgaXQgd2l0 aCBhbm90aGVyIGV4YW1wbGUsIG9yIGFkZGluZyBhIG5vdGUgdGhhdCBvbmUgd291bGQgbm9y bWFsbHkgdXNlICdjYXNlJyBmb3IgdGhpcy4gDQoNCnN0aWxsIGFwcGxpZXMuICBXaGF0IGlz IHRoZSByZWFzb24gZm9yIG5vdCBkb2luZyBzb21ldGhpbmcgYWtpbiB0byB0aGF0Pw0KDQo+ ICsNCj4gKyhhcHBseSArIChtYXAgZW5nbGlzaC1iYXNlLXRlbi0+bnVtYmVyICcob25lIHR3 byB0aHJlZSBmb3VyKSkpDQo+ICtAcmVzdWx0e30gMTANCj4gICBAZW5kIGV4YW1wbGUNCj4g ICANCj4gLUluIHRoaXMgZXhhbXBsZSwgbGlzdCBAdmFye2x9IG1hdGNoZXMgdGhlIHBhdHRl cm4gQGNvZGV7KCdoZWxsbyAod2hvKSl9LA0KPiAtYmVjYXVzZSBpdCBpcyBhIHR3by1lbGVt ZW50IGxpc3Qgd2hvc2UgZmlyc3QgZWxlbWVudCBpcyB0aGUgc3ltYm9sDQo+IC1AY29kZXto ZWxsb30gYW5kIHdob3NlIHNlY29uZCBlbGVtZW50IGlzIGEgb25lLWVsZW1lbnQgbGlzdC4g IEhlcmUNCj4gLUB2YXJ7d2hvfSBpcyBhIHBhdHRlcm4gdmFyaWFibGUuICBAY29kZXttYXRj aH0sIHRoZSBwYXR0ZXJuIG1hdGNoZXIsDQo+IC1sb2NhbGx5IGJpbmRzIEB2YXJ7d2hvfSB0 byB0aGUgdmFsdWUgY29udGFpbmVkIGluIHRoaXMgb25lLWVsZW1lbnQNCj4gLWxpc3QtLS1p LmUuLCB0aGUgc3ltYm9sIEBjb2Rle3dvcmxkfS4gIEFuIGVycm9yIHdvdWxkIGJlIHJhaXNl ZCBpZg0KPiAtQHZhcntsfSBkaWQgbm90IG1hdGNoIHRoZSBwYXR0ZXJuLg0KPiArQHBhZ2UN Cj4gK0BjaW5kZXggcGF0dGVybiB2YXJpYWJsZQ0KPiArQG5vaW5kZW50IFBhdHRlcm4gbWF0 Y2hlcnMgbWF5IGNvbnRhaW4gQGRmbntwYXR0ZXJuIHZhcmlhYmxlc30sDQo+ICtsb2NhbCBi aW5kaW5ncyB0byBhbGwgZWxlbWVudHMgdGhhdCBtYXRjaCBhIHBhdHRlcm4uDQoNCidQYXR0 ZXJuIG1hdGNoZXJzJyAtPiAncGF0dGVybicgd291bGQgYmUgbW9yZSBwcmVjaXNlIGhlcmUs IGFzIGl0IG1vcmUgDQpwcmVjaXNlbHkgc3RhdGVzIF93aGVyZV8gdGhlIHBhdHRlcm4gdmFy aWFibGUgaXMuICBFLmcuIGlmIHlvdSBzYXkgDQoncGF0dGVybicsIGl0J3MgY2VydGFpbmx5 IG5vdCB0aGUgJ25zJyBpbiAobWF0Y2ggbnMgLi4uKS4gIElmIHlvdSBzYXkgDQoncGF0dGVy biBtYXRjaGVyJyAoKiksIHRoZW4gJ3BhdHRlcm4gbWF0Y2hlcicgbWlnaHQgbWVhbiAnbWF0 Y2gnIGl0c2VsZiwgDQpvciAobWF0Y2ggbnMgLi4uKTsgdGhlIGZvcm1lciBkb2VzIG5vdCBj b250YWluIGEgcGF0dGVybiB2YXJpYWJsZSwgdGhlIA0KbGF0dGVyIGxpa2VseSBkb2VzIGJ1 dCBsZXNzIGlzIHN0YXRlZCBhYm91dCBfd2hlcmVfIHRoZSBwYXR0ZXJuIHZhcmlhYmxlIA0K aXMsIHB1cmVseSBnb2luZyBieSB5b3VyIHNlbnRlbmNlIGl0IG1vZ2h0IGJlIHRoZSAnbWF0 Y2gnIHdoaWNoIGlzIA0KaW5jb3JyZWN0Lg0KDQooKikgV2hpbGUgdGhlIG9yaWdpbmFsIHRl eHQgZGVmaW5lZCAncGF0dGVybiBtYXRjaGVyPW1hdGNoJywgdGhhdCBwYXJ0IA0KZG9lc24n dCBjb250YWluIGFueSBwYXR0ZXJuIHZhcmlhYmxlcywgYW5kIGluIHlvdXIgbmV3IHRleHQg dGhlIG5vdGlvbiANCmlzIG9mICdwYXR0ZXJuIG1hdGNoZXInIGlzIG5vdCBleGFjdGx5IGRl ZmluZWQgYnV0IHJhdGhlciBkZXNjcmliZWQsIGFuZCANCm5vdCBhcyBzb21lIGtpbmQgb2Yg cHJlY2lzZSBjaGFyYWN0ZXJpc2F0aW9uLg0KDQo+ICAgDQo+IC1UaGUgc2FtZSBvYmplY3Qg Y2FuIGJlIG1hdGNoZWQgYWdhaW5zdCBhIHNpbXBsZXIgcGF0dGVybjoNCj4gK0BleGFtcGxl DQo+ICsobGV0IHJlIChbbnMgJyhvbmUgdHdvIHRocmVlIGZvdXIgOSldIFt0b3RhbCAwXSkN Cg0KVGhlIFNjaGVtZSBjb252ZW50aW9uIHdvdWxkIHRvIGJlIHRvIHdyaXRlICdsb29wJyBp bnN0ZWFkIG9mICdyZScgd2hlbiANCnVzaW5nIG5hbWVkLWxldCwgYW5kIHNvbWV0aGluZyBs aWtlICdyZXN0JyBpbnN0ZWFkIG9mICducycuICBUaGUgZXhhY3QgDQp3b3JkIGZvciB0aGUg bG9vcCBhcmd1bWVudCB2YXJpZXMgYSBsb3QsIGJ1dCB0d28gbGV0dGVycyB0aGF0IGRvbid0 IA0KYXBwZWFyIHRvIG1lYW4gYW55dGhpbmcgYXJlIHRvIGJlIGF2b2lkZWQuDQoNCj4gKyAg KG1hdGNoIG5zDQo+ICsgICAgWyhlKSAoKyB0b3RhbCAoZW5nbGlzaC1iYXNlLXRlbi0+bnVt YmVyIGUpKV0NCj4gKyAgICBbKGUgLiBlcykNCj4gKyAgICAgKHJlIGVzICgrIHRvdGFsIChl bmdsaXNoLWJhc2UtdGVuLT5udW1iZXIgZSkpKV0pKQ0KDQpJIHRyaWVkIHJ1bm5pbmcgeW91 ciBleGFtcGxlLCBhbmQgaXQgZG9lc24ndCB3b3JrOg0KDQooZGVmaW5lIChlbmdsaXNoLWJh c2UtdGVuLT5udW1iZXIgbmFtZSkNCiAgIChtYXRjaCBuYW1lDQogICAgICgnemVybyAgIDAp DQogICAgICgnb25lICAgIDEpDQogICAgICgndHdvICAgIDIpDQogICAgICgndGhyZWUgIDMp DQogICAgICgnZm91ciAgIDQpDQogICAgICgnZml2ZSAgIDUpDQogICAgICgnc2l4ICAgIDYp DQogICAgICgnc2V2ZW4gIDcpDQogICAgICgnZWlnaHQgIDgpDQogICAgICgnbmluZSAgIDkp KSkNCihsZXQgcmUgKFtucyAnKG9uZSB0d28gdGhyZWUgZm91ciA5KV0gW3RvdGFsIDBdKQ0K ICAgKG1hdGNoIG5zDQogICAgIFsoZSkgKCsgdG90YWwgKGVuZ2xpc2gtYmFzZS10ZW4tPm51 bWJlciBlKSldDQogICAgIFsoZSAuIGVzKQ0KICAgICAgKHJlIGVzICgrIHRvdGFsIChlbmds aXNoLWJhc2UtdGVuLT5udW1iZXIgZSkpKV0pKQ0KaWNlLTkvYm9vdC05LnNjbToxNjg1OjE2 OiBJbiBwcm9jZWR1cmUgcmFpc2UtZXhjZXB0aW9uOg0KVGhyb3cgdG8ga2V5IGBtYXRjaC1l cnJvcicgd2l0aCBhcmdzIGAoIm1hdGNoIiAibm8gbWF0Y2hpbmcgcGF0dGVybiIgOSknLg0K DQpFbnRlcmluZyBhIG5ldyBwcm9tcHQuICBUeXBlIGAsYnQnIGZvciBhIGJhY2t0cmFjZSBv ciBgLHEnIHRvIGNvbnRpbnVlLg0KDQpJIHRoaW5rIHlvdSBuZWVkIHRvIHJlcGxhY2UgKG9u ZSB0d28gdGhyZWUgZm91ciA5KSBieSAob25lIHR3byB0aHJlZSANCmZvdXIgbmluZSkuICBB cyB5b3UgbWVudGlvbmVkIHlvdXJzZWxmIChpbiBvdGhlciB3b3JkcyksIGV4YW1wbGVzIGlu IHRoZSANCm1hbnVhbCBzaG91bGQgYWN0dWFsbHkgd29yayBhcy1pcy4NCg0KPiAtQGV4YW1w bGUNCj4gLShsZXQgKChsICcoaGVsbG8gKHdvcmxkKSkpKQ0KPiAtICAobWF0Y2ggbA0KPiAt ICAgICgoeCB5KQ0KPiAtICAgICAodmFsdWVzIHggeSkpKSkNCj4gLUByZXN1bHR7fSBoZWxs bw0KPiAtQHJlc3VsdHt9ICh3b3JsZCkNCj4gK0ByZXN1bHR7fSAxOQ0KPiAgIEBlbmQgZXhh bXBsZQ0KPiAgIA0KPiAtSGVyZSBwYXR0ZXJuIEBjb2Rleyh4IHkpfSBtYXRjaGVzIGFueSB0 d28tZWxlbWVudCBsaXN0LCByZWdhcmRsZXNzIG9mDQo+IC10aGUgdHlwZXMgb2YgdGhlc2Ug ZWxlbWVudHMuICBQYXR0ZXJuIHZhcmlhYmxlcyBAdmFye3h9IGFuZCBAdmFye3l9IGFyZQ0K PiAtYm91bmQgdG8sIHJlc3BlY3RpdmVseSwgdGhlIGZpcnN0IGFuZCBzZWNvbmQgZWxlbWVu dCBvZiBAdmFye2x9Lg0KPiAtDQo+IC1QYXR0ZXJucyBjYW4gYmUgY29tcG9zZWQsIGFuZCBu ZXN0ZWQuICBGb3IgaW5zdGFuY2UsIEBjb2Rley4uLn0NCj4gK0Bub2luZGVudCBJbiB0aGlz IGV4YW1wbGUsIHRoZSBsaXN0IEBjb2Rle25zfSBtYXRjaGVzIHRoZSBwYXR0ZXJuDQo+ICtA Y29kZXsoZSAuIGVzKX0sIHdoZXJlIHRoZSBwYXR0ZXJuIHZhcmlhYmxlIEBjb2Rle2V9IGNv cnJlc3BvbmRzDQo+ICt0byB0aGUgbWV0YXBob2ljYWwgImNhciIgb2YgQGNvZGV7bnN9IGFu ZCB0aGUgcGF0dGVybiB2YXJpYWJsZSBAY29kZXtlc30NCj4gK2NvcnJlc3BvbmRzIHRvIHRo ZSAiY2RyIiBvZiBAY29kZXtuc30uDQoNClR5cG86IG1ldGFwaG9pY2FsIC0+IG1ldGFwaG9y aWNhbC4NCg0KQWxzbzogbWV0YXBob3JpY2FsIC0+IGxpdGVyYWwuIC0tIGUgaXMgbGl0ZXJh bGx5IHRoZSBjYXIgb2YgbnMgKG9yIA0K4oCYY29ycmVzcG9uZHMgdG8gdGhlIGNhciBvZiBu cyBpbiBhIGxpdGVyYWwgd2F54oCZIGlmIHlvdSBnbyBmb3IgYSANCnZhcmlhYmxlL3ZhbHVl IGRpc3RpbmN0aW9uKTsgdGhlcmUgaXMgbm90aGluZyBmaWd1cmF0aXZlIGhlcmUuICBJIHdv dWxkIA0KanVzdCBkcm9wIHRoZSBtZXRhcGhvcmljYWwvbGl0ZXJhbCB3b3JkLiAgQWxzbywg ImNhciIgLT4gYGNhcicgYW5kICJjZHIiIA0KLT4gYGNkcicgLS0gdGhlIG1hbnVhbCBjdXJy ZW50bHkgY29uc2lzdGVudGx5IHVzZXMgdGhlIHF1b3RhdGlvbiBzdHlsZSANCuKAmGNhcuKA mSAvIOKAmHBhaXI/4oCZLCDigJhTQ03igJksIC4uLiwgbm90ICJjYXIiLiBGb3IgZXhhbXBs ZSwgaW4gNS40LjEgRHluYW1pYyANClR5cGVzLCB0aGVyZSBpcyB0aGUgcGFyYWdyYXBoOg0K DQo+IEluIG9yZGVyIHRvIGltcGxlbWVudCBzdGFuZGFyZCBTY2hlbWUgZnVuY3Rpb25zIGxp a2Ug4oCYcGFpcj/igJkgYW5kDQo+IOKAmHN0cmluZz/igJkgYW5kIHByb3ZpZGUgZ2FyYmFn ZSBjb2xsZWN0aW9uLCB0aGUgcmVwcmVzZW50YXRpb24gb2YgZXZlcnkNCj4gdmFsdWUgbXVz dCBjb250YWluIGVub3VnaCBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IGRldGVybWluZSBp dHMgdHlwZQ0KPiBhdCBydW4gdGltZS4NCg0KJ0Z1bmN0aW9uJyAtPiAnUHJvY2VkdXJlJy4g WW91IGFyZSBpbnRyb2R1Y2luZyBhIHN0eWxpc3RpY2FsIA0KaW5jb25zaXN0ZW5jeSBoZXJl LiBJbiBHdWlsZSwgdGhlIEMgdGhpbmdzIGFyZSBjYWxsZWQgJ0Z1bmN0aW9ucycsIGFuZCAN CnRoZSBTY2hlbWUgdGhpbmdzIGFyZSBjYWxsZWQgJ1Byb2NlZHVyZXMnLiAgVG8gc29tZSBk ZWdyZWUsIHRoaXMg4oCYaW4gDQpTY2hlbWUgaXQncyBjYWxsZWQgYSBwcm9jZWR1cmXigJkg YWxzbyBob2xkcyBmb3Igb3RoZXIgU2NoZW1lcyBJSVVDLg0KDQpBY3R1YWxseSwgd2hpbGUg c29tZSBHQyBkbyByZXF1aXJlIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbiAoUlRJKSwgUlRJ IA0KaXMgbm90IG5lZWRlZCBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgR3VpeCB1c2VzIEJv ZWhtLUdDIGZvciBnYXJiYWdlIA0KY29sbGVjdGlvbi4gIEJlaW5nIGEgY29uc2VydmF0aXZl IGdhcmJhZ2UgY29sbGVjdG9yLCBpdCBkb2Vzbid0IG5lZWQgYW55IA0KdHlwZSBpbmZvcm1h dGlvbi4gIEl0IHdvcmtzIGEgbGl0dGxlIGJldHRlciBpZiB5b3UgZG8gZ2l2ZSBpdCBzb21l IHR5cGUgDQppbmZvcm1hdGlvbiwgYW5kIEd1aWxlIGRvZXMgZ2l2ZSBpdCBzb21lIGluZm9y bWF0aW9uIGluIHNvbWUgY2FzZXMsIGJ1dCANCml0J3Mgbm90IHJlcXVpcmVkLg0KDQpUaGlz IGluZm9ybWF0aW9uIGlzIHRoZXJlZm9yZSBpbmNvcnJlY3QgYW5kIG5lZWRzIHRvIGJlIHJl bW92ZWQsIGJ1dCB0aGUgDQpiaXRzIGFib3V0IHByZWRpY2F0ZXMgc2VlbXMgZmluZSB0byBt ZS4NCg0KPiBPZnRlbiwgU2NoZW1lIHN5c3RlbXMgYWxzbyB1c2UgdGhpcyBpbmZvcm1hdGlv biB0bw0KPiBkZXRlcm1pbmUgd2hldGhlciBhIHByb2dyYW0gaGFzIGF0dGVtcHRlZCB0byBh cHBseSBhbiBvcGVyYXRpb24gdG8gYW4NCj4gaW5hcHByb3ByaWF0ZWx5IHR5cGVkIHZhbHVl IChzdWNoIGFzIHRha2luZyB0aGUg4oCYY2Fy4oCZIG9mIGEgc3RyaW5nKS4NCg0KSUlVQywg aW4gVGV4aW5mbywgd2Ugd3JpdGUgYHN0dWZmJyBpbnN0ZWFkIG9mIOKAmHN0dWZm4oCZLCBh bmQgaXQgd2lsbCBnZXQgDQp0dXJuZWQgaW4g4oCYc3R1ZmbigJkuICBJIGR1bm5vIHdoeSB0 aGlzIGlzIHN0aWxsIGRvbmUgaW4gdGhlIEd1aWxlIG1hbnVhbCANCmFzIFVURi04IGlzIGFu IGVzdGFibGlzaGVkIHRoaW5nLCBidXQgSSBoYXZlIHVzZWQg4oCY4oCZIGluIEd1aXggc3R1 ZmYgaW4gDQp0aGUgcGFzdCBhbmQgcGVvcGxlIGNoYW5nZWQgaW50byBgJy4NCg0KQWRkaXRp b25hbGx5LCBkb2luZyAiZ2l0IGdyZXAgLUYgImNhciIgZG9jL3JlZi8qLnRleGkiLCBpdCBh cHBlYXJzIHRoYXQgDQp0aGUgbWFudWFsIGRvZXNuJ3QgYWN0dWFsbHkgcXVvdGUgY2FyIGFu ZCBjZHIgLS0gaW5zdGVhZCBpdCB3cml0ZXMgY2FyIA0KYW5kIGNkciB1bnF1b3RlZCwgb3Ig d3JpdGVzIEBjb2Rle2Nhcn0gLyBAY29kZXtjZHJ9IHdoaWNoIGhhcHBlbnMgdG8gYmUgDQp0 dXJuZWQgaW50byBhIHF1b3RlZCDigJhjYXLigJkgLyDigJhjZHLigJkgaW4gdGhlIC5pbmZv IGRvY3VtZW50YXRpb24gYnkgVGV4aW5mby4NCg0KSSB0aGluayB5b3UgY2FuIGd1ZXNzIHdo YXQgSSB3b3VsZCBiZSBzYXlpbmcgYWJvdXQgc3R5bGlzdGljIGNvbnNpc3RlbmN5IA0KaGVy ZS4NCg0KPiArDQo+ICtAbm9pbmRlbnQgQSB0YWlsIGNhbGwgQGNvZGV7cmV9IGlzIHRoZW4g aW5pdGlhdGVkDQoNCg0K4oCYQSB0YWlsIGNhbGwgQGNvZGV7cmV9IGlzIHRoZW4gaW5pdGlh dGVk4oCZIC0+IOKAmEEgdGFpbCBjYWxsIHRvIEBjb2Rle3JlfSANCmlzIHRoZSBpbml0aWF0 ZWTigJkgLS0gQGNvZGV7cmV9IGlzIGEgdmFyaWFibGUgcmVmZXJlbmNlLCBub3QgYSB0YWls IGNhbGwuIA0KVGhlIHRhaWwgY2FsbCBpcyBAY29kZXsocmUgZXMgKCsgdG8gdG90YWwgLi4u KSl9Lg0KDQpNb3JlIHNpbXBseSwgeW91IGNvdWxkIHdyaXRlIOKAmFRoZSBwcm9jZWR1cmUg QHZhcntyZX0gaXMgdGhlbiB0YWlsLWNhbGxlZOKAmS4NCg0KPiArYW5kIHdlICJjZHIiIGRv d24gdGhlDQo+ICtsaXN0IGJ5IHJlY3VycmluZyBvbiB0aGUgdGFpbCBAY29kZXtlc30sIGFw cGx5aW5nIG91ciBtYXRjaGVyDQo+ICtAY29kZXtlbmdsaXNoLWJhc2UtdGVuLT5udW1iZXJ9 IHRvIGVhY2ggZWxlbWVudCBvZiBAY29kZXtuc30gdW50aWwNCj4gK29ubHkgYSBzaW5nbGUg ZWxlbWVudCBAY29kZXsoZSl9IHJlbWFpbnMsIGNhdXNpbmcgdGhlIEBjb2Rle3RvdGFsfQ0K PiArdG8gYmUgY29tcHV0ZWQuICBJbiBtb2Rlcm4gU2NoZW1lIHByb2dyYW1taW5nIGl0IGlz IGNvbW1vbiB0byB1c2UNCj4gK0Bjb2Rle21hdGNofSBpbiBwbGFjZSBvZiB0aGUgbW9yZSB2 ZXJib3NlIGJ1dCBmYW1pbGlhciBjb21iaW5hdGlvbg0KPiArb2YgQGNvZGV7Y29uZH0sIEBj b2Rle2Nhcn0gYW5kIEBjb2Rle2Nkcn0sIHNvIGl0J3MgaW1wb3J0YW50IHRvDQo+ICt1bmRl cnN0YW5kIGhvdyB0aGVzZSBpZGlvbXMgdHJhbnNsYXRlLg0KPiArDQo+ICtQYXR0ZXJucyBj YW4gYmUgY29tcG9zZWQgYW5kIG5lc3RlZC4gIEZvciBpbnN0YW5jZSwgQGNvZGV7Li4ufQ0K PiAgIChlbGxpcHNpcykgbWVhbnMgdGhhdCB0aGUgcHJldmlvdXMgcGF0dGVybiBtYXkgYmUg bWF0Y2hlZCB6ZXJvIG9yIG1vcmUNCj4gICB0aW1lcyBpbiBhIGxpc3Q6DQo+ICAgQGV4YW1w bGUNCj4gLShtYXRjaCBsc3QNCj4gLSAgKCgoaGVhZHMgdGFpbHMgLi4uKSAuLi4pDQo+IC0g ICBoZWFkcykpDQo+ICsobWF0Y2ggJygoYS4wIGIuMCBjLjAgKCgxLjAgMi4wIDMuMCkgeC4w IHkuMCB6LjApKQ0KPiArICAgICAgICAgKGEuMSBiLjEgYy4xICgoMS4xIDIuMSAzLjEpIHgu MSB5LjEgei4xKSkpDQo+ICsgIFsoKGhlYWRzIC4uLiAoKHRhaWxzIC4uLikgLiByZXN0KSkg Li4uKQ0KPiArICAgKGJlZ2luDQo+ICsgICAgKGZvcm1hdCAjdCAiaGVhZHM6IH5hIH4lIiBo ZWFkcykNCj4gKyAgICAoZm9ybWF0ICN0ICJ0YWlsczogfmEgfiUiIHRhaWxzKQ0KPiArICAg IChmb3JtYXQgI3QgInJlc3Q6ICB+YSB+JSIgcmVzdCkpXSkNCj4gK0ByZXN1bHR7fQ0KPiAr aGVhZHM6ICgoYS4wIGIuMCBjLjApIChhLjEgYi4xIGMuMSkpDQo+ICt0YWlsczogKCgxLjAg Mi4wIDMuMCkgKDEuMSAyLjEgMy4xKSkNCj4gK3Jlc3Q6ICAoKHguMCB5LjAgei4wKSAoeC4x IHkuMSB6LjEpKQ0KPiAgIEBlbmQgZXhhbXBsZQ0KPiAgIA0KPiAtQG5vaW5kZW50DQo+IC1U aGlzIGV4cHJlc3Npb24gcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBlYWNoIGxpc3Qg d2l0aGluIEB2YXJ7bHN0fS4NCj4gLUZvciBwcm9wZXIgbGlzdHMgb2YgcHJvcGVyIGxpc3Rz LCBpdCBpcyBlcXVpdmFsZW50IHRvIEBjb2RleyhtYXAgY2FyDQo+IC1sc3QpfS4gIEhvd2V2 ZXIsIGl0IHBlcmZvcm1zIGFkZGl0aW9uYWwgY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGF0DQo+ IC1AdmFye2xzdH0gYW5kIHRoZSBsaXN0cyB0aGVyZWluIGFyZSBwcm9wZXIgbGlzdHMsIGFz IHByZXNjcmliZWQgYnkgdGhlDQo+IC1wYXR0ZXJuLCByYWlzaW5nIGFuIGVycm9yIGlmIHRo ZXkgYXJlIG5vdC4NCj4gLQ0KPiAtQ29tcGFyZWQgdG8gaGFuZC13cml0dGVuIGNvZGUsIHBh dHRlcm4gbWF0Y2hpbmcgbm90aWNlYWJseSBpbXByb3Zlcw0KPiAtY2xhcml0eSBhbmQgY29u Y2lzZW5lc3MtLS1ubyBuZWVkIHRvIHJlc29ydCB0byBzZXJpZXMgb2YgQGNvZGV7Y2FyfSBh bmQNCj4gLUBjb2Rle2Nkcn0gY2FsbHMgd2hlbiBtYXRjaGluZyBsaXN0cywgZm9yIGluc3Rh bmNlLiAgSXQgYWxzbyBpbXByb3Zlcw0KPiAtcm9idXN0bmVzcywgYnkgbWFraW5nIHN1cmUg dGhlIGlucHV0IEBlbXBoe2NvbXBsZXRlbHl9IG1hdGNoZXMgdGhlDQo+IC1wYXR0ZXJuLS0t Y29udmVyc2VseSwgaGFuZC13cml0dGVuIGNvZGUgb2Z0ZW4gdHJhZGVzIHJvYnVzdG5lc3Mg Zm9yDQo+IC1jb25jaXNlbmVzcy4gIEFuZCBvZiBjb3Vyc2UsIEBjb2Rle21hdGNofSBpcyBh IG1hY3JvLCBhbmQgdGhlIGNvZGUgaXQNCj4gLWV4cGFuZHMgdG8gaXMganVzdCBhcyBlZmZp Y2llbnQgYXMgZXF1aXZhbGVudCBoYW5kLXdyaXR0ZW4gY29kZS4NCj4gLQ0KPiAtVGhlIHBh dHRlcm4gbWF0Y2hlciBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6DQo+ICtAbm9pbmRlbnQgQSBw YXR0ZXJuIG1hdGNoZXIgY2FuIG1hdGNoIGFuIG9iamVjdCBhZ2FpbnN0IHNldmVyYWwNCj4g K3BhdHRlcm5zIGFuZCBleHRyYWN0IHRoZSBlbGVtZW50cyB0aGF0IG1ha2UgaXQgdXAuDQo+ ICsNCj4gK0BleGFtcGxlDQo+ICsobWF0Y2ggJygobDEgLiByMSkgKGwyIC4gcjIpIChsMyAu IHIzKSkNCj4gKyAgWygobGVmdCAuIHJpZ2h0KSAuLi4pDQo+ICsgICAobGlzdCBsZWZ0IHJp Z2h0KV0pDQo+ICsNCj4gK0ByZXN1bHR7fSAoKGwxIGwyIGwzKSAocjEgcjIgcjMpKQ0KPiAr QGVuZCBleGFtcGxlDQo+ICsNCj4gK0BleGFtcGxlDQo+ICsobWF0Y2ggJygoMSAuIChhIC4g YikpICgyIC4gKGMgLiBkKSkgKDMgLiAoZSAuIGYpKSkNCj4gKyAgWygoa2V5IC4gKGxlZnQg LiByaWdodCkpIC4uLikNCj4gKyAgIChmb2xkLXJpZ2h0IGFjb25zICcoKSBrZXkgcmlnaHQg KV0pDQo+ICsNCj4gK0ByZXN1bHR7fSAoKDEgLiBiKSAoMiAuIGQpICgzIC4gZikpDQo+ICtA ZW5kIGV4YW1wbGUNCj4gKw0KPiArQGV4YW1wbGUNCj4gKyhtYXRjaCAnKCgoYSBiIGMpIGUg ZiBnKSAxIDIgMykNCj4gKyAgWygoKGhlYWQgLi4uKSAuIHJlc3QpIHRhaWxzIC4uLikNCj4g KyAgIChhY29ucyB0YWlscyBoZWFkIHJlc3QgKV0pDQo+ICsNCj4gK0ByZXN1bHQge30gKCgo MSAyIDMpIGEgYiBjKSBlIGYgZykNCj4gK0BlbmQgZXhhbXBsZQ0KPiArDQo+ICtQYXR0ZXJu cyBjYW4gcmVwcmVzZW50IGFueSBTY2hlbWUgb2JqZWN0OiBsaXN0cywgc3RyaW5ncywgc3lt Ym9scywNCj4gK3JlY29yZHMsIGV0Yy4NCj4gKw0KPiArQG5vaW5kZW50IFdoZW4gYSBtYXRj aGluZyBwYXR0ZXJuIGlzIGZvdW5kLCBhbiBleHByZXNzaW9uIGlzIGV2YWx1YXRlZA0KPiAr d2l0aCBwYXR0ZXJuIHZhcmlhYmxlcyBib3VuZCB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVt ZW50cyBvZiB0aGUgb2JqZWN0Lg0KPiArDQo+ICtAZXhhbXBsZQ0KPiArKGxldCByZSAoW20g IyhhICJiIiBjICJkIiBlICJmIiBnKV0pDQo+ICsgICAobWF0Y2ggbQ0KPiArICAgICBbKG9y IChlKSAjKGUpKSBlXQ0KPiArICAgICBbKG9yICMoZTEgZTIgZXMgLi4uKQ0KPiArCSAgIChl MSBlMiBlcyAuLi4pKQ0KPiArICAgICAgKGNvbnMgKGNvbnMgZTEgZTIpDQo+ICsgCSAgICAo cmUgZXMpKV0pKQ0KPiArDQo+ICtAcmVzdWx0e30gKChhIC4gImIiKSAoYyAuICJkIikgKGUg LiAiZiIpIC4gZykNCj4gK0BlbmQgZXhhbXBsZQ0KPiArDQo+ICtAZXhhbXBsZQ0KPiArKGxl dCByZSAoW20gJyhhIGIgYyBkIGUgZiBnIGggaSldKQ0KPiArICAgKG1hdGNoIG0NCj4gKyAg ICAgWyhlKSBlXQ0KPiArICAgICBbKGUxIGUyIGVzIC4uLikNCj4gKyAgICAgIChhY29ucyBl MSBlMiAocmUgZXMpKV0pKQ0KPiArDQo+ICtAcmVzdWx0e30gKChhIC4gYikgKGMgLiBkKSAo ZSAuIGYpIChnIC4gaCkgLiBpKQ0KPiArQGVuZCBleGFtcGxlDQo+ICsNCj4gK0Bub2luZGVu dCBDb21wYXJlZCB0byBoYW5kLXdyaXR0ZW4gY29kZSwgcGF0dGVybiBtYXRjaGluZyBub3Rp Y2VhYmx5DQo+ICtpbXByb3ZlcyBjbGFyaXR5IGFuZCBjb25jaXNlbmVzcy0tLW5vIG5lZWQg dG8gcmVzb3J0IHRvIHNlcmllcyBvZg0KPiArQGNvZGV7Y2FyfSBhbmQgQGNvZGV7Y2RyfSBj YWxscyB3aGVuIG1hdGNoaW5nIGxpc3RzLCBmb3IgaW5zdGFuY2UuDQo+ICtJdCBhbHNvIGlt cHJvdmVzIHJvYnVzdG5lc3MsIGJ5IG1ha2luZyBzdXJlIHRoZSBpbnB1dCBAZW1waHtjb21w bGV0ZWx5fQ0KPiArbWF0Y2hlcyB0aGUgcGF0dGVybi0tLWNvbnZlcnNlbHksIGhhbmQtd3Jp dHRlbiBjb2RlIG9mdGVuIHRyYWRlcw0KPiArcm9idXN0bmVzcyBmb3IgY29uY2lzZW5lc3Mu ICBBbmQgb2YgY291cnNlLCBAY29kZXttYXRjaH0gaXMgYSBtYWNybywNCj4gK2FuZCB0aGUg Y29kZSBpdCBleHBhbmRzIHRvIGlzIGp1c3QgYXMgZWZmaWNpZW50IGFzIGVxdWl2YWxlbnQN Cj4gK2hhbmQtd3JpdHRlbiBjb2RlLg0KPiArDQo+ICtAbm9pbmRlbnQgV2UgZGVmaW5lIEBj b2Rle21hdGNofSBhcyBmb2xsb3dzOiBAKg0KDQpXaHkgZGlkIHlvdSBjaGFuZ2UgdGhpcyBm cm9tDQoNCiAgICAgIFRoZSBwYXR0ZXJuIG1hdGNoZXIgaXMgZGVmaW5lZCBhcyBmb2xsb3dz Og0KDQo/IFdoaWxlIHRoZSAnd2UnIC8gJ291cicgLyAuLi4gY29uc3RydWN0IGlzIHByZXR0 eSBjb252ZW5pZW50LCBJTU8gaXQgaXMgDQpiZXR0ZXIgYXZvaWRlZCBhcyBsb25nIGFzIHRo ZSBhdm9pZGFuY2UgZG9lc24ndCBsZWFkIHRvIGF3a3dhcmQgDQpjb25zdHJ1Y3Rpb25zLg0K DQo+ICAgQGRlZmZuIHtTY2hlbWUgU3ludGF4fSBtYXRjaCBleHAgY2xhdXNlMSBjbGF1c2Uy IEBkb3Rze30NCj4gICBNYXRjaCBvYmplY3QgQHZhcntleHB9IGFnYWluc3QgdGhlIHBhdHRl cm5zIGluIEB2YXJ7Y2xhdXNlMX0NCj4gQEAgLTk2LDkgKzE2Nyw5IEBAIHZhbHVlIHByb2R1 Y2VkIGJ5IHRoZSBmaXJzdCBtYXRjaGluZyBjbGF1c2UuICBJZiBubyBjbGF1c2UgbWF0Y2hl cywNCj4gICB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBrZXkgQGNvZGV7bWF0Y2gtZXJyb3J9 Lg0KPiAgIA0KPiAgIEVhY2ggY2xhdXNlIGhhcyB0aGUgZm9ybSBAY29kZXsocGF0dGVybiBi b2R5MSBib2R5MiBAZG90c3t9KX0uICBFYWNoDQo+IC1AdmFye3BhdHRlcm59IG11c3QgZm9s bG93IHRoZSBzeW50YXggZGVzY3JpYmVkIGJlbG93LiAgRWFjaCBib2R5IGlzIGFuDQo+ICtA Y29kZXtwYXR0ZXJufSBtdXN0IGZvbGxvdyB0aGUgc3ludGF4IGRlc2NyaWJlZCBiZWxvdy4g IEVhY2ggYm9keSBpcyBhbg0KPiAgIGFyYml0cmFyeSBTY2hlbWUgZXhwcmVzc2lvbiwgcG9z c2libHkgcmVmZXJyaW5nIHRvIHBhdHRlcm4gdmFyaWFibGVzIG9mDQo+IC1AdmFye3BhdHRl cm59Lg0KPiArQGNvZGV7cGF0dGVybn0uDQo+ICAgQGVuZCBkZWZmbg0KPiAgIA0KPiAgIEBj IEZJWE1FOiBEb2N1bWVudCBvdGhlciBmb3JtczoNCj4gQEAgLTExNCw3ICsxODUsNyBAQCBh cmJpdHJhcnkgU2NoZW1lIGV4cHJlc3Npb24sIHBvc3NpYmx5IHJlZmVycmluZyB0byBwYXR0 ZXJuIHZhcmlhYmxlcyBvZg0KPiAgIEBjDQo+ICAgQGMgY2xhdXNlIDo6PSAocGF0IGJvZHkp IHwgKHBhdCA9PiBleHApDQo+ICAgDQo+IC1UaGUgc3ludGF4IGFuZCBpbnRlcnByZXRhdGlv biBvZiBwYXR0ZXJucyBpcyBhcyBmb2xsb3dzOg0KPiArQG5vaW5kZW50IEAqIFRoZSBwYXR0 ZXJuIGxhbmd1YWdlIGlzIHNwZWNpZmllZCBhcyBmb2xsb3dzOiBAKg0KDQoNClRoZSBzdHVm ZiBiZWxvdyBzdGlsbCBkZWZpbmVzIHRoZSBpbnRlcnByZXRhdGlvbiwgbm90IG9ubHkgdGhl IA0KbGFuZ3VhZ2UvZ3JhbW1hci4gIFRoZSBjaGFuZ2UgJ3N5bnRheCAtPiBsYW5ndWFnZScg c2VlbXMgZmluZSB0byBtZSwgYnV0IA0Kd2h5IHJlbW92ZSAnaW50ZXJwcmV0YXRpb24nPw0K DQpBZGRpdGlvbmFsbHksIEkgcGVyc29uYWxseSB3b3VsZCBnbyBmb3IgaW50ZXJwcmV0YXRp b24tPnNlbWFudGljcywgYnV0IA0KbWF5YmUgdGhhdCdzIHRvbyBvYnNjdXJlIGZvciBhIGdl bmVyYWwgYXVkaWVuY2UuDQoNCiA+IFsuLi5dPiAgIEBkZWZmbiB7U2NoZW1lIFN5bnRheH0g bWF0Y2gtbGFtYmRhKiBjbGF1c2UxIGNsYXVzZTIgQGRvdHN7fQ0KPiBAQCAtMjY0LDExICsz MzUsMTAgQEAgYW5kIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHJlY3Vyc2l2ZSBmdW5jdGlvbnMg d2hpY2ggbWF0Y2ggb24gdGhlaXINCj4gICBhcmd1bWVudHMgYXMgaW4gQGNvZGV7bWF0Y2gt bGFtYmRhKn0uDQo+ICAgDQo+ICAgQGV4YW1wbGUNCj4gLShtYXRjaC1sZXQgKCgoeCB5KSAo bGlzdCAxIDIpKQ0KPiAtICAgICAgICAgICAgKChhIGIpIChsaXN0IDMgNCkpKQ0KPiAtICAo bGlzdCBhIGIgeCB5KSkNCj4gLUByZXN1bHR7fQ0KPiAtKDMgNCAxIDIpDQo+ICsobWF0Y2gt bGV0IChbKHggeSAuLi4pIChsaXN0IDEgMiAzKV0NCj4gKyAgICAgICAgICAgIFsoYSBiIC4u LikgKGxpc3QgMyA0IDUpXSkNCj4gKyAgKGxpc3QgeCBhIHkgYikpDQo+ICtAcmVzdWx0e30g KDEgMyAoMiAzKSAoNCA1KSkNCj4gICBAZW5kIGV4YW1wbGUNCj4gICBAZW5kIGRlZmZuDQo+ ICAgDQo+IEBAIC0yODcsMjIgKzM1NywzNCBAQCBTaW1pbGFyIHRvIEBjb2Rle21hdGNoLWxl dH0sIGJ1dCBhbmFsb2dvdXNseSB0byBAY29kZXtsZXQqfSwgbWF0Y2ggYW5kDQo+ICAgYmlu ZCB0aGUgdmFyaWFibGVzIGluIHNlcXVlbmNlLCB3aXRoIHByZWNlZGluZyBtYXRjaCB2YXJp YWJsZXMgaW4gc2NvcGUuDQo+ICAgDQo+ICAgQGV4YW1wbGUNCj4gLShtYXRjaC1sZXQqICgo KHggeSkgKGxpc3QgMSAyKSkNCj4gLSAgICAgICAgICAgICAoKGEgYikgKGxpc3QgeCA0KSkp DQo+IC0gIChsaXN0IGEgYiB4IHkpKQ0KPiArKG1hdGNoLWxldCogKFsoeCAuIHkpIChsaXN0 IDEgMiAzKV0NCj4gKyAgICAgICAgICAgICBbKGEgLiBiKSAobGlzdCB4IDQgeSldKQ0KPiAr ICAobGlzdCBhIGIpKQ0KPiAgIEBlcXVpdnt9DQoNClRoZSBvbGQgZXhhbXBsZSB3YXMgc2lt cGxlciBhbmQgc3RpbGwgZnVsbHkgZGVtb25zdHJhdGVkICdtYXRjaC1sZXQqJywgDQp3aHkg dGhlIGNoYW5nZSAoYmVzaWRlcyBbXSk/DQoNCj5bLi4uXQ0KPiAgIA0KPiArQGV4YW1wbGUN Cj4gKyhkZWZpbmUgd3JhcCAnKCgoKCh1bm5lc3QgYXJiaXRyYXJ5IG5lc3RpbmdzKSkpKSkp DQo+ICsNCj4gKyhsZXQgdW53cmFwIChbcGVlbCB3cmFwXSkNCj4gKyAgKG1hdGNoLWxldCog KFsoW2NvcmUgLi4uXSkgcGVlbF0NCj4gKwkgICAgICAgWyh3cmFwcGVyIC4uLikgY29yZV0p DQo+ICsgICAgKGlmICg+IChsZW5ndGggd3JhcHBlcikgMSkNCj4gKwl3cmFwcGVyDQo+ICsJ KHVud3JhcCB3cmFwcGVyKSkpKQ0KPiArDQo+ICtAcmVzdWx0e30gKHVubmVzdCBhcmJpdHJh cnkgbmVzdGluZ3MpDQo+ICtAZW5kIGV4YW1wbGUNCj4gKw0KDQooTm90IHNheWluZyBhbnl0 aGluZyBhYm91dCB0aGlzIGV4YW1wbGUgVEJDLikNCg0KR3JlZXRpbmdzLA0KTWF4aW1lLg0K --------------eENdTihUZi1AXC5PisrMu99J Content-Type: application/pgp-keys; name="OpenPGP_0x49E3EE22191725EE.asc" Content-Disposition: attachment; filename="OpenPGP_0x49E3EE22191725EE.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- xjMEX4ch6BYJKwYBBAHaRw8BAQdANPb/d6MrGnGi5HyvODCkBUJPRjiFQcRU5V+m xvMaAa/NL01heGltZSBEZXZvcyA8bWF4aW1lLmRldm9zQHN0dWRlbnQua3VsZXV2 ZW4uYmU+wpAEExYIADgWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCX4ch6AIbAwUL CQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRBJ4+4iGRcl7japAQC3opZ2KGWzWmRc /gIWSu0AAcfMwyinFEEPa/QhUt2CogD/e2RdF4CYAgaRHJJmZ9WU7piKbLZ7llB4 LzgezVDHggzNJU1heGltZSBEZXZvcyA8bWF4aW1lZGV2b3NAdGVsZW5ldC5iZT7C kAQTFggAOBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJf56ycAhsDBQsJCAcDBRUK CQgLBRYCAwEAAh4BAheAAAoJEEnj7iIZFyXujpQBAKV1SwDDl4f24rXciDlB9L8W ycZt30CgbewMSRQk4mvbAP9dFMbVVixYBd6C8cfhR+NsOBGiOJnQABlUmgNuqGFJ Dc44BF+HIegSCisGAQQBl1UBBQEBB0BOlzIWiJzgobMF6/cqwLaLk7jIcFSZ++c0 k9cCNT6YXwMBCAfCeAQYFggAIBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJfhyHo AhsMAAoJEEnj7iIZFyXuMr0BAJc8cl5PGvVmVuSQVKjleNl4DK1/XAaPAYPe34AE fZJPAP9IqLCQhH/FeJanHqBP8gNdGNI2qn8RnnLVfRJgUjZ1BA=3D=3D =3DOVqp -----END PGP PUBLIC KEY BLOCK----- --------------eENdTihUZi1AXC5PisrMu99J-- --------------2OdqcNZr4V0DMer47fqN53M4-- --------------l7kyA7lI0ccuXmILFyUNWfcb Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wnsEABYIACMWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCY9qV9wUDAAAAAAAKCRBJ4+4iGRcl7ocU AP4q25HUKDgikvCMuUvqa2/7ioDE0JhVOeCUeMVufaqDnwD+IolWx1A2+GAvHwrGIQyhFAeuXkLF U07TyTi3maUX5wI= =3YqQ -----END PGP SIGNATURE----- --------------l7kyA7lI0ccuXmILFyUNWfcb--