From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 132A4C00523 for ; Wed, 8 Jan 2020 06:42:32 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 91AC62075D for ; Wed, 8 Jan 2020 06:42:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="p6fhr+8O" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 91AC62075D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id D6B208E0005; Wed, 8 Jan 2020 01:42:30 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D1C768E0001; Wed, 8 Jan 2020 01:42:30 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C31B08E0005; Wed, 8 Jan 2020 01:42:30 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0204.hostedemail.com [216.40.44.204]) by kanga.kvack.org (Postfix) with ESMTP id A0AEC8E0001 for ; Wed, 8 Jan 2020 01:42:30 -0500 (EST) Received: from smtpin30.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with SMTP id 347138249980 for ; Wed, 8 Jan 2020 06:42:30 +0000 (UTC) X-FDA: 76353523260.30.girls29_6d110f209dd58 X-HE-Tag: girls29_6d110f209dd58 X-Filterd-Recvd-Size: 15602 Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by imf32.hostedemail.com (Postfix) with ESMTP for ; Wed, 8 Jan 2020 06:42:29 +0000 (UTC) Received: by mail-wm1-f67.google.com with SMTP id a5so1246451wmb.0 for ; Tue, 07 Jan 2020 22:42:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:references:mime-version:message-id :content-transfer-encoding; bh=5z5evlnFQWGjsug6OpZwCX7SI4E9EwhhCgidL6C1kWE=; b=p6fhr+8OdlX6DWvlGRQUHBPmTlqVBMxBOY1PS36vM5ufSTMxGGPH7AOtKL8SLhl6PT mHflC1Ddb46zoGzgcyOS/1rXSuuA3ogjFIIX0uy8XGLkrP63DizOUokU3vFXF1BviIrT kaDQsUDrDPqLfq7TBI8fZgN4reKVhJYFmf1mcsRFpRC3DXcbduGNdOe2Dxb75m+SSR2k ImFs865r4fiHgW/dp/D8MQxtu/7Z/3Q9nd9Sy39qWC4J96p7XmwAmH9cz/Wa4kOv/Yma jjR7q3k3ilueM7Kb+VaqHkLgKCqpclGLhte8Fm6UiZjrYdbiW5of8scd9ykSwibcIjEE fYHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:references:mime-version :message-id:content-transfer-encoding; bh=5z5evlnFQWGjsug6OpZwCX7SI4E9EwhhCgidL6C1kWE=; b=XKH8j5pvbrNhtx+WGHtrHd590+SRDAdUZ2A1WeK2n+bY0sWSvIuRWYWmOWiZv6sHoj +PbA6IOcCpbRXSFlKrwOd+4KGPFu2WyfAwapaERdLDXNW7sMA84XRvoPQArFIKPdWXv4 cH1dejiBJnBMLzF4km1B+0OPQN2C8nyDpBbYvKYOtwtfn55T+sFVoPzFA0kvTjfTyP67 B8OHDElEs0EMyczzemkk9YVSPQNqmOqL3tFHfiqf9spnM16Ir5vXdmOLIvoH87qd40lp 1bavmqSbGAQLlgTVftie8bNSJv4p1qm3XcLuctQmSCk/XzEh5SrGiPx2aLRa41aZW/r/ WJJA== X-Gm-Message-State: APjAAAXv3EV2C/t1z9QnkJbCskUbRBOTn0omcKEkYjgsEe4/ftQah6Hy 3SiNmEW2VdL1XAYY4OWUswY= X-Google-Smtp-Source: APXvYqzDsoub6d3nTnznH4iRxXQKapoh6GpAlrZRTjoCBk8TsLzW6zoGS92Yt6MlCwVf8v/ZzkbiGg== X-Received: by 2002:a7b:c10f:: with SMTP id w15mr1749285wmi.69.1578465748169; Tue, 07 Jan 2020 22:42:28 -0800 (PST) Received: from N-20L6PF1KTYA2 ([131.228.2.20]) by smtp.gmail.com with ESMTPSA id g21sm2987167wrb.48.2020.01.07.22.42.25 (version=TLS1_2 cipher=AES128-GCM-SHA256 bits=128/128); Tue, 07 Jan 2020 22:42:27 -0800 (PST) Date: Wed, 8 Jan 2020 14:42:24 +0800 From: "lixinhai.lxh@gmail.com" To: richardw.yang , khlebnikov Cc: "linux-mm@kvack.org" , akpm , "linux-kernel@vger.kernel.org" , richardw.yang , "Rik van Riel" , kirill.shutemov Subject: Re: [PATCH v2 1/2] mm/rmap: fix and simplify reusing mergeable anon_vma as parent when fork References: <157839239609.694.10268055713935919822.stgit@buzz>, <20200108023211.GC13943@richard> X-Priority: 3 X-GUID: 60F346C1-A944-4A19-B386-A9E4028C55B1 X-Has-Attach: no X-Mailer: Foxmail 7.2.13.365[cn] Mime-Version: 1.0 Message-ID: <2020010814422339601675@gmail.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: T24gMjAyMC0wMS0wOMKgYXQgMTA6MzLCoFdlaSBZYW5nwqB3cm90ZToKPk9uIFR1ZSwgSmFuIDA3 LCAyMDIwIGF0IDAxOjE5OjU2UE0gKzAzMDAsIEtvbnN0YW50aW4gS2hsZWJuaWtvdiB3cm90ZToK Pj5UaGlzIGZpeGVzIHNvbWUgbWlzY29uY2VwdGlvbnMgaW4gY29tbWl0IDRlNGE5ZWI5MjEzMyAo Im1tL3JtYXAuYzogcmV1c2UKPj5tZXJnZWFibGUgYW5vbl92bWEgYXMgcGFyZW50IHdoZW4gZm9y ayIpLiBJdCBtZXJnZXMgYW5vbi12bWEgaW4gdW5leHBlY3RlZAo+PndheSBidXQgZm9ydHVuYXRl bHkgc3RpbGwgcHJvZHVjZXMgdmFsaWQgYW5vbi12bWEgdHJlZSwgc28gbm90aGluZyBjcmFzaGVz Lgo+Pgo+PklmIGluIHBhcmVudCBWTUFzOiBTUkMxIFNSQzIgLi4gU1JDbiBzaGFyZSBhbm9uLXZt YSBBTk9OMCwgdGhlbiBhZnRlciBmb3JrCj4+YmVmb3JlIGFsbCBwYXRjaGVzIGluIGNoaWxkIHBy b2Nlc3MgcmVsYXRlZCBWTUFzOiBEU1QxIERTVDIgLi4gRFNUbiB3aWxsCj4+Zm9yayBpbmRlcG5k ZW50IGFub24tdm1hczogQU5PTjEgQU5PTjIgLi4gQU5PTm4gKGVhY2ggaXMgY2hpbGQgb2YgQU5P TjApLgo+PkJlZm9yZSB0aGlzIHBhdGNoIG9ubHkgRFNUMSB3aWxsIGZvcmsgbmV3IEFOT04xIGFu ZCBmb2xsb3dpbmcgRFNUMiAuLiBEU1RuCj4+d2lsbCBzaGFyZSBwYXJlbnQncyBBTk9OMCAoaS5l LiBhbm9uLXZtYSB0cmVlIGlzIHZhbGlkIGJ1dCBpc24ndCBvcHRpbWFsKS4KPj5XaXRoIHRoaXMg cGF0Y2ggRFNUMSB3aWxsIGNyZWF0ZSBuZXcgQU5PTjEgYW5kIERTVDIgLi4gRFNUbiB3aWxsIHNo YXJlIGl0Lgo+Pgo+PlJvb3QgcHJvYmxlbSBjYXVzZWQgYnkgaW5pdGlhbGl6YXRpb24gb3JkZXIg aW4gZHVwX21tYXAoKTogdm1hLT52bV9wcmV2Cj4+aXMgc2V0IGFmdGVyIGNhbGxpbmcgYW5vbl92 bWFfZm9yaygpLiBUaHVzIGluIGFub25fdm1hX2ZvcmsoKSBpdCBwb2ludHMgdG8KPj5wcmV2aW91 cyBWTUEgaW4gcGFyZW50IG1tLgo+Pgo+PlNlY29uZCBwcm9ibGVtIGlzIGhpZGRlbiBiZWhpbmQg Zmlyc3Qgb25lOiBhc3N1bXB0aW9uICJQYXJlbnQgaGFzIHZtX3ByZXYsCj4+d2hpY2ggaW1wbGll cyB3ZSBoYXZlIHZtX3ByZXYiIGlzIHdyb25nIGlmIGZpcnN0IFZNQSBpbiBwYXJlbnQgbW0gaGFz IHNldAo+PmZsYWcgVk1fRE9OVENPUFkuIEx1Y2tpbHkgcHJldi0+YW5vbl92bWEgZG9lc24ndCBk ZXJlZmVyZW5jZSBOVUxMIHBvaW50ZXIKPj5iZWNhdXNlIGluIGN1cnJlbnQgY29kZSAncHJldicg YWN0dWFsbHkgaXMgc2FtZSBhcyAncHByZXYnLgo+Pgo+PlRoaXJkIGhpZGRlbiBwcm9ibGVtIGlz IGxpbmtpbmcgYmV0d2VlbiBWTUEgYW5kIGFub24tdm1hcyB3aG9zZSBwYWdlcyBpdAo+PmNvdWxk IGNvbnRhaW4uIExvb3AgaW4gYW5vbl92bWFfY2xvbmUoKSBhdHRhY2hlcyBvbmx5IHBhcmVudCdz IGFub24tdm1hcywKPj5zaGFyZWQgYW5vbi12bWEgaXNuJ3QgYXR0YWNoZWQuIEJ1dCBldmVyeSBt YXBwZWQgcGFnZSBzdGF5cyByZWFjaGFibGUgaW4KPj5ybWFwIGJlY2F1c2Ugd2UgZXJyb25lb3Vz bHkgc2hhcmUgYW5vbi12bWEgZnJvbSBwYXJlbnQncyBwcmV2aW91cyBWTUEuCj4+Cj4+VGhpcyBw YXRjaCBtb3ZlcyBzaGFyaW5nIGxvZ2ljIG91dCBvZiBhbm9uX3ZtYV9jbG9uZSgpIGludG8gbW9y ZSBzcGVjaWZpYwo+PmFub25fdm1hX2ZvcmsoKSBiZWNhdXNlIHRoaXMgc3VwcG9zZWQgdG8gd29y ayBvbmx5IGF0IGZvcmsoKSBhbmQgc2ltcGx5Cj4+cmV1c2VzIGFub25fdm1hIGZyb20gcHJldmlv dXMgVk1BIGlmIGl0IGlzIGZvcmtlZCBmcm9tIHRoZSBzYW1lIGFub24tdm1hLgo+Pgo+PlNpZ25l ZC1vZmYtYnk6IEtvbnN0YW50aW4gS2hsZWJuaWtvdiA8a2hsZWJuaWtvdkB5YW5kZXgtdGVhbS5y dT4KPj5SZXBvcnRlZC1ieTogTGkgWGluaGFpIDxsaXhpbmhhaS5seGhAZ21haWwuY29tPgo+PkZp eGVzOiA0ZTRhOWViOTIxMzMgKCJtbS9ybWFwLmM6IHJldXNlIG1lcmdlYWJsZSBhbm9uX3ZtYSBh cyBwYXJlbnQgd2hlbiBmb3JrIikKPj5MaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51 eC1tbS9DQUxZR05pTnp6K2R4SFgwZzUtZ055cFVRYzNCPThfU2NwNTMtTlRPaD16V3NkVXVIQXdA bWFpbC5nbWFpbC5jb20vVC8jdAo+Pi0tLQo+PiBpbmNsdWRlL2xpbnV4L3JtYXAuaCB8wqDCoMKg IDMgKystCj4+IGtlcm5lbC9mb3JrLmPCoMKgwqDCoMKgwqDCoCB8wqDCoMKgIDIgKy0KPj4gbW0v cm1hcC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAyMyArKysrKysrKystLS0tLS0tLS0t LS0tLQo+PiAzIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygt KQo+Pgo+PmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgv cm1hcC5oCj4+aW5kZXggOTg4ZDE3NjQ3MmRmLi41NjBlNDQ4MGRjZDAgMTAwNjQ0Cj4+LS0tIGEv aW5jbHVkZS9saW51eC9ybWFwLmgKPj4rKysgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaAo+PkBAIC0x NDMsNyArMTQzLDggQEAgdm9pZCBhbm9uX3ZtYV9pbml0KHZvaWQpOwkvKiBjcmVhdGUgYW5vbl92 bWFfY2FjaGVwICovCj4+IGludMKgIF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKik7Cj4+IHZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg Kik7Cj4+IGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICopOwo+Pi1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwo+PitpbnQgYW5vbl92bWFfZm9yayhz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hLAo+ PisJwqAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2KTsKPj4KPj4gc3RhdGljIGlubGluZSBp bnQgYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPj4gewo+PmRp ZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwo+PmluZGV4IDI1MDhhNGYy MzhhMy4uYzMzNjI2OTkzODMxIDEwMDY0NAo+Pi0tLSBhL2tlcm5lbC9mb3JrLmMKPj4rKysgYi9r ZXJuZWwvZm9yay5jCj4+QEAgLTU1Niw3ICs1NTYsNyBAQCBzdGF0aWMgX19sYXRlbnRfZW50cm9w eSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4+IHRtcC0+YW5vbl92bWEgPSBO VUxMOwo+PiBpZiAoYW5vbl92bWFfcHJlcGFyZSh0bXApKQo+PiBnb3RvIGZhaWxfbm9tZW1fYW5v bl92bWFfZm9yazsKPj4tCX0gZWxzZSBpZiAoYW5vbl92bWFfZm9yayh0bXAsIG1wbnQpKQo+PisJ fSBlbHNlIGlmIChhbm9uX3ZtYV9mb3JrKHRtcCwgbXBudCwgcHJldikpCj4+IGdvdG8gZmFpbF9u b21lbV9hbm9uX3ZtYV9mb3JrOwo+PiB0bXAtPnZtX2ZsYWdzICY9IH4oVk1fTE9DS0VEIHwgVk1f TE9DS09ORkFVTFQpOwo+PiB0bXAtPnZtX25leHQgPSB0bXAtPnZtX3ByZXYgPSBOVUxMOwo+PmRp ZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKPj5pbmRleCBiM2UzODE5MTk4MzUuLjNj MWUwNDM4OTI5MSAxMDA2NDQKPj4tLS0gYS9tbS9ybWFwLmMKPj4rKysgYi9tbS9ybWFwLmMKPj5A QCAtMjY5LDE5ICsyNjksNiBAQCBpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjKQo+PiB7Cj4+IHN0cnVjdCBhbm9u X3ZtYV9jaGFpbiAqYXZjLCAqcGF2YzsKPj4gc3RydWN0IGFub25fdm1hICpyb290ID0gTlVMTDsK Pj4tCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiA9IGRzdC0+dm1fcHJldiwgKnBwcmV2ID0g c3JjLT52bV9wcmV2Owo+Pi0KPj4tCS8qCj4+LQkqIElmIHBhcmVudCBzaGFyZSBhbm9uX3ZtYSB3 aXRoIGl0cyB2bV9wcmV2LCBrZWVwIHRoaXMgc2hhcmluZyBpbiBpbgo+Pi0JKiBjaGlsZC4KPj4t CSoKPj4tCSogMS4gUGFyZW50IGhhcyB2bV9wcmV2LCB3aGljaCBpbXBsaWVzIHdlIGhhdmUgdm1f cHJldi4KPj4tCSogMi4gUGFyZW50IGFuZCBpdHMgdm1fcHJldiBoYXZlIHRoZSBzYW1lIGFub25f dm1hLgo+Pi0JKi8KPj4tCWlmICghZHN0LT5hbm9uX3ZtYSAmJiBzcmMtPmFub25fdm1hICYmCj4+ LQnCoMKgwqAgcHByZXYgJiYgcHByZXYtPmFub25fdm1hID09IHNyYy0+YW5vbl92bWEpCj4+LQlk c3QtPmFub25fdm1hID0gcHJldi0+YW5vbl92bWE7Cj4+LQo+Pgo+PiBsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3JldmVyc2UocGF2YywgJnNyYy0+YW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7Cj4+IHN0 cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7Cj4+QEAgLTMzMiw3ICszMTksOCBAQCBpbnQgYW5vbl92 bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqc3JjKQo+PsKgICogdGhlIGNvcnJlc3BvbmRpbmcgVk1BIGluIHRoZSBwYXJlbnQgcHJvY2Vz cyBpcyBhdHRhY2hlZCB0by4KPj7CoCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBub24temVybyBv biBmYWlsdXJlLgo+PsKgICovCj4+LWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpCj4+K2ludCBhbm9uX3ZtYV9m b3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2 bWEsCj4+KwnCoCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYpCj4+IHsKPj4gc3RydWN0IGFu b25fdm1hX2NoYWluICphdmM7Cj4+IHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7Cj4+QEAgLTM0 Miw2ICszMzAsMTMgQEAgaW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSkKPj4gaWYgKCFwdm1hLT5hbm9uX3ZtYSkK Pj4gcmV0dXJuIDA7Cj4+Cj4+KwkvKiBTaGFyZSBhbm9uX3ZtYSB3aXRoIHByZXZpb3VzIFZNQSBp ZiBpdCBoYXMgdGhlIHNhbWUgcGFyZW50LiAqLwo+PisJaWYgKHByZXYgJiYgcHJldi0+YW5vbl92 bWEgJiYKPj4rCcKgwqDCoCBwcmV2LT5hbm9uX3ZtYS0+cGFyZW50ID09IHB2bWEtPmFub25fdm1h KSB7Cj4+Kwl2bWEtPmFub25fdm1hID0gcHJldi0+YW5vbl92bWE7Cj4+KwlyZXR1cm4gYW5vbl92 bWFfY2xvbmUodm1hLCBwcmV2KTsKPj4rCX0KPj4rCj4gCgp0aGUgY2hlY2tpbmcgaW4gZmlyc3Qg dmVyc2lvbiBoYXMgZG9uZSByaWdodCB0aGluZywgb3IgYW55dGhpbmcgbWlzc2VkIGhlcmU/wqAK KwlpZiAocHZtYS0+YW5vbl92bWEgJiYgcHByZXYgJiYgcHJldiAmJgorCSDCoCDCoHBwcmV2LT5h bm9uX3ZtYSA9PSBwdm1hLT5hbm9uX3ZtYSAmJgorCSDCoCDCoHBwcmV2LT52bV9zdGFydCA9PSBw cmV2LT52bV9zdGFydCkKZXhjZXB0IHRoYXQgJ3B2bWEtPmFub25fdm1hJyBoYXMgYmVlbiBjaGVj a2VkIGF0IHRoZSBiZWdpbmluZyBvZiB0aGlzIGZ1bmN0aW9uLAppdCBjYW4gYmUgcmVtb3ZlZCBm cm9tIHRoaXMgYmxvY2suCgo+SSBhbSBhZnJhaWQgdGhpcyBvbmUgY2hhbmdlIHRoZSBpbnRlbmRl ZCBiZWhhdmlvci4gTGV0J3MgcHV0IGEgY2hhcnQgdG8KPmRlc2NyaWJlLgo+Cj5Db21taXQgNGU0 YTllYjkyMTMzICgibW0vcm1hcC5jOiByZXVzZW1lcmdlYWJsZSBhbm9uX3ZtYSBhcyBwYXJlbnQg d2hlbgo+Zm9yayIpIHRyaWVzIHRvIGltcHJvdmUgdGhlIGZvbGxvd2luZyBzaXR1YXRpb24uCj4K PkJlZm9yZSB0aGUgY29tbWl0LCB0aGUgYmVoYXZpb3IgaXMgbGlrZSB0aGlzOgo+Cj5QYXJlbnQg cHJvY2VzczoKPgo+wqDCoMKgwqDCoCArLS0tLS0rwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+wqDC oMKgwqDCoCB8IHBhdiB8PC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r Cj7CoMKgwqDCoMKgICstLS0tLSvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfAo+wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfAo+wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICstLS0tLS0tLS0tLSvCoMKgwqDCoMKgwqDCoMKgwqAgKy0tLS0t LS0tLS0tKwo+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHxwcHJldsKgwqDC oMKgwqAgfMKgwqDCoMKgwqDCoMKgwqDCoCB8cHZtYcKgwqDCoMKgwqDCoCB8Cj7CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKy0tLS0tLS0tLS0tK8KgwqDCoMKgwqDCoMKgwqDC oCArLS0tLS0tLS0tLS0rCj4KPkNoaWxkIFByb2Nlc3MKPgo+Cj7CoMKgwqDCoMKgICstLS0tLSvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICstLS0tLSsKPsKgwqDCoMKg wqAgfCBhdjEgfDwtLS0tLS0tLS0tLS0tLS0tLSvCoCB8IGF2MiB8PC0tLS0tLS0tLS0tLSsKPsKg wqDCoMKgwqAgKy0tLS0tK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgICst LS0tLSvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfAo+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfAo+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICstLS0tLS0tLS0tLSvCoMKgwqDCoMKgwqDCoMKgwqAgKy0tLS0tLS0tLS0tKwo+wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHxwcmV2wqDCoMKgwqDCoMKgIHzCoMKg wqDCoMKgwqDCoMKgwqAgfHZtYcKgwqDCoMKgwqDCoMKgIHwKPsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCArLS0tLS0tLS0tLS0rwqDCoMKgwqDCoMKgwqDCoMKgICstLS0tLS0t LS0tLSsKPgo+Cj5QYXJlbnQgcHByZXYgYW5kIHB2bWEgc2hhcmUgdGhlIHNhbWUgYW5vbl92bWEg ZHVlIHRvCj5maW5kX21lcmdlYWJsZV9hbm9uX3ZtYSgpLiBXaGlsZSB0aGUgYW5vbl92bWFfY2xv bmUoKSB3b3VsZCBwaWNrIHVwIGRpZmZlcmVudAo+YW5vbl92bWEgZm9yIGNoaWxkIHByb2Nlc3Mn cyB2bWEuCj4KPlRoZSBwdXJwb3NlIG9mIG15IGNvbW1pdCBpcyB0byBnaXZlIGNoaWxkIHByb2Nl c3MgdGhlIGZvbGxvd2luZyBzaGFwZS4KPgo+wqDCoMKgwqDCoCArLS0tLS0rwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj7CoMKgwqDCoMKgIHwg YXbCoCB8PC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj7CoMKgwqDC oMKgICstLS0tLSvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfAo+wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfAo+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICstLS0tLS0tLS0tLSvCoMKgwqDCoMKgwqDCoMKgwqAgKy0tLS0tLS0tLS0tKwo+ wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHxwcmV2wqDCoMKgwqDCoMKgIHzC oMKgwqDCoMKgwqDCoMKgwqAgfHZtYcKgwqDCoMKgwqDCoMKgIHwKPsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCArLS0tLS0tLS0tLS0rwqDCoMKgwqDCoMKgwqDCoMKgICstLS0t LS0tLS0tLSsKPgo+QWZ0ZXIgdGhpcywgd2UgcmVkdWNlIHRoZSBleHRyYSAiYXYyIiBmb3IgY2hp bGQgcHJvY2Vzcy4gQnV0IHllcywgYmVjYXVzZSBvZgo+dGhlIHR3byByZWFzb25zIHlvdSBmb3Vu ZCwgaXQgZGlkbid0IGRvIHRoZSBleGFjdCB0aGluZy4KPgo+V2hpbGUgaWYgbXkgdW5kZXJzdGFu ZGluZyBpcyBjb3JyZWN0LCB0aGUgYW5vbl92bWFfY2xvbmUoKSB3b3VsZCBwaWNrIHVwIGFueQo+ YW5vbl92bWEgaW4gaXRzIHByb2Nlc3MgdHJlZSwgZXhjZXB0IHBhcmVudCdzLiBJZiB0aGlzIGZh aWxzIHRvIGdldCBhIHJldXNhYmxlCj5vbmUsIGFub25fdm1hX2ZvcmsoKSB3b3VsZCBhbGxvY2F0 ZSBvbmUsIHdob3NlIHBhcmVudCBpcyBwdm1hLT5hbm9uX3ZtYS4KPgo+TGV0IG1lIHN1bW1hcmlz ZSBvcmlnaW5hbCBiZWhhdmlvcjoKPgo+wqAgKiBpZiBhbm9uX3ZtYV9jbG9uZSBzdWNjZWVkLCBp dCBmaW5kIG9uZSBhbm9uX3ZtYSBpbiB0aGUgcHJvY2VzcyB0cmVlLCBidXQKPsKgwqDCoCBpdCBj b3VsZCBub3QgYmUgcHZtYS0+YW5vbl92bWEKPsKgICogaWYgYW5vbl92bWFfY2xvbmUgZmFpbCwg aXQgd2lsbCBhbGxvY2F0ZSBhIG5ldyBhbm9uX3ZtYSBhbmQgaXRzIHBhcmVudCBpcwo+wqDCoMKg IHB2bWEtPmFub25fdmFtCj4KPlRoZW4gdGFrZSBhIGxvb2sgaW50byB5b3VyIGNvZGUgaGVyZS4K Pgo+InByZXYtPmFub25fdm1hLT5wYXJlbnQgPT0gcHZtYS0+YW5vbl92bWEiIG1lYW5zIHByZXYt PmFub25fdm1hIHBhcmVudCBpcwo+cHZtYSdzIGFub25fdm1hLiBJZiBteSB1bmRlcnN0YW5kaW5n IGlzIGNvcnJlY3QsIHRoaXMganVzdCBtYXRjaCB0aGUgc2Vjb25kCj5jYXNlLiBGb3IgInByZXYi LCB3ZSBkaWRuJ3QgZmluZCBhIHJldXNhYmxlIGFub25fdm1hIGFuZCBhbGxvY2F0ZSBhIG5ldyBv bmUuCj4KPkJ1dCBob3cgYWJvdXQgdGhlIGZpcnN0IGNhc2U/IHByZXYgcmV1c2UgYW4gYW5vbl92 bWEgaW4gdGhlIHByb2Nlc3MgdHJlZSB3aGljaAo+aXMgbm90IHBhcmVudCdzPwo+Cj4+IC8qIERy b3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSdsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBu ZXcuICovCj4+IHZtYS0+YW5vbl92bWEgPSBOVUxMOwo+Pgo+Cj4tLQo+V2VpIFlhbmcKPkhlbHAg eW91LCBIZWxwIG1l