From 9471bd2f16f091f5b2c353d79e9e3e39da3af2f8 Mon Sep 17 00:00:00 2001 From: Good Guy Date: Mon, 22 Jan 2024 12:23:54 -0700 Subject: [PATCH 01/16] Credit Andrea - fixups and Histogram changes for no clipping --- parts/Developer.tex | 1 + parts/Plugins.tex | 41 +++++++++++++++++++++++++++-------------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/parts/Developer.tex b/parts/Developer.tex index 4f522d0..34d355f 100644 --- a/parts/Developer.tex +++ b/parts/Developer.tex @@ -227,6 +227,7 @@ Optional Features: --enable-openjpeg build openjpeg (auto) --enable-libogg build libogg (auto) --enable-libsndfile build libsndfile (auto) + --enable-libsvtav1 build libsvtav1 (no) --enable-libtheora build libtheora (auto) --enable-libuuid build libuuid (yes) --enable-libvorbis build libvorbis (auto) diff --git a/parts/Plugins.tex b/parts/Plugins.tex index 822792a..a689bfe 100644 --- a/parts/Plugins.tex +++ b/parts/Plugins.tex @@ -1387,6 +1387,8 @@ The most common use cases (but can be adapted to virtually any situation) of the \item Create a Stylized look. \end{itemize} +When using the X11 graphics driver and RGBA-FLOAT color model, this plugin allows for greater than (0 - 1.0f) values. This does not work when using X11-OpenGL because it is an 8-bit limited driver. Both the Color wheels and the Saturation and Value sliders will make it possible to work with HDR video. + \subsection{Color Balance}% \label{sub:color_balance} \index{color balance} @@ -1845,7 +1847,16 @@ The histogram allows an immediate view of the contrast amplitude of an image wit \label{fig:histogram} \end{figure} -The Histogram is always performed in floating point RGB regardless of the project color space. The histogram has two sets of transfer parameters: the \textit{input transfer} and the \textit{output transfer}. The input transfer has value on the horizontal axis of $x$; it is a normalized scale of values ranging from 0 - 1.0 (which for a depth color of 8 bits corresponds to the range 0 - 255, for 10 bits corresponds to 0 - 65536, etc). The output transfer (the $y axis$) represents the height of the column where a given value $x$ appears. A higher column ($y$ greater) indicates that many pixels have the corresponding value $x$; a lower column indicates that fewer pixels have that value. On the left we have the minimum value $0$, which is the black point. On the right we have the maximum value $1.0$ which is the white point. The intermediate values pass smoothly from one extreme to the other. The three important points (including the midtones) are indicated by cursors (small triangles) at the base of the histogram. You can adjust them to change the values of the three points if you want. Acting on the white or black point involves horizontal shifts only; acting on the midtones triangle also involves vertical movements leading to a "gamma" correction of the curve (Linear to Log or Reverse Log or vice versa). Further down is an additional bar with related cursors and textboxes. It is used to adjust input and output values (on the vertical). +The Histogram is always performed in floating point RGB regardless of +the project color space, but with clipping at 1.0. When using the X11 +graphics driver and RGBA-FLOAT color model, Histogram allows you to +display greater than (0 - 1.0f) values to accomodate HDR. This does +not work when using X11-OpenGL because it is an 8-bit limited driver. +The display will stop at +110\%, but there is no clipping. By lowering +the brightness all out-of-range values become visible, even those +initially above 110\%. + +The histogram has two sets of transfer parameters: the \textit{input transfer} and the \textit{output transfer}. The input transfer has value on the horizontal axis of $x$; it is a normalized scale of values ranging from 0 - 1.0 (which for a depth color of 8 bits corresponds to the range 0 - 255, for 10 bits corresponds to 0 - 65536, etc). The output transfer (the $y axis$) represents the height of the column where a given value $x$ appears. A higher column ($y$ greater) indicates that many pixels have the corresponding value $x$; a lower column indicates that fewer pixels have that value. On the left we have the minimum value $0$, which is the black point. On the right we have the maximum value $1.0$ which is the white point. The intermediate values pass smoothly from one extreme to the other. The three important points (including the midtones) are indicated by cursors (small triangles) at the base of the histogram. You can adjust them to change the values of the three points if you want. Acting on the white or black point involves horizontal shifts only; acting on the midtones triangle also involves vertical movements leading to a "gamma" correction of the curve (Linear to Log or Reverse Log or vice versa). Further down is an additional bar with related cursors and textboxes. It is used to adjust input and output values (on the vertical). There are 4 possible histograms in the histogram viewer. The red, green, blue histograms show the input histograms for red, green, blue and multiply them by an input transfer to get the output red, green, blue. Then the output red, green, blue is scaled by an output transfer. The scaled red, green, blue is converted into a value and plotted on the value histogram. The value histogram thus changes depending on the settings for red, green, blue. The value transfers are applied uniformly to R, G, B after their color transfers are applied. Mathematically, it is said that the values of $x$ are linked to the values of $y$ by a transfer function. This function, by default, is represented by a line that leaves the values of $x$ and $y$ unchanged, but we can intervene by modifying this line with the cursors or the textboxes. @@ -3468,6 +3479,15 @@ This effect applies a traditional \textit{darkroom} technique, the so called \te Videoscope summarizes intensity and color on a calibrated display. The Videoscope can be used in conjunction with other \CGG{} plugins such as \textit{Color 3 Way}, \textit{YUV}, \textit{Brightness}, \textit{Color Balance} or \textit{Histogram} to accurately correct video for contrast, clarity, conformance (to normalize various videos shot under different light settings), or for cinematic purposes. The human eye is not specialized to match precise level of light and color, but Videoscope is. Videoscope contains three displays: the waveform scope and the vectorscope, plus the histograms (figure~\ref{fig:videoscope01}). Instead of applying the plugin to the tracks/edits we want to examine, we can use the Videoscope buttons in the Composer and Viewer windows. \includegraphics[height=\baselineskip]{scope.png} In this way the monitors act on the frame indicated by the insertion point, without taking into account the stack of tracks or on which edits to apply the plugin. +\begin{figure}[hbtp] + \centering + \includegraphics[width=1.0\linewidth]{videoscope01.png} + \caption{GUI of the Videoscope. You see Histogram, RGB Parade and Vectorscope} + \label{fig:videoscope01} +\end{figure} + +When using the X11 graphics driver and RGBA-FLOAT color model, Videoscope allows you to display greater than (0 - 1.0f) values to accomodate HDR. This does not work when using X11-OpenGL because it is an 8-bit limited driver. The display will stop at -10\% or +110\%, but there is no clipping. For example, by varying the brightness all out-of-range values become visible on Waveform, even over 110\%. However you must disable the "smooth" option which always causes clipping. + The Videoscope menu window has many options. \paragraph*{Scopes:} we can choose between two histograms: @@ -3488,13 +3508,6 @@ and two vectorscopes: \item \textit{VectorWheel} \end{itemize} -\begin{figure}[hbtp] - \centering - \includegraphics[width=1.0\linewidth]{videoscope01.png} - \caption{GUI of the Videoscope. You see Histogram, RGB Parade and Vectorscope} - \label{fig:videoscope01} -\end{figure} - \paragraph*{Settings:} It is divided into two sections. The upper section contains two items: \begin{description} @@ -3550,15 +3563,15 @@ On the left is shown waveform RGB: instead of the color shadows as in figure~\re If we left-click on the graph with the mouse, we will see a crosshair that we can place exactly where we want to measure. We can read the precise values of X and Luminance (Value) in the pop-up box that appears at the bottom right (figure~\ref{fig:videoscope03}). -The Waveform scope helps correct image light levels for contrast range or for conforming light levels on various scenes originally shot on different light settings. The same can be done with Waveform RGB or the convenient overlapping representation (Waveform Ply). - \begin{figure}[hbtp] - \centering - \includegraphics[width=1.0\linewidth]{videoscope03.png} - \caption{Examples of waveform (with crosshair and the coordinates' box), waveform RGB and waveform Ply} - \label{fig:videoscope03} + \centering + \includegraphics[width=1.0\linewidth]{videoscope03.png} + \caption{Examples of waveform (with crosshair and the coordinates' box), waveform RGB and waveform Ply} + \label{fig:videoscope03} \end{figure} +The Waveform scope helps correct image light levels for contrast range or for conforming light levels on various scenes originally shot on different light settings. The same can be done with Waveform RGB or the convenient overlapping representation (Waveform Ply). + \subsubsection*{Adjusting luminance}% \label{ssub:adjusting_luminance} -- 2.26.2 From 18c6fb015ed4409ffe760a9d91a0f5934f2927ce Mon Sep 17 00:00:00 2001 From: Good Guy Date: Fri, 26 Jan 2024 16:26:59 -0700 Subject: [PATCH 02/16] Credit Andrew/Andrea for defing procedure and putting into Latex format --- parts/DVD.tex | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/parts/DVD.tex b/parts/DVD.tex index 5d38c8d..1238927 100644 --- a/parts/DVD.tex +++ b/parts/DVD.tex @@ -502,6 +502,48 @@ because the upsampling of interlaced chroma fields is normally done using a prog With this mode enabled, the MPEG decoder uses a different algorithm for interlaced frames so that the 4:2:0 format chroma interlacing is preserved. +\section{DVD with LPCM audio}% +\label{sec:dvd_lpcm_audio} + +By default, the audio when creating a DVD is always \textit{AC3}. However you can switch to \textit{PCM} (Pulse Code Modulator) with just a few additional steps as outlined below. +Note that Audio must be $48Khz$ or $96Khz$, nothing else is supported, even by ffmpeg's dvd pcm encoder. + +\begin{enumerate} + \item Start \CGG{} from a terminal window so you will be able to see what is happening. Only the final step when you actually want to write to a +DVD media writer, requires privileges of either root or the system has +granted the user this privilege. + \item Make sure you have your video with audio loaded and edited to your satisfaction and you are positioned at the start of the video. + \item Use the \texttt{File} pulldown and select the \textit{DVD Render} option. + \item In the\textit{Create DVD} window, accept the defaults or select different values and then click \texttt{OK}. Do not check "Use FFMPEG" as that will not work. + \item When the \textit{Batch Render} window pops up, in the big box towards the bottom will be 2 lines with the first line for \textit{Video} already highlighted. Instead, click on the second line, which is for \textit{Audio}, so that it is highlighted. + \item On the top left, you will see the \textit{File Format} set as AC3. Use the down arrow next to the box and change it to \textit{Raw PCM} by clicking on it. + \item When you switch to Raw PCM, you see the extension in the \texttt{Output path} above change to pcm + instead of ac3. Now just reset the extension from pcm to lpcm as that is required. In most cases if you click on the \texttt{Audio} wrench to see the settings, you will find that the standard settings of 16 bit Linear / Signed / Hi Lo work. If not, experiment for alternatives. + \item Now click on the \texttt{Start} box in the bottom left hand corner and \CGG{} will process what it can of the job and put you back at your terminal startup window. + \item You will see a few lines of output, some of which are shown below, to include the ERROR: + \begin{lstlisting}[style=sh] + running /dev/shm//dvd_20240116-182336/dvd.sh + INFO: [mplex] mplex version 2.1.0 (2.2.7 $Date: 2012/11/17 01:55:16 $) + **ERROR: [mplex] Unable to open file + /dev/shm/dvd_20240116-182336/dvd.ac3 for reading. + \end{lstlisting} + \item Change directory to the location as shown on the terminal window of \texttt{dvd.sh}. + \item Using an editor, modify the line in dvd.sh to change \texttt{dvd.ac3} to \texttt{dvd.lpcm} and change the mplex parameter to include: + \begin{lstlisting}[style=sh] + -L 48000:2:16 + \end{lstlisting} + The full line will look like this: + \begin{lstlisting}[style=sh] + mplex -f 8 -L 48000:2:16 -o $dir/dvd.mpg $dir/dvd.m2v $dir/dvd.lpcm + \end{lstlisting} + \item Now the script is ready to run in the same manner it would have had it been ac3. That is just run via: + \begin{lstlisting}[style=sh] + ./dvd.sh + \end{lstlisting} + \item Check to make sure there are no errors in the output shown on the window and proceed as usual. +\end{enumerate} + + \section{MPEG utility programs}% \label{sec:mpeg_utility_programs} -- 2.26.2 From 7b49bcd55f6ef4a165f150aa33c038d0ab2d9c8d Mon Sep 17 00:00:00 2001 From: Good Guy Date: Sun, 28 Jan 2024 10:33:25 -0700 Subject: [PATCH 03/16] add minor statement that all features may not be available --- parts/DVD.tex | 2 ++ 1 file changed, 2 insertions(+) diff --git a/parts/DVD.tex b/parts/DVD.tex index 1238927..1985776 100644 --- a/parts/DVD.tex +++ b/parts/DVD.tex @@ -4,6 +4,8 @@ \index{BluRay} This section describes how to create a blu-ray DVD, or \textcolor{red}{BD} referring to a \textcolor{red}{B}lu-ray \textcolor{red}{D}VD, and a regular DVD, or \textcolor{red}{SD} referring to a \textcolor{red}{S}tandard \textcolor{red}{D}VD. The DVDs (plural usage of DVD means either BD or SD) created are unencrypted, unlike commercially available movie DVDs. This \CGG{} version conceivably can create different variations of DVD/Blu-ray media but for the casual user the most standard usages are readily usable and will be described here. +In \CGG{} DVD and Bluray creation is a convenience for users who want to edit and then just make basic media without having to work too hard, therefore +all features will not be available. Some preliminary information follows. For NTSC, SD media is almost always $720\times480$ interlaced (the format in the United States, US). For PAL, SD media is almost always $720\times576$ interlaced (Europe, EU, and most of the world). An SD can conceivably be created with a lower resolution – for example $352\times240$ MPEG-1 -- but it is not useful. Aspect ratio for either NTSC or PAL can be $4:3$ or $16:9$. -- 2.26.2 From 3da6cb8ec5fa0bddaebf72eeedd36f339a3e1771 Mon Sep 17 00:00:00 2001 From: Good Guy Date: Mon, 29 Jan 2024 11:05:01 -0700 Subject: [PATCH 04/16] add MP2 to DVD with LPCM workaround --- parts/DVD.tex | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/parts/DVD.tex b/parts/DVD.tex index 1985776..08c59c5 100644 --- a/parts/DVD.tex +++ b/parts/DVD.tex @@ -504,10 +504,10 @@ because the upsampling of interlaced chroma fields is normally done using a prog With this mode enabled, the MPEG decoder uses a different algorithm for interlaced frames so that the 4:2:0 format chroma interlacing is preserved. -\section{DVD with LPCM audio}% +\section{DVD with LPCM or MP2 audio}% \label{sec:dvd_lpcm_audio} -By default, the audio when creating a DVD is always \textit{AC3}. However you can switch to \textit{PCM} (Pulse Code Modulator) with just a few additional steps as outlined below. +By default, the audio when creating a DVD is always \textit{AC3}. However you can switch to \textit{PCM} (Pulse Code Modulator) or MP2 with just a few additional steps as outlined below. Note that Audio must be $48Khz$ or $96Khz$, nothing else is supported, even by ffmpeg's dvd pcm encoder. \begin{enumerate} @@ -516,11 +516,12 @@ DVD media writer, requires privileges of either root or the system has granted the user this privilege. \item Make sure you have your video with audio loaded and edited to your satisfaction and you are positioned at the start of the video. \item Use the \texttt{File} pulldown and select the \textit{DVD Render} option. - \item In the\textit{Create DVD} window, accept the defaults or select different values and then click \texttt{OK}. Do not check "Use FFMPEG" as that will not work. + \item In the\textit{Create DVD} window, accept the defaults or select different values and then click \texttt{OK}. Do not check "Use FFMPEG" as that may not work. \item When the \textit{Batch Render} window pops up, in the big box towards the bottom will be 2 lines with the first line for \textit{Video} already highlighted. Instead, click on the second line, which is for \textit{Audio}, so that it is highlighted. - \item On the top left, you will see the \textit{File Format} set as AC3. Use the down arrow next to the box and change it to \textit{Raw PCM} by clicking on it. - \item When you switch to Raw PCM, you see the extension in the \texttt{Output path} above change to pcm - instead of ac3. Now just reset the extension from pcm to lpcm as that is required. In most cases if you click on the \texttt{Audio} wrench to see the settings, you will find that the standard settings of 16 bit Linear / Signed / Hi Lo work. If not, experiment for alternatives. + \item On the top left, you will see the \textit{File Format} set as AC3. Use the down arrow next to the box and change it to \textit{Raw PCM} or \textit{MPEG Audio} by clicking on it. + \item When you switch to Raw PCM or MPEG Audio, you see the extension in the \texttt{Output path} above change to pcm or mp3 + instead of ac3. Now just reset the extension from pcm to lpcm or mp2 as that is required. In most cases if you click on the \texttt{Audio} wrench to see the settings, you will find that the standard settings of 16 bit Linear / Signed / Hi Lo work for Raw PCM. For mp2, you will have to click +on the Audio wrench and change the default Layer III to Layer II. \item Now click on the \texttt{Start} box in the bottom left hand corner and \CGG{} will process what it can of the job and put you back at your terminal startup window. \item You will see a few lines of output, some of which are shown below, to include the ERROR: \begin{lstlisting}[style=sh] @@ -530,7 +531,7 @@ granted the user this privilege. /dev/shm/dvd_20240116-182336/dvd.ac3 for reading. \end{lstlisting} \item Change directory to the location as shown on the terminal window of \texttt{dvd.sh}. - \item Using an editor, modify the line in dvd.sh to change \texttt{dvd.ac3} to \texttt{dvd.lpcm} and change the mplex parameter to include: + \item Using an editor, modify the line in dvd.sh to change \texttt{dvd.ac3} to \texttt{dvd.lpcm} or to \texttt{dvd.mp2} for mp2. In addition ONLY for Raw PCM you have to change the mplex parameter to include: \begin{lstlisting}[style=sh] -L 48000:2:16 \end{lstlisting} -- 2.26.2 From 7df425064fa7e3e2f6cb95da231e007a24cc69f1 Mon Sep 17 00:00:00 2001 From: Good Guy Date: Fri, 2 Feb 2024 11:06:44 -0700 Subject: [PATCH 05/16] trivial changes for AppImage disadvantages and not working with graphics for LV2 Calf plugins --- parts/Installation.tex | 8 ++++++-- parts/Plugins.tex | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/parts/Installation.tex b/parts/Installation.tex index 626485d..a938d23 100644 --- a/parts/Installation.tex +++ b/parts/Installation.tex @@ -10,8 +10,12 @@ The main way to install \CGG{} is to use the AppImage. This is updated regularly A big advantage of using the AppImage format is that it is only 1/3 the size of the normal install, and since each release is named differently, you can keep a number of versions in a directory, and when testing from a terminal you just have to type CinGG, then hit tab, and complete it to -the desired date release. -For 64-bit systems you can choose between an image with up-to-date libraries or one that supports older libraries, which you should use only if the first image gives you problems with unsupported libs. There is also a 32-bit older distro available that has \textit{i686} as part of the filename that currently works on older distros but may not work on the newest distros +the desired date release. A small disadvantage of using the AppImage format is that some +of the options to make minor text type changes are not available and any graphics board +speedups most likely will not work. +For 64-bit systems you can choose between an image with up-to-date libraries or one that supports older libraries, which you should use only if the first image gives you problems with unsupported libs. + +There is also a 32-bit older distro available that has \textit{i686} as part of the filename that currently works on older distros but may not work on the newest distros (most of the popular Linux distributions such as Arch, Ubuntu, and Fedora have dropped support for this older architecture). In any case, if you are using a 32-bit Linux distro, you should compile your sources from git or use a precompiled binary\protect\footnote{Remember that a 32-bit distro does not address more than 4GB of memory, so you may have stability and performance problems with large, high-resolution mediafiles.}. And there is a 8/10/12 bit newer distro that handles 8 or 10 or 12 bits that has \textit{multibit} as part of the filename. Installing the appimage is simple: Download the file from: diff --git a/parts/Plugins.tex b/parts/Plugins.tex index a689bfe..f3740f1 100644 --- a/parts/Plugins.tex +++ b/parts/Plugins.tex @@ -836,7 +836,7 @@ export LADSPA_PATH=/usr/lib/ladspa LV2\protect\footnote{Optional Feature - OS dependent} is an open standard for audio plugins using a simple interface with extensions which add functionality to support audio software. These plugins were written by external developers and provide additional audio effects to \CGG{} audio without having to change \CGG{} every time. Because the LV2 plugins are separate from \CGG{} Infinity, if one fails or does not perform as expected, \CGG{} should stay running and you will have to contact the programmers responsible for that plugin for a fix. -Typically, a user OS has specialized package groups installed. It is difficult to create one build of \CGG{} to accommodate all potential LV2 plugins. Specifically for the \textit{Calf-Studio LV2 plugins}, you should install the \textit{Calf Plugins} package. The user’s computer must have \textit{gtk-2-runtime} installed, which seems to be automatically done already for most distros. For users doing their own builds, you can build \CGG{} without LV2 support by including \texttt{-{}-without-lv2} in the configure step. The default build is \texttt{-{}-with-lv2=yes} and requires that \textit{GTK-2-devel} must be installed or the build will fail and notify you. In addition for some newer distros, you will need to install +Typically, a user OS has specialized package groups installed. It is difficult to create one build of \CGG{} to accommodate all potential LV2 plugins. Specifically for the \textit{Calf-Studio LV2 plugins}, you should install the \textit{Calf Plugins} package. Note that because the Calf Plugins have a graphics UI interface which is dependent on specific hardware, they will not work with AppImage. The user’s computer must have \textit{gtk-2-runtime} installed, which seems to be automatically done already for most distros. For users doing their own builds, you can build \CGG{} without LV2 support by including \texttt{-{}-without-lv2} in the configure step. The default build is \texttt{-{}-with-lv2=yes} and requires that \textit{GTK-2-devel} must be installed or the build will fail and notify you. In addition for some newer distros, you will need to install \textit{lv2-calf-plugins-gui}; for example Fedora version 32. LV2 plugins have their own category in the \textit{Audio Plugins Visibility} as lv2. There is a simple text interface which is available via the usual \textit{Show controls} button when the plugin is attached to the audio track. This window has a Reset button to get back to the default settings. To change a value of one of the parameters, highlight that parameter and type in the new value in the topmost text box and then hit Apply to take effect -- the reason for requiring hitting apply is so that the audio is not moving all over the place while you are still typing a value. More easily, you can just move the \textit{pot dial} or the \textit{slider} bar which take effect automatically. -- 2.26.2 From fb7369e6b5f670d1b1ebaffa08f3c2e4bb053a61 Mon Sep 17 00:00:00 2001 From: Good Guy Date: Thu, 15 Feb 2024 16:57:05 -0700 Subject: [PATCH 06/16] Credit Andrea - Anamorphic document --- Anamorphic.tex | 41 ++++++++++++ images/DAR.png | Bin 0 -> 12526 bytes parts/Anamorphic.tex | 132 +++++++++++++++++++++++++++++++++++++ parts/Anamorphic_title.tex | 55 ++++++++++++++++ 4 files changed, 228 insertions(+) create mode 100644 Anamorphic.tex create mode 100644 images/DAR.png create mode 100644 parts/Anamorphic.tex create mode 100644 parts/Anamorphic_title.tex diff --git a/Anamorphic.tex b/Anamorphic.tex new file mode 100644 index 0000000..752b331 --- /dev/null +++ b/Anamorphic.tex @@ -0,0 +1,41 @@ +\documentclass[ +a4paper, +12pt, +oneside, +svgnames, +%draft +]{memoir} % paper size, font size and other options for document +\input{common/packages.tex} % common packages +\input{common/settings.tex} + +%\includeonly{common/title,parts/Installation}% ,parts/Introduction,parts/Windows + +\begin{document} + +\input{parts/Anamorphic_title.tex} % create and use custom title page + +\thispagestyle{empty} % no page numbers +% \newpage +\setlength{\parskip}{1\baselineskip} +\frontmatter + +\tableofcontents + +\pagestyle{ruled} + +\mainmatter% + +\include{parts/Anamorphic} + +\newpage + +\pagestyle{ruled} + +% \listoftodos + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/images/DAR.png b/images/DAR.png new file mode 100644 index 0000000000000000000000000000000000000000..fb2ba7e5d4115f5f4e54fbb32fc612352a648f9f GIT binary patch literal 12526 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 z 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 iFE^nG{{z%<+{zwZLQ3ZfgJ2u*Snj@}Os