Skip to content

Commit

Permalink
Docs: Update README
Browse files Browse the repository at this point in the history
  • Loading branch information
vit9696 committed May 17, 2020
1 parent b504643 commit cbd60d9
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 69 deletions.
10 changes: 0 additions & 10 deletions AppleModels/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,3 @@ To use them do as follows:
file from `BridgeOSUpdateCustomer.pkg` and unpack it.
5. After unpacking `UpdateBundle.zip` go to `boot/Firmware/MacEFI` directory and unpack im4p files.
You can use [img4](https://github.com/xerub/img4lib), [img4tool](https://github.com/tihmstar/img4tool), or our dedicated [MacEfiUnpack](https://github.com/acidanthera/OpenCorePkg/blob/master/Utilities/MacEfiUnpack/MacEfiUnpack.py). For example, `for i in *.im4p ; do ./MacEfiUnpack.py "$i" ; done`

## Credits

* All database maintainers, who continue to actualise data
* [AppleLife](https://applelife.ru/threads/dampy-originalnyx-makov.2943712) and [VirtualSMC](https://github.com/acidanthera/VirtualSMC/tree/master/Docs) hardware dump databases
* Chameleon and Clover teams for legacy Apple SMBIOS database
* [al3xjames](https://github.com/al3xtjames) for several hints and another [database](https://github.com/al3xtjames/MacGen)
* CCC and ...numberinfo.com for hiding their work and inspiring others to reverse it
* Several guys from AppleLife for conducting relevant parts of the research, thanks a lot!
* [vit9696](https://github.com/vit9696)
Binary file modified Docs/Configuration.pdf
Binary file not shown.
Binary file modified Docs/Differences/Differences.pdf
Binary file not shown.
134 changes: 87 additions & 47 deletions Docs/Differences/Differences.tex
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
\documentclass[]{article}
%DIF LATEXDIFF DIFFERENCE FILE
%DIF DEL PreviousConfiguration.tex Mon May 11 17:11:58 2020
%DIF ADD ../Configuration.tex Sun May 17 03:32:30 2020
%DIF ADD ../Configuration.tex Sun May 17 14:42:56 2020

\usepackage{lmodern}
\usepackage{amssymb,amsmath}
Expand Down Expand Up @@ -724,9 +724,9 @@ \subsection{Installation and Upgrade}\label{configuration-install}
utilised.

For BIOS booting a third-party UEFI environment provider will have to
be used. \texttt{DuetPkg} is one of the known UEFI environment providers
be used. \texttt{\DIFdelbegin \DIFdel{DuetPkg}\DIFdelend \DIFaddbegin \DIFadd{OpenDuetPkg}\DIFaddend } is one of the known UEFI environment providers
for legacy systems. To run OpenCore on such a legacy system you can install
\texttt{DuetPkg} with a dedicated tool BootInstall (bundled with OpenCore).
\texttt{\DIFdelbegin \DIFdel{DuetPkg}\DIFdelend \DIFaddbegin \DIFadd{OpenDuetPkg}\DIFaddend } with a dedicated tool BootInstall (bundled with OpenCore).

For upgrade purposes refer to \texttt{Differences.pdf} document, providing
the information about the changes affecting the configuration compared
Expand All @@ -751,11 +751,15 @@ \subsection{Contribution}\label{configuration-comp}
patches is welcome. Please do follow
\href{https://github.com/tianocore/tianocore.github.io/wiki/Code-Style-C}{EDK II C Codestyle}.

Required external package dependencies include
\href{https://github.com/acidanthera/EfiPkg}{EfiPkg} and
\href{https://github.com/acidanthera/MacInfoPkg}{MacInfoPkg}.
\DIFdelbegin \DIFdel{Required external package dependencies include
}%DIFDELCMD < \href{https://github.com/acidanthera/EfiPkg}{EfiPkg} %%%
\DIFdel{and
}%DIFDELCMD < \href{https://github.com/acidanthera/MacInfoPkg}{MacInfoPkg}%%%
\DIFdel{.
}%DIFDELCMD <

To compile with \texttt{XCODE5}, besides \href{https://developer.apple.com/xcode}{Xcode},
%DIFDELCMD < %%%
\DIFdelend To compile with \texttt{XCODE5}, besides \href{https://developer.apple.com/xcode}{Xcode},
one should also install \href{https://www.nasm.us}{NASM} and
\href{https://github.com/acidanthera/ocbuild/tree/master/external}{MTOC}.
The latest Xcode version is recommended for use despite the toolchain name. Example
Expand All @@ -765,9 +769,8 @@ \subsection{Contribution}\label{configuration-comp}
\begin{lstlisting}[caption=Compilation Commands, label=compile, style=ocbash,alsolanguage=DIFcode]
git clone https://github.com/acidanthera/audk UDK
cd UDK
%DIF > git clone https://github.com/acidanthera/DuetPkg
git clone https://github.com/acidanthera/EfiPkg
git clone https://github.com/acidanthera/MacInfoPkg
%DIF < git clone https://github.com/acidanthera/EfiPkg
%DIF < git clone https://github.com/acidanthera/MacInfoPkg
git clone https://github.com/acidanthera/OpenCorePkg
source edksetup.sh
make -C BaseTools
Expand All @@ -788,14 +791,22 @@ \subsection{Contribution}\label{configuration-comp}
-I/UefiPackages/MdeModulePkg
-I/UefiPackages/MdeModulePkg/Include
-I/UefiPackages/MdeModulePkg/Include/X64
%DIF > -I/UefiPackages/DuetPkg/Include
-I/UefiPackages/EfiPkg
-I/UefiPackages/EfiPkg/Include
-I/UefiPackages/EfiPkg/Include/X64
-I/UefiPackages/AppleSupportPkg/Include
-I/UefiPackages/OpenCorePkg/Include
%DIF < -I/UefiPackages/EfiPkg
%DIF < -I/UefiPackages/EfiPkg/Include
%DIF < -I/UefiPackages/EfiPkg/Include/X64
%DIF < -I/UefiPackages/AppleSupportPkg/Include
%DIF < -I/UefiPackages/OpenCorePkg/Include
%DIF < -I/UefiPackages/MacInfoPkg/Include
%DIF > -I/UefiPackages/OpenCorePkg/Include/AMI
%DIF > -I/UefiPackages/OpenCorePkg/Include/Acidanthera
%DIF > -I/UefiPackages/OpenCorePkg/Include/Apple
%DIF > -I/UefiPackages/OpenCorePkg/Include/Apple/X64
%DIF > -I/UefiPackages/OpenCorePkg/Include/Duet
%DIF > -I/UefiPackages/OpenCorePkg/Include/Generic
%DIF > -I/UefiPackages/OpenCorePkg/Include/Intel
%DIF > -I/UefiPackages/OpenCorePkg/Include/Microsoft
%DIF > -I/UefiPackages/OpenCorePkg/Include/VMware
%DIF > -I/UefiPackages/OvmfPkg/Include
-I/UefiPackages/MacInfoPkg/Include
-I/UefiPackages/UefiCpuPkg/Include
-IInclude
-include
Expand Down Expand Up @@ -831,11 +842,16 @@ \subsection{Coding conventions}\label{configuration-conv}
discuss the issue in \href{https://github.com/acidanthera/bugtracker}{Acidanthera Bugtracker}
before sending the patch to ensure no double work and to avoid your patch being rejected.

\textbf{Organisation}. The codebase is structured in multiple repositories
which contain separate EDK II packages. \texttt{AppleSupportPkg} and \texttt{OpenCorePkg}
are primary packages, and \texttt{EfiPkg}, \texttt{MacInfoPkg.dsc})
\textbf{Organisation}. The codebase is \DIFdelbegin \DIFdel{structured in multiple repositories
which contain separate EDK II packages.
}\texttt{\DIFdel{AppleSupportPkg}} %DIFAUXCMD
\DIFdel{and }\DIFdelend \DIFaddbegin \DIFadd{contained in }\DIFaddend \texttt{OpenCorePkg} \DIFdelbegin \DIFdel{are primary packages, and }\texttt{\DIFdel{EfiPkg}}%DIFAUXCMD
\DIFdel{, }\texttt{\DIFdel{MacInfoPkg.dsc}}%DIFAUXCMD
\DIFdel{)
are dependent packages.
\begin{itemize}
}\DIFdelend \DIFaddbegin \DIFadd{repository,
which is the primary EDK II package.
}\DIFaddend \begin{itemize}
\tightlist
\item Whenever changes are required in multiple repositories, separate pull requests should
be sent to each.
Expand Down Expand Up @@ -2413,7 +2429,7 @@ \subsection{Introduction}\label{miscintro}
}\end{itemize}

\emph{\DIFadd{Note 1}}\DIFadd{: This process is meant to work reliably only when }\texttt{\DIFadd{RequestBootVarRouting}}
\DIFadd{option is enabled or the firmware does not control UEFI boot options (}\texttt{\DIFadd{DuetPkg}} \DIFadd{or
\DIFadd{option is enabled or the firmware does not control UEFI boot options (}\texttt{\DIFadd{OpenDuetPkg}} \DIFadd{or
custom BDS). Without }\texttt{\DIFadd{BootProtect}} \DIFadd{it also is possible that other operating systems
overwrite OpenCore, make sure to enable it if you plan to use them.
}
Expand Down Expand Up @@ -3552,7 +3568,8 @@ \subsection{Other Variables}\label{nvramvarsother}

In 10.15 debugging support was mostly broken before 10.15.4 due to some
kind of refactoring and introduction of a
\href{https://github.com/acidanthera/EfiPkg/blob/master/Include/Protocol/AppleDebugLog.h}{new debug protocol}.
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/EfiPkg/blob/master/Include/Protocol/AppleDebugLog.h}{new debug protocol}%%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/Protocol/AppleDebugLog.h}{new debug protocol}\DIFaddend .
Some of the arguments and their values below may not be valid for versions prior
to 10.15.4. The list of known arguments is covered below:

Expand Down Expand Up @@ -3673,8 +3690,10 @@ \section{PlatformInfo}\label{platforminfo}
Platform information is comprised of several identification fields
generated or filled manually to be compatible with macOS services. The
base part of the configuration may be obtained from
\href{https://github.com/acidanthera/MacInfoPkg}{\texttt{MacInfoPkg}}
package, which itself generates a set of interfaces based on a database
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/MacInfoPkg}{\texttt{MacInfoPkg}}
%DIFDELCMD < %%%
\DIFdel{package}\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg/blob/master/AppleModels}{\texttt{AppleModels}}\DIFaddend ,
which itself generates a set of interfaces based on a database
in \href{https://yaml.org/spec/1.2/spec.html}{YAML} format. These fields
are written to three select destinations:

Expand All @@ -3683,9 +3702,12 @@ \section{PlatformInfo}\label{platforminfo}
\item
\href{https://www.dmtf.org/standards/smbios}{SMBIOS}
\item
\href{https://github.com/acidanthera/EfiPkg/blob/master/Include/Protocol/DataHub.h}{Data
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/EfiPkg/blob/master/Include/Protocol/DataHub.h}{Data
%DIFDELCMD < Hub}
%DIFDELCMD < %%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Intel/Protocol/DataHub.h}{Data
Hub}
\item
\DIFaddend \item
NVRAM
\end{itemize}

Expand Down Expand Up @@ -4106,7 +4128,8 @@ \subsection{SMBIOS Properties}\label{platforminfosmbios}
compatibility. This value could look like
\texttt{MM71.88Z.0234.B00.1809171422} in older firmwares, and is
described in
\href{https://github.com/acidanthera/EfiPkg/blob/master/Include/Guid/BiosId.h}{BiosId.h}.
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/EfiPkg/blob/master/Include/Guid/BiosId.h}{BiosId.h}%%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/Guid/BiosId.h}{BiosId.h}\DIFaddend .
In newer firmwares it should look like \texttt{236.0.0.0.0} or
\texttt{220.230.16.0.0\ (iBridge:\ 16.16.2542.0.0,0)}. iBridge version
is read from \texttt{BridgeOSVersion} variable, and is only present on
Expand Down Expand Up @@ -4161,7 +4184,7 @@ \subsection{SMBIOS Properties}\label{platforminfosmbios}
\emph{Note}: If \texttt{SystemProductName} is unknown, and related
fields are unspecified, default values should be assumed as being set
to \texttt{MacPro6,1} data. The list of known products can be found in
\texttt{MacInfoPkg}.
\texttt{\DIFdelbegin \DIFdel{MacInfoPkg}\DIFdelend \DIFaddbegin \DIFadd{AppleModels}\DIFaddend }.
\item
\texttt{SystemVersion}\\
\textbf{Type}: \texttt{plist\ string}\\
Expand All @@ -4176,7 +4199,8 @@ \subsection{SMBIOS Properties}\label{platforminfosmbios}
\textbf{SMBIOS}: System Information (Type 1) --- Serial Number\\
\textbf{Description}: Product serial number in defined format. Known
formats are described in
\href{https://github.com/acidanthera/MacInfoPkg/blob/master/macserial/FORMAT.md}{macserial}.
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/MacInfoPkg/blob/master/macserial/FORMAT.md}{macserial}%%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg/blob/master/Utilities/macserial/FORMAT.md}{macserial}\DIFaddend .
\item
\texttt{SystemUUID}\\
\textbf{Type}: \texttt{plist\ string}, GUID\\
Expand Down Expand Up @@ -4299,8 +4323,10 @@ \subsection{SMBIOS Properties}\label{platforminfosmbios}
\textbf{SMBIOS}: \texttt{APPLE\_SMBIOS\_TABLE\_TYPE133} -
\texttt{PlatformFeature}\\
\textbf{Description}: Platform features bitmask. Refer to
\href{https://github.com/acidanthera/EfiPkg/blob/master/Include/IndustryStandard/AppleFeatures.h}{AppleFeatures.h}
for more details. Use \texttt{0xFFFFFFFF} value to not provide this table.
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/EfiPkg/blob/master/Include/IndustryStandard/AppleFeatures.h}{AppleFeatures.h}
%DIFDELCMD < %%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/IndustryStandard/AppleFeatures.h}{AppleFeatures.h}
\DIFaddend for more details. Use \texttt{0xFFFFFFFF} value to not provide this table.
\item
\texttt{SmcVersion}\\
\textbf{Type}: \texttt{plist\ data}, 16 bytes\\
Expand All @@ -4315,8 +4341,10 @@ \subsection{SMBIOS Properties}\label{platforminfosmbios}
\textbf{SMBIOS}: \texttt{APPLE\_SMBIOS\_TABLE\_TYPE128} -
\texttt{FirmwareFeatures} and \texttt{ExtendedFirmwareFeatures}\\
\textbf{Description}: 64-bit firmware features bitmask. Refer to
\href{https://github.com/acidanthera/EfiPkg/blob/master/Include/IndustryStandard/AppleFeatures.h}{AppleFeatures.h}
for more details. Lower 32 bits match \texttt{FirmwareFeatures}. Upper
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/EfiPkg/blob/master/Include/IndustryStandard/AppleFeatures.h}{AppleFeatures.h}
%DIFDELCMD < %%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/IndustryStandard/AppleFeatures.h}{AppleFeatures.h}
\DIFaddend for more details. Lower 32 bits match \texttt{FirmwareFeatures}. Upper
64 bits match \texttt{ExtendedFirmwareFeatures}.
\item
\texttt{FirmwareFeaturesMask}\\
Expand All @@ -4327,8 +4355,10 @@ \subsection{SMBIOS Properties}\label{platforminfosmbios}
\texttt{ExtendedFirmwareFeaturesMask}\\
\textbf{Description}: Supported bits of extended firmware features
bitmask. Refer to
\href{https://github.com/acidanthera/EfiPkg/blob/master/Include/IndustryStandard/AppleFeatures.h}{AppleFeatures.h}
for more details. Lower 32 bits match \texttt{FirmwareFeaturesMask}.
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/EfiPkg/blob/master/Include/IndustryStandard/AppleFeatures.h}{AppleFeatures.h}
%DIFDELCMD < %%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/IndustryStandard/AppleFeatures.h}{AppleFeatures.h}
\DIFaddend for more details. Lower 32 bits match \texttt{FirmwareFeaturesMask}.
Upper 64 bits match \texttt{ExtendedFirmwareFeaturesMask}.
\item
\texttt{ProcessorType}\\
Expand Down Expand Up @@ -4364,9 +4394,11 @@ \subsection{Drivers}\label{uefidrivers}
even cause permanent firmware damage. Some of the known drivers are listed below:

\begin{tabular}{p{1.3in}p{5.55in}}
\href{https://github.com/acidanthera/AppleSupportPkg}{\texttt{AudioDxe}}
& HDA audio support driver in UEFI firmwares for most Intel and some other analog audio controllers.
Refer to \href{https://github.com/acidanthera/bugtracker/issues/740}{acidanthera/bugtracker\#740}
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/AppleSupportPkg}{\texttt{AudioDxe}}
%DIFDELCMD < %%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg}{\texttt{AudioDxe}}
\DIFaddend & HDA audio support driver in UEFI firmwares for most Intel and some other analog audio controllers.
\DIFdelbegin \DIFdel{Refer }\DIFdelend \DIFaddbegin \DIFadd{Staging driver, refer }\DIFaddend to \href{https://github.com/acidanthera/bugtracker/issues/740}{acidanthera/bugtracker\#740}
for known issues in AudioDxe. \\
\href{https://github.com/acidanthera/OcBinaryData}{\texttt{ExFatDxe}}
& Proprietary ExFAT file system driver for Bootcamp support commonly found in Apple
Expand Down Expand Up @@ -4399,7 +4431,7 @@ \subsection{Drivers}\label{uefidrivers}
on top of a custom USB keyboard driver implementation. This is an alternative to
builtin \texttt{KeySupport}, which may work better or worse depending on the firmware. \\
\href{https://github.com/acidanthera/audk}{\texttt{Ps2KeyboardDxe}}\textbf{*}
& PS/2 keyboard driver from \texttt{MdeModulePkg}. DuetPkg and some firmwares
& PS/2 keyboard driver from \texttt{MdeModulePkg}. \DIFdelbegin \DIFdel{DuetPkg }\DIFdelend \DIFaddbegin \texttt{\DIFadd{OpenDuetPkg}} \DIFaddend and some firmwares
may not include this driver, but it is necessary for PS/2 keyboard to work.
Note, unlike \texttt{OpenUsbKbDxe} this driver has no \texttt{AppleKeyMapAggregator}
support and thus requires \texttt{KeySupport} to be enabled. \\
Expand All @@ -4411,8 +4443,10 @@ \subsection{Drivers}\label{uefidrivers}
& USB mouse driver from \texttt{MdeModulePkg}. Some virtual machine firmwares
like OVMF may not include this driver, but it is necessary for mouse to work
in UEFI graphical interfaces, such as \texttt{OpenCanopy}. \\
\href{https://github.com/acidanthera/AppleSupportPkg}{\texttt{VBoxHfs}}
& HFS file system driver with bless support. This driver is an alternative to
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/AppleSupportPkg}{\texttt{VBoxHfs}}
%DIFDELCMD < %%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg}{\texttt{VBoxHfs}}
\DIFaddend & HFS file system driver with bless support. This driver is an alternative to
a closed source \texttt{HfsPlus} driver commonly found in Apple firmwares. While
it is feature complete, it is approximately 3~times slower and is yet to undergo
a security audit. \\
Expand Down Expand Up @@ -4625,10 +4659,13 @@ \subsection{Properties}\label{uefiprops}
\texttt{AXEFIAudio} for macOS bootloader audio files.
\item Audio localisation is a two letter language code (e.g. \texttt{en})
with an exception for Chinese, Spanish, and Portuguese. Refer to
\href{https://github.com/acidanthera/EfiPkg/blob/master/Include/Protocol/AppleVoiceOver.h}{\texttt{APPLE\_VOICE\_OVER\_LANGUAGE\_CODE} definition}
for the list of all supported localisations.
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/EfiPkg/blob/master/Include/Protocol/AppleVoiceOver.h}{\texttt{APPLE\_VOICE\_OVER\_LANGUAGE\_CODE} definition}
%DIFDELCMD < %%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/Protocol/AppleVoiceOver.h}{\texttt{APPLE\_VOICE\_OVER\_LANGUAGE\_CODE} definition}
\DIFaddend for the list of all supported localisations.
\item Audio path is the base filename corresponding to a file identifier. For macOS bootloader audio paths refer to
\href{https://github.com/acidanthera/EfiPkg/blob/master/Include/Protocol/AppleVoiceOver.h}{\texttt{APPLE\_VOICE\_OVER\_AUDIO\_FILE} definition}.
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/EfiPkg/blob/master/Include/Protocol/AppleVoiceOver.h}{\texttt{APPLE\_VOICE\_OVER\_AUDIO\_FILE} definition}%%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/Protocol/AppleVoiceOver.h}{\texttt{APPLE\_VOICE\_OVER\_AUDIO\_FILE} definition}\DIFaddend .
For OpenCore audio paths refer to
\href{https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Protocol/OcAudio.h}{\texttt{OC\_VOICE\_OVER\_AUDIO\_FILE} definition}.
The only exception is OpenCore boot chime file, which is \texttt{OCEFIAudio\_VoiceOver\_Boot.wav}.
Expand Down Expand Up @@ -5856,8 +5893,11 @@ \subsection{Tips and Tricks}\label{troubleshootingtricks}
Custom name may be created by providing \texttt{.contentDetails} file.

To download recovery online you may use
\href{https://github.com/acidanthera/MacInfoPkg/blob/master/macrecovery/macrecovery.py}{macrecovery.py}
tool from \href{https://github.com/acidanthera/MacInfoPkg/releases}{MacInfoPkg}.
\DIFdelbegin %DIFDELCMD < \href{https://github.com/acidanthera/MacInfoPkg/blob/master/macrecovery/macrecovery.py}{macrecovery.py}
%DIFDELCMD < %%%
\DIFdel{toolfrom }%DIFDELCMD < \href{https://github.com/acidanthera/MacInfoPkg/releases}{MacInfoPkg}%%%
\DIFdelend \DIFaddbegin \href{https://github.com/acidanthera/OpenCorePkg/blob/master/Utilities/macrecovery/macrecovery.py}{macrecovery.py}\DIFadd{,
builtin tool}\DIFaddend .

For offline installation refer to
\href{https://support.apple.com/HT201372}{How to create a bootable installer for macOS}
Expand Down
Loading

0 comments on commit cbd60d9

Please sign in to comment.