From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0855AFC11; Thu, 28 Mar 2024 15:33:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711639996; cv=none; b=VxWTV1TgIaHx9xyv/u8+xnusr9PaXibMBRK+c4C//g7NAp1sDv4u2VBXEWh7FyuJ+M5QlS4YfqSVUam48FelnKWdEgPWhTNjNbFiTz/2QIM0eIxMCVXRCWu+P22QDf4uBXDp+H0yftgOJdiclXWV/W+FWR/xJyD4BfcFXzTI4Vo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711639996; c=relaxed/simple; bh=fAKnJ+l/CeeAUwTfc1KZGm5gtMUfkHA9P1HwOy5rWGs=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=rKEnPGFwqM5jwNyO+kwJBuLXwW/4qiO48mLHFtV7QhocZ2jgb76eAyCTHtevl4TL/EBKSrAvuWbcga/sjNBPYeSGWITctFR0kofBZcxeN9gcblV44HenecthKmBz1pZufx+LIjP7UrFbSOn95BFNHRkD80/17qAnfCSjym4reU8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 82C99C433F1; Thu, 28 Mar 2024 15:33:12 +0000 (UTC) Date: Thu, 28 Mar 2024 15:33:10 +0000 From: Catalin Marinas To: Doug Anderson Cc: Alexander Viro , Christian Brauner , Andrew Morton , Mark Brown , Will Deacon , Dave Martin , Oleg Nesterov , linux-arm-kernel@lists.infradead.org, Matthew Wilcox , Eric Biederman , Jan Kara , Kees Cook , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH v2] regset: use kvzalloc() for regset_get_alloc() Message-ID: References: <20240205092626.v2.1.Id9ad163b60d21c9e56c2d686b0cc9083a8ba7924@changeid> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Thu, Mar 28, 2024 at 07:16:37AM -0700, Doug Anderson wrote: > On Mon, Feb 26, 2024 at 3:55 PM Doug Anderson wrote: > > On Mon, Feb 5, 2024 at 9:27 AM Douglas Anderson wrote: > > > While browsing through ChromeOS crash reports, I found one with an > > > allocation failure that looked like this: > > > > > > chrome: page allocation failure: order:7, > > > mode:0x40dc0(GFP_KERNEL|__GFP_COMP|__GFP_ZERO), > > > nodemask=(null),cpuset=urgent,mems_allowed=0 > > > CPU: 7 PID: 3295 Comm: chrome Not tainted > > > 5.15.133-20574-g8044615ac35c #1 (HASH:1162 1) > > > Hardware name: Google Lazor (rev3 - 8) with KB Backlight (DT) > > > Call trace: > > > ... > > > warn_alloc+0x104/0x174 > > > __alloc_pages+0x5f0/0x6e4 > > > kmalloc_order+0x44/0x98 > > > kmalloc_order_trace+0x34/0x124 > > > __kmalloc+0x228/0x36c > > > __regset_get+0x68/0xcc > > > regset_get_alloc+0x1c/0x28 > > > elf_core_dump+0x3d8/0xd8c > > > do_coredump+0xeb8/0x1378 > > > get_signal+0x14c/0x804 > > > ... > > > > > > An order 7 allocation is (1 << 7) contiguous pages, or 512K. It's not > > > a surprise that this allocation failed on a system that's been running > > > for a while. > > > > > > More digging showed that it was fairly easy to see the order 7 > > > allocation by just sending a SIGQUIT to chrome (or other processes) to > > > generate a core dump. The actual amount being allocated was 279,584 > > > bytes and it was for "core_note_type" NT_ARM_SVE. > > > > > > There was quite a bit of discussion [1] on the mailing lists in > > > response to my v1 patch attempting to switch to vmalloc. The overall > > > conclusion was that we could likely reduce the 279,584 byte allocation > > > by quite a bit and Mark Brown has sent a patch to that effect [2]. > > > However even with the 279,584 byte allocation gone there are still > > > 65,552 byte allocations. These are just barely more than the 65,536 > > > bytes and thus would require an order 5 allocation. > > > > > > An order 5 allocation is still something to avoid unless necessary and > > > nothing needs the memory here to be contiguous. Change the allocation > > > to kvzalloc() which should still be efficient for small allocations > > > but doesn't force the memory subsystem to work hard (and maybe fail) > > > at getting a large contiguous chunk. > > > > > > [1] https://lore.kernel.org/r/20240201171159.1.Id9ad163b60d21c9e56c2d686b0cc9083a8ba7924@changeid > > > [2] https://lore.kernel.org/r/20240203-arm64-sve-ptrace-regset-size-v1-1-2c3ba1386b9e@kernel.org > > > > > > Signed-off-by: Douglas Anderson > > > --- > > > > > > Changes in v2: > > > - Use kvzalloc() instead of vmalloc(). > > > - Update description based on v1 discussion. > > > > > > fs/binfmt_elf.c | 2 +- > > > kernel/regset.c | 6 +++--- > > > 2 files changed, 4 insertions(+), 4 deletions(-) > > > > Just wanted to check in to see if there's anything else that I need to > > do here. Mark's patch to avoid the order 7 allocations [1] has landed, > > but we still want this kvzalloc() because the order 5 allocations > > can't really be avoided. I'm happy to sit tight for longer but just > > wanted to make sure it was clear that we still want my patch _in > > addition_ to Mark's patch and to see if there was anything else you > > needed me to do. > > > > Thanks! > > > > [1] https://lore.kernel.org/r/20240213-arm64-sve-ptrace-regset-size-v2-1-c7600ca74b9b@kernel.org > > I'm not trying to be a pest here, so if this is on someone's todo list > and they'll get to it eventually then feel free to tell me to go away > and I'll snooze this for another few months. I just want to make sure > it's not forgotten. > > I've been assuming that someone like Al Viro or Christian Brauner > would land this patch eventually and I know Al responded rather > quickly to my v1 [2]. I think all of Al's issues were resolved by Mark > Brown's patch [1] (which has landed in the arm64 tree) and my updating > of the patch description in v2. I see that Al and Christian are > flagged as maintainers of "fs/binfmt_elf.c" which is one of the two > files I'm touching, so that's mostly why I was assuming they would > land it. > > ...but I realize that perhaps my assumptions are wrong and this needs > to go through a different maintainer. In this case (if I'm reading it > correctly) Al and Christian are listed because the file is under "fs" > even though this isn't _really_ much of a filesystem-related patch. > Perhaps this needs to go through something like Andrew Morton's tree > since he often picks up patches that have nowhere else to land? If > someone else has suggestions, I'm all ears. I'm also happy to repost > this patch in case it helps with a maintainer applying it. FWIW, for this patch: Reviewed-by: Catalin Marinas Yeah, normally Al or Christian would take it but with their ack we can also take it through the arm64 tree (or Andrew can pick it up through the mm tree). With Mark's fix, I assume this is no longer urgent, cc stable material, but rather something nice in the future to reduce the risk of allocation failure on this path. -- Catalin 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 6ADE2C54E67 for ; Thu, 28 Mar 2024 15:33:34 +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:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=TaiId8t2x+mRwyDlRh/6hIRZYGOq98fgieemkvOongM=; b=04Co9OBWUyAIQd 3j0+Rg5thobLL5TN+sFhiYl6tFQLHqi3PYyDC0iMB2w31h8MrwmIjdjRCVJVpducEKlJsaWk1pQdt 0t7e7c9dKGgk90Kbi+bJicfQZLJdmpQHoqbaWjLJoB+3o4MO1Zr0fctOiby0lz8j8q5wlsAyZisSI AUFxEWoKft/cxzBfyf8UQp6Bes+qN4kaldiaDGPN261ah6vOmqvwfbOsywq1NE1rxtlzI9enpFlLd axuRkvkq3IrvsBJICWC9o5JA9PrwbMeyt6yl4laEdka2o2TqfQRZAFFtIRSEIoRsQBpi6Hy2rOL6i oYfTMCCAY8bNfh6iyaFg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rprkn-0000000EWp8-2mDE; Thu, 28 Mar 2024 15:33:21 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rprkk-0000000EWo9-3HK9 for linux-arm-kernel@lists.infradead.org; Thu, 28 Mar 2024 15:33:20 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 4E442CE2BE9; Thu, 28 Mar 2024 15:33:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 82C99C433F1; Thu, 28 Mar 2024 15:33:12 +0000 (UTC) Date: Thu, 28 Mar 2024 15:33:10 +0000 From: Catalin Marinas To: Doug Anderson Cc: Alexander Viro , Christian Brauner , Andrew Morton , Mark Brown , Will Deacon , Dave Martin , Oleg Nesterov , linux-arm-kernel@lists.infradead.org, Matthew Wilcox , Eric Biederman , Jan Kara , Kees Cook , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH v2] regset: use kvzalloc() for regset_get_alloc() Message-ID: References: <20240205092626.v2.1.Id9ad163b60d21c9e56c2d686b0cc9083a8ba7924@changeid> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240328_083319_209038_C095D765 X-CRM114-Status: GOOD ( 47.64 ) 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 T24gVGh1LCBNYXIgMjgsIDIwMjQgYXQgMDc6MTY6MzdBTSAtMDcwMCwgRG91ZyBBbmRlcnNvbiB3 cm90ZToKPiBPbiBNb24sIEZlYiAyNiwgMjAyNCBhdCAzOjU14oCvUE0gRG91ZyBBbmRlcnNvbiA8 ZGlhbmRlcnNAY2hyb21pdW0ub3JnPiB3cm90ZToKPiA+IE9uIE1vbiwgRmViIDUsIDIwMjQgYXQg OToyN+KAr0FNIERvdWdsYXMgQW5kZXJzb24gPGRpYW5kZXJzQGNocm9taXVtLm9yZz4gd3JvdGU6 Cj4gPiA+IFdoaWxlIGJyb3dzaW5nIHRocm91Z2ggQ2hyb21lT1MgY3Jhc2ggcmVwb3J0cywgSSBm b3VuZCBvbmUgd2l0aCBhbgo+ID4gPiBhbGxvY2F0aW9uIGZhaWx1cmUgdGhhdCBsb29rZWQgbGlr ZSB0aGlzOgo+ID4gPgo+ID4gPiAgIGNocm9tZTogcGFnZSBhbGxvY2F0aW9uIGZhaWx1cmU6IG9y ZGVyOjcsCj4gPiA+ICAgICAgICAgICBtb2RlOjB4NDBkYzAoR0ZQX0tFUk5FTHxfX0dGUF9DT01Q fF9fR0ZQX1pFUk8pLAo+ID4gPiAgICAgICAgICAgbm9kZW1hc2s9KG51bGwpLGNwdXNldD11cmdl bnQsbWVtc19hbGxvd2VkPTAKPiA+ID4gICBDUFU6IDcgUElEOiAzMjk1IENvbW06IGNocm9tZSBO b3QgdGFpbnRlZAo+ID4gPiAgICAgICAgICAgNS4xNS4xMzMtMjA1NzQtZzgwNDQ2MTVhYzM1YyAj MSAoSEFTSDoxMTYyIDEpCj4gPiA+ICAgSGFyZHdhcmUgbmFtZTogR29vZ2xlIExhem9yIChyZXYz IC0gOCkgd2l0aCBLQiBCYWNrbGlnaHQgKERUKQo+ID4gPiAgIENhbGwgdHJhY2U6Cj4gPiA+ICAg Li4uCj4gPiA+ICAgd2Fybl9hbGxvYysweDEwNC8weDE3NAo+ID4gPiAgIF9fYWxsb2NfcGFnZXMr MHg1ZjAvMHg2ZTQKPiA+ID4gICBrbWFsbG9jX29yZGVyKzB4NDQvMHg5OAo+ID4gPiAgIGttYWxs b2Nfb3JkZXJfdHJhY2UrMHgzNC8weDEyNAo+ID4gPiAgIF9fa21hbGxvYysweDIyOC8weDM2Ywo+ ID4gPiAgIF9fcmVnc2V0X2dldCsweDY4LzB4Y2MKPiA+ID4gICByZWdzZXRfZ2V0X2FsbG9jKzB4 MWMvMHgyOAo+ID4gPiAgIGVsZl9jb3JlX2R1bXArMHgzZDgvMHhkOGMKPiA+ID4gICBkb19jb3Jl ZHVtcCsweGViOC8weDEzNzgKPiA+ID4gICBnZXRfc2lnbmFsKzB4MTRjLzB4ODA0Cj4gPiA+ICAg Li4uCj4gPiA+Cj4gPiA+IEFuIG9yZGVyIDcgYWxsb2NhdGlvbiBpcyAoMSA8PCA3KSBjb250aWd1 b3VzIHBhZ2VzLCBvciA1MTJLLiBJdCdzIG5vdAo+ID4gPiBhIHN1cnByaXNlIHRoYXQgdGhpcyBh bGxvY2F0aW9uIGZhaWxlZCBvbiBhIHN5c3RlbSB0aGF0J3MgYmVlbiBydW5uaW5nCj4gPiA+IGZv ciBhIHdoaWxlLgo+ID4gPgo+ID4gPiBNb3JlIGRpZ2dpbmcgc2hvd2VkIHRoYXQgaXQgd2FzIGZh aXJseSBlYXN5IHRvIHNlZSB0aGUgb3JkZXIgNwo+ID4gPiBhbGxvY2F0aW9uIGJ5IGp1c3Qgc2Vu ZGluZyBhIFNJR1FVSVQgdG8gY2hyb21lIChvciBvdGhlciBwcm9jZXNzZXMpIHRvCj4gPiA+IGdl bmVyYXRlIGEgY29yZSBkdW1wLiBUaGUgYWN0dWFsIGFtb3VudCBiZWluZyBhbGxvY2F0ZWQgd2Fz IDI3OSw1ODQKPiA+ID4gYnl0ZXMgYW5kIGl0IHdhcyBmb3IgImNvcmVfbm90ZV90eXBlIiBOVF9B Uk1fU1ZFLgo+ID4gPgo+ID4gPiBUaGVyZSB3YXMgcXVpdGUgYSBiaXQgb2YgZGlzY3Vzc2lvbiBb MV0gb24gdGhlIG1haWxpbmcgbGlzdHMgaW4KPiA+ID4gcmVzcG9uc2UgdG8gbXkgdjEgcGF0Y2gg YXR0ZW1wdGluZyB0byBzd2l0Y2ggdG8gdm1hbGxvYy4gVGhlIG92ZXJhbGwKPiA+ID4gY29uY2x1 c2lvbiB3YXMgdGhhdCB3ZSBjb3VsZCBsaWtlbHkgcmVkdWNlIHRoZSAyNzksNTg0IGJ5dGUgYWxs b2NhdGlvbgo+ID4gPiBieSBxdWl0ZSBhIGJpdCBhbmQgTWFyayBCcm93biBoYXMgc2VudCBhIHBh dGNoIHRvIHRoYXQgZWZmZWN0IFsyXS4KPiA+ID4gSG93ZXZlciBldmVuIHdpdGggdGhlIDI3OSw1 ODQgYnl0ZSBhbGxvY2F0aW9uIGdvbmUgdGhlcmUgYXJlIHN0aWxsCj4gPiA+IDY1LDU1MiBieXRl IGFsbG9jYXRpb25zLiBUaGVzZSBhcmUganVzdCBiYXJlbHkgbW9yZSB0aGFuIHRoZSA2NSw1MzYK PiA+ID4gYnl0ZXMgYW5kIHRodXMgd291bGQgcmVxdWlyZSBhbiBvcmRlciA1IGFsbG9jYXRpb24u Cj4gPiA+Cj4gPiA+IEFuIG9yZGVyIDUgYWxsb2NhdGlvbiBpcyBzdGlsbCBzb21ldGhpbmcgdG8g YXZvaWQgdW5sZXNzIG5lY2Vzc2FyeSBhbmQKPiA+ID4gbm90aGluZyBuZWVkcyB0aGUgbWVtb3J5 IGhlcmUgdG8gYmUgY29udGlndW91cy4gQ2hhbmdlIHRoZSBhbGxvY2F0aW9uCj4gPiA+IHRvIGt2 emFsbG9jKCkgd2hpY2ggc2hvdWxkIHN0aWxsIGJlIGVmZmljaWVudCBmb3Igc21hbGwgYWxsb2Nh dGlvbnMKPiA+ID4gYnV0IGRvZXNuJ3QgZm9yY2UgdGhlIG1lbW9yeSBzdWJzeXN0ZW0gdG8gd29y ayBoYXJkIChhbmQgbWF5YmUgZmFpbCkKPiA+ID4gYXQgZ2V0dGluZyBhIGxhcmdlIGNvbnRpZ3Vv dXMgY2h1bmsuCj4gPiA+Cj4gPiA+IFsxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMjQw MjAxMTcxMTU5LjEuSWQ5YWQxNjNiNjBkMjFjOWU1NmMyZDY4NmIwY2M5MDgzYThiYTc5MjRAY2hh bmdlaWQKPiA+ID4gWzJdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvMjAyNDAyMDMtYXJtNjQt c3ZlLXB0cmFjZS1yZWdzZXQtc2l6ZS12MS0xLTJjM2JhMTM4NmI5ZUBrZXJuZWwub3JnCj4gPiA+ Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IERvdWdsYXMgQW5kZXJzb24gPGRpYW5kZXJzQGNocm9taXVt Lm9yZz4KPiA+ID4gLS0tCj4gPiA+Cj4gPiA+IENoYW5nZXMgaW4gdjI6Cj4gPiA+IC0gVXNlIGt2 emFsbG9jKCkgaW5zdGVhZCBvZiB2bWFsbG9jKCkuCj4gPiA+IC0gVXBkYXRlIGRlc2NyaXB0aW9u IGJhc2VkIG9uIHYxIGRpc2N1c3Npb24uCj4gPiA+Cj4gPiA+ICBmcy9iaW5mbXRfZWxmLmMgfCAy ICstCj4gPiA+ICBrZXJuZWwvcmVnc2V0LmMgfCA2ICsrKy0tLQo+ID4gPiAgMiBmaWxlcyBjaGFu Z2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4gPgo+ID4gSnVzdCB3YW50ZWQg dG8gY2hlY2sgaW4gdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSB0aGF0IEkgbmVlZCB0 bwo+ID4gZG8gaGVyZS4gTWFyaydzIHBhdGNoIHRvIGF2b2lkIHRoZSBvcmRlciA3IGFsbG9jYXRp b25zIFsxXSBoYXMgbGFuZGVkLAo+ID4gYnV0IHdlIHN0aWxsIHdhbnQgdGhpcyBrdnphbGxvYygp IGJlY2F1c2UgdGhlIG9yZGVyIDUgYWxsb2NhdGlvbnMKPiA+IGNhbid0IHJlYWxseSBiZSBhdm9p ZGVkLiBJJ20gaGFwcHkgdG8gc2l0IHRpZ2h0IGZvciBsb25nZXIgYnV0IGp1c3QKPiA+IHdhbnRl ZCB0byBtYWtlIHN1cmUgaXQgd2FzIGNsZWFyIHRoYXQgd2Ugc3RpbGwgd2FudCBteSBwYXRjaCBf aW4KPiA+IGFkZGl0aW9uXyB0byBNYXJrJ3MgcGF0Y2ggYW5kIHRvIHNlZSBpZiB0aGVyZSB3YXMg YW55dGhpbmcgZWxzZSB5b3UKPiA+IG5lZWRlZCBtZSB0byBkby4KPiA+Cj4gPiBUaGFua3MhCj4g Pgo+ID4gWzFdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvMjAyNDAyMTMtYXJtNjQtc3ZlLXB0 cmFjZS1yZWdzZXQtc2l6ZS12Mi0xLWM3NjAwY2E3NGI5YkBrZXJuZWwub3JnCj4gCj4gSSdtIG5v dCB0cnlpbmcgdG8gYmUgYSBwZXN0IGhlcmUsIHNvIGlmIHRoaXMgaXMgb24gc29tZW9uZSdzIHRv ZG8gbGlzdAo+IGFuZCB0aGV5J2xsIGdldCB0byBpdCBldmVudHVhbGx5IHRoZW4gZmVlbCBmcmVl IHRvIHRlbGwgbWUgdG8gZ28gYXdheQo+IGFuZCBJJ2xsIHNub296ZSB0aGlzIGZvciBhbm90aGVy IGZldyBtb250aHMuIEkganVzdCB3YW50IHRvIG1ha2Ugc3VyZQo+IGl0J3Mgbm90IGZvcmdvdHRl bi4KPiAKPiBJJ3ZlIGJlZW4gYXNzdW1pbmcgdGhhdCBzb21lb25lIGxpa2UgQWwgVmlybyBvciBD aHJpc3RpYW4gQnJhdW5lcgo+IHdvdWxkIGxhbmQgdGhpcyBwYXRjaCBldmVudHVhbGx5IGFuZCBJ IGtub3cgQWwgcmVzcG9uZGVkIHJhdGhlcgo+IHF1aWNrbHkgdG8gbXkgdjEgWzJdLiBJIHRoaW5r IGFsbCBvZiBBbCdzIGlzc3VlcyB3ZXJlIHJlc29sdmVkIGJ5IE1hcmsKPiBCcm93bidzIHBhdGNo IFsxXSAod2hpY2ggaGFzIGxhbmRlZCBpbiB0aGUgYXJtNjQgdHJlZSkgYW5kIG15IHVwZGF0aW5n Cj4gb2YgdGhlIHBhdGNoIGRlc2NyaXB0aW9uIGluIHYyLiBJIHNlZSB0aGF0IEFsIGFuZCBDaHJp c3RpYW4gYXJlCj4gZmxhZ2dlZCBhcyBtYWludGFpbmVycyBvZiAiZnMvYmluZm10X2VsZi5jIiB3 aGljaCBpcyBvbmUgb2YgdGhlIHR3bwo+IGZpbGVzIEknbSB0b3VjaGluZywgc28gdGhhdCdzIG1v c3RseSB3aHkgSSB3YXMgYXNzdW1pbmcgdGhleSB3b3VsZAo+IGxhbmQgaXQuCj4gCj4gLi4uYnV0 IEkgcmVhbGl6ZSB0aGF0IHBlcmhhcHMgbXkgYXNzdW1wdGlvbnMgYXJlIHdyb25nIGFuZCB0aGlz IG5lZWRzCj4gdG8gZ28gdGhyb3VnaCBhIGRpZmZlcmVudCBtYWludGFpbmVyLiBJbiB0aGlzIGNh c2UgKGlmIEknbSByZWFkaW5nIGl0Cj4gY29ycmVjdGx5KSBBbCBhbmQgQ2hyaXN0aWFuIGFyZSBs aXN0ZWQgYmVjYXVzZSB0aGUgZmlsZSBpcyB1bmRlciAiZnMiCj4gZXZlbiB0aG91Z2ggdGhpcyBp c24ndCBfcmVhbGx5XyBtdWNoIG9mIGEgZmlsZXN5c3RlbS1yZWxhdGVkIHBhdGNoLgo+IFBlcmhh cHMgdGhpcyBuZWVkcyB0byBnbyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIEFuZHJldyBNb3J0b24n cyB0cmVlCj4gc2luY2UgaGUgb2Z0ZW4gcGlja3MgdXAgcGF0Y2hlcyB0aGF0IGhhdmUgbm93aGVy ZSBlbHNlIHRvIGxhbmQ/IElmCj4gc29tZW9uZSBlbHNlIGhhcyBzdWdnZXN0aW9ucywgSSdtIGFs bCBlYXJzLiBJJ20gYWxzbyBoYXBweSB0byByZXBvc3QKPiB0aGlzIHBhdGNoIGluIGNhc2UgaXQg aGVscHMgd2l0aCBhIG1haW50YWluZXIgYXBwbHlpbmcgaXQuCgpGV0lXLCBmb3IgdGhpcyBwYXRj aDoKClJldmlld2VkLWJ5OiBDYXRhbGluIE1hcmluYXMgPGNhdGFsaW4ubWFyaW5hc0Bhcm0uY29t PgoKWWVhaCwgbm9ybWFsbHkgQWwgb3IgQ2hyaXN0aWFuIHdvdWxkIHRha2UgaXQgYnV0IHdpdGgg dGhlaXIgYWNrIHdlIGNhbgphbHNvIHRha2UgaXQgdGhyb3VnaCB0aGUgYXJtNjQgdHJlZSAob3Ig QW5kcmV3IGNhbiBwaWNrIGl0IHVwIHRocm91Z2gKdGhlIG1tIHRyZWUpLgoKV2l0aCBNYXJrJ3Mg Zml4LCBJIGFzc3VtZSB0aGlzIGlzIG5vIGxvbmdlciB1cmdlbnQsIGNjIHN0YWJsZSBtYXRlcmlh bCwKYnV0IHJhdGhlciBzb21ldGhpbmcgbmljZSBpbiB0aGUgZnV0dXJlIHRvIHJlZHVjZSB0aGUg cmlzayBvZiBhbGxvY2F0aW9uCmZhaWx1cmUgb24gdGhpcyBwYXRoLgoKLS0gCkNhdGFsaW4KCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1r ZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJu ZWwK