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 31FF6C61DA4 for ; Wed, 22 Feb 2023 13:47:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231415AbjBVNrY (ORCPT ); Wed, 22 Feb 2023 08:47:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35734 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231359AbjBVNrX (ORCPT ); Wed, 22 Feb 2023 08:47:23 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CDF41125; Wed, 22 Feb 2023 05:47:20 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 5C73FB8123A; Wed, 22 Feb 2023 13:47:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B1526C433D2; Wed, 22 Feb 2023 13:47:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1677073638; bh=zCC0XkWQD3wf20Y5Q/XG/X/FXj9lNvFwMc9Tyj9Zc6o=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=eP3AiwSxl6GHQk7WxIqOtOxCM2oNEqzdAwLg1/NAm0y/wADWAZX//T9jq6k5KNlm5 NdD8f76LghjjI02nFBQGS7TWxGGsEfSZkMKy2Mz1Azza4kfQx/hulFflpMTDKPMxLj MNAgUG73r/PEwlo4ZRryoVnMOIpHIaX76FP4GgkPfGQEdFQ2WxefoYPgZhaeZaHRoi /vmFr/xfYIE2LoGCDYrkqqEQUjK0MN72huEcbe9ctmQgwY6+Ws2Ab0YjcCuvDT2zgm nGiS9qLL2nMx6kzPOnE5yiId+y+LNrV1SVdW1jbnEQtEJEBadGCiL6PqlppICyMWTK pkomLlIegm7Bg== Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id C7C524049F; Wed, 22 Feb 2023 10:47:14 -0300 (-03) Date: Wed, 22 Feb 2023 10:47:14 -0300 From: Arnaldo Carvalho de Melo To: Ian Rogers Cc: Stephane Eranian , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Maxime Coquelin , Alexandre Torgue , Zhengjun Xing , Sandipan Das , James Clark , Kajol Jain , John Garry , Kan Liang , Adrian Hunter , Andrii Nakryiko , Eduard Zingerman , Suzuki Poulouse , Leo Yan , Florian Fischer , Ravi Bangoria , Jing Zhang , Sean Christopherson , Athira Rajeev , LKML , linux-perf-users , "moderated list:ARM/STM32 ARCHITECTURE" , Linux ARM , Perry Taylor , Caleb Biggers Subject: Re: [PATCH v1 00/51] shadow metric clean up and improvements Message-ID: References: <20230219092848.639226-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-Url: http://acmel.wordpress.com Precedence: bulk List-ID: X-Mailing-List: linux-perf-users@vger.kernel.org Em Tue, Feb 21, 2023 at 09:44:36AM -0800, Ian Rogers escreveu: > On Sun, Feb 19, 2023 at 7:43 AM Ian Rogers wrote: > > > > On Sun, Feb 19, 2023, 3:17 AM Arnaldo Carvalho de Melo wrote: > > > > > > Em Sun, Feb 19, 2023 at 01:27:57AM -0800, Ian Rogers escreveu: > > > > Recently the shadow stat metrics broke due to repeated aggregation and > > > > a quick fix was applied: > > > > https://lore.kernel.org/lkml/20230209064447.83733-1-irogers@google.com/ > > > > This is the longer fix but one that comes with some extras. To avoid > > > > fixing issues for hard coded metrics, the topdown, SMI cost and > > > > transaction flags are moved into json metrics. A side effect of this > > > > is that TopdownL1 metrics will now be displayed when supported, if no > > > > "perf stat" events are specified. > > > > > > > > Another fix included here is for event grouping as raised in: > > > > https://lore.kernel.org/lkml/CA+icZUU_ew7pzWJJZLbj1xsU6MQTPrj8tkFfDhNdTDRQfGUBMQ@mail.gmail.com/ > > > > Metrics are now tagged with NMI and SMT flags, meaning that the events > > > > shouldn't be grouped if the NMI watchdog is enabled or SMT is enabled. > > > > > > > > Given the two issues, the metrics are re-generated and the patches > > > > also include the latest Intel vendor events. The changes to the metric > > > > generation code can be seen in: > > > > https://github.com/intel/perfmon/pull/56 > > > > > > > > Hard coded metrics support thresholds, the patches add this ability to > > > > json metrics so that the hard coded metrics can be removed. Migrate > > > > remaining hard coded metrics to looking up counters from the > > > > evlist/aggregation count. Finally, get rid of the saved_value logic > > > > and thereby look to fix the aggregation issues. > > > > > > > > Some related fix ups and code clean ups are included in the changes, > > > > in particular to aid with the code's readability and to keep topdown > > > > documentation in sync. > > > > > > That is great work but won't have a reasonable time sitting on > > > linux-next to make it into 6.3. > > > > > > I have just applied it locally for the usual set of tests, that I'll > > > report back here. > > > > > > Ugh. I'm guessing it won't be useful if I point out more things broken > > with the current workaround, like metrics with --repeat :-/ > > > > Thanks, > > Ian > > So currently the flow of patches is: > > 1) initially testing - acme tmp.perf/core > 2) things staged for next release - acme perf/core (perhaps this > should be called perf-next) Yeah, perf-tools-next probably. > 3) linux wide next release testing - linux-next > 4) release - linus/master > > I wonder if there should be a perf-next-next branch to work around the > "sitting time" problem. Otherwise anybody who touches code in these 51 > patches will create a merge conflict. Given the aggregation issues > we're likely to see changes in this code and so conflicts are likely > to happen. > > The patch flow with perf-next-next would be: > > 1) initial testing - tmp.perf-next-next > 2) things acquiring sitting time and where developers work - perf-next-next > 3) things staged for the next release - perf-next > 4) as 3 above > 5) as 4 above > > With linux-next picking up acme perf/core (aka perf-next) daily it > isn't clear whether we should work off of perf-core or linux-next as > they are so in sync. This process means we've lost a sitting place for > developer patches and we're going to feel the pain in terms of merge > conflicts on the list, difficulty building off of the latest work > without cherry-picking from the list, etc. I'll send perf/core to Linus today and then your 51 patches will appear on perf-tools-next, where we'll do what was done before in perf/core (remained like that for historical reasons). I'll make perf/urgent become 'perf-tools', and when the merge window closes, we turn 'perf-tools-next' into 'perf-tools', - Arnaldo > Thanks, > Ian > > > > - Arnaldo > > > > > > > Ian Rogers (51): > > > > perf tools: Ensure evsel name is initialized > > > > perf metrics: Improve variable names > > > > perf pmu-events: Remove aggr_mode from pmu_event > > > > perf pmu-events: Change aggr_mode to be an enum > > > > perf pmu-events: Change deprecated to be a bool > > > > perf pmu-events: Change perpkg to be a bool > > > > perf expr: Make the online topology accessible globally > > > > perf pmu-events: Make the metric_constraint an enum > > > > perf pmu-events: Don't '\0' terminate enum values > > > > perf vendor events intel: Refresh alderlake events > > > > perf vendor events intel: Refresh alderlake-n metrics > > > > perf vendor events intel: Refresh broadwell metrics > > > > perf vendor events intel: Refresh broadwellde metrics > > > > perf vendor events intel: Refresh broadwellx metrics > > > > perf vendor events intel: Refresh cascadelakex events > > > > perf vendor events intel: Add graniterapids events > > > > perf vendor events intel: Refresh haswell metrics > > > > perf vendor events intel: Refresh haswellx metrics > > > > perf vendor events intel: Refresh icelake events > > > > perf vendor events intel: Refresh icelakex metrics > > > > perf vendor events intel: Refresh ivybridge metrics > > > > perf vendor events intel: Refresh ivytown metrics > > > > perf vendor events intel: Refresh jaketown events > > > > perf vendor events intel: Refresh knightslanding events > > > > perf vendor events intel: Refresh sandybridge events > > > > perf vendor events intel: Refresh sapphirerapids events > > > > perf vendor events intel: Refresh silvermont events > > > > perf vendor events intel: Refresh skylake events > > > > perf vendor events intel: Refresh skylakex metrics > > > > perf vendor events intel: Refresh tigerlake events > > > > perf vendor events intel: Refresh westmereep-dp events > > > > perf jevents: Add rand support to metrics > > > > perf jevent: Parse metric thresholds > > > > perf pmu-events: Test parsing metric thresholds with the fake PMU > > > > perf list: Support for printing metric thresholds > > > > perf metric: Compute and print threshold values > > > > perf expr: More explicit NAN handling > > > > perf metric: Add --metric-no-threshold option > > > > perf stat: Add TopdownL1 metric as a default if present > > > > perf stat: Implement --topdown using json metrics > > > > perf stat: Remove topdown event special handling > > > > perf doc: Refresh topdown documentation > > > > perf stat: Remove hard coded transaction events > > > > perf stat: Use metrics for --smi-cost > > > > perf stat: Remove perf_stat_evsel_id > > > > perf stat: Move enums from header > > > > perf stat: Hide runtime_stat > > > > perf stat: Add cpu_aggr_map for loop > > > > perf metric: Directly use counts rather than saved_value > > > > perf stat: Use counts rather than saved_value > > > > perf stat: Remove saved_value/runtime_stat > > > > > > > > tools/perf/Documentation/perf-stat.txt | 27 +- > > > > tools/perf/Documentation/topdown.txt | 70 +- > > > > tools/perf/arch/powerpc/util/header.c | 2 +- > > > > tools/perf/arch/x86/util/evlist.c | 6 +- > > > > tools/perf/arch/x86/util/topdown.c | 78 +- > > > > tools/perf/arch/x86/util/topdown.h | 1 - > > > > tools/perf/builtin-list.c | 13 +- > > > > tools/perf/builtin-script.c | 9 +- > > > > tools/perf/builtin-stat.c | 233 +- > > > > .../arch/x86/alderlake/adl-metrics.json | 3190 ++++++++++------- > > > > .../pmu-events/arch/x86/alderlake/cache.json | 36 +- > > > > .../arch/x86/alderlake/floating-point.json | 27 + > > > > .../arch/x86/alderlake/frontend.json | 9 + > > > > .../pmu-events/arch/x86/alderlake/memory.json | 3 +- > > > > .../arch/x86/alderlake/pipeline.json | 14 +- > > > > .../arch/x86/alderlake/uncore-other.json | 28 +- > > > > .../arch/x86/alderlaken/adln-metrics.json | 811 +++-- > > > > .../arch/x86/broadwell/bdw-metrics.json | 1439 ++++---- > > > > .../arch/x86/broadwellde/bdwde-metrics.json | 1405 ++++---- > > > > .../arch/x86/broadwellx/bdx-metrics.json | 1626 +++++---- > > > > .../arch/x86/broadwellx/uncore-cache.json | 74 +- > > > > .../x86/broadwellx/uncore-interconnect.json | 64 +- > > > > .../arch/x86/broadwellx/uncore-other.json | 4 +- > > > > .../arch/x86/cascadelakex/cache.json | 24 +- > > > > .../arch/x86/cascadelakex/clx-metrics.json | 2198 ++++++------ > > > > .../arch/x86/cascadelakex/frontend.json | 8 +- > > > > .../arch/x86/cascadelakex/pipeline.json | 16 + > > > > .../arch/x86/cascadelakex/uncore-memory.json | 18 +- > > > > .../arch/x86/cascadelakex/uncore-other.json | 120 +- > > > > .../arch/x86/cascadelakex/uncore-power.json | 8 +- > > > > .../arch/x86/graniterapids/cache.json | 54 + > > > > .../arch/x86/graniterapids/frontend.json | 10 + > > > > .../arch/x86/graniterapids/memory.json | 174 + > > > > .../arch/x86/graniterapids/other.json | 29 + > > > > .../arch/x86/graniterapids/pipeline.json | 102 + > > > > .../x86/graniterapids/virtual-memory.json | 26 + > > > > .../arch/x86/haswell/hsw-metrics.json | 1220 ++++--- > > > > .../arch/x86/haswellx/hsx-metrics.json | 1397 ++++---- > > > > .../pmu-events/arch/x86/icelake/cache.json | 16 + > > > > .../arch/x86/icelake/floating-point.json | 31 + > > > > .../arch/x86/icelake/icl-metrics.json | 1932 +++++----- > > > > .../pmu-events/arch/x86/icelake/pipeline.json | 23 +- > > > > .../arch/x86/icelake/uncore-other.json | 56 + > > > > .../arch/x86/icelakex/icx-metrics.json | 2153 +++++------ > > > > .../arch/x86/icelakex/uncore-memory.json | 2 +- > > > > .../arch/x86/icelakex/uncore-other.json | 4 +- > > > > .../arch/x86/ivybridge/ivb-metrics.json | 1270 ++++--- > > > > .../arch/x86/ivytown/ivt-metrics.json | 1311 ++++--- > > > > .../pmu-events/arch/x86/jaketown/cache.json | 6 +- > > > > .../arch/x86/jaketown/floating-point.json | 2 +- > > > > .../arch/x86/jaketown/frontend.json | 12 +- > > > > .../arch/x86/jaketown/jkt-metrics.json | 602 ++-- > > > > .../arch/x86/jaketown/pipeline.json | 2 +- > > > > .../arch/x86/jaketown/uncore-cache.json | 22 +- > > > > .../x86/jaketown/uncore-interconnect.json | 74 +- > > > > .../arch/x86/jaketown/uncore-memory.json | 4 +- > > > > .../arch/x86/jaketown/uncore-other.json | 22 +- > > > > .../arch/x86/jaketown/uncore-power.json | 8 +- > > > > .../arch/x86/knightslanding/cache.json | 94 +- > > > > .../arch/x86/knightslanding/pipeline.json | 8 +- > > > > .../arch/x86/knightslanding/uncore-other.json | 8 +- > > > > tools/perf/pmu-events/arch/x86/mapfile.csv | 29 +- > > > > .../arch/x86/sandybridge/cache.json | 8 +- > > > > .../arch/x86/sandybridge/floating-point.json | 2 +- > > > > .../arch/x86/sandybridge/frontend.json | 12 +- > > > > .../arch/x86/sandybridge/pipeline.json | 2 +- > > > > .../arch/x86/sandybridge/snb-metrics.json | 601 ++-- > > > > .../arch/x86/sapphirerapids/cache.json | 24 +- > > > > .../x86/sapphirerapids/floating-point.json | 32 + > > > > .../arch/x86/sapphirerapids/frontend.json | 8 + > > > > .../arch/x86/sapphirerapids/pipeline.json | 19 +- > > > > .../arch/x86/sapphirerapids/spr-metrics.json | 2283 ++++++------ > > > > .../arch/x86/sapphirerapids/uncore-other.json | 60 + > > > > .../arch/x86/silvermont/frontend.json | 2 +- > > > > .../arch/x86/silvermont/pipeline.json | 2 +- > > > > .../pmu-events/arch/x86/skylake/cache.json | 25 +- > > > > .../pmu-events/arch/x86/skylake/frontend.json | 8 +- > > > > .../pmu-events/arch/x86/skylake/other.json | 1 + > > > > .../pmu-events/arch/x86/skylake/pipeline.json | 16 + > > > > .../arch/x86/skylake/skl-metrics.json | 1877 ++++++---- > > > > .../arch/x86/skylake/uncore-other.json | 1 + > > > > .../pmu-events/arch/x86/skylakex/cache.json | 8 +- > > > > .../arch/x86/skylakex/frontend.json | 8 +- > > > > .../arch/x86/skylakex/pipeline.json | 16 + > > > > .../arch/x86/skylakex/skx-metrics.json | 2097 +++++------ > > > > .../arch/x86/skylakex/uncore-memory.json | 2 +- > > > > .../arch/x86/skylakex/uncore-other.json | 96 +- > > > > .../arch/x86/skylakex/uncore-power.json | 6 +- > > > > .../arch/x86/tigerlake/floating-point.json | 31 + > > > > .../arch/x86/tigerlake/pipeline.json | 18 + > > > > .../arch/x86/tigerlake/tgl-metrics.json | 1942 +++++----- > > > > .../arch/x86/tigerlake/uncore-other.json | 28 +- > > > > .../arch/x86/westmereep-dp/cache.json | 2 +- > > > > .../x86/westmereep-dp/virtual-memory.json | 2 +- > > > > tools/perf/pmu-events/jevents.py | 58 +- > > > > tools/perf/pmu-events/metric.py | 8 +- > > > > tools/perf/pmu-events/pmu-events.h | 35 +- > > > > tools/perf/tests/expand-cgroup.c | 3 +- > > > > tools/perf/tests/expr.c | 7 +- > > > > tools/perf/tests/parse-metric.c | 21 +- > > > > tools/perf/tests/pmu-events.c | 49 +- > > > > tools/perf/util/cpumap.h | 3 + > > > > tools/perf/util/cputopo.c | 14 + > > > > tools/perf/util/cputopo.h | 5 + > > > > tools/perf/util/evsel.h | 2 +- > > > > tools/perf/util/expr.c | 16 +- > > > > tools/perf/util/expr.y | 12 +- > > > > tools/perf/util/metricgroup.c | 178 +- > > > > tools/perf/util/metricgroup.h | 5 +- > > > > tools/perf/util/pmu.c | 17 +- > > > > tools/perf/util/print-events.h | 1 + > > > > tools/perf/util/smt.c | 11 +- > > > > tools/perf/util/smt.h | 12 +- > > > > tools/perf/util/stat-display.c | 117 +- > > > > tools/perf/util/stat-shadow.c | 1287 ++----- > > > > tools/perf/util/stat.c | 74 - > > > > tools/perf/util/stat.h | 96 +- > > > > tools/perf/util/synthetic-events.c | 2 +- > > > > tools/perf/util/topdown.c | 68 +- > > > > tools/perf/util/topdown.h | 11 +- > > > > 120 files changed, 18025 insertions(+), 15590 deletions(-) > > > > create mode 100644 tools/perf/pmu-events/arch/x86/graniterapids/cache.json > > > > create mode 100644 tools/perf/pmu-events/arch/x86/graniterapids/frontend.json > > > > create mode 100644 tools/perf/pmu-events/arch/x86/graniterapids/memory.json > > > > create mode 100644 tools/perf/pmu-events/arch/x86/graniterapids/other.json > > > > create mode 100644 tools/perf/pmu-events/arch/x86/graniterapids/pipeline.json > > > > create mode 100644 tools/perf/pmu-events/arch/x86/graniterapids/virtual-memory.json > > > > > > > > -- > > > > 2.39.2.637.g21b0678d19-goog > > > > > > > > > > -- > > > > > > - Arnaldo -- - 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 5DD08C636D6 for ; Wed, 22 Feb 2023 13:48:44 +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=wZvIqQFUo11g8RIIC2/ldMoxp05tks6zj4d6BQ+qW/s=; b=FN7MNEJ1IMfG6L DbIc4lb5Yvypc8XU1ohzMr84Lvvv/j46pb0PCaZHnZSdvkQ03QuXqK1CYgq34aMZpfJ0iToS5MReH Zs2etbXI+dD+cKPnk90XuhE4NNcnIQ8OqKzj2PsmB6WKJzTLhXg6qlKo4KvTnAwG3lxmDqz343vUm d/1WUrTJMb07KtudfW/g2Adj+3jZD3vpY3mh+6hwZ6X38sE6nhNyFEVmhPPgr31tWWv+hkAAXBxuw SZLAejd1AgXpVLuJtM/9BB9vgXu0s1mGOK5Cxye4klItq6+wpyPuFJ+lA/J6CBota4HpRfmr3LdFx ocGfFTNi2+0pNfJMgThA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pUpT1-00CZLG-Ov; Wed, 22 Feb 2023 13:47:31 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pUpT0-00CZKq-3O for linux-arm-kernel@bombadil.infradead.org; Wed, 22 Feb 2023 13:47:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=In-Reply-To:Content-Transfer-Encoding: Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=wwW6EOEYyqrm0Mb/9V5cUgBW92BMFSxQ06b/SLA/KSw=; b=bli4xY6Tv7R44sqoOxojHdzmpA rAEcabdUFF5O45fe3rvO3KECwH0nGwe7x6qGRtBx+wyl07JLaZUu9VhnwoWozhgIT0Ymte1FYq8fJ 6gcsbPqH7PZ3HQdRNl9V5uFqUHUsK1cIhd/X1RIHhtl4TS6Yb96EvGrkDd2isB4qbBX3dQpwffm9/ +MprwiO4LqYuCaR/UHzsIvZYw36YckT6DSBF3nUbLWfLl8K5VP4nhTge2G5+WvFEUMcwrCxknLaSO snaAudpCTYlvr0nd2LDX7Ze3X4EQe4SD6egVTiOfn38p8pn+Bi0gmzpE5W/6uDZPLyiEkfM+sntGM e7pEp+Jw==; Received: from [187.19.237.165] (helo=quaco.ghostprotocols.net) by desiato.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1pUpSx-00CYYT-1i; Wed, 22 Feb 2023 13:47:28 +0000 Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id C7C524049F; Wed, 22 Feb 2023 10:47:14 -0300 (-03) Date: Wed, 22 Feb 2023 10:47:14 -0300 From: Arnaldo Carvalho de Melo To: Ian Rogers Cc: Stephane Eranian , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Maxime Coquelin , Alexandre Torgue , Zhengjun Xing , Sandipan Das , James Clark , Kajol Jain , John Garry , Kan Liang , Adrian Hunter , Andrii Nakryiko , Eduard Zingerman , Suzuki Poulouse , Leo Yan , Florian Fischer , Ravi Bangoria , Jing Zhang , Sean Christopherson , Athira Rajeev , LKML , linux-perf-users , "moderated list:ARM/STM32 ARCHITECTURE" , Linux ARM , Perry Taylor , Caleb Biggers Subject: Re: [PATCH v1 00/51] shadow metric clean up and improvements Message-ID: References: <20230219092848.639226-1-irogers@google.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Url: http://acmel.wordpress.com 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 RW0gVHVlLCBGZWIgMjEsIDIwMjMgYXQgMDk6NDQ6MzZBTSAtMDgwMCwgSWFuIFJvZ2VycyBlc2Ny ZXZldToKPiBPbiBTdW4sIEZlYiAxOSwgMjAyMyBhdCA3OjQz4oCvQU0gSWFuIFJvZ2VycyA8aXJv Z2Vyc0Bnb29nbGUuY29tPiB3cm90ZToKPiA+Cj4gPiBPbiBTdW4sIEZlYiAxOSwgMjAyMywgMzox NyBBTSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAa2VybmVsLm9yZz4gd3JvdGU6Cj4g PiA+Cj4gPiA+IEVtIFN1biwgRmViIDE5LCAyMDIzIGF0IDAxOjI3OjU3QU0gLTA4MDAsIElhbiBS b2dlcnMgZXNjcmV2ZXU6Cj4gPiA+ID4gUmVjZW50bHkgdGhlIHNoYWRvdyBzdGF0IG1ldHJpY3Mg YnJva2UgZHVlIHRvIHJlcGVhdGVkIGFnZ3JlZ2F0aW9uIGFuZAo+ID4gPiA+IGEgcXVpY2sgZml4 IHdhcyBhcHBsaWVkOgo+ID4gPiA+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMjAyMzAy MDkwNjQ0NDcuODM3MzMtMS1pcm9nZXJzQGdvb2dsZS5jb20vCj4gPiA+ID4gVGhpcyBpcyB0aGUg bG9uZ2VyIGZpeCBidXQgb25lIHRoYXQgY29tZXMgd2l0aCBzb21lIGV4dHJhcy4gVG8gYXZvaWQK PiA+ID4gPiBmaXhpbmcgaXNzdWVzIGZvciBoYXJkIGNvZGVkIG1ldHJpY3MsIHRoZSB0b3Bkb3du LCBTTUkgY29zdCBhbmQKPiA+ID4gPiB0cmFuc2FjdGlvbiBmbGFncyBhcmUgbW92ZWQgaW50byBq c29uIG1ldHJpY3MuIEEgc2lkZSBlZmZlY3Qgb2YgdGhpcwo+ID4gPiA+IGlzIHRoYXQgVG9wZG93 bkwxIG1ldHJpY3Mgd2lsbCBub3cgYmUgZGlzcGxheWVkIHdoZW4gc3VwcG9ydGVkLCBpZiBubwo+ ID4gPiA+ICJwZXJmIHN0YXQiIGV2ZW50cyBhcmUgc3BlY2lmaWVkLgo+ID4gPiA+Cj4gPiA+ID4g QW5vdGhlciBmaXggaW5jbHVkZWQgaGVyZSBpcyBmb3IgZXZlbnQgZ3JvdXBpbmcgYXMgcmFpc2Vk IGluOgo+ID4gPiA+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvQ0EraWNaVVVfZXc3cHpX SkpaTGJqMXhzVTZNUVRQcmo4dGtGZkRoTmRURFJRZkdVQk1RQG1haWwuZ21haWwuY29tLwo+ID4g PiA+IE1ldHJpY3MgYXJlIG5vdyB0YWdnZWQgd2l0aCBOTUkgYW5kIFNNVCBmbGFncywgbWVhbmlu ZyB0aGF0IHRoZSBldmVudHMKPiA+ID4gPiBzaG91bGRuJ3QgYmUgZ3JvdXBlZCBpZiB0aGUgTk1J IHdhdGNoZG9nIGlzIGVuYWJsZWQgb3IgU01UIGlzIGVuYWJsZWQuCj4gPiA+ID4KPiA+ID4gPiBH aXZlbiB0aGUgdHdvIGlzc3VlcywgdGhlIG1ldHJpY3MgYXJlIHJlLWdlbmVyYXRlZCBhbmQgdGhl IHBhdGNoZXMKPiA+ID4gPiBhbHNvIGluY2x1ZGUgdGhlIGxhdGVzdCBJbnRlbCB2ZW5kb3IgZXZl bnRzLiBUaGUgY2hhbmdlcyB0byB0aGUgbWV0cmljCj4gPiA+ID4gZ2VuZXJhdGlvbiBjb2RlIGNh biBiZSBzZWVuIGluOgo+ID4gPiA+IGh0dHBzOi8vZ2l0aHViLmNvbS9pbnRlbC9wZXJmbW9uL3B1 bGwvNTYKPiA+ID4gPgo+ID4gPiA+IEhhcmQgY29kZWQgbWV0cmljcyBzdXBwb3J0IHRocmVzaG9s ZHMsIHRoZSBwYXRjaGVzIGFkZCB0aGlzIGFiaWxpdHkgdG8KPiA+ID4gPiBqc29uIG1ldHJpY3Mg c28gdGhhdCB0aGUgaGFyZCBjb2RlZCBtZXRyaWNzIGNhbiBiZSByZW1vdmVkLiBNaWdyYXRlCj4g PiA+ID4gcmVtYWluaW5nIGhhcmQgY29kZWQgbWV0cmljcyB0byBsb29raW5nIHVwIGNvdW50ZXJz IGZyb20gdGhlCj4gPiA+ID4gZXZsaXN0L2FnZ3JlZ2F0aW9uIGNvdW50LiBGaW5hbGx5LCBnZXQg cmlkIG9mIHRoZSBzYXZlZF92YWx1ZSBsb2dpYwo+ID4gPiA+IGFuZCB0aGVyZWJ5IGxvb2sgdG8g Zml4IHRoZSBhZ2dyZWdhdGlvbiBpc3N1ZXMuCj4gPiA+ID4KPiA+ID4gPiBTb21lIHJlbGF0ZWQg Zml4IHVwcyBhbmQgY29kZSBjbGVhbiB1cHMgYXJlIGluY2x1ZGVkIGluIHRoZSBjaGFuZ2VzLAo+ ID4gPiA+IGluIHBhcnRpY3VsYXIgdG8gYWlkIHdpdGggdGhlIGNvZGUncyByZWFkYWJpbGl0eSBh bmQgdG8ga2VlcCB0b3Bkb3duCj4gPiA+ID4gZG9jdW1lbnRhdGlvbiBpbiBzeW5jLgo+ID4gPgo+ ID4gPiBUaGF0IGlzIGdyZWF0IHdvcmsgYnV0IHdvbid0IGhhdmUgYSByZWFzb25hYmxlIHRpbWUg c2l0dGluZyBvbgo+ID4gPiBsaW51eC1uZXh0IHRvIG1ha2UgaXQgaW50byA2LjMuCj4gPiA+Cj4g PiA+IEkgaGF2ZSBqdXN0IGFwcGxpZWQgaXQgbG9jYWxseSBmb3IgdGhlIHVzdWFsIHNldCBvZiB0 ZXN0cywgdGhhdCBJJ2xsCj4gPiA+IHJlcG9ydCBiYWNrIGhlcmUuCj4gPgo+ID4KPiA+IFVnaC4g SSdtIGd1ZXNzaW5nIGl0IHdvbid0IGJlIHVzZWZ1bCBpZiBJIHBvaW50IG91dCBtb3JlIHRoaW5n cyBicm9rZW4KPiA+IHdpdGggdGhlIGN1cnJlbnQgd29ya2Fyb3VuZCwgbGlrZSBtZXRyaWNzIHdp dGggLS1yZXBlYXQgOi0vCj4gPgo+ID4gVGhhbmtzLAo+ID4gSWFuCj4gCj4gU28gY3VycmVudGx5 IHRoZSBmbG93IG9mIHBhdGNoZXMgaXM6Cj4gCj4gMSkgaW5pdGlhbGx5IHRlc3RpbmcgLSBhY21l IHRtcC5wZXJmL2NvcmUKPiAyKSB0aGluZ3Mgc3RhZ2VkIGZvciBuZXh0IHJlbGVhc2UgLSBhY21l IHBlcmYvY29yZSAocGVyaGFwcyB0aGlzCj4gc2hvdWxkIGJlIGNhbGxlZCBwZXJmLW5leHQpCgpZ ZWFoLCBwZXJmLXRvb2xzLW5leHQgcHJvYmFibHkuCgo+IDMpIGxpbnV4IHdpZGUgbmV4dCByZWxl YXNlIHRlc3RpbmcgLSBsaW51eC1uZXh0Cj4gNCkgcmVsZWFzZSAtIGxpbnVzL21hc3Rlcgo+IAo+ IEkgd29uZGVyIGlmIHRoZXJlIHNob3VsZCBiZSBhIHBlcmYtbmV4dC1uZXh0IGJyYW5jaCB0byB3 b3JrIGFyb3VuZCB0aGUKPiAic2l0dGluZyB0aW1lIiBwcm9ibGVtLiBPdGhlcndpc2UgYW55Ym9k eSB3aG8gdG91Y2hlcyBjb2RlIGluIHRoZXNlIDUxCj4gcGF0Y2hlcyB3aWxsIGNyZWF0ZSBhIG1l cmdlIGNvbmZsaWN0LiBHaXZlbiB0aGUgYWdncmVnYXRpb24gaXNzdWVzCj4gd2UncmUgbGlrZWx5 IHRvIHNlZSBjaGFuZ2VzIGluIHRoaXMgY29kZSBhbmQgc28gY29uZmxpY3RzIGFyZSBsaWtlbHkK PiB0byBoYXBwZW4uCj4gCj4gVGhlIHBhdGNoIGZsb3cgd2l0aCBwZXJmLW5leHQtbmV4dCB3b3Vs ZCBiZToKPiAKPiAxKSBpbml0aWFsIHRlc3RpbmcgLSB0bXAucGVyZi1uZXh0LW5leHQKPiAyKSB0 aGluZ3MgYWNxdWlyaW5nIHNpdHRpbmcgdGltZSBhbmQgd2hlcmUgZGV2ZWxvcGVycyB3b3JrIC0g cGVyZi1uZXh0LW5leHQKPiAzKSB0aGluZ3Mgc3RhZ2VkIGZvciB0aGUgbmV4dCByZWxlYXNlIC0g cGVyZi1uZXh0Cj4gNCkgYXMgMyBhYm92ZQo+IDUpIGFzIDQgYWJvdmUKPiAKPiBXaXRoIGxpbnV4 LW5leHQgcGlja2luZyB1cCBhY21lIHBlcmYvY29yZSAoYWthIHBlcmYtbmV4dCkgZGFpbHkgaXQK PiBpc24ndCBjbGVhciB3aGV0aGVyIHdlIHNob3VsZCB3b3JrIG9mZiBvZiBwZXJmLWNvcmUgb3Ig bGludXgtbmV4dCBhcwo+IHRoZXkgYXJlIHNvIGluIHN5bmMuIFRoaXMgcHJvY2VzcyBtZWFucyB3 ZSd2ZSBsb3N0IGEgc2l0dGluZyBwbGFjZSBmb3IKPiBkZXZlbG9wZXIgcGF0Y2hlcyBhbmQgd2Un cmUgZ29pbmcgdG8gZmVlbCB0aGUgcGFpbiBpbiB0ZXJtcyBvZiBtZXJnZQo+IGNvbmZsaWN0cyBv biB0aGUgbGlzdCwgZGlmZmljdWx0eSBidWlsZGluZyBvZmYgb2YgdGhlIGxhdGVzdCB3b3JrCj4g d2l0aG91dCBjaGVycnktcGlja2luZyBmcm9tIHRoZSBsaXN0LCBldGMuCgpJJ2xsIHNlbmQgcGVy Zi9jb3JlIHRvIExpbnVzIHRvZGF5IGFuZCB0aGVuIHlvdXIgNTEgcGF0Y2hlcyB3aWxsIGFwcGVh cgpvbiBwZXJmLXRvb2xzLW5leHQsIHdoZXJlIHdlJ2xsIGRvIHdoYXQgd2FzIGRvbmUgYmVmb3Jl IGluIHBlcmYvY29yZQoocmVtYWluZWQgbGlrZSB0aGF0IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMp LgoKSSdsbCBtYWtlIHBlcmYvdXJnZW50IGJlY29tZSAncGVyZi10b29scycsIGFuZCB3aGVuIHRo ZSBtZXJnZSB3aW5kb3cKY2xvc2VzLCB3ZSB0dXJuICdwZXJmLXRvb2xzLW5leHQnIGludG8gJ3Bl cmYtdG9vbHMnLAoKLSBBcm5hbGRvCiAKPiBUaGFua3MsCj4gSWFuCj4gCj4gPiA+IC0gQXJuYWxk bwo+ID4gPgo+ID4gPiA+IElhbiBSb2dlcnMgKDUxKToKPiA+ID4gPiAgIHBlcmYgdG9vbHM6IEVu c3VyZSBldnNlbCBuYW1lIGlzIGluaXRpYWxpemVkCj4gPiA+ID4gICBwZXJmIG1ldHJpY3M6IElt cHJvdmUgdmFyaWFibGUgbmFtZXMKPiA+ID4gPiAgIHBlcmYgcG11LWV2ZW50czogUmVtb3ZlIGFn Z3JfbW9kZSBmcm9tIHBtdV9ldmVudAo+ID4gPiA+ICAgcGVyZiBwbXUtZXZlbnRzOiBDaGFuZ2Ug YWdncl9tb2RlIHRvIGJlIGFuIGVudW0KPiA+ID4gPiAgIHBlcmYgcG11LWV2ZW50czogQ2hhbmdl IGRlcHJlY2F0ZWQgdG8gYmUgYSBib29sCj4gPiA+ID4gICBwZXJmIHBtdS1ldmVudHM6IENoYW5n ZSBwZXJwa2cgdG8gYmUgYSBib29sCj4gPiA+ID4gICBwZXJmIGV4cHI6IE1ha2UgdGhlIG9ubGlu ZSB0b3BvbG9neSBhY2Nlc3NpYmxlIGdsb2JhbGx5Cj4gPiA+ID4gICBwZXJmIHBtdS1ldmVudHM6 IE1ha2UgdGhlIG1ldHJpY19jb25zdHJhaW50IGFuIGVudW0KPiA+ID4gPiAgIHBlcmYgcG11LWV2 ZW50czogRG9uJ3QgJ1wwJyB0ZXJtaW5hdGUgZW51bSB2YWx1ZXMKPiA+ID4gPiAgIHBlcmYgdmVu ZG9yIGV2ZW50cyBpbnRlbDogUmVmcmVzaCBhbGRlcmxha2UgZXZlbnRzCj4gPiA+ID4gICBwZXJm IHZlbmRvciBldmVudHMgaW50ZWw6IFJlZnJlc2ggYWxkZXJsYWtlLW4gbWV0cmljcwo+ID4gPiA+ ICAgcGVyZiB2ZW5kb3IgZXZlbnRzIGludGVsOiBSZWZyZXNoIGJyb2Fkd2VsbCBtZXRyaWNzCj4g PiA+ID4gICBwZXJmIHZlbmRvciBldmVudHMgaW50ZWw6IFJlZnJlc2ggYnJvYWR3ZWxsZGUgbWV0 cmljcwo+ID4gPiA+ICAgcGVyZiB2ZW5kb3IgZXZlbnRzIGludGVsOiBSZWZyZXNoIGJyb2Fkd2Vs bHggbWV0cmljcwo+ID4gPiA+ICAgcGVyZiB2ZW5kb3IgZXZlbnRzIGludGVsOiBSZWZyZXNoIGNh c2NhZGVsYWtleCBldmVudHMKPiA+ID4gPiAgIHBlcmYgdmVuZG9yIGV2ZW50cyBpbnRlbDogQWRk IGdyYW5pdGVyYXBpZHMgZXZlbnRzCj4gPiA+ID4gICBwZXJmIHZlbmRvciBldmVudHMgaW50ZWw6 IFJlZnJlc2ggaGFzd2VsbCBtZXRyaWNzCj4gPiA+ID4gICBwZXJmIHZlbmRvciBldmVudHMgaW50 ZWw6IFJlZnJlc2ggaGFzd2VsbHggbWV0cmljcwo+ID4gPiA+ICAgcGVyZiB2ZW5kb3IgZXZlbnRz IGludGVsOiBSZWZyZXNoIGljZWxha2UgZXZlbnRzCj4gPiA+ID4gICBwZXJmIHZlbmRvciBldmVu dHMgaW50ZWw6IFJlZnJlc2ggaWNlbGFrZXggbWV0cmljcwo+ID4gPiA+ICAgcGVyZiB2ZW5kb3Ig ZXZlbnRzIGludGVsOiBSZWZyZXNoIGl2eWJyaWRnZSBtZXRyaWNzCj4gPiA+ID4gICBwZXJmIHZl bmRvciBldmVudHMgaW50ZWw6IFJlZnJlc2ggaXZ5dG93biBtZXRyaWNzCj4gPiA+ID4gICBwZXJm IHZlbmRvciBldmVudHMgaW50ZWw6IFJlZnJlc2ggamFrZXRvd24gZXZlbnRzCj4gPiA+ID4gICBw ZXJmIHZlbmRvciBldmVudHMgaW50ZWw6IFJlZnJlc2gga25pZ2h0c2xhbmRpbmcgZXZlbnRzCj4g PiA+ID4gICBwZXJmIHZlbmRvciBldmVudHMgaW50ZWw6IFJlZnJlc2ggc2FuZHlicmlkZ2UgZXZl bnRzCj4gPiA+ID4gICBwZXJmIHZlbmRvciBldmVudHMgaW50ZWw6IFJlZnJlc2ggc2FwcGhpcmVy YXBpZHMgZXZlbnRzCj4gPiA+ID4gICBwZXJmIHZlbmRvciBldmVudHMgaW50ZWw6IFJlZnJlc2gg c2lsdmVybW9udCBldmVudHMKPiA+ID4gPiAgIHBlcmYgdmVuZG9yIGV2ZW50cyBpbnRlbDogUmVm cmVzaCBza3lsYWtlIGV2ZW50cwo+ID4gPiA+ICAgcGVyZiB2ZW5kb3IgZXZlbnRzIGludGVsOiBS ZWZyZXNoIHNreWxha2V4IG1ldHJpY3MKPiA+ID4gPiAgIHBlcmYgdmVuZG9yIGV2ZW50cyBpbnRl bDogUmVmcmVzaCB0aWdlcmxha2UgZXZlbnRzCj4gPiA+ID4gICBwZXJmIHZlbmRvciBldmVudHMg aW50ZWw6IFJlZnJlc2ggd2VzdG1lcmVlcC1kcCBldmVudHMKPiA+ID4gPiAgIHBlcmYgamV2ZW50 czogQWRkIHJhbmQgc3VwcG9ydCB0byBtZXRyaWNzCj4gPiA+ID4gICBwZXJmIGpldmVudDogUGFy c2UgbWV0cmljIHRocmVzaG9sZHMKPiA+ID4gPiAgIHBlcmYgcG11LWV2ZW50czogVGVzdCBwYXJz aW5nIG1ldHJpYyB0aHJlc2hvbGRzIHdpdGggdGhlIGZha2UgUE1VCj4gPiA+ID4gICBwZXJmIGxp c3Q6IFN1cHBvcnQgZm9yIHByaW50aW5nIG1ldHJpYyB0aHJlc2hvbGRzCj4gPiA+ID4gICBwZXJm IG1ldHJpYzogQ29tcHV0ZSBhbmQgcHJpbnQgdGhyZXNob2xkIHZhbHVlcwo+ID4gPiA+ICAgcGVy ZiBleHByOiBNb3JlIGV4cGxpY2l0IE5BTiBoYW5kbGluZwo+ID4gPiA+ICAgcGVyZiBtZXRyaWM6 IEFkZCAtLW1ldHJpYy1uby10aHJlc2hvbGQgb3B0aW9uCj4gPiA+ID4gICBwZXJmIHN0YXQ6IEFk ZCBUb3Bkb3duTDEgbWV0cmljIGFzIGEgZGVmYXVsdCBpZiBwcmVzZW50Cj4gPiA+ID4gICBwZXJm IHN0YXQ6IEltcGxlbWVudCAtLXRvcGRvd24gdXNpbmcganNvbiBtZXRyaWNzCj4gPiA+ID4gICBw ZXJmIHN0YXQ6IFJlbW92ZSB0b3Bkb3duIGV2ZW50IHNwZWNpYWwgaGFuZGxpbmcKPiA+ID4gPiAg IHBlcmYgZG9jOiBSZWZyZXNoIHRvcGRvd24gZG9jdW1lbnRhdGlvbgo+ID4gPiA+ICAgcGVyZiBz dGF0OiBSZW1vdmUgaGFyZCBjb2RlZCB0cmFuc2FjdGlvbiBldmVudHMKPiA+ID4gPiAgIHBlcmYg c3RhdDogVXNlIG1ldHJpY3MgZm9yIC0tc21pLWNvc3QKPiA+ID4gPiAgIHBlcmYgc3RhdDogUmVt b3ZlIHBlcmZfc3RhdF9ldnNlbF9pZAo+ID4gPiA+ICAgcGVyZiBzdGF0OiBNb3ZlIGVudW1zIGZy b20gaGVhZGVyCj4gPiA+ID4gICBwZXJmIHN0YXQ6IEhpZGUgcnVudGltZV9zdGF0Cj4gPiA+ID4g ICBwZXJmIHN0YXQ6IEFkZCBjcHVfYWdncl9tYXAgZm9yIGxvb3AKPiA+ID4gPiAgIHBlcmYgbWV0 cmljOiBEaXJlY3RseSB1c2UgY291bnRzIHJhdGhlciB0aGFuIHNhdmVkX3ZhbHVlCj4gPiA+ID4g ICBwZXJmIHN0YXQ6IFVzZSBjb3VudHMgcmF0aGVyIHRoYW4gc2F2ZWRfdmFsdWUKPiA+ID4gPiAg IHBlcmYgc3RhdDogUmVtb3ZlIHNhdmVkX3ZhbHVlL3J1bnRpbWVfc3RhdAo+ID4gPiA+Cj4gPiA+ ID4gIHRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXN0YXQudHh0ICAgICAgICB8ICAgMjcg Ky0KPiA+ID4gPiAgdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3RvcGRvd24udHh0ICAgICAgICAg IHwgICA3MCArLQo+ID4gPiA+ICB0b29scy9wZXJmL2FyY2gvcG93ZXJwYy91dGlsL2hlYWRlci5j ICAgICAgICAgfCAgICAyICstCj4gPiA+ID4gIHRvb2xzL3BlcmYvYXJjaC94ODYvdXRpbC9ldmxp c3QuYyAgICAgICAgICAgICB8ICAgIDYgKy0KPiA+ID4gPiAgdG9vbHMvcGVyZi9hcmNoL3g4Ni91 dGlsL3RvcGRvd24uYyAgICAgICAgICAgIHwgICA3OCArLQo+ID4gPiA+ICB0b29scy9wZXJmL2Fy Y2gveDg2L3V0aWwvdG9wZG93bi5oICAgICAgICAgICAgfCAgICAxIC0KPiA+ID4gPiAgdG9vbHMv cGVyZi9idWlsdGluLWxpc3QuYyAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArLQo+ID4gPiA+ ICB0b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMgICAgICAgICAgICAgICAgICAgfCAgICA5ICst Cj4gPiA+ID4gIHRvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgICAgICAgICAgICAgICAgICAgICB8 ICAyMzMgKy0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L2FsZGVybGFrZS9hZGwtbWV0cmljcy5qc29u ICAgICAgIHwgMzE5MCArKysrKysrKysrLS0tLS0tLQo+ID4gPiA+ICAuLi4vcG11LWV2ZW50cy9h cmNoL3g4Ni9hbGRlcmxha2UvY2FjaGUuanNvbiAgfCAgIDM2ICstCj4gPiA+ID4gIC4uLi9hcmNo L3g4Ni9hbGRlcmxha2UvZmxvYXRpbmctcG9pbnQuanNvbiAgICB8ICAgMjcgKwo+ID4gPiA+ICAu Li4vYXJjaC94ODYvYWxkZXJsYWtlL2Zyb250ZW5kLmpzb24gICAgICAgICAgfCAgICA5ICsKPiA+ ID4gPiAgLi4uL3BtdS1ldmVudHMvYXJjaC94ODYvYWxkZXJsYWtlL21lbW9yeS5qc29uIHwgICAg MyArLQo+ID4gPiA+ICAuLi4vYXJjaC94ODYvYWxkZXJsYWtlL3BpcGVsaW5lLmpzb24gICAgICAg ICAgfCAgIDE0ICstCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9hbGRlcmxha2UvdW5jb3JlLW90aGVy Lmpzb24gICAgICB8ICAgMjggKy0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L2FsZGVybGFrZW4vYWRs bi1tZXRyaWNzLmpzb24gICAgIHwgIDgxMSArKystLQo+ID4gPiA+ICAuLi4vYXJjaC94ODYvYnJv YWR3ZWxsL2Jkdy1tZXRyaWNzLmpzb24gICAgICAgfCAxNDM5ICsrKystLS0tCj4gPiA+ID4gIC4u Li9hcmNoL3g4Ni9icm9hZHdlbGxkZS9iZHdkZS1tZXRyaWNzLmpzb24gICB8IDE0MDUgKysrKy0t LS0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L2Jyb2Fkd2VsbHgvYmR4LW1ldHJpY3MuanNvbiAgICAg IHwgMTYyNiArKysrKy0tLS0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L2Jyb2Fkd2VsbHgvdW5jb3Jl LWNhY2hlLmpzb24gICAgIHwgICA3NCArLQo+ID4gPiA+ICAuLi4veDg2L2Jyb2Fkd2VsbHgvdW5j b3JlLWludGVyY29ubmVjdC5qc29uICAgfCAgIDY0ICstCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9i cm9hZHdlbGx4L3VuY29yZS1vdGhlci5qc29uICAgICB8ICAgIDQgKy0KPiA+ID4gPiAgLi4uL2Fy Y2gveDg2L2Nhc2NhZGVsYWtleC9jYWNoZS5qc29uICAgICAgICAgIHwgICAyNCArLQo+ID4gPiA+ ICAuLi4vYXJjaC94ODYvY2FzY2FkZWxha2V4L2NseC1tZXRyaWNzLmpzb24gICAgfCAyMTk4ICsr KysrKy0tLS0tLQo+ID4gPiA+ICAuLi4vYXJjaC94ODYvY2FzY2FkZWxha2V4L2Zyb250ZW5kLmpz b24gICAgICAgfCAgICA4ICstCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9jYXNjYWRlbGFrZXgvcGlw ZWxpbmUuanNvbiAgICAgICB8ICAgMTYgKwo+ID4gPiA+ICAuLi4vYXJjaC94ODYvY2FzY2FkZWxh a2V4L3VuY29yZS1tZW1vcnkuanNvbiAgfCAgIDE4ICstCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9j YXNjYWRlbGFrZXgvdW5jb3JlLW90aGVyLmpzb24gICB8ICAxMjAgKy0KPiA+ID4gPiAgLi4uL2Fy Y2gveDg2L2Nhc2NhZGVsYWtleC91bmNvcmUtcG93ZXIuanNvbiAgIHwgICAgOCArLQo+ID4gPiA+ ICAuLi4vYXJjaC94ODYvZ3Jhbml0ZXJhcGlkcy9jYWNoZS5qc29uICAgICAgICAgfCAgIDU0ICsK PiA+ID4gPiAgLi4uL2FyY2gveDg2L2dyYW5pdGVyYXBpZHMvZnJvbnRlbmQuanNvbiAgICAgIHwg ICAxMCArCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9ncmFuaXRlcmFwaWRzL21lbW9yeS5qc29uICAg ICAgICB8ICAxNzQgKwo+ID4gPiA+ICAuLi4vYXJjaC94ODYvZ3Jhbml0ZXJhcGlkcy9vdGhlci5q c29uICAgICAgICAgfCAgIDI5ICsKPiA+ID4gPiAgLi4uL2FyY2gveDg2L2dyYW5pdGVyYXBpZHMv cGlwZWxpbmUuanNvbiAgICAgIHwgIDEwMiArCj4gPiA+ID4gIC4uLi94ODYvZ3Jhbml0ZXJhcGlk cy92aXJ0dWFsLW1lbW9yeS5qc29uICAgICB8ICAgMjYgKwo+ID4gPiA+ICAuLi4vYXJjaC94ODYv aGFzd2VsbC9oc3ctbWV0cmljcy5qc29uICAgICAgICAgfCAxMjIwICsrKystLS0KPiA+ID4gPiAg Li4uL2FyY2gveDg2L2hhc3dlbGx4L2hzeC1tZXRyaWNzLmpzb24gICAgICAgIHwgMTM5NyArKysr LS0tLQo+ID4gPiA+ICAuLi4vcG11LWV2ZW50cy9hcmNoL3g4Ni9pY2VsYWtlL2NhY2hlLmpzb24g ICAgfCAgIDE2ICsKPiA+ID4gPiAgLi4uL2FyY2gveDg2L2ljZWxha2UvZmxvYXRpbmctcG9pbnQu anNvbiAgICAgIHwgICAzMSArCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9pY2VsYWtlL2ljbC1tZXRy aWNzLmpzb24gICAgICAgICB8IDE5MzIgKysrKystLS0tLQo+ID4gPiA+ICAuLi4vcG11LWV2ZW50 cy9hcmNoL3g4Ni9pY2VsYWtlL3BpcGVsaW5lLmpzb24gfCAgIDIzICstCj4gPiA+ID4gIC4uLi9h cmNoL3g4Ni9pY2VsYWtlL3VuY29yZS1vdGhlci5qc29uICAgICAgICB8ICAgNTYgKwo+ID4gPiA+ ICAuLi4vYXJjaC94ODYvaWNlbGFrZXgvaWN4LW1ldHJpY3MuanNvbiAgICAgICAgfCAyMTUzICsr KysrLS0tLS0tCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9pY2VsYWtleC91bmNvcmUtbWVtb3J5Lmpz b24gICAgICB8ICAgIDIgKy0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L2ljZWxha2V4L3VuY29yZS1v dGhlci5qc29uICAgICAgIHwgICAgNCArLQo+ID4gPiA+ICAuLi4vYXJjaC94ODYvaXZ5YnJpZGdl L2l2Yi1tZXRyaWNzLmpzb24gICAgICAgfCAxMjcwICsrKystLS0KPiA+ID4gPiAgLi4uL2FyY2gv eDg2L2l2eXRvd24vaXZ0LW1ldHJpY3MuanNvbiAgICAgICAgIHwgMTMxMSArKysrLS0tCj4gPiA+ ID4gIC4uLi9wbXUtZXZlbnRzL2FyY2gveDg2L2pha2V0b3duL2NhY2hlLmpzb24gICB8ICAgIDYg Ky0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L2pha2V0b3duL2Zsb2F0aW5nLXBvaW50Lmpzb24gICAg IHwgICAgMiArLQo+ID4gPiA+ICAuLi4vYXJjaC94ODYvamFrZXRvd24vZnJvbnRlbmQuanNvbiAg ICAgICAgICAgfCAgIDEyICstCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9qYWtldG93bi9qa3QtbWV0 cmljcy5qc29uICAgICAgICB8ICA2MDIgKystLQo+ID4gPiA+ICAuLi4vYXJjaC94ODYvamFrZXRv d24vcGlwZWxpbmUuanNvbiAgICAgICAgICAgfCAgICAyICstCj4gPiA+ID4gIC4uLi9hcmNoL3g4 Ni9qYWtldG93bi91bmNvcmUtY2FjaGUuanNvbiAgICAgICB8ICAgMjIgKy0KPiA+ID4gPiAgLi4u L3g4Ni9qYWtldG93bi91bmNvcmUtaW50ZXJjb25uZWN0Lmpzb24gICAgIHwgICA3NCArLQo+ID4g PiA+ICAuLi4vYXJjaC94ODYvamFrZXRvd24vdW5jb3JlLW1lbW9yeS5qc29uICAgICAgfCAgICA0 ICstCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9qYWtldG93bi91bmNvcmUtb3RoZXIuanNvbiAgICAg ICB8ICAgMjIgKy0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L2pha2V0b3duL3VuY29yZS1wb3dlci5q c29uICAgICAgIHwgICAgOCArLQo+ID4gPiA+ICAuLi4vYXJjaC94ODYva25pZ2h0c2xhbmRpbmcv Y2FjaGUuanNvbiAgICAgICAgfCAgIDk0ICstCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9rbmlnaHRz bGFuZGluZy9waXBlbGluZS5qc29uICAgICB8ICAgIDggKy0KPiA+ID4gPiAgLi4uL2FyY2gveDg2 L2tuaWdodHNsYW5kaW5nL3VuY29yZS1vdGhlci5qc29uIHwgICAgOCArLQo+ID4gPiA+ICB0b29s cy9wZXJmL3BtdS1ldmVudHMvYXJjaC94ODYvbWFwZmlsZS5jc3YgICAgfCAgIDI5ICstCj4gPiA+ ID4gIC4uLi9hcmNoL3g4Ni9zYW5keWJyaWRnZS9jYWNoZS5qc29uICAgICAgICAgICB8ICAgIDgg Ky0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L3NhbmR5YnJpZGdlL2Zsb2F0aW5nLXBvaW50Lmpzb24g IHwgICAgMiArLQo+ID4gPiA+ICAuLi4vYXJjaC94ODYvc2FuZHlicmlkZ2UvZnJvbnRlbmQuanNv biAgICAgICAgfCAgIDEyICstCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9zYW5keWJyaWRnZS9waXBl bGluZS5qc29uICAgICAgICB8ICAgIDIgKy0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L3NhbmR5YnJp ZGdlL3NuYi1tZXRyaWNzLmpzb24gICAgIHwgIDYwMSArKy0tCj4gPiA+ID4gIC4uLi9hcmNoL3g4 Ni9zYXBwaGlyZXJhcGlkcy9jYWNoZS5qc29uICAgICAgICB8ICAgMjQgKy0KPiA+ID4gPiAgLi4u L3g4Ni9zYXBwaGlyZXJhcGlkcy9mbG9hdGluZy1wb2ludC5qc29uICAgIHwgICAzMiArCj4gPiA+ ID4gIC4uLi9hcmNoL3g4Ni9zYXBwaGlyZXJhcGlkcy9mcm9udGVuZC5qc29uICAgICB8ICAgIDgg Kwo+ID4gPiA+ICAuLi4vYXJjaC94ODYvc2FwcGhpcmVyYXBpZHMvcGlwZWxpbmUuanNvbiAgICAg fCAgIDE5ICstCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9zYXBwaGlyZXJhcGlkcy9zcHItbWV0cmlj cy5qc29uICB8IDIyODMgKysrKysrLS0tLS0tCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9zYXBwaGly ZXJhcGlkcy91bmNvcmUtb3RoZXIuanNvbiB8ICAgNjAgKwo+ID4gPiA+ICAuLi4vYXJjaC94ODYv c2lsdmVybW9udC9mcm9udGVuZC5qc29uICAgICAgICAgfCAgICAyICstCj4gPiA+ID4gIC4uLi9h cmNoL3g4Ni9zaWx2ZXJtb250L3BpcGVsaW5lLmpzb24gICAgICAgICB8ICAgIDIgKy0KPiA+ID4g PiAgLi4uL3BtdS1ldmVudHMvYXJjaC94ODYvc2t5bGFrZS9jYWNoZS5qc29uICAgIHwgICAyNSAr LQo+ID4gPiA+ICAuLi4vcG11LWV2ZW50cy9hcmNoL3g4Ni9za3lsYWtlL2Zyb250ZW5kLmpzb24g fCAgICA4ICstCj4gPiA+ID4gIC4uLi9wbXUtZXZlbnRzL2FyY2gveDg2L3NreWxha2Uvb3RoZXIu anNvbiAgICB8ICAgIDEgKwo+ID4gPiA+ICAuLi4vcG11LWV2ZW50cy9hcmNoL3g4Ni9za3lsYWtl L3BpcGVsaW5lLmpzb24gfCAgIDE2ICsKPiA+ID4gPiAgLi4uL2FyY2gveDg2L3NreWxha2Uvc2ts LW1ldHJpY3MuanNvbiAgICAgICAgIHwgMTg3NyArKysrKystLS0tCj4gPiA+ID4gIC4uLi9hcmNo L3g4Ni9za3lsYWtlL3VuY29yZS1vdGhlci5qc29uICAgICAgICB8ICAgIDEgKwo+ID4gPiA+ICAu Li4vcG11LWV2ZW50cy9hcmNoL3g4Ni9za3lsYWtleC9jYWNoZS5qc29uICAgfCAgICA4ICstCj4g PiA+ID4gIC4uLi9hcmNoL3g4Ni9za3lsYWtleC9mcm9udGVuZC5qc29uICAgICAgICAgICB8ICAg IDggKy0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L3NreWxha2V4L3BpcGVsaW5lLmpzb24gICAgICAg ICAgIHwgICAxNiArCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni9za3lsYWtleC9za3gtbWV0cmljcy5q c29uICAgICAgICB8IDIwOTcgKysrKystLS0tLS0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L3NreWxh a2V4L3VuY29yZS1tZW1vcnkuanNvbiAgICAgIHwgICAgMiArLQo+ID4gPiA+ICAuLi4vYXJjaC94 ODYvc2t5bGFrZXgvdW5jb3JlLW90aGVyLmpzb24gICAgICAgfCAgIDk2ICstCj4gPiA+ID4gIC4u Li9hcmNoL3g4Ni9za3lsYWtleC91bmNvcmUtcG93ZXIuanNvbiAgICAgICB8ICAgIDYgKy0KPiA+ ID4gPiAgLi4uL2FyY2gveDg2L3RpZ2VybGFrZS9mbG9hdGluZy1wb2ludC5qc29uICAgIHwgICAz MSArCj4gPiA+ID4gIC4uLi9hcmNoL3g4Ni90aWdlcmxha2UvcGlwZWxpbmUuanNvbiAgICAgICAg ICB8ICAgMTggKwo+ID4gPiA+ICAuLi4vYXJjaC94ODYvdGlnZXJsYWtlL3RnbC1tZXRyaWNzLmpz b24gICAgICAgfCAxOTQyICsrKysrLS0tLS0KPiA+ID4gPiAgLi4uL2FyY2gveDg2L3RpZ2VybGFr ZS91bmNvcmUtb3RoZXIuanNvbiAgICAgIHwgICAyOCArLQo+ID4gPiA+ICAuLi4vYXJjaC94ODYv d2VzdG1lcmVlcC1kcC9jYWNoZS5qc29uICAgICAgICAgfCAgICAyICstCj4gPiA+ID4gIC4uLi94 ODYvd2VzdG1lcmVlcC1kcC92aXJ0dWFsLW1lbW9yeS5qc29uICAgICB8ICAgIDIgKy0KPiA+ID4g PiAgdG9vbHMvcGVyZi9wbXUtZXZlbnRzL2pldmVudHMucHkgICAgICAgICAgICAgIHwgICA1OCAr LQo+ID4gPiA+ICB0b29scy9wZXJmL3BtdS1ldmVudHMvbWV0cmljLnB5ICAgICAgICAgICAgICAg fCAgICA4ICstCj4gPiA+ID4gIHRvb2xzL3BlcmYvcG11LWV2ZW50cy9wbXUtZXZlbnRzLmggICAg ICAgICAgICB8ICAgMzUgKy0KPiA+ID4gPiAgdG9vbHMvcGVyZi90ZXN0cy9leHBhbmQtY2dyb3Vw LmMgICAgICAgICAgICAgIHwgICAgMyArLQo+ID4gPiA+ICB0b29scy9wZXJmL3Rlc3RzL2V4cHIu YyAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICstCj4gPiA+ID4gIHRvb2xzL3BlcmYvdGVz dHMvcGFyc2UtbWV0cmljLmMgICAgICAgICAgICAgICB8ICAgMjEgKy0KPiA+ID4gPiAgdG9vbHMv cGVyZi90ZXN0cy9wbXUtZXZlbnRzLmMgICAgICAgICAgICAgICAgIHwgICA0OSArLQo+ID4gPiA+ ICB0b29scy9wZXJmL3V0aWwvY3B1bWFwLmggICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsK PiA+ID4gPiAgdG9vbHMvcGVyZi91dGlsL2NwdXRvcG8uYyAgICAgICAgICAgICAgICAgICAgIHwg ICAxNCArCj4gPiA+ID4gIHRvb2xzL3BlcmYvdXRpbC9jcHV0b3BvLmggICAgICAgICAgICAgICAg ICAgICB8ICAgIDUgKwo+ID4gPiA+ICB0b29scy9wZXJmL3V0aWwvZXZzZWwuaCAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAyICstCj4gPiA+ID4gIHRvb2xzL3BlcmYvdXRpbC9leHByLmMgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMTYgKy0KPiA+ID4gPiAgdG9vbHMvcGVyZi91dGlsL2V4 cHIueSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArLQo+ID4gPiA+ICB0b29scy9wZXJm L3V0aWwvbWV0cmljZ3JvdXAuYyAgICAgICAgICAgICAgICAgfCAgMTc4ICstCj4gPiA+ID4gIHRv b2xzL3BlcmYvdXRpbC9tZXRyaWNncm91cC5oICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KPiA+ ID4gPiAgdG9vbHMvcGVyZi91dGlsL3BtdS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAx NyArLQo+ID4gPiA+ICB0b29scy9wZXJmL3V0aWwvcHJpbnQtZXZlbnRzLmggICAgICAgICAgICAg ICAgfCAgICAxICsKPiA+ID4gPiAgdG9vbHMvcGVyZi91dGlsL3NtdC5jICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAxMSArLQo+ID4gPiA+ICB0b29scy9wZXJmL3V0aWwvc210LmggICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDEyICstCj4gPiA+ID4gIHRvb2xzL3BlcmYvdXRpbC9zdGF0 LWRpc3BsYXkuYyAgICAgICAgICAgICAgICB8ICAxMTcgKy0KPiA+ID4gPiAgdG9vbHMvcGVyZi91 dGlsL3N0YXQtc2hhZG93LmMgICAgICAgICAgICAgICAgIHwgMTI4NyArKy0tLS0tCj4gPiA+ID4g IHRvb2xzL3BlcmYvdXRpbC9zdGF0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzQgLQo+ ID4gPiA+ICB0b29scy9wZXJmL3V0aWwvc3RhdC5oICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDk2ICstCj4gPiA+ID4gIHRvb2xzL3BlcmYvdXRpbC9zeW50aGV0aWMtZXZlbnRzLmMgICAgICAg ICAgICB8ICAgIDIgKy0KPiA+ID4gPiAgdG9vbHMvcGVyZi91dGlsL3RvcGRvd24uYyAgICAgICAg ICAgICAgICAgICAgIHwgICA2OCArLQo+ID4gPiA+ICB0b29scy9wZXJmL3V0aWwvdG9wZG93bi5o ICAgICAgICAgICAgICAgICAgICAgfCAgIDExICstCj4gPiA+ID4gIDEyMCBmaWxlcyBjaGFuZ2Vk LCAxODAyNSBpbnNlcnRpb25zKCspLCAxNTU5MCBkZWxldGlvbnMoLSkKPiA+ID4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IHRvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL3g4Ni9ncmFuaXRlcmFwaWRz L2NhY2hlLmpzb24KPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3BlcmYvcG11LWV2 ZW50cy9hcmNoL3g4Ni9ncmFuaXRlcmFwaWRzL2Zyb250ZW5kLmpzb24KPiA+ID4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IHRvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL3g4Ni9ncmFuaXRlcmFwaWRz L21lbW9yeS5qc29uCj4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9wZXJmL3BtdS1l dmVudHMvYXJjaC94ODYvZ3Jhbml0ZXJhcGlkcy9vdGhlci5qc29uCj4gPiA+ID4gIGNyZWF0ZSBt b2RlIDEwMDY0NCB0b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC94ODYvZ3Jhbml0ZXJhcGlkcy9w aXBlbGluZS5qc29uCj4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9wZXJmL3BtdS1l dmVudHMvYXJjaC94ODYvZ3Jhbml0ZXJhcGlkcy92aXJ0dWFsLW1lbW9yeS5qc29uCj4gPiA+ID4K PiA+ID4gPiAtLQo+ID4gPiA+IDIuMzkuMi42MzcuZzIxYjA2NzhkMTktZ29vZwo+ID4gPiA+Cj4g PiA+Cj4gPiA+IC0tCj4gPiA+Cj4gPiA+IC0gQXJuYWxkbwoKLS0gCgotIEFybmFsZG8KCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK