Received: by 10.223.176.46 with SMTP id f43csp2501587wra; Thu, 25 Jan 2018 10:48:52 -0800 (PST) X-Google-Smtp-Source: AH8x226krKr0nLUCa0XwT/jMVCa7A82u6mmd7A9pF8n+YmMP1fILzBKi7Mm4b3qfOxxYl3rrcSFN X-Received: by 10.98.80.20 with SMTP id e20mr16747469pfb.148.1516906132690; Thu, 25 Jan 2018 10:48:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516906132; cv=none; d=google.com; s=arc-20160816; b=ptpXQwNE46Xktsf3jY7IQEjWeLDXgQ2MDOgEldwCKbkwUQJSf9FIu2dUP9c7P3dh0V z18vypCsxG6p25BmjITUwqjwVDdcnGFkktgF0Vo46CY+5xFuHwEtri4keWZfCGyqB3YJ CW4lCpJSYptPvu7ax3D++7ccc/KBcnOEw85olRFXgMSVohM5mWjwNoNBkmIFcEPgMVBm N8YT8cCPWvDYFOcaCzJg2NA1Ogm3bkJsyO/uDbTFNxyqG02fDphdOQQXwTJmu6Y1hkpB P50Ms8AUbvKAxTW8GNtYo0VKZ/NV6Y4C0fNohEFr9SiC9ghZFMWZLdtkiy6tcTIC5I1b 8l6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=ja7814FZmhBAIUt+Hi1vGDV+RkBkCdJgg/NFcWKirUY=; b=oquABNRUHKneLmrlZp5L+0ZLT+VS/CzIlCcPHD5L/NtHhRoEYTSGg9/9yYqxPp264r lsWrC2gKKs+sCa5JFRTwiNzlfpD0oBazVnVtB6WhHBsL1T9kyHUQFtJ9W8AAxkCXuPIa WdUGtgWpe5A5sK4PdsKzQ1JoxryH3TujLuxkMyAWsptdzEcGvrmGox5GwSMubIZlYAnF ecdG+3smDHSvmVdQ6R8425qhQXg6eHJRUHaU0YROViXVoyQUjyvNBVAjPyhFK7outTQ1 TYKc23OoWwJhaKH79mP9gznEZrkWzegwRX03DI2S57bjdhLJDhz7s9ZEaS4sqKUd559l 5oRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=ibX8+xAp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n10-v6si2353880plp.158.2018.01.25.10.48.38; Thu, 25 Jan 2018 10:48:52 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=ibX8+xAp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751234AbeAYSsH (ORCPT + 99 others); Thu, 25 Jan 2018 13:48:07 -0500 Received: from mail-it0-f67.google.com ([209.85.214.67]:40445 "EHLO mail-it0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750994AbeAYSsF (ORCPT ); Thu, 25 Jan 2018 13:48:05 -0500 Received: by mail-it0-f67.google.com with SMTP id 196so11026485iti.5 for ; Thu, 25 Jan 2018 10:48:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=ja7814FZmhBAIUt+Hi1vGDV+RkBkCdJgg/NFcWKirUY=; b=ibX8+xAppus0TCLjv81CNzQgt63okD6EXDoe3benkKpb2uGJySWST9O1AioeNCtrP4 rcDmtdvZZwlRFpxnilyVMK3fGSR8mhLU9inEPfyAhQ8zVXjB/v/lVcjrGUARcFdjaDCE hDFPPhOacoAGFhZl0i4qiAhrmIWWbWa889FQsCVV1n/wcsxAEq6lFInRDiW1ejjCdOe9 N1Exl+E5K5InzsVguEDG9GB5l25uNl25TknKz+z2kRaBgvpsbn35WkVKQiRjNzghoIn1 YdCFuXVNUbpw255oVss9PKFGx3JezNgPYjiYn3RIsq+WmtY/LvjO5jvEvr73CCUz0oyS 7wDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=ja7814FZmhBAIUt+Hi1vGDV+RkBkCdJgg/NFcWKirUY=; b=cfMfshV9o4/5ttNLa2sBbigVhadwv0f9QzpZUIWfgCbbOr93UyUNvkznJXW1ZX1HWH 6pgDaOuTchCdkazeGO9nfe9ain4T5AF2KxXnrq2kx6VfxrC6MexUioe3yIX4/6LkycPL aFsDhWurcH+tvFzoYBG0V7eABF1aAjb0uyxIaYCPBjQhBQ5bHb+ovnJjuwic87kNvf6w IeWXoWdB3BBuo0p/zzB4jCfjvJSBt/V3HG9BXZ2ZcO7ULRrVtNvaH94Ki4P9IFVuHFUf N8Nyt5V7H+8E18INVHrHw3BtHsLpGqKD3nAXmHbDuwdlekkBPj/fDv+LsKuoCH4S51sg axsA== X-Gm-Message-State: AKwxytcIBCKGxGWd5Bey7Z51WESH0EYDUoE2LX6xNJ2CFKLatT0PS7Wm TISMLCOyYkEW8ROaDUiEHIWdPst2Jq1xhR+956E= X-Received: by 10.36.47.5 with SMTP id j5mr13642902itj.123.1516906082531; Thu, 25 Jan 2018 10:48:02 -0800 (PST) MIME-Version: 1.0 Received: by 10.107.59.196 with HTTP; Thu, 25 Jan 2018 10:48:01 -0800 (PST) In-Reply-To: References: <503224b776b9513885453756e44bab235221124e.1516644136.git.luto@kernel.org> From: Linus Torvalds Date: Thu, 25 Jan 2018 10:48:01 -0800 X-Google-Sender-Auth: InxVL09lJj-RDSuz3gAyGH9ZsUo Message-ID: Subject: Re: [PATCH] x86/retpoline/entry: Disable the entire SYSCALL64 fast path with retpolines on To: Andy Lutomirski Cc: "the arch/x86 maintainers" , LKML , Greg Kroah-Hartman , Alan Cox , Jann Horn , Samuel Neves , Dan Williams , Kernel Hardening , Borislav Petkov Content-Type: multipart/mixed; boundary="001a1143ce483b5a5005639e381a" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --001a1143ce483b5a5005639e381a Content-Type: text/plain; charset="UTF-8" On Mon, Jan 22, 2018 at 10:55 AM, Linus Torvalds wrote: > > Honestly, I'd rather get rid of the fast-path entirely. Compared to > all the PTI mess, it's not even noticeable. So I looked at how that would be. Patch attached. Not really "tested", but I'm running the kernel with this patch now, and 'strace' etc works, and honestly, it seems very obvious. Also, code generation for 'do_syscall_64()' does not look horrible. In fact, it doesn't look all that much worse than the fast-path ever did. So the biggest impact of this is the extra register saves (SAVE_EXTRA_REGS) from setting up the full ptregs. And honestly, I hate how that stupid macro still uses "movq reg,off(%rsp)" instead of "pushq %reg". Considering the diffstat: 2 files changed, 2 insertions(+), 121 deletions(-) and how those 100+ lines are nasty assembly code, I do think we should just do it. Comments? Linus --001a1143ce483b5a5005639e381a Content-Type: text/plain; charset="US-ASCII"; name="patch.diff" Content-Disposition: attachment; filename="patch.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jcuupkb00 IGFyY2gveDg2L2VudHJ5L2VudHJ5XzY0LlMgICB8IDExNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jIHwgICA3 ICstLQogMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEyMSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TIGIvYXJjaC94ODYvZW50cnkv ZW50cnlfNjQuUwppbmRleCBmZjZmODAyMjYxMmMuLjY1ZjRkMjliZTY5YiAxMDA2NDQKLS0tIGEv YXJjaC94ODYvZW50cnkvZW50cnlfNjQuUworKysgYi9hcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5T CkBAIC0yNDEsODAgKzI0MSw2IEBAIEdMT0JBTChlbnRyeV9TWVNDQUxMXzY0X2FmdGVyX2h3ZnJh bWUpCiAKIAlUUkFDRV9JUlFTX09GRgogCi0JLyoKLQkgKiBJZiB3ZSBuZWVkIHRvIGRvIGVudHJ5 IHdvcmsgb3IgaWYgd2UgZ3Vlc3Mgd2UnbGwgbmVlZCB0byBkbwotCSAqIGV4aXQgd29yaywgZ28g c3RyYWlnaHQgdG8gdGhlIHNsb3cgcGF0aC4KLQkgKi8KLQltb3ZxCVBFUl9DUFVfVkFSKGN1cnJl bnRfdGFzayksICVyMTEKLQl0ZXN0bAkkX1RJRl9XT1JLX1NZU0NBTExfRU5UUll8X1RJRl9BTExX T1JLX01BU0ssIFRBU0tfVElfZmxhZ3MoJXIxMSkKLQlqbnoJZW50cnlfU1lTQ0FMTDY0X3Nsb3df cGF0aAotCi1lbnRyeV9TWVNDQUxMXzY0X2Zhc3RwYXRoOgotCS8qCi0JICogRWFzeSBjYXNlOiBl bmFibGUgaW50ZXJydXB0cyBhbmQgaXNzdWUgdGhlIHN5c2NhbGwuICBJZiB0aGUgc3lzY2FsbAot CSAqIG5lZWRzIHB0X3JlZ3MsIHdlJ2xsIGNhbGwgYSBzdHViIHRoYXQgZGlzYWJsZXMgaW50ZXJy dXB0cyBhZ2FpbgotCSAqIGFuZCBqdW1wcyB0byB0aGUgc2xvdyBwYXRoLgotCSAqLwotCVRSQUNF X0lSUVNfT04KLQlFTkFCTEVfSU5URVJSVVBUUyhDTEJSX05PTkUpCi0jaWYgX19TWVNDQUxMX01B U0sgPT0gfjAKLQljbXBxCSRfX05SX3N5c2NhbGxfbWF4LCAlcmF4Ci0jZWxzZQotCWFuZGwJJF9f U1lTQ0FMTF9NQVNLLCAlZWF4Ci0JY21wbAkkX19OUl9zeXNjYWxsX21heCwgJWVheAotI2VuZGlm Ci0JamEJMWYJCQkJLyogcmV0dXJuIC1FTk9TWVMgKGFscmVhZHkgaW4gcHRfcmVncy0+YXgpICov Ci0JbW92cQklcjEwLCAlcmN4Ci0KLQkvKgotCSAqIFRoaXMgY2FsbCBpbnN0cnVjdGlvbiBpcyBo YW5kbGVkIHNwZWNpYWxseSBpbiBzdHViX3B0cmVnc182NC4KLQkgKiBJdCBtaWdodCBlbmQgdXAg anVtcGluZyB0byB0aGUgc2xvdyBwYXRoLiAgSWYgaXQganVtcHMsIFJBWAotCSAqIGFuZCBhbGwg YXJndW1lbnQgcmVnaXN0ZXJzIGFyZSBjbG9iYmVyZWQuCi0JICovCi0jaWZkZWYgQ09ORklHX1JF VFBPTElORQotCW1vdnEJc3lzX2NhbGxfdGFibGUoLCAlcmF4LCA4KSwgJXJheAotCWNhbGwJX194 ODZfaW5kaXJlY3RfdGh1bmtfcmF4Ci0jZWxzZQotCWNhbGwJKnN5c19jYWxsX3RhYmxlKCwgJXJh eCwgOCkKLSNlbmRpZgotLkxlbnRyeV9TWVNDQUxMXzY0X2FmdGVyX2Zhc3RwYXRoX2NhbGw6Ci0K LQltb3ZxCSVyYXgsIFJBWCglcnNwKQotMToKLQotCS8qCi0JICogSWYgd2UgZ2V0IGhlcmUsIHRo ZW4gd2Uga25vdyB0aGF0IHB0X3JlZ3MgaXMgY2xlYW4gZm9yIFNZU1JFVDY0LgotCSAqIElmIHdl IHNlZSB0aGF0IG5vIGV4aXQgd29yayBpcyByZXF1aXJlZCAod2hpY2ggd2UgYXJlIHJlcXVpcmVk Ci0JICogdG8gY2hlY2sgd2l0aCBJUlFzIG9mZiksIHRoZW4gd2UgY2FuIGdvIHN0cmFpZ2h0IHRv IFNZU1JFVDY0LgotCSAqLwotCURJU0FCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSkKLQlUUkFDRV9J UlFTX09GRgotCW1vdnEJUEVSX0NQVV9WQVIoY3VycmVudF90YXNrKSwgJXIxMQotCXRlc3RsCSRf VElGX0FMTFdPUktfTUFTSywgVEFTS19USV9mbGFncyglcjExKQotCWpuegkxZgotCi0JTE9DS0RF UF9TWVNfRVhJVAotCVRSQUNFX0lSUVNfT04JCS8qIHVzZXIgbW9kZSBpcyB0cmFjZWQgYXMgSVJR cyBvbiAqLwotCW1vdnEJUklQKCVyc3ApLCAlcmN4Ci0JbW92cQlFRkxBR1MoJXJzcCksICVyMTEK LQlhZGRxCSQ2KjgsICVyc3AJLyogc2tpcCBleHRyYSByZWdzIC0tIHRoZXkgd2VyZSBwcmVzZXJ2 ZWQgKi8KLQlVTldJTkRfSElOVF9FTVBUWQotCWptcAkuTHBvcF9jX3JlZ3NfZXhjZXB0X3JjeF9y MTFfYW5kX3N5c3JldAotCi0xOgotCS8qCi0JICogVGhlIGZhc3QgcGF0aCBsb29rZWQgZ29vZCB3 aGVuIHdlIHN0YXJ0ZWQsIGJ1dCBzb21ldGhpbmcgY2hhbmdlZAotCSAqIGFsb25nIHRoZSB3YXkg YW5kIHdlIG5lZWQgdG8gc3dpdGNoIHRvIHRoZSBzbG93IHBhdGguICBDYWxsaW5nCi0JICogcmFp c2UoMykgd2lsbCB0cmlnZ2VyIHRoaXMsIGZvciBleGFtcGxlLiAgSVJRcyBhcmUgb2ZmLgotCSAq LwotCVRSQUNFX0lSUVNfT04KLQlFTkFCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSkKLQlTQVZFX0VY VFJBX1JFR1MKLQltb3ZxCSVyc3AsICVyZGkKLQljYWxsCXN5c2NhbGxfcmV0dXJuX3Nsb3dwYXRo CS8qIHJldHVybnMgd2l0aCBJUlFzIGRpc2FibGVkICovCi0Jam1wCXJldHVybl9mcm9tX1NZU0NB TExfNjQKLQotZW50cnlfU1lTQ0FMTDY0X3Nsb3dfcGF0aDoKIAkvKiBJUlFzIGFyZSBvZmYuICov CiAJU0FWRV9FWFRSQV9SRUdTCiAJbW92cQklcnNwLCAlcmRpCkBAIC0zOTMsNyArMzE5LDYgQEAg c3lzY2FsbF9yZXR1cm5fdmlhX3N5c3JldDoKIAkvKiByY3ggYW5kIHIxMSBhcmUgYWxyZWFkeSBy ZXN0b3JlZCAoc2VlIGNvZGUgYWJvdmUpICovCiAJVU5XSU5EX0hJTlRfRU1QVFkKIAlQT1BfRVhU UkFfUkVHUwotLkxwb3BfY19yZWdzX2V4Y2VwdF9yY3hfcjExX2FuZF9zeXNyZXQ6CiAJcG9wcQkl cnNpCS8qIHNraXAgcjExICovCiAJcG9wcQklcjEwCiAJcG9wcQklcjkKQEAgLTQyNCw0NyArMzQ5 LDYgQEAgc3lzY2FsbF9yZXR1cm5fdmlhX3N5c3JldDoKIAlVU0VSR1NfU1lTUkVUNjQKIEVORChl bnRyeV9TWVNDQUxMXzY0KQogCi1FTlRSWShzdHViX3B0cmVnc182NCkKLQkvKgotCSAqIFN5c2Nh bGxzIG1hcmtlZCBhcyBuZWVkaW5nIHB0cmVncyBsYW5kIGhlcmUuCi0JICogSWYgd2UgYXJlIG9u IHRoZSBmYXN0IHBhdGgsIHdlIG5lZWQgdG8gc2F2ZSB0aGUgZXh0cmEgcmVncywKLQkgKiB3aGlj aCB3ZSBhY2hpZXZlIGJ5IHRyeWluZyBhZ2FpbiBvbiB0aGUgc2xvdyBwYXRoLiAgSWYgd2UgYXJl IG9uCi0JICogdGhlIHNsb3cgcGF0aCwgdGhlIGV4dHJhIHJlZ3MgYXJlIGFscmVhZHkgc2F2ZWQu Ci0JICoKLQkgKiBSQVggc3RvcmVzIGEgcG9pbnRlciB0byB0aGUgQyBmdW5jdGlvbiBpbXBsZW1l bnRpbmcgdGhlIHN5c2NhbGwuCi0JICogSVJRcyBhcmUgb24uCi0JICovCi0JY21wcQkkLkxlbnRy eV9TWVNDQUxMXzY0X2FmdGVyX2Zhc3RwYXRoX2NhbGwsICglcnNwKQotCWpuZQkxZgotCi0JLyoK LQkgKiBDYWxsZWQgZnJvbSBmYXN0IHBhdGggLS0gZGlzYWJsZSBJUlFzIGFnYWluLCBwb3AgcmV0 dXJuIGFkZHJlc3MKLQkgKiBhbmQganVtcCB0byBzbG93IHBhdGgKLQkgKi8KLQlESVNBQkxFX0lO VEVSUlVQVFMoQ0xCUl9BTlkpCi0JVFJBQ0VfSVJRU19PRkYKLQlwb3BxCSVyYXgKLQlVTldJTkRf SElOVF9SRUdTIGV4dHJhPTAKLQlqbXAJZW50cnlfU1lTQ0FMTDY0X3Nsb3dfcGF0aAotCi0xOgot CUpNUF9OT1NQRUMgJXJheAkJCQkvKiBDYWxsZWQgZnJvbSBDICovCi1FTkQoc3R1Yl9wdHJlZ3Nf NjQpCi0KLS5tYWNybyBwdHJlZ3Nfc3R1YiBmdW5jCi1FTlRSWShwdHJlZ3NfXGZ1bmMpCi0JVU5X SU5EX0hJTlRfRlVOQwotCWxlYXEJXGZ1bmMoJXJpcCksICVyYXgKLQlqbXAJc3R1Yl9wdHJlZ3Nf NjQKLUVORChwdHJlZ3NfXGZ1bmMpCi0uZW5kbQotCi0vKiBJbnN0YW50aWF0ZSBwdHJlZ3Nfc3R1 YiBmb3IgZWFjaCBwdHJlZ3MtdXNpbmcgc3lzY2FsbCAqLwotI2RlZmluZSBfX1NZU0NBTExfNjRf UVVBTF8oc3ltKQotI2RlZmluZSBfX1NZU0NBTExfNjRfUVVBTF9wdHJlZ3Moc3ltKSBwdHJlZ3Nf c3R1YiBzeW0KLSNkZWZpbmUgX19TWVNDQUxMXzY0KG5yLCBzeW0sIHF1YWwpIF9fU1lTQ0FMTF82 NF9RVUFMXyMjcXVhbChzeW0pCi0jaW5jbHVkZSA8YXNtL3N5c2NhbGxzXzY0Lmg+Ci0KIC8qCiAg KiAlcmRpOiBwcmV2IHRhc2sKICAqICVyc2k6IG5leHQgdGFzawpkaWZmIC0tZ2l0IGEvYXJjaC94 ODYvZW50cnkvc3lzY2FsbF82NC5jIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jCmluZGV4 IDljMDk3NzVlNTg5ZC4uYzE3NmQyZmFiMWRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9lbnRyeS9z eXNjYWxsXzY0LmMKKysrIGIvYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jCkBAIC03LDE0ICs3 LDExIEBACiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c2Nh bGwuaD4KIAotI2RlZmluZSBfX1NZU0NBTExfNjRfUVVBTF8oc3ltKSBzeW0KLSNkZWZpbmUgX19T WVNDQUxMXzY0X1FVQUxfcHRyZWdzKHN5bSkgcHRyZWdzXyMjc3ltCi0KLSNkZWZpbmUgX19TWVND QUxMXzY0KG5yLCBzeW0sIHF1YWwpIGV4dGVybiBhc21saW5rYWdlIGxvbmcgX19TWVNDQUxMXzY0 X1FVQUxfIyNxdWFsKHN5bSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg bG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisjZGVm aW5lIF9fU1lTQ0FMTF82NChuciwgc3ltLCBxdWFsKSBleHRlcm4gYXNtbGlua2FnZSBsb25nIHN5 bSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs b25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKICNpbmNsdWRlIDxhc20vc3lzY2Fs bHNfNjQuaD4KICN1bmRlZiBfX1NZU0NBTExfNjQKIAotI2RlZmluZSBfX1NZU0NBTExfNjQobnIs IHN5bSwgcXVhbCkgW25yXSA9IF9fU1lTQ0FMTF82NF9RVUFMXyMjcXVhbChzeW0pLAorI2RlZmlu ZSBfX1NZU0NBTExfNjQobnIsIHN5bSwgcXVhbCkgW25yXSA9IHN5bSwKIAogZXh0ZXJuIGxvbmcg c3lzX25pX3N5c2NhbGwodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u ZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAK --001a1143ce483b5a5005639e381a--