[edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers

Heng Luo posted 1 patch 4 years, 1 month ago
Failed in applying to current master (apply log)
There is a newer version of this series
Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc            |   4 +++-
Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc      |   6 +++++-
Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf            |   6 +++++-
Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf             |   6 +++++-
Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf  |  13 +++++++++++++
Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf   |   8 ++++++++
Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf    |  10 ++++++++++
Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf |  52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp        | Bin 0 -> 183366 bytes
Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c          | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf        |  10 ++++++++++
Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg        | Bin 0 -> 11944 bytes
Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf     |  52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec      |  31 +++++++++++++++++++++++++++++++
Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc      |  37 +++++++++++++++++++++++++++++++++++++
Features/Intel/UserInterface/LogoFeaturePkg/Readme.md               | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17 files changed, 620 insertions(+), 4 deletions(-)
[edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers
Posted by Heng Luo 4 years, 1 month ago
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2584

1. LogoDxe.inf includes a BMP logo in the EFI file,
the driver decodes the BMP file and provide the image
via EDKII_PLATFORM_LOGO_PROTOCOL.
2. JpegLogoDxe.inf includes a JPEG logo in the EFI file,
the driver use EFI_HII_IMAGE_DECODER_PROTOCOL to decode the Jpeg
file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.

Cc: Dandan Bi <dandan.bi@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Signed-off-by: Heng Luo <heng.luo@intel.com>
---

Notes:
    v2:
      - Add Cc and Remove Change-Id in commit message

 Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc            |   4 +++-
 Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc      |   6 +++++-
 Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf            |   6 +++++-
 Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf             |   6 +++++-
 Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf  |  13 +++++++++++++
 Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf   |   8 ++++++++
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf    |  10 ++++++++++
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf |  52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp        | Bin 0 -> 183366 bytes
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c          | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf        |  10 ++++++++++
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg        | Bin 0 -> 11944 bytes
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf     |  52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec      |  31 +++++++++++++++++++++++++++++++
 Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc      |  37 +++++++++++++++++++++++++++++++++++++
 Features/Intel/UserInterface/LogoFeaturePkg/Readme.md               | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 17 files changed, 620 insertions(+), 4 deletions(-)

diff --git a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
index 23e7c6474a..ea879680ba 100644
--- a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
+++ b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
@@ -7,7 +7,7 @@
 # 1. Present a consolidated and simplified view of all available advanced features to board packages.
 # 2. Provide a simple, single package build for all available advanced features.
 #
-# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
 #
 # SPDX-License-Identifier: BSD-2-Clause-Patent
 #
@@ -46,6 +46,8 @@
   gSmbiosFeaturePkgTokenSpaceGuid.PcdSmbiosFeatureEnable                  |TRUE
   gUsb3DebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugFeatureEnable            |TRUE
   gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable    |TRUE
+  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable                      |TRUE
+  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
 
 #
 # This package builds all advanced features.
diff --git a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
index 649774edf7..c1bd791525 100644
--- a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
+++ b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
@@ -4,7 +4,7 @@
 #  This file is intended to be included into another package so advanced features
 #  can be conditionally built by enabling the respective feature via its FeaturePCD.
 #
-# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
 #
 # SPDX-License-Identifier: BSD-2-Clause-Patent
 #
@@ -54,3 +54,7 @@
 !if gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable == TRUE
   !include UserInterface/UserAuthFeaturePkg/Include/UserAuthFeature.dsc
 !endif
+
+!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
+  !include UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
+!endif
diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
index 57b29a42b9..56f6143650 100644
--- a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
+++ b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
@@ -5,7 +5,7 @@
 #  can be conditionally included in the flash image by enabling the respective
 #  feature via its FeaturePCD.
 #
-# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
 #
 # SPDX-License-Identifier: BSD-2-Clause-Patent
 #
@@ -55,3 +55,7 @@
 !if gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable == TRUE
   !include UserInterface/UserAuthFeaturePkg/Include/PostMemory.fdf
 !endif
+
+!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
+  !include UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
+!endif
diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
index 20d25dd173..7a76b0efc3 100644
--- a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
+++ b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
@@ -5,7 +5,7 @@
 #  can be conditionally included in the flash image by enabling the respective
 #  feature via its FeaturePCD.
 #
-# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
 #
 # SPDX-License-Identifier: BSD-2-Clause-Patent
 #
@@ -55,3 +55,7 @@
 !if gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable == TRUE
   !include UserInterface/UserAuthFeaturePkg/Include/PreMemory.fdf
 !endif
+
+!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
+  !include UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
+!endif
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
new file mode 100644
index 0000000000..3fd1c3372e
--- /dev/null
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
@@ -0,0 +1,107 @@
+## @file
+# This is a build description file for the Logo advanced feature.
+# This file should be included into another package DSC file to build this feature.
+#
+# The DEC files are used by the utilities that parse DSC and
+# INF files to generate AutoGen.c and AutoGen.h files
+# for the build infrastructure.
+#
+# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+################################################################################
+#
+# Defines Section - statements that will be processed to create a Makefile.
+#
+################################################################################
+[Defines]
+!ifndef $(PEI_ARCH)
+  !error "PEI_ARCH must be specified to build this feature!"
+!endif
+!ifndef $(DXE_ARCH)
+  !error "DXE_ARCH must be specified to build this feature!"
+!endif
+
+################################################################################
+#
+# Packages Section - Make sure PCD can be directly used in a conditional statement
+# in a DSC which includes this DSC file.
+#
+################################################################################
+[Packages]
+  UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
+
+################################################################################
+#
+# Library Class section - list of all Library Classes needed by this feature.
+#
+################################################################################
+[LibraryClasses]
+  #######################################
+  # Edk2 Packages
+  #######################################
+  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
+  BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.inf
+  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
+  UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
+  UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
+
+[LibraryClasses.common.DXE_DRIVER]
+  #######################################
+  # Edk2 Packages
+  #######################################
+  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
+
+################################################################################
+#
+# Component section - list of all components that need built for this feature.
+#
+# Note: The EDK II DSC file is not used to specify how compiled binary images get placed
+#       into firmware volume images. This section is just a list of modules to compile from
+#       source into UEFI-compliant binaries.
+#       It is the FDF file that contains information on combining binary files into firmware
+#       volume images, whose concept is beyond UEFI and is described in PI specification.
+#       There may also be modules listed in this section that are not required in the FDF file,
+#       When a module listed here is excluded from FDF file, then UEFI-compliant binary will be
+#       generated for it, but the binary will not be put into any firmware volume.
+#
+################################################################################
+
+#
+# Feature DXE Components
+#
+
+# @todo: Change below line to [Components.$(DXE_ARCH)] after https://bugzilla.tianocore.org/show_bug.cgi?id=2308
+#        is completed.
+[Components.X64]
+  #####################################
+  # Logo Feature Package
+  #####################################
+
+  # Add library instances here that are not included in package components and should be tested
+  # in the package build.
+
+  # Add components here that should be included in the package build.
+!if gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
+  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
+!else
+  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
+!endif
+
+###################################################################################################
+#
+# BuildOptions Section - Define the module specific tool chain flags that should be used as
+#                        the default flags for a module. These flags are appended to any
+#                        standard flags that are defined by the build process. They can be
+#                        applied for any modules or only those modules with the specific
+#                        module style (EDK or EDKII) specified in [Components] section.
+#
+#                        For advanced features, it is recommended to enable [BuildOptions] in
+#                        the applicable INF file so it does not affect the whole board package
+#                        build when this DSC file is active.
+#
+###################################################################################################
+[BuildOptions]
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
new file mode 100644
index 0000000000..53c85da716
--- /dev/null
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
@@ -0,0 +1,13 @@
+## @file
+#  FDF file for post-memory Logo modules.
+#
+# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+!if gSmbiosFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
+  INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
+!else
+  INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
+!endif
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
new file mode 100644
index 0000000000..91cd1c6ec6
--- /dev/null
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
@@ -0,0 +1,8 @@
+## @file
+#  FDF file for pre-memory Logo modules.
+#
+# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
new file mode 100644
index 0000000000..a39500e043
--- /dev/null
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
@@ -0,0 +1,10 @@
+// /** @file
+// Platform Logo image definition file.
+//
+// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+// **/
+
+#image IMG_LOGO Logo.jpg
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
new file mode 100644
index 0000000000..47f1672a4c
--- /dev/null
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
@@ -0,0 +1,52 @@
+## @file
+#  The default logo JPEG picture shown on setup screen.
+#
+#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = JpegLogoDxe
+  FILE_GUID                      = 319CFE1D-8F15-4A7A-BF40-EECA953D87EF
+  MODULE_TYPE                    = DXE_DRIVER
+  VERSION_STRING                 = 1.0
+
+  ENTRY_POINT                    = InitializeLogo
+#
+#  This flag specifies whether HII resource section is generated into PE image.
+#
+  UEFI_HII_RESOURCE_SECTION      = TRUE
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+#  VALID_ARCHITECTURES           = IA32 X64
+#
+
+[Sources]
+  Logo.jpg
+  Logo.c
+  JpegLogo.idf
+
+[Packages]
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+  UefiBootServicesTableLib
+  UefiDriverEntryPoint
+  DebugLib
+
+[Protocols]
+  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
+  gEfiHiiImageExProtocolGuid         ## CONSUMES
+  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
+  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
+
+[Depex]
+  gEfiHiiDatabaseProtocolGuid AND
+  gEfiHiiImageExProtocolGuid
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..7ec1aa6a852564e262df59929655f7a0f3d5445f
GIT binary patch
literal 183366
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
Q9t=$LltI8CkSzrM7XaWYkpKVy

literal 0
HcmV?d00001

diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
new file mode 100644
index 0000000000..a636b086ca
--- /dev/null
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
@@ -0,0 +1,153 @@
+/** @file
+  Logo DXE Driver, install Edkii Platform Logo protocol.
+
+Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+#include <Uefi.h>
+#include <Protocol/HiiDatabase.h>
+#include <Protocol/GraphicsOutput.h>
+#include <Protocol/HiiImageEx.h>
+#include <Protocol/PlatformLogo.h>
+#include <Protocol/HiiPackageList.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+
+typedef struct {
+  EFI_IMAGE_ID                          ImageId;
+  EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute;
+  INTN                                  OffsetX;
+  INTN                                  OffsetY;
+} LOGO_ENTRY;
+
+EFI_HII_IMAGE_EX_PROTOCOL *mHiiImageEx;
+EFI_HII_HANDLE            mHiiHandle;
+LOGO_ENTRY                mLogos[] = {
+  {
+    IMAGE_TOKEN (IMG_LOGO),
+    EdkiiPlatformLogoDisplayAttributeCenter,
+    0,
+    0
+  }
+};
+
+/**
+  Load a platform logo image and return its data and attributes.
+
+  @param This              The pointer to this protocol instance.
+  @param Instance          The visible image instance is found.
+  @param Image             Points to the image.
+  @param Attribute         The display attributes of the image returned.
+  @param OffsetX           The X offset of the image regarding the Attribute.
+  @param OffsetY           The Y offset of the image regarding the Attribute.
+
+  @retval EFI_SUCCESS      The image was fetched successfully.
+  @retval EFI_NOT_FOUND    The specified image could not be found.
+**/
+EFI_STATUS
+EFIAPI
+GetImage (
+  IN     EDKII_PLATFORM_LOGO_PROTOCOL          *This,
+  IN OUT UINT32                                *Instance,
+     OUT EFI_IMAGE_INPUT                       *Image,
+     OUT EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE *Attribute,
+     OUT INTN                                  *OffsetX,
+     OUT INTN                                  *OffsetY
+  )
+{
+  UINT32 Current;
+  if (Instance == NULL || Image == NULL ||
+      Attribute == NULL || OffsetX == NULL || OffsetY == NULL) {
+    return EFI_INVALID_PARAMETER;
+  }
+
+  Current = *Instance;
+  if (Current >= ARRAY_SIZE (mLogos)) {
+    return EFI_NOT_FOUND;
+  }
+
+  (*Instance)++;
+  *Attribute = mLogos[Current].Attribute;
+  *OffsetX   = mLogos[Current].OffsetX;
+  *OffsetY   = mLogos[Current].OffsetY;
+  return mHiiImageEx->GetImageEx (mHiiImageEx, mHiiHandle, mLogos[Current].ImageId, Image);
+}
+
+EDKII_PLATFORM_LOGO_PROTOCOL mPlatformLogo = {
+  GetImage
+};
+
+/**
+  Entrypoint of this module.
+
+  This function is the entrypoint of this module. It installs the Edkii
+  Platform Logo protocol.
+
+  @param  ImageHandle       The firmware allocated handle for the EFI image.
+  @param  SystemTable       A pointer to the EFI System Table.
+
+  @retval EFI_SUCCESS       The entry point is executed successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+InitializeLogo (
+  IN EFI_HANDLE               ImageHandle,
+  IN EFI_SYSTEM_TABLE         *SystemTable
+  )
+{
+  EFI_STATUS                  Status;
+  EFI_HII_PACKAGE_LIST_HEADER *PackageList;
+  EFI_HII_DATABASE_PROTOCOL   *HiiDatabase;
+  EFI_HANDLE                  Handle;
+
+  Status = gBS->LocateProtocol (
+                  &gEfiHiiDatabaseProtocolGuid,
+                  NULL,
+                  (VOID **) &HiiDatabase
+                  );
+  ASSERT_EFI_ERROR (Status);
+
+  Status = gBS->LocateProtocol (
+                  &gEfiHiiImageExProtocolGuid,
+                  NULL,
+                  (VOID **) &mHiiImageEx
+                  );
+  ASSERT_EFI_ERROR (Status);
+
+  //
+  // Retrieve HII package list from ImageHandle
+  //
+  Status = gBS->OpenProtocol (
+                  ImageHandle,
+                  &gEfiHiiPackageListProtocolGuid,
+                  (VOID **) &PackageList,
+                  ImageHandle,
+                  NULL,
+                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
+                  );
+  if (EFI_ERROR (Status)) {
+    DEBUG ((DEBUG_ERROR, "HII Image Package with logo not found in PE/COFF resource section\n"));
+    return Status;
+  }
+
+  //
+  // Publish HII package list to HII Database.
+  //
+  Status = HiiDatabase->NewPackageList (
+                          HiiDatabase,
+                          PackageList,
+                          NULL,
+                          &mHiiHandle
+                          );
+  if (!EFI_ERROR (Status)) {
+    Handle = NULL;
+    Status = gBS->InstallMultipleProtocolInterfaces (
+                    &Handle,
+                    &gEdkiiPlatformLogoProtocolGuid, &mPlatformLogo,
+                    NULL
+                    );
+  }
+  return Status;
+}
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
new file mode 100644
index 0000000000..fd9c489815
--- /dev/null
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
@@ -0,0 +1,10 @@
+// /** @file
+// Platform Logo image definition file.
+//
+// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+// **/
+
+#image IMG_LOGO Logo.bmp
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d1d099789fa794648b86c046f0320a553954764e
GIT binary patch
literal 11944
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

literal 0
HcmV?d00001

diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
new file mode 100644
index 0000000000..5ef93461ee
--- /dev/null
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
@@ -0,0 +1,52 @@
+## @file
+#  The default logo bitmap picture shown on setup screen.
+#
+#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = LogoDxe
+  FILE_GUID                      = 76ED6631-44FE-4ED2-8B5D-1B5355BB25E8
+  MODULE_TYPE                    = DXE_DRIVER
+  VERSION_STRING                 = 1.0
+
+  ENTRY_POINT                    = InitializeLogo
+#
+#  This flag specifies whether HII resource section is generated into PE image.
+#
+  UEFI_HII_RESOURCE_SECTION      = TRUE
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+#  VALID_ARCHITECTURES           = IA32 X64
+#
+
+[Sources]
+  Logo.bmp
+  Logo.c
+  Logo.idf
+
+[Packages]
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+  UefiBootServicesTableLib
+  UefiDriverEntryPoint
+  DebugLib
+
+[Protocols]
+  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
+  gEfiHiiImageExProtocolGuid         ## CONSUMES
+  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
+  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
+
+[Depex]
+  gEfiHiiDatabaseProtocolGuid AND
+  gEfiHiiImageExProtocolGuid
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
new file mode 100644
index 0000000000..1418eb2137
--- /dev/null
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
@@ -0,0 +1,31 @@
+## @file
+# This package provides advanced feature functionality for LOGO.
+# This package should only depend on EDK II Core packages.
+#
+# The DEC files are used by the utilities that parse DSC and
+# INF files to generate AutoGen.c and AutoGen.h files
+# for the build infrastructure.
+#
+# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  DEC_SPECIFICATION = 0x00010017
+  PACKAGE_NAME      = LogoFeaturePkg
+  PACKAGE_GUID      = A1A87B33-C3E3-497B-978F-2FF7813FEB21
+  PACKAGE_VERSION   = 0.1
+
+[Includes]
+  Include
+
+[LibraryClasses]
+
+[Guids]
+  gLogoFeaturePkgTokenSpaceGuid  =  {0x567199de, 0xb448, 0x4aa0, {0x99, 0x4e, 0xd5, 0xd6, 0x82, 0x59, 0x91, 0x17}}
+
+[PcdsFeatureFlag]
+  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable|FALSE|BOOLEAN|0xA0000001
+  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable|FALSE|BOOLEAN|0xA0000002
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
new file mode 100644
index 0000000000..717e074c69
--- /dev/null
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
@@ -0,0 +1,37 @@
+## @file
+# This package provides advanced feature functionality for LOGO.
+# This package should only depend on EDK II Core packages.
+#
+# The DEC files are used by the utilities that parse DSC and
+# INF files to generate AutoGen.c and AutoGen.h files
+# for the build infrastructure.
+#
+# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  PLATFORM_NAME                  = LogoFeaturePkg
+  PLATFORM_GUID                  = 0618AB19-9507-4D6A-A0D7-1F43D74736CF
+  PLATFORM_VERSION               = 0.1
+  DSC_SPECIFICATION              = 0x00010005
+  OUTPUT_DIRECTORY               = Build/$(PLATFORM_NAME)
+  SUPPORTED_ARCHITECTURES        = IA32|X64
+  BUILD_TARGETS                  = DEBUG|RELEASE|NOOPT
+  SKUID_IDENTIFIER               = DEFAULT
+
+[LibraryClasses]
+  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
+  BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.inf
+  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
+  UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
+  UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
+
+[LibraryClasses.common.DXE_DRIVER]
+  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
+
+[Components]
+  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
+  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
new file mode 100644
index 0000000000..092a055a2c
--- /dev/null
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
@@ -0,0 +1,129 @@
+# Overview
+* **Feature Name:** Logo
+* **PI Phase(s) Supported:** DXE
+* **SMM Required?** No
+
+## Purpose
+This feature provides the Logo image and driver that produces EDKII_PLATFORM_LOGO_PROTOCOL:
+
+1. LogoDxe.inf includes a BMP logo in the EFI file, the driver provides the image via EDKII_PLATFORM_LOGO_PROTOCOL.
+2. JpegLogoDxe.inf includes a JPEG logo in the EFI file, the driver uses EFI_HII_IMAGE_DECODER_PROTOCOL to decode the JPEG file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.
+
+# High-Level Theory of Operation
+
+The driver produces a EDKII_PLATFORM_LOGO_PROTOCOL to provide a logo picture shown on setup screen.
+
+The Logo file is built in HII package list as EFI resource, the driver uses EFI_HII_DATABASE_PROTOCOL
+to the publish HII package list to HII Database and get images via EFI_HII_IMAGE_EX_PROTOCOL.
+
+## Firmware Volumes
+
+* PostMemory
+
+## Modules
+
+A bulleted list of the modules that make up the feature.
+
+* LogoDxe
+* JpegLogoDxe
+
+## LogoDxe
+
+This driver provides a bitmap image via EDKII_PLATFORM_LOGO_PROTOCOL.
+
+## JpegLogoDxe
+
+This driver uses EFI_HII_IMAGE_DECODER_PROTOCOL to decode the jpeg data and provide a bitmap image via
+EDKII_PLATFORM_LOGO_PROTOCOL.
+
+## Key Functions
+
+* This feature produces a EDKII_PLATFORM_LOGO_PROTOCOL which could be used by consumer such as Edk2\MdeModulePkg\Library\BootLogoLib.
+
+## Configuration
+
+* gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
+  TRUE: Enable logo feature
+  FALSE: Disable logo feature
+* gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable
+  TRUE: Use jpeg logo
+  FALSE: Use bitmap logo
+
+## Data Flows
+
+Architecturally defined data structures and flows for the feature.
+
+### Data flows of LogoDxe
+
+```txt
+| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|
+------------    ------------------    ----------------
+      |                 |                     |
+      |                 |--bitmap image data->|
+      |<---bitmap data--|<-return bitmap data-|
+```
+
+### Data flows of JpegLogoDxe
+
+```txt
+| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|    | EFI_HII_IMAGE_DECODER_PROTOCOL |
+------------    ------------------    ----------------    ----------------------------------
+      |                 |                     |                            |
+      |                 |---Jpeg Image data-->|---------decode Jpeg------->|
+      |<---bitmap data--|<-return bitmap data-|<-----return bitmap data----|
+```
+
+## Control Flows
+
+Consumer gets image from the logo driver via EDKII_PLATFORM_LOGO_PROTOCOL.
+
+## Build Flows
+
+No any special build flows is needed.
+
+## Test Point Results
+
+Not available.
+
+## Functional Exit Criteria
+
+* Check wether EDKII_PLATFORM_LOGO_PROTOCOL->GetImage() return a default Intel logo.
+* If using jpeg logo, a dex driver which produces EFI_HII_IMAGE_DECODER_PROTOCOL(name is
+gEfiHiiImageDecoderNameJpegGuid) is necessary, it is used to decode Jpeg data.
+
+## Feature Enabling Checklist
+
+### Option 1
+
+* Include AdvancedFeatures.dsc in platform dsc file, and use pcd to enable the feature.
+
+```dsc
+  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable                      |TRUE
+  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
+  !include Include/AdvancedFeatures.dsc
+```
+
+* Include PreMemory.fdf and inPostMemory.fdf in platform fdf file
+
+```fdf
+!include Include/PreMemory.fdf
+!include Include/PostMemory.fdf
+```
+
+### Option 2
+
+* To use bitmap logo, include "UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform dsc file, and include
+"INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform fdf file.
+
+* To use jpeg logo, include "UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in platform dsc file, and include
+"INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in platform fdf file.
+
+## Performance Impact
+
+* LogoDxe
+  * EFI size: 180 KB
+  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage(): about 18 milliseconds
+
+* JpegLogoDxe
+  * EFI size: 13.6 KB
+  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage(): about 80 milliseconds
-- 
2.24.0.windows.2


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#56238): https://edk2.groups.io/g/devel/message/56238
Mute This Topic: https://groups.io/mt/72533665/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers
Posted by Ni, Ray 4 years, 1 month ago
Heng,
Can you please remove the <feature-domain> prefix from all paths inside DSC/FDF/INF?

We expect PACKAGES_PATH is set to include "edk2-platforms/Features/Intel" and all sub folders inside "edk2-platforms/Features/Intel/".

Thanks,
Ray


> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Heng Luo
> Sent: Wednesday, March 25, 2020 10:44 AM
> To: devel@edk2.groups.io
> Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming <liming.gao@intel.com>; Dong, Eric <eric.dong@intel.com>
> Subject: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2584
> 
> 1. LogoDxe.inf includes a BMP logo in the EFI file,
> the driver decodes the BMP file and provide the image
> via EDKII_PLATFORM_LOGO_PROTOCOL.
> 2. JpegLogoDxe.inf includes a JPEG logo in the EFI file,
> the driver use EFI_HII_IMAGE_DECODER_PROTOCOL to decode the Jpeg
> file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.
> 
> Cc: Dandan Bi <dandan.bi@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Cc: Eric Dong <eric.dong@intel.com>
> Signed-off-by: Heng Luo <heng.luo@intel.com>
> ---
> 
> Notes:
>     v2:
>       - Add Cc and Remove Change-Id in commit message
> 
>  Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc            |   4 +++-
>  Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc      |   6 +++++-
>  Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf            |   6 +++++-
>  Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf             |   6 +++++-
>  Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc | 107
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++
>  Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf  |  13 +++++++++++++
>  Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf   |   8 ++++++++
>  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf    |  10 ++++++++++
>  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf |  52
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp        | Bin 0 -> 183366 bytes
>  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c          | 153
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++
>  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf        |  10 ++++++++++
>  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg        | Bin 0 -> 11944 bytes
>  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf     |  52
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec      |  31 +++++++++++++++++++++++++++++++
>  Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc      |  37 +++++++++++++++++++++++++++++++++++++
>  Features/Intel/UserInterface/LogoFeaturePkg/Readme.md               | 129
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++
>  17 files changed, 620 insertions(+), 4 deletions(-)
> 
> diff --git a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> index 23e7c6474a..ea879680ba 100644
> --- a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> +++ b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> @@ -7,7 +7,7 @@
>  # 1. Present a consolidated and simplified view of all available advanced features to board packages.
> 
>  # 2. Provide a simple, single package build for all available advanced features.
> 
>  #
> 
> -# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
> 
> +# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  #
> 
>  # SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  #
> 
> @@ -46,6 +46,8 @@
>    gSmbiosFeaturePkgTokenSpaceGuid.PcdSmbiosFeatureEnable                  |TRUE
> 
>    gUsb3DebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugFeatureEnable            |TRUE
> 
>    gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable    |TRUE
> 
> +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable                      |TRUE
> 
> +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
> 
> 
> 
>  #
> 
>  # This package builds all advanced features.
> 
> diff --git a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> index 649774edf7..c1bd791525 100644
> --- a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> +++ b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> @@ -4,7 +4,7 @@
>  #  This file is intended to be included into another package so advanced features
> 
>  #  can be conditionally built by enabling the respective feature via its FeaturePCD.
> 
>  #
> 
> -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> 
> +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  #
> 
>  # SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  #
> 
> @@ -54,3 +54,7 @@
>  !if gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable == TRUE
> 
>    !include UserInterface/UserAuthFeaturePkg/Include/UserAuthFeature.dsc
> 
>  !endif
> 
> +
> 
> +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> 
> +  !include UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> 
> +!endif
> 
> diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> index 57b29a42b9..56f6143650 100644
> --- a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> +++ b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> @@ -5,7 +5,7 @@
>  #  can be conditionally included in the flash image by enabling the respective
> 
>  #  feature via its FeaturePCD.
> 
>  #
> 
> -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> 
> +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  #
> 
>  # SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  #
> 
> @@ -55,3 +55,7 @@
>  !if gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable == TRUE
> 
>    !include UserInterface/UserAuthFeaturePkg/Include/PostMemory.fdf
> 
>  !endif
> 
> +
> 
> +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> 
> +  !include UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> 
> +!endif
> 
> diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> index 20d25dd173..7a76b0efc3 100644
> --- a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> +++ b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> @@ -5,7 +5,7 @@
>  #  can be conditionally included in the flash image by enabling the respective
> 
>  #  feature via its FeaturePCD.
> 
>  #
> 
> -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> 
> +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  #
> 
>  # SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  #
> 
> @@ -55,3 +55,7 @@
>  !if gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable == TRUE
> 
>    !include UserInterface/UserAuthFeaturePkg/Include/PreMemory.fdf
> 
>  !endif
> 
> +
> 
> +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> 
> +  !include UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> 
> +!endif
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> new file mode 100644
> index 0000000000..3fd1c3372e
> --- /dev/null
> +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> @@ -0,0 +1,107 @@
> +## @file
> 
> +# This is a build description file for the Logo advanced feature.
> 
> +# This file should be included into another package DSC file to build this feature.
> 
> +#
> 
> +# The DEC files are used by the utilities that parse DSC and
> 
> +# INF files to generate AutoGen.c and AutoGen.h files
> 
> +# for the build infrastructure.
> 
> +#
> 
> +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +#
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +################################################################################
> 
> +#
> 
> +# Defines Section - statements that will be processed to create a Makefile.
> 
> +#
> 
> +################################################################################
> 
> +[Defines]
> 
> +!ifndef $(PEI_ARCH)
> 
> +  !error "PEI_ARCH must be specified to build this feature!"
> 
> +!endif
> 
> +!ifndef $(DXE_ARCH)
> 
> +  !error "DXE_ARCH must be specified to build this feature!"
> 
> +!endif
> 
> +
> 
> +################################################################################
> 
> +#
> 
> +# Packages Section - Make sure PCD can be directly used in a conditional statement
> 
> +# in a DSC which includes this DSC file.
> 
> +#
> 
> +################################################################################
> 
> +[Packages]
> 
> +  UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> 
> +
> 
> +################################################################################
> 
> +#
> 
> +# Library Class section - list of all Library Classes needed by this feature.
> 
> +#
> 
> +################################################################################
> 
> +[LibraryClasses]
> 
> +  #######################################
> 
> +  # Edk2 Packages
> 
> +  #######################################
> 
> +  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> 
> +  BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.inf
> 
> +  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> 
> +  UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
> 
> +  UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
> 
> +
> 
> +[LibraryClasses.common.DXE_DRIVER]
> 
> +  #######################################
> 
> +  # Edk2 Packages
> 
> +  #######################################
> 
> +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
> 
> +
> 
> +################################################################################
> 
> +#
> 
> +# Component section - list of all components that need built for this feature.
> 
> +#
> 
> +# Note: The EDK II DSC file is not used to specify how compiled binary images get placed
> 
> +#       into firmware volume images. This section is just a list of modules to compile from
> 
> +#       source into UEFI-compliant binaries.
> 
> +#       It is the FDF file that contains information on combining binary files into firmware
> 
> +#       volume images, whose concept is beyond UEFI and is described in PI specification.
> 
> +#       There may also be modules listed in this section that are not required in the FDF file,
> 
> +#       When a module listed here is excluded from FDF file, then UEFI-compliant binary will be
> 
> +#       generated for it, but the binary will not be put into any firmware volume.
> 
> +#
> 
> +################################################################################
> 
> +
> 
> +#
> 
> +# Feature DXE Components
> 
> +#
> 
> +
> 
> +# @todo: Change below line to [Components.$(DXE_ARCH)] after https://bugzilla.tianocore.org/show_bug.cgi?id=2308
> 
> +#        is completed.
> 
> +[Components.X64]
> 
> +  #####################################
> 
> +  # Logo Feature Package
> 
> +  #####################################
> 
> +
> 
> +  # Add library instances here that are not included in package components and should be tested
> 
> +  # in the package build.
> 
> +
> 
> +  # Add components here that should be included in the package build.
> 
> +!if gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
> 
> +  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> 
> +!else
> 
> +  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> 
> +!endif
> 
> +
> 
> +###################################################################################################
> 
> +#
> 
> +# BuildOptions Section - Define the module specific tool chain flags that should be used as
> 
> +#                        the default flags for a module. These flags are appended to any
> 
> +#                        standard flags that are defined by the build process. They can be
> 
> +#                        applied for any modules or only those modules with the specific
> 
> +#                        module style (EDK or EDKII) specified in [Components] section.
> 
> +#
> 
> +#                        For advanced features, it is recommended to enable [BuildOptions] in
> 
> +#                        the applicable INF file so it does not affect the whole board package
> 
> +#                        build when this DSC file is active.
> 
> +#
> 
> +###################################################################################################
> 
> +[BuildOptions]
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> new file mode 100644
> index 0000000000..53c85da716
> --- /dev/null
> +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> @@ -0,0 +1,13 @@
> +## @file
> 
> +#  FDF file for post-memory Logo modules.
> 
> +#
> 
> +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +#
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +!if gSmbiosFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
> 
> +  INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> 
> +!else
> 
> +  INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> 
> +!endif
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> new file mode 100644
> index 0000000000..91cd1c6ec6
> --- /dev/null
> +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> @@ -0,0 +1,8 @@
> +## @file
> 
> +#  FDF file for pre-memory Logo modules.
> 
> +#
> 
> +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +#
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> new file mode 100644
> index 0000000000..a39500e043
> --- /dev/null
> +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> @@ -0,0 +1,10 @@
> +// /** @file
> 
> +// Platform Logo image definition file.
> 
> +//
> 
> +// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +//
> 
> +// SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +//
> 
> +// **/
> 
> +
> 
> +#image IMG_LOGO Logo.jpg
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> new file mode 100644
> index 0000000000..47f1672a4c
> --- /dev/null
> +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> @@ -0,0 +1,52 @@
> +## @file
> 
> +#  The default logo JPEG picture shown on setup screen.
> 
> +#
> 
> +#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +#
> 
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION                    = 0x00010005
> 
> +  BASE_NAME                      = JpegLogoDxe
> 
> +  FILE_GUID                      = 319CFE1D-8F15-4A7A-BF40-EECA953D87EF
> 
> +  MODULE_TYPE                    = DXE_DRIVER
> 
> +  VERSION_STRING                 = 1.0
> 
> +
> 
> +  ENTRY_POINT                    = InitializeLogo
> 
> +#
> 
> +#  This flag specifies whether HII resource section is generated into PE image.
> 
> +#
> 
> +  UEFI_HII_RESOURCE_SECTION      = TRUE
> 
> +
> 
> +#
> 
> +# The following information is for reference only and not required by the build tools.
> 
> +#
> 
> +#  VALID_ARCHITECTURES           = IA32 X64
> 
> +#
> 
> +
> 
> +[Sources]
> 
> +  Logo.jpg
> 
> +  Logo.c
> 
> +  JpegLogo.idf
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  MdeModulePkg/MdeModulePkg.dec
> 
> +
> 
> +[LibraryClasses]
> 
> +  UefiBootServicesTableLib
> 
> +  UefiDriverEntryPoint
> 
> +  DebugLib
> 
> +
> 
> +[Protocols]
> 
> +  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
> 
> +  gEfiHiiImageExProtocolGuid         ## CONSUMES
> 
> +  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
> 
> +  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
> 
> +
> 
> +[Depex]
> 
> +  gEfiHiiDatabaseProtocolGuid AND
> 
> +  gEfiHiiImageExProtocolGuid
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp
> new file mode 100644
> index 0000000000000000000000000000000000000000..7ec1aa6a852564e262df59929655f7a0f3d5445f
> GIT binary patch
> literal 183366
> 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
> Q9t=$LltI8CkSzrM7XaWYkpKVy
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> new file mode 100644
> index 0000000000..a636b086ca
> --- /dev/null
> +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> @@ -0,0 +1,153 @@
> +/** @file
> 
> +  Logo DXE Driver, install Edkii Platform Logo protocol.
> 
> +
> 
> +Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.<BR>
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +#include <Uefi.h>
> 
> +#include <Protocol/HiiDatabase.h>
> 
> +#include <Protocol/GraphicsOutput.h>
> 
> +#include <Protocol/HiiImageEx.h>
> 
> +#include <Protocol/PlatformLogo.h>
> 
> +#include <Protocol/HiiPackageList.h>
> 
> +#include <Library/UefiBootServicesTableLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +
> 
> +typedef struct {
> 
> +  EFI_IMAGE_ID                          ImageId;
> 
> +  EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute;
> 
> +  INTN                                  OffsetX;
> 
> +  INTN                                  OffsetY;
> 
> +} LOGO_ENTRY;
> 
> +
> 
> +EFI_HII_IMAGE_EX_PROTOCOL *mHiiImageEx;
> 
> +EFI_HII_HANDLE            mHiiHandle;
> 
> +LOGO_ENTRY                mLogos[] = {
> 
> +  {
> 
> +    IMAGE_TOKEN (IMG_LOGO),
> 
> +    EdkiiPlatformLogoDisplayAttributeCenter,
> 
> +    0,
> 
> +    0
> 
> +  }
> 
> +};
> 
> +
> 
> +/**
> 
> +  Load a platform logo image and return its data and attributes.
> 
> +
> 
> +  @param This              The pointer to this protocol instance.
> 
> +  @param Instance          The visible image instance is found.
> 
> +  @param Image             Points to the image.
> 
> +  @param Attribute         The display attributes of the image returned.
> 
> +  @param OffsetX           The X offset of the image regarding the Attribute.
> 
> +  @param OffsetY           The Y offset of the image regarding the Attribute.
> 
> +
> 
> +  @retval EFI_SUCCESS      The image was fetched successfully.
> 
> +  @retval EFI_NOT_FOUND    The specified image could not be found.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +GetImage (
> 
> +  IN     EDKII_PLATFORM_LOGO_PROTOCOL          *This,
> 
> +  IN OUT UINT32                                *Instance,
> 
> +     OUT EFI_IMAGE_INPUT                       *Image,
> 
> +     OUT EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE *Attribute,
> 
> +     OUT INTN                                  *OffsetX,
> 
> +     OUT INTN                                  *OffsetY
> 
> +  )
> 
> +{
> 
> +  UINT32 Current;
> 
> +  if (Instance == NULL || Image == NULL ||
> 
> +      Attribute == NULL || OffsetX == NULL || OffsetY == NULL) {
> 
> +    return EFI_INVALID_PARAMETER;
> 
> +  }
> 
> +
> 
> +  Current = *Instance;
> 
> +  if (Current >= ARRAY_SIZE (mLogos)) {
> 
> +    return EFI_NOT_FOUND;
> 
> +  }
> 
> +
> 
> +  (*Instance)++;
> 
> +  *Attribute = mLogos[Current].Attribute;
> 
> +  *OffsetX   = mLogos[Current].OffsetX;
> 
> +  *OffsetY   = mLogos[Current].OffsetY;
> 
> +  return mHiiImageEx->GetImageEx (mHiiImageEx, mHiiHandle, mLogos[Current].ImageId, Image);
> 
> +}
> 
> +
> 
> +EDKII_PLATFORM_LOGO_PROTOCOL mPlatformLogo = {
> 
> +  GetImage
> 
> +};
> 
> +
> 
> +/**
> 
> +  Entrypoint of this module.
> 
> +
> 
> +  This function is the entrypoint of this module. It installs the Edkii
> 
> +  Platform Logo protocol.
> 
> +
> 
> +  @param  ImageHandle       The firmware allocated handle for the EFI image.
> 
> +  @param  SystemTable       A pointer to the EFI System Table.
> 
> +
> 
> +  @retval EFI_SUCCESS       The entry point is executed successfully.
> 
> +
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +InitializeLogo (
> 
> +  IN EFI_HANDLE               ImageHandle,
> 
> +  IN EFI_SYSTEM_TABLE         *SystemTable
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS                  Status;
> 
> +  EFI_HII_PACKAGE_LIST_HEADER *PackageList;
> 
> +  EFI_HII_DATABASE_PROTOCOL   *HiiDatabase;
> 
> +  EFI_HANDLE                  Handle;
> 
> +
> 
> +  Status = gBS->LocateProtocol (
> 
> +                  &gEfiHiiDatabaseProtocolGuid,
> 
> +                  NULL,
> 
> +                  (VOID **) &HiiDatabase
> 
> +                  );
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = gBS->LocateProtocol (
> 
> +                  &gEfiHiiImageExProtocolGuid,
> 
> +                  NULL,
> 
> +                  (VOID **) &mHiiImageEx
> 
> +                  );
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  //
> 
> +  // Retrieve HII package list from ImageHandle
> 
> +  //
> 
> +  Status = gBS->OpenProtocol (
> 
> +                  ImageHandle,
> 
> +                  &gEfiHiiPackageListProtocolGuid,
> 
> +                  (VOID **) &PackageList,
> 
> +                  ImageHandle,
> 
> +                  NULL,
> 
> +                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
> 
> +                  );
> 
> +  if (EFI_ERROR (Status)) {
> 
> +    DEBUG ((DEBUG_ERROR, "HII Image Package with logo not found in PE/COFF resource section\n"));
> 
> +    return Status;
> 
> +  }
> 
> +
> 
> +  //
> 
> +  // Publish HII package list to HII Database.
> 
> +  //
> 
> +  Status = HiiDatabase->NewPackageList (
> 
> +                          HiiDatabase,
> 
> +                          PackageList,
> 
> +                          NULL,
> 
> +                          &mHiiHandle
> 
> +                          );
> 
> +  if (!EFI_ERROR (Status)) {
> 
> +    Handle = NULL;
> 
> +    Status = gBS->InstallMultipleProtocolInterfaces (
> 
> +                    &Handle,
> 
> +                    &gEdkiiPlatformLogoProtocolGuid, &mPlatformLogo,
> 
> +                    NULL
> 
> +                    );
> 
> +  }
> 
> +  return Status;
> 
> +}
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> new file mode 100644
> index 0000000000..fd9c489815
> --- /dev/null
> +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> @@ -0,0 +1,10 @@
> +// /** @file
> 
> +// Platform Logo image definition file.
> 
> +//
> 
> +// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +//
> 
> +// SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +//
> 
> +// **/
> 
> +
> 
> +#image IMG_LOGO Logo.bmp
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
> new file mode 100644
> index 0000000000000000000000000000000000000000..d1d099789fa794648b86c046f0320a553954764e
> GIT binary patch
> literal 11944
> zcmbt)1yozzwr+6OVns`fYjKxAi#rsGl~SZwaQ7xSMH;L{gF|r*PAO2VloTiy0>$0k
> zA3gV;|D1Erd-skz-pU>sd+dzt`RzUD`sO$1T6a@-zX7CbN~%f#G&D4T%KZm$hXg1B
> zFwoKe9QOnB{=mY;!otMF!pFhE#wEljBqYEmARr<pCnX{#BPJjqr6MJJKtV}KNk~FX
> zLq$PDPC-fW=O$<v_y57f!o$MCqaY$6qWE8ryDtDTT)+U@Qw%gR06G~O1{vC24}cMX
> z20+IEVBF*V`@qG+#=*abiT>yJ*Q5Y642*m1*w}c4#JD&B02(?5CIAZ?hYS~woLK<)
> zKwQ_-t)Akspn~^1N-8luBd-s&V-KGQy>a&dLsN2V>Zoa0L=^R{AjzqD`Cms_MGXv-
> z3cJRIUxan{{M^5{K=Dte{}aNWt7QKG^!KYX078s=v}71$06D<t&sga1<Y77-6!?Fg
> zkmOqR@l8Kl{#s|UYF@;>+y`NB5f6%1VS@y`ZtL(3A7^4K^G=(4UE49w?T_0SDkG($
> zN1<Fzi-#BCZuBd*+s^07kU*dt{v81Q>)gk~AQ&^pb*wNQgm&5Qja9BOcG>LPphMn9
> z?<LSCzG-E!dB<m>vN(4)gekvjlgi*B7D+O@84|?4X;VNd+d{aB!>#pj!RbY@V{-0M
> zPKO!E5zd!e2f}z9zFqo?RzF^@dVZHH#ahPeGa{TZpU_*TS1M}tX|w?EK$R@^LkRGw
> z!2NJxRO`lH|1I4eAlB_T*bxj_KwZ3X{pDi~+h}#8{=KYTznUxyJMG)ThL|nWX9zRy
> zjlcdeRPG?hqS!3Fs64*K%@X8ETgA5=WaAe}8M~Q$o<KY<;?t0OTsCev^Aip)xZ-&7
> zEnwj2m76xl$_MdV+x{H|P#S4>kN+4mZvm5zF6{kGTDNoQ`j$h0&=;2p+-Mm#r;q9a
> zs>e7`0_!VEV8!}BIp8l(V4*`i?MARK`>JfxT(4<Y*rs-S%vWL0!r{>*Qllw5>&m((
> zI+~jN%Lzeg%hnEzdBDc}>Pl=WN<Bm6{2?g>c}Qq3kngxNWsM~L?XtNCxd(st+&s!y
> zI*EgOrXSDx282+Z^`WkNLp5%?Z5T!MlIZj?Z;RlQ`kXhU046A8Ah5sU<#$$%HnW8p
> z%i@k_8@M(#J9<$Rv@YyRIr0Kn;u#U;OMJW?y=?POH6LAyzUFU)7%XSboO{-I1(G~!
> zv&NF8LJDonPp@=)(heT{7*k(r$#v`!oGxJ)Oxu5Xb))L#NmJ3CE%K@T7NbCa*<Y3{
> zSkVIUwM1Y;`p{X;$6MH+8+5bvi99ug<GoxS<aAQHwEI+(F1~ZtI!5~r5Mw8E9(Xvd
> zUrJtY`3-q7^p>6A$y5?)h$gnjn>G8wL;vS%m_wlDvulFiweq(@6$qzti;NKBX@X(6
> z;F*7)|CQu!YNVQ8kWB*T9bgj@^m|rs1G~^qc*#HIz1h6Sa<Arafr{L!p+et*ooI{!
> zMIsQB5uqH1voeu*r4H(0{WgJb5FYpS-5#cI4DNinbgL(w@pbDN{bLdE=I-+BLH<6@
> zJDE)m`9pQthFm2ursEo$*$4&bDm7)9a5WK%-_c`s`B)nR5h-@4#bnHT`3_b!JBHow
> zxyGDgImnY#bM@V-uG(2(e5mx8F$Jwj7So#v1GxWhp>ow^hy!(aeiO^a{iey<$mjMM
> zx06lB1|z#Qq?(cCl;i<WuAU%C)-koQcf??CdqKwly`#s}-)2PTm^a{pEuoxR=C#gC
> zs@TJ8#4zz8InTL)<1nfss&!dP`@^_Ya$?Og(x{@I4dURS)bN{D0#kL^gFy7@Ppuue
> z>&J*p*N`Na;KD0%B22CEY}XdL$O}WaZ+p$(3wB9c1NkA!>=W=o3Y>Cg12TO*zh4fT
> zSA%uomW@1Gl5o6W|JkMiZ5ZTo2JJN0fGl5hX(@{54lqcN{n;X4wBsu(cO0n?&$k<J
> zsY3z_`2DcPSkp_>0+NTydjm@!SeX7`a!6K%9sd(~(LGQ<j~Pc%LnEupS5FcO*+U>o
> zsre5rS}aW)s}@)gnlg{qR7-r<5@SomE6N08vY@4nCv<_`8+xJm_R8a=2_UR+*Mq*)
> zgafvZ2Ljj8qM30Bw7#k!fg(zOI?QC5TacQR&pROVy2xtX{vDwB8fX<$yY_KhYTFe`
> z6V!988l(NgW_i1Dq<Y(X2h&?ef9)ZCl@KwL)yUv}nzilJ1F5Dx^?+I4;WOwVxu_e!
> zrzuo)hf7U<4or;rr^mo2%+RXu<Nno_E-MqUbaW^+bO&JL!B!hoy7_Fpt8o9V3-J8_
> zw4D`mw~0ZLxk!!$nvP_poz__f6yn{K9eSf)fm1_~&V59f2MJ6{;xb(dWT$mSzWWSY
> zCQm-AL8Vn?b<aePPdE_Ih@94d?-qAua5UXMO_vw!e(-22`4Zj<hC-p6eI<pRAWZsS
> zb8l&H%4Ch-r4mX`tuFn3S!aPU6@1f@eFyM^e+Ki-R(kLYWoNjiUT;*DRZNqc>Boy#
> zsU_#B%Fd9O{MYP)g>yon?|`q$sUrm@?xDp?`?@DAql@r!<Mk7UpO6q~4Sy#3d1$Mo
> zTo{ex<xTRjqhMQ<LFSm60Y<O<I#Yc?bNQnTO2}AiAPws`T^iO`IV->R0o83OvX&P$
> zoGji5r%^OavL<0l$alF^vw$Ac>|(o{QnE^3Ry`M*a?wj&)+Y_xz4E&rZKb(WmB;aw
> zz2WL)HB+aw{~%q=@s*V?B2}?&z5{|z(O0%Y)*qu1Oe@xz@Kb9;+uQQs>ULA{b14sy
> zaP1(hq~*)$ZVP@VRo_`kBo7p+qT5%FOI`_0#d(u0b>c-f3!lIVm8Bphu<-l3=^cEW
> z5u62#D^7jk95y&DxXZ`h>b@AM7?6OO@AkWH9*FHe`{NFfJvY~84R4JAdIy}U!X?xb
> z58KO(*<D`X^!;n1{tGhU-gB>3{)H<UNZNvr5pSAGpABrc$VQ~|o6WLIEux|oxV!xb
> zjD{B6#&qBk=jK*4&@lte0NvuLi)GNxZo1R;cyqG1Yx2L*Yj5>_w5=ykbO6-OoIGc@
> z(%$_%q49Wzrf=8f*!ro}6KlofhCpLZjOE->Z=+CSrX^7{Q-i;x1D%xidFpr^$Jo}7
> zhmkhq2W29QI%yJysC4Kd7#(ofy_73OyiC@y7PKyszt_yV#^~28xfR208mp_9oae)m
> zG^dHP_;2xo{tkF$lg1()k*<*C)r*;nOIP~r6ad&0X7agWw6Qp|J-7|syRK*C6c<&+
> zm#Ss4Iy0oPXLXj`W+zW(@qwy&V@v`MIHYUdw2LY_DccN?H2Ld{sdDKhz|dyw<cRAV
> z&Gem_HJhM%1tm_vV=`caujL}+9iW@4YWm2Lc4A9|zke3g6~vK6_RLS|#lj5s277P{
> zEBjYSK0StH-KO&ct09341)J0(vgR5_<Qr2HAev&AVpIG+5T^w)kZI{1r_^2bvi*|F
> zcDnL_KAbl^aCHKjRI~pisA~@sU8+Q)Zt{k)*^a7a<t5S2=hIZiF*eN%GP363fJSp<
> zcSQrUsjo`|cIV$*k0&&gqjq3!yO`Y-yXx&-)rd!0)UwT<X+mDe9L|a3$;n<F8nDj0
> zbt2XTx~4+j0mf`@)4?nrk_$M>$6^uZ(~Lx6J$-xXozJ66o%(}%sgjYss?*LK-pR$?
> zU%@5+mRbI$3$X*b?*OPJ&08okXrqNVeO-9(A*20F*RkHp?htHs72I{MQs4c}4ZeLk
> z!TU2Oso2@(aJR1V5X3wDaphN2Mg8&AeG*o(hZS5rss?Xn>Vc!QRV*{#nC_en6@50g
> zVKc}m%KkiBa%Kt{QGrG>syls$f6@-UE+Ri1de4jMS5)7SA)p|w1fwqa9J?pC#kfXe
> zGxL@vL}J@>8?yRiHd`zdLL4I1D0c!8#&K9GN42A(py^jwrB9cRGct&$orzhT2;!WU
> zFfR@C;7Yd<N$aq3lY40;{xgnx$m>jpcgp*rllkD@(_Pi`@^5xz<3~fgiuUvMmtO!-
> zG@_JmlSGZTlwMjxkgjGKpTrDI<GM9TNySk!(_9<8ixLJ-fOl4;Jxe-K_~6?SQ|fCA
> z*E1W01uG`y8tZBT$%ZihW`T|#(O)VXN3Df2Vv6Y}gN)k{Lqi{RJTkfP^AqcmkHfpF
> zGZ67BmA;S*tg0KL&I>z<z?M+HBmf=Y@D3o3@UQ>-JQJE@y4|C7IZj3HX(Bu)fyKW4
> zM_Lmkd1?IK<~U-)bUB*haUKu4-dY+nq$>gA`eTk+_~zY3uflwPv_xjVj~sG_Rm17j
> z!yD==(psSU;~lX5Eeo<UUX#XWbxQEc5$m_VHv<-gC`E&MorI0!o88rPSJXA3VSq4J
> zW;H2F4k)cZSl4}IWHQt(BebeK3Lg2YPDSNn;WRn5Z+zYE#()7sM==;A4t5VF6vUfT
> z5#Nbe!Cs!XU6E>gQj+ky-{@C6772nwu!48=I>ERODa#OzoOJI%F%nh}29ST4E3B{(
> z!Be@Pp{|$+i%1ePIs17uNjh1LQa7t+TJ~;tvm!lzBUU@Qtk!-IOLF7X@!35lin4ES
> z$q5#7%y*~Dyzc-tsrB`-LA8RNHe{w;>-xn(E#n4-q*6GB-9d2Xq8+iaaIgcL$=X2U
> zcX?*P$I?ZafVe1pRh)XApuO$7%#e8=$c645;9^~d?uQq2*|kT#QPHdAIX(fQX8KnD
> zCf&BbL7v!-Oh*ez<X_bjaLgGJ)a|*ozS4@yfc;pPuxt$pvc0|T{2|O(@yGv8-t%Ao
> z(A(QKxtlrR`3+w9Tn22T5~6kRVKu9q={eu4?G|EZyZcH2dw2o7ypkWS$&rrWGJR-X
> zYRS2$b8c#yQ0^V%$-s+H-j&OZo~7OFwssk_)$i;vp}qqU;Yd+16{VZ*<`yLu)0=?x
> z!iWZ=cLBcX1S=~eT~4wz$HN&nm*iRn%L1b-y^{bgc&)ddW&TgNrHAuL9Gn>s7Tz}F
> z+btRUDT}eU=)~&faeUd>cG=?hCic4iQ=i;ygmP?_c@7yHxTS>kEsut1SGJp9yz!wU
> z1N?El)P3f9=N&a$L{-pdtjgPjuX;~yQbbtecL0Z?=v$m>rjs|+>m|&cBEv*uaWV_`
> zt(Dxx=Z!+1V&_iRq9ZnOWVhhRmZXUp^cJmdw+<8-oLRy<nXDAOF<0P<gqj`B63`4f
> zYueOWi3y&(O%PZXX71K;;_cxG3+GiX4ub2-vVmRhZKXyB<G9}2B3UnCn#s+Rd-omV
> z#t3rBMY48UydL@618@g;@%uIgGS=+skt=2xm~kl+#w`1Bg62E-VPjZ2ZedRXJ4)`m
> zQyrg))>f0D%8bF1;Q&eVV-%;U3qox$b%4EDJ~^T77)y3lJZMe(Fr!H9gK2jC+)l!0
> z;U+!oA^V=JC|OKjuoxyO@DU==pE$#lZkMjuLYa4N8-?uyEKB>^7}M0iX##x5sV0>|
> zZ%f8<2UyTC#1X&Y@Ae#F8C|WuR_l!s6J+hu)3t7_Bb3!^lvL|h)z+oUg73~=+Hq%t
> zzxax+s3$tU$fL3<^<cAX%8XBYWBSmJ;QeWWokbt!Q^;?F6i&r@7IX>)gm5baMD=rm
> zR!gARP?RN?S&k%wUL!e(eMn}!rZWnY<OMd8$`>!pGD^2c@fIMQ!+vev2pgBI=}L{=
> zGI$P8+BnG?P*YWN7Cn{4;$?)a7;oqzJ8j5i3@BN@-2r&ZW5d^ftTcV^I~<nMZ|74r
> z4Nz}%_Et$GmoxyYppA!$ZF6dEY~q>&v+u?7neSLgLF2r?Go+}6Na~w%x_5ODMRP#y
> zx<vDz<VIHo4)mJMj}3YfHuik+J(QxC`AJArckW5fYjx`!9oYIQSnTLwYu-SYR%yp#
> zx8+cP?mJo5X<kvB$w}ad3|81-;(|z={y3gw1@t+IRa0g%+$nz3=UG{5m*v~hhpK9)
> zS0|0Z_7qfdef;D^``z8BBewWOC1tVO_ce``s8#V4&ng$v89g}hO(cvYlS2ZT!nsjv
> z{(<>dC-X`gy;m<Krvtltp0+*9=^k(i_A#?4@T4ZB_l(5b9P3aASm~B+2fBF@evzP~
> zyMi@-XmIp$F!<Bp8IACRTd=TW-_tCXg%KT#ZXujK-nmcl<0)*EZEf?45YKDpTx0`w
> z8~yxw085D1veo42qdUL|@R8?(m^i`3SD4c@*ea-B=Td=u1jBsNMQFQv880yl&b)}m
> zI&H5IpmhACHRHVM9SLH}&!XoWHdoc=>6`WJua_!{D<#JR4Rlw?Rrl>NzJjaQB|!+6
> zCg-dmdU!yc=R*`GM@Ys9$<KMW!omJaq^|1BXh0WoZ~c*+kQVP#My{%lgyodT*a~AS
> z4F`*9+-&)9@uC>X0IfR!vjLM!iX1L!!-x)>1C<e}T92CqQIW8iZma$-omU~(K8KxW
> zh3Wyf6GNX4vv)FWhDB4+*sF&Xgu^55Y&#<ZYANJXUkQ#_LGy^w0Pp#_Qd1Vj6MWnn
> zx-8jP8E*|Af%h}glpO2}v5^$VmxGvK?^EX>g9kz?CrQMUW`d$GAoEY=%SWK#EvZ7M
> zCIBm(6h<-gZOO9)qXwr50!%Rnx$dP7cyGNod@G+iI`x580UhbpfS$svDicPk^61h|
> zVtFY)!p60(YSPS>-Sp%5F+t&nU%T2}W_qC@<zCHFE}+aZE7$fWY*PAvB5EwKyX|OX
> zZT6!*zwU#Wim8fHQ2hl%bQ=3fJs`x7TnsrXBTTIdL~9<}#CSPR*qCX<2NGiG5X@ok
> zKxsTpk!%Q3Kg2jUpy-O9;(KTdbgDJ6;scGYaF)0|5j)KC>kVVZm@tsPT$fZ|sC%|^
> zEp3;|{SJ9aFWMBU4t)pzYQw+Ou~%#(UI^-R_g4<b()Ng$eE#<G1_J=Tcu`CcLw=|i
> z%(W()+_Z3V3}4pYWDZUOqS;YAc#u4j-N=95v2ZWoI@EAQeh3W{br!gG3T)y_!&<V{
> zvK=34k4d~*!Ul&RbhX7?q+6>NeVKlx<C+46{hpgGe_7%i?Itd5ESh1jz65TYU<B)6
> zT(gY^e<qlOg<h|JRBYp%qRMT_7|P>h|JkMrxdWKsYr{6+z>b9$uVZ)A?l9u5Cw(=l
> zv!gB~*kX;A#1N8Cj4fPR!MLEUwXGm%r4>Ad`r*4Vt)%f`C2ewpa|`$M5%B`BMUZ=2
> z!-A=K?rk|78$~${rNUm}Z3H(kw1*-*fEAZr!IN2f{X*~K6>^$T)|@?!FIt||O3~Rc
> zhA~UA1c=ELq!ZGDoet9`@h%;Ej_FmkN(~8r7Jh+t84f&)Korw>l60WBT&6aT@d-v?
> zm2;jmw!>$N0vgjF7mNsl_nDja8A@YW8@!wYl~e4q;8#l<QsMfp{}Z#xX$m(J|JS5U
> z9NrwVzrIEkC^l8@BmPxZ*HgE3F7n5-Ncj!BoI_AyJsD~|g=`+k!oi7?aoWJH>kCbY
> zQt*{>`kIUDupw3OJ)m&1U$!7ZNBJGdfC(e{^h1bs2hWa=ACI4@?GrNOP@&>tS}U!k
> zECP-JIm-w7Q<wFa`47u(Ng%${2+TsSB3DJjQaEnpX^G#QC`x_$O#30(=IHDJKU{*E
> znq2D!Ym%bl!@bUtk=L=Jz{iXJS8YqX_HZ>~epKAz;|Ug{j=46gw#fV9jm#=H2vBaF
> zqc{VeZ9aJ*O|m(R$qV~<UD$Ra(Af(o@p*x@kC3nQm~)`gF07H6Fvnuk@kGMrT~U&k
> z63%C~>q0HWFP-P-jXOK}kK%AvQFuPwVJ|_q1I**~ISx@6mv)jFu@9ScjpGp;_667o
> z830i@PHE!H*EWW9DXClZ>WyakQp5)Cd5K$mk8<r%EMzSPO1~jUAY-R~K*W3(sPjhD
> zVxxqqw7uKqcjNqR2LJImlNHHtF`z49(d37vOCS8{fQJ5OB_6b&I7-v>eAGhq3z#f1
> zbzEj}>%N~(@nsTk>Um>1<za^9C_g)2z5|Hf0aC&7O(9op_MM}qF70B#F>~y!r6<Eu
> zFJ)uQ+NV9~XYboORJ?;};8GLFN8p5X3yu=2jc?@ut%6*~108P?KmgK4(KXNvKy*pL
> z!KVf>JP@j!sH8hKV);=S15yWfJ;N=NdgwugYx!YmrXm{I%&fK#TU~qH|A#I-+EImk
> zpotaM0qAm*kA9VSUPJliV6>b$R`a29w=RLI$OA5((38Q_U-gp8_RqXAGDr*$6Yc<C
> z!A1waJ_hCOLq4C$cd|81&4q@?@0Us`sWP_DQP8j6WB&i42!RWAzfG%<SZBuF&jbsw
> zcV=sC<2*U)Zvx6&@HPHB7N9WZj^zAA#F%FC(v2MfoYnCX0cE0ops1{ry$ggR6NA(M
> z2^+ABiz4||_DBnt_g`NOAgys$^T??YrTCx*9#P7gsj_0wsgw%}Xqr<N{rdWWS!Zg-
> z4H3qP8xIrMG3{_HBo`K3$qL!mbiXxmITj}Q)l(geS7|Y%c^d&SIuIL<81BIiw@DA8
> z(|T*1(_W3_%-s1!Tv(Zw;o%;NU=NOK?F+(uv~UO5Jt(>ZsDe6<Q8=2Ov_9_>gm+$F
> za=PD_ejXn3u=GHz!=3g65%;*%m5TnFjrTr2{7yPIC{>vXfpr&Gg{;#;sWSJ(HnZR^
> zP%n=w&xEgrDM*LrnO*hLBj!dEc|0|899IAuaAz?2JI#nH^vG?g7Q7VS0!wCo<ZO@^
> z0KlkE0xHh-H6e^BOp;Ma3_*%o2XMn!Ke~iklAM@k2SzZC`s>rM-2nW4G!i@hv}9Ct
> ztTN_#K~bl5i+0oZfV#D4EkU_y8{zv-hX`i~&TkhTx_KAAlZMXguacb$Fjxx~I@r=Z
> z!;NFfic&3^+z5R!85}UuWhO;Z!ZZL394B?me49=eqOuTdHBR9N^pZ}Io)F9_a&P}e
> zgn0*m<z+k1`T1D%?8}u2lQx2_4pWcD?*${(tPIM4x*LezJmObkESuVMX6#Av2{@)q
> z;%=G&^S5WtA0KNPuIXV?5iorWd9CAqQc9CGggH)_z|f}T&hTT}HJByBTw4uV&jUGO
> zfaCO#+6fF2N1bE*vTX<ntB`4Z$oawb9h#`$Qkhrb`F#0x2$B;|F}n}#0G7yKJ)3G~
> zGmb;+#!8?Nu^=B8B}~6_koDD8@oQ0;8LxY8$1bzP8AJ7)q+0q1`mE7ui}P`G@`CKS
> zAGrqxc(``};NHt^BcAj<@?US^gDtZwO|%L454il+QUjo2Eadr{=wMYx3%+4fL<M8r
> zCgthu_mBMfm0Q^Ou~pM>xd%f#Q$S4T0w{R^-Y(1I8*G={I$F4+ZH`)EHImR;^vulo
> zqEsVwKrT_obLqcU^i)YhN2z>b>5DYGpEo^I_fD@eR5KjES*2j(i^*^&SAK0jogZLd
> zJoBPN*F*ocb9&zRk?eQZ`|ljO8R|Sr@l&A2#1FN4$?-j*0040pa7_;kWC_KwXa5Q=
> z@Jl<Qi2U@Wd4o7@R+h}pWQh7Yf;)%&B@-7nJ`-pAtx4aT(+#=;D6HH83+wW*((szd
> ze*aj?o#`ShhNSL$KGT)e?==07c$=nVR+_2@j7p|_53UWk4-p<q_m!^m9KMJoar}XP
> z@k8^U2UL?(EBk)#6yEAQ9WzT6y-e+D=3KHcJ4s13@F)e80xE{-LyIf+zYrt;J=3($
> zy=b|?FcP<^U*a1C4!G9G8Z`A<(0`-5rbNgd!!PF>3VpnFG+GFsh#+<(#y@RjrT!NG
> zp)J9QOI}6gdzgjC&|T5<0AA*gpSSj)kj608I{nqe!>FkP(W0L0QjS{FPf<*qrf95|
> z_3?R<@yIi0yQi;SnprC>bm|r@Hait6ce$t0sY6q%CU(YfdKEX1ndOgp&H>?!J+uTv
> z_T$ns^dNh;hR}ivc2`(HlrR%NR}YWhuXxS0Cw20jCM<E;@7&)<6E?4-2r%#G9248&
> z#6snQt3jV<3;8Q9F3vYgB1LC%%ZPn>#)=Zr%GCX>A`>>euKfT$31(FegZ>YC))nll
> zr7O;hktJmggtyk>XEX`D$=&X6I>LpwNFMPLGb`G#{)Z?&L+Dfq#-WXYFemoj*{|FR
> zMK>|)y<Hq8Z!o5pqA0FvVtx%x9oUp-@-IL<YZ|4GW-gvK2CXJjg~uP4Fm%B-0wOEy
> z>)o*On|^rNdNqi6#-ylP;?MR%u}1`}NOh`nx9G^GfUxsGYrkSgoS*7xt$dJ-bmG`1
> zq9e&siyn=8E`=eRJG>G$8U>^t54w<Ui>jz>eUS9XZA3_8ueBvjk&Ce;0@%PgzU!-T
> zawecNLK5|`Rw}A9eW5D8-SMIPpk6%f0G_g*2NN~bGLK4GxM%KLEp3cipF)r%cziR-
> z?UR<B-y@PA%#hZ@A2C_#4_!xqUu`zx(HRI2ad)pAN1Y+fGTf7M52ef0<c;ddaZhzT
> zC_Nho>dXp}tMw&EkEI(K?akLs4D<?eUOtNX+rmaoFky3z#;CL{D$Jp<#aTH)9whMF
> z;t@rqr(q}>k$5;MgM#vFBOM(KP}+30(<^IfD|;N$Hf|BeE)O=ovxGX=<<B$AZ}a;V
> z$Rib^)uXhoC;=+7-e-sx3|KJt_9b@ZCSL^Itwf1LXy2Y-tvxli6`j+7j0P8v(r8DK
> zv5C^AeOHat^{btzSvH)_T-UyHP3=R5`=uffP`~Y4LlViPGn@0nS46(lLl})yAAUYn
> z@{5}YBdtMfl2&#vHI9=-fYsgieqAdo`od~$n%ifM1<v=21h=~xCNB*e4U&l?5(^my
> zFsgM-jsErSWEYukS^0s${WHgJ)r9>Pdrr%`#S#>zw#pkeJSqxl<3}9YZ!+bPL018-
> zL|CSXw=Jxd5|Jdv$2^^QEnG;igadkzVrjG{IsPX<y6t*y%clEIIPN1-s<Qm+b>YoB
> zfK&XpJgYP(y?wH}QBYiTwPEg@vYnUI+3|6iONY#|7#;n%?^~~e3KQ@Vm(03(%x{&`
> z?JlMf;H&F#-^{UKR{l#LcCA`Ui|P7r>9f6Dgi&*<TD;JAb;J2(uHil|C?pWGgiRTb
> ze%K2mqAW1b`G|haSJ9L;HgFoN`KkVT`~m(nT?j;nbDKeiF6-;S@mRVGNqQv1JATd(
> zk|y!Q7bMIPOXfH|e%4qG7lty)bmsKdc4~{CFkU`QoZ1(g>I&)M-n`$WKrOne+1*Iy
> z;;on-O@4eBKt|r*U5j$PL{sy}X;8agm%wWJxJLJ3H8H2w9xL}+lAx5+`^J-~*;PlD
> zNEBK$y?ueKFmDfMaRHk75QLT0UkDYe`a4bYajq@*yEZMA>7vy15*(sgpxX9xkS<_b
> zli3orj;~h#tF-9v&gQ8OqxW6T-}sAa$hxxEK+qQ{^ikk0P6<&7J5_;)$Crkr$hJMw
> zmW9b{54MgeThpmSd|T^BNAFAVP;&)5ME!RFY;V}-76P%Ziwdh5qHZcQ$ifuzLe|Eq
> z4o+(j8-K8KU`}`H9o%%l_{ft)VHlHXa*k7kJvw&G<LG-dGM13zGiyy)gypmOYg5(j
> zdFLMu&UsSfb|TOJ^g`<^RV2aPVlrA?^8xn!4dh2;6<4F+Mhm%={$r|k;4|rQ-vCM8
> zo^s?#hlC^jFnEtFMrq(#Wkn%;XG_OpoKa;T7V%d@{JvxQSAYHAPp~h3JDPsF*KE<-
> zLY&zbZ~B|@;pUVb0~$u7rh30NfgB#!D4gd5IwlHGpeh|$+D_Po=KASOQ~A$;RBrYG
> zrH;Ni8|ZS)y=)#*k&(Jz^kl1Pp^^$9zH(09rr)<|%9_U<sPsL#ojdt_;*{7_yU?$#
> zHsi+rhU7NPo2-T*0<wIsr~lswS&aw-o4l-|F{svG2NhZV*siLZEK1JdNzm|?qS`CD
> zHel+6UA6W4DtDhN1!$IkY(3f)+|{w^bZ<6eK)IVKAn~U0ra4qL4Zjdw1*o;IGxz@I
> zE1+&2B8Z8)yvlVG$SAKk(vXONX(+~^-1FXzG0GpvQOe-U6qnNFq;jyCV+yTeeIe?M
> zF=ax^az!;(Xu=y1W4lajzkVj4Jw0rrkhO|zT`pTp)T0PWUl7}o804c_)wWNu>M)(<
> zRfP!DM$#G8^^nzII^#Y91Lq)%_wBs@>jOjPYF}0w^Nz~Y{&Y$4YU(#qe7f+oINR%0
> zSneZe5EyK0r_Bkn`6XthG59f|Xo6i-FRL}URYdisz<{CaM6zg|r!KO?%wM2;ud7(O
> z`aPW0(IzOpA8gG_a9lqzr&*EUhPTNSXva#4rR?$b4p1fe;=IM@q(aB=Z!vd|icTm}
> zGpPUE{#SsKM;tGA5@~9og4;6@QNhN;_xvtc09-i{RkcWm=QxV#4=QOo$!Oo&57%&p
> z;5H6xtC#a6@RIH0BwLOrK<kt47gWVC$?4D`N^VkJ9hnEFR?h+(XG<oVhLeH)yvt&O
> zVhP%YJ>qd!{#3X-ES^d2SW*WfLq3MSUMYN@0anc&jB{JhPy4^7n#vy}enEjqrAEFf
> z@2o#g`S$=uhs@SZJ4+CCl~9$CS9)YiiBZvUdHu?fR|B$d!jfs957AjP*l4u1Y43<m
> zts;j9&7Sr%wK)}cqIR}m87;s8E6l#@u=eLem3~gSwJGQm@6g$9IrZTBv5fVlb(^rv
> zbfa98pghse(AQ1jWwfsgSo@fj(bhtD5970DT`wo{?1cW51NqGhA(L5L*XB}}6D8b_
> z|Ey&EaWnSu0)OoHzOeFb^KHJ2@Q63ij7Hh3FaeR8MX5^$752g}VhlYLP$>0JnDq14
> z*J`h~t*11n9~e(RHlxPXC?WpP3H56~Q)@kyDK$hEd_V&0I4H=5%>9Dx(nv}Aa{_zG
> z-ge40o9{8bjAT`l*?b9TT<mmOqzLjP6*7|GTs4f$PAYy_Sob(`rl6~XS*MW2mxUJ%
> zRDL;<#P}IEu9TkKF*}*FJJCMtL?GirpZDi26FrHl8@Rq8Km|4meIi42QhTLtxjLeT
> zbYtaGJthq(k@oyY@Djp_N9nh8#y`Ybe!^BB_s0I^7_4$#qDn!xhP(2i$JV(qITOp9
> zqiioJFug}7!O_NMq#pugIX;83J?9^g%5->9J0*p`IQ6=jC&wtovz|OC2p^U-<2a};
> z@A|y{W&-ImypnJAD=1qL_$m>JR{vqs$Y>JCwI3wdBm852pI(`|Zt3YMpw1pVYh5-`
> z85W<vB~$-U<WG>COBDIVZS+QOO}q$(TQ#Nzn+;_qKSjuf7Lql~0=#qZ@edc3Gqc6w
> zuDOQuCqf!yLs3jl)SkQ_Ib>6(x83F)+CJVOU}ZPflTLdUhY58TyUP5Jnph|V8JT&$
> z0i}|KN97gmPgsbqeyl>!|HIdR%nl1D7z;7re_vb?e}4Epe!tJsl-+wy=_(ZkJg<DT
> zEvEL4A@nTNj`u2D%c+U6GRm7sMUgfrmEU$uppRs#)bXY)X6JQIyX*1oY*GW}k<IF|
> zaHNTenY}%}0>Ve_-3}%b8Sv`foIqQrrT`Jps((eiB8}y(b9QWd`zJ*gt7u_b3)YqS
> z?rft8TYK|738T20zTZ3BgyQdj<yF!!-+<;)C1L4!1c_^;4;S94pF!2d`qPc;WZ|Gm
> z$=p?mdTXZi?WlOrNz?}Hn0kO+BcXq!w&!+3;C?@ulaBw^a$IrbvICn|4oZOjp7J@Q
> z6PsD=TOH?YVJq7Ch;FwGx#V1npTHz!^HV!(nfI})F4E_bl>$(?srMvD2piEk-D}A%
> z<j~7KBcje7v9yRgz`2d^!wHF@gh+a`g5J?Brxf-zvx0$7o%Pb2kw-cp4adkG{%$o&
> z%dt$oANAhhUA5or11|lcp*|;ww*x8)3VP^z*kA6OpErN=0m))ADYTF@`CT)6la8{?
> z+f|ZWf991XRNc$TvQ|@weV=#ElM<i8=Qsn6Rr;}-n7EUSp2iVM<FUbMZw_i`22q@?
> zs6kr|WS5Gg3(NEg_h1YzK}k#5M~9UYqs%eZ=H<yJ9V4^WrSohg!wRa?csHNr89x&m
> z{(ZLpi2xlAu@RCsm(4Sx`08)mNv&L8r%^9&=KXXiq!o0uc3c)s_3#dasg&~qSB{bV
> z8g?eJR!y(dC;=%y-V>f<o<nsoO6GqeD%xHE#XYZHRHI(j7p+CCP-Ui*0n$KF#F=ub
> zCA%k+Ua0Ux^ZzjSk7Pm<?^iY@oAz8#h_IvYeFI$QirdveGUY0{RKDaglnu=1pe(wB
> z*40*Kn2|Lvni|*l96DD3|Fz|IIHPh>T($*^maO<uC)t6MZ+}Z|-}}*ULjzg&Ifvb)
> zLrpme#6GUjiz)KUncK_9RK5TE3Hpgo)b5S<asRor(EVPDhSB*eVcNWZeHDMh2Hc(A
> z^P%@%9RB)C_C;*~yZ4HspGFI0Lk$XKdV!fb#%D{fU>^&ro^xH*#G(uFur6owzMXtg
> zH^0Zh(t-EmiaBl>`Tcls+HJnZoyQ30vFByCb0O*`%L)nX5D4}#VfMp)J~NWKw40M$
> z46D6ToGO~*lIx|Qb75H3?+#X*QJ4HgOgj?bLnD}%eB&%k9(+&PNM-6vy1)%G5g&Xm
> zBX`D*Z}!UP+%JV68h}7!&Cyuz&u9V}7g4K{@atIECE=zaGy5se=l;E2KAxQQ7dY`s
> zr3-FihZjNNS)Jd^rnQehLso_+hXq2zxeW8)=t8qkWCCMC<+zh+vXF5M*tI8tPmHQp
> zcIF<>JxmNil^W1!9({@=N~PdvE&Wi)<0FQR5(FAm=R)N;VG|Ne61+HdUTm1sjn}z{
> z8d8p$uq*YdNAFH_9Oyf<DX1=yz4b+kSJ%<hu`MRZnK2M|$Wjau(<cw;r1U#JF<VIN
> z;&6741o<3%PP@Ksaa4OB3)64J7cnWLei+@k8LxE27ubX-qS4?UH?hja^lyZXxwA;|
> lp0r(+`K^)Y&AL5T(>;a;tp795|91lNzXsubc7WVX{~rvVe^USe
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> new file mode 100644
> index 0000000000..5ef93461ee
> --- /dev/null
> +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> @@ -0,0 +1,52 @@
> +## @file
> 
> +#  The default logo bitmap picture shown on setup screen.
> 
> +#
> 
> +#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +#
> 
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION                    = 0x00010005
> 
> +  BASE_NAME                      = LogoDxe
> 
> +  FILE_GUID                      = 76ED6631-44FE-4ED2-8B5D-1B5355BB25E8
> 
> +  MODULE_TYPE                    = DXE_DRIVER
> 
> +  VERSION_STRING                 = 1.0
> 
> +
> 
> +  ENTRY_POINT                    = InitializeLogo
> 
> +#
> 
> +#  This flag specifies whether HII resource section is generated into PE image.
> 
> +#
> 
> +  UEFI_HII_RESOURCE_SECTION      = TRUE
> 
> +
> 
> +#
> 
> +# The following information is for reference only and not required by the build tools.
> 
> +#
> 
> +#  VALID_ARCHITECTURES           = IA32 X64
> 
> +#
> 
> +
> 
> +[Sources]
> 
> +  Logo.bmp
> 
> +  Logo.c
> 
> +  Logo.idf
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  MdeModulePkg/MdeModulePkg.dec
> 
> +
> 
> +[LibraryClasses]
> 
> +  UefiBootServicesTableLib
> 
> +  UefiDriverEntryPoint
> 
> +  DebugLib
> 
> +
> 
> +[Protocols]
> 
> +  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
> 
> +  gEfiHiiImageExProtocolGuid         ## CONSUMES
> 
> +  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
> 
> +  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
> 
> +
> 
> +[Depex]
> 
> +  gEfiHiiDatabaseProtocolGuid AND
> 
> +  gEfiHiiImageExProtocolGuid
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> new file mode 100644
> index 0000000000..1418eb2137
> --- /dev/null
> +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> @@ -0,0 +1,31 @@
> +## @file
> 
> +# This package provides advanced feature functionality for LOGO.
> 
> +# This package should only depend on EDK II Core packages.
> 
> +#
> 
> +# The DEC files are used by the utilities that parse DSC and
> 
> +# INF files to generate AutoGen.c and AutoGen.h files
> 
> +# for the build infrastructure.
> 
> +#
> 
> +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +#
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  DEC_SPECIFICATION = 0x00010017
> 
> +  PACKAGE_NAME      = LogoFeaturePkg
> 
> +  PACKAGE_GUID      = A1A87B33-C3E3-497B-978F-2FF7813FEB21
> 
> +  PACKAGE_VERSION   = 0.1
> 
> +
> 
> +[Includes]
> 
> +  Include
> 
> +
> 
> +[LibraryClasses]
> 
> +
> 
> +[Guids]
> 
> +  gLogoFeaturePkgTokenSpaceGuid  =  {0x567199de, 0xb448, 0x4aa0, {0x99, 0x4e, 0xd5, 0xd6, 0x82, 0x59, 0x91, 0x17}}
> 
> +
> 
> +[PcdsFeatureFlag]
> 
> +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable|FALSE|BOOLEAN|0xA0000001
> 
> +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable|FALSE|BOOLEAN|0xA0000002
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> new file mode 100644
> index 0000000000..717e074c69
> --- /dev/null
> +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> @@ -0,0 +1,37 @@
> +## @file
> 
> +# This package provides advanced feature functionality for LOGO.
> 
> +# This package should only depend on EDK II Core packages.
> 
> +#
> 
> +# The DEC files are used by the utilities that parse DSC and
> 
> +# INF files to generate AutoGen.c and AutoGen.h files
> 
> +# for the build infrastructure.
> 
> +#
> 
> +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +#
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  PLATFORM_NAME                  = LogoFeaturePkg
> 
> +  PLATFORM_GUID                  = 0618AB19-9507-4D6A-A0D7-1F43D74736CF
> 
> +  PLATFORM_VERSION               = 0.1
> 
> +  DSC_SPECIFICATION              = 0x00010005
> 
> +  OUTPUT_DIRECTORY               = Build/$(PLATFORM_NAME)
> 
> +  SUPPORTED_ARCHITECTURES        = IA32|X64
> 
> +  BUILD_TARGETS                  = DEBUG|RELEASE|NOOPT
> 
> +  SKUID_IDENTIFIER               = DEFAULT
> 
> +
> 
> +[LibraryClasses]
> 
> +  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> 
> +  BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.inf
> 
> +  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> 
> +  UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
> 
> +  UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
> 
> +
> 
> +[LibraryClasses.common.DXE_DRIVER]
> 
> +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
> 
> +
> 
> +[Components]
> 
> +  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> 
> +  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> 
> diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> new file mode 100644
> index 0000000000..092a055a2c
> --- /dev/null
> +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> @@ -0,0 +1,129 @@
> +# Overview
> 
> +* **Feature Name:** Logo
> 
> +* **PI Phase(s) Supported:** DXE
> 
> +* **SMM Required?** No
> 
> +
> 
> +## Purpose
> 
> +This feature provides the Logo image and driver that produces EDKII_PLATFORM_LOGO_PROTOCOL:
> 
> +
> 
> +1. LogoDxe.inf includes a BMP logo in the EFI file, the driver provides the image via EDKII_PLATFORM_LOGO_PROTOCOL.
> 
> +2. JpegLogoDxe.inf includes a JPEG logo in the EFI file, the driver uses EFI_HII_IMAGE_DECODER_PROTOCOL to decode the
> JPEG file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.
> 
> +
> 
> +# High-Level Theory of Operation
> 
> +
> 
> +The driver produces a EDKII_PLATFORM_LOGO_PROTOCOL to provide a logo picture shown on setup screen.
> 
> +
> 
> +The Logo file is built in HII package list as EFI resource, the driver uses EFI_HII_DATABASE_PROTOCOL
> 
> +to the publish HII package list to HII Database and get images via EFI_HII_IMAGE_EX_PROTOCOL.
> 
> +
> 
> +## Firmware Volumes
> 
> +
> 
> +* PostMemory
> 
> +
> 
> +## Modules
> 
> +
> 
> +A bulleted list of the modules that make up the feature.
> 
> +
> 
> +* LogoDxe
> 
> +* JpegLogoDxe
> 
> +
> 
> +## LogoDxe
> 
> +
> 
> +This driver provides a bitmap image via EDKII_PLATFORM_LOGO_PROTOCOL.
> 
> +
> 
> +## JpegLogoDxe
> 
> +
> 
> +This driver uses EFI_HII_IMAGE_DECODER_PROTOCOL to decode the jpeg data and provide a bitmap image via
> 
> +EDKII_PLATFORM_LOGO_PROTOCOL.
> 
> +
> 
> +## Key Functions
> 
> +
> 
> +* This feature produces a EDKII_PLATFORM_LOGO_PROTOCOL which could be used by consumer such as
> Edk2\MdeModulePkg\Library\BootLogoLib.
> 
> +
> 
> +## Configuration
> 
> +
> 
> +* gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> 
> +  TRUE: Enable logo feature
> 
> +  FALSE: Disable logo feature
> 
> +* gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable
> 
> +  TRUE: Use jpeg logo
> 
> +  FALSE: Use bitmap logo
> 
> +
> 
> +## Data Flows
> 
> +
> 
> +Architecturally defined data structures and flows for the feature.
> 
> +
> 
> +### Data flows of LogoDxe
> 
> +
> 
> +```txt
> 
> +| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|
> 
> +------------    ------------------    ----------------
> 
> +      |                 |                     |
> 
> +      |                 |--bitmap image data->|
> 
> +      |<---bitmap data--|<-return bitmap data-|
> 
> +```
> 
> +
> 
> +### Data flows of JpegLogoDxe
> 
> +
> 
> +```txt
> 
> +| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|    | EFI_HII_IMAGE_DECODER_PROTOCOL |
> 
> +------------    ------------------    ----------------    ----------------------------------
> 
> +      |                 |                     |                            |
> 
> +      |                 |---Jpeg Image data-->|---------decode Jpeg------->|
> 
> +      |<---bitmap data--|<-return bitmap data-|<-----return bitmap data----|
> 
> +```
> 
> +
> 
> +## Control Flows
> 
> +
> 
> +Consumer gets image from the logo driver via EDKII_PLATFORM_LOGO_PROTOCOL.
> 
> +
> 
> +## Build Flows
> 
> +
> 
> +No any special build flows is needed.
> 
> +
> 
> +## Test Point Results
> 
> +
> 
> +Not available.
> 
> +
> 
> +## Functional Exit Criteria
> 
> +
> 
> +* Check wether EDKII_PLATFORM_LOGO_PROTOCOL->GetImage() return a default Intel logo.
> 
> +* If using jpeg logo, a dex driver which produces EFI_HII_IMAGE_DECODER_PROTOCOL(name is
> 
> +gEfiHiiImageDecoderNameJpegGuid) is necessary, it is used to decode Jpeg data.
> 
> +
> 
> +## Feature Enabling Checklist
> 
> +
> 
> +### Option 1
> 
> +
> 
> +* Include AdvancedFeatures.dsc in platform dsc file, and use pcd to enable the feature.
> 
> +
> 
> +```dsc
> 
> +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable                      |TRUE
> 
> +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
> 
> +  !include Include/AdvancedFeatures.dsc
> 
> +```
> 
> +
> 
> +* Include PreMemory.fdf and inPostMemory.fdf in platform fdf file
> 
> +
> 
> +```fdf
> 
> +!include Include/PreMemory.fdf
> 
> +!include Include/PostMemory.fdf
> 
> +```
> 
> +
> 
> +### Option 2
> 
> +
> 
> +* To use bitmap logo, include "UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform dsc file, and include
> 
> +"INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform fdf file.
> 
> +
> 
> +* To use jpeg logo, include "UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in platform dsc file, and include
> 
> +"INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in platform fdf file.
> 
> +
> 
> +## Performance Impact
> 
> +
> 
> +* LogoDxe
> 
> +  * EFI size: 180 KB
> 
> +  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage(): about 18 milliseconds
> 
> +
> 
> +* JpegLogoDxe
> 
> +  * EFI size: 13.6 KB
> 
> +  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage(): about 80 milliseconds
> 
> --
> 2.24.0.windows.2
> 
> 
> -=-=-=-=-=-=
> Groups.io Links: You receive all messages sent to this group.
> 
> View/Reply Online (#56238): https://edk2.groups.io/g/devel/message/56238
> Mute This Topic: https://groups.io/mt/72533665/1712937
> Group Owner: devel+owner@edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub  [ray.ni@intel.com]
> -=-=-=-=-=-=


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#56247): https://edk2.groups.io/g/devel/message/56247
Mute This Topic: https://groups.io/mt/72533665/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers
Posted by Heng Luo 4 years, 1 month ago
Hi Ray,
It fails to build with GCC in ubuntu if removing the <feature-domain> prefix from all paths insideDSC/FDF/INF.
No problem in windows

Active Platform          = /home/ilabuser/code/hengluo/edk2-platforms/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc


build.py...
/home/ilabuser/code/hengluo/edk2-platforms/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc(36): error 000E: File/directory not found in workspace
        LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf is not found in packages path:
        /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Platform/Intel
        /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Silicon/Intel
        /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Features/Intel


- Failed -
Build end time: 14:57:21, Mar.25 2020
Build total time: 00:00:00

Best Regards
Heng

> -----Original Message-----
> From: Ni, Ray <ray.ni@intel.com>
> Sent: Wednesday, March 25, 2020 11:53 AM
> To: devel@edk2.groups.io; Luo, Heng <heng.luo@intel.com>
> Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming <liming.gao@intel.com>;
> Dong, Eric <eric.dong@intel.com>
> Subject: RE: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to
> provide logo images and drivers
> 
> Heng,
> Can you please remove the <feature-domain> prefix from all paths inside
> DSC/FDF/INF?
> 
> We expect PACKAGES_PATH is set to include "edk2-platforms/Features/Intel"
> and all sub folders inside "edk2-platforms/Features/Intel/".
> 
> Thanks,
> Ray
> 
> 
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Heng
> Luo
> > Sent: Wednesday, March 25, 2020 10:44 AM
> > To: devel@edk2.groups.io
> > Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming
> <liming.gao@intel.com>; Dong, Eric <eric.dong@intel.com>
> > Subject: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to
> provide logo images and drivers
> >
> > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2584
> >
> > 1. LogoDxe.inf includes a BMP logo in the EFI file,
> > the driver decodes the BMP file and provide the image
> > via EDKII_PLATFORM_LOGO_PROTOCOL.
> > 2. JpegLogoDxe.inf includes a JPEG logo in the EFI file,
> > the driver use EFI_HII_IMAGE_DECODER_PROTOCOL to decode the Jpeg
> > file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.
> >
> > Cc: Dandan Bi <dandan.bi@intel.com>
> > Cc: Liming Gao <liming.gao@intel.com>
> > Cc: Eric Dong <eric.dong@intel.com>
> > Signed-off-by: Heng Luo <heng.luo@intel.com>
> > ---
> >
> > Notes:
> >     v2:
> >       - Add Cc and Remove Change-Id in commit message
> >
> >  Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc            |   4
> +++-
> >  Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc      |
> 6 +++++-
> >  Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf            |   6
> +++++-
> >  Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf             |   6
> +++++-
> >  Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc |
> 107
> >
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++
> > ++++
> >  Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf  |
> 13 +++++++++++++
> >  Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf   |
> 8 ++++++++
> >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf    |
> 10 ++++++++++
> >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf |
> 52
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp        |
> Bin 0 -> 183366 bytes
> >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c          | 153
> >
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++
> > ++++++++++++++++++++++++++++++++++++++++++++++++++
> >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf        |  10
> ++++++++++
> >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg        | Bin
> 0 -> 11944 bytes
> >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf     |
> 52
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec      |  31
> +++++++++++++++++++++++++++++++
> >  Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc      |  37
> +++++++++++++++++++++++++++++++++++++
> >  Features/Intel/UserInterface/LogoFeaturePkg/Readme.md               | 129
> >
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++
> > ++++++++++++++++++++++++++
> >  17 files changed, 620 insertions(+), 4 deletions(-)
> >
> > diff --git a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > index 23e7c6474a..ea879680ba 100644
> > --- a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > +++ b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > @@ -7,7 +7,7 @@
> >  # 1. Present a consolidated and simplified view of all available advanced
> features to board packages.
> >
> >  # 2. Provide a simple, single package build for all available advanced
> features.
> >
> >  #
> >
> > -# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
> >
> > +# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> >
> >  #
> >
> >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >  #
> >
> > @@ -46,6 +46,8 @@
> >    gSmbiosFeaturePkgTokenSpaceGuid.PcdSmbiosFeatureEnable
> |TRUE
> >
> >    gUsb3DebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugFeatureEnable
> |TRUE
> >
> >
> gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> |TRUE
> >
> > +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> |TRUE
> >
> > +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
> >
> >
> >
> >  #
> >
> >  # This package builds all advanced features.
> >
> > diff --git
> a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > index 649774edf7..c1bd791525 100644
> > --- a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > +++ b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > @@ -4,7 +4,7 @@
> >  #  This file is intended to be included into another package so advanced
> features
> >
> >  #  can be conditionally built by enabling the respective feature via its
> FeaturePCD.
> >
> >  #
> >
> > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> >
> > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> >
> >  #
> >
> >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >  #
> >
> > @@ -54,3 +54,7 @@
> >  !if
> gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> == TRUE
> >
> >    !include
> UserInterface/UserAuthFeaturePkg/Include/UserAuthFeature.dsc
> >
> >  !endif
> >
> > +
> >
> > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> >
> > +  !include UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> >
> > +!endif
> >
> > diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > index 57b29a42b9..56f6143650 100644
> > --- a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > +++ b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > @@ -5,7 +5,7 @@
> >  #  can be conditionally included in the flash image by enabling the
> respective
> >
> >  #  feature via its FeaturePCD.
> >
> >  #
> >
> > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> >
> > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> >
> >  #
> >
> >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >  #
> >
> > @@ -55,3 +55,7 @@
> >  !if
> gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> == TRUE
> >
> >    !include UserInterface/UserAuthFeaturePkg/Include/PostMemory.fdf
> >
> >  !endif
> >
> > +
> >
> > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> >
> > +  !include UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> >
> > +!endif
> >
> > diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > index 20d25dd173..7a76b0efc3 100644
> > --- a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > +++ b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > @@ -5,7 +5,7 @@
> >  #  can be conditionally included in the flash image by enabling the
> respective
> >
> >  #  feature via its FeaturePCD.
> >
> >  #
> >
> > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> >
> > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> >
> >  #
> >
> >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >  #
> >
> > @@ -55,3 +55,7 @@
> >  !if
> gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> == TRUE
> >
> >    !include UserInterface/UserAuthFeaturePkg/Include/PreMemory.fdf
> >
> >  !endif
> >
> > +
> >
> > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> >
> > +  !include UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> >
> > +!endif
> >
> > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > new file mode 100644
> > index 0000000000..3fd1c3372e
> > --- /dev/null
> > +++
> b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > @@ -0,0 +1,107 @@
> > +## @file
> >
> > +# This is a build description file for the Logo advanced feature.
> >
> > +# This file should be included into another package DSC file to build this
> feature.
> >
> > +#
> >
> > +# The DEC files are used by the utilities that parse DSC and
> >
> > +# INF files to generate AutoGen.c and AutoGen.h files
> >
> > +# for the build infrastructure.
> >
> > +#
> >
> > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> >
> > +#
> >
> > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > +#
> >
> > +##
> >
> > +
> >
> >
> +###############################################################
> #################
> >
> > +#
> >
> > +# Defines Section - statements that will be processed to create a Makefile.
> >
> > +#
> >
> >
> +###############################################################
> #################
> >
> > +[Defines]
> >
> > +!ifndef $(PEI_ARCH)
> >
> > +  !error "PEI_ARCH must be specified to build this feature!"
> >
> > +!endif
> >
> > +!ifndef $(DXE_ARCH)
> >
> > +  !error "DXE_ARCH must be specified to build this feature!"
> >
> > +!endif
> >
> > +
> >
> >
> +###############################################################
> #################
> >
> > +#
> >
> > +# Packages Section - Make sure PCD can be directly used in a conditional
> statement
> >
> > +# in a DSC which includes this DSC file.
> >
> > +#
> >
> >
> +###############################################################
> #################
> >
> > +[Packages]
> >
> > +  UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> >
> > +
> >
> >
> +###############################################################
> #################
> >
> > +#
> >
> > +# Library Class section - list of all Library Classes needed by this feature.
> >
> > +#
> >
> >
> +###############################################################
> #################
> >
> > +[LibraryClasses]
> >
> > +  #######################################
> >
> > +  # Edk2 Packages
> >
> > +  #######################################
> >
> > +  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> >
> > +
> BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRe
> pStr.inf
> >
> > +  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> >
> > +
> UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo
> tServicesTableLib.inf
> >
> > +
> UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryP
> oint.inf
> >
> > +
> >
> > +[LibraryClasses.common.DXE_DRIVER]
> >
> > +  #######################################
> >
> > +  # Edk2 Packages
> >
> > +  #######################################
> >
> > +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
> >
> > +
> >
> >
> +###############################################################
> #################
> >
> > +#
> >
> > +# Component section - list of all components that need built for this
> feature.
> >
> > +#
> >
> > +# Note: The EDK II DSC file is not used to specify how compiled binary
> images get placed
> >
> > +#       into firmware volume images. This section is just a list of modules to
> compile from
> >
> > +#       source into UEFI-compliant binaries.
> >
> > +#       It is the FDF file that contains information on combining binary files
> into firmware
> >
> > +#       volume images, whose concept is beyond UEFI and is described in PI
> specification.
> >
> > +#       There may also be modules listed in this section that are not required
> in the FDF file,
> >
> > +#       When a module listed here is excluded from FDF file, then UEFI-
> compliant binary will be
> >
> > +#       generated for it, but the binary will not be put into any firmware
> volume.
> >
> > +#
> >
> >
> +###############################################################
> #################
> >
> > +
> >
> > +#
> >
> > +# Feature DXE Components
> >
> > +#
> >
> > +
> >
> > +# @todo: Change below line to [Components.$(DXE_ARCH)] after
> https://bugzilla.tianocore.org/show_bug.cgi?id=2308
> >
> > +#        is completed.
> >
> > +[Components.X64]
> >
> > +  #####################################
> >
> > +  # Logo Feature Package
> >
> > +  #####################################
> >
> > +
> >
> > +  # Add library instances here that are not included in package
> components and should be tested
> >
> > +  # in the package build.
> >
> > +
> >
> > +  # Add components here that should be included in the package build.
> >
> > +!if gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
> >
> > +  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> >
> > +!else
> >
> > +  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> >
> > +!endif
> >
> > +
> >
> >
> +###############################################################
> ####################################
> >
> > +#
> >
> > +# BuildOptions Section - Define the module specific tool chain flags that
> should be used as
> >
> > +#                        the default flags for a module. These flags are appended to
> any
> >
> > +#                        standard flags that are defined by the build process. They
> can be
> >
> > +#                        applied for any modules or only those modules with the
> specific
> >
> > +#                        module style (EDK or EDKII) specified in [Components]
> section.
> >
> > +#
> >
> > +#                        For advanced features, it is recommended to enable
> [BuildOptions] in
> >
> > +#                        the applicable INF file so it does not affect the whole board
> package
> >
> > +#                        build when this DSC file is active.
> >
> > +#
> >
> >
> +###############################################################
> ####################################
> >
> > +[BuildOptions]
> >
> > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > new file mode 100644
> > index 0000000000..53c85da716
> > --- /dev/null
> > +++
> b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > @@ -0,0 +1,13 @@
> > +## @file
> >
> > +#  FDF file for post-memory Logo modules.
> >
> > +#
> >
> > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> >
> > +#
> >
> > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > +#
> >
> > +##
> >
> > +!if gSmbiosFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
> >
> > +  INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> >
> > +!else
> >
> > +  INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> >
> > +!endif
> >
> > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > new file mode 100644
> > index 0000000000..91cd1c6ec6
> > --- /dev/null
> > +++
> b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > @@ -0,0 +1,8 @@
> > +## @file
> >
> > +#  FDF file for pre-memory Logo modules.
> >
> > +#
> >
> > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> >
> > +#
> >
> > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > +#
> >
> > +##
> >
> > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > new file mode 100644
> > index 0000000000..a39500e043
> > --- /dev/null
> > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > @@ -0,0 +1,10 @@
> > +// /** @file
> >
> > +// Platform Logo image definition file.
> >
> > +//
> >
> > +// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> >
> > +//
> >
> > +// SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > +//
> >
> > +// **/
> >
> > +
> >
> > +#image IMG_LOGO Logo.jpg
> >
> > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > new file mode 100644
> > index 0000000000..47f1672a4c
> > --- /dev/null
> > +++
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > @@ -0,0 +1,52 @@
> > +## @file
> >
> > +#  The default logo JPEG picture shown on setup screen.
> >
> > +#
> >
> > +#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> >
> > +#
> >
> > +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > +#
> >
> > +#
> >
> > +##
> >
> > +
> >
> > +[Defines]
> >
> > +  INF_VERSION                    = 0x00010005
> >
> > +  BASE_NAME                      = JpegLogoDxe
> >
> > +  FILE_GUID                      = 319CFE1D-8F15-4A7A-BF40-EECA953D87EF
> >
> > +  MODULE_TYPE                    = DXE_DRIVER
> >
> > +  VERSION_STRING                 = 1.0
> >
> > +
> >
> > +  ENTRY_POINT                    = InitializeLogo
> >
> > +#
> >
> > +#  This flag specifies whether HII resource section is generated into PE
> image.
> >
> > +#
> >
> > +  UEFI_HII_RESOURCE_SECTION      = TRUE
> >
> > +
> >
> > +#
> >
> > +# The following information is for reference only and not required by the
> build tools.
> >
> > +#
> >
> > +#  VALID_ARCHITECTURES           = IA32 X64
> >
> > +#
> >
> > +
> >
> > +[Sources]
> >
> > +  Logo.jpg
> >
> > +  Logo.c
> >
> > +  JpegLogo.idf
> >
> > +
> >
> > +[Packages]
> >
> > +  MdePkg/MdePkg.dec
> >
> > +  MdeModulePkg/MdeModulePkg.dec
> >
> > +
> >
> > +[LibraryClasses]
> >
> > +  UefiBootServicesTableLib
> >
> > +  UefiDriverEntryPoint
> >
> > +  DebugLib
> >
> > +
> >
> > +[Protocols]
> >
> > +  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
> >
> > +  gEfiHiiImageExProtocolGuid         ## CONSUMES
> >
> > +  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
> >
> > +  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
> >
> > +
> >
> > +[Depex]
> >
> > +  gEfiHiiDatabaseProtocolGuid AND
> >
> > +  gEfiHiiImageExProtocolGuid
> >
> > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp
> > new file mode 100644
> > index
> 0000000000000000000000000000000000000000..7ec1aa6a852564e262df599
> 29655f7a0f3d5445f
> > GIT binary patch
> > literal 183366
> > zcmeI53HVo2{>L-
> Jm@&3csA!XsrHq!LrXr$}sH8=bnxa%BMny_PD@D^Xt&}NI5uvfP
> > zOj2oNv@nuXBQ#^OWNI42{Qs~2|31%s?sM+<o_o&SzW3hm`94p-?sD!~-
> skha_bi{K
> > z=~b7%^@B41_p8spv-
> o%ZVP(p^$^VCyIfcJv${f%A6MtIf|Ns5}1@p%sU=T0}WEX+M
> > z4?q0mlTSY9oO7BqY0|D;yDnY2bno8%mRoM=-
> @pHzciuT<$dKW~hmRaN@}Y+wdi2pp
> > zr%s(ZYu2nMo_J#3ym^m3_So-!_d70*8#nHO2ObzYbm*^t{p;IqyRCQc-
> sEuo_19l}
> > z?X|62w{F&~*##F|P`PsDqmMp1yC|8O8w4Uj;D{rRs8ORv^XAQa^yqQ--
> FL$sc(ios
> >
> z(sk?BZQs8A%P+tD?|=XMKS})#9Xj;MC!cKIym`fn6$=+Ggw7Coz<>c=yLP?u$}4~I
> >
> zi(gc&T9pb%(r}ZBL7=z@@Byk_yLQ{QZST74E=2vc*IwJXbLV&8eU}v5qABP5@4
> w%(
> > zXU`jNyz%6dPmUfvny+okmM!^wA9Ktx#f8_DZV-
> ?l@S`97sBYc53@m5PoQd@Q?QegJ
> >
> zh7T#u<%=)A`17CtykyCeF=NKuc;k)r>eVx2V2Om7Td^X*K<?*1|9Q`zJ^A*%_10
> Ve
> > z{`bFAOr3<P#$bE*?%m6lEqnOkhZ&GxbkRk}9d}%;y<jpgWdu$+<&+z4xMA|-
> $#1^-
> > zCX=s(q&(xrFhza!)mK?)>ej6r1Kl6|z*?g(WjQi!4~_ueL6$m4jT*(+EXl=|jI+?Q
> >
> z`rmx>&8k(a#*Q7^zJ2>DRjLH<81rN)A%Lhb8Dw&_fB$|@*)lgmBk=dX|NX@m
> Ut|-9
> >
> zWukKB%9WCcnYQ{P(4awsM;>|P{rBGwEodf#APDT*wd<*;p6b)5&)H|6?cZA_
> MNSc@
> >
> zUcEZ6=np^qFo+D9XW~JCHR`9Ie%f#|r<^O$tg>axGALzxA|8P<xkiQn!&)>JZoTz
> Z
> > zR)h{a3^h&j%MSwV6<%}AHH#N7Hk%ZY5hlTmY;K-
> ;=9&2s%93meAH;j_y_XJ6P<%{L
> > zF(UB62Oo?dKmL+SE-
> `w2*&_65r=3Q}vDhA?aG0!%hrm}~eZ@i$yTd1*cw)9Bv(#$K
> > zjAPE6Ip2Q!ZSjP~l$;y_DBP}Dvu4nsLG*j6iF(T0`^#Vc64ME@iJu%9QdSZQ{J;I}
> > zZ!s~$iY?``n(yk>s#OacqLfL8sZP-
> lVCw{8qEDM|u}@*^PB`I&Ns}gJ&aA0ul3HQ~
> > z@7S>e8_$|GYo<_ib5<o3mDx=E$3Om2Vj^am8w3Hgk+DmyRH;(VSdfzDG-
> }icgoAX9
> >
> zd8ULBU~K{Ac8uoO2uq11XT2H~DpZ(1e}2|wisgE=^)_tSfU?l))vH&oT!}w{mtTJQ
> > zrI%h}NeZ=gv=>kwTd-gOu5#wior{+b44<b>n>J<26lO-
> ~++uQw(F8y2F|p;x2yyM&
> >
> zweP+69_CI54jjljK5^F{%@9DwkBU+L3G+fg&1T=eeQ|eI`21N<SigQfG=VjP2M_
> Mm
> >
> zs~3JeFymrP9`98Nto~618*`}X;>@aP)240Ow7Kb~n{L1T_F=<@O_(rY_UzfuJoC)
> *
> > z<;yp2+{g^;U;p}7_$FsG2i}Tz+;NBbT<Ws&$3Olt>o#fYbo31vHY3~cu5aJIc!k1F
> > z;i#jI(rsOF)ANnsErCC)>#n;FCw16gV-mG>>(<iIrZ{-;Aj1#*KNPnkvQqk4XPvca
> > z)21|#kq_S={_qE^l@VPW$K`&s!$+1cEFX8=&|&hA;s4&fd(+SnG1Y-
> Ff9KAfQFzV@
> > zHIlC<-
> b9NyA^P;wPnpW01k1ONscZ7hPhpAJ5i<tH*DK!?JemCSpZ|=B9mUF)w=TOR
> >
> zs9dHH{32HA*kg}n3YL7QFhzxf82gxgE0x}7kWj5!wX3hbnzt4@rK~CCV>_5uFc
> WFm
> >
> zu%QYFxldEEV#RmgeK#>OGFM`4bKt;%Od^a6rjXKg<dH|>4U!Ki^!)haj}z;}m<nR)
> > z8&%AZm}L6#GtM{zUBsB+b!N+_ko^KyJ`-5;%yf^0sXPO}4jno${ruCP{`8;!{KtuZ
> > zhK@^?m3aA%d(nUiDI?)lty&o~x-
> diw@GOhZy#3e%dj9$6v#48DYOG|qPE?DSUYop}
> >
> zS;;5X%ujzxR4(%?J_4BhvoVU!L$++jON5mzTC|91DHW|1cGgZh>7?R|ps7J21Xv
> Ve
> >
> zV+AutRF$&gRwdu8WJfO!BVzWoag=R#lnRj`rPmm}FqN1%apJaZ+hQ6iMVKwo
> Oj3$t
> > zh-
> zJY@x_sokvA<)cXPjG9|H9ZJWAwB)V~)kS`^<bCL}k}G0p&vI#oo`B|@!K95}Gd
> >
> zPVgz6DwwosN8pD){2}(mXhz}EDkOuVeLQD;#Gp7rgi#l%Q>RYaWy{nr90It5xc~
> n9
> > zliZ$`P&iL~WV<0MKN~EbGq5qE({PfWv8Pd>LMiB-cixfkCGJ~!;v))>;o-u_bo%t^
> > z#_wOoxD;u1Q6M24Jo*OV#Ys1Z-0%_q3A$}}rzbRO{rdGI?OT&sh7n-
> >2YW`$G~A*R
> > z)0KSi5o<dZUcx|xx-VObM%OgM<cYKDd@-@nNI-
> iw2Yh7OxMj<hFl0oX1CyUP`_tr|
> > z2LyOs<CFu>C-LbR<baPuhYk%xMy3hIHZ2cqNw5tp<M-
> >=FAg7QS?42bVuubL3e3k@
> >
> zvu0t=lVDGpqH=`*_H;M|i*Ua?(|lw<f@llD$jFf6=9_QMm2jBG6bS)d>F8(TdL?{x
> >
> ziA?j6=(oYhh`q3})Gm_n=DFCP{p@FW(G25ZFS~ri<bVJE{Q>w0T!j3~vsjq66%~Q
> <
> >
> z<;#y4F(Q~fW_J0A7vBJ6#AxxVtF9_)cbURV0s(BL8NcC?RZB`U%10Ks0yrXLkFryz
> > zP9-4?rjhADfGv`C?b@wdw@#6j8Rg@B_uZ%1KxZ<ufRhd(EyY^k!-
> |*!z6(BC<l|3%
> >
> z@{<4#8BnMzML95SP7?ww_~1@N!pbc25nraxub#>=D&lGC7E_m!Mu1&Qq8
> $~K+syG1
> >
> zOVW=%`lw)Aye^Xd=%bG=X$dfmPagu8UV16^3xd#Qj*lHXb`+W*KV=Q4apT7
> 6>kU&Q
> >
> zgFqP+T99Yw8f@nH_{uA<$O$OiC03N_c!NNi5x^jVaAt)0Ky<Uk$K#GWPRmgh(
> H{sc
> > zm*&1Obu$Q92r#7@K79C$88b2j2)l>E=TCCV*1z#Xm7&fxRRsZ-
> M>2#1uHGaB6mFrj
> > zl%b}Xsu~2cg#ccN)fHC1_~Hw*rkbt(HMPwa0{H(IzJQX`2OoSeTdgy-
> H3(!20YbS+
> > z2<W_pg)$-Rv(-9NTZ2Hh5Fm<;lXQ|}qm7fTo;9`290Ej{mk`i-
> 3k3k;j%BWarosk+
> >
> z3?YDyjgxeeW1_TYs9mP227xRhfT@&(gU(wQUU*>^8))im5XcY$#EW;5&g&RQ
> tQl&Q
> >
> zsj5LBqX;Oftr~6BjP|docD4{ubk)utWwF|Yy25$qork(Uj^zoKtym4zYt?^&m8tL=
> >
> zp<W6pGac9q?~54Y4<0;t{`~p)U?gZDAqep<h5jUeQE6VaY85`lCr_R{Y}l~gy?bAF
> >
> z*=1;SEB2R31_H+%bBxyj)p;G4ssyJ_7%`j`;CmBS3{D^N*IaXrVl|xg_dOmoXpmyI
> >
> zLNZ+=wJKGr2ss2eML()dn>LJC;KlOg%L%af`RAX1<?(yrg%<)8;e4cCy?P@@j(q*~
> >
> z*8}*+rczHn`DBL<9gaQrSZAKG9`lkUEQqhGLqg!8XP&BnYe4NQt0dsP7b}25<~R`
> J
> >
> zQ&>=iuax=7w}!>HS6_YA`GWH8zQBFQnBm%MuYKc<H++jwNkE;KEn9ZujW<F
> Tp}V6x
> > zMVN7oh$ZsDg9oY7`|rOm&)M>$i1)S$6DCxuR7svVnY-
> Yl0_HvU+>=awD1|rw?%lh+
> >
> zYE`m)#FyIk?c2Rzkz5bJN8X162M*k|YnLS3z_*Ca(Wp_Q2*rs}G%+RJ!MhdtXf*_
> 5
> > z!`ZWEpLNz*5mqcfR-;FcRsoi%a{)3B@Q81$$r9va*|KFBl&W-
> 7!8E#jJonsl6NoU5
> >
> zb#NrHmYAZtnP}ml#YgKAG+q`jUd(qkfapf@$aBv<SFjVE7r*@S%fQPWT9srx?<
> }|A
> >
> zajEeUp$*9nEk53I%PnDi@)ztfuZsr`9AMlPX81a8+&HhyxgLOzc5bh|_8RXcE$NL
> U
> >
> zF?F`<;B~Nc>C#Bbl4pW%bFT_Gua^`bS^QC4{dPhm94qqi_~VaXv}lp=YyzjO*D*
> Yn
> >
> z%ZB?dEJl@DUcE4UBxfeP41>eGF5K1jy&{>Z*^MRamv25H6R^hh*=L{GB}xuTh
> mVX&
> > zB3VmO;UkRLuwjD)_E>KbC-
> jt4PSFw}m3dZ3K3Ywt3u@G;p;fmqiU0c7zxqPWTOv#m
> > zD$hcB-)dM1N{5du#VcYWPv*-
> <J^{}@`>Z^ZxbN~^P#+&Mzx(dH?|iEi2_GqiaWzh{
> > zlG!*`84g{4{q-uG3Y><W&9A@y+816cL5c9OTD58_BBuhHFCWK`AFq;6+-
> Z=3+O=!@
> > zN)f!+ym_-qWuoGvRTeYKNEV>v4OFpwY|^BOJd==jd-
> Uj`0<V>(MEIzvRIGxVoR5J6
> >
> zeX10#m1geTxhl(s&6+h+%r;s+QYdeXZr!?tly>>!pMLtOZ|ka8uP)Cd<X!fCeCuE*
> >
> zC<Q*Uv_e>0yU8IBBz(lXepFxKkd?$kh2nq^qd&#6BIl!3E?W}BfD0+}UXSnHyVtj
> M
> >
> zXkB_e9?5kC#<vc3f>Pk)O*h?Sw>SKOgpa7wh0i~H4(g@~Om)?DlVai{?cKU{YlR9
> G
> > zA`yNe6U%k81XA>bg-0SkRasNAYgh_=oHJ*R-
> Co@Tw7&#BRxkZktXXw4x6|W?f6}B$
> > zty{OQRjbyir=E(!KkBJft5#*DrFrw_L}hyM#TOO#G4H?seszheT)DDc2j7GE_(;)2
> >
> zu3?U^UUS8izR~60dFLI)tb!#&*$JfxUu^9JrNGAkifU{fUVQPzTCT>>gSAmrKR~N
> o
> > zF=z{WC=hndnl+Nlbt4s`A}+~IxD_iODT}$D`kJsJJA6a2gTG={!IBZSPk>Q=ntML7
> > z6)Q);eYbn}?z-
> T!M(55)euZWK_U+s27DW0kUAnlJDG1caQj%_NT1$U%^AWi4MI5av
> >
> z>ArpY<h_8lye?>3>94rr3V8*DySe8hD$PQZ<)^`3m|AmoDgdGC)TyJ@v(Chr^`R
> GP
> > zH-
> tqb3>lmW6p!)!YiHtnkN_X40}}*vXcg=4n+)AldAl$&_01$q0{A7bfN(eWe8k{a
> > zXtMk?z{jzC`SOxD!tUaj39=F!rk8n^r5J0Y6HAI<-&r!jl+s;2uPeTM<ed=7@-k+j
> > z7$t?o$9mj%EoJA<osksem5Je_fQ+IZuPua38-
> *NvPdj(+Y(K7Yz<RH5o{9<j_3PKF
> >
> zRV&5B?qoP6P^qw$#+Q%eU%!5RlBwtEl@eY@vNh>Dsb@pP4NHVq3?BtBbp
> Z*mJN(#V
> > zk9o<J`}+Fz>xCK?@icNi(iYrMpnah=U~r?v6>`8jCL}nlS{KaRzKBjj$RgyA>xv)g
> > z<r&&{?Ix%kq{m-
> }E+7FMfT$=*+Mq=>60`dy%t0J{wCY2MbKkL|jfvL*euP4rS~Gs|
> >
> z%G|n65n%xIeO6ce3?GI5(&eMpdJ)Tg2^$>A1tvZ|QZ6BhAAkID0bbox%#_%W
> mA682
> >
> z_wvgx_bu`8!w;9_5b~DcqX3{TAi8|?eFHn?VfE_OLiLJ!8Y>^IrZFC1Oy~qb_ZZLu
> >
> zQ$|JMAy&^|y5eWPkAisU@^Rt9g+dOJQ`Aa}OF*IY1o%jan3=dYOeH9}Z?Tdr)L
> iit
> >
> zC0@%Jmpf1U%K7J?ub5kaWQLCdXu5#t@=>lZV|TiB(7%6wp?bwVO@@!O5
> mdKr+a{o)
> >
> zb&9LfU|4P1v`Jo2toDz(;%B~(LTBmnQEPdhRgPdn71L9R@sawUbka$zEemL?pJ
> Jg?
> > zvu4czIN(rPUdpIZqXJ~B_=w@70F*8ux_rcQvb?*Uce{4&ihg*)KZ!L{l6<6JP{Bnp
> > z-U*1-
> @n8P(7Zj6({`Ecm&2N4qFXj2?pZCoqZ~|TNGv7y{v$XigVyTw)zED;&rxFc^
> > zg!zb6vofQ#T`NGuY+aWcsQU_;2&X%C?9k0qJ-y+hfR!#FT6_$ktS$&c0;j3sqt!c>
> > zC-
> Y!!zvGTOgf5n!`dV0^co4uNpS)1}uCDl*@1r0UT6`qDweWZfPgBT8#ub5Gexcn;
> > zFcDkeRSr-Zm-kEEx^-
> 3Z36RF{Q2<RB5G_77XwX33(P_AwLO#+*cwKw@?YD#BL*Npj
> >
> zm*uAfuaOrN%sNJ1sC8FY{LJ@J=qW8ewrtr_cszxt>Et8gO3a<W`;u+jwpF2nm4
> ={-
> > z@_vcWC9>h8&`r94Xz>y4N_j`8;cml*4Fyc>)8yB4?4qp$28zD>^#w6RIaX`ZC-
> )J7
> > zzZ9WjQJw0FpZPut-L1t(cEp6oQ+Rsz*=Ku6SJC-M#fZTd%os##-
> _X}7F3Ub%D22Ih
> >
> z_$Z*K3y2mU%atpaLIMg^lEe;310U%x!T<?%Ryk#1M_tw2*DQU&fB}N!L~^Pte
> &+iq
> >
> zbiEcIaX6g*{YPA!d5Km^_(=6utXLs*gv#kd4?X17G~qfcx^iEv_)8ZaiR9GqQGihw
> > z5G_7Zmahjh6}gHp4PLVZK%A%P;Uhao0iw5~M8_7evqh3)l=&q%<A;{8^^(Vf-
> O?35
> > z^L-ThNSBXV`m4;9SnUk?>)pGzP-
> n?0w$c(oN)I2Y<bC(uCuxY+Ep>mhzP6C+T#!I2
> >
> z+%kL&35YHqvCi`n75DW>A_aHq)XAN**A=3f3xGIJQ^iNTK%=4R)ex`ixQJ9#YCY
> nJ
> >
> zBjoNMXUv%41SgVX!$$!|T|jjC$P~s)RNU9KcFlx_*r$9E+&Oz)A()H(p!*<Ie587~
> >
> zu??`+I&k1Xchd@988Kpn7f@VhGgKu4QNf(OF6xRO>AkWNu1gx?zEwK@bF@
> ?fbagL<
> > zF0f7)ELh+M-
> 0MoOUcCxtVqHudAF0)>S+l&_;&ol!hbogzd1NKL5lY|+aLe#f08JMV
> > z-
> R~od0Qf}m5*6Y4%P+qyR4>3OAt!`vC8q=gkra_aK4Kl_8+60nUUjeLW5<qlKW<;
> q
> > z)x?uvYu(ZnKl6RG`@%ZV<s-
> 1Ghe3zAnC1F*q9g$hVbtl*w?IAsOCcX=JL6BGQ+!XS
> >
> zPMs<N&3TKMERx7XjFzJf>yvdpYAsgKO~|JcZTGP*AOZO3Yw_w7r;t8HCr_U2%
> uRmG
> >
> zrk)!R=aqEw5yy1$QKh@p#05|f<2Z5RM0XDMl`&(+I3WsotSf$L`#ut($wo%yz<2
> ve
> > z7mxsa)QS?t1_bgJte4TWk-
> Xd8a19$aOkPkr`AD7RlySF|D;+y_lsDGCOPq8`)Jq&b
> >
> zNHi$yOcW1v#V>7qoHlJ*L9`2AWON}Pj{%x4AOZM@%{$=>3)ZmUMGWK>ds9
> d@Zrr$n
> > z85X>V;*js)A+>zO!ckZ834=-
> jF3IWi>C+2>W?jUkfaF=NTe{+xDn4Qpw|n<)2~ff<
> >
> z6=(0dfCS(p9mFV9sGIyWKnM>)@DTe+o~`q)SKL^qIHi`4RFXL6&gS?YBMj<pTA3
> tD
> >
> zLjSNJ;6y3Rv99=~ijP`*d34amjT?Qj(gh?K9~t53n)30n^ZmHntwWv6H}tk3u_|$P
> >
> z(#%J#S%B4c%)@QOd=KW%ohu;bJPi{K&{?#u_@#u8DC+<I_rG@nqH;{M6ldE
> D9_s=U
> > zjE@w3=bd+|)Y+Ma=u0XZJ9wodX1eo1-(!XuDuD^o%ts*A+SvgU-
> }$mrLJ0IA84|zp
> >
> z$}7&qfsb{?FD5=NUApvkh2M}NLuSsLNib8bk(e!wD&u@zKv3b3R~#MGg1y5=B
> )VI6
> > z-
> P8}(ty{;ca>a@j1qQKH#cn?FVb!y;Q!46Xq@0hsvjE+3rhGmgiL+c?@r#L%wqV3}
> > z!1%vHg$f0!;k>8|h;M~?dpPrV9;1Ha`?w?li+<a;Z(q4`B}%7^P6KF;S(&5auDJN0
> > zay~Lvk-+7?#m=l&Fb+_XcugmiIpGGJ{Ttv|SNyWe$0bXasNkauh`X1CD-
> u4^ebh=w
> > zpYSOx#`abP8PcSjkJJ!P8d?Bi#G%-BD;ZNx$*8qMhYnh~xfAP(Uv~M3mv49T-
> B)x0
> > z@$G#HA1R%^MO_i{Em1203IlEsyso65k8-
> 0$H!{pMyc+9uUE<1v;R;qEUJt5V*A>5v
> >
> z@{yUo;#fi#5O)^~SLA%8kBFC~wQDcrALbM<Pm0DzmMo>8kL}yH*8(Jf%@hH
> h;hk40
> > zefsoK;hk3+UGd8zADKC-
> FGuSF;?*zqbzeTxHEb{1=@UCZ$4qO%pL(XBk1T3w&7*af
> >
> zbSxg>C(x@DynKZ58=xzGS>)sB(WAXyNAByofcVl!g^yIDTeof!r7Yi4bQ3^E^=YG
> x
> > zQu_HwRoP`$M*~GxyLDOz5)HjD-
> dT0UFLQh(K$4bvp)Mf4U9ZSTgrRZc#>sfs2}VY0
> > zm<c}0Eu`H2rS5djNmz8l2(07IjVpXQQBH6sRzKDizijc5)l0lOsG~tjT|f%<i1VU4
> > zA1S?h_38n9P&kY8Jq}Dps+S2qvdHNRf-
> ?b52DBu^PK;k8uTksHojZe#T6M)QD|`ef
> >
> zRLuh{cIg7*?Ae0HT70Chk3ar+oMuS0B@33Kco9NXty<NVDBXih@KINBPF<wka
> 7i=-
> >
> zg2kHG6+iXLD@sTl$%w04zkYo;dMa0R0r9QBE+4H*qMb$TLa*1aZ=vo4tTUk1q
> k@1W
> >
> zO(yt=e|2~BC0D`($3aC3)iSTln>A}D0khyOUGYmZAMqWE5e>r?#jTA<0P*Sz`+6`
> w
> > zT6JStSc?L7q0R$z3#Uw(!e_T&d$lfVRR*;mt<0lJj7J4$^L>x|_wOI3XvU?RHf<_c
> >
> z3foCq`ae`7yL@CG#Dse7+O<p)+0?%J>Z{op3InY5tS%r0JHmM}3?Hp3VU~zyCS
> kI*
> >
> zw03zrJ^l34XwOChi&c|M@R7H%)@Xm|(4is4=JeA~_i|>gYrDz^7p*+?pP<7mX
> $Y&D
> > z_K!ss`^TKl{$YS-|1c)9f0SbXfY<&>ii_%&E+2`jB1eygM^!iQWC%2J<j6U5=0FY9
> > zRx#SL+~Z)-f!j2k*kcyN{tkl#7679v*Ul#se5AIYefF92l_)=E4rn(p@Bt38yp%fd
> > zM;$m@^Pnyt1KV3g1vM`#UI<a;CeJ4;eDoSX79=LN|MFHV-sK%waK6tAla*M-
> OiVHX
> > zfz0tysDG@dS>Ypwq6Mi}@M5rq(1JL7g)qR!PMBrwf@PJ+MZ-
> r)N9U4{=!Z+1tb1$T
> > zym<v#zj^cKU^|k!706k7!$(PnW`&Ph<5k>mN}8;Di#a}Pj0Gvl;y;rM-3&`Sz2T!o
> > z0J6eIt@Rv5-v|;|gj?mymw)%&cMDST-
> h1yA5}Q*w0)~$gd@{jDzCl|19sT<ClQcQl
> > zE%rcJ{dQ9l0E1;%vQHU4O1eH1eALwk=-
> $1%q{)GAp@4y&m_SKiKBAX3T<2Hx<^90;
> > zC_ZTTC;=)HeALyK^Kv*Q!9npBw%&jI;~$-
> r^yQ<j_~m{lMHi6Vzo4A5mkB=V>XYL*
> >
> z+S$fvkB>U)C|p6>lr((Qh1c*=f><W_sB3Q(ha!^`LsneTb+jmH_~=AN<=F61f>I{<
> >
> z_~3&N+TSDJgFSopNZK3KEfhr2C8jclkGhZ=K1vXan~#xf&k0jDIVG1bUoL5HgtyS
> m
> > zMzz@RQ5RCfM+ssv@sT+=e%{z1z=IIpFZq-
> Nw%JE}|KP!cat=E0st0D3z@m7Iw+-&^
> > z<cW2~&#dP-dy`|co+AKapDNlvVh&8)goht~xM|a-<;s;KK*@js0|-
> GrVZsD#f8^5Z
> >
> zzI)+?7upq2ISAl?)m><WR}3EoFm(YjeDo4~6+YtQ4(j1Pkx*q9U33wBfrDs{2}H7H
> > z&6)s~iMmmWA_=-
> 7h)|eQUGdBP_Yp%j44l<}C`X0CKU>d6J6>gMiDO~Bh!DpaQd@d!
> > zXm?|^1UE7A#oOL_=bfhok-d`X^_Fm6$6_%tQ#Hj_7(OZjWs-
> qFw0z{%hci90wfTs4
> >
> z%D3Ns`}pIJTWG^gt&nhK%a%QK=#Z0f^5dw2#96hC<gejlBrujpCeiW{#Zi_VfzI
> M1
> > z+GSg|Y~kYwD=j?HoWXsrI<{Ei%Lyplz3Z;K)H6>erQu^TIOn63X!(e-
> gXPNG;v=s6
> >
> zq36dRe~c3nYmff2%PwOUsScf6UsNEVa7yG9^~{q=Y5157&iN=MT0RnS%nF}j
> @e!Y0
> > zpwzHoLs)ag6<2V4&pr1%^2j5K(Ba5Ppqu=Zb)-nPI~A*^n9T4|5h#-
> k1fu2R2`8L@
> > z8?Kr)Yg&9{w%DRY3o8sgI;E`kU`2@AKt<%W)N-
> Ke6Hh#$m~)cJ3?Gw3JL_dd%SX^4
> > zLNtR+h-
> n8d`QU>O9(dpZZsA7nrI%h(M2zt*5u)WEMB#1#XT^$@36l(CF}5(&f04M=
> >
> z4O3zBY!MNNoR4_*#J@MuIq@gY&Jhcwv<{hEuwVgOAr&iDRBY_sci%10O@2
> yzjT8=6
> > z6&q`k83Zf@BIl!(ZO@)P@xX>RZ&p(oqvG}%<s2-
> P6k*5A(Ehy2X=vXyelrxYHObP9
> > z0AoDjR4V@3v}vQ&mNU*cgGZP->Z-
> {>E}Lj72YB;P|MF@z!6Y^alsE$D*AY`yg@$&T
> > z7hZUw#6dI7HweUpz@$l&Y@#V1TzTb{F;&K7YY-@91TYCH=%Qaj%-
> 3Iky_69%Z8r$S
> > zgaD!3cJ10Fp<cmTmK8}%RZ2s)?b@}|Rl-
> k0wM`wej=;>BGYc|Ka&htE#aVB)Z~X~J
> > z0s_pDv1Rj3Y!Vm*B0-
> >4t5y=;6}&~9sWZ<!Gm_HNoQcIp3jwr$0m|&Orn$dzP&YiR
> >
> zqG(r;bdrk%?ae{keVgFqqlE@mGhMoL(cMMzEyyG=2!H@;JZRTQcvtY&C!c(RR$
> eIp
> >
> z=;osZ2y^YeefvfjEV~rIG;Ne4fI0uVb?XW;PJYoc7?Ee5kGo!cwD7^I1@#F_FEJnO
> >
> zHLWNX0?dOfFQ#(px$l<9NY&~W?9QHh?m0II&MV)1^9@dljFM8ZBsmA=qIn)
> *K@}my
> >
> zU_@ONHU~giO=#S>@tbeH>ExjM81I@uS_*4ix#`xFGz9<NPd)XNTcUigpsI?Oo
> |LpA
> >
> z;c76PAaufx9XsSGegFOU%a$!;*AkEuuAwO|iwLj;fgz+^sJ!mt$~B8kj<C*{b>DW|
> >
> zZ7TLJ7?6$~JC@;Ygr%FTa)tm(I9mSyoy1i4^^r5s+|5Dje)Q<k__uW8<8{1x_3Ex&
> > zyPB0)H;g5I1xIsUfxo?E$-
> cg5(ITdtB@Up_{L@Z5ZO)uI3{Y*9BnRy9vJMt&Fg~Gr
> > z<}}R+5b9$8{{0exk=#NrC2fw5(*reL^_(FoB`{jIHg4RAt1$*D>1l$gNs<VlNrHa>
> > zUpetgK%9aS+4>LDDQw7Y+O)|FL-
> +Lq2M*w;+UUfF!90u4R<2x`ubW#Q6t8UEy7kmk
> >
> zPt9V(ldm)5d0ai<@KzC9D;X~32M!#FOTgqSY)VWL0X~aF!{I%wB_7Vi8#Zh>@x
> &98
> > ztaA>^V%?^H|Nb9+^pO)u-
> ($>9@tq4Xt5vI(0}xCT1O)IeNBl=$F_0u!wQ3cPt%PjN
> > zsUiY|i)9OP?b@{xguQOz9*{6A#^_QJ>XavADW0eSii>_;B7wP|S-
> ^>;qY0q7aN$Dq
> >
> zD7>JST*pNxJD6B}8w;;U`Xb>>h`x&JV_k1lZh4qCZJN<7iMH>mR;|kJEo!cAv{kNP
> >
> zO~YOZ;a7~2SG4^SQ*La8J^JXQVWx_fRFDHZ*D+PnWXsTn5Ma6sK2E|C`I;S1f<
> 74S
> > zf^>=#>R7X9&nC#Dv)6(hZ`-
> !b%vloXWxjEpJ9mETt+#@8ll2rnu5p$^KtRH^Bv5Bl
> > zgf9XYTyOyslaTX7TO`QJtls!y9&LgqO_~sXTGyeU-DUQ{-
> o1N?2XXVwHyd5qXgf$T
> >
> zH~LX4(16`>1rM0i^y$+_v1pSlas;r?nmTpr!Gi}2_KxmFVtvk^KfhP6UNvgeh`g#M
> > zLni`k8S@SdwuJ80tpxZu{q)nFrI_QQAb^JfIu~cQ;XjvlU+>wohiHSp`qi(hSFc`_
> >
> zM&+{5DpjfwMUI||YG`Wp7mg;F#pDvPOg9RBs=<Q?qZVb;Dv|>hkqDOEy?b|}
> x|rRQ
> > z01|@FHypFP{r20Dbcc`$u~P{`7ob+=k;D+FUAy+UapU;L34Is-6te<e?*xY6(^<D}
> > zU9-
> _F>C<}k>Jc~<74Gn`7t8@$JR+D&DqwD<3ITLtFS+Cr+<*jd$XQST+!xVRzzT2P
> > zym{=!5O58DgQ-
> Fw`N}XvY1_6f8;C?~bi)<Z6|}HgwrrVv>r9D}AaLZ7N1}lD%rnm%
> > zI&>&1k?_igMIk&$@Ljm>y6af8&9~hvqj%=lSR-
> O!j@_J!=Lav`6t92y;fG8W&8#63
> >
> zUKBkOBC0daT)A>(geyOCL1M2Hn@zSm$B!S6s(kC#tr<(B+fZ~Uf>i(_@RI4&sS_
> >%
> > zSFBhO-@wC-
> D&vqIJ$e}Bw_qKY@~2SBVuZ;Aguo5%u20|!lFXnBXP6A_SaM{HSEo*$
> >
> zR2c+OnRCxQ_wvgx#}01DkRj+C0#{(G{4kL6<!#=)x%nohoKulh4@C|%=nysrLSb
> Yk
> >
> zs%P2JW__5gG<I92Oqs$skQL)wZ@u+~8*ZSUOoyQ@+oLC+d~z7AKV+K^4f{mr
> oO2G-
> >
> zUi3T%4H`6Y;zS(FV7Z3N{R9T~zKBr=)aQ)aTO@Lx#Y`}t#2Lu5&p!M0*I)ZeOBxdJ
> >
> zao@LZAN0Yy0;|6KaF~xWAzxldjSeRcHd$9;O3Mx%wi1vXArEFRlURE#Yu4Luzn
> ynZ
> >
> z7NyA4IdTNhl4T)%#E22=*RPLu=Q=T|&Rjt@4J%cu6nTf540D43gF4m^XUv$fd-
> v|l
> > z33>V}Y-
> pGprX=4Ge15V<x@5_cI5Z8?&z%TsXlR(c^ya%nW;bj}4;?xbdWNyej8Mqa
> >
> zpOv9uzDbdu)}fixqD2d|G|@URBU|U2fzS_2moDYSg;!4#TQEHmTT(T_{R`s9wj
> G)P
> > z1fO-vXYP+tfncW+g#qT>sLz#DznjKp0s;2c*;r={A4fopZ`q#6%9e`C+k*`hS~Pw7
> > zbabC;)vASiz)W<CsiZ-`i2#E){8XTsgMJQP4H?vJ*|LQ#LKO-WD-
> Ev^^wzNGXTcf2
> > zn%JN<YSgF%Lz+7K(H!R+0j&A3<YKUgMjwhpxDUliJ|7_5M1TJI=LD{en~b~@-
> h1yo
> >
> zwA5zJnl*g*aK3tsy|H05VN>!gc&2s15Fm^u17K|J(IsoppaHs_ke5#tu{Bvx8Z%}L
> > zK1{IE<%g{qj7F7x)TmJ~i}@^G-23+J+p}j+bmTgA?AWGF8&-
> )gz4TIop<u2E>9VWq
> > Q9t=$LltI8CkSzrM7XaWYkpKVy
> >
> > literal 0
> > HcmV?d00001
> >
> > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > new file mode 100644
> > index 0000000000..a636b086ca
> > --- /dev/null
> > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > @@ -0,0 +1,153 @@
> > +/** @file
> >
> > +  Logo DXE Driver, install Edkii Platform Logo protocol.
> >
> > +
> >
> > +Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.<BR>
> >
> > +SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > +
> >
> > +**/
> >
> > +#include <Uefi.h>
> >
> > +#include <Protocol/HiiDatabase.h>
> >
> > +#include <Protocol/GraphicsOutput.h>
> >
> > +#include <Protocol/HiiImageEx.h>
> >
> > +#include <Protocol/PlatformLogo.h>
> >
> > +#include <Protocol/HiiPackageList.h>
> >
> > +#include <Library/UefiBootServicesTableLib.h>
> >
> > +#include <Library/DebugLib.h>
> >
> > +
> >
> > +typedef struct {
> >
> > +  EFI_IMAGE_ID                          ImageId;
> >
> > +  EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute;
> >
> > +  INTN                                  OffsetX;
> >
> > +  INTN                                  OffsetY;
> >
> > +} LOGO_ENTRY;
> >
> > +
> >
> > +EFI_HII_IMAGE_EX_PROTOCOL *mHiiImageEx;
> >
> > +EFI_HII_HANDLE            mHiiHandle;
> >
> > +LOGO_ENTRY                mLogos[] = {
> >
> > +  {
> >
> > +    IMAGE_TOKEN (IMG_LOGO),
> >
> > +    EdkiiPlatformLogoDisplayAttributeCenter,
> >
> > +    0,
> >
> > +    0
> >
> > +  }
> >
> > +};
> >
> > +
> >
> > +/**
> >
> > +  Load a platform logo image and return its data and attributes.
> >
> > +
> >
> > +  @param This              The pointer to this protocol instance.
> >
> > +  @param Instance          The visible image instance is found.
> >
> > +  @param Image             Points to the image.
> >
> > +  @param Attribute         The display attributes of the image returned.
> >
> > +  @param OffsetX           The X offset of the image regarding the Attribute.
> >
> > +  @param OffsetY           The Y offset of the image regarding the Attribute.
> >
> > +
> >
> > +  @retval EFI_SUCCESS      The image was fetched successfully.
> >
> > +  @retval EFI_NOT_FOUND    The specified image could not be found.
> >
> > +**/
> >
> > +EFI_STATUS
> >
> > +EFIAPI
> >
> > +GetImage (
> >
> > +  IN     EDKII_PLATFORM_LOGO_PROTOCOL          *This,
> >
> > +  IN OUT UINT32                                *Instance,
> >
> > +     OUT EFI_IMAGE_INPUT                       *Image,
> >
> > +     OUT EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE *Attribute,
> >
> > +     OUT INTN                                  *OffsetX,
> >
> > +     OUT INTN                                  *OffsetY
> >
> > +  )
> >
> > +{
> >
> > +  UINT32 Current;
> >
> > +  if (Instance == NULL || Image == NULL ||
> >
> > +      Attribute == NULL || OffsetX == NULL || OffsetY == NULL) {
> >
> > +    return EFI_INVALID_PARAMETER;
> >
> > +  }
> >
> > +
> >
> > +  Current = *Instance;
> >
> > +  if (Current >= ARRAY_SIZE (mLogos)) {
> >
> > +    return EFI_NOT_FOUND;
> >
> > +  }
> >
> > +
> >
> > +  (*Instance)++;
> >
> > +  *Attribute = mLogos[Current].Attribute;
> >
> > +  *OffsetX   = mLogos[Current].OffsetX;
> >
> > +  *OffsetY   = mLogos[Current].OffsetY;
> >
> > +  return mHiiImageEx->GetImageEx (mHiiImageEx, mHiiHandle,
> mLogos[Current].ImageId, Image);
> >
> > +}
> >
> > +
> >
> > +EDKII_PLATFORM_LOGO_PROTOCOL mPlatformLogo = {
> >
> > +  GetImage
> >
> > +};
> >
> > +
> >
> > +/**
> >
> > +  Entrypoint of this module.
> >
> > +
> >
> > +  This function is the entrypoint of this module. It installs the Edkii
> >
> > +  Platform Logo protocol.
> >
> > +
> >
> > +  @param  ImageHandle       The firmware allocated handle for the EFI
> image.
> >
> > +  @param  SystemTable       A pointer to the EFI System Table.
> >
> > +
> >
> > +  @retval EFI_SUCCESS       The entry point is executed successfully.
> >
> > +
> >
> > +**/
> >
> > +EFI_STATUS
> >
> > +EFIAPI
> >
> > +InitializeLogo (
> >
> > +  IN EFI_HANDLE               ImageHandle,
> >
> > +  IN EFI_SYSTEM_TABLE         *SystemTable
> >
> > +  )
> >
> > +{
> >
> > +  EFI_STATUS                  Status;
> >
> > +  EFI_HII_PACKAGE_LIST_HEADER *PackageList;
> >
> > +  EFI_HII_DATABASE_PROTOCOL   *HiiDatabase;
> >
> > +  EFI_HANDLE                  Handle;
> >
> > +
> >
> > +  Status = gBS->LocateProtocol (
> >
> > +                  &gEfiHiiDatabaseProtocolGuid,
> >
> > +                  NULL,
> >
> > +                  (VOID **) &HiiDatabase
> >
> > +                  );
> >
> > +  ASSERT_EFI_ERROR (Status);
> >
> > +
> >
> > +  Status = gBS->LocateProtocol (
> >
> > +                  &gEfiHiiImageExProtocolGuid,
> >
> > +                  NULL,
> >
> > +                  (VOID **) &mHiiImageEx
> >
> > +                  );
> >
> > +  ASSERT_EFI_ERROR (Status);
> >
> > +
> >
> > +  //
> >
> > +  // Retrieve HII package list from ImageHandle
> >
> > +  //
> >
> > +  Status = gBS->OpenProtocol (
> >
> > +                  ImageHandle,
> >
> > +                  &gEfiHiiPackageListProtocolGuid,
> >
> > +                  (VOID **) &PackageList,
> >
> > +                  ImageHandle,
> >
> > +                  NULL,
> >
> > +                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
> >
> > +                  );
> >
> > +  if (EFI_ERROR (Status)) {
> >
> > +    DEBUG ((DEBUG_ERROR, "HII Image Package with logo not found in
> PE/COFF resource section\n"));
> >
> > +    return Status;
> >
> > +  }
> >
> > +
> >
> > +  //
> >
> > +  // Publish HII package list to HII Database.
> >
> > +  //
> >
> > +  Status = HiiDatabase->NewPackageList (
> >
> > +                          HiiDatabase,
> >
> > +                          PackageList,
> >
> > +                          NULL,
> >
> > +                          &mHiiHandle
> >
> > +                          );
> >
> > +  if (!EFI_ERROR (Status)) {
> >
> > +    Handle = NULL;
> >
> > +    Status = gBS->InstallMultipleProtocolInterfaces (
> >
> > +                    &Handle,
> >
> > +                    &gEdkiiPlatformLogoProtocolGuid, &mPlatformLogo,
> >
> > +                    NULL
> >
> > +                    );
> >
> > +  }
> >
> > +  return Status;
> >
> > +}
> >
> > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > new file mode 100644
> > index 0000000000..fd9c489815
> > --- /dev/null
> > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > @@ -0,0 +1,10 @@
> > +// /** @file
> >
> > +// Platform Logo image definition file.
> >
> > +//
> >
> > +// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> >
> > +//
> >
> > +// SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > +//
> >
> > +// **/
> >
> > +
> >
> > +#image IMG_LOGO Logo.bmp
> >
> > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
> > new file mode 100644
> > index
> 0000000000000000000000000000000000000000..d1d099789fa794648b86c04
> 6f0320a553954764e
> > GIT binary patch
> > literal 11944
> >
> zcmbt)1yozzwr+6OVns`fYjKxAi#rsGl~SZwaQ7xSMH;L{gF|r*PAO2VloTiy0>$0k
> > zA3gV;|D1Erd-skz-pU>sd+dzt`RzUD`sO$1T6a@-
> zX7CbN~%f#G&D4T%KZm$hXg1B
> >
> zFwoKe9QOnB{=mY;!otMF!pFhE#wEljBqYEmARr<pCnX{#BPJjqr6MJJKtV}KNk~
> FX
> > zLq$PDPC-
> fW=O$<v_y57f!o$MCqaY$6qWE8ryDtDTT)+U@Qw%gR06G~O1{vC24}cMX
> >
> z20+IEVBF*V`@qG+#=*abiT>yJ*Q5Y642*m1*w}c4#JD&B02(?5CIAZ?hYS~woL
> K<)
> > zKwQ_-t)Akspn~^1N-8luBd-s&V-
> KGQy>a&dLsN2V>Zoa0L=^R{AjzqD`Cms_MGXv-
> > z3cJRIUxan{{M^5{K=Dte{}aNWt7QKG^!KYX078s=v}71$06D<t&sga1<Y77-
> 6!?Fg
> >
> zkmOqR@l8Kl{#s|UYF@;>+y`NB5f6%1VS@y`ZtL(3A7^4K^G=(4UE49w?T_0SDk
> G($
> > zN1<Fzi-
> #BCZuBd*+s^07kU*dt{v81Q>)gk~AQ&^pb*wNQgm&5Qja9BOcG>LPphMn9
> > z?<LSCzG-E!dB<m>vN(4)gekvjlgi*B7D+O@84|?4X;VNd+d{aB!>#pj!RbY@V{-
> 0M
> >
> zPKO!E5zd!e2f}z9zFqo?RzF^@dVZHH#ahPeGa{TZpU_*TS1M}tX|w?EK$R@^Lk
> RGw
> >
> z!2NJxRO`lH|1I4eAlB_T*bxj_KwZ3X{pDi~+h}#8{=KYTznUxyJMG)ThL|nWX9zRy
> >
> zjlcdeRPG?hqS!3Fs64*K%@X8ETgA5=WaAe}8M~Q$o<KY<;?t0OTsCev^Aip)xZ-
> &7
> > zEnwj2m76xl$_MdV+x{H|P#S4>kN+4mZvm5zF6{kGTDNoQ`j$h0&=;2p+-
> Mm#r;q9a
> > zs>e7`0_!VEV8!}BIp8l(V4*`i?MARK`>JfxT(4<Y*rs-S%vWL0!r{>*Qllw5>&m((
> >
> zI+~jN%Lzeg%hnEzdBDc}>Pl=WN<Bm6{2?g>c}Qq3kngxNWsM~L?XtNCxd(st+&
> s!y
> >
> zI*EgOrXSDx282+Z^`WkNLp5%?Z5T!MlIZj?Z;RlQ`kXhU046A8Ah5sU<#$$%HnW
> 8p
> >
> z%i@k_8@M(#J9<$Rv@YyRIr0Kn;u#U;OMJW?y=?POH6LAyzUFU)7%XSboO{-
> I1(G~!
> >
> zv&NF8LJDonPp@=)(heT{7*k(r$#v`!oGxJ)Oxu5Xb))L#NmJ3CE%K@T7NbCa*<Y
> 3{
> >
> zSkVIUwM1Y;`p{X;$6MH+8+5bvi99ug<GoxS<aAQHwEI+(F1~ZtI!5~r5Mw8E9(X
> vd
> > zUrJtY`3-
> q7^p>6A$y5?)h$gnjn>G8wL;vS%m_wlDvulFiweq(@6$qzti;NKBX@X(6
> >
> z;F*7)|CQu!YNVQ8kWB*T9bgj@^m|rs1G~^qc*#HIz1h6Sa<Arafr{L!p+et*ooI{!
> > zMIsQB5uqH1voeu*r4H(0{WgJb5FYpS-5#cI4DNinbgL(w@pbDN{bLdE=I-
> +BLH<6@
> > zJDE)m`9pQthFm2ursEo$*$4&bDm7)9a5WK%-_c`s`B)nR5h-
> @4#bnHT`3_b!JBHow
> > zxyGDgImnY#bM@V-
> uG(2(e5mx8F$Jwj7So#v1GxWhp>ow^hy!(aeiO^a{iey<$mjMM
> > zx06lB1|z#Qq?(cCl;i<WuAU%C)-koQcf??CdqKwly`#s}-
> )2PTm^a{pEuoxR=C#gC
> >
> zs@TJ8#4zz8InTL)<1nfss&!dP`@^_Ya$?Og(x{@I4dURS)bN{D0#kL^gFy7@Ppu
> ue
> >
> z>&J*p*N`Na;KD0%B22CEY}XdL$O}WaZ+p$(3wB9c1NkA!>=W=o3Y>Cg12TO*z
> h4fT
> >
> zSA%uomW@1Gl5o6W|JkMiZ5ZTo2JJN0fGl5hX(@{54lqcN{n;X4wBsu(cO0n?&
> $k<J
> >
> zsY3z_`2DcPSkp_>0+NTydjm@!SeX7`a!6K%9sd(~(LGQ<j~Pc%LnEupS5FcO*+U>
> o
> > zsre5rS}aW)s}@)gnlg{qR7-
> r<5@SomE6N08vY@4nCv<_`8+xJm_R8a=2_UR+*Mq*)
> >
> zgafvZ2Ljj8qM30Bw7#k!fg(zOI?QC5TacQR&pROVy2xtX{vDwB8fX<$yY_KhYTFe
> `
> >
> z6V!988l(NgW_i1Dq<Y(X2h&?ef9)ZCl@KwL)yUv}nzilJ1F5Dx^?+I4;WOwVxu_e!
> > zrzuo)hf7U<4or;rr^mo2%+RXu<Nno_E-
> MqUbaW^+bO&JL!B!hoy7_Fpt8o9V3-J8_
> >
> zw4D`mw~0ZLxk!!$nvP_poz__f6yn{K9eSf)fm1_~&V59f2MJ6{;xb(dWT$mSzW
> WSY
> > zCQm-AL8Vn?b<aePPdE_Ih@94d?-qAua5UXMO_vw!e(-22`4Zj<hC-
> p6eI<pRAWZsS
> > zb8l&H%4Ch-r4mX`tuFn3S!aPU6@1f@eFyM^e+Ki-
> R(kLYWoNjiUT;*DRZNqc>Boy#
> >
> zsU_#B%Fd9O{MYP)g>yon?|`q$sUrm@?xDp?`?@DAql@r!<Mk7UpO6q~4Sy#
> 3d1$Mo
> > zTo{ex<xTRjqhMQ<LFSm60Y<O<I#Yc?bNQnTO2}AiAPws`T^iO`IV-
> >R0o83OvX&P$
> >
> zoGji5r%^OavL<0l$alF^vw$Ac>|(o{QnE^3Ry`M*a?wj&)+Y_xz4E&rZKb(WmB;a
> w
> >
> zz2WL)HB+aw{~%q=@s*V?B2}?&z5{|z(O0%Y)*qu1Oe@xz@Kb9;+uQQs>ULA{
> b14sy
> > zaP1(hq~*)$ZVP@VRo_`kBo7p+qT5%FOI`_0#d(u0b>c-f3!lIVm8Bphu<-
> l3=^cEW
> >
> z5u62#D^7jk95y&DxXZ`h>b@AM7?6OO@AkWH9*FHe`{NFfJvY~84R4JAdIy}U!
> X?xb
> > z58KO(*<D`X^!;n1{tGhU-
> gB>3{)H<UNZNvr5pSAGpABrc$VQ~|o6WLIEux|oxV!xb
> > zjD{B6#&qBk=jK*4&@lte0NvuLi)GNxZo1R;cyqG1Yx2L*Yj5>_w5=ykbO6-
> OoIGc@
> > z(%$_%q49Wzrf=8f*!ro}6KlofhCpLZjOE->Z=+CSrX^7{Q-i;x1D%xidFpr^$Jo}7
> >
> zhmkhq2W29QI%yJysC4Kd7#(ofy_73OyiC@y7PKyszt_yV#^~28xfR208mp_9oa
> e)m
> > zG^dHP_;2xo{tkF$lg1()k*<*C)r*;nOIP~r6ad&0X7agWw6Qp|J-
> 7|syRK*C6c<&+
> >
> zm#Ss4Iy0oPXLXj`W+zW(@qwy&V@v`MIHYUdw2LY_DccN?H2Ld{sdDKhz|dy
> w<cRAV
> >
> z&Gem_HJhM%1tm_vV=`caujL}+9iW@4YWm2Lc4A9|zke3g6~vK6_RLS|#lj5s2
> 77P{
> > zEBjYSK0StH-
> KO&ct09341)J0(vgR5_<Qr2HAev&AVpIG+5T^w)kZI{1r_^2bvi*|F
> >
> zcDnL_KAbl^aCHKjRI~pisA~@sU8+Q)Zt{k)*^a7a<t5S2=hIZiF*eN%GP363fJSp<
> > zcSQrUsjo`|cIV$*k0&&gqjq3!yO`Y-yXx&-
> )rd!0)UwT<X+mDe9L|a3$;n<F8nDj0
> > zbt2XTx~4+j0mf`@)4?nrk_$M>$6^uZ(~Lx6J$-xXozJ66o%(}%sgjYss?*LK-pR$?
> > zU%@5+mRbI$3$X*b?*OPJ&08okXrqNVeO-
> 9(A*20F*RkHp?htHs72I{MQs4c}4ZeLk
> >
> z!TU2Oso2@(aJR1V5X3wDaphN2Mg8&AeG*o(hZS5rss?Xn>Vc!QRV*{#nC_en
> 6@50g
> > zVKc}m%KkiBa%Kt{QGrG>syls$f6@-
> UE+Ri1de4jMS5)7SA)p|w1fwqa9J?pC#kfXe
> >
> zGxL@vL}J@>8?yRiHd`zdLL4I1D0c!8#&K9GN42A(py^jwrB9cRGct&$orzhT2;!W
> U
> >
> zFfR@C;7Yd<N$aq3lY40;{xgnx$m>jpcgp*rllkD@(_Pi`@^5xz<3~fgiuUvMmtO!-
> > zG@_JmlSGZTlwMjxkgjGKpTrDI<GM9TNySk!(_9<8ixLJ-fOl4;Jxe-
> K_~6?SQ|fCA
> >
> z*E1W01uG`y8tZBT$%ZihW`T|#(O)VXN3Df2Vv6Y}gN)k{Lqi{RJTkfP^AqcmkHfp
> F
> > zGZ67BmA;S*tg0KL&I>z<z?M+HBmf=Y@D3o3@UQ>-
> JQJE@y4|C7IZj3HX(Bu)fyKW4
> > zM_Lmkd1?IK<~U-)bUB*haUKu4-
> dY+nq$>gA`eTk+_~zY3uflwPv_xjVj~sG_Rm17j
> > z!yD==(psSU;~lX5Eeo<UUX#XWbxQEc5$m_VHv<-
> gC`E&MorI0!o88rPSJXA3VSq4J
> >
> zW;H2F4k)cZSl4}IWHQt(BebeK3Lg2YPDSNn;WRn5Z+zYE#()7sM==;A4t5VF6vUf
> T
> > z5#Nbe!Cs!XU6E>gQj+ky-
> {@C6772nwu!48=I>ERODa#OzoOJI%F%nh}29ST4E3B{(
> > z!Be@Pp{|$+i%1ePIs17uNjh1LQa7t+TJ~;tvm!lzBUU@Qtk!-
> IOLF7X@!35lin4ES
> > z$q5#7%y*~Dyzc-tsrB`-LA8RNHe{w;>-xn(E#n4-q*6GB-9d2Xq8+iaaIgcL$=X2U
> >
> zcX?*P$I?ZafVe1pRh)XApuO$7%#e8=$c645;9^~d?uQq2*|kT#QPHdAIX(fQX8K
> nD
> > zCf&BbL7v!-Oh*ez<X_bjaLgGJ)a|*ozS4@yfc;pPuxt$pvc0|T{2|O(@yGv8-
> t%Ao
> >
> z(A(QKxtlrR`3+w9Tn22T5~6kRVKu9q={eu4?G|EZyZcH2dw2o7ypkWS$&rrWGJ
> R-X
> > zYRS2$b8c#yQ0^V%$-s+H-
> j&OZo~7OFwssk_)$i;vp}qqU;Yd+16{VZ*<`yLu)0=?x
> > z!iWZ=cLBcX1S=~eT~4wz$HN&nm*iRn%L1b-
> y^{bgc&)ddW&TgNrHAuL9Gn>s7Tz}F
> >
> z+btRUDT}eU=)~&faeUd>cG=?hCic4iQ=i;ygmP?_c@7yHxTS>kEsut1SGJp9yz!w
> U
> > z1N?El)P3f9=N&a$L{-
> pdtjgPjuX;~yQbbtecL0Z?=v$m>rjs|+>m|&cBEv*uaWV_`
> > zt(Dxx=Z!+1V&_iRq9ZnOWVhhRmZXUp^cJmdw+<8-
> oLRy<nXDAOF<0P<gqj`B63`4f
> > zYueOWi3y&(O%PZXX71K;;_cxG3+GiX4ub2-
> vVmRhZKXyB<G9}2B3UnCn#s+Rd-omV
> > z#t3rBMY48UydL@618@g;@%uIgGS=+skt=2xm~kl+#w`1Bg62E-
> VPjZ2ZedRXJ4)`m
> > zQyrg))>f0D%8bF1;Q&eVV-
> %;U3qox$b%4EDJ~^T77)y3lJZMe(Fr!H9gK2jC+)l!0
> > z;U+!oA^V=JC|OKjuoxyO@DU==pE$#lZkMjuLYa4N8-
> ?uyEKB>^7}M0iX##x5sV0>|
> >
> zZ%f8<2UyTC#1X&Y@Ae#F8C|WuR_l!s6J+hu)3t7_Bb3!^lvL|h)z+oUg73~=+Hq
> %t
> >
> zzxax+s3$tU$fL3<^<cAX%8XBYWBSmJ;QeWWokbt!Q^;?F6i&r@7IX>)gm5baM
> D=rm
> >
> zR!gARP?RN?S&k%wUL!e(eMn}!rZWnY<OMd8$`>!pGD^2c@fIMQ!+vev2pgBI=
> }L{=
> > zGI$P8+BnG?P*YWN7Cn{4;$?)a7;oqzJ8j5i3@BN@-
> 2r&ZW5d^ftTcV^I~<nMZ|74r
> >
> z4Nz}%_Et$GmoxyYppA!$ZF6dEY~q>&v+u?7neSLgLF2r?Go+}6Na~w%x_5OD
> MRP#y
> > zx<vDz<VIHo4)mJMj}3YfHuik+J(QxC`AJArckW5fYjx`!9oYIQSnTLwYu-
> SYR%yp#
> > zx8+cP?mJo5X<kvB$w}ad3|81-
> ;(|z={y3gw1@t+IRa0g%+$nz3=UG{5m*v~hhpK9)
> > zS0|0Z_7qfdef;D^``z8BBewWOC1tVO_ce``s8#V4&ng$v89g}hO(cvYlS2ZT!nsjv
> > z{(<>dC-
> X`gy;m<Krvtltp0+*9=^k(i_A#?4@T4ZB_l(5b9P3aASm~B+2fBF@evzP~
> > zyMi@-XmIp$F!<Bp8IACRTd=TW-_tCXg%KT#ZXujK-
> nmcl<0)*EZEf?45YKDpTx0`w
> > z8~yxw085D1veo42qdUL|@R8?(m^i`3SD4c@*ea-
> B=Td=u1jBsNMQFQv880yl&b)}m
> >
> zI&H5IpmhACHRHVM9SLH}&!XoWHdoc=>6`WJua_!{D<#JR4Rlw?Rrl>NzJjaQB|
> !+6
> > zCg-
> dmdU!yc=R*`GM@Ys9$<KMW!omJaq^|1BXh0WoZ~c*+kQVP#My{%lgyodT*a
> ~AS
> > z4F`*9+-&)9@uC>X0IfR!vjLM!iX1L!!-x)>1C<e}T92CqQIW8iZma$-
> omU~(K8KxW
> >
> zh3Wyf6GNX4vv)FWhDB4+*sF&Xgu^55Y&#<ZYANJXUkQ#_LGy^w0Pp#_Qd1Vj
> 6MWnn
> > zx-
> 8jP8E*|Af%h}glpO2}v5^$VmxGvK?^EX>g9kz?CrQMUW`d$GAoEY=%SWK#EvZ
> 7M
> > zCIBm(6h<-
> gZOO9)qXwr50!%Rnx$dP7cyGNod@G+iI`x580UhbpfS$svDicPk^61h|
> > zVtFY)!p60(YSPS>-
> Sp%5F+t&nU%T2}W_qC@<zCHFE}+aZE7$fWY*PAvB5EwKyX|OX
> >
> zZT6!*zwU#Wim8fHQ2hl%bQ=3fJs`x7TnsrXBTTIdL~9<}#CSPR*qCX<2NGiG5X
> @ok
> > zKxsTpk!%Q3Kg2jUpy-
> O9;(KTdbgDJ6;scGYaF)0|5j)KC>kVVZm@tsPT$fZ|sC%|^
> > zEp3;|{SJ9aFWMBU4t)pzYQw+Ou~%#(UI^-
> R_g4<b()Ng$eE#<G1_J=Tcu`CcLw=|i
> > z%(W()+_Z3V3}4pYWDZUOqS;YAc#u4j-
> N=95v2ZWoI@EAQeh3W{br!gG3T)y_!&<V{
> >
> zvK=34k4d~*!Ul&RbhX7?q+6>NeVKlx<C+46{hpgGe_7%i?Itd5ESh1jz65TYU<B)6
> >
> zT(gY^e<qlOg<h|JRBYp%qRMT_7|P>h|JkMrxdWKsYr{6+z>b9$uVZ)A?l9u5Cw(
> =l
> >
> zv!gB~*kX;A#1N8Cj4fPR!MLEUwXGm%r4>Ad`r*4Vt)%f`C2ewpa|`$M5%B`BM
> UZ=2
> > z!-A=K?rk|78$~${rNUm}Z3H(kw1*-*fEAZr!IN2f{X*~K6>^$T)|@?!FIt||O3~Rc
> >
> zhA~UA1c=ELq!ZGDoet9`@h%;Ej_FmkN(~8r7Jh+t84f&)Korw>l60WBT&6aT@d
> -v?
> >
> zm2;jmw!>$N0vgjF7mNsl_nDja8A@YW8@!wYl~e4q;8#l<QsMfp{}Z#xX$m(J|JS
> 5U
> > z9NrwVzrIEkC^l8@BmPxZ*HgE3F7n5-
> Ncj!BoI_AyJsD~|g=`+k!oi7?aoWJH>kCbY
> >
> zQt*{>`kIUDupw3OJ)m&1U$!7ZNBJGdfC(e{^h1bs2hWa=ACI4@?GrNOP@&>t
> S}U!k
> > zECP-JIm-
> w7Q<wFa`47u(Ng%${2+TsSB3DJjQaEnpX^G#QC`x_$O#30(=IHDJKU{*E
> >
> znq2D!Ym%bl!@bUtk=L=Jz{iXJS8YqX_HZ>~epKAz;|Ug{j=46gw#fV9jm#=H2vBa
> F
> >
> zqc{VeZ9aJ*O|m(R$qV~<UD$Ra(Af(o@p*x@kC3nQm~)`gF07H6Fvnuk@kGM
> rT~U&k
> > z63%C~>q0HWFP-P-
> jXOK}kK%AvQFuPwVJ|_q1I**~ISx@6mv)jFu@9ScjpGp;_667o
> > z830i@PHE!H*EWW9DXClZ>WyakQp5)Cd5K$mk8<r%EMzSPO1~jUAY-
> R~K*W3(sPjhD
> > zVxxqqw7uKqcjNqR2LJImlNHHtF`z49(d37vOCS8{fQJ5OB_6b&I7-
> v>eAGhq3z#f1
> >
> zbzEj}>%N~(@nsTk>Um>1<za^9C_g)2z5|Hf0aC&7O(9op_MM}qF70B#F>~y!r6
> <Eu
> >
> zFJ)uQ+NV9~XYboORJ?;};8GLFN8p5X3yu=2jc?@ut%6*~108P?KmgK4(KXNvKy*
> pL
> > z!KVf>JP@j!sH8hKV);=S15yWfJ;N=NdgwugYx!YmrXm{I%&fK#TU~qH|A#I-
> +EImk
> > zpotaM0qAm*kA9VSUPJliV6>b$R`a29w=RLI$OA5((38Q_U-
> gp8_RqXAGDr*$6Yc<C
> >
> z!A1waJ_hCOLq4C$cd|81&4q@?@0Us`sWP_DQP8j6WB&i42!RWAzfG%<SZBu
> F&jbsw
> >
> zcV=sC<2*U)Zvx6&@HPHB7N9WZj^zAA#F%FC(v2MfoYnCX0cE0ops1{ry$ggR6
> NA(M
> >
> z2^+ABiz4||_DBnt_g`NOAgys$^T??YrTCx*9#P7gsj_0wsgw%}Xqr<N{rdWWS!Z
> g-
> >
> z4H3qP8xIrMG3{_HBo`K3$qL!mbiXxmITj}Q)l(geS7|Y%c^d&SIuIL<81BIiw@DA
> 8
> > z(|T*1(_W3_%-
> s1!Tv(Zw;o%;NU=NOK?F+(uv~UO5Jt(>ZsDe6<Q8=2Ov_9_>gm+$F
> >
> za=PD_ejXn3u=GHz!=3g65%;*%m5TnFjrTr2{7yPIC{>vXfpr&Gg{;#;sWSJ(HnZR^
> >
> zP%n=w&xEgrDM*LrnO*hLBj!dEc|0|899IAuaAz?2JI#nH^vG?g7Q7VS0!wCo<Z
> O@^
> > z0KlkE0xHh-H6e^BOp;Ma3_*%o2XMn!Ke~iklAM@k2SzZC`s>rM-
> 2nW4G!i@hv}9Ct
> > ztTN_#K~bl5i+0oZfV#D4EkU_y8{zv-
> hX`i~&TkhTx_KAAlZMXguacb$Fjxx~I@r=Z
> >
> z!;NFfic&3^+z5R!85}UuWhO;Z!ZZL394B?me49=eqOuTdHBR9N^pZ}Io)F9_a&P}
> e
> >
> zgn0*m<z+k1`T1D%?8}u2lQx2_4pWcD?*${(tPIM4x*LezJmObkESuVMX6#Av2{
> @)q
> >
> z;%=G&^S5WtA0KNPuIXV?5iorWd9CAqQc9CGggH)_z|f}T&hTT}HJByBTw4uV&
> jUGO
> >
> zfaCO#+6fF2N1bE*vTX<ntB`4Z$oawb9h#`$Qkhrb`F#0x2$B;|F}n}#0G7yKJ)3G~
> >
> zGmb;+#!8?Nu^=B8B}~6_koDD8@oQ0;8LxY8$1bzP8AJ7)q+0q1`mE7ui}P`G@`
> CKS
> >
> zAGrqxc(``};NHt^BcAj<@?US^gDtZwO|%L454il+QUjo2Eadr{=wMYx3%+4fL<M
> 8r
> > zCgthu_mBMfm0Q^Ou~pM>xd%f#Q$S4T0w{R^-
> Y(1I8*G={I$F4+ZH`)EHImR;^vulo
> >
> zqEsVwKrT_obLqcU^i)YhN2z>b>5DYGpEo^I_fD@eR5KjES*2j(i^*^&SAK0jogZL
> d
> > zJoBPN*F*ocb9&zRk?eQZ`|ljO8R|Sr@l&A2#1FN4$?-
> j*0040pa7_;kWC_KwXa5Q=
> > z@Jl<Qi2U@Wd4o7@R+h}pWQh7Yf;)%&B@-7nJ`-
> pAtx4aT(+#=;D6HH83+wW*((szd
> > ze*aj?o#`ShhNSL$KGT)e?==07c$=nVR+_2@j7p|_53UWk4-
> p<q_m!^m9KMJoar}XP
> > z@k8^U2UL?(EBk)#6yEAQ9WzT6y-e+D=3KHcJ4s13@F)e80xE{-
> LyIf+zYrt;J=3($
> > zy=b|?FcP<^U*a1C4!G9G8Z`A<(0`-
> 5rbNgd!!PF>3VpnFG+GFsh#+<(#y@RjrT!NG
> > zp)J9QOI}6gdzgjC&|T5<0AA*gpSSj)kj608I{nqe!>FkP(W0L0QjS{FPf<*qrf95|
> >
> z_3?R<@yIi0yQi;SnprC>bm|r@Hait6ce$t0sY6q%CU(YfdKEX1ndOgp&H>?!J+u
> Tv
> > z_T$ns^dNh;hR}ivc2`(HlrR%NR}YWhuXxS0Cw20jCM<E;@7&)<6E?4-
> 2r%#G9248&
> >
> z#6snQt3jV<3;8Q9F3vYgB1LC%%ZPn>#)=Zr%GCX>A`>>euKfT$31(FegZ>YC))nll
> > zr7O;hktJmggtyk>XEX`D$=&X6I>LpwNFMPLGb`G#{)Z?&L+Dfq#-
> WXYFemoj*{|FR
> > zMK>|)y<Hq8Z!o5pqA0FvVtx%x9oUp-@-IL<YZ|4GW-gvK2CXJjg~uP4Fm%B-
> 0wOEy
> > z>)o*On|^rNdNqi6#-ylP;?MR%u}1`}NOh`nx9G^GfUxsGYrkSgoS*7xt$dJ-
> bmG`1
> >
> zq9e&siyn=8E`=eRJG>G$8U>^t54w<Ui>jz>eUS9XZA3_8ueBvjk&Ce;0@%PgzU!-
> T
> > zawecNLK5|`Rw}A9eW5D8-
> SMIPpk6%f0G_g*2NN~bGLK4GxM%KLEp3cipF)r%cziR-
> > z?UR<B-
> y@PA%#hZ@A2C_#4_!xqUu`zx(HRI2ad)pAN1Y+fGTf7M52ef0<c;ddaZhzT
> >
> zC_Nho>dXp}tMw&EkEI(K?akLs4D<?eUOtNX+rmaoFky3z#;CL{D$Jp<#aTH)9w
> hMF
> >
> z;t@rqr(q}>k$5;MgM#vFBOM(KP}+30(<^IfD|;N$Hf|BeE)O=ovxGX=<<B$AZ}a;
> V
> > z$Rib^)uXhoC;=+7-e-sx3|KJt_9b@ZCSL^Itwf1LXy2Y-tvxli6`j+7j0P8v(r8DK
> > zv5C^AeOHat^{btzSvH)_T-UyHP3=R5`=uffP`~Y4LlViPGn@0nS46(lLl})yAAUYn
> > z@{5}YBdtMfl2&#vHI9=-
> fYsgieqAdo`od~$n%ifM1<v=21h=~xCNB*e4U&l?5(^my
> > zFsgM-jsErSWEYukS^0s${WHgJ)r9>Pdrr%`#S#>zw#pkeJSqxl<3}9YZ!+bPL018-
> > zL|CSXw=Jxd5|Jdv$2^^QEnG;igadkzVrjG{IsPX<y6t*y%clEIIPN1-s<Qm+b>YoB
> >
> zfK&XpJgYP(y?wH}QBYiTwPEg@vYnUI+3|6iONY#|7#;n%?^~~e3KQ@Vm(03(%
> x{&`
> > z?JlMf;H&F#-^{UKR{l#LcCA`Ui|P7r>9f6Dgi&*<TD;JAb;J2(uHil|C?pWGgiRTb
> > ze%K2mqAW1b`G|haSJ9L;HgFoN`KkVT`~m(nT?j;nbDKeiF6-
> ;S@mRVGNqQv1JATd(
> > zk|y!Q7bMIPOXfH|e%4qG7lty)bmsKdc4~{CFkU`QoZ1(g>I&)M-
> n`$WKrOne+1*Iy
> > z;;on-O@4eBKt|r*U5j$PL{sy}X;8agm%wWJxJLJ3H8H2w9xL}+lAx5+`^J-~*;PlD
> >
> zNEBK$y?ueKFmDfMaRHk75QLT0UkDYe`a4bYajq@*yEZMA>7vy15*(sgpxX9xk
> S<_b
> > zli3orj;~h#tF-9v&gQ8OqxW6T-}sAa$hxxEK+qQ{^ikk0P6<&7J5_;)$Crkr$hJMw
> > zmW9b{54MgeThpmSd|T^BNAFAVP;&)5ME!RFY;V}-
> 76P%Ziwdh5qHZcQ$ifuzLe|Eq
> > z4o+(j8-K8KU`}`H9o%%l_{ft)VHlHXa*k7kJvw&G<LG-
> dGM13zGiyy)gypmOYg5(j
> > zdFLMu&UsSfb|TOJ^g`<^RV2aPVlrA?^8xn!4dh2;6<4F+Mhm%={$r|k;4|rQ-
> vCM8
> >
> zo^s?#hlC^jFnEtFMrq(#Wkn%;XG_OpoKa;T7V%d@{JvxQSAYHAPp~h3JDPsF*K
> E<-
> >
> zLY&zbZ~B|@;pUVb0~$u7rh30NfgB#!D4gd5IwlHGpeh|$+D_Po=KASOQ~A$;R
> BrYG
> > zrH;Ni8|ZS)y=)#*k&(Jz^kl1Pp^^$9zH(09rr)<|%9_U<sPsL#ojdt_;*{7_yU?$#
> > zHsi+rhU7NPo2-T*0<wIsr~lswS&aw-o4l-
> |F{svG2NhZV*siLZEK1JdNzm|?qS`CD
> >
> zHel+6UA6W4DtDhN1!$IkY(3f)+|{w^bZ<6eK)IVKAn~U0ra4qL4Zjdw1*o;IGxz@
> I
> > zE1+&2B8Z8)yvlVG$SAKk(vXONX(+~^-1FXzG0GpvQOe-
> U6qnNFq;jyCV+yTeeIe?M
> >
> zF=ax^az!;(Xu=y1W4lajzkVj4Jw0rrkhO|zT`pTp)T0PWUl7}o804c_)wWNu>M)(<
> >
> zRfP!DM$#G8^^nzII^#Y91Lq)%_wBs@>jOjPYF}0w^Nz~Y{&Y$4YU(#qe7f+oINR
> %0
> > zSneZe5EyK0r_Bkn`6XthG59f|Xo6i-
> FRL}URYdisz<{CaM6zg|r!KO?%wM2;ud7(O
> >
> z`aPW0(IzOpA8gG_a9lqzr&*EUhPTNSXva#4rR?$b4p1fe;=IM@q(aB=Z!vd|icT
> m}
> > zGpPUE{#SsKM;tGA5@~9og4;6@QNhN;_xvtc09-
> i{RkcWm=QxV#4=QOo$!Oo&57%&p
> >
> z;5H6xtC#a6@RIH0BwLOrK<kt47gWVC$?4D`N^VkJ9hnEFR?h+(XG<oVhLeH)yv
> t&O
> > zVhP%YJ>qd!{#3X-
> ES^d2SW*WfLq3MSUMYN@0anc&jB{JhPy4^7n#vy}enEjqrAEFf
> >
> z@2o#g`S$=uhs@SZJ4+CCl~9$CS9)YiiBZvUdHu?fR|B$d!jfs957AjP*l4u1Y43<m
> >
> zts;j9&7Sr%wK)}cqIR}m87;s8E6l#@u=eLem3~gSwJGQm@6g$9IrZTBv5fVlb(^r
> v
> >
> zbfa98pghse(AQ1jWwfsgSo@fj(bhtD5970DT`wo{?1cW51NqGhA(L5L*XB}}6D8
> b_
> >
> z|Ey&EaWnSu0)OoHzOeFb^KHJ2@Q63ij7Hh3FaeR8MX5^$752g}VhlYLP$>0Jn
> Dq14
> >
> z*J`h~t*11n9~e(RHlxPXC?WpP3H56~Q)@kyDK$hEd_V&0I4H=5%>9Dx(nv}Aa{
> _zG
> > z-
> ge40o9{8bjAT`l*?b9TT<mmOqzLjP6*7|GTs4f$PAYy_Sob(`rl6~XS*MW2mxUJ%
> > zRDL;<#P}IEu9TkKF*}*FJJCMtL?GirpZDi26FrHl8@Rq8Km|4meIi42QhTLtxjLeT
> >
> zbYtaGJthq(k@oyY@Djp_N9nh8#y`Ybe!^BB_s0I^7_4$#qDn!xhP(2i$JV(qITOp
> 9
> > zqiioJFug}7!O_NMq#pugIX;83J?9^g%5->9J0*p`IQ6=jC&wtovz|OC2p^U-<2a};
> > z@A|y{W&-
> ImypnJAD=1qL_$m>JR{vqs$Y>JCwI3wdBm852pI(`|Zt3YMpw1pVYh5-`
> > z85W<vB~$-
> U<WG>COBDIVZS+QOO}q$(TQ#Nzn+;_qKSjuf7Lql~0=#qZ@edc3Gqc6w
> >
> zuDOQuCqf!yLs3jl)SkQ_Ib>6(x83F)+CJVOU}ZPflTLdUhY58TyUP5Jnph|V8JT&$
> > z0i}|KN97gmPgsbqeyl>!|HIdR%nl1D7z;7re_vb?e}4Epe!tJsl-+wy=_(ZkJg<DT
> >
> zEvEL4A@nTNj`u2D%c+U6GRm7sMUgfrmEU$uppRs#)bXY)X6JQIyX*1oY*GW}
> k<IF|
> > zaHNTenY}%}0>Ve_-3}%b8Sv`foIqQrrT`Jps((eiB8}y(b9QWd`zJ*gt7u_b3)YqS
> > z?rft8TYK|738T20zTZ3BgyQdj<yF!!-+<;)C1L4!1c_^;4;S94pF!2d`qPc;WZ|Gm
> >
> z$=p?mdTXZi?WlOrNz?}Hn0kO+BcXq!w&!+3;C?@ulaBw^a$IrbvICn|4oZOjp7J
> @Q
> > z6PsD=TOH?YVJq7Ch;FwGx#V1npTHz!^HV!(nfI})F4E_bl>$(?srMvD2piEk-D}A%
> > z<j~7KBcje7v9yRgz`2d^!wHF@gh+a`g5J?Brxf-zvx0$7o%Pb2kw-
> cp4adkG{%$o&
> >
> z%dt$oANAhhUA5or11|lcp*|;ww*x8)3VP^z*kA6OpErN=0m))ADYTF@`CT)6la
> 8{?
> > z+f|ZWf991XRNc$TvQ|@weV=#ElM<i8=Qsn6Rr;}-
> n7EUSp2iVM<FUbMZw_i`22q@?
> >
> zs6kr|WS5Gg3(NEg_h1YzK}k#5M~9UYqs%eZ=H<yJ9V4^WrSohg!wRa?csHNr8
> 9x&m
> >
> z{(ZLpi2xlAu@RCsm(4Sx`08)mNv&L8r%^9&=KXXiq!o0uc3c)s_3#dasg&~qSB{b
> V
> > z8g?eJR!y(dC;=%y-V>f<o<nsoO6GqeD%xHE#XYZHRHI(j7p+CCP-
> Ui*0n$KF#F=ub
> >
> zCA%k+Ua0Ux^ZzjSk7Pm<?^iY@oAz8#h_IvYeFI$QirdveGUY0{RKDaglnu=1pe(
> wB
> > z*40*Kn2|Lvni|*l96DD3|Fz|IIHPh>T($*^maO<uC)t6MZ+}Z|-}}*ULjzg&Ifvb)
> >
> zLrpme#6GUjiz)KUncK_9RK5TE3Hpgo)b5S<asRor(EVPDhSB*eVcNWZeHDMh2
> Hc(A
> >
> z^P%@%9RB)C_C;*~yZ4HspGFI0Lk$XKdV!fb#%D{fU>^&ro^xH*#G(uFur6owz
> MXtg
> > zH^0Zh(t-
> EmiaBl>`Tcls+HJnZoyQ30vFByCb0O*`%L)nX5D4}#VfMp)J~NWKw40M$
> > z46D6ToGO~*lIx|Qb75H3?+#X*QJ4HgOgj?bLnD}%eB&%k9(+&PNM-
> 6vy1)%G5g&Xm
> >
> zBX`D*Z}!UP+%JV68h}7!&Cyuz&u9V}7g4K{@atIECE=zaGy5se=l;E2KAxQQ7dY`s
> > zr3-
> FihZjNNS)Jd^rnQehLso_+hXq2zxeW8)=t8qkWCCMC<+zh+vXF5M*tI8tPmHQp
> >
> zcIF<>JxmNil^W1!9({@=N~PdvE&Wi)<0FQR5(FAm=R)N;VG|Ne61+HdUTm1sjn
> }z{
> >
> z8d8p$uq*YdNAFH_9Oyf<DX1=yz4b+kSJ%<hu`MRZnK2M|$Wjau(<cw;r1U#JF
> <VIN
> > z;&6741o<3%PP@Ksaa4OB3)64J7cnWLei+@k8LxE27ubX-
> qS4?UH?hja^lyZXxwA;|
> > lp0r(+`K^)Y&AL5T(>;a;tp795|91lNzXsubc7WVX{~rvVe^USe
> >
> > literal 0
> > HcmV?d00001
> >
> > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > new file mode 100644
> > index 0000000000..5ef93461ee
> > --- /dev/null
> > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > @@ -0,0 +1,52 @@
> > +## @file
> >
> > +#  The default logo bitmap picture shown on setup screen.
> >
> > +#
> >
> > +#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> >
> > +#
> >
> > +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > +#
> >
> > +#
> >
> > +##
> >
> > +
> >
> > +[Defines]
> >
> > +  INF_VERSION                    = 0x00010005
> >
> > +  BASE_NAME                      = LogoDxe
> >
> > +  FILE_GUID                      = 76ED6631-44FE-4ED2-8B5D-1B5355BB25E8
> >
> > +  MODULE_TYPE                    = DXE_DRIVER
> >
> > +  VERSION_STRING                 = 1.0
> >
> > +
> >
> > +  ENTRY_POINT                    = InitializeLogo
> >
> > +#
> >
> > +#  This flag specifies whether HII resource section is generated into PE
> image.
> >
> > +#
> >
> > +  UEFI_HII_RESOURCE_SECTION      = TRUE
> >
> > +
> >
> > +#
> >
> > +# The following information is for reference only and not required by the
> build tools.
> >
> > +#
> >
> > +#  VALID_ARCHITECTURES           = IA32 X64
> >
> > +#
> >
> > +
> >
> > +[Sources]
> >
> > +  Logo.bmp
> >
> > +  Logo.c
> >
> > +  Logo.idf
> >
> > +
> >
> > +[Packages]
> >
> > +  MdePkg/MdePkg.dec
> >
> > +  MdeModulePkg/MdeModulePkg.dec
> >
> > +
> >
> > +[LibraryClasses]
> >
> > +  UefiBootServicesTableLib
> >
> > +  UefiDriverEntryPoint
> >
> > +  DebugLib
> >
> > +
> >
> > +[Protocols]
> >
> > +  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
> >
> > +  gEfiHiiImageExProtocolGuid         ## CONSUMES
> >
> > +  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
> >
> > +  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
> >
> > +
> >
> > +[Depex]
> >
> > +  gEfiHiiDatabaseProtocolGuid AND
> >
> > +  gEfiHiiImageExProtocolGuid
> >
> > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > new file mode 100644
> > index 0000000000..1418eb2137
> > --- /dev/null
> > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > @@ -0,0 +1,31 @@
> > +## @file
> >
> > +# This package provides advanced feature functionality for LOGO.
> >
> > +# This package should only depend on EDK II Core packages.
> >
> > +#
> >
> > +# The DEC files are used by the utilities that parse DSC and
> >
> > +# INF files to generate AutoGen.c and AutoGen.h files
> >
> > +# for the build infrastructure.
> >
> > +#
> >
> > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> >
> > +#
> >
> > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > +#
> >
> > +##
> >
> > +
> >
> > +[Defines]
> >
> > +  DEC_SPECIFICATION = 0x00010017
> >
> > +  PACKAGE_NAME      = LogoFeaturePkg
> >
> > +  PACKAGE_GUID      = A1A87B33-C3E3-497B-978F-2FF7813FEB21
> >
> > +  PACKAGE_VERSION   = 0.1
> >
> > +
> >
> > +[Includes]
> >
> > +  Include
> >
> > +
> >
> > +[LibraryClasses]
> >
> > +
> >
> > +[Guids]
> >
> > +  gLogoFeaturePkgTokenSpaceGuid  =  {0x567199de, 0xb448, 0x4aa0, {0x99,
> 0x4e, 0xd5, 0xd6, 0x82, 0x59, 0x91, 0x17}}
> >
> > +
> >
> > +[PcdsFeatureFlag]
> >
> > +
> gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable|FALSE|BOOLEAN|0
> xA0000001
> >
> > +
> gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable|FALSE|BOOLEAN|0xA00000
> 02
> >
> > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > new file mode 100644
> > index 0000000000..717e074c69
> > --- /dev/null
> > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > @@ -0,0 +1,37 @@
> > +## @file
> >
> > +# This package provides advanced feature functionality for LOGO.
> >
> > +# This package should only depend on EDK II Core packages.
> >
> > +#
> >
> > +# The DEC files are used by the utilities that parse DSC and
> >
> > +# INF files to generate AutoGen.c and AutoGen.h files
> >
> > +# for the build infrastructure.
> >
> > +#
> >
> > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> >
> > +#
> >
> > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > +#
> >
> > +##
> >
> > +
> >
> > +[Defines]
> >
> > +  PLATFORM_NAME                  = LogoFeaturePkg
> >
> > +  PLATFORM_GUID                  = 0618AB19-9507-4D6A-A0D7-1F43D74736CF
> >
> > +  PLATFORM_VERSION               = 0.1
> >
> > +  DSC_SPECIFICATION              = 0x00010005
> >
> > +  OUTPUT_DIRECTORY               = Build/$(PLATFORM_NAME)
> >
> > +  SUPPORTED_ARCHITECTURES        = IA32|X64
> >
> > +  BUILD_TARGETS                  = DEBUG|RELEASE|NOOPT
> >
> > +  SKUID_IDENTIFIER               = DEFAULT
> >
> > +
> >
> > +[LibraryClasses]
> >
> > +  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> >
> > +
> BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRe
> pStr.inf
> >
> > +  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> >
> > +
> UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo
> tServicesTableLib.inf
> >
> > +
> UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryP
> oint.inf
> >
> > +
> >
> > +[LibraryClasses.common.DXE_DRIVER]
> >
> > +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
> >
> > +
> >
> > +[Components]
> >
> > +  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> >
> > +  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> >
> > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > new file mode 100644
> > index 0000000000..092a055a2c
> > --- /dev/null
> > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > @@ -0,0 +1,129 @@
> > +# Overview
> >
> > +* **Feature Name:** Logo
> >
> > +* **PI Phase(s) Supported:** DXE
> >
> > +* **SMM Required?** No
> >
> > +
> >
> > +## Purpose
> >
> > +This feature provides the Logo image and driver that produces
> EDKII_PLATFORM_LOGO_PROTOCOL:
> >
> > +
> >
> > +1. LogoDxe.inf includes a BMP logo in the EFI file, the driver provides the
> image via EDKII_PLATFORM_LOGO_PROTOCOL.
> >
> > +2. JpegLogoDxe.inf includes a JPEG logo in the EFI file, the driver uses
> EFI_HII_IMAGE_DECODER_PROTOCOL to decode the
> > JPEG file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.
> >
> > +
> >
> > +# High-Level Theory of Operation
> >
> > +
> >
> > +The driver produces a EDKII_PLATFORM_LOGO_PROTOCOL to provide a
> logo picture shown on setup screen.
> >
> > +
> >
> > +The Logo file is built in HII package list as EFI resource, the driver uses
> EFI_HII_DATABASE_PROTOCOL
> >
> > +to the publish HII package list to HII Database and get images via
> EFI_HII_IMAGE_EX_PROTOCOL.
> >
> > +
> >
> > +## Firmware Volumes
> >
> > +
> >
> > +* PostMemory
> >
> > +
> >
> > +## Modules
> >
> > +
> >
> > +A bulleted list of the modules that make up the feature.
> >
> > +
> >
> > +* LogoDxe
> >
> > +* JpegLogoDxe
> >
> > +
> >
> > +## LogoDxe
> >
> > +
> >
> > +This driver provides a bitmap image via
> EDKII_PLATFORM_LOGO_PROTOCOL.
> >
> > +
> >
> > +## JpegLogoDxe
> >
> > +
> >
> > +This driver uses EFI_HII_IMAGE_DECODER_PROTOCOL to decode the jpeg
> data and provide a bitmap image via
> >
> > +EDKII_PLATFORM_LOGO_PROTOCOL.
> >
> > +
> >
> > +## Key Functions
> >
> > +
> >
> > +* This feature produces a EDKII_PLATFORM_LOGO_PROTOCOL which
> could be used by consumer such as
> > Edk2\MdeModulePkg\Library\BootLogoLib.
> >
> > +
> >
> > +## Configuration
> >
> > +
> >
> > +* gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> >
> > +  TRUE: Enable logo feature
> >
> > +  FALSE: Disable logo feature
> >
> > +* gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable
> >
> > +  TRUE: Use jpeg logo
> >
> > +  FALSE: Use bitmap logo
> >
> > +
> >
> > +## Data Flows
> >
> > +
> >
> > +Architecturally defined data structures and flows for the feature.
> >
> > +
> >
> > +### Data flows of LogoDxe
> >
> > +
> >
> > +```txt
> >
> > +| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|
> >
> > +------------    ------------------    ----------------
> >
> > +      |                 |                     |
> >
> > +      |                 |--bitmap image data->|
> >
> > +      |<---bitmap data--|<-return bitmap data-|
> >
> > +```
> >
> > +
> >
> > +### Data flows of JpegLogoDxe
> >
> > +
> >
> > +```txt
> >
> > +| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|    |
> EFI_HII_IMAGE_DECODER_PROTOCOL |
> >
> > +------------    ------------------    ----------------    ----------------------------------
> >
> > +      |                 |                     |                            |
> >
> > +      |                 |---Jpeg Image data-->|---------decode Jpeg------->|
> >
> > +      |<---bitmap data--|<-return bitmap data-|<-----return bitmap data----|
> >
> > +```
> >
> > +
> >
> > +## Control Flows
> >
> > +
> >
> > +Consumer gets image from the logo driver via
> EDKII_PLATFORM_LOGO_PROTOCOL.
> >
> > +
> >
> > +## Build Flows
> >
> > +
> >
> > +No any special build flows is needed.
> >
> > +
> >
> > +## Test Point Results
> >
> > +
> >
> > +Not available.
> >
> > +
> >
> > +## Functional Exit Criteria
> >
> > +
> >
> > +* Check wether EDKII_PLATFORM_LOGO_PROTOCOL->GetImage() return a
> default Intel logo.
> >
> > +* If using jpeg logo, a dex driver which produces
> EFI_HII_IMAGE_DECODER_PROTOCOL(name is
> >
> > +gEfiHiiImageDecoderNameJpegGuid) is necessary, it is used to decode
> Jpeg data.
> >
> > +
> >
> > +## Feature Enabling Checklist
> >
> > +
> >
> > +### Option 1
> >
> > +
> >
> > +* Include AdvancedFeatures.dsc in platform dsc file, and use pcd to
> enable the feature.
> >
> > +
> >
> > +```dsc
> >
> > +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> |TRUE
> >
> > +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
> >
> > +  !include Include/AdvancedFeatures.dsc
> >
> > +```
> >
> > +
> >
> > +* Include PreMemory.fdf and inPostMemory.fdf in platform fdf file
> >
> > +
> >
> > +```fdf
> >
> > +!include Include/PreMemory.fdf
> >
> > +!include Include/PostMemory.fdf
> >
> > +```
> >
> > +
> >
> > +### Option 2
> >
> > +
> >
> > +* To use bitmap logo, include
> "UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform dsc file,
> and include
> >
> > +"INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform fdf
> file.
> >
> > +
> >
> > +* To use jpeg logo, include
> "UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in platform dsc
> file, and include
> >
> > +"INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in
> platform fdf file.
> >
> > +
> >
> > +## Performance Impact
> >
> > +
> >
> > +* LogoDxe
> >
> > +  * EFI size: 180 KB
> >
> > +  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage(): about
> 18 milliseconds
> >
> > +
> >
> > +* JpegLogoDxe
> >
> > +  * EFI size: 13.6 KB
> >
> > +  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage(): about
> 80 milliseconds
> >
> > --
> > 2.24.0.windows.2
> >
> >
> > -=-=-=-=-=-=
> > Groups.io Links: You receive all messages sent to this group.
> >
> > View/Reply Online (#56238):
> https://edk2.groups.io/g/devel/message/56238
> > Mute This Topic: https://groups.io/mt/72533665/1712937
> > Group Owner: devel+owner@edk2.groups.io
> > Unsubscribe: https://edk2.groups.io/g/devel/unsub  [ray.ni@intel.com]
> > -=-=-=-=-=-=


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#56255): https://edk2.groups.io/g/devel/message/56255
Mute This Topic: https://groups.io/mt/72533665/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers
Posted by Ni, Ray 4 years, 1 month ago
What is PACKAGES_PATH env variable set to?

> -----Original Message-----
> From: Luo, Heng <heng.luo@intel.com>
> Sent: Wednesday, March 25, 2020 3:01 PM
> To: Ni, Ray <ray.ni@intel.com>; devel@edk2.groups.io
> Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming <liming.gao@intel.com>; Dong, Eric <eric.dong@intel.com>
> Subject: RE: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers
> 
> Hi Ray,
> It fails to build with GCC in ubuntu if removing the <feature-domain> prefix from all paths insideDSC/FDF/INF.
> No problem in windows
> 
> Active Platform          = /home/ilabuser/code/hengluo/edk2-
> platforms/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> 
> 
> build.py...
> /home/ilabuser/code/hengluo/edk2-platforms/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc(36): error
> 000E: File/directory not found in workspace
>         LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf is not found in packages path:
>         /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Platform/Intel
>         /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Silicon/Intel
>         /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Features/Intel
> 
> 
> - Failed -
> Build end time: 14:57:21, Mar.25 2020
> Build total time: 00:00:00
> 
> Best Regards
> Heng
> 
> > -----Original Message-----
> > From: Ni, Ray <ray.ni@intel.com>
> > Sent: Wednesday, March 25, 2020 11:53 AM
> > To: devel@edk2.groups.io; Luo, Heng <heng.luo@intel.com>
> > Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming <liming.gao@intel.com>;
> > Dong, Eric <eric.dong@intel.com>
> > Subject: RE: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to
> > provide logo images and drivers
> >
> > Heng,
> > Can you please remove the <feature-domain> prefix from all paths inside
> > DSC/FDF/INF?
> >
> > We expect PACKAGES_PATH is set to include "edk2-platforms/Features/Intel"
> > and all sub folders inside "edk2-platforms/Features/Intel/".
> >
> > Thanks,
> > Ray
> >
> >
> > > -----Original Message-----
> > > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Heng
> > Luo
> > > Sent: Wednesday, March 25, 2020 10:44 AM
> > > To: devel@edk2.groups.io
> > > Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming
> > <liming.gao@intel.com>; Dong, Eric <eric.dong@intel.com>
> > > Subject: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to
> > provide logo images and drivers
> > >
> > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2584
> > >
> > > 1. LogoDxe.inf includes a BMP logo in the EFI file,
> > > the driver decodes the BMP file and provide the image
> > > via EDKII_PLATFORM_LOGO_PROTOCOL.
> > > 2. JpegLogoDxe.inf includes a JPEG logo in the EFI file,
> > > the driver use EFI_HII_IMAGE_DECODER_PROTOCOL to decode the Jpeg
> > > file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.
> > >
> > > Cc: Dandan Bi <dandan.bi@intel.com>
> > > Cc: Liming Gao <liming.gao@intel.com>
> > > Cc: Eric Dong <eric.dong@intel.com>
> > > Signed-off-by: Heng Luo <heng.luo@intel.com>
> > > ---
> > >
> > > Notes:
> > >     v2:
> > >       - Add Cc and Remove Change-Id in commit message
> > >
> > >  Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc            |   4
> > +++-
> > >  Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc      |
> > 6 +++++-
> > >  Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf            |   6
> > +++++-
> > >  Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf             |   6
> > +++++-
> > >  Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc |
> > 107
> > >
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > +++++++++++++++++++++++++++++++++++++++
> > > ++++
> > >  Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf  |
> > 13 +++++++++++++
> > >  Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf   |
> > 8 ++++++++
> > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf    |
> > 10 ++++++++++
> > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf |
> > 52
> > > ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp        |
> > Bin 0 -> 183366 bytes
> > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c          | 153
> > >
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > +++++++++++++++++++++++++++++++++++++++
> > > ++++++++++++++++++++++++++++++++++++++++++++++++++
> > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf        |  10
> > ++++++++++
> > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg        | Bin
> > 0 -> 11944 bytes
> > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf     |
> > 52
> > > ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec      |  31
> > +++++++++++++++++++++++++++++++
> > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc      |  37
> > +++++++++++++++++++++++++++++++++++++
> > >  Features/Intel/UserInterface/LogoFeaturePkg/Readme.md               | 129
> > >
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > +++++++++++++++++++++++++++++++++++++++
> > > ++++++++++++++++++++++++++
> > >  17 files changed, 620 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > index 23e7c6474a..ea879680ba 100644
> > > --- a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > +++ b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > @@ -7,7 +7,7 @@
> > >  # 1. Present a consolidated and simplified view of all available advanced
> > features to board packages.
> > >
> > >  # 2. Provide a simple, single package build for all available advanced
> > features.
> > >
> > >  #
> > >
> > > -# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
> > >
> > > +# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > >  #
> > >
> > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > >  #
> > >
> > > @@ -46,6 +46,8 @@
> > >    gSmbiosFeaturePkgTokenSpaceGuid.PcdSmbiosFeatureEnable
> > |TRUE
> > >
> > >    gUsb3DebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugFeatureEnable
> > |TRUE
> > >
> > >
> > gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > |TRUE
> > >
> > > +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> > |TRUE
> > >
> > > +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
> > >
> > >
> > >
> > >  #
> > >
> > >  # This package builds all advanced features.
> > >
> > > diff --git
> > a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > index 649774edf7..c1bd791525 100644
> > > --- a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > +++ b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > @@ -4,7 +4,7 @@
> > >  #  This file is intended to be included into another package so advanced
> > features
> > >
> > >  #  can be conditionally built by enabling the respective feature via its
> > FeaturePCD.
> > >
> > >  #
> > >
> > > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> > >
> > > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > >  #
> > >
> > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > >  #
> > >
> > > @@ -54,3 +54,7 @@
> > >  !if
> > gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > == TRUE
> > >
> > >    !include
> > UserInterface/UserAuthFeaturePkg/Include/UserAuthFeature.dsc
> > >
> > >  !endif
> > >
> > > +
> > >
> > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> > >
> > > +  !include UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > >
> > > +!endif
> > >
> > > diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > index 57b29a42b9..56f6143650 100644
> > > --- a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > +++ b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > @@ -5,7 +5,7 @@
> > >  #  can be conditionally included in the flash image by enabling the
> > respective
> > >
> > >  #  feature via its FeaturePCD.
> > >
> > >  #
> > >
> > > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> > >
> > > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > >  #
> > >
> > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > >  #
> > >
> > > @@ -55,3 +55,7 @@
> > >  !if
> > gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > == TRUE
> > >
> > >    !include UserInterface/UserAuthFeaturePkg/Include/PostMemory.fdf
> > >
> > >  !endif
> > >
> > > +
> > >
> > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> > >
> > > +  !include UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > >
> > > +!endif
> > >
> > > diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > index 20d25dd173..7a76b0efc3 100644
> > > --- a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > +++ b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > @@ -5,7 +5,7 @@
> > >  #  can be conditionally included in the flash image by enabling the
> > respective
> > >
> > >  #  feature via its FeaturePCD.
> > >
> > >  #
> > >
> > > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> > >
> > > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > >  #
> > >
> > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > >  #
> > >
> > > @@ -55,3 +55,7 @@
> > >  !if
> > gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > == TRUE
> > >
> > >    !include UserInterface/UserAuthFeaturePkg/Include/PreMemory.fdf
> > >
> > >  !endif
> > >
> > > +
> > >
> > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> > >
> > > +  !include UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > >
> > > +!endif
> > >
> > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > > new file mode 100644
> > > index 0000000000..3fd1c3372e
> > > --- /dev/null
> > > +++
> > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > > @@ -0,0 +1,107 @@
> > > +## @file
> > >
> > > +# This is a build description file for the Logo advanced feature.
> > >
> > > +# This file should be included into another package DSC file to build this
> > feature.
> > >
> > > +#
> > >
> > > +# The DEC files are used by the utilities that parse DSC and
> > >
> > > +# INF files to generate AutoGen.c and AutoGen.h files
> > >
> > > +# for the build infrastructure.
> > >
> > > +#
> > >
> > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > > +#
> > >
> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > +#
> > >
> > > +##
> > >
> > > +
> > >
> > >
> > +###############################################################
> > #################
> > >
> > > +#
> > >
> > > +# Defines Section - statements that will be processed to create a Makefile.
> > >
> > > +#
> > >
> > >
> > +###############################################################
> > #################
> > >
> > > +[Defines]
> > >
> > > +!ifndef $(PEI_ARCH)
> > >
> > > +  !error "PEI_ARCH must be specified to build this feature!"
> > >
> > > +!endif
> > >
> > > +!ifndef $(DXE_ARCH)
> > >
> > > +  !error "DXE_ARCH must be specified to build this feature!"
> > >
> > > +!endif
> > >
> > > +
> > >
> > >
> > +###############################################################
> > #################
> > >
> > > +#
> > >
> > > +# Packages Section - Make sure PCD can be directly used in a conditional
> > statement
> > >
> > > +# in a DSC which includes this DSC file.
> > >
> > > +#
> > >
> > >
> > +###############################################################
> > #################
> > >
> > > +[Packages]
> > >
> > > +  UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > >
> > > +
> > >
> > >
> > +###############################################################
> > #################
> > >
> > > +#
> > >
> > > +# Library Class section - list of all Library Classes needed by this feature.
> > >
> > > +#
> > >
> > >
> > +###############################################################
> > #################
> > >
> > > +[LibraryClasses]
> > >
> > > +  #######################################
> > >
> > > +  # Edk2 Packages
> > >
> > > +  #######################################
> > >
> > > +  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> > >
> > > +
> > BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRe
> > pStr.inf
> > >
> > > +  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> > >
> > > +
> > UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo
> > tServicesTableLib.inf
> > >
> > > +
> > UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryP
> > oint.inf
> > >
> > > +
> > >
> > > +[LibraryClasses.common.DXE_DRIVER]
> > >
> > > +  #######################################
> > >
> > > +  # Edk2 Packages
> > >
> > > +  #######################################
> > >
> > > +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
> > >
> > > +
> > >
> > >
> > +###############################################################
> > #################
> > >
> > > +#
> > >
> > > +# Component section - list of all components that need built for this
> > feature.
> > >
> > > +#
> > >
> > > +# Note: The EDK II DSC file is not used to specify how compiled binary
> > images get placed
> > >
> > > +#       into firmware volume images. This section is just a list of modules to
> > compile from
> > >
> > > +#       source into UEFI-compliant binaries.
> > >
> > > +#       It is the FDF file that contains information on combining binary files
> > into firmware
> > >
> > > +#       volume images, whose concept is beyond UEFI and is described in PI
> > specification.
> > >
> > > +#       There may also be modules listed in this section that are not required
> > in the FDF file,
> > >
> > > +#       When a module listed here is excluded from FDF file, then UEFI-
> > compliant binary will be
> > >
> > > +#       generated for it, but the binary will not be put into any firmware
> > volume.
> > >
> > > +#
> > >
> > >
> > +###############################################################
> > #################
> > >
> > > +
> > >
> > > +#
> > >
> > > +# Feature DXE Components
> > >
> > > +#
> > >
> > > +
> > >
> > > +# @todo: Change below line to [Components.$(DXE_ARCH)] after
> > https://bugzilla.tianocore.org/show_bug.cgi?id=2308
> > >
> > > +#        is completed.
> > >
> > > +[Components.X64]
> > >
> > > +  #####################################
> > >
> > > +  # Logo Feature Package
> > >
> > > +  #####################################
> > >
> > > +
> > >
> > > +  # Add library instances here that are not included in package
> > components and should be tested
> > >
> > > +  # in the package build.
> > >
> > > +
> > >
> > > +  # Add components here that should be included in the package build.
> > >
> > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
> > >
> > > +  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > >
> > > +!else
> > >
> > > +  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > >
> > > +!endif
> > >
> > > +
> > >
> > >
> > +###############################################################
> > ####################################
> > >
> > > +#
> > >
> > > +# BuildOptions Section - Define the module specific tool chain flags that
> > should be used as
> > >
> > > +#                        the default flags for a module. These flags are appended to
> > any
> > >
> > > +#                        standard flags that are defined by the build process. They
> > can be
> > >
> > > +#                        applied for any modules or only those modules with the
> > specific
> > >
> > > +#                        module style (EDK or EDKII) specified in [Components]
> > section.
> > >
> > > +#
> > >
> > > +#                        For advanced features, it is recommended to enable
> > [BuildOptions] in
> > >
> > > +#                        the applicable INF file so it does not affect the whole board
> > package
> > >
> > > +#                        build when this DSC file is active.
> > >
> > > +#
> > >
> > >
> > +###############################################################
> > ####################################
> > >
> > > +[BuildOptions]
> > >
> > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > > new file mode 100644
> > > index 0000000000..53c85da716
> > > --- /dev/null
> > > +++
> > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > > @@ -0,0 +1,13 @@
> > > +## @file
> > >
> > > +#  FDF file for post-memory Logo modules.
> > >
> > > +#
> > >
> > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > > +#
> > >
> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > +#
> > >
> > > +##
> > >
> > > +!if gSmbiosFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
> > >
> > > +  INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > >
> > > +!else
> > >
> > > +  INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > >
> > > +!endif
> > >
> > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > > new file mode 100644
> > > index 0000000000..91cd1c6ec6
> > > --- /dev/null
> > > +++
> > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > > @@ -0,0 +1,8 @@
> > > +## @file
> > >
> > > +#  FDF file for pre-memory Logo modules.
> > >
> > > +#
> > >
> > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > > +#
> > >
> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > +#
> > >
> > > +##
> > >
> > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > > new file mode 100644
> > > index 0000000000..a39500e043
> > > --- /dev/null
> > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > > @@ -0,0 +1,10 @@
> > > +// /** @file
> > >
> > > +// Platform Logo image definition file.
> > >
> > > +//
> > >
> > > +// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > > +//
> > >
> > > +// SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > +//
> > >
> > > +// **/
> > >
> > > +
> > >
> > > +#image IMG_LOGO Logo.jpg
> > >
> > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > new file mode 100644
> > > index 0000000000..47f1672a4c
> > > --- /dev/null
> > > +++
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > @@ -0,0 +1,52 @@
> > > +## @file
> > >
> > > +#  The default logo JPEG picture shown on setup screen.
> > >
> > > +#
> > >
> > > +#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > > +#
> > >
> > > +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > +#
> > >
> > > +#
> > >
> > > +##
> > >
> > > +
> > >
> > > +[Defines]
> > >
> > > +  INF_VERSION                    = 0x00010005
> > >
> > > +  BASE_NAME                      = JpegLogoDxe
> > >
> > > +  FILE_GUID                      = 319CFE1D-8F15-4A7A-BF40-EECA953D87EF
> > >
> > > +  MODULE_TYPE                    = DXE_DRIVER
> > >
> > > +  VERSION_STRING                 = 1.0
> > >
> > > +
> > >
> > > +  ENTRY_POINT                    = InitializeLogo
> > >
> > > +#
> > >
> > > +#  This flag specifies whether HII resource section is generated into PE
> > image.
> > >
> > > +#
> > >
> > > +  UEFI_HII_RESOURCE_SECTION      = TRUE
> > >
> > > +
> > >
> > > +#
> > >
> > > +# The following information is for reference only and not required by the
> > build tools.
> > >
> > > +#
> > >
> > > +#  VALID_ARCHITECTURES           = IA32 X64
> > >
> > > +#
> > >
> > > +
> > >
> > > +[Sources]
> > >
> > > +  Logo.jpg
> > >
> > > +  Logo.c
> > >
> > > +  JpegLogo.idf
> > >
> > > +
> > >
> > > +[Packages]
> > >
> > > +  MdePkg/MdePkg.dec
> > >
> > > +  MdeModulePkg/MdeModulePkg.dec
> > >
> > > +
> > >
> > > +[LibraryClasses]
> > >
> > > +  UefiBootServicesTableLib
> > >
> > > +  UefiDriverEntryPoint
> > >
> > > +  DebugLib
> > >
> > > +
> > >
> > > +[Protocols]
> > >
> > > +  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
> > >
> > > +  gEfiHiiImageExProtocolGuid         ## CONSUMES
> > >
> > > +  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
> > >
> > > +  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
> > >
> > > +
> > >
> > > +[Depex]
> > >
> > > +  gEfiHiiDatabaseProtocolGuid AND
> > >
> > > +  gEfiHiiImageExProtocolGuid
> > >
> > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp
> > > new file mode 100644
> > > index
> > 0000000000000000000000000000000000000000..7ec1aa6a852564e262df599
> > 29655f7a0f3d5445f
> > > GIT binary patch
> > > literal 183366
> > > zcmeI53HVo2{>L-
> > Jm@&3csA!XsrHq!LrXr$}sH8=bnxa%BMny_PD@D^Xt&}NI5uvfP
> > > zOj2oNv@nuXBQ#^OWNI42{Qs~2|31%s?sM+<o_o&SzW3hm`94p-?sD!~-
> > skha_bi{K
> > > z=~b7%^@B41_p8spv-
> > o%ZVP(p^$^VCyIfcJv${f%A6MtIf|Ns5}1@p%sU=T0}WEX+M
> > > z4?q0mlTSY9oO7BqY0|D;yDnY2bno8%mRoM=-
> > @pHzciuT<$dKW~hmRaN@}Y+wdi2pp
> > > zr%s(ZYu2nMo_J#3ym^m3_So-!_d70*8#nHO2ObzYbm*^t{p;IqyRCQc-
> > sEuo_19l}
> > > z?X|62w{F&~*##F|P`PsDqmMp1yC|8O8w4Uj;D{rRs8ORv^XAQa^yqQ--
> > FL$sc(ios
> > >
> > z(sk?BZQs8A%P+tD?|=XMKS})#9Xj;MC!cKIym`fn6$=+Ggw7Coz<>c=yLP?u$}4~I
> > >
> > zi(gc&T9pb%(r}ZBL7=z@@Byk_yLQ{QZST74E=2vc*IwJXbLV&8eU}v5qABP5@4
> > w%(
> > > zXU`jNyz%6dPmUfvny+okmM!^wA9Ktx#f8_DZV-
> > ?l@S`97sBYc53@m5PoQd@Q?QegJ
> > >
> > zh7T#u<%=)A`17CtykyCeF=NKuc;k)r>eVx2V2Om7Td^X*K<?*1|9Q`zJ^A*%_10
> > Ve
> > > z{`bFAOr3<P#$bE*?%m6lEqnOkhZ&GxbkRk}9d}%;y<jpgWdu$+<&+z4xMA|-
> > $#1^-
> > > zCX=s(q&(xrFhza!)mK?)>ej6r1Kl6|z*?g(WjQi!4~_ueL6$m4jT*(+EXl=|jI+?Q
> > >
> > z`rmx>&8k(a#*Q7^zJ2>DRjLH<81rN)A%Lhb8Dw&_fB$|@*)lgmBk=dX|NX@m
> > Ut|-9
> > >
> > zWukKB%9WCcnYQ{P(4awsM;>|P{rBGwEodf#APDT*wd<*;p6b)5&)H|6?cZA_
> > MNSc@
> > >
> > zUcEZ6=np^qFo+D9XW~JCHR`9Ie%f#|r<^O$tg>axGALzxA|8P<xkiQn!&)>JZoTz
> > Z
> > > zR)h{a3^h&j%MSwV6<%}AHH#N7Hk%ZY5hlTmY;K-
> > ;=9&2s%93meAH;j_y_XJ6P<%{L
> > > zF(UB62Oo?dKmL+SE-
> > `w2*&_65r=3Q}vDhA?aG0!%hrm}~eZ@i$yTd1*cw)9Bv(#$K
> > > zjAPE6Ip2Q!ZSjP~l$;y_DBP}Dvu4nsLG*j6iF(T0`^#Vc64ME@iJu%9QdSZQ{J;I}
> > > zZ!s~$iY?``n(yk>s#OacqLfL8sZP-
> > lVCw{8qEDM|u}@*^PB`I&Ns}gJ&aA0ul3HQ~
> > > z@7S>e8_$|GYo<_ib5<o3mDx=E$3Om2Vj^am8w3Hgk+DmyRH;(VSdfzDG-
> > }icgoAX9
> > >
> > zd8ULBU~K{Ac8uoO2uq11XT2H~DpZ(1e}2|wisgE=^)_tSfU?l))vH&oT!}w{mtTJQ
> > > zrI%h}NeZ=gv=>kwTd-gOu5#wior{+b44<b>n>J<26lO-
> > ~++uQw(F8y2F|p;x2yyM&
> > >
> > zweP+69_CI54jjljK5^F{%@9DwkBU+L3G+fg&1T=eeQ|eI`21N<SigQfG=VjP2M_
> > Mm
> > >
> > zs~3JeFymrP9`98Nto~618*`}X;>@aP)240Ow7Kb~n{L1T_F=<@O_(rY_UzfuJoC)
> > *
> > > z<;yp2+{g^;U;p}7_$FsG2i}Tz+;NBbT<Ws&$3Olt>o#fYbo31vHY3~cu5aJIc!k1F
> > > z;i#jI(rsOF)ANnsErCC)>#n;FCw16gV-mG>>(<iIrZ{-;Aj1#*KNPnkvQqk4XPvca
> > > z)21|#kq_S={_qE^l@VPW$K`&s!$+1cEFX8=&|&hA;s4&fd(+SnG1Y-
> > Ff9KAfQFzV@
> > > zHIlC<-
> > b9NyA^P;wPnpW01k1ONscZ7hPhpAJ5i<tH*DK!?JemCSpZ|=B9mUF)w=TOR
> > >
> > zs9dHH{32HA*kg}n3YL7QFhzxf82gxgE0x}7kWj5!wX3hbnzt4@rK~CCV>_5uFc
> > WFm
> > >
> > zu%QYFxldEEV#RmgeK#>OGFM`4bKt;%Od^a6rjXKg<dH|>4U!Ki^!)haj}z;}m<nR)
> > > z8&%AZm}L6#GtM{zUBsB+b!N+_ko^KyJ`-5;%yf^0sXPO}4jno${ruCP{`8;!{KtuZ
> > > zhK@^?m3aA%d(nUiDI?)lty&o~x-
> > diw@GOhZy#3e%dj9$6v#48DYOG|qPE?DSUYop}
> > >
> > zS;;5X%ujzxR4(%?J_4BhvoVU!L$++jON5mzTC|91DHW|1cGgZh>7?R|ps7J21Xv
> > Ve
> > >
> > zV+AutRF$&gRwdu8WJfO!BVzWoag=R#lnRj`rPmm}FqN1%apJaZ+hQ6iMVKwo
> > Oj3$t
> > > zh-
> > zJY@x_sokvA<)cXPjG9|H9ZJWAwB)V~)kS`^<bCL}k}G0p&vI#oo`B|@!K95}Gd
> > >
> > zPVgz6DwwosN8pD){2}(mXhz}EDkOuVeLQD;#Gp7rgi#l%Q>RYaWy{nr90It5xc~
> > n9
> > > zliZ$`P&iL~WV<0MKN~EbGq5qE({PfWv8Pd>LMiB-cixfkCGJ~!;v))>;o-u_bo%t^
> > > z#_wOoxD;u1Q6M24Jo*OV#Ys1Z-0%_q3A$}}rzbRO{rdGI?OT&sh7n-
> > >2YW`$G~A*R
> > > z)0KSi5o<dZUcx|xx-VObM%OgM<cYKDd@-@nNI-
> > iw2Yh7OxMj<hFl0oX1CyUP`_tr|
> > > z2LyOs<CFu>C-LbR<baPuhYk%xMy3hIHZ2cqNw5tp<M-
> > >=FAg7QS?42bVuubL3e3k@
> > >
> > zvu0t=lVDGpqH=`*_H;M|i*Ua?(|lw<f@llD$jFf6=9_QMm2jBG6bS)d>F8(TdL?{x
> > >
> > ziA?j6=(oYhh`q3})Gm_n=DFCP{p@FW(G25ZFS~ri<bVJE{Q>w0T!j3~vsjq66%~Q
> > <
> > >
> > z<;#y4F(Q~fW_J0A7vBJ6#AxxVtF9_)cbURV0s(BL8NcC?RZB`U%10Ks0yrXLkFryz
> > > zP9-4?rjhADfGv`C?b@wdw@#6j8Rg@B_uZ%1KxZ<ufRhd(EyY^k!-
> > |*!z6(BC<l|3%
> > >
> > z@{<4#8BnMzML95SP7?ww_~1@N!pbc25nraxub#>=D&lGC7E_m!Mu1&Qq8
> > $~K+syG1
> > >
> > zOVW=%`lw)Aye^Xd=%bG=X$dfmPagu8UV16^3xd#Qj*lHXb`+W*KV=Q4apT7
> > 6>kU&Q
> > >
> > zgFqP+T99Yw8f@nH_{uA<$O$OiC03N_c!NNi5x^jVaAt)0Ky<Uk$K#GWPRmgh(
> > H{sc
> > > zm*&1Obu$Q92r#7@K79C$88b2j2)l>E=TCCV*1z#Xm7&fxRRsZ-
> > M>2#1uHGaB6mFrj
> > > zl%b}Xsu~2cg#ccN)fHC1_~Hw*rkbt(HMPwa0{H(IzJQX`2OoSeTdgy-
> > H3(!20YbS+
> > > z2<W_pg)$-Rv(-9NTZ2Hh5Fm<;lXQ|}qm7fTo;9`290Ej{mk`i-
> > 3k3k;j%BWarosk+
> > >
> > z3?YDyjgxeeW1_TYs9mP227xRhfT@&(gU(wQUU*>^8))im5XcY$#EW;5&g&RQ
> > tQl&Q
> > >
> > zsj5LBqX;Oftr~6BjP|docD4{ubk)utWwF|Yy25$qork(Uj^zoKtym4zYt?^&m8tL=
> > >
> > zp<W6pGac9q?~54Y4<0;t{`~p)U?gZDAqep<h5jUeQE6VaY85`lCr_R{Y}l~gy?bAF
> > >
> > z*=1;SEB2R31_H+%bBxyj)p;G4ssyJ_7%`j`;CmBS3{D^N*IaXrVl|xg_dOmoXpmyI
> > >
> > zLNZ+=wJKGr2ss2eML()dn>LJC;KlOg%L%af`RAX1<?(yrg%<)8;e4cCy?P@@j(q*~
> > >
> > z*8}*+rczHn`DBL<9gaQrSZAKG9`lkUEQqhGLqg!8XP&BnYe4NQt0dsP7b}25<~R`
> > J
> > >
> > zQ&>=iuax=7w}!>HS6_YA`GWH8zQBFQnBm%MuYKc<H++jwNkE;KEn9ZujW<F
> > Tp}V6x
> > > zMVN7oh$ZsDg9oY7`|rOm&)M>$i1)S$6DCxuR7svVnY-
> > Yl0_HvU+>=awD1|rw?%lh+
> > >
> > zYE`m)#FyIk?c2Rzkz5bJN8X162M*k|YnLS3z_*Ca(Wp_Q2*rs}G%+RJ!MhdtXf*_
> > 5
> > > z!`ZWEpLNz*5mqcfR-;FcRsoi%a{)3B@Q81$$r9va*|KFBl&W-
> > 7!8E#jJonsl6NoU5
> > >
> > zb#NrHmYAZtnP}ml#YgKAG+q`jUd(qkfapf@$aBv<SFjVE7r*@S%fQPWT9srx?<
> > }|A
> > >
> > zajEeUp$*9nEk53I%PnDi@)ztfuZsr`9AMlPX81a8+&HhyxgLOzc5bh|_8RXcE$NL
> > U
> > >
> > zF?F`<;B~Nc>C#Bbl4pW%bFT_Gua^`bS^QC4{dPhm94qqi_~VaXv}lp=YyzjO*D*
> > Yn
> > >
> > z%ZB?dEJl@DUcE4UBxfeP41>eGF5K1jy&{>Z*^MRamv25H6R^hh*=L{GB}xuTh
> > mVX&
> > > zB3VmO;UkRLuwjD)_E>KbC-
> > jt4PSFw}m3dZ3K3Ywt3u@G;p;fmqiU0c7zxqPWTOv#m
> > > zD$hcB-)dM1N{5du#VcYWPv*-
> > <J^{}@`>Z^ZxbN~^P#+&Mzx(dH?|iEi2_GqiaWzh{
> > > zlG!*`84g{4{q-uG3Y><W&9A@y+816cL5c9OTD58_BBuhHFCWK`AFq;6+-
> > Z=3+O=!@
> > > zN)f!+ym_-qWuoGvRTeYKNEV>v4OFpwY|^BOJd==jd-
> > Uj`0<V>(MEIzvRIGxVoR5J6
> > >
> > zeX10#m1geTxhl(s&6+h+%r;s+QYdeXZr!?tly>>!pMLtOZ|ka8uP)Cd<X!fCeCuE*
> > >
> > zC<Q*Uv_e>0yU8IBBz(lXepFxKkd?$kh2nq^qd&#6BIl!3E?W}BfD0+}UXSnHyVtj
> > M
> > >
> > zXkB_e9?5kC#<vc3f>Pk)O*h?Sw>SKOgpa7wh0i~H4(g@~Om)?DlVai{?cKU{YlR9
> > G
> > > zA`yNe6U%k81XA>bg-0SkRasNAYgh_=oHJ*R-
> > Co@Tw7&#BRxkZktXXw4x6|W?f6}B$
> > > zty{OQRjbyir=E(!KkBJft5#*DrFrw_L}hyM#TOO#G4H?seszheT)DDc2j7GE_(;)2
> > >
> > zu3?U^UUS8izR~60dFLI)tb!#&*$JfxUu^9JrNGAkifU{fUVQPzTCT>>gSAmrKR~N
> > o
> > > zF=z{WC=hndnl+Nlbt4s`A}+~IxD_iODT}$D`kJsJJA6a2gTG={!IBZSPk>Q=ntML7
> > > z6)Q);eYbn}?z-
> > T!M(55)euZWK_U+s27DW0kUAnlJDG1caQj%_NT1$U%^AWi4MI5av
> > >
> > z>ArpY<h_8lye?>3>94rr3V8*DySe8hD$PQZ<)^`3m|AmoDgdGC)TyJ@v(Chr^`R
> > GP
> > > zH-
> > tqb3>lmW6p!)!YiHtnkN_X40}}*vXcg=4n+)AldAl$&_01$q0{A7bfN(eWe8k{a
> > > zXtMk?z{jzC`SOxD!tUaj39=F!rk8n^r5J0Y6HAI<-&r!jl+s;2uPeTM<ed=7@-k+j
> > > z7$t?o$9mj%EoJA<osksem5Je_fQ+IZuPua38-
> > *NvPdj(+Y(K7Yz<RH5o{9<j_3PKF
> > >
> > zRV&5B?qoP6P^qw$#+Q%eU%!5RlBwtEl@eY@vNh>Dsb@pP4NHVq3?BtBbp
> > Z*mJN(#V
> > > zk9o<J`}+Fz>xCK?@icNi(iYrMpnah=U~r?v6>`8jCL}nlS{KaRzKBjj$RgyA>xv)g
> > > z<r&&{?Ix%kq{m-
> > }E+7FMfT$=*+Mq=>60`dy%t0J{wCY2MbKkL|jfvL*euP4rS~Gs|
> > >
> > z%G|n65n%xIeO6ce3?GI5(&eMpdJ)Tg2^$>A1tvZ|QZ6BhAAkID0bbox%#_%W
> > mA682
> > >
> > z_wvgx_bu`8!w;9_5b~DcqX3{TAi8|?eFHn?VfE_OLiLJ!8Y>^IrZFC1Oy~qb_ZZLu
> > >
> > zQ$|JMAy&^|y5eWPkAisU@^Rt9g+dOJQ`Aa}OF*IY1o%jan3=dYOeH9}Z?Tdr)L
> > iit
> > >
> > zC0@%Jmpf1U%K7J?ub5kaWQLCdXu5#t@=>lZV|TiB(7%6wp?bwVO@@!O5
> > mdKr+a{o)
> > >
> > zb&9LfU|4P1v`Jo2toDz(;%B~(LTBmnQEPdhRgPdn71L9R@sawUbka$zEemL?pJ
> > Jg?
> > > zvu4czIN(rPUdpIZqXJ~B_=w@70F*8ux_rcQvb?*Uce{4&ihg*)KZ!L{l6<6JP{Bnp
> > > z-U*1-
> > @n8P(7Zj6({`Ecm&2N4qFXj2?pZCoqZ~|TNGv7y{v$XigVyTw)zED;&rxFc^
> > > zg!zb6vofQ#T`NGuY+aWcsQU_;2&X%C?9k0qJ-y+hfR!#FT6_$ktS$&c0;j3sqt!c>
> > > zC-
> > Y!!zvGTOgf5n!`dV0^co4uNpS)1}uCDl*@1r0UT6`qDweWZfPgBT8#ub5Gexcn;
> > > zFcDkeRSr-Zm-kEEx^-
> > 3Z36RF{Q2<RB5G_77XwX33(P_AwLO#+*cwKw@?YD#BL*Npj
> > >
> > zm*uAfuaOrN%sNJ1sC8FY{LJ@J=qW8ewrtr_cszxt>Et8gO3a<W`;u+jwpF2nm4
> > ={-
> > > z@_vcWC9>h8&`r94Xz>y4N_j`8;cml*4Fyc>)8yB4?4qp$28zD>^#w6RIaX`ZC-
> > )J7
> > > zzZ9WjQJw0FpZPut-L1t(cEp6oQ+Rsz*=Ku6SJC-M#fZTd%os##-
> > _X}7F3Ub%D22Ih
> > >
> > z_$Z*K3y2mU%atpaLIMg^lEe;310U%x!T<?%Ryk#1M_tw2*DQU&fB}N!L~^Pte
> > &+iq
> > >
> > zbiEcIaX6g*{YPA!d5Km^_(=6utXLs*gv#kd4?X17G~qfcx^iEv_)8ZaiR9GqQGihw
> > > z5G_7Zmahjh6}gHp4PLVZK%A%P;Uhao0iw5~M8_7evqh3)l=&q%<A;{8^^(Vf-
> > O?35
> > > z^L-ThNSBXV`m4;9SnUk?>)pGzP-
> > n?0w$c(oN)I2Y<bC(uCuxY+Ep>mhzP6C+T#!I2
> > >
> > z+%kL&35YHqvCi`n75DW>A_aHq)XAN**A=3f3xGIJQ^iNTK%=4R)ex`ixQJ9#YCY
> > nJ
> > >
> > zBjoNMXUv%41SgVX!$$!|T|jjC$P~s)RNU9KcFlx_*r$9E+&Oz)A()H(p!*<Ie587~
> > >
> > zu??`+I&k1Xchd@988Kpn7f@VhGgKu4QNf(OF6xRO>AkWNu1gx?zEwK@bF@
> > ?fbagL<
> > > zF0f7)ELh+M-
> > 0MoOUcCxtVqHudAF0)>S+l&_;&ol!hbogzd1NKL5lY|+aLe#f08JMV
> > > z-
> > R~od0Qf}m5*6Y4%P+qyR4>3OAt!`vC8q=gkra_aK4Kl_8+60nUUjeLW5<qlKW<;
> > q
> > > z)x?uvYu(ZnKl6RG`@%ZV<s-
> > 1Ghe3zAnC1F*q9g$hVbtl*w?IAsOCcX=JL6BGQ+!XS
> > >
> > zPMs<N&3TKMERx7XjFzJf>yvdpYAsgKO~|JcZTGP*AOZO3Yw_w7r;t8HCr_U2%
> > uRmG
> > >
> > zrk)!R=aqEw5yy1$QKh@p#05|f<2Z5RM0XDMl`&(+I3WsotSf$L`#ut($wo%yz<2
> > ve
> > > z7mxsa)QS?t1_bgJte4TWk-
> > Xd8a19$aOkPkr`AD7RlySF|D;+y_lsDGCOPq8`)Jq&b
> > >
> > zNHi$yOcW1v#V>7qoHlJ*L9`2AWON}Pj{%x4AOZM@%{$=>3)ZmUMGWK>ds9
> > d@Zrr$n
> > > z85X>V;*js)A+>zO!ckZ834=-
> > jF3IWi>C+2>W?jUkfaF=NTe{+xDn4Qpw|n<)2~ff<
> > >
> > z6=(0dfCS(p9mFV9sGIyWKnM>)@DTe+o~`q)SKL^qIHi`4RFXL6&gS?YBMj<pTA3
> > tD
> > >
> > zLjSNJ;6y3Rv99=~ijP`*d34amjT?Qj(gh?K9~t53n)30n^ZmHntwWv6H}tk3u_|$P
> > >
> > z(#%J#S%B4c%)@QOd=KW%ohu;bJPi{K&{?#u_@#u8DC+<I_rG@nqH;{M6ldE
> > D9_s=U
> > > zjE@w3=bd+|)Y+Ma=u0XZJ9wodX1eo1-(!XuDuD^o%ts*A+SvgU-
> > }$mrLJ0IA84|zp
> > >
> > z$}7&qfsb{?FD5=NUApvkh2M}NLuSsLNib8bk(e!wD&u@zKv3b3R~#MGg1y5=B
> > )VI6
> > > z-
> > P8}(ty{;ca>a@j1qQKH#cn?FVb!y;Q!46Xq@0hsvjE+3rhGmgiL+c?@r#L%wqV3}
> > > z!1%vHg$f0!;k>8|h;M~?dpPrV9;1Ha`?w?li+<a;Z(q4`B}%7^P6KF;S(&5auDJN0
> > > zay~Lvk-+7?#m=l&Fb+_XcugmiIpGGJ{Ttv|SNyWe$0bXasNkauh`X1CD-
> > u4^ebh=w
> > > zpYSOx#`abP8PcSjkJJ!P8d?Bi#G%-BD;ZNx$*8qMhYnh~xfAP(Uv~M3mv49T-
> > B)x0
> > > z@$G#HA1R%^MO_i{Em1203IlEsyso65k8-
> > 0$H!{pMyc+9uUE<1v;R;qEUJt5V*A>5v
> > >
> > z@{yUo;#fi#5O)^~SLA%8kBFC~wQDcrALbM<Pm0DzmMo>8kL}yH*8(Jf%@hH
> > h;hk40
> > > zefsoK;hk3+UGd8zADKC-
> > FGuSF;?*zqbzeTxHEb{1=@UCZ$4qO%pL(XBk1T3w&7*af
> > >
> > zbSxg>C(x@DynKZ58=xzGS>)sB(WAXyNAByofcVl!g^yIDTeof!r7Yi4bQ3^E^=YG
> > x
> > > zQu_HwRoP`$M*~GxyLDOz5)HjD-
> > dT0UFLQh(K$4bvp)Mf4U9ZSTgrRZc#>sfs2}VY0
> > > zm<c}0Eu`H2rS5djNmz8l2(07IjVpXQQBH6sRzKDizijc5)l0lOsG~tjT|f%<i1VU4
> > > zA1S?h_38n9P&kY8Jq}Dps+S2qvdHNRf-
> > ?b52DBu^PK;k8uTksHojZe#T6M)QD|`ef
> > >
> > zRLuh{cIg7*?Ae0HT70Chk3ar+oMuS0B@33Kco9NXty<NVDBXih@KINBPF<wka
> > 7i=-
> > >
> > zg2kHG6+iXLD@sTl$%w04zkYo;dMa0R0r9QBE+4H*qMb$TLa*1aZ=vo4tTUk1q
> > k@1W
> > >
> > zO(yt=e|2~BC0D`($3aC3)iSTln>A}D0khyOUGYmZAMqWE5e>r?#jTA<0P*Sz`+6`
> > w
> > > zT6JStSc?L7q0R$z3#Uw(!e_T&d$lfVRR*;mt<0lJj7J4$^L>x|_wOI3XvU?RHf<_c
> > >
> > z3foCq`ae`7yL@CG#Dse7+O<p)+0?%J>Z{op3InY5tS%r0JHmM}3?Hp3VU~zyCS
> > kI*
> > >
> > zw03zrJ^l34XwOChi&c|M@R7H%)@Xm|(4is4=JeA~_i|>gYrDz^7p*+?pP<7mX
> > $Y&D
> > > z_K!ss`^TKl{$YS-|1c)9f0SbXfY<&>ii_%&E+2`jB1eygM^!iQWC%2J<j6U5=0FY9
> > > zRx#SL+~Z)-f!j2k*kcyN{tkl#7679v*Ul#se5AIYefF92l_)=E4rn(p@Bt38yp%fd
> > > zM;$m@^Pnyt1KV3g1vM`#UI<a;CeJ4;eDoSX79=LN|MFHV-sK%waK6tAla*M-
> > OiVHX
> > > zfz0tysDG@dS>Ypwq6Mi}@M5rq(1JL7g)qR!PMBrwf@PJ+MZ-
> > r)N9U4{=!Z+1tb1$T
> > > zym<v#zj^cKU^|k!706k7!$(PnW`&Ph<5k>mN}8;Di#a}Pj0Gvl;y;rM-3&`Sz2T!o
> > > z0J6eIt@Rv5-v|;|gj?mymw)%&cMDST-
> > h1yA5}Q*w0)~$gd@{jDzCl|19sT<ClQcQl
> > > zE%rcJ{dQ9l0E1;%vQHU4O1eH1eALwk=-
> > $1%q{)GAp@4y&m_SKiKBAX3T<2Hx<^90;
> > > zC_ZTTC;=)HeALyK^Kv*Q!9npBw%&jI;~$-
> > r^yQ<j_~m{lMHi6Vzo4A5mkB=V>XYL*
> > >
> > z+S$fvkB>U)C|p6>lr((Qh1c*=f><W_sB3Q(ha!^`LsneTb+jmH_~=AN<=F61f>I{<
> > >
> > z_~3&N+TSDJgFSopNZK3KEfhr2C8jclkGhZ=K1vXan~#xf&k0jDIVG1bUoL5HgtyS
> > m
> > > zMzz@RQ5RCfM+ssv@sT+=e%{z1z=IIpFZq-
> > Nw%JE}|KP!cat=E0st0D3z@m7Iw+-&^
> > > z<cW2~&#dP-dy`|co+AKapDNlvVh&8)goht~xM|a-<;s;KK*@js0|-
> > GrVZsD#f8^5Z
> > >
> > zzI)+?7upq2ISAl?)m><WR}3EoFm(YjeDo4~6+YtQ4(j1Pkx*q9U33wBfrDs{2}H7H
> > > z&6)s~iMmmWA_=-
> > 7h)|eQUGdBP_Yp%j44l<}C`X0CKU>d6J6>gMiDO~Bh!DpaQd@d!
> > > zXm?|^1UE7A#oOL_=bfhok-d`X^_Fm6$6_%tQ#Hj_7(OZjWs-
> > qFw0z{%hci90wfTs4
> > >
> > z%D3Ns`}pIJTWG^gt&nhK%a%QK=#Z0f^5dw2#96hC<gejlBrujpCeiW{#Zi_VfzI
> > M1
> > > z+GSg|Y~kYwD=j?HoWXsrI<{Ei%Lyplz3Z;K)H6>erQu^TIOn63X!(e-
> > gXPNG;v=s6
> > >
> > zq36dRe~c3nYmff2%PwOUsScf6UsNEVa7yG9^~{q=Y5157&iN=MT0RnS%nF}j
> > @e!Y0
> > > zpwzHoLs)ag6<2V4&pr1%^2j5K(Ba5Ppqu=Zb)-nPI~A*^n9T4|5h#-
> > k1fu2R2`8L@
> > > z8?Kr)Yg&9{w%DRY3o8sgI;E`kU`2@AKt<%W)N-
> > Ke6Hh#$m~)cJ3?Gw3JL_dd%SX^4
> > > zLNtR+h-
> > n8d`QU>O9(dpZZsA7nrI%h(M2zt*5u)WEMB#1#XT^$@36l(CF}5(&f04M=
> > >
> > z4O3zBY!MNNoR4_*#J@MuIq@gY&Jhcwv<{hEuwVgOAr&iDRBY_sci%10O@2
> > yzjT8=6
> > > z6&q`k83Zf@BIl!(ZO@)P@xX>RZ&p(oqvG}%<s2-
> > P6k*5A(Ehy2X=vXyelrxYHObP9
> > > z0AoDjR4V@3v}vQ&mNU*cgGZP->Z-
> > {>E}Lj72YB;P|MF@z!6Y^alsE$D*AY`yg@$&T
> > > z7hZUw#6dI7HweUpz@$l&Y@#V1TzTb{F;&K7YY-@91TYCH=%Qaj%-
> > 3Iky_69%Z8r$S
> > > zgaD!3cJ10Fp<cmTmK8}%RZ2s)?b@}|Rl-
> > k0wM`wej=;>BGYc|Ka&htE#aVB)Z~X~J
> > > z0s_pDv1Rj3Y!Vm*B0-
> > >4t5y=;6}&~9sWZ<!Gm_HNoQcIp3jwr$0m|&Orn$dzP&YiR
> > >
> > zqG(r;bdrk%?ae{keVgFqqlE@mGhMoL(cMMzEyyG=2!H@;JZRTQcvtY&C!c(RR$
> > eIp
> > >
> > z=;osZ2y^YeefvfjEV~rIG;Ne4fI0uVb?XW;PJYoc7?Ee5kGo!cwD7^I1@#F_FEJnO
> > >
> > zHLWNX0?dOfFQ#(px$l<9NY&~W?9QHh?m0II&MV)1^9@dljFM8ZBsmA=qIn)
> > *K@}my
> > >
> > zU_@ONHU~giO=#S>@tbeH>ExjM81I@uS_*4ix#`xFGz9<NPd)XNTcUigpsI?Oo
> > |LpA
> > >
> > z;c76PAaufx9XsSGegFOU%a$!;*AkEuuAwO|iwLj;fgz+^sJ!mt$~B8kj<C*{b>DW|
> > >
> > zZ7TLJ7?6$~JC@;Ygr%FTa)tm(I9mSyoy1i4^^r5s+|5Dje)Q<k__uW8<8{1x_3Ex&
> > > zyPB0)H;g5I1xIsUfxo?E$-
> > cg5(ITdtB@Up_{L@Z5ZO)uI3{Y*9BnRy9vJMt&Fg~Gr
> > > z<}}R+5b9$8{{0exk=#NrC2fw5(*reL^_(FoB`{jIHg4RAt1$*D>1l$gNs<VlNrHa>
> > > zUpetgK%9aS+4>LDDQw7Y+O)|FL-
> > +Lq2M*w;+UUfF!90u4R<2x`ubW#Q6t8UEy7kmk
> > >
> > zPt9V(ldm)5d0ai<@KzC9D;X~32M!#FOTgqSY)VWL0X~aF!{I%wB_7Vi8#Zh>@x
> > &98
> > > ztaA>^V%?^H|Nb9+^pO)u-
> > ($>9@tq4Xt5vI(0}xCT1O)IeNBl=$F_0u!wQ3cPt%PjN
> > > zsUiY|i)9OP?b@{xguQOz9*{6A#^_QJ>XavADW0eSii>_;B7wP|S-
> > ^>;qY0q7aN$Dq
> > >
> > zD7>JST*pNxJD6B}8w;;U`Xb>>h`x&JV_k1lZh4qCZJN<7iMH>mR;|kJEo!cAv{kNP
> > >
> > zO~YOZ;a7~2SG4^SQ*La8J^JXQVWx_fRFDHZ*D+PnWXsTn5Ma6sK2E|C`I;S1f<
> > 74S
> > > zf^>=#>R7X9&nC#Dv)6(hZ`-
> > !b%vloXWxjEpJ9mETt+#@8ll2rnu5p$^KtRH^Bv5Bl
> > > zgf9XYTyOyslaTX7TO`QJtls!y9&LgqO_~sXTGyeU-DUQ{-
> > o1N?2XXVwHyd5qXgf$T
> > >
> > zH~LX4(16`>1rM0i^y$+_v1pSlas;r?nmTpr!Gi}2_KxmFVtvk^KfhP6UNvgeh`g#M
> > > zLni`k8S@SdwuJ80tpxZu{q)nFrI_QQAb^JfIu~cQ;XjvlU+>wohiHSp`qi(hSFc`_
> > >
> > zM&+{5DpjfwMUI||YG`Wp7mg;F#pDvPOg9RBs=<Q?qZVb;Dv|>hkqDOEy?b|}
> > x|rRQ
> > > z01|@FHypFP{r20Dbcc`$u~P{`7ob+=k;D+FUAy+UapU;L34Is-6te<e?*xY6(^<D}
> > > zU9-
> > _F>C<}k>Jc~<74Gn`7t8@$JR+D&DqwD<3ITLtFS+Cr+<*jd$XQST+!xVRzzT2P
> > > zym{=!5O58DgQ-
> > Fw`N}XvY1_6f8;C?~bi)<Z6|}HgwrrVv>r9D}AaLZ7N1}lD%rnm%
> > > zI&>&1k?_igMIk&$@Ljm>y6af8&9~hvqj%=lSR-
> > O!j@_J!=Lav`6t92y;fG8W&8#63
> > >
> > zUKBkOBC0daT)A>(geyOCL1M2Hn@zSm$B!S6s(kC#tr<(B+fZ~Uf>i(_@RI4&sS_
> > >%
> > > zSFBhO-@wC-
> > D&vqIJ$e}Bw_qKY@~2SBVuZ;Aguo5%u20|!lFXnBXP6A_SaM{HSEo*$
> > >
> > zR2c+OnRCxQ_wvgx#}01DkRj+C0#{(G{4kL6<!#=)x%nohoKulh4@C|%=nysrLSb
> > Yk
> > >
> > zs%P2JW__5gG<I92Oqs$skQL)wZ@u+~8*ZSUOoyQ@+oLC+d~z7AKV+K^4f{mr
> > oO2G-
> > >
> > zUi3T%4H`6Y;zS(FV7Z3N{R9T~zKBr=)aQ)aTO@Lx#Y`}t#2Lu5&p!M0*I)ZeOBxdJ
> > >
> > zao@LZAN0Yy0;|6KaF~xWAzxldjSeRcHd$9;O3Mx%wi1vXArEFRlURE#Yu4Luzn
> > ynZ
> > >
> > z7NyA4IdTNhl4T)%#E22=*RPLu=Q=T|&Rjt@4J%cu6nTf540D43gF4m^XUv$fd-
> > v|l
> > > z33>V}Y-
> > pGprX=4Ge15V<x@5_cI5Z8?&z%TsXlR(c^ya%nW;bj}4;?xbdWNyej8Mqa
> > >
> > zpOv9uzDbdu)}fixqD2d|G|@URBU|U2fzS_2moDYSg;!4#TQEHmTT(T_{R`s9wj
> > G)P
> > > z1fO-vXYP+tfncW+g#qT>sLz#DznjKp0s;2c*;r={A4fopZ`q#6%9e`C+k*`hS~Pw7
> > > zbabC;)vASiz)W<CsiZ-`i2#E){8XTsgMJQP4H?vJ*|LQ#LKO-WD-
> > Ev^^wzNGXTcf2
> > > zn%JN<YSgF%Lz+7K(H!R+0j&A3<YKUgMjwhpxDUliJ|7_5M1TJI=LD{en~b~@-
> > h1yo
> > >
> > zwA5zJnl*g*aK3tsy|H05VN>!gc&2s15Fm^u17K|J(IsoppaHs_ke5#tu{Bvx8Z%}L
> > > zK1{IE<%g{qj7F7x)TmJ~i}@^G-23+J+p}j+bmTgA?AWGF8&-
> > )gz4TIop<u2E>9VWq
> > > Q9t=$LltI8CkSzrM7XaWYkpKVy
> > >
> > > literal 0
> > > HcmV?d00001
> > >
> > > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > > new file mode 100644
> > > index 0000000000..a636b086ca
> > > --- /dev/null
> > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > > @@ -0,0 +1,153 @@
> > > +/** @file
> > >
> > > +  Logo DXE Driver, install Edkii Platform Logo protocol.
> > >
> > > +
> > >
> > > +Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > > +SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > +
> > >
> > > +**/
> > >
> > > +#include <Uefi.h>
> > >
> > > +#include <Protocol/HiiDatabase.h>
> > >
> > > +#include <Protocol/GraphicsOutput.h>
> > >
> > > +#include <Protocol/HiiImageEx.h>
> > >
> > > +#include <Protocol/PlatformLogo.h>
> > >
> > > +#include <Protocol/HiiPackageList.h>
> > >
> > > +#include <Library/UefiBootServicesTableLib.h>
> > >
> > > +#include <Library/DebugLib.h>
> > >
> > > +
> > >
> > > +typedef struct {
> > >
> > > +  EFI_IMAGE_ID                          ImageId;
> > >
> > > +  EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute;
> > >
> > > +  INTN                                  OffsetX;
> > >
> > > +  INTN                                  OffsetY;
> > >
> > > +} LOGO_ENTRY;
> > >
> > > +
> > >
> > > +EFI_HII_IMAGE_EX_PROTOCOL *mHiiImageEx;
> > >
> > > +EFI_HII_HANDLE            mHiiHandle;
> > >
> > > +LOGO_ENTRY                mLogos[] = {
> > >
> > > +  {
> > >
> > > +    IMAGE_TOKEN (IMG_LOGO),
> > >
> > > +    EdkiiPlatformLogoDisplayAttributeCenter,
> > >
> > > +    0,
> > >
> > > +    0
> > >
> > > +  }
> > >
> > > +};
> > >
> > > +
> > >
> > > +/**
> > >
> > > +  Load a platform logo image and return its data and attributes.
> > >
> > > +
> > >
> > > +  @param This              The pointer to this protocol instance.
> > >
> > > +  @param Instance          The visible image instance is found.
> > >
> > > +  @param Image             Points to the image.
> > >
> > > +  @param Attribute         The display attributes of the image returned.
> > >
> > > +  @param OffsetX           The X offset of the image regarding the Attribute.
> > >
> > > +  @param OffsetY           The Y offset of the image regarding the Attribute.
> > >
> > > +
> > >
> > > +  @retval EFI_SUCCESS      The image was fetched successfully.
> > >
> > > +  @retval EFI_NOT_FOUND    The specified image could not be found.
> > >
> > > +**/
> > >
> > > +EFI_STATUS
> > >
> > > +EFIAPI
> > >
> > > +GetImage (
> > >
> > > +  IN     EDKII_PLATFORM_LOGO_PROTOCOL          *This,
> > >
> > > +  IN OUT UINT32                                *Instance,
> > >
> > > +     OUT EFI_IMAGE_INPUT                       *Image,
> > >
> > > +     OUT EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE *Attribute,
> > >
> > > +     OUT INTN                                  *OffsetX,
> > >
> > > +     OUT INTN                                  *OffsetY
> > >
> > > +  )
> > >
> > > +{
> > >
> > > +  UINT32 Current;
> > >
> > > +  if (Instance == NULL || Image == NULL ||
> > >
> > > +      Attribute == NULL || OffsetX == NULL || OffsetY == NULL) {
> > >
> > > +    return EFI_INVALID_PARAMETER;
> > >
> > > +  }
> > >
> > > +
> > >
> > > +  Current = *Instance;
> > >
> > > +  if (Current >= ARRAY_SIZE (mLogos)) {
> > >
> > > +    return EFI_NOT_FOUND;
> > >
> > > +  }
> > >
> > > +
> > >
> > > +  (*Instance)++;
> > >
> > > +  *Attribute = mLogos[Current].Attribute;
> > >
> > > +  *OffsetX   = mLogos[Current].OffsetX;
> > >
> > > +  *OffsetY   = mLogos[Current].OffsetY;
> > >
> > > +  return mHiiImageEx->GetImageEx (mHiiImageEx, mHiiHandle,
> > mLogos[Current].ImageId, Image);
> > >
> > > +}
> > >
> > > +
> > >
> > > +EDKII_PLATFORM_LOGO_PROTOCOL mPlatformLogo = {
> > >
> > > +  GetImage
> > >
> > > +};
> > >
> > > +
> > >
> > > +/**
> > >
> > > +  Entrypoint of this module.
> > >
> > > +
> > >
> > > +  This function is the entrypoint of this module. It installs the Edkii
> > >
> > > +  Platform Logo protocol.
> > >
> > > +
> > >
> > > +  @param  ImageHandle       The firmware allocated handle for the EFI
> > image.
> > >
> > > +  @param  SystemTable       A pointer to the EFI System Table.
> > >
> > > +
> > >
> > > +  @retval EFI_SUCCESS       The entry point is executed successfully.
> > >
> > > +
> > >
> > > +**/
> > >
> > > +EFI_STATUS
> > >
> > > +EFIAPI
> > >
> > > +InitializeLogo (
> > >
> > > +  IN EFI_HANDLE               ImageHandle,
> > >
> > > +  IN EFI_SYSTEM_TABLE         *SystemTable
> > >
> > > +  )
> > >
> > > +{
> > >
> > > +  EFI_STATUS                  Status;
> > >
> > > +  EFI_HII_PACKAGE_LIST_HEADER *PackageList;
> > >
> > > +  EFI_HII_DATABASE_PROTOCOL   *HiiDatabase;
> > >
> > > +  EFI_HANDLE                  Handle;
> > >
> > > +
> > >
> > > +  Status = gBS->LocateProtocol (
> > >
> > > +                  &gEfiHiiDatabaseProtocolGuid,
> > >
> > > +                  NULL,
> > >
> > > +                  (VOID **) &HiiDatabase
> > >
> > > +                  );
> > >
> > > +  ASSERT_EFI_ERROR (Status);
> > >
> > > +
> > >
> > > +  Status = gBS->LocateProtocol (
> > >
> > > +                  &gEfiHiiImageExProtocolGuid,
> > >
> > > +                  NULL,
> > >
> > > +                  (VOID **) &mHiiImageEx
> > >
> > > +                  );
> > >
> > > +  ASSERT_EFI_ERROR (Status);
> > >
> > > +
> > >
> > > +  //
> > >
> > > +  // Retrieve HII package list from ImageHandle
> > >
> > > +  //
> > >
> > > +  Status = gBS->OpenProtocol (
> > >
> > > +                  ImageHandle,
> > >
> > > +                  &gEfiHiiPackageListProtocolGuid,
> > >
> > > +                  (VOID **) &PackageList,
> > >
> > > +                  ImageHandle,
> > >
> > > +                  NULL,
> > >
> > > +                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
> > >
> > > +                  );
> > >
> > > +  if (EFI_ERROR (Status)) {
> > >
> > > +    DEBUG ((DEBUG_ERROR, "HII Image Package with logo not found in
> > PE/COFF resource section\n"));
> > >
> > > +    return Status;
> > >
> > > +  }
> > >
> > > +
> > >
> > > +  //
> > >
> > > +  // Publish HII package list to HII Database.
> > >
> > > +  //
> > >
> > > +  Status = HiiDatabase->NewPackageList (
> > >
> > > +                          HiiDatabase,
> > >
> > > +                          PackageList,
> > >
> > > +                          NULL,
> > >
> > > +                          &mHiiHandle
> > >
> > > +                          );
> > >
> > > +  if (!EFI_ERROR (Status)) {
> > >
> > > +    Handle = NULL;
> > >
> > > +    Status = gBS->InstallMultipleProtocolInterfaces (
> > >
> > > +                    &Handle,
> > >
> > > +                    &gEdkiiPlatformLogoProtocolGuid, &mPlatformLogo,
> > >
> > > +                    NULL
> > >
> > > +                    );
> > >
> > > +  }
> > >
> > > +  return Status;
> > >
> > > +}
> > >
> > > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > > new file mode 100644
> > > index 0000000000..fd9c489815
> > > --- /dev/null
> > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > > @@ -0,0 +1,10 @@
> > > +// /** @file
> > >
> > > +// Platform Logo image definition file.
> > >
> > > +//
> > >
> > > +// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > > +//
> > >
> > > +// SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > +//
> > >
> > > +// **/
> > >
> > > +
> > >
> > > +#image IMG_LOGO Logo.bmp
> > >
> > > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
> > > new file mode 100644
> > > index
> > 0000000000000000000000000000000000000000..d1d099789fa794648b86c04
> > 6f0320a553954764e
> > > GIT binary patch
> > > literal 11944
> > >
> > zcmbt)1yozzwr+6OVns`fYjKxAi#rsGl~SZwaQ7xSMH;L{gF|r*PAO2VloTiy0>$0k
> > > zA3gV;|D1Erd-skz-pU>sd+dzt`RzUD`sO$1T6a@-
> > zX7CbN~%f#G&D4T%KZm$hXg1B
> > >
> > zFwoKe9QOnB{=mY;!otMF!pFhE#wEljBqYEmARr<pCnX{#BPJjqr6MJJKtV}KNk~
> > FX
> > > zLq$PDPC-
> > fW=O$<v_y57f!o$MCqaY$6qWE8ryDtDTT)+U@Qw%gR06G~O1{vC24}cMX
> > >
> > z20+IEVBF*V`@qG+#=*abiT>yJ*Q5Y642*m1*w}c4#JD&B02(?5CIAZ?hYS~woL
> > K<)
> > > zKwQ_-t)Akspn~^1N-8luBd-s&V-
> > KGQy>a&dLsN2V>Zoa0L=^R{AjzqD`Cms_MGXv-
> > > z3cJRIUxan{{M^5{K=Dte{}aNWt7QKG^!KYX078s=v}71$06D<t&sga1<Y77-
> > 6!?Fg
> > >
> > zkmOqR@l8Kl{#s|UYF@;>+y`NB5f6%1VS@y`ZtL(3A7^4K^G=(4UE49w?T_0SDk
> > G($
> > > zN1<Fzi-
> > #BCZuBd*+s^07kU*dt{v81Q>)gk~AQ&^pb*wNQgm&5Qja9BOcG>LPphMn9
> > > z?<LSCzG-E!dB<m>vN(4)gekvjlgi*B7D+O@84|?4X;VNd+d{aB!>#pj!RbY@V{-
> > 0M
> > >
> > zPKO!E5zd!e2f}z9zFqo?RzF^@dVZHH#ahPeGa{TZpU_*TS1M}tX|w?EK$R@^Lk
> > RGw
> > >
> > z!2NJxRO`lH|1I4eAlB_T*bxj_KwZ3X{pDi~+h}#8{=KYTznUxyJMG)ThL|nWX9zRy
> > >
> > zjlcdeRPG?hqS!3Fs64*K%@X8ETgA5=WaAe}8M~Q$o<KY<;?t0OTsCev^Aip)xZ-
> > &7
> > > zEnwj2m76xl$_MdV+x{H|P#S4>kN+4mZvm5zF6{kGTDNoQ`j$h0&=;2p+-
> > Mm#r;q9a
> > > zs>e7`0_!VEV8!}BIp8l(V4*`i?MARK`>JfxT(4<Y*rs-S%vWL0!r{>*Qllw5>&m((
> > >
> > zI+~jN%Lzeg%hnEzdBDc}>Pl=WN<Bm6{2?g>c}Qq3kngxNWsM~L?XtNCxd(st+&
> > s!y
> > >
> > zI*EgOrXSDx282+Z^`WkNLp5%?Z5T!MlIZj?Z;RlQ`kXhU046A8Ah5sU<#$$%HnW
> > 8p
> > >
> > z%i@k_8@M(#J9<$Rv@YyRIr0Kn;u#U;OMJW?y=?POH6LAyzUFU)7%XSboO{-
> > I1(G~!
> > >
> > zv&NF8LJDonPp@=)(heT{7*k(r$#v`!oGxJ)Oxu5Xb))L#NmJ3CE%K@T7NbCa*<Y
> > 3{
> > >
> > zSkVIUwM1Y;`p{X;$6MH+8+5bvi99ug<GoxS<aAQHwEI+(F1~ZtI!5~r5Mw8E9(X
> > vd
> > > zUrJtY`3-
> > q7^p>6A$y5?)h$gnjn>G8wL;vS%m_wlDvulFiweq(@6$qzti;NKBX@X(6
> > >
> > z;F*7)|CQu!YNVQ8kWB*T9bgj@^m|rs1G~^qc*#HIz1h6Sa<Arafr{L!p+et*ooI{!
> > > zMIsQB5uqH1voeu*r4H(0{WgJb5FYpS-5#cI4DNinbgL(w@pbDN{bLdE=I-
> > +BLH<6@
> > > zJDE)m`9pQthFm2ursEo$*$4&bDm7)9a5WK%-_c`s`B)nR5h-
> > @4#bnHT`3_b!JBHow
> > > zxyGDgImnY#bM@V-
> > uG(2(e5mx8F$Jwj7So#v1GxWhp>ow^hy!(aeiO^a{iey<$mjMM
> > > zx06lB1|z#Qq?(cCl;i<WuAU%C)-koQcf??CdqKwly`#s}-
> > )2PTm^a{pEuoxR=C#gC
> > >
> > zs@TJ8#4zz8InTL)<1nfss&!dP`@^_Ya$?Og(x{@I4dURS)bN{D0#kL^gFy7@Ppu
> > ue
> > >
> > z>&J*p*N`Na;KD0%B22CEY}XdL$O}WaZ+p$(3wB9c1NkA!>=W=o3Y>Cg12TO*z
> > h4fT
> > >
> > zSA%uomW@1Gl5o6W|JkMiZ5ZTo2JJN0fGl5hX(@{54lqcN{n;X4wBsu(cO0n?&
> > $k<J
> > >
> > zsY3z_`2DcPSkp_>0+NTydjm@!SeX7`a!6K%9sd(~(LGQ<j~Pc%LnEupS5FcO*+U>
> > o
> > > zsre5rS}aW)s}@)gnlg{qR7-
> > r<5@SomE6N08vY@4nCv<_`8+xJm_R8a=2_UR+*Mq*)
> > >
> > zgafvZ2Ljj8qM30Bw7#k!fg(zOI?QC5TacQR&pROVy2xtX{vDwB8fX<$yY_KhYTFe
> > `
> > >
> > z6V!988l(NgW_i1Dq<Y(X2h&?ef9)ZCl@KwL)yUv}nzilJ1F5Dx^?+I4;WOwVxu_e!
> > > zrzuo)hf7U<4or;rr^mo2%+RXu<Nno_E-
> > MqUbaW^+bO&JL!B!hoy7_Fpt8o9V3-J8_
> > >
> > zw4D`mw~0ZLxk!!$nvP_poz__f6yn{K9eSf)fm1_~&V59f2MJ6{;xb(dWT$mSzW
> > WSY
> > > zCQm-AL8Vn?b<aePPdE_Ih@94d?-qAua5UXMO_vw!e(-22`4Zj<hC-
> > p6eI<pRAWZsS
> > > zb8l&H%4Ch-r4mX`tuFn3S!aPU6@1f@eFyM^e+Ki-
> > R(kLYWoNjiUT;*DRZNqc>Boy#
> > >
> > zsU_#B%Fd9O{MYP)g>yon?|`q$sUrm@?xDp?`?@DAql@r!<Mk7UpO6q~4Sy#
> > 3d1$Mo
> > > zTo{ex<xTRjqhMQ<LFSm60Y<O<I#Yc?bNQnTO2}AiAPws`T^iO`IV-
> > >R0o83OvX&P$
> > >
> > zoGji5r%^OavL<0l$alF^vw$Ac>|(o{QnE^3Ry`M*a?wj&)+Y_xz4E&rZKb(WmB;a
> > w
> > >
> > zz2WL)HB+aw{~%q=@s*V?B2}?&z5{|z(O0%Y)*qu1Oe@xz@Kb9;+uQQs>ULA{
> > b14sy
> > > zaP1(hq~*)$ZVP@VRo_`kBo7p+qT5%FOI`_0#d(u0b>c-f3!lIVm8Bphu<-
> > l3=^cEW
> > >
> > z5u62#D^7jk95y&DxXZ`h>b@AM7?6OO@AkWH9*FHe`{NFfJvY~84R4JAdIy}U!
> > X?xb
> > > z58KO(*<D`X^!;n1{tGhU-
> > gB>3{)H<UNZNvr5pSAGpABrc$VQ~|o6WLIEux|oxV!xb
> > > zjD{B6#&qBk=jK*4&@lte0NvuLi)GNxZo1R;cyqG1Yx2L*Yj5>_w5=ykbO6-
> > OoIGc@
> > > z(%$_%q49Wzrf=8f*!ro}6KlofhCpLZjOE->Z=+CSrX^7{Q-i;x1D%xidFpr^$Jo}7
> > >
> > zhmkhq2W29QI%yJysC4Kd7#(ofy_73OyiC@y7PKyszt_yV#^~28xfR208mp_9oa
> > e)m
> > > zG^dHP_;2xo{tkF$lg1()k*<*C)r*;nOIP~r6ad&0X7agWw6Qp|J-
> > 7|syRK*C6c<&+
> > >
> > zm#Ss4Iy0oPXLXj`W+zW(@qwy&V@v`MIHYUdw2LY_DccN?H2Ld{sdDKhz|dy
> > w<cRAV
> > >
> > z&Gem_HJhM%1tm_vV=`caujL}+9iW@4YWm2Lc4A9|zke3g6~vK6_RLS|#lj5s2
> > 77P{
> > > zEBjYSK0StH-
> > KO&ct09341)J0(vgR5_<Qr2HAev&AVpIG+5T^w)kZI{1r_^2bvi*|F
> > >
> > zcDnL_KAbl^aCHKjRI~pisA~@sU8+Q)Zt{k)*^a7a<t5S2=hIZiF*eN%GP363fJSp<
> > > zcSQrUsjo`|cIV$*k0&&gqjq3!yO`Y-yXx&-
> > )rd!0)UwT<X+mDe9L|a3$;n<F8nDj0
> > > zbt2XTx~4+j0mf`@)4?nrk_$M>$6^uZ(~Lx6J$-xXozJ66o%(}%sgjYss?*LK-pR$?
> > > zU%@5+mRbI$3$X*b?*OPJ&08okXrqNVeO-
> > 9(A*20F*RkHp?htHs72I{MQs4c}4ZeLk
> > >
> > z!TU2Oso2@(aJR1V5X3wDaphN2Mg8&AeG*o(hZS5rss?Xn>Vc!QRV*{#nC_en
> > 6@50g
> > > zVKc}m%KkiBa%Kt{QGrG>syls$f6@-
> > UE+Ri1de4jMS5)7SA)p|w1fwqa9J?pC#kfXe
> > >
> > zGxL@vL}J@>8?yRiHd`zdLL4I1D0c!8#&K9GN42A(py^jwrB9cRGct&$orzhT2;!W
> > U
> > >
> > zFfR@C;7Yd<N$aq3lY40;{xgnx$m>jpcgp*rllkD@(_Pi`@^5xz<3~fgiuUvMmtO!-
> > > zG@_JmlSGZTlwMjxkgjGKpTrDI<GM9TNySk!(_9<8ixLJ-fOl4;Jxe-
> > K_~6?SQ|fCA
> > >
> > z*E1W01uG`y8tZBT$%ZihW`T|#(O)VXN3Df2Vv6Y}gN)k{Lqi{RJTkfP^AqcmkHfp
> > F
> > > zGZ67BmA;S*tg0KL&I>z<z?M+HBmf=Y@D3o3@UQ>-
> > JQJE@y4|C7IZj3HX(Bu)fyKW4
> > > zM_Lmkd1?IK<~U-)bUB*haUKu4-
> > dY+nq$>gA`eTk+_~zY3uflwPv_xjVj~sG_Rm17j
> > > z!yD==(psSU;~lX5Eeo<UUX#XWbxQEc5$m_VHv<-
> > gC`E&MorI0!o88rPSJXA3VSq4J
> > >
> > zW;H2F4k)cZSl4}IWHQt(BebeK3Lg2YPDSNn;WRn5Z+zYE#()7sM==;A4t5VF6vUf
> > T
> > > z5#Nbe!Cs!XU6E>gQj+ky-
> > {@C6772nwu!48=I>ERODa#OzoOJI%F%nh}29ST4E3B{(
> > > z!Be@Pp{|$+i%1ePIs17uNjh1LQa7t+TJ~;tvm!lzBUU@Qtk!-
> > IOLF7X@!35lin4ES
> > > z$q5#7%y*~Dyzc-tsrB`-LA8RNHe{w;>-xn(E#n4-q*6GB-9d2Xq8+iaaIgcL$=X2U
> > >
> > zcX?*P$I?ZafVe1pRh)XApuO$7%#e8=$c645;9^~d?uQq2*|kT#QPHdAIX(fQX8K
> > nD
> > > zCf&BbL7v!-Oh*ez<X_bjaLgGJ)a|*ozS4@yfc;pPuxt$pvc0|T{2|O(@yGv8-
> > t%Ao
> > >
> > z(A(QKxtlrR`3+w9Tn22T5~6kRVKu9q={eu4?G|EZyZcH2dw2o7ypkWS$&rrWGJ
> > R-X
> > > zYRS2$b8c#yQ0^V%$-s+H-
> > j&OZo~7OFwssk_)$i;vp}qqU;Yd+16{VZ*<`yLu)0=?x
> > > z!iWZ=cLBcX1S=~eT~4wz$HN&nm*iRn%L1b-
> > y^{bgc&)ddW&TgNrHAuL9Gn>s7Tz}F
> > >
> > z+btRUDT}eU=)~&faeUd>cG=?hCic4iQ=i;ygmP?_c@7yHxTS>kEsut1SGJp9yz!w
> > U
> > > z1N?El)P3f9=N&a$L{-
> > pdtjgPjuX;~yQbbtecL0Z?=v$m>rjs|+>m|&cBEv*uaWV_`
> > > zt(Dxx=Z!+1V&_iRq9ZnOWVhhRmZXUp^cJmdw+<8-
> > oLRy<nXDAOF<0P<gqj`B63`4f
> > > zYueOWi3y&(O%PZXX71K;;_cxG3+GiX4ub2-
> > vVmRhZKXyB<G9}2B3UnCn#s+Rd-omV
> > > z#t3rBMY48UydL@618@g;@%uIgGS=+skt=2xm~kl+#w`1Bg62E-
> > VPjZ2ZedRXJ4)`m
> > > zQyrg))>f0D%8bF1;Q&eVV-
> > %;U3qox$b%4EDJ~^T77)y3lJZMe(Fr!H9gK2jC+)l!0
> > > z;U+!oA^V=JC|OKjuoxyO@DU==pE$#lZkMjuLYa4N8-
> > ?uyEKB>^7}M0iX##x5sV0>|
> > >
> > zZ%f8<2UyTC#1X&Y@Ae#F8C|WuR_l!s6J+hu)3t7_Bb3!^lvL|h)z+oUg73~=+Hq
> > %t
> > >
> > zzxax+s3$tU$fL3<^<cAX%8XBYWBSmJ;QeWWokbt!Q^;?F6i&r@7IX>)gm5baM
> > D=rm
> > >
> > zR!gARP?RN?S&k%wUL!e(eMn}!rZWnY<OMd8$`>!pGD^2c@fIMQ!+vev2pgBI=
> > }L{=
> > > zGI$P8+BnG?P*YWN7Cn{4;$?)a7;oqzJ8j5i3@BN@-
> > 2r&ZW5d^ftTcV^I~<nMZ|74r
> > >
> > z4Nz}%_Et$GmoxyYppA!$ZF6dEY~q>&v+u?7neSLgLF2r?Go+}6Na~w%x_5OD
> > MRP#y
> > > zx<vDz<VIHo4)mJMj}3YfHuik+J(QxC`AJArckW5fYjx`!9oYIQSnTLwYu-
> > SYR%yp#
> > > zx8+cP?mJo5X<kvB$w}ad3|81-
> > ;(|z={y3gw1@t+IRa0g%+$nz3=UG{5m*v~hhpK9)
> > > zS0|0Z_7qfdef;D^``z8BBewWOC1tVO_ce``s8#V4&ng$v89g}hO(cvYlS2ZT!nsjv
> > > z{(<>dC-
> > X`gy;m<Krvtltp0+*9=^k(i_A#?4@T4ZB_l(5b9P3aASm~B+2fBF@evzP~
> > > zyMi@-XmIp$F!<Bp8IACRTd=TW-_tCXg%KT#ZXujK-
> > nmcl<0)*EZEf?45YKDpTx0`w
> > > z8~yxw085D1veo42qdUL|@R8?(m^i`3SD4c@*ea-
> > B=Td=u1jBsNMQFQv880yl&b)}m
> > >
> > zI&H5IpmhACHRHVM9SLH}&!XoWHdoc=>6`WJua_!{D<#JR4Rlw?Rrl>NzJjaQB|
> > !+6
> > > zCg-
> > dmdU!yc=R*`GM@Ys9$<KMW!omJaq^|1BXh0WoZ~c*+kQVP#My{%lgyodT*a
> > ~AS
> > > z4F`*9+-&)9@uC>X0IfR!vjLM!iX1L!!-x)>1C<e}T92CqQIW8iZma$-
> > omU~(K8KxW
> > >
> > zh3Wyf6GNX4vv)FWhDB4+*sF&Xgu^55Y&#<ZYANJXUkQ#_LGy^w0Pp#_Qd1Vj
> > 6MWnn
> > > zx-
> > 8jP8E*|Af%h}glpO2}v5^$VmxGvK?^EX>g9kz?CrQMUW`d$GAoEY=%SWK#EvZ
> > 7M
> > > zCIBm(6h<-
> > gZOO9)qXwr50!%Rnx$dP7cyGNod@G+iI`x580UhbpfS$svDicPk^61h|
> > > zVtFY)!p60(YSPS>-
> > Sp%5F+t&nU%T2}W_qC@<zCHFE}+aZE7$fWY*PAvB5EwKyX|OX
> > >
> > zZT6!*zwU#Wim8fHQ2hl%bQ=3fJs`x7TnsrXBTTIdL~9<}#CSPR*qCX<2NGiG5X
> > @ok
> > > zKxsTpk!%Q3Kg2jUpy-
> > O9;(KTdbgDJ6;scGYaF)0|5j)KC>kVVZm@tsPT$fZ|sC%|^
> > > zEp3;|{SJ9aFWMBU4t)pzYQw+Ou~%#(UI^-
> > R_g4<b()Ng$eE#<G1_J=Tcu`CcLw=|i
> > > z%(W()+_Z3V3}4pYWDZUOqS;YAc#u4j-
> > N=95v2ZWoI@EAQeh3W{br!gG3T)y_!&<V{
> > >
> > zvK=34k4d~*!Ul&RbhX7?q+6>NeVKlx<C+46{hpgGe_7%i?Itd5ESh1jz65TYU<B)6
> > >
> > zT(gY^e<qlOg<h|JRBYp%qRMT_7|P>h|JkMrxdWKsYr{6+z>b9$uVZ)A?l9u5Cw(
> > =l
> > >
> > zv!gB~*kX;A#1N8Cj4fPR!MLEUwXGm%r4>Ad`r*4Vt)%f`C2ewpa|`$M5%B`BM
> > UZ=2
> > > z!-A=K?rk|78$~${rNUm}Z3H(kw1*-*fEAZr!IN2f{X*~K6>^$T)|@?!FIt||O3~Rc
> > >
> > zhA~UA1c=ELq!ZGDoet9`@h%;Ej_FmkN(~8r7Jh+t84f&)Korw>l60WBT&6aT@d
> > -v?
> > >
> > zm2;jmw!>$N0vgjF7mNsl_nDja8A@YW8@!wYl~e4q;8#l<QsMfp{}Z#xX$m(J|JS
> > 5U
> > > z9NrwVzrIEkC^l8@BmPxZ*HgE3F7n5-
> > Ncj!BoI_AyJsD~|g=`+k!oi7?aoWJH>kCbY
> > >
> > zQt*{>`kIUDupw3OJ)m&1U$!7ZNBJGdfC(e{^h1bs2hWa=ACI4@?GrNOP@&>t
> > S}U!k
> > > zECP-JIm-
> > w7Q<wFa`47u(Ng%${2+TsSB3DJjQaEnpX^G#QC`x_$O#30(=IHDJKU{*E
> > >
> > znq2D!Ym%bl!@bUtk=L=Jz{iXJS8YqX_HZ>~epKAz;|Ug{j=46gw#fV9jm#=H2vBa
> > F
> > >
> > zqc{VeZ9aJ*O|m(R$qV~<UD$Ra(Af(o@p*x@kC3nQm~)`gF07H6Fvnuk@kGM
> > rT~U&k
> > > z63%C~>q0HWFP-P-
> > jXOK}kK%AvQFuPwVJ|_q1I**~ISx@6mv)jFu@9ScjpGp;_667o
> > > z830i@PHE!H*EWW9DXClZ>WyakQp5)Cd5K$mk8<r%EMzSPO1~jUAY-
> > R~K*W3(sPjhD
> > > zVxxqqw7uKqcjNqR2LJImlNHHtF`z49(d37vOCS8{fQJ5OB_6b&I7-
> > v>eAGhq3z#f1
> > >
> > zbzEj}>%N~(@nsTk>Um>1<za^9C_g)2z5|Hf0aC&7O(9op_MM}qF70B#F>~y!r6
> > <Eu
> > >
> > zFJ)uQ+NV9~XYboORJ?;};8GLFN8p5X3yu=2jc?@ut%6*~108P?KmgK4(KXNvKy*
> > pL
> > > z!KVf>JP@j!sH8hKV);=S15yWfJ;N=NdgwugYx!YmrXm{I%&fK#TU~qH|A#I-
> > +EImk
> > > zpotaM0qAm*kA9VSUPJliV6>b$R`a29w=RLI$OA5((38Q_U-
> > gp8_RqXAGDr*$6Yc<C
> > >
> > z!A1waJ_hCOLq4C$cd|81&4q@?@0Us`sWP_DQP8j6WB&i42!RWAzfG%<SZBu
> > F&jbsw
> > >
> > zcV=sC<2*U)Zvx6&@HPHB7N9WZj^zAA#F%FC(v2MfoYnCX0cE0ops1{ry$ggR6
> > NA(M
> > >
> > z2^+ABiz4||_DBnt_g`NOAgys$^T??YrTCx*9#P7gsj_0wsgw%}Xqr<N{rdWWS!Z
> > g-
> > >
> > z4H3qP8xIrMG3{_HBo`K3$qL!mbiXxmITj}Q)l(geS7|Y%c^d&SIuIL<81BIiw@DA
> > 8
> > > z(|T*1(_W3_%-
> > s1!Tv(Zw;o%;NU=NOK?F+(uv~UO5Jt(>ZsDe6<Q8=2Ov_9_>gm+$F
> > >
> > za=PD_ejXn3u=GHz!=3g65%;*%m5TnFjrTr2{7yPIC{>vXfpr&Gg{;#;sWSJ(HnZR^
> > >
> > zP%n=w&xEgrDM*LrnO*hLBj!dEc|0|899IAuaAz?2JI#nH^vG?g7Q7VS0!wCo<Z
> > O@^
> > > z0KlkE0xHh-H6e^BOp;Ma3_*%o2XMn!Ke~iklAM@k2SzZC`s>rM-
> > 2nW4G!i@hv}9Ct
> > > ztTN_#K~bl5i+0oZfV#D4EkU_y8{zv-
> > hX`i~&TkhTx_KAAlZMXguacb$Fjxx~I@r=Z
> > >
> > z!;NFfic&3^+z5R!85}UuWhO;Z!ZZL394B?me49=eqOuTdHBR9N^pZ}Io)F9_a&P}
> > e
> > >
> > zgn0*m<z+k1`T1D%?8}u2lQx2_4pWcD?*${(tPIM4x*LezJmObkESuVMX6#Av2{
> > @)q
> > >
> > z;%=G&^S5WtA0KNPuIXV?5iorWd9CAqQc9CGggH)_z|f}T&hTT}HJByBTw4uV&
> > jUGO
> > >
> > zfaCO#+6fF2N1bE*vTX<ntB`4Z$oawb9h#`$Qkhrb`F#0x2$B;|F}n}#0G7yKJ)3G~
> > >
> > zGmb;+#!8?Nu^=B8B}~6_koDD8@oQ0;8LxY8$1bzP8AJ7)q+0q1`mE7ui}P`G@`
> > CKS
> > >
> > zAGrqxc(``};NHt^BcAj<@?US^gDtZwO|%L454il+QUjo2Eadr{=wMYx3%+4fL<M
> > 8r
> > > zCgthu_mBMfm0Q^Ou~pM>xd%f#Q$S4T0w{R^-
> > Y(1I8*G={I$F4+ZH`)EHImR;^vulo
> > >
> > zqEsVwKrT_obLqcU^i)YhN2z>b>5DYGpEo^I_fD@eR5KjES*2j(i^*^&SAK0jogZL
> > d
> > > zJoBPN*F*ocb9&zRk?eQZ`|ljO8R|Sr@l&A2#1FN4$?-
> > j*0040pa7_;kWC_KwXa5Q=
> > > z@Jl<Qi2U@Wd4o7@R+h}pWQh7Yf;)%&B@-7nJ`-
> > pAtx4aT(+#=;D6HH83+wW*((szd
> > > ze*aj?o#`ShhNSL$KGT)e?==07c$=nVR+_2@j7p|_53UWk4-
> > p<q_m!^m9KMJoar}XP
> > > z@k8^U2UL?(EBk)#6yEAQ9WzT6y-e+D=3KHcJ4s13@F)e80xE{-
> > LyIf+zYrt;J=3($
> > > zy=b|?FcP<^U*a1C4!G9G8Z`A<(0`-
> > 5rbNgd!!PF>3VpnFG+GFsh#+<(#y@RjrT!NG
> > > zp)J9QOI}6gdzgjC&|T5<0AA*gpSSj)kj608I{nqe!>FkP(W0L0QjS{FPf<*qrf95|
> > >
> > z_3?R<@yIi0yQi;SnprC>bm|r@Hait6ce$t0sY6q%CU(YfdKEX1ndOgp&H>?!J+u
> > Tv
> > > z_T$ns^dNh;hR}ivc2`(HlrR%NR}YWhuXxS0Cw20jCM<E;@7&)<6E?4-
> > 2r%#G9248&
> > >
> > z#6snQt3jV<3;8Q9F3vYgB1LC%%ZPn>#)=Zr%GCX>A`>>euKfT$31(FegZ>YC))nll
> > > zr7O;hktJmggtyk>XEX`D$=&X6I>LpwNFMPLGb`G#{)Z?&L+Dfq#-
> > WXYFemoj*{|FR
> > > zMK>|)y<Hq8Z!o5pqA0FvVtx%x9oUp-@-IL<YZ|4GW-gvK2CXJjg~uP4Fm%B-
> > 0wOEy
> > > z>)o*On|^rNdNqi6#-ylP;?MR%u}1`}NOh`nx9G^GfUxsGYrkSgoS*7xt$dJ-
> > bmG`1
> > >
> > zq9e&siyn=8E`=eRJG>G$8U>^t54w<Ui>jz>eUS9XZA3_8ueBvjk&Ce;0@%PgzU!-
> > T
> > > zawecNLK5|`Rw}A9eW5D8-
> > SMIPpk6%f0G_g*2NN~bGLK4GxM%KLEp3cipF)r%cziR-
> > > z?UR<B-
> > y@PA%#hZ@A2C_#4_!xqUu`zx(HRI2ad)pAN1Y+fGTf7M52ef0<c;ddaZhzT
> > >
> > zC_Nho>dXp}tMw&EkEI(K?akLs4D<?eUOtNX+rmaoFky3z#;CL{D$Jp<#aTH)9w
> > hMF
> > >
> > z;t@rqr(q}>k$5;MgM#vFBOM(KP}+30(<^IfD|;N$Hf|BeE)O=ovxGX=<<B$AZ}a;
> > V
> > > z$Rib^)uXhoC;=+7-e-sx3|KJt_9b@ZCSL^Itwf1LXy2Y-tvxli6`j+7j0P8v(r8DK
> > > zv5C^AeOHat^{btzSvH)_T-UyHP3=R5`=uffP`~Y4LlViPGn@0nS46(lLl})yAAUYn
> > > z@{5}YBdtMfl2&#vHI9=-
> > fYsgieqAdo`od~$n%ifM1<v=21h=~xCNB*e4U&l?5(^my
> > > zFsgM-jsErSWEYukS^0s${WHgJ)r9>Pdrr%`#S#>zw#pkeJSqxl<3}9YZ!+bPL018-
> > > zL|CSXw=Jxd5|Jdv$2^^QEnG;igadkzVrjG{IsPX<y6t*y%clEIIPN1-s<Qm+b>YoB
> > >
> > zfK&XpJgYP(y?wH}QBYiTwPEg@vYnUI+3|6iONY#|7#;n%?^~~e3KQ@Vm(03(%
> > x{&`
> > > z?JlMf;H&F#-^{UKR{l#LcCA`Ui|P7r>9f6Dgi&*<TD;JAb;J2(uHil|C?pWGgiRTb
> > > ze%K2mqAW1b`G|haSJ9L;HgFoN`KkVT`~m(nT?j;nbDKeiF6-
> > ;S@mRVGNqQv1JATd(
> > > zk|y!Q7bMIPOXfH|e%4qG7lty)bmsKdc4~{CFkU`QoZ1(g>I&)M-
> > n`$WKrOne+1*Iy
> > > z;;on-O@4eBKt|r*U5j$PL{sy}X;8agm%wWJxJLJ3H8H2w9xL}+lAx5+`^J-~*;PlD
> > >
> > zNEBK$y?ueKFmDfMaRHk75QLT0UkDYe`a4bYajq@*yEZMA>7vy15*(sgpxX9xk
> > S<_b
> > > zli3orj;~h#tF-9v&gQ8OqxW6T-}sAa$hxxEK+qQ{^ikk0P6<&7J5_;)$Crkr$hJMw
> > > zmW9b{54MgeThpmSd|T^BNAFAVP;&)5ME!RFY;V}-
> > 76P%Ziwdh5qHZcQ$ifuzLe|Eq
> > > z4o+(j8-K8KU`}`H9o%%l_{ft)VHlHXa*k7kJvw&G<LG-
> > dGM13zGiyy)gypmOYg5(j
> > > zdFLMu&UsSfb|TOJ^g`<^RV2aPVlrA?^8xn!4dh2;6<4F+Mhm%={$r|k;4|rQ-
> > vCM8
> > >
> > zo^s?#hlC^jFnEtFMrq(#Wkn%;XG_OpoKa;T7V%d@{JvxQSAYHAPp~h3JDPsF*K
> > E<-
> > >
> > zLY&zbZ~B|@;pUVb0~$u7rh30NfgB#!D4gd5IwlHGpeh|$+D_Po=KASOQ~A$;R
> > BrYG
> > > zrH;Ni8|ZS)y=)#*k&(Jz^kl1Pp^^$9zH(09rr)<|%9_U<sPsL#ojdt_;*{7_yU?$#
> > > zHsi+rhU7NPo2-T*0<wIsr~lswS&aw-o4l-
> > |F{svG2NhZV*siLZEK1JdNzm|?qS`CD
> > >
> > zHel+6UA6W4DtDhN1!$IkY(3f)+|{w^bZ<6eK)IVKAn~U0ra4qL4Zjdw1*o;IGxz@
> > I
> > > zE1+&2B8Z8)yvlVG$SAKk(vXONX(+~^-1FXzG0GpvQOe-
> > U6qnNFq;jyCV+yTeeIe?M
> > >
> > zF=ax^az!;(Xu=y1W4lajzkVj4Jw0rrkhO|zT`pTp)T0PWUl7}o804c_)wWNu>M)(<
> > >
> > zRfP!DM$#G8^^nzII^#Y91Lq)%_wBs@>jOjPYF}0w^Nz~Y{&Y$4YU(#qe7f+oINR
> > %0
> > > zSneZe5EyK0r_Bkn`6XthG59f|Xo6i-
> > FRL}URYdisz<{CaM6zg|r!KO?%wM2;ud7(O
> > >
> > z`aPW0(IzOpA8gG_a9lqzr&*EUhPTNSXva#4rR?$b4p1fe;=IM@q(aB=Z!vd|icT
> > m}
> > > zGpPUE{#SsKM;tGA5@~9og4;6@QNhN;_xvtc09-
> > i{RkcWm=QxV#4=QOo$!Oo&57%&p
> > >
> > z;5H6xtC#a6@RIH0BwLOrK<kt47gWVC$?4D`N^VkJ9hnEFR?h+(XG<oVhLeH)yv
> > t&O
> > > zVhP%YJ>qd!{#3X-
> > ES^d2SW*WfLq3MSUMYN@0anc&jB{JhPy4^7n#vy}enEjqrAEFf
> > >
> > z@2o#g`S$=uhs@SZJ4+CCl~9$CS9)YiiBZvUdHu?fR|B$d!jfs957AjP*l4u1Y43<m
> > >
> > zts;j9&7Sr%wK)}cqIR}m87;s8E6l#@u=eLem3~gSwJGQm@6g$9IrZTBv5fVlb(^r
> > v
> > >
> > zbfa98pghse(AQ1jWwfsgSo@fj(bhtD5970DT`wo{?1cW51NqGhA(L5L*XB}}6D8
> > b_
> > >
> > z|Ey&EaWnSu0)OoHzOeFb^KHJ2@Q63ij7Hh3FaeR8MX5^$752g}VhlYLP$>0Jn
> > Dq14
> > >
> > z*J`h~t*11n9~e(RHlxPXC?WpP3H56~Q)@kyDK$hEd_V&0I4H=5%>9Dx(nv}Aa{
> > _zG
> > > z-
> > ge40o9{8bjAT`l*?b9TT<mmOqzLjP6*7|GTs4f$PAYy_Sob(`rl6~XS*MW2mxUJ%
> > > zRDL;<#P}IEu9TkKF*}*FJJCMtL?GirpZDi26FrHl8@Rq8Km|4meIi42QhTLtxjLeT
> > >
> > zbYtaGJthq(k@oyY@Djp_N9nh8#y`Ybe!^BB_s0I^7_4$#qDn!xhP(2i$JV(qITOp
> > 9
> > > zqiioJFug}7!O_NMq#pugIX;83J?9^g%5->9J0*p`IQ6=jC&wtovz|OC2p^U-<2a};
> > > z@A|y{W&-
> > ImypnJAD=1qL_$m>JR{vqs$Y>JCwI3wdBm852pI(`|Zt3YMpw1pVYh5-`
> > > z85W<vB~$-
> > U<WG>COBDIVZS+QOO}q$(TQ#Nzn+;_qKSjuf7Lql~0=#qZ@edc3Gqc6w
> > >
> > zuDOQuCqf!yLs3jl)SkQ_Ib>6(x83F)+CJVOU}ZPflTLdUhY58TyUP5Jnph|V8JT&$
> > > z0i}|KN97gmPgsbqeyl>!|HIdR%nl1D7z;7re_vb?e}4Epe!tJsl-+wy=_(ZkJg<DT
> > >
> > zEvEL4A@nTNj`u2D%c+U6GRm7sMUgfrmEU$uppRs#)bXY)X6JQIyX*1oY*GW}
> > k<IF|
> > > zaHNTenY}%}0>Ve_-3}%b8Sv`foIqQrrT`Jps((eiB8}y(b9QWd`zJ*gt7u_b3)YqS
> > > z?rft8TYK|738T20zTZ3BgyQdj<yF!!-+<;)C1L4!1c_^;4;S94pF!2d`qPc;WZ|Gm
> > >
> > z$=p?mdTXZi?WlOrNz?}Hn0kO+BcXq!w&!+3;C?@ulaBw^a$IrbvICn|4oZOjp7J
> > @Q
> > > z6PsD=TOH?YVJq7Ch;FwGx#V1npTHz!^HV!(nfI})F4E_bl>$(?srMvD2piEk-D}A%
> > > z<j~7KBcje7v9yRgz`2d^!wHF@gh+a`g5J?Brxf-zvx0$7o%Pb2kw-
> > cp4adkG{%$o&
> > >
> > z%dt$oANAhhUA5or11|lcp*|;ww*x8)3VP^z*kA6OpErN=0m))ADYTF@`CT)6la
> > 8{?
> > > z+f|ZWf991XRNc$TvQ|@weV=#ElM<i8=Qsn6Rr;}-
> > n7EUSp2iVM<FUbMZw_i`22q@?
> > >
> > zs6kr|WS5Gg3(NEg_h1YzK}k#5M~9UYqs%eZ=H<yJ9V4^WrSohg!wRa?csHNr8
> > 9x&m
> > >
> > z{(ZLpi2xlAu@RCsm(4Sx`08)mNv&L8r%^9&=KXXiq!o0uc3c)s_3#dasg&~qSB{b
> > V
> > > z8g?eJR!y(dC;=%y-V>f<o<nsoO6GqeD%xHE#XYZHRHI(j7p+CCP-
> > Ui*0n$KF#F=ub
> > >
> > zCA%k+Ua0Ux^ZzjSk7Pm<?^iY@oAz8#h_IvYeFI$QirdveGUY0{RKDaglnu=1pe(
> > wB
> > > z*40*Kn2|Lvni|*l96DD3|Fz|IIHPh>T($*^maO<uC)t6MZ+}Z|-}}*ULjzg&Ifvb)
> > >
> > zLrpme#6GUjiz)KUncK_9RK5TE3Hpgo)b5S<asRor(EVPDhSB*eVcNWZeHDMh2
> > Hc(A
> > >
> > z^P%@%9RB)C_C;*~yZ4HspGFI0Lk$XKdV!fb#%D{fU>^&ro^xH*#G(uFur6owz
> > MXtg
> > > zH^0Zh(t-
> > EmiaBl>`Tcls+HJnZoyQ30vFByCb0O*`%L)nX5D4}#VfMp)J~NWKw40M$
> > > z46D6ToGO~*lIx|Qb75H3?+#X*QJ4HgOgj?bLnD}%eB&%k9(+&PNM-
> > 6vy1)%G5g&Xm
> > >
> > zBX`D*Z}!UP+%JV68h}7!&Cyuz&u9V}7g4K{@atIECE=zaGy5se=l;E2KAxQQ7dY`s
> > > zr3-
> > FihZjNNS)Jd^rnQehLso_+hXq2zxeW8)=t8qkWCCMC<+zh+vXF5M*tI8tPmHQp
> > >
> > zcIF<>JxmNil^W1!9({@=N~PdvE&Wi)<0FQR5(FAm=R)N;VG|Ne61+HdUTm1sjn
> > }z{
> > >
> > z8d8p$uq*YdNAFH_9Oyf<DX1=yz4b+kSJ%<hu`MRZnK2M|$Wjau(<cw;r1U#JF
> > <VIN
> > > z;&6741o<3%PP@Ksaa4OB3)64J7cnWLei+@k8LxE27ubX-
> > qS4?UH?hja^lyZXxwA;|
> > > lp0r(+`K^)Y&AL5T(>;a;tp795|91lNzXsubc7WVX{~rvVe^USe
> > >
> > > literal 0
> > > HcmV?d00001
> > >
> > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > new file mode 100644
> > > index 0000000000..5ef93461ee
> > > --- /dev/null
> > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > @@ -0,0 +1,52 @@
> > > +## @file
> > >
> > > +#  The default logo bitmap picture shown on setup screen.
> > >
> > > +#
> > >
> > > +#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > > +#
> > >
> > > +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > +#
> > >
> > > +#
> > >
> > > +##
> > >
> > > +
> > >
> > > +[Defines]
> > >
> > > +  INF_VERSION                    = 0x00010005
> > >
> > > +  BASE_NAME                      = LogoDxe
> > >
> > > +  FILE_GUID                      = 76ED6631-44FE-4ED2-8B5D-1B5355BB25E8
> > >
> > > +  MODULE_TYPE                    = DXE_DRIVER
> > >
> > > +  VERSION_STRING                 = 1.0
> > >
> > > +
> > >
> > > +  ENTRY_POINT                    = InitializeLogo
> > >
> > > +#
> > >
> > > +#  This flag specifies whether HII resource section is generated into PE
> > image.
> > >
> > > +#
> > >
> > > +  UEFI_HII_RESOURCE_SECTION      = TRUE
> > >
> > > +
> > >
> > > +#
> > >
> > > +# The following information is for reference only and not required by the
> > build tools.
> > >
> > > +#
> > >
> > > +#  VALID_ARCHITECTURES           = IA32 X64
> > >
> > > +#
> > >
> > > +
> > >
> > > +[Sources]
> > >
> > > +  Logo.bmp
> > >
> > > +  Logo.c
> > >
> > > +  Logo.idf
> > >
> > > +
> > >
> > > +[Packages]
> > >
> > > +  MdePkg/MdePkg.dec
> > >
> > > +  MdeModulePkg/MdeModulePkg.dec
> > >
> > > +
> > >
> > > +[LibraryClasses]
> > >
> > > +  UefiBootServicesTableLib
> > >
> > > +  UefiDriverEntryPoint
> > >
> > > +  DebugLib
> > >
> > > +
> > >
> > > +[Protocols]
> > >
> > > +  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
> > >
> > > +  gEfiHiiImageExProtocolGuid         ## CONSUMES
> > >
> > > +  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
> > >
> > > +  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
> > >
> > > +
> > >
> > > +[Depex]
> > >
> > > +  gEfiHiiDatabaseProtocolGuid AND
> > >
> > > +  gEfiHiiImageExProtocolGuid
> > >
> > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > > new file mode 100644
> > > index 0000000000..1418eb2137
> > > --- /dev/null
> > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > > @@ -0,0 +1,31 @@
> > > +## @file
> > >
> > > +# This package provides advanced feature functionality for LOGO.
> > >
> > > +# This package should only depend on EDK II Core packages.
> > >
> > > +#
> > >
> > > +# The DEC files are used by the utilities that parse DSC and
> > >
> > > +# INF files to generate AutoGen.c and AutoGen.h files
> > >
> > > +# for the build infrastructure.
> > >
> > > +#
> > >
> > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > > +#
> > >
> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > +#
> > >
> > > +##
> > >
> > > +
> > >
> > > +[Defines]
> > >
> > > +  DEC_SPECIFICATION = 0x00010017
> > >
> > > +  PACKAGE_NAME      = LogoFeaturePkg
> > >
> > > +  PACKAGE_GUID      = A1A87B33-C3E3-497B-978F-2FF7813FEB21
> > >
> > > +  PACKAGE_VERSION   = 0.1
> > >
> > > +
> > >
> > > +[Includes]
> > >
> > > +  Include
> > >
> > > +
> > >
> > > +[LibraryClasses]
> > >
> > > +
> > >
> > > +[Guids]
> > >
> > > +  gLogoFeaturePkgTokenSpaceGuid  =  {0x567199de, 0xb448, 0x4aa0, {0x99,
> > 0x4e, 0xd5, 0xd6, 0x82, 0x59, 0x91, 0x17}}
> > >
> > > +
> > >
> > > +[PcdsFeatureFlag]
> > >
> > > +
> > gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable|FALSE|BOOLEAN|0
> > xA0000001
> > >
> > > +
> > gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable|FALSE|BOOLEAN|0xA00000
> > 02
> > >
> > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > > new file mode 100644
> > > index 0000000000..717e074c69
> > > --- /dev/null
> > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > > @@ -0,0 +1,37 @@
> > > +## @file
> > >
> > > +# This package provides advanced feature functionality for LOGO.
> > >
> > > +# This package should only depend on EDK II Core packages.
> > >
> > > +#
> > >
> > > +# The DEC files are used by the utilities that parse DSC and
> > >
> > > +# INF files to generate AutoGen.c and AutoGen.h files
> > >
> > > +# for the build infrastructure.
> > >
> > > +#
> > >
> > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > >
> > > +#
> > >
> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > +#
> > >
> > > +##
> > >
> > > +
> > >
> > > +[Defines]
> > >
> > > +  PLATFORM_NAME                  = LogoFeaturePkg
> > >
> > > +  PLATFORM_GUID                  = 0618AB19-9507-4D6A-A0D7-1F43D74736CF
> > >
> > > +  PLATFORM_VERSION               = 0.1
> > >
> > > +  DSC_SPECIFICATION              = 0x00010005
> > >
> > > +  OUTPUT_DIRECTORY               = Build/$(PLATFORM_NAME)
> > >
> > > +  SUPPORTED_ARCHITECTURES        = IA32|X64
> > >
> > > +  BUILD_TARGETS                  = DEBUG|RELEASE|NOOPT
> > >
> > > +  SKUID_IDENTIFIER               = DEFAULT
> > >
> > > +
> > >
> > > +[LibraryClasses]
> > >
> > > +  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> > >
> > > +
> > BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRe
> > pStr.inf
> > >
> > > +  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> > >
> > > +
> > UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo
> > tServicesTableLib.inf
> > >
> > > +
> > UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryP
> > oint.inf
> > >
> > > +
> > >
> > > +[LibraryClasses.common.DXE_DRIVER]
> > >
> > > +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
> > >
> > > +
> > >
> > > +[Components]
> > >
> > > +  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > >
> > > +  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > >
> > > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > > new file mode 100644
> > > index 0000000000..092a055a2c
> > > --- /dev/null
> > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > > @@ -0,0 +1,129 @@
> > > +# Overview
> > >
> > > +* **Feature Name:** Logo
> > >
> > > +* **PI Phase(s) Supported:** DXE
> > >
> > > +* **SMM Required?** No
> > >
> > > +
> > >
> > > +## Purpose
> > >
> > > +This feature provides the Logo image and driver that produces
> > EDKII_PLATFORM_LOGO_PROTOCOL:
> > >
> > > +
> > >
> > > +1. LogoDxe.inf includes a BMP logo in the EFI file, the driver provides the
> > image via EDKII_PLATFORM_LOGO_PROTOCOL.
> > >
> > > +2. JpegLogoDxe.inf includes a JPEG logo in the EFI file, the driver uses
> > EFI_HII_IMAGE_DECODER_PROTOCOL to decode the
> > > JPEG file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.
> > >
> > > +
> > >
> > > +# High-Level Theory of Operation
> > >
> > > +
> > >
> > > +The driver produces a EDKII_PLATFORM_LOGO_PROTOCOL to provide a
> > logo picture shown on setup screen.
> > >
> > > +
> > >
> > > +The Logo file is built in HII package list as EFI resource, the driver uses
> > EFI_HII_DATABASE_PROTOCOL
> > >
> > > +to the publish HII package list to HII Database and get images via
> > EFI_HII_IMAGE_EX_PROTOCOL.
> > >
> > > +
> > >
> > > +## Firmware Volumes
> > >
> > > +
> > >
> > > +* PostMemory
> > >
> > > +
> > >
> > > +## Modules
> > >
> > > +
> > >
> > > +A bulleted list of the modules that make up the feature.
> > >
> > > +
> > >
> > > +* LogoDxe
> > >
> > > +* JpegLogoDxe
> > >
> > > +
> > >
> > > +## LogoDxe
> > >
> > > +
> > >
> > > +This driver provides a bitmap image via
> > EDKII_PLATFORM_LOGO_PROTOCOL.
> > >
> > > +
> > >
> > > +## JpegLogoDxe
> > >
> > > +
> > >
> > > +This driver uses EFI_HII_IMAGE_DECODER_PROTOCOL to decode the jpeg
> > data and provide a bitmap image via
> > >
> > > +EDKII_PLATFORM_LOGO_PROTOCOL.
> > >
> > > +
> > >
> > > +## Key Functions
> > >
> > > +
> > >
> > > +* This feature produces a EDKII_PLATFORM_LOGO_PROTOCOL which
> > could be used by consumer such as
> > > Edk2\MdeModulePkg\Library\BootLogoLib.
> > >
> > > +
> > >
> > > +## Configuration
> > >
> > > +
> > >
> > > +* gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> > >
> > > +  TRUE: Enable logo feature
> > >
> > > +  FALSE: Disable logo feature
> > >
> > > +* gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable
> > >
> > > +  TRUE: Use jpeg logo
> > >
> > > +  FALSE: Use bitmap logo
> > >
> > > +
> > >
> > > +## Data Flows
> > >
> > > +
> > >
> > > +Architecturally defined data structures and flows for the feature.
> > >
> > > +
> > >
> > > +### Data flows of LogoDxe
> > >
> > > +
> > >
> > > +```txt
> > >
> > > +| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|
> > >
> > > +------------    ------------------    ----------------
> > >
> > > +      |                 |                     |
> > >
> > > +      |                 |--bitmap image data->|
> > >
> > > +      |<---bitmap data--|<-return bitmap data-|
> > >
> > > +```
> > >
> > > +
> > >
> > > +### Data flows of JpegLogoDxe
> > >
> > > +
> > >
> > > +```txt
> > >
> > > +| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|    |
> > EFI_HII_IMAGE_DECODER_PROTOCOL |
> > >
> > > +------------    ------------------    ----------------    ----------------------------------
> > >
> > > +      |                 |                     |                            |
> > >
> > > +      |                 |---Jpeg Image data-->|---------decode Jpeg------->|
> > >
> > > +      |<---bitmap data--|<-return bitmap data-|<-----return bitmap data----|
> > >
> > > +```
> > >
> > > +
> > >
> > > +## Control Flows
> > >
> > > +
> > >
> > > +Consumer gets image from the logo driver via
> > EDKII_PLATFORM_LOGO_PROTOCOL.
> > >
> > > +
> > >
> > > +## Build Flows
> > >
> > > +
> > >
> > > +No any special build flows is needed.
> > >
> > > +
> > >
> > > +## Test Point Results
> > >
> > > +
> > >
> > > +Not available.
> > >
> > > +
> > >
> > > +## Functional Exit Criteria
> > >
> > > +
> > >
> > > +* Check wether EDKII_PLATFORM_LOGO_PROTOCOL->GetImage() return a
> > default Intel logo.
> > >
> > > +* If using jpeg logo, a dex driver which produces
> > EFI_HII_IMAGE_DECODER_PROTOCOL(name is
> > >
> > > +gEfiHiiImageDecoderNameJpegGuid) is necessary, it is used to decode
> > Jpeg data.
> > >
> > > +
> > >
> > > +## Feature Enabling Checklist
> > >
> > > +
> > >
> > > +### Option 1
> > >
> > > +
> > >
> > > +* Include AdvancedFeatures.dsc in platform dsc file, and use pcd to
> > enable the feature.
> > >
> > > +
> > >
> > > +```dsc
> > >
> > > +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> > |TRUE
> > >
> > > +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
> > >
> > > +  !include Include/AdvancedFeatures.dsc
> > >
> > > +```
> > >
> > > +
> > >
> > > +* Include PreMemory.fdf and inPostMemory.fdf in platform fdf file
> > >
> > > +
> > >
> > > +```fdf
> > >
> > > +!include Include/PreMemory.fdf
> > >
> > > +!include Include/PostMemory.fdf
> > >
> > > +```
> > >
> > > +
> > >
> > > +### Option 2
> > >
> > > +
> > >
> > > +* To use bitmap logo, include
> > "UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform dsc file,
> > and include
> > >
> > > +"INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform fdf
> > file.
> > >
> > > +
> > >
> > > +* To use jpeg logo, include
> > "UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in platform dsc
> > file, and include
> > >
> > > +"INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in
> > platform fdf file.
> > >
> > > +
> > >
> > > +## Performance Impact
> > >
> > > +
> > >
> > > +* LogoDxe
> > >
> > > +  * EFI size: 180 KB
> > >
> > > +  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage(): about
> > 18 milliseconds
> > >
> > > +
> > >
> > > +* JpegLogoDxe
> > >
> > > +  * EFI size: 13.6 KB
> > >
> > > +  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage(): about
> > 80 milliseconds
> > >
> > > --
> > > 2.24.0.windows.2
> > >
> > >
> > > -=-=-=-=-=-=
> > > Groups.io Links: You receive all messages sent to this group.
> > >
> > > View/Reply Online (#56238):
> > https://edk2.groups.io/g/devel/message/56238
> > > Mute This Topic: https://groups.io/mt/72533665/1712937
> > > Group Owner: devel+owner@edk2.groups.io
> > > Unsubscribe: https://edk2.groups.io/g/devel/unsub  [ray.ni@intel.com]
> > > -=-=-=-=-=-=


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#56256): https://edk2.groups.io/g/devel/message/56256
Mute This Topic: https://groups.io/mt/72533665/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers
Posted by Heng Luo 4 years, 1 month ago
Hi Ray,
Pass build with GCC in ubuntu after adding "~/code/edk2-platforms/Features/Intel/UserInterface" in PACKAGES_PATH.

Best Regards
Heng

> -----Original Message-----
> From: Ni, Ray <ray.ni@intel.com>
> Sent: Wednesday, March 25, 2020 3:17 PM
> To: Luo, Heng <heng.luo@intel.com>; devel@edk2.groups.io
> Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming <liming.gao@intel.com>;
> Dong, Eric <eric.dong@intel.com>
> Subject: RE: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to
> provide logo images and drivers
> 
> What is PACKAGES_PATH env variable set to?
> 
> > -----Original Message-----
> > From: Luo, Heng <heng.luo@intel.com>
> > Sent: Wednesday, March 25, 2020 3:01 PM
> > To: Ni, Ray <ray.ni@intel.com>; devel@edk2.groups.io
> > Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming
> <liming.gao@intel.com>; Dong, Eric <eric.dong@intel.com>
> > Subject: RE: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to
> provide logo images and drivers
> >
> > Hi Ray,
> > It fails to build with GCC in ubuntu if removing the <feature-domain> prefix
> from all paths insideDSC/FDF/INF.
> > No problem in windows
> >
> > Active Platform          = /home/ilabuser/code/hengluo/edk2-
> >
> platforms/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> >
> >
> > build.py...
> > /home/ilabuser/code/hengluo/edk2-
> platforms/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> (36): error
> > 000E: File/directory not found in workspace
> >         LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf is not found in packages
> path:
> >         /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Platform/Intel
> >         /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Silicon/Intel
> >         /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Features/Intel
> >
> >
> > - Failed -
> > Build end time: 14:57:21, Mar.25 2020
> > Build total time: 00:00:00
> >
> > Best Regards
> > Heng
> >
> > > -----Original Message-----
> > > From: Ni, Ray <ray.ni@intel.com>
> > > Sent: Wednesday, March 25, 2020 11:53 AM
> > > To: devel@edk2.groups.io; Luo, Heng <heng.luo@intel.com>
> > > Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming
> <liming.gao@intel.com>;
> > > Dong, Eric <eric.dong@intel.com>
> > > Subject: RE: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg
> to
> > > provide logo images and drivers
> > >
> > > Heng,
> > > Can you please remove the <feature-domain> prefix from all paths inside
> > > DSC/FDF/INF?
> > >
> > > We expect PACKAGES_PATH is set to include "edk2-
> platforms/Features/Intel"
> > > and all sub folders inside "edk2-platforms/Features/Intel/".
> > >
> > > Thanks,
> > > Ray
> > >
> > >
> > > > -----Original Message-----
> > > > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
> Heng
> > > Luo
> > > > Sent: Wednesday, March 25, 2020 10:44 AM
> > > > To: devel@edk2.groups.io
> > > > Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming
> > > <liming.gao@intel.com>; Dong, Eric <eric.dong@intel.com>
> > > > Subject: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to
> > > provide logo images and drivers
> > > >
> > > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2584
> > > >
> > > > 1. LogoDxe.inf includes a BMP logo in the EFI file,
> > > > the driver decodes the BMP file and provide the image
> > > > via EDKII_PLATFORM_LOGO_PROTOCOL.
> > > > 2. JpegLogoDxe.inf includes a JPEG logo in the EFI file,
> > > > the driver use EFI_HII_IMAGE_DECODER_PROTOCOL to decode the Jpeg
> > > > file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.
> > > >
> > > > Cc: Dandan Bi <dandan.bi@intel.com>
> > > > Cc: Liming Gao <liming.gao@intel.com>
> > > > Cc: Eric Dong <eric.dong@intel.com>
> > > > Signed-off-by: Heng Luo <heng.luo@intel.com>
> > > > ---
> > > >
> > > > Notes:
> > > >     v2:
> > > >       - Add Cc and Remove Change-Id in commit message
> > > >
> > > >  Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc            |
> 4
> > > +++-
> > > >  Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> |
> > > 6 +++++-
> > > >  Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf            |
> 6
> > > +++++-
> > > >  Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf             |
> 6
> > > +++++-
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> |
> > > 107
> > > >
> > >
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > +++++++++++++++++++++++++++++++++++++++
> > > > ++++
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> |
> > > 13 +++++++++++++
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> |
> > > 8 ++++++++
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> |
> > > 10 ++++++++++
> > > >
> Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf |
> > > 52
> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp        |
> > > Bin 0 -> 183366 bytes
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c          |
> 153
> > > >
> > >
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > +++++++++++++++++++++++++++++++++++++++
> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf        |
> 10
> > > ++++++++++
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg        |
> Bin
> > > 0 -> 11944 bytes
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> |
> > > 52
> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec      |
> 31
> > > +++++++++++++++++++++++++++++++
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc      |
> 37
> > > +++++++++++++++++++++++++++++++++++++
> > > >  Features/Intel/UserInterface/LogoFeaturePkg/Readme.md               |
> 129
> > > >
> > >
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > +++++++++++++++++++++++++++++++++++++++
> > > > ++++++++++++++++++++++++++
> > > >  17 files changed, 620 insertions(+), 4 deletions(-)
> > > >
> > > > diff --git
> a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > > b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > > index 23e7c6474a..ea879680ba 100644
> > > > --- a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > > +++ b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > > @@ -7,7 +7,7 @@
> > > >  # 1. Present a consolidated and simplified view of all available
> advanced
> > > features to board packages.
> > > >
> > > >  # 2. Provide a simple, single package build for all available advanced
> > > features.
> > > >
> > > >  #
> > > >
> > > > -# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > >  #
> > > >
> > > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > >  #
> > > >
> > > > @@ -46,6 +46,8 @@
> > > >    gSmbiosFeaturePkgTokenSpaceGuid.PcdSmbiosFeatureEnable
> > > |TRUE
> > > >
> > > >
> gUsb3DebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugFeatureEnable
> > > |TRUE
> > > >
> > > >
> > >
> gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > > |TRUE
> > > >
> > > > +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> > > |TRUE
> > > >
> > > > +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable
> |FALSE
> > > >
> > > >
> > > >
> > > >  #
> > > >
> > > >  # This package builds all advanced features.
> > > >
> > > > diff --git
> > > a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > > b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > > index 649774edf7..c1bd791525 100644
> > > > ---
> a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > > +++
> b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > > @@ -4,7 +4,7 @@
> > > >  #  This file is intended to be included into another package so advanced
> > > features
> > > >
> > > >  #  can be conditionally built by enabling the respective feature via its
> > > FeaturePCD.
> > > >
> > > >  #
> > > >
> > > > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > >  #
> > > >
> > > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > >  #
> > > >
> > > > @@ -54,3 +54,7 @@
> > > >  !if
> > >
> gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > > == TRUE
> > > >
> > > >    !include
> > > UserInterface/UserAuthFeaturePkg/Include/UserAuthFeature.dsc
> > > >
> > > >  !endif
> > > >
> > > > +
> > > >
> > > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> > > >
> > > > +  !include UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > > >
> > > > +!endif
> > > >
> > > > diff --git
> a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > > b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > > index 57b29a42b9..56f6143650 100644
> > > > --- a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > > +++ b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > > @@ -5,7 +5,7 @@
> > > >  #  can be conditionally included in the flash image by enabling the
> > > respective
> > > >
> > > >  #  feature via its FeaturePCD.
> > > >
> > > >  #
> > > >
> > > > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > >  #
> > > >
> > > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > >  #
> > > >
> > > > @@ -55,3 +55,7 @@
> > > >  !if
> > >
> gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > > == TRUE
> > > >
> > > >    !include UserInterface/UserAuthFeaturePkg/Include/PostMemory.fdf
> > > >
> > > >  !endif
> > > >
> > > > +
> > > >
> > > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> > > >
> > > > +  !include UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > > >
> > > > +!endif
> > > >
> > > > diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > > b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > > index 20d25dd173..7a76b0efc3 100644
> > > > --- a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > > +++ b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > > @@ -5,7 +5,7 @@
> > > >  #  can be conditionally included in the flash image by enabling the
> > > respective
> > > >
> > > >  #  feature via its FeaturePCD.
> > > >
> > > >  #
> > > >
> > > > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > >  #
> > > >
> > > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > >  #
> > > >
> > > > @@ -55,3 +55,7 @@
> > > >  !if
> > >
> gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > > == TRUE
> > > >
> > > >    !include UserInterface/UserAuthFeaturePkg/Include/PreMemory.fdf
> > > >
> > > >  !endif
> > > >
> > > > +
> > > >
> > > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> > > >
> > > > +  !include UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > > >
> > > > +!endif
> > > >
> > > > diff --git
> > > a/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > > >
> b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > > > new file mode 100644
> > > > index 0000000000..3fd1c3372e
> > > > --- /dev/null
> > > > +++
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > > > @@ -0,0 +1,107 @@
> > > > +## @file
> > > >
> > > > +# This is a build description file for the Logo advanced feature.
> > > >
> > > > +# This file should be included into another package DSC file to build
> this
> > > feature.
> > > >
> > > > +#
> > > >
> > > > +# The DEC files are used by the utilities that parse DSC and
> > > >
> > > > +# INF files to generate AutoGen.c and AutoGen.h files
> > > >
> > > > +# for the build infrastructure.
> > > >
> > > > +#
> > > >
> > > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +#
> > > >
> > > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > > +#
> > > >
> > > > +##
> > > >
> > > > +
> > > >
> > > >
> > >
> +###############################################################
> > > #################
> > > >
> > > > +#
> > > >
> > > > +# Defines Section - statements that will be processed to create a
> Makefile.
> > > >
> > > > +#
> > > >
> > > >
> > >
> +###############################################################
> > > #################
> > > >
> > > > +[Defines]
> > > >
> > > > +!ifndef $(PEI_ARCH)
> > > >
> > > > +  !error "PEI_ARCH must be specified to build this feature!"
> > > >
> > > > +!endif
> > > >
> > > > +!ifndef $(DXE_ARCH)
> > > >
> > > > +  !error "DXE_ARCH must be specified to build this feature!"
> > > >
> > > > +!endif
> > > >
> > > > +
> > > >
> > > >
> > >
> +###############################################################
> > > #################
> > > >
> > > > +#
> > > >
> > > > +# Packages Section - Make sure PCD can be directly used in a
> conditional
> > > statement
> > > >
> > > > +# in a DSC which includes this DSC file.
> > > >
> > > > +#
> > > >
> > > >
> > >
> +###############################################################
> > > #################
> > > >
> > > > +[Packages]
> > > >
> > > > +  UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > > >
> > > > +
> > > >
> > > >
> > >
> +###############################################################
> > > #################
> > > >
> > > > +#
> > > >
> > > > +# Library Class section - list of all Library Classes needed by this feature.
> > > >
> > > > +#
> > > >
> > > >
> > >
> +###############################################################
> > > #################
> > > >
> > > > +[LibraryClasses]
> > > >
> > > > +  #######################################
> > > >
> > > > +  # Edk2 Packages
> > > >
> > > > +  #######################################
> > > >
> > > > +  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> > > >
> > > > +
> > >
> BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRe
> > > pStr.inf
> > > >
> > > > +  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> > > >
> > > > +
> > >
> UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo
> > > tServicesTableLib.inf
> > > >
> > > > +
> > >
> UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryP
> > > oint.inf
> > > >
> > > > +
> > > >
> > > > +[LibraryClasses.common.DXE_DRIVER]
> > > >
> > > > +  #######################################
> > > >
> > > > +  # Edk2 Packages
> > > >
> > > > +  #######################################
> > > >
> > > > +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
> > > >
> > > > +
> > > >
> > > >
> > >
> +###############################################################
> > > #################
> > > >
> > > > +#
> > > >
> > > > +# Component section - list of all components that need built for this
> > > feature.
> > > >
> > > > +#
> > > >
> > > > +# Note: The EDK II DSC file is not used to specify how compiled binary
> > > images get placed
> > > >
> > > > +#       into firmware volume images. This section is just a list of modules
> to
> > > compile from
> > > >
> > > > +#       source into UEFI-compliant binaries.
> > > >
> > > > +#       It is the FDF file that contains information on combining binary
> files
> > > into firmware
> > > >
> > > > +#       volume images, whose concept is beyond UEFI and is described in
> PI
> > > specification.
> > > >
> > > > +#       There may also be modules listed in this section that are not
> required
> > > in the FDF file,
> > > >
> > > > +#       When a module listed here is excluded from FDF file, then UEFI-
> > > compliant binary will be
> > > >
> > > > +#       generated for it, but the binary will not be put into any firmware
> > > volume.
> > > >
> > > > +#
> > > >
> > > >
> > >
> +###############################################################
> > > #################
> > > >
> > > > +
> > > >
> > > > +#
> > > >
> > > > +# Feature DXE Components
> > > >
> > > > +#
> > > >
> > > > +
> > > >
> > > > +# @todo: Change below line to [Components.$(DXE_ARCH)] after
> > > https://bugzilla.tianocore.org/show_bug.cgi?id=2308
> > > >
> > > > +#        is completed.
> > > >
> > > > +[Components.X64]
> > > >
> > > > +  #####################################
> > > >
> > > > +  # Logo Feature Package
> > > >
> > > > +  #####################################
> > > >
> > > > +
> > > >
> > > > +  # Add library instances here that are not included in package
> > > components and should be tested
> > > >
> > > > +  # in the package build.
> > > >
> > > > +
> > > >
> > > > +  # Add components here that should be included in the package build.
> > > >
> > > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
> > > >
> > > > +  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > >
> > > > +!else
> > > >
> > > > +  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > >
> > > > +!endif
> > > >
> > > > +
> > > >
> > > >
> > >
> +###############################################################
> > > ####################################
> > > >
> > > > +#
> > > >
> > > > +# BuildOptions Section - Define the module specific tool chain flags
> that
> > > should be used as
> > > >
> > > > +#                        the default flags for a module. These flags are appended
> to
> > > any
> > > >
> > > > +#                        standard flags that are defined by the build process.
> They
> > > can be
> > > >
> > > > +#                        applied for any modules or only those modules with the
> > > specific
> > > >
> > > > +#                        module style (EDK or EDKII) specified in [Components]
> > > section.
> > > >
> > > > +#
> > > >
> > > > +#                        For advanced features, it is recommended to enable
> > > [BuildOptions] in
> > > >
> > > > +#                        the applicable INF file so it does not affect the whole
> board
> > > package
> > > >
> > > > +#                        build when this DSC file is active.
> > > >
> > > > +#
> > > >
> > > >
> > >
> +###############################################################
> > > ####################################
> > > >
> > > > +[BuildOptions]
> > > >
> > > > diff --git
> > > a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > > >
> b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > > > new file mode 100644
> > > > index 0000000000..53c85da716
> > > > --- /dev/null
> > > > +++
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > > > @@ -0,0 +1,13 @@
> > > > +## @file
> > > >
> > > > +#  FDF file for post-memory Logo modules.
> > > >
> > > > +#
> > > >
> > > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +#
> > > >
> > > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > > +#
> > > >
> > > > +##
> > > >
> > > > +!if gSmbiosFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
> > > >
> > > > +  INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > >
> > > > +!else
> > > >
> > > > +  INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > >
> > > > +!endif
> > > >
> > > > diff --git
> > > a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > > >
> b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > > > new file mode 100644
> > > > index 0000000000..91cd1c6ec6
> > > > --- /dev/null
> > > > +++
> > > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > > > @@ -0,0 +1,8 @@
> > > > +## @file
> > > >
> > > > +#  FDF file for pre-memory Logo modules.
> > > >
> > > > +#
> > > >
> > > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +#
> > > >
> > > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > > +#
> > > >
> > > > +##
> > > >
> > > > diff --git
> > > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > > > new file mode 100644
> > > > index 0000000000..a39500e043
> > > > --- /dev/null
> > > > +++
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > > > @@ -0,0 +1,10 @@
> > > > +// /** @file
> > > >
> > > > +// Platform Logo image definition file.
> > > >
> > > > +//
> > > >
> > > > +// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +//
> > > >
> > > > +// SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > > +//
> > > >
> > > > +// **/
> > > >
> > > > +
> > > >
> > > > +#image IMG_LOGO Logo.jpg
> > > >
> > > > diff --git
> > >
> a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > >
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > > new file mode 100644
> > > > index 0000000000..47f1672a4c
> > > > --- /dev/null
> > > > +++
> > >
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > > @@ -0,0 +1,52 @@
> > > > +## @file
> > > >
> > > > +#  The default logo JPEG picture shown on setup screen.
> > > >
> > > > +#
> > > >
> > > > +#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +#
> > > >
> > > > +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > > +#
> > > >
> > > > +#
> > > >
> > > > +##
> > > >
> > > > +
> > > >
> > > > +[Defines]
> > > >
> > > > +  INF_VERSION                    = 0x00010005
> > > >
> > > > +  BASE_NAME                      = JpegLogoDxe
> > > >
> > > > +  FILE_GUID                      = 319CFE1D-8F15-4A7A-BF40-EECA953D87EF
> > > >
> > > > +  MODULE_TYPE                    = DXE_DRIVER
> > > >
> > > > +  VERSION_STRING                 = 1.0
> > > >
> > > > +
> > > >
> > > > +  ENTRY_POINT                    = InitializeLogo
> > > >
> > > > +#
> > > >
> > > > +#  This flag specifies whether HII resource section is generated into PE
> > > image.
> > > >
> > > > +#
> > > >
> > > > +  UEFI_HII_RESOURCE_SECTION      = TRUE
> > > >
> > > > +
> > > >
> > > > +#
> > > >
> > > > +# The following information is for reference only and not required by
> the
> > > build tools.
> > > >
> > > > +#
> > > >
> > > > +#  VALID_ARCHITECTURES           = IA32 X64
> > > >
> > > > +#
> > > >
> > > > +
> > > >
> > > > +[Sources]
> > > >
> > > > +  Logo.jpg
> > > >
> > > > +  Logo.c
> > > >
> > > > +  JpegLogo.idf
> > > >
> > > > +
> > > >
> > > > +[Packages]
> > > >
> > > > +  MdePkg/MdePkg.dec
> > > >
> > > > +  MdeModulePkg/MdeModulePkg.dec
> > > >
> > > > +
> > > >
> > > > +[LibraryClasses]
> > > >
> > > > +  UefiBootServicesTableLib
> > > >
> > > > +  UefiDriverEntryPoint
> > > >
> > > > +  DebugLib
> > > >
> > > > +
> > > >
> > > > +[Protocols]
> > > >
> > > > +  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
> > > >
> > > > +  gEfiHiiImageExProtocolGuid         ## CONSUMES
> > > >
> > > > +  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
> > > >
> > > > +  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
> > > >
> > > > +
> > > >
> > > > +[Depex]
> > > >
> > > > +  gEfiHiiDatabaseProtocolGuid AND
> > > >
> > > > +  gEfiHiiImageExProtocolGuid
> > > >
> > > > diff --git
> > > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp
> > > > new file mode 100644
> > > > index
> > >
> 0000000000000000000000000000000000000000..7ec1aa6a852564e262df599
> > > 29655f7a0f3d5445f
> > > > GIT binary patch
> > > > literal 183366
> > > > zcmeI53HVo2{>L-
> > > Jm@&3csA!XsrHq!LrXr$}sH8=bnxa%BMny_PD@D^Xt&}NI5uvfP
> > > > zOj2oNv@nuXBQ#^OWNI42{Qs~2|31%s?sM+<o_o&SzW3hm`94p-
> ?sD!~-
> > > skha_bi{K
> > > > z=~b7%^@B41_p8spv-
> > > o%ZVP(p^$^VCyIfcJv${f%A6MtIf|Ns5}1@p%sU=T0}WEX+M
> > > > z4?q0mlTSY9oO7BqY0|D;yDnY2bno8%mRoM=-
> > > @pHzciuT<$dKW~hmRaN@}Y+wdi2pp
> > > > zr%s(ZYu2nMo_J#3ym^m3_So-!_d70*8#nHO2ObzYbm*^t{p;IqyRCQc-
> > > sEuo_19l}
> > > > z?X|62w{F&~*##F|P`PsDqmMp1yC|8O8w4Uj;D{rRs8ORv^XAQa^yqQ--
> > > FL$sc(ios
> > > >
> > >
> z(sk?BZQs8A%P+tD?|=XMKS})#9Xj;MC!cKIym`fn6$=+Ggw7Coz<>c=yLP?u$}4~I
> > > >
> > >
> zi(gc&T9pb%(r}ZBL7=z@@Byk_yLQ{QZST74E=2vc*IwJXbLV&8eU}v5qABP5@4
> > > w%(
> > > > zXU`jNyz%6dPmUfvny+okmM!^wA9Ktx#f8_DZV-
> > > ?l@S`97sBYc53@m5PoQd@Q?QegJ
> > > >
> > >
> zh7T#u<%=)A`17CtykyCeF=NKuc;k)r>eVx2V2Om7Td^X*K<?*1|9Q`zJ^A*%_10
> > > Ve
> > > >
> z{`bFAOr3<P#$bE*?%m6lEqnOkhZ&GxbkRk}9d}%;y<jpgWdu$+<&+z4xMA|-
> > > $#1^-
> > > >
> zCX=s(q&(xrFhza!)mK?)>ej6r1Kl6|z*?g(WjQi!4~_ueL6$m4jT*(+EXl=|jI+?Q
> > > >
> > >
> z`rmx>&8k(a#*Q7^zJ2>DRjLH<81rN)A%Lhb8Dw&_fB$|@*)lgmBk=dX|NX@m
> > > Ut|-9
> > > >
> > >
> zWukKB%9WCcnYQ{P(4awsM;>|P{rBGwEodf#APDT*wd<*;p6b)5&)H|6?cZA_
> > > MNSc@
> > > >
> > >
> zUcEZ6=np^qFo+D9XW~JCHR`9Ie%f#|r<^O$tg>axGALzxA|8P<xkiQn!&)>JZoTz
> > > Z
> > > > zR)h{a3^h&j%MSwV6<%}AHH#N7Hk%ZY5hlTmY;K-
> > > ;=9&2s%93meAH;j_y_XJ6P<%{L
> > > > zF(UB62Oo?dKmL+SE-
> > > `w2*&_65r=3Q}vDhA?aG0!%hrm}~eZ@i$yTd1*cw)9Bv(#$K
> > > >
> zjAPE6Ip2Q!ZSjP~l$;y_DBP}Dvu4nsLG*j6iF(T0`^#Vc64ME@iJu%9QdSZQ{J;I}
> > > > zZ!s~$iY?``n(yk>s#OacqLfL8sZP-
> > > lVCw{8qEDM|u}@*^PB`I&Ns}gJ&aA0ul3HQ~
> > > >
> z@7S>e8_$|GYo<_ib5<o3mDx=E$3Om2Vj^am8w3Hgk+DmyRH;(VSdfzDG-
> > > }icgoAX9
> > > >
> > >
> zd8ULBU~K{Ac8uoO2uq11XT2H~DpZ(1e}2|wisgE=^)_tSfU?l))vH&oT!}w{mtTJQ
> > > > zrI%h}NeZ=gv=>kwTd-gOu5#wior{+b44<b>n>J<26lO-
> > > ~++uQw(F8y2F|p;x2yyM&
> > > >
> > >
> zweP+69_CI54jjljK5^F{%@9DwkBU+L3G+fg&1T=eeQ|eI`21N<SigQfG=VjP2M_
> > > Mm
> > > >
> > >
> zs~3JeFymrP9`98Nto~618*`}X;>@aP)240Ow7Kb~n{L1T_F=<@O_(rY_UzfuJoC)
> > > *
> > > >
> z<;yp2+{g^;U;p}7_$FsG2i}Tz+;NBbT<Ws&$3Olt>o#fYbo31vHY3~cu5aJIc!k1F
> > > > z;i#jI(rsOF)ANnsErCC)>#n;FCw16gV-mG>>(<iIrZ{-
> ;Aj1#*KNPnkvQqk4XPvca
> > > > z)21|#kq_S={_qE^l@VPW$K`&s!$+1cEFX8=&|&hA;s4&fd(+SnG1Y-
> > > Ff9KAfQFzV@
> > > > zHIlC<-
> > >
> b9NyA^P;wPnpW01k1ONscZ7hPhpAJ5i<tH*DK!?JemCSpZ|=B9mUF)w=TOR
> > > >
> > >
> zs9dHH{32HA*kg}n3YL7QFhzxf82gxgE0x}7kWj5!wX3hbnzt4@rK~CCV>_5uFc
> > > WFm
> > > >
> > >
> zu%QYFxldEEV#RmgeK#>OGFM`4bKt;%Od^a6rjXKg<dH|>4U!Ki^!)haj}z;}m<nR)
> > > > z8&%AZm}L6#GtM{zUBsB+b!N+_ko^KyJ`-
> 5;%yf^0sXPO}4jno${ruCP{`8;!{KtuZ
> > > > zhK@^?m3aA%d(nUiDI?)lty&o~x-
> > > diw@GOhZy#3e%dj9$6v#48DYOG|qPE?DSUYop}
> > > >
> > >
> zS;;5X%ujzxR4(%?J_4BhvoVU!L$++jON5mzTC|91DHW|1cGgZh>7?R|ps7J21Xv
> > > Ve
> > > >
> > >
> zV+AutRF$&gRwdu8WJfO!BVzWoag=R#lnRj`rPmm}FqN1%apJaZ+hQ6iMVKwo
> > > Oj3$t
> > > > zh-
> > >
> zJY@x_sokvA<)cXPjG9|H9ZJWAwB)V~)kS`^<bCL}k}G0p&vI#oo`B|@!K95}Gd
> > > >
> > >
> zPVgz6DwwosN8pD){2}(mXhz}EDkOuVeLQD;#Gp7rgi#l%Q>RYaWy{nr90It5xc~
> > > n9
> > > > zliZ$`P&iL~WV<0MKN~EbGq5qE({PfWv8Pd>LMiB-cixfkCGJ~!;v))>;o-
> u_bo%t^
> > > > z#_wOoxD;u1Q6M24Jo*OV#Ys1Z-0%_q3A$}}rzbRO{rdGI?OT&sh7n-
> > > >2YW`$G~A*R
> > > > z)0KSi5o<dZUcx|xx-VObM%OgM<cYKDd@-@nNI-
> > > iw2Yh7OxMj<hFl0oX1CyUP`_tr|
> > > > z2LyOs<CFu>C-LbR<baPuhYk%xMy3hIHZ2cqNw5tp<M-
> > > >=FAg7QS?42bVuubL3e3k@
> > > >
> > >
> zvu0t=lVDGpqH=`*_H;M|i*Ua?(|lw<f@llD$jFf6=9_QMm2jBG6bS)d>F8(TdL?{x
> > > >
> > >
> ziA?j6=(oYhh`q3})Gm_n=DFCP{p@FW(G25ZFS~ri<bVJE{Q>w0T!j3~vsjq66%~Q
> > > <
> > > >
> > >
> z<;#y4F(Q~fW_J0A7vBJ6#AxxVtF9_)cbURV0s(BL8NcC?RZB`U%10Ks0yrXLkFryz
> > > > zP9-4?rjhADfGv`C?b@wdw@#6j8Rg@B_uZ%1KxZ<ufRhd(EyY^k!-
> > > |*!z6(BC<l|3%
> > > >
> > >
> z@{<4#8BnMzML95SP7?ww_~1@N!pbc25nraxub#>=D&lGC7E_m!Mu1&Qq8
> > > $~K+syG1
> > > >
> > >
> zOVW=%`lw)Aye^Xd=%bG=X$dfmPagu8UV16^3xd#Qj*lHXb`+W*KV=Q4apT7
> > > 6>kU&Q
> > > >
> > >
> zgFqP+T99Yw8f@nH_{uA<$O$OiC03N_c!NNi5x^jVaAt)0Ky<Uk$K#GWPRmgh(
> > > H{sc
> > > > zm*&1Obu$Q92r#7@K79C$88b2j2)l>E=TCCV*1z#Xm7&fxRRsZ-
> > > M>2#1uHGaB6mFrj
> > > > zl%b}Xsu~2cg#ccN)fHC1_~Hw*rkbt(HMPwa0{H(IzJQX`2OoSeTdgy-
> > > H3(!20YbS+
> > > > z2<W_pg)$-Rv(-9NTZ2Hh5Fm<;lXQ|}qm7fTo;9`290Ej{mk`i-
> > > 3k3k;j%BWarosk+
> > > >
> > >
> z3?YDyjgxeeW1_TYs9mP227xRhfT@&(gU(wQUU*>^8))im5XcY$#EW;5&g&RQ
> > > tQl&Q
> > > >
> > >
> zsj5LBqX;Oftr~6BjP|docD4{ubk)utWwF|Yy25$qork(Uj^zoKtym4zYt?^&m8tL=
> > > >
> > >
> zp<W6pGac9q?~54Y4<0;t{`~p)U?gZDAqep<h5jUeQE6VaY85`lCr_R{Y}l~gy?bAF
> > > >
> > >
> z*=1;SEB2R31_H+%bBxyj)p;G4ssyJ_7%`j`;CmBS3{D^N*IaXrVl|xg_dOmoXpmyI
> > > >
> > >
> zLNZ+=wJKGr2ss2eML()dn>LJC;KlOg%L%af`RAX1<?(yrg%<)8;e4cCy?P@@j(q*~
> > > >
> > >
> z*8}*+rczHn`DBL<9gaQrSZAKG9`lkUEQqhGLqg!8XP&BnYe4NQt0dsP7b}25<~R`
> > > J
> > > >
> > >
> zQ&>=iuax=7w}!>HS6_YA`GWH8zQBFQnBm%MuYKc<H++jwNkE;KEn9ZujW<F
> > > Tp}V6x
> > > > zMVN7oh$ZsDg9oY7`|rOm&)M>$i1)S$6DCxuR7svVnY-
> > > Yl0_HvU+>=awD1|rw?%lh+
> > > >
> > >
> zYE`m)#FyIk?c2Rzkz5bJN8X162M*k|YnLS3z_*Ca(Wp_Q2*rs}G%+RJ!MhdtXf*_
> > > 5
> > > > z!`ZWEpLNz*5mqcfR-;FcRsoi%a{)3B@Q81$$r9va*|KFBl&W-
> > > 7!8E#jJonsl6NoU5
> > > >
> > >
> zb#NrHmYAZtnP}ml#YgKAG+q`jUd(qkfapf@$aBv<SFjVE7r*@S%fQPWT9srx?<
> > > }|A
> > > >
> > >
> zajEeUp$*9nEk53I%PnDi@)ztfuZsr`9AMlPX81a8+&HhyxgLOzc5bh|_8RXcE$NL
> > > U
> > > >
> > >
> zF?F`<;B~Nc>C#Bbl4pW%bFT_Gua^`bS^QC4{dPhm94qqi_~VaXv}lp=YyzjO*D*
> > > Yn
> > > >
> > >
> z%ZB?dEJl@DUcE4UBxfeP41>eGF5K1jy&{>Z*^MRamv25H6R^hh*=L{GB}xuTh
> > > mVX&
> > > > zB3VmO;UkRLuwjD)_E>KbC-
> > > jt4PSFw}m3dZ3K3Ywt3u@G;p;fmqiU0c7zxqPWTOv#m
> > > > zD$hcB-)dM1N{5du#VcYWPv*-
> > > <J^{}@`>Z^ZxbN~^P#+&Mzx(dH?|iEi2_GqiaWzh{
> > > > zlG!*`84g{4{q-uG3Y><W&9A@y+816cL5c9OTD58_BBuhHFCWK`AFq;6+-
> > > Z=3+O=!@
> > > > zN)f!+ym_-qWuoGvRTeYKNEV>v4OFpwY|^BOJd==jd-
> > > Uj`0<V>(MEIzvRIGxVoR5J6
> > > >
> > >
> zeX10#m1geTxhl(s&6+h+%r;s+QYdeXZr!?tly>>!pMLtOZ|ka8uP)Cd<X!fCeCuE*
> > > >
> > >
> zC<Q*Uv_e>0yU8IBBz(lXepFxKkd?$kh2nq^qd&#6BIl!3E?W}BfD0+}UXSnHyVtj
> > > M
> > > >
> > >
> zXkB_e9?5kC#<vc3f>Pk)O*h?Sw>SKOgpa7wh0i~H4(g@~Om)?DlVai{?cKU{YlR9
> > > G
> > > > zA`yNe6U%k81XA>bg-0SkRasNAYgh_=oHJ*R-
> > > Co@Tw7&#BRxkZktXXw4x6|W?f6}B$
> > > >
> zty{OQRjbyir=E(!KkBJft5#*DrFrw_L}hyM#TOO#G4H?seszheT)DDc2j7GE_(;)2
> > > >
> > >
> zu3?U^UUS8izR~60dFLI)tb!#&*$JfxUu^9JrNGAkifU{fUVQPzTCT>>gSAmrKR~N
> > > o
> > > >
> zF=z{WC=hndnl+Nlbt4s`A}+~IxD_iODT}$D`kJsJJA6a2gTG={!IBZSPk>Q=ntML7
> > > > z6)Q);eYbn}?z-
> > > T!M(55)euZWK_U+s27DW0kUAnlJDG1caQj%_NT1$U%^AWi4MI5av
> > > >
> > >
> z>ArpY<h_8lye?>3>94rr3V8*DySe8hD$PQZ<)^`3m|AmoDgdGC)TyJ@v(Chr^`R
> > > GP
> > > > zH-
> > > tqb3>lmW6p!)!YiHtnkN_X40}}*vXcg=4n+)AldAl$&_01$q0{A7bfN(eWe8k{a
> > > > zXtMk?z{jzC`SOxD!tUaj39=F!rk8n^r5J0Y6HAI<-&r!jl+s;2uPeTM<ed=7@-
> k+j
> > > > z7$t?o$9mj%EoJA<osksem5Je_fQ+IZuPua38-
> > > *NvPdj(+Y(K7Yz<RH5o{9<j_3PKF
> > > >
> > >
> zRV&5B?qoP6P^qw$#+Q%eU%!5RlBwtEl@eY@vNh>Dsb@pP4NHVq3?BtBbp
> > > Z*mJN(#V
> > > > zk9o<J`}+Fz>xCK?@icNi(iYrMpnah=U~r?v6>`8jCL}nlS{KaRzKBjj$RgyA>xv)g
> > > > z<r&&{?Ix%kq{m-
> > > }E+7FMfT$=*+Mq=>60`dy%t0J{wCY2MbKkL|jfvL*euP4rS~Gs|
> > > >
> > >
> z%G|n65n%xIeO6ce3?GI5(&eMpdJ)Tg2^$>A1tvZ|QZ6BhAAkID0bbox%#_%W
> > > mA682
> > > >
> > >
> z_wvgx_bu`8!w;9_5b~DcqX3{TAi8|?eFHn?VfE_OLiLJ!8Y>^IrZFC1Oy~qb_ZZLu
> > > >
> > >
> zQ$|JMAy&^|y5eWPkAisU@^Rt9g+dOJQ`Aa}OF*IY1o%jan3=dYOeH9}Z?Tdr)L
> > > iit
> > > >
> > >
> zC0@%Jmpf1U%K7J?ub5kaWQLCdXu5#t@=>lZV|TiB(7%6wp?bwVO@@!O5
> > > mdKr+a{o)
> > > >
> > >
> zb&9LfU|4P1v`Jo2toDz(;%B~(LTBmnQEPdhRgPdn71L9R@sawUbka$zEemL?pJ
> > > Jg?
> > > >
> zvu4czIN(rPUdpIZqXJ~B_=w@70F*8ux_rcQvb?*Uce{4&ihg*)KZ!L{l6<6JP{Bnp
> > > > z-U*1-
> > > @n8P(7Zj6({`Ecm&2N4qFXj2?pZCoqZ~|TNGv7y{v$XigVyTw)zED;&rxFc^
> > > > zg!zb6vofQ#T`NGuY+aWcsQU_;2&X%C?9k0qJ-
> y+hfR!#FT6_$ktS$&c0;j3sqt!c>
> > > > zC-
> > >
> Y!!zvGTOgf5n!`dV0^co4uNpS)1}uCDl*@1r0UT6`qDweWZfPgBT8#ub5Gexcn;
> > > > zFcDkeRSr-Zm-kEEx^-
> > > 3Z36RF{Q2<RB5G_77XwX33(P_AwLO#+*cwKw@?YD#BL*Npj
> > > >
> > >
> zm*uAfuaOrN%sNJ1sC8FY{LJ@J=qW8ewrtr_cszxt>Et8gO3a<W`;u+jwpF2nm4
> > > ={-
> > > >
> z@_vcWC9>h8&`r94Xz>y4N_j`8;cml*4Fyc>)8yB4?4qp$28zD>^#w6RIaX`ZC-
> > > )J7
> > > > zzZ9WjQJw0FpZPut-L1t(cEp6oQ+Rsz*=Ku6SJC-M#fZTd%os##-
> > > _X}7F3Ub%D22Ih
> > > >
> > >
> z_$Z*K3y2mU%atpaLIMg^lEe;310U%x!T<?%Ryk#1M_tw2*DQU&fB}N!L~^Pte
> > > &+iq
> > > >
> > >
> zbiEcIaX6g*{YPA!d5Km^_(=6utXLs*gv#kd4?X17G~qfcx^iEv_)8ZaiR9GqQGihw
> > > >
> z5G_7Zmahjh6}gHp4PLVZK%A%P;Uhao0iw5~M8_7evqh3)l=&q%<A;{8^^(Vf-
> > > O?35
> > > > z^L-ThNSBXV`m4;9SnUk?>)pGzP-
> > > n?0w$c(oN)I2Y<bC(uCuxY+Ep>mhzP6C+T#!I2
> > > >
> > >
> z+%kL&35YHqvCi`n75DW>A_aHq)XAN**A=3f3xGIJQ^iNTK%=4R)ex`ixQJ9#YCY
> > > nJ
> > > >
> > >
> zBjoNMXUv%41SgVX!$$!|T|jjC$P~s)RNU9KcFlx_*r$9E+&Oz)A()H(p!*<Ie587~
> > > >
> > >
> zu??`+I&k1Xchd@988Kpn7f@VhGgKu4QNf(OF6xRO>AkWNu1gx?zEwK@bF@
> > > ?fbagL<
> > > > zF0f7)ELh+M-
> > > 0MoOUcCxtVqHudAF0)>S+l&_;&ol!hbogzd1NKL5lY|+aLe#f08JMV
> > > > z-
> > >
> R~od0Qf}m5*6Y4%P+qyR4>3OAt!`vC8q=gkra_aK4Kl_8+60nUUjeLW5<qlKW<;
> > > q
> > > > z)x?uvYu(ZnKl6RG`@%ZV<s-
> > > 1Ghe3zAnC1F*q9g$hVbtl*w?IAsOCcX=JL6BGQ+!XS
> > > >
> > >
> zPMs<N&3TKMERx7XjFzJf>yvdpYAsgKO~|JcZTGP*AOZO3Yw_w7r;t8HCr_U2%
> > > uRmG
> > > >
> > >
> zrk)!R=aqEw5yy1$QKh@p#05|f<2Z5RM0XDMl`&(+I3WsotSf$L`#ut($wo%yz<2
> > > ve
> > > > z7mxsa)QS?t1_bgJte4TWk-
> > > Xd8a19$aOkPkr`AD7RlySF|D;+y_lsDGCOPq8`)Jq&b
> > > >
> > >
> zNHi$yOcW1v#V>7qoHlJ*L9`2AWON}Pj{%x4AOZM@%{$=>3)ZmUMGWK>ds9
> > > d@Zrr$n
> > > > z85X>V;*js)A+>zO!ckZ834=-
> > > jF3IWi>C+2>W?jUkfaF=NTe{+xDn4Qpw|n<)2~ff<
> > > >
> > >
> z6=(0dfCS(p9mFV9sGIyWKnM>)@DTe+o~`q)SKL^qIHi`4RFXL6&gS?YBMj<pTA3
> > > tD
> > > >
> > >
> zLjSNJ;6y3Rv99=~ijP`*d34amjT?Qj(gh?K9~t53n)30n^ZmHntwWv6H}tk3u_|$P
> > > >
> > >
> z(#%J#S%B4c%)@QOd=KW%ohu;bJPi{K&{?#u_@#u8DC+<I_rG@nqH;{M6ldE
> > > D9_s=U
> > > > zjE@w3=bd+|)Y+Ma=u0XZJ9wodX1eo1-(!XuDuD^o%ts*A+SvgU-
> > > }$mrLJ0IA84|zp
> > > >
> > >
> z$}7&qfsb{?FD5=NUApvkh2M}NLuSsLNib8bk(e!wD&u@zKv3b3R~#MGg1y5=B
> > > )VI6
> > > > z-
> > >
> P8}(ty{;ca>a@j1qQKH#cn?FVb!y;Q!46Xq@0hsvjE+3rhGmgiL+c?@r#L%wqV3}
> > > >
> z!1%vHg$f0!;k>8|h;M~?dpPrV9;1Ha`?w?li+<a;Z(q4`B}%7^P6KF;S(&5auDJN0
> > > > zay~Lvk-+7?#m=l&Fb+_XcugmiIpGGJ{Ttv|SNyWe$0bXasNkauh`X1CD-
> > > u4^ebh=w
> > > > zpYSOx#`abP8PcSjkJJ!P8d?Bi#G%-
> BD;ZNx$*8qMhYnh~xfAP(Uv~M3mv49T-
> > > B)x0
> > > > z@$G#HA1R%^MO_i{Em1203IlEsyso65k8-
> > > 0$H!{pMyc+9uUE<1v;R;qEUJt5V*A>5v
> > > >
> > >
> z@{yUo;#fi#5O)^~SLA%8kBFC~wQDcrALbM<Pm0DzmMo>8kL}yH*8(Jf%@hH
> > > h;hk40
> > > > zefsoK;hk3+UGd8zADKC-
> > > FGuSF;?*zqbzeTxHEb{1=@UCZ$4qO%pL(XBk1T3w&7*af
> > > >
> > >
> zbSxg>C(x@DynKZ58=xzGS>)sB(WAXyNAByofcVl!g^yIDTeof!r7Yi4bQ3^E^=YG
> > > x
> > > > zQu_HwRoP`$M*~GxyLDOz5)HjD-
> > > dT0UFLQh(K$4bvp)Mf4U9ZSTgrRZc#>sfs2}VY0
> > > >
> zm<c}0Eu`H2rS5djNmz8l2(07IjVpXQQBH6sRzKDizijc5)l0lOsG~tjT|f%<i1VU4
> > > > zA1S?h_38n9P&kY8Jq}Dps+S2qvdHNRf-
> > > ?b52DBu^PK;k8uTksHojZe#T6M)QD|`ef
> > > >
> > >
> zRLuh{cIg7*?Ae0HT70Chk3ar+oMuS0B@33Kco9NXty<NVDBXih@KINBPF<wka
> > > 7i=-
> > > >
> > >
> zg2kHG6+iXLD@sTl$%w04zkYo;dMa0R0r9QBE+4H*qMb$TLa*1aZ=vo4tTUk1q
> > > k@1W
> > > >
> > >
> zO(yt=e|2~BC0D`($3aC3)iSTln>A}D0khyOUGYmZAMqWE5e>r?#jTA<0P*Sz`+6`
> > > w
> > > >
> zT6JStSc?L7q0R$z3#Uw(!e_T&d$lfVRR*;mt<0lJj7J4$^L>x|_wOI3XvU?RHf<_c
> > > >
> > >
> z3foCq`ae`7yL@CG#Dse7+O<p)+0?%J>Z{op3InY5tS%r0JHmM}3?Hp3VU~zyCS
> > > kI*
> > > >
> > >
> zw03zrJ^l34XwOChi&c|M@R7H%)@Xm|(4is4=JeA~_i|>gYrDz^7p*+?pP<7mX
> > > $Y&D
> > > > z_K!ss`^TKl{$YS-
> |1c)9f0SbXfY<&>ii_%&E+2`jB1eygM^!iQWC%2J<j6U5=0FY9
> > > > zRx#SL+~Z)-
> f!j2k*kcyN{tkl#7679v*Ul#se5AIYefF92l_)=E4rn(p@Bt38yp%fd
> > > > zM;$m@^Pnyt1KV3g1vM`#UI<a;CeJ4;eDoSX79=LN|MFHV-
> sK%waK6tAla*M-
> > > OiVHX
> > > > zfz0tysDG@dS>Ypwq6Mi}@M5rq(1JL7g)qR!PMBrwf@PJ+MZ-
> > > r)N9U4{=!Z+1tb1$T
> > > > zym<v#zj^cKU^|k!706k7!$(PnW`&Ph<5k>mN}8;Di#a}Pj0Gvl;y;rM-
> 3&`Sz2T!o
> > > > z0J6eIt@Rv5-v|;|gj?mymw)%&cMDST-
> > > h1yA5}Q*w0)~$gd@{jDzCl|19sT<ClQcQl
> > > > zE%rcJ{dQ9l0E1;%vQHU4O1eH1eALwk=-
> > > $1%q{)GAp@4y&m_SKiKBAX3T<2Hx<^90;
> > > > zC_ZTTC;=)HeALyK^Kv*Q!9npBw%&jI;~$-
> > > r^yQ<j_~m{lMHi6Vzo4A5mkB=V>XYL*
> > > >
> > >
> z+S$fvkB>U)C|p6>lr((Qh1c*=f><W_sB3Q(ha!^`LsneTb+jmH_~=AN<=F61f>I{<
> > > >
> > >
> z_~3&N+TSDJgFSopNZK3KEfhr2C8jclkGhZ=K1vXan~#xf&k0jDIVG1bUoL5HgtyS
> > > m
> > > > zMzz@RQ5RCfM+ssv@sT+=e%{z1z=IIpFZq-
> > > Nw%JE}|KP!cat=E0st0D3z@m7Iw+-&^
> > > > z<cW2~&#dP-dy`|co+AKapDNlvVh&8)goht~xM|a-<;s;KK*@js0|-
> > > GrVZsD#f8^5Z
> > > >
> > >
> zzI)+?7upq2ISAl?)m><WR}3EoFm(YjeDo4~6+YtQ4(j1Pkx*q9U33wBfrDs{2}H7H
> > > > z&6)s~iMmmWA_=-
> > > 7h)|eQUGdBP_Yp%j44l<}C`X0CKU>d6J6>gMiDO~Bh!DpaQd@d!
> > > > zXm?|^1UE7A#oOL_=bfhok-d`X^_Fm6$6_%tQ#Hj_7(OZjWs-
> > > qFw0z{%hci90wfTs4
> > > >
> > >
> z%D3Ns`}pIJTWG^gt&nhK%a%QK=#Z0f^5dw2#96hC<gejlBrujpCeiW{#Zi_VfzI
> > > M1
> > > > z+GSg|Y~kYwD=j?HoWXsrI<{Ei%Lyplz3Z;K)H6>erQu^TIOn63X!(e-
> > > gXPNG;v=s6
> > > >
> > >
> zq36dRe~c3nYmff2%PwOUsScf6UsNEVa7yG9^~{q=Y5157&iN=MT0RnS%nF}j
> > > @e!Y0
> > > > zpwzHoLs)ag6<2V4&pr1%^2j5K(Ba5Ppqu=Zb)-nPI~A*^n9T4|5h#-
> > > k1fu2R2`8L@
> > > > z8?Kr)Yg&9{w%DRY3o8sgI;E`kU`2@AKt<%W)N-
> > > Ke6Hh#$m~)cJ3?Gw3JL_dd%SX^4
> > > > zLNtR+h-
> > > n8d`QU>O9(dpZZsA7nrI%h(M2zt*5u)WEMB#1#XT^$@36l(CF}5(&f04M=
> > > >
> > >
> z4O3zBY!MNNoR4_*#J@MuIq@gY&Jhcwv<{hEuwVgOAr&iDRBY_sci%10O@2
> > > yzjT8=6
> > > > z6&q`k83Zf@BIl!(ZO@)P@xX>RZ&p(oqvG}%<s2-
> > > P6k*5A(Ehy2X=vXyelrxYHObP9
> > > > z0AoDjR4V@3v}vQ&mNU*cgGZP->Z-
> > > {>E}Lj72YB;P|MF@z!6Y^alsE$D*AY`yg@$&T
> > > > z7hZUw#6dI7HweUpz@$l&Y@#V1TzTb{F;&K7YY-@91TYCH=%Qaj%-
> > > 3Iky_69%Z8r$S
> > > > zgaD!3cJ10Fp<cmTmK8}%RZ2s)?b@}|Rl-
> > > k0wM`wej=;>BGYc|Ka&htE#aVB)Z~X~J
> > > > z0s_pDv1Rj3Y!Vm*B0-
> > > >4t5y=;6}&~9sWZ<!Gm_HNoQcIp3jwr$0m|&Orn$dzP&YiR
> > > >
> > >
> zqG(r;bdrk%?ae{keVgFqqlE@mGhMoL(cMMzEyyG=2!H@;JZRTQcvtY&C!c(RR$
> > > eIp
> > > >
> > >
> z=;osZ2y^YeefvfjEV~rIG;Ne4fI0uVb?XW;PJYoc7?Ee5kGo!cwD7^I1@#F_FEJnO
> > > >
> > >
> zHLWNX0?dOfFQ#(px$l<9NY&~W?9QHh?m0II&MV)1^9@dljFM8ZBsmA=qIn)
> > > *K@}my
> > > >
> > >
> zU_@ONHU~giO=#S>@tbeH>ExjM81I@uS_*4ix#`xFGz9<NPd)XNTcUigpsI?Oo
> > > |LpA
> > > >
> > >
> z;c76PAaufx9XsSGegFOU%a$!;*AkEuuAwO|iwLj;fgz+^sJ!mt$~B8kj<C*{b>DW|
> > > >
> > >
> zZ7TLJ7?6$~JC@;Ygr%FTa)tm(I9mSyoy1i4^^r5s+|5Dje)Q<k__uW8<8{1x_3Ex&
> > > > zyPB0)H;g5I1xIsUfxo?E$-
> > > cg5(ITdtB@Up_{L@Z5ZO)uI3{Y*9BnRy9vJMt&Fg~Gr
> > > >
> z<}}R+5b9$8{{0exk=#NrC2fw5(*reL^_(FoB`{jIHg4RAt1$*D>1l$gNs<VlNrHa>
> > > > zUpetgK%9aS+4>LDDQw7Y+O)|FL-
> > > +Lq2M*w;+UUfF!90u4R<2x`ubW#Q6t8UEy7kmk
> > > >
> > >
> zPt9V(ldm)5d0ai<@KzC9D;X~32M!#FOTgqSY)VWL0X~aF!{I%wB_7Vi8#Zh>@x
> > > &98
> > > > ztaA>^V%?^H|Nb9+^pO)u-
> > > ($>9@tq4Xt5vI(0}xCT1O)IeNBl=$F_0u!wQ3cPt%PjN
> > > > zsUiY|i)9OP?b@{xguQOz9*{6A#^_QJ>XavADW0eSii>_;B7wP|S-
> > > ^>;qY0q7aN$Dq
> > > >
> > >
> zD7>JST*pNxJD6B}8w;;U`Xb>>h`x&JV_k1lZh4qCZJN<7iMH>mR;|kJEo!cAv{kNP
> > > >
> > >
> zO~YOZ;a7~2SG4^SQ*La8J^JXQVWx_fRFDHZ*D+PnWXsTn5Ma6sK2E|C`I;S1f<
> > > 74S
> > > > zf^>=#>R7X9&nC#Dv)6(hZ`-
> > > !b%vloXWxjEpJ9mETt+#@8ll2rnu5p$^KtRH^Bv5Bl
> > > > zgf9XYTyOyslaTX7TO`QJtls!y9&LgqO_~sXTGyeU-DUQ{-
> > > o1N?2XXVwHyd5qXgf$T
> > > >
> > >
> zH~LX4(16`>1rM0i^y$+_v1pSlas;r?nmTpr!Gi}2_KxmFVtvk^KfhP6UNvgeh`g#M
> > > >
> zLni`k8S@SdwuJ80tpxZu{q)nFrI_QQAb^JfIu~cQ;XjvlU+>wohiHSp`qi(hSFc`_
> > > >
> > >
> zM&+{5DpjfwMUI||YG`Wp7mg;F#pDvPOg9RBs=<Q?qZVb;Dv|>hkqDOEy?b|}
> > > x|rRQ
> > > > z01|@FHypFP{r20Dbcc`$u~P{`7ob+=k;D+FUAy+UapU;L34Is-
> 6te<e?*xY6(^<D}
> > > > zU9-
> > > _F>C<}k>Jc~<74Gn`7t8@$JR+D&DqwD<3ITLtFS+Cr+<*jd$XQST+!xVRzzT2P
> > > > zym{=!5O58DgQ-
> > > Fw`N}XvY1_6f8;C?~bi)<Z6|}HgwrrVv>r9D}AaLZ7N1}lD%rnm%
> > > > zI&>&1k?_igMIk&$@Ljm>y6af8&9~hvqj%=lSR-
> > > O!j@_J!=Lav`6t92y;fG8W&8#63
> > > >
> > >
> zUKBkOBC0daT)A>(geyOCL1M2Hn@zSm$B!S6s(kC#tr<(B+fZ~Uf>i(_@RI4&sS_
> > > >%
> > > > zSFBhO-@wC-
> > > D&vqIJ$e}Bw_qKY@~2SBVuZ;Aguo5%u20|!lFXnBXP6A_SaM{HSEo*$
> > > >
> > >
> zR2c+OnRCxQ_wvgx#}01DkRj+C0#{(G{4kL6<!#=)x%nohoKulh4@C|%=nysrLSb
> > > Yk
> > > >
> > >
> zs%P2JW__5gG<I92Oqs$skQL)wZ@u+~8*ZSUOoyQ@+oLC+d~z7AKV+K^4f{mr
> > > oO2G-
> > > >
> > >
> zUi3T%4H`6Y;zS(FV7Z3N{R9T~zKBr=)aQ)aTO@Lx#Y`}t#2Lu5&p!M0*I)ZeOBxdJ
> > > >
> > >
> zao@LZAN0Yy0;|6KaF~xWAzxldjSeRcHd$9;O3Mx%wi1vXArEFRlURE#Yu4Luzn
> > > ynZ
> > > >
> > >
> z7NyA4IdTNhl4T)%#E22=*RPLu=Q=T|&Rjt@4J%cu6nTf540D43gF4m^XUv$fd-
> > > v|l
> > > > z33>V}Y-
> > > pGprX=4Ge15V<x@5_cI5Z8?&z%TsXlR(c^ya%nW;bj}4;?xbdWNyej8Mqa
> > > >
> > >
> zpOv9uzDbdu)}fixqD2d|G|@URBU|U2fzS_2moDYSg;!4#TQEHmTT(T_{R`s9wj
> > > G)P
> > > > z1fO-
> vXYP+tfncW+g#qT>sLz#DznjKp0s;2c*;r={A4fopZ`q#6%9e`C+k*`hS~Pw7
> > > > zbabC;)vASiz)W<CsiZ-`i2#E){8XTsgMJQP4H?vJ*|LQ#LKO-WD-
> > > Ev^^wzNGXTcf2
> > > >
> zn%JN<YSgF%Lz+7K(H!R+0j&A3<YKUgMjwhpxDUliJ|7_5M1TJI=LD{en~b~@-
> > > h1yo
> > > >
> > >
> zwA5zJnl*g*aK3tsy|H05VN>!gc&2s15Fm^u17K|J(IsoppaHs_ke5#tu{Bvx8Z%}L
> > > > zK1{IE<%g{qj7F7x)TmJ~i}@^G-23+J+p}j+bmTgA?AWGF8&-
> > > )gz4TIop<u2E>9VWq
> > > > Q9t=$LltI8CkSzrM7XaWYkpKVy
> > > >
> > > > literal 0
> > > > HcmV?d00001
> > > >
> > > > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > > > new file mode 100644
> > > > index 0000000000..a636b086ca
> > > > --- /dev/null
> > > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > > > @@ -0,0 +1,153 @@
> > > > +/** @file
> > > >
> > > > +  Logo DXE Driver, install Edkii Platform Logo protocol.
> > > >
> > > > +
> > > >
> > > > +Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > > +
> > > >
> > > > +**/
> > > >
> > > > +#include <Uefi.h>
> > > >
> > > > +#include <Protocol/HiiDatabase.h>
> > > >
> > > > +#include <Protocol/GraphicsOutput.h>
> > > >
> > > > +#include <Protocol/HiiImageEx.h>
> > > >
> > > > +#include <Protocol/PlatformLogo.h>
> > > >
> > > > +#include <Protocol/HiiPackageList.h>
> > > >
> > > > +#include <Library/UefiBootServicesTableLib.h>
> > > >
> > > > +#include <Library/DebugLib.h>
> > > >
> > > > +
> > > >
> > > > +typedef struct {
> > > >
> > > > +  EFI_IMAGE_ID                          ImageId;
> > > >
> > > > +  EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute;
> > > >
> > > > +  INTN                                  OffsetX;
> > > >
> > > > +  INTN                                  OffsetY;
> > > >
> > > > +} LOGO_ENTRY;
> > > >
> > > > +
> > > >
> > > > +EFI_HII_IMAGE_EX_PROTOCOL *mHiiImageEx;
> > > >
> > > > +EFI_HII_HANDLE            mHiiHandle;
> > > >
> > > > +LOGO_ENTRY                mLogos[] = {
> > > >
> > > > +  {
> > > >
> > > > +    IMAGE_TOKEN (IMG_LOGO),
> > > >
> > > > +    EdkiiPlatformLogoDisplayAttributeCenter,
> > > >
> > > > +    0,
> > > >
> > > > +    0
> > > >
> > > > +  }
> > > >
> > > > +};
> > > >
> > > > +
> > > >
> > > > +/**
> > > >
> > > > +  Load a platform logo image and return its data and attributes.
> > > >
> > > > +
> > > >
> > > > +  @param This              The pointer to this protocol instance.
> > > >
> > > > +  @param Instance          The visible image instance is found.
> > > >
> > > > +  @param Image             Points to the image.
> > > >
> > > > +  @param Attribute         The display attributes of the image returned.
> > > >
> > > > +  @param OffsetX           The X offset of the image regarding the
> Attribute.
> > > >
> > > > +  @param OffsetY           The Y offset of the image regarding the
> Attribute.
> > > >
> > > > +
> > > >
> > > > +  @retval EFI_SUCCESS      The image was fetched successfully.
> > > >
> > > > +  @retval EFI_NOT_FOUND    The specified image could not be found.
> > > >
> > > > +**/
> > > >
> > > > +EFI_STATUS
> > > >
> > > > +EFIAPI
> > > >
> > > > +GetImage (
> > > >
> > > > +  IN     EDKII_PLATFORM_LOGO_PROTOCOL          *This,
> > > >
> > > > +  IN OUT UINT32                                *Instance,
> > > >
> > > > +     OUT EFI_IMAGE_INPUT                       *Image,
> > > >
> > > > +     OUT EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE *Attribute,
> > > >
> > > > +     OUT INTN                                  *OffsetX,
> > > >
> > > > +     OUT INTN                                  *OffsetY
> > > >
> > > > +  )
> > > >
> > > > +{
> > > >
> > > > +  UINT32 Current;
> > > >
> > > > +  if (Instance == NULL || Image == NULL ||
> > > >
> > > > +      Attribute == NULL || OffsetX == NULL || OffsetY == NULL) {
> > > >
> > > > +    return EFI_INVALID_PARAMETER;
> > > >
> > > > +  }
> > > >
> > > > +
> > > >
> > > > +  Current = *Instance;
> > > >
> > > > +  if (Current >= ARRAY_SIZE (mLogos)) {
> > > >
> > > > +    return EFI_NOT_FOUND;
> > > >
> > > > +  }
> > > >
> > > > +
> > > >
> > > > +  (*Instance)++;
> > > >
> > > > +  *Attribute = mLogos[Current].Attribute;
> > > >
> > > > +  *OffsetX   = mLogos[Current].OffsetX;
> > > >
> > > > +  *OffsetY   = mLogos[Current].OffsetY;
> > > >
> > > > +  return mHiiImageEx->GetImageEx (mHiiImageEx, mHiiHandle,
> > > mLogos[Current].ImageId, Image);
> > > >
> > > > +}
> > > >
> > > > +
> > > >
> > > > +EDKII_PLATFORM_LOGO_PROTOCOL mPlatformLogo = {
> > > >
> > > > +  GetImage
> > > >
> > > > +};
> > > >
> > > > +
> > > >
> > > > +/**
> > > >
> > > > +  Entrypoint of this module.
> > > >
> > > > +
> > > >
> > > > +  This function is the entrypoint of this module. It installs the Edkii
> > > >
> > > > +  Platform Logo protocol.
> > > >
> > > > +
> > > >
> > > > +  @param  ImageHandle       The firmware allocated handle for the EFI
> > > image.
> > > >
> > > > +  @param  SystemTable       A pointer to the EFI System Table.
> > > >
> > > > +
> > > >
> > > > +  @retval EFI_SUCCESS       The entry point is executed successfully.
> > > >
> > > > +
> > > >
> > > > +**/
> > > >
> > > > +EFI_STATUS
> > > >
> > > > +EFIAPI
> > > >
> > > > +InitializeLogo (
> > > >
> > > > +  IN EFI_HANDLE               ImageHandle,
> > > >
> > > > +  IN EFI_SYSTEM_TABLE         *SystemTable
> > > >
> > > > +  )
> > > >
> > > > +{
> > > >
> > > > +  EFI_STATUS                  Status;
> > > >
> > > > +  EFI_HII_PACKAGE_LIST_HEADER *PackageList;
> > > >
> > > > +  EFI_HII_DATABASE_PROTOCOL   *HiiDatabase;
> > > >
> > > > +  EFI_HANDLE                  Handle;
> > > >
> > > > +
> > > >
> > > > +  Status = gBS->LocateProtocol (
> > > >
> > > > +                  &gEfiHiiDatabaseProtocolGuid,
> > > >
> > > > +                  NULL,
> > > >
> > > > +                  (VOID **) &HiiDatabase
> > > >
> > > > +                  );
> > > >
> > > > +  ASSERT_EFI_ERROR (Status);
> > > >
> > > > +
> > > >
> > > > +  Status = gBS->LocateProtocol (
> > > >
> > > > +                  &gEfiHiiImageExProtocolGuid,
> > > >
> > > > +                  NULL,
> > > >
> > > > +                  (VOID **) &mHiiImageEx
> > > >
> > > > +                  );
> > > >
> > > > +  ASSERT_EFI_ERROR (Status);
> > > >
> > > > +
> > > >
> > > > +  //
> > > >
> > > > +  // Retrieve HII package list from ImageHandle
> > > >
> > > > +  //
> > > >
> > > > +  Status = gBS->OpenProtocol (
> > > >
> > > > +                  ImageHandle,
> > > >
> > > > +                  &gEfiHiiPackageListProtocolGuid,
> > > >
> > > > +                  (VOID **) &PackageList,
> > > >
> > > > +                  ImageHandle,
> > > >
> > > > +                  NULL,
> > > >
> > > > +                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
> > > >
> > > > +                  );
> > > >
> > > > +  if (EFI_ERROR (Status)) {
> > > >
> > > > +    DEBUG ((DEBUG_ERROR, "HII Image Package with logo not found in
> > > PE/COFF resource section\n"));
> > > >
> > > > +    return Status;
> > > >
> > > > +  }
> > > >
> > > > +
> > > >
> > > > +  //
> > > >
> > > > +  // Publish HII package list to HII Database.
> > > >
> > > > +  //
> > > >
> > > > +  Status = HiiDatabase->NewPackageList (
> > > >
> > > > +                          HiiDatabase,
> > > >
> > > > +                          PackageList,
> > > >
> > > > +                          NULL,
> > > >
> > > > +                          &mHiiHandle
> > > >
> > > > +                          );
> > > >
> > > > +  if (!EFI_ERROR (Status)) {
> > > >
> > > > +    Handle = NULL;
> > > >
> > > > +    Status = gBS->InstallMultipleProtocolInterfaces (
> > > >
> > > > +                    &Handle,
> > > >
> > > > +                    &gEdkiiPlatformLogoProtocolGuid, &mPlatformLogo,
> > > >
> > > > +                    NULL
> > > >
> > > > +                    );
> > > >
> > > > +  }
> > > >
> > > > +  return Status;
> > > >
> > > > +}
> > > >
> > > > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > > > new file mode 100644
> > > > index 0000000000..fd9c489815
> > > > --- /dev/null
> > > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > > > @@ -0,0 +1,10 @@
> > > > +// /** @file
> > > >
> > > > +// Platform Logo image definition file.
> > > >
> > > > +//
> > > >
> > > > +// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +//
> > > >
> > > > +// SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > > +//
> > > >
> > > > +// **/
> > > >
> > > > +
> > > >
> > > > +#image IMG_LOGO Logo.bmp
> > > >
> > > > diff --git
> a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
> > > > new file mode 100644
> > > > index
> > >
> 0000000000000000000000000000000000000000..d1d099789fa794648b86c04
> > > 6f0320a553954764e
> > > > GIT binary patch
> > > > literal 11944
> > > >
> > >
> zcmbt)1yozzwr+6OVns`fYjKxAi#rsGl~SZwaQ7xSMH;L{gF|r*PAO2VloTiy0>$0k
> > > > zA3gV;|D1Erd-skz-pU>sd+dzt`RzUD`sO$1T6a@-
> > > zX7CbN~%f#G&D4T%KZm$hXg1B
> > > >
> > >
> zFwoKe9QOnB{=mY;!otMF!pFhE#wEljBqYEmARr<pCnX{#BPJjqr6MJJKtV}KNk~
> > > FX
> > > > zLq$PDPC-
> > > fW=O$<v_y57f!o$MCqaY$6qWE8ryDtDTT)+U@Qw%gR06G~O1{vC24}cMX
> > > >
> > >
> z20+IEVBF*V`@qG+#=*abiT>yJ*Q5Y642*m1*w}c4#JD&B02(?5CIAZ?hYS~woL
> > > K<)
> > > > zKwQ_-t)Akspn~^1N-8luBd-s&V-
> > > KGQy>a&dLsN2V>Zoa0L=^R{AjzqD`Cms_MGXv-
> > > > z3cJRIUxan{{M^5{K=Dte{}aNWt7QKG^!KYX078s=v}71$06D<t&sga1<Y77-
> > > 6!?Fg
> > > >
> > >
> zkmOqR@l8Kl{#s|UYF@;>+y`NB5f6%1VS@y`ZtL(3A7^4K^G=(4UE49w?T_0SDk
> > > G($
> > > > zN1<Fzi-
> > >
> #BCZuBd*+s^07kU*dt{v81Q>)gk~AQ&^pb*wNQgm&5Qja9BOcG>LPphMn9
> > > > z?<LSCzG-
> E!dB<m>vN(4)gekvjlgi*B7D+O@84|?4X;VNd+d{aB!>#pj!RbY@V{-
> > > 0M
> > > >
> > >
> zPKO!E5zd!e2f}z9zFqo?RzF^@dVZHH#ahPeGa{TZpU_*TS1M}tX|w?EK$R@^Lk
> > > RGw
> > > >
> > >
> z!2NJxRO`lH|1I4eAlB_T*bxj_KwZ3X{pDi~+h}#8{=KYTznUxyJMG)ThL|nWX9zRy
> > > >
> > >
> zjlcdeRPG?hqS!3Fs64*K%@X8ETgA5=WaAe}8M~Q$o<KY<;?t0OTsCev^Aip)xZ-
> > > &7
> > > > zEnwj2m76xl$_MdV+x{H|P#S4>kN+4mZvm5zF6{kGTDNoQ`j$h0&=;2p+-
> > > Mm#r;q9a
> > > > zs>e7`0_!VEV8!}BIp8l(V4*`i?MARK`>JfxT(4<Y*rs-
> S%vWL0!r{>*Qllw5>&m((
> > > >
> > >
> zI+~jN%Lzeg%hnEzdBDc}>Pl=WN<Bm6{2?g>c}Qq3kngxNWsM~L?XtNCxd(st+&
> > > s!y
> > > >
> > >
> zI*EgOrXSDx282+Z^`WkNLp5%?Z5T!MlIZj?Z;RlQ`kXhU046A8Ah5sU<#$$%HnW
> > > 8p
> > > >
> > >
> z%i@k_8@M(#J9<$Rv@YyRIr0Kn;u#U;OMJW?y=?POH6LAyzUFU)7%XSboO{-
> > > I1(G~!
> > > >
> > >
> zv&NF8LJDonPp@=)(heT{7*k(r$#v`!oGxJ)Oxu5Xb))L#NmJ3CE%K@T7NbCa*<Y
> > > 3{
> > > >
> > >
> zSkVIUwM1Y;`p{X;$6MH+8+5bvi99ug<GoxS<aAQHwEI+(F1~ZtI!5~r5Mw8E9(X
> > > vd
> > > > zUrJtY`3-
> > > q7^p>6A$y5?)h$gnjn>G8wL;vS%m_wlDvulFiweq(@6$qzti;NKBX@X(6
> > > >
> > >
> z;F*7)|CQu!YNVQ8kWB*T9bgj@^m|rs1G~^qc*#HIz1h6Sa<Arafr{L!p+et*ooI{!
> > > > zMIsQB5uqH1voeu*r4H(0{WgJb5FYpS-5#cI4DNinbgL(w@pbDN{bLdE=I-
> > > +BLH<6@
> > > > zJDE)m`9pQthFm2ursEo$*$4&bDm7)9a5WK%-_c`s`B)nR5h-
> > > @4#bnHT`3_b!JBHow
> > > > zxyGDgImnY#bM@V-
> > > uG(2(e5mx8F$Jwj7So#v1GxWhp>ow^hy!(aeiO^a{iey<$mjMM
> > > > zx06lB1|z#Qq?(cCl;i<WuAU%C)-koQcf??CdqKwly`#s}-
> > > )2PTm^a{pEuoxR=C#gC
> > > >
> > >
> zs@TJ8#4zz8InTL)<1nfss&!dP`@^_Ya$?Og(x{@I4dURS)bN{D0#kL^gFy7@Ppu
> > > ue
> > > >
> > >
> z>&J*p*N`Na;KD0%B22CEY}XdL$O}WaZ+p$(3wB9c1NkA!>=W=o3Y>Cg12TO*z
> > > h4fT
> > > >
> > >
> zSA%uomW@1Gl5o6W|JkMiZ5ZTo2JJN0fGl5hX(@{54lqcN{n;X4wBsu(cO0n?&
> > > $k<J
> > > >
> > >
> zsY3z_`2DcPSkp_>0+NTydjm@!SeX7`a!6K%9sd(~(LGQ<j~Pc%LnEupS5FcO*+U>
> > > o
> > > > zsre5rS}aW)s}@)gnlg{qR7-
> > > r<5@SomE6N08vY@4nCv<_`8+xJm_R8a=2_UR+*Mq*)
> > > >
> > >
> zgafvZ2Ljj8qM30Bw7#k!fg(zOI?QC5TacQR&pROVy2xtX{vDwB8fX<$yY_KhYTFe
> > > `
> > > >
> > >
> z6V!988l(NgW_i1Dq<Y(X2h&?ef9)ZCl@KwL)yUv}nzilJ1F5Dx^?+I4;WOwVxu_e!
> > > > zrzuo)hf7U<4or;rr^mo2%+RXu<Nno_E-
> > > MqUbaW^+bO&JL!B!hoy7_Fpt8o9V3-J8_
> > > >
> > >
> zw4D`mw~0ZLxk!!$nvP_poz__f6yn{K9eSf)fm1_~&V59f2MJ6{;xb(dWT$mSzW
> > > WSY
> > > > zCQm-AL8Vn?b<aePPdE_Ih@94d?-qAua5UXMO_vw!e(-22`4Zj<hC-
> > > p6eI<pRAWZsS
> > > > zb8l&H%4Ch-r4mX`tuFn3S!aPU6@1f@eFyM^e+Ki-
> > > R(kLYWoNjiUT;*DRZNqc>Boy#
> > > >
> > >
> zsU_#B%Fd9O{MYP)g>yon?|`q$sUrm@?xDp?`?@DAql@r!<Mk7UpO6q~4Sy#
> > > 3d1$Mo
> > > > zTo{ex<xTRjqhMQ<LFSm60Y<O<I#Yc?bNQnTO2}AiAPws`T^iO`IV-
> > > >R0o83OvX&P$
> > > >
> > >
> zoGji5r%^OavL<0l$alF^vw$Ac>|(o{QnE^3Ry`M*a?wj&)+Y_xz4E&rZKb(WmB;a
> > > w
> > > >
> > >
> zz2WL)HB+aw{~%q=@s*V?B2}?&z5{|z(O0%Y)*qu1Oe@xz@Kb9;+uQQs>ULA{
> > > b14sy
> > > > zaP1(hq~*)$ZVP@VRo_`kBo7p+qT5%FOI`_0#d(u0b>c-f3!lIVm8Bphu<-
> > > l3=^cEW
> > > >
> > >
> z5u62#D^7jk95y&DxXZ`h>b@AM7?6OO@AkWH9*FHe`{NFfJvY~84R4JAdIy}U!
> > > X?xb
> > > > z58KO(*<D`X^!;n1{tGhU-
> > > gB>3{)H<UNZNvr5pSAGpABrc$VQ~|o6WLIEux|oxV!xb
> > > > zjD{B6#&qBk=jK*4&@lte0NvuLi)GNxZo1R;cyqG1Yx2L*Yj5>_w5=ykbO6-
> > > OoIGc@
> > > > z(%$_%q49Wzrf=8f*!ro}6KlofhCpLZjOE->Z=+CSrX^7{Q-
> i;x1D%xidFpr^$Jo}7
> > > >
> > >
> zhmkhq2W29QI%yJysC4Kd7#(ofy_73OyiC@y7PKyszt_yV#^~28xfR208mp_9oa
> > > e)m
> > > > zG^dHP_;2xo{tkF$lg1()k*<*C)r*;nOIP~r6ad&0X7agWw6Qp|J-
> > > 7|syRK*C6c<&+
> > > >
> > >
> zm#Ss4Iy0oPXLXj`W+zW(@qwy&V@v`MIHYUdw2LY_DccN?H2Ld{sdDKhz|dy
> > > w<cRAV
> > > >
> > >
> z&Gem_HJhM%1tm_vV=`caujL}+9iW@4YWm2Lc4A9|zke3g6~vK6_RLS|#lj5s2
> > > 77P{
> > > > zEBjYSK0StH-
> > > KO&ct09341)J0(vgR5_<Qr2HAev&AVpIG+5T^w)kZI{1r_^2bvi*|F
> > > >
> > >
> zcDnL_KAbl^aCHKjRI~pisA~@sU8+Q)Zt{k)*^a7a<t5S2=hIZiF*eN%GP363fJSp<
> > > > zcSQrUsjo`|cIV$*k0&&gqjq3!yO`Y-yXx&-
> > > )rd!0)UwT<X+mDe9L|a3$;n<F8nDj0
> > > > zbt2XTx~4+j0mf`@)4?nrk_$M>$6^uZ(~Lx6J$-xXozJ66o%(}%sgjYss?*LK-
> pR$?
> > > > zU%@5+mRbI$3$X*b?*OPJ&08okXrqNVeO-
> > > 9(A*20F*RkHp?htHs72I{MQs4c}4ZeLk
> > > >
> > >
> z!TU2Oso2@(aJR1V5X3wDaphN2Mg8&AeG*o(hZS5rss?Xn>Vc!QRV*{#nC_en
> > > 6@50g
> > > > zVKc}m%KkiBa%Kt{QGrG>syls$f6@-
> > > UE+Ri1de4jMS5)7SA)p|w1fwqa9J?pC#kfXe
> > > >
> > >
> zGxL@vL}J@>8?yRiHd`zdLL4I1D0c!8#&K9GN42A(py^jwrB9cRGct&$orzhT2;!W
> > > U
> > > >
> > >
> zFfR@C;7Yd<N$aq3lY40;{xgnx$m>jpcgp*rllkD@(_Pi`@^5xz<3~fgiuUvMmtO!-
> > > > zG@_JmlSGZTlwMjxkgjGKpTrDI<GM9TNySk!(_9<8ixLJ-fOl4;Jxe-
> > > K_~6?SQ|fCA
> > > >
> > >
> z*E1W01uG`y8tZBT$%ZihW`T|#(O)VXN3Df2Vv6Y}gN)k{Lqi{RJTkfP^AqcmkHfp
> > > F
> > > > zGZ67BmA;S*tg0KL&I>z<z?M+HBmf=Y@D3o3@UQ>-
> > > JQJE@y4|C7IZj3HX(Bu)fyKW4
> > > > zM_Lmkd1?IK<~U-)bUB*haUKu4-
> > > dY+nq$>gA`eTk+_~zY3uflwPv_xjVj~sG_Rm17j
> > > > z!yD==(psSU;~lX5Eeo<UUX#XWbxQEc5$m_VHv<-
> > > gC`E&MorI0!o88rPSJXA3VSq4J
> > > >
> > >
> zW;H2F4k)cZSl4}IWHQt(BebeK3Lg2YPDSNn;WRn5Z+zYE#()7sM==;A4t5VF6vUf
> > > T
> > > > z5#Nbe!Cs!XU6E>gQj+ky-
> > > {@C6772nwu!48=I>ERODa#OzoOJI%F%nh}29ST4E3B{(
> > > > z!Be@Pp{|$+i%1ePIs17uNjh1LQa7t+TJ~;tvm!lzBUU@Qtk!-
> > > IOLF7X@!35lin4ES
> > > > z$q5#7%y*~Dyzc-tsrB`-LA8RNHe{w;>-xn(E#n4-q*6GB-
> 9d2Xq8+iaaIgcL$=X2U
> > > >
> > >
> zcX?*P$I?ZafVe1pRh)XApuO$7%#e8=$c645;9^~d?uQq2*|kT#QPHdAIX(fQX8K
> > > nD
> > > > zCf&BbL7v!-Oh*ez<X_bjaLgGJ)a|*ozS4@yfc;pPuxt$pvc0|T{2|O(@yGv8-
> > > t%Ao
> > > >
> > >
> z(A(QKxtlrR`3+w9Tn22T5~6kRVKu9q={eu4?G|EZyZcH2dw2o7ypkWS$&rrWGJ
> > > R-X
> > > > zYRS2$b8c#yQ0^V%$-s+H-
> > > j&OZo~7OFwssk_)$i;vp}qqU;Yd+16{VZ*<`yLu)0=?x
> > > > z!iWZ=cLBcX1S=~eT~4wz$HN&nm*iRn%L1b-
> > > y^{bgc&)ddW&TgNrHAuL9Gn>s7Tz}F
> > > >
> > >
> z+btRUDT}eU=)~&faeUd>cG=?hCic4iQ=i;ygmP?_c@7yHxTS>kEsut1SGJp9yz!w
> > > U
> > > > z1N?El)P3f9=N&a$L{-
> > > pdtjgPjuX;~yQbbtecL0Z?=v$m>rjs|+>m|&cBEv*uaWV_`
> > > > zt(Dxx=Z!+1V&_iRq9ZnOWVhhRmZXUp^cJmdw+<8-
> > > oLRy<nXDAOF<0P<gqj`B63`4f
> > > > zYueOWi3y&(O%PZXX71K;;_cxG3+GiX4ub2-
> > > vVmRhZKXyB<G9}2B3UnCn#s+Rd-omV
> > > > z#t3rBMY48UydL@618@g;@%uIgGS=+skt=2xm~kl+#w`1Bg62E-
> > > VPjZ2ZedRXJ4)`m
> > > > zQyrg))>f0D%8bF1;Q&eVV-
> > > %;U3qox$b%4EDJ~^T77)y3lJZMe(Fr!H9gK2jC+)l!0
> > > > z;U+!oA^V=JC|OKjuoxyO@DU==pE$#lZkMjuLYa4N8-
> > > ?uyEKB>^7}M0iX##x5sV0>|
> > > >
> > >
> zZ%f8<2UyTC#1X&Y@Ae#F8C|WuR_l!s6J+hu)3t7_Bb3!^lvL|h)z+oUg73~=+Hq
> > > %t
> > > >
> > >
> zzxax+s3$tU$fL3<^<cAX%8XBYWBSmJ;QeWWokbt!Q^;?F6i&r@7IX>)gm5baM
> > > D=rm
> > > >
> > >
> zR!gARP?RN?S&k%wUL!e(eMn}!rZWnY<OMd8$`>!pGD^2c@fIMQ!+vev2pgBI=
> > > }L{=
> > > > zGI$P8+BnG?P*YWN7Cn{4;$?)a7;oqzJ8j5i3@BN@-
> > > 2r&ZW5d^ftTcV^I~<nMZ|74r
> > > >
> > >
> z4Nz}%_Et$GmoxyYppA!$ZF6dEY~q>&v+u?7neSLgLF2r?Go+}6Na~w%x_5OD
> > > MRP#y
> > > > zx<vDz<VIHo4)mJMj}3YfHuik+J(QxC`AJArckW5fYjx`!9oYIQSnTLwYu-
> > > SYR%yp#
> > > > zx8+cP?mJo5X<kvB$w}ad3|81-
> > > ;(|z={y3gw1@t+IRa0g%+$nz3=UG{5m*v~hhpK9)
> > > >
> zS0|0Z_7qfdef;D^``z8BBewWOC1tVO_ce``s8#V4&ng$v89g}hO(cvYlS2ZT!nsjv
> > > > z{(<>dC-
> > > X`gy;m<Krvtltp0+*9=^k(i_A#?4@T4ZB_l(5b9P3aASm~B+2fBF@evzP~
> > > > zyMi@-XmIp$F!<Bp8IACRTd=TW-_tCXg%KT#ZXujK-
> > > nmcl<0)*EZEf?45YKDpTx0`w
> > > > z8~yxw085D1veo42qdUL|@R8?(m^i`3SD4c@*ea-
> > > B=Td=u1jBsNMQFQv880yl&b)}m
> > > >
> > >
> zI&H5IpmhACHRHVM9SLH}&!XoWHdoc=>6`WJua_!{D<#JR4Rlw?Rrl>NzJjaQB|
> > > !+6
> > > > zCg-
> > >
> dmdU!yc=R*`GM@Ys9$<KMW!omJaq^|1BXh0WoZ~c*+kQVP#My{%lgyodT*a
> > > ~AS
> > > > z4F`*9+-&)9@uC>X0IfR!vjLM!iX1L!!-x)>1C<e}T92CqQIW8iZma$-
> > > omU~(K8KxW
> > > >
> > >
> zh3Wyf6GNX4vv)FWhDB4+*sF&Xgu^55Y&#<ZYANJXUkQ#_LGy^w0Pp#_Qd1Vj
> > > 6MWnn
> > > > zx-
> > >
> 8jP8E*|Af%h}glpO2}v5^$VmxGvK?^EX>g9kz?CrQMUW`d$GAoEY=%SWK#EvZ
> > > 7M
> > > > zCIBm(6h<-
> > > gZOO9)qXwr50!%Rnx$dP7cyGNod@G+iI`x580UhbpfS$svDicPk^61h|
> > > > zVtFY)!p60(YSPS>-
> > > Sp%5F+t&nU%T2}W_qC@<zCHFE}+aZE7$fWY*PAvB5EwKyX|OX
> > > >
> > >
> zZT6!*zwU#Wim8fHQ2hl%bQ=3fJs`x7TnsrXBTTIdL~9<}#CSPR*qCX<2NGiG5X
> > > @ok
> > > > zKxsTpk!%Q3Kg2jUpy-
> > > O9;(KTdbgDJ6;scGYaF)0|5j)KC>kVVZm@tsPT$fZ|sC%|^
> > > > zEp3;|{SJ9aFWMBU4t)pzYQw+Ou~%#(UI^-
> > > R_g4<b()Ng$eE#<G1_J=Tcu`CcLw=|i
> > > > z%(W()+_Z3V3}4pYWDZUOqS;YAc#u4j-
> > > N=95v2ZWoI@EAQeh3W{br!gG3T)y_!&<V{
> > > >
> > >
> zvK=34k4d~*!Ul&RbhX7?q+6>NeVKlx<C+46{hpgGe_7%i?Itd5ESh1jz65TYU<B)6
> > > >
> > >
> zT(gY^e<qlOg<h|JRBYp%qRMT_7|P>h|JkMrxdWKsYr{6+z>b9$uVZ)A?l9u5Cw(
> > > =l
> > > >
> > >
> zv!gB~*kX;A#1N8Cj4fPR!MLEUwXGm%r4>Ad`r*4Vt)%f`C2ewpa|`$M5%B`BM
> > > UZ=2
> > > > z!-A=K?rk|78$~${rNUm}Z3H(kw1*-
> *fEAZr!IN2f{X*~K6>^$T)|@?!FIt||O3~Rc
> > > >
> > >
> zhA~UA1c=ELq!ZGDoet9`@h%;Ej_FmkN(~8r7Jh+t84f&)Korw>l60WBT&6aT@d
> > > -v?
> > > >
> > >
> zm2;jmw!>$N0vgjF7mNsl_nDja8A@YW8@!wYl~e4q;8#l<QsMfp{}Z#xX$m(J|JS
> > > 5U
> > > > z9NrwVzrIEkC^l8@BmPxZ*HgE3F7n5-
> > > Ncj!BoI_AyJsD~|g=`+k!oi7?aoWJH>kCbY
> > > >
> > >
> zQt*{>`kIUDupw3OJ)m&1U$!7ZNBJGdfC(e{^h1bs2hWa=ACI4@?GrNOP@&>t
> > > S}U!k
> > > > zECP-JIm-
> > > w7Q<wFa`47u(Ng%${2+TsSB3DJjQaEnpX^G#QC`x_$O#30(=IHDJKU{*E
> > > >
> > >
> znq2D!Ym%bl!@bUtk=L=Jz{iXJS8YqX_HZ>~epKAz;|Ug{j=46gw#fV9jm#=H2vBa
> > > F
> > > >
> > >
> zqc{VeZ9aJ*O|m(R$qV~<UD$Ra(Af(o@p*x@kC3nQm~)`gF07H6Fvnuk@kGM
> > > rT~U&k
> > > > z63%C~>q0HWFP-P-
> > > jXOK}kK%AvQFuPwVJ|_q1I**~ISx@6mv)jFu@9ScjpGp;_667o
> > > > z830i@PHE!H*EWW9DXClZ>WyakQp5)Cd5K$mk8<r%EMzSPO1~jUAY-
> > > R~K*W3(sPjhD
> > > > zVxxqqw7uKqcjNqR2LJImlNHHtF`z49(d37vOCS8{fQJ5OB_6b&I7-
> > > v>eAGhq3z#f1
> > > >
> > >
> zbzEj}>%N~(@nsTk>Um>1<za^9C_g)2z5|Hf0aC&7O(9op_MM}qF70B#F>~y!r6
> > > <Eu
> > > >
> > >
> zFJ)uQ+NV9~XYboORJ?;};8GLFN8p5X3yu=2jc?@ut%6*~108P?KmgK4(KXNvKy*
> > > pL
> > > >
> z!KVf>JP@j!sH8hKV);=S15yWfJ;N=NdgwugYx!YmrXm{I%&fK#TU~qH|A#I-
> > > +EImk
> > > > zpotaM0qAm*kA9VSUPJliV6>b$R`a29w=RLI$OA5((38Q_U-
> > > gp8_RqXAGDr*$6Yc<C
> > > >
> > >
> z!A1waJ_hCOLq4C$cd|81&4q@?@0Us`sWP_DQP8j6WB&i42!RWAzfG%<SZBu
> > > F&jbsw
> > > >
> > >
> zcV=sC<2*U)Zvx6&@HPHB7N9WZj^zAA#F%FC(v2MfoYnCX0cE0ops1{ry$ggR6
> > > NA(M
> > > >
> > >
> z2^+ABiz4||_DBnt_g`NOAgys$^T??YrTCx*9#P7gsj_0wsgw%}Xqr<N{rdWWS!Z
> > > g-
> > > >
> > >
> z4H3qP8xIrMG3{_HBo`K3$qL!mbiXxmITj}Q)l(geS7|Y%c^d&SIuIL<81BIiw@DA
> > > 8
> > > > z(|T*1(_W3_%-
> > > s1!Tv(Zw;o%;NU=NOK?F+(uv~UO5Jt(>ZsDe6<Q8=2Ov_9_>gm+$F
> > > >
> > >
> za=PD_ejXn3u=GHz!=3g65%;*%m5TnFjrTr2{7yPIC{>vXfpr&Gg{;#;sWSJ(HnZR^
> > > >
> > >
> zP%n=w&xEgrDM*LrnO*hLBj!dEc|0|899IAuaAz?2JI#nH^vG?g7Q7VS0!wCo<Z
> > > O@^
> > > > z0KlkE0xHh-H6e^BOp;Ma3_*%o2XMn!Ke~iklAM@k2SzZC`s>rM-
> > > 2nW4G!i@hv}9Ct
> > > > ztTN_#K~bl5i+0oZfV#D4EkU_y8{zv-
> > > hX`i~&TkhTx_KAAlZMXguacb$Fjxx~I@r=Z
> > > >
> > >
> z!;NFfic&3^+z5R!85}UuWhO;Z!ZZL394B?me49=eqOuTdHBR9N^pZ}Io)F9_a&P}
> > > e
> > > >
> > >
> zgn0*m<z+k1`T1D%?8}u2lQx2_4pWcD?*${(tPIM4x*LezJmObkESuVMX6#Av2{
> > > @)q
> > > >
> > >
> z;%=G&^S5WtA0KNPuIXV?5iorWd9CAqQc9CGggH)_z|f}T&hTT}HJByBTw4uV&
> > > jUGO
> > > >
> > >
> zfaCO#+6fF2N1bE*vTX<ntB`4Z$oawb9h#`$Qkhrb`F#0x2$B;|F}n}#0G7yKJ)3G~
> > > >
> > >
> zGmb;+#!8?Nu^=B8B}~6_koDD8@oQ0;8LxY8$1bzP8AJ7)q+0q1`mE7ui}P`G@`
> > > CKS
> > > >
> > >
> zAGrqxc(``};NHt^BcAj<@?US^gDtZwO|%L454il+QUjo2Eadr{=wMYx3%+4fL<M
> > > 8r
> > > > zCgthu_mBMfm0Q^Ou~pM>xd%f#Q$S4T0w{R^-
> > > Y(1I8*G={I$F4+ZH`)EHImR;^vulo
> > > >
> > >
> zqEsVwKrT_obLqcU^i)YhN2z>b>5DYGpEo^I_fD@eR5KjES*2j(i^*^&SAK0jogZL
> > > d
> > > > zJoBPN*F*ocb9&zRk?eQZ`|ljO8R|Sr@l&A2#1FN4$?-
> > > j*0040pa7_;kWC_KwXa5Q=
> > > > z@Jl<Qi2U@Wd4o7@R+h}pWQh7Yf;)%&B@-7nJ`-
> > > pAtx4aT(+#=;D6HH83+wW*((szd
> > > > ze*aj?o#`ShhNSL$KGT)e?==07c$=nVR+_2@j7p|_53UWk4-
> > > p<q_m!^m9KMJoar}XP
> > > > z@k8^U2UL?(EBk)#6yEAQ9WzT6y-e+D=3KHcJ4s13@F)e80xE{-
> > > LyIf+zYrt;J=3($
> > > > zy=b|?FcP<^U*a1C4!G9G8Z`A<(0`-
> > > 5rbNgd!!PF>3VpnFG+GFsh#+<(#y@RjrT!NG
> > > >
> zp)J9QOI}6gdzgjC&|T5<0AA*gpSSj)kj608I{nqe!>FkP(W0L0QjS{FPf<*qrf95|
> > > >
> > >
> z_3?R<@yIi0yQi;SnprC>bm|r@Hait6ce$t0sY6q%CU(YfdKEX1ndOgp&H>?!J+u
> > > Tv
> > > > z_T$ns^dNh;hR}ivc2`(HlrR%NR}YWhuXxS0Cw20jCM<E;@7&)<6E?4-
> > > 2r%#G9248&
> > > >
> > >
> z#6snQt3jV<3;8Q9F3vYgB1LC%%ZPn>#)=Zr%GCX>A`>>euKfT$31(FegZ>YC))nll
> > > > zr7O;hktJmggtyk>XEX`D$=&X6I>LpwNFMPLGb`G#{)Z?&L+Dfq#-
> > > WXYFemoj*{|FR
> > > > zMK>|)y<Hq8Z!o5pqA0FvVtx%x9oUp-@-IL<YZ|4GW-
> gvK2CXJjg~uP4Fm%B-
> > > 0wOEy
> > > > z>)o*On|^rNdNqi6#-ylP;?MR%u}1`}NOh`nx9G^GfUxsGYrkSgoS*7xt$dJ-
> > > bmG`1
> > > >
> > >
> zq9e&siyn=8E`=eRJG>G$8U>^t54w<Ui>jz>eUS9XZA3_8ueBvjk&Ce;0@%PgzU!-
> > > T
> > > > zawecNLK5|`Rw}A9eW5D8-
> > > SMIPpk6%f0G_g*2NN~bGLK4GxM%KLEp3cipF)r%cziR-
> > > > z?UR<B-
> > > y@PA%#hZ@A2C_#4_!xqUu`zx(HRI2ad)pAN1Y+fGTf7M52ef0<c;ddaZhzT
> > > >
> > >
> zC_Nho>dXp}tMw&EkEI(K?akLs4D<?eUOtNX+rmaoFky3z#;CL{D$Jp<#aTH)9w
> > > hMF
> > > >
> > >
> z;t@rqr(q}>k$5;MgM#vFBOM(KP}+30(<^IfD|;N$Hf|BeE)O=ovxGX=<<B$AZ}a;
> > > V
> > > > z$Rib^)uXhoC;=+7-e-sx3|KJt_9b@ZCSL^Itwf1LXy2Y-tvxli6`j+7j0P8v(r8DK
> > > > zv5C^AeOHat^{btzSvH)_T-
> UyHP3=R5`=uffP`~Y4LlViPGn@0nS46(lLl})yAAUYn
> > > > z@{5}YBdtMfl2&#vHI9=-
> > > fYsgieqAdo`od~$n%ifM1<v=21h=~xCNB*e4U&l?5(^my
> > > > zFsgM-
> jsErSWEYukS^0s${WHgJ)r9>Pdrr%`#S#>zw#pkeJSqxl<3}9YZ!+bPL018-
> > > > zL|CSXw=Jxd5|Jdv$2^^QEnG;igadkzVrjG{IsPX<y6t*y%clEIIPN1-
> s<Qm+b>YoB
> > > >
> > >
> zfK&XpJgYP(y?wH}QBYiTwPEg@vYnUI+3|6iONY#|7#;n%?^~~e3KQ@Vm(03(%
> > > x{&`
> > > > z?JlMf;H&F#-
> ^{UKR{l#LcCA`Ui|P7r>9f6Dgi&*<TD;JAb;J2(uHil|C?pWGgiRTb
> > > > ze%K2mqAW1b`G|haSJ9L;HgFoN`KkVT`~m(nT?j;nbDKeiF6-
> > > ;S@mRVGNqQv1JATd(
> > > > zk|y!Q7bMIPOXfH|e%4qG7lty)bmsKdc4~{CFkU`QoZ1(g>I&)M-
> > > n`$WKrOne+1*Iy
> > > > z;;on-O@4eBKt|r*U5j$PL{sy}X;8agm%wWJxJLJ3H8H2w9xL}+lAx5+`^J-
> ~*;PlD
> > > >
> > >
> zNEBK$y?ueKFmDfMaRHk75QLT0UkDYe`a4bYajq@*yEZMA>7vy15*(sgpxX9xk
> > > S<_b
> > > > zli3orj;~h#tF-9v&gQ8OqxW6T-
> }sAa$hxxEK+qQ{^ikk0P6<&7J5_;)$Crkr$hJMw
> > > > zmW9b{54MgeThpmSd|T^BNAFAVP;&)5ME!RFY;V}-
> > > 76P%Ziwdh5qHZcQ$ifuzLe|Eq
> > > > z4o+(j8-K8KU`}`H9o%%l_{ft)VHlHXa*k7kJvw&G<LG-
> > > dGM13zGiyy)gypmOYg5(j
> > > >
> zdFLMu&UsSfb|TOJ^g`<^RV2aPVlrA?^8xn!4dh2;6<4F+Mhm%={$r|k;4|rQ-
> > > vCM8
> > > >
> > >
> zo^s?#hlC^jFnEtFMrq(#Wkn%;XG_OpoKa;T7V%d@{JvxQSAYHAPp~h3JDPsF*K
> > > E<-
> > > >
> > >
> zLY&zbZ~B|@;pUVb0~$u7rh30NfgB#!D4gd5IwlHGpeh|$+D_Po=KASOQ~A$;R
> > > BrYG
> > > >
> zrH;Ni8|ZS)y=)#*k&(Jz^kl1Pp^^$9zH(09rr)<|%9_U<sPsL#ojdt_;*{7_yU?$#
> > > > zHsi+rhU7NPo2-T*0<wIsr~lswS&aw-o4l-
> > > |F{svG2NhZV*siLZEK1JdNzm|?qS`CD
> > > >
> > >
> zHel+6UA6W4DtDhN1!$IkY(3f)+|{w^bZ<6eK)IVKAn~U0ra4qL4Zjdw1*o;IGxz@
> > > I
> > > > zE1+&2B8Z8)yvlVG$SAKk(vXONX(+~^-1FXzG0GpvQOe-
> > > U6qnNFq;jyCV+yTeeIe?M
> > > >
> > >
> zF=ax^az!;(Xu=y1W4lajzkVj4Jw0rrkhO|zT`pTp)T0PWUl7}o804c_)wWNu>M)(<
> > > >
> > >
> zRfP!DM$#G8^^nzII^#Y91Lq)%_wBs@>jOjPYF}0w^Nz~Y{&Y$4YU(#qe7f+oINR
> > > %0
> > > > zSneZe5EyK0r_Bkn`6XthG59f|Xo6i-
> > > FRL}URYdisz<{CaM6zg|r!KO?%wM2;ud7(O
> > > >
> > >
> z`aPW0(IzOpA8gG_a9lqzr&*EUhPTNSXva#4rR?$b4p1fe;=IM@q(aB=Z!vd|icT
> > > m}
> > > > zGpPUE{#SsKM;tGA5@~9og4;6@QNhN;_xvtc09-
> > > i{RkcWm=QxV#4=QOo$!Oo&57%&p
> > > >
> > >
> z;5H6xtC#a6@RIH0BwLOrK<kt47gWVC$?4D`N^VkJ9hnEFR?h+(XG<oVhLeH)yv
> > > t&O
> > > > zVhP%YJ>qd!{#3X-
> > > ES^d2SW*WfLq3MSUMYN@0anc&jB{JhPy4^7n#vy}enEjqrAEFf
> > > >
> > >
> z@2o#g`S$=uhs@SZJ4+CCl~9$CS9)YiiBZvUdHu?fR|B$d!jfs957AjP*l4u1Y43<m
> > > >
> > >
> zts;j9&7Sr%wK)}cqIR}m87;s8E6l#@u=eLem3~gSwJGQm@6g$9IrZTBv5fVlb(^r
> > > v
> > > >
> > >
> zbfa98pghse(AQ1jWwfsgSo@fj(bhtD5970DT`wo{?1cW51NqGhA(L5L*XB}}6D8
> > > b_
> > > >
> > >
> z|Ey&EaWnSu0)OoHzOeFb^KHJ2@Q63ij7Hh3FaeR8MX5^$752g}VhlYLP$>0Jn
> > > Dq14
> > > >
> > >
> z*J`h~t*11n9~e(RHlxPXC?WpP3H56~Q)@kyDK$hEd_V&0I4H=5%>9Dx(nv}Aa{
> > > _zG
> > > > z-
> > >
> ge40o9{8bjAT`l*?b9TT<mmOqzLjP6*7|GTs4f$PAYy_Sob(`rl6~XS*MW2mxUJ%
> > > >
> zRDL;<#P}IEu9TkKF*}*FJJCMtL?GirpZDi26FrHl8@Rq8Km|4meIi42QhTLtxjLeT
> > > >
> > >
> zbYtaGJthq(k@oyY@Djp_N9nh8#y`Ybe!^BB_s0I^7_4$#qDn!xhP(2i$JV(qITOp
> > > 9
> > > > zqiioJFug}7!O_NMq#pugIX;83J?9^g%5->9J0*p`IQ6=jC&wtovz|OC2p^U-
> <2a};
> > > > z@A|y{W&-
> > > ImypnJAD=1qL_$m>JR{vqs$Y>JCwI3wdBm852pI(`|Zt3YMpw1pVYh5-`
> > > > z85W<vB~$-
> > > U<WG>COBDIVZS+QOO}q$(TQ#Nzn+;_qKSjuf7Lql~0=#qZ@edc3Gqc6w
> > > >
> > >
> zuDOQuCqf!yLs3jl)SkQ_Ib>6(x83F)+CJVOU}ZPflTLdUhY58TyUP5Jnph|V8JT&$
> > > > z0i}|KN97gmPgsbqeyl>!|HIdR%nl1D7z;7re_vb?e}4Epe!tJsl-
> +wy=_(ZkJg<DT
> > > >
> > >
> zEvEL4A@nTNj`u2D%c+U6GRm7sMUgfrmEU$uppRs#)bXY)X6JQIyX*1oY*GW}
> > > k<IF|
> > > > zaHNTenY}%}0>Ve_-
> 3}%b8Sv`foIqQrrT`Jps((eiB8}y(b9QWd`zJ*gt7u_b3)YqS
> > > > z?rft8TYK|738T20zTZ3BgyQdj<yF!!-
> +<;)C1L4!1c_^;4;S94pF!2d`qPc;WZ|Gm
> > > >
> > >
> z$=p?mdTXZi?WlOrNz?}Hn0kO+BcXq!w&!+3;C?@ulaBw^a$IrbvICn|4oZOjp7J
> > > @Q
> > > > z6PsD=TOH?YVJq7Ch;FwGx#V1npTHz!^HV!(nfI})F4E_bl>$(?srMvD2piEk-
> D}A%
> > > > z<j~7KBcje7v9yRgz`2d^!wHF@gh+a`g5J?Brxf-zvx0$7o%Pb2kw-
> > > cp4adkG{%$o&
> > > >
> > >
> z%dt$oANAhhUA5or11|lcp*|;ww*x8)3VP^z*kA6OpErN=0m))ADYTF@`CT)6la
> > > 8{?
> > > > z+f|ZWf991XRNc$TvQ|@weV=#ElM<i8=Qsn6Rr;}-
> > > n7EUSp2iVM<FUbMZw_i`22q@?
> > > >
> > >
> zs6kr|WS5Gg3(NEg_h1YzK}k#5M~9UYqs%eZ=H<yJ9V4^WrSohg!wRa?csHNr8
> > > 9x&m
> > > >
> > >
> z{(ZLpi2xlAu@RCsm(4Sx`08)mNv&L8r%^9&=KXXiq!o0uc3c)s_3#dasg&~qSB{b
> > > V
> > > > z8g?eJR!y(dC;=%y-V>f<o<nsoO6GqeD%xHE#XYZHRHI(j7p+CCP-
> > > Ui*0n$KF#F=ub
> > > >
> > >
> zCA%k+Ua0Ux^ZzjSk7Pm<?^iY@oAz8#h_IvYeFI$QirdveGUY0{RKDaglnu=1pe(
> > > wB
> > > > z*40*Kn2|Lvni|*l96DD3|Fz|IIHPh>T($*^maO<uC)t6MZ+}Z|-
> }}*ULjzg&Ifvb)
> > > >
> > >
> zLrpme#6GUjiz)KUncK_9RK5TE3Hpgo)b5S<asRor(EVPDhSB*eVcNWZeHDMh2
> > > Hc(A
> > > >
> > >
> z^P%@%9RB)C_C;*~yZ4HspGFI0Lk$XKdV!fb#%D{fU>^&ro^xH*#G(uFur6owz
> > > MXtg
> > > > zH^0Zh(t-
> > > EmiaBl>`Tcls+HJnZoyQ30vFByCb0O*`%L)nX5D4}#VfMp)J~NWKw40M$
> > > > z46D6ToGO~*lIx|Qb75H3?+#X*QJ4HgOgj?bLnD}%eB&%k9(+&PNM-
> > > 6vy1)%G5g&Xm
> > > >
> > >
> zBX`D*Z}!UP+%JV68h}7!&Cyuz&u9V}7g4K{@atIECE=zaGy5se=l;E2KAxQQ7dY`s
> > > > zr3-
> > >
> FihZjNNS)Jd^rnQehLso_+hXq2zxeW8)=t8qkWCCMC<+zh+vXF5M*tI8tPmHQp
> > > >
> > >
> zcIF<>JxmNil^W1!9({@=N~PdvE&Wi)<0FQR5(FAm=R)N;VG|Ne61+HdUTm1sjn
> > > }z{
> > > >
> > >
> z8d8p$uq*YdNAFH_9Oyf<DX1=yz4b+kSJ%<hu`MRZnK2M|$Wjau(<cw;r1U#JF
> > > <VIN
> > > > z;&6741o<3%PP@Ksaa4OB3)64J7cnWLei+@k8LxE27ubX-
> > > qS4?UH?hja^lyZXxwA;|
> > > > lp0r(+`K^)Y&AL5T(>;a;tp795|91lNzXsubc7WVX{~rvVe^USe
> > > >
> > > > literal 0
> > > > HcmV?d00001
> > > >
> > > > diff --git
> > > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > > new file mode 100644
> > > > index 0000000000..5ef93461ee
> > > > --- /dev/null
> > > > +++
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > > @@ -0,0 +1,52 @@
> > > > +## @file
> > > >
> > > > +#  The default logo bitmap picture shown on setup screen.
> > > >
> > > > +#
> > > >
> > > > +#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +#
> > > >
> > > > +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > > +#
> > > >
> > > > +#
> > > >
> > > > +##
> > > >
> > > > +
> > > >
> > > > +[Defines]
> > > >
> > > > +  INF_VERSION                    = 0x00010005
> > > >
> > > > +  BASE_NAME                      = LogoDxe
> > > >
> > > > +  FILE_GUID                      = 76ED6631-44FE-4ED2-8B5D-1B5355BB25E8
> > > >
> > > > +  MODULE_TYPE                    = DXE_DRIVER
> > > >
> > > > +  VERSION_STRING                 = 1.0
> > > >
> > > > +
> > > >
> > > > +  ENTRY_POINT                    = InitializeLogo
> > > >
> > > > +#
> > > >
> > > > +#  This flag specifies whether HII resource section is generated into PE
> > > image.
> > > >
> > > > +#
> > > >
> > > > +  UEFI_HII_RESOURCE_SECTION      = TRUE
> > > >
> > > > +
> > > >
> > > > +#
> > > >
> > > > +# The following information is for reference only and not required by
> the
> > > build tools.
> > > >
> > > > +#
> > > >
> > > > +#  VALID_ARCHITECTURES           = IA32 X64
> > > >
> > > > +#
> > > >
> > > > +
> > > >
> > > > +[Sources]
> > > >
> > > > +  Logo.bmp
> > > >
> > > > +  Logo.c
> > > >
> > > > +  Logo.idf
> > > >
> > > > +
> > > >
> > > > +[Packages]
> > > >
> > > > +  MdePkg/MdePkg.dec
> > > >
> > > > +  MdeModulePkg/MdeModulePkg.dec
> > > >
> > > > +
> > > >
> > > > +[LibraryClasses]
> > > >
> > > > +  UefiBootServicesTableLib
> > > >
> > > > +  UefiDriverEntryPoint
> > > >
> > > > +  DebugLib
> > > >
> > > > +
> > > >
> > > > +[Protocols]
> > > >
> > > > +  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
> > > >
> > > > +  gEfiHiiImageExProtocolGuid         ## CONSUMES
> > > >
> > > > +  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
> > > >
> > > > +  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
> > > >
> > > > +
> > > >
> > > > +[Depex]
> > > >
> > > > +  gEfiHiiDatabaseProtocolGuid AND
> > > >
> > > > +  gEfiHiiImageExProtocolGuid
> > > >
> > > > diff --git
> > > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > > > new file mode 100644
> > > > index 0000000000..1418eb2137
> > > > --- /dev/null
> > > > +++
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > > > @@ -0,0 +1,31 @@
> > > > +## @file
> > > >
> > > > +# This package provides advanced feature functionality for LOGO.
> > > >
> > > > +# This package should only depend on EDK II Core packages.
> > > >
> > > > +#
> > > >
> > > > +# The DEC files are used by the utilities that parse DSC and
> > > >
> > > > +# INF files to generate AutoGen.c and AutoGen.h files
> > > >
> > > > +# for the build infrastructure.
> > > >
> > > > +#
> > > >
> > > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +#
> > > >
> > > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > > +#
> > > >
> > > > +##
> > > >
> > > > +
> > > >
> > > > +[Defines]
> > > >
> > > > +  DEC_SPECIFICATION = 0x00010017
> > > >
> > > > +  PACKAGE_NAME      = LogoFeaturePkg
> > > >
> > > > +  PACKAGE_GUID      = A1A87B33-C3E3-497B-978F-2FF7813FEB21
> > > >
> > > > +  PACKAGE_VERSION   = 0.1
> > > >
> > > > +
> > > >
> > > > +[Includes]
> > > >
> > > > +  Include
> > > >
> > > > +
> > > >
> > > > +[LibraryClasses]
> > > >
> > > > +
> > > >
> > > > +[Guids]
> > > >
> > > > +  gLogoFeaturePkgTokenSpaceGuid  =  {0x567199de, 0xb448, 0x4aa0,
> {0x99,
> > > 0x4e, 0xd5, 0xd6, 0x82, 0x59, 0x91, 0x17}}
> > > >
> > > > +
> > > >
> > > > +[PcdsFeatureFlag]
> > > >
> > > > +
> > >
> gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable|FALSE|BOOLEAN|0
> > > xA0000001
> > > >
> > > > +
> > >
> gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable|FALSE|BOOLEAN|0xA00000
> > > 02
> > > >
> > > > diff --git
> > > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > > > new file mode 100644
> > > > index 0000000000..717e074c69
> > > > --- /dev/null
> > > > +++
> b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > > > @@ -0,0 +1,37 @@
> > > > +## @file
> > > >
> > > > +# This package provides advanced feature functionality for LOGO.
> > > >
> > > > +# This package should only depend on EDK II Core packages.
> > > >
> > > > +#
> > > >
> > > > +# The DEC files are used by the utilities that parse DSC and
> > > >
> > > > +# INF files to generate AutoGen.c and AutoGen.h files
> > > >
> > > > +# for the build infrastructure.
> > > >
> > > > +#
> > > >
> > > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > >
> > > > +#
> > > >
> > > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > > >
> > > > +#
> > > >
> > > > +##
> > > >
> > > > +
> > > >
> > > > +[Defines]
> > > >
> > > > +  PLATFORM_NAME                  = LogoFeaturePkg
> > > >
> > > > +  PLATFORM_GUID                  = 0618AB19-9507-4D6A-A0D7-
> 1F43D74736CF
> > > >
> > > > +  PLATFORM_VERSION               = 0.1
> > > >
> > > > +  DSC_SPECIFICATION              = 0x00010005
> > > >
> > > > +  OUTPUT_DIRECTORY               = Build/$(PLATFORM_NAME)
> > > >
> > > > +  SUPPORTED_ARCHITECTURES        = IA32|X64
> > > >
> > > > +  BUILD_TARGETS                  = DEBUG|RELEASE|NOOPT
> > > >
> > > > +  SKUID_IDENTIFIER               = DEFAULT
> > > >
> > > > +
> > > >
> > > > +[LibraryClasses]
> > > >
> > > > +  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> > > >
> > > > +
> > >
> BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRe
> > > pStr.inf
> > > >
> > > > +  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> > > >
> > > > +
> > >
> UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo
> > > tServicesTableLib.inf
> > > >
> > > > +
> > >
> UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryP
> > > oint.inf
> > > >
> > > > +
> > > >
> > > > +[LibraryClasses.common.DXE_DRIVER]
> > > >
> > > > +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
> > > >
> > > > +
> > > >
> > > > +[Components]
> > > >
> > > > +  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > >
> > > > +  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > >
> > > > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > > > new file mode 100644
> > > > index 0000000000..092a055a2c
> > > > --- /dev/null
> > > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > > > @@ -0,0 +1,129 @@
> > > > +# Overview
> > > >
> > > > +* **Feature Name:** Logo
> > > >
> > > > +* **PI Phase(s) Supported:** DXE
> > > >
> > > > +* **SMM Required?** No
> > > >
> > > > +
> > > >
> > > > +## Purpose
> > > >
> > > > +This feature provides the Logo image and driver that produces
> > > EDKII_PLATFORM_LOGO_PROTOCOL:
> > > >
> > > > +
> > > >
> > > > +1. LogoDxe.inf includes a BMP logo in the EFI file, the driver provides
> the
> > > image via EDKII_PLATFORM_LOGO_PROTOCOL.
> > > >
> > > > +2. JpegLogoDxe.inf includes a JPEG logo in the EFI file, the driver uses
> > > EFI_HII_IMAGE_DECODER_PROTOCOL to decode the
> > > > JPEG file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.
> > > >
> > > > +
> > > >
> > > > +# High-Level Theory of Operation
> > > >
> > > > +
> > > >
> > > > +The driver produces a EDKII_PLATFORM_LOGO_PROTOCOL to provide
> a
> > > logo picture shown on setup screen.
> > > >
> > > > +
> > > >
> > > > +The Logo file is built in HII package list as EFI resource, the driver uses
> > > EFI_HII_DATABASE_PROTOCOL
> > > >
> > > > +to the publish HII package list to HII Database and get images via
> > > EFI_HII_IMAGE_EX_PROTOCOL.
> > > >
> > > > +
> > > >
> > > > +## Firmware Volumes
> > > >
> > > > +
> > > >
> > > > +* PostMemory
> > > >
> > > > +
> > > >
> > > > +## Modules
> > > >
> > > > +
> > > >
> > > > +A bulleted list of the modules that make up the feature.
> > > >
> > > > +
> > > >
> > > > +* LogoDxe
> > > >
> > > > +* JpegLogoDxe
> > > >
> > > > +
> > > >
> > > > +## LogoDxe
> > > >
> > > > +
> > > >
> > > > +This driver provides a bitmap image via
> > > EDKII_PLATFORM_LOGO_PROTOCOL.
> > > >
> > > > +
> > > >
> > > > +## JpegLogoDxe
> > > >
> > > > +
> > > >
> > > > +This driver uses EFI_HII_IMAGE_DECODER_PROTOCOL to decode the
> jpeg
> > > data and provide a bitmap image via
> > > >
> > > > +EDKII_PLATFORM_LOGO_PROTOCOL.
> > > >
> > > > +
> > > >
> > > > +## Key Functions
> > > >
> > > > +
> > > >
> > > > +* This feature produces a EDKII_PLATFORM_LOGO_PROTOCOL which
> > > could be used by consumer such as
> > > > Edk2\MdeModulePkg\Library\BootLogoLib.
> > > >
> > > > +
> > > >
> > > > +## Configuration
> > > >
> > > > +
> > > >
> > > > +* gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> > > >
> > > > +  TRUE: Enable logo feature
> > > >
> > > > +  FALSE: Disable logo feature
> > > >
> > > > +* gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable
> > > >
> > > > +  TRUE: Use jpeg logo
> > > >
> > > > +  FALSE: Use bitmap logo
> > > >
> > > > +
> > > >
> > > > +## Data Flows
> > > >
> > > > +
> > > >
> > > > +Architecturally defined data structures and flows for the feature.
> > > >
> > > > +
> > > >
> > > > +### Data flows of LogoDxe
> > > >
> > > > +
> > > >
> > > > +```txt
> > > >
> > > > +| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|
> > > >
> > > > +------------    ------------------    ----------------
> > > >
> > > > +      |                 |                     |
> > > >
> > > > +      |                 |--bitmap image data->|
> > > >
> > > > +      |<---bitmap data--|<-return bitmap data-|
> > > >
> > > > +```
> > > >
> > > > +
> > > >
> > > > +### Data flows of JpegLogoDxe
> > > >
> > > > +
> > > >
> > > > +```txt
> > > >
> > > > +| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|    |
> > > EFI_HII_IMAGE_DECODER_PROTOCOL |
> > > >
> > > > +------------    ------------------    ----------------    ----------------------------------
> > > >
> > > > +      |                 |                     |                            |
> > > >
> > > > +      |                 |---Jpeg Image data-->|---------decode Jpeg------->|
> > > >
> > > > +      |<---bitmap data--|<-return bitmap data-|<-----return bitmap data-
> ---|
> > > >
> > > > +```
> > > >
> > > > +
> > > >
> > > > +## Control Flows
> > > >
> > > > +
> > > >
> > > > +Consumer gets image from the logo driver via
> > > EDKII_PLATFORM_LOGO_PROTOCOL.
> > > >
> > > > +
> > > >
> > > > +## Build Flows
> > > >
> > > > +
> > > >
> > > > +No any special build flows is needed.
> > > >
> > > > +
> > > >
> > > > +## Test Point Results
> > > >
> > > > +
> > > >
> > > > +Not available.
> > > >
> > > > +
> > > >
> > > > +## Functional Exit Criteria
> > > >
> > > > +
> > > >
> > > > +* Check wether EDKII_PLATFORM_LOGO_PROTOCOL->GetImage()
> return a
> > > default Intel logo.
> > > >
> > > > +* If using jpeg logo, a dex driver which produces
> > > EFI_HII_IMAGE_DECODER_PROTOCOL(name is
> > > >
> > > > +gEfiHiiImageDecoderNameJpegGuid) is necessary, it is used to decode
> > > Jpeg data.
> > > >
> > > > +
> > > >
> > > > +## Feature Enabling Checklist
> > > >
> > > > +
> > > >
> > > > +### Option 1
> > > >
> > > > +
> > > >
> > > > +* Include AdvancedFeatures.dsc in platform dsc file, and use pcd to
> > > enable the feature.
> > > >
> > > > +
> > > >
> > > > +```dsc
> > > >
> > > > +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> > > |TRUE
> > > >
> > > > +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable
> |FALSE
> > > >
> > > > +  !include Include/AdvancedFeatures.dsc
> > > >
> > > > +```
> > > >
> > > > +
> > > >
> > > > +* Include PreMemory.fdf and inPostMemory.fdf in platform fdf file
> > > >
> > > > +
> > > >
> > > > +```fdf
> > > >
> > > > +!include Include/PreMemory.fdf
> > > >
> > > > +!include Include/PostMemory.fdf
> > > >
> > > > +```
> > > >
> > > > +
> > > >
> > > > +### Option 2
> > > >
> > > > +
> > > >
> > > > +* To use bitmap logo, include
> > > "UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform dsc
> file,
> > > and include
> > > >
> > > > +"INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform
> fdf
> > > file.
> > > >
> > > > +
> > > >
> > > > +* To use jpeg logo, include
> > > "UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in platform
> dsc
> > > file, and include
> > > >
> > > > +"INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in
> > > platform fdf file.
> > > >
> > > > +
> > > >
> > > > +## Performance Impact
> > > >
> > > > +
> > > >
> > > > +* LogoDxe
> > > >
> > > > +  * EFI size: 180 KB
> > > >
> > > > +  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage():
> about
> > > 18 milliseconds
> > > >
> > > > +
> > > >
> > > > +* JpegLogoDxe
> > > >
> > > > +  * EFI size: 13.6 KB
> > > >
> > > > +  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage():
> about
> > > 80 milliseconds
> > > >
> > > > --
> > > > 2.24.0.windows.2
> > > >
> > > >
> > > > -=-=-=-=-=-=
> > > > Groups.io Links: You receive all messages sent to this group.
> > > >
> > > > View/Reply Online (#56238):
> > > https://edk2.groups.io/g/devel/message/56238
> > > > Mute This Topic: https://groups.io/mt/72533665/1712937
> > > > Group Owner: devel+owner@edk2.groups.io
> > > > Unsubscribe: https://edk2.groups.io/g/devel/unsub  [ray.ni@intel.com]
> > > > -=-=-=-=-=-=


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#56257): https://edk2.groups.io/g/devel/message/56257
Mute This Topic: https://groups.io/mt/72533665/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers
Posted by Ni, Ray 4 years, 1 month ago
Thanks for confirming that works.

> -----Original Message-----
> From: Luo, Heng <heng.luo@intel.com>
> Sent: Wednesday, March 25, 2020 3:53 PM
> To: Ni, Ray <ray.ni@intel.com>; devel@edk2.groups.io
> Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming <liming.gao@intel.com>; Dong, Eric <eric.dong@intel.com>
> Subject: RE: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers
> 
> Hi Ray,
> Pass build with GCC in ubuntu after adding "~/code/edk2-platforms/Features/Intel/UserInterface" in PACKAGES_PATH.
> 
> Best Regards
> Heng
> 
> > -----Original Message-----
> > From: Ni, Ray <ray.ni@intel.com>
> > Sent: Wednesday, March 25, 2020 3:17 PM
> > To: Luo, Heng <heng.luo@intel.com>; devel@edk2.groups.io
> > Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming <liming.gao@intel.com>;
> > Dong, Eric <eric.dong@intel.com>
> > Subject: RE: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to
> > provide logo images and drivers
> >
> > What is PACKAGES_PATH env variable set to?
> >
> > > -----Original Message-----
> > > From: Luo, Heng <heng.luo@intel.com>
> > > Sent: Wednesday, March 25, 2020 3:01 PM
> > > To: Ni, Ray <ray.ni@intel.com>; devel@edk2.groups.io
> > > Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming
> > <liming.gao@intel.com>; Dong, Eric <eric.dong@intel.com>
> > > Subject: RE: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to
> > provide logo images and drivers
> > >
> > > Hi Ray,
> > > It fails to build with GCC in ubuntu if removing the <feature-domain> prefix
> > from all paths insideDSC/FDF/INF.
> > > No problem in windows
> > >
> > > Active Platform          = /home/ilabuser/code/hengluo/edk2-
> > >
> > platforms/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > >
> > >
> > > build.py...
> > > /home/ilabuser/code/hengluo/edk2-
> > platforms/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > (36): error
> > > 000E: File/directory not found in workspace
> > >         LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf is not found in packages
> > path:
> > >         /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Platform/Intel
> > >         /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Silicon/Intel
> > >         /home/ilabuser/code/hengluo/edk2/../edk2-platforms/Features/Intel
> > >
> > >
> > > - Failed -
> > > Build end time: 14:57:21, Mar.25 2020
> > > Build total time: 00:00:00
> > >
> > > Best Regards
> > > Heng
> > >
> > > > -----Original Message-----
> > > > From: Ni, Ray <ray.ni@intel.com>
> > > > Sent: Wednesday, March 25, 2020 11:53 AM
> > > > To: devel@edk2.groups.io; Luo, Heng <heng.luo@intel.com>
> > > > Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming
> > <liming.gao@intel.com>;
> > > > Dong, Eric <eric.dong@intel.com>
> > > > Subject: RE: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg
> > to
> > > > provide logo images and drivers
> > > >
> > > > Heng,
> > > > Can you please remove the <feature-domain> prefix from all paths inside
> > > > DSC/FDF/INF?
> > > >
> > > > We expect PACKAGES_PATH is set to include "edk2-
> > platforms/Features/Intel"
> > > > and all sub folders inside "edk2-platforms/Features/Intel/".
> > > >
> > > > Thanks,
> > > > Ray
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
> > Heng
> > > > Luo
> > > > > Sent: Wednesday, March 25, 2020 10:44 AM
> > > > > To: devel@edk2.groups.io
> > > > > Cc: Bi, Dandan <dandan.bi@intel.com>; Gao, Liming
> > > > <liming.gao@intel.com>; Dong, Eric <eric.dong@intel.com>
> > > > > Subject: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to
> > > > provide logo images and drivers
> > > > >
> > > > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2584
> > > > >
> > > > > 1. LogoDxe.inf includes a BMP logo in the EFI file,
> > > > > the driver decodes the BMP file and provide the image
> > > > > via EDKII_PLATFORM_LOGO_PROTOCOL.
> > > > > 2. JpegLogoDxe.inf includes a JPEG logo in the EFI file,
> > > > > the driver use EFI_HII_IMAGE_DECODER_PROTOCOL to decode the Jpeg
> > > > > file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.
> > > > >
> > > > > Cc: Dandan Bi <dandan.bi@intel.com>
> > > > > Cc: Liming Gao <liming.gao@intel.com>
> > > > > Cc: Eric Dong <eric.dong@intel.com>
> > > > > Signed-off-by: Heng Luo <heng.luo@intel.com>
> > > > > ---
> > > > >
> > > > > Notes:
> > > > >     v2:
> > > > >       - Add Cc and Remove Change-Id in commit message
> > > > >
> > > > >  Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc            |
> > 4
> > > > +++-
> > > > >  Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > |
> > > > 6 +++++-
> > > > >  Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf            |
> > 6
> > > > +++++-
> > > > >  Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf             |
> > 6
> > > > +++++-
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > |
> > > > 107
> > > > >
> > > >
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > > +++++++++++++++++++++++++++++++++++++++
> > > > > ++++
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > |
> > > > 13 +++++++++++++
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > |
> > > > 8 ++++++++
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > |
> > > > 10 ++++++++++
> > > > >
> > Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf |
> > > > 52
> > > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp        |
> > > > Bin 0 -> 183366 bytes
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c          |
> > 153
> > > > >
> > > >
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > > +++++++++++++++++++++++++++++++++++++++
> > > > > ++++++++++++++++++++++++++++++++++++++++++++++++++
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf        |
> > 10
> > > > ++++++++++
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg        |
> > Bin
> > > > 0 -> 11944 bytes
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > |
> > > > 52
> > > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec      |
> > 31
> > > > +++++++++++++++++++++++++++++++
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc      |
> > 37
> > > > +++++++++++++++++++++++++++++++++++++
> > > > >  Features/Intel/UserInterface/LogoFeaturePkg/Readme.md               |
> > 129
> > > > >
> > > >
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > > +++++++++++++++++++++++++++++++++++++++
> > > > > ++++++++++++++++++++++++++
> > > > >  17 files changed, 620 insertions(+), 4 deletions(-)
> > > > >
> > > > > diff --git
> > a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > > > b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > > > index 23e7c6474a..ea879680ba 100644
> > > > > --- a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > > > +++ b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc
> > > > > @@ -7,7 +7,7 @@
> > > > >  # 1. Present a consolidated and simplified view of all available
> > advanced
> > > > features to board packages.
> > > > >
> > > > >  # 2. Provide a simple, single package build for all available advanced
> > > > features.
> > > > >
> > > > >  #
> > > > >
> > > > > -# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > >  #
> > > > >
> > > > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > >  #
> > > > >
> > > > > @@ -46,6 +46,8 @@
> > > > >    gSmbiosFeaturePkgTokenSpaceGuid.PcdSmbiosFeatureEnable
> > > > |TRUE
> > > > >
> > > > >
> > gUsb3DebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugFeatureEnable
> > > > |TRUE
> > > > >
> > > > >
> > > >
> > gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > > > |TRUE
> > > > >
> > > > > +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> > > > |TRUE
> > > > >
> > > > > +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable
> > |FALSE
> > > > >
> > > > >
> > > > >
> > > > >  #
> > > > >
> > > > >  # This package builds all advanced features.
> > > > >
> > > > > diff --git
> > > > a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > > > b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > > > index 649774edf7..c1bd791525 100644
> > > > > ---
> > a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > > > +++
> > b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc
> > > > > @@ -4,7 +4,7 @@
> > > > >  #  This file is intended to be included into another package so advanced
> > > > features
> > > > >
> > > > >  #  can be conditionally built by enabling the respective feature via its
> > > > FeaturePCD.
> > > > >
> > > > >  #
> > > > >
> > > > > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > >  #
> > > > >
> > > > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > >  #
> > > > >
> > > > > @@ -54,3 +54,7 @@
> > > > >  !if
> > > >
> > gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > > > == TRUE
> > > > >
> > > > >    !include
> > > > UserInterface/UserAuthFeaturePkg/Include/UserAuthFeature.dsc
> > > > >
> > > > >  !endif
> > > > >
> > > > > +
> > > > >
> > > > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> > > > >
> > > > > +  !include UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > > > >
> > > > > +!endif
> > > > >
> > > > > diff --git
> > a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > > > b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > > > index 57b29a42b9..56f6143650 100644
> > > > > --- a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > > > +++ b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf
> > > > > @@ -5,7 +5,7 @@
> > > > >  #  can be conditionally included in the flash image by enabling the
> > > > respective
> > > > >
> > > > >  #  feature via its FeaturePCD.
> > > > >
> > > > >  #
> > > > >
> > > > > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > >  #
> > > > >
> > > > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > >  #
> > > > >
> > > > > @@ -55,3 +55,7 @@
> > > > >  !if
> > > >
> > gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > > > == TRUE
> > > > >
> > > > >    !include UserInterface/UserAuthFeaturePkg/Include/PostMemory.fdf
> > > > >
> > > > >  !endif
> > > > >
> > > > > +
> > > > >
> > > > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> > > > >
> > > > > +  !include UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > > > >
> > > > > +!endif
> > > > >
> > > > > diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > > > b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > > > index 20d25dd173..7a76b0efc3 100644
> > > > > --- a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > > > +++ b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf
> > > > > @@ -5,7 +5,7 @@
> > > > >  #  can be conditionally included in the flash image by enabling the
> > > > respective
> > > > >
> > > > >  #  feature via its FeaturePCD.
> > > > >
> > > > >  #
> > > > >
> > > > > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > >  #
> > > > >
> > > > >  # SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > >  #
> > > > >
> > > > > @@ -55,3 +55,7 @@
> > > > >  !if
> > > >
> > gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable
> > > > == TRUE
> > > > >
> > > > >    !include UserInterface/UserAuthFeaturePkg/Include/PreMemory.fdf
> > > > >
> > > > >  !endif
> > > > >
> > > > > +
> > > > >
> > > > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable == TRUE
> > > > >
> > > > > +  !include UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > > > >
> > > > > +!endif
> > > > >
> > > > > diff --git
> > > > a/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > > > >
> > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > > > > new file mode 100644
> > > > > index 0000000000..3fd1c3372e
> > > > > --- /dev/null
> > > > > +++
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
> > > > > @@ -0,0 +1,107 @@
> > > > > +## @file
> > > > >
> > > > > +# This is a build description file for the Logo advanced feature.
> > > > >
> > > > > +# This file should be included into another package DSC file to build
> > this
> > > > feature.
> > > > >
> > > > > +#
> > > > >
> > > > > +# The DEC files are used by the utilities that parse DSC and
> > > > >
> > > > > +# INF files to generate AutoGen.c and AutoGen.h files
> > > > >
> > > > > +# for the build infrastructure.
> > > > >
> > > > > +#
> > > > >
> > > > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +#
> > > > >
> > > > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +#
> > > > >
> > > > > +##
> > > > >
> > > > > +
> > > > >
> > > > >
> > > >
> > +###############################################################
> > > > #################
> > > > >
> > > > > +#
> > > > >
> > > > > +# Defines Section - statements that will be processed to create a
> > Makefile.
> > > > >
> > > > > +#
> > > > >
> > > > >
> > > >
> > +###############################################################
> > > > #################
> > > > >
> > > > > +[Defines]
> > > > >
> > > > > +!ifndef $(PEI_ARCH)
> > > > >
> > > > > +  !error "PEI_ARCH must be specified to build this feature!"
> > > > >
> > > > > +!endif
> > > > >
> > > > > +!ifndef $(DXE_ARCH)
> > > > >
> > > > > +  !error "DXE_ARCH must be specified to build this feature!"
> > > > >
> > > > > +!endif
> > > > >
> > > > > +
> > > > >
> > > > >
> > > >
> > +###############################################################
> > > > #################
> > > > >
> > > > > +#
> > > > >
> > > > > +# Packages Section - Make sure PCD can be directly used in a
> > conditional
> > > > statement
> > > > >
> > > > > +# in a DSC which includes this DSC file.
> > > > >
> > > > > +#
> > > > >
> > > > >
> > > >
> > +###############################################################
> > > > #################
> > > > >
> > > > > +[Packages]
> > > > >
> > > > > +  UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > > > >
> > > > > +
> > > > >
> > > > >
> > > >
> > +###############################################################
> > > > #################
> > > > >
> > > > > +#
> > > > >
> > > > > +# Library Class section - list of all Library Classes needed by this feature.
> > > > >
> > > > > +#
> > > > >
> > > > >
> > > >
> > +###############################################################
> > > > #################
> > > > >
> > > > > +[LibraryClasses]
> > > > >
> > > > > +  #######################################
> > > > >
> > > > > +  # Edk2 Packages
> > > > >
> > > > > +  #######################################
> > > > >
> > > > > +  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> > > > >
> > > > > +
> > > >
> > BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRe
> > > > pStr.inf
> > > > >
> > > > > +  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> > > > >
> > > > > +
> > > >
> > UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo
> > > > tServicesTableLib.inf
> > > > >
> > > > > +
> > > >
> > UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryP
> > > > oint.inf
> > > > >
> > > > > +
> > > > >
> > > > > +[LibraryClasses.common.DXE_DRIVER]
> > > > >
> > > > > +  #######################################
> > > > >
> > > > > +  # Edk2 Packages
> > > > >
> > > > > +  #######################################
> > > > >
> > > > > +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
> > > > >
> > > > > +
> > > > >
> > > > >
> > > >
> > +###############################################################
> > > > #################
> > > > >
> > > > > +#
> > > > >
> > > > > +# Component section - list of all components that need built for this
> > > > feature.
> > > > >
> > > > > +#
> > > > >
> > > > > +# Note: The EDK II DSC file is not used to specify how compiled binary
> > > > images get placed
> > > > >
> > > > > +#       into firmware volume images. This section is just a list of modules
> > to
> > > > compile from
> > > > >
> > > > > +#       source into UEFI-compliant binaries.
> > > > >
> > > > > +#       It is the FDF file that contains information on combining binary
> > files
> > > > into firmware
> > > > >
> > > > > +#       volume images, whose concept is beyond UEFI and is described in
> > PI
> > > > specification.
> > > > >
> > > > > +#       There may also be modules listed in this section that are not
> > required
> > > > in the FDF file,
> > > > >
> > > > > +#       When a module listed here is excluded from FDF file, then UEFI-
> > > > compliant binary will be
> > > > >
> > > > > +#       generated for it, but the binary will not be put into any firmware
> > > > volume.
> > > > >
> > > > > +#
> > > > >
> > > > >
> > > >
> > +###############################################################
> > > > #################
> > > > >
> > > > > +
> > > > >
> > > > > +#
> > > > >
> > > > > +# Feature DXE Components
> > > > >
> > > > > +#
> > > > >
> > > > > +
> > > > >
> > > > > +# @todo: Change below line to [Components.$(DXE_ARCH)] after
> > > > https://bugzilla.tianocore.org/show_bug.cgi?id=2308
> > > > >
> > > > > +#        is completed.
> > > > >
> > > > > +[Components.X64]
> > > > >
> > > > > +  #####################################
> > > > >
> > > > > +  # Logo Feature Package
> > > > >
> > > > > +  #####################################
> > > > >
> > > > > +
> > > > >
> > > > > +  # Add library instances here that are not included in package
> > > > components and should be tested
> > > > >
> > > > > +  # in the package build.
> > > > >
> > > > > +
> > > > >
> > > > > +  # Add components here that should be included in the package build.
> > > > >
> > > > > +!if gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
> > > > >
> > > > > +  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > > >
> > > > > +!else
> > > > >
> > > > > +  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > > >
> > > > > +!endif
> > > > >
> > > > > +
> > > > >
> > > > >
> > > >
> > +###############################################################
> > > > ####################################
> > > > >
> > > > > +#
> > > > >
> > > > > +# BuildOptions Section - Define the module specific tool chain flags
> > that
> > > > should be used as
> > > > >
> > > > > +#                        the default flags for a module. These flags are appended
> > to
> > > > any
> > > > >
> > > > > +#                        standard flags that are defined by the build process.
> > They
> > > > can be
> > > > >
> > > > > +#                        applied for any modules or only those modules with the
> > > > specific
> > > > >
> > > > > +#                        module style (EDK or EDKII) specified in [Components]
> > > > section.
> > > > >
> > > > > +#
> > > > >
> > > > > +#                        For advanced features, it is recommended to enable
> > > > [BuildOptions] in
> > > > >
> > > > > +#                        the applicable INF file so it does not affect the whole
> > board
> > > > package
> > > > >
> > > > > +#                        build when this DSC file is active.
> > > > >
> > > > > +#
> > > > >
> > > > >
> > > >
> > +###############################################################
> > > > ####################################
> > > > >
> > > > > +[BuildOptions]
> > > > >
> > > > > diff --git
> > > > a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > > > >
> > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > > > > new file mode 100644
> > > > > index 0000000000..53c85da716
> > > > > --- /dev/null
> > > > > +++
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
> > > > > @@ -0,0 +1,13 @@
> > > > > +## @file
> > > > >
> > > > > +#  FDF file for post-memory Logo modules.
> > > > >
> > > > > +#
> > > > >
> > > > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +#
> > > > >
> > > > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +#
> > > > >
> > > > > +##
> > > > >
> > > > > +!if gSmbiosFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
> > > > >
> > > > > +  INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > > >
> > > > > +!else
> > > > >
> > > > > +  INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > > >
> > > > > +!endif
> > > > >
> > > > > diff --git
> > > > a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > > > >
> > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > > > > new file mode 100644
> > > > > index 0000000000..91cd1c6ec6
> > > > > --- /dev/null
> > > > > +++
> > > > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf
> > > > > @@ -0,0 +1,8 @@
> > > > > +## @file
> > > > >
> > > > > +#  FDF file for pre-memory Logo modules.
> > > > >
> > > > > +#
> > > > >
> > > > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +#
> > > > >
> > > > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +#
> > > > >
> > > > > +##
> > > > >
> > > > > diff --git
> > > > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > > > > new file mode 100644
> > > > > index 0000000000..a39500e043
> > > > > --- /dev/null
> > > > > +++
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
> > > > > @@ -0,0 +1,10 @@
> > > > > +// /** @file
> > > > >
> > > > > +// Platform Logo image definition file.
> > > > >
> > > > > +//
> > > > >
> > > > > +// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +//
> > > > >
> > > > > +// SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +//
> > > > >
> > > > > +// **/
> > > > >
> > > > > +
> > > > >
> > > > > +#image IMG_LOGO Logo.jpg
> > > > >
> > > > > diff --git
> > > >
> > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > > >
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > > > new file mode 100644
> > > > > index 0000000000..47f1672a4c
> > > > > --- /dev/null
> > > > > +++
> > > >
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > > > @@ -0,0 +1,52 @@
> > > > > +## @file
> > > > >
> > > > > +#  The default logo JPEG picture shown on setup screen.
> > > > >
> > > > > +#
> > > > >
> > > > > +#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +#
> > > > >
> > > > > +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +#
> > > > >
> > > > > +#
> > > > >
> > > > > +##
> > > > >
> > > > > +
> > > > >
> > > > > +[Defines]
> > > > >
> > > > > +  INF_VERSION                    = 0x00010005
> > > > >
> > > > > +  BASE_NAME                      = JpegLogoDxe
> > > > >
> > > > > +  FILE_GUID                      = 319CFE1D-8F15-4A7A-BF40-EECA953D87EF
> > > > >
> > > > > +  MODULE_TYPE                    = DXE_DRIVER
> > > > >
> > > > > +  VERSION_STRING                 = 1.0
> > > > >
> > > > > +
> > > > >
> > > > > +  ENTRY_POINT                    = InitializeLogo
> > > > >
> > > > > +#
> > > > >
> > > > > +#  This flag specifies whether HII resource section is generated into PE
> > > > image.
> > > > >
> > > > > +#
> > > > >
> > > > > +  UEFI_HII_RESOURCE_SECTION      = TRUE
> > > > >
> > > > > +
> > > > >
> > > > > +#
> > > > >
> > > > > +# The following information is for reference only and not required by
> > the
> > > > build tools.
> > > > >
> > > > > +#
> > > > >
> > > > > +#  VALID_ARCHITECTURES           = IA32 X64
> > > > >
> > > > > +#
> > > > >
> > > > > +
> > > > >
> > > > > +[Sources]
> > > > >
> > > > > +  Logo.jpg
> > > > >
> > > > > +  Logo.c
> > > > >
> > > > > +  JpegLogo.idf
> > > > >
> > > > > +
> > > > >
> > > > > +[Packages]
> > > > >
> > > > > +  MdePkg/MdePkg.dec
> > > > >
> > > > > +  MdeModulePkg/MdeModulePkg.dec
> > > > >
> > > > > +
> > > > >
> > > > > +[LibraryClasses]
> > > > >
> > > > > +  UefiBootServicesTableLib
> > > > >
> > > > > +  UefiDriverEntryPoint
> > > > >
> > > > > +  DebugLib
> > > > >
> > > > > +
> > > > >
> > > > > +[Protocols]
> > > > >
> > > > > +  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
> > > > >
> > > > > +  gEfiHiiImageExProtocolGuid         ## CONSUMES
> > > > >
> > > > > +  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
> > > > >
> > > > > +  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
> > > > >
> > > > > +
> > > > >
> > > > > +[Depex]
> > > > >
> > > > > +  gEfiHiiDatabaseProtocolGuid AND
> > > > >
> > > > > +  gEfiHiiImageExProtocolGuid
> > > > >
> > > > > diff --git
> > > > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp
> > > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp
> > > > > new file mode 100644
> > > > > index
> > > >
> > 0000000000000000000000000000000000000000..7ec1aa6a852564e262df599
> > > > 29655f7a0f3d5445f
> > > > > GIT binary patch
> > > > > literal 183366
> > > > > zcmeI53HVo2{>L-
> > > > Jm@&3csA!XsrHq!LrXr$}sH8=bnxa%BMny_PD@D^Xt&}NI5uvfP
> > > > > zOj2oNv@nuXBQ#^OWNI42{Qs~2|31%s?sM+<o_o&SzW3hm`94p-
> > ?sD!~-
> > > > skha_bi{K
> > > > > z=~b7%^@B41_p8spv-
> > > > o%ZVP(p^$^VCyIfcJv${f%A6MtIf|Ns5}1@p%sU=T0}WEX+M
> > > > > z4?q0mlTSY9oO7BqY0|D;yDnY2bno8%mRoM=-
> > > > @pHzciuT<$dKW~hmRaN@}Y+wdi2pp
> > > > > zr%s(ZYu2nMo_J#3ym^m3_So-!_d70*8#nHO2ObzYbm*^t{p;IqyRCQc-
> > > > sEuo_19l}
> > > > > z?X|62w{F&~*##F|P`PsDqmMp1yC|8O8w4Uj;D{rRs8ORv^XAQa^yqQ--
> > > > FL$sc(ios
> > > > >
> > > >
> > z(sk?BZQs8A%P+tD?|=XMKS})#9Xj;MC!cKIym`fn6$=+Ggw7Coz<>c=yLP?u$}4~I
> > > > >
> > > >
> > zi(gc&T9pb%(r}ZBL7=z@@Byk_yLQ{QZST74E=2vc*IwJXbLV&8eU}v5qABP5@4
> > > > w%(
> > > > > zXU`jNyz%6dPmUfvny+okmM!^wA9Ktx#f8_DZV-
> > > > ?l@S`97sBYc53@m5PoQd@Q?QegJ
> > > > >
> > > >
> > zh7T#u<%=)A`17CtykyCeF=NKuc;k)r>eVx2V2Om7Td^X*K<?*1|9Q`zJ^A*%_10
> > > > Ve
> > > > >
> > z{`bFAOr3<P#$bE*?%m6lEqnOkhZ&GxbkRk}9d}%;y<jpgWdu$+<&+z4xMA|-
> > > > $#1^-
> > > > >
> > zCX=s(q&(xrFhza!)mK?)>ej6r1Kl6|z*?g(WjQi!4~_ueL6$m4jT*(+EXl=|jI+?Q
> > > > >
> > > >
> > z`rmx>&8k(a#*Q7^zJ2>DRjLH<81rN)A%Lhb8Dw&_fB$|@*)lgmBk=dX|NX@m
> > > > Ut|-9
> > > > >
> > > >
> > zWukKB%9WCcnYQ{P(4awsM;>|P{rBGwEodf#APDT*wd<*;p6b)5&)H|6?cZA_
> > > > MNSc@
> > > > >
> > > >
> > zUcEZ6=np^qFo+D9XW~JCHR`9Ie%f#|r<^O$tg>axGALzxA|8P<xkiQn!&)>JZoTz
> > > > Z
> > > > > zR)h{a3^h&j%MSwV6<%}AHH#N7Hk%ZY5hlTmY;K-
> > > > ;=9&2s%93meAH;j_y_XJ6P<%{L
> > > > > zF(UB62Oo?dKmL+SE-
> > > > `w2*&_65r=3Q}vDhA?aG0!%hrm}~eZ@i$yTd1*cw)9Bv(#$K
> > > > >
> > zjAPE6Ip2Q!ZSjP~l$;y_DBP}Dvu4nsLG*j6iF(T0`^#Vc64ME@iJu%9QdSZQ{J;I}
> > > > > zZ!s~$iY?``n(yk>s#OacqLfL8sZP-
> > > > lVCw{8qEDM|u}@*^PB`I&Ns}gJ&aA0ul3HQ~
> > > > >
> > z@7S>e8_$|GYo<_ib5<o3mDx=E$3Om2Vj^am8w3Hgk+DmyRH;(VSdfzDG-
> > > > }icgoAX9
> > > > >
> > > >
> > zd8ULBU~K{Ac8uoO2uq11XT2H~DpZ(1e}2|wisgE=^)_tSfU?l))vH&oT!}w{mtTJQ
> > > > > zrI%h}NeZ=gv=>kwTd-gOu5#wior{+b44<b>n>J<26lO-
> > > > ~++uQw(F8y2F|p;x2yyM&
> > > > >
> > > >
> > zweP+69_CI54jjljK5^F{%@9DwkBU+L3G+fg&1T=eeQ|eI`21N<SigQfG=VjP2M_
> > > > Mm
> > > > >
> > > >
> > zs~3JeFymrP9`98Nto~618*`}X;>@aP)240Ow7Kb~n{L1T_F=<@O_(rY_UzfuJoC)
> > > > *
> > > > >
> > z<;yp2+{g^;U;p}7_$FsG2i}Tz+;NBbT<Ws&$3Olt>o#fYbo31vHY3~cu5aJIc!k1F
> > > > > z;i#jI(rsOF)ANnsErCC)>#n;FCw16gV-mG>>(<iIrZ{-
> > ;Aj1#*KNPnkvQqk4XPvca
> > > > > z)21|#kq_S={_qE^l@VPW$K`&s!$+1cEFX8=&|&hA;s4&fd(+SnG1Y-
> > > > Ff9KAfQFzV@
> > > > > zHIlC<-
> > > >
> > b9NyA^P;wPnpW01k1ONscZ7hPhpAJ5i<tH*DK!?JemCSpZ|=B9mUF)w=TOR
> > > > >
> > > >
> > zs9dHH{32HA*kg}n3YL7QFhzxf82gxgE0x}7kWj5!wX3hbnzt4@rK~CCV>_5uFc
> > > > WFm
> > > > >
> > > >
> > zu%QYFxldEEV#RmgeK#>OGFM`4bKt;%Od^a6rjXKg<dH|>4U!Ki^!)haj}z;}m<nR)
> > > > > z8&%AZm}L6#GtM{zUBsB+b!N+_ko^KyJ`-
> > 5;%yf^0sXPO}4jno${ruCP{`8;!{KtuZ
> > > > > zhK@^?m3aA%d(nUiDI?)lty&o~x-
> > > > diw@GOhZy#3e%dj9$6v#48DYOG|qPE?DSUYop}
> > > > >
> > > >
> > zS;;5X%ujzxR4(%?J_4BhvoVU!L$++jON5mzTC|91DHW|1cGgZh>7?R|ps7J21Xv
> > > > Ve
> > > > >
> > > >
> > zV+AutRF$&gRwdu8WJfO!BVzWoag=R#lnRj`rPmm}FqN1%apJaZ+hQ6iMVKwo
> > > > Oj3$t
> > > > > zh-
> > > >
> > zJY@x_sokvA<)cXPjG9|H9ZJWAwB)V~)kS`^<bCL}k}G0p&vI#oo`B|@!K95}Gd
> > > > >
> > > >
> > zPVgz6DwwosN8pD){2}(mXhz}EDkOuVeLQD;#Gp7rgi#l%Q>RYaWy{nr90It5xc~
> > > > n9
> > > > > zliZ$`P&iL~WV<0MKN~EbGq5qE({PfWv8Pd>LMiB-cixfkCGJ~!;v))>;o-
> > u_bo%t^
> > > > > z#_wOoxD;u1Q6M24Jo*OV#Ys1Z-0%_q3A$}}rzbRO{rdGI?OT&sh7n-
> > > > >2YW`$G~A*R
> > > > > z)0KSi5o<dZUcx|xx-VObM%OgM<cYKDd@-@nNI-
> > > > iw2Yh7OxMj<hFl0oX1CyUP`_tr|
> > > > > z2LyOs<CFu>C-LbR<baPuhYk%xMy3hIHZ2cqNw5tp<M-
> > > > >=FAg7QS?42bVuubL3e3k@
> > > > >
> > > >
> > zvu0t=lVDGpqH=`*_H;M|i*Ua?(|lw<f@llD$jFf6=9_QMm2jBG6bS)d>F8(TdL?{x
> > > > >
> > > >
> > ziA?j6=(oYhh`q3})Gm_n=DFCP{p@FW(G25ZFS~ri<bVJE{Q>w0T!j3~vsjq66%~Q
> > > > <
> > > > >
> > > >
> > z<;#y4F(Q~fW_J0A7vBJ6#AxxVtF9_)cbURV0s(BL8NcC?RZB`U%10Ks0yrXLkFryz
> > > > > zP9-4?rjhADfGv`C?b@wdw@#6j8Rg@B_uZ%1KxZ<ufRhd(EyY^k!-
> > > > |*!z6(BC<l|3%
> > > > >
> > > >
> > z@{<4#8BnMzML95SP7?ww_~1@N!pbc25nraxub#>=D&lGC7E_m!Mu1&Qq8
> > > > $~K+syG1
> > > > >
> > > >
> > zOVW=%`lw)Aye^Xd=%bG=X$dfmPagu8UV16^3xd#Qj*lHXb`+W*KV=Q4apT7
> > > > 6>kU&Q
> > > > >
> > > >
> > zgFqP+T99Yw8f@nH_{uA<$O$OiC03N_c!NNi5x^jVaAt)0Ky<Uk$K#GWPRmgh(
> > > > H{sc
> > > > > zm*&1Obu$Q92r#7@K79C$88b2j2)l>E=TCCV*1z#Xm7&fxRRsZ-
> > > > M>2#1uHGaB6mFrj
> > > > > zl%b}Xsu~2cg#ccN)fHC1_~Hw*rkbt(HMPwa0{H(IzJQX`2OoSeTdgy-
> > > > H3(!20YbS+
> > > > > z2<W_pg)$-Rv(-9NTZ2Hh5Fm<;lXQ|}qm7fTo;9`290Ej{mk`i-
> > > > 3k3k;j%BWarosk+
> > > > >
> > > >
> > z3?YDyjgxeeW1_TYs9mP227xRhfT@&(gU(wQUU*>^8))im5XcY$#EW;5&g&RQ
> > > > tQl&Q
> > > > >
> > > >
> > zsj5LBqX;Oftr~6BjP|docD4{ubk)utWwF|Yy25$qork(Uj^zoKtym4zYt?^&m8tL=
> > > > >
> > > >
> > zp<W6pGac9q?~54Y4<0;t{`~p)U?gZDAqep<h5jUeQE6VaY85`lCr_R{Y}l~gy?bAF
> > > > >
> > > >
> > z*=1;SEB2R31_H+%bBxyj)p;G4ssyJ_7%`j`;CmBS3{D^N*IaXrVl|xg_dOmoXpmyI
> > > > >
> > > >
> > zLNZ+=wJKGr2ss2eML()dn>LJC;KlOg%L%af`RAX1<?(yrg%<)8;e4cCy?P@@j(q*~
> > > > >
> > > >
> > z*8}*+rczHn`DBL<9gaQrSZAKG9`lkUEQqhGLqg!8XP&BnYe4NQt0dsP7b}25<~R`
> > > > J
> > > > >
> > > >
> > zQ&>=iuax=7w}!>HS6_YA`GWH8zQBFQnBm%MuYKc<H++jwNkE;KEn9ZujW<F
> > > > Tp}V6x
> > > > > zMVN7oh$ZsDg9oY7`|rOm&)M>$i1)S$6DCxuR7svVnY-
> > > > Yl0_HvU+>=awD1|rw?%lh+
> > > > >
> > > >
> > zYE`m)#FyIk?c2Rzkz5bJN8X162M*k|YnLS3z_*Ca(Wp_Q2*rs}G%+RJ!MhdtXf*_
> > > > 5
> > > > > z!`ZWEpLNz*5mqcfR-;FcRsoi%a{)3B@Q81$$r9va*|KFBl&W-
> > > > 7!8E#jJonsl6NoU5
> > > > >
> > > >
> > zb#NrHmYAZtnP}ml#YgKAG+q`jUd(qkfapf@$aBv<SFjVE7r*@S%fQPWT9srx?<
> > > > }|A
> > > > >
> > > >
> > zajEeUp$*9nEk53I%PnDi@)ztfuZsr`9AMlPX81a8+&HhyxgLOzc5bh|_8RXcE$NL
> > > > U
> > > > >
> > > >
> > zF?F`<;B~Nc>C#Bbl4pW%bFT_Gua^`bS^QC4{dPhm94qqi_~VaXv}lp=YyzjO*D*
> > > > Yn
> > > > >
> > > >
> > z%ZB?dEJl@DUcE4UBxfeP41>eGF5K1jy&{>Z*^MRamv25H6R^hh*=L{GB}xuTh
> > > > mVX&
> > > > > zB3VmO;UkRLuwjD)_E>KbC-
> > > > jt4PSFw}m3dZ3K3Ywt3u@G;p;fmqiU0c7zxqPWTOv#m
> > > > > zD$hcB-)dM1N{5du#VcYWPv*-
> > > > <J^{}@`>Z^ZxbN~^P#+&Mzx(dH?|iEi2_GqiaWzh{
> > > > > zlG!*`84g{4{q-uG3Y><W&9A@y+816cL5c9OTD58_BBuhHFCWK`AFq;6+-
> > > > Z=3+O=!@
> > > > > zN)f!+ym_-qWuoGvRTeYKNEV>v4OFpwY|^BOJd==jd-
> > > > Uj`0<V>(MEIzvRIGxVoR5J6
> > > > >
> > > >
> > zeX10#m1geTxhl(s&6+h+%r;s+QYdeXZr!?tly>>!pMLtOZ|ka8uP)Cd<X!fCeCuE*
> > > > >
> > > >
> > zC<Q*Uv_e>0yU8IBBz(lXepFxKkd?$kh2nq^qd&#6BIl!3E?W}BfD0+}UXSnHyVtj
> > > > M
> > > > >
> > > >
> > zXkB_e9?5kC#<vc3f>Pk)O*h?Sw>SKOgpa7wh0i~H4(g@~Om)?DlVai{?cKU{YlR9
> > > > G
> > > > > zA`yNe6U%k81XA>bg-0SkRasNAYgh_=oHJ*R-
> > > > Co@Tw7&#BRxkZktXXw4x6|W?f6}B$
> > > > >
> > zty{OQRjbyir=E(!KkBJft5#*DrFrw_L}hyM#TOO#G4H?seszheT)DDc2j7GE_(;)2
> > > > >
> > > >
> > zu3?U^UUS8izR~60dFLI)tb!#&*$JfxUu^9JrNGAkifU{fUVQPzTCT>>gSAmrKR~N
> > > > o
> > > > >
> > zF=z{WC=hndnl+Nlbt4s`A}+~IxD_iODT}$D`kJsJJA6a2gTG={!IBZSPk>Q=ntML7
> > > > > z6)Q);eYbn}?z-
> > > > T!M(55)euZWK_U+s27DW0kUAnlJDG1caQj%_NT1$U%^AWi4MI5av
> > > > >
> > > >
> > z>ArpY<h_8lye?>3>94rr3V8*DySe8hD$PQZ<)^`3m|AmoDgdGC)TyJ@v(Chr^`R
> > > > GP
> > > > > zH-
> > > > tqb3>lmW6p!)!YiHtnkN_X40}}*vXcg=4n+)AldAl$&_01$q0{A7bfN(eWe8k{a
> > > > > zXtMk?z{jzC`SOxD!tUaj39=F!rk8n^r5J0Y6HAI<-&r!jl+s;2uPeTM<ed=7@-
> > k+j
> > > > > z7$t?o$9mj%EoJA<osksem5Je_fQ+IZuPua38-
> > > > *NvPdj(+Y(K7Yz<RH5o{9<j_3PKF
> > > > >
> > > >
> > zRV&5B?qoP6P^qw$#+Q%eU%!5RlBwtEl@eY@vNh>Dsb@pP4NHVq3?BtBbp
> > > > Z*mJN(#V
> > > > > zk9o<J`}+Fz>xCK?@icNi(iYrMpnah=U~r?v6>`8jCL}nlS{KaRzKBjj$RgyA>xv)g
> > > > > z<r&&{?Ix%kq{m-
> > > > }E+7FMfT$=*+Mq=>60`dy%t0J{wCY2MbKkL|jfvL*euP4rS~Gs|
> > > > >
> > > >
> > z%G|n65n%xIeO6ce3?GI5(&eMpdJ)Tg2^$>A1tvZ|QZ6BhAAkID0bbox%#_%W
> > > > mA682
> > > > >
> > > >
> > z_wvgx_bu`8!w;9_5b~DcqX3{TAi8|?eFHn?VfE_OLiLJ!8Y>^IrZFC1Oy~qb_ZZLu
> > > > >
> > > >
> > zQ$|JMAy&^|y5eWPkAisU@^Rt9g+dOJQ`Aa}OF*IY1o%jan3=dYOeH9}Z?Tdr)L
> > > > iit
> > > > >
> > > >
> > zC0@%Jmpf1U%K7J?ub5kaWQLCdXu5#t@=>lZV|TiB(7%6wp?bwVO@@!O5
> > > > mdKr+a{o)
> > > > >
> > > >
> > zb&9LfU|4P1v`Jo2toDz(;%B~(LTBmnQEPdhRgPdn71L9R@sawUbka$zEemL?pJ
> > > > Jg?
> > > > >
> > zvu4czIN(rPUdpIZqXJ~B_=w@70F*8ux_rcQvb?*Uce{4&ihg*)KZ!L{l6<6JP{Bnp
> > > > > z-U*1-
> > > > @n8P(7Zj6({`Ecm&2N4qFXj2?pZCoqZ~|TNGv7y{v$XigVyTw)zED;&rxFc^
> > > > > zg!zb6vofQ#T`NGuY+aWcsQU_;2&X%C?9k0qJ-
> > y+hfR!#FT6_$ktS$&c0;j3sqt!c>
> > > > > zC-
> > > >
> > Y!!zvGTOgf5n!`dV0^co4uNpS)1}uCDl*@1r0UT6`qDweWZfPgBT8#ub5Gexcn;
> > > > > zFcDkeRSr-Zm-kEEx^-
> > > > 3Z36RF{Q2<RB5G_77XwX33(P_AwLO#+*cwKw@?YD#BL*Npj
> > > > >
> > > >
> > zm*uAfuaOrN%sNJ1sC8FY{LJ@J=qW8ewrtr_cszxt>Et8gO3a<W`;u+jwpF2nm4
> > > > ={-
> > > > >
> > z@_vcWC9>h8&`r94Xz>y4N_j`8;cml*4Fyc>)8yB4?4qp$28zD>^#w6RIaX`ZC-
> > > > )J7
> > > > > zzZ9WjQJw0FpZPut-L1t(cEp6oQ+Rsz*=Ku6SJC-M#fZTd%os##-
> > > > _X}7F3Ub%D22Ih
> > > > >
> > > >
> > z_$Z*K3y2mU%atpaLIMg^lEe;310U%x!T<?%Ryk#1M_tw2*DQU&fB}N!L~^Pte
> > > > &+iq
> > > > >
> > > >
> > zbiEcIaX6g*{YPA!d5Km^_(=6utXLs*gv#kd4?X17G~qfcx^iEv_)8ZaiR9GqQGihw
> > > > >
> > z5G_7Zmahjh6}gHp4PLVZK%A%P;Uhao0iw5~M8_7evqh3)l=&q%<A;{8^^(Vf-
> > > > O?35
> > > > > z^L-ThNSBXV`m4;9SnUk?>)pGzP-
> > > > n?0w$c(oN)I2Y<bC(uCuxY+Ep>mhzP6C+T#!I2
> > > > >
> > > >
> > z+%kL&35YHqvCi`n75DW>A_aHq)XAN**A=3f3xGIJQ^iNTK%=4R)ex`ixQJ9#YCY
> > > > nJ
> > > > >
> > > >
> > zBjoNMXUv%41SgVX!$$!|T|jjC$P~s)RNU9KcFlx_*r$9E+&Oz)A()H(p!*<Ie587~
> > > > >
> > > >
> > zu??`+I&k1Xchd@988Kpn7f@VhGgKu4QNf(OF6xRO>AkWNu1gx?zEwK@bF@
> > > > ?fbagL<
> > > > > zF0f7)ELh+M-
> > > > 0MoOUcCxtVqHudAF0)>S+l&_;&ol!hbogzd1NKL5lY|+aLe#f08JMV
> > > > > z-
> > > >
> > R~od0Qf}m5*6Y4%P+qyR4>3OAt!`vC8q=gkra_aK4Kl_8+60nUUjeLW5<qlKW<;
> > > > q
> > > > > z)x?uvYu(ZnKl6RG`@%ZV<s-
> > > > 1Ghe3zAnC1F*q9g$hVbtl*w?IAsOCcX=JL6BGQ+!XS
> > > > >
> > > >
> > zPMs<N&3TKMERx7XjFzJf>yvdpYAsgKO~|JcZTGP*AOZO3Yw_w7r;t8HCr_U2%
> > > > uRmG
> > > > >
> > > >
> > zrk)!R=aqEw5yy1$QKh@p#05|f<2Z5RM0XDMl`&(+I3WsotSf$L`#ut($wo%yz<2
> > > > ve
> > > > > z7mxsa)QS?t1_bgJte4TWk-
> > > > Xd8a19$aOkPkr`AD7RlySF|D;+y_lsDGCOPq8`)Jq&b
> > > > >
> > > >
> > zNHi$yOcW1v#V>7qoHlJ*L9`2AWON}Pj{%x4AOZM@%{$=>3)ZmUMGWK>ds9
> > > > d@Zrr$n
> > > > > z85X>V;*js)A+>zO!ckZ834=-
> > > > jF3IWi>C+2>W?jUkfaF=NTe{+xDn4Qpw|n<)2~ff<
> > > > >
> > > >
> > z6=(0dfCS(p9mFV9sGIyWKnM>)@DTe+o~`q)SKL^qIHi`4RFXL6&gS?YBMj<pTA3
> > > > tD
> > > > >
> > > >
> > zLjSNJ;6y3Rv99=~ijP`*d34amjT?Qj(gh?K9~t53n)30n^ZmHntwWv6H}tk3u_|$P
> > > > >
> > > >
> > z(#%J#S%B4c%)@QOd=KW%ohu;bJPi{K&{?#u_@#u8DC+<I_rG@nqH;{M6ldE
> > > > D9_s=U
> > > > > zjE@w3=bd+|)Y+Ma=u0XZJ9wodX1eo1-(!XuDuD^o%ts*A+SvgU-
> > > > }$mrLJ0IA84|zp
> > > > >
> > > >
> > z$}7&qfsb{?FD5=NUApvkh2M}NLuSsLNib8bk(e!wD&u@zKv3b3R~#MGg1y5=B
> > > > )VI6
> > > > > z-
> > > >
> > P8}(ty{;ca>a@j1qQKH#cn?FVb!y;Q!46Xq@0hsvjE+3rhGmgiL+c?@r#L%wqV3}
> > > > >
> > z!1%vHg$f0!;k>8|h;M~?dpPrV9;1Ha`?w?li+<a;Z(q4`B}%7^P6KF;S(&5auDJN0
> > > > > zay~Lvk-+7?#m=l&Fb+_XcugmiIpGGJ{Ttv|SNyWe$0bXasNkauh`X1CD-
> > > > u4^ebh=w
> > > > > zpYSOx#`abP8PcSjkJJ!P8d?Bi#G%-
> > BD;ZNx$*8qMhYnh~xfAP(Uv~M3mv49T-
> > > > B)x0
> > > > > z@$G#HA1R%^MO_i{Em1203IlEsyso65k8-
> > > > 0$H!{pMyc+9uUE<1v;R;qEUJt5V*A>5v
> > > > >
> > > >
> > z@{yUo;#fi#5O)^~SLA%8kBFC~wQDcrALbM<Pm0DzmMo>8kL}yH*8(Jf%@hH
> > > > h;hk40
> > > > > zefsoK;hk3+UGd8zADKC-
> > > > FGuSF;?*zqbzeTxHEb{1=@UCZ$4qO%pL(XBk1T3w&7*af
> > > > >
> > > >
> > zbSxg>C(x@DynKZ58=xzGS>)sB(WAXyNAByofcVl!g^yIDTeof!r7Yi4bQ3^E^=YG
> > > > x
> > > > > zQu_HwRoP`$M*~GxyLDOz5)HjD-
> > > > dT0UFLQh(K$4bvp)Mf4U9ZSTgrRZc#>sfs2}VY0
> > > > >
> > zm<c}0Eu`H2rS5djNmz8l2(07IjVpXQQBH6sRzKDizijc5)l0lOsG~tjT|f%<i1VU4
> > > > > zA1S?h_38n9P&kY8Jq}Dps+S2qvdHNRf-
> > > > ?b52DBu^PK;k8uTksHojZe#T6M)QD|`ef
> > > > >
> > > >
> > zRLuh{cIg7*?Ae0HT70Chk3ar+oMuS0B@33Kco9NXty<NVDBXih@KINBPF<wka
> > > > 7i=-
> > > > >
> > > >
> > zg2kHG6+iXLD@sTl$%w04zkYo;dMa0R0r9QBE+4H*qMb$TLa*1aZ=vo4tTUk1q
> > > > k@1W
> > > > >
> > > >
> > zO(yt=e|2~BC0D`($3aC3)iSTln>A}D0khyOUGYmZAMqWE5e>r?#jTA<0P*Sz`+6`
> > > > w
> > > > >
> > zT6JStSc?L7q0R$z3#Uw(!e_T&d$lfVRR*;mt<0lJj7J4$^L>x|_wOI3XvU?RHf<_c
> > > > >
> > > >
> > z3foCq`ae`7yL@CG#Dse7+O<p)+0?%J>Z{op3InY5tS%r0JHmM}3?Hp3VU~zyCS
> > > > kI*
> > > > >
> > > >
> > zw03zrJ^l34XwOChi&c|M@R7H%)@Xm|(4is4=JeA~_i|>gYrDz^7p*+?pP<7mX
> > > > $Y&D
> > > > > z_K!ss`^TKl{$YS-
> > |1c)9f0SbXfY<&>ii_%&E+2`jB1eygM^!iQWC%2J<j6U5=0FY9
> > > > > zRx#SL+~Z)-
> > f!j2k*kcyN{tkl#7679v*Ul#se5AIYefF92l_)=E4rn(p@Bt38yp%fd
> > > > > zM;$m@^Pnyt1KV3g1vM`#UI<a;CeJ4;eDoSX79=LN|MFHV-
> > sK%waK6tAla*M-
> > > > OiVHX
> > > > > zfz0tysDG@dS>Ypwq6Mi}@M5rq(1JL7g)qR!PMBrwf@PJ+MZ-
> > > > r)N9U4{=!Z+1tb1$T
> > > > > zym<v#zj^cKU^|k!706k7!$(PnW`&Ph<5k>mN}8;Di#a}Pj0Gvl;y;rM-
> > 3&`Sz2T!o
> > > > > z0J6eIt@Rv5-v|;|gj?mymw)%&cMDST-
> > > > h1yA5}Q*w0)~$gd@{jDzCl|19sT<ClQcQl
> > > > > zE%rcJ{dQ9l0E1;%vQHU4O1eH1eALwk=-
> > > > $1%q{)GAp@4y&m_SKiKBAX3T<2Hx<^90;
> > > > > zC_ZTTC;=)HeALyK^Kv*Q!9npBw%&jI;~$-
> > > > r^yQ<j_~m{lMHi6Vzo4A5mkB=V>XYL*
> > > > >
> > > >
> > z+S$fvkB>U)C|p6>lr((Qh1c*=f><W_sB3Q(ha!^`LsneTb+jmH_~=AN<=F61f>I{<
> > > > >
> > > >
> > z_~3&N+TSDJgFSopNZK3KEfhr2C8jclkGhZ=K1vXan~#xf&k0jDIVG1bUoL5HgtyS
> > > > m
> > > > > zMzz@RQ5RCfM+ssv@sT+=e%{z1z=IIpFZq-
> > > > Nw%JE}|KP!cat=E0st0D3z@m7Iw+-&^
> > > > > z<cW2~&#dP-dy`|co+AKapDNlvVh&8)goht~xM|a-<;s;KK*@js0|-
> > > > GrVZsD#f8^5Z
> > > > >
> > > >
> > zzI)+?7upq2ISAl?)m><WR}3EoFm(YjeDo4~6+YtQ4(j1Pkx*q9U33wBfrDs{2}H7H
> > > > > z&6)s~iMmmWA_=-
> > > > 7h)|eQUGdBP_Yp%j44l<}C`X0CKU>d6J6>gMiDO~Bh!DpaQd@d!
> > > > > zXm?|^1UE7A#oOL_=bfhok-d`X^_Fm6$6_%tQ#Hj_7(OZjWs-
> > > > qFw0z{%hci90wfTs4
> > > > >
> > > >
> > z%D3Ns`}pIJTWG^gt&nhK%a%QK=#Z0f^5dw2#96hC<gejlBrujpCeiW{#Zi_VfzI
> > > > M1
> > > > > z+GSg|Y~kYwD=j?HoWXsrI<{Ei%Lyplz3Z;K)H6>erQu^TIOn63X!(e-
> > > > gXPNG;v=s6
> > > > >
> > > >
> > zq36dRe~c3nYmff2%PwOUsScf6UsNEVa7yG9^~{q=Y5157&iN=MT0RnS%nF}j
> > > > @e!Y0
> > > > > zpwzHoLs)ag6<2V4&pr1%^2j5K(Ba5Ppqu=Zb)-nPI~A*^n9T4|5h#-
> > > > k1fu2R2`8L@
> > > > > z8?Kr)Yg&9{w%DRY3o8sgI;E`kU`2@AKt<%W)N-
> > > > Ke6Hh#$m~)cJ3?Gw3JL_dd%SX^4
> > > > > zLNtR+h-
> > > > n8d`QU>O9(dpZZsA7nrI%h(M2zt*5u)WEMB#1#XT^$@36l(CF}5(&f04M=
> > > > >
> > > >
> > z4O3zBY!MNNoR4_*#J@MuIq@gY&Jhcwv<{hEuwVgOAr&iDRBY_sci%10O@2
> > > > yzjT8=6
> > > > > z6&q`k83Zf@BIl!(ZO@)P@xX>RZ&p(oqvG}%<s2-
> > > > P6k*5A(Ehy2X=vXyelrxYHObP9
> > > > > z0AoDjR4V@3v}vQ&mNU*cgGZP->Z-
> > > > {>E}Lj72YB;P|MF@z!6Y^alsE$D*AY`yg@$&T
> > > > > z7hZUw#6dI7HweUpz@$l&Y@#V1TzTb{F;&K7YY-@91TYCH=%Qaj%-
> > > > 3Iky_69%Z8r$S
> > > > > zgaD!3cJ10Fp<cmTmK8}%RZ2s)?b@}|Rl-
> > > > k0wM`wej=;>BGYc|Ka&htE#aVB)Z~X~J
> > > > > z0s_pDv1Rj3Y!Vm*B0-
> > > > >4t5y=;6}&~9sWZ<!Gm_HNoQcIp3jwr$0m|&Orn$dzP&YiR
> > > > >
> > > >
> > zqG(r;bdrk%?ae{keVgFqqlE@mGhMoL(cMMzEyyG=2!H@;JZRTQcvtY&C!c(RR$
> > > > eIp
> > > > >
> > > >
> > z=;osZ2y^YeefvfjEV~rIG;Ne4fI0uVb?XW;PJYoc7?Ee5kGo!cwD7^I1@#F_FEJnO
> > > > >
> > > >
> > zHLWNX0?dOfFQ#(px$l<9NY&~W?9QHh?m0II&MV)1^9@dljFM8ZBsmA=qIn)
> > > > *K@}my
> > > > >
> > > >
> > zU_@ONHU~giO=#S>@tbeH>ExjM81I@uS_*4ix#`xFGz9<NPd)XNTcUigpsI?Oo
> > > > |LpA
> > > > >
> > > >
> > z;c76PAaufx9XsSGegFOU%a$!;*AkEuuAwO|iwLj;fgz+^sJ!mt$~B8kj<C*{b>DW|
> > > > >
> > > >
> > zZ7TLJ7?6$~JC@;Ygr%FTa)tm(I9mSyoy1i4^^r5s+|5Dje)Q<k__uW8<8{1x_3Ex&
> > > > > zyPB0)H;g5I1xIsUfxo?E$-
> > > > cg5(ITdtB@Up_{L@Z5ZO)uI3{Y*9BnRy9vJMt&Fg~Gr
> > > > >
> > z<}}R+5b9$8{{0exk=#NrC2fw5(*reL^_(FoB`{jIHg4RAt1$*D>1l$gNs<VlNrHa>
> > > > > zUpetgK%9aS+4>LDDQw7Y+O)|FL-
> > > > +Lq2M*w;+UUfF!90u4R<2x`ubW#Q6t8UEy7kmk
> > > > >
> > > >
> > zPt9V(ldm)5d0ai<@KzC9D;X~32M!#FOTgqSY)VWL0X~aF!{I%wB_7Vi8#Zh>@x
> > > > &98
> > > > > ztaA>^V%?^H|Nb9+^pO)u-
> > > > ($>9@tq4Xt5vI(0}xCT1O)IeNBl=$F_0u!wQ3cPt%PjN
> > > > > zsUiY|i)9OP?b@{xguQOz9*{6A#^_QJ>XavADW0eSii>_;B7wP|S-
> > > > ^>;qY0q7aN$Dq
> > > > >
> > > >
> > zD7>JST*pNxJD6B}8w;;U`Xb>>h`x&JV_k1lZh4qCZJN<7iMH>mR;|kJEo!cAv{kNP
> > > > >
> > > >
> > zO~YOZ;a7~2SG4^SQ*La8J^JXQVWx_fRFDHZ*D+PnWXsTn5Ma6sK2E|C`I;S1f<
> > > > 74S
> > > > > zf^>=#>R7X9&nC#Dv)6(hZ`-
> > > > !b%vloXWxjEpJ9mETt+#@8ll2rnu5p$^KtRH^Bv5Bl
> > > > > zgf9XYTyOyslaTX7TO`QJtls!y9&LgqO_~sXTGyeU-DUQ{-
> > > > o1N?2XXVwHyd5qXgf$T
> > > > >
> > > >
> > zH~LX4(16`>1rM0i^y$+_v1pSlas;r?nmTpr!Gi}2_KxmFVtvk^KfhP6UNvgeh`g#M
> > > > >
> > zLni`k8S@SdwuJ80tpxZu{q)nFrI_QQAb^JfIu~cQ;XjvlU+>wohiHSp`qi(hSFc`_
> > > > >
> > > >
> > zM&+{5DpjfwMUI||YG`Wp7mg;F#pDvPOg9RBs=<Q?qZVb;Dv|>hkqDOEy?b|}
> > > > x|rRQ
> > > > > z01|@FHypFP{r20Dbcc`$u~P{`7ob+=k;D+FUAy+UapU;L34Is-
> > 6te<e?*xY6(^<D}
> > > > > zU9-
> > > > _F>C<}k>Jc~<74Gn`7t8@$JR+D&DqwD<3ITLtFS+Cr+<*jd$XQST+!xVRzzT2P
> > > > > zym{=!5O58DgQ-
> > > > Fw`N}XvY1_6f8;C?~bi)<Z6|}HgwrrVv>r9D}AaLZ7N1}lD%rnm%
> > > > > zI&>&1k?_igMIk&$@Ljm>y6af8&9~hvqj%=lSR-
> > > > O!j@_J!=Lav`6t92y;fG8W&8#63
> > > > >
> > > >
> > zUKBkOBC0daT)A>(geyOCL1M2Hn@zSm$B!S6s(kC#tr<(B+fZ~Uf>i(_@RI4&sS_
> > > > >%
> > > > > zSFBhO-@wC-
> > > > D&vqIJ$e}Bw_qKY@~2SBVuZ;Aguo5%u20|!lFXnBXP6A_SaM{HSEo*$
> > > > >
> > > >
> > zR2c+OnRCxQ_wvgx#}01DkRj+C0#{(G{4kL6<!#=)x%nohoKulh4@C|%=nysrLSb
> > > > Yk
> > > > >
> > > >
> > zs%P2JW__5gG<I92Oqs$skQL)wZ@u+~8*ZSUOoyQ@+oLC+d~z7AKV+K^4f{mr
> > > > oO2G-
> > > > >
> > > >
> > zUi3T%4H`6Y;zS(FV7Z3N{R9T~zKBr=)aQ)aTO@Lx#Y`}t#2Lu5&p!M0*I)ZeOBxdJ
> > > > >
> > > >
> > zao@LZAN0Yy0;|6KaF~xWAzxldjSeRcHd$9;O3Mx%wi1vXArEFRlURE#Yu4Luzn
> > > > ynZ
> > > > >
> > > >
> > z7NyA4IdTNhl4T)%#E22=*RPLu=Q=T|&Rjt@4J%cu6nTf540D43gF4m^XUv$fd-
> > > > v|l
> > > > > z33>V}Y-
> > > > pGprX=4Ge15V<x@5_cI5Z8?&z%TsXlR(c^ya%nW;bj}4;?xbdWNyej8Mqa
> > > > >
> > > >
> > zpOv9uzDbdu)}fixqD2d|G|@URBU|U2fzS_2moDYSg;!4#TQEHmTT(T_{R`s9wj
> > > > G)P
> > > > > z1fO-
> > vXYP+tfncW+g#qT>sLz#DznjKp0s;2c*;r={A4fopZ`q#6%9e`C+k*`hS~Pw7
> > > > > zbabC;)vASiz)W<CsiZ-`i2#E){8XTsgMJQP4H?vJ*|LQ#LKO-WD-
> > > > Ev^^wzNGXTcf2
> > > > >
> > zn%JN<YSgF%Lz+7K(H!R+0j&A3<YKUgMjwhpxDUliJ|7_5M1TJI=LD{en~b~@-
> > > > h1yo
> > > > >
> > > >
> > zwA5zJnl*g*aK3tsy|H05VN>!gc&2s15Fm^u17K|J(IsoppaHs_ke5#tu{Bvx8Z%}L
> > > > > zK1{IE<%g{qj7F7x)TmJ~i}@^G-23+J+p}j+bmTgA?AWGF8&-
> > > > )gz4TIop<u2E>9VWq
> > > > > Q9t=$LltI8CkSzrM7XaWYkpKVy
> > > > >
> > > > > literal 0
> > > > > HcmV?d00001
> > > > >
> > > > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > > > > new file mode 100644
> > > > > index 0000000000..a636b086ca
> > > > > --- /dev/null
> > > > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
> > > > > @@ -0,0 +1,153 @@
> > > > > +/** @file
> > > > >
> > > > > +  Logo DXE Driver, install Edkii Platform Logo protocol.
> > > > >
> > > > > +
> > > > >
> > > > > +Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +#include <Uefi.h>
> > > > >
> > > > > +#include <Protocol/HiiDatabase.h>
> > > > >
> > > > > +#include <Protocol/GraphicsOutput.h>
> > > > >
> > > > > +#include <Protocol/HiiImageEx.h>
> > > > >
> > > > > +#include <Protocol/PlatformLogo.h>
> > > > >
> > > > > +#include <Protocol/HiiPackageList.h>
> > > > >
> > > > > +#include <Library/UefiBootServicesTableLib.h>
> > > > >
> > > > > +#include <Library/DebugLib.h>
> > > > >
> > > > > +
> > > > >
> > > > > +typedef struct {
> > > > >
> > > > > +  EFI_IMAGE_ID                          ImageId;
> > > > >
> > > > > +  EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute;
> > > > >
> > > > > +  INTN                                  OffsetX;
> > > > >
> > > > > +  INTN                                  OffsetY;
> > > > >
> > > > > +} LOGO_ENTRY;
> > > > >
> > > > > +
> > > > >
> > > > > +EFI_HII_IMAGE_EX_PROTOCOL *mHiiImageEx;
> > > > >
> > > > > +EFI_HII_HANDLE            mHiiHandle;
> > > > >
> > > > > +LOGO_ENTRY                mLogos[] = {
> > > > >
> > > > > +  {
> > > > >
> > > > > +    IMAGE_TOKEN (IMG_LOGO),
> > > > >
> > > > > +    EdkiiPlatformLogoDisplayAttributeCenter,
> > > > >
> > > > > +    0,
> > > > >
> > > > > +    0
> > > > >
> > > > > +  }
> > > > >
> > > > > +};
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Load a platform logo image and return its data and attributes.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param This              The pointer to this protocol instance.
> > > > >
> > > > > +  @param Instance          The visible image instance is found.
> > > > >
> > > > > +  @param Image             Points to the image.
> > > > >
> > > > > +  @param Attribute         The display attributes of the image returned.
> > > > >
> > > > > +  @param OffsetX           The X offset of the image regarding the
> > Attribute.
> > > > >
> > > > > +  @param OffsetY           The Y offset of the image regarding the
> > Attribute.
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS      The image was fetched successfully.
> > > > >
> > > > > +  @retval EFI_NOT_FOUND    The specified image could not be found.
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +GetImage (
> > > > >
> > > > > +  IN     EDKII_PLATFORM_LOGO_PROTOCOL          *This,
> > > > >
> > > > > +  IN OUT UINT32                                *Instance,
> > > > >
> > > > > +     OUT EFI_IMAGE_INPUT                       *Image,
> > > > >
> > > > > +     OUT EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE *Attribute,
> > > > >
> > > > > +     OUT INTN                                  *OffsetX,
> > > > >
> > > > > +     OUT INTN                                  *OffsetY
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  UINT32 Current;
> > > > >
> > > > > +  if (Instance == NULL || Image == NULL ||
> > > > >
> > > > > +      Attribute == NULL || OffsetX == NULL || OffsetY == NULL) {
> > > > >
> > > > > +    return EFI_INVALID_PARAMETER;
> > > > >
> > > > > +  }
> > > > >
> > > > > +
> > > > >
> > > > > +  Current = *Instance;
> > > > >
> > > > > +  if (Current >= ARRAY_SIZE (mLogos)) {
> > > > >
> > > > > +    return EFI_NOT_FOUND;
> > > > >
> > > > > +  }
> > > > >
> > > > > +
> > > > >
> > > > > +  (*Instance)++;
> > > > >
> > > > > +  *Attribute = mLogos[Current].Attribute;
> > > > >
> > > > > +  *OffsetX   = mLogos[Current].OffsetX;
> > > > >
> > > > > +  *OffsetY   = mLogos[Current].OffsetY;
> > > > >
> > > > > +  return mHiiImageEx->GetImageEx (mHiiImageEx, mHiiHandle,
> > > > mLogos[Current].ImageId, Image);
> > > > >
> > > > > +}
> > > > >
> > > > > +
> > > > >
> > > > > +EDKII_PLATFORM_LOGO_PROTOCOL mPlatformLogo = {
> > > > >
> > > > > +  GetImage
> > > > >
> > > > > +};
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Entrypoint of this module.
> > > > >
> > > > > +
> > > > >
> > > > > +  This function is the entrypoint of this module. It installs the Edkii
> > > > >
> > > > > +  Platform Logo protocol.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  ImageHandle       The firmware allocated handle for the EFI
> > > > image.
> > > > >
> > > > > +  @param  SystemTable       A pointer to the EFI System Table.
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS       The entry point is executed successfully.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +InitializeLogo (
> > > > >
> > > > > +  IN EFI_HANDLE               ImageHandle,
> > > > >
> > > > > +  IN EFI_SYSTEM_TABLE         *SystemTable
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  EFI_STATUS                  Status;
> > > > >
> > > > > +  EFI_HII_PACKAGE_LIST_HEADER *PackageList;
> > > > >
> > > > > +  EFI_HII_DATABASE_PROTOCOL   *HiiDatabase;
> > > > >
> > > > > +  EFI_HANDLE                  Handle;
> > > > >
> > > > > +
> > > > >
> > > > > +  Status = gBS->LocateProtocol (
> > > > >
> > > > > +                  &gEfiHiiDatabaseProtocolGuid,
> > > > >
> > > > > +                  NULL,
> > > > >
> > > > > +                  (VOID **) &HiiDatabase
> > > > >
> > > > > +                  );
> > > > >
> > > > > +  ASSERT_EFI_ERROR (Status);
> > > > >
> > > > > +
> > > > >
> > > > > +  Status = gBS->LocateProtocol (
> > > > >
> > > > > +                  &gEfiHiiImageExProtocolGuid,
> > > > >
> > > > > +                  NULL,
> > > > >
> > > > > +                  (VOID **) &mHiiImageEx
> > > > >
> > > > > +                  );
> > > > >
> > > > > +  ASSERT_EFI_ERROR (Status);
> > > > >
> > > > > +
> > > > >
> > > > > +  //
> > > > >
> > > > > +  // Retrieve HII package list from ImageHandle
> > > > >
> > > > > +  //
> > > > >
> > > > > +  Status = gBS->OpenProtocol (
> > > > >
> > > > > +                  ImageHandle,
> > > > >
> > > > > +                  &gEfiHiiPackageListProtocolGuid,
> > > > >
> > > > > +                  (VOID **) &PackageList,
> > > > >
> > > > > +                  ImageHandle,
> > > > >
> > > > > +                  NULL,
> > > > >
> > > > > +                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
> > > > >
> > > > > +                  );
> > > > >
> > > > > +  if (EFI_ERROR (Status)) {
> > > > >
> > > > > +    DEBUG ((DEBUG_ERROR, "HII Image Package with logo not found in
> > > > PE/COFF resource section\n"));
> > > > >
> > > > > +    return Status;
> > > > >
> > > > > +  }
> > > > >
> > > > > +
> > > > >
> > > > > +  //
> > > > >
> > > > > +  // Publish HII package list to HII Database.
> > > > >
> > > > > +  //
> > > > >
> > > > > +  Status = HiiDatabase->NewPackageList (
> > > > >
> > > > > +                          HiiDatabase,
> > > > >
> > > > > +                          PackageList,
> > > > >
> > > > > +                          NULL,
> > > > >
> > > > > +                          &mHiiHandle
> > > > >
> > > > > +                          );
> > > > >
> > > > > +  if (!EFI_ERROR (Status)) {
> > > > >
> > > > > +    Handle = NULL;
> > > > >
> > > > > +    Status = gBS->InstallMultipleProtocolInterfaces (
> > > > >
> > > > > +                    &Handle,
> > > > >
> > > > > +                    &gEdkiiPlatformLogoProtocolGuid, &mPlatformLogo,
> > > > >
> > > > > +                    NULL
> > > > >
> > > > > +                    );
> > > > >
> > > > > +  }
> > > > >
> > > > > +  return Status;
> > > > >
> > > > > +}
> > > > >
> > > > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > > > > new file mode 100644
> > > > > index 0000000000..fd9c489815
> > > > > --- /dev/null
> > > > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
> > > > > @@ -0,0 +1,10 @@
> > > > > +// /** @file
> > > > >
> > > > > +// Platform Logo image definition file.
> > > > >
> > > > > +//
> > > > >
> > > > > +// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +//
> > > > >
> > > > > +// SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +//
> > > > >
> > > > > +// **/
> > > > >
> > > > > +
> > > > >
> > > > > +#image IMG_LOGO Logo.bmp
> > > > >
> > > > > diff --git
> > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
> > > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
> > > > > new file mode 100644
> > > > > index
> > > >
> > 0000000000000000000000000000000000000000..d1d099789fa794648b86c04
> > > > 6f0320a553954764e
> > > > > GIT binary patch
> > > > > literal 11944
> > > > >
> > > >
> > zcmbt)1yozzwr+6OVns`fYjKxAi#rsGl~SZwaQ7xSMH;L{gF|r*PAO2VloTiy0>$0k
> > > > > zA3gV;|D1Erd-skz-pU>sd+dzt`RzUD`sO$1T6a@-
> > > > zX7CbN~%f#G&D4T%KZm$hXg1B
> > > > >
> > > >
> > zFwoKe9QOnB{=mY;!otMF!pFhE#wEljBqYEmARr<pCnX{#BPJjqr6MJJKtV}KNk~
> > > > FX
> > > > > zLq$PDPC-
> > > > fW=O$<v_y57f!o$MCqaY$6qWE8ryDtDTT)+U@Qw%gR06G~O1{vC24}cMX
> > > > >
> > > >
> > z20+IEVBF*V`@qG+#=*abiT>yJ*Q5Y642*m1*w}c4#JD&B02(?5CIAZ?hYS~woL
> > > > K<)
> > > > > zKwQ_-t)Akspn~^1N-8luBd-s&V-
> > > > KGQy>a&dLsN2V>Zoa0L=^R{AjzqD`Cms_MGXv-
> > > > > z3cJRIUxan{{M^5{K=Dte{}aNWt7QKG^!KYX078s=v}71$06D<t&sga1<Y77-
> > > > 6!?Fg
> > > > >
> > > >
> > zkmOqR@l8Kl{#s|UYF@;>+y`NB5f6%1VS@y`ZtL(3A7^4K^G=(4UE49w?T_0SDk
> > > > G($
> > > > > zN1<Fzi-
> > > >
> > #BCZuBd*+s^07kU*dt{v81Q>)gk~AQ&^pb*wNQgm&5Qja9BOcG>LPphMn9
> > > > > z?<LSCzG-
> > E!dB<m>vN(4)gekvjlgi*B7D+O@84|?4X;VNd+d{aB!>#pj!RbY@V{-
> > > > 0M
> > > > >
> > > >
> > zPKO!E5zd!e2f}z9zFqo?RzF^@dVZHH#ahPeGa{TZpU_*TS1M}tX|w?EK$R@^Lk
> > > > RGw
> > > > >
> > > >
> > z!2NJxRO`lH|1I4eAlB_T*bxj_KwZ3X{pDi~+h}#8{=KYTznUxyJMG)ThL|nWX9zRy
> > > > >
> > > >
> > zjlcdeRPG?hqS!3Fs64*K%@X8ETgA5=WaAe}8M~Q$o<KY<;?t0OTsCev^Aip)xZ-
> > > > &7
> > > > > zEnwj2m76xl$_MdV+x{H|P#S4>kN+4mZvm5zF6{kGTDNoQ`j$h0&=;2p+-
> > > > Mm#r;q9a
> > > > > zs>e7`0_!VEV8!}BIp8l(V4*`i?MARK`>JfxT(4<Y*rs-
> > S%vWL0!r{>*Qllw5>&m((
> > > > >
> > > >
> > zI+~jN%Lzeg%hnEzdBDc}>Pl=WN<Bm6{2?g>c}Qq3kngxNWsM~L?XtNCxd(st+&
> > > > s!y
> > > > >
> > > >
> > zI*EgOrXSDx282+Z^`WkNLp5%?Z5T!MlIZj?Z;RlQ`kXhU046A8Ah5sU<#$$%HnW
> > > > 8p
> > > > >
> > > >
> > z%i@k_8@M(#J9<$Rv@YyRIr0Kn;u#U;OMJW?y=?POH6LAyzUFU)7%XSboO{-
> > > > I1(G~!
> > > > >
> > > >
> > zv&NF8LJDonPp@=)(heT{7*k(r$#v`!oGxJ)Oxu5Xb))L#NmJ3CE%K@T7NbCa*<Y
> > > > 3{
> > > > >
> > > >
> > zSkVIUwM1Y;`p{X;$6MH+8+5bvi99ug<GoxS<aAQHwEI+(F1~ZtI!5~r5Mw8E9(X
> > > > vd
> > > > > zUrJtY`3-
> > > > q7^p>6A$y5?)h$gnjn>G8wL;vS%m_wlDvulFiweq(@6$qzti;NKBX@X(6
> > > > >
> > > >
> > z;F*7)|CQu!YNVQ8kWB*T9bgj@^m|rs1G~^qc*#HIz1h6Sa<Arafr{L!p+et*ooI{!
> > > > > zMIsQB5uqH1voeu*r4H(0{WgJb5FYpS-5#cI4DNinbgL(w@pbDN{bLdE=I-
> > > > +BLH<6@
> > > > > zJDE)m`9pQthFm2ursEo$*$4&bDm7)9a5WK%-_c`s`B)nR5h-
> > > > @4#bnHT`3_b!JBHow
> > > > > zxyGDgImnY#bM@V-
> > > > uG(2(e5mx8F$Jwj7So#v1GxWhp>ow^hy!(aeiO^a{iey<$mjMM
> > > > > zx06lB1|z#Qq?(cCl;i<WuAU%C)-koQcf??CdqKwly`#s}-
> > > > )2PTm^a{pEuoxR=C#gC
> > > > >
> > > >
> > zs@TJ8#4zz8InTL)<1nfss&!dP`@^_Ya$?Og(x{@I4dURS)bN{D0#kL^gFy7@Ppu
> > > > ue
> > > > >
> > > >
> > z>&J*p*N`Na;KD0%B22CEY}XdL$O}WaZ+p$(3wB9c1NkA!>=W=o3Y>Cg12TO*z
> > > > h4fT
> > > > >
> > > >
> > zSA%uomW@1Gl5o6W|JkMiZ5ZTo2JJN0fGl5hX(@{54lqcN{n;X4wBsu(cO0n?&
> > > > $k<J
> > > > >
> > > >
> > zsY3z_`2DcPSkp_>0+NTydjm@!SeX7`a!6K%9sd(~(LGQ<j~Pc%LnEupS5FcO*+U>
> > > > o
> > > > > zsre5rS}aW)s}@)gnlg{qR7-
> > > > r<5@SomE6N08vY@4nCv<_`8+xJm_R8a=2_UR+*Mq*)
> > > > >
> > > >
> > zgafvZ2Ljj8qM30Bw7#k!fg(zOI?QC5TacQR&pROVy2xtX{vDwB8fX<$yY_KhYTFe
> > > > `
> > > > >
> > > >
> > z6V!988l(NgW_i1Dq<Y(X2h&?ef9)ZCl@KwL)yUv}nzilJ1F5Dx^?+I4;WOwVxu_e!
> > > > > zrzuo)hf7U<4or;rr^mo2%+RXu<Nno_E-
> > > > MqUbaW^+bO&JL!B!hoy7_Fpt8o9V3-J8_
> > > > >
> > > >
> > zw4D`mw~0ZLxk!!$nvP_poz__f6yn{K9eSf)fm1_~&V59f2MJ6{;xb(dWT$mSzW
> > > > WSY
> > > > > zCQm-AL8Vn?b<aePPdE_Ih@94d?-qAua5UXMO_vw!e(-22`4Zj<hC-
> > > > p6eI<pRAWZsS
> > > > > zb8l&H%4Ch-r4mX`tuFn3S!aPU6@1f@eFyM^e+Ki-
> > > > R(kLYWoNjiUT;*DRZNqc>Boy#
> > > > >
> > > >
> > zsU_#B%Fd9O{MYP)g>yon?|`q$sUrm@?xDp?`?@DAql@r!<Mk7UpO6q~4Sy#
> > > > 3d1$Mo
> > > > > zTo{ex<xTRjqhMQ<LFSm60Y<O<I#Yc?bNQnTO2}AiAPws`T^iO`IV-
> > > > >R0o83OvX&P$
> > > > >
> > > >
> > zoGji5r%^OavL<0l$alF^vw$Ac>|(o{QnE^3Ry`M*a?wj&)+Y_xz4E&rZKb(WmB;a
> > > > w
> > > > >
> > > >
> > zz2WL)HB+aw{~%q=@s*V?B2}?&z5{|z(O0%Y)*qu1Oe@xz@Kb9;+uQQs>ULA{
> > > > b14sy
> > > > > zaP1(hq~*)$ZVP@VRo_`kBo7p+qT5%FOI`_0#d(u0b>c-f3!lIVm8Bphu<-
> > > > l3=^cEW
> > > > >
> > > >
> > z5u62#D^7jk95y&DxXZ`h>b@AM7?6OO@AkWH9*FHe`{NFfJvY~84R4JAdIy}U!
> > > > X?xb
> > > > > z58KO(*<D`X^!;n1{tGhU-
> > > > gB>3{)H<UNZNvr5pSAGpABrc$VQ~|o6WLIEux|oxV!xb
> > > > > zjD{B6#&qBk=jK*4&@lte0NvuLi)GNxZo1R;cyqG1Yx2L*Yj5>_w5=ykbO6-
> > > > OoIGc@
> > > > > z(%$_%q49Wzrf=8f*!ro}6KlofhCpLZjOE->Z=+CSrX^7{Q-
> > i;x1D%xidFpr^$Jo}7
> > > > >
> > > >
> > zhmkhq2W29QI%yJysC4Kd7#(ofy_73OyiC@y7PKyszt_yV#^~28xfR208mp_9oa
> > > > e)m
> > > > > zG^dHP_;2xo{tkF$lg1()k*<*C)r*;nOIP~r6ad&0X7agWw6Qp|J-
> > > > 7|syRK*C6c<&+
> > > > >
> > > >
> > zm#Ss4Iy0oPXLXj`W+zW(@qwy&V@v`MIHYUdw2LY_DccN?H2Ld{sdDKhz|dy
> > > > w<cRAV
> > > > >
> > > >
> > z&Gem_HJhM%1tm_vV=`caujL}+9iW@4YWm2Lc4A9|zke3g6~vK6_RLS|#lj5s2
> > > > 77P{
> > > > > zEBjYSK0StH-
> > > > KO&ct09341)J0(vgR5_<Qr2HAev&AVpIG+5T^w)kZI{1r_^2bvi*|F
> > > > >
> > > >
> > zcDnL_KAbl^aCHKjRI~pisA~@sU8+Q)Zt{k)*^a7a<t5S2=hIZiF*eN%GP363fJSp<
> > > > > zcSQrUsjo`|cIV$*k0&&gqjq3!yO`Y-yXx&-
> > > > )rd!0)UwT<X+mDe9L|a3$;n<F8nDj0
> > > > > zbt2XTx~4+j0mf`@)4?nrk_$M>$6^uZ(~Lx6J$-xXozJ66o%(}%sgjYss?*LK-
> > pR$?
> > > > > zU%@5+mRbI$3$X*b?*OPJ&08okXrqNVeO-
> > > > 9(A*20F*RkHp?htHs72I{MQs4c}4ZeLk
> > > > >
> > > >
> > z!TU2Oso2@(aJR1V5X3wDaphN2Mg8&AeG*o(hZS5rss?Xn>Vc!QRV*{#nC_en
> > > > 6@50g
> > > > > zVKc}m%KkiBa%Kt{QGrG>syls$f6@-
> > > > UE+Ri1de4jMS5)7SA)p|w1fwqa9J?pC#kfXe
> > > > >
> > > >
> > zGxL@vL}J@>8?yRiHd`zdLL4I1D0c!8#&K9GN42A(py^jwrB9cRGct&$orzhT2;!W
> > > > U
> > > > >
> > > >
> > zFfR@C;7Yd<N$aq3lY40;{xgnx$m>jpcgp*rllkD@(_Pi`@^5xz<3~fgiuUvMmtO!-
> > > > > zG@_JmlSGZTlwMjxkgjGKpTrDI<GM9TNySk!(_9<8ixLJ-fOl4;Jxe-
> > > > K_~6?SQ|fCA
> > > > >
> > > >
> > z*E1W01uG`y8tZBT$%ZihW`T|#(O)VXN3Df2Vv6Y}gN)k{Lqi{RJTkfP^AqcmkHfp
> > > > F
> > > > > zGZ67BmA;S*tg0KL&I>z<z?M+HBmf=Y@D3o3@UQ>-
> > > > JQJE@y4|C7IZj3HX(Bu)fyKW4
> > > > > zM_Lmkd1?IK<~U-)bUB*haUKu4-
> > > > dY+nq$>gA`eTk+_~zY3uflwPv_xjVj~sG_Rm17j
> > > > > z!yD==(psSU;~lX5Eeo<UUX#XWbxQEc5$m_VHv<-
> > > > gC`E&MorI0!o88rPSJXA3VSq4J
> > > > >
> > > >
> > zW;H2F4k)cZSl4}IWHQt(BebeK3Lg2YPDSNn;WRn5Z+zYE#()7sM==;A4t5VF6vUf
> > > > T
> > > > > z5#Nbe!Cs!XU6E>gQj+ky-
> > > > {@C6772nwu!48=I>ERODa#OzoOJI%F%nh}29ST4E3B{(
> > > > > z!Be@Pp{|$+i%1ePIs17uNjh1LQa7t+TJ~;tvm!lzBUU@Qtk!-
> > > > IOLF7X@!35lin4ES
> > > > > z$q5#7%y*~Dyzc-tsrB`-LA8RNHe{w;>-xn(E#n4-q*6GB-
> > 9d2Xq8+iaaIgcL$=X2U
> > > > >
> > > >
> > zcX?*P$I?ZafVe1pRh)XApuO$7%#e8=$c645;9^~d?uQq2*|kT#QPHdAIX(fQX8K
> > > > nD
> > > > > zCf&BbL7v!-Oh*ez<X_bjaLgGJ)a|*ozS4@yfc;pPuxt$pvc0|T{2|O(@yGv8-
> > > > t%Ao
> > > > >
> > > >
> > z(A(QKxtlrR`3+w9Tn22T5~6kRVKu9q={eu4?G|EZyZcH2dw2o7ypkWS$&rrWGJ
> > > > R-X
> > > > > zYRS2$b8c#yQ0^V%$-s+H-
> > > > j&OZo~7OFwssk_)$i;vp}qqU;Yd+16{VZ*<`yLu)0=?x
> > > > > z!iWZ=cLBcX1S=~eT~4wz$HN&nm*iRn%L1b-
> > > > y^{bgc&)ddW&TgNrHAuL9Gn>s7Tz}F
> > > > >
> > > >
> > z+btRUDT}eU=)~&faeUd>cG=?hCic4iQ=i;ygmP?_c@7yHxTS>kEsut1SGJp9yz!w
> > > > U
> > > > > z1N?El)P3f9=N&a$L{-
> > > > pdtjgPjuX;~yQbbtecL0Z?=v$m>rjs|+>m|&cBEv*uaWV_`
> > > > > zt(Dxx=Z!+1V&_iRq9ZnOWVhhRmZXUp^cJmdw+<8-
> > > > oLRy<nXDAOF<0P<gqj`B63`4f
> > > > > zYueOWi3y&(O%PZXX71K;;_cxG3+GiX4ub2-
> > > > vVmRhZKXyB<G9}2B3UnCn#s+Rd-omV
> > > > > z#t3rBMY48UydL@618@g;@%uIgGS=+skt=2xm~kl+#w`1Bg62E-
> > > > VPjZ2ZedRXJ4)`m
> > > > > zQyrg))>f0D%8bF1;Q&eVV-
> > > > %;U3qox$b%4EDJ~^T77)y3lJZMe(Fr!H9gK2jC+)l!0
> > > > > z;U+!oA^V=JC|OKjuoxyO@DU==pE$#lZkMjuLYa4N8-
> > > > ?uyEKB>^7}M0iX##x5sV0>|
> > > > >
> > > >
> > zZ%f8<2UyTC#1X&Y@Ae#F8C|WuR_l!s6J+hu)3t7_Bb3!^lvL|h)z+oUg73~=+Hq
> > > > %t
> > > > >
> > > >
> > zzxax+s3$tU$fL3<^<cAX%8XBYWBSmJ;QeWWokbt!Q^;?F6i&r@7IX>)gm5baM
> > > > D=rm
> > > > >
> > > >
> > zR!gARP?RN?S&k%wUL!e(eMn}!rZWnY<OMd8$`>!pGD^2c@fIMQ!+vev2pgBI=
> > > > }L{=
> > > > > zGI$P8+BnG?P*YWN7Cn{4;$?)a7;oqzJ8j5i3@BN@-
> > > > 2r&ZW5d^ftTcV^I~<nMZ|74r
> > > > >
> > > >
> > z4Nz}%_Et$GmoxyYppA!$ZF6dEY~q>&v+u?7neSLgLF2r?Go+}6Na~w%x_5OD
> > > > MRP#y
> > > > > zx<vDz<VIHo4)mJMj}3YfHuik+J(QxC`AJArckW5fYjx`!9oYIQSnTLwYu-
> > > > SYR%yp#
> > > > > zx8+cP?mJo5X<kvB$w}ad3|81-
> > > > ;(|z={y3gw1@t+IRa0g%+$nz3=UG{5m*v~hhpK9)
> > > > >
> > zS0|0Z_7qfdef;D^``z8BBewWOC1tVO_ce``s8#V4&ng$v89g}hO(cvYlS2ZT!nsjv
> > > > > z{(<>dC-
> > > > X`gy;m<Krvtltp0+*9=^k(i_A#?4@T4ZB_l(5b9P3aASm~B+2fBF@evzP~
> > > > > zyMi@-XmIp$F!<Bp8IACRTd=TW-_tCXg%KT#ZXujK-
> > > > nmcl<0)*EZEf?45YKDpTx0`w
> > > > > z8~yxw085D1veo42qdUL|@R8?(m^i`3SD4c@*ea-
> > > > B=Td=u1jBsNMQFQv880yl&b)}m
> > > > >
> > > >
> > zI&H5IpmhACHRHVM9SLH}&!XoWHdoc=>6`WJua_!{D<#JR4Rlw?Rrl>NzJjaQB|
> > > > !+6
> > > > > zCg-
> > > >
> > dmdU!yc=R*`GM@Ys9$<KMW!omJaq^|1BXh0WoZ~c*+kQVP#My{%lgyodT*a
> > > > ~AS
> > > > > z4F`*9+-&)9@uC>X0IfR!vjLM!iX1L!!-x)>1C<e}T92CqQIW8iZma$-
> > > > omU~(K8KxW
> > > > >
> > > >
> > zh3Wyf6GNX4vv)FWhDB4+*sF&Xgu^55Y&#<ZYANJXUkQ#_LGy^w0Pp#_Qd1Vj
> > > > 6MWnn
> > > > > zx-
> > > >
> > 8jP8E*|Af%h}glpO2}v5^$VmxGvK?^EX>g9kz?CrQMUW`d$GAoEY=%SWK#EvZ
> > > > 7M
> > > > > zCIBm(6h<-
> > > > gZOO9)qXwr50!%Rnx$dP7cyGNod@G+iI`x580UhbpfS$svDicPk^61h|
> > > > > zVtFY)!p60(YSPS>-
> > > > Sp%5F+t&nU%T2}W_qC@<zCHFE}+aZE7$fWY*PAvB5EwKyX|OX
> > > > >
> > > >
> > zZT6!*zwU#Wim8fHQ2hl%bQ=3fJs`x7TnsrXBTTIdL~9<}#CSPR*qCX<2NGiG5X
> > > > @ok
> > > > > zKxsTpk!%Q3Kg2jUpy-
> > > > O9;(KTdbgDJ6;scGYaF)0|5j)KC>kVVZm@tsPT$fZ|sC%|^
> > > > > zEp3;|{SJ9aFWMBU4t)pzYQw+Ou~%#(UI^-
> > > > R_g4<b()Ng$eE#<G1_J=Tcu`CcLw=|i
> > > > > z%(W()+_Z3V3}4pYWDZUOqS;YAc#u4j-
> > > > N=95v2ZWoI@EAQeh3W{br!gG3T)y_!&<V{
> > > > >
> > > >
> > zvK=34k4d~*!Ul&RbhX7?q+6>NeVKlx<C+46{hpgGe_7%i?Itd5ESh1jz65TYU<B)6
> > > > >
> > > >
> > zT(gY^e<qlOg<h|JRBYp%qRMT_7|P>h|JkMrxdWKsYr{6+z>b9$uVZ)A?l9u5Cw(
> > > > =l
> > > > >
> > > >
> > zv!gB~*kX;A#1N8Cj4fPR!MLEUwXGm%r4>Ad`r*4Vt)%f`C2ewpa|`$M5%B`BM
> > > > UZ=2
> > > > > z!-A=K?rk|78$~${rNUm}Z3H(kw1*-
> > *fEAZr!IN2f{X*~K6>^$T)|@?!FIt||O3~Rc
> > > > >
> > > >
> > zhA~UA1c=ELq!ZGDoet9`@h%;Ej_FmkN(~8r7Jh+t84f&)Korw>l60WBT&6aT@d
> > > > -v?
> > > > >
> > > >
> > zm2;jmw!>$N0vgjF7mNsl_nDja8A@YW8@!wYl~e4q;8#l<QsMfp{}Z#xX$m(J|JS
> > > > 5U
> > > > > z9NrwVzrIEkC^l8@BmPxZ*HgE3F7n5-
> > > > Ncj!BoI_AyJsD~|g=`+k!oi7?aoWJH>kCbY
> > > > >
> > > >
> > zQt*{>`kIUDupw3OJ)m&1U$!7ZNBJGdfC(e{^h1bs2hWa=ACI4@?GrNOP@&>t
> > > > S}U!k
> > > > > zECP-JIm-
> > > > w7Q<wFa`47u(Ng%${2+TsSB3DJjQaEnpX^G#QC`x_$O#30(=IHDJKU{*E
> > > > >
> > > >
> > znq2D!Ym%bl!@bUtk=L=Jz{iXJS8YqX_HZ>~epKAz;|Ug{j=46gw#fV9jm#=H2vBa
> > > > F
> > > > >
> > > >
> > zqc{VeZ9aJ*O|m(R$qV~<UD$Ra(Af(o@p*x@kC3nQm~)`gF07H6Fvnuk@kGM
> > > > rT~U&k
> > > > > z63%C~>q0HWFP-P-
> > > > jXOK}kK%AvQFuPwVJ|_q1I**~ISx@6mv)jFu@9ScjpGp;_667o
> > > > > z830i@PHE!H*EWW9DXClZ>WyakQp5)Cd5K$mk8<r%EMzSPO1~jUAY-
> > > > R~K*W3(sPjhD
> > > > > zVxxqqw7uKqcjNqR2LJImlNHHtF`z49(d37vOCS8{fQJ5OB_6b&I7-
> > > > v>eAGhq3z#f1
> > > > >
> > > >
> > zbzEj}>%N~(@nsTk>Um>1<za^9C_g)2z5|Hf0aC&7O(9op_MM}qF70B#F>~y!r6
> > > > <Eu
> > > > >
> > > >
> > zFJ)uQ+NV9~XYboORJ?;};8GLFN8p5X3yu=2jc?@ut%6*~108P?KmgK4(KXNvKy*
> > > > pL
> > > > >
> > z!KVf>JP@j!sH8hKV);=S15yWfJ;N=NdgwugYx!YmrXm{I%&fK#TU~qH|A#I-
> > > > +EImk
> > > > > zpotaM0qAm*kA9VSUPJliV6>b$R`a29w=RLI$OA5((38Q_U-
> > > > gp8_RqXAGDr*$6Yc<C
> > > > >
> > > >
> > z!A1waJ_hCOLq4C$cd|81&4q@?@0Us`sWP_DQP8j6WB&i42!RWAzfG%<SZBu
> > > > F&jbsw
> > > > >
> > > >
> > zcV=sC<2*U)Zvx6&@HPHB7N9WZj^zAA#F%FC(v2MfoYnCX0cE0ops1{ry$ggR6
> > > > NA(M
> > > > >
> > > >
> > z2^+ABiz4||_DBnt_g`NOAgys$^T??YrTCx*9#P7gsj_0wsgw%}Xqr<N{rdWWS!Z
> > > > g-
> > > > >
> > > >
> > z4H3qP8xIrMG3{_HBo`K3$qL!mbiXxmITj}Q)l(geS7|Y%c^d&SIuIL<81BIiw@DA
> > > > 8
> > > > > z(|T*1(_W3_%-
> > > > s1!Tv(Zw;o%;NU=NOK?F+(uv~UO5Jt(>ZsDe6<Q8=2Ov_9_>gm+$F
> > > > >
> > > >
> > za=PD_ejXn3u=GHz!=3g65%;*%m5TnFjrTr2{7yPIC{>vXfpr&Gg{;#;sWSJ(HnZR^
> > > > >
> > > >
> > zP%n=w&xEgrDM*LrnO*hLBj!dEc|0|899IAuaAz?2JI#nH^vG?g7Q7VS0!wCo<Z
> > > > O@^
> > > > > z0KlkE0xHh-H6e^BOp;Ma3_*%o2XMn!Ke~iklAM@k2SzZC`s>rM-
> > > > 2nW4G!i@hv}9Ct
> > > > > ztTN_#K~bl5i+0oZfV#D4EkU_y8{zv-
> > > > hX`i~&TkhTx_KAAlZMXguacb$Fjxx~I@r=Z
> > > > >
> > > >
> > z!;NFfic&3^+z5R!85}UuWhO;Z!ZZL394B?me49=eqOuTdHBR9N^pZ}Io)F9_a&P}
> > > > e
> > > > >
> > > >
> > zgn0*m<z+k1`T1D%?8}u2lQx2_4pWcD?*${(tPIM4x*LezJmObkESuVMX6#Av2{
> > > > @)q
> > > > >
> > > >
> > z;%=G&^S5WtA0KNPuIXV?5iorWd9CAqQc9CGggH)_z|f}T&hTT}HJByBTw4uV&
> > > > jUGO
> > > > >
> > > >
> > zfaCO#+6fF2N1bE*vTX<ntB`4Z$oawb9h#`$Qkhrb`F#0x2$B;|F}n}#0G7yKJ)3G~
> > > > >
> > > >
> > zGmb;+#!8?Nu^=B8B}~6_koDD8@oQ0;8LxY8$1bzP8AJ7)q+0q1`mE7ui}P`G@`
> > > > CKS
> > > > >
> > > >
> > zAGrqxc(``};NHt^BcAj<@?US^gDtZwO|%L454il+QUjo2Eadr{=wMYx3%+4fL<M
> > > > 8r
> > > > > zCgthu_mBMfm0Q^Ou~pM>xd%f#Q$S4T0w{R^-
> > > > Y(1I8*G={I$F4+ZH`)EHImR;^vulo
> > > > >
> > > >
> > zqEsVwKrT_obLqcU^i)YhN2z>b>5DYGpEo^I_fD@eR5KjES*2j(i^*^&SAK0jogZL
> > > > d
> > > > > zJoBPN*F*ocb9&zRk?eQZ`|ljO8R|Sr@l&A2#1FN4$?-
> > > > j*0040pa7_;kWC_KwXa5Q=
> > > > > z@Jl<Qi2U@Wd4o7@R+h}pWQh7Yf;)%&B@-7nJ`-
> > > > pAtx4aT(+#=;D6HH83+wW*((szd
> > > > > ze*aj?o#`ShhNSL$KGT)e?==07c$=nVR+_2@j7p|_53UWk4-
> > > > p<q_m!^m9KMJoar}XP
> > > > > z@k8^U2UL?(EBk)#6yEAQ9WzT6y-e+D=3KHcJ4s13@F)e80xE{-
> > > > LyIf+zYrt;J=3($
> > > > > zy=b|?FcP<^U*a1C4!G9G8Z`A<(0`-
> > > > 5rbNgd!!PF>3VpnFG+GFsh#+<(#y@RjrT!NG
> > > > >
> > zp)J9QOI}6gdzgjC&|T5<0AA*gpSSj)kj608I{nqe!>FkP(W0L0QjS{FPf<*qrf95|
> > > > >
> > > >
> > z_3?R<@yIi0yQi;SnprC>bm|r@Hait6ce$t0sY6q%CU(YfdKEX1ndOgp&H>?!J+u
> > > > Tv
> > > > > z_T$ns^dNh;hR}ivc2`(HlrR%NR}YWhuXxS0Cw20jCM<E;@7&)<6E?4-
> > > > 2r%#G9248&
> > > > >
> > > >
> > z#6snQt3jV<3;8Q9F3vYgB1LC%%ZPn>#)=Zr%GCX>A`>>euKfT$31(FegZ>YC))nll
> > > > > zr7O;hktJmggtyk>XEX`D$=&X6I>LpwNFMPLGb`G#{)Z?&L+Dfq#-
> > > > WXYFemoj*{|FR
> > > > > zMK>|)y<Hq8Z!o5pqA0FvVtx%x9oUp-@-IL<YZ|4GW-
> > gvK2CXJjg~uP4Fm%B-
> > > > 0wOEy
> > > > > z>)o*On|^rNdNqi6#-ylP;?MR%u}1`}NOh`nx9G^GfUxsGYrkSgoS*7xt$dJ-
> > > > bmG`1
> > > > >
> > > >
> > zq9e&siyn=8E`=eRJG>G$8U>^t54w<Ui>jz>eUS9XZA3_8ueBvjk&Ce;0@%PgzU!-
> > > > T
> > > > > zawecNLK5|`Rw}A9eW5D8-
> > > > SMIPpk6%f0G_g*2NN~bGLK4GxM%KLEp3cipF)r%cziR-
> > > > > z?UR<B-
> > > > y@PA%#hZ@A2C_#4_!xqUu`zx(HRI2ad)pAN1Y+fGTf7M52ef0<c;ddaZhzT
> > > > >
> > > >
> > zC_Nho>dXp}tMw&EkEI(K?akLs4D<?eUOtNX+rmaoFky3z#;CL{D$Jp<#aTH)9w
> > > > hMF
> > > > >
> > > >
> > z;t@rqr(q}>k$5;MgM#vFBOM(KP}+30(<^IfD|;N$Hf|BeE)O=ovxGX=<<B$AZ}a;
> > > > V
> > > > > z$Rib^)uXhoC;=+7-e-sx3|KJt_9b@ZCSL^Itwf1LXy2Y-tvxli6`j+7j0P8v(r8DK
> > > > > zv5C^AeOHat^{btzSvH)_T-
> > UyHP3=R5`=uffP`~Y4LlViPGn@0nS46(lLl})yAAUYn
> > > > > z@{5}YBdtMfl2&#vHI9=-
> > > > fYsgieqAdo`od~$n%ifM1<v=21h=~xCNB*e4U&l?5(^my
> > > > > zFsgM-
> > jsErSWEYukS^0s${WHgJ)r9>Pdrr%`#S#>zw#pkeJSqxl<3}9YZ!+bPL018-
> > > > > zL|CSXw=Jxd5|Jdv$2^^QEnG;igadkzVrjG{IsPX<y6t*y%clEIIPN1-
> > s<Qm+b>YoB
> > > > >
> > > >
> > zfK&XpJgYP(y?wH}QBYiTwPEg@vYnUI+3|6iONY#|7#;n%?^~~e3KQ@Vm(03(%
> > > > x{&`
> > > > > z?JlMf;H&F#-
> > ^{UKR{l#LcCA`Ui|P7r>9f6Dgi&*<TD;JAb;J2(uHil|C?pWGgiRTb
> > > > > ze%K2mqAW1b`G|haSJ9L;HgFoN`KkVT`~m(nT?j;nbDKeiF6-
> > > > ;S@mRVGNqQv1JATd(
> > > > > zk|y!Q7bMIPOXfH|e%4qG7lty)bmsKdc4~{CFkU`QoZ1(g>I&)M-
> > > > n`$WKrOne+1*Iy
> > > > > z;;on-O@4eBKt|r*U5j$PL{sy}X;8agm%wWJxJLJ3H8H2w9xL}+lAx5+`^J-
> > ~*;PlD
> > > > >
> > > >
> > zNEBK$y?ueKFmDfMaRHk75QLT0UkDYe`a4bYajq@*yEZMA>7vy15*(sgpxX9xk
> > > > S<_b
> > > > > zli3orj;~h#tF-9v&gQ8OqxW6T-
> > }sAa$hxxEK+qQ{^ikk0P6<&7J5_;)$Crkr$hJMw
> > > > > zmW9b{54MgeThpmSd|T^BNAFAVP;&)5ME!RFY;V}-
> > > > 76P%Ziwdh5qHZcQ$ifuzLe|Eq
> > > > > z4o+(j8-K8KU`}`H9o%%l_{ft)VHlHXa*k7kJvw&G<LG-
> > > > dGM13zGiyy)gypmOYg5(j
> > > > >
> > zdFLMu&UsSfb|TOJ^g`<^RV2aPVlrA?^8xn!4dh2;6<4F+Mhm%={$r|k;4|rQ-
> > > > vCM8
> > > > >
> > > >
> > zo^s?#hlC^jFnEtFMrq(#Wkn%;XG_OpoKa;T7V%d@{JvxQSAYHAPp~h3JDPsF*K
> > > > E<-
> > > > >
> > > >
> > zLY&zbZ~B|@;pUVb0~$u7rh30NfgB#!D4gd5IwlHGpeh|$+D_Po=KASOQ~A$;R
> > > > BrYG
> > > > >
> > zrH;Ni8|ZS)y=)#*k&(Jz^kl1Pp^^$9zH(09rr)<|%9_U<sPsL#ojdt_;*{7_yU?$#
> > > > > zHsi+rhU7NPo2-T*0<wIsr~lswS&aw-o4l-
> > > > |F{svG2NhZV*siLZEK1JdNzm|?qS`CD
> > > > >
> > > >
> > zHel+6UA6W4DtDhN1!$IkY(3f)+|{w^bZ<6eK)IVKAn~U0ra4qL4Zjdw1*o;IGxz@
> > > > I
> > > > > zE1+&2B8Z8)yvlVG$SAKk(vXONX(+~^-1FXzG0GpvQOe-
> > > > U6qnNFq;jyCV+yTeeIe?M
> > > > >
> > > >
> > zF=ax^az!;(Xu=y1W4lajzkVj4Jw0rrkhO|zT`pTp)T0PWUl7}o804c_)wWNu>M)(<
> > > > >
> > > >
> > zRfP!DM$#G8^^nzII^#Y91Lq)%_wBs@>jOjPYF}0w^Nz~Y{&Y$4YU(#qe7f+oINR
> > > > %0
> > > > > zSneZe5EyK0r_Bkn`6XthG59f|Xo6i-
> > > > FRL}URYdisz<{CaM6zg|r!KO?%wM2;ud7(O
> > > > >
> > > >
> > z`aPW0(IzOpA8gG_a9lqzr&*EUhPTNSXva#4rR?$b4p1fe;=IM@q(aB=Z!vd|icT
> > > > m}
> > > > > zGpPUE{#SsKM;tGA5@~9og4;6@QNhN;_xvtc09-
> > > > i{RkcWm=QxV#4=QOo$!Oo&57%&p
> > > > >
> > > >
> > z;5H6xtC#a6@RIH0BwLOrK<kt47gWVC$?4D`N^VkJ9hnEFR?h+(XG<oVhLeH)yv
> > > > t&O
> > > > > zVhP%YJ>qd!{#3X-
> > > > ES^d2SW*WfLq3MSUMYN@0anc&jB{JhPy4^7n#vy}enEjqrAEFf
> > > > >
> > > >
> > z@2o#g`S$=uhs@SZJ4+CCl~9$CS9)YiiBZvUdHu?fR|B$d!jfs957AjP*l4u1Y43<m
> > > > >
> > > >
> > zts;j9&7Sr%wK)}cqIR}m87;s8E6l#@u=eLem3~gSwJGQm@6g$9IrZTBv5fVlb(^r
> > > > v
> > > > >
> > > >
> > zbfa98pghse(AQ1jWwfsgSo@fj(bhtD5970DT`wo{?1cW51NqGhA(L5L*XB}}6D8
> > > > b_
> > > > >
> > > >
> > z|Ey&EaWnSu0)OoHzOeFb^KHJ2@Q63ij7Hh3FaeR8MX5^$752g}VhlYLP$>0Jn
> > > > Dq14
> > > > >
> > > >
> > z*J`h~t*11n9~e(RHlxPXC?WpP3H56~Q)@kyDK$hEd_V&0I4H=5%>9Dx(nv}Aa{
> > > > _zG
> > > > > z-
> > > >
> > ge40o9{8bjAT`l*?b9TT<mmOqzLjP6*7|GTs4f$PAYy_Sob(`rl6~XS*MW2mxUJ%
> > > > >
> > zRDL;<#P}IEu9TkKF*}*FJJCMtL?GirpZDi26FrHl8@Rq8Km|4meIi42QhTLtxjLeT
> > > > >
> > > >
> > zbYtaGJthq(k@oyY@Djp_N9nh8#y`Ybe!^BB_s0I^7_4$#qDn!xhP(2i$JV(qITOp
> > > > 9
> > > > > zqiioJFug}7!O_NMq#pugIX;83J?9^g%5->9J0*p`IQ6=jC&wtovz|OC2p^U-
> > <2a};
> > > > > z@A|y{W&-
> > > > ImypnJAD=1qL_$m>JR{vqs$Y>JCwI3wdBm852pI(`|Zt3YMpw1pVYh5-`
> > > > > z85W<vB~$-
> > > > U<WG>COBDIVZS+QOO}q$(TQ#Nzn+;_qKSjuf7Lql~0=#qZ@edc3Gqc6w
> > > > >
> > > >
> > zuDOQuCqf!yLs3jl)SkQ_Ib>6(x83F)+CJVOU}ZPflTLdUhY58TyUP5Jnph|V8JT&$
> > > > > z0i}|KN97gmPgsbqeyl>!|HIdR%nl1D7z;7re_vb?e}4Epe!tJsl-
> > +wy=_(ZkJg<DT
> > > > >
> > > >
> > zEvEL4A@nTNj`u2D%c+U6GRm7sMUgfrmEU$uppRs#)bXY)X6JQIyX*1oY*GW}
> > > > k<IF|
> > > > > zaHNTenY}%}0>Ve_-
> > 3}%b8Sv`foIqQrrT`Jps((eiB8}y(b9QWd`zJ*gt7u_b3)YqS
> > > > > z?rft8TYK|738T20zTZ3BgyQdj<yF!!-
> > +<;)C1L4!1c_^;4;S94pF!2d`qPc;WZ|Gm
> > > > >
> > > >
> > z$=p?mdTXZi?WlOrNz?}Hn0kO+BcXq!w&!+3;C?@ulaBw^a$IrbvICn|4oZOjp7J
> > > > @Q
> > > > > z6PsD=TOH?YVJq7Ch;FwGx#V1npTHz!^HV!(nfI})F4E_bl>$(?srMvD2piEk-
> > D}A%
> > > > > z<j~7KBcje7v9yRgz`2d^!wHF@gh+a`g5J?Brxf-zvx0$7o%Pb2kw-
> > > > cp4adkG{%$o&
> > > > >
> > > >
> > z%dt$oANAhhUA5or11|lcp*|;ww*x8)3VP^z*kA6OpErN=0m))ADYTF@`CT)6la
> > > > 8{?
> > > > > z+f|ZWf991XRNc$TvQ|@weV=#ElM<i8=Qsn6Rr;}-
> > > > n7EUSp2iVM<FUbMZw_i`22q@?
> > > > >
> > > >
> > zs6kr|WS5Gg3(NEg_h1YzK}k#5M~9UYqs%eZ=H<yJ9V4^WrSohg!wRa?csHNr8
> > > > 9x&m
> > > > >
> > > >
> > z{(ZLpi2xlAu@RCsm(4Sx`08)mNv&L8r%^9&=KXXiq!o0uc3c)s_3#dasg&~qSB{b
> > > > V
> > > > > z8g?eJR!y(dC;=%y-V>f<o<nsoO6GqeD%xHE#XYZHRHI(j7p+CCP-
> > > > Ui*0n$KF#F=ub
> > > > >
> > > >
> > zCA%k+Ua0Ux^ZzjSk7Pm<?^iY@oAz8#h_IvYeFI$QirdveGUY0{RKDaglnu=1pe(
> > > > wB
> > > > > z*40*Kn2|Lvni|*l96DD3|Fz|IIHPh>T($*^maO<uC)t6MZ+}Z|-
> > }}*ULjzg&Ifvb)
> > > > >
> > > >
> > zLrpme#6GUjiz)KUncK_9RK5TE3Hpgo)b5S<asRor(EVPDhSB*eVcNWZeHDMh2
> > > > Hc(A
> > > > >
> > > >
> > z^P%@%9RB)C_C;*~yZ4HspGFI0Lk$XKdV!fb#%D{fU>^&ro^xH*#G(uFur6owz
> > > > MXtg
> > > > > zH^0Zh(t-
> > > > EmiaBl>`Tcls+HJnZoyQ30vFByCb0O*`%L)nX5D4}#VfMp)J~NWKw40M$
> > > > > z46D6ToGO~*lIx|Qb75H3?+#X*QJ4HgOgj?bLnD}%eB&%k9(+&PNM-
> > > > 6vy1)%G5g&Xm
> > > > >
> > > >
> > zBX`D*Z}!UP+%JV68h}7!&Cyuz&u9V}7g4K{@atIECE=zaGy5se=l;E2KAxQQ7dY`s
> > > > > zr3-
> > > >
> > FihZjNNS)Jd^rnQehLso_+hXq2zxeW8)=t8qkWCCMC<+zh+vXF5M*tI8tPmHQp
> > > > >
> > > >
> > zcIF<>JxmNil^W1!9({@=N~PdvE&Wi)<0FQR5(FAm=R)N;VG|Ne61+HdUTm1sjn
> > > > }z{
> > > > >
> > > >
> > z8d8p$uq*YdNAFH_9Oyf<DX1=yz4b+kSJ%<hu`MRZnK2M|$Wjau(<cw;r1U#JF
> > > > <VIN
> > > > > z;&6741o<3%PP@Ksaa4OB3)64J7cnWLei+@k8LxE27ubX-
> > > > qS4?UH?hja^lyZXxwA;|
> > > > > lp0r(+`K^)Y&AL5T(>;a;tp795|91lNzXsubc7WVX{~rvVe^USe
> > > > >
> > > > > literal 0
> > > > > HcmV?d00001
> > > > >
> > > > > diff --git
> > > > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > > > new file mode 100644
> > > > > index 0000000000..5ef93461ee
> > > > > --- /dev/null
> > > > > +++
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > > > @@ -0,0 +1,52 @@
> > > > > +## @file
> > > > >
> > > > > +#  The default logo bitmap picture shown on setup screen.
> > > > >
> > > > > +#
> > > > >
> > > > > +#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +#
> > > > >
> > > > > +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +#
> > > > >
> > > > > +#
> > > > >
> > > > > +##
> > > > >
> > > > > +
> > > > >
> > > > > +[Defines]
> > > > >
> > > > > +  INF_VERSION                    = 0x00010005
> > > > >
> > > > > +  BASE_NAME                      = LogoDxe
> > > > >
> > > > > +  FILE_GUID                      = 76ED6631-44FE-4ED2-8B5D-1B5355BB25E8
> > > > >
> > > > > +  MODULE_TYPE                    = DXE_DRIVER
> > > > >
> > > > > +  VERSION_STRING                 = 1.0
> > > > >
> > > > > +
> > > > >
> > > > > +  ENTRY_POINT                    = InitializeLogo
> > > > >
> > > > > +#
> > > > >
> > > > > +#  This flag specifies whether HII resource section is generated into PE
> > > > image.
> > > > >
> > > > > +#
> > > > >
> > > > > +  UEFI_HII_RESOURCE_SECTION      = TRUE
> > > > >
> > > > > +
> > > > >
> > > > > +#
> > > > >
> > > > > +# The following information is for reference only and not required by
> > the
> > > > build tools.
> > > > >
> > > > > +#
> > > > >
> > > > > +#  VALID_ARCHITECTURES           = IA32 X64
> > > > >
> > > > > +#
> > > > >
> > > > > +
> > > > >
> > > > > +[Sources]
> > > > >
> > > > > +  Logo.bmp
> > > > >
> > > > > +  Logo.c
> > > > >
> > > > > +  Logo.idf
> > > > >
> > > > > +
> > > > >
> > > > > +[Packages]
> > > > >
> > > > > +  MdePkg/MdePkg.dec
> > > > >
> > > > > +  MdeModulePkg/MdeModulePkg.dec
> > > > >
> > > > > +
> > > > >
> > > > > +[LibraryClasses]
> > > > >
> > > > > +  UefiBootServicesTableLib
> > > > >
> > > > > +  UefiDriverEntryPoint
> > > > >
> > > > > +  DebugLib
> > > > >
> > > > > +
> > > > >
> > > > > +[Protocols]
> > > > >
> > > > > +  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
> > > > >
> > > > > +  gEfiHiiImageExProtocolGuid         ## CONSUMES
> > > > >
> > > > > +  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
> > > > >
> > > > > +  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
> > > > >
> > > > > +
> > > > >
> > > > > +[Depex]
> > > > >
> > > > > +  gEfiHiiDatabaseProtocolGuid AND
> > > > >
> > > > > +  gEfiHiiImageExProtocolGuid
> > > > >
> > > > > diff --git
> > > > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > > > > new file mode 100644
> > > > > index 0000000000..1418eb2137
> > > > > --- /dev/null
> > > > > +++
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
> > > > > @@ -0,0 +1,31 @@
> > > > > +## @file
> > > > >
> > > > > +# This package provides advanced feature functionality for LOGO.
> > > > >
> > > > > +# This package should only depend on EDK II Core packages.
> > > > >
> > > > > +#
> > > > >
> > > > > +# The DEC files are used by the utilities that parse DSC and
> > > > >
> > > > > +# INF files to generate AutoGen.c and AutoGen.h files
> > > > >
> > > > > +# for the build infrastructure.
> > > > >
> > > > > +#
> > > > >
> > > > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +#
> > > > >
> > > > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +#
> > > > >
> > > > > +##
> > > > >
> > > > > +
> > > > >
> > > > > +[Defines]
> > > > >
> > > > > +  DEC_SPECIFICATION = 0x00010017
> > > > >
> > > > > +  PACKAGE_NAME      = LogoFeaturePkg
> > > > >
> > > > > +  PACKAGE_GUID      = A1A87B33-C3E3-497B-978F-2FF7813FEB21
> > > > >
> > > > > +  PACKAGE_VERSION   = 0.1
> > > > >
> > > > > +
> > > > >
> > > > > +[Includes]
> > > > >
> > > > > +  Include
> > > > >
> > > > > +
> > > > >
> > > > > +[LibraryClasses]
> > > > >
> > > > > +
> > > > >
> > > > > +[Guids]
> > > > >
> > > > > +  gLogoFeaturePkgTokenSpaceGuid  =  {0x567199de, 0xb448, 0x4aa0,
> > {0x99,
> > > > 0x4e, 0xd5, 0xd6, 0x82, 0x59, 0x91, 0x17}}
> > > > >
> > > > > +
> > > > >
> > > > > +[PcdsFeatureFlag]
> > > > >
> > > > > +
> > > >
> > gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable|FALSE|BOOLEAN|0
> > > > xA0000001
> > > > >
> > > > > +
> > > >
> > gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable|FALSE|BOOLEAN|0xA00000
> > > > 02
> > > > >
> > > > > diff --git
> > > > a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > > > > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > > > > new file mode 100644
> > > > > index 0000000000..717e074c69
> > > > > --- /dev/null
> > > > > +++
> > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
> > > > > @@ -0,0 +1,37 @@
> > > > > +## @file
> > > > >
> > > > > +# This package provides advanced feature functionality for LOGO.
> > > > >
> > > > > +# This package should only depend on EDK II Core packages.
> > > > >
> > > > > +#
> > > > >
> > > > > +# The DEC files are used by the utilities that parse DSC and
> > > > >
> > > > > +# INF files to generate AutoGen.c and AutoGen.h files
> > > > >
> > > > > +# for the build infrastructure.
> > > > >
> > > > > +#
> > > > >
> > > > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> > > > >
> > > > > +#
> > > > >
> > > > > +# SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +#
> > > > >
> > > > > +##
> > > > >
> > > > > +
> > > > >
> > > > > +[Defines]
> > > > >
> > > > > +  PLATFORM_NAME                  = LogoFeaturePkg
> > > > >
> > > > > +  PLATFORM_GUID                  = 0618AB19-9507-4D6A-A0D7-
> > 1F43D74736CF
> > > > >
> > > > > +  PLATFORM_VERSION               = 0.1
> > > > >
> > > > > +  DSC_SPECIFICATION              = 0x00010005
> > > > >
> > > > > +  OUTPUT_DIRECTORY               = Build/$(PLATFORM_NAME)
> > > > >
> > > > > +  SUPPORTED_ARCHITECTURES        = IA32|X64
> > > > >
> > > > > +  BUILD_TARGETS                  = DEBUG|RELEASE|NOOPT
> > > > >
> > > > > +  SKUID_IDENTIFIER               = DEFAULT
> > > > >
> > > > > +
> > > > >
> > > > > +[LibraryClasses]
> > > > >
> > > > > +  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> > > > >
> > > > > +
> > > >
> > BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRe
> > > > pStr.inf
> > > > >
> > > > > +  DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> > > > >
> > > > > +
> > > >
> > UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo
> > > > tServicesTableLib.inf
> > > > >
> > > > > +
> > > >
> > UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryP
> > > > oint.inf
> > > > >
> > > > > +
> > > > >
> > > > > +[LibraryClasses.common.DXE_DRIVER]
> > > > >
> > > > > +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
> > > > >
> > > > > +
> > > > >
> > > > > +[Components]
> > > > >
> > > > > +  UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
> > > > >
> > > > > +  UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
> > > > >
> > > > > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > > > > b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > > > > new file mode 100644
> > > > > index 0000000000..092a055a2c
> > > > > --- /dev/null
> > > > > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md
> > > > > @@ -0,0 +1,129 @@
> > > > > +# Overview
> > > > >
> > > > > +* **Feature Name:** Logo
> > > > >
> > > > > +* **PI Phase(s) Supported:** DXE
> > > > >
> > > > > +* **SMM Required?** No
> > > > >
> > > > > +
> > > > >
> > > > > +## Purpose
> > > > >
> > > > > +This feature provides the Logo image and driver that produces
> > > > EDKII_PLATFORM_LOGO_PROTOCOL:
> > > > >
> > > > > +
> > > > >
> > > > > +1. LogoDxe.inf includes a BMP logo in the EFI file, the driver provides
> > the
> > > > image via EDKII_PLATFORM_LOGO_PROTOCOL.
> > > > >
> > > > > +2. JpegLogoDxe.inf includes a JPEG logo in the EFI file, the driver uses
> > > > EFI_HII_IMAGE_DECODER_PROTOCOL to decode the
> > > > > JPEG file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL.
> > > > >
> > > > > +
> > > > >
> > > > > +# High-Level Theory of Operation
> > > > >
> > > > > +
> > > > >
> > > > > +The driver produces a EDKII_PLATFORM_LOGO_PROTOCOL to provide
> > a
> > > > logo picture shown on setup screen.
> > > > >
> > > > > +
> > > > >
> > > > > +The Logo file is built in HII package list as EFI resource, the driver uses
> > > > EFI_HII_DATABASE_PROTOCOL
> > > > >
> > > > > +to the publish HII package list to HII Database and get images via
> > > > EFI_HII_IMAGE_EX_PROTOCOL.
> > > > >
> > > > > +
> > > > >
> > > > > +## Firmware Volumes
> > > > >
> > > > > +
> > > > >
> > > > > +* PostMemory
> > > > >
> > > > > +
> > > > >
> > > > > +## Modules
> > > > >
> > > > > +
> > > > >
> > > > > +A bulleted list of the modules that make up the feature.
> > > > >
> > > > > +
> > > > >
> > > > > +* LogoDxe
> > > > >
> > > > > +* JpegLogoDxe
> > > > >
> > > > > +
> > > > >
> > > > > +## LogoDxe
> > > > >
> > > > > +
> > > > >
> > > > > +This driver provides a bitmap image via
> > > > EDKII_PLATFORM_LOGO_PROTOCOL.
> > > > >
> > > > > +
> > > > >
> > > > > +## JpegLogoDxe
> > > > >
> > > > > +
> > > > >
> > > > > +This driver uses EFI_HII_IMAGE_DECODER_PROTOCOL to decode the
> > jpeg
> > > > data and provide a bitmap image via
> > > > >
> > > > > +EDKII_PLATFORM_LOGO_PROTOCOL.
> > > > >
> > > > > +
> > > > >
> > > > > +## Key Functions
> > > > >
> > > > > +
> > > > >
> > > > > +* This feature produces a EDKII_PLATFORM_LOGO_PROTOCOL which
> > > > could be used by consumer such as
> > > > > Edk2\MdeModulePkg\Library\BootLogoLib.
> > > > >
> > > > > +
> > > > >
> > > > > +## Configuration
> > > > >
> > > > > +
> > > > >
> > > > > +* gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> > > > >
> > > > > +  TRUE: Enable logo feature
> > > > >
> > > > > +  FALSE: Disable logo feature
> > > > >
> > > > > +* gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable
> > > > >
> > > > > +  TRUE: Use jpeg logo
> > > > >
> > > > > +  FALSE: Use bitmap logo
> > > > >
> > > > > +
> > > > >
> > > > > +## Data Flows
> > > > >
> > > > > +
> > > > >
> > > > > +Architecturally defined data structures and flows for the feature.
> > > > >
> > > > > +
> > > > >
> > > > > +### Data flows of LogoDxe
> > > > >
> > > > > +
> > > > >
> > > > > +```txt
> > > > >
> > > > > +| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|
> > > > >
> > > > > +------------    ------------------    ----------------
> > > > >
> > > > > +      |                 |                     |
> > > > >
> > > > > +      |                 |--bitmap image data->|
> > > > >
> > > > > +      |<---bitmap data--|<-return bitmap data-|
> > > > >
> > > > > +```
> > > > >
> > > > > +
> > > > >
> > > > > +### Data flows of JpegLogoDxe
> > > > >
> > > > > +
> > > > >
> > > > > +```txt
> > > > >
> > > > > +| Consumer |    | LogoFeatruePkg |    |HiiDatabaseDxe|    |
> > > > EFI_HII_IMAGE_DECODER_PROTOCOL |
> > > > >
> > > > > +------------    ------------------    ----------------    ----------------------------------
> > > > >
> > > > > +      |                 |                     |                            |
> > > > >
> > > > > +      |                 |---Jpeg Image data-->|---------decode Jpeg------->|
> > > > >
> > > > > +      |<---bitmap data--|<-return bitmap data-|<-----return bitmap data-
> > ---|
> > > > >
> > > > > +```
> > > > >
> > > > > +
> > > > >
> > > > > +## Control Flows
> > > > >
> > > > > +
> > > > >
> > > > > +Consumer gets image from the logo driver via
> > > > EDKII_PLATFORM_LOGO_PROTOCOL.
> > > > >
> > > > > +
> > > > >
> > > > > +## Build Flows
> > > > >
> > > > > +
> > > > >
> > > > > +No any special build flows is needed.
> > > > >
> > > > > +
> > > > >
> > > > > +## Test Point Results
> > > > >
> > > > > +
> > > > >
> > > > > +Not available.
> > > > >
> > > > > +
> > > > >
> > > > > +## Functional Exit Criteria
> > > > >
> > > > > +
> > > > >
> > > > > +* Check wether EDKII_PLATFORM_LOGO_PROTOCOL->GetImage()
> > return a
> > > > default Intel logo.
> > > > >
> > > > > +* If using jpeg logo, a dex driver which produces
> > > > EFI_HII_IMAGE_DECODER_PROTOCOL(name is
> > > > >
> > > > > +gEfiHiiImageDecoderNameJpegGuid) is necessary, it is used to decode
> > > > Jpeg data.
> > > > >
> > > > > +
> > > > >
> > > > > +## Feature Enabling Checklist
> > > > >
> > > > > +
> > > > >
> > > > > +### Option 1
> > > > >
> > > > > +
> > > > >
> > > > > +* Include AdvancedFeatures.dsc in platform dsc file, and use pcd to
> > > > enable the feature.
> > > > >
> > > > > +
> > > > >
> > > > > +```dsc
> > > > >
> > > > > +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> > > > |TRUE
> > > > >
> > > > > +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable
> > |FALSE
> > > > >
> > > > > +  !include Include/AdvancedFeatures.dsc
> > > > >
> > > > > +```
> > > > >
> > > > > +
> > > > >
> > > > > +* Include PreMemory.fdf and inPostMemory.fdf in platform fdf file
> > > > >
> > > > > +
> > > > >
> > > > > +```fdf
> > > > >
> > > > > +!include Include/PreMemory.fdf
> > > > >
> > > > > +!include Include/PostMemory.fdf
> > > > >
> > > > > +```
> > > > >
> > > > > +
> > > > >
> > > > > +### Option 2
> > > > >
> > > > > +
> > > > >
> > > > > +* To use bitmap logo, include
> > > > "UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform dsc
> > file,
> > > > and include
> > > > >
> > > > > +"INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform
> > fdf
> > > > file.
> > > > >
> > > > > +
> > > > >
> > > > > +* To use jpeg logo, include
> > > > "UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in platform
> > dsc
> > > > file, and include
> > > > >
> > > > > +"INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in
> > > > platform fdf file.
> > > > >
> > > > > +
> > > > >
> > > > > +## Performance Impact
> > > > >
> > > > > +
> > > > >
> > > > > +* LogoDxe
> > > > >
> > > > > +  * EFI size: 180 KB
> > > > >
> > > > > +  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage():
> > about
> > > > 18 milliseconds
> > > > >
> > > > > +
> > > > >
> > > > > +* JpegLogoDxe
> > > > >
> > > > > +  * EFI size: 13.6 KB
> > > > >
> > > > > +  * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage():
> > about
> > > > 80 milliseconds
> > > > >
> > > > > --
> > > > > 2.24.0.windows.2
> > > > >
> > > > >
> > > > > -=-=-=-=-=-=
> > > > > Groups.io Links: You receive all messages sent to this group.
> > > > >
> > > > > View/Reply Online (#56238):
> > > > https://edk2.groups.io/g/devel/message/56238
> > > > > Mute This Topic: https://groups.io/mt/72533665/1712937
> > > > > Group Owner: devel+owner@edk2.groups.io
> > > > > Unsubscribe: https://edk2.groups.io/g/devel/unsub  [ray.ni@intel.com]
> > > > > -=-=-=-=-=-=


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#56259): https://edk2.groups.io/g/devel/message/56259
Mute This Topic: https://groups.io/mt/72533665/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-