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=-1.3 required=3.0 tests=BAYES_00,BODY_8BITS, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,SPF_PASS 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 1819120248 for ; Wed, 3 Apr 2019 05:50:35 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 08E83121443; Wed, 3 Apr 2019 14:50:30 +0900 (JST) Received: from o1678948x4.outbound-mail.sendgrid.net (o1678948x4.outbound-mail.sendgrid.net [167.89.48.4]) by neon.ruby-lang.org (Postfix) with ESMTPS id 17BCE120F97 for ; Wed, 3 Apr 2019 14:50:26 +0900 (JST) Received: by filter0068p3iad2.sendgrid.net with SMTP id filter0068p3iad2-1385-5CA449A2-17 2019-04-03 05:50:26.422603421 +0000 UTC m=+439411.549850443 Received: from herokuapp.com (unknown [54.85.62.139]) by ismtpd0013p1iad2.sendgrid.net (SG) with ESMTP id ZY-EINuHSpahdH6Gq6Ye1w for ; Wed, 03 Apr 2019 05:50:26.364 +0000 (UTC) Date: Wed, 03 Apr 2019 05:50:26 +0000 (UTC) From: pikachuexe@gmail.com Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 67605 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 15626 X-Redmine-Issue-Author: tenderlovemaking X-Redmine-Sender: PikachuEXE 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?S=2FVJxd5DjN7C4oaYOB3YxeRSd30GQKKAs2lKNqXFcsuHECxcfUgmbe6qwUziZe?= =?us-ascii?Q?WC6E8NmvqaTzVIsQT2BVIEExg5LlldkoCMhOcU2?= =?us-ascii?Q?sVW7faY00JDuf8uig9Yvodc6Un5uiBSXnF8O9Xx?= =?us-ascii?Q?vAm1CaViO6y0WL=2FKK9BW04As5bnCZLmsYIas7aY?= =?us-ascii?Q?cCrmD3MTAKg60A8myLnrGajetPsWn89EnIw=3D=3D?= To: ruby-core@ruby-lang.org X-ML-Name: ruby-core X-Mail-Count: 92121 Subject: [ruby-core:92121] [Ruby trunk Feature#15626] Manual Compaction for MRI's GC (`GC.compact`) 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" SXNzdWUgIzE1NjI2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgUGlrYWNodUVYRSAoUGlrYWNodSBMZXVu ZykuDQoNCg0KQHRlbmRlcmxvdmVtYWtpbmcNCg0KSSB0cnkgeW91ciBwYXRjaCBhZ2FpbiBhbmQg bm8gZXJyb3IgdGhpcyB0aW1lICh3aXRob3V0IHRoZSBtaWRkbGV3YXJlIHRvIGNhbGwgR0MuY29t cGFjdCkNCk1heWJlIEkgZm9yZ290IHRvIHJlc3RhcnQgc2VydmVyIGFmdGVyIHN3aXRjaGluZyB0 byBicmFuY2ggd2l0aG91dCBtaWRkbGV3YXJlIG9uIG15IGxhc3QgdGVzdA0KDQpIb3dldmVyIHdp dGggbWlkZGxld2FyZSAoSSBoYXZlIHJlc3RhcnRlZCBzZXJ2ZXIgYWZ0ZXIgc3dpdGNoaW5nIGJy YW5jaCB0aGlzIHRpbWUsIHl1cCkNCkkgY2FuIHNlZSB0aGUgcnVieSBwcm9jZXNzZXMgcnVubmlu ZyBhdCAxMDAlIGFmdGVyIHJlcXVlc3RzIGZpbmlzaGVkIGFuZCBpdCBkb2VzIG5vdCBoYXBwZW4g b24gYXBwIGJvb3QNCg0KSG93ZXZlciBzaW5jZSBJIGFtIHN0aWxsIHVzaW5nIG9sZCBydWJ5LWhl YWQgd2l0aG91dCB5b3VyIGNvbW1pdA0KaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9jb21t aXQvODJmM2Q4YjZjYzRlNDkxZjEzZWMyOWY2N2RhYTJiYjRhZTBmMWRiZA0KDQpXaGF0J3MgdGhl IGJlc3Qgd2F5IHRvIGluc3RhbGwgdGhlIGxhdGVzdCBydWJ5LWhlYWQgd2l0aCBmb3IgbGF0ZXN0 IHZlcnNpb24gb2YgdGhpcyBjaGFuZ2U/DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCkZlYXR1cmUgIzE1NjI2OiBNYW51YWwgQ29tcGFjdGlvbiBmb3IgTVJJJ3Mg R0MgKGBHQy5jb21wYWN0YCkNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNTYy NiNjaGFuZ2UtNzc0NDcNCg0KKiBBdXRob3I6IHRlbmRlcmxvdmVtYWtpbmcgKEFhcm9uIFBhdHRl cnNvbikNCiogU3RhdHVzOiBPcGVuDQoqIFByaW9yaXR5OiBOb3JtYWwNCiogQXNzaWduZWU6IA0K KiBUYXJnZXQgdmVyc2lvbjogDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpIaSwNCg0KSSd2ZSBhdHRhY2hlZCBhIHBhdGNoIHRoYXQgaW1wbGVtZW50cyBhIGNvbXBh Y3RvciBmb3IgTVJJLiAgSSdsbCB0cnkgdG8gZGVzY3JpYmUgdGhlIHBhdGNoIGluIGRldGFpbCBi ZWxvdywgYnV0IHRoZSBiaWdnZXN0IHVzZXIgZmFjaW5nIGNoYW5nZXMgYXJlOg0KDQoxLiBBIG5l dyBtZXRob2QgYEdDLmNvbXBhY3RgIHRoYXQgY2FuIGJlIGNhbGxlZCBmcm9tIFJ1YnkNCjIuIEMg ZXh0ZW5zaW9ucyBoYXZlIGEgbmV3ICJhZnRlciBjb21wYWN0aW9uIiBjYWxsYmFjayB0aGV5IGNh biByZWdpc3Rlcg0KMy4gSW50cm9kdWN0aW9uIG9mIG5ldyBtYXJraW5nIGZ1bmN0aW9ucyB0aGF0 IGFsbG93IG9iamVjdHMgdG8gYmUgbWFya2VkLCBidXQgbm90ICJwaW5uZWQiIHRvIHRoZSBzYW1l IGxvY2F0aW9uDQo0LiBBIGZ1bmN0aW9uIHRvIGdldCB0aGUgbmV3IGxvY2F0aW9uIG9mIGFuIG9i amVjdCAodG8gYmUgdXNlZCBmcm9tIHRoZSAiYWZ0ZXIgY29tcGFjdGlvbiIgY2FsbGJhY2spDQoN CiMgQ29tcGFjdG9yIGZvciBSR2VuR0MNCg0KVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGNv bXBhY3RvciBpbXBsZW1lbnRhdGlvbiBmb3IgUkdlbkdDLiAgVGhpcyBwYXRjaA0KYWRkcyBhIG5l dyBtZXRob2QgdG8gUnVieSwgYEdDLmNvbXBhY3RgIHdoaWNoIHdpbGwgY29tcGFjdCB0aGUgb2Jq ZWN0cyBpbiB0aGUNCmhlYXAuICBXaGF0IGZvbGxvd3MgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUg YWxnb3JpdGhtLCBhbG9uZyB3aXRoIGFjaGlldmVtZW50cw0KYW5kIHRlY2huaWNhbCBjaGFsbGVu Z2VzLg0KDQojIyBTdGVwcyBmb3IgQ29tcGFjdGlvbg0KDQpUaGVzZSBhcmUgdGhlIGhpZ2ggbGV2 ZWwgc3RlcHMgdGFrZW4gaW4gYEdDLmNvbXBhY3RgIGFyZSBhcyBmb2xsb3dzOg0KDQoxLiBGdWxs IEdDDQoyLiBNb3ZlIG9iamVjdHMNCjMuIFVwZGF0ZSByZWZlcmVuY2VzDQo0LiBGdWxsIEdDDQoN CiMjIyBTdGVwIE9uZSwgRnVsbCBHQw0KDQpOb3QgYWxsIG9iamVjdHMgaW4gUnVieSdzIGhlYXAg Y2FuIG1vdmUuICBJbiBwYXJ0aWN1bGFyLCBDIGV4dGVuc2lvbnMgbWF5IGhvbGQNCnJlZmVyZW5j ZXMgdG8gVkFMVUUgcG9pbnRlcnMuICBJZiB0aGUgVkFMVUUgcG9pbnRlcnMgbW92ZSwgdGhlIEMg ZXh0ZW5zaW9uIG1heQ0Kbm90IGJlIGFibGUgdG8gZmluZCB0aGVtIGFuZCB3aWxsIGdldCBhIFNF R1Ygb3IgcG9zc2libHkgd3JvbmcgZGF0YS4NCg0KVG8gcHJldmVudCB0aGlzLCBhIG5ldyAicGlu bmluZyIgdGFibGUgd2FzIGludHJvZHVjZWQuICBBbnkgb2JqZWN0IG1hcmtlZCB2aWENCmByYl9n Y19tYXJrYCBpcyAicGlubmVkIiBhbmQgaXMgbm90IGFsbG93ZWQgdG8gbW92ZS4gIEMgZXh0ZW5z aW9ucyBtdXN0IG1hcmsNCnRoZWlyIHJlZmVyZW5jZXMgaW4gb3JkZXIgdG8ga2VlcCB0aGVtIGFs aXZlLiAgU2luY2UgQyBleHRlbnNpb25zIHVzZQ0KYHJiX2djX21hcmtgIHRvIG1hcmsgYSByZWZl cmVuY2UsIHdlIGtub3cgbm90IHRvIG1vdmUgdGhhdCByZWZlcmVuY2UuICBJbiBvcmRlcg0KdG8g ZW5zdXJlIGFsbCByZWZlcmVuY2VzIGdldCBtYXJrZWQsIHdlIHBlcmZvcm0gYSBmdWxsIEdDLg0K DQpOZXcgZnVuY3Rpb25zLCBgcmJfZ2NfbWFya19ub19waW5gLCBldGMgd2VyZSBpbnRyb2R1Y2Vk IGFuZCB1c2VkIGludGVybmFsbHkuDQpUaGVzZSBmdW5jdGlvbnMga2VlcHMgdGhlIG9iamVjdCBh bGl2ZSBidXQgd2l0aG91dCBwaW5uaW5nIHRoZSByZWZlcmVuY2UuDQoNClN1bW1hcnk6IFBlcmZv cm0gYSBmdWxsIEdDIHNvIHRoYXQgb2JqZWN0cyBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2AgZG8g bm90IG1vdmUuDQoNCiMjIyBTdGVwIFR3bywgTW92ZSBPYmplY3RzDQoNClRoaXMgY29tcGFjdG9y IHVzZXMgYSAidHdvIGZpbmdlciIgYWxnb3JpdGhtIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGluICJU aGUNClByb2dyYW1taW5nIExhbmd1YWdlIExJU1A6IEl0cyBPcGVyYXRpb24gYW5kIEFwcGxpY2F0 aW9ucyIgKHBhZ2UgMjI4KVteMV0uICBUd28NCnBvaW50ZXJzIHBvaW50IGF0IGVhY2ggc2lkZSBv ZiB0aGUgaGVhcCwgaWYgb25lIHNsb3QgaXMgZW1wdHksIGFuZCB0aGUgb3RoZXIgaXMNCm1vdmVh YmxlLCBpdCBzd2FwcyBwbGFjZXMgYW5kIGxlYXZlcyBhIGBUX01PVkVEYCBvYmplY3QgdGhhdCBj b250YWlucyBhDQpmb3J3YXJkaW5nIGFkZHJlc3MuDQoNCkluIFJ1YnksIHRoZSBhbGdvcml0aG0g bG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczoNCg0KYGBgcnVieQ0KZGVmIGNvbXBhY3QNCiAgaGVh cCA9IFsgLi4uIF0gIyBtYW55IHNsb3RzDQogIGxlZnQgID0gMA0KICByaWdodCA9IGhlYXAubGVu Z3RoIC0gMQ0KDQogIHdoaWxlIGxlZnQgPCByaWdodA0KICAgIGxlZnRfc2xvdCA9IGhlYXBbbGVm dF0NCiAgICByaWdodF9zbG90ID0gaGVhcFtyaWdodF0NCg0KICAgIGlmIGlzX2VtcHR5PyhsZWZ0 X3Nsb3QpICYmICFpc19lbXB0eT8ocmlnaHRfc2xvdCkgJiYgY2FuX21vdmU/KHJpZ2h0X3Nsb3Qp DQogICAgICBzd2FwKGxlZnQsIHJpZ2h0KQ0KICAgICAgaGVhcFtyaWdodF0gPSBUX01PVkVELm5l dyhsZWZ0KSAjIGxlYXZlIGZvcndhcmRpbmcgYWRkcmVzcw0KICAgIGVuZA0KDQogICAgd2hpbGUg IWlzX2VtcHR5PyhoZWFwW2xlZnRdKQ0KICAgICAgbGVmdCArPSAxDQogICAgZW5kDQoNCiAgICB3 aGlsZSBpc19lbXB0eT8oaGVhcFtyaWdodF0pIHx8ICFjYW5fbW92ZT8oaGVhcFtyaWdodF0pDQog ICAgICByaWdodCAtPSAxDQogICAgZW5kDQogIGVuZA0KZW5kDQpgYGANCg0KSWYgd2UgaGF2ZSBh IGhlYXAgd2l0aCA2IHNsb3RzLCBiZWZvcmUgY29tcGFjdGlvbiBpdCBtaWdodCBsb29rIHNvbWV0 aGluZyBsaWtlDQp0aGlzOg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgIOKUjCDilIAg4pSA IOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAg ICAgICAgICAgICAgIEJlZm9yZSBDb21wYWN0aW9uICAg4pSCICAgICAgIA0KICAgICAgICAgICAg ICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg ICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA 4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA 4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAgICDilIIgIDEgIOKUgiAgMiAg4pSC ICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAgICAgICAgICAgICAgIOKUnOKUgOKU gOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKU gOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUpA0KU2xvdCBDb250 ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgkVtcHR54pSCRW1wdHnilIIgIEMgIOKUgiAgRCAg4pSC DQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg 4pSCICAgICDilIINCiAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKU gOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKU gOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KYGBgDQoNCkFmdGVyIGNvbXBhY3Rpb24sIGJ1dCBi ZWZvcmUgcmVmZXJlbmNlIHVwZGF0ZSwgaXQgd2lsbCBsb29rIGxpa2UgdGhpczoNCg0KYGBgDQog ICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDi lIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgQ29tcGFj dGlvbiAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIOKUlCDilIAg4pSAIOKUgCDi lIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgIOKU jOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKU gOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUkA0KIFNs b3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSCICA0ICDilIIgIDUgIOKUgiAg NiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDi lIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDi lLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKUgiAgQSAg4pSCICBCICDilIIg IEQgIOKUgiAgQyAg4pSCTU9WRUTilIJNT1ZFROKUgg0KICAgICAgICAgICAgICAg4pSCICAgICDi lIIgICAgIOKUgiAgICAg4pSCICAgICDilIJUTyA0IOKUglRPIDMg4pSCDQogICAgICAgICAgICAg ICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDi lLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilJgN CmBgYA0KDQpTbG90cyA1IGFuZCA2IGNvbnRhaW4gYFRfTU9WRURgIG9iamVjdHMgdGhhdCBwb2lu dCB0byB0aGUgbmV3IGxvY2F0aW9ucyBvZiBEIGFuZA0KQyBvYmplY3RzLg0KDQojIyMgU3RlcCBU aHJlZSwgVXBkYXRlIFJlZmVyZW5jZXMNCg0KQWZ0ZXIgb2JqZWN0cyBoYXZlIG1vdmVkLCByZWZl cmVuY2VzIGFyZSB1cGRhdGVkLiAgVGhpcyBpcyBhIG1hdHRlciBvZiB1cGRhdGluZw0KYW55IHJl ZmVyZW5jZXMgdG8gdXNlIHRoZSBmb3J3YXJkaW5nIGFkZHJlc3MgcmF0aGVyIHRoYW4gdGhlIG9y aWdpbmFsIGxvY2F0aW9uLg0KDQpGb3IgZXhhbXBsZSwgaWYgb2JqZWN0IEEgaGFzIGEgcmVmZXJl bmNlIHRvIEMsIGFuZCBCIGEgcmVmZXJlbmNlIHRvIEQ6DQoNCmBgYA0KICAgICAgICAgICAgICAg ICAgICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAg ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIENvbXBhY3Rpb24gICDilIIgICAg ICAgDQogICAgICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDilIzilIDilIDilIDilIDi lIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDi lKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilJANCiBTbG90IEluZGV4ICAgIOKU giAgMSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIgIDYgIOKUgg0KICAgICAg ICAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA 4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA 4pSA4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSCRW1wdHnilIJFbXB0eeKU giAgQyAg4pSCICBEICDilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAg IOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgg0KICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA 4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA 4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSYDQogICAgICAgICAgICAg ICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgICAg4payICAgICDilrIgICANCiAgICAgICAg ICAgICAgICAgIOKUgiAgICAg4pSCICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgIA0KICAg ICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICDilIIgICANCiAgICAgICAgICAg ICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIA0KYGBgDQoNCkFmdGVyIGNvbXBhY3Rp b24sIGJ1dCBiZWZvcmUgdXBkYXRpbmcgcmVmZXJlbmNlcywgdGhlIGhlYXAgd2lsbCBsb29rIGxp a2UgdGhpczoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAg ICAgICAgQWZ0ZXIgQ29tcGFjdGlvbiAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAg IOKUlCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICAN CiAgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKU gOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKU gOKUgOKUgOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSC ICA0ICDilIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDi lIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDi lLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKU giAgQSAg4pSCICBCICDilIIgIEQgIOKUgiAgQyAg4pSCTU9WRUTilIJNT1ZFROKUgg0KICAgICAg ICAgICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIJUTyA0IOKUglRPIDMg 4pSCDQogICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDi lLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTi lIDilIDilIDilIDilIDilJgNCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICAgICAg ICAgICAgICDilrIgICAgIOKWsiAgIA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAg ICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgDQogICAgICAgICAgICAgICAgICDilJTilIDilIDi lIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilJggICAgIOKUgiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSYICAgDQpgYGANCg0KVGhlIHVwZGF0ZSByZWZlcmVuY2VzIHN0ZXAgbG9va3MgYXQgZWFj aCBvYmplY3QgaW4gdGhlIGhlYXAsIGNoZWNrcyB0byBzZWUgaWYgaXQNCnJlZmVyZW5jZXMgYW55 IG1vdmVkIHNsb3RzLCB0aGVuIHVwZGF0ZXMgdGhlIHJlZmVyZW5jZSB0byB1c2UgdGhlIG5ldyBs b2NhdGlvbi4NCkluIFJ1YnksIGl0IGxvb2tzIGxpa2UgdGhpczoNCg0KYGBgcnVieQ0KZGVmIHVw ZGF0ZV9yZWZlcmVuY2VzDQogIGhlYXAuZWFjaCBkbyB8c2xvdHwNCiAgICBuZXh0IGlmIGlzX2Vt cHR5PyhzbG90KSB8fCBpc19tb3ZlZD8oc2xvdCkNCg0KICAgIHNsb3QucmVmZXJlbmNlcy5lYWNo X3dpdGhfaW5kZXggZG8gfGNoaWxkLCBpfA0KICAgICAgaWYgaXNfbW92ZWQ/KGNoaWxkKQ0KICAg ICAgICBzbG90LnNldF9yZWZlcmVuY2UoaSwgY2hpbGQubmV3X2xvY2F0aW9uKQ0KICAgICAgZW5k DQogICAgZW5kDQogIGVuZA0KZW5kDQpgYGANCg0KQWZ0ZXIgcmVmZXJlbmNlIHVwZGF0ZXMsIHRo ZSBoZWFwIHdpbGwgbG9vayBsaWtlIHRoaXM6DQoNCmBgYA0KICAgICAgICAgICAgICAgICAgICAg 4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0K ICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgUmVmIFVwZGF0ZXMgICDilIIgICAgICAgDQog ICAgICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDi lIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDilIzilIDilIDilIDilIDilIDilKzi lIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDi lIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilJANCiBTbG90IEluZGV4ICAgIOKUgiAgMSAg 4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIgIDYgIOKUgg0KICAgICAgICAgICAg ICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA 4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSk DQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSCICBEICDilIIgIEMgIOKUgk1PVkVE 4pSCTU9WRUTilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAg ICAg4pSCVE8gNCDilIJUTyAzIOKUgg0KICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA 4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS0 4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSYDQogICAgICAgICAgICAgICAgICDi lIIgICAgIOKUgiAgICAg4payICAgICDilrIgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAg ICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgIA0KICAgICAgICAg ICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA 4pSA4pSA4pSYICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICDilJTilIDi lIDilIDilIDilIDilJggICAgICAgICAgICAgICAgICAgICANCmBgYA0KDQojIyMgU3RlcCBGb3Vy LCBGdWxsIEdDDQoNCkFmdGVyIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIHVwZGF0ZWQsIGEgZnVsbCBH QyBpcyBwZXJmb3JtZWQuICBUaGlzIGNvbnZlcnRzIHRoZQ0KYFRfTU9WRURgIHNsb3RzIGJhY2sg aW4gdG8gYFRfRU1QVFlgIHNsb3RzLiAgVGhlIEdDIGF1dG9tYXRpY2FsbHkgdGFrZXMgY2FyZSBv Zg0KdGhpcyBiZWNhdXNlIG5vIG9iamVjdCBzaG91bGQgcmVmZXJlbmNlIGEgYFRfTU9WRURgIHNs b3QuDQoNCiMjIE5vbiBNb3ZpbmcgT2JqZWN0cw0KDQpOb24gbW92aW5nIG9iamVjdHMgYXJlOg0K DQoxLiBPYmplY3RzIG9uIHRoZSBzdGFjaw0KMi4gT2JqZWN0cyBtYXJrZWQgd2l0aCBgcmJfZ2Nf bWFya2ANCjMuIEhhc2gga2V5IG9iamVjdHMNCg0KIyMjIE9iamVjdHMgb24gdGhlIHN0YWNrDQoN ClRoZSBzdGFjayBzaG91bGQgbm90IGJlIG11dGF0ZWQsIHNvIHRoZXNlIGFyZSBwaW5uZWQuDQoN CiMjIyBPYmplY3RzIG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYA0KDQpBcyBtZW50aW9uZWQgZWFy bGllciwgYW55IG9iamVjdCBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2AgbWF5IG5vdCBtb3ZlIGJl Y2F1c2UgYQ0KQyBleHRlbnNpb24gbWF5IGhvbGQgYSByZWZlcmVuY2UuICBIZXJlIGlzIGFuIGV4 Y2VycHQgZnJvbSBZYWpsLCBhIEpTT04gcGFyc2VyLg0KVGhpcyBpcyB0aGUgbWFyayBmdW5jdGlv biBpdCB1c2VzOg0KDQpgYGBjDQpzdGF0aWMgdm9pZCB5YWpsX2VuY29kZXJfd3JhcHBlcl9tYXJr KHZvaWQgKiB3cmFwcGVyKSB7DQogICAgeWFqbF9lbmNvZGVyX3dyYXBwZXIgKiB3ID0gd3JhcHBl cjsNCiAgICBpZiAodykgew0KICAgICAgICByYl9nY19tYXJrKHctPm9uX3Byb2dyZXNzX2NhbGxi YWNrKTsNCiAgICAgICAgcmJfZ2NfbWFyayh3LT50ZXJtaW5hdG9yKTsNCiAgICB9DQp9DQoNCg0K b2JqID0gRGF0YV9NYWtlX1N0cnVjdChrbGFzcywgeWFqbF9lbmNvZGVyX3dyYXBwZXIsIHlhamxf ZW5jb2Rlcl93cmFwcGVyX21hcmssIHlhamxfZW5jb2Rlcl93cmFwcGVyX2ZyZWUsIHdyYXBwZXIp Ow0KYGBgDQoNClRoZSB2YWx1ZXMgaW4gdGhpcyBtYXJrIGZ1bmN0aW9uIGB3LT5vbl9wcm9ncmVz c19jYWxsYmFja2AgYW5kIGB3LT50ZXJtaW5hdG9yYA0Kd2lsbCBub3QgbW92ZSBzaW5jZSB0aGV5 IGFyZSBwaW5uZWQgYnkgYHJiX2djX21hcmtgLg0KDQojIyMgSGFzaCBrZXkgb2JqZWN0cw0KDQpD ZXJ0YWluIGhhc2gga2V5cyB3aWxsIG5vdCBtb3ZlLiAgTW9zdCBvYmplY3RzIHVzZSB0aGVpciBh ZGRyZXNzIGFzIHRoZSBoYXNoDQp2YWx1ZS4gIElmIHRoZSBvYmplY3QgbW92ZXMsIHRoZSBoYXNo IHZhbHVlIGNvdWxkIGNoYW5nZSwgc28gaGFzaCBrZXlzIGFyZSBub3QNCmFsbG93ZWQgdG8gbW92 ZS4NCg0KVGhlcmUgaXMgYW4gZXhjZXB0aW9uIGZvciBzdHJpbmcgb2JqZWN0cy4gIFN0cmluZyBv YmplY3RzIGNhbGN1bGF0ZSB0aGVpciBoYXNoDQpiYXNlZCBvbiB0aGUgYnl0ZXMgaW4gdGhlIHN0 cmluZy4gIFNpbmNlIHRoZSBieXRlcyBpbiB0aGUgc3RyaW5nIGRvIG5vdCBjaGFuZ2UNCmFmdGVy IG1vdmUsIHRoZXkgYXJlIGFsbG93ZWQgdG8gbW92ZS4gIE1vc3QgaGFzaCBrZXlzIGluIGxhcmdl IHByb2dyYW1zIGFyZQ0Kc3RyaW5ncywgc28gb25seSBhbGxvd2luZyBzdHJpbmcga2V5cyB0byBt b3ZlIHNlZW1lZCBlbm91Z2guDQoNCiMjIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnMNCg0KIyMjIE9i amVjdCBJRA0KDQpgT2JqZWN0I29iamVjdF9pZGAgYmFzZXMgaXRzIHZhbHVlIGZyb20gdGhlIGFk ZHJlc3Mgb2YgdGhlIG9iamVjdC4gIEZvciBleGFtcGxlOg0KDQpgYGBydWJ5DQp4ID0gT2JqZWN0 Lm5ldw0KaWQgPSB4Lm9iamVjdF9pZA0KR0MuY29tcGFjdCAgICAgICAgIyBgeGAgbW92ZXMNCmlk ID09IHgub2JqZWN0X2lkICMgYGlkYCBzaG91bGQgYmUgc2FtZSBhcyBgeC5vYmplY3RfaWRgDQpg YGANCg0KV2UgZXhwZWN0IHRoZSBvYmplY3QgaWQgdG8gcmVtYWluIHRoZSBzYW1lIHJlZ2FyZGxl c3Mgb2YgY29tcGFjdGlvbi4gIFRvIGRlYWwNCndpdGggYG9iamVjdF9pZGAsIHR3byBoYXNoZXMg d2VyZSBpbnRyb2R1Y2VkLiAgT25lIGhhc2ggY29udGFpbnMgYSBtYXAgb2YgdGhlDQpvYmplY3Qg dG8gdGhlICpzZWVuKiBvYmplY3QgaWQuICBUaGUgc2Vjb25kIG1hcCBjb250YWlucyBhbGwgc2Vl biBvYmplY3QgaWRzLg0KVGhlIG1hcHMgYXJlIHVwZGF0ZWQgYW55IHRpbWUgYG9iamVjdF9pZGAg aXMgY2FsbGVkLCBhbiBvYmplY3QgbW92ZXMsIG9yIGFuDQpvYmplY3QgaXMgZnJlZWQuDQoNCm9i amVjdF9pZCBpbXBsZW1lbnRhdGlvbiBpbiBSdWJ5Og0KDQpgYGBydWJ5DQokb2JqX3RvX2lkID0g e30NCiRpZF90b19vYmogPSB7fQ0KDQpjbGFzcyBPYmplY3QNCiAgZGVmIG9iamVjdF9pZA0KICAg IGlmICRvYmpfdG9faWQua2V5PyhhZGRyZXNzKQ0KICAgICAgIyBTZWNvbmQgY2FsbCB0byBvYmpl Y3RfaWQgb24gdGhpcyBvYmplY3QNCiAgICAgIHJldHVybiAkb2JqX3RvX2lkW2FkZHJlc3NdDQog ICAgZWxzZQ0KICAgICAgIyBGaXJzdCBjYWxsIHRvIG9iamVjdF9pZCBvbiB0aGlzIG9iamVjdA0K DQogICAgICBhZGRyID0gc2VsZi5hZGRyZXNzDQoNCiAgICAgIGxvb3AgZG8NCiAgICAgICAgaWYg JHNlZW5faWRzLmtleT8oYWRkcikNCiAgICAgICAgICAjIFJlc29sdmUgY29uZmxpY3QNCiAgICAg ICAgICBhZGRyICs9IHNpemVvZihSVkFMVUUpDQogICAgICAgIGVsc2UNCiAgICAgICAgICAkb2Jq X3RvX2lkW3NlbGYuYWRkcmVzc10gPSBhZGRyDQogICAgICAgICAgJGlkX3RvX29ialthZGRyXSAg ICAgICAgID0gc2VsZg0KICAgICAgICAgIHJldHVybiBhZGRyDQogICAgICAgIGVuZA0KICAgICAg ZW5kDQogICAgZW5kDQogIGVuZA0KDQogIHByaXZhdGUNCg0KICBkZWYgYWRkcmVzcw0KICAgICMg cmV0dXJucyBhZGRyZXNzIGluIG1lbW9yeSBvZiBvYmplY3QNCiAgZW5kDQplbmQNCmBgYA0KDQpE dXJpbmcgY29tcGFjdGlvbjoNCg0KYGBgcnVieQ0KZGVmIGNvbXBhY3QNCiAgaGVhcCA9IFsgLi4u IF0gIyBtYW55IHNsb3RzDQoNCiAgd2hpbGUgbGVmdCA8IHJpZ2h0DQogICAgZGVzdF9zbG90ID0g aGVhcFtsZWZ0XQ0KICAgIHNvdXJjZV9zbG90ID0gaGVhcFtyaWdodF0NCg0KICAgIGlmIG1vdmlu Zz8oc291cmNlX3Nsb3QpDQogICAgICBpZiAkb2JqX3RvX2lkLmtleT8oc291cmNlX3Nsb3QuYWRk cmVzcykNCiAgICAgICAgaWQgPSAkb2JqX3RvX2lkLmRlbGV0ZShzb3VyY2Vfc2xvdC5hZGRyZXNz KQ0KICAgICAgICAkb2JqX3RvX2lkW2Rlc3Rfc2xvdC5hZGRyZXNzXSA9IGlkDQogICAgICAgICRp ZF90b19vYmpbaWRdICAgICAgICAgICAgICAgID0gZGVzdF9zbG90LmFkZHJlc3MNCiAgICAgIGVu ZA0KDQogICAgICAjIGV0Yw0KICAgIGVuZA0KICBlbmQNCmVuZA0KYGBgDQoNCkR1cmluZyBGcmVl Og0KDQpgYGBydWJ5DQpkZWYgZnJlZShvYmopDQogIGlmICRvYmpfdG9faWQua2V5PyhvYmouYWRk cmVzcykNCiAgICAkc2Vlbl9pZHMuZGVsZXRlKCRvYmpfdG9faWQuZGVsZXRlKG9iai5hZGRyZXNz KSkNCiAgZW5kDQplbmQNCmBgYA0KDQojIyMgT2JqZWN0U3BhY2UuX2lkMnJlZg0KDQpXaGVuIGdl bmVyYXRpbmcgYW4gb2JqZWN0IGlkLCBpbiB0aGUgY2FzZSBvZiBhIGNvbGxpc2lvbiwgdGhlIGFk ZHJlc3MgaXMNCmluY3JlbWVudGVkIGJ5IDQwLiAgVGhpcyBlbmFibGVzIGBfaWQycmVmYCB0byBk ZXRlcm1pbmUgdGhlcmUgaXMgYSBWQUxVRSBwb2ludGVyDQphbmQgcm91bmQgdHJpcCB0aGUgb2Jq ZWN0IGNvcnJlY3RseS4NCg0KIyMgQ29tcGFjdGlvbiBTdXBwb3J0IGZvciBDIGV4dGVuc2lvbnMN Cg0KQW55IG9iamVjdCBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2Agd2lsbCBiZSAicGlubmVkIiBh bmQgY2Fubm90IG1vdmUuICBDDQpleHRlbnNpb25zIG1hcmsgb2JqZWN0cyB2aWEgYHJiX2djX21h cmtgLCBzbyB0aGlzIGVuc3VyZXMgdGhhdCBwb2ludGVycyBpbiBDDQpzdGF5IHZhbGlkLg0KDQpI b3dldmVyLCBzb21lIEMgZXh0ZW5zaW9ucyBtYXkgd2FudCB0byBzdXBwb3J0IHJlZmVyZW5jZSBt b3ZlbWVudC4NCg0KIyMjIFJlZmVyZW5jZSBNb3ZlbWVudCBpbiBDIGV4dGVuc2lvbnMNCg0KSW4g b3JkZXIgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlmIGEgQyBleHRlbnNp b24gaG9sZHMgYSByZWZlcmVuY2UNCnRvIGEgVkFMVUUsIHRoZSBWQUxVRSBzaG91bGQgbm90IG1v dmUuICBHb2luZyBmb3J3YXJkLCBDIGV4dGVuc2lvbnMgY2FuIHN1cHBvcnQNCm1vdmluZyBWQUxV RXMuICBUbyBzdXBwb3J0IG1vdmluZyBWQUxVRXMsIGEgQyBleHRlbnNpb24gc2hvdWxkIGNoYW5n ZQ0KYHJiX2djX21hcmtgIHRvIGByYl9nY19tYXJrX25vX3BpbmAsIHRoZW4gaW1wbGVtZW50IGEg bmV3IGNhbGxiYWNrIHRoYXQgaXMNCmNhbGxlZCBkdXJpbmcgY29tcGFjdGlvbiB0aGF0IGdpdmVz IHRoZSBleHRlbnNpb24gYW4gb3Bwb3J0dW5pdHkgdG8gdXBkYXRlIGl0cw0Kb3duIHJlZmVyZW5j ZXMuICBBIG5ldyBmdW5jdGlvbiBgcmJfZ2NfbmV3X2xvY2F0aW9uYCB3aWxsIHJldHVybiB0aGUg bmV3DQpsb2NhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIFZBTFVFLg0KDQpIZXJlIGlzIGFuIGV4YW1w bGUgZm9yIGF1dG9sb2FkIGZyb20gYHZhcmlhYmxlLmNgLiAgQSBuZXcgY29tcGFjdGlvbiBjYWxs YmFjayBpcw0KcmVnaXN0ZXJlZCwgYGF1dG9sb2FkX2lfY29tcGFjdGA6DQoNCmBgYGMNCnN0YXRp YyBjb25zdCByYl9kYXRhX3R5cGVfdCBhdXRvbG9hZF9kYXRhX2lfdHlwZSA9IHsNCiAgICAiYXV0 b2xvYWRfaSIsDQogICAge2F1dG9sb2FkX2lfbWFyaywgYXV0b2xvYWRfaV9mcmVlLCBhdXRvbG9h ZF9pX21lbXNpemUsIGF1dG9sb2FkX2lfY29tcGFjdH0sDQogICAgMCwgMCwgUlVCWV9UWVBFRF9G UkVFX0lNTUVESUFURUxZDQp9Ow0KYGBgDQoNClRoZSBtYXJrIGZ1bmN0aW9uIGNoYW5nZXMgdG8g Km1hcmsqIHJlZmVyZW5jZXMsIGJ1dCAqbm90KiBwaW4gdGhlbToNCg0KYGBgYw0Kc3RhdGljIHZv aWQNCmF1dG9sb2FkX2lfbWFyayh2b2lkICpwdHIpDQp7DQogICAgc3RydWN0IGF1dG9sb2FkX2Rh dGFfaSAqcCA9IHB0cjsNCg0KICAgIHJiX2djX21hcmtfbm9fcGluKHAtPmZlYXR1cmUpOw0KDQog ICAgLyogYWxsb3cgR0MgdG8gZnJlZSB1cyBpZiBubyBtb2R1bGVzIHJlZmVyIHRvIHRoaXMgdmlh IGF1dG9sb2FkX2NvbnN0LmFkICovDQogICAgaWYgKGxpc3RfZW1wdHkoJnAtPmNvbnN0YW50cykp IHsNCiAgICAgICAgcmJfaGFzaF9kZWxldGUoYXV0b2xvYWRfZmVhdHVyZW1hcCwgcC0+ZmVhdHVy ZSk7DQogICAgfQ0KfQ0KYGBgDQoNCkFmdGVyIHRoZSBoZWFwIGlzIGNvbXBhY3RlZCwgYW55IEMg ZXh0ZW5zaW9ucyB0aGF0IHJlZ2lzdGVyZWQgYSAiY29tcGFjdGlvbiINCmNhbGxiYWNrIHdpbGwg YmUgY2FsbGVkIGFuZCBoYXZlIGEgY2hhbmNlIHRvIHVwZGF0ZSBpbnRlcm5hbCByZWZlcmVuY2Vz LiAgVGhlDQphdXRvbG9hZCBjb21wYWN0aW9uIGZ1bmN0aW9uIGlzIGxpa2UgdGhpczoNCg0KYGBg Yw0Kc3RhdGljIHZvaWQNCmF1dG9sb2FkX2lfY29tcGFjdCh2b2lkICpwdHIpDQp7DQogICAgc3Ry dWN0IGF1dG9sb2FkX2RhdGFfaSAqcCA9IHB0cjsNCiAgICBwLT5mZWF0dXJlID0gcmJfZ2NfbmV3 X2xvY2F0aW9uKHAtPmZlYXR1cmUpOw0KYGBgDQoNClRoZSBjb21wYWN0aW9uIGNhbGxiYWNrIGFz a3MgZm9yIHRoZSBuZXcgbG9jYXRpb24gZm9yIHRoZSBgcC0+ZmVhdHVyZWANCnJlZmVyZW5jZS4g IGByYl9nY19uZXdfbG9jYXRpb25gIHdpbGwgZWl0aGVyIHJldHVybiB0aGUgY3VycmVudCB2YWx1 ZSBvZg0KYHAtPmZlYXR1cmVgIChpbiB0aGUgY2FzZSB0aGUgVkFMVUUgZGlkIG5vdCBtb3ZlKSwg b3IgdGhlIG5ldyBsb2NhdGlvbi4NCg0KIyMgUmVmZXJlbmNlIFZlcmlmaWNhdGlvbiBhbmQgVGVz dGluZw0KDQpBZnRlciBjb21wYWN0aW9uLCBvYmplY3RzIHRoYXQgaGF2ZSBtb3ZlZCBhcmUgY2hh bmdlZCB0byBgVF9NT1ZFRGAgb2JqZWN0cyB3aXRoDQpmb3J3YXJkaW5nIGFkZHJlc3Nlcy4gIE9u Y2UgYWxsIHJlZmVyZW5jZXMgYXJlIHVwZGF0ZWQsIG5vIG9iamVjdCBzaG91bGQgcG9pbnQNCnRv IGEgYFRfTU9WRURgIHNsb3QuICBXZSBjYW4gc2F5IHRoYXQgYmVmb3JlIGFuZCBhZnRlciBjb21w YWN0aW9uLCBubyBvYmplY3QNCnNob3VsZCBldmVyIHBvaW50IGF0IGEgYFRfTU9WRURgIHNsb3Qu ICBTbyBpZiBhIGBUX01PVkVEYCBvYmplY3QgaXMgZXZlciBwdXNoZWQNCm9uIHRvIHRoZSBtYXJr IHF1ZXVlLCB0aGVyZSBpcyBhIGJ1Zy4gIGBwdXNoX21hcmtfc3RhY2tgIGhhcyBhIGNoZWNrIGZv cg0KYFRfTU9WRURgIG9iamVjdHMsIGFuZCB3aWxsIGNyYXNoIGlmIGEgYFRfTU9WRURgIG9iamVj dCBpcyBldmVyIHB1c2hlZCBvbiB0byB0aGUNCm1hcmsgc3RhY2suDQoNCkEgbWV0aG9kIGBHQy52 ZXJpZnlfY29tcGFjdGlvbl9yZWZlcmVuY2VzYCB3YXMgYWRkZWQgdGhhdCBkb3VibGVzIHRoZSBh dmFpbGFibGUNCmhlYXAgc2l6ZSwgdGhlbiBjb21wYWN0cyB0aGUgaGVhcC4gIFNpbmNlIHRoZSBo ZWFwIGhhcyBkb3VibGVkIGluIHNpemUsIGFueQ0Kb2JqZWN0IHRoYXQgY2FuIG1vdmUgd2lsbCBt b3ZlLiAgQW55IHJlZmVyZW5jZXMgdG8gYFRfTU9WRURgIG9iamVjdHMgd2lsbCBiZQ0KY2F1Z2h0 IGR1cmluZyB0aGUgR0MgcGhhc2UgYWZ0ZXIgY29tcGFjdGlvbi4NCg0KIyMgS25vd24gSXNzdWUN Cg0KU2FmZXR5IGZvciBDIGV4dGVuc2lvbnMgZGVwZW5kcyBlbnRpcmVseSBvbiBDIGV4dGVuc2lv bnMgbWFya2luZyB0aGVpcg0KcmVmZXJlbmNlcy4gIElmIGEgQyBleHRlbnNpb24gZG9lcyBub3Qg bWFyayBhIHJlZmVyZW5jZSwgdGhlIGNvbXBhY3RvciBhc3N1bWVzDQp0aGF0IHRoZSBvYmplY3Qg aXMgc2FmZSB0byBtb3ZlLiAgVGhpcyBjYW4gY2F1c2UgYW4gZXJyb3IgaW4gdGhlIGZvbGxvd2lu Zw0Kc2l0dWF0aW9uLCB3aGVuIHRoZXJlIGlzIGFuIG9iamVjdCBncmFwaCBsaWtlIHRoaXM6DQoN Cg0KYGBgDQog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSQICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUkCANCiDilIIgIFJ1YnkgT2JqZWN0ICDilIIgICAgICAg4pSCICBSdWJ5IE9iamVjdCAg4pSC IA0KIOKUgiAgSW1wbGVtZW50ZWQgIOKUgiAgICAgICDilIIgIEltcGxlbWVudGVkICDilIIgDQog 4pSCICAgIGluIFJ1YnkgICAg4pSCICAgICAgIOKUgiAgICAgaW4gQyAgICAgIOKUgiANCiDilIIg ICAgICAgICAgICAgICDilIIgICAgICAg4pSCICAgICAgICAgICAgICAg4pSCIA0KIOKUlOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICDilJTilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggDQogICAgICAgICDi lIIgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgIA0KICAgICAgICAg4pSCICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICDilIIgICAgICAgICAgICAgICAg ICAgICAgIOKUgiAgIE5PVCAgIA0KIE1hcmtlZCAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg ICBNYXJrZWQgDQogICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAg IA0KICAgICAgICAg4pSCICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSQICAgICAgICAgICAgIA0KICAgICAgICAg4pSCICAg4pSCICAgICAgICAgICAg ICAg4pSCICAg4pSCICAgICAgICAgDQogICAgICAgICDilIIgICDilIIgIFJ1YnkgT2JqZWN0ICDi lIIgICAgICAgICAgICAgDQogICAgICAgICDilJTilIDilIDilrbilIIgICAgICAgICAgICAgICDi lILil4DilIAg4pSYICAgICAgICAgDQogICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAg4pSC ICAgICAgICAgICAgIA0KICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAgICANCmBgYA0KDQpJZiB0aGUgQyBleHRl bnNpb24gY29udGFpbnMgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0LCBidXQgZXhwZWN0cyB0aGUg b2JqZWN0DQpub3QgdG8gbW92ZSBiZWNhdXNlIGEgUnVieSBvYmplY3QgY29udGFpbnMgYSByZWZl cmVuY2UsIHRoZW4gdGhlIHRhcmdldCBSdWJ5DQpvYmplY3QgKm1heSogbW92ZSBhbmQgdGhlIHJl ZmVyZW5jZSBpbiB0aGUgQyBleHRlbnNpb24gd2lsbCBiZSB3cm9uZy4gIEkgbGlrZSB0bw0KY2Fs bCB0aGVzZSAiZ2hvc3QgcmVmZXJlbmNlcyIgYmVjYXVzZSB0aGUgR0MgY2Fubm90IHNlZSB0aGVt IGJ1dCB0aGV5IHdpbGwgY29tZQ0KYmFjayB0byBoYXVudCB5b3UuDQoNClRoZSBzb2x1dGlvbiB0 byB0aGlzIGlzIGVpdGhlcjoNCg0KMS4gQ2hhbmdlIHRoZSBDIGV4dGVuc2lvbiB0byBgcmJfZ2Nf bWFya2AgdGhlIG9iamVjdA0KMi4gUmVtb3ZlIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgQyBleHRl bnNpb24NCg0KT25lIGV4YW1wbGUgb2YgdGhpcyBzaXR1YXRpb24gd2FzIGZpeGVkIGhlcmU6DQoN CiAgaHR0cHM6Ly9naXRodWIuY29tL21zZ3BhY2svbXNncGFjay1ydWJ5L2lzc3Vlcy8xMzMNCg0K IyMgU3VtbWFyeQ0KDQpCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIEMgZXh0ZW5zaW9ucyBp cyBtYWludGFpbmVkIGJ5ICJwaW5uaW5nIiBhbnkNCnJlZmVyZW5jZXMgbWFya2VkIHdpdGggYHJi X2djX21hcmtgLiAgQSBmdWxsIG1hcmsgKm11c3QqIGJlIGRvbmUgYmVmb3JlDQpjb21wYWN0aW5n IHRvIGRpc2NvdmVyIGFsbCBwaW5uZWQgcmVmZXJlbmNlcy4NCg0KQSBuZXcgY2FsbGJhY2sgZm9y IEMgZXh0ZW5zaW9ucyBpcyBpbnRyb2R1Y2VkIHNvIHRoYXQgQyBleHRlbnNpb25zIGNhbiBzdXBw b3J0DQpjb21wYWN0aW9uLiAgQyBleHRlbnNpb25zIHRoYXQgd2lzaCB0byBzdXBwb3J0IGNvbXBh Y3Rpb24gbXVzdCB1c2UgdGhlIG5ldw0KY2FsbGJhY2ssIGByYl9nY19tYXJrX25vX3BpbmAsIGFu ZCBgcmJfZ2NfbmV3X2xvY2F0aW9uYC4NCg0KQyBleHRlbnNpb25zIHRoYXQgbWFpbnRhaW4gcG9p bnRlcnMgYnV0IGRvIG5vdCBtYXJrIHRob3NlIHBvaW50ZXJzIG1heSBTRUdWLiAgV2UNCmNhbiB1 c2UgYEdDLnZlcmlmeV9jb21wYWN0aW9uX3JlZmVyZW5jZXNgIHRvIGRpc2NvdmVyIHRoZXNlIGlz c3Vlcy4NCg0KW14xXTogU2VlIGFsc28gIlRoZSBHYXJiYWdlIENvbGxlY3Rpb24gSGFuZGJvb2si IHBhZ2UgMzINCg0KDQotLS1GaWxlcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpi ZWZvcmVfY29tcGFjdC0wLnBuZyAoMTExIEtCKQ0KYWZ0ZXJfY29tcGFjdC0wLnBuZyAoODAuNiBL QikNCmJlZm9yZV9jb21wYWN0LTEucG5nICg4MS4yIEtCKQ0KYWZ0ZXJfY29tcGFjdC0xLnBuZyAo NzkuNCBLQikNCjAwMDEtR0MtQ29tcGFjdGlvbi1mb3ItTVJJLnBhdGNoICg3Ny40IEtCKQ0KcnVi eV8yMDE5LTAzLTIyLTE3MTgzOV9QaWthY2h1RVhFcy1NQlAtMjAxOC5jcmFzaCAoNzEuNCBLQikN CnJ1YnlfMjAxOS0wMy0yMi0xNzE4MzktMV9QaWthY2h1RVhFcy1NQlAtMjAxOC5jcmFzaCAoNzEu NCBLQikNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0K