From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web11.7539.1645421188020506004 for ; Sun, 20 Feb 2022 21:26:29 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=I01wnJ9G; spf=pass (domain: intel.com, ip: 192.55.52.115, mailfrom: ray.ni@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1645421188; x=1676957188; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=NK5lT23djx5NAtXvZNYpcu9IyP2BpAI84QQyHIO5gIs=; b=I01wnJ9GqSYajWQ+XjSR2tpSBD12w1w+rlWO7MP/RjDx83lccrm/PPYi 8+XLt8IpWJHVt7pyWItjKh+qu7m9kF3egwWq8M519GoNFFqA9VJKqi80T FXrZ52RU+y2S/biXSh9EV6mK6nrBTkjmjuqbjrtIVG9WuV+iMl+9CeDKU pFR96xUd6G/0GxOPKOFOaFMzXNuwFimR6wcWUFTBl44ond0l22wQ/GTz7 PO8SKvGVQyWBb+ou6lZkGLvZ2uTXwzwKDs/LlWDl1sxrJRMUvVXwCurAQ ICwR6yJhF0/TIkoC5NzZZS4QdO0bQMUGuCKetx7J1zd6hThkopbAYdVov g==; X-IronPort-AV: E=McAfee;i="6200,9189,10264"; a="251620889" X-IronPort-AV: E=Sophos;i="5.88,384,1635231600"; d="scan'208";a="251620889" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Feb 2022 21:26:27 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,384,1635231600"; d="scan'208";a="627259271" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by FMSMGA003.fm.intel.com with ESMTP; 20 Feb 2022 21:26:27 -0800 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Sun, 20 Feb 2022 21:26:27 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Sun, 20 Feb 2022 21:26:27 -0800 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.102) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Sun, 20 Feb 2022 21:26:26 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oGRtoGK8HbOjqnKdMGihOGzsFSW0u28MIzBxRsX+TxnxTd9gu4qm+LAiOf936Q8VFP1Om15N7LyGY+Xm5o8PzK25J2T8Cytz/tm+hx2Gza+95Nne4Tm4ifgNXYd+2aKb3p0sUyIyJICdemEO/df25y+oy4sfu+YoIejfWkzxH3CdT9+nEHSzBYq+u6Ls7ep7FoEh33UnERFoQzcPuGYlpa6MtFa1clB8GXZURP4ny6vsNJBJrnjlZKn6MQPirxOMc/5bDFJi3ynRZonr94cIcqRemJhNiKk4S4TwBbamqXUILSDN05YSafOYJwwAblVXRc0rnuIqfzgw70Y6th3Oaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=TTJ62XO6aIlNfXQaemS4UprbRk/9wQUoTrccS1dyPK8=; b=YPdbH662OLTmfhZ4S+fyXYKn4oMMDi699jnGbEcSRgA5r1pfI1b8pZqictEK8Qk+ASsSLWEvDMdPEyuwl/ip1LqcDtHGwYcY0RBczt2byLUd9tM7aZtBgr1JnDaVGAVgwl7uuCh/1HfjIGPbdYeHXcH6gbxIV3lyCfDEpB3AvH/Uw9xQtMm/Mnjvm3dul1UCqvWWboHjjlOYhNM0OKzyjZw4zL5xTetf4VKHyryRhNh3pPJpRRvpoKldtb3P232e2I6dkKK7Hun+6RtWKelyeVacAETnk+VfhosnIqZblRDFs3pX5I2ObPjRyErKMbBWhcMEGgH37fpGoq+A57rduw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MWHPR11MB1631.namprd11.prod.outlook.com (2603:10b6:301:10::10) by MN2PR11MB3999.namprd11.prod.outlook.com (2603:10b6:208:154::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4995.16; Mon, 21 Feb 2022 05:26:24 +0000 Received: from MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::99b6:d326:2925:4d2f]) by MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::99b6:d326:2925:4d2f%3]) with mapi id 15.20.4995.027; Mon, 21 Feb 2022 05:26:23 +0000 From: "Ni, Ray" To: "Rhodes, Sean" , "devel@edk2.groups.io" CC: "Dong, Guo" , "Rhodes, Sean" , "Ma, Maurice" , "You, Benjamin" Subject: Re: [PATCH] UefiPayloadPkg: Make Boot Manager Key configurable Thread-Topic: [PATCH] UefiPayloadPkg: Make Boot Manager Key configurable Thread-Index: AQHYJqJOLNffFiOKBUe9c9XDBwqLjKydeUwg Date: Mon, 21 Feb 2022 05:26:23 +0000 Message-ID: References: <330fb76dffcd8ee2d3dfdbb395f1b1ae2707a6f3.1645393143.git.sean@starlabs.systems> In-Reply-To: <330fb76dffcd8ee2d3dfdbb395f1b1ae2707a6f3.1645393143.git.sean@starlabs.systems> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: faf7838c-bffe-41fd-b396-08d9f4fab384 x-ms-traffictypediagnostic: MN2PR11MB3999:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qeAlYFlDJtNMRqC78/VQ6e/nCXw06Nqe6rJVTI4bmMJdgupeRZar9cpBZ9Atj4rAOjEUvgXcXxTLatgcoXAGGoiFa4oHasT3laXygmv8hh+YKugLUpi/tOy74xO/8p5W3tlom0ubs05DInPxD/SxnUnbT+7XSLh8KeRQti/uGYzG+8G2VYPZZlVuiDrqkzr4RsoFVNpIjUkSGzA5r0Wlbsg8VUF4B+6spMQbCRizErV+UxzrCMKb2J0t+KclCM8Boc+vclF+z3m5j+AwGc+BDkSgV7tK2Wta4+P9aFfY8pemaDdjFQGQwv2298bNT2O/38felMMd8lnTLfH7ul+DXI7Mh/t+m0bqfE8KRmRerfzlX0ggiYbKgdjMa3ghbbc5SncBYp4qHrwU3fLIyoXMW3IX5qb3GqDbGLBNFB6WiEYdrp2PvMZs9PZqRuuTi8ClG74uSxj+n+ba+3qd82IMGskHWNv6ZDbbuREvnjt1mOkrw2N8bCtCCiH165qoAxEyhS4rPPXssloqzSiISKWse+L328dj+Uk5KBK7cNk09DihYuQAp1EpRLXuef2yer0R7g7Khx/4NWMXyFHOB2Q+XxkbBXcLDg7x+WUx8EDMipgywRYmjy8hXpuk6IKkcdVnV+1sTCg9W3GVHP/zZ404tHUyl7xHvcELBKGqsfmXWj/Kn/sLX687kH9nDlou1zAeeJqLRVLh6al1ckiMG2whaQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1631.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(71200400001)(53546011)(86362001)(186003)(7696005)(26005)(6506007)(2906002)(122000001)(107886003)(82960400001)(38070700005)(38100700002)(54906003)(316002)(508600001)(66446008)(8676002)(66476007)(66556008)(4326008)(64756008)(66946007)(76116006)(9686003)(8936002)(52536014)(5660300002)(55016003)(33656002)(83380400001)(110136005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?syf1y8ygHqj9Aqcr0nFTmwuVsEWcc5JwdbZpXuL2T9gJH45rP+5JQEHYnppS?= =?us-ascii?Q?KqPdMM/go2nu0At9xdT6rvEJAR3yuPjIcrT4Kd0laHNkou5blqKVDvdumKwy?= =?us-ascii?Q?iVr2dyi7e/diZGUXPCaqU33/X/fLzUFjRfGBs8qtGBGE9jCG9gYPKNevRpvb?= =?us-ascii?Q?+lPwXCbKl4xHis/Fcw51dwDIbQlKuB77CuSGIPgBDmHo8IKSFVcCApCv3k7h?= =?us-ascii?Q?nlVym9F0EeOxfKsJ3Oyfv5jvTaCoo5+6F3Z0LMbD+qJHlBjQlupe3eWJ2hWZ?= =?us-ascii?Q?zIsS9wzRjT25DpqQzUgHAmQA1ua1y5leFK6Z74gOC/2COqlhDFCc5itGoF3b?= =?us-ascii?Q?shporD46Ns2u4NNq599GUvkxpt0Daz6o9ptj/oPvY2dUUpfJiLAMzWMe5f0h?= =?us-ascii?Q?UnMFHoUNOJbwiZrVKqsFjNgl+J+saY7fPWykcUsZQumPe20ywsvd/LMfgTk8?= =?us-ascii?Q?aTsKvkw9GBVbi126z3+4Zb93W4CNHwIEXxmzDas8IuxzJPlk07VpvGjHVtFL?= =?us-ascii?Q?x63XcamOx1eKNVymefueF4NJSMH4yr5/1r7sKSc+e6Hq00gq3BRmVLfjG9Q4?= =?us-ascii?Q?MiCATIGDgMHBGbuIhNelaKC9qEbgVZgvKGvqtxay2cEAxZq+Pqe08vRJvsTG?= =?us-ascii?Q?3WbVhpJx3YYjOkAR/o0AMpitP9Gjc6Kg7wkY//E5V6E003OF1AnOq/wNqVd6?= =?us-ascii?Q?kMxdeD28k0e3GKNdsZtxfTwrS4anxplgWXQiauI7DD1YqDIaG18XHMNbhnA4?= =?us-ascii?Q?9FpZNFZdcRETw89nsSWM+XO5omEMyLZEm5XDN/AnO9Uimu1rYQMtcV9PsWKO?= =?us-ascii?Q?mRxeSAb/lOE/SOuUafu+20Y2pOIUGwCeQzxpL0LRFPrU4mnYixW7KBJqbJsL?= =?us-ascii?Q?UuUBh1gBjcbQ4zZHvl/aOBRoLH8pPbID473FFnD4QO3M7mIgtA27vAl2cpi+?= =?us-ascii?Q?NKYZa9zOm/Cg3PTg/+TjhBY1LLtZqkF2bPXWEy9a7pHSj8BWamZJOtpNme9b?= =?us-ascii?Q?b8upeeu/gduedGz0Cla5F8SGx92sz7x8pZ4+ga/gm19lA4aahBOguPRAE+cV?= =?us-ascii?Q?ResTayHxIWilN3Rm3/dPvByprnLUitljYbTuP80Vmc8JKHwlOdfB9zHVkDoQ?= =?us-ascii?Q?EtPr16CVVim1i7vJu7tc2xc8cASNLYEM1DDCrbehwnscSlJWX6ZepKfEDYD6?= =?us-ascii?Q?k69BWrQ8sU3lHAFVvAjuWTkovzvL+/vS13XOUZBvZ06MHZOu7Ms5caeFY8T4?= =?us-ascii?Q?MYZAFypVHkIUa3LCNsHCQwj4HWha2fU+V1lkpT/eKekxntHlnvXZxMEYwpwd?= =?us-ascii?Q?0wOJ6ulSZqjvoT9pDXwWNrphP0amH9UY/r6yWfl4XssNI9Xa4gt/mggtvL9S?= =?us-ascii?Q?8FYc5yBETbzLrt1vg3PfiV/CeiVuwu+TRy7NcmeiW2u6Xig3iUeqTzzFrZeo?= =?us-ascii?Q?VFFgMt43eYxIny0t97+cd93sjGVPJMVEeq3hOMtpUwP5KPijHOM0FJy/nU0M?= =?us-ascii?Q?1SMAELpIwrvohxseJKjFkxsiZuqaoc9sZeGmohxptjv8zpXMTL9NPsCpTZae?= =?us-ascii?Q?VO893palNBpjSsIB+1ta/YAaKFJIlCD/iLG1hU3d2cehVTcUgCZ5aUbd3ZdL?= =?us-ascii?Q?2uNYqLylDbj7/T9GEB9uw/o=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1631.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: faf7838c-bffe-41fd-b396-08d9f4fab384 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Feb 2022 05:26:23.9049 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xCwF0BmTBQKR9qtFNLzLhSApS8kPaL0DXDBNV+l1Zl5rTGaGeFr9CO66WfT8Ifn3OodpZvCbA+LPnP6QNZo+Cg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB3999 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Can you just map both ESC and F2 to the UI? So that PCD is not needed. Thanks, Ray -----Original Message----- From: Sean Rhodes =20 Sent: Monday, February 21, 2022 5:39 AM To: devel@edk2.groups.io Cc: Dong, Guo ; Rhodes, Sean ; N= i, Ray ; Ma, Maurice ; You, Benjami= n Subject: [PATCH] UefiPayloadPkg: Make Boot Manager Key configurable Provide a build option to use [Esc] instead of [F2] for devices such as Chromebooks that don't have F-keys. Cc: Guo Dong Cc: Ray Ni Cc: Maurice Ma Cc: Benjamin You Signed-off-by: Sean Rhodes --- .../Library/BrotliCustomDecompressLib/brotli | 2 +- .../PlatformBootManager.c | 44 +++++++++++++------ .../PlatformBootManagerLib.inf | 1 + UefiPayloadPkg/UefiPayloadPkg.dec | 3 ++ UefiPayloadPkg/UefiPayloadPkg.dsc | 3 ++ 5 files changed, 39 insertions(+), 14 deletions(-) diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli b/MdeMod= ulePkg/Library/BrotliCustomDecompressLib/brotli index f4153a09f8..666c3280cc 160000 --- a/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli +++ b/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli @@ -1 +1 @@ -Subproject commit f4153a09f87cbb9c826d8fc12c74642bb2d879ea +Subproject commit 666c3280cc11dc433c303d79a83d4ffbdd12cc8d diff --git a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootMana= ger.c b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c index a8ead775ea..0eb577313a 100644 --- a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c +++ b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c @@ -164,7 +164,7 @@ PlatformBootManagerBeforeConsole ( ) { EFI_INPUT_KEY Enter; - EFI_INPUT_KEY F2; + EFI_INPUT_KEY CustomKey; EFI_INPUT_KEY Down; EFI_BOOT_MANAGER_LOAD_OPTION BootOption; EFI_STATUS Status; @@ -186,13 +186,22 @@ PlatformBootManagerBeforeConsole ( Enter.UnicodeChar =3D CHAR_CARRIAGE_RETURN; EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL); =20 - // - // Map F2 to Boot Manager Menu - // - F2.ScanCode =3D SCAN_F2; - F2.UnicodeChar =3D CHAR_NULL; + if (FixedPcdGetBool (PcdBootManagerEscape)) { + // + // Map Esc to Boot Manager Menu + // + CustomKey.ScanCode =3D SCAN_ESC; + CustomKey.UnicodeChar =3D CHAR_NULL; + } else { + // + // Map Esc to Boot Manager Menu + // + CustomKey.ScanCode =3D SCAN_F2; + CustomKey.UnicodeChar =3D CHAR_NULL; + } + EfiBootManagerGetBootManagerMenu (&BootOption); - EfiBootManagerAddKeyOptionVariable (NULL, (UINT16)BootOption.OptionNumbe= r, 0, &F2, NULL); + EfiBootManagerAddKeyOptionVariable (NULL, (UINT16)BootOption.OptionNumbe= r, 0, &CustomKey, NULL); =20 // // Also add Down key to Boot Manager Menu since some serial terminals do= n't support F2 key. @@ -251,12 +260,21 @@ PlatformBootManagerAfterConsole ( // PlatformRegisterFvBootOption (PcdGetPtr (PcdShellFile), L"UEFI Shell", L= OAD_OPTION_ACTIVE); =20 - Print ( - L"\n" - L"F2 or Down to enter Boot Manager Menu.\n" - L"ENTER to boot directly.\n" - L"\n" - ); + if (FixedPcdGetBool (PcdBootManagerEscape)) { + Print ( + L"\n" + L"Esc or Down to enter Boot Manager Menu.\n" + L"ENTER to boot directly.\n" + L"\n" + ); + } else { + Print ( + L"\n" + L"F2 or Down to enter Boot Manager Menu.\n" + L"ENTER to boot directly.\n" + L"\n" + ); + } } =20 /** diff --git a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootMana= gerLib.inf b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootMana= gerLib.inf index 9c4a9da943..80390e0d98 100644 --- a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.= inf +++ b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.= inf @@ -73,3 +73,4 @@ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile + gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape diff --git a/UefiPayloadPkg/UefiPayloadPkg.dec b/UefiPayloadPkg/UefiPayload= Pkg.dec index 551f0a4915..f2fcdf6a74 100644 --- a/UefiPayloadPkg/UefiPayloadPkg.dec +++ b/UefiPayloadPkg/UefiPayloadPkg.dec @@ -83,6 +83,9 @@ gUefiPayloadPkgTokenSpaceGuid.PcdSystemMemoryUefiRegionSi= ze|0x04000000|UINT32|0x =20 gUefiPayloadPkgTokenSpaceGuid.PcdPcdDriverFile|{ 0x57, 0x72, 0xcf, 0x80, 0= xab, 0x87, 0xf9, 0x47, 0xa3, 0xfe, 0xD5, 0x0B, 0x76, 0xd8, 0x95, 0x41 }|VOI= D*|0x00000018 =20 +# Boot Manager Key +gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape|FALSE|BOOLEAN|0x0000002= 0 + ## FFS filename to find the default variable initial data file. # @Prompt FFS Name of variable initial data file gUefiPayloadPkgTokenSpaceGuid.PcdNvsDataFile |{ 0x1a, 0xf1, 0xb1, 0xae, 0= x42, 0xcc, 0xcf, 0x4e, 0xac, 0x60, 0xdb, 0xab, 0xf6, 0xca, 0x69, 0xe6 }|VOI= D*|0x00000025 diff --git a/UefiPayloadPkg/UefiPayloadPkg.dsc b/UefiPayloadPkg/UefiPayload= Pkg.dsc index 1ce96a51c1..ee9680a2b7 100644 --- a/UefiPayloadPkg/UefiPayloadPkg.dsc +++ b/UefiPayloadPkg/UefiPayloadPkg.dsc @@ -33,6 +33,7 @@ DEFINE UNIVERSAL_PAYLOAD =3D FALSE DEFINE SECURITY_STUB_ENABLE =3D TRUE DEFINE SMM_SUPPORT =3D FALSE + DEFINE BOOT_MANAGER_ESCAPE =3D FALSE # # SBL: UEFI payload for Slim Bootloader # COREBOOT: UEFI payload for coreboot @@ -399,6 +400,8 @@ gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask | 0x1 !endif =20 + gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape|$(BOOT_MANAGER_ESCAPE= ) + [PcdsPatchableInModule.X64] gPcAtChipsetPkgTokenSpaceGuid.PcdRtcIndexRegister|$(RTC_INDEX_REGISTER) gPcAtChipsetPkgTokenSpaceGuid.PcdRtcTargetRegister|$(RTC_TARGET_REGISTER= ) --=20 2.32.0