From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-3.9 required=3.0 tests=AWL,BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id 84C7F1F454 for ; Thu, 7 Nov 2019 21:35:55 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 970AE120B8E; Fri, 8 Nov 2019 06:35:45 +0900 (JST) Received: from xtrwkhkc.outbound-mail.sendgrid.net (xtrwkhkc.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 46439120B7A for ; Fri, 8 Nov 2019 06:35:43 +0900 (JST) Received: by filter0145p3mdw1.sendgrid.net with SMTP id filter0145p3mdw1-11599-5DC48E33-E 2019-11-07 21:35:47.134442555 +0000 UTC m=+1647.079946520 Received: from herokuapp.com (unknown [34.230.5.86]) by ismtpd0029p1mdw1.sendgrid.net (SG) with ESMTP id sQaqsFhpREqAKETU4aVzTA for ; Thu, 07 Nov 2019 21:35:47.118 +0000 (UTC) Date: Thu, 07 Nov 2019 21:35:47 +0000 (UTC) From: ko1@atdot.net Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 71375 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 16254 X-Redmine-Issue-Author: ko1 X-Redmine-Issue-Assignee: ko1 X-Redmine-Sender: ko1 X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: =?us-ascii?Q?fVTMYOBjtdvXNcWwrscBhLsHItUXVK5L4mtnq0mdcRfFf4xkB88uy4=2FtrySJbS?= =?us-ascii?Q?e4L5fTkLRloOi4pwByh4LXJrghU9Nf8GAC9EWJd?= =?us-ascii?Q?FPgGyCXVYK4q+4Kyfc8Z73Om3WcHijHK3S4VeZX?= =?us-ascii?Q?Bj528LWzV7w4eenefwCS3B=2FcWanSwvkTKrE32vA?= =?us-ascii?Q?wpkQZ02aXVPRk?= To: ruby-core@ruby-lang.org X-ML-Name: ruby-core X-Mail-Count: 95750 Subject: [ruby-core:95750] [Ruby master Feature#16254] MRI internal: Define built-in classes in Ruby with `__intrinsic__` syntax X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" SXNzdWUgIzE2MjU0IGhhcyBiZWVuIHVwZGF0ZWQgYnkga28xIChLb2ljaGkgU2FzYWRhKS4NCg0K DQpFcmVnb24gKEJlbm9pdCBEYWxvemUpIHdyb3RlOg0KPiBBIGNvbW1vbiBzeW50YXggZm9yIGlu dHJpbnNpY3MvcHJpbWl0aXZlcyB3b3VsZCBhbGxvdyB0byBzaGFyZSBSdWJ5IGNvZGUgZm9yIGNv cmUgY2xhc3NlcyB1c2luZyB0aGVzZSBpbnRyaW5zaWNzL3ByaW1pdGl2ZXMuDQo+IEl0IG1pZ2h0 IGxvb2sgbGlrZSBpdCdzIGxpdHRsZSBSdWJ5IGNvZGUsIGJ1dCBJJ20gY29uZmlkZW50IGl0IHdp bGwgZ3Jvdy4NCj4gRm9yIGluc3RhbmNlLCBJIHdvdWxkbid0IGJlIHN1cnByaXNlZCB0byBzZWUg c29tZSBvZiB0aGUgYXJndW1lbnQgcHJvY2Vzc2luZy92YWxpZGF0aW9uIG1vdmVkIHRvIFJ1Ynks IGFzIGl0IG1pZ2h0IGp1c3QgYmUgZWFzaWVyLg0KPiBBdCB0aGUgdmVyeSBsZWFzdCwgbWV0aG9k IGRlZmluaXRpb25zICh0aGUgYXJndW1lbnQgbmFtZXMgYW5kIHRoZWlyIGRlZmF1bHQgdmFsdWVz KSBjb3VsZCBiZSBzaGFyZWQgYW5kIGF2b2lkIGR1cGxpY2F0aW9uLg0KPiANCj4gV2hhdCBkbyB5 b3UgdGhpbms/DQoNCkkgdW5kZXJzdGFuZCB5b3VyIGNvbmNlcm4uIEJ1dCBJJ20gbm90IHN1cmUg d2UgY2FuIHNoYXJlIHRoZXNlIGNvZGUgYmVjYXVzZSB0aGV5IGFyZSAiaW1wbGVtZW50YXRpb24i IGFuZCBkZXBlbmQgb24gYmFja2VuZCBpbnRlcnByZXRlci4NCg0KQW55d2F5LCBpdCBpcyB2ZXJ5 IGZpcnN0IHN0YWdlIGFuZCBpZiB0aGlzIGFwcHJvYWNoIGJlY29tZXMgbWF0dXJlLCB3ZSBjYW4g ZGlzY3VzcyBtb3JlIGFnYWluLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpGZWF0dXJlICMxNjI1NDogTVJJIGludGVybmFsOiBEZWZpbmUgYnVpbHQtaW4gY2xh c3NlcyBpbiBSdWJ5IHdpdGggYF9faW50cmluc2ljX19gIHN5bnRheA0KaHR0cHM6Ly9idWdzLnJ1 YnktbGFuZy5vcmcvaXNzdWVzLzE2MjU0I2NoYW5nZS04MjU2Nw0KDQoqIEF1dGhvcjoga28xIChL b2ljaGkgU2FzYWRhKQ0KKiBTdGF0dXM6IE9wZW4NCiogUHJpb3JpdHk6IE5vcm1hbA0KKiBBc3Np Z25lZToga28xIChLb2ljaGkgU2FzYWRhKQ0KKiBUYXJnZXQgdmVyc2lvbjogDQotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEFic3RyYWN0DQoNCk1SSSBkZWZpbmVz IG1vc3Qgb2YgYnVpbHQtaW4gY2xhc3NlcyBpbiBDIHdpdGggQy1BUElzIGxpa2UgYHJiX2RlZmlu ZV9tZXRob2QoKWAuDQpIb3dldmVyLCB0aGVyZSBhcmUgc2V2ZXJhbCBpc3N1ZXMgdXNpbmcgQy1B UElzLg0KDQpBIGZldyBtZXRob2RzIGFyZSBkZWZpbmVkIGluIFJ1Ynkgd3JpdHRlbiBpbiBgcHJl bHVkZS5yYmAuDQpIb3dldmVyLCB3ZSBjYW4gbm90IGRlZmluZSBhbGwgb2YgY2xhc3NlcyBiZWNh dXNlIHdlIGNhbiBub3QgdG91Y2ggZGVlcCBkYXRhIHN0cnVjdHVyZSBpbiBSdWJ5Lg0KRnVydGhl cm1vcmUsIHRoZXJlIGFyZSBwZXJmb3JtYW5jZSBpc3N1ZXMgaWYgd2Ugd3JpdGUgYWxsIG9mIHRo ZW0gaW4gUnVieS4NCg0KVG8gc29sdmUgdGhpcyBzaXR1YXRpb24sIEkgd2FudCB0byBzdWdnZXN0 IHdyaXR0ZW4gaW4gUnVieSB3aXRoIEMgaW50cmluc2ljIGZ1bmN0aW9ucy4NClRoaXMgcHJvcG9z YWwgaXMgc2FtZSBhcyBteSBSdWJ5S2FpZ2kgMjAxOSB0YWxrIDxodHRwczovL3J1YnlrYWlnaS5v cmcvMjAxOS9wcmVzZW50YXRpb25zL2tvMS5odG1sPi4NCg0KIyBUZXJtaW5vbG9neQ0KDQoqIEMt bWV0aG9kczogbWV0aG9kcyBkZWZpbmVkIGluIEMgKGRlZmluZWQgd2l0aCBgcmJfZGVmaW5lX21l dGhvZCgpYCwgZXRjKS4NCiogUnVieS1tZXRob2RzOiBtZXRob2RzIGRlZmluZWQgaW4gUnVieS4N CiogSVNlcTogVGhlIGJvZHkgb2YgYFJVYnlWTTo6SW5zdHJ1Y3Rpb25TZXF1ZW5jZWAgb2JqZWN0 IHdoaWNoIHJlcHJlc2VudHMgYnl0ZWNvZGUgZm9yIFZNLg0KDQojIEJhY2tncm91bmQgLyBQcm9i bGVtIC8gSWRlYQ0KDQojIyBXcml0dGVuIGluIEMNCg0KQXMgeW91IE1SSSBkZXZlbG9wZXJzIGtu b3csIG1vc3Qgb2YgbWV0aG9kcyBhcmUgd3JpdHRlbiBpbiBDIHdpdGggQy1BUElzLg0KSG93ZXZl ciwgdGhlcmUgYXJlIHNldmVyYWwgaXNzdWVzLg0KDQojIyMgKDEpIEFubm90YXRpb24gaXNzdWVz IChjb21wYXJlIHdpdGggUnVieSBtZXRob2RzKQ0KDQpGb3IgZXhhbXBsZSwgQy1tZXRob2RzIGRl ZmluZWQgYnkgQy1BUElzIGRvZXNuJ3QgaGF2ZSBgcGFyYW1ldGVyc2AgaW5mb3JtYXRpb24gd2hp Y2ggYXJlIHJldHVybmVkIGJ5IGBNZXRob2QjcGFyYW1ldGVyc2AsIGJlY2F1c2UgdGhlcmUgaXMg d2F5IHRvIGRlZmluZSBwYXJhbWV0ZXJzIGZvciBDIG1ldGhvZHMuDQpUaGVyZSBhcmUgcHJvcG9z YWxzIHRvIGFkZCBwYXJhbWV0ZXIgbmFtZSBpbmZvcm1hdGlvbiBmb3IgQy1tZXRob2RzLCBob3dl dmVyLCBJIHRoaW5rIGl0IHdpbGwgaW50cm9kdWNlIG5ldyBjb21wbGV4IEMtQVBJcyBhbmQgaW50 cm9kdWNlIGFkZGl0aW9uYWwgb3ZlcmhlYWQgb24gYm9vdCB0aW1lLg0KDQotPiBJZGVhOyBXcml0 aW5nIG1ldGhvZHMgaW4gUnVieSB3aWxsIHNvbHZlIHRoaXMgaXNzdWUuDQoNCiMjIyAoMikgQW5u b3RhdGlvbiBpc3N1ZXMgKGZvciBmdXJ0aGVyIG9wdGltaXphdGlvbikNCg0KSXQgaXMgdXNlZnVs IHRvIGtub3cgdGhlIG1ldGhvZHMgYXR0cmlidXRlLCBmb3IgZXhhbXBsZSwgdGhlIG1ldGhvZCBj YXVzZXMgbm8gc2lkZS1lZmZlY3QgKGEgcHVyZSBtZXRob2QpLg0KTGFiZWxpbmcgYWxsIG9mIG1l dGhvZHMgaW5jbHVkaW5nIHVzZXIgcHJvZ3JhbSdzIG1ldGhvZHMgZG9lc24ndCBzZWVtIGdvb2Qg aWRlYSAobm90IFJ1Ynktd2F5KS4gQnV0IEkgdGhpbmsgYW5ub3RhdGluZyBidWlsdC1pbiBtZXRo b2RzIGlzIGdvb2Qgd2F5IGJlY2F1c2Ugd2UgY2FuIG1hbmFnZSAoYW5kIHdlIGNhbiByZW1vdmUg dGhlbSB3aGVuIHdlIGNhbiBtYWtlIGdvb2QgYW5hbHl6ZXIpLg0KDQpUaGVyZSBhcmUgbm8gd2F5 IHRvIGFubm90YXRlIHRoaXMga2luZCBvZiBhdHRyaWJ1dGVzLg0KDQotPiBJZGVhOiBXcml0aW5n IG1ldGhvZHMgaW4gUnVieSB3aWxsIG1ha2UgaXQgZWFzeSB0byBpbnRyb2R1Y2UgbmV3IGFubm90 YXRpb25zLg0KDQojIyMgKDMpIFBlcmZvcm1hbmNlIGlzc3VlDQoNClRoZXJlIGFyZSBzZXZlcmFs IGZlYXR1cmVzIHdoaWNoIGFyZSBzbG93ZXIgaW4gQyB0aGFuIHdyaXR0ZW4gaW4gUnVieS4NCg0K KiBleGNlcHRpb24gaGFuZGxpbmcgKGByYl9lbnN1cmUoKWAsIGV0YykgYmVjYXVzZSB3ZSBuZWVk IHRvIGNhcHR1cmUgY29udGV4dCB3aXRoIGBzZXRqbXBgIG9uIEMtbWV0aG9kcy4gUnVieS1tZXRo b2RzIGRvZXNuJ3QgbmVlZCB0byBjYXB0dXJlIGFueSBjb250ZXh0IGZvciBleGNlcHRpb24gaGFu ZGxpbmcuDQoqIFBhc3Npbmcga2V5d29yZCBwYXJhbWV0ZXJzIGJlY2F1c2UgUnVieS1tZXRob2Rz IGRvZXNuJ3QgbmVlZCB0byBtYWtlIGEgSGFzaCBvYmplY3QgdG8gcGFzcyB0aGUga2V5d29yZCBw YXJhbWV0ZXJzIGlmIHRoZXkgYXJlIHBhc3NlZCB3aXRoIGV4cGxpY2l0IGtleXdvcmQgcGFyYW1l dGVycyAoYGZvbyhrMTogdjEsIGsyOiB2MilgKS4NCg0KLT4gSWRlYTogV3JpdGluZyBtZXRob2Rz IGluIFJ1YnkgbWFrZXMgdGhlbSBmYXN0ZXIuDQoNCiMjIyAoNCkgUHJvZHVjdGl2aXR5DQoNCkl0 IGlzIHRvdWdoIHRvIHdyaXRlIHNvbWUgZmVhdHVyZXMgaW4gQzoNCg0KRm9yIGV4YW1wbGUsIGl0 IGlzIGVhc3kgdG8gd3JpdGUgYHJlc2N1ZWAgc3ludGF4IGluIFJ1Ynk6DQoNCmBgYHJ1YnkNCiMg aW4gUnVieQ0KZGVmIGR1bW15X2Z1bmNfcmVzY3VlDQogIG5pbA0KcmVzY3VlDQogIG5pbA0KZW5k DQpgYGANCg0KQnV0IGl0IGlzIGRpZmZpY3VsdCB0byB3cml0ZS9yZWFkIGluIEM6DQoNCmBgYEMN CnN0YXRpYyBWQUxVRQ0KZHVtbXlfYm9keShWQUxVRSBzZWxmKQ0Kew0KICAgIHJldHVybiBRbmls Ow0KfQ0Kc3RhdGljIFZBTFVFDQpkdW1teV9yZXNjdWUoVkFMVUUgc2VsZikNCnsNCiAgICByZXR1 cm4gUW5pbDsNCn0NCnN0YXRpYyBWQUxVRQ0KdGR1bW15X2Z1bmNfcmVzY3VlKFZBTFVFIHNlbGYp DQp7DQogICAgcmV0dXJuIHJiX3Jlc2N1ZShkdW1teV9ib2R5LCBzZWxmLCBkdW1teV9yZXNjdWUs IHNlbGYpOw0KfQ0KYGBgDQoNCih0cmFpbmVkIE1SSSBkZXZlbG9wZXIgY2FuIHNheSBpdCBpcyBu b3QgdG91Z2gsIHRob3VnaCA6cCkNCg0KLT4gSWRlYTogV3JpdGluZyBtZXRob2RzIGluIFJ1Ynkg bWFrZXMgdGhlbSBlYXN5Lg0KDQojIyMgKDUpIEFQSSBjaGFuZ2UNCg0KVG8gaW50cm9kdWNlIGBH dWlsZGAsIEkgd2FudCB0byBwYXNzIGEgImNvbnRleHQiIHBhcmFtZXRlciAoYXMgYSBmaXJzdCBw YXJhbWV0ZXIpIGZvciBlYWNoIEMtZnVuY3Rpb25zIGxpa2UgYG1yYl9zdGF0ZWAgb24gbXJ1Ynku DQpUaGlzIGlzIGJlY2F1c2UgZ2V0dGluZyBpdCBmcm9tIFRMUyAoVGhyZWFkLWxvY2FsLXN0b3Jh Z2UpIGlzIGhpZ2gtY29zdCBvcGVyYXRpb24gb24gZHluYW1pYyBsaWJyYXJ5IChsaWJydWJ5KS4N Cg0KTWF5YmUgbm9ib2R5IGFsbG93IG1lIHRvIGNoYW5nZSB0aGUgc3BlY2lmaWNhdGlvbiBvZiBm dW5jdGlvbnMgdXNlZCBieSBgcmJfZGVmaW5lX21ldGhvZCgpYC4NCg0KLT4gSWRlYTogQnV0IGlu dHJvZHVjZSBuZXcgbWV0aG9kIGRlZmluaXRpb24gZnJhbWV3b3JrLCB3ZSBjYW4gbW92ZSBhbmQg Y2hhbmdlIHRoZSBzcGVjaWZpY2F0aW9uLCBJIGhvcGUuDQpPZiBjb3Vyc2UsIHdlIGNhbiByZW1h aW4gY3VycmVudCBgcmJfZGVmaW5lX21ldGhvZCgpYCBBUElzICh3aXRoIGFkZGl0aW9uYWwgY29z dCBvbiBgR3VpbGRgIGF2YWlsYWJsZSBNUkkpLg0KDQojIyBXcml0dGVuIGluIFJ1YnkgaW4gYHBy ZWx1ZGUucmJgDQoNClRoZXJlIGlzIGEgZmlsZSBgcHJlbHVkZS5yYmAgd2hpY2ggYXJlIGxvYWRl ZCBhdCBib290IHRpbWUuDQpUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgc2V2ZXJhbCBtZXRo b2RzLCB0byByZWR1Y2Uga2V5d29yZCBwYXJhbWV0ZXJzIG92ZXJoZWFkLCBmb3IgZXhhbXBsZSAo YElPI3JlYWRfbm9uYmxvY2tgLCBgVHJhY2VQb2ludCNlbmFibGVgKS4NCg0KSG93ZXZlciwgd3Jp dGluZyBhbGwgb2YgbWV0aG9kcyBpbiBSdWJ5IGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlOg0KDQoq ICgxKSBmZWFzaWJpbGl0eSBpc3N1ZSAod2UgY2FuIG5vdCBhY2Nlc3MgaW50ZXJuYWwgZGF0YSBz dHJ1Y3R1cmUpDQoqICgyKSBwZXJmb3JtYW5jZSBpc3N1ZSAoc2xvdyBpbiBnZW5lcmFsLCBvZiBj b3Vyc2UpDQoqICgzKSBhdG9taWNpdHkgaXNzdWUgKEdWTC9HSUwpDQoNClRvIHNvbHZlICgxKSwg d2UgY2FuIHByb3ZpZGUgbG93LWxldmVsIEMtbWV0aG9kcyB0byBpbXBsZW1lbnQgaGlnaC1sZXZl bCAobm9ybWFsIGJ1aWx0LWluKSBtZXRob2RzLiBIb3dldmVyIGlzc3VlcyAoMikgYW5kICgzKSBh cmUgbm90IHNvbHZlZC4NCihGcm9tIENTIHJlc2VhcmNoZXJzIHBlcnNwZWN0aXZlLCBtYWtpbmcg Y2xldmVyIGNvbXBpbGVyIHdpbGwgc29sdmUgdGhlbSwgbGlrZSBKVk0sIGV0YywgQnV0IHdlIGRv bid0IGhhdmUgaXQgeWV0KQ0KDQotPiBJZGVhOiBXcml0aW5nIG1ldGhvZCBib2R5IGluIEMgaXMg ZmVhc2libGUuDQoNCiMgUHJvcG9zYWwNCg0KKDEpIEludHJvZHVjaW5nIGBpbnRyaW5zaWNgIG1l Y2hhbmlzbSB0byBkZWZpbmUgYnVpbHQtaW4gbWV0aG9kcyBpbiBSdWJ5Lg0KKDIpIExvYWQgZnJv bSBiaW5hcnkgZm9ybWF0IHRvIHJlZHVjZSBzdGFydHVwIHRpbWUuDQoNCiMjICgxKSBJbnRyaW5z aWMgZnVuY3Rpb24NCg0KIyMjIENhbGxpbmcgaW50cmluc2ljIGZ1bmN0aW9uIHN5bnRheCBpbiBS dWJ5DQoNClRvIGRlZmluZSBidWlsdC1pbiBtZXRob2RzLCBpbnRyb2R1Y2Ugc3BlY2lhbCBSdWJ5 IHN5bnRheCBgX19pbnRyaW5zaWNfXy5mdW5jKGFyZ3MpYC4NCkluIHRoaXMgY2FzZSwgcmVnaXN0 ZXJlZCBpbnRyaW5zaWMgZnVuY3Rpb24gYGZ1bmMoKWAgaXMgY2FsbGVkIHdpdGggYGFyZ3NgLg0K DQpJbiBub3JtYWwgUnVieSBwcm9ncmFtLCBgX19pbnRyaW5zaWNfX2AgaXMgYSBsb2NhbCB2YXJp YWJsZSBvciBhIG1ldGhvZC4NCkhvd2V2ZXIsIHJ1bm5pbmcgb24gc3BlY2lhbCBtb2RlLCB0aGV5 IGFyZSBwYXJzZWQgYXMgaW50cmluc2ljIGZ1bmN0aW9uIGNhbGwuDQoNCkludHJpbnNpYyBmdW5j dGlvbnMgY2FuIG5vdCBiZSBjYWxsZWQgd2l0aDoNCg0KKiBibG9jayANCioga2V5d29yZCBhcmd1 bWVudHMNCiogc3BsYXQgYXJndW1lbnRzDQoNCiMjIyBEZXZlbG9wbWVudCBzdGVwIHdpdGggaW50 cmluc2ljIGZ1bmN0aW9ucw0KDQooMSkgV3JpdGUgYSBjbGFzcy9tb2R1bGUgaW4gUnVieSB3aXRo IGludHJpbnNpYyBmdW5jdGlvbi4NCg0KYGBgcnVieQ0KIyBzdHJpbmcucmINCmNsYXNzIFN0cmlu Zw0KICBkZWYgbGVuZ3RoDQogICAgX19pbnRyaW5zaWNfXy5zdHJfbGVuZ3RoDQogIGVuZA0KZW5k DQpgYGANCg0KKDIpIEltcGxlbWVudCBpbnRyaW5zaWMgZnVuY3Rpb25zDQoNCkl0IGlzIGFsbW9z dCBzYW1lIGFzIGZ1bmN0aW9ucyB1c2VkIGJ5IGByYl9kZWZpbmVfbWV0aG9kKClgLg0KSG93ZXZl ciBpdCB3aWxsIGFjY2VwdCBjb250ZXh0IHBhcmFtZXRlciBhcyB0aGUgZmlyc3QgcGFyYW1ldGVy Lg0KDQooYHJiX2V4ZWN1dGlvbl9jb250ZXh0X3RgIGlzIHRvbyBsb25nLCBzbyB3ZSBjYW4gcmVu YW1lIGl0LCBgcmJfc3RhdGVgIGZvciBleGFtcGxlKQ0KDQpgYGBDDQpzdGF0aWMgVkFMVUUNCnN0 cl9sZW5ndGgocmJfZXhlY3V0aW9uX2NvbnRleHRfdCAqZWMsIFZBTFVFIHNlbGYpDQp7DQogIHJl dHVybiBMT05HMk5VTShSU1RSSU5HX0xFTihzZWxmKSk7DQp9DQpgYGANCg0KKDMpIERlZmluZSBh biBpbnRyaW5zaWMgZnVuY3Rpb24gdGFibGUgYW5kIGxvYWQgYC5yYmAgZmlsZSB3aXRoIHRoZSB0 YWJsZS4NCg0KYGBgQw0KSW5pdF9TdHJpbmcodm9pZCkNCnsNCiAgLi4uDQogIHN0YXRpYyBjb25z dCByYl9leHBvcnRfaW50cmluc2ljX3QgdGFibGVbXSA9IHsNCiAgICBSQl9FWFBPUlRfSU5UUklO U0lDKHN0cl9sZW5ndGgsIDApLCAvLyAwIGlzIGFyaXR5DQogICAgLi4uDQogIH07DQogIHJiX3Zt X2J1aWx0aW5fbG9hZCgic3RyaW5nIiwgdGFibGUpOw0KfQ0KYGBgDQoNCiMjIyBFeGFtcGxlDQoN ClRoZXJlIGFyZSB0d28gZXhhbXBsZXM6DQoNCigxKSBDb21wYXJhYmxlIG1vZHVsZTogaHR0cHM6 Ly9naXN0LmdpdGh1Yi5jb20va28xLzdmMThlNjZkMWFlMjViYjMwYzdlODIzYWE1N2YwZDMxDQoo MikgVHJhY2VQb2ludCBjbGFzczogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20va28xLzk2OWU1Njkw Y2RhNjE4MGVkOTg5ZWI3OTYxOWNhNjEyDQoNCiMjICgyKSBMb2FkIGZyb20gYmluYXJ5IGZpbGUg d2l0aCBsYXp5IGxvYWRpbmcNCg0KTG9hZGluZyBtYW55ICIucmIiIGZpbGVzIHNsb3dzIGRvd24g c3RhcnR1cCB0aW1lLg0KDQpXZSBoYXZlIGBJU2VxI3RvX2JpbmFyeWAgbWV0aG9kIHRvIGdlbmVy YXRlIGNvbXBpbGVkIGJpbmFyeSBkYXRhIHNvIHRoYXQgd2UgY2FuIGVsaW1pbmF0ZSBwYXJzZS9j b21waWxlIHRpbWUuDQpGb3J0dW5hdGVseSwgW0ZlYXR1cmUgIzE2MTYzXSBtYWtlcyBiaW5hcnkg ZGF0YSBzbWFsbC4NCkZ1cnRoZXJtb3JlLCBlbmFibGluZyAibGF6eSBsb2FkaW5nIiBmZWF0dXJl IGltcHJvdmVzIHN0YXJ0dXAgdGltZSBiZWNhdXNlIHdlIGRvbid0IG5lZWQgdG8gZ2VuZXJhdGUg Y29tcGxldGUgSVNlcXMuIGBVU0VfTEFaWV9MT0FEYCBpbiB2bV9jb3JlLmggZW5hYmxlcyB0aGlz IGZlYXR1cmUuDQoNCldlIG5lZWQgdG8gY29tYmluZSBiaW5hcnkuIFRoZXJlIGFyZSBzZXZlcmFs IHdheSAoY29udmVydCBpbnRvIEMncyBhcnJheSwgY29uY2F0IHdpdGggb2JqY29weSBpZiBhdmFp bGFibGUgYW5kIHNvIG9uKS4NCg0KIyBFdmFsdWF0aW9uDQoNCkV2YWx1YXRpb25zIGFyZSB3cml0 dGVuIGluIG15IFJ1YnlLYWlnaSAyMDE5IHByZXNlbnRhdGlvbjogPGh0dHBzOi8vcnVieWthaWdp Lm9yZy8yMDE5L3ByZXNlbnRhdGlvbnMva28xLmh0bWw+DQoNClBvaW50czoNCg0KKiBDYWxsaW5n IG92ZXJoZWFkIG9mIFJ1YnkgbWVodG9kcyB3aXRoIGludHJpbnNpYyBmdW5jdGlvbnMNCiAgKiBO b3JtYWwgY2FzZSwgaXQgaXMgYWxtb3N0IHNhbWUgYXMgQy1tZXRob2RzIHVzaW5nIG9wdGltaXpl ZCBWTSBpbnN0cnVjdGlvbnMuDQogICogV2l0aCBrZXl3b3JkIHBhcmFtZXRlcnMsIGl0IGlzIGZh c3RlciB0aGFuIEMtbWV0aG9kcy4NCiAgKiBXaXRoIG9wdGlvbmFsIHBhcmFtZXRlcnMsIGl0IGlz IHgyIHNsb3dlciBzbyBpdCBzaG91bGQgYmUgc29sdmVkICgqMSkuDQoNCiogTG9hZGluZyBvdmVy aGVhZA0KICAqIFJlcXVpcmluZyAiLnJiIiBmaWxlcyBpcyBhYm91dCB4MTUgc2xvd2VyIHRoYW4g ZGVmaW5pbmcgQyBtZXRob2RzLg0KICAqIExvYWRpbmcgYmluYXJ5IGRhdGEgd2l0aCBsYXp5IGxv YWRpbmcgdGVjaG5pcXVlIGlzIGFib3V0IHgyIHNsb3dlciB0aGFuIEMgbWV0aG9kcy4gTm90IHNv IGJhZCByZXN1bHQuDQogICogQXQgUnVieUthaWdpIDIwMTksIHRoZSBiaW5hcnkgZGF0YSB3YXMg dmVyeSBodWdlLCBidXQgW0ZlYXR1cmUgIzE2MTYzXSByZWR1Y2VzIHRoZSBzaXplIG9mIGJpbmFy eSBkYXRhLg0KDQpbKjFdIEludHJvZHVjaW5nIHNwZWNpYWwgIm92ZXJsb2FkaW5nIiBzcGVjaWZp ZXIgY2FuIHNvbHZlIGl0IGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBhc3NpZ24gb3B0aW9uYWwg cGFyYW1ldGVycy4gRmlyc3QgbWV0aG9kIGxvb2t1cCBjYW4gYmUgc2xvd2VkIGRvd24sIGJ1dCB3 ZSBjYW4gY2FjaGUgdGhlIG1ldGhvZCBsb29rdXAgcmVzdWx0cyAod2l0aCBhcml0eSkuDQoNCmBg YHJ1YnkNCiMgZXhhbXBsZSBzeW50YXgNCm92ZXJsb2FkIGRlZiBmb28oYSkNCiAgX19pbnRyaW5z aWNfXy5mb28xKGEpDQplbmQNCm92ZXJsb2FkIGRlZiBmb28oYSwgYikNCiAgX19pbnRyaW5zaWNf Xy5mb28yKGEsIGIpDQplbmQNCmBgYA0KDQojIEltcGxlbWVudGF0aW9uDQoNCkRvbmU6DQoqIENv bXBpbGUgY2FsbGluZyBpbnRyaW5zaWMgZnVuY3Rpb25zICgucmIpDQoqIEV4cG9ydGluZyBpbnRy aW5zaWMgZnVuY3Rpb24gdGFibGUgKC5jKQ0KDQpOb3QgeWV0Og0KKiBMb2FkaW5nIGZyb20gYmlu YXJ5IG1lY2hhbmlzbQ0KKiBBdHRyaWJ1dGUgc3ludGF4DQoqIG1vc3Qgb2YgYnVpbHQtaW4gY2xh c3MgcmVwbGFjZW1lbnQNCg0KTm93LCBtaW5pcnVieSBhbmQgcnVieSAobGlicnVieSkgbG9hZCAn Ki5yYicgZmlsZXMgZGlyZWN0bHkuIEhvd2V2ZXIsIHJ1YnkgKGxpYnJ1YnkpIHNob3VsZCBsb2Fk IGNvbXBpbGVkIGJpbmFyeSBmaWxlLg0KDQojIERpc2N1c3Npb24NCg0KIyMgRG8gd2UgcmV3cml0 ZSBhbGwgb2YgYnVpbHQtaW4gY2xhc3NlcyBhdCBvbmNlPw0KDQpOby4gV2UgY2FuIHRyeSBhbmQg bWlncmF0ZSB0aGVtLg0KDQojIyBEbyB3ZSBzdXBwb3J0IGludHJpbnNpYyBtZWNoYW5pc20gZm9y IEMtZXh0ZW5zaW9uIGxpYnJhcmllcz8NCg0KTWF5YmUgaW4gZnV0dXJlLiBOb3cgd2UgY2FuIHRy eSBpdCBvbiBNUkkgY29yZXMuDQoNCiMjIGBfX2ludHJpbnNpY19fYCBrZXl3b3JkDQoNCk9uIG15 IFJ1YnlLYWlnaSAyMDE5IHRhbGssIEkgcHJvcG9zZWQgYF9fQ19fYCwgYnV0IEkgdGhpbmsgYF9f aW50cmluc2ljX19gIGlzIG1vcmUgZGVzY3JpcHRpdmUgKGJ1dCBhIGJpdCBsb25nKS4NCkFub3Ro ZXIgaWRlYSBpcyBgUnVieVZNOjppbnRyaW5zaWMuZnVuYyguLi4pYC4NCg0KSSBoYXZlIG5vIHN0 cm9uZyBvcGluaW9uLiBXZSBjYW4gY2hhbmdlIHRoaXMgc3ludGF4IHVudGlsIHdlIGV4cG9zZSB0 aGlzIHN5bnRheCBmb3IgQy1leHRlbnNpb25zLg0KDQojIyBDYW4gd2Ugc3VwcG9ydCBgX19pbnRy aW5zaWNfX2AgaW4gbm9ybWFsIFJ1Ynkgc2NyaXB0Pw0KDQpOby4gVGhpcyBmZWF0dXJlIGlzIG9u bHkgZm9yIGJ1aWx0LWluIGZlYXR1cmVzLg0KQXMgSSBkZXNjcmliZWQs44CAY2FsbGluZyBpbnRy aW5zaWMgZnVuY3Rpb24gc3ludGF4IGhhcyBzZXZlcmFsIHJlc3RyaWN0aW9uIGNvbXBhcmUgd2l0 aCBub3JtYWwgbWV0aG9kIGNhbGxzLCBzbyB0aGF0IEkgdGhpbmsgdGhleSBhcmUgbm90IGV4cG9z ZWQgYXMgbm9ybWFsIFJ1YnkgcHJvZ3JhbXMsIElNTy4NCg0KIyMgU2hvdWxkIHdlIG1haW50YWlu IGludHJpbnNpYyBmdW5jdGlvbiB0YWJsZT8NCg0KTm93LCB5ZXMuIEFuZCB3ZSBuZWVkIHRvIG1h a2UgdGhpcyB0YWJsZSBhdXRvbWF0aWNhbGx5IGJlY2F1c2UgbWFudWFsIG9wZXJhdGlvbnMgY2Fu IGludHJvZHVjZSBtaXN0YWtlIHZlcnkgZWFzaWx5Lg0KDQpDb3JyZXNwb25kaW5nICIucmIiIGZp bGUgKGB0cmFjZV9wb2ludC5yYmAsIGZvciBleGFtcGxlKSBrbm93cyB3aGljaCBpbnRyaW5zaWMg ZnVuY3Rpb25zIGFyZSBuZWVkZWQuDQpQYXJzaW5nICIucmIiIGZpbGUgY2FuIGdlbmVyYXRlIHRo ZSB0YWJsZSBhdXRvbWF0aWNhbGx5Lg0KSG93ZXZlciwgd2UgbmVlZCBhIGxhdGVzdCB2ZXJzaW9u IFJ1YnkgdG8gcGFyc2UgdGhlIHNjcmlwdHMgaWYgdGhleSB1c2VzIHN5bnRheCB3aGljaCBhcmUg c3VwcG9ydGVkIGJ5IGxhdGVzdCB2ZXJzaW9uIG9mIFJ1YnkuDQoNCkZvciBleGFtcGxlLCB3ZSBu ZWVkIFJ1YnkgMi43IG1hc3RlciB0byBwYXJzZSBhIHNjcmlwdCB3aGljaCB1c2VzIHBhdHRlcm4g bWF0Y2hpbmcgc3ludGF4Lg0KSG93ZXZlciwgdGhlIHN5c3RlbSdzIHJ1YnkgKGBCQVNFX1JVQllg KSBzaG91bGQgYmUgb2xkZXIgdmVyc2lvbi4gVGhpcyBpcyBvbmUgb2YgYm9vdHN0cmFwIHByb2Js ZW0uDQpUaGlzIGlzICJjaGlja2VuLWFuZC1lZ2ciIHByb2JsZW0uDQoNClRoZXJlIGFyZSBzZXZl cmFsIGlkZWFzLg0KDQooMSkgUGFyc2UgYSAiLmMiIGZpbGUgdG8gZ2VuZXJhdGUgYSB0YWJsZSB1 c2luZyBmdW5jdGlvbiBhdHRyaWJ1dGUuDQoNCmBgYEMNCklOVFJJTlNJQ19GVU5DVElPTiBzdGF0 aWMgVkFMVUUNCnN0cl9sZW5ndGgoLi4uKQ0KLi4uDQpgYGANCg0KKDIpIEJ1aWxkIGFub3RoZXIg cnVieSBwYXJzZXIgd2l0aCBzb3VyY2UgY29kZSwgInBhcnNlLXJ1YnkiLg0KDQoqIDEuIGdlbmVy YXRlIHBhcnNlLXJ1Ynkgd2l0aCBDIGNvZGUuDQoqIDIuIHJ1biBwYXJzZS1ydWJ5IHRvIGdlbmVy YXRlIHRhYmxlcyBieSBwYXJzaW5nICIucmIiIGZpbGVzLiBUaGlzIHByb2Nlc3MgaXMgd3JpdHRl biBpbiBDLg0KKiAzLiBidWlsZCBtaW5pcnVieSBhbmQgcnVieSB3aXRoIGdlbmVyYXRlZCB0YWJs ZS4NCg0KV2UgY2FuIG1ha2UgaXQsIGJ1dCBpdCBpbnRyb2R1Y2VzIG5ldyBjb21wbGV4IGJ1aWxk IHByb2Nlc3MuDQoNCigzKSBSZXN0cmljdCAiLnJiIiBzeW50YXgNCg0KUmVzdHJpY3Qgc3ludGF4 IHdoaWNoIGNhbiBiZSB1c2VkIGJ5IGBCQVNFX1JVQllgIGZvciBidWlsdC1pbiAiLnJiIiBmaWxl cy4NCkl0IGlzIGVhc3kgdG8gbGlzdCB1cCBpbnRyaW5zaWMgZnVuY3Rpb25zIHVzaW5nIFJpcHBl ciBvciBBU1Qgb3IgYElTZXEjdG9fYWAuDQoNCigzKSBpcyBtb3N0IGVhc3kgYnV0IG5vdCBzbyBj b29sLg0KKDIpIGlzIGZsZXhpYmxlLCBidXQgaXQgbmVlZHMgaW1wbGVtZW50YXRpb24gY29zdCBh bmQgaW5jcmVhc2VzIGJ1aWxkIGNvbXBsZXhpdHkuDQoNCg0KIyMgUGF0aCBvZiAnKi5yYicgZmls ZXMgYW5kIGluc3RhbGwgb3Igbm90DQoNClRoZSBwYXRoIG9mIGBwcmVsdWRlLnJiYCBpcyBgPGlu dGVybmFsOnByZWx1ZGU+YC4gV2UgaGF2ZSBzZXZlcmFsIG9wdGlvbnMuDQoNCiogKDEpIERvbid0 IGluc3RhbGwgIi5yYiIgZmlsZXMgYW5kIG1ha2UgdGhlc2UgcGF0aCBgPGludGVybmFsOnRyYWNl X3BvaW50LnJiPmAsIGZvciBleGFtcGxlLg0KKiAoMikgSW5zdGFsbCAiLnJiIiBhbmQgbWFrZSB0 aGVzZSBwYXRocyBub24tZXhpc3RpbmcgcGF0aHMgc3VjaCBhcyBgPGludGVybmFsPi9pbnN0YWxs ZGlyL2xpYi9idWlsdGluL3RyYWNlX3BvaW50LnJiYC4NCiogKDMpIEluc3RhbGwgIi5yYiIgYW5k IG1ha2UgdGhlc2UgcGF0aHMgcmVhbCBwYXRocy4NCg0KV2Ugd2lsbCB0cmFuc2xhdGUgIi5yYiIg ZmlsZXMgaW50byBiaW5hcnkgZGF0YSBhbmQgbGluayB0aGVtIGludG8gYHJ1YnlgIChgbGlicnVi eWApLg0KU28gdGhlIG1vZGlmaWNhdGlvbiBvZiBpbnN0YWxsZWQgIi5yYiIgZmlsZXMgYXJlIG5v dCBhZmZlY3QgdGhlIGJlaGF2aW9yLiBJdCBjYW4gaW50cm9kdWNlIGNvbmZ1c2lvbiBzbyB0aGF0 IEkgd3JvdGUgKDEpIGFuZCAoMikuDQoNCkZvciAoMyksIGl0IGlzIHBvc3NpYmxlIHRvIGxvYWQg Ii5yYiIgZmlsZXMgaWYgdGhlcmUgaXMgbW9kaWZpY2F0aW9uIChtYXliZSBkZXRlY3QgYnkgbW9k aWZpZWQgZGF0ZSkgYW5kIGxvYWQgZnJvbSB0aGVtLiBCdXQgaXQgd2lsbCBpbnRyb2R1Y2UgYW4g b3ZlcmhlYWQgKGRpc2sgYWNjZXNzIG92ZXJoZWFkKS4NCg0KIyMgQ29tcGF0aWJpbGl0eSBpc3N1 ZT8NCg0KVGhlcmUgYXJlIHNldmVyYWwgY29tcGF0aWJpbGl0eSBpc3N1ZXMuIEZvciBleGFtcGxl LCBgVHJhY2VQb2ludGAgYGMtY2FsbGAgZXZlbnRzIGFyZSBjaGFuZ2VkIHRvIGBjYWxsYCBldmVu dHMuDQpBbmQgdGhlcmUgYXJlIG1vcmUgaW5jb21wYXRpYmxlcy4NCldlIG5lZWQgdG8gY2hlY2sg dGhlbSBjYXJlZnVsbHkuDQoNCiMjIEJvb3RzdHJhcCBpc3N1ZT8NCg0KWWVzLCB0aGVyZSBhcmUu DQoNCkxvYWRpbmcgYC5yYmAgZmlsZXMgYXQgYm9vdCB0aW1pbmcgb2YgYW4gaW50ZXJwcmV0ZXIg Y2FuIGNhdXNlIHByb2JsZW0uDQpGb3IgZXhhbXBsZSwgYmVmb3JlIGluaXRpYWxpemluZyBTdHJp bmcgY2xhc3MsIHRoZSBjbGFzcyBvZiBTdHJpbmcgbGl0ZXJhbCBpcyAwIChiZWNhdXNlIFN0cmlu ZyBjbGFzcyBpcyBub3QgZ2VuZXJhdGVkKS4NCg0KSSBpbnRyb2R1Y2VzIHNldmVyYWwgd29ya2Fy b3VuZHMgYnV0IHdlIG5lZWQgdG8gbW9kaWZ5IG1vcmUuDQoNCiMgQ29uY2x1c2lvbg0KDQpIb3cg YWJvdXQgdG8gaW50cm9kdWNlIHRoaXMgbWVjaGFuaXNtIGFuZCB0cnkgaXQgb24gUnVieSAyLjc/ DQpXZSBjYW4gcmV2ZXJ0IHRoZXNlIGNoYW5nZXMgaWYgd2UgZm91bmQgYW55IHRyb3VibGVzLCBp ZiB3ZSBkb24ndCBleHBvc2UgdGhpcyBtZWNoYW5pc20gYW5kIG9ubHkgaW50ZXJuYWwgY2hhbmdl cy4NCg0KDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCg==