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=-2.5 required=3.0 tests=AWL,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 C1CCB20248 for ; Mon, 15 Apr 2019 04:28:01 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 75501121A16; Mon, 15 Apr 2019 13:27:56 +0900 (JST) Received: from o1678916x28.outbound-mail.sendgrid.net (o1678916x28.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 6A4D3121A16 for ; Mon, 15 Apr 2019 13:27:53 +0900 (JST) Received: by filter0127p3las1.sendgrid.net with SMTP id filter0127p3las1-5603-5CB40849-24 2019-04-15 04:27:53.783352278 +0000 UTC m=+380177.936068926 Received: from herokuapp.com (unknown [54.227.179.236]) by ismtpd0031p1mdw1.sendgrid.net (SG) with ESMTP id fU6IEnJIS4KznWD6L370qw for ; Mon, 15 Apr 2019 04:27:53.532 +0000 (UTC) Date: Mon, 15 Apr 2019 04:27:53 +0000 (UTC) From: the.codefolio.guy@gmail.com Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 67769 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 15626 X-Redmine-Issue-Author: tenderlovemaking X-Redmine-Sender: noahgibbs 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?o6uoTwtpmjv23mMhdNNpXULj2Iv4FzF2HjbNth30aFuifyle+6riOxrZso6Aec?= =?us-ascii?Q?3EZHYEeNx=2F31f7O1+NKBbPiMsn7=2F2IveissVbXo?= =?us-ascii?Q?TBAKrp84nNbG4geQbhcgMI0u0f7xbvRe5yP7KVP?= =?us-ascii?Q?Uscwk3EAALnlNvqIosOn62E+v8Ze+huoR1wFtLL?= =?us-ascii?Q?Cwfd2J0LH7EkCraHGBzAtZstByt5FjRFPqQ=3D=3D?= To: ruby-core@ruby-lang.org X-ML-Name: ruby-core X-Mail-Count: 92286 Subject: [ruby-core:92286] [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" SXNzdWUgIzE1NjI2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbm9haGdpYmJzIChOb2FoIEdpYmJzKS4N Cg0KDQpUZXN0ZWQgYWdhaW4gdy8gbWVyZ2VkIHZlcnNpb24gb2YgdGhpcyBwYXRjaC4gTXkgImJl Zm9yZSIgYW5kICJhZnRlciIgdGltaW5ncyBhcmUgd2l0aGluIHRoZSBtYXJnaW4gb2YgbWVhc3Vy ZW1lbnQgZXJyb3IuIEkgbm8gbG9uZ2VyIHNlZSBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24uIFRo YW5rcyENCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRmVhdHVy ZSAjMTU2MjY6IE1hbnVhbCBDb21wYWN0aW9uIGZvciBNUkkncyBHQyAoYEdDLmNvbXBhY3RgKQ0K aHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE1NjI2I2NoYW5nZS03NzYyMQ0KDQoq IEF1dGhvcjogdGVuZGVybG92ZW1ha2luZyAoQWFyb24gUGF0dGVyc29uKQ0KKiBTdGF0dXM6IENs b3NlZA0KKiBQcmlvcml0eTogTm9ybWFsDQoqIEFzc2lnbmVlOiANCiogVGFyZ2V0IHZlcnNpb246 IA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KSGksDQoNCkkndmUg YXR0YWNoZWQgYSBwYXRjaCB0aGF0IGltcGxlbWVudHMgYSBjb21wYWN0b3IgZm9yIE1SSS4gIEkn bGwgdHJ5IHRvIGRlc2NyaWJlIHRoZSBwYXRjaCBpbiBkZXRhaWwgYmVsb3csIGJ1dCB0aGUgYmln Z2VzdCB1c2VyIGZhY2luZyBjaGFuZ2VzIGFyZToNCg0KMS4gQSBuZXcgbWV0aG9kIGBHQy5jb21w YWN0YCB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBSdWJ5DQoyLiBDIGV4dGVuc2lvbnMgaGF2ZSBh IG5ldyAiYWZ0ZXIgY29tcGFjdGlvbiIgY2FsbGJhY2sgdGhleSBjYW4gcmVnaXN0ZXINCjMuIElu dHJvZHVjdGlvbiBvZiBuZXcgbWFya2luZyBmdW5jdGlvbnMgdGhhdCBhbGxvdyBvYmplY3RzIHRv IGJlIG1hcmtlZCwgYnV0IG5vdCAicGlubmVkIiB0byB0aGUgc2FtZSBsb2NhdGlvbg0KNC4gQSBm dW5jdGlvbiB0byBnZXQgdGhlIG5ldyBsb2NhdGlvbiBvZiBhbiBvYmplY3QgKHRvIGJlIHVzZWQg ZnJvbSB0aGUgImFmdGVyIGNvbXBhY3Rpb24iIGNhbGxiYWNrKQ0KDQojIENvbXBhY3RvciBmb3Ig UkdlbkdDDQoNClRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBjb21wYWN0b3IgaW1wbGVtZW50 YXRpb24gZm9yIFJHZW5HQy4gIFRoaXMgcGF0Y2gNCmFkZHMgYSBuZXcgbWV0aG9kIHRvIFJ1Ynks IGBHQy5jb21wYWN0YCB3aGljaCB3aWxsIGNvbXBhY3QgdGhlIG9iamVjdHMgaW4gdGhlDQpoZWFw LiAgV2hhdCBmb2xsb3dzIGlzIGEgZGVzY3JpcHRpb24gb2YgdGhlIGFsZ29yaXRobSwgYWxvbmcg d2l0aCBhY2hpZXZlbWVudHMNCmFuZCB0ZWNobmljYWwgY2hhbGxlbmdlcy4NCg0KIyMgU3RlcHMg Zm9yIENvbXBhY3Rpb24NCg0KVGhlc2UgYXJlIHRoZSBoaWdoIGxldmVsIHN0ZXBzIHRha2VuIGlu IGBHQy5jb21wYWN0YCBhcmUgYXMgZm9sbG93czoNCg0KMS4gRnVsbCBHQw0KMi4gTW92ZSBvYmpl Y3RzDQozLiBVcGRhdGUgcmVmZXJlbmNlcw0KNC4gRnVsbCBHQw0KDQojIyMgU3RlcCBPbmUsIEZ1 bGwgR0MNCg0KTm90IGFsbCBvYmplY3RzIGluIFJ1YnkncyBoZWFwIGNhbiBtb3ZlLiAgSW4gcGFy dGljdWxhciwgQyBleHRlbnNpb25zIG1heSBob2xkDQpyZWZlcmVuY2VzIHRvIFZBTFVFIHBvaW50 ZXJzLiAgSWYgdGhlIFZBTFVFIHBvaW50ZXJzIG1vdmUsIHRoZSBDIGV4dGVuc2lvbiBtYXkNCm5v dCBiZSBhYmxlIHRvIGZpbmQgdGhlbSBhbmQgd2lsbCBnZXQgYSBTRUdWIG9yIHBvc3NpYmx5IHdy b25nIGRhdGEuDQoNClRvIHByZXZlbnQgdGhpcywgYSBuZXcgInBpbm5pbmciIHRhYmxlIHdhcyBp bnRyb2R1Y2VkLiAgQW55IG9iamVjdCBtYXJrZWQgdmlhDQpgcmJfZ2NfbWFya2AgaXMgInBpbm5l ZCIgYW5kIGlzIG5vdCBhbGxvd2VkIHRvIG1vdmUuICBDIGV4dGVuc2lvbnMgbXVzdCBtYXJrDQp0 aGVpciByZWZlcmVuY2VzIGluIG9yZGVyIHRvIGtlZXAgdGhlbSBhbGl2ZS4gIFNpbmNlIEMgZXh0 ZW5zaW9ucyB1c2UNCmByYl9nY19tYXJrYCB0byBtYXJrIGEgcmVmZXJlbmNlLCB3ZSBrbm93IG5v dCB0byBtb3ZlIHRoYXQgcmVmZXJlbmNlLiAgSW4gb3JkZXINCnRvIGVuc3VyZSBhbGwgcmVmZXJl bmNlcyBnZXQgbWFya2VkLCB3ZSBwZXJmb3JtIGEgZnVsbCBHQy4NCg0KTmV3IGZ1bmN0aW9ucywg YHJiX2djX21hcmtfbm9fcGluYCwgZXRjIHdlcmUgaW50cm9kdWNlZCBhbmQgdXNlZCBpbnRlcm5h bGx5Lg0KVGhlc2UgZnVuY3Rpb25zIGtlZXBzIHRoZSBvYmplY3QgYWxpdmUgYnV0IHdpdGhvdXQg cGlubmluZyB0aGUgcmVmZXJlbmNlLg0KDQpTdW1tYXJ5OiBQZXJmb3JtIGEgZnVsbCBHQyBzbyB0 aGF0IG9iamVjdHMgbWFya2VkIHdpdGggYHJiX2djX21hcmtgIGRvIG5vdCBtb3ZlLg0KDQojIyMg U3RlcCBUd28sIE1vdmUgT2JqZWN0cw0KDQpUaGlzIGNvbXBhY3RvciB1c2VzIGEgInR3byBmaW5n ZXIiIGFsZ29yaXRobSB3aGljaCB3YXMgaW50cm9kdWNlZCBpbiAiVGhlDQpQcm9ncmFtbWluZyBM YW5ndWFnZSBMSVNQOiBJdHMgT3BlcmF0aW9uIGFuZCBBcHBsaWNhdGlvbnMiIChwYWdlIDIyOClb XjFdLiAgVHdvDQpwb2ludGVycyBwb2ludCBhdCBlYWNoIHNpZGUgb2YgdGhlIGhlYXAsIGlmIG9u ZSBzbG90IGlzIGVtcHR5LCBhbmQgdGhlIG90aGVyIGlzDQptb3ZlYWJsZSwgaXQgc3dhcHMgcGxh Y2VzIGFuZCBsZWF2ZXMgYSBgVF9NT1ZFRGAgb2JqZWN0IHRoYXQgY29udGFpbnMgYQ0KZm9yd2Fy ZGluZyBhZGRyZXNzLg0KDQpJbiBSdWJ5LCB0aGUgYWxnb3JpdGhtIGxvb2tzIHNvbWV0aGluZyBs aWtlIHRoaXM6DQoNCmBgYHJ1YnkNCmRlZiBjb21wYWN0DQogIGhlYXAgPSBbIC4uLiBdICMgbWFu eSBzbG90cw0KICBsZWZ0ICA9IDANCiAgcmlnaHQgPSBoZWFwLmxlbmd0aCAtIDENCg0KICB3aGls ZSBsZWZ0IDwgcmlnaHQNCiAgICBsZWZ0X3Nsb3QgPSBoZWFwW2xlZnRdDQogICAgcmlnaHRfc2xv dCA9IGhlYXBbcmlnaHRdDQoNCiAgICBpZiBpc19lbXB0eT8obGVmdF9zbG90KSAmJiAhaXNfZW1w dHk/KHJpZ2h0X3Nsb3QpICYmIGNhbl9tb3ZlPyhyaWdodF9zbG90KQ0KICAgICAgc3dhcChsZWZ0 LCByaWdodCkNCiAgICAgIGhlYXBbcmlnaHRdID0gVF9NT1ZFRC5uZXcobGVmdCkgIyBsZWF2ZSBm b3J3YXJkaW5nIGFkZHJlc3MNCiAgICBlbmQNCg0KICAgIHdoaWxlICFpc19lbXB0eT8oaGVhcFts ZWZ0XSkNCiAgICAgIGxlZnQgKz0gMQ0KICAgIGVuZA0KDQogICAgd2hpbGUgaXNfZW1wdHk/KGhl YXBbcmlnaHRdKSB8fCAhY2FuX21vdmU/KGhlYXBbcmlnaHRdKQ0KICAgICAgcmlnaHQgLT0gMQ0K ICAgIGVuZA0KICBlbmQNCmVuZA0KYGBgDQoNCklmIHdlIGhhdmUgYSBoZWFwIHdpdGggNiBzbG90 cywgYmVmb3JlIGNvbXBhY3Rpb24gaXQgbWlnaHQgbG9vayBzb21ldGhpbmcgbGlrZQ0KdGhpczoN Cg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBCZWZv cmUgQ29tcGFjdGlvbiAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIOKUlCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAg ICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKU gOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKU gOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSCICA0ICDilIIg IDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDilIDilLzilIDi lIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDi lIDilIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKUgiAgQSAg4pSC ICBCICDilIJFbXB0eeKUgkVtcHR54pSCICBDICDilIIgIEQgIOKUgg0KICAgICAgICAgICAgICAg 4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCDQogICAg ICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDi lIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDi lIDilIDilJgNCmBgYA0KDQpBZnRlciBjb21wYWN0aW9uLCBidXQgYmVmb3JlIHJlZmVyZW5jZSB1 cGRhdGUsIGl0IHdpbGwgbG9vayBsaWtlIHRoaXM6DQoNCmBgYA0KICAgICAgICAgICAgICAgICAg ICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAg IA0KICAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIENvbXBhY3Rpb24gICDilIIgICAgICAg DQogICAgICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDilIzilIDilIDilIDilIDilIDi lKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzi lIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilJANCiBTbG90IEluZGV4ICAgIOKUgiAg MSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIgIDYgIOKUgg0KICAgICAgICAg ICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA 4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA 4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSCICBEICDilIIgIEMgIOKUgk1P VkVE4pSCTU9WRUTilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKU giAgICAg4pSCVE8gNCDilIJUTyAzIOKUgg0KICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA 4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA 4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSYDQpgYGANCg0KU2xvdHMgNSBh bmQgNiBjb250YWluIGBUX01PVkVEYCBvYmplY3RzIHRoYXQgcG9pbnQgdG8gdGhlIG5ldyBsb2Nh dGlvbnMgb2YgRCBhbmQNCkMgb2JqZWN0cy4NCg0KIyMjIFN0ZXAgVGhyZWUsIFVwZGF0ZSBSZWZl cmVuY2VzDQoNCkFmdGVyIG9iamVjdHMgaGF2ZSBtb3ZlZCwgcmVmZXJlbmNlcyBhcmUgdXBkYXRl ZC4gIFRoaXMgaXMgYSBtYXR0ZXIgb2YgdXBkYXRpbmcNCmFueSByZWZlcmVuY2VzIHRvIHVzZSB0 aGUgZm9yd2FyZGluZyBhZGRyZXNzIHJhdGhlciB0aGFuIHRoZSBvcmlnaW5hbCBsb2NhdGlvbi4N Cg0KRm9yIGV4YW1wbGUsIGlmIG9iamVjdCBBIGhhcyBhIHJlZmVyZW5jZSB0byBDLCBhbmQgQiBh IHJlZmVyZW5jZSB0byBEOg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgIOKUjCDilIAg4pSA IOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAg ICAgICAgICAgICAgIEJlZm9yZSBDb21wYWN0aW9uICAg4pSCICAgICAgIA0KICAgICAgICAgICAg ICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg ICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA 4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA 4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAgICDilIIgIDEgIOKUgiAgMiAg4pSC ICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAgICAgICAgICAgICAgIOKUnOKUgOKU gOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKU gOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUpA0KU2xvdCBDb250 ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgkVtcHR54pSCRW1wdHnilIIgIEMgIOKUgiAgRCAg4pSC DQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg 4pSCICAgICDilIINCiAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKU gOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKU gOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIg ICAgICAgICAgICAgICAgIOKWsiAgICAg4payICAgDQogICAgICAgICAgICAgICAgICDilIIgICAg IOKUgiAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICANCiAgICAgICAgICAgICAgICAgIOKU lOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUmCAgICAg4pSCICAgDQogICAgICAgICAgICAgICAgICAgICAgICDilJTi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilJggICANCmBgYA0KDQpBZnRlciBjb21wYWN0aW9uLCBidXQgYmVmb3JlIHVw ZGF0aW5nIHJlZmVyZW5jZXMsIHRoZSBoZWFwIHdpbGwgbG9vayBsaWtlIHRoaXM6DQoNCmBgYA0K ICAgICAgICAgICAgICAgICAgICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIENvbXBh Y3Rpb24gICDilIIgICAgICAgDQogICAgICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDi lIzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzi lIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilJANCiBT bG90IEluZGV4ICAgIOKUgiAgMSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIg IDYgIOKUgg0KICAgICAgICAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA 4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA 4pS84pSA4pSA4pSA4pSA4pSA4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSC ICBEICDilIIgIEMgIOKUgk1PVkVE4pSCTU9WRUTilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg 4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCVE8gNCDilIJUTyAzIOKUgg0KICAgICAgICAgICAg ICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA 4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSY DQogICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgICAg4payICAgICDi lrIgICANCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICAgICAgICAgICAgICDilIIg ICAgIOKUgiAgIA0KICAgICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICDilIIg ICANCiAgICAgICAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIA0KYGBgDQoN ClRoZSB1cGRhdGUgcmVmZXJlbmNlcyBzdGVwIGxvb2tzIGF0IGVhY2ggb2JqZWN0IGluIHRoZSBo ZWFwLCBjaGVja3MgdG8gc2VlIGlmIGl0DQpyZWZlcmVuY2VzIGFueSBtb3ZlZCBzbG90cywgdGhl biB1cGRhdGVzIHRoZSByZWZlcmVuY2UgdG8gdXNlIHRoZSBuZXcgbG9jYXRpb24uDQpJbiBSdWJ5 LCBpdCBsb29rcyBsaWtlIHRoaXM6DQoNCmBgYHJ1YnkNCmRlZiB1cGRhdGVfcmVmZXJlbmNlcw0K ICBoZWFwLmVhY2ggZG8gfHNsb3R8DQogICAgbmV4dCBpZiBpc19lbXB0eT8oc2xvdCkgfHwgaXNf bW92ZWQ/KHNsb3QpDQoNCiAgICBzbG90LnJlZmVyZW5jZXMuZWFjaF93aXRoX2luZGV4IGRvIHxj aGlsZCwgaXwNCiAgICAgIGlmIGlzX21vdmVkPyhjaGlsZCkNCiAgICAgICAgc2xvdC5zZXRfcmVm ZXJlbmNlKGksIGNoaWxkLm5ld19sb2NhdGlvbikNCiAgICAgIGVuZA0KICAgIGVuZA0KICBlbmQN CmVuZA0KYGBgDQoNCkFmdGVyIHJlZmVyZW5jZSB1cGRhdGVzLCB0aGUgaGVhcCB3aWxsIGxvb2sg bGlrZSB0aGlzOg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgIOKUjCDilIAg4pSAIOKUgCDi lIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgICAg ICAgICAgIEFmdGVyIFJlZiBVcGRhdGVzICAg4pSCICAgICAgIA0KICAgICAgICAgICAgICAgICAg ICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAg IA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs 4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA 4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAgICDilIIgIDEgIOKUgiAgMiAg4pSCICAzICDi lIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAgICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKU gOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKU gOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUpA0KU2xvdCBDb250ZW50cyAg 4pSCICBBICDilIIgIEIgIOKUgiAgRCAg4pSCICBDICDilIJNT1ZFROKUgk1PVkVE4pSCDQogICAg ICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUglRPIDQg4pSCVE8g MyDilIINCiAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKU gOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKU tOKUgOKUgOKUgOKUgOKUgOKUmA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKW siAgICAg4payICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAg ICAg4pSCICAgICDilIIgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIOKUlOKUgOKU gOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAg ICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSYICAg ICAgICAgICAgICAgICAgICAgDQpgYGANCg0KIyMjIFN0ZXAgRm91ciwgRnVsbCBHQw0KDQpBZnRl ciByZWZlcmVuY2VzIGhhdmUgYmVlbiB1cGRhdGVkLCBhIGZ1bGwgR0MgaXMgcGVyZm9ybWVkLiAg VGhpcyBjb252ZXJ0cyB0aGUNCmBUX01PVkVEYCBzbG90cyBiYWNrIGluIHRvIGBUX0VNUFRZYCBz bG90cy4gIFRoZSBHQyBhdXRvbWF0aWNhbGx5IHRha2VzIGNhcmUgb2YNCnRoaXMgYmVjYXVzZSBu byBvYmplY3Qgc2hvdWxkIHJlZmVyZW5jZSBhIGBUX01PVkVEYCBzbG90Lg0KDQojIyBOb24gTW92 aW5nIE9iamVjdHMNCg0KTm9uIG1vdmluZyBvYmplY3RzIGFyZToNCg0KMS4gT2JqZWN0cyBvbiB0 aGUgc3RhY2sNCjIuIE9iamVjdHMgbWFya2VkIHdpdGggYHJiX2djX21hcmtgDQozLiBIYXNoIGtl eSBvYmplY3RzDQoNCiMjIyBPYmplY3RzIG9uIHRoZSBzdGFjaw0KDQpUaGUgc3RhY2sgc2hvdWxk IG5vdCBiZSBtdXRhdGVkLCBzbyB0aGVzZSBhcmUgcGlubmVkLg0KDQojIyMgT2JqZWN0cyBtYXJr ZWQgd2l0aCBgcmJfZ2NfbWFya2ANCg0KQXMgbWVudGlvbmVkIGVhcmxpZXIsIGFueSBvYmplY3Qg bWFya2VkIHdpdGggYHJiX2djX21hcmtgIG1heSBub3QgbW92ZSBiZWNhdXNlIGENCkMgZXh0ZW5z aW9uIG1heSBob2xkIGEgcmVmZXJlbmNlLiAgSGVyZSBpcyBhbiBleGNlcnB0IGZyb20gWWFqbCwg YSBKU09OIHBhcnNlci4NClRoaXMgaXMgdGhlIG1hcmsgZnVuY3Rpb24gaXQgdXNlczoNCg0KYGBg Yw0Kc3RhdGljIHZvaWQgeWFqbF9lbmNvZGVyX3dyYXBwZXJfbWFyayh2b2lkICogd3JhcHBlcikg ew0KICAgIHlhamxfZW5jb2Rlcl93cmFwcGVyICogdyA9IHdyYXBwZXI7DQogICAgaWYgKHcpIHsN CiAgICAgICAgcmJfZ2NfbWFyayh3LT5vbl9wcm9ncmVzc19jYWxsYmFjayk7DQogICAgICAgIHJi X2djX21hcmsody0+dGVybWluYXRvcik7DQogICAgfQ0KfQ0KDQoNCm9iaiA9IERhdGFfTWFrZV9T dHJ1Y3Qoa2xhc3MsIHlhamxfZW5jb2Rlcl93cmFwcGVyLCB5YWpsX2VuY29kZXJfd3JhcHBlcl9t YXJrLCB5YWpsX2VuY29kZXJfd3JhcHBlcl9mcmVlLCB3cmFwcGVyKTsNCmBgYA0KDQpUaGUgdmFs dWVzIGluIHRoaXMgbWFyayBmdW5jdGlvbiBgdy0+b25fcHJvZ3Jlc3NfY2FsbGJhY2tgIGFuZCBg dy0+dGVybWluYXRvcmANCndpbGwgbm90IG1vdmUgc2luY2UgdGhleSBhcmUgcGlubmVkIGJ5IGBy Yl9nY19tYXJrYC4NCg0KIyMjIEhhc2gga2V5IG9iamVjdHMNCg0KQ2VydGFpbiBoYXNoIGtleXMg d2lsbCBub3QgbW92ZS4gIE1vc3Qgb2JqZWN0cyB1c2UgdGhlaXIgYWRkcmVzcyBhcyB0aGUgaGFz aA0KdmFsdWUuICBJZiB0aGUgb2JqZWN0IG1vdmVzLCB0aGUgaGFzaCB2YWx1ZSBjb3VsZCBjaGFu Z2UsIHNvIGhhc2gga2V5cyBhcmUgbm90DQphbGxvd2VkIHRvIG1vdmUuDQoNClRoZXJlIGlzIGFu IGV4Y2VwdGlvbiBmb3Igc3RyaW5nIG9iamVjdHMuICBTdHJpbmcgb2JqZWN0cyBjYWxjdWxhdGUg dGhlaXIgaGFzaA0KYmFzZWQgb24gdGhlIGJ5dGVzIGluIHRoZSBzdHJpbmcuICBTaW5jZSB0aGUg Ynl0ZXMgaW4gdGhlIHN0cmluZyBkbyBub3QgY2hhbmdlDQphZnRlciBtb3ZlLCB0aGV5IGFyZSBh bGxvd2VkIHRvIG1vdmUuICBNb3N0IGhhc2gga2V5cyBpbiBsYXJnZSBwcm9ncmFtcyBhcmUNCnN0 cmluZ3MsIHNvIG9ubHkgYWxsb3dpbmcgc3RyaW5nIGtleXMgdG8gbW92ZSBzZWVtZWQgZW5vdWdo Lg0KDQojIyBTcGVjaWFsIENvbnNpZGVyYXRpb25zDQoNCiMjIyBPYmplY3QgSUQNCg0KYE9iamVj dCNvYmplY3RfaWRgIGJhc2VzIGl0cyB2YWx1ZSBmcm9tIHRoZSBhZGRyZXNzIG9mIHRoZSBvYmpl Y3QuICBGb3IgZXhhbXBsZToNCg0KYGBgcnVieQ0KeCA9IE9iamVjdC5uZXcNCmlkID0geC5vYmpl Y3RfaWQNCkdDLmNvbXBhY3QgICAgICAgICMgYHhgIG1vdmVzDQppZCA9PSB4Lm9iamVjdF9pZCAj IGBpZGAgc2hvdWxkIGJlIHNhbWUgYXMgYHgub2JqZWN0X2lkYA0KYGBgDQoNCldlIGV4cGVjdCB0 aGUgb2JqZWN0IGlkIHRvIHJlbWFpbiB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIGNvbXBhY3Rpb24u ICBUbyBkZWFsDQp3aXRoIGBvYmplY3RfaWRgLCB0d28gaGFzaGVzIHdlcmUgaW50cm9kdWNlZC4g IE9uZSBoYXNoIGNvbnRhaW5zIGEgbWFwIG9mIHRoZQ0Kb2JqZWN0IHRvIHRoZSAqc2Vlbiogb2Jq ZWN0IGlkLiAgVGhlIHNlY29uZCBtYXAgY29udGFpbnMgYWxsIHNlZW4gb2JqZWN0IGlkcy4NClRo ZSBtYXBzIGFyZSB1cGRhdGVkIGFueSB0aW1lIGBvYmplY3RfaWRgIGlzIGNhbGxlZCwgYW4gb2Jq ZWN0IG1vdmVzLCBvciBhbg0Kb2JqZWN0IGlzIGZyZWVkLg0KDQpvYmplY3RfaWQgaW1wbGVtZW50 YXRpb24gaW4gUnVieToNCg0KYGBgcnVieQ0KJG9ial90b19pZCA9IHt9DQokaWRfdG9fb2JqID0g e30NCg0KY2xhc3MgT2JqZWN0DQogIGRlZiBvYmplY3RfaWQNCiAgICBpZiAkb2JqX3RvX2lkLmtl eT8oYWRkcmVzcykNCiAgICAgICMgU2Vjb25kIGNhbGwgdG8gb2JqZWN0X2lkIG9uIHRoaXMgb2Jq ZWN0DQogICAgICByZXR1cm4gJG9ial90b19pZFthZGRyZXNzXQ0KICAgIGVsc2UNCiAgICAgICMg Rmlyc3QgY2FsbCB0byBvYmplY3RfaWQgb24gdGhpcyBvYmplY3QNCg0KICAgICAgYWRkciA9IHNl bGYuYWRkcmVzcw0KDQogICAgICBsb29wIGRvDQogICAgICAgIGlmICRzZWVuX2lkcy5rZXk/KGFk ZHIpDQogICAgICAgICAgIyBSZXNvbHZlIGNvbmZsaWN0DQogICAgICAgICAgYWRkciArPSBzaXpl b2YoUlZBTFVFKQ0KICAgICAgICBlbHNlDQogICAgICAgICAgJG9ial90b19pZFtzZWxmLmFkZHJl c3NdID0gYWRkcg0KICAgICAgICAgICRpZF90b19vYmpbYWRkcl0gICAgICAgICA9IHNlbGYNCiAg ICAgICAgICByZXR1cm4gYWRkcg0KICAgICAgICBlbmQNCiAgICAgIGVuZA0KICAgIGVuZA0KICBl bmQNCg0KICBwcml2YXRlDQoNCiAgZGVmIGFkZHJlc3MNCiAgICAjIHJldHVybnMgYWRkcmVzcyBp biBtZW1vcnkgb2Ygb2JqZWN0DQogIGVuZA0KZW5kDQpgYGANCg0KRHVyaW5nIGNvbXBhY3Rpb246 DQoNCmBgYHJ1YnkNCmRlZiBjb21wYWN0DQogIGhlYXAgPSBbIC4uLiBdICMgbWFueSBzbG90cw0K DQogIHdoaWxlIGxlZnQgPCByaWdodA0KICAgIGRlc3Rfc2xvdCA9IGhlYXBbbGVmdF0NCiAgICBz b3VyY2Vfc2xvdCA9IGhlYXBbcmlnaHRdDQoNCiAgICBpZiBtb3Zpbmc/KHNvdXJjZV9zbG90KQ0K ICAgICAgaWYgJG9ial90b19pZC5rZXk/KHNvdXJjZV9zbG90LmFkZHJlc3MpDQogICAgICAgIGlk ID0gJG9ial90b19pZC5kZWxldGUoc291cmNlX3Nsb3QuYWRkcmVzcykNCiAgICAgICAgJG9ial90 b19pZFtkZXN0X3Nsb3QuYWRkcmVzc10gPSBpZA0KICAgICAgICAkaWRfdG9fb2JqW2lkXSAgICAg ICAgICAgICAgICA9IGRlc3Rfc2xvdC5hZGRyZXNzDQogICAgICBlbmQNCg0KICAgICAgIyBldGMN CiAgICBlbmQNCiAgZW5kDQplbmQNCmBgYA0KDQpEdXJpbmcgRnJlZToNCg0KYGBgcnVieQ0KZGVm IGZyZWUob2JqKQ0KICBpZiAkb2JqX3RvX2lkLmtleT8ob2JqLmFkZHJlc3MpDQogICAgJHNlZW5f aWRzLmRlbGV0ZSgkb2JqX3RvX2lkLmRlbGV0ZShvYmouYWRkcmVzcykpDQogIGVuZA0KZW5kDQpg YGANCg0KIyMjIE9iamVjdFNwYWNlLl9pZDJyZWYNCg0KV2hlbiBnZW5lcmF0aW5nIGFuIG9iamVj dCBpZCwgaW4gdGhlIGNhc2Ugb2YgYSBjb2xsaXNpb24sIHRoZSBhZGRyZXNzIGlzDQppbmNyZW1l bnRlZCBieSA0MC4gIFRoaXMgZW5hYmxlcyBgX2lkMnJlZmAgdG8gZGV0ZXJtaW5lIHRoZXJlIGlz IGEgVkFMVUUgcG9pbnRlcg0KYW5kIHJvdW5kIHRyaXAgdGhlIG9iamVjdCBjb3JyZWN0bHkuDQoN CiMjIENvbXBhY3Rpb24gU3VwcG9ydCBmb3IgQyBleHRlbnNpb25zDQoNCkFueSBvYmplY3QgbWFy a2VkIHdpdGggYHJiX2djX21hcmtgIHdpbGwgYmUgInBpbm5lZCIgYW5kIGNhbm5vdCBtb3ZlLiAg Qw0KZXh0ZW5zaW9ucyBtYXJrIG9iamVjdHMgdmlhIGByYl9nY19tYXJrYCwgc28gdGhpcyBlbnN1 cmVzIHRoYXQgcG9pbnRlcnMgaW4gQw0Kc3RheSB2YWxpZC4NCg0KSG93ZXZlciwgc29tZSBDIGV4 dGVuc2lvbnMgbWF5IHdhbnQgdG8gc3VwcG9ydCByZWZlcmVuY2UgbW92ZW1lbnQuDQoNCiMjIyBS ZWZlcmVuY2UgTW92ZW1lbnQgaW4gQyBleHRlbnNpb25zDQoNCkluIG9yZGVyIHRvIG1haW50YWlu IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBpZiBhIEMgZXh0ZW5zaW9uIGhvbGRzIGEgcmVmZXJl bmNlDQp0byBhIFZBTFVFLCB0aGUgVkFMVUUgc2hvdWxkIG5vdCBtb3ZlLiAgR29pbmcgZm9yd2Fy ZCwgQyBleHRlbnNpb25zIGNhbiBzdXBwb3J0DQptb3ZpbmcgVkFMVUVzLiAgVG8gc3VwcG9ydCBt b3ZpbmcgVkFMVUVzLCBhIEMgZXh0ZW5zaW9uIHNob3VsZCBjaGFuZ2UNCmByYl9nY19tYXJrYCB0 byBgcmJfZ2NfbWFya19ub19waW5gLCB0aGVuIGltcGxlbWVudCBhIG5ldyBjYWxsYmFjayB0aGF0 IGlzDQpjYWxsZWQgZHVyaW5nIGNvbXBhY3Rpb24gdGhhdCBnaXZlcyB0aGUgZXh0ZW5zaW9uIGFu IG9wcG9ydHVuaXR5IHRvIHVwZGF0ZSBpdHMNCm93biByZWZlcmVuY2VzLiAgQSBuZXcgZnVuY3Rp b24gYHJiX2djX25ld19sb2NhdGlvbmAgd2lsbCByZXR1cm4gdGhlIG5ldw0KbG9jYXRpb24gZm9y IGEgcGFydGljdWxhciBWQUxVRS4NCg0KSGVyZSBpcyBhbiBleGFtcGxlIGZvciBhdXRvbG9hZCBm cm9tIGB2YXJpYWJsZS5jYC4gIEEgbmV3IGNvbXBhY3Rpb24gY2FsbGJhY2sgaXMNCnJlZ2lzdGVy ZWQsIGBhdXRvbG9hZF9pX2NvbXBhY3RgOg0KDQpgYGBjDQpzdGF0aWMgY29uc3QgcmJfZGF0YV90 eXBlX3QgYXV0b2xvYWRfZGF0YV9pX3R5cGUgPSB7DQogICAgImF1dG9sb2FkX2kiLA0KICAgIHth dXRvbG9hZF9pX21hcmssIGF1dG9sb2FkX2lfZnJlZSwgYXV0b2xvYWRfaV9tZW1zaXplLCBhdXRv bG9hZF9pX2NvbXBhY3R9LA0KICAgIDAsIDAsIFJVQllfVFlQRURfRlJFRV9JTU1FRElBVEVMWQ0K fTsNCmBgYA0KDQpUaGUgbWFyayBmdW5jdGlvbiBjaGFuZ2VzIHRvICptYXJrKiByZWZlcmVuY2Vz LCBidXQgKm5vdCogcGluIHRoZW06DQoNCmBgYGMNCnN0YXRpYyB2b2lkDQphdXRvbG9hZF9pX21h cmsodm9pZCAqcHRyKQ0Kew0KICAgIHN0cnVjdCBhdXRvbG9hZF9kYXRhX2kgKnAgPSBwdHI7DQoN CiAgICByYl9nY19tYXJrX25vX3BpbihwLT5mZWF0dXJlKTsNCg0KICAgIC8qIGFsbG93IEdDIHRv IGZyZWUgdXMgaWYgbm8gbW9kdWxlcyByZWZlciB0byB0aGlzIHZpYSBhdXRvbG9hZF9jb25zdC5h ZCAqLw0KICAgIGlmIChsaXN0X2VtcHR5KCZwLT5jb25zdGFudHMpKSB7DQogICAgICAgIHJiX2hh c2hfZGVsZXRlKGF1dG9sb2FkX2ZlYXR1cmVtYXAsIHAtPmZlYXR1cmUpOw0KICAgIH0NCn0NCmBg YA0KDQpBZnRlciB0aGUgaGVhcCBpcyBjb21wYWN0ZWQsIGFueSBDIGV4dGVuc2lvbnMgdGhhdCBy ZWdpc3RlcmVkIGEgImNvbXBhY3Rpb24iDQpjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBhbmQgaGF2 ZSBhIGNoYW5jZSB0byB1cGRhdGUgaW50ZXJuYWwgcmVmZXJlbmNlcy4gIFRoZQ0KYXV0b2xvYWQg Y29tcGFjdGlvbiBmdW5jdGlvbiBpcyBsaWtlIHRoaXM6DQoNCmBgYGMNCnN0YXRpYyB2b2lkDQph dXRvbG9hZF9pX2NvbXBhY3Qodm9pZCAqcHRyKQ0Kew0KICAgIHN0cnVjdCBhdXRvbG9hZF9kYXRh X2kgKnAgPSBwdHI7DQogICAgcC0+ZmVhdHVyZSA9IHJiX2djX25ld19sb2NhdGlvbihwLT5mZWF0 dXJlKTsNCmBgYA0KDQpUaGUgY29tcGFjdGlvbiBjYWxsYmFjayBhc2tzIGZvciB0aGUgbmV3IGxv Y2F0aW9uIGZvciB0aGUgYHAtPmZlYXR1cmVgDQpyZWZlcmVuY2UuICBgcmJfZ2NfbmV3X2xvY2F0 aW9uYCB3aWxsIGVpdGhlciByZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YNCmBwLT5mZWF0dXJl YCAoaW4gdGhlIGNhc2UgdGhlIFZBTFVFIGRpZCBub3QgbW92ZSksIG9yIHRoZSBuZXcgbG9jYXRp b24uDQoNCiMjIFJlZmVyZW5jZSBWZXJpZmljYXRpb24gYW5kIFRlc3RpbmcNCg0KQWZ0ZXIgY29t cGFjdGlvbiwgb2JqZWN0cyB0aGF0IGhhdmUgbW92ZWQgYXJlIGNoYW5nZWQgdG8gYFRfTU9WRURg IG9iamVjdHMgd2l0aA0KZm9yd2FyZGluZyBhZGRyZXNzZXMuICBPbmNlIGFsbCByZWZlcmVuY2Vz IGFyZSB1cGRhdGVkLCBubyBvYmplY3Qgc2hvdWxkIHBvaW50DQp0byBhIGBUX01PVkVEYCBzbG90 LiAgV2UgY2FuIHNheSB0aGF0IGJlZm9yZSBhbmQgYWZ0ZXIgY29tcGFjdGlvbiwgbm8gb2JqZWN0 DQpzaG91bGQgZXZlciBwb2ludCBhdCBhIGBUX01PVkVEYCBzbG90LiAgU28gaWYgYSBgVF9NT1ZF RGAgb2JqZWN0IGlzIGV2ZXIgcHVzaGVkDQpvbiB0byB0aGUgbWFyayBxdWV1ZSwgdGhlcmUgaXMg YSBidWcuICBgcHVzaF9tYXJrX3N0YWNrYCBoYXMgYSBjaGVjayBmb3INCmBUX01PVkVEYCBvYmpl Y3RzLCBhbmQgd2lsbCBjcmFzaCBpZiBhIGBUX01PVkVEYCBvYmplY3QgaXMgZXZlciBwdXNoZWQg b24gdG8gdGhlDQptYXJrIHN0YWNrLg0KDQpBIG1ldGhvZCBgR0MudmVyaWZ5X2NvbXBhY3Rpb25f cmVmZXJlbmNlc2Agd2FzIGFkZGVkIHRoYXQgZG91YmxlcyB0aGUgYXZhaWxhYmxlDQpoZWFwIHNp emUsIHRoZW4gY29tcGFjdHMgdGhlIGhlYXAuICBTaW5jZSB0aGUgaGVhcCBoYXMgZG91YmxlZCBp biBzaXplLCBhbnkNCm9iamVjdCB0aGF0IGNhbiBtb3ZlIHdpbGwgbW92ZS4gIEFueSByZWZlcmVu Y2VzIHRvIGBUX01PVkVEYCBvYmplY3RzIHdpbGwgYmUNCmNhdWdodCBkdXJpbmcgdGhlIEdDIHBo YXNlIGFmdGVyIGNvbXBhY3Rpb24uDQoNCiMjIEtub3duIElzc3VlDQoNClNhZmV0eSBmb3IgQyBl eHRlbnNpb25zIGRlcGVuZHMgZW50aXJlbHkgb24gQyBleHRlbnNpb25zIG1hcmtpbmcgdGhlaXIN CnJlZmVyZW5jZXMuICBJZiBhIEMgZXh0ZW5zaW9uIGRvZXMgbm90IG1hcmsgYSByZWZlcmVuY2Us IHRoZSBjb21wYWN0b3IgYXNzdW1lcw0KdGhhdCB0aGUgb2JqZWN0IGlzIHNhZmUgdG8gbW92ZS4g IFRoaXMgY2FuIGNhdXNlIGFuIGVycm9yIGluIHRoZSBmb2xsb3dpbmcNCnNpdHVhdGlvbiwgd2hl biB0aGVyZSBpcyBhbiBvYmplY3QgZ3JhcGggbGlrZSB0aGlzOg0KDQoNCmBgYA0KIOKUjOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICDilIzilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgDQog4pSCICBSdWJ5 IE9iamVjdCAg4pSCICAgICAgIOKUgiAgUnVieSBPYmplY3QgIOKUgiANCiDilIIgIEltcGxlbWVu dGVkICDilIIgICAgICAg4pSCICBJbXBsZW1lbnRlZCAg4pSCIA0KIOKUgiAgICBpbiBSdWJ5ICAg IOKUgiAgICAgICDilIIgICAgIGluIEMgICAgICDilIIgDQog4pSCICAgICAgICAgICAgICAg4pSC ICAgICAgIOKUgiAgICAgICAgICAgICAgIOKUgiANCiDilJTilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilJggICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYIA0KICAgICAgICAg4pSCICAgICAgICAgICAgICAg ICAgICAgICDilIIgICAgICAgICANCiAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIA0KICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICDilIIgICBOT1Qg ICANCiBNYXJrZWQgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgTWFya2VkIA0KICAgICAg ICAg4pSCICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICANCiAgICAgICAgIOKUgiAg IOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAg ICAgICAgICANCiAgICAgICAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgIOKUgiAgIOKUgiAgICAg ICAgIA0KICAgICAgICAg4pSCICAg4pSCICBSdWJ5IE9iamVjdCAg4pSCICAgICAgICAgICAgIA0K ICAgICAgICAg4pSU4pSA4pSA4pa24pSCICAgICAgICAgICAgICAg4pSC4peA4pSAIOKUmCAgICAg ICAgIA0KICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICANCiAg ICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilJggICAgICAgICAgICAgDQpgYGANCg0KSWYgdGhlIEMgZXh0ZW5zaW9uIGNvbnRhaW5zIGEg cmVmZXJlbmNlIHRvIGFuIG9iamVjdCwgYnV0IGV4cGVjdHMgdGhlIG9iamVjdA0Kbm90IHRvIG1v dmUgYmVjYXVzZSBhIFJ1Ynkgb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlLCB0aGVuIHRoZSB0 YXJnZXQgUnVieQ0Kb2JqZWN0ICptYXkqIG1vdmUgYW5kIHRoZSByZWZlcmVuY2UgaW4gdGhlIEMg ZXh0ZW5zaW9uIHdpbGwgYmUgd3JvbmcuICBJIGxpa2UgdG8NCmNhbGwgdGhlc2UgImdob3N0IHJl ZmVyZW5jZXMiIGJlY2F1c2UgdGhlIEdDIGNhbm5vdCBzZWUgdGhlbSBidXQgdGhleSB3aWxsIGNv bWUNCmJhY2sgdG8gaGF1bnQgeW91Lg0KDQpUaGUgc29sdXRpb24gdG8gdGhpcyBpcyBlaXRoZXI6 DQoNCjEuIENoYW5nZSB0aGUgQyBleHRlbnNpb24gdG8gYHJiX2djX21hcmtgIHRoZSBvYmplY3QN CjIuIFJlbW92ZSB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIEMgZXh0ZW5zaW9uDQoNCk9uZSBleGFt cGxlIG9mIHRoaXMgc2l0dWF0aW9uIHdhcyBmaXhlZCBoZXJlOg0KDQogIGh0dHBzOi8vZ2l0aHVi LmNvbS9tc2dwYWNrL21zZ3BhY2stcnVieS9pc3N1ZXMvMTMzDQoNCiMjIFN1bW1hcnkNCg0KQmFj a3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBDIGV4dGVuc2lvbnMgaXMgbWFpbnRhaW5lZCBieSAi cGlubmluZyIgYW55DQpyZWZlcmVuY2VzIG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYC4gIEEgZnVs bCBtYXJrICptdXN0KiBiZSBkb25lIGJlZm9yZQ0KY29tcGFjdGluZyB0byBkaXNjb3ZlciBhbGwg cGlubmVkIHJlZmVyZW5jZXMuDQoNCkEgbmV3IGNhbGxiYWNrIGZvciBDIGV4dGVuc2lvbnMgaXMg aW50cm9kdWNlZCBzbyB0aGF0IEMgZXh0ZW5zaW9ucyBjYW4gc3VwcG9ydA0KY29tcGFjdGlvbi4g IEMgZXh0ZW5zaW9ucyB0aGF0IHdpc2ggdG8gc3VwcG9ydCBjb21wYWN0aW9uIG11c3QgdXNlIHRo ZSBuZXcNCmNhbGxiYWNrLCBgcmJfZ2NfbWFya19ub19waW5gLCBhbmQgYHJiX2djX25ld19sb2Nh dGlvbmAuDQoNCkMgZXh0ZW5zaW9ucyB0aGF0IG1haW50YWluIHBvaW50ZXJzIGJ1dCBkbyBub3Qg bWFyayB0aG9zZSBwb2ludGVycyBtYXkgU0VHVi4gIFdlDQpjYW4gdXNlIGBHQy52ZXJpZnlfY29t cGFjdGlvbl9yZWZlcmVuY2VzYCB0byBkaXNjb3ZlciB0aGVzZSBpc3N1ZXMuDQoNClteMV06IFNl ZSBhbHNvICJUaGUgR2FyYmFnZSBDb2xsZWN0aW9uIEhhbmRib29rIiBwYWdlIDMyDQoNCg0KLS0t RmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KYmVmb3JlX2NvbXBhY3QtMC5w bmcgKDExMSBLQikNCmFmdGVyX2NvbXBhY3QtMC5wbmcgKDgwLjYgS0IpDQpiZWZvcmVfY29tcGFj dC0xLnBuZyAoODEuMiBLQikNCmFmdGVyX2NvbXBhY3QtMS5wbmcgKDc5LjQgS0IpDQowMDAxLUdD LUNvbXBhY3Rpb24tZm9yLU1SSS5wYXRjaCAoNzcuNCBLQikNCnJ1YnlfMjAxOS0wMy0yMi0xNzE4 MzlfUGlrYWNodUVYRXMtTUJQLTIwMTguY3Jhc2ggKDcxLjQgS0IpDQpydWJ5XzIwMTktMDMtMjIt MTcxODM5LTFfUGlrYWNodUVYRXMtTUJQLTIwMTguY3Jhc2ggKDcxLjQgS0IpDQoNCg0KLS0gDQpo dHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCg==