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.5 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY,URIBL_GREY 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 0E6221F4D7 for ; Thu, 12 May 2022 18:46:40 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sendgrid.me header.i=@sendgrid.me header.b="lszqcW23"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 2D5E3120A9C; Fri, 13 May 2022 03:46:37 +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 733D1120A98 for ; Fri, 13 May 2022 03:46:34 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sendgrid.me; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to; s=smtpapi; bh=xCbb7qAEMqZRNrENz80NilydG9VdphINMCEOn2xr1ls=; b=lszqcW23U0e7qqle4dxCZQgaBuXZW09lte9RsuRB9IK3HuAGknZhmY6oL/iyES2UIQPd /Ec747r6Y2uS1dtbMWtwdaxwA42VQWL5tLa8HsKkMXfc1h2inYtNE8I+rAS2ykADDx4ZbZ CXrl/lae+CUUWGaz3v+J3/mPeMqQXGbrY= Received: by filterdrecv-75d94df84d-hg4jv with SMTP id filterdrecv-75d94df84d-hg4jv-1-627D5608-8D 2022-05-12 18:46:32.775854109 +0000 UTC m=+3099692.733905016 Received: from herokuapp.com (unknown) by geopod-ismtpd-4-5 (SG) with ESMTP id a82SoavFSLWWFt0iP0x7Pw for ; Thu, 12 May 2022 18:46:32.731 +0000 (UTC) Date: Thu, 12 May 2022 18:46:32 +0000 (UTC) From: "tenderlovemaking (Aaron Patterson)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 18776 X-Redmine-Issue-Author: jemmai X-Redmine-Sender: tenderlovemaking 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-Redmine-MailingListIntegration-Message-Ids: 84900 X-SG-EID: =?us-ascii?Q?BKB5GcL7X6C0rbmtNyuS4vu6kpqmF4QQnKhBtJ3bB9xFaNZ3GycY7zB6Wl8eil?= =?us-ascii?Q?ZkydIZDAItvjzOlfamM+7a5D1pUwROaGAI=2FXJho?= =?us-ascii?Q?sWvhCCyplIIz8k9G7j7j6Q8cX+VJJc4ONuASoH7?= =?us-ascii?Q?rYsyceXKWHw84uBGDPLtdMrQBPmUsNk5czctmlL?= =?us-ascii?Q?bT2nPJJhNtxp086vtrZF9kMJNB1WvcpX5CtPict?= =?us-ascii?Q?Eev6u5GiAVELewuNrKdtlLzaLws4xb0Oa8dGrPa?= =?us-ascii?Q?9Pa2EDyYRKkB=2FuzOWrfwMF834eZeAVftxyR0OV3?= =?us-ascii?Q?qMA=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 108531 Subject: [ruby-core:108531] [Ruby master Feature#18776] Object Shapes X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Reply-To: Ruby developers Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGVuZGVybG92ZW1ha2luZyAoQWFyb24g UGF0dGVyc29uKS4KCgpieXJvb3QgKEplYW4gQm91c3NpZXIpIHdyb3RlIGluICNub3RlLTc6Cj4g PiAgaXQgZGVmaW5pdGVseSB3b3VsZCBiZSBlYXNpZXIgaWYgd2UgaGFkIG1vcmUgdGhhbiAxNiBi aXRzIAo+IAo+IFllYWgsIG15IHdvcnJ5IGlzIHRoYXQgd2hpbGUgdGhlIFNob3BpZnkgbW9ub2xp dGggaXMgcHJvYmFibHkgYW1vbmcgdGhlIGJpZ2dlciBjb2RlYmFzZXMsIH40MGsgb3V0IG9mIH42 NWsgaXMgcmVhbGx5IG5vdCB0aGF0IG11Y2ggbGVld2F5LgoKV2hlbiB3ZSBtZWFzdXJlZCBvbiBT aG9waWZ5IGNvcmUgaXQgd2FzIGJlZm9yZSB3ZSBoYWQgc3RhcnRlZCBpbXBsZW1lbnRpbmcgc2hh cGUgR0MuICBUaGVyZSB3ZXJlIH40MGsgc2hhcGVzLCBidXQgdGhhdCB3YXMgdGhlIHRvdGFsIG51 bWJlciBvZiBzaGFwZXMgZXZlciBzZWVuLiAgSG9wZWZ1bGx5IHdpdGggc2hhcGUgR0Mgd2UnbGwg c2VlIGEgbG93ZXIgbnVtYmVyIG9mIGxpdmUgc2hhcGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpGZWF0dXJlICMxODc3NjogT2JqZWN0IFNoYXBlcwpodHRwczov L2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTg3NzYjY2hhbmdlLTk3NTc0CgoqIEF1dGhvcjog amVtbWFpIChKZW1tYSBJc3Nyb2ZmKQoqIFN0YXR1czogT3BlbgoqIFByaW9yaXR5OiBOb3JtYWwK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE9iamVjdCBTaGFwZXMg aW1wbGVtZW50YXRpb24KCkFhcm9uIFBhdHRlcnNvbiwgRWlsZWVuIFVjaGl0ZWxsZSBhbmQgSSBo YXZlIGJlZW4gd29ya2luZyBvbiBhbiBpbXBsZW1lbnRhdGlvbiBvZiBPYmplY3QgU2hhcGVzIGZv ciBSdWJ5LiAgV2UgYXJlIGZpbGluZyBhIHRpY2tldCB0byBzaGFyZSB3aGF0IHdlJ3ZlIGJlZW4g ZG9pbmcsIGFzIHdlbGwgYXMgZ2V0IGZlZWRiYWNrIG9uIHRoZSBwcm9qZWN0IGluIGl0cyBjdXJy ZW50IHN0YXRlLgoKV2UgaG9wZSB0byBldmVudHVhbGx5IHN1Ym1pdCB0aGUgZmluYWxpemVkIHBy b2plY3QgdXBzdHJlYW0gYWZ0ZXIgdmVyaWZ5aW5nIGVmZmljYWN5LgoKIyMgV2hhdCBhcmUgT2Jq ZWN0IFNoYXBlcz8KCk9iamVjdCBzaGFwZXMgYXJlIGEgdGVjaG5pcXVlIGZvciByZXByZXNlbnRp bmcgcHJvcGVydGllcyBvZiBhbiBvYmplY3QuIE90aGVyIGxhbmd1YWdlIGltcGxlbWVudGF0aW9u cywgaW5jbHVkaW5nIFtUcnVmZmxlUnVieV0oaHR0cHM6Ly9naXRodWIuY29tL29yYWNsZS90cnVm ZmxlcnVieSkgYW5kIFtWOF0oaHR0cHM6Ly92OC5kZXYvKSwgdXNlIHRoaXMgdGVjaG5pcXVlLiBD aHJpcyBTZWF0b24sIHRoZSBjcmVhdG9yIG9mIFRydWZmbGVSdWJ5LCBkaXNjdXNzZWQgb2JqZWN0 IHNoYXBlcyBpbiBoaXMgW1J1YnlLYWlnaSAyMDIxIEtleW5vdGVdKGh0dHBzOi8vcnVieWthaWdp Lm9yZy8yMDIxLXRha2VvdXQvcHJlc2VudGF0aW9ucy9jaHJpc2dzZWF0b24uaHRtbCkgYW5kIE1h eGltZSBDaGV2YWxpZXItQm9pc3ZlcnQgZGlzY3Vzc2VkIHRoZSBpbXBsaWNhdGlvbnMgZm9yIFlK SVQgaW4gdGhlIGxhdHRlciBwYXJ0IG9mIFtoZXIgdGFsayBhdCBSdWJ5S2FpZ2kgMjAyMV0oaHR0 cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1QQlZMZjN5Zk1zOCZ0PTExMDBzKS4gVGhlIG9y aWdpbmFsIGlkZWEgb2Ygb2JqZWN0IHNoYXBlcyBbb3JpZ2luYXRlcyBmcm9tIHRoZSBTZWxmIGxh bmd1YWdlXShodHRwczovL2JpYmxpb2dyYXBoeS5zZWxmbGFuZ3VhZ2Uub3JnL19zdGF0aWMvaW1w bGVtZW50YXRpb24ucGRmKSwgd2hpY2ggaXMgY29uc2lkZXJlZCBhIGRpcmVjdCBkZXNjZW5kYW50 IG9mIFNtYWxsdGFsay4KCkVhY2ggc2hhcGUgcmVwcmVzZW50cyBhIHNwZWNpZmljIHNldCBvZiBh dHRyaWJ1dGVzIChpbnN0YW5jZSB2YXJpYWJsZXMgYW5kIG90aGVyIHByb3BlcnRpZXMpIGFuZCB0 aGVpciB2YWx1ZXMuIEluIG91ciBpbXBsZW1lbnRhdGlvbiwgYWxsIG9iamVjdHMgaGF2ZSBhIHNo YXBlLiBUaGUgc2hhcGVzIGFyZSBub2RlcyBpbiBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUuIEV2ZXJ5 IGVkZ2UgaW4gdGhlIHRyZWUgcmVwcmVzZW50cyBhbiBhdHRyaWJ1dGUgdHJhbnNpdGlvbi4KCk1v cmUgc3BlY2lmaWNhbGx5LCBzZXR0aW5nIGFuIGluc3RhbmNlIHZhcmlhYmxlIG9uIGFuIGluc3Rh bmNlIG9mIGFuIG9iamVjdCBjcmVhdGVzIGFuIG91dGdvaW5nIGVkZ2UgZnJvbSB0aGUgaW5zdGFu Y2UncyBjdXJyZW50IHNoYXBlLiBUaGlzIGlzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBzaGFwZSB0 byBhbm90aGVyLiBUaGUgZWRnZSByZXByZXNlbnRzIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSB0aGF0 IGlzIHNldC4KCkZvciBleGFtcGxlOgoKYGBgcnVieQpjbGFzcyBGb28KICBkZWYgaW5pdGlhbGl6 ZQogICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkK ICAgIEBhID0gMSAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBhIChJRCAx KQogICAgQGIgPSAyICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElE IDIpCiAgZW5kCmVuZAoKZm9vID0gRm9vLm5ldwpgYGAKCldoZW4gYEZvb2AgaXMgaW50aWFsaXpl ZCwgaXRzIHNoYXBlIGlzIHRoZSByb290IHNoYXBlIHdpdGggSUQgMC4gIFRoZSByb290IHNoYXBl IHJlcHJlc2VudHMgYW4gZW1wdHkgb2JqZWN0IHdpdGggbm8gaW5zdGFuY2UgdmFyaWFibGVzLiBF YWNoIHRpbWUgYW4gaW5zdGFuY2UgdmFyaWFibGUgaXMgc2V0IG9uIGBmb29gLCB0aGUgc2hhcGUg b2YgdGhlIGluc3RhbmNlIGNoYW5nZXMuIEl0IGZpcnN0IHRyYW5zaXRpb25zIHdpdGggYEBhYCB0 byBhIHNoYXBlIHdpdGggSUQgMSwgYW5kIHRoZW4gdHJhbnNpdGlvbnMgd2l0aCBgQGJgIHRvIGEg c2hhcGUgd2l0aCBJRCAyLiBJZiBgQGFgIGlzIHRoZW4gc2V0IHRvIGEgZGlmZmVyZW50IHZhbHVl LCBpdHMgc2hhcGUgd2lsbCByZW1haW4gdGhlIHNoYXBlIHdpdGggSUQgMiwgc2luY2UgdGhpcyBz aGFwZSBhbHJlYWR5IGluY2x1ZGVzIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSBgQGFgLiAgCgohW10o aHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTk4ODU2MC8xNjc5MTgz NjAtMGE2YzkxYWEtMjU4Ny00OGNiLThmZjItN2YzYTk1ODMyODhlLnN2ZykKClRoZXJlIGlzIG9u ZSBnbG9iYWwgc2hhcGUgdHJlZSBhbmQgb2JqZWN0cyB3aGljaCB1bmRlcmdvIHRoZSBzYW1lIHNo YXBlIHRyYW5zaXRpb25zIGluIHRoZSBzYW1lIG9yZGVyIHdpbGwgZW5kIHVwIHdpdGggdGhlIHNh bWUgZmluYWwgc2hhcGUuCgpGb3IgaW5zdGFuY2UsIGlmIHdlIGhhdmUgYSBjbGFzcyBgQmFyYCBk ZWZpbmVkIGFzIGZvbGxvd3MsIHRoZSBmaXJzdCB0cmFuc2l0aW9uIG9uIGBCYXIubmV3YCB0aHJv dWdoIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSBgQGFgIHdpbGwgYmUgdGhlIHNhbWUgYXMgYEZvby5u ZXdgJ3MgZmlyc3QgdHJhbnNpdGlvbjoKCmBgYHJ1YnkKY2xhc3MgRm9vCiAgZGVmIGluaXRpYWxp emUKICAgICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDAp CiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYSAoSUQg MSkKICAgIEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBiIChJ RCAyKQogIGVuZAplbmQKCmNsYXNzIEJhcgogIGRlZiBpbml0aWFsaXplCiAgICAjIEN1cnJlbnRs eSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEgPSAxICMgVHJh bnNpdGlvbnMgdG8gc2hhcGUgZGVmaW5lZCBlYXJsaWVyIHZpYSBlZGdlIEBhIChJRCAxKQogICAg QGMgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGMgKElEIDMpCiAg ICBAYiA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgNCkK ICBlbmQKZW5kCgpmb28gPSBGb28ubmV3ICMgYmx1ZSBpbiB0aGUgZGlhZ3JhbQpiYXIgPSBCYXIu bmV3ICMgcmVkIGluIHRoZSBkaWFncmFtCmBgYAoKSW4gdGhlIGRpYWdyYW0gYmVsb3csIHB1cnBs ZSByZXByZXNlbnRzIHNoYXJlZCB0cmFuc2l0aW9ucywgYmx1ZSByZXByZXNlbnRzIHRyYW5zaXRp b25zIGZvciBvbmx5IGBmb29gLCBhbmQgcmVkIHJlcHJlc2VudHMgdHJhbnNpdGlvbnMgZm9yIG9u bHkgYGJhcmAuCgohW10oaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20v MTk4ODU2MC8xNjc5MTg4OTktZjFhNmYzNDQtYWU1ZS00ZGMwLWIxN2EtZmIxNTZkMWQ1NTBmLnN2 ZykKCiMjIyBDYWNoZSBzdHJ1Y3R1cmUKCkZvciBpbnN0YW5jZSB2YXJpYWJsZSB3cml0ZXJzLCB0 aGUgY3VycmVudCBzaGFwZSBJRCwgdGhlIHNoYXBlIElEIHRoYXQgaXZhciB3cml0ZSB3b3VsZCB0 cmFuc2l0aW9uIHRvIGFuZCBpbnN0YW5jZSB2YXJpYWJsZSBpbmRleCBhcmUgYWxsIHN0b3JlZCBp biB0aGUgaW5saW5lIGNhY2hlLiBUaGUgc2hhcGUgSUQgaXMgdGhlIGtleSB0byB0aGUgY2FjaGUu CgpGb3IgaW5zdGFuY2UgdmFyaWFibGUgcmVhZGVycywgdGhlIHNoYXBlIElEIGFuZCBpbnN0YW5j ZSB2YXJpYWJsZSBpbmRleCBhcmUgc3RvcmVkIGluIHRoZSBpbmxpbmUgY2FjaGUuICBBZ2Fpbiwg dGhlIHNoYXBlIElEIGlzIHRoZSBjYWNoZSBrZXkuCgpgYGBydWJ5CmNsYXNzIEZvbwogIGRlZiBp bml0aWFsaXplCiAgICBAYSA9IDEgIyBJQyBzaGFwZV9pZDogMCwgbmV4dCBzaGFwZTogMSwgaXYg aW5kZXggMAogICAgQGIgPSAxICMgSUMgc2hhcGVfaWQ6IDEsIG5leHQgc2hhcGU6IDIsIGl2IGlu ZGV4IDEKICBlbmQKICAgIAogIGRlZiBhCiAgICBAYSAjIElDIHNoYXBlX2lkOiAyLCBpdiBpbmRl eCAwCiAgZW5kCmVuZApgYGAKCiMjIFJhdGlvbmFsZQoKV2UgdGhpbmsgdGhhdCBhbiBvYmplY3Qg c2hhcGUgaW1wbGVtZW50YXRpb24gd2lsbCBzaW1wbGlmeSBjYWNoZSBjaGVja3MsIGluY3JlYXNl IGlubGluZSBjYWNoZSBoaXRzLCBkZWNyZWFzZSBydW50aW1lIGNoZWNrcywgYW5kIGVuYWJsZSBv dGhlciBwb3RlbnRpYWwgZnV0dXJlIG9wdGltaXphdGlvbnMuIFRoZXNlIGFyZSBhbGwgZXhwbGFp bmVkIGJlbG93LiAKCiMjIyBTaW1wbGlmeSBjYWNoaW5nCgpUaGUgY3VycmVudCBjYWNoZSBpbXBs ZW1lbnRhdGlvbiBkZXBlbmRzIG9uIHRoZSBjbGFzcyBvZiB0aGUgcmVjZWl2ZXIuIFNpbmNlIHRo ZSBhZGRyZXNzIG9mIHRoZSBjbGFzcyBjYW4gYmUgcmV1c2VkLCB0aGUgY3VycmVudCBjYWNoZSBp bXBsZW1lbnRhdGlvbiBhbHNvIGRlcGVuZHMgb24gYW4gaW5jcmVtZW50aW5nIHNlcmlhbCBudW1i ZXIgc2V0IG9uIHRoZSBjbGFzcyAodGhlIGNsYXNzIHNlcmlhbCkuICBUaGUgc2hhcGUgaW1wbGVt ZW50YXRpb24gaGFzIG5vIHN1Y2ggZGVwZW5kZW5jeS4gSXQgb25seSByZXF1aXJlcyBjaGVja2lu ZyB0aGUgc2hhcGUgSUQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWNoZSBpcyB2YWxpZC4KCiMjIyBD YWNoZSBoaXRzCgpPYmplY3RzIHRoYXQgc2V0IHByb3BlcnRpZXMgaW4gdGhlIHNhbWUgb3JkZXIg Y2FuIHNoYXJlIHNoYXBlcy4gIEZvciBleGFtcGxlOgoKYGBgcnVieQpjbGFzcyBIb2dlCiAgZGVm IGluaXRpYWxpemUKICAgICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hh cGUgKElEIDApCiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byB0aGUgbmV4dCBzaGFwZSB2aWEg ZWRnZSBuYW1lZCBAYQogICAgQGIgPSAyICMgVHJhbnNpdGlvbnMgdG8gbmV4dCBzaGFwZSB2aWEg ZWRnZSBuYW1lZCBAYgogIGVuZAplbmQKCmNsYXNzIEZ1Z2EgPCBIb2dlOyBlbmQKCmhvZ2UgPSBI b2dlLm5ldwpmdWdhID0gRnVnYS5uZXcKYGBgCgpJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGlu c3RhbmNlcyBgaG9nZWAgYW5kIGBmdWdhYCB3aWxsIHNoYXJlIHRoZSBzYW1lIHNoYXBlIElELiAg VGhpcyBtZWFucyBpbmxpbmUgY2FjaGVzIGluIGBpbml0aWFsaXplYCB3aWxsIGhpdCBpbiBib3Ro IGNhc2VzLiAgVGhpcyBjb250cmFzdHMgd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB0 aGF0IHVzZXMgdGhlIGNsYXNzIGFzIHRoZSBjYWNoZSBrZXkuICBJbiBvdGhlciB3b3Jkcywgd2l0 aCBvYmplY3Qgc2hhcGVzIHRoZSBhYm92ZSBjb2RlIHdpbGwgaGl0IGlubGluZSBjYWNoZXMgd2hl cmUgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gd2lsbCBtaXNzLgoKSWYgcGVyZm9ybWFuY2Ug dGVzdGluZyByZXZlYWxzIHRoYXQgY2FjaGUgaGl0cyBhcmUgKm5vdCogc3Vic3RhbnRpYWxseSBp bXByb3ZlZCwgdGhlbiB3ZSBjYW4gdXNlIHNoYXBlcyB0byByZWNsYWltIG1lbW9yeSBmcm9tIGBS QmFzaWNgLiBXZSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGVuY29kaW5nIHRoZSBjbGFzcyB3aXRo aW4gdGhlIHNoYXBlIHRyZWUuIFRoaXMgd2lsbCBoYXZlIGFuIGVxdWl2YWxlbnQgY2FjaGUgaGl0 IHJhdGUgdG8gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIE9uY2UgdGhlIGNsYXNzIGlzIGVu Y29kZWQgd2l0aGluIHRoZSBzaGFwZSB0cmVlLCB3ZSBjYW4gcmVtb3ZlIHRoZSBjbGFzcyBwb2lu dGVyIGZyb20gYFJCYXNpY2AgYW5kIGVpdGhlciByZWNsYWltIHRoYXQgbWVtb3J5IG9yIGZyZWUg aXQgZm9yIGFub3RoZXIgdXNlLgoKIyMjIERlY3JlYXNlcyBydW50aW1lIGNoZWNraW5nCgpXZSBj YW4gZW5jb2RlIGF0dHJpYnV0ZXMgdGhhdCBhcmVuJ3QgaW5zdGFuY2UgdmFyaWFibGVzIGludG8g YW4gb2JqZWN0J3Mgc2hhcGUuIEN1cnJlbnRseSwgd2UgYWxzbyBpbmNsdWRlIGZyb3plbiB3aXRo aW4gdGhlIHNoYXBlLiBUaGlzIG1lYW5zIHdlIGNhbiBsaW1pdCBmcm96ZW4gY2hlY2tzIHRvIG9u bHkgY2FjaGUgbWlzc2VzLgoKRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZToKCmBgYHJ1 YnkKY2xhc3MgVG90bwogIGRlZiBzZXRfYQogICAgQGEgPSAxICMgY2FjaGU6IHNoYXBlOiAwLCBu ZXh0IHNoYXBlOiAxLCBJViBpZHg6IDAKICBlbmQKZW5kCgp0b3RvID0gVG90by5uZXcgIyBzaGFw ZSAwCnRvdG8uc2V0X2EgICAgICMgc2hhcGUgMQoKdG90byA9IFRvdG8ubmV3ICMgc2hhcGUgMAp0 b3RvLmZyZWV6ZSAgICAjIHNoYXBlIDIKdG90by5zZXRfYSAgICAgIyBDYWNoZSBtaXNzLCBFeGNl cHRpb24hCmBgYAoKIVtdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29t LzE5ODg1NjAvMTY3OTIwMDAxLWM0ZTYzMjZiLTNhM2MtNDgzYi1hNzk3LTllMDIzMTc2NDdkNy5z dmcpCgpXaXRob3V0IHNoYXBlcywgYWxsIGluc3RhbmNlIHZhcmlhYmxlIHNldHMgcmVxdWlyZSBj aGVja2luZyB0aGUgZnJvemVuIHN0YXR1cyBvZiB0aGUgb2JqZWN0LiBXaXRoIHNoYXBlcywgd2Ug b25seSBuZWVkIHRvIGNoZWNrIHRoZSBmcm96ZW4gc3RhdHVzIG9uIGNhY2hlIG1pc3Nlcy4KCldl IGNhbiBhbHNvIGVsaW1pbmF0ZSBlbWJlZGRlZCBhbmQgZXh0ZW5kZWQgY2hlY2tzIHdpdGggdGhl IGludHJvZHVjdGlvbiBvZiBvYmplY3Qgc2hhcGVzLiBBbnkgcGFydGljdWxhciBzaGFwZSByZXBy ZXNlbnRzIGFuIG9iamVjdCB0aGF0IGlzIF9laXRoZXJfIGV4dGVuZGVkIG9yIGVtYmVkZGVkLiBK SVRzIGNhbiBwb3NzaWJseSB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGZhY3QgYnkgZ2VuZXJhdGlu ZyBzcGVjaWFsaXplZCBtYWNoaW5lIGNvZGUgYmFzZWQgb24gdGhlIHNoYXBlcy4gCiAgICAKIyMj IENsYXNzIGluc3RhbmNlIHZhcmlhYmxlcyBjYW4gYmUgc3RvcmVkIGluIGFuIGFycmF5CgpDdXJy ZW50bHksIGBUX0NMQVNTYCBhbmQgYFRfTU9EVUxFYCBpbnN0YW5jZXMgY2Fubm90IHVzZSB0aGUg c2FtZSBJViBpbmRleCB0YWJsZSBvcHRpbWl6YXRpb24gdGhhdCBgVF9PQkpFQ1RgIGluc3RhbmNl cyB1c2UuICBXZSB0aGluayB0aGF0IHRoZSBvYmplY3Qgc2hhcGVzIHRlY2huaXF1ZSBjYW4gYmUg bGV2ZXJhZ2VkIGJ5IGNsYXNzIGluc3RhbmNlcyB0byB1c2UgYXJyYXlzIGZvciBjbGFzcyBpbnN0 YW5jZSB2YXJpYWJsZSBzdG9yYWdlIGFuZCBtYXkgcG9zc2libHkgbGVhZCB0byBhIHJlZHVjdGlv biBpbiBtZW1vcnkgdXNhZ2UgKHRob3VnaCB3ZSBoYXZlIHlldCB0byB0ZXN0IHRoaXMpLgoKIyMg SW1wbGVtZW50YXRpb24gRGV0YWlscwoKW0hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9qZW1tYWlz c3JvZmYvcnVieS9jb21taXQvNGU5NWQwMTY1NGYyNGNlZmY2YzgzMzBjZjRlNWM3ZGFjNTA0NzM5 ZSkgaXMgYSBsaW5rIHRvIG91ciBjb2RlIHNvIGZhci4KCkFzIG1lbnRpb25lZCBlYXJsaWVyLCBz aGFwZSBvYmplY3RzIGZvcm0gYSB0cmVlIGRhdGEgc3RydWN0dXJlLiAgSW4gb3JkZXIgdG8gbG9v ayB1cCB0aGUgc2hhcGUgcXVpY2tseSwgd2UgYWxzbyBzdG9yZSB0aGUgc2hhcGVzIGluIGEgd2Vh ayBhcnJheSB0aGF0IGlzIHN0b3JlZCBvbiB0aGUgVk0uICBUaGUgSUQgb2YgdGhlIHNoYXBlIGlz IHRoZSBpbmRleCBpbiB0byB0aGUgYXJyYXksIGFuZCB0aGUgSUQgaXMgc3RvcmVkIG9uIHRoZSBv YmplY3QuCgpGb3IgYFRfT0JKRUNUYCBvYmplY3RzLCB3ZSBzdG9yZSB0aGUgc2hhcGUgSUQgaW4g dGhlIG9iamVjdCdzIGhlYWRlci4gT24gNjQgYml0IHN5c3RlbXMsIHRoZSB1cHBlciAzMiBiaXRz IGFyZSB1c2VkIGJ5IFJhY3RvcnMuICBXZSB3YW50IG9iamVjdCBzaGFwZXMgdG8gYmUgZW5hYmxl ZCBvbiAzMiBiaXQgc3lzdGVtcyBhbmQgNjQgYml0IHN5c3RlbXMgc28gdGhhdCBsaW1pdHMgdXMg dG8gdGhlIGJvdHRvbSAzMiBiaXRzIG9mIHRoZSBPYmplY3QgaGVhZGVyLiAgVGhlIHRvcCAyMCBi aXRzIGZvciBgVF9PQkpFQ1RgIG9iamVjdHMgd2FzIHVudXNlZCwgc28gd2UgdXNlZCB0aGUgdG9w IDE2IGJpdHMgZm9yIHRoZSBzaGFwZSBpZC4gIFdlIGNob3NlIHRoZSB0b3AgMTYgYml0cyBiZWNh dXNlIHRoaXMgYWxsb3dzIHVzIHRvIHVzZSBgdWludDE2X3RgIGFuZCBtYXNraW5nIHRoZSBoZWFk ZXIgYml0cyBpcyBlYXNpZXIuCgpUaGlzIGltcGxlbWVudGF0aW9uIGRldGFpbCBsaW1pdHMgdXMg dG8gfjY1ayBzaGFwZXMuIFdlIG1lYXN1cmVkIHRoZSBudW1iZXIgb2Ygc2hhcGVzIHVzZWQgb24g YSBzaW1wbGUgW0Rpc2NvdXJzZV0oaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvdXJzZS9kaXNjb3Vy c2UpIGFwcGxpY2F0aW9uICh+My41ayksIFtSYWlsc0JlbmNoXShodHRwczovL2dpdGh1Yi5jb20v azBrdWJ1bi9yYWlsc2JlbmNoKSAofjRrKSwgYW5kIFNob3BpZnkncyBtb25vbGl0aCdzIHRlc3Qg c3VpdGUgKH40MGspLiBBY2NvcmRpbmdseSwgd2UgZGVjaWRlZCB0byBpbXBsZW1lbnQgZ2FyYmFn ZSBjb2xsZWN0aW9uIG9uIG9iamVjdCBzaGFwZXMgc28gd2UgY2FuIHJlY3ljbGUgc2hhcGUgSURz IHdoaWNoIGFyZSBubyBsb25nZXIgaW4gdXNlLiAgV2UgYXJlIGN1cnJlbnRseSB3b3JraW5nIG9u IHNoYXBlIEdDLgoKRXZlbiB0aG91Z2ggaXQncyB1bmxpa2VseSwgaXQncyBzdGlsbCBwb3NzaWJs ZSBmb3IgYW4gYXBwbGljYXRpb24gdG8gcnVuIG91dCBvZiBzaGFwZXMuIE9uY2UgYWxsIHNoYXBl IElEcyBhcmUgaW4gdXNlLCBhbnkgb2JqZWN0cyB0aGF0IG5lZWQgbmV3IHNoYXBlIElEcyB3aWxs IG5ldmVyIGhpdCBvbiBpbmxpbmUgY2FjaGVzLgoKIyMgRXZhbHVhdGlvbgoKV2UgaGF2ZSBzbyBm YXIgdGVzdGVkIHRoaXMgYnJhbmNoIHdpdGggW0Rpc2NvdXJzZV0oaHR0cHM6Ly9naXRodWIuY29t L2Rpc2NvdXJzZS9kaXNjb3Vyc2UpLCBbUmFpbHNCZW5jaF0oaHR0cHM6Ly9naXRodWIuY29tL2sw a3VidW4vcmFpbHNiZW5jaCkgYW5kIFNob3BpZnkncyBtb25vbGl0aC4gV2UgcGxhbiB0byB0ZXN0 IHRoaXMgYnJhbmNoIG1vcmUgYnJvYWRseSBhZ2FpbnN0IHNldmVyYWwgb3BlbiBzb3VyY2UgUnVi eSBhbmQgUmFpbHMgYXBwbGljYXRpb25zLiAKCkJlZm9yZSB3ZSBjb25zaWRlciB0aGlzIGJyYW5j aCB0byBiZSByZWFkeSBmb3IgZm9ybWFsIHJldmlldywgd2Ugd2FudCB0aGUgcnVudGltZSBwZXJm b3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdlIG9mIHRoZXNlIGJlbmNobWFya3MgdG8gYmUgZXF1aXZh bGVudCBvciBiZXR0ZXIgdGhhbiBpdCBpcyBjdXJyZW50bHkuIEluIG91ciBvcGluaW9uLCBldmVu IHdpdGggZXF1aXZhbGVudCBydW50aW1lIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgdXNhZ2UsIHRo ZSBmdXR1cmUgYmVuZWZpdHMgb2YgdGhpcyBhcHByb2FjaCBtYWtlIHRoZSBjaGFuZ2Ugc2VlbSB3 b3J0aHdoaWxlLgoKIyMgRmVlZGJhY2sKCklmIHlvdSBoYXZlIGFueSBmZWVkYmFjaywgY29tbWVu dHMsIG9yIHF1ZXN0aW9ucywgcGxlYXNlIGxldCB1cyBrbm93IGFuZCB3ZSdsbCBkbyBvdXIgYmVz dCB0byBhZGRyZXNzIGl0LiBUaGFuayB5b3UhCgoKCi0tIApodHRwczovL2J1Z3MucnVieS1sYW5n Lm9yZy8K