From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4C9EB1CA81 for ; Wed, 22 Jan 2025 01:04:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737507848; cv=none; b=pmrBM7KG7QOUWZVfOsr+ndoCM07s4nLry1ckGRWw6RdY/CZFWP6/SZH4UMCEu8Mjlkbu0NZefxmUdPP+QwknzGkKjUW00lnfJX1xamRv+k5JGYcS2esBXy2mn53uBSbYNQbiLdwFeGCJtFr+JRTMo8RT9G78+mEIR9x8Bogap88= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737507848; c=relaxed/simple; bh=fBMEEQrP8cCyPVJBx+8XOjAmMFlhjYXlOqE8udqGu/8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=trxlSg+AMXByKvfp8GWgW1Vqy98ee7HjDUdg5d1uL/MQwTniaZhiMxpJVMK14kz0kFGkPUL7UKb0Gm0i2CctpoJDOxvA2YNe1inRFZsgdg42NLUPXEYBEAKYPkozUWPwrcvGd3xRPGrVIpOLWYtw8vV3KR1TVdUbA4E5Z7HXBaw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=WEy78DRH; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="WEy78DRH" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2178115051dso117163755ad.1 for ; Tue, 21 Jan 2025 17:04:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1737507846; x=1738112646; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=HGAInSW7+q0vU97QD0HUaaeZu0zheatXMugXZrnQnto=; b=WEy78DRHeUvxY7t7PcEUsDBI+b9ZIEAFetH3Kd4q9ZhSoY1zzMJgqqsPCOhqIuYVnp OQYlr9Tq9id6pcfECpP3HDdY3eQdvpcLjwjjRMBGxVSX6a4vnJ5wZ/hlXE82E2h/DUM9 oUs3lrYctW5FdR7p7zMcn6zgStgomoKIMikNcJCamMup+JWjffjhmtxylVejiRmJF8Y1 my8MShAJ8KwYCxGUdiwgGwIzza38fC95+BnBhbELCia2LSoZHEYfl3Uc01ltx1f8oVwq CFqMB269e2Ms0IxzzVf5NrsQ2JscqGCg05/J6LcghGHM/zcgatSM2WhaQU4lppNOCKa4 W8aQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737507846; x=1738112646; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=HGAInSW7+q0vU97QD0HUaaeZu0zheatXMugXZrnQnto=; b=BzSOFi8qGWNU21d9BSb7bzv4t2Kk82HpyNraLLON+HcKYNlWaBoZYa+ol2MWxrVasq CkP4HosT+2b21ECGiTCwWPvwgwn7z2BZFuoATcBf8mqjiHhr0bqgYnC8iDUuEseSHv8Q N5vxPfXQv5AhgUk5N4UG+AD4RRBEYdrKg5F9ix7hGj8ue5YF7pHufI+eNepgKZQaSKnw R1arxUH2SxXpdjsd/j2bBjjjxE8grC9+l/63+6G1hryLErJczJDxJgJEPExxdhm+C5VX UPF/WSt9fVeiJr+VRPQ1/1w5s5GgT9/gAvNDDWw17wta0hHY7HL/+8ct6bTazJfv5CWu PAcg== X-Forwarded-Encrypted: i=1; AJvYcCUNjb3Vmv7OIAOCo8pQVSU6XH1+KE4MOJbFMdLSu0MJidJt5lphFXuO/T2tOsuEOA57ZwI=@vger.kernel.org X-Gm-Message-State: AOJu0Yz1QCeoSs07Jq8qVebMvORdn1105frgKXdYU0Vyj6OXKJwC4Ybv Eeeiz3ktFDbt3+l8oELl3PD3oFtITQI+LIOe8Mn2LGKfuKBKqoVIlsFLdwM8BVZ67dMtOwKnEMx d/w== X-Google-Smtp-Source: AGHT+IH6F+XmsAOl9kzgOVOxBLRRXT62oJJbonrrKhR+qzEndDJ3UWVtcgPMx5PJJKXl4IX7nvimBDDp9aQ= X-Received: from pfau14.prod.google.com ([2002:a05:6a00:aa8e:b0:72d:b2a2:bed7]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:6088:b0:72a:a9b5:ed91 with SMTP id d2e1a72fcca58-72daf99ed03mr26365241b3a.13.1737507845610; Tue, 21 Jan 2025 17:04:05 -0800 (PST) Date: Tue, 21 Jan 2025 17:04:04 -0800 In-Reply-To: Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250114175143.81438-1-vschneid@redhat.com> <20250114175143.81438-23-vschneid@redhat.com> Message-ID: Subject: Re: [PATCH v4 22/30] context_tracking: Exit CT_STATE_IDLE upon irq/nmi entry From: Sean Christopherson To: Frederic Weisbecker Cc: Valentin Schneider , linux-kernel@vger.kernel.org, x86@kernel.org, virtualization@lists.linux.dev, linux-arm-kernel@lists.infradead.org, loongarch@lists.linux.dev, linux-riscv@lists.infradead.org, linux-perf-users@vger.kernel.org, xen-devel@lists.xenproject.org, kvm@vger.kernel.org, linux-arch@vger.kernel.org, rcu@vger.kernel.org, linux-hardening@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, bpf@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, Juergen Gross , Ajay Kaher , Alexey Makhalov , Russell King , Catalin Marinas , Will Deacon , Huacai Chen , WANG Xuerui , Paul Walmsley , Palmer Dabbelt , Albert Ou , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , Peter Zijlstra , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Boris Ostrovsky , Josh Poimboeuf , Pawan Gupta , Paolo Bonzini , Andy Lutomirski , Arnd Bergmann , "Paul E. McKenney" , Jason Baron , Steven Rostedt , Ard Biesheuvel , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Juri Lelli , Clark Williams , Yair Podemsky , Tomas Glozar , Vincent Guittot , Dietmar Eggemann , Ben Segall , Mel Gorman , Kees Cook , Andrew Morton , Christoph Hellwig , Shuah Khan , Sami Tolvanen , Miguel Ojeda , Alice Ryhl , "Mike Rapoport (Microsoft)" , Samuel Holland , Rong Xu , Nicolas Saenz Julienne , Geert Uytterhoeven , Yosry Ahmed , "Kirill A. Shutemov" , "Masami Hiramatsu (Google)" , Jinghao Jia , Luis Chamberlain , Randy Dunlap , Tiezhu Yang Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 22, 2025, Frederic Weisbecker wrote: > Le Tue, Jan 14, 2025 at 06:51:35PM +0100, Valentin Schneider a =C3=A9crit= : > > ct_nmi_{enter, exit}() only touches the RCU watching counter and doesn'= t > > modify the actual CT state part context_tracking.state. This means that > > upon receiving an IRQ when idle, the CT_STATE_IDLE->CT_STATE_KERNEL > > transition only happens in ct_idle_exit(). > >=20 > > One can note that ct_nmi_enter() can only ever be entered with the CT s= tate > > as either CT_STATE_KERNEL or CT_STATE_IDLE, as an IRQ/NMI happenning in= the > > CT_STATE_USER or CT_STATE_GUEST states will be routed down to ct_user_e= xit(). >=20 > Are you sure? An NMI can fire between guest_state_enter_irqoff() and > __svm_vcpu_run(). Heh, technically, they can't. On SVM, KVM clears GIF prior to svm_vcpu_ent= er_exit(), and restores GIF=3D1 only after it returns. I.e. NMIs are fully blocked _o= n SVM_. VMX unfortunately doesn't provide GIF, and so NMIs can arrive at any time. = It's infeasible for software to prevent them, so we're stuck with that. [In the= ory, KVM could deliberately generate an NMI and not do IRET so that NMIs are blo= cked, but that would be beyond crazy]. > And NMIs interrupting userspace don't call enter_from_user_mode(). In fac= t > they don't call irqentry_enter_from_user_mode() like regular IRQs but > irqentry_nmi_enter() instead. Well that's for archs implementing common e= ntry > code, I can't speak for the others. >=20 > Unifying the behaviour between user and idle such that the IRQs/NMIs exit= the > CT_STATE can be interesting but I fear this may not come for free. You wo= uld > need to save the old state on IRQ/NMI entry and restore it on exit. >=20 > Do we really need it? >=20 > Thanks. 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 13E87C02182 for ; Wed, 22 Jan 2025 01:04:16 +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:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=Cg7rLAaG8qFRQMQm9sqWDnjfXuRtwZRX5LX9R0Fmf/8=; b=D17h3oEzZNuIVK620SHRLnWBri iQ2t6ebfzp1DZrQjmjPpAClBOaIqmbOy39IjaZ/DsvQ4Td4mcDrBCLEuwNNfKZodVKqsUdCS1d/2s LAufoDh69C2cHD6LdNLJQVGTMhjppO23xfQmuh8TQrdFjIbwKaNpB7o+n8Rs17mHs4IdzWUJe2Jqb lcsyiogdu1sAextgOy5tCIc7kKlfCzvEaAxRy/WSZTSf5t9J+PJQstVzF+VE9YwGIMnmYzPkvSiev WCppqKMVIrqBhFzdmNo/X6/nIUvnhy0YUUUsUQCu0BdUftiMX1m0tztdwzNMpRbQvAFZRwWZ8aEAT QsWZvQKA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1taPAA-000000098aX-2QGe; Wed, 22 Jan 2025 01:04:10 +0000 Received: from mail-pl1-x64a.google.com ([2607:f8b0:4864:20::64a]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1taPA6-000000098Ya-3waC for linux-riscv@lists.infradead.org; Wed, 22 Jan 2025 01:04:09 +0000 Received: by mail-pl1-x64a.google.com with SMTP id d9443c01a7336-2163dc0f5dbso122788405ad.2 for ; Tue, 21 Jan 2025 17:04:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1737507846; x=1738112646; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=HGAInSW7+q0vU97QD0HUaaeZu0zheatXMugXZrnQnto=; b=Bhvb220YA9Fp/M7mLaExeFxWWsvYqEDrbluIN0t9WhmcmRCnGaJynh7nQwAQpTigdD xfDaxDfRBB/267oNho4xieeMV9xtHO/AJxXyZ2lGIYKtH+rlcMjqBlZXn61obVoC93qp DnBPyRgYLCsOrKiuoDdUEz49d1Fu87FAYtnILCO34qwk8EzeDDiG2jYVlDi8BrzmKL0w hZ1D/x9XX03Do8hU++2TPZfGIt0ASf/L6SXAdSCvVT4pgdMJ6j9y8K18M5Nsp3Tqtm8j KukN/8ahEqAaPaa2+cDui6yoVeSmlq7ZE1508p0cjBR1NfeDW/Jv0FWdeK30J4hEjv8I 8jBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737507846; x=1738112646; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=HGAInSW7+q0vU97QD0HUaaeZu0zheatXMugXZrnQnto=; b=KlPIxIWTarcK/2MMG3l3PNGNgcRQNi/jJADxxvnlqFnabs05DtOpK17BE/pDHKQCmR L83l5Rcu/SHrXjOvFHUmIGHGfqYvX+BB7mm+q2wtqeEiKlU6VmxwKxlmRAUiE0RvxobA 4bC9tiSeXLPXm0kTV+oGF7+jHfXH1sai9al9dc7EnaS4kBnihDfLFMH8/cmY+uQ+xRy3 1RSD/AZnlqGwKWgpxCkqNRSiMNYEGPoASJmuthTa2gKRuZyJ39AoT8O8roPZd7ZOkncU wnPSa5R5sjcfEERb8F0Yt/oLJtJAeDP0NDYvEkTIIg1YnDT2Pk8JE56o3pfSJoH/Vux9 aYVQ== X-Forwarded-Encrypted: i=1; AJvYcCX1jBiIYpx8YmxiW3FDewOEaOlDu8Wu1NouHD5XcWZSJqJlviRurDkNCSPVKQqYs27QG/F6uRQESKljyg==@lists.infradead.org X-Gm-Message-State: AOJu0Yw4LKxONSN+AReHawsxWehXA0UMFM9/S37wNjIKypPwgm2RvzUr 4gizp+SzUcgPUMXSQCJ8IL5NlRV44O8w5+we9NKs4/yDNACwRP11tD1kSmP4tIPKWi6VKwzO5Eh fXA== X-Google-Smtp-Source: AGHT+IH6F+XmsAOl9kzgOVOxBLRRXT62oJJbonrrKhR+qzEndDJ3UWVtcgPMx5PJJKXl4IX7nvimBDDp9aQ= X-Received: from pfau14.prod.google.com ([2002:a05:6a00:aa8e:b0:72d:b2a2:bed7]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:6088:b0:72a:a9b5:ed91 with SMTP id d2e1a72fcca58-72daf99ed03mr26365241b3a.13.1737507845610; Tue, 21 Jan 2025 17:04:05 -0800 (PST) Date: Tue, 21 Jan 2025 17:04:04 -0800 In-Reply-To: Mime-Version: 1.0 References: <20250114175143.81438-1-vschneid@redhat.com> <20250114175143.81438-23-vschneid@redhat.com> Message-ID: Subject: Re: [PATCH v4 22/30] context_tracking: Exit CT_STATE_IDLE upon irq/nmi entry From: Sean Christopherson To: Frederic Weisbecker Cc: Valentin Schneider , linux-kernel@vger.kernel.org, x86@kernel.org, virtualization@lists.linux.dev, linux-arm-kernel@lists.infradead.org, loongarch@lists.linux.dev, linux-riscv@lists.infradead.org, linux-perf-users@vger.kernel.org, xen-devel@lists.xenproject.org, kvm@vger.kernel.org, linux-arch@vger.kernel.org, rcu@vger.kernel.org, linux-hardening@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, bpf@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, Juergen Gross , Ajay Kaher , Alexey Makhalov , Russell King , Catalin Marinas , Will Deacon , Huacai Chen , WANG Xuerui , Paul Walmsley , Palmer Dabbelt , Albert Ou , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , Peter Zijlstra , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Boris Ostrovsky , Josh Poimboeuf , Pawan Gupta , Paolo Bonzini , Andy Lutomirski , Arnd Bergmann , "Paul E. McKenney" , Jason Baron , Steven Rostedt , Ard Biesheuvel , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Juri Lelli , Clark Williams , Yair Podemsky , Tomas Glozar , Vincent Guittot , Dietmar Eggemann , Ben Segall , Mel Gorman , Kees Cook , Andrew Morton , Christoph Hellwig , Shuah Khan , Sami Tolvanen , Miguel Ojeda , Alice Ryhl , "Mike Rapoport (Microsoft)" , Samuel Holland , Rong Xu , Nicolas Saenz Julienne , Geert Uytterhoeven , Yosry Ahmed , "Kirill A. Shutemov" , "Masami Hiramatsu (Google)" , Jinghao Jia , Luis Chamberlain , Randy Dunlap , Tiezhu Yang X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250121_170406_969974_7024F272 X-CRM114-Status: GOOD ( 20.73 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gV2VkLCBKYW4gMjIsIDIwMjUsIEZyZWRlcmljIFdlaXNiZWNrZXIgd3JvdGU6Cj4gTGUgVHVl LCBKYW4gMTQsIDIwMjUgYXQgMDY6NTE6MzVQTSArMDEwMCwgVmFsZW50aW4gU2NobmVpZGVyIGEg w6ljcml0IDoKPiA+IGN0X25taV97ZW50ZXIsIGV4aXR9KCkgb25seSB0b3VjaGVzIHRoZSBSQ1Ug d2F0Y2hpbmcgY291bnRlciBhbmQgZG9lc24ndAo+ID4gbW9kaWZ5IHRoZSBhY3R1YWwgQ1Qgc3Rh dGUgcGFydCBjb250ZXh0X3RyYWNraW5nLnN0YXRlLiBUaGlzIG1lYW5zIHRoYXQKPiA+IHVwb24g cmVjZWl2aW5nIGFuIElSUSB3aGVuIGlkbGUsIHRoZSBDVF9TVEFURV9JRExFLT5DVF9TVEFURV9L RVJORUwKPiA+IHRyYW5zaXRpb24gb25seSBoYXBwZW5zIGluIGN0X2lkbGVfZXhpdCgpLgo+ID4g Cj4gPiBPbmUgY2FuIG5vdGUgdGhhdCBjdF9ubWlfZW50ZXIoKSBjYW4gb25seSBldmVyIGJlIGVu dGVyZWQgd2l0aCB0aGUgQ1Qgc3RhdGUKPiA+IGFzIGVpdGhlciBDVF9TVEFURV9LRVJORUwgb3Ig Q1RfU1RBVEVfSURMRSwgYXMgYW4gSVJRL05NSSBoYXBwZW5uaW5nIGluIHRoZQo+ID4gQ1RfU1RB VEVfVVNFUiBvciBDVF9TVEFURV9HVUVTVCBzdGF0ZXMgd2lsbCBiZSByb3V0ZWQgZG93biB0byBj dF91c2VyX2V4aXQoKS4KPiAKPiBBcmUgeW91IHN1cmU/IEFuIE5NSSBjYW4gZmlyZSBiZXR3ZWVu IGd1ZXN0X3N0YXRlX2VudGVyX2lycW9mZigpIGFuZAo+IF9fc3ZtX3ZjcHVfcnVuKCkuCgpIZWgs IHRlY2huaWNhbGx5LCB0aGV5IGNhbid0LiAgT24gU1ZNLCBLVk0gY2xlYXJzIEdJRiBwcmlvciB0 byBzdm1fdmNwdV9lbnRlcl9leGl0KCksCmFuZCByZXN0b3JlcyBHSUY9MSBvbmx5IGFmdGVyIGl0 IHJldHVybnMuICBJLmUuIE5NSXMgYXJlIGZ1bGx5IGJsb2NrZWQgX29uIFNWTV8uCgpWTVggdW5m b3J0dW5hdGVseSBkb2Vzbid0IHByb3ZpZGUgR0lGLCBhbmQgc28gTk1JcyBjYW4gYXJyaXZlIGF0 IGFueSB0aW1lLiAgSXQncwppbmZlYXNpYmxlIGZvciBzb2Z0d2FyZSB0byBwcmV2ZW50IHRoZW0s IHNvIHdlJ3JlIHN0dWNrIHdpdGggdGhhdC4gIFtJbiB0aGVvcnksCktWTSBjb3VsZCBkZWxpYmVy YXRlbHkgZ2VuZXJhdGUgYW4gTk1JIGFuZCBub3QgZG8gSVJFVCBzbyB0aGF0IE5NSXMgYXJlIGJs b2NrZWQsCmJ1dCB0aGF0IHdvdWxkIGJlIGJleW9uZCBjcmF6eV0uCgo+IEFuZCBOTUlzIGludGVy cnVwdGluZyB1c2Vyc3BhY2UgZG9uJ3QgY2FsbCBlbnRlcl9mcm9tX3VzZXJfbW9kZSgpLiBJbiBm YWN0Cj4gdGhleSBkb24ndCBjYWxsIGlycWVudHJ5X2VudGVyX2Zyb21fdXNlcl9tb2RlKCkgbGlr ZSByZWd1bGFyIElSUXMgYnV0Cj4gaXJxZW50cnlfbm1pX2VudGVyKCkgaW5zdGVhZC4gV2VsbCB0 aGF0J3MgZm9yIGFyY2hzIGltcGxlbWVudGluZyBjb21tb24gZW50cnkKPiBjb2RlLCBJIGNhbid0 IHNwZWFrIGZvciB0aGUgb3RoZXJzLgo+IAo+IFVuaWZ5aW5nIHRoZSBiZWhhdmlvdXIgYmV0d2Vl biB1c2VyIGFuZCBpZGxlIHN1Y2ggdGhhdCB0aGUgSVJRcy9OTUlzIGV4aXQgdGhlCj4gQ1RfU1RB VEUgY2FuIGJlIGludGVyZXN0aW5nIGJ1dCBJIGZlYXIgdGhpcyBtYXkgbm90IGNvbWUgZm9yIGZy ZWUuIFlvdSB3b3VsZAo+IG5lZWQgdG8gc2F2ZSB0aGUgb2xkIHN0YXRlIG9uIElSUS9OTUkgZW50 cnkgYW5kIHJlc3RvcmUgaXQgb24gZXhpdC4KPiAKPiBEbyB3ZSByZWFsbHkgbmVlZCBpdD8KPiAK PiBUaGFua3MuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2 Cg==