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 7AE3510F286A for ; Fri, 27 Mar 2026 20:07:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To: Content-Transfer-Encoding:Content-Type: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=T2vqbRr8SqPZfYjWbgRRazMb+0cCewbQ3ECrXWlmf3M=; b=3DqGSJw+4aShDKxmw498gQbp9z 2Mv5HFFT69wOrPZxVUh815ubcv9ueCST7DZqT0fryQIvXgz0E1IXEHTVl6TTxIrk0/7QE7GMEEvIe B3K3sFX+vv+hktH7Au6pmXpRHxlqfI5fetazPdGw/CIil4bL2CMTeyQ89MTXq1X8lBRkn+O7tr8Lp ws/MsrC7z2PV+ulwS1dxr45++IuRZrl/Iauq4OJ6NUkQ8KlkrYqn8fhNSUPFYohfixHvfqca2Csp0 bNp+FiluzS059UAUOzicoIpwe5NVkcKDFIGaGPQKbhUzeKxW4yTmdNY5QG/7gaTP4cUlN/qWYcFnj hfJnLfEQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1w6DTC-000000088T9-2fqA; Fri, 27 Mar 2026 20:07:50 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1w6DTB-000000088Sz-0P4q; Fri, 27 Mar 2026 20:07:49 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id D9D5960054; Fri, 27 Mar 2026 20:07:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AEF0DC19423; Fri, 27 Mar 2026 20:07:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774642067; bh=xHRwHRWX7sDO8EBJS6B5aXfJHu0i4XN8dvpcSTbfIRc=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=dHjUd3ZF79LzrbAsi+TKEK/Ox3bmzPuIrfMVXalW4YK/WE4eklng4Df+wSLXUgWxX lKaRwK1I0DNDfmr/scNd5pCVoZDofC3GXlVmUgZ8/OqIBX5MzrcGLP7BzUeqgecyy/ fYrvqyq4LOy3tCyTMc2aXe5GP79hIW8ZJguFwPB4isv94O+qxI8j1TPWne/0DvX8iw J2gbjMSc8XXnUnLOffcSDKNThi9RN2DzhBovrz5EChYLDv8pHc16S+dq8eDka59cc+ DrvbMPLlVDZ8ohXwe+J/hmsHr7V9SMRi38wiuqWCwQddWgeu/TJpnsT/lDGoguLhd0 aGa3mpY8dB5iw== Date: Fri, 27 Mar 2026 17:07:43 -0300 From: Arnaldo Carvalho de Melo To: Namhyung Kim Cc: Ian Rogers , 9erthalion6@gmail.com, adrian.hunter@intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, andrew.jones@oss.qualcomm.com, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, howardchu95@gmail.com, james.clark@linaro.org, john.g.garry@oracle.com, jolsa@kernel.org, leo.yan@linux.dev, libunwind-devel@nongnu.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-riscv@lists.infradead.org, mingo@redhat.com, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, shimin.guo@skydio.com, tglozar@redhat.com, tmricht@linux.ibm.com, will@kernel.org, amadio@gentoo.org, yuzhuo@google.com Subject: Re: [PATCH v1 0/2] perf build: Remove libunwind support Message-ID: References: <20260321234220.848859-1-irogers@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Thu, Mar 26, 2026 at 03:51:19PM -0700, Namhyung Kim wrote: > On Sat, Mar 21, 2026 at 04:42:18PM -0700, Ian Rogers wrote: > > libunwind support exists for "--call-graph dwarf", however, libunwind > > support has been opt-in rather than opt-out since Linux v6.13 as libdw > > is preferred - commit 13e17c9ff49119aa ("perf build: Make libunwind > > opt-in rather than opt-out"). A problem with the libdw support was > > that it was slow, an issue fixed in Linux v7.0 in commit 6b2658b3f36a > > ("perf unwind-libdw: Don't discard loaded ELF/DWARF after every > > unwind"). As such libunwind support is now unnecessary. > > > > The patch series: > > https://lore.kernel.org/lkml/20260305221927.3237145-1-irogers@google.com/ > > looked to make the libunwind support in perf similar to the libdw > > support, allow cross-architecture unwinding, etc. This was motivated > > by the perf regs conventions being altered by the addition of x86 APX > > support: > > https://lore.kernel.org/lkml/20260209072047.2180332-1-dapeng1.mi@linux.intel.com/ > > It is necessary to translate the library's notion of registers to the > > perf register convention so that the stack unwinding state can be > > initialized. On this series it was stated that removing libunwind > > support from perf should be an option, rather than updating support: > > https://lore.kernel.org/lkml/abxs-2rozL1tBEO1@google.com/ > > This was also what motivated making libunwind opt-in rather than > > opt-out. > > Given that 7 minor releases have happened with libunwind "deprecated" > > by making it opt-in, let's remove the libunwind support. There doesn't > > appear to be any disagreement to this on the mailing list. > I'm not sure if we want to remove it now. I think we need more time to > verify libdw unwinding is stable and fast enough. Also maybe we can > add build- or run-time warning when people try to use libunwind. We have: acme@x1:~/git/perf-tools$ perf -vv | grep LIBU libunwind: [ OFF ] # HAVE_LIBUNWIND_SUPPORT ( tip: Deprecated, use LIBUNWIND=1 and install libunwind-dev[el] to build with it ) acme@x1:~/git/perf-tools$ acme@x1:~/git/perf-tools$ perf check feature libunwind && echo perf built with libunwind libunwind: [ OFF ] # HAVE_LIBUNWIND_SUPPORT ( tip: Deprecated, use LIBUNWIND=1 and install libunwind-dev[el] to build with it ) acme@x1:~/git/perf-tools$ Building with both, as Ian mentioned ends up with: LD /tmp/build/perf-tools/util/perf-util-in.o ld: /tmp/build/perf-tools/util/unwind-libunwind.o: in function `unwind__get_entries': unwind-libunwind.c:(.text+0x2a0): multiple definition of `unwind__get_entries'; /tmp/build/perf-tools/util/unwind-libdw.o:unwind-libdw.c:(.text+0x940): first defined here make[4]: *** [/home/acme/git/perf-tools/tools/build/Makefile.build:164: /tmp/build/perf-tools/util/perf-util-in.o] Error 123 make[3]: *** [/home/acme/git/perf-tools/tools/build/Makefile.build:158: util] Error 2 make[2]: *** [Makefile.perf:797: /tmp/build/perf-tools/perf-util-in.o] Error 2 make[1]: *** [Makefile.perf:289: sub-make] Error 2 make: *** [Makefile:119: install-bin] Error 2 make: Leaving directory '/home/acme/git/perf-tools/tools/perf' ⬢ [acme@toolbx perf-tools]$ So what Namhyung is suggesting is to disable libdw when libunwind is asked for? I.e. alias m='rm -rf ~/libexec/perf-core/ ; make LIBUNWIND=1 NO_LIBDW=1 -k O=/tmp/build/$(basename $PWD)/ -C tools/perf install-bin && perf test "import python" && cat /tmp/build/$(basename $PWD)/feature/test-all.make.output' ; export PYTHONPATH=/tmp/build/$(basename $PWD)/python Which builds and ends up linking with both: ⬢ [acme@toolbx perf-tools]$ ldd ~/bin/perf | egrep unwind\|dw libunwind-x86_64.so.8 => /lib64/libunwind-x86_64.so.8 (0x00007fbf430b6000) libunwind.so.8 => /lib64/libunwind.so.8 (0x00007fbf4309b000) libdw.so.1 => /lib64/libdw.so.1 (0x00007fbf38570000) ⬢ [acme@toolbx perf-tools]$ I.e. that NO_LIBDW isn't really disabling linking with it, just some features based on it, likely. Hum, we also have NO_LIBDW_DWARF_UNWIND, which probably is what we want here... nope: ⬢ [acme@toolbx perf-tools]$ alias m='rm -rf ~/libexec/perf-core/ ; make LIBUNWIND=1 NO_LIBDW_DWARF_UNWIND=1 -k O=/tmp/build/$(basename $PWD)/ -C tools/perf install-bin && perf test "import python" && cat /tmp/build/$(basename $PWD)/feature/test-all.make.output' ; export PYTHONPATH=/tmp/build/$(basename $PWD)/python ⬢ [acme@toolbx perf-tools]$ m rm: cannot remove '/home/acme/libexec/perf-core/scripts/python/Perf-Trace-Util/lib/Perf/Trace/__pycache__/Core.cpython-314.pyc': Permission denied make: Entering directory '/home/acme/git/perf-tools/tools/perf' BUILD: Doing 'make -j12' parallel build Warning: Kernel ABI header differences: diff -u tools/arch/x86/include/uapi/asm/svm.h arch/x86/include/uapi/asm/svm.h Auto-detecting system features: ... libdw: [ on ] ... glibc: [ on ] ... libelf: [ on ] ... libnuma: [ on ] ... numa_num_possible_cpus: [ on ] ... libpython: [ on ] ... libcapstone: [ on ] ... llvm-perf: [ on ] ... zlib: [ on ] ... lzma: [ on ] ... bpf: [ on ] ... libaio: [ on ] ... libzstd: [ on ] ... libopenssl: [ on ] ... rust: [ on ] INSTALL libsubcmd_headers INSTALL libperf_headers INSTALL libapi_headers INSTALL libsymbol_headers INSTALL libbpf_headers LD /tmp/build/perf-tools/util/perf-util-in.o ld: /tmp/build/perf-tools/util/unwind-libunwind.o: in function `unwind__get_entries': unwind-libunwind.c:(.text+0x2a0): multiple definition of `unwind__get_entries'; /tmp/build/perf-tools/util/unwind-libdw.o:unwind-libdw.c:(.text+0x940): first defined here make[4]: *** [/home/acme/git/perf-tools/tools/build/Makefile.build:164: /tmp/build/perf-tools/util/perf-util-in.o] Error 123 make[3]: *** [/home/acme/git/perf-tools/tools/build/Makefile.build:158: util] Error 2 make[2]: *** [Makefile.perf:797: /tmp/build/perf-tools/perf-util-in.o] Error 2 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [Makefile.perf:289: sub-make] Error 2 make: *** [Makefile:119: install-bin] Error 2 make: Leaving directory '/home/acme/git/perf-tools/tools/perf' ⬢ [acme@toolbx perf-tools]$ I expected NO_LIBDW_DWARF_UNWIND=1 would resolve this case, and maybe it should? Or maybe it did it in the past as by now it is just a comment: ⬢ [acme@toolbx perf-tools]$ git grep NO_LIBDW_DWARF_UNWIND tools/perf/Makefile.perf:# Define NO_LIBDW_DWARF_UNWIND if you do not want libdw support ⬢ [acme@toolbx perf-tools]$ Its from: # Define NO_LIBDW_DWARF_UNWIND if you do not want libdw support # for dwarf backtrace post unwind. As we need libdw for 'perf probe', etc, so being able to disable it just for DWARF backtrace is what we need here to make them mutually exclusive, i.e. the default is for building with libdw for backtraces, but if the user asks for LIBUNWIND=1, then a warning that libdw won't be used for DWARF backtraces and select NO_LIBDW_DWARF_UNWIND? We could then have a regression test that builds perf with one, does some backtraces, then with the other, then compare? This would be followup work, if somebody has the cycles, but making them mutually exclusive should be doable with not that much work? This is an area that is tricky and since we _already_ have two implementations, the good thing for regression testing would be the compare their results until libunwind becomes completely rotten and unusable? - Arnaldo 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 F2D2810F286A for ; Fri, 27 Mar 2026 20:08:02 +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=0wJD9aF1C7t5rtZpzPoecJHHbfkmiKCDUUr2XrqyxFU=; b=VWTzW/iZED6hSx pWjaH9kxreAl/kACk554LoMzx82v0rzC2NRLeLxhRg0MWF1rGm9026RRDkuk4DKnzeHLzm97uZ2vb igaSbXxAeELQ6FEhkR9Yl4tfYRM8ZJyCcP2NQ8QJkudmeFX0KeMTmx+RWln6y+X5z1CVDQbdzz7Eu bFl4HngvNGFwiMB04q9QQpRpjFD5hR1b3kVDXUqRY4Dk/e6l2nCk938jr8rGRSByN7h73xX2g6vK7 iMAFnfUCr7zTldnIAhWcNk+YSehpnzze5nTuuuYGCjcp2Kf2L6mKbVxTNVDeoMP7vkI+Rpu6xZvo7 8XXlXZDovI2pAI3UFdmA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1w6DTC-000000088TD-3sQ3; Fri, 27 Mar 2026 20:07:50 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1w6DTB-000000088Sz-0P4q; Fri, 27 Mar 2026 20:07:49 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id D9D5960054; Fri, 27 Mar 2026 20:07:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AEF0DC19423; Fri, 27 Mar 2026 20:07:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774642067; bh=xHRwHRWX7sDO8EBJS6B5aXfJHu0i4XN8dvpcSTbfIRc=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=dHjUd3ZF79LzrbAsi+TKEK/Ox3bmzPuIrfMVXalW4YK/WE4eklng4Df+wSLXUgWxX lKaRwK1I0DNDfmr/scNd5pCVoZDofC3GXlVmUgZ8/OqIBX5MzrcGLP7BzUeqgecyy/ fYrvqyq4LOy3tCyTMc2aXe5GP79hIW8ZJguFwPB4isv94O+qxI8j1TPWne/0DvX8iw J2gbjMSc8XXnUnLOffcSDKNThi9RN2DzhBovrz5EChYLDv8pHc16S+dq8eDka59cc+ DrvbMPLlVDZ8ohXwe+J/hmsHr7V9SMRi38wiuqWCwQddWgeu/TJpnsT/lDGoguLhd0 aGa3mpY8dB5iw== Date: Fri, 27 Mar 2026 17:07:43 -0300 From: Arnaldo Carvalho de Melo To: Namhyung Kim Cc: Ian Rogers , 9erthalion6@gmail.com, adrian.hunter@intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, andrew.jones@oss.qualcomm.com, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, howardchu95@gmail.com, james.clark@linaro.org, john.g.garry@oracle.com, jolsa@kernel.org, leo.yan@linux.dev, libunwind-devel@nongnu.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-riscv@lists.infradead.org, mingo@redhat.com, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, shimin.guo@skydio.com, tglozar@redhat.com, tmricht@linux.ibm.com, will@kernel.org, amadio@gentoo.org, yuzhuo@google.com Subject: Re: [PATCH v1 0/2] perf build: Remove libunwind support Message-ID: References: <20260321234220.848859-1-irogers@google.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gVGh1LCBNYXIgMjYsIDIwMjYgYXQgMDM6NTE6MTlQTSAtMDcwMCwgTmFtaHl1bmcgS2ltIHdy b3RlOgo+IE9uIFNhdCwgTWFyIDIxLCAyMDI2IGF0IDA0OjQyOjE4UE0gLTA3MDAsIElhbiBSb2dl cnMgd3JvdGU6Cj4gPiBsaWJ1bndpbmQgc3VwcG9ydCBleGlzdHMgZm9yICItLWNhbGwtZ3JhcGgg ZHdhcmYiLCBob3dldmVyLCBsaWJ1bndpbmQKPiA+IHN1cHBvcnQgaGFzIGJlZW4gb3B0LWluIHJh dGhlciB0aGFuIG9wdC1vdXQgc2luY2UgTGludXggdjYuMTMgYXMgbGliZHcKPiA+IGlzIHByZWZl cnJlZCAtIGNvbW1pdCAxM2UxN2M5ZmY0OTExOWFhICgicGVyZiBidWlsZDogTWFrZSBsaWJ1bndp bmQKPiA+IG9wdC1pbiByYXRoZXIgdGhhbiBvcHQtb3V0IikuIEEgcHJvYmxlbSB3aXRoIHRoZSBs aWJkdyBzdXBwb3J0IHdhcwo+ID4gdGhhdCBpdCB3YXMgc2xvdywgYW4gaXNzdWUgZml4ZWQgaW4g TGludXggdjcuMCBpbiBjb21taXQgNmIyNjU4YjNmMzZhCj4gPiAoInBlcmYgdW53aW5kLWxpYmR3 OiBEb24ndCBkaXNjYXJkIGxvYWRlZCBFTEYvRFdBUkYgYWZ0ZXIgZXZlcnkKPiA+IHVud2luZCIp LiBBcyBzdWNoIGxpYnVud2luZCBzdXBwb3J0IGlzIG5vdyB1bm5lY2Vzc2FyeS4KPiA+IAo+ID4g VGhlIHBhdGNoIHNlcmllczoKPiA+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMjAyNjAz MDUyMjE5MjcuMzIzNzE0NS0xLWlyb2dlcnNAZ29vZ2xlLmNvbS8KPiA+IGxvb2tlZCB0byBtYWtl IHRoZSBsaWJ1bndpbmQgc3VwcG9ydCBpbiBwZXJmIHNpbWlsYXIgdG8gdGhlIGxpYmR3Cj4gPiBz dXBwb3J0LCBhbGxvdyBjcm9zcy1hcmNoaXRlY3R1cmUgdW53aW5kaW5nLCBldGMuIFRoaXMgd2Fz IG1vdGl2YXRlZAo+ID4gYnkgdGhlIHBlcmYgcmVncyBjb252ZW50aW9ucyBiZWluZyBhbHRlcmVk IGJ5IHRoZSBhZGRpdGlvbiBvZiB4ODYgQVBYCj4gPiBzdXBwb3J0Ogo+ID4gaHR0cHM6Ly9sb3Jl Lmtlcm5lbC5vcmcvbGttbC8yMDI2MDIwOTA3MjA0Ny4yMTgwMzMyLTEtZGFwZW5nMS5taUBsaW51 eC5pbnRlbC5jb20vCj4gPiBJdCBpcyBuZWNlc3NhcnkgdG8gdHJhbnNsYXRlIHRoZSBsaWJyYXJ5 J3Mgbm90aW9uIG9mIHJlZ2lzdGVycyB0byB0aGUKPiA+IHBlcmYgcmVnaXN0ZXIgY29udmVudGlv biBzbyB0aGF0IHRoZSBzdGFjayB1bndpbmRpbmcgc3RhdGUgY2FuIGJlCj4gPiBpbml0aWFsaXpl ZC4gT24gdGhpcyBzZXJpZXMgaXQgd2FzIHN0YXRlZCB0aGF0IHJlbW92aW5nIGxpYnVud2luZAo+ ID4gc3VwcG9ydCBmcm9tIHBlcmYgc2hvdWxkIGJlIGFuIG9wdGlvbiwgcmF0aGVyIHRoYW4gdXBk YXRpbmcgc3VwcG9ydDoKPiA+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvYWJ4cy0ycm96 TDF0QkVPMUBnb29nbGUuY29tLwo+ID4gVGhpcyB3YXMgYWxzbyB3aGF0IG1vdGl2YXRlZCBtYWtp bmcgbGlidW53aW5kIG9wdC1pbiByYXRoZXIgdGhhbgo+ID4gb3B0LW91dC4KCj4gPiBHaXZlbiB0 aGF0IDcgbWlub3IgcmVsZWFzZXMgaGF2ZSBoYXBwZW5lZCB3aXRoIGxpYnVud2luZCAiZGVwcmVj YXRlZCIKPiA+IGJ5IG1ha2luZyBpdCBvcHQtaW4sIGxldCdzIHJlbW92ZSB0aGUgbGlidW53aW5k IHN1cHBvcnQuIFRoZXJlIGRvZXNuJ3QKPiA+IGFwcGVhciB0byBiZSBhbnkgZGlzYWdyZWVtZW50 IHRvIHRoaXMgb24gdGhlIG1haWxpbmcgbGlzdC4KIAo+IEknbSBub3Qgc3VyZSBpZiB3ZSB3YW50 IHRvIHJlbW92ZSBpdCBub3cuICBJIHRoaW5rIHdlIG5lZWQgbW9yZSB0aW1lIHRvCj4gdmVyaWZ5 IGxpYmR3IHVud2luZGluZyBpcyBzdGFibGUgYW5kIGZhc3QgZW5vdWdoLiAgQWxzbyBtYXliZSB3 ZSBjYW4KPiBhZGQgYnVpbGQtIG9yIHJ1bi10aW1lIHdhcm5pbmcgd2hlbiBwZW9wbGUgdHJ5IHRv IHVzZSBsaWJ1bndpbmQuCgpXZSBoYXZlOgoKYWNtZUB4MTp+L2dpdC9wZXJmLXRvb2xzJCBwZXJm IC12diB8IGdyZXAgTElCVQogICAgICAgICAgICAgbGlidW53aW5kOiBbIE9GRiBdICAjIEhBVkVf TElCVU5XSU5EX1NVUFBPUlQgKCB0aXA6IERlcHJlY2F0ZWQsIHVzZSBMSUJVTldJTkQ9MSBhbmQg aW5zdGFsbCBsaWJ1bndpbmQtZGV2W2VsXSB0byBidWlsZCB3aXRoIGl0ICkKYWNtZUB4MTp+L2dp dC9wZXJmLXRvb2xzJAoKYWNtZUB4MTp+L2dpdC9wZXJmLXRvb2xzJCBwZXJmIGNoZWNrIGZlYXR1 cmUgbGlidW53aW5kICYmIGVjaG8gcGVyZiBidWlsdCB3aXRoIGxpYnVud2luZAogICAgICAgICAg ICAgbGlidW53aW5kOiBbIE9GRiBdICAjIEhBVkVfTElCVU5XSU5EX1NVUFBPUlQgKCB0aXA6IERl cHJlY2F0ZWQsIHVzZSBMSUJVTldJTkQ9MSBhbmQgaW5zdGFsbCBsaWJ1bndpbmQtZGV2W2VsXSB0 byBidWlsZCB3aXRoIGl0ICkKYWNtZUB4MTp+L2dpdC9wZXJmLXRvb2xzJAoKQnVpbGRpbmcgd2l0 aCBib3RoLCBhcyBJYW4gbWVudGlvbmVkIGVuZHMgdXAgd2l0aDoKCiAgTEQgICAgICAvdG1wL2J1 aWxkL3BlcmYtdG9vbHMvdXRpbC9wZXJmLXV0aWwtaW4ubwpsZDogL3RtcC9idWlsZC9wZXJmLXRv b2xzL3V0aWwvdW53aW5kLWxpYnVud2luZC5vOiBpbiBmdW5jdGlvbiBgdW53aW5kX19nZXRfZW50 cmllcyc6CnVud2luZC1saWJ1bndpbmQuYzooLnRleHQrMHgyYTApOiBtdWx0aXBsZSBkZWZpbml0 aW9uIG9mIGB1bndpbmRfX2dldF9lbnRyaWVzJzsgL3RtcC9idWlsZC9wZXJmLXRvb2xzL3V0aWwv dW53aW5kLWxpYmR3Lm86dW53aW5kLWxpYmR3LmM6KC50ZXh0KzB4OTQwKTogZmlyc3QgZGVmaW5l ZCBoZXJlCm1ha2VbNF06ICoqKiBbL2hvbWUvYWNtZS9naXQvcGVyZi10b29scy90b29scy9idWls ZC9NYWtlZmlsZS5idWlsZDoxNjQ6IC90bXAvYnVpbGQvcGVyZi10b29scy91dGlsL3BlcmYtdXRp bC1pbi5vXSBFcnJvciAxMjMKbWFrZVszXTogKioqIFsvaG9tZS9hY21lL2dpdC9wZXJmLXRvb2xz L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmJ1aWxkOjE1ODogdXRpbF0gRXJyb3IgMgptYWtlWzJdOiAq KiogW01ha2VmaWxlLnBlcmY6Nzk3OiAvdG1wL2J1aWxkL3BlcmYtdG9vbHMvcGVyZi11dGlsLWlu Lm9dIEVycm9yIDIKbWFrZVsxXTogKioqIFtNYWtlZmlsZS5wZXJmOjI4OTogc3ViLW1ha2VdIEVy cm9yIDIKbWFrZTogKioqIFtNYWtlZmlsZToxMTk6IGluc3RhbGwtYmluXSBFcnJvciAyCm1ha2U6 IExlYXZpbmcgZGlyZWN0b3J5ICcvaG9tZS9hY21lL2dpdC9wZXJmLXRvb2xzL3Rvb2xzL3BlcmYn CuKsoiBbYWNtZUB0b29sYnggcGVyZi10b29sc10kCgpTbyB3aGF0IE5hbWh5dW5nIGlzIHN1Z2dl c3RpbmcgaXMgdG8gZGlzYWJsZSBsaWJkdyB3aGVuIGxpYnVud2luZCBpcwphc2tlZCBmb3I/CgpJ LmUuCgphbGlhcyBtPSdybSAtcmYgfi9saWJleGVjL3BlcmYtY29yZS8gOyBtYWtlIExJQlVOV0lO RD0xIE5PX0xJQkRXPTEgLWsgTz0vdG1wL2J1aWxkLyQoYmFzZW5hbWUgJFBXRCkvIC1DIHRvb2xz L3BlcmYgaW5zdGFsbC1iaW4gJiYgcGVyZiB0ZXN0ICJpbXBvcnQgcHl0aG9uIiAmJiBjYXQgL3Rt cC9idWlsZC8kKGJhc2VuYW1lICRQV0QpL2ZlYXR1cmUvdGVzdC1hbGwubWFrZS5vdXRwdXQnIDsg ZXhwb3J0IFBZVEhPTlBBVEg9L3RtcC9idWlsZC8kKGJhc2VuYW1lICRQV0QpL3B5dGhvbgoKV2hp Y2ggYnVpbGRzIGFuZCBlbmRzIHVwIGxpbmtpbmcgd2l0aCBib3RoOgoK4qyiIFthY21lQHRvb2xi eCBwZXJmLXRvb2xzXSQgbGRkIH4vYmluL3BlcmYgfCBlZ3JlcCB1bndpbmRcfGR3CglsaWJ1bndp bmQteDg2XzY0LnNvLjggPT4gL2xpYjY0L2xpYnVud2luZC14ODZfNjQuc28uOCAoMHgwMDAwN2Zi ZjQzMGI2MDAwKQoJbGlidW53aW5kLnNvLjggPT4gL2xpYjY0L2xpYnVud2luZC5zby44ICgweDAw MDA3ZmJmNDMwOWIwMDApCglsaWJkdy5zby4xID0+IC9saWI2NC9saWJkdy5zby4xICgweDAwMDA3 ZmJmMzg1NzAwMDApCuKsoiBbYWNtZUB0b29sYnggcGVyZi10b29sc10kCgpJLmUuIHRoYXQgTk9f TElCRFcgaXNuJ3QgcmVhbGx5IGRpc2FibGluZyBsaW5raW5nIHdpdGggaXQsIGp1c3Qgc29tZQpm ZWF0dXJlcyBiYXNlZCBvbiBpdCwgbGlrZWx5LgoKSHVtLCB3ZSBhbHNvIGhhdmUgTk9fTElCRFdf RFdBUkZfVU5XSU5ELCB3aGljaCBwcm9iYWJseSBpcyB3aGF0IHdlIHdhbnQKaGVyZS4uLiBub3Bl OgoK4qyiIFthY21lQHRvb2xieCBwZXJmLXRvb2xzXSQgYWxpYXMgbT0ncm0gLXJmIH4vbGliZXhl Yy9wZXJmLWNvcmUvIDsgbWFrZSBMSUJVTldJTkQ9MSBOT19MSUJEV19EV0FSRl9VTldJTkQ9MSAt ayBPPS90bXAvYnVpbGQvJChiYXNlbmFtZSAkUFdEKS8gLUMgdG9vbHMvcGVyZiBpbnN0YWxsLWJp biAmJiBwZXJmIHRlc3QgImltcG9ydCBweXRob24iICYmIGNhdCAvdG1wL2J1aWxkLyQoYmFzZW5h bWUgJFBXRCkvZmVhdHVyZS90ZXN0LWFsbC5tYWtlLm91dHB1dCcgOyBleHBvcnQgUFlUSE9OUEFU SD0vdG1wL2J1aWxkLyQoYmFzZW5hbWUgJFBXRCkvcHl0aG9uCuKsoiBbYWNtZUB0b29sYnggcGVy Zi10b29sc10kIG0Kcm06IGNhbm5vdCByZW1vdmUgJy9ob21lL2FjbWUvbGliZXhlYy9wZXJmLWNv cmUvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL19fcHljYWNo ZV9fL0NvcmUuY3B5dGhvbi0zMTQucHljJzogUGVybWlzc2lvbiBkZW5pZWQKbWFrZTogRW50ZXJp bmcgZGlyZWN0b3J5ICcvaG9tZS9hY21lL2dpdC9wZXJmLXRvb2xzL3Rvb2xzL3BlcmYnCiAgQlVJ TEQ6ICAgRG9pbmcgJ21ha2UgLWoxMicgcGFyYWxsZWwgYnVpbGQKV2FybmluZzogS2VybmVsIEFC SSBoZWFkZXIgZGlmZmVyZW5jZXM6CiAgZGlmZiAtdSB0b29scy9hcmNoL3g4Ni9pbmNsdWRlL3Vh cGkvYXNtL3N2bS5oIGFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmgKCkF1dG8tZGV0ZWN0 aW5nIHN5c3RlbSBmZWF0dXJlczoKLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJkdzogWyBvbiAgXQouLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds aWJjOiBbIG9uICBdCi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJlbGY6 IFsgb24gIF0KLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlibnVtYTogWyBv biAgXQouLi4gICAgICAgICAgICAgICAgICBudW1hX251bV9wb3NzaWJsZV9jcHVzOiBbIG9uICBd Ci4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJweXRob246IFsgb24gIF0KLi4u ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJjYXBzdG9uZTogWyBvbiAgXQouLi4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGx2bS1wZXJmOiBbIG9uICBdCi4uLiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWI6IFsgb24gIF0KLi4uICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbHptYTogWyBvbiAgXQouLi4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnBmOiBbIG9uICBdCi4uLiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJhaW86IFsgb24gIF0KLi4uICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlienN0ZDogWyBvbiAgXQouLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJvcGVuc3NsOiBbIG9uICBdCi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJ1c3Q6IFsgb24gIF0KCiAgSU5TVEFMTCBsaWJzdWJjbWRfaGVhZGVycwogIElOU1RBTEwg bGlicGVyZl9oZWFkZXJzCiAgSU5TVEFMTCBsaWJhcGlfaGVhZGVycwogIElOU1RBTEwgbGlic3lt Ym9sX2hlYWRlcnMKICBJTlNUQUxMIGxpYmJwZl9oZWFkZXJzCiAgTEQgICAgICAvdG1wL2J1aWxk L3BlcmYtdG9vbHMvdXRpbC9wZXJmLXV0aWwtaW4ubwpsZDogL3RtcC9idWlsZC9wZXJmLXRvb2xz L3V0aWwvdW53aW5kLWxpYnVud2luZC5vOiBpbiBmdW5jdGlvbiBgdW53aW5kX19nZXRfZW50cmll cyc6CnVud2luZC1saWJ1bndpbmQuYzooLnRleHQrMHgyYTApOiBtdWx0aXBsZSBkZWZpbml0aW9u IG9mIGB1bndpbmRfX2dldF9lbnRyaWVzJzsgL3RtcC9idWlsZC9wZXJmLXRvb2xzL3V0aWwvdW53 aW5kLWxpYmR3Lm86dW53aW5kLWxpYmR3LmM6KC50ZXh0KzB4OTQwKTogZmlyc3QgZGVmaW5lZCBo ZXJlCm1ha2VbNF06ICoqKiBbL2hvbWUvYWNtZS9naXQvcGVyZi10b29scy90b29scy9idWlsZC9N YWtlZmlsZS5idWlsZDoxNjQ6IC90bXAvYnVpbGQvcGVyZi10b29scy91dGlsL3BlcmYtdXRpbC1p bi5vXSBFcnJvciAxMjMKbWFrZVszXTogKioqIFsvaG9tZS9hY21lL2dpdC9wZXJmLXRvb2xzL3Rv b2xzL2J1aWxkL01ha2VmaWxlLmJ1aWxkOjE1ODogdXRpbF0gRXJyb3IgMgptYWtlWzJdOiAqKiog W01ha2VmaWxlLnBlcmY6Nzk3OiAvdG1wL2J1aWxkL3BlcmYtdG9vbHMvcGVyZi11dGlsLWluLm9d IEVycm9yIDIKbWFrZVsyXTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KbWFr ZVsxXTogKioqIFtNYWtlZmlsZS5wZXJmOjI4OTogc3ViLW1ha2VdIEVycm9yIDIKbWFrZTogKioq IFtNYWtlZmlsZToxMTk6IGluc3RhbGwtYmluXSBFcnJvciAyCm1ha2U6IExlYXZpbmcgZGlyZWN0 b3J5ICcvaG9tZS9hY21lL2dpdC9wZXJmLXRvb2xzL3Rvb2xzL3BlcmYnCuKsoiBbYWNtZUB0b29s YnggcGVyZi10b29sc10kCgpJIGV4cGVjdGVkIE5PX0xJQkRXX0RXQVJGX1VOV0lORD0xIHdvdWxk IHJlc29sdmUgdGhpcyBjYXNlLCBhbmQgbWF5YmUgaXQKc2hvdWxkPwoKT3IgbWF5YmUgaXQgZGlk IGl0IGluIHRoZSBwYXN0IGFzIGJ5IG5vdyBpdCBpcyBqdXN0IGEgY29tbWVudDoKCuKsoiBbYWNt ZUB0b29sYnggcGVyZi10b29sc10kIGdpdCBncmVwIE5PX0xJQkRXX0RXQVJGX1VOV0lORAp0b29s cy9wZXJmL01ha2VmaWxlLnBlcmY6IyBEZWZpbmUgTk9fTElCRFdfRFdBUkZfVU5XSU5EIGlmIHlv dSBkbyBub3Qgd2FudCBsaWJkdyBzdXBwb3J0CuKsoiBbYWNtZUB0b29sYnggcGVyZi10b29sc10k CgpJdHMgZnJvbToKCiMgRGVmaW5lIE5PX0xJQkRXX0RXQVJGX1VOV0lORCBpZiB5b3UgZG8gbm90 IHdhbnQgbGliZHcgc3VwcG9ydAojIGZvciBkd2FyZiBiYWNrdHJhY2UgcG9zdCB1bndpbmQuCgpB cyB3ZSBuZWVkIGxpYmR3IGZvciAncGVyZiBwcm9iZScsIGV0Yywgc28gYmVpbmcgYWJsZSB0byBk aXNhYmxlIGl0IGp1c3QKZm9yIERXQVJGIGJhY2t0cmFjZSBpcyB3aGF0IHdlIG5lZWQgaGVyZSB0 byBtYWtlIHRoZW0gbXV0dWFsbHkKZXhjbHVzaXZlLCBpLmUuIHRoZSBkZWZhdWx0IGlzIGZvciBi dWlsZGluZyB3aXRoIGxpYmR3IGZvciBiYWNrdHJhY2VzLApidXQgaWYgdGhlIHVzZXIgYXNrcyBm b3IgTElCVU5XSU5EPTEsIHRoZW4gYSB3YXJuaW5nIHRoYXQgbGliZHcgd29uJ3QgYmUKdXNlZCBm b3IgRFdBUkYgYmFja3RyYWNlcyBhbmQgc2VsZWN0IE5PX0xJQkRXX0RXQVJGX1VOV0lORD8KCldl IGNvdWxkIHRoZW4gaGF2ZSBhIHJlZ3Jlc3Npb24gdGVzdCB0aGF0IGJ1aWxkcyBwZXJmIHdpdGgg b25lLCBkb2VzCnNvbWUgYmFja3RyYWNlcywgdGhlbiB3aXRoIHRoZSBvdGhlciwgdGhlbiBjb21w YXJlPyBUaGlzIHdvdWxkIGJlCmZvbGxvd3VwIHdvcmssIGlmIHNvbWVib2R5IGhhcyB0aGUgY3lj bGVzLCBidXQgbWFraW5nIHRoZW0gbXV0dWFsbHkKZXhjbHVzaXZlIHNob3VsZCBiZSBkb2FibGUg d2l0aCBub3QgdGhhdCBtdWNoIHdvcms/CgpUaGlzIGlzIGFuIGFyZWEgdGhhdCBpcyB0cmlja3kg YW5kIHNpbmNlIHdlIF9hbHJlYWR5XyBoYXZlIHR3bwppbXBsZW1lbnRhdGlvbnMsIHRoZSBnb29k IHRoaW5nIGZvciByZWdyZXNzaW9uIHRlc3Rpbmcgd291bGQgYmUgdGhlCmNvbXBhcmUgdGhlaXIg cmVzdWx0cyB1bnRpbCBsaWJ1bndpbmQgYmVjb21lcyBjb21wbGV0ZWx5IHJvdHRlbiBhbmQKdW51 c2FibGU/CgotIEFybmFsZG8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtcmlzY3YK