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 907D1C433FE for ; Thu, 24 Nov 2022 16:33:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229497AbiKXQdH (ORCPT ); Thu, 24 Nov 2022 11:33:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35054 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229499AbiKXQdG (ORCPT ); Thu, 24 Nov 2022 11:33:06 -0500 Received: from out30-45.freemail.mail.aliyun.com (out30-45.freemail.mail.aliyun.com [115.124.30.45]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 609E1769E9; Thu, 24 Nov 2022 08:33:04 -0800 (PST) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R831e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046050;MF=renyu.zj@linux.alibaba.com;NM=1;PH=DS;RN=20;SR=0;TI=SMTPD_---0VVbikvs_1669307577; Received: from 30.0.180.161(mailfrom:renyu.zj@linux.alibaba.com fp:SMTPD_---0VVbikvs_1669307577) by smtp.aliyun-inc.com; Fri, 25 Nov 2022 00:32:59 +0800 Message-ID: <50d46dcf-5e30-cd3d-82a2-51e527ff641f@linux.alibaba.com> Date: Fri, 25 Nov 2022 00:32:55 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.4.1 Subject: Re: [External] : [RFC PATCH v2 1/6] perf vendor events arm64: Add topdown L1 metrics for neoverse-n2 To: James Clark , John Garry Cc: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Andrew Kilroy , Shuai Xue , Zhuo Song , linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Will Deacon , Mike Leach , Leo Yan , Ian Rogers , Nick Forrington References: <1667214694-89839-1-git-send-email-renyu.zj@linux.alibaba.com> <1668411720-3581-2-git-send-email-renyu.zj@linux.alibaba.com> <590ff032-d271-48ee-a4d8-141cc070c335@oracle.com> <75c4f0e6-3f28-a748-e891-7be6016ca28e@oracle.com> <57315669-e6e7-08b8-a252-bc35d4fecc01@arm.com> <180a34c2-f68d-6f4d-da74-7bbb80e9e65c@linux.alibaba.com> <279545ee-1758-c60d-fdc3-2b15bcc4be6d@arm.com> From: Jing Zhang In-Reply-To: <279545ee-1758-c60d-fdc3-2b15bcc4be6d@arm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-perf-users@vger.kernel.org 在 2022/11/23 下午10:26, James Clark 写道: > > > On 22/11/2022 15:41, Jing Zhang wrote: >> >> >> 在 2022/11/22 下午10:00, James Clark 写道: >>> >>> >>> On 21/11/2022 17:55, John Garry wrote: >>>> On 21/11/2022 15:17, Jing Zhang wrote: >>>>> I'm sorry that I misunderstood the purpose of putting metric as >>>>> arch_std_event at first, >>>>> and now it works after the modification over your suggestion. >>>>> >>>>> But there are also a few questions: >>>>> >>>>> 1. The value of the slot in the topdownL1 is various in different >>>>> architectures, for example, >>>>> the slot is 5 on neoverse-n2. If I put topdownL1 metric as >>>>> arch_std_event, then I need to >>>>> specify the slot to 5 in n2. I can specify slot values in metric like >>>>> below, but is there any >>>>> other concise way to do this? >>>>> >>>>> diff --git >>>>> a/tools/perf/pmu-events/arch/arm64/arm/neoverse-n2/metrics.json >>>>> b/tools/perf/pmu-events/arch/arm64/arm/neoverse-n2/metrics.json >>>>> index 8ff1dfe..b473baf 100644 >>>>> --- a/tools/perf/pmu-events/arch/arm64/arm/neoverse-n2/metrics.json >>>>> +++ b/tools/perf/pmu-events/arch/arm64/arm/neoverse-n2/metrics.json >>>>> @@ -1,4 +1,23 @@ >>>>> [ >>>>> +       { >>>>> +               "MetricExpr": "5", >>>>> +               "PublicDescription": "A pipeline slot represents the >>>>> hardware resources needed to process one uOp", >>>>> +               "BriefDescription": "A pipeline slot represents the >>>>> hardware resources needed to process one uOp", >>>>> +               "MetricName": "slot" >>>> >>>> Ehhh....I'm not sure if that is a good idea. Ian or anyone else have an >>>> opinion on this? It is possible to reuse metrics, so it should work, but... >>>> >>>> One problem is that "slot" would show up as a metric, which you would >>>> not want. >>>> >>>> Alternatively I was going to suggest that you can overwrite specific std >>>> arch event attributes. So for example of frontend_bound, you could have: >>> >>> I would agree with not having this and just hard coding the 5 wherever >>> it's needed. Once we have a few different sets of metrics in place maybe >>> we can start to look at deduplication, but for now I don't see the value. >>> >>>> >>>> + b/tools/perf/pmu-events/arch/arm64/arm/neoverse-n2/metrics.json >>>> @@ -0,0 +1,30 @@ >>>> [ >>>>     { >>>>     "ArchStdEvent": "FRONTEND_BOUND", >>>>         "MetricExpr": "(stall_slot_frontend - cpu_cycles) / (5 * >>>> cpu_cycles)", >>>>     }, >>>> >>>>> +       } >>>>> +       { >>>>> +               "ArchStdEvent": "FRONTEND_BOUND" >>>>> +       }, >>>>> +       { >>>>> +               "ArchStdEvent": "BACKEND_BOUND" >>>>> +       }, >>>>> +       { >>>>> +               "ArchStdEvent": "WASTED" >>>>> +       }, >>>>> +       { >>>>> +               "ArchStdEvent": "RETIRING" >>>>> +       }, >>>>> >>>>> >>>>> 2. Should I add the topdownL1 metric to >>>>> tools/perf/pmu-event/recommended.json, >>>>> or create a new json file to place the general metric? >>>> >>>> It would not belong in recommended.json as that is specifically for >>>> arch-recommended events. It would really just depend on where the value >>>> comes from, i.e. arm arm or sbsa. >>>> >>> >>> For what we're going to publish shortly we'll be generating a >>> metrics.json file for each CPU. It will be autogenerated so I don't >>> think duplication will be an issue and I'm expecting that there will be >>> differences in the topdown metrics between CPUs anyway. So I would also >>> vote to not put it in recommended.json >>> >> >> I will create a new sbsa.json file in tools/perf/pmu-events/arch/arm64/ >> to place metrics that may be common between some CPUs, just like arch_std_event. > > Because this would apply to all CPUs rather than just N2, I still think > it's best to wait for our metrics repo to be published. Otherwise Arm > will start publishing metrics with names and group names for all future > CPUs that have different names to the common ones added as part of this > change. > > It's something that we've been working on for quite a while and we've > taken care to make sure that it applies to future products and is scalable. > > It would be easier to add these right now only for N2, and then > afterwards we can start to look at what is common and could be factored > out into the top level folder. > >> If the topdown metrics are different in other CPUs, we can overwrite the >> metric expression. > > True, but with different group names and metric names and units it could > get slightly complicated. > >> >> For example: >> >> +++ b/tools/perf/pmu-events/arch/arm64/sbsa.json >> @@ -0,0 +1,9 @@ >> +[ >> + { >> + "MetricExpr": "stall_slot_frontend / (slot * cpu_cycles)", >> + "PublicDescription": "Frontend bound L1 topdown metric", >> + "BriefDescription": "Frontend bound L1 topdown metric", >> + "MetricGroup": "TopDownL1", >> + "MetricName": "FRONTEND_BOUND" >> + } >> +] >> >> + b/tools/perf/pmu-events/arch/arm64/arm/neoverse-n2/metrics.json >> @@ -0,0 +1,30 @@ >> +[ >> + { >> + "ArchStdEvent": "FRONTEND_BOUND", >> + "MetricExpr": "(stall_slot_frontend - cpu_cycles) / (5 * cpu_cycles)", >> + } >> +] >> > > With the auto generation of metrics file I don't really see too much > benefit of doing it this way. > > You also run into the issue where if a platform happens to define all of > the events required by a metric, will that metric appear automatically, > even if it's not valid? > Ok, I agree to put the topdown metric in the n2 metric instead of arch_std_event. There is no unified formula for the topdown metric currently, and the slots of each CPU may be different. After the standard are pubulished in the future, please consider what John said, and use the general metric as arch_std_event. 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 1F74AC433FE for ; Thu, 24 Nov 2022 16:34:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=JjXKfmSVpwxUChipVq881e4QgTW+qGbce4os8cD+Q+U=; b=La4ygEFMC5oMfI +/2YZm8KeJaO1pQfd51KZPDpFGZ7Jovg+i6Qs0GdJL68ffna0ZKBSUdiO6krFs01EDotzvbaen5O2 bVz6P8a2CQi8sS8aBs7UL39/qyuo0PGyX/PE03FHapoBwabO5Z5FNqBNE9Gcqvsp7xc2qwY4hWOFz +M2aX91Pt88VmfF6wXObByow4VeWSs2YmFIA8fjJ1tTkXNjwFxmWUeJow/TX7uwnR82o//JzQKfv0 Ykr6rdSK0aYCpj1/KuPkXgw8hKet0aU7U5PBpjS6cEOP0ExXa6q2MmlKdrDNfY4XhgGZAScl97Sgq 2Hb5c16LwPZphnCxB1LQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oyFA2-00A7SF-4U; Thu, 24 Nov 2022 16:33:14 +0000 Received: from out30-131.freemail.mail.aliyun.com ([115.124.30.131]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oyF9x-00A7Op-Nu for linux-arm-kernel@lists.infradead.org; Thu, 24 Nov 2022 16:33:12 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R831e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046050;MF=renyu.zj@linux.alibaba.com;NM=1;PH=DS;RN=20;SR=0;TI=SMTPD_---0VVbikvs_1669307577; Received: from 30.0.180.161(mailfrom:renyu.zj@linux.alibaba.com fp:SMTPD_---0VVbikvs_1669307577) by smtp.aliyun-inc.com; Fri, 25 Nov 2022 00:32:59 +0800 Message-ID: <50d46dcf-5e30-cd3d-82a2-51e527ff641f@linux.alibaba.com> Date: Fri, 25 Nov 2022 00:32:55 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.4.1 Subject: Re: [External] : [RFC PATCH v2 1/6] perf vendor events arm64: Add topdown L1 metrics for neoverse-n2 To: James Clark , John Garry Cc: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Andrew Kilroy , Shuai Xue , Zhuo Song , linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Will Deacon , Mike Leach , Leo Yan , Ian Rogers , Nick Forrington References: <1667214694-89839-1-git-send-email-renyu.zj@linux.alibaba.com> <1668411720-3581-2-git-send-email-renyu.zj@linux.alibaba.com> <590ff032-d271-48ee-a4d8-141cc070c335@oracle.com> <75c4f0e6-3f28-a748-e891-7be6016ca28e@oracle.com> <57315669-e6e7-08b8-a252-bc35d4fecc01@arm.com> <180a34c2-f68d-6f4d-da74-7bbb80e9e65c@linux.alibaba.com> <279545ee-1758-c60d-fdc3-2b15bcc4be6d@arm.com> From: Jing Zhang In-Reply-To: <279545ee-1758-c60d-fdc3-2b15bcc4be6d@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221124_083310_010039_7BF826FE X-CRM114-Status: GOOD ( 39.44 ) 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 CgrlnKggMjAyMi8xMS8yMyDkuIvljYgxMDoyNiwgSmFtZXMgQ2xhcmsg5YaZ6YGTOgo+IAo+IAo+ IE9uIDIyLzExLzIwMjIgMTU6NDEsIEppbmcgWmhhbmcgd3JvdGU6Cj4+Cj4+Cj4+IOWcqCAyMDIy LzExLzIyIOS4i+WNiDEwOjAwLCBKYW1lcyBDbGFyayDlhpnpgZM6Cj4+Pgo+Pj4KPj4+IE9uIDIx LzExLzIwMjIgMTc6NTUsIEpvaG4gR2Fycnkgd3JvdGU6Cj4+Pj4gT24gMjEvMTEvMjAyMiAxNTox NywgSmluZyBaaGFuZyB3cm90ZToKPj4+Pj4gSSdtIHNvcnJ5IHRoYXQgSSBtaXN1bmRlcnN0b29k IHRoZSBwdXJwb3NlIG9mIHB1dHRpbmcgbWV0cmljIGFzCj4+Pj4+IGFyY2hfc3RkX2V2ZW50IGF0 IGZpcnN0LAo+Pj4+PiBhbmQgbm93IGl0IHdvcmtzIGFmdGVyIHRoZSBtb2RpZmljYXRpb24gb3Zl ciB5b3VyIHN1Z2dlc3Rpb24uCj4+Pj4+Cj4+Pj4+IEJ1dCB0aGVyZSBhcmUgYWxzbyBhIGZldyBx dWVzdGlvbnM6Cj4+Pj4+Cj4+Pj4+IDEuIFRoZSB2YWx1ZSBvZiB0aGUgc2xvdCBpbiB0aGUgdG9w ZG93bkwxIGlzIHZhcmlvdXMgaW4gZGlmZmVyZW50Cj4+Pj4+IGFyY2hpdGVjdHVyZXMsIGZvciBl eGFtcGxlLAo+Pj4+PiB0aGUgc2xvdCBpcyA1IG9uIG5lb3ZlcnNlLW4yLiBJZiBJIHB1dCB0b3Bk b3duTDEgbWV0cmljIGFzCj4+Pj4+IGFyY2hfc3RkX2V2ZW50LCB0aGVuIEkgbmVlZCB0bwo+Pj4+ PiBzcGVjaWZ5IHRoZSBzbG90IHRvIDUgaW4gbjIuIEkgY2FuIHNwZWNpZnkgc2xvdCB2YWx1ZXMg aW4gbWV0cmljIGxpa2UKPj4+Pj4gYmVsb3csIGJ1dCBpcyB0aGVyZSBhbnkKPj4+Pj4gb3RoZXIg Y29uY2lzZSB3YXkgdG8gZG8gdGhpcz8KPj4+Pj4KPj4+Pj4gZGlmZiAtLWdpdAo+Pj4+PiBhL3Rv b2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL2FybTY0L2FybS9uZW92ZXJzZS1uMi9tZXRyaWNzLmpz b24KPj4+Pj4gYi90b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC9hcm02NC9hcm0vbmVvdmVyc2Ut bjIvbWV0cmljcy5qc29uCj4+Pj4+IGluZGV4IDhmZjFkZmUuLmI0NzNiYWYgMTAwNjQ0Cj4+Pj4+ IC0tLSBhL3Rvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL2FybTY0L2FybS9uZW92ZXJzZS1uMi9t ZXRyaWNzLmpzb24KPj4+Pj4gKysrIGIvdG9vbHMvcGVyZi9wbXUtZXZlbnRzL2FyY2gvYXJtNjQv YXJtL25lb3ZlcnNlLW4yL21ldHJpY3MuanNvbgo+Pj4+PiBAQCAtMSw0ICsxLDIzIEBACj4+Pj4+ IFsKPj4+Pj4gK8KgwqDCoMKgwqDCoCB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICJNZXRyaWNFeHByIjogIjUiLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAiUHVibGljRGVzY3JpcHRpb24iOiAiQSBwaXBlbGluZSBzbG90IHJlcHJlc2VudHMgdGhlCj4+ Pj4+IGhhcmR3YXJlIHJlc291cmNlcyBuZWVkZWQgdG8gcHJvY2VzcyBvbmUgdU9wIiwKPj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkJyaWVmRGVzY3JpcHRpb24iOiAiQSBwaXBl bGluZSBzbG90IHJlcHJlc2VudHMgdGhlCj4+Pj4+IGhhcmR3YXJlIHJlc291cmNlcyBuZWVkZWQg dG8gcHJvY2VzcyBvbmUgdU9wIiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Ik1ldHJpY05hbWUiOiAic2xvdCIKPj4+Pgo+Pj4+IEVoaGguLi4uSSdtIG5vdCBzdXJlIGlmIHRo YXQgaXMgYSBnb29kIGlkZWEuIElhbiBvciBhbnlvbmUgZWxzZSBoYXZlIGFuCj4+Pj4gb3Bpbmlv biBvbiB0aGlzPyBJdCBpcyBwb3NzaWJsZSB0byByZXVzZSBtZXRyaWNzLCBzbyBpdCBzaG91bGQg d29yaywgYnV0Li4uCj4+Pj4KPj4+PiBPbmUgcHJvYmxlbSBpcyB0aGF0ICJzbG90IiB3b3VsZCBz aG93IHVwIGFzIGEgbWV0cmljLCB3aGljaCB5b3Ugd291bGQKPj4+PiBub3Qgd2FudC4KPj4+Pgo+ Pj4+IEFsdGVybmF0aXZlbHkgSSB3YXMgZ29pbmcgdG8gc3VnZ2VzdCB0aGF0IHlvdSBjYW4gb3Zl cndyaXRlIHNwZWNpZmljIHN0ZAo+Pj4+IGFyY2ggZXZlbnQgYXR0cmlidXRlcy4gU28gZm9yIGV4 YW1wbGUgb2YgZnJvbnRlbmRfYm91bmQsIHlvdSBjb3VsZCBoYXZlOgo+Pj4KPj4+IEkgd291bGQg YWdyZWUgd2l0aCBub3QgaGF2aW5nIHRoaXMgYW5kIGp1c3QgaGFyZCBjb2RpbmcgdGhlIDUgd2hl cmV2ZXIKPj4+IGl0J3MgbmVlZGVkLiBPbmNlIHdlIGhhdmUgYSBmZXcgZGlmZmVyZW50IHNldHMg b2YgbWV0cmljcyBpbiBwbGFjZSBtYXliZQo+Pj4gd2UgY2FuIHN0YXJ0IHRvIGxvb2sgYXQgZGVk dXBsaWNhdGlvbiwgYnV0IGZvciBub3cgSSBkb24ndCBzZWUgdGhlIHZhbHVlLgo+Pj4KPj4+Pgo+ Pj4+ICsgYi90b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC9hcm02NC9hcm0vbmVvdmVyc2UtbjIv bWV0cmljcy5qc29uCj4+Pj4gQEAgLTAsMCArMSwzMCBAQAo+Pj4+IFsKPj4+PiDCoMKgwqAgewo+ Pj4+IMKgwqDCoMKgIkFyY2hTdGRFdmVudCI6ICJGUk9OVEVORF9CT1VORCIsCj4+Pj4gwqDCoMKg wqDCoMKgwqAgIk1ldHJpY0V4cHIiOiAiKHN0YWxsX3Nsb3RfZnJvbnRlbmQgLSBjcHVfY3ljbGVz KSAvICg1ICoKPj4+PiBjcHVfY3ljbGVzKSIsCj4+Pj4gwqDCoMKgIH0sCj4+Pj4KPj4+Pj4gK8Kg wqDCoMKgwqDCoCB9Cj4+Pj4+ICvCoMKgwqDCoMKgwqAgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAiQXJjaFN0ZEV2ZW50IjogIkZST05URU5EX0JPVU5EIgo+Pj4+PiArwqDC oMKgwqDCoMKgIH0sCj4+Pj4+ICvCoMKgwqDCoMKgwqAgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAiQXJjaFN0ZEV2ZW50IjogIkJBQ0tFTkRfQk9VTkQiCj4+Pj4+ICvCoMKg wqDCoMKgwqAgfSwKPj4+Pj4gK8KgwqDCoMKgwqDCoCB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICJBcmNoU3RkRXZlbnQiOiAiV0FTVEVEIgo+Pj4+PiArwqDCoMKgwqDCoMKg IH0sCj4+Pj4+ICvCoMKgwqDCoMKgwqAgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAiQXJjaFN0ZEV2ZW50IjogIlJFVElSSU5HIgo+Pj4+PiArwqDCoMKgwqDCoMKgIH0sCj4+ Pj4+Cj4+Pj4+Cj4+Pj4+IDIuIFNob3VsZCBJIGFkZCB0aGUgdG9wZG93bkwxIG1ldHJpYyB0bwo+ Pj4+PiB0b29scy9wZXJmL3BtdS1ldmVudC9yZWNvbW1lbmRlZC5qc29uLAo+Pj4+PiBvciBjcmVh dGUgYSBuZXcganNvbiBmaWxlIHRvIHBsYWNlIHRoZSBnZW5lcmFsIG1ldHJpYz8KPj4+Pgo+Pj4+ IEl0IHdvdWxkIG5vdCBiZWxvbmcgaW4gcmVjb21tZW5kZWQuanNvbiBhcyB0aGF0IGlzIHNwZWNp ZmljYWxseSBmb3IKPj4+PiBhcmNoLXJlY29tbWVuZGVkIGV2ZW50cy4gSXQgd291bGQgcmVhbGx5 IGp1c3QgZGVwZW5kIG9uIHdoZXJlIHRoZSB2YWx1ZQo+Pj4+IGNvbWVzIGZyb20sIGkuZS4gYXJt IGFybSBvciBzYnNhLgo+Pj4+Cj4+Pgo+Pj4gRm9yIHdoYXQgd2UncmUgZ29pbmcgdG8gcHVibGlz aCBzaG9ydGx5IHdlJ2xsIGJlIGdlbmVyYXRpbmcgYQo+Pj4gbWV0cmljcy5qc29uIGZpbGUgZm9y IGVhY2ggQ1BVLiBJdCB3aWxsIGJlIGF1dG9nZW5lcmF0ZWQgc28gSSBkb24ndAo+Pj4gdGhpbmsg ZHVwbGljYXRpb24gd2lsbCBiZSBhbiBpc3N1ZSBhbmQgSSdtIGV4cGVjdGluZyB0aGF0IHRoZXJl IHdpbGwgYmUKPj4+IGRpZmZlcmVuY2VzIGluIHRoZSB0b3Bkb3duIG1ldHJpY3MgYmV0d2VlbiBD UFVzIGFueXdheS4gU28gSSB3b3VsZCBhbHNvCj4+PiB2b3RlIHRvIG5vdCBwdXQgaXQgaW4gcmVj b21tZW5kZWQuanNvbgo+Pj4KPj4KPj4gSSB3aWxsIGNyZWF0ZSBhIG5ldyBzYnNhLmpzb24gZmls ZSBpbiB0b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC9hcm02NC8KPj4gdG8gcGxhY2UgbWV0cmlj cyB0aGF0IG1heSBiZSBjb21tb24gYmV0d2VlbiBzb21lIENQVXMsIGp1c3QgbGlrZSBhcmNoX3N0 ZF9ldmVudC4KPiAKPiBCZWNhdXNlIHRoaXMgd291bGQgYXBwbHkgdG8gYWxsIENQVXMgcmF0aGVy IHRoYW4ganVzdCBOMiwgSSBzdGlsbCB0aGluawo+IGl0J3MgYmVzdCB0byB3YWl0IGZvciBvdXIg bWV0cmljcyByZXBvIHRvIGJlIHB1Ymxpc2hlZC4gT3RoZXJ3aXNlIEFybQo+IHdpbGwgc3RhcnQg cHVibGlzaGluZyBtZXRyaWNzIHdpdGggbmFtZXMgYW5kIGdyb3VwIG5hbWVzIGZvciBhbGwgZnV0 dXJlCj4gQ1BVcyB0aGF0IGhhdmUgZGlmZmVyZW50IG5hbWVzIHRvIHRoZSBjb21tb24gb25lcyBh ZGRlZCBhcyBwYXJ0IG9mIHRoaXMKPiBjaGFuZ2UuCj4gCj4gSXQncyBzb21ldGhpbmcgdGhhdCB3 ZSd2ZSBiZWVuIHdvcmtpbmcgb24gZm9yIHF1aXRlIGEgd2hpbGUgYW5kIHdlJ3ZlCj4gdGFrZW4g Y2FyZSB0byBtYWtlIHN1cmUgdGhhdCBpdCBhcHBsaWVzIHRvIGZ1dHVyZSBwcm9kdWN0cyBhbmQg aXMgc2NhbGFibGUuCj4gCj4gSXQgd291bGQgYmUgZWFzaWVyIHRvIGFkZCB0aGVzZSByaWdodCBu b3cgb25seSBmb3IgTjIsIGFuZCB0aGVuCj4gYWZ0ZXJ3YXJkcyB3ZSBjYW4gc3RhcnQgdG8gbG9v ayBhdCB3aGF0IGlzIGNvbW1vbiBhbmQgY291bGQgYmUgZmFjdG9yZWQKPiBvdXQgaW50byB0aGUg dG9wIGxldmVsIGZvbGRlci4KPiAKPj4gSWYgdGhlIHRvcGRvd24gbWV0cmljcyBhcmUgZGlmZmVy ZW50IGluIG90aGVyIENQVXMsIHdlIGNhbiBvdmVyd3JpdGUgdGhlCj4+IG1ldHJpYyBleHByZXNz aW9uLgo+IAo+IFRydWUsIGJ1dCB3aXRoIGRpZmZlcmVudCBncm91cCBuYW1lcyBhbmQgbWV0cmlj IG5hbWVzIGFuZCB1bml0cyBpdCBjb3VsZAo+IGdldCBzbGlnaHRseSBjb21wbGljYXRlZC4KPiAK Pj4KPj4gRm9yIGV4YW1wbGU6Cj4+Cj4+ICsrKyBiL3Rvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNo L2FybTY0L3Nic2EuanNvbgo+PiBAQCAtMCwwICsxLDkgQEAKPj4gK1sKPj4gKyAgICB7Cj4+ICsg ICAgICAgICJNZXRyaWNFeHByIjogInN0YWxsX3Nsb3RfZnJvbnRlbmQgLyAoc2xvdCAqIGNwdV9j eWNsZXMpIiwKPj4gKyAgICAgICAgIlB1YmxpY0Rlc2NyaXB0aW9uIjogIkZyb250ZW5kIGJvdW5k IEwxIHRvcGRvd24gbWV0cmljIiwKPj4gKyAgICAgICAgIkJyaWVmRGVzY3JpcHRpb24iOiAiRnJv bnRlbmQgYm91bmQgTDEgdG9wZG93biBtZXRyaWMiLAo+PiArICAgICAgICAiTWV0cmljR3JvdXAi OiAiVG9wRG93bkwxIiwKPj4gKyAgICAgICAgIk1ldHJpY05hbWUiOiAiRlJPTlRFTkRfQk9VTkQi Cj4+ICsgICAgfQo+PiArXQo+Pgo+PiArIGIvdG9vbHMvcGVyZi9wbXUtZXZlbnRzL2FyY2gvYXJt NjQvYXJtL25lb3ZlcnNlLW4yL21ldHJpY3MuanNvbgo+PiBAQCAtMCwwICsxLDMwIEBACj4+ICtb Cj4+ICsgICB7Cj4+ICsgICAJIkFyY2hTdGRFdmVudCI6ICJGUk9OVEVORF9CT1VORCIsCj4+ICsg ICAgICAgICJNZXRyaWNFeHByIjogIihzdGFsbF9zbG90X2Zyb250ZW5kIC0gY3B1X2N5Y2xlcykg LyAoNSAqIGNwdV9jeWNsZXMpIiwKPj4gKyAgIH0KPj4gK10KPj4KPiAKPiBXaXRoIHRoZSBhdXRv IGdlbmVyYXRpb24gb2YgbWV0cmljcyBmaWxlIEkgZG9uJ3QgcmVhbGx5IHNlZSB0b28gbXVjaAo+ IGJlbmVmaXQgb2YgZG9pbmcgaXQgdGhpcyB3YXkuCj4gCj4gWW91IGFsc28gcnVuIGludG8gdGhl IGlzc3VlIHdoZXJlIGlmIGEgcGxhdGZvcm0gaGFwcGVucyB0byBkZWZpbmUgYWxsIG9mCj4gdGhl IGV2ZW50cyByZXF1aXJlZCBieSBhIG1ldHJpYywgd2lsbCB0aGF0IG1ldHJpYyBhcHBlYXIgYXV0 b21hdGljYWxseSwKPiBldmVuIGlmIGl0J3Mgbm90IHZhbGlkPwo+IAoKT2ssIEkgYWdyZWUgdG8g cHV0IHRoZSB0b3Bkb3duIG1ldHJpYyBpbiB0aGUgbjIgbWV0cmljIGluc3RlYWQgb2YgYXJjaF9z dGRfZXZlbnQuClRoZXJlIGlzIG5vIHVuaWZpZWQgZm9ybXVsYSBmb3IgdGhlIHRvcGRvd24gbWV0 cmljIGN1cnJlbnRseSwgYW5kIHRoZSBzbG90cyBvZiBlYWNoCkNQVSBtYXkgYmUgZGlmZmVyZW50 LgoKQWZ0ZXIgdGhlIHN0YW5kYXJkIGFyZSBwdWJ1bGlzaGVkIGluIHRoZSBmdXR1cmUsIHBsZWFz ZSBjb25zaWRlciB3aGF0IEpvaG4gc2FpZCwgYW5kCnVzZSB0aGUgZ2VuZXJhbCBtZXRyaWMgYXMg YXJjaF9zdGRfZXZlbnQuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==