From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6F3376280B; Tue, 13 Feb 2024 23:02:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707865381; cv=none; b=jhNXvDDrdO1RcRg1FympqdC0bsv931hcXdOY1l9zrsOabqWLNdCBJH684SrmCUXlolV4SjIm3NW1rDw02SKJB74mBdCsAXT4lgRQcH14K39agDrA2LF5jVuhpl6n13SGWZPDdpVLDacL9QwJvZTDvMIlQtCWhIPHtxho5BPiTXE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707865381; c=relaxed/simple; bh=OJ0p45/u+iQ1A9FdK/Chkglpl9TGkCxwoKgl4PhkCyc=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Phs4k82Ydv9Ev30XLhkk1EPTqb58jXusmJEZCBU4jAjgWcck8Q5U/af/3FTzkuqewddRCAo3d60SFG9xPeBko7BBrmmL29lsvtsXyEkNFC2XE1VO0lY/mBAbfx8f6YVfkoemfZV2qDoyLxmSMXDsJVWwabRLjVzoZ+N2/HfpSn0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BD1541FB; Tue, 13 Feb 2024 15:03:32 -0800 (PST) Received: from localhost (ionvoi01-desktop.cambridge.arm.com [10.2.78.69]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E4FE93F7B4; Tue, 13 Feb 2024 15:02:50 -0800 (PST) Date: Tue, 13 Feb 2024 23:02:49 +0000 From: Ionela Voinescu To: Beata Michalska Cc: "lihuisong (C)" , Vanshidhar Konda , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, rafael@kernel.org, sumitg@nvidia.com, zengheng4@huawei.com, yang@os.amperecomputing.com, will@kernel.org, sudeep.holla@arm.com, liuyonglong@huawei.com, zhanjie9@hisilicon.com, "linux-acpi@vger.kernel.org" Subject: Re: [PATCH] cpufreq: CPPC: Resolve the large frequency discrepancy from cpuinfo_cur_freq Message-ID: References: <9428a1ed-ba4d-1fe6-63e8-11e152bf1f09@huawei.com> <6505bdcb-5a5f-cba6-483b-75c51414a9c6@huawei.com> <4f66c62e-b089-a125-5a8d-4a98d4181618@huawei.com> Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Hi, On Friday 09 Feb 2024 at 11:55:08 (+0100), Beata Michalska wrote: > On Tue, Feb 06, 2024 at 04:02:15PM +0800, lihuisong (C) wrote: [..] > > > > > > > > > > > > > Would you be able to test [1] on your platform and usecase? > > > > > > I has tested it on my platform (CPU number: 64, SMT: off and CPU base > > > > > > frequency: 2.7GHz). > > > > > > Accoding to the testing result, > > > > > > 1> I found that patch [1] and [2] cannot cover the no housekeeping CPUs. > > > > > > They still have to face the large frequency discrepancy issue my patch > > > > > > mentioned. > > > > > > 2> Additionally, the frequency value of all CPUs are almost the same by > > > > > > using the 'arch_freq_scale' factor way. I'm not sure if it is ok. > > > > > > > > > > > > The patch [1] has been modified silightly as below: > > > > > > --> > > > > > > @@ -1756,7 +1756,10 @@ static unsigned int > > > > > > cpufreq_verify_current_freq(struct cpufreq_policy *policy, b > > > > > >  { > > > > > >         unsigned int new_freq; > > > > > > > > > > > > -       new_freq = cpufreq_driver->get(policy->cpu); > > > > > > +       new_freq = arch_freq_get_on_cpu(policy->cpu); > > > > > > +       if (!new_freq) > > > > > > +               new_freq = cpufreq_driver->get(policy->cpu); > > > > > > + > > > > > As pointed out this change will not make it to the next version of the patch. > > > > > So I'd say you can safely ignore it and assume that arch_freq_get_on_cpu will > > > > > only be wired for sysfs nodes for scaling_cur_freq/cpuinfo_cur_freq > > > > > >         if (!new_freq) > > > > > >                 return 0; > > > > > > > > > > > > And the result is as follows: > > > > > > *case 1:**No setting the nohz_full and cpufreq use performance governor* > > > > > > *--> Step1: *read 'cpuinfo_cur_freq' in no pressure > > > > > >   0: 2699264     2: 2699264     4: 2699264     6: 2699264 > > > > > >   8: 2696628    10: 2696628    12: 2696628    14: 2699264 > > > > > >  16: 2699264    18: 2696628    20: 2699264    22: 2696628 > > > > > >  24: 2699264    26: 2696628    28: 2699264    30: 2696628 > > > > > >  32: 2696628    34: 2696628    36: 2696628    38: 2696628 > > > > > >  40: 2699264    42: 2699264    44: 2696628    46: 2696628 > > > > > >  48: 2696628    50: 2699264    52: 2699264    54: 2696628 > > > > > >  56: 2696628    58: 2696628    60: 2696628    62: 2696628 > > > > > >  64: 2696628    66: 2699264    68: 2696628    70: 2696628 > > > > > >  72: 2699264    74: 2696628    76: 2696628    78: 2699264 > > > > > >  80: 2696628    82: 2696628    84: 2699264    86: 2696628 > > > > > >  88: 2696628    90: 2696628    92: 2696628    94: 2699264 > > > > > >  96: 2696628    98: 2699264   100: 2699264   102: 2696628 > > > > > > 104: 2699264   106: 2699264   108: 2699264   110: 2696628 > > > > > > 112: 2699264   114: 2699264   116: 2699264   118: 2699264 > > > > > > 120: 2696628   122: 2699264   124: 2696628   126: 2699264 > > > > > > Note: the frequency of all CPUs are almost the same. > > > > > Were you expecting smth else ? > > > > The frequency of each CPU might have a different value. > > > > All value of all CPUs is the same under high pressure. > > > > I don't know what the phenomenon is on other platform. > > > > Do you know who else tested it? > > > So I might have rushed a bit with my previous comment/question: apologies for > > > that. > > > The numbers above: those are on a fairly idle/lightly loaded system right? > > Yes. > > > Would you mind having another go with just the arch_freq_get_on_cpu > > > implementation beign added and dropping the changes in the cpufreq and > > All my tests are done when cpufreq policy is "performance" and OS isn't on a > > high load. > > Reading "scaling_cur_freq" or "scaling_cur_freq" for each physical core on > > platform > > > > The testing result for "cpuinfo_cur_freq" with your changes on a fairly idle > > and high loaded system can also be found in this thread. > > *A: the result with your changes* > > --> Reading "scaling_cur_freq" > >   0: 2688720     2: 2696628     4: 2699264     6: 2696628 > >   8: 2699264    10: 2696628    12: 2699264    14: 2699264 > >  16: 2699264    18: 2696628    20: 2696628    22: 2696628 > >  24: 2699264    26: 2696628    28: 2696628    30: 2696628 > >  32: 2699264    34: 2691356    36: 2696628    38: 2699264 > >  40: 2699264    42: 2696628    44: 2696628    46: 2699264 > >  48: 2699264    50: 2696628    52: 2696628    54: 2696628 > >  56: 2696628    58: 2699264    60: 2691356    62: 2696628 > >  64: 2696628    66: 2696628    68: 2696628    70: 2696628 > >  72: 2696628    74: 2696628    76: 2699264    78: 2696628 > >  80: 2696628    82: 2696628    84: 2699264    86: 2696628 > >  88: 2625456    90: 2696628    92: 2699264    94: 2696628 > >  96: 2696628    98: 2696628   100: 2699264   102: 2699264 > > 104: 2699264   106: 2696628   108: 2699264   110: 2696628 > > 112: 2699264   114: 2699264   116: 2696628   118: 2696628 > > 120: 2696628   122: 2699264   124: 2696628   126: 2696628 > > -->Reading  "cpuinfo_cur_freq" > >   0: 2696628     2: 2696628     4: 2699264     6: 2688720 > >   8: 2699264    10: 2700000    12: 2696628    14: 2698322 > >  16: 2699264    18: 2699264    20: 2696628    22: 2699264 > >  24: 2699264    26: 2699264    28: 2699264    30: 2699264 > >  32: 2699264    34: 2693992    36: 2696628    38: 2696628 > >  40: 2699264    42: 2699264    44: 2699264    46: 2696628 > >  48: 2696628    50: 2699264    52: 2696628    54: 2696628 > >  56: 2699264    58: 2699264    60: 2696628    62: 2699264 > >  64: 2696628    66: 2699264    68: 2696628    70: 2699264 > >  72: 2696628    74: 2696628    76: 2696628    78: 2693992 > >  80: 2696628    82: 2696628    84: 2696628    86: 2696628 > >  88: 2696628    90: 2699264    92: 2696628    94: 2699264 > >  96: 2699264    98: 2696628   100: 2699264   102: 2699264 > > 104: 2691356   106: 2699264   108: 2699264   110: 2699264 > > 112: 2699264   114: 2696628   116: 2699264   118: 2699264 > > 120: 2696628   122: 2696628   124: 2696628   126: 2696628 > > > > *B: the result without your changes* > > -->Reading "scaling_cur_freq" > >   0: 2698245     2: 2706690     4: 2699649     6: 2702105 > >   8: 2704362    10: 2697993    12: 2701672    14: 2704362 > >  16: 2701052    18: 2701052    20: 2694385    22: 2699650 > >  24: 2706802    26: 2702389    28: 2698299    30: 2698299 > >  32: 2697333    34: 2697993    36: 2701337    38: 2699328 > >  40: 2700330    42: 2700330    44: 2698019    46: 2697697 > >  48: 2699659    50: 2701700    52: 2703401    54: 2701700 > >  56: 2704013    58: 2697658    60: 2695000    62: 2697666 > >  64: 2697902    66: 2701052    68: 2698245    70: 2695789 > >  72: 2701315    74: 2696655    76: 2693666    78: 2695317 > >  80: 2704912    82: 2699649    84: 2698245    86: 2695454 > >  88: 2697966    90: 2697959    92: 2699319    94: 2700680 > >  96: 2695317    98: 2698996   100: 2700000   102: 2700334 > > 104: 2701320   106: 2695065   108: 2700986   110: 2703960 > > 112: 2697635   114: 2704421   116: 2700680   118: 2702040 > > 120: 2700334   122: 2697993   124: 2700334   126: 2705351 > > -->Reading "cpuinfo_cur_freq" > >   0: 2696853     2: 2695454     4: 2699649     6: 2706993 > >   8: 2706060    10: 2704362    12: 2704362    14: 2697658 > >  16: 2707719    18: 2697192    20: 2702456    22: 2699650 > >  24: 2705782    26: 2698299    28: 2703061    30: 2705802 > >  32: 2700000    34: 2700671    36: 2701337    38: 2697658 > >  40: 2700330    42: 2700330    44: 2699672    46: 2697697 > >  48: 2703061    50: 2696610    52: 2692542    54: 2704406 > >  56: 2695317    58: 2699331    60: 2698996    62: 2702675 > >  64: 2704912    66: 2703859    68: 2699649    70: 2698596 > >  72: 2703908    74: 2703355    76: 2697658    78: 2695317 > >  80: 2702105    82: 2707719    84: 2702105    86: 2699649 > >  88: 2697966    90: 2691525    92: 2701700    94: 2700680 > >  96: 2695317    98: 2698996   100: 2698666   102: 2700334 > > 104: 2690429   106: 2707590   108: 2700986   110: 2701320 > > 112: 2696283   114: 2692881   116: 2697627   118: 2704421 > > 120: 2698996   122: 2696321   124: 2696655   126: 2695000 > > > So in both cases : whether you use arch_freq_get_on_cpu or not > (so with and without the patch) you get roughly the same frequencies > on all cores - or am I missing smth from the dump above ? > And those are reflecting max freq you have provided earlier (?) > Note that the arch_freq_get_on_cpu will return an average frequency for > the last tick, so even if your system is roughly idle with your performance > governor those numbers make sense (some/most of the cores might be idle > but you will see the last freq the core was running at before going to idle). > I do not think there is an agreement what should be shown for idle core when > querying their freq through sysfs. Showing last known freq makes sense, even > more than waking up core just to try to get one. > > @Ionela: Please jump in if I got things wrong. Yes, that's how I see things as well. When using the performance governor, when the CPU is active, the frequency of the CPU should be the maximum one (unless there has been firmware/hardware capping) and that would be reflected by cpuinfo_cur_freq, either through the use of the frequency scale factor (based on the samples on the last tick) or the driver's .get() function (having woken up the CPU to sample the counters). So the values above look alright to me. Thanks, Ionela. > > > > then read 'scaling_cur_freq', doing several reads in some intervals ? > > It seems that above phenomenon has not a lot to do with reading intervals. > > > The change has been tested on RD-N2 model (Neoverse N2 ref platform), > > > it has also been discussed here [1] > > I doesn't get the testing result on this platform in its thread. > It might be missing exact numbers but the conclusions should be here [1] > > > > > > > *--> Step 2: *read 'cpuinfo_cur_freq' in the high memory access pressure. > > > > > >   0: 2696628     2: 2696628     4: 2696628     6: 2696628 > > > > > >   8: 2696628    10: 2696628    12: 2696628    14: 2696628 > > > > > >  16: 2696628    18: 2696628    20: 2696628    22: 2696628 > > > > > >  24: 2696628    26: 2696628    28: 2696628    30: 2696628 > > > > > >  32: 2696628    34: 2696628    36: 2696628    38: 2696628 > > > > > >  40: 2696628    42: 2696628    44: 2696628    46: 2696628 > > > > > >  48: 2696628    50: 2696628    52: 2696628    54: 2696628 > > > > > >  56: 2696628    58: 2696628    60: 2696628    62: 2696628 > > > > > >  64: 2696628    66: 2696628    68: 2696628    70: 2696628 > > > > > >  72: 2696628    74: 2696628    76: 2696628    78: 2696628 > > > > > >  80: 2696628    82: 2696628    84: 2696628    86: 2696628 > > > > > >  88: 2696628    90: 2696628    92: 2696628    94: 2696628 > > > > > >  96: 2696628    98: 2696628   100: 2696628   102: 2696628 > > > > > > 104: 2696628   106: 2696628   108: 2696628   110: 2696628 > > > > > > 112: 2696628   114: 2696628   116: 2696628   118: 2696628 > > > > > > 120: 2696628   122: 2696628   124: 2696628   126: 2696628 > > > > > > > > > > > > *Case 2: setting nohz_full and cpufreq use ondemand governor* > > > > > > There is "isolcpus=1-10,41-50 nohz_full=1-10,41-50 rcu_nocbs=1-10,41-50" in > > > > > > /proc/cmdline. > > > > > Right, so if I remember correctly nohz_full implies rcu_nocbs, so no need to > > > > > set that one. > > > > > Now, afair, isolcpus will make the selected CPUs to disappear from the > > > > > schedulers view (no balancing, no migrating), so unless you affine smth > > > > > explicitly to those CPUs, you will not see much of an activity there. > > > > Correct. > > > > > Need to double check though as it has been a while ... > > > > > > *--> Step 1: *setting ondemand governor to all policy and query > > > > > > 'cpuinfo_cur_freq' in no pressure case. > > > > > > And the frequency of CPUs all are about 400MHz. > > > > > > *--> Step 2:* read 'cpuinfo_cur_freq' in the high memory access pressure. > > > > > > The high memory access pressure is from the command: "stress-ng -c 64 > > > > > > --cpu-load 100% --taskset 0-63" > > > > > I'm not entirely convinced that this will affine to isolated cpus, especially > > > > > that the affinity mask spans all available cpus. If that is the case, no wonder > > > > > your isolated cpus are getting wasted being idle. But I would have to double > > > > > check how this is being handled. > > > > > > The result: > > > > > >  0: 2696628     1:  400000     2:  400000     3:  400909 > > > > > >  4:  400000     5:  400000     6:  400000     7:  400000 > > > > > >  8:  400000     9:  400000    10:  400600    11: 2696628 > > > > > > 12: 2696628    13: 2696628    14: 2696628    15: 2696628 > > > > > > 16: 2696628    17: 2696628    18: 2696628    19: 2696628 > > > > > > 20: 2696628    21: 2696628    22: 2696628    23: 2696628 > > > > > > 24: 2696628    25: 2696628    26: 2696628    27: 2696628 > > > > > > 28: 2696628    29: 2696628    30: 2696628    31: 2696628 > > > > > > 32: 2696628    33: 2696628    34: 2696628    35: 2696628 > > > > > > 36: 2696628    37: 2696628    38: 2696628    39: 2696628 > > > > > > 40: 2696628    41:  400000    42:  400000    43:  400000 > > > > > > 44:  400000    45:  398847    46:  400000    47:  400000 > > > > > > 48:  400000    49:  400000    50:  400000    51: 2696628 > > > > > > 52: 2696628    53: 2696628    54: 2696628    55: 2696628 > > > > > > 56: 2696628    57: 2696628    58: 2696628    59: 2696628 > > > > > > 60: 2696628    61: 2696628    62: 2696628    63: 2699264 > > > > > > > > > > > > Note: > > > > > > (1) The frequency of 1-10 and 41-50 CPUs work on the lowest frequency. > > > > > >      It turned out that nohz full was already work. > > > > > >      I guess that stress-ng cannot use the CPU in the range of nohz full. > > > > > >      Because the CPU frequency will be increased to 2.7G by binding CPU to > > > > > > other application. > > > > > > (2) The frequency of the nohz full core is calculated by get() callback > > > > > > according to ftrace. > > > > > It is as there is no sched tick on those, and apparently there is nothing > > > > > running on them either. > > > > Yes. > > > > If we select your approach and the above phenomenon is normal, > > > > the large frequency discrepancy issue can be resolved for CPUs with sched > > > > tick by the way. > > > > But the nohz full cores still have to face this issue. So this patch is also > > > > needed. > > > > > > > Yes, nohz cores full have to be handled by the cpufreq driver. > > Correct. So we still have to face the issue in this patch and push this > > patch. > > Beata, would you please review this patch? > Just to clarify for my benefit (apologies but I do have to contex switch > pretty often these days): by reviewing this patch do you mean: > 1) review your changes (if so I think there are few comments already to be > addressed, but I can try to have another look) > 2) review changes for AMU-based arch_freq_get_on_cpu ? > > *note: I will still try to have a look at the non-housekeeping cpus case > > --- > [1] https://lore.kernel.org/lkml/691d3eb2-cd93-f0fc-a7a4-2a8c0d44262c@nvidia.com/ > --- > > BR > Beata > > > > > > /Huisong > > > > [...] 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 A6338C4829A for ; Tue, 13 Feb 2024 23:03:22 +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=+PVsYQqjrkhFC9RBP3btCNgCvOgb3j2PZTU7nnrRf3A=; b=uAdU7WSC0QQGHu 0USYEINHPuv41T5NuqipoHbIRbVQYYV5Xe/MKG6JujjuxDVxBpyqFzmxCsLpVZxww4wJjo+ZG2k7d dhwSxfF79tz8BE67JbxSxmv9J/SYmN3G2pzoSC39qmBuuM5q+9LPS2dHaWqnq8gNJSi4RkX4sprgq HRzemhX4hKvko4Np47phQhnuBNHILtNhWZJ7FG2loyy01CKLz5tEcd0zfYlqnoJW3VXGua8AurZzB vugteQ0GIUkfcIwG5rvR09CW1oFaJ/lJhELF4Sm/bBRXKPDqPNLkhqkv7Gzb2p1a5GEBAkTn6Wb7I es0soUUv1p4wCpH3JNSw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1ra1np-0000000BB1s-2AdY; Tue, 13 Feb 2024 23:03:01 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1ra1nl-0000000BAzi-3Tdo for linux-arm-kernel@lists.infradead.org; Tue, 13 Feb 2024 23:03:00 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BD1541FB; Tue, 13 Feb 2024 15:03:32 -0800 (PST) Received: from localhost (ionvoi01-desktop.cambridge.arm.com [10.2.78.69]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E4FE93F7B4; Tue, 13 Feb 2024 15:02:50 -0800 (PST) Date: Tue, 13 Feb 2024 23:02:49 +0000 From: Ionela Voinescu To: Beata Michalska Cc: "lihuisong (C)" , Vanshidhar Konda , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, rafael@kernel.org, sumitg@nvidia.com, zengheng4@huawei.com, yang@os.amperecomputing.com, will@kernel.org, sudeep.holla@arm.com, liuyonglong@huawei.com, zhanjie9@hisilicon.com, "linux-acpi@vger.kernel.org" Subject: Re: [PATCH] cpufreq: CPPC: Resolve the large frequency discrepancy from cpuinfo_cur_freq Message-ID: References: <9428a1ed-ba4d-1fe6-63e8-11e152bf1f09@huawei.com> <6505bdcb-5a5f-cba6-483b-75c51414a9c6@huawei.com> <4f66c62e-b089-a125-5a8d-4a98d4181618@huawei.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240213_150258_014825_4C17BE95 X-CRM114-Status: GOOD ( 57.54 ) 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 SGksCgpPbiBGcmlkYXkgMDkgRmViIDIwMjQgYXQgMTE6NTU6MDggKCswMTAwKSwgQmVhdGEgTWlj aGFsc2thIHdyb3RlOgo+IE9uIFR1ZSwgRmViIDA2LCAyMDI0IGF0IDA0OjAyOjE1UE0gKzA4MDAs IGxpaHVpc29uZyAoQykgd3JvdGU6ClsuLl0KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gV291 bGQgeW91IGJlIGFibGUgdG8gdGVzdCBbMV0gb24geW91ciBwbGF0Zm9ybSBhbmQgdXNlY2FzZT8K PiA+ID4gPiA+ID4gSSBoYXMgdGVzdGVkIGl0IG9uIG15IHBsYXRmb3JtIChDUFUgbnVtYmVyOiA2 NCwgU01UOiBvZmYgYW5kIENQVSBiYXNlCj4gPiA+ID4gPiA+IGZyZXF1ZW5jeTogMi43R0h6KS4K PiA+ID4gPiA+ID4gQWNjb2RpbmcgdG8gdGhlIHRlc3RpbmcgcmVzdWx0LAo+ID4gPiA+ID4gPiAx PiBJIGZvdW5kIHRoYXQgcGF0Y2ggWzFdIGFuZCBbMl0gY2Fubm90IGNvdmVyIHRoZSBubyBob3Vz ZWtlZXBpbmcgQ1BVcy4KPiA+ID4gPiA+ID4gVGhleSBzdGlsbCBoYXZlIHRvIGZhY2UgdGhlIGxh cmdlIGZyZXF1ZW5jeSBkaXNjcmVwYW5jeSBpc3N1ZSBteSBwYXRjaAo+ID4gPiA+ID4gPiBtZW50 aW9uZWQuCj4gPiA+ID4gPiA+IDI+IEFkZGl0aW9uYWxseSwgdGhlIGZyZXF1ZW5jeSB2YWx1ZSBv ZiBhbGwgQ1BVcyBhcmUgYWxtb3N0IHRoZSBzYW1lIGJ5Cj4gPiA+ID4gPiA+IHVzaW5nIHRoZSAn YXJjaF9mcmVxX3NjYWxlJyBmYWN0b3Igd2F5LiBJJ20gbm90IHN1cmUgaWYgaXQgaXMgb2suCj4g PiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBUaGUgcGF0Y2ggWzFdIGhhcyBiZWVuIG1vZGlmaWVkIHNp bGlnaHRseSBhcyBiZWxvdzoKPiA+ID4gPiA+ID4gLS0+Cj4gPiA+ID4gPiA+IEBAIC0xNzU2LDcg KzE3NTYsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGludAo+ID4gPiA+ID4gPiBjcHVmcmVxX3Zlcmlm eV9jdXJyZW50X2ZyZXEoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGIKPiA+ID4gPiA+ ID4gICDCoHsKPiA+ID4gPiA+ID4gICDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgbmV3X2Zy ZXE7Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAtwqDCoMKgwqDCoMKgIG5ld19mcmVxID0gY3B1 ZnJlcV9kcml2ZXItPmdldChwb2xpY3ktPmNwdSk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqAg bmV3X2ZyZXEgPSBhcmNoX2ZyZXFfZ2V0X29uX2NwdShwb2xpY3ktPmNwdSk7Cj4gPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqAgaWYgKCFuZXdfZnJlcSkKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbmV3X2ZyZXEgPSBjcHVmcmVxX2RyaXZlci0+Z2V0KHBvbGljeS0+Y3B1 KTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gQXMgcG9pbnRlZCBvdXQgdGhpcyBjaGFuZ2Ugd2ls bCBub3QgbWFrZSBpdCB0byB0aGUgbmV4dCB2ZXJzaW9uIG9mIHRoZSBwYXRjaC4KPiA+ID4gPiA+ IFNvIEknZCBzYXkgeW91IGNhbiBzYWZlbHkgaWdub3JlIGl0IGFuZCBhc3N1bWUgdGhhdCBhcmNo X2ZyZXFfZ2V0X29uX2NwdSB3aWxsCj4gPiA+ID4gPiBvbmx5IGJlIHdpcmVkIGZvciBzeXNmcyBu b2RlcyBmb3Igc2NhbGluZ19jdXJfZnJlcS9jcHVpbmZvX2N1cl9mcmVxCj4gPiA+ID4gPiA+ICAg wqDCoMKgwqDCoMKgwqAgaWYgKCFuZXdfZnJlcSkKPiA+ID4gPiA+ID4gICDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBBbmQg dGhlIHJlc3VsdCBpcyBhcyBmb2xsb3dzOgo+ID4gPiA+ID4gPiAqY2FzZSAxOioqTm8gc2V0dGlu ZyB0aGUgbm9oel9mdWxsIGFuZCBjcHVmcmVxIHVzZSBwZXJmb3JtYW5jZSBnb3Zlcm5vcioKPiA+ ID4gPiA+ID4gKi0tPiBTdGVwMTogKnJlYWQgJ2NwdWluZm9fY3VyX2ZyZXEnIGluIG5vIHByZXNz dXJlCj4gPiA+ID4gPiA+ICAgwqAgMDogMjY5OTI2NMKgwqDCoMKgIDI6IDI2OTkyNjTCoMKgwqDC oCA0OiAyNjk5MjY0wqDCoMKgwqAgNjogMjY5OTI2NAo+ID4gPiA+ID4gPiAgIMKgIDg6IDI2OTY2 MjjCoMKgwqAgMTA6IDI2OTY2MjjCoMKgwqAgMTI6IDI2OTY2MjjCoMKgwqAgMTQ6IDI2OTkyNjQK PiA+ID4gPiA+ID4gICDCoDE2OiAyNjk5MjY0wqDCoMKgIDE4OiAyNjk2NjI4wqDCoMKgIDIwOiAy Njk5MjY0wqDCoMKgIDIyOiAyNjk2NjI4Cj4gPiA+ID4gPiA+ICAgwqAyNDogMjY5OTI2NMKgwqDC oCAyNjogMjY5NjYyOMKgwqDCoCAyODogMjY5OTI2NMKgwqDCoCAzMDogMjY5NjYyOAo+ID4gPiA+ ID4gPiAgIMKgMzI6IDI2OTY2MjjCoMKgwqAgMzQ6IDI2OTY2MjjCoMKgwqAgMzY6IDI2OTY2MjjC oMKgwqAgMzg6IDI2OTY2MjgKPiA+ID4gPiA+ID4gICDCoDQwOiAyNjk5MjY0wqDCoMKgIDQyOiAy Njk5MjY0wqDCoMKgIDQ0OiAyNjk2NjI4wqDCoMKgIDQ2OiAyNjk2NjI4Cj4gPiA+ID4gPiA+ICAg wqA0ODogMjY5NjYyOMKgwqDCoCA1MDogMjY5OTI2NMKgwqDCoCA1MjogMjY5OTI2NMKgwqDCoCA1 NDogMjY5NjYyOAo+ID4gPiA+ID4gPiAgIMKgNTY6IDI2OTY2MjjCoMKgwqAgNTg6IDI2OTY2MjjC oMKgwqAgNjA6IDI2OTY2MjjCoMKgwqAgNjI6IDI2OTY2MjgKPiA+ID4gPiA+ID4gICDCoDY0OiAy Njk2NjI4wqDCoMKgIDY2OiAyNjk5MjY0wqDCoMKgIDY4OiAyNjk2NjI4wqDCoMKgIDcwOiAyNjk2 NjI4Cj4gPiA+ID4gPiA+ICAgwqA3MjogMjY5OTI2NMKgwqDCoCA3NDogMjY5NjYyOMKgwqDCoCA3 NjogMjY5NjYyOMKgwqDCoCA3ODogMjY5OTI2NAo+ID4gPiA+ID4gPiAgIMKgODA6IDI2OTY2MjjC oMKgwqAgODI6IDI2OTY2MjjCoMKgwqAgODQ6IDI2OTkyNjTCoMKgwqAgODY6IDI2OTY2MjgKPiA+ ID4gPiA+ID4gICDCoDg4OiAyNjk2NjI4wqDCoMKgIDkwOiAyNjk2NjI4wqDCoMKgIDkyOiAyNjk2 NjI4wqDCoMKgIDk0OiAyNjk5MjY0Cj4gPiA+ID4gPiA+ICAgwqA5NjogMjY5NjYyOMKgwqDCoCA5 ODogMjY5OTI2NMKgwqAgMTAwOiAyNjk5MjY0wqDCoCAxMDI6IDI2OTY2MjgKPiA+ID4gPiA+ID4g MTA0OiAyNjk5MjY0wqDCoCAxMDY6IDI2OTkyNjTCoMKgIDEwODogMjY5OTI2NMKgwqAgMTEwOiAy Njk2NjI4Cj4gPiA+ID4gPiA+IDExMjogMjY5OTI2NMKgwqAgMTE0OiAyNjk5MjY0wqDCoCAxMTY6 IDI2OTkyNjTCoMKgIDExODogMjY5OTI2NAo+ID4gPiA+ID4gPiAxMjA6IDI2OTY2MjjCoMKgIDEy MjogMjY5OTI2NMKgwqAgMTI0OiAyNjk2NjI4wqDCoCAxMjY6IDI2OTkyNjQKPiA+ID4gPiA+ID4g Tm90ZTogdGhlIGZyZXF1ZW5jeSBvZiBhbGwgQ1BVcyBhcmUgYWxtb3N0IHRoZSBzYW1lLgo+ID4g PiA+ID4gV2VyZSB5b3UgZXhwZWN0aW5nIHNtdGggZWxzZSA/Cj4gPiA+ID4gVGhlIGZyZXF1ZW5j eSBvZiBlYWNoIENQVSBtaWdodCBoYXZlIGEgZGlmZmVyZW50IHZhbHVlLgo+ID4gPiA+IEFsbCB2 YWx1ZSBvZiBhbGwgQ1BVcyBpcyB0aGUgc2FtZSB1bmRlciBoaWdoIHByZXNzdXJlLgo+ID4gPiA+ IEkgZG9uJ3Qga25vdyB3aGF0IHRoZSBwaGVub21lbm9uIGlzIG9uIG90aGVyIHBsYXRmb3JtLgo+ ID4gPiA+IERvIHlvdSBrbm93IHdobyBlbHNlIHRlc3RlZCBpdD8KPiA+ID4gU28gSSBtaWdodCBo YXZlIHJ1c2hlZCBhIGJpdCB3aXRoIG15IHByZXZpb3VzIGNvbW1lbnQvcXVlc3Rpb246IGFwb2xv Z2llcyBmb3IKPiA+ID4gdGhhdC4KPiA+ID4gVGhlIG51bWJlcnMgYWJvdmU6IHRob3NlIGFyZSBv biBhIGZhaXJseSBpZGxlL2xpZ2h0bHkgbG9hZGVkIHN5c3RlbSByaWdodD8KPiA+IFllcy4KPiA+ ID4gV291bGQgeW91IG1pbmQgaGF2aW5nIGFub3RoZXIgZ28gd2l0aCBqdXN0IHRoZSBhcmNoX2Zy ZXFfZ2V0X29uX2NwdQo+ID4gPiBpbXBsZW1lbnRhdGlvbiBiZWlnbiBhZGRlZCBhbmQgZHJvcHBp bmcgdGhlIGNoYW5nZXMgaW4gdGhlIGNwdWZyZXEgYW5kCj4gPiBBbGwgbXkgdGVzdHMgYXJlIGRv bmUgd2hlbiBjcHVmcmVxIHBvbGljeSBpcyAicGVyZm9ybWFuY2UiIGFuZCBPUyBpc24ndCBvbiBh Cj4gPiBoaWdoIGxvYWQuCj4gPiBSZWFkaW5nICJzY2FsaW5nX2N1cl9mcmVxIiBvciAic2NhbGlu Z19jdXJfZnJlcSIgZm9yIGVhY2ggcGh5c2ljYWwgY29yZSBvbgo+ID4gcGxhdGZvcm0KPiA+IAo+ ID4gVGhlIHRlc3RpbmcgcmVzdWx0IGZvciAiY3B1aW5mb19jdXJfZnJlcSIgd2l0aCB5b3VyIGNo YW5nZXMgb24gYSBmYWlybHkgaWRsZQo+ID4gYW5kIGhpZ2ggbG9hZGVkIHN5c3RlbSBjYW4gYWxz byBiZSBmb3VuZCBpbiB0aGlzIHRocmVhZC4KPiA+ICpBOiB0aGUgcmVzdWx0IHdpdGggeW91ciBj aGFuZ2VzKgo+ID4gLS0+IFJlYWRpbmcgInNjYWxpbmdfY3VyX2ZyZXEiCj4gPiDCoCAwOiAyNjg4 NzIwwqDCoMKgwqAgMjogMjY5NjYyOMKgwqDCoMKgIDQ6IDI2OTkyNjTCoMKgwqDCoCA2OiAyNjk2 NjI4Cj4gPiDCoCA4OiAyNjk5MjY0wqDCoMKgIDEwOiAyNjk2NjI4wqDCoMKgIDEyOiAyNjk5MjY0 wqDCoMKgIDE0OiAyNjk5MjY0Cj4gPiDCoDE2OiAyNjk5MjY0wqDCoMKgIDE4OiAyNjk2NjI4wqDC oMKgIDIwOiAyNjk2NjI4wqDCoMKgIDIyOiAyNjk2NjI4Cj4gPiDCoDI0OiAyNjk5MjY0wqDCoMKg IDI2OiAyNjk2NjI4wqDCoMKgIDI4OiAyNjk2NjI4wqDCoMKgIDMwOiAyNjk2NjI4Cj4gPiDCoDMy OiAyNjk5MjY0wqDCoMKgIDM0OiAyNjkxMzU2wqDCoMKgIDM2OiAyNjk2NjI4wqDCoMKgIDM4OiAy Njk5MjY0Cj4gPiDCoDQwOiAyNjk5MjY0wqDCoMKgIDQyOiAyNjk2NjI4wqDCoMKgIDQ0OiAyNjk2 NjI4wqDCoMKgIDQ2OiAyNjk5MjY0Cj4gPiDCoDQ4OiAyNjk5MjY0wqDCoMKgIDUwOiAyNjk2NjI4 wqDCoMKgIDUyOiAyNjk2NjI4wqDCoMKgIDU0OiAyNjk2NjI4Cj4gPiDCoDU2OiAyNjk2NjI4wqDC oMKgIDU4OiAyNjk5MjY0wqDCoMKgIDYwOiAyNjkxMzU2wqDCoMKgIDYyOiAyNjk2NjI4Cj4gPiDC oDY0OiAyNjk2NjI4wqDCoMKgIDY2OiAyNjk2NjI4wqDCoMKgIDY4OiAyNjk2NjI4wqDCoMKgIDcw OiAyNjk2NjI4Cj4gPiDCoDcyOiAyNjk2NjI4wqDCoMKgIDc0OiAyNjk2NjI4wqDCoMKgIDc2OiAy Njk5MjY0wqDCoMKgIDc4OiAyNjk2NjI4Cj4gPiDCoDgwOiAyNjk2NjI4wqDCoMKgIDgyOiAyNjk2 NjI4wqDCoMKgIDg0OiAyNjk5MjY0wqDCoMKgIDg2OiAyNjk2NjI4Cj4gPiDCoDg4OiAyNjI1NDU2 wqDCoMKgIDkwOiAyNjk2NjI4wqDCoMKgIDkyOiAyNjk5MjY0wqDCoMKgIDk0OiAyNjk2NjI4Cj4g PiDCoDk2OiAyNjk2NjI4wqDCoMKgIDk4OiAyNjk2NjI4wqDCoCAxMDA6IDI2OTkyNjTCoMKgIDEw MjogMjY5OTI2NAo+ID4gMTA0OiAyNjk5MjY0wqDCoCAxMDY6IDI2OTY2MjjCoMKgIDEwODogMjY5 OTI2NMKgwqAgMTEwOiAyNjk2NjI4Cj4gPiAxMTI6IDI2OTkyNjTCoMKgIDExNDogMjY5OTI2NMKg wqAgMTE2OiAyNjk2NjI4wqDCoCAxMTg6IDI2OTY2MjgKPiA+IDEyMDogMjY5NjYyOMKgwqAgMTIy OiAyNjk5MjY0wqDCoCAxMjQ6IDI2OTY2MjjCoMKgIDEyNjogMjY5NjYyOAo+ID4gLS0+UmVhZGlu Z8KgICJjcHVpbmZvX2N1cl9mcmVxIgo+ID4gwqAgMDogMjY5NjYyOMKgwqDCoMKgIDI6IDI2OTY2 MjjCoMKgwqDCoCA0OiAyNjk5MjY0wqDCoMKgwqAgNjogMjY4ODcyMAo+ID4gwqAgODogMjY5OTI2 NMKgwqDCoCAxMDogMjcwMDAwMMKgwqDCoCAxMjogMjY5NjYyOMKgwqDCoCAxNDogMjY5ODMyMgo+ ID4gwqAxNjogMjY5OTI2NMKgwqDCoCAxODogMjY5OTI2NMKgwqDCoCAyMDogMjY5NjYyOMKgwqDC oCAyMjogMjY5OTI2NAo+ID4gwqAyNDogMjY5OTI2NMKgwqDCoCAyNjogMjY5OTI2NMKgwqDCoCAy ODogMjY5OTI2NMKgwqDCoCAzMDogMjY5OTI2NAo+ID4gwqAzMjogMjY5OTI2NMKgwqDCoCAzNDog MjY5Mzk5MsKgwqDCoCAzNjogMjY5NjYyOMKgwqDCoCAzODogMjY5NjYyOAo+ID4gwqA0MDogMjY5 OTI2NMKgwqDCoCA0MjogMjY5OTI2NMKgwqDCoCA0NDogMjY5OTI2NMKgwqDCoCA0NjogMjY5NjYy OAo+ID4gwqA0ODogMjY5NjYyOMKgwqDCoCA1MDogMjY5OTI2NMKgwqDCoCA1MjogMjY5NjYyOMKg wqDCoCA1NDogMjY5NjYyOAo+ID4gwqA1NjogMjY5OTI2NMKgwqDCoCA1ODogMjY5OTI2NMKgwqDC oCA2MDogMjY5NjYyOMKgwqDCoCA2MjogMjY5OTI2NAo+ID4gwqA2NDogMjY5NjYyOMKgwqDCoCA2 NjogMjY5OTI2NMKgwqDCoCA2ODogMjY5NjYyOMKgwqDCoCA3MDogMjY5OTI2NAo+ID4gwqA3Mjog MjY5NjYyOMKgwqDCoCA3NDogMjY5NjYyOMKgwqDCoCA3NjogMjY5NjYyOMKgwqDCoCA3ODogMjY5 Mzk5Mgo+ID4gwqA4MDogMjY5NjYyOMKgwqDCoCA4MjogMjY5NjYyOMKgwqDCoCA4NDogMjY5NjYy OMKgwqDCoCA4NjogMjY5NjYyOAo+ID4gwqA4ODogMjY5NjYyOMKgwqDCoCA5MDogMjY5OTI2NMKg wqDCoCA5MjogMjY5NjYyOMKgwqDCoCA5NDogMjY5OTI2NAo+ID4gwqA5NjogMjY5OTI2NMKgwqDC oCA5ODogMjY5NjYyOMKgwqAgMTAwOiAyNjk5MjY0wqDCoCAxMDI6IDI2OTkyNjQKPiA+IDEwNDog MjY5MTM1NsKgwqAgMTA2OiAyNjk5MjY0wqDCoCAxMDg6IDI2OTkyNjTCoMKgIDExMDogMjY5OTI2 NAo+ID4gMTEyOiAyNjk5MjY0wqDCoCAxMTQ6IDI2OTY2MjjCoMKgIDExNjogMjY5OTI2NMKgwqAg MTE4OiAyNjk5MjY0Cj4gPiAxMjA6IDI2OTY2MjjCoMKgIDEyMjogMjY5NjYyOMKgwqAgMTI0OiAy Njk2NjI4wqDCoCAxMjY6IDI2OTY2MjgKPiA+IAo+ID4gKkI6IHRoZSByZXN1bHQgd2l0aG91dCB5 b3VyIGNoYW5nZXMqCj4gPiAtLT5SZWFkaW5nICJzY2FsaW5nX2N1cl9mcmVxIgo+ID4gwqAgMDog MjY5ODI0NcKgwqDCoMKgIDI6IDI3MDY2OTDCoMKgwqDCoCA0OiAyNjk5NjQ5wqDCoMKgwqAgNjog MjcwMjEwNQo+ID4gwqAgODogMjcwNDM2MsKgwqDCoCAxMDogMjY5Nzk5M8KgwqDCoCAxMjogMjcw MTY3MsKgwqDCoCAxNDogMjcwNDM2Mgo+ID4gwqAxNjogMjcwMTA1MsKgwqDCoCAxODogMjcwMTA1 MsKgwqDCoCAyMDogMjY5NDM4NcKgwqDCoCAyMjogMjY5OTY1MAo+ID4gwqAyNDogMjcwNjgwMsKg wqDCoCAyNjogMjcwMjM4OcKgwqDCoCAyODogMjY5ODI5OcKgwqDCoCAzMDogMjY5ODI5OQo+ID4g wqAzMjogMjY5NzMzM8KgwqDCoCAzNDogMjY5Nzk5M8KgwqDCoCAzNjogMjcwMTMzN8KgwqDCoCAz ODogMjY5OTMyOAo+ID4gwqA0MDogMjcwMDMzMMKgwqDCoCA0MjogMjcwMDMzMMKgwqDCoCA0NDog MjY5ODAxOcKgwqDCoCA0NjogMjY5NzY5Nwo+ID4gwqA0ODogMjY5OTY1OcKgwqDCoCA1MDogMjcw MTcwMMKgwqDCoCA1MjogMjcwMzQwMcKgwqDCoCA1NDogMjcwMTcwMAo+ID4gwqA1NjogMjcwNDAx M8KgwqDCoCA1ODogMjY5NzY1OMKgwqDCoCA2MDogMjY5NTAwMMKgwqDCoCA2MjogMjY5NzY2Ngo+ ID4gwqA2NDogMjY5NzkwMsKgwqDCoCA2NjogMjcwMTA1MsKgwqDCoCA2ODogMjY5ODI0NcKgwqDC oCA3MDogMjY5NTc4OQo+ID4gwqA3MjogMjcwMTMxNcKgwqDCoCA3NDogMjY5NjY1NcKgwqDCoCA3 NjogMjY5MzY2NsKgwqDCoCA3ODogMjY5NTMxNwo+ID4gwqA4MDogMjcwNDkxMsKgwqDCoCA4Mjog MjY5OTY0OcKgwqDCoCA4NDogMjY5ODI0NcKgwqDCoCA4NjogMjY5NTQ1NAo+ID4gwqA4ODogMjY5 Nzk2NsKgwqDCoCA5MDogMjY5Nzk1OcKgwqDCoCA5MjogMjY5OTMxOcKgwqDCoCA5NDogMjcwMDY4 MAo+ID4gwqA5NjogMjY5NTMxN8KgwqDCoCA5ODogMjY5ODk5NsKgwqAgMTAwOiAyNzAwMDAwwqDC oCAxMDI6IDI3MDAzMzQKPiA+IDEwNDogMjcwMTMyMMKgwqAgMTA2OiAyNjk1MDY1wqDCoCAxMDg6 IDI3MDA5ODbCoMKgIDExMDogMjcwMzk2MAo+ID4gMTEyOiAyNjk3NjM1wqDCoCAxMTQ6IDI3MDQ0 MjHCoMKgIDExNjogMjcwMDY4MMKgwqAgMTE4OiAyNzAyMDQwCj4gPiAxMjA6IDI3MDAzMzTCoMKg IDEyMjogMjY5Nzk5M8KgwqAgMTI0OiAyNzAwMzM0wqDCoCAxMjY6IDI3MDUzNTEKPiA+IC0tPlJl YWRpbmcgImNwdWluZm9fY3VyX2ZyZXEiCj4gPiDCoCAwOiAyNjk2ODUzwqDCoMKgwqAgMjogMjY5 NTQ1NMKgwqDCoMKgIDQ6IDI2OTk2NDnCoMKgwqDCoCA2OiAyNzA2OTkzCj4gPiDCoCA4OiAyNzA2 MDYwwqDCoMKgIDEwOiAyNzA0MzYywqDCoMKgIDEyOiAyNzA0MzYywqDCoMKgIDE0OiAyNjk3NjU4 Cj4gPiDCoDE2OiAyNzA3NzE5wqDCoMKgIDE4OiAyNjk3MTkywqDCoMKgIDIwOiAyNzAyNDU2wqDC oMKgIDIyOiAyNjk5NjUwCj4gPiDCoDI0OiAyNzA1NzgywqDCoMKgIDI2OiAyNjk4Mjk5wqDCoMKg IDI4OiAyNzAzMDYxwqDCoMKgIDMwOiAyNzA1ODAyCj4gPiDCoDMyOiAyNzAwMDAwwqDCoMKgIDM0 OiAyNzAwNjcxwqDCoMKgIDM2OiAyNzAxMzM3wqDCoMKgIDM4OiAyNjk3NjU4Cj4gPiDCoDQwOiAy NzAwMzMwwqDCoMKgIDQyOiAyNzAwMzMwwqDCoMKgIDQ0OiAyNjk5NjcywqDCoMKgIDQ2OiAyNjk3 Njk3Cj4gPiDCoDQ4OiAyNzAzMDYxwqDCoMKgIDUwOiAyNjk2NjEwwqDCoMKgIDUyOiAyNjkyNTQy wqDCoMKgIDU0OiAyNzA0NDA2Cj4gPiDCoDU2OiAyNjk1MzE3wqDCoMKgIDU4OiAyNjk5MzMxwqDC oMKgIDYwOiAyNjk4OTk2wqDCoMKgIDYyOiAyNzAyNjc1Cj4gPiDCoDY0OiAyNzA0OTEywqDCoMKg IDY2OiAyNzAzODU5wqDCoMKgIDY4OiAyNjk5NjQ5wqDCoMKgIDcwOiAyNjk4NTk2Cj4gPiDCoDcy OiAyNzAzOTA4wqDCoMKgIDc0OiAyNzAzMzU1wqDCoMKgIDc2OiAyNjk3NjU4wqDCoMKgIDc4OiAy Njk1MzE3Cj4gPiDCoDgwOiAyNzAyMTA1wqDCoMKgIDgyOiAyNzA3NzE5wqDCoMKgIDg0OiAyNzAy MTA1wqDCoMKgIDg2OiAyNjk5NjQ5Cj4gPiDCoDg4OiAyNjk3OTY2wqDCoMKgIDkwOiAyNjkxNTI1 wqDCoMKgIDkyOiAyNzAxNzAwwqDCoMKgIDk0OiAyNzAwNjgwCj4gPiDCoDk2OiAyNjk1MzE3wqDC oMKgIDk4OiAyNjk4OTk2wqDCoCAxMDA6IDI2OTg2NjbCoMKgIDEwMjogMjcwMDMzNAo+ID4gMTA0 OiAyNjkwNDI5wqDCoCAxMDY6IDI3MDc1OTDCoMKgIDEwODogMjcwMDk4NsKgwqAgMTEwOiAyNzAx MzIwCj4gPiAxMTI6IDI2OTYyODPCoMKgIDExNDogMjY5Mjg4McKgwqAgMTE2OiAyNjk3NjI3wqDC oCAxMTg6IDI3MDQ0MjEKPiA+IDEyMDogMjY5ODk5NsKgwqAgMTIyOiAyNjk2MzIxwqDCoCAxMjQ6 IDI2OTY2NTXCoMKgIDEyNjogMjY5NTAwMAo+ID4KPiBTbyBpbiBib3RoIGNhc2VzIDogd2hldGhl ciB5b3UgdXNlIGFyY2hfZnJlcV9nZXRfb25fY3B1IG9yIG5vdAo+IChzbyB3aXRoIGFuZCB3aXRo b3V0IHRoZSBwYXRjaCkgeW91IGdldCByb3VnaGx5IHRoZSBzYW1lIGZyZXF1ZW5jaWVzCj4gb24g YWxsIGNvcmVzIC0gb3IgYW0gSSBtaXNzaW5nIHNtdGggZnJvbSB0aGUgZHVtcCBhYm92ZSA/Cj4g QW5kIHRob3NlIGFyZSByZWZsZWN0aW5nIG1heCBmcmVxIHlvdSBoYXZlIHByb3ZpZGVkIGVhcmxp ZXIgKD8pCj4gTm90ZSB0aGF0IHRoZSBhcmNoX2ZyZXFfZ2V0X29uX2NwdSB3aWxsIHJldHVybiBh biBhdmVyYWdlIGZyZXF1ZW5jeSBmb3IKPiB0aGUgbGFzdCB0aWNrLCBzbyBldmVuIGlmIHlvdXIg c3lzdGVtIGlzIHJvdWdobHkgaWRsZSB3aXRoIHlvdXIgcGVyZm9ybWFuY2UKPiBnb3Zlcm5vciB0 aG9zZSBudW1iZXJzIG1ha2Ugc2Vuc2UgKHNvbWUvbW9zdCBvZiB0aGUgY29yZXMgbWlnaHQgYmUg aWRsZQo+IGJ1dCB5b3Ugd2lsbCBzZWUgdGhlIGxhc3QgZnJlcSB0aGUgY29yZSB3YXMgcnVubmlu ZyBhdCBiZWZvcmUgZ29pbmcgdG8gaWRsZSkuCj4gSSBkbyBub3QgdGhpbmsgdGhlcmUgaXMgYW4g YWdyZWVtZW50IHdoYXQgc2hvdWxkIGJlIHNob3duIGZvciBpZGxlIGNvcmUgd2hlbgo+IHF1ZXJ5 aW5nIHRoZWlyIGZyZXEgdGhyb3VnaCBzeXNmcy4gU2hvd2luZyBsYXN0IGtub3duIGZyZXEgbWFr ZXMgc2Vuc2UsIGV2ZW4KPiBtb3JlIHRoYW4gd2FraW5nIHVwIGNvcmUganVzdCB0byB0cnkgdG8g Z2V0IG9uZS4KPiAKPiBASW9uZWxhOiBQbGVhc2UganVtcCBpbiBpZiBJIGdvdCB0aGluZ3Mgd3Jv bmcuCgpZZXMsIHRoYXQncyBob3cgSSBzZWUgdGhpbmdzIGFzIHdlbGwuIFdoZW4gdXNpbmcgdGhl IHBlcmZvcm1hbmNlCmdvdmVybm9yLCB3aGVuIHRoZSBDUFUgaXMgYWN0aXZlLCB0aGUgZnJlcXVl bmN5IG9mIHRoZSBDUFUgc2hvdWxkIGJlIHRoZQptYXhpbXVtIG9uZSAodW5sZXNzIHRoZXJlIGhh cyBiZWVuIGZpcm13YXJlL2hhcmR3YXJlIGNhcHBpbmcpIGFuZCB0aGF0CndvdWxkIGJlIHJlZmxl Y3RlZCBieSBjcHVpbmZvX2N1cl9mcmVxLCBlaXRoZXIgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZQpm cmVxdWVuY3kgc2NhbGUgZmFjdG9yIChiYXNlZCBvbiB0aGUgc2FtcGxlcyBvbiB0aGUgbGFzdCB0 aWNrKSAgb3IgdGhlCmRyaXZlcidzIC5nZXQoKSBmdW5jdGlvbiAoaGF2aW5nIHdva2VuIHVwIHRo ZSBDUFUgdG8gc2FtcGxlIHRoZQpjb3VudGVycykuCgpTbyB0aGUgdmFsdWVzIGFib3ZlIGxvb2sg YWxyaWdodCB0byBtZS4KClRoYW5rcywKSW9uZWxhLgoKPiAKPiA+ID4gdGhlbiByZWFkICdzY2Fs aW5nX2N1cl9mcmVxJywgZG9pbmcgc2V2ZXJhbCByZWFkcyBpbiBzb21lIGludGVydmFscyA/Cj4g PiBJdCBzZWVtcyB0aGF0IGFib3ZlIHBoZW5vbWVub24gaGFzIG5vdCBhIGxvdCB0byBkbyB3aXRo IHJlYWRpbmcgaW50ZXJ2YWxzLgo+ID4gPiBUaGUgY2hhbmdlIGhhcyBiZWVuIHRlc3RlZCBvbiBS RC1OMiBtb2RlbCAoTmVvdmVyc2UgTjIgcmVmIHBsYXRmb3JtKSwKPiA+ID4gaXQgaGFzIGFsc28g YmVlbiBkaXNjdXNzZWQgaGVyZSBbMV0KPiA+IEkgZG9lc24ndCBnZXQgdGhlIHRlc3RpbmcgcmVz dWx0IG9uIHRoaXMgcGxhdGZvcm0gaW4gaXRzIHRocmVhZC4KPiBJdCBtaWdodCBiZSBtaXNzaW5n IGV4YWN0IG51bWJlcnMgYnV0IHRoZSBjb25jbHVzaW9ucyBzaG91bGQgYmUgaGVyZSBbMV0KPiAK PiA+ID4gPiA+ID4gKi0tPiBTdGVwIDI6ICpyZWFkICdjcHVpbmZvX2N1cl9mcmVxJyBpbiB0aGUg aGlnaCBtZW1vcnkgYWNjZXNzIHByZXNzdXJlLgo+ID4gPiA+ID4gPiAgIMKgIDA6IDI2OTY2MjjC oMKgwqDCoCAyOiAyNjk2NjI4wqDCoMKgwqAgNDogMjY5NjYyOMKgwqDCoMKgIDY6IDI2OTY2MjgK PiA+ID4gPiA+ID4gICDCoCA4OiAyNjk2NjI4wqDCoMKgIDEwOiAyNjk2NjI4wqDCoMKgIDEyOiAy Njk2NjI4wqDCoMKgIDE0OiAyNjk2NjI4Cj4gPiA+ID4gPiA+ICAgwqAxNjogMjY5NjYyOMKgwqDC oCAxODogMjY5NjYyOMKgwqDCoCAyMDogMjY5NjYyOMKgwqDCoCAyMjogMjY5NjYyOAo+ID4gPiA+ ID4gPiAgIMKgMjQ6IDI2OTY2MjjCoMKgwqAgMjY6IDI2OTY2MjjCoMKgwqAgMjg6IDI2OTY2MjjC oMKgwqAgMzA6IDI2OTY2MjgKPiA+ID4gPiA+ID4gICDCoDMyOiAyNjk2NjI4wqDCoMKgIDM0OiAy Njk2NjI4wqDCoMKgIDM2OiAyNjk2NjI4wqDCoMKgIDM4OiAyNjk2NjI4Cj4gPiA+ID4gPiA+ICAg wqA0MDogMjY5NjYyOMKgwqDCoCA0MjogMjY5NjYyOMKgwqDCoCA0NDogMjY5NjYyOMKgwqDCoCA0 NjogMjY5NjYyOAo+ID4gPiA+ID4gPiAgIMKgNDg6IDI2OTY2MjjCoMKgwqAgNTA6IDI2OTY2MjjC oMKgwqAgNTI6IDI2OTY2MjjCoMKgwqAgNTQ6IDI2OTY2MjgKPiA+ID4gPiA+ID4gICDCoDU2OiAy Njk2NjI4wqDCoMKgIDU4OiAyNjk2NjI4wqDCoMKgIDYwOiAyNjk2NjI4wqDCoMKgIDYyOiAyNjk2 NjI4Cj4gPiA+ID4gPiA+ICAgwqA2NDogMjY5NjYyOMKgwqDCoCA2NjogMjY5NjYyOMKgwqDCoCA2 ODogMjY5NjYyOMKgwqDCoCA3MDogMjY5NjYyOAo+ID4gPiA+ID4gPiAgIMKgNzI6IDI2OTY2MjjC oMKgwqAgNzQ6IDI2OTY2MjjCoMKgwqAgNzY6IDI2OTY2MjjCoMKgwqAgNzg6IDI2OTY2MjgKPiA+ ID4gPiA+ID4gICDCoDgwOiAyNjk2NjI4wqDCoMKgIDgyOiAyNjk2NjI4wqDCoMKgIDg0OiAyNjk2 NjI4wqDCoMKgIDg2OiAyNjk2NjI4Cj4gPiA+ID4gPiA+ICAgwqA4ODogMjY5NjYyOMKgwqDCoCA5 MDogMjY5NjYyOMKgwqDCoCA5MjogMjY5NjYyOMKgwqDCoCA5NDogMjY5NjYyOAo+ID4gPiA+ID4g PiAgIMKgOTY6IDI2OTY2MjjCoMKgwqAgOTg6IDI2OTY2MjjCoMKgIDEwMDogMjY5NjYyOMKgwqAg MTAyOiAyNjk2NjI4Cj4gPiA+ID4gPiA+IDEwNDogMjY5NjYyOMKgwqAgMTA2OiAyNjk2NjI4wqDC oCAxMDg6IDI2OTY2MjjCoMKgIDExMDogMjY5NjYyOAo+ID4gPiA+ID4gPiAxMTI6IDI2OTY2MjjC oMKgIDExNDogMjY5NjYyOMKgwqAgMTE2OiAyNjk2NjI4wqDCoCAxMTg6IDI2OTY2MjgKPiA+ID4g PiA+ID4gMTIwOiAyNjk2NjI4wqDCoCAxMjI6IDI2OTY2MjjCoMKgIDEyNDogMjY5NjYyOMKgwqAg MTI2OiAyNjk2NjI4Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAqQ2FzZSAyOiBzZXR0aW5nIG5v aHpfZnVsbCBhbmQgY3B1ZnJlcSB1c2Ugb25kZW1hbmQgZ292ZXJub3IqCj4gPiA+ID4gPiA+IFRo ZXJlIGlzICJpc29sY3B1cz0xLTEwLDQxLTUwIG5vaHpfZnVsbD0xLTEwLDQxLTUwIHJjdV9ub2Ni cz0xLTEwLDQxLTUwIiBpbgo+ID4gPiA+ID4gPiAvcHJvYy9jbWRsaW5lLgo+ID4gPiA+ID4gUmln aHQsIHNvIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5IG5vaHpfZnVsbCBpbXBsaWVzIHJjdV9ub2Ni cywgc28gbm8gbmVlZCB0bwo+ID4gPiA+ID4gc2V0IHRoYXQgb25lLgo+ID4gPiA+ID4gTm93LCBh ZmFpciwgaXNvbGNwdXMgd2lsbCBtYWtlIHRoZSBzZWxlY3RlZCBDUFVzIHRvIGRpc2FwcGVhciBm cm9tIHRoZQo+ID4gPiA+ID4gc2NoZWR1bGVycyB2aWV3IChubyBiYWxhbmNpbmcsIG5vIG1pZ3Jh dGluZyksIHNvIHVubGVzcyB5b3UgYWZmaW5lIHNtdGgKPiA+ID4gPiA+IGV4cGxpY2l0bHkgdG8g dGhvc2UgQ1BVcywgeW91IHdpbGwgbm90IHNlZSBtdWNoIG9mIGFuIGFjdGl2aXR5IHRoZXJlLgo+ ID4gPiA+IENvcnJlY3QuCj4gPiA+ID4gPiBOZWVkIHRvIGRvdWJsZSBjaGVjayB0aG91Z2ggYXMg aXQgaGFzIGJlZW4gYSB3aGlsZSAuLi4KPiA+ID4gPiA+ID4gKi0tPiBTdGVwIDE6ICpzZXR0aW5n IG9uZGVtYW5kIGdvdmVybm9yIHRvIGFsbCBwb2xpY3kgYW5kIHF1ZXJ5Cj4gPiA+ID4gPiA+ICdj cHVpbmZvX2N1cl9mcmVxJyBpbiBubyBwcmVzc3VyZSBjYXNlLgo+ID4gPiA+ID4gPiBBbmQgdGhl IGZyZXF1ZW5jeSBvZiBDUFVzIGFsbCBhcmUgYWJvdXQgNDAwTUh6Lgo+ID4gPiA+ID4gPiAqLS0+ IFN0ZXAgMjoqIHJlYWQgJ2NwdWluZm9fY3VyX2ZyZXEnIGluIHRoZSBoaWdoIG1lbW9yeSBhY2Nl c3MgcHJlc3N1cmUuCj4gPiA+ID4gPiA+IFRoZSBoaWdoIG1lbW9yeSBhY2Nlc3MgcHJlc3N1cmUg aXMgZnJvbSB0aGUgY29tbWFuZDogInN0cmVzcy1uZyAtYyA2NAo+ID4gPiA+ID4gPiAtLWNwdS1s b2FkIDEwMCUgLS10YXNrc2V0IDAtNjMiCj4gPiA+ID4gPiBJJ20gbm90IGVudGlyZWx5IGNvbnZp bmNlZCB0aGF0IHRoaXMgd2lsbCBhZmZpbmUgdG8gaXNvbGF0ZWQgY3B1cywgZXNwZWNpYWxseQo+ ID4gPiA+ID4gdGhhdCB0aGUgYWZmaW5pdHkgbWFzayBzcGFucyBhbGwgYXZhaWxhYmxlIGNwdXMu IElmIHRoYXQgaXMgdGhlIGNhc2UsIG5vIHdvbmRlcgo+ID4gPiA+ID4geW91ciBpc29sYXRlZCBj cHVzIGFyZSBnZXR0aW5nIHdhc3RlZCBiZWluZyBpZGxlLiBCdXQgSSB3b3VsZCBoYXZlIHRvIGRv dWJsZQo+ID4gPiA+ID4gY2hlY2sgaG93IHRoaXMgaXMgYmVpbmcgaGFuZGxlZC4KPiA+ID4gPiA+ ID4gVGhlIHJlc3VsdDoKPiA+ID4gPiA+ID4gICDCoDA6IDI2OTY2MjjCoMKgwqDCoCAxOsKgIDQw MDAwMMKgwqDCoMKgIDI6wqAgNDAwMDAwwqDCoMKgwqAgMzrCoCA0MDA5MDkKPiA+ID4gPiA+ID4g ICDCoDQ6wqAgNDAwMDAwwqDCoMKgwqAgNTrCoCA0MDAwMDDCoMKgwqDCoCA2OsKgIDQwMDAwMMKg wqDCoMKgIDc6wqAgNDAwMDAwCj4gPiA+ID4gPiA+ICAgwqA4OsKgIDQwMDAwMMKgwqDCoMKgIDk6 wqAgNDAwMDAwwqDCoMKgIDEwOsKgIDQwMDYwMMKgwqDCoCAxMTogMjY5NjYyOAo+ID4gPiA+ID4g PiAxMjogMjY5NjYyOMKgwqDCoCAxMzogMjY5NjYyOMKgwqDCoCAxNDogMjY5NjYyOMKgwqDCoCAx NTogMjY5NjYyOAo+ID4gPiA+ID4gPiAxNjogMjY5NjYyOMKgwqDCoCAxNzogMjY5NjYyOMKgwqDC oCAxODogMjY5NjYyOMKgwqDCoCAxOTogMjY5NjYyOAo+ID4gPiA+ID4gPiAyMDogMjY5NjYyOMKg wqDCoCAyMTogMjY5NjYyOMKgwqDCoCAyMjogMjY5NjYyOMKgwqDCoCAyMzogMjY5NjYyOAo+ID4g PiA+ID4gPiAyNDogMjY5NjYyOMKgwqDCoCAyNTogMjY5NjYyOMKgwqDCoCAyNjogMjY5NjYyOMKg wqDCoCAyNzogMjY5NjYyOAo+ID4gPiA+ID4gPiAyODogMjY5NjYyOMKgwqDCoCAyOTogMjY5NjYy OMKgwqDCoCAzMDogMjY5NjYyOMKgwqDCoCAzMTogMjY5NjYyOAo+ID4gPiA+ID4gPiAzMjogMjY5 NjYyOMKgwqDCoCAzMzogMjY5NjYyOMKgwqDCoCAzNDogMjY5NjYyOMKgwqDCoCAzNTogMjY5NjYy OAo+ID4gPiA+ID4gPiAzNjogMjY5NjYyOMKgwqDCoCAzNzogMjY5NjYyOMKgwqDCoCAzODogMjY5 NjYyOMKgwqDCoCAzOTogMjY5NjYyOAo+ID4gPiA+ID4gPiA0MDogMjY5NjYyOMKgwqDCoCA0MTrC oCA0MDAwMDDCoMKgwqAgNDI6wqAgNDAwMDAwwqDCoMKgIDQzOsKgIDQwMDAwMAo+ID4gPiA+ID4g PiA0NDrCoCA0MDAwMDDCoMKgwqAgNDU6wqAgMzk4ODQ3wqDCoMKgIDQ2OsKgIDQwMDAwMMKgwqDC oCA0NzrCoCA0MDAwMDAKPiA+ID4gPiA+ID4gNDg6wqAgNDAwMDAwwqDCoMKgIDQ5OsKgIDQwMDAw MMKgwqDCoCA1MDrCoCA0MDAwMDDCoMKgwqAgNTE6IDI2OTY2MjgKPiA+ID4gPiA+ID4gNTI6IDI2 OTY2MjjCoMKgwqAgNTM6IDI2OTY2MjjCoMKgwqAgNTQ6IDI2OTY2MjjCoMKgwqAgNTU6IDI2OTY2 MjgKPiA+ID4gPiA+ID4gNTY6IDI2OTY2MjjCoMKgwqAgNTc6IDI2OTY2MjjCoMKgwqAgNTg6IDI2 OTY2MjjCoMKgwqAgNTk6IDI2OTY2MjgKPiA+ID4gPiA+ID4gNjA6IDI2OTY2MjjCoMKgwqAgNjE6 IDI2OTY2MjjCoMKgwqAgNjI6IDI2OTY2MjjCoMKgwqAgNjM6IDI2OTkyNjQKPiA+ID4gPiA+ID4g Cj4gPiA+ID4gPiA+IE5vdGU6Cj4gPiA+ID4gPiA+ICgxKSBUaGUgZnJlcXVlbmN5IG9mIDEtMTAg YW5kIDQxLTUwIENQVXMgd29yayBvbiB0aGUgbG93ZXN0IGZyZXF1ZW5jeS4KPiA+ID4gPiA+ID4g ICDCoMKgwqDCoCBJdCB0dXJuZWQgb3V0IHRoYXQgbm9oeiBmdWxsIHdhcyBhbHJlYWR5IHdvcmsu Cj4gPiA+ID4gPiA+ICAgwqDCoMKgwqAgSSBndWVzcyB0aGF0IHN0cmVzcy1uZyBjYW5ub3QgdXNl IHRoZSBDUFUgaW4gdGhlIHJhbmdlIG9mIG5vaHogZnVsbC4KPiA+ID4gPiA+ID4gICDCoMKgwqDC oCBCZWNhdXNlIHRoZSBDUFUgZnJlcXVlbmN5IHdpbGwgYmUgaW5jcmVhc2VkIHRvIDIuN0cgYnkg YmluZGluZyBDUFUgdG8KPiA+ID4gPiA+ID4gb3RoZXIgYXBwbGljYXRpb24uCj4gPiA+ID4gPiA+ ICgyKSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBub2h6IGZ1bGwgY29yZSBpcyBjYWxjdWxhdGVkIGJ5 IGdldCgpIGNhbGxiYWNrCj4gPiA+ID4gPiA+IGFjY29yZGluZyB0byBmdHJhY2UuCj4gPiA+ID4g PiBJdCBpcyBhcyB0aGVyZSBpcyBubyBzY2hlZCB0aWNrIG9uIHRob3NlLCBhbmQgYXBwYXJlbnRs eSB0aGVyZSBpcyBub3RoaW5nCj4gPiA+ID4gPiBydW5uaW5nIG9uIHRoZW0gZWl0aGVyLgo+ID4g PiA+IFllcy4KPiA+ID4gPiBJZiB3ZSBzZWxlY3QgeW91ciBhcHByb2FjaCBhbmQgdGhlIGFib3Zl IHBoZW5vbWVub24gaXMgbm9ybWFsLAo+ID4gPiA+IHRoZSBsYXJnZSBmcmVxdWVuY3kgZGlzY3Jl cGFuY3kgaXNzdWUgY2FuIGJlIHJlc29sdmVkIGZvciBDUFVzIHdpdGggc2NoZWQKPiA+ID4gPiB0 aWNrIGJ5IHRoZSB3YXkuCj4gPiA+ID4gQnV0IHRoZSBub2h6IGZ1bGwgY29yZXMgc3RpbGwgaGF2 ZSB0byBmYWNlIHRoaXMgaXNzdWUuIFNvIHRoaXMgcGF0Y2ggaXMgYWxzbwo+ID4gPiA+IG5lZWRl ZC4KPiA+ID4gPiAKPiA+ID4gWWVzLCBub2h6IGNvcmVzIGZ1bGwgaGF2ZSB0byBiZSBoYW5kbGVk IGJ5IHRoZSBjcHVmcmVxIGRyaXZlci4KPiA+IENvcnJlY3QuIFNvIHdlIHN0aWxsIGhhdmUgdG8g ZmFjZSB0aGUgaXNzdWUgaW4gdGhpcyBwYXRjaCBhbmQgcHVzaCB0aGlzCj4gPiBwYXRjaC4KPiA+ IEJlYXRhLCB3b3VsZCB5b3UgcGxlYXNlIHJldmlldyB0aGlzIHBhdGNoPwo+IEp1c3QgdG8gY2xh cmlmeSBmb3IgbXkgYmVuZWZpdCAoYXBvbG9naWVzIGJ1dCBJIGRvIGhhdmUgdG8gY29udGV4IHN3 aXRjaAo+IHByZXR0eSBvZnRlbiB0aGVzZSBkYXlzKTogYnkgcmV2aWV3aW5nIHRoaXMgcGF0Y2gg ZG8geW91IG1lYW46Cj4gMSkgcmV2aWV3IHlvdXIgY2hhbmdlcyAoaWYgc28gSSB0aGluayB0aGVy ZSBhcmUgZmV3IGNvbW1lbnRzIGFscmVhZHkgdG8gYmUKPiBhZGRyZXNzZWQsIGJ1dCBJIGNhbiB0 cnkgdG8gaGF2ZSBhbm90aGVyIGxvb2spCj4gMikgcmV2aWV3IGNoYW5nZXMgZm9yIEFNVS1iYXNl ZCBhcmNoX2ZyZXFfZ2V0X29uX2NwdSA/Cj4gCj4gKm5vdGU6IEkgd2lsbCBzdGlsbCB0cnkgdG8g aGF2ZSBhIGxvb2sgYXQgdGhlIG5vbi1ob3VzZWtlZXBpbmcgY3B1cyBjYXNlCj4gCj4gLS0tCj4g WzFdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvNjkxZDNlYjItY2Q5My1mMGZjLWE3YTQt MmE4YzBkNDQyNjJjQG52aWRpYS5jb20vCj4gLS0tCj4gCj4gQlIKPiBCZWF0YQo+ID4gCj4gPiAK PiA+IC9IdWlzb25nCj4gPiA+IAo+IFsuLi5dCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==