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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 69BA3C433F5 for ; Thu, 2 Dec 2021 01:35:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346191AbhLBBi5 (ORCPT ); Wed, 1 Dec 2021 20:38:57 -0500 Received: from szxga02-in.huawei.com ([45.249.212.188]:16333 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235755AbhLBBi4 (ORCPT ); Wed, 1 Dec 2021 20:38:56 -0500 Received: from dggpemm500022.china.huawei.com (unknown [172.30.72.56]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4J4JRR61Stz91QZ; Thu, 2 Dec 2021 09:34:59 +0800 (CST) Received: from dggpemm500001.china.huawei.com (7.185.36.107) by dggpemm500022.china.huawei.com (7.185.36.162) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Thu, 2 Dec 2021 09:35:33 +0800 Received: from [10.174.177.243] (10.174.177.243) by dggpemm500001.china.huawei.com (7.185.36.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2308.20; Thu, 2 Dec 2021 09:35:32 +0800 Message-ID: <811af0bc-0c99-37f6-a39a-095418b10661@huawei.com> Date: Thu, 2 Dec 2021 09:35:31 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: [PATCH v2] arm64: Enable KCSAN Content-Language: en-US To: Mark Rutland CC: Marco Elver , Catalin Marinas , Will Deacon , , , References: <20211129145732.27000-1-wangkefeng.wang@huawei.com> From: Kefeng Wang In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.174.177.243] X-ClientProxiedBy: dggeme705-chm.china.huawei.com (10.1.199.101) To dggpemm500001.china.huawei.com (7.185.36.107) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2021/12/1 19:53, Mark Rutland wrote: > Hi Kefeng, > > On Mon, Nov 29, 2021 at 10:57:32PM +0800, Kefeng Wang wrote: >> This patch enables KCSAN for arm64, with updates to build rules >> to not use KCSAN for several incompatible compilation units. >> >> Resent GCC version(at least GCC10) made outline-atomics as the >> default option(unlike Clang), which will cause linker errors >> for kernel/kcsan/core.o. >> >> Disables the out-of-line atomics by no-outline-atomics to fix >> the linker errors. >> >> Tested selftest and kcsan_test(built with GCC11 and Clang 13), >> and all passed. > Nice! > > I think there are a few additional bits and pieces we'll need: > > * Prior to clang 12.0.0, KCSAN would produce warnings with BTI, as I found in: > > https://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git/commit/?h=arm64/kcsan&id=2d67c39ae4f619ca94d9790e09186e77922fa826 > > Since BTI is in defconfig, I think arm64's Kconfig should require a minimum > of clang 12.0.0 to enable KCSAN. I don't have different clang version to test,  when check KCSAN, commit eb32f9f990d9 ("kcsan: Improve some Kconfig comments") saids,     The compiler instruments plain compound read-write operations     differently (++, --, +=, -=, |=, &=, etc.), which allows KCSAN to     distinguish them from other plain accesses. This is currently     supported by Clang 12 or later. Should we add a  "depends on CLANG_VERSION >= 120000" > > * In the past clang did not have an attribute to suppress tsan instrumenation > and would instrument noinstr regions. I'm not sure when clang gained the > relevant attribute to supress this, but we will need to depend on this > existing, either based on the clang version or with a test for the attribute. > > (If we're lucky, clang 12.0.0 is sufficient, and we solve BTI and this in one > go). > > I *think* GCC always had an attribute, but I'm not certain. > > Marco, is there an existing dependency somewhere for this to work on x86? I > thought there was an objtool pass to NOP this out, but I couldn't find it in > mainline. If x86 is implicitly depending on a sufficiently recent version of > clang, we add something to the common KCSAN Kconfig for ARCH_WANTS_NO_INSTR? > > * There are some latent issues with some code (e.g. alternatives, patching, insn) > code being instrumentable even though this is unsound, and depending on > compiler choices this can happen to be fine or can result in boot-time > failures (I saw lockups when I started trying to add KCSAN for arm64). > > While this isn't just a KCSAN problem, fixing that requires some fairly > significant rework to a bunch of code, and until that's done we're on very > shaky ground. So I'd like to make KCSAN depend on EXPERT for now. > > I had an initial stab at fixing some of that, e.g. > > https://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git/log/?h=arm64/patching/rework > > Joey has started looking into this too. Thanks for your information,  I don't know about this. As your say, we could add a depend on EXPERT for now and more explanation into changlog. > > * When I last tested, for simple boots I would get frequent KCSAN splats for a > few common issues, and those drowned out all other reports. > > One case was manipulation of thread_info::flags, which Thomas Gleixner has > queued some fixes at: > > https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/log/?h=core/entry > > There were some other common failures, e.g. accesses to task_struct::on_cpu, > and I hadn't had the chance to investigate/fix those, beyond a (likely > unsound) hack: > > https://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git/commit/?h=arm64/kcsan&id=4fe9d6c2ef85257d80291086e4514eaaebd3504e > > It would be good if we could identify the most frequent problems (e.g. those > that will occur when just booting) before we enable this generally, to avoid > everyone racing to report/fix those as soon as we enable the feature. > > When you tested, did KCSAN flag anything beyond the selftests? Yes, there are some KCSAN reports, but this is not only exist on arm64, I saw  owner->on_cpu warning on x86 too, eg, we also hack to disable it via data_race. Reported by Kernel Concurrency Sanitizer on: CPU: 7 PID: 2530 Comm: syz-executor.11 Not tainted 5.10.0+ #113 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.104/01/2014 ================================================================== BUG: KCSAN: data-race in rwsem_spin_on_owner+0xf4/0x180 race at unknown origin, with read to 0xffff9767d3becfac of 4 bytes by task 18119 on cpu 0: rwsem_spin_on_owner+0xf4/0x180 rwsem_optimistic_spin+0x48/0x480 rwsem_down_read_slowpath+0x4a0/0x670 down_read+0x69/0x190 process_vm_rw+0x41e/0x840 __x64_sys_process_vm_writev+0x76/0x90 do_syscall_64+0x37/0x50 entry_SYSCALL_64_after_hwframe+0x44/0xa9 > >> Signed-off-by: Kefeng Wang >> --- >> Tested on Qemu with clang 13 / gcc 11, based on 5.16-rc3. >> >> [ 0.221518] kcsan: enabled early >> [ 0.222422] kcsan: strict mode configured >> ... >> [ 5.839223] kcsan: selftest: 3/3 tests passed >> ... >> [ 517.895102] # kcsan: pass:24 fail:0 skip:0 total:24 >> [ 517.896393] # Totals: pass:168 fail:0 skip:0 total:168 >> [ 517.897502] ok 1 - kcsan >> >> v2: >> - tested on GCC11 and disable outline-atomics for kernel/kcsan/core.c >> suggested by Marco Elver >> >> arch/arm64/Kconfig | 1 + >> arch/arm64/kernel/vdso/Makefile | 1 + >> arch/arm64/kvm/hyp/nvhe/Makefile | 1 + >> kernel/kcsan/Makefile | 1 + >> 4 files changed, 4 insertions(+) > Aside from the `-mno-outline-atomics` portion, this looks basically the same as what I had in: > > https://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git/commit/?h=arm64/kcsan&id=2d67c39ae4f619ca94d9790e09186e77922fa826 > > ... so this looks good to me modulo the comments above. > > Thanks, > Mark. 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 1B50AC433EF for ; Thu, 2 Dec 2021 01:37:09 +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-Type: Content-Transfer-Encoding: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=YEl+F69b/eEPmOljffN/Hm/oaFRWUyuGBO7IpAsJSeU=; b=XAOReeFC7toUmm StUDV2vA3OGOwItSzr8eJnwKGOy3diklsfeXVC6QsOTDI9x1dzOC5lSxV8GUvzdc9v7X1heyHo9X5 hYng1FbRrXYXpIN34nDy6QHbCtC2+sL65eg4lFeDVEVJt516z+x4fFQVU2POEYh8YHcP2QtC3dn0E ww0PaSIurtEWjHiyTiGruEmdvGK2yt1oQY4FO7DphLvqIXWgt9gAeBkQ+NS2cN+aNS7G9O1r8fM6n 2P+EKsDoHbERs1plUl1g/zHf0mamtPjJ2EjAyE5428YnAU+hQ+jG9XE+yizCkEUM2TZQ1Q2UWJY/s pDMVCxNl+MoBFu2sOJBw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1msb0h-00AXPd-QP; Thu, 02 Dec 2021 01:35:43 +0000 Received: from szxga02-in.huawei.com ([45.249.212.188]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1msb0c-00AXO0-FT for linux-arm-kernel@lists.infradead.org; Thu, 02 Dec 2021 01:35:41 +0000 Received: from dggpemm500022.china.huawei.com (unknown [172.30.72.56]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4J4JRR61Stz91QZ; Thu, 2 Dec 2021 09:34:59 +0800 (CST) Received: from dggpemm500001.china.huawei.com (7.185.36.107) by dggpemm500022.china.huawei.com (7.185.36.162) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Thu, 2 Dec 2021 09:35:33 +0800 Received: from [10.174.177.243] (10.174.177.243) by dggpemm500001.china.huawei.com (7.185.36.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2308.20; Thu, 2 Dec 2021 09:35:32 +0800 Message-ID: <811af0bc-0c99-37f6-a39a-095418b10661@huawei.com> Date: Thu, 2 Dec 2021 09:35:31 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: [PATCH v2] arm64: Enable KCSAN Content-Language: en-US To: Mark Rutland CC: Marco Elver , Catalin Marinas , Will Deacon , , , References: <20211129145732.27000-1-wangkefeng.wang@huawei.com> From: Kefeng Wang In-Reply-To: X-Originating-IP: [10.174.177.243] X-ClientProxiedBy: dggeme705-chm.china.huawei.com (10.1.199.101) To dggpemm500001.china.huawei.com (7.185.36.107) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211201_173538_914292_111153B3 X-CRM114-Status: GOOD ( 36.59 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIDIwMjEvMTIvMSAxOTo1MywgTWFyayBSdXRsYW5kIHdyb3RlOgo+IEhpIEtlZmVuZywKPgo+ IE9uIE1vbiwgTm92IDI5LCAyMDIxIGF0IDEwOjU3OjMyUE0gKzA4MDAsIEtlZmVuZyBXYW5nIHdy b3RlOgo+PiBUaGlzIHBhdGNoIGVuYWJsZXMgS0NTQU4gZm9yIGFybTY0LCB3aXRoIHVwZGF0ZXMg dG8gYnVpbGQgcnVsZXMKPj4gdG8gbm90IHVzZSBLQ1NBTiBmb3Igc2V2ZXJhbCBpbmNvbXBhdGli bGUgY29tcGlsYXRpb24gdW5pdHMuCj4+Cj4+IFJlc2VudCBHQ0MgdmVyc2lvbihhdCBsZWFzdCBH Q0MxMCkgbWFkZSBvdXRsaW5lLWF0b21pY3MgYXMgdGhlCj4+IGRlZmF1bHQgb3B0aW9uKHVubGlr ZSBDbGFuZyksIHdoaWNoIHdpbGwgY2F1c2UgbGlua2VyIGVycm9ycwo+PiBmb3Iga2VybmVsL2tj c2FuL2NvcmUuby4KPj4KPj4gRGlzYWJsZXMgdGhlIG91dC1vZi1saW5lIGF0b21pY3MgYnkgbm8t b3V0bGluZS1hdG9taWNzIHRvIGZpeAo+PiB0aGUgbGlua2VyIGVycm9ycy4KPj4KPj4gVGVzdGVk IHNlbGZ0ZXN0IGFuZCBrY3Nhbl90ZXN0KGJ1aWx0IHdpdGggR0NDMTEgYW5kIENsYW5nIDEzKSwK Pj4gYW5kIGFsbCBwYXNzZWQuCj4gTmljZSEKPgo+IEkgdGhpbmsgdGhlcmUgYXJlIGEgZmV3IGFk ZGl0aW9uYWwgYml0cyBhbmQgcGllY2VzIHdlJ2xsIG5lZWQ6Cj4KPiAqIFByaW9yIHRvIGNsYW5n IDEyLjAuMCwgS0NTQU4gd291bGQgcHJvZHVjZSB3YXJuaW5ncyB3aXRoIEJUSSwgYXMgSSBmb3Vu ZCBpbjoKPgo+ICAgIGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwv Z2l0L21hcmsvbGludXguZ2l0L2NvbW1pdC8/aD1hcm02NC9rY3NhbiZpZD0yZDY3YzM5YWU0ZjYx OWNhOTRkOTc5MGUwOTE4NmU3NzkyMmZhODI2Cj4KPiAgICBTaW5jZSBCVEkgaXMgaW4gZGVmY29u ZmlnLCBJIHRoaW5rIGFybTY0J3MgS2NvbmZpZyBzaG91bGQgcmVxdWlyZSBhIG1pbmltdW0KPiAg ICBvZiBjbGFuZyAxMi4wLjAgdG8gZW5hYmxlIEtDU0FOLgoKSSBkb24ndCBoYXZlIGRpZmZlcmVu dCBjbGFuZyB2ZXJzaW9uIHRvIHRlc3QswqAgd2hlbiBjaGVjayBLQ1NBTiwKCmNvbW1pdCBlYjMy ZjlmOTkwZDkgKCJrY3NhbjogSW1wcm92ZSBzb21lIEtjb25maWcgY29tbWVudHMiKSBzYWlkcywK CgogwqDCoMKgIFRoZSBjb21waWxlciBpbnN0cnVtZW50cyBwbGFpbiBjb21wb3VuZCByZWFkLXdy aXRlIG9wZXJhdGlvbnMKIMKgwqDCoCBkaWZmZXJlbnRseSAoKyssIC0tLCArPSwgLT0sIHw9LCAm PSwgZXRjLiksIHdoaWNoIGFsbG93cyBLQ1NBTiB0bwogwqDCoMKgIGRpc3Rpbmd1aXNoIHRoZW0g ZnJvbSBvdGhlciBwbGFpbiBhY2Nlc3Nlcy4gVGhpcyBpcyBjdXJyZW50bHkKIMKgwqDCoCBzdXBw b3J0ZWQgYnkgQ2xhbmcgMTIgb3IgbGF0ZXIuCgpTaG91bGQgd2UgYWRkIGHCoCAiZGVwZW5kcyBv biBDTEFOR19WRVJTSU9OID49IDEyMDAwMCIKCgo+Cj4gKiBJbiB0aGUgcGFzdCBjbGFuZyBkaWQg bm90IGhhdmUgYW4gYXR0cmlidXRlIHRvIHN1cHByZXNzIHRzYW4gaW5zdHJ1bWVuYXRpb24KPiAg ICBhbmQgd291bGQgaW5zdHJ1bWVudCBub2luc3RyIHJlZ2lvbnMuIEknbSBub3Qgc3VyZSB3aGVu IGNsYW5nIGdhaW5lZCB0aGUKPiAgICByZWxldmFudCBhdHRyaWJ1dGUgdG8gc3VwcmVzcyB0aGlz LCBidXQgd2Ugd2lsbCBuZWVkIHRvIGRlcGVuZCBvbiB0aGlzCj4gICAgZXhpc3RpbmcsIGVpdGhl ciBiYXNlZCBvbiB0aGUgY2xhbmcgdmVyc2lvbiBvciB3aXRoIGEgdGVzdCBmb3IgdGhlIGF0dHJp YnV0ZS4KPgo+ICAgIChJZiB3ZSdyZSBsdWNreSwgY2xhbmcgMTIuMC4wIGlzIHN1ZmZpY2llbnQs IGFuZCB3ZSBzb2x2ZSBCVEkgYW5kIHRoaXMgaW4gb25lCj4gICAgZ28pLgo+Cj4gICAgSSAqdGhp bmsqIEdDQyBhbHdheXMgaGFkIGFuIGF0dHJpYnV0ZSwgYnV0IEknbSBub3QgY2VydGFpbi4KPgo+ ICAgIE1hcmNvLCBpcyB0aGVyZSBhbiBleGlzdGluZyBkZXBlbmRlbmN5IHNvbWV3aGVyZSBmb3Ig dGhpcyB0byB3b3JrIG9uIHg4Nj8gSQo+ICAgIHRob3VnaHQgdGhlcmUgd2FzIGFuIG9ianRvb2wg cGFzcyB0byBOT1AgdGhpcyBvdXQsIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQgaW4KPiAgICBtYWlu bGluZS4gSWYgeDg2IGlzIGltcGxpY2l0bHkgZGVwZW5kaW5nIG9uIGEgc3VmZmljaWVudGx5IHJl Y2VudCB2ZXJzaW9uIG9mCj4gICAgY2xhbmcsIHdlIGFkZCBzb21ldGhpbmcgdG8gdGhlIGNvbW1v biBLQ1NBTiBLY29uZmlnIGZvciBBUkNIX1dBTlRTX05PX0lOU1RSPwo+Cj4gKiBUaGVyZSBhcmUg c29tZSBsYXRlbnQgaXNzdWVzIHdpdGggc29tZSBjb2RlIChlLmcuIGFsdGVybmF0aXZlcywgcGF0 Y2hpbmcsIGluc24pCj4gICAgY29kZSBiZWluZyBpbnN0cnVtZW50YWJsZSBldmVuIHRob3VnaCB0 aGlzIGlzIHVuc291bmQsIGFuZCBkZXBlbmRpbmcgb24KPiAgICBjb21waWxlciBjaG9pY2VzIHRo aXMgY2FuIGhhcHBlbiB0byBiZSBmaW5lIG9yIGNhbiByZXN1bHQgaW4gYm9vdC10aW1lCj4gICAg ZmFpbHVyZXMgKEkgc2F3IGxvY2t1cHMgd2hlbiBJIHN0YXJ0ZWQgdHJ5aW5nIHRvIGFkZCBLQ1NB TiBmb3IgYXJtNjQpLgo+Cj4gICAgV2hpbGUgdGhpcyBpc24ndCBqdXN0IGEgS0NTQU4gcHJvYmxl bSwgZml4aW5nIHRoYXQgcmVxdWlyZXMgc29tZSBmYWlybHkKPiAgICBzaWduaWZpY2FudCByZXdv cmsgdG8gYSBidW5jaCBvZiBjb2RlLCBhbmQgdW50aWwgdGhhdCdzIGRvbmUgd2UncmUgb24gdmVy eQo+ICAgIHNoYWt5IGdyb3VuZC4gU28gSSdkIGxpa2UgdG8gbWFrZSBLQ1NBTiBkZXBlbmQgb24g RVhQRVJUIGZvciBub3cuCj4KPiAgICBJIGhhZCBhbiBpbml0aWFsIHN0YWIgYXQgZml4aW5nIHNv bWUgb2YgdGhhdCwgZS5nLgo+Cj4gICAgaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xp bnV4L2tlcm5lbC9naXQvbWFyay9saW51eC5naXQvbG9nLz9oPWFybTY0L3BhdGNoaW5nL3Jld29y awo+ICAgIAo+ICAgIEpvZXkgaGFzIHN0YXJ0ZWQgbG9va2luZyBpbnRvIHRoaXMgdG9vLgoKVGhh bmtzIGZvciB5b3VyIGluZm9ybWF0aW9uLMKgIEkgZG9uJ3Qga25vdyBhYm91dCB0aGlzLiBBcyB5 b3VyIHNheSwgd2UgCmNvdWxkIGFkZCBhIGRlcGVuZCBvbiBFWFBFUlQKCmZvciBub3cgYW5kIG1v cmUgZXhwbGFuYXRpb24gaW50byBjaGFuZ2xvZy4KCj4KPiAqIFdoZW4gSSBsYXN0IHRlc3RlZCwg Zm9yIHNpbXBsZSBib290cyBJIHdvdWxkIGdldCBmcmVxdWVudCBLQ1NBTiBzcGxhdHMgZm9yIGEK PiAgICBmZXcgY29tbW9uIGlzc3VlcywgYW5kIHRob3NlIGRyb3duZWQgb3V0IGFsbCBvdGhlciBy ZXBvcnRzLgo+Cj4gICAgT25lIGNhc2Ugd2FzIG1hbmlwdWxhdGlvbiBvZiB0aHJlYWRfaW5mbzo6 ZmxhZ3MsIHdoaWNoIFRob21hcyBHbGVpeG5lciBoYXMKPiAgICBxdWV1ZWQgc29tZSBmaXhlcyBh dDoKPgo+ICAgIGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0 L3RpcC90aXAuZ2l0L2xvZy8/aD1jb3JlL2VudHJ5Cj4gICAKPiAgICBUaGVyZSB3ZXJlIHNvbWUg b3RoZXIgY29tbW9uIGZhaWx1cmVzLCBlLmcuIGFjY2Vzc2VzIHRvIHRhc2tfc3RydWN0Ojpvbl9j cHUsCj4gICAgYW5kIEkgaGFkbid0IGhhZCB0aGUgY2hhbmNlIHRvIGludmVzdGlnYXRlL2ZpeCB0 aG9zZSwgYmV5b25kIGEgKGxpa2VseQo+ICAgIHVuc291bmQpIGhhY2s6Cj4KPiAgICBodHRwczov L2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9tYXJrL2xpbnV4LmdpdC9j b21taXQvP2g9YXJtNjQva2NzYW4maWQ9NGZlOWQ2YzJlZjg1MjU3ZDgwMjkxMDg2ZTQ1MTRlYWFl YmQzNTA0ZQo+Cj4gICAgSXQgd291bGQgYmUgZ29vZCBpZiB3ZSBjb3VsZCBpZGVudGlmeSB0aGUg bW9zdCBmcmVxdWVudCBwcm9ibGVtcyAoZS5nLiB0aG9zZQo+ICAgIHRoYXQgd2lsbCBvY2N1ciB3 aGVuIGp1c3QgYm9vdGluZykgYmVmb3JlIHdlIGVuYWJsZSB0aGlzIGdlbmVyYWxseSwgdG8gYXZv aWQKPiAgICBldmVyeW9uZSByYWNpbmcgdG8gcmVwb3J0L2ZpeCB0aG9zZSBhcyBzb29uIGFzIHdl IGVuYWJsZSB0aGUgZmVhdHVyZS4KPgo+ICAgIFdoZW4geW91IHRlc3RlZCwgZGlkIEtDU0FOIGZs YWcgYW55dGhpbmcgYmV5b25kIHRoZSBzZWxmdGVzdHM/CgpZZXMsIHRoZXJlIGFyZSBzb21lIEtD U0FOIHJlcG9ydHMsIGJ1dCB0aGlzIGlzIG5vdCBvbmx5IGV4aXN0IG9uIGFybTY0LCAKSSBzYXfC oCBvd25lci0+b25fY3B1IHdhcm5pbmcKCm9uIHg4NiB0b28sIGVnLCB3ZSBhbHNvIGhhY2sgdG8g ZGlzYWJsZSBpdCB2aWEgZGF0YV9yYWNlLgoKUmVwb3J0ZWQgYnkgS2VybmVsIENvbmN1cnJlbmN5 IFNhbml0aXplciBvbjoKQ1BVOiA3IFBJRDogMjUzMCBDb21tOiBzeXotZXhlY3V0b3IuMTEgTm90 IHRhaW50ZWQgNS4xMC4wKyAjMTEzCkhhcmR3YXJlIG5hbWU6IFFFTVUgU3RhbmRhcmQgUEMgKGk0 NDBGWCArIFBJSVgsIDE5OTYpLCBCSU9TIDEuMTMuMC0xdWJ1bnR1MS4xMDQvMDEvMjAxNAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KQlVHOiBLQ1NBTjogZGF0YS1yYWNlIGluIHJ3c2VtX3NwaW5fb25fb3duZXIrMHhmNC8w eDE4MAoKcmFjZSBhdCB1bmtub3duIG9yaWdpbiwgd2l0aCByZWFkIHRvIDB4ZmZmZjk3NjdkM2Jl Y2ZhYyBvZiA0IGJ5dGVzIGJ5IHRhc2sgMTgxMTkgb24gY3B1IDA6CiAgcndzZW1fc3Bpbl9vbl9v d25lcisweGY0LzB4MTgwCiAgcndzZW1fb3B0aW1pc3RpY19zcGluKzB4NDgvMHg0ODAKICByd3Nl bV9kb3duX3JlYWRfc2xvd3BhdGgrMHg0YTAvMHg2NzAKICBkb3duX3JlYWQrMHg2OS8weDE5MAog IHByb2Nlc3Nfdm1fcncrMHg0MWUvMHg4NDAKICBfX3g2NF9zeXNfcHJvY2Vzc192bV93cml0ZXYr MHg3Ni8weDkwCiAgZG9fc3lzY2FsbF82NCsweDM3LzB4NTAKICBlbnRyeV9TWVNDQUxMXzY0X2Fm dGVyX2h3ZnJhbWUrMHg0NC8weGE5Cgo+Cj4+IFNpZ25lZC1vZmYtYnk6IEtlZmVuZyBXYW5nIDx3 YW5na2VmZW5nLndhbmdAaHVhd2VpLmNvbT4KPj4gLS0tCj4+IFRlc3RlZCBvbiBRZW11IHdpdGgg Y2xhbmcgMTMgLyBnY2MgMTEsIGJhc2VkIG9uIDUuMTYtcmMzLgo+Pgo+PiBbICAgIDAuMjIxNTE4 XSBrY3NhbjogZW5hYmxlZCBlYXJseQo+PiBbICAgIDAuMjIyNDIyXSBrY3Nhbjogc3RyaWN0IG1v ZGUgY29uZmlndXJlZAo+PiAuLi4KPj4gWyAgICA1LjgzOTIyM10ga2NzYW46IHNlbGZ0ZXN0OiAz LzMgdGVzdHMgcGFzc2VkCj4+IC4uLgo+PiBbICA1MTcuODk1MTAyXSAjIGtjc2FuOiBwYXNzOjI0 IGZhaWw6MCBza2lwOjAgdG90YWw6MjQKPj4gWyAgNTE3Ljg5NjM5M10gIyBUb3RhbHM6IHBhc3M6 MTY4IGZhaWw6MCBza2lwOjAgdG90YWw6MTY4Cj4+IFsgIDUxNy44OTc1MDJdIG9rIDEgLSBrY3Nh bgo+Pgo+PiB2MjoKPj4gLSB0ZXN0ZWQgb24gR0NDMTEgYW5kIGRpc2FibGUgb3V0bGluZS1hdG9t aWNzIGZvciBrZXJuZWwva2NzYW4vY29yZS5jCj4+ICAgIHN1Z2dlc3RlZCBieSBNYXJjbyBFbHZl cgo+Pgo+PiAgIGFyY2gvYXJtNjQvS2NvbmZpZyAgICAgICAgICAgICAgIHwgMSArCj4+ICAgYXJj aC9hcm02NC9rZXJuZWwvdmRzby9NYWtlZmlsZSAgfCAxICsKPj4gICBhcmNoL2FybTY0L2t2bS9o eXAvbnZoZS9NYWtlZmlsZSB8IDEgKwo+PiAgIGtlcm5lbC9rY3Nhbi9NYWtlZmlsZSAgICAgICAg ICAgIHwgMSArCj4+ICAgNCBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKPiBBc2lkZSBm cm9tIHRoZSBgLW1uby1vdXRsaW5lLWF0b21pY3NgIHBvcnRpb24sIHRoaXMgbG9va3MgYmFzaWNh bGx5IHRoZSBzYW1lIGFzIHdoYXQgSSBoYWQgaW46Cj4KPiBodHRwczovL2dpdC5rZXJuZWwub3Jn L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9tYXJrL2xpbnV4LmdpdC9jb21taXQvP2g9YXJtNjQv a2NzYW4maWQ9MmQ2N2MzOWFlNGY2MTljYTk0ZDk3OTBlMDkxODZlNzc5MjJmYTgyNgo+Cj4gLi4u IHNvIHRoaXMgbG9va3MgZ29vZCB0byBtZSBtb2R1bG8gdGhlIGNvbW1lbnRzIGFib3ZlLgo+Cj4g VGhhbmtzLAo+IE1hcmsuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==