From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from wp530.webpack.hosteurope.de (wp530.webpack.hosteurope.de [80.237.130.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E24A348D0 for ; Fri, 18 Feb 2022 11:47:35 +0000 (UTC) Received: from ip4d144895.dynamic.kabel-deutschland.de ([77.20.72.149] helo=[192.168.66.200]); authenticated by wp530.webpack.hosteurope.de running ExIM with esmtpsa (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) id 1nL1jV-0002w0-4r; Fri, 18 Feb 2022 12:47:29 +0100 Message-ID: <625a51ed-8185-6fdb-bd7d-cfb0a913c7a4@leemhuis.info> Date: Fri, 18 Feb 2022 12:47:27 +0100 Precedence: bulk X-Mailing-List: regressions@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: Compex WLE200NX: regdomain sanitized regression Content-Language: en-BS To: Nuno Oliveira , Kalle Valo Cc: Sebastian Bachmann , wgong@codeaurora.org, ath10k@lists.infradead.org, "regressions@lists.linux.dev" References: <1c160dfb-6ccc-b4d6-76f6-4364e0adb6dd@reox.at> <96b3682d-71b3-ada0-6fc7-686e51609968@leemhuis.info> <87v8zja7em.fsf@codeaurora.org> From: Thorsten Leemhuis In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-bounce-key: webpack.hosteurope.de;regressions@leemhuis.info;1645184856;c62d3d12; X-HE-SMSGID: 1nL1jV-0002w0-4r Hi, this is your Linux kernel regression tracker speaking. Top-posting for once, to make this easy accessible to everyone. Kalle, thx for looking into this, I'm well aware this is kinda tricky. This is a gently reminder about the issue to ensure it doesn't fall through the cracks. At the same time I know that it's not urgent, that why I'm not putting it on backburner in regzbot now: #regzbot backburner: tricky situation and around for a while, hence not that urgent #regzbot poke I'll likely sent another gentle reminder after the next merge-window. Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat) P.S.: As the Linux kernel's regression tracker I'm getting a lot of reports on my table. I can only look briefly into most of them and lack knowledge about most of the areas they concern. I thus unfortunately will sometimes get things wrong or miss something important. I hope that's not the case here; if you think it is, don't hesitate to tell me in a public reply, it's in everyone's interest to set the public record straight. On 20.12.21 19:31, Nuno Oliveira wrote: > Hi Kalle, > > Thanks for looking again into this. > > * Kalle Valo [2021-12-20 10:38]: >> Thorsten Leemhuis writes: >> >>> Hi, this is your Linux kernel regression tracker speaking. >>> >>> On 27.11.21 13:21, Nuno Oliveira wrote: >>>> * Sebastian Bachmann [2021-11-27 08:17]: >>>> >>>>> I recently upgraded my Debian based AP from buster to bullseye, just >>>>> to find out that hostapd does not work any more, because all 5GHz >>>>> channels are marked as No-IR. This regression was already discussed on >>>>> this ML here: >>>>> https://www.mail-archive.com/ath10k@lists.infradead.org/msg12018.html >>>>> and there is also an entry in Debian's bug tracker for the same issue: >>>>> https://bugs.debian.org/959821 >>>>> >>>>> I have a slightly different card (branded Compex WLE200NX): >>>>> 04:00.0 Network controller: Qualcomm Atheros AR928X Wireless Network >>>>> Adapter (PCI-Express) (rev 01) >>>>>        Subsystem: Qualcomm Atheros AR928X Wireless Network Adapter >>>>> (PCI-Express) >>>>>        Kernel driver in use: ath9k >>>>>        Kernel modules: ath9k >>>>> >>>>> But as you can see, also the EEPROM gets sanitized: >>>>> [   15.461755] ath9k 0000:04:00.0: enabling device (0000 -> 0002) >>>>> [   15.911600] ath: EEPROM regdomain sanitized >>>>> [   15.911612] ath: EEPROM regdomain: 0x64 >>>>> [   15.911615] ath: EEPROM indicates we should expect a direct regpair >>>>> map >>>>> [   15.911625] ath: Country alpha2 being used: 00 >>>>> [   15.911628] ath: Regpair used: 0x64 >>>>> >>>>> I read in the other thread, that this is a regression, but the actual >>>>> commit causing it was never reverted. >>>>> I tried to search for newer messages explaining the issue, however as >>>>> far as I can tell, the thread ends in June 2020 with no solution >>>>> available. >>>>> >>>>> Therefore, I kindly want to ask if there is any workaround available >>>>> to re-enable 5GHz channels in AP mode for my card? (expect sticking to >>>>> a pre-5.6 kernel or manually patching and recompiling ath) >>>> >>>> After June 2020 there were other users also affected by this change >>>> (see >>>> e.g., >>>> https://lists.infradead.org/pipermail/ath10k/2021-August/012802.html). >>>> Users were complaining that this change was too restrictive since it >>>> meant that the intersection of restrictions for regdomains 0x00, 0x64, >>>> US, and their local domain, together with a cumulative mode of applying >>>> these constraints meant that, in practice, they would not be able to >>>> use >>>> their world domain cards anymore as APs in the 5GHz band, for certain >>>> regdomains where they were located. >>>> >>>> And several people pinpointed the exact source changes responsible for >>>> this. In my case, I ended up applying the attached patch, that just >>>> loads the parameters for the regdomain that I'm interested in >>>> (CTRY_PORTUGAL). I'm not in the US; and I care for their regulatory >>>> restrictions as much as they are interested in mine. >>>> >>>> So I think that you might be able to use the attached changes, with the >>>> specific CTRY_xxx parameter suitable for your case. And then recompile >>>> the respective Debian kernel package, which takes a lot of CPU if you >>>> just recompile the whole package. Let me know if you need instructions. >>>> >>>> A more robust option would be to go the OpenWRT way, and use their >>>> patches to make this country selection a parameter for the kernel >>>> module. This way, you would just reload the kernel module to change >>>> to a >>>> new regdomain, subject to the restrictions of your hardware / firmware. >>>> I have not looked into that. Please let me know if you isolate these >>>> patches. >>>> >>>> In any case it seems difficult to escape a kernel recompile, due to >>>> this >>>> small, entirely legitimate, yet remarkable decision by the driver >>>> maintainers. >>> >>> This is a regression due to 2dc016599cfa ("ath: add support for special >>> 0x0 regulatory domain") that seems to affect quite a few users, but >>> afaics was never properly addressed. I fully understand that this might >>> be a special case where Linus' "no regressions" rule can't be simply >>> applied. >> >> Yes, this is a tricky problem and I am taking a second look at this. >> Regulatory rules are complicated and we do not want to break them in any >> circumstance. >> >> I see two ways to workaround this: >> >> 1) calibrate your board with a correct country code (which is impossible >>   for an average user) >> >> 2) use 2.4 GHz band >> >>> But isn't there some way to provide users with a solution that doesn't >>> force users to compile a module or a kernel? Like a module-parameter >>> that only works if the the regulatory domain code in the EEPROM is empty >>> (as apparently used by OpenWRT?). Yes, module parameters are normally a >>> bad idea, but this case it might be a situation where it's the best >>> solution. >> >> I don't think setting the country code via a module parameter would be >> acceptable for the authorities, more info here: >> >> https://wireless.wiki.kernel.org/en/developers/regulatory > > The issue involves finding a reasonable compromise between relative > inconveniences, given the perspectives of both developers and users. As > implemented currently, the restriction seems to affect both ath9k and > ath10k (and probably ath11k -- I have not tried it, and frankly with the > current status, I'm not eager to do it), but only when users try to run > a 5 GHz AP. This is still reasonable (and legal) use, although not > without many restrictions. Other drivers (e.g., iwlwifi) are much more > restrictive relative to this, but at least they genuinely have made it > completely clear from the beginning. > > A common point of the previous messages was that, after these last > changes, the boards with the 0x00 domain in the EEPROM were successively > initialized with the 0x64 and later with UNITED_STATES domains by the > driver. In practice this prevented their use as an AP when, later in > userspace, the user tried to declare a 3rd local regdomain. My > suggestion here would be to avoid this double interpretation of what > default initialization would be appropriate. Either keep the old > behavior (UNITED_STATES) which limited but did not originally prevented > the AP usage, or replace it completely with the updated interpretation > of what's applicable to this case (0x64); but please don't do both by > default, or we will be in the current situation. Other users have asked > for this before, and this sort of clarification seems to be the minimum > to consider at this point, if anything is to be considered. > > If this limiting double initialization is already achievable entirely > through user configuration of default distribution kernels, please > excuse my lack of knowledge. In this case, just documenting this better > could also help other users. > > Besides this consistent "safe" initialization, for users with special > cases there's always the options of either providing alternative CRDAs > or patching and recompiling the driver. This is a matter of relative > inconveniences; as long as they remain feasible, it's always a weighting > issue. > > Thanks for your good work. Regards, > > Nuno. > > 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 125DFC433F5 for ; Fri, 18 Feb 2022 12:46:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To: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=ops6vJWir/97JM3QpQoPYYshDlbRV41a4F5DtudiRhE=; b=awoVHWyGDPSEh4 nb/zrNl4UKsZGO9pwFvV4i+7yugjCTPQMYEgxkvPnLcTgnuhv00u5CbD/LbAewtSphAzE544DbhLt nhmefpEw4vILmVBPG5DDjgBv5qBENz5zveyA5p7EoBFmXZtYTt6glu82ltNnTJAXh17nhANxWM+Os 8P5N4EKsTtSLSHkC15I3HTvhVTBIHs4uACo+eQCNO6po02t4mKBo9xRPCLFARbk0x4Cal/M4W+YgK 2bumIhViY3xcESY0u+03S+/S9TzBag8Fo6X7p5wu68dqqemWzBIG5CvYKO3IzfBYmYvvyWssUWmNQ GbHxM4tKNvDN/j2QzInw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nL2dy-00EI0f-Am; Fri, 18 Feb 2022 12:45:50 +0000 Received: from wp530.webpack.hosteurope.de ([2a01:488:42:1000:50ed:8234::]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nL1jb-00E4wB-I0 for ath10k@lists.infradead.org; Fri, 18 Feb 2022 11:47:39 +0000 Received: from ip4d144895.dynamic.kabel-deutschland.de ([77.20.72.149] helo=[192.168.66.200]); authenticated by wp530.webpack.hosteurope.de running ExIM with esmtpsa (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) id 1nL1jV-0002w0-4r; Fri, 18 Feb 2022 12:47:29 +0100 Message-ID: <625a51ed-8185-6fdb-bd7d-cfb0a913c7a4@leemhuis.info> Date: Fri, 18 Feb 2022 12:47:27 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: Compex WLE200NX: regdomain sanitized regression Content-Language: en-BS To: Nuno Oliveira , Kalle Valo Cc: Sebastian Bachmann , wgong@codeaurora.org, ath10k@lists.infradead.org, "regressions@lists.linux.dev" References: <1c160dfb-6ccc-b4d6-76f6-4364e0adb6dd@reox.at> <96b3682d-71b3-ada0-6fc7-686e51609968@leemhuis.info> <87v8zja7em.fsf@codeaurora.org> From: Thorsten Leemhuis In-Reply-To: X-bounce-key: webpack.hosteurope.de; regressions@leemhuis.info; 1645184855; ce63a476; X-HE-SMSGID: 1nL1jV-0002w0-4r X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220218_034735_792466_19C2CD68 X-CRM114-Status: GOOD ( 47.49 ) X-BeenThere: ath10k@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: "ath10k" Errors-To: ath10k-bounces+ath10k=archiver.kernel.org@lists.infradead.org SGksIHRoaXMgaXMgeW91ciBMaW51eCBrZXJuZWwgcmVncmVzc2lvbiB0cmFja2VyIHNwZWFraW5n LiBUb3AtcG9zdGluZwpmb3Igb25jZSwgdG8gbWFrZSB0aGlzIGVhc3kgYWNjZXNzaWJsZSB0byBl dmVyeW9uZS4KCkthbGxlLCB0aHggZm9yIGxvb2tpbmcgaW50byB0aGlzLCBJJ20gd2VsbCBhd2Fy ZSB0aGlzIGlzIGtpbmRhIHRyaWNreS4KVGhpcyBpcyBhIGdlbnRseSByZW1pbmRlciBhYm91dCB0 aGUgaXNzdWUgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgZmFsbAp0aHJvdWdoIHRoZSBjcmFja3MuIEF0 IHRoZSBzYW1lIHRpbWUgSSBrbm93IHRoYXQgaXQncyBub3QgdXJnZW50LCB0aGF0CndoeSBJJ20g bm90IHB1dHRpbmcgaXQgb24gYmFja2J1cm5lciBpbiByZWd6Ym90IG5vdzoKCiNyZWd6Ym90IGJh Y2tidXJuZXI6IHRyaWNreSBzaXR1YXRpb24gYW5kIGFyb3VuZCBmb3IgYSB3aGlsZSwgaGVuY2Ug bm90CnRoYXQgdXJnZW50CiNyZWd6Ym90IHBva2UKCkknbGwgbGlrZWx5IHNlbnQgYW5vdGhlciBn ZW50bGUgcmVtaW5kZXIgYWZ0ZXIgdGhlIG5leHQgbWVyZ2Utd2luZG93LgoKQ2lhbywgVGhvcnN0 ZW4gKHdlYXJpbmcgaGlzICd0aGUgTGludXgga2VybmVsJ3MgcmVncmVzc2lvbiB0cmFja2VyJyBo YXQpCgpQLlMuOiBBcyB0aGUgTGludXgga2VybmVsJ3MgcmVncmVzc2lvbiB0cmFja2VyIEknbSBn ZXR0aW5nIGEgbG90IG9mCnJlcG9ydHMgb24gbXkgdGFibGUuIEkgY2FuIG9ubHkgbG9vayBicmll Zmx5IGludG8gbW9zdCBvZiB0aGVtIGFuZCBsYWNrCmtub3dsZWRnZSBhYm91dCBtb3N0IG9mIHRo ZSBhcmVhcyB0aGV5IGNvbmNlcm4uIEkgdGh1cyB1bmZvcnR1bmF0ZWx5CndpbGwgc29tZXRpbWVz IGdldCB0aGluZ3Mgd3Jvbmcgb3IgbWlzcyBzb21ldGhpbmcgaW1wb3J0YW50LiBJIGhvcGUKdGhh dCdzIG5vdCB0aGUgY2FzZSBoZXJlOyBpZiB5b3UgdGhpbmsgaXQgaXMsIGRvbid0IGhlc2l0YXRl IHRvIHRlbGwgbWUKaW4gYSBwdWJsaWMgcmVwbHksIGl0J3MgaW4gZXZlcnlvbmUncyBpbnRlcmVz dCB0byBzZXQgdGhlIHB1YmxpYyByZWNvcmQKc3RyYWlnaHQuCgpPbiAyMC4xMi4yMSAxOTozMSwg TnVubyBPbGl2ZWlyYSB3cm90ZToKPiBIaSBLYWxsZSwKPiAKPiBUaGFua3MgZm9yIGxvb2tpbmcg YWdhaW4gaW50byB0aGlzLgo+IAo+ICogS2FsbGUgVmFsbyA8a3ZhbG9Aa2VybmVsLm9yZz4gWzIw MjEtMTItMjAgMTA6MzhdOgo+PiBUaG9yc3RlbiBMZWVtaHVpcyA8cmVncmVzc2lvbnNAbGVlbWh1 aXMuaW5mbz4gd3JpdGVzOgo+Pgo+Pj4gSGksIHRoaXMgaXMgeW91ciBMaW51eCBrZXJuZWwgcmVn cmVzc2lvbiB0cmFja2VyIHNwZWFraW5nLgo+Pj4KPj4+IE9uIDI3LjExLjIxIDEzOjIxLCBOdW5v IE9saXZlaXJhIHdyb3RlOgo+Pj4+ICogU2ViYXN0aWFuIEJhY2htYW5uIDxoZWxsb0ByZW94LmF0 PiBbMjAyMS0xMS0yNyAwODoxN106Cj4+Pj4KPj4+Pj4gSSByZWNlbnRseSB1cGdyYWRlZCBteSBE ZWJpYW4gYmFzZWQgQVAgZnJvbSBidXN0ZXIgdG8gYnVsbHNleWUsIGp1c3QKPj4+Pj4gdG8gZmlu ZCBvdXQgdGhhdCBob3N0YXBkIGRvZXMgbm90IHdvcmsgYW55IG1vcmUsIGJlY2F1c2UgYWxsIDVH SHoKPj4+Pj4gY2hhbm5lbHMgYXJlIG1hcmtlZCBhcyBOby1JUi4gVGhpcyByZWdyZXNzaW9uIHdh cyBhbHJlYWR5IGRpc2N1c3NlZCBvbgo+Pj4+PiB0aGlzIE1MIGhlcmU6Cj4+Pj4+IGh0dHBzOi8v d3d3Lm1haWwtYXJjaGl2ZS5jb20vYXRoMTBrQGxpc3RzLmluZnJhZGVhZC5vcmcvbXNnMTIwMTgu aHRtbAo+Pj4+PiBhbmQgdGhlcmUgaXMgYWxzbyBhbiBlbnRyeSBpbiBEZWJpYW4ncyBidWcgdHJh Y2tlciBmb3IgdGhlIHNhbWUgaXNzdWU6Cj4+Pj4+IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzk1 OTgyMQo+Pj4+Pgo+Pj4+PiBJIGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgY2FyZCAoYnJhbmRl ZCBDb21wZXggV0xFMjAwTlgpOgo+Pj4+PiAwNDowMC4wIE5ldHdvcmsgY29udHJvbGxlcjogUXVh bGNvbW0gQXRoZXJvcyBBUjkyOFggV2lyZWxlc3MgTmV0d29yawo+Pj4+PiBBZGFwdGVyIChQQ0kt RXhwcmVzcykgKHJldiAwMSkKPj4+Pj4gwqDCoMKgwqDCoMKgIFN1YnN5c3RlbTogUXVhbGNvbW0g QXRoZXJvcyBBUjkyOFggV2lyZWxlc3MgTmV0d29yayBBZGFwdGVyCj4+Pj4+IChQQ0ktRXhwcmVz cykKPj4+Pj4gwqDCoMKgwqDCoMKgIEtlcm5lbCBkcml2ZXIgaW4gdXNlOiBhdGg5awo+Pj4+PiDC oMKgwqDCoMKgwqAgS2VybmVsIG1vZHVsZXM6IGF0aDlrCj4+Pj4+Cj4+Pj4+IEJ1dCBhcyB5b3Ug Y2FuIHNlZSwgYWxzbyB0aGUgRUVQUk9NIGdldHMgc2FuaXRpemVkOgo+Pj4+PiBbwqDCoCAxNS40 NjE3NTVdIGF0aDlrIDAwMDA6MDQ6MDAuMDogZW5hYmxpbmcgZGV2aWNlICgwMDAwIC0+IDAwMDIp Cj4+Pj4+IFvCoMKgIDE1LjkxMTYwMF0gYXRoOiBFRVBST00gcmVnZG9tYWluIHNhbml0aXplZAo+ Pj4+PiBbwqDCoCAxNS45MTE2MTJdIGF0aDogRUVQUk9NIHJlZ2RvbWFpbjogMHg2NAo+Pj4+PiBb wqDCoCAxNS45MTE2MTVdIGF0aDogRUVQUk9NIGluZGljYXRlcyB3ZSBzaG91bGQgZXhwZWN0IGEg ZGlyZWN0IHJlZ3BhaXIKPj4+Pj4gbWFwCj4+Pj4+IFvCoMKgIDE1LjkxMTYyNV0gYXRoOiBDb3Vu dHJ5IGFscGhhMiBiZWluZyB1c2VkOiAwMAo+Pj4+PiBbwqDCoCAxNS45MTE2MjhdIGF0aDogUmVn cGFpciB1c2VkOiAweDY0Cj4+Pj4+Cj4+Pj4+IEkgcmVhZCBpbiB0aGUgb3RoZXIgdGhyZWFkLCB0 aGF0IHRoaXMgaXMgYSByZWdyZXNzaW9uLCBidXQgdGhlIGFjdHVhbAo+Pj4+PiBjb21taXQgY2F1 c2luZyBpdCB3YXMgbmV2ZXIgcmV2ZXJ0ZWQuCj4+Pj4+IEkgdHJpZWQgdG8gc2VhcmNoIGZvciBu ZXdlciBtZXNzYWdlcyBleHBsYWluaW5nIHRoZSBpc3N1ZSwgaG93ZXZlciBhcwo+Pj4+PiBmYXIg YXMgSSBjYW4gdGVsbCwgdGhlIHRocmVhZCBlbmRzIGluIEp1bmUgMjAyMCB3aXRoIG5vIHNvbHV0 aW9uCj4+Pj4+IGF2YWlsYWJsZS4KPj4+Pj4KPj4+Pj4gVGhlcmVmb3JlLCBJIGtpbmRseSB3YW50 IHRvIGFzayBpZiB0aGVyZSBpcyBhbnkgd29ya2Fyb3VuZCBhdmFpbGFibGUKPj4+Pj4gdG8gcmUt ZW5hYmxlIDVHSHogY2hhbm5lbHMgaW4gQVAgbW9kZSBmb3IgbXkgY2FyZD8gKGV4cGVjdCBzdGlj a2luZyB0bwo+Pj4+PiBhIHByZS01LjYga2VybmVsIG9yIG1hbnVhbGx5IHBhdGNoaW5nIGFuZCBy ZWNvbXBpbGluZyBhdGgpCj4+Pj4KPj4+PiBBZnRlciBKdW5lIDIwMjAgdGhlcmUgd2VyZSBvdGhl ciB1c2VycyBhbHNvIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlCj4+Pj4gKHNlZQo+Pj4+IGUuZy4s Cj4+Pj4gaHR0cHM6Ly9saXN0cy5pbmZyYWRlYWQub3JnL3BpcGVybWFpbC9hdGgxMGsvMjAyMS1B dWd1c3QvMDEyODAyLmh0bWwpLgo+Pj4+IFVzZXJzIHdlcmUgY29tcGxhaW5pbmcgdGhhdCB0aGlz IGNoYW5nZSB3YXMgdG9vIHJlc3RyaWN0aXZlIHNpbmNlIGl0Cj4+Pj4gbWVhbnQgdGhhdCB0aGUg aW50ZXJzZWN0aW9uIG9mIHJlc3RyaWN0aW9ucyBmb3IgcmVnZG9tYWlucyAweDAwLCAweDY0LAo+ Pj4+IFVTLCBhbmQgdGhlaXIgbG9jYWwgZG9tYWluLCB0b2dldGhlciB3aXRoIGEgY3VtdWxhdGl2 ZSBtb2RlIG9mIGFwcGx5aW5nCj4+Pj4gdGhlc2UgY29uc3RyYWludHMgbWVhbnQgdGhhdCwgaW4g cHJhY3RpY2UsIHRoZXkgd291bGQgbm90IGJlIGFibGUgdG8KPj4+PiB1c2UKPj4+PiB0aGVpciB3 b3JsZCBkb21haW4gY2FyZHMgYW55bW9yZSBhcyBBUHMgaW4gdGhlIDVHSHogYmFuZCwgZm9yIGNl cnRhaW4KPj4+PiByZWdkb21haW5zIHdoZXJlIHRoZXkgd2VyZSBsb2NhdGVkLgo+Pj4+Cj4+Pj4g QW5kIHNldmVyYWwgcGVvcGxlIHBpbnBvaW50ZWQgdGhlIGV4YWN0IHNvdXJjZSBjaGFuZ2VzIHJl c3BvbnNpYmxlIGZvcgo+Pj4+IHRoaXMuIEluIG15IGNhc2UsIEkgZW5kZWQgdXAgYXBwbHlpbmcg dGhlIGF0dGFjaGVkIHBhdGNoLCB0aGF0IGp1c3QKPj4+PiBsb2FkcyB0aGUgcGFyYW1ldGVycyBm b3IgdGhlIHJlZ2RvbWFpbiB0aGF0IEknbSBpbnRlcmVzdGVkIGluCj4+Pj4gKENUUllfUE9SVFVH QUwpLiBJJ20gbm90IGluIHRoZSBVUzsgYW5kIEkgY2FyZSBmb3IgdGhlaXIgcmVndWxhdG9yeQo+ Pj4+IHJlc3RyaWN0aW9ucyBhcyBtdWNoIGFzIHRoZXkgYXJlIGludGVyZXN0ZWQgaW4gbWluZS4K Pj4+Pgo+Pj4+IFNvIEkgdGhpbmsgdGhhdCB5b3UgbWlnaHQgYmUgYWJsZSB0byB1c2UgdGhlIGF0 dGFjaGVkIGNoYW5nZXMsIHdpdGggdGhlCj4+Pj4gc3BlY2lmaWMgQ1RSWV94eHggcGFyYW1ldGVy IHN1aXRhYmxlIGZvciB5b3VyIGNhc2UuIEFuZCB0aGVuIHJlY29tcGlsZQo+Pj4+IHRoZSByZXNw ZWN0aXZlIERlYmlhbiBrZXJuZWwgcGFja2FnZSwgd2hpY2ggdGFrZXMgYSBsb3Qgb2YgQ1BVIGlm IHlvdQo+Pj4+IGp1c3QgcmVjb21waWxlIHRoZSB3aG9sZSBwYWNrYWdlLiBMZXQgbWUga25vdyBp ZiB5b3UgbmVlZCBpbnN0cnVjdGlvbnMuCj4+Pj4KPj4+PiBBIG1vcmUgcm9idXN0IG9wdGlvbiB3 b3VsZCBiZSB0byBnbyB0aGUgT3BlbldSVCB3YXksIGFuZCB1c2UgdGhlaXIKPj4+PiBwYXRjaGVz IHRvIG1ha2UgdGhpcyBjb3VudHJ5IHNlbGVjdGlvbiBhIHBhcmFtZXRlciBmb3IgdGhlIGtlcm5l bAo+Pj4+IG1vZHVsZS4gVGhpcyB3YXksIHlvdSB3b3VsZCBqdXN0IHJlbG9hZCB0aGUga2VybmVs IG1vZHVsZSB0byBjaGFuZ2UKPj4+PiB0byBhCj4+Pj4gbmV3IHJlZ2RvbWFpbiwgc3ViamVjdCB0 byB0aGUgcmVzdHJpY3Rpb25zIG9mIHlvdXIgaGFyZHdhcmUgLyBmaXJtd2FyZS4KPj4+PiBJIGhh dmUgbm90IGxvb2tlZCBpbnRvIHRoYXQuIFBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgaXNvbGF0 ZSB0aGVzZQo+Pj4+IHBhdGNoZXMuCj4+Pj4KPj4+PiBJbiBhbnkgY2FzZSBpdCBzZWVtcyBkaWZm aWN1bHQgdG8gZXNjYXBlIGEga2VybmVsIHJlY29tcGlsZSwgZHVlIHRvCj4+Pj4gdGhpcwo+Pj4+ IHNtYWxsLCBlbnRpcmVseSBsZWdpdGltYXRlLCB5ZXQgcmVtYXJrYWJsZSBkZWNpc2lvbiBieSB0 aGUgZHJpdmVyCj4+Pj4gbWFpbnRhaW5lcnMuCj4+Pgo+Pj4gVGhpcyBpcyBhIHJlZ3Jlc3Npb24g ZHVlIHRvIDJkYzAxNjU5OWNmYSAoImF0aDogYWRkIHN1cHBvcnQgZm9yIHNwZWNpYWwKPj4+IDB4 MCByZWd1bGF0b3J5IGRvbWFpbiIpIHRoYXQgc2VlbXMgdG8gYWZmZWN0IHF1aXRlIGEgZmV3IHVz ZXJzLCBidXQKPj4+IGFmYWljcyB3YXMgbmV2ZXIgcHJvcGVybHkgYWRkcmVzc2VkLiBJIGZ1bGx5 IHVuZGVyc3RhbmQgdGhhdCB0aGlzIG1pZ2h0Cj4+PiBiZSBhIHNwZWNpYWwgY2FzZSB3aGVyZSBM aW51cycgIm5vIHJlZ3Jlc3Npb25zIiBydWxlIGNhbid0IGJlIHNpbXBseQo+Pj4gYXBwbGllZC4K Pj4KPj4gWWVzLCB0aGlzIGlzIGEgdHJpY2t5IHByb2JsZW0gYW5kIEkgYW0gdGFraW5nIGEgc2Vj b25kIGxvb2sgYXQgdGhpcy4KPj4gUmVndWxhdG9yeSBydWxlcyBhcmUgY29tcGxpY2F0ZWQgYW5k IHdlIGRvIG5vdCB3YW50IHRvIGJyZWFrIHRoZW0gaW4gYW55Cj4+IGNpcmN1bXN0YW5jZS4KPj4K Pj4gSSBzZWUgdHdvIHdheXMgdG8gd29ya2Fyb3VuZCB0aGlzOgo+Pgo+PiAxKSBjYWxpYnJhdGUg eW91ciBib2FyZCB3aXRoIGEgY29ycmVjdCBjb3VudHJ5IGNvZGUgKHdoaWNoIGlzIGltcG9zc2li bGUKPj4gwqAgZm9yIGFuIGF2ZXJhZ2UgdXNlcikKPj4KPj4gMikgdXNlIDIuNCBHSHogYmFuZAo+ Pgo+Pj4gQnV0IGlzbid0IHRoZXJlIHNvbWUgd2F5IHRvIHByb3ZpZGUgdXNlcnMgd2l0aCBhIHNv bHV0aW9uIHRoYXQgZG9lc24ndAo+Pj4gZm9yY2UgdXNlcnMgdG8gY29tcGlsZSBhIG1vZHVsZSBv ciBhIGtlcm5lbD8gTGlrZSBhIG1vZHVsZS1wYXJhbWV0ZXIKPj4+IHRoYXQgb25seSB3b3JrcyBp ZiB0aGUgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGNvZGUgaW4gdGhlIEVFUFJPTSBpcyBlbXB0eQo+ Pj4gKGFzIGFwcGFyZW50bHkgdXNlZCBieSBPcGVuV1JUPykuIFllcywgbW9kdWxlIHBhcmFtZXRl cnMgYXJlIG5vcm1hbGx5IGEKPj4+IGJhZCBpZGVhLCBidXQgdGhpcyBjYXNlIGl0IG1pZ2h0IGJl IGEgc2l0dWF0aW9uIHdoZXJlIGl0J3MgdGhlIGJlc3QKPj4+IHNvbHV0aW9uLgo+Pgo+PiBJIGRv bid0IHRoaW5rIHNldHRpbmcgdGhlIGNvdW50cnkgY29kZSB2aWEgYSBtb2R1bGUgcGFyYW1ldGVy IHdvdWxkIGJlCj4+IGFjY2VwdGFibGUgZm9yIHRoZSBhdXRob3JpdGllcywgbW9yZSBpbmZvIGhl cmU6Cj4+Cj4+IGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMv cmVndWxhdG9yeQo+IAo+IFRoZSBpc3N1ZSBpbnZvbHZlcyBmaW5kaW5nIGEgcmVhc29uYWJsZSBj b21wcm9taXNlIGJldHdlZW4gcmVsYXRpdmUKPiBpbmNvbnZlbmllbmNlcywgZ2l2ZW4gdGhlIHBl cnNwZWN0aXZlcyBvZiBib3RoIGRldmVsb3BlcnMgYW5kIHVzZXJzLiBBcwo+IGltcGxlbWVudGVk IGN1cnJlbnRseSwgdGhlIHJlc3RyaWN0aW9uIHNlZW1zIHRvIGFmZmVjdCBib3RoIGF0aDlrIGFu ZAo+IGF0aDEwayAoYW5kIHByb2JhYmx5IGF0aDExayAtLSBJIGhhdmUgbm90IHRyaWVkIGl0LCBh bmQgZnJhbmtseSB3aXRoIHRoZQo+IGN1cnJlbnQgc3RhdHVzLCBJJ20gbm90IGVhZ2VyIHRvIGRv IGl0KSwgYnV0IG9ubHkgd2hlbiB1c2VycyB0cnkgdG8gcnVuCj4gYSA1IEdIeiBBUC4gVGhpcyBp cyBzdGlsbCByZWFzb25hYmxlIChhbmQgbGVnYWwpIHVzZSwgYWx0aG91Z2ggbm90Cj4gd2l0aG91 dCBtYW55IHJlc3RyaWN0aW9ucy4gT3RoZXIgZHJpdmVycyAoZS5nLiwgaXdsd2lmaSkgYXJlIG11 Y2ggbW9yZQo+IHJlc3RyaWN0aXZlIHJlbGF0aXZlIHRvIHRoaXMsIGJ1dCBhdCBsZWFzdCB0aGV5 IGdlbnVpbmVseSBoYXZlIG1hZGUgaXQKPiBjb21wbGV0ZWx5IGNsZWFyIGZyb20gdGhlIGJlZ2lu bmluZy4KPiAKPiBBIGNvbW1vbiBwb2ludCBvZiB0aGUgcHJldmlvdXMgbWVzc2FnZXMgd2FzIHRo YXQsIGFmdGVyIHRoZXNlIGxhc3QKPiBjaGFuZ2VzLCB0aGUgYm9hcmRzIHdpdGggdGhlIDB4MDAg ZG9tYWluIGluIHRoZSBFRVBST00gd2VyZSBzdWNjZXNzaXZlbHkKPiBpbml0aWFsaXplZCB3aXRo IHRoZSAweDY0IGFuZCBsYXRlciB3aXRoIFVOSVRFRF9TVEFURVMgZG9tYWlucyBieSB0aGUKPiBk cml2ZXIuIEluIHByYWN0aWNlIHRoaXMgcHJldmVudGVkIHRoZWlyIHVzZSBhcyBhbiBBUCB3aGVu LCBsYXRlciBpbgo+IHVzZXJzcGFjZSwgdGhlIHVzZXIgdHJpZWQgdG8gZGVjbGFyZSBhIDNyZCBs b2NhbCByZWdkb21haW4uIE15Cj4gc3VnZ2VzdGlvbiBoZXJlIHdvdWxkIGJlIHRvIGF2b2lkIHRo aXMgZG91YmxlIGludGVycHJldGF0aW9uIG9mIHdoYXQKPiBkZWZhdWx0IGluaXRpYWxpemF0aW9u IHdvdWxkIGJlIGFwcHJvcHJpYXRlLiBFaXRoZXIga2VlcCB0aGUgb2xkCj4gYmVoYXZpb3IgKFVO SVRFRF9TVEFURVMpIHdoaWNoIGxpbWl0ZWQgYnV0IGRpZCBub3Qgb3JpZ2luYWxseSBwcmV2ZW50 ZWQKPiB0aGUgQVAgdXNhZ2UsIG9yIHJlcGxhY2UgaXQgY29tcGxldGVseSB3aXRoIHRoZSB1cGRh dGVkIGludGVycHJldGF0aW9uCj4gb2Ygd2hhdCdzIGFwcGxpY2FibGUgdG8gdGhpcyBjYXNlICgw eDY0KTsgYnV0IHBsZWFzZSBkb24ndCBkbyBib3RoIGJ5Cj4gZGVmYXVsdCwgb3Igd2Ugd2lsbCBi ZSBpbiB0aGUgY3VycmVudCBzaXR1YXRpb24uIE90aGVyIHVzZXJzIGhhdmUgYXNrZWQKPiBmb3Ig dGhpcyBiZWZvcmUsIGFuZCB0aGlzIHNvcnQgb2YgY2xhcmlmaWNhdGlvbiBzZWVtcyB0byBiZSB0 aGUgbWluaW11bQo+IHRvIGNvbnNpZGVyIGF0IHRoaXMgcG9pbnQsIGlmIGFueXRoaW5nIGlzIHRv IGJlIGNvbnNpZGVyZWQuCj4gCj4gSWYgdGhpcyBsaW1pdGluZyBkb3VibGUgaW5pdGlhbGl6YXRp b24gaXMgYWxyZWFkeSBhY2hpZXZhYmxlIGVudGlyZWx5Cj4gdGhyb3VnaCB1c2VyIGNvbmZpZ3Vy YXRpb24gb2YgZGVmYXVsdCBkaXN0cmlidXRpb24ga2VybmVscywgcGxlYXNlCj4gZXhjdXNlIG15 IGxhY2sgb2Yga25vd2xlZGdlLiBJbiB0aGlzIGNhc2UsIGp1c3QgZG9jdW1lbnRpbmcgdGhpcyBi ZXR0ZXIKPiBjb3VsZCBhbHNvIGhlbHAgb3RoZXIgdXNlcnMuCj4gCj4gQmVzaWRlcyB0aGlzIGNv bnNpc3RlbnQgInNhZmUiIGluaXRpYWxpemF0aW9uLCBmb3IgdXNlcnMgd2l0aCBzcGVjaWFsCj4g Y2FzZXMgdGhlcmUncyBhbHdheXMgdGhlIG9wdGlvbnMgb2YgZWl0aGVyIHByb3ZpZGluZyBhbHRl cm5hdGl2ZSBDUkRBcwo+IG9yIHBhdGNoaW5nIGFuZCByZWNvbXBpbGluZyB0aGUgZHJpdmVyLiBU aGlzIGlzIGEgbWF0dGVyIG9mIHJlbGF0aXZlCj4gaW5jb252ZW5pZW5jZXM7IGFzIGxvbmcgYXMg dGhleSByZW1haW4gZmVhc2libGUsIGl0J3MgYWx3YXlzIGEgd2VpZ2h0aW5nCj4gaXNzdWUuCj4g Cj4gVGhhbmtzIGZvciB5b3VyIGdvb2Qgd29yay4gUmVnYXJkcywKPiAKPiBOdW5vLgo+IAo+IAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYXRoMTBrIG1h aWxpbmcgbGlzdAphdGgxMGtAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2F0aDEwawo=