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_MED,SPF_HELO_NONE, T_SCC_BODY_TEXT_LINE,T_SPF_PERMERROR,UNPARSEABLE_RELAY,URIBL_GREY shortcircuit=no autolearn=no 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 5E8E41F54E for ; Thu, 18 Aug 2022 18:50:26 +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="gr5ocjYx"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 9D745120D99; Fri, 19 Aug 2022 03:50:25 +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 CB4AD120BB6 for ; Fri, 19 Aug 2022 03:50:23 +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:cc; s=smtpapi; bh=qcUgTQa0V1AoJLeZGwmm7RwuQkm6Vo/XA/wHysfzK/E=; b=gr5ocjYxlvyHOHme/nwYy3a29H9W+/kcSOlJXNBwaYV/AXiQ75v6S22VOS/EM03OM63K 4GZdYvl/xVZH2krLGP0DcT8in4EDfRbbJsBf1LE7U4X4VLF8n7k8PE/qZlnjH7dR7ev+Wm hvuUy5nOsZ5EgFYMs5u/lpPX7DzN+xABk= Received: by filterdrecv-67c4c66ffd-xm5nd with SMTP id filterdrecv-67c4c66ffd-xm5nd-1-62FE89EE-19 2022-08-18 18:50:22.342013449 +0000 UTC m=+620047.884207285 Received: from herokuapp.com (unknown) by geopod-ismtpd-2-0 (SG) with ESMTP id uFWhuAIRR_iRAh6HWB4oug for ; Thu, 18 Aug 2022 18:50:22.284 +0000 (UTC) Date: Thu, 18 Aug 2022 18:50:22 +0000 (UTC) From: "chrisseaton (Chris Seaton)" 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: chrisseaton 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: 85970 X-SG-EID: =?us-ascii?Q?955+Sha5zT9JvJEGA0pEH+PLRI7xgFSEgxhG=2Ft17QF=2FlmxVXVwOzSecIY777x4?= =?us-ascii?Q?=2F=2FVC52175RvzxoZpb3l2+qjQgbHeC2q9JfQiAas?= =?us-ascii?Q?M5fGdV6sUGqKeWc7YSUmw6wqn=2FKPxXK8VlKdSA0?= =?us-ascii?Q?s50Lw1YIUPngjCO05I06tTiAaVnf+uNOYz8xAny?= =?us-ascii?Q?gx851JyX=2FnJfhwN65Fbf0PWC4m2GAIzN=2FECbmJC?= =?us-ascii?Q?5pGBgVwjzy4kppHl=2FAJGwbs5c24ag98SnRADzTB?= =?us-ascii?Q?VoQKBcOoaYvLjYaxg8R1w=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 109562 Subject: [ruby-core:109562] [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" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgY2hyaXNzZWF0b24gKENocmlzIFNlYXRv bikuCgoKPiBXaXRoIHNoYXBlcyB5b3UgY291bGQgc3RhcnQgd2l0aCB7YSxifSBhbmQgdGhlbiBh ZGQgdGhlIGhhc2gga2V5cyB0byBnZXQgc2hhcGUge2EsYixjLGR9IGFuZCBwYXNzIGFsbCB2YWx1 ZXMgWzEsMiwzLDRdIHBsdXMgdGhlIHNoYXBlIGlkIG9uIHRoZSBzdGFjay4KClllcyB0aGF0J3Mg dGhlIGlkZWEgaW4gdGhlIHZpZGVvIEkgbGlua2VkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpGZWF0dXJlICMxODc3NjogT2JqZWN0IFNoYXBlcwpodHRwczovL2J1 Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTg3NzYjY2hhbmdlLTk4NzMzCgoqIEF1dGhvcjogamVt bWFpIChKZW1tYSBJc3Nyb2ZmKQoqIFN0YXR1czogT3BlbgoqIFByaW9yaXR5OiBOb3JtYWwKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE9iamVjdCBTaGFwZXMgaW1w bGVtZW50YXRpb24KCkFhcm9uIFBhdHRlcnNvbiwgRWlsZWVuIFVjaGl0ZWxsZSBhbmQgSSBoYXZl IGJlZW4gd29ya2luZyBvbiBhbiBpbXBsZW1lbnRhdGlvbiBvZiBPYmplY3QgU2hhcGVzIGZvciBS dWJ5LiAgV2UgYXJlIGZpbGluZyBhIHRpY2tldCB0byBzaGFyZSB3aGF0IHdlJ3ZlIGJlZW4gZG9p bmcsIGFzIHdlbGwgYXMgZ2V0IGZlZWRiYWNrIG9uIHRoZSBwcm9qZWN0IGluIGl0cyBjdXJyZW50 IHN0YXRlLgoKV2UgaG9wZSB0byBldmVudHVhbGx5IHN1Ym1pdCB0aGUgZmluYWxpemVkIHByb2pl Y3QgdXBzdHJlYW0gYWZ0ZXIgdmVyaWZ5aW5nIGVmZmljYWN5LgoKIyMgV2hhdCBhcmUgT2JqZWN0 IFNoYXBlcz8KCk9iamVjdCBzaGFwZXMgYXJlIGEgdGVjaG5pcXVlIGZvciByZXByZXNlbnRpbmcg cHJvcGVydGllcyBvZiBhbiBvYmplY3QuIE90aGVyIGxhbmd1YWdlIGltcGxlbWVudGF0aW9ucywg aW5jbHVkaW5nIFtUcnVmZmxlUnVieV0oaHR0cHM6Ly9naXRodWIuY29tL29yYWNsZS90cnVmZmxl cnVieSkgYW5kIFtWOF0oaHR0cHM6Ly92OC5kZXYvKSwgdXNlIHRoaXMgdGVjaG5pcXVlLiBDaHJp cyBTZWF0b24sIHRoZSBjcmVhdG9yIG9mIFRydWZmbGVSdWJ5LCBkaXNjdXNzZWQgb2JqZWN0IHNo YXBlcyBpbiBoaXMgW1J1YnlLYWlnaSAyMDIxIEtleW5vdGVdKGh0dHBzOi8vcnVieWthaWdpLm9y Zy8yMDIxLXRha2VvdXQvcHJlc2VudGF0aW9ucy9jaHJpc2dzZWF0b24uaHRtbCkgYW5kIE1heGlt ZSBDaGV2YWxpZXItQm9pc3ZlcnQgZGlzY3Vzc2VkIHRoZSBpbXBsaWNhdGlvbnMgZm9yIFlKSVQg aW4gdGhlIGxhdHRlciBwYXJ0IG9mIFtoZXIgdGFsayBhdCBSdWJ5S2FpZ2kgMjAyMV0oaHR0cHM6 Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1QQlZMZjN5Zk1zOCZ0PTExMDBzKS4gVGhlIG9yaWdp bmFsIGlkZWEgb2Ygb2JqZWN0IHNoYXBlcyBbb3JpZ2luYXRlcyBmcm9tIHRoZSBTZWxmIGxhbmd1 YWdlXShodHRwczovL2JpYmxpb2dyYXBoeS5zZWxmbGFuZ3VhZ2Uub3JnL19zdGF0aWMvaW1wbGVt ZW50YXRpb24ucGRmKSwgd2hpY2ggaXMgY29uc2lkZXJlZCBhIGRpcmVjdCBkZXNjZW5kYW50IG9m IFNtYWxsdGFsay4KCkVhY2ggc2hhcGUgcmVwcmVzZW50cyBhIHNwZWNpZmljIHNldCBvZiBhdHRy aWJ1dGVzIChpbnN0YW5jZSB2YXJpYWJsZXMgYW5kIG90aGVyIHByb3BlcnRpZXMpIGFuZCB0aGVp ciB2YWx1ZXMuIEluIG91ciBpbXBsZW1lbnRhdGlvbiwgYWxsIG9iamVjdHMgaGF2ZSBhIHNoYXBl LiBUaGUgc2hhcGVzIGFyZSBub2RlcyBpbiBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUuIEV2ZXJ5IGVk Z2UgaW4gdGhlIHRyZWUgcmVwcmVzZW50cyBhbiBhdHRyaWJ1dGUgdHJhbnNpdGlvbi4KCk1vcmUg c3BlY2lmaWNhbGx5LCBzZXR0aW5nIGFuIGluc3RhbmNlIHZhcmlhYmxlIG9uIGFuIGluc3RhbmNl IG9mIGFuIG9iamVjdCBjcmVhdGVzIGFuIG91dGdvaW5nIGVkZ2UgZnJvbSB0aGUgaW5zdGFuY2Un cyBjdXJyZW50IHNoYXBlLiBUaGlzIGlzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBzaGFwZSB0byBh bm90aGVyLiBUaGUgZWRnZSByZXByZXNlbnRzIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSB0aGF0IGlz IHNldC4KCkZvciBleGFtcGxlOgoKYGBgcnVieQpjbGFzcyBGb28KICBkZWYgaW5pdGlhbGl6ZQog ICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAg IEBhID0gMSAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBhIChJRCAxKQog ICAgQGIgPSAyICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElEIDIp CiAgZW5kCmVuZAoKZm9vID0gRm9vLm5ldwpgYGAKCldoZW4gYEZvb2AgaXMgaW50aWFsaXplZCwg aXRzIHNoYXBlIGlzIHRoZSByb290IHNoYXBlIHdpdGggSUQgMC4gIFRoZSByb290IHNoYXBlIHJl cHJlc2VudHMgYW4gZW1wdHkgb2JqZWN0IHdpdGggbm8gaW5zdGFuY2UgdmFyaWFibGVzLiBFYWNo IHRpbWUgYW4gaW5zdGFuY2UgdmFyaWFibGUgaXMgc2V0IG9uIGBmb29gLCB0aGUgc2hhcGUgb2Yg dGhlIGluc3RhbmNlIGNoYW5nZXMuIEl0IGZpcnN0IHRyYW5zaXRpb25zIHdpdGggYEBhYCB0byBh IHNoYXBlIHdpdGggSUQgMSwgYW5kIHRoZW4gdHJhbnNpdGlvbnMgd2l0aCBgQGJgIHRvIGEgc2hh cGUgd2l0aCBJRCAyLiBJZiBgQGFgIGlzIHRoZW4gc2V0IHRvIGEgZGlmZmVyZW50IHZhbHVlLCBp dHMgc2hhcGUgd2lsbCByZW1haW4gdGhlIHNoYXBlIHdpdGggSUQgMiwgc2luY2UgdGhpcyBzaGFw ZSBhbHJlYWR5IGluY2x1ZGVzIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSBgQGFgLiAgCgohW10oaHR0 cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTk4ODU2MC8xNjc5MTgzNjAt MGE2YzkxYWEtMjU4Ny00OGNiLThmZjItN2YzYTk1ODMyODhlLnN2ZykKClRoZXJlIGlzIG9uZSBn bG9iYWwgc2hhcGUgdHJlZSBhbmQgb2JqZWN0cyB3aGljaCB1bmRlcmdvIHRoZSBzYW1lIHNoYXBl IHRyYW5zaXRpb25zIGluIHRoZSBzYW1lIG9yZGVyIHdpbGwgZW5kIHVwIHdpdGggdGhlIHNhbWUg ZmluYWwgc2hhcGUuCgpGb3IgaW5zdGFuY2UsIGlmIHdlIGhhdmUgYSBjbGFzcyBgQmFyYCBkZWZp bmVkIGFzIGZvbGxvd3MsIHRoZSBmaXJzdCB0cmFuc2l0aW9uIG9uIGBCYXIubmV3YCB0aHJvdWdo IHRoZSBpbnN0YW5jZSB2YXJpYWJsZSBgQGFgIHdpbGwgYmUgdGhlIHNhbWUgYXMgYEZvby5uZXdg J3MgZmlyc3QgdHJhbnNpdGlvbjoKCmBgYHJ1YnkKY2xhc3MgRm9vCiAgZGVmIGluaXRpYWxpemUK ICAgICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApCiAg ICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYSAoSUQgMSkK ICAgIEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBiIChJRCAy KQogIGVuZAplbmQKCmNsYXNzIEJhcgogIGRlZiBpbml0aWFsaXplCiAgICAjIEN1cnJlbnRseSB0 aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEgPSAxICMgVHJhbnNp dGlvbnMgdG8gc2hhcGUgZGVmaW5lZCBlYXJsaWVyIHZpYSBlZGdlIEBhIChJRCAxKQogICAgQGMg PSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGMgKElEIDMpCiAgICBA YiA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgNCkKICBl bmQKZW5kCgpmb28gPSBGb28ubmV3ICMgYmx1ZSBpbiB0aGUgZGlhZ3JhbQpiYXIgPSBCYXIubmV3 ICMgcmVkIGluIHRoZSBkaWFncmFtCmBgYAoKSW4gdGhlIGRpYWdyYW0gYmVsb3csIHB1cnBsZSBy ZXByZXNlbnRzIHNoYXJlZCB0cmFuc2l0aW9ucywgYmx1ZSByZXByZXNlbnRzIHRyYW5zaXRpb25z IGZvciBvbmx5IGBmb29gLCBhbmQgcmVkIHJlcHJlc2VudHMgdHJhbnNpdGlvbnMgZm9yIG9ubHkg YGJhcmAuCgohW10oaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTk4 ODU2MC8xNjc5MTg4OTktZjFhNmYzNDQtYWU1ZS00ZGMwLWIxN2EtZmIxNTZkMWQ1NTBmLnN2ZykK CiMjIyBDYWNoZSBzdHJ1Y3R1cmUKCkZvciBpbnN0YW5jZSB2YXJpYWJsZSB3cml0ZXJzLCB0aGUg Y3VycmVudCBzaGFwZSBJRCwgdGhlIHNoYXBlIElEIHRoYXQgaXZhciB3cml0ZSB3b3VsZCB0cmFu c2l0aW9uIHRvIGFuZCBpbnN0YW5jZSB2YXJpYWJsZSBpbmRleCBhcmUgYWxsIHN0b3JlZCBpbiB0 aGUgaW5saW5lIGNhY2hlLiBUaGUgc2hhcGUgSUQgaXMgdGhlIGtleSB0byB0aGUgY2FjaGUuCgpG b3IgaW5zdGFuY2UgdmFyaWFibGUgcmVhZGVycywgdGhlIHNoYXBlIElEIGFuZCBpbnN0YW5jZSB2 YXJpYWJsZSBpbmRleCBhcmUgc3RvcmVkIGluIHRoZSBpbmxpbmUgY2FjaGUuICBBZ2FpbiwgdGhl IHNoYXBlIElEIGlzIHRoZSBjYWNoZSBrZXkuCgpgYGBydWJ5CmNsYXNzIEZvbwogIGRlZiBpbml0 aWFsaXplCiAgICBAYSA9IDEgIyBJQyBzaGFwZV9pZDogMCwgbmV4dCBzaGFwZTogMSwgaXYgaW5k ZXggMAogICAgQGIgPSAxICMgSUMgc2hhcGVfaWQ6IDEsIG5leHQgc2hhcGU6IDIsIGl2IGluZGV4 IDEKICBlbmQKICAgIAogIGRlZiBhCiAgICBAYSAjIElDIHNoYXBlX2lkOiAyLCBpdiBpbmRleCAw CiAgZW5kCmVuZApgYGAKCiMjIFJhdGlvbmFsZQoKV2UgdGhpbmsgdGhhdCBhbiBvYmplY3Qgc2hh cGUgaW1wbGVtZW50YXRpb24gd2lsbCBzaW1wbGlmeSBjYWNoZSBjaGVja3MsIGluY3JlYXNlIGlu bGluZSBjYWNoZSBoaXRzLCBkZWNyZWFzZSBydW50aW1lIGNoZWNrcywgYW5kIGVuYWJsZSBvdGhl ciBwb3RlbnRpYWwgZnV0dXJlIG9wdGltaXphdGlvbnMuIFRoZXNlIGFyZSBhbGwgZXhwbGFpbmVk IGJlbG93LiAKCiMjIyBTaW1wbGlmeSBjYWNoaW5nCgpUaGUgY3VycmVudCBjYWNoZSBpbXBsZW1l bnRhdGlvbiBkZXBlbmRzIG9uIHRoZSBjbGFzcyBvZiB0aGUgcmVjZWl2ZXIuIFNpbmNlIHRoZSBh ZGRyZXNzIG9mIHRoZSBjbGFzcyBjYW4gYmUgcmV1c2VkLCB0aGUgY3VycmVudCBjYWNoZSBpbXBs ZW1lbnRhdGlvbiBhbHNvIGRlcGVuZHMgb24gYW4gaW5jcmVtZW50aW5nIHNlcmlhbCBudW1iZXIg c2V0IG9uIHRoZSBjbGFzcyAodGhlIGNsYXNzIHNlcmlhbCkuICBUaGUgc2hhcGUgaW1wbGVtZW50 YXRpb24gaGFzIG5vIHN1Y2ggZGVwZW5kZW5jeS4gSXQgb25seSByZXF1aXJlcyBjaGVja2luZyB0 aGUgc2hhcGUgSUQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWNoZSBpcyB2YWxpZC4KCiMjIyBDYWNo ZSBoaXRzCgpPYmplY3RzIHRoYXQgc2V0IHByb3BlcnRpZXMgaW4gdGhlIHNhbWUgb3JkZXIgY2Fu IHNoYXJlIHNoYXBlcy4gIEZvciBleGFtcGxlOgoKYGBgcnVieQpjbGFzcyBIb2dlCiAgZGVmIGlu aXRpYWxpemUKICAgICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUg KElEIDApCiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byB0aGUgbmV4dCBzaGFwZSB2aWEgZWRn ZSBuYW1lZCBAYQogICAgQGIgPSAyICMgVHJhbnNpdGlvbnMgdG8gbmV4dCBzaGFwZSB2aWEgZWRn ZSBuYW1lZCBAYgogIGVuZAplbmQKCmNsYXNzIEZ1Z2EgPCBIb2dlOyBlbmQKCmhvZ2UgPSBIb2dl Lm5ldwpmdWdhID0gRnVnYS5uZXcKYGBgCgpJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGluc3Rh bmNlcyBgaG9nZWAgYW5kIGBmdWdhYCB3aWxsIHNoYXJlIHRoZSBzYW1lIHNoYXBlIElELiAgVGhp cyBtZWFucyBpbmxpbmUgY2FjaGVzIGluIGBpbml0aWFsaXplYCB3aWxsIGhpdCBpbiBib3RoIGNh c2VzLiAgVGhpcyBjb250cmFzdHMgd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB0aGF0 IHVzZXMgdGhlIGNsYXNzIGFzIHRoZSBjYWNoZSBrZXkuICBJbiBvdGhlciB3b3Jkcywgd2l0aCBv YmplY3Qgc2hhcGVzIHRoZSBhYm92ZSBjb2RlIHdpbGwgaGl0IGlubGluZSBjYWNoZXMgd2hlcmUg dGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gd2lsbCBtaXNzLgoKSWYgcGVyZm9ybWFuY2UgdGVz dGluZyByZXZlYWxzIHRoYXQgY2FjaGUgaGl0cyBhcmUgKm5vdCogc3Vic3RhbnRpYWxseSBpbXBy b3ZlZCwgdGhlbiB3ZSBjYW4gdXNlIHNoYXBlcyB0byByZWNsYWltIG1lbW9yeSBmcm9tIGBSQmFz aWNgLiBXZSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGVuY29kaW5nIHRoZSBjbGFzcyB3aXRoaW4g dGhlIHNoYXBlIHRyZWUuIFRoaXMgd2lsbCBoYXZlIGFuIGVxdWl2YWxlbnQgY2FjaGUgaGl0IHJh dGUgdG8gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIE9uY2UgdGhlIGNsYXNzIGlzIGVuY29k ZWQgd2l0aGluIHRoZSBzaGFwZSB0cmVlLCB3ZSBjYW4gcmVtb3ZlIHRoZSBjbGFzcyBwb2ludGVy IGZyb20gYFJCYXNpY2AgYW5kIGVpdGhlciByZWNsYWltIHRoYXQgbWVtb3J5IG9yIGZyZWUgaXQg Zm9yIGFub3RoZXIgdXNlLgoKIyMjIERlY3JlYXNlcyBydW50aW1lIGNoZWNraW5nCgpXZSBjYW4g ZW5jb2RlIGF0dHJpYnV0ZXMgdGhhdCBhcmVuJ3QgaW5zdGFuY2UgdmFyaWFibGVzIGludG8gYW4g b2JqZWN0J3Mgc2hhcGUuIEN1cnJlbnRseSwgd2UgYWxzbyBpbmNsdWRlIGZyb3plbiB3aXRoaW4g dGhlIHNoYXBlLiBUaGlzIG1lYW5zIHdlIGNhbiBsaW1pdCBmcm96ZW4gY2hlY2tzIHRvIG9ubHkg Y2FjaGUgbWlzc2VzLgoKRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZToKCmBgYHJ1YnkK Y2xhc3MgVG90bwogIGRlZiBzZXRfYQogICAgQGEgPSAxICMgY2FjaGU6IHNoYXBlOiAwLCBuZXh0 IHNoYXBlOiAxLCBJViBpZHg6IDAKICBlbmQKZW5kCgp0b3RvID0gVG90by5uZXcgIyBzaGFwZSAw CnRvdG8uc2V0X2EgICAgICMgc2hhcGUgMQoKdG90byA9IFRvdG8ubmV3ICMgc2hhcGUgMAp0b3Rv LmZyZWV6ZSAgICAjIHNoYXBlIDIKdG90by5zZXRfYSAgICAgIyBDYWNoZSBtaXNzLCBFeGNlcHRp b24hCmBgYAoKIVtdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5 ODg1NjAvMTY3OTIwMDAxLWM0ZTYzMjZiLTNhM2MtNDgzYi1hNzk3LTllMDIzMTc2NDdkNy5zdmcp CgpXaXRob3V0IHNoYXBlcywgYWxsIGluc3RhbmNlIHZhcmlhYmxlIHNldHMgcmVxdWlyZSBjaGVj a2luZyB0aGUgZnJvemVuIHN0YXR1cyBvZiB0aGUgb2JqZWN0LiBXaXRoIHNoYXBlcywgd2Ugb25s eSBuZWVkIHRvIGNoZWNrIHRoZSBmcm96ZW4gc3RhdHVzIG9uIGNhY2hlIG1pc3Nlcy4KCldlIGNh biBhbHNvIGVsaW1pbmF0ZSBlbWJlZGRlZCBhbmQgZXh0ZW5kZWQgY2hlY2tzIHdpdGggdGhlIGlu dHJvZHVjdGlvbiBvZiBvYmplY3Qgc2hhcGVzLiBBbnkgcGFydGljdWxhciBzaGFwZSByZXByZXNl bnRzIGFuIG9iamVjdCB0aGF0IGlzIF9laXRoZXJfIGV4dGVuZGVkIG9yIGVtYmVkZGVkLiBKSVRz IGNhbiBwb3NzaWJseSB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGZhY3QgYnkgZ2VuZXJhdGluZyBz cGVjaWFsaXplZCBtYWNoaW5lIGNvZGUgYmFzZWQgb24gdGhlIHNoYXBlcy4gCiAgICAKIyMjIENs YXNzIGluc3RhbmNlIHZhcmlhYmxlcyBjYW4gYmUgc3RvcmVkIGluIGFuIGFycmF5CgpDdXJyZW50 bHksIGBUX0NMQVNTYCBhbmQgYFRfTU9EVUxFYCBpbnN0YW5jZXMgY2Fubm90IHVzZSB0aGUgc2Ft ZSBJViBpbmRleCB0YWJsZSBvcHRpbWl6YXRpb24gdGhhdCBgVF9PQkpFQ1RgIGluc3RhbmNlcyB1 c2UuICBXZSB0aGluayB0aGF0IHRoZSBvYmplY3Qgc2hhcGVzIHRlY2huaXF1ZSBjYW4gYmUgbGV2 ZXJhZ2VkIGJ5IGNsYXNzIGluc3RhbmNlcyB0byB1c2UgYXJyYXlzIGZvciBjbGFzcyBpbnN0YW5j ZSB2YXJpYWJsZSBzdG9yYWdlIGFuZCBtYXkgcG9zc2libHkgbGVhZCB0byBhIHJlZHVjdGlvbiBp biBtZW1vcnkgdXNhZ2UgKHRob3VnaCB3ZSBoYXZlIHlldCB0byB0ZXN0IHRoaXMpLgoKIyMgSW1w bGVtZW50YXRpb24gRGV0YWlscwoKW0hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9qZW1tYWlzc3Jv ZmYvcnVieS9jb21taXQvNGU5NWQwMTY1NGYyNGNlZmY2YzgzMzBjZjRlNWM3ZGFjNTA0NzM5ZSkg aXMgYSBsaW5rIHRvIG91ciBjb2RlIHNvIGZhci4KCkFzIG1lbnRpb25lZCBlYXJsaWVyLCBzaGFw ZSBvYmplY3RzIGZvcm0gYSB0cmVlIGRhdGEgc3RydWN0dXJlLiAgSW4gb3JkZXIgdG8gbG9vayB1 cCB0aGUgc2hhcGUgcXVpY2tseSwgd2UgYWxzbyBzdG9yZSB0aGUgc2hhcGVzIGluIGEgd2VhayBh cnJheSB0aGF0IGlzIHN0b3JlZCBvbiB0aGUgVk0uICBUaGUgSUQgb2YgdGhlIHNoYXBlIGlzIHRo ZSBpbmRleCBpbiB0byB0aGUgYXJyYXksIGFuZCB0aGUgSUQgaXMgc3RvcmVkIG9uIHRoZSBvYmpl Y3QuCgpGb3IgYFRfT0JKRUNUYCBvYmplY3RzLCB3ZSBzdG9yZSB0aGUgc2hhcGUgSUQgaW4gdGhl IG9iamVjdCdzIGhlYWRlci4gT24gNjQgYml0IHN5c3RlbXMsIHRoZSB1cHBlciAzMiBiaXRzIGFy ZSB1c2VkIGJ5IFJhY3RvcnMuICBXZSB3YW50IG9iamVjdCBzaGFwZXMgdG8gYmUgZW5hYmxlZCBv biAzMiBiaXQgc3lzdGVtcyBhbmQgNjQgYml0IHN5c3RlbXMgc28gdGhhdCBsaW1pdHMgdXMgdG8g dGhlIGJvdHRvbSAzMiBiaXRzIG9mIHRoZSBPYmplY3QgaGVhZGVyLiAgVGhlIHRvcCAyMCBiaXRz IGZvciBgVF9PQkpFQ1RgIG9iamVjdHMgd2FzIHVudXNlZCwgc28gd2UgdXNlZCB0aGUgdG9wIDE2 IGJpdHMgZm9yIHRoZSBzaGFwZSBpZC4gIFdlIGNob3NlIHRoZSB0b3AgMTYgYml0cyBiZWNhdXNl IHRoaXMgYWxsb3dzIHVzIHRvIHVzZSBgdWludDE2X3RgIGFuZCBtYXNraW5nIHRoZSBoZWFkZXIg Yml0cyBpcyBlYXNpZXIuCgpUaGlzIGltcGxlbWVudGF0aW9uIGRldGFpbCBsaW1pdHMgdXMgdG8g fjY1ayBzaGFwZXMuIFdlIG1lYXN1cmVkIHRoZSBudW1iZXIgb2Ygc2hhcGVzIHVzZWQgb24gYSBz aW1wbGUgW0Rpc2NvdXJzZV0oaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvdXJzZS9kaXNjb3Vyc2Up IGFwcGxpY2F0aW9uICh+My41ayksIFtSYWlsc0JlbmNoXShodHRwczovL2dpdGh1Yi5jb20vazBr dWJ1bi9yYWlsc2JlbmNoKSAofjRrKSwgYW5kIFNob3BpZnkncyBtb25vbGl0aCdzIHRlc3Qgc3Vp dGUgKH40MGspLiBBY2NvcmRpbmdseSwgd2UgZGVjaWRlZCB0byBpbXBsZW1lbnQgZ2FyYmFnZSBj b2xsZWN0aW9uIG9uIG9iamVjdCBzaGFwZXMgc28gd2UgY2FuIHJlY3ljbGUgc2hhcGUgSURzIHdo aWNoIGFyZSBubyBsb25nZXIgaW4gdXNlLiAgV2UgYXJlIGN1cnJlbnRseSB3b3JraW5nIG9uIHNo YXBlIEdDLgoKRXZlbiB0aG91Z2ggaXQncyB1bmxpa2VseSwgaXQncyBzdGlsbCBwb3NzaWJsZSBm b3IgYW4gYXBwbGljYXRpb24gdG8gcnVuIG91dCBvZiBzaGFwZXMuIE9uY2UgYWxsIHNoYXBlIElE cyBhcmUgaW4gdXNlLCBhbnkgb2JqZWN0cyB0aGF0IG5lZWQgbmV3IHNoYXBlIElEcyB3aWxsIG5l dmVyIGhpdCBvbiBpbmxpbmUgY2FjaGVzLgoKIyMgRXZhbHVhdGlvbgoKV2UgaGF2ZSBzbyBmYXIg dGVzdGVkIHRoaXMgYnJhbmNoIHdpdGggW0Rpc2NvdXJzZV0oaHR0cHM6Ly9naXRodWIuY29tL2Rp c2NvdXJzZS9kaXNjb3Vyc2UpLCBbUmFpbHNCZW5jaF0oaHR0cHM6Ly9naXRodWIuY29tL2swa3Vi dW4vcmFpbHNiZW5jaCkgYW5kIFNob3BpZnkncyBtb25vbGl0aC4gV2UgcGxhbiB0byB0ZXN0IHRo aXMgYnJhbmNoIG1vcmUgYnJvYWRseSBhZ2FpbnN0IHNldmVyYWwgb3BlbiBzb3VyY2UgUnVieSBh bmQgUmFpbHMgYXBwbGljYXRpb25zLiAKCkJlZm9yZSB3ZSBjb25zaWRlciB0aGlzIGJyYW5jaCB0 byBiZSByZWFkeSBmb3IgZm9ybWFsIHJldmlldywgd2Ugd2FudCB0aGUgcnVudGltZSBwZXJmb3Jt YW5jZSBhbmQgbWVtb3J5IHVzYWdlIG9mIHRoZXNlIGJlbmNobWFya3MgdG8gYmUgZXF1aXZhbGVu dCBvciBiZXR0ZXIgdGhhbiBpdCBpcyBjdXJyZW50bHkuIEluIG91ciBvcGluaW9uLCBldmVuIHdp dGggZXF1aXZhbGVudCBydW50aW1lIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgdXNhZ2UsIHRoZSBm dXR1cmUgYmVuZWZpdHMgb2YgdGhpcyBhcHByb2FjaCBtYWtlIHRoZSBjaGFuZ2Ugc2VlbSB3b3J0 aHdoaWxlLgoKIyMgRmVlZGJhY2sKCklmIHlvdSBoYXZlIGFueSBmZWVkYmFjaywgY29tbWVudHMs IG9yIHF1ZXN0aW9ucywgcGxlYXNlIGxldCB1cyBrbm93IGFuZCB3ZSdsbCBkbyBvdXIgYmVzdCB0 byBhZGRyZXNzIGl0LiBUaGFuayB5b3UhCgotLS1GaWxlcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCm9iamVjdC1zaGFwZXMucGF0Y2ggKDE4MCBLQikKCgotLSAKaHR0cHM6Ly9idWdz LnJ1YnktbGFuZy5vcmcvCg==