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.7 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_HELO_PASS, SPF_PASS,UNPARSEABLE_RELAY 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 55CE91F910 for ; Sat, 5 Nov 2022 13:31:03 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ruby-lang.org header.i=@ruby-lang.org header.b="gOpMt29Q"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 3C153120C9C; Sat, 5 Nov 2022 22:30:56 +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 62A89120BA0 for ; Sat, 5 Nov 2022 22:30:53 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ruby-lang.org; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to:cc; s=s1; bh=iZYQ+7+4JdIsMfP/2j4jJs0I+rCxtBHsDMi2DAeKIuc=; b=gOpMt29QjDp7FSEuHzgMaX9MG8Pxfm/roqP0ZalWhjOMfDb7rB3sJoIyK/ycv2HDNQg2 nY/hmDBdSj0vcs934EvBzJ2kp3xlv1ji/yNNGjQ2rsfQdV5zrB9SPVNYLYIXvRQJbkGx0A MGmIM42s2POvyhGwNPVa+Xh++3hIEpCX/aMFWZgWM3ngkJJv2+pAWujLYDLzrUjASa5kKH X/+wM7i+FcfsGFJGOqGB4pSyJVSt4+SYcUxJclJavTeY4Gw7Qr8g2z7HlKR8oj22ZQdPuC RVnAvmrjnA0rxrpNNQuev6V/6u8+7kJWwFSbzDQ1RzejSxg+7QxwW/dH90B5oHgQ== Received: by filterdrecv-6b9548745c-69n25 with SMTP id filterdrecv-6b9548745c-69n25-1-6366658A-8F 2022-11-05 13:30:50.704945384 +0000 UTC m=+414934.262437994 Received: from herokuapp.com (unknown) by geopod-ismtpd-3-0 (SG) with ESMTP id ns2Ya-XUQ6uikLjHha56bw for ; Sat, 05 Nov 2022 13:30:50.682 +0000 (UTC) Date: Sat, 05 Nov 2022 13:30:50 +0000 (UTC) From: "make_now_just (Kitsune TSUYUSATO)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 19104 X-Redmine-Issue-Author: make_now_just X-Redmine-Sender: make_now_just 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: 87078 X-SG-EID: =?us-ascii?Q?Kh8XFMPV1KnUqUQrkUjUrF9m3wMZdjltDpem16aq5IRqipy=2Ft9fVrhryShpiTX?= =?us-ascii?Q?Cajufqn8NOAOvmQ+6fJsl=2FX7o188lIZ4tgPhbLs?= =?us-ascii?Q?RrtR8di0dWW0yTSuzcGW=2FQcz5if4MBk5iUiosiV?= =?us-ascii?Q?TdbkHbxvKhARSNMztD7gKPwwDF4efQe7oRhFVbZ?= =?us-ascii?Q?sCmp8d9FT9vbYBmZytF=2FddVp+9uoq5XSdWtGt9x?= =?us-ascii?Q?n8hacOGhEwSm82Ahc4JSppVzb1zKkT5nTkwYWyW?= =?us-ascii?Q?7bNDoC5QCZAt5kNOBL92GO8RlLI2zXp1worKvKm?= =?us-ascii?Q?Zls=3D?= To: ruby-core@neon.ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 110621 Subject: [ruby-core:110621] [Ruby master Feature#19104] Introduce the cache-based optimization for Regexp matching 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" SXNzdWUgIzE5MTA0IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IG1ha2Vfbm93X2p1c3QgKEtpdHN1bmUg VFNVWVVTQVRPKS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K RmVhdHVyZSAjMTkxMDQ6IEludHJvZHVjZSB0aGUgY2FjaGUtYmFzZWQgb3B0aW1pemF0aW9uIGZv ciBSZWdleHAgbWF0Y2hpbmcNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xOTEw NA0KDQoqIEF1dGhvcjogbWFrZV9ub3dfanVzdCAoS2l0c3VuZSBUU1VZVVNBVE8pDQoqIFN0YXR1 czogT3Blbg0KKiBQcmlvcml0eTogTm9ybWFsDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpSZWdleHAgbWF0Y2hpbmcgY2F1c2VzIGEgdGltZS1jb21wbGV4aXR5IGV4 cGxvc2lvbiBwcm9ibGVtIGFzIGtub3duIGFzIFJlRG9TIChbaHR0cHM6Ly9lbi53aWtpcGVkaWEu b3JnL3dpa2kvUmVEb1NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlRG9TKSkuIFJl RG9TIGhhcyBiZWNvbWUgc2VyaW91cyB2dWxuZXJhYmlsaXR5IGluIG1hbnkgcGxhY2VzIGluIHJl Y2VudCB5ZWFycywgYW5kIFJ1YnkgaXMgbm8gZXhjZXB0aW9uLiBUaGUgZm9sbG93aW5nIGlzIHRo ZSBpbmNvbXBsZXRlIGxpc3Qgb2Ygc3VjaCB2dWxuZXJhYmlsaXR5IHJlcG9ydHM6DQoNCi0gW2h0 dHBzOi8vZ2l0aHViLmNvbS9zaW5hdHJhL3NpbmF0cmEvcHVsbC8xODIzXShodHRwczovL2dpdGh1 Yi5jb20vc2luYXRyYS9zaW5hdHJhL3B1bGwvMTgyMykNCi0gW2h0dHBzOi8vZ2l0aHViLmNvbS9s b3N0aXNsYW5kL2ZhcmFkYXktbmV0X2h0dHAvcHVsbC8yN10oaHR0cHM6Ly9naXRodWIuY29tL2xv c3Rpc2xhbmQvZmFyYWRheS1uZXRfaHR0cC9wdWxsLzI3KQ0KDQpUaGVzZSByZXBvcnRzIGhhdmUg YmVlbiBhZGRyZXNzZWQgYnkgZml4aW5nIHRoZSBsaWJyYXJ5L3NvZnR3YXJlIGltcGxlbWVudGF0 aW9uLiBCdXQsIGlmIHRoZSBsYW5ndWFnZeKAmXMgUmVnZXhwIGltcGxlbWVudGF0aW9uIGJlY29t ZXMgc2FmZSwgdGhlIHZ1bG5lcmFiaWxpdHkgaXMgZnVuZGFtZW50YWxseSBhcmNoaXZlZC4NCg0K Rm9yIGEgZmV3IG1vbnRocywgUnVieSBoYXMgaW1wbGVtZW50ZWQgYSBSZWdleHAgbWF0Y2hpbmcg dGltZW91dCAoW2h0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNzgzN10oaHR0cHM6 Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE3ODM3KSkuIEl0IGlzIG9uZSBvZiB0aGUgdXNl ZnVsIG1ldGhvZHMgZm9yIHByZXZlbnRpbmcgUmVEb1MgdnVsbmVyYWJpbGl0eSwgYnV0IGl0IGlz IGEgcHJvYmxlbSB0aGF0IHNldHRpbmcgYSBjb3JyZWN0IHRpbWVvdXQgdmFsdWUgaXMgaGFyZC4g VGhpcyB2YWx1ZSBpcyBkZXBlbmRpbmcgb24gaW5wdXQgbGVuZ3RoLCBlbnZpcm9ubWVudCwgbmV0 d29yayBzdGF0dXMsIHN5c3RlbSBsb2FkLCBldGMuIFdoZW4gdGhlIHZhbHVlIGlzIHRvbyBzbWFs bCwgYSBzeXN0ZW0gbWF5IGJlIGJyb2tlbiwgYnV0IHdoZW4gdGhlIHZhbHVlIGlzIHRvbyBsYXJn ZSwgaXQgaXMgbm90IHVzZWZ1bCBmb3IgcHJldmVudGluZyBSZURvUy4NCg0KVGhlcmVmb3JlLCBh cyBhIG5ldyB3YXkgdG8gcHJldmVudCBSZURvUywgd2UgcHJvcG9zZSB0byBpbnRyb2R1Y2UgY2Fj aGUtYmFzZWQgb3B0aW1pemF0aW9uIGZvciBSZWdleHAgbWF0Y2hpbmcuIEFzIENTIGZ1bmRhbWVu dGFsIGtub3dsZWRnZSwgYXV0b21hdG9uIG1hdGNoaW5nIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSBw b3NpdGlvbiBvZiBpbnB1dCBhbmQgc3RhdGUuIEluIGFkZGl0aW9uLCBtYXRjaGluZyB0aW1lIGV4 cGxvc2lvbiBpcyBjYXVzZWQgZm9yIHJlcGVhdGluZyB0byBhcnJpdmUgYXQgdGhlIHNhbWUgcG9z aXRpb24gYW5kIHN0YXRlIG1hbnkgdGltZXMuIFRoZW4sIFJlRG9TIGNhbiBiZSBwcmV2ZW50ZWQg d2hlbiBwYWlycyBvZiBwb3NpdGlvbiwgYW5kIHN0YXRlIGFycml2ZWQgb25jZSBpcyByZWNvcmRl ZCAoY2FjaGVkKS4gSW4gZmFjdCwgdW5kZXIgc3VjaCBhbiBvcHRpbWl6YXRpb24sIGl0IGlzIGtu b3duIGFzIHRoZSBtYXRjaGluZyB0aW1lIGNvbXBsZXhpdHkgaXMgbGluZWFyIGFnYWluc3QgaW5w dXQgc2l6ZSBbMV0uDQoNClsxXTogRGF2aXMsIEphbWVzIEMuLCBGcmFuY2lzY28gU2VydmFudCwg YW5kIERvbmd5b29uIExlZS4gIlVzaW5nIHNlbGVjdGl2ZSBtZW1vaXphdGlvbiB0byBkZWZlYXQg cmVndWxhciBleHByZXNzaW9uIGRlbmlhbCBvZiBzZXJ2aWNlIChSZURvUykuIiAqMjAyMSBJRUVF IHN5bXBvc2l1bSBvbiBzZWN1cml0eSBhbmQgcHJpdmFjeSAoU1ApKi4gSUVFRSwgMjAyMS4gW2h0 dHBzOi8vd3d3LmNvbXB1dGVyLm9yZy9jc2RsL3Byb2NlZWRpbmdzLWFydGljbGUvc3AvMjAyMS84 OTM0MDBhNTQzLzFvYWs5ODhUaHZPXShodHRwczovL3d3dy5jb21wdXRlci5vcmcvY3NkbC9wcm9j ZWVkaW5ncy1hcnRpY2xlL3NwLzIwMjEvODkzNDAwYTU0My8xb2FrOTg4VGh2TykNCg0KU2VlIHRo ZSBmb2xsb3dpbmcgZXhhbXBsZS4NCg0KYGBgYmFzaA0KJCBydWJ5IC0tdmVyc2lvbg0KcnVieSAz LjIuMHByZXZpZXcyICgyMDIyLTA5LTA5IG1hc3RlciAzNWNmYzlhM2JiKSBbYXJtNjQtZGFyd2lu MjFdDQoNCiQgdGltZSBydWJ5IC1lICcvXihhfGEpKiQvID1+ICJhIiAqIDI4ICsgImIiJw0KcnVi eSAtZSAnL14oYXxhKSokLyA9fiAiYSIgKiAyOCArICJiIicgIDguNDlzIHVzZXIgMC4wNHMgc3lz dGVtIDk4JSBjcHUgOC42NjMgdG90YWwNCg0KJCAuL21pbmlydWJ5IC0tdmVyc2lvbg0KcnVieSAz LjIuMGRldiAoMjAyMi0xMC0yN1QxMzozOTo1NlogcmVjYWNoZSBiYzU5YjdjYzFlKSBbYXJtNjQt ZGFyd2luMjFdDQoNCiQgdGltZSAuL21pbmlydWJ5IC1lICcvXihhfGEpKiQvID1+ICJhIiAqIDI4 ICsgImIiJw0KLi9taW5pcnVieSAtZSAnL14oYXxhKSokLyA9fiAiYSIgKiAyOCArICJiIicgIDAu MDFzIHVzZXIgMC4wMXMgc3lzdGVtIDglIGNwdSAwLjMxMCB0b3RhbA0KYGBgDQoNCkluIHRoaXMg ZXhhbXBsZSwgdXNpbmcgcnVieSB2My4yLjAtcHJldmlldzIsIG1hdGNoaW5nIGAvXihhfGEpKiQv YCBhZ2FpbnN0IGAiYSIgKiAyOCArICJiImAgdGFrZXMgOC42IHNlY29uZHMgYmVjYXVzZSBtYXRj aGluZyB0aW1lIG9mIHRoaXMgUmVnZXhwIHRha2VzIGV4cG9uZW50aWFsbHkgYWdhaW5zdCBgImEi ICogTiArICJiImAgZm9ybSBzdHJpbmcuIEJ1dCwgdXNpbmcgdGhlIHBhdGNoZWQgdmVyc2lvbiBv ZiBydWJ5LCBpdCB0YWtlcyAwLjAxIHNlY29uZHMuIEluY3JlZGlibHkgaXQgaXMgODYwIHRpbWVz IGZhc3RlciBiZWNhdXNlIG1hdGNoaW5nIGlzIGRvbmUgaW4gbGluZWFyIHRpbWUuDQoNCkJ5IHRo aXMgb3B0aW1pemF0aW9uLCB0aGUgbWF0Y2hpbmcgdGltZSBpcyBsaW5lYXIgdG8gdGhlIGlucHV0 IHNpemUuIEl0IHNvdW5kcyBzZWN1cmUgYW5kIGdvb2QuIFVuZm9ydHVuYXRlbHksIHdoZW4gUmVn ZXhwIHVzZXMgc29tZSBleHRlbnNpb24gKGUuZy4gbG9vay1hcm91bmQsIGJhY2stcmVmZXJlbmNl LCBzdWJleHByZXNzaW9uIGNhbGwpLCB0aGUgb3B0aW1pemF0aW9uIGlzIG5vdCBhcHBsaWVkLiBB bHNvLCB0aGUgb3B0aW1pemF0aW9uIG5lZWRzIGEgYml0IG1vcmUgbWVtb3J5IGZvciBjYWNoaW5n LiBIb3dldmVyLCB3ZSBoYXZlIGFscmVhZHkgaW52ZXN0aWdhdGVkIHRoYXQgdGhleSBhcmUgbm90 IHNvIHRoZSBtYWpvciBwcm9ibGVtcyAoU2VlIHRoZSAiTGltaXRhdGlvbiIgc2VjdGlvbikuDQoN CiMjIEltcGxlbWVudGF0aW9uDQoNClRoZSBiYXNpYyBjYWNoZSBpbXBsZW1lbnRhdGlvbiBpcyBj b21wbGV0ZSBhdCB0aGlzIHRpbWUgYW5kIGNhbiBiZSBmb3VuZCBpbiB0aGUgZm9sbG93aW5nIFB1 bGwgUmVxdWVzdC4NCg0KW2h0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NDg2XSho dHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjQ4NikNCg0KU29tZSB0ZXN0cyBzZWVt IHRvIGJlIGZhaWxlZCwgYnV0IGl0IGlzIG5vIHByb2JsZW0hIEJlY2F1c2UgdGhlIGZhaWxlZCB0 ZXN0cyBhcmUgZm9yIFJlZ2V4cCB0aW1lb3V0LCBvcHRpbWl6YXRpb24gd29ya3MgY29ycmVjdGx5 IGFuZCBzbyB0aGV5IGZhaWxlZCBhcyBleHBlY3RlZC4gT2YgY291cnNlLCB3ZSBuZWVkIHRvIGZp eCB0aGVzZSB0ZXN0cyBiZWZvcmUgbWVyZ2luZy4NCg0KSW1wbGVtZW50YXRpb24gbm90ZXM6DQoN Ci0gQSBudWxsLWNoZWNrIG9uIGxvb3AgY2F1c2VzIG5vbi1saW5lYXIgYmVoYXZpb3IsIHNvIHRo ZSBmaWVsZCB0byBpbmRleCB0aGUgbGF0ZXN0IG51bGwtY2hlY2sgaXRlbSBvbiB0aGUgc3RhY2sg aXMgYWRkZWQgdG8gT25pZ1N0YWNrVHlwZS4gKFtodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5 L3B1bGwvNjQ4Ni9maWxlcyNkaWZmLTQzNDc0NjBlMzc5Y2Q5NzBiYTBiODhiNGFjYjIxNWVhNjBj YmFlMzA4MTI0Njc1ZGU4ODExZWVkMzc3MzY3YWFSODMxXShodHRwczovL2dpdGh1Yi5jb20vcnVi eS9ydWJ5L3B1bGwvNjQ4Ni9maWxlcyNkaWZmLTQzNDc0NjBlMzc5Y2Q5NzBiYTBiODhiNGFjYjIx NWVhNjBjYmFlMzA4MTI0Njc1ZGU4ODExZWVkMzc3MzY3YWFSODMxKSkNCi0gV2hlbiB0aGUgbG9v cCBpcyBudWxsIGFuZCB0aGlzIGxvb3AgaGFzIGEgY2FwdHVyZSwgbWF0Y2hpbmcgYmVoYXZlcyBh cyBhIG1vbm9tYW5pYWMuIFRvIHJlcHJvZHVjZSB0aGlzIGJlaGF2aW9yLCBjYWNoZXMgaW4gdGhl IGxvb3AgaXMgY2xlYXJlZCBhcyBuZWNlc3NhcnkuIChbaHR0cHM6Ly9naXRodWIuY29tL3J1Ynkv cnVieS9wdWxsLzY0ODYvZmlsZXMjZGlmZi1jM2NmZTE5ZWZmZjBjYzUxODEzODQ3NDEzODYwNjdi ODFlYWRiMjUwNWI4YjliM2Y5ODBkMTBmODE1MDM3Mzk1UjM0MzNdKGh0dHBzOi8vZ2l0aHViLmNv bS9ydWJ5L3J1YnkvcHVsbC82NDg2L2ZpbGVzI2RpZmYtYzNjZmUxOWVmZmYwY2M1MTgxMzg0NzQx Mzg2MDY3YjgxZWFkYjI1MDViOGI5YjNmOTgwZDEwZjgxNTAzNzM5NVIzNDMzKSkNCkxpa2UgYSBm bGlwLWZsb3Agb3BlcmF0b3IsIHdlIGhvcGUgdG8gZHJvcCB0aGlzIGlmIHBvc3NpYmxlLiBCdXQg aXQgc3RpbGwgcmVtYWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Lg0KDQojIyMgTGltaXRhdGlv bg0KDQpDYWNoZS1iYXNlZCBvcHRpbWl6YXRpb24gaXMgbm90IGFwcGxpZWQgaW4gdGhlIGZvbGxv d2luZyBjYXNlczoNCg0KMS4gUmVnZXhwIHVzaW5nIHNvbWUgZXh0ZW5zaW9ucyAoYmFjay1yZWZl cmVuY2UgYW5kIHN1YmV4cHJlc3Npb24gY2FsbCwgbG9vay1hcm91bmQsIGF0b21pYywgYWJzZW50 IG9wZXJhdG9ycykgaXMgbm90IG9wdGltaXplZCBiZWNhdXNlIGl0IGlzIGltcG9zc2libGUgb3Ig aGFyZC4gSG93ZXZlciwgaXQgbWF5IGJlIHBvc3NpYmxlIGZvciBsb29rLWFyb3VuZCBvcGVyYXRv cnMuDQoyLiBBIGJvdW5kZWQgb3IgZml4ZWQgdGltZXMgcmVwZXRpdGlvbiBuZXN0aW5nIGluIGFu b3RoZXIgcmVwZXRpdGlvbiAoZS5nLiBgLyhhezIuM30pKi9gKS4gSXQgaXMgYW4gaW1wbGVtZW50 YXRpb24gaXNzdWUgZW50aXJlbHksIGJ1dCB3ZSBiZWxpZXZlIGl0IGlzIGhhcmQgdG8gc3VwcG9y dCB0aGlzIGNhc2UgY29ycmVjdGx5Lg0KMy4gQm91bmRlZCBvciBmaXhlZCB0aW1lcyByZXBldGl0 aW9uIGlzIHRvbyBsYXJnZSAoZS5nLiBgLyhhfGIpezEwMDAwMCwyMDAwMDB9L2ApLiBUaGUgY2Fj aGUgdGFibGUgc2l6ZSBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHByb2R1Y3Qgb2YgdGhlIG51bWJl ciBvZiBjYWNoZSBwb2ludHMgb2YgcmVnZXggYW5kIGlucHV0IHNpemUuIEluIHRoaXMgY2FzZSwg c2luY2UgdGhlIG51bWJlciBvZiBjYWNoZSBwb2ludHMgYmVjb21lcyB0b28gbGFyZ2UsIHRoZSBv cHRpbWl6YXRpb24gY2Fubm90IGJlIGFwcGxpZWQuDQoNCkV4cGVyaW1lbnRzIHdlcmUgY29uZHVj dGVkIHRvIGludmVzdGlnYXRlIGhvdyB0aGVzZSBsaW1pdGF0aW9ucyBhcmUgcHJvYmxlbWF0aWMg aW4gcHJhY3RpY2UuIFdlIHVzZWQgT2JqZWN0U3BhY2UgdG8gY29sbGVjdCBSZWdleHBzIGFuZCBp bnZlc3RpZ2F0ZSB3aGV0aGVyIHRoZXkgY291bGQgYmUgb3B0aW1pemVkIGFuZCB0aGUgbnVtYmVy IG9mIGNhY2hlIHBvaW50cy4gUmVnZXhwcyB3ZXJlIGNvbGxlY3RlZCBmcm9tIHRoZSBzdGFuZGFy ZCBsaWJyYXJ5LCBXZWJyaWNrLCBhbmQgUmFpbHMuIFNlZSB0aGUgZm9sbG93aW5nIGdpc3QgZm9y IHRoZSBkZXRhaWxzIChbaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWFrZW5vd2p1c3QvODNlMWU3 NWEyZDdkZThiOTU2ZTkzYmRhYzAwNGEwNmJdKGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL21ha2Vu b3dqdXN0LzgzZTFlNzVhMmQ3ZGU4Yjk1NmU5M2JkYWMwMDRhMDZiKSkuDQoNClRoZSBleHBlcmlt ZW50cyByZXN1bHQgaXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZyB0YWJsZS4NCg0KfCBDb2xsZWN0 ZWQgZnJvbSB8ICMgUmVnZXhwIHwgIyBub24tb3B0aW1pemFibGUgfCBNYXhpbXVtIG51bWJlciBv ZiBjYWNoZSBwb2ludHMgfA0KfCAtLS0gfCAtLS0gfCAtLS0gfCAtLS0gfA0KfCBzdGRsaWIgfCAx MDA5IHwgODYgKDguNTIlKSB8IDgxIHwNCnwgV2VicmljayB8IDM1NiB8IDQ0ICgxMi4zNiUpIHwg MjAgfA0KfCBSYWlscyB8IDc1OSB8IDc0ICg3Ljc1JSkgfCAyNyB8DQp8IFRvdGFsIDxicj4gKER1 cGxpY2F0aW9ucyBhcmUgcmVkdWNlZCkgfCAxNTA2IHwgMTE4ICg3Ljg0JSkgfCA4MSB8DQoNClRo aXMgcmVzdWx0IHNob3dzIHRoYXQgdGhlIHBlcmNlbnRhZ2Ugb2Ygbm9uLW9wdGltaXphYmxlIFJl Z2V4cCBpcyBsZXNzIHRoYW4gMTAlLCBhbmQgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBmb3Ig b3B0aW1pemF0aW9uIGlzIGFib3V0IDEwIHRpbWVzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAo ODEvOCwgZm9yIGEgYml0IGFycmF5KSBhdCB3b3JzdCBpbiB0aGlzIGNhc2UuIEl0IGlzIGNvbnNp ZGVyZWQgdGhhdCBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIFJlZ2V4cCBjYW4gYmUgb3B0aW1pemVk IGluIHByYWN0aWNlLg0KDQojIyBTcGVjaWZpY2F0aW9uDQoNClRoZSBkZXRhaWxlZCBzcGVjaWZp Y2F0aW9uIGhhcyBiZWVuIGZpeGVkIHlldC4gV2UgaGF2ZSBzb21lIGlkZWFzIGFuZCB3ZSB3b3Vs ZCBsaWtlIHRvIGRpc2N1c3MgdGhlbS4NCg0KLSBXaGVuIGlzIG9wdGltaXphdGlvbiBlbmFibGVk PyBDdXJyZW50bHksIGl0IHR1cm5zIG9uIHdoZW4gdGhlIGJhY2t0cmFjayBjYXVzZXMgYXMgbWFu eSBhcyB0aGUgaW5wdXQgbGVuZ3RoLg0KLSBIb3cgdGhlIG51bWJlciBvZiBjYWNoZSBwb2ludHMg aXMgYWxsb3dlZCwgYW5kIGhvdyBtZW1vcnkgY2FuIGJlIGFsbG9jYXRlZD8gSXQgaXMgbm90IGRl dGVybWluZWQgZm9yIG5vdy4NCi0gSWYgdGhlIGFib3ZlIHBhcmFtZXRlcnMgY2FuIGJlIHNwZWNp ZmllZCBieSB1c2VycywgaG93IGFyZSB0aGV5IHNwZWNpZmllZD8gKHZpYSBjb21tYW5kLWxpbmUg ZmxhZ3MsIG9yIHN0YXRpYyAvIGluc3RhbmNlIHBhcmFtZXRlcnMgbGlrZSBgUmVnZXhwIy50aW1l b3V0PWAgYW5kIGBSZWdleHAjdGltZW91dD1gKQ0KLSBVbmxlc3MgdGhlIGlucHV0IHNpemUgaXMg dG9vIGxhcmdlLCB0aGUgYXZhaWxhYmlsaXR5IG9mIG9wdGltaXphdGlvbiBjYW4gYmUgZGV0ZXJt aW5lZCBvbiBjb21waWxlLXRpbWUuIFNvLCB3ZSB3b3VsZCBsaWtlIHRvIGFkZCBhIG5ldyBmbGFn IHRvIFJlZ2V4cCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNhY2hlIGlzIGF2YWlsYWJsZS4gSXQg YmVjb21lcyBvbmUgb2YgdGhlIGNyaXRlcmlhIGZvciB3aGV0aGVyIFJlZ2V4cCBpcyBlZmZpY2ll bnRseSBleGVjdXRhYmxlIG9yIG5vdC4gV2UgYmVsaWV2ZSBpdCBoZWxwcyB1c2Vycy4gVGh1cywg d2hpY2ggbGV0dGVyIGlzIHByZWZlcnJlZCBmb3IgdGhpcyBwdXJwb3NlPyBgbGAgKGxpbmVhcikg b3IgYHJgIChyZWd1bGFyKSBzb3VuZHMgZ29vZCwgYnV0IEkgYW0gbm90IHN1cmUgd2hpY2ggaXMg dGhlIGJlc3QuDQoNClRoYW5rIHlvdS4NCg0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFu Zy5vcmcvDQo=