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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 08642C4332F for ; Mon, 30 Oct 2023 11:43:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=RG2UVEInFoqoV0eAXwnFrxeMTGRhUkQnb06P5w1P3eM=; b=sNUGieoPPVrpSs q8zTU3GnFPrEjjPd23Og6FPTGcu0KhTbxMp3A0YyCxBCTTAB+6F7m+YZkqLHYGexhiKdsk33SmX9R kv57L5NyyCe9rhtTKwpz6dNN3+41zcv+JhJFmNtF014w9FPxoOz+Vtht6oYGbQ+CYWO9NoKmWlyjk wHYlkgsHrp32S2D3kmkmtrzV0uLr1AYdRZVEMPo6unTdPI98T9TQe03l7q80fBAAppOP/40nHHZ4l +glWL5JmXYiP1XZA0qWd4ZSpTEOMiv/dF6DlUx7e1aXtl76kPRTv2Emj6lYYRkxXA1SqG6T1Er99Z SfpUqUV68VFQUFxNFMEg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qxQg0-003HXR-0s; Mon, 30 Oct 2023 11:43:24 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qxQfw-003HVz-0d for linux-arm-kernel@lists.infradead.org; Mon, 30 Oct 2023 11:43:22 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3593FFEC; Mon, 30 Oct 2023 04:43:59 -0700 (PDT) Received: from [10.57.71.117] (unknown [10.57.71.117]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id EA0353F738; Mon, 30 Oct 2023 04:43:14 -0700 (PDT) Message-ID: <5993c198-0d27-46c3-b757-3a02c2aacfc9@arm.com> Date: Mon, 30 Oct 2023 11:43:13 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v6 5/9] mm: thp: Extend THP to allocate anonymous large folios Content-Language: en-GB To: John Hubbard , Andrew Morton , Matthew Wilcox , Yin Fengwei , David Hildenbrand , Yu Zhao , Catalin Marinas , Anshuman Khandual , Yang Shi , "Huang, Ying" , Zi Yan , Luis Chamberlain , Itaru Kitayama , "Kirill A. Shutemov" , David Rientjes , Vlastimil Babka , Hugh Dickins Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org References: <20230929114421.3761121-1-ryan.roberts@arm.com> <20230929114421.3761121-6-ryan.roberts@arm.com> <8a72da61-b2ef-48ad-ae59-0bae7ac2ce10@nvidia.com> From: Ryan Roberts In-Reply-To: <8a72da61-b2ef-48ad-ae59-0bae7ac2ce10@nvidia.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231030_044320_335577_E52F281A X-CRM114-Status: GOOD ( 37.82 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjgvMTAvMjAyMyAwMDowNCwgSm9obiBIdWJiYXJkIHdyb3RlOgo+IE9uIDkvMjkvMjMgMDQ6 NDQsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPiAKPiBIaSBSeWFuLAo+IAo+IEEgZmV3IGNsYXJpZnlp bmcgcXVlc3Rpb25zIGJlbG93LgoKRXhjZWxsZW50IC0ga2VlcCB0aGVtIGNvbWluZyEKCj4gCj4g Li4uCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGlu dXgvaHVnZV9tbS5oCj4+IGluZGV4IDJlN2MzMzgyMjlhNi4uYzQ4NjA0NzZhMWY1IDEwMDY0NAo+ PiAtLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaAo+PiArKysgYi9pbmNsdWRlL2xpbnV4L2h1 Z2VfbW0uaAo+PiBAQCAtNjgsOSArNjgsMTEgQEAgZXh0ZXJuIHN0cnVjdCBrb2JqX2F0dHJpYnV0 ZSBzaG1lbV9lbmFibGVkX2F0dHI7Cj4+IMKgICNkZWZpbmUgSFBBR0VfUE1EX05SICgxPDxIUEFH RV9QTURfT1JERVIpCj4+IMKgIMKgIC8qCj4+IC0gKiBNYXNrIG9mIGFsbCBsYXJnZSBmb2xpbyBv cmRlcnMgc3VwcG9ydGVkIGZvciBhbm9ueW1vdXMgVEhQLgo+PiArICogTWFzayBvZiBhbGwgbGFy Z2UgZm9saW8gb3JkZXJzIHN1cHBvcnRlZCBmb3IgYW5vbnltb3VzIFRIUDsgYWxsIG9yZGVycyB1 cCB0bwo+PiArICogYW5kIGluY2x1ZGluZyBQTURfT1JERVIsIGV4Y2VwdCBvcmRlci0wICh3aGlj aCBpcyBub3QgImh1Z2UiKSBhbmQgb3JkZXItMQo+PiArICogKHdoaWNoIGlzIGEgbGltaXRhdGlv biBvZiB0aGUgVEhQIGltcGxlbWVudGF0aW9uKS4KPj4gwqDCoCAqLwo+PiAtI2RlZmluZSBUSFBf T1JERVJTX0FMTF9BTk9OwqDCoMKgIEJJVChQTURfT1JERVIpCj4+ICsjZGVmaW5lIFRIUF9PUkRF UlNfQUxMX0FOT07CoMKgwqAgKChCSVQoUE1EX09SREVSICsgMSkgLSAxKSAmIH4oQklUKDApIHwg QklUKDEpKSkKPj4gwqAgwqAgLyoKPj4gwqDCoCAqIE1hc2sgb2YgYWxsIGxhcmdlIGZvbGlvIG9y ZGVycyBzdXBwb3J0ZWQgZm9yIGZpbGUgVEhQLgo+PiBkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMg Yi9tbS9tZW1vcnkuYwo+PiBpbmRleCBiNWI4MmZjOGUxNjQuLjkyZWQ5Yzc4MmRjOSAxMDA2NDQK Pj4gLS0tIGEvbW0vbWVtb3J5LmMKPj4gKysrIGIvbW0vbWVtb3J5LmMKPj4gQEAgLTQwNTksNiAr NDA1OSw4NyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikK Pj4gwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgYm9vbCB2bWZf cHRlX3JhbmdlX2NoYW5nZWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIGludCBucl9wYWdlcykKPj4g K3sKPj4gK8KgwqDCoCBpbnQgaTsKPj4gKwo+PiArwqDCoMKgIGlmIChucl9wYWdlcyA9PSAxKQo+ PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHZtZl9wdGVfY2hhbmdlZCh2bWYpOwo+PiArCj4+ICvC oMKgwqAgZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKg IGlmICghcHRlX25vbmUocHRlcF9nZXRfbG9ja2xlc3Modm1mLT5wdGUgKyBpKSkpCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiB0cnVlOwo+IAo+IFRoaXMgc2VlbXMgbGlrZSBzb21l dGhpbmcgZGlmZmVyZW50IHRoYW4gdGhlIGZ1bmN0aW9uIG5hbWUgaW1wbGllcy4KPiBJdCdzIHJl YWxseSBjb25mdXNpbmc6IGZvciBhIHNpbmdsZSBwYWdlIGNhc2UsIHJldHVybiB0cnVlIGlmIHRo ZQo+IHB0ZSBpbiB0aGUgcGFnZSB0YWJsZXMgaGFzIGNoYW5nZWQsIHllcyB0aGF0IGlzIHZlcnkg Y2xlYXIuCj4gCj4gQnV0IHRoZW4gZm9yIG11bHRpcGxlIHBhZ2UgY2FzZXMsIHdoaWNoIGlzIHJl YWxseSB0aGUgbWFpbgo+IGZvY3VzIGhlcmUtLWZvciB0aGF0LCBjbGFpbSB0aGF0IHRoZSByYW5n ZSBoYXMgY2hhbmdlZCBpZiBhbnkKPiBwdGUgaXMgcHJlc2VudCAoIXB0ZV9ub25lKS4gQ2FuIHlv dSBwbGVhc2UgaGVscCBtZSB1bmRlcnN0YW5kCj4gd2hhdCB0aGlzIG1lYW5zPwoKWWVzIEkgdW5k ZXJzdGFuZCB5b3VyIGNvbmZ1c2lvbi4gQWx0aG91Z2ggSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBj b2RlIGlzCmNvcnJlY3QsIGl0cyBhIGJhZCBuYW1lIC0gSSdsbCBtYWtlIHRoZSBleGN1c2UgdGhh dCB0aGlzIGhhcyBldm9sdmVkIHRocm91Z2gKcmViYXNpbmcgdG8gY29wZSB3aXRoIGFkZGl0aW9u cyB0byBVRkZELiBQZXJoYXBzIHNvbWV0aGluZyBsaWtlCnZtZl9pc19sYXJnZV9mb2xpb19zdWl0 YWJsZSgpIGlzIGEgYmV0dGVyIG5hbWUuCgpJdCB1c2VkIHRvIGJlIHRoYXQgd2Ugd291bGQgb25s eSB0YWtlIHRoZSBkb19hbm9ueW1vdXNfcGFnZSgpIHBhdGggaWYgdGhlIHB0ZQp3YXMgbm9uZTsg aS5lLiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGFyZSBmYXVsdGluZyBvbiBhbiBhZGRyZXNz IGNvdmVyZWQgYnkKYW4gYW5vbiBWTUEgYW5kIHdlIG5lZWQgdG8gYWxsb2NhdGUgc29tZSBtZW1v cnkuIEJ1dCBtb3JlIHJlY2VudGx5IHdlIGFsc28gZW5kCnVwIGhlcmUgaWYgdGhlIHB0ZSBpcyBh IHVmZmRfd3AgbWFya2VyLiBTbyBmb3IgYSBzaW5nbGUgcHRlLCBpbnN0ZWFkIG9mIGNoZWNraW5n Cm5vbmUsIHdlIGNhbiBjaGVjayBpZiB0aGUgcHRlIGhhcyBjaGFuZ2VkIGZyb20gb3VyIG9yaWdp bmFsIGNoZWNrICh3aGVyZSB3ZQpkZXRlcm1pbmVkIGl0IHdhcyBhIHVmZmRfd3AgbWFya2VyIG9y IG5vbmUpLiBCdXQgZm9yIG11bHRpcGxlIHB0ZXMsIHdlIGRvbid0CmhhdmUgc3RvcmFnZSB0byBz dG9yZSBhbGwgdGhlIG9yaWdpbmFsIHB0ZXMgZnJvbSB0aGUgZmlyc3QgY2hlY2suCgpGb3J0dW5h dGVseSwgaWYgdWZmZCBpcyBpbiB1c2UgZm9yIGEgdm1hLCB0aGVuIHdlIGRvbid0IHdhbnQgdG8g dXNlIGEgbGFyZ2UKZm9saW8gYW55d2F5ICh0aGlzIHdvdWxkIGJyZWFrIHVmZmQgc2VtYW50aWNz IGJlY2F1c2Ugd2Ugd291bGQgbm8gbG9uZ2VyIGdldCBhCmZhdWx0IGZvciBldmVyeSBwYWdlKS4g U28gd2Ugb25seSBjYXJlIGFib3V0IHRoZSAic2FtZSBidXQgbm90IG5vbmUiIGNhc2UgZm9yCm5y X3BhZ2VzPTEuCgpXb3VsZCBjaGFuZ2luZyB0aGUgbmFtZSB0byB2bWZfaXNfbGFyZ2VfZm9saW9f c3VpdGFibGUoKSBoZWxwIGhlcmU/CgoKPiAKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBy ZXR1cm4gZmFsc2U7Cj4+ICt9Cj4+ICsKPj4gKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVH RVBBR0UKPj4gK3N0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZt X2ZhdWx0ICp2bWYpCj4+ICt7Cj4+ICvCoMKgwqAgZ2ZwX3QgZ2ZwOwo+PiArwqDCoMKgIHB0ZV90 ICpwdGU7Cj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBhZGRyOwo+PiArwqDCoMKgIHN0cnVjdCBm b2xpbyAqZm9saW87Cj4+ICvCoMKgwqAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYt PnZtYTsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgb3JkZXJzOwo+PiArwqDCoMKgIGludCBvcmRl cjsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIElmIHVmZmQgaXMgYWN0aXZlIGZv ciB0aGUgdm1hIHdlIG5lZWQgcGVyLXBhZ2UgZmF1bHQgZmlkZWxpdHkgdG8KPj4gK8KgwqDCoMKg ICogbWFpbnRhaW4gdGhlIHVmZmQgc2VtYW50aWNzLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDC oCBpZiAodXNlcmZhdWx0ZmRfYXJtZWQodm1hKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFs bGJhY2s7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBHZXQgYSBsaXN0IG9mIGFs bCB0aGUgKGxhcmdlKSBvcmRlcnMgYmVsb3cgUE1EX09SREVSIHRoYXQgYXJlIGVuYWJsZWQKPj4g K8KgwqDCoMKgICogZm9yIHRoaXMgdm1hLiBUaGVuIGZpbHRlciBvdXQgdGhlIG9yZGVycyB0aGF0 IGNhbid0IGJlIGFsbG9jYXRlZCBvdmVyCj4+ICvCoMKgwqDCoCAqIHRoZSBmYXVsdGluZyBhZGRy ZXNzIGFuZCBzdGlsbCBiZSBmdWxseSBjb250YWluZWQgaW4gdGhlIHZtYS4KPj4gK8KgwqDCoMKg ICovCj4+ICvCoMKgwqAgb3JkZXJzID0gaHVnZXBhZ2Vfdm1hX2NoZWNrKHZtYSwgdm1hLT52bV9m bGFncywgZmFsc2UsIHRydWUsIHRydWUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBCSVQoUE1EX09SREVSKSAtIDEpOwo+PiArwqDCoMKgIG9yZGVycyA9IHRyYW5z aHVnZV92bWFfc3VpdGFibGUodm1hLCB2bWYtPmFkZHJlc3MsIG9yZGVycyk7Cj4+ICsKPj4gK8Kg wqDCoCBpZiAoIW9yZGVycykKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFsbGJhY2s7Cj4+ICsK Pj4gK8KgwqDCoCBwdGUgPSBwdGVfb2Zmc2V0X21hcCh2bWYtPnBtZCwgdm1mLT5hZGRyZXNzICYg UE1EX01BU0spOwo+PiArwqDCoMKgIGlmICghcHRlKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IEVSUl9QVFIoLUVBR0FJTik7Cj4gCj4gcHRlX29mZnNldF9tYXAoKSBjYW4gb25seSBmYWlsIGR1 ZSB0bzoKPiAKPiDCoMKgwqAgYSkgV3JvbmcgcG1kIHR5cGUuIFRoZXNlIGluY2x1ZGU6Cj4gwqDC oMKgwqDCoMKgwqAgcG1kX25vbmUKPiDCoMKgwqDCoMKgwqDCoCBwbWRfYmFkCj4gwqDCoMKgwqDC oMKgwqAgcG1kIG1pZ3JhdGlvbiBlbnRyeQo+IMKgwqDCoMKgwqDCoMKgIHBtZF90cmFuc19odWdl Cj4gwqDCoMKgwqDCoMKgwqAgcG1kX2Rldm1hcAo+IAo+IMKgwqDCoCBiKSBfX3B0ZV9tYXAoKSBm YWlsdXJlCj4gCj4gRm9yIChhKSwgd2h5IGlzIGl0IHRoYXQgLUVBR0FJTiBpcyB1c2VkIGhlcmU/ IEkgc2VlIHRoYXQgdGhhdAo+IHdpbGwgbGVhZCB0byBhIHJlLWZhdWx0LCBJIGdvdCB0aGF0IGZh ciwgYnV0IGFtIG1pc3Npbmcgc29tZXRoaW5nCj4gc3RpbGwuCj4gCj4gRm9yIChiKSwgc2FtZSBx dWVzdGlvbiwgYWN0dWFsbHkuIEknbSBub3QgY29tcGxldGVseSBzdXJlIHdoeQo+IHdoeSBhIHJl dHJ5IGlzIGdvaW5nIHRvIGZpeCBhIF9fcHRlX21hcCgpIGZhaWx1cmU/CgpJJ20gbm90IGdvaW5n IHRvIGNsYWltIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBkZXRhaWxzIG9mIHRoaXMuIEJ1dCB0aGlz IGlzIGR1ZSB0bwphIGNoYW5nZSB0aGF0IEh1Z2ggaW50cm9kdWNlZCBhbmQgd2UgY29uY2x1ZGVk IGF0IFsxXSB0aGF0IGl0cyBhbHdheXMgY29ycmVjdCB0bwpyZXR1cm4gRUFHQUlOIGhlcmUgdG8g cmVydW4gdGhlIGZhdWx0LiBJbiBmYWN0LCB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u CnB0ZV9vZmZzZXRfbWFwKCkgc2hvdWxkIG5ldmVyIGZhaWwgZm9yIGFub24gSUlVQywgYnV0IHRo ZSB2aWV3IHdhcyB0aGF0IEVBR0FJTgptYWtlcyBpdCBzYWZlIGZvciB0b21vcnJvdywgYW5kIGJl Y2F1c2UgdGhpcyB3b3VsZCBvbmx5IGZhaWwgZHVlIHRvIGEgcmFjZSwKcmV0cnlpbmcgaXMgY29y cmVjdC4KClsxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1tbS84YmRmZDhkOC01NjYy LTQ2MTUtODZkYy1kNjAyNTliZDE2ZEBnb29nbGUuY29tLwoKCj4gCj4gCj4+ICsKPj4gK8KgwqDC oCBvcmRlciA9IGZpcnN0X29yZGVyKG9yZGVycyk7Cj4+ICvCoMKgwqAgd2hpbGUgKG9yZGVycykg ewo+PiArwqDCoMKgwqDCoMKgwqAgYWRkciA9IEFMSUdOX0RPV04odm1mLT5hZGRyZXNzLCBQQUdF X1NJWkUgPDwgb3JkZXIpOwo+PiArwqDCoMKgwqDCoMKgwqAgdm1mLT5wdGUgPSBwdGUgKyBwdGVf aW5kZXgoYWRkcik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXZtZl9wdGVfcmFuZ2VfY2hhbmdl ZCh2bWYsIDEgPDwgb3JkZXIpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4g K8KgwqDCoMKgwqDCoMKgIG9yZGVyID0gbmV4dF9vcmRlcigmb3JkZXJzLCBvcmRlcik7Cj4+ICvC oMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgdm1mLT5wdGUgPSBOVUxMOwo+PiArwqDCoMKgIHB0ZV91 bm1hcChwdGUpOwo+PiArCj4+ICvCoMKgwqAgZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpOwo+ PiArCj4+ICvCoMKgwqAgd2hpbGUgKG9yZGVycykgewo+PiArwqDCoMKgwqDCoMKgwqAgYWRkciA9 IEFMSUdOX0RPV04odm1mLT5hZGRyZXNzLCBQQUdFX1NJWkUgPDwgb3JkZXIpOwo+PiArwqDCoMKg wqDCoMKgwqAgZm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyLCB0 cnVlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChmb2xpbykgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjbGVhcl9odWdlX3BhZ2UoJmZvbGlvLT5wYWdlLCBhZGRyLCAxIDw8IG9yZGVyKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGZvbGlvOwo+PiArwqDCoMKgwqDCoMKg wqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgb3JkZXIgPSBuZXh0X29yZGVyKCZvcmRlcnMsIG9yZGVy KTsKPj4gK8KgwqDCoCB9Cj4gCj4gQW5kIGZpbmFsbHk6IGlzIGl0IGFjY3VyYXRlIHRvIHNheSB0 aGF0IHRoZXJlIGFyZSAqbm8qIHNwZWNpYWwKPiBwYWdlIGZsYWdzIGJlaW5nIHNldCwgZm9yIFBU RS1tYXBwZWQgVEhQcz8gSSBkb24ndCBzZWUgYW55IGhlcmUsCj4gYnV0IHdhbnQgdG8gY29uZmly bS4KClRoZSBwYWdlIGZsYWdzIGFyZSBjb21pbmcgZnJvbSAnZ2ZwID0gdm1hX3RocF9nZnBfbWFz ayh2bWEpJywgd2hpY2ggcHVsbHMgaW4gdGhlCmNvcnJlY3QgZmxhZ3MgYmFzZWQgb24gdHJhbnNw YXJlbnRfaHVnZXBhZ2UvZGVmcmFnIGZpbGUuCgo+IAo+IAo+IHRoYW5rcywKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1h aWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==