From 5d5c51d200b43a23adc289c42da27c6ac68c7dc0 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Wed, 7 Feb 2018 09:34:19 +0100 Subject: [PATCH 01/85] added support for user-specific DCP and input ICC profiles dirs Look for direcories dcpprofiles/ and iccprofiles/input/ under Options::rtdir (typically something like $HOME/.config/RawTherapee) --- rtengine/dcp.cc | 73 ++++++++++++++++++++++---------------------- rtengine/dcp.h | 2 +- rtengine/iccstore.cc | 2 ++ 3 files changed, 40 insertions(+), 37 deletions(-) diff --git a/rtengine/dcp.cc b/rtengine/dcp.cc index fe798cb99..01929c9db 100644 --- a/rtengine/dcp.cc +++ b/rtengine/dcp.cc @@ -1737,51 +1737,50 @@ void DCPStore::init(const Glib::ustring& rt_profile_dir, bool loadAll) file_std_profiles.clear(); if (!loadAll) { - profileDir.assign (rt_profile_dir); + profileDir = { rt_profile_dir, Glib::build_filename(options.rtdir, "dcpprofiles") }; return; } - if (!rt_profile_dir.empty()) { - std::deque dirs = { - rt_profile_dir - }; + std::deque dirs = { + rt_profile_dir, + Glib::build_filename(options.rtdir, "dcpprofiles") + }; - while (!dirs.empty()) { - // Process directory - Glib::ustring dirname = dirs.back(); - dirs.pop_back(); + while (!dirs.empty()) { + // Process directory + Glib::ustring dirname = dirs.back(); + dirs.pop_back(); - std::unique_ptr dir; + std::unique_ptr dir; - try { - if (!Glib::file_test(dirname, Glib::FILE_TEST_IS_DIR)) { - return; - } - - dir.reset(new Glib::Dir(dirname)); - } catch (Glib::Exception& exception) { + try { + if (!Glib::file_test(dirname, Glib::FILE_TEST_IS_DIR)) { return; } - for (const Glib::ustring& sname : *dir) { - const Glib::ustring fname = Glib::build_filename(dirname, sname); + dir.reset(new Glib::Dir(dirname)); + } catch (Glib::Exception& exception) { + return; + } - if (!Glib::file_test(fname, Glib::FILE_TEST_IS_DIR)) { - // File - const auto lastdot = sname.rfind('.'); + for (const Glib::ustring& sname : *dir) { + const Glib::ustring fname = Glib::build_filename(dirname, sname); - if ( - lastdot != Glib::ustring::npos - && lastdot <= sname.size() - 4 - && !sname.casefold().compare(lastdot, 4, ".dcp") + if (!Glib::file_test(fname, Glib::FILE_TEST_IS_DIR)) { + // File + const auto lastdot = sname.rfind('.'); + + if ( + lastdot != Glib::ustring::npos + && lastdot <= sname.size() - 4 + && !sname.casefold().compare(lastdot, 4, ".dcp") ) { - const Glib::ustring cam_short_name = sname.substr(0, lastdot).uppercase(); - file_std_profiles[cam_short_name] = fname; // They will be loaded and cached on demand - } - } else { - // Directory - dirs.push_front(fname); + const Glib::ustring cam_short_name = sname.substr(0, lastdot).uppercase(); + file_std_profiles[cam_short_name] = fname; // They will be loaded and cached on demand } + } else { + // Directory + dirs.push_front(fname); } } } @@ -1839,11 +1838,13 @@ DCPProfile* DCPStore::getStdProfile(const Glib::ustring& requested_cam_short_nam } // profile not found, looking if we're in loadAll=false mode - if (!profileDir.empty()) { - const Glib::ustring fname = Glib::build_filename(profileDir, requested_cam_short_name + Glib::ustring(".dcp")); + for (const auto &dir : profileDir) { + if (!dir.empty()) { + const Glib::ustring fname = Glib::build_filename(dir, requested_cam_short_name + Glib::ustring(".dcp")); - if (Glib::file_test(fname, Glib::FILE_TEST_EXISTS)) { - return getProfile(fname); + if (Glib::file_test(fname, Glib::FILE_TEST_EXISTS)) { + return getProfile(fname); + } } } diff --git a/rtengine/dcp.h b/rtengine/dcp.h index 10bbf8f7e..bedc7f76d 100644 --- a/rtengine/dcp.h +++ b/rtengine/dcp.h @@ -166,7 +166,7 @@ private: DCPStore() = default; mutable MyMutex mutex; - Glib::ustring profileDir; + std::vector profileDir; // these contain standard profiles from RT. keys are all in uppercase, file path is value std::map file_std_profiles; diff --git a/rtengine/iccstore.cc b/rtengine/iccstore.cc index 50ff58878..51c77b719 100644 --- a/rtengine/iccstore.cc +++ b/rtengine/iccstore.cc @@ -334,6 +334,8 @@ public: fileStdProfilesFileNames.clear(); if (loadAll) { loadProfiles(stdProfilesDir, nullptr, nullptr, &fileStdProfilesFileNames, true); + Glib::ustring user_input_icc_dir = Glib::build_filename(options.rtdir, "iccprofiles", "input"); + loadProfiles(user_input_icc_dir, nullptr, nullptr, &fileStdProfilesFileNames, true); } defaultMonitorProfile = settings->monitorProfile; From ee5b1dbbc807c17edbdc7d4cb9942f83861fd143 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 13 May 2018 19:07:13 +0200 Subject: [PATCH 02/85] Microcontrast: add Contrast threshold adjuster, #4551 --- rtdata/languages/default | 2 ++ rtengine/ipsharpen.cc | 26 ++++++++++++++----------- rtengine/procparams.cc | 11 +++++++++++ rtengine/procparams.h | 1 + rtgui/addsetids.h | 1 + rtgui/batchtoolpanelcoord.cc | 5 +++-- rtgui/paramsedited.cc | 6 ++++++ rtgui/paramsedited.h | 1 + rtgui/ppversion.h | 4 +++- rtgui/preferences.cc | 1 + rtgui/sharpenmicro.cc | 37 +++++++++++++++++++++++++++++++----- rtgui/sharpenmicro.h | 5 ++++- 12 files changed, 80 insertions(+), 20 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 1c6b2a593..62701b85f 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -393,6 +393,7 @@ HISTORY_MSG_142;ES - Iterations HISTORY_MSG_143;ES - Quantity HISTORY_MSG_144;Microcontrast - Quantity HISTORY_MSG_145;Microcontrast - Uniformity +HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold HISTORY_MSG_146;Edge sharpening HISTORY_MSG_147;ES - Luminance only HISTORY_MSG_148;Microcontrast @@ -1950,6 +1951,7 @@ TP_SHARPENING_RLD_ITERATIONS;Iterations TP_SHARPENING_THRESHOLD;Threshold TP_SHARPENING_USM;Unsharp Mask TP_SHARPENMICRO_AMOUNT;Quantity +TP_SHARPENMICRO_CONTRAST;Contrast threshold TP_SHARPENMICRO_LABEL;Microcontrast TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 3c455b03e..3cdc613df 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -23,7 +23,8 @@ #include "rt_math.h" #include "sleef.c" #include "opthelper.h" - +#define BENCHMARK +#include "StopWatch.h" using namespace std; namespace rtengine @@ -572,12 +573,13 @@ void ImProcFunctions::MLsharpen (LabImage* lab) //! \param luminance : Luminance channel of image void ImProcFunctions::MLmicrocontrast(float** luminance, int W, int H) { - if (!params->sharpenMicro.enabled) { + if (!params->sharpenMicro.enabled || params->sharpenMicro.contrast == 100) { return; } - +BENCHFUN const int k = params->sharpenMicro.matrix ? 1 : 2; - + const float contrastThreshold = params->sharpenMicro.contrast / 100; + const float contrastFactor = contrastThreshold == 0.f ? 0.f : 1.f / contrastThreshold; // k=2 matrix 5x5 k=1 matrix 3x3 const int width = W, height = H; const float uniform = params->sharpenMicro.uniformity; //between 0 to 100 @@ -619,8 +621,8 @@ void ImProcFunctions::MLmicrocontrast(float** luminance, int W, int H) const float Cont5[11] = {1.0f, 1.1f, 1.2f, 1.25f, 1.3f, 1.4f, 1.45f, 1.50f, 1.6f, 1.65f, 1.80f}; const float s = amount; - const float sqrt2 = sqrt(2.0); - const float sqrt1d25 = sqrt(1.25); + constexpr float sqrt2 = sqrt(2.0); + constexpr float sqrt1d25 = sqrt(1.25); float *LM = new float[width * height]; //allocation for Luminance #ifdef _OPENMP @@ -652,6 +654,9 @@ void ImProcFunctions::MLmicrocontrast(float** luminance, int W, int H) + SQR(LM[offset + 2] - LM[offset - 2]) + SQR(LM[offset + 2 * width] - LM[offset - 2 * width])) * 0.0625f; //for 5x5 contrast = std::min(contrast, 1.f); + float blend = 0.f; + if(contrast <= contrastThreshold) + blend = sqrt((contrastThreshold - contrast) * contrastFactor); //matrix 5x5 float temp = v + 4.f *( v * (s + sqrt2 * s)); //begin 3x3 @@ -675,13 +680,12 @@ void ImProcFunctions::MLmicrocontrast(float** luminance, int W, int H) temp = std::max(temp, 0.f); - for(int row = j + k, n = SQR(2*k+1) - 1; row >= j - k; row--) { - for(int offset2 = row * width + i + k; offset2 >= row * width + i - k; offset2--) { + for(int row = j - k; row <= j + k; ++row) { + for(int offset2 = row * width + i - k; offset2 <= row * width + i + k; ++offset2) { if((LM[offset2] - temp) * (v - LM[offset2]) > 0.f) { temp = intp(0.75f, temp, LM[offset2]); goto breakout; } - n--; } } breakout: @@ -751,7 +755,7 @@ void ImProcFunctions::MLmicrocontrast(float** luminance, int W, int H) } else { temp = 0.f; } - luminance[j][i] *= (temp * temp2 + 1.f); + luminance[j][i] = intp(blend, luminance[j][i], luminance[j][i] * (temp * temp2 + 1.f)); } else { float temp4 = LM[offset] / tempL; // @@ -802,7 +806,7 @@ void ImProcFunctions::MLmicrocontrast(float** luminance, int W, int H) } else { temp = 0.f; } - luminance[j][i] /= (temp * temp4 + 1.f); + luminance[j][i] = intp(blend, luminance[j][i], luminance[j][i] / (temp * temp4 + 1.f)); } } } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 276750786..db671a8ab 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -1073,6 +1073,7 @@ SharpenMicroParams::SharpenMicroParams() : enabled(false), matrix(false), amount(20.0), + contrast(20.0), uniformity(50.0) { } @@ -1083,6 +1084,7 @@ bool SharpenMicroParams::operator ==(const SharpenMicroParams& other) const enabled == other.enabled && matrix == other.matrix && amount == other.amount + && contrast == other.contrast && uniformity == other.uniformity; } @@ -2885,6 +2887,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->sharpenMicro.enabled, "SharpenMicro", "Enabled", sharpenMicro.enabled, keyFile); saveToKeyfile(!pedited || pedited->sharpenMicro.matrix, "SharpenMicro", "Matrix", sharpenMicro.matrix, keyFile); saveToKeyfile(!pedited || pedited->sharpenMicro.amount, "SharpenMicro", "Strength", sharpenMicro.amount, keyFile); + saveToKeyfile(!pedited || pedited->sharpenMicro.contrast, "SharpenMicro", "Contrast", sharpenMicro.contrast, keyFile); saveToKeyfile(!pedited || pedited->sharpenMicro.uniformity, "SharpenMicro", "Uniformity", sharpenMicro.uniformity, keyFile); // WB @@ -3710,6 +3713,14 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "SharpenMicro", "Enabled", pedited, sharpenMicro.enabled, pedited->sharpenMicro.enabled); assignFromKeyfile(keyFile, "SharpenMicro", "Matrix", pedited, sharpenMicro.matrix, pedited->sharpenMicro.matrix); assignFromKeyfile(keyFile, "SharpenMicro", "Strength", pedited, sharpenMicro.amount, pedited->sharpenMicro.amount); + if (ppVersion >= 334) { + assignFromKeyfile(keyFile, "SharpenMicro", "Contrast", pedited, sharpenMicro.contrast, pedited->sharpenMicro.contrast); + } else { + sharpenMicro.contrast = 0; + if (pedited) { + pedited->sharpenMicro.contrast = true; + } + } assignFromKeyfile(keyFile, "SharpenMicro", "Uniformity", pedited, sharpenMicro.uniformity, pedited->sharpenMicro.uniformity); } diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 5e7b9ff2d..bc2a9d97c 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -509,6 +509,7 @@ struct SharpenMicroParams { bool enabled; bool matrix; double amount; + double contrast; double uniformity; SharpenMicroParams(); diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index 49eefc794..e0e0b20dd 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -134,6 +134,7 @@ enum { ADDSET_LOCALCONTRAST_DARKNESS, ADDSET_LOCALCONTRAST_LIGHTNESS, ADDSET_FATTAL_ANCHOR, + ADDSET_SHARPENMICRO_CONTRAST, ADDSET_PARAM_NUM // THIS IS USED AS A DELIMITER!! }; diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index d3c3fb4c6..99c7a089d 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -149,7 +149,7 @@ void BatchToolPanelCoordinator::initSession () sharpening->setAdjusterBehavior (false, false, false, false, false, false); prsharpening->setAdjusterBehavior (false, false, false, false, false, false); sharpenEdge->setAdjusterBehavior (false, false); - sharpenMicro->setAdjusterBehavior (false, false); + sharpenMicro->setAdjusterBehavior (false, false, false); icm->setAdjusterBehavior (false, false); epd->setAdjusterBehavior (false, false, false, false, false); fattal->setAdjusterBehavior (false, false, false); @@ -196,7 +196,7 @@ void BatchToolPanelCoordinator::initSession () localContrast->setAdjusterBehavior(options.baBehav[ADDSET_LOCALCONTRAST_RADIUS], options.baBehav[ADDSET_LOCALCONTRAST_AMOUNT], options.baBehav[ADDSET_LOCALCONTRAST_DARKNESS], options.baBehav[ADDSET_LOCALCONTRAST_LIGHTNESS]); sharpenEdge->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENEDGE_AMOUNT], options.baBehav[ADDSET_SHARPENEDGE_PASS]); - sharpenMicro->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENMICRO_AMOUNT], options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]); + sharpenMicro->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENMICRO_AMOUNT], options.baBehav[ADDSET_SHARPENMICRO_CONTRAST], options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]); icm->setAdjusterBehavior (options.baBehav[ADDSET_FREE_OUPUT_GAMMA], options.baBehav[ADDSET_FREE_OUTPUT_SLOPE]); // colortoning->setAdjusterBehavior (options.baBehav[ADDSET_COLORTONING_SPLIT], options.baBehav[ADDSET_COLORTONING_SATTHRESHOLD], options.baBehav[ADDSET_COLORTONING_SATOPACITY], options.baBehav[ADDSET_COLORTONING_STRPROTECT], options.baBehav[ADDSET_COLORTONING_BALANCE]); colortoning->setAdjusterBehavior (options.baBehav[ADDSET_COLORTONING_SPLIT], options.baBehav[ADDSET_COLORTONING_SATTHRESHOLD], options.baBehav[ADDSET_COLORTONING_SATOPACITY], options.baBehav[ADDSET_COLORTONING_STRENGTH], options.baBehav[ADDSET_COLORTONING_BALANCE]); @@ -244,6 +244,7 @@ void BatchToolPanelCoordinator::initSession () if (options.baBehav[ADDSET_SHARP_HALOCTRL]) { pparams.sharpening.halocontrol_amount = pparams.prsharpening.halocontrol_amount = 0; } if (options.baBehav[ADDSET_SHARPENEDGE_AMOUNT]) { pparams.sharpenEdge.amount = 0; } if (options.baBehav[ADDSET_SHARPENMICRO_AMOUNT]) { pparams.sharpenMicro.amount = 0; } + if (options.baBehav[ADDSET_SHARPENMICRO_CONTRAST]) { pparams.sharpenMicro.contrast = 0; } if (options.baBehav[ADDSET_SHARPENEDGE_PASS]) { pparams.sharpenEdge.passes = 0; } if (options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]) { pparams.sharpenMicro.uniformity = 0; } if (options.baBehav[ADDSET_CHMIXER]) for (int i = 0; i < 3; i++) { pparams.chmixer.red[i] = pparams.chmixer.green[i] = pparams.chmixer.blue[i] = 0; } diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 391228c9b..0d3ee8f22 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -175,6 +175,7 @@ void ParamsEdited::set (bool v) sharpenEdge.threechannels = v; sharpenMicro.enabled = v; sharpenMicro.matrix = v; + sharpenMicro.contrast = v; sharpenMicro.amount = v; sharpenMicro.uniformity = v; vibrance.enabled = v; @@ -691,6 +692,7 @@ void ParamsEdited::initFrom (const std::vector sharpenMicro.enabled = sharpenMicro.enabled && p.sharpenMicro.enabled == other.sharpenMicro.enabled; sharpenMicro.matrix = sharpenMicro.matrix && p.sharpenMicro.matrix == other.sharpenMicro.matrix; sharpenMicro.amount = sharpenMicro.amount && p.sharpenMicro.amount == other.sharpenMicro.amount; + sharpenMicro.contrast = sharpenMicro.contrast && p.sharpenMicro.contrast == other.sharpenMicro.contrast; sharpenMicro.uniformity = sharpenMicro.uniformity && p.sharpenMicro.uniformity == other.sharpenMicro.uniformity; sharpening.enabled = sharpening.enabled && p.sharpening.enabled == other.sharpening.enabled; sharpening.radius = sharpening.radius && p.sharpening.radius == other.sharpening.radius; @@ -1564,6 +1566,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten toEdit.sharpenMicro.amount = dontforceSet && options.baBehav[ADDSET_SHARPENMICRO_AMOUNT] ? toEdit.sharpenMicro.amount + mods.sharpenMicro.amount : mods.sharpenMicro.amount; } + if (sharpenMicro.contrast) { + toEdit.sharpenMicro.contrast = dontforceSet && options.baBehav[ADDSET_SHARPENMICRO_CONTRAST] ? toEdit.sharpenMicro.contrast + mods.sharpenMicro.contrast : mods.sharpenMicro.contrast; + } + if (sharpenMicro.uniformity) { toEdit.sharpenMicro.uniformity = dontforceSet && options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY] ? toEdit.sharpenMicro.uniformity + mods.sharpenMicro.uniformity : mods.sharpenMicro.uniformity; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index e28a83a6f..e11eb1814 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -194,6 +194,7 @@ public : bool enabled; bool matrix; bool amount; + bool contrast; bool uniformity; }; diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index 1265d9969..e9f7ad60e 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,11 +1,13 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 333 +#define PPVERSION 334 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* Log of version changes + 334 2018-05-13 + new contrast threshold adjuster in Microcontrast tool 333 2018-04-26 new Shadows/Highlights tool 332 2018-04-18 diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 2c5154942..db2deada7 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -248,6 +248,7 @@ Gtk::Widget* Preferences::getBatchProcPanel () mi = behModel->append (); mi->set_value (behavColumns.label, M ("TP_SHARPENMICRO_LABEL")); appendBehavList (mi, M ("TP_SHARPENMICRO_AMOUNT"), ADDSET_SHARPENMICRO_AMOUNT, false); + appendBehavList (mi, M ("TP_SHARPENMICRO_CONTRAST"), ADDSET_SHARPENMICRO_CONTRAST, false); appendBehavList (mi, M ("TP_SHARPENMICRO_UNIFORMITY"), ADDSET_SHARPENMICRO_UNIFORMITY, false); mi = behModel->append (); diff --git a/rtgui/sharpenmicro.cc b/rtgui/sharpenmicro.cc index 871e0d38b..ff1447cb3 100644 --- a/rtgui/sharpenmicro.cc +++ b/rtgui/sharpenmicro.cc @@ -16,10 +16,11 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ +#include +#include #include "sharpenmicro.h" #include "guiutils.h" -#include -#include +#include "eventmapper.h" using namespace rtengine; using namespace rtengine::procparams; @@ -28,6 +29,9 @@ using namespace rtengine::procparams; SharpenMicro::SharpenMicro () : FoldableToolPanel(this, "sharpenmicro", M("TP_SHARPENMICRO_LABEL"), true, true) { + auto m = ProcEventMapper::getInstance(); + EvSharpenMicroContrast = m->newEvent(SHARPENING, "HISTORY_MSG_MICROCONTRAST_CONTRAST"); + amount = Gtk::manage(new Adjuster (M("TP_SHARPENMICRO_AMOUNT"), 0, 100, 1, 20)); amount->setAdjusterListener (this); @@ -36,6 +40,16 @@ SharpenMicro::SharpenMicro () : FoldableToolPanel(this, "sharpenmicro", M("TP_SH } amount->show(); + + contrast = Gtk::manage(new Adjuster (M("TP_SHARPENMICRO_CONTRAST"), 0, 100, 1, 20)); + contrast->setAdjusterListener (this); + + if (contrast->delay < options.adjusterMaxDelay) { + contrast->delay = options.adjusterMaxDelay; + } + + contrast->show(); + uniformity = Gtk::manage(new Adjuster (M("TP_SHARPENMICRO_UNIFORMITY"), 0, 100, 10, 50)); uniformity->setAdjusterListener (this); @@ -51,6 +65,7 @@ SharpenMicro::SharpenMicro () : FoldableToolPanel(this, "sharpenmicro", M("TP_SH matrix->show (); pack_start( *amount, Gtk::PACK_SHRINK, 0); + pack_start( *contrast, Gtk::PACK_SHRINK, 0); pack_start( *uniformity, Gtk::PACK_SHRINK, 0); matrixconn = matrix->signal_toggled().connect( sigc::mem_fun(*this, &SharpenMicro::matrix_toggled) ); @@ -64,6 +79,7 @@ void SharpenMicro::read(const ProcParams* pp, const ParamsEdited* pedited) set_inconsistent (multiImage && !pedited->sharpenMicro.enabled); matrix->set_inconsistent (!pedited->sharpenMicro.matrix); amount->setEditedState (pedited->sharpenMicro.amount ? Edited : UnEdited); + contrast->setEditedState (pedited->sharpenMicro.contrast ? Edited : UnEdited); uniformity->setEditedState (pedited->sharpenMicro.uniformity ? Edited : UnEdited); } @@ -75,6 +91,7 @@ void SharpenMicro::read(const ProcParams* pp, const ParamsEdited* pedited) lastmatrix = pp->sharpenMicro.matrix; amount->setValue (pp->sharpenMicro.amount); + contrast->setValue (pp->sharpenMicro.contrast); uniformity->setValue (pp->sharpenMicro.uniformity); enableListener (); @@ -85,12 +102,14 @@ void SharpenMicro::write( ProcParams* pp, ParamsEdited* pedited) pp->sharpenMicro.enabled = getEnabled(); pp->sharpenMicro.matrix = matrix->get_active (); pp->sharpenMicro.amount = amount->getValue (); + pp->sharpenMicro.contrast = contrast->getValue (); pp->sharpenMicro.uniformity = uniformity->getValue (); if (pedited) { pedited->sharpenMicro.enabled = !get_inconsistent(); pedited->sharpenMicro.matrix = !matrix->get_inconsistent(); pedited->sharpenMicro.amount = amount->getEditedState (); + pedited->sharpenMicro.contrast = contrast->getEditedState (); pedited->sharpenMicro.uniformity = uniformity->getEditedState (); } } @@ -139,9 +158,11 @@ void SharpenMicro::adjusterChanged (Adjuster* a, double newval) Glib::ustring value = a->getTextValue(); if (a == amount) { - listener->panelChanged (EvSharpenMicroAmount, value ); + listener->panelChanged (EvSharpenMicroAmount, value); + } else if (a == contrast) { + listener->panelChanged (EvSharpenMicroContrast, value); } else if (a == uniformity) { - listener->panelChanged (EvSharpenMicroUniformity, value ); + listener->panelChanged (EvSharpenMicroUniformity, value); } } } @@ -149,31 +170,37 @@ void SharpenMicro::adjusterChanged (Adjuster* a, double newval) void SharpenMicro::setBatchMode(bool batchMode) { amount->showEditedCB (); + contrast->showEditedCB (); uniformity->showEditedCB (); } void SharpenMicro::setDefaults(const ProcParams* defParams, const ParamsEdited* pedited) { amount->setDefault (defParams->sharpenMicro.amount); + contrast->setDefault (defParams->sharpenMicro.contrast); uniformity->setDefault (defParams->sharpenMicro.uniformity); if (pedited) { amount->setDefaultEditedState (pedited->sharpenMicro.amount ? Edited : UnEdited); + contrast->setDefaultEditedState (pedited->sharpenMicro.contrast ? Edited : UnEdited); uniformity->setDefaultEditedState (pedited->sharpenMicro.uniformity ? Edited : UnEdited); } else { amount->setDefaultEditedState (Irrelevant); + contrast->setDefaultEditedState (Irrelevant); uniformity->setDefaultEditedState (Irrelevant); } } -void SharpenMicro::setAdjusterBehavior (bool amountadd, bool uniformityadd ) +void SharpenMicro::setAdjusterBehavior (bool amountadd, bool contrastadd, bool uniformityadd) { amount->setAddMode (amountadd); + contrast->setAddMode (contrastadd); uniformity->setAddMode (uniformityadd); } void SharpenMicro::trimValues (ProcParams* pp) { amount->trimValue (pp->sharpenMicro.amount); + contrast->trimValue (pp->sharpenMicro.contrast); uniformity->trimValue (pp->sharpenMicro.uniformity); } diff --git a/rtgui/sharpenmicro.h b/rtgui/sharpenmicro.h index 03a75eaa5..e1fc0d7e0 100644 --- a/rtgui/sharpenmicro.h +++ b/rtgui/sharpenmicro.h @@ -36,6 +36,9 @@ protected: Gtk::CheckButton* matrix; Adjuster* amount; Adjuster* uniformity; + Adjuster* contrast; + + rtengine::ProcEvent EvSharpenMicroContrast; sigc::connection matrixconn; bool lastmatrix; @@ -49,7 +52,7 @@ public: void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); void setBatchMode (bool batchMode); void trimValues (rtengine::procparams::ProcParams* pp); - void setAdjusterBehavior (bool amountadd, bool uniformityadd ); + void setAdjusterBehavior (bool amountadd, bool contrastadd, bool uniformityadd); void adjusterChanged (Adjuster* a, double newval); void enabledChanged (); From 78c404dd02cd37550bb3b02a17150b3666040d38 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 14 May 2018 00:55:03 +0200 Subject: [PATCH 03/85] Microcontrast: improved blend --- rtengine/ipsharpen.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 3cdc613df..920fcd6ae 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -656,7 +656,7 @@ BENCHFUN contrast = std::min(contrast, 1.f); float blend = 0.f; if(contrast <= contrastThreshold) - blend = sqrt((contrastThreshold - contrast) * contrastFactor); + blend = 1.f - (contrast <= contrastThreshold * 0.5f ? 0.f : sqrt((std::min(contrast, contrastThreshold) - contrastThreshold * 0.5f) * 2.f * contrastFactor)); //matrix 5x5 float temp = v + 4.f *( v * (s + sqrt2 * s)); //begin 3x3 From b42d9bc164c38172625c3e4f07f79294a126c87e Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 15 May 2018 15:23:33 +0200 Subject: [PATCH 04/85] Misused RL damping adjuster as contrast threshold adjuster. Changed blend function --- rtengine/ipsharpen.cc | 63 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 7 deletions(-) diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 920fcd6ae..b4cfc658a 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -27,6 +27,15 @@ #include "StopWatch.h" using namespace std; +namespace { +float calcBlendFactor(float val, float threshold) { + // sigmoid function + // result is in ]0;1] range + // inflexion point is at (x, y) (threshold, 0.5) + return threshold == 0.f ? 1.f : 1.f / (1.f + xexpf(-8.f * ((val / threshold) * (2.f - threshold) - 1.f ))); +} + +} namespace rtengine { @@ -105,14 +114,55 @@ void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, int W, i tmpI[i] = tmpI[i - 1] + W; } + float *tmpII[H] ALIGNED16; + + tmpII[0] = new float[W * H]; + + for (int i = 1; i < H; i++) { + tmpII[i] = tmpII[i - 1] + W; + } + for (int i = 0; i < H; i++) { for(int j = 0; j < W; j++) { tmpI[i][j] = max(luminance[i][j], 0.f); + tmpII[i][j] = luminance[i][j]; } } + const float contrastThreshold = sharpenParam.deconvdamping / 100.f; + const float contrastFactor = contrastThreshold == 0.f ? 0.f : 1.f / contrastThreshold; + float *LM = new float[W * H]; //allocation for Luminance +#ifdef _OPENMP + #pragma omp parallel +#endif +{ + +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) +#endif + + for(int j = 0; j < H; j++) + for(int i = 0, offset = j * W + i; i < W; i++, offset++) { + LM[offset] = 0.f; // adjust to [0;100] and to RT variables + } + +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) +#endif + + for(int j = 2; j < H - 2; j++) + for(int i = 2, offset = j * W + i; i < W - 2; i++, offset++) { + + float contrast; + contrast = sqrtf(SQR(luminance[j][i+1] / 327.68f - luminance[j][i-1] / 327.68f) + SQR(luminance[j+1][i] / 327.68f - luminance[j-1][i] / 327.68f) + + SQR(luminance[j][i+1] / 327.68f - luminance[j][i-1] / 327.68f) + SQR(luminance[j+1][i] / 327.68f - luminance[j-1][i] / 327.68f)) * 0.0625f; //for 5x5 + + contrast = std::min(contrast, 1.f); + LM[offset] = 1.f - calcBlendFactor(contrast, contrastThreshold); + } +} float damping = sharpenParam.deconvdamping / 5.0; - bool needdamp = sharpenParam.deconvdamping > 0; + bool needdamp = false; //sharpenParam.deconvdamping > 0; double sigma = sharpenParam.deconvradius / scale; #ifdef _OPENMP @@ -149,12 +199,13 @@ void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, int W, i #endif for (int i = 0; i < H; i++) - for (int j = 0; j < W; j++) { - luminance[i][j] = luminance[i][j] * p1 + max(tmpI[i][j], 0.0f) * p2; + for (int j = 0, offset = i * W + j; j < W; j++, offset++) { + luminance[i][j] = intp(LM[offset], tmpII[i][j], luminance[i][j] * p1 + max(tmpI[i][j], 0.0f) * p2); } } // end parallel - + delete [] LM; delete [] tmpI[0]; + delete [] tmpII[0]; } @@ -654,9 +705,7 @@ BENCHFUN + SQR(LM[offset + 2] - LM[offset - 2]) + SQR(LM[offset + 2 * width] - LM[offset - 2 * width])) * 0.0625f; //for 5x5 contrast = std::min(contrast, 1.f); - float blend = 0.f; - if(contrast <= contrastThreshold) - blend = 1.f - (contrast <= contrastThreshold * 0.5f ? 0.f : sqrt((std::min(contrast, contrastThreshold) - contrastThreshold * 0.5f) * 2.f * contrastFactor)); + float blend = 1.f - calcBlendFactor(contrast, contrastThreshold); //matrix 5x5 float temp = v + 4.f *( v * (s + sqrt2 * s)); //begin 3x3 From 528167e5788013753c83152a1dbc23f4cf463fe9 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 16 May 2018 16:40:26 +0200 Subject: [PATCH 05/85] Fixed a bug in calcBlendFactor(..), #4551 --- rtengine/ipsharpen.cc | 95 +++++++++++++++++++++++++++++-------------- 1 file changed, 64 insertions(+), 31 deletions(-) diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index b4cfc658a..32c4924a4 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -23,7 +23,7 @@ #include "rt_math.h" #include "sleef.c" #include "opthelper.h" -#define BENCHMARK +//#define BENCHMARK #include "StopWatch.h" using namespace std; @@ -32,9 +32,19 @@ float calcBlendFactor(float val, float threshold) { // sigmoid function // result is in ]0;1] range // inflexion point is at (x, y) (threshold, 0.5) - return threshold == 0.f ? 1.f : 1.f / (1.f + xexpf(-8.f * ((val / threshold) * (2.f - threshold) - 1.f ))); + return threshold == 0.f ? 1.f : 1.f / (1.f + xexpf(16.f - 16.f * val / threshold)); } - +#ifdef __SSE2__ +vfloat calcBlendFactor(vfloat valv, vfloat thresholdv) { + // sigmoid function + // result is in ]0;1] range + // inflexion point is at (x, y) (threshold, 0.5) + const vfloat onev = F2V(1.f); + const vfloat c16v = F2V(16.f); + vfloat resultv = onev / (onev + xexpf(c16v - c16v * valv / thresholdv)); + return vself(vmaskf_eq(thresholdv, ZEROV), onev, resultv); +} +#endif } namespace rtengine { @@ -105,7 +115,7 @@ void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, int W, i if (sharpenParam.deconvamount < 1) { return; } - +BENCHFUN float *tmpI[H] ALIGNED16; tmpI[0] = new float[W * H]; @@ -128,39 +138,63 @@ void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, int W, i tmpII[i][j] = luminance[i][j]; } } + + // calculate contrast based blend factors to reduce sharpening in regions with low contrast const float contrastThreshold = sharpenParam.deconvdamping / 100.f; - const float contrastFactor = contrastThreshold == 0.f ? 0.f : 1.f / contrastThreshold; - float *LM = new float[W * H]; //allocation for Luminance + float *blend = new float[W * H]; //allocation for blend factor map + + // upper border + for(int j = 0; j < 2; j++) + for(int i = 0, offset = j * W + i; i < W; i++, offset++) { + blend[offset] = 0.f; + } #ifdef _OPENMP #pragma omp parallel #endif { - +#ifdef __SSE2__ + vfloat contrastThresholdv = F2V(contrastThreshold); + vfloat scalev = F2V(0.0625f / 327.68f); +#endif #ifdef _OPENMP - #pragma omp for schedule(dynamic,16) + #pragma omp for schedule(dynamic,16) nowait #endif - for(int j = 0; j < H; j++) + for(int j = 2; j < H - 2; j++) { + blend[j * W] = blend[j * W + 1] = 0.f; + int i = 2; + int offset = j * W + i; +#ifdef __SSE2__ + for(; i < W - 5; i += 4, offset += 4) { + + vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) + + SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev; + + STVFU(blend[offset], calcBlendFactor(contrastv, contrastThresholdv)); + } +#endif + for(; i < W - 2; i++, offset++) { + + float contrast = sqrtf(SQR(luminance[j][i+1] - luminance[j][i-1]) + SQR(luminance[j+1][i] - luminance[j-1][i]) + + SQR(luminance[j][i+2] - luminance[j][i-2]) + SQR(luminance[j+2][i] - luminance[j-2][i])) * 0.0625f / 327.68f; + + blend[offset] = calcBlendFactor(contrast, contrastThreshold); + } + blend[j * W + W - 2] = blend[j * W + W - 1] = 0.f; + } +#ifdef _OPENMP + #pragma omp single +#endif + { + // lower border + for(int j = H - 2; j < H; j++) for(int i = 0, offset = j * W + i; i < W; i++, offset++) { - LM[offset] = 0.f; // adjust to [0;100] and to RT variables - } - -#ifdef _OPENMP - #pragma omp for schedule(dynamic,16) -#endif - - for(int j = 2; j < H - 2; j++) - for(int i = 2, offset = j * W + i; i < W - 2; i++, offset++) { - - float contrast; - contrast = sqrtf(SQR(luminance[j][i+1] / 327.68f - luminance[j][i-1] / 327.68f) + SQR(luminance[j+1][i] / 327.68f - luminance[j-1][i] / 327.68f) - + SQR(luminance[j][i+1] / 327.68f - luminance[j][i-1] / 327.68f) + SQR(luminance[j+1][i] / 327.68f - luminance[j-1][i] / 327.68f)) * 0.0625f; //for 5x5 - - contrast = std::min(contrast, 1.f); - LM[offset] = 1.f - calcBlendFactor(contrast, contrastThreshold); + blend[offset] = 0.f; } + } } + float damping = sharpenParam.deconvdamping / 5.0; bool needdamp = false; //sharpenParam.deconvdamping > 0; double sigma = sharpenParam.deconvradius / scale; @@ -200,10 +234,10 @@ void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, int W, i for (int i = 0; i < H; i++) for (int j = 0, offset = i * W + j; j < W; j++, offset++) { - luminance[i][j] = intp(LM[offset], tmpII[i][j], luminance[i][j] * p1 + max(tmpI[i][j], 0.0f) * p2); + luminance[i][j] = intp(blend[offset], luminance[i][j] * p1 + max(tmpI[i][j], 0.0f) * p2, tmpII[i][j]); } } // end parallel - delete [] LM; + delete [] blend; delete [] tmpI[0]; delete [] tmpII[0]; @@ -630,7 +664,6 @@ void ImProcFunctions::MLmicrocontrast(float** luminance, int W, int H) BENCHFUN const int k = params->sharpenMicro.matrix ? 1 : 2; const float contrastThreshold = params->sharpenMicro.contrast / 100; - const float contrastFactor = contrastThreshold == 0.f ? 0.f : 1.f / contrastThreshold; // k=2 matrix 5x5 k=1 matrix 3x3 const int width = W, height = H; const float uniform = params->sharpenMicro.uniformity; //between 0 to 100 @@ -705,7 +738,7 @@ BENCHFUN + SQR(LM[offset + 2] - LM[offset - 2]) + SQR(LM[offset + 2 * width] - LM[offset - 2 * width])) * 0.0625f; //for 5x5 contrast = std::min(contrast, 1.f); - float blend = 1.f - calcBlendFactor(contrast, contrastThreshold); + float blend = calcBlendFactor(contrast, contrastThreshold); //matrix 5x5 float temp = v + 4.f *( v * (s + sqrt2 * s)); //begin 3x3 @@ -804,7 +837,7 @@ BENCHFUN } else { temp = 0.f; } - luminance[j][i] = intp(blend, luminance[j][i], luminance[j][i] * (temp * temp2 + 1.f)); + luminance[j][i] = intp(blend, luminance[j][i] * (temp * temp2 + 1.f), luminance[j][i]); } else { float temp4 = LM[offset] / tempL; // @@ -855,7 +888,7 @@ BENCHFUN } else { temp = 0.f; } - luminance[j][i] = intp(blend, luminance[j][i], luminance[j][i] / (temp * temp4 + 1.f)); + luminance[j][i] = intp(blend, luminance[j][i] / (temp * temp4 + 1.f), luminance[j][i]); } } } From 66bbab9ae2d9f9cdd1dceeef53710eda0957c1e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Wed, 16 May 2018 19:53:10 +0200 Subject: [PATCH 06/85] Sort file numbers naturally (#2467) --- rtgui/thumbbrowserentrybase.cc | 149 ++++++++++++++++++++++++++++++++- 1 file changed, 148 insertions(+), 1 deletion(-) diff --git a/rtgui/thumbbrowserentrybase.cc b/rtgui/thumbbrowserentrybase.cc index 2fff95904..bc9506e3f 100644 --- a/rtgui/thumbbrowserentrybase.cc +++ b/rtgui/thumbbrowserentrybase.cc @@ -23,6 +23,153 @@ #include "../rtengine/mytime.h" +namespace +{ + +Glib::ustring getPaddedName(const Glib::ustring& name) +{ + enum class State { + OTHER, + NUMBER, + FRACTION + }; + + constexpr unsigned int pad_width = 17; // Must be at least 1 + + Glib::ustring res; + + State state = State::OTHER; + Glib::ustring number; + + for (auto c : name) { + switch (state) { + case State::OTHER: { + switch (c) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': { + number += c; + state = State::NUMBER; + break; + } + + case '.': { + res += c; + state = State::FRACTION; + break; + } + + default: { + res += c; + break; + } + } + break; + } + + case State::NUMBER: { + switch (c) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': { + number += c; + break; + } + + default: { + if (number.size() < pad_width) { + res.append(pad_width - number.size(), '0'); + } + res += number; + res += c; + number.clear(); + + state = + c == '.' + ? State::FRACTION + : State::OTHER; + break; + } + } + break; + } + + case State::FRACTION: { + switch (c) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': { + number += c; + break; + } + + default: { + res += number; + if (!number.empty() && number.size() < pad_width) { + res.append(pad_width - number.size(), '0'); + } + res += c; + number.clear(); + + if (c != '.') { + state = State::OTHER; + } + break; + } + } + break; + } + } + } + + switch (state) { + case State::OTHER: { + break; + } + + case State::NUMBER: { + if (number.size() < pad_width) { + res.append(pad_width - number.size(), '0'); + } + res += number; + break; + } + + case State::FRACTION: { + res += number; + if (!number.empty() && number.size() < pad_width) { + res.append(pad_width - number.size(), '0'); + } + break; + } + } + + return res; +} + +} + ThumbBrowserEntryBase::ThumbBrowserEntryBase (const Glib::ustring& fname) : fnlabw(0), fnlabh(0), @@ -57,7 +204,7 @@ ThumbBrowserEntryBase::ThumbBrowserEntryBase (const Glib::ustring& fname) : bbFramed(false), bbPreview(nullptr), cursor_type(CSUndefined), - collate_name(dispname.casefold().collate_key()), + collate_name(getPaddedName(dispname).casefold_collate_key()), thumbnail(nullptr), filename(fname), shortname(dispname), From 70eefd049b4eb5a50907de65a02f345472583d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Wed, 16 May 2018 20:09:39 +0200 Subject: [PATCH 07/85] Tidy negative number parsing relict --- rtgui/thumbbrowserentrybase.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/thumbbrowserentrybase.cc b/rtgui/thumbbrowserentrybase.cc index bc9506e3f..dbab6837b 100644 --- a/rtgui/thumbbrowserentrybase.cc +++ b/rtgui/thumbbrowserentrybase.cc @@ -34,7 +34,7 @@ Glib::ustring getPaddedName(const Glib::ustring& name) FRACTION }; - constexpr unsigned int pad_width = 17; // Must be at least 1 + constexpr unsigned int pad_width = 16; Glib::ustring res; From 579aae510c8c112f7f40ba525d6f89b9717627ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Fri, 18 May 2018 20:00:40 +0200 Subject: [PATCH 08/85] Consider integers only (#2467) --- rtgui/thumbbrowserentrybase.cc | 56 ++-------------------------------- 1 file changed, 3 insertions(+), 53 deletions(-) diff --git a/rtgui/thumbbrowserentrybase.cc b/rtgui/thumbbrowserentrybase.cc index dbab6837b..34557ccc4 100644 --- a/rtgui/thumbbrowserentrybase.cc +++ b/rtgui/thumbbrowserentrybase.cc @@ -30,8 +30,7 @@ Glib::ustring getPaddedName(const Glib::ustring& name) { enum class State { OTHER, - NUMBER, - FRACTION + NUMBER }; constexpr unsigned int pad_width = 16; @@ -56,13 +55,8 @@ Glib::ustring getPaddedName(const Glib::ustring& name) case '8': case '9': { number += c; - state = State::NUMBER; - break; - } - case '.': { - res += c; - state = State::FRACTION; + state = State::NUMBER; break; } @@ -98,43 +92,7 @@ Glib::ustring getPaddedName(const Glib::ustring& name) res += c; number.clear(); - state = - c == '.' - ? State::FRACTION - : State::OTHER; - break; - } - } - break; - } - - case State::FRACTION: { - switch (c) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': { - number += c; - break; - } - - default: { - res += number; - if (!number.empty() && number.size() < pad_width) { - res.append(pad_width - number.size(), '0'); - } - res += c; - number.clear(); - - if (c != '.') { - state = State::OTHER; - } + state = State::OTHER; break; } } @@ -155,14 +113,6 @@ Glib::ustring getPaddedName(const Glib::ustring& name) res += number; break; } - - case State::FRACTION: { - res += number; - if (!number.empty() && number.size() < pad_width) { - res.append(pad_width - number.size(), '0'); - } - break; - } } return res; From 6a975200078abb25bf0cb6da3e097b5a7f0d112f Mon Sep 17 00:00:00 2001 From: TooWaBoo Date: Sat, 19 May 2018 11:46:07 +0200 Subject: [PATCH 09/85] Update Deutsch locale revised --- rtdata/languages/Deutsch | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index 4fdd0e449..bbe76a991 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -56,6 +56,7 @@ #55 06.04.2018 Erweiterung (TooWaBoo) RT 5.4 #56 27.04.2018 Erweiterung (TooWaBoo) RT 5.4 #57 17.05.2018 Erweiterung (TooWaBoo) RT 5.4 +#58 19.05.2018 Erweiterung (TooWaBoo) RT 5.4 ABOUT_TAB_BUILD;Version ABOUT_TAB_CREDITS;Danksagungen @@ -1339,7 +1340,7 @@ TP_BWMIX_MET;Methode TP_BWMIX_MET_CHANMIX;Kanalmixer TP_BWMIX_MET_DESAT;Entsättigung TP_BWMIX_MET_LUMEQUAL;Luminanz -TP_BWMIX_RGBLABEL;R: %1%% G: %2%% B: %3%% Gesamt: %4%% +TP_BWMIX_RGBLABEL;R: %1%% G: %2%% B: %3%% Gesamt: %4%% TP_BWMIX_RGBLABEL_HINT;RGB-Faktoren\n\nGesamt: Summe aller RGB-Werte.\n- immer 100% im Modus Relativ\n- höher (heller), oder niedriger (dunkler) 100% im Modus Absolut TP_BWMIX_RGB_TOOLTIP;Mischen Sie die Kanäle. Verwenden Sie die Vorgaben zur Orientierung.\nNegative Werte können zu Artefakten führen. TP_BWMIX_SETTING;Voreinstellung @@ -2278,11 +2279,11 @@ ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! -!ADJUSTER_RESET_TO_DEFAULT;Click - reset to default value.\nCtrl+click - reset to initial value. -!GENERAL_RESET;Reset -!HISTORY_MSG_235;B&W - CM - Auto -!HISTORY_MSG_237;B&W - CM -!HISTORY_MSG_273;CT - Color Balance SMH -!HISTORY_MSG_392;W - Residual - Color Balance -!TP_BWMIX_MIXC;Channel Mixer -!TP_BWMIX_NEUTRAL;Reset +ADJUSTER_RESET_TO_DEFAULT;Klick - Auf Standardwert zurücksetzen.\nStrg + Klick - Auf Initialwert zurücksetzen. +GENERAL_RESET;Zurücksetzen +HISTORY_MSG_235;(Schwarz/Weiß)\nAuto-Kanalmixer +HISTORY_MSG_237;(Schwarz/Weiß) - Mixer +HISTORY_MSG_273;(Farbanpassungen)\nFarbausgleich\nRegler zurücksetzen +HISTORY_MSG_392;(Wavelet) - Restbild\nFarbausgleich +TP_BWMIX_MIXC;Kanalmixer +TP_BWMIX_NEUTRAL;Zurücksetzen From 2828e2933dc5bf7e7bd0c1f09593488dded2b886 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 19 May 2018 12:24:29 +0200 Subject: [PATCH 10/85] pixelshift: use auto-calculated ca-correction parameters from first frame for all frames --- rtengine/CA_correct_RT.cc | 73 ++++++++++++++++++++++++++++++-------- rtengine/rawimagesource.cc | 9 +++-- rtengine/rawimagesource.h | 2 +- 3 files changed, 66 insertions(+), 18 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index cc527a891..3712eea22 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -27,7 +27,7 @@ #include "rawimagesource.h" #include "rt_math.h" #include "median.h" - +#include "StopWatch.h" namespace { bool LinEqSolve(int nDim, double* pfMatr, double* pfVect, double* pfSolution) @@ -111,7 +111,7 @@ bool LinEqSolve(int nDim, double* pfMatr, double* pfVect, double* pfSolution) using namespace std; using namespace rtengine; -void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData) +void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer, bool fitParamsIn, bool fitParamsOut, float *buffer, bool freeBuffer) { // multithreaded and vectorized by Ingo Weyrich constexpr int ts = 128; @@ -135,11 +135,13 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const // local variables const int width = W + (W & 1), height = H; - //temporary array to store simple interpolation of G - float *Gtmp = (float (*)) malloc ((height * width) / 2 * sizeof * Gtmp); - // temporary array to avoid race conflicts, only every second pixel needs to be saved here - float *RawDataTmp = (float*) malloc( (height * width) * sizeof(float) / 2); + //temporary array to store simple interpolation of G + if (!buffer) { + buffer = (float (*)) malloc ((height * width) / 2 * sizeof (float) + (height * width) * sizeof(float) / 2); + } + float *Gtmp = buffer; + float *RawDataTmp = buffer + (height * width) / 2; float blockave[2][2] = {{0, 0}, {0, 0}}, blocksqave[2][2] = {{0, 0}, {0, 0}}, blockdenom[2][2] = {{0, 0}, {0, 0}}, blockvar[2][2]; @@ -159,7 +161,17 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const float (*blockshifts)[2][2] = (float (*)[2][2])(blockwt + vblsz * hblsz); double fitparams[2][2][16]; - + const bool fitParamsSet = fitParamsTransfer && fitParamsIn; + if(autoCA && fitParamsSet) { + int index = 0; + for(int c = 0; c < 2; ++c) { + for(int d = 0; d < 2; ++d) { + for(int e = 0; e < 16; ++e) { + fitparams[c][d][e] = fitParamsTransfer[index++]; + } + } + } + } //order of 2d polynomial fit (polyord), and numpar=polyord^2 int polyord = 4, numpar = 16; @@ -186,8 +198,8 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const // assign working space constexpr int buffersize = sizeof(float) * ts * ts + 8 * sizeof(float) * ts * tsh + 8 * 64 + 63; - char *buffer = (char *) malloc(buffersize); - char *data = (char*)( ( uintptr_t(buffer) + uintptr_t(63)) / 64 * 64); + char *bufferThr = (char *) malloc(buffersize); + char *data = (char*)( ( uintptr_t(bufferThr) + uintptr_t(63)) / 64 * 64); // shift the beginning of all arrays but the first by 64 bytes to avoid cache miss conflicts on CPUs which have <=4-way associative L1-Cache @@ -214,12 +226,12 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const float *gshift = rbhpfv; // there is no overlap in buffer usage => share - if (autoCA) { + if (autoCA && !fitParamsSet) { // Main algorithm: Tile loop calculating correction parameters per tile #pragma omp for collapse(2) schedule(dynamic) nowait for (int top = -border ; top < height; top += ts - border2) for (int left = -border; left < width - (W & 1); left += ts - border2) { - memset(buffer, 0, buffersize); + memset(bufferThr, 0, buffersize); const int vblock = ((top + border) / (ts - border2)) + 1; const int hblock = ((left + border) / (ts - border2)) + 1; const int bottom = min(top + ts, height + border); @@ -741,7 +753,6 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const processpasstwo = false; } } - } //fitparams[polyord*i+j] gives the coefficients of (vblock^i hblock^j) in a polynomial fit for i,j<=4 @@ -756,7 +767,7 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const for (int top = -border; top < height; top += ts - border2) for (int left = -border; left < width - (W & 1); left += ts - border2) { - memset(buffer, 0, buffersize); + memset(bufferThr, 0, buffersize); float lblockshifts[2][2]; const int vblock = ((top + border) / (ts - border2)) + 1; const int hblock = ((left + border) / (ts - border2)) + 1; @@ -929,6 +940,25 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const lblockshifts[1][1] = 2 * hfrac * cablue; } else { //CA auto correction; use CA diagnostic pass to set shift parameters + if (fitParamsIn) { + for (int rr = 3; rr < rr1 - 3; rr++) { + for (int cc = 3, indx = rr * ts + cc; cc < cc1 - 3; cc++, indx++) { + int c = FC(rr, cc); + + if (c != 1) { + //compute directional weights using image gradients + float wtu = 1.f / SQR(eps + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr - 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr - 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr - 1) * ts + cc] - rgb[1][(rr - 3) * ts + cc])); + float wtd = 1.f / SQR(eps + fabsf(rgb[1][(rr - 1) * ts + cc] - rgb[1][(rr + 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr + 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr + 3) * ts + cc])); + float wtl = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc - 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc - 2) >> 1]) + fabsf(rgb[1][rr * ts + cc - 1] - rgb[1][rr * ts + cc - 3])); + float wtr = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc - 1] - rgb[1][rr * ts + cc + 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc + 2) >> 1]) + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc + 3])); + + //store in rgb array the interpolated G value at R/B grid points using directional weighted average + rgb[1][indx] = (wtu * rgb[1][indx - v1] + wtd * rgb[1][indx + v1] + wtl * rgb[1][indx - 1] + wtr * rgb[1][indx + 1]) / (wtu + wtd + wtl + wtr); + } + } + } + } + lblockshifts[0][0] = lblockshifts[0][1] = 0; lblockshifts[1][0] = lblockshifts[1][1] = 0; double powVblock = 1.0; @@ -1153,12 +1183,25 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const } // clean up + free(bufferThr); + } + + if(autoCA && fitParamsTransfer && fitParamsOut) { + int index = 0; + for(int c = 0; c < 2; ++c) { + for(int d = 0; d < 2; ++d) { + for(int e = 0; e < 16; ++e) { + fitParamsTransfer[index++] = fitparams[c][d][e]; + } + } + } + } + + if(freeBuffer) { free(buffer); } - free(Gtmp); free(blockwt); - free(RawDataTmp); if(plistener) { plistener->setProgress(1.0); diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 6afde5b67..2020302f5 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2015,9 +2015,14 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le plistener->setProgress (0.0); } if(numFrames == 4) { - for(int i=0; i<4; ++i) { - CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[i]); + StopWatch Stop1("ps ca correction"); + double fitParams[64]; + float *buffer = nullptr; + CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[0], fitParams, false, false, buffer, false); + for(int i = 1; i < 3; ++i) { + CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[i], fitParams, false, false, buffer, false); } + CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[3], fitParams, false, false, buffer); } else { CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, rawData); } diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 04b7396bc..98b8a0602 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -245,7 +245,7 @@ protected: inline void interpolate_row_rb (float* ar, float* ab, float* pg, float* cg, float* ng, int i); inline void interpolate_row_rb_mul_pp (float* ar, float* ab, float* pg, float* cg, float* ng, int i, float r_mul, float g_mul, float b_mul, int x1, int width, int skip); - void CA_correct_RT (const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData); + void CA_correct_RT (const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer = nullptr, bool fitParamsIn = false, bool fitParamsOut = false, float *buffer = nullptr, bool freeBuffer = true); void ddct8x8s(int isgn, float a[8][8]); void processRawWhitepoint (float expos, float preser, array2D &rawData); // exposure before interpolation From 68fabf0be5c7066c9391663b0dc2f53f441b69e3 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 19 May 2018 13:47:44 +0200 Subject: [PATCH 11/85] Fix for last commit --- rtengine/rawimagesource.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 2020302f5..38fccda85 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2018,11 +2018,11 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le StopWatch Stop1("ps ca correction"); double fitParams[64]; float *buffer = nullptr; - CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[0], fitParams, false, false, buffer, false); + CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[0], fitParams, false, true, buffer, false); for(int i = 1; i < 3; ++i) { - CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[i], fitParams, false, false, buffer, false); + CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[i], fitParams, true, false, buffer, false); } - CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[3], fitParams, false, false, buffer); + CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[3], fitParams, true, false, buffer); } else { CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, rawData); } From ac78dd311e5ee97d0cc6d1cc26e29fe1a1d64648 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 20 May 2018 13:59:50 +0200 Subject: [PATCH 12/85] Speedup for ca-correction of pixelshift files, also fixed a memory leak --- rtengine/CA_correct_RT.cc | 161 +++++++++++++++++++------------------ rtengine/rawimagesource.cc | 3 +- rtengine/rawimagesource.h | 2 +- 3 files changed, 83 insertions(+), 83 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 3712eea22..b1f696f5f 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -111,7 +111,7 @@ bool LinEqSolve(int nDim, double* pfMatr, double* pfVect, double* pfSolution) using namespace std; using namespace rtengine; -void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer, bool fitParamsIn, bool fitParamsOut, float *buffer, bool freeBuffer) +float* RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer, bool fitParamsIn, bool fitParamsOut, float *buffer, bool freeBuffer) { // multithreaded and vectorized by Ingo Weyrich constexpr int ts = 128; @@ -124,7 +124,7 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const for(int j = 0; j < 2; j++) if(FC(i, j) == 3) { printf("CA correction supports only RGB Colour filter arrays\n"); - return; + return buffer; } volatile double progress = 0.0; @@ -135,19 +135,6 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const // local variables const int width = W + (W & 1), height = H; - - //temporary array to store simple interpolation of G - if (!buffer) { - buffer = (float (*)) malloc ((height * width) / 2 * sizeof (float) + (height * width) * sizeof(float) / 2); - } - float *Gtmp = buffer; - float *RawDataTmp = buffer + (height * width) / 2; - - float blockave[2][2] = {{0, 0}, {0, 0}}, blocksqave[2][2] = {{0, 0}, {0, 0}}, blockdenom[2][2] = {{0, 0}, {0, 0}}, blockvar[2][2]; - - // Because we can't break parallel processing, we need a switch do handle the errors - bool processpasstwo = true; - constexpr int border = 8; constexpr int border2 = 16; @@ -156,13 +143,27 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const const int vblsz = ceil((float)(height + border2) / (ts - border2) + 2 + vz1); const int hblsz = ceil((float)(width + border2) / (ts - border2) + 2 + hz1); + //temporary array to store simple interpolation of G + if (!buffer) { + buffer = static_cast(malloc ((height * width + vblsz * hblsz * (2 * 2 + 1)) * sizeof(float))); + } + float *Gtmp = buffer; + float *RawDataTmp = buffer + (height * width) / 2; + //block CA shift values and weight assigned to block - float* const blockwt = static_cast(calloc(vblsz * hblsz * (2 * 2 + 1), sizeof(float))); + float *const blockwt = buffer + (height * width); + memset(blockwt, 0, vblsz * hblsz * (2 * 2 + 1) * sizeof(float)); float (*blockshifts)[2][2] = (float (*)[2][2])(blockwt + vblsz * hblsz); + float blockave[2][2] = {{0, 0}, {0, 0}}, blocksqave[2][2] = {{0, 0}, {0, 0}}, blockdenom[2][2] = {{0, 0}, {0, 0}}, blockvar[2][2]; + + // Because we can't break parallel processing, we need a switch do handle the errors + bool processpasstwo = true; + double fitparams[2][2][16]; const bool fitParamsSet = fitParamsTransfer && fitParamsIn; if(autoCA && fitParamsSet) { + // use stored parameters int index = 0; for(int c = 0; c < 2; ++c) { for(int d = 0; d < 2; ++d) { @@ -186,22 +187,18 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const int shifthfloor[3], shiftvfloor[3], shifthceil[3], shiftvceil[3]; - //local quadratic fit to shift data within a tile - float coeff[2][3][2]; - //measured CA shift parameters for a tile - float CAshift[2][2]; //polynomial fit coefficients //residual CA shift amount within a plaquette float shifthfrac[3], shiftvfrac[3]; - //per thread data for evaluation of block CA shift variance - float blockavethr[2][2] = {{0, 0}, {0, 0}}, blocksqavethr[2][2] = {{0, 0}, {0, 0}}, blockdenomthr[2][2] = {{0, 0}, {0, 0}}; // assign working space constexpr int buffersize = sizeof(float) * ts * ts + 8 * sizeof(float) * ts * tsh + 8 * 64 + 63; - char *bufferThr = (char *) malloc(buffersize); - char *data = (char*)( ( uintptr_t(bufferThr) + uintptr_t(63)) / 64 * 64); + constexpr int buffersizePassTwo = sizeof(float) * ts * ts + 4 * sizeof(float) * ts * tsh + 4 * 64 + 63; + char * const bufferThr = (char *) malloc((autoCA && !fitParamsSet) ? buffersize : buffersizePassTwo); - // shift the beginning of all arrays but the first by 64 bytes to avoid cache miss conflicts on CPUs which have <=4-way associative L1-Cache + char * const data = (char*)( ( uintptr_t(bufferThr) + uintptr_t(63)) / 64 * 64); + + // shift the beginning of all arrays but the first by 64 bytes to avoid cache miss conflicts on CPUs which have <= 4-way associative L1-Cache //rgb data in a tile float* rgb[3]; @@ -209,25 +206,29 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const rgb[1] = (float (*)) (data + sizeof(float) * ts * tsh + 1 * 64); rgb[2] = (float (*)) (data + sizeof(float) * (ts * ts + ts * tsh) + 2 * 64); - //high pass filter for R/B in vertical direction - float *rbhpfh = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); - //high pass filter for R/B in horizontal direction - float *rbhpfv = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); - //low pass filter for R/B in horizontal direction - float *rblpfh = (float (*)) (data + 3 * sizeof(float) * ts * ts + 5 * 64); - //low pass filter for R/B in vertical direction - float *rblpfv = (float (*)) (data + 3 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 6 * 64); - //low pass filter for colour differences in horizontal direction - float *grblpfh = (float (*)) (data + 4 * sizeof(float) * ts * ts + 7 * 64); - //low pass filter for colour differences in vertical direction - float *grblpfv = (float (*)) (data + 4 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 8 * 64); - float *grbdiff = rbhpfh; // there is no overlap in buffer usage => share - //green interpolated to optical sample points for R/B - float *gshift = rbhpfv; // there is no overlap in buffer usage => share - - if (autoCA && !fitParamsSet) { + //high pass filter for R/B in vertical direction + float *rbhpfh = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); + //high pass filter for R/B in horizontal direction + float *rbhpfv = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); + //low pass filter for R/B in horizontal direction + float *rblpfh = (float (*)) (data + 3 * sizeof(float) * ts * ts + 5 * 64); + //low pass filter for R/B in vertical direction + float *rblpfv = (float (*)) (data + 3 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 6 * 64); + //low pass filter for colour differences in horizontal direction + float *grblpfh = (float (*)) (data + 4 * sizeof(float) * ts * ts + 7 * 64); + //low pass filter for colour differences in vertical direction + float *grblpfv = (float (*)) (data + 4 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 8 * 64); // Main algorithm: Tile loop calculating correction parameters per tile + + //local quadratic fit to shift data within a tile + float coeff[2][3][2]; + //measured CA shift parameters for a tile + float CAshift[2][2]; + + //per thread data for evaluation of block CA shift variance + float blockavethr[2][2] = {{0, 0}, {0, 0}}, blocksqavethr[2][2] = {{0, 0}, {0, 0}}, blockdenomthr[2][2] = {{0, 0}, {0, 0}}; + #pragma omp for collapse(2) schedule(dynamic) nowait for (int top = -border ; top < height; top += ts - border2) for (int left = -border; left < width - (W & 1); left += ts - border2) { @@ -763,11 +764,14 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const // Main algorithm: Tile loop if(processpasstwo) { + float *grbdiff = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); // there is no overlap in buffer usage => share + //green interpolated to optical sample points for R/B + float *gshift = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); // there is no overlap in buffer usage => share #pragma omp for schedule(dynamic) collapse(2) nowait for (int top = -border; top < height; top += ts - border2) for (int left = -border; left < width - (W & 1); left += ts - border2) { - memset(bufferThr, 0, buffersize); + memset(bufferThr, 0, buffersizePassTwo); float lblockshifts[2][2]; const int vblock = ((top + border) / (ts - border2)) + 1; const int hblock = ((left + border) / (ts - border2)) + 1; @@ -913,25 +917,42 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const //end of border fill // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - if (!autoCA) { + if (!autoCA || fitParamsIn) { +#ifdef __SSE2__ + const vfloat onev = F2V(1.f); + const vfloat epsv = F2V(eps); +#endif + //manual CA correction; use red/blue slider values to set CA shift parameters - for (int rr = 3; rr < rr1 - 3; rr++) - for (int cc = 3, indx = rr * ts + cc; cc < cc1 - 3; cc++, indx++) { - int c = FC(rr, cc); - - if (c != 1) { - //compute directional weights using image gradients - float wtu = 1.f / SQR(eps + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr - 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr - 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr - 1) * ts + cc] - rgb[1][(rr - 3) * ts + cc])); - float wtd = 1.f / SQR(eps + fabsf(rgb[1][(rr - 1) * ts + cc] - rgb[1][(rr + 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr + 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr + 3) * ts + cc])); - float wtl = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc - 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc - 2) >> 1]) + fabsf(rgb[1][rr * ts + cc - 1] - rgb[1][rr * ts + cc - 3])); - float wtr = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc - 1] - rgb[1][rr * ts + cc + 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc + 2) >> 1]) + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc + 3])); - - //store in rgb array the interpolated G value at R/B grid points using directional weighted average - rgb[1][indx] = (wtu * rgb[1][indx - v1] + wtd * rgb[1][indx + v1] + wtl * rgb[1][indx - 1] + wtr * rgb[1][indx + 1]) / (wtu + wtd + wtl + wtr); - } + for (int rr = 3; rr < rr1 - 3; rr++) { + int cc = 3 + FC(rr, 1), c = FC(rr,cc), indx = rr * ts + cc; +#ifdef __SSE2__ + for (; cc < cc1 - 10; cc += 8, indx += 8) { + //compute directional weights using image gradients + vfloat val1v = epsv + vabsf(LC2VFU(rgb[1][(rr + 1) * ts + cc]) - LC2VFU(rgb[1][(rr - 1) * ts + cc])); + vfloat val2v = epsv + vabsf(LC2VFU(rgb[1][indx + 1]) - LC2VFU(rgb[1][indx - 1])); + vfloat wtuv = onev / SQRV(val1v + vabsf(LVFU(rgb[c][(rr * ts + cc) >> 1]) - LVFU(rgb[c][((rr - 2) * ts + cc) >> 1])) + vabsf(LC2VFU(rgb[1][(rr - 1) * ts + cc]) - LC2VFU(rgb[1][(rr - 3) * ts + cc]))); + vfloat wtdv = onev / SQRV(val1v + vabsf(LVFU(rgb[c][(rr * ts + cc) >> 1]) - LVFU(rgb[c][((rr + 2) * ts + cc) >> 1])) + vabsf(LC2VFU(rgb[1][(rr + 1) * ts + cc]) - LC2VFU(rgb[1][(rr + 3) * ts + cc]))); + vfloat wtlv = onev / SQRV(val2v + vabsf(LVFU(rgb[c][indx >> 1]) - LVFU(rgb[c][(indx - 2) >> 1])) + vabsf(LC2VFU(rgb[1][indx - 1]) - LC2VFU(rgb[1][indx - 3]))); + vfloat wtrv = onev / SQRV(val2v + vabsf(LVFU(rgb[c][indx >> 1]) - LVFU(rgb[c][(indx + 2) >> 1])) + vabsf(LC2VFU(rgb[1][indx + 1]) - LC2VFU(rgb[1][indx + 3]))); + //store in rgb array the interpolated G value at R/B grid points using directional weighted average + STC2VFU(rgb[1][indx], (wtuv * LC2VFU(rgb[1][indx - v1]) + wtdv * LC2VFU(rgb[1][indx + v1]) + wtlv * LC2VFU(rgb[1][indx - 1]) + wtrv * LC2VFU(rgb[1][indx + 1])) / (wtuv + wtdv + wtlv + wtrv)); } +#endif + for (; cc < cc1 - 3; cc += 2, indx += 2) { + //compute directional weights using image gradients + float wtu = 1.f / SQR(eps + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr - 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr - 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr - 1) * ts + cc] - rgb[1][(rr - 3) * ts + cc])); + float wtd = 1.f / SQR(eps + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr - 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr + 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr + 3) * ts + cc])); + float wtl = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc - 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc - 2) >> 1]) + fabsf(rgb[1][rr * ts + cc - 1] - rgb[1][rr * ts + cc - 3])); + float wtr = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc - 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc + 2) >> 1]) + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc + 3])); + //store in rgb array the interpolated G value at R/B grid points using directional weighted average + rgb[1][indx] = (wtu * rgb[1][indx - v1] + wtd * rgb[1][indx + v1] + wtl * rgb[1][indx - 1] + wtr * rgb[1][indx + 1]) / (wtu + wtd + wtl + wtr); + } + } + } + if (!autoCA) { float hfrac = -((float)(hblock - 0.5) / (hblsz - 2) - 0.5); float vfrac = -((float)(vblock - 0.5) / (vblsz - 2) - 0.5) * height / width; lblockshifts[0][0] = 2 * vfrac * cared; @@ -940,32 +961,12 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const lblockshifts[1][1] = 2 * hfrac * cablue; } else { //CA auto correction; use CA diagnostic pass to set shift parameters - if (fitParamsIn) { - for (int rr = 3; rr < rr1 - 3; rr++) { - for (int cc = 3, indx = rr * ts + cc; cc < cc1 - 3; cc++, indx++) { - int c = FC(rr, cc); - - if (c != 1) { - //compute directional weights using image gradients - float wtu = 1.f / SQR(eps + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr - 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr - 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr - 1) * ts + cc] - rgb[1][(rr - 3) * ts + cc])); - float wtd = 1.f / SQR(eps + fabsf(rgb[1][(rr - 1) * ts + cc] - rgb[1][(rr + 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr + 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr + 3) * ts + cc])); - float wtl = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc - 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc - 2) >> 1]) + fabsf(rgb[1][rr * ts + cc - 1] - rgb[1][rr * ts + cc - 3])); - float wtr = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc - 1] - rgb[1][rr * ts + cc + 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc + 2) >> 1]) + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc + 3])); - - //store in rgb array the interpolated G value at R/B grid points using directional weighted average - rgb[1][indx] = (wtu * rgb[1][indx - v1] + wtd * rgb[1][indx + v1] + wtl * rgb[1][indx - 1] + wtr * rgb[1][indx + 1]) / (wtu + wtd + wtl + wtr); - } - } - } - } - lblockshifts[0][0] = lblockshifts[0][1] = 0; lblockshifts[1][0] = lblockshifts[1][1] = 0; double powVblock = 1.0; for (int i = 0; i < polyord; i++) { double powHblock = powVblock; for (int j = 0; j < polyord; j++) { - //printf("i= %d j= %d polycoeff= %f \n",i,j,fitparams[0][0][polyord*i+j]); lblockshifts[0][0] += powHblock * fitparams[0][0][polyord * i + j]; lblockshifts[0][1] += powHblock * fitparams[0][1][polyord * i + j]; lblockshifts[1][0] += powHblock * fitparams[1][0][polyord * i + j]; @@ -1187,6 +1188,7 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const } if(autoCA && fitParamsTransfer && fitParamsOut) { + // store calculated parameters int index = 0; for(int c = 0; c < 2; ++c) { for(int d = 0; d < 2; ++d) { @@ -1201,9 +1203,8 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const free(buffer); } - free(blockwt); - if(plistener) { plistener->setProgress(1.0); } + return buffer; } diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 38fccda85..ffcbbf188 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2017,8 +2017,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le if(numFrames == 4) { StopWatch Stop1("ps ca correction"); double fitParams[64]; - float *buffer = nullptr; - CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[0], fitParams, false, true, buffer, false); + float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[0], fitParams, false, true, nullptr, false); for(int i = 1; i < 3; ++i) { CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[i], fitParams, true, false, buffer, false); } diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 98b8a0602..66800b204 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -245,7 +245,7 @@ protected: inline void interpolate_row_rb (float* ar, float* ab, float* pg, float* cg, float* ng, int i); inline void interpolate_row_rb_mul_pp (float* ar, float* ab, float* pg, float* cg, float* ng, int i, float r_mul, float g_mul, float b_mul, int x1, int width, int skip); - void CA_correct_RT (const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer = nullptr, bool fitParamsIn = false, bool fitParamsOut = false, float *buffer = nullptr, bool freeBuffer = true); + float* CA_correct_RT (const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer = nullptr, bool fitParamsIn = false, bool fitParamsOut = false, float * buffer = nullptr, bool freeBuffer = true); void ddct8x8s(int isgn, float a[8][8]); void processRawWhitepoint (float expos, float preser, array2D &rawData); // exposure before interpolation From 1a5545c4619b2a1832a33f0bf913b426778b2427 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 20 May 2018 17:37:42 +0200 Subject: [PATCH 13/85] Added contrast threshold adjuster for sharpening tool, #4551 --- rtdata/languages/default | 1 + rtengine/improcfun.h | 1 - rtengine/ipsharpen.cc | 204 ++++++++++++++++------------------- rtengine/procparams.cc | 4 + rtengine/procparams.h | 1 + rtgui/addsetids.h | 1 + rtgui/batchtoolpanelcoord.cc | 4 +- rtgui/paramsedited.cc | 6 ++ rtgui/paramsedited.h | 1 + rtgui/sharpening.cc | 32 +++++- rtgui/sharpening.h | 4 +- 11 files changed, 136 insertions(+), 123 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 62701b85f..4d9cbe78c 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1936,6 +1936,7 @@ TP_SHARPENEDGE_LABEL;Edges TP_SHARPENEDGE_PASSES;Iterations TP_SHARPENEDGE_THREE;Luminance only TP_SHARPENING_AMOUNT;Amount +TP_SHARPENING_CONTRAST;Contrast threshold TP_SHARPENING_EDRADIUS;Radius TP_SHARPENING_EDTOLERANCE;Edge tolerance TP_SHARPENING_HALOCONTROL;Halo control diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index ae6e3bcaa..cdfdb7b74 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -61,7 +61,6 @@ class ImProcFunctions void sharpenHaloCtrl (float** luminance, float** blurmap, float** base, int W, int H, const SharpeningParams &sharpenParam); void sharpenHaloCtrl (LabImage* lab, float** blurmap, float** base, int W, int H, SharpeningParams &sharpenParam); void sharpenHaloCtrlcam (CieImage* ncie, float** blurmap, float** base, int W, int H); - void dcdamping (float** aI, float** aO, float damping, int W, int H); bool needsCA (); bool needsDistortion (); diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 32c4924a4..26d5e608c 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -20,6 +20,7 @@ #include "improcfun.h" #include "gauss.h" #include "bilateral2.h" +#include "jaggedarray.h" #include "rt_math.h" #include "sleef.c" #include "opthelper.h" @@ -45,16 +46,61 @@ vfloat calcBlendFactor(vfloat valv, vfloat thresholdv) { return vself(vmaskf_eq(thresholdv, ZEROV), onev, resultv); } #endif -} -namespace rtengine + +void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold) { + // upper border + for(int j = 0; j < 2; j++) + for(int i = 0; i < W; ++i) { + blend[j][i] = 0.f; + } + +#ifdef _OPENMP + #pragma omp parallel +#endif { +#ifdef __SSE2__ + vfloat contrastThresholdv = F2V(contrastThreshold); + vfloat scalev = F2V(0.0625f / 327.68f); +#endif +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) nowait +#endif -#undef ABS + for(int j = 2; j < H - 2; ++j) { + blend[j][0] = blend[j][1] = 0.f; + int i = 2; +#ifdef __SSE2__ + for(; i < W - 5; i += 4) { -#define ABS(a) ((a)<0?-(a):(a)) + vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) + + SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev; -extern const Settings* settings; -void ImProcFunctions::dcdamping (float** aI, float** aO, float damping, int W, int H) + STVFU(blend[j][i], calcBlendFactor(contrastv, contrastThresholdv)); + } +#endif + for(; i < W - 2; ++i) { + + float contrast = sqrtf(SQR(luminance[j][i+1] - luminance[j][i-1]) + SQR(luminance[j+1][i] - luminance[j-1][i]) + + SQR(luminance[j][i+2] - luminance[j][i-2]) + SQR(luminance[j+2][i] - luminance[j-2][i])) * 0.0625f / 327.68f; + + blend[j][i] = calcBlendFactor(contrast, contrastThreshold); + } + blend[j][W - 2] = blend[j][W - 1] = 0.f; + } +#ifdef _OPENMP + #pragma omp single +#endif + { + // lower border + for(int j = H - 2; j < H; ++j) + for(int i = 0; i < W; ++i) { + blend[j][i] = 0.f; + } + } +} +} + +void dcdamping (float** aI, float** aO, float damping, int W, int H) { const float dampingFac = -2.0 / (damping * damping); @@ -103,35 +149,35 @@ void ImProcFunctions::dcdamping (float** aI, float** aO, float damping, int W, i } float U = (O * xlogf(I / O) - I + O) * dampingFac; - U = min(U, 1.0f); + U = rtengine::min(U, 1.0f); U = U * U * U * U * (5.f - U * 4.f); aI[i][j] = (O - I) / I * U + 1.f; } } } +} +namespace rtengine +{ + +#undef ABS + +#define ABS(a) ((a)<0?-(a):(a)) + +extern const Settings* settings; + void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, int W, int H, const SharpeningParams &sharpenParam) { if (sharpenParam.deconvamount < 1) { return; } BENCHFUN - float *tmpI[H] ALIGNED16; - - tmpI[0] = new float[W * H]; - - for (int i = 1; i < H; i++) { - tmpI[i] = tmpI[i - 1] + W; - } - - float *tmpII[H] ALIGNED16; - - tmpII[0] = new float[W * H]; - - for (int i = 1; i < H; i++) { - tmpII[i] = tmpII[i - 1] + W; - } + JaggedArray tmpI(W, H); + JaggedArray tmpII(W, H); +#ifdef _OPENMP + #pragma omp parallel for +#endif for (int i = 0; i < H; i++) { for(int j = 0; j < W; j++) { tmpI[i][j] = max(luminance[i][j], 0.f); @@ -140,63 +186,11 @@ BENCHFUN } // calculate contrast based blend factors to reduce sharpening in regions with low contrast - const float contrastThreshold = sharpenParam.deconvdamping / 100.f; - float *blend = new float[W * H]; //allocation for blend factor map - - // upper border - for(int j = 0; j < 2; j++) - for(int i = 0, offset = j * W + i; i < W; i++, offset++) { - blend[offset] = 0.f; - } - -#ifdef _OPENMP - #pragma omp parallel -#endif -{ -#ifdef __SSE2__ - vfloat contrastThresholdv = F2V(contrastThreshold); - vfloat scalev = F2V(0.0625f / 327.68f); -#endif -#ifdef _OPENMP - #pragma omp for schedule(dynamic,16) nowait -#endif - - for(int j = 2; j < H - 2; j++) { - blend[j * W] = blend[j * W + 1] = 0.f; - int i = 2; - int offset = j * W + i; -#ifdef __SSE2__ - for(; i < W - 5; i += 4, offset += 4) { - - vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) + - SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev; - - STVFU(blend[offset], calcBlendFactor(contrastv, contrastThresholdv)); - } -#endif - for(; i < W - 2; i++, offset++) { - - float contrast = sqrtf(SQR(luminance[j][i+1] - luminance[j][i-1]) + SQR(luminance[j+1][i] - luminance[j-1][i]) + - SQR(luminance[j][i+2] - luminance[j][i-2]) + SQR(luminance[j+2][i] - luminance[j-2][i])) * 0.0625f / 327.68f; - - blend[offset] = calcBlendFactor(contrast, contrastThreshold); - } - blend[j * W + W - 2] = blend[j * W + W - 1] = 0.f; - } -#ifdef _OPENMP - #pragma omp single -#endif - { - // lower border - for(int j = H - 2; j < H; j++) - for(int i = 0, offset = j * W + i; i < W; i++, offset++) { - blend[offset] = 0.f; - } - } -} + JaggedArray blend(W, H); + buildBlendMask(luminance, blend, W, H, sharpenParam.contrast / 100.f); float damping = sharpenParam.deconvdamping / 5.0; - bool needdamp = false; //sharpenParam.deconvdamping > 0; + bool needdamp = sharpenParam.deconvdamping > 0; double sigma = sharpenParam.deconvradius / scale; #ifdef _OPENMP @@ -206,22 +200,22 @@ BENCHFUN for (int k = 0; k < sharpenParam.deconviter; k++) { if (!needdamp) { // apply gaussian blur and divide luminance by result of gaussian blur - gaussianBlur (tmpI, tmp, W, H, sigma, nullptr, GAUSS_DIV, luminance); + gaussianBlur(tmpI, tmp, W, H, sigma, nullptr, GAUSS_DIV, luminance); #ifdef _OPENMP #pragma omp for #endif - for (int i = 0; i < H; i++) { - for(int j = 0; j < W; j++) { + for (int i = 0; i < H; ++i) { + for(int j = 0; j < W; ++j) { tmp[i][j] = max(tmp[i][j], 0.f); } } } else { // apply gaussian blur + damping - gaussianBlur (tmpI, tmp, W, H, sigma); - dcdamping (tmp, luminance, damping, W, H); + gaussianBlur(tmpI, tmp, W, H, sigma); + dcdamping(tmp, luminance, damping, W, H); } - gaussianBlur (tmp, tmpI, W, H, sigma, nullptr, GAUSS_MULT); + gaussianBlur(tmp, tmpI, W, H, sigma, nullptr, GAUSS_MULT); } // end for @@ -232,21 +226,17 @@ BENCHFUN #pragma omp for #endif - for (int i = 0; i < H; i++) - for (int j = 0, offset = i * W + j; j < W; j++, offset++) { - luminance[i][j] = intp(blend[offset], luminance[i][j] * p1 + max(tmpI[i][j], 0.0f) * p2, tmpII[i][j]); + for (int i = 0; i < H; ++i) + for (int j = 0; j < W; ++j) { + luminance[i][j] = intp(blend[i][j], luminance[i][j] * p1 + max(tmpI[i][j], 0.0f) * p2, tmpII[i][j]); } } // end parallel - delete [] blend; - delete [] tmpI[0]; - delete [] tmpII[0]; - } void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &sharpenParam) { - if (!sharpenParam.enabled) { + if ((!sharpenParam.enabled) || sharpenParam.amount < 1 || lab->W < 8 || lab->H < 8) { return; } @@ -255,11 +245,6 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s return; } - if ((!sharpenParam.enabled) || sharpenParam.amount < 1 || lab->W < 8 || lab->H < 8) { - return; - } - - // Rest is UNSHARP MASK int W = lab->W, H = lab->H; float** b3 = nullptr; @@ -272,6 +257,10 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s } } + // calculate contrast based blend factors to reduce sharpening in regions with low contrast + JaggedArray blend(W, H); + buildBlendMask(lab->L, blend, W, H, sharpenParam.contrast / 100.f); + #ifdef _OPENMP #pragma omp parallel #endif @@ -303,18 +292,12 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s min(ABS(diff), upperBound), // X axis value = absolute value of the difference, truncated to the max value of this field sharpenParam.amount * diff * 0.01f // Y axis max value ); - lab->L[i][j] = lab->L[i][j] + delta; + lab->L[i][j] = intp(blend[i][j], lab->L[i][j] + delta, lab->L[i][j]); } } else { - float** labCopy = nullptr; - if (!sharpenParam.edgesonly) { // make a deep copy of lab->L - labCopy = new float*[H]; - - for( int i = 0; i < H; i++ ) { - labCopy[i] = new float[W]; - } + JaggedArray labCopy(W, H); #ifdef _OPENMP #pragma omp parallel for @@ -325,18 +308,11 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s labCopy[i][j] = lab->L[i][j]; } - base = labCopy; + sharpenHaloCtrl (lab->L, b2, labCopy, W, H, sharpenParam); + } else { + sharpenHaloCtrl (lab->L, b2, base, W, H, sharpenParam); } - sharpenHaloCtrl (lab->L, b2, base, W, H, sharpenParam); - - if (labCopy) { - for( int i = 0; i < H; i++ ) { - delete[] labCopy[i]; - } - - delete[] labCopy; - } } if (sharpenParam.edgesonly) { diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index db671a8ab..c14dcf886 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -1007,6 +1007,7 @@ void ColorToningParams::getCurves(ColorGradientCurve& colorCurveLUT, OpacityCurv SharpeningParams::SharpeningParams() : enabled(false), + contrast(0.0), radius(0.5), amount(200), threshold(20, 80, 2000, 1200, false), @@ -1027,6 +1028,7 @@ bool SharpeningParams::operator ==(const SharpeningParams& other) const { return enabled == other.enabled + && contrast == other.contrast && radius == other.radius && amount == other.amount && threshold == other.threshold @@ -2853,6 +2855,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo // Sharpening saveToKeyfile(!pedited || pedited->sharpening.enabled, "Sharpening", "Enabled", sharpening.enabled, keyFile); + saveToKeyfile(!pedited || pedited->sharpening.contrast, "Sharpening", "Contrast", sharpening.contrast, keyFile); saveToKeyfile(!pedited || pedited->sharpening.method, "Sharpening", "Method", sharpening.method, keyFile); saveToKeyfile(!pedited || pedited->sharpening.radius, "Sharpening", "Radius", sharpening.radius, keyFile); saveToKeyfile(!pedited || pedited->sharpening.amount, "Sharpening", "Amount", sharpening.amount, keyFile); @@ -3670,6 +3673,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) if (keyFile.has_group ("Sharpening")) { assignFromKeyfile(keyFile, "Sharpening", "Enabled", pedited, sharpening.enabled, pedited->sharpening.enabled); + assignFromKeyfile(keyFile, "Sharpening", "Contrast", pedited, sharpening.contrast, pedited->sharpening.contrast); assignFromKeyfile(keyFile, "Sharpening", "Radius", pedited, sharpening.radius, pedited->sharpening.radius); assignFromKeyfile(keyFile, "Sharpening", "Amount", pedited, sharpening.amount, pedited->sharpening.amount); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index bc2a9d97c..467ecf1e3 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -473,6 +473,7 @@ struct ColorToningParams { */ struct SharpeningParams { bool enabled; + double contrast; double radius; int amount; Threshold threshold; diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index e0e0b20dd..c5913a6e2 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -135,6 +135,7 @@ enum { ADDSET_LOCALCONTRAST_LIGHTNESS, ADDSET_FATTAL_ANCHOR, ADDSET_SHARPENMICRO_CONTRAST, + ADDSET_SHARP_CONTRAST, ADDSET_PARAM_NUM // THIS IS USED AS A DELIMITER!! }; diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index 99c7a089d..ede983324 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -146,7 +146,7 @@ void BatchToolPanelCoordinator::initSession () gradient->setAdjusterBehavior (false, false, false, false); pcvignette->setAdjusterBehavior (false, false, false); cacorrection->setAdjusterBehavior (false); - sharpening->setAdjusterBehavior (false, false, false, false, false, false); + sharpening->setAdjusterBehavior (false, false, false, false, false, false, false); prsharpening->setAdjusterBehavior (false, false, false, false, false, false); sharpenEdge->setAdjusterBehavior (false, false); sharpenMicro->setAdjusterBehavior (false, false, false); @@ -189,7 +189,7 @@ void BatchToolPanelCoordinator::initSession () gradient->setAdjusterBehavior (options.baBehav[ADDSET_GRADIENT_DEGREE], options.baBehav[ADDSET_GRADIENT_FEATHER], options.baBehav[ADDSET_GRADIENT_STRENGTH], options.baBehav[ADDSET_GRADIENT_CENTER]); pcvignette->setAdjusterBehavior (options.baBehav[ADDSET_PCVIGNETTE_STRENGTH], options.baBehav[ADDSET_PCVIGNETTE_FEATHER], options.baBehav[ADDSET_PCVIGNETTE_ROUNDNESS]); cacorrection->setAdjusterBehavior (options.baBehav[ADDSET_CA]); - sharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_RADIUS], options.baBehav[ADDSET_SHARP_AMOUNT], options.baBehav[ADDSET_SHARP_DAMPING], options.baBehav[ADDSET_SHARP_ITER], options.baBehav[ADDSET_SHARP_EDGETOL], options.baBehav[ADDSET_SHARP_HALOCTRL]); + sharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_CONTRAST], options.baBehav[ADDSET_SHARP_RADIUS], options.baBehav[ADDSET_SHARP_AMOUNT], options.baBehav[ADDSET_SHARP_DAMPING], options.baBehav[ADDSET_SHARP_ITER], options.baBehav[ADDSET_SHARP_EDGETOL], options.baBehav[ADDSET_SHARP_HALOCTRL]); prsharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_RADIUS], options.baBehav[ADDSET_SHARP_AMOUNT], options.baBehav[ADDSET_SHARP_DAMPING], options.baBehav[ADDSET_SHARP_ITER], options.baBehav[ADDSET_SHARP_EDGETOL], options.baBehav[ADDSET_SHARP_HALOCTRL]); epd->setAdjusterBehavior (options.baBehav[ADDSET_EPD_STRENGTH], options.baBehav[ADDSET_EPD_GAMMA], options.baBehav[ADDSET_EPD_EDGESTOPPING], options.baBehav[ADDSET_EPD_SCALE], options.baBehav[ADDSET_EPD_REWEIGHTINGITERATES]); fattal->setAdjusterBehavior (options.baBehav[ADDSET_FATTAL_AMOUNT], options.baBehav[ADDSET_FATTAL_THRESHOLD], options.baBehav[ADDSET_FATTAL_ANCHOR]); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 0d3ee8f22..258410773 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -142,6 +142,7 @@ void ParamsEdited::set (bool v) colorToning.labgridBHigh = v; sharpening.enabled = v; + sharpening.contrast = v; sharpening.radius = v; sharpening.amount = v; sharpening.threshold = v; @@ -695,6 +696,7 @@ void ParamsEdited::initFrom (const std::vector sharpenMicro.contrast = sharpenMicro.contrast && p.sharpenMicro.contrast == other.sharpenMicro.contrast; sharpenMicro.uniformity = sharpenMicro.uniformity && p.sharpenMicro.uniformity == other.sharpenMicro.uniformity; sharpening.enabled = sharpening.enabled && p.sharpening.enabled == other.sharpening.enabled; + sharpening.contrast = sharpening.contrast && p.sharpening.contrast == other.sharpening.contrast; sharpening.radius = sharpening.radius && p.sharpening.radius == other.sharpening.radius; sharpening.amount = sharpening.amount && p.sharpening.amount == other.sharpening.amount; sharpening.threshold = sharpening.threshold && p.sharpening.threshold == other.sharpening.threshold; @@ -1578,6 +1580,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten toEdit.sharpening.enabled = mods.sharpening.enabled; } + if (sharpening.contrast) { + toEdit.sharpening.contrast = dontforceSet && options.baBehav[ADDSET_SHARP_CONTRAST] ? toEdit.sharpening.contrast + mods.sharpening.contrast : mods.sharpening.contrast; + } + if (sharpening.radius) { toEdit.sharpening.radius = dontforceSet && options.baBehav[ADDSET_SHARP_RADIUS] ? toEdit.sharpening.radius + mods.sharpening.radius : mods.sharpening.radius; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index e11eb1814..47fb70ef0 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -204,6 +204,7 @@ class SharpeningParamsEdited public: bool enabled; + bool contrast; bool radius; bool amount; bool threshold; diff --git a/rtgui/sharpening.cc b/rtgui/sharpening.cc index 9abfc6de8..005d2dd8f 100644 --- a/rtgui/sharpening.cc +++ b/rtgui/sharpening.cc @@ -16,17 +16,29 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ -#include "sharpening.h" #include +#include "eventmapper.h" +#include "sharpening.h" using namespace rtengine; using namespace rtengine::procparams; Sharpening::Sharpening () : FoldableToolPanel(this, "sharpening", M("TP_SHARPENING_LABEL"), true, true) { + auto m = ProcEventMapper::getInstance(); + EvSharpenContrast = m->newEvent(SHARPENING, "HISTORY_MSG_MICROCONTRAST_CONTRAST"); Gtk::HBox* hb = Gtk::manage (new Gtk::HBox ()); hb->show (); + contrast = Gtk::manage(new Adjuster (M("TP_SHARPENMICRO_CONTRAST"), 0, 100, 1, 0)); + contrast->setAdjusterListener (this); + pack_start(*contrast); + if (contrast->delay < options.adjusterMaxDelay) { + contrast->delay = options.adjusterMaxDelay; + } + + contrast->show(); + Gtk::Label* ml = Gtk::manage (new Gtk::Label (M("TP_SHARPENING_METHOD") + ":")); ml->show (); method = Gtk::manage (new MyComboBoxText ()); @@ -144,6 +156,7 @@ void Sharpening::read (const ProcParams* pp, const ParamsEdited* pedited) disableListener (); if (pedited) { + contrast->setEditedState (pedited->sharpening.contrast ? Edited : UnEdited); amount->setEditedState (pedited->sharpening.amount ? Edited : UnEdited); radius->setEditedState (pedited->sharpening.radius ? Edited : UnEdited); threshold->setEditedState (pedited->sharpening.threshold ? Edited : UnEdited); @@ -172,6 +185,7 @@ void Sharpening::read (const ProcParams* pp, const ParamsEdited* pedited) hcConn.block (false); lastHaloControl = pp->sharpening.halocontrol; + contrast->setValue (pp->sharpening.contrast); amount->setValue (pp->sharpening.amount); radius->setValue (pp->sharpening.radius); threshold->setValue(pp->sharpening.threshold); @@ -213,6 +227,7 @@ void Sharpening::read (const ProcParams* pp, const ParamsEdited* pedited) void Sharpening::write (ProcParams* pp, ParamsEdited* pedited) { + pp->sharpening.contrast = contrast->getValue (); pp->sharpening.amount = (int)amount->getValue(); pp->sharpening.enabled = getEnabled (); pp->sharpening.radius = radius->getValue (); @@ -234,6 +249,7 @@ void Sharpening::write (ProcParams* pp, ParamsEdited* pedited) } if (pedited) { + pedited->sharpening.contrast = contrast->getEditedState (); pedited->sharpening.amount = amount->getEditedState (); pedited->sharpening.radius = radius->getEditedState (); pedited->sharpening.threshold = threshold->getEditedState (); @@ -253,7 +269,7 @@ void Sharpening::write (ProcParams* pp, ParamsEdited* pedited) void Sharpening::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) { - + contrast->setDefault (defParams->sharpening.contrast); amount->setDefault (defParams->sharpening.amount); radius->setDefault (defParams->sharpening.radius); threshold->setDefault (defParams->sharpening.threshold); @@ -266,6 +282,7 @@ void Sharpening::setDefaults (const ProcParams* defParams, const ParamsEdited* p ddamping->setDefault (defParams->sharpening.deconvdamping); if (pedited) { + contrast->setDefaultEditedState (pedited->sharpening.contrast ? Edited : UnEdited); amount->setDefaultEditedState (pedited->sharpening.amount ? Edited : UnEdited); radius->setDefaultEditedState (pedited->sharpening.radius ? Edited : UnEdited); threshold->setDefaultEditedState (pedited->sharpening.threshold ? Edited : UnEdited); @@ -277,6 +294,7 @@ void Sharpening::setDefaults (const ProcParams* defParams, const ParamsEdited* p diter->setDefaultEditedState (pedited->sharpening.deconviter ? Edited : UnEdited); ddamping->setDefaultEditedState (pedited->sharpening.deconvdamping ? Edited : UnEdited); } else { + contrast->setDefaultEditedState (Irrelevant); amount->setDefaultEditedState (Irrelevant); radius->setDefaultEditedState (Irrelevant); threshold->setDefaultEditedState (Irrelevant); @@ -305,7 +323,9 @@ void Sharpening::adjusterChanged (Adjuster* a, double newval) costr = Glib::ustring::format ((int)a->getValue()); } - if (a == amount) { + if (a == contrast) { + listener->panelChanged (EvSharpenContrast, costr); + } else if (a == amount) { listener->panelChanged (EvShrAmount, costr); } else if (a == radius) { listener->panelChanged (EvShrRadius, costr); @@ -451,6 +471,7 @@ void Sharpening::setBatchMode (bool batchMode) edgebin->pack_start (*edgebox); pack_start (*rld); + contrast->showEditedCB (); radius->showEditedCB (); amount->showEditedCB (); threshold->showEditedCB (); @@ -464,9 +485,10 @@ void Sharpening::setBatchMode (bool batchMode) method->append (M("GENERAL_UNCHANGED")); } -void Sharpening::setAdjusterBehavior (bool radiusadd, bool amountadd, bool dampingadd, bool iteradd, bool edgetoladd, bool haloctrladd) +void Sharpening::setAdjusterBehavior (bool contrastadd, bool radiusadd, bool amountadd, bool dampingadd, bool iteradd, bool edgetoladd, bool haloctrladd) { + contrast->setAddMode(contrastadd); radius->setAddMode(radiusadd); dradius->setAddMode(radiusadd); amount->setAddMode(amountadd); @@ -480,7 +502,7 @@ void Sharpening::setAdjusterBehavior (bool radiusadd, bool amountadd, bool dampi void Sharpening::trimValues (rtengine::procparams::ProcParams* pp) { - + contrast->trimValue(pp->sharpening.contrast); radius->trimValue(pp->sharpening.radius); dradius->trimValue(pp->sharpening.deconvradius); amount->trimValue(pp->sharpening.amount); diff --git a/rtgui/sharpening.h b/rtgui/sharpening.h index 2901036f5..9bcbbbc20 100644 --- a/rtgui/sharpening.h +++ b/rtgui/sharpening.h @@ -28,6 +28,7 @@ class Sharpening : public ToolParamBlock, public ThresholdAdjusterListener, publ { protected: + Adjuster* contrast; MyComboBoxText* method; Adjuster* dradius; Adjuster* damount; @@ -53,6 +54,7 @@ protected: bool lastHaloControl; sigc::connection hcConn; + rtengine::ProcEvent EvSharpenContrast; public: Sharpening (); @@ -70,7 +72,7 @@ public: void halocontrol_toggled (); void method_changed (); - void setAdjusterBehavior (bool radiusadd, bool amountadd, bool dampingadd, bool iteradd, bool edgetoladd, bool haloctrladd); + void setAdjusterBehavior (bool contrastadd, bool radiusadd, bool amountadd, bool dampingadd, bool iteradd, bool edgetoladd, bool haloctrladd); void trimValues (rtengine::procparams::ProcParams* pp); }; From 2d3148b9622d4fc0f7a6f387a1c428ce290e91c7 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 20 May 2018 23:42:42 +0200 Subject: [PATCH 14/85] Fixes some things @Floessie suggested in code review --- rtengine/CA_correct_RT.cc | 1 + rtengine/rawimagesource.cc | 4 ++-- rtengine/rawimagesource.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index b1f696f5f..a2f34584f 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -1201,6 +1201,7 @@ float* RawImageSource::CA_correct_RT(const bool autoCA, const double cared, cons if(freeBuffer) { free(buffer); + buffer = nullptr; } if(plistener) { diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index ffcbbf188..755420817 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2021,9 +2021,9 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le for(int i = 1; i < 3; ++i) { CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[i], fitParams, true, false, buffer, false); } - CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[3], fitParams, true, false, buffer); + CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[3], fitParams, true, false, buffer, true); } else { - CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, rawData); + CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, rawData, nullptr, false, false, nullptr, true); } } diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 66800b204..0512af790 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -245,7 +245,7 @@ protected: inline void interpolate_row_rb (float* ar, float* ab, float* pg, float* cg, float* ng, int i); inline void interpolate_row_rb_mul_pp (float* ar, float* ab, float* pg, float* cg, float* ng, int i, float r_mul, float g_mul, float b_mul, int x1, int width, int skip); - float* CA_correct_RT (const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer = nullptr, bool fitParamsIn = false, bool fitParamsOut = false, float * buffer = nullptr, bool freeBuffer = true); + float* CA_correct_RT (const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer, bool fitParamsIn, bool fitParamsOut, float * buffer, bool freeBuffer); void ddct8x8s(int isgn, float a[8][8]); void processRawWhitepoint (float expos, float preser, array2D &rawData); // exposure before interpolation From 8b5a96c1aa97061720e39467050150b11564932f Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Mon, 21 May 2018 10:43:10 +0200 Subject: [PATCH 15/85] Fixed typo in language files --- rtdata/languages/Catala | 2 +- rtdata/languages/Chinese (Simplified) | 2 +- rtdata/languages/Chinese (Traditional) | 2 +- rtdata/languages/Dansk | 2 +- rtdata/languages/English (UK) | 2 +- rtdata/languages/English (US) | 2 +- rtdata/languages/Euskara | 2 +- rtdata/languages/Greek | 2 +- rtdata/languages/Hebrew | 2 +- rtdata/languages/Latvian | 2 +- rtdata/languages/Magyar | 2 +- rtdata/languages/Norsk BM | 2 +- rtdata/languages/Portugues (Brasil) | 2 +- rtdata/languages/Slovak | 2 +- rtdata/languages/Suomi | 2 +- rtdata/languages/Turkish | 2 +- rtdata/languages/default | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index 14992e3aa..8ceab1e6c 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -1630,7 +1630,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index d896db483..ff4df8448 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -1592,7 +1592,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional) index 451e4ff23..b4a3207da 100644 --- a/rtdata/languages/Chinese (Traditional) +++ b/rtdata/languages/Chinese (Traditional) @@ -1431,7 +1431,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index f83f38544..ddeea3acd 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -1428,7 +1428,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index 63e6255d9..d3a4e4df9 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -59,7 +59,7 @@ TP_BWMIX_FILTER_TOOLTIP;The colour filter simulates shots taken with a coloured TP_BWMIX_RGB_TOOLTIP;Mix the RGB channels. Use presets for guidance.\nPay attention to negative values that may cause artifacts or erratic behaviour. TP_COLORAPP_ALGO_QM;Brightness + Colourfulness (QM) TP_COLORAPP_BADPIXSL_TOOLTIP;Suppression of hot/bad (brightly coloured) pixels.\n0 = No effect\n1 = Median\n2 = Gaussian.\nAlternatively, adjust the image to avoid very dark shadows.\n\nThese artifacts are due to limitations of CIECAM02. -TP_COLORAPP_CHROMA_M;Colourfulnes (M) +TP_COLORAPP_CHROMA_M;Colourfulness (M) TP_COLORAPP_CHROMA_M_TOOLTIP;Colourfulness in CIECAM02 differs from L*a*b* and RGB colourfulness. TP_COLORAPP_CURVEEDITOR3;Colour curve TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Adjust either chroma, saturation or colourfulness.\n\nShows the histogram of chromaticity (L*a*b*) before CIECAM02.\nIf the "Show CIECAM02 output histograms in curves" checkbox is enabled, shows the histogram of C, s or M after CIECAM02.\n\nC, s and M are not shown in the main histogram panel.\nFor final output refer to the main histogram panel. diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index 82e450c12..7a786eaba 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -1342,7 +1342,7 @@ !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara index 9980cba5e..d396c0a9b 100644 --- a/rtdata/languages/Euskara +++ b/rtdata/languages/Euskara @@ -1429,7 +1429,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek index 4ed8e22bd..adbc57d4c 100644 --- a/rtdata/languages/Greek +++ b/rtdata/languages/Greek @@ -1428,7 +1428,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew index af3650ee1..a9dd7f8ec 100644 --- a/rtdata/languages/Hebrew +++ b/rtdata/languages/Hebrew @@ -1429,7 +1429,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian index bba1de22f..fcc3e0bbb 100644 --- a/rtdata/languages/Latvian +++ b/rtdata/languages/Latvian @@ -1429,7 +1429,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index 097d5e312..2d0747f71 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -1581,7 +1581,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM index 5c27a1a57..9af3715a0 100644 --- a/rtdata/languages/Norsk BM +++ b/rtdata/languages/Norsk BM @@ -1428,7 +1428,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index 907d52696..f86b278e6 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -1344,7 +1344,7 @@ SAVEDLG_TIFFUNCOMPRESSED;TIFF não comprimido !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak index 83c1bfce3..0fbcfd64c 100644 --- a/rtdata/languages/Slovak +++ b/rtdata/languages/Slovak @@ -1468,7 +1468,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi index d14eed4db..ef7534566 100644 --- a/rtdata/languages/Suomi +++ b/rtdata/languages/Suomi @@ -1429,7 +1429,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish index e4a32931b..a0c19c4ec 100644 --- a/rtdata/languages/Turkish +++ b/rtdata/languages/Turkish @@ -1428,7 +1428,7 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_COLORAPP_BRIGHT;Brightness (Q) !TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. !TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulnes (M) +!TP_COLORAPP_CHROMA_M;Colorfulness (M) !TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. diff --git a/rtdata/languages/default b/rtdata/languages/default index e0f03e53b..c081ff3da 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1341,7 +1341,7 @@ TP_COLORAPP_BADPIXSL_TOOLTIP;Suppression of hot/bad (brightly colored) pixels.\n TP_COLORAPP_BRIGHT;Brightness (Q) TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. TP_COLORAPP_CHROMA;Chroma (C) -TP_COLORAPP_CHROMA_M;Colorfulnes (M) +TP_COLORAPP_CHROMA_M;Colorfulness (M) TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. TP_COLORAPP_CHROMA_S;Saturation (S) TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. From 6f6dafe214670fc3f28a2dc121378d8864ccb895 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 21 May 2018 16:10:30 +0200 Subject: [PATCH 16/85] Added Contrast threshold adjuster to PR Sharpening, fixed some bugs, #4551 --- rtdata/languages/default | 4 +- rtengine/improcfun.h | 4 - rtengine/ipsharpen.cc | 150 +++++++++++++++++------------------ rtengine/procparams.cc | 3 + rtgui/batchtoolpanelcoord.cc | 4 +- rtgui/preferences.cc | 1 + rtgui/prsharpening.cc | 27 ++++++- rtgui/prsharpening.h | 5 +- rtgui/sharpening.cc | 4 +- 9 files changed, 113 insertions(+), 89 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index ce41aa858..b24c9a557 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -394,7 +394,6 @@ HISTORY_MSG_142;ES - Iterations HISTORY_MSG_143;ES - Quantity HISTORY_MSG_144;Microcontrast - Quantity HISTORY_MSG_145;Microcontrast - Uniformity -HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold HISTORY_MSG_146;Edge sharpening HISTORY_MSG_147;ES - Luminance only HISTORY_MSG_148;Microcontrast @@ -735,8 +734,11 @@ HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius HISTORY_MSG_METADATA_MODE;Metadata copy mode +HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index cdfdb7b74..135ab26ee 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -58,10 +58,6 @@ class ImProcFunctions void transformGeneral(bool highQuality, Imagefloat *original, Imagefloat *transformed, int cx, int cy, int sx, int sy, int oW, int oH, int fW, int fH, const LensCorrection *pLCPMap); void transformLCPCAOnly(Imagefloat *original, Imagefloat *transformed, int cx, int cy, const LensCorrection *pLCPMap); - void sharpenHaloCtrl (float** luminance, float** blurmap, float** base, int W, int H, const SharpeningParams &sharpenParam); - void sharpenHaloCtrl (LabImage* lab, float** blurmap, float** base, int W, int H, SharpeningParams &sharpenParam); - void sharpenHaloCtrlcam (CieImage* ncie, float** blurmap, float** base, int W, int H); - bool needsCA (); bool needsDistortion (); bool needsRotation (); diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 26d5e608c..a3ae53747 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -100,6 +100,69 @@ void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int } } +void sharpenHaloCtrl (float** luminance, float** blurmap, float** base, float** blend, int W, int H, const SharpeningParams &sharpenParam) +{ + + float scale = (100.f - sharpenParam.halocontrol_amount) * 0.01f; + float sharpFac = sharpenParam.amount * 0.01f; + float** nL = base; + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = 2; i < H - 2; i++) { + float max1 = 0, max2 = 0, min1 = 0, min2 = 0; + + for (int j = 2; j < W - 2; j++) { + // compute 3 iterations, only forward + float np1 = 2.f * (nL[i - 2][j] + nL[i - 2][j + 1] + nL[i - 2][j + 2] + nL[i - 1][j] + nL[i - 1][j + 1] + nL[i - 1][j + 2] + nL[i] [j] + nL[i] [j + 1] + nL[i] [j + 2]) / 27.f + nL[i - 1][j + 1] / 3.f; + float np2 = 2.f * (nL[i - 1][j] + nL[i - 1][j + 1] + nL[i - 1][j + 2] + nL[i] [j] + nL[i] [j + 1] + nL[i] [j + 2] + nL[i + 1][j] + nL[i + 1][j + 1] + nL[i + 1][j + 2]) / 27.f + nL[i] [j + 1] / 3.f; + float np3 = 2.f * (nL[i] [j] + nL[i] [j + 1] + nL[i] [j + 2] + nL[i + 1][j] + nL[i + 1][j + 1] + nL[i + 1][j + 2] + nL[i + 2][j] + nL[i + 2][j + 1] + nL[i + 2][j + 2]) / 27.f + nL[i + 1][j + 1] / 3.f; + + // Max/Min of all these deltas and the last two max/min + float maxn = rtengine::max(np1, np2, np3); + float minn = rtengine::min(np1, np2, np3); + float max_ = rtengine::max(max1, max2, maxn); + float min_ = rtengine::min(min1, min2, minn); + + // Shift the queue + max1 = max2; + max2 = maxn; + min1 = min2; + min2 = minn; + float labL = luminance[i][j]; + + if (max_ < labL) { + max_ = labL; + } + + if (min_ > labL) { + min_ = labL; + } + + // deviation from the environment as measurement + float diff = nL[i][j] - blurmap[i][j]; + + constexpr float upperBound = 2000.f; // WARNING: Duplicated value, it's baaaaaad ! + float delta = sharpenParam.threshold.multiply( + rtengine::min(fabsf(diff), upperBound), // X axis value = absolute value of the difference + sharpFac * diff // Y axis max value = sharpening.amount * signed difference + ); + float newL = labL + delta; + + // applying halo control + if (newL > max_) { + newL = max_ + (newL - max_) * scale; + } else if (newL < min_) { + newL = min_ - (min_ - newL) * scale; + } + + luminance[i][j] = intp(blend[i][j], newL, luminance[i][j]); + } + } +} + void dcdamping (float** aI, float** aO, float damping, int W, int H) { @@ -160,10 +223,6 @@ void dcdamping (float** aI, float** aO, float damping, int W, int H) namespace rtengine { -#undef ABS - -#define ABS(a) ((a)<0?-(a):(a)) - extern const Settings* settings; void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, int W, int H, const SharpeningParams &sharpenParam) @@ -286,10 +345,10 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s for (int i = 0; i < H; i++) for (int j = 0; j < W; j++) { - const float upperBound = 2000.f; // WARNING: Duplicated value, it's baaaaaad ! + constexpr float upperBound = 2000.f; // WARNING: Duplicated value, it's baaaaaad ! float diff = base[i][j] - b2[i][j]; float delta = sharpenParam.threshold.multiply( - min(ABS(diff), upperBound), // X axis value = absolute value of the difference, truncated to the max value of this field + min(fabsf(diff), upperBound), // X axis value = absolute value of the difference, truncated to the max value of this field sharpenParam.amount * diff * 0.01f // Y axis max value ); lab->L[i][j] = intp(blend[i][j], lab->L[i][j] + delta, lab->L[i][j]); @@ -308,9 +367,9 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s labCopy[i][j] = lab->L[i][j]; } - sharpenHaloCtrl (lab->L, b2, labCopy, W, H, sharpenParam); + sharpenHaloCtrl (lab->L, b2, labCopy, blend, W, H, sharpenParam); } else { - sharpenHaloCtrl (lab->L, b2, base, W, H, sharpenParam); + sharpenHaloCtrl (lab->L, b2, base, blend, W, H, sharpenParam); } } @@ -324,69 +383,6 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s } } -void ImProcFunctions::sharpenHaloCtrl (float** luminance, float** blurmap, float** base, int W, int H, const SharpeningParams &sharpenParam) -{ - - float scale = (100.f - sharpenParam.halocontrol_amount) * 0.01f; - float sharpFac = sharpenParam.amount * 0.01f; - float** nL = base; - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int i = 2; i < H - 2; i++) { - float max1 = 0, max2 = 0, min1 = 0, min2 = 0; - - for (int j = 2; j < W - 2; j++) { - // compute 3 iterations, only forward - float np1 = 2.f * (nL[i - 2][j] + nL[i - 2][j + 1] + nL[i - 2][j + 2] + nL[i - 1][j] + nL[i - 1][j + 1] + nL[i - 1][j + 2] + nL[i] [j] + nL[i] [j + 1] + nL[i] [j + 2]) / 27.f + nL[i - 1][j + 1] / 3.f; - float np2 = 2.f * (nL[i - 1][j] + nL[i - 1][j + 1] + nL[i - 1][j + 2] + nL[i] [j] + nL[i] [j + 1] + nL[i] [j + 2] + nL[i + 1][j] + nL[i + 1][j + 1] + nL[i + 1][j + 2]) / 27.f + nL[i] [j + 1] / 3.f; - float np3 = 2.f * (nL[i] [j] + nL[i] [j + 1] + nL[i] [j + 2] + nL[i + 1][j] + nL[i + 1][j + 1] + nL[i + 1][j + 2] + nL[i + 2][j] + nL[i + 2][j + 1] + nL[i + 2][j + 2]) / 27.f + nL[i + 1][j + 1] / 3.f; - - // Max/Min of all these deltas and the last two max/min - float maxn = max(np1, np2, np3); - float minn = min(np1, np2, np3); - float max_ = max(max1, max2, maxn); - float min_ = min(min1, min2, minn); - - // Shift the queue - max1 = max2; - max2 = maxn; - min1 = min2; - min2 = minn; - float labL = luminance[i][j]; - - if (max_ < labL) { - max_ = labL; - } - - if (min_ > labL) { - min_ = labL; - } - - // deviation from the environment as measurement - float diff = nL[i][j] - blurmap[i][j]; - - const float upperBound = 2000.f; // WARNING: Duplicated value, it's baaaaaad ! - float delta = sharpenParam.threshold.multiply( - min(ABS(diff), upperBound), // X axis value = absolute value of the difference - sharpFac * diff // Y axis max value = sharpening.amount * signed difference - ); - float newL = labL + delta; - - // applying halo control - if (newL > max_) { - newL = max_ + (newL - max_) * scale; - } else if (newL < min_) { - newL = min_ - (min_ - newL) * scale; - } - - luminance[i][j] = newL; - } - } -} - // To the extent possible under law, Manuel Llorens // has waived all copyright and related or neighboring rights to this work. // This work is published from: Spain. @@ -906,6 +902,10 @@ void ImProcFunctions::sharpeningcam (CieImage* ncie, float** b2) } } + // calculate contrast based blend factors to reduce sharpening in regions with low contrast + JaggedArray blend(W, H); + buildBlendMask(ncie->sh_p, blend, W, H, params->sharpening.contrast / 100.f); + #ifdef _OPENMP #pragma omp parallel #endif @@ -932,15 +932,15 @@ void ImProcFunctions::sharpeningcam (CieImage* ncie, float** b2) for (int i = 0; i < H; i++) for (int j = 0; j < W; j++) { - const float upperBound = 2000.f; // WARNING: Duplicated value, it's baaaaaad ! + constexpr float upperBound = 2000.f; // WARNING: Duplicated value, it's baaaaaad ! float diff = base[i][j] - b2[i][j]; float delta = params->sharpening.threshold.multiply( - min(ABS(diff), upperBound), // X axis value = absolute value of the difference, truncated to the max value of this field + min(fabsf(diff), upperBound), // X axis value = absolute value of the difference, truncated to the max value of this field params->sharpening.amount * diff * 0.01f // Y axis max value ); if(ncie->J_p[i][j] > 8.0f && ncie->J_p[i][j] < 92.0f) { - ncie->sh_p[i][j] = ncie->sh_p[i][j] + delta; + ncie->sh_p[i][j] = intp(blend[i][j], ncie->sh_p[i][j] + delta, ncie->sh_p[i][j]); } } } else { @@ -966,7 +966,7 @@ void ImProcFunctions::sharpeningcam (CieImage* ncie, float** b2) base = ncieCopy; } - sharpenHaloCtrl (ncie->sh_p, b2, base, W, H, params->sharpening); + sharpenHaloCtrl (ncie->sh_p, b2, base, blend, W, H, params->sharpening); if(ncieCopy) { for( int i = 0; i < H; i++ ) { diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index c14dcf886..ff783369b 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2600,6 +2600,7 @@ void ProcParams::setDefaults () sharpening = SharpeningParams(); prsharpening = SharpeningParams(); + prsharpening.contrast = 0.0; prsharpening.method = "rld"; prsharpening.deconvamount = 100; prsharpening.deconvradius = 0.45; @@ -3095,6 +3096,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo // Post resize sharpening saveToKeyfile(!pedited || pedited->prsharpening.enabled, "PostResizeSharpening", "Enabled", prsharpening.enabled, keyFile); + saveToKeyfile(!pedited || pedited->prsharpening.contrast, "PostResizeSharpening", "Contrast", prsharpening.contrast, keyFile); saveToKeyfile(!pedited || pedited->prsharpening.method, "PostResizeSharpening", "Method", prsharpening.method, keyFile); saveToKeyfile(!pedited || pedited->prsharpening.radius, "PostResizeSharpening", "Radius", prsharpening.radius, keyFile); saveToKeyfile(!pedited || pedited->prsharpening.amount, "PostResizeSharpening", "Amount", prsharpening.amount, keyFile); @@ -4081,6 +4083,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) if (keyFile.has_group ("PostResizeSharpening")) { assignFromKeyfile(keyFile, "PostResizeSharpening", "Enabled", pedited, prsharpening.enabled, pedited->prsharpening.enabled); + assignFromKeyfile(keyFile, "PostResizeSharpening", "Contrast", pedited, prsharpening.contrast, pedited->prsharpening.contrast); assignFromKeyfile(keyFile, "PostResizeSharpening", "Radius", pedited, prsharpening.radius, pedited->prsharpening.radius); assignFromKeyfile(keyFile, "PostResizeSharpening", "Amount", pedited, prsharpening.amount, pedited->prsharpening.amount); diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index ede983324..856f3a112 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -147,7 +147,7 @@ void BatchToolPanelCoordinator::initSession () pcvignette->setAdjusterBehavior (false, false, false); cacorrection->setAdjusterBehavior (false); sharpening->setAdjusterBehavior (false, false, false, false, false, false, false); - prsharpening->setAdjusterBehavior (false, false, false, false, false, false); + prsharpening->setAdjusterBehavior (false, false, false, false, false, false, false); sharpenEdge->setAdjusterBehavior (false, false); sharpenMicro->setAdjusterBehavior (false, false, false); icm->setAdjusterBehavior (false, false); @@ -190,7 +190,7 @@ void BatchToolPanelCoordinator::initSession () pcvignette->setAdjusterBehavior (options.baBehav[ADDSET_PCVIGNETTE_STRENGTH], options.baBehav[ADDSET_PCVIGNETTE_FEATHER], options.baBehav[ADDSET_PCVIGNETTE_ROUNDNESS]); cacorrection->setAdjusterBehavior (options.baBehav[ADDSET_CA]); sharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_CONTRAST], options.baBehav[ADDSET_SHARP_RADIUS], options.baBehav[ADDSET_SHARP_AMOUNT], options.baBehav[ADDSET_SHARP_DAMPING], options.baBehav[ADDSET_SHARP_ITER], options.baBehav[ADDSET_SHARP_EDGETOL], options.baBehav[ADDSET_SHARP_HALOCTRL]); - prsharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_RADIUS], options.baBehav[ADDSET_SHARP_AMOUNT], options.baBehav[ADDSET_SHARP_DAMPING], options.baBehav[ADDSET_SHARP_ITER], options.baBehav[ADDSET_SHARP_EDGETOL], options.baBehav[ADDSET_SHARP_HALOCTRL]); + prsharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_CONTRAST], options.baBehav[ADDSET_SHARP_RADIUS], options.baBehav[ADDSET_SHARP_AMOUNT], options.baBehav[ADDSET_SHARP_DAMPING], options.baBehav[ADDSET_SHARP_ITER], options.baBehav[ADDSET_SHARP_EDGETOL], options.baBehav[ADDSET_SHARP_HALOCTRL]); epd->setAdjusterBehavior (options.baBehav[ADDSET_EPD_STRENGTH], options.baBehav[ADDSET_EPD_GAMMA], options.baBehav[ADDSET_EPD_EDGESTOPPING], options.baBehav[ADDSET_EPD_SCALE], options.baBehav[ADDSET_EPD_REWEIGHTINGITERATES]); fattal->setAdjusterBehavior (options.baBehav[ADDSET_FATTAL_AMOUNT], options.baBehav[ADDSET_FATTAL_THRESHOLD], options.baBehav[ADDSET_FATTAL_ANCHOR]); localContrast->setAdjusterBehavior(options.baBehav[ADDSET_LOCALCONTRAST_RADIUS], options.baBehav[ADDSET_LOCALCONTRAST_AMOUNT], options.baBehav[ADDSET_LOCALCONTRAST_DARKNESS], options.baBehav[ADDSET_LOCALCONTRAST_LIGHTNESS]); diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index db2deada7..79cc6fd4c 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -225,6 +225,7 @@ Gtk::Widget* Preferences::getBatchProcPanel () mi = behModel->append (); // Used for both Resize and Post-Resize sharpening mi->set_value (behavColumns.label, M ("TP_SHARPENING_LABEL")); + appendBehavList (mi, M ("TP_SHARPENING_CONTRAST"), ADDSET_SHARP_CONTRAST, false); appendBehavList (mi, M ("TP_SHARPENING_RADIUS"), ADDSET_SHARP_RADIUS, false); appendBehavList (mi, M ("TP_SHARPENING_AMOUNT"), ADDSET_SHARP_AMOUNT, false); appendBehavList (mi, M ("TP_SHARPENING_RLD_DAMPING"), ADDSET_SHARP_DAMPING, false); diff --git a/rtgui/prsharpening.cc b/rtgui/prsharpening.cc index 94034b471..bafc8446d 100644 --- a/rtgui/prsharpening.cc +++ b/rtgui/prsharpening.cc @@ -16,8 +16,9 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ -#include "prsharpening.h" #include +#include "eventmapper.h" +#include "prsharpening.h" using namespace rtengine; using namespace rtengine::procparams; @@ -25,6 +26,9 @@ using namespace rtengine::procparams; PrSharpening::PrSharpening () : FoldableToolPanel(this, "prsharpening", M("TP_PRSHARPENING_LABEL"), false, true) { + auto m = ProcEventMapper::getInstance(); + EvPrShrContrast = m->newEvent(RESIZE, "HISTORY_MSG_PRSHARPEN_CONTRAST"); + std::vector milestones; milestones.push_back( GradientMilestone(0.0, 0.0, 0.0, 0.0) ); milestones.push_back( GradientMilestone(1.0, 1.0, 1.0, 1.0) ); @@ -33,6 +37,11 @@ PrSharpening::PrSharpening () : FoldableToolPanel(this, "prsharpening", M("TP_PR Gtk::HBox* hb = Gtk::manage (new Gtk::HBox ()); hb->show (); + contrast = Gtk::manage(new Adjuster (M("TP_SHARPENING_CONTRAST"), 0, 100, 1, 0)); + contrast->setAdjusterListener (this); + pack_start(*contrast); + contrast->show(); + Gtk::Label* ml = Gtk::manage (new Gtk::Label (M("TP_SHARPENING_METHOD") + ":")); ml->show (); method = Gtk::manage (new MyComboBoxText ()); @@ -150,6 +159,7 @@ void PrSharpening::read (const ProcParams* pp, const ParamsEdited* pedited) disableListener (); if (pedited) { + contrast->setEditedState (pedited->prsharpening.contrast ? Edited : UnEdited); amount->setEditedState (pedited->prsharpening.amount ? Edited : UnEdited); radius->setEditedState (pedited->prsharpening.radius ? Edited : UnEdited); threshold->setEditedState (pedited->prsharpening.threshold ? Edited : UnEdited); @@ -178,6 +188,7 @@ void PrSharpening::read (const ProcParams* pp, const ParamsEdited* pedited) hcConn.block (false); lastHaloControl = pp->prsharpening.halocontrol; + contrast->setValue (pp->prsharpening.contrast); amount->setValue (pp->prsharpening.amount); radius->setValue (pp->prsharpening.radius); threshold->setValue(pp->prsharpening.threshold); @@ -219,6 +230,7 @@ void PrSharpening::read (const ProcParams* pp, const ParamsEdited* pedited) void PrSharpening::write (ProcParams* pp, ParamsEdited* pedited) { + pp->prsharpening.contrast = contrast->getValue (); pp->prsharpening.amount = (int)amount->getValue(); pp->prsharpening.enabled = getEnabled (); pp->prsharpening.radius = radius->getValue (); @@ -240,6 +252,7 @@ void PrSharpening::write (ProcParams* pp, ParamsEdited* pedited) } if (pedited) { + pedited->prsharpening.contrast = contrast->getEditedState (); pedited->prsharpening.amount = amount->getEditedState (); pedited->prsharpening.radius = radius->getEditedState (); pedited->prsharpening.threshold = threshold->getEditedState (); @@ -260,6 +273,7 @@ void PrSharpening::write (ProcParams* pp, ParamsEdited* pedited) void PrSharpening::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) { + contrast->setDefault (defParams->prsharpening.contrast); amount->setDefault (defParams->prsharpening.amount); radius->setDefault (defParams->prsharpening.radius); threshold->setDefault (defParams->prsharpening.threshold); @@ -272,6 +286,7 @@ void PrSharpening::setDefaults (const ProcParams* defParams, const ParamsEdited* ddamping->setDefault (defParams->prsharpening.deconvdamping); if (pedited) { + contrast->setDefaultEditedState (pedited->prsharpening.contrast ? Edited : UnEdited); amount->setDefaultEditedState (pedited->prsharpening.amount ? Edited : UnEdited); radius->setDefaultEditedState (pedited->prsharpening.radius ? Edited : UnEdited); threshold->setDefaultEditedState (pedited->prsharpening.threshold ? Edited : UnEdited); @@ -283,6 +298,7 @@ void PrSharpening::setDefaults (const ProcParams* defParams, const ParamsEdited* diter->setDefaultEditedState (pedited->prsharpening.deconviter ? Edited : UnEdited); ddamping->setDefaultEditedState (pedited->prsharpening.deconvdamping ? Edited : UnEdited); } else { + contrast->setDefaultEditedState (Irrelevant); amount->setDefaultEditedState (Irrelevant); radius->setDefaultEditedState (Irrelevant); threshold->setDefaultEditedState (Irrelevant); @@ -311,7 +327,9 @@ void PrSharpening::adjusterChanged (Adjuster* a, double newval) costr = Glib::ustring::format ((int)a->getValue()); } - if (a == amount) { + if (a == contrast) { + listener->panelChanged (EvPrShrContrast, costr); + } else if (a == amount) { listener->panelChanged (EvPrShrAmount, costr); } else if (a == radius) { listener->panelChanged (EvPrShrRadius, costr); @@ -457,6 +475,7 @@ void PrSharpening::setBatchMode (bool batchMode) edgebin->pack_start (*edgebox); pack_start (*rld); + contrast->showEditedCB (); radius->showEditedCB (); amount->showEditedCB (); threshold->showEditedCB (); @@ -470,9 +489,10 @@ void PrSharpening::setBatchMode (bool batchMode) method->append (M("GENERAL_UNCHANGED")); } -void PrSharpening::setAdjusterBehavior (bool radiusadd, bool amountadd, bool dampingadd, bool iteradd, bool edgetoladd, bool haloctrladd) +void PrSharpening::setAdjusterBehavior (bool contrastadd, bool radiusadd, bool amountadd, bool dampingadd, bool iteradd, bool edgetoladd, bool haloctrladd) { + contrast->setAddMode(contrastadd); radius->setAddMode(radiusadd); dradius->setAddMode(radiusadd); amount->setAddMode(amountadd); @@ -487,6 +507,7 @@ void PrSharpening::setAdjusterBehavior (bool radiusadd, bool amountadd, bool dam void PrSharpening::trimValues (rtengine::procparams::ProcParams* pp) { + contrast->trimValue(pp->prsharpening.contrast); radius->trimValue(pp->prsharpening.radius); dradius->trimValue(pp->prsharpening.deconvradius); amount->trimValue(pp->prsharpening.amount); diff --git a/rtgui/prsharpening.h b/rtgui/prsharpening.h index 50dc91258..bac0b9240 100644 --- a/rtgui/prsharpening.h +++ b/rtgui/prsharpening.h @@ -28,6 +28,7 @@ class PrSharpening : public ToolParamBlock, public ThresholdAdjusterListener, pu { protected: + Adjuster* contrast; MyComboBoxText* method; Adjuster* dradius; Adjuster* damount; @@ -52,7 +53,7 @@ protected: Gtk::CheckButton* halocontrol; bool lastHaloControl; sigc::connection hcConn; - + rtengine::ProcEvent EvPrShrContrast; public: PrSharpening (); @@ -70,7 +71,7 @@ public: void method_changed (); void adjusterChanged (ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR); - void setAdjusterBehavior (bool radiusadd, bool amountadd, bool dampingadd, bool iteradd, bool edgetoladd, bool haloctrladd); + void setAdjusterBehavior (bool contrastadd, bool radiusadd, bool amountadd, bool dampingadd, bool iteradd, bool edgetoladd, bool haloctrladd); void trimValues (rtengine::procparams::ProcParams* pp); }; diff --git a/rtgui/sharpening.cc b/rtgui/sharpening.cc index 005d2dd8f..dac7bb5bb 100644 --- a/rtgui/sharpening.cc +++ b/rtgui/sharpening.cc @@ -26,11 +26,11 @@ using namespace rtengine::procparams; Sharpening::Sharpening () : FoldableToolPanel(this, "sharpening", M("TP_SHARPENING_LABEL"), true, true) { auto m = ProcEventMapper::getInstance(); - EvSharpenContrast = m->newEvent(SHARPENING, "HISTORY_MSG_MICROCONTRAST_CONTRAST"); + EvSharpenContrast = m->newEvent(SHARPENING, "HISTORY_MSG_SHARPENING_CONTRAST"); Gtk::HBox* hb = Gtk::manage (new Gtk::HBox ()); hb->show (); - contrast = Gtk::manage(new Adjuster (M("TP_SHARPENMICRO_CONTRAST"), 0, 100, 1, 0)); + contrast = Gtk::manage(new Adjuster (M("TP_SHARPENING_CONTRAST"), 0, 100, 1, 0)); contrast->setAdjusterListener (this); pack_start(*contrast); if (contrast->delay < options.adjusterMaxDelay) { From 69af2a6b4c22dcdc87d1cf20ac4c8357d468993b Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 22 May 2018 14:31:35 +0200 Subject: [PATCH 17/85] Added missing paramsedited entries for pr-sharpening contrast threshold --- rtgui/paramsedited.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 258410773..0eebe2e41 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -157,6 +157,7 @@ void ParamsEdited::set (bool v) sharpening.deconviter = v; sharpening.deconvdamping = v; prsharpening.enabled = v; + prsharpening.contrast = v; prsharpening.radius = v; prsharpening.amount = v; prsharpening.threshold = v; @@ -711,6 +712,7 @@ void ParamsEdited::initFrom (const std::vector sharpening.deconviter = sharpening.deconviter && p.sharpening.deconviter == other.sharpening.deconviter; sharpening.deconvdamping = sharpening.deconvdamping && p.sharpening.deconvdamping == other.sharpening.deconvdamping; prsharpening.enabled = prsharpening.enabled && p.prsharpening.enabled == other.prsharpening.enabled; + prsharpening.contrast = prsharpening.contrast && p.prsharpening.contrast == other.prsharpening.contrast; prsharpening.radius = prsharpening.radius && p.prsharpening.radius == other.prsharpening.radius; prsharpening.amount = prsharpening.amount && p.prsharpening.amount == other.prsharpening.amount; prsharpening.threshold = prsharpening.threshold && p.prsharpening.threshold == other.prsharpening.threshold; @@ -1640,6 +1642,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten toEdit.prsharpening.enabled = mods.prsharpening.enabled; } + if (prsharpening.contrast) { + toEdit.prsharpening.contrast = dontforceSet && options.baBehav[ADDSET_SHARP_CONTRAST] ? toEdit.prsharpening.contrast + mods.prsharpening.contrast : mods.prsharpening.contrast; + } + if (prsharpening.radius) { toEdit.prsharpening.radius = dontforceSet && options.baBehav[ADDSET_SHARP_RADIUS] ? toEdit.prsharpening.radius + mods.prsharpening.radius : mods.prsharpening.radius; } From 7d49895769734d7a9885620c36b14803805260eb Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 22 May 2018 14:38:32 +0200 Subject: [PATCH 18/85] Removed Stopwatches --- rtengine/pixelshift.cc | 2 +- rtengine/rawimagesource.cc | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/rtengine/pixelshift.cc b/rtengine/pixelshift.cc index 5aac37d20..488538e8a 100644 --- a/rtengine/pixelshift.cc +++ b/rtengine/pixelshift.cc @@ -26,7 +26,7 @@ #include "procparams.h" #include "gauss.h" #include "median.h" -#define BENCHMARK +//#define BENCHMARK #include "StopWatch.h" namespace { diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 755420817..6f119a2ad 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -39,7 +39,6 @@ #include #endif #include "opthelper.h" -#include "StopWatch.h" #define clipretinex( val, minv, maxv ) (( val = (val < minv ? minv : val ) ) > maxv ? maxv : val ) #undef CLIPD #define CLIPD(a) ((a)>0.0f?((a)<1.0f?(a):1.0f):0.0f) @@ -2015,7 +2014,6 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le plistener->setProgress (0.0); } if(numFrames == 4) { - StopWatch Stop1("ps ca correction"); double fitParams[64]; float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[0], fitParams, false, true, nullptr, false); for(int i = 1; i < 3; ++i) { From e1643418cb394bf55953d52310238ac84a81c97b Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 22 May 2018 16:56:02 +0200 Subject: [PATCH 19/85] ImProcFunctions::deconvsharpening(..): simplified code --- rtengine/ipsharpen.cc | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index a3ae53747..2779beb08 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -47,7 +47,7 @@ vfloat calcBlendFactor(vfloat valv, vfloat thresholdv) { } #endif -void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold) { +void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold, float amount = 1.f) { // upper border for(int j = 0; j < 2; j++) for(int i = 0; i < W; ++i) { @@ -61,6 +61,7 @@ void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int #ifdef __SSE2__ vfloat contrastThresholdv = F2V(contrastThreshold); vfloat scalev = F2V(0.0625f / 327.68f); + vfloat amountv = F2V(amount); #endif #ifdef _OPENMP #pragma omp for schedule(dynamic,16) nowait @@ -75,7 +76,7 @@ void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) + SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev; - STVFU(blend[j][i], calcBlendFactor(contrastv, contrastThresholdv)); + STVFU(blend[j][i], amountv * calcBlendFactor(contrastv, contrastThresholdv)); } #endif for(; i < W - 2; ++i) { @@ -83,7 +84,7 @@ void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int float contrast = sqrtf(SQR(luminance[j][i+1] - luminance[j][i-1]) + SQR(luminance[j+1][i] - luminance[j-1][i]) + SQR(luminance[j][i+2] - luminance[j][i-2]) + SQR(luminance[j+2][i] - luminance[j-2][i])) * 0.0625f / 327.68f; - blend[j][i] = calcBlendFactor(contrast, contrastThreshold); + blend[j][i] = amount * calcBlendFactor(contrast, contrastThreshold); } blend[j][W - 2] = blend[j][W - 1] = 0.f; } @@ -232,7 +233,6 @@ void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, int W, i } BENCHFUN JaggedArray tmpI(W, H); - JaggedArray tmpII(W, H); #ifdef _OPENMP #pragma omp parallel for @@ -240,13 +240,12 @@ BENCHFUN for (int i = 0; i < H; i++) { for(int j = 0; j < W; j++) { tmpI[i][j] = max(luminance[i][j], 0.f); - tmpII[i][j] = luminance[i][j]; } } // calculate contrast based blend factors to reduce sharpening in regions with low contrast JaggedArray blend(W, H); - buildBlendMask(luminance, blend, W, H, sharpenParam.contrast / 100.f); + buildBlendMask(luminance, blend, W, H, sharpenParam.contrast / 100.f, sharpenParam.deconvamount / 100.0); float damping = sharpenParam.deconvdamping / 5.0; bool needdamp = sharpenParam.deconvdamping > 0; @@ -278,17 +277,15 @@ BENCHFUN } // end for - float p2 = sharpenParam.deconvamount / 100.0; - float p1 = 1.0 - p2; - #ifdef _OPENMP #pragma omp for #endif - for (int i = 0; i < H; ++i) + for (int i = 0; i < H; ++i) { for (int j = 0; j < W; ++j) { - luminance[i][j] = intp(blend[i][j], luminance[i][j] * p1 + max(tmpI[i][j], 0.0f) * p2, tmpII[i][j]); + luminance[i][j] = intp(blend[i][j], max(tmpI[i][j], 0.0f), luminance[i][j]); } + } } // end parallel } From fcfd81371423f4c820da8da262db4680e8ad45cb Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 23 May 2018 23:49:11 +0200 Subject: [PATCH 20/85] Sharpening: Blur contrast blend mask to get smoother transitions. --- rtengine/dcrop.cc | 29 ++------------------ rtengine/dcrop.h | 2 -- rtengine/improcfun.h | 2 +- rtengine/ipsharpen.cc | 56 ++++++++++++++++++++++++--------------- rtengine/simpleprocess.cc | 44 ++++++++---------------------- 5 files changed, 48 insertions(+), 85 deletions(-) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 3ae8f1d65..e2b4d2002 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -42,7 +42,7 @@ extern const Settings* settings; Crop::Crop (ImProcCoordinator* parent, EditDataProvider *editDataProvider, bool isDetailWindow) : PipetteBuffer (editDataProvider), origCrop (nullptr), laboCrop (nullptr), labnCrop (nullptr), - cropImg (nullptr), cbuf_real (nullptr), transCrop (nullptr), cieCrop (nullptr), cbuffer (nullptr), + cropImg (nullptr), transCrop (nullptr), cieCrop (nullptr), updating (false), newUpdatePending (false), skip (10), cropx (0), cropy (0), cropw (-1), croph (-1), trafx (0), trafy (0), trafw (-1), trafh (-1), @@ -865,7 +865,7 @@ void Crop::update (int todo) if ((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)) { parent->ipf.MLmicrocontrast (labnCrop); - parent->ipf.sharpening (labnCrop, (float**)cbuffer, params.sharpening); + parent->ipf.sharpening (labnCrop, params.sharpening); } } @@ -1082,16 +1082,6 @@ void Crop::freeAll () cieCrop = nullptr; } - if (cbuf_real) { - delete [] cbuf_real; - cbuf_real = nullptr; - } - - if (cbuffer ) { - delete [] cbuffer; - cbuffer = nullptr; - } - PipetteBuffer::flush(); } @@ -1269,21 +1259,6 @@ bool Crop::setCropSizes (int rcx, int rcy, int rcw, int rch, int skip, bool inte cieCrop = nullptr; } - if (cbuffer ) { - delete [] cbuffer; - } - - if (cbuf_real) { - delete [] cbuf_real; - } - - cbuffer = new float*[croph]; - cbuf_real = new float[ (croph + 2)*cropw]; - - for (int i = 0; i < croph; i++) { - cbuffer[i] = cbuf_real + cropw * i + cropw; - } - if (editType == ET_PIPETTE) { PipetteBuffer::resize (cropw, croph); } else if (PipetteBuffer::bufferCreated()) { diff --git a/rtengine/dcrop.h b/rtengine/dcrop.h index 7ec346d3c..efd4a399a 100644 --- a/rtengine/dcrop.h +++ b/rtengine/dcrop.h @@ -44,13 +44,11 @@ protected: LabImage* laboCrop; // "one chunk" allocation LabImage* labnCrop; // "one chunk" allocation Image8* cropImg; // "one chunk" allocation ; displayed image in monitor color space, showing the output profile as well (soft-proofing enabled, which then correspond to workimg) or not - float * cbuf_real; // "one chunk" allocation // --- automatically allocated and deleted when necessary, and only renewed on size changes Imagefloat* transCrop; // "one chunk" allocation, allocated if necessary CieImage* cieCrop; // allocating 6 images, each in "one chunk" allocation // ----------------------------------------------------------------- - float** cbuffer; bool updating; /// Flag telling if an updater thread is currently processing bool newUpdatePending; /// Flag telling the updater thread that a new update is pending diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 135ab26ee..78f0c5b9e 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -226,7 +226,7 @@ public: void chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW, LabImage* lold, LabImage* lnew, LUTf &acurve, LUTf &bcurve, LUTf & satcurve, LUTf & satclcurve, LUTf &clcurve, LUTf &curve, bool utili, bool autili, bool butili, bool ccutili, bool cclutili, bool clcutili, LUTu &histCCurve, LUTu &histLurve); void vibrance (LabImage* lab);//Jacques' vibrance // void colorCurve (LabImage* lold, LabImage* lnew); - void sharpening (LabImage* lab, float** buffer, SharpeningParams &sharpenParam); + void sharpening (LabImage* lab, const SharpeningParams &sharpenParam); void sharpeningcam (CieImage* ncie, float** buffer); void transform (Imagefloat* original, Imagefloat* transformed, int cx, int cy, int sx, int sy, int oW, int oH, int fW, int fH, const FramesMetaData *metadata, int rawRotationDeg, bool fullImage); float resizeScale (const ProcParams* params, int fw, int fh, int &imw, int &imh); diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 2779beb08..94b2b110c 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -24,17 +24,19 @@ #include "rt_math.h" #include "sleef.c" #include "opthelper.h" -//#define BENCHMARK +#define BENCHMARK #include "StopWatch.h" using namespace std; namespace { + float calcBlendFactor(float val, float threshold) { // sigmoid function // result is in ]0;1] range // inflexion point is at (x, y) (threshold, 0.5) return threshold == 0.f ? 1.f : 1.f / (1.f + xexpf(16.f - 16.f * val / threshold)); } + #ifdef __SSE2__ vfloat calcBlendFactor(vfloat valv, vfloat thresholdv) { // sigmoid function @@ -48,31 +50,33 @@ vfloat calcBlendFactor(vfloat valv, vfloat thresholdv) { #endif void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold, float amount = 1.f) { +BENCHFUN // upper border for(int j = 0; j < 2; j++) for(int i = 0; i < W; ++i) { blend[j][i] = 0.f; } + constexpr float scale = 0.0625f / 327.68f; #ifdef _OPENMP #pragma omp parallel #endif { #ifdef __SSE2__ - vfloat contrastThresholdv = F2V(contrastThreshold); - vfloat scalev = F2V(0.0625f / 327.68f); - vfloat amountv = F2V(amount); + const vfloat contrastThresholdv = F2V(contrastThreshold); + const vfloat scalev = F2V(scale); + const vfloat amountv = F2V(amount); #endif #ifdef _OPENMP #pragma omp for schedule(dynamic,16) nowait #endif for(int j = 2; j < H - 2; ++j) { + // left two pixels blend[j][0] = blend[j][1] = 0.f; int i = 2; #ifdef __SSE2__ for(; i < W - 5; i += 4) { - vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) + SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev; @@ -82,10 +86,11 @@ void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int for(; i < W - 2; ++i) { float contrast = sqrtf(SQR(luminance[j][i+1] - luminance[j][i-1]) + SQR(luminance[j+1][i] - luminance[j-1][i]) + - SQR(luminance[j][i+2] - luminance[j][i-2]) + SQR(luminance[j+2][i] - luminance[j-2][i])) * 0.0625f / 327.68f; + SQR(luminance[j][i+2] - luminance[j][i-2]) + SQR(luminance[j+2][i] - luminance[j-2][i])) * scale; blend[j][i] = amount * calcBlendFactor(contrast, contrastThreshold); } + // right two pixels blend[j][W - 2] = blend[j][W - 1] = 0.f; } #ifdef _OPENMP @@ -98,14 +103,17 @@ void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int blend[j][i] = 0.f; } } + // blur blend mask to smooth transitions + gaussianBlur(blend, blend, W, H, 2.0); + } } void sharpenHaloCtrl (float** luminance, float** blurmap, float** base, float** blend, int W, int H, const SharpeningParams &sharpenParam) { - float scale = (100.f - sharpenParam.halocontrol_amount) * 0.01f; - float sharpFac = sharpenParam.amount * 0.01f; + const float scale = (100.f - sharpenParam.halocontrol_amount) * 0.01f; + const float sharpFac = sharpenParam.amount * 0.01f; float** nL = base; #ifdef _OPENMP @@ -170,12 +178,12 @@ void dcdamping (float** aI, float** aO, float damping, int W, int H) const float dampingFac = -2.0 / (damping * damping); #ifdef __SSE2__ - __m128 Iv, Ov, Uv, zerov, onev, fourv, fivev, dampingFacv, Tv, Wv, Lv; - zerov = _mm_setzero_ps( ); - onev = F2V( 1.0f ); - fourv = F2V( 4.0f ); - fivev = F2V( 5.0f ); - dampingFacv = F2V( dampingFac ); + vfloat Iv, Ov, Uv, zerov, onev, fourv, fivev, dampingFacv, Tv, Wv, Lv; + zerov = _mm_setzero_ps(); + onev = F2V(1.f); + fourv = F2V(4.f); + fivev = F2V(5.f); + dampingFacv = F2V(dampingFac); #endif #ifdef _OPENMP #pragma omp for @@ -186,8 +194,8 @@ void dcdamping (float** aI, float** aO, float damping, int W, int H) #ifdef __SSE2__ for (; j < W - 3; j += 4) { - Iv = LVFU( aI[i][j] ); - Ov = LVFU( aO[i][j] ); + Iv = LVFU(aI[i][j]); + Ov = LVFU(aO[i][j]); Lv = xlogf(Iv / Ov); Wv = Ov - Iv; Uv = (Ov * Lv + Wv) * dampingFacv; @@ -198,7 +206,7 @@ void dcdamping (float** aI, float** aO, float damping, int W, int H) Uv = (Wv / Iv) * Uv + onev; Uv = vselfzero(vmaskf_gt(Iv, zerov), Uv); Uv = vselfzero(vmaskf_gt(Ov, zerov), Uv); - STVFU( aI[i][j], Uv ); + STVFU(aI[i][j], Uv); } #endif @@ -221,6 +229,7 @@ void dcdamping (float** aI, float** aO, float damping, int W, int H) } } + namespace rtengine { @@ -247,9 +256,9 @@ BENCHFUN JaggedArray blend(W, H); buildBlendMask(luminance, blend, W, H, sharpenParam.contrast / 100.f, sharpenParam.deconvamount / 100.0); - float damping = sharpenParam.deconvdamping / 5.0; - bool needdamp = sharpenParam.deconvdamping > 0; - double sigma = sharpenParam.deconvradius / scale; + const float damping = sharpenParam.deconvdamping / 5.0; + const bool needdamp = sharpenParam.deconvdamping > 0; + const double sigma = sharpenParam.deconvradius / scale; #ifdef _OPENMP #pragma omp parallel @@ -289,20 +298,23 @@ BENCHFUN } // end parallel } -void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &sharpenParam) +void ImProcFunctions::sharpening (LabImage* lab, const SharpeningParams &sharpenParam) { if ((!sharpenParam.enabled) || sharpenParam.amount < 1 || lab->W < 8 || lab->H < 8) { return; } + int W = lab->W, H = lab->H; + JaggedArray b2(W, H); + if (sharpenParam.method == "rld") { deconvsharpening (lab->L, b2, lab->W, lab->H, sharpenParam); return; } + // Rest is UNSHARP MASK - int W = lab->W, H = lab->H; float** b3 = nullptr; if (sharpenParam.edgesonly) { diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 6a59241e1..7818871a7 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1053,20 +1053,8 @@ private: } if (((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)) && params.sharpening.enabled) { + ipf.sharpening (labView, params.sharpening); - float **buffer = new float*[fh]; - - for (int i = 0; i < fh; i++) { - buffer[i] = new float[fw]; - } - - ipf.sharpening (labView, (float**)buffer, params.sharpening); - - for (int i = 0; i < fh; i++) { - delete [] buffer[i]; - } - - delete [] buffer; } WaveletParams WaveParams = params.wavelet; @@ -1165,7 +1153,7 @@ private: int imw, imh; double tmpScale = ipf.resizeScale (¶ms, fw, fh, imw, imh); - bool labResize = params.resize.enabled && params.resize.method != "Nearest" && tmpScale != 1.0; + bool labResize = params.resize.enabled && params.resize.method != "Nearest" && (tmpScale != 1.0 || params.prsharpening.enabled); LabImage *tmplab; // crop and convert to rgb16 @@ -1196,33 +1184,23 @@ private: } if (labResize) { // resize lab data - // resize image - tmplab = new LabImage (imw, imh); - ipf.Lanczos (labView, tmplab, tmpScale); - delete labView; - labView = tmplab; + if(labView->W != imw || labView->H != imh) { + // resize image + tmplab = new LabImage (imw, imh); + ipf.Lanczos (labView, tmplab, tmpScale); + delete labView; + labView = tmplab; + } cw = labView->W; ch = labView->H; if (params.prsharpening.enabled) { - for (int i = 0; i < ch; i++) + for (int i = 0; i < ch; i++) { for (int j = 0; j < cw; j++) { labView->L[i][j] = labView->L[i][j] < 0.f ? 0.f : labView->L[i][j]; } - - float **buffer = new float*[ch]; - - for (int i = 0; i < ch; i++) { - buffer[i] = new float[cw]; } - - ipf.sharpening (labView, (float**)buffer, params.prsharpening); - - for (int i = 0; i < ch; i++) { - delete [] buffer[i]; - } - - delete [] buffer; + ipf.sharpening (labView, params.prsharpening); } } From 6989541cb2edb14bc42ffd1b1f97b2ef4a711fe7 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 24 May 2018 15:26:24 +0200 Subject: [PATCH 21/85] buildBlendMask(..): Fixed segfault caused by uninitialized corners. #4551 --- rtengine/ipsharpen.cc | 128 +++++++++++++++++++++++------------------- 1 file changed, 70 insertions(+), 58 deletions(-) diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 94b2b110c..37a1a0010 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -34,7 +34,7 @@ float calcBlendFactor(float val, float threshold) { // sigmoid function // result is in ]0;1] range // inflexion point is at (x, y) (threshold, 0.5) - return threshold == 0.f ? 1.f : 1.f / (1.f + xexpf(16.f - 16.f * val / threshold)); + return 1.f / (1.f + xexpf(16.f - 16.f * val / threshold)); } #ifdef __SSE2__ @@ -44,69 +44,79 @@ vfloat calcBlendFactor(vfloat valv, vfloat thresholdv) { // inflexion point is at (x, y) (threshold, 0.5) const vfloat onev = F2V(1.f); const vfloat c16v = F2V(16.f); - vfloat resultv = onev / (onev + xexpf(c16v - c16v * valv / thresholdv)); - return vself(vmaskf_eq(thresholdv, ZEROV), onev, resultv); + return onev / (onev + xexpf(c16v - c16v * valv / thresholdv)); } #endif void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold, float amount = 1.f) { BENCHFUN - // upper border - for(int j = 0; j < 2; j++) - for(int i = 0; i < W; ++i) { - blend[j][i] = 0.f; + + if(contrastThreshold == 0.f) { + for(int j = 0; j < H; ++j) { + for(int i = 0; i < W; ++i) { + blend[j][i] = 1.f; + } } - - constexpr float scale = 0.0625f / 327.68f; + } else { + constexpr float scale = 0.0625f / 327.68f; #ifdef _OPENMP - #pragma omp parallel -#endif -{ -#ifdef __SSE2__ - const vfloat contrastThresholdv = F2V(contrastThreshold); - const vfloat scalev = F2V(scale); - const vfloat amountv = F2V(amount); -#endif -#ifdef _OPENMP - #pragma omp for schedule(dynamic,16) nowait -#endif - - for(int j = 2; j < H - 2; ++j) { - // left two pixels - blend[j][0] = blend[j][1] = 0.f; - int i = 2; -#ifdef __SSE2__ - for(; i < W - 5; i += 4) { - vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) + - SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev; - - STVFU(blend[j][i], amountv * calcBlendFactor(contrastv, contrastThresholdv)); - } -#endif - for(; i < W - 2; ++i) { - - float contrast = sqrtf(SQR(luminance[j][i+1] - luminance[j][i-1]) + SQR(luminance[j+1][i] - luminance[j-1][i]) + - SQR(luminance[j][i+2] - luminance[j][i-2]) + SQR(luminance[j+2][i] - luminance[j-2][i])) * scale; - - blend[j][i] = amount * calcBlendFactor(contrast, contrastThreshold); - } - // right two pixels - blend[j][W - 2] = blend[j][W - 1] = 0.f; - } -#ifdef _OPENMP - #pragma omp single + #pragma omp parallel #endif { - // lower border - for(int j = H - 2; j < H; ++j) - for(int i = 0; i < W; ++i) { - blend[j][i] = 0.f; - } - } - // blur blend mask to smooth transitions - gaussianBlur(blend, blend, W, H, 2.0); +#ifdef __SSE2__ + const vfloat contrastThresholdv = F2V(contrastThreshold); + const vfloat scalev = F2V(scale); + const vfloat amountv = F2V(amount); +#endif +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) +#endif -} + for(int j = 2; j < H - 2; ++j) { + int i = 2; +#ifdef __SSE2__ + for(; i < W - 5; i += 4) { + vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) + + SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev; + + STVFU(blend[j][i], amountv * calcBlendFactor(contrastv, contrastThresholdv)); + } +#endif + for(; i < W - 2; ++i) { + + float contrast = sqrtf(SQR(luminance[j][i+1] - luminance[j][i-1]) + SQR(luminance[j+1][i] - luminance[j-1][i]) + + SQR(luminance[j][i+2] - luminance[j][i-2]) + SQR(luminance[j+2][i] - luminance[j-2][i])) * scale; + + blend[j][i] = amount * calcBlendFactor(contrast, contrastThreshold); + } + } +#ifdef _OPENMP + #pragma omp single +#endif + { + // upper border + for(int j = 0; j < 2; ++j) { + for(int i = 2; i < W - 2; ++i) { + blend[j][i] = blend[2][i]; + } + } + // lower border + for(int j = H - 2; j < H; ++j) { + for(int i = 2; i < W - 2; ++i) { + blend[j][i] = blend[H-3][i]; + } + } + for(int j = 0; j < H; ++j) { + // left border + blend[j][0] = blend[j][1] = blend[j][2]; + // right border + blend[j][W - 2] = blend[j][W - 1] = blend[j][W - 3]; + } + } + // blur blend mask to smooth transitions + gaussianBlur(blend, blend, W, H, 2.0); + } + } } void sharpenHaloCtrl (float** luminance, float** blurmap, float** base, float** blend, int W, int H, const SharpeningParams &sharpenParam) @@ -644,7 +654,6 @@ void ImProcFunctions::MLmicrocontrast(float** luminance, int W, int H) } BENCHFUN const int k = params->sharpenMicro.matrix ? 1 : 2; - const float contrastThreshold = params->sharpenMicro.contrast / 100; // k=2 matrix 5x5 k=1 matrix 3x3 const int width = W, height = H; const float uniform = params->sharpenMicro.uniformity; //between 0 to 100 @@ -690,6 +699,10 @@ BENCHFUN constexpr float sqrt1d25 = sqrt(1.25); float *LM = new float[width * height]; //allocation for Luminance + // calculate contrast based blend factors to reduce sharpening in regions with low contrast + JaggedArray blend(W, H); + buildBlendMask(luminance, blend, W, H, params->sharpenMicro.contrast / 100.f); + #ifdef _OPENMP #pragma omp parallel #endif @@ -719,7 +732,6 @@ BENCHFUN + SQR(LM[offset + 2] - LM[offset - 2]) + SQR(LM[offset + 2 * width] - LM[offset - 2 * width])) * 0.0625f; //for 5x5 contrast = std::min(contrast, 1.f); - float blend = calcBlendFactor(contrast, contrastThreshold); //matrix 5x5 float temp = v + 4.f *( v * (s + sqrt2 * s)); //begin 3x3 @@ -818,7 +830,7 @@ BENCHFUN } else { temp = 0.f; } - luminance[j][i] = intp(blend, luminance[j][i] * (temp * temp2 + 1.f), luminance[j][i]); + luminance[j][i] = intp(blend[j][i], luminance[j][i] * (temp * temp2 + 1.f), luminance[j][i]); } else { float temp4 = LM[offset] / tempL; // @@ -869,7 +881,7 @@ BENCHFUN } else { temp = 0.f; } - luminance[j][i] = intp(blend, luminance[j][i] / (temp * temp4 + 1.f), luminance[j][i]); + luminance[j][i] = intp(blend[j][i], luminance[j][i] / (temp * temp4 + 1.f), luminance[j][i]); } } } From 18287370db63fa8bcb74c278f3c83630d8620ebd Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Fri, 25 May 2018 14:05:55 +0200 Subject: [PATCH 22/85] Update camconst.json PDAF lines pattern for A7RIII #4572 --- rtengine/camconst.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index aa0d114d2..405c5680a 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -2333,7 +2333,9 @@ Camera constants: "make_model": "Sony ILCE-7RM3", "dcraw_matrix": [ 6640,-1847,-503,-5238,13010,2474,-993,1673,6527 ], // DNG_v10.1 D65 "raw_crop": [ 0, 0, -36, 0 ], // full raw frame 8000x5320 - 36 rightmost columns are garbage - "ranges": { "black": 512, "white": 16300 } + "ranges": { "black": 512, "white": 16300 }, + "pdafPattern" : [0, 24, 36, 60, 84, 120, 132, 156, 192, 204, 240, 252, 276, 300, 324, 360, 372, 396, 420, 444, 480, 492, 504, 540, 564, 576, 612, 636, 660, 696, 720, 732, 756, 780, 804, 840], + "pdafOffset" : 31 }, { // Quality B, color matrix copied from a7rm2 From a14c47126b3f5091f3b7a8ee4e7772770d28c8bb Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 26 May 2018 15:05:37 +0200 Subject: [PATCH 23/85] Extended range of Sharpening Contrast Threshold from 0..100 to 0..200 --- rtgui/sharpening.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/sharpening.cc b/rtgui/sharpening.cc index dac7bb5bb..6a020b9e8 100644 --- a/rtgui/sharpening.cc +++ b/rtgui/sharpening.cc @@ -30,7 +30,7 @@ Sharpening::Sharpening () : FoldableToolPanel(this, "sharpening", M("TP_SHARPENI Gtk::HBox* hb = Gtk::manage (new Gtk::HBox ()); hb->show (); - contrast = Gtk::manage(new Adjuster (M("TP_SHARPENING_CONTRAST"), 0, 100, 1, 0)); + contrast = Gtk::manage(new Adjuster (M("TP_SHARPENING_CONTRAST"), 0, 200, 1, 0)); contrast->setAdjusterListener (this); pack_start(*contrast); if (contrast->delay < options.adjusterMaxDelay) { From 209df11de8d85b8122a2112adea84f8cfbb0bf49 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Sat, 26 May 2018 15:32:25 +0200 Subject: [PATCH 24/85] Revised TP_COLORAPP_MODEL_TOOLTIP --- rtdata/languages/Catala | 2 +- rtdata/languages/Chinese (Simplified) | 2 +- rtdata/languages/Chinese (Traditional) | 2 +- rtdata/languages/Dansk | 2 +- rtdata/languages/Deutsch | 20 ++++++++------------ rtdata/languages/English (UK) | 2 +- rtdata/languages/English (US) | 2 +- rtdata/languages/Euskara | 2 +- rtdata/languages/Greek | 2 +- rtdata/languages/Hebrew | 2 +- rtdata/languages/Latvian | 2 +- rtdata/languages/Magyar | 2 +- rtdata/languages/Norsk BM | 2 +- rtdata/languages/Portugues (Brasil) | 2 +- rtdata/languages/Russian | 2 +- rtdata/languages/Slovak | 2 +- rtdata/languages/Suomi | 2 +- rtdata/languages/Turkish | 2 +- rtdata/languages/default | 2 +- 19 files changed, 26 insertions(+), 30 deletions(-) diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index 8ceab1e6c..4ef640e95 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -1662,7 +1662,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index ff4df8448..55c300e06 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -1621,7 +1621,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_COLORAPP_LABEL_SCENE;Scene Conditions !TP_COLORAPP_LABEL_VIEWING;Viewing Conditions !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional) index b4a3207da..c84441c14 100644 --- a/rtdata/languages/Chinese (Traditional) +++ b/rtdata/languages/Chinese (Traditional) @@ -1463,7 +1463,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index ddeea3acd..75196d5c0 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -1460,7 +1460,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index bbe76a991..1005a55e6 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -63,6 +63,7 @@ ABOUT_TAB_CREDITS;Danksagungen ABOUT_TAB_LICENSE;Lizenz ABOUT_TAB_RELEASENOTES;Versionshinweise ABOUT_TAB_SPLASH;Startbild +ADJUSTER_RESET_TO_DEFAULT;Klick - Auf Standardwert zurücksetzen.\nStrg + Klick - Auf Initialwert zurücksetzen. BATCHQUEUE_AUTOSTART;Automatisch starten BATCHQUEUE_AUTOSTARTHINT;Bei neuem Job die Verarbeitung automatisch starten BATCHQUEUE_DESTFILENAME;Pfad und Dateiname @@ -286,6 +287,7 @@ GENERAL_NONE;Keine GENERAL_OK;OK GENERAL_OPEN;Öffnen GENERAL_PORTRAIT;Portrait +GENERAL_RESET;Zurücksetzen GENERAL_SAVE;Speichern GENERAL_SLIDER;Regler GENERAL_UNCHANGED;(Unverändert) @@ -536,7 +538,9 @@ HISTORY_MSG_231;(Schwarz/Weiß)\n“Bevor“-Kurve HISTORY_MSG_232;(Schwarz/Weiß)\n“Bevor“-Kurventyp HISTORY_MSG_233;(Schwarz/Weiß)\n“Danach“-Kurve HISTORY_MSG_234;(Schwarz/Weiß)\n“Danach“-Kurventyp +HISTORY_MSG_235;(Schwarz/Weiß)\nAuto-Kanalmixer HISTORY_MSG_236;--unused-- +HISTORY_MSG_237;(Schwarz/Weiß) - Mixer HISTORY_MSG_238;(Grauverlaufsfilter)\nBereich HISTORY_MSG_239;(Grauverlaufsfilter)\nIntensität HISTORY_MSG_240;(Grauverlaufsfilter)\nRotationsachsen @@ -572,6 +576,7 @@ HISTORY_MSG_269;(Farbanpassungen)\nLichter - Blau / Rot HISTORY_MSG_270;(Farbanpassungen)\nLichter - Cyan / Grün HISTORY_MSG_271;(Farbanpassungen)\nLichter - Gelb / Blau HISTORY_MSG_272;(Farbanpassungen)\nFarbausgleich +HISTORY_MSG_273;(Farbanpassungen)\nFarbausgleich\nRegler zurücksetzen HISTORY_MSG_274;(Farbanpassungen)\nSättigung Schatten HISTORY_MSG_275;(Farbanpassungen)\nSättigung Lichter HISTORY_MSG_276;(Farbanpassungen)\nDeckkraft @@ -690,6 +695,7 @@ HISTORY_MSG_388;(Wavelet) - Restbild\nFarbausgleich\nMitten Grün / Cyan HISTORY_MSG_389;(Wavelet) - Restbild\nFarbausgleich\nMitten Blau / Gelb HISTORY_MSG_390;(Wavelet) - Restbild\nFarbausgleich\nSchatten Grün / Cyan HISTORY_MSG_391;(Wavelet) - Restbild\nFarbausgleich\nSchatten Blau / Gelb +HISTORY_MSG_392;(Wavelet) - Restbild\nFarbausgleich HISTORY_MSG_393;(Farbmanagement)\nEingangsfarbprofil\nDCP - Look-Tabelle HISTORY_MSG_394;(Farbmanagement)\nEingangsfarbprofil\nDCP - Basisbelichtung HISTORY_MSG_395;(Farbmanagement)\nEingangsfarbprofil\nDCP - Basistabelle @@ -1340,6 +1346,8 @@ TP_BWMIX_MET;Methode TP_BWMIX_MET_CHANMIX;Kanalmixer TP_BWMIX_MET_DESAT;Entsättigung TP_BWMIX_MET_LUMEQUAL;Luminanz +TP_BWMIX_MIXC;Kanalmixer +TP_BWMIX_NEUTRAL;Zurücksetzen TP_BWMIX_RGBLABEL;R: %1%% G: %2%% B: %3%% Gesamt: %4%% TP_BWMIX_RGBLABEL_HINT;RGB-Faktoren\n\nGesamt: Summe aller RGB-Werte.\n- immer 100% im Modus Relativ\n- höher (heller), oder niedriger (dunkler) 100% im Modus Absolut TP_BWMIX_RGB_TOOLTIP;Mischen Sie die Kanäle. Verwenden Sie die Vorgaben zur Orientierung.\nNegative Werte können zu Artefakten führen. @@ -2275,15 +2283,3 @@ ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen\nTaste: Alt + f ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: + ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - -!!!!!!!!!!!!!!!!!!!!!!!!! -! Untranslated keys follow; remove the ! prefix after an entry is translated. -!!!!!!!!!!!!!!!!!!!!!!!!! - -ADJUSTER_RESET_TO_DEFAULT;Klick - Auf Standardwert zurücksetzen.\nStrg + Klick - Auf Initialwert zurücksetzen. -GENERAL_RESET;Zurücksetzen -HISTORY_MSG_235;(Schwarz/Weiß)\nAuto-Kanalmixer -HISTORY_MSG_237;(Schwarz/Weiß) - Mixer -HISTORY_MSG_273;(Farbanpassungen)\nFarbausgleich\nRegler zurücksetzen -HISTORY_MSG_392;(Wavelet) - Restbild\nFarbausgleich -TP_BWMIX_MIXC;Kanalmixer -TP_BWMIX_NEUTRAL;Zurücksetzen diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index d3a4e4df9..eeb88d099 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -1422,7 +1422,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index 7a786eaba..e5388a850 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -1374,7 +1374,7 @@ !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara index d396c0a9b..700398d27 100644 --- a/rtdata/languages/Euskara +++ b/rtdata/languages/Euskara @@ -1461,7 +1461,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek index adbc57d4c..4df297ba9 100644 --- a/rtdata/languages/Greek +++ b/rtdata/languages/Greek @@ -1460,7 +1460,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew index a9dd7f8ec..633739612 100644 --- a/rtdata/languages/Hebrew +++ b/rtdata/languages/Hebrew @@ -1461,7 +1461,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian index fcc3e0bbb..437fe7451 100644 --- a/rtdata/languages/Latvian +++ b/rtdata/languages/Latvian @@ -1461,7 +1461,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index 2d0747f71..c73ef6469 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -1613,7 +1613,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM index 9af3715a0..b305128a8 100644 --- a/rtdata/languages/Norsk BM +++ b/rtdata/languages/Norsk BM @@ -1460,7 +1460,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index f86b278e6..0ffd63557 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -1376,7 +1376,7 @@ SAVEDLG_TIFFUNCOMPRESSED;TIFF não comprimido !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index 9f3f551cc..98ab8d812 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -1805,7 +1805,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_COLORAPP_LABEL_VIEWING;Viewing Conditions !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak index 0fbcfd64c..1b0bb615c 100644 --- a/rtdata/languages/Slovak +++ b/rtdata/languages/Slovak @@ -1500,7 +1500,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi index ef7534566..060addc5a 100644 --- a/rtdata/languages/Suomi +++ b/rtdata/languages/Suomi @@ -1461,7 +1461,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish index a0c19c4ec..4a830beae 100644 --- a/rtdata/languages/Turkish +++ b/rtdata/languages/Turkish @@ -1460,7 +1460,7 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_COLORAPP_LIGHT;Lightness (J) !TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. !TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_RSTPRO;Red & skin-tones protection diff --git a/rtdata/languages/default b/rtdata/languages/default index c081ff3da..6c8f1c82b 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1373,7 +1373,7 @@ TP_COLORAPP_LABEL_VIEWING;Viewing Conditions TP_COLORAPP_LIGHT;Lightness (J) TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. TP_COLORAPP_MODEL;WP Model -TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected bu user, output device's white balance is set in Viewing Conditions. +TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. TP_COLORAPP_NEUTRAL;Reset TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values TP_COLORAPP_RSTPRO;Red & skin-tones protection From 6189a41435667b422d88d4322030942a2f9b1812 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 27 May 2018 15:17:59 +0200 Subject: [PATCH 25/85] new sharpening settings for bundled PS profiles --- rtdata/profiles/Pixel Shift/PS ISO Low.pp3 | 4 +++- rtdata/profiles/Pixel Shift/PS No Motion.pp3 | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/rtdata/profiles/Pixel Shift/PS ISO Low.pp3 b/rtdata/profiles/Pixel Shift/PS ISO Low.pp3 index 62374cb69..3f907a117 100644 --- a/rtdata/profiles/Pixel Shift/PS ISO Low.pp3 +++ b/rtdata/profiles/Pixel Shift/PS ISO Low.pp3 @@ -4,14 +4,16 @@ Version=332 [Sharpening] Enabled=true +Contrast=5 Method=rld DeconvRadius=0.75 -DeconvAmount=75 +DeconvAmount=100 DeconvDamping=0 DeconvIterations=30 [SharpenMicro] Enabled=true +Contrast=15 Matrix=false Strength=20 Uniformity=50 diff --git a/rtdata/profiles/Pixel Shift/PS No Motion.pp3 b/rtdata/profiles/Pixel Shift/PS No Motion.pp3 index 8f0cce13b..948c98a3a 100644 --- a/rtdata/profiles/Pixel Shift/PS No Motion.pp3 +++ b/rtdata/profiles/Pixel Shift/PS No Motion.pp3 @@ -4,14 +4,16 @@ Version=332 [Sharpening] Enabled=true +Contrast=5 Method=rld DeconvRadius=0.75 -DeconvAmount=75 +DeconvAmount=100 DeconvDamping=0 DeconvIterations=30 [SharpenMicro] Enabled=true +Contrast=15 Matrix=false Strength=20 Uniformity=50 From 6b8633d3d160753c5be3867f029fddbfb607ea86 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 27 May 2018 15:19:47 +0200 Subject: [PATCH 26/85] Microcontrast: move contrast threshold adjuster to top of tool --- rtgui/sharpening.cc | 4 ---- rtgui/sharpenmicro.cc | 27 ++++++--------------------- 2 files changed, 6 insertions(+), 25 deletions(-) diff --git a/rtgui/sharpening.cc b/rtgui/sharpening.cc index 6a020b9e8..89d550e34 100644 --- a/rtgui/sharpening.cc +++ b/rtgui/sharpening.cc @@ -33,10 +33,6 @@ Sharpening::Sharpening () : FoldableToolPanel(this, "sharpening", M("TP_SHARPENI contrast = Gtk::manage(new Adjuster (M("TP_SHARPENING_CONTRAST"), 0, 200, 1, 0)); contrast->setAdjusterListener (this); pack_start(*contrast); - if (contrast->delay < options.adjusterMaxDelay) { - contrast->delay = options.adjusterMaxDelay; - } - contrast->show(); Gtk::Label* ml = Gtk::manage (new Gtk::Label (M("TP_SHARPENING_METHOD") + ":")); diff --git a/rtgui/sharpenmicro.cc b/rtgui/sharpenmicro.cc index ff1447cb3..7c2b4d9fb 100644 --- a/rtgui/sharpenmicro.cc +++ b/rtgui/sharpenmicro.cc @@ -32,40 +32,25 @@ SharpenMicro::SharpenMicro () : FoldableToolPanel(this, "sharpenmicro", M("TP_SH auto m = ProcEventMapper::getInstance(); EvSharpenMicroContrast = m->newEvent(SHARPENING, "HISTORY_MSG_MICROCONTRAST_CONTRAST"); - amount = Gtk::manage(new Adjuster (M("TP_SHARPENMICRO_AMOUNT"), 0, 100, 1, 20)); - amount->setAdjusterListener (this); - - if (amount->delay < options.adjusterMaxDelay) { - amount->delay = options.adjusterMaxDelay; - } - - amount->show(); - contrast = Gtk::manage(new Adjuster (M("TP_SHARPENMICRO_CONTRAST"), 0, 100, 1, 20)); contrast->setAdjusterListener (this); - - if (contrast->delay < options.adjusterMaxDelay) { - contrast->delay = options.adjusterMaxDelay; - } - contrast->show(); + amount = Gtk::manage(new Adjuster (M("TP_SHARPENMICRO_AMOUNT"), 0, 100, 1, 20)); + amount->setAdjusterListener (this); + amount->show(); + uniformity = Gtk::manage(new Adjuster (M("TP_SHARPENMICRO_UNIFORMITY"), 0, 100, 10, 50)); - uniformity->setAdjusterListener (this); - - if (uniformity->delay < options.adjusterMaxDelay) { - uniformity->delay = options.adjusterMaxDelay; - } - uniformity->show(); + matrix = Gtk::manage (new Gtk::CheckButton (M("TP_SHARPENMICRO_MATRIX"))); matrix->set_active (true); pack_start(*matrix, Gtk::PACK_SHRINK, 0); matrix->show (); - pack_start( *amount, Gtk::PACK_SHRINK, 0); pack_start( *contrast, Gtk::PACK_SHRINK, 0); + pack_start( *amount, Gtk::PACK_SHRINK, 0); pack_start( *uniformity, Gtk::PACK_SHRINK, 0); matrixconn = matrix->signal_toggled().connect( sigc::mem_fun(*this, &SharpenMicro::matrix_toggled) ); From 9f3b2a5bddf4384ff764d9285b5c267f61e2d9a4 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 28 May 2018 23:09:22 +0200 Subject: [PATCH 27/85] new defaults for RL-Sharpening --- rtgui/sharpening.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtgui/sharpening.cc b/rtgui/sharpening.cc index 89d550e34..f3bad9f3a 100644 --- a/rtgui/sharpening.cc +++ b/rtgui/sharpening.cc @@ -30,7 +30,7 @@ Sharpening::Sharpening () : FoldableToolPanel(this, "sharpening", M("TP_SHARPENI Gtk::HBox* hb = Gtk::manage (new Gtk::HBox ()); hb->show (); - contrast = Gtk::manage(new Adjuster (M("TP_SHARPENING_CONTRAST"), 0, 200, 1, 0)); + contrast = Gtk::manage(new Adjuster (M("TP_SHARPENING_CONTRAST"), 0, 200, 1, 20)); contrast->setAdjusterListener (this); pack_start(*contrast); contrast->show(); @@ -47,8 +47,8 @@ Sharpening::Sharpening () : FoldableToolPanel(this, "sharpening", M("TP_SHARPENI rld = new Gtk::VBox (); dradius = Gtk::manage (new Adjuster (M("TP_SHARPENING_EDRADIUS"), 0.4, 2.5, 0.01, 0.75)); - damount = Gtk::manage (new Adjuster (M("TP_SHARPENING_RLD_AMOUNT"), 0.0, 100, 1, 75)); - ddamping = Gtk::manage (new Adjuster (M("TP_SHARPENING_RLD_DAMPING"), 0, 100, 1, 20)); + damount = Gtk::manage (new Adjuster (M("TP_SHARPENING_RLD_AMOUNT"), 0.0, 100, 1, 100)); + ddamping = Gtk::manage (new Adjuster (M("TP_SHARPENING_RLD_DAMPING"), 0, 100, 1, 0)); diter = Gtk::manage (new Adjuster (M("TP_SHARPENING_RLD_ITERATIONS"), 5, 100, 1, 30)); rld->pack_start (*dradius); rld->pack_start (*damount); From 9a865449c306b75ce6ab371c0e1478126714aded Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 28 May 2018 23:10:28 +0200 Subject: [PATCH 28/85] Disabled benchmark code --- rtengine/ipsharpen.cc | 30 ++++++++++-------------------- rtengine/procparams.cc | 15 +++++++++++---- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 37a1a0010..e328edd1b 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -16,7 +16,7 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ -#include "rtengine.h" + #include "improcfun.h" #include "gauss.h" #include "bilateral2.h" @@ -24,7 +24,7 @@ #include "rt_math.h" #include "sleef.c" #include "opthelper.h" -#define BENCHMARK +//#define BENCHMARK #include "StopWatch.h" using namespace std; @@ -322,7 +322,7 @@ void ImProcFunctions::sharpening (LabImage* lab, const SharpeningParams &sharpen deconvsharpening (lab->L, b2, lab->W, lab->H, sharpenParam); return; } - +BENCHFUN // Rest is UNSHARP MASK float** b3 = nullptr; @@ -649,24 +649,15 @@ void ImProcFunctions::MLsharpen (LabImage* lab) //! \param luminance : Luminance channel of image void ImProcFunctions::MLmicrocontrast(float** luminance, int W, int H) { - if (!params->sharpenMicro.enabled || params->sharpenMicro.contrast == 100) { + if (!params->sharpenMicro.enabled || params->sharpenMicro.contrast == 100 || params->sharpenMicro.amount < 1.0) { return; } BENCHFUN const int k = params->sharpenMicro.matrix ? 1 : 2; // k=2 matrix 5x5 k=1 matrix 3x3 const int width = W, height = H; - const float uniform = params->sharpenMicro.uniformity; //between 0 to 100 - const int unif = (int)(uniform / 10.0f); //put unif between 0 to 10 - float amount = params->sharpenMicro.amount / 1500.0f; //amount 2000.0 quasi no artifacts ==> 1500 = maximum, after artifacts - - if (amount < 0.000001f) { - return; - } - - if (k == 1) { - amount *= 2.7f; //25/9 if 3x3 - } + const int unif = params->sharpenMicro.uniformity / 10.0f; //put unif between 0 to 10 + const float amount = (k == 1 ? 2.7f : 1.f) * params->sharpenMicro.amount / 1500.0f; //amount 2000.0 quasi no artifacts ==> 1500 = maximum, after artifacts, 25/9 if 3x3 if (settings->verbose) { printf ("Micro-contrast amount %f\n", amount); @@ -694,7 +685,6 @@ BENCHFUN const float Cont4[11] = {0.8f, 0.85f, 0.9f, 0.95f, 1.0f, 1.05f, 1.10f, 1.150f, 1.2f, 1.25f, 1.40f}; const float Cont5[11] = {1.0f, 1.1f, 1.2f, 1.25f, 1.3f, 1.4f, 1.45f, 1.50f, 1.6f, 1.65f, 1.80f}; - const float s = amount; constexpr float sqrt2 = sqrt(2.0); constexpr float sqrt1d25 = sqrt(1.25); float *LM = new float[width * height]; //allocation for Luminance @@ -734,9 +724,9 @@ BENCHFUN contrast = std::min(contrast, 1.f); //matrix 5x5 - float temp = v + 4.f *( v * (s + sqrt2 * s)); //begin 3x3 - float temp1 = sqrt2 * s *(LM[offset - width - 1] + LM[offset - width + 1] + LM[offset + width - 1] + LM[offset + width + 1]); - temp1 += s * (LM[offset - width] + LM[offset - 1] + LM[offset + 1] + LM[offset + width]); + float temp = v + 4.f *( v * (amount + sqrt2 * amount)); //begin 3x3 + float temp1 = sqrt2 * amount *(LM[offset - width - 1] + LM[offset - width + 1] + LM[offset + width - 1] + LM[offset + width + 1]); + temp1 += amount * (LM[offset - width] + LM[offset - 1] + LM[offset + 1] + LM[offset + width]); temp -= temp1; @@ -749,7 +739,7 @@ BENCHFUN temp2 -= sqrt2 * (LM[offset + 2 * width - 2] + LM[offset + 2 * width + 2] + LM[offset - 2 * width - 2] + LM[offset - 2 * width + 2]); temp2 += 18.601126159f * v ; // 18.601126159 = 4 + 4 * sqrt(2) + 8 * sqrt(1.25) - temp2 *= 2.f * s; + temp2 *= 2.f * amount; temp += temp2; } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index ff783369b..dfcb91ebb 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -1007,7 +1007,7 @@ void ColorToningParams::getCurves(ColorGradientCurve& colorCurveLUT, OpacityCurv SharpeningParams::SharpeningParams() : enabled(false), - contrast(0.0), + contrast(20.0), radius(0.5), amount(200), threshold(20, 80, 2000, 1200, false), @@ -1017,10 +1017,10 @@ SharpeningParams::SharpeningParams() : halocontrol(false), halocontrol_amount(85), method("usm"), - deconvamount(75), + deconvamount(100), deconvradius(0.75), deconviter(30), - deconvdamping(20) + deconvdamping(0) { } @@ -3675,7 +3675,14 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) if (keyFile.has_group ("Sharpening")) { assignFromKeyfile(keyFile, "Sharpening", "Enabled", pedited, sharpening.enabled, pedited->sharpening.enabled); - assignFromKeyfile(keyFile, "Sharpening", "Contrast", pedited, sharpening.contrast, pedited->sharpening.contrast); + if (ppVersion >= 334) { + assignFromKeyfile(keyFile, "Sharpening", "Contrast", pedited, sharpening.contrast, pedited->sharpening.contrast); + } else { + sharpening.contrast = 0; + if (pedited) { + pedited->sharpening.contrast = true; + } + } assignFromKeyfile(keyFile, "Sharpening", "Radius", pedited, sharpening.radius, pedited->sharpening.radius); assignFromKeyfile(keyFile, "Sharpening", "Amount", pedited, sharpening.amount, pedited->sharpening.amount); From 5f60a05ffb0bf31dc1466afbbb172f5c745b999b Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Mon, 28 May 2018 23:27:07 +0200 Subject: [PATCH 29/85] generateTranslationDiffs --- rtdata/languages/Catala | 5 +++++ rtdata/languages/Chinese (Simplified) | 5 +++++ rtdata/languages/Chinese (Traditional) | 5 +++++ rtdata/languages/Czech | 5 +++++ rtdata/languages/Dansk | 5 +++++ rtdata/languages/Deutsch | 9 +++++++++ rtdata/languages/English (UK) | 5 +++++ rtdata/languages/English (US) | 5 +++++ rtdata/languages/Espanol | 5 +++++ rtdata/languages/Euskara | 5 +++++ rtdata/languages/Francais | 5 +++++ rtdata/languages/Greek | 5 +++++ rtdata/languages/Hebrew | 5 +++++ rtdata/languages/Italiano | 5 +++++ rtdata/languages/Japanese | 5 +++++ rtdata/languages/Latvian | 5 +++++ rtdata/languages/Magyar | 5 +++++ rtdata/languages/Nederlands | 5 +++++ rtdata/languages/Norsk BM | 5 +++++ rtdata/languages/Polish | 5 +++++ rtdata/languages/Polish (Latin Characters) | 5 +++++ rtdata/languages/Portugues (Brasil) | 5 +++++ rtdata/languages/Russian | 5 +++++ rtdata/languages/Serbian (Cyrilic Characters) | 5 +++++ rtdata/languages/Serbian (Latin Characters) | 5 +++++ rtdata/languages/Slovak | 5 +++++ rtdata/languages/Suomi | 5 +++++ rtdata/languages/Swedish | 5 +++++ rtdata/languages/Turkish | 5 +++++ 29 files changed, 149 insertions(+) diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index 4ef640e95..ee4964b08 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -1328,8 +1328,11 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -2028,6 +2031,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_RGBCURVES_LUMAMODE_TOOLTIP;Luminosity mode allows to vary the contribution of R, G and B channels to the luminosity of the image, without altering image color. !TP_SAVEDIALOG_OK_TIP;Shortcut: Ctrl-Enter !TP_SHADOWSHLIGHTS_SHARPMASK;Sharp mask +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_TM_FATTAL_AMOUNT;Amount !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;HDR Tone Mapping diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index 55c300e06..534cbfd9d 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -1435,8 +1435,11 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. !IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. @@ -2003,6 +2006,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional) index c84441c14..5b4ff37b7 100644 --- a/rtdata/languages/Chinese (Traditional) +++ b/rtdata/languages/Chinese (Traditional) @@ -990,8 +990,11 @@ TP_WBALANCE_TEMPERATURE;色溫 !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -1968,7 +1971,9 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index 3ffa280b7..81a4cdcf1 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -2239,7 +2239,12 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_237;B&W - CM !HISTORY_MSG_273;CT - Color Balance SMH !HISTORY_MSG_392;W - Residual - Color Balance +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !TP_BWMIX_MIXC;Channel Mixer !TP_BWMIX_NEUTRAL;Reset +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index 75196d5c0..58da3d70d 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -985,8 +985,11 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -1966,7 +1969,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index 1005a55e6..71e5ef9ee 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -2283,3 +2283,12 @@ ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen\nTaste: Alt + f ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: + ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index eeb88d099..71db6c642 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -821,8 +821,11 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT;Add !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s @@ -1945,6 +1948,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only !TP_SHARPENING_AMOUNT;Amount +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENING_EDRADIUS;Radius !TP_SHARPENING_EDTOLERANCE;Edge tolerance !TP_SHARPENING_HALOCONTROL;Halo control @@ -1960,6 +1964,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_SHARPENING_THRESHOLD;Threshold !TP_SHARPENING_USM;Unsharp Mask !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index e5388a850..447137702 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -735,8 +735,11 @@ !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT;Add !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s @@ -1935,6 +1938,7 @@ !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only !TP_SHARPENING_AMOUNT;Amount +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENING_EDRADIUS;Radius !TP_SHARPENING_EDTOLERANCE;Edge tolerance !TP_SHARPENING_HALOCONTROL;Halo control @@ -1950,6 +1954,7 @@ !TP_SHARPENING_THRESHOLD;Threshold !TP_SHARPENING_USM;Unsharp Mask !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol index 645e61916..e5cd63d68 100644 --- a/rtdata/languages/Espanol +++ b/rtdata/languages/Espanol @@ -1715,8 +1715,11 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. !IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. @@ -2099,6 +2102,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_TM_FATTAL_AMOUNT;Amount !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;HDR Tone Mapping diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara index 700398d27..b21a8a5f5 100644 --- a/rtdata/languages/Euskara +++ b/rtdata/languages/Euskara @@ -986,8 +986,11 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -1967,7 +1970,9 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index f14e304cf..11598f0b7 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -2211,8 +2211,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_273;CT - Color Balance SMH !HISTORY_MSG_392;W - Residual - Color Balance !HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering @@ -2230,3 +2233,5 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !TP_RAW_PIXELSHIFTEPERISO;Sensitivity !TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images. !TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion. +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek index 4df297ba9..a8b0d3926 100644 --- a/rtdata/languages/Greek +++ b/rtdata/languages/Greek @@ -985,8 +985,11 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -1966,7 +1969,9 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew index 633739612..d12c835b4 100644 --- a/rtdata/languages/Hebrew +++ b/rtdata/languages/Hebrew @@ -986,8 +986,11 @@ TP_WBALANCE_TEMPERATURE;מידת חום !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -1967,7 +1970,9 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano index 5f354a45d..3a61b4222 100644 --- a/rtdata/languages/Italiano +++ b/rtdata/languages/Italiano @@ -1590,8 +1590,11 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. !IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. @@ -2040,6 +2043,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_TM_FATTAL_AMOUNT;Amount !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;HDR Tone Mapping diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index 361da9929..bcf8f5298 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -2241,6 +2241,9 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - !HISTORY_MSG_237;B&W - CM !HISTORY_MSG_273;CT - Color Balance SMH !HISTORY_MSG_392;W - Residual - Color Balance +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !TP_BWMIX_MIXC;Channel Mixer !TP_BWMIX_NEUTRAL;Reset !TP_DIRPYRDENOISE_TYPE_3X3;3×3 @@ -2249,3 +2252,5 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - !TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5 soft !TP_DIRPYRDENOISE_TYPE_7X7;7×7 !TP_DIRPYRDENOISE_TYPE_9X9;9×9 +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian index 437fe7451..ec1f35495 100644 --- a/rtdata/languages/Latvian +++ b/rtdata/languages/Latvian @@ -986,8 +986,11 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -1967,7 +1970,9 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index c73ef6469..06ea44c03 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -1259,8 +1259,11 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -2021,6 +2024,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_RGBCURVES_LUMAMODE_TOOLTIP;Luminosity mode allows to vary the contribution of R, G and B channels to the luminosity of the image, without altering image color. !TP_SAVEDIALOG_OK_TIP;Shortcut: Ctrl-Enter !TP_SHADOWSHLIGHTS_SHARPMASK;Sharp mask +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_TM_FATTAL_AMOUNT;Amount !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;HDR Tone Mapping diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands index b5a1475c7..ad78bedb8 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -2150,8 +2150,11 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !LENSPROFILE_CORRECTION_AUTOMATCH;Auto-matched correction parameters !LENSPROFILE_CORRECTION_LCPFILE;LCP File @@ -2243,6 +2246,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission !TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce transmission map to achieve luminance.\nAbscissa: transmission -min from 0, mean, and values (max).\nOrdinate: gain. +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_TM_FATTAL_AMOUNT;Amount !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;HDR Tone Mapping diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM index b305128a8..0730af236 100644 --- a/rtdata/languages/Norsk BM +++ b/rtdata/languages/Norsk BM @@ -985,8 +985,11 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -1966,7 +1969,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index ec6ecddaa..260e671a1 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -1672,8 +1672,11 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. !IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. @@ -2046,6 +2049,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_TM_FATTAL_AMOUNT;Amount !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;HDR Tone Mapping diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters) index 22845989e..1bf3232cd 100644 --- a/rtdata/languages/Polish (Latin Characters) +++ b/rtdata/languages/Polish (Latin Characters) @@ -1672,8 +1672,11 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. !IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. @@ -2046,6 +2049,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_TM_FATTAL_AMOUNT;Amount !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;HDR Tone Mapping diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index 0ffd63557..23bd1aa30 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -1230,6 +1230,9 @@ SAVEDLG_TIFFUNCOMPRESSED;TIFF não comprimido !HISTORY_MSG_237;B&W - CM !HISTORY_MSG_273;CT - Color Balance SMH !HISTORY_MSG_392;W - Residual - Color Balance +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !SAMPLEFORMAT_0;Unknown data format !SAMPLEFORMAT_1;8-bit unsigned !SAMPLEFORMAT_2;16-bit unsigned @@ -1937,6 +1940,7 @@ SAVEDLG_TIFFUNCOMPRESSED;TIFF não comprimido !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only !TP_SHARPENING_AMOUNT;Amount +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENING_EDRADIUS;Radius !TP_SHARPENING_EDTOLERANCE;Edge tolerance !TP_SHARPENING_HALOCONTROL;Halo control @@ -1952,6 +1956,7 @@ SAVEDLG_TIFFUNCOMPRESSED;TIFF não comprimido !TP_SHARPENING_THRESHOLD;Threshold !TP_SHARPENING_USM;Unsharp Mask !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index 98ab8d812..93bcb609c 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -1650,8 +1650,11 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_487;Lens Correction - Lens !HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. !IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. !IPTCPANEL_COPYRIGHT;Copyright notice @@ -2049,6 +2052,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_TM_FATTAL_ANCHOR;Anchor !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters) index fd747fde5..f792f2b4f 100644 --- a/rtdata/languages/Serbian (Cyrilic Characters) +++ b/rtdata/languages/Serbian (Cyrilic Characters) @@ -1566,8 +1566,11 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. !IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. @@ -2041,6 +2044,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_TM_FATTAL_AMOUNT;Amount !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;HDR Tone Mapping diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters) index 8d051ef1d..57fd19122 100644 --- a/rtdata/languages/Serbian (Latin Characters) +++ b/rtdata/languages/Serbian (Latin Characters) @@ -1566,8 +1566,11 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. !IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. @@ -2041,6 +2044,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_TM_FATTAL_AMOUNT;Amount !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;HDR Tone Mapping diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak index 1b0bb615c..d31549498 100644 --- a/rtdata/languages/Slovak +++ b/rtdata/languages/Slovak @@ -1048,8 +1048,11 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -1976,7 +1979,9 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi index 060addc5a..1ef51ad41 100644 --- a/rtdata/languages/Suomi +++ b/rtdata/languages/Suomi @@ -987,8 +987,11 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -1967,7 +1970,9 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish index d81f939ad..c35a151d7 100644 --- a/rtdata/languages/Swedish +++ b/rtdata/languages/Swedish @@ -1952,8 +1952,11 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. !IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. @@ -2171,6 +2174,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. !TP_RETINEX_VIEW_MASK;Mask !TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible. +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_TM_FATTAL_AMOUNT;Amount !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;HDR Tone Mapping diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish index 4a830beae..e0429dd06 100644 --- a/rtdata/languages/Turkish +++ b/rtdata/languages/Turkish @@ -986,8 +986,11 @@ TP_WBALANCE_TEMPERATURE;Isı !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius !HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. @@ -1966,7 +1969,9 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity +!TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 !TP_SHARPENMICRO_UNIFORMITY;Uniformity From c632e2ac410911a49a58d9cf0e3f9fe61c660ca1 Mon Sep 17 00:00:00 2001 From: TooWaBoo Date: Tue, 29 May 2018 01:21:20 +0200 Subject: [PATCH 30/85] Update Deutsch locale --- rtdata/languages/Deutsch | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index 71e5ef9ee..9ee50bd2d 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -57,6 +57,7 @@ #56 27.04.2018 Erweiterung (TooWaBoo) RT 5.4 #57 17.05.2018 Erweiterung (TooWaBoo) RT 5.4 #58 19.05.2018 Erweiterung (TooWaBoo) RT 5.4 +#59 29.05.2018 Erweiterung (TooWaBoo) RT 5.4 ABOUT_TAB_BUILD;Version ABOUT_TAB_CREDITS;Danksagungen @@ -2287,8 +2288,8 @@ ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! -!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold -!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold -!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold -!TP_SHARPENING_CONTRAST;Contrast threshold -!TP_SHARPENMICRO_CONTRAST;Contrast threshold +HISTORY_MSG_MICROCONTRAST_CONTRAST;(Mikrokontrast)\nKontrastschwelle +HISTORY_MSG_PRSHARPEN_CONTRAST;(Skalieren) - Schärfen\nKontrastschwelle +HISTORY_MSG_SHARPENING_CONTRAST;(Schärfung)\nKontrastschwelle +TP_SHARPENING_CONTRAST;Kontrastschwelle +TP_SHARPENMICRO_CONTRAST;Kontrastschwelle From 710dd13c2f98f1dea82f7c5290b589c9a33c4ee0 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 29 May 2018 15:00:33 +0200 Subject: [PATCH 31/85] First version of combined amaze/vng4 demosaic --- rtengine/CMakeLists.txt | 1 + rtengine/amaze_vng4_demosaic_RT.cc | 171 +++++++++++++++++++++++++++++ rtengine/rawimagesource.cc | 3 +- rtengine/rawimagesource.h | 1 + 4 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 rtengine/amaze_vng4_demosaic_RT.cc diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 5ecd458be..b12fa5e46 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -33,6 +33,7 @@ set(RTENGINESOURCEFILES FTblockDN.cc PF_correct_RT.cc amaze_demosaic_RT.cc + amaze_vng4_demosaic_RT.cc cJSON.c calc_distort.cc camconst.cc diff --git a/rtengine/amaze_vng4_demosaic_RT.cc b/rtengine/amaze_vng4_demosaic_RT.cc new file mode 100644 index 000000000..f6b109bb6 --- /dev/null +++ b/rtengine/amaze_vng4_demosaic_RT.cc @@ -0,0 +1,171 @@ +//////////////////////////////////////////////////////////////// +// +// AMaZE demosaic algorithm +// (Aliasing Minimization and Zipper Elimination) +// +// copyright (c) 2008-2010 Emil Martinec +// optimized for speed by Ingo Weyrich +// +// incorporating ideas of Luis Sanz Rodrigues and Paul Lee +// +// code dated: May 27, 2010 +// latest modification: Ingo Weyrich, January 25, 2016 +// +// amaze_interpolate_RT.cc is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +//////////////////////////////////////////////////////////////// + +#include "rtengine.h" +#include "rawimagesource.h" +#include "rt_math.h" +#include "sleef.c" +#include "opthelper.h" +#include "jaggedarray.h" +#include "gauss.h" +#include "StopWatch.h" + +using namespace std; +namespace { + +float calcBlendFactor(float val, float threshold) { + // sigmoid function + // result is in ]0;1] range + // inflexion point is at (x, y) (threshold, 0.5) + return 1.f / (1.f + xexpf(16.f - 16.f * val / threshold)); +} + +#ifdef __SSE2__ +vfloat calcBlendFactor(vfloat valv, vfloat thresholdv) { + // sigmoid function + // result is in ]0;1] range + // inflexion point is at (x, y) (threshold, 0.5) + const vfloat onev = F2V(1.f); + const vfloat c16v = F2V(16.f); + return onev / (onev + xexpf(c16v - c16v * valv / thresholdv)); +} +#endif + +void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold, float amount = 1.f) { +BENCHFUN + + if(contrastThreshold == 0.f) { + for(int j = 0; j < H; ++j) { + for(int i = 0; i < W; ++i) { + blend[j][i] = 1.f; + } + } + } else { + constexpr float scale = 0.0625f / 327.68f; +#ifdef _OPENMP + #pragma omp parallel +#endif + { +#ifdef __SSE2__ + const vfloat contrastThresholdv = F2V(contrastThreshold); + const vfloat scalev = F2V(scale); + const vfloat amountv = F2V(amount); +#endif +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) +#endif + + for(int j = 2; j < H - 2; ++j) { + int i = 2; +#ifdef __SSE2__ + for(; i < W - 5; i += 4) { + vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) + + SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev; + + STVFU(blend[j][i], amountv * calcBlendFactor(contrastv, contrastThresholdv)); + } +#endif + for(; i < W - 2; ++i) { + + float contrast = sqrtf(rtengine::SQR(luminance[j][i+1] - luminance[j][i-1]) + rtengine::SQR(luminance[j+1][i] - luminance[j-1][i]) + + rtengine::SQR(luminance[j][i+2] - luminance[j][i-2]) + rtengine::SQR(luminance[j+2][i] - luminance[j-2][i])) * scale; + + blend[j][i] = amount * calcBlendFactor(contrast, contrastThreshold); + } + } +#ifdef _OPENMP + #pragma omp single +#endif + { + // upper border + for(int j = 0; j < 2; ++j) { + for(int i = 2; i < W - 2; ++i) { + blend[j][i] = blend[2][i]; + } + } + // lower border + for(int j = H - 2; j < H; ++j) { + for(int i = 2; i < W - 2; ++i) { + blend[j][i] = blend[H-3][i]; + } + } + for(int j = 0; j < H; ++j) { + // left border + blend[j][0] = blend[j][1] = blend[j][2]; + // right border + blend[j][W - 2] = blend[j][W - 1] = blend[j][W - 3]; + } + } + // blur blend mask to smooth transitions + gaussianBlur(blend, blend, W, H, 2.0); + } + } +} +} + +namespace rtengine +{ + +void RawImageSource::amaze_vng4_demosaic_RT(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue) +{ + BENCHFUN + + vng4_demosaic (); + array2D redTmp(winw, winh); + array2D greenTmp(winw, winh); + array2D blueTmp(winw, winh); + array2D L(winw, winh); + amaze_demosaic_RT (0, 0, winw, winh, rawData, redTmp, greenTmp, blueTmp); + const float xyz_rgb[3][3] = { // XYZ from RGB + { 0.412453, 0.357580, 0.180423 }, + { 0.212671, 0.715160, 0.072169 }, + { 0.019334, 0.119193, 0.950227 } + }; + #pragma omp parallel + { + float a[winw] ALIGNED16; + float b[winw] ALIGNED16; + #pragma omp for + for(int i = 0; i < winh; ++i) { + Color::RGB2Lab(redTmp[i], greenTmp[i], blueTmp[i], L[i], a, b, xyz_rgb, winw); + } + } + // calculate contrast based blend factors to reduce sharpening in regions with low contrast + JaggedArray blend(winw, winh); + buildBlendMask(L, blend, winw, winh, 20.f / 100.f); + #pragma omp parallel for + for(int i = 0; i < winh; ++i) { + for(int j = 0; j < winw; ++j) { + red[i][j] = intp(blend[i][j], redTmp[i][j], red[i][j]); + green[i][j] = intp(blend[i][j], greenTmp[i][j], green[i][j]); + blue[i][j] = intp(blend[i][j], blueTmp[i][j], blue[i][j]); + } + } + +} +} diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 6f119a2ad..80c7d8b86 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2078,7 +2078,8 @@ void RawImageSource::demosaic(const RAWParams &raw) } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCB) ) { dcb_demosaic(raw.bayersensor.dcb_iterations, raw.bayersensor.dcb_enhance); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::EAHD)) { - eahd_demosaic (); + amaze_vng4_demosaic_RT (W, H, rawData, red, green, blue); +// eahd_demosaic (); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV)) { igv_interpolate(W, H); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::LMMSE)) { diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 0512af790..b188fdd69 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -268,6 +268,7 @@ protected: void igv_interpolate(int winw, int winh); void lmmse_interpolate_omp(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue, int iterations); void amaze_demosaic_RT(int winx, int winy, int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue);//Emil's code for AMaZE + void amaze_vng4_demosaic_RT(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue);//Emil's code for AMaZE void fast_demosaic();//Emil's code for fast demosaicing void dcb_demosaic(int iterations, bool dcb_enhance); void ahd_demosaic(); From 2a13d129368d5fe26d4bd389205743094adf639f Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 29 May 2018 16:59:29 +0200 Subject: [PATCH 32/85] Amaze+VNG4: created own entry in demosaic combobox, cleaned code --- rtdata/languages/default | 1 + rtengine/amaze_vng4_demosaic_RT.cc | 101 +---------------------------- rtengine/color.cc | 39 +++++++++++ rtengine/color.h | 1 + rtengine/ipsharpen.cc | 90 +------------------------ rtengine/procparams.cc | 3 +- rtengine/procparams.h | 3 +- rtengine/rawimagesource.cc | 5 +- rtengine/rt_algo.cc | 93 ++++++++++++++++++++++++++ rtengine/rt_algo.h | 4 +- 10 files changed, 147 insertions(+), 193 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 5c0273d3f..02ae8aff1 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1763,6 +1763,7 @@ TP_RAW_1PASSMEDIUM;1-Pass (Medium) TP_RAW_3PASSBEST;3-Pass (Best) TP_RAW_AHD;AHD TP_RAW_AMAZE;AMaZE +TP_RAW_AMAZEVNG4;AMaZE+VNG4 TP_RAW_DCB;DCB TP_RAW_DCBENHANCE;DCB enhancement TP_RAW_DCBITERATIONS;Number of DCB iterations diff --git a/rtengine/amaze_vng4_demosaic_RT.cc b/rtengine/amaze_vng4_demosaic_RT.cc index f6b109bb6..b27c26df0 100644 --- a/rtengine/amaze_vng4_demosaic_RT.cc +++ b/rtengine/amaze_vng4_demosaic_RT.cc @@ -29,104 +29,11 @@ #include "rtengine.h" #include "rawimagesource.h" #include "rt_math.h" -#include "sleef.c" -#include "opthelper.h" -#include "jaggedarray.h" -#include "gauss.h" +#define BENCHMARK #include "StopWatch.h" +#include "rt_algo.h" using namespace std; -namespace { - -float calcBlendFactor(float val, float threshold) { - // sigmoid function - // result is in ]0;1] range - // inflexion point is at (x, y) (threshold, 0.5) - return 1.f / (1.f + xexpf(16.f - 16.f * val / threshold)); -} - -#ifdef __SSE2__ -vfloat calcBlendFactor(vfloat valv, vfloat thresholdv) { - // sigmoid function - // result is in ]0;1] range - // inflexion point is at (x, y) (threshold, 0.5) - const vfloat onev = F2V(1.f); - const vfloat c16v = F2V(16.f); - return onev / (onev + xexpf(c16v - c16v * valv / thresholdv)); -} -#endif - -void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold, float amount = 1.f) { -BENCHFUN - - if(contrastThreshold == 0.f) { - for(int j = 0; j < H; ++j) { - for(int i = 0; i < W; ++i) { - blend[j][i] = 1.f; - } - } - } else { - constexpr float scale = 0.0625f / 327.68f; -#ifdef _OPENMP - #pragma omp parallel -#endif - { -#ifdef __SSE2__ - const vfloat contrastThresholdv = F2V(contrastThreshold); - const vfloat scalev = F2V(scale); - const vfloat amountv = F2V(amount); -#endif -#ifdef _OPENMP - #pragma omp for schedule(dynamic,16) -#endif - - for(int j = 2; j < H - 2; ++j) { - int i = 2; -#ifdef __SSE2__ - for(; i < W - 5; i += 4) { - vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) + - SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev; - - STVFU(blend[j][i], amountv * calcBlendFactor(contrastv, contrastThresholdv)); - } -#endif - for(; i < W - 2; ++i) { - - float contrast = sqrtf(rtengine::SQR(luminance[j][i+1] - luminance[j][i-1]) + rtengine::SQR(luminance[j+1][i] - luminance[j-1][i]) + - rtengine::SQR(luminance[j][i+2] - luminance[j][i-2]) + rtengine::SQR(luminance[j+2][i] - luminance[j-2][i])) * scale; - - blend[j][i] = amount * calcBlendFactor(contrast, contrastThreshold); - } - } -#ifdef _OPENMP - #pragma omp single -#endif - { - // upper border - for(int j = 0; j < 2; ++j) { - for(int i = 2; i < W - 2; ++i) { - blend[j][i] = blend[2][i]; - } - } - // lower border - for(int j = H - 2; j < H; ++j) { - for(int i = 2; i < W - 2; ++i) { - blend[j][i] = blend[H-3][i]; - } - } - for(int j = 0; j < H; ++j) { - // left border - blend[j][0] = blend[j][1] = blend[j][2]; - // right border - blend[j][W - 2] = blend[j][W - 1] = blend[j][W - 3]; - } - } - // blur blend mask to smooth transitions - gaussianBlur(blend, blend, W, H, 2.0); - } - } -} -} namespace rtengine { @@ -148,11 +55,9 @@ void RawImageSource::amaze_vng4_demosaic_RT(int winw, int winh, array2D & }; #pragma omp parallel { - float a[winw] ALIGNED16; - float b[winw] ALIGNED16; #pragma omp for for(int i = 0; i < winh; ++i) { - Color::RGB2Lab(redTmp[i], greenTmp[i], blueTmp[i], L[i], a, b, xyz_rgb, winw); + Color::RGB2L(redTmp[i], greenTmp[i], blueTmp[i], L[i], xyz_rgb, winw); } } // calculate contrast based blend factors to reduce sharpening in regions with low contrast diff --git a/rtengine/color.cc b/rtengine/color.cc index c4e3b6a68..5fb8d27d8 100644 --- a/rtengine/color.cc +++ b/rtengine/color.cc @@ -1837,6 +1837,45 @@ void Color::RGB2Lab(float *R, float *G, float *B, float *L, float *a, float *b, } } +void Color::RGB2L(float *R, float *G, float *B, float *L, const float wp[3][3], int width) +{ + +#ifdef __SSE2__ + vfloat minvalfv = F2V(0.f); + vfloat maxvalfv = F2V(MAXVALF); +#endif + int i = 0; + +#ifdef __SSE2__ + for(;i < width - 3; i+=4) { + const vfloat rv = LVFU(R[i]); + const vfloat gv = LVFU(G[i]); + const vfloat bv = LVFU(B[i]); + const vfloat yv = F2V(wp[1][0]) * rv + F2V(wp[1][1]) * gv + F2V(wp[1][2]) * bv; + + vmask maxMask = vmaskf_gt(yv, maxvalfv); + vmask minMask = vmaskf_lt(yv, minvalfv); + if (_mm_movemask_ps((vfloat)maxMask) || _mm_movemask_ps((vfloat)minMask)) { + // take slower code path for all 4 pixels if one of the values is > MAXVALF. Still faster than non SSE2 version + for(int k = 0; k < 4; ++k) { + float y = yv[k]; + L[i + k] = computeXYZ2LabY(y); + } + } else { + STVFU(L[i], cachefy[yv]); + } + } +#endif + for(;i < width; ++i) { + const float rv = R[i]; + const float gv = G[i]; + const float bv = B[i]; + float y = wp[1][0] * rv + wp[1][1] * gv + wp[1][2] * bv; + + L[i] = computeXYZ2LabY(y); + } +} + void Color::XYZ2Lab(float X, float Y, float Z, float &L, float &a, float &b) { diff --git a/rtengine/color.h b/rtengine/color.h index 5616a4079..3310f6fa6 100644 --- a/rtengine/color.h +++ b/rtengine/color.h @@ -611,6 +611,7 @@ public: */ static void XYZ2Lab(float x, float y, float z, float &L, float &a, float &b); static void RGB2Lab(float *X, float *Y, float *Z, float *L, float *a, float *b, const float wp[3][3], int width); + static void RGB2L(float *X, float *Y, float *Z, float *L, const float wp[3][3], int width); /** * @brief Convert Lab in Yuv diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index e328edd1b..e3ecf41b3 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -26,99 +26,11 @@ #include "opthelper.h" //#define BENCHMARK #include "StopWatch.h" +#include "rt_algo.h" using namespace std; namespace { -float calcBlendFactor(float val, float threshold) { - // sigmoid function - // result is in ]0;1] range - // inflexion point is at (x, y) (threshold, 0.5) - return 1.f / (1.f + xexpf(16.f - 16.f * val / threshold)); -} - -#ifdef __SSE2__ -vfloat calcBlendFactor(vfloat valv, vfloat thresholdv) { - // sigmoid function - // result is in ]0;1] range - // inflexion point is at (x, y) (threshold, 0.5) - const vfloat onev = F2V(1.f); - const vfloat c16v = F2V(16.f); - return onev / (onev + xexpf(c16v - c16v * valv / thresholdv)); -} -#endif - -void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold, float amount = 1.f) { -BENCHFUN - - if(contrastThreshold == 0.f) { - for(int j = 0; j < H; ++j) { - for(int i = 0; i < W; ++i) { - blend[j][i] = 1.f; - } - } - } else { - constexpr float scale = 0.0625f / 327.68f; -#ifdef _OPENMP - #pragma omp parallel -#endif - { -#ifdef __SSE2__ - const vfloat contrastThresholdv = F2V(contrastThreshold); - const vfloat scalev = F2V(scale); - const vfloat amountv = F2V(amount); -#endif -#ifdef _OPENMP - #pragma omp for schedule(dynamic,16) -#endif - - for(int j = 2; j < H - 2; ++j) { - int i = 2; -#ifdef __SSE2__ - for(; i < W - 5; i += 4) { - vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) + - SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev; - - STVFU(blend[j][i], amountv * calcBlendFactor(contrastv, contrastThresholdv)); - } -#endif - for(; i < W - 2; ++i) { - - float contrast = sqrtf(SQR(luminance[j][i+1] - luminance[j][i-1]) + SQR(luminance[j+1][i] - luminance[j-1][i]) + - SQR(luminance[j][i+2] - luminance[j][i-2]) + SQR(luminance[j+2][i] - luminance[j-2][i])) * scale; - - blend[j][i] = amount * calcBlendFactor(contrast, contrastThreshold); - } - } -#ifdef _OPENMP - #pragma omp single -#endif - { - // upper border - for(int j = 0; j < 2; ++j) { - for(int i = 2; i < W - 2; ++i) { - blend[j][i] = blend[2][i]; - } - } - // lower border - for(int j = H - 2; j < H; ++j) { - for(int i = 2; i < W - 2; ++i) { - blend[j][i] = blend[H-3][i]; - } - } - for(int j = 0; j < H; ++j) { - // left border - blend[j][0] = blend[j][1] = blend[j][2]; - // right border - blend[j][W - 2] = blend[j][W - 1] = blend[j][W - 3]; - } - } - // blur blend mask to smooth transitions - gaussianBlur(blend, blend, W, H, 2.0); - } - } -} - void sharpenHaloCtrl (float** luminance, float** blurmap, float** base, float** blend, int W, int H, const SharpeningParams &sharpenParam) { diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index dfcb91ebb..ec6df6ace 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2446,7 +2446,8 @@ const std::vector& RAWParams::BayerSensor::getMethodStrings() "fast", "mono", "none", - "pixelshift" + "pixelshift", + "amazevng4" }; return method_strings; } diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 467ecf1e3..e6a253955 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1235,7 +1235,8 @@ struct RAWParams { FAST, MONO, NONE, - PIXELSHIFT + PIXELSHIFT, + AMAZEVNG4 }; enum class PSMotionCorrectionMethod { diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 80c7d8b86..9f217e357 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2073,13 +2073,14 @@ void RawImageSource::demosaic(const RAWParams &raw) ahd_demosaic (); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZE) ) { amaze_demosaic_RT (0, 0, W, H, rawData, red, green, blue); + } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZEVNG4) ) { + amaze_vng4_demosaic_RT (W, H, rawData, red, green, blue); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT) ) { pixelshift(0, 0, W, H, raw.bayersensor, currFrame, ri->get_maker(), ri->get_model(), raw.expos); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCB) ) { dcb_demosaic(raw.bayersensor.dcb_iterations, raw.bayersensor.dcb_enhance); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::EAHD)) { - amaze_vng4_demosaic_RT (W, H, rawData, red, green, blue); -// eahd_demosaic (); + eahd_demosaic (); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV)) { igv_interpolate(W, H); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::LMMSE)) { diff --git a/rtengine/rt_algo.cc b/rtengine/rt_algo.cc index 79508cfb3..21c8eac12 100644 --- a/rtengine/rt_algo.cc +++ b/rtengine/rt_algo.cc @@ -25,7 +25,31 @@ #include #endif +#include "gauss.h" +#include "opthelper.h" #include "rt_algo.h" +#include "rt_math.h" +#include "sleef.c" + +namespace { +float calcBlendFactor(float val, float threshold) { + // sigmoid function + // result is in ]0;1] range + // inflexion point is at (x, y) (threshold, 0.5) + return 1.f / (1.f + xexpf(16.f - 16.f * val / threshold)); +} + +#ifdef __SSE2__ +vfloat calcBlendFactor(vfloat valv, vfloat thresholdv) { + // sigmoid function + // result is in ]0;1] range + // inflexion point is at (x, y) (threshold, 0.5) + const vfloat onev = F2V(1.f); + const vfloat c16v = F2V(16.f); + return onev / (onev + xexpf(c16v - c16v * valv / thresholdv)); +} +#endif +} namespace rtengine { @@ -164,4 +188,73 @@ void findMinMaxPercentile(const float* data, size_t size, float minPrct, float& maxOut += minVal; } +void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold, float amount) { + + if(contrastThreshold == 0.f) { + for(int j = 0; j < H; ++j) { + for(int i = 0; i < W; ++i) { + blend[j][i] = 1.f; + } + } + } else { + constexpr float scale = 0.0625f / 327.68f; +#ifdef _OPENMP + #pragma omp parallel +#endif + { +#ifdef __SSE2__ + const vfloat contrastThresholdv = F2V(contrastThreshold); + const vfloat scalev = F2V(scale); + const vfloat amountv = F2V(amount); +#endif +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) +#endif + + for(int j = 2; j < H - 2; ++j) { + int i = 2; +#ifdef __SSE2__ + for(; i < W - 5; i += 4) { + vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) + + SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev; + + STVFU(blend[j][i], amountv * calcBlendFactor(contrastv, contrastThresholdv)); + } +#endif + for(; i < W - 2; ++i) { + + float contrast = sqrtf(rtengine::SQR(luminance[j][i+1] - luminance[j][i-1]) + rtengine::SQR(luminance[j+1][i] - luminance[j-1][i]) + + rtengine::SQR(luminance[j][i+2] - luminance[j][i-2]) + rtengine::SQR(luminance[j+2][i] - luminance[j-2][i])) * scale; + + blend[j][i] = amount * calcBlendFactor(contrast, contrastThreshold); + } + } +#ifdef _OPENMP + #pragma omp single +#endif + { + // upper border + for(int j = 0; j < 2; ++j) { + for(int i = 2; i < W - 2; ++i) { + blend[j][i] = blend[2][i]; + } + } + // lower border + for(int j = H - 2; j < H; ++j) { + for(int i = 2; i < W - 2; ++i) { + blend[j][i] = blend[H-3][i]; + } + } + for(int j = 0; j < H; ++j) { + // left border + blend[j][0] = blend[j][1] = blend[j][2]; + // right border + blend[j][W - 2] = blend[j][W - 1] = blend[j][W - 3]; + } + } + // blur blend mask to smooth transitions + gaussianBlur(blend, blend, W, H, 2.0); + } + } +} } diff --git a/rtengine/rt_algo.h b/rtengine/rt_algo.h index 2630bbf41..1aac26c3e 100644 --- a/rtengine/rt_algo.h +++ b/rtengine/rt_algo.h @@ -20,10 +20,10 @@ #pragma once #include +#include "jaggedarray.h" namespace rtengine { - void findMinMaxPercentile(const float* data, size_t size, float minPrct, float& minOut, float maxPrct, float& maxOut, bool multiThread = true); - +void buildBlendMask(float** luminance, rtengine::JaggedArray &blend, int W, int H, float contrastThreshold, float amount = 1.f); } From 7d0d6246327b47965e1fd50bbcab49f66eaa885d Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 29 May 2018 18:24:06 +0200 Subject: [PATCH 33/85] Fixed clang-mp 3.9/c++11 compilation --- rtengine/ipsharpen.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index e328edd1b..405f1bd80 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -685,8 +685,8 @@ BENCHFUN const float Cont4[11] = {0.8f, 0.85f, 0.9f, 0.95f, 1.0f, 1.05f, 1.10f, 1.150f, 1.2f, 1.25f, 1.40f}; const float Cont5[11] = {1.0f, 1.1f, 1.2f, 1.25f, 1.3f, 1.4f, 1.45f, 1.50f, 1.6f, 1.65f, 1.80f}; - constexpr float sqrt2 = sqrt(2.0); - constexpr float sqrt1d25 = sqrt(1.25); + const float sqrt2 = sqrt(2.0); + const float sqrt1d25 = sqrt(1.25); float *LM = new float[width * height]; //allocation for Luminance // calculate contrast based blend factors to reduce sharpening in regions with low contrast From 355fcbad8e126f01ee976611b5dd0d412a64994e Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 30 May 2018 14:39:29 +0200 Subject: [PATCH 34/85] AMaZE+VNG4: added contrast threshold adjuster, #4579 --- rtdata/languages/default | 2 + rtengine/amaze_vng4_demosaic_RT.cc | 91 +++++++++++++++++------------- rtengine/color.cc | 2 +- rtengine/procparams.cc | 5 ++ rtengine/procparams.h | 1 + rtengine/rawimagesource.cc | 2 +- rtengine/rawimagesource.h | 2 +- rtgui/bayerprocess.cc | 41 ++++++++++++++ rtgui/bayerprocess.h | 3 + rtgui/paramsedited.cc | 8 ++- rtgui/paramsedited.h | 1 + 11 files changed, 116 insertions(+), 42 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 02ae8aff1..5f16404c2 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -727,6 +727,7 @@ HISTORY_MSG_492;RGB Curves HISTORY_MSG_493;L*a*b* Adjustments HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction +HISTORY_MSG_DUALDEMOSAIC_CONTRAST;AMaZE+VNG4 - Contrast threshold HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness @@ -1771,6 +1772,7 @@ TP_RAW_DMETHOD;Method TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing... TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement... TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax/Sony Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files. +TP_RAW_DUALDEMOSAICCONTRAST;Contrast threshold TP_RAW_EAHD;EAHD TP_RAW_FALSECOLOR;False color suppression steps TP_RAW_FAST;Fast diff --git a/rtengine/amaze_vng4_demosaic_RT.cc b/rtengine/amaze_vng4_demosaic_RT.cc index b27c26df0..0dae2c49b 100644 --- a/rtengine/amaze_vng4_demosaic_RT.cc +++ b/rtengine/amaze_vng4_demosaic_RT.cc @@ -1,17 +1,14 @@ //////////////////////////////////////////////////////////////// // -// AMaZE demosaic algorithm -// (Aliasing Minimization and Zipper Elimination) +// combined AMaZE + VNG4 demosaic algorithm // -// copyright (c) 2008-2010 Emil Martinec -// optimized for speed by Ingo Weyrich // -// incorporating ideas of Luis Sanz Rodrigues and Paul Lee +// copyright (c) 2018 Ingo Weyrich // -// code dated: May 27, 2010 -// latest modification: Ingo Weyrich, January 25, 2016 +// blends AMaZE and VNG4 output based on contrast // -// amaze_interpolate_RT.cc is free software: you can redistribute it and/or modify +// +// amaze_vng4_demosaic_RT.cc is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -38,39 +35,57 @@ using namespace std; namespace rtengine { -void RawImageSource::amaze_vng4_demosaic_RT(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue) +void RawImageSource::amaze_vng4_demosaic_RT(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue, double contrast) { BENCHFUN - vng4_demosaic (); - array2D redTmp(winw, winh); - array2D greenTmp(winw, winh); - array2D blueTmp(winw, winh); - array2D L(winw, winh); - amaze_demosaic_RT (0, 0, winw, winh, rawData, redTmp, greenTmp, blueTmp); - const float xyz_rgb[3][3] = { // XYZ from RGB - { 0.412453, 0.357580, 0.180423 }, - { 0.212671, 0.715160, 0.072169 }, - { 0.019334, 0.119193, 0.950227 } - }; - #pragma omp parallel - { - #pragma omp for - for(int i = 0; i < winh; ++i) { - Color::RGB2L(redTmp[i], greenTmp[i], blueTmp[i], L[i], xyz_rgb, winw); - } - } - // calculate contrast based blend factors to reduce sharpening in regions with low contrast - JaggedArray blend(winw, winh); - buildBlendMask(L, blend, winw, winh, 20.f / 100.f); - #pragma omp parallel for - for(int i = 0; i < winh; ++i) { - for(int j = 0; j < winw; ++j) { - red[i][j] = intp(blend[i][j], redTmp[i][j], red[i][j]); - green[i][j] = intp(blend[i][j], greenTmp[i][j], green[i][j]); - blue[i][j] = intp(blend[i][j], blueTmp[i][j], blue[i][j]); - } - } + if (contrast == 0.0) { + // contrast == 0.0 means only AMaZE will be used + amaze_demosaic_RT (0, 0, winw, winh, rawData, red, green, blue); + return; + } + + vng4_demosaic (); + array2D redTmp(winw, winh); + array2D greenTmp(winw, winh); + array2D blueTmp(winw, winh); + array2D L(winw, winh); + amaze_demosaic_RT (0, 0, winw, winh, rawData, redTmp, greenTmp, blueTmp); + const float xyz_rgb[3][3] = { // XYZ from RGB + { 0.412453, 0.357580, 0.180423 }, + { 0.212671, 0.715160, 0.072169 }, + { 0.019334, 0.119193, 0.950227 } + }; + #pragma omp parallel + { + #pragma omp for + for(int i = 0; i < winh; ++i) { + Color::RGB2L(redTmp[i], greenTmp[i], blueTmp[i], L[i], xyz_rgb, winw); + } + } + // calculate contrast based blend factors to reduce sharpening in regions with low contrast + JaggedArray blend(winw, winh); + buildBlendMask(L, blend, winw, winh, contrast / 100.f); + + // the following is split into 3 loops intentionally to avoid cache conflicts on CPUs with only 4-way cache + #pragma omp parallel for + for(int i = 0; i < winh; ++i) { + for(int j = 0; j < winw; ++j) { + red[i][j] = intp(blend[i][j], redTmp[i][j], red[i][j]); + } + } + #pragma omp parallel for + for(int i = 0; i < winh; ++i) { + for(int j = 0; j < winw; ++j) { + green[i][j] = intp(blend[i][j], greenTmp[i][j], green[i][j]); + } + } + #pragma omp parallel for + for(int i = 0; i < winh; ++i) { + for(int j = 0; j < winw; ++j) { + blue[i][j] = intp(blend[i][j], blueTmp[i][j], blue[i][j]); + } + } } } diff --git a/rtengine/color.cc b/rtengine/color.cc index 5fb8d27d8..3cedcaaa6 100644 --- a/rtengine/color.cc +++ b/rtengine/color.cc @@ -1855,7 +1855,7 @@ void Color::RGB2L(float *R, float *G, float *B, float *L, const float wp[3][3], vmask maxMask = vmaskf_gt(yv, maxvalfv); vmask minMask = vmaskf_lt(yv, minvalfv); - if (_mm_movemask_ps((vfloat)maxMask) || _mm_movemask_ps((vfloat)minMask)) { + if (_mm_movemask_ps((vfloat)vorm(maxMask, minMask))) { // take slower code path for all 4 pixels if one of the values is > MAXVALF. Still faster than non SSE2 version for(int k = 0; k < 4; ++k) { float y = yv[k]; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index ec6df6ace..eb47d29db 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2357,6 +2357,7 @@ RAWParams::BayerSensor::BayerSensor() : greenthresh(0), dcb_iterations(2), lmmse_iterations(2), + dualDemosaicContrast(20), pixelShiftMotionCorrectionMethod(PSMotionCorrectionMethod::AUTO), pixelShiftEperIso(0.0), pixelShiftSigma(1.0), @@ -2392,6 +2393,7 @@ bool RAWParams::BayerSensor::operator ==(const BayerSensor& other) const && greenthresh == other.greenthresh && dcb_iterations == other.dcb_iterations && lmmse_iterations == other.lmmse_iterations + && dualDemosaicContrast == other.dualDemosaicContrast && pixelShiftMotionCorrectionMethod == other.pixelShiftMotionCorrectionMethod && pixelShiftEperIso == other.pixelShiftEperIso && pixelShiftSigma == other.pixelShiftSigma @@ -3333,6 +3335,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->raw.bayersensor.dcbIterations, "RAW Bayer", "DCBIterations", raw.bayersensor.dcb_iterations, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.dcbEnhance, "RAW Bayer", "DCBEnhance", raw.bayersensor.dcb_enhance, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.lmmseIterations, "RAW Bayer", "LMMSEIterations", raw.bayersensor.lmmse_iterations, keyFile); + saveToKeyfile(!pedited || pedited->raw.bayersensor.dualDemosaicContrast, "RAW Bayer", "DualDemosaicContrast", raw.bayersensor.dualDemosaicContrast, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftMotionCorrectionMethod, "RAW Bayer", "PixelShiftMotionCorrectionMethod", toUnderlying(raw.bayersensor.pixelShiftMotionCorrectionMethod), keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftEperIso, "RAW Bayer", "PixelShiftEperIso", raw.bayersensor.pixelShiftEperIso, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftSigma, "RAW Bayer", "PixelShiftSigma", raw.bayersensor.pixelShiftSigma, keyFile); @@ -4622,6 +4625,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "RAW", "DCBIterations", pedited, raw.bayersensor.dcb_iterations, pedited->raw.bayersensor.dcbIterations); assignFromKeyfile(keyFile, "RAW", "DCBEnhance", pedited, raw.bayersensor.dcb_enhance, pedited->raw.bayersensor.dcbEnhance); assignFromKeyfile(keyFile, "RAW", "LMMSEIterations", pedited, raw.bayersensor.lmmse_iterations, pedited->raw.bayersensor.lmmseIterations); + assignFromKeyfile(keyFile, "RAW", "DualDemosaicContrast", pedited, raw.bayersensor.dualDemosaicContrast, pedited->raw.bayersensor.dualDemosaicContrast); assignFromKeyfile(keyFile, "RAW", "PreBlackzero", pedited, raw.bayersensor.black0, pedited->raw.bayersensor.exBlack0); assignFromKeyfile(keyFile, "RAW", "PreBlackone", pedited, raw.bayersensor.black1, pedited->raw.bayersensor.exBlack1); assignFromKeyfile(keyFile, "RAW", "PreBlacktwo", pedited, raw.bayersensor.black2, pedited->raw.bayersensor.exBlack2); @@ -4658,6 +4662,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "RAW Bayer", "DCBIterations", pedited, raw.bayersensor.dcb_iterations, pedited->raw.bayersensor.dcbIterations); assignFromKeyfile(keyFile, "RAW Bayer", "DCBEnhance", pedited, raw.bayersensor.dcb_enhance, pedited->raw.bayersensor.dcbEnhance); assignFromKeyfile(keyFile, "RAW Bayer", "LMMSEIterations", pedited, raw.bayersensor.lmmse_iterations, pedited->raw.bayersensor.lmmseIterations); + assignFromKeyfile(keyFile, "RAW Bayer", "DualDemosaicContrast", pedited, raw.bayersensor.dualDemosaicContrast, pedited->raw.bayersensor.dualDemosaicContrast); if (keyFile.has_key ("RAW Bayer", "PixelShiftMotionCorrectionMethod")) { raw.bayersensor.pixelShiftMotionCorrectionMethod = (RAWParams::BayerSensor::PSMotionCorrectionMethod)keyFile.get_integer ("RAW Bayer", "PixelShiftMotionCorrectionMethod"); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index e6a253955..be7784e1b 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1264,6 +1264,7 @@ struct RAWParams { int greenthresh; int dcb_iterations; int lmmse_iterations; + double dualDemosaicContrast; PSMotionCorrectionMethod pixelShiftMotionCorrectionMethod; double pixelShiftEperIso; double pixelShiftSigma; diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 9f217e357..ce300bcd7 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2074,7 +2074,7 @@ void RawImageSource::demosaic(const RAWParams &raw) } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZE) ) { amaze_demosaic_RT (0, 0, W, H, rawData, red, green, blue); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZEVNG4) ) { - amaze_vng4_demosaic_RT (W, H, rawData, red, green, blue); + amaze_vng4_demosaic_RT (W, H, rawData, red, green, blue, raw.bayersensor.dualDemosaicContrast); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT) ) { pixelshift(0, 0, W, H, raw.bayersensor, currFrame, ri->get_maker(), ri->get_model(), raw.expos); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCB) ) { diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index b188fdd69..e2467dba6 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -268,7 +268,7 @@ protected: void igv_interpolate(int winw, int winh); void lmmse_interpolate_omp(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue, int iterations); void amaze_demosaic_RT(int winx, int winy, int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue);//Emil's code for AMaZE - void amaze_vng4_demosaic_RT(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue);//Emil's code for AMaZE + void amaze_vng4_demosaic_RT(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue, double contrast = 0.0); void fast_demosaic();//Emil's code for fast demosaicing void dcb_demosaic(int iterations, bool dcb_enhance); void ahd_demosaic(); diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc index 73fea1aa3..d08ec0393 100644 --- a/rtgui/bayerprocess.cc +++ b/rtgui/bayerprocess.cc @@ -17,6 +17,7 @@ * along with RawTherapee. If not, see . */ #include "bayerprocess.h" +#include "eventmapper.h" #include "options.h" #include "guiutils.h" using namespace rtengine; @@ -25,6 +26,10 @@ using namespace rtengine::procparams; BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RAW_LABEL"), true) { + + auto m = ProcEventMapper::getInstance(); + EvDemosaicContrast = m->newEvent(DEMOSAIC, "HISTORY_MSG_DUALDEMOSAIC_CONTRAST"); + Gtk::HBox* hb1 = Gtk::manage (new Gtk::HBox ()); hb1->pack_start (*Gtk::manage (new Gtk::Label ( M("TP_RAW_DMETHOD") + ": ")), Gtk::PACK_SHRINK, 4); method = Gtk::manage (new MyComboBoxText ()); @@ -93,6 +98,20 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA lmmseOptions->pack_start(*lmmseIterations); pack_start( *lmmseOptions, Gtk::PACK_SHRINK, 4); + dualDemosaicOptions = Gtk::manage (new Gtk::VBox ()); + + dualDemosaicContrast = Gtk::manage(new Adjuster (M("TP_RAW_DUALDEMOSAICCONTRAST"), 0, 200, 1, 20)); + dualDemosaicContrast->setAdjusterListener (this); +// dualDemosaicContrast->set_tooltip_markup (M("TP_RAW_LMMSE_TOOLTIP")); + + if (dualDemosaicContrast->delay < options.adjusterMaxDelay) { + dualDemosaicContrast->delay = options.adjusterMaxDelay; + } + + dualDemosaicContrast->show(); + dualDemosaicOptions->pack_start(*dualDemosaicContrast); + pack_start( *dualDemosaicOptions, Gtk::PACK_SHRINK, 4); + pixelShiftFrame = Gtk::manage (new Gtk::VBox ()); pixelShiftFrame->set_border_width(0); @@ -248,6 +267,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params pixelShiftNonGreenCross->setValue (pp->raw.bayersensor.pixelShiftNonGreenCross); ccSteps->setValue (pp->raw.bayersensor.ccSteps); lmmseIterations->setValue (pp->raw.bayersensor.lmmse_iterations); + dualDemosaicContrast->setValue (pp->raw.bayersensor.dualDemosaicContrast); pixelShiftMotionMethod->set_active ((int)pp->raw.bayersensor.pixelShiftMotionCorrectionMethod); pixelShiftEperIso->setValue (pp->raw.bayersensor.pixelShiftEperIso); pixelShiftSigma->setValue (pp->raw.bayersensor.pixelShiftSigma); @@ -271,6 +291,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params pixelShiftEqualBrightChannel->setEdited (pedited->raw.bayersensor.pixelShiftEqualBrightChannel); pixelShiftNonGreenCross->setEdited (pedited->raw.bayersensor.pixelShiftNonGreenCross); lmmseIterations->setEditedState ( pedited->raw.bayersensor.lmmseIterations ? Edited : UnEdited); + dualDemosaicContrast->setEditedState ( pedited->raw.bayersensor.dualDemosaicContrast ? Edited : UnEdited); pixelShiftEperIso->setEditedState ( pedited->raw.bayersensor.pixelShiftEperIso ? Edited : UnEdited); pixelShiftSigma->setEditedState ( pedited->raw.bayersensor.pixelShiftSigma ? Edited : UnEdited); @@ -298,6 +319,12 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params } else { lmmseOptions->hide(); } + if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::AMAZEVNG4) || + method->get_active_row_number() == std::numeric_limits::max()) { + dualDemosaicOptions->show(); + } else { + dualDemosaicOptions->hide(); + } if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::PIXELSHIFT) || method->get_active_row_number() == std::numeric_limits::max()) { if(pp->raw.bayersensor.pixelShiftMotionCorrectionMethod == RAWParams::BayerSensor::PSMotionCorrectionMethod::CUSTOM) { @@ -335,6 +362,7 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe pp->raw.bayersensor.dcb_enhance = dcbEnhance->getLastActive (); //pp->raw.bayersensor.all_enhance = allEnhance->getLastActive (); pp->raw.bayersensor.lmmse_iterations = lmmseIterations->getIntValue(); + pp->raw.bayersensor.dualDemosaicContrast = dualDemosaicContrast->getValue(); pp->raw.bayersensor.pixelShiftMotionCorrectionMethod = (RAWParams::BayerSensor::PSMotionCorrectionMethod)pixelShiftMotionMethod->get_active_row_number(); pp->raw.bayersensor.pixelShiftEperIso = pixelShiftEperIso->getValue(); pp->raw.bayersensor.pixelShiftSigma = pixelShiftSigma->getValue(); @@ -369,6 +397,7 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe pedited->raw.bayersensor.dcbEnhance = !dcbEnhance->get_inconsistent(); //pedited->raw.bayersensor.allEnhance = !allEnhance->get_inconsistent(); pedited->raw.bayersensor.lmmseIterations = lmmseIterations->getEditedState (); + pedited->raw.bayersensor.dualDemosaicContrast = dualDemosaicContrast->getEditedState (); pedited->raw.bayersensor.pixelShiftMotionCorrectionMethod = pixelShiftMotionMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->raw.bayersensor.pixelShiftEperIso = pixelShiftEperIso->getEditedState (); pedited->raw.bayersensor.pixelShiftSigma = pixelShiftSigma->getEditedState (); @@ -398,6 +427,7 @@ void BayerProcess::setBatchMode(bool batchMode) ccSteps->showEditedCB (); dcbIterations->showEditedCB (); lmmseIterations->showEditedCB (); + dualDemosaicContrast->showEditedCB (); pixelShiftEperIso->showEditedCB (); pixelShiftSigma->showEditedCB (); } @@ -406,6 +436,7 @@ void BayerProcess::setDefaults(const rtengine::procparams::ProcParams* defParams { dcbIterations->setDefault( defParams->raw.bayersensor.dcb_iterations); lmmseIterations->setDefault( defParams->raw.bayersensor.lmmse_iterations); + dualDemosaicContrast->setDefault( defParams->raw.bayersensor.dualDemosaicContrast); pixelShiftEperIso->setDefault( defParams->raw.bayersensor.pixelShiftEperIso); pixelShiftSigma->setDefault( defParams->raw.bayersensor.pixelShiftSigma); ccSteps->setDefault (defParams->raw.bayersensor.ccSteps); @@ -413,12 +444,14 @@ void BayerProcess::setDefaults(const rtengine::procparams::ProcParams* defParams if (pedited) { dcbIterations->setDefaultEditedState( pedited->raw.bayersensor.dcbIterations ? Edited : UnEdited); lmmseIterations->setDefaultEditedState( pedited->raw.bayersensor.lmmseIterations ? Edited : UnEdited); + dualDemosaicContrast->setDefaultEditedState( pedited->raw.bayersensor.dualDemosaicContrast ? Edited : UnEdited); pixelShiftEperIso->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftEperIso ? Edited : UnEdited); pixelShiftSigma->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftSigma ? Edited : UnEdited); ccSteps->setDefaultEditedState(pedited->raw.bayersensor.ccSteps ? Edited : UnEdited); } else { dcbIterations->setDefaultEditedState( Irrelevant ); lmmseIterations->setDefaultEditedState( Irrelevant ); + dualDemosaicContrast->setDefaultEditedState( Irrelevant ); pixelShiftEperIso->setDefaultEditedState( Irrelevant ); pixelShiftSigma->setDefaultEditedState( Irrelevant ); ccSteps->setDefaultEditedState(Irrelevant ); @@ -434,6 +467,8 @@ void BayerProcess::adjusterChanged (Adjuster* a, double newval) listener->panelChanged (EvDemosaicFalseColorIter, a->getTextValue() ); } else if (a == lmmseIterations) { listener->panelChanged (EvDemosaicLMMSEIter, a->getTextValue() ); + } else if (a == dualDemosaicContrast) { + listener->panelChanged (EvDemosaicContrast, a->getTextValue() ); } else if (a == pixelShiftEperIso) { listener->panelChanged (EvPixelShiftEperIso, a->getTextValue() ); } else if (a == pixelShiftSigma) { @@ -462,6 +497,12 @@ void BayerProcess::methodChanged () lmmseOptions->hide(); } + if (method == procparams::RAWParams::BayerSensor::Method::AMAZEVNG4) { + dualDemosaicOptions->show(); + } else { + dualDemosaicOptions->hide(); + } + if (method == procparams::RAWParams::BayerSensor::Method::PIXELSHIFT) { if(pixelShiftMotionMethod->get_active_row_number() == 2) { pixelShiftOptions->show(); diff --git a/rtgui/bayerprocess.h b/rtgui/bayerprocess.h index 48b445d90..84701a52e 100644 --- a/rtgui/bayerprocess.h +++ b/rtgui/bayerprocess.h @@ -55,9 +55,12 @@ protected: Adjuster* pixelShiftSmooth; Adjuster* pixelShiftEperIso; Adjuster* pixelShiftSigma; + Gtk::VBox *dualDemosaicOptions; + Adjuster* dualDemosaicContrast; int oldMethod; IdleRegister idle_register; + rtengine::ProcEvent EvDemosaicContrast; public: BayerProcess (); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 0eebe2e41..bf5a63fa8 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -403,6 +403,7 @@ void ParamsEdited::set (bool v) raw.bayersensor.dcbEnhance = v; //raw.bayersensor.allEnhance = v; raw.bayersensor.lmmseIterations = v; + raw.bayersensor.dualDemosaicContrast = v; raw.bayersensor.pixelShiftMotionCorrectionMethod = v; raw.bayersensor.pixelShiftEperIso = v; raw.bayersensor.pixelShiftSigma = v; @@ -952,6 +953,7 @@ void ParamsEdited::initFrom (const std::vector raw.bayersensor.dcbEnhance = raw.bayersensor.dcbEnhance && p.raw.bayersensor.dcb_enhance == other.raw.bayersensor.dcb_enhance; //raw.bayersensor.allEnhance = raw.bayersensor.allEnhance && p.raw.bayersensor.all_enhance == other.raw.bayersensor.all_enhance; raw.bayersensor.lmmseIterations = raw.bayersensor.lmmseIterations && p.raw.bayersensor.lmmse_iterations == other.raw.bayersensor.lmmse_iterations; + raw.bayersensor.dualDemosaicContrast = raw.bayersensor.dualDemosaicContrast && p.raw.bayersensor.dualDemosaicContrast == other.raw.bayersensor.dualDemosaicContrast; raw.bayersensor.pixelShiftMotionCorrectionMethod = raw.bayersensor.pixelShiftMotionCorrectionMethod && p.raw.bayersensor.pixelShiftMotionCorrectionMethod == other.raw.bayersensor.pixelShiftMotionCorrectionMethod; raw.bayersensor.pixelShiftEperIso = raw.bayersensor.pixelShiftEperIso && p.raw.bayersensor.pixelShiftEperIso == other.raw.bayersensor.pixelShiftEperIso; raw.bayersensor.pixelShiftSigma = raw.bayersensor.pixelShiftSigma && p.raw.bayersensor.pixelShiftSigma == other.raw.bayersensor.pixelShiftSigma; @@ -2496,6 +2498,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten toEdit.raw.bayersensor.lmmse_iterations = mods.raw.bayersensor.lmmse_iterations; } + if (raw.bayersensor.dualDemosaicContrast) { + toEdit.raw.bayersensor.dualDemosaicContrast = mods.raw.bayersensor.dualDemosaicContrast; + } + if (raw.bayersensor.pixelShiftMotionCorrectionMethod) { toEdit.raw.bayersensor.pixelShiftMotionCorrectionMethod = mods.raw.bayersensor.pixelShiftMotionCorrectionMethod; } @@ -3072,7 +3078,7 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten bool RAWParamsEdited::BayerSensor::isUnchanged() const { - return method && imageNum && dcbIterations && dcbEnhance && lmmseIterations/*&& allEnhance*/ && greenEq + return method && imageNum && dcbIterations && dcbEnhance && lmmseIterations && dualDemosaicContrast /*&& allEnhance*/ && greenEq && pixelShiftMotionCorrectionMethod && pixelShiftEperIso && pixelShiftSigma && pixelShiftShowMotion && pixelShiftShowMotionMaskOnly && pixelShiftHoleFill && pixelShiftMedian && pixelShiftNonGreenCross && pixelShiftGreen && pixelShiftBlur && pixelShiftSmooth && pixelShiftLmmse && pixelShiftEqualBright && pixelShiftEqualBrightChannel && linenoise && linenoiseDirection && pdafLinesFilter && exBlack0 && exBlack1 && exBlack2 && exBlack3 && exTwoGreen; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 47fb70ef0..5b3370b9a 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -731,6 +731,7 @@ public: bool dcbIterations; bool dcbEnhance; bool lmmseIterations; + bool dualDemosaicContrast; bool pixelShiftMotionCorrectionMethod; bool pixelShiftEperIso; bool pixelShiftSigma; From a0b8626b7d5e5014bf94603ae0885216647f42a6 Mon Sep 17 00:00:00 2001 From: Hombre Date: Thu, 31 May 2018 00:44:16 +0200 Subject: [PATCH 35/85] Adding ADD/SET mechanism to the raw processing tools see #4579 --- rtengine/procparams.cc | 2 -- rtgui/addsetids.h | 7 +++++ rtgui/batchtoolpanelcoord.cc | 11 ++++++++ rtgui/bayerprocess.cc | 52 +++++++++++++++++++----------------- rtgui/bayerprocess.h | 18 +++++++------ rtgui/ppversion.h | 4 ++- rtgui/preferences.cc | 13 +++++++++ rtgui/xtransprocess.cc | 5 ++++ rtgui/xtransprocess.h | 13 ++++----- 9 files changed, 83 insertions(+), 42 deletions(-) diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index eb47d29db..3a244f5e8 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -33,7 +33,6 @@ #include "../rtgui/version.h" using namespace std; -extern Options options; namespace { @@ -4625,7 +4624,6 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "RAW", "DCBIterations", pedited, raw.bayersensor.dcb_iterations, pedited->raw.bayersensor.dcbIterations); assignFromKeyfile(keyFile, "RAW", "DCBEnhance", pedited, raw.bayersensor.dcb_enhance, pedited->raw.bayersensor.dcbEnhance); assignFromKeyfile(keyFile, "RAW", "LMMSEIterations", pedited, raw.bayersensor.lmmse_iterations, pedited->raw.bayersensor.lmmseIterations); - assignFromKeyfile(keyFile, "RAW", "DualDemosaicContrast", pedited, raw.bayersensor.dualDemosaicContrast, pedited->raw.bayersensor.dualDemosaicContrast); assignFromKeyfile(keyFile, "RAW", "PreBlackzero", pedited, raw.bayersensor.black0, pedited->raw.bayersensor.exBlack0); assignFromKeyfile(keyFile, "RAW", "PreBlackone", pedited, raw.bayersensor.black1, pedited->raw.bayersensor.exBlack1); assignFromKeyfile(keyFile, "RAW", "PreBlacktwo", pedited, raw.bayersensor.black2, pedited->raw.bayersensor.exBlack2); diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index c5913a6e2..15c6ba078 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -136,6 +136,13 @@ enum { ADDSET_FATTAL_ANCHOR, ADDSET_SHARPENMICRO_CONTRAST, ADDSET_SHARP_CONTRAST, + ADDSET_BAYER_FALSE_COLOR_SUPPRESSION, + ADDSET_BAYER_ITER, + ADDSET_BAYER_PS_SMOOTH, + ADDSET_BAYER_PS_EPERISO, + ADDSET_BAYER_PS_SIGMA, + ADDSET_BAYER_DUALDEMOZCONTRAST, + ADDSET_XTRANS_FALSE_COLOR_SUPPRESSION, ADDSET_PARAM_NUM // THIS IS USED AS A DELIMITER!! }; diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index 856f3a112..81f61471e 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -164,6 +164,8 @@ void BatchToolPanelCoordinator::initSession () dirpyrequalizer->setAdjusterBehavior (false, false, false); wavelet->setAdjusterBehavior (false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false); dirpyrdenoise->setAdjusterBehavior (false, false, false, false, false, false, false); + bayerprocess->setAdjusterBehavior(false, false, false, false, false, false); + xtransprocess->setAdjusterBehavior(false); bayerpreprocess->setAdjusterBehavior (false, false); rawcacorrection->setAdjusterBehavior (false); flatfield->setAdjusterBehavior(false); @@ -209,6 +211,8 @@ void BatchToolPanelCoordinator::initSession () dirpyrequalizer->setAdjusterBehavior (options.baBehav[ADDSET_DIRPYREQ], options.baBehav[ADDSET_DIRPYREQ_THRESHOLD], options.baBehav[ADDSET_DIRPYREQ_SKINPROTECT]); wavelet->setAdjusterBehavior (options.baBehav[ADDSET_WA], options.baBehav[ADDSET_WA_THRESHOLD], options.baBehav[ADDSET_WA_THRESHOLD2], options.baBehav[ADDSET_WA_THRES], options.baBehav[ADDSET_WA_CHRO], options.baBehav[ADDSET_WA_CHROMA], options.baBehav[ADDSET_WA_CONTRAST], options.baBehav[ADDSET_WA_SKINPROTECT], options.baBehav[ADDSET_WA_RESCHRO], options.baBehav[ADDSET_WA_TMRS], options.baBehav[ADDSET_WA_RESCON], options.baBehav[ADDSET_WA_RESCONH], options.baBehav[ADDSET_WA_THRR], options.baBehav[ADDSET_WA_THRRH], options.baBehav[ADDSET_WA_SKYPROTECT], options.baBehav[ADDSET_WA_EDGRAD], options.baBehav[ADDSET_WA_EDGVAL], options.baBehav[ADDSET_WA_STRENGTH], options.baBehav[ADDSET_WA_GAMMA], options.baBehav[ADDSET_WA_EDGEDETECT], options.baBehav[ADDSET_WA_EDGEDETECTTHR], options.baBehav[ADDSET_WA_EDGEDETECTTHR2]); dirpyrdenoise->setAdjusterBehavior (options.baBehav[ADDSET_DIRPYRDN_LUMA], options.baBehav[ADDSET_DIRPYRDN_LUMDET], options.baBehav[ADDSET_DIRPYRDN_CHROMA], options.baBehav[ADDSET_DIRPYRDN_CHROMARED], options.baBehav[ADDSET_DIRPYRDN_CHROMABLUE], options.baBehav[ADDSET_DIRPYRDN_GAMMA], options.baBehav[ADDSET_DIRPYRDN_PASSES]); + bayerprocess->setAdjusterBehavior(options.baBehav[ADDSET_BAYER_FALSE_COLOR_SUPPRESSION], options.baBehav[ADDSET_BAYER_ITER], options.baBehav[ADDSET_BAYER_DUALDEMOZCONTRAST], options.baBehav[ADDSET_BAYER_PS_SIGMA], options.baBehav[ADDSET_BAYER_PS_SMOOTH], options.baBehav[ADDSET_BAYER_PS_EPERISO]); + xtransprocess->setAdjusterBehavior(options.baBehav[ADDSET_BAYER_FALSE_COLOR_SUPPRESSION]); bayerpreprocess->setAdjusterBehavior (options.baBehav[ADDSET_PREPROCESS_LINEDENOISE], options.baBehav[ADDSET_PREPROCESS_GREENEQUIL]); rawcacorrection->setAdjusterBehavior (options.baBehav[ADDSET_RAWCACORR]); flatfield->setAdjusterBehavior(options.baBehav[ADDSET_RAWFFCLIPCONTROL]); @@ -349,6 +353,13 @@ void BatchToolPanelCoordinator::initSession () pparams.raw.bayersensor.black0 = pparams.raw.bayersensor.black1 = pparams.raw.bayersensor.black2 = pparams.raw.bayersensor.black3 = pparams.raw.xtranssensor.blackred = pparams.raw.xtranssensor.blackgreen = pparams.raw.xtranssensor.blackblue = 0; } + if (options.baBehav[ADDSET_BAYER_FALSE_COLOR_SUPPRESSION]) { pparams.raw.bayersensor.ccSteps = 0; } + if (options.baBehav[ADDSET_BAYER_ITER]) { pparams.raw.bayersensor.dcb_iterations = 0; pparams.raw.bayersensor.lmmse_iterations = 0; } + if (options.baBehav[ADDSET_BAYER_PS_SMOOTH]) { pparams.raw.bayersensor.pixelShiftSmoothFactor = 0; } + if (options.baBehav[ADDSET_BAYER_PS_EPERISO]) { pparams.raw.bayersensor.pixelShiftEperIso = 0; } + if (options.baBehav[ADDSET_BAYER_PS_SIGMA]) { pparams.raw.bayersensor.pixelShiftSigma = 0; } + if (options.baBehav[ADDSET_BAYER_DUALDEMOZCONTRAST]) { pparams.raw.bayersensor.dualDemosaicContrast = 0; } + if (options.baBehav[ADDSET_XTRANS_FALSE_COLOR_SUPPRESSION]) { pparams.raw.xtranssensor.ccSteps = 0; } if (options.baBehav[ADDSET_RAWFFCLIPCONTROL]) { pparams.raw.ff_clipControl = 0; } if (options.baBehav[ADDSET_PREPROCESS_GREENEQUIL]) { pparams.raw.bayersensor.greenthresh = 0; } if (options.baBehav[ADDSET_PREPROCESS_LINEDENOISE]) { pparams.raw.bayersensor.linenoise = 0; } diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc index d08ec0393..339666aa0 100644 --- a/rtgui/bayerprocess.cc +++ b/rtgui/bayerprocess.cc @@ -307,31 +307,11 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params } if (!batchMode) { - if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::DCB) || - method->get_active_row_number() == std::numeric_limits::max()) { - dcbOptions->show(); - } else { - dcbOptions->hide(); - } - if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::LMMSE) || - method->get_active_row_number() == std::numeric_limits::max()) { - lmmseOptions->show(); - } else { - lmmseOptions->hide(); - } - if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::AMAZEVNG4) || - method->get_active_row_number() == std::numeric_limits::max()) { - dualDemosaicOptions->show(); - } else { - dualDemosaicOptions->hide(); - } - if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::PIXELSHIFT) || - method->get_active_row_number() == std::numeric_limits::max()) { - if(pp->raw.bayersensor.pixelShiftMotionCorrectionMethod == RAWParams::BayerSensor::PSMotionCorrectionMethod::CUSTOM) { - pixelShiftOptions->show(); - } else { - pixelShiftOptions->hide(); - } + dcbOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::DCB)); + lmmseOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::LMMSE)); + dualDemosaicOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::AMAZEVNG4)); + if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::PIXELSHIFT)) { + pixelShiftOptions->set_visible(pp->raw.bayersensor.pixelShiftMotionCorrectionMethod == RAWParams::BayerSensor::PSMotionCorrectionMethod::CUSTOM); pixelShiftFrame->show(); } else { pixelShiftFrame->hide(); @@ -415,6 +395,28 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe } } +void BayerProcess::setAdjusterBehavior (bool falsecoloradd, bool iteradd, bool dualdemozecontrastadd, bool pssigmaadd, bool pssmoothadd, bool pseperisoadd) +{ + ccSteps->setAddMode(falsecoloradd); + dcbIterations->setAddMode(iteradd); + lmmseIterations->setAddMode(iteradd); + pixelShiftSmooth->setAddMode(pssmoothadd); + pixelShiftEperIso->setAddMode(pseperisoadd); + pixelShiftSigma->setAddMode(pssigmaadd); + dualDemosaicContrast->setAddMode(dualdemozecontrastadd); +} + +void BayerProcess::trimValues (rtengine::procparams::ProcParams* pp) +{ + ccSteps->trimValue(pp->raw.bayersensor.ccSteps); + dcbIterations->trimValue(pp->raw.bayersensor.dcb_iterations); + lmmseIterations->trimValue(pp->raw.bayersensor.lmmse_iterations); + pixelShiftSmooth->trimValue(pp->raw.bayersensor.pixelShiftSmoothFactor); + pixelShiftEperIso->trimValue(pp->raw.bayersensor.pixelShiftEperIso); + pixelShiftSigma->trimValue(pp->raw.bayersensor.pixelShiftSigma); + dualDemosaicContrast->trimValue(pp->raw.bayersensor.dualDemosaicContrast); +} + void BayerProcess::setBatchMode(bool batchMode) { method->append (M("GENERAL_UNCHANGED")); diff --git a/rtgui/bayerprocess.h b/rtgui/bayerprocess.h index 84701a52e..ee532f27c 100644 --- a/rtgui/bayerprocess.h +++ b/rtgui/bayerprocess.h @@ -65,15 +65,17 @@ public: BayerProcess (); - void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); - void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); - void setBatchMode (bool batchMode); - void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); + void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); + void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); + void setAdjusterBehavior(bool falsecoloradd, bool iteradd, bool dualdemozecontrastadd, bool pssigmaadd, bool pssmoothadd, bool pseperisoadd); + void trimValues(rtengine::procparams::ProcParams* pp); + void setBatchMode(bool batchMode); + void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); - void methodChanged (); - void imageNumberChanged (); - void adjusterChanged (Adjuster* a, double newval); - void checkBoxToggled (CheckBox* c, CheckValue newval); + void methodChanged(); + void imageNumberChanged(); + void adjusterChanged(Adjuster* a, double newval); + void checkBoxToggled(CheckBox* c, CheckValue newval); void pixelShiftMotionMethodChanged(); void FrameCountChanged(int n, int frameNum); }; diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index e9f7ad60e..2b6bc49de 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,11 +1,13 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 334 +#define PPVERSION 335 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* Log of version changes + 335 2018-05-30 + new contrast adjuster in Bayer process tool 334 2018-05-13 new contrast threshold adjuster in Microcontrast tool 333 2018-04-26 diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 79cc6fd4c..623cb25d5 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -387,6 +387,19 @@ Gtk::Widget* Preferences::getBatchProcPanel () appendBehavList (mi, M ("TP_WAVELET_EDGEDETECTTHR"), ADDSET_WA_EDGEDETECTTHR, true); appendBehavList (mi, M ("TP_WAVELET_EDGEDETECTTHR2"), ADDSET_WA_EDGEDETECTTHR2, true); + mi = behModel->append (); + mi->set_value (behavColumns.label, M ("TP_RAW_SENSOR_BAYER_LABEL")); + appendBehavList (mi, M ("TP_RAW_FALSECOLOR"), ADDSET_BAYER_FALSE_COLOR_SUPPRESSION, false); + appendBehavList (mi, M ("TP_RAW_DCBITERATIONS") + ", " + M("TP_RAW_LMMSEITERATIONS"), ADDSET_BAYER_ITER, false); + appendBehavList (mi, M ("TP_RAW_DUALDEMOSAICCONTRAST"), ADDSET_BAYER_DUALDEMOZCONTRAST, false); + appendBehavList (mi, M ("TP_RAW_PIXELSHIFTSIGMA"), ADDSET_BAYER_PS_SIGMA, false); + appendBehavList (mi, M ("TP_RAW_PIXELSHIFTSMOOTH"), ADDSET_BAYER_PS_SMOOTH, false); + appendBehavList (mi, M ("TP_RAW_PIXELSHIFTEPERISO"), ADDSET_BAYER_PS_EPERISO, false); + + mi = behModel->append (); + mi->set_value (behavColumns.label, M ("TP_RAW_SENSOR_XTRANS_LABEL")); + appendBehavList (mi, M ("TP_RAW_FALSECOLOR"), ADDSET_XTRANS_FALSE_COLOR_SUPPRESSION, false); + mi = behModel->append (); mi->set_value (behavColumns.label, M ("TP_PREPROCESS_LABEL")); appendBehavList (mi, M ("TP_PREPROCESS_GREENEQUIL"), ADDSET_PREPROCESS_GREENEQUIL, false); diff --git a/rtgui/xtransprocess.cc b/rtgui/xtransprocess.cc index 9e0c94ea0..a001758f9 100644 --- a/rtgui/xtransprocess.cc +++ b/rtgui/xtransprocess.cc @@ -123,6 +123,11 @@ void XTransProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* p } } +void XTransProcess::setAdjusterBehavior (bool falsecoloradd) +{ + ccSteps->setAddMode(falsecoloradd); +} + void XTransProcess::setBatchMode(bool batchMode) { method->append (M("GENERAL_UNCHANGED")); diff --git a/rtgui/xtransprocess.h b/rtgui/xtransprocess.h index 44ed2e670..274b52c29 100644 --- a/rtgui/xtransprocess.h +++ b/rtgui/xtransprocess.h @@ -40,13 +40,14 @@ public: XTransProcess (); - void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); - void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); - void setBatchMode (bool batchMode); - void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); + void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); + void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); + void setAdjusterBehavior(bool falsecoloradd); + void setBatchMode(bool batchMode); + void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); - void methodChanged (); - void adjusterChanged (Adjuster* a, double newval); + void methodChanged(); + void adjusterChanged(Adjuster* a, double newval); }; #endif From 6fcc8251b854eb8a6a18dc901cbf01456795a5c5 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Thu, 31 May 2018 01:19:37 +0200 Subject: [PATCH 36/85] Japanese translation updated by firefly, close #4582 --- rtdata/languages/Japanese | 184 +++++++++++++++++++------------------- 1 file changed, 90 insertions(+), 94 deletions(-) diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index bcf8f5298..0d90b2e88 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -38,6 +38,7 @@ ABOUT_TAB_CREDITS;クレジット ABOUT_TAB_LICENSE;ライセンス ABOUT_TAB_RELEASENOTES;リリースノート ABOUT_TAB_SPLASH;スプラッシュ +ADJUSTER_RESET_TO_DEFAULT;クリック - デフォルト値にリセット\nCtrl+クリック - 初期値にリセット BATCHQUEUE_AUTOSTART;オートスタート BATCHQUEUE_AUTOSTARTHINT;新しいrawファイルが送られて来たら自動的に現像処理を開始します BATCHQUEUE_DESTFILENAME;パスとファイル名 @@ -261,6 +262,7 @@ GENERAL_NONE;なし GENERAL_OK;OK GENERAL_OPEN;開く GENERAL_PORTRAIT;縦 +GENERAL_RESET;リセット GENERAL_SAVE;保存 GENERAL_SLIDER;スライダー GENERAL_UNCHANGED;(変更なし) @@ -291,8 +293,8 @@ HISTORY_MSG_10;シャドウ圧縮 HISTORY_MSG_11;トーンカーブ 1 HISTORY_MSG_12;自動露光補正 HISTORY_MSG_13;露光 クリッピング -HISTORY_MSG_14;L*a*b* - 明度 -HISTORY_MSG_15;L*a*b* - コントラスト +HISTORY_MSG_14;L*a*b* - 明度 +HISTORY_MSG_15;L*a*b* - コントラスト HISTORY_MSG_16;輝度 黒レベル HISTORY_MSG_17;輝度 ハイライト圧縮 HISTORY_MSG_18;輝度 シャドウ圧縮 @@ -372,7 +374,7 @@ HISTORY_MSG_91;色ノイズの低減 HISTORY_MSG_92;ノイズ低減のガンマ HISTORY_MSG_93;ディテールのコントラスト係数 HISTORY_MSG_94;ディテールのコントラスト -HISTORY_MSG_95;L*a*b*の色度 +HISTORY_MSG_95;L*a*b* - 色度 HISTORY_MSG_96;L*a*b* - a*カーブ HISTORY_MSG_97;L*a*b* - b*カーブ HISTORY_MSG_98;デモザイク 方式 @@ -388,9 +390,9 @@ HISTORY_MSG_107;フリンジ低減 しきい値 HISTORY_MSG_108;ハイライト圧縮 しきい値 HISTORY_MSG_109;リサイズ バウンディングボックス HISTORY_MSG_110;リサイズの適用領域 -HISTORY_MSG_111;L*a*b* - 色ずれ回避 +HISTORY_MSG_111;L*a*b* - 色ずれの回避 HISTORY_MSG_112;--未使用-- -HISTORY_MSG_113;L*a*b* - レッドと肌色トーンを保護 +HISTORY_MSG_113;L*a*b* - レッドと肌色トーンを保護 HISTORY_MSG_114;DCB 反復 HISTORY_MSG_115;偽色抑制 HISTORY_MSG_116;DCB 拡張 @@ -511,7 +513,9 @@ HISTORY_MSG_231;白黒 ‘前の‘カーブ HISTORY_MSG_232;白黒 ‘前の‘カーブのタイプ HISTORY_MSG_233;白黒 ‘後の‘カーブ HISTORY_MSG_234;白黒 ‘後の‘カーブのタイプ +HISTORY_MSG_235;白黒 チャンネルミキサー 自動 HISTORY_MSG_236;--未使用-- +HISTORY_MSG_237;白黒 チャンネルミキサー HISTORY_MSG_238;グラデーションフィルター フェザー処理 HISTORY_MSG_239;グラデーションフィルター 強さ HISTORY_MSG_240;グラデーションフィルター 中央 @@ -521,8 +525,8 @@ HISTORY_MSG_243;半径 HISTORY_MSG_244;ビネットフィルター 強さ HISTORY_MSG_245;ビネットフィルター 中央 HISTORY_MSG_246;L*a*b* CL カーブ -HISTORY_MSG_247;L*a*b* LH カーブ -HISTORY_MSG_248;L*a*b* HH カーブ +HISTORY_MSG_247;L*a*b* LH カーブ +HISTORY_MSG_248;L*a*b* HH カーブ HISTORY_MSG_249;ディテールレベルのコントラスト - しきい値 HISTORY_MSG_250;ノイズ低減 - 強化 HISTORY_MSG_251;白黒 - アルゴリズム @@ -532,7 +536,7 @@ HISTORY_MSG_254;CbDL 肌色の色相 HISTORY_MSG_255;ノイズ低減 - メディアン HISTORY_MSG_256;ノイズ低減 - フィルターの種類 HISTORY_MSG_257;カラートーン調整 -HISTORY_MSG_258;カラートーン調整 - カラーのカーブ +HISTORY_MSG_258;カラートーン調整 - カラーのカーブ HISTORY_MSG_259;カラートーン調整 - 不透明度のカーブ HISTORY_MSG_260;カラートーン調整 - a*(b*)の不透明度 HISTORY_MSG_261;カラートーン調整 - 方法 @@ -547,6 +551,7 @@ HISTORY_MSG_269;カラートーン調整 - ハイライトのレッド HISTORY_MSG_270;カラートーン調整 - ハイライトのグリーン HISTORY_MSG_271;カラートーン調整 - ハイライトのブルー HISTORY_MSG_272;カラートーン調整 - バランス +HISTORY_MSG_273;カラートーン調整 - SMHでカラーバランス HISTORY_MSG_274;カラートーン調整 - シャドウの彩度 HISTORY_MSG_275;カラートーン調整 - ハイライトの彩度 HISTORY_MSG_276;カラートーン調整 - 不透明度 @@ -577,73 +582,73 @@ HISTORY_MSG_300;- HISTORY_MSG_301;輝度ノイズの調整方法 HISTORY_MSG_302;色ノイズの調整方法 HISTORY_MSG_303;色ノイズの調整方法 -HISTORY_MSG_304;W- コントラストレベル +HISTORY_MSG_304;W- コントラストレベル HISTORY_MSG_305;ウェーブレットのレベル -HISTORY_MSG_306;W- プロセス -HISTORY_MSG_307;W- プレビュー -HISTORY_MSG_308;W- プレビューの方向 -HISTORY_MSG_309;W- ES ディテール -HISTORY_MSG_310;W- 残差 青空の目標/保護 +HISTORY_MSG_306;W- プロセス +HISTORY_MSG_307;W- プレビュー +HISTORY_MSG_308;W- プレビューの方向 +HISTORY_MSG_309;W- ES ディテール +HISTORY_MSG_310;W- 残差 青空の目標/保護 HISTORY_MSG_311;W- ウェーブレットのレベル -HISTORY_MSG_312;W- 残差 シャドウのしきい値 -HISTORY_MSG_313;W- 色度 明星色/純色 -HISTORY_MSG_314;W- 色域 アーティファクトの軽減 -HISTORY_MSG_315;W- 残差 コントラスト -HISTORY_MSG_316;W- 色域 肌色の目標/保護 -HISTORY_MSG_317;W- 色域 肌色の色相 -HISTORY_MSG_318;W- コントラスト ハイライトレベル -HISTORY_MSG_319;W- コントラスト ハイライト範囲 -HISTORY_MSG_320;W- コントラスト シャドウ範囲 -HISTORY_MSG_321;W- コントラスト シャドウレベル -HISTORY_MSG_322;W- 色域 色ずれの回避 -HISTORY_MSG_323;W- ES ローカルコントラスト -HISTORY_MSG_324;W- 色度 明星色 -HISTORY_MSG_325;W- 色度 純色 -HISTORY_MSG_326;W- 色度 方法 -HISTORY_MSG_327;W- コントラスト 適用先 -HISTORY_MSG_328;W- 色度 リンクを強化 -HISTORY_MSG_329;W- 色調 R/Gの不透明度 -HISTORY_MSG_330;W- 色調 B/Yの不透明度 -HISTORY_MSG_331;W- コントラストレベル エキストラ -HISTORY_MSG_332;W- タイルの種類 -HISTORY_MSG_333;W- 残差 シャドウ -HISTORY_MSG_334;W- 残差 色度 -HISTORY_MSG_335;W- 残差 ハイライト -HISTORY_MSG_336;W- 残差 ハイライトのしきい値 -HISTORY_MSG_337;W- 残差 青空の色相 -HISTORY_MSG_338;W- ES 半径 -HISTORY_MSG_339;W- ES 強さ -HISTORY_MSG_340;W- 強さ -HISTORY_MSG_341;W- エッジパフォーマンス -HISTORY_MSG_342;W- ES 最初のレベル -HISTORY_MSG_343;W- 色度のレベル -HISTORY_MSG_344;W- 色度 方式 スライダー/カーブ -HISTORY_MSG_345;W- ES ローカルコントラスト -HISTORY_MSG_346;W- ES ローカルコントラスト 方式 -HISTORY_MSG_347;W- ノイズ低減とリファイン レベル1 -HISTORY_MSG_348;W- ノイズ低減とリファイン レベル2 -HISTORY_MSG_349;W- ノイズ低減とリファイン レベル3 -HISTORY_MSG_350;W- ES エッジ検出 -HISTORY_MSG_351;W- 残差 HHカーブ -HISTORY_MSG_352;W- 背景色 -HISTORY_MSG_353;W- ES グラデーション感度 -HISTORY_MSG_354;W- ES 強化 -HISTORY_MSG_355;W- ES しきい値(低) -HISTORY_MSG_356;W- ES しきい値(高) -HISTORY_MSG_357;W- ノイズ低減 ESとリンク -HISTORY_MSG_358;W- 色域 CHカーブ +HISTORY_MSG_312;W- 残差 シャドウのしきい値 +HISTORY_MSG_313;W- 色度 明星色/純色 +HISTORY_MSG_314;W- 色域 アーティファクトの軽減 +HISTORY_MSG_315;W- 残差 コントラスト +HISTORY_MSG_316;W- 色域 肌色の目標/保護 +HISTORY_MSG_317;W- 色域 肌色の色相 +HISTORY_MSG_318;W- コントラスト ハイライトレベル +HISTORY_MSG_319;W- コントラスト ハイライト範囲 +HISTORY_MSG_320;W- コントラスト シャドウ範囲 +HISTORY_MSG_321;W- コントラスト シャドウレベル +HISTORY_MSG_322;W- 色域 色ずれの回避 +HISTORY_MSG_323;W- ES ローカルコントラスト +HISTORY_MSG_324;W- 色度 明星色 +HISTORY_MSG_325;W- 色度 純色 +HISTORY_MSG_326;W- 色度 方法 +HISTORY_MSG_327;W- コントラスト 適用先 +HISTORY_MSG_328;W- 色度 リンクを強化 +HISTORY_MSG_329;W- 色調 R/Gの不透明度 +HISTORY_MSG_330;W- 色調 B/Yの不透明度 +HISTORY_MSG_331;W- コントラストレベル エキストラ +HISTORY_MSG_332;W- タイルの種類 +HISTORY_MSG_333;W- 残差 シャドウ +HISTORY_MSG_334;W- 残差 色度 +HISTORY_MSG_335;W- 残差 ハイライト +HISTORY_MSG_336;W- 残差 ハイライトのしきい値 +HISTORY_MSG_337;W- 残差 青空の色相 +HISTORY_MSG_338;W- ES 半径 +HISTORY_MSG_339;W- ES 強さ +HISTORY_MSG_340;W- 強さ +HISTORY_MSG_341;W- エッジパフォーマンス +HISTORY_MSG_342;W- ES 最初のレベル +HISTORY_MSG_343;W- 色度のレベル +HISTORY_MSG_344;W- 色度 方式 スライダー/カーブ +HISTORY_MSG_345;W- ES ローカルコントラスト +HISTORY_MSG_346;W- ES ローカルコントラスト 方式 +HISTORY_MSG_347;W- ノイズ低減とリファイン レベル1 +HISTORY_MSG_348;W- ノイズ低減とリファイン レベル2 +HISTORY_MSG_349;W- ノイズ低減とリファイン レベル3 +HISTORY_MSG_350;W- ES エッジ検出 +HISTORY_MSG_351;W- 残差 HHカーブ +HISTORY_MSG_352;W- 背景色 +HISTORY_MSG_353;W- ES グラデーション感度 +HISTORY_MSG_354;W- ES 強化 +HISTORY_MSG_355;W- ES しきい値(低) +HISTORY_MSG_356;W- ES しきい値(高) +HISTORY_MSG_357;W- ノイズ低減 ESとリンク +HISTORY_MSG_358;W- 色域 CHカーブ HISTORY_MSG_359;ホット/デッド しきい値 HISTORY_MSG_360;トーンマッピング ガンマ -HISTORY_MSG_361;W- 最終 色度バランス -HISTORY_MSG_362;W- 残差 圧縮の方法 -HISTORY_MSG_363;W- 残差 圧縮の強さ -HISTORY_MSG_364;W- 最終 コントラストバランス -HISTORY_MSG_365;W- 最終 デルタバランス -HISTORY_MSG_366;W- 残差 圧縮のガンマ -HISTORY_MSG_367;W- ES ローカルコントラストカーブ -HISTORY_MSG_368;W- 最終 コントラストバランス -HISTORY_MSG_369;W- 最終 バランスの方法 -HISTORY_MSG_370;W- 最終 ローカルコントラストカーブ +HISTORY_MSG_361;W- 最終 色度バランス +HISTORY_MSG_362;W- 残差 圧縮の方法 +HISTORY_MSG_363;W- 残差 圧縮の強さ +HISTORY_MSG_364;W- 最終 コントラストバランス +HISTORY_MSG_365;W- 最終 デルタバランス +HISTORY_MSG_366;W- 残差 圧縮のガンマ +HISTORY_MSG_367;W- ES ローカルコントラストカーブ +HISTORY_MSG_368;W- 最終 コントラストバランス +HISTORY_MSG_369;W- 最終 バランスの方法 +HISTORY_MSG_370;W- 最終 ローカルコントラストカーブ HISTORY_MSG_371;リサイズ後のシャープ化(PRS) HISTORY_MSG_372;PRS アンシャープマスク - 半径 HISTORY_MSG_373;PRS アンシャープマスク - 適用量 @@ -665,6 +670,7 @@ HISTORY_MSG_388;W - 残差 - CB 中間のグリーン HISTORY_MSG_389;W - 残差 - CB 中間のブルー HISTORY_MSG_390;W - 残差 - CB シャドウのグリーン HISTORY_MSG_391;W - 残差 - CB シャドウのブルー +HISTORY_MSG_392;W - 残差 - カラーバランス HISTORY_MSG_393;DCP - ルックテーブル HISTORY_MSG_394;DCP - 基本露出 HISTORY_MSG_395;DCP - ベーステーブル @@ -759,8 +765,11 @@ HISTORY_MSG_LOCALCONTRAST_ENABLED;ローカルコントラスト HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;ローカルコントラスト - 明るい部分 HISTORY_MSG_LOCALCONTRAST_RADIUS;ローカルコントラスト - 半径 HISTORY_MSG_METADATA_MODE;メタデータ コピーモード +HISTORY_MSG_MICROCONTRAST_CONTRAST;マイクロコントラスト - コントラストのしきい値 HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;ラインノイズフィルタの方向 HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAFラインフィルタ +HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - コントラストのしきい値 +HISTORY_MSG_SHARPENING_CONTRAST;シャープ化 - コントラストのしきい値 HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - アンカー HISTORY_NEWSNAPSHOT;追加 HISTORY_NEWSNAPSHOT_TOOLTIP;ショートカット: Alt-s @@ -1315,6 +1324,8 @@ TP_BWMIX_MET;方法 TP_BWMIX_MET_CHANMIX;チャンネルミキサー TP_BWMIX_MET_DESAT;彩度低減 TP_BWMIX_MET_LUMEQUAL;輝度イコライザー +TP_BWMIX_MIXC;チャンネルミキサー +TP_BWMIX_NEUTRAL;リセット TP_BWMIX_RGBLABEL;R: %1%% G: %2%% B: %3%% トータル: %4%% TP_BWMIX_RGBLABEL_HINT;ミキサーオプションの全てを考慮した最終のRGBファクター\nトータルは実際に適用されたRGBの合計を表示:\n- 常に100%相対モード\n- 絶対モード100%より高い(明るい)、或いは低い(暗い) TP_BWMIX_RGB_TOOLTIP;RGBチャンネルをミックス。ガイダンスとしてプリセットを使います。\nマイナス値はアーティファクトの発生や誤った作用を起こすかもしれないことに注意します @@ -1554,6 +1565,12 @@ TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;計算領域が3x3ピクセルのメデ TP_DIRPYRDENOISE_MEDIAN_TYPE;フィルターの種類 TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;適用するメディアンフィルタのサイズを決めます。大きくするとその分処理時間が増えます。大きいサイズを使うとそれだけ処理時間が増えます。\n\n3×3 ソフト: 3x3ピクセルの計算領域で5ピクセルを処理します\n3×3:3x3ピクセルの計算領域で9ピクセルを処理します\n5×5 ソフト: 5x5ピクセルの計算領域で13ピクセルを処理します\n5×5: 5x5ピクセルの計算領域で25ピクセルを処理します\n7×7: 7x7ピクセルの計算領域で49ピクセルを処理します\n9×9: 9x9ピクセルの計算領域で81ピクセルを処理します\n\n場合によっては、小さいウィンドウで複数回適用を繰り返す方が、大きいウィンドウを1回適用するより結果が良いことがあります。 TP_DIRPYRDENOISE_SLI;スライダー +TP_DIRPYRDENOISE_TYPE_3X3;3×3 +TP_DIRPYRDENOISE_TYPE_3X3SOFT;3×3 ソフト +TP_DIRPYRDENOISE_TYPE_5X5;5×5 +TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5 ソフト +TP_DIRPYRDENOISE_TYPE_7X7;7×7 +TP_DIRPYRDENOISE_TYPE_9X9;9×9 TP_DIRPYREQUALIZER_ALGO;肌色の範囲 TP_DIRPYREQUALIZER_ALGO_TOOLTIP;ファイン:撮影の肌色に近い部分に働くアルゴリズム、他の色への影響を最小限に抑えます\n広範: アーティファクトの増加を避けるアルゴリズムです TP_DIRPYREQUALIZER_ARTIF;アーティファクトを軽減 @@ -1966,6 +1983,7 @@ TP_SHARPENEDGE_LABEL;エッジ TP_SHARPENEDGE_PASSES;反復 TP_SHARPENEDGE_THREE;輝度のみ TP_SHARPENING_AMOUNT;適用量 +TP_SHARPENING_CONTRAST;コントラストのしきい値 TP_SHARPENING_EDRADIUS;半径 TP_SHARPENING_EDTOLERANCE;エッジ許容 TP_SHARPENING_HALOCONTROL;ハロ抑制 @@ -1981,6 +1999,7 @@ TP_SHARPENING_RLD_ITERATIONS;繰返し TP_SHARPENING_THRESHOLD;しきい値 TP_SHARPENING_USM;アンシャープマスク TP_SHARPENMICRO_AMOUNT;適用量 +TP_SHARPENMICRO_CONTRAST;コントラストのしきい値 TP_SHARPENMICRO_LABEL;マイクロコントラスト TP_SHARPENMICRO_MATRIX;3×3マトリクスの代わりに 5×5 TP_SHARPENMICRO_UNIFORMITY;均等 @@ -2231,26 +2250,3 @@ ZOOMPANEL_ZOOMFITSCREEN;画像全体を画面に合わせる\nショートカッ ZOOMPANEL_ZOOMIN;ズームイン\nショートカット: + ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - -!!!!!!!!!!!!!!!!!!!!!!!!! -! Untranslated keys follow; remove the ! prefix after an entry is translated. -!!!!!!!!!!!!!!!!!!!!!!!!! - -!ADJUSTER_RESET_TO_DEFAULT;Click - reset to default value.\nCtrl+click - reset to initial value. -!GENERAL_RESET;Reset -!HISTORY_MSG_235;B&W - CM - Auto -!HISTORY_MSG_237;B&W - CM -!HISTORY_MSG_273;CT - Color Balance SMH -!HISTORY_MSG_392;W - Residual - Color Balance -!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold -!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold -!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold -!TP_BWMIX_MIXC;Channel Mixer -!TP_BWMIX_NEUTRAL;Reset -!TP_DIRPYRDENOISE_TYPE_3X3;3×3 -!TP_DIRPYRDENOISE_TYPE_3X3SOFT;3×3 soft -!TP_DIRPYRDENOISE_TYPE_5X5;5×5 -!TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5 soft -!TP_DIRPYRDENOISE_TYPE_7X7;7×7 -!TP_DIRPYRDENOISE_TYPE_9X9;9×9 -!TP_SHARPENING_CONTRAST;Contrast threshold -!TP_SHARPENMICRO_CONTRAST;Contrast threshold From 93b3f07bc61d7c4a0f8cce1f1499b546fd6775fe Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Thu, 31 May 2018 21:38:12 +0200 Subject: [PATCH 37/85] Portuguese (Brasil) translation updated by Digitalpix58 --- rtdata/languages/Portugues (Brasil) | 834 ++++++++++++++-------------- 1 file changed, 418 insertions(+), 416 deletions(-) diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index 23bd1aa30..3edbf0c74 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -1,10 +1,11 @@ -#01 2018-05-03 Digitalpix58 +#01 2018-05-17 Digitalpix58 ABOUT_TAB_BUILD;Versão ABOUT_TAB_CREDITS;Créditos ABOUT_TAB_LICENSE;Licença ABOUT_TAB_RELEASENOTES;Nota de Lançamento ABOUT_TAB_SPLASH;Splash +ADJUSTER_RESET_TO_DEFAULT;Restaurar ao padrão BATCHQUEUE_AUTOSTART;Início automático BATCHQUEUE_AUTOSTARTHINT;Começa a processar automaticamente um novo trabalho. BATCHQUEUE_DESTFILENAME;Caminho e nome do arquivo @@ -478,7 +479,9 @@ HISTORY_MSG_231;P&B - Curva 'anterior' HISTORY_MSG_232;P&B - Tipo de curva 'anterior' HISTORY_MSG_233;P&B - Curva 'posterior' HISTORY_MSG_234;P&B - Tipo de curva 'posterior' +HISTORY_MSG_235;P&B - Misturador de canal automático HISTORY_MSG_236;--sem uso-- +HISTORY_MSG_237;P&B - Misturador HISTORY_MSG_238;GF - Pena HISTORY_MSG_239;GF - Robustez HISTORY_MSG_240;GF - Centro @@ -514,6 +517,7 @@ HISTORY_MSG_269;CT - Alto - Vermelho HISTORY_MSG_270;CT - Alto - Verde HISTORY_MSG_271;CT - Alto - Azul HISTORY_MSG_272;CT - Balanço +HISTORY_MSG_273;CT - Restaurar HISTORY_MSG_274;CT - Sat. Sombras HISTORY_MSG_275;CT - Sat. Realces HISTORY_MSG_276;CT - Opacidade @@ -632,6 +636,7 @@ HISTORY_MSG_388;W - Residual - CB verde médio HISTORY_MSG_389;W - Residual - CB azul médio HISTORY_MSG_390;W - Residual - CB verde baixo HISTORY_MSG_391;W - Residual - CB azul baixo +HISTORY_MSG_392;W - Residual - CB Restaurar HISTORY_MSG_393;DCP - Mesa de Olhar HISTORY_MSG_394;DCP - Exposição linha de base HISTORY_MSG_395;DCP - Mesa base @@ -717,13 +722,13 @@ HISTORY_MSG_490;HDR TM - Montante HISTORY_MSG_491;Balanço de Branco HISTORY_MSG_492;Curvas RGB HISTORY_MSG_493;L*a*b* Ajustes -HISTORY_MSG_CLAMPOOG;Recorte de cor fora da gama +HISTORY_MSG_CLAMPOOG;Recorte de cor fora do gamut HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Correção de cor HISTORY_MSG_HISTMATCHING;Curva de Tom Auto-compatível HISTORY_MSG_LOCALCONTRAST_AMOUNT;Contraste Local - Montante HISTORY_MSG_LOCALCONTRAST_DARKNESS;Contraste Local - Escuridão HISTORY_MSG_LOCALCONTRAST_ENABLED;Contraste Local -HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Contraste Local - Claridade +HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Contraste Local - Luminosidade HISTORY_MSG_LOCALCONTRAST_RADIUS;Contraste Local - Raio HISTORY_MSG_METADATA_MODE;Modo de cópia de metadados HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Direção do filtro de ruído de linha @@ -946,7 +951,7 @@ PARTIALPASTE_WHITEBALANCE;Balanço de branco PREFERENCES_ADD;Adicionar PREFERENCES_APPLNEXTSTARTUP;é necessário reiniciar PREFERENCES_AUTLISLOW;Baixo -PREFERENCES_AUTLISMAX;Max - Média de todos os ladrilhos +PREFERENCES_AUTLISMAX;Max - Média de todos os mosaicos PREFERENCES_AUTLISSTD;Alto PREFERENCES_AUTLISVLOW;Nenhum PREFERENCES_AUTLOW;Baixo @@ -1059,9 +1064,9 @@ PREFERENCES_LANGAUTODETECT;Use a linguagem do sistema PREFERENCES_LEVAUTDN;Nível de remoção de ruídos PREFERENCES_LEVDN;Tamanho da célula PREFERENCES_LISS;Auto-suavização multizona -PREFERENCES_MAX;Maxi (Ladrilho) +PREFERENCES_MAX;Maxi (Mosaico) PREFERENCES_MAXRECENTFOLDERS;Número máximo de pastas recentes -PREFERENCES_MED;Médio (Ladrilho/2) +PREFERENCES_MED;Médio (Mosaico/2) PREFERENCES_MENUGROUPEXTPROGS;Grupo "Abrir com" PREFERENCES_MENUGROUPFILEOPERATIONS;Grupo "operações de Arquivo" PREFERENCES_MENUGROUPLABEL;Grupo "Etiqueta de cor" @@ -1118,7 +1123,7 @@ PREFERENCES_RGBDTL_LABEL;Número máximo de threads para Redução de Ruído e N PREFERENCES_RGBDTL_TOOLTIP;Deixe a configuração em "0" para usar automaticamente o maior número de threads possível. Quanto mais threads rodarem em paralelo, mais rápido será o cálculo. Consulte o RawPedia para requisitos de memória. PREFERENCES_SAVE_TP_OPEN_NOW;Salvar ferramentas no estado recolhidas/expandididas agora PREFERENCES_SELECTFONT;Selecione a fonte principal -PREFERENCES_SELECTFONT_COLPICKER;Selecione a fonte de Cor Picker +PREFERENCES_SELECTFONT_COLPICKER;Selecione a fonte do Seletor de Cor PREFERENCES_SELECTLANG;Selecione linguagem PREFERENCES_SELECTTHEME;Selecione tema PREFERENCES_SERIALIZE_TIFF_READ;Configurações de leitura tiff @@ -1153,7 +1158,7 @@ PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Imagem para mostrar PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Renderização raw neutra PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;JPEG incorporado se tamanho completo, raw neutro caso contrário PREFERENCES_TIMAX;Alto -PREFERENCES_TINB;Número de ladrilhos +PREFERENCES_TINB;Número de mosaicos PREFERENCES_TISTD;Padrão PREFERENCES_TP_LABEL;Painel de ferramentas: PREFERENCES_TP_USEICONORTEXT;Use ícones de guias em vez de texto @@ -1204,6 +1209,14 @@ QINFO_HDR;HDR / %2 quadro(s) QINFO_ISO;ISO QINFO_NOEXIF;Dados exif não disponíveis. QINFO_PIXELSHIFT;Mudança de Pixel / %2 quadro(s) +SAMPLEFORMAT_0;Formato de dados desconhecido +SAMPLEFORMAT_1;8 bits sem assinatura +SAMPLEFORMAT_2;16-bits sem assinatura +SAMPLEFORMAT_4;24-bits LogLuv +SAMPLEFORMAT_8;32-bits LogLuv +SAMPLEFORMAT_16;16-bits ponto flutante +SAMPLEFORMAT_32;24-bits ponto flutuante +SAMPLEFORMAT_64;32-bits ponto flutuante SAVEDLG_AUTOSUFFIX;Adicionar automaticamente um sufixo se o arquivo já existir SAVEDLG_FILEFORMAT;Formato de arquivo SAVEDLG_FORCEFORMATOPTS;Forçar opções de salvar @@ -1219,423 +1232,412 @@ SAVEDLG_SUBSAMP_2;Balanceado SAVEDLG_SUBSAMP_3;Qualidade superior SAVEDLG_SUBSAMP_TOOLTIP;Compressão superior:\nJ:a:b 4:2:0\nh/v 2/2\nCroma reduzido pela metade na horizontal e na vertical.\n\nBalanceado:\nJ:a:b 4:2:2\nh/v 2/1\nCroma reduzido pela metade na horizontal.\n\nQualidade superior:\nJ:a:b 4:4:4\nh/v 1/1\nSem subamostragem de croma. SAVEDLG_TIFFUNCOMPRESSED;TIFF não comprimido +SAVEDLG_WARNFILENAME;Arquivo será nomeado +SHCSELECTOR_TOOLTIP;Clique com o botão direito do mouse para redefinir a posição desses 3 controles deslizantes. +SOFTPROOF_GAMUTCHECK_TOOLTIP;Realce pixels com cores fora do gamut em relação a:\n- o perfil da impressora, se um estiver definido e soft-proofing estiver ativado,\n- o perfil de saída, se um perfil de impressora não estiver definido e soft-proofing estiver ativado,\n- o perfil do monitor, se o soft-proofing estiver desativado. +SOFTPROOF_TOOLTIP;Soft-proofing simula a aparência da imagem:\n- quando impresso, se um perfil de impressora estiver definido em Preferências > Gerenciamento de Cor,\n- quando visualizado num monitor que usa o perfil de saída atual, se um perfil de impressora não estiver definido. +THRESHOLDSELECTOR_B;Inferior +THRESHOLDSELECTOR_BL;Inferior esquerdo +THRESHOLDSELECTOR_BR;Inferior direito +THRESHOLDSELECTOR_HINT;Segure a Shift tecla para mover pontos de controle individual. +THRESHOLDSELECTOR_T;Superior +THRESHOLDSELECTOR_TL;Superior esquerdo +THRESHOLDSELECTOR_TR;Superior direito +TOOLBAR_TOOLTIP_COLORPICKER;Seletor de Cores com Trava\n\nQuando ativado:\nClique na pré-visualização com o botão esquerdo do mouse para adicionar um seletor de cores\nArraste-o enquanto pressiona o botão esquerdo do mouse\nExclua o seletor de cores com um clique com o botão direito do mouse\nExclua todos os seletores de cores com Shift + clique com o botão direito do mouse\nClique com o botão direito do mouse em qualquer seletor de cores para voltar para a ferramenta de Mão +TOOLBAR_TOOLTIP_CROP;Cortar seleção.\nAtalho: c\nMover a área de corte usando Shift-arrastar mouse +TOOLBAR_TOOLTIP_HAND;Ferramenta de mão.\nAtalho: h +TOOLBAR_TOOLTIP_STRAIGHTEN;Endireitar / rotação fina.\nAtalho: s\n\nIndique a vertical ou horizontal, desenhando uma linha guia sobre a visualização da imagem. O ângulo de rotação será mostrado ao lado da linha da guia. O centro de rotação é o centro geométrico da imagem. +TOOLBAR_TOOLTIP_WB;Balanço de branco no local.\nAtalho: w +TP_BWMIX_ALGO;Algorítimo OYCPM +TP_BWMIX_ALGO_LI;Linear +TP_BWMIX_ALGO_SP;Efeitos especiais +TP_BWMIX_ALGO_TOOLTIP;Linear: irá produzir uma normal linear reação.\nproduzirá efeitos especiais misturando canais não linearmente. +TP_BWMIX_AUTOCH;Automático +TP_BWMIX_AUTOCH_TIP;Calcular valores otimizando o Misturador de Canais. +TP_BWMIX_CC_ENABLED;Ajustar cor complementar +TP_BWMIX_CC_TOOLTIP;Ative para permitir o ajuste automático de cores complementares no modo ROYGCBPM. +TP_BWMIX_CHANNEL;Equalizador de Luminância +TP_BWMIX_CURVEEDITOR1;Curva 'antes' +TP_BWMIX_CURVEEDITOR2;Curva 'depois' +TP_BWMIX_CURVEEDITOR_AFTER_TOOLTIP;Curva de tom, depois B&W conversão, no final do tratamento. +TP_BWMIX_CURVEEDITOR_BEFORE_TOOLTIP;Curva de tom, pouco antes B&W conversão.\nPode levar em conta os componentes de cor. +TP_BWMIX_CURVEEDITOR_LH_TOOLTIP;Luminância de acordo com a matiz L=f(H).\nPreste atenção aos valores extremos, pois eles podem causar artefatos. +TP_BWMIX_FILTER;Filtro de Cores +TP_BWMIX_FILTER_BLUE;Azul +TP_BWMIX_FILTER_BLUEGREEN;Azul-Verde +TP_BWMIX_FILTER_GREEN;Verde +TP_BWMIX_FILTER_GREENYELLOW;Verde-Amarelo +TP_BWMIX_FILTER_NONE;Nenhum +TP_BWMIX_FILTER_PURPLE;Roxa +TP_BWMIX_FILTER_RED;Vermelho +TP_BWMIX_FILTER_REDYELLOW;Vermelho-Amarelo +TP_BWMIX_FILTER_TOOLTIP;O filtro de cores simula fotos tiradas com um filtro colorido colocado na frente da lente. Filtros coloridos reduzem a transmissão de faixas de cores específicas e, portanto, afetam sua luminosidade. Por exemplo, um filtro vermelho escurece o céu azul. +TP_BWMIX_FILTER_YELLOW;Amarelo +TP_BWMIX_GAMMA;Correção de Gama +TP_BWMIX_GAM_TOOLTIP;Corrigir gama para cada canal RGB. +TP_BWMIX_LABEL;Preto e Branco +TP_BWMIX_MET;Método +TP_BWMIX_MET_CHANMIX;Misturador de Canais +TP_BWMIX_MET_DESAT;Dessaturação +TP_BWMIX_MET_LUMEQUAL;Equalizador de Luminância +TP_BWMIX_MIXC;Misturador +TP_BWMIX_NEUTRAL;Restabelecer misturador +TP_BWMIX_NEUTRAL_TIP;Restabelecer todos os valores (Filtro de Cores, Misturador de Canais) para o padrão. +TP_BWMIX_RGBLABEL;R: %1%% G: %2%% B: %3%% Total: %4%% +TP_BWMIX_RGBLABEL_HINT;Fatores finais do RGB que cuidam de todas as opções do misturador.\n"Total" exibe a soma dos valores RGB:\n- sempre 100% no modo relativo\n- mais alto (mais claro) ou mais baixo (mais escuro) que 100% no modo absoluto. +TP_BWMIX_RGB_TOOLTIP;Misture os canais RGB. Use predefinições para orientação.\nPreste atenção aos valores negativos que podem causar artefatos ou comportamento errático. +TP_BWMIX_SETTING;Predefinições +TP_BWMIX_SETTING_TOOLTIP;Predefinições diferentes (filme, paisagem, etc.) ou configurações manuais do Misturador de Canais. +TP_BWMIX_SET_HIGHCONTAST;Alto contraste +TP_BWMIX_SET_HIGHSENSIT;Alta sensibilidade +TP_BWMIX_SET_HYPERPANCHRO;Hiper Pancromático +TP_BWMIX_SET_INFRARED;Infravermelho +TP_BWMIX_SET_LANDSCAPE;Paisagem +TP_BWMIX_SET_LOWSENSIT;Baixa sensibilidade +TP_BWMIX_SET_LUMINANCE;Luminância +TP_BWMIX_SET_NORMCONTAST;Contraste Normal +TP_BWMIX_SET_ORTHOCHRO;Ortocromático +TP_BWMIX_SET_PANCHRO;Pancromático +TP_BWMIX_SET_PORTRAIT;Retrato +TP_BWMIX_SET_RGBABS;RGB Aboluto +TP_BWMIX_SET_RGBREL;RGB Relativo +TP_BWMIX_SET_ROYGCBPMABS;ROYGCBPM Aboluto +TP_BWMIX_SET_ROYGCBPMREL;ROYGCBPM Relativo +TP_BWMIX_TCMODE_FILMLIKE;B&W Gostar Filme +TP_BWMIX_TCMODE_SATANDVALBLENDING;B&W Saturação e mistura de valores +TP_BWMIX_TCMODE_STANDARD;B&W Padrão +TP_BWMIX_TCMODE_WEIGHTEDSTD;B&W Padrão Ponderado +TP_BWMIX_VAL;L +TP_CACORRECTION_BLUE;Azul +TP_CACORRECTION_LABEL;Correção de Aberração Cromática +TP_CACORRECTION_RED;Vermelho +TP_CBDL_AFT;Preto-e-Branco Depois +TP_CBDL_BEF;Preto-e-Branco Antes +TP_CBDL_METHOD;Processo localizado +TP_CBDL_METHOD_TOOLTIP;Escolha se a ferramenta de Contraste por Níveis de Detalhe deve ser posicionada após a ferramenta de Preto-e-Branco, que funciona no espaço L*a*b*, ou antes dele, que funciona no espaço RGB. +TP_CHMIXER_BLUE;Canal azul +TP_CHMIXER_GREEN;Canal verde +TP_CHMIXER_LABEL;Misturador de canais +TP_CHMIXER_RED;Canal vermelho +TP_CHROMATABERR_LABEL;Aberração Cromática +TP_COARSETRAF_TOOLTIP_HFLIP;Girar horizontalmente. +TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotacione à esquerda.\n\nAtalhos:\n[ - Modo de Guias do Editor Múltiplo,\nAlt-[ - Modo de Guia do Editor Único. +TP_COARSETRAF_TOOLTIP_ROTRIGHT;Rotacione à direita.\n\nAtalhos:\n] - Modo de Guias do Editor Múltiplo,\nAlt-] - Modo de Guia do Editor Único. +TP_COARSETRAF_TOOLTIP_VFLIP;Girar verticalmente. +TP_COLORAPP_ADAPTSCENE;Luminância absoluta da cena +TP_COLORAPP_ADAPTSCENE_TOOLTIP;Luminância absoluta do ambiente da cena (cd/m²).\n1) Calculada a partir dos dados Exif:\nVelocidade do obturador - velocidade ISO - número F - correção de exposição da câmera.\n2) Calculado a partir do ponto branco raw e do controle deslizante de Compensação de Exposição do RT. +TP_COLORAPP_ADAPTVIEWING;Visualizando luminância absoluta (cd/m²) +TP_COLORAPP_ADAPTVIEWING_TOOLTIP;Luminância absoluta do ambiente de visualização\n(usualmente 16cd/m²). +TP_COLORAPP_ADAP_AUTO_TOOLTIP;Se a caixa de seleção estiver marcada (recommendado) RawTherapee calcula um valor ótimo a partir dos dados Exif.\nPara definir o valor manualmente, desmarque a caixa de seleção primeiro. +TP_COLORAPP_ALGO;Algorimo +TP_COLORAPP_ALGO_ALL;Tudo +TP_COLORAPP_ALGO_JC;Luminosidade + Croma (JC) +TP_COLORAPP_ALGO_JS;Luminosidade + Saturação (JS) +TP_COLORAPP_ALGO_QM;Brilho + Colorido (QM) +TP_COLORAPP_ALGO_TOOLTIP;Permite escolher entre subconjuntos de parâmetros ou todos os parâmetros. +TP_COLORAPP_BADPIXSL;Filtro de pixel quente/ruim +TP_COLORAPP_BADPIXSL_TOOLTIP;Supressão de pixels quentes/ruins (cores vivas).\n0 = Sem efeito\n1 = Mediano\n2 = Gaussian.\nAlternativamente, ajuste a imagem para evitar sombras muito escuras.\n\nEsses artefatos são devido a limitações do CIECAM02. +TP_COLORAPP_BRIGHT;Brilho (Q) +TP_COLORAPP_BRIGHT_TOOLTIP;O brilho no CIECAM02 leva em consideração a luminosidade do branco e difere do L*a*b* e do brilho RGB. +TP_COLORAPP_CHROMA;Croma (C) +TP_COLORAPP_CHROMA_M;Colorido (M) +TP_COLORAPP_CHROMA_M_TOOLTIP;O colorido no CIECAM02 difere de L*a*b* e do colorido do RGB. +TP_COLORAPP_CHROMA_S;Saturação (S) +TP_COLORAPP_CHROMA_S_TOOLTIP;A saturação no CIECAM02 difere de L*a*b* e da saturação do RGB. +TP_COLORAPP_CHROMA_TOOLTIP;Croma no CIECAM02 difere de L*a*b* e da croma no RGB. +TP_COLORAPP_CIECAT_DEGREE;Adaptação CAT02 +TP_COLORAPP_CONTRAST;Contraste (J) +TP_COLORAPP_CONTRAST_Q;Contraste (Q) +TP_COLORAPP_CONTRAST_Q_TOOLTIP;Difere de L*a*b* e do contraste no RGB. +TP_COLORAPP_CONTRAST_TOOLTIP;Difere de L*a*b* e do contraste no RGB. +TP_COLORAPP_CURVEEDITOR1;Curva de tom 1 +TP_COLORAPP_CURVEEDITOR1_TOOLTIP;Mostra o histograma de L* (L*a*b*) antes de CIECAM02.\nSe a caixa de seleção "Mostrar histogramas de saída do CIECAM02 em curvas" estiver ativada, mostra o histograma de J ou Q depois de CIECAM02.\n\nJ e Q não são mostrados no painel principal do histograma.\n\nPara a saída final, consulte o painel principal do histograma. +TP_COLORAPP_CURVEEDITOR2;Curva de tom 2 +TP_COLORAPP_CURVEEDITOR2_TOOLTIP;O mesmo uso da segunda curva de tons de exposição. +TP_COLORAPP_CURVEEDITOR3;Curva de cor +TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Ajustar croma, saturação ou colorido.\n\nMostra o histograma da cromaticidade (L*a*b*) antes de CIECAM02.\nSe a caixa de seleção "Mostrar histogramas de saída do CIECAM02 em curvas" estiver ativada, mostra o histograma de C, s ou M depois de CIECAM02.\n\nC, s e M não são mostrados no painel principal do histograma.\nPara a saída final, consulte o painel principal do histograma. +TP_COLORAPP_DATACIE;Histogramas de saída em curvas do CIECAM02 +TP_COLORAPP_DATACIE_TOOLTIP;Quando ativado, os histogramas em curvas do CIECAM02 mostram valores/intervalos aproximados para J ou Q, e C, s ou M após os ajustes do CIECAM02.\nEsta seleção não afeta o painel principal do histograma.\n\nQuando desativado, os histogramas em curvas do CIECAM02 mostram L*a*b* valores antes dos ajustes do CIECAM02. +TP_COLORAPP_DEGREE_AUTO_TOOLTIP;Se a caixa de seleção estiver marcada (recomendado), RawTherapee calcula um valor ótimo, que será usado pelo CAT02, e também para todo o CIECAM02.\nPara definir o valor manualmente, primeiro desmarque a caixa de seleção (valores acima de 65 são recomendados). +TP_COLORAPP_DEGREE_TOOLTIP;Quantidade de Adaptação Cromática CIE Transformar 2002. +TP_COLORAPP_FREE;Temp+verde livre + CAT02 + [saída] +TP_COLORAPP_GAMUT;Controle Gamut (L*a*b*) +TP_COLORAPP_GAMUT_TOOLTIP;Permitir controle gamut no modo L*a*b*. +TP_COLORAPP_HUE;Matiz (h) +TP_COLORAPP_HUE_TOOLTIP;Matiz (h) - ângulo entre 0° e 360°. +TP_COLORAPP_LABEL;Modelo de Aparência de Cor CIE 2002 +TP_COLORAPP_LABEL_CAM02;Ajustes de Imagem +TP_COLORAPP_LABEL_SCENE;Condições de Cena +TP_COLORAPP_LABEL_VIEWING;Condições de Visualização +TP_COLORAPP_LIGHT;Luminosidade (J) +TP_COLORAPP_LIGHT_TOOLTIP;Luminosidade no CIECAM02 difere de L*a*b* e da luminosidade em RGB. +TP_COLORAPP_MODEL;Modelo de Ponto Branco +TP_COLORAPP_MODEL_TOOLTIP;Modelo de Ponto Branco.\n\nWB [RT] + [saída]: O balanço de branco do RT é usado para a cena, CIECAM02 está definido para D50, e o balanço de branco do dispositivo de saída é definido em Condições de Visualização.\n\nWB [RT+CAT02] + [saída]: As configurações de balanço de branco do RT são usadas pelo CAT02 e o balanço de branco do dispositivo de saída é definido em Condições de Visualização.\n\nTemp+verde livre + CAT02 + [saída]: temp e verde são selecionados pelo usuário, o balanço de branco do dispositivo de saída é definido em Condições de Visualização. +TP_COLORAPP_NEUTRAL;Restabelecer +TP_COLORAPP_NEUTRAL_TIP;Restabelecer todas as caixas de seleção e curvas dos controles deslizantes para seus valores padrão +TP_COLORAPP_RSTPRO;Proteção vermelho e de tons de pele +TP_COLORAPP_RSTPRO_TOOLTIP;Vermelho & proteção de tons de pele afeta os controles deslizantes e as curvas. +TP_COLORAPP_SHARPCIE;--sem uso-- +TP_COLORAPP_SHARPCIE_TOOLTIP;--sem uso-- +TP_COLORAPP_SURROUND;Borda +TP_COLORAPP_SURROUND_AVER;Média +TP_COLORAPP_SURROUND_DARK;Escuro +TP_COLORAPP_SURROUND_DIM;Sombrio +TP_COLORAPP_SURROUND_EXDARK;Extremamente Escuro (Camada de corte) +TP_COLORAPP_SURROUND_TOOLTIP;Altera tons e cores de acordo com as condições de visualização do dispositivo de saída.\n\nMédia: Ambiente de luz médio (padrão). A imagem não vai mudar.\n\nSombrio: Ambiente sombrio (TV). A imagem ficará ligeiramente escura.\n\nEscuro: Ambiente escuro (projetor). A imagem ficará mais escura.\n\nExtremamente Escuro: Ambiente extremamente escuro (camada de corte). A imagem ficará muito escura. +TP_COLORAPP_SURSOURCE;Borda escura +TP_COLORAPP_SURSOURCE_TOOLTIP;Pode ser usado se a imagem tiver uma borda escura. +TP_COLORAPP_TCMODE_BRIGHTNESS;Brilho +TP_COLORAPP_TCMODE_CHROMA;Croma +TP_COLORAPP_TCMODE_COLORF;Colorido +TP_COLORAPP_TCMODE_LABEL1;Modo de curva 1 +TP_COLORAPP_TCMODE_LABEL2;Modo de curva 2 +TP_COLORAPP_TCMODE_LABEL3;Modo de croma da curva +TP_COLORAPP_TCMODE_LIGHTNESS;Luminosidade +TP_COLORAPP_TCMODE_SATUR;Saturação +TP_COLORAPP_TEMP_TOOLTIP;Para selecionar um iluminante, defina sempre Matiz=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 +TP_COLORAPP_TONECIE;Mapeamento de tom usando CIECAM02 +TP_COLORAPP_TONECIE_TOOLTIP;Se esta opção estiver desativada, o mapeamento de tom é feito no espaço L*a*b*.\nSe esta opção estiver habilitada, o mapeamento de tom é feito usando CIECAM02.\nA ferramenta de Mapeamento de Tom deve estar ativada para que esta configuração tenha efeito. +TP_COLORAPP_WBCAM;WB [RT+CAT02] + [saída] +TP_COLORAPP_WBRT;WB [RT] + [saída] +TP_COLORAPP_YB;Yb% (média luminância) +TP_COLORAPP_YBSCENE;Yb% (média luminância) +TP_COLORAPP_YBSCENE_TOOLTIP;Se "auto" estiver ativado, Yb é calculado a partir do valor médio da luminância real da imagem +TP_COLORTONING_AB;o C/L +TP_COLORTONING_AUTOSAT;Automático +TP_COLORTONING_BALANCE;Balanço +TP_COLORTONING_BY;o C/L +TP_COLORTONING_CHROMAC;Opacidade +TP_COLORTONING_COLOR;Cor +TP_COLORTONING_CURVEEDITOR_CL_TOOLTIP;Opacidade de croma em função da luminância oC=f(L) +TP_COLORTONING_HIGHLIGHT;Realces +TP_COLORTONING_HUE;Matiz +TP_COLORTONING_LAB;Mistura L*a*b* +TP_COLORTONING_LABEL;Tonificação de Cor +TP_COLORTONING_LABGRID;L*a*b* grade de correção de cores +TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 +TP_COLORTONING_LUMA;Luminância +TP_COLORTONING_LUMAMODE;Preserve a luminância +TP_COLORTONING_LUMAMODE_TOOLTIP;Se ativado, quando você mudar de cor (vermelho, verde, ciano, azul, etc.) a luminância de cada pixel é preservada. +TP_COLORTONING_METHOD;Método +TP_COLORTONING_METHOD_TOOLTIP;"L*a*b* mistura", "Controles deslizantes RGB" e "Curvas RGB" usar mistura de cores interpoladas.\n"Balanço de Cor (Sombras/Meio-tons/Realces)" e "Saturação 2 cores" use cores diretas.\n\nA ferramenta Preto-e-Branco pode ser ativada ao usar qualquer método, que permita a tonificação de cores. +TP_COLORTONING_MIDTONES;Meio-tons +TP_COLORTONING_NEUTRAL;Restabelecer controles deslizantes +TP_COLORTONING_NEUTRAL_TIP;Restabelecer todos os valores (Sombras, Meio-tons, Realces) para o padrão. +TP_COLORTONING_OPACITY;Opacidade +TP_COLORTONING_RGBCURVES;RGB - Curvas +TP_COLORTONING_RGBSLIDERS;RGB - Controles deslizantes +TP_COLORTONING_SA;Proteção da Saturação +TP_COLORTONING_SATURATEDOPACITY;Robustez +TP_COLORTONING_SATURATIONTHRESHOLD;Limite +TP_COLORTONING_SHADOWS;Sombras +TP_COLORTONING_SPLITCO;Sombras/Meio-tons/Realces +TP_COLORTONING_SPLITCOCO;Balanço de Cor Sombras/Meio-tons/Realces +TP_COLORTONING_SPLITLR;Saturação 2 cores +TP_COLORTONING_STR;Robustez +TP_COLORTONING_STRENGTH;Robustez +TP_COLORTONING_TWO2;Croma especial '2 cores' +TP_COLORTONING_TWOALL;Croma especial +TP_COLORTONING_TWOBY;Especial a* e b* +TP_COLORTONING_TWOCOLOR_TOOLTIP;Croma padrão:\nResposta linear, a* = b*.\n\nCroma especial:\nResposta linear, a* = b*, mas não ligado - tente sob a diagonal.\n\nEspecial a* e b*:\nResposta linear não ligada com curvas separadas para a* e b*. Destinado a efeitos especiais.\n\nCroma espcial 2 cores:\nMais previsível. +TP_COLORTONING_TWOSTD;Croma padrão +TP_CROP_FIXRATIO;Taxa de bloqueio +TP_CROP_GTDIAGONALS;Regra das Diagonais +TP_CROP_GTEPASSPORT;Passaporte Biométrico +TP_CROP_GTFRAME;Quadro +TP_CROP_GTGRID;Grade +TP_CROP_GTHARMMEANS;Meios Harmônicos +TP_CROP_GTNONE;Nenhum +TP_CROP_GTRULETHIRDS;Regra dos Terços +TP_CROP_GTTRIANGLE1;Triângulos Dourados 1 +TP_CROP_GTTRIANGLE2;Triângulos Dourados 2 +TP_CROP_GUIDETYPE;Tipo de guia: +TP_CROP_H;Altura +TP_CROP_LABEL;Cortar +TP_CROP_PPI;PPI= +TP_CROP_SELECTCROP;Selecione para Cortar +TP_CROP_W;Largura +TP_CROP_X;X +TP_CROP_Y;Y +TP_DARKFRAME_AUTOSELECT;Auto-seleção +TP_DARKFRAME_LABEL;Quadro Escuro +TP_DEFRINGE_LABEL;Defeito +TP_DEFRINGE_RADIUS;Raio +TP_DEFRINGE_THRESHOLD;Limite +TP_DIRPYRDENOISE_CHROMINANCE_AMZ;Auto multi-zonas +TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;Global automático +TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL_TOOLTIP;Tente avaliar o ruído de croma\nTenha cuidado, esse cálculo é mediano e é bastante subjetivo ! +TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;Crominância - Azul-Amarelo +TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Curva de crominância +TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Aumentar (multiplicar) o valor de todos os controles deslizantes de crominância.\nEsta curva permite ajustar a intensidade da redução de ruído cromático em função da cromaticidade, por exemplo, para aumentar a ação em áreas de baixa saturação e diminuí-la nas de alta saturação. +TP_DIRPYRDENOISE_CHROMINANCE_FRAME;Crominância +TP_DIRPYRDENOISE_CHROMINANCE_MANUAL;Manual +TP_DIRPYRDENOISE_CHROMINANCE_MASTER;Crominância - Mestre +TP_DIRPYRDENOISE_CHROMINANCE_METHOD;Método +TP_DIRPYRDENOISE_CHROMINANCE_METHODADVANCED_TOOLTIP;Manual\nAtua na imagem completa.\nControlas as configurações de redução de ruído manualmente.\n\nGlobal automático\nAtua na imagem completa.\n9 zonas são usadas para calcular uma configuração global de redução de ruído de crominância.\n\nVisualização\nAtua em toda a imagem.\nA parte da imagem visível na visualização é usada para calcular as configurações globais de redução de ruído de crominância. +TP_DIRPYRDENOISE_CHROMINANCE_METHOD_TOOLTIP;Manual\nAtua na imagem completa.\nControlas as configurações de redução de ruído manualmente.\n\nGlobal automático\nAtua na imagem completa.\n9 zonas são usadas para calcular uma configuração global de redução de ruído de crominância.\n\nMulti-zonas automáticas\nSem pré-visualização - funciona apenas durante a gravação, usando o método "Pré-visualização" para ajustar o tamanho do mosaico e o centro com o tamanho da visualização e o centro, podes ter uma idéia dos resultados esperados.\nA imagem é dividida em mosaicos (cerca de 10 a 70, dependendo do tamanho da imagem) e cada mosaico recebe suas próprias configurações de redução de ruído de crominância.\n\nPré-visualização\nAtua em toda a imagem.\nA parte da imagem visível na visualização é usada para calcular as configurações globais de redução de ruído de crominância. +TP_DIRPYRDENOISE_CHROMINANCE_PMZ;Pré-visualização multi-zonas +TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW;Pré-visualização +TP_DIRPYRDENOISE_CHROMINANCE_PREVIEWRESIDUAL_INFO_TOOLTIP;Exibe os níveis de ruído remanescentes da parte da imagem visível na visualização após wavelet.\n\n>300 Muito ruidoso\n100-300 Ruidoso\n50-100 Pouco ruidoso\n<50 Ruído muito baixo\n\nCuidado, os valores serão diferentes entre RGB e o modo L*a*b*. Os valores RGB são menos precisos porque o modo RGB não separa completamente luminância e crominância. +TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_INFO;Pré-visualização tamanho=%1, Centro: Px=%2 Py=%3 +TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO;Pré-visualização ruído: Médio=%1 Alto=%2 +TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY;Pré-visualização ruído: Médio= - Alto= - +TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;Mosaico tamanho=%1, Centro: Tx=%2 Ty=%3 +TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;Crominância - Vermelho-Verde +TP_DIRPYRDENOISE_ENH;Modo avançado +TP_DIRPYRDENOISE_ENH_TOOLTIP;Aumenta a qualidade da redução de ruído em detrimento de um aumento de 20% no tempo de processamento. +TP_DIRPYRDENOISE_LABEL;Redução de Ruído +TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Controle de luminância +TP_DIRPYRDENOISE_LUMINANCE_CURVE;Curva de luminância +TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Recuperação de detalhes +TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminância +TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;Luminância +TP_DIRPYRDENOISE_MAIN_COLORSPACE;Espaço de cor +TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* +TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB +TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;Para imagens raw, os métodos RGB ou L*a*b* podem ser usados.\n\nPara imagens não-raw, o método L*a*b* será usado, independentemente da seleção. +TP_DIRPYRDENOISE_MAIN_GAMMA;Gama +TP_DIRPYRDENOISE_MAIN_GAMMA_TOOLTIP;Gama varia a robustez da redução de ruído em toda a gama de tons. Valores menores atuam sobre sombras, enquanto valores maiores tem efeito sobre tons mais claros. +TP_DIRPYRDENOISE_MAIN_MODE;Modo +TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;Aggressivo +TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;Conservador +TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;"Conservador" preserva padrões de croma de baixa frequência, enquanto "agressivo" os oblitera. +TP_DIRPYRDENOISE_MEDIAN_METHOD;Método mediano +TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;Apenas Croma +TP_DIRPYRDENOISE_MEDIAN_METHOD_LAB;L*a*b* +TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;Filtro Mediano +TP_DIRPYRDENOISE_MEDIAN_METHOD_LUMINANCE;Apenas Luminância +TP_DIRPYRDENOISE_MEDIAN_METHOD_RGB;RGB +TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;Ao usar os métodos "Apenas Luminância" e "L*a*b*", a filtragem mediana será realizada logo após a etapa wavelet no pipeline de redução de ruído.\nAo usar o modo "RGB", ele será executado no final do pipeline de redução de ruído. +TP_DIRPYRDENOISE_MEDIAN_METHOD_WEIGHTED;Pesada L* (pequeno) + a*b* (normal) +TP_DIRPYRDENOISE_MEDIAN_PASSES;Iterações medianas +TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;A aplicação de três iterações de filtro mediano com tamanho de janela 3×3 frequentemente dá resultados melhores do que usar uma iteração de filtro mediano com tamanho de janela 7×7. +TP_DIRPYRDENOISE_MEDIAN_TYPE;Tipo mediano +TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Aplique um filtro mediano do tamanho da janela. Quanto maior o tamanho da janela, mais tempo demora.\n\n3×3 suave: trata 5 pixels numa janela de 3×3 pixels.\n3×3: trata 9 pixels numa janela de 3×3 pixels.\n5×5 suave: trata 13 pixels nuam janela de 5×5 pixels.\n5×5: trata 25 pixels nuam janela de 5×5 pixels.\n7×7: trata 49 pixels nuam janelas de 7×7 pixels.\n9×9: trata 81 pixels numa janela de 9×9 pixels.\n\nÀs vezes é possível obter uma qualidade mais alta executando várias iterações com um tamanho de janela menor do que uma iteração com uma maior. +TP_DIRPYRDENOISE_SLI;Controle deslizante +TP_DIRPYRDENOISE_TYPE_3X3;3×3 +TP_DIRPYRDENOISE_TYPE_3X3SOFT;3×3 suave +TP_DIRPYRDENOISE_TYPE_5X5;5×5 +TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5 suave +TP_DIRPYRDENOISE_TYPE_7X7;7×7 +TP_DIRPYRDENOISE_TYPE_9X9;9×9 +TP_DIRPYREQUALIZER_ALGO;Faixa de Cor da Pele +TP_DIRPYREQUALIZER_ALGO_TOOLTIP;Fino: mais próximo das cores da pele, minimizando a ação em outras cores\nLarga: evitar mais artefatos. +TP_DIRPYREQUALIZER_ARTIF;Reduzir artefatos +TP_DIRPYREQUALIZER_HUESKIN;Matiz da pele +TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;Esta pirâmide é para a parte superior, na medida do algoritmo em sua máxima eficiência.\nPara a parte inferior, as zonas de transição.\nSe precisares mover a área significativamente para a esquerda ou para a direita - ou se houver artefatos: o Balanço de branco está incorreto\nPodes reduzir um pouco a zona para prevenirr que o resto da imagem seja afetado. +TP_DIRPYREQUALIZER_LABEL;Contraste pelos Níveis de Detalhe +TP_DIRPYREQUALIZER_LUMACOARSEST;Grosseiro +TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contraste - +TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contraste + +TP_DIRPYREQUALIZER_LUMAFINEST;Refinado +TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutro +TP_DIRPYREQUALIZER_SKIN;Pele segmentação/proteção +TP_DIRPYREQUALIZER_SKIN_TOOLTIP;São segmentados em -100 tons de pele.\nEm 0 todos os tons são tratados igualmente.\nEm +100 tons de pele são protegidos enquanto todos os outros tons são afetados. +TP_DIRPYREQUALIZER_THRESHOLD;Limite +TP_DIRPYREQUALIZER_TOOLTIP;Tenta reduzir artefatos nas transições entre as cores da pele (matiz, croma, luma) e o restante da imagem. +TP_DISTORTION_AMOUNT;Montante +TP_DISTORTION_AUTO_TIP;Corrige automaticamente a distorção da lente em arquivos RAW, combinando-a com a imagem JPEG incorporada, caso exista, e tenha sua distorção de lente corrigida automaticamente pela câmera. +TP_DISTORTION_LABEL;Correção de Distorção +TP_EPD_EDGESTOPPING;Borda parando +TP_EPD_GAMMA;Gama +TP_EPD_LABEL;Mapeamento de Tom +TP_EPD_REWEIGHTINGITERATES;Reponderando iterações +TP_EPD_SCALE;Escala +TP_EPD_STRENGTH;Robustez +TP_EPD_TOOLTIP;O mapeamento de tom é possível no modo L*a*b* (padão) e no modo CIECAM02.\n\nQuando no modo L*a*b*, o mapeamento de tom também pode ser usado na imagem residual da ferramenta de Níveis de Wavelet.\n\nPara ativar o modo de mapeamento de tom CIECAM02, habilite as seguintes configurações:\n1. CIECAM02\n2. Algorítimo = "Brilho + Colorido (QM)"\n3. "Mapeamento de tom usando o brilho do CIECAM02 (Q)" +TP_EXPOSURE_AUTOLEVELS;Níveis Automáticos +TP_EXPOSURE_AUTOLEVELS_TIP;Alterna a execução dos Níveis Automáticos para definir automaticamente os valores do controle deslizante de Exposição baseado numa análise de imagem.\nHabilita a Reconstrução de Realce se necessário. +TP_EXPOSURE_BLACKLEVEL;Preto +TP_EXPOSURE_BRIGHTNESS;Luminosidade +TP_EXPOSURE_CLAMPOOG;Recortar cores fora da gama +TP_EXPOSURE_CLIP;Recortar % +TP_EXPOSURE_CLIP_TIP;A fração de pixels a ser recortada na operação Níveis Automáticos. +TP_EXPOSURE_COMPRHIGHLIGHTS;Compressão de realce +TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Limite de compressão de realce +TP_EXPOSURE_COMPRSHADOWS;Compressão de sombra +TP_EXPOSURE_CONTRAST;Contraste +TP_EXPOSURE_CURVEEDITOR1;Curva de tom 1 +TP_EXPOSURE_CURVEEDITOR2;Curva de tom 2 +TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Por favor, consulte o artigo no RawPedia "Exposição > Curvas de Tom" para aprender como obter os melhores resultados usando duas curvas de tom. +TP_EXPOSURE_EXPCOMP;Compensação de exposição +TP_EXPOSURE_HISTMATCHING;Curva de Tom Auto-Combinada +TP_EXPOSURE_HISTMATCHING_TOOLTIP;Ajusta automaticamente controles deslizantes e curvas (exceto compensação de exposição) para corresponder à aparência da miniatura JPEG incorporada. +TP_EXPOSURE_LABEL;Exposição +TP_EXPOSURE_SATURATION;Saturação +TP_EXPOSURE_TCMODE_FILMLIKE;Gostar filme +TP_EXPOSURE_TCMODE_LABEL1;Modo de curva 1 +TP_EXPOSURE_TCMODE_LABEL2;Modo de curva 2 +TP_EXPOSURE_TCMODE_LUMINANCE;Luminância +TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptivo +TP_EXPOSURE_TCMODE_SATANDVALBLENDING;Saturação e Mistura de Valor +TP_EXPOSURE_TCMODE_STANDARD;Padrão +TP_EXPOSURE_TCMODE_WEIGHTEDSTD;Padrão Ponderado +TP_EXPOS_BLACKPOINT_LABEL;Pontos Pretos Raw +TP_EXPOS_WHITEPOINT_LABEL;Pontos Brancos Raw +TP_FILMSIMULATION_LABEL;Simulação de Filme +TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee está configurado para procurar por imagens Hald CLUT, que são usadas para a ferramenta Simulação de Filme, numa pasta que está demorando para carregar.\nVá para Preferências > Processamento de Imagem > Simulação de Filme\npara ver qual pasta está sendo usada. Deves apontar RawTherapee para uma pasta que contenha apenas imagens Hald CLUT e nada mais, ou para uma pasta vazia, se não quiseres usar a ferramenta Simulação de Filme.\n\nLeia o artigo sobre Simulação de Filme na RawPedia para mais informações.\n\nDesejas cancelar a verificação agora? +TP_FILMSIMULATION_STRENGTH;Robustez +TP_FILMSIMULATION_ZEROCLUTSFOUND;Definir diretório HaldCLUT em Preferências +TP_FLATFIELD_AUTOSELECT;Seleção automática +TP_FLATFIELD_BLURRADIUS;Raio de desfoque +TP_FLATFIELD_BLURTYPE;Tipo de desfoque +TP_FLATFIELD_BT_AREA;Área +TP_FLATFIELD_BT_HORIZONTAL;Horizontal +TP_FLATFIELD_BT_VERTHORIZ;Vertical + Horizontal +TP_FLATFIELD_BT_VERTICAL;Vertical +TP_FLATFIELD_CLIPCONTROL;Controle de recorte +TP_FLATFIELD_CLIPCONTROL_TOOLTIP;O controle de recorte evita realces recortados provocados pela aplicação do campo plano. Se já houver realces recortados antes da aplicação do campo plano, o controle de recorte pode levar à conversão de cores. +TP_FLATFIELD_LABEL;Campo Plano +TP_GAMMA_CURV;Gama +TP_GAMMA_FREE;Gama livre +TP_GAMMA_OUTPUT;Gama de saída +TP_GAMMA_SLOP;Declive (linear) +TP_GENERAL_11SCALE_TOOLTIP;Os efeitos dessa ferramenta só são visíveis ou são precisos numa escala prévia de 1:1. +TP_GRADIENT_CENTER;Centro +TP_GRADIENT_CENTER_X;Centro X +TP_GRADIENT_CENTER_X_TOOLTIP;Deslocar gradiente para a esquerda (valores negativos) ou para a direita (valores positivos). +TP_GRADIENT_CENTER_Y;Centro Y +TP_GRADIENT_CENTER_Y_TOOLTIP;Deslocar gradiente para cima (valores negativos) ou para baixo (valores positivos). +TP_GRADIENT_DEGREE;ângulo +TP_GRADIENT_DEGREE_TOOLTIP;Ângulo de rotação em graus. +TP_GRADIENT_FEATHER;Pena +TP_GRADIENT_FEATHER_TOOLTIP;Largura do gradiente em porcentagem da diagonal da imagem. +TP_GRADIENT_LABEL;Filtro Graduado +TP_GRADIENT_STRENGTH;Robustez +TP_GRADIENT_STRENGTH_TOOLTIP;Robustez do filtro nas paradas. +TP_HLREC_BLEND;Mistura +TP_HLREC_CIELAB;Misturando CIELab +TP_HLREC_COLOR;Propagação de Cor +TP_HLREC_ENA_TOOLTIP;Pode ser ativado para Níveis Automáticos. +TP_HLREC_LABEL;Reconstrução de realce +TP_HLREC_LUMINANCE;Recuperação de Luminância +TP_HLREC_METHOD;Método: +TP_HSVEQUALIZER_CHANNEL;Canal +TP_HSVEQUALIZER_HUE;H +TP_HSVEQUALIZER_LABEL;Equalizador HSV +TP_HSVEQUALIZER_SAT;S +TP_HSVEQUALIZER_VAL;V +TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Exposição de linha de base +TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Empregue o deslocamento de exposição da linha de base do DCP incorporado. A configuração só estará disponível se o DCP estiver selecionado como um. +TP_ICM_APPLYHUESATMAP;Tabela básica +TP_ICM_APPLYHUESATMAP_TOOLTIP;Empregue a tabela básica DCP incorporada (MatizSatMap). A configuração só estará disponível se o DCP estiver selecionado como um. +TP_ICM_APPLYLOOKTABLE;Tabela de aparência +TP_ICM_APPLYLOOKTABLE_TOOLTIP;Empregue a tabela de aparência DCP incorporada. A configuração só estará disponível se o DCP estiver selecionado como um. +TP_ICM_BLENDCMSMATRIX;Misture os realces do ICC com a matriz +TP_ICM_BLENDCMSMATRIX_TOOLTIP;Ativar para recuperar realces recortados ao usar perfis ICC baseados em LUT. +TP_ICM_BPC;Compensação de Ponto Preto +TP_ICM_DCPILLUMINANT;Iluminante +TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpolado !!!!!!!!!!!!!!!!!!!!!!!!! ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! -!ADJUSTER_RESET_TO_DEFAULT;Click - reset to default value.\nCtrl+click - reset to initial value. !GENERAL_RESET;Reset -!HISTORY_MSG_235;B&W - CM - Auto -!HISTORY_MSG_237;B&W - CM -!HISTORY_MSG_273;CT - Color Balance SMH -!HISTORY_MSG_392;W - Residual - Color Balance !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold -!SAMPLEFORMAT_0;Unknown data format -!SAMPLEFORMAT_1;8-bit unsigned -!SAMPLEFORMAT_2;16-bit unsigned -!SAMPLEFORMAT_4;24-bit LogLuv -!SAMPLEFORMAT_8;32-bit LogLuv -!SAMPLEFORMAT_16;16-bit floating-point -!SAMPLEFORMAT_32;24-bit floating-point -!SAMPLEFORMAT_64;32-bit floating-point -!SAVEDLG_WARNFILENAME;File will be named -!SHCSELECTOR_TOOLTIP;Click right mouse button to reset the position of those 3 sliders. -!SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. -!SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. -!THRESHOLDSELECTOR_B;Bottom -!THRESHOLDSELECTOR_BL;Bottom-left -!THRESHOLDSELECTOR_BR;Bottom-right -!THRESHOLDSELECTOR_HINT;Hold the Shift key to move individual control points. -!THRESHOLDSELECTOR_T;Top -!THRESHOLDSELECTOR_TL;Top-left -!THRESHOLDSELECTOR_TR;Top-right -!TOOLBAR_TOOLTIP_COLORPICKER;Lockable Color Picker\n\nWhen enabled:\nClick in the preview with left mouse button to add a color picker\nDrag it around while pressing the left mouse button\nDelete the color picker with a right mouse button click\nDelete all color pickers with Shift + Right mouse button click\nRight click away from any color picker to go back to the Hand tool -!TOOLBAR_TOOLTIP_CROP;Crop selection.\nShortcut: c\nMove the crop area using Shift-mouse drag -!TOOLBAR_TOOLTIP_HAND;Hand tool.\nShortcut: h -!TOOLBAR_TOOLTIP_STRAIGHTEN;Straighten / fine rotation.\nShortcut: s\n\nIndicate the vertical or horizontal by drawing a guide line over the image preview. Angle of rotation will be shown next to the guide line. Center of rotation is the geometrical center of the image. -!TOOLBAR_TOOLTIP_WB;Spot white balance.\nShortcut: w -!TP_BWMIX_ALGO;Algorithm OYCPM -!TP_BWMIX_ALGO_LI;Linear -!TP_BWMIX_ALGO_SP;Special effects -!TP_BWMIX_ALGO_TOOLTIP;Linear: will produce a normal linear response.\nSpecial effects: will produce special effects by mixing channels non-linearly. -!TP_BWMIX_AUTOCH;Auto -!TP_BWMIX_CC_ENABLED;Adjust complementary color -!TP_BWMIX_CC_TOOLTIP;Enable to allow automatic adjustment of complementary colors in ROYGCBPM mode. -!TP_BWMIX_CHANNEL;Luminance equalizer -!TP_BWMIX_CURVEEDITOR1;'Before' curve -!TP_BWMIX_CURVEEDITOR2;'After' curve -!TP_BWMIX_CURVEEDITOR_AFTER_TOOLTIP;Tone curve, after B&W conversion, at the end of treatment. -!TP_BWMIX_CURVEEDITOR_BEFORE_TOOLTIP;Tone curve, just before B&W conversion.\nMay take into account the color components. -!TP_BWMIX_CURVEEDITOR_LH_TOOLTIP;Luminance according to hue L=f(H).\nPay attention to extreme values as they may cause artifacts. -!TP_BWMIX_FILTER;Color Filter -!TP_BWMIX_FILTER_BLUE;Blue -!TP_BWMIX_FILTER_BLUEGREEN;Blue-Green -!TP_BWMIX_FILTER_GREEN;Green -!TP_BWMIX_FILTER_GREENYELLOW;Green-Yellow -!TP_BWMIX_FILTER_NONE;None -!TP_BWMIX_FILTER_PURPLE;Purple -!TP_BWMIX_FILTER_RED;Red -!TP_BWMIX_FILTER_REDYELLOW;Red-Yellow -!TP_BWMIX_FILTER_TOOLTIP;The color filter simulates shots taken with a colored filter placed in front of the lens. Colored filters reduce the transmission of specific color ranges and therefore affect their lightness. E.g. a red filter darkens blue skies. -!TP_BWMIX_FILTER_YELLOW;Yellow -!TP_BWMIX_GAMMA;Gamma Correction -!TP_BWMIX_GAM_TOOLTIP;Correct gamma for each RGB channel. -!TP_BWMIX_LABEL;Black-and-White -!TP_BWMIX_MET;Method -!TP_BWMIX_MET_CHANMIX;Channel Mixer -!TP_BWMIX_MET_DESAT;Desaturation -!TP_BWMIX_MET_LUMEQUAL;Luminance Equalizer -!TP_BWMIX_MIXC;Channel Mixer -!TP_BWMIX_NEUTRAL;Reset -!TP_BWMIX_RGBLABEL;R: %1%% G: %2%% B: %3%% Total: %4%% -!TP_BWMIX_RGBLABEL_HINT;Final RGB factors that take care of all the mixer options.\n"Total" displays the sum of the RGB values:\n- always 100% in relative mode\n- higher (lighter) or lower (darker) than 100% in absolute mode. -!TP_BWMIX_RGB_TOOLTIP;Mix the RGB channels. Use presets for guidance.\nPay attention to negative values that may cause artifacts or erratic behavior. -!TP_BWMIX_SETTING;Presets -!TP_BWMIX_SETTING_TOOLTIP;Different presets (film, landscape, etc.) or manual Channel Mixer settings. -!TP_BWMIX_SET_HIGHCONTAST;High contrast -!TP_BWMIX_SET_HIGHSENSIT;High Sensitivity -!TP_BWMIX_SET_HYPERPANCHRO;Hyper Panchromatic -!TP_BWMIX_SET_INFRARED;Infrared -!TP_BWMIX_SET_LANDSCAPE;Landscape -!TP_BWMIX_SET_LOWSENSIT;Low Sensitivity -!TP_BWMIX_SET_LUMINANCE;Luminance -!TP_BWMIX_SET_NORMCONTAST;Normal Contrast -!TP_BWMIX_SET_ORTHOCHRO;Orthochromatic -!TP_BWMIX_SET_PANCHRO;Panchromatic -!TP_BWMIX_SET_PORTRAIT;Portrait -!TP_BWMIX_SET_RGBABS;Absolute RGB -!TP_BWMIX_SET_RGBREL;Relative RGB -!TP_BWMIX_SET_ROYGCBPMABS;Absolute ROYGCBPM -!TP_BWMIX_SET_ROYGCBPMREL;Relative ROYGCBPM -!TP_BWMIX_TCMODE_FILMLIKE;B&W Film-like -!TP_BWMIX_TCMODE_SATANDVALBLENDING;B&W Saturation and Value Blending -!TP_BWMIX_TCMODE_STANDARD;B&W Standard -!TP_BWMIX_TCMODE_WEIGHTEDSTD;B&W Weighted Standard -!TP_BWMIX_VAL;L -!TP_CACORRECTION_BLUE;Blue -!TP_CACORRECTION_LABEL;Chromatic Aberration Correction -!TP_CACORRECTION_RED;Red -!TP_CBDL_AFT;After Black-and-White -!TP_CBDL_BEF;Before Black-and-White -!TP_CBDL_METHOD;Process located -!TP_CBDL_METHOD_TOOLTIP;Choose whether the Contrast by Detail Levels tool is to be positioned after the Black-and-White tool, which makes it work in L*a*b* space, or before it, which makes it work in RGB space. -!TP_CHMIXER_BLUE;Blue channel -!TP_CHMIXER_GREEN;Green channel -!TP_CHMIXER_LABEL;Channel Mixer -!TP_CHMIXER_RED;Red channel -!TP_CHROMATABERR_LABEL;Chromatic Aberration -!TP_COARSETRAF_TOOLTIP_HFLIP;Flip horizontally. -!TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotate left.\n\nShortcuts:\n[ - Multiple Editor Tabs Mode,\nAlt-[ - Single Editor Tab Mode. -!TP_COARSETRAF_TOOLTIP_ROTRIGHT;Rotate right.\n\nShortcuts:\n] - Multiple Editor Tabs Mode,\nAlt-] - Single Editor Tab Mode. -!TP_COARSETRAF_TOOLTIP_VFLIP;Flip vertically. -!TP_COLORAPP_ADAPTSCENE;Scene absolute luminance -!TP_COLORAPP_ADAPTSCENE_TOOLTIP;Absolute luminance of the scene environment (cd/m²).\n1) Calculated from the Exif data:\nShutter speed - ISO speed - F number - camera exposure correction.\n2) Calculated from the raw white point and RT's Exposure Compensation slider. -!TP_COLORAPP_ADAPTVIEWING;Viewing absolute luminance (cd/m²) -!TP_COLORAPP_ADAPTVIEWING_TOOLTIP;Absolute luminance of the viewing environment\n(usually 16cd/m²). -!TP_COLORAPP_ADAP_AUTO_TOOLTIP;If the checkbox is checked (recommended) RawTherapee calculates an optimum value from the Exif data.\nTo set the value manually, uncheck the checkbox first. -!TP_COLORAPP_ALGO;Algorithm -!TP_COLORAPP_ALGO_ALL;All -!TP_COLORAPP_ALGO_JC;Lightness + Chroma (JC) -!TP_COLORAPP_ALGO_JS;Lightness + Saturation (JS) -!TP_COLORAPP_ALGO_QM;Brightness + Colorfulness (QM) -!TP_COLORAPP_ALGO_TOOLTIP;Lets you choose between parameter subsets or all parameters. -!TP_COLORAPP_BADPIXSL;Hot/bad pixel filter -!TP_COLORAPP_BADPIXSL_TOOLTIP;Suppression of hot/bad (brightly colored) pixels.\n0 = No effect\n1 = Median\n2 = Gaussian.\nAlternatively, adjust the image to avoid very dark shadows.\n\nThese artifacts are due to limitations of CIECAM02. -!TP_COLORAPP_BRIGHT;Brightness (Q) -!TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM02 takes into account the white's luminosity and differs from L*a*b* and RGB brightness. -!TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulness (M) -!TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM02 differs from L*a*b* and RGB colorfulness. -!TP_COLORAPP_CHROMA_S;Saturation (S) -!TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM02 differs from L*a*b* and RGB saturation. -!TP_COLORAPP_CHROMA_TOOLTIP;Chroma in CIECAM02 differs from L*a*b* and RGB chroma. -!TP_COLORAPP_CIECAT_DEGREE;CAT02 adaptation -!TP_COLORAPP_CONTRAST;Contrast (J) -!TP_COLORAPP_CONTRAST_Q;Contrast (Q) -!TP_COLORAPP_CONTRAST_Q_TOOLTIP;Differs from L*a*b* and RGB contrast. -!TP_COLORAPP_CONTRAST_TOOLTIP;Differs from L*a*b* and RGB contrast. -!TP_COLORAPP_CURVEEDITOR1;Tone curve 1 -!TP_COLORAPP_CURVEEDITOR1_TOOLTIP;Shows the histogram of L* (L*a*b*) before CIECAM02.\nIf the "Show CIECAM02 output histograms in curves" checkbox is enabled, shows the histogram of J or Q after CIECAM02.\n\nJ and Q are not shown in the main histogram panel.\n\nFor final output refer to the main histogram panel. -!TP_COLORAPP_CURVEEDITOR2;Tone curve 2 -!TP_COLORAPP_CURVEEDITOR2_TOOLTIP;Same usage as with the second exposure tone curve. -!TP_COLORAPP_CURVEEDITOR3;Color curve -!TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Adjust either chroma, saturation or colorfulness.\n\nShows the histogram of chromaticity (L*a*b*) before CIECAM02.\nIf the "Show CIECAM02 output histograms in curves" checkbox is enabled, shows the histogram of C, s or M after CIECAM02.\n\nC, s and M are not shown in the main histogram panel.\nFor final output refer to the main histogram panel. -!TP_COLORAPP_DATACIE;CIECAM02 output histograms in curves -!TP_COLORAPP_DATACIE_TOOLTIP;When enabled, histograms in CIECAM02 curves show approximate values/ranges for J or Q, and C, s or M after the CIECAM02 adjustments.\nThis selection does not impact the main histogram panel.\n\nWhen disabled, histograms in CIECAM02 curves show L*a*b* values before CIECAM02 adjustments. -!TP_COLORAPP_DEGREE_AUTO_TOOLTIP;If the check-box is checked (recommended), RawTherapee calculates an optimum value, which is then used by CAT02, and also for the entire CIECAM02.\nTo set the value manually, uncheck the check-box first (values above 65 are recommended). -!TP_COLORAPP_DEGREE_TOOLTIP;Amount of CIE Chromatic Adaptation Transform 2002. -!TP_COLORAPP_FREE;Free temp+green + CAT02 + [output] -!TP_COLORAPP_GAMUT;Gamut control (L*a*b*) -!TP_COLORAPP_GAMUT_TOOLTIP;Allow gamut control in L*a*b* mode. -!TP_COLORAPP_HUE;Hue (h) -!TP_COLORAPP_HUE_TOOLTIP;Hue (h) - angle between 0° and 360°. -!TP_COLORAPP_LABEL;CIE Color Appearance Model 2002 -!TP_COLORAPP_LABEL_CAM02;Image Adjustments -!TP_COLORAPP_LABEL_SCENE;Scene Conditions -!TP_COLORAPP_LABEL_VIEWING;Viewing Conditions -!TP_COLORAPP_LIGHT;Lightness (J) -!TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM02 differs from L*a*b* and RGB lightness. -!TP_COLORAPP_MODEL;WP Model -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM02 is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp+green + CAT02 + [output]: temp and green are selected by the user, the output device's white balance is set in Viewing Conditions. -!TP_COLORAPP_NEUTRAL;Reset -!TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values -!TP_COLORAPP_RSTPRO;Red & skin-tones protection -!TP_COLORAPP_RSTPRO_TOOLTIP;Red & skin-tones protection affects both sliders and curves. -!TP_COLORAPP_SHARPCIE;--unused-- -!TP_COLORAPP_SHARPCIE_TOOLTIP;--unused-- -!TP_COLORAPP_SURROUND;Surround -!TP_COLORAPP_SURROUND_AVER;Average -!TP_COLORAPP_SURROUND_DARK;Dark -!TP_COLORAPP_SURROUND_DIM;Dim -!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet) -!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device.\n\nAverage: Average light environment (standard). The image will not change.\n\nDim: Dim environment (TV). The image will become slighty dark.\n\nDark: Dark environment (projector). The image will become more dark.\n\nExtremly Dark: Extremly dark environment (cutsheet). The image will become very dark. -!TP_COLORAPP_SURSOURCE;Dark surround -!TP_COLORAPP_SURSOURCE_TOOLTIP;Can be used if image has a dark border. -!TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness -!TP_COLORAPP_TCMODE_CHROMA;Chroma -!TP_COLORAPP_TCMODE_COLORF;Colorfulness -!TP_COLORAPP_TCMODE_LABEL1;Curve mode 1 -!TP_COLORAPP_TCMODE_LABEL2;Curve mode 2 -!TP_COLORAPP_TCMODE_LABEL3;Curve chroma mode -!TP_COLORAPP_TCMODE_LIGHTNESS;Lightness -!TP_COLORAPP_TCMODE_SATUR;Saturation -!TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 -!TP_COLORAPP_TONECIE;Tone mapping using CIECAM02 -!TP_COLORAPP_TONECIE_TOOLTIP;If this option is disabled, tone mapping is done in L*a*b* space.\nIf this option is enabled, tone mapping is done using CIECAM02.\nThe Tone Mapping tool must be enabled for this setting to take effect. -!TP_COLORAPP_WBCAM;WB [RT+CAT02] + [output] -!TP_COLORAPP_WBRT;WB [RT] + [output] -!TP_COLORAPP_YB;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance -!TP_COLORTONING_AB;o C/L -!TP_COLORTONING_AUTOSAT;Automatic -!TP_COLORTONING_BALANCE;Balance -!TP_COLORTONING_BY;o C/L -!TP_COLORTONING_CHROMAC;Opacity -!TP_COLORTONING_COLOR;Color -!TP_COLORTONING_CURVEEDITOR_CL_TOOLTIP;Chroma opacity as a function of luminance oC=f(L) -!TP_COLORTONING_HIGHLIGHT;Highlights -!TP_COLORTONING_HUE;Hue -!TP_COLORTONING_LAB;L*a*b* blending -!TP_COLORTONING_LABEL;Color Toning -!TP_COLORTONING_LABGRID;L*a*b* color correction grid -!TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 -!TP_COLORTONING_LUMA;Luminance -!TP_COLORTONING_LUMAMODE;Preserve luminance -!TP_COLORTONING_LUMAMODE_TOOLTIP;If enabled, when you change color (red, green, cyan, blue, etc.) the luminance of each pixel is preserved. -!TP_COLORTONING_METHOD;Method -!TP_COLORTONING_METHOD_TOOLTIP;"L*a*b* blending", "RGB sliders" and "RGB curves" use interpolated color blending.\n"Color balance (Shadows/Midtones/Highlights)" and "Saturation 2 colors" use direct colors.\n\nThe Black-and-White tool can be enabled when using any color toning method, which allows for color toning. -!TP_COLORTONING_MIDTONES;Midtones -!TP_COLORTONING_NEUTRAL;Reset sliders -!TP_COLORTONING_NEUTRAL_TIP;Reset all values (Shadows, Midtones, Highlights) to default. -!TP_COLORTONING_OPACITY;Opacity -!TP_COLORTONING_RGBCURVES;RGB - Curves -!TP_COLORTONING_RGBSLIDERS;RGB - Sliders -!TP_COLORTONING_SA;Saturation Protection -!TP_COLORTONING_SATURATEDOPACITY;Strength -!TP_COLORTONING_SATURATIONTHRESHOLD;Threshold -!TP_COLORTONING_SHADOWS;Shadows -!TP_COLORTONING_SPLITCO;Shadows/Midtones/Highlights -!TP_COLORTONING_SPLITCOCO;Color Balance Shadows/Midtones/Highlights -!TP_COLORTONING_SPLITLR;Saturation 2 colors -!TP_COLORTONING_STR;Strength -!TP_COLORTONING_STRENGTH;Strength -!TP_COLORTONING_TWO2;Special chroma '2 colors' -!TP_COLORTONING_TWOALL;Special chroma -!TP_COLORTONING_TWOBY;Special a* and b* -!TP_COLORTONING_TWOCOLOR_TOOLTIP;Standard chroma:\nLinear response, a* = b*.\n\nSpecial chroma:\nLinear response, a* = b*, but unbound - try under the diagonal.\n\nSpecial a* and b*:\nLinear response unbound with separate curves for a* and b*. Intended for special effects.\n\nSpecial chroma 2 colors:\nMore predictable. -!TP_COLORTONING_TWOSTD;Standard chroma -!TP_CROP_FIXRATIO;Lock ratio -!TP_CROP_GTDIAGONALS;Rule of Diagonals -!TP_CROP_GTEPASSPORT;Biometric Passport -!TP_CROP_GTFRAME;Frame -!TP_CROP_GTGRID;Grid -!TP_CROP_GTHARMMEANS;Harmonic Means -!TP_CROP_GTNONE;None -!TP_CROP_GTRULETHIRDS;Rule of Thirds -!TP_CROP_GTTRIANGLE1;Golden Triangles 1 -!TP_CROP_GTTRIANGLE2;Golden Triangles 2 -!TP_CROP_GUIDETYPE;Guide type: -!TP_CROP_H;Height -!TP_CROP_LABEL;Crop -!TP_CROP_PPI;PPI= -!TP_CROP_SELECTCROP;Select Crop -!TP_CROP_W;Width -!TP_CROP_X;X -!TP_CROP_Y;Y -!TP_DARKFRAME_AUTOSELECT;Auto-selection -!TP_DARKFRAME_LABEL;Dark-Frame -!TP_DEFRINGE_LABEL;Defringe -!TP_DEFRINGE_RADIUS;Radius -!TP_DEFRINGE_THRESHOLD;Threshold -!TP_DIRPYRDENOISE_CHROMINANCE_AMZ;Auto multi-zones -!TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;Automatic global -!TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL_TOOLTIP;Try to evaluate chroma noise\nBe careful, this calculation is average, and is quite subjective ! -!TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;Chrominance - Blue-Yellow -!TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Chrominance curve -!TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. -!TP_DIRPYRDENOISE_CHROMINANCE_FRAME;Chrominance -!TP_DIRPYRDENOISE_CHROMINANCE_MANUAL;Manual -!TP_DIRPYRDENOISE_CHROMINANCE_MASTER;Chrominance - Master -!TP_DIRPYRDENOISE_CHROMINANCE_METHOD;Method -!TP_DIRPYRDENOISE_CHROMINANCE_METHODADVANCED_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. -!TP_DIRPYRDENOISE_CHROMINANCE_METHOD_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. -!TP_DIRPYRDENOISE_CHROMINANCE_PMZ;Preview multi-zones -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW;Preview -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEWRESIDUAL_INFO_TOOLTIP;Displays the remaining noise levels of the part of the image visible in the preview after wavelet.\n\n>300 Very noisy\n100-300 Noisy\n50-100 A little noisy\n<50 Very low noise\n\nBeware, the values will differ between RGB and L*a*b* mode. The RGB values are less accurate because the RGB mode does not completely separate luminance and chrominance. -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_INFO;Preview size=%1, Center: Px=%2 Py=%3 -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO;Preview noise: Mean=%1 High=%2 -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY;Preview noise: Mean= - High= - -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;Tile size=%1, Center: Tx=%2 Ty=%3 -!TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;Chrominance - Red-Green -!TP_DIRPYRDENOISE_ENH;Enhanced mode -!TP_DIRPYRDENOISE_ENH_TOOLTIP;Increases noise reduction quality at the expense of a 20% processing time increase. -!TP_DIRPYRDENOISE_LABEL;Noise Reduction -!TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Luminance control -!TP_DIRPYRDENOISE_LUMINANCE_CURVE;Luminance curve -!TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Detail recovery -!TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminance -!TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;Luminance -!TP_DIRPYRDENOISE_MAIN_COLORSPACE;Color space -!TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* -!TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB -!TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;For raw images either RGB or L*a*b* methods can be used.\n\nFor non-raw images the L*a*b* method will be used, regardless of the selection. -!TP_DIRPYRDENOISE_MAIN_GAMMA;Gamma -!TP_DIRPYRDENOISE_MAIN_GAMMA_TOOLTIP;Gamma varies noise reduction strength across the range of tones. Smaller values will target shadows, while larger values will stretch the effect to the brighter tones. -!TP_DIRPYRDENOISE_MAIN_MODE;Mode -!TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;Aggressive -!TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;Conservative -!TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;"Conservative" preserves low frequency chroma patterns, while "aggressive" obliterates them. -!TP_DIRPYRDENOISE_MEDIAN_METHOD;Median method -!TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;Chroma only -!TP_DIRPYRDENOISE_MEDIAN_METHOD_LAB;L*a*b* -!TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;Median Filter -!TP_DIRPYRDENOISE_MEDIAN_METHOD_LUMINANCE;Luminance only -!TP_DIRPYRDENOISE_MEDIAN_METHOD_RGB;RGB -!TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;When using the "Luminance only" and "L*a*b*" methods, median filtering will be performed just after the wavelet step in the noise reduction pipeline.\nWhen using the "RGB" mode, it will be performed at the very end of the noise reduction pipeline. -!TP_DIRPYRDENOISE_MEDIAN_METHOD_WEIGHTED;Weighted L* (little) + a*b* (normal) -!TP_DIRPYRDENOISE_MEDIAN_PASSES;Median iterations -!TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;Applying three median filter iterations with a 3×3 window size often leads to better results than using one median filter iteration with a 7×7 window size. -!TP_DIRPYRDENOISE_MEDIAN_TYPE;Median type -!TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Apply a median filter of the desired window size. The larger the window's size, the longer it takes.\n\n3×3 soft: treats 5 pixels in a 3×3 pixel window.\n3×3: treats 9 pixels in a 3×3 pixel window.\n5×5 soft: treats 13 pixels in a 5×5 pixel window.\n5×5: treats 25 pixels in a 5×5 pixel window.\n7×7: treats 49 pixels in a 7×7 pixel window.\n9×9: treats 81 pixels in a 9×9 pixel window.\n\nSometimes it is possible to achieve higher quality running several iterations with a smaller window size than one iteration with a larger one. -!TP_DIRPYRDENOISE_SLI;Slider -!TP_DIRPYRDENOISE_TYPE_3X3;3×3 -!TP_DIRPYRDENOISE_TYPE_3X3SOFT;3×3 soft -!TP_DIRPYRDENOISE_TYPE_5X5;5×5 -!TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5 soft -!TP_DIRPYRDENOISE_TYPE_7X7;7×7 -!TP_DIRPYRDENOISE_TYPE_9X9;9×9 -!TP_DIRPYREQUALIZER_ALGO;Skin Color Range -!TP_DIRPYREQUALIZER_ALGO_TOOLTIP;Fine: closer to the colors of the skin, minimizing the action on other colors\nLarge: avoid more artifacts. -!TP_DIRPYREQUALIZER_ARTIF;Reduce artifacts -!TP_DIRPYREQUALIZER_HUESKIN;Skin hue -!TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;This pyramid is for the upper part, so far as the algorithm at its maximum efficiency.\nTo the lower part, the transition zones.\nIf you need to move the area significantly to the left or right - or if there are artifacts: the white balance is incorrect\nYou can slightly reduce the zone to prevent the rest of the image is affected. -!TP_DIRPYREQUALIZER_LABEL;Contrast by Detail Levels -!TP_DIRPYREQUALIZER_LUMACOARSEST;Coarsest -!TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Contrast - -!TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Contrast + -!TP_DIRPYREQUALIZER_LUMAFINEST;Finest -!TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutral -!TP_DIRPYREQUALIZER_SKIN;Skin targetting/protection -!TP_DIRPYREQUALIZER_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. -!TP_DIRPYREQUALIZER_THRESHOLD;Threshold -!TP_DIRPYREQUALIZER_TOOLTIP;Attempts to reduce artifacts in the transitions between skin colors (hue, chroma, luma) and the rest of the image. -!TP_DISTORTION_AMOUNT;Amount -!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. -!TP_DISTORTION_LABEL;Distortion Correction -!TP_EPD_EDGESTOPPING;Edge stopping -!TP_EPD_GAMMA;Gamma -!TP_EPD_LABEL;Tone Mapping -!TP_EPD_REWEIGHTINGITERATES;Reweighting iterates -!TP_EPD_SCALE;Scale -!TP_EPD_STRENGTH;Strength -!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)" -!TP_EXPOSURE_AUTOLEVELS;Auto Levels -!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary. -!TP_EXPOSURE_BLACKLEVEL;Black -!TP_EXPOSURE_BRIGHTNESS;Lightness -!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors -!TP_EXPOSURE_CLIP;Clip % -!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation. -!TP_EXPOSURE_COMPRHIGHLIGHTS;Highlight compression -!TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold -!TP_EXPOSURE_COMPRSHADOWS;Shadow compression -!TP_EXPOSURE_CONTRAST;Contrast -!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1 -!TP_EXPOSURE_CURVEEDITOR2;Tone curve 2 -!TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves. -!TP_EXPOSURE_EXPCOMP;Exposure compensation -!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve -!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. -!TP_EXPOSURE_LABEL;Exposure -!TP_EXPOSURE_SATURATION;Saturation -!TP_EXPOSURE_TCMODE_FILMLIKE;Film-like -!TP_EXPOSURE_TCMODE_LABEL1;Curve mode 1 -!TP_EXPOSURE_TCMODE_LABEL2;Curve mode 2 -!TP_EXPOSURE_TCMODE_LUMINANCE;Luminance -!TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual -!TP_EXPOSURE_TCMODE_SATANDVALBLENDING;Saturation and Value Blending -!TP_EXPOSURE_TCMODE_STANDARD;Standard -!TP_EXPOSURE_TCMODE_WEIGHTEDSTD;Weighted Standard -!TP_EXPOS_BLACKPOINT_LABEL;Raw Black Points -!TP_EXPOS_WHITEPOINT_LABEL;Raw White Points -!TP_FILMSIMULATION_LABEL;Film Simulation -!TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? -!TP_FILMSIMULATION_STRENGTH;Strength -!TP_FILMSIMULATION_ZEROCLUTSFOUND;Set HaldCLUT directory in Preferences -!TP_FLATFIELD_AUTOSELECT;Auto-selection -!TP_FLATFIELD_BLURRADIUS;Blur radius -!TP_FLATFIELD_BLURTYPE;Blur type -!TP_FLATFIELD_BT_AREA;Area -!TP_FLATFIELD_BT_HORIZONTAL;Horizontal -!TP_FLATFIELD_BT_VERTHORIZ;Vertical + Horizontal -!TP_FLATFIELD_BT_VERTICAL;Vertical -!TP_FLATFIELD_CLIPCONTROL;Clip control -!TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, clip control can lead to color cast. -!TP_FLATFIELD_LABEL;Flat-Field -!TP_GAMMA_CURV;Gamma -!TP_GAMMA_FREE;Free gamma -!TP_GAMMA_OUTPUT;Output gamma -!TP_GAMMA_SLOP;Slope (linear) -!TP_GENERAL_11SCALE_TOOLTIP;The effects of this tool are only visible or only accurate at a preview scale of 1:1. -!TP_GRADIENT_CENTER;Center -!TP_GRADIENT_CENTER_X;Center X -!TP_GRADIENT_CENTER_X_TOOLTIP;Shift gradient to the left (negative values) or right (positive values). -!TP_GRADIENT_CENTER_Y;Center Y -!TP_GRADIENT_CENTER_Y_TOOLTIP;Shift gradient up (negative values) or down (positive values). -!TP_GRADIENT_DEGREE;Angle -!TP_GRADIENT_DEGREE_TOOLTIP;Rotation angle in degrees. -!TP_GRADIENT_FEATHER;Feather -!TP_GRADIENT_FEATHER_TOOLTIP;Gradient width in percent of the image diagonal. -!TP_GRADIENT_LABEL;Graduated Filter -!TP_GRADIENT_STRENGTH;Strength -!TP_GRADIENT_STRENGTH_TOOLTIP;Filter strength in stops. -!TP_HLREC_BLEND;Blend -!TP_HLREC_CIELAB;CIELab Blending -!TP_HLREC_COLOR;Color Propagation -!TP_HLREC_ENA_TOOLTIP;Could be activated by Auto Levels. -!TP_HLREC_LABEL;Highlight reconstruction -!TP_HLREC_LUMINANCE;Luminance Recovery -!TP_HLREC_METHOD;Method: -!TP_HSVEQUALIZER_CHANNEL;Channel -!TP_HSVEQUALIZER_HUE;H -!TP_HSVEQUALIZER_LABEL;HSV Equalizer -!TP_HSVEQUALIZER_SAT;S -!TP_HSVEQUALIZER_VAL;V -!TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Baseline exposure -!TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. -!TP_ICM_APPLYHUESATMAP;Base table -!TP_ICM_APPLYHUESATMAP_TOOLTIP;Employ the embedded DCP base table (HueSatMap). The setting is only available if the selected DCP has one. -!TP_ICM_APPLYLOOKTABLE;Look table -!TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only available if the selected DCP has one. -!TP_ICM_BLENDCMSMATRIX;Blend ICC highlights with matrix -!TP_ICM_BLENDCMSMATRIX_TOOLTIP;Enable to recover clipped highlights when using LUT-based ICC profiles. -!TP_ICM_BPC;Black Point Compensation -!TP_ICM_DCPILLUMINANT;Illuminant -!TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpolated !TP_ICM_DCPILLUMINANT_TOOLTIP;Select which embedded DCP illuminant to employ. Default is "interpolated" which is a mix between the two based on white balance. The setting is only available if a dual-illuminant DCP with interpolation support is selected. !TP_ICM_INPUTCAMERA;Camera standard !TP_ICM_INPUTCAMERAICC;Auto-matched camera profile From 41c1f21c7687612fbd215322e26fb347b9482ba7 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Fri, 1 Jun 2018 19:13:59 +0200 Subject: [PATCH 38/85] Pixelshift: replaced checkbox to use lmmse by a combobox to allow further demosaicers for parts with motion, #4579 --- rtdata/languages/default | 1 + rtengine/amaze_demosaic_RT.cc | 2 +- rtengine/amaze_vng4_demosaic_RT.cc | 12 +- rtengine/demosaic_algos.cc | 2 +- rtengine/demosaic_algos.cc.save-failed | 3861 ++++++++++++++++++++++++ rtengine/pixelshift.cc | 13 +- rtengine/procparams.cc | 43 +- rtengine/procparams.h | 11 +- rtengine/rawimagesource.cc | 2 +- rtengine/rawimagesource.h | 6 +- rtengine/simpleprocess.cc | 2 - rtgui/bayerprocess.cc | 66 +- rtgui/bayerprocess.h | 4 +- rtgui/paramsedited.cc | 14 +- rtgui/paramsedited.h | 2 +- rtgui/partialpastedlg.cc | 2 +- rtgui/ppversion.h | 4 +- 17 files changed, 3997 insertions(+), 50 deletions(-) create mode 100644 rtengine/demosaic_algos.cc.save-failed diff --git a/rtdata/languages/default b/rtdata/languages/default index 5f16404c2..8231932fb 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1790,6 +1790,7 @@ TP_RAW_MONO;Mono TP_RAW_NONE;None (Shows sensor pattern) TP_RAW_PIXELSHIFT;Pixel Shift TP_RAW_PIXELSHIFTBLUR;Blur motion mask +TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion TP_RAW_PIXELSHIFTEPERISO;Sensitivity TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images. TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames diff --git a/rtengine/amaze_demosaic_RT.cc b/rtengine/amaze_demosaic_RT.cc index 4fe0bee69..1e1b97768 100644 --- a/rtengine/amaze_demosaic_RT.cc +++ b/rtengine/amaze_demosaic_RT.cc @@ -38,7 +38,7 @@ namespace rtengine { -void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue) +void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh, const array2D &rawData, array2D &red, array2D &green, array2D &blue) { BENCHFUN diff --git a/rtengine/amaze_vng4_demosaic_RT.cc b/rtengine/amaze_vng4_demosaic_RT.cc index 0dae2c49b..841abf9d3 100644 --- a/rtengine/amaze_vng4_demosaic_RT.cc +++ b/rtengine/amaze_vng4_demosaic_RT.cc @@ -35,22 +35,24 @@ using namespace std; namespace rtengine { -void RawImageSource::amaze_vng4_demosaic_RT(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue, double contrast) +void RawImageSource::amaze_vng4_demosaic_RT(int winw, int winh, const array2D &rawData, array2D &red, array2D &green, array2D &blue, double contrast) { BENCHFUN if (contrast == 0.0) { // contrast == 0.0 means only AMaZE will be used - amaze_demosaic_RT (0, 0, winw, winh, rawData, red, green, blue); + amaze_demosaic_RT(0, 0, winw, winh, rawData, red, green, blue); return; } - vng4_demosaic (); + vng4_demosaic(rawData, red, green, blue); + array2D redTmp(winw, winh); array2D greenTmp(winw, winh); array2D blueTmp(winw, winh); array2D L(winw, winh); - amaze_demosaic_RT (0, 0, winw, winh, rawData, redTmp, greenTmp, blueTmp); + + amaze_demosaic_RT(0, 0, winw, winh, rawData, redTmp, greenTmp, blueTmp); const float xyz_rgb[3][3] = { // XYZ from RGB { 0.412453, 0.357580, 0.180423 }, { 0.212671, 0.715160, 0.072169 }, @@ -63,7 +65,7 @@ void RawImageSource::amaze_vng4_demosaic_RT(int winw, int winh, array2D & Color::RGB2L(redTmp[i], greenTmp[i], blueTmp[i], L[i], xyz_rgb, winw); } } - // calculate contrast based blend factors to reduce sharpening in regions with low contrast + // calculate contrast based blend factors to use vng4 in regions with low contrast JaggedArray blend(winw, winh); buildBlendMask(L, blend, winw, winh, contrast / 100.f); diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc index 582b00629..d0f4eebd8 100644 --- a/rtengine/demosaic_algos.cc +++ b/rtengine/demosaic_algos.cc @@ -562,7 +562,7 @@ void RawImageSource::hphd_demosaic () //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #define fc(row,col) (prefilters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) typedef unsigned short ushort; -void RawImageSource::vng4_demosaic () +void RawImageSource::vng4_demosaic (const array2D &rawData, array2D &red, array2D &green, array2D &blue) { const signed short int *cp, terms[] = { -2, -2, +0, -1, 0, 0x01, -2, -2, +0, +0, 1, 0x01, -2, -1, -1, +0, 0, 0x01, diff --git a/rtengine/demosaic_algos.cc.save-failed b/rtengine/demosaic_algos.cc.save-failed new file mode 100644 index 000000000..29ee67332 --- /dev/null +++ b/rtengine/demosaic_algos.cc.save-failed @@ -0,0 +1,3861 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + */ +#include +#include + +#include "rawimagesource.h" +#include "rawimagesource_i.h" +#include "jaggedarray.h" +#include "rawimage.h" +#include "mytime.h" +#include "iccmatrices.h" +#include "iccstore.h" +#include "image8.h" +#include "curves.h" +#include "dfmanager.h" +#include "slicer.h" +#include "rt_math.h" +#include "color.h" +#include "../rtgui/multilangmgr.h" +#include "procparams.h" +#include "sleef.c" +#include "opthelper.h" +#include "median.h" +#include "StopWatch.h" +#ifdef _OPENMP +#include +#endif + +using namespace std; + +namespace rtengine +{ +#undef ABS +#undef DIST + +#define ABS(a) ((a)<0?-(a):(a)) +#define DIST(a,b) (ABS(a-b)) +#define CLIREF(x) LIM(x,-200000.0f,200000.0f) // avoid overflow : do not act directly on image[] or pix[] +#define x1125(a) (a + xdivf(a, 3)) +#define x0875(a) (a - xdivf(a, 3)) +#define x0250(a) xdivf(a, 2) +#define x00625(a) xdivf(a, 4) +#define x0125(a) xdivf(a, 3) + +extern const Settings* settings; +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +void RawImageSource::eahd_demosaic () +{ + if (plistener) { + plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::EAHD))); + plistener->setProgress (0.0); + } + + // prepare cache and constants for cielab conversion + //TODO: revisit after conversion to D50 illuminant + lc00 = (0.412453 * imatrices.rgb_cam[0][0] + 0.357580 * imatrices.rgb_cam[0][1] + 0.180423 * imatrices.rgb_cam[0][2]) ;// / 0.950456; + lc01 = (0.412453 * imatrices.rgb_cam[1][0] + 0.357580 * imatrices.rgb_cam[1][1] + 0.180423 * imatrices.rgb_cam[1][2]) ;// / 0.950456; + lc02 = (0.412453 * imatrices.rgb_cam[2][0] + 0.357580 * imatrices.rgb_cam[2][1] + 0.180423 * imatrices.rgb_cam[2][2]) ;// / 0.950456; + + lc10 = 0.212671 * imatrices.rgb_cam[0][0] + 0.715160 * imatrices.rgb_cam[0][1] + 0.072169 * imatrices.rgb_cam[0][2]; + lc11 = 0.212671 * imatrices.rgb_cam[1][0] + 0.715160 * imatrices.rgb_cam[1][1] + 0.072169 * imatrices.rgb_cam[1][2]; + lc12 = 0.212671 * imatrices.rgb_cam[2][0] + 0.715160 * imatrices.rgb_cam[2][1] + 0.072169 * imatrices.rgb_cam[2][2]; + + lc20 = (0.019334 * imatrices.rgb_cam[0][0] + 0.119193 * imatrices.rgb_cam[0][1] + 0.950227 * imatrices.rgb_cam[0][2]) ;// / 1.088754; + lc21 = (0.019334 * imatrices.rgb_cam[1][0] + 0.119193 * imatrices.rgb_cam[1][1] + 0.950227 * imatrices.rgb_cam[1][2]) ;// / 1.088754; + lc22 = (0.019334 * imatrices.rgb_cam[2][0] + 0.119193 * imatrices.rgb_cam[2][1] + 0.950227 * imatrices.rgb_cam[2][2]) ;// / 1.088754; + + int maxindex = 3 * 65536; //2*65536 3 = avoid crash 3/2013 J.Desmis + cache = new double[maxindex]; + threshold = (int)(0.008856 * MAXVALD); + + for (int i = 0; i < maxindex; i++) { + cache[i] = std::cbrt(double(i) / MAXVALD); + } + + // end of cielab preparation + + JaggedArray + rh (W, 3), gh (W, 4), bh (W, 3), + rv (W, 3), gv (W, 4), bv (W, 3), + lLh (W, 3), lah (W, 3), lbh (W, 3), + lLv (W, 3), lav (W, 3), lbv (W, 3), + homh (W, 3), homv (W, 3); + + // interpolate first two lines + interpolate_row_g (gh[0], gv[0], 0); + interpolate_row_g (gh[1], gv[1], 1); + interpolate_row_g (gh[2], gv[2], 2); + interpolate_row_rb (rh[0], bh[0], nullptr, gh[0], gh[1], 0); + interpolate_row_rb (rv[0], bv[0], nullptr, gv[0], gv[1], 0); + interpolate_row_rb (rh[1], bh[1], gh[0], gh[1], gh[2], 1); + interpolate_row_rb (rv[1], bv[1], gv[0], gv[1], gv[2], 1); + + convert_to_cielab_row (rh[0], gh[0], bh[0], lLh[0], lah[0], lbh[0]); + convert_to_cielab_row (rv[0], gv[0], bv[0], lLv[0], lav[0], lbv[0]); + convert_to_cielab_row (rh[1], gh[1], bh[1], lLh[1], lah[1], lbh[1]); + convert_to_cielab_row (rv[1], gv[1], bv[1], lLv[1], lav[1], lbv[1]); + + for (int j = 0; j < W; j++) { + homh[0][j] = 0; + homv[0][j] = 0; + homh[1][j] = 0; + homv[1][j] = 0; + } + + int dLmaph[9]; + int dLmapv[9]; + int dCamaph[9]; + int dCamapv[9]; + int dCbmaph[9]; + int dCbmapv[9]; + + for (int i = 1; i < H - 1; i++) { + int ix = i % 3; + int imx = (i - 1) % 3; + int ipx = (i + 1) % 3; + + if (i < H - 2) { + interpolate_row_g (gh[(i + 2) % 4], gv[(i + 2) % 4], i + 2); + interpolate_row_rb (rh[(i + 1) % 3], bh[(i + 1) % 3], gh[i % 4], gh[(i + 1) % 4], gh[(i + 2) % 4], i + 1); + interpolate_row_rb (rv[(i + 1) % 3], bv[(i + 1) % 3], gv[i % 4], gv[(i + 1) % 4], gv[(i + 2) % 4], i + 1); + } else { + interpolate_row_rb (rh[(i + 1) % 3], bh[(i + 1) % 3], gh[i % 4], gh[(i + 1) % 4], nullptr, i + 1); + interpolate_row_rb (rv[(i + 1) % 3], bv[(i + 1) % 3], gv[i % 4], gv[(i + 1) % 4], nullptr, i + 1); + } + + convert_to_cielab_row (rh[(i + 1) % 3], gh[(i + 1) % 4], bh[(i + 1) % 3], lLh[(i + 1) % 3], lah[(i + 1) % 3], lbh[(i + 1) % 3]); + convert_to_cielab_row (rv[(i + 1) % 3], gv[(i + 1) % 4], bv[(i + 1) % 3], lLv[(i + 1) % 3], lav[(i + 1) % 3], lbv[(i + 1) % 3]); + + for (int j = 0; j < W; j++) { + homh[ipx][j] = 0; + homv[ipx][j] = 0; + } + + int sh, sv, idx; + + for (int j = 1; j < W - 1; j++) { + int dmi = 0; + + for (int x = -1; x <= 1; x++) { + idx = (i + x) % 3; + + for (int y = -1; y <= 1; y++) { + // compute distance in a, b, and L + if (dmi < 4) { + sh = homh[idx][j + y]; + sv = homv[idx][j + y]; + + if (sh > sv) { // fixate horizontal pixel + dLmaph[dmi] = DIST(lLh[ix][j], lLh[idx][j + y]); + dCamaph[dmi] = DIST(lah[ix][j], lah[idx][j + y]); + dCbmaph[dmi] = DIST(lbh[ix][j], lbh[idx][j + y]); + dLmapv[dmi] = DIST(lLv[ix][j], lLh[idx][j + y]); + dCamapv[dmi] = DIST(lav[ix][j], lah[idx][j + y]); + dCbmapv[dmi] = DIST(lbv[ix][j], lbh[idx][j + y]); + } else if (sh < sv) { + dLmaph[dmi] = DIST(lLh[ix][j], lLv[idx][j + y]); + dCamaph[dmi] = DIST(lah[ix][j], lav[idx][j + y]); + dCbmaph[dmi] = DIST(lbh[ix][j], lbv[idx][j + y]); + dLmapv[dmi] = DIST(lLv[ix][j], lLv[idx][j + y]); + dCamapv[dmi] = DIST(lav[ix][j], lav[idx][j + y]); + dCbmapv[dmi] = DIST(lbv[ix][j], lbv[idx][j + y]); + } else { + dLmaph[dmi] = DIST(lLh[ix][j], lLh[idx][j + y]); + dCamaph[dmi] = DIST(lah[ix][j], lah[idx][j + y]); + dCbmaph[dmi] = DIST(lbh[ix][j], lbh[idx][j + y]); + dLmapv[dmi] = DIST(lLv[ix][j], lLv[idx][j + y]); + dCamapv[dmi] = DIST(lav[ix][j], lav[idx][j + y]); + dCbmapv[dmi] = DIST(lbv[ix][j], lbv[idx][j + y]); + } + } else { + dLmaph[dmi] = DIST(lLh[ix][j], lLh[idx][j + y]); + dCamaph[dmi] = DIST(lah[ix][j], lah[idx][j + y]); + dCbmaph[dmi] = DIST(lbh[ix][j], lbh[idx][j + y]); + dLmapv[dmi] = DIST(lLv[ix][j], lLv[idx][j + y]); + dCamapv[dmi] = DIST(lav[ix][j], lav[idx][j + y]); + dCbmapv[dmi] = DIST(lbv[ix][j], lbv[idx][j + y]); + } + + dmi++; + } + } + + // compute eL & eC + int eL = min(max(dLmaph[3], dLmaph[5]), max(dLmapv[1], dLmapv[7])); + int eCa = min(max(dCamaph[3], dCamaph[5]), max(dCamapv[1], dCamapv[7])); + int eCb = min(max(dCbmaph[3], dCbmaph[5]), max(dCbmapv[1], dCbmapv[7])); + + int wh = 0; + + for (int dmi = 0; dmi < 9; dmi++) + if (dLmaph[dmi] <= eL && dCamaph[dmi] <= eCa && dCbmaph[dmi] <= eCb) { + wh++; + } + + int wv = 0; + + for (int dmi = 0; dmi < 9; dmi++) + if (dLmapv[dmi] <= eL && dCamapv[dmi] <= eCa && dCbmapv[dmi] <= eCb) { + wv++; + } + + homh[imx][j - 1] += wh; + homh[imx][j] += wh; + homh[imx][j + 1] += wh; + homh[ix][j - 1] += wh; + homh[ix][j] += wh; + homh[ix][j + 1] += wh; + homh[ipx][j - 1] += wh; + homh[ipx][j] += wh; + homh[ipx][j + 1] += wh; + + homv[imx][j - 1] += wv; + homv[imx][j] += wv; + homv[imx][j + 1] += wv; + homv[ix][j - 1] += wv; + homv[ix][j] += wv; + homv[ix][j + 1] += wv; + homv[ipx][j - 1] += wv; + homv[ipx][j] += wv; + homv[ipx][j + 1] += wv; + } + +//} + // finalize image + int hc, vc; + + for (int j = 0; j < W; j++) { + if (ri->ISGREEN(i - 1, j)) { + green[i - 1][j] = rawData[i - 1][j]; + } else { + hc = homh[imx][j]; + vc = homv[imx][j]; + + if (hc > vc) { + green[i - 1][j] = gh[(i - 1) % 4][j]; + } else if (hc < vc) { + green[i - 1][j] = gv[(i - 1) % 4][j]; + } else { + green[i - 1][j] = (gh[(i - 1) % 4][j] + gv[(i - 1) % 4][j]) / 2; + } + } + } + + if (!(i % 20) && plistener) { + plistener->setProgress ((double)i / (H - 2)); + } + } + + // finish H-2th and H-1th row, homogenity value is still valailable + int hc, vc; + + for (int i = H - 1; i < H + 1; i++) + for (int j = 0; j < W; j++) { + hc = homh[(i - 1) % 3][j]; + vc = homv[(i - 1) % 3][j]; + + if (hc > vc) { + green[i - 1][j] = gh[(i - 1) % 4][j]; + } else if (hc < vc) { + green[i - 1][j] = gv[(i - 1) % 4][j]; + } else { + green[i - 1][j] = (gh[(i - 1) % 4][j] + gv[(i - 1) % 4][j]) / 2; + } + } + + // Interpolate R and B + for (int i = 0; i < H; i++) { + if (i == 0) { + interpolate_row_rb_mul_pp (red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + } else if (i == H - 1) { + interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); + } else { + interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + } + } +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +void RawImageSource::hphd_vertical (float** hpmap, int col_from, int col_to) +{ + float* temp = new float[max(W, H)]; + float* avg = new float[max(W, H)]; + float* dev = new float[max(W, H)]; + + memset (temp, 0, max(W, H)*sizeof(float)); + memset (avg, 0, max(W, H)*sizeof(float)); + memset (dev, 0, max(W, H)*sizeof(float)); + + for (int k = col_from; k < col_to; k++) { + for (int i = 5; i < H - 5; i++) { + temp[i] = (rawData[i - 5][k] - 8 * rawData[i - 4][k] + 27 * rawData[i - 3][k] - 48 * rawData[i - 2][k] + 42 * rawData[i - 1][k] - + (rawData[i + 5][k] - 8 * rawData[i + 4][k] + 27 * rawData[i + 3][k] - 48 * rawData[i + 2][k] + 42 * rawData[i + 1][k])) / 100.0; + temp[i] = ABS(temp[i]); + } + + for (int j = 4; j < H - 4; j++) { + float avgL = (temp[j - 4] + temp[j - 3] + temp[j - 2] + temp[j - 1] + temp[j] + temp[j + 1] + temp[j + 2] + temp[j + 3] + temp[j + 4]) / 9.0; + avg[j] = avgL; + float devL = ((temp[j - 4] - avgL) * (temp[j - 4] - avgL) + (temp[j - 3] - avgL) * (temp[j - 3] - avgL) + (temp[j - 2] - avgL) * (temp[j - 2] - avgL) + (temp[j - 1] - avgL) * (temp[j - 1] - avgL) + (temp[j] - avgL) * (temp[j] - avgL) + (temp[j + 1] - avgL) * (temp[j + 1] - avgL) + (temp[j + 2] - avgL) * (temp[j + 2] - avgL) + (temp[j + 3] - avgL) * (temp[j + 3] - avgL) + (temp[j + 4] - avgL) * (temp[j + 4] - avgL)) / 9.0; + + if (devL < 0.001) { + devL = 0.001; + } + + dev[j] = devL; + } + + for (int j = 5; j < H - 5; j++) { + float avgL = avg[j - 1]; + float avgR = avg[j + 1]; + float devL = dev[j - 1]; + float devR = dev[j + 1]; + hpmap[j][k] = avgL + (avgR - avgL) * devL / (devL + devR); + } + } + + delete [] temp; + delete [] avg; + delete [] dev; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +void RawImageSource::hphd_horizontal (float** hpmap, int row_from, int row_to) +{ + float* temp = new float[max(W, H)]; + float* avg = new float[max(W, H)]; + float* dev = new float[max(W, H)]; + + memset (temp, 0, max(W, H)*sizeof(float)); + memset (avg, 0, max(W, H)*sizeof(float)); + memset (dev, 0, max(W, H)*sizeof(float)); + + for (int i = row_from; i < row_to; i++) { + for (int j = 5; j < W - 5; j++) { + temp[j] = (rawData[i][j - 5] - 8 * rawData[i][j - 4] + 27 * rawData[i][j - 3] - 48 * rawData[i][j - 2] + 42 * rawData[i][j - 1] - + (rawData[i][j + 5] - 8 * rawData[i][j + 4] + 27 * rawData[i][j + 3] - 48 * rawData[i][j + 2] + 42 * rawData[i][j + 1])) / 100; + temp[j] = ABS(temp[j]); + } + + for (int j = 4; j < W - 4; j++) { + float avgL = (temp[j - 4] + temp[j - 3] + temp[j - 2] + temp[j - 1] + temp[j] + temp[j + 1] + temp[j + 2] + temp[j + 3] + temp[j + 4]) / 9.0; + avg[j] = avgL; + float devL = ((temp[j - 4] - avgL) * (temp[j - 4] - avgL) + (temp[j - 3] - avgL) * (temp[j - 3] - avgL) + (temp[j - 2] - avgL) * (temp[j - 2] - avgL) + (temp[j - 1] - avgL) * (temp[j - 1] - avgL) + (temp[j] - avgL) * (temp[j] - avgL) + (temp[j + 1] - avgL) * (temp[j + 1] - avgL) + (temp[j + 2] - avgL) * (temp[j + 2] - avgL) + (temp[j + 3] - avgL) * (temp[j + 3] - avgL) + (temp[j + 4] - avgL) * (temp[j + 4] - avgL)) / 9.0; + + if (devL < 0.001) { + devL = 0.001; + } + + dev[j] = devL; + } + + for (int j = 5; j < W - 5; j++) { + float avgL = avg[j - 1]; + float avgR = avg[j + 1]; + float devL = dev[j - 1]; + float devR = dev[j + 1]; + float hpv = avgL + (avgR - avgL) * devL / (devL + devR); + + if (hpmap[i][j] < 0.8 * hpv) { + hpmap[i][j] = 2; + } else if (hpv < 0.8 * hpmap[i][j]) { + hpmap[i][j] = 1; + } else { + hpmap[i][j] = 0; + } + } + } + + delete [] temp; + delete [] avg; + delete [] dev; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +void RawImageSource::hphd_green (float** hpmap) +{ +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = 3; i < H - 3; i++) { + for (int j = 3; j < W - 3; j++) { + if (ri->ISGREEN(i, j)) { + green[i][j] = rawData[i][j]; + } else { + if (hpmap[i][j] == 1) { + int g2 = rawData[i][j + 1] + ((rawData[i][j] - rawData[i][j + 2]) / 2); + int g4 = rawData[i][j - 1] + ((rawData[i][j] - rawData[i][j - 2]) / 2); + + int dx = rawData[i][j + 1] - rawData[i][j - 1]; + int d1 = rawData[i][j + 3] - rawData[i][j + 1]; + int d2 = rawData[i][j + 2] - rawData[i][j]; + int d3 = (rawData[i - 1][j + 2] - rawData[i - 1][j]) / 2; + int d4 = (rawData[i + 1][j + 2] - rawData[i + 1][j]) / 2; + + double e2 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + + d1 = rawData[i][j - 3] - rawData[i][j - 1]; + d2 = rawData[i][j - 2] - rawData[i][j]; + d3 = (rawData[i - 1][j - 2] - rawData[i - 1][j]) / 2; + d4 = (rawData[i + 1][j - 2] - rawData[i + 1][j]) / 2; + + double e4 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + + green[i][j] = (e2 * g2 + e4 * g4) / (e2 + e4); + } else if (hpmap[i][j] == 2) { + int g1 = rawData[i - 1][j] + ((rawData[i][j] - rawData[i - 2][j]) / 2); + int g3 = rawData[i + 1][j] + ((rawData[i][j] - rawData[i + 2][j]) / 2); + + int dy = rawData[i + 1][j] - rawData[i - 1][j]; + int d1 = rawData[i - 1][j] - rawData[i - 3][j]; + int d2 = rawData[i][j] - rawData[i - 2][j]; + int d3 = (rawData[i][j - 1] - rawData[i - 2][j - 1]) / 2; + int d4 = (rawData[i][j + 1] - rawData[i - 2][j + 1]) / 2; + + double e1 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + + d1 = rawData[i + 1][j] - rawData[i + 3][j]; + d2 = rawData[i][j] - rawData[i + 2][j]; + d3 = (rawData[i][j - 1] - rawData[i + 2][j - 1]) / 2; + d4 = (rawData[i][j + 1] - rawData[i + 2][j + 1]) / 2; + + double e3 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + + green[i][j] = (e1 * g1 + e3 * g3) / (e1 + e3); + } else { + int g1 = rawData[i - 1][j] + ((rawData[i][j] - rawData[i - 2][j]) / 2); + int g2 = rawData[i][j + 1] + ((rawData[i][j] - rawData[i][j + 2]) / 2); + int g3 = rawData[i + 1][j] + ((rawData[i][j] - rawData[i + 2][j]) / 2); + int g4 = rawData[i][j - 1] + ((rawData[i][j] - rawData[i][j - 2]) / 2); + + int dx = rawData[i][j + 1] - rawData[i][j - 1]; + int dy = rawData[i + 1][j] - rawData[i - 1][j]; + + int d1 = rawData[i - 1][j] - rawData[i - 3][j]; + int d2 = rawData[i][j] - rawData[i - 2][j]; + int d3 = (rawData[i][j - 1] - rawData[i - 2][j - 1]) / 2; + int d4 = (rawData[i][j + 1] - rawData[i - 2][j + 1]) / 2; + + double e1 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + + d1 = rawData[i][j + 3] - rawData[i][j + 1]; + d2 = rawData[i][j + 2] - rawData[i][j]; + d3 = (rawData[i - 1][j + 2] - rawData[i - 1][j]) / 2; + d4 = (rawData[i + 1][j + 2] - rawData[i + 1][j]) / 2; + + double e2 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + + d1 = rawData[i + 1][j] - rawData[i + 3][j]; + d2 = rawData[i][j] - rawData[i + 2][j]; + d3 = (rawData[i][j - 1] - rawData[i + 2][j - 1]) / 2; + d4 = (rawData[i][j + 1] - rawData[i + 2][j + 1]) / 2; + + double e3 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + + d1 = rawData[i][j - 3] - rawData[i][j - 1]; + d2 = rawData[i][j - 2] - rawData[i][j]; + d3 = (rawData[i - 1][j - 2] - rawData[i - 1][j]) / 2; + d4 = (rawData[i + 1][j - 2] - rawData[i + 1][j]) / 2; + + double e4 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + + green[i][j] = (e1 * g1 + e2 * g2 + e3 * g3 + e4 * g4) / (e1 + e2 + e3 + e4); + } + } + } + } +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +void RawImageSource::hphd_demosaic () +{ + if (plistener) { + plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD))); + plistener->setProgress (0.0); + } + + JaggedArray hpmap (W, H, true); + +#ifdef _OPENMP + #pragma omp parallel + { + int tid = omp_get_thread_num(); + int nthreads = omp_get_num_threads(); + int blk = W / nthreads; + + if (tid < nthreads - 1) { + hphd_vertical (hpmap, tid * blk, (tid + 1)*blk); + } else { + hphd_vertical (hpmap, tid * blk, W); + } + } +#else + hphd_vertical (hpmap, 0, W); +#endif + + if (plistener) { + plistener->setProgress (0.33); + } + +#ifdef _OPENMP + #pragma omp parallel + { + int tid = omp_get_thread_num(); + int nthreads = omp_get_num_threads(); + int blk = H / nthreads; + + if (tid < nthreads - 1) { + hphd_horizontal (hpmap, tid * blk, (tid + 1)*blk); + } else { + hphd_horizontal (hpmap, tid * blk, H); + } + } +#else + hphd_horizontal (hpmap, 0, H); +#endif + + hphd_green (hpmap); + + if (plistener) { + plistener->setProgress (0.66); + } + + for (int i = 0; i < H; i++) { + if (i == 0) { + interpolate_row_rb_mul_pp (red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + } else if (i == H - 1) { + interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); + } else { + interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + } + } + + if (plistener) { + plistener->setProgress (1.0); + } +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +#define fc(row,col) (prefilters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) +typedef unsigned short ushort; +void RawImageSource::vng4_demosaic () +{ + const signed short int *cp, terms[] = { + -2, -2, +0, -1, 0, 0x01, -2, -2, +0, +0, 1, 0x01, -2, -1, -1, +0, 0, 0x01, + -2, -1, +0, -1, 0, 0x02, -2, -1, +0, +0, 0, 0x03, -2, -1, +0, +1, 1, 0x01, + -2, +0, +0, -1, 0, 0x06, -2, +0, +0, +0, 1, 0x02, -2, +0, +0, +1, 0, 0x03, + -2, +1, -1, +0, 0, 0x04, -2, +1, +0, -1, 1, 0x04, -2, +1, +0, +0, 0, 0x06, + -2, +1, +0, +1, 0, 0x02, -2, +2, +0, +0, 1, 0x04, -2, +2, +0, +1, 0, 0x04, + -1, -2, -1, +0, 0, 0x80, -1, -2, +0, -1, 0, 0x01, -1, -2, +1, -1, 0, 0x01, + -1, -2, +1, +0, 1, 0x01, -1, -1, -1, +1, 0, 0x88, -1, -1, +1, -2, 0, 0x40, + -1, -1, +1, -1, 0, 0x22, -1, -1, +1, +0, 0, 0x33, -1, -1, +1, +1, 1, 0x11, + -1, +0, -1, +2, 0, 0x08, -1, +0, +0, -1, 0, 0x44, -1, +0, +0, +1, 0, 0x11, + -1, +0, +1, -2, 1, 0x40, -1, +0, +1, -1, 0, 0x66, -1, +0, +1, +0, 1, 0x22, + -1, +0, +1, +1, 0, 0x33, -1, +0, +1, +2, 1, 0x10, -1, +1, +1, -1, 1, 0x44, + -1, +1, +1, +0, 0, 0x66, -1, +1, +1, +1, 0, 0x22, -1, +1, +1, +2, 0, 0x10, + -1, +2, +0, +1, 0, 0x04, -1, +2, +1, +0, 1, 0x04, -1, +2, +1, +1, 0, 0x04, + +0, -2, +0, +0, 1, 0x80, +0, -1, +0, +1, 1, 0x88, +0, -1, +1, -2, 0, 0x40, + +0, -1, +1, +0, 0, 0x11, +0, -1, +2, -2, 0, 0x40, +0, -1, +2, -1, 0, 0x20, + +0, -1, +2, +0, 0, 0x30, +0, -1, +2, +1, 1, 0x10, +0, +0, +0, +2, 1, 0x08, + +0, +0, +2, -2, 1, 0x40, +0, +0, +2, -1, 0, 0x60, +0, +0, +2, +0, 1, 0x20, + +0, +0, +2, +1, 0, 0x30, +0, +0, +2, +2, 1, 0x10, +0, +1, +1, +0, 0, 0x44, + +0, +1, +1, +2, 0, 0x10, +0, +1, +2, -1, 1, 0x40, +0, +1, +2, +0, 0, 0x60, + +0, +1, +2, +1, 0, 0x20, +0, +1, +2, +2, 0, 0x10, +1, -2, +1, +0, 0, 0x80, + +1, -1, +1, +1, 0, 0x88, +1, +0, +1, +2, 0, 0x08, +1, +0, +2, -1, 0, 0x40, + +1, +0, +2, +1, 0, 0x10 + }, + chood[] = { -1, -1, -1, 0, -1, +1, 0, +1, +1, +1, +1, 0, +1, -1, 0, -1 }; + + double progress = 0.0; + const bool plistenerActive = plistener; + + if (plistenerActive) { + plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4))); + plistener->setProgress (progress); + } + + const unsigned prefilters = ri->prefilters; + const int width = W, height = H; + constexpr unsigned int colors = 4; + float (*image)[4]; + + image = (float (*)[4]) calloc (height * width, sizeof * image); + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ii = 0; ii < H; ii++) + for (int jj = 0; jj < W; jj++) { + image[ii * W + jj][fc(ii, jj)] = rawData[ii][jj]; + } + + { + int lcode[16][16][32]; + float mul[16][16][8]; + float csum[16][16][4]; + +// first linear interpolation + for (int row = 0; row < 16; row++) + for (int col = 0; col < 16; col++) { + int * ip = lcode[row][col]; + int mulcount = 0; + float sum[4]; + memset (sum, 0, sizeof sum); + + for (int y = -1; y <= 1; y++) + for (int x = -1; x <= 1; x++) { + int shift = (y == 0) + (x == 0); + + if (shift == 2) { + continue; + } + + int color = fc(row + y, col + x); + *ip++ = (width * y + x) * 4 + color; + + mul[row][col][mulcount] = (1 << shift); + *ip++ = color; + sum[color] += (1 << shift); + mulcount++; + } + + int colcount = 0; + + for (unsigned int c = 0; c < colors; c++) + if (c != fc(row, col)) { + *ip++ = c; + csum[row][col][colcount] = sum[c]; + colcount ++; + } + } + +StopWatch Stop1("loop 1"); +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int row = 1; row < height - 1; row++) { + for (int col = 1; col < width - 1; col++) { + float * pix = image[row * width + col]; + int * ip = lcode[row & 15][col & 15]; + float sum[4]; + memset (sum, 0, sizeof sum); + + for (int i = 0; i < 8; i++, ip += 2) { + sum[ip[1]] += pix[ip[0]] * mul[row & 15][col & 15][i]; + } + + for (unsigned int i = 0; i < colors - 1; i++, ip++) { + pix[ip[0]] = sum[ip[0]] / csum[row & 15][col & 15][i]; + } + } + } +Stop1.stop(); + } + const int prow = 7, pcol = 1; + int *code[8][2]; + int t, g; + int * ip = (int *) calloc ((prow + 1) * (pcol + 1), 1280); + + for (int row = 0; row <= prow; row++) /* Precalculate for VNG */ + for (int col = 0; col <= pcol; col++) { + code[row][col] = ip; + + for (cp = terms, t = 0; t < 64; t++) { + int y1 = *cp++; + int x1 = *cp++; + int y2 = *cp++; + int x2 = *cp++; + int weight = *cp++; + int grads = *cp++; + unsigned int color = fc(row + y1, col + x1); + + if (fc(row + y2, col + x2) != color) { + continue; + } + + int diag = (fc(row, col + 1) == color && fc(row + 1, col) == color) ? 2 : 1; + + if (abs(y1 - y2) == diag && abs(x1 - x2) == diag) { + continue; + } + + *ip++ = (y1 * width + x1) * 4 + color; + *ip++ = (y2 * width + x2) * 4 + color; + *ip++ = weight; + + for (g = 0; g < 8; g++) + if (grads & (1 << g)) { + *ip++ = g; + } + + *ip++ = -1; + } + + *ip++ = INT_MAX; + + for (cp = chood, g = 0; g < 8; g++) { + int y = *cp++; + int x = *cp++; + *ip++ = (y * width + x) * 4; + unsigned int color = fc(row, col); + + if (fc(row + y, col + x) != color && fc(row + y * 2, col + x * 2) == color) { + *ip++ = (y * width + x) * 8 + color; + } else { + *ip++ = 0; + } + } + } + + if(plistenerActive) { + progress = 0.1; + plistener->setProgress (progress); + } + +StopWatch Stop2("loop 2"); + +#ifdef _OPENMP + #pragma omp parallel +#endif + { + float thold; + int g; + constexpr int progressStep = 64; + const double progressInc = (0.98 - progress) / ((height - 2) / progressStep); +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) nowait +#endif + + for (int row = 2; row < height - 2; row++) { /* Do VNG interpolation */ + for (int col = 2; col < width - 2; col++) { + float * pix = image[row * width + col]; + int * ip = code[row & prow][col & pcol]; + float gval[8] = {}; +// gval[0] = gval[1] = gval[2] = gval[3] = gval[4] = gval[5] = gval[6] = gval[7] = 0.f; +// memset (gval, 0, sizeof gval); + + while ((g = ip[0]) != INT_MAX) { /* Calculate gradients */ + float diff = fabsf(pix[g] - pix[ip[1]]) * (1 << ip[2]); + gval[ip[3]] += diff; + ip += 4; + + while ((g = *ip++) != -1) { + gval[g] += diff; + } + } + + ip++; + { + float gmin, gmax; + gmin = gmax = gval[0]; /* Choose a threshold */ + + for (g = 1; g < 8; g++) { + gmin = rtengine::min(gmin, gval[g]); +// if (gmin > gval[g]) { +// gmin = gval[g]; +// } + + gmax = rtengine::max(gmax, gval[g]); +// if (gmax < gval[g]) { +// gmax = gval[g]; +// } + } + + thold = gmin + (gmax / 2); + } + float sum[3] = {}; +// sum[0] = sum[1] = sum[2] = 0.f; +// memset (sum, 0, sizeof sum); + float t1, t2; + int color = fc(row, col); + t1 = t2 = pix[color]; + + if(color & 1) { + int num = 0; + + for (g = 0; g < 8; g++, ip += 2) { /* Average the neighbors */ + if (gval[g] <= thold) { + if(ip[1]) { + sum[0] += (t1 + pix[ip[1]]) * 0.5f; + } + + sum[1] += pix[ip[0] + (color ^ 2)]; + num++; + } + } + + t1 += (sum[1] - sum[0]) / num; + } else { + int num = 0; + + for (g = 0; g < 8; g++, ip += 2) { /* Average the neighbors */ + if (gval[g] <= thold) { + sum[1] += pix[ip[0] + 1]; + sum[2] += pix[ip[0] + 3]; + + if(ip[1]) { + sum[0] += (t1 + pix[ip[1]]) * 0.5f; + } + + num++; + } + } + + t1 += (sum[1] - sum[0]) / num; + t2 += (sum[2] - sum[0]) / num; + } + + green[row][col] = 0.5f * (t1 + t2); + } + + if(plistenerActive) { + if((row % progressStep) == 0) +#ifdef _OPENMP + #pragma omp critical (updateprogress) +#endif + { + progress += progressInc; + plistener->setProgress (progress); + } + } + } + + } +Stop2.stop(); + free (code[0][0]); + free (image); + + if(plistenerActive) { + plistener->setProgress (0.98); + } +StopWatch Stop3("loop 3"); + + // Interpolate R and B +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = 0; i < H; i++) { + if (i == 0) + // rm, gm, bm must be recovered + //interpolate_row_rb_mul_pp (red, blue, NULL, green[i], green[i+1], i, rm, gm, bm, 0, W, 1); + { + interpolate_row_rb_mul_pp (red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + } else if (i == H - 1) { + interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); + } else { + interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + } + } +Stop3.stop(); + if(plistenerActive) { + plistener->setProgress (1.0); + } +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +#undef fc +#define fc(row,col) \ + (ri->get_filters() >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) + +#define FORCC for (unsigned int c=0; c < colors; c++) + +/* + Patterned Pixel Grouping Interpolation by Alain Desbiolles +*/ +void RawImageSource::ppg_demosaic() +{ + int width = W, height = H; + int dir[5] = { 1, width, -1, -width, 1 }; + int row, col, diff[2] = {}, guess[2], c, d, i; + float (*pix)[4]; + + float (*image)[4]; + + if (plistener) { + // looks like ppg isn't supported anymore + //plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::ppg))); + plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), "xxx")); + plistener->setProgress (0.0); + } + + image = (float (*)[4]) calloc (H * W, sizeof * image); + + for (int ii = 0; ii < H; ii++) + for (int jj = 0; jj < W; jj++) { + image[ii * W + jj][fc(ii, jj)] = rawData[ii][jj]; + } + + border_interpolate(3, image); + + /* Fill in the green layer with gradients and pattern recognition: */ + for (row = 3; row < height - 3; row++) { + for (col = 3 + (FC(row, 3) & 1), c = FC(row, col); col < width - 3; col += 2) { + pix = image + row * width + col; + + for (i = 0; (d = dir[i]) > 0; i++) { + guess[i] = (pix[-d][1] + pix[0][c] + pix[d][1]) * 2 + - pix[-2 * d][c] - pix[2 * d][c]; + diff[i] = ( ABS(pix[-2 * d][c] - pix[ 0][c]) + + ABS(pix[ 2 * d][c] - pix[ 0][c]) + + ABS(pix[ -d][1] - pix[ d][1]) ) * 3 + + ( ABS(pix[ 3 * d][1] - pix[ d][1]) + + ABS(pix[-3 * d][1] - pix[-d][1]) ) * 2; + } + + d = dir[i = diff[0] > diff[1]]; + pix[0][1] = median(static_cast(guess[i] >> 2), pix[d][1], pix[-d][1]); + } + + if(plistener) { + plistener->setProgress(0.33 * row / (height - 3)); + } + } + + /* Calculate red and blue for each green pixel: */ + for (row = 1; row < height - 1; row++) { + for (col = 1 + (FC(row, 2) & 1), c = FC(row, col + 1); col < width - 1; col += 2) { + pix = image + row * width + col; + + for (i = 0; (d = dir[i]) > 0; c = 2 - c, i++) + pix[0][c] = CLIP(0.5 * (pix[-d][c] + pix[d][c] + 2 * pix[0][1] + - pix[-d][1] - pix[d][1]) ); + } + + if(plistener) { + plistener->setProgress(0.33 + 0.33 * row / (height - 1)); + } + } + + /* Calculate blue for red pixels and vice versa: */ + for (row = 1; row < height - 1; row++) { + for (col = 1 + (FC(row, 1) & 1), c = 2 - FC(row, col); col < width - 1; col += 2) { + pix = image + row * width + col; + + for (i = 0; (d = dir[i] + dir[i + 1]) > 0; i++) { + diff[i] = ABS(pix[-d][c] - pix[d][c]) + + ABS(pix[-d][1] - pix[0][1]) + + ABS(pix[ d][1] - pix[0][1]); + guess[i] = pix[-d][c] + pix[d][c] + 2 * pix[0][1] + - pix[-d][1] - pix[d][1]; + } + + if (diff[0] != diff[1]) { + pix[0][c] = CLIP(guess[diff[0] > diff[1]] / 2); + } else { + pix[0][c] = CLIP((guess[0] + guess[1]) / 4); + } + } + + if(plistener) { + plistener->setProgress(0.67 + 0.33 * row / (height - 1)); + } + } + + red(W, H); + + for (int i = 0; i < H; i++) + for (int j = 0; j < W; j++) { + red[i][j] = image[i * W + j][0]; + } + + green(W, H); + + for (int i = 0; i < H; i++) + for (int j = 0; j < W; j++) { + green[i][j] = image[i * W + j][1]; + } + + blue(W, H); + + for (int i = 0; i < H; i++) + for (int j = 0; j < W; j++) { + blue[i][j] = image[i * W + j][2]; + } + + free (image); +} + +void RawImageSource::border_interpolate(unsigned int border, float (*image)[4], unsigned int start, unsigned int end) +{ + unsigned row, col, y, x, f, sum[8]; + unsigned int width = W, height = H; + unsigned int colors = 3; + + if (end == 0 ) { + end = H; + } + + for (row = start; row < end; row++) + for (col = 0; col < width; col++) { + if (col == border && row >= border && row < height - border) { + col = width - border; + } + + memset (sum, 0, sizeof sum); + + for (y = row - 1; y != row + 2; y++) + for (x = col - 1; x != col + 2; x++) + if (y < height && x < width) { + f = fc(y, x); + sum[f] += image[y * width + x][f]; + sum[f + 4]++; + } + + f = fc(row, col); + + FORCC if (c != f && sum[c + 4]) { + image[row * width + col][c] = sum[c] / sum[c + 4]; + } + } +} + +void RawImageSource::border_interpolate2( int winw, int winh, int lborders) +{ + int bord = lborders; + int width = winw; + int height = winh; + + for (int i = 0; i < height; i++) { + + float sum[6]; + + for (int j = 0; j < bord; j++) { //first few columns + for (int c = 0; c < 6; c++) { + sum[c] = 0; + } + + for (int i1 = i - 1; i1 < i + 2; i1++) + for (int j1 = j - 1; j1 < j + 2; j1++) { + if ((i1 > -1) && (i1 < height) && (j1 > -1)) { + int c = FC(i1, j1); + sum[c] += rawData[i1][j1]; + sum[c + 3]++; + } + } + + int c = FC(i, j); + + if (c == 1) { + red[i][j] = sum[0] / sum[3]; + green[i][j] = rawData[i][j]; + blue[i][j] = sum[2] / sum[5]; + } else { + green[i][j] = sum[1] / sum[4]; + + if (c == 0) { + red[i][j] = rawData[i][j]; + blue[i][j] = sum[2] / sum[5]; + } else { + red[i][j] = sum[0] / sum[3]; + blue[i][j] = rawData[i][j]; + } + } + }//j + + for (int j = width - bord; j < width; j++) { //last few columns + for (int c = 0; c < 6; c++) { + sum[c] = 0; + } + + for (int i1 = i - 1; i1 < i + 2; i1++) + for (int j1 = j - 1; j1 < j + 2; j1++) { + if ((i1 > -1) && (i1 < height ) && (j1 < width)) { + int c = FC(i1, j1); + sum[c] += rawData[i1][j1]; + sum[c + 3]++; + } + } + + int c = FC(i, j); + + if (c == 1) { + red[i][j] = sum[0] / sum[3]; + green[i][j] = rawData[i][j]; + blue[i][j] = sum[2] / sum[5]; + } else { + green[i][j] = sum[1] / sum[4]; + + if (c == 0) { + red[i][j] = rawData[i][j]; + blue[i][j] = sum[2] / sum[5]; + } else { + red[i][j] = sum[0] / sum[3]; + blue[i][j] = rawData[i][j]; + } + } + }//j + }//i + + for (int i = 0; i < bord; i++) { + + float sum[6]; + + for (int j = bord; j < width - bord; j++) { //first few rows + for (int c = 0; c < 6; c++) { + sum[c] = 0; + } + + for (int i1 = i - 1; i1 < i + 2; i1++) + for (int j1 = j - 1; j1 < j + 2; j1++) { + if ((i1 > -1) && (i1 < height) && (j1 > -1)) { + int c = FC(i1, j1); + sum[c] += rawData[i1][j1]; + sum[c + 3]++; + } + } + + int c = FC(i, j); + + if (c == 1) { + red[i][j] = sum[0] / sum[3]; + green[i][j] = rawData[i][j]; + blue[i][j] = sum[2] / sum[5]; + } else { + green[i][j] = sum[1] / sum[4]; + + if (c == 0) { + red[i][j] = rawData[i][j]; + blue[i][j] = sum[2] / sum[5]; + } else { + red[i][j] = sum[0] / sum[3]; + blue[i][j] = rawData[i][j]; + } + } + }//j + } + + for (int i = height - bord; i < height; i++) { + + float sum[6]; + + for (int j = bord; j < width - bord; j++) { //last few rows + for (int c = 0; c < 6; c++) { + sum[c] = 0; + } + + for (int i1 = i - 1; i1 < i + 2; i1++) + for (int j1 = j - 1; j1 < j + 2; j1++) { + if ((i1 > -1) && (i1 < height) && (j1 < width)) { + int c = FC(i1, j1); + sum[c] += rawData[i1][j1]; + sum[c + 3]++; + } + } + + int c = FC(i, j); + + if (c == 1) { + red[i][j] = sum[0] / sum[3]; + green[i][j] = rawData[i][j]; + blue[i][j] = sum[2] / sum[5]; + } else { + green[i][j] = sum[1] / sum[4]; + + if (c == 0) { + red[i][j] = rawData[i][j]; + blue[i][j] = sum[2] / sum[5]; + } else { + red[i][j] = sum[0] / sum[3]; + blue[i][j] = rawData[i][j]; + } + } + }//j + } + +} + +// Joint Demosaicing and Denoising using High Order Interpolation Techniques +// Revision 0.9.1a - 09/02/2010 - Contact info: luis.sanz.rodriguez@gmail.com +// Copyright Luis Sanz Rodriguez 2010 +// Adapted to RawTherapee by Jacques Desmis 3/2013 + +void RawImageSource::jdl_interpolate_omp() // from "Lassus" +{ + int width = W, height = H; + int row, col, c, d, i, u = width, v = 2 * u, w = 3 * u, x = 4 * u, y = 5 * u, z = 6 * u, indx, (*dif)[2], (*chr)[2]; + float f[4], g[4]; + float (*image)[4]; + image = (float (*)[4]) calloc (width * height, sizeof * image); + dif = (int (*)[2]) calloc(width * height, sizeof * dif); + chr = (int (*)[2]) calloc(width * height, sizeof * chr); + + if (plistener) { + // this function seems to be unused + //plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::jdl))); + plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), "xxx")); + plistener->setProgress (0.0); + } + +#ifdef _OPENMP + #pragma omp parallel default(none) shared(image,width,height,u,w,v,y,x,z,dif,chr) private(row,col,f,g,indx,c,d,i) +#endif + { +#ifdef _OPENMP + #pragma omp for +#endif + + for (int ii = 0; ii < height; ii++) + for (int jj = 0; jj < width; jj++) { + image[ii * width + jj][fc(ii, jj)] = rawData[ii][jj]; + } + + border_interpolate(6, image); + +#ifdef _OPENMP + #pragma omp for +#endif + + for (row = 5; row < height - 5; row++) + for (col = 5 + (FC(row, 1) & 1), indx = row * width + col, c = FC(row, col); col < u - 5; col += 2, indx += 2) { + f[0] = 1.f + abs(image[indx - u][1] - image[indx - w][1]) + abs(image[indx - u][1] - image[indx + u][1]) + abs(image[indx][c] - image[indx - v][c]) + abs(image[indx - v][c] - image[indx - x][c]); + f[1] = 1.f + abs(image[indx + 1][1] - image[indx + 3][1]) + abs(image[indx + 1][1] - image[indx - 1][1]) + abs(image[indx][c] - image[indx + 2][c]) + abs(image[indx + 2][c] - image[indx + 4][c]); + f[2] = 1.f + abs(image[indx - 1][1] - image[indx - 3][1]) + abs(image[indx - 1][1] - image[indx + 1][1]) + abs(image[indx][c] - image[indx - 2][c]) + abs(image[indx - 2][c] - image[indx - 4][c]); + f[3] = 1.f + abs(image[indx + u][1] - image[indx + w][1]) + abs(image[indx + u][1] - image[indx - u][1]) + abs(image[indx][c] - image[indx + v][c]) + abs(image[indx + v][c] - image[indx + x][c]); + g[0] = CLIP((22.f * image[indx - u][1] + 22.f * image[indx - w][1] + 2.f * image[indx - y][1] + 2.f * image[indx + u][1] + 40.f * image[indx][c] - 32.f * image[indx - v][c] - 8.f * image[indx - x][c]) / 48.f); + g[1] = CLIP((22.f * image[indx + 1][1] + 22.f * image[indx + 3][1] + 2.f * image[indx + 5][1] + 2.f * image[indx - 1][1] + 40.f * image[indx][c] - 32.f * image[indx + 2][c] - 8.f * image[indx + 4][c]) / 48.f); + g[2] = CLIP((22.f * image[indx - 1][1] + 22.f * image[indx - 3][1] + 2.f * image[indx - 5][1] + 2.f * image[indx + 1][1] + 40.f * image[indx][c] - 32.f * image[indx - 2][c] - 8.f * image[indx - 4][c]) / 48.f); + g[3] = CLIP((22.f * image[indx + u][1] + 22.f * image[indx + w][1] + 2.f * image[indx + y][1] + 2.f * image[indx - u][1] + 40.f * image[indx][c] - 32.f * image[indx + v][c] - 8.f * image[indx + x][c]) / 48.f); + dif[indx][0] = CLIP((f[3] * g[0] + f[0] * g[3]) / (f[0] + f[3])) - image[indx][c]; + dif[indx][1] = CLIP((f[2] * g[1] + f[1] * g[2]) / (f[1] + f[2])) - image[indx][c]; + } + +#ifdef _OPENMP + #pragma omp for +#endif + + for (row = 6; row < height - 6; row++) + for (col = 6 + (FC(row, 2) & 1), indx = row * width + col, c = FC(row, col) / 2; col < u - 6; col += 2, indx += 2) { + f[0] = 1.f + 78.f * SQR((float)dif[indx][0]) + 69.f * (SQR((float) dif[indx - v][0]) + SQR((float)dif[indx + v][0])) + 51.f * (SQR((float)dif[indx - x][0]) + SQR((float)dif[indx + x][0])) + 21.f * (SQR((float)dif[indx - z][0]) + SQR((float)dif[indx + z][0])) - 6.f * SQR((float)dif[indx - v][0] + dif[indx][0] + dif[indx + v][0]) - 10.f * (SQR((float)dif[indx - x][0] + dif[indx - v][0] + dif[indx][0]) + SQR((float)dif[indx][0] + dif[indx + v][0] + dif[indx + x][0])) - 7.f * (SQR((float)dif[indx - z][0] + dif[indx - x][0] + dif[indx - v][0]) + SQR((float)dif[indx + v][0] + dif[indx + x][0] + dif[indx + z][0])); + f[1] = 1.f + 78.f * SQR((float)dif[indx][1]) + 69.f * (SQR((float)dif[indx - 2][1]) + SQR((float)dif[indx + 2][1])) + 51.f * (SQR((float)dif[indx - 4][1]) + SQR((float)dif[indx + 4][1])) + 21.f * (SQR((float)dif[indx - 6][1]) + SQR((float)dif[indx + 6][1])) - 6.f * SQR((float)dif[indx - 2][1] + dif[indx][1] + dif[indx + 2][1]) - 10.f * (SQR((float)dif[indx - 4][1] + dif[indx - 2][1] + dif[indx][1]) + SQR((float)dif[indx][1] + dif[indx + 2][1] + dif[indx + 4][1])) - 7.f * (SQR((float)dif[indx - 6][1] + dif[indx - 4][1] + dif[indx - 2][1]) + SQR((float)dif[indx + 2][1] + dif[indx + 4][1] + dif[indx + 6][1])); + g[0] = median(0.725f * dif[indx][0] + 0.1375f * dif[indx - v][0] + 0.1375f * dif[indx + v][0], static_cast(dif[indx - v][0]), static_cast(dif[indx + v][0])); + g[1] = median(0.725f * dif[indx][1] + 0.1375f * dif[indx - 2][1] + 0.1375f * dif[indx + 2][1], static_cast(dif[indx - 2][1]), static_cast(dif[indx + 2][1])); + chr[indx][c] = (f[1] * g[0] + f[0] * g[1]) / (f[0] + f[1]); + } + +#ifdef _OPENMP + #pragma omp for +#endif + + for (row = 6; row < height - 6; row++) + for (col = 6 + (FC(row, 2) & 1), indx = row * width + col, c = 1 - FC(row, col) / 2, d = 2 * c; col < u - 6; col += 2, indx += 2) { + f[0] = 1.f / (float)(1.f + fabs((float)chr[indx - u - 1][c] - chr[indx + u + 1][c]) + fabs((float)chr[indx - u - 1][c] - chr[indx - w - 3][c]) + fabs((float)chr[indx + u + 1][c] - chr[indx - w - 3][c])); + f[1] = 1.f / (float)(1.f + fabs((float)chr[indx - u + 1][c] - chr[indx + u - 1][c]) + fabs((float)chr[indx - u + 1][c] - chr[indx - w + 3][c]) + fabs((float)chr[indx + u - 1][c] - chr[indx - w + 3][c])); + f[2] = 1.f / (float)(1.f + fabs((float)chr[indx + u - 1][c] - chr[indx - u + 1][c]) + fabs((float)chr[indx + u - 1][c] - chr[indx + w + 3][c]) + fabs((float)chr[indx - u + 1][c] - chr[indx + w - 3][c])); + f[3] = 1.f / (float)(1.f + fabs((float)chr[indx + u + 1][c] - chr[indx - u - 1][c]) + fabs((float)chr[indx + u + 1][c] - chr[indx + w - 3][c]) + fabs((float)chr[indx - u - 1][c] - chr[indx + w + 3][c])); + g[0] = median(chr[indx - u - 1][c], chr[indx - w - 1][c], chr[indx - u - 3][c]); + g[1] = median(chr[indx - u + 1][c], chr[indx - w + 1][c], chr[indx - u + 3][c]); + g[2] = median(chr[indx + u - 1][c], chr[indx + w - 1][c], chr[indx + u - 3][c]); + g[3] = median(chr[indx + u + 1][c], chr[indx + w + 1][c], chr[indx + u + 3][c]); + chr[indx][c] = (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3]); + image[indx][1] = CLIP(image[indx][2 - d] + chr[indx][1 - c]); + image[indx][d] = CLIP(image[indx][1] - chr[indx][c]); + } + +#ifdef _OPENMP + #pragma omp for +#endif + + for (row = 6; row < height - 6; row++) + for (col = 6 + (FC(row, 1) & 1), indx = row * width + col, c = FC(row, col + 1) / 2, d = 2 * c; col < u - 6; col += 2, indx += 2) + for(i = 0; i <= 1; c = 1 - c, d = 2 * c, i++) { + f[0] = 1.f / (float)(1.f + fabs((float)chr[indx - u][c] - chr[indx + u][c]) + fabs((float)chr[indx - u][c] - chr[indx - w][c]) + fabs((float)chr[indx + u][c] - chr[indx - w][c])); + f[1] = 1.f / (float)(1.f + fabs((float)chr[indx + 1][c] - chr[indx - 1][c]) + fabs((float)chr[indx + 1][c] - chr[indx + 3][c]) + fabs((float)chr[indx - 1][c] - chr[indx + 3][c])); + f[2] = 1.f / (float)(1.f + fabs((float)chr[indx - 1][c] - chr[indx + 1][c]) + fabs((float)chr[indx - 1][c] - chr[indx - 3][c]) + fabs((float)chr[indx + 1][c] - chr[indx - 3][c])); + f[3] = 1.f / (float)(1.f + fabs((float)chr[indx + u][c] - chr[indx - u][c]) + fabs((float)chr[indx + u][c] - chr[indx + w][c]) + fabs((float)chr[indx - u][c] - chr[indx + w][c])); + g[0] = 0.875f * chr[indx - u][c] + 0.125f * chr[indx - w][c]; + g[1] = 0.875f * chr[indx + 1][c] + 0.125f * chr[indx + 3][c]; + g[2] = 0.875f * chr[indx - 1][c] + 0.125f * chr[indx - 3][c]; + g[3] = 0.875f * chr[indx + u][c] + 0.125f * chr[indx + w][c]; + image[indx][d] = CLIP(image[indx][1] - (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3])); + } + +#ifdef _OPENMP + #pragma omp for +#endif + + for (int ii = 0; ii < height; ii++) { + for (int jj = 0; jj < width; jj++) { + red[ii][jj] = CLIP(image[ii * width + jj][0]); + green[ii][jj] = CLIP(image[ii * width + jj][1]); + blue[ii][jj] = CLIP(image[ii * width + jj][2]); + } + } + } // End of parallelization + free (image); + free(dif); + free(chr); + //RawImageSource::refinement_lassus(); +} + +// LSMME demosaicing algorithm +// L. Zhang and X. Wu, +// Color demozaicing via directional Linear Minimum Mean Square-error Estimation, +// IEEE Trans. on Image Processing, vol. 14, pp. 2167-2178, +// Dec. 2005. +// Adapted to RawTherapee by Jacques Desmis 3/2013 +// Improved speed and reduced memory consumption by Ingo Weyrich 2/2015 +//TODO Tiles to reduce memory consumption +void RawImageSource::lmmse_interpolate_omp(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue, int iterations) +{ + const int width = winw, height = winh; + const int ba = 10; + const int rr1 = height + 2 * ba; + const int cc1 = width + 2 * ba; + const int w1 = cc1; + const int w2 = 2 * w1; + const int w3 = 3 * w1; + const int w4 = 4 * w1; + float h0, h1, h2, h3, h4, hs; + h0 = 1.0f; + h1 = exp( -1.0f / 8.0f); + h2 = exp( -4.0f / 8.0f); + h3 = exp( -9.0f / 8.0f); + h4 = exp(-16.0f / 8.0f); + hs = h0 + 2.0f * (h1 + h2 + h3 + h4); + h0 /= hs; + h1 /= hs; + h2 /= hs; + h3 /= hs; + h4 /= hs; + int passref = 0; + int iter = 0; + + if(iterations <= 4) { + iter = iterations - 1; + passref = 0; + } else if (iterations <= 6) { + iter = 3; + passref = iterations - 4; + } else if (iterations <= 8) { + iter = 3; + passref = iterations - 6; + } + + bool applyGamma = true; + + if(iterations == 0) { + applyGamma = false; + iter = 0; + } else { + applyGamma = true; + } + + float *rix[5]; + float *qix[5]; + float *buffer = (float *)calloc(rr1 * cc1 * 5 * sizeof(float), 1); + + if(buffer == nullptr) { // allocation of big block of memory failed, try to get 5 smaller ones + printf("lmmse_interpolate_omp: allocation of big memory block failed, try to get 5 smaller ones now...\n"); + bool allocationFailed = false; + + for(int i = 0; i < 5; i++) { + qix[i] = (float *)calloc(rr1 * cc1 * sizeof(float), 1); + + if(!qix[i]) { // allocation of at least one small block failed + allocationFailed = true; + } + } + + if(allocationFailed) { // fall back to igv_interpolate + printf("lmmse_interpolate_omp: allocation of 5 small memory blocks failed, falling back to igv_interpolate...\n"); + + for(int i = 0; i < 5; i++) { // free the already allocated buffers + if(qix[i]) { + free(qix[i]); + } + } + + igv_interpolate(winw, winh); + return; + } + } else { + qix[0] = buffer; + + for(int i = 1; i < 5; i++) { + qix[i] = qix[i - 1] + rr1 * cc1; + } + } + + if (plistener) { + plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::LMMSE))); + plistener->setProgress (0.0); + } + + + LUTf *gamtab; + + if(applyGamma) { + gamtab = &(Color::gammatab_24_17a); + } else { + gamtab = new LUTf(65536, LUT_CLIP_ABOVE | LUT_CLIP_BELOW); + gamtab->makeIdentity(65535.f); + } + + +#ifdef _OPENMP + #pragma omp parallel private(rix) +#endif + { +#ifdef _OPENMP + #pragma omp for +#endif + + for (int rrr = ba; rrr < rr1 - ba; rrr++) { + for (int ccc = ba, row = rrr - ba; ccc < cc1 - ba; ccc++) { + int col = ccc - ba; + float *rix = qix[4] + rrr * cc1 + ccc; + rix[0] = (*gamtab)[rawData[row][col]]; + } + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.1); + } + } + + // G-R(B) +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) +#endif + + for (int rr = 2; rr < rr1 - 2; rr++) { + // G-R(B) at R(B) location + for (int cc = 2 + (FC(rr, 2) & 1); cc < cc1 - 2; cc += 2) { + rix[4] = qix[4] + rr * cc1 + cc; + float v0 = x00625(rix[4][-w1 - 1] + rix[4][-w1 + 1] + rix[4][w1 - 1] + rix[4][w1 + 1]) + x0250(rix[4][0]); + // horizontal + rix[0] = qix[0] + rr * cc1 + cc; + rix[0][0] = - x0250(rix[4][ -2] + rix[4][ 2]) + xdiv2f(rix[4][ -1] + rix[4][0] + rix[4][ 1]); + float Y = v0 + xdiv2f(rix[0][0]); + + if (rix[4][0] > 1.75f * Y) { + rix[0][0] = median(rix[0][0], rix[4][ -1], rix[4][ 1]); + } else { + rix[0][0] = LIM(rix[0][0], 0.0f, 1.0f); + } + + rix[0][0] -= rix[4][0]; + // vertical + rix[1] = qix[1] + rr * cc1 + cc; + rix[1][0] = -x0250(rix[4][-w2] + rix[4][w2]) + xdiv2f(rix[4][-w1] + rix[4][0] + rix[4][w1]); + Y = v0 + xdiv2f(rix[1][0]); + + if (rix[4][0] > 1.75f * Y) { + rix[1][0] = median(rix[1][0], rix[4][-w1], rix[4][w1]); + } else { + rix[1][0] = LIM(rix[1][0], 0.0f, 1.0f); + } + + rix[1][0] -= rix[4][0]; + } + + // G-R(B) at G location + for (int ccc = 2 + (FC(rr, 3) & 1); ccc < cc1 - 2; ccc += 2) { + rix[0] = qix[0] + rr * cc1 + ccc; + rix[1] = qix[1] + rr * cc1 + ccc; + rix[4] = qix[4] + rr * cc1 + ccc; + rix[0][0] = x0250(rix[4][ -2] + rix[4][ 2]) - xdiv2f(rix[4][ -1] + rix[4][0] + rix[4][ 1]); + rix[1][0] = x0250(rix[4][-w2] + rix[4][w2]) - xdiv2f(rix[4][-w1] + rix[4][0] + rix[4][w1]); + rix[0][0] = LIM(rix[0][0], -1.0f, 0.0f) + rix[4][0]; + rix[1][0] = LIM(rix[1][0], -1.0f, 0.0f) + rix[4][0]; + } + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.2); + } + } + + + // apply low pass filter on differential colors +#ifdef _OPENMP + #pragma omp for +#endif + + for (int rr = 4; rr < rr1 - 4; rr++) + for (int cc = 4; cc < cc1 - 4; cc++) { + rix[0] = qix[0] + rr * cc1 + cc; + rix[2] = qix[2] + rr * cc1 + cc; + rix[2][0] = h0 * rix[0][0] + h1 * (rix[0][ -1] + rix[0][ 1]) + h2 * (rix[0][ -2] + rix[0][ 2]) + h3 * (rix[0][ -3] + rix[0][ 3]) + h4 * (rix[0][ -4] + rix[0][ 4]); + rix[1] = qix[1] + rr * cc1 + cc; + rix[3] = qix[3] + rr * cc1 + cc; + rix[3][0] = h0 * rix[1][0] + h1 * (rix[1][-w1] + rix[1][w1]) + h2 * (rix[1][-w2] + rix[1][w2]) + h3 * (rix[1][-w3] + rix[1][w3]) + h4 * (rix[1][-w4] + rix[1][w4]); + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.3); + } + } + + // interpolate G-R(B) at R(B) +#ifdef _OPENMP + #pragma omp for +#endif + + for (int rr = 4; rr < rr1 - 4; rr++) { + int cc = 4 + (FC(rr, 4) & 1); +#ifdef __SSE2__ + __m128 p1v, p2v, p3v, p4v, p5v, p6v, p7v, p8v, p9v, muv, vxv, vnv, xhv, vhv, xvv, vvv; + __m128 epsv = _mm_set1_ps(1e-7); + __m128 ninev = _mm_set1_ps(9.f); + + for (; cc < cc1 - 10; cc += 8) { + rix[0] = qix[0] + rr * cc1 + cc; + rix[1] = qix[1] + rr * cc1 + cc; + rix[2] = qix[2] + rr * cc1 + cc; + rix[3] = qix[3] + rr * cc1 + cc; + rix[4] = qix[4] + rr * cc1 + cc; + // horizontal + p1v = LC2VFU(rix[2][-4]); + p2v = LC2VFU(rix[2][-3]); + p3v = LC2VFU(rix[2][-2]); + p4v = LC2VFU(rix[2][-1]); + p5v = LC2VFU(rix[2][ 0]); + p6v = LC2VFU(rix[2][ 1]); + p7v = LC2VFU(rix[2][ 2]); + p8v = LC2VFU(rix[2][ 3]); + p9v = LC2VFU(rix[2][ 4]); + muv = (p1v + p2v + p3v + p4v + p5v + p6v + p7v + p8v + p9v) / ninev; + vxv = epsv + SQRV(p1v - muv) + SQRV(p2v - muv) + SQRV(p3v - muv) + SQRV(p4v - muv) + SQRV(p5v - muv) + SQRV(p6v - muv) + SQRV(p7v - muv) + SQRV(p8v - muv) + SQRV(p9v - muv); + p1v -= LC2VFU(rix[0][-4]); + p2v -= LC2VFU(rix[0][-3]); + p3v -= LC2VFU(rix[0][-2]); + p4v -= LC2VFU(rix[0][-1]); + p5v -= LC2VFU(rix[0][ 0]); + p6v -= LC2VFU(rix[0][ 1]); + p7v -= LC2VFU(rix[0][ 2]); + p8v -= LC2VFU(rix[0][ 3]); + p9v -= LC2VFU(rix[0][ 4]); + vnv = epsv + SQRV(p1v) + SQRV(p2v) + SQRV(p3v) + SQRV(p4v) + SQRV(p5v) + SQRV(p6v) + SQRV(p7v) + SQRV(p8v) + SQRV(p9v); + xhv = (LC2VFU(rix[0][0]) * vxv + LC2VFU(rix[2][0]) * vnv) / (vxv + vnv); + vhv = vxv * vnv / (vxv + vnv); + + // vertical + p1v = LC2VFU(rix[3][-w4]); + p2v = LC2VFU(rix[3][-w3]); + p3v = LC2VFU(rix[3][-w2]); + p4v = LC2VFU(rix[3][-w1]); + p5v = LC2VFU(rix[3][ 0]); + p6v = LC2VFU(rix[3][ w1]); + p7v = LC2VFU(rix[3][ w2]); + p8v = LC2VFU(rix[3][ w3]); + p9v = LC2VFU(rix[3][ w4]); + muv = (p1v + p2v + p3v + p4v + p5v + p6v + p7v + p8v + p9v) / ninev; + vxv = epsv + SQRV(p1v - muv) + SQRV(p2v - muv) + SQRV(p3v - muv) + SQRV(p4v - muv) + SQRV(p5v - muv) + SQRV(p6v - muv) + SQRV(p7v - muv) + SQRV(p8v - muv) + SQRV(p9v - muv); + p1v -= LC2VFU(rix[1][-w4]); + p2v -= LC2VFU(rix[1][-w3]); + p3v -= LC2VFU(rix[1][-w2]); + p4v -= LC2VFU(rix[1][-w1]); + p5v -= LC2VFU(rix[1][ 0]); + p6v -= LC2VFU(rix[1][ w1]); + p7v -= LC2VFU(rix[1][ w2]); + p8v -= LC2VFU(rix[1][ w3]); + p9v -= LC2VFU(rix[1][ w4]); + vnv = epsv + SQRV(p1v) + SQRV(p2v) + SQRV(p3v) + SQRV(p4v) + SQRV(p5v) + SQRV(p6v) + SQRV(p7v) + SQRV(p8v) + SQRV(p9v); + xvv = (LC2VFU(rix[1][0]) * vxv + LC2VFU(rix[3][0]) * vnv) / (vxv + vnv); + vvv = vxv * vnv / (vxv + vnv); + // interpolated G-R(B) + muv = (xhv * vvv + xvv * vhv) / (vhv + vvv); + STC2VFU(rix[4][0], muv); + } + +#endif + + for (; cc < cc1 - 4; cc += 2) { + rix[0] = qix[0] + rr * cc1 + cc; + rix[1] = qix[1] + rr * cc1 + cc; + rix[2] = qix[2] + rr * cc1 + cc; + rix[3] = qix[3] + rr * cc1 + cc; + rix[4] = qix[4] + rr * cc1 + cc; + // horizontal + float p1 = rix[2][-4]; + float p2 = rix[2][-3]; + float p3 = rix[2][-2]; + float p4 = rix[2][-1]; + float p5 = rix[2][ 0]; + float p6 = rix[2][ 1]; + float p7 = rix[2][ 2]; + float p8 = rix[2][ 3]; + float p9 = rix[2][ 4]; + float mu = (p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9) / 9.f; + float vx = 1e-7 + SQR(p1 - mu) + SQR(p2 - mu) + SQR(p3 - mu) + SQR(p4 - mu) + SQR(p5 - mu) + SQR(p6 - mu) + SQR(p7 - mu) + SQR(p8 - mu) + SQR(p9 - mu); + p1 -= rix[0][-4]; + p2 -= rix[0][-3]; + p3 -= rix[0][-2]; + p4 -= rix[0][-1]; + p5 -= rix[0][ 0]; + p6 -= rix[0][ 1]; + p7 -= rix[0][ 2]; + p8 -= rix[0][ 3]; + p9 -= rix[0][ 4]; + float vn = 1e-7 + SQR(p1) + SQR(p2) + SQR(p3) + SQR(p4) + SQR(p5) + SQR(p6) + SQR(p7) + SQR(p8) + SQR(p9); + float xh = (rix[0][0] * vx + rix[2][0] * vn) / (vx + vn); + float vh = vx * vn / (vx + vn); + + // vertical + p1 = rix[3][-w4]; + p2 = rix[3][-w3]; + p3 = rix[3][-w2]; + p4 = rix[3][-w1]; + p5 = rix[3][ 0]; + p6 = rix[3][ w1]; + p7 = rix[3][ w2]; + p8 = rix[3][ w3]; + p9 = rix[3][ w4]; + mu = (p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9) / 9.f; + vx = 1e-7 + SQR(p1 - mu) + SQR(p2 - mu) + SQR(p3 - mu) + SQR(p4 - mu) + SQR(p5 - mu) + SQR(p6 - mu) + SQR(p7 - mu) + SQR(p8 - mu) + SQR(p9 - mu); + p1 -= rix[1][-w4]; + p2 -= rix[1][-w3]; + p3 -= rix[1][-w2]; + p4 -= rix[1][-w1]; + p5 -= rix[1][ 0]; + p6 -= rix[1][ w1]; + p7 -= rix[1][ w2]; + p8 -= rix[1][ w3]; + p9 -= rix[1][ w4]; + vn = 1e-7 + SQR(p1) + SQR(p2) + SQR(p3) + SQR(p4) + SQR(p5) + SQR(p6) + SQR(p7) + SQR(p8) + SQR(p9); + float xv = (rix[1][0] * vx + rix[3][0] * vn) / (vx + vn); + float vv = vx * vn / (vx + vn); + // interpolated G-R(B) + rix[4][0] = (xh * vv + xv * vh) / (vh + vv); + } + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.4); + } + } + + // copy CFA values +#ifdef _OPENMP + #pragma omp for +#endif + + for (int rr = 0; rr < rr1; rr++) + for (int cc = 0, row = rr - ba; cc < cc1; cc++) { + int col = cc - ba; + int c = FC(rr, cc); + rix[c] = qix[c] + rr * cc1 + cc; + + if ((row >= 0) & (row < height) & (col >= 0) & (col < width)) { + rix[c][0] = (*gamtab)[rawData[row][col]]; + } else { + rix[c][0] = 0.f; + } + + if (c != 1) { + rix[1] = qix[1] + rr * cc1 + cc; + rix[4] = qix[4] + rr * cc1 + cc; + rix[1][0] = rix[c][0] + rix[4][0]; + } + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.5); + } + } + + // bilinear interpolation for R/B + // interpolate R/B at G location +#ifdef _OPENMP + #pragma omp for +#endif + + for (int rr = 1; rr < rr1 - 1; rr++) + for (int cc = 1 + (FC(rr, 2) & 1), c = FC(rr, cc + 1); cc < cc1 - 1; cc += 2) { + rix[c] = qix[c] + rr * cc1 + cc; + rix[1] = qix[1] + rr * cc1 + cc; + rix[c][0] = rix[1][0] + xdiv2f(rix[c][ -1] - rix[1][ -1] + rix[c][ 1] - rix[1][ 1]); + c = 2 - c; + rix[c] = qix[c] + rr * cc1 + cc; + rix[c][0] = rix[1][0] + xdiv2f(rix[c][-w1] - rix[1][-w1] + rix[c][w1] - rix[1][w1]); + c = 2 - c; + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.6); + } + } + + // interpolate R/B at B/R location +#ifdef _OPENMP + #pragma omp for +#endif + + for (int rr = 1; rr < rr1 - 1; rr++) + for (int cc = 1 + (FC(rr, 1) & 1), c = 2 - FC(rr, cc); cc < cc1 - 1; cc += 2) { + rix[c] = qix[c] + rr * cc1 + cc; + rix[1] = qix[1] + rr * cc1 + cc; + rix[c][0] = rix[1][0] + x0250(rix[c][-w1] - rix[1][-w1] + rix[c][ -1] - rix[1][ -1] + rix[c][ 1] - rix[1][ 1] + rix[c][ w1] - rix[1][ w1]); + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.7); + } + } + + }// End of parallelization 1 + + // median filter/ + for (int pass = 0; pass < iter; pass++) { + // Apply 3x3 median filter + // Compute median(R-G) and median(B-G) + +#ifdef _OPENMP + #pragma omp parallel for private(rix) +#endif + + for (int rr = 1; rr < rr1 - 1; rr++) { + for (int c = 0; c < 3; c += 2) { + int d = c + 3 - (c == 0 ? 0 : 1); + int cc = 1; +#ifdef __SSE2__ + + for (; cc < cc1 - 4; cc += 4) { + rix[d] = qix[d] + rr * cc1 + cc; + rix[c] = qix[c] + rr * cc1 + cc; + rix[1] = qix[1] + rr * cc1 + cc; + // Assign 3x3 differential color values + const std::array p = { + LVFU(rix[c][-w1 - 1]) - LVFU(rix[1][-w1 - 1]), + LVFU(rix[c][-w1]) - LVFU(rix[1][-w1]), + LVFU(rix[c][-w1 + 1]) - LVFU(rix[1][-w1 + 1]), + LVFU(rix[c][ -1]) - LVFU(rix[1][ -1]), + LVFU(rix[c][ 0]) - LVFU(rix[1][ 0]), + LVFU(rix[c][ 1]) - LVFU(rix[1][ 1]), + LVFU(rix[c][ w1 - 1]) - LVFU(rix[1][ w1 - 1]), + LVFU(rix[c][ w1]) - LVFU(rix[1][ w1]), + LVFU(rix[c][ w1 + 1]) - LVFU(rix[1][ w1 + 1]) + }; + _mm_storeu_ps(&rix[d][0], median(p)); + } + +#endif + + for (; cc < cc1 - 1; cc++) { + rix[d] = qix[d] + rr * cc1 + cc; + rix[c] = qix[c] + rr * cc1 + cc; + rix[1] = qix[1] + rr * cc1 + cc; + // Assign 3x3 differential color values + const std::array p = { + rix[c][-w1 - 1] - rix[1][-w1 - 1], + rix[c][-w1] - rix[1][-w1], + rix[c][-w1 + 1] - rix[1][-w1 + 1], + rix[c][ -1] - rix[1][ -1], + rix[c][ 0] - rix[1][ 0], + rix[c][ 1] - rix[1][ 1], + rix[c][ w1 - 1] - rix[1][ w1 - 1], + rix[c][ w1] - rix[1][ w1], + rix[c][ w1 + 1] - rix[1][ w1 + 1] + }; + rix[d][0] = median(p); + } + } + } + + // red/blue at GREEN pixel locations & red/blue and green at BLUE/RED pixel locations +#ifdef _OPENMP + #pragma omp parallel for private (rix) +#endif + + for (int rr = 0; rr < rr1; rr++) { + rix[0] = qix[0] + rr * cc1; + rix[1] = qix[1] + rr * cc1; + rix[2] = qix[2] + rr * cc1; + rix[3] = qix[3] + rr * cc1; + rix[4] = qix[4] + rr * cc1; + int c0 = FC(rr, 0); + int c1 = FC(rr, 1); + + if(c0 == 1) { + c1 = 2 - c1; + int d = c1 + 3 - (c1 == 0 ? 0 : 1); + int cc; + + for (cc = 0; cc < cc1 - 1; cc += 2) { + rix[0][0] = rix[1][0] + rix[3][0]; + rix[2][0] = rix[1][0] + rix[4][0]; + rix[0]++; + rix[1]++; + rix[2]++; + rix[3]++; + rix[4]++; + rix[c1][0] = rix[1][0] + rix[d][0]; + rix[1][0] = 0.5f * (rix[0][0] - rix[3][0] + rix[2][0] - rix[4][0]); + rix[0]++; + rix[1]++; + rix[2]++; + rix[3]++; + rix[4]++; + } + + if(cc < cc1) { // remaining pixel, only if width is odd + rix[0][0] = rix[1][0] + rix[3][0]; + rix[2][0] = rix[1][0] + rix[4][0]; + } + } else { + c0 = 2 - c0; + int d = c0 + 3 - (c0 == 0 ? 0 : 1); + int cc; + + for (cc = 0; cc < cc1 - 1; cc += 2) { + rix[c0][0] = rix[1][0] + rix[d][0]; + rix[1][0] = 0.5f * (rix[0][0] - rix[3][0] + rix[2][0] - rix[4][0]); + rix[0]++; + rix[1]++; + rix[2]++; + rix[3]++; + rix[4]++; + rix[0][0] = rix[1][0] + rix[3][0]; + rix[2][0] = rix[1][0] + rix[4][0]; + rix[0]++; + rix[1]++; + rix[2]++; + rix[3]++; + rix[4]++; + } + + if(cc < cc1) { // remaining pixel, only if width is odd + rix[c0][0] = rix[1][0] + rix[d][0]; + rix[1][0] = 0.5f * (rix[0][0] - rix[3][0] + rix[2][0] - rix[4][0]); + } + } + } + } + + if (plistener) { + plistener->setProgress (0.8); + } + + if(applyGamma) { + gamtab = &(Color::igammatab_24_17); + } else { + gamtab->makeIdentity(); + } + + array2D* rgb[3]; + rgb[0] = &red; + rgb[1] = &green; + rgb[2] = &blue; + + // copy result back to image matrix +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int row = 0; row < height; row++) { + for (int col = 0, rr = row + ba; col < width; col++) { + int cc = col + ba; + int c = FC(row, col); + + for (int ii = 0; ii < 3; ii++) + if (ii != c) { + float *rix = qix[ii] + rr * cc1 + cc; + (*(rgb[ii]))[row][col] = (*gamtab)[65535.f * rix[0]]; + } else { + (*(rgb[ii]))[row][col] = CLIP(rawData[row][col]); + } + } + } + + if (plistener) { + plistener->setProgress (1.0); + } + + if(buffer) { + free(buffer); + } else + for(int i = 0; i < 5; i++) { + free(qix[i]); + } + + if(!applyGamma) { + delete gamtab; + } + + if(iterations > 4 && iterations <= 6) { + refinement(passref); + } else if(iterations > 6) { + refinement_lassus(passref); + } + +} + +/*** +* +* Bayer CFA Demosaicing using Integrated Gaussian Vector on Color Differences +* Revision 1.0 - 2013/02/28 +* +* Copyright (c) 2007-2013 Luis Sanz Rodriguez +* Using High Order Interpolation technique by Jim S, Jimmy Li, and Sharmil Randhawa +* +* Contact info: luis.sanz.rodriguez@gmail.com +* +* This code is distributed under a GNU General Public License, version 3. +* Visit for more information. +* +***/ +// Adapted to RawTherapee by Jacques Desmis 3/2013 +// SSE version by Ingo Weyrich 5/2013 +#ifdef __SSE2__ +#define CLIPV(a) LIMV(a,zerov,c65535v) +void RawImageSource::igv_interpolate(int winw, int winh) +{ + static const float eps = 1e-5f, epssq = 1e-5f; //mod epssq -10f =>-5f Jacques 3/2013 to prevent artifact (divide by zero) + + static const int h1 = 1, h2 = 2, h3 = 3, h5 = 5; + const int width = winw, height = winh; + const int v1 = 1 * width, v2 = 2 * width, v3 = 3 * width, v5 = 5 * width; + float* rgb[2]; + float* chr[4]; + float *rgbarray, *vdif, *hdif, *chrarray; + rgbarray = (float (*)) malloc((width * height) * sizeof( float ) ); + rgb[0] = rgbarray; + rgb[1] = rgbarray + (width * height) / 2; + + vdif = (float (*)) calloc( width * height / 2, sizeof * vdif ); + hdif = (float (*)) calloc( width * height / 2, sizeof * hdif ); + + chrarray = (float (*)) calloc( width * height, sizeof( float ) ); + chr[0] = chrarray; + chr[1] = chrarray + (width * height) / 2; + + // mapped chr[2] and chr[3] to hdif and hdif, because these are out of use, when chr[2] and chr[3] are used + chr[2] = hdif; + chr[3] = vdif; + + border_interpolate2(winw, winh, 7); + + if (plistener) { + plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV))); + plistener->setProgress (0.0); + } + +#ifdef _OPENMP + #pragma omp parallel default(none) shared(rgb,vdif,hdif,chr) +#endif + { + __m128 ngv, egv, wgv, sgv, nvv, evv, wvv, svv, nwgv, negv, swgv, segv, nwvv, nevv, swvv, sevv, tempv, temp1v, temp2v, temp3v, temp4v, temp5v, temp6v, temp7v, temp8v; + __m128 epsv = _mm_set1_ps( eps ); + __m128 epssqv = _mm_set1_ps( epssq ); + __m128 c65535v = _mm_set1_ps( 65535.f ); + __m128 c23v = _mm_set1_ps( 23.f ); + __m128 c40v = _mm_set1_ps( 40.f ); + __m128 c51v = _mm_set1_ps( 51.f ); + __m128 c32v = _mm_set1_ps( 32.f ); + __m128 c8v = _mm_set1_ps( 8.f ); + __m128 c7v = _mm_set1_ps( 7.f ); + __m128 c6v = _mm_set1_ps( 6.f ); + __m128 c10v = _mm_set1_ps( 10.f ); + __m128 c21v = _mm_set1_ps( 21.f ); + __m128 c78v = _mm_set1_ps( 78.f ); + __m128 c69v = _mm_set1_ps( 69.f ); + __m128 c3145680v = _mm_set1_ps( 3145680.f ); + __m128 onev = _mm_set1_ps ( 1.f ); + __m128 zerov = _mm_set1_ps ( 0.f ); + __m128 d725v = _mm_set1_ps ( 0.725f ); + __m128 d1375v = _mm_set1_ps ( 0.1375f ); + + float *dest1, *dest2; + float ng, eg, wg, sg, nv, ev, wv, sv, nwg, neg, swg, seg, nwv, nev, swv, sev; +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 0; row < height - 0; row++) { + dest1 = rgb[FC(row, 0) & 1]; + dest2 = rgb[FC(row, 1) & 1]; + int col, indx; + + for (col = 0, indx = row * width + col; col < width - 7; col += 8, indx += 8) { + temp1v = LVFU( rawData[row][col] ); + temp1v = CLIPV( temp1v ); + temp2v = LVFU( rawData[row][col + 4] ); + temp2v = CLIPV( temp2v ); + tempv = _mm_shuffle_ps( temp1v, temp2v, _MM_SHUFFLE( 2, 0, 2, 0 ) ); + _mm_storeu_ps( &dest1[indx >> 1], tempv ); + tempv = _mm_shuffle_ps( temp1v, temp2v, _MM_SHUFFLE( 3, 1, 3, 1 ) ); + _mm_storeu_ps( &dest2[indx >> 1], tempv ); + } + + for (; col < width; col++, indx += 2) { + dest1[indx >> 1] = CLIP(rawData[row][col]); //rawData = RT datas + col++; + if(col < width) + dest2[indx >> 1] = CLIP(rawData[row][col]); //rawData = RT datas + } + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.13); + } + } + +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 5; row < height - 5; row++) { + int col, indx, indx1; + + for (col = 5 + (FC(row, 1) & 1), indx = row * width + col, indx1 = indx >> 1; col < width - 12; col += 8, indx += 8, indx1 += 4) { + //N,E,W,S Gradients + ngv = (epsv + (vabsf(LVFU(rgb[1][(indx - v1) >> 1]) - LVFU(rgb[1][(indx - v3) >> 1])) + vabsf(LVFU(rgb[0][indx1]) - LVFU(rgb[0][(indx1 - v1)]))) / c65535v); + egv = (epsv + (vabsf(LVFU(rgb[1][(indx + h1) >> 1]) - LVFU(rgb[1][(indx + h3) >> 1])) + vabsf(LVFU(rgb[0][indx1]) - LVFU(rgb[0][(indx1 + h1)]))) / c65535v); + wgv = (epsv + (vabsf(LVFU(rgb[1][(indx - h1) >> 1]) - LVFU(rgb[1][(indx - h3) >> 1])) + vabsf(LVFU(rgb[0][indx1]) - LVFU(rgb[0][(indx1 - h1)]))) / c65535v); + sgv = (epsv + (vabsf(LVFU(rgb[1][(indx + v1) >> 1]) - LVFU(rgb[1][(indx + v3) >> 1])) + vabsf(LVFU(rgb[0][indx1]) - LVFU(rgb[0][(indx1 + v1)]))) / c65535v); + //N,E,W,S High Order Interpolation (Li & Randhawa) + //N,E,W,S Hamilton Adams Interpolation + // (48.f * 65535.f) = 3145680.f + tempv = c40v * LVFU(rgb[0][indx1]); + nvv = LIMV(((c23v * LVFU(rgb[1][(indx - v1) >> 1]) + c23v * LVFU(rgb[1][(indx - v3) >> 1]) + LVFU(rgb[1][(indx - v5) >> 1]) + LVFU(rgb[1][(indx + v1) >> 1]) + tempv - c32v * LVFU(rgb[0][(indx1 - v1)]) - c8v * LVFU(rgb[0][(indx1 - v2)]))) / c3145680v, zerov, onev); + evv = LIMV(((c23v * LVFU(rgb[1][(indx + h1) >> 1]) + c23v * LVFU(rgb[1][(indx + h3) >> 1]) + LVFU(rgb[1][(indx + h5) >> 1]) + LVFU(rgb[1][(indx - h1) >> 1]) + tempv - c32v * LVFU(rgb[0][(indx1 + h1)]) - c8v * LVFU(rgb[0][(indx1 + h2)]))) / c3145680v, zerov, onev); + wvv = LIMV(((c23v * LVFU(rgb[1][(indx - h1) >> 1]) + c23v * LVFU(rgb[1][(indx - h3) >> 1]) + LVFU(rgb[1][(indx - h5) >> 1]) + LVFU(rgb[1][(indx + h1) >> 1]) + tempv - c32v * LVFU(rgb[0][(indx1 - h1)]) - c8v * LVFU(rgb[0][(indx1 - h2)]))) / c3145680v, zerov, onev); + svv = LIMV(((c23v * LVFU(rgb[1][(indx + v1) >> 1]) + c23v * LVFU(rgb[1][(indx + v3) >> 1]) + LVFU(rgb[1][(indx + v5) >> 1]) + LVFU(rgb[1][(indx - v1) >> 1]) + tempv - c32v * LVFU(rgb[0][(indx1 + v1)]) - c8v * LVFU(rgb[0][(indx1 + v2)]))) / c3145680v, zerov, onev); + //Horizontal and vertical color differences + tempv = LVFU( rgb[0][indx1] ) / c65535v; + _mm_storeu_ps( &vdif[indx1], (sgv * nvv + ngv * svv) / (ngv + sgv) - tempv ); + _mm_storeu_ps( &hdif[indx1], (wgv * evv + egv * wvv) / (egv + wgv) - tempv ); + } + + // borders without SSE + for (; col < width - 5; col += 2, indx += 2, indx1++) { + //N,E,W,S Gradients + ng = (eps + (fabsf(rgb[1][(indx - v1) >> 1] - rgb[1][(indx - v3) >> 1]) + fabsf(rgb[0][indx1] - rgb[0][(indx1 - v1)])) / 65535.f);; + eg = (eps + (fabsf(rgb[1][(indx + h1) >> 1] - rgb[1][(indx + h3) >> 1]) + fabsf(rgb[0][indx1] - rgb[0][(indx1 + h1)])) / 65535.f); + wg = (eps + (fabsf(rgb[1][(indx - h1) >> 1] - rgb[1][(indx - h3) >> 1]) + fabsf(rgb[0][indx1] - rgb[0][(indx1 - h1)])) / 65535.f); + sg = (eps + (fabsf(rgb[1][(indx + v1) >> 1] - rgb[1][(indx + v3) >> 1]) + fabsf(rgb[0][indx1] - rgb[0][(indx1 + v1)])) / 65535.f); + //N,E,W,S High Order Interpolation (Li & Randhawa) + //N,E,W,S Hamilton Adams Interpolation + // (48.f * 65535.f) = 3145680.f + nv = LIM(((23.0f * rgb[1][(indx - v1) >> 1] + 23.0f * rgb[1][(indx - v3) >> 1] + rgb[1][(indx - v5) >> 1] + rgb[1][(indx + v1) >> 1] + 40.0f * rgb[0][indx1] - 32.0f * rgb[0][(indx1 - v1)] - 8.0f * rgb[0][(indx1 - v2)])) / 3145680.f, 0.0f, 1.0f); + ev = LIM(((23.0f * rgb[1][(indx + h1) >> 1] + 23.0f * rgb[1][(indx + h3) >> 1] + rgb[1][(indx + h5) >> 1] + rgb[1][(indx - h1) >> 1] + 40.0f * rgb[0][indx1] - 32.0f * rgb[0][(indx1 + h1)] - 8.0f * rgb[0][(indx1 + h2)])) / 3145680.f, 0.0f, 1.0f); + wv = LIM(((23.0f * rgb[1][(indx - h1) >> 1] + 23.0f * rgb[1][(indx - h3) >> 1] + rgb[1][(indx - h5) >> 1] + rgb[1][(indx + h1) >> 1] + 40.0f * rgb[0][indx1] - 32.0f * rgb[0][(indx1 - h1)] - 8.0f * rgb[0][(indx1 - h2)])) / 3145680.f, 0.0f, 1.0f); + sv = LIM(((23.0f * rgb[1][(indx + v1) >> 1] + 23.0f * rgb[1][(indx + v3) >> 1] + rgb[1][(indx + v5) >> 1] + rgb[1][(indx - v1) >> 1] + 40.0f * rgb[0][indx1] - 32.0f * rgb[0][(indx1 + v1)] - 8.0f * rgb[0][(indx1 + v2)])) / 3145680.f, 0.0f, 1.0f); + //Horizontal and vertical color differences + vdif[indx1] = (sg * nv + ng * sv) / (ng + sg) - (rgb[0][indx1]) / 65535.f; + hdif[indx1] = (wg * ev + eg * wv) / (eg + wg) - (rgb[0][indx1]) / 65535.f; + } + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.26); + } + } +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 7; row < height - 7; row++) { + int col, d, indx1; + + for (col = 7 + (FC(row, 1) & 1), indx1 = (row * width + col) >> 1, d = FC(row, col) / 2; col < width - 14; col += 8, indx1 += 4) { + //H&V integrated gaussian vector over variance on color differences + //Mod Jacques 3/2013 + ngv = LIMV(epssqv + c78v * SQRV(LVFU(vdif[indx1])) + c69v * (SQRV(LVFU(vdif[indx1 - v1])) + SQRV(LVFU(vdif[indx1 + v1]))) + c51v * (SQRV(LVFU(vdif[indx1 - v2])) + SQRV(LVFU(vdif[indx1 + v2]))) + c21v * (SQRV(LVFU(vdif[indx1 - v3])) + SQRV(LVFU(vdif[indx1 + v3]))) - c6v * SQRV(LVFU(vdif[indx1 - v1]) + LVFU(vdif[indx1]) + LVFU(vdif[indx1 + v1])) + - c10v * (SQRV(LVFU(vdif[indx1 - v2]) + LVFU(vdif[indx1 - v1]) + LVFU(vdif[indx1])) + SQRV(LVFU(vdif[indx1]) + LVFU(vdif[indx1 + v1]) + LVFU(vdif[indx1 + v2]))) - c7v * (SQRV(LVFU(vdif[indx1 - v3]) + LVFU(vdif[indx1 - v2]) + LVFU(vdif[indx1 - v1])) + SQRV(LVFU(vdif[indx1 + v1]) + LVFU(vdif[indx1 + v2]) + LVFU(vdif[indx1 + v3]))), zerov, onev); + egv = LIMV(epssqv + c78v * SQRV(LVFU(hdif[indx1])) + c69v * (SQRV(LVFU(hdif[indx1 - h1])) + SQRV(LVFU(hdif[indx1 + h1]))) + c51v * (SQRV(LVFU(hdif[indx1 - h2])) + SQRV(LVFU(hdif[indx1 + h2]))) + c21v * (SQRV(LVFU(hdif[indx1 - h3])) + SQRV(LVFU(hdif[indx1 + h3]))) - c6v * SQRV(LVFU(hdif[indx1 - h1]) + LVFU(hdif[indx1]) + LVFU(hdif[indx1 + h1])) + - c10v * (SQRV(LVFU(hdif[indx1 - h2]) + LVFU(hdif[indx1 - h1]) + LVFU(hdif[indx1])) + SQRV(LVFU(hdif[indx1]) + LVFU(hdif[indx1 + h1]) + LVFU(hdif[indx1 + h2]))) - c7v * (SQRV(LVFU(hdif[indx1 - h3]) + LVFU(hdif[indx1 - h2]) + LVFU(hdif[indx1 - h1])) + SQRV(LVFU(hdif[indx1 + h1]) + LVFU(hdif[indx1 + h2]) + LVFU(hdif[indx1 + h3]))), zerov, onev); + //Limit chrominance using H/V neighbourhood + nvv = median(d725v * LVFU(vdif[indx1]) + d1375v * LVFU(vdif[indx1 - v1]) + d1375v * LVFU(vdif[indx1 + v1]), LVFU(vdif[indx1 - v1]), LVFU(vdif[indx1 + v1])); + evv = median(d725v * LVFU(hdif[indx1]) + d1375v * LVFU(hdif[indx1 - h1]) + d1375v * LVFU(hdif[indx1 + h1]), LVFU(hdif[indx1 - h1]), LVFU(hdif[indx1 + h1])); + //Chrominance estimation + tempv = (egv * nvv + ngv * evv) / (ngv + egv); + _mm_storeu_ps(&(chr[d][indx1]), tempv); + //Green channel population + temp1v = c65535v * tempv + LVFU(rgb[0][indx1]); + _mm_storeu_ps( &(rgb[0][indx1]), temp1v ); + } + + for (; col < width - 7; col += 2, indx1++) { + //H&V integrated gaussian vector over variance on color differences + //Mod Jacques 3/2013 + ng = LIM(epssq + 78.0f * SQR(vdif[indx1]) + 69.0f * (SQR(vdif[indx1 - v1]) + SQR(vdif[indx1 + v1])) + 51.0f * (SQR(vdif[indx1 - v2]) + SQR(vdif[indx1 + v2])) + 21.0f * (SQR(vdif[indx1 - v3]) + SQR(vdif[indx1 + v3])) - 6.0f * SQR(vdif[indx1 - v1] + vdif[indx1] + vdif[indx1 + v1]) + - 10.0f * (SQR(vdif[indx1 - v2] + vdif[indx1 - v1] + vdif[indx1]) + SQR(vdif[indx1] + vdif[indx1 + v1] + vdif[indx1 + v2])) - 7.0f * (SQR(vdif[indx1 - v3] + vdif[indx1 - v2] + vdif[indx1 - v1]) + SQR(vdif[indx1 + v1] + vdif[indx1 + v2] + vdif[indx1 + v3])), 0.f, 1.f); + eg = LIM(epssq + 78.0f * SQR(hdif[indx1]) + 69.0f * (SQR(hdif[indx1 - h1]) + SQR(hdif[indx1 + h1])) + 51.0f * (SQR(hdif[indx1 - h2]) + SQR(hdif[indx1 + h2])) + 21.0f * (SQR(hdif[indx1 - h3]) + SQR(hdif[indx1 + h3])) - 6.0f * SQR(hdif[indx1 - h1] + hdif[indx1] + hdif[indx1 + h1]) + - 10.0f * (SQR(hdif[indx1 - h2] + hdif[indx1 - h1] + hdif[indx1]) + SQR(hdif[indx1] + hdif[indx1 + h1] + hdif[indx1 + h2])) - 7.0f * (SQR(hdif[indx1 - h3] + hdif[indx1 - h2] + hdif[indx1 - h1]) + SQR(hdif[indx1 + h1] + hdif[indx1 + h2] + hdif[indx1 + h3])), 0.f, 1.f); + //Limit chrominance using H/V neighbourhood + nv = median(0.725f * vdif[indx1] + 0.1375f * vdif[indx1 - v1] + 0.1375f * vdif[indx1 + v1], vdif[indx1 - v1], vdif[indx1 + v1]); + ev = median(0.725f * hdif[indx1] + 0.1375f * hdif[indx1 - h1] + 0.1375f * hdif[indx1 + h1], hdif[indx1 - h1], hdif[indx1 + h1]); + //Chrominance estimation + chr[d][indx1] = (eg * nv + ng * ev) / (ng + eg); + //Green channel population + rgb[0][indx1] = rgb[0][indx1] + 65535.f * chr[d][indx1]; + } + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.39); + } + } +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 7; row < height - 7; row++) { + int col, indx, c; + + for (col = 7 + (FC(row, 1) & 1), indx = row * width + col, c = 1 - FC(row, col) / 2; col < width - 14; col += 8, indx += 8) { + //NW,NE,SW,SE Gradients + nwgv = onev / (epsv + vabsf(LVFU(chr[c][(indx - v1 - h1) >> 1]) - LVFU(chr[c][(indx - v3 - h3) >> 1])) + vabsf(LVFU(chr[c][(indx + v1 + h1) >> 1]) - LVFU(chr[c][(indx - v3 - h3) >> 1]))); + negv = onev / (epsv + vabsf(LVFU(chr[c][(indx - v1 + h1) >> 1]) - LVFU(chr[c][(indx - v3 + h3) >> 1])) + vabsf(LVFU(chr[c][(indx + v1 - h1) >> 1]) - LVFU(chr[c][(indx - v3 + h3) >> 1]))); + swgv = onev / (epsv + vabsf(LVFU(chr[c][(indx + v1 - h1) >> 1]) - LVFU(chr[c][(indx + v3 + h3) >> 1])) + vabsf(LVFU(chr[c][(indx - v1 + h1) >> 1]) - LVFU(chr[c][(indx + v3 - h3) >> 1]))); + segv = onev / (epsv + vabsf(LVFU(chr[c][(indx + v1 + h1) >> 1]) - LVFU(chr[c][(indx + v3 - h3) >> 1])) + vabsf(LVFU(chr[c][(indx - v1 - h1) >> 1]) - LVFU(chr[c][(indx + v3 + h3) >> 1]))); + //Limit NW,NE,SW,SE Color differences + nwvv = median(LVFU(chr[c][(indx - v1 - h1) >> 1]), LVFU(chr[c][(indx - v3 - h1) >> 1]), LVFU(chr[c][(indx - v1 - h3) >> 1])); + nevv = median(LVFU(chr[c][(indx - v1 + h1) >> 1]), LVFU(chr[c][(indx - v3 + h1) >> 1]), LVFU(chr[c][(indx - v1 + h3) >> 1])); + swvv = median(LVFU(chr[c][(indx + v1 - h1) >> 1]), LVFU(chr[c][(indx + v3 - h1) >> 1]), LVFU(chr[c][(indx + v1 - h3) >> 1])); + sevv = median(LVFU(chr[c][(indx + v1 + h1) >> 1]), LVFU(chr[c][(indx + v3 + h1) >> 1]), LVFU(chr[c][(indx + v1 + h3) >> 1])); + //Interpolate chrominance: R@B and B@R + tempv = (nwgv * nwvv + negv * nevv + swgv * swvv + segv * sevv) / (nwgv + negv + swgv + segv); + _mm_storeu_ps( &(chr[c][indx >> 1]), tempv); + } + + for (; col < width - 7; col += 2, indx += 2) { + //NW,NE,SW,SE Gradients + nwg = 1.0f / (eps + fabsf(chr[c][(indx - v1 - h1) >> 1] - chr[c][(indx - v3 - h3) >> 1]) + fabsf(chr[c][(indx + v1 + h1) >> 1] - chr[c][(indx - v3 - h3) >> 1])); + neg = 1.0f / (eps + fabsf(chr[c][(indx - v1 + h1) >> 1] - chr[c][(indx - v3 + h3) >> 1]) + fabsf(chr[c][(indx + v1 - h1) >> 1] - chr[c][(indx - v3 + h3) >> 1])); + swg = 1.0f / (eps + fabsf(chr[c][(indx + v1 - h1) >> 1] - chr[c][(indx + v3 + h3) >> 1]) + fabsf(chr[c][(indx - v1 + h1) >> 1] - chr[c][(indx + v3 - h3) >> 1])); + seg = 1.0f / (eps + fabsf(chr[c][(indx + v1 + h1) >> 1] - chr[c][(indx + v3 - h3) >> 1]) + fabsf(chr[c][(indx - v1 - h1) >> 1] - chr[c][(indx + v3 + h3) >> 1])); + //Limit NW,NE,SW,SE Color differences + nwv = median(chr[c][(indx - v1 - h1) >> 1], chr[c][(indx - v3 - h1) >> 1], chr[c][(indx - v1 - h3) >> 1]); + nev = median(chr[c][(indx - v1 + h1) >> 1], chr[c][(indx - v3 + h1) >> 1], chr[c][(indx - v1 + h3) >> 1]); + swv = median(chr[c][(indx + v1 - h1) >> 1], chr[c][(indx + v3 - h1) >> 1], chr[c][(indx + v1 - h3) >> 1]); + sev = median(chr[c][(indx + v1 + h1) >> 1], chr[c][(indx + v3 + h1) >> 1], chr[c][(indx + v1 + h3) >> 1]); + //Interpolate chrominance: R@B and B@R + chr[c][indx >> 1] = (nwg * nwv + neg * nev + swg * swv + seg * sev) / (nwg + neg + swg + seg); + } + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.65); + } + } +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 7; row < height - 7; row++) { + int col, indx; + + for (col = 7 + (FC(row, 0) & 1), indx = row * width + col; col < width - 14; col += 8, indx += 8) { + //N,E,W,S Gradients + ngv = onev / (epsv + vabsf(LVFU(chr[0][(indx - v1) >> 1]) - LVFU(chr[0][(indx - v3) >> 1])) + vabsf(LVFU(chr[0][(indx + v1) >> 1]) - LVFU(chr[0][(indx - v3) >> 1]))); + egv = onev / (epsv + vabsf(LVFU(chr[0][(indx + h1) >> 1]) - LVFU(chr[0][(indx + h3) >> 1])) + vabsf(LVFU(chr[0][(indx - h1) >> 1]) - LVFU(chr[0][(indx + h3) >> 1]))); + wgv = onev / (epsv + vabsf(LVFU(chr[0][(indx - h1) >> 1]) - LVFU(chr[0][(indx - h3) >> 1])) + vabsf(LVFU(chr[0][(indx + h1) >> 1]) - LVFU(chr[0][(indx - h3) >> 1]))); + sgv = onev / (epsv + vabsf(LVFU(chr[0][(indx + v1) >> 1]) - LVFU(chr[0][(indx + v3) >> 1])) + vabsf(LVFU(chr[0][(indx - v1) >> 1]) - LVFU(chr[0][(indx + v3) >> 1]))); + //Interpolate chrominance: R@G and B@G + tempv = ((ngv * LVFU(chr[0][(indx - v1) >> 1]) + egv * LVFU(chr[0][(indx + h1) >> 1]) + wgv * LVFU(chr[0][(indx - h1) >> 1]) + sgv * LVFU(chr[0][(indx + v1) >> 1])) / (ngv + egv + wgv + sgv)); + _mm_storeu_ps( &chr[0 + 2][indx >> 1], tempv); + } + + for (; col < width - 7; col += 2, indx += 2) { + //N,E,W,S Gradients + ng = 1.0f / (eps + fabsf(chr[0][(indx - v1) >> 1] - chr[0][(indx - v3) >> 1]) + fabsf(chr[0][(indx + v1) >> 1] - chr[0][(indx - v3) >> 1])); + eg = 1.0f / (eps + fabsf(chr[0][(indx + h1) >> 1] - chr[0][(indx + h3) >> 1]) + fabsf(chr[0][(indx - h1) >> 1] - chr[0][(indx + h3) >> 1])); + wg = 1.0f / (eps + fabsf(chr[0][(indx - h1) >> 1] - chr[0][(indx - h3) >> 1]) + fabsf(chr[0][(indx + h1) >> 1] - chr[0][(indx - h3) >> 1])); + sg = 1.0f / (eps + fabsf(chr[0][(indx + v1) >> 1] - chr[0][(indx + v3) >> 1]) + fabsf(chr[0][(indx - v1) >> 1] - chr[0][(indx + v3) >> 1])); + //Interpolate chrominance: R@G and B@G + chr[0 + 2][indx >> 1] = ((ng * chr[0][(indx - v1) >> 1] + eg * chr[0][(indx + h1) >> 1] + wg * chr[0][(indx - h1) >> 1] + sg * chr[0][(indx + v1) >> 1]) / (ng + eg + wg + sg)); + } + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.78); + } + } +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 7; row < height - 7; row++) { + int col, indx; + + for (col = 7 + (FC(row, 0) & 1), indx = row * width + col; col < width - 14; col += 8, indx += 8) { + //N,E,W,S Gradients + ngv = onev / (epsv + vabsf(LVFU(chr[1][(indx - v1) >> 1]) - LVFU(chr[1][(indx - v3) >> 1])) + vabsf(LVFU(chr[1][(indx + v1) >> 1]) - LVFU(chr[1][(indx - v3) >> 1]))); + egv = onev / (epsv + vabsf(LVFU(chr[1][(indx + h1) >> 1]) - LVFU(chr[1][(indx + h3) >> 1])) + vabsf(LVFU(chr[1][(indx - h1) >> 1]) - LVFU(chr[1][(indx + h3) >> 1]))); + wgv = onev / (epsv + vabsf(LVFU(chr[1][(indx - h1) >> 1]) - LVFU(chr[1][(indx - h3) >> 1])) + vabsf(LVFU(chr[1][(indx + h1) >> 1]) - LVFU(chr[1][(indx - h3) >> 1]))); + sgv = onev / (epsv + vabsf(LVFU(chr[1][(indx + v1) >> 1]) - LVFU(chr[1][(indx + v3) >> 1])) + vabsf(LVFU(chr[1][(indx - v1) >> 1]) - LVFU(chr[1][(indx + v3) >> 1]))); + //Interpolate chrominance: R@G and B@G + tempv = ((ngv * LVFU(chr[1][(indx - v1) >> 1]) + egv * LVFU(chr[1][(indx + h1) >> 1]) + wgv * LVFU(chr[1][(indx - h1) >> 1]) + sgv * LVFU(chr[1][(indx + v1) >> 1])) / (ngv + egv + wgv + sgv)); + _mm_storeu_ps( &chr[1 + 2][indx >> 1], tempv); + } + + for (; col < width - 7; col += 2, indx += 2) { + //N,E,W,S Gradients + ng = 1.0f / (eps + fabsf(chr[1][(indx - v1) >> 1] - chr[1][(indx - v3) >> 1]) + fabsf(chr[1][(indx + v1) >> 1] - chr[1][(indx - v3) >> 1])); + eg = 1.0f / (eps + fabsf(chr[1][(indx + h1) >> 1] - chr[1][(indx + h3) >> 1]) + fabsf(chr[1][(indx - h1) >> 1] - chr[1][(indx + h3) >> 1])); + wg = 1.0f / (eps + fabsf(chr[1][(indx - h1) >> 1] - chr[1][(indx - h3) >> 1]) + fabsf(chr[1][(indx + h1) >> 1] - chr[1][(indx - h3) >> 1])); + sg = 1.0f / (eps + fabsf(chr[1][(indx + v1) >> 1] - chr[1][(indx + v3) >> 1]) + fabsf(chr[1][(indx - v1) >> 1] - chr[1][(indx + v3) >> 1])); + //Interpolate chrominance: R@G and B@G + chr[1 + 2][indx >> 1] = ((ng * chr[1][(indx - v1) >> 1] + eg * chr[1][(indx + h1) >> 1] + wg * chr[1][(indx - h1) >> 1] + sg * chr[1][(indx + v1) >> 1]) / (ng + eg + wg + sg)); + } + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.91); + } + } + float *src1, *src2, *redsrc0, *redsrc1, *bluesrc0, *bluesrc1; +#ifdef _OPENMP + #pragma omp for +#endif + + for(int row = 7; row < height - 7; row++) { + int col, indx, fc; + fc = FC(row, 7) & 1; + src1 = rgb[fc]; + src2 = rgb[fc ^ 1]; + redsrc0 = chr[fc << 1]; + redsrc1 = chr[(fc ^ 1) << 1]; + bluesrc0 = chr[(fc << 1) + 1]; + bluesrc1 = chr[((fc ^ 1) << 1) + 1]; + + for(col = 7, indx = row * width + col; col < width - 14; col += 8, indx += 8) { + temp1v = LVFU( src1[indx >> 1] ); + temp2v = LVFU( src2[(indx + 1) >> 1] ); + tempv = _mm_shuffle_ps( temp1v, temp2v, _MM_SHUFFLE( 1, 0, 1, 0 ) ); + tempv = _mm_shuffle_ps( tempv, tempv, _MM_SHUFFLE( 3, 1, 2, 0 ) ); + _mm_storeu_ps( &green[row][col], CLIPV( tempv )); + temp5v = LVFU(redsrc0[indx >> 1]); + temp6v = LVFU(redsrc1[(indx + 1) >> 1]); + temp3v = _mm_shuffle_ps( temp5v, temp6v, _MM_SHUFFLE( 1, 0, 1, 0 ) ); + temp3v = _mm_shuffle_ps( temp3v, temp3v, _MM_SHUFFLE( 3, 1, 2, 0 ) ); + temp3v = CLIPV( tempv - c65535v * temp3v ); + _mm_storeu_ps( &red[row][col], temp3v); + temp7v = LVFU(bluesrc0[indx >> 1]); + temp8v = LVFU(bluesrc1[(indx + 1) >> 1]); + temp4v = _mm_shuffle_ps( temp7v, temp8v, _MM_SHUFFLE( 1, 0, 1, 0 ) ); + temp4v = _mm_shuffle_ps( temp4v, temp4v, _MM_SHUFFLE( 3, 1, 2, 0 ) ); + temp4v = CLIPV( tempv - c65535v * temp4v ); + _mm_storeu_ps( &blue[row][col], temp4v); + + tempv = _mm_shuffle_ps( temp1v, temp2v, _MM_SHUFFLE( 3, 2, 3, 2 ) ); + tempv = _mm_shuffle_ps( tempv, tempv, _MM_SHUFFLE( 3, 1, 2, 0 ) ); + _mm_storeu_ps( &green[row][col + 4], CLIPV( tempv )); + + temp3v = _mm_shuffle_ps( temp5v, temp6v, _MM_SHUFFLE( 3, 2, 3, 2 ) ); + temp3v = _mm_shuffle_ps( temp3v, temp3v, _MM_SHUFFLE( 3, 1, 2, 0 ) ); + temp3v = CLIPV( tempv - c65535v * temp3v ); + _mm_storeu_ps( &red[row][col + 4], temp3v); + temp4v = _mm_shuffle_ps( temp7v, temp8v, _MM_SHUFFLE( 3, 2, 3, 2 ) ); + temp4v = _mm_shuffle_ps( temp4v, temp4v, _MM_SHUFFLE( 3, 1, 2, 0 ) ); + temp4v = CLIPV( tempv - c65535v * temp4v ); + _mm_storeu_ps( &blue[row][col + 4], temp4v); + } + + for(; col < width - 7; col++, indx += 2) { + red [row][col] = CLIP(src1[indx >> 1] - 65535.f * redsrc0[indx >> 1]); + green[row][col] = CLIP(src1[indx >> 1]); + blue [row][col] = CLIP(src1[indx >> 1] - 65535.f * bluesrc0[indx >> 1]); + col++; + red [row][col] = CLIP(src2[(indx + 1) >> 1] - 65535.f * redsrc1[(indx + 1) >> 1]); + green[row][col] = CLIP(src2[(indx + 1) >> 1]); + blue [row][col] = CLIP(src2[(indx + 1) >> 1] - 65535.f * bluesrc1[(indx + 1) >> 1]); + } + } + }// End of parallelization + + if (plistener) { + plistener->setProgress (1.0); + } + + free(chrarray); + free(rgbarray); + free(vdif); + free(hdif); +} +#undef CLIPV +#else +void RawImageSource::igv_interpolate(int winw, int winh) +{ + static const float eps = 1e-5f, epssq = 1e-5f; //mod epssq -10f =>-5f Jacques 3/2013 to prevent artifact (divide by zero) + static const int h1 = 1, h2 = 2, h3 = 3, h4 = 4, h5 = 5, h6 = 6; + const int width = winw, height = winh; + const int v1 = 1 * width, v2 = 2 * width, v3 = 3 * width, v4 = 4 * width, v5 = 5 * width, v6 = 6 * width; + float* rgb[3]; + float* chr[2]; + float (*rgbarray), *vdif, *hdif, (*chrarray); + + rgbarray = (float (*)) calloc(width * height * 3, sizeof( float)); + rgb[0] = rgbarray; + rgb[1] = rgbarray + (width * height); + rgb[2] = rgbarray + 2 * (width * height); + + chrarray = (float (*)) calloc(width * height * 2, sizeof( float)); + chr[0] = chrarray; + chr[1] = chrarray + (width * height); + + vdif = (float (*)) calloc(width * height / 2, sizeof * vdif); + hdif = (float (*)) calloc(width * height / 2, sizeof * hdif); + + border_interpolate2(winw, winh, 7); + + if (plistener) { + plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV))); + plistener->setProgress (0.0); + } + +#ifdef _OPENMP + #pragma omp parallel default(none) shared(rgb,vdif,hdif,chr) +#endif + { + + float ng, eg, wg, sg, nv, ev, wv, sv, nwg, neg, swg, seg, nwv, nev, swv, sev; + +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 0; row < height - 0; row++) + for (int col = 0, indx = row * width + col; col < width - 0; col++, indx++) { + int c = FC(row, col); + rgb[c][indx] = CLIP(rawData[row][col]); //rawData = RT datas + } + +// border_interpolate2(7, rgb); + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.13); + } + } + +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 5; row < height - 5; row++) + for (int col = 5 + (FC(row, 1) & 1), indx = row * width + col, c = FC(row, col); col < width - 5; col += 2, indx += 2) { + //N,E,W,S Gradients + ng = (eps + (fabsf(rgb[1][indx - v1] - rgb[1][indx - v3]) + fabsf(rgb[c][indx] - rgb[c][indx - v2])) / 65535.f);; + eg = (eps + (fabsf(rgb[1][indx + h1] - rgb[1][indx + h3]) + fabsf(rgb[c][indx] - rgb[c][indx + h2])) / 65535.f); + wg = (eps + (fabsf(rgb[1][indx - h1] - rgb[1][indx - h3]) + fabsf(rgb[c][indx] - rgb[c][indx - h2])) / 65535.f); + sg = (eps + (fabsf(rgb[1][indx + v1] - rgb[1][indx + v3]) + fabsf(rgb[c][indx] - rgb[c][indx + v2])) / 65535.f); + //N,E,W,S High Order Interpolation (Li & Randhawa) + //N,E,W,S Hamilton Adams Interpolation + // (48.f * 65535.f) = 3145680.f + nv = LIM(((23.0f * rgb[1][indx - v1] + 23.0f * rgb[1][indx - v3] + rgb[1][indx - v5] + rgb[1][indx + v1] + 40.0f * rgb[c][indx] - 32.0f * rgb[c][indx - v2] - 8.0f * rgb[c][indx - v4])) / 3145680.f, 0.0f, 1.0f); + ev = LIM(((23.0f * rgb[1][indx + h1] + 23.0f * rgb[1][indx + h3] + rgb[1][indx + h5] + rgb[1][indx - h1] + 40.0f * rgb[c][indx] - 32.0f * rgb[c][indx + h2] - 8.0f * rgb[c][indx + h4])) / 3145680.f, 0.0f, 1.0f); + wv = LIM(((23.0f * rgb[1][indx - h1] + 23.0f * rgb[1][indx - h3] + rgb[1][indx - h5] + rgb[1][indx + h1] + 40.0f * rgb[c][indx] - 32.0f * rgb[c][indx - h2] - 8.0f * rgb[c][indx - h4])) / 3145680.f, 0.0f, 1.0f); + sv = LIM(((23.0f * rgb[1][indx + v1] + 23.0f * rgb[1][indx + v3] + rgb[1][indx + v5] + rgb[1][indx - v1] + 40.0f * rgb[c][indx] - 32.0f * rgb[c][indx + v2] - 8.0f * rgb[c][indx + v4])) / 3145680.f, 0.0f, 1.0f); + //Horizontal and vertical color differences + vdif[indx >> 1] = (sg * nv + ng * sv) / (ng + sg) - (rgb[c][indx]) / 65535.f; + hdif[indx >> 1] = (wg * ev + eg * wv) / (eg + wg) - (rgb[c][indx]) / 65535.f; + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.26); + } + } + +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 7; row < height - 7; row++) + for (int col = 7 + (FC(row, 1) & 1), indx = row * width + col, c = FC(row, col), d = c / 2; col < width - 7; col += 2, indx += 2) { + //H&V integrated gaussian vector over variance on color differences + //Mod Jacques 3/2013 + ng = LIM(epssq + 78.0f * SQR(vdif[indx >> 1]) + 69.0f * (SQR(vdif[(indx - v2) >> 1]) + SQR(vdif[(indx + v2) >> 1])) + 51.0f * (SQR(vdif[(indx - v4) >> 1]) + SQR(vdif[(indx + v4) >> 1])) + 21.0f * (SQR(vdif[(indx - v6) >> 1]) + SQR(vdif[(indx + v6) >> 1])) - 6.0f * SQR(vdif[(indx - v2) >> 1] + vdif[indx >> 1] + vdif[(indx + v2) >> 1]) + - 10.0f * (SQR(vdif[(indx - v4) >> 1] + vdif[(indx - v2) >> 1] + vdif[indx >> 1]) + SQR(vdif[indx >> 1] + vdif[(indx + v2) >> 1] + vdif[(indx + v4) >> 1])) - 7.0f * (SQR(vdif[(indx - v6) >> 1] + vdif[(indx - v4) >> 1] + vdif[(indx - v2) >> 1]) + SQR(vdif[(indx + v2) >> 1] + vdif[(indx + v4) >> 1] + vdif[(indx + v6) >> 1])), 0.f, 1.f); + eg = LIM(epssq + 78.0f * SQR(hdif[indx >> 1]) + 69.0f * (SQR(hdif[(indx - h2) >> 1]) + SQR(hdif[(indx + h2) >> 1])) + 51.0f * (SQR(hdif[(indx - h4) >> 1]) + SQR(hdif[(indx + h4) >> 1])) + 21.0f * (SQR(hdif[(indx - h6) >> 1]) + SQR(hdif[(indx + h6) >> 1])) - 6.0f * SQR(hdif[(indx - h2) >> 1] + hdif[indx >> 1] + hdif[(indx + h2) >> 1]) + - 10.0f * (SQR(hdif[(indx - h4) >> 1] + hdif[(indx - h2) >> 1] + hdif[indx >> 1]) + SQR(hdif[indx >> 1] + hdif[(indx + h2) >> 1] + hdif[(indx + h4) >> 1])) - 7.0f * (SQR(hdif[(indx - h6) >> 1] + hdif[(indx - h4) >> 1] + hdif[(indx - h2) >> 1]) + SQR(hdif[(indx + h2) >> 1] + hdif[(indx + h4) >> 1] + hdif[(indx + h6) >> 1])), 0.f, 1.f); + //Limit chrominance using H/V neighbourhood + nv = median(0.725f * vdif[indx >> 1] + 0.1375f * vdif[(indx - v2) >> 1] + 0.1375f * vdif[(indx + v2) >> 1], vdif[(indx - v2) >> 1], vdif[(indx + v2) >> 1]); + ev = median(0.725f * hdif[indx >> 1] + 0.1375f * hdif[(indx - h2) >> 1] + 0.1375f * hdif[(indx + h2) >> 1], hdif[(indx - h2) >> 1], hdif[(indx + h2) >> 1]); + //Chrominance estimation + chr[d][indx] = (eg * nv + ng * ev) / (ng + eg); + //Green channel population + rgb[1][indx] = rgb[c][indx] + 65535.f * chr[d][indx]; + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.39); + } + } + +// free(vdif); free(hdif); +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 7; row < height - 7; row += 2) + for (int col = 7 + (FC(row, 1) & 1), indx = row * width + col, c = 1 - FC(row, col) / 2; col < width - 7; col += 2, indx += 2) { + //NW,NE,SW,SE Gradients + nwg = 1.0f / (eps + fabsf(chr[c][indx - v1 - h1] - chr[c][indx - v3 - h3]) + fabsf(chr[c][indx + v1 + h1] - chr[c][indx - v3 - h3])); + neg = 1.0f / (eps + fabsf(chr[c][indx - v1 + h1] - chr[c][indx - v3 + h3]) + fabsf(chr[c][indx + v1 - h1] - chr[c][indx - v3 + h3])); + swg = 1.0f / (eps + fabsf(chr[c][indx + v1 - h1] - chr[c][indx + v3 + h3]) + fabsf(chr[c][indx - v1 + h1] - chr[c][indx + v3 - h3])); + seg = 1.0f / (eps + fabsf(chr[c][indx + v1 + h1] - chr[c][indx + v3 - h3]) + fabsf(chr[c][indx - v1 - h1] - chr[c][indx + v3 + h3])); + //Limit NW,NE,SW,SE Color differences + nwv = median(chr[c][indx - v1 - h1], chr[c][indx - v3 - h1], chr[c][indx - v1 - h3]); + nev = median(chr[c][indx - v1 + h1], chr[c][indx - v3 + h1], chr[c][indx - v1 + h3]); + swv = median(chr[c][indx + v1 - h1], chr[c][indx + v3 - h1], chr[c][indx + v1 - h3]); + sev = median(chr[c][indx + v1 + h1], chr[c][indx + v3 + h1], chr[c][indx + v1 + h3]); + //Interpolate chrominance: R@B and B@R + chr[c][indx] = (nwg * nwv + neg * nev + swg * swv + seg * sev) / (nwg + neg + swg + seg); + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.52); + } + } +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 8; row < height - 7; row += 2) + for (int col = 7 + (FC(row, 1) & 1), indx = row * width + col, c = 1 - FC(row, col) / 2; col < width - 7; col += 2, indx += 2) { + //NW,NE,SW,SE Gradients + nwg = 1.0f / (eps + fabsf(chr[c][indx - v1 - h1] - chr[c][indx - v3 - h3]) + fabsf(chr[c][indx + v1 + h1] - chr[c][indx - v3 - h3])); + neg = 1.0f / (eps + fabsf(chr[c][indx - v1 + h1] - chr[c][indx - v3 + h3]) + fabsf(chr[c][indx + v1 - h1] - chr[c][indx - v3 + h3])); + swg = 1.0f / (eps + fabsf(chr[c][indx + v1 - h1] - chr[c][indx + v3 + h3]) + fabsf(chr[c][indx - v1 + h1] - chr[c][indx + v3 - h3])); + seg = 1.0f / (eps + fabsf(chr[c][indx + v1 + h1] - chr[c][indx + v3 - h3]) + fabsf(chr[c][indx - v1 - h1] - chr[c][indx + v3 + h3])); + //Limit NW,NE,SW,SE Color differences + nwv = median(chr[c][indx - v1 - h1], chr[c][indx - v3 - h1], chr[c][indx - v1 - h3]); + nev = median(chr[c][indx - v1 + h1], chr[c][indx - v3 + h1], chr[c][indx - v1 + h3]); + swv = median(chr[c][indx + v1 - h1], chr[c][indx + v3 - h1], chr[c][indx + v1 - h3]); + sev = median(chr[c][indx + v1 + h1], chr[c][indx + v3 + h1], chr[c][indx + v1 + h3]); + //Interpolate chrominance: R@B and B@R + chr[c][indx] = (nwg * nwv + neg * nev + swg * swv + seg * sev) / (nwg + neg + swg + seg); + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.65); + } + } +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 7; row < height - 7; row++) + for (int col = 7 + (FC(row, 0) & 1), indx = row * width + col; col < width - 7; col += 2, indx += 2) { + //N,E,W,S Gradients + ng = 1.0f / (eps + fabsf(chr[0][indx - v1] - chr[0][indx - v3]) + fabsf(chr[0][indx + v1] - chr[0][indx - v3])); + eg = 1.0f / (eps + fabsf(chr[0][indx + h1] - chr[0][indx + h3]) + fabsf(chr[0][indx - h1] - chr[0][indx + h3])); + wg = 1.0f / (eps + fabsf(chr[0][indx - h1] - chr[0][indx - h3]) + fabsf(chr[0][indx + h1] - chr[0][indx - h3])); + sg = 1.0f / (eps + fabsf(chr[0][indx + v1] - chr[0][indx + v3]) + fabsf(chr[0][indx - v1] - chr[0][indx + v3])); + //Interpolate chrominance: R@G and B@G + chr[0][indx] = ((ng * chr[0][indx - v1] + eg * chr[0][indx + h1] + wg * chr[0][indx - h1] + sg * chr[0][indx + v1]) / (ng + eg + wg + sg)); + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.78); + } + } +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 7; row < height - 7; row++) + for (int col = 7 + (FC(row, 0) & 1), indx = row * width + col; col < width - 7; col += 2, indx += 2) { + + //N,E,W,S Gradients + ng = 1.0f / (eps + fabsf(chr[1][indx - v1] - chr[1][indx - v3]) + fabsf(chr[1][indx + v1] - chr[1][indx - v3])); + eg = 1.0f / (eps + fabsf(chr[1][indx + h1] - chr[1][indx + h3]) + fabsf(chr[1][indx - h1] - chr[1][indx + h3])); + wg = 1.0f / (eps + fabsf(chr[1][indx - h1] - chr[1][indx - h3]) + fabsf(chr[1][indx + h1] - chr[1][indx - h3])); + sg = 1.0f / (eps + fabsf(chr[1][indx + v1] - chr[1][indx + v3]) + fabsf(chr[1][indx - v1] - chr[1][indx + v3])); + //Interpolate chrominance: R@G and B@G + chr[1][indx] = ((ng * chr[1][indx - v1] + eg * chr[1][indx + h1] + wg * chr[1][indx - h1] + sg * chr[1][indx + v1]) / (ng + eg + wg + sg)); + } + +#ifdef _OPENMP + #pragma omp single +#endif + { + if (plistener) { + plistener->setProgress (0.91); + } + + //Interpolate borders +// border_interpolate2(7, rgb); + } + /* +#ifdef _OPENMP + #pragma omp for +#endif + for (int row=0; row < height; row++) //borders + for (int col=0; col < width; col++) { + if (col==7 && row >= 7 && row < height-7) + col = width-7; + int indxc=row*width+col; + red [row][col] = rgb[indxc][0]; + green[row][col] = rgb[indxc][1]; + blue [row][col] = rgb[indxc][2]; + } + */ + +#ifdef _OPENMP + #pragma omp for +#endif + + for(int row = 7; row < height - 7; row++) + for(int col = 7, indx = row * width + col; col < width - 7; col++, indx++) { + red [row][col] = CLIP(rgb[1][indx] - 65535.f * chr[0][indx]); + green[row][col] = CLIP(rgb[1][indx]); + blue [row][col] = CLIP(rgb[1][indx] - 65535.f * chr[1][indx]); + } + }// End of parallelization + + if (plistener) { + plistener->setProgress (1.0); + } + + free(chrarray); + free(rgbarray); + free(vdif); + free(hdif); +} +#endif + + +/* + Adaptive Homogeneity-Directed interpolation is based on + the work of Keigo Hirakawa, Thomas Parks, and Paul Lee. + */ +#define TS 256 /* Tile Size */ +#define FORC(cnt) for (c=0; c < cnt; c++) +#define FORC3 FORC(3) + +void RawImageSource::ahd_demosaic() +{ + int i, j, k, top, left, row, col, tr, tc, c, d, val, hm[2]; + float (*pix)[4], (*rix)[3]; + static const int dir[4] = { -1, 1, -TS, TS }; + float ldiff[2][4], abdiff[2][4], leps, abeps; + float xyz[3], xyz_cam[3][4]; + float* cbrt; + float (*rgb)[TS][TS][3]; + float (*lab)[TS][TS][3]; + float (*lix)[3]; + char (*homo)[TS][TS], *buffer; + double r; + + int width = W, height = H; + float (*image)[4]; + unsigned int colors = 3; + + const double xyz_rgb[3][3] = { /* XYZ from RGB */ + { 0.412453, 0.357580, 0.180423 }, + { 0.212671, 0.715160, 0.072169 }, + { 0.019334, 0.119193, 0.950227 } + }; + + const float d65_white[3] = { 0.950456, 1, 1.088754 }; + + if (plistener) { + plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AHD))); + plistener->setProgress (0.0); + } + + image = (float (*)[4]) calloc (H * W, sizeof * image); + + for (int ii = 0; ii < H; ii++) + for (int jj = 0; jj < W; jj++) { + image[ii * W + jj][fc(ii, jj)] = rawData[ii][jj]; + } + + cbrt = (float (*)) calloc (0x10000, sizeof * cbrt); + + for (i = 0; i < 0x10000; i++) { + r = (double)i / 65535.0; + cbrt[i] = r > 0.008856 ? std::cbrt(r) : 7.787 * r + 16 / 116.0; + } + + for (i = 0; i < 3; i++) + for (unsigned int j = 0; j < colors; j++) + for (xyz_cam[i][j] = k = 0; k < 3; k++) { + xyz_cam[i][j] += xyz_rgb[i][k] * imatrices.rgb_cam[k][j] / d65_white[i]; + } + + border_interpolate(5, image); + buffer = (char *) malloc (13 * TS * TS * sizeof(float)); /* 1664 kB */ + //merror (buffer, "ahd_interpolate()"); + rgb = (float(*)[TS][TS][3]) buffer; + lab = (float(*)[TS][TS][3])(buffer + 6 * TS * TS * sizeof(float)); + homo = (char (*)[TS][TS]) (buffer + 12 * TS * TS * sizeof(float)); + + // helper variables for progress indication + int n_tiles = ((height - 7 + (TS - 7)) / (TS - 6)) * ((width - 7 + (TS - 7)) / (TS - 6)); + int tile = 0; + + for (top = 2; top < height - 5; top += TS - 6) + for (left = 2; left < width - 5; left += TS - 6) { + /* Interpolate green horizontally and vertically: */ + for (row = top; row < top + TS && row < height - 2; row++) { + col = left + (FC(row, left) & 1); + + for (c = FC(row, col); col < left + TS && col < width - 2; col += 2) { + pix = image + (row * width + col); + val = 0.25 * ((pix[-1][1] + pix[0][c] + pix[1][1]) * 2 + - pix[-2][c] - pix[2][c]) ; + rgb[0][row - top][col - left][1] = median(static_cast(val), pix[-1][1], pix[1][1]); + val = 0.25 * ((pix[-width][1] + pix[0][c] + pix[width][1]) * 2 + - pix[-2 * width][c] - pix[2 * width][c]) ; + rgb[1][row - top][col - left][1] = median(static_cast(val), pix[-width][1], pix[width][1]); + } + } + + /* Interpolate red and blue, and convert to CIELab: */ + for (d = 0; d < 2; d++) + for (row = top + 1; row < top + TS - 1 && row < height - 3; row++) + for (col = left + 1; col < left + TS - 1 && col < width - 3; col++) { + pix = image + (row * width + col); + rix = &rgb[d][row - top][col - left]; + lix = &lab[d][row - top][col - left]; + + if ((c = 2 - FC(row, col)) == 1) { + c = FC(row + 1, col); + val = pix[0][1] + (0.5 * ( pix[-1][2 - c] + pix[1][2 - c] + - rix[-1][1] - rix[1][1] ) ); + rix[0][2 - c] = CLIP(val); + val = pix[0][1] + (0.5 * ( pix[-width][c] + pix[width][c] + - rix[-TS][1] - rix[TS][1] ) ); + } else + val = rix[0][1] + (0.25 * ( pix[-width - 1][c] + pix[-width + 1][c] + + pix[+width - 1][c] + pix[+width + 1][c] + - rix[-TS - 1][1] - rix[-TS + 1][1] + - rix[+TS - 1][1] - rix[+TS + 1][1]) ); + + rix[0][c] = CLIP(val); + c = FC(row, col); + rix[0][c] = pix[0][c]; + xyz[0] = xyz[1] = xyz[2] = 0.0; + FORCC { + xyz[0] += xyz_cam[0][c] * rix[0][c]; + xyz[1] += xyz_cam[1][c] * rix[0][c]; + xyz[2] += xyz_cam[2][c] * rix[0][c]; + } + + xyz[0] = CurveFactory::flinterp(cbrt, xyz[0]); + xyz[1] = CurveFactory::flinterp(cbrt, xyz[1]); + xyz[2] = CurveFactory::flinterp(cbrt, xyz[2]); + + //xyz[0] = xyz[0] > 0.008856 ? pow(xyz[0]/65535,1/3.0) : 7.787*xyz[0] + 16/116.0; + //xyz[1] = xyz[1] > 0.008856 ? pow(xyz[1]/65535,1/3.0) : 7.787*xyz[1] + 16/116.0; + //xyz[2] = xyz[2] > 0.008856 ? pow(xyz[2]/65535,1/3.0) : 7.787*xyz[2] + 16/116.0; + + lix[0][0] = (116 * xyz[1] - 16); + lix[0][1] = 500 * (xyz[0] - xyz[1]); + lix[0][2] = 200 * (xyz[1] - xyz[2]); + } + + /* Build homogeneity maps from the CIELab images: */ + memset (homo, 0, 2 * TS * TS); + + for (row = top + 2; row < top + TS - 2 && row < height - 4; row++) { + tr = row - top; + + for (col = left + 2; col < left + TS - 2 && col < width - 4; col++) { + tc = col - left; + + for (d = 0; d < 2; d++) { + lix = &lab[d][tr][tc]; + + for (i = 0; i < 4; i++) { + ldiff[d][i] = ABS(lix[0][0] - lix[dir[i]][0]); + abdiff[d][i] = SQR(lix[0][1] - lix[dir[i]][1]) + + SQR(lix[0][2] - lix[dir[i]][2]); + } + } + + leps = min(max(ldiff[0][0], ldiff[0][1]), + max(ldiff[1][2], ldiff[1][3])); + abeps = min(max(abdiff[0][0], abdiff[0][1]), + max(abdiff[1][2], abdiff[1][3])); + + for (d = 0; d < 2; d++) + for (i = 0; i < 4; i++) + if (ldiff[d][i] <= leps && abdiff[d][i] <= abeps) { + homo[d][tr][tc]++; + } + } + } + + /* Combine the most homogenous pixels for the final result: */ + for (row = top + 3; row < top + TS - 3 && row < height - 5; row++) { + tr = row - top; + + for (col = left + 3; col < left + TS - 3 && col < width - 5; col++) { + tc = col - left; + + for (d = 0; d < 2; d++) + for (hm[d] = 0, i = tr - 1; i <= tr + 1; i++) + for (j = tc - 1; j <= tc + 1; j++) { + hm[d] += homo[d][i][j]; + } + + if (hm[0] != hm[1]) { + FORC3 image[row * width + col][c] = rgb[hm[1] > hm[0]][tr][tc][c]; + } else + FORC3 image[row * width + col][c] = + 0.5 * (rgb[0][tr][tc][c] + rgb[1][tr][tc][c]) ; + } + } + + tile++; + + if(plistener) { + plistener->setProgress((double)tile / n_tiles); + } + } + + if(plistener) { + plistener->setProgress (1.0); + } + + free (buffer); + + for (int i = 0; i < H; i++) { + for (int j = 0; j < W; j++) { + red[i][j] = image[i * W + j][0]; + green[i][j] = image[i * W + j][1]; + blue[i][j] = image[i * W + j][2]; + } + } + + free (image); + free (cbrt); +} +#undef TS + +void RawImageSource::nodemosaic(bool bw) +{ + red(W, H); + green(W, H); + blue(W, H); + #pragma omp parallel for + + for (int i = 0; i < H; i++) { + for (int j = 0; j < W; j++) { + if (bw) { + red[i][j] = green[i][j] = blue[i][j] = rawData[i][j]; + } else if(ri->getSensorType() != ST_FUJI_XTRANS) { + switch( FC(i, j)) { + case 0: + red[i][j] = rawData[i][j]; + green[i][j] = blue[i][j] = 0; + break; + + case 1: + green[i][j] = rawData[i][j]; + red[i][j] = blue[i][j] = 0; + break; + + case 2: + blue[i][j] = rawData[i][j]; + red[i][j] = green[i][j] = 0; + break; + } + } else { + switch( ri->XTRANSFC(i, j)) { + case 0: + red[i][j] = rawData[i][j]; + green[i][j] = blue[i][j] = 0; + break; + + case 1: + green[i][j] = rawData[i][j]; + red[i][j] = blue[i][j] = 0; + break; + + case 2: + blue[i][j] = rawData[i][j]; + red[i][j] = green[i][j] = 0; + break; + } + } + } + } +} + +/* + Refinement based on EECI demosaicing algorithm by L. Chang and Y.P. Tan + Paul Lee + Adapted for RawTherapee - Jacques Desmis 04/2013 +*/ + +#ifdef __SSE2__ +#define CLIPV(a) LIMV(a,ZEROV,c65535v) +#endif +void RawImageSource::refinement(int PassCount) +{ + MyTime t1e, t2e; + t1e.set(); + + int width = W; + int height = H; + int w1 = width; + int w2 = 2 * w1; + + if (plistener) { + plistener->setProgressStr (M("TP_RAW_DMETHOD_PROGRESSBAR_REFINE")); + } + + array2D *rgb[3]; + rgb[0] = &red; + rgb[1] = &green; + rgb[2] = &blue; + + for (int b = 0; b < PassCount; b++) { + if (plistener) { + plistener->setProgress ((float)b / PassCount); + } + + +#ifdef _OPENMP + #pragma omp parallel +#endif + { + float *pix[3]; + + /* Reinforce interpolated green pixels on RED/BLUE pixel locations */ +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 2; row < height - 2; row++) { + int col = 2 + (FC(row, 2) & 1); + int c = FC(row, col); +#ifdef __SSE2__ + __m128 dLv, dRv, dUv, dDv, v0v; + __m128 onev = _mm_set1_ps(1.f); + __m128 zd5v = _mm_set1_ps(0.5f); + __m128 c65535v = _mm_set1_ps(65535.f); + + for (; col < width - 8; col += 8) { + int indx = row * width + col; + pix[c] = (float*)(*rgb[c]) + indx; + pix[1] = (float*)(*rgb[1]) + indx; + dLv = onev / (onev + vabsf(LC2VFU(pix[c][ -2]) - LC2VFU(pix[c][0])) + vabsf(LC2VFU(pix[1][ 1]) - LC2VFU(pix[1][ -1]))); + dRv = onev / (onev + vabsf(LC2VFU(pix[c][ 2]) - LC2VFU(pix[c][0])) + vabsf(LC2VFU(pix[1][ 1]) - LC2VFU(pix[1][ -1]))); + dUv = onev / (onev + vabsf(LC2VFU(pix[c][-w2]) - LC2VFU(pix[c][0])) + vabsf(LC2VFU(pix[1][w1]) - LC2VFU(pix[1][-w1]))); + dDv = onev / (onev + vabsf(LC2VFU(pix[c][ w2]) - LC2VFU(pix[c][0])) + vabsf(LC2VFU(pix[1][w1]) - LC2VFU(pix[1][-w1]))); + v0v = CLIPV(LC2VFU(pix[c][0]) + zd5v + ((LC2VFU(pix[1][-1]) - LC2VFU(pix[c][-1])) * dLv + (LC2VFU(pix[1][1]) - LC2VFU(pix[c][1])) * dRv + (LC2VFU(pix[1][-w1]) - LC2VFU(pix[c][-w1])) * dUv + (LC2VFU(pix[1][w1]) - LC2VFU(pix[c][w1])) * dDv ) / (dLv + dRv + dUv + dDv)); + STC2VFU(pix[1][0], v0v); + } + +#endif + + for (; col < width - 2; col += 2) { + int indx = row * width + col; + pix[c] = (float*)(*rgb[c]) + indx; + pix[1] = (float*)(*rgb[1]) + indx; + float dL = 1.f / (1.f + fabsf(pix[c][ -2] - pix[c][0]) + fabsf(pix[1][ 1] - pix[1][ -1])); + float dR = 1.f / (1.f + fabsf(pix[c][ 2] - pix[c][0]) + fabsf(pix[1][ 1] - pix[1][ -1])); + float dU = 1.f / (1.f + fabsf(pix[c][-w2] - pix[c][0]) + fabsf(pix[1][w1] - pix[1][-w1])); + float dD = 1.f / (1.f + fabsf(pix[c][ w2] - pix[c][0]) + fabsf(pix[1][w1] - pix[1][-w1])); + float v0 = (pix[c][0] + 0.5f + ((pix[1][ -1] - pix[c][ -1]) * dL + (pix[1][ 1] - pix[c][ 1]) * dR + (pix[1][-w1] - pix[c][-w1]) * dU + (pix[1][ w1] - pix[c][ w1]) * dD ) / (dL + dR + dU + dD)); + pix[1][0] = CLIP(v0); + } + } + + /* Reinforce interpolated red/blue pixels on GREEN pixel locations */ +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 2; row < height - 2; row++) { + int col = 2 + (FC(row, 3) & 1); + int c = FC(row, col + 1); +#ifdef __SSE2__ + __m128 dLv, dRv, dUv, dDv, v0v; + __m128 onev = _mm_set1_ps(1.f); + __m128 zd5v = _mm_set1_ps(0.5f); + __m128 c65535v = _mm_set1_ps(65535.f); + + for (; col < width - 8; col += 8) { + int indx = row * width + col; + pix[1] = (float*)(*rgb[1]) + indx; + + for (int i = 0; i < 2; c = 2 - c, i++) { + pix[c] = (float*)(*rgb[c]) + indx; + dLv = onev / (onev + vabsf(LC2VFU(pix[1][ -2]) - LC2VFU(pix[1][0])) + vabsf(LC2VFU(pix[c][ 1]) - LC2VFU(pix[c][ -1]))); + dRv = onev / (onev + vabsf(LC2VFU(pix[1][ 2]) - LC2VFU(pix[1][0])) + vabsf(LC2VFU(pix[c][ 1]) - LC2VFU(pix[c][ -1]))); + dUv = onev / (onev + vabsf(LC2VFU(pix[1][-w2]) - LC2VFU(pix[1][0])) + vabsf(LC2VFU(pix[c][w1]) - LC2VFU(pix[c][-w1]))); + dDv = onev / (onev + vabsf(LC2VFU(pix[1][ w2]) - LC2VFU(pix[1][0])) + vabsf(LC2VFU(pix[c][w1]) - LC2VFU(pix[c][-w1]))); + v0v = CLIPV(LC2VFU(pix[1][0]) + zd5v - ((LC2VFU(pix[1][-1]) - LC2VFU(pix[c][-1])) * dLv + (LC2VFU(pix[1][1]) - LC2VFU(pix[c][1])) * dRv + (LC2VFU(pix[1][-w1]) - LC2VFU(pix[c][-w1])) * dUv + (LC2VFU(pix[1][w1]) - LC2VFU(pix[c][w1])) * dDv ) / (dLv + dRv + dUv + dDv)); + STC2VFU(pix[c][0], v0v); + } + } + +#endif + + for (; col < width - 2; col += 2) { + int indx = row * width + col; + pix[1] = (float*)(*rgb[1]) + indx; + + for (int i = 0; i < 2; c = 2 - c, i++) { + pix[c] = (float*)(*rgb[c]) + indx; + float dL = 1.f / (1.f + fabsf(pix[1][ -2] - pix[1][0]) + fabsf(pix[c][ 1] - pix[c][ -1])); + float dR = 1.f / (1.f + fabsf(pix[1][ 2] - pix[1][0]) + fabsf(pix[c][ 1] - pix[c][ -1])); + float dU = 1.f / (1.f + fabsf(pix[1][-w2] - pix[1][0]) + fabsf(pix[c][w1] - pix[c][-w1])); + float dD = 1.f / (1.f + fabsf(pix[1][ w2] - pix[1][0]) + fabsf(pix[c][w1] - pix[c][-w1])); + float v0 = (pix[1][0] + 0.5f - ((pix[1][ -1] - pix[c][ -1]) * dL + (pix[1][ 1] - pix[c][ 1]) * dR + (pix[1][-w1] - pix[c][-w1]) * dU + (pix[1][ w1] - pix[c][ w1]) * dD ) / (dL + dR + dU + dD)); + pix[c][0] = CLIP(v0); + } + } + } + + /* Reinforce integrated red/blue pixels on BLUE/RED pixel locations */ +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 2; row < height - 2; row++) { + int col = 2 + (FC(row, 2) & 1); + int c = 2 - FC(row, col); +#ifdef __SSE2__ + __m128 dLv, dRv, dUv, dDv, v0v; + __m128 onev = _mm_set1_ps(1.f); + __m128 zd5v = _mm_set1_ps(0.5f); + __m128 c65535v = _mm_set1_ps(65535.f); + + for (; col < width - 8; col += 8) { + int indx = row * width + col; + pix[0] = (float*)(*rgb[0]) + indx; + pix[1] = (float*)(*rgb[1]) + indx; + pix[2] = (float*)(*rgb[2]) + indx; + int d = 2 - c; + dLv = onev / (onev + vabsf(LC2VFU(pix[d][ -2]) - LC2VFU(pix[d][0])) + vabsf(LC2VFU(pix[1][ 1]) - LC2VFU(pix[1][ -1]))); + dRv = onev / (onev + vabsf(LC2VFU(pix[d][ 2]) - LC2VFU(pix[d][0])) + vabsf(LC2VFU(pix[1][ 1]) - LC2VFU(pix[1][ -1]))); + dUv = onev / (onev + vabsf(LC2VFU(pix[d][-w2]) - LC2VFU(pix[d][0])) + vabsf(LC2VFU(pix[1][w1]) - LC2VFU(pix[1][-w1]))); + dDv = onev / (onev + vabsf(LC2VFU(pix[d][ w2]) - LC2VFU(pix[d][0])) + vabsf(LC2VFU(pix[1][w1]) - LC2VFU(pix[1][-w1]))); + v0v = CLIPV(LC2VFU(pix[1][0]) + zd5v - ((LC2VFU(pix[1][-1]) - LC2VFU(pix[c][-1])) * dLv + (LC2VFU(pix[1][1]) - LC2VFU(pix[c][1])) * dRv + (LC2VFU(pix[1][-w1]) - LC2VFU(pix[c][-w1])) * dUv + (LC2VFU(pix[1][w1]) - LC2VFU(pix[c][w1])) * dDv ) / (dLv + dRv + dUv + dDv)); + STC2VFU(pix[c][0], v0v); + } + +#endif + + for (; col < width - 2; col += 2) { + int indx = row * width + col; + pix[0] = (float*)(*rgb[0]) + indx; + pix[1] = (float*)(*rgb[1]) + indx; + pix[2] = (float*)(*rgb[2]) + indx; + int d = 2 - c; + float dL = 1.f / (1.f + fabsf(pix[d][ -2] - pix[d][0]) + fabsf(pix[1][ 1] - pix[1][ -1])); + float dR = 1.f / (1.f + fabsf(pix[d][ 2] - pix[d][0]) + fabsf(pix[1][ 1] - pix[1][ -1])); + float dU = 1.f / (1.f + fabsf(pix[d][-w2] - pix[d][0]) + fabsf(pix[1][w1] - pix[1][-w1])); + float dD = 1.f / (1.f + fabsf(pix[d][ w2] - pix[d][0]) + fabsf(pix[1][w1] - pix[1][-w1])); + float v0 = (pix[1][0] + 0.5f - ((pix[1][ -1] - pix[c][ -1]) * dL + (pix[1][ 1] - pix[c][ 1]) * dR + (pix[1][-w1] - pix[c][-w1]) * dU + (pix[1][ w1] - pix[c][ w1]) * dD ) / (dL + dR + dU + dD)); + pix[c][0] = CLIP(v0); + } + } + } // end parallel + } + + t2e.set(); + + if (settings->verbose) { + printf("Refinement Lee %d usec\n", t2e.etime(t1e)); + } +} +#ifdef __SSE2__ +#undef CLIPV +#endif + + +// Refinement based on EECI demozaicing algorithm by L. Chang and Y.P. Tan +// from "Lassus" : Luis Sanz Rodriguez, adapted by Jacques Desmis - JDC - and Oliver Duis for RawTherapee +// increases the signal to noise ratio (PSNR) # +1 to +2 dB : tested with Dcraw : eg: Lighthouse + AMaZE : whitout refinement:39.96dB, with refinement:41.86 dB +// reduce color artifacts, improves the interpolation +// but it's relatively slow +// +// Should be DISABLED if it decreases image quality by increases some image noise and generates blocky edges +void RawImageSource::refinement_lassus(int PassCount) +{ + // const int PassCount=1; + + // if (settings->verbose) printf("Refinement\n"); + + MyTime t1e, t2e; + t1e.set(); + int u = W, v = 2 * u, w = 3 * u, x = 4 * u, y = 5 * u; + float (*image)[3]; + image = (float(*)[3]) calloc(W * H, sizeof * image); +#ifdef _OPENMP + #pragma omp parallel shared(image) +#endif + { + // convert red, blue, green to image +#ifdef _OPENMP + #pragma omp for +#endif + + for (int i = 0; i < H; i++) { + for (int j = 0; j < W; j++) { + image[i * W + j][0] = red [i][j]; + image[i * W + j][1] = green[i][j]; + image[i * W + j][2] = blue [i][j]; + } + } + + for (int b = 0; b < PassCount; b++) { + if (plistener) { + plistener->setProgressStr (M("TP_RAW_DMETHOD_PROGRESSBAR_REFINE")); + plistener->setProgress ((float)b / PassCount); + } + + // Reinforce interpolated green pixels on RED/BLUE pixel locations +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 6; row < H - 6; row++) { + for (int col = 6 + (FC(row, 2) & 1), c = FC(row, col); col < W - 6; col += 2) { + float (*pix)[3] = image + row * W + col; + + // Cubic Spline Interpolation by Li and Randhawa, modified by Luis Sanz Rodriguez + + float f[4]; + f[0] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[-v][c]) - x0875(pix[0][c]) - x0250(pix[-x][c]))) + fabs(x0875(pix[u][1]) - x1125(pix[-u][1]) + x0250(pix[-w][1])) + fabs(x0875(pix[-w][1]) - x1125(pix[-u][1]) + x0250(pix[-y][1]))); + f[1] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[+2][c]) - x0875(pix[0][c]) - x0250(pix[+4][c]))) + fabs(x0875(pix[1][1]) - x1125(pix[-1][1]) + x0250(pix[+3][1])) + fabs(x0875(pix[+3][1]) - x1125(pix[+1][1]) + x0250(pix[+5][1]))); + f[2] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[-2][c]) - x0875(pix[0][c]) - x0250(pix[-4][c]))) + fabs(x0875(pix[1][1]) - x1125(pix[-1][1]) + x0250(pix[-3][1])) + fabs(x0875(pix[-3][1]) - x1125(pix[-1][1]) + x0250(pix[-5][1]))); + f[3] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[+v][c]) - x0875(pix[0][c]) - x0250(pix[+x][c]))) + fabs(x0875(pix[u][1]) - x1125(pix[-u][1]) + x0250(pix[+w][1])) + fabs(x0875(pix[+w][1]) - x1125(pix[+u][1]) + x0250(pix[+y][1]))); + + float g[4];//CLIREF avoid overflow + g[0] = pix[0][c] + (x0875(CLIREF(pix[-u][1] - pix[-u][c])) + x0125(CLIREF(pix[+u][1] - pix[+u][c]))); + g[1] = pix[0][c] + (x0875(CLIREF(pix[+1][1] - pix[+1][c])) + x0125(CLIREF(pix[-1][1] - pix[-1][c]))); + g[2] = pix[0][c] + (x0875(CLIREF(pix[-1][1] - pix[-1][c])) + x0125(CLIREF(pix[+1][1] - pix[+1][c]))); + g[3] = pix[0][c] + (x0875(CLIREF(pix[+u][1] - pix[+u][c])) + x0125(CLIREF(pix[-u][1] - pix[-u][c]))); + + pix[0][1] = (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3]); + + } + } + + // Reinforce interpolated red/blue pixels on GREEN pixel locations +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 6; row < H - 6; row++) { + for (int col = 6 + (FC(row, 3) & 1), c = FC(row, col + 1); col < W - 6; col += 2) { + float (*pix)[3] = image + row * W + col; + + for (int i = 0; i < 2; c = 2 - c, i++) { + float f[4]; + f[0] = 1.0f / (1.0f + xmul2f(fabs(x0875(pix[-v][1]) - x1125(pix[0][1]) + x0250(pix[-x][1]))) + fabs(pix[u] [c] - pix[-u][c]) + fabs(pix[-w][c] - pix[-u][c])); + f[1] = 1.0f / (1.0f + xmul2f(fabs(x0875(pix[+2][1]) - x1125(pix[0][1]) + x0250(pix[+4][1]))) + fabs(pix[+1][c] - pix[-1][c]) + fabs(pix[+3][c] - pix[+1][c])); + f[2] = 1.0f / (1.0f + xmul2f(fabs(x0875(pix[-2][1]) - x1125(pix[0][1]) + x0250(pix[-4][1]))) + fabs(pix[+1][c] - pix[-1][c]) + fabs(pix[-3][c] - pix[-1][c])); + f[3] = 1.0f / (1.0f + xmul2f(fabs(x0875(pix[+v][1]) - x1125(pix[0][1]) + x0250(pix[+x][1]))) + fabs(pix[u] [c] - pix[-u][c]) + fabs(pix[+w][c] - pix[+u][c])); + + float g[5];//CLIREF avoid overflow + g[0] = CLIREF(pix[-u][1] - pix[-u][c]); + g[1] = CLIREF(pix[+1][1] - pix[+1][c]); + g[2] = CLIREF(pix[-1][1] - pix[-1][c]); + g[3] = CLIREF(pix[+u][1] - pix[+u][c]); + g[4] = ((f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3])); + pix[0][c] = pix[0][1] - (0.65f * g[4] + 0.35f * CLIREF(pix[0][1] - pix[0][c])); + } + } + } + + // Reinforce integrated red/blue pixels on BLUE/RED pixel locations +#ifdef _OPENMP + #pragma omp for +#endif + + for (int row = 6; row < H - 6; row++) { + for (int col = 6 + (FC(row, 2) & 1), c = 2 - FC(row, col), d = 2 - c; col < W - 6; col += 2) { + float (*pix)[3] = image + row * W + col; + + float f[4]; + f[0] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[-v][d]) - x0875(pix[0][d]) - x0250(pix[-x][d]))) + fabs(x0875(pix[u][1]) - x1125(pix[-u][1]) + x0250(pix[-w][1])) + fabs(x0875(pix[-w][1]) - x1125(pix[-u][1]) + x0250(pix[-y][1]))); + f[1] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[+2][d]) - x0875(pix[0][d]) - x0250(pix[+4][d]))) + fabs(x0875(pix[1][1]) - x1125(pix[-1][1]) + x0250(pix[+3][1])) + fabs(x0875(pix[+3][1]) - x1125(pix[+1][1]) + x0250(pix[+5][1]))); + f[2] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[-2][d]) - x0875(pix[0][d]) - x0250(pix[-4][d]))) + fabs(x0875(pix[1][1]) - x1125(pix[-1][1]) + x0250(pix[-3][1])) + fabs(x0875(pix[-3][1]) - x1125(pix[-1][1]) + x0250(pix[-5][1]))); + f[3] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[+v][d]) - x0875(pix[0][d]) - x0250(pix[+x][d]))) + fabs(x0875(pix[u][1]) - x1125(pix[-u][1]) + x0250(pix[+w][1])) + fabs(x0875(pix[+w][1]) - x1125(pix[+u][1]) + x0250(pix[+y][1]))); + + float g[5]; + g[0] = (x0875((pix[-u][1] - pix[-u][c])) + x0125((pix[-v][1] - pix[-v][c]))); + g[1] = (x0875((pix[+1][1] - pix[+1][c])) + x0125((pix[+2][1] - pix[+2][c]))); + g[2] = (x0875((pix[-1][1] - pix[-1][c])) + x0125((pix[-2][1] - pix[-2][c]))); + g[3] = (x0875((pix[+u][1] - pix[+u][c])) + x0125((pix[+v][1] - pix[+v][c]))); + + g[4] = (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3]); + + const std::array p = { + pix[-u - 1][1] - pix[-u - 1][c], + pix[-u + 0][1] - pix[-u + 0][c], + pix[-u + 1][1] - pix[-u + 1][c], + pix[+0 - 1][1] - pix[+0 - 1][c], + pix[+0 + 0][1] - pix[+0 + 0][c], + pix[+0 + 1][1] - pix[+0 + 1][c], + pix[+u - 1][1] - pix[+u - 1][c], + pix[+u + 0][1] - pix[+u + 0][c], + pix[+u + 1][1] - pix[+u + 1][c] + }; + + const float med = median(p); + + pix[0][c] = LIM(pix[0][1] - (1.30f * g[4] - 0.30f * (pix[0][1] - pix[0][c])), 0.99f * (pix[0][1] - med), 1.01f * (pix[0][1] - med)); + + } + } + + } + + // put modified values to red, green, blue +#ifdef _OPENMP + #pragma omp for +#endif + + for (int i = 0; i < H; i++) { + for (int j = 0; j < W; j++) { + red [i][j] = image[i * W + j][0]; + green[i][j] = image[i * W + j][1]; + blue [i][j] = image[i * W + j][2]; + } + } + } + + free(image); + + t2e.set(); + + if (settings->verbose) { + printf("Refinement Lassus %d usec\n", t2e.etime(t1e)); + } +} + + +/* + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of the author nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// If you want to use the code, you need to display name of the original authors in +// your software! + +/* DCB demosaicing by Jacek Gozdz (cuniek@kft.umcs.lublin.pl) + * the code is open source (BSD licence) +*/ + +#define TILESIZE 192 +#define TILEBORDER 10 +#define CACHESIZE (TILESIZE+2*TILEBORDER) + +inline void RawImageSource::dcb_initTileLimits(int &colMin, int &rowMin, int &colMax, int &rowMax, int x0, int y0, int border) +{ + rowMin = border; + colMin = border; + rowMax = CACHESIZE - border; + colMax = CACHESIZE - border; + + if(!y0 ) { + rowMin = TILEBORDER + border; + } + + if(!x0 ) { + colMin = TILEBORDER + border; + } + + if( y0 + TILESIZE + TILEBORDER >= H - border) { + rowMax = TILEBORDER + H - border - y0; + } + + if( x0 + TILESIZE + TILEBORDER >= W - border) { + colMax = TILEBORDER + W - border - x0; + } +} + +void RawImageSource::fill_raw( float (*cache )[3], int x0, int y0, float** rawData) +{ + int rowMin, colMin, rowMax, colMax; + dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 0); + + for (int row = rowMin, y = y0 - TILEBORDER + rowMin; row < rowMax; row++, y++) + for (int col = colMin, x = x0 - TILEBORDER + colMin, indx = row * CACHESIZE + col; col < colMax; col++, x++, indx++) { + cache[indx][fc(y, x)] = rawData[y][x]; + } +} + +void RawImageSource::fill_border( float (*cache )[3], int border, int x0, int y0) +{ + unsigned f; + float sum[8]; + constexpr unsigned int colors = 3; // used in FORCC + + for (int row = y0; row < y0 + TILESIZE + TILEBORDER && row < H; row++) { + for (int col = x0; col < x0 + TILESIZE + TILEBORDER && col < W; col++) { + if (col >= border && col < W - border && row >= border && row < H - border) { + col = W - border; + + if(col >= x0 + TILESIZE + TILEBORDER ) { + break; + } + } + + memset(sum, 0, sizeof sum); + + for (int y = row - 1; y != row + 2; y++) + for (int x = col - 1; x != col + 2; x++) + if (y < H && y < y0 + TILESIZE + TILEBORDER && x < W && x < x0 + TILESIZE + TILEBORDER) { + f = fc(y, x); + sum[f] += cache[(y - y0 + TILEBORDER) * CACHESIZE + TILEBORDER + x - x0][f]; + sum[f + 4]++; + } + + f = fc(row, col); + FORCC + + if (c != f && sum[c + 4] > 0) { + cache[(row - y0 + TILEBORDER) * CACHESIZE + TILEBORDER + col - x0][c] = sum[c] / sum[c + 4]; + } + } + } +} + +// saves red and blue + +// change buffer[3] -> buffer[2], possibly to buffer[1] if split +// into two loops, one for R and another for B, could also be smaller because +// there is no need for green pixels pass +// this would decrease the amount of needed memory +// from megapixels*2 records to megapixels*0.5 +// also don't know if float is needed as data is 1-65536 integer (I believe!!) +// comment from Ingo: float is needed because rawdata in rt is float +void RawImageSource::copy_to_buffer( float (*buffer)[2], float (*image)[3]) +{ + for (int indx = 0; indx < CACHESIZE * CACHESIZE; indx++) { + buffer[indx][0] = image[indx][0]; //R + buffer[indx][1] = image[indx][2]; //B + } +} + +// restores red and blue + +// other comments like in copy_to_buffer +void RawImageSource::restore_from_buffer(float (*image)[3], float (*buffer)[2]) +{ + for (int indx = 0; indx < CACHESIZE * CACHESIZE; indx++) { + image[indx][0] = buffer[indx][0]; //R + image[indx][2] = buffer[indx][1]; //B + } +} + +// First pass green interpolation + +// remove entirely: bufferH and bufferV +void RawImageSource::dcb_hid(float (*image)[3], int x0, int y0) +{ + const int u = CACHESIZE; + int rowMin, colMin, rowMax, colMax; + dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2); + +// simple green bilinear in R and B pixels + for (int row = rowMin; row < rowMax; row++) + for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col; col < colMax; col += 2, indx += 2) { + assert(indx - u - 1 >= 0 && indx + u + 1 < u * u); + + image[indx][1] = 0.25*(image[indx-1][1]+image[indx+1][1]+image[indx-u][1]+image[indx+u][1]); + } +} + +// missing colours are interpolated +void RawImageSource::dcb_color(float (*image)[3], int x0, int y0) +{ + const int u = CACHESIZE; + int rowMin, colMin, rowMax, colMax; + dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 1); + + // red in blue pixel, blue in red pixel + for (int row = rowMin; row < rowMax; row++) + for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col, c = 2 - FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col); col < colMax; col += 2, indx += 2) { + assert(indx >= 0 && indx < u * u && c >= 0 && c < 4); + + +//Jacek comment: one multiplication less + image[indx][c] = image[indx][1] + + ( image[indx + u + 1][c] + image[indx + u - 1][c] + image[indx - u + 1][c] + image[indx - u - 1][c] + - (image[indx + u + 1][1] + image[indx + u - 1][1] + image[indx - u + 1][1] + image[indx - u - 1][1]) ) * 0.25f; + +/* original + image[indx][c] = ( 4.f * image[indx][1] + - image[indx + u + 1][1] - image[indx + u - 1][1] - image[indx - u + 1][1] - image[indx - u - 1][1] + + image[indx + u + 1][c] + image[indx + u - 1][c] + image[indx - u + 1][c] + image[indx - u - 1][c] ) * 0.25f; +*/ + } + + // red or blue in green pixels + for (int row = rowMin; row < rowMax; row++) + for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin + 1) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col + 1), d = 2 - c; col < colMax; col += 2, indx += 2) { + assert(indx >= 0 && indx < u * u && c >= 0 && c < 4); + +//Jacek comment: two multiplications (in total) less + image[indx][c] = image[indx][1] + (image[indx + 1][c] + image[indx - 1][c] - (image[indx + 1][1] + image[indx - 1][1])) * 0.5f; + image[indx][d] = image[indx][1] + (image[indx + u][d] + image[indx - u][d] - (image[indx + u][1] + image[indx - u][1])) * 0.5f; + + +/* original + image[indx][c] = (2.f * image[indx][1] - image[indx + 1][1] - image[indx - 1][1] + image[indx + 1][c] + image[indx - 1][c]) * 0.5f; + image[indx][d] = (2.f * image[indx][1] - image[indx + u][1] - image[indx - u][1] + image[indx + u][d] + image[indx - u][d]) * 0.5f; +*/ + } +} + +// green correction +void RawImageSource::dcb_hid2(float (*image)[3], int x0, int y0) +{ + const int v = 2 * CACHESIZE; + int rowMin, colMin, rowMax, colMax; + dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2); + + for (int row = rowMin; row < rowMax; row++) { + for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col); col < colMax; col += 2, indx += 2) { + assert(indx - v >= 0 && indx + v < CACHESIZE * CACHESIZE); + +//Jacek comment: one multiplication less + image[indx][1] = image[indx][c] + + (image[indx + v][1] + image[indx - v][1] + image[indx - 2][1] + image[indx + 2][1] + - (image[indx + v][c] + image[indx - v][c] + image[indx - 2][c] + image[indx + 2][c])) * 0.25f; + +/* original + image[indx][1] = (image[indx + v][1] + image[indx - v][1] + image[indx - 2][1] + image[indx + 2][1]) * 0.25f + + image[indx][c] - ( image[indx + v][c] + image[indx - v][c] + image[indx - 2][c] + image[indx + 2][c]) * 0.25f; +*/ + } + } +} + +// green is used to create +// an interpolation direction map +// 1 = vertical +// 0 = horizontal +// saved in image[][3] + +// seems at least 2 persons implemented some code, as this one has different coding style, could be unified +// I don't know if *pix is faster than a loop working on image[] directly +void RawImageSource::dcb_map(float (*image)[3], uint8_t *map, int x0, int y0) +{ + const int u = 3 * CACHESIZE; + int rowMin, colMin, rowMax, colMax; + dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2); + + for (int row = rowMin; row < rowMax; row++) { + for (int col = colMin, indx = row * CACHESIZE + col; col < colMax; col++, indx++) { + float *pix = &(image[indx][1]); + + assert(indx >= 0 && indx < u * u); + + // comparing 4 * a to (b+c+d+e) instead of a to (b+c+d+e)/4 is faster because divisions are slow + if ( 4 * (*pix) > ( (pix[-3] + pix[+3]) + (pix[-u] + pix[+u])) ) { + map[indx] = ((min(pix[-3], pix[+3]) + (pix[-3] + pix[+3]) ) < (min(pix[-u], pix[+u]) + (pix[-u] + pix[+u]))); + } else { + map[indx] = ((max(pix[-3], pix[+3]) + (pix[-3] + pix[+3]) ) > (max(pix[-u], pix[+u]) + (pix[-u] + pix[+u]))); + } + } + } +} + +// interpolated green pixels are corrected using the map +void RawImageSource::dcb_correction(float (*image)[3], uint8_t *map, int x0, int y0) +{ + const int u = CACHESIZE, v = 2 * CACHESIZE; + int rowMin, colMin, rowMax, colMax; + dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2); + + for (int row = rowMin; row < rowMax; row++) { + for (int indx = row * CACHESIZE + colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1); indx < row * CACHESIZE + colMax; indx += 2) { +// for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col; col < colMax; col += 2, indx += 2) { + float current = 4 * map[indx] + + 2 * (map[indx + u] + map[indx - u] + map[indx + 1] + map[indx - 1]) + + map[indx + v] + map[indx - v] + map[indx + 2] + map[indx - 2]; + + assert(indx >= 0 && indx < u * u); + image[indx][1] = ((16.f - current) * (image[indx - 1][1] + image[indx + 1][1]) + current * (image[indx - u][1] + image[indx + u][1]) ) * 0.03125f; +// image[indx][1] = ((16.f - current) * (image[indx - 1][1] + image[indx + 1][1]) * 0.5f + current * (image[indx - u][1] + image[indx + u][1]) * 0.5f ) * 0.0625f; + } + } +} + +// R and B smoothing using green contrast, all pixels except 2 pixel wide border + +// again code with *pix, is this kind of calculating faster in C, than this what was commented? +void RawImageSource::dcb_pp(float (*image)[3], int x0, int y0) +{ + const int u = CACHESIZE; + int rowMin, colMin, rowMax, colMax; + dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2); + + for (int row = rowMin; row < rowMax; row++) + for (int col = colMin, indx = row * CACHESIZE + col; col < colMax; col++, indx++) { +// float r1 = image[indx-1][0] + image[indx+1][0] + image[indx-u][0] + image[indx+u][0] + image[indx-u-1][0] + image[indx+u+1][0] + image[indx-u+1][0] + image[indx+u-1][0]; +// float g1 = image[indx-1][1] + image[indx+1][1] + image[indx-u][1] + image[indx+u][1] + image[indx-u-1][1] + image[indx+u+1][1] + image[indx-u+1][1] + image[indx+u-1][1]; +// float b1 = image[indx-1][2] + image[indx+1][2] + image[indx-u][2] + image[indx+u][2] + image[indx-u-1][2] + image[indx+u+1][2] + image[indx-u+1][2] + image[indx+u-1][2]; + float (*pix)[3] = image + (indx - u - 1); + float r1 = (*pix)[0]; + float g1 = (*pix)[1]; + float b1 = (*pix)[2]; + pix++; + r1 += (*pix)[0]; + g1 += (*pix)[1]; + b1 += (*pix)[2]; + pix++; + r1 += (*pix)[0]; + g1 += (*pix)[1]; + b1 += (*pix)[2]; + pix += CACHESIZE - 2; + r1 += (*pix)[0]; + g1 += (*pix)[1]; + b1 += (*pix)[2]; + pix += 2; + r1 += (*pix)[0]; + g1 += (*pix)[1]; + b1 += (*pix)[2]; + pix += CACHESIZE - 2; + r1 += (*pix)[0]; + g1 += (*pix)[1]; + b1 += (*pix)[2]; + pix++; + r1 += (*pix)[0]; + g1 += (*pix)[1]; + b1 += (*pix)[2]; + pix++; + r1 += (*pix)[0]; + g1 += (*pix)[1]; + b1 += (*pix)[2]; + r1 *= 0.125f; + g1 *= 0.125f; + b1 *= 0.125f; + r1 += ( image[indx][1] - g1 ); + b1 += ( image[indx][1] - g1 ); + + assert(indx >= 0 && indx < u * u); + image[indx][0] = r1; + image[indx][2] = b1; + } +} + +// interpolated green pixels are corrected using the map +// with correction +void RawImageSource::dcb_correction2(float (*image)[3], uint8_t *map, int x0, int y0) +{ + const int u = CACHESIZE, v = 2 * CACHESIZE; + int rowMin, colMin, rowMax, colMax; + dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 4); + + for (int row = rowMin; row < rowMax; row++) { + for (int indx = row * CACHESIZE + colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1)); indx < row * CACHESIZE + colMax; indx += 2) { + // map values are uint8_t either 0 or 1. Adding them using integer instructions is perfectly valid and fast. Final result is converted to float then + float current = 4 * map[indx] + + 2 * (map[indx + u] + map[indx - u] + map[indx + 1] + map[indx - 1]) + + map[indx + v] + map[indx - v] + map[indx + 2] + map[indx - 2]; + + assert(indx >= 0 && indx < u * u); + +// Jacek comment: works now, and has 3 float mults and 9 float adds + image[indx][1] = image[indx][c] + + ((16.f - current) * (image[indx - 1][1] + image[indx + 1][1] - (image[indx + 2][c] + image[indx - 2][c])) + + current * (image[indx - u][1] + image[indx + u][1] - (image[indx + v][c] + image[indx - v][c]))) * 0.03125f; + + + // 4 float mults and 9 float adds + // Jacek comment: not mathematically identical to original +/* image[indx][1] = 16.f * image[indx][c] + + ((16.f - current) * ((image[indx - 1][1] + image[indx + 1][1]) + - (image[indx + 2][c] + image[indx - 2][c])) + + current * ((image[indx - u][1] + image[indx + u][1]) - (image[indx + v][c] + image[indx - v][c]))) * 0.03125f; +*/ + // 7 float mults and 10 float adds + // original code +/* + image[indx][1] = ((16.f - current) * ((image[indx - 1][1] + image[indx + 1][1]) * 0.5f + + image[indx][c] - (image[indx + 2][c] + image[indx - 2][c]) * 0.5f) + + current * ((image[indx - u][1] + image[indx + u][1]) * 0.5f + image[indx][c] - (image[indx + v][c] + image[indx - v][c]) * 0.5f)) * 0.0625f; +*/ + } + } +} + +// image refinement +void RawImageSource::dcb_refinement(float (*image)[3], uint8_t *map, int x0, int y0) +{ + const int u = CACHESIZE, v = 2 * CACHESIZE; + int rowMin, colMin, rowMax, colMax; + dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 4); + + float f0, f1, f2, g1, h0, h1, h2, g2; + + for (int row = rowMin; row < rowMax; row++) + for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col); col < colMax; col += 2, indx += 2) { + + float current = 4 * map[indx] + + 2 * (map[indx + u] + map[indx - u] + map[indx + 1] + map[indx - 1]) + + map[indx + v] + map[indx - v] + map[indx - 2] + map[indx + 2]; + + float currPix = image[indx][c]; + + f0 = (float)(image[indx - u][1] + image[indx + u][1]) / (1.f + 2.f * currPix); + f1 = 2.f * image[indx - u][1] / (1.f + image[indx - v][c] + currPix); + f2 = 2.f * image[indx + u][1] / (1.f + image[indx + v][c] + currPix); + + g1 = f0 + f1 + f2; + + h0 = (float)(image[indx - 1][1] + image[indx + 1][1]) / (1.f + 2.f * currPix); + h1 = 2.f * image[indx - 1][1] / (1.f + image[indx - 2][c] + currPix); + h2 = 2.f * image[indx + 1][1] / (1.f + image[indx + 2][c] + currPix); + + g2 = h0 + h1 + h2; + + // new green value + assert(indx >= 0 && indx < u * u); + currPix *= (current * g1 + (16.f - current) * g2) / 48.f; + + // get rid of the overshot pixels + float minVal = min(image[indx - 1][1], min(image[indx + 1][1], min(image[indx - u][1], image[indx + u][1]))); + float maxVal = max(image[indx - 1][1], max(image[indx + 1][1], max(image[indx - u][1], image[indx + u][1]))); + + image[indx][1] = LIM(currPix, minVal, maxVal); + + } +} + +// missing colours are interpolated using high quality algorithm by Luis Sanz Rodriguez +void RawImageSource::dcb_color_full(float (*image)[3], int x0, int y0, float (*chroma)[2]) +{ + const int u = CACHESIZE, w = 3 * CACHESIZE; + int rowMin, colMin, rowMax, colMax; + dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 3); + + float f[4], g[4]; + + for (int row = 1; row < CACHESIZE - 1; row++) + for (int col = 1 + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + 1) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col), d = c / 2; col < CACHESIZE - 1; col += 2, indx += 2) { + assert(indx >= 0 && indx < u * u && c >= 0 && c < 4); + chroma[indx][d] = image[indx][c] - image[indx][1]; + } + + for (int row = rowMin; row < rowMax; row++) + for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col, c = 1 - FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col) / 2; col < colMax; col += 2, indx += 2) { + f[0] = 1.f / (float)(1.f + fabs(chroma[indx - u - 1][c] - chroma[indx + u + 1][c]) + fabs(chroma[indx - u - 1][c] - chroma[indx - w - 3][c]) + fabs(chroma[indx + u + 1][c] - chroma[indx - w - 3][c])); + f[1] = 1.f / (float)(1.f + fabs(chroma[indx - u + 1][c] - chroma[indx + u - 1][c]) + fabs(chroma[indx - u + 1][c] - chroma[indx - w + 3][c]) + fabs(chroma[indx + u - 1][c] - chroma[indx - w + 3][c])); + f[2] = 1.f / (float)(1.f + fabs(chroma[indx + u - 1][c] - chroma[indx - u + 1][c]) + fabs(chroma[indx + u - 1][c] - chroma[indx + w + 3][c]) + fabs(chroma[indx - u + 1][c] - chroma[indx + w - 3][c])); + f[3] = 1.f / (float)(1.f + fabs(chroma[indx + u + 1][c] - chroma[indx - u - 1][c]) + fabs(chroma[indx + u + 1][c] - chroma[indx + w - 3][c]) + fabs(chroma[indx - u - 1][c] - chroma[indx + w + 3][c])); + g[0] = 1.325f * chroma[indx - u - 1][c] - 0.175f * chroma[indx - w - 3][c] - 0.075f * (chroma[indx - w - 1][c] + chroma[indx - u - 3][c]); + g[1] = 1.325f * chroma[indx - u + 1][c] - 0.175f * chroma[indx - w + 3][c] - 0.075f * (chroma[indx - w + 1][c] + chroma[indx - u + 3][c]); + g[2] = 1.325f * chroma[indx + u - 1][c] - 0.175f * chroma[indx + w - 3][c] - 0.075f * (chroma[indx + w - 1][c] + chroma[indx + u - 3][c]); + g[3] = 1.325f * chroma[indx + u + 1][c] - 0.175f * chroma[indx + w + 3][c] - 0.075f * (chroma[indx + w + 1][c] + chroma[indx + u + 3][c]); + +// g[0] = 1.325f * chroma[indx - u - 1][c] - 0.175f * chroma[indx - w - 3][c] - 0.075f * chroma[indx - w - 1][c] - 0.075f * chroma[indx - u - 3][c]; +// g[1] = 1.325f * chroma[indx - u + 1][c] - 0.175f * chroma[indx - w + 3][c] - 0.075f * chroma[indx - w + 1][c] - 0.075f * chroma[indx - u + 3][c]; +// g[2] = 1.325f * chroma[indx + u - 1][c] - 0.175f * chroma[indx + w - 3][c] - 0.075f * chroma[indx + w - 1][c] - 0.075f * chroma[indx + u - 3][c]; +// g[3] = 1.325f * chroma[indx + u + 1][c] - 0.175f * chroma[indx + w + 3][c] - 0.075f * chroma[indx + w + 1][c] - 0.075f * chroma[indx + u + 3][c]; + + assert(indx >= 0 && indx < u * u && c >= 0 && c < 2); + chroma[indx][c] = (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3]); + } + + for (int row = rowMin; row < rowMax; row++) + for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin + 1) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col + 1) / 2; col < colMax; col += 2, indx += 2) + for(int d = 0; d <= 1; c = 1 - c, d++) { + f[0] = 1.f / (1.f + fabs(chroma[indx - u][c] - chroma[indx + u][c]) + fabs(chroma[indx - u][c] - chroma[indx - w][c]) + fabs(chroma[indx + u][c] - chroma[indx - w][c])); + f[1] = 1.f / (1.f + fabs(chroma[indx + 1][c] - chroma[indx - 1][c]) + fabs(chroma[indx + 1][c] - chroma[indx + 3][c]) + fabs(chroma[indx - 1][c] - chroma[indx + 3][c])); + f[2] = 1.f / (1.f + fabs(chroma[indx - 1][c] - chroma[indx + 1][c]) + fabs(chroma[indx - 1][c] - chroma[indx - 3][c]) + fabs(chroma[indx + 1][c] - chroma[indx - 3][c])); + f[3] = 1.f / (1.f + fabs(chroma[indx + u][c] - chroma[indx - u][c]) + fabs(chroma[indx + u][c] - chroma[indx + w][c]) + fabs(chroma[indx - u][c] - chroma[indx + w][c])); + + g[0] = intp(0.875f, chroma[indx - u][c], chroma[indx - w][c]); + g[1] = intp(0.875f, chroma[indx + 1][c], chroma[indx + 3][c]); + g[2] = intp(0.875f, chroma[indx - 1][c], chroma[indx - 3][c]); + g[3] = intp(0.875f, chroma[indx + u][c], chroma[indx + w][c]); + +// g[0] = 0.875f * chroma[indx - u][c] + 0.125f * chroma[indx - w][c]; +// g[1] = 0.875f * chroma[indx + 1][c] + 0.125f * chroma[indx + 3][c]; +// g[2] = 0.875f * chroma[indx - 1][c] + 0.125f * chroma[indx - 3][c]; +// g[3] = 0.875f * chroma[indx + u][c] + 0.125f * chroma[indx + w][c]; + + assert(indx >= 0 && indx < u * u && c >= 0 && c < 2); + chroma[indx][c] = (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3]); + } + + for(int row = rowMin; row < rowMax; row++) + for(int col = colMin, indx = row * CACHESIZE + col; col < colMax; col++, indx++) { + assert(indx >= 0 && indx < u * u); + + image[indx][0] = chroma[indx][0] + image[indx][1]; + image[indx][2] = chroma[indx][1] + image[indx][1]; + } +} + +// DCB demosaicing main routine +void RawImageSource::dcb_demosaic(int iterations, bool dcb_enhance) +{ +BENCHFUN + double currentProgress = 0.0; + + if(plistener) { + plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCB))); + plistener->setProgress (currentProgress); + } + + int wTiles = W / TILESIZE + (W % TILESIZE ? 1 : 0); + int hTiles = H / TILESIZE + (H % TILESIZE ? 1 : 0); + int numTiles = wTiles * hTiles; + int tilesDone = 0; + constexpr int cldf = 2; // factor to multiply cache line distance. 1 = 64 bytes, 2 = 128 bytes ... + +#ifdef _OPENMP + #pragma omp parallel +#endif +{ + // assign working space + char *buffer0 = (char *) malloc(5 * sizeof(float) * CACHESIZE * CACHESIZE + sizeof(uint8_t) * CACHESIZE * CACHESIZE + 3 * cldf * 64 + 63); + // aligned to 64 byte boundary + char *data = (char*)( ( uintptr_t(buffer0) + uintptr_t(63)) / 64 * 64); + + float (*tile)[3] = (float(*)[3]) data; + float (*buffer)[2] = (float(*)[2]) ((char*)tile + sizeof(float) * CACHESIZE * CACHESIZE * 3 + cldf * 64); + float (*chrm)[2] = (float(*)[2]) (buffer); // No overlap in usage of buffer and chrm means we can reuse buffer + uint8_t *map = (uint8_t*) ((char*)buffer + sizeof(float) * CACHESIZE * CACHESIZE * 2 + cldf * 64); + +#ifdef _OPENMP + #pragma omp for schedule(dynamic) nowait +#endif + + for( int iTile = 0; iTile < numTiles; iTile++) { + int xTile = iTile % wTiles; + int yTile = iTile / wTiles; + int x0 = xTile * TILESIZE; + int y0 = yTile * TILESIZE; + + memset(tile, 0, CACHESIZE * CACHESIZE * sizeof * tile); + memset(map, 0, CACHESIZE * CACHESIZE * sizeof * map); + + fill_raw( tile, x0, y0, rawData ); + + if( !xTile || !yTile || xTile == wTiles - 1 || yTile == hTiles - 1) { + fill_border(tile, 6, x0, y0); + } + + copy_to_buffer(buffer, tile); + dcb_hid(tile, x0, y0); + + for (int i = iterations; i > 0; i--) { + dcb_hid2(tile, x0, y0); + dcb_hid2(tile, x0, y0); + dcb_hid2(tile, x0, y0); + dcb_map(tile, map, x0, y0); + dcb_correction(tile, map, x0, y0); + } + + dcb_color(tile, x0, y0); + dcb_pp(tile, x0, y0); + dcb_map(tile, map, x0, y0); + dcb_correction2(tile, map, x0, y0); + dcb_map(tile, map, x0, y0); + dcb_correction(tile, map, x0, y0); + dcb_color(tile, x0, y0); + dcb_map(tile, map, x0, y0); + dcb_correction(tile, map, x0, y0); + dcb_map(tile, map, x0, y0); + dcb_correction(tile, map, x0, y0); + dcb_map(tile, map, x0, y0); + restore_from_buffer(tile, buffer); + + if (!dcb_enhance) + dcb_color(tile, x0, y0); + else + { + memset(chrm, 0, CACHESIZE * CACHESIZE * sizeof * chrm); + dcb_refinement(tile, map, x0, y0); + dcb_color_full(tile, x0, y0, chrm); + } + + /* + dcb_hid(tile, buffer, buffer2, x0, y0); + dcb_color(tile, x0, y0); + + copy_to_buffer(buffer, tile); + + for (int i = iterations; i > 0; i--) { + dcb_hid2(tile, x0, y0); + dcb_hid2(tile, x0, y0); + dcb_hid2(tile, x0, y0); + dcb_map(tile, x0, y0); + dcb_correction(tile, x0, y0); + } + + dcb_color(tile, x0, y0); + dcb_pp(tile, x0, y0); + dcb_map(tile, x0, y0); + dcb_correction2(tile, x0, y0); + dcb_map(tile, x0, y0); + dcb_correction(tile, x0, y0); + dcb_color(tile, x0, y0); + dcb_map(tile, x0, y0); + dcb_correction(tile, x0, y0); + dcb_map(tile, x0, y0); + dcb_correction(tile, x0, y0); + dcb_map(tile, x0, y0); + restore_from_buffer(tile, buffer); + dcb_color_full(tile, x0, y0, chrm); + + if (dcb_enhance) { + dcb_refinement(tile, x0, y0); + dcb_color_full(tile, x0, y0, chrm); + } +*/ + for(int y = 0; y < TILESIZE && y0 + y < H; y++) { + for (int j = 0; j < TILESIZE && x0 + j < W; j++) { + red[y0 + y][x0 + j] = tile[(y + TILEBORDER) * CACHESIZE + TILEBORDER + j][0]; + green[y0 + y][x0 + j] = tile[(y + TILEBORDER) * CACHESIZE + TILEBORDER + j][1]; + blue[y0 + y][x0 + j] = tile[(y + TILEBORDER) * CACHESIZE + TILEBORDER + j][2]; + } + } + +#ifdef _OPENMP + + if(omp_get_thread_num() == 0) +#endif + { + if( plistener && double(tilesDone) / numTiles > currentProgress) { + currentProgress += 0.1; // Show progress each 10% + plistener->setProgress (currentProgress); + } + } + +#ifdef _OPENMP + #pragma omp atomic +#endif + tilesDone++; + } + free(buffer0); +} + + if(plistener) { + plistener->setProgress (1.0); + } +} + +#undef TILEBORDER +#undef TILESIZE +#undef CACHESIZE +} /* namespace */ diff --git a/rtengine/pixelshift.cc b/rtengine/pixelshift.cc index 488538e8a..248336407 100644 --- a/rtengine/pixelshift.cc +++ b/rtengine/pixelshift.cc @@ -323,19 +323,22 @@ BENCHFUN if(motionDetection) { if(!showOnlyMask) { if(bayerParams.pixelShiftMedian) { // We need the demosaiced frames for motion correction - if(bayerParams.pixelShiftLmmse) { + if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(bayerParams.PSDemosaicMethod::LMMSE)) { lmmse_interpolate_omp(winw, winh, *(rawDataFrames[0]), red, green, blue, bayerParams.lmmse_iterations); + } else if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(bayerParams.PSDemosaicMethod::AMAZEVNG4)) { + amaze_vng4_demosaic_RT (winw, winh, *(rawDataFrames[0]), red, green, blue, bayerParams.dualDemosaicContrast); } else { amaze_demosaic_RT(winx, winy, winw, winh, *(rawDataFrames[0]), red, green, blue); } - multi_array2D redTmp(winw, winh); multi_array2D greenTmp(winw, winh); multi_array2D blueTmp(winw, winh); for(int i = 0; i < 3; i++) { - if(bayerParams.pixelShiftLmmse) { + if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(bayerParams.PSDemosaicMethod::LMMSE)) { lmmse_interpolate_omp(winw, winh, *(rawDataFrames[i + 1]), redTmp[i], greenTmp[i], blueTmp[i], bayerParams.lmmse_iterations); + } else if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(bayerParams.PSDemosaicMethod::AMAZEVNG4)) { + amaze_vng4_demosaic_RT (winw, winh, *(rawDataFrames[i + 1]), redTmp[i], greenTmp[i], blueTmp[i], bayerParams.dualDemosaicContrast); } else { amaze_demosaic_RT(winx, winy, winw, winh, *(rawDataFrames[i + 1]), redTmp[i], greenTmp[i], blueTmp[i]); } @@ -359,8 +362,10 @@ BENCHFUN } } } else { - if(bayerParams.pixelShiftLmmse) { + if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(bayerParams.PSDemosaicMethod::LMMSE)) { lmmse_interpolate_omp(winw, winh, rawData, red, green, blue, bayerParams.lmmse_iterations); + } else if (bayerParams.pixelShiftDemosaicMethod == bayerParams.getPSDemosaicMethodString(bayerParams.PSDemosaicMethod::AMAZEVNG4)) { + amaze_vng4_demosaic_RT (winw, winh, rawData, red, green, blue, bayerParams.dualDemosaicContrast); } else { amaze_demosaic_RT(winx, winy, winw, winh, rawData, red, green, blue); } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 3a244f5e8..7fc004aa0 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2367,10 +2367,10 @@ RAWParams::BayerSensor::BayerSensor() : pixelShiftGreen(true), pixelShiftBlur(true), pixelShiftSmoothFactor(0.7), - pixelShiftLmmse(false), pixelShiftEqualBright(false), pixelShiftEqualBrightChannel(false), pixelShiftNonGreenCross(true), + pixelShiftDemosaicMethod(getPSDemosaicMethodString(PSDemosaicMethod::AMAZE)), dcb_enhance(true), pdafLinesFilter(false) { @@ -2403,10 +2403,10 @@ bool RAWParams::BayerSensor::operator ==(const BayerSensor& other) const && pixelShiftGreen == other.pixelShiftGreen && pixelShiftBlur == other.pixelShiftBlur && pixelShiftSmoothFactor == other.pixelShiftSmoothFactor - && pixelShiftLmmse == other.pixelShiftLmmse && pixelShiftEqualBright == other.pixelShiftEqualBright && pixelShiftEqualBrightChannel == other.pixelShiftEqualBrightChannel && pixelShiftNonGreenCross == other.pixelShiftNonGreenCross + && pixelShiftDemosaicMethod == other.pixelShiftDemosaicMethod && dcb_enhance == other.dcb_enhance && pdafLinesFilter == other.pdafLinesFilter; } @@ -2426,10 +2426,10 @@ void RAWParams::BayerSensor::setPixelShiftDefaults() pixelShiftGreen = true; pixelShiftBlur = true; pixelShiftSmoothFactor = 0.7; - pixelShiftLmmse = false; pixelShiftEqualBright = false; pixelShiftEqualBrightChannel = false; pixelShiftNonGreenCross = true; + pixelShiftDemosaicMethod = getPSDemosaicMethodString(PSDemosaicMethod::AMAZE); } const std::vector& RAWParams::BayerSensor::getMethodStrings() @@ -2458,6 +2458,23 @@ Glib::ustring RAWParams::BayerSensor::getMethodString(Method method) return getMethodStrings()[toUnderlying(method)]; } +const std::vector& RAWParams::BayerSensor::getPSDemosaicMethodStrings() +{ + static const std::vector method_strings { + "amaze", + "amazevng4", + "lmmse" + }; + return method_strings; +} + +Glib::ustring RAWParams::BayerSensor::getPSDemosaicMethodString(PSDemosaicMethod method) +{ + return getPSDemosaicMethodStrings()[toUnderlying(method)]; +} + + + RAWParams::XTransSensor::XTransSensor() : method(getMethodString(Method::THREE_PASS)), ccSteps(0), @@ -3345,10 +3362,10 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftGreen, "RAW Bayer", "pixelShiftGreen", raw.bayersensor.pixelShiftGreen, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftBlur, "RAW Bayer", "pixelShiftBlur", raw.bayersensor.pixelShiftBlur, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftSmooth, "RAW Bayer", "pixelShiftSmoothFactor", raw.bayersensor.pixelShiftSmoothFactor, keyFile); - saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftLmmse, "RAW Bayer", "pixelShiftLmmse", raw.bayersensor.pixelShiftLmmse, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftEqualBright, "RAW Bayer", "pixelShiftEqualBright", raw.bayersensor.pixelShiftEqualBright, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftEqualBrightChannel, "RAW Bayer", "pixelShiftEqualBrightChannel", raw.bayersensor.pixelShiftEqualBrightChannel, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNonGreenCross, "RAW Bayer", "pixelShiftNonGreenCross", raw.bayersensor.pixelShiftNonGreenCross, keyFile); + saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftDemosaicMethod, "RAW Bayer", "pixelShiftDemosaicMethod", raw.bayersensor.pixelShiftDemosaicMethod, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pdafLinesFilter, "RAW Bayer", "PDAFLinesFilter", raw.bayersensor.pdafLinesFilter, keyFile); saveToKeyfile(!pedited || pedited->raw.xtranssensor.method, "RAW X-Trans", "Method", raw.xtranssensor.method, keyFile); saveToKeyfile(!pedited || pedited->raw.xtranssensor.ccSteps, "RAW X-Trans", "CcSteps", raw.xtranssensor.ccSteps, keyFile); @@ -4682,10 +4699,26 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftGreen", pedited, raw.bayersensor.pixelShiftGreen, pedited->raw.bayersensor.pixelShiftGreen); assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftBlur", pedited, raw.bayersensor.pixelShiftBlur, pedited->raw.bayersensor.pixelShiftBlur); assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftSmoothFactor", pedited, raw.bayersensor.pixelShiftSmoothFactor, pedited->raw.bayersensor.pixelShiftSmooth); - assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftLmmse", pedited, raw.bayersensor.pixelShiftLmmse, pedited->raw.bayersensor.pixelShiftLmmse); assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBright", pedited, raw.bayersensor.pixelShiftEqualBright, pedited->raw.bayersensor.pixelShiftEqualBright); assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBrightChannel", pedited, raw.bayersensor.pixelShiftEqualBrightChannel, pedited->raw.bayersensor.pixelShiftEqualBrightChannel); assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenCross", pedited, raw.bayersensor.pixelShiftNonGreenCross, pedited->raw.bayersensor.pixelShiftNonGreenCross); + + if (ppVersion < 336) { + if (keyFile.has_key("RAW Bayer", "pixelShiftLmmse")) { + bool useLmmse = keyFile.get_boolean ("RAW Bayer", "pixelShiftLmmse"); + if (useLmmse) { + raw.bayersensor.pixelShiftDemosaicMethod = raw.bayersensor.getPSDemosaicMethodString(raw.bayersensor.PSDemosaicMethod::LMMSE); + } else { + raw.bayersensor.pixelShiftDemosaicMethod = raw.bayersensor.getPSDemosaicMethodString(raw.bayersensor.PSDemosaicMethod::AMAZE); + } + if (pedited) { + pedited->raw.bayersensor.pixelShiftDemosaicMethod = true; + } + } + } else { + assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftDemosaicMethod", pedited, raw.bayersensor.pixelShiftDemosaicMethod, pedited->raw.bayersensor.pixelShiftDemosaicMethod); + } + assignFromKeyfile(keyFile, "RAW Bayer", "PDAFLinesFilter", pedited, raw.bayersensor.pdafLinesFilter, pedited->raw.bayersensor.pdafLinesFilter); } diff --git a/rtengine/procparams.h b/rtengine/procparams.h index be7784e1b..9b52cc828 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1245,6 +1245,12 @@ struct RAWParams { CUSTOM }; + enum class PSDemosaicMethod { + AMAZE, + AMAZEVNG4, + LMMSE + }; + Glib::ustring method; int imageNum; int ccSteps; @@ -1275,10 +1281,10 @@ struct RAWParams { bool pixelShiftGreen; bool pixelShiftBlur; double pixelShiftSmoothFactor; - bool pixelShiftLmmse; bool pixelShiftEqualBright; bool pixelShiftEqualBrightChannel; bool pixelShiftNonGreenCross; + Glib::ustring pixelShiftDemosaicMethod; bool dcb_enhance; bool pdafLinesFilter; @@ -1291,6 +1297,9 @@ struct RAWParams { static const std::vector& getMethodStrings(); static Glib::ustring getMethodString(Method method); + + static const std::vector& getPSDemosaicMethodStrings(); + static Glib::ustring getPSDemosaicMethodString(PSDemosaicMethod method); }; /** diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index ce300bcd7..c5af124e5 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2068,7 +2068,7 @@ void RawImageSource::demosaic(const RAWParams &raw) if ( raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD) ) { hphd_demosaic (); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4) ) { - vng4_demosaic (); + vng4_demosaic (rawData, red, green, blue); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AHD) ) { ahd_demosaic (); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZE) ) { diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index e2467dba6..878886fed 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -262,13 +262,13 @@ protected: void nodemosaic(bool bw); void eahd_demosaic(); void hphd_demosaic(); - void vng4_demosaic(); + void vng4_demosaic(const array2D &rawData, array2D &red, array2D &green, array2D &blue); void ppg_demosaic(); void jdl_interpolate_omp(); void igv_interpolate(int winw, int winh); void lmmse_interpolate_omp(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue, int iterations); - void amaze_demosaic_RT(int winx, int winy, int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue);//Emil's code for AMaZE - void amaze_vng4_demosaic_RT(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue, double contrast = 0.0); + void amaze_demosaic_RT(int winx, int winy, int winw, int winh, const array2D &rawData, array2D &red, array2D &green, array2D &blue);//Emil's code for AMaZE + void amaze_vng4_demosaic_RT(int winw, int winh, const array2D &rawData, array2D &red, array2D &green, array2D &blue, double contrast = 0.0); void fast_demosaic();//Emil's code for fast demosaicing void dcb_demosaic(int iterations, bool dcb_enhance); void ahd_demosaic(); diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 7818871a7..ad622c6bd 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1465,8 +1465,6 @@ private: } if (params.raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::PIXELSHIFT)) { - params.raw.bayersensor.method = procparams::RAWParams::BayerSensor::getMethodString(params.raw.bayersensor.pixelShiftLmmse ? procparams::RAWParams::BayerSensor::Method::LMMSE : procparams::RAWParams::BayerSensor::Method::AMAZE); - } else if (params.raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::AMAZE)) { params.raw.bayersensor.method = procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::RCD); } diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc index 339666aa0..23e848fc6 100644 --- a/rtgui/bayerprocess.cc +++ b/rtgui/bayerprocess.cc @@ -29,6 +29,7 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA auto m = ProcEventMapper::getInstance(); EvDemosaicContrast = m->newEvent(DEMOSAIC, "HISTORY_MSG_DUALDEMOSAIC_CONTRAST"); + EvDemosaicPixelshiftDemosaicMethod = m->newEvent(DEMOSAIC, "HISTORY_MSG_PIXELSHIFT_DEMOSAIC"); Gtk::HBox* hb1 = Gtk::manage (new Gtk::HBox ()); hb1->pack_start (*Gtk::manage (new Gtk::Label ( M("TP_RAW_DMETHOD") + ": ")), Gtk::PACK_SHRINK, 4); @@ -149,6 +150,17 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA pixelShiftShowMotionMaskOnly->set_tooltip_text (M("TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP")); pixelShiftFrame->pack_start(*pixelShiftShowMotionMaskOnly); + + Gtk::HBox* hb4 = Gtk::manage (new Gtk::HBox ()); + hb4->pack_start (*Gtk::manage (new Gtk::Label ( M("TP_RAW_PIXELSHIFTDMETHOD") + ": ")), Gtk::PACK_SHRINK, 4); + pixelShiftDemosaicMethod = Gtk::manage (new MyComboBoxText ()); + for(const auto method_string : procparams::RAWParams::BayerSensor::getPSDemosaicMethodStrings()) { + pixelShiftDemosaicMethod->append(M("TP_RAW_" + Glib::ustring(method_string).uppercase())); + } + pixelShiftDemosaicMethod->set_active(0); + hb4->pack_start(*pixelShiftDemosaicMethod); + pixelShiftOptions->pack_start(*hb4); + pixelShiftGreen = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTGREEN"), multiImage)); pixelShiftGreen->setCheckBoxListener (this); pixelShiftOptions->pack_start(*pixelShiftGreen); @@ -207,13 +219,6 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA pixelShiftMedian->set_tooltip_text (M("TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP")); pixelShiftOptions->pack_start(*pixelShiftMedian); - - pixelShiftLmmse = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTLMMSE"), multiImage)); - pixelShiftLmmse->setCheckBoxListener (this); - pixelShiftLmmse->set_tooltip_text (M("TP_RAW_PIXELSHIFTLMMSE_TOOLTIP")); - pixelShiftOptions->pack_start(*pixelShiftLmmse); - - pixelShiftFrame->pack_start(*pixelShiftOptions); pixelShiftOptions->hide(); @@ -222,6 +227,7 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA method->connect(method->signal_changed().connect( sigc::mem_fun(*this, &BayerProcess::methodChanged) )); imageNumber->connect(imageNumber->signal_changed().connect( sigc::mem_fun(*this, &BayerProcess::imageNumberChanged) )); pixelShiftMotionMethod->connect(pixelShiftMotionMethod->signal_changed().connect( sigc::mem_fun(*this, &BayerProcess::pixelShiftMotionMethodChanged) )); + pixelShiftDemosaicMethod->connect(pixelShiftDemosaicMethod->signal_changed().connect( sigc::mem_fun(*this, &BayerProcess::pixelShiftDemosaicMethodChanged) )); } @@ -230,6 +236,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params disableListener (); method->block (true); imageNumber->block (true); + pixelShiftDemosaicMethod->block(true); //allEnhconn.block (true); method->set_active(std::numeric_limits::max()); @@ -242,8 +249,14 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params break; } } + pixelShiftDemosaicMethod->set_active(std::numeric_limits::max()); + for (size_t i = 0; i < procparams::RAWParams::BayerSensor::getPSDemosaicMethodStrings().size(); ++i) { + if (pp->raw.bayersensor.pixelShiftDemosaicMethod == procparams::RAWParams::BayerSensor::getPSDemosaicMethodStrings()[i]) { + pixelShiftDemosaicMethod->set_active(i); + break; + } + } - //allEnhance->set_active(pp->raw.bayersensor.all_enhance); dcbIterations->setValue (pp->raw.bayersensor.dcb_iterations); dcbEnhance->setValue (pp->raw.bayersensor.dcb_enhance); @@ -260,7 +273,6 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params pixelShiftSmooth->set_sensitive (pp->raw.bayersensor.pixelShiftBlur); } pixelShiftSmooth->setValue (pp->raw.bayersensor.pixelShiftSmoothFactor); - pixelShiftLmmse->setValue (pp->raw.bayersensor.pixelShiftLmmse); pixelShiftEqualBright->setValue (pp->raw.bayersensor.pixelShiftEqualBright); pixelShiftEqualBrightChannel->set_sensitive (pp->raw.bayersensor.pixelShiftEqualBright); pixelShiftEqualBrightChannel->setValue (pp->raw.bayersensor.pixelShiftEqualBrightChannel); @@ -286,7 +298,6 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params pixelShiftGreen->setEdited (pedited->raw.bayersensor.pixelShiftGreen); pixelShiftBlur->setEdited (pedited->raw.bayersensor.pixelShiftBlur); pixelShiftSmooth->setEditedState ( pedited->raw.bayersensor.pixelShiftSmooth ? Edited : UnEdited); - pixelShiftLmmse->setEdited (pedited->raw.bayersensor.pixelShiftLmmse); pixelShiftEqualBright->setEdited (pedited->raw.bayersensor.pixelShiftEqualBright); pixelShiftEqualBrightChannel->setEdited (pedited->raw.bayersensor.pixelShiftEqualBrightChannel); pixelShiftNonGreenCross->setEdited (pedited->raw.bayersensor.pixelShiftNonGreenCross); @@ -298,12 +309,19 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params if(!pedited->raw.bayersensor.method) { method->set_active(std::numeric_limits::max()); // No name } + if(!pedited->raw.bayersensor.imageNum) { imageNumber->set_active_text(M("GENERAL_UNCHANGED")); } + if(!pedited->raw.bayersensor.pixelShiftMotionCorrectionMethod) { pixelShiftMotionMethod->set_active_text(M("GENERAL_UNCHANGED")); } + + if(!pedited->raw.bayersensor.pixelShiftDemosaicMethod) { + pixelShiftDemosaicMethod->set_active(std::numeric_limits::max()); // No name + } + } if (!batchMode) { @@ -330,6 +348,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params method->block (false); imageNumber->block (false); + pixelShiftDemosaicMethod->block(false); //allEnhconn.block (false); enableListener (); @@ -353,7 +372,6 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe pp->raw.bayersensor.pixelShiftGreen = pixelShiftGreen->getLastActive (); pp->raw.bayersensor.pixelShiftBlur = pixelShiftBlur->getLastActive (); pp->raw.bayersensor.pixelShiftSmoothFactor = pixelShiftSmooth->getValue(); - pp->raw.bayersensor.pixelShiftLmmse = pixelShiftLmmse->getLastActive (); pp->raw.bayersensor.pixelShiftEqualBright = pixelShiftEqualBright->getLastActive (); pp->raw.bayersensor.pixelShiftEqualBrightChannel = pixelShiftEqualBrightChannel->getLastActive (); pp->raw.bayersensor.pixelShiftNonGreenCross = pixelShiftNonGreenCross->getLastActive (); @@ -368,6 +386,11 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe pp->raw.bayersensor.imageNum = currentRow; } + currentRow = pixelShiftDemosaicMethod->get_active_row_number(); + if( currentRow >= 0 && currentRow < std::numeric_limits::max()) { + pp->raw.bayersensor.pixelShiftDemosaicMethod = procparams::RAWParams::BayerSensor::getPSDemosaicMethodString(RAWParams::BayerSensor::PSDemosaicMethod(currentRow)); + } + if (pedited) { pedited->raw.bayersensor.ccSteps = ccSteps->getEditedState (); @@ -379,6 +402,7 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe pedited->raw.bayersensor.lmmseIterations = lmmseIterations->getEditedState (); pedited->raw.bayersensor.dualDemosaicContrast = dualDemosaicContrast->getEditedState (); pedited->raw.bayersensor.pixelShiftMotionCorrectionMethod = pixelShiftMotionMethod->get_active_text() != M("GENERAL_UNCHANGED"); + pedited->raw.bayersensor.pixelShiftDemosaicMethod = pixelShiftDemosaicMethod->get_active_row_number() != std::numeric_limits::max(); pedited->raw.bayersensor.pixelShiftEperIso = pixelShiftEperIso->getEditedState (); pedited->raw.bayersensor.pixelShiftSigma = pixelShiftSigma->getEditedState (); pedited->raw.bayersensor.pixelShiftShowMotion = !pixelShiftShowMotion->get_inconsistent(); @@ -388,7 +412,6 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe pedited->raw.bayersensor.pixelShiftGreen = !pixelShiftGreen->get_inconsistent(); pedited->raw.bayersensor.pixelShiftBlur = !pixelShiftBlur->get_inconsistent(); pedited->raw.bayersensor.pixelShiftSmooth = pixelShiftSmooth->getEditedState(); - pedited->raw.bayersensor.pixelShiftLmmse = !pixelShiftLmmse->get_inconsistent(); pedited->raw.bayersensor.pixelShiftEqualBright = !pixelShiftEqualBright->get_inconsistent(); pedited->raw.bayersensor.pixelShiftEqualBrightChannel = !pixelShiftEqualBrightChannel->get_inconsistent(); pedited->raw.bayersensor.pixelShiftNonGreenCross = !pixelShiftNonGreenCross->get_inconsistent(); @@ -423,6 +446,8 @@ void BayerProcess::setBatchMode(bool batchMode) method->set_active(std::numeric_limits::max()); // No name pixelShiftMotionMethod->append (M("GENERAL_UNCHANGED")); pixelShiftMotionMethod->set_active_text (M("GENERAL_UNCHANGED")); + pixelShiftDemosaicMethod->append (M("GENERAL_UNCHANGED")); + pixelShiftDemosaicMethod->set_active(std::numeric_limits::max()); // No name imageNumber->append (M("GENERAL_UNCHANGED")); imageNumber->set_active_text (M("GENERAL_UNCHANGED")); ToolPanel::setBatchMode (batchMode); @@ -535,6 +560,19 @@ void BayerProcess::methodChanged () } } +void BayerProcess::pixelShiftDemosaicMethodChanged () +{ + + if (listener) { + const int curSelection = pixelShiftDemosaicMethod->get_active_row_number(); + if (curSelection >= 0 && curSelection < std::numeric_limits::max()) { + const RAWParams::BayerSensor::PSDemosaicMethod method = RAWParams::BayerSensor::PSDemosaicMethod(curSelection); + Glib::ustring methodName = procparams::RAWParams::BayerSensor::getPSDemosaicMethodString(method);; + listener->panelChanged (EvDemosaicPixelshiftDemosaicMethod, methodName); + } + } +} + void BayerProcess::imageNumberChanged () { if (listener) { @@ -579,10 +617,6 @@ void BayerProcess::checkBoxToggled (CheckBox* c, CheckValue newval) if (listener) { listener->panelChanged (EvPixelShiftBlur, pixelShiftBlur->getValueAsStr ()); } - } else if (c == pixelShiftLmmse) { - if (listener) { - listener->panelChanged (EvPixelShiftLmmse, pixelShiftLmmse->getValueAsStr ()); - } } else if (c == pixelShiftEqualBright) { if (!batchMode) { pixelShiftEqualBrightChannel->set_sensitive(newval != CheckValue::off); diff --git a/rtgui/bayerprocess.h b/rtgui/bayerprocess.h index ee532f27c..bfcb99878 100644 --- a/rtgui/bayerprocess.h +++ b/rtgui/bayerprocess.h @@ -42,6 +42,7 @@ protected: Gtk::VBox *pixelShiftFrame; Gtk::VBox *pixelShiftOptions; MyComboBoxText* pixelShiftMotionMethod; + MyComboBoxText* pixelShiftDemosaicMethod; CheckBox* pixelShiftShowMotion; CheckBox* pixelShiftShowMotionMaskOnly; CheckBox* pixelShiftNonGreenCross; @@ -49,7 +50,6 @@ protected: CheckBox* pixelShiftBlur; CheckBox* pixelShiftHoleFill; CheckBox* pixelShiftMedian; - CheckBox* pixelShiftLmmse; CheckBox* pixelShiftEqualBright; CheckBox* pixelShiftEqualBrightChannel; Adjuster* pixelShiftSmooth; @@ -61,6 +61,7 @@ protected: IdleRegister idle_register; rtengine::ProcEvent EvDemosaicContrast; + rtengine::ProcEvent EvDemosaicPixelshiftDemosaicMethod; public: BayerProcess (); @@ -77,6 +78,7 @@ public: void adjusterChanged(Adjuster* a, double newval); void checkBoxToggled(CheckBox* c, CheckValue newval); void pixelShiftMotionMethodChanged(); + void pixelShiftDemosaicMethodChanged(); void FrameCountChanged(int n, int frameNum); }; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index bf5a63fa8..9e6d3b6e7 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -414,10 +414,10 @@ void ParamsEdited::set (bool v) raw.bayersensor.pixelShiftGreen = v; raw.bayersensor.pixelShiftBlur = v; raw.bayersensor.pixelShiftSmooth = v; - raw.bayersensor.pixelShiftLmmse = v; raw.bayersensor.pixelShiftEqualBright = v; raw.bayersensor.pixelShiftEqualBrightChannel = v; raw.bayersensor.pixelShiftNonGreenCross = v; + raw.bayersensor.pixelShiftDemosaicMethod = v; raw.bayersensor.greenEq = v; raw.bayersensor.linenoise = v; raw.bayersensor.linenoiseDirection = v; @@ -964,10 +964,10 @@ void ParamsEdited::initFrom (const std::vector raw.bayersensor.pixelShiftGreen = raw.bayersensor.pixelShiftGreen && p.raw.bayersensor.pixelShiftGreen == other.raw.bayersensor.pixelShiftGreen; raw.bayersensor.pixelShiftBlur = raw.bayersensor.pixelShiftBlur && p.raw.bayersensor.pixelShiftBlur == other.raw.bayersensor.pixelShiftBlur; raw.bayersensor.pixelShiftSmooth = raw.bayersensor.pixelShiftSmooth && p.raw.bayersensor.pixelShiftSmoothFactor == other.raw.bayersensor.pixelShiftSmoothFactor; - raw.bayersensor.pixelShiftLmmse = raw.bayersensor.pixelShiftLmmse && p.raw.bayersensor.pixelShiftLmmse == other.raw.bayersensor.pixelShiftLmmse; raw.bayersensor.pixelShiftEqualBright = raw.bayersensor.pixelShiftEqualBright && p.raw.bayersensor.pixelShiftEqualBright == other.raw.bayersensor.pixelShiftEqualBright; raw.bayersensor.pixelShiftEqualBrightChannel = raw.bayersensor.pixelShiftEqualBrightChannel && p.raw.bayersensor.pixelShiftEqualBrightChannel == other.raw.bayersensor.pixelShiftEqualBrightChannel; raw.bayersensor.pixelShiftNonGreenCross = raw.bayersensor.pixelShiftNonGreenCross && p.raw.bayersensor.pixelShiftNonGreenCross == other.raw.bayersensor.pixelShiftNonGreenCross; + raw.bayersensor.pixelShiftDemosaicMethod = raw.bayersensor.pixelShiftDemosaicMethod && p.raw.bayersensor.pixelShiftDemosaicMethod == other.raw.bayersensor.pixelShiftDemosaicMethod; raw.bayersensor.greenEq = raw.bayersensor.greenEq && p.raw.bayersensor.greenthresh == other.raw.bayersensor.greenthresh; raw.bayersensor.linenoise = raw.bayersensor.linenoise && p.raw.bayersensor.linenoise == other.raw.bayersensor.linenoise; raw.bayersensor.linenoiseDirection = raw.bayersensor.linenoiseDirection && p.raw.bayersensor.linenoiseDirection == other.raw.bayersensor.linenoiseDirection; @@ -2542,10 +2542,6 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten toEdit.raw.bayersensor.pixelShiftSmoothFactor = mods.raw.bayersensor.pixelShiftSmoothFactor; } - if (raw.bayersensor.pixelShiftLmmse) { - toEdit.raw.bayersensor.pixelShiftLmmse = mods.raw.bayersensor.pixelShiftLmmse; - } - if (raw.bayersensor.pixelShiftEqualBright) { toEdit.raw.bayersensor.pixelShiftEqualBright = mods.raw.bayersensor.pixelShiftEqualBright; } @@ -2558,6 +2554,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten toEdit.raw.bayersensor.pixelShiftNonGreenCross = mods.raw.bayersensor.pixelShiftNonGreenCross; } + if (raw.bayersensor.pixelShiftDemosaicMethod) { + toEdit.raw.bayersensor.pixelShiftDemosaicMethod = mods.raw.bayersensor.pixelShiftDemosaicMethod; + } + if (raw.bayersensor.greenEq) { toEdit.raw.bayersensor.greenthresh = dontforceSet && options.baBehav[ADDSET_PREPROCESS_GREENEQUIL] ? toEdit.raw.bayersensor.greenthresh + mods.raw.bayersensor.greenthresh : mods.raw.bayersensor.greenthresh; } @@ -3080,7 +3080,7 @@ bool RAWParamsEdited::BayerSensor::isUnchanged() const { return method && imageNum && dcbIterations && dcbEnhance && lmmseIterations && dualDemosaicContrast /*&& allEnhance*/ && greenEq && pixelShiftMotionCorrectionMethod && pixelShiftEperIso && pixelShiftSigma && pixelShiftShowMotion && pixelShiftShowMotionMaskOnly - && pixelShiftHoleFill && pixelShiftMedian && pixelShiftNonGreenCross && pixelShiftGreen && pixelShiftBlur && pixelShiftSmooth && pixelShiftLmmse && pixelShiftEqualBright && pixelShiftEqualBrightChannel + && pixelShiftHoleFill && pixelShiftMedian && pixelShiftNonGreenCross && pixelShiftDemosaicMethod && pixelShiftGreen && pixelShiftBlur && pixelShiftSmooth && pixelShiftEqualBright && pixelShiftEqualBrightChannel && linenoise && linenoiseDirection && pdafLinesFilter && exBlack0 && exBlack1 && exBlack2 && exBlack3 && exTwoGreen; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 5b3370b9a..1db298dfd 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -742,10 +742,10 @@ public: bool pixelShiftGreen; bool pixelShiftBlur; bool pixelShiftSmooth; - bool pixelShiftLmmse; bool pixelShiftEqualBright; bool pixelShiftEqualBrightChannel; bool pixelShiftNonGreenCross; + bool pixelShiftDemosaicMethod; //bool allEnhance; bool greenEq; diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc index c9ed1cd14..99411e46c 100644 --- a/rtgui/partialpastedlg.cc +++ b/rtgui/partialpastedlg.cc @@ -852,7 +852,7 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param filterPE.raw.bayersensor.pixelShiftEqualBrightChannel = falsePE.raw.bayersensor.pixelShiftEqualBrightChannel; filterPE.raw.bayersensor.pixelShiftGreen = falsePE.raw.bayersensor.pixelShiftGreen; filterPE.raw.bayersensor.pixelShiftHoleFill = falsePE.raw.bayersensor.pixelShiftHoleFill; - filterPE.raw.bayersensor.pixelShiftLmmse = falsePE.raw.bayersensor.pixelShiftLmmse; + filterPE.raw.bayersensor.pixelShiftDemosaicMethod = falsePE.raw.bayersensor.pixelShiftDemosaicMethod; filterPE.raw.bayersensor.pixelShiftMedian = falsePE.raw.bayersensor.pixelShiftMedian; filterPE.raw.bayersensor.pixelShiftMotionCorrectionMethod = falsePE.raw.bayersensor.pixelShiftMotionCorrectionMethod; filterPE.raw.bayersensor.pixelShiftNonGreenCross = falsePE.raw.bayersensor.pixelShiftNonGreenCross; diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index 2b6bc49de..1fb34ca0a 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,11 +1,13 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 335 +#define PPVERSION 336 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* Log of version changes + 336 2018-06-01 + new demosaic method combobox for pixelshift 335 2018-05-30 new contrast adjuster in Bayer process tool 334 2018-05-13 From 8f167c945a4a44c64cfef04f696b9c13282777f7 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Fri, 1 Jun 2018 20:48:17 +0200 Subject: [PATCH 39/85] Removed accidently committed file --- rtengine/demosaic_algos.cc.save-failed | 3861 ------------------------ 1 file changed, 3861 deletions(-) delete mode 100644 rtengine/demosaic_algos.cc.save-failed diff --git a/rtengine/demosaic_algos.cc.save-failed b/rtengine/demosaic_algos.cc.save-failed deleted file mode 100644 index 29ee67332..000000000 --- a/rtengine/demosaic_algos.cc.save-failed +++ /dev/null @@ -1,3861 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * RawTherapee is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * RawTherapee is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with RawTherapee. If not, see . - */ -#include -#include - -#include "rawimagesource.h" -#include "rawimagesource_i.h" -#include "jaggedarray.h" -#include "rawimage.h" -#include "mytime.h" -#include "iccmatrices.h" -#include "iccstore.h" -#include "image8.h" -#include "curves.h" -#include "dfmanager.h" -#include "slicer.h" -#include "rt_math.h" -#include "color.h" -#include "../rtgui/multilangmgr.h" -#include "procparams.h" -#include "sleef.c" -#include "opthelper.h" -#include "median.h" -#include "StopWatch.h" -#ifdef _OPENMP -#include -#endif - -using namespace std; - -namespace rtengine -{ -#undef ABS -#undef DIST - -#define ABS(a) ((a)<0?-(a):(a)) -#define DIST(a,b) (ABS(a-b)) -#define CLIREF(x) LIM(x,-200000.0f,200000.0f) // avoid overflow : do not act directly on image[] or pix[] -#define x1125(a) (a + xdivf(a, 3)) -#define x0875(a) (a - xdivf(a, 3)) -#define x0250(a) xdivf(a, 2) -#define x00625(a) xdivf(a, 4) -#define x0125(a) xdivf(a, 3) - -extern const Settings* settings; -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void RawImageSource::eahd_demosaic () -{ - if (plistener) { - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::EAHD))); - plistener->setProgress (0.0); - } - - // prepare cache and constants for cielab conversion - //TODO: revisit after conversion to D50 illuminant - lc00 = (0.412453 * imatrices.rgb_cam[0][0] + 0.357580 * imatrices.rgb_cam[0][1] + 0.180423 * imatrices.rgb_cam[0][2]) ;// / 0.950456; - lc01 = (0.412453 * imatrices.rgb_cam[1][0] + 0.357580 * imatrices.rgb_cam[1][1] + 0.180423 * imatrices.rgb_cam[1][2]) ;// / 0.950456; - lc02 = (0.412453 * imatrices.rgb_cam[2][0] + 0.357580 * imatrices.rgb_cam[2][1] + 0.180423 * imatrices.rgb_cam[2][2]) ;// / 0.950456; - - lc10 = 0.212671 * imatrices.rgb_cam[0][0] + 0.715160 * imatrices.rgb_cam[0][1] + 0.072169 * imatrices.rgb_cam[0][2]; - lc11 = 0.212671 * imatrices.rgb_cam[1][0] + 0.715160 * imatrices.rgb_cam[1][1] + 0.072169 * imatrices.rgb_cam[1][2]; - lc12 = 0.212671 * imatrices.rgb_cam[2][0] + 0.715160 * imatrices.rgb_cam[2][1] + 0.072169 * imatrices.rgb_cam[2][2]; - - lc20 = (0.019334 * imatrices.rgb_cam[0][0] + 0.119193 * imatrices.rgb_cam[0][1] + 0.950227 * imatrices.rgb_cam[0][2]) ;// / 1.088754; - lc21 = (0.019334 * imatrices.rgb_cam[1][0] + 0.119193 * imatrices.rgb_cam[1][1] + 0.950227 * imatrices.rgb_cam[1][2]) ;// / 1.088754; - lc22 = (0.019334 * imatrices.rgb_cam[2][0] + 0.119193 * imatrices.rgb_cam[2][1] + 0.950227 * imatrices.rgb_cam[2][2]) ;// / 1.088754; - - int maxindex = 3 * 65536; //2*65536 3 = avoid crash 3/2013 J.Desmis - cache = new double[maxindex]; - threshold = (int)(0.008856 * MAXVALD); - - for (int i = 0; i < maxindex; i++) { - cache[i] = std::cbrt(double(i) / MAXVALD); - } - - // end of cielab preparation - - JaggedArray - rh (W, 3), gh (W, 4), bh (W, 3), - rv (W, 3), gv (W, 4), bv (W, 3), - lLh (W, 3), lah (W, 3), lbh (W, 3), - lLv (W, 3), lav (W, 3), lbv (W, 3), - homh (W, 3), homv (W, 3); - - // interpolate first two lines - interpolate_row_g (gh[0], gv[0], 0); - interpolate_row_g (gh[1], gv[1], 1); - interpolate_row_g (gh[2], gv[2], 2); - interpolate_row_rb (rh[0], bh[0], nullptr, gh[0], gh[1], 0); - interpolate_row_rb (rv[0], bv[0], nullptr, gv[0], gv[1], 0); - interpolate_row_rb (rh[1], bh[1], gh[0], gh[1], gh[2], 1); - interpolate_row_rb (rv[1], bv[1], gv[0], gv[1], gv[2], 1); - - convert_to_cielab_row (rh[0], gh[0], bh[0], lLh[0], lah[0], lbh[0]); - convert_to_cielab_row (rv[0], gv[0], bv[0], lLv[0], lav[0], lbv[0]); - convert_to_cielab_row (rh[1], gh[1], bh[1], lLh[1], lah[1], lbh[1]); - convert_to_cielab_row (rv[1], gv[1], bv[1], lLv[1], lav[1], lbv[1]); - - for (int j = 0; j < W; j++) { - homh[0][j] = 0; - homv[0][j] = 0; - homh[1][j] = 0; - homv[1][j] = 0; - } - - int dLmaph[9]; - int dLmapv[9]; - int dCamaph[9]; - int dCamapv[9]; - int dCbmaph[9]; - int dCbmapv[9]; - - for (int i = 1; i < H - 1; i++) { - int ix = i % 3; - int imx = (i - 1) % 3; - int ipx = (i + 1) % 3; - - if (i < H - 2) { - interpolate_row_g (gh[(i + 2) % 4], gv[(i + 2) % 4], i + 2); - interpolate_row_rb (rh[(i + 1) % 3], bh[(i + 1) % 3], gh[i % 4], gh[(i + 1) % 4], gh[(i + 2) % 4], i + 1); - interpolate_row_rb (rv[(i + 1) % 3], bv[(i + 1) % 3], gv[i % 4], gv[(i + 1) % 4], gv[(i + 2) % 4], i + 1); - } else { - interpolate_row_rb (rh[(i + 1) % 3], bh[(i + 1) % 3], gh[i % 4], gh[(i + 1) % 4], nullptr, i + 1); - interpolate_row_rb (rv[(i + 1) % 3], bv[(i + 1) % 3], gv[i % 4], gv[(i + 1) % 4], nullptr, i + 1); - } - - convert_to_cielab_row (rh[(i + 1) % 3], gh[(i + 1) % 4], bh[(i + 1) % 3], lLh[(i + 1) % 3], lah[(i + 1) % 3], lbh[(i + 1) % 3]); - convert_to_cielab_row (rv[(i + 1) % 3], gv[(i + 1) % 4], bv[(i + 1) % 3], lLv[(i + 1) % 3], lav[(i + 1) % 3], lbv[(i + 1) % 3]); - - for (int j = 0; j < W; j++) { - homh[ipx][j] = 0; - homv[ipx][j] = 0; - } - - int sh, sv, idx; - - for (int j = 1; j < W - 1; j++) { - int dmi = 0; - - for (int x = -1; x <= 1; x++) { - idx = (i + x) % 3; - - for (int y = -1; y <= 1; y++) { - // compute distance in a, b, and L - if (dmi < 4) { - sh = homh[idx][j + y]; - sv = homv[idx][j + y]; - - if (sh > sv) { // fixate horizontal pixel - dLmaph[dmi] = DIST(lLh[ix][j], lLh[idx][j + y]); - dCamaph[dmi] = DIST(lah[ix][j], lah[idx][j + y]); - dCbmaph[dmi] = DIST(lbh[ix][j], lbh[idx][j + y]); - dLmapv[dmi] = DIST(lLv[ix][j], lLh[idx][j + y]); - dCamapv[dmi] = DIST(lav[ix][j], lah[idx][j + y]); - dCbmapv[dmi] = DIST(lbv[ix][j], lbh[idx][j + y]); - } else if (sh < sv) { - dLmaph[dmi] = DIST(lLh[ix][j], lLv[idx][j + y]); - dCamaph[dmi] = DIST(lah[ix][j], lav[idx][j + y]); - dCbmaph[dmi] = DIST(lbh[ix][j], lbv[idx][j + y]); - dLmapv[dmi] = DIST(lLv[ix][j], lLv[idx][j + y]); - dCamapv[dmi] = DIST(lav[ix][j], lav[idx][j + y]); - dCbmapv[dmi] = DIST(lbv[ix][j], lbv[idx][j + y]); - } else { - dLmaph[dmi] = DIST(lLh[ix][j], lLh[idx][j + y]); - dCamaph[dmi] = DIST(lah[ix][j], lah[idx][j + y]); - dCbmaph[dmi] = DIST(lbh[ix][j], lbh[idx][j + y]); - dLmapv[dmi] = DIST(lLv[ix][j], lLv[idx][j + y]); - dCamapv[dmi] = DIST(lav[ix][j], lav[idx][j + y]); - dCbmapv[dmi] = DIST(lbv[ix][j], lbv[idx][j + y]); - } - } else { - dLmaph[dmi] = DIST(lLh[ix][j], lLh[idx][j + y]); - dCamaph[dmi] = DIST(lah[ix][j], lah[idx][j + y]); - dCbmaph[dmi] = DIST(lbh[ix][j], lbh[idx][j + y]); - dLmapv[dmi] = DIST(lLv[ix][j], lLv[idx][j + y]); - dCamapv[dmi] = DIST(lav[ix][j], lav[idx][j + y]); - dCbmapv[dmi] = DIST(lbv[ix][j], lbv[idx][j + y]); - } - - dmi++; - } - } - - // compute eL & eC - int eL = min(max(dLmaph[3], dLmaph[5]), max(dLmapv[1], dLmapv[7])); - int eCa = min(max(dCamaph[3], dCamaph[5]), max(dCamapv[1], dCamapv[7])); - int eCb = min(max(dCbmaph[3], dCbmaph[5]), max(dCbmapv[1], dCbmapv[7])); - - int wh = 0; - - for (int dmi = 0; dmi < 9; dmi++) - if (dLmaph[dmi] <= eL && dCamaph[dmi] <= eCa && dCbmaph[dmi] <= eCb) { - wh++; - } - - int wv = 0; - - for (int dmi = 0; dmi < 9; dmi++) - if (dLmapv[dmi] <= eL && dCamapv[dmi] <= eCa && dCbmapv[dmi] <= eCb) { - wv++; - } - - homh[imx][j - 1] += wh; - homh[imx][j] += wh; - homh[imx][j + 1] += wh; - homh[ix][j - 1] += wh; - homh[ix][j] += wh; - homh[ix][j + 1] += wh; - homh[ipx][j - 1] += wh; - homh[ipx][j] += wh; - homh[ipx][j + 1] += wh; - - homv[imx][j - 1] += wv; - homv[imx][j] += wv; - homv[imx][j + 1] += wv; - homv[ix][j - 1] += wv; - homv[ix][j] += wv; - homv[ix][j + 1] += wv; - homv[ipx][j - 1] += wv; - homv[ipx][j] += wv; - homv[ipx][j + 1] += wv; - } - -//} - // finalize image - int hc, vc; - - for (int j = 0; j < W; j++) { - if (ri->ISGREEN(i - 1, j)) { - green[i - 1][j] = rawData[i - 1][j]; - } else { - hc = homh[imx][j]; - vc = homv[imx][j]; - - if (hc > vc) { - green[i - 1][j] = gh[(i - 1) % 4][j]; - } else if (hc < vc) { - green[i - 1][j] = gv[(i - 1) % 4][j]; - } else { - green[i - 1][j] = (gh[(i - 1) % 4][j] + gv[(i - 1) % 4][j]) / 2; - } - } - } - - if (!(i % 20) && plistener) { - plistener->setProgress ((double)i / (H - 2)); - } - } - - // finish H-2th and H-1th row, homogenity value is still valailable - int hc, vc; - - for (int i = H - 1; i < H + 1; i++) - for (int j = 0; j < W; j++) { - hc = homh[(i - 1) % 3][j]; - vc = homv[(i - 1) % 3][j]; - - if (hc > vc) { - green[i - 1][j] = gh[(i - 1) % 4][j]; - } else if (hc < vc) { - green[i - 1][j] = gv[(i - 1) % 4][j]; - } else { - green[i - 1][j] = (gh[(i - 1) % 4][j] + gv[(i - 1) % 4][j]) / 2; - } - } - - // Interpolate R and B - for (int i = 0; i < H; i++) { - if (i == 0) { - interpolate_row_rb_mul_pp (red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); - } else if (i == H - 1) { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); - } else { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); - } - } -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void RawImageSource::hphd_vertical (float** hpmap, int col_from, int col_to) -{ - float* temp = new float[max(W, H)]; - float* avg = new float[max(W, H)]; - float* dev = new float[max(W, H)]; - - memset (temp, 0, max(W, H)*sizeof(float)); - memset (avg, 0, max(W, H)*sizeof(float)); - memset (dev, 0, max(W, H)*sizeof(float)); - - for (int k = col_from; k < col_to; k++) { - for (int i = 5; i < H - 5; i++) { - temp[i] = (rawData[i - 5][k] - 8 * rawData[i - 4][k] + 27 * rawData[i - 3][k] - 48 * rawData[i - 2][k] + 42 * rawData[i - 1][k] - - (rawData[i + 5][k] - 8 * rawData[i + 4][k] + 27 * rawData[i + 3][k] - 48 * rawData[i + 2][k] + 42 * rawData[i + 1][k])) / 100.0; - temp[i] = ABS(temp[i]); - } - - for (int j = 4; j < H - 4; j++) { - float avgL = (temp[j - 4] + temp[j - 3] + temp[j - 2] + temp[j - 1] + temp[j] + temp[j + 1] + temp[j + 2] + temp[j + 3] + temp[j + 4]) / 9.0; - avg[j] = avgL; - float devL = ((temp[j - 4] - avgL) * (temp[j - 4] - avgL) + (temp[j - 3] - avgL) * (temp[j - 3] - avgL) + (temp[j - 2] - avgL) * (temp[j - 2] - avgL) + (temp[j - 1] - avgL) * (temp[j - 1] - avgL) + (temp[j] - avgL) * (temp[j] - avgL) + (temp[j + 1] - avgL) * (temp[j + 1] - avgL) + (temp[j + 2] - avgL) * (temp[j + 2] - avgL) + (temp[j + 3] - avgL) * (temp[j + 3] - avgL) + (temp[j + 4] - avgL) * (temp[j + 4] - avgL)) / 9.0; - - if (devL < 0.001) { - devL = 0.001; - } - - dev[j] = devL; - } - - for (int j = 5; j < H - 5; j++) { - float avgL = avg[j - 1]; - float avgR = avg[j + 1]; - float devL = dev[j - 1]; - float devR = dev[j + 1]; - hpmap[j][k] = avgL + (avgR - avgL) * devL / (devL + devR); - } - } - - delete [] temp; - delete [] avg; - delete [] dev; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void RawImageSource::hphd_horizontal (float** hpmap, int row_from, int row_to) -{ - float* temp = new float[max(W, H)]; - float* avg = new float[max(W, H)]; - float* dev = new float[max(W, H)]; - - memset (temp, 0, max(W, H)*sizeof(float)); - memset (avg, 0, max(W, H)*sizeof(float)); - memset (dev, 0, max(W, H)*sizeof(float)); - - for (int i = row_from; i < row_to; i++) { - for (int j = 5; j < W - 5; j++) { - temp[j] = (rawData[i][j - 5] - 8 * rawData[i][j - 4] + 27 * rawData[i][j - 3] - 48 * rawData[i][j - 2] + 42 * rawData[i][j - 1] - - (rawData[i][j + 5] - 8 * rawData[i][j + 4] + 27 * rawData[i][j + 3] - 48 * rawData[i][j + 2] + 42 * rawData[i][j + 1])) / 100; - temp[j] = ABS(temp[j]); - } - - for (int j = 4; j < W - 4; j++) { - float avgL = (temp[j - 4] + temp[j - 3] + temp[j - 2] + temp[j - 1] + temp[j] + temp[j + 1] + temp[j + 2] + temp[j + 3] + temp[j + 4]) / 9.0; - avg[j] = avgL; - float devL = ((temp[j - 4] - avgL) * (temp[j - 4] - avgL) + (temp[j - 3] - avgL) * (temp[j - 3] - avgL) + (temp[j - 2] - avgL) * (temp[j - 2] - avgL) + (temp[j - 1] - avgL) * (temp[j - 1] - avgL) + (temp[j] - avgL) * (temp[j] - avgL) + (temp[j + 1] - avgL) * (temp[j + 1] - avgL) + (temp[j + 2] - avgL) * (temp[j + 2] - avgL) + (temp[j + 3] - avgL) * (temp[j + 3] - avgL) + (temp[j + 4] - avgL) * (temp[j + 4] - avgL)) / 9.0; - - if (devL < 0.001) { - devL = 0.001; - } - - dev[j] = devL; - } - - for (int j = 5; j < W - 5; j++) { - float avgL = avg[j - 1]; - float avgR = avg[j + 1]; - float devL = dev[j - 1]; - float devR = dev[j + 1]; - float hpv = avgL + (avgR - avgL) * devL / (devL + devR); - - if (hpmap[i][j] < 0.8 * hpv) { - hpmap[i][j] = 2; - } else if (hpv < 0.8 * hpmap[i][j]) { - hpmap[i][j] = 1; - } else { - hpmap[i][j] = 0; - } - } - } - - delete [] temp; - delete [] avg; - delete [] dev; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void RawImageSource::hphd_green (float** hpmap) -{ -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int i = 3; i < H - 3; i++) { - for (int j = 3; j < W - 3; j++) { - if (ri->ISGREEN(i, j)) { - green[i][j] = rawData[i][j]; - } else { - if (hpmap[i][j] == 1) { - int g2 = rawData[i][j + 1] + ((rawData[i][j] - rawData[i][j + 2]) / 2); - int g4 = rawData[i][j - 1] + ((rawData[i][j] - rawData[i][j - 2]) / 2); - - int dx = rawData[i][j + 1] - rawData[i][j - 1]; - int d1 = rawData[i][j + 3] - rawData[i][j + 1]; - int d2 = rawData[i][j + 2] - rawData[i][j]; - int d3 = (rawData[i - 1][j + 2] - rawData[i - 1][j]) / 2; - int d4 = (rawData[i + 1][j + 2] - rawData[i + 1][j]) / 2; - - double e2 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); - - d1 = rawData[i][j - 3] - rawData[i][j - 1]; - d2 = rawData[i][j - 2] - rawData[i][j]; - d3 = (rawData[i - 1][j - 2] - rawData[i - 1][j]) / 2; - d4 = (rawData[i + 1][j - 2] - rawData[i + 1][j]) / 2; - - double e4 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); - - green[i][j] = (e2 * g2 + e4 * g4) / (e2 + e4); - } else if (hpmap[i][j] == 2) { - int g1 = rawData[i - 1][j] + ((rawData[i][j] - rawData[i - 2][j]) / 2); - int g3 = rawData[i + 1][j] + ((rawData[i][j] - rawData[i + 2][j]) / 2); - - int dy = rawData[i + 1][j] - rawData[i - 1][j]; - int d1 = rawData[i - 1][j] - rawData[i - 3][j]; - int d2 = rawData[i][j] - rawData[i - 2][j]; - int d3 = (rawData[i][j - 1] - rawData[i - 2][j - 1]) / 2; - int d4 = (rawData[i][j + 1] - rawData[i - 2][j + 1]) / 2; - - double e1 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); - - d1 = rawData[i + 1][j] - rawData[i + 3][j]; - d2 = rawData[i][j] - rawData[i + 2][j]; - d3 = (rawData[i][j - 1] - rawData[i + 2][j - 1]) / 2; - d4 = (rawData[i][j + 1] - rawData[i + 2][j + 1]) / 2; - - double e3 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); - - green[i][j] = (e1 * g1 + e3 * g3) / (e1 + e3); - } else { - int g1 = rawData[i - 1][j] + ((rawData[i][j] - rawData[i - 2][j]) / 2); - int g2 = rawData[i][j + 1] + ((rawData[i][j] - rawData[i][j + 2]) / 2); - int g3 = rawData[i + 1][j] + ((rawData[i][j] - rawData[i + 2][j]) / 2); - int g4 = rawData[i][j - 1] + ((rawData[i][j] - rawData[i][j - 2]) / 2); - - int dx = rawData[i][j + 1] - rawData[i][j - 1]; - int dy = rawData[i + 1][j] - rawData[i - 1][j]; - - int d1 = rawData[i - 1][j] - rawData[i - 3][j]; - int d2 = rawData[i][j] - rawData[i - 2][j]; - int d3 = (rawData[i][j - 1] - rawData[i - 2][j - 1]) / 2; - int d4 = (rawData[i][j + 1] - rawData[i - 2][j + 1]) / 2; - - double e1 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); - - d1 = rawData[i][j + 3] - rawData[i][j + 1]; - d2 = rawData[i][j + 2] - rawData[i][j]; - d3 = (rawData[i - 1][j + 2] - rawData[i - 1][j]) / 2; - d4 = (rawData[i + 1][j + 2] - rawData[i + 1][j]) / 2; - - double e2 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); - - d1 = rawData[i + 1][j] - rawData[i + 3][j]; - d2 = rawData[i][j] - rawData[i + 2][j]; - d3 = (rawData[i][j - 1] - rawData[i + 2][j - 1]) / 2; - d4 = (rawData[i][j + 1] - rawData[i + 2][j + 1]) / 2; - - double e3 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); - - d1 = rawData[i][j - 3] - rawData[i][j - 1]; - d2 = rawData[i][j - 2] - rawData[i][j]; - d3 = (rawData[i - 1][j - 2] - rawData[i - 1][j]) / 2; - d4 = (rawData[i + 1][j - 2] - rawData[i + 1][j]) / 2; - - double e4 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); - - green[i][j] = (e1 * g1 + e2 * g2 + e3 * g3 + e4 * g4) / (e1 + e2 + e3 + e4); - } - } - } - } -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void RawImageSource::hphd_demosaic () -{ - if (plistener) { - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD))); - plistener->setProgress (0.0); - } - - JaggedArray hpmap (W, H, true); - -#ifdef _OPENMP - #pragma omp parallel - { - int tid = omp_get_thread_num(); - int nthreads = omp_get_num_threads(); - int blk = W / nthreads; - - if (tid < nthreads - 1) { - hphd_vertical (hpmap, tid * blk, (tid + 1)*blk); - } else { - hphd_vertical (hpmap, tid * blk, W); - } - } -#else - hphd_vertical (hpmap, 0, W); -#endif - - if (plistener) { - plistener->setProgress (0.33); - } - -#ifdef _OPENMP - #pragma omp parallel - { - int tid = omp_get_thread_num(); - int nthreads = omp_get_num_threads(); - int blk = H / nthreads; - - if (tid < nthreads - 1) { - hphd_horizontal (hpmap, tid * blk, (tid + 1)*blk); - } else { - hphd_horizontal (hpmap, tid * blk, H); - } - } -#else - hphd_horizontal (hpmap, 0, H); -#endif - - hphd_green (hpmap); - - if (plistener) { - plistener->setProgress (0.66); - } - - for (int i = 0; i < H; i++) { - if (i == 0) { - interpolate_row_rb_mul_pp (red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); - } else if (i == H - 1) { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); - } else { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); - } - } - - if (plistener) { - plistener->setProgress (1.0); - } -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#define fc(row,col) (prefilters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) -typedef unsigned short ushort; -void RawImageSource::vng4_demosaic () -{ - const signed short int *cp, terms[] = { - -2, -2, +0, -1, 0, 0x01, -2, -2, +0, +0, 1, 0x01, -2, -1, -1, +0, 0, 0x01, - -2, -1, +0, -1, 0, 0x02, -2, -1, +0, +0, 0, 0x03, -2, -1, +0, +1, 1, 0x01, - -2, +0, +0, -1, 0, 0x06, -2, +0, +0, +0, 1, 0x02, -2, +0, +0, +1, 0, 0x03, - -2, +1, -1, +0, 0, 0x04, -2, +1, +0, -1, 1, 0x04, -2, +1, +0, +0, 0, 0x06, - -2, +1, +0, +1, 0, 0x02, -2, +2, +0, +0, 1, 0x04, -2, +2, +0, +1, 0, 0x04, - -1, -2, -1, +0, 0, 0x80, -1, -2, +0, -1, 0, 0x01, -1, -2, +1, -1, 0, 0x01, - -1, -2, +1, +0, 1, 0x01, -1, -1, -1, +1, 0, 0x88, -1, -1, +1, -2, 0, 0x40, - -1, -1, +1, -1, 0, 0x22, -1, -1, +1, +0, 0, 0x33, -1, -1, +1, +1, 1, 0x11, - -1, +0, -1, +2, 0, 0x08, -1, +0, +0, -1, 0, 0x44, -1, +0, +0, +1, 0, 0x11, - -1, +0, +1, -2, 1, 0x40, -1, +0, +1, -1, 0, 0x66, -1, +0, +1, +0, 1, 0x22, - -1, +0, +1, +1, 0, 0x33, -1, +0, +1, +2, 1, 0x10, -1, +1, +1, -1, 1, 0x44, - -1, +1, +1, +0, 0, 0x66, -1, +1, +1, +1, 0, 0x22, -1, +1, +1, +2, 0, 0x10, - -1, +2, +0, +1, 0, 0x04, -1, +2, +1, +0, 1, 0x04, -1, +2, +1, +1, 0, 0x04, - +0, -2, +0, +0, 1, 0x80, +0, -1, +0, +1, 1, 0x88, +0, -1, +1, -2, 0, 0x40, - +0, -1, +1, +0, 0, 0x11, +0, -1, +2, -2, 0, 0x40, +0, -1, +2, -1, 0, 0x20, - +0, -1, +2, +0, 0, 0x30, +0, -1, +2, +1, 1, 0x10, +0, +0, +0, +2, 1, 0x08, - +0, +0, +2, -2, 1, 0x40, +0, +0, +2, -1, 0, 0x60, +0, +0, +2, +0, 1, 0x20, - +0, +0, +2, +1, 0, 0x30, +0, +0, +2, +2, 1, 0x10, +0, +1, +1, +0, 0, 0x44, - +0, +1, +1, +2, 0, 0x10, +0, +1, +2, -1, 1, 0x40, +0, +1, +2, +0, 0, 0x60, - +0, +1, +2, +1, 0, 0x20, +0, +1, +2, +2, 0, 0x10, +1, -2, +1, +0, 0, 0x80, - +1, -1, +1, +1, 0, 0x88, +1, +0, +1, +2, 0, 0x08, +1, +0, +2, -1, 0, 0x40, - +1, +0, +2, +1, 0, 0x10 - }, - chood[] = { -1, -1, -1, 0, -1, +1, 0, +1, +1, +1, +1, 0, +1, -1, 0, -1 }; - - double progress = 0.0; - const bool plistenerActive = plistener; - - if (plistenerActive) { - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4))); - plistener->setProgress (progress); - } - - const unsigned prefilters = ri->prefilters; - const int width = W, height = H; - constexpr unsigned int colors = 4; - float (*image)[4]; - - image = (float (*)[4]) calloc (height * width, sizeof * image); - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int ii = 0; ii < H; ii++) - for (int jj = 0; jj < W; jj++) { - image[ii * W + jj][fc(ii, jj)] = rawData[ii][jj]; - } - - { - int lcode[16][16][32]; - float mul[16][16][8]; - float csum[16][16][4]; - -// first linear interpolation - for (int row = 0; row < 16; row++) - for (int col = 0; col < 16; col++) { - int * ip = lcode[row][col]; - int mulcount = 0; - float sum[4]; - memset (sum, 0, sizeof sum); - - for (int y = -1; y <= 1; y++) - for (int x = -1; x <= 1; x++) { - int shift = (y == 0) + (x == 0); - - if (shift == 2) { - continue; - } - - int color = fc(row + y, col + x); - *ip++ = (width * y + x) * 4 + color; - - mul[row][col][mulcount] = (1 << shift); - *ip++ = color; - sum[color] += (1 << shift); - mulcount++; - } - - int colcount = 0; - - for (unsigned int c = 0; c < colors; c++) - if (c != fc(row, col)) { - *ip++ = c; - csum[row][col][colcount] = sum[c]; - colcount ++; - } - } - -StopWatch Stop1("loop 1"); -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int row = 1; row < height - 1; row++) { - for (int col = 1; col < width - 1; col++) { - float * pix = image[row * width + col]; - int * ip = lcode[row & 15][col & 15]; - float sum[4]; - memset (sum, 0, sizeof sum); - - for (int i = 0; i < 8; i++, ip += 2) { - sum[ip[1]] += pix[ip[0]] * mul[row & 15][col & 15][i]; - } - - for (unsigned int i = 0; i < colors - 1; i++, ip++) { - pix[ip[0]] = sum[ip[0]] / csum[row & 15][col & 15][i]; - } - } - } -Stop1.stop(); - } - const int prow = 7, pcol = 1; - int *code[8][2]; - int t, g; - int * ip = (int *) calloc ((prow + 1) * (pcol + 1), 1280); - - for (int row = 0; row <= prow; row++) /* Precalculate for VNG */ - for (int col = 0; col <= pcol; col++) { - code[row][col] = ip; - - for (cp = terms, t = 0; t < 64; t++) { - int y1 = *cp++; - int x1 = *cp++; - int y2 = *cp++; - int x2 = *cp++; - int weight = *cp++; - int grads = *cp++; - unsigned int color = fc(row + y1, col + x1); - - if (fc(row + y2, col + x2) != color) { - continue; - } - - int diag = (fc(row, col + 1) == color && fc(row + 1, col) == color) ? 2 : 1; - - if (abs(y1 - y2) == diag && abs(x1 - x2) == diag) { - continue; - } - - *ip++ = (y1 * width + x1) * 4 + color; - *ip++ = (y2 * width + x2) * 4 + color; - *ip++ = weight; - - for (g = 0; g < 8; g++) - if (grads & (1 << g)) { - *ip++ = g; - } - - *ip++ = -1; - } - - *ip++ = INT_MAX; - - for (cp = chood, g = 0; g < 8; g++) { - int y = *cp++; - int x = *cp++; - *ip++ = (y * width + x) * 4; - unsigned int color = fc(row, col); - - if (fc(row + y, col + x) != color && fc(row + y * 2, col + x * 2) == color) { - *ip++ = (y * width + x) * 8 + color; - } else { - *ip++ = 0; - } - } - } - - if(plistenerActive) { - progress = 0.1; - plistener->setProgress (progress); - } - -StopWatch Stop2("loop 2"); - -#ifdef _OPENMP - #pragma omp parallel -#endif - { - float thold; - int g; - constexpr int progressStep = 64; - const double progressInc = (0.98 - progress) / ((height - 2) / progressStep); -#ifdef _OPENMP - #pragma omp for schedule(dynamic,16) nowait -#endif - - for (int row = 2; row < height - 2; row++) { /* Do VNG interpolation */ - for (int col = 2; col < width - 2; col++) { - float * pix = image[row * width + col]; - int * ip = code[row & prow][col & pcol]; - float gval[8] = {}; -// gval[0] = gval[1] = gval[2] = gval[3] = gval[4] = gval[5] = gval[6] = gval[7] = 0.f; -// memset (gval, 0, sizeof gval); - - while ((g = ip[0]) != INT_MAX) { /* Calculate gradients */ - float diff = fabsf(pix[g] - pix[ip[1]]) * (1 << ip[2]); - gval[ip[3]] += diff; - ip += 4; - - while ((g = *ip++) != -1) { - gval[g] += diff; - } - } - - ip++; - { - float gmin, gmax; - gmin = gmax = gval[0]; /* Choose a threshold */ - - for (g = 1; g < 8; g++) { - gmin = rtengine::min(gmin, gval[g]); -// if (gmin > gval[g]) { -// gmin = gval[g]; -// } - - gmax = rtengine::max(gmax, gval[g]); -// if (gmax < gval[g]) { -// gmax = gval[g]; -// } - } - - thold = gmin + (gmax / 2); - } - float sum[3] = {}; -// sum[0] = sum[1] = sum[2] = 0.f; -// memset (sum, 0, sizeof sum); - float t1, t2; - int color = fc(row, col); - t1 = t2 = pix[color]; - - if(color & 1) { - int num = 0; - - for (g = 0; g < 8; g++, ip += 2) { /* Average the neighbors */ - if (gval[g] <= thold) { - if(ip[1]) { - sum[0] += (t1 + pix[ip[1]]) * 0.5f; - } - - sum[1] += pix[ip[0] + (color ^ 2)]; - num++; - } - } - - t1 += (sum[1] - sum[0]) / num; - } else { - int num = 0; - - for (g = 0; g < 8; g++, ip += 2) { /* Average the neighbors */ - if (gval[g] <= thold) { - sum[1] += pix[ip[0] + 1]; - sum[2] += pix[ip[0] + 3]; - - if(ip[1]) { - sum[0] += (t1 + pix[ip[1]]) * 0.5f; - } - - num++; - } - } - - t1 += (sum[1] - sum[0]) / num; - t2 += (sum[2] - sum[0]) / num; - } - - green[row][col] = 0.5f * (t1 + t2); - } - - if(plistenerActive) { - if((row % progressStep) == 0) -#ifdef _OPENMP - #pragma omp critical (updateprogress) -#endif - { - progress += progressInc; - plistener->setProgress (progress); - } - } - } - - } -Stop2.stop(); - free (code[0][0]); - free (image); - - if(plistenerActive) { - plistener->setProgress (0.98); - } -StopWatch Stop3("loop 3"); - - // Interpolate R and B -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int i = 0; i < H; i++) { - if (i == 0) - // rm, gm, bm must be recovered - //interpolate_row_rb_mul_pp (red, blue, NULL, green[i], green[i+1], i, rm, gm, bm, 0, W, 1); - { - interpolate_row_rb_mul_pp (red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); - } else if (i == H - 1) { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); - } else { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); - } - } -Stop3.stop(); - if(plistenerActive) { - plistener->setProgress (1.0); - } -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -#undef fc -#define fc(row,col) \ - (ri->get_filters() >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) - -#define FORCC for (unsigned int c=0; c < colors; c++) - -/* - Patterned Pixel Grouping Interpolation by Alain Desbiolles -*/ -void RawImageSource::ppg_demosaic() -{ - int width = W, height = H; - int dir[5] = { 1, width, -1, -width, 1 }; - int row, col, diff[2] = {}, guess[2], c, d, i; - float (*pix)[4]; - - float (*image)[4]; - - if (plistener) { - // looks like ppg isn't supported anymore - //plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::ppg))); - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), "xxx")); - plistener->setProgress (0.0); - } - - image = (float (*)[4]) calloc (H * W, sizeof * image); - - for (int ii = 0; ii < H; ii++) - for (int jj = 0; jj < W; jj++) { - image[ii * W + jj][fc(ii, jj)] = rawData[ii][jj]; - } - - border_interpolate(3, image); - - /* Fill in the green layer with gradients and pattern recognition: */ - for (row = 3; row < height - 3; row++) { - for (col = 3 + (FC(row, 3) & 1), c = FC(row, col); col < width - 3; col += 2) { - pix = image + row * width + col; - - for (i = 0; (d = dir[i]) > 0; i++) { - guess[i] = (pix[-d][1] + pix[0][c] + pix[d][1]) * 2 - - pix[-2 * d][c] - pix[2 * d][c]; - diff[i] = ( ABS(pix[-2 * d][c] - pix[ 0][c]) + - ABS(pix[ 2 * d][c] - pix[ 0][c]) + - ABS(pix[ -d][1] - pix[ d][1]) ) * 3 + - ( ABS(pix[ 3 * d][1] - pix[ d][1]) + - ABS(pix[-3 * d][1] - pix[-d][1]) ) * 2; - } - - d = dir[i = diff[0] > diff[1]]; - pix[0][1] = median(static_cast(guess[i] >> 2), pix[d][1], pix[-d][1]); - } - - if(plistener) { - plistener->setProgress(0.33 * row / (height - 3)); - } - } - - /* Calculate red and blue for each green pixel: */ - for (row = 1; row < height - 1; row++) { - for (col = 1 + (FC(row, 2) & 1), c = FC(row, col + 1); col < width - 1; col += 2) { - pix = image + row * width + col; - - for (i = 0; (d = dir[i]) > 0; c = 2 - c, i++) - pix[0][c] = CLIP(0.5 * (pix[-d][c] + pix[d][c] + 2 * pix[0][1] - - pix[-d][1] - pix[d][1]) ); - } - - if(plistener) { - plistener->setProgress(0.33 + 0.33 * row / (height - 1)); - } - } - - /* Calculate blue for red pixels and vice versa: */ - for (row = 1; row < height - 1; row++) { - for (col = 1 + (FC(row, 1) & 1), c = 2 - FC(row, col); col < width - 1; col += 2) { - pix = image + row * width + col; - - for (i = 0; (d = dir[i] + dir[i + 1]) > 0; i++) { - diff[i] = ABS(pix[-d][c] - pix[d][c]) + - ABS(pix[-d][1] - pix[0][1]) + - ABS(pix[ d][1] - pix[0][1]); - guess[i] = pix[-d][c] + pix[d][c] + 2 * pix[0][1] - - pix[-d][1] - pix[d][1]; - } - - if (diff[0] != diff[1]) { - pix[0][c] = CLIP(guess[diff[0] > diff[1]] / 2); - } else { - pix[0][c] = CLIP((guess[0] + guess[1]) / 4); - } - } - - if(plistener) { - plistener->setProgress(0.67 + 0.33 * row / (height - 1)); - } - } - - red(W, H); - - for (int i = 0; i < H; i++) - for (int j = 0; j < W; j++) { - red[i][j] = image[i * W + j][0]; - } - - green(W, H); - - for (int i = 0; i < H; i++) - for (int j = 0; j < W; j++) { - green[i][j] = image[i * W + j][1]; - } - - blue(W, H); - - for (int i = 0; i < H; i++) - for (int j = 0; j < W; j++) { - blue[i][j] = image[i * W + j][2]; - } - - free (image); -} - -void RawImageSource::border_interpolate(unsigned int border, float (*image)[4], unsigned int start, unsigned int end) -{ - unsigned row, col, y, x, f, sum[8]; - unsigned int width = W, height = H; - unsigned int colors = 3; - - if (end == 0 ) { - end = H; - } - - for (row = start; row < end; row++) - for (col = 0; col < width; col++) { - if (col == border && row >= border && row < height - border) { - col = width - border; - } - - memset (sum, 0, sizeof sum); - - for (y = row - 1; y != row + 2; y++) - for (x = col - 1; x != col + 2; x++) - if (y < height && x < width) { - f = fc(y, x); - sum[f] += image[y * width + x][f]; - sum[f + 4]++; - } - - f = fc(row, col); - - FORCC if (c != f && sum[c + 4]) { - image[row * width + col][c] = sum[c] / sum[c + 4]; - } - } -} - -void RawImageSource::border_interpolate2( int winw, int winh, int lborders) -{ - int bord = lborders; - int width = winw; - int height = winh; - - for (int i = 0; i < height; i++) { - - float sum[6]; - - for (int j = 0; j < bord; j++) { //first few columns - for (int c = 0; c < 6; c++) { - sum[c] = 0; - } - - for (int i1 = i - 1; i1 < i + 2; i1++) - for (int j1 = j - 1; j1 < j + 2; j1++) { - if ((i1 > -1) && (i1 < height) && (j1 > -1)) { - int c = FC(i1, j1); - sum[c] += rawData[i1][j1]; - sum[c + 3]++; - } - } - - int c = FC(i, j); - - if (c == 1) { - red[i][j] = sum[0] / sum[3]; - green[i][j] = rawData[i][j]; - blue[i][j] = sum[2] / sum[5]; - } else { - green[i][j] = sum[1] / sum[4]; - - if (c == 0) { - red[i][j] = rawData[i][j]; - blue[i][j] = sum[2] / sum[5]; - } else { - red[i][j] = sum[0] / sum[3]; - blue[i][j] = rawData[i][j]; - } - } - }//j - - for (int j = width - bord; j < width; j++) { //last few columns - for (int c = 0; c < 6; c++) { - sum[c] = 0; - } - - for (int i1 = i - 1; i1 < i + 2; i1++) - for (int j1 = j - 1; j1 < j + 2; j1++) { - if ((i1 > -1) && (i1 < height ) && (j1 < width)) { - int c = FC(i1, j1); - sum[c] += rawData[i1][j1]; - sum[c + 3]++; - } - } - - int c = FC(i, j); - - if (c == 1) { - red[i][j] = sum[0] / sum[3]; - green[i][j] = rawData[i][j]; - blue[i][j] = sum[2] / sum[5]; - } else { - green[i][j] = sum[1] / sum[4]; - - if (c == 0) { - red[i][j] = rawData[i][j]; - blue[i][j] = sum[2] / sum[5]; - } else { - red[i][j] = sum[0] / sum[3]; - blue[i][j] = rawData[i][j]; - } - } - }//j - }//i - - for (int i = 0; i < bord; i++) { - - float sum[6]; - - for (int j = bord; j < width - bord; j++) { //first few rows - for (int c = 0; c < 6; c++) { - sum[c] = 0; - } - - for (int i1 = i - 1; i1 < i + 2; i1++) - for (int j1 = j - 1; j1 < j + 2; j1++) { - if ((i1 > -1) && (i1 < height) && (j1 > -1)) { - int c = FC(i1, j1); - sum[c] += rawData[i1][j1]; - sum[c + 3]++; - } - } - - int c = FC(i, j); - - if (c == 1) { - red[i][j] = sum[0] / sum[3]; - green[i][j] = rawData[i][j]; - blue[i][j] = sum[2] / sum[5]; - } else { - green[i][j] = sum[1] / sum[4]; - - if (c == 0) { - red[i][j] = rawData[i][j]; - blue[i][j] = sum[2] / sum[5]; - } else { - red[i][j] = sum[0] / sum[3]; - blue[i][j] = rawData[i][j]; - } - } - }//j - } - - for (int i = height - bord; i < height; i++) { - - float sum[6]; - - for (int j = bord; j < width - bord; j++) { //last few rows - for (int c = 0; c < 6; c++) { - sum[c] = 0; - } - - for (int i1 = i - 1; i1 < i + 2; i1++) - for (int j1 = j - 1; j1 < j + 2; j1++) { - if ((i1 > -1) && (i1 < height) && (j1 < width)) { - int c = FC(i1, j1); - sum[c] += rawData[i1][j1]; - sum[c + 3]++; - } - } - - int c = FC(i, j); - - if (c == 1) { - red[i][j] = sum[0] / sum[3]; - green[i][j] = rawData[i][j]; - blue[i][j] = sum[2] / sum[5]; - } else { - green[i][j] = sum[1] / sum[4]; - - if (c == 0) { - red[i][j] = rawData[i][j]; - blue[i][j] = sum[2] / sum[5]; - } else { - red[i][j] = sum[0] / sum[3]; - blue[i][j] = rawData[i][j]; - } - } - }//j - } - -} - -// Joint Demosaicing and Denoising using High Order Interpolation Techniques -// Revision 0.9.1a - 09/02/2010 - Contact info: luis.sanz.rodriguez@gmail.com -// Copyright Luis Sanz Rodriguez 2010 -// Adapted to RawTherapee by Jacques Desmis 3/2013 - -void RawImageSource::jdl_interpolate_omp() // from "Lassus" -{ - int width = W, height = H; - int row, col, c, d, i, u = width, v = 2 * u, w = 3 * u, x = 4 * u, y = 5 * u, z = 6 * u, indx, (*dif)[2], (*chr)[2]; - float f[4], g[4]; - float (*image)[4]; - image = (float (*)[4]) calloc (width * height, sizeof * image); - dif = (int (*)[2]) calloc(width * height, sizeof * dif); - chr = (int (*)[2]) calloc(width * height, sizeof * chr); - - if (plistener) { - // this function seems to be unused - //plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::jdl))); - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), "xxx")); - plistener->setProgress (0.0); - } - -#ifdef _OPENMP - #pragma omp parallel default(none) shared(image,width,height,u,w,v,y,x,z,dif,chr) private(row,col,f,g,indx,c,d,i) -#endif - { -#ifdef _OPENMP - #pragma omp for -#endif - - for (int ii = 0; ii < height; ii++) - for (int jj = 0; jj < width; jj++) { - image[ii * width + jj][fc(ii, jj)] = rawData[ii][jj]; - } - - border_interpolate(6, image); - -#ifdef _OPENMP - #pragma omp for -#endif - - for (row = 5; row < height - 5; row++) - for (col = 5 + (FC(row, 1) & 1), indx = row * width + col, c = FC(row, col); col < u - 5; col += 2, indx += 2) { - f[0] = 1.f + abs(image[indx - u][1] - image[indx - w][1]) + abs(image[indx - u][1] - image[indx + u][1]) + abs(image[indx][c] - image[indx - v][c]) + abs(image[indx - v][c] - image[indx - x][c]); - f[1] = 1.f + abs(image[indx + 1][1] - image[indx + 3][1]) + abs(image[indx + 1][1] - image[indx - 1][1]) + abs(image[indx][c] - image[indx + 2][c]) + abs(image[indx + 2][c] - image[indx + 4][c]); - f[2] = 1.f + abs(image[indx - 1][1] - image[indx - 3][1]) + abs(image[indx - 1][1] - image[indx + 1][1]) + abs(image[indx][c] - image[indx - 2][c]) + abs(image[indx - 2][c] - image[indx - 4][c]); - f[3] = 1.f + abs(image[indx + u][1] - image[indx + w][1]) + abs(image[indx + u][1] - image[indx - u][1]) + abs(image[indx][c] - image[indx + v][c]) + abs(image[indx + v][c] - image[indx + x][c]); - g[0] = CLIP((22.f * image[indx - u][1] + 22.f * image[indx - w][1] + 2.f * image[indx - y][1] + 2.f * image[indx + u][1] + 40.f * image[indx][c] - 32.f * image[indx - v][c] - 8.f * image[indx - x][c]) / 48.f); - g[1] = CLIP((22.f * image[indx + 1][1] + 22.f * image[indx + 3][1] + 2.f * image[indx + 5][1] + 2.f * image[indx - 1][1] + 40.f * image[indx][c] - 32.f * image[indx + 2][c] - 8.f * image[indx + 4][c]) / 48.f); - g[2] = CLIP((22.f * image[indx - 1][1] + 22.f * image[indx - 3][1] + 2.f * image[indx - 5][1] + 2.f * image[indx + 1][1] + 40.f * image[indx][c] - 32.f * image[indx - 2][c] - 8.f * image[indx - 4][c]) / 48.f); - g[3] = CLIP((22.f * image[indx + u][1] + 22.f * image[indx + w][1] + 2.f * image[indx + y][1] + 2.f * image[indx - u][1] + 40.f * image[indx][c] - 32.f * image[indx + v][c] - 8.f * image[indx + x][c]) / 48.f); - dif[indx][0] = CLIP((f[3] * g[0] + f[0] * g[3]) / (f[0] + f[3])) - image[indx][c]; - dif[indx][1] = CLIP((f[2] * g[1] + f[1] * g[2]) / (f[1] + f[2])) - image[indx][c]; - } - -#ifdef _OPENMP - #pragma omp for -#endif - - for (row = 6; row < height - 6; row++) - for (col = 6 + (FC(row, 2) & 1), indx = row * width + col, c = FC(row, col) / 2; col < u - 6; col += 2, indx += 2) { - f[0] = 1.f + 78.f * SQR((float)dif[indx][0]) + 69.f * (SQR((float) dif[indx - v][0]) + SQR((float)dif[indx + v][0])) + 51.f * (SQR((float)dif[indx - x][0]) + SQR((float)dif[indx + x][0])) + 21.f * (SQR((float)dif[indx - z][0]) + SQR((float)dif[indx + z][0])) - 6.f * SQR((float)dif[indx - v][0] + dif[indx][0] + dif[indx + v][0]) - 10.f * (SQR((float)dif[indx - x][0] + dif[indx - v][0] + dif[indx][0]) + SQR((float)dif[indx][0] + dif[indx + v][0] + dif[indx + x][0])) - 7.f * (SQR((float)dif[indx - z][0] + dif[indx - x][0] + dif[indx - v][0]) + SQR((float)dif[indx + v][0] + dif[indx + x][0] + dif[indx + z][0])); - f[1] = 1.f + 78.f * SQR((float)dif[indx][1]) + 69.f * (SQR((float)dif[indx - 2][1]) + SQR((float)dif[indx + 2][1])) + 51.f * (SQR((float)dif[indx - 4][1]) + SQR((float)dif[indx + 4][1])) + 21.f * (SQR((float)dif[indx - 6][1]) + SQR((float)dif[indx + 6][1])) - 6.f * SQR((float)dif[indx - 2][1] + dif[indx][1] + dif[indx + 2][1]) - 10.f * (SQR((float)dif[indx - 4][1] + dif[indx - 2][1] + dif[indx][1]) + SQR((float)dif[indx][1] + dif[indx + 2][1] + dif[indx + 4][1])) - 7.f * (SQR((float)dif[indx - 6][1] + dif[indx - 4][1] + dif[indx - 2][1]) + SQR((float)dif[indx + 2][1] + dif[indx + 4][1] + dif[indx + 6][1])); - g[0] = median(0.725f * dif[indx][0] + 0.1375f * dif[indx - v][0] + 0.1375f * dif[indx + v][0], static_cast(dif[indx - v][0]), static_cast(dif[indx + v][0])); - g[1] = median(0.725f * dif[indx][1] + 0.1375f * dif[indx - 2][1] + 0.1375f * dif[indx + 2][1], static_cast(dif[indx - 2][1]), static_cast(dif[indx + 2][1])); - chr[indx][c] = (f[1] * g[0] + f[0] * g[1]) / (f[0] + f[1]); - } - -#ifdef _OPENMP - #pragma omp for -#endif - - for (row = 6; row < height - 6; row++) - for (col = 6 + (FC(row, 2) & 1), indx = row * width + col, c = 1 - FC(row, col) / 2, d = 2 * c; col < u - 6; col += 2, indx += 2) { - f[0] = 1.f / (float)(1.f + fabs((float)chr[indx - u - 1][c] - chr[indx + u + 1][c]) + fabs((float)chr[indx - u - 1][c] - chr[indx - w - 3][c]) + fabs((float)chr[indx + u + 1][c] - chr[indx - w - 3][c])); - f[1] = 1.f / (float)(1.f + fabs((float)chr[indx - u + 1][c] - chr[indx + u - 1][c]) + fabs((float)chr[indx - u + 1][c] - chr[indx - w + 3][c]) + fabs((float)chr[indx + u - 1][c] - chr[indx - w + 3][c])); - f[2] = 1.f / (float)(1.f + fabs((float)chr[indx + u - 1][c] - chr[indx - u + 1][c]) + fabs((float)chr[indx + u - 1][c] - chr[indx + w + 3][c]) + fabs((float)chr[indx - u + 1][c] - chr[indx + w - 3][c])); - f[3] = 1.f / (float)(1.f + fabs((float)chr[indx + u + 1][c] - chr[indx - u - 1][c]) + fabs((float)chr[indx + u + 1][c] - chr[indx + w - 3][c]) + fabs((float)chr[indx - u - 1][c] - chr[indx + w + 3][c])); - g[0] = median(chr[indx - u - 1][c], chr[indx - w - 1][c], chr[indx - u - 3][c]); - g[1] = median(chr[indx - u + 1][c], chr[indx - w + 1][c], chr[indx - u + 3][c]); - g[2] = median(chr[indx + u - 1][c], chr[indx + w - 1][c], chr[indx + u - 3][c]); - g[3] = median(chr[indx + u + 1][c], chr[indx + w + 1][c], chr[indx + u + 3][c]); - chr[indx][c] = (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3]); - image[indx][1] = CLIP(image[indx][2 - d] + chr[indx][1 - c]); - image[indx][d] = CLIP(image[indx][1] - chr[indx][c]); - } - -#ifdef _OPENMP - #pragma omp for -#endif - - for (row = 6; row < height - 6; row++) - for (col = 6 + (FC(row, 1) & 1), indx = row * width + col, c = FC(row, col + 1) / 2, d = 2 * c; col < u - 6; col += 2, indx += 2) - for(i = 0; i <= 1; c = 1 - c, d = 2 * c, i++) { - f[0] = 1.f / (float)(1.f + fabs((float)chr[indx - u][c] - chr[indx + u][c]) + fabs((float)chr[indx - u][c] - chr[indx - w][c]) + fabs((float)chr[indx + u][c] - chr[indx - w][c])); - f[1] = 1.f / (float)(1.f + fabs((float)chr[indx + 1][c] - chr[indx - 1][c]) + fabs((float)chr[indx + 1][c] - chr[indx + 3][c]) + fabs((float)chr[indx - 1][c] - chr[indx + 3][c])); - f[2] = 1.f / (float)(1.f + fabs((float)chr[indx - 1][c] - chr[indx + 1][c]) + fabs((float)chr[indx - 1][c] - chr[indx - 3][c]) + fabs((float)chr[indx + 1][c] - chr[indx - 3][c])); - f[3] = 1.f / (float)(1.f + fabs((float)chr[indx + u][c] - chr[indx - u][c]) + fabs((float)chr[indx + u][c] - chr[indx + w][c]) + fabs((float)chr[indx - u][c] - chr[indx + w][c])); - g[0] = 0.875f * chr[indx - u][c] + 0.125f * chr[indx - w][c]; - g[1] = 0.875f * chr[indx + 1][c] + 0.125f * chr[indx + 3][c]; - g[2] = 0.875f * chr[indx - 1][c] + 0.125f * chr[indx - 3][c]; - g[3] = 0.875f * chr[indx + u][c] + 0.125f * chr[indx + w][c]; - image[indx][d] = CLIP(image[indx][1] - (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3])); - } - -#ifdef _OPENMP - #pragma omp for -#endif - - for (int ii = 0; ii < height; ii++) { - for (int jj = 0; jj < width; jj++) { - red[ii][jj] = CLIP(image[ii * width + jj][0]); - green[ii][jj] = CLIP(image[ii * width + jj][1]); - blue[ii][jj] = CLIP(image[ii * width + jj][2]); - } - } - } // End of parallelization - free (image); - free(dif); - free(chr); - //RawImageSource::refinement_lassus(); -} - -// LSMME demosaicing algorithm -// L. Zhang and X. Wu, -// Color demozaicing via directional Linear Minimum Mean Square-error Estimation, -// IEEE Trans. on Image Processing, vol. 14, pp. 2167-2178, -// Dec. 2005. -// Adapted to RawTherapee by Jacques Desmis 3/2013 -// Improved speed and reduced memory consumption by Ingo Weyrich 2/2015 -//TODO Tiles to reduce memory consumption -void RawImageSource::lmmse_interpolate_omp(int winw, int winh, array2D &rawData, array2D &red, array2D &green, array2D &blue, int iterations) -{ - const int width = winw, height = winh; - const int ba = 10; - const int rr1 = height + 2 * ba; - const int cc1 = width + 2 * ba; - const int w1 = cc1; - const int w2 = 2 * w1; - const int w3 = 3 * w1; - const int w4 = 4 * w1; - float h0, h1, h2, h3, h4, hs; - h0 = 1.0f; - h1 = exp( -1.0f / 8.0f); - h2 = exp( -4.0f / 8.0f); - h3 = exp( -9.0f / 8.0f); - h4 = exp(-16.0f / 8.0f); - hs = h0 + 2.0f * (h1 + h2 + h3 + h4); - h0 /= hs; - h1 /= hs; - h2 /= hs; - h3 /= hs; - h4 /= hs; - int passref = 0; - int iter = 0; - - if(iterations <= 4) { - iter = iterations - 1; - passref = 0; - } else if (iterations <= 6) { - iter = 3; - passref = iterations - 4; - } else if (iterations <= 8) { - iter = 3; - passref = iterations - 6; - } - - bool applyGamma = true; - - if(iterations == 0) { - applyGamma = false; - iter = 0; - } else { - applyGamma = true; - } - - float *rix[5]; - float *qix[5]; - float *buffer = (float *)calloc(rr1 * cc1 * 5 * sizeof(float), 1); - - if(buffer == nullptr) { // allocation of big block of memory failed, try to get 5 smaller ones - printf("lmmse_interpolate_omp: allocation of big memory block failed, try to get 5 smaller ones now...\n"); - bool allocationFailed = false; - - for(int i = 0; i < 5; i++) { - qix[i] = (float *)calloc(rr1 * cc1 * sizeof(float), 1); - - if(!qix[i]) { // allocation of at least one small block failed - allocationFailed = true; - } - } - - if(allocationFailed) { // fall back to igv_interpolate - printf("lmmse_interpolate_omp: allocation of 5 small memory blocks failed, falling back to igv_interpolate...\n"); - - for(int i = 0; i < 5; i++) { // free the already allocated buffers - if(qix[i]) { - free(qix[i]); - } - } - - igv_interpolate(winw, winh); - return; - } - } else { - qix[0] = buffer; - - for(int i = 1; i < 5; i++) { - qix[i] = qix[i - 1] + rr1 * cc1; - } - } - - if (plistener) { - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::LMMSE))); - plistener->setProgress (0.0); - } - - - LUTf *gamtab; - - if(applyGamma) { - gamtab = &(Color::gammatab_24_17a); - } else { - gamtab = new LUTf(65536, LUT_CLIP_ABOVE | LUT_CLIP_BELOW); - gamtab->makeIdentity(65535.f); - } - - -#ifdef _OPENMP - #pragma omp parallel private(rix) -#endif - { -#ifdef _OPENMP - #pragma omp for -#endif - - for (int rrr = ba; rrr < rr1 - ba; rrr++) { - for (int ccc = ba, row = rrr - ba; ccc < cc1 - ba; ccc++) { - int col = ccc - ba; - float *rix = qix[4] + rrr * cc1 + ccc; - rix[0] = (*gamtab)[rawData[row][col]]; - } - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.1); - } - } - - // G-R(B) -#ifdef _OPENMP - #pragma omp for schedule(dynamic,16) -#endif - - for (int rr = 2; rr < rr1 - 2; rr++) { - // G-R(B) at R(B) location - for (int cc = 2 + (FC(rr, 2) & 1); cc < cc1 - 2; cc += 2) { - rix[4] = qix[4] + rr * cc1 + cc; - float v0 = x00625(rix[4][-w1 - 1] + rix[4][-w1 + 1] + rix[4][w1 - 1] + rix[4][w1 + 1]) + x0250(rix[4][0]); - // horizontal - rix[0] = qix[0] + rr * cc1 + cc; - rix[0][0] = - x0250(rix[4][ -2] + rix[4][ 2]) + xdiv2f(rix[4][ -1] + rix[4][0] + rix[4][ 1]); - float Y = v0 + xdiv2f(rix[0][0]); - - if (rix[4][0] > 1.75f * Y) { - rix[0][0] = median(rix[0][0], rix[4][ -1], rix[4][ 1]); - } else { - rix[0][0] = LIM(rix[0][0], 0.0f, 1.0f); - } - - rix[0][0] -= rix[4][0]; - // vertical - rix[1] = qix[1] + rr * cc1 + cc; - rix[1][0] = -x0250(rix[4][-w2] + rix[4][w2]) + xdiv2f(rix[4][-w1] + rix[4][0] + rix[4][w1]); - Y = v0 + xdiv2f(rix[1][0]); - - if (rix[4][0] > 1.75f * Y) { - rix[1][0] = median(rix[1][0], rix[4][-w1], rix[4][w1]); - } else { - rix[1][0] = LIM(rix[1][0], 0.0f, 1.0f); - } - - rix[1][0] -= rix[4][0]; - } - - // G-R(B) at G location - for (int ccc = 2 + (FC(rr, 3) & 1); ccc < cc1 - 2; ccc += 2) { - rix[0] = qix[0] + rr * cc1 + ccc; - rix[1] = qix[1] + rr * cc1 + ccc; - rix[4] = qix[4] + rr * cc1 + ccc; - rix[0][0] = x0250(rix[4][ -2] + rix[4][ 2]) - xdiv2f(rix[4][ -1] + rix[4][0] + rix[4][ 1]); - rix[1][0] = x0250(rix[4][-w2] + rix[4][w2]) - xdiv2f(rix[4][-w1] + rix[4][0] + rix[4][w1]); - rix[0][0] = LIM(rix[0][0], -1.0f, 0.0f) + rix[4][0]; - rix[1][0] = LIM(rix[1][0], -1.0f, 0.0f) + rix[4][0]; - } - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.2); - } - } - - - // apply low pass filter on differential colors -#ifdef _OPENMP - #pragma omp for -#endif - - for (int rr = 4; rr < rr1 - 4; rr++) - for (int cc = 4; cc < cc1 - 4; cc++) { - rix[0] = qix[0] + rr * cc1 + cc; - rix[2] = qix[2] + rr * cc1 + cc; - rix[2][0] = h0 * rix[0][0] + h1 * (rix[0][ -1] + rix[0][ 1]) + h2 * (rix[0][ -2] + rix[0][ 2]) + h3 * (rix[0][ -3] + rix[0][ 3]) + h4 * (rix[0][ -4] + rix[0][ 4]); - rix[1] = qix[1] + rr * cc1 + cc; - rix[3] = qix[3] + rr * cc1 + cc; - rix[3][0] = h0 * rix[1][0] + h1 * (rix[1][-w1] + rix[1][w1]) + h2 * (rix[1][-w2] + rix[1][w2]) + h3 * (rix[1][-w3] + rix[1][w3]) + h4 * (rix[1][-w4] + rix[1][w4]); - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.3); - } - } - - // interpolate G-R(B) at R(B) -#ifdef _OPENMP - #pragma omp for -#endif - - for (int rr = 4; rr < rr1 - 4; rr++) { - int cc = 4 + (FC(rr, 4) & 1); -#ifdef __SSE2__ - __m128 p1v, p2v, p3v, p4v, p5v, p6v, p7v, p8v, p9v, muv, vxv, vnv, xhv, vhv, xvv, vvv; - __m128 epsv = _mm_set1_ps(1e-7); - __m128 ninev = _mm_set1_ps(9.f); - - for (; cc < cc1 - 10; cc += 8) { - rix[0] = qix[0] + rr * cc1 + cc; - rix[1] = qix[1] + rr * cc1 + cc; - rix[2] = qix[2] + rr * cc1 + cc; - rix[3] = qix[3] + rr * cc1 + cc; - rix[4] = qix[4] + rr * cc1 + cc; - // horizontal - p1v = LC2VFU(rix[2][-4]); - p2v = LC2VFU(rix[2][-3]); - p3v = LC2VFU(rix[2][-2]); - p4v = LC2VFU(rix[2][-1]); - p5v = LC2VFU(rix[2][ 0]); - p6v = LC2VFU(rix[2][ 1]); - p7v = LC2VFU(rix[2][ 2]); - p8v = LC2VFU(rix[2][ 3]); - p9v = LC2VFU(rix[2][ 4]); - muv = (p1v + p2v + p3v + p4v + p5v + p6v + p7v + p8v + p9v) / ninev; - vxv = epsv + SQRV(p1v - muv) + SQRV(p2v - muv) + SQRV(p3v - muv) + SQRV(p4v - muv) + SQRV(p5v - muv) + SQRV(p6v - muv) + SQRV(p7v - muv) + SQRV(p8v - muv) + SQRV(p9v - muv); - p1v -= LC2VFU(rix[0][-4]); - p2v -= LC2VFU(rix[0][-3]); - p3v -= LC2VFU(rix[0][-2]); - p4v -= LC2VFU(rix[0][-1]); - p5v -= LC2VFU(rix[0][ 0]); - p6v -= LC2VFU(rix[0][ 1]); - p7v -= LC2VFU(rix[0][ 2]); - p8v -= LC2VFU(rix[0][ 3]); - p9v -= LC2VFU(rix[0][ 4]); - vnv = epsv + SQRV(p1v) + SQRV(p2v) + SQRV(p3v) + SQRV(p4v) + SQRV(p5v) + SQRV(p6v) + SQRV(p7v) + SQRV(p8v) + SQRV(p9v); - xhv = (LC2VFU(rix[0][0]) * vxv + LC2VFU(rix[2][0]) * vnv) / (vxv + vnv); - vhv = vxv * vnv / (vxv + vnv); - - // vertical - p1v = LC2VFU(rix[3][-w4]); - p2v = LC2VFU(rix[3][-w3]); - p3v = LC2VFU(rix[3][-w2]); - p4v = LC2VFU(rix[3][-w1]); - p5v = LC2VFU(rix[3][ 0]); - p6v = LC2VFU(rix[3][ w1]); - p7v = LC2VFU(rix[3][ w2]); - p8v = LC2VFU(rix[3][ w3]); - p9v = LC2VFU(rix[3][ w4]); - muv = (p1v + p2v + p3v + p4v + p5v + p6v + p7v + p8v + p9v) / ninev; - vxv = epsv + SQRV(p1v - muv) + SQRV(p2v - muv) + SQRV(p3v - muv) + SQRV(p4v - muv) + SQRV(p5v - muv) + SQRV(p6v - muv) + SQRV(p7v - muv) + SQRV(p8v - muv) + SQRV(p9v - muv); - p1v -= LC2VFU(rix[1][-w4]); - p2v -= LC2VFU(rix[1][-w3]); - p3v -= LC2VFU(rix[1][-w2]); - p4v -= LC2VFU(rix[1][-w1]); - p5v -= LC2VFU(rix[1][ 0]); - p6v -= LC2VFU(rix[1][ w1]); - p7v -= LC2VFU(rix[1][ w2]); - p8v -= LC2VFU(rix[1][ w3]); - p9v -= LC2VFU(rix[1][ w4]); - vnv = epsv + SQRV(p1v) + SQRV(p2v) + SQRV(p3v) + SQRV(p4v) + SQRV(p5v) + SQRV(p6v) + SQRV(p7v) + SQRV(p8v) + SQRV(p9v); - xvv = (LC2VFU(rix[1][0]) * vxv + LC2VFU(rix[3][0]) * vnv) / (vxv + vnv); - vvv = vxv * vnv / (vxv + vnv); - // interpolated G-R(B) - muv = (xhv * vvv + xvv * vhv) / (vhv + vvv); - STC2VFU(rix[4][0], muv); - } - -#endif - - for (; cc < cc1 - 4; cc += 2) { - rix[0] = qix[0] + rr * cc1 + cc; - rix[1] = qix[1] + rr * cc1 + cc; - rix[2] = qix[2] + rr * cc1 + cc; - rix[3] = qix[3] + rr * cc1 + cc; - rix[4] = qix[4] + rr * cc1 + cc; - // horizontal - float p1 = rix[2][-4]; - float p2 = rix[2][-3]; - float p3 = rix[2][-2]; - float p4 = rix[2][-1]; - float p5 = rix[2][ 0]; - float p6 = rix[2][ 1]; - float p7 = rix[2][ 2]; - float p8 = rix[2][ 3]; - float p9 = rix[2][ 4]; - float mu = (p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9) / 9.f; - float vx = 1e-7 + SQR(p1 - mu) + SQR(p2 - mu) + SQR(p3 - mu) + SQR(p4 - mu) + SQR(p5 - mu) + SQR(p6 - mu) + SQR(p7 - mu) + SQR(p8 - mu) + SQR(p9 - mu); - p1 -= rix[0][-4]; - p2 -= rix[0][-3]; - p3 -= rix[0][-2]; - p4 -= rix[0][-1]; - p5 -= rix[0][ 0]; - p6 -= rix[0][ 1]; - p7 -= rix[0][ 2]; - p8 -= rix[0][ 3]; - p9 -= rix[0][ 4]; - float vn = 1e-7 + SQR(p1) + SQR(p2) + SQR(p3) + SQR(p4) + SQR(p5) + SQR(p6) + SQR(p7) + SQR(p8) + SQR(p9); - float xh = (rix[0][0] * vx + rix[2][0] * vn) / (vx + vn); - float vh = vx * vn / (vx + vn); - - // vertical - p1 = rix[3][-w4]; - p2 = rix[3][-w3]; - p3 = rix[3][-w2]; - p4 = rix[3][-w1]; - p5 = rix[3][ 0]; - p6 = rix[3][ w1]; - p7 = rix[3][ w2]; - p8 = rix[3][ w3]; - p9 = rix[3][ w4]; - mu = (p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9) / 9.f; - vx = 1e-7 + SQR(p1 - mu) + SQR(p2 - mu) + SQR(p3 - mu) + SQR(p4 - mu) + SQR(p5 - mu) + SQR(p6 - mu) + SQR(p7 - mu) + SQR(p8 - mu) + SQR(p9 - mu); - p1 -= rix[1][-w4]; - p2 -= rix[1][-w3]; - p3 -= rix[1][-w2]; - p4 -= rix[1][-w1]; - p5 -= rix[1][ 0]; - p6 -= rix[1][ w1]; - p7 -= rix[1][ w2]; - p8 -= rix[1][ w3]; - p9 -= rix[1][ w4]; - vn = 1e-7 + SQR(p1) + SQR(p2) + SQR(p3) + SQR(p4) + SQR(p5) + SQR(p6) + SQR(p7) + SQR(p8) + SQR(p9); - float xv = (rix[1][0] * vx + rix[3][0] * vn) / (vx + vn); - float vv = vx * vn / (vx + vn); - // interpolated G-R(B) - rix[4][0] = (xh * vv + xv * vh) / (vh + vv); - } - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.4); - } - } - - // copy CFA values -#ifdef _OPENMP - #pragma omp for -#endif - - for (int rr = 0; rr < rr1; rr++) - for (int cc = 0, row = rr - ba; cc < cc1; cc++) { - int col = cc - ba; - int c = FC(rr, cc); - rix[c] = qix[c] + rr * cc1 + cc; - - if ((row >= 0) & (row < height) & (col >= 0) & (col < width)) { - rix[c][0] = (*gamtab)[rawData[row][col]]; - } else { - rix[c][0] = 0.f; - } - - if (c != 1) { - rix[1] = qix[1] + rr * cc1 + cc; - rix[4] = qix[4] + rr * cc1 + cc; - rix[1][0] = rix[c][0] + rix[4][0]; - } - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.5); - } - } - - // bilinear interpolation for R/B - // interpolate R/B at G location -#ifdef _OPENMP - #pragma omp for -#endif - - for (int rr = 1; rr < rr1 - 1; rr++) - for (int cc = 1 + (FC(rr, 2) & 1), c = FC(rr, cc + 1); cc < cc1 - 1; cc += 2) { - rix[c] = qix[c] + rr * cc1 + cc; - rix[1] = qix[1] + rr * cc1 + cc; - rix[c][0] = rix[1][0] + xdiv2f(rix[c][ -1] - rix[1][ -1] + rix[c][ 1] - rix[1][ 1]); - c = 2 - c; - rix[c] = qix[c] + rr * cc1 + cc; - rix[c][0] = rix[1][0] + xdiv2f(rix[c][-w1] - rix[1][-w1] + rix[c][w1] - rix[1][w1]); - c = 2 - c; - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.6); - } - } - - // interpolate R/B at B/R location -#ifdef _OPENMP - #pragma omp for -#endif - - for (int rr = 1; rr < rr1 - 1; rr++) - for (int cc = 1 + (FC(rr, 1) & 1), c = 2 - FC(rr, cc); cc < cc1 - 1; cc += 2) { - rix[c] = qix[c] + rr * cc1 + cc; - rix[1] = qix[1] + rr * cc1 + cc; - rix[c][0] = rix[1][0] + x0250(rix[c][-w1] - rix[1][-w1] + rix[c][ -1] - rix[1][ -1] + rix[c][ 1] - rix[1][ 1] + rix[c][ w1] - rix[1][ w1]); - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.7); - } - } - - }// End of parallelization 1 - - // median filter/ - for (int pass = 0; pass < iter; pass++) { - // Apply 3x3 median filter - // Compute median(R-G) and median(B-G) - -#ifdef _OPENMP - #pragma omp parallel for private(rix) -#endif - - for (int rr = 1; rr < rr1 - 1; rr++) { - for (int c = 0; c < 3; c += 2) { - int d = c + 3 - (c == 0 ? 0 : 1); - int cc = 1; -#ifdef __SSE2__ - - for (; cc < cc1 - 4; cc += 4) { - rix[d] = qix[d] + rr * cc1 + cc; - rix[c] = qix[c] + rr * cc1 + cc; - rix[1] = qix[1] + rr * cc1 + cc; - // Assign 3x3 differential color values - const std::array p = { - LVFU(rix[c][-w1 - 1]) - LVFU(rix[1][-w1 - 1]), - LVFU(rix[c][-w1]) - LVFU(rix[1][-w1]), - LVFU(rix[c][-w1 + 1]) - LVFU(rix[1][-w1 + 1]), - LVFU(rix[c][ -1]) - LVFU(rix[1][ -1]), - LVFU(rix[c][ 0]) - LVFU(rix[1][ 0]), - LVFU(rix[c][ 1]) - LVFU(rix[1][ 1]), - LVFU(rix[c][ w1 - 1]) - LVFU(rix[1][ w1 - 1]), - LVFU(rix[c][ w1]) - LVFU(rix[1][ w1]), - LVFU(rix[c][ w1 + 1]) - LVFU(rix[1][ w1 + 1]) - }; - _mm_storeu_ps(&rix[d][0], median(p)); - } - -#endif - - for (; cc < cc1 - 1; cc++) { - rix[d] = qix[d] + rr * cc1 + cc; - rix[c] = qix[c] + rr * cc1 + cc; - rix[1] = qix[1] + rr * cc1 + cc; - // Assign 3x3 differential color values - const std::array p = { - rix[c][-w1 - 1] - rix[1][-w1 - 1], - rix[c][-w1] - rix[1][-w1], - rix[c][-w1 + 1] - rix[1][-w1 + 1], - rix[c][ -1] - rix[1][ -1], - rix[c][ 0] - rix[1][ 0], - rix[c][ 1] - rix[1][ 1], - rix[c][ w1 - 1] - rix[1][ w1 - 1], - rix[c][ w1] - rix[1][ w1], - rix[c][ w1 + 1] - rix[1][ w1 + 1] - }; - rix[d][0] = median(p); - } - } - } - - // red/blue at GREEN pixel locations & red/blue and green at BLUE/RED pixel locations -#ifdef _OPENMP - #pragma omp parallel for private (rix) -#endif - - for (int rr = 0; rr < rr1; rr++) { - rix[0] = qix[0] + rr * cc1; - rix[1] = qix[1] + rr * cc1; - rix[2] = qix[2] + rr * cc1; - rix[3] = qix[3] + rr * cc1; - rix[4] = qix[4] + rr * cc1; - int c0 = FC(rr, 0); - int c1 = FC(rr, 1); - - if(c0 == 1) { - c1 = 2 - c1; - int d = c1 + 3 - (c1 == 0 ? 0 : 1); - int cc; - - for (cc = 0; cc < cc1 - 1; cc += 2) { - rix[0][0] = rix[1][0] + rix[3][0]; - rix[2][0] = rix[1][0] + rix[4][0]; - rix[0]++; - rix[1]++; - rix[2]++; - rix[3]++; - rix[4]++; - rix[c1][0] = rix[1][0] + rix[d][0]; - rix[1][0] = 0.5f * (rix[0][0] - rix[3][0] + rix[2][0] - rix[4][0]); - rix[0]++; - rix[1]++; - rix[2]++; - rix[3]++; - rix[4]++; - } - - if(cc < cc1) { // remaining pixel, only if width is odd - rix[0][0] = rix[1][0] + rix[3][0]; - rix[2][0] = rix[1][0] + rix[4][0]; - } - } else { - c0 = 2 - c0; - int d = c0 + 3 - (c0 == 0 ? 0 : 1); - int cc; - - for (cc = 0; cc < cc1 - 1; cc += 2) { - rix[c0][0] = rix[1][0] + rix[d][0]; - rix[1][0] = 0.5f * (rix[0][0] - rix[3][0] + rix[2][0] - rix[4][0]); - rix[0]++; - rix[1]++; - rix[2]++; - rix[3]++; - rix[4]++; - rix[0][0] = rix[1][0] + rix[3][0]; - rix[2][0] = rix[1][0] + rix[4][0]; - rix[0]++; - rix[1]++; - rix[2]++; - rix[3]++; - rix[4]++; - } - - if(cc < cc1) { // remaining pixel, only if width is odd - rix[c0][0] = rix[1][0] + rix[d][0]; - rix[1][0] = 0.5f * (rix[0][0] - rix[3][0] + rix[2][0] - rix[4][0]); - } - } - } - } - - if (plistener) { - plistener->setProgress (0.8); - } - - if(applyGamma) { - gamtab = &(Color::igammatab_24_17); - } else { - gamtab->makeIdentity(); - } - - array2D* rgb[3]; - rgb[0] = &red; - rgb[1] = &green; - rgb[2] = &blue; - - // copy result back to image matrix -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int row = 0; row < height; row++) { - for (int col = 0, rr = row + ba; col < width; col++) { - int cc = col + ba; - int c = FC(row, col); - - for (int ii = 0; ii < 3; ii++) - if (ii != c) { - float *rix = qix[ii] + rr * cc1 + cc; - (*(rgb[ii]))[row][col] = (*gamtab)[65535.f * rix[0]]; - } else { - (*(rgb[ii]))[row][col] = CLIP(rawData[row][col]); - } - } - } - - if (plistener) { - plistener->setProgress (1.0); - } - - if(buffer) { - free(buffer); - } else - for(int i = 0; i < 5; i++) { - free(qix[i]); - } - - if(!applyGamma) { - delete gamtab; - } - - if(iterations > 4 && iterations <= 6) { - refinement(passref); - } else if(iterations > 6) { - refinement_lassus(passref); - } - -} - -/*** -* -* Bayer CFA Demosaicing using Integrated Gaussian Vector on Color Differences -* Revision 1.0 - 2013/02/28 -* -* Copyright (c) 2007-2013 Luis Sanz Rodriguez -* Using High Order Interpolation technique by Jim S, Jimmy Li, and Sharmil Randhawa -* -* Contact info: luis.sanz.rodriguez@gmail.com -* -* This code is distributed under a GNU General Public License, version 3. -* Visit for more information. -* -***/ -// Adapted to RawTherapee by Jacques Desmis 3/2013 -// SSE version by Ingo Weyrich 5/2013 -#ifdef __SSE2__ -#define CLIPV(a) LIMV(a,zerov,c65535v) -void RawImageSource::igv_interpolate(int winw, int winh) -{ - static const float eps = 1e-5f, epssq = 1e-5f; //mod epssq -10f =>-5f Jacques 3/2013 to prevent artifact (divide by zero) - - static const int h1 = 1, h2 = 2, h3 = 3, h5 = 5; - const int width = winw, height = winh; - const int v1 = 1 * width, v2 = 2 * width, v3 = 3 * width, v5 = 5 * width; - float* rgb[2]; - float* chr[4]; - float *rgbarray, *vdif, *hdif, *chrarray; - rgbarray = (float (*)) malloc((width * height) * sizeof( float ) ); - rgb[0] = rgbarray; - rgb[1] = rgbarray + (width * height) / 2; - - vdif = (float (*)) calloc( width * height / 2, sizeof * vdif ); - hdif = (float (*)) calloc( width * height / 2, sizeof * hdif ); - - chrarray = (float (*)) calloc( width * height, sizeof( float ) ); - chr[0] = chrarray; - chr[1] = chrarray + (width * height) / 2; - - // mapped chr[2] and chr[3] to hdif and hdif, because these are out of use, when chr[2] and chr[3] are used - chr[2] = hdif; - chr[3] = vdif; - - border_interpolate2(winw, winh, 7); - - if (plistener) { - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV))); - plistener->setProgress (0.0); - } - -#ifdef _OPENMP - #pragma omp parallel default(none) shared(rgb,vdif,hdif,chr) -#endif - { - __m128 ngv, egv, wgv, sgv, nvv, evv, wvv, svv, nwgv, negv, swgv, segv, nwvv, nevv, swvv, sevv, tempv, temp1v, temp2v, temp3v, temp4v, temp5v, temp6v, temp7v, temp8v; - __m128 epsv = _mm_set1_ps( eps ); - __m128 epssqv = _mm_set1_ps( epssq ); - __m128 c65535v = _mm_set1_ps( 65535.f ); - __m128 c23v = _mm_set1_ps( 23.f ); - __m128 c40v = _mm_set1_ps( 40.f ); - __m128 c51v = _mm_set1_ps( 51.f ); - __m128 c32v = _mm_set1_ps( 32.f ); - __m128 c8v = _mm_set1_ps( 8.f ); - __m128 c7v = _mm_set1_ps( 7.f ); - __m128 c6v = _mm_set1_ps( 6.f ); - __m128 c10v = _mm_set1_ps( 10.f ); - __m128 c21v = _mm_set1_ps( 21.f ); - __m128 c78v = _mm_set1_ps( 78.f ); - __m128 c69v = _mm_set1_ps( 69.f ); - __m128 c3145680v = _mm_set1_ps( 3145680.f ); - __m128 onev = _mm_set1_ps ( 1.f ); - __m128 zerov = _mm_set1_ps ( 0.f ); - __m128 d725v = _mm_set1_ps ( 0.725f ); - __m128 d1375v = _mm_set1_ps ( 0.1375f ); - - float *dest1, *dest2; - float ng, eg, wg, sg, nv, ev, wv, sv, nwg, neg, swg, seg, nwv, nev, swv, sev; -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 0; row < height - 0; row++) { - dest1 = rgb[FC(row, 0) & 1]; - dest2 = rgb[FC(row, 1) & 1]; - int col, indx; - - for (col = 0, indx = row * width + col; col < width - 7; col += 8, indx += 8) { - temp1v = LVFU( rawData[row][col] ); - temp1v = CLIPV( temp1v ); - temp2v = LVFU( rawData[row][col + 4] ); - temp2v = CLIPV( temp2v ); - tempv = _mm_shuffle_ps( temp1v, temp2v, _MM_SHUFFLE( 2, 0, 2, 0 ) ); - _mm_storeu_ps( &dest1[indx >> 1], tempv ); - tempv = _mm_shuffle_ps( temp1v, temp2v, _MM_SHUFFLE( 3, 1, 3, 1 ) ); - _mm_storeu_ps( &dest2[indx >> 1], tempv ); - } - - for (; col < width; col++, indx += 2) { - dest1[indx >> 1] = CLIP(rawData[row][col]); //rawData = RT datas - col++; - if(col < width) - dest2[indx >> 1] = CLIP(rawData[row][col]); //rawData = RT datas - } - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.13); - } - } - -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 5; row < height - 5; row++) { - int col, indx, indx1; - - for (col = 5 + (FC(row, 1) & 1), indx = row * width + col, indx1 = indx >> 1; col < width - 12; col += 8, indx += 8, indx1 += 4) { - //N,E,W,S Gradients - ngv = (epsv + (vabsf(LVFU(rgb[1][(indx - v1) >> 1]) - LVFU(rgb[1][(indx - v3) >> 1])) + vabsf(LVFU(rgb[0][indx1]) - LVFU(rgb[0][(indx1 - v1)]))) / c65535v); - egv = (epsv + (vabsf(LVFU(rgb[1][(indx + h1) >> 1]) - LVFU(rgb[1][(indx + h3) >> 1])) + vabsf(LVFU(rgb[0][indx1]) - LVFU(rgb[0][(indx1 + h1)]))) / c65535v); - wgv = (epsv + (vabsf(LVFU(rgb[1][(indx - h1) >> 1]) - LVFU(rgb[1][(indx - h3) >> 1])) + vabsf(LVFU(rgb[0][indx1]) - LVFU(rgb[0][(indx1 - h1)]))) / c65535v); - sgv = (epsv + (vabsf(LVFU(rgb[1][(indx + v1) >> 1]) - LVFU(rgb[1][(indx + v3) >> 1])) + vabsf(LVFU(rgb[0][indx1]) - LVFU(rgb[0][(indx1 + v1)]))) / c65535v); - //N,E,W,S High Order Interpolation (Li & Randhawa) - //N,E,W,S Hamilton Adams Interpolation - // (48.f * 65535.f) = 3145680.f - tempv = c40v * LVFU(rgb[0][indx1]); - nvv = LIMV(((c23v * LVFU(rgb[1][(indx - v1) >> 1]) + c23v * LVFU(rgb[1][(indx - v3) >> 1]) + LVFU(rgb[1][(indx - v5) >> 1]) + LVFU(rgb[1][(indx + v1) >> 1]) + tempv - c32v * LVFU(rgb[0][(indx1 - v1)]) - c8v * LVFU(rgb[0][(indx1 - v2)]))) / c3145680v, zerov, onev); - evv = LIMV(((c23v * LVFU(rgb[1][(indx + h1) >> 1]) + c23v * LVFU(rgb[1][(indx + h3) >> 1]) + LVFU(rgb[1][(indx + h5) >> 1]) + LVFU(rgb[1][(indx - h1) >> 1]) + tempv - c32v * LVFU(rgb[0][(indx1 + h1)]) - c8v * LVFU(rgb[0][(indx1 + h2)]))) / c3145680v, zerov, onev); - wvv = LIMV(((c23v * LVFU(rgb[1][(indx - h1) >> 1]) + c23v * LVFU(rgb[1][(indx - h3) >> 1]) + LVFU(rgb[1][(indx - h5) >> 1]) + LVFU(rgb[1][(indx + h1) >> 1]) + tempv - c32v * LVFU(rgb[0][(indx1 - h1)]) - c8v * LVFU(rgb[0][(indx1 - h2)]))) / c3145680v, zerov, onev); - svv = LIMV(((c23v * LVFU(rgb[1][(indx + v1) >> 1]) + c23v * LVFU(rgb[1][(indx + v3) >> 1]) + LVFU(rgb[1][(indx + v5) >> 1]) + LVFU(rgb[1][(indx - v1) >> 1]) + tempv - c32v * LVFU(rgb[0][(indx1 + v1)]) - c8v * LVFU(rgb[0][(indx1 + v2)]))) / c3145680v, zerov, onev); - //Horizontal and vertical color differences - tempv = LVFU( rgb[0][indx1] ) / c65535v; - _mm_storeu_ps( &vdif[indx1], (sgv * nvv + ngv * svv) / (ngv + sgv) - tempv ); - _mm_storeu_ps( &hdif[indx1], (wgv * evv + egv * wvv) / (egv + wgv) - tempv ); - } - - // borders without SSE - for (; col < width - 5; col += 2, indx += 2, indx1++) { - //N,E,W,S Gradients - ng = (eps + (fabsf(rgb[1][(indx - v1) >> 1] - rgb[1][(indx - v3) >> 1]) + fabsf(rgb[0][indx1] - rgb[0][(indx1 - v1)])) / 65535.f);; - eg = (eps + (fabsf(rgb[1][(indx + h1) >> 1] - rgb[1][(indx + h3) >> 1]) + fabsf(rgb[0][indx1] - rgb[0][(indx1 + h1)])) / 65535.f); - wg = (eps + (fabsf(rgb[1][(indx - h1) >> 1] - rgb[1][(indx - h3) >> 1]) + fabsf(rgb[0][indx1] - rgb[0][(indx1 - h1)])) / 65535.f); - sg = (eps + (fabsf(rgb[1][(indx + v1) >> 1] - rgb[1][(indx + v3) >> 1]) + fabsf(rgb[0][indx1] - rgb[0][(indx1 + v1)])) / 65535.f); - //N,E,W,S High Order Interpolation (Li & Randhawa) - //N,E,W,S Hamilton Adams Interpolation - // (48.f * 65535.f) = 3145680.f - nv = LIM(((23.0f * rgb[1][(indx - v1) >> 1] + 23.0f * rgb[1][(indx - v3) >> 1] + rgb[1][(indx - v5) >> 1] + rgb[1][(indx + v1) >> 1] + 40.0f * rgb[0][indx1] - 32.0f * rgb[0][(indx1 - v1)] - 8.0f * rgb[0][(indx1 - v2)])) / 3145680.f, 0.0f, 1.0f); - ev = LIM(((23.0f * rgb[1][(indx + h1) >> 1] + 23.0f * rgb[1][(indx + h3) >> 1] + rgb[1][(indx + h5) >> 1] + rgb[1][(indx - h1) >> 1] + 40.0f * rgb[0][indx1] - 32.0f * rgb[0][(indx1 + h1)] - 8.0f * rgb[0][(indx1 + h2)])) / 3145680.f, 0.0f, 1.0f); - wv = LIM(((23.0f * rgb[1][(indx - h1) >> 1] + 23.0f * rgb[1][(indx - h3) >> 1] + rgb[1][(indx - h5) >> 1] + rgb[1][(indx + h1) >> 1] + 40.0f * rgb[0][indx1] - 32.0f * rgb[0][(indx1 - h1)] - 8.0f * rgb[0][(indx1 - h2)])) / 3145680.f, 0.0f, 1.0f); - sv = LIM(((23.0f * rgb[1][(indx + v1) >> 1] + 23.0f * rgb[1][(indx + v3) >> 1] + rgb[1][(indx + v5) >> 1] + rgb[1][(indx - v1) >> 1] + 40.0f * rgb[0][indx1] - 32.0f * rgb[0][(indx1 + v1)] - 8.0f * rgb[0][(indx1 + v2)])) / 3145680.f, 0.0f, 1.0f); - //Horizontal and vertical color differences - vdif[indx1] = (sg * nv + ng * sv) / (ng + sg) - (rgb[0][indx1]) / 65535.f; - hdif[indx1] = (wg * ev + eg * wv) / (eg + wg) - (rgb[0][indx1]) / 65535.f; - } - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.26); - } - } -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 7; row < height - 7; row++) { - int col, d, indx1; - - for (col = 7 + (FC(row, 1) & 1), indx1 = (row * width + col) >> 1, d = FC(row, col) / 2; col < width - 14; col += 8, indx1 += 4) { - //H&V integrated gaussian vector over variance on color differences - //Mod Jacques 3/2013 - ngv = LIMV(epssqv + c78v * SQRV(LVFU(vdif[indx1])) + c69v * (SQRV(LVFU(vdif[indx1 - v1])) + SQRV(LVFU(vdif[indx1 + v1]))) + c51v * (SQRV(LVFU(vdif[indx1 - v2])) + SQRV(LVFU(vdif[indx1 + v2]))) + c21v * (SQRV(LVFU(vdif[indx1 - v3])) + SQRV(LVFU(vdif[indx1 + v3]))) - c6v * SQRV(LVFU(vdif[indx1 - v1]) + LVFU(vdif[indx1]) + LVFU(vdif[indx1 + v1])) - - c10v * (SQRV(LVFU(vdif[indx1 - v2]) + LVFU(vdif[indx1 - v1]) + LVFU(vdif[indx1])) + SQRV(LVFU(vdif[indx1]) + LVFU(vdif[indx1 + v1]) + LVFU(vdif[indx1 + v2]))) - c7v * (SQRV(LVFU(vdif[indx1 - v3]) + LVFU(vdif[indx1 - v2]) + LVFU(vdif[indx1 - v1])) + SQRV(LVFU(vdif[indx1 + v1]) + LVFU(vdif[indx1 + v2]) + LVFU(vdif[indx1 + v3]))), zerov, onev); - egv = LIMV(epssqv + c78v * SQRV(LVFU(hdif[indx1])) + c69v * (SQRV(LVFU(hdif[indx1 - h1])) + SQRV(LVFU(hdif[indx1 + h1]))) + c51v * (SQRV(LVFU(hdif[indx1 - h2])) + SQRV(LVFU(hdif[indx1 + h2]))) + c21v * (SQRV(LVFU(hdif[indx1 - h3])) + SQRV(LVFU(hdif[indx1 + h3]))) - c6v * SQRV(LVFU(hdif[indx1 - h1]) + LVFU(hdif[indx1]) + LVFU(hdif[indx1 + h1])) - - c10v * (SQRV(LVFU(hdif[indx1 - h2]) + LVFU(hdif[indx1 - h1]) + LVFU(hdif[indx1])) + SQRV(LVFU(hdif[indx1]) + LVFU(hdif[indx1 + h1]) + LVFU(hdif[indx1 + h2]))) - c7v * (SQRV(LVFU(hdif[indx1 - h3]) + LVFU(hdif[indx1 - h2]) + LVFU(hdif[indx1 - h1])) + SQRV(LVFU(hdif[indx1 + h1]) + LVFU(hdif[indx1 + h2]) + LVFU(hdif[indx1 + h3]))), zerov, onev); - //Limit chrominance using H/V neighbourhood - nvv = median(d725v * LVFU(vdif[indx1]) + d1375v * LVFU(vdif[indx1 - v1]) + d1375v * LVFU(vdif[indx1 + v1]), LVFU(vdif[indx1 - v1]), LVFU(vdif[indx1 + v1])); - evv = median(d725v * LVFU(hdif[indx1]) + d1375v * LVFU(hdif[indx1 - h1]) + d1375v * LVFU(hdif[indx1 + h1]), LVFU(hdif[indx1 - h1]), LVFU(hdif[indx1 + h1])); - //Chrominance estimation - tempv = (egv * nvv + ngv * evv) / (ngv + egv); - _mm_storeu_ps(&(chr[d][indx1]), tempv); - //Green channel population - temp1v = c65535v * tempv + LVFU(rgb[0][indx1]); - _mm_storeu_ps( &(rgb[0][indx1]), temp1v ); - } - - for (; col < width - 7; col += 2, indx1++) { - //H&V integrated gaussian vector over variance on color differences - //Mod Jacques 3/2013 - ng = LIM(epssq + 78.0f * SQR(vdif[indx1]) + 69.0f * (SQR(vdif[indx1 - v1]) + SQR(vdif[indx1 + v1])) + 51.0f * (SQR(vdif[indx1 - v2]) + SQR(vdif[indx1 + v2])) + 21.0f * (SQR(vdif[indx1 - v3]) + SQR(vdif[indx1 + v3])) - 6.0f * SQR(vdif[indx1 - v1] + vdif[indx1] + vdif[indx1 + v1]) - - 10.0f * (SQR(vdif[indx1 - v2] + vdif[indx1 - v1] + vdif[indx1]) + SQR(vdif[indx1] + vdif[indx1 + v1] + vdif[indx1 + v2])) - 7.0f * (SQR(vdif[indx1 - v3] + vdif[indx1 - v2] + vdif[indx1 - v1]) + SQR(vdif[indx1 + v1] + vdif[indx1 + v2] + vdif[indx1 + v3])), 0.f, 1.f); - eg = LIM(epssq + 78.0f * SQR(hdif[indx1]) + 69.0f * (SQR(hdif[indx1 - h1]) + SQR(hdif[indx1 + h1])) + 51.0f * (SQR(hdif[indx1 - h2]) + SQR(hdif[indx1 + h2])) + 21.0f * (SQR(hdif[indx1 - h3]) + SQR(hdif[indx1 + h3])) - 6.0f * SQR(hdif[indx1 - h1] + hdif[indx1] + hdif[indx1 + h1]) - - 10.0f * (SQR(hdif[indx1 - h2] + hdif[indx1 - h1] + hdif[indx1]) + SQR(hdif[indx1] + hdif[indx1 + h1] + hdif[indx1 + h2])) - 7.0f * (SQR(hdif[indx1 - h3] + hdif[indx1 - h2] + hdif[indx1 - h1]) + SQR(hdif[indx1 + h1] + hdif[indx1 + h2] + hdif[indx1 + h3])), 0.f, 1.f); - //Limit chrominance using H/V neighbourhood - nv = median(0.725f * vdif[indx1] + 0.1375f * vdif[indx1 - v1] + 0.1375f * vdif[indx1 + v1], vdif[indx1 - v1], vdif[indx1 + v1]); - ev = median(0.725f * hdif[indx1] + 0.1375f * hdif[indx1 - h1] + 0.1375f * hdif[indx1 + h1], hdif[indx1 - h1], hdif[indx1 + h1]); - //Chrominance estimation - chr[d][indx1] = (eg * nv + ng * ev) / (ng + eg); - //Green channel population - rgb[0][indx1] = rgb[0][indx1] + 65535.f * chr[d][indx1]; - } - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.39); - } - } -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 7; row < height - 7; row++) { - int col, indx, c; - - for (col = 7 + (FC(row, 1) & 1), indx = row * width + col, c = 1 - FC(row, col) / 2; col < width - 14; col += 8, indx += 8) { - //NW,NE,SW,SE Gradients - nwgv = onev / (epsv + vabsf(LVFU(chr[c][(indx - v1 - h1) >> 1]) - LVFU(chr[c][(indx - v3 - h3) >> 1])) + vabsf(LVFU(chr[c][(indx + v1 + h1) >> 1]) - LVFU(chr[c][(indx - v3 - h3) >> 1]))); - negv = onev / (epsv + vabsf(LVFU(chr[c][(indx - v1 + h1) >> 1]) - LVFU(chr[c][(indx - v3 + h3) >> 1])) + vabsf(LVFU(chr[c][(indx + v1 - h1) >> 1]) - LVFU(chr[c][(indx - v3 + h3) >> 1]))); - swgv = onev / (epsv + vabsf(LVFU(chr[c][(indx + v1 - h1) >> 1]) - LVFU(chr[c][(indx + v3 + h3) >> 1])) + vabsf(LVFU(chr[c][(indx - v1 + h1) >> 1]) - LVFU(chr[c][(indx + v3 - h3) >> 1]))); - segv = onev / (epsv + vabsf(LVFU(chr[c][(indx + v1 + h1) >> 1]) - LVFU(chr[c][(indx + v3 - h3) >> 1])) + vabsf(LVFU(chr[c][(indx - v1 - h1) >> 1]) - LVFU(chr[c][(indx + v3 + h3) >> 1]))); - //Limit NW,NE,SW,SE Color differences - nwvv = median(LVFU(chr[c][(indx - v1 - h1) >> 1]), LVFU(chr[c][(indx - v3 - h1) >> 1]), LVFU(chr[c][(indx - v1 - h3) >> 1])); - nevv = median(LVFU(chr[c][(indx - v1 + h1) >> 1]), LVFU(chr[c][(indx - v3 + h1) >> 1]), LVFU(chr[c][(indx - v1 + h3) >> 1])); - swvv = median(LVFU(chr[c][(indx + v1 - h1) >> 1]), LVFU(chr[c][(indx + v3 - h1) >> 1]), LVFU(chr[c][(indx + v1 - h3) >> 1])); - sevv = median(LVFU(chr[c][(indx + v1 + h1) >> 1]), LVFU(chr[c][(indx + v3 + h1) >> 1]), LVFU(chr[c][(indx + v1 + h3) >> 1])); - //Interpolate chrominance: R@B and B@R - tempv = (nwgv * nwvv + negv * nevv + swgv * swvv + segv * sevv) / (nwgv + negv + swgv + segv); - _mm_storeu_ps( &(chr[c][indx >> 1]), tempv); - } - - for (; col < width - 7; col += 2, indx += 2) { - //NW,NE,SW,SE Gradients - nwg = 1.0f / (eps + fabsf(chr[c][(indx - v1 - h1) >> 1] - chr[c][(indx - v3 - h3) >> 1]) + fabsf(chr[c][(indx + v1 + h1) >> 1] - chr[c][(indx - v3 - h3) >> 1])); - neg = 1.0f / (eps + fabsf(chr[c][(indx - v1 + h1) >> 1] - chr[c][(indx - v3 + h3) >> 1]) + fabsf(chr[c][(indx + v1 - h1) >> 1] - chr[c][(indx - v3 + h3) >> 1])); - swg = 1.0f / (eps + fabsf(chr[c][(indx + v1 - h1) >> 1] - chr[c][(indx + v3 + h3) >> 1]) + fabsf(chr[c][(indx - v1 + h1) >> 1] - chr[c][(indx + v3 - h3) >> 1])); - seg = 1.0f / (eps + fabsf(chr[c][(indx + v1 + h1) >> 1] - chr[c][(indx + v3 - h3) >> 1]) + fabsf(chr[c][(indx - v1 - h1) >> 1] - chr[c][(indx + v3 + h3) >> 1])); - //Limit NW,NE,SW,SE Color differences - nwv = median(chr[c][(indx - v1 - h1) >> 1], chr[c][(indx - v3 - h1) >> 1], chr[c][(indx - v1 - h3) >> 1]); - nev = median(chr[c][(indx - v1 + h1) >> 1], chr[c][(indx - v3 + h1) >> 1], chr[c][(indx - v1 + h3) >> 1]); - swv = median(chr[c][(indx + v1 - h1) >> 1], chr[c][(indx + v3 - h1) >> 1], chr[c][(indx + v1 - h3) >> 1]); - sev = median(chr[c][(indx + v1 + h1) >> 1], chr[c][(indx + v3 + h1) >> 1], chr[c][(indx + v1 + h3) >> 1]); - //Interpolate chrominance: R@B and B@R - chr[c][indx >> 1] = (nwg * nwv + neg * nev + swg * swv + seg * sev) / (nwg + neg + swg + seg); - } - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.65); - } - } -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 7; row < height - 7; row++) { - int col, indx; - - for (col = 7 + (FC(row, 0) & 1), indx = row * width + col; col < width - 14; col += 8, indx += 8) { - //N,E,W,S Gradients - ngv = onev / (epsv + vabsf(LVFU(chr[0][(indx - v1) >> 1]) - LVFU(chr[0][(indx - v3) >> 1])) + vabsf(LVFU(chr[0][(indx + v1) >> 1]) - LVFU(chr[0][(indx - v3) >> 1]))); - egv = onev / (epsv + vabsf(LVFU(chr[0][(indx + h1) >> 1]) - LVFU(chr[0][(indx + h3) >> 1])) + vabsf(LVFU(chr[0][(indx - h1) >> 1]) - LVFU(chr[0][(indx + h3) >> 1]))); - wgv = onev / (epsv + vabsf(LVFU(chr[0][(indx - h1) >> 1]) - LVFU(chr[0][(indx - h3) >> 1])) + vabsf(LVFU(chr[0][(indx + h1) >> 1]) - LVFU(chr[0][(indx - h3) >> 1]))); - sgv = onev / (epsv + vabsf(LVFU(chr[0][(indx + v1) >> 1]) - LVFU(chr[0][(indx + v3) >> 1])) + vabsf(LVFU(chr[0][(indx - v1) >> 1]) - LVFU(chr[0][(indx + v3) >> 1]))); - //Interpolate chrominance: R@G and B@G - tempv = ((ngv * LVFU(chr[0][(indx - v1) >> 1]) + egv * LVFU(chr[0][(indx + h1) >> 1]) + wgv * LVFU(chr[0][(indx - h1) >> 1]) + sgv * LVFU(chr[0][(indx + v1) >> 1])) / (ngv + egv + wgv + sgv)); - _mm_storeu_ps( &chr[0 + 2][indx >> 1], tempv); - } - - for (; col < width - 7; col += 2, indx += 2) { - //N,E,W,S Gradients - ng = 1.0f / (eps + fabsf(chr[0][(indx - v1) >> 1] - chr[0][(indx - v3) >> 1]) + fabsf(chr[0][(indx + v1) >> 1] - chr[0][(indx - v3) >> 1])); - eg = 1.0f / (eps + fabsf(chr[0][(indx + h1) >> 1] - chr[0][(indx + h3) >> 1]) + fabsf(chr[0][(indx - h1) >> 1] - chr[0][(indx + h3) >> 1])); - wg = 1.0f / (eps + fabsf(chr[0][(indx - h1) >> 1] - chr[0][(indx - h3) >> 1]) + fabsf(chr[0][(indx + h1) >> 1] - chr[0][(indx - h3) >> 1])); - sg = 1.0f / (eps + fabsf(chr[0][(indx + v1) >> 1] - chr[0][(indx + v3) >> 1]) + fabsf(chr[0][(indx - v1) >> 1] - chr[0][(indx + v3) >> 1])); - //Interpolate chrominance: R@G and B@G - chr[0 + 2][indx >> 1] = ((ng * chr[0][(indx - v1) >> 1] + eg * chr[0][(indx + h1) >> 1] + wg * chr[0][(indx - h1) >> 1] + sg * chr[0][(indx + v1) >> 1]) / (ng + eg + wg + sg)); - } - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.78); - } - } -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 7; row < height - 7; row++) { - int col, indx; - - for (col = 7 + (FC(row, 0) & 1), indx = row * width + col; col < width - 14; col += 8, indx += 8) { - //N,E,W,S Gradients - ngv = onev / (epsv + vabsf(LVFU(chr[1][(indx - v1) >> 1]) - LVFU(chr[1][(indx - v3) >> 1])) + vabsf(LVFU(chr[1][(indx + v1) >> 1]) - LVFU(chr[1][(indx - v3) >> 1]))); - egv = onev / (epsv + vabsf(LVFU(chr[1][(indx + h1) >> 1]) - LVFU(chr[1][(indx + h3) >> 1])) + vabsf(LVFU(chr[1][(indx - h1) >> 1]) - LVFU(chr[1][(indx + h3) >> 1]))); - wgv = onev / (epsv + vabsf(LVFU(chr[1][(indx - h1) >> 1]) - LVFU(chr[1][(indx - h3) >> 1])) + vabsf(LVFU(chr[1][(indx + h1) >> 1]) - LVFU(chr[1][(indx - h3) >> 1]))); - sgv = onev / (epsv + vabsf(LVFU(chr[1][(indx + v1) >> 1]) - LVFU(chr[1][(indx + v3) >> 1])) + vabsf(LVFU(chr[1][(indx - v1) >> 1]) - LVFU(chr[1][(indx + v3) >> 1]))); - //Interpolate chrominance: R@G and B@G - tempv = ((ngv * LVFU(chr[1][(indx - v1) >> 1]) + egv * LVFU(chr[1][(indx + h1) >> 1]) + wgv * LVFU(chr[1][(indx - h1) >> 1]) + sgv * LVFU(chr[1][(indx + v1) >> 1])) / (ngv + egv + wgv + sgv)); - _mm_storeu_ps( &chr[1 + 2][indx >> 1], tempv); - } - - for (; col < width - 7; col += 2, indx += 2) { - //N,E,W,S Gradients - ng = 1.0f / (eps + fabsf(chr[1][(indx - v1) >> 1] - chr[1][(indx - v3) >> 1]) + fabsf(chr[1][(indx + v1) >> 1] - chr[1][(indx - v3) >> 1])); - eg = 1.0f / (eps + fabsf(chr[1][(indx + h1) >> 1] - chr[1][(indx + h3) >> 1]) + fabsf(chr[1][(indx - h1) >> 1] - chr[1][(indx + h3) >> 1])); - wg = 1.0f / (eps + fabsf(chr[1][(indx - h1) >> 1] - chr[1][(indx - h3) >> 1]) + fabsf(chr[1][(indx + h1) >> 1] - chr[1][(indx - h3) >> 1])); - sg = 1.0f / (eps + fabsf(chr[1][(indx + v1) >> 1] - chr[1][(indx + v3) >> 1]) + fabsf(chr[1][(indx - v1) >> 1] - chr[1][(indx + v3) >> 1])); - //Interpolate chrominance: R@G and B@G - chr[1 + 2][indx >> 1] = ((ng * chr[1][(indx - v1) >> 1] + eg * chr[1][(indx + h1) >> 1] + wg * chr[1][(indx - h1) >> 1] + sg * chr[1][(indx + v1) >> 1]) / (ng + eg + wg + sg)); - } - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.91); - } - } - float *src1, *src2, *redsrc0, *redsrc1, *bluesrc0, *bluesrc1; -#ifdef _OPENMP - #pragma omp for -#endif - - for(int row = 7; row < height - 7; row++) { - int col, indx, fc; - fc = FC(row, 7) & 1; - src1 = rgb[fc]; - src2 = rgb[fc ^ 1]; - redsrc0 = chr[fc << 1]; - redsrc1 = chr[(fc ^ 1) << 1]; - bluesrc0 = chr[(fc << 1) + 1]; - bluesrc1 = chr[((fc ^ 1) << 1) + 1]; - - for(col = 7, indx = row * width + col; col < width - 14; col += 8, indx += 8) { - temp1v = LVFU( src1[indx >> 1] ); - temp2v = LVFU( src2[(indx + 1) >> 1] ); - tempv = _mm_shuffle_ps( temp1v, temp2v, _MM_SHUFFLE( 1, 0, 1, 0 ) ); - tempv = _mm_shuffle_ps( tempv, tempv, _MM_SHUFFLE( 3, 1, 2, 0 ) ); - _mm_storeu_ps( &green[row][col], CLIPV( tempv )); - temp5v = LVFU(redsrc0[indx >> 1]); - temp6v = LVFU(redsrc1[(indx + 1) >> 1]); - temp3v = _mm_shuffle_ps( temp5v, temp6v, _MM_SHUFFLE( 1, 0, 1, 0 ) ); - temp3v = _mm_shuffle_ps( temp3v, temp3v, _MM_SHUFFLE( 3, 1, 2, 0 ) ); - temp3v = CLIPV( tempv - c65535v * temp3v ); - _mm_storeu_ps( &red[row][col], temp3v); - temp7v = LVFU(bluesrc0[indx >> 1]); - temp8v = LVFU(bluesrc1[(indx + 1) >> 1]); - temp4v = _mm_shuffle_ps( temp7v, temp8v, _MM_SHUFFLE( 1, 0, 1, 0 ) ); - temp4v = _mm_shuffle_ps( temp4v, temp4v, _MM_SHUFFLE( 3, 1, 2, 0 ) ); - temp4v = CLIPV( tempv - c65535v * temp4v ); - _mm_storeu_ps( &blue[row][col], temp4v); - - tempv = _mm_shuffle_ps( temp1v, temp2v, _MM_SHUFFLE( 3, 2, 3, 2 ) ); - tempv = _mm_shuffle_ps( tempv, tempv, _MM_SHUFFLE( 3, 1, 2, 0 ) ); - _mm_storeu_ps( &green[row][col + 4], CLIPV( tempv )); - - temp3v = _mm_shuffle_ps( temp5v, temp6v, _MM_SHUFFLE( 3, 2, 3, 2 ) ); - temp3v = _mm_shuffle_ps( temp3v, temp3v, _MM_SHUFFLE( 3, 1, 2, 0 ) ); - temp3v = CLIPV( tempv - c65535v * temp3v ); - _mm_storeu_ps( &red[row][col + 4], temp3v); - temp4v = _mm_shuffle_ps( temp7v, temp8v, _MM_SHUFFLE( 3, 2, 3, 2 ) ); - temp4v = _mm_shuffle_ps( temp4v, temp4v, _MM_SHUFFLE( 3, 1, 2, 0 ) ); - temp4v = CLIPV( tempv - c65535v * temp4v ); - _mm_storeu_ps( &blue[row][col + 4], temp4v); - } - - for(; col < width - 7; col++, indx += 2) { - red [row][col] = CLIP(src1[indx >> 1] - 65535.f * redsrc0[indx >> 1]); - green[row][col] = CLIP(src1[indx >> 1]); - blue [row][col] = CLIP(src1[indx >> 1] - 65535.f * bluesrc0[indx >> 1]); - col++; - red [row][col] = CLIP(src2[(indx + 1) >> 1] - 65535.f * redsrc1[(indx + 1) >> 1]); - green[row][col] = CLIP(src2[(indx + 1) >> 1]); - blue [row][col] = CLIP(src2[(indx + 1) >> 1] - 65535.f * bluesrc1[(indx + 1) >> 1]); - } - } - }// End of parallelization - - if (plistener) { - plistener->setProgress (1.0); - } - - free(chrarray); - free(rgbarray); - free(vdif); - free(hdif); -} -#undef CLIPV -#else -void RawImageSource::igv_interpolate(int winw, int winh) -{ - static const float eps = 1e-5f, epssq = 1e-5f; //mod epssq -10f =>-5f Jacques 3/2013 to prevent artifact (divide by zero) - static const int h1 = 1, h2 = 2, h3 = 3, h4 = 4, h5 = 5, h6 = 6; - const int width = winw, height = winh; - const int v1 = 1 * width, v2 = 2 * width, v3 = 3 * width, v4 = 4 * width, v5 = 5 * width, v6 = 6 * width; - float* rgb[3]; - float* chr[2]; - float (*rgbarray), *vdif, *hdif, (*chrarray); - - rgbarray = (float (*)) calloc(width * height * 3, sizeof( float)); - rgb[0] = rgbarray; - rgb[1] = rgbarray + (width * height); - rgb[2] = rgbarray + 2 * (width * height); - - chrarray = (float (*)) calloc(width * height * 2, sizeof( float)); - chr[0] = chrarray; - chr[1] = chrarray + (width * height); - - vdif = (float (*)) calloc(width * height / 2, sizeof * vdif); - hdif = (float (*)) calloc(width * height / 2, sizeof * hdif); - - border_interpolate2(winw, winh, 7); - - if (plistener) { - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV))); - plistener->setProgress (0.0); - } - -#ifdef _OPENMP - #pragma omp parallel default(none) shared(rgb,vdif,hdif,chr) -#endif - { - - float ng, eg, wg, sg, nv, ev, wv, sv, nwg, neg, swg, seg, nwv, nev, swv, sev; - -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 0; row < height - 0; row++) - for (int col = 0, indx = row * width + col; col < width - 0; col++, indx++) { - int c = FC(row, col); - rgb[c][indx] = CLIP(rawData[row][col]); //rawData = RT datas - } - -// border_interpolate2(7, rgb); - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.13); - } - } - -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 5; row < height - 5; row++) - for (int col = 5 + (FC(row, 1) & 1), indx = row * width + col, c = FC(row, col); col < width - 5; col += 2, indx += 2) { - //N,E,W,S Gradients - ng = (eps + (fabsf(rgb[1][indx - v1] - rgb[1][indx - v3]) + fabsf(rgb[c][indx] - rgb[c][indx - v2])) / 65535.f);; - eg = (eps + (fabsf(rgb[1][indx + h1] - rgb[1][indx + h3]) + fabsf(rgb[c][indx] - rgb[c][indx + h2])) / 65535.f); - wg = (eps + (fabsf(rgb[1][indx - h1] - rgb[1][indx - h3]) + fabsf(rgb[c][indx] - rgb[c][indx - h2])) / 65535.f); - sg = (eps + (fabsf(rgb[1][indx + v1] - rgb[1][indx + v3]) + fabsf(rgb[c][indx] - rgb[c][indx + v2])) / 65535.f); - //N,E,W,S High Order Interpolation (Li & Randhawa) - //N,E,W,S Hamilton Adams Interpolation - // (48.f * 65535.f) = 3145680.f - nv = LIM(((23.0f * rgb[1][indx - v1] + 23.0f * rgb[1][indx - v3] + rgb[1][indx - v5] + rgb[1][indx + v1] + 40.0f * rgb[c][indx] - 32.0f * rgb[c][indx - v2] - 8.0f * rgb[c][indx - v4])) / 3145680.f, 0.0f, 1.0f); - ev = LIM(((23.0f * rgb[1][indx + h1] + 23.0f * rgb[1][indx + h3] + rgb[1][indx + h5] + rgb[1][indx - h1] + 40.0f * rgb[c][indx] - 32.0f * rgb[c][indx + h2] - 8.0f * rgb[c][indx + h4])) / 3145680.f, 0.0f, 1.0f); - wv = LIM(((23.0f * rgb[1][indx - h1] + 23.0f * rgb[1][indx - h3] + rgb[1][indx - h5] + rgb[1][indx + h1] + 40.0f * rgb[c][indx] - 32.0f * rgb[c][indx - h2] - 8.0f * rgb[c][indx - h4])) / 3145680.f, 0.0f, 1.0f); - sv = LIM(((23.0f * rgb[1][indx + v1] + 23.0f * rgb[1][indx + v3] + rgb[1][indx + v5] + rgb[1][indx - v1] + 40.0f * rgb[c][indx] - 32.0f * rgb[c][indx + v2] - 8.0f * rgb[c][indx + v4])) / 3145680.f, 0.0f, 1.0f); - //Horizontal and vertical color differences - vdif[indx >> 1] = (sg * nv + ng * sv) / (ng + sg) - (rgb[c][indx]) / 65535.f; - hdif[indx >> 1] = (wg * ev + eg * wv) / (eg + wg) - (rgb[c][indx]) / 65535.f; - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.26); - } - } - -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 7; row < height - 7; row++) - for (int col = 7 + (FC(row, 1) & 1), indx = row * width + col, c = FC(row, col), d = c / 2; col < width - 7; col += 2, indx += 2) { - //H&V integrated gaussian vector over variance on color differences - //Mod Jacques 3/2013 - ng = LIM(epssq + 78.0f * SQR(vdif[indx >> 1]) + 69.0f * (SQR(vdif[(indx - v2) >> 1]) + SQR(vdif[(indx + v2) >> 1])) + 51.0f * (SQR(vdif[(indx - v4) >> 1]) + SQR(vdif[(indx + v4) >> 1])) + 21.0f * (SQR(vdif[(indx - v6) >> 1]) + SQR(vdif[(indx + v6) >> 1])) - 6.0f * SQR(vdif[(indx - v2) >> 1] + vdif[indx >> 1] + vdif[(indx + v2) >> 1]) - - 10.0f * (SQR(vdif[(indx - v4) >> 1] + vdif[(indx - v2) >> 1] + vdif[indx >> 1]) + SQR(vdif[indx >> 1] + vdif[(indx + v2) >> 1] + vdif[(indx + v4) >> 1])) - 7.0f * (SQR(vdif[(indx - v6) >> 1] + vdif[(indx - v4) >> 1] + vdif[(indx - v2) >> 1]) + SQR(vdif[(indx + v2) >> 1] + vdif[(indx + v4) >> 1] + vdif[(indx + v6) >> 1])), 0.f, 1.f); - eg = LIM(epssq + 78.0f * SQR(hdif[indx >> 1]) + 69.0f * (SQR(hdif[(indx - h2) >> 1]) + SQR(hdif[(indx + h2) >> 1])) + 51.0f * (SQR(hdif[(indx - h4) >> 1]) + SQR(hdif[(indx + h4) >> 1])) + 21.0f * (SQR(hdif[(indx - h6) >> 1]) + SQR(hdif[(indx + h6) >> 1])) - 6.0f * SQR(hdif[(indx - h2) >> 1] + hdif[indx >> 1] + hdif[(indx + h2) >> 1]) - - 10.0f * (SQR(hdif[(indx - h4) >> 1] + hdif[(indx - h2) >> 1] + hdif[indx >> 1]) + SQR(hdif[indx >> 1] + hdif[(indx + h2) >> 1] + hdif[(indx + h4) >> 1])) - 7.0f * (SQR(hdif[(indx - h6) >> 1] + hdif[(indx - h4) >> 1] + hdif[(indx - h2) >> 1]) + SQR(hdif[(indx + h2) >> 1] + hdif[(indx + h4) >> 1] + hdif[(indx + h6) >> 1])), 0.f, 1.f); - //Limit chrominance using H/V neighbourhood - nv = median(0.725f * vdif[indx >> 1] + 0.1375f * vdif[(indx - v2) >> 1] + 0.1375f * vdif[(indx + v2) >> 1], vdif[(indx - v2) >> 1], vdif[(indx + v2) >> 1]); - ev = median(0.725f * hdif[indx >> 1] + 0.1375f * hdif[(indx - h2) >> 1] + 0.1375f * hdif[(indx + h2) >> 1], hdif[(indx - h2) >> 1], hdif[(indx + h2) >> 1]); - //Chrominance estimation - chr[d][indx] = (eg * nv + ng * ev) / (ng + eg); - //Green channel population - rgb[1][indx] = rgb[c][indx] + 65535.f * chr[d][indx]; - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.39); - } - } - -// free(vdif); free(hdif); -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 7; row < height - 7; row += 2) - for (int col = 7 + (FC(row, 1) & 1), indx = row * width + col, c = 1 - FC(row, col) / 2; col < width - 7; col += 2, indx += 2) { - //NW,NE,SW,SE Gradients - nwg = 1.0f / (eps + fabsf(chr[c][indx - v1 - h1] - chr[c][indx - v3 - h3]) + fabsf(chr[c][indx + v1 + h1] - chr[c][indx - v3 - h3])); - neg = 1.0f / (eps + fabsf(chr[c][indx - v1 + h1] - chr[c][indx - v3 + h3]) + fabsf(chr[c][indx + v1 - h1] - chr[c][indx - v3 + h3])); - swg = 1.0f / (eps + fabsf(chr[c][indx + v1 - h1] - chr[c][indx + v3 + h3]) + fabsf(chr[c][indx - v1 + h1] - chr[c][indx + v3 - h3])); - seg = 1.0f / (eps + fabsf(chr[c][indx + v1 + h1] - chr[c][indx + v3 - h3]) + fabsf(chr[c][indx - v1 - h1] - chr[c][indx + v3 + h3])); - //Limit NW,NE,SW,SE Color differences - nwv = median(chr[c][indx - v1 - h1], chr[c][indx - v3 - h1], chr[c][indx - v1 - h3]); - nev = median(chr[c][indx - v1 + h1], chr[c][indx - v3 + h1], chr[c][indx - v1 + h3]); - swv = median(chr[c][indx + v1 - h1], chr[c][indx + v3 - h1], chr[c][indx + v1 - h3]); - sev = median(chr[c][indx + v1 + h1], chr[c][indx + v3 + h1], chr[c][indx + v1 + h3]); - //Interpolate chrominance: R@B and B@R - chr[c][indx] = (nwg * nwv + neg * nev + swg * swv + seg * sev) / (nwg + neg + swg + seg); - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.52); - } - } -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 8; row < height - 7; row += 2) - for (int col = 7 + (FC(row, 1) & 1), indx = row * width + col, c = 1 - FC(row, col) / 2; col < width - 7; col += 2, indx += 2) { - //NW,NE,SW,SE Gradients - nwg = 1.0f / (eps + fabsf(chr[c][indx - v1 - h1] - chr[c][indx - v3 - h3]) + fabsf(chr[c][indx + v1 + h1] - chr[c][indx - v3 - h3])); - neg = 1.0f / (eps + fabsf(chr[c][indx - v1 + h1] - chr[c][indx - v3 + h3]) + fabsf(chr[c][indx + v1 - h1] - chr[c][indx - v3 + h3])); - swg = 1.0f / (eps + fabsf(chr[c][indx + v1 - h1] - chr[c][indx + v3 + h3]) + fabsf(chr[c][indx - v1 + h1] - chr[c][indx + v3 - h3])); - seg = 1.0f / (eps + fabsf(chr[c][indx + v1 + h1] - chr[c][indx + v3 - h3]) + fabsf(chr[c][indx - v1 - h1] - chr[c][indx + v3 + h3])); - //Limit NW,NE,SW,SE Color differences - nwv = median(chr[c][indx - v1 - h1], chr[c][indx - v3 - h1], chr[c][indx - v1 - h3]); - nev = median(chr[c][indx - v1 + h1], chr[c][indx - v3 + h1], chr[c][indx - v1 + h3]); - swv = median(chr[c][indx + v1 - h1], chr[c][indx + v3 - h1], chr[c][indx + v1 - h3]); - sev = median(chr[c][indx + v1 + h1], chr[c][indx + v3 + h1], chr[c][indx + v1 + h3]); - //Interpolate chrominance: R@B and B@R - chr[c][indx] = (nwg * nwv + neg * nev + swg * swv + seg * sev) / (nwg + neg + swg + seg); - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.65); - } - } -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 7; row < height - 7; row++) - for (int col = 7 + (FC(row, 0) & 1), indx = row * width + col; col < width - 7; col += 2, indx += 2) { - //N,E,W,S Gradients - ng = 1.0f / (eps + fabsf(chr[0][indx - v1] - chr[0][indx - v3]) + fabsf(chr[0][indx + v1] - chr[0][indx - v3])); - eg = 1.0f / (eps + fabsf(chr[0][indx + h1] - chr[0][indx + h3]) + fabsf(chr[0][indx - h1] - chr[0][indx + h3])); - wg = 1.0f / (eps + fabsf(chr[0][indx - h1] - chr[0][indx - h3]) + fabsf(chr[0][indx + h1] - chr[0][indx - h3])); - sg = 1.0f / (eps + fabsf(chr[0][indx + v1] - chr[0][indx + v3]) + fabsf(chr[0][indx - v1] - chr[0][indx + v3])); - //Interpolate chrominance: R@G and B@G - chr[0][indx] = ((ng * chr[0][indx - v1] + eg * chr[0][indx + h1] + wg * chr[0][indx - h1] + sg * chr[0][indx + v1]) / (ng + eg + wg + sg)); - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.78); - } - } -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 7; row < height - 7; row++) - for (int col = 7 + (FC(row, 0) & 1), indx = row * width + col; col < width - 7; col += 2, indx += 2) { - - //N,E,W,S Gradients - ng = 1.0f / (eps + fabsf(chr[1][indx - v1] - chr[1][indx - v3]) + fabsf(chr[1][indx + v1] - chr[1][indx - v3])); - eg = 1.0f / (eps + fabsf(chr[1][indx + h1] - chr[1][indx + h3]) + fabsf(chr[1][indx - h1] - chr[1][indx + h3])); - wg = 1.0f / (eps + fabsf(chr[1][indx - h1] - chr[1][indx - h3]) + fabsf(chr[1][indx + h1] - chr[1][indx - h3])); - sg = 1.0f / (eps + fabsf(chr[1][indx + v1] - chr[1][indx + v3]) + fabsf(chr[1][indx - v1] - chr[1][indx + v3])); - //Interpolate chrominance: R@G and B@G - chr[1][indx] = ((ng * chr[1][indx - v1] + eg * chr[1][indx + h1] + wg * chr[1][indx - h1] + sg * chr[1][indx + v1]) / (ng + eg + wg + sg)); - } - -#ifdef _OPENMP - #pragma omp single -#endif - { - if (plistener) { - plistener->setProgress (0.91); - } - - //Interpolate borders -// border_interpolate2(7, rgb); - } - /* -#ifdef _OPENMP - #pragma omp for -#endif - for (int row=0; row < height; row++) //borders - for (int col=0; col < width; col++) { - if (col==7 && row >= 7 && row < height-7) - col = width-7; - int indxc=row*width+col; - red [row][col] = rgb[indxc][0]; - green[row][col] = rgb[indxc][1]; - blue [row][col] = rgb[indxc][2]; - } - */ - -#ifdef _OPENMP - #pragma omp for -#endif - - for(int row = 7; row < height - 7; row++) - for(int col = 7, indx = row * width + col; col < width - 7; col++, indx++) { - red [row][col] = CLIP(rgb[1][indx] - 65535.f * chr[0][indx]); - green[row][col] = CLIP(rgb[1][indx]); - blue [row][col] = CLIP(rgb[1][indx] - 65535.f * chr[1][indx]); - } - }// End of parallelization - - if (plistener) { - plistener->setProgress (1.0); - } - - free(chrarray); - free(rgbarray); - free(vdif); - free(hdif); -} -#endif - - -/* - Adaptive Homogeneity-Directed interpolation is based on - the work of Keigo Hirakawa, Thomas Parks, and Paul Lee. - */ -#define TS 256 /* Tile Size */ -#define FORC(cnt) for (c=0; c < cnt; c++) -#define FORC3 FORC(3) - -void RawImageSource::ahd_demosaic() -{ - int i, j, k, top, left, row, col, tr, tc, c, d, val, hm[2]; - float (*pix)[4], (*rix)[3]; - static const int dir[4] = { -1, 1, -TS, TS }; - float ldiff[2][4], abdiff[2][4], leps, abeps; - float xyz[3], xyz_cam[3][4]; - float* cbrt; - float (*rgb)[TS][TS][3]; - float (*lab)[TS][TS][3]; - float (*lix)[3]; - char (*homo)[TS][TS], *buffer; - double r; - - int width = W, height = H; - float (*image)[4]; - unsigned int colors = 3; - - const double xyz_rgb[3][3] = { /* XYZ from RGB */ - { 0.412453, 0.357580, 0.180423 }, - { 0.212671, 0.715160, 0.072169 }, - { 0.019334, 0.119193, 0.950227 } - }; - - const float d65_white[3] = { 0.950456, 1, 1.088754 }; - - if (plistener) { - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AHD))); - plistener->setProgress (0.0); - } - - image = (float (*)[4]) calloc (H * W, sizeof * image); - - for (int ii = 0; ii < H; ii++) - for (int jj = 0; jj < W; jj++) { - image[ii * W + jj][fc(ii, jj)] = rawData[ii][jj]; - } - - cbrt = (float (*)) calloc (0x10000, sizeof * cbrt); - - for (i = 0; i < 0x10000; i++) { - r = (double)i / 65535.0; - cbrt[i] = r > 0.008856 ? std::cbrt(r) : 7.787 * r + 16 / 116.0; - } - - for (i = 0; i < 3; i++) - for (unsigned int j = 0; j < colors; j++) - for (xyz_cam[i][j] = k = 0; k < 3; k++) { - xyz_cam[i][j] += xyz_rgb[i][k] * imatrices.rgb_cam[k][j] / d65_white[i]; - } - - border_interpolate(5, image); - buffer = (char *) malloc (13 * TS * TS * sizeof(float)); /* 1664 kB */ - //merror (buffer, "ahd_interpolate()"); - rgb = (float(*)[TS][TS][3]) buffer; - lab = (float(*)[TS][TS][3])(buffer + 6 * TS * TS * sizeof(float)); - homo = (char (*)[TS][TS]) (buffer + 12 * TS * TS * sizeof(float)); - - // helper variables for progress indication - int n_tiles = ((height - 7 + (TS - 7)) / (TS - 6)) * ((width - 7 + (TS - 7)) / (TS - 6)); - int tile = 0; - - for (top = 2; top < height - 5; top += TS - 6) - for (left = 2; left < width - 5; left += TS - 6) { - /* Interpolate green horizontally and vertically: */ - for (row = top; row < top + TS && row < height - 2; row++) { - col = left + (FC(row, left) & 1); - - for (c = FC(row, col); col < left + TS && col < width - 2; col += 2) { - pix = image + (row * width + col); - val = 0.25 * ((pix[-1][1] + pix[0][c] + pix[1][1]) * 2 - - pix[-2][c] - pix[2][c]) ; - rgb[0][row - top][col - left][1] = median(static_cast(val), pix[-1][1], pix[1][1]); - val = 0.25 * ((pix[-width][1] + pix[0][c] + pix[width][1]) * 2 - - pix[-2 * width][c] - pix[2 * width][c]) ; - rgb[1][row - top][col - left][1] = median(static_cast(val), pix[-width][1], pix[width][1]); - } - } - - /* Interpolate red and blue, and convert to CIELab: */ - for (d = 0; d < 2; d++) - for (row = top + 1; row < top + TS - 1 && row < height - 3; row++) - for (col = left + 1; col < left + TS - 1 && col < width - 3; col++) { - pix = image + (row * width + col); - rix = &rgb[d][row - top][col - left]; - lix = &lab[d][row - top][col - left]; - - if ((c = 2 - FC(row, col)) == 1) { - c = FC(row + 1, col); - val = pix[0][1] + (0.5 * ( pix[-1][2 - c] + pix[1][2 - c] - - rix[-1][1] - rix[1][1] ) ); - rix[0][2 - c] = CLIP(val); - val = pix[0][1] + (0.5 * ( pix[-width][c] + pix[width][c] - - rix[-TS][1] - rix[TS][1] ) ); - } else - val = rix[0][1] + (0.25 * ( pix[-width - 1][c] + pix[-width + 1][c] - + pix[+width - 1][c] + pix[+width + 1][c] - - rix[-TS - 1][1] - rix[-TS + 1][1] - - rix[+TS - 1][1] - rix[+TS + 1][1]) ); - - rix[0][c] = CLIP(val); - c = FC(row, col); - rix[0][c] = pix[0][c]; - xyz[0] = xyz[1] = xyz[2] = 0.0; - FORCC { - xyz[0] += xyz_cam[0][c] * rix[0][c]; - xyz[1] += xyz_cam[1][c] * rix[0][c]; - xyz[2] += xyz_cam[2][c] * rix[0][c]; - } - - xyz[0] = CurveFactory::flinterp(cbrt, xyz[0]); - xyz[1] = CurveFactory::flinterp(cbrt, xyz[1]); - xyz[2] = CurveFactory::flinterp(cbrt, xyz[2]); - - //xyz[0] = xyz[0] > 0.008856 ? pow(xyz[0]/65535,1/3.0) : 7.787*xyz[0] + 16/116.0; - //xyz[1] = xyz[1] > 0.008856 ? pow(xyz[1]/65535,1/3.0) : 7.787*xyz[1] + 16/116.0; - //xyz[2] = xyz[2] > 0.008856 ? pow(xyz[2]/65535,1/3.0) : 7.787*xyz[2] + 16/116.0; - - lix[0][0] = (116 * xyz[1] - 16); - lix[0][1] = 500 * (xyz[0] - xyz[1]); - lix[0][2] = 200 * (xyz[1] - xyz[2]); - } - - /* Build homogeneity maps from the CIELab images: */ - memset (homo, 0, 2 * TS * TS); - - for (row = top + 2; row < top + TS - 2 && row < height - 4; row++) { - tr = row - top; - - for (col = left + 2; col < left + TS - 2 && col < width - 4; col++) { - tc = col - left; - - for (d = 0; d < 2; d++) { - lix = &lab[d][tr][tc]; - - for (i = 0; i < 4; i++) { - ldiff[d][i] = ABS(lix[0][0] - lix[dir[i]][0]); - abdiff[d][i] = SQR(lix[0][1] - lix[dir[i]][1]) - + SQR(lix[0][2] - lix[dir[i]][2]); - } - } - - leps = min(max(ldiff[0][0], ldiff[0][1]), - max(ldiff[1][2], ldiff[1][3])); - abeps = min(max(abdiff[0][0], abdiff[0][1]), - max(abdiff[1][2], abdiff[1][3])); - - for (d = 0; d < 2; d++) - for (i = 0; i < 4; i++) - if (ldiff[d][i] <= leps && abdiff[d][i] <= abeps) { - homo[d][tr][tc]++; - } - } - } - - /* Combine the most homogenous pixels for the final result: */ - for (row = top + 3; row < top + TS - 3 && row < height - 5; row++) { - tr = row - top; - - for (col = left + 3; col < left + TS - 3 && col < width - 5; col++) { - tc = col - left; - - for (d = 0; d < 2; d++) - for (hm[d] = 0, i = tr - 1; i <= tr + 1; i++) - for (j = tc - 1; j <= tc + 1; j++) { - hm[d] += homo[d][i][j]; - } - - if (hm[0] != hm[1]) { - FORC3 image[row * width + col][c] = rgb[hm[1] > hm[0]][tr][tc][c]; - } else - FORC3 image[row * width + col][c] = - 0.5 * (rgb[0][tr][tc][c] + rgb[1][tr][tc][c]) ; - } - } - - tile++; - - if(plistener) { - plistener->setProgress((double)tile / n_tiles); - } - } - - if(plistener) { - plistener->setProgress (1.0); - } - - free (buffer); - - for (int i = 0; i < H; i++) { - for (int j = 0; j < W; j++) { - red[i][j] = image[i * W + j][0]; - green[i][j] = image[i * W + j][1]; - blue[i][j] = image[i * W + j][2]; - } - } - - free (image); - free (cbrt); -} -#undef TS - -void RawImageSource::nodemosaic(bool bw) -{ - red(W, H); - green(W, H); - blue(W, H); - #pragma omp parallel for - - for (int i = 0; i < H; i++) { - for (int j = 0; j < W; j++) { - if (bw) { - red[i][j] = green[i][j] = blue[i][j] = rawData[i][j]; - } else if(ri->getSensorType() != ST_FUJI_XTRANS) { - switch( FC(i, j)) { - case 0: - red[i][j] = rawData[i][j]; - green[i][j] = blue[i][j] = 0; - break; - - case 1: - green[i][j] = rawData[i][j]; - red[i][j] = blue[i][j] = 0; - break; - - case 2: - blue[i][j] = rawData[i][j]; - red[i][j] = green[i][j] = 0; - break; - } - } else { - switch( ri->XTRANSFC(i, j)) { - case 0: - red[i][j] = rawData[i][j]; - green[i][j] = blue[i][j] = 0; - break; - - case 1: - green[i][j] = rawData[i][j]; - red[i][j] = blue[i][j] = 0; - break; - - case 2: - blue[i][j] = rawData[i][j]; - red[i][j] = green[i][j] = 0; - break; - } - } - } - } -} - -/* - Refinement based on EECI demosaicing algorithm by L. Chang and Y.P. Tan - Paul Lee - Adapted for RawTherapee - Jacques Desmis 04/2013 -*/ - -#ifdef __SSE2__ -#define CLIPV(a) LIMV(a,ZEROV,c65535v) -#endif -void RawImageSource::refinement(int PassCount) -{ - MyTime t1e, t2e; - t1e.set(); - - int width = W; - int height = H; - int w1 = width; - int w2 = 2 * w1; - - if (plistener) { - plistener->setProgressStr (M("TP_RAW_DMETHOD_PROGRESSBAR_REFINE")); - } - - array2D *rgb[3]; - rgb[0] = &red; - rgb[1] = &green; - rgb[2] = &blue; - - for (int b = 0; b < PassCount; b++) { - if (plistener) { - plistener->setProgress ((float)b / PassCount); - } - - -#ifdef _OPENMP - #pragma omp parallel -#endif - { - float *pix[3]; - - /* Reinforce interpolated green pixels on RED/BLUE pixel locations */ -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 2; row < height - 2; row++) { - int col = 2 + (FC(row, 2) & 1); - int c = FC(row, col); -#ifdef __SSE2__ - __m128 dLv, dRv, dUv, dDv, v0v; - __m128 onev = _mm_set1_ps(1.f); - __m128 zd5v = _mm_set1_ps(0.5f); - __m128 c65535v = _mm_set1_ps(65535.f); - - for (; col < width - 8; col += 8) { - int indx = row * width + col; - pix[c] = (float*)(*rgb[c]) + indx; - pix[1] = (float*)(*rgb[1]) + indx; - dLv = onev / (onev + vabsf(LC2VFU(pix[c][ -2]) - LC2VFU(pix[c][0])) + vabsf(LC2VFU(pix[1][ 1]) - LC2VFU(pix[1][ -1]))); - dRv = onev / (onev + vabsf(LC2VFU(pix[c][ 2]) - LC2VFU(pix[c][0])) + vabsf(LC2VFU(pix[1][ 1]) - LC2VFU(pix[1][ -1]))); - dUv = onev / (onev + vabsf(LC2VFU(pix[c][-w2]) - LC2VFU(pix[c][0])) + vabsf(LC2VFU(pix[1][w1]) - LC2VFU(pix[1][-w1]))); - dDv = onev / (onev + vabsf(LC2VFU(pix[c][ w2]) - LC2VFU(pix[c][0])) + vabsf(LC2VFU(pix[1][w1]) - LC2VFU(pix[1][-w1]))); - v0v = CLIPV(LC2VFU(pix[c][0]) + zd5v + ((LC2VFU(pix[1][-1]) - LC2VFU(pix[c][-1])) * dLv + (LC2VFU(pix[1][1]) - LC2VFU(pix[c][1])) * dRv + (LC2VFU(pix[1][-w1]) - LC2VFU(pix[c][-w1])) * dUv + (LC2VFU(pix[1][w1]) - LC2VFU(pix[c][w1])) * dDv ) / (dLv + dRv + dUv + dDv)); - STC2VFU(pix[1][0], v0v); - } - -#endif - - for (; col < width - 2; col += 2) { - int indx = row * width + col; - pix[c] = (float*)(*rgb[c]) + indx; - pix[1] = (float*)(*rgb[1]) + indx; - float dL = 1.f / (1.f + fabsf(pix[c][ -2] - pix[c][0]) + fabsf(pix[1][ 1] - pix[1][ -1])); - float dR = 1.f / (1.f + fabsf(pix[c][ 2] - pix[c][0]) + fabsf(pix[1][ 1] - pix[1][ -1])); - float dU = 1.f / (1.f + fabsf(pix[c][-w2] - pix[c][0]) + fabsf(pix[1][w1] - pix[1][-w1])); - float dD = 1.f / (1.f + fabsf(pix[c][ w2] - pix[c][0]) + fabsf(pix[1][w1] - pix[1][-w1])); - float v0 = (pix[c][0] + 0.5f + ((pix[1][ -1] - pix[c][ -1]) * dL + (pix[1][ 1] - pix[c][ 1]) * dR + (pix[1][-w1] - pix[c][-w1]) * dU + (pix[1][ w1] - pix[c][ w1]) * dD ) / (dL + dR + dU + dD)); - pix[1][0] = CLIP(v0); - } - } - - /* Reinforce interpolated red/blue pixels on GREEN pixel locations */ -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 2; row < height - 2; row++) { - int col = 2 + (FC(row, 3) & 1); - int c = FC(row, col + 1); -#ifdef __SSE2__ - __m128 dLv, dRv, dUv, dDv, v0v; - __m128 onev = _mm_set1_ps(1.f); - __m128 zd5v = _mm_set1_ps(0.5f); - __m128 c65535v = _mm_set1_ps(65535.f); - - for (; col < width - 8; col += 8) { - int indx = row * width + col; - pix[1] = (float*)(*rgb[1]) + indx; - - for (int i = 0; i < 2; c = 2 - c, i++) { - pix[c] = (float*)(*rgb[c]) + indx; - dLv = onev / (onev + vabsf(LC2VFU(pix[1][ -2]) - LC2VFU(pix[1][0])) + vabsf(LC2VFU(pix[c][ 1]) - LC2VFU(pix[c][ -1]))); - dRv = onev / (onev + vabsf(LC2VFU(pix[1][ 2]) - LC2VFU(pix[1][0])) + vabsf(LC2VFU(pix[c][ 1]) - LC2VFU(pix[c][ -1]))); - dUv = onev / (onev + vabsf(LC2VFU(pix[1][-w2]) - LC2VFU(pix[1][0])) + vabsf(LC2VFU(pix[c][w1]) - LC2VFU(pix[c][-w1]))); - dDv = onev / (onev + vabsf(LC2VFU(pix[1][ w2]) - LC2VFU(pix[1][0])) + vabsf(LC2VFU(pix[c][w1]) - LC2VFU(pix[c][-w1]))); - v0v = CLIPV(LC2VFU(pix[1][0]) + zd5v - ((LC2VFU(pix[1][-1]) - LC2VFU(pix[c][-1])) * dLv + (LC2VFU(pix[1][1]) - LC2VFU(pix[c][1])) * dRv + (LC2VFU(pix[1][-w1]) - LC2VFU(pix[c][-w1])) * dUv + (LC2VFU(pix[1][w1]) - LC2VFU(pix[c][w1])) * dDv ) / (dLv + dRv + dUv + dDv)); - STC2VFU(pix[c][0], v0v); - } - } - -#endif - - for (; col < width - 2; col += 2) { - int indx = row * width + col; - pix[1] = (float*)(*rgb[1]) + indx; - - for (int i = 0; i < 2; c = 2 - c, i++) { - pix[c] = (float*)(*rgb[c]) + indx; - float dL = 1.f / (1.f + fabsf(pix[1][ -2] - pix[1][0]) + fabsf(pix[c][ 1] - pix[c][ -1])); - float dR = 1.f / (1.f + fabsf(pix[1][ 2] - pix[1][0]) + fabsf(pix[c][ 1] - pix[c][ -1])); - float dU = 1.f / (1.f + fabsf(pix[1][-w2] - pix[1][0]) + fabsf(pix[c][w1] - pix[c][-w1])); - float dD = 1.f / (1.f + fabsf(pix[1][ w2] - pix[1][0]) + fabsf(pix[c][w1] - pix[c][-w1])); - float v0 = (pix[1][0] + 0.5f - ((pix[1][ -1] - pix[c][ -1]) * dL + (pix[1][ 1] - pix[c][ 1]) * dR + (pix[1][-w1] - pix[c][-w1]) * dU + (pix[1][ w1] - pix[c][ w1]) * dD ) / (dL + dR + dU + dD)); - pix[c][0] = CLIP(v0); - } - } - } - - /* Reinforce integrated red/blue pixels on BLUE/RED pixel locations */ -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 2; row < height - 2; row++) { - int col = 2 + (FC(row, 2) & 1); - int c = 2 - FC(row, col); -#ifdef __SSE2__ - __m128 dLv, dRv, dUv, dDv, v0v; - __m128 onev = _mm_set1_ps(1.f); - __m128 zd5v = _mm_set1_ps(0.5f); - __m128 c65535v = _mm_set1_ps(65535.f); - - for (; col < width - 8; col += 8) { - int indx = row * width + col; - pix[0] = (float*)(*rgb[0]) + indx; - pix[1] = (float*)(*rgb[1]) + indx; - pix[2] = (float*)(*rgb[2]) + indx; - int d = 2 - c; - dLv = onev / (onev + vabsf(LC2VFU(pix[d][ -2]) - LC2VFU(pix[d][0])) + vabsf(LC2VFU(pix[1][ 1]) - LC2VFU(pix[1][ -1]))); - dRv = onev / (onev + vabsf(LC2VFU(pix[d][ 2]) - LC2VFU(pix[d][0])) + vabsf(LC2VFU(pix[1][ 1]) - LC2VFU(pix[1][ -1]))); - dUv = onev / (onev + vabsf(LC2VFU(pix[d][-w2]) - LC2VFU(pix[d][0])) + vabsf(LC2VFU(pix[1][w1]) - LC2VFU(pix[1][-w1]))); - dDv = onev / (onev + vabsf(LC2VFU(pix[d][ w2]) - LC2VFU(pix[d][0])) + vabsf(LC2VFU(pix[1][w1]) - LC2VFU(pix[1][-w1]))); - v0v = CLIPV(LC2VFU(pix[1][0]) + zd5v - ((LC2VFU(pix[1][-1]) - LC2VFU(pix[c][-1])) * dLv + (LC2VFU(pix[1][1]) - LC2VFU(pix[c][1])) * dRv + (LC2VFU(pix[1][-w1]) - LC2VFU(pix[c][-w1])) * dUv + (LC2VFU(pix[1][w1]) - LC2VFU(pix[c][w1])) * dDv ) / (dLv + dRv + dUv + dDv)); - STC2VFU(pix[c][0], v0v); - } - -#endif - - for (; col < width - 2; col += 2) { - int indx = row * width + col; - pix[0] = (float*)(*rgb[0]) + indx; - pix[1] = (float*)(*rgb[1]) + indx; - pix[2] = (float*)(*rgb[2]) + indx; - int d = 2 - c; - float dL = 1.f / (1.f + fabsf(pix[d][ -2] - pix[d][0]) + fabsf(pix[1][ 1] - pix[1][ -1])); - float dR = 1.f / (1.f + fabsf(pix[d][ 2] - pix[d][0]) + fabsf(pix[1][ 1] - pix[1][ -1])); - float dU = 1.f / (1.f + fabsf(pix[d][-w2] - pix[d][0]) + fabsf(pix[1][w1] - pix[1][-w1])); - float dD = 1.f / (1.f + fabsf(pix[d][ w2] - pix[d][0]) + fabsf(pix[1][w1] - pix[1][-w1])); - float v0 = (pix[1][0] + 0.5f - ((pix[1][ -1] - pix[c][ -1]) * dL + (pix[1][ 1] - pix[c][ 1]) * dR + (pix[1][-w1] - pix[c][-w1]) * dU + (pix[1][ w1] - pix[c][ w1]) * dD ) / (dL + dR + dU + dD)); - pix[c][0] = CLIP(v0); - } - } - } // end parallel - } - - t2e.set(); - - if (settings->verbose) { - printf("Refinement Lee %d usec\n", t2e.etime(t1e)); - } -} -#ifdef __SSE2__ -#undef CLIPV -#endif - - -// Refinement based on EECI demozaicing algorithm by L. Chang and Y.P. Tan -// from "Lassus" : Luis Sanz Rodriguez, adapted by Jacques Desmis - JDC - and Oliver Duis for RawTherapee -// increases the signal to noise ratio (PSNR) # +1 to +2 dB : tested with Dcraw : eg: Lighthouse + AMaZE : whitout refinement:39.96dB, with refinement:41.86 dB -// reduce color artifacts, improves the interpolation -// but it's relatively slow -// -// Should be DISABLED if it decreases image quality by increases some image noise and generates blocky edges -void RawImageSource::refinement_lassus(int PassCount) -{ - // const int PassCount=1; - - // if (settings->verbose) printf("Refinement\n"); - - MyTime t1e, t2e; - t1e.set(); - int u = W, v = 2 * u, w = 3 * u, x = 4 * u, y = 5 * u; - float (*image)[3]; - image = (float(*)[3]) calloc(W * H, sizeof * image); -#ifdef _OPENMP - #pragma omp parallel shared(image) -#endif - { - // convert red, blue, green to image -#ifdef _OPENMP - #pragma omp for -#endif - - for (int i = 0; i < H; i++) { - for (int j = 0; j < W; j++) { - image[i * W + j][0] = red [i][j]; - image[i * W + j][1] = green[i][j]; - image[i * W + j][2] = blue [i][j]; - } - } - - for (int b = 0; b < PassCount; b++) { - if (plistener) { - plistener->setProgressStr (M("TP_RAW_DMETHOD_PROGRESSBAR_REFINE")); - plistener->setProgress ((float)b / PassCount); - } - - // Reinforce interpolated green pixels on RED/BLUE pixel locations -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 6; row < H - 6; row++) { - for (int col = 6 + (FC(row, 2) & 1), c = FC(row, col); col < W - 6; col += 2) { - float (*pix)[3] = image + row * W + col; - - // Cubic Spline Interpolation by Li and Randhawa, modified by Luis Sanz Rodriguez - - float f[4]; - f[0] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[-v][c]) - x0875(pix[0][c]) - x0250(pix[-x][c]))) + fabs(x0875(pix[u][1]) - x1125(pix[-u][1]) + x0250(pix[-w][1])) + fabs(x0875(pix[-w][1]) - x1125(pix[-u][1]) + x0250(pix[-y][1]))); - f[1] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[+2][c]) - x0875(pix[0][c]) - x0250(pix[+4][c]))) + fabs(x0875(pix[1][1]) - x1125(pix[-1][1]) + x0250(pix[+3][1])) + fabs(x0875(pix[+3][1]) - x1125(pix[+1][1]) + x0250(pix[+5][1]))); - f[2] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[-2][c]) - x0875(pix[0][c]) - x0250(pix[-4][c]))) + fabs(x0875(pix[1][1]) - x1125(pix[-1][1]) + x0250(pix[-3][1])) + fabs(x0875(pix[-3][1]) - x1125(pix[-1][1]) + x0250(pix[-5][1]))); - f[3] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[+v][c]) - x0875(pix[0][c]) - x0250(pix[+x][c]))) + fabs(x0875(pix[u][1]) - x1125(pix[-u][1]) + x0250(pix[+w][1])) + fabs(x0875(pix[+w][1]) - x1125(pix[+u][1]) + x0250(pix[+y][1]))); - - float g[4];//CLIREF avoid overflow - g[0] = pix[0][c] + (x0875(CLIREF(pix[-u][1] - pix[-u][c])) + x0125(CLIREF(pix[+u][1] - pix[+u][c]))); - g[1] = pix[0][c] + (x0875(CLIREF(pix[+1][1] - pix[+1][c])) + x0125(CLIREF(pix[-1][1] - pix[-1][c]))); - g[2] = pix[0][c] + (x0875(CLIREF(pix[-1][1] - pix[-1][c])) + x0125(CLIREF(pix[+1][1] - pix[+1][c]))); - g[3] = pix[0][c] + (x0875(CLIREF(pix[+u][1] - pix[+u][c])) + x0125(CLIREF(pix[-u][1] - pix[-u][c]))); - - pix[0][1] = (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3]); - - } - } - - // Reinforce interpolated red/blue pixels on GREEN pixel locations -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 6; row < H - 6; row++) { - for (int col = 6 + (FC(row, 3) & 1), c = FC(row, col + 1); col < W - 6; col += 2) { - float (*pix)[3] = image + row * W + col; - - for (int i = 0; i < 2; c = 2 - c, i++) { - float f[4]; - f[0] = 1.0f / (1.0f + xmul2f(fabs(x0875(pix[-v][1]) - x1125(pix[0][1]) + x0250(pix[-x][1]))) + fabs(pix[u] [c] - pix[-u][c]) + fabs(pix[-w][c] - pix[-u][c])); - f[1] = 1.0f / (1.0f + xmul2f(fabs(x0875(pix[+2][1]) - x1125(pix[0][1]) + x0250(pix[+4][1]))) + fabs(pix[+1][c] - pix[-1][c]) + fabs(pix[+3][c] - pix[+1][c])); - f[2] = 1.0f / (1.0f + xmul2f(fabs(x0875(pix[-2][1]) - x1125(pix[0][1]) + x0250(pix[-4][1]))) + fabs(pix[+1][c] - pix[-1][c]) + fabs(pix[-3][c] - pix[-1][c])); - f[3] = 1.0f / (1.0f + xmul2f(fabs(x0875(pix[+v][1]) - x1125(pix[0][1]) + x0250(pix[+x][1]))) + fabs(pix[u] [c] - pix[-u][c]) + fabs(pix[+w][c] - pix[+u][c])); - - float g[5];//CLIREF avoid overflow - g[0] = CLIREF(pix[-u][1] - pix[-u][c]); - g[1] = CLIREF(pix[+1][1] - pix[+1][c]); - g[2] = CLIREF(pix[-1][1] - pix[-1][c]); - g[3] = CLIREF(pix[+u][1] - pix[+u][c]); - g[4] = ((f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3])); - pix[0][c] = pix[0][1] - (0.65f * g[4] + 0.35f * CLIREF(pix[0][1] - pix[0][c])); - } - } - } - - // Reinforce integrated red/blue pixels on BLUE/RED pixel locations -#ifdef _OPENMP - #pragma omp for -#endif - - for (int row = 6; row < H - 6; row++) { - for (int col = 6 + (FC(row, 2) & 1), c = 2 - FC(row, col), d = 2 - c; col < W - 6; col += 2) { - float (*pix)[3] = image + row * W + col; - - float f[4]; - f[0] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[-v][d]) - x0875(pix[0][d]) - x0250(pix[-x][d]))) + fabs(x0875(pix[u][1]) - x1125(pix[-u][1]) + x0250(pix[-w][1])) + fabs(x0875(pix[-w][1]) - x1125(pix[-u][1]) + x0250(pix[-y][1]))); - f[1] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[+2][d]) - x0875(pix[0][d]) - x0250(pix[+4][d]))) + fabs(x0875(pix[1][1]) - x1125(pix[-1][1]) + x0250(pix[+3][1])) + fabs(x0875(pix[+3][1]) - x1125(pix[+1][1]) + x0250(pix[+5][1]))); - f[2] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[-2][d]) - x0875(pix[0][d]) - x0250(pix[-4][d]))) + fabs(x0875(pix[1][1]) - x1125(pix[-1][1]) + x0250(pix[-3][1])) + fabs(x0875(pix[-3][1]) - x1125(pix[-1][1]) + x0250(pix[-5][1]))); - f[3] = 1.0f / (1.0f + xmul2f(fabs(x1125(pix[+v][d]) - x0875(pix[0][d]) - x0250(pix[+x][d]))) + fabs(x0875(pix[u][1]) - x1125(pix[-u][1]) + x0250(pix[+w][1])) + fabs(x0875(pix[+w][1]) - x1125(pix[+u][1]) + x0250(pix[+y][1]))); - - float g[5]; - g[0] = (x0875((pix[-u][1] - pix[-u][c])) + x0125((pix[-v][1] - pix[-v][c]))); - g[1] = (x0875((pix[+1][1] - pix[+1][c])) + x0125((pix[+2][1] - pix[+2][c]))); - g[2] = (x0875((pix[-1][1] - pix[-1][c])) + x0125((pix[-2][1] - pix[-2][c]))); - g[3] = (x0875((pix[+u][1] - pix[+u][c])) + x0125((pix[+v][1] - pix[+v][c]))); - - g[4] = (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3]); - - const std::array p = { - pix[-u - 1][1] - pix[-u - 1][c], - pix[-u + 0][1] - pix[-u + 0][c], - pix[-u + 1][1] - pix[-u + 1][c], - pix[+0 - 1][1] - pix[+0 - 1][c], - pix[+0 + 0][1] - pix[+0 + 0][c], - pix[+0 + 1][1] - pix[+0 + 1][c], - pix[+u - 1][1] - pix[+u - 1][c], - pix[+u + 0][1] - pix[+u + 0][c], - pix[+u + 1][1] - pix[+u + 1][c] - }; - - const float med = median(p); - - pix[0][c] = LIM(pix[0][1] - (1.30f * g[4] - 0.30f * (pix[0][1] - pix[0][c])), 0.99f * (pix[0][1] - med), 1.01f * (pix[0][1] - med)); - - } - } - - } - - // put modified values to red, green, blue -#ifdef _OPENMP - #pragma omp for -#endif - - for (int i = 0; i < H; i++) { - for (int j = 0; j < W; j++) { - red [i][j] = image[i * W + j][0]; - green[i][j] = image[i * W + j][1]; - blue [i][j] = image[i * W + j][2]; - } - } - } - - free(image); - - t2e.set(); - - if (settings->verbose) { - printf("Refinement Lassus %d usec\n", t2e.etime(t1e)); - } -} - - -/* - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of the author nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -// If you want to use the code, you need to display name of the original authors in -// your software! - -/* DCB demosaicing by Jacek Gozdz (cuniek@kft.umcs.lublin.pl) - * the code is open source (BSD licence) -*/ - -#define TILESIZE 192 -#define TILEBORDER 10 -#define CACHESIZE (TILESIZE+2*TILEBORDER) - -inline void RawImageSource::dcb_initTileLimits(int &colMin, int &rowMin, int &colMax, int &rowMax, int x0, int y0, int border) -{ - rowMin = border; - colMin = border; - rowMax = CACHESIZE - border; - colMax = CACHESIZE - border; - - if(!y0 ) { - rowMin = TILEBORDER + border; - } - - if(!x0 ) { - colMin = TILEBORDER + border; - } - - if( y0 + TILESIZE + TILEBORDER >= H - border) { - rowMax = TILEBORDER + H - border - y0; - } - - if( x0 + TILESIZE + TILEBORDER >= W - border) { - colMax = TILEBORDER + W - border - x0; - } -} - -void RawImageSource::fill_raw( float (*cache )[3], int x0, int y0, float** rawData) -{ - int rowMin, colMin, rowMax, colMax; - dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 0); - - for (int row = rowMin, y = y0 - TILEBORDER + rowMin; row < rowMax; row++, y++) - for (int col = colMin, x = x0 - TILEBORDER + colMin, indx = row * CACHESIZE + col; col < colMax; col++, x++, indx++) { - cache[indx][fc(y, x)] = rawData[y][x]; - } -} - -void RawImageSource::fill_border( float (*cache )[3], int border, int x0, int y0) -{ - unsigned f; - float sum[8]; - constexpr unsigned int colors = 3; // used in FORCC - - for (int row = y0; row < y0 + TILESIZE + TILEBORDER && row < H; row++) { - for (int col = x0; col < x0 + TILESIZE + TILEBORDER && col < W; col++) { - if (col >= border && col < W - border && row >= border && row < H - border) { - col = W - border; - - if(col >= x0 + TILESIZE + TILEBORDER ) { - break; - } - } - - memset(sum, 0, sizeof sum); - - for (int y = row - 1; y != row + 2; y++) - for (int x = col - 1; x != col + 2; x++) - if (y < H && y < y0 + TILESIZE + TILEBORDER && x < W && x < x0 + TILESIZE + TILEBORDER) { - f = fc(y, x); - sum[f] += cache[(y - y0 + TILEBORDER) * CACHESIZE + TILEBORDER + x - x0][f]; - sum[f + 4]++; - } - - f = fc(row, col); - FORCC - - if (c != f && sum[c + 4] > 0) { - cache[(row - y0 + TILEBORDER) * CACHESIZE + TILEBORDER + col - x0][c] = sum[c] / sum[c + 4]; - } - } - } -} - -// saves red and blue - -// change buffer[3] -> buffer[2], possibly to buffer[1] if split -// into two loops, one for R and another for B, could also be smaller because -// there is no need for green pixels pass -// this would decrease the amount of needed memory -// from megapixels*2 records to megapixels*0.5 -// also don't know if float is needed as data is 1-65536 integer (I believe!!) -// comment from Ingo: float is needed because rawdata in rt is float -void RawImageSource::copy_to_buffer( float (*buffer)[2], float (*image)[3]) -{ - for (int indx = 0; indx < CACHESIZE * CACHESIZE; indx++) { - buffer[indx][0] = image[indx][0]; //R - buffer[indx][1] = image[indx][2]; //B - } -} - -// restores red and blue - -// other comments like in copy_to_buffer -void RawImageSource::restore_from_buffer(float (*image)[3], float (*buffer)[2]) -{ - for (int indx = 0; indx < CACHESIZE * CACHESIZE; indx++) { - image[indx][0] = buffer[indx][0]; //R - image[indx][2] = buffer[indx][1]; //B - } -} - -// First pass green interpolation - -// remove entirely: bufferH and bufferV -void RawImageSource::dcb_hid(float (*image)[3], int x0, int y0) -{ - const int u = CACHESIZE; - int rowMin, colMin, rowMax, colMax; - dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2); - -// simple green bilinear in R and B pixels - for (int row = rowMin; row < rowMax; row++) - for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col; col < colMax; col += 2, indx += 2) { - assert(indx - u - 1 >= 0 && indx + u + 1 < u * u); - - image[indx][1] = 0.25*(image[indx-1][1]+image[indx+1][1]+image[indx-u][1]+image[indx+u][1]); - } -} - -// missing colours are interpolated -void RawImageSource::dcb_color(float (*image)[3], int x0, int y0) -{ - const int u = CACHESIZE; - int rowMin, colMin, rowMax, colMax; - dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 1); - - // red in blue pixel, blue in red pixel - for (int row = rowMin; row < rowMax; row++) - for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col, c = 2 - FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col); col < colMax; col += 2, indx += 2) { - assert(indx >= 0 && indx < u * u && c >= 0 && c < 4); - - -//Jacek comment: one multiplication less - image[indx][c] = image[indx][1] + - ( image[indx + u + 1][c] + image[indx + u - 1][c] + image[indx - u + 1][c] + image[indx - u - 1][c] - - (image[indx + u + 1][1] + image[indx + u - 1][1] + image[indx - u + 1][1] + image[indx - u - 1][1]) ) * 0.25f; - -/* original - image[indx][c] = ( 4.f * image[indx][1] - - image[indx + u + 1][1] - image[indx + u - 1][1] - image[indx - u + 1][1] - image[indx - u - 1][1] - + image[indx + u + 1][c] + image[indx + u - 1][c] + image[indx - u + 1][c] + image[indx - u - 1][c] ) * 0.25f; -*/ - } - - // red or blue in green pixels - for (int row = rowMin; row < rowMax; row++) - for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin + 1) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col + 1), d = 2 - c; col < colMax; col += 2, indx += 2) { - assert(indx >= 0 && indx < u * u && c >= 0 && c < 4); - -//Jacek comment: two multiplications (in total) less - image[indx][c] = image[indx][1] + (image[indx + 1][c] + image[indx - 1][c] - (image[indx + 1][1] + image[indx - 1][1])) * 0.5f; - image[indx][d] = image[indx][1] + (image[indx + u][d] + image[indx - u][d] - (image[indx + u][1] + image[indx - u][1])) * 0.5f; - - -/* original - image[indx][c] = (2.f * image[indx][1] - image[indx + 1][1] - image[indx - 1][1] + image[indx + 1][c] + image[indx - 1][c]) * 0.5f; - image[indx][d] = (2.f * image[indx][1] - image[indx + u][1] - image[indx - u][1] + image[indx + u][d] + image[indx - u][d]) * 0.5f; -*/ - } -} - -// green correction -void RawImageSource::dcb_hid2(float (*image)[3], int x0, int y0) -{ - const int v = 2 * CACHESIZE; - int rowMin, colMin, rowMax, colMax; - dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2); - - for (int row = rowMin; row < rowMax; row++) { - for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col); col < colMax; col += 2, indx += 2) { - assert(indx - v >= 0 && indx + v < CACHESIZE * CACHESIZE); - -//Jacek comment: one multiplication less - image[indx][1] = image[indx][c] + - (image[indx + v][1] + image[indx - v][1] + image[indx - 2][1] + image[indx + 2][1] - - (image[indx + v][c] + image[indx - v][c] + image[indx - 2][c] + image[indx + 2][c])) * 0.25f; - -/* original - image[indx][1] = (image[indx + v][1] + image[indx - v][1] + image[indx - 2][1] + image[indx + 2][1]) * 0.25f + - image[indx][c] - ( image[indx + v][c] + image[indx - v][c] + image[indx - 2][c] + image[indx + 2][c]) * 0.25f; -*/ - } - } -} - -// green is used to create -// an interpolation direction map -// 1 = vertical -// 0 = horizontal -// saved in image[][3] - -// seems at least 2 persons implemented some code, as this one has different coding style, could be unified -// I don't know if *pix is faster than a loop working on image[] directly -void RawImageSource::dcb_map(float (*image)[3], uint8_t *map, int x0, int y0) -{ - const int u = 3 * CACHESIZE; - int rowMin, colMin, rowMax, colMax; - dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2); - - for (int row = rowMin; row < rowMax; row++) { - for (int col = colMin, indx = row * CACHESIZE + col; col < colMax; col++, indx++) { - float *pix = &(image[indx][1]); - - assert(indx >= 0 && indx < u * u); - - // comparing 4 * a to (b+c+d+e) instead of a to (b+c+d+e)/4 is faster because divisions are slow - if ( 4 * (*pix) > ( (pix[-3] + pix[+3]) + (pix[-u] + pix[+u])) ) { - map[indx] = ((min(pix[-3], pix[+3]) + (pix[-3] + pix[+3]) ) < (min(pix[-u], pix[+u]) + (pix[-u] + pix[+u]))); - } else { - map[indx] = ((max(pix[-3], pix[+3]) + (pix[-3] + pix[+3]) ) > (max(pix[-u], pix[+u]) + (pix[-u] + pix[+u]))); - } - } - } -} - -// interpolated green pixels are corrected using the map -void RawImageSource::dcb_correction(float (*image)[3], uint8_t *map, int x0, int y0) -{ - const int u = CACHESIZE, v = 2 * CACHESIZE; - int rowMin, colMin, rowMax, colMax; - dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2); - - for (int row = rowMin; row < rowMax; row++) { - for (int indx = row * CACHESIZE + colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1); indx < row * CACHESIZE + colMax; indx += 2) { -// for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col; col < colMax; col += 2, indx += 2) { - float current = 4 * map[indx] + - 2 * (map[indx + u] + map[indx - u] + map[indx + 1] + map[indx - 1]) + - map[indx + v] + map[indx - v] + map[indx + 2] + map[indx - 2]; - - assert(indx >= 0 && indx < u * u); - image[indx][1] = ((16.f - current) * (image[indx - 1][1] + image[indx + 1][1]) + current * (image[indx - u][1] + image[indx + u][1]) ) * 0.03125f; -// image[indx][1] = ((16.f - current) * (image[indx - 1][1] + image[indx + 1][1]) * 0.5f + current * (image[indx - u][1] + image[indx + u][1]) * 0.5f ) * 0.0625f; - } - } -} - -// R and B smoothing using green contrast, all pixels except 2 pixel wide border - -// again code with *pix, is this kind of calculating faster in C, than this what was commented? -void RawImageSource::dcb_pp(float (*image)[3], int x0, int y0) -{ - const int u = CACHESIZE; - int rowMin, colMin, rowMax, colMax; - dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2); - - for (int row = rowMin; row < rowMax; row++) - for (int col = colMin, indx = row * CACHESIZE + col; col < colMax; col++, indx++) { -// float r1 = image[indx-1][0] + image[indx+1][0] + image[indx-u][0] + image[indx+u][0] + image[indx-u-1][0] + image[indx+u+1][0] + image[indx-u+1][0] + image[indx+u-1][0]; -// float g1 = image[indx-1][1] + image[indx+1][1] + image[indx-u][1] + image[indx+u][1] + image[indx-u-1][1] + image[indx+u+1][1] + image[indx-u+1][1] + image[indx+u-1][1]; -// float b1 = image[indx-1][2] + image[indx+1][2] + image[indx-u][2] + image[indx+u][2] + image[indx-u-1][2] + image[indx+u+1][2] + image[indx-u+1][2] + image[indx+u-1][2]; - float (*pix)[3] = image + (indx - u - 1); - float r1 = (*pix)[0]; - float g1 = (*pix)[1]; - float b1 = (*pix)[2]; - pix++; - r1 += (*pix)[0]; - g1 += (*pix)[1]; - b1 += (*pix)[2]; - pix++; - r1 += (*pix)[0]; - g1 += (*pix)[1]; - b1 += (*pix)[2]; - pix += CACHESIZE - 2; - r1 += (*pix)[0]; - g1 += (*pix)[1]; - b1 += (*pix)[2]; - pix += 2; - r1 += (*pix)[0]; - g1 += (*pix)[1]; - b1 += (*pix)[2]; - pix += CACHESIZE - 2; - r1 += (*pix)[0]; - g1 += (*pix)[1]; - b1 += (*pix)[2]; - pix++; - r1 += (*pix)[0]; - g1 += (*pix)[1]; - b1 += (*pix)[2]; - pix++; - r1 += (*pix)[0]; - g1 += (*pix)[1]; - b1 += (*pix)[2]; - r1 *= 0.125f; - g1 *= 0.125f; - b1 *= 0.125f; - r1 += ( image[indx][1] - g1 ); - b1 += ( image[indx][1] - g1 ); - - assert(indx >= 0 && indx < u * u); - image[indx][0] = r1; - image[indx][2] = b1; - } -} - -// interpolated green pixels are corrected using the map -// with correction -void RawImageSource::dcb_correction2(float (*image)[3], uint8_t *map, int x0, int y0) -{ - const int u = CACHESIZE, v = 2 * CACHESIZE; - int rowMin, colMin, rowMax, colMax; - dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 4); - - for (int row = rowMin; row < rowMax; row++) { - for (int indx = row * CACHESIZE + colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1)); indx < row * CACHESIZE + colMax; indx += 2) { - // map values are uint8_t either 0 or 1. Adding them using integer instructions is perfectly valid and fast. Final result is converted to float then - float current = 4 * map[indx] + - 2 * (map[indx + u] + map[indx - u] + map[indx + 1] + map[indx - 1]) + - map[indx + v] + map[indx - v] + map[indx + 2] + map[indx - 2]; - - assert(indx >= 0 && indx < u * u); - -// Jacek comment: works now, and has 3 float mults and 9 float adds - image[indx][1] = image[indx][c] + - ((16.f - current) * (image[indx - 1][1] + image[indx + 1][1] - (image[indx + 2][c] + image[indx - 2][c])) - + current * (image[indx - u][1] + image[indx + u][1] - (image[indx + v][c] + image[indx - v][c]))) * 0.03125f; - - - // 4 float mults and 9 float adds - // Jacek comment: not mathematically identical to original -/* image[indx][1] = 16.f * image[indx][c] + - ((16.f - current) * ((image[indx - 1][1] + image[indx + 1][1]) - - (image[indx + 2][c] + image[indx - 2][c])) - + current * ((image[indx - u][1] + image[indx + u][1]) - (image[indx + v][c] + image[indx - v][c]))) * 0.03125f; -*/ - // 7 float mults and 10 float adds - // original code -/* - image[indx][1] = ((16.f - current) * ((image[indx - 1][1] + image[indx + 1][1]) * 0.5f - + image[indx][c] - (image[indx + 2][c] + image[indx - 2][c]) * 0.5f) - + current * ((image[indx - u][1] + image[indx + u][1]) * 0.5f + image[indx][c] - (image[indx + v][c] + image[indx - v][c]) * 0.5f)) * 0.0625f; -*/ - } - } -} - -// image refinement -void RawImageSource::dcb_refinement(float (*image)[3], uint8_t *map, int x0, int y0) -{ - const int u = CACHESIZE, v = 2 * CACHESIZE; - int rowMin, colMin, rowMax, colMax; - dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 4); - - float f0, f1, f2, g1, h0, h1, h2, g2; - - for (int row = rowMin; row < rowMax; row++) - for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col); col < colMax; col += 2, indx += 2) { - - float current = 4 * map[indx] + - 2 * (map[indx + u] + map[indx - u] + map[indx + 1] + map[indx - 1]) - + map[indx + v] + map[indx - v] + map[indx - 2] + map[indx + 2]; - - float currPix = image[indx][c]; - - f0 = (float)(image[indx - u][1] + image[indx + u][1]) / (1.f + 2.f * currPix); - f1 = 2.f * image[indx - u][1] / (1.f + image[indx - v][c] + currPix); - f2 = 2.f * image[indx + u][1] / (1.f + image[indx + v][c] + currPix); - - g1 = f0 + f1 + f2; - - h0 = (float)(image[indx - 1][1] + image[indx + 1][1]) / (1.f + 2.f * currPix); - h1 = 2.f * image[indx - 1][1] / (1.f + image[indx - 2][c] + currPix); - h2 = 2.f * image[indx + 1][1] / (1.f + image[indx + 2][c] + currPix); - - g2 = h0 + h1 + h2; - - // new green value - assert(indx >= 0 && indx < u * u); - currPix *= (current * g1 + (16.f - current) * g2) / 48.f; - - // get rid of the overshot pixels - float minVal = min(image[indx - 1][1], min(image[indx + 1][1], min(image[indx - u][1], image[indx + u][1]))); - float maxVal = max(image[indx - 1][1], max(image[indx + 1][1], max(image[indx - u][1], image[indx + u][1]))); - - image[indx][1] = LIM(currPix, minVal, maxVal); - - } -} - -// missing colours are interpolated using high quality algorithm by Luis Sanz Rodriguez -void RawImageSource::dcb_color_full(float (*image)[3], int x0, int y0, float (*chroma)[2]) -{ - const int u = CACHESIZE, w = 3 * CACHESIZE; - int rowMin, colMin, rowMax, colMax; - dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 3); - - float f[4], g[4]; - - for (int row = 1; row < CACHESIZE - 1; row++) - for (int col = 1 + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + 1) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col), d = c / 2; col < CACHESIZE - 1; col += 2, indx += 2) { - assert(indx >= 0 && indx < u * u && c >= 0 && c < 4); - chroma[indx][d] = image[indx][c] - image[indx][1]; - } - - for (int row = rowMin; row < rowMax; row++) - for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col, c = 1 - FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col) / 2; col < colMax; col += 2, indx += 2) { - f[0] = 1.f / (float)(1.f + fabs(chroma[indx - u - 1][c] - chroma[indx + u + 1][c]) + fabs(chroma[indx - u - 1][c] - chroma[indx - w - 3][c]) + fabs(chroma[indx + u + 1][c] - chroma[indx - w - 3][c])); - f[1] = 1.f / (float)(1.f + fabs(chroma[indx - u + 1][c] - chroma[indx + u - 1][c]) + fabs(chroma[indx - u + 1][c] - chroma[indx - w + 3][c]) + fabs(chroma[indx + u - 1][c] - chroma[indx - w + 3][c])); - f[2] = 1.f / (float)(1.f + fabs(chroma[indx + u - 1][c] - chroma[indx - u + 1][c]) + fabs(chroma[indx + u - 1][c] - chroma[indx + w + 3][c]) + fabs(chroma[indx - u + 1][c] - chroma[indx + w - 3][c])); - f[3] = 1.f / (float)(1.f + fabs(chroma[indx + u + 1][c] - chroma[indx - u - 1][c]) + fabs(chroma[indx + u + 1][c] - chroma[indx + w - 3][c]) + fabs(chroma[indx - u - 1][c] - chroma[indx + w + 3][c])); - g[0] = 1.325f * chroma[indx - u - 1][c] - 0.175f * chroma[indx - w - 3][c] - 0.075f * (chroma[indx - w - 1][c] + chroma[indx - u - 3][c]); - g[1] = 1.325f * chroma[indx - u + 1][c] - 0.175f * chroma[indx - w + 3][c] - 0.075f * (chroma[indx - w + 1][c] + chroma[indx - u + 3][c]); - g[2] = 1.325f * chroma[indx + u - 1][c] - 0.175f * chroma[indx + w - 3][c] - 0.075f * (chroma[indx + w - 1][c] + chroma[indx + u - 3][c]); - g[3] = 1.325f * chroma[indx + u + 1][c] - 0.175f * chroma[indx + w + 3][c] - 0.075f * (chroma[indx + w + 1][c] + chroma[indx + u + 3][c]); - -// g[0] = 1.325f * chroma[indx - u - 1][c] - 0.175f * chroma[indx - w - 3][c] - 0.075f * chroma[indx - w - 1][c] - 0.075f * chroma[indx - u - 3][c]; -// g[1] = 1.325f * chroma[indx - u + 1][c] - 0.175f * chroma[indx - w + 3][c] - 0.075f * chroma[indx - w + 1][c] - 0.075f * chroma[indx - u + 3][c]; -// g[2] = 1.325f * chroma[indx + u - 1][c] - 0.175f * chroma[indx + w - 3][c] - 0.075f * chroma[indx + w - 1][c] - 0.075f * chroma[indx + u - 3][c]; -// g[3] = 1.325f * chroma[indx + u + 1][c] - 0.175f * chroma[indx + w + 3][c] - 0.075f * chroma[indx + w + 1][c] - 0.075f * chroma[indx + u + 3][c]; - - assert(indx >= 0 && indx < u * u && c >= 0 && c < 2); - chroma[indx][c] = (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3]); - } - - for (int row = rowMin; row < rowMax; row++) - for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin + 1) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col + 1) / 2; col < colMax; col += 2, indx += 2) - for(int d = 0; d <= 1; c = 1 - c, d++) { - f[0] = 1.f / (1.f + fabs(chroma[indx - u][c] - chroma[indx + u][c]) + fabs(chroma[indx - u][c] - chroma[indx - w][c]) + fabs(chroma[indx + u][c] - chroma[indx - w][c])); - f[1] = 1.f / (1.f + fabs(chroma[indx + 1][c] - chroma[indx - 1][c]) + fabs(chroma[indx + 1][c] - chroma[indx + 3][c]) + fabs(chroma[indx - 1][c] - chroma[indx + 3][c])); - f[2] = 1.f / (1.f + fabs(chroma[indx - 1][c] - chroma[indx + 1][c]) + fabs(chroma[indx - 1][c] - chroma[indx - 3][c]) + fabs(chroma[indx + 1][c] - chroma[indx - 3][c])); - f[3] = 1.f / (1.f + fabs(chroma[indx + u][c] - chroma[indx - u][c]) + fabs(chroma[indx + u][c] - chroma[indx + w][c]) + fabs(chroma[indx - u][c] - chroma[indx + w][c])); - - g[0] = intp(0.875f, chroma[indx - u][c], chroma[indx - w][c]); - g[1] = intp(0.875f, chroma[indx + 1][c], chroma[indx + 3][c]); - g[2] = intp(0.875f, chroma[indx - 1][c], chroma[indx - 3][c]); - g[3] = intp(0.875f, chroma[indx + u][c], chroma[indx + w][c]); - -// g[0] = 0.875f * chroma[indx - u][c] + 0.125f * chroma[indx - w][c]; -// g[1] = 0.875f * chroma[indx + 1][c] + 0.125f * chroma[indx + 3][c]; -// g[2] = 0.875f * chroma[indx - 1][c] + 0.125f * chroma[indx - 3][c]; -// g[3] = 0.875f * chroma[indx + u][c] + 0.125f * chroma[indx + w][c]; - - assert(indx >= 0 && indx < u * u && c >= 0 && c < 2); - chroma[indx][c] = (f[0] * g[0] + f[1] * g[1] + f[2] * g[2] + f[3] * g[3]) / (f[0] + f[1] + f[2] + f[3]); - } - - for(int row = rowMin; row < rowMax; row++) - for(int col = colMin, indx = row * CACHESIZE + col; col < colMax; col++, indx++) { - assert(indx >= 0 && indx < u * u); - - image[indx][0] = chroma[indx][0] + image[indx][1]; - image[indx][2] = chroma[indx][1] + image[indx][1]; - } -} - -// DCB demosaicing main routine -void RawImageSource::dcb_demosaic(int iterations, bool dcb_enhance) -{ -BENCHFUN - double currentProgress = 0.0; - - if(plistener) { - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCB))); - plistener->setProgress (currentProgress); - } - - int wTiles = W / TILESIZE + (W % TILESIZE ? 1 : 0); - int hTiles = H / TILESIZE + (H % TILESIZE ? 1 : 0); - int numTiles = wTiles * hTiles; - int tilesDone = 0; - constexpr int cldf = 2; // factor to multiply cache line distance. 1 = 64 bytes, 2 = 128 bytes ... - -#ifdef _OPENMP - #pragma omp parallel -#endif -{ - // assign working space - char *buffer0 = (char *) malloc(5 * sizeof(float) * CACHESIZE * CACHESIZE + sizeof(uint8_t) * CACHESIZE * CACHESIZE + 3 * cldf * 64 + 63); - // aligned to 64 byte boundary - char *data = (char*)( ( uintptr_t(buffer0) + uintptr_t(63)) / 64 * 64); - - float (*tile)[3] = (float(*)[3]) data; - float (*buffer)[2] = (float(*)[2]) ((char*)tile + sizeof(float) * CACHESIZE * CACHESIZE * 3 + cldf * 64); - float (*chrm)[2] = (float(*)[2]) (buffer); // No overlap in usage of buffer and chrm means we can reuse buffer - uint8_t *map = (uint8_t*) ((char*)buffer + sizeof(float) * CACHESIZE * CACHESIZE * 2 + cldf * 64); - -#ifdef _OPENMP - #pragma omp for schedule(dynamic) nowait -#endif - - for( int iTile = 0; iTile < numTiles; iTile++) { - int xTile = iTile % wTiles; - int yTile = iTile / wTiles; - int x0 = xTile * TILESIZE; - int y0 = yTile * TILESIZE; - - memset(tile, 0, CACHESIZE * CACHESIZE * sizeof * tile); - memset(map, 0, CACHESIZE * CACHESIZE * sizeof * map); - - fill_raw( tile, x0, y0, rawData ); - - if( !xTile || !yTile || xTile == wTiles - 1 || yTile == hTiles - 1) { - fill_border(tile, 6, x0, y0); - } - - copy_to_buffer(buffer, tile); - dcb_hid(tile, x0, y0); - - for (int i = iterations; i > 0; i--) { - dcb_hid2(tile, x0, y0); - dcb_hid2(tile, x0, y0); - dcb_hid2(tile, x0, y0); - dcb_map(tile, map, x0, y0); - dcb_correction(tile, map, x0, y0); - } - - dcb_color(tile, x0, y0); - dcb_pp(tile, x0, y0); - dcb_map(tile, map, x0, y0); - dcb_correction2(tile, map, x0, y0); - dcb_map(tile, map, x0, y0); - dcb_correction(tile, map, x0, y0); - dcb_color(tile, x0, y0); - dcb_map(tile, map, x0, y0); - dcb_correction(tile, map, x0, y0); - dcb_map(tile, map, x0, y0); - dcb_correction(tile, map, x0, y0); - dcb_map(tile, map, x0, y0); - restore_from_buffer(tile, buffer); - - if (!dcb_enhance) - dcb_color(tile, x0, y0); - else - { - memset(chrm, 0, CACHESIZE * CACHESIZE * sizeof * chrm); - dcb_refinement(tile, map, x0, y0); - dcb_color_full(tile, x0, y0, chrm); - } - - /* - dcb_hid(tile, buffer, buffer2, x0, y0); - dcb_color(tile, x0, y0); - - copy_to_buffer(buffer, tile); - - for (int i = iterations; i > 0; i--) { - dcb_hid2(tile, x0, y0); - dcb_hid2(tile, x0, y0); - dcb_hid2(tile, x0, y0); - dcb_map(tile, x0, y0); - dcb_correction(tile, x0, y0); - } - - dcb_color(tile, x0, y0); - dcb_pp(tile, x0, y0); - dcb_map(tile, x0, y0); - dcb_correction2(tile, x0, y0); - dcb_map(tile, x0, y0); - dcb_correction(tile, x0, y0); - dcb_color(tile, x0, y0); - dcb_map(tile, x0, y0); - dcb_correction(tile, x0, y0); - dcb_map(tile, x0, y0); - dcb_correction(tile, x0, y0); - dcb_map(tile, x0, y0); - restore_from_buffer(tile, buffer); - dcb_color_full(tile, x0, y0, chrm); - - if (dcb_enhance) { - dcb_refinement(tile, x0, y0); - dcb_color_full(tile, x0, y0, chrm); - } -*/ - for(int y = 0; y < TILESIZE && y0 + y < H; y++) { - for (int j = 0; j < TILESIZE && x0 + j < W; j++) { - red[y0 + y][x0 + j] = tile[(y + TILEBORDER) * CACHESIZE + TILEBORDER + j][0]; - green[y0 + y][x0 + j] = tile[(y + TILEBORDER) * CACHESIZE + TILEBORDER + j][1]; - blue[y0 + y][x0 + j] = tile[(y + TILEBORDER) * CACHESIZE + TILEBORDER + j][2]; - } - } - -#ifdef _OPENMP - - if(omp_get_thread_num() == 0) -#endif - { - if( plistener && double(tilesDone) / numTiles > currentProgress) { - currentProgress += 0.1; // Show progress each 10% - plistener->setProgress (currentProgress); - } - } - -#ifdef _OPENMP - #pragma omp atomic -#endif - tilesDone++; - } - free(buffer0); -} - - if(plistener) { - plistener->setProgress (1.0); - } -} - -#undef TILEBORDER -#undef TILESIZE -#undef CACHESIZE -} /* namespace */ From 928309f3aab7adc520d2676970cf9dca85e8308e Mon Sep 17 00:00:00 2001 From: Hombre Date: Sat, 2 Jun 2018 02:34:33 +0200 Subject: [PATCH 40/85] GUI code cleanup - Remove usage of std::numeric_limits::max() in GUI which bring unwanted behavior. - Put the PixelShift options in a Gtk::Frame (requested on IRC) - Add the fast_export raw options to the GUI (was created but not added to the container). Incidentally, fix a memory leak. - Add a missing History message --- rtdata/languages/default | 1 + rtgui/bayerprocess.cc | 98 +++++++++++++++++++--------------------- rtgui/bayerprocess.h | 2 +- rtgui/exportpanel.cc | 14 +++--- rtgui/flatfield.cc | 16 ++----- rtgui/xtransprocess.cc | 30 ++++-------- 6 files changed, 71 insertions(+), 90 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 8231932fb..3621fc806 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -736,6 +736,7 @@ HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius HISTORY_MSG_METADATA_MODE;Metadata copy mode HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold +HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - Demosaic method for motion HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc index 23e848fc6..72fa4c42f 100644 --- a/rtgui/bayerprocess.cc +++ b/rtgui/bayerprocess.cc @@ -113,18 +113,24 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA dualDemosaicOptions->pack_start(*dualDemosaicContrast); pack_start( *dualDemosaicOptions, Gtk::PACK_SHRINK, 4); - pixelShiftFrame = Gtk::manage (new Gtk::VBox ()); - pixelShiftFrame->set_border_width(0); + + // -------------------- PixelShift ---------------------- + + + pixelShiftFrame = Gtk::manage(new Gtk::Frame(M("TP_RAW_PIXELSHIFT"))); + + Gtk::VBox *pixelShiftMainVBox = Gtk::manage (new Gtk::VBox ()); + pixelShiftMainVBox->set_border_width(0); pixelShiftEqualBright = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTEQUALBRIGHT"), multiImage)); pixelShiftEqualBright->setCheckBoxListener (this); pixelShiftEqualBright->set_tooltip_text (M("TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP")); - pixelShiftFrame->pack_start(*pixelShiftEqualBright); + pixelShiftMainVBox->pack_start(*pixelShiftEqualBright); pixelShiftEqualBrightChannel = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL"), multiImage)); pixelShiftEqualBrightChannel->setCheckBoxListener (this); pixelShiftEqualBrightChannel->set_tooltip_text (M("TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP")); - pixelShiftFrame->pack_start(*pixelShiftEqualBrightChannel); + pixelShiftMainVBox->pack_start(*pixelShiftEqualBrightChannel); Gtk::HBox* hb3 = Gtk::manage (new Gtk::HBox ()); hb3->pack_start (*Gtk::manage (new Gtk::Label ( M("TP_RAW_PIXELSHIFTMOTIONMETHOD") + ": ")), Gtk::PACK_SHRINK, 4); @@ -135,7 +141,7 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA pixelShiftMotionMethod->set_active(toUnderlying(RAWParams::BayerSensor::PSMotionCorrectionMethod::AUTO)); pixelShiftMotionMethod->show(); hb3->pack_start(*pixelShiftMotionMethod); - pixelShiftFrame->pack_start(*hb3); + pixelShiftMainVBox->pack_start(*hb3); pixelShiftOptions = Gtk::manage (new Gtk::VBox ()); pixelShiftOptions->set_border_width(0); @@ -143,12 +149,12 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA pixelShiftShowMotion = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTSHOWMOTION"), multiImage)); pixelShiftShowMotion->setCheckBoxListener (this); pixelShiftShowMotion->set_tooltip_text (M("TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP")); - pixelShiftFrame->pack_start(*pixelShiftShowMotion); + pixelShiftMainVBox->pack_start(*pixelShiftShowMotion); pixelShiftShowMotionMaskOnly = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY"), multiImage)); pixelShiftShowMotionMaskOnly->setCheckBoxListener (this); pixelShiftShowMotionMaskOnly->set_tooltip_text (M("TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP")); - pixelShiftFrame->pack_start(*pixelShiftShowMotionMaskOnly); + pixelShiftMainVBox->pack_start(*pixelShiftShowMotionMaskOnly); Gtk::HBox* hb4 = Gtk::manage (new Gtk::HBox ()); @@ -219,7 +225,8 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA pixelShiftMedian->set_tooltip_text (M("TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP")); pixelShiftOptions->pack_start(*pixelShiftMedian); - pixelShiftFrame->pack_start(*pixelShiftOptions); + pixelShiftMainVBox->pack_start(*pixelShiftOptions); + pixelShiftFrame->add(*pixelShiftMainVBox); pixelShiftOptions->hide(); pack_start( *pixelShiftFrame, Gtk::PACK_SHRINK, 4); @@ -239,7 +246,6 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params pixelShiftDemosaicMethod->block(true); //allEnhconn.block (true); - method->set_active(std::numeric_limits::max()); imageNumber->set_active(pp->raw.bayersensor.imageNum); for (size_t i = 0; i < procparams::RAWParams::BayerSensor::getMethodStrings().size(); ++i) { @@ -249,7 +255,6 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params break; } } - pixelShiftDemosaicMethod->set_active(std::numeric_limits::max()); for (size_t i = 0; i < procparams::RAWParams::BayerSensor::getPSDemosaicMethodStrings().size(); ++i) { if (pp->raw.bayersensor.pixelShiftDemosaicMethod == procparams::RAWParams::BayerSensor::getPSDemosaicMethodStrings()[i]) { pixelShiftDemosaicMethod->set_active(i); @@ -261,21 +266,23 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params dcbIterations->setValue (pp->raw.bayersensor.dcb_iterations); dcbEnhance->setValue (pp->raw.bayersensor.dcb_enhance); pixelShiftShowMotion->setValue (pp->raw.bayersensor.pixelShiftShowMotion); + pixelShiftShowMotionMaskOnly->setValue (pp->raw.bayersensor.pixelShiftShowMotionMaskOnly); if (!batchMode) { pixelShiftShowMotionMaskOnly->set_sensitive (pp->raw.bayersensor.pixelShiftShowMotion); } - pixelShiftShowMotionMaskOnly->setValue (pp->raw.bayersensor.pixelShiftShowMotionMaskOnly); pixelShiftHoleFill->setValue (pp->raw.bayersensor.pixelShiftHoleFill); pixelShiftMedian->setValue (pp->raw.bayersensor.pixelShiftMedian); pixelShiftGreen->setValue (pp->raw.bayersensor.pixelShiftGreen); pixelShiftBlur->setValue (pp->raw.bayersensor.pixelShiftBlur); + pixelShiftSmooth->setValue (pp->raw.bayersensor.pixelShiftSmoothFactor); if (!batchMode) { pixelShiftSmooth->set_sensitive (pp->raw.bayersensor.pixelShiftBlur); } - pixelShiftSmooth->setValue (pp->raw.bayersensor.pixelShiftSmoothFactor); pixelShiftEqualBright->setValue (pp->raw.bayersensor.pixelShiftEqualBright); - pixelShiftEqualBrightChannel->set_sensitive (pp->raw.bayersensor.pixelShiftEqualBright); pixelShiftEqualBrightChannel->setValue (pp->raw.bayersensor.pixelShiftEqualBrightChannel); + if (!batchMode) { + pixelShiftEqualBrightChannel->set_sensitive (pp->raw.bayersensor.pixelShiftEqualBright); + } pixelShiftNonGreenCross->setValue (pp->raw.bayersensor.pixelShiftNonGreenCross); ccSteps->setValue (pp->raw.bayersensor.ccSteps); lmmseIterations->setValue (pp->raw.bayersensor.lmmse_iterations); @@ -307,7 +314,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params pixelShiftSigma->setEditedState ( pedited->raw.bayersensor.pixelShiftSigma ? Edited : UnEdited); if(!pedited->raw.bayersensor.method) { - method->set_active(std::numeric_limits::max()); // No name + method->set_active_text(M("GENERAL_UNCHANGED")); } if(!pedited->raw.bayersensor.imageNum) { @@ -319,7 +326,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params } if(!pedited->raw.bayersensor.pixelShiftDemosaicMethod) { - pixelShiftDemosaicMethod->set_active(std::numeric_limits::max()); // No name + pixelShiftDemosaicMethod->set_active_text(M("GENERAL_UNCHANGED")); } } @@ -335,7 +342,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params pixelShiftFrame->hide(); } - // Flase color suppression is applied to all demozaicing method, so don't hide anything + // False color suppression is applied to all demozaicing method, so don't hide anything /*if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::EAHD) || pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::HPHD) || pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::VNG4)) @@ -377,24 +384,24 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe pp->raw.bayersensor.pixelShiftNonGreenCross = pixelShiftNonGreenCross->getLastActive (); int currentRow = method->get_active_row_number(); - if( currentRow >= 0 && currentRow < std::numeric_limits::max()) { + if( currentRow >= 0 && method->get_active_text() != M("GENERAL_UNCHANGED")) { pp->raw.bayersensor.method = procparams::RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method(currentRow)); } currentRow = imageNumber->get_active_row_number(); - if (currentRow < 4) { + if (currentRow >= 0 && imageNumber->get_active_text() != M("GENERAL_UNCHANGED")) { pp->raw.bayersensor.imageNum = currentRow; } currentRow = pixelShiftDemosaicMethod->get_active_row_number(); - if( currentRow >= 0 && currentRow < std::numeric_limits::max()) { + if( currentRow >= 0 && pixelShiftDemosaicMethod->get_active_text() != M("GENERAL_UNCHANGED")) { pp->raw.bayersensor.pixelShiftDemosaicMethod = procparams::RAWParams::BayerSensor::getPSDemosaicMethodString(RAWParams::BayerSensor::PSDemosaicMethod(currentRow)); } if (pedited) { pedited->raw.bayersensor.ccSteps = ccSteps->getEditedState (); - pedited->raw.bayersensor.method = method->get_active_row_number() != std::numeric_limits::max(); + pedited->raw.bayersensor.method = method->get_active_text() != M("GENERAL_UNCHANGED"); pedited->raw.bayersensor.imageNum = imageNumber->get_active_text() != M("GENERAL_UNCHANGED"); pedited->raw.bayersensor.dcbIterations = dcbIterations->getEditedState (); pedited->raw.bayersensor.dcbEnhance = !dcbEnhance->get_inconsistent(); @@ -402,7 +409,7 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe pedited->raw.bayersensor.lmmseIterations = lmmseIterations->getEditedState (); pedited->raw.bayersensor.dualDemosaicContrast = dualDemosaicContrast->getEditedState (); pedited->raw.bayersensor.pixelShiftMotionCorrectionMethod = pixelShiftMotionMethod->get_active_text() != M("GENERAL_UNCHANGED"); - pedited->raw.bayersensor.pixelShiftDemosaicMethod = pixelShiftDemosaicMethod->get_active_row_number() != std::numeric_limits::max(); + pedited->raw.bayersensor.pixelShiftDemosaicMethod = pixelShiftDemosaicMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->raw.bayersensor.pixelShiftEperIso = pixelShiftEperIso->getEditedState (); pedited->raw.bayersensor.pixelShiftSigma = pixelShiftSigma->getEditedState (); pedited->raw.bayersensor.pixelShiftShowMotion = !pixelShiftShowMotion->get_inconsistent(); @@ -443,11 +450,11 @@ void BayerProcess::trimValues (rtengine::procparams::ProcParams* pp) void BayerProcess::setBatchMode(bool batchMode) { method->append (M("GENERAL_UNCHANGED")); - method->set_active(std::numeric_limits::max()); // No name + method->set_active_text(M("GENERAL_UNCHANGED")); // No name pixelShiftMotionMethod->append (M("GENERAL_UNCHANGED")); pixelShiftMotionMethod->set_active_text (M("GENERAL_UNCHANGED")); pixelShiftDemosaicMethod->append (M("GENERAL_UNCHANGED")); - pixelShiftDemosaicMethod->set_active(std::numeric_limits::max()); // No name + pixelShiftDemosaicMethod->set_active_text(M("GENERAL_UNCHANGED")); // No name imageNumber->append (M("GENERAL_UNCHANGED")); imageNumber->set_active_text (M("GENERAL_UNCHANGED")); ToolPanel::setBatchMode (batchMode); @@ -508,29 +515,29 @@ void BayerProcess::adjusterChanged (Adjuster* a, double newval) void BayerProcess::methodChanged () { - const int curSelection = method->get_active_row_number(); - const RAWParams::BayerSensor::Method method = RAWParams::BayerSensor::Method(curSelection); + const int currentSelection = method->get_active_row_number(); + const RAWParams::BayerSensor::Method currentMethod = RAWParams::BayerSensor::Method(currentSelection); if (!batchMode) { - if (method == procparams::RAWParams::BayerSensor::Method::DCB) { + if (currentMethod == procparams::RAWParams::BayerSensor::Method::DCB) { dcbOptions->show(); } else { dcbOptions->hide(); } - if (method == procparams::RAWParams::BayerSensor::Method::LMMSE) { + if (currentMethod == procparams::RAWParams::BayerSensor::Method::LMMSE) { lmmseOptions->show(); } else { lmmseOptions->hide(); } - if (method == procparams::RAWParams::BayerSensor::Method::AMAZEVNG4) { + if (currentMethod == procparams::RAWParams::BayerSensor::Method::AMAZEVNG4) { dualDemosaicOptions->show(); } else { dualDemosaicOptions->hide(); } - if (method == procparams::RAWParams::BayerSensor::Method::PIXELSHIFT) { + if (currentMethod == procparams::RAWParams::BayerSensor::Method::PIXELSHIFT) { if(pixelShiftMotionMethod->get_active_row_number() == 2) { pixelShiftOptions->show(); } else { @@ -542,34 +549,21 @@ void BayerProcess::methodChanged () } } - Glib::ustring methodName = ""; - bool ppreq = false; + oldMethod = currentSelection; - if (curSelection >= 0 && curSelection < std::numeric_limits::max()) { - methodName = procparams::RAWParams::BayerSensor::getMethodString(method); - - if (method == procparams::RAWParams::BayerSensor::Method::MONO || RAWParams::BayerSensor::Method(oldMethod) == procparams::RAWParams::BayerSensor::Method::MONO) { - ppreq = true; - } - } - - oldMethod = curSelection; - - if (listener) { - listener->panelChanged (ppreq ? EvDemosaicMethodPreProc : EvDemosaicMethod, methodName); + if (listener && method->get_active_row_number() >= 0) { + listener->panelChanged ( + currentMethod == procparams::RAWParams::BayerSensor::Method::MONO || RAWParams::BayerSensor::Method(oldMethod) == procparams::RAWParams::BayerSensor::Method::MONO + ? EvDemosaicMethodPreProc + : EvDemosaicMethod, method->get_active_text()); } } void BayerProcess::pixelShiftDemosaicMethodChanged () { - if (listener) { - const int curSelection = pixelShiftDemosaicMethod->get_active_row_number(); - if (curSelection >= 0 && curSelection < std::numeric_limits::max()) { - const RAWParams::BayerSensor::PSDemosaicMethod method = RAWParams::BayerSensor::PSDemosaicMethod(curSelection); - Glib::ustring methodName = procparams::RAWParams::BayerSensor::getPSDemosaicMethodString(method);; - listener->panelChanged (EvDemosaicPixelshiftDemosaicMethod, methodName); - } + if (listener && pixelShiftDemosaicMethod->get_active_row_number() >= 0) { + listener->panelChanged (EvDemosaicPixelshiftDemosaicMethod, pixelShiftDemosaicMethod->get_active_text()); } } @@ -646,13 +640,13 @@ void BayerProcess::pixelShiftMotionMethodChanged () pixelShiftOptions->show(); pixelShiftShowMotion->show(); pixelShiftShowMotionMaskOnly->show(); - } else { + } else if(pixelShiftMotionMethod->get_active_row_number() > 0) { pixelShiftOptions->hide(); pixelShiftShowMotion->show(); pixelShiftShowMotionMaskOnly->show(); } } - if (listener) { + if (listener && pixelShiftMotionMethod->get_active_row_number() >= 0) { listener->panelChanged (EvPixelShiftMotionMethod, pixelShiftMotionMethod->get_active_text()); } } diff --git a/rtgui/bayerprocess.h b/rtgui/bayerprocess.h index bfcb99878..2b3e420bc 100644 --- a/rtgui/bayerprocess.h +++ b/rtgui/bayerprocess.h @@ -39,7 +39,7 @@ protected: CheckBox* dcbEnhance; Gtk::VBox *lmmseOptions; Adjuster* lmmseIterations; - Gtk::VBox *pixelShiftFrame; + Gtk::Frame *pixelShiftFrame; Gtk::VBox *pixelShiftOptions; MyComboBoxText* pixelShiftMotionMethod; MyComboBoxText* pixelShiftDemosaicMethod; diff --git a/rtgui/exportpanel.cc b/rtgui/exportpanel.cc index 75156b56b..6c9b96ab7 100644 --- a/rtgui/exportpanel.cc +++ b/rtgui/exportpanel.cc @@ -60,7 +60,7 @@ ExportPanel::ExportPanel () : listener (nullptr) // ---------------------- Bayer sensor frame ----------------------- - Gtk::Frame *bayerFrame = Gtk::manage ( new Gtk::Frame (M ("TP_RAW_SENSOR_BAYER"))); + Gtk::Frame *bayerFrame = Gtk::manage ( new Gtk::Frame (M ("TP_RAW_SENSOR_BAYER_LABEL"))); Gtk::VBox* bayerFrameVBox = Gtk::manage (new Gtk::VBox ()); Gtk::HBox* hb_raw_bayer_method = Gtk::manage (new Gtk::HBox ()); @@ -83,7 +83,7 @@ ExportPanel::ExportPanel () : listener (nullptr) // ---------------------- Bayer sensor frame ----------------------- - Gtk::Frame *xtransFrame = Gtk::manage ( new Gtk::Frame (M ("TP_RAW_SENSOR_XTRANS"))); + Gtk::Frame *xtransFrame = Gtk::manage ( new Gtk::Frame (M ("TP_RAW_SENSOR_XTRANS_LABEL"))); Gtk::VBox* xtransFrameVBox = Gtk::manage (new Gtk::VBox ()); Gtk::HBox* hb_raw_xtrans_method = Gtk::manage (new Gtk::HBox ()); @@ -130,9 +130,11 @@ ExportPanel::ExportPanel () : listener (nullptr) bayerFrameVBox->pack_start (*bypass_raw_bayer_linenoise, Gtk::PACK_SHRINK, 4); bayerFrameVBox->pack_start (*bypass_raw_bayer_greenthresh, Gtk::PACK_SHRINK, 4); bayerFrame->add (*bayerFrameVBox); + bypass_box->pack_start(*bayerFrame, Gtk::PACK_SHRINK, 4); xtransFrameVBox->pack_start (*hb_raw_xtrans_method, Gtk::PACK_SHRINK, 4); xtransFrame->add (*xtransFrameVBox); + bypass_box->pack_start(*xtransFrame, Gtk::PACK_SHRINK, 4); bypass_box->pack_start (*bypass_raw_ccSteps, Gtk::PACK_SHRINK, 4); bypass_box->pack_start (*bypass_raw_ca, Gtk::PACK_SHRINK, 4); @@ -271,14 +273,14 @@ void ExportPanel::SaveSettingsAsDefault() //saving Bayer demosaic_method int currentRow = raw_bayer_method->get_active_row_number(); - if (currentRow >= 0 && currentRow < std::numeric_limits::max()) { + if (currentRow >= 0) { FE_OPT_STORE_ (options.fastexport_raw_bayer_method, procparams::RAWParams::BayerSensor::getMethodStrings()[currentRow]); } //saving X-Trans demosaic_method currentRow = raw_xtrans_method->get_active_row_number(); - if (currentRow >= 0 && currentRow < std::numeric_limits::max()) { + if (currentRow >= 0) { FE_OPT_STORE_ (options.fastexport_raw_xtrans_method, procparams::RAWParams::XTransSensor::getMethodStrings()[currentRow]); } @@ -332,7 +334,7 @@ void ExportPanel::LoadDefaultSettings() bypass_raw_ff->set_active (options.fastexport_bypass_raw_ff ); // Bayer demosaic method - raw_bayer_method->set_active(std::numeric_limits::max()); + raw_bayer_method->set_active(0); for (size_t i = 0; i < RAWParams::BayerSensor::getMethodStrings().size(); ++i) if (options.fastexport_raw_bayer_method == procparams::RAWParams::BayerSensor::getMethodStrings()[i]) { @@ -341,7 +343,7 @@ void ExportPanel::LoadDefaultSettings() } // X-Trans demosaic method - raw_xtrans_method->set_active(std::numeric_limits::max()); + raw_xtrans_method->set_active(0); for (size_t i = 0; i < procparams::RAWParams::XTransSensor::getMethodStrings().size(); ++i) if (options.fastexport_raw_xtrans_method == procparams::RAWParams::XTransSensor::getMethodStrings()[i]) { diff --git a/rtgui/flatfield.cc b/rtgui/flatfield.cc index 2b57aa470..21b5f319a 100644 --- a/rtgui/flatfield.cc +++ b/rtgui/flatfield.cc @@ -136,7 +136,7 @@ void FlatField::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi flatFieldClipControl->setAutoInconsistent(multiImage && !pedited->raw.ff_AutoClipControl); if( !pedited->raw.ff_BlurType ) { - flatFieldBlurType->set_active(std::numeric_limits::max()); // No name + flatFieldBlurType->set_active_text(M("GENERAL_UNCHANGED")); } } @@ -217,7 +217,7 @@ void FlatField::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedit int currentRow = flatFieldBlurType->get_active_row_number(); - if( currentRow >= 0 && currentRow < std::numeric_limits::max()) { + if( currentRow >= 0 && flatFieldBlurType->get_active_text() != M("GENERAL_UNCHANGED")) { pp->raw.ff_BlurType = procparams::RAWParams::getFlatFieldBlurTypeStrings()[currentRow]; } @@ -227,7 +227,7 @@ void FlatField::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedit pedited->raw.ff_BlurRadius = flatFieldBlurRadius->getEditedState (); pedited->raw.ff_clipControl = flatFieldClipControl->getEditedState (); pedited->raw.ff_AutoClipControl = !flatFieldClipControl->getAutoInconsistent(); - pedited->raw.ff_BlurType = flatFieldBlurType->get_active_row_number() != std::numeric_limits::max(); + pedited->raw.ff_BlurType = flatFieldBlurType->get_active_text() != M("GENERAL_UNCHANGED"); } } @@ -340,20 +340,14 @@ void FlatField::flatFieldBlurTypeChanged () const int curSelection = flatFieldBlurType->get_active_row_number(); const RAWParams::FlatFieldBlurType blur_type = RAWParams::FlatFieldBlurType(curSelection); - Glib::ustring s; - - if (curSelection >= 0 && curSelection < std::numeric_limits::max()) { - s = flatFieldBlurType->get_active_text(); - } - if (multiImage || blur_type == procparams::RAWParams::FlatFieldBlurType::AREA) { flatFieldClipControl->show(); } else { flatFieldClipControl->hide(); } - if (listener) { - listener->panelChanged (EvFlatFieldBlurType, s); + if (listener && curSelection >= 0) { + listener->panelChanged (EvFlatFieldBlurType, flatFieldBlurType->get_active_text()); } } diff --git a/rtgui/xtransprocess.cc b/rtgui/xtransprocess.cc index a001758f9..456a7c4d5 100644 --- a/rtgui/xtransprocess.cc +++ b/rtgui/xtransprocess.cc @@ -83,8 +83,6 @@ void XTransProcess::read(const rtengine::procparams::ProcParams* pp, const Param disableListener (); methodconn.block (true); - method->set_active(std::numeric_limits::max()); - for (size_t i = 0; i < RAWParams::XTransSensor::getMethodStrings().size(); ++i) if( pp->raw.xtranssensor.method == RAWParams::XTransSensor::getMethodStrings()[i]) { method->set_active(i); @@ -96,7 +94,7 @@ void XTransProcess::read(const rtengine::procparams::ProcParams* pp, const Param ccSteps->setEditedState (pedited->raw.xtranssensor.ccSteps ? Edited : UnEdited); if( !pedited->raw.xtranssensor.method ) { - method->set_active(std::numeric_limits::max()); // No name + method->set_active_text(M("GENERAL_UNCHANGED")); } } @@ -113,12 +111,12 @@ void XTransProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* p int currentRow = method->get_active_row_number(); - if (currentRow >= 0 && currentRow < std::numeric_limits::max()) { + if (currentRow >= 0 && method->get_active_text() != M("GENERAL_UNCHANGED")) { pp->raw.xtranssensor.method = procparams::RAWParams::XTransSensor::getMethodStrings()[currentRow]; } if (pedited) { - pedited->raw.xtranssensor.method = method->get_active_row_number() != std::numeric_limits::max(); + pedited->raw.xtranssensor.method = method->get_active_text() != M("GENERAL_UNCHANGED"); pedited->raw.xtranssensor.ccSteps = ccSteps->getEditedState (); } } @@ -131,7 +129,7 @@ void XTransProcess::setAdjusterBehavior (bool falsecoloradd) void XTransProcess::setBatchMode(bool batchMode) { method->append (M("GENERAL_UNCHANGED")); - method->set_active(std::numeric_limits::max()); // No name + method->set_active_text(M("GENERAL_UNCHANGED")); ToolPanel::setBatchMode (batchMode); ccSteps->showEditedCB (); } @@ -159,22 +157,14 @@ void XTransProcess::adjusterChanged (Adjuster* a, double newval) void XTransProcess::methodChanged () { const int curSelection = method->get_active_row_number(); - const RAWParams::XTransSensor::Method method = RAWParams::XTransSensor::Method(curSelection); - - Glib::ustring methodName; - bool ppreq = false; - - if (curSelection >= 0 && curSelection < std::numeric_limits::max()) { - methodName = RAWParams::XTransSensor::getMethodStrings()[curSelection]; - - if (method == RAWParams::XTransSensor::Method::MONO || RAWParams::XTransSensor::Method(oldSelection) == RAWParams::XTransSensor::Method::MONO) { - ppreq = true; - } - } + const RAWParams::XTransSensor::Method currentMethod = RAWParams::XTransSensor::Method(curSelection); oldSelection = curSelection; - if (listener) { - listener->panelChanged (ppreq ? EvDemosaicMethodPreProc : EvDemosaicMethod, methodName); + if (listener && method->get_active_row_number() >= 0) { + listener->panelChanged ( + currentMethod == RAWParams::XTransSensor::Method::MONO || RAWParams::XTransSensor::Method(oldSelection) == RAWParams::XTransSensor::Method::MONO + ? EvDemosaicMethodPreProc + : EvDemosaicMethod, method->get_active_text()); } } From 51d8c76eb9fcbbf8a60b84d838348077b37d7577 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 2 Jun 2018 17:22:08 +0200 Subject: [PATCH 41/85] Made own compilation uint for vng4 demosaic. Made vng4 multi-frame aware --- rtengine/CMakeLists.txt | 1 + rtengine/demosaic_algos.cc | 326 +-------------------------------- rtengine/rawimagesource.h | 2 +- rtengine/rawimagesource_i.h | 2 +- rtengine/vng4_demosaic_RT.cc | 342 +++++++++++++++++++++++++++++++++++ 5 files changed, 351 insertions(+), 322 deletions(-) create mode 100644 rtengine/vng4_demosaic_RT.cc diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index b12fa5e46..67b07c48c 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -123,6 +123,7 @@ set(RTENGINESOURCEFILES gamutwarning.cc ipshadowshighlights.cc xtrans_demosaic.cc + vng4_demosaic_RT.cc ) if(LENSFUN_HAS_LOAD_DIRECTORY) diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc index d0f4eebd8..f94f6bad6 100644 --- a/rtengine/demosaic_algos.cc +++ b/rtengine/demosaic_algos.cc @@ -284,11 +284,11 @@ void RawImageSource::eahd_demosaic () // Interpolate R and B for (int i = 0; i < H; i++) { if (i == 0) { - interpolate_row_rb_mul_pp (red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + interpolate_row_rb_mul_pp (rawData, red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); } else if (i == H - 1) { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); + interpolate_row_rb_mul_pp (rawData, red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); } else { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + interpolate_row_rb_mul_pp (rawData, red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); } } } @@ -545,11 +545,11 @@ void RawImageSource::hphd_demosaic () for (int i = 0; i < H; i++) { if (i == 0) { - interpolate_row_rb_mul_pp (red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + interpolate_row_rb_mul_pp (rawData, red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); } else if (i == H - 1) { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); + interpolate_row_rb_mul_pp (rawData, red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); } else { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + interpolate_row_rb_mul_pp (rawData, red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); } } @@ -558,320 +558,6 @@ void RawImageSource::hphd_demosaic () } } -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#define fc(row,col) (prefilters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) -typedef unsigned short ushort; -void RawImageSource::vng4_demosaic (const array2D &rawData, array2D &red, array2D &green, array2D &blue) -{ - const signed short int *cp, terms[] = { - -2, -2, +0, -1, 0, 0x01, -2, -2, +0, +0, 1, 0x01, -2, -1, -1, +0, 0, 0x01, - -2, -1, +0, -1, 0, 0x02, -2, -1, +0, +0, 0, 0x03, -2, -1, +0, +1, 1, 0x01, - -2, +0, +0, -1, 0, 0x06, -2, +0, +0, +0, 1, 0x02, -2, +0, +0, +1, 0, 0x03, - -2, +1, -1, +0, 0, 0x04, -2, +1, +0, -1, 1, 0x04, -2, +1, +0, +0, 0, 0x06, - -2, +1, +0, +1, 0, 0x02, -2, +2, +0, +0, 1, 0x04, -2, +2, +0, +1, 0, 0x04, - -1, -2, -1, +0, 0, 0x80, -1, -2, +0, -1, 0, 0x01, -1, -2, +1, -1, 0, 0x01, - -1, -2, +1, +0, 1, 0x01, -1, -1, -1, +1, 0, 0x88, -1, -1, +1, -2, 0, 0x40, - -1, -1, +1, -1, 0, 0x22, -1, -1, +1, +0, 0, 0x33, -1, -1, +1, +1, 1, 0x11, - -1, +0, -1, +2, 0, 0x08, -1, +0, +0, -1, 0, 0x44, -1, +0, +0, +1, 0, 0x11, - -1, +0, +1, -2, 1, 0x40, -1, +0, +1, -1, 0, 0x66, -1, +0, +1, +0, 1, 0x22, - -1, +0, +1, +1, 0, 0x33, -1, +0, +1, +2, 1, 0x10, -1, +1, +1, -1, 1, 0x44, - -1, +1, +1, +0, 0, 0x66, -1, +1, +1, +1, 0, 0x22, -1, +1, +1, +2, 0, 0x10, - -1, +2, +0, +1, 0, 0x04, -1, +2, +1, +0, 1, 0x04, -1, +2, +1, +1, 0, 0x04, - +0, -2, +0, +0, 1, 0x80, +0, -1, +0, +1, 1, 0x88, +0, -1, +1, -2, 0, 0x40, - +0, -1, +1, +0, 0, 0x11, +0, -1, +2, -2, 0, 0x40, +0, -1, +2, -1, 0, 0x20, - +0, -1, +2, +0, 0, 0x30, +0, -1, +2, +1, 1, 0x10, +0, +0, +0, +2, 1, 0x08, - +0, +0, +2, -2, 1, 0x40, +0, +0, +2, -1, 0, 0x60, +0, +0, +2, +0, 1, 0x20, - +0, +0, +2, +1, 0, 0x30, +0, +0, +2, +2, 1, 0x10, +0, +1, +1, +0, 0, 0x44, - +0, +1, +1, +2, 0, 0x10, +0, +1, +2, -1, 1, 0x40, +0, +1, +2, +0, 0, 0x60, - +0, +1, +2, +1, 0, 0x20, +0, +1, +2, +2, 0, 0x10, +1, -2, +1, +0, 0, 0x80, - +1, -1, +1, +1, 0, 0x88, +1, +0, +1, +2, 0, 0x08, +1, +0, +2, -1, 0, 0x40, - +1, +0, +2, +1, 0, 0x10 - }, - chood[] = { -1, -1, -1, 0, -1, +1, 0, +1, +1, +1, +1, 0, +1, -1, 0, -1 }; - - double progress = 0.0; - const bool plistenerActive = plistener; - - if (plistenerActive) { - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4))); - plistener->setProgress (progress); - } - - const unsigned prefilters = ri->prefilters; - const int width = W, height = H; - constexpr unsigned int colors = 4; - float (*image)[4]; - - image = (float (*)[4]) calloc (height * width, sizeof * image); - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int ii = 0; ii < H; ii++) - for (int jj = 0; jj < W; jj++) { - image[ii * W + jj][fc(ii, jj)] = rawData[ii][jj]; - } - - { - int lcode[16][16][32]; - float mul[16][16][8]; - float csum[16][16][4]; - -// first linear interpolation - for (int row = 0; row < 16; row++) - for (int col = 0; col < 16; col++) { - int * ip = lcode[row][col]; - int mulcount = 0; - float sum[4]; - memset (sum, 0, sizeof sum); - - for (int y = -1; y <= 1; y++) - for (int x = -1; x <= 1; x++) { - int shift = (y == 0) + (x == 0); - - if (shift == 2) { - continue; - } - - int color = fc(row + y, col + x); - *ip++ = (width * y + x) * 4 + color; - - mul[row][col][mulcount] = (1 << shift); - *ip++ = color; - sum[color] += (1 << shift); - mulcount++; - } - - int colcount = 0; - - for (unsigned int c = 0; c < colors; c++) - if (c != fc(row, col)) { - *ip++ = c; - csum[row][col][colcount] = sum[c]; - colcount ++; - } - } - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int row = 1; row < height - 1; row++) { - for (int col = 1; col < width - 1; col++) { - float * pix = image[row * width + col]; - int * ip = lcode[row & 15][col & 15]; - float sum[4]; - memset (sum, 0, sizeof sum); - - for (int i = 0; i < 8; i++, ip += 2) { - sum[ip[1]] += pix[ip[0]] * mul[row & 15][col & 15][i]; - } - - for (unsigned int i = 0; i < colors - 1; i++, ip++) { - pix[ip[0]] = sum[ip[0]] / csum[row & 15][col & 15][i]; - } - } - } - } - - const int prow = 7, pcol = 1; - int *code[8][2]; - int t, g; - int * ip = (int *) calloc ((prow + 1) * (pcol + 1), 1280); - - for (int row = 0; row <= prow; row++) /* Precalculate for VNG */ - for (int col = 0; col <= pcol; col++) { - code[row][col] = ip; - - for (cp = terms, t = 0; t < 64; t++) { - int y1 = *cp++; - int x1 = *cp++; - int y2 = *cp++; - int x2 = *cp++; - int weight = *cp++; - int grads = *cp++; - unsigned int color = fc(row + y1, col + x1); - - if (fc(row + y2, col + x2) != color) { - continue; - } - - int diag = (fc(row, col + 1) == color && fc(row + 1, col) == color) ? 2 : 1; - - if (abs(y1 - y2) == diag && abs(x1 - x2) == diag) { - continue; - } - - *ip++ = (y1 * width + x1) * 4 + color; - *ip++ = (y2 * width + x2) * 4 + color; - *ip++ = weight; - - for (g = 0; g < 8; g++) - if (grads & (1 << g)) { - *ip++ = g; - } - - *ip++ = -1; - } - - *ip++ = INT_MAX; - - for (cp = chood, g = 0; g < 8; g++) { - int y = *cp++; - int x = *cp++; - *ip++ = (y * width + x) * 4; - unsigned int color = fc(row, col); - - if (fc(row + y, col + x) != color && fc(row + y * 2, col + x * 2) == color) { - *ip++ = (y * width + x) * 8 + color; - } else { - *ip++ = 0; - } - } - } - - if(plistenerActive) { - progress = 0.1; - plistener->setProgress (progress); - } - - -#ifdef _OPENMP - #pragma omp parallel -#endif - { - float gval[8], thold, sum[3]; - int g; - const int progressStep = 64; - const double progressInc = (0.98 - progress) / ((height - 2) / progressStep); -#ifdef _OPENMP - #pragma omp for nowait -#endif - - for (int row = 2; row < height - 2; row++) { /* Do VNG interpolation */ - for (int col = 2; col < width - 2; col++) { - float * pix = image[row * width + col]; - int * ip = code[row & prow][col & pcol]; - memset (gval, 0, sizeof gval); - - while ((g = ip[0]) != INT_MAX) { /* Calculate gradients */ - float diff = fabsf(pix[g] - pix[ip[1]]) * (1 << ip[2]); - gval[ip[3]] += diff; - ip += 4; - - while ((g = *ip++) != -1) { - gval[g] += diff; - } - } - - ip++; - { - float gmin, gmax; - gmin = gmax = gval[0]; /* Choose a threshold */ - - for (g = 1; g < 8; g++) { - if (gmin > gval[g]) { - gmin = gval[g]; - } - - if (gmax < gval[g]) { - gmax = gval[g]; - } - } - - thold = gmin + (gmax / 2); - } - memset (sum, 0, sizeof sum); - float t1, t2; - int color = fc(row, col); - t1 = t2 = pix[color]; - - if(color & 1) { - int num = 0; - - for (g = 0; g < 8; g++, ip += 2) { /* Average the neighbors */ - if (gval[g] <= thold) { - if(ip[1]) { - sum[0] += (t1 + pix[ip[1]]) * 0.5f; - } - - sum[1] += pix[ip[0] + (color ^ 2)]; - num++; - } - } - - t1 += (sum[1] - sum[0]) / num; - } else { - int num = 0; - - for (g = 0; g < 8; g++, ip += 2) { /* Average the neighbors */ - if (gval[g] <= thold) { - sum[1] += pix[ip[0] + 1]; - sum[2] += pix[ip[0] + 3]; - - if(ip[1]) { - sum[0] += (t1 + pix[ip[1]]) * 0.5f; - } - - num++; - } - } - - t1 += (sum[1] - sum[0]) / num; - t2 += (sum[2] - sum[0]) / num; - } - - green[row][col] = 0.5f * (t1 + t2); - } - - if(plistenerActive) { - if((row % progressStep) == 0) -#ifdef _OPENMP - #pragma omp critical (updateprogress) -#endif - { - progress += progressInc; - plistener->setProgress (progress); - } - } - } - - } - free (code[0][0]); - free (image); - - if(plistenerActive) { - plistener->setProgress (0.98); - } - - // Interpolate R and B -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int i = 0; i < H; i++) { - if (i == 0) - // rm, gm, bm must be recovered - //interpolate_row_rb_mul_pp (red, blue, NULL, green[i], green[i+1], i, rm, gm, bm, 0, W, 1); - { - interpolate_row_rb_mul_pp (red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); - } else if (i == H - 1) { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); - } else { - interpolate_row_rb_mul_pp (red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); - } - } - - if(plistenerActive) { - plistener->setProgress (1.0); - } -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - #undef fc #define fc(row,col) \ (ri->get_filters() >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 878886fed..2672486bd 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -243,7 +243,7 @@ protected: inline void convert_to_cielab_row (float* ar, float* ag, float* ab, float* oL, float* oa, float* ob); inline void interpolate_row_g (float* agh, float* agv, int i); inline void interpolate_row_rb (float* ar, float* ab, float* pg, float* cg, float* ng, int i); - inline void interpolate_row_rb_mul_pp (float* ar, float* ab, float* pg, float* cg, float* ng, int i, float r_mul, float g_mul, float b_mul, int x1, int width, int skip); + inline void interpolate_row_rb_mul_pp (const array2D &rawData, float* ar, float* ab, float* pg, float* cg, float* ng, int i, float r_mul, float g_mul, float b_mul, int x1, int width, int skip); float* CA_correct_RT (const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer, bool fitParamsIn, bool fitParamsOut, float * buffer, bool freeBuffer); void ddct8x8s(int isgn, float a[8][8]); diff --git a/rtengine/rawimagesource_i.h b/rtengine/rawimagesource_i.h index 689ab03db..91d62ecab 100644 --- a/rtengine/rawimagesource_i.h +++ b/rtengine/rawimagesource_i.h @@ -276,7 +276,7 @@ inline void RawImageSource::interpolate_row_rb (float* ar, float* ab, float* pg, } } -inline void RawImageSource::interpolate_row_rb_mul_pp (float* ar, float* ab, float* pg, float* cg, float* ng, int i, float r_mul, float g_mul, float b_mul, int x1, int width, int skip) +inline void RawImageSource::interpolate_row_rb_mul_pp (const array2D &rawData, float* ar, float* ab, float* pg, float* cg, float* ng, int i, float r_mul, float g_mul, float b_mul, int x1, int width, int skip) { if ((ri->ISRED(i, 0) || ri->ISRED(i, 1)) && pg && ng) { diff --git a/rtengine/vng4_demosaic_RT.cc b/rtengine/vng4_demosaic_RT.cc new file mode 100644 index 000000000..49c1b4f90 --- /dev/null +++ b/rtengine/vng4_demosaic_RT.cc @@ -0,0 +1,342 @@ +//////////////////////////////////////////////////////////////// +// +// VNG4 demosaic algorithm +// +// optimized for speed by Ingo Weyrich +// +// +// vng4_interpolate_RT.cc is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +//////////////////////////////////////////////////////////////// + +#include "rtengine.h" +#include "rawimagesource.h" +#include "rawimagesource_i.h" +//#include "rt_math.h" +#include "../rtgui/multilangmgr.h" +#define BENCHMARK +#include "StopWatch.h" + +namespace rtengine +{ +#define fc(row,col) (prefilters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) +typedef unsigned short ushort; +void RawImageSource::vng4_demosaic (const array2D &rawData, array2D &red, array2D &green, array2D &blue) +{ + BENCHFUN + const signed short int *cp, terms[] = { + -2, -2, +0, -1, 0, 0x01, -2, -2, +0, +0, 1, 0x01, -2, -1, -1, +0, 0, 0x01, + -2, -1, +0, -1, 0, 0x02, -2, -1, +0, +0, 0, 0x03, -2, -1, +0, +1, 1, 0x01, + -2, +0, +0, -1, 0, 0x06, -2, +0, +0, +0, 1, 0x02, -2, +0, +0, +1, 0, 0x03, + -2, +1, -1, +0, 0, 0x04, -2, +1, +0, -1, 1, 0x04, -2, +1, +0, +0, 0, 0x06, + -2, +1, +0, +1, 0, 0x02, -2, +2, +0, +0, 1, 0x04, -2, +2, +0, +1, 0, 0x04, + -1, -2, -1, +0, 0, 0x80, -1, -2, +0, -1, 0, 0x01, -1, -2, +1, -1, 0, 0x01, + -1, -2, +1, +0, 1, 0x01, -1, -1, -1, +1, 0, 0x88, -1, -1, +1, -2, 0, 0x40, + -1, -1, +1, -1, 0, 0x22, -1, -1, +1, +0, 0, 0x33, -1, -1, +1, +1, 1, 0x11, + -1, +0, -1, +2, 0, 0x08, -1, +0, +0, -1, 0, 0x44, -1, +0, +0, +1, 0, 0x11, + -1, +0, +1, -2, 1, 0x40, -1, +0, +1, -1, 0, 0x66, -1, +0, +1, +0, 1, 0x22, + -1, +0, +1, +1, 0, 0x33, -1, +0, +1, +2, 1, 0x10, -1, +1, +1, -1, 1, 0x44, + -1, +1, +1, +0, 0, 0x66, -1, +1, +1, +1, 0, 0x22, -1, +1, +1, +2, 0, 0x10, + -1, +2, +0, +1, 0, 0x04, -1, +2, +1, +0, 1, 0x04, -1, +2, +1, +1, 0, 0x04, + +0, -2, +0, +0, 1, 0x80, +0, -1, +0, +1, 1, 0x88, +0, -1, +1, -2, 0, 0x40, + +0, -1, +1, +0, 0, 0x11, +0, -1, +2, -2, 0, 0x40, +0, -1, +2, -1, 0, 0x20, + +0, -1, +2, +0, 0, 0x30, +0, -1, +2, +1, 1, 0x10, +0, +0, +0, +2, 1, 0x08, + +0, +0, +2, -2, 1, 0x40, +0, +0, +2, -1, 0, 0x60, +0, +0, +2, +0, 1, 0x20, + +0, +0, +2, +1, 0, 0x30, +0, +0, +2, +2, 1, 0x10, +0, +1, +1, +0, 0, 0x44, + +0, +1, +1, +2, 0, 0x10, +0, +1, +2, -1, 1, 0x40, +0, +1, +2, +0, 0, 0x60, + +0, +1, +2, +1, 0, 0x20, +0, +1, +2, +2, 0, 0x10, +1, -2, +1, +0, 0, 0x80, + +1, -1, +1, +1, 0, 0x88, +1, +0, +1, +2, 0, 0x08, +1, +0, +2, -1, 0, 0x40, + +1, +0, +2, +1, 0, 0x10 + }, + chood[] = { -1, -1, -1, 0, -1, +1, 0, +1, +1, +1, +1, 0, +1, -1, 0, -1 }; + + double progress = 0.0; + const bool plistenerActive = plistener; + + if (plistenerActive) { + plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4))); + plistener->setProgress (progress); + } + + const unsigned prefilters = ri->prefilters; + const int width = W, height = H; + constexpr unsigned int colors = 4; + float (*image)[4]; + + image = (float (*)[4]) calloc (height * width, sizeof * image); + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ii = 0; ii < H; ii++) + for (int jj = 0; jj < W; jj++) { + image[ii * W + jj][fc(ii, jj)] = rawData[ii][jj]; + } + + { + int lcode[16][16][32]; + float mul[16][16][8]; + float csum[16][16][4]; + +// first linear interpolation + for (int row = 0; row < 16; row++) + for (int col = 0; col < 16; col++) { + int * ip = lcode[row][col]; + int mulcount = 0; + float sum[4]; + memset (sum, 0, sizeof sum); + + for (int y = -1; y <= 1; y++) + for (int x = -1; x <= 1; x++) { + int shift = (y == 0) + (x == 0); + + if (shift == 2) { + continue; + } + + int color = fc(row + y, col + x); + *ip++ = (width * y + x) * 4 + color; + + mul[row][col][mulcount] = (1 << shift); + *ip++ = color; + sum[color] += (1 << shift); + mulcount++; + } + + int colcount = 0; + + for (unsigned int c = 0; c < colors; c++) + if (c != fc(row, col)) { + *ip++ = c; + csum[row][col][colcount] = sum[c]; + colcount ++; + } + } + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int row = 1; row < height - 1; row++) { + for (int col = 1; col < width - 1; col++) { + float * pix = image[row * width + col]; + int * ip = lcode[row & 15][col & 15]; + float sum[4]; + memset (sum, 0, sizeof sum); + + for (int i = 0; i < 8; i++, ip += 2) { + sum[ip[1]] += pix[ip[0]] * mul[row & 15][col & 15][i]; + } + + for (unsigned int i = 0; i < colors - 1; i++, ip++) { + pix[ip[0]] = sum[ip[0]] / csum[row & 15][col & 15][i]; + } + } + } + } + + const int prow = 7, pcol = 1; + int *code[8][2]; + int t, g; + int * ip = (int *) calloc ((prow + 1) * (pcol + 1), 1280); + + for (int row = 0; row <= prow; row++) /* Precalculate for VNG */ + for (int col = 0; col <= pcol; col++) { + code[row][col] = ip; + + for (cp = terms, t = 0; t < 64; t++) { + int y1 = *cp++; + int x1 = *cp++; + int y2 = *cp++; + int x2 = *cp++; + int weight = *cp++; + int grads = *cp++; + unsigned int color = fc(row + y1, col + x1); + + if (fc(row + y2, col + x2) != color) { + continue; + } + + int diag = (fc(row, col + 1) == color && fc(row + 1, col) == color) ? 2 : 1; + + if (abs(y1 - y2) == diag && abs(x1 - x2) == diag) { + continue; + } + + *ip++ = (y1 * width + x1) * 4 + color; + *ip++ = (y2 * width + x2) * 4 + color; + *ip++ = weight; + + for (g = 0; g < 8; g++) + if (grads & (1 << g)) { + *ip++ = g; + } + + *ip++ = -1; + } + + *ip++ = INT_MAX; + + for (cp = chood, g = 0; g < 8; g++) { + int y = *cp++; + int x = *cp++; + *ip++ = (y * width + x) * 4; + unsigned int color = fc(row, col); + + if (fc(row + y, col + x) != color && fc(row + y * 2, col + x * 2) == color) { + *ip++ = (y * width + x) * 8 + color; + } else { + *ip++ = 0; + } + } + } + + if(plistenerActive) { + progress = 0.1; + plistener->setProgress (progress); + } + + +#ifdef _OPENMP + #pragma omp parallel +#endif + { + float gval[8], thold, sum[3]; + int g; + const int progressStep = 64; + const double progressInc = (0.98 - progress) / ((height - 2) / progressStep); +#ifdef _OPENMP + #pragma omp for nowait +#endif + + for (int row = 2; row < height - 2; row++) { /* Do VNG interpolation */ + for (int col = 2; col < width - 2; col++) { + float * pix = image[row * width + col]; + int * ip = code[row & prow][col & pcol]; + memset (gval, 0, sizeof gval); + + while ((g = ip[0]) != INT_MAX) { /* Calculate gradients */ + float diff = fabsf(pix[g] - pix[ip[1]]) * (1 << ip[2]); + gval[ip[3]] += diff; + ip += 4; + + while ((g = *ip++) != -1) { + gval[g] += diff; + } + } + + ip++; + { + float gmin, gmax; + gmin = gmax = gval[0]; /* Choose a threshold */ + + for (g = 1; g < 8; g++) { + if (gmin > gval[g]) { + gmin = gval[g]; + } + + if (gmax < gval[g]) { + gmax = gval[g]; + } + } + + thold = gmin + (gmax / 2); + } + memset (sum, 0, sizeof sum); + float t1, t2; + int color = fc(row, col); + t1 = t2 = pix[color]; + + if(color & 1) { + int num = 0; + + for (g = 0; g < 8; g++, ip += 2) { /* Average the neighbors */ + if (gval[g] <= thold) { + if(ip[1]) { + sum[0] += (t1 + pix[ip[1]]) * 0.5f; + } + + sum[1] += pix[ip[0] + (color ^ 2)]; + num++; + } + } + + t1 += (sum[1] - sum[0]) / num; + } else { + int num = 0; + + for (g = 0; g < 8; g++, ip += 2) { /* Average the neighbors */ + if (gval[g] <= thold) { + sum[1] += pix[ip[0] + 1]; + sum[2] += pix[ip[0] + 3]; + + if(ip[1]) { + sum[0] += (t1 + pix[ip[1]]) * 0.5f; + } + + num++; + } + } + + t1 += (sum[1] - sum[0]) / num; + t2 += (sum[2] - sum[0]) / num; + } + + green[row][col] = 0.5f * (t1 + t2); + } + + if(plistenerActive) { + if((row % progressStep) == 0) +#ifdef _OPENMP + #pragma omp critical (updateprogress) +#endif + { + progress += progressInc; + plistener->setProgress (progress); + } + } + } + + } + free (code[0][0]); + free (image); + + if(plistenerActive) { + plistener->setProgress (0.98); + } + + // Interpolate R and B +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = 0; i < H; i++) { + if (i == 0) + // rm, gm, bm must be recovered + //interpolate_row_rb_mul_pp (red, blue, NULL, green[i], green[i+1], i, rm, gm, bm, 0, W, 1); + { + interpolate_row_rb_mul_pp (rawData, red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + } else if (i == H - 1) { + interpolate_row_rb_mul_pp (rawData, red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); + } else { + interpolate_row_rb_mul_pp (rawData, red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1); + } + } + + if(plistenerActive) { + plistener->setProgress (1.0); + } +} +} From b24d389cdced2967befce17d4933df431dfbc9d2 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Sat, 2 Jun 2018 19:26:02 +0200 Subject: [PATCH 42/85] Added NIKON D5000 dual-illuminant DCP --- rtdata/dcpprofiles/NIKON D5000.dcp | Bin 0 -> 1102950 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 rtdata/dcpprofiles/NIKON D5000.dcp diff --git a/rtdata/dcpprofiles/NIKON D5000.dcp b/rtdata/dcpprofiles/NIKON D5000.dcp new file mode 100644 index 0000000000000000000000000000000000000000..13ce18123ff1b9f77ef88621956b72ee1c27fff8 GIT binary patch literal 1102950 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

rr~&I)->gTR3!e8(gr=;P+2;NpXvx3({*^*J ztMG>Nrx^GshvDj3e@NW5e)n^Nbe%g0%SKm?^9kvv+&;|}g^csTj=u7!5$>pDoS#o@ zE_X-^hMIA{GonCz+8K{**36mZDPjooWrqmfgJ$kxlyL%L*Rf_BJyf zH;?_<<`VWfUHX|`*r`DV>kQ9^O%!!`wr{WFtT9%jXqQS~))pG{$vv;IRxz(oE9S|> zh8WO{b53e;Kbvj}b$S$TzSF{MY8d+WQQ}ZqB3^oI#?%f07&$2kNoVsgk)E5jf_@4s z9-;SER}842PgZ#a;!B;;X9G2SmeepiFY!Ek60h5!XI8HA!1i05XSBMGzejwCm2rpH zZya`x4MZ080><8zbk)uWqnLVO|J!$8>h(+hw!;<0jPvVVe)87w?&wAw$vmp1JnA%e zrWofUS5XC3y*<+fBjm$g-Y)_*njNQ-w-GkZZiIg`Y(&uH+UA7tafL!>h1*LrWb z(;9M4_vI{iq`>^(W^w8OvEHKnoEeutHQh^oebf-X_{n{?(TknR8QT>KL_N+)kL!Z64=|t_0y2)t%uK=|UyJ9qw z`J7&& zl6jjtb?XNs<^lC6+9hGESuoai^T*i2BwX~`h!@qpaCSERH;0~tGRYMK>3JHicN67? zF7zCxhegd&R9Ctp<4Gbst?%Ri?M?Z5&Q0}B(oo4wZny9-20I;6Wd-K~g) zVj>1A1{Sc_vn}jyvAeq!{f6iLbN$YryD#S;GS{=_Gv}CNj&V0seHJ16;| znlpoH>tWcnEC_9`a0W25d&OekaA;QjtB>UK=BLJ~)EQ40XYDzDn#1#45yCjH)o!D4 zsvU?`jB{?yTVm5I@(LN}TeCNd<;=s`>;Wwrr;7VL!>jX&KN~rS;k=hlmy<7)B?)Wx zjNzOwOe^dnKC+&b8!?`jnh5XJQmb6al9F4zj{h{_T!7G^RU{{M0)d0 z1?S`J-HxfH`oa&Nv;Rpnl!)@*`+;$Qds?CF7TgK#d;m@LWqg1lVaYOMQN5GXIS{_8VvT7kK77pOvl1cdOYu9!4hH z@4qu4%oVmPZoL{#o5v$m{ zwTNMzoR%dX-=r7B8qNZOJjLlQ30O>=XjI*aqInQGVC(_wEbb$;D%c0NB`08ROVOZ; zK5XpUcNf+cYa1qFP%ilyn;y&4za(JdUC#OZj>?srS=SlSr@pvQuGy2d$7a?sHDcvm zjQ#R~^yjtjD|cW{8gV`W`<~^i$2a9ZG^J6I(*mGvAYvt?KCRt@cd+)J(k`VZwB#qbRduM;Wn{_bNHFD z>=RQn#5ne21;mbQ&$$TiA>`B@Bd?>(SR^r5?0v_3^HdjcM4f=qojKFg*YvtbzB>o+HiH z_r{iCDY$D>Ani1mk50cB!?aV<+P3V4LsJoK`B5^P;DBX|QnAsb{(pXj*@mfbxzPyC zJ5bxIKF{{Y8W`c=fjrK>myA?PgBt|>H#6J%?5%QWA+gObkx1?MS-m)q`>_8X{%mMg zt(kbi8TWafUrh_rY|U~-E5`YtcRNj7Y#@}x>kgc|D?E+KZF3|p_j8L_wuUuT963lK zDdIHo8&x6qO{Q9l!OY1sID6WEZLny#ocoKPSclwhAv!V6+gLM~X}-w17g@`(e>-Y( zO0N1vKI}%G^FBrLM&5m+ei5r`pCq^IoPb?UK=8osWDj5DiH%SnyKfGio~T$teKB3QMlIS{>4UmL6+tz-%`h~IyD(D-D*l>+&uYn zQ=tEIsPtr|D<(3A@v?(-d$-D+h?PaZkL zb4UstNBT5>|1@Og%o5GgnL&x;~8Y4SRhgN+JG8FJ(|h+WmMr44o17M5~PYP*qg@)mdWW=>9R zJwiG5zB7tU>18vvm9m4G16Gu!av!r&QEX@j&Bat$?sZWFgis5@p8ieUPL+AFU$&l^ zf|^x*)gjN^VKRW&i1kMG&m`q#XfZ^xI@u78va+h%YS*A1}Xo}t^9maHMyqd zXj~iv*Zoa2R~>CJWihqO8divukzSnN(OdIWvdHBBb{s@3e&lqKf0sR_|0VtMBwa*a7FIp|;|7e6HyN=$040d-5- zaxS;(Z!MQeP8a({nKgMpJS;3nD(CDaU*I$QNwG$GD3qAWBJ$ZLA68z9 zr>+lqECG8?Dhmt4af~}?qYrLYns5)d?x!RuQ!SMD+8ud#ectfFd%2aYi(YsY=9 zIH+<(gXO8%d1!+=+sp~QJEWoVelvN{#X`U+{Fngl#EU zUY012*6~DaOcJ&lCvwKYU8k|}XtSr4+@%}$hMPrWZkFzUasJB{```2Yu77JW|B55h zsn_xL`*yiqR~H;SPK}7zv2rH$1UzbUS7k_&dNOhQ(R0~H>vmOCH6h<4j6B$~Wy+5B zoExturZK&tG-@sJBIXT~^P?q8_Jdv6YwPX~mAcnUz@y>J6%+HMBej@^*(dK=TP%f> z18H=I=X|J;-d>HTe-m?4yEBqUZ{m3Tv#jN7(u5e|)!nEacln02WeT~y?E8)`xhS3a zJA)v%aQec-(z+mxp%2}bM;U~k9sbgpQfQ^4IMe;wj4 zrM@J8n&5?sH}tKTe@-^x4)xDm?gdnhm4CdaRvh((nvSXUU!0w{{2S*#>$R1~Q(Z9c z?;dnPoYHrfEABAPb1(c-Moc13UYB>7mW4Fz2fgfAKVMQMOV-3WotU5ROqA_PBZRfPWkt6JP zSYw2Ir(a|s`<>B@^B_ac4avdV%f5Y4ALJPl$CeVXDXb6NPR5|lZ9bbML%1EJR!43k zXV~qa;(kz}BfZ;vwJ>^b5I#>z#{CBmCAkN+fTR>8zTYf8qh5#4@Kg-xF-`hK4ehGF zX()+VqMS6;6{DU}dw;}Ib;efeE{;rxYYitEDrx~8q$fgPiQK~8jk{W@s6F|HeAm(& zA#ut0(fo$|ye~QVto3x~wv)%_Q=@|X+AX=u)PM7aH+NS5_dGif)>9UwxuD$*a$_ds zDr56qVSXS6Rms}YBkE~fBNuw!sBkIwG~adNb(zCgN_%*oPq2QjIjlkoAvdqr26B@| z-j=@1V$X7cpP&7fCit+QMA3LhP7vUJ|Q7 z)HBW~`3`nFIUYsR?qec;{xZ&>5y&JvZd{OxD80d)(5X;FC$`o%~JSx zeV5= z+!q~nrII&yYL5~-^6b4lxs4zrTW05r7ym)#z?DE50koi!rC_#Q#S0B%nrNZLUc14wb28OKcD}QL|hI?Pr@l~@=PL+2n)@U2J&o*Kqy6^KAR?J=pG)zH(Ho3wE6%ZX3Eo`8d@T`wHm)B?d|r zB?0syra$?p719vqNu@clxU3`6Q{p`jc_;1L`9@lPjJvAL&$HV%!O-JzC?!82)v*io z`Sq|G91sz?b6hxZmWP)KlSx?)TH+d2YFMg0qRe8wzV7Hv z%hV%kQMYUmXA{-`mp4%FU;PbbwZ3vmlnZJf{H1;`I$3bwPwGU5F0EF(%wh#v}e+ zGD5uZ=N+-2`<58D${k$|(r~OtPuwI{HkY103oSoL3yRr0WMshEbfJ`xNI&8wnOGR! zRQgcg4cmKW;YQFhweo>G&iiNLu9vsmyoMiwGt=?1XQsSpGWj9zl2M>qr?|_x3a0XX zY_fkydiQ^E9%lP5 zk8xl97RnvLE||QJ8W#m;l_!WJX$MlDq2C;-&?tad4Rgqa3dxB$&|=nAh86FnR^3=4_kD?lp5=Q!hdKv* zA6$FoVHj(fJIwV5?ABomcRKp9*Di7@q4pTHRogpEt%LI?CZM77G)f?#L^0!c6-dm{io{z2pXy;v8V} z8OhAn2PbxAV|?s)X)<@rr%cVnf}Y={zP11AnsZ(=tmMBq_h0%iFSoQtW98sL7ffP2 z_lk?kN1m=wa5r_3owbzIiafM6^vmmdSTgy-xK7|~rQnBD?A zL@}n5`*eu);wAqwG?=f#&`XT@i{lvkDFVBr67V?s5?ZFw18!m>R2Oa{Z5Q?Mha};O z<_=yh4M4Cm86!5_gwovy2i)kRRQDouh(+AkoeG;lhf%}W6}8*ZWBN-8)^Bjc`kzbP>|CtW33R{5U9kzIO(;3HlFQguIAFLkhfps+( zz`527=^S~Cg@ZEbHC`$mO$o(N;#W?kMgPTlUBpg8pS?ujV-y~-P-dmB!)pu$)dS}`^Myr zvc`+?w!uLo#{V*L;RR8+aDf_xy5!~G$bnun&U=YdY|dMYCEUl+DPz5OXczR`M&V-r zczEd^#_`Zd?A4H$Fy<2V@WNr|%bk(WcQM@}6!SUzGyVJ=x_&_@8pgT*$oJ?p%OB3H z&VDbA37O^&n^Dl1G1QQU-6uItm72q-rxHp{pHmTnH!6?qCNV@b4MqHXMM1eH3Vz0W$aT1*@%N@+lxKgDm2q$udRKY{&@7+ z+`zrKHa9VhyZMhfQ=Db}94?%vw&=^*-}o=MM$C2yIrbSIHHAIP!fe)yeLeO_6Yc z*zF88nTIb#;4^LGv?i8N?puV154DXKT(QEtb&Jt*^ha18oCp0Od072JMV^!sez4x$ zJf$9r=!Fr_J&Tj|EY+uqJTRy6zj0n!m8RI%+Z7oL$ora6rkwiI6>?{4MVd{Mx=szi zNOPWN`GEB6D7o?d$eo+~Uh-bc+IdVYHRANJfpK1CP5pu9LlD4z^G-1Nif(2IVMh=C)N^&E6CMbQ;C_Msns)% zxVAwREQW<5>=S$V;y2j4AqWdD5a+*A!??yaf8^axMAMHAjkD+aV2pk;$|H4*clGzc z)>P{1v~O*^^Slc+TGFtqetYALP7YZ0Bb~hBPR4h4+K|VdiR+uY88573$-S%`EUVeu zI5W>2dCwN&PxT<h`QH!#W4{ zDId9G^6@O*)`>;g3i1`RAL7p*>fVKMHkbd6yhYYg8Hs4nvc7Sn*Ab{!m4wY!I>v^V zLQ&f*1%}(&8t3N+;j}Uh@xk4UKhq;=*4PY8Mt|eO$Gp%vJqw>oM;d>KqmH!x0&EHx zYpibXhUBVTyuC5gIIN8uqFyY<6)g+nktXvIG;SH92aY$+w{@p(?h+JvEW`@V$18Uy zuRPvOdeE%HZfAaI+Ff` zAeFZ0 zJ*>qm7h~-m?iCU@S>B@viL3!q`X=P*0!w$wdY2=3ATY!*awjNSA?@b1SlG&eLhmbtUJ+;$lTENEnWal1dvZe>Gf z|11n_9}F{cavt71tQbIEnXbXV^>fICjTP?Zt_bCM-rMz%LgDTP!Sh@&e}!^B`C{YQ z_cmFpCxsWYziY)FWXM=)H_x^|2lwf-(1qe{7eAon>8Z zMyzS&DQPuh+m87p@Xd2+%PXGQRn&QCP#2c9I6JsXUXxx+TmoA)34eNoi#5w#j z$=yvi!s`TLq;09aGh!ySV#zNhehT)iGg?v8=osIR%k;sr<&2;vwTy0NqSH#&+KZDh z?A8iwInH^_0{UY<-ikPWe!~8`EJA~kk^J7xSiPd=}xJ zNgd<0J-Bo5Y%!WU=@>V&ibAK-rLfe}H+DxP?w?!=c~Ar6Ia$y?W`<8ASr+|(-K z06TKpDod$-xSzY?|9cOP?%hV67v@NOojS&&vdZhLsc+Aoq3_}&ieDFfFr3=Cb9w|S ztEZE%beVgFCkvH3-^I|wg&e$u^U5i$W2uJ}gKLhzm7bmda(Ib5nYWUj_ldbKaq25~P#osdr{Gt^ZYiu%N}ZZ zCuMej?&(uI?0@6@xtqD#a>P71IZy+_`)RP^{r zZUX1`b|+Gmm7H18;1M;E_L8^L zE2CmW40VnAQ-kGeXvO_b)CFRFexSNz#p^BHRcD@Y7~?#utbGi0xPvqvI~5o0xnsrp zq}?JrWv58`u4i(dq&3_-Zd;diNX=%%6~kdx zoAutYnJ6?2!H+HUrZ3AtKSdDzbh4p4WfPhZcP;6VjoX9P<6$a2)QC$DYSkXM(}Pj} z7U%9pU6hlk5k7(*GyfasFDE0^#m%fS%aVOst3hhdUN*?xO%JcNChCq~oRJtvoz?IR z^@pM4Y`5X>&}y6d`EF{FRTG0aa!x%=HwbW7mf`!^atrTOTJbTjsOp8O4oLm_jZfGtvvqRm{>WB{KHdE zqR}EOQ?5mQzYPJ@z&x;2HsNksL3{S1zH8<0#wsi*V$M0RN$$Ig_m3Ul`H~{J`C1h| zGN0S1SIW6=D(qs<{$Npp+;B%E(uh0#*wJ4elNy03tCBImTT`*$Jq-Cisd%=*MEau% zM!!Mn*tg_?G?O`V^p*_xS&k&HJpd_wnFzZ{ze-Q~ym(~5+>JiUX@OWuKG?<(ZJedP zS#n4OdZ%<%ZgZj+LDauInc>~i)n+ZNam$LDEjQfN?p?-RtJL>FYDM7h{%vX7=koQ~2qa#i zhw`C6@>w0NA`wIW$ApWzLQfTeyh!T9dw!N}cZK0*brS5JZkG4hldnbI(fPOE)h#On zk=d9Y$4cqUH; zb(2f^9=Yq%%f{MN&RI{61T|BhWXH<$e^NW>7~kh>%jCL!!r+`AjRujsWCv<8cjdbf zJNu06dnk;1G|{-?@LXQhhT68Xc~98Y7LSs`;l!_N7U_z}>Ttxy@>#U%ES3dFAi0tr z;x7h@R&^sWLZaqdys=neNB+Q@7)ZX;MCaH@l=zZQ;%h0c6h~rXlQQ71MR4aJJgH2^wFafKTN8gA zug5;UTd}(9a&i>uQ*Tn+PKp`AJvfnyJ?9%>ho?8b1tw#M>u`Lbf680pkdJMjOQSjj zV*&jKzin=|Ni+ueWZiCR;lwFT4Rr04DRKwQ@ho*!As7EQl`97KilVw zGXCzR?}mB|Gy&G+HiMEmu&Z$^Ix~^;j*xAm-X`8FR>)+p>BJ zy|(@6do}2foLb7ymfZWTuOnuWhxTh4b)F}75w3~h*f@tiWqpSU+gjAV=DX8gXOdXy z8iD-%)UfDjBd%3Npj}Viv*teHT)#;4JI9<`87;=L56G}!Jz1VCG-D$F!v_1=riout z1cG;S=6fPd_znywCxZR^yF_t=IL~Wx`*I?DME-#wBz#Q7wZJh#&&MB=S|-z{q@mCv zk2JM;3OWa+%CC|=>93xGMS;%B4G-OMom{5euZN_ha~`;o&YjfQr0q#o8PN$lj^oyVAOfth&8^SsN8_vR6Iad~0{ znr&mf_B2McsffT@J^FfQrVH(ck+9gsdBna&;^(6XdYiC5a9bhXGS4^=v${TNwdiEe zx^)3-l)^Pa-!Ke+wO3+emW%SpU}%MsfA%z8?C%wT@6qI(?ROUw!+j9ymjv(a{e+9~ zK*_*lJUw?#wyttR+xf{jT9l^_Cf0Y%Hwiw(okyZN8>@kH+k`=Q0h&xXX~#cUMRw_ z-Tkk3o1s{^H;lgY^hrOV6fe7kLeu9yx27wYYmeI$u0s%)hSSeSLDh2vJ1fH0!W68@GxW>au=eKlw6er&tpc zhGPM7XdJv#3~&g+aB@MOjMyUTnFL}-zXU93ze4op?xLn~B79O3g#oSVPfTwiE+a>iOD;ZNy2d4n$ZCc0DaY^0U)Z87nmL+rKI7fY@l-gxa8j`qQu zq{mHz(7dk~mb>0i_^gb?vilDI#QEOCo$BsqEn!8xsA$tUwc7-1{9)}sAgGI6uH}q6 zjN7Ez3uPN>J~wGX-OLMR@?%9PDp<4GX&%Zyis=#0d|nw`UwARjKeDKe(z}CLIW7#} zoyi$`G*tXN7KYHt(a6Y|E>;c;NA)P?hc9ko;X2~vNLImRU`tLPmk6G^t%h zAmrs97#+J!(PnfcZDxsU|4-hyqrX?}oN38-oPEfh8|t|otWkE8zKYp>~oXPi@hWc|*yX;oZU>;n-Q>hYpGFpS&@iI7!9mQql7Ed}J9>Q?$Vv(VduE$$su0{!SFVX4s+G zLvlqFGlc&O8){Echsv{+@X@h_n=Q3FMjessNzU*fUUq(QFJ=A7p6DD+-|n0V(s7SK z{PAkQ^+`WoRZKIx~9rUCGSkzo9&O}+G?$iV* zqGH9;OO}}Xgg)R8=ZLE&HYhn7hnVr5L^Yf+oH2Qu_+7o2*r38S*W~$gsa?$9J;ArO=*d35WeNFCtYdwKgdr(9nqHX0#FABE&^Kj$_+qBG z)`Gg$!^x*S<|W(%!l5*zcjWU#@$N%7R&`?!RkTQK9}m7DHZ#qJ-!9#h7cN`wz~$bJ)M%trCr@SwA%A3|L(y zvU+*r!D8;-Zn!E=q`Ki+OU}^OoEFE^>9d(h&-yC0sJd^B)92#hV7gr#Gq9l6ICqL0 ztrq#QbE#3peVZvcqR}xcm=kk+14j|w#u4{Sqwrzla=E6CJ7&fQz<$&vqmSwz&w2l_=&7wz9TSDmj=H_o$!P6++5!d|NTHMWMDxmTXb)zfcI7+FMbo#0}5>sES0 zu&4f}xFu(Kha$Tw8q+@36`9n?>bHfpT!W6Hk!2XphA}?VMv4Y<7>2Nx&|YpP1{j5N zmz2I#zx~9Iwc#-D7>x@PQ^fY}5eR8V{nLp{#2MCOi6eL~BySLgZ6jD)(aUMr9^ud? z0wZ`YhZ!9acN+0|G0yJ{FN&0@q2zvY)*En3lz0ZAj*6NI@9&GLTYZU1Q;%cmLs2~4 z196Vj>lkrgT(9AbrR3!}f4V7la6T0+#bflbi{i^93#g;wp~IYWiJT9urQ|kTIwZ;h z=OB~VmaEZz?v7ca2WQMjkLHT?H|SZfuflV!8sfP2d|a~i$M(c3b**F6A#dx30|yjk zA1;PtEoTY;o1azD8`Kw!EO91?bHItm)Ml%w1^px%9|AhciFG(HSRRd6m$T)mJ%ezK zU$1|4pZu8p>A)Stn$F&pJ5&dwwkPjC-MV6^K?ur-K_oi26&B+{aPdYIaAA-bN{(vX z0{Zp1P7yx)Ltx_?g-3&3#Mj2uTOP^z>(>}@twt#B8b)Ejy)5xs9fCpRQQdQ1DITm1 zfgyc={0)l5Rql(`DW|^Vr31q1Ng(dAhN(NEQcRQ?0ro zEFPPp*%$#ZI*w66pgvXPL8Hu_gdV8F#ya z2S(Lb!l8cm?|JU_C0jjbm?b_j&e4^H>gIV?c+Pk#FV&O}J#|D6#<}iyS2^`7{eY-5 zXwW-Pc1{V#yRGzZ?NTb+?GJ{bD}5L{UzG=(qb9sQ@5D|&WIf_l8_v^%zOA-s*)as| z7SgY6Xjid%YzU&~Qa{Ljq&Sitf?&pW+T$6bp(+F~b?Dcob`zEZ*?YE*!Vy)hnAb1_ zp(CQGXPPbaz6W9XGJ3tuUn!>81fqZ6XyDvtQTLJ`IbY00Q}&9}Dle4Kqa-Zhpx6}5 z_n0;IS)J3uHIuw?)(P!!MTE?^h6&?*fATG{*Tftq37kDNeI%;7n$nkzdy?@_#W=Mo z_sili>E|O+JIVsO>^+TV9u(qHIZ!=xpe3||*$eDURM$+m!WqW7?bFlh7N;FCds#F*!-vQVkFocEKpex` zRena_7O|QA;O-2$MF_o$9Oz&Fbc1Y4O{YOEIHNjyP~Oh7S9XlPcx&&X((Cn*Zu z?f=LJt_EZ9Bzgv6vK!VK(X?;7)YC4K_+PRM<^ciRCEz{MOu~yj5I1e7ULcMDzwQE?{neVJ87t;?tmUYN4|6cN2 zeeQb}@hsh*CPxel#&sK>^WTB;V}8EcBpQ>0v*lU}&KE=!>TN2N8(RnCMg)D*Gb&_r z?_kzcQRvtHs{Cn9F!c|j@Vebcxj_W;&vO;tRy7nQo#{{URE2K)+6uE5#3UK>F-HfA z6_tVb$af*DXo{#gl>Tu~qA>owo0#y#7t?cihn`3jzNMb<<-7T&WQn-`n4BNZeO$*C z3%hQ-`}R_=xYI!~ypuKY0P47&yCMu<&w+U|=QO8Yh;v(JZ!izV&uPEcf%n?0?ALeEo6Zg$G_vUafrfm|Cw5 z{_RuRyLVULH?%}g#<|7kHtJ!aR#?C|>$JC3?_K5yc?tWz85QbYK7q)+6OGv$UZ|s} z?Q@0rXJKAr+4%?klr4zwz3C?Vz6-*$`uu&PP2@X_j~TUAu6DMUo&N+O-!BSJuExr- z^?A1Y(KoR6B6;AzV9frk!l(zE4G36U*NuF)?K;UItcR~t1xw9 zZE>5v)h9>M!*_ODp`@Sqgi8AM&K)kM+4!QHKl>UFYq4&eC;W)-b^jVC5>i~T^zZCp zTE3Wj(;joTlZV!Pk1&4D8FxSK*@c`FH+Rj!(InQ`^al@1e2cpQzB%fT z`-3om^`6W7P3oQp$yYHW78-q2ZL*EpO0|d~J3UrcGgh}t=*K;)uDoU=y?}Z58QAN~ zQJh(4c8VMoN=Cm#yrpc>OB=rf6js_>*Ue%d4_qmuW+vX zxO-jAmh8E3smZzgm+#`eWC!zR(QtD;Ao93Rl>a6e>-9Q{BfouNYwCsW?kZ&lv4u}Y z|Hiqn^_hwa`e}}3ocr8OtH^S-f(_$5Z+}sRk*6c(5f|E4@U>z>hd{JqE%zg$q525l zl>@7y@##SubzpiBcbe&&Hm{#Lz?*&_)lsloIYE8iEQnYI{Ty3+s7+0|UobBUd*`I9 zE4kAj*NX3ZpY`hXmi*r9Dtrq%rM}RDUVGHQ8TzHBym56PlBnA?)u^kyklx?t_p0#o zpsl>JNdO|5XIf5KD&P0^!?rYXn7*BqXHN7%CHu;X^^HWM2_87g`3{vv#DPsNFd(Po zW^SP9*~T7eoJ)=+?o?-t6;cd|qmGxwFV=E>d7jNO?+fMPS=^1M4(#+_V$aywSWEtK zv3FgKvvMxRwV@`_$lqebTk@A&qgewT7Lz8q;&)&OQuO)?hdRF4e$fjSSxySSZS*L4 z_HTZ!wp&)wuAL=jGtL2nTUE5Rv%+}BdD`U06@})G(Bu(|xT#ms`bPkAZqQrppr+iI zT2+B7iF+(|D1TxegaFpb`}bccn>a8CqrOE!RjOU)L|nyl9b*!Ipe(dz5Ow&Y&?i<^ z{^@xjq$c!jtoT-b<6|IfPg6r#cX>tphCsB~K-|{9jd}-rtA*syyii7|<4)2OoHLTZ zTMyJ}@%}jRT7@O4Bjt>%#NK_QP-v7T@7wJS^Y-*Wvb`=}Rl6fyi@f>?`r@7;_d#mL z;$(!m$SJf#_!8=Vhh>Yow=6NSGqohH>=v`unZb(n#;p%G#Q3hW@Sbrl?(|ihK06Cj zSbH>jQCnks&m3ChLueiREvgsVVi#+Gjb$f9-48Cfd@}^$(?^KzPrY%bt2eS8{M5Jj zK5jDmH_j33=T=msue5{2PhA__Ub6S+8j&Z~w#(8zie4~li1JL6-ee0S| zQW%a5!kqkQ+!(h)akzUB#tmVL3et zA4j%VzReB9{n}B8+T2aKm!CECBpn;4qa3OTgg#@N93m^~lm?(@iV9v+4;T%Z5`ZJw z)Hh6Tq3-q74?B7Omz$kZA2RVpD+_vS>OgL1;EmyRd7gJ|l*ja^C+0`?I5lbt^Ht8c z_L{R}9i`~p$&Pw|f3-B@g}#F&$=%#z4c#Pu^fZGamRh~<&xw#NGx6dGbqx2s5sfF$ zg3&HMi_jXHOqDr2N0LuH_NU0{Yl{-T*Woozisi8=ah`u|^?};6t;m~?#%&iHqb~y;QM!op&Q${xRr>?*@G9pc zdK(lcng_w1^>Cz{Y{~k0+Dfs0jVa6{<4|wuVKK{KCI<2zG}!n+ zK+NR*!hQeipT)bT=ICldZIIy~MZ+WWs29eW>9iA~@oX1tptp_FM5RdX=><8+8;=Lg zkVCZmFcbgAIep)r@}Ihvh+&-D|5T2$m}&)m#<{kGiP4Qtju^){xB1jaah-RN<_c@P zX&DOh_r!8}KYE&-RJ1!AhzG=fQbld0ZAKvcsQb}PyOVO^)Ie0^Mo~9*q;hkYKqQ+) zq1DRi%7!24P5+T`-fyo=x)XqnTUEGz+DduQKLCqjRG4wqNa=aeAMZWMy_?iXIp545 zgM6t$)a%ZufH%Ha$sAr{I#FHR#RvTcL{Xdct9t)iPu#l|h2i=ka^zPxTscjDL-lca ztG5$uPtY@?VH@${%{&A|lTUTrLcAJgfv)5(bV$q*uc~LmJ2(!j;!DMn)ESubm%o~E zQP}pFiN4Iw233zm$7OTi$2iASJ{C*N=fU$gdj}VdSkS-)U);Dm;oo0GF5=(8!J9jx zbLCGfd{DCT-+r)alS_G$wj~xa&Uy-zO`2c@J;u4AQ-ktB%^mUhFaCVOuzYMB<9wNO zz_9v8n=b^S5AVmtvB!_@!P!yxqYPH8c)*;a zh(djj1jUezd@o-8^)gOU{7DHwWg&BgfkI)e9e}|h^p7q)GwL+?-^c7#Sk`r7MW=gy z7~-fx1G9l@U+!Jj*+|{A3;WbX+1|L&i5!b9?PVWRPxLs$yR|q$ZZp#jP1N)ss;-ou z?RKQcQw;J8w8hrm^Z0kC9!{SL;&a4Y`qXp(>vf!{kJ%{mrWRiMIx*_>bYyVmHDHNa z#7E4)jJ3?wZ_bG|&F8>=1i!xMg2=sPgCFc8{A^0ZluBnjq9@Z}yJjMOAomj+cq8xE zN40;hH?AN07vBii8eDGG)Dne%<9w!|{KjZ2G-sSAUK(3bzn&u&GtRbp>Wc2}jL#*W zVXyNQ&vpgkGtc?N7mq74sG0oQI2w($YpOr=VSZ-s5R#^=&b=Feh8f(cbMC2bz99ff z!+G9p#;H%)2Ed#>$cb*Q>bcaq>Bin_VP=Nl%@#aY1yfv6zjkF^ zVWC33qmAU<_k7U2Kn0EW2zhU{7wlU`A-74OJa~%-{0~LpbAF+0$~~qPrP25~^@e=l zkpl|$#9;N9X5!~~8}*=@J^2S*akEXt!BTcVV4rUX^R0$4$Zaqg+SQ*ri(173|fdRp*WbqR3>cSOTsu&iE7{h9TTs2Th0wtCEt0Mtm0LO@CldAmmdP7IF1 ziK^!E@HPSX@qjt@OAmPl_1M=fQ^7#bME2$!f4v+1(^GBai_83=N4>vq-6Cb9*S`44 z&)udhkn?SP$j?$CHnB)9H1om;UG@u+8oB(UJDxJm_och?k)3tcMyK*Q}KgwK3)(hmMoeE zE7sK^pVNdolbBLn>MVa^c3fip-+pn2x0A$Bb7w4S8GZ(OOdlV+o@6CUmI&8c@E}dYn zJ?N&|mG#@HHPKj^Qcs>UonGE%+-nZ(EXPCyVJ7>*_-DqlJ7-2Yd!x|B&{1v^#QxDS z3eP(v$a%ytM`}kwuVjhbO5z@RIla@)6w96sgOJTUT*vc}+?91mpS~)5y>(O0925wx z@6?Ey`%%`P5P&_`A`xCuOB}lHi*H4dnDn)txXC?~`>IIvU0zq%v~$IlZjo5gu%<}d zXorv8BiT>=lC>%=VMqVt?ahD6&tZn0)RHKSu9lk~nt^f5?Uk!*iRf0-P<4&H!^7I* zg!xqX5?4YGNW^WIxvwv#tK^?D)B%LTPA*un9- zrSZOb+|T_s{hv55EYDG>dH*J;VnEl@ice{lX!DJ;l0SphuD9%{o5(xv{$;ft-{snz zp(sXZ%R_k&I%>!bD;^}b zL$B5NuAM~zbJ3Ro_J*?uiPP-^5W%~0hfs(hZ9gbyQ)gteBx-H*LJoN|16m9f@@F?3 zeHe+Oo4bllKOC|0UL@Xp&=ubKw#c(paewo-eCMha^10Kc_vw=C+QI^joX9_^yIxim znInG;^%7Td&;5-#=Zeg$%R(w@KD5Ls)=1x{Dx~~Ij(9aX6z$%0lgj$}qR}{S3^pjm zA!p9^XZ>4mY!Ay)9NK7skmMLRXXI4unQw^+jmekra8S26Vuu$MtmRtQmM_<(#_uoo zLE{F=Ikk8`SvzTAo}AZ(@!Y_B@J*6@Yievc`_$(Uh56+f< zXa!*sYnwV(;^iHKgOJBMYTVRS@{E8Wa&DO$UzE%D^Mdf&ha9{sRdT&8LAY^lW?(0sG-Y5`l>5H_~y;%4g5|3gnbop_iaHhV2b5<0rtCowNUwrVM?`c3@ zoam6_jcZ?d_C5^~?-F?bYN!wX@TgqX)E8Uca98A76Ja=m{R-z1U6v$C4#((seg0p4 zq=s5qiq*p{usuHpy@IMLbl8K34I$@qQNDU3XSM|&d4{hJkegTg;YHsV#0>D42e41+ z*_NFDt&8ObV}qzK8;vf{OXVS%#4%3N$1&iltbHH|GkDIW;2&}z^?FytbH=(rTXZL0 zH=FO(NULtbo%m-Ha%P&B8i{wrz4q|@N1ZYik-@=u&-1gk(p#J<35KFGz3Ja1ia+$H zw(CQ@sC%B!iVMMV_D45%7K&!A=&c;W^KfvlczZt-mCR}DqECpKTj=-Qn)?WcuZwk@ z+ZI?+Q~v5bvE>zYn#rqQ@wiHO9HK||<`}4TPl~gb1E5ofv)xuZ#AEKgUMDwx%i1*Y zcCI%X&LNJvcZASP^}>1uch3zPie=%9<#x%AQtVuO>G}#hwDvZ;4o>NY*oh}AI8RDV_LHO+8_vS z!^lOyRwNq}-w15ZT{Wi@a^s>P?EgfM%sFr5Eoyg1q@1aB9Rn^&?>tR-e+ z&S$4vbDhZk5Q1{v%OTr$i|mD*f7KxG`f;UL;u?mc8RQ-utrGWK!lAQ|U(bIhTn9&B ze+TY7j{74#dPQI=cbDb{*VMduAI80J>aL&oESh?UAfI@txz{COk{f_d>}7$I{pZxKGE&hfvmm5@rpdC*=?^$2N!d{NB>`*c}#;G z#fVuJ=(~+P^Y=~E_1Lql=X1|7kk!s1cHBRUL2$ra`Hhx8Mp*ORxsfZc?!{a&lXc*; zJ#vu~G0(x=pB+^tU)UE!&qqF^n403(#~@VHCEuf@rBIRMw}tP8#iYLC9%H+ab>m{s zal#@y7zVeakv`Z?jHj=9A#nri(-ERw{Sai_i$+fWOyM^x1O@M+5u?3QOgFX&VKT5vD1QcUYA&e zM`&r@RYt((9P$4WUCjjg)coLC^?2Jt(?Kf?d$|X4!MA~?BlBC{Sk)&GohJw@&bFHK+2v4YJcI|9C&+iFZj829Apan`uM<{s;-zTAU8Rz5~^_X0VS#OOW* zNSb?$ZB{V%Ut)%7-W&|al9%*eaqp$MKpy7gMe$g_q?Kkx&tPh|atA~F5RTke4Yj1E z%JmAN=agXZ)$L@Z=Tcnz$d&+13B%jZZfDiU4N| z#ETf*+~cP?ebE)eK2xu1s=Y@0{(L0AV{J3rQj^j?6c5QuDO_Zxxp9cT&)mJrw=~r( zc@l!(y_m<8b2M2A^x&q3(uO6LnyZY}d?n|e-|aN5YlUFN6nfcrp0Dxee73VK_q|>G zG$*OYS)VzrV_vAH89#fc$D+rpD9!OZ!6;ZyEsN7}8lMIsFyXzEHZM^VI5z|?_o(rB zJ5h7DA_P1B@O)-QYMKUy;zc9s)r|Djlnx9-jKTk->Z+rnYP+urc6WDRA$Br%kKNcJ z-Jl?i(hSTDDWGCECI(_+0CS%^76!&^cL!o)_iy|A>*HJNTZ@;a;GFy1^PIEKK6`Ud zU+u2!dQ9#axDWQ;MhWr>$MyhvwRfDPOo<7{90PIt8^e_o#bGGvN4@UV{gmQ9p@=G> zC+LB;%BtBRsBxa!ofj%AZ4(1AwNQ`z8}xS62B2wNJocom7v+dEY^N?$^UO3c%q#-C zsZADF{j(I|uEFxGvise;e{Qk#^qqw~&f;zFe^E@yEe+sa>#7DTjK2##p!pU{Jyu`i z_K!iFEs)!jJ;FG;JF#VR`Zf3NY+RfjjCEbP&lXVM*gBrO0^Gq&*kWS5w3EFdvGj%h zZDaV#6A6xJq>`cAys5B*%Sh{&HYReB#P}*@H*_`n-IiykUn~+03ofzi( zU}fs^FckCL7ADMAo_q3`fG%=oLk-VuaeoW+~zb{OwwxnOy7?wYkv zHcq?Yha>#=pYCF3>^hPA?__@c;+w3r-W-BU{5s&~K4oZKdZ&)$ z{33IkvMQQ0S@Pw&yj`nw|4Wa{Nz?)gTB=M*osVpCgs#0zRYd1dw4Kf8RX;(gsDwg} zrryVBjdFVkIezQo(9JJM$#M_F9_~Hv4s=%*J_yCk_W!h)rYnsOvbST+5R@=fF$rdW zYD+EkwcV7p+#Sv$k8wzJJw?kNWa8j>9NS+iF8KJP{{482J69l1vY%>7f8siiGR1c0 z{Ol9-ChPk{YR`M4!-2AKRtKH3ObDEX7Q|_DHdHibvtMgWZpl60UB-L)E;z#T>0g*) zY^wO7oeTFW=Q$e92Lxe_2hUr@!Ny$+gYemz`U9SAj7{zYp#eD$Jr~zBR+fU1XwT2< z^+%}~6ATT%UOVW8qQ4o8Qhr_O>lLLh_iKhY&<|zpam8n02u%2QM+N69Q(2#s^6PP* zwkr!bA3w*RFCAW|M8BJdbT|5WcrH=8M$boy7w7&5la;%?+n@ULncBrF!x`t{jB~~> zUuD(6FgP!dL+cn@B|DID7Q`#gk5=|S=8kPGE$+GXS56<8k74Q5d~DW12@R!wGc|&4 zOs}Jqp5*L?JNueJ-^G$5@|=gz`*`MEVR<+JJs!rx!R5H<)M6ewOpV99lX)Vc61|6* zbGl@eO4r)Z%du10z2j-U?_2f=nuVcH=`Y-{rtuEnSx+1CsUjB}|FreS_`39)Sv1{P zEjknye3uU{Zg0H$G!&KV@obn@Fm`VpikH9XBUb;4Vttyqn)_%2Q+F#iC+1_@HR_;k zTc}((Pwyuq^=GpD6+?wkWRXLg*kZi0ZcHeB#W}z0X`v|F_%jz%o7B9SQi=E4Pwt+y zeppRux-bk@#OH$o$|>!oa2!ge{=DXsNG3P$0QWFoEPf{(vmiwnJR;}+95tFIR8uSmg`)vA2|snIrhH#C zAHFu!`R!RriPZ&TikluW^~));4Qs7A@woBglaP5QwysEx;=T_=1~rf#xl`vq<&-!c zABA1qk3PKNsZ?BD1Cvc<<6JGTB{nSzLj6(=2K}h1Z7{0$*tU-_yBz`F3LGJ96LZ(ED{!L$RE-@FM=*-z%Glp+T(C8gkcr zn3>3C4>6zxvEQo@Pc33Fq$A_D%0c-2ipIB|yjvZj#6b4ttwC;W%XD$88f$RAQ(i~c zi?mVf>D@Tj`@Ki#m&V|q2V3+gN z;S@{n_m1QVY%x{Jzb3z!bCVubt1I_nqY=;iJnU~RC7>_&u(pu%Kd`pao9EmzNryeJ zNh&2ivn@@JHD4tC<@xS@`W!ihGdBeq+zo)Q;;~o7oYGh{ImaHP@To{HrcT9Y@-*gu68rcZ zu96Sqw6?tRPhWW*anA03m6bhhIB%&$Z;TDq6~nAZwAjxb7Oxsg+|*F$m(kziY&9i~ z_?7!odRxw^tb7|205dJMju({U-wnW~cl58hTOzLXrhc7eJPwW7A-*y{k0tNaP%lSv zFCn+(O4&FEFM2A+_gn&tiqvgZ_RBM@>919px~$U+W&iEe6k%+?el3+RO-RCep4C#b z%Hj(5jizu1xyAcN;)q2&N*UXP;hjZ2YdyB{tWLT*SnS_Kz1AN8c3Q2(y_Pz3B>yVA zotyZ3kh`eEsbhR1OzfUY{XjlflRb%IP7V45I?!u7e2M6Mo@a0_b(D^85dZG6tY~^X zrDuzg;hg_7x42zCDq{GIu5738ZA784BZsR(A-UiF*Th&pmx}MGBQ*Mn7_yAM_q<=S z54;y!iZr;#ynX)0FY%Q4Q0gzn{9^?rr&a_qsC(QsprZ0<%{;tYpu+*1N(#CJa>k;^ zyO4@X-DZBM>mQH#dF7PMPV7^zaAz>~6<+e0{w})LuewEA}`TO*3b7b8sihcn zEFPcu_1jgg#6ovHw)5+{58I0s!PE=o*Z)21CSGjUq8i_ktY7^^d>wMS|5CS29xB{; zFa7w*TK%1s_{ev<5_^qTa~;HM?(yvZsKNdAzCuZ3PyCL3U#%E%+?Kk$uh`=^P7I(9*Bz&`g76f z>_q>OrA6Z7`bhGQ*bnx*CCq%di#L`2I(MFu;}L?(t>^_g@tvq$NCrqXdJ8&z5hL^F zqUKX-cMka^0$$HWkFk0Te)&l39u^Ff?erC>v`_@8!cqNb90u%qES+3R448P@|K^Q@ zIW-iM6B*F`B2OlEqe!bvzln}oUsZ%%w4lBiPSmc=dagWTss_(#Z}lx zeC;4s*z0kKpR13$m8j=SzoTm0wU_BH&zv`s@4_a_7Gfmz8m2)6coNU48z;~zT*d)=B7+yZ-gPxt1iTm8; z^yPD1^>VZ5v@Z+~S=&7QaZpIM#Kg#XR{9i*xQG7uY^p=_zA@vh?PLev1UwQO)*}RcBW`weRUk0oh+exkO z2oK&5cX&3|8dizTzjV08IL~tp6sg>$8^+IjF>bW*-W`ttydR&tcNc@F)AxzFTGVSM z)_dwOxjy|?d~1r4tVz>&557HUDoUzSJC}LpUCwVgHiJ2VxpMQwFY*Q zN32l~*u)ES_JB8)gKRTCc@ooPhv3~emRLkR@{_PW@pY>es81pl~JR-WB z58~dm4!tkgi&flTSUipOOny(xhH2!0S1udp$oxp<;f4$h{7zhSU^T_|B{|pZy9d9| z7d9o-wB}hEw>wo-PD#Wqo}YE=9mKv(@fgw|7P*i53e9-^|9gKp&1x)~IZ?l!vD);p zoLIAp-b9R#*TwttBVsdG8JE`Uj>)_D%u~&HUSoI3|9Zh5-FUZ+Un%=A&R?0&r}R#e zH!&Vh*uTey&y&~lUH9WTZs+DC8!cJa@c&O;tz>`Ru{B5V9r!gu4&pOEVZ|M&y(8p0 z%r_DIJC{dW%jafjP?fn|(;`kbb&0|1Y~C-|v*p5Goc;dd=Q>p?ui-A(hamPrj`T(! z5Q3ApVY))>*yw{stCqK>&>tkzrnAT||a;w!!OxK zWRLRf16aSEEJ~HbsH-9MXPm<)%6Y8EAM%VItyoPq;d^|2D790@tu`D@r#{UX=B01h z1<8z=Y7&2M;!DdxD!yCRu^6&?x#}99Re}q>#j~EMRD6d<`ZHH#)RNXR_qWwiH*Zs8 zDJ+z8iA~f#{ajwE!#Xqh3hSjUV^wErL_y8pz5R8e;Q?{fBEDnA=Xc1L*0N^q%`>sI ztq4x_!`C-j^fV6=e{#L?i1=qEi)Er=b018&PhW=>3q|0eKrCyfgQ<&|IOW0q=p;Qc zPrA$bJGqO-x#a)m=f4eel~Yj}oC)%-sXts%v3^fxEuH-Ruh5*-!L1@Sj~e8PX?}@V z&-Xp`RlG1Rh{x%F`O##ou%`FIaen3%0~-myNz@&&;90D4NA^n7!i@1;R$+zQkazoh z#^|edpgc7x4vj}LradwZ_gm3xVgfanp3Sv9`XBdrW-y0DomcHjWv*pj7PAIP-hA&D zc@cX*tdmyrEbj?o9!TFV4dU_4io5eB9g@ zb!zJnXg*lHqL;^rqdF`Z9VNDn@@9=d{ju)hVtal7bnSK2-fJKp#LmaTOn$EXeX_-p z7C;C>0fVnMwmJ$BBWI;;yy1H zFEsIJ$j>=o<8VAg3%@};SE%*nBQ7h>K? zJy~~~@~k)BQwJlMr{}F_?tW#4D?HDt1F?8{+Y;7{b0&XQUhz1nZ2s+sk?W-!k3e$J zmJkPvt2KbUx(LqjiLtb)ig)A%$amTMPY9M0HV1HjgxbCXtIH~KnICX}_VMLP;&SwC zl-||BRY#>3`#D(ON{_x#He%#dfAa3=L6TNg#01WRp68?G;lJ{7NA@X4%i^L1KVK<@ z)MH!rh4{vVNF_0wcp-CKL%FSTZ#_MyDpQ}_>9ccH6;z^VMk7 zX0GaNpg&8r2j=n~j$(fQ&F_`4?rYB2dR9r|eHp{K6*Xt?CgPWO6zUS!T6AtcesRVW zl0qD;?J&H#7mQ!8xu+cSLMq9pACsP%)bkgsnho$qhFXVCg}dbI)4bsQfjIxKcA~_7 zHoo`O5!PHD|mZu6N716iM)ag=V8yUS;nm5x_D z3r)V!7r1mS-r4hRX&8rJ<+kwWMPn%Y%xB&k;g!gJ+gZf2JQqW2F&}L?V_I6v59>0h z1@VqPo;%vX>g`;7OXR)ME?!a_W~1hC_J&RC%QvWbUigvvSEZlit8YDVy*oXT*Y_7G zgM3iF7JVJI{g$`e1Y(=LELZr-~8NsOkJZ*pA1~(-4`3UN-5?&WySjc z*ude+x%teuteKV`GEqkKPJ}7X@V57dMI^nss_-3Ny&ziD!gnt+&W0j_SnjcJ8{k4b^FeYP-t11oDb^KcC2{;b z6Oh{52cdiq)lHvBU3rH84A9}>9Z7ZStve3iqo$SBJ~^N~HOX1;E_r1k-kh6Fk7_N% z)UR>@vEr>BoEcfI7H{pMae%n(|Hk?9{Z__Rtus)OT`FZtG`G6}m z;F%K!xt=nNzRLTKXY{mHE$O5?-xtQVLT;|qoLE{X#x^^%78)OBPR(V0Xsd=J?>YnX z$X|LTbsxsu`}3{G1-~D{#iq7r$;%1Fkc9!69>Sz>mHL za!b5D>VcA`^xdm5T{`rO{NybZq~})+#$-zq#XwEv z0@e=>#>--YDjr6jVd+u2_{zL>jX5;(bYEe@`}rqxl=BgToWy&3aX5REw4Dau)6`g7 zz#iwVh1AoQS^~@oT~jYgUHGmC@ct_Isx?OLVO_v;J7&iWOqfegEuP!yKlG^08spdx z=3l?{+&^JXZcJ^BqyyMoo;`Xu-r4hw=x~udCgz9p;v_^^INEY%z1Gr*W?u79z?oo+ zMg{1`edIU2xQ}dh0C#uz!Is$d>Umr6ZMqLy6w(X0NiwQ)Pc3eO7J1*)XcFiKbLxqC zp4=&|9_-AXTZdzF+RJ{EouDhn&-u5GSfX~vaP|Yu9B#=E%>r=mZWO&Psww_EBN4NU z{KEhLA3t9?@;zP-G8X?>jISRwn3#A>$+eF|%rkmxJ`PbN-lctOvhV8JURhL*{voV& zPh~t5vxptFnMlpR%_~GI`~G~M;WN7>VO4=Xq|6Wb(@)9;)S&yw`>e2aropR#zOSno zt16= zp7F=zX7nB!mxtEWb9hKBIwyWN2Eq?DtZaJFFS66OZjZ0J%xA2q}$4x(|0LnEMCvj_jgYhFPoFcQD`j?ca&F>!?>Y zggo%xhcT1d5#9U8VSl5eNVvs07i+|{8Ap*K2cl*T#(aGq4CDQf$vaWop#XI{`|#c1 z9?HU_c(%z4)tEQVF5iu+)9Af>Dh{uTR*;)XU0h;b703Cb{b*Zs8^L$-Vr%#-+^JV- zsa=vHWnG(v_>JV64q9x8>+g)grqq+nXei&f<%_Hj;q){1QCjN5kk!_&Oq`=OOgCD* zU5rT9axU)olq%y`zdxdOL4Jzzo%yzUZR&oG9;g_fC7>nyi}|m9iC3KQa-kD$x}9R& z867hGc$a0&6nojH_KauGoBKdE?Vv@dN~0$tB*)hEnNm z4)340tOcO6VI%i}Zci`l` zNE{tY?}|P<8Mpc9rjDa`@^1L5INzMXbMCMYlgs;|IGuR@qg;GBGzWKi-;KYSi=KAw zIBv(hT5BH$hC1T-dFnql$b!YyS%~IcZfL#~yUnH}w-5`3XQIR)=`YZ1JnCDxIZ zJ#x-JJYACfTx`+ahFT5!BXWJ}l!pA_{H)(HQ1F#|6;O;HO6P z;(OVf=W_Ji79xhR*_z3`&~>SNp8Vp9`RonjrWSl>Y|q{x*P@M|)aY&;ZZkhDobpnt zUrmcZ{{5kMyPzZWwwtj|NULg%+K(7l;ynJuFTb2-{m658U}OR&kbh^!=Qn<63KVKy zbx2{pi&%(I`(XHQr$=Y&71YkAUhymTLN_uo*3=tblc@Qx%0{;e9^7x>@7Qt}lgZun z=S*-%>tmR^+ZG>oQHL$*G?KDrqUb1ng0CDymj=_3$^N>{?kp7Fn1+u5ap<>gB0V9k zarRXdTE=9`5qBKWh+M|_Ws2B2-xCXmmi5y->>Xn~@l1<(jC084UrJ{ecjPk8zgn$U z+`s$cKzZ(kO_-=;{nlW@aOR5CI?9g!h&R}CS9;wA5m1r(e5?;<-d`*vo-el)=HyQ! z#IHEMubYV-tKZ2Php1o9T=CvvmYm7na02siH@%f*g>IZ_{9>K4+g3X5Or3_dXShXH2yam2y~I%1(`@eN2?!Tlr@;v=tsd zi2)i}Z)?uTro*+IuX1+Ka;WSU#~Dg_-fJnv`3n^-9C*S$!ps8Vto`KYVY+4nQ);r+G@?fld3X#3Q zg`Ov6eWiOpPcq)#!M%IN*~IFvVw>oWyNvUWtaZv$EB2ukh~cMLE88W`fJPA0F}6_l z@cpjG8e`PS5>aH&UB-FL!%y}Ji#@#K()syy2_o@p942iiPEm7=sKq(-S*cYmtLk87vG1*UejbWWWUAxZhwHEVWbs3e{9Haxw2OE)}9(g3+OerVx+X1 z&!X^f9FCk_F5ULv9>W99-(Q@PO6GA_hS+PTS>Ghh8|v6F@BFUR68WQoVIN6P*;k|B zobF2xOf3$QSCK|PpbSUGHfJ4*XS!nRBkF*SG-CW82Mna2#mzIxgQhxu<BUYCyWau-gm7?uHDid(;AhH^Qpec z#)n??P-dJRhL$sSSWPb(#yM~52IWntAL1G3F$3+D|ClE_@*a$o+9~@ji3Ksvtw(+p zXXD9Rna^iXDunla=G%qD|IL?+8Rqn+-^se+h_?vk`&xmyHN>@__{zLEu$Z;+!7Ac- zWBL+Sr&j-z6LN+F{Y+T{NBe2yj%)dSSN1ki1z9;l?V=Uzofj@Gn8|n7mbLiZ>|Lt3 zmvNZIXBqfbElpdlLC3CI6z^Uw&8QXuofCC04?UIk{|rXk9RBX*ZPD_LFS@eta6UmD z#H(JY&EFB`yciezyJ9>sn#H+?@ukoK=1F?gw7!c$z3gyCqleSaZ}?+o3zy@pS#!#% z=kB$|2);XOmp?(^QhWMZMq$})&Q)AoFha{6`0=&nf_7eTD_=IwX|s}zgF@WMm(*bL z&2q+m+3xtsI3Fm3|jV7i1KTfI-?DM`jY>8SjCF%2<2=cyyfMw-j;gHd zw7#1Zw-bJ-Y{Hq)Vs~ZIQpSlrpy!otO3lbP9CqeewXdXHzZi#_dkF{udk(&PNf<+!Nu+R^j%e0&znl90yM`L0U*Sd}(v%v|%9C31#@VrO zWl!P!b!mRnE|D-h#5`qhCO!A$E=*lwG)HA=Z$5V@lXZCav^CyXd0_(auiD%NpSH*a zuQ=Dg(ryi=O{1?z)p*>kB`~3%9d`fGqwAg9+}*dsdkcCzEq{(feeJQHb@k}xSMkQo z38tL6e&yW5gIXVdssFwx@1|;@IlXcWW#c?NGuilH0rk@u=X2l78_h4cqY2|&@78AJ z@(VwVVVs?M%vQ8Kn-3W0AGa)&*?f=JuxCp&R#R*~@J@(e4~|D-u8kI1%h*4z&J%Y0 ztY`K!wtv@(RdsYYbD6!~=6JC%Scg%(M_0Ieh>oniom#SP-ak^r*Vn^#JnQ6MUB&nb zdbq{1S8r8UEODj&FYnX_A*FJ?2RbbN&6@j;kTdukx!Hv#?c(JQjI#y*dy@K>VRWlV z)VWWOZ^JOvHw)^4fIizT^->)xUz}F>jOFs!U*ri3YduWF7&PwTg5EFn2s@vIeyzAO zOYCNDubp`9V26*y7lMONAUMGeTLY*i_}@h=tK$G~-rsG%DKLNJjE&u?8Aa~oE6!Yc za(|}E$8FA5WTa|iM{gKExe{k_p zdYojnd>`C;f!Y7G^Hi8u7P>&RK`*grNRZ?GOSr?XC`#n|c~dY&&}otA1Q z`Y~V5EMo86vyO0j!9UMj(Jc3^+(xTKBr%lluDSB>sqBr&V|f3{NgiDof%+z#2j@&Q zZGJ**+HuUv+5K|CIEpuP63oP}_f1N1WU2j1^spi|z43RDI_s&YO#E)iL~(AV9_N?y&%Ej<92ebDkOZ|LAip6AA%mBkP*EiUQc*Ib^adv?ry|zFD6OO{vI%#*TX*bk2JfnGd_FJPxi%8jpQ83vhO>JxY1zI~Og*nMsa_s6;*3tYq@W+%RN|2AV1zabzj?{mGy9IMvc{ zj{H4?McKZ)O|=xG$aceY#`&b)#3+8cvri?y5tXGp8%a%W_U~T<0u=Ro_Jw1JQHBmw zTC+zR>rS7`b@dgOk@S3y;T*yKqnL6;i}P!ECpA7V=Csjaem?Qc`+LL{Ju#5`yc1uq z6ibR(zf~ef+Al#Y;u(%)e?4uapNP>?SJjhzm8#Q4_Z|E`@4mkgmLhSX9`#@G`=dGu zV<9yuc?VcctSw4=(DRhDk8DkeoZ(N75AT4nK{@g)ave*@>Ck@9MEUgFK>D`O3;b47 z!@C>w-FDI=p>qT2!9r@;Rg9+}{BCKjn-i9AjK|sd%J80IkCT7nk#?vLCS=-S{Fiw2 z=We$Z{Z<|k)0w*89sRN#kv^7ni|Z5=4EDgc!K_`oKa-N0gkae`>bbwZX;|Nu^?X`c zJ#(+_DMpjSZkWV4pZjTI)K&GsB*uBq{OwA#i$8`i&Ksm4MPtJKW@7Ggy}`;U_H;cw z$Zz@GKq>D)jl)>_D6ji0F0dYczm8b^r3<37iglArtgXR5(PD#+eyyy%*RB$3Q~GRI zC+BTLf(T-cd@zXdJnt)hE$2PYe)ihSsiN{eJ<^Ch9Wx&y`XuY|?K|`H+>YWhYq2xr z?RC6XTcqFMUCj6A*5MDb7xCwczqJUrm*t)v!;m*uhw0%u`J^!bn)f<9aV{rs5_8DS z)6?T(gJrv=ZipnG`ODs((x&Z>xPK!ack;JLeP7$5e*Xld?RzQR%(BBivjiZcHpZW_ zr@nYRPJ}l{`}2y~JRpUqjYYjI-IF!OE&CTGaOZ=b6$_ zNeE(|j3b_Z<+He1Lf;2s8ppa_5a(y;kj5S`ck^IYFAzyCuA^skbDIc=_}iZyl!_n<##gq4)%XNMr01hfcClSGa^RH^h0 z@m?os6-St!)gd<^N&1oR2``=*u_jq{%aq=!rjdA&V=eE<~qD`D7W*#7{)oR;!b7G5`U~>oYxHxQ7U%iylEV<`kq6S#HQ?#8Rrq58Y(yAS;uP0 z5i0&D-u>00%_e$Z)j1~`cnVf8l|%GDKf_u7;WpxzT8}|ZSc@O1AzJ>S-mSM5rIFuc6V@!l zPp}tie@|}Om0BG=b%?V*DVvU&2lpMEPb|-o%~>J}*9|LX9d_ND^+yY#5?;?BsOTZT{Wp?K7pnp($#Hbyw;VSr`YxHXsqq)jyu%7 zzZROUcsO~WCgZ&K{%mFA34a(E=i)Iv6d%rlA{pnPC)Jd_U5Lec(XTD&nRu{_XIoDl ztx}_i;5?<;7Giq(ZQ?tz8J|L8BQcA_=)3G$-!c9%QDPVL$Y?=4?Vy7gMosaI$;6IY ztHtGQdi+jfKfkYy*u9ZCj>4NaplW$AL6nHt`Xxi zKOsLp5`neD$f>Xq@-psdtPwi6uMqO<$#YSIxv77Dqx@{G2bP{6BAIy>4@Cc$`)0&C!lS`-EyC`wkTPWfL2Ym$xc`8Q2spYkY`zPn-T{s z@1)1$c^l=8^vjvIpPpQfY1D-aMQpohET;GOGGbgqxl{VTb=~nP=}J-SnZ&l}o$;o= zGQGM3w#I63%j2Xdp+@?^HS|94Nf%ASsEgKwa}H}eag%5HpU$Cru({}G#=QhoJCrs7r* zb=An<_+HmU%$x0n+1_#JlXyfvu_qMICq&_4>{PjwyK9HIfB3&~?i1EQ?A5u_`$B`h zt%a<#bw@XHTXVa3%5@g|Vb@K1(=R?@h|FVMtYVyhZZBxUJ&z9#6D<3DWBP=8+)bH!=ccU^Vg!QR{C%u012|x8G&ge&b-3v#+cVPAbAlTh z(BCcT#y!K{t&UjFc+TnRPOlbw468|AY}yuifjxa>>Lz0Eohx$RI7j%nB_JTdRD9^` zf=#J9QX z8gs`35sdTbrKeThS_dHQF8RsUD(MBWhg{+t9XA9>D;hEnGjCM9v{-sKn_Ryna>Z@3 zCFL}+xEx|cCkv$=&2%WaP5l4h6A8qKI@e?$SGgSeu=W@}nx3#tYr&iMN#A7lCce!v z<)#h|m@67)m=Sx@A&PaI*_B=x5XjzSId}SE24XtvnWnY)3^E3wEgPEWNjgXu%#q1G z<`Gr(D0Xay5k10T$sQ!P@((HKa1c3@ z*wPuruM@EGRZn^6Ch`=>jmsSFQ2 zfUV@VetDsK)Hnd&&e5AD%}zSih5f`Z>XNyoN~hTS>fAX)dbCrzGlu&S3B(t6oRvw{Zf_GAHUti?@=6+?vcxl-uPYh=6-T0=F$~npf zr&}aq@<(&|?i5F)Y7!AM?tt7tcEFvbiST{)P2M%b8L!(ULbI!-xH6G*kf?arKI_Hg zLjT#ST4?Sbm8-dtf7Fs1AT?WC{$QMkeJNXStZX*X^4&}iG%BPI!aF}z?n@82tl$pp z+X~W$dI5M|ph0n1m=w~C`=%hye{_R%rkFbmuEg^@AD5)=T5?jDhr1O^j$v9nVw}fM ztc*Dai79bz(z|JMdS!9;U5`6!Gc5j}8#sC@`2eeiqkl`{oU6HyHr^VA^>j#lOB|__ zH)g+PeK<*r9TvpilG)b_Ew&PukAKIx%y1oE3`{@|_LK#D2WIsk{!V^ZX0RS_w$TTB zU<5|j=KjdU$+&SK1S|H$B zWqHXUC+dwQBE9B8+0VxjDX$X|xVNG>nCHwnN+M>I>mts~^FXCq39$S+l9-qe`bB9G zp}r!In;eEX2cG9=%LdQRr&eof**FhgJ=OB6jR%$~8f4tjsf-`U4@ss5{>eI$Gvhol zhx6t`$ET&%@6SVf5^??9!OTS7Dev7 z^E3-_trd5X?rGsOYX$DbI~q*1gZb&%qJs&!3U> zoads_JoImufY*^zkTu93>#rx^(SW*$vzde535jT0VS$u**$r=-B*FD#VL|X;C+amO zVcz^ja^xFFEL)$11D9XPi?+CsbDD&my=w^%tJ!GaO@G7WZem}$KfJ!OrmrpJk&D97 zgZep@LWUQ#VJus%DjVnHj#DfrID1fEN<%ClUG?Xe2WCYvwk=yqGUGgc1O0h#EtAIc z{9p*V7E_N&!N)i+BK{m(<((A!l{{W8xkkTgp-L|;?0BA6=*?hDjOQlfJmRMs=6v7l zH0A7YrX95xiMu;;k5bLOVV(uQ-PGc9Pr@Vqd3ALyT&~}5os4(XMIeO8U#+uD^({7Bp5Dt_7=&k9z9?^e7Ag@ip zMI-xXy+0ynC!%ZQSlqid2Olhw@S)vjseH0K8r)05aASSxgS|6Oj!MRIro+2JHC*VYu(7X)BrBx{%t+vSnY;aF3d?{7|9gZ({n zZ(Ymg=X<52EvI{UVB`VvdnT_?ZLREyFh8E{WoA;%`T;0jsA1ilDQ*75Sqf`8|1Fm! zc`xUmoUg1qP!6g0;xLkZ_Xy8sc+VO^?4pO`%zp6d%DS3ye&j{3$=<|380R4?{cw-? z{2phGGw#2zQ_2^Yr6%PcCyzaueUYhnbwWHIPX4Hc^U0_59o5J zA<(`MPr7L^bG9DVzUR=58esduz0@P8F}o$b06Hh&Z?ggvEDOO2)(kU!wj#=rz3ulz z?6IO3^^-a1dOHa<#9$=ny7S#ihWW!|(xpYt_|QECL*7nTdGB__3%?Z9+R#b9{L&ds zR;KXt&Xq%6QNw&<3hdn0$wPzbQM)`5FQ3}VwT6a6$3Dw^w2z@aIdnOn%hns2_xoA~ z&-H*lTZ2U_)~O!W@q~vnaint=QVj1wOV-jM+1sVcC5&-D-hI>VN*)c+p#{y#TRd=wiEk6``=77t*2Os-7;XGqFhFrMKeYoHGiM#^F`R<>ExNwnN zm|X6>ugJt&&aopoo6eN>VZ-1!s8}aIurQ(=F+ZiX4mULyA)At4b6STHFK^Q~jCv>O zdK|s`2qnJsH78g2Qllqu=^cjC^AeEV^ft8jgCU|5k-hO0jJN!ds!Kwfr`s`1HwSKU z$tYYwE)O|KlgO+1Xkw1%e$2xy7I0T;gOvNz0Xc39V7+6JYSLP2K5tt9U)#y5?k7C) z{M!Pw)ugGi76qbh&lIfJuQOcu7K$pri0>R&{{KGd#d6s`C3jmR%QM6YSF*-9UumQ2 zQVUP?n@SGBtbS5_vjDWC=7!0J9I5;x?hE!NFZte6=`(ADqM76yf2xUazW1BMiGg(J zhVkdfYap&t|JPVN{f~2!8|0M*cw;~F%)th6NE*QVYY*qr4&-^^91&pp0CbhFQ4tKt~%7%cOP51XZrUx^Wl}(sQ)zz6SIj6E&GB! zh(I-BZjt?eqUGQDxWQf{u_k9s)Pd~#AQ4MD72{GxKe(7Owlgolcx5(oMhbblyXf!g zhWQo?(9Vy&(=jJBu9}L(8tqY9)dAz}QgN$jt>n_n0sC!JF~jkoYOU42eRb?XSZ zfLv%PH3??%u5x4t<_X?04L7d%|2VguRhIwkzvjk}MWMV0*Rv<@yHOR@g+2RlY8PA^ zAkE_L=PoDK9%7$V{}yLcJ*erO_fp!=zU?2jzR$ic#&fpPZXWZ}P77?`#W)j3T61m^ zytfgjzsx^>G!WUWkq=U_8f~iXPQQ-|?C<s-m_$ zO`qI12^d~dMcwQ`AoBYr;ayKtwcW?LNQ_9v&K93A_OcgR=BHpokLwtD#TAh+7ocU8 zJ($115#Rqy<;-Fpy4JPB${(qy`s zeA7hSThu@u<`sa=QAs$~sJ=Rpy8T_BBxAZw4Rv<1CpOb#`pVC8>S<{%xUoDH|9yUh zpFFqibJEawFZrnZY_N>Ju@e!5VdZ8a&5QoAYhOus_S<08^#xG*QI|5r8I|plFm7*& z;bucWtgJ{*XG1qbzsdpJEiD`8%-r31COQwyTtxi2=W^Ae37#0(i8@L(drOg))b>7!w1IIR+KIKX?Q^LzG07#wNUK(@gN=;&m^s|LdENs%!x(4IyT9FcZEdgJ`x z2UtQZcT7XhsYiXmxm;>1a;B2`yrQ~sa5(w2dhW*7RzF=kA0M8_OO<1^)Vn3 zQrlMQ$PWH+%1uJoDs9wbXL+OE;1pD|YpGVZ_dsag0(=|ONWJEh6Z-c^L&%$I>Ry4w z_I=ZlQ}`ZBuURAfLprL3=cDtd8SrpShx_Fy_=Q;``gST~zCp?=cEEyyB)mDe$g(+g ziMPd&UpjTDVetenRAT+{zxc*>>j(KF-UD4(Ge4@Cq7wF;Q8w1#Oi5>{ifsT|b=P2| z=QimPdyeq7ybG({lddzi8-{b9l35Ma7+W=K>Bohg;U2=CFOisYld%YzOx)rCcTBeU z;Cmg;2pC^6ED2$!i8--`c=l)wYB-S75zhBv(_ZY$WzEjo<$cmA^qosj)S1k6_T*VT zqbBr6_Cg;%VSW8b*b&R#Y*k6EI~|6g96h{m)m2~kFb_ZP#FKN^LS0Cmt{Ec}0i~mQ zaF`zsux1+>)J^S_J_qe1QgFl0TpiiP9a7y?_^#=uew^!wcI(nmF0Z4yU6BpGzD&oK z(@oS_r|6FmybwE^nyNqVnub-s(lKn`WgPo39h*|fX}UBO75du27?Fg$q$Bd?-JWPy zArkH19xeDZnLg87%I-~cF7HsVBaFSaRs&bRK-GyAo|s;RwOsG!(&j$Y6m6+NLDnkC zYbo!qmYl=(Es|babB3=Xt~9(H5?7LIIg2wv>lUbdOG^*dSlkL8jPksDTWx0E$R>Y^ zcs#1et26>4wTd@8EJ*M`tx1V?vZ;xv+g>%3@GcKY! z`yG=!EskV7=M0te{AlhB-28*=eBN6TdhU2vSI6;=eV!kW8LOJ8bF)UTY#?H`tk_&5F48tS)H*pr5dOZ%&DejqNiBOR_a zd#R@%{8M{`bBR;f|+A7u=gQ}-t&Cr9m{m=z>IOpn}t<6{6C1)%> zlz!9`q#6sXF^Rh2|9hV2dlwaS9_WG3I_jB6)KK|{dIHropbiuvt>~ zMDl5yPtlUQT8-IGj-^L%5j)>St}(RX4IF{mfKW@_;dWh-Jf!J5EZ1%Ue*>iaU|4J!+0Qj9)W#m|2hYM(1-l%CFsq#^dYdND=#& z)MXE()2(#a_<*yO_T_N1J9+HH{70^+i`9&6E7l_SRUI&sdx*uHr`TEy#20HFu5cz; znmQ5f{B=Mv`^*@3XqV_PFrT|-oR-+KrcUDgI<9sqe8>Y?+AjeoGFRi@TpejGdbEOy^YLw@vm)aJ}+QZe&zzzs}3PVL^(bj<8h z%zp=cEfdr6B;Xgae+FT;ZyH|vms7vw?oZ5^6ue!$5l=WznZlai&#I!zoqWINW6RFF zADT=wyjkjuS0U_EeoiPz=Z;7(bw{!!3WQ%sko)Nm8y|MEqQXFk8jCP751b) z$14p2Yz?ZRDdgjqBR3|pMAhOM<5!P*Fa2vu`TRG3HT$Ps&`Ij+L{8}l{+Z81r3m&T z$G!Qy$~j3I_9%`ki2?qOmVEEB2D!%l`t*g8j`!iR_N-|}Zj_F6&|)&r`TOAqrKK~p zI7dwO+m6#x1=iQAiiqXyxG(*B!LwSx9F+A%(oZDb^j(jnk}9y~T%}xk0&dwi!O8p7 zQgBQ{{q0@h6-WO3uoT>k9flgWn7ds*kOza;O@Ebt~qS$s4!! zM;kg@+o2bGK>2t%!@*njh&e{RM3>D4TfVxp4~s#iEA|DmSBK)vFby`W8(pA|iokaE zGCR)=E!Z$H67HEgP3}`SeYiz;x1yRUTYp~$zw1Vcfqp@ZJeM9QH6#Pk! zMxiJ59?b&_T2hm{b}BV@&cqcg8B1;5b9|@VQwzSWqizrDj}p6;1%qo4lbO!CrQ_Cu zxOnac?&EG|=Y0jut8*v5H}%%0<`mfTez^9O@505@0+TJ|y+_y#RZ1V~C|pUv+7Jt=OMB`*c1S`?yFF6V@)79xD+v|GH$hY~`{stp zc+YwboBa?pDhckzTadNV8)pV5;L`d6q*U=i$W+!<7UUi+34$4Y1?oSksw%&lUURSA z%fxwjrv-)#a;l%r;(7ku$IvRn7I6n+aQb*3Lu7MTly~B;@|qaKo?LpM(3fOG{|$zc zuc4?^m)aH)!r(23aUYz1g6*Fe_N3CAoBW)d@)c#9ZuD}!@XuSenOs$lK>5@3Q(Mzh zUO$fKgx~*qbBwGx9Lc>r`fnb0m3vb|V7)1Qshnfv39F)@A4;x!cABizkA{@R=as%z z?oTaSi`Kkz^}FPAwW+^EuJyFpN9ES3)D+?Q7Y-+>jX>{|51bcND3V*v)F7YtMD-bk z@~g+xu5P1;tNBjZ#w;3+BZ&W)y2u|Q=#k3#VCKm50=Jp-kyarQD`S^QkSOZS{tcKOrMCH;8-|N(L(snx&s)dp@|!22 zSkD~(sicd%JSPm+FJs^wFkU{W4M(Rd+}GIYFaPKifk#RVtR^gwUl}9d!JqlLRi@l) zW+bfhxYIuCko=h%Tn$gfpya}NdG&Da+!gb8#XOgLZ=)YYYx=f#C@0LDaHlnzHK%h; z(Kep@k0w0NH=BuDKiC_3k$bbjOiZWd!=?|!W?lP;nf#r%vpI)o^iMm8o@W30${_>A z)6Nzb_@1YYc5ob&F>(N5HQ zr*6VFZ6S@* zd*E3DIY=`HTuR@gc8ft5oXYE(yD`)aNkN!*V ziJlp93gdk74nOC{J@T`pa1`p zs<&z>R-C66*+zQYeC;We5mCI$_;b#V6lpxq_g}dh zpbmAmy{<90cV_-AmoB<~pwHC?&KEW=7yD1p@1hquHa@FFmS+?e9Or)Vl%>MyNI2BP zxestdFUlR6haEe$+{>RTW~T=r<{kOHSN_ODL%gB=$^C!Zp9brZ9%#Usum8yeY0Y3) zOn2gL%Zyq`D{#YkK2u8z2@PYtk<%*-lQTLYxp6Q$n0vv=?49MM3iKSHAHe_C&yiC% z7>Xv_pwvZ!ZVlHPk~OxF`7Tds_uNqW*#$Y&2WjOwRbIC|1Qi+E;agK=lZT<0^CJe6 z(|5`@sAaw2+P`yKB)bwj`ErzAoJk+#u^l7OhwtsW(KW>GV-ZNtpjP&eHp0^;65rF9 z^Y8Q*hN4J3q_%U{;}gX%=8Y~{F}QTzLulwBcJVyDl5fO_f|k+9u1~$rj|;@jx#UM^ zc#ov66piSyu&pM0%PL!hcL8em{gfte@P{p9}gg^BWF&JCNE#$m*j@2YRP zPRI!5E|S?^DNb>P;RNqA>_${ju{&Vyxue*v*olhWiOI9Rzvs=L zcUL}u%)aOBTzjo=iKz8cl3L|)C-E}5$7fYYrcvZF-IvI{{rX~Q=XktcN&UyiorOK) zVBfik824g?2qs_Lk0ffq85oQ4mlN=v&)*BZgzZcf=h*bE1Cqt?!zyAMnDg9NAl}eF zH|GD?tEo4D4{ZREjI!;`sXxb*>Xg858W_O%{pj*2$63CLou=se}H=sAv@ zJeN6x$SD$!h|!(&h2OJav3PVg2!a3p!&7;Q+WXkMV?7ygy`z}b!yV69C#CqsG(H9yQs2bd&dLsv;cFi+*yQX9LOLp&M4H$?<+TNeWAj#66zj zw~x0<4bH|O`V%#d_g$76ERDsrv*doC{!>~W7>7^vy+^LK6u;WBpSFt+JRvLBcCF;=MTRj8jxomp+B7$~Xmk-lXO?|$#j)U03* zzfymz=;x@0$4L4O$3vo_Ewv&KQDb_l5cfY($Dj@QkY^kh&M|Q?97`^PykfC`L=^JP zc+Pij7j@5tz-|V6=I<7ZnkmHb8*?_{6(lM*df*o46m8ZH79UnSqxJq|bUS-r3NdiR zyaVisb@P#uEF59lp8SL*qe_Opc81-W1Q?i~Qa;<}iOuBFHPOCS4*wL2qgn3Io0n^} zxf^zaY)+4^IWI1sK=da{S1DcTvZc9JjRET zYpjo{XyclI{^aL3edaHAJxxHeGqs{B=7?V0_w(>4KmW7E;u$$0zNC@w(rcrb#2hT8 zn6s1Hd&Ln``jFP-=-wv@-vSl>1n{}wq(F8&-13sJx${Y({mnjq5qsvb#X`Ovh9J(} zyjN@!aeD*cLT-)^>z9hqTrbR8M_m1x1hKreD-O0MCU)5j;Tz`&4{PS-Z#s)Mvk&_c%w~oh;EAGm&5gvH=Fc|jVcPslAh2p8kjk9M{qoRO# zM7UJ9v-VED=Hd){_yv-$;CPAV_iP8exX1I8-bQLDyW#shK9A0kbf_=W=SL#M^I~b# zu^1FF2h%=yE`6LI3#CMTG|xt2n|~Y{uH~7$)N5#NadJRHtp1e6STC zgUKCdlZg9ABgNXv1hn9+T6fZX;S)%W4qLvLJ1fQEt19XXlMnR6R`Eh#jXcK6=I;&* z`GX2cZ>Uf7@VGd?f?71JVJe=T5+w=L4QFm&VsS#~{)oWdJLKT7IZUj3FedVSm85PJ zdN+MAg}&>k)he;Ck2?nP%;>b7FMd_b#yrN>NdaM^-#ubMy7HXYuofjRFD<}syWGW((v*h}qHOA`HZd9IjS4_&lh^cv%j&8MjS@)dc;{3W{NF^*0@Q`+jplJ zF?X*G_RLkI)9)do-4}Z-ii<(Z_?c4TS6B2r9|)5ta~0>Oa%O$Z6=#sBQl&ju%w5}(U#|CejI9M~xFcTn6dSJ0wFh)H0Tq`zOpNFsYgGKT*qF%)$Oc3pP{+; z+YYL*By`)cL6h^z9us+1H%T?5-mhITo@Xi8H%7{?M=nkJlk;MeG;wq^@>tWItAAEH zOI&whLL%PR|0FdDi9xe*#S#X zZxJTO)KHkKLK7wVQRy3-_aOIQheEO8v_CTTCSYR!07L8(E(4XJaaA|?q zW$J*byeBhz9}r9bSz`tJS;o^#sdHh8g3ZjSeqR<>{49{ddla$gl1RK}iPF}bO>W*V z;;3CXR~3!m&7s0!uM1rDf-qROR5}O( z!)9rEJhI0a+PN@iqh>_0EBCy}mD!?`G-^jUX5V5QyfRZdcO{CuWz-j&9w%)!j)pP) za1-S+sp>8>49F%}&fsnM~eo@ll{7O%=x2uf6niK}8U`icrS2Ahl2v>5p8P{C-ttFXNj ziJ8#m`%w7_pnReR8(wZRrAUp65G8>qKx@ z2dw$1g2Ai3Vm{|n@gLbMNjxLQG_=Hq(nMJ1-W8X}S)dLzaSq!&5-D3O@j6+B@fqjD zd2?I5X&Hm>I~R+VAud?gD|2K?B!llMoD^$okF;KLp z2AQ)9efPGp!ofWhMXji@ZaPgk9rdRsb^@B|IEkHmJQ1-g0V!`(Vqg~+Y$TquZvCag zq@0>-pQ&@#VwX@QaSm8XKQ`r@7=P9R4Id=pZ|5gMZa_U#-e0VKEBb|5!ukR8$TJT_ zoA$QY$ev~zfVKh0|5pguCM`*?c2=9fb_nwK#znt4G}M()A(d#G1+_q*mDIdcvN zkR$bBOX`P4!=is8o~93!E^dg%Xx_({snaB#_w+M)YBc=rE#2ffZ|SVYmeFZaf6gHG zcUI%wv*pr6&en1&ICFhQUcMDE=t}LmS1zTJSw;*tuIFcb^ib-wJsO`=={K(Yk_ITL z2WQGWuW3_JH6#>i%w2x?b`xjv{n3kd)~!EQ?40Wf6*-~m-F6jspE;wl1M{0+nL>Ai zJtAo5UiY?&{9)F(_>bD_PtJj?e6|PDuPNr2dvj8Kg%1oOhz& zj17j7v-MV@Bv#}*V|&jK%n=Miv$ z3Zu8OxBP{=8&&K{g?*8FCHi9t@dwG?9mG6SPx4zNpyK&taeA#YL_2EdwN4f{OzhF; zs|rmQZxn8~tT3@|B4)>&7KI%xV8C8ka>PsVCd3>k)9gx*<~&-BI#bme^=k4WGMCU# zTCVxDI~oQj8EZ5LHRm=(!+W6$J0?ESbWV)M&rlU?8tO>HPe)-b>+=mI3duPm0%r!R zP;+0hv}J1uUVKSFcGta9-Rb`DXTH(*SbTdG_{Aow- zM)uSutr3B-Ryf{}z0@uzMD8AQ{ATUr?fyaxZ)%Pu)Bek=tHi_*@)d68XL(aYuKU&+ zUmwS!;nfG?N01YSHV(zLkVtWEg)i|z9vE-G-%$5o7<@-nw{za7_~KXPcIZJnAG&_$ z*zzOx`1h1Ka2>{jjbdKISxaI|#U^U))f=J0i}H?! z2M>i~a#Iyf=0s>psL43#P6BFq^^gwk^F#mq1oXPLPU_+7f#hWgII+8yu*q@4@dhd^ zN}Vir54MArd7b^FOyR!KlDuEkPs}?Y>@S<4tP}f|`uD|FJu}SrXAU;H?+7< zy*AppZgIJx%MN04Xy<^z-wpqcam7XUf*yt%8wKwR!-|WE2r}7WWJ6ui@WMnio%_LP z%G*f1W{oyrUkAnI(NP%GIuQeF87a&iq7cK{#3sa9@gau#ck%4e`z9-jmytVRuo|m9 z7b%)8j6z-JZ~d&+DduNH;p|%a3asHxkT*~8x^^&qF^>!1+O1DivB*4(BtlO zfmvV04$k8q|4G2@MHwaM81vtqOTe+Lr<%vJxL-`$F8`G(9jT(udsYG(4|yT=<8E5t z8q`=1(--AOZ87zw3e)!{i?0JLk<%oR`&mVz)X5BmU6SCk@~U{f-IRZO5{~TpDC#sa z$NG0_#F|%$z7woqWfzBUd*6zfHjencG!!F8EEap7xWhHu11q9(rKfj&h-tN~X6K(R zjEo-Mv4bn^?E9{PQDvb$e$mcv4Zj(78%Rz<+PU!WK%?d>sMT_T`SbLpMo*bjH7-bm z$KoqSy-rfw(Sh~&{(6e54XGun!(Hp>-in(&smpeP{WYgaihwau@Q-A_c!Y<-W>ysW zSk${Cviq!+7a5|TJG&Pqf&Jd&hl)a3PVv)jkGkp~IOk;u*6=yz2 zV7ZP8hV5G`j$8?&-a6-e1qmf#?YJjcoPfb~E^9vA_QjLA(EXAi$CpVEj?qS!Z zqWsyY^F0CM9eNAx7+Z9GOg^+Dfg*U91$Nb=c8=LPvE!L3?(jUnesNsr_BKTjdzc?r zmy5zQGfa7*hMCT1;d#Ikd(Gm2%BSL1F!S(?P~`Wf_IH6BzD)PPp@qvOf9|mC(y4A| z{Uf19g}3YwOFKI+t1@h~k@FVD!6BYuhW_1LF_Cs&wJLDzLv;Q{KUwt&)v4e~QEmL3>85G1|lZ1!uvGj>y>X*IEM4zPAWVpsc+Op z9f8+1>7U!pEop2W26J)+z8jXH`ESnrYdbZTt7l;%F#skx z=SA1grs#D}jS2bp#H>E74SU7m+Sn^%8T0Tggd(zIxR`s|70<7@!#8e_^r6@TyLwwx zJI|L#Wg2ZGm*ZmEIaOzi;i`4^%wef9dLyIwVJlbY(9Zg`vq~O&hoJ-QoOr*Wp6G@E_MQw! zU6!7?IpW|$eoss@@$-i@x?g0jzE>%%Bg`@3ryBoOM+)bYvk=SvYP{<*;quD_8p9-P zFyA5CPo>89Lgt?ZM?|~j7HE8eec01GM5hRQ_~eB^U8}b^WWk)_yBh{>pQyaC#T}=< znpLy&jR8xHUR<}scG~&Be(AAQ_GnK#{~3{1vZ|pgUZk^cZ#P`i#3BsI=cpaL#ZTiu zE)sXy6OM~tpjqa|Ik+|Z@SnD7d=^Jy3v;C8>8CXbD6 zNgHz`@rtw6r*}F^?}$~dOMI0WGfWyimYRmKDxB>lf`uwOYX{0?9(QoQO*Wwh(#doX49U1cS~=sdviY~0lWJgmvp>bG2Dv2 z<=$gyGUuK;cN6f-xt{pez#0aZn9rQ)A*N)T;SKFPp~oa4y)nU-TEyaP@Dd?CO;E|) z1DldW!{Axyp~qdSwsS=HALg)Z6brrYZsK<@d*m((MjIcYxx$>mP3y`TnF^;SkjHqj zX*D~0wRKiZ)HTC+;*l11QX36q4%y*2`|SbEOAI#Kz;hCDLOUEZq5XVe7R-M8@~xVW z?}AWiN!&}`O-&DS`&_1fvp8Buifex>sKTn{b0q8D5xBuRTBqwusoA~=G_&ShFmIQX(ctKKtY9 zq=!<9(i!7E#^Q*gTnhHIM^Q0*RaFn9%P)wtWe>M;n`@F+D>Jl-59_0Vg$<=6g@;+v7Ba`w|g)#&qO zsg#lv##tY=w$(eO=mFvQ_)CR39%rP>duV^wDMr^Sq}g2}V6}vOn=iG*Ykz8k`l>MZ zU<=Xub2xXcR7hOdN$e+&NJ2pZ#yNHoqsUb|{$4zEE87Xz^M3g9GY;o`TZ@e+ym5}R zhpAO9#Qt%f_~sIaeutZhX${Dgy)zD}VKs$rV;8*b9FMkMm!wzOju;ddPfmk)DW{_y z#>T`G&*Z34TiBo=BMv7I_EjG8u|?8gzx9FhfQIAV zpHpG%&gymd`UV~fgTtmMh$aSRL0_Xc*5+9DJ`tsbdrIc@w!!68;#gMh*USm?~b#K_E4sTKRN-Cok31J+2__EGQb zpc(^u9Fi11VMrvd=w88fDV8=ucGcUcdxSZUZUVLruo2Db z2chr&c$k&guwNYj6=#+)hEC!fxw-n?ii3YcPcb&fAFE5_;Gmf;o*nT+;WF-ruT_eL z&8dw$fV$Kznu^7XywNoymUli!s`tqO(v@a@hyh_eH_Z<&47rJLlbAVTem? zr`+-=33bRH`hVwEAB(*efySmVBhGyH%UVV$&CRL#!2Q9Kk4lEzvBnU_yB4*}GiDIA7N)z~+$yRe`(tE}eiBYKpO z$)~ZC{-*o0_ZSaDCM(76S&S zDeoR9H_z1S{B^gA{1rd7l~GS zA^6FBPx*I|sK^gOdKGJg=1QT?4ZuHQDPI>alD>2bL_^NRr;chURn3fqH}ibE`-hY! zo9Tl^b^NpCz97ZH-?N~zG6_$LQwf!lc4%pCj6PVNA)6RZ}V00plt-KiOm#;Lg$p5QLRkrABd+q+}d#P5i_JuX6-p+faa>1HOl_*96o3%EhR_I-HzK&gD%}J=`{?-^()M=Z7)g>?gsN+@m#I{B$;dqL1`Xs?$ktV zcMZk*h3p50br=1*gyCZvYtR0pg?uUuJ?VdX>@yRV(cu_1hjZ{j0itg62wYvj8uRrW zF?nwU4sA%p!Js9g2013zwVrHbB#tj=BrUN zITLvo4fPrF0RR3ZLQhAdAMxEOw*OW$;`pfl9y~_Ve2_IlXj@$GEd8+XMmK{b=KsOcsKJ4V z7|t`WWSKO(Mi5Gge`~38NO~m)A@nEb;Jxlk@mZ{e>1VRd>xq-bAvkb@IpNfvqHe=b zjA7re-)7FiPqSwI@4Z<1i^<%Tj^>;=h2h2jZgF=8KM+aGY;Oji0n)@xUnp zE5;J9GVr$O_&x%5QAx;u{X=w_7m4>W`74$*l}8OAMzKXQ+79k6Uw;;bvBV>7>ZT{> z?qr{KE;)q?d&v2XVoH?>u^zd$REGSS-PNqW6`lB5EWDBph$irIlqrWQ5Wu?9($ua9F&9y=F!#S zU~T<4MMxi0Y$b+jy?%t;CEXc1kLjQ5xXVq)IHTt&;=Knr$S+m};vn}U7EiU7Z*8Nt zLL=_48d=K5>`7kXb7vDPIcXASk1Jrh6WkLg&I&ZdT2QQ zaks&sUW|O`S~!Zi^AeNqB`1;JI;@C1oIP#i3C^6e>>&4J|7o&;5zjWUTkg{h<)%%e z@r*dn?N5fvVVtkUydmG|`9AW7p3%78pFBjpJIFgs*tg-1#yHbDa+j`QNa{kKg^%aO z#i~FA+)qX6`*g8wfIn8QB)9L^uA(R~^6Kj!MEnvF#`o{oF zYRcWB+XJ*aP6TjIgWNTP+G@Ag3B;+I=x5M%z5U-$h-c{1~>huqU#?0Z-K zc91dU8?nj{Ps*m;?<;uE9fsTka+9$kc>0oBcV`OZT{S{+_9=0Oe^$y$O(@RQ`m7gM0e0}xl>JVWHX+se&=cL?Q+1W59BD=oUPrs!~=Ol$<5{As_pR9 z4?nq&)+lGJcKJMitR2i<%X{6luSN#oHSb-^-c7XePXchfEB9U>|CDvp1EK6d9*uG3 za&My`Od&qA)13=)%P&DF<1S%`ykfccj$rg{LhYEFJLFg&)|d^*m-{_WzR@)l)9a<6 z>#C)4!`q>lRVM|pftm7zU~6oe1vCljE_@#HG{+C#hfi9h}r64yPZx%Omg0A`Qkj(md}+Pn^d7(t9{ z&4?Fr>4`wN5(l3C?V3C`Gzf?JjyhOrXBj5;wASlEZtI}O<9cx zhH8X4Rkw4id0C1&{Y+7lK3QRWTXuWkgHQV8=h?qh>)Fx;w|-GeV~?HoUQ8gy(myPl z*+<)QatONrre??7+S==fgK_N{we32W$+tEI!}$_5E+6iYQ}6RU9Htgy$O8H4&=9!M zuV!cX$|i*&=#WV*r|j`^8uhErMpL8Exu^Vw{kOZ`#MUaB$dTD$P?O)IRrxoua&kC^ zT2TAL@PSxD-P@>H+-0`7DD<90z@IU0^~956*J1Wx?YVpISSoHTU|ttMoM-u2anK<(G-%SJCVRQafPp6LF$;41#%&x|Y8YBYs8UT?Tb(hrbreIQCt+XK^>}zBu|K zgnDRm@XqU`=rT1Bdd<@ic4W6uR{F#CUK;l7XCBfgg!98ROxP4AYJ7}Fa!e{J%Yz`Y)Mwp-N|GyS76hnO^r#Fx^4^S)n@3`>7XRz>{0{5{L7 znu}DO7#!yBH+bAnj9nZ9&$h(gcb_QQw~d8v59%AfbQbl9Q>r(VJ3c|w5uOreoO7UC9vw-IgFbgjQ=G$RSCW-?aJPZ62BI76@_2Ze5qQ0pgRgg0YZw>9Eu znHr6F{txDE72P@4)#L9P9(PE%D7jCuE*T?_mWm;NIO94(edKP}#oc@rsu&+1pL;B# zJ|>_~3u>?Qcq5)h#ABH=eR9bMky;W1RT+0EHog-#k42zeDmmw4Dnvl@5bW@oLtMu_ zQNthrpM26_6j8jcrD0*FZ21m3w4F=^aaq;p6H#ByitXWOM>HFNpMNba&dUnjzk5mT1R z{e{6>#h{_Yv@W4e=;wVRk65RXg~|A;Cy8O4JzCN~cpN<|A{TQ$!(63}e;IN93HU-g z&ri57n#aUJk9H2|S1!hmk4EV&YLjF?5skUGa*#Z3hsHe-rxZc3=4a>=`c%9=?FS{f zP+NFE5og=@VVfeITJ`5e#oYk(Y>|#y4oZ>5p0NEh^1tB?F4T;K8ROmm?IYD1bWP-* zS%DXSlF)RfR-}(vgdu!(X|YT;y}F`aYs) zTRL^N$?1B|Md)4Po-dy>COC;TUa1iL*}L7H#eOU1BmA8!R=WwEWO5k%qV8IMA5pJ} zdx77nj}sp(Uaw8Wz0XMqvW^iSj6WmYI-Y?iM5pjjWSMiX{OWn(TONRxL#gH9cT;pp@P$Wj@ zkFQmVD5D-!y*lK^+!ZP=Td_9fbI<`#ki0nG-?eX1p>*gRFf$< zC#lOrEMGS5e8F8T+#Z5qrK}^uCm{P~B*Jp4>!f!%5G@zpU4gG(=^w{f$qsK8V$Vlv zOec4cPq!gg4bR?~+aJXfYDA^*@AnBfDNH)dLp{c|q?KDlXk0qx(C3V4yI7on1RPOgGoPJi4iIk6-j}MJ)%5hI`_$gL%})lrchmFb26Ue6BDN2ib?{vNsu? z>x0FQiJ{cHqdw8!9ASPnfcSrMBZ?yNVVW;a+#^@vB&~R<^1<+=IS>^Z(Q1M}G{!vV zH$%ii;&R`4r(k(ex^f9QsPA(h^8fk`>yzu{vkz9_81HP`!x^%5=|b}8C&7FeWbMmr z-2KUUmUBzF?bj@*XsG3Sp%&_h(|I~TagQIn~}JjM*qRP{IWwov1A_clI^H>v!Si9p`9x` zP-l8;eKDH-{+pf1;kM+PB+XIbX&3tOoJUevOY(i`CR5w-qI6qTPiKE{F>y+!;l z_C=Y)ce>~*25ktyn1`&DFLm+JumOvFV>Um#e?>g)0c@|>p~5(hyF08sz2aMmTb$dZ(^ii!evv9^XY0PKsm)JG z^ILP?!q_?>ah=p}5wYRyjr^V!CRK5M^_eytuN)%nK9PWfW0=GIexsQcO}{;XoS3y& zYurx8!^ea?HbHYVM=ayez?FS~ZKaxE;wKAI_&ar`OM&VL{M1rov8h&Clfqu;2m}-?UC^p|qz!?5s?Y3IV!^CcUW8SiVmr{8#g)>9n zWZcTLRGQ1N7{i=qR_ozPozBsCN}D(?o~uyr49E1_JU@}Oq$ti@jOd?72HlmqAM;1E z57dY}JX7@P>jRe^kLTP@nkSx^vWB(ho$WDKG%1M2 z4U6jijh0z;wEt*lZ^rj3mwSX)FN8Pa_4H;dWD}2UJmGmZNpP0;FV4ax`h>M-_2j5+ zbK%5ud%a0Ld3MKiOr~w`Xv@S^YjWoBj`tX{O_NfiJEi0Ah&W2&=YxZ#ZmMR={gJI!F&H7m$(zvGnkZPo| zmeCb9e%^2^p?=ofIifhv6FUb}r^LNboIX#D={#~9_FEu|9x)H(y=$XBEc(}pK~3lC z{koXRZMAk!SD=VKIcCHUdBuQ*&^}CpX5cp2#2_21Y3CM`V&ofPSs2MWWu?+c?zdnr zGU*eRp{1Nbz63X(+wI*dMAi5?*h`-|wF~z+zK|o0wtZ!gDSrGR@7iG2fN`dx67<0a zwA+g~_OI@CL?_$EDv7j%xW zcef}^#MJY^)6V1#uUROTbt1l6P5$dT3xx-3mJ@%I;GgRc=@BnRXu+PQuCTzQsx7FO{L--tJn|AfvZW}DiMv%1RH zUXz!IF@3+sH_?gj`E76VO?B4@zo+Ej;<+ttx=>Vn7$tUjU%t+$tI$! z8Rrf&ShMfUmmMX$?)e^QMxLN`+dakT zx2{-Pk%}tU0x>Sd9ZkoP1H9b=@h&0=LlToP>P1~S@eKDXBcrPM=U>HRwD~;GUs((M z>)uY=>R}FyZn37ge?iWPEkp$al!W`MVX*Mv}9<$!acs@eGeM)RVQ>(r};$ z^WihK$1Ok__kL2Ty4UIW3E8=^f zZ-OG5U<5s4&eOUrmgo9o6#KpX8_rg~`|0&R?zXkZmP_*k+z>Z|8j*&MqWx}X)X1iu zNN&DZ*PLAFFH>;4;asuNmUg~LTvkOpdFvo@>{wNwTV0BtsWqd2ZuEj&m)c(1{fBbk zPu_!~;D>VK-B~cCohN+ElRcVc!JU3M&NxJ_F?ue>@eEI|XCQAqmd2SfbBwY^^7MMt zZyCxSTI^Nvm%W*O^tV3wtAvVi=IRvoA|6`_6V?iGmgKQ|R!a;uN2Qkxuw= zXN$Hy)1rZ5*C{ow(hvM{%T_+0q(&{;s%_M7rHa^@b+o7F13kabEdjDd#@h-LNt#5c-G7 zE!m+rV$8@JQ<;oiZ{{dV13mDW{8=MMq(~d?IU|F$xsHReaLAgC?6#a?ZC)-~zHq^_ zc+NY{#EPdwgV3`9bJG_6&@#qt+%sNw*q8=Sp5eK-Tgn=8{VC}mE?mDS z3ih#&!TjopPo5}0pNv7KtOHNjiAd(Ziy6Nv`_&MyhLK~6J|TY8WT~MS`F?nA_x3!X zXhZD0K5g~<@or_~UTS>I=hp+8Vfcdttl~MW+B=GTKg47eQj=(`IdCHyE$KI&bN{v5 z1Y#rkdkUC4pB&EqKi^$iaT<<3GF&m^0sE`^Q>2M5v$2!?Jx#`7QTw37|1>6!G)orR&Muf)#T-(eErQPk zBCm%Ub2p8YODoAq(z5!z+v01m_A32GUG@!D?}0YfKZpFNNobZ*LwnFF3tw4--}XB! zd!5gOK68n6-R8;7sxt6~xmm&}6M1_kwbhu99lzR9E_;xQhdjeIXFV5-*)OU~|B#qk zAYKWcQ(OA;VkdEm@$(*Ing5f&((1mfhvMif=ITi^-4c`9_kxqk z2=;;o?xg=$wZW<7VV6`-7%yVZSK8XX;MU9 z0>)kd3_J zpeD!S|IMG3-pSg&|5jiR`}`Ze8f&{7=fLGOZT_o))@yJU>e9|FD~`+NyD~9{XYtH{ zMe^w985rGA-wtdi-Eij~{2IoiTV0i-Jk=OTdqy5Qr<|rrK>2Qd zUfmYxvMv@AX#cmj2ID;EdW}h@ zY-8#=z5~XW3zyws@8b<8Vho16j-@V;8&cDmyGAv}Wj!aJbf_YS**D%w@D>NPWa4s6!`Lsbf886ewZg?N$s7Ss(si zJ7*Wn*LIz_5{As>^4mLTYYoZ4*W*d>vTLDDZ^ZM=zQ?+em*lL)nK;#rbHny4<(ro> z5JO+#bIwC<>CXQ5XwI6K>&a)CW44;gdT-uup*KGToq2}4Y}_Y|cJWNn4$3?J!nGlN zHP7Cwjy1)hPORy9-}}sOCG8?^=<`XL=Xv&(DrNHz z%paD}KL_YSe`FLY)$EbZRwDHlu?Mt+<77Kb4-3UXU;3y&kSU%koUov zS*$%XCbAxK!vmhx77^kDGFhl11-E&8&$uPxy&c9AySggz)XoAE( z%sonLDpS_a!b}bC%jRCv>R(o;ca9bp#-i~3GCA8O3f>#4>pZsGy;A#{ zJ?BoebEQ+bcGKbv6ms^x^>TOZ%U`TV*?a6*yFwoRo!Y{Dze>Zca_t~$qSDTGKjP(| z&tfr__tDVKNRFV-?8?8t?&~J<-<_Oy*wL5%x+F3dkwYecbNq+70_?fnO5(ZtU?g10 z3Dbr-Sa$kZX?piWYT;31-TS3x0;2gQv9LJ;P zKX-h3O8;dA$2~B?gy+^6I-4_VQ#(uuWoDn3f`adkKnoMBNlw9d_vwhv zFoqT1`>{d4l#A+^;&`MQOJbf$_pPk3i!r#u>6hp{%@KdERoA1x`?f%<|7t#3(9SMx z=4i(|kViyt$8E+y?Xj!D$fU1sH|@PVLlKDv%s1YB*de!2#3Fql&*Z5Td5j_Zjl7#3 z?o5_*_1N#FPrmBfPIl{>fG!T?lmAvBUN%u-8e@%HjqRe>PZbXHzAro-A*K@_cVabb zpH8~s!)@ZW4$=>=JtS3qNyI4HWUGH$X%TDiX4jJOY}#oZj-51a{d@k zJ1@B~M7u204fpx%pYchauZ~14?L2hP9yua47VQSHU-v#;PA3QB3))%t$1Hix{CGso zAg8EJcX?fA0uDGb-`?_D{Ndh-Bk$(S#m9wVni{j|lQ)Jh5rxEaHC|7DZDK3-5 z82ileZNwVJxCNq!`I|a4OytzJflia^c3yM+sP--USM_M;mEk$s4JmF2qiri|4$~Iy zc0+sm5Z{Ae<>+J74yK*gSRRnexu3C(b{_k7zI^9S-2eI#`?lK3L!QQC*G%>nPOyGq z&tbMxGDg*DAP?otE@JtWxbw8`HEWzE8>KmW;$d0Nc~+~*Qum`V`1+hNw|9zW z9cSMWfBAl`)+nAg3xij8&Z-85DvxtsZ)Z)sP`}&CCgt9kwLAs2pZ3A>)2=WpC$3{; zAlhAUfOQY{Ha;8&bcUDR>o7kcCw(7Xt*1Lta=}KQzaqjbQ_CoCejRSmX=Td{=+MCzO6G%J% zz4}Am^EDE-?HC7d9+t1vii2`6XVaPm^7x+dC^BMvdFCPy8_iysG3R~jM#xUwOKays z9paQ0@WXJSyT%Pw|{*`(Y*fZ{uqViTLH4U)kR{dQuw1JjCN4ziyl&8GA*ce!CPj z+ghfH3<$$GVovf(S1MX>48%n>`R=bRRj#Y&gUAciV90HXE5BW#=ta$;-3~ZsKt5X^ zYUOB`!*qxZUb1%)JgpdOHgNB|Q7ZQIE`x5B8P@*imo!%~V!Js8t)~|3r1{W&WQ_u1 zb9;WQA$fA=$Z}D2J4@}3YugQWz)#w__{KtQ*;NO)(#{k8M`#~@cf%6e+40UVIhgx> zrL?on$YR+|8Hby+v)k-k`Iawd#|rkuHu%V1^Aa$PF`WlNUc8a`&6QrJl8co! zT|L7UnsGVgF)B#Gqjx=(Gv9h6mA$xjwab-?pRO3}PR%(n9s!PyxJL}q3pMlEd>bT? zN4;0hUfgrDL|a8FUOu~k`)|yV`<^{mTtUrB3v|BEcvH0uO?>TO$=$Q?sLzT$pIzW3 zRkw52wBy=dQ_06jJD)OLq>Zm|Aa8OK_wJCjRz(m=%h8oA**()~aArBZt9-vtEi#jxrZ#a^l zp8lQAMAcagjb;wMBSOpkI8)IBT^?+^wI2Cd6@#tc(*~`jh96 z_UtgxPJ|CtV-e4-Vvm7nu|EzI`laB!UrSN=I|?#;$kA=CN@o+p@H>&3IM-~XILknU zTq4fra!tkB-QMUmG8M;D@|6L1T(O6}O$VPI=jLDmk)#H zR(KT7I&!iGA6{DEduQtLl$SDYS>Xe*M^$Z>V_lIWLf=FpXPB3A@(C||olxCBFO4~_ zjj^!D8`}BOxkcK-N(Y$I&ROS1Y6Hf&ledpEk6AUe{=^lpr=5GmY30ftoB<7GfB5?f z`3X6uxM4*Nl_+@vIbD9UHd#J%hOA>sjtx)tf^7TCtJBEEn84ViZY~#0K8qEj68#OM>c8|91La9&rwgC6nX zbEX={`w|;A!cJVL7TyBl&9tr~#GSv~7x73TZli&)wd5{mehPM8+Ae)-LI3-cdf2h0 zn(0B_I7K|ngv(=`0d<)c)1ovu{=&2U86kU3a?#+cg4w(upd{kqId6d$+3h$3pE zClw;#wpXk1{lItoMeM=1?L1JPr6_58WhmgCwKCwn}j zoi|U()!H?7#8le(%QpkM4%=ww?ypwMIz1B* zHZB?S5)$OEj^v4Dox3u`Oio!zo*34@D^?DX#}fPeQ_Y;@K^wV$Bi4p1nTJoQDX;op z%||`5dgWp_&tT^}%>S316l1qgqmsU2bc5Yu8*Ns`dO`7ejYx}O&$vJ5(VsF!-~lz% zBUwk>h!FN~;&5peF&INkh1cyUjG`ZY>)2bkw+w^+3F7USzK|Xs4Zy_SJfG2?l5;C> zWaj@rs=hLys&(ty#>4``z- z`~A6`KbLbZD0{AF&1cRr#~dRCTiY3^yJWfHV#`!KtX3fH);dyGhyHx-tucMGEqaE~ z|J1|eM8M@swp*yA4K-0bMW(ww%e%Nge>ZAX-*N4aAT4@sAK6jn!KanB;Bm#8a%M#e?M=nt5Zf@6CdIs?}zBj+S7wQDG3Mrw$}aQ z&$V62K4M`lUDyrQM~C_Exv#~ONNSVw?)%sOl6Y`38T+fTci4VVnDA^*ZBOiP1#$Ic zJ_pY4f;KD>Yq?(%I+pyyTWMlRNi6=%NQPzWnc^|uyF%6y&W$ADxjh6y&-k3=h9YpP zKN?%o^HjZ8iQDUiE!XLFa_XJjy+5^F=mF64b8YE;gd~G zy!k4z(^3mzmJIvqbH##i?w>`_*KJ^osMduu{oViN2P3)j8Uh!@s~ zpPGs%O>1KRAR7#6n1W|^Ezx73BZ@DPmuPxU3ghhCo_ak?)|e>;k7E!`kDvd=H?|Ew zTKY&sEltMRK+Y*$W$Z|u31Uaiqe>_2bVscttV3*TmL^e$WMV7gkcZCd(q_gXWe{=W zp82{A)>olp*)N<))7`J7#U~qLcls{6`rMao6v$e4pGwzo4e{&@V($^1bmt=3L$Bu@ z=g>g6zBTu0jmy8*2n8OE^3F&n*bq|tJXnkBXj3RHnKQ(M^i$qNm)*cg> z8~8paMw#rSssjeeTdc88!PG!^ke>` z59OOSV(Dg2D5Fxb$>g~bVdsiDN9ZroVu9lD%>nzUt!=sMw*2jYEyC#|*|I2Fz50VS zN;LF)8et)In{NX>vlJM-T_AlM<%DsQ*&~l=D3z7^W9FS$+`PM7Ii4GjUiT{Fb)$Ta zmcGfbhmLU`xiF%1@N7r4XPl?r>{M#|%pER_^CFYax~iHe?!WVM%B8y93+Wdym_2pg zTHUVa@rW76S)qT1?&vV?R@#vpaNkW=%>8>~_JG&)p>reGZ2v6IzOB3H)WnS%ZRYQG zL|<2HI6VZ;5EttION?Ya`|uP0%%po_$eU#BWG!LrctR|2NQUPy`pL%c5njB9$1)Eu zJx4ufGiuj)lV9zzMD%it!O!K%7*d`o?tBSH##7dB^CLy8@*qq!O~KuJ4&q0eFK~t4 zH`O5?z4yRfANn^Xau?~U3!LAi;^^C|A|TZPk;Z9QJ-$>4asKZfOv9P-1ZCVwYy8@r zib(u6yaZPF^^{EK(zmHz!> zj~vF?(yLwR`|rd+lte5Ixu&}^$^&N^=R&hJy0D{BFm6pQL0W=t)3G=_WSkqvSm{!l zYOrQJxhs)FbgnMcPIF*C@~@4qc_FoD_?};0T36SZ*x|!$*1#d(#ZjK+-n{>2-nuVd zO=O+Se)-AJGvdZ|@{xZMCkbOtX75|xmiTqeLUEpFd8jHG!eO0wkduf_yz855bH%$g z)c*@jM#sYW!h2^lI5-EGO$ z^nm-^RBU)UPDKB7#$tmsl<5r-V;|aczC$i%i*BNMnGJn)(lG8z6OrO;jqJ1Jeck!0 z?B#jBsH9--qZ3Mg7iXO1@0>bskK%SZ5Z@bU(0RmprNvS5U7J*%4@OlVP}==~1KKjq zcUB(I^_}E|<&5*`aWT5@(Hi;+cZ&n!S;#tdi5_2}U{3cot(ja>R zv54lEMM*4oD;+r-3fwEU9%IcM&U})%N_^HM9z36S=;GPJhB5xNlli%4r1)S$kMZl| z0ROZX^Um;`{$(#SVVsz^hyLE3SkK)ZEY3Zre==)3|L`6nY!7wi?f&z!=^zSA;*cCe z|I@QA#I3!YWgno=Z_TD+TDvez&`&|aJ$-TFWdN?Fq@Z?LJy9jo8%~XwD+23^oquQG z0`EB2;JV^>U1#j-o(8u8^@a4w4!#j-nD5s}eE({VbHsdK+-xRx?3s?Na{7)Nw-X?C z@#0Ae_BeJH{q8wo1aW6^p_mu<;d%k$hkUdYY*aNmXJKEKftx%+LN1?CE`B{}lD>+!gn%KFcC zy=MwrJZW%JUROb#z54XGK3`oa<$nFKcya@d4Nw|sd{A1Gds6#-lr953aB2-} z3GXG!aw`{9>zM|Ftp^ojjRQ8)zkc-oa^+-^Ey_GNlk==4-cPh4myP~6HmyYVI9u2( zW&YXPS-i?~M%O*O>tE}MvZ~ZiNR3Bvr+Lc3JZd`Lsyv5v{4hfJAF)Gc_79uq-%<8A zcjT_Ye>~3lN=BAD_bAz?^lhcooEU|on&ex)Un&P`s8!yPxjNUUpbRChTdT9W zcnY<7*mqz3dr;ksd$BM4iLGTdlyd$i!j0$Iw8v;EaTD{#LH2!B!=yco--4Iy6YnpO zo-uD6?Z`c#PaCC2*f*E^_0x_dhb^AzTaN&BUJjmYDDz@I-+ zApM*giy5_25OE<}@~6H>vN?UBs#;5pe1lQ@a0(u~epB04^+QLbLRIRfx|#2Z;dfGD z{o}Iyu8|x1`_bd$z8`moov{CO8tNMzRQ^%F=-4rOHJSZY)Wl0C5eMz@x1H!%%^vAT z*yDus75fgkpv4AySr+|P>MjpLQ@wbsTb(Q44Nky_f0grdW?^~BgF;8FmJ`X_a91fG zIM2!``B`Y-<3(hkmh zFR^C@ zf@IA$xUnGyI;6lijot)_?eR*Yx6(;^n<`!KIfV6I1@Ym*ojL1Ggl&%$d<}1bFRl0< zP2tbD>%s8{HLp_nGpP@y-Q0;YCD)?CkoD3y6iRTDSB`5^tlytHEM5?Zg!#{2>Zc@ zyN^ljJ?K*%!T5^D(w%AK5UnN#QoR~(+$VSD0`tc9CUEc}Hd&iE@a)crETe}kd%}w| zhLDdy4~-=}tC?ew&ECR+y@p#=6EqX_bL&m+ceW{NGWQ1({|R0=9^*@?H#3KRS1$(O znoTq=>>-EN)&NGAL*Y;@6?<$RNbRQwpieaSAljx%3(n4jZ!PYlg$1kEw|7UEm8>hA zn<-NdxZpwibXc|BuUuZ|gfUa;M_rq`)^8k9`$QTR3>e3~11ESIrJ`bso3N=l11IyC z2e%lAAnG%G{vAs{m}BZO#B+Kys66jpl<}Zs<0(h<+eU2tp`v=z$r-1}duxU@>itR7 z2C+$GFQAr2-;0LVZ}RF_B}oBWIJ0ZR`Ss>C(xY$W`3@#erdTH(r}lFn;u~|eJ(hOG zG7mA%Mg42wm_-u4uVw9L(;PkTvNq%0H)ddOtYpnrr73%gXu#n(dqDpC58e-nE$D4h zm<;b;-bhoWUy2Kl+5Ro4D(yYzj?QP&uzveH`G>tL zN-WZ0H)_9fGS?a3mZejZrG>B_?~F$S(vd&ZMr>{6g4c!IC2W=`?saj;`x4GIeEJH9 zHr%1+j@9?Br_^&=Qj@Y_<@$NchleHGZa8B3`b7NeTCUQUoYBUbx&}S>sPi{^!eMM8 zobOuF+b$Zt$=&^3Wr3tU8ILU1vh(BjNdKCX|JI-Vu=j1LE%gJ=F+VRjTLnirA8}w$ zvi+AKlC3!_E?}Go^g-VnoF(2Pm&SZ7UQJ<5!JfKR14o?P%-!ffdgS#FN7g6yhRhW$ zk&auu(amov2kBR<228?y&^Ip)D~eO4lZQPpRZUOt#+^&P1-s$di*yW@ zG|H%zu9y;+0iQ3=m6lCrV9o3dSRU<8y<$)N%SeaqW@qun(+8s+nM2Hbi=u)sge1k` z1Xk_`y;naeY5Ld^PgZcAUjLtJx{Wi2j%T0T=eRoLyeG2zlVfmvrnI*s zwVI#Nd%DMJsTy}fLJa7``}DXpNlm@mKID^xeUM(0TicU8o8cXONcq&*W1KC{cVj=v z88~~BAU$JzWzL9r!WzTh0p~`rCSpDDx-b&{v*^#uStm|s;VSnJmX;@@;liazyFq-3 zx#O|ddNkZezfJZUWfp~4P@TB433q`bcfer)HI?^~6I^dI?)-^^8~eC(O_t$XWF)+- z(hx8r20c0FpT8yzH-m;^Su0-@w@$~rwb!JdZ#*zrPDfeFAN9p(dZW<$JEm(xCEwMR zJL2TiuPagxwVHvjgiKiXY#_=MPyE(ppl0+$(P%68Rk@!s@Nyra{0T#PG4p9nt=fQG z!O#Ac<809Qb&1J)M|@{p_w-;rbwsc;>I~(6&7o^*i?5#0wr1bmFGiX@IR+EUh#l|P zD)psKrxEM3?KU^0qaM`K@5!B@Wz`U{iX4oo+>cw{8s2-kufsUE?=uXg>=9kJvVNXm zNgprP-LI1H^;R%Cbz$GfUN2#CCbC$sJzv0nr0p`iUz7}AVwlRajWA%XQ9nEd54!Ki zk^siMN-9!{kD!p4Q@5q5cs~6U&J3ZhZL2hN8h;#P-QzJRI}PjZ?8j^Jz2(yyJs5vDA>BDlR=q_$3uR)IHT#ahE&IP77GNHe5 zxH3z);mvIB_R4$1al44`g5G2bm2S&mC(`Cw)K2b7{5iZH-W;aB$Ry_Cyl%)po`?kIXDl3xhm7;FZJe!Gx+Cxq>&)YUoJ&r}@(&9B%@2Xa%XIS3 z^N`WR4>Qa%V7t%_%b5o(A7>zVf*!72cg2AfnK+W~Aay$B45RQYoXvWm3SH)k+2OO0 zR_CgmKEe~urL!>Y>~1B>$PZ5TnXqlxO)Q|s!bjG_y0ES)Qv>=kQ4{QcaioL2tIFf+ zIpIz!_vmN0R9|23jN$ygu#T_Py{38L7(YY%j4Y{RehjXiU|nq>ON%|IWyl_H(yw=t z-EJ)ovzFEcG{KNN^u-#Vgwr$oBmV~b^)T+i1(?E-an@rW*fc4a?*r?OkL2o`%;GL6 z^9gaG^+#8rlz7Jet;9eLcA|e*a#A{^;J~#btl5d{bC%RL=>|My<{RdUy8~Zh!q6m` z)Mt-;=NmRqpJwyfG}yKLgSr)QaOZB)QSDb8Am@3ceg=|8KE%C<5Ijl9K=Jm&@Hyy< zw&eOWIy4s*lRS8jXX5DBVd&Px1%bOWamaGL^o=|^_aRwGZZ@doL$m`HEX^XH^q8^; zPV^zk#PH=7!sxOauHH#Qtz=0o85x9~yuVsyo0s&P$^1IJa-VXxOe;Tdm`tmaW?w-tMu_U{g2ub z-)P$$i+@tHWHfnM+MyWuJQ3G|Ig9FOgDK3<*O@o`n#SVtI_`FV=FGL{d>Gy$Zp6EA z>79J+eZv}%+{cAW4`AL4et+K-wD@@ri}n&P(WT(@`bV%~PhUMS6@TA-$MS{5x<;m< ztz5&n;e6^>HBCokbRFaLDRIF4bQsO8ZM=jUFYV@M;9A=%#!sm8@VH?nzKyw$M`L~Q z!X^{X;&xzwgF8G^G75@Oeijdh~cCl@sTm#IKub+~t{Z)`&F9#O+B{#eiov zI745^&yS{wlHJb8$w|Yilu@FsPXMYpbMLJBSb4f{G@esG=zq`iyCg$-SPv&yg;T$@ zv!Pm7#=4GY_*v*XwbyPhc%A0gowB8p+OfE|D-lsMj!NT%1{Z#lZ=n4lZLdyEyB6fX zwP=apmc+2xvs85$0jnR0cJUG{UU4QCa*E%9etD1QV~9)s_}U00Nr*@!^+k5 zjO#DdV4ErZF;klu-*KXc%b*OzcQY`q|26_jMF#fl*Ee2DZ9Tu`nK=ErigDeeKA8WR zyG$c);!*hwOly~gnK#yB82gBale6%*hZQ2~+G6&UEDUxilosutjw*K<=jC;jX64p6 z`X&Qaq#D9|oD(`UW9`wluc${JPF>ctuSZRhGwTOo=-E9Sbx09!E4rfciDTlYP^|q z3-;@*Cu%NN;1S9*KOzOYt!^NyCI4*BK1%f7!*ww4XZjq^>{i1#^%yj8!)Nai{$MiPFF*n1})+`gAZCV+(86Sk0Uzu24-q3jcac{hLVorGY zhrVlW=#iC$J!O~C@stB@@5zGxf;G%P)>v4ag`nZ4=$&GP1}0f>vENI3_30>>k%{&* zKg#io9I$<4I`gu=@Q?IGvkG$8Ciauf4|?MA-^%A%E*~PB4kW+VJrVsYau&v4Q8NN4+#@M^r5H2WPe62c?(XfjY|?4?%Aw2Wq%FHXxqgzA63V$vGX! z8Efl7FlIe6%8j-1MJv2>;?DOf#H7M6b{2HDsOecUrKs_QFhk!*)k zl ztxh^I6X&w&Z&fQ&x<_4w6~upsH7b-sP)f-LNXS8Qe*mh(Fs#j0N`a!(^dgkG;O)5I9=G>%k zCzKrGm+i2Oh+ z8lNTZw9t?D-GNrdaX%9=t4AhAc5P#v;1Y*W>MWe?)xx;IKO7;BnRxlKiSfmt0CaK4 zg!_;B#uX2^D-o25lYMI$JDR(p8uxI9Z2Cp)$q6-C@BOiSOkBVTW}nh=Y;S;PpNgQ-^a$^7t;Oh|OCxPeb!N$1tfAYr3xK#JX={#Z}Jq zhGn2#kLTQ7PDPy|nJAn00WM29d%2T|UIRX0bQ;g)^-Q#y@dkeq>2*?&iMzdD;$U_J zo+M?Wpu=;BT=q4?nR5!CqmuQ z^;+uKJFQfW+vkfK^D6TsJ7+{t-*VF9s%pK9UZ}yCo+>!2 zp8qBmrJ6)MPiQKwVm-dKgcyhoq~3ekUq9up*2N$xh*;5j=8K!17D_)^uWe+mZuF;6 z+Q#1QwjbvX&CW_4$*XFzmHXFAUQ0zcQ?TzFd0kWWFnJ_>aXBmT?A8i>(^Fy0o^WVL zKctqXqRTYy?u{P@|Ievd@i7Iz&N#xZT^a(}Q-A3hiQ8k+5L1$d{+%*$j=078o75q3 z%Yl5J^Qd2iX%r+-8=}}xtqE+_yPJm1>yoZHk~gXL_K<)JlY(G za|_B zryqeu4{A7s`KpH*$6>l7`|7_d)u-xcFe`wZ-d88pd$wp1JfAz;wZEwsG@~!^QJ(X% zrc(M4?y~bHUi9ZYS4D>RjJn}3Y+OThF zlq+d8#OK&2u1ee{{W?j%;<4!SSlAf9>t+{6_nMx9xMA0#Iyc1uZK40)8pSqC0ISn}Zvd4;!_=VzQQdHs)b_$Ayy zn{>M5$qjNAs3(x|E3>4L#9ICx?}NUdjHdE^EJqroMOo@ad`}bWrlIo{W9cTjrf*{T z{FYvnzEugv$YS0rbAbFIzHr}3-l@q_RKMZLnQtQM%r3>LJ)Y>~$(>ByaxAzIga;>m zQ03xF)o4F0wnbL<@17p8PA)Q}&Od9i^!+2`a(c4l$8#34w}bpL%?=q~m?PqCWo5rV z?;U!){?3y3-wDN$h4dULEs&dS3dd^B4}Km#CU>@oL=(pZ-cc`P^@S*0w4}ae``XIz zkukh?m=mwGRdyuD;zxJ_Hbe|n49LxEu$mrEP0W-E@)LftCmMdzPbuSm@fl()J+0D| zei_uxFHD4g&|)Rff;$R~_0ZiLl(FntFK~wbZJ1X7xCD9YNi!k zRwnZu-Q1n}L4KE%CR?fhN{o8h_QOh*P4op`!Fxi^Q114PLh#rW{OFb^C)c8W?~P=9 z9c(Y%zvYh+#1A`fY=glAy>XbmRd#FU@d9E#=F}$D7GYlVnOL}-cz3U5Q1%DGdDKkk zo4--*{jR})xek@i^UTOKa%5|BR8uG7=f`QXzOyAFlIb5k&q_YxYKNrXTA1W+mv^R< z@6I^yUHMWD+8K&$=Ix&68!8>+!_kkse~UZ!Q;NDp;u&M{s@P01+!O`V2?;RGh*0V` zkHJ;W7@W=LDSf=j8FS%t(JxSZbK~$Rg?<)u4=crcsh!WdZOxNwO5_gu{M02+xWxy> zco}QR2=310)Dr*wJ^#Ju8;%-^P+~Cd?7y7ab`?W+Fjrk>E(#kc+@i=2Vy&1PIYK<1 z#@z(sP}Rl{6OoNHu+Wj4bgZkGur3Dw*n65+sV*K+*KWyd@*Z=SD$gzjqdYnp{i4cM zQYU{n2Pfl<^*yQTXm9uqNk(7>{d|6T;XCj8gxxv#^T-DmN@LJxWhT1h(-)}8Ox$bv zTs4)vdOb(GN^y4Fx>6q9&m0o-#{JvQvJK!gCp#f8cymadah>9 zA4BcXuOmfOe(yi>qw-=+MV)quC?&>Wy=#VeV?mwCdEEC&3>N7*^bNQ|KIHuf@lK{r z@CWV+z4sSQa$}*CF^|Msio~!;tYw|qsQI~u4QJhzrUQ$9s*?Y%wPhs#vxz-nm@q{L!BI+q~`-rS+?5G^TEp zyy=UQJuVj8NAa9jZy2elRN#4XZxp-iKx%>oXi}N z+1*Rb;ombgi`v3rS`qt=eo)Nei_d2XC7;|Ua?b`9%@a4MvAu}>=ji--;vnaBYmB(J zQkpKNk>^wEEOi)u_z7*DFxc~46+c!9J0%b%%u(qv-;}ILzF5Tf!S6-~MH%WvuSGu7 z)Nzun&Kf()ED@tDu+hLSHo>1~Iv1_|gM+DSUZJ;L=L9V5t1qku z#^OLvdfXiCEG~r5OPA+-=-pA`TV6bhJot>XR^k*n^4@vW%S{Lrdx*Q%dda&rFiq^X zW{zjhebr&1I77Zu(jI!NbY4a-I}BByjfGp&|9re>z}9=eYVNRjR9#6-4moWT0G}a>cN>4K;O}7dRjaI- z82W$yH3w2xE1C7eVe3GRk};*ql>OX;8A)yb5ziGpbrha;WIi8WTQoluje_Ppi;?Zb z)K=tsv}BKIJ4~n?nUMBR&rOEu!K$pxap&KNxKPC!)R3bD9n1j>AIyCI;O`f6 zM$Ufb#Jf_1ZnL*YTYfsBU)31cS`Wupdp8{I7KEd1M|0mG5dQmIx%;_76-8a9wRfy4 z#ku3w*>bpv^x~4$2#uj^o~SuSNfk8=84}8xCb;sgV{^xi)CK| zFy$`i$HP*@o^HOl&)J)=%0(Re>xrW-^oShYM;yH3h6eXEyc2IJhhI3s=&T0q6PhVi zH#y*9>v;5dJ4m{5+X2Zw^!dwZfO)T6@b7p4t}bW?B_R;s>XQ?>Gg76piG#(o%5e_M zPLn^Hm}4RDl9Nc0PYkof+pUaMuTr_}wJqBB=Y14ps$72ThZC#~+SSfc8Z-_i&o%+N z3Hz1I%k+&U&aTwFuM|_KT94nqZDS3wre+j6H{pF>w~eq*i-u)Y=7-@!MUR&;>=Egu zGQeE84PgGP#&iBQK-Be$M?7OSUP%|ZQS`;&9qQP5iCD({h!mdB+ScntR6gr%JLZ8- zn?>QuIL!M*Zw1vRVe>Q!OWM*;jba2*;C zJynMI&&wuTLvN;L!Q!cKM_u+>pZ<*%>zt`e;Le={4}H;fi32r>H8^IoT4^6jf5tj- zSdaCGU);BYetY`k4&E=lIqHm%Oa91w_Et)r5{ShcT+qX!pGtlni#OjaE1lbBXP5r=6$?~K=mM|+~o~(63zH!YKsu8^7&ePx@hOdIE}j<|^)AL-33-cfTqt zBld=&5$oi(`p=b3)VSWroNW5Oj>vvVAF+A~)YtAL&iIj&@SS}~XO+m{yddwL7OuZ+ zMMAqcTqY-=XMUt;M85hHK8q3Av&Ei3`oy*;R=p!vtj^WoC-X&MP`)@cg?>u+wZuU- zi0&lIWJ=22E)^rkr&Z-@iLz&ewRn`7&7SZ)b-n?|9sI_@M-Ju))^W zvFK#zs)pP&a_#V5;Xm@u|JHpXJEptou{LK@eF2;$rmhrg#hCbBCv&Gi|>{EWx527qr7!}4N{3?B@lh=qr39(pcL%+z3 z)nc?J63#)4?TzJPrCun~>1nm2*)owZF%V;q#^LGDC8BjBKbR%P!Kc+y5qWGT#+Ag8 zXTC`IKXyk>C%!*h=ZJ-ET(B>bo=wGxqDrbglEvF*`ui?ZkF;LUwulRvc(nySr6;ic2#od=Q3;#&*#w9$}jS%G>mhrddHQh zxG?Itu*UFvudMDGfsw2$Yzp7dppU2^B=^`;Q%pVN{sJ-!Fsc4hJy-2q>ELxc-3OjH%w2?Zw zdMm`-5;yGrL;YNJu2^~85n&VJvA=(g(BllHbO7rfpG+~*)r#zqIFvsK62n;QUcD5J z=w*_4u1rTlyKsCkx~=%_c7%hD`q#Zmry2~A;~JP_ z1>-E5n#zf{>668~=EctfdCfpu+#1h1)nFk7YA4sxfy;AI%e=tUNH=guBX9 zmWY*IU178>mNSVwF~-dSeVKb_zgQ{EuUJE47>93zR)~08OLUzQi($HA#-Qo2-pcyB`4BNlO zH;nVfTb<-jS1mA`aUOpwRUX*c7DbG6Tz>;)ftxRPKFA&aVyXP|48}hXdgo0}Rr2nH zU}p#Jscu@MSg7fV%$%UNR#A?ohQpn;*TvBf6-#qxWYJ5JZR;Cf0nVRJ8X^! zsOpN#N-TEuT_)z5I-o=UIGh=tFFKvJMzLiaGNQH!?G$2bt7EajWs5Kjv%u8QXbf{( zB}TWK4!w@y+=mPo6I~qHNBX1n=x53v?#-QccZHw*Wc8hWF?eBGInKVFPnQ_hHb*Do z&#CrbN;Y4xz-GpI<$x)2yrC`P8Rzz^pUPV#U(}DL&Qk5p$`CdAuI>rQOqimy+!BHX ztg)+Ck5al;3u9fxdiP3>0x6u{YwRD66e>L;BXFH{>BqOHl(9=Ap{0*iO!#x9?po?3 zSJR^F=o(^sUNk)BcC=9xb+jXt~{y@jY2iCK*E#NK_x&wC-* z%sfzWs;@}h7(gG$SdQWGu~TVp4PftB z=H&DAjNh9hzIS!N4zoDoUmHZP&DNMRD-N4)?G-0`ao3eto}WpHxINVZ9nVH%sMUUv z`_2mcW{2Z!^QGdhp(Ey>@Wk^pP&XpxF>_euIQPhmFWFhs9A=F3 zq#c_})}OYZ-Vb?26^-S{+O`^8$6)K=I=0!S{Y#T6az$JbPp}2Ufirql%lZl zs|KwnlqyI2M&lcE#jEjml`qt~f3Q-6A88+zXM^~@j?o}-dKIzZ9sM8ksZrjbx_I>_ z1V-DLdpFe*RTc!0U%>w7Xd}_EiZ43!ip9&ZUBrhAUP#yD*YC%O+jHINe-exHNq%B` zD!GU^s8d{JuCV-IkJUbLC~?~;hHI=*dtV&1+KS_LG9yb z#nN?F*#Df|BlJO6Gz-9(_S$jKM*1 zPweD5-7qWy^>-Z?)&>qpqL;=Hdv6i{-5Xy%xx#Gc9q_xj=kRcy7E(EfcwMABX@=T?P3rVrv&U?>Md{T6oP5& z>87X7md)Kl@rU)pt*h&0)5I_Y&!e7ug^-&s4@asw??ICX@&w{8(S}+qZc$a4kilI) z_FrGG8z@e0QAlU5&~@*vL^p`0R)Gd@H;q<~Y-Dcfqd~P~8)fz;a`kiR`FP4#$@&n2 zA$xiDd{dR@HUaoV{7hN7S}|MZ!(9W;=Eq)83PzIWQxSs+|LTcHuV%o?Di%dsC2{b+ zGg>^M*4n}Z(a6dk8QIiuv{)~4Ur)!YpK&m}ctXVZSYXQPIGji=7cFL(V+?DE!jW&p z=py!U%!40a-x4j&>=DU+utEDwQ9$nce4gjni>FlgBk9+$%c4@Bvin>|l_h;1PchCh zCWc1+ODs^qIBPHZ9`<``gYArSLVkS7D$WXyhB3AqHk2&c83Z+P`<)p|$&a7Gc+iCW zNU5wOt3SO3&ufvp_;1NP`b1J)?zb;Yp)1{V-HeJLX_+b=3oUqTL(Ix}seNRg+rugssW_w`;>x zo9{>9+bQ;YbD-K(5Q$Ye?3b4gR;``D9OB9z#O#UDi#pt;qTgTh8lw(xG@{Qe@up#! z`$`TU4nYC6PVVjrm$z0Az!72`*`L13Hm!W%U`T9uu)DHpnJ0SEtF&LPP2G(2-GLFm~Qq{^?|dk+e!2!_|Z(g>JG6ciQc;-2C3(ihGSO+eK7Bs zs2g%;XNMp*_ugCG&4l_SoI@mkN>E>a#u>JS28Y+Dst+8X_j+yepF%>^ZGVO1NMbx1 zf9$3<$qvCF>cY40UehS_tUnHJr>>|;sQmk~H`EPc;d`u;GG??Vs=tWA>kq3H?HxDB z6M2Sb>WMWvCv<-mi*F_LhHGtyCHZlvuU#bUHd^6g_jpV{trM9o%~9|=4(X=PMVlL@ z7@{AG*t~xta;`b{pW@DK&p)E|U2Ejs4#2nd#o}{?Gmh)IVt144is=9^q^&irbe><< zuTZuBWri_~bLPSfRsY@0ON{fC+g48?PS8uE`#VxJEo>L9EiZ z5jnIYV$ovl10{{T`WcVOcWgCCG#z1!RQ5ZWWl18B-t-@cd%UWk7pI{aj9QiJ{GqH$bjGxfmE-(i zbszQU@BCTDSwE&gWwgx#3;xT`vy4>QVjF;QHtD{`$jr_MR*duHqH{(SJ%X^_nt3~^ zscN4^FwWE=KEHUJsx5u)^mLqm=wem1tU~GStHtp0T-9(@7-kG$PCm0w^|fv|a$akI zBUeUw&(}UhmgAK#0s!x?iAgiASUy7=!>l}>0!zaXk>poOj&?kME zOFSBd1griO1jC4R!gj4yiRBePNONOhv(aBJqmJdM*D+{YT~FE6%mZgm#o)5HMrpa$ zm3!pmIs{!+uEaQETv;sk)#)robB_0({d?_rAF;8UB?cJ~$MeV&E7DBy=u#X$$H`*s za1-2rPhRqmo1!mu0#9X7W3KLfflgMqYeqiqssd5g#UA(Tx{wQ*Lr$p!-ug|ebe``% zh5GMTGhAhyMdW(b_RSVJ%s4O4`fN0dJLCVI=ZlA{l^mYngV#aq2jiSdGMfhBJu&A8 z|I$l33=hUi?hQtdSX&Y^CImwjE$$o3C9OFNs1u<@!zcGjig_pA?xRJ$h^n&TjWCoy zW3JfJOg@+%j?8@aDaHNepmxmF#C~sc+mlSR=i3k)Q_bb@{v2OpZ?F8K$|=d2R< z)=h(EH#wMYMIyS1DQfj0E*Z2>=*_XjLi$o{2@esUSbI!yc1GO9;nKRn_Lw_+YNa?& z(3-2yelbHWw?u^2TBfqxXo07UbJ~`%qoi#%FlC$z{2r8?8OFMlarPS9U#?e$eqoIB zUu$RiO}k*^>#-ly&ys(1p+|fP@!|Rfa(L}fTnJ^%-yV^NKMlp%o?5t9e=48Y5QfK( zH27;(Q)z9=8SX0XdG>3iEVv&IV<-C1*bP(?r}8|vC3bXdlG3a$HCiunuIc2c)EgB> zKlFIKA3Rg(vz@xEesR!u3{V=M@x@ZVSaf`*RqhviVL1CS`)do78I9fHS`>pjBX=m6 zIMBX&i2N&5>@2mGg&h+Q(_`C+EQX4DEEpfHDtXUw6cvfp)4_9h3ZvEMVYlUtyS=->w{?g}0}vqhQQ!Usbd6C<I({ftnyEZ7lsvi6;(f}7 zU2bS$LZ6Axn-%@jjyPQsiQeiw#dat42OJ{d(Py^O;EDz8enwzHLXaXaFhS?p5omC5 zfbzN8G|ZY7hAOpVXWi^KxOvOuXV5PHS9MDOu_bQ{qMU+}kM+Hu=EDfb+aAP==jg%vmRod+MQF ze&UA#DH_ySo1p~PrVkqDn+HCwQabhH+^4>VYeU7#dy63aD&y>A&=sXsSrB%wi^NP~d4NvoHRL%De*SwtLmRrAd(d63NS}ueSd^8Clm7@Yd(0(G|WUr#LI|jF>F9t?7&e;`zsZ z9hI$zdm+x4bJ%u&WuJ*N;s1ei`Dg7EH*;@lg|mKcJVudheBkAvMYA@(ileVD8n)1) z=G58BHLV}!+|^+I!hGdujz1P{)IgSHWmO@)edD28+y5Ggf%AOHRfxeZ%*U(t*H@*#J)3)j54h~;}) zBQ_EZu0B;HkD0_F!%@@RQL!Z-NnJk-ZfUKgk@Pgb&l<}~dsa$3$vjpq2vxfoO1F*@r;uDODnS4g67NU^>@91jm**8rWHGBiG zJ(=^VUXJ2TJh`21{fS4o8#!-B7d(^26TN(P(FOPY&XKTt|9Fwl4gk-nxYM(N6Bed`gid zg?iF_2LIc4f4+A}orj5dkd_D+>$>V3`^mUdD-llRlZ>9dnueHM?v&Whk)L{U=Y?O- z+E7E8C_JexM$Sx3FQv2Wg=swV)q<^*=B%kUH%)+B-6ZAVK5x9ZOJ%#*TqSy^4?b_v z;=uGhO20k6$YuXB^6@3bX}2Ge?dW+B@lgrdO^-h#EnE-R71_H2=#{NS$hLOkQ!%}> z+h|du8zQbLLGb0*;q^^K!~MZ{#=9Ub(Nio|hoC>}nb8%|BA$GeH!ZcW3pZ0v!oe0A=v5?gT#V;()?B2 z-Dz5xXa26YtiCmQB7Ty$9Jjc(`m5<=Txm-$536~jx}Tp$4RY>4o>?hxFm}Rye%zPWOFh(bGW>^-Tjk#W(5~WXu)E70qV9$AzD`bPbC0|$r;f_d zWX|PplY6k#MCt3!UCzy%6+Y4^hGsMID=q<5pD$B#$Ys@$JG#(!kJ71$4=Va{&N%$C zVq47@;SK3Kzxbna^QA8=$v0T#RaZ>COuy7;0HBaoIhoA|$AGHor8@5g;;6=X2 zwyolL&rk$rB_N8Z{mE0kKGj#65*Y&9EY6gFJ(VVfB;tGb z%6rGxrj)7|ES-q;O#(dv+!Xm}u-K{*N=s`n>PcG%=KzXXH$N_6{pW zkYOM!(^=;<-Y;g+lUmxtnzQj$vHn&NiayX+FZ;7F*~gfV<{r)Cdb+f%5M*pjq;6gv z-M-GDXn2G=um)9hk3Bu4!n|bxw}?m zK^*7*{`vp>x_|4As+;Ych|T=FjNLnkP4HbZ@zv{q7`p ze|lQ#;%|9lA@9_vC1yI0dERiiN==Cd=DN9s-q?77Iuh?Jb$KtnaqtrPwC8Pg^~U*N z^BwNI`MKzx9pKk*5^?dhr>^}-Uqo@QR)D(s2v#Q+IG zx*O@vLn?}(hzVkMVH0PseGmghMekLy8@s!|>HYol`rR?!@$TVJIOo}GJvpB_eH7ga zZl0EjywMAhj&(%6cf+ck2?S(nk%2i1feZ$Xy#o< z*<3dWf&BYD20f!zZvaNm;?85o3UP}5d0zqd!fvh-I>bWv8b|!|)UiUFpa0nh?*BhZ zlb3R4>NYwFuAACPS#<(YhZy+lhKEt&KwXlAKkZzicfwFnPsO2<1oXR@rOb+$3!Qi5 z`%0(=@yLGymsqaFEkrO;0|5zsdcnOGT^L9VN$TpLds)w~IUwP(-Y_lScVD&lA?W$&2!FkCI^J zg>T$R?)h!45?wvumvi!|N4OQO(_hs#Cd&VTcXR z)*}y0))I}^O$)r|KJcDai!{enb1|!-3Q@6+n(9$5*xHUfp9NzyBZ&Dm;h&eB*U}W9 zb;ZDM)IE9HM6)r=4Y{xB$5wq*>d$fKt`j+pTisNK4JHpK-^<+HCzWr^1E=u4#Je6+ zM&9wnGQOA6@XbmX4-Gd^t8|!!^2yI116GmeJjzHpAHcKC?|$dW5XIJ(d&k6$zwOvnF(qz)R0g^D zYByDKSbM%%OYZ5%??i;|JaphrOT_roB5j8+9&=~x`uvr`=cpGoRg*(yYw^m`whK<`?@K-47-2H~YN*>o=m?RT^slGZmjN5chQ_ zUuiqp7JXas>=or`_Ul?A_aAaeS!Qb9SrFV~@Q#Ipw~7Qx?^A$G8UMR*k=>^x+IT=ojtQ<*ZUh{P5w= zJhz%+r8>|PjoxxEYyS>qxv>|TKO@JWbDjcXJMZ47OR{D&W&$mCM!F+nNnLQO!vmyX_pm0-@2(zlcMqhm*b}R$%(kf`c28ba;;R%rS44J67J@`r5>xLH}YJ$>lHdzOsw!k z_X*s)>orhxKjw`&3z9L|Y`)xjO(6VMlY6s#xRLZJ3|RyI-0zMFJ#VOAJ(Zlnj2#x+ z6pJUe5MAkK*5_zyf8oyfUHXJAb2M6xE;vkIVGz|f37KL2qu zwqBGdO8t1|8&PlCHA6l@j?MhH8I?2j#?UeW)=LBe>jgwYjM9%?6a zj|RbxzqfGBU~!C?J-IdcH9k)irzeMCsup9@4SVsuZ76OJ;eJGD6uA&XQEbS27rsz5 z*%5|IrsNnLvPLZN4ktG`cO{PO6fGJ?U;zF3UkysdN2>_(43m4a&1qrVI)Zy}+v5%lMF4TmYDMm&kqr>Wz(oBmf5-pwXMKXK=> zBjeGtNAd;!zcuZnUeQE&eTs)J<9p?}Ug8~RT$6RFp*fKIP~5ZI!#ttwDihI-c$xUg zl-{=C4)@xmPUWXv1qwwhNsmvDnAB zS+VetD9??-@om&=7+fa&+sEJ+eTb|+E9_@bW12okzuy(nvk7?x8>!&Y?53zk?3tyR z3YMDN;vTq zkb#bD#Vq6clP3RrF-v;50G7|8t(_-u@(~c3gsIjC~e?F5EJiDdBekONwIwXq$+1!Jl!*^6PUsO`#y9;f2^U7k;$C|p3zQ6N< zT(LWq`oocQ+OZjEQ%j zm5Lc7*nj;UH}@PDn}{)gcb4z^^jRUzj7Hxlb z#cTsYd9TNezA9GqUx`^ish?h?5ye}xF`3WNZwf`pXH2qJPjcdii!7&KEORU=J4Ps_=G)$SFJ51jy zoQb8MbtwU57P~}s*0V%|jROU0Cn zi!XySF4a~+O+OWgL7ouevbvF6z5pqdrH<^ziw6kb>Oz1?= z&U|)%dQhxNOU4L3KmN2`w5v@{aXyz_eA{@h8@(ylUDI7WLQ;#P%%lr-E=BXgO z+Cn{-0fhqJ{jqg6H55LSiPvYnv5)={PtJ)C;U4gBl8oI6ijb<^(BSW6e5-a9eWrT? z-&8=p1K!;Bg%x`y|9hTaEc90zpUTGAR|!~iZo6XHU=PxHeon7fDNoev5zo&S8*EB# z%@x>1o7c)5s?`508)dXZl1n>fof*0LXdk!m+Da997wXf7^>ZJJ{p5`7%QHWE#yPRW zA^E>|>Ks=hYTZ=9hVS=Qhh3sKbE`Xij7yQ$+ne)SctA#y3`E)%^B<-NeWjoLTX6 zZhGM)Zj(>4od34Gzl(T7eyWSiUHxwRiZ`=Eku;Whpsq@MoF9beOUawMW|`=Gm~)3A z85$O@$DELK05etrvYJ;koaLhR$29CEg!;(h^H$r0_3u&>74<3Vw%m`_Z{h(`Q5y+edQ z_Zxokc}9u7h^Gen%*K4aZY=8ekH!=Jxkuhuv5s@^4}3NY7%C!bo zO`qA{vX^lF9)=(7*t-}xP+TQGDuB7)$MfUGa-ASFRq_4K3KETG`XiRH^2@5#Lj9aG zniDFRFD@0mjNNf6jCV5jjF^z%ijUkG|CPEy)cNTF*V^Qs9Z)7u=5Cj#^Ph3>VPc6= zay%Pb=^qESudCS+x*JCHV+C`LDIEr_$0FLfOaE2M#4#&SN!zxY9;x_LWFeonefwjk zGM{>;Pifm2d8iT*OTHG`Hehx;#qvW69BI#2p})kKmgJtKJ*PU}6gs&oOl&~ym5quB zWZX-k9by}86G3$nP^T&Fuw$u+O5yHQbLQci1hLCB7VUZVYFj#p-Ol8uV{W6KX(aMC z6O%<-sRs5F`Ax{d!q|N}u(>#67lld8b>=UACok}egaw~tN-oRV{UXr3Gr6#wD`XWh z*c*CLU!?0LxfwB*Zza}Z6Y7hzJBUA_o%_u)5JL|8q3SDtzI(d(I=~A7TT~c)^ME*G z>V^k~Ot_`{<8|eqI_Yt@Zz|ns=dbi>CiS{# zqKE8e&d%KU-}{Q^opl&SJKr8xsQmn~9PMaZ*YL$kqorAxP21k+>Z7CTUJ2Cxs{He8P69!GsW)=FC^ z%bkhSR?Xm@+LR{;ybVA--Z2yB=3+;sFKT{}52wgqG-~AuH*yM1Td-R+`Q(E5KIHCx zaar8;cBWnsbCPQnBBYSD?J(x;b2Z{-`+4|5ZngjQ&$c~kX=;~eQ}2xN<;pP4jr+TB z_6B`&<2ss8x$6-9mN`a?3gvLwa&(~&tWI60bhr7xd>eO?l>TWMI8>WE>8{pFX!mqf z*ClTkx%!u_CD#aTdwpa_B}Y&bhPG|J=Z8p}$y}9Z)o#+iqV-^&Bi199k^6)$=QBfj zCY>8E5fgjHVH9hIKh;xi&BMw?lCjy_q8p*+K6*;k^;{<2DbJbHXFhlsWLxQ^h5B z-iO1ReUb+an@dis!VpaRXV*`Zc6H;<1>@a}w0vpjfMAsIXO?uCFKv|q&~hZ>;Gn&R zZw!4AHJdzIP1EH079MD}mRv*SM&dz;GfsCS$M@WA;`=vy{8*;KEAM-vBE|tN!c};Z z@KC&`ZwYHct@CbBJeLK)bnu`3y05#2Ypjd2aqKp8+8v>qh7EV2=6nLMNl&93C_o?P zd($HuYWB2P&iBJ!asNxo`F)FVjCSr5_t# zJj0F5{!$uGrLH*rgMLnX<;ETIuhQQZ)qgDlm+^P9-fVq_ah&^w>*+rmZp{*JI4>>c zxy>$|CAvn$pp3TNQMZxE56aT$y;qSPFO}dVnuNxmdxKM>K52>XPjL3r>_e0{th@Xi24ELw?z}~ z_dh!y99*Lejad9&yc?!DqI5m90PE;0@}@0Qmf59YAN{a)NT4!+TtquskSnlq zg0g{Jbf@{f%*wkdQKj^M^bdz`eP$lZ8BSl?=dL0yaM$qIP~QC|St8Abv5)t?qvX0MG0uQF;kk`$p?D&tg}w08}54Ij&SCe4$~53 zO{p_dma{(=t1EED9((y7%ik{-@W=|*mf~eKP3n4$_U^72V zDU1muulk?!L8p3iG-GyVW9793YLI7Zd;)jk1bhBgvZ>}-rvex=uddZuOH-1Q`(HjR zz4)kv7%s+Vo`G=ta^-Hq0&L+KI9;BvY#N+~k<87;X2vU>$%l4{ez+IATw)%X*0McZD8-zd2U5bI8# z=6ha|Y&XxtxmDDY^4Tse`Qd}wb=gl?Yb9+Zj`ulnDUbhdZ&-JsE4B^euFXPsxzSrk z4CQ=*(R(>*1FS#;D?Q_6V z?mN#Me^%bx!w!F^5ewu_-TCh}m~xr9?u~eHyS)RR@;<5zbH#=S#JT+>e*4T)rP+)i zRJaEG5eKJcMrwjDW@9~LU)qr^nz*MsP+rQJ>9_z*+Jd!M#k{(Q)(Fk&9=SM7J5N2{ zRFil<6EA3IpW`=_n$8Ol$@}=U;XdVSWhy$*SHxE=Qe1tK(Tll6WrCAZu$5f;?8B$( z=qcf*^os*HAMDpy(Ob?OgSnQ8!#VN#Of2rxuP(ZoE7r58c#U@6lWHR3gCenmXZ!A$ z+QOS0Zg+U*GY$pF7j;6>i|6*&9F*#}4MqdL>(UL)r2U-J)hZy)N17-NxJWJm&cVlC z>?iHy93+r<27Q+r!^jbCSgsp~zcOtMJG6JkU*tsS^v~kbjA;&7%iRs%=?~RX<`Da$2Ao@MSW~FEwRZ;`k0ku&gV4;Jx)vtPtMl(j8qX)o{lm(@;3tYL^a#BI`+-E}P>b1$!VQx`eT!4%Uka<}@Q zrLvv*Ec{(gj(43h`Dbqv&X^M5RKJsWan2n3?BmgXOrF?!(Gd?va-VD57NrMu9;-Qz z|KI$1+o>GQ)v+1qNITbFSFRbAzJWSO-1T0XsWEPni!|oanLR8ue~rw9hUeLCXg^Kb zgH*)P&bmYDXq>dE;X^wo)jzLH-W!8AwDZ|Eo0Zph!f}^&t{R@KtehEwtX}L5b~jPF zJqy8yA@t$*dMRhQv4p%WZb9gjU z=!K9cfHq%Y*;u^!I~ZT+e}eXJlBX{rPJ=n*gP4(W$!dQTmN2d@yPA zwEjHLtz*_{jE$4gf_AP_UDo(-U5$+0379c%wPxp%g~&LWfVF!(G~O-A7yh07;l_HJ z1Z!djY3J8+V@+vUFxv4u?wnn%beTpCEXKZOEq5vPW-&+Yl!!wY7ARvZL$JL!&wP7( z#cWB_#~oX~X+I&6E%N;pF5bhosvr(RN@sZvV~qxMQzaX+iE5+WhAB zbfHNOMMp#O`&Su@ro=~Fr_FPMT8l0XgAvR3=%9B-9!X45R&B<h+{+WCFkN17u|bI^MSbByv$nlDYMrF?)~WQD<+R+l1in7Opygi)H; z?g8k@STkvLGtDbiAh~%GQQhyB5?BxfbLPpGdi#|z`+`x*zRiyb*~-~tA$ZKQ*C)?M z@p=-9Yr2e~rzK@~%W&+b-4<(gRif{PV?J#=M)h5EtHZtBSo} zA%`t%^f~wUSc`p~gVBUPzfOp*u+f``X}n)m>5awf zPhRMFF#&^X2|4wo3;tf4fMVkz@^EuIXy^0$Za88X*JchLa9&_@rb3z?XNsxJVG659 z;kgZQv+Q5(i6HJu&lndvCE#oE5^SAgj2_$}wOKI*OJir^bGI-!xM+#7vu7i+{r_j@ z7e_StC++aFDgi5tYL~UjPC=I~%r6N^N2a9l5Dl5cY+|80+h>Eh*`VE8jv325pf+P$BLtih}+qehAxjW_pp ziLJU)M=Z&st|I;3luH@1s-->r`1xl(RSbF_n1j)*A7^(wD!C0HZ-WibPt{0lXfP9{ zJP&U-CS$>EW7Ho-{f_y0IM87__I8d%cTF?~KA(lTox@;tZmO&bw;;yyPo4CAmPH!B zvf1Qj=N!bLVcFA3F<7{neNn#ynx3XsD9)r$-WRJmwbC2wXy@pchMH>b`wVTse&+6W znlp2QsDr|q`uj_ze^xLmnKMt?c}y9@oVGh-M~wXjWvqT>S5H#`89w7I3?Bvuo*9M0dneVVoy z+1(9OnS1XEtdJwKx$Dh)arE{^_0N%3Chcw++TcM10&fcD=xzxf3S7_(t7ZWtcRtDl7?cD8BXHC_$p#NqcfoWfq ztZwA9X-~iEc22oY9@?@VyzkO(rTxksr&{Mk_YWcXE1Z}O?Slee12BZon+#V8hf*Ju#wTLIqc9OdZsD7&Sf75^ z75^GIV5VS?caf0qHnoPubIu^P)>5lpn&D|(6%1xomn@{iw?mU#2PSq(NAT%1Me(* z^}hc9C=J$zLcbSrFH`p`Ne{#Dj6I@7omVPFh7q{J-tUy3Ns3!OXZ_483ii7y-p8WQ zg8t#<>8Z;33DiB~J$+C!Oxg1-3flrXFDU7*jP6aoBHFh5yJpIh8IjP7;aqI+ck!?^ z9HlDyhc0);2KGNMrnCR7%|1^nV)%LYb?5C8=G5;Vv5__YP~VoKucfyW} zxzUQ^FtyEa`0lquAM*71cN(g`_r(t_UlS|*-+%vyD=_|Aq;ad6ja#&H_g$^ZLc5sZ z$0p_&UPm;>_pET?x8L}jq*)l}gI4$Wd}^vDgP37KJGW4@G_y>(>qIE^iS(bA;ljq_vJl zQ&;ws4w@>5xu2R6z!8$a6c+Ml%By^j9>NewCP_|5EyvK^4+- zSBw9+BK7ZIluiwILVjQ*n zims)+>=Ozj`q=()k43jv)Dk_;{&P;1@Lk}8=}+lf4j&O$=D8uG7qu;p~~}~uKY`%ukB>mMr#iA zda>s?zs%65zbig0;P=tLA>ZvC0k^k*_Up1{7i)4p&Ble_=h^zGrf7mW*3-_qUqUp# z#q?K;i5>D9sVU$t*x(23mp*8zdBGj7>$G#I`h{}q-(W0dzGVNSLNV_WiV~Uy;}LTD;%3f&=2fgplo3Nc6c)T&x0bBoG|Y8F*dDu?yUSur2ZFuuhV`L z<=pjXgheL8aFda8gmb{;1m=ndhbt+>3{0d?NIBnIQ7wLt)ZWfiO8B%4A6xz9@%V5od-gB{! zcJ5mEOVQd+jLpLYEZcrYd3_}a>5bWQySGiL!+IpAHS4?YS;__OWp7~4Tst#b*_jcB zzS^uuTiBezuOX)i(-W^bfhsKZxI$fi>%xSG;>DTCC?B@Gxh=HCIIP z`VjW#c#o!^7W#w8Mf`zz{@_v(oav2=^u4w(m3=C5I%SB= zD^}?BR0X~E!J_Rab8H}XD%HtU9PdOsSF3R1m%e!V&J5d#1=J@u_yCnPT&J;4oZL*b z)Ahu8@rERprc=!j&GS4sy1&L27MMaiSGnC*?gUXkhIa0@ zeX9~fEcXcZ?uIu`Qx3A9(5VS?hB}VQjFBOTZ$s_#6_PTOy^9a5o2onaSFUakL(@Ub z2Wr|V8#%MPHikWa&$`M?vq;3V?z=SYh3LoLauV~miN4ih8h0g&LgM$MYG#LOgVdgpCR3Tu$kthTM}YnCr&PBA0$ZG?p_5vwY_u{tb@CkYwUQ>(3I2 z+oE8WK}>!(2%qPX2v|jK@F;y@b|?aS_i%n1t}WUWvfiy=U#nhkVK6=zvz{=w>Cr<> z=MF{pHYyx?t|ija$>&2%!@2c6#ouF{QAj^*H@T1SHL}H#n<`XZ?I#*en}Z{rs88*s zEtXW7!C-h2a@P$KFWhHiX_q8CXgx$+P@AFVs0y=Y4;Cj+SflDPdylWXimq!sq36e* z>e~0R{bcT;7X67U=s0YHGVtMK6sME7=Zv;;^Tu>MFd#Ol{{wO1wHeY_%b&B@COSuY zpvaea%g@PTOWHhStWV%hvX%Jg6^KvlqxR@BTWa=g6Fn;+el0a)}=>U8XHOoy-wLY=o(^uF!8Y_dhJe-jU?3&FB8_G0x^E zOqH*c$KvF~KhN_UQ)AKgu_=<-qbq6qRt_~XN3j=sT+v(PUYo4ZcoJ**Z!_cy_@XcS z9w%phQOnDMF#RfPaGMNu^LxQ~&zXzEybYxb^+I9ri#?W~Ck*b#6T`-QPqd$J*!U_r z0GQ+T&b(phiAap%+0Gr?Nou|;3fb0-r-zKBHE*MFoU!k9mWy;gItHn<;mrflQh-(r zrflKe)J~RSFOs8cFK3GuY0@?B+60#~heV2Wo^iJC1Nxct5b0YF_LN#uk8|uK32uQ{ zG?6-zZJro9+4`b?BDI_%?v4Ak+8z4D%Wcd0u1-Gah=ueO+t+5u;|y(ZZ&(tH$kcfM87x@;(VU7m~X`x3BZadYAJg8RS3R^GZX z*+Al4<%iRs{y9(%RbRbrj@jE2Fi%V<)#+*p4`=SUEiEyaG|>ibW7yZ4S8lkA_0326 z?Hw!INJAHLMo&B6Z97W3el!HTY3F`Mw$k2LzkfF4Q9qS*Pn)ric}UF8T6gz!k}IZ=3U~?JX#lddQs56OP$E}b+Cy$5ifpnR+#fq`fxcE=A8A{4!S1!Bn9Cp zG319O+sr@r?cOy;9rKPP&$uH$4H)EL@qq?2o?O;$!<5o{%`JR5>(jG=k`lcd=V!f=f~Jf?b;bj>InJ?ioPKG`q*-ii6G z>*f%0R@zQ(3=`%anTb!Nvj*e`wP6iAzb+;f#Nbpau@g0|adk^9)*WEYQrI0|tEhKh z&AQmQA6$q5JNueg(--|=RyP`3KC>^~svp`_M-VHbLTP<1B(j(De7FiH54AwsZozor zPaM(x$I>Cr>nw;>^{l;0YSGpko!MK@NI!09ROkvlnl8#j|)@=r5rz)$-9IlyUa;=SZ|0Y9xK; zZvFY6f8q+R`$wvKzBR{g&V@a6&z2O8=Puh{#CYFpXShaXgZ*`wKXaa z<1|Im-4l$cy_`EVkCgg748cLpiBxvWrH;MAP>(%c9h?19EeB$`KO|sS-zsV2&InjD zCz*8nm84ZGialJ`V&@v6(cEZwFn=!I*9GejlN(?GbKtr|Vf&mMt{V16x)`F13w0&< zy}Iq02L0+-jPA;PhjB9z**ylshf-^B5oa0;*y|WYe|u>HCR`#98}qJ3_4RQvHyGWR z8@%4u9xb>h>wQ~AyxG6fhk@kACgyWaFC$6a-5vSFrDdJmr>;NB2{SHJAKdJu?9L4vB55_|F#_v;~cYp0r6l_aC<>l?t4I^@x3*vi+oR*SR;s4b&w@*Kp`d)~@K=$;O zQwwqCP(5 zsP;!?UL3s5IFDpL-bF7K`-!<4!@1UvMDmxYRB$~{X2vY}474JxXrH}SfU)S@MM{>_+^6o*Q? zZUtim--}I$)lzcrPz=uH%&S+al;*)ZyOTT1<#(h}JHzpoXS-Od9x8vZSIm6ltw(3* znn%H42>ZRWhe5TSdnK$>@?T9u?9Ujut|8{|vkR=p#-ZmU_LMl|jMOF13iE^+Hx}Rn zc?c%5cAGJ52|PISf5O;wa^+GyW*yeFMn!JEOc;-gK z&va)DACn60X8nX?j0-Gnsdv~qNaRxAeAq$0_nV%g%XU8`4C7rj>?6gIi0-`wZjchbW*t!(M^i>b;0vbsYtNWl6U;$jI(BG zc(VJY>@dg`0p2sf{E`Q{Afl_-}*`DHMA5B zXONd7Ccb=u}CaUVqH`Q?XpN%-=wyz)lsM;i4pyrgybIE@v~PTR&cIw^L{CU z6>87jPDY`PFLuoLBu{AyhVg^4JAGJ!5d) zgMHBtNjOj#%XtX<9*=Wz=U-}1Y4h&C-HyWtsd2Gg#a^lmJI0M2Zy9Qn!4`Prz#1g|&REwn zOW1LT!Q`JPLuoE~-n__jQZ-dtw%H#BwG%KhW4WXX2tgA==5Nas=^^vgujASGxcpMO zLaoorxe3_)t`(}tw_me>^IV;wxKTF>`NX7|`Om;l*JxbqMQ(vF^Kh_~SWx!p=A~!A zzjhqbPZPV8wc4QGKH^W7{F&F8Zp%_1A8COUOYSo!OdG39uH7%> zK00O;W%xYFmiacd)iz9%PG0mU4?XcbhgV27`5{QrW-k44>uSeWZ?{obFg2L&oHSEwLPaK!!-OmDhI{l z@juk{&aZ9sgthsz&M9yfU!dW9C*?&ls!SdraIQa==O-g|=Wz_^?TO35$vD3%AF=P9 zP~ex0*eol!_qT;TbxTzz&q^H==a5?{8Mthv9>e?ok$b$um%f!(x3> zX#;CV_CpHhi}|ZO;guhQp-l_NelqeyWx=0)(PLwC)vXOI&|yXbnh#l8y#1Xe(l(Hf z(Kg8N^$uI~7*3t9o|C0hb;u)kIUbfJxzd~SoSU@ej)0j)>TVi_LlP`mv%@UA4x6++IfLKo|kfWk~#L+Jr*b;&s=vc+L@g1b>d^;9ZC$X)>2Gd6o)&v zS&wYmhF8R4eRn2)`-*~z`{Sv5nS>J=*KmnGB%XfQKl3f7l*Qpa^Rd-sb&QHx~nsEtxs-5h+1sj=&wsNL>re6;bu5uuEDeJRd6N>yJd;8?MG&jcdvUN8 zZm*4miz&GdCh5YT_4Us^^f{c>|3hxeeD+SwZjm$KQY7zNWr2NT$p3u3Ug^<>b5Kr<9y!xdhHPH`%_g>obMXEGmdKd~=zr^M5kseKr!1>4I9J9G08BdNvL*|5mwHv|S zg1ol$;rqt+LnrbR7j9tg{cAENCviU3nRD&0-Y8@b!!C?{p>6ZAB1(m8%$d7)UyFMK z$aTTloO{S2n3W{KxjWDB&~r#-tSh~n1iwZPv9T8Q=y{i0C49nF9r|q67j-+;GCJbI zIm|cSeUI;`ohHS29*#M$?(bpe>&&mO+S5L?dJTXMCb zEw-Ce6Z)00^ufjgX4J3w-@I;A!!7E&{^rnTZk&~oU0QR>63)yqTJE}S@bJAY&NU!^ z+M-v6X&>id#J+f>R*aR5+7p*j6AycJs1(sG0uAnwQ&+uOy2G0K;)i%N>nWrw4PuZ! zFaeADJeC%*rZ|M`2HQRz=Hm`oPMLO1HN-7@AhQY zbUVl!yOz)Qxr^Ft3GVi!F8YQfG`qe5?mS<8{gd(F+J4p{yx$#Du%U|}CW!nxNhvUn zImVe8dxX|0F!(7Ds7yXi=f9GyVkEH+}yYy?M8&cbROU9l$~h2C=kCMa~9yb z6{EefB}k(5of*7rWrZ#KkkIq_W)GC48upK z7=v!aTG#TU#`J&x{olOXd+>Jk-C#2;HR9f-biFi~e%?5p+BEY0aSz7Y!mu&5EIThS z+-EQk$=iO%$2*3fiQCk=PQBaL?WA!@;YcG+c-tXEDJv!tpNW~DI>A?Zlgt@e^8|8j zWJwDPxNqV}eDbZG(g^xkyQ|!@b3P-ToW0_MW|!AD|en}{x{F}z({PLNWU@56Q`swq6;n6B7pKaj(av9>7yCw=s9)n4rZ%`Z zg8Yb9u7BA1*53W<{r}8D7BOROHg-~D?QHh>SQ{94l(v{+1?M}|o%xk(V0+aYOYMoj zAJ^9~{azsMrp2S|x|d=9=ZrPp)F+KyWw_)Wd%sT9%bQzf7}O|&Gh%WhoO)%L%pT_M zt*qsYTT20UG3Z3!(reOCNw{-IA(1=I>giG)=7wF^YjS^q;J<2Jk#>&YPUxa!ls&#LmDv(6 za3>i$s~$;}tJ!zln+(go52UIl#P1Jcyc=*^(r?7rwKEBsz3)kT?uP-qOI>=`fzxE_ zW$3E#K3pF`6X#)_K4)s&3n|p`LGjEun7l87Ns<>j5l6B<=`hx$2cgC;0LAeq3?32B z9+v0$hn*KZEK+apYK)$&0S2uerLHKNfmXBQ5o7wa)K)bcpVq}eTC}2cV=q@YK99qf z_kpD^C;Q@fBic~Ms?=hVKL%6FL+$W)X@~Iv)RyJWQP9NF%vnLySBb-%l@m)p1hU@C zj6=n*X{9Gu5L1RT^+E z7R|Dmw+zZG9js5?=@FbizFk$ill7?eQQ}4a*;1N+hQ4T+3b7CNmtM7Ie`9iNgo| zIBCgLUyLe@!I<66aD;qWW2jZJ>o4N1BU~7p!ccc}F+#JQF)Abw<$;CxFy0q0a;a4l zaKhk&9{KBzb9d-}{Kn_dL+aL;hOxcKr?E*=r*AjLnyJ(Yo!nZzskI62(mo^J>8RJ~ zIw4d;EwCX@YJ=zD*c& zpLxl>Sm$|vJ(~LMwXiCi6(@nDDwm7)5PjX{jpudQ2wY1eem-rjT=^gbE#FZ?RyRaW8WM;m(bT_KT&12yuKjl8 z^>EtTR0^Yi9aT+@p~_kqc*YIITO+ZlI0mchy0CvkO!m}1wzYqZmqm z72o%w{J@|7&n_O06JE*HUpRmJM$K!R1|qv{99D1QtWBq_I60WVzaeuK=WgQD80zV@ zOhkcq50Tp`8XNg{77ght>T5?}dI@#j83+4`V{9NA z`^RIg?l1LkZsaS>2h83jNyo^c=WvNS8fBxA(Z&-_>KNjGa!}_lYKU;h{unV0;jHgMY3GkyjFD{hTYqr0+Uesg?BW@lle|@3 z_0)AY8pPl3yhk2~o;&4Tk zCfCg4-eR*jJWMW-rPN@I;qF-HvJ$y)J9+qr#^LJYYjVs%>R5S_m+IYj`NI;PXX4ft z{AeYX8AoH{zTsd<(@P+Z`CcV68%tV*ma&K1mq zOH3TT*GiO6#Q1W~#TvD;v6NDaJ8QLQhsUijzK#dl--|}jaB5mK^2BOt(cO*C#*Z8R zm{-Et%)AnVDeNcgHn#fXJRfhiQoSpS{omiU^Fc}7YKJk}&`*{%ouUqUF$w^}m|N08_Dp4O{6QSb&Bw|1PCm%VrG}=1ySza1!*%mGblZ?2w$(;dyTI;l5iAVOVb~IaA|QxLcXxLwCi%(~$+rzufp{@R6R7fODiplwm@e-x>^b*RCWnb1sSbPY^nCCHYA8#k>(+gwh z8TtZfOcSl=2VmRKSY&y07k6ILb7mWL#O~~qY{R^ueJmEQ)oT>*2D#%;BkBh|yK304 zlzhXJjMa6`@M-|(Li2;MlR3^$*4d6lJ0q%Sw_?R4?)P4^|G~K`FH6;RgAuh)xt~`V zsMK3cu$Q%?<#jAn4khcVJzVfiM;hwyiM}t0zuH!MIiC6n`El$S zrAjgFeW6Xx*7I2uFjFaR}NrLL43(i7VvCUR-S^+I^(g=sD_d=edc`)F5wKm$6zSQY@qXM%ITo z?B0dJmL-iGkhZ7pi;9T(N&V@0?@(4ReZI z(EdUs78iEIm04~mLJ%f&bccQyKj^1A!8~-0qQj+Vs3uwegLBQzWYxVLMz}JPyyHLm zswtaI;1d*2zND>cv2+}U(%p*YSn&Z5BpYY(fuLMdSYHQ ze26gk9fo9{VSehV;?(B|RLzP*$!#Ywi8JTh82^7}L<-#so=Z#V!?H0&)V;_(KPC=! zYf^TR+X2Q|Gh>LR@$S9TFeo7~WVUSrqa=14!(j@Zk&_8Qw`%6YN#aFMeM+i!g~e1F3Z zXUH3`)0Cc6@$>QYxex5yx}bNUH(C@rAf;KVVxMg^b`@FugR@y~fGVlj2+er!*8Que zno(fFJck}YMRm6pW0@Pg9Zv7U?g8RkX(T#Mj)QESBtCPd?oD&PBNx*|cpmj1d}A@; zYO1hX9fFS3^m#HbRrpQ~LS9ldG+(9&eRJxyKH@x6Wr`So$`38`I0xAvMhswm|AsSt zZC2Tevz$|E#Xj|*W8KA%z5jWe@@yEjRnpurA4g|K!2IMjgP6N>ki8)cer`JrdpDVb zL%PA}cAy_lC(PrljSqZVj>TZU*LU0vo!^Q4G=o`~Z*?PZ2En_AQRw#Q-6 z?QN3#W*>}liNmgp^HOAlAFK!RT(kKowRR4`guk)KxZ6S;wGP6Qr}Q#z+g~hk48f#_ zvC!!-QOt@7!&~li$Nu)BY(xb5HfB9~S(v!BBLXYlGVdCiEShWz#~ar8I*m^eM_J1n zn;(Ory;H=i=pa- zCW$$Xg{{b~az(06B!2N4*e{bN*brVpys(# zIlWjql;{Hs&p2vwRZ5bnAGQynpX1XXlC@p{RK&UA&eo!^E49n2`Hp)J5p8;hAcyDv zrmATohTdT&#Jt~2Cn1M0_u$XNQ^Leaqi~#AN-skFc=3cjkME!I?l37{>{JJ#!Ix;* z&q)-~2k1#OAR2pXlEu_9#FjnC#@gxP68qmbiLEyG{KPD8=oGVNsud|-R=HzOH}bna z%@$jj4?ppVz*oD$V#k$vDBT?n|D;;!x0x-q_rhRxHcKi!Z;cY)P&9qHO68w98y!ak z;qwPw!`6;-G3Bf`8Z0d~Twdb^(_9D4*t*N$b8RFv#{7$O-8TbOj*J@zrje^SvAxPC z)dZu-Z=V`DPvw_mj*MS%7!c7$dhY0ewM|)bSNcdnUp(N&`qJAY*}NloA)5Ehn>ZlN zCjV5|pLuQU4atXfnEJ!wkWl_t+VR&Pvl*YA&Dx3f&*;nWfIg(db;aIi!5DZs7P=+I z;)g`<#Iw{;+v6w>2eHq%HWph#0!06np{N;1ALOiHak^_T^jHTp?G`3xQ8Q{{GPTtv zMvMLy{-}G2KD@`0#D~#*zB8gwGbmN~gwmJrGWYF;BoUn9i4^@vG@KbM>?d&#r;@MO z$5tfjIACIBIKoC4h_H!v_&YiruFQFU8qY>@W*EE|*GlUHtgxjgXS;KENKV(Sp{vc< zG~>1^Ok*xIA9!O-jHcoAQZF2=b-=QK`UXwnBGH{anE#C%iF>tFwcCv_#fK@X;}?xGj(Zg*es?lIU$bP8h)lJky_ zc7_Op34ZvN!?}>iIB}vKy(-#7L9|Gux&Za_sp&IkWwhvN?2gEz5zw{r6Xn@Xu=y2^ z9YY<3^WJ%w;T(>mODx5Wwzio4fgHeDQ^lwyRygb&h7afT#Sc463~e5Y0-YWr+tnJL zy{YZH@{;smyB(@q`aqF;LiKJLJskoav5J25f%PM?>de15*IRhKtTK~%9dT~7^>*2? zdGx;`&TUL}RBltual2tWw5mU=QkUC9k9XnC-KR*W>Uv-U!4CTQa|xAYmGpTy{d#y8)%^BTnn0c8Vd1fGdZ#Tcs2A5|QY?Nc z2Z+I~g3-MxV@vK>5jLKh%-dp+{cEDQT^$HljTkh!H(8j(`6I4NG-~yX#UYh1BI)<~ z;?+#?m^!PkH$-B>in*e(EALIM$VDt;t}@aS0|O(_v5|`y`q33{)tvi}a1|Av0ilU;7QfKD0}9f^j*^ECY3&MN5VIH`n;YjHL~->n054sSr{m- zyXpm}v>~U%f;f*c(HE=fwc*ny60fZwqMOq@I6eYLbEb-#TdsWP!tuDLxoF_wh-_;8 zEVi60I_#PY=W6a--f>Qk=Xhi*2-doisW$SHB zP(hrd>z^pg9c>OX;@sRIS5?o&9$kp@!NO0fj%VF5^J^UL6t$N|>U(1JnmEo1jFr~0 z4lrO6eenwHrG|Zcko|#uR>M^3^bucl@l?sugwJ@bc(al+2T5d#9l z(R-Vv7?3p=!`g*2?+p_LZER3`CJd@ui-l&9C3H9wnKx~%xE(tSh1B>C$SxA=IhWhg zEC^%PuMnZ%=U|!}HNx%=6+Mo6(2LCxbq#ka>ob2*lCSl@@p(nVOXKdO8{r0VZf#at zy2#oD9X7I`Vi;d$ILw^d((!0i*X*}bGNOi)#NP3k21lgz^?BE5&fK`RRGOUckL!b@(LG%)MaNNx zpE&zIyC7*j_r{Jj^t%kLmbM=ELVM!;?*32dPq7EiEsKEGwie=W3cWDuM&MPe{=%iF zBW^7wCx3#87|opFC1+d5jf)g79?@^H4s%DJRpO6_C9Ju(-^cD0&vj>EAGtRsiX&p> zcq?dg-Z#1RZt*gB4t`J%$T)GXcxC90kfDx9cQ~xvtBl0zKePV9`S;C1iqmOE=skn; z&-L4m%ds?p9dT~vUboC(usKqQ?T+EvD&w*C_{>;6=B>Z#cD6e@evZS@$`vZ_PacTP zrFT`$0o8u`1uR$6uc!8g>f8x$EPFv;-C=d4NF!fNT^EaW*V;+zIG-?y^Exf{^rXL` z0a)E77TtPGm-g`PcANEw-|yU{c4a{r$bPNGzDViO&p^y2&VPF+N_rdou}U`@b9B=r zEjM3S5$AzrOQqA)TbQ((+7@0#(y25rNZOGY8zW2IqCKFM6M<~~7gE7=R~)1^jp?@5 zBJi05Oqh%Rz6w#N*IeYehGWUeND;Y)UWCKL(WY{ZFl}cEx1*drtvM`)oVLI~&Nda4 zpA$~Smbkfv`bXs_gad1Gm3w?p*D_Tcvv-B{3kO*3HdbcN4d>e8ADlbPTB|soY6L&x z>^Zv9puoZe`Na8~YVEPCzUEj@ocB-LT&B^_9>K)CQu%~S*Qyim`8b-W*8D%V{4vhhBWwr9DjX&Yb6Tunc(-aA#Da{N$i5sU6e&Zq|K zvLDnY77kg@RDaI~V&enmY^~}^b+VYBF6S&@r zwA|PiUoE28TNy4nrF(NmCKB4#w$keK%R3j|Oo@_J(MwvO(@4ALgrTM4S4~ymvUDSAxB2?x8=Veaza@L8{~wdVX;>cgmuPDkHlfOj;C!lApG!c~>|W*Ej}i3jI{k>-;fo zWHfzU7pfcv`Tk#?Tv2zAYPF>|_AI4-L_n?TY&|cGZ9>kQ(OAhu!viIpi_+CwDhXM+>^=e3>_!}BkfR;&0683V6mmjn)wLtMgE22>EKz=VGQ}>c~&f5 zH4_y(L-A?vV=?~^xmWaT7#i_hxCG9ITtKa>U;9J`^WKFW9AIRYd@Q2h3{u_>^vAE?F_>3oqZ{Bd#wb#hD0loRjJlaW0;o9brDpRBR$Oo>EG{}l#-oO5fzd28i%XVs?&cSJBg zhh_DW=8bm2YHC1lU%p+^$+t&PIdulZTZ{SY=b-JzaCGV8Djwdq!ei=IOnguv1~#xj z({AB7{q4MH-gO4f>}K!h@mtaQ@eKTC&o#K$A90gs<&hEej~rJewk6Dg-2i)x%kLqk zsvPNwJ^i2kY_xQivJG)AB+kxXe5yZLSb8E$kNApq3`NHP= zGZYVdyQ492?tgfXVx6Z4qLxwTz1c0r`CXn+v(C0+Wqsvz&cQUh&HG4scclrrPCuy& zC#^PAeh|L6XAp}Qwob~2qy2H>YYcwsrYg&i2EbhvgQsnCmG60H{2UeoMR<{Nv`rvZ z{)|Sm?}f@obNrFdJK%+tE0nS1=WeFIyx|%jWi|83cCoAl`F>GU4fVv`TKZkStt#tD zk0)Q|8=|Qh26+)B5OZ|j5(?KIuZ13ad6nMO(9HiUa$3y7nIF`4+;~sS;A}v})%o!F zJ5qEzG8bRpnEr$FbGC(f4#zEn6Go8T95F0GTJXw||TUc`B2qP3#>+I*;q z^A)oM#S<-eEPBtL&ZqT?(-s~`V@-H((g}rnnJ31wrZHss8^w#8UO01uzUL=fC{=vs z6{+k;v>l|}z1$bM?4Px2Y^+H?ovkeA z+;XqaocqtqR<0jJ??vWyE;mz^#r{4RNFM(CzE;Xy7cUHEALWPjT}8+v53G9?fvK&| zmPOK+`SXGZ?96_x`kCbn&8`v1P-RN3E9S%dcsO)h{g$*!ZSi+CxnZM>h5E52HKoY+ zsJBc!`Z5C#I)>B3qg2G+G@}P~C?Z={i*`fU`(W+WwDni9?!`>b8+zmF-J9a6k2OZH z9$h%5uL#&=gCX<(#W`=l0;MT&w&gstzjYnu%V{Q_UY@zWqB7hQZ*)2DA<^WQ`=8 zvjvGFA!G&y)C7sfP!F!GTwI7VgBvxWo|`=s1>a_16MYjqMjRK-?s0Cu z<9rk?JS{n`x5Anl)-V3=zyCjv)O*+}<*!5|loIEPZ;g~or<$OcIJ<6Gsd&@C9JR#x zZu)_7US;!9K%5`Wx>~CF(G9OzFa4wHST=ef?_9+BNtJ0?X9rI_92$oX{)uJR*V0Sw zS}ZR2Uso3T+8ZK)dXoFf$aeC@K5`_69(z!>U?Y86U&KIvaXnQ(YJvLi;2m&52i3DW zfz)n~LAw87l}=#*Hb0HVwy<%k^96p;>llr%_svurZ+hc6IYrqPk*cgyp0JuvZJOnq zRa*=^pkKwgkcID5FWR_agntB*Du+uJhn#Sp_Y{kfnbM~F^H5UA{4KgdYReh&$<*U^ znb1izzcmXR<`Ms))*_6((Ob8|5Hu}A3_H!47Q;}SzPU+kd_Ns;E(W6MrGvtfYO{t- z=wmu)x#(Ov3yt&U;rOXOhIiv;VY}bII5%2RsN6-IKQV5^-fE$oOq@S4ZuDJ~qL^FX zoSK&LcvV-g?DsxCtNQV<9QL%#_lX;>yk(EObw|~<_8vI0I1Y;*O;ouX^N!E{HJS&h z4kvrz=2h+6J8HQ`vKnkF+Z)A8jcdq1T!#iF$7h^9x^4~to1 zxoi$)ycfPLJtsYEJ_}FY&&59L0(vS~&{xR#pZ%QH;hM6h?G*Iq+*b`IDeDDHg;`=e zu64bl*x%I{E34w5I6Sy)$;;VTzn5OF3H?+b0vs`qckLmEoK+TCPPobb)R_6pRj(KW zkFYNHYR^H{h%GMIG%*(K2i#Tlu5cwUF9xTr>Pvpjm}@ci9?Iz|?V3Z+MAk0ihK`jY zQ$4YLOEl*Fo+WK+;f3?8V|b5oms~e_VronjZv76G9Itz@cN2*PTau-R6FsPj8UcCM zBB}micO2&Y#|`f#(kn|h;CvW4kP9XMa%Y^KABtvG(Ngtc2Y6KmV?uu?sdvwLIB6UN zv-ByF+}9SLZwKH{X@BWuttGB6^C!Qko-}s!Oyqm}L43|srLHx@@O$jZb@x%epl5DU z6E7HQ?l;^LZ;ten)HgB9M_xT^O#Wtz(n&ev*W3=os7F)(!C6&XrL=l884o8@XJhtc zW$&3&QFkrp_6^S|&iydLQ_kgDZOASgc5F6!-s5aWvYYDkNJl(5&vS5bo@%p#db8|R zX^7)0`(Dln|H)jg#e3D&t}YnIJ7D%0E$Lu?SD1{UmTa(&l&o-r_I>(uD9sor=|i2t zp0YuZl$Y*->Txj`mcK~)7VL@XtTX5TSt})-_ryB(`|S2_m)z;A`0WGtu*X3uXA3bm zjY9KQvQ#?41K$fG;o^TmYD{0+g^wfPV{t{A*uWk2UWMb``IFLfxI%|LzPv+wB|}SR zRO^Q#t!}o|U&j&6OM+otYb=>m&Zizv5LCTZsjdah#p{9qeEoi2xhQoGhK%rsc|ozE z&2?MO?fT-@qv1#|peN=AFRb_7goIm8nDo;HS@{@mdL{}tT>kBM-?qA~jLVvgZgUba ztnXCi*)~(rNX0tRu#<{!Cyjt1@%Z3zp=?I_Z1}gJHgDbKs;%0NXsW@_JQk|c9h_iW z6o;8UA5@1vJ7GWTq8l!@mJ*mpZD(JvP3bVH!BZC$=kx6QZ?C>)J!d-mR{bKSBF>zQ z(u~E8=gXwM9CpAQg0d>Wxad7-%W0Bg$le3D{_}JN8%q{XjQ|cG}m&@H- z?vB56A}~JUuk>Yu8$vX~q11mbMFhLy0yRWZYHv%Ag&VmW!JMBvBt7H(w@yU>TBHt? z+;ZI!Rmho`bx*EIZrIS)7eBA~z+gf%=x{dn);-66_H(bu`%2$8ld#x7 zfjZB|%67-5pzecstZ8ywF)zvp`gZZKomqztva@jq@o<{5TXp$~173~dJ#pn@)sL5s zP_kF+Fr$Su_JkAKEn{A7sw3^*;f#QZaWFBSAuTU(!S`>ma5)(&)nD%lzeBN@-fOAk zyx9#;A~_?a*dj^$Ses(azs^@7%|7mdq3u}zUv*c~x=)Wt=6-&~-=(;{UQk_%!KhwM z#7`}6R2Fc?+PIBaa)-H%9Xa-ox(Eg1>yD;zXN&aUz_GR=EuWoo@4>ggk zzBCgn**}RPk85Mu5J`UP4f{zUa4k(Sbk7gK(5PS(pHDK}ag=^O7v28BxgzwDa%aRO zv`Hcdu*-Di&xk3Eh3rWM$O`KTM!1+7Pan_@sy;2L0m9j{VF%8r(oQ*`$UPnl=hv0y zpL0b2F7(S*^peJGaKg$;>Wt;F{vYoQf9BOr4ZNk+UM}#Q5eLnr4C#>rwYJ)_pH*jr z)WXgUyV;ZNS9L^+wR6XjgPaSpx+Y~gd0^l&a@Ed%l-7iL!Y?cqA;X#o$5byYaE*n5 zva_(8>rGt{>MztAER3#tqY>y?xOTKKyWkC*PO(_jYNBw+_r`kWGxq1rM5Arq=)ifb z9$V*#-4&d@OyxY&J!cU||I^(==x=`5Nthn>X5WPK`L||?EiT?z;K=;Eqk)Kt@rFfD z)~WuylHw0~!DJrKg_;#gn**M>#kEz{7sI|?{jupIbp#e4G`y5U-ek1bKRD;rd8$0T zd=mOCp>BzznbJ6J3PzJZ#=!}NLTQ9I+v9Pk#V}QB^Vu+Fe|GwshpP1_9k7l({YOGe zY9Kq}0p}j)gpZV>moiqjibwJOInrh~XVkmS*^k;p>B?jmoc*uoaxq6bJ&Yb_zU*^t z*dsZTx4V<|YQKYLrAckw;oq6F3YJf$VJ$q+`cEvveCi5S8&9ldebwz;Yw@bP7jrts z|B8NM^?z0^nt(mJhZW(IjL?L-)AMwuslK&gZMKZOm8vhQJ!c&-_gFk0TXdHi zmpY0(m=z5GjGK)Bz zd7&fL$zJGbOf#-Ul`L=nUO%eWPB z*zUDhL{sBpG;8LIo2(bQ1N~6Fk$0}^YlUfvABOtHp-uZ-(TMX@E4c@nABq#X>ArAh z-!sgjx#;o13qv^PCi`m`T9WU%hPBFv8wVjRz!!GEqjBa^73zG6h2ErpbpqE>Yh`S` z$amaJ%8bG(sF^~}+O`9VwNs4n^&Re}(#yDH{ziw@mCNyPr{rvJ)6h;K3i^yRM{5~&&9(q z^OShN*@L><;xTvZVUf7Q4_gxA;qiR8INaYKWsdRC@4r!4eDOmS=ijV@QiW%#FXDJ+ zotW2Nysq}5k0-h6Pra14>4lwgf*NS8bddeP2f=6Py*hvBc-1oAQ#oJwzxToABVQ@^ z4w}r_YU&avc*q9#E#N5xp8Y3tX;$R;*qgD!PEtDtEk1{X)cf0?Sf{ES;up%-bV?@T{}|#?_I8QoP1}S?s7^V=T{5)d!3ug$9MT)XbQi7$QQ9X-xssJ z63~0WJ>Eh5(4GDL20hC~hX;P>Fpx8xVaJ5w0DqM9BLBMmR-wPs4=KzW){UjU^j9AY z;e2%{ah@~Hi@f7RGs+Q^}MvgeLhdR1hf92xyj>sW*=H<<&a>rmNd|6Fz9oviYn`zD%$$ztF z^uS$gCfZk{ARYvl!F>MyxA94bfk^QOi>dHU@-%5^8xgPYtgl|cjfzNs(5 zUs4k|^{u!u*bntCP+QWhN_l&e9VT+R#sSWP)O0fjcb7k3MvLBL7zABxA|l+u%6w*in~0*w3OS~SGluUY zHv}qq{!eGLqZY)j=R4#v)zrS`vq+Qk<)|~%8(B<`l?jXGWwkGEw4;XP;8MChP`BtXLdu*(*vo3w;V$#%K*H~ayF*RoQrmHP`TcPkX^^T6(sH0ojV}WK8 zY>tgk`~0;>TWV$O9MVbMNacVZ@A=(2G*oBuZeHg(`FpqC$rZz$@PqujVb`nVff~-J zyiN_+ZEE>ol`~Q<&|k*9SZ-e8g7e4e`J!DQugh`8z9aO%^Ij%zi*-XMz9ar`ljT0a zyk8e4q9Dsx9_#CYnK}GE)2!tEah}u{r?yg>LJlotFF1<4ta`lHl^oahtVM1qwc8gg&^X`LbL z`}v@~J$ZJg#)=cHN$%-J?wd}5RAWRfwLogz8Q(VibIc11iBHcG_wh~B{NeC5^q=^A zBCS^0bMa*Cx=T*q^To17jTP4MeOd5%fx7g%1=6TfWaT_v9h^1~A?K<6zOak>u!{>~ z7&q#Ke39!IxL`7$MLqXZ@LjSG;%Ud+~XOyqGcJ zn>lqFM+}sYoTJz3SU#iuO=QbZM5Z2g~kdG`o|KtHL}QD;fe4j)YE>lNwnd+ zc}9aA&*{s>p;O){{=vPWohBwyGpF}Y@|sf<#73nbesiC!Yn>!4$dT#Iza_qKp(wl? zfJNOBk+*P_xJ-@Jhoh;f^14t|QX_65IYikRDfiE3YHnz2h!cH%(dm5x z;tm{=MjY_L#>do38of*!$v)uE+X*;3E?wI4-3KL%^Hq13NjpP*(dq{0_o{bFuI>G> ziqG^`(<@TmSwHNrp>N3F&r)Mz(t*Frzj;fsn>@Vb#Ok_ZA8|<;i1vK12R1YiZF&SD zqa*bL`&)`-n!(T8}w5hG#{JiMFn#ak!B>F#Zt!);JGi*Rzz2V$H+4`YnZ4c2Op%L}^+#5)PBa&g+l=@5K zJf+b*>mGB@EWEKna=RW6f1W`!e3OjHfoe=lT2pVRFZ@}N0^`L#;z@ls{QZ=IVcYdp^{DytYahA04GhNL=ev1MME?^v$_iddpQJ3L zaSvayaT2p1?1YlxZ%s zGm82HS|Q?(PbQSi2l}0k6^TC=pp@r=-HQ~_vuiqQGK_nFGQ^64RQ%!jvUd40(b<>0 zc*f6TIl02xFBxWGJj)suh}LV8P?*fK^3fLY^(D_S@&VoY7K=XC)U+$0uHd!9!k_tI zGsdgWWn2>mG30|j;Ir#|PpsR_o&(R051XC}?@ci% zYm$T#CHs9}Slbwrgx-%|i}eq}@oO>n*8UpdIW-t5+@GH|-V&X5`C`O(a(xD?#osm_ z*#0;L^S3V*BW^k)ll<|{DQhK9ash6Pr)Rov`|%36;bhU#IojbEy8otLM6H%wvurD3xZc>lo;+d9TI}Sy_09L9<>8fB zz;(osYO&R4DSC3|!-Lx0rbG_}fx ze&_FcFA49X)Drkgo?17RSRa#w?u=3Q=9h^M#NPiSy}cKgiHYN=tH)e=?FyA>e3SE% zFQ|3zB1CJ}MO2JkS0Agz^|PEEyG@O(2B*ZVMx3v?LZ7c&XT=Qi~`r~L`6HQkIqC+`-Kc`g)4EBK$x#I16p5uI@ z8}{WTLv!hN(eR@a<|$LKa>qb1V1YAy*C%7>;d3y{;XZ#&zVQFx{JBYAIU_6!Ek4nc z)Gb}!ccz4MZoF$~C&_7jk74LHav{6UksW7lMIzTp-wotN-`3zf*RALGlO3X0;u+Vg zuC|pOhb_fDuDjfBB(IpZ2zUPbd4u0V$9N&Gay{AlwOIHu4JxiXi~C}xRw@FxUQ$#k zCNH7}FmW!+Di=FuBw-}iult=4D;aACf8qaEMJA97D#bQrg#*m5xSl%uc^LtYZ>skVCMC=nI z(jwSPr;gdogF@tn;^l}$bnAXhl=Tb5ww=sZ15SwAgUk;DlCb*zIdO8b8-lEpVe&^M zk{3BqcR3k{HR8qJNM|$~l#Ik1GjZU98;m1)_x~T9jS4;GE5TVX=J&k4{iuB9WC>Ea zPcBW|BcHo-6bj<6e797#XucKxTn`EgmERm*gEFoIpIORLij}CtzrE?6adMw8OJKzH ztu_7R7cCay6xTP++sQTB3*pcGX-WK#Nokl$-10~K6rZTMrA<7?=sp*L)FJr5^~WDK zMAP2Xog)4}+m;Lep1h+FhaFuc@nB6n&hqCeCk}`Uthuh?=ht4`Ax8D*EGmCjNy8#B zNy+{#^Z!QHYsHutYSugzwPWrxm*CFHox{GEg(yDK83z7x8}B%{^c z&Ek$LdpDbt5LZ#Gte)!*qnH2s(f96>Bd=rJc=??C?)R_df$9<{`Q4n1@5psl9>o;y znd99K$ZyKG{GT?O*@PUqCSnbg{Q36uMETyI6$s(~;`kS4&O@npGARVJ$V zzQpgD2aKC`o&l$nOD#QfWirt-)=DF`7}zZd-yqji#zM?7!aKNUT{B;qjR zOsn2kg_3ci!yndcErs}C`ro@qy}^aWV&7NRs<~bhwoxo&f9AjS^II#$luywZ#JJRU zd4|x_iN-SKMe9x`h+6k3?0Lk0vvZIrb&KR3j(6>^-af{@B6ucj1mL!m5qe|7qQHxqD8;Z+1Zv^&((vJzB0Ou!fI`s&_hN1;#LhIFlx$7gK8 zNq*-E?e@zrN3TH<*H$$-a$EHZT;=-yrX+b#!V)C&^Iy6-$<5bg;sS9_X);C5-@E`z zi1V5Z9l6KsG}LlG-(AvC?jD4j9LR4Ol_&;s-&VqC4MVwV+p4p<#M6rlGg5LZ-1NQldVdS^oXO3OH zdyTkx-h*C&^rQSxE>5xsx{h(}#OwFMV7mkMu4f+j{kiByeYWpQ>1$SAB;@g&In4hz zulrkkOSbdK!coSw&D_oLhf6T|UIM(mJE@&CkD@toJ5%#belc|mW)shi2QJDHU-QwB z>&q>6%NLVZUKP9E-(i7UieemhtG<+lI>xrf`ZocO9o8r=Bz zMkxEs;l?R&=2@9FOGw~)Z&;^awL>ot=K`Z7M9y7!Ya@v+N_byKuA~xnxN1e}N zSV3#CjM^Yte2-3NHW3{chT>v1zrS54(clhqb;g{`G;^VPL|!0shFzH}#d$M#bXiWH z@q&vYaE=qY^i0BTpTE>0w?|#x6aSjlm4DbdqZ@Nn<>y*4Sn{9_Xv9D9`C#NvS;sjG z>v>*lxKC0$?k|DGEo$}e&{IogM-WX6_m?$SzpS?fsqYf-pxq0(Z%IBHagE={<3bP@0A5LkVp72|I(ztz=|62g6H-S-Ust>Qe@6y9h$kiYTjnCr~&=E zn5*{<&Jf1c(fGz(G(gW$biGIapbpe8^%^F&G>k$4f1dfev3Pzv0*i^cYtREJh58w9 zh_ma83h7iGdPiQN_H4sCBIpP2N~d@>-BXH~k6x(ccc{=?F23w?#WyeBF9ux|76a(5 z_LaUudo*Q>x%SYf?#In#&E@zwXH?v0&d|H3yk{VF2Hx;q^gridoeeG2jpk)xB%kTM zrt{TTc9x(8W7nOlQ`I9vj$rM7*uLnd{wOxXhq1C>_qysIA^HF3&9|}mrfgkr1)gvZ zRAiROC(dM{JwKmXe~rBQbp~>{x3w%%HroZ^#&XWYZKRn25S=HO1e6FuGXMg+5#yo316nRZ&N{~L?G#8&r1q3Bi=gJj~_ zyM2mS6%dUYo?o$pr;8-#C>Sy4?|iboxM&}Vo1N$(^6;K?T;gmIpI4jk-O^N>Q0(J7 zdwjtzY4DFgw9Mx_W&27p-$3m(U!KdYMvG-HJkVl2^Q$*YMRE_;6Lfj!3aS(jdpaPJ zx%#_?jpgd*_VE70`b<$Lg-mg=Q?`7mI9^0)U}dByQ;>NWH3eE5vq zD1+Xn{LD&eo7{SD1`4^iSC3dKUpStQON`HrB12^V*i^(4XSv*5Uc8(40LBVk4PCix zEH$vXf4X&QEk`j1loAshsud5$(3hBTpzoHmLL)C0TJ0055xi0OvZr^O*nT<^BUBbG&<*v}i~eTJc=SlX9gN`%=av7~MOEV`s7FrBLLbKDrGHkc?=LTb(;4pJ zxvA>2OAq5av3-BSLLK&Y6FI@m2f7bZH{X^=E=dBu_HCwqq|E-mobZ~}3%RgS7B=uR zp2;WVh9fgDitoa0+f8!a>FG#hzU{1=DJM2b#cSd`?wE(XW&-cpjLGxbOpvQ8>G#N3 zF?~jN+1rYht7chXrC@iv6FpqiZfTKe;-SkD)t=D z#^G5}eKGHz8z!34`((&qQ8CE{i`b(a;u0>-EOA8NshrVDJ19bo?P0Km`+Uv^v7yu+ zrmU&n`k^IH_i@EnZO$TkuaxuGd%=^urvHu4C7oxfua3-uSrs+OuWVGmOf5kX-w{*8 zrRszUhp~*f>Bc&%qql5A2C=O>YP8zZIS);k2iA>mr&jz}j#gaz9se$8onDMb{LHk4 zSL9K(3vq{gdt~k&xpT{OoaLFgu6wrpiF#(OnHx7e5+d6+q0S<4Zg|mH4qQjSJLVEY z{rbwa)YsHttXOnVQ~q2Q%liuJEe9$^9_Q@dvNknFt5DSFP=|nfyFxcaY}Jgw7uK~R z6ZOUHsiBBq+`Aj2C5p+p_%wsR*HTj)JL?PmMVu?PtSed!<-7+q7BVl_5qF~5izN5i z_XmHz$QAW$Vv(8NPP9Ab3}pg+eQsEY*IthJ62Q65&8tOBwmq`GQ2+GBWzl95HFo$8 z)|czccY3?w3wz2Mql@H>cV4KX=E(ozytS^2`l)^v^m#vOv1O0C6LH?5V*b!7U!Cx| z1kZ@u&Q>An8xEUL!W!naK9kkOUGva@dEn~3J=8TN%c-HoGx}3~_3G5cc+1ahGQKCr zA6y74z6;U0N96VuX?VmlG4EEM+-6k@`vSaE&rOhbRPc_)v#*WcELq!uv4Q*W+qS`S z^NI0z#uy#1-9&!Od8IaO7*BF<3XN{j_(9BfJ=r4eJ*37au~kh?6f>HJVITL&aR2F| zEF}m%?AiOX93kvXnFFsQr%BOYR5*AciFslC>W;!W(;e!KvG{AzPy|-HqU>A@3Y}g{ zS@&E}&z^jZfG^UjKxgP?#lY}rPZ1R9h=`N(CH`!PMt0Sx@U)ZF+T3mt? z#O-uxlKNrSP4MMCar(2FYTdi55&wu79v-BA7q%QOT<^crOg($bVrnc?=lR$Rd2qx+ z&dAZndB$=1eoh(!c_tp6wNZ|pmx48n8^*S2vdB$BHgPupY9~Kq?l6t}`C7~2@>KT! zmoUe8;?+XFIXwnPiMi#=2cqe>NbF>6X_j0p+*^d>5o4Wi&SGKY9gF}kzK@*)#k`i( zD=3afw!%&%?(u@|kvME>Gex+}cgMaW?%UKM!f>=J-jHt_(@;yKedWIW%9^R>UunZ$ z&aEBbEaiXRI*lE%ze5b-3)+aGUF}giDi#idltQ<`e57&T)-MbcZ4cPPGmNtqomYvt z`X0#J&e^IMN&Xhj9%cW3``tRHlhs`}WTECf^Vr>I)n_gKbmC$mx}_a3-E} zrnQzE*zq3CvrNbKrO>zH91zdzeHY6_Zb1m@hb5riz4c;q*8r59q()g~miRo{8~1p2 zeu+yI&uiWA<}~N}278NJ{?0J0jKQQavxUBw1449S(0r4T816U^>wZN;T|HHV*4QH2 zIR+u$%|w!oHT}3^sjodpEIc*~)=Q}Ybbhm#cFhq~kbo_CIk?z2Wd4oZdxzRvlMAoU;e^#L#L( zo_bcmT3jQBX{RI94Rx2Jia(!RV4|*6W#AOo(Zl$gQ9u z^2F1DDC9m5C}=7-njQ#iz85{)J`o2?{V|id+0%7GbNcL4C>;ks}@GgBOdFE8~RrthtzVIfmXtZsNVC4a~T=+gF&1Ue@$C(Tc_4 zaeAWf;2AKjA4hFFE%D*1DNLv#kXiIX(xtDo`^ z@EsT?Yd4+=`^o>tjSdOx)L(eEml5Zc??0$N?A?O2t;Bi5HTC}2o3Z5v>kn7As-=dj z@Rc|pZ?HhUxHJQOSOaPPVXpcza|R=>{eniS`wyf|& zHt~6+RW4WD_s1W`=damY<>OZaFrW2`t5_tvtO&$T;(0LHLoR9?ge>NDP19+MP!NO- zj3M=dyUCw|gV33IVBb&mWX0q_{FbQkd-#DUuk?fGG}dWzPKZ~{ym2c#o;CWt!r#XY zOLmdls8=A~mOH{-j>YgZOT=Tdd5~N3ywiym2Ts@^zdQya?F z$yglUxk%DenV>$k^$aVGl^H=sc;!g%oFO@e2R==M%-+mhr}xTmwK3)l;+YXuB91Pb z4$as9#*N6)#p(pLD-ICnNz0lZ?-7`bxB}jt&(x}`C$Gc`!J4p-q`rJG4aTf%-K$)s z9={_DSBY(_c7AHVK+cd5f5Tx=2QBc$LB{ihA6?XoSNY*1bHXL*b=5K3{Bf80bK0NV z@|Dy7W?Lr}ncV`tAv z@?*0Q#1Q{UN9lvSGZ?G+j%;48CHK1*h@2eO`CaSCJ2N;(^fw+WqHDyQOP;tl^gqqa zOJdCi7i2OQUtw}cSlW_5xRzY7N2`U+4_iz&ip9)>e!^)ZIo&?gw0YTC?B8gPrmtd= zek@i>-(mt^r#NKwXkhrv%!nRkanP=+F)X+=4gS6{@SJqj(CV!*#!+A5)#mwP-bXWf z{QZlw{`LcErIrnL6X(!3t&g`Fz6__<@;;)_IBwKu5e65tmZ*1Hz3fOdw5}xJ;-=MV z|735@XC@&0a-h1N@Ig<;ii1rjsWa~SLNLdxe%C|&;e#K1nLqbl(Lh~6j?XRDH*_aH zmfsI2FP`uInwe_(4)qmYaDN6zZI(wG@-9pacRDYT8-5AKO=3IdMwqO(J_HKpBKLP$ z$qCeSDP~^xyy;lE9yPvfd4{^W^pYFB4#E$f-9x6fk|z}VL#rQiynGGWwShM-yHfLT z^m8#}JLiFO;_$}yyqG@J0h+|H-nkvZX4xE=5pz$!RI#P86}mBB9~3=Ql)N`b#o#z< zz-3G8KA6BOk=llS8is4v8)2gXxu}2YV5c>CJ?=4>>D>;W$C_g3-7x57UX|{5r*6CT zzc_mq9aJ}W2r+F`C}%qpmXXM?2;i?X#PxU-|~18*8D>9bU<$ zd4af1e7-C=CpVSovCi}E*QwpI-jQI|`FK~6a^&Qg5PW4FqxYPY|3}qVhE>&mPutys zA_jIBDk^f$9#ljD>F(}4beD-Oc6YbfoW1XZt=OH|-QD`m^MAkm_{PPB$XWZ|>t1Wt ztQlQeuVnONuNOHzRA;^?8AsR;u0Cp|+wYr<80MM5Vu0>8b@+Rp=I?)Iq|=`ok4>Yf zS6{P_0nI4g7sqQ?EXH`1sXR#-BNS_%o>xHDvn z$JFsy?s-*~ez@Yrl*)0wb7D_fHCsEZWSpZNJ08||E=0v5&hKv3KiqaNb)u#dbNhOx zEb)90rtKl_VYakv7`0(*Ft(1D;PG1$PITz{W+S&Q6QwC3ICr|VwUks1z9SYvD{ zXjHcTB=xvhW8^u0(#@vM!zA8)1w|Ki59kY7jk%)vrM9pcckc^TcluWhkWcf>Zv>Vlm6huJ*p;*(2ek>&j@j_6@U8bLi!}& zZXmIU{_S)o%cF5m&czV_MmqcUVd%)dIHBn;QJhM@uxaG+uDmJ^AN0av)+EJ^w}`=Q zTv5(*yZm&DDCp;apxZfE7g}F@FB*&V`rK{5d0yTttP#k&_3zMa(&=0qYbk8S7 zy5d~f;1={yV4P>xU0!zEo*F8Q^Pei&WzCnxAd@-yUZGvt*VC~`<=r=CVehggALDSJ zJ>bxQW@QW7Cm@D*-!J`Ny6qksc(YF4>3CC@Sd<8F=883oWL?6nB>dwU-adQ1ZcAV? z{t>&F({+w+no$a_cP3sju25I=a0(K;k%RFyLU%MJ1@+i>`#3r3x?JPDiMiT1P_4VP zEde{S`P^Uj(gl&vv+)^gkJ#3_xm&|vW=}m>y?VN|n&iXZ&w+l^w<3!*US??yTsI#P z=~rAa=^gbRedmgPogMLGG(DdR%*C{;w%DJ{eVpE_lwK3Z!rzd4Qah?iC-vmy}&x5{;@n!#?wJ%N{<8fj@JydW=)qN0y`i*@}brC@mv^4yLU>6Y~7?t7nnG`339wY-*sVxIFNcYmG5pk(SUGtbnv z(PdG)XgTl1yS+?x`QymDU|n4=yt}St!*CQ$p)W|CmbyD}fw(##7cSN{bX(7RQW7${s;{$4ym7Srs1Mj}Rx8LXn*Ga@C=HwQ?uISd8(LAxbSjyo2f$VEl_tHSM$6Kgll?}lz5kKF-Y!Nh;YMF|7$ecN;f!gt?C^Xc=fyuZ zmH9?H;|k+^=1^9d-pLR?-#qmBW?A;4CrU4z^E)4hX3WWV zYrfa1-^63b58`##E)l!X;1~P8m~o}LSVwxjF(;p&uu=CrFA3k7E1YgG)Y0>vS_|ZD z9-pdf=9B{0Uc`9U=Ibspp6Wrwkp{)-x|EO`Xv%z2&rjz#lHTh)+pYs0bg|Qu@s;mI z*P#}=IyM@#I>DO1qp5Dlju>*!+2e2OquZelhtW6YfsFRLQ@TLpmov7Fo9ddn_+Z4{ zT(qe3Ph9hL$HxK8KUHoD^8#mRSpz)Uxl3%ab;LC0|0$tU#jsFEEZ}*o``BGPZAfoB z-m}YJ7>K*XnxvFWY#$UPdUAGSMP04`?Ni>(*jqN9x(B(8^W}+hnR$jiw2X7vx6HBy zucVldZ{E#Piu| zn47Ly68*?H)AYD7N@p}W70$!xPkMHU&Z{gHKc##~%)N(^iWtVfuF^pl7SDW6yma|1 z16{9X8ceuDOlC(DT@&vZ`rzems~AA-f_Xd}>0M@ulhvJAll(R+}o7`(&{*$(v7 z*rFEo|Is&*JCFW*r;7a^nMiF{d7g6a;NG&QnRW{|+v~=<^Th2_&BJ@AG>7WqqJiKyY> zj-9;6mAuI!yB2xie2z^{M~Vx{P8b}*`Pv){Vb{+YT_WdkNjD z5Zszh{habbk>rp~{$S<#pvRC6Wv|!Up&sKrv0tw;lMDx_8Ry}Tp6KSUaDg@Bd}Gg6 z-Le;V}1&Xm>t_;%6t~dwz>Vl^^lc`DA{s zKUduNL5~Hv#VGy?dmMJzWSrQ+@S%)yr&!!C))j9in!n*o|$3Rh{7msG_k8I`*6dvCq z5zo&OlQKv&-w*;M(!+g>iMXTj$K#3go4a8mq9%L6@glh>?@YwaFgN7)AeS}BM7){m zjEE$9ySE=C3L~7bVK;yOx`twT3+{ZmpHUtw z+?jq|nP={hyg|1nX#_qL68p;Us~hupG%EVC7TWw;jI3`5<3HScCHK#@c>q?Kl4o8t zMYNn93H>pD4r0ZH7#v8;!;zFuqSL52#7D)ln*&B~5d`FB9 zzgOJ5u&yiNJ5qK|`IME2GyIG-vUe#7^OA7sJvlK^3zb#j$@oEhX-LmP<;jo~#_$QKT7#Q-LOBr2e%o9DLMC}u{N5R zz~QONXzpCR=|Vn3n@vicdVx69hMd*grxm-K-k3jv&%)-Nk`wHXMbmgswW}vS^kdFs z4jHncwJMWqnQYZG>N1~PG_gH(!@^5f9RJu%! z!HVVN7ulVa!#2m_QBvY9P5P0HT;^)OkE5iGiHT^ye|x=ob7@sz9Flo2dzg+> zuQ!auUH;ALm{#(ReCi5hkQ>vugR-=#AC6DvJ3DZmQmXPqvrWXY$K6rBFLy=h1-_>r zn}}NHow55SvB#hNM5izpEN9MNMhJB54iC7nKI~-JOnjIVf+%X>-1I0{A03qmBkETD zZ{C=`c7<%J=YUjVbe^YfYJYTcM1mdXN_WPYr5LzU6P0zv?V0MW1L&_8%KWzTo!T{& z9?$c6FBj@dKm6lxcupR&j0Z^u)Fesgd)m6Si=^|X<_cr}Dmq0n%V3=Mk^9khnxtAu zUysYY-#aarEZE0g{!U)sw;fW@!(>=8&d0auqyJ|W+j=A5XdWzUomA30x?|`b?!h%_ zAvV5ufmHlKYRs75k;cP1ti+V>%o2O);7k!5Q zH_nEmSIIT>9q?c_=co6|wa9Yg#Gw<=u7R8c?(xAz7&R*wlkjBhT zM6Jy{KYEHZ_Y`MO7kSP{U6qX9CF26m_VIosf!(@@^0%;zTu)`AW7Df^hQ4tac2dXo@~ zOKo|F4w@=Ow2VM9V?OoibT!5Xq1A1A$vO8>#AhG+a`L%HUscLCd5}-XyuGNW*xkVm zZ@ZEUQJucV+;cz0e!M~3La~0MC+cuMd#bLLSTH#RYtK{TwD$~Y^YwJxCl}{`<2<#& z8u>WS^Dw?Utv@PSlYZ2A?8teahoj1wKnT04Ys2GgdcPD zFdNC4dDz&Q&t+h$G)Wzgrw;7LmD$o9D|#(4|4b^`B=rcT$5vz>*0en$t(=yKIR0Oq zT31LFN0abucOC-P{*)g6rZ+L`!v!(*@#$*{dJwzYl4O8eb5gO7^6W&X2Xq+3xs~PJA_hKi{$m93RACnhSSQ zg3G0z{~}?@JJfMYH)*Oz2zn4RF)#ll=bZOL7N76iHn){Rb1xhvo)Gq4C89#yv6Vfb zrF)@hR>hsW1Ju4~wos&+d0{v;%6cXzido!G8A~munK{K$rgJ*hiOT)p>wjzIg^crY zz89-CC0gwuM?^O!A8$aB%A}7g?jEA&;D)>EZ^XMgHD?cg(L_=YkHx}K^ojNjk;sxq z7SDepWs0O377u%4o|AKHrFV?;*&)nhvvtyl2o0uKu~sy#kZ$ulw_<%|^8Sw$TAqZ{ zi#Wsj+!({^5ih#MS!6&5H0qLy*UTZ^t{Ow;&dB~j+^72jc+l%`KhLckZ%rTgR5bAX z?`vlyagK31k@=yWCvsR5Hd~sHZ9_fLDLWbSZxaJi*`oi#L@erDfX;vVVcn{D7-_g` zx%sywaR;r7wg4M%MoJB`xU>J8`w{u;Ws~#4nA5rtuH-s~#j~$@NbfdNh~*0cu(y5z zY8gxt>XCu)=B)6gPljl)G#oAqsb$)rSSr1fhF*NP|Mxs^?z2HQY3=~MG;&w2Y|Nl2MQQq%PZe5BMfxP-p=;Egm?umfrN|>9?op4j9k_ z2!*)a`KXja4T|rp3Ng~(R^7FLT0{2=amIR?GJbdvwx6UAdton8uq_aGeiY#T?*ehG zGzdl4iO2RIFTT4`BT<)zqe9}4J~x|%$M{Zpy8l8Pt$iK%Xw zi64FF)%Y+U<$AN>#`k4i-vZQrI~`s%+3$0g$MRhP@4|RI?p%mXWv9qB+x(lvT=+Q`+|B(d&eRDbv;F{2!iGHaj;0QCX&~XPi`>|?bim1H18024=zA- z!X(k8X(Uosq{IK3gS2g9I-+(~#zk`yx5_Vhp09_TSx|*4Q zuhi}sH~+UZe6t2u?vr~qvpGILOvJ3Z)C4%!6HeWdvB#R65OWLEh)w}E5ch5ofF^rV zk;J?)T}6!eTpG5sFN?IA#&ikR>Ia_(L46AphV#rJ4epahFN2M1> z(*kn%*5G4e5@I|GU@(3KRNV1&Jy1X$zu9>Bo!)9)3vu{!EC$qw!rq02=-IpjicW;$ zQR8v=olqcM`WXnfMEY!c4p9aS_lI6G{iz>!5$BBkFnnhr^2W~*3z~4hbtrki*eJ#y z356;3c<*%RE2Vr(rw&}@I7e;RA#Y`V_Vy*&b&doE1Y-cvdGxuP-e);3p~ zNJ|HY!D3@Bt~QU8c8;NrB4c~Lc!5;KkG^co;dXZpNoy11k-?vN9r8eOTAF|{{95l? zP0YDM{qNFT1hj06+j>dp@{FFRdj><}pNvC&^T=^@LgI!Lq_9@JqL+w@_r$vx=lqLB z_}w-gYltUw`?mfNxWa_QGsvwV|!cX}( z&I4CRbEm+wo6v>0AtoUon=efj4`#X{vpsRGe|yF4ylB?jD3yTAE&7;1opxYj<9Y})AN*hWAeN?=$M#}lWDBk z2CTH_Y%$6e8``;dDk9r`8(c;X==O-Ju3bpdso4qi`h6>_%T zdm(z0^HzfxOZ@so9BLX0#ey~4$ZlAo7XY~$`B$wMNlPQWVaD&5H@GUVS<2p!GyQWr ztBbVt&_J7Lt^*tbUfiuZ!`rCi+TwMBgHABqRn(qXmvrg{+j)}+Oi z<9u=a{{K7A7e}++__#s4IoOePE_eOD7_3aT+|>Yyb9Hg1h96=Mh7g({U$s@fny^ zjozaZ52G=60Kahu;8E5YdMa}lWKsb#nw*9MbH&Gj1<-^F*4_VU@N#dW##VA1qhL(T z#JYGUQr$xFZWim|`<|!>41oSn@`C(pQHR5u+D&=5TC0`x^|(7{e#BK$QWe|Xu2>bs z+UAsz=xpu=^=$4?Oc^hBwerG@Zh2TKuMzVqLg2WR^-$Zr>L7a8RI{jDZ*+Fk${!m! z;Dwqq?tOc-vm+gGkLU3F$g8Sdb6w%}iuy&Lnnzgy3xI&v&s# zM<4o@-p)ly|5)HaDmt*<>+U@T_3ET!IQ@a+R+t_j}WzDQPn-3-M5N=bqsvm3Szo%Cr zw=Z*PHfQk@#-plJ0N)+fmfc38)n;#OAI3WQ;A3gsE_d`hlZT_}&(*DxT@hx<9_m7< za^{*VJ&nmTY131@dKicHt)1~e(;MFwQD}D!h-b~_`8#RN9TiBRxcB!maM64&r(m2 zJafi&L5CaUC8R>(*PZWQ!*BYK7V$i9ZE+qaJ?Vu#gSDS^8MToj(VzHITZiqq(j*i$ z*U*#Hc@b`=1Yk)QdPj2C`R6C^|KsL`OSahg(H(70=i>Q1J)B5%MK8WCtJeCy zc8Rwm>M;)PCl{$M$gbG2jXszw{;C&u49EFaJbQ=Sq{9>A;9-%At;45DhngqAlr#5S zgI&@_dV6hqO5a}HElH2~TiV?mWH+selk{S1{y7Imt=dz&G!3?VUR}OP__;6xJ{y>; z&4MucKo;L;;%uf9;QxSJE%s<;p-Z@9%^kR7+$UVS6S5QWX`WSM{lgephxgvr0?utu zbN)$Qb7BFSEk6l)SO!cFa?dm7FpR6Ez;hpYt*`e}YdHZ%{M+g@+=`Mo`ne=#!$+)Q zZx(^3CH%klE`kMnXN%ccSo)bek>>*tafDxwnT^&4)G5D^g}-|y;^RSTlUmTz@NY{z zjrD==FX}Y??|If6bWFBrV2_G^z6oU&P+{F?c>eJ&0i(33jyoKzn}U4Y{wrOb!%C~ruOtorGa;bhL5 z`B`j37P0rFhvUs0tXXqN`qYoQ7BA?@7$3Sc^qbhp zzXIs0FUFL!)D&D#FX=f8VOAvreg1I|%V;k5;Zrc2SV!26X$Yy%U@2?VrF|w~J^Qvg z)N0El52K|f79$L@@st?JcItQau91bKgR;;%l3tKoGLX=(2!UNAaYs%=MaKp3xe|fa z50c6Ent|EvVzKB&JbpeOuG$n8hK4Sc{pjOr9g!94JR1+>J*zU5_3Rx`H9Qxqw${{| z-EhHEL0)UGq3QzGb#vNL4{h}hb=-wm{2ZB!=vS}Q#li7tUMCkj8@H4;Hq>B1MGlU9 zG?O0OW_`t+6Oj}u^(!StMBUv31ExraID7h9gI-ST&G*x9G}NE-(7H#YUpF&R_jN8z zU7tuhe`e$5e&)}Xwa}iuW=J?SPinNr)mZ8$HQ@XGx-aftq8`lJ0{GklYB1&zO$*T~ z+6uSZupVzr4ToH77;VZz)NJY(9UP7Dp7e5jPyLXK!}0zNHFSxi9#)&;Q)hD2`Ty2f z+z-aR$VnsDsB51taA-shRdyDBxOJn4V;sbfbo@1R!er`%d%C6K^Tqk-l1ojjT;?EgaE* z8MPB@J~10#5lH+Y2WjYyw5@B%n{O% z@2ua7bFp!Dh_sB_=eLO!XX{Up&hgov<(%k8>;lR1zuM#ubsM&AkR~i6#yqwFAs)LW z!y&oo6~g}d;U4LzeHOO=&Bw%bB~spybOiD_4Il>lAe7$6tknw|ZC~%forCA~Y_vV7eY#)C#;_{T_Wi;4 zD=8a!`KH~T6}V^L4Fw(w^>oO)8<(r=X3xLqPbxPvofzoS;q zH5rc7)EKZUP@BV<;C$;G{MnnVJ-am>BlO9+9XnoIR6P@2*|*w%o~Dg=$V7|__v|_r zYlk#re(Aw?GqPBF%^?+Ycz0YrGE3{=&e{6ZY}_}Tt$npD0q3t%7d<*o`=KxAn{Vk+ zcy+Go{o!bAzs*^%^>6i>{*fqJnGB!CvUH+G7=6Pvcok-g--SWA>KqS^KaJWnzr=(EC{@S2w^F14rIubYF*#T(`UuPo&4dcs`^T+5_+5N&%%+o zj>^H88XWpeJZN{V}K@0RFAw(chv34GjV?;TLsF z-F2|EiNN|l!PG0>tePL6jYJ=xN^$-wm&n#5El`E$dB8YR*=U$0n({qLx>8@hx1Q)jr>Wa{76tfCZ0 zhoeD1`Wja=P&D*H>ivwK9r8fM%q$w+iP`qw>a1MhKGdL9^jh*rS1iMsXSUEwrN?Z= zc##INjE}bMCS~`PB=$!1TZufZ$Olqzdk5d^k++n=cT&-xyzvvg-zdwUr=qwexw4zT zDdUtB{8~c2*6V+jTG7e4`6&xc>eLX)JCo>7NUy!T+QRg|vpqfwb~kH?fiDwrb_IW? z;;!OhuHjA(@#OoFN>`US%(C_5C2{izz1 z*z87lt0=VBg}^FcgR0^!=U3akD#dx?^>y<7cng@cBR^_FKY6!}C6Yi-(wPlqIm8Ms z%oRx!vgCOV9%#wf>fbmnKMo8+Yv$pi6CdQxUxU%{H}_>;HC4t<55>zl+1T^0uM%n< z4ry36qyPscur>Xd-g8g*NUAcib~FZPv#`r^wlcj@EW8=#f7zRr*B#<9gge{Dy-z3~ z#*)uW{hdi6&y)i8cfoquXz;MQINCVn|9m!Ir8E;(cT-SMz?ffcBYGBcFMd=un%(ap zu60eu8tO!R?bS_u?VW`6KUjnP>Lb88yEQr7wKyMFcTB=w))FJW4i-I#w=|5-La=)W zF|vendD|@PzI0jHdOr^3<1;aDwWZw5m|iX683-}HDJ^Ui0sTp7(8k81plUc;3{S+v z8q3gRQZ)4SLyrC4RGJ>wK=EJdSyz zB#(EKTd`c-)&tiPav&dhFF)`If;Dw%3RX5(#!;7bY3&@$`Y}M!OX05Kifq*T=cZJ2 z563rt_TBCBm9`&<&Hki5{MH4^&&yG$&$_f;(Qak#r5JQ(Y)AFDs5n%_VZyR3bg24S zNw22C4A#?=${UE(Pl+gao<*FYok%lDMo4)`I<=jxdJPuCw$g*qFAJOd zsl@tOi3r`AiIeWc1w`T$}>@)FNT}@>7AfIhQ27agMEB1+zxIZHuMm7tj2GoS?wj~vptVd&8<1hrb zpchx+3~Xu{jp^M&;Ph;c%Jf|(4h{3D6z6`|ie&S37O2NQ-Q`>>dAy$`RIgMctIh(53G7BM%RKdvUv{L-nLWP`i8=FYc}i` zrz^i|hoikyHfA@Qt86_Hfxw!~)$MjDDXXGzm3ub^x6Ufv7sg;Lcb#UPc&|8eud#Gd z7REGgAPROSpnN0q#wQ~&)-Dmj%-drQ8w=+SNf4`9=Pr=V^I7+B)Yse?h zL{U9E;m}9JJy806lzR$udeG}{o2S3g4!{rhi-L_YQ?8 z`?OU3EWFwhg)arc+?O1$DvzhvS)_ZVIIoUOlh5wAz;a^mm)kXxR|Q$Z)rUQZUOm}` zd1Lib<_ED$9%k-AUMtUYy;jPEkwMfS%fZEFYQ^hVFlrldx9(=Ba+Mss7YFE}*>sB1 z{aG062x`CEuT`*uI8hVs*EBk;Y@u&^@n!1m%a4>|{}}AtoQ0jAYlsvddW0>Yw$a8` zBHcUz+vaBBkX;`!mHqpNJo<}ys)gry4ZWoJPM)+B`^Z&@U!KVt*j_kT(`S~opz6B2 z@GFbQE}sn6<$>Z{VLU4CrK88$P+`luD{yQ&mf!Ife$BZj>%$q7shN;2Q)~Bq3fhQj z;=s62{6jJ#-#ROo9|oZIJ-!d=oh02AAMP7zaPn*&6xR3VZe~1c-XRX%&lloq6iVpr zbnjg_?o-!5zf*w9^nC_CTz9J!=PEzEWc?!+Fzrul_GMLB3b911Fyb5Lwd6E^D|FhD zgTi}S*<*+YG}Na4RjZ4Fp+QLF*O&T_RhH}t#@C)X_%X#a%l?Lmf4*_3MGcNub;Cq#`&ficNWz zi=F~j>LlF!=%>V5`(b;RMCeW4sXlno3ya8)lv9pNCKo+%y{R)TvFxD>RUBsBtA^5CK!r)b}?0s;%N= zg&L=FV7TM7T%(f*+U#b2sA8g|x2MMe@ui}E0ZPT3V7wT~JF(4VW%J(<1mDl5|LGc~ z8h6!`CT3%CuQFv?p9pe7SmXVCsH8rRgod@&!1x-Xn7djHb==*1-BKiuqWARFEOd42 zAztxpr&05$*LD-p{ADcO9j4cOxg<)QW7&&j;@Y7x;!)LDgcN3AOOCU6S`mXCPkDy5 z-l8V8Ox^pZL)FMzB({mho4#qtinSASR@1lQI(?1(O~u}`%m$JXSaCRb+eM*UGRqf zlPL84t&`?>hhw2n5OQ12FsmDvj@0p$*&?~SCd%fPZL>Yazi%w*rpUOaN+7*L`ppEer*^g4qC>*>PrSjr&)-nO=3{rB?I=O?Zkpd(RjW& z9hwkFG2(3$q{C?_Y-A(!enz176#Cy;szv&UFf44Jg8lA&MWI75E*?*!wsu=_`inm{ zY~ucB=lbGGpbv(!?<<=3Mj1K46Qv6^xLa{l`8wSltGJJ0@L`&wZpHeRbI=OCVtIPH zH?iVq$hY*RkNv6De<6rGk#ocL&@XQKiOO+K9(rE;nCJO8xkiSji?ky>EKy^2E_Eob zYt_T8pghlkcJMh_*T4h&&e3Cch?(-YUJ!zhacBQTxDt{ajE8gp&)H*sqr`m`U9&-ro-U28pqr(Rh0`1CQM$F;I%8KX3-tG_nxWSi|(C zCSB&%;i5|ONYoyihU76r#GbWbD1V&-=MH_vfUY4(S&&RmyKdA)3B(ibmVa5?Q4I9* z!~N7mT-<3S>KJ-s7i+-|p6!HNAme#XLwz|z5!u)s=G@1~j;$-=O5O2(PCN#E-KV&B z_r~)@(J=UQN)D(Wj*afrwxb_?Nkke3^r~EMG~Yc=JL!-Gy;-OuA-idpkFmrY#`%)N zI;~{~EBG+ZpS(88PmAa|dm;xHWJAT;JCJ-i`ZZKQ`LQ7g7se2yI~Ac!e;kZD1SO9h)snM~XuM+^y&oPi@-{ zqU4JgjHpe&v-=ih-Ssg18bNQ=S`$?BQqr)`sB)ZJ&U;werPKmr$FP3Z{V2UU+7ed8 z%HD^@XjSd3h^OXY*r5q>40j5aGR_{WzRB~*!>P_V#}&0wu1^iZ&e6mfT!ty94hN&h z9qQ74@KfSjgu*M8yZ>*;DP0T0@LHc-_e+bF$<-ndDrdp=REZK(5DDKX_GM}1%1CNf zl-9|@44Voie`OS|OroCQm6ytZ7Ew6(FoQmE-<4XI$dMpsed1;{k-LF@1QXK{J++QV zFpET6V!}(3>WZjm;kZuh^^oP&J zr;J`opZCP{h}Ye2Xrs(fo?^(z?Xo^SUlE2-_-`4RV+Y|9j%Ly?%zI3Idcu6!C7iG)e%FdlGCdEF@z z59x(hVtGq>c{dzqPNd>d*BeUzx!m=bmV$~ucNP04tn`#U$2Az2Q7Fa^bi?<48hEyuB~E^FgHaOqsLxLk zxvpN!htZh*OeL0^@cq3Ogb{aEsdMM0;fF!xI6JC_s2sHxups}fzG}ExwxuPExkKdo zIJNY!ffWui&WWp<$kV-;qZsGmqo&9YTLxm)9`=LrTjbW%d&H<5cpF@h^?4_n-=IfW zmmjigIlT-L=+`r+xiXPl(`L-c4+8oqiFz8PwXjxdwI`>-pZ&E*n9_S-6lzu_ z=jeNmvU5rl{T?&Xc)~>GAUTI)8Rz}YXDF*zMdCU0M!>Im%IJVd)MuQHPAyle)rrKA z(`jgwwN`n^=Q#XYDsC*>pj@38N-dKVY&6-Us9yykA~hM~KU`5B_6tBjIyI_tYK!!a zzDVB4o-<*9c>UND%ljpAuRL6YcXG!r?v1ZHHABQ7cZH)Jy`+z?7TFp%^c_#$Sjif( zd7CHhThc2?i4_6#7pNN)gpo1DYWQnT})~bRT=N*i*`N-<3$D=HB$gA(SDufg(IiM&>e9Abl0i}nj1q~L^_su7ylT+ia+;|qj zc@<~gUZKiS`UjnTkcy96la;5$gGUhK+udWjQYHuC3HRT|#O_nd-umPH0`~ATek*s+ zao_49cRBKnMR~3#Qk)a<{#SySzQGO6>LkMW%R=Eo&hsTd4NR}^7PjPaXc*@M!w!i@ zr##TAcQnQ>ohh1K;@K+?ggAfPYyx*k{mwa8iu3i}Z&aNa=T_F-0i5Ej@?e~QGtLcr z>^Hm8+zNq=^N)~W+EB@z8aTw1-k;Z=c^7~{###NjihQ?g5bCpj{+HE8Zf6yY<5$>U zdzi`D6GJec{owRJzOwBt&X;Rbw=20&)>7j%ne(Je?hEDrG|gJLu&$W1U55&Mu zKc9xvrVW%G%fm6_C3%oHIx3~!)P_2lf-P&D70W5)A`-Xn;<8vtUFnao9Z7h!?xkWJ z;e)Fm63IpBCtUt|U|3ut`~Ni2sID76wq!n`H_+R77svq`d6!gw*6it%-(Z53={0B8u!hR=Ul**}6oOeYVst+aEG!W?m%d=l zjZ{TVt+1bQK6RpI=?-Ie)|@%$(bPaY^lkudvuD|=Q)}lmAx1iadJBo>1JVo{ecCLOW7F9R1f3w;Xj(+j@Egj@o4*AsG;1DekJSkGf|$`LcVh|68?CG8nOK(gm4%8)-Bod{tG~a^ z#KFnts_)&Su$Z`|jc`%5I?33wu8X$_Q61?MiJ1NwnCKs@ntCz8XTP_+jd?B+R~YS~(i- z&7LL+4}NzS>-M@6*H6UeUOD1bv-)tz>8f9D?Sx@aqPANsOB>CGN6#!-E48FwEt)8SIzO8v<^ z0vWsq4Y%v5SJ8ht?Q<$jKTkF@Bd^!t3HiP^^X1mW(!R^daL+JRI%N6b$H^qr?ky{W z9(!R_(m*#*k2o^U7LPJT!g6O=R854H(^fG$+7U~eXmGyI4Kd&?`2d&Wa6RFh zIFRoIgYS{hxxNtDyWMcj(4X8vTXA&1FV;ueR*LhULj~#r#`zlKysF_ZRZGTsJLCLq z%LG5!as8_*w-3diUs;GbrLR7>A`ID!>C?TUpL$Bo2<#$`vGB2t+R%c0 zp{JR!iw;xoeiVr*shOy;AX7b^=X@@;hCNEgtDioMz{&0z&}yfsf5&s?o05*7U5eDt z8b+YnadNz81gY)5grWV%ROIzMs`|S(1X=V-iO=jSSDzY)b0V2snU0EK8$T>&oJ%}* zDkb4wDC2qVv$>7vo#uw|%o~l2lf>NTPMmva@T|%vv3;@w^_df3Sb9y=J86%eOX6U4 z?}upo(gC3>iK|ZeAcotzV9$C#)Lr8*T3dOb;mom>;(X+Ev3fn@>^_$Hxu~JKI^*1D zelGS-->q6!*9w-eb8x$QlxkKjcYI=;lWQicUMvg1ddAtmXu9gokw8ploNrZIud2Af z9C$7phsGRHd3>XXW>7Zz&3~e*K7hXPKeBLgdo6X>9G++5%uQ#tRrg`7`%{&LEB6Mg zyK%PF{$VC;pV_Hf$dOPI={K4esIHUD{Cq0|SAN8)ed%M>s58BHdocb|1bQW;BWp>T zdegOVbS9Txy<)7o&cQJ3@a?1mcC3yp828lr6#+bB|E( zW6>HV@uMeNGC%MC*HnypOC1>Q#f_~QBIb>8!bkFH_LZ&>?T*^R<6HtBH$N)|owCEa zkT^`g`$0^cW{)CU*74h3i>)S3sAop)(WYZWwKvXaQN41U$1hu>-p4rWGtU3!w^1J- zX^Fo)&zg2+s=jrIKQqoA7S^f~?&L0GoO9z1RDWjCtCVs67HFjUS`vs$5@SBJuWBf3 zr~Tvuy^0vAI&v=<{{rYwQ0%7~!rt)DH{$cB@>C^0VW>TiUNtM{sM7ZH9XI9o`)yWr z`4oZ96`9EP(W#!yi9|+RCVr<}QmwI$#Cu{IIpUt`BmH*6+tI5g;koL4od^_1rekjS zP1WAT;n;8>4cEs_Q>{q~!`VlvAWUBBOiaW525YQ6tUo`}Cvi_QG#7@QWLQ%81>~ym08vc8UM2IB|k!II){{&FNqydXcB`%UwI@PY8~24*Q_lM6D(J)4S8iXWP13+i6}n?)A&U z;SW0P@iP%`xhW1E%C9sMw zwiG2HG;ESG)W8!5k0fHxpIb`LKQ7c9PUKv&voNuAB#x~?_=XVCa=snLYZBo9vsg5? zw?)ktb<^7xGr2v#yN#p#m#TOEmamdqP5PvjGiBapW?1GZB>$ql&o_ndR6nA+8pTlD)b zHsq||q=8~sEgWy1)9`k%o-(0?+-9FtIG!_5PN;+7(IW*dj5;by^{ILLfP8}6D&=~r z4;q#vV*W>slAh-Q_k9}7%v-A@xN_I^X#z&xxTow{;Q*Hb31}YMR80GAi)Y04d+GNV zyL4mWJv)ZGM{4or?^wJn3dfUGca_avc9_qer}?MNSTKDo{Xr_nxyzwj>Voe!_` zhm*{W)od_1pL;->x2ie4ZQya19JxEQOLLpMW5gnIW?s~lTXqP*pzIt(`K#q-$pPG* z&xT`5jeJEHfX?i-zh};se_99P4Cm2?Qi;6gb08XrXCZmzRk?O~5Ix2-k#GK6ZpU8r zaX=={?Qf>km_gszn;DpVt*f$^^;p~}`a{exRo=OfCqFM8XS>@dMp2=VSid!VrXZBMoHPl&auUvNU!$aSA+-g}* zIn}}k8z08Nviyns(!~=aeWNg=%|_YzmMcujshV`9og5?_@q#nX`5Jw-^ZK%W%1Ms5e+lsGU z6hrnkIbW$u-fFla>V)9M)J$Z}@Ku@}3&G^Job^}9Q05H|MbkAIxVWiE*_sv#lNQV& zC+8`nCWWGc^+vU#<;waI^zdDihN`wJlve&BxXOL4plWlJHphc-{7W)stsJMU$q&S` zwn@lOh*7Lr|KDlHIc}2?O87&6`fS8u@ZhS-{O#P+XV!Y7tOEA8@krA@nALph9Kz-iP{BTY>%(qqUyBA)& zuYNM$2203K)2?w+>;JIEE0K%#rq5Mx#@fKLdoKC$)3s__;-Xc!hc!D(-sZwx#ka)n z>a3UJ=Lf)L0yW3O&dGyL1z>V3>O-#kAvYfw2$P-Ey>-%4O82twwd|Ls zP$u#gl`7i;!m#f`2G)C&E9tYs(48~x-^Z^hQE_2dS(Z*8jvLA+`Wqg6k%oMW)5@hB z?q6?9h3H+P^tB7d`)(;Pi(IcbnFM3ZIOo0X={9b%s4-JrrKm~gCZ}+wwtWInZC;2ck!FdVSUJr?g=0r!LKg+F`7s4h}*d z`^0BSF-pr8!8mF_KHkqs%7Z(>_<11<&fAwL>quoql|tT2AjvcEAMG<03l`_zex*09gkbU!t@|^F*2I70ut6ou-c!gmjIky3h zFO=J?bGDXiu(!iEC9X#_JmwK^nMR_C8vi~ z${W##o~zRjTEm`v?i;l|)w&XERH?(=*n(%OeIsq)H--B?-Ct=JhOtlKKE>!xyXCD5 z=&>7|OF!agvf;e|Y7J34Yd|BVUXwt)Qpo4;-BU4-55(O#a%_yoD8nBI;z395^~Xji zW|=`4f194>CnqS&h>Jg1$oWg{MM^>ieUp93=Nzptf?SM9yEW((aB^eYyamQ+3zrA?yduK>Y@ssjJaPv}iK}A9JH%d%vp)%kskR zYn-F&*F>D(=Lx5+5eT=aE}k7^EM&x4;f|HXnVK`ujrhh75tp^g4ZSf#kMpcK$Be|8 z8EC15!0l)YB(b-?d_)Mm9QtD|?Kh1xSpOT>`S*Qk{O~0)IZMc;=4NMn|Lz3L?nDfQ z_Mwq!s0n;_Yw)3uPD#5B)>xd&*>ZWZB=iR7B$>-pcwb4oqCM}sNgCYi+g59C?u=^0 zq?A2Vw86yZHZ3LRSc;?eL~|GXisyXqfCR1X1{XxKj=HwmBJGP&uGm|L@p<4z?Kb*3 zf7<`(Zml-r0Ba+K^zHSpYUgLUqt!h2Xv*Ge^@)*L7a9ZS;nl@^?$4KQoEuC z@%XEPnY;e4ofo%xZM?(|M3J*Sqp+R?Vc(-5=BEe!9hKFNA-+%Eb?Hau`9u#GQ20;dDBSmHs{y>XizhMU`ek|Hn{nQb&s{5O19cLQxAw-K>J#1TW)g3+kG00nXhPf zTzAIPWDPX}ytLcOZuTUTFC=3R&)v!}1M-p?95g)&Kn$&;OIZLifFKtpXE-9HdT% zqlFyxlR5rT@;~$&CpVOu!#a!H?0q2{u?E#4k2t%?p|Ua0^^F6>i1js;lbUkocRhLP z4j9T5<|cm@at&eR5?yB6jt~{v13T<%t`CF&K-~VOKf_AeXc3|7+)stv?#SxoU!@N63X` zVJD3qSfSA^Y7MlQshXdi%DHT648>Who2J+^$D}rHyT0myebhQXNZk7JCaTF07ZhzH zCg*$=by{U&3f52qEdP}p!+Ni8c02;gFUe{28?VyI!8oo&emL!dRbkYwYO+Zlrw(-$ z@;vN_T_P7%bVJ}2^50%dlb?3Fv1UR}Gsj^0h`pz7J;-4`#a31sL01;&%z#4)pHcQtF`T{f_u1r@EV?0TQ-ga-2r*^1r0AfK zKhT2QWjD47Ct`co_aHx2z*9RIU z%epuB&+@99l)mlVk@S)p98Xrk;k7%uK8)quN#?M60X!GPUj46~wF5sJ-}+&Kqi4v8 z^wU+o*!)6|x5SzG|L&dM3vu07O$&YXlKM&5ti~HpDx_w$Z zh0oN`j{G)9)09EQZn#@WU0~DMXi9#+uKb+Hw9H|zo_eEU!+&{uR!;kBoZr$EQP&uY zoDPsRt;u0kIUb|bK(*R2OFZKKEWaC~eqL;Y;wR*;%p0W+plzRjA>P@rgSz7v=hI%r zV^x10^=)g;TRw<~SnyS@V4NIsjT$J6ZpxkKnWvs1Ce8k^JUY=8#|{zql(|DTf9#4) z`^fJ)c$M6m;)d!4w9kQg@>xH399T_l!Nm!3;(K>wE+mKlIWO7h06Cmfs8e&$OhzsA z#Pm@9UW-98KHduzc`lrF+sM~*cu!4^#}C8ma{4}RI1w|bo_ivm{bH=!`pdI<#q`zogz5g7==x6d4$Y2N7b7+U5aWmzJEj;_vse_rONU86^9D;g+qgu%AyhqFpsJry@ zx9A_>iGk!>=;n4&)Ew@GIt}G&}P7)QcWwa@qqsv%~)J8}q)6!#Q8}fZh?0mws8y zB!21{f7hA?8u8%mblm(*JrsjZV%i>WxPE0%{MsXJDd%R5K9WbGY_0Y|9Y3^xO8t~W zN!ky4$R9%fij0#{+6BjbQFw#ANpmx_!*z(Yze)awm^|&%L_cZ|QqxUyOzWxZ4_BV$ ztL3+gkmKD_=3`Hjf~ zHfph}Xsb_c>)1Pr!kMlAxGSCRbt_(&pNc-@ulN;LQCnOu8HqaNFAaCmp01eqA3tI9$Q9bX ztLV!clm9mOn0AU8ZBLu5p7u_Ao3#)NeR811)e$E?bKbuj@5GO7#do6^r1qmvI5a>k z7VNR`?)%ZqM1;(U#-H)rSFN2zm44)qwB~1i2^V7<5vS!r&VdJMBA+v2OL?DGvs)x? z*P(7H@7aT)YecKI(WsfrvoLYH=*3=**N(ruY9+$JmG$q#yhFR37U^l!sG(1*xA3Z{ zw?7Jd-jEaT`DO8^X#|$lOMsL8QL&Nutd6z`CK8KM zTezz(sOXr4CjKtUgT2m()Fu)eJZe~H16O1{tVkt0q>?J1z{jkk{%eHIbiO5O0|Ou6Q1g2l2PXQO5P_zcW4=_e3NzPnuRU0Vx^J zL?6~sCbgiR*_nHy18c6gk$~2LXGO)xAXqO>K(6y1F^pKuxkD0hvDZ@JRqBqrt&`B= ztBsgw;0*oq)Dq4aqTLbegg29t5U0~(*d=cltQ-9|ZvOk<|HaRHyOoMoVObdYgIt>D zJIW>H`_YcL^!EB)<;6i-oc&Fnw7ZRDO4BVE_J^D{U#rQ;v{n3!c%170U5vc3Jtmp=h1uk}ko?=6YB$8k-kIpcwddYTVs%kE4Cp_@yPOxM#Q#6zziUzb zteDv_1)krjmDB8u__Hqw8_MHQr~et@u`CheztHCxo)s_i6W~sN6{mY%w7Sc?_iY@$ z@46^f(9Y@fKRX&<6 zv%98?xEv=uwN4}-!VozAc0t`e|JR55|M&Cnx1O@6Uly|8(4U&^mj-|KW8JGbxF0+s zm%5#T8}BClsvBh6uzVK$$o7Y<2=_>`;C>^ z-4?)}vB9&|{pDtdIp|LN#CGT?3v6fM6W7lhG?i`Mr=gfOocF4ZZ2m0;YiQet)|KT# z`(zxa{e4<~5wTU15Y4mDvgoNe{g`K(=Ov=;P0^{GzLu}I);}jy#?IIIw?&CZMXhFx zJNO;WG}ej}by&OQ@9MH-k0>A}tj5hag!qvAcP;0F5Aa-c*d*GtBNxze=9m`i#hf00 zv9#1JGRYTR&iP{_zyHp{oubpe8Ca^J=F8C|;w-VnfB9+}>s}BZ`c9bDG!eHJ>=R3J z*%!N*0PBdkC3j32yS9k=XFvbhnk~nAX5rRL=0}OI^2AhPjx+L(_;r@|8{_;YA*Y3NO>!V{UByf*3|M0y!1r{|-XU(u zSp4L_^`%*!sJfjvgGc<0Q*uN{&OHs?&pPnd1)^dv_RLfGed^8^ziN{+)0sT0aZ80J z*AKRt)WdDJO{B4Q@mDWk{O>d3#W+_u(dX+Qcq!709Wi4$r?2$Jg?YW2RB&5q3S7u{8{X=0;fc$(h1I=k$!?>w( z-OMx`?wtEt^Os+#jf*i9R{>eo_FXRgOH?%@?nUP#e07bm$M zC*Tcjo0auScrzE-L3<7! zRwnFp<4}?HrA`aB3d!1PHskhfb+SZk|GzjS@}GZ+660S*{udYZTkR-%_!K1qI9A<21iH&v`+P1Tt5LS2IkMC(L%3~EFTh-FX3xQWha-kJaQ zo`zC3bHuD&%!@yCl>OLC`kPaD$e}WWz5Av&|K&5UHKeX;FrM-A6XLBlI;hFT`*GtI z`3a}Es&7-vkVRYN+Pdd#40^ZxcDufW30oGrJt^ zBh#lj!*?w;rzW|{A6MNFx98vb#)SH9)S<(&(3CzoW_XyYyLCUNTxZPoJVxzeQ-&S1 zvriRjR|OUQcgH;$*Ij+xZ9Veo>zc*ZS6vS*M=P$|O!^{!R?EgguEWDF$`18uXFive zK6~WM;j@uT|2**Y3hAe0kk5eJQp?k2?B&$|bTPyTA35k=G8$IndE8_odypq}D}C&< z<-O#=cjWP^&l*l>BiZFLb7DQ#NxZ&^jhCt2*OIlPA!kJ4U=2F9qxOXDW-+K0=gw&V zM?L3>HWMRJndhbEq-c?IE));e(5E%_6LZ%ELZ3NI)?Ob`x|v)nQ>YVkCP*X(dE+(l zAjwtJMBTaUNwL>9$!wE|4r70ZyfhzdpNN{>oMB{5j_ZOZa%8+C^heVdISi7UOP$I6 zM(%yT6uG#mJDSe@m(M)lQE#=`0QzS>>sqhV)ZNSWV=I5dBBM;ztVcvR#U59Tm%QcZua1@>~wP;n(_TDbC1Yv zwP(YepR?C^vm9F^13l=U^|oip;j2=ia6dmAA0u@)C&PnwHm_?V-|8eGlfL4>p+WNQ zfdp*go;<#@xeR1ppWc-D)uamYxCgb=xo=0g?!kE6)OzD*(Hfa2i6-ZsegYmrYX2O!QRc8KCV#5ytEr>phTYz@zr{^a661`v$2qSxMpxec?TF9Z57RabmR1v8P>ub9uysph zv@Po!=Kt13EAAeqzUr8TpY+K~_AOHTrS8Ww#_H`WELFRHJ&8=($Fe9)^{Q8dAKa@N zn5wT2=V38z+b6cWy1;xn0+~bEdp1yC=Ptrdt_=p3%ZhpPU{9N0-hD~lxtNK4+}lRE zd*suz>Hp<2p1X5pnnxpV^CBtOe|mxHl|Gs zV!tgA;nav+uf`y0%5l;An=|qUYT#~OQ?6U#guyF#u8R7}$DdrF($AEA-zd9e66Zw@ zk^jvH*CtL;ts7_I%AGg_CaqCh2JA=EGwjKVJoV+_ldz$k@5iL5WjA+XAnn{U-$5;# zmj`Rw)92Y>b$H9=xX4;x`{0)9Z?{D_%eDESs_HFo+L`a^vFD+DnUjfg{M$W`N@f4- zbPS}gKD23rwCbJ;Bii|3gSj$)Kr-iJ$unFQAS>r2q6_Vu+IxbWH70?a!SV2X&{^)` zo#w#WOQRFD<%0gi($TiVQeTNWspP4<#CxIXS+T1lxiM@RGjtQ8+%N#wSF%5Hf2Zil zo}fMZ?-%Z^6NjtMz{o2xSWHdc=Z8Jf{tx@z?}CJ}vnTfZ5(k~>Bt{mJ$G|3<^!;(- zEHQdbi5DxmT_CC_u`ahU7Ek(r5XP3AF>A?OrcP%$RZHC5f>;zy-Y*xhr}=8-zx|Y0 zdl%KaQ5K@;+pA33rnS1bXMJZEW&)QmkzJ1KI=0N@0tG^Wq*(>rf0&5`(LNtS^3r`9p(JY zvg94I$(xk_?!<9#vgP8hN$}=9SiefFw6IU4HYt6zr-fWuIRW43H)f{vk;C4Tub1bv zs7qt{k#)IIH^_54wW4ghIE>s>)WvpuA%443`(Qh{zV}`e_1M>QWBl%aV>MN@-S z^v}YE>-_DV4yyOV_hZ=+>KC-us`=h0QO@&zdR>nCB5Eg=aDV0xj8zYH&BJEeb7H)O z+PQEU44J22GBHqZeO`zR<~s`vny8-TbFq!DH(Fak_2`g^KeYLkIyYrNt8^4_Z`U1s zKz`qm!WkIGOL;5gi~~vN#JJ8@lPn`zC1NJ+*^Ie-Sqkf^^tX+s50yEbFX(!g`R2@a za;hD9|3Zi@{Zdcvco~G|huD8Ft1OE%ePK?Xy^L0GMWp)-R3SdM+KLMz@sS5sJ^RZY zR4872aL1PV(P-Frq4-6NQnPVUXq^!*(%jrJ>=ZF{KF(sBvm5-M6Cb+DQ_Nvq=z@sC z{Ng0>sg*Nyd&S@xa)nR0Gm2-&qOJQS(e8^obTeY`%k-)|P~QXV^Zw-*jdxB|mxg2^ z=L+-sF~`-y6Z_GSxzhE6CslRCNvOQbPUNjqYfsvVjoiZzhwx^8GYSe9wJ&;E)Us zNx?|^C7<5wrEzQ$ba^MXT0Ki%KAeD5+I(wMZ`qXbm*5>eY}YvHo*sq5B<9Y?`^ZPP zLQs*jCF!PZ<>*Xqt%A%yM6MOiFP*M(Pplw@;_;IxJQ;aJ zw0-7+h3%u@W>O@gE;^B)DiXFPTg3TB(@}Oe63w=65gKWSN4Zhhda_WwT5gT(?a^p^ zaKC8Ing15#CbH2#B|i1^q`LHBR;`_f%sjLq2qMjA)yk*;6dHXJL zDztOisS?@mW;iTp=ZfuD%N*iXKhak^#iYrD8>mfBe`RydQwE;#MbA7w-?RxbdWARQ z8?d(de1JSK)&on}>wn(1gN$%+!Qk%Hb&b%KeM}wkjdMpkpH`Lye;lx?RWy7xFGbB- z_IT|Tg}pN`3*UJ*_}m~0*Y_S0t=);iG>gL1h$8Wv^ZdPfMnmhhRy^o833Eoo;F9qI z5y_d)y38|EU!@C=1)SaDeCCR{?P80k30_Qyz_zNB#^dQ#pHT~q#IQHFG*O;BHFP$$tq4q?^5}z8%Wk;srvvD+RJgUeqRqf$7 zGYVeBriC;oxA2ch?Am@wjF~ePzKx>rY~6m*fY^uTC!+B7X^vR`#S{jD98E)f#g*O@ zkYpZ%z!81LhbQB(C^?$B`~*=kU_8>S!x49;wcN)U@*Oq*o!=PLDqrpOi?gn@v(5NQ zr7@S+U`!$N8dNDQ$t(I#+iT;oD{5+RE=p+UTkm$LUOIEJgm#|OaiO|DEE$bh8+qS0 zOtm+SMl@|3<2Xsp=6vx9zP`@Bry5?5niTZsJ|`Ng*UpgBnETVW(RVpD#~=AW`7AD6 zmLUNF_(MB?Y`a%(w+o~e9P7QySIG37K$LNB=hn`Uo*4lc$nR<58Yoi?{P4(?JjV5H zWO;!%9&I8PZ_Frp-_-*)`J7YDHIP3osMwK6jynT=8O?d{0w?<9T@B^>srE<>kHQ$| z%JTkWYrOqH{P=?>Vrku}s8}9}KGP0~xlhgTWlj_tU(R6;Zi+EJ(TI9)DIz+J$HNDl znauyDZFqJp)>ewf`v=#xreWg{R~m+&%1aUYdIFM1|LdRcEZwHge&K^iet*-^wMz#~ zUxovm`FXocr*x(N7L?L%vtK?^pLffqZan9~x*t@>X;X2Ab}p&1Osz4Ic>(R&u!%-Z zB9GQUu3to3s6S8m;yQiu1vdk=O}rm<=U6xX*hF10)*tP^uufuLNwsKBep%)$yO!UR z&A$i0f$>JA_NDU7Yw9L2uIsmGql|D5!Xw5WOAalRKWOuCejl@Ei85$`Kbp{2SFSo! z+D`RByDQWm(Y2CIe=|X zQ(sy>wZ^B)#Kn|<7eyy5u>5x<*4{cNYNwi^Rsv_>r>+)rb4{qD5)FHM3z1ng4%@fT zw)4xhi@nCep*RZltB=-poi`52;bG8wuvQFMX^LGp{`JpQKJQeAUY(90+Sz%TZs}wC z+v;1W73->3+UWgS@{(~5$LPKKqjV0^X{$reOVx)@HOw73yIZzG-Eho@+V1RG%uG`s4|XTd8e1BQc3_U9~yY)q#rxaDlasjmk^; zCN>aFSUbA>{*>$<6@+5eGzNPV$?464k;=S#z4uCKmKcOy^fS-;&5;jw^KY3WBxY;m z={3I4{l>Y<7%%x{(hQVw9=^kssdCnNY9ZZ=LH+h4WJbIb`f@Jx@{Qio#NGk-OQNu= zX)8Ies|}8Ii$dC>8q)Es1?sis>)sEV+NwcuZT(+gC>o*9k-f@4oi?KFeL? zC2GZba=@&svPK1B&KNV_tE!cO2ZB+P`N@D+8|CS7!3bg;GB#w1?7lV-GmBVf=$;{m zlS}PHBj)wpqGcknCi(iDmrL}J)egJEygGS1SDDKI*4cC)MkDc?BIABIV9VPmmtTTnv6=hEn?HVgo4(#+$+}G#Y^k3F5=?@z5NN#_CJu z+TFdzqxN-j!@ikTqAI31zMc9yQ>qG`DVD5{{p&aORobOq?Q8{i+PUwGcBM_mr@&+* zdssi(mhRQe=6oW1o%ui14ikwLyTtmy@*}F>an4lJ&Lc`!tGyz8(VaeIuR*G6*3A!J zxo*|VMP2jJ51+aJcX$^b9*yEJAy$8YXm$#-}ERa;3Q~ z8f}WgiJ|(k$J?o>zA*|r@79n%&vQ>UjmE%Q*TtNWi3rg~qe4!O2(~sszsAhRFLxH! zE+)j`kt1$hJFVq2Gjtuwd0g@lb?)has$2fG^SaKvRKMOY3GG2 znw9EL2*!}bjK};Qt7k&oq0hVCF``IaOMTd8+^g3jvefvmzW7DkM!pYK&*u5TkgqSG zuJ;Y%2@ca&v<@GnI`*a(A$>(`emga~b|5n8D|TL}r_TFGKg>HW`&$LI7jq4TzM|Xp zXL9`aU>szAePQke+30i#ez68xaYBi_s|i7C?sMzpEpirlFTY*jjLq6yS-UE+XvU1s zJI|LT*Jq;GhP|st$+Czu|Gmw~>HQ#BnsN5*`Pdj_cAhRh6Q{$_kMkVe#>vjcb{O`X zv;CF&%9JWrcwH+R=MFWIm3x@OJSiGS4}BHgx|rccw;1Ga-Y*a#3`pq z+|T6a%sr}&nmrX=^deZtY%Ka1Q-k~HzwyTYiM!NRgREdpJMZt`qqNy(YJug`mp-N* zJ$Vm85}3biCMiZo4;V|5RW)yXw=_{^xsh}Qn4MGk2iaO$n44)PZZ`yEY`}5M? zKLp!ZBMQH-l_!UVqDY@JS|_&4o9{yKkaf`|4(p`Bq+nR`?)cC%NA_o|(tILqPd z2QwcCKMk}l8FIuKPwXW3?CjhGnGw!;;AnCtxcJGTqa2a3i@sX1k+(Y9dih7@p5MQq>2du`nZUi~0^ltHd=2;_GR1$5%r| z#t$3x)g>0@s)wk|I#qC+f9o6XLw2dV6e~=oox9t1Exi}$fK9aXwD>#f#nS(?^N$XB zYUE`PBr{KZWRajgxA4PS+VfrDRMp@C`;}ae*Ys1D#QS3%_i)(x=4#KO0hs+I4xRI> zs|mjXkjA*8+m3hg)HUM%=_|T!zA8tkLHI&HF!oBRym~Mgt?7q@l|s4wOvrz;c8cd( z`71jVyV<{RZM#@*>>rAntbfLS&yF@|7(r_as63gimdk79#*t@LA`GBik=PTK8{BA zxrVaf!c-K6#-MrSkHRh3920xQ!pKQ0%=SznzZ10{uFMuMDo({%OZufDUZUPD2b6V) zLgz*6#8={IJJCP>Z@o@gu}keY#)?=#)+lyWENy;jD(q?J>CZQ-FI>o_#{In7Bv#!U z!g(k5)Mnd_Q~`IH|;vA)+7A!fa~FZYOCrM>g{q5XIp%b?J@%}i@Dy7x|gM9 zd?3a$*D&2$BK`G);LErocJ5}mwq`IUvk&z)Z<${$zo(bVv?H4aVV_JEzL<>;Oz>9m$~X1lc#l2PO+NczP9b zY;P~>IS~K&uD`s%dH7zeb==#~Megp$xr<@M>Y6u~hW-w$kH!EiYRY%_Z17UCbn8HzPTdJ&>@P>`q_1vR zCPd-3Fr>ElxBk5J=q`2nL@SJ-o%2FSBNT6m9<+0gO^n*(5jkXNXU(0V>YNXrXvKRc ze^6u9rnx_^aNiDj^hKs-`ePCEyYL1VwUw;f-3R(BIEUX#Pu8yPg+Amn z?D|SaR?>Atd9_$PU06kax2M)p66>7GN73Vy1D4H*!L^;d@1kuHz&dki-4d~VhZWj0 zuPk+2DP~=qipGkD_!*7Ro}P--@6_nII7WoGwZSa*YR?_-FIIZ6X2RSv{lyv){h0Nq z|EHhw<=rmz*HkNXp`EP`B&&NHTA?EC-06EC)q^||RTATn?o~zgHupjg*70f?U6gM2 z^u4rg|G@3ilRUr*_tn=6*>b~}0IcMFcX?r=)V}|FZWsf1_msCbaSoO_h+#)Fc`uH< z3+z|AhYXdo-GXt5{&q#>?(*og5MBUo;*qG!0~B_A|c@Fk^w(!`-dA8{GV$v5^gpVRG<@iXUu_rJ4^MCt; zra$u40dZE4m+5<}_fQulS|Mu#PD{Jmh{(I9(u{=6FHS&Ut+^<=9#N*iQct z(85awJoQH^W44C3#>i!!0mx@;T=_&#*}WdQ?&&MWbZ;)*js)TYeZ@BCTCzMR2sN2^ zq>AsNw!f69BDZ$owZ%F+kGYgUM-I98R zJlD&Ng*LHID4=XDjzXgjRwL=4EMMxt_#8?~V|IF!>#v?Q)t)AHZ>=O5mb3nuxbUxjzHm2*3GLaG@G`p>qmF*=TBa4r6XIXtsFiLC&^N>YAPN6cYnEv&u7@ za(|?#Ky82tA;eGJ=`1P-FxQTv4s6Q?BFe`f6;tET_U8|+4zan97jy4@y`jB4m+^B! z9K3FnXsu~~!;{o8Kd?@VYn&T@&3b9=x!N_eLhzW+Yq%y(`>Iw5F7WxLM+a#aO$$N+ z^VY|$!n7-w`J-M-&UbZ7)o$NG-q#TtEU1*NP2A~;cOJ3GG1{PYyy=RL#D1pT-LF+f zIN=v(ud6*er~Pu*0fqX+K5u-fZAriJ7YDk%Z&fjJx;36OCLhtq#v<{aC9H4J|CDtU zb4FVsnElo%gS&~fZ*5WenFcYg)kVP#;(2*4?m0IosW%`JHP8Gzzfs|VrARKB3d8N3 z3++)+%&0_d^ckERdAUb>jq#*=AKraqg0&|adO{6j>|vp=JvPY?yXeD9?e3SX-Ry@M zt2yhnZ%&B|F&*bvb1(>~UScEt(T1=8jcxS(02KdNuRlBevvI#))aao<-?T_infxRKec9uV8r(%Gco>4qj7cVxbyx0? zuj{Y>|5>YzvV09SWK!rSum3RaV(ACdgPbEeFyGjTykQr}ZMdQI_s|UuJW%s<3~CRZ zU9z;E3*I>}r<>beYczH`e$rt&C>mJjIiJqKZMbxBUeZjbH zVrd64Vwn~71G(-wK;(S1h5l{oiO9NQbdD<$-$tWj{6Ix*O@3MGUj1)ew|wRLlBcEQ z(xgA{mG`dr?GY<1cm6;7wsxGO=#jT< z^e*n_1G$O|`D>4!WlY$6t1|d7aU#5DGfECBRvSamfcNJ2%;U<=Hlg@PJ3p&)Mj1CJ z1T9$8Gt57!%&ZiQBYbu{b&3^hZ{EMv+23rjLa~bWK~_Bt9t(FRyT2D>@>odc&&G|O z5x?&dgLSD*iW`+W;`Y~Qta{Q(`>C9Init5|WVuya{*L_ZRmriCS5;W*TO;2q22%7B zkI7$jku|`FMrNYPcUv@GM!r7lj-t1XD+~*wVDxOI60H*sd;W(1we!u){F3rQYdl=T z`p@#m#kV$FVU!8u|AoFov#e~;pc2pT#%0F&pUJgu#u~_-%1ZGTKU~(t;b}m7CG@x- zKKQWCkUvtHRo@?8POJ&va8q{juGC@fa5XPUIo6W=g!G?NW@jr2m$8Cy;U?0ZjXndyhFW5`KcZ@ZE+z#9vVV==F- zgHmwF9hZm=f4SMp_}N%zWS%E~tbIf6jxN)1D1khjIR~`sj*&Nsxp|+y&4hszrEgPPsMECK>)1LIzUQ3io^dSa4_t0_2%y$Ib!k_=RkHMbFe@*Xn%C=; zYfC-hxg!SihW#=QdhLRh%neuTzbRP~Jsn$FqwYw2jqMRT6b^`HOx{z>nqh-Atmkjt z7A&fjTjM$Tg^u`TiPvU!Xilz3jc zR&rRQo5Wh#)HzW~)=cU<=*D5w$c0KLYKA&g=DBd*tSk#)ZT~m5$xfCk`NZTd;p_W$ z+)}E33_x*X?%QhR%5Cn$D}0VCo7TeJd}`{^R?qdDqK8W`l6gnZKHZV?HNnKzac|%6 zhYo8(knokclErY`>lF$c)}3_Tnqm~=6Z780uYI0^lGfxFH6nh~-V|fcQR`|L>r_t$ zP^X>wDP!^%)pgi6pl$-+AGC0tGQX)e{1~^_2t8?3!QBI`+p)&ge2w{bHIZwtR4+W=jn24~iE9_qpS$RXC;`R~4K2)E6dq@&EdbFFm%EOr2*9 zWBS#rRZkUX`dHyhlQgGFp4+E;nW7= z(FcW)zlihyTkTPgdwVIpmF`ON@<8+b9S6dcx)*>#;>v+VTn1q}a-t;eE}; z(sXhHFn;dYN+Z4+l3TSVvH!LiqTP58T&@$2maVoay>zL^GWOp-tnK9;B~D4~-6V4s zZpN`CDO>^ur(4mn|j~tnXzjHPZT`TU~uv%WyDJAKGbLJVoInoWP>l( z@b%%t7b#<&uokUqARMC^u`tyDq z#h7#XvZmM-90--qrQl3=3~~;_@CL+>i~&MA1>?$8_IkceL66PU=*(eXo*EYu-vnbG z{q{)a<%K38NaKFKTSU!x?xpP$i1TVW3-;8MXrIpc>N~Tb>lTdPDzzQ!Ct-wJAikCp zyK3mfz3a!^D*?TJbik~ZGjTmO0UqNvDmA4iY9CC%!PcfFF~t5P?M^^V-FMm^A>;{Z zlt4WXFEP~HmAsDR%ILaK9P;wOHO9<2FBT|cn77_A{#45MzVtvp ziiX-HWB6S1cOFnK_3*>BQ0D&bHN2!|Yrv->g^L$^>X(~|RJwV4O9exAadXvx-L zSk_<$DzOKY)b*OO&yzI}`p-=nRgG*vJ0f{Fd!4B-wEN~cz-x~N$qj?WoSSxt9ZH^@ z??qz3X?s*@K@3LxK~eRF3udq9o!uxwSvVyWc1QlL^S^Ajx5U7QTrtc$UgRGw{?y9~ zc@L;Rhy_NYW3189fqggIpT!EZLYOaRALHVULd#3y;P;<5MQJ(<#*7}Q!d7{ zli|sE`Zb3X>neU|z#<8RkRED#|X~ccWvJsb`IRntk2Aqeeje$ zZm@2gkue@0*n4eP!ZSiF_@t5Kh-$@}YL93ntqR5k=0sx}C8KW^_1CO9kJK?4EoKJb z;{nbsJ9GBM#}^;gvCiONhpBUCU_(o4KTYX}Oyb19UWkH6d38KK<-)xig_fBcl%J;^ zk-|Q#b4`EaWvnR)-zaLP%+ntJWsB@a(RgyFkJ$cz+Q%W$*y}l8==1FBHeqjNn-Ec^ zc2LGeV%zi*@v$fOc6kVMA`hiuDs|G=|7&Oe`v*#{I9g+lFMWl3S@Boa_VvzDqxSg% zqc%3yh@l;77ymJyWA8!UGYxqF?UVx*d=b1;gT~J?6iXdnbPLenN6bd$m8~z%Qa7~5 z_7loL`jD=5G+12kjq;Yg!XY2Xo7AK>uKW2T?sY6KTeU+!rvP#-XyC0o1d=>kBlx#A z8J6gkM7?j;Ha|rK!QLkrX1q6(2dAOJ!(g1Doo}|8j~Ub(ZNr#w@8Ja)^*jJZ-2WM2 zvvIi=IntQBt7U_V!se<2_2&wEN*Jty{wBC**^ zQGV5)M%`WZUUyW|&a$+Fo?bLw-KZ|Ide~slT54g;j}n!3S;IDvec0GSVeV>&K82Bp zK6FsT)6PdLgyKx);mXRD#1n1$*Uq(Ch!P8P{;fNEA6+gLKdEYkq1;P-8)O=->t~H2 zZMla({W6Z~=79x1+~=F@lrxunaGf=T79q0~mnS~3WQ^MV$tLC8P+yo;qaMA*DW%s1 zU$kUx!Q1nLvU!dlVp+d!;aL|4!~DtDLGHBu?K}2^&{oo_#Q0MKOoPIwY}go^nkC{dTM2(#{W- zd-?1(EP}~OZ|Jlmhu-%@jQQk&-kd>C@N$B-i1VBz)$MMr} zAs~|bK1T^$V~4cqQSezaq}b8Y2J%M~zHchi_T6rc9h}+Na?nO(b+^NjqzGg_ST0hA zxdNWo!zFMDEZOS8V`7aSjyg? z1M}sbUy?ArPYCi0G}zoK8!4XDqyl+(R~EI~54pq@_W46{xK>fH6fp%szv-4TjgA6=;#9Rb4yw$y)iM$JYMD0DYsuW>s1 zdPcB^(G1-T?Qz*465s7kDDyUw8!9dm->%;?{=Ll_e+sF!w{)Y{_q;9AsoDIl%t1Ve zCAVZA7E z4xF{YoZtEwfoc3cgTvPD13}2N{jN4=?QfFs^14dLK>3dxx2r-!cLT){xJ# zZ5S?7_jRbU{_ns4%LgZzmX&06v_kHbI2`@hxa5z8C0@)X{vyig;IdpR z_@5(oqxNj$b>H3LrKf@0rHV?+U(~nnMULp>U6h(mzW8w>7H7>Y6qjbag92$Eiv%US zg+D5FWi7E{z(kx^t`P^N3#CITH?7`mC$NJD2^-S{P$^w zK=NZO6Xcg3X~1|i0*_{B$UjVOp{h|h*Niyy4UYJAAri;Em~R%52mM|+ydHDU5A|U_ zM?TAYe0G2Hs+K{hJu?QM^X+i`8FMJkdd=KCk$SW~IP^XOdKigj)XN*ah1~urMyNN} z8*!_t3DROH^vJz)Z4T?;2}7~@tT$#Z2u2g%5!82_fp0CzbN*^7y8a^f^CspA^K5a{ zk+tG_K6rFr*XZ^RcVtxf*Un*8kC)tUMW0N+QLAmIlJ0p^Q6-C*(i?Wgz5ZBY6#G7Z z^cxr(TDwD~o!8u4VthNz2Qzvy*E2q8-13VL*3-_zhgDD}k|%Z-`}pPUTPw~7{ovP` z^}{7l@_zec%BL7S@OD?aL^8j=9Yc-xbY(|V&S^Yn5A^P8#rH9JMcVUkYn3QL7x-Hj zQDfcpmNJQ$${O_5pRfK@8rO@0BjfhNo;p~b#d#Lqg9G%MV16hy9vPQ&j3-SZ;p=}JZTh>GEs?<&5ylAzu8gQP#xRf@ZH={E4Ir?B- zL^!6O{>>QJ2btSKQL^BhVx{kk(>;RG%1#$4i~-)x3cy=xNqxKOjlPG;A+OED#j8G8 zlg9dc>tLg`&toySy8A!-*?n_aNmKtR7{^-Bp6A9Th5gCntzi#$|JmYOqs@`OD;BHU z=?pdg=ma<3af_A|8||nu0|Oq%qSmdt#usLhZ=8ELe(-Q(JqKzy5<76xJlr@rXeNdf z#NhbM9OJ!*d~nj8XIXo|c$29gYvklE4!LK%@`pdZlRH4OyQsX|Mwxi()65uQ<1lJgps7 zGzr^y=bBr?OuNx)68750p=+;dT92EPFfb+-2lo|f78+S2)RP)|8S^woG0v#W*e+I_ zGzBf`IrxbAc895EHT@kf*vFu-V1y>Sk{ixHWWVuFKaJZYcf5&=M%&jtHDk_tz_3#^ zUNz~du?nMhAGP()MEB8Lo$P}ir=#G%e6Xg=IQHsqMS-mZ&4tkc*xWc81JcYi>Cf4h zu#ZN#k)v=+};OZ3q2I>rCDl99{Rz1Aa#t3Cu=(G z@PScQIDRi3t!cc>3lp|;?iesuV>6L{5%fg3mf1nGwAcfG_6K5cY-e?s)*jgI9>zUza-L(t2uj9$liHU)2>Z-RV(&ZI z-?yDd=sj9hYAw5vug92Re}#7AH}cEIMd8TVN}|~tZ6MrtwCH2~?X(^f7VFE(88rc$cRK=lTSki97CyM+6^;PY zLE^(>zIUrbQM$f^*#FKQ%i@DE!OB2PBmO5oAP_#`r?l3bxrEI2$NHM%Res%E5kH7H z*Jj;Oy^!M$}vPtT>9y0q*3)yCUWLQq|NEG1zp~ z_OCeC@4Z)hzpfeLhZ1L7FjV_9z!U+zYolFN?YKRrXcEO4B?f7?hgf2WMJ(!eOwv~C z;D~e6VsXuJo%YOSYF!?pKWV>x+U42QsT<53n0rZkme}LRyXiIG@2hqI_jxa)Xbd~s zK+JZe7S?6nf1h>}qkgz!%ls&;c|Jy1AMwPQsr0GwbQO&_-(+|fcMqz)>^_nU!23nvM@0;*5rD6GkvQG;oH!I5fW@(q z7`^Dcvj($)+u3VIyy$YYw3%R z)k09?*Gl!(Y){O-7zoc%4X~}H8`cpoxK*DSGlQR(Sl6CgOrAyi<7YpR>~LT4sqA4#aQ2 z-Kjk=nBE7hjYE2z*H*jl2)zsRm00pw+dYq3<>O;e=}`mWNzH2Y(P-4Y(p|KzaDmTM zV%1iR6DKE-NA`^KofGb&@-0}ZG&xL!0du!^X z^{4*qnsO1tI_+soYMw{k5%b>pp&I?gI)uIvlNtZh(ag8UE6GvhV=m|si7c(Y+}be! z-x@?>e@SauP#Q>n481B``brneV3=->M8VAA@?NVD6lO)jd|5wvG?uuXqY?Q1R8OW% z4#Z1WdS>~Wi|}Kty%DT;!c` zL4`B*o>U>?1GVo$enlbDV~H5M&m9AZgFUF(EDAi?^YMy8?*~#;?@E8((NVZ?{f02e zV-3)j@$dRkB(7oqdAquCrw&KBB5CeIqrZTE}e})zaKs1 zKiu0hk450wMnW6+5?{?4@!JUtxw=g-601@F+`>j4UJ#7htZ8O;o+4wzgD`trI2=RT z%1^iHndusav2kQw_Tm}WBNV4tJ3Uii%GgjizRZk52LJxH% zN;M}t3Xd9C{}pG?)(f>RbIovk6!8zX2HKs%6!pS+&rNx)X+}QF%+0Y#xsj^(w4@riee(RGIgZ92sq(sH}5A zRzx%!^jIu9@V?W|kUnBIn?&_Yo*ku8_;^c*1bR%oj-)>Pf}5iHc`tMxOAquKU&R^L zq}BDKuqmykOgzAvY9IHcenaW-#s?WDky!e*jWqNiXYg7C>)<}}p%3%(>IibUM$6JV z0jRk&f_EeqS4UKyPuz}AM{)X(BVLkwJ}+dH$o_{I;~4UrEM3J7&e_LSV*O^DBo^#( zq1Ofdt#+*w1FE}WRM%)sXtGZn2zSRI_I46-FNle?JmE-w;Bou6VuY_3-ZIV)ENjSN zUfxLi5($?khO){TZyY4YSlQfKT6Cq~alJ@9N$4hPv6qmT7=gBJ2g>_=7Dw)d!#!oV zoSEf=x8%|rnhuqBO1!aRb0`ie-K5=jPux5ojFzJt$mSL9aHVgiecE|pILs9_p8Mm1 zet&`QJnNVG;hw3XaSg=|%SwFlcKc7`DfMhImOY|PH|Ym5!H&KLoOSh1MBM{!xFelW zI!>)>uqcupGpc$(ajDP=dzWxtRxLt^OyZ3j#UQHPGO>m{ z^t0?MR(iKp)Fl`73~`m$pB@&6Y}|3>0eLi2?+IPG2TGZ%>%99d5`TK49%~P?6Z%q* zJ-7Rub>3UlOpa*aO{`xeCN%9N2Y7hH`e6jxc=VA6*L&mF=m^YeGeovn=M9Iza9ju+ zA|KLQ+g%lg12(;+x2-3dXN2Hq%~rDgI(Ovl3W9rZb(u#^&imy7SWxq*NM+Bh(MaOh z7OTaOVGf)T`Jr)g8YPEpF@|v-xni#|QR`^@$p^!$_rUo>w%Fk1g`s*g@pyq7W}bIO zv{6HqXXQxzTJ(3Ek7W(lChRf8*C}&hly+W|{oEA6ybrE(EYmm*GefoW%oU$DYgc`@ zMB3I^9Jte5OiFZwO*XM=eT>94LnjoriABa)J7GY6?t%3&ST<;$__Tul5#5Lnw8#>_ zb6u$2LcUVxB60IB_sn$m&)=UGtyS)D{z|_v(-)#Ty#^j{Ab0XXRp}Q`KS##-(2xf5 z;vY|JzR3QMbt@SjOrI0WNIX5%MGo5Ph4C^1U;Fiyg}dnsStSC!=l7RwI(T8xn=rgi z=^>4XRa+epicY^<$yUVq%-Kx*fvhL@QBPpNxj?k+|4rmya>i<&moaM&iw{}!A9>=3 z$;FIsB9Xqh*rlgG4Tuja-lQ%vOiPXAP?rtf$&3}UZfXx2a4 zKAe3gmT=$JYbT1*9kJ;j-nFlf66vj+u(l8H<~Q7hPYM0gi|L2%lp;(R=hkZCeA?uS zsjFRZ?@Tn#&fhN%o_ED0uV|ccy(B~vcl^|khQpV)V)$?myxv7#v8*ngf6%v)_1nXT z2C{jiC*s-5NNwF(o;~l0Okd*VhBJtIzambT+PaKSMQ zeNQx#OCy-03hBK&t*)G9=t{mnIV}UL%9QKQcr!2%^-sMKFWjAwebgV~@>$U%)B$DJ z{IE4PN3^eHhu5BdsBF<+Jil%O$By*0%F!LPY-U59QD4~VT#X-pm;)caGpE0tHa^?m z4UahY>U_q{=stbYBXj*|Doh=uO~UvWcA&Fy0`81l~|QFEm;gay4~ z3pR*h4MfoHSE^)%X8v*2$z7?B^6G$!aM{M#FF*@HK zEq?e>>*tJUYhsI$>=Bi1-7L(9*g!AD559M2h|BCt7fWiO7hTa*-ZTg8sVi-g)Y0)gF4&C$QKJW6@CMpaDOT>Y^wuA@KGnUy+O`C>k6^T8OuCk zkkDz9=(*Gd7k|;C%~mTK6}h4n@5^cXuL^yg8(s{J#?D^v#GB>rNIe&Y4iVL)1Mi7z z?8)iVuP=YZdQe|I5|!!MVQxd+^1hL1IlQS{vB(_(%*n=%^<}#kuPja4e$R7jSR*~&r zGgtKX=RCBEJeVgou2y(gF*()|S5>@&j~Fk?J~_fl#$bLE`up%qbQlwZ zqZ3lZwuR2HVcxiunk}AXxFEqc8Vi3Fi+Aa+`2Ldq(ceyrGHW+>Fs+LGs-*Ivq3R?tv?`P9I=@=uRB(0F=dL!BLB z?Oys8O>sq-d#cLq8td*6f5&-Hc0p+)X@-l8^PO^*MK zIo4vMvoiwAsUy5QMm+MOX0lZ@%JS01O;1;}=iRV_c7xbIg8n(|T?C9N7O5KU^Y`>P zu60=WQ-^;6prCyU|m%~<=ulPdUXS{4p4v{hIo<}$8$=1zX zF{nHDjl&Fe=a*qG^S1DT`5oKeK~%;X%ihrMV!nm*=_IMdffiwn)&;1cBDt1HQeKW!1v*B|m+ z7ujnEwIg^YUW+uBerK&<#aVK&ZLl0_Z-rk6e9>}RwDh;JL4Q+kOszgz7U|Rb?2-$H z#bm07Rt?9>#(&4zB7d67fpLDoINz+1YvjQ=&)O4*s&{G~JU77%e;DVsMz1tkEBukA(sD}7^PxodpX9%@O? zNA^0Vhu0PD*+=bQ5siS94q|gF`mEiJ!q?M7#h9!SQ&E=;Gsmh^nkNLU)K!LH5)`CZ5>gtJt{Q7F#CyBmG=2 zxoMCMTwkznGSpdq8f%3T-dQY>DyPfYn6}Xu4MJARM`_l$X5fvslftBqP243jT+pbp zm3mP#ey`uN{<^1BH!M;mFwVA4#3Q|Ftx_20bByz;L0(3gtn2)Vuh4Iqq0yySQd2q> zcB9*Ch1LNpSmVu18LNFqZ}54;IpbdLt$n)C5r+=Mp!)Gt?XSM{PghZosNM!`i|h{0*jXy8e{*3O#Z zb5v(=Z_&1 z`pev<);P>_u#6a_ekrqIG|vwer&r5AcPw!)+86dt+hzM0E3DPArXRLa+Hh`ux{!Fs zxec{jTtn%jG4roDmmdGFy2m(QXPi5(_fidDT{mejebT>wFp3;!hC7V&%9S-W>9PN} zpC247*32kyKySwR#>5KEy1I@yGK}-4an-cCKu69wV=%mZEA2a;L4DYVJ(oU2`{=q8 z8Y|@a_L-rre9jp^O{3{A9HPBOJ%QiXqOkF6s&+YbikiBzzht^b+j^86YsN_GBX8CA zEpWsBIn=}1zehXu6n$zK=aE6B+8^BWo}W02U0X-ti~m>Wn!U<;ouS z$w6|TutGX#iiYFj<9~H&FpW?hn!Dsx;#%) ztCV*}Z8Wx3WNFS7IOD|lXtepgTeGpy1vA-;zPPVUGk3WwyolR6Yk5yozcVqhyld+g zeb&@wUD3-b678>6)rReI!&~NOi?Ev7YhJwPehtU_m({d){php#HVi-Jf6$Z=12cj1 zQQ)2qJMp2gLe99=lMBc&W0druYA;wHL*t_{pG_=!-VT`TU727fKzSmiNSMi z(DmQ_oH=dxZ>)u^%=CK9t(BgIFxW(;G_IG@;Z z+DLj>Vlw0Wypykydm3v_#yK-S-pKl?1NHeiE4;VVC}^xBeURvh_H~0%>${HlGb9Fw zejhOU!v23!DZL7AT{QAuL@&HC^xkdz-pD+adE-2L8cS=b)&{UgZp)stUklYaJ^G~F ziNv-oJyfUNi0hjf$yw?M)$HYN=yHG_^r{Ieodta!zi|$=d#dWA1HDB)hask)N_B)a zgF^yvSgj#t4#=cwYZ@f(!&9TJA$Acr`7uE?8rk6gl~$2m_)2sy&eI0p}i^Q zEVjm)iT+3p8ZPa#h)L!>rKn}9Y)8&c0QCZ@OgkWJ=S@e_G9NtfzAL}0XQ0C*PsEMA zFNfEhjd?8{;WuccY_Z;nI1cl_;#^YVp`Le$9&IkXcW2yJ&1Rg>GS17Bm#S`$X3VP* z7qn!MD#_lGyzN+wTQyYmJk|l;jB~4IGgJewaz8W9o7RM?2K9GDCTCbNgO{jAa4!{d zwqhH*Ni{T)ciRKh%Q~o4ZSp2xaun}_zBg3v9xjk){+(fcQ$1kqxyG8B7?E|<&d*%Y zhIf+(Am_ydEKR+Y5i+V?(8_M=Y;OghT>KlXUk;gb6-q>H=-i)*5A7SX7-9gDYSE7jt(B>8Ni3{UJWoH+&)Q4YfeTQ4h4s z{wQ-B&xD>ey{nUgW&MvfXufO8UvVD!W`WxEFtHJgvpTSfdKKe5yo7vzt1YTtjB_#L z?6<^O^=p!g0x+Z9VKqu}vusQO>O z(LUEB;b(2CZqkOhV(PK3_{T=Qc8VL`@SajK!9(4pksAgwZ!EC#Qp;Yh82&R1DP1hp zEv$IXZV5$ZZd>&zKS%5&p6Q>SCye3??J$)-38>$zw-Y{Uj(PG6x)gkZ> z&bsc&-awV!WJ|=KiG`nwzbf0w0Ug2X{f%{%jbRY&$7Z8$47v(*7V?Zbt(@U;v?U;QDXY!o?G zh5<hCz;&e*E+Y!x>of))#Z)J!IXJ=D5juYkc7bDT1b;(F||2 ze|lE-O__`x%iJ-t+a0MIF$KZQ`%85C(y7}NXl_mVYd>pp52)W$XDO3?{^v6Ws8e5? z;ye4Iqqf~pdG=x-?>Y5&KX*{s^tZ%y=89z3yTkR!Cw^Vo@Y$qZ{Sd+KmhchEGM6DmQu+!NWG4(!)x0ch*o2HU~8XEozX)b?pJ|L-`Th$vGp*=U9as=283 z+eCf)fhoEzA^v&LW7U^-%+)tzu_kh!(Nl62ee>x-(#ln{mc17}&ah%`Z`Yij?|>e} zAk|&|KvQ_Z0V?XnH5^i3+sTe+B71a~8~4>7;QcomonCF+)f8f8P&(BFY*}Ld#_~u={5>MjV)kHN*=1cRsjt&kc2( zk&al#{9s7(UF)Y7}Nb;div|9ug6!aIbsVn7g z8xE_m{^H?17Zly02J!y3qKBCiW<3su-n1HG=tFy?P|qcD(ray%%k)7r@JIInXSDlI z*&@1~57sZ;ti9qs2c}vNj5Zply>39yc zFy7V491mk{k#ax7IO)k`j5=$BNHl_;+hn|Vw!%Zh9mwf54H4ecut0CK$+ym&qiw`r zac&=6p+4Qu5rc^5|2o@T9eUXwpZ`!NWW#gSlq7rHTfzHa)j^sY@4S#p{g5UzM{BE- z4^^We4tMkuwVCw-;7y!ikT;dt-m&v~xDdBsM6#eO1gLCuK!9>Xu#!Kr#EJpYPkk+~yK4Pqc$sfejAYJDT(y zLcHJNzw75_tM95iKX*V3Ir6bC7V5%d_Sn#zTFu9ws2Zf(;}UB;Ibey#q=`2|50RT+ zB}Th3hd75zak#La@3?&c6!KGc1)tJheCdlfpJH+H`bX{eo8H(G5{r_&`eL@X7X}e8 zYF(|1*y+OiQxLVY4y(nN0?uCFM&rvMOR<%6t2+V2As|?Muj7G-pQE6zwouG(=z%8j z#2{s4iN-@bkWriKKHG#n*W1Z=$jc}a>$kZh?OX(wOfM1^oQE1;W53L8qi`>ALG!pU zcwbBrGsykfUKWBzpS(o-N=~T%kv-Bn4#LaT36~y`6TV`GxZajrcw;{}kL)VUi=6TK zHD`@Vrgo?ewRXuT+}p4~?GoXNZiD)t7SY5jljql$yt?i7ED2U%|WK2cfa*;f>5^aadC; zOMCK65L|xIQ+VBR?X-MiQS!-O8}~^oCivlqiacLCLt!-12kTDpK2BF*H9fNb*b?U% zI#xt8=lvnxWA`9Ov7a8Jg-M)=?}-yr=()3_4Yg-GEES%~9vI8}Dhgdx!w7uD53WIEzVzz_C67ISNSY%)5GKCQ!%bGe`d!> zJRWvkW#*!2#^Xp<~)rYSwy zs|CW@EMJ_iO`TW|;+)G$#GmaHELrA_{w{sQMEIb^33@7zduqJ-t}hH0_#&i+4U$jM z7rNBtuQ+>udZJ#yUbjOoHR~G8R_|Oy-kil;glvAKlHAXOtIS398?Q89CwbE=l3E;R zi?lcNg7LZ|y%N4Z(Z2l{fF;-CFuYDZF_sz;ma+5;ZqZ$|CWmE9D{=rm#)@z3(T)_< z-RkZv9uV))$SD?K<_V(HPEYPn_Wi0X7ty@GUgDj-Ot(?2=H6(>nOEz*`-G;xCyuv{ zpp?6zXUwyC5e~w~(KJ`aeld5BQ z=1@ESzvtj+ujgu0>R&zC#n?JpsRQ@eBh7m*u?$F`lZtdfLV-yz!|YwTolQ zwRLAv2Zp$sQx+}!TvX6bgbe||^Od9^8ZgYIOh~DIh;3F~g zle#DF^E@?J!CJBSo5-$74|JaxJbGJ8{_yu=o{vGZ0nKFf&t80gsolDui>wjijRb0# z%+Ks6Kc{zQ{5zMucE2IxvF?Ss=nkWkf_#mPz8s~@gmY+s?qhUJt zWom7ycf$)iUq@iAcA>as=mlAqJfJn(j9qO#pkiNZ_qj~O+IYfUk2uwSNhT+XiJ5f& zn>TSk{IxoLj|0}7Cg<^owc4bK1F|xyk70jZ<=L6uSmcp4t1?V$%$n#V_jz^KPuk1m znl*{1?r5vl!uEY2E}K(R;;XUHJMWJzVHoSip(tDu(h@)tn^RJ$#v99rYYTjO;@9>m1x}v_+ z40}a=xjTBgp@)LekNOENH(x6)o%k#+(^q%dW#tKRYS)j(BVmqI{K*fRx+fkHf3_)= zihNL$KXc&LRm$8N?>A+$97*heGLw3$*{fyMrT%C~jD2YK64~c2xw_;Twdj#3uO!gFn>qmZT8@!5 z$)_$L&)2m{u;_2aGk0Jd_NLdth?$&AnlNtJ#}TsA1+`cMTaL^&v2W{%)<6H&-{^7S zqxwT9`cpil_JYea#i1(SJL(Sgx-dicV1)-#x5guM^lV+rUcNB=#29|+tt+<(MPQu- zJWMpueI_92Js!t;EmGS2U~IGK>v1De>0VCWL{dDime?!xPJ5$Ga6Gccj8}e= zPf=(`?ZNkbm8hXUXgDz*=SDVHeAjXh58&sYS5bzx@rwqu6hVyxnb0`yU|j4S=AS79O!=>R82WXZIBHU_j(eHKjoE%VHXMCI#+Kx8o{Z$?d5d>sSuIgoKH?5Xq& z^hXElco-MyD~}%e;W@Q33QL|!-46OAa8DK#9+Dr6{P40vJdOlzmTx(8KG`H51H@AK zai%{O*5i6lygc;CA1iB9&m_@b-dz=dg>|Tb+1XP*pzgtU1Lm1#M5R~-A+=3B?3cw! zU*}->^ykm?TPzb&$a^rQ4rKFn($G5;JMH;Bw{DW_qp2V3PEVqkb#hM$bv1+H@$GG- z-2T>|+DP#@E#8Uj242KpC7|6}V`DY@u~WY!AnxrFoZt*};=TmvHBB)wXyHQLi@$XO zf4`Uji(%Bf`A&_jp9f{jC6O4x-(}AVE9w3w7+tARGh>eUl%QAGm=k@9y%x(AKZ%cyqNeoebuu<361f>% zS1Od{HKTBt@5`mis{wYXp7MZoinWFCL%XvDsnjw)tS?${%DZN7~=X$$&vYQ-pKFL0UuB0 zqIEUuIPJM$?4Pz0eHgdq`;Cp~x};+;W4kD(ujY51!Fj_ z=#z@d+%rW7vc>wsWW3@&l;XI^-L?RSy3t#$=&jh)bv`ckrGMNGec7P$JoMmmP3qcS zer%hFhdkrTehik){HTjFIUbp_%w+CEdg58d=eox$AdX%M1=I@zf(Pe9;SLJ za_l~OSuA9Zn!7?anM~cLY<|zRd2-Nq-g%kpb_VX0hFW?tm9Z|WCgdjedavE5_R&9O z@*!)wonPo(_~x{%N1kZLPv$P8!?OS32n2EuDXCj!2>s~Gs!+oxJ5h!#XYF8mA56H%Z{HR(qj{-Ga#`|yUhe=bHm$-~3y z+=n9_rPVnFUm3%Qd`DTuxflaG($n^uldM>oPfw3{{P^P{%T037gL$voA}^Vdw+d$J zc;q+-$wuYNF=9M5vR+5ai~W{T$A$aEeIEHEX~?vV$1>N2viE>g)bpZ${hg)qr&|i# z!{gDYJX3ysnS@;nxNqC#$b#JqaAO7YPsL_wvUxtaH|DbQ%qq2O=LdQjUj|;5XNUe$`Oa3%6kr_ka1Q?{e|y zTx{pMVWpQcsY@0DxK^_7Nj-xVsKRxVmN(?nj_C;F-~D|0lDu7OF^ZTs4w#&m!3$Dx zrZV$k`?K<0cnbYEm{$j#k;|1N^!!6lBJ(rU5MF>@KdB=+>#X!@IUgs#Qu}Mbd70Cg z9)8GGrXl!Fry^oITOAy;Mns05sON*{_zH>Cq(znS%F_no(8j~?8!tiAWT-IguY zarmsGuJ4|!vPU1{O14w$o_fV73S)A71hQk8@FaCuI)f+?M(I zeY+%O{kd|K{30iPb%v5w`8L)tRtvM^lx58i!-~1|$_;zve*L2VY4hGso1jd|;91M> zGtp&;(#bmqRk`l-uB$S2_G*+f|2!YnO4+_8gS>L;h3+*}7QbKmzntIqa&5)_T^jcA zXJ$^WrntnWVm#Mv5C4)k15&6>z*i@T) zd!x5vJUbWJTw4sCp{Ofo!JX@Ck4%&etyf?i*Gg$W<a8og+o)em#CSUbGaXwYDQdu6FhnaltJCa^12_@xN`;B+2 z7C)894;4t@_pjJ}UAevUC>(hv{_1p48D3tD@vIHTAIei~PUd4E>l1scCCbZDx#X|# z{WOSG9z0)-2mH*Q(@sji8Y^&->-79d%FZ6?xWx7Q1H+YjwHKonKM%X^N@`pxT)3Xm ztfg|oE(MRc_E=a?8J(2`r}})S+^Z@xTP{E+-T`NQcrQm?n}?lTSL<|7jy#%(e6D9U zJ}+zBPQYh={zmd4xvN?N#@ZT*vtLAc2G0j z&es*F%J12IWffgU&QVzL`}>wvDD4guBaJoc%!yLT+?$V$hTKbUw*ydB^CX-XD-g}u4u-j zU^eTz+O?Z2d*YI?iuJQLthN$fX#vJGi-)f8yL8viL){k4QTK_t`X>>7ymt)hd0IBq zF}AI^AIcBN3CDSN;pgk0-6l(TpU&cYR1}^qH967PeUqNf)+^=xC~B%i(5qr;hD=Eg zg6d}+=Df_3Zp1j>rM_{{+8y%T7Z1E`GZ)bZE=emZ7jlT=@nCFa#icU$b6tA3tLiEG zHymKj^Ys1dyK-}q6S}4SUDr8vysk9#%EK|nd3|_yUFe2#l(L6Y>@Yw#`&k9z7~5{s zo9SMq9mNdBq)jQkd$ttgCgTuwV{fw5#!g@tL_c zLpgIfgPL#5E!l}m#Mh-r=Q`)ByE5Tw8Wu4QUBjj*ITKUyiFMBTA48RP-BWOZam)MB zQQ7H~gcq%OR@N|7x;&hZ>~=hlj#O3}<0jL(h?L*2>c#i;i0UJCiHSS`wjFJp3X{58d-QZB-|E*q^;)@)i0HP=6` zY*LC!GZ4k~hL`C||B9vP#Qj!1Zmv?NG!34N;jCy!C9hX1^+>2o`F)(Sw@wPqv}Ye_ zR$t}Lm?RwS#51v83#Hz%`G{l;)dy=Rj}qtMb}z=W<#Tz(HxUbY*R%RjCU^1dYdU~G zb7+yw-^QAvYdq$~te0cz$6y8D&3r9u$kK3}K1khwP1LJw9gG`&=i-QOh8#pJ|Nb>` z&}r7nhUE7YOo+p#A$w(PHxHc6r6zpJ6R9(ILH-S%t)`6?75Udb`{VJVY=AO_cj~U0 z?1|+~QJ#KvLaP$?+Wr&g(lPaP4{h?$oN;z8n4=R5%W<4>jy>k4YjmpumANNtUmUF~ zayyDUjBS8lC*7L3Vl?EPVOec`-Tsh#WHUY~)!r#l?vz=I#mi*surgOPGE!P~ zPC^^j?U$1}C~ddQXH4Qzqrbj#-Dw`?@@xxl_Ez>9l8EEOHFH}J+VNI*URbOLjI?F-@EBL8Ce#9*gKqcu3RlU@AgFm>x79% z*U57Bw|oAGg|^#X>B_$4{h4vtf8e={SmA=Yne<*f+CrJM&k@O4^aZYNqHHR3L{HCn zw8)H7diQXqzWU#~@he-k)s2~+M_em4z{iE@Jfq7|g>_Ml_;_9FrHcRczI;|#=>jc| zVm@R0#dL_y+OrsSc<-xuyM^xkoP6x#yV?3tHQl+>IoQIr!GTB0ZNJq3*ISd0E58ym zu!!ry=L?m>yrqa^JUgvjr6k0r!JO}Vm!9*LrLPv^6Zh);H?B(W@?_#6sCnCayy9Fn z2@Sbd?|SxBKF^y^%w#+ahZ-u0!{?!aIv%$-f0N%1Ct#xy?|M_O$xp1WoAU3@?5>mF zL^M=<$6uT7mD=mX?Xu6-DSxLlZx%$|Hfn~S&zBLz-mVIvj$B5z{IkjjA0EWQXTn

1Evgsf;0(@1K$EpYLs@&mMFI63*ph|gt71_x|BkdtqfY5P;%V!)P`d3W&w32cl+BZrzzt4#!#ZtVy)DWJ z>d#Dh|94+>=TQ^g38Os3FwRR$SLjS;m!m)9JYHF&yL+etllZ=$NK4ec>T(pj8QVrR zt#ucSigB$wf0sqWbjCgMagguzkbSLn$5!SbgzLS9dOFR3)i}l&76(07`i;)O53W^J z%9XozOVNz`t?cqnC1Y3`X7}MeT7R{2ddouOF}6j&5|y09WDNUv-%fK-3=b@Tp^Be> zWURP1n~xnPtOK(Rv_y?dCaf2tOU6MOhzBpJZ4pDbY<+DrP2#O}=!F;_uob8Q}Dx4v1NS9-nH}sFj zU>56>6eDtSJH=wbm$PzhPdB7Tk?Z%yKp7w8jJG_$u6~`U1e-eJRV;JD`~Aw>)z0W1 z^S2+pMdmc!fZloN#yFQJ<>_)p|6iQNgM8hx{S~m{9!~LFtXo{yIF z+!|Bz)G%n?YyoOjaZ6O ze&%~UjdI>F4Xt=)MYh|Zted+K>zQv)vghw@os7Z}e0Rcqm75C|Ada#9ZegZenKutz znI9hJ^iw|cOu#jMx6{F`l{S?)%jJA+*dqgFqkcH1PUT(WMNMV)&OprKEO_6DUo!Iy zu~NUOCD`u1{8j9Yeu2~=Y@w5G?dVtdEe2Krx$-AxdYuwukhXN8j34UFT*Ns$J?mHQ z@I=imF>pMxUm8E9ZVx#-qZe0I)RXB`U(C9kqxy!8UGV%{9C{opQ?~!(jK1up{x@%^ z0-SUWdgWmY?GNMcByLo)}%A6wF!(d!A*F0y2~pvsl#$A7-W%@m><-NDr?iQOw8=0R2oNbvcfq0Io?!xL#*Od=GBs6HI-d= zy`gg=4m10?)H~&coTtRYA3iKAs5_As5`$sWb7f8)Z@m2&jcyC)$#$GYZf2cbQ^v~0 z242XlO8u4*Yi0F++;Py3x~bi7$uSdMaik@^&QJ7EJ}_^eap!zL<)*TgJ%44!-+JcN zU4wOJC+4AycT!!qQe8dMax7!LF}~L!o#oyN81VO6)@7q^`;#O1#C@n=o~&E)xd=aa zrrXzX)h)cS1&#Rr)_FflXR6A91K;=4@4D!!Us#0>jN!4k`nnf4mqU;1x(&W4L*6Yx zGk&H+#wF#_kwwTG#`Dg7pAy$+A+|6-^ysoq*?T7mhX2O-QIfJ?%zTvbT^QKfS2;d4 z0Y}*f*hjzJv(;l@%J=ke?QzP68SK@w2Rfwf5T)c3=a}5Lm+o~`_WDpaau##%^m@ut ztrzy3ryk3f_fq}Y6OYVd(0s~id2q8Q0`^m9xa$t7iuQz0^JsJo%#zPPdf*^2@Om;s z`Vv=pkNu{nMcMMmed_SX$H2b!UO8ZZD{LoG_dc$M;$-Ruj|;@SnY~a>3ug@efBZD{ z+!A%3$$2>Nfpcy8(bvo=M+?ST2|ugLxn6+-%&W`37wYO?J%R?@hnIGy>q71qVHV?a z?|iV%`p_2m@*TfEd8%%GyBu-}Syx%~*M$_X!Y{`E_t0iKtAoq&57(EkSJ8Diy#$&3 zyVuI^D%*1wp&9c)-fBhp=T8bXn%MV#yIHAgl7zi{j`j7IDO=jl!%f~VUT#iM=1*hq zZ5@4SzxXN%2u2+i_D^t(D2CU6!5+r>ph~CHPt~FY<6JK+Pv={_9TAL` zSd*e_v^*C(8RuVpJayNeXW~BNoIGTLZb3*oqWPJbi+bsngf7BZu9tsoq`MiD3{!q4 zX;~#*$b|X0#W>%Ju22SSNI(nbVGGX3TNzR-ojM8ZPuRIzY2Nm;% z|KRsje8{W-xjrStw;vnNJj4&zE<5 zpQ8dE8|U2EgWinuh((eyr29IY;Q36NztPyC&teSXnJjKG+c+m}Hi{U-K6?U<&HrRz z7h}6gH`JK)K#vkWkJ-_|sO8L}H-G*@tvbfabGY}wTw%ZMr!pue9&_w@hn^@^VjIU} z^kDYpiL%ntKNgdDFT53ZD3Md5FqN2F$+^`^-6~;d7@UUj0~RVLEO_CQ>+*B?RAt*q z&ict8>s&KjX_M%U=hU}p`@%)p(wuv3+(o*XHcTJlO_SRy z&qht5w>Y(p>eN$q&!2#6!So@m^iN*Cd@Q;QOTzKO3-SSTN2Ifdx2m~T9yN=;(wC_9 z)PAbmEq?^Glc_Vdqn&oSg@2mD02kx7SJ&g0O!RAH3=WRzt)}vqFTNJ4m zOE|)MW6_UK#_PIV^kJj_`C zxgJi8`AE}I#*z;S|I00NeY+XIyK|qFXL!fE2F6)+5-^A7_L{4yu@-Tco~-#-K7XRr zq29y$VSK-#XO-~*an$H$?<^crCXm-RmYAyPyc|WhmHr^}(_j;trR*;VfkC2n{nGi$ z@QwkPTSC3=&zx%N;;!T-17u|4#CkukP}Gax>1>=;za2d+4M`*p(`B>2CF9dRjF;AmYcK7x`RqhTrHFZ{6^moM|?rT(B zGFXxJPR5|K)Z0JaMHzW=JgWDhMpN~=%DLBLu%Hs_kjy9Yl)_QyYe<4#*eJJ`9jJ+% zgoe2z1xz3qtDLSRz*jj z?}XZlxL;e7qGdalA*BcTEt!{%3G#IMSf%6pc?PGTQLDOZRBw z_0x$E8QbqxF4m@pYO0S9-Ba|X6A}av)0C1_4RneTv5}uwsB(vJ#huzmCybt z3C;A#8%@m3;gRx$oPoalnRZ#{mG|5WOl-kE^zTt+Q_UzWVNWgn+O3T56^d~72z}>m zQZBm&;WxRC)~A;%NsXxG`;MBNv2&GG+r6-Y8X#v)(v*nJ9yoV`xp#c9(to8Zyc%+U zzv%>}ZT%_m<(*Ny!&XrSO+a(%$KH-@uIyhn7B=mZP%VD2!RVVSXfoIOns8cz%$=ZA6r{;XBezgko=Gh+)?Hgp7}Yh>;mSB)IJ421N(@HF7#7Z-X}qB%V=tdOT=h5V zMom%I)=>k6e-6XTEdxa^u znv1oa(h)YQOxeDl=X^N77Z*yD{vmNl;GOvTqoTN!Md9To;$5Tjl>&<}jH*SxYsZ~R zRqhDXBfouV{f)|zThtIHUw69wGR4Km8&QvvaN9UrdFA2>N9rLz&Q4SwYuu1YO+u}` zuhR106nM6wXZi~VrJC17ELoL^xm~*|(SNx28lQyxzvha4>KHhxl5yGkoc!VNXl&ws zlk_xEo+6J!2i}9~jnm}#9quSjEq@Qz=y1^Zjyn#E|BLgc_C>aR=h6Ej4Z)im7v=lT zK=G?IL?t{ies!bY0>882=?9FT7=ty8^NO@3#z|kui(ovz{f;$y*ri|!*t$9OL>a@rrWK7k-bELAhFdp!p=dd? z%biGk>A+RRVTc~bN3m|KeOzf>H6D}LlV)x{q*SJ^@LZ0l~TBdx|GBvxTvKpvGc)C*3Y9&W-AV^8bmgskNm1+W#AHb?(xyHWAd7us(NlBw^-gG2!u``H7vu?iPPm*5ebG|+ z`|L?rNo|%r(mJ{C753l<%GY&|=|}(9fu3=U^SYj0iYnfkMs5wCUsf&p%bgU5|KvDn{<5Y;cWEhu2pO1gc}bA7$5ZHt_hzL zr?fVX=h@!OGyHOHZR3q&i5SE)+_ZZIqc=a_IR}0>E<9CUWF?{v-``)iOG;s0B4#@C zY@d^re|zbUSaM@cU9_Kl$pG zL#T89W}ecZPXM+Kq{nf!>B_$f)OqVgZteDXrJ@V>9G#Q!ewn}0k^636%BWTNc$|{+ z&=rYq6B+mZO6QAHpqZJ3k)xX`b*v|$GP&r7yne_dS4}{NMDpH;6vz(-PlQ=6_d%{q zmp6WK!RabVxME)-Pid^fL+zUk4i=+qHv+c3^G=G-%8KcsFg z09ZkEk2Xcsk7NZOo~k`oDg;_=c5nB=;L$ z{#OI}$r^k#p#WMas5s+#Tc@J{qx4smR}V zyF2}(+hr@MU-YQKKd%|0+v<)?y0z{;Avp z@{^ZJtQC9Ht7XV}dC=WRBpob|*S%hQ(0JNKha|?ixUgc8_k<9bG0sij?=U)M@*ZcL z|4vFV`s6&C9*d4W~T6Lw~ST}tc=GX_U{3DKc)HoXjCL7^ElX98QeG=+ib}(av!Z&E(oE2 zHFxpW*(4!Jg-A_W}Yb}%sWg0A5mxPsHEtDNT z9w;tN!v3d!PZcmU~ZODe|~X7qpB{gQx#6 zxlgGV7W>iDHnv zkU?kVPhZ{8gSox$*IjZ<8&@>;A{O^+o?K&v3+ip9-{t%%a?M%vdSM@Tqk2zyNIzfn z=Gjh-TPxS=qsN-_<>x7_=|_JdNCy|j`MfmUxS)`_cZ~Dliam`RW`|-a;~X7U$vBDc zs&y02`-WXno_J-T0`I<``aH$nHyyq_!!Ea$EA8)a4$u5>X4O>1){%SRJj11Z0+o}K ziRG|n>(zCv(vvm*<1w6DCEF=WxLY5`vl?Bavl2uM($|NajgV%_PVNi-H*34$U03m= zw&)S&5KV%avguzOb~4V|DJIIp3iJ&6!1-zSAM#Fm#nk0_{^Ivmp1~bABlkudpLryA zqxRan^_(}=DV0N0{4noUGD;?%m%o1XAx4^v4jmP_RZnULIwd2nc&}V$s=-3)l|`1U zmsehPN4@M6n0r!xqn8`jy`u;E%pm#jMOWNvLmtIzwVd$H9n}_)^Y*B@+&QTYe5Z?{}{8+j1Q~az<%atBbKwZymZZ&bIxYDGzUjB7kx3aDBIOly{sT z<2-4=JY{D>1{@gYsU3opWpVT$W}I!G4O1HY;XThYT=8;OWg4-Z7eiSy^s-XyqLY!u znyqqBb;aXp5<+<2m7M)4?;~bV%(J@f%VXK~FttwtcyCs@A_opj!gVe82yPyit) z#W;7me^{2dH`cNrvF^kBWQ(CuC??jiD0`*~-fi%*`HFQjnJ!(8Fn?~q(Jon9ZT%`}y> zg|?C%H3!=Ob3ca%YT{+s+BXZddNj1v$zc4^YdL=eftP z;qt-Oe#8%0k5wBi>%aJ*0p}yB=8*r94={(?Sr@L_$xS^qPzLjS)E*#z3iiMnhg9gJ z`pMmyLrl3_amk{$JoktjJQnjiwWYm$>#PS_ki$P>R28{uC4cmf_zx?aB_&2BU^acS z{%?N%?XpejHpdgu>|wX9?yfBB?}Ib3#O^ZQ%57K|-Soz8(1FgvQs+W(d! z*Zt>{#-2{NEhR70!^Mg-f`O9M?YJIjPj1HA94U+(fRUWP%=xfP>c1iZzRZDbO6E&> zP2%v(lyk;;3#2>LqH|B9=i|K<(miT3yHI;}q1R?<(*9r!J(EJs`Q6e5-vHdb$@}}n zLFv;7Kg|5i_d38Jy({veFIy6ZjXx~~SW;tod=jRfx-F$tpw_|OB+P97Rmywkjy4O3 zGoP+5SBzq=zDV8R+l^(X9&XUtk&~a&Ts~_@T)Gjzr|$ox8d^V8X~O#F;7^qq_tEax zD}SC>yqF{ha!2n1&uyknMR|1&_jV7E=TNCY8a+h^+jZPW3yYRcH%P|OO6m9#+*;~? zgMDEq)*dq+iYnd-X8gXW?ky0z?4s^kNAfg^s*2NVFjp{c|Gm@qm6Kq_Kksqqk18RM zd+=R3TTDw(FR)6)0?t`BIuxiY*Gfb?-l0*x@6`jkC*s#w;(ih4!Wia_AUji}`Syc} zXnUA`D9l+x<2B;Db-rlQoZPQFRV2@S-iSVvi02htq&0CG#1SuzoU~ao9pHh1ytCi@ zd?+=X=Z1qK{l5RymIrloLpT2YZ3Jt%XFU%bHe(;xv8w#NrXS+o(#x`MvT%j_u>Go) z&(DKb=ZNR#Q$U42}_78NbJ| z%yu_erqSndTq8NJo*Q;=Pe$!_{pG0--7$9s>w~7v?D3rQ2OWuB#_LNzU`<7ecIe0&4Rf zObvT2SZs>JjGC-1D?SpGN71OoI(9?7bHZ3V`kDBo5~tcJOdF`f&EMReJTz0-TO5Ra zbCb}*vY&9Hz#j>d6R~x3rurglkHk58Tw1U9T<(a4Fb5{j+ov{rN)5{ju92+wdEPv}Ef+lh>dA3son5+Ja3dDy&K!H& zSrWd`bE6C2-G$UE!UucqhM1*e-S`*6<1UP|C42j4|Ac=-6X@~FINvfuOv41c=fAsT zWi1?g6NmkE*~>hvfiTvp2RJvJvdR>njz^-(_EfZ(@>m%4FBB>@bM@xK!eDw>jN45Q zmk(2gR#gJw#kt9WieJ@79#KPn7Qgs9i}i7j>GIa8?wCsK`c!n3Jp4WNJ-7oNBt8?`ZRfl z?ln(1Pe0{Xmkk%gxC>0)wdd{js#O`G2<18XoN`jVa8EMQev!ZTw7rmfg?vfoff;V& zgnxZF8|OKkl&2RKUgthEKfAid5~0y8>fkb-!^?7o&}2P^vu?}}k_4-H)KetBeQ4h` zVfX8J3}o;5y5x;uni-FL)@d33rpOA6$1?J_!lNzlAUYnC%{fDC*c>CaQL~3JKU~&{ zIt}qC;n_YT_a%QY9vbF$=l5z9w~5EC{`~V;dw3GxbE?NP@ns-P5DU}IY4FkXrC&lc zUNvIveb5TC>qcVg##9unz9}4iMU4d&Ytx?`-Lw{RwyY$iXY zkJt~+1Z%erl3VBa;5hqAbV-!Wm-{1}@95FZm%@q?dc#?k$2Vl_J>v6Up(rb+cXPFK zh8|uzdZsZKoSUdx=Eu4;fO-X{rRvQ1WE^4tRp@FX49+K?u^ns36TU*!GwS-V-s_e< zTjUfA(EpW?GAjOmJd=-& zOmX^794_Bvfm5faE_t&C0--vx5 zb4%?ZyM&uR^;par=JoQELQHZ3E^xo5=*dIjO>jI+7W1r5_$%z*5r@sG{C9iS!f~58 zR7xVwIjlK$)rf=7yfpL}-yJtC<6zJKcZJ0u?4`HhdVUv-F%zH)io-$vyFNvJ*qacC zW6a^z&0_F+LLA0AljmPRzSk@2VE8i5W2XXjW3it1>1PeK^Qa}ipf~%|`P2ig7m2mJ zQ?`BW0lS7_NNmdcCG>(Yg1#XO_+C05`=*Nb55#hwlcV!5OVi8z5X^q8UK4*gjGD3g z4OkxxyD(91%DKk*nglYSOO?*!LdaX8MJeAwiwIK>#wp$4*N&KAMvaU?bum7k}W)GrXtn3w7lQHNp9NrNjjNgnId@WWxTDy~*2;soyU zC;wIl@?Oomod!5g7F6tm2R9=}^w11pH95voHP*nbHwgxJV!AxT&DMy5%=@ljDQn9i zw}t$ac-(U)r`r9e&~r>2vfGiz{-Y)mGhi}R7f zx(*m!m0q~)seh$S!7=*OS)23x4|c=aJCSeK2M$b0|h69J`H_Ql{5A4QS*h2hu--8Ck_WxOVt&wX{db> zk1@HC(j^-YG-w--w?A6QP9I&7>=2J>KWE83U%KE}W$MR1I4Ylvb3;xS=C#5ic~O`T zn#j?JFI^#sw(Rn#_|wHcnB4R*}t?`(U$wG(6hP z5c=+m#75$A|F`e9s3D6h?$b+=@%j7Vis4BE@=t=&uzK`7RjunfG-03hci$iNFwS*@ zPjUat-$h7dZeGINwR7NX;ZZnsafr8nyR=1Uu!S}Ldg39Qi-fhT(=IS4T&rCsM9+%D z+V`p0Wn+SQzOiUa{It)Q`Y>ZWhow_R5$rGfgT1NFij z>M2=9m5=j^%g02EtD*cpF^~0lXsA+IhbPRRw?-tWybE+FtCNQHr@p9P+Y{R{q#?v+ zqR@`D@C@eUMZPnHW$jXsayJd{4sR0th9{y)dKyM~$-<|r^xSC3JUrmOFsUj1iwl?& z##BT}Lbe4uy?p464~P&I7&Rp^rgWTq?OS z{B9ef(U`g7jcEq97e(U36?(E0&-zQh0^3c=2nr;eFyb>6v=Hc@m6!*&E(< z5H9oXZOr=Z=8jaMl$h@5Gpu{huNG{`jcKmoPQk$fL110c{dp?3M&A(34YBBzLhPyI zFJbB-#9cPR!V->2Yg|BhJNCI-TT6huZ3#<5W`nEo?`{s$Vob&f&Z&h(F) z9g9|)XuM}{zni_HPp3#&3dB=B@EvpugLI1?so9~ZHa`TWNA&QK#^Y`$dWnvuNAfH? z^!n$AK!1A2Z|H<1@@D_2V(78a5^>ahtyw(=n>yCSJri%7sTYH|ZI^@*3q0|uVhk?j zO%xhgxZ^8zbN2dXiHp~`qH>F9>9?*34fBZU8M#|%eMUXN!xLS*kf(mCP<6VOJH~v{q0iNWLfR&3boVSD=ZG$6 zMb$|inln}hOX`bp)OY$cj<{cB|Dzoz>!A6OiYr6ssn2j`=gT;EY+6AW+k(7B6XH2{ zt%bZ$&UW?_TR1a9=&(K!wOE^xlO>Fslz_Xu*WAY}5bWtuu!pt%nuR&Se$XF@ajrew zC=BZuhgzFCk5)YtRP*AnYEB9k9W%kzLGgIGf#*E60Y)?bzPOr#2c0`0>lVF>Z*oth zLvM)VSrZN-kHOgn$($9Ywn&DO)EjyGsp03Bh^Q*s#kElUH3;LV>6v`F2BH@QL;4hfKSxb)(>4ThD7|TG zd=Wkl4uStAYQssUxW6eFpSp&ilSK=JRi$EQK`<(}?4o*1J(>F4q5Z#kqs7}(;?e>w zOd01BZQF^3h7eddvA_0kHN4$PjZo@keVk&UK1eOG#p@W)7t7VhcptXM{jUgj2GY;`4K=t{ zJ`wIQFFn~#{W`~Y!s3+J|M{1l%y=)%B!8x04n504o(Zles3oH?_9tJ9?hTruYCSD|8bi=y%mS>>p%!9=|Fro8)v;44a4IRU$M`PitoUG8 zAhL2;C$|#B0bc?zvmej){Sw0sdZ?`^rbh1LDt3#{ut#v9PF=slswaQR<6~WM)U>+# za}YJK?b7h!P(StAk~kb?ZJ_z#tJdy~;T~2hu367jzhJ%NxG@C|54NbUoQZ;GrxeH) zj;UuIi$W)IPC9u#QCsz-&Jwu@dnQ*A{#1^^eexwd+cybQ}5|5pHX>Soee)(FNoy{Ro0v6D@RSc45g$Vz7SHh^*$N()8kf#=r7@^q6*D zO!4)hh7k8OM~@P7sU1;PlbF9#C9&r!ZJpP# z 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

?M-}G~0e6qYaGd^u$GQt5rTK)Cp{`5J8~w z;!C#9AlVCBc90`IKTJ2xhnl00*jM~mq#Lk~zI+wrnyM{zNBQp0{K0qfVMpD9)y%zL zskszWQ#XQVxZwx(DX+_vu{`G;?z4wnyI)CTE!U)&J~)eGm0Dwi5xkpq;HODSXA|yf z#Ixu5U0*p+i~3de#PRlTlk4-|+|Ar-XJ{o~Wo~%AmYRDzz2!9Xa6B@n=Gf9Qc`Nyz zCu)#CmQzDflY6sw4K>-6=kl_eOGWNcMK%2EQEX9k~Vz3 zFLplVIXN?1jELgh*MwMKl^JL-zzq)c7>h2eVG(HIgupgFX#V(w#c)%5jNa_{Pn?ZA zHO0iW_Gs~pT97$c#gLf}@V&1_#saqF=sxjW!rpfq~H@5k8IPmWi1UEuCl8fRozX7X$YA<~o2 zcX114TM}!Q35@e)og7P?dxb?1@{X*K8*txlng@3S%Od1oC&-)Tvp${pLe?;coaO!c z^=3mQ`+hjykRM_7PegSH1?g%XSfZCtcjzkF~i zjC#K-W5mXFJQ4K3AKRZh!;5<d`Yh`T zr|LSZbUp{>gtM3KDj{n2XnZgBtlO`wwc}lv!I?6#^oiEod*-`SD{Yq2jPFw`p4)_g zmP&XV<|pQJ_pe2An=IlgU5N>jUsTLFKsMw5rB=AynEMt_`2CG4-pI9wYgnstKJ}}m zQrdub;u~rOzG|lI;jX}Wb878|+?A^xqTX=*5NzrnBRkpzVkzr;_km^7*$`i}VL$sV zVVzjU{Xyex{;;0t0WZk~F|T}ac6Akt7FQkV5$Ol(LwhW0pI(NPkbmdhw~rda;)fkJ zvZpgDx+HoR*rO@W_JFvm$}HItKJ4+Dn+?~U?ct0^tR-xP7+ul|XP7Y-zx~JQnsEML z>qy*rTT@*&YrT42jI-%AC5C5qniKJ|9SxGZ6!wdK z$jLdfTiaP11c&B~bqfozfU)_T*M0}?6nC;mzE14rWBdE!{ww_VHxLi^`zFrg`_Va+ zy0X8XiN=h_mP9p_ClO*p>Z?^WpmzDz6sb5j9FzGB^r}};_7X?kJDs)JR13w}fqU3b zsiD1hl=3h<9Pu5=0lsCdj6E2FzntC5?L~6jl|XFm!FuRYp|sVII#ir7J$aNN3RWJt zdf6ZPRTp4^iwmmPXDu?|5za?D;`{`E)CpN<5j$=fCiefAzwy2588oqq=ehXXgM_l? z2!nqGH588Q7vtXq;XZ4p3gMeLC@TP2-&yZ%Y>v`J{^-sgu=GxQykbrIjWMa-vlE=j zy&6)BejlbiVLFfcaMgL{KK4QGBkslW`wY3)7e3T~>itWN{Nz4(-X|R9{CD-<^~BlN zVQ9@~y>CGm)THKIIPc}&-P@oie;!lzP^LTUq32BMAFvjxyX%wa$yxUY-Xq&a?ic6K zbLKMp#G0LDq3L_-!HnZ`J)a>*f1@8dpG})97D_!i3Yn|eJADpNW_E}|wa@HNS}aql z8c>JrIcJ)0dn!jf*bBz;%>TYGuki@Pn)jSNoarmS|Lucc#28OeF(7iTf;{8DV|{4ek8rt4IUZ;^y@o?BJBInX@HNAue3 zi@pv)spDF#tQ&;rZ$=2!reP>Qr_HSclZ-SN8S?zKeIsgg>3H3Wy8vHG#TgFN0Bp;= zefg^R;%XA+wF|=D#B*Z#@dONQ&-|QOBz9;VkHtpBspAfcjkd`mppI^Gf1!Q6@4>}Jto%u?Ji{&(MMd-*|Oc@B3Uc;0^BQskj^cVHy%vs3$e zE7Lk3Lyr#ZJ*xLoa+?)my9qr9n|4%w$ouhwzi)Y7V`cB$?HI>=@@`gjrMl%toMFy9 z{^z6I3ca@$tDLl zb{XsPj^0X}ufZ51(pNWrw368=5S9&Dd+Rk)E}Qz|(>2~HucBms*2wh&xo;SMU#PXl z1s7SPX5`k#<0Fo+C&zVQ^T8I$$CjZ|^?$RT|6kYb=-*wL-GCa2^rOE}>w+Tf+JU;2 zYLuHa(v3e;gcHmaMh{JO1~>0u4F8OEX=`2jtTQ;yTv6>_9bJ=>BdFvvdJyql(Oa<_ zIhr zZ{6LxCo$*^@zSgDx|2`uA)mEJ>c?1}UeFEv;0M3#KS;0JB&KU zjCtoZRdjv(q~Q)@?jQ4388JH1V~g zyrJwv>m66dwu*(*9O4ugPbfW{V(~nZbz{&erOnY83_Zx%*(_O+4@cq+>q*lVdzGrj z;hg8NJ~^AGsNc~uxeoDyfK+8_b|8+n3dV+Op~|@rzPQTIdy8i)!#P__Vm;dGoSE{O zx?X*m&+U>0WqaUq=zXJpQQ0v1X4`RA^KYD&&2FGO_BtDjc^?%V57TwHQh=|#kJ7^S z&;#@wte>dS&Ek}<(U*q^=Gh+A;<)Zr`%>&=Y;&Xb>V)RS|BG$d%r&}ELnK_{*{=8$ zr@L`&A0F^*uivcJO+UE}PP|7Nx3Sat&D=iWF+7FgGqR)Rm4&!ZV&>%QrQ2t199#n)ST@vhPYYi#WU= zPw$xLPZf)Yv1r45GT{78W%9>Zd^yLu?p3jJup|aGnFqdI)hVsXrJTq5KL6PP#f&;P z6|<>{`gNN!@elQSJ&C7$UaS0m6iB^?U^JFflqA6q%HOZ&hbcRbcw+0^U~r*Ti8|ZoLj8eqx0{i#a_l)ihHJO za=!$hpAw^U{iUn6=>=Z%eC7v#(dD!#M{UOKMBrUr*trWxWKQT;tDt4Nt4njRk#}W{ zI+JxaDVfmg%rpN`&`lbjhGRYH_f*hR=jD@(c09M$EZXW$R82&0#`fLz`Z|kl@%XfY zv##9V%Cq!1%ss@pqxSMb@X%3kszUGsQun;%s4UxuOo zS=J%-cPg97d3Sihd2aef#k92=!&#G9Jjqcu_;BWOgIvL)G$rH}wZAq8V^8clW!+0x z%>6`ccm5@%*RJK5Kz`1(LorG}Ydf5H{C|6||35$1_6*cHs<$AGIU%6zuC6%u7_3>d zSq3*KDjt3pcEmSce{ETG-{c+I*X0CzY~!L)9uM)5XK(nYYDKrYU4}K!p3i}2y5{eT z@RPZ8e&>t2RznY=8sj#?{IG7(&0UzqbNErUNvCbT71d05FK4IftYh+E$oq8at8m@a zN4c0fh~HLui`&WP>5M=@?sz9cc{?=$n2eI9C@SQUbi+cqgr&iUc!gb>8n+pP4U7RpKX z@4=#^yfSe^=RwqMbEu*VzPlVY?$km3{abmm*zSK?tpCl=mM^k&8+vVr9`o}aZ~db5 zYN!8)X&BuyDGK@i01H`5FZ?{9DEi<>%wRmP=kzGLmH!xj_%8oUXkMgOdI%2M{5Bj@U_*`%VjKWibYk-F(ylF*EI z)`uyky5x-su)f3Iyj~L>3gU5SVlW=Qt5A+`=k5`?UX|ZVm8n6XJ79od&qhR6+7~#61i_O<;QO24SO|p(@@Mw->t+CUWK?adVD7yR2pP@ z;ejRu^Sy5?&YJ(n)mMg9wS8ZU3fPE+jg44{t+4mN?ryQL6Ge~?fkPY)-5r8mfPn~m zpS`iWJ5aCK-R*ze-}~kI-cLUF!FzR`b>^CLj4{V>f{?=e`ms%vMeSCh)xkilJJ(m) z$UnF5m zAo;I!XC?7UJZ@#Pw>O`u6xWQ!71rL`TLmSXe$i#@-v$kBsrYl>w)t*mE<{#Qv`!J| zJApi4)(ic_Wz@Zw@H~xf>V-uicxXny=qeoXabuN+!=o{WJ@C)gmP$zbDAXfPdZbSsrHvua z`6$nJFu%)&Vdy0=JM6p#c4!HT@VK(i{!XV-NQ$QQI}I#_XiwF(!5H1O;jqjV@; ziWJ`4|DN-UiO-Z}Yj)uc>vM}egVll3NvvmmHf-jpzDTb?6n}ol^#FC9;V0@Wi1Ged zui9BX#unCu*J;yLkKdQzX~P<8EvQ#EA3-YXz@$eV)G6nR(UfPq^n87_a7+Py^K1h~ zR#A7Y+>WU$HXwK7Gi6;#9)`NH4>7!;#JtObCYW`gWwG+|4*eck6JlfX6uyf{blF3`gYvMYP*zUKtA;Yo$QhT2_n9}Cthg>(jr6w~472BV z^Ttv*@A&(i%e@TL9UFGx7yAvDH8a#smw2DqGgmSXQ{PGzDCRxiHzHcS(EbziqWRXl zgs5{yJw|uFSp(ayW>)ECj2*=H=+b!Asq6@`6y}=M@2hTlS&TCFv9q4ERvWA?z<}lK zY2!@P`4QXUz_Wc^{f|<=JP-Cf+qRhxmCcQ_v5+%e=)jYTxnVlK77^Q23YFyL$uNA# z`+qD``9<$FkLJYGn7up7Di%pD#JJzAR9v=4Bbr$8PoKfc^M{czAV<=3nuW5L^W(v* z%r1RYSIK*=g&e4XUi_hdQp#QX*7WXZc3W>s&DgdG?p!=NqCYl=`Bb}^YdrLjz9IiV z&-0kyT~)6~x({B^lXJ(b8~U>q?r6f9(3#jem9o9R>W@Zemf=)-Cl^E2zewoDoF zZYiGG{e8~IN7qq9qISWU=d4<;Rwq9^36~e_jk_eN!PhEqgZF&xfee+MC_KAy=6xKe zM$UhXV&38F6a3YooiC%!NM?2~U!Z=yaRgQQer5IWHl|EXj^+O6!z?!h| zd^2_2w(ZE${JT3)L%sDYkGrnyZ(Dp)=GbI2i3ckG^NmwBCMxCw=}~izSaycDqU1$mW)ZccKPM?m=>JoRdmXEr^i=N7qz8hx z2G7bGD~_GQP;SS)34Y(-e4}UE^&o7${y-ne{h=hwV60hmOka01Jq798f6b>zKb3vT z+8M#P*Y}X#VYM%E&8h8ca83V_8vn3(?i+;HRdxorz@m8&T;dih%Mu)sL+={1_?yZE z>d3w_&;Gx4<5=Tn>W|c2c=nNcm^T~LNv}?#%2R62`{b#gA6H;3`;FhNcBtbfeZn2S z4Y#IdtGR0*qd)PAmo>xHoc@<_n|JulCl^)s>Z!i2E)J6vL26v>Bkmmky%x zLlX|68@+oLv{H8OO!FA=z+=I zx|@Y>l+%XGaL?fHbGCY9q2}f7f(73`hv7PP#K)7E_RtTLgaWnjT?L*~GcYOipn7QT zCwOuGYNGB`Lp&cNgSDbuO;pnc@;GYV}1y|*Aa`W7_DB& zE5ID~41JpSQh%J@qqFh!I&u4|Ka^FK)6tY%YSNo> zW$n)-%%9A?POsz2m^tyNMy_$wX~~ z{I2=>m$k_4YU$N>X^Z}(A!k<45U8JIy?>q;CK-od_G4q^ilZz1gkZ!~UZ9xPqfReA z7$eqJR_9e(hKSC8`+c3;(@TA~XBQGU0}7c5YU%frSaqA4*nzV8`dbBVl4o&#c~srD z^b>yZoI7?bR$VsmoCouK*5#<3hhD}(_KIbn!&U!}NBCY7@15bMUT$*;V|dQi>P$6v zYXPe8oG-PrQ?o8^N2_Gw7%wcTwoBQ}i zc@~rezoo1jRjw%Cy3n8V7k4gR>{k-c#K8M@0P0LlQB3K1?p;nFgA?A$v^|mNNq@GU zW)qbux0p%6-P-l%tdxJe!_aRub?RNslo8MAan8N{g(X#$-?LZ)`0GF4Ug+d@lqtW{X6F|!C|0Un7j+e*_TJ%%~H>vIQc*QMx!pL)jg>d7)q{i^z_T> z#pa(7*@Hcy%rm!pjQD}ng09`E&aZqKohQ&!Qk$rD-*g1``1a-3(x{myiqVrjTeR0Q zHEnPKwCjl*Ta8t7=WqX?7tp|cz14|vd1%18F~_mBTB4;N>^XiepH0;IpHuPk-Mtj(i-l>k%XVs47OSW3a6}02lUcR66EFp%c$JqHB<1&->iwg$BLy z<|t#BMSE*~5LOw8N_wdlwc~ znAcE^zP$uf+dBPKpUnqg#U^<2X|9NfV3)Qwit)^G+)+kk&6dZ|}+DfnE<{Kp}!)qgDMzx|${(L)op zHN7s!jbz@5*)OH43G?H~ea!Z_sqEQLUoyUZBNi4Zqv-#9HJ_T@!O2RSPoa2L$hvWO zgVKuoLArlAn_=^ng1zKuteIPPV5HLAgjs^rHD1mfpbU2QC1yo`^$=^t=72jaO<3n= zbW=7~a>iL|Aml)6<@mVO2;$$Re@<^Dd(u*5PVhsd*h?8S*#Qf#_+iN_D<$`^J@)Wt z$_k>C16QVF!IQuFl&ZmtRX>k3bf&IgYj;IGwf7(v@oYyu|DaB@xy0Ve4=W9Ss~7e^ zLZ^g%wbs5_q=v>c(H zAC~vOe2@iIJ=I#9Gcb~~^O481RpYkFSeihsMbKb1a$y_>?&aIJsH@tFIkP?$?89#~ zQL`uNu&f7r<76ZC&KT}yp7MuoeudK2DFn5%m>Zp{Dh(6q^GY32lRq1kCsGKkm;)3z zK3ut47!09N5ava@D-P`G?$!>1&~Jfa$@5#9#Vmx-Ns4Qc52EkT>)v35(&W4wY&fgj z8aqfi^3Dlw1E|>;I8a&KY!&iaakiZ&C@rci!Ln<Qm`@vZwBbXn@_5Mzn|FBzkLsuh9KU7WRpda7OLg<<|3 z{`|U@YR5aFSlNcVa#w1opXjkYIo}^so-yb2cnA(_>3?E;T3LLA-rHV*$iA?PdAlKq zAYa(Ida`nv`sd#U^h=)^s=S-b`}|%5jkTwe5<=|FOM^NY%azn7J~+qkLYvid6ptou zNTIIdQIn}kKl<=IAa6U*bb^vRc_k(hi&!QNRc3N$=LvT)4xaC-nA*-m&z9t=&sI~q z9+`<&#M#U$hABNBOoc_*-{)LQby8c;*TI`wg6pGisbPD!;LjO9T+OIeran~hpvVt1 zE9#X6Jii31#_Vs)s+S#Ia}pWspNG|WqZW)ffKc|&P0G)!=_yKgca??A;t10C=JYucR{@h31lM@Ev zGXFc>+NdYmY2j0!JIFOn)Dw-lOUr$$m^Yu5@_M0IPTn-S-c@Do6Y8Jm2IA1IgGyCm zM6>CI@=c$sl&%cMo?9Bcwj(yk*?Qwy&e5kr6-=aNb&>{4pZF;O^cwZ|qb~ZnlMi{6W^lr|IQ!L>g3)EXHm zA^m0{uO8p=g>4nj{xe{3_V07P{@6)I>R3L&QHssj=J}TgDS3sj&3K^>4M{{*o^#fL=4IP^6ynx? z>Xf#(D>L4vXT9O~y0vN9xIG2PAdWP)_h)t6$s8Obrtx9m1@*(y1ZI6w3#aT+7xawA zNA?~$%@Wn!Bcjk@DKU-B{_6I5k!Z!)@TA28b^4MBTnr)B`hA#Mdw4jk(>cE^?XH^9 z$1+{db6(a$EzZ#5%Ll%j*0od@&rmqeBZt@V6YFg#`V9!+KFDrfZ28GJQv;6 z9~?Os-L`Qq>w8K6Y`g;o=ehk=pIZ%Ir+!?fLlvI$`6X}Epqmj0q(-z)OxvcCdHsTd%SX8p1N>( zG!lt0Yed z=9{?kBr{%3w<@{4=<(0GJoZVd@}s5(>*s110h@` zzoWXLdUIy`?pUL|KDG|O>Tq|+a=sGL)scD_Vmlv(Da*a6!w;q==VNna=BGulao}6C zy-Yvvq65D0&vqd&U+-hT6d}_+{yyhp>r{gTdUEodwXSbfaToJ+c%N%USe996Hqyg^ zcl%MhvUJ}})=z4{;;WXK8!?agq#xq^ud3t2qv76-=W{+^?Y|=ixjg4rE(vO%;%FHC zd!L03>dGTgXuO28Vb)wV=Tano@tpm-4OX9=jX-<$c#gZesBwAW*b`2!`DYWg(^4Hm zwh~7bYN$IuYMC8Jjah@Q%Ftt>Xito;<)qt6ksQjLNAe@iWs1e9P#9bcfMwI&%3!{O z#(9Cby(v?G-Pz-1$13xNP-8=!&Fprl(vxrL+;i-kr*BZcnUinj?wm_yC#6eQ z4-|I~KqBY6H9KAKgT1lW+DXdFEb>$A**?zbujF~Jf(d5_7vH+dE01OHW=)$hbC3R7 z)g^e*grAY&R{b5#YUU_<{dLYR&DN_1H^VWJbIS4y@71N{VMx5pEYG%9Wi5uKqc;1x z4s+|5`KE-ypIG0Ph)3#PelGjjH{M--P<>+@i&^YF7PU%I9WTV94{Ne`*k4`4%`2yxmI2b*v%#sGYc#t{7Ym z!N?$b`?y6Z%Qf^!tFJ-xPt2pICrZ5@8l*Z=V-;uWV3!dOyiga)F#0?%DCHi_YYU~{>@_e}_}z4?tQ^*_#LF$@Yhp9? zZWjpoZl*Fj&yvduKA&0 z$}3enUWaGg4{8&CQ2oa5zEKrwT6k}VY>vm=8RT1kxT`Dg#p9J5-?FU9>Zsf}Aei+e zt&h5QWh}a~Cg@k2t3Ud2Ue4st=hssAzKMc%2fqvZzbh7Ak!ZG$-_2nUlt%O=jy*~) z_55i?(~|x318PTSA5;$JXz|#RbN7Kf<>nCjG2W!c+AB^uw=EPG*pDeAf)oQIX0fdd z#5TQ)a{LfIz*vV{xGz+;TwqoJ-^X4?QB*h38V~dh!W_|wGoYWlR)77> zDy&YX5AfP;`o_#Q^;_^aE_%aogIdx$4lBu`5*f3zUZq&)(^tV8XDX>+C{Osz&Vnf$c!s(l++Y*mE@svbDJpcwm!&l z4uHpxy2>=}axS{;4|}s}NQwy^)Z(4Keiaw&$>uK2o>KkgE6f9;4%m0(Dt$=z zHTXPSgZ|CZ^}imtp+4u_|IR5|IZ&OoE(zPKvS-VwT-N4(JX+Tzm(XmtYWzL!f4sJD z_YGYS)DAZ`l znh?HDIbaom0(0i$?3<&sHrK&ztUt!3j8J}3JJ;tHwE-u3D@A?i6R4v%Y{L%9=k=Ux z#&Un^aT8^Dmk@HBftY1kS7|UM2(1k@nD@$^-;fV z3VnJu1;Fmj6a6O(FWj)8|5);E{h00U=zNvCc9)OncU)SJM4JF)Ii~CXFrV}g{hB5v zj?x$XS&I=CLC{Xs=#Rg2N5Zzh^&9;Ig4H`osW7j>KFw~w+J0R!@_C*Eu|^H;n1sMq ztp7c&)zE{?l<&lM?P5)}oVgN{IBP7DE0p`4vapfwR6?yXrMhPZs(d1^)^CeqyCID} zB-~k;7^@T{r=TP2YDBWXa;YQe|I=B0LO4A=ShqVh;kj`(T+TC}J*q_S z;OmFg6If5C?$!U}?Tw6|0r(!fLtmL5GoAU)I=xTRyRLA9_hfq49PrY=pjUtTZVfD- zc3_tMI;0ZQepqOy@1im@tM1?VDPP4<@>b~>VM6?8+A?+5p;SC?$t>g2rs~-aDL6>% zsCuO*id{$&M4Nx-xFW?dF#{)9ZzDG)DFu(Rar7;B{oZU)#!(w!(17=2$2{fWt#rI4 zE|K~_a6`LmT+~TYh;Z`zUt>CVjM@!{&dLq8~&=YA}U8PR5c&rKH`@Y&x8Q(hw zlc_U2wCjt0t!*T35@#rwU!fmzO$UoY)@0jD`jSOq*unnUJyg+uaM7XDyrxgh?ku z^?muaT)xSSMyGd81N2%>0zw4&rkcG4tDv514@Ip zDfrZ%x`;bkWm?~4l#JrNy)#?+G(8g!IU^VS?yFe(=HRF?&*WVTrQ9tGV|li&!)hoA z(=)JeCi(rHpY--)(y-o-``+bu^gqNDG~39%ly)ceKF<=dp_DW5{9^s8vGK4xPfqU5 zPJQ$+W?E6xQe(P=p2@cV5rrX3aaxs~Zh zRWk%#nhnr*rxwhxUI;pk=%Y_?pnlUN1P3BJ=^bTnj5Z3vme_{+wrL*dNS(T-#}9ei zO?r)P4MoB1gR)H{XK1NaEjrXs>Q_jkO}D@EVKdvkQk>Vu!I*fRd0RJSf45lFJj%Xq zwuNFD&rC6LvYJDG^l?6MaAa-q>Tyo*lbwS3i^zQ}+Nrl4mWf-e8+CUj=%WlXFrzwW zil@+@$u;ro}LQ)tdfcho!d1r|S$d6T)z^zgVQ92D086$T>!-J* zhMb(>uaO_+OnP8?eb(Sw`#bUl3wjrjW2(0Bw0!1$Fz&dAU}kigY+)M&LrZGx6j`pI zm-g|c!~s7`vdSGn3(lFla!O_UxAaH|4aJ}bo8+X{J{V39+0I|I@}8F-_-dqueq*5A zsaO$^$#JfMaQ%U^mzxO%6>kfVW^{Kc}pS^efc)d}RRCKZ? z2fDPm{?4;xv>nI2o`;q7;p8<|EhiRgb4zaGoPo`^sl{q{NFHvSgHxQZX8hbHKeDC< zBaVGnc!s>KUB>_XhmDWL%7zwcu=v6Jz5}81{eCIf%{!?V{p9!ElTd#ObK=K1$vzL_ z(Q6I8M$4ATR%2t)(=PyvIxd%|O^?DYU*6lsE9D&t;n*0@n%R4nJgOcuhg$@~d;DPe zz!xnVu$P!((MArShJ5H+W}C)WmXC0LT=|AvYW#I6n>gwc>gvo}osGx`u_$;Ka|#UmYr}$i={htQr(R{xL3w`X^MsPjQ$2&`i0@n zoJ*3nk1N{j)S*k@FnMS@XO!-YKw0S*@eAuo!aMC>=N#acBCpt!ff^Rnr>T8pi}va8 z<=LhyP32_2RJ3y;&J)s5eqNr8Bb+0)SG<&x4rO8{^*<{Ni==ZV8}Wg?`r5Vm(vn8m zNPgjuHutwltv+YqPDk$Rd1gtDkJGS%drXf8M@wTXQc#%6zG{i5bn8hHvB3a1Hk>7S zY)inbSJYO`87lSZ8HdxXx4(almln^9#`)jmQ0BTwEvYXG_!fY1wIDq@uR|HVW13Aq zU+PbM@47AhokLgHcwW+C6@5kTpZ#td{SRwM>k!nxHbr=_gC4p&i17tD33D3;V+Xy| zM^~LM*pJe{F+U8ge)kYAtPa3{TVZ&bI!vg?d34K}FpOwkA{18g#UTDn&+wzdfVrO7 z#h(6Dqc5f1;EHeQyu*F%<$K1?h}<2Csxjv9px5jBqOiZt*=9?sY<@fg7x~`RNEGC! zBh%4oHhTv9_VUYvsW=wO{e^_KvSXVRTxCDp-mt11_B4}Oxa4aL&PlUIZ^X5G^g}Z} zDXG)4@w!t0Y92c*eeIix-MpW!XN#q0?b3n#0N5VhCfT$}MJ~_N&N)^J?wX7z9jINY z;v$Wyk%&R#=pnFml(cVm9BM6Oer~&dQhF_B^77XKQ^rgFO(Jn;B=_7GR+lDH^E@Gi zxfKDzfX5a(n9tB4zNog)xel|+*KlWkU4U@xB{TGRpVbcqLY)kHvIU3Y#HcgE4{8Kz z{L$iD))}Fyvj$!bsf});3OjajM>&={_4fCLDtEX8>Z!xbP;+r{e_!TfGke9;RP56$boUyzuGhP1o&%b>%>%+b@dG&(~ zH117&`14>{>zs~VE2!(9VkLk0n2LDLZY^$imkU>?;2r0SL~~Qwyh#?iul6S|@<NvyaMfRk0IO)vZ*CP$G!91{a8m)D|;KQWKv zQS_JDFYaVsO?76N?LL<+{i^MXkzo-yI{AidnYs?2@}poip&z1j&gc;N_c;$wNSE*Z z&Oj_NiiCqB<&?a13zA(pDv%7&H01w0qLw;#BOT_rl00 zN2G0XGG4r4Ci0goY3!Lq&OppLtzj?aK8=U_a?Z&Axo? zHrMuo)$d5Slh?km+h4Gk!_k&J;L?dVgz8On@VXd;ox4Ve7Qtb7&K^4GXTG?L`z+u6 z!_e~3AMw*59jdZle0Q`FzLL9{Y8%6R)>ep5<1E=c4()2Sg-L6AzLHD(u(<`go72;@ zJO1`9roZ3-Gg*iSR7Av76@3&8e+Wb?{l6hWXNL6 zOf)1$-M(O){P0FP9J@<=oI}R$Xdq6?)ZxGYW+J@t5$|3J!$*2J)_8MSeE2&I zomPY)pm`(o>#f5GyGYC}>WOB|7}{DE1Eb_2*h!xyhw<^uBOHoo`p5sMk^t9Fyn7mU-!(L*)>yswP%T}gheOJzRKdj|Cce2p(19wFm zn8?)waFgG%FbJIP@gqn$2?QnBrXdkoU@u{)RBvWGjN=G%jmwwvawGZYPoAL zq}@l!-X{gmi0=$=J|pc8NWy-e=j*xgl67nXt}J8Tv1vUCJL52O8#NL~Ep6wYjzQ%| z+`V*OEUY^ig$C7v@ipLv(0*$Ku6Jkt?iM@IuSYlxxHG@6X_`2{hmJD{J>@^%5aUH= zy|HIl^!>D0mt5@=k1#}T^%u)lYS4047}i966jaWJPJO~~zPX=J>!B~&^D`LO_=fPo zoZJ?7jdTUmgnQTA5q?sKBDW}c=_?nkiDs72!qNIH#R;|kM4@nZQ)ue0!@|>lzk^;S z8FK03ObnS!9x8pR+-wN5M>&I3do^1ARx=&S5AH$Cm@fA_pUQn+e-vu^%g3#=5l-Hr z_PvI3-)FgSY(UL}S!20sqm3ApNN?&(P2|PZvSC@9Sz!CkOSaQaM5t~^|_zZ(Z1>fe^H&nTV0 zE(T*eGE?VqmQA(Gkyyo_v5r44T&13TLS!&fPBTNce>irs#~9zWh1f8f_p@CvuK)HE zGS5+){E9ly?Bg~USm$P+=Dd7#LuvdY`V&5&-k@Wvk_XhP*r$*?Z(dcfq0dPwF+ua} zBB9YsFC2*s!{PFBTa$YTFO;}G7>`o#?kHk?o@!?wB`HhbNl-@+zbC$eR&?PNr-00T-Nb@Ou=tt*!>I7$^8` z{`;KkKTDV8{p`WW7rgeFE{{Kyfzac`hpSDHR~DwDkhP+;{~Xzm+V6~bYBiS+l!w2| zhFx#~CJb*O=U&Xi{w!i*+gr(-&2p*hpnr8xTX|!X98{tfW%|rEa;v6Us7=l41LNkh zdy@=Aauyz+Ya-96pN5vR>EHgxP@c3Y8R6T5ak;IL-0naEYVYA4e%V0YJ3bc9mA0%Dg-`c*R~t$~ws9n0WQV}aw5d3Fvkq3A`_d296MH#?Vg%>k zrn5?f$?r6OX~}U5~Z;D%YLxsx%5W|EYv# zZJaRJ{qJ*jc$X$8-^+w6dpU#N(`2(B8TfRaTK&`GwAI@j&x3+#cX6_d*t zGEhEcp9B9x>~*|a$Ze)>!Xn}}C)>1^tvBVOC_#frw37|?=HPc9>dj`hm4`@Kn0T4l zJfm93p=t(n%YqS6%T%_}r=jP^V3;j7mQNB#^_dWY{Cs11?CeDPX@sEUTO;}4vsg5s z598k24dfR;qtJb8Fml76m0t9T!qwCeIQ}>+JlzlpU;1|&RJ0b`m~w6y5{hn9T8b_Q znUBC6tL3vV3US0N?X}d>-LMoIk7C~D681C4b{}fUS)u+Q4c_FGmpBCY;@uEx^F~|S z7M}ISLgFD0F7*|zwe`Z)KOvYq#CM<1=>ljS}AGZFTbd(*8(%R3ik;JE|6vPVvrm6UY+ z;5<^ltteMLm4hB{sXgn~Opd#;3731(qxPSca_9beIKX@JtzjFvu~ zCD~{?ksN<~Gr6^MCI)^DhT}&Q`6x5KA5sUP{xp{5FDYpGgEw6<6jFU$=WunD5zI```$W3J8pWf7R&loR% zU>~yGkUZn%zH;;K8{xq@?v~g{o-<=JUikA}yU;|gd@>J*sSo_}xw#zvVIwn!s8e0h zTu!Z*gUgqhiN*}0sU5Qr6B&XA6|A?dGtk{8lp4rt^2*Ru^xhPTiaRFq;3-M)-X4kt zt{vssF>(0F`658mSngsFgBtV!Ja^4h%J7edwXGKQdTkaQ?KwkqVFts%dgA`m;n?v@ zi;Iy|G+k{Xd>{! z6H=E%LR@Zum5r9+aQ5HlJTxUy9%+|_PyYP=^c^9)#bu%|F}KrJw(|F{83?ETCrC3y zela@(T{%@~jK0wU*8LGmm}?&v~njlzcZDc9p}h)-phtc`OR`tLQLt-)o_@MFhR& z!!V%F4MFnKqRLP$Y#wTbpD%*YcPH!i-2=Ac>9uwzG#E#N$CM0y!#TKKFoL?el%zEz zFDjB#Tvz>&DLpohvbL{y)y%g03r|>N2V-xu#=^AO9+)|u8os^!8MI#8%+j|5G#B) zv59=KA|2z~GW*rbNRED(gZ;!AsyW`0t_|9ZKE%@9d)<-jkK~~|f_ns;?n$m6H{vPZ zxQugmq+?BUu)ZTP+izE-t^Kl4^$l~+6OTz&b{QB>4z)O0lBOL_g|&qiu9Z~jPhk@0 z0A`P^y(T4c25(Pp`|131QZ>ZD;6Nxg^x9W?|3@_HR}Dj!XOQq{Ks2&J-I(hWA^0kD zv4`m3?C@21%^rE|K;qP^RN>M&_8|Pd`$AR;wF;QY>>q+Y0rzaR1Yxd3Tkv~+a7iv2p$%Kn4u?x z;pJ`swNv9i7Yb+S%Q17u-}U+0hV^n`y-XDPP%js2A~z|@z^qFC=zik0)TT4B%~1Nb z&HG0xh)G96BlZ~M%A_gDIWX%(Z$ry;$<$yoo+W9J5}6{EN9G}VHTPvIlB8?LHlnB> z&-r?sROfRxn)5At-zi+G)*=htj)ve*cRy)OzYKW#vnTkzL`waT%8X(y?ElP?+O$uG z|0HH-`plP3-i*iQ&iwZ~7fUl^V{q;mvy=3#N>^2jL2Y7gEfU5EV|=4AhPqNK-Bw`+ zb!F>4n9V#w6^>EYlyjN6)V@1}*U=$x&eLMZW-np=eCGTFuwE5)7ECWOqi<6PbTcm6 zKHKbvhF{oEmc`lH=Xpcrn^Jl|%QiFA6Gl6NFxxK9_QMnpxUC98iQz6AhnBqC=Yp{O zZkSk{=8h*r`8~C%XVZ+DkjLCR`fq)1aCV-2U|kxz@EuGDdM5?7OM@@p!JWqrNE2c? z0}`MA@H;u=K_|6B+l|8%>)o*-XoYKeZ@DyT(YVZ8u{27y7?M4U<}~ z$;QlGK?qBQG`b)Y#k?m~*Y}ayy-Y`Ptq|Ofu#}p#<_uoQGgq5Qn%XHi-C}uK?;ci~6&3}%)7*cUyV!QNZxr4+gfVZc zzF_k{0zcd6(DT(m!DXHf(}~4ho!?KmS|=1Q?82}qpq{Y$9{Chei@U{7ZO4H8%zScP zlXuvzp~j$H0J+;r!L}JsykX-U%-Pe)){W=fc6JbqhIX{g=<9(m2Q=v2uxP-Xd+unP z!+p0t4H0MUh7xLYe#~xWGs4>kOB?--^A9{XN}f@WgcIza6D}N<9t=-nUNE`8d{0TU zH4)p`KQABFQ=0lA0l(QlKc7-rY8*&DYaVr#ztmEPx0#TLPaf@)UYgrJ6GujCsA=C& z`q(=i#pN3K&z@X5`*StnM%GvpAtghto{V1#t3r749q2vegqBzcgL$_8g`Oz>OZ{mYdm|S+K3x7S} zVhEl&bw9K&FO0d1p|H?j>TgX>)|LFo;i~TjeDGy2S;V>J+dLa-5j9{BLh-!txy=Zd z04y#KrLL^8?XO|fAdyV_F2i_8Ybe8J@-s|MM)*83D|d# zZ$q80rB-i=Pc~w$K6Jk1u2np`IWv>g=!ea(iAgxyAppX7|Ko(>o7TE zyX{;UdVgRKws3;&x(!jE%%IJN}a)ye2N!cR0`I?IxjO5%-9<20>SS zn_#p#4u`%oZ)x0SK}-EiF5msA;h92}meDYG;k|8?D0nxEgj*nU3U5RSmd|uBbqvOq zADx6ZJvj&4h2XM#Ke&eSItWvQIp$; zJ@B4Ar)}<63xGX$Elke5vq`ntfG#8G8L{-Ujax4tynY#sxiyk)y6pEv6=K@w8y_6- z#?%82e*)3zeT4YU$PL>$OTIE;UJ-q#4st$Sv%t{idAJv6(7$yBFP}e`LMkU>BJqt6 z7F$Y(xh3E>F=vyAtG4b^Jf>6cRK0k;@cUI9b+Vkh`(y|Ut0y6kz6#ZKiNeD4bUa`- z-wSc4FrrdAhW+a|8+KF}GBFh%)Jy1E-x6kLB%`ocgHNz4Mv8h%=MH$D>gqItG2Hw#UU zhBGfR7^lj|3LiLYkE6c4;N{NJQ{==QB6-fH#&RU<%*FC>oSqsePwX3kOno%&TBOO% zN9%BTcr2E03Y0sAgkVu7weM9dV4^5f8hZ=z}2Tf#MZe1#fQmr{O4 zFrAQ&duD-1oLM0(-j@bz_Dm(44MfALsd!^Stm9s7Q8OkPl@mFS8=8ro;u6u9HN+&p zxoA%RfoT(o5shmpwr>!J*=fwCGHWKbpG}Xb)9&vmXu{L?D2GpVi zO}Ztl&J4#k-XHa5gwQBjhmwL2RG%DC+JU^G=TY*qFPqC_dCq+sMWEiYt@8Bk5#+V$ zM>FEHT-!c^o^A<{UN_X66XOKmiR4Y~^!;aQah~7Rpp|X)rHi<)`A8cESis(lur+W68Z9tSv?jPk_TC-t(lY z;@rw<^l}WqmWK7jSqZ5q^I@*Wt+wLQcgfiElA27<9^!;yNx08Fg?H(Kcp^CgJ@$|@ zO&=m2d`fKj5B>6P4HHN8kA?lvAY9upSbP^xjUPR2$KU8Ljw4=_aEZ9Yg^r@DCISns zf^p!wi5S!|9MXQCzkEta=&M5?@~r;Ckz$W{9SrVh(e+gu`D_xkd0psr(!NBFi;p0m z9)m~Pn)M(o{5-zzps7*cMWYu$K!=dD}5Gm ze&=D)c=+z9T!mWNKEXOqd_NsI2`RMF7S@U#O?GN zT4^cf1Sg{(HCG<*`iiRplTn*mHSLPA;^ps&aF64T>cV+qW5)zEB|o*oezmysP8@dI z@jfTGij}!Lyg7uucRw$&bZ;~kA0uvg&rhsU!QG0t{F(KE; zk?W?x$JAuefPe4v^mZI_zMJ@o800U797zks)`@)ed2)VZh7?Oj#^^98G8{dxTFTL{ zI3HJw#B#?;@)P!e)nX%If73xOT@i$bwTbsxILM8f((mL$I4oTz$!C633vaK(-FMyO zQQU_e-=B9qdA9Upt0#{6gdpI#vv{hW8#yz7H1uv>cTLnT7gt&st!L+h2#4`E4hSN zNV~!GGN@-S=idoIJ!&l$eOxZ*tfTjX1$Dr?mdNMY(x=Bf0^4d#k@rzYIyp^;!RI>3 zcgOnTWrP-6Hm#Ai7P9sdBc0r|pV*|C8*GO&6LDA-e0}eNzQncuy~8!;xFaO(?{l^v zs1f4WdmiYr0fXvS5qDkX4)hG}IE)%B9`z(A&%3Q};xDGv494Qk^nbHR7jF<#Ie(Mh zJK3q?>WTE%iX~S#mU$m8Q5bAStf?!{!G(SA6l#jDl!=C`_!fl)!0YUJaXazab;SY9 zJh~-To1#OL#{mew@{icPaTvPQ3dHLfuf$87C;D3l!ffOhanw-GfAi_5G5m|zel>gK zf0z%n;$nmO@)pjN6N)1-<;!Y0%qs}>hD9RQV41waDiDGE?8Ad5%Bvd^4`%Opds*5thsi#>T%*O{^Y z1VrM&TL*a-G3hTyBC*oVQEnE*9&;JF?{kag<+hx$$g7^%HCnFTj`>c5!m*27=MUol zYuAKfQjcuu>nqlcZdz>E@x%7RWH&s>A@uyzLF8!FWgbW32|$W2wWmRbm{vIF>q2il$EUEb)Sg+R_QRG zeh!!Kd=RY`kY~QkJVMh-_|;ttK2BtM>u0gBnu9HI_o9uX0QKOxj>70#D^$X^V$Zt3L zBIJ1(jE)pbE)Bf!j-PAh$9d8N4>veYr7ppLf9dU!)Su7donsz-lMZfpzv=IDe)+hr zSU~RgKF_(<<(6XI`x+RK`);&ur1-Oh`V`{-$ILv%COQoo+m;sjqr@ z?6}D7TO55rjpBxjVkTz`GwzAhK6P9C)F%|769dt^`Xlj8wGa%TK4H?+o8rsrAs9rB zhvA)_;`z)_YX3O1FnfI-HRsQXd7dbmDx6NDzOfg3yNl6M1^0Yc@IGJ9Zz5a2)Z*8; zNZeioc^rG~!+duQUJsYY&E(wA*?vnUQGVGx@PGXE?_X_YD^u#M7lmV7)8|qJ4-?o`TwcKMs5>(b&P)(PiB-g8Qp105o#@G)H=6f(+^N-~ z#Wv1guGF)(a1j;DNDSkBu3-`^rp}ANOWx-d`e<==a5%!b&ugEXB5q^fHHi25_39ik zX&2unYCmc`-YPEl*Wx3!i~khni_3^ZjOrZ-&lN?Y=VxL|)P}8XvqzlrJQ%Bq0X^-Y z6>Cx_dzStf@$cJ-4F`we9ksP{1QTJVyAETSBW}LdM;hEshY3nJ`rZ5~RVvV;kaaCK ztEoKBkr?5h2n?NTE`O~+$qqH*X*YP;X_*9pQ&kCvl*o=6|~_1sw*7eP3u`eUkqj*+z7a z&>^0BgGc=!eytUWhp(AkQhlQMZD0i6G2?Q5V+Zl&(r{eo9+R=oQH%=J(bJbZmF$5( z#IesQrI*>F08wz{EcOrI%2y%clD45ZT8I0q@505m)Cpr?nS=kE@-Pa zQrpL@^Y_D{tNm75=&3?a|IBbcI-v0E!-`Yo< z?#A5*?%nh}Ac!8*i3f9c$@b|G@kTxNZ0tkE9~dpBo(x7i&b?pF?ZlDH1zSS=B=mJ1 zG21m1*Ij~8ekVy7U>SyOp&|IyYLd-s>g$&7(4ylPQTm5{^&cx8eJ4^SiFM`cLmey! z?2)Dnq1J}GE|opEOZo!luE$fe?j0``lUo_nPK(5DGbJs1=6B?L%le%v9pmJQz9WLL z?_R#7Y<8vhtOoOgH_6YrSGb$^@A23!dZ%A&@wsmhJVQoF(cH2J9Bjnb_FffeH$!Al=;!0@8v4Dh6VUa?aV$ z1{1qcvAf$V<~Q&CeSf?-#yiG&xv04Iv)8j?Mw5y->O+&4bmgj|;&&`ObeV@|KTxbN zh{ZQ0wKCeiR@~qnWoSd3v(^_y?tJp)V}p@%_NQVwccu^WgV}%9R?2@^ClhNr;A~xG z-TmQc%$-7`-*J9;ogzD<+|MM7N|>Sl4lyN6$Qhm z?bOOf)IFHY`|H^-l1pfChZ?Vqcc=!`_e4PucXp5es4q5l#Z?39cXX-JOq}b8=CjEapKK}J8sz}9 z8$rnI6`+aCbH~m&#~S(h@cTu|>$#yg-z5+;9p5VYZ)ROFfqLT$4l8WdgyQ~MdM6Fc zS6t&fyJtLklAIjxtdrLZGF(fVdA>enI1 z;dO}OcXbS!^a)1t-Uvll2hJj9a<+aeS}|$}XO_;y(65S9RCbA?{$en-NfQ-jFCw6y z5R9SYk`;*=;dq)C4CAfgiu@$j@Po;XIx|=?%a)#l`-#o#9%lBnSu|WY^Z%+gRz2Gk z4R7vW*7tj&x{%0vc3u?zXxgf?nUlT!qVQ%+H}xc*lS##q*k53%{>9k%z7L0{S9|sI zQU2J;Kl9e52I|s<e{1AwGYl* zjg=hEtif4lU&IFJNLNp~AfdZmjW|bJ*em4?q1dC(yYInkMc=qkI1@WM=W?zhkF%dP z>ITV1>w!ezh=4Kaj-v5{iq*r%=C+5 zvF{UkQpX>dsX0T_C+FR}VWruO57FpPo>X$^WwS!Y$9X<6SQcl^OzT9U19SM?d8f>d zT_lfWCC^#PakJsU#46jeR+(RDcAPuv-LHf3$a1jRJYqN6&gQ;G+xpl!t!P-Yw)TH$ zs_M&kWFzr24c=y|TIoh1dr>4x`<+nD;mpZtKqMa3d7-*`fj;j%|GwwytE-MuOY%MM z9t#8Y#CRX1^1aLLFkU^}%pJA8{E=*4pw`WGBEQWO`AZWu(@pGQOkTwCJ|m=e&F%1( zbB%SmyQP!St8xFbD?0vilv?z6z}e^(HRAmCW00~p=W4C==tunVlfs{TjaVi9r`{wh zvUZ1Hw<`ame`?yd8q?ma%Z*rEqZdrA z{2NAY{=PtoG*LSAs5O<7KfKnhN0*o?^L7Xs>pQJcN_fc#6QSLTIb?j3Tko}`wZ z<_yG@{K}Y9vsJxPB5}`#-VMF;REL;vGszQ-se4H^+%^K2$+t3I`9-z)3NaMKt8cj5 zKpoqa+H(B5zilh^yk%jSME>B$tWN4;&hz3}pC9bdTK#KG7;e`lXYkWKRd3GR9a8bE43#V>l+qi_*93#a}Mx&b@Gy>R*mkOlBB0iqEMm9`WZo z$@y)}F!kCEzOcB>zF_)Bb>F>iXl6;Q#?L3}@6PMtxXBq8md?=3rkAT_!CHuOKQ-6$ zt)VEfL2+QH)cThtVh*oH{ZCJ&Pj*jC%SRs*Cm6pK*WmPlFSs*%6wov>tVl5s=QWwS7 z!mRAR3#N0&Q<4@{x}SJU)gs=fF~O>xo2li@+FOplqB@mFj+hfMdk&4%KiRuKT1`He zTX%H_#&Y{&&Rt7Js=Zk=&K|)T%iKw73&!;V>mQxobJP!Za@Nw3oc$9}kE$g8kbUUD zlUnNc+(i$eZcjqra8;A5k!V8At`Ya;(ua>CahP+NZ|4`6rne^+kGM*kwic?X%#8^n zLU1Ggt17Vt|9t+rH!@bKjXHUv!2vIH8>vzkTCsjO=!p2Mx|;Lz?V#sogPV<_G_60a zME4_>SP<4)s%pIyV`ePI$c0JtWtfkP7Z)P;{a4BT*lbLly8!7QWog-;nZz|))QGe5 z(l<)wXdBLG$;T{Tq?9vlapffO){nH5r#CNED*)CDZ4_m{*1(zj z8zaw#ic6U;xJ%8(XIar^0dD^Pd7$Whx@g)qjGo48sO9zS*|AQ%KhLcoXW6@f>RSYL zeYm^1dUKiTFTclX9Q(~x8&qwB$>Zl8u}OcIDv00X@QXU?OVq014E9fVsf9J*fXe#e2iy&T~I|LvPiUi|h?KQ$47DUg}X4iGMi9US$2X)Ls>isjRmXirrNg z+3T$2U0ibDiRuwG>tapl_Yoq1fP2+~Mfg9AxKkad?dMz4PRjSYCtwu`YmBe>i zY5u;q#2xKL^ti1f{eHR-pIqm{!6{gB-7p7T4$VfhjJwiFof$a#W+r|gisys`^=1F*krZ<=WIrTJ*;(hhN{O=5y@%!E7~WgsURx0p0MB zSp?_S&%Eh<(?ie9;tp|eoDDW!GP2bB67d&3LqL#+YJ^`T=4}c=XUkaCAkO->k_)f! z%~2`#({uAHpZAem)rWJ`r2NMl>)xfSRyQSo=ZF)^3c^(*53a?U-Zs=)iBawDVvXRO zB^c&)P)((8Oj$CA*n)J;_ipnssc1UPpZAxxsApnl;Z%A_LaTPqb8 zR$!p+eC%7T%J58g%+{e!;Br&tI8UGde9tYK4OKQMqbH;z<5gFo41P@y zKr8MUw~bR)@^c~k&D&y{a^D-~^1eLJFXt;SeWXTaZ9Wg>a%GwpeKWc5RJX8EdUdBq zWDNbDZ?04h<&3JURv=u?87Tv!sY5;~2nX8AiiteKgSiV{Fn6z6vx+F3e?<)w&x5M5 zydNFN<50axRc+P}N9vCtxCVbT^UEU_#K0E|quwa?NS=6h#1RkwdMTsdIUsPY6>&{> zl;!(YqsN(fsMunJ4uzH|zCIbFsMV@`zYuL^jl-eoTQSFOE_8p5!o<(jxOaaRu_#L7 zy-u4qY+{AbE5gc%QBlF>sj>XEwhh1@?KE3wLl9byxQ(fJR^OPU)%Ds2o zV8GbEkhqoEJ!oWkQ)xVm zp7L(Y1^VxlNuwAy=93#9b+D1z8_`p_XAf(N>Fi&12asc)(iX#)6PweV`TbcJxH!|_ zfHhB@dA*>D3PJ_%k!dr#!H9fKl?cS@xMrMpvPKRJMhn-E$|ciTOSh+PO#ib=bMBFv z-3UcRk3!`);<+j~FZ+4fRr#EI-AnW@7^Lc?97(=H-3|1UifpDFeBTT4N7#eROjS-( zJ7KJy9dh*=qF?>B2)wWanRBe5(|R>Zm(9e)%ZE_s#Y%j5KM^G}TAB|rT!|OcCSb~u zBy*jAoZvpyyhfZq9_@%?##x7P9;_uPbJeccS&u*e(_PBp^WE^aDd*2N2bA+axxtb5 z^y$P?N|Qu)EM%O+zdTaDH}pUgem=hWm-5k6UmO|9^Y*=;J7iThAHlGHOTvosC4+$iEo#o;lXgCq~tiwa4|2F1VH!gbN0& zOG3y8+ZBX|oGWT^j`)K6u_>(QL!Wr#5&0P-wgw@iz9o{lH`K~vU6D2&<;>eUkE!>y zZ!FHerY6647_L_KgVPxDyXO#-lU)z5nv(~{oo`Q`nQm>Vb5lsKrI(YHu8Vx&(ZmNY z3Zs<95w19=?}#7DCaAxDJ;uJag3l;-q`0g@%kB$t*k~^@`Z?fM-8pzM*4zB0t~*v~ zYSwiZll1X6)fF~B1JJYIIb}nc`|-M*W0c9t&=qd*YeHSziC2`3>k$XSGbZHsN+sv6 zyLpCtxivz{7!RoUdGJj=42btd6EkWQpEN_+03=fy=U$vz@GosL9^KV7-it+AOZ|2V3)=n_B`7~5&G1grZzG^ z2Yelf$P>Qs;2rnA#RPm`NG(1mKBHwTP?vpPf-CFk9lltZOAew7wHAL+>u3*WIQ$-` z=jr%U5`-43`1LQ;EtbiHVZT{tb1|xjGxXsdT3h!h?r;|PaT?@;QKP?oI(~OzE@5BOG>Uy5-?eK4IlBzJs~n;Tz?Qv1D9`L+Hejv~b}#gyUQkE% zbnXH3b~?g${&H-7;)1Jp>~LGZ$UHO15h1k}*2o)gK6T-Yz?B}w^jDhnK-rpcF63P^ z`@$pTn6+-`-H@J)ZEN9b2X~n8z8lf5H71>QM-XFPMs9vTTMy1;$PF_Yi$AY?v0xB& zz#A@tHhb~kJx zlDOkz&f0qK2uucW9zvaji&OGZi<-KN)`eo}LuygSk{d_7&Bu#Jkg}CIdqfx_`yD`k zY8vJAC6DE1GISG|hipT!O=l$PvKGr(AB>Mb!j+@;G0vfWXqr=3S;YNRzh^EeGuw=r z+njNQx{Z$~mYVmAa6seEOKZgW)?@?Rb8^LW>ZiT(d#+r=d(f{A`(>SXN=N36p}Z4Q zE9)bynLF$n(}N>eAOEP`@t%3RT6Y9?E%v}teoir&fo<=7vCo9HMc``0T9F69JW%p0 z2tA0KKF+%@>0=`1ZlmYPO7T%9KRJRD~T4C_LO#WceVSK9}f>%4J9c`G8-Tu_N zXhE&2kG7Dhj~KI@_@AZK$`qdGnP14^3_Pto#e3@9Qa6NHo)}uBS?f>Xyr1v5<`gm4JaMa>iZ$NHT`Lsrvl&i zL|~FP_NM#cAM0KSWUX7)o-_RuuP~;gBW$TD^Rronxx*OFCCsgA#Cc|{0lm{*q2Y|e z_{=+Hll89r@AT$qwObJ_QD=$qEcD(Y^}9qpv4NaXG>wr)(+@nC_uaQ9E>cmnCp_7k zv^&2uzlIu1ew9IJ&3dfC#8%R>D)KNc z@VR{cs(Htp(DN3t!JCDq_BDE`-=`0wPNXK7ci-|#_HkR%6~?SL;!Ai(h;z!|cCoLM!cc%oGVH3RoXh@EY{aPJ_`(f~_w zX^0=P&T-DucZ66UOs&K(+->=_742Aa>HJ{M*SweBQ_Ha1cg|G19g&`-($D7;YrLBw z(p1(V3D3Es>D60G=3cioW1BUgKr?tQ@sdYb%Y{@PT|1OHCxck2%1q@q)?h7pw|?y0 z9tVH(E?p3a<@%O5HkLX!Q}}+BaK?N;n3^TjblU8JE%dSawTbV{q_LQ?gI*Koh}+3C z$7k{gKiE)LL4OqeyfbhFeQX1s&^FFK0886F7oWPXT`5O?xCP?1kQOXW%t>EMI+{CAp#j1ceh zIPW~mvwE+!cqI|jbebAg-QP)(d?xRhH-erYkp$!Sgz?;F8zCwDd9SiIYy5Ml)YFPP z$t33g4wp15$8qk#TEg1$kGioD{ofedy;TjBGxS&k_Mukf+zRER_T)acqVHaM4_NW; z6^zNzc9W3DI;74p=Jv~j$d6>L!CdsCL8UTgLpZi@*AxCZL+QyGNY$)hWDh*4Y{we# znKoO`1g>0ftrUEz(}Y00SG;{d}ERg_MKi^<2=7k)kDvH&X~YB8!msOyrk!XF+AJRhjkRaM!6!HcjEQh zH>9yH?r3bxI{CqR;pjx%uQT7(!k!{Az=PUdxqg@NX0LIh^;GuqoQd{kohGW4fjr}rTLwZucNk{y?EiZ&+oxLN z+6!V-kI?^@wLr=@YI}zT(5HsD$R_L`7jxb}Q>@ehIxWJ)N+V zSev_iA9b4Ppy+%U+{+pB@*RpPr5y*vBo$v!2=#1)zC9uhp6)&)RoOM zpWo32my8^0#My6r8SbSgVFmkc>*WcsB9Fk0_uw4&Iw%Sx=Y#qA;DC-Wd(~Ts>8E;Xg#EK@*Vm2RyT4*C+eMy`V@e#>{+cFa&JZ5!be(es60o!+1UV`5RQmR z3ndSpI|w~nMB9*uQNo#w|01jeH7Ti?-0JBV+!{)sI_i~7dRZS262fp9ywkToQk=ZT zf6G(uXcm=f9El-1#5*J9aD`_3vIwl>onbh1rN;OZ`Aj^=_Fey|Htl0A!`i9N;igJ6 zjSu7!ass~z<(_1BY&+%+FZUVfzn*@Y<(|0K) z?QF)A{_>pHUC^2jg-#KAGd}GHjYdSq4(PVv8EDj-7_1!Z<9X{6+!6b7(vZjZblM{w z3@uH?*$#XbwsnzmXd~uypV*RaR1~?=*9SG`~u@<^_4)o!HmBELTqL zL_8gTZ;ymL%!G2==^Wp_U|vwAo;&6MLp$) zk?ELLo3+979h!M#i?M_C@aTlDlFt0&7|uJTcjJMQ%Uub__;0xoYA7{LKZGv>7`MpQ z(yr!v@Pl=T{oT5fi_ET`S_IBwWZ%xeKthS|IL`|LTj9M+F zfU=DLVt%?*l5}x*Pr+4DrU4l|KIngbZa4o z7pU=*&r80mB@VCMk0|DZOX=^Wt$%hPMw{#4ahyD4j!zeUnZ`&4q#ICqW7mvmf{F}*dCNsAeK8%+Z^ol`S)*GGcB}(6qv$r43*v`$Cv`&%N&U!Ck{sBo%T*n_ii|)m; zG@EC8dK9rheUC~D0>W9dGmmxHDIKt)k4g!5J)JY92m85CKF7W_JzN?Q=L_rG{Fwvh zNF$zj;Nwg7t!7Q67Ij^)Xk-xmfc9zPbL{awCm4rC2{G$-co<52#s8e=0sFQ}bq-U5 zkugjPF%~@{4&XWW-B-%jig~wB;o$oKoO%@_KJKfe{xE&g^Abf_|J%ssT{%u2A`%?V z;4*uhpMTbgE{96-fc<;q`g!7{^FI9LpSiL57%?Yc2eSAq+RPd#KAYrY0&{!)vt7lU zhB*jj-rhX4t;ji@fl16)Gv_oBmxiZej}B|~-*trEz+~)aj+#8^oAe+v5mC$=QwF@0 zdM_h3)ri`sukT3#_OZxeu1L(dDIGW!jmPs?+nu~2bxnxIGu~x=bnZ%b$#eNp!CLY1 zeQEh6VmxaF!9%N3I(9M~5r))#syrucr^b1XSr9@hgf!?6cN$ZOf7riI>Y(cf)9FEo zXq_!tT6hvGNRP8#VUqJS7wTMcwlyw7>VL}~4)0mBUplGGZfA#I+iS*oN<(dNdq^I2 z)BQ*t>5z>$-l0`9O~od^bb#mln3ah*YPb8-{?)0jBigH|U&r@-aNt+T)-(pXGG|sRUrE_(Vo;B{qEqWfQdD&m zYn``nhCiS>%Y?DxsL`Kyx5mikdkJP2*y6iIe& zp7e#J@8q6*X}PrvCch7YNvb5JKeopk@`ATjztTAHJpaR<=zq`iZ08Ze{`n3(VSWgB zyIn*!E5`%g`y*`ciEbs8sCpBC_C-I%&IK_wcTFS;#vLnGevwJwF5I5!%xS<#l_Y67{FXn zu-;YJh2$WKxx%8`GBIIgCff4u`!aEom|00qH1GXuvBSmBv&k4bh%>9=Ui5a{0Het~ zw{aar=Zp00Ue8`hOGj)iAvbd?XSSxb#I5%+*xro2<<=+Cxsx$C&KZiqpevF&<9wHU zf-J++QvI*gTOxME?Uf{LZA?FkU}6FtOQeI#n7?C#VKsH1)GoshBb1+arS3?1ILSea-q!;_9lc=)gNYvwyr$ zFWijVeYhh`3KXMtvoUlCdzoTeQNBDK%SN%EiJ2uvlf#<8JJHQaDTY}kp@$oHXG2WH zCu$lzE8zFU>WMF@aj5-@^^a415lT-M6Azxtu%}XHU2+Nr5<6#kR@(3~>OVi(6D!n` ze*FkMXu`gG)ZBghs3JoPEt}?fYWD+=B=nNPXk_r$x|<-LM?NJLu*CG5hp3#F?|N{AY_8yJZV> zEtt3eY!KCEo9GwxuMcvFc<7q(U+*)yo4t5woQhGb)4qny6|F!X^maZAJ#%q5JrN#{ zS;Htz#02AiwV*i1IM_m@m=Lr7F$k5@zerWhV&Ot8RJ?p$dO+=Bqs8P%tSpz>(JSHF znGk5FACY`RxmP5%xlj5&sV?VQZTb21wtdnJ2Y&?L4?&v-M0C@Iz3K;ro94q0rS7VJ&m%r=SWEoVXn;cs?J$I3$XfK93(dxuO64`uE5G(=n{ulz1!Yju2`@K+_{2m8sMtLKQ_U#Lmdll!p8 zW+Fd49yVFjLZ78CK6%99pjR-456}{)e^GmQ3GoI8A4#(=MnPr_m+PFB!mJ`Ng_x!8 zjn&e6>h0-M14Z&aB0VK`avXQK!K;r+%CG)-%Y8sf)hWsLq!;VNQ0OgvD`k@_5mz@9 z!val2=e-UnW-qs^v!f{KWk-$EnsGk6>x6jq>WEK!FRszb&Dp+mz&*2C!ST!wSjU-UBu=YHMM5B32A+D03??%yqtbjN?7EL3A$mhSXx_XYPsPwx$4Ey z=3;NB^;kx%!+qZ*(PN4owhgWs=MK0h?$#*v*x21|&K4?JRV%3#~!ZO(n*2GMzC(jff zY3t$BiCVHRcZpwXxhFKP8Rv!bBA>) zQGVLJ8Z`Yvr*F}+h0$BgVtyF;+(S;Bd>gNn%)=V+H4T^59#-X=4t09V5?f zBE8*rWuo63=CoRS#PS|#=s6?^|BTBPoi8P$GiN?cOk>3oRU)+eQtu+nQG9$GkBlB6 znAXWc=vl?#IyFFioDD^SZY-<rq@0ZJ@hvCd~#u4bz=$@n}`C$1z>VYh4Cc@3#u~j!5&)zH*@jV?; z=KwWuCL9;Vk#>03x@Me*@2)TR>05%s%p2t+t>p=IuECyhZq+GSK8n}q%Q*L#n4duZ2z#<9v&EtNj&` zvM&>tIn&>FK_y-`O+yoBat9vm5X-ZYF`jpvZcLi^xhoMjc5qL6DoE(c@o2uEnBZ0O z#kr+%nDQRPTGJnuDhv^Y1o zzDpjqv>L;WI2TGRkbBR23x|=Mv$!Y8GuPk7%?ZSx7Y52p-c+E9_gZdOD|+cl(6MH{ zrxVEJ@EqZIEkibWYr=NX32b!+r-J5&M@gZ%icqza&qr2u#GY7UW^gjSnCKFRT^?a@YBWS#$cSZM#rggVU2*nlG^SsSpa$7HX$W~(H_0jbHoZdHyNG&q zH>nrU@URr{G6c;UM&ZP#L()5I?$4=@FeK}W#8x7b%pi3ee$mrZ}FG+-HYN)a*@YvT%5==ygFL8|5}0D%oQaaT;;zbBwS)1j&HO; zUafr?$6Z;g?1KC^bq^l%J*>UdNPg^Ai1<9tD4w>JSM%J#96$ zo%0+;!S*;vC&GBYnu*tPEE1Y=2D-S7XhQzCEAdH}7JifDJ@hnO9|=v-d8zRn&iu*Y zH$A#vGX5Tdth3ZgSieikPa^(d3-OT_$EBMF{?w45wxL#I(KyEwz2-&0EOE8SXy=U4 zf9L^Rt|cE~obTAxjPqf86FGZv2@Kd5AJa~h{f(~uHei zG1!H(yPzp@hnzk57RFlQ%n*t z7^7;hAOy^QB^vflrH@uH?Dt<5UsIECV_Pt6$Crq4^pV`OoV&fbSz_a=c$7O*&pF#u zm_K3O;Qn>~~VTA=KOJML*7_ zH>HI~$Tir{JhSbT(l96>@sF|H~WAtq#f-BblGaa|hi!N1nR70`oY}^qLzZkAJSg-9_BZ&2g8HY&(R1 zcn_{xzDPc1ya%1x$BkP$T5eml9W6HyCs5c&j4j0O*@GI))7|Zy%@Y~B`lkAXG09+@*b^( zZato(oy4(^))O5Hyy@K<1XLIaize=9QA$twUn7Oz9Vh(ZJV$rJd|^Dy0pDr|;jdpC z+2ocDS{K#ar&wH`EEh!Y!EnaYqH>2EsHs3-{@%2(TXL(&M>x(I(fZt%venQJ7-mSU z(eL}R#rLP!#e4AOn^Ur#5Br+YJgX;)f4U zIL~?EBKNLah@oq_uNkmV9(QjGrZQLG(i$!Mq+}zekahT-KJt)%((wE(&v~()e1aNE zo0br_q1RZpQY2#GOUA$6caga#7Hw9M2YRkj9H$n+XlflCi9RfB>30-Pj>Oj^DPj-b zZ~0{?vh-ZUapva1an$)aID`9o>ND9BYj@vFIDIE>p&%5t_5+1u2>0B~KgIR>iB+64 zd+jC;cdC?+y60vA&xQ}alr9?g>WPD(3&3nF;AGqAckI&>&T>c|#Sw2TL z`@y`xFLKq(d$=})vsstha+BP1^f}?z^@TiUi5lL_)y`2nO~>O zv3_26GE|N@yai*Jw-v|M%3}^^p~{=HyCXB@O-ZRJ;hlK9j;Y+dQxeAB=KOg>54oft z>oi3Wq=zl#$@`*lm)Ik-Lv`eH%!?bz_q=lRkyzg?9A|z8!zf-7`fG@rxl6s0tQ?Ws zfgYyB8hKw06+L%S51w4MU3+ZB#ANE(n^O;>XpU%*OPnzK_JM5`j=e5l>i=)q`V z(7>G>Ql8J+qeX|<_0$#!!0Re=VbjzOf;hro7K24>!Ae*kphv>@4r12+C1`fW4_=lI zBD>>!boHni=T7YJZjQ)8Gsd}9{gd+EVSTo z^=HM&N05d4D_Bbp@sc~NU>;x&(SNa6-m;v!Wl4M%gGS34oJExIPW%vIEVo-8jaA)( zkh`<3yyG`DiHQ}Pqf<||cBbArIhEzFUyAY6nelo}uN29NMvs1==sz_S7UV3i+PPNj;v8bNDY3aDmx&8MeUR~#{OI(#!gR75 zLe05nDVrhm&O2cBUw_`m6GhJjw#bk1#o>8_M5Dhe;2PwMRmYl$l)+2jo8^adXUB>@ zRrAruyJno5{0`cb>nW!Kkw|pR_5yBpBj1SseCAyt9#eqF5l>#g*S6q zgWlR8x1(0s5Z2X(F8*@+3hH{X*Pe4@nY_|H4spD1nih_gW2pUpMa|k~L0`E}4);w> z>9cvNgRBC528oGWXwy)BF43p1XD}$>CUzB2pYk$2rcYiHH`vdeE+nsT$N_QaIJNGG z+t?bAC3+Df`j!3iuCy4jR3{WyDnq%$3>2Gq4?O%q4as6>VeCiU@&bBtEw>TgRjwGt zn&;%9W#Uu-wVikQqyB@LqK&C7GOej=d2q0p)_x^a+zCdhwZ)uWOR#CbALk%lM0=w} zh`L@g&IVnr<)DijahP#l^6Hk{I&>R%=mF>xp<8xZmNAf=!KFSO%kJb?petw5y+5@o z^ILQZX(q&CeXCX0xZOd#XYEmY-F?}$aw~?6qu$*#S*|rO3)?x<(3iK#`frnv#~iX% zPLMnIPel1*)`26vjA^Z1PKA2!d-{cl9qUA$ZXkX|4 zH^)XCJneujLbsGK-Z*F`l~>xo-Eef_-IZNp9xH*tTWM z*BnKe9`CHs+GXcA7orF6#NRioWMyy`BF1nR?^G%Wv+gS9o%p)tW_h9)afi$yZOx+P z7R(P{m_uInbCR7*5-^gv`p@_|a##AZulJV88#8hWDc$5Uf zZ-R|DEv?5a?z``+XNkXNYmiv#i*dV*#im!*=rh3&<>B|FxUI{v|EE8;wyKbRd|!#| z7j8A~!NN#uxq0PAtY)0Aj(sF6Tcuzf<2CtIj~0KIcN$F3LAfC*v-2b>O&Sc|Wy<{a9CP{%n+o(Lenf&vw^K zLGs{+)N!SIdEPAyp|C=H^xGapl)6a&vuILKzTrVEIH7uZ3cCgn^CLJshqR@ zojUTW)6|<9$o*ZFKBG&xjyE9@&Ha(8JhhS{~{bI{j_QagM z_Z*QcblOv2!YdSa$~TCU^+R!t81fax5kf<};t%SI#w7TQe^xMl?N}=strtTJ+%c4O zrq@$T(cQrbUf29_+Hazm<+%>FEB&B;)J4qNX@j=Z>9Cn_O8VK{8ufbc=igH(^*d>c zSanVP4XqZdK26FJ zvr^%IHvr$~JeDouHegR9?%zABhJ8;}EdFr5elrnF3Ti#WkMU7T-KkljBTF4I5WAKi1kB}`| zat!s$Gg?x&Xu?}@W@#kcQi3pk;x*yjHv)giUz=>M5;k%;%zgx;@272|ihYSEYmYwK zsp1T|gzu?YrgbGsI4|ccxlJf?*9MBa#GnR@CZBnmqev<8!(4JXW#<*bz{V2`?h`|% zKTAxPT#&w=e1}p~p>4e$4J`d(+^>~LY`+%i8w1cV=YZti#THYw`OF$@kv8Nxps1mD zjq_|&U?ZCsrQs`g(^@N@%5QpZL@VyFjuiDO`;eK34g8$;M6ay>lXPhF3|sB^BpXvF ze>$HzOq4Wx!YCpD|V8nta%~o zPp5t$?jUw=ZTtbJ38->q+2-XYqYjBAW z+o{3tIhOs)WiN4?dQc;3g<@78JMqON7zYMYhcIE0I8rwN$(^b7acGJ-Z|semb?Fye zq7+}r&6&}Fd2f)B7-Hg#XN!p4`c_vovT#7GGqq9D^P~nPYjNWy>wM>Jl71H#m~S@dVR*B>@5a+4?R@~jlv(5b6r27p~mzuZdSbH3N zEDN7M)QxEn1h@Ca!n=PI?yJt|K*Sh#}V!bH!bwFr0bLT=9E?*g^fg>xLmXP;M%AvJY$1mHJ}?`iloAd{D$4 z&Ed3e!l;EO1n+U& zzZ!9FQ0gLQ7L&u!m^dqsk8(3rHsaecZd$dARckisYy(S5!{Jg16iFj$w+;W-o*e=_};d=3S@__iL7U?3H z*sxK0^sP>d7CVXETI@~FU$wXBNR0k$VnYKWSBM_y`UdlzZ7f<%^XX!?)i<_?aV(f>h6Ug7Fs4w1K z@xrz=?$)n;k(Ly?V*}5|{QhOqfc`G9=8S316lckjIy2wQ=~>w_T~e5NVl6R&|9hU_ ze)Ew>_1}tFt;okdQ7y;5+k#O>oM*ZomY>;g#zFAxO$(P>mJ`#$n&G|7*>bH-_`Z_o zwugyqGvgW#Bw9 z_Km+5iuu$wPvzd<-7sB5>`uW{*0K}FM~mIflF*Bvk7xUe$u8!{rkdeiTj?^$fbU@Va#VKp)WD&<5`opelB%c=Z`LN^jU6kN4mbi z2b1|8^*wM(nq^H*enVm)(>6;-f4HLFbmBNKPm^wMaYm1B)DANUlJ0l$!Vu1^|2NKx zhC%YTK|9clb=s_XYI)_zZOGtRJ0b>;iTP=|vYDtI7KQFTg0U{Fj!@7O*6K+x#=dwfz5N`C#0%s{Xzob$ z`*F_9KG1gA1u4puya~>W=HD!r`n{)?SX>B}T|XxIlu{R;db2lF`=w5Y*dMPX_ug=q zbndJ#CN!m9*`ZC6!3Qt;t_EYy=s@ZDTJk9Qd$)e-B~85Og4NXTePv`SS^V(CFYXur zH_pdD1RbHuc4@l;8#4EdS6e#aBLq$fk7VD8NN*(68G z%%;yqpD>&#Ns+o-Vh=tt4F2!pq@}s^pZ^?+`bm*e17i8#Z3u-&b%?Y(mwf>5%~V5w zDTR8u79HrTH*K{vYOD{IE#`cCnwhjO)B|0&avr7kR}&WFiq~7{-Pz}q#&UuuMsYU# zzj5wR93r20*^Rc$!@WckdBUijSU8cK_or&n?BjN{w&z@Eb%I#3c`JOmW9pi^TC`oj zo_ZholBVX|^>0H?haf21cNdYj3vhw4J+@z0c+bv*uRHy24%ZUpRk^6nWc)uomzplz zgrcL=>%MwbdKaFF!VAP6SC&f?U715}k*Co8h~(2T1xXM1d!O!->ekx;$6w^GWNeX+ zPKbx^1op+f(3kXxJAHl(NM`Cg1p7WoJ;pH zlKfQU2aJw@^Zpi69UET^TNQ!1yFO~yh32A8~RA{nzRcyY(T>??j8*bML9tgk+6iv=?`V-a)6$~%>kwOKAU z`?5Y6a#;Ge1GY3=Nvd@krQQYE4BZd zh2<6OFJ8`*&c|h7)jM+kTqjD`FQwurbL^E(kRG38-e7%&FT}6^R4>(P(8+run^%+RMiD<1W`|z9vw^-a7`xCsdkdp~3jJftqp4 z3pDRoS5{@y*GbP!Q(WdpE`AJVy_>B$>F$N&&ExRl=2T6|4mYgml>m>u@yZnPg*&aU z=@0v`%RXtY-42{(JeLK}lROH@ownqRqJe=_+ITx=rUv59*m}|p!gA#MP(c6=y+n>!fOmImes8Jee>gU31Df35UK@_cJ(C z6E-mc&HHi3+GdmH6>)UKdB^>B&Cwj%%(|NTr#@ekH3yGH;oQeC{Qlyusm1>B!f(FI z?)^1+dH<(_UB`_s6-T z^V;|tdE<#qhNe~jBCH-wT=k?On$8Bh5X<_ug-$z-jn)pHy+Fj~H`iF-+XmgHtaG}y z)NGau@L?MHR0hA*7gDyP;0d|hx2x3)FKk6LXO%6R{#NgwoDZD{a>rWyRwv%vj8W%; zaWvz*`loviGP$=nYw$@O-H5Y&;@M^``=Gu)KLdaG?uS}`Rljpe#mW%QdeXHu<3=S@ zUx)a&{>?S(h9n|^b(;UuXrfZ4yw6*Ku>n%O2`RG_|clG-2P`3VT8>z=uuH=Y`9!0t&6HN$_p!H&Jb zhc?}Dr^F5E*Ai;P`C@FQ=Gy!s#7rU1^Qx(4NL~Xnry>&-bX{{w9tItosYcx!B}>% zrAB+$7BuSnq zSUhX0Ing8q@3nYW{c5kVew2t%_Hm}U-8E~e87uV&#q=4*n&rpopRzj?&lU8a-4cyd zYOfa>3AK)IG?p)mginKyr8>k#ml2!m^ut9lT%TId1LHAr)P9AlJ@+ql=%3R&QBAvG?Rmipv^hMmlvZn#znhOv6ng<8;mt$q#f{J z?Rv|~Sd)HcJL*`IGZ`~b)8+hDSgEMd;Q9Z!dJCwk*6w>)?8X2EySp1Wd(VT42-w{n zV9*HC-JMEEOQT?1g|qiL2BIi-cXxODpZEU8H^%FC$9Ts*mzP}U+3Q(ruDRyyDnFi> z4{W9;nyQ<;Bz7kx#@69UZ#h~g2Tv8;M?K$9w#mpucsyrsp8e#uLOR;87pv&kOU`+k zighDd)9&vgPqj{lAMY>Ec^ze|y-BzdLX6n3lWb5!KZR&|jJE45A4rM8AXk6rC6APS zGb54cOnv0?aq|3;;c%t8npG}26^e5+c<#@o z2n!8E(ZV(o{r&F?Eq8I=t%=5&W8Vdxq(Hp=LNCd(52E#yV6?W_hQ`m|iiNC4F5ODx z9^x&rD%A%+W+&ius|lj}U3ZwDO+a#LhK#FD_}q|pjIW40za3#lPow{>H@dG&mHX`~ z!A{ON3|E=TXFeApiG5jh?@@AbpF%VoMD2j8F><;|J|beMspz4UpRd@7ywBvf*9?&t z<>w=CAM44q;d1gH)_B|{TXbNYd^9Kr&O5k|H%X9Bw#&i~;%385MR|I8I=T~+{B*`p z?yx8gWA;(IQg4Lpq@9B7dek1dPv4VE+qjoWJ@<&_a`4_nZ0BB<@7yQSiGX<2eHMVU z9dDJ>@oMj^yK^><4~S`p06^s}3_UFt=z@(-8#e&uvG#rEs`ABqHWQOYY5v;cP@QM6=FV(2!n0xhdS|?t&-90k|_D z8BNogL#a<6q_;^pYv3$Sw)Md6=Sf%}A1Sv=cgEtC+cDI7B7Sm5zKlC;{~PC>_0!~@ zH%hQ<6ZZslr^rVq6eItpH>!3R$qq4v7{NUJO{J7;YVz5a_~2B<6nX5=op?zuv00@; z{-|4k4}XaLb}*K^Ip<+)q#uMH=JLXZxzMdoEk(;2^8D@e-*lt~%$Zs8=Fu4#cZ<1n z;|zJr^)yTq18`~DWchqZ3Q7{W8{Ei1-ZGh7+{cV(QFl44eGuL_mhu3glcu6vJqKBYoT}SBBcjtfOJYr>< zJVUz_Y~NY{$LP zlau8c(FM3P#Se59@3suGsk10ydo|a)2yi@XSY(;9gxi#kv|$wSu2|!%Rs?O zYGpQFBe&VK1A%AAy)0iMcW$2w#mGPy7fzKg)NaR7YGfE587;SpW?fBuv+GhFx#w#7 zVUg!{Q2&v%rX}y34M8v;zE4tYiRNAp<7~fIni(9yy)$Ydjq;Q%mW3g;8M#|iQiR8S z=rzV1tvNnhJaQxyC+RN|-oKM*J}?;S=FvF*)kSz_5#x_&d(~ z?9=3WlS?tdm%OjgS+eh=VpKOFCN^b~oVcY3H;D08_M9$jy(~ad4`PVk%j9J9d|WQ` z#W(L+@_OAugmYgYvvi?+E;=9O=Hyy;UndVA&ii9U&IPA_%lT# zR1NjP?)$N*g_d}gob#vFaftrhO`cS<6?H5UP-!cw7l%;8Cw3c-RkTA^u>&@h{2k{* z!_(w)zfvrV@W!n=bL3Rx5;W}2eRFLy+2&&rwz79i|1nGc6Ih6=bA55cY_(k4pa8-r z_PLe|<>^I*C?G~KsC=b-VMGB&kq_L{&PH~+wG$ca7pexk$_IUNaQF><*htm{37|uX_2xOJtEddQ#bHcA335;1dgwu*y`M%Iu5)Hks znL>0oA3U;*g_iQNP#W)vX=!n=U9FH4-)+UThy;Yin5(xGI$?dC?Wj?_emedwoiC_wfP&cHc22;E17$&O)Zux(EblHo~mKhDC=v?jMOvRGbwI{{g7L2x;( zku{BDQ9^C~@u^2-)6r4X`=n2_Pon(UoPK$eg7DLOkgSyufjjoWu)FFlHSZISrHewa zYH_7%+2IhBhK68Tqi|I{^B}x983L#J)Yx1UfUKrr=vh%y`St<#G{;0xmn=qc#Dg5k zm?$h6;v;M)Ru{cL2D>yxLTaifj?AOKTHs{)a&uQ)4otxM^eJiwjT6HAZAXu&hFGlQ zfE$1Qj&n#>iv09fDK2GmckI|Kxm%-Bc+a5TzSm@V{;y(8X~4OpG)ta-p$HR+Cxne& zE$@#gga`YG>UB%y$ah5;NGv9x{(5!{<3*+_Aqg1)eHSQ8JKlJN4O7`d$iKELypy%Qvr4)vv z&b&}+4CSgK283egde(W9ma1Z-=!InyiUY^eRMXt3f3k`m6%n5+pFL#{Xvlf6!w^MZ zCtv7Ije>>u1Yy7*^0mjarnCwaek6Nh8FR?*t&n@MPbo(N9-dOF`<`GwsJk6b%e3&y z*&Y*q{2k|R7Rj=~xLw>62k&f#@v#<^R0>UDc04~IoCO4I!*57Sqzdi zHuwGH_@g;EOI~YkWT5p1s;%8PchuHF!eteOOA;@}8k zC&VR=TvWvugz~NlLle%su;!!MBox)S1XBvWS>1SkZ;&?OYcMw}IM-J1D#@VK!nB!w19~>Kn-9FqEY@n8$vm)>@ zJseH^`${v}bGK>~frp-zs*t_Z@3)CS>r;LzFQ-6!91{uC*-tCiNBE=1vM6kr=V^GC zUMkJ}qG9)-RAJJITKGKAEoYbrIm{cWoZlCYu$JESbHzV{;xYDOrQ9*Y33Avr1a@mk zp2|kpN`J?Bl})0Iq+P_QsDshRM2^?mMQ*|YqXN4S^UV;Obeu!*q zCL8W4#+=puIJj%Fyt=dm1-k>_GHdK)pfjOW}=XR)>X$u=MFnG>cj zc9AoTcjCe85d87+m8b5=M(1Op$t!bkeI zU0Qis?$;(B1|O+i-s_Y+BQ6HL9*3ZfB1evni$*&wdJS$~EUV(9@Wv?|JwAPs?!J#e zd-89dzHpHm9%TLOMEpAHt15)g$HtG5sMb-cVyR!@ogRhS8LKNz53^?)5{*+ewFWT~ z@A-+*IM{chV)|F&?lYnhnLI>zcij_n-mp(UaZNBD>WVegQu^dIUA*pTkM&KHuvgIx zUGG_;-T&`A8^;FAQB|eXo+Y>NNk2JeODTrM`QXL|9l6f!5~Ol25E$83cIsGy5!|^8 zny)XL4=9GmOwMSm+Q~YDOVEsUyzaXW@>ZT_jTDIJmp$cPdWA5hX53o8fpW>8JfzkH zW7&~m@{>#KUut=tZ;q1FoU?JVg5H6(qHMAz11@vJP{$?jS2vnSKcADM z`y~?VF1|3F=MxUcf+*Ah|7<1OoZ(AtL zS+~ZIh(=|vk&1xl?AxwKq0DQBqIZ8UeAkJ_8`F)7@6=7I{zeRB+!o=Q56||VSX}RO zL|D|x9uF(y{;D@-*4rX4nN^B%nL2VdE#<=IrDz;V?Y5WCq=C*Q7|Geq8r+ob?PvdD z>WBWHD5soJt8nmj5H^j!QNYqeF4zpXbuf0`9|33`4@tuhNY%X_!OoH>++_ z`ORq7cuVL_xR`!P)RBm(2}Swsu5#hC7#!Rb3bW;(q{_F^2u>jGKi)yAjfqCXTzZG4 zTr|iguGaW;6bwAiDz;3FKiXc)dX&{Lz7 zcu`HP!ey5)-VWqEct)Y3*H!X*T%*wAd9LF4TTg_HBd^_4PZ7ddZG)sJ?3g`H%-rjS z8N@V3BinGt98XMH@OPa1?O!1u*i?i|#EuR&cqe@sScH?Cs2g>2uhcQN5Dp_*N4`&$ zE}kwxMtwi(9K}kTsqb0D{m_8GAZf+d0#q~zz}Pl^lKGqh__ZT$-qc@Gug!yJogiqp z50H*n=A!SjAgr|E+ES(s*`X;BDz>IO*PceCD@6$idaJbXhdudRAgKs&ObB?aWxARO~^}n;~$Abg>Ne!{cwlTsz@j%zZCmq zyHXz~20xD&8%jq#puY7tj+CZ1MV@4ohYa#1W?VcfExEE2BRMC1bjMBF(Vsot2kH>b z7$q&9o6DU$Y7!oAEEz7(!TmLU7!z_q)nRZh?3U4E*C$_<*EJXAi|IL49-{hem<^Mz zxD0w@P z=Yui6*1qyg*Lb{ReKN%7XGQ!x_6>J}{(BxTvCgfX9)t;@p@x^N=wH{HGm@A03_H+A z`uXfoSnjWD)NNS=HaSwy)wz$6X&yaC#ztfDW-p_g^bAsvV?9Fmq>)e4VC2(ddX!c_ z#YzO=N_-6J-85B-Sa18udW$s>v9 zb3UR7tgo`3la0}=-ED$fDfZ0c?ke}|&YsFqe5s#}rsTQKYW-BvSD8)!d15X}`a=5h zOuQ`*!0-)*f?$^pqh*1ZSTs*~xit+|Jm-e1tOZN^6o`zus)4^?`EDDoybZ$2>G8tm zhY5)N&U)LhP^euJ3!Ns)RNp!w_J_`IKIw zu;^qMGMSgEFAfvBS%;%m9S%K*B1OG3TeW$&=Vi;(l_^+TIg!-4sXs2 zv^-~^Xwg<=QA1%t!$XF1^4;-b-{13;gMD=5;%T|4iKFJ2i$bzEnF9yTtoO_2l_Trt z;MghZ{q;GkxZEL|-r1ZlPn#gLBhI;)bDiBkJ%pg@EY$z%hl@G!!jC^$nDmgd`?_U< zq@M|!=m31|RU?%5O~)f*nDsB+5oQif!!7b?PnEqBLI$M3eq|7Pb^jxr>$V;5?gb%0 zT~9nnjIQB);%tu_iltA9h4P$lU))R#wvB~wCm2sww-GOEm@jVyV?c(a^9sMi}Ou%6_)SmQ9?YwckUabU9YK=w=fD}uQyawbDok(ZtElc{$l-i zZg?bfw^>?^l3y;!<7_3g@N3+TM{pd>nYy9n~Kdjf#^44sMzL4GIkFp7V&+o_~Z08 zbR{m~uMorz#}o0q6aA}_MKR`NJPM+NacQKHX#FS_Wv%JW?KMJd+%*Ok`$I6pxR-d| zHwwwb^z*cI#jzhE@a29O_cG23g%cuhW?Uq)4~D8{O^JluJr0)^beE4_k3WI0VlWC z75~`gz`G|o#vhbIy~Jz`;oQXOZK3dBTNbhx_+qT>b0O3xlYJk(iZUCE?M7vxw1%FH zo!X1@*JhzH=XA}x4Hk=?GEiy8ym3=0Hg(^@9o7Jpf0!vYa7!hpf*jepD@2WbG75>w z-}KrbKC;@z9_L@5Hd|45Ln4;(Y-fu0;(nKSv|kd;ol|S^PgX1p*pIJEUM=c;h(^6# zjPtZvVuDK)I&)q!@2r71iM-PW^gEo|v%Xm37J={8oSB-aE3-#M!ev?~d&t8UuySU*oXA1ut=Y|o!Qu^v_SOk;z zQnFjo;w;ak4n2~zG0(x&!e*H`ISQ_DSH_aWlTunbI% z;qK@dQ4Fd_yu!*K_oginJ9kTm^B?-{U9=HxMyJ6nlDf(ReZ^ek6mqHP^_~_g+M9D{ zjeaxpe@2V9<|U!`pFmu{8!sNRNkAz%plFmRhH$_5$fqDoe;+3_vwGm^QFT&(%k+T z*iAl0rLCb*k(-VaKUsTpJ1Iop+kvZI>a zbaDB&);v#7-oSmyhzjA{-!Ml^7`hz;$z92wwNEtPo`eRQ{qfEAsA%vz0afS7ZL>Hh zYORikIGlTwhi{4goTugZb9Xi9g_sZ(4YTS1EP3!lG@VOd^*^iwo;Ad`Ug2nE9*D7z znj?i?=pBA@p4FiVO6!N>nL{w%CEpOW#)M(ISs3P8_=pd0hQo+G#p|x!1%uDT;mYE$ zvJriC+tG8pC=rK?CdhlMLNT_OGn<6Pa&aB*V$4axupTqza_+`X|3xg$d9bWxoYfcO z;E<}3CQs%5`uZ63aO@^Z2Gj+#iov*bdgye{1@^1|uQ#zfM_z~a-*Gy4trqXfh) zAy<6-d0}5p0=^SddQ#d?6gni}m_Bt{hOH5k+~d)FD{Bv%NO8-NI1D7GdZ|^u*kV!~ z>{g<%yDxEdLUETacf z<@<0LlOwXY?_{|ywF}H5lhC$mg$#0P>}Dt7YW>;r7oO)IdWjhFxWBwEoq8VH@rc?| zAzdRUtKIb&gqXY$5=^)c)G!tYgI|h2ZoA-F-FSNAHmPWAN6neOf5-WyI#5{nJO&KukMCTq=kA0{uWZ_HrzCr;!i8?yl(8I~JFI`En=Xix~Bpn1h8M_C0NY_Q#^IDvthztF+PI zms*S082=A?)M<^t8*(_8e(HfjOV+?k{SiEPFyvDqSYF|eKQW_lw1m2stYLQD9E$Aj-|*~VSyG4K2H9yEvY!Gx-Otp`| zM2Y?m);Gk?717XHLwwKfy{J8#c~!%{W_bf_6ry0=kbA+4S|PD-B$}A}!SPlHGc4Uo$ICflF&bC34OEe$~e@sN8XD@B7F#PE7Wq2JX?;mch1-G*`4F!+LWK?=vF z&WWhnG+ADl9g5}alQ8+_a@m`49%+??SqT<$2svPt&WSKNp)Wrr*5Rdz$JNbyC6x`i zv|nQ3*}*_D)YBc4HpjuzxTCnT?N&tlC%`z^reaT(3&y|xJI=mun}`>*h_x`z?K+JR zZ#Lxn&p5v?vlf+?B4PQ6J4YT#;tB6aY~XIvj`V-T&)p+oO^kY^))mpPgme7U|7sK6 z6K4{eX|cr@3-5guzvo0_$~AHk!y4nj&M3U<$9g-xE%eeO5wVpsFV8NpT^E7jtO@G{ z^~Z&V;n>@Qcj)d>n2{ceU2)up3KQ@$m0CvA0&wg8c$BpYL6}`2hFqNh=@7ltuLfb< zdqa3r8)Mhb5X9}#;|?+Lzop^WTqcW&2GsaE6oqMhjtQoWa~A83hk>xM#SN% zlZ7-Ull~gqA-NEot=c|fE5c_c!j*pXUAMZRXW-v;-SxTc#05OJMds9Wz0^}2&gabj z-#BYe7rkCZk{ipJ&2(?kiu|86#(9*yU9_->#A0%l>pmWk-PwPN{0@;q;me>mZuIQ3N&+{yb=*83n%e-nvSo_=UHsxEva)&o4lJNh+4uLa?- z@8*yD={oSc914{mwd8C&;Uc-95;X_9PUwzhjYHtazH*#a55%(nJI}e{0%|hcj>h*$2}3xx#AR$Na%9DzWuJ7c%WA#yxqw;TNEQ2?Wf24acW2!CW%%}V^D7G zi|~87;+})iXmXbR#kTvzMLbgmov67NOg-VMNTl$7EE;}J6zS7bx!Vse-R_9dLO86y zk;DA)mFOf^OzVZL*QIFPfWiR^Ja)rF#Y z2cEIB+(9_7PdvmPI)QiM*A;5< zOYTWGbAqu$iot=^ccl%-nfn8yapCrU$zIzJ%~g>&CM=ZZur6><3db#Zob>XKJ8G|o zqFL)n^5w@asGJuDLz_49wx3QYV7*?NbwQ!}N>3T~?f=`S^!ZLIKI7TRggT%5>xvx` zB5^m8yTH!Bgx<^faq2;}Jlt3u(I^t7+<%$+yS=DaKtFV1)FW;Biv#$*i}v`yS7(r@ z$KTO_^F&8oLs3T{r?S)+we(@HniRzy4qx03SRlF(XBf+UJuS<1;+Js|_+vv}u9KtK zjk;$SbGcJ_*hg&P6^cS~N9UCVi$A)DpsgYA#O4w7dZUiczxCeha53fveZhW^%QV4N zJavJ+_yx{xN=Aymi$dXM%^v(hhR|m|InM08=MNgM`ox$QRYhUO8b8S*Diq76N0WO5qg)u*ak=1I6l(EYd2IS}T z_!%tkrMCG+;~;!!-BUgKxC3(j;avDaob)lz8MZ6_)|06ToGyM?7>Uc|KUdEDB2+N< z)(_*J;PVT@W%B3OUhqbO$vI)<-Uw{xe#AhN8-ngE_NObkS1|a6(3ibHi=Fh_c=|+W zHz*pr$-RFz;s{ibT*=b4mXg^Lcb6 z_xx?8kJaRW7)PM(kyX;ILi&+43&Ww1v6Ax%a_!0KP4DtX)j7f)9lZizy>X9ZqveA3 z3&_njljOv+4j4U?K2NXbs{1sx`)_Y$=Z0uGZ4UjIjQ`&6PVTZojBFfk{L`7wz8&$hj{AgY&ZfiD{P3(KX%OfB`*ZigK)-eA*TdE@F8JJC0vu@#8d9eXa+ zghrsmhj{DjZNf+5ij%9T$xymd=yroOQbW#G9*hu<+JxibBx0wZbcFk#!k|aaxo5?F zMGCp_lezypW5f}~?{-n#i}A(YYh?<%ev#yM`QlusJjHb8iqIO)?AK)~E>9#sll-x5 z6&Z>~y%>i!e%O3BSMmC02o8>WK8wLhL?L3KP~AYpGSSg>p6<^GlS5< z%O7_K%~Hq@*e_2F#E&<@h9?h&!h(B)&4y1^wfZLvrnRAP>8VmRC$6)KoQa@J|&#csGta zR=#fq+jZgOk8`(uc$kpYHJtSz&v~8xLN1@{G31dJ%{;6Sri4Mmo@LCu5sIa(!A_EY z{^d=pigsN%TYgPG-iAi1Ssf!0sGyG11}l{hV_RTFovwfs)sMO1ILZCodtL`swdAl& z+{5?f#u-%s`9Z6z$&Jjvqv|+`o|xpTe_a1UwdyOq>8Ta7bKiT_g=h4$V14*{@&{F9 zH|~{?+uy$Up(>ZP#wXrk<6a(DIah{a$;%+DG25dmn-zwAM?w&9T%oeM7J};J%`%e5a+7Tx6b(8DLhlN7fSXRM ze0Y_A-w$fSw24(&d}BSZo<5^iuT=W~?tql}VD{}!(h>3{jI@jO4(Bs#i_fzq4dGL|g3rscK8&;Kpb$LX9RWu4w@OzEjxp3|A|`nCXt<)&MRx=dcj`U< zpGuqG{P=q6>YG-nu5=-Xmo?CB&rXtFIQ_EUGv^$eDy<~Hrp-6%;uzB-%^M3Pmv^&r}LVhQ}%L~RLglz4WA=L z%S_4N-yenJeUV$?EzNf0*&ad+uzf$Nfc4Q85rFzqtgQ{C*)HmP` zpzq5jlBF*5F77fm@T@k4r#OqdFFrnmR_&A zFSg0I$IN=%i%&HZFP(BgAI98#-5nt?*Aeyj{?^XjDriicaJ~zB`^aaCeYeQj>q!lb zFCm;MZ^51(oCm-6Qmy*sipQ+O1MB}%876aoE1rAbUc)8F3UMi@8*n4^ii5UTwe}m4*1k)6E4(qk*g-I zhp+W2h~Mg~=N7NP?iEY$WL~iP*T+TB)>(vw=iaK{i1ToxbOCPns8K(1pAClq)4$I1 z@raLNS7ZDC{FQ7Ci5-!6IG=BWg;1&w!5?4%QU%Gs|y0Y&U@*)GM#nCZP6~B{OO2h?T8l6&g$miaz z9rxy}>qkwXY7*gyV|a#WYc z1mXP~Vz6o7R6SCu+d~}Yo68g_&Daz3Qrt0bMT)eKnnq>xDmF5|FAaUa5mLcA{3%n5QJ+{=Lmvq=xv5Nkc;QU6};@JGvUrW;QK)lm&w#FpOkk*r=VuZ~)TbLtsbZqq@1DQFIakIWC(wyB$%OvmL@7Fh7bLoRzY8C^yw z{)+REq84b=-yVJWx8zoai|1B2U~3cZy>3#9<)S0BT2qT)s-Ad;_rgTRbFF_p(Ztp1 zKOY&_y>ErZpPW$AiaBKL4dGgWD=rNEm-AOG{IDke=R`c}#!;bX8f*Ryyl2}S6Pok2 z&K$;HI3cu1Wu0!wXXIF|FffCMap#4uyZAhPp%&AZ%YxZy&f%$rSb5;Q@QpLH zLww&&E~f~6S_B|qF+HH0_YwvVA-}1aA6lmb8W~iEz;3)hTJ;TAEuvn89_N**(MhUU zn?S66&NKWnuOem=^L$V0skUt@I8Akh_6tWGKU^ZnJ#3*gw}gI!?qVyQ^>8}3m>QAG z#kcL3WHrTp4ifYx_<*Q#Hu&+%VO?rsa_|JrB2vxKEGej8jIoUJrTv+8{<1%T$|yE z_Vb8`3>-*o#FPHN)bv|1K%D%-6BDNMJf9mV&Uc{>kQucWUk(tDK4dOozP)&CsJMi$ zLmB4@S4WFahy}JC=1tFRh4}V0Uu*F$Hl84!Yvh9srx@F_lSK>ehTgjF1#X#(_U-=ErM+!cLMBWzS~7xON4Fm?m;Uhg&@>Ts_AoDAc7gdfUvd4_EqKvl6YBrDCvJYe2^$A2Lxb_7 z5OjDAt}K}e8x8gKgk`8No1vroZg_rPfI5CAaO_Y|X`eP1RTajVra7s6vT`*Z)eQbC z&R+|K92n#Ih_;OrJ>IxsQe7=cm+R zn$119AXzjR;f3G4r#4@{EVf=rUnbUs{fK{-G~jbTm%HJ?jfk!LAc^zGWNSTq98C_+ zI_|>w48U!XekRP%>6QwZa8{$uoba>zG$`j&d$=Xf|KJsPZbQvWYUq`R+rvJcKH&WL zJw9)rSm%a@Foz%7ifZl>^&LyioKe>B>l#A63V$?VPPN!gf2;1~Hhh_b41W9#cTwJG zfIbF6_?X8X#w;B)1u-ht`H2D7#dgFSV%*)~f4fH9oZ*6-tL-rPOLM&JYm4{d8hk3W z#9iGDI9Wa)uZj-hN5^$=n?4O@k93tenQL&p!W=s~CMa)Avd0Lk34g`e_;?T8BM;#a zb8=nxGveb8o-k%zalZDjIC~{E2zlPl$mhkf1D?=P(l;>ujp#|ertQ<{1=F+{_Ac;( zu!x>eI^EGAnLgLNr=F}ffY_g0R=z$nWfrb+mV3gHS~sQC!Q!(%fcIdlX{^CnYnND2 zoAFx$PCD?cu4YaCFb4v$?G)lINk{hJ2D#Xk{2h+%I*gQkJ{UKI`TX!XydfV=TR|>y z+Kqqt;^@nrnqA4)5H}|Xb-6pUcH$KrtxsPG?$fz6zKTrt?^cxo=raBylDHEyoIOCD zPL=4{A`mNylk619H3;^@YBxWu5ho&??_oRUKo_l6$aUu)_jh_}r|aQ(sRL4OZNTYB zcifp^1Mh-mNR2E*!Vp`W7Zy;1%U^l6)Cnn(GyaP6i7$O%X2`tJgl8}Rz8K%h6ImS@ zPq%yGfX$v*I*3}V`oG0)Cq0qIT6&?54(fHG&$1c)Qw9z}o2_2lX=EMt#R3l01S;hD z4EvYQ&i_A(_g$mj>~DzeeR82@X3REd6SscuOuxpQBAgEKfg|tB1LM`?_xWJ-CcZa| zFTjDgls3=5)wsu~_=h#dVru!xUtx2Ox;lJbBDXhCX20=4#aiknooK22xr}^=GJfsm zwo1h_f1GVXp2_>xN)z^lef!h1Fh)liP8~LDmjHN8*H`+iqV`4u>gxB@RVMUezs{If zskM~z@|oAe0JHkA+;*84x@h-VuQCc>z zR=*TWkJA4!YdtzOOIKF?w8xn@bN`C7yJdeI8SII^jTvY4d$C_fPrPF-G4AkpvA2^a zeEP8l@M(oxSGi}zT;0TX07eh@!mSDHLCVdrJjM$JJlkG1o3MdiSjh{Re;SbAyoS0y zJfF5lQ{YR@nDnjQaJ{k{3z%bf@%6!kW9UK-&hRbl@l$T%9QRDu+ECZ=!F#01J}_jQ zd+e#N%sa#0k@xAWF51dE59t}m_htVBJ*DOsHP!fxj2zKZ*{G8*PVjzh|8an_oIKV} zd}fAe4^sZqB@n-epUhY@NU7rf*375=c+q#1vYPewI_jUyjWV?w z`fl%>y9uiH<;tOVY>_bV@4ox&?txHr_e5<&&T(^oiFxfjq2G@8*1AU6zr_=ad-0jQ z)EU{gJz+bXTJa%9XktJm~Wy0c#&&X_lxHAETG!WS)>TkBSgRkn=fp43OyGr5}+f#a0A-PzZF^26wM3T09-F=J}yo`{;HyiabFPEY{+ub3!Tx)J}I901!1 z!<2bl$%jp%2131t%E}1hl*C?8Sb+ErURc@A3v1iX#PE5p$j@`a!(-Lh^3V}epIhT~ zx>_05iXI>SOaD601N8>ueiKh@;JtNcS3N{F@G3<$= zfjslyC&6f_7Z#6U9M)~b^++$=6WNun>DSvTomJGM;(eM? z*+seTFm=CX^7)GDrz|CpbuC{n{y9v!|1Q0#?07cTj8#t6^F^hKwYte@<%xVhSTn!h zJ~Kv{TQ?A%?foz?ew;Gji9Duq>PuWyDksqUz_f7y;y;-xmj(D^{Yid&nUV5ePQ)uc ze{6cxPMN)s8jwrrA^Yb7HduPXeJwHkY1GBpv=v>-oM4dMK-q1#1KLa{mKSkc`P^wU zF7;pWSDa0M3?iq^1HbDLujt$mHcvg!u@!6P@HV(@?g>-o>WN8%I6wA;LvQkw!luHg z3FFE8NVD1=S69)ua5P_Y$7$j}Ua;WZWIzqPxjf5;lUYBsDaIl4Yvwao5AUYJF`kXm zjXZ}}Yp^EG2j>{`+?!Y6o=*&kuj{_NPhVi_C)x6S@qdBq2Ye9A^MB{(TdZZAzxmMr zBH=xbou+;j^X8$c?{ND*^(K$7Mpv{_Dj4%U#JHZ-@2zY~E$1}`#B2kHDw{N9tufaZ zR~&~bn~{Ir^fNV8ZjMlnjtN9uJnu@uNZGr<9}NY6^hzD0+;f`v;zoKa1b0x{{UDaP z*9XfUJ;QoS50s4bz>58ckZ$gRfC)~JZgo}m-^4uL#ty~ywMwhs8*xoo^;eva>>Grt zY!AfN<({TnBi!0Y{U6qNLnhx8zfY$RJ9}!gr=8WFH>m^7Dt1%HmFg4S8M7sf<#K66y#rwSPuD)W8^|&#nlNa3KIqzKaP4tBD!Nqgb#+<(s zqj_)MFK13$aTzDszjRKfHnMhorK7D6PA9R>y|1U7&Y44-T52Ol_f*CX@`o9}etu97 z<%*?&Xfn_b>5sZ9Rf&Pb}YzV;eZ5cab9o`wv&{>1YR6TRWH=pH|vcY=HFfZ~XZb24T)j5A@UW z#;~IevBug1wX8kPb!RbS>EGTNPv0xot!+0(kHB0k!9_L*$ zYqqShnpUife_!DHm8`9C^(Ve~leO97>*|v!JbUk$6N-}6TlgH?Gk<2}D%HhN#8CP1 z&_nsMHt(8tjPv{-5yF#=tVyo(OlCb2+s`JRdYs=UemZQ}mwYW|&Tkk0pT?Lrf5v%x z4a9n!?eJ&oXun2_53Gq;&nqT2Q-1QMo}Ux-V~6P~cUt?Q3HipB*IO%3AEMU>xdJ9O zO_eI{JFemE?0)xF%6r-L6Z_yxorgBc_7i+@?Fo4)+ZrnOJ@A4t>s}kx6G+513s$<~ z`0;1(-Q$FFe;nZFVxTXxVe?ak~PcsYT`n5Z>n>K`{4Rz<|1K-`eYx*jjv0)PgU<}PrdN7tX1Bel6@Jg znxo7$GmooU^8CKp%R1zFfjITFH=Hww^=%%Az}@s;;@R5m&Rv{%evGxvZ1;S8@MLYs zGcaezd4$^WPVUe5F8V99@A2OQsEdBMzS5F2oO^ta($D`w1LFWpJwjgh&qw%S$lZcO z))McYLnLQprbv8y>|6X{o_{igwfo9DFm~nLx7!mpf1g8SYgdf!ycN&CJb^NgT53KH zXu5KY(&~pb#(l6u>ia{=;*XYS`C{E)an|?i3upE~H-CCzWUo3{zS|w4%+4)gc-yx(5aVv5&){Y7fdbWP|aFO1IQ-`vMYQ)A?XD|=Yqu4%3L zBzi%QuW#qvQtwkS_w#>eJEg0a6%wELhuCPyRP}Pk>Pr#(frh8#`fkj@eD<&3-lh7^ z^LR6W^^dxM=s7VGOZtFM9Do7+`29?%WxC%Lc3oIA^6n_?lmn-ptZzTlui^4>`V+He zx#Wd2jqhU|pEK)=^aHK`0FSTwVgbL;!!f527(-t0DsrnDasNpbh=(0mE3M1L_iz5V zpr%G{a4|+L;9O+~eY7v`Mp?BdX47NB-gpn*Ox%hK^<7|Tb{Ub69WZ&K1JqypDLc)u z#y2Z_xRvZv4&7>rBuC4?;_R;13!j>~W9fG&?{ zta{fZ*4X@e0(|u~MiY7Wtze#UZ=~rr#|u-LpSx7#tGmzj!pxPtH(w7@*S$~A*g5Q{ zT)WFleo<4f>x~n`Hlu4}ALO+rPQ~8vh_(;bv)3*z z*o8iwSTi4@PG7g9=sB1=m(i@Lj4#05gnHYHy>KAl79OsnU+Z`;Y&m!z&6u~ZTXLX$f+dG(tXq+tff}&xe3Iv`w$CxO}`rEAhWka@P)dgwY)#Nb^~7WoKGCUulHO_ z?3tdKd%Y0&$_1atc;d=SH`Hc@LYKbiZ#Ft3?%h62a&$n;00%gkw^2TRz8U%p9IzxH zSBWl`*gb8-UvbWTsDjb=1Pmr#cgcYM(!sItuTKxJ!gZe@Oy<40N9l+!+&lRZH0=Rc37j|X+0Z+oFeS`HiT z*ll0Lde8fqnD0eyWIG>3F4qE$EY(Ki;Q-mg1I7RwFRpB?LpV}te?*fLvPES=+=QX*yf(-&-!>v$GSfQZuS!Z{B6& zyF#Db@5lTc-+A3(8W;|PuI&3PdO(;QMn6*aM3=fFZv^+h`E$4HbwxDijPsfIHFNcG zWO*=_^6s#Et&Q-MAS~tk{;+plbm3Y3$=^BZ>_zb~`AVVu{->8T6Z;*dH$Cgg0=F>g z;BlAeCTs7-7vvc?*qfgqR&aQS-0m3j26IzWmqBtn*6>$YCpXS8RV{nqfv9J0@UXTL zi6x?I3 z_}o50cJVAjkH)-LircHDc~$@Az(4;e)g|X^@PPN=G>-x5?Lq~Hv1abQOJ6;9^lqHu z9kg0*s;*y{k6t{>%ABuq_?oQ$`jcdrXOwPwPgY_cU_JMJV{XW$^&bviav=&d=%oRbMm1>kt<3YsZ!} z)9l=`4>z>D5jX0O`rPJXT(8F-Jny;M$BJ4ItYLz6uc>uUr(*&0#<8|F>gz@+c);8e zzeZB`a7e=ER{VR}B zP}YG3wd!f(xDU#DTkpjY^&94y0qMNQPw!Xn)ld_0JKrPUT(xDK=YJk^4XQ)c;=!%> zV#PYHQ`knXx3~d?v;N&@`}d!J|IITqEM9%@VFvPl zc_HseH_cPq{pi41#?cNdG$&(EpgVnP>?4CUokFi-1-&OG>BeXhGOuGE@2P{cLp3!M zPQ#O*Q{CQGb1FoQPSou;by%(W;ky?vSp#_1ouL{2wFp{2yl_GRP0E1W|9)=gW5YDB zv(w?h_u{!}FU<;_6gV{^rX8!VktZa$SR>|=E` zy3`_w9n9Wj#80*Lt#D{fV4M$qQg7D{qmCSB2m9Zv+ogrTI-Fi+=f9{wk{^AKHRQYA zTAFh1!~MgWa(a-KW&`1Xw6dXiOp3v z*Jy;Mm#BS9&$8fBjsA#Z^v-7Qot&n*+ob~jFIdC8jnvGRcVpvga!>~QY97-k{S@Dq z5lyW%EBa+4^s5&d`!CYucHHq_{KwmwX~x~zj*hHzs$&f`XH65)oVnLeJyCW5hmv%?Oi7l=J*(t!txkAjfGq@3J;8n`>Ojhip>CXDyIeclGa6bY%b_u7b} z7%0XS6}zw%JKu4i|Cj6QCqEec=2>U1xyBrk7%nzWK8K4u&ofM}i)*(kq05>V@A@i6 z4SE4PW_+AF`cv#*@eGFiGx6=-3URjr=UJ;BF*n4MTBRuEe7GQ4h|FXSV)$=13r`h# z4YN?n?@rAhA>!n$6fENz-ni6Vq3Pfd_dw(@|Yb?jAZ4E^|99`Jk@>c6A6 zz!gPywb_PlL;kMw*@5fC9sNAaXJ19PQlXt!j$+oNUqD@@QO)PL%ij+(Z>M;!{(zVK zGb3EvDScYL#y`9(N3UXJ6`eRotrHU^46ZV#aW#LjHnc*0YP* zQ03IQcQ9hz_NVq#(qG=g3!b-AbF`GNBg$aYjry#FTFP|yA}sp%4Kn+MI2M|VmF%S> zi_67BzvGA*Mm|gvNern@#E`M%EyN{@Mr&eVI^Gg-gMvkAWH{E&;%B|oRrtFH$kBPKF zOb0vYIcLhYCA_PD+QM~6fqeUo8In%gB0BrBd}i$d99Z{n7K@hnx|ZD0S_gmXn66^C^z#4qiC21QD;AFHDTMCBm?{PS(! zh=r~hxX5`RW6BM&|5g$v&*k6ku83V@*h7|cKRY^2EZ9XYvoU9bzM z?<@@8yC967y|$}riuvcr9nG}GpqUkNj-C@T1If*;eM;V=*yC6odt{jA%O=$}Sk~Ge zk1iC-!L7Kv`D6#}*iu<$KAUzNxqJg(%F`+jplmqv)0gTAyYsuzfqGKCl0CvPZyUl* z{;qRz_d@ZyNfFkvPnulmrp&5SiMBkq((C!k#xB*^$3FSHrm=Fd{SSQN8P>|*q^#1e zhLbL5)Vd3l#_Jwn!XWaE?v7RD@XKh#`Rd?8U1h|JQ)tTbxhq;*ssAbuiw%igsOl=N zH!|>Z0sDjTTjA6*8BJI5j@$f?xM>@UcH7Awc%g_fng|T!xm5+Ei7lZa(BZ6`WE3iT zde(bqafP0)Rm87LK5rH_nI5oZf3UqiOI%;+hEv>&eE;2F zWL1;*JI)qChZ>6oZ>cqQw1fBTM{;d@Cw%j^M|#p(xsML_hSZo(Z7s`P$qn1t-T_uK zPRTuqADVx+$M&QfvR(%Z;#%|wE2|;aY(0oQ+{fg8R*Bx~J!mH}Tg%-?SUn&v>i&0~ z4brcQl>SBd&N?^fJVNp5Ux{^`sn(?%E53`XVa6V7($+@lz3>Na5sPkaZK>3lP>tpN z*ei~2Q~KFGz);>3PkrVnWoIs92+wU7`_alEvACuWvn`~x=b-fcf zu$tKEm^#X}CCPZlbDM4RT5Qn7LUojHx}DcWqaP873*-M=SBRNcLNMtPXYz)rBD`H7 z;^8Wtkv7W!ehg%vbQ+{6xFZ%ovpCbaKS@hRB@4i~LqcYlp|wSipj0vjay7>LuX z^WkcG_L{U7X4K1`+(fQp@+aO#j*yd@eC@Po)W;aAoWJXQ zeq~Li_l6=YXPrkStWer-uS7QM?COmuizB>!|*60C2dhL7A_%9vSX5RYE?c?uP08uYLGH`?g{2E z6KlPzqYO$;W|lFrR;wn8s(l=$#`Dd%@TV}G5Qz~LJkKK^3GHto=-QK>%hN83v7G|Z z#M=rNbMl04xF1F^qph)byf85FM*dg&Wfl61Nqaodo7&G6U2KI}4>wqzv&Fcc%f-7M zuFTo9$IL6bVyEJQw)Y&6^X8Y_z}6W9M>%2E#w+qt74aqNmMeQpvLko1-zHImk*&zq z^o9DxSP0cQDAi#wO>2Jc*`cCere^J|8S7m3C`h?cQjI08$sZ_8RuazszyZF+jL*j_P9fEJKAe2S zgaBpLxd(7zA8r|Luh?l{LFsIM7T!CRsauM%miOA~z6+H%CizI(L|kr&N*T1}1oRG& zYg<=O*>f%#k3BdWuW74T)AK5fvsu^r4U`OZB#u=R+gb8Slrq=GWd`{l4=cr{F9A40 z9Ic7rS&?|e4;P)R(Q#@PF>r4<@r~ftBuYH#&RLqXnPGD`vA^-Zcq228H*6HPD_r4o z(4M(#1B6~3&LJZm;j^KZn4RtndncaT$>s8ZZH_oOnjXdre+1Es>&YiUq9gDu`UD&`Q+A7!aTnH0mEb$)hvy<&YNALCi)D=!U|KZj1h{SdXx14k%d zuJJtk6I)x=U0K~F4z*7cYt_bXk{=M#o zu%({$(mC$%+=Q_ENPVak@4J!|VOs2t+MIhIMfr+4e_UZz#}47nJA`edE1cXs(wbC=bYT8E2Cp7af@}fu*y_)-c-Yvb*?Hrqg;IX1A1M!TYab~TTWI3oGa$GKCVRHdVo~+ zWS@G$O6zXi>+n2>=r}2p4-``i!+&$_Ugf7vKC;<20)3V$yRA=PJ>PC|CgYXFv&k?H zX74>ZK-pf+EVDD@%`MSUvaUs7Qw!$fHg2kz?GM2me=Dqe_)B~U2tXh1mD(zgMDibB z_&&16q0JY>?JZu|x1M?QhB?A_lRHM-B*&$FkTCA(hVlYxY44hdPye`*e{7FI<|BnS zJyIS-J0K&ux%l(T3G0dd@BdUS-x@}pK5^3PTPozM^sBhr#R2DjpOcqxP8`XaoFXeeG1Vwyf4(*JnsUbT2M)47PpVs{+}=|SEzZVQTNWzX!4Hry zj_*6?Smpcm%NRU`^3^h1YU4vJ+`!sV$*_t^2yXpUZ|(^>l;Aan%NdU?}hJF zYK2p&k6V0GbWWk4-$(i3s~fEXV$yF zI5~Kv zSZC>^vUhPQ^`V@BuS6*w&TG(SD)kiEo=VBrOl)F5nfb|5(QBT9)5H?D#cWcxuZ@M{ zLDv84Y^6Fb9JfMv7fcwd)IJl0*f;!4SN2wtQv4y2H(>O{t!Rl8~j7bAW`zo6#k`Fu#|_2kZ*f&YsgV7ZmKWD zfE`%sYsMY7O7yqfL@ysxSjUVKW0tHzE&8mjxAzbiHmtxx&Uybm&vkO=C?D^oqM|N! zD4GoA%g9oEu8QS@ShyH*Zd_@qlo^Gi z-A>~F#j6$L(m;H0bPb%7YPfO#OCpU>?L5^HPQ<4g*3=xYkH4i$al(%P4$ZU+^>W;=Q?NGPm11@i}*N} zHQaks$#`FgRtEem3}nUe#Bn@fKXL7ysOa`)W)RQzrwl*Ez#$xEocH!d+A5vtv;J-q zd-YUf)-)dWcXFG`kz6A$T z!}65mkE7JxKH{6?i^Up|3}#m@B~NC|VxclRj0;=HIcqvke1Qr26YJmGbEc?TVT^Yz z%y4zyXz?at1I|n`MNwW0@x^}?qIR2M=ZgvAd-*cx=l@;jkwcd#KOTp}nss(tb5@yN z?Ronu5(%0 zW0Z;)#DRnS8yD5=a2BtLZv=ntSQPAh4N-0RrYmb#^t${aruSkm3#eCA>{$Srvq$ye z7s{ZaDY(g+8`Zg>%+H8GW1j5}+8K)a+%af)wr7tFR6M79g9z%9Pr^f!ys{rCpCMQ)t`QZeYNF}9J9 zdw%UGVNtLV@usGDw)Llc&1Mazke^`~@m-EBUX6BId;hBQRF5S}>6>sEu+GQ)uPOFn z(eP!R=cu)c{3pm*z&al>?pZWD=mN6a5Z}n^RD{4HwB{_`DZhSE4fk|74CD^FQI(=E z=o84A&r_EuL+|@z2m6WN#3ZF!_}~cd%4V&7l=BCPMNH#6eU+tR)4&U}=kmSTWSx>= z=7ETnzWM=f6aOZPti?xKCVMO)sf5V!7uxiPlZ_;>>9aROT%dllt$#>(*vC zU_VF#P%#l-3Bpdo~fR@?5zv`@eZi(`{I-D9KV&<9Gm6YEh z&}W@XpR_H~Uzvlf=IpWk`xlMzDnD_a5iZ<$J;ie8T{HL{x^bSViXP1BRy*rBT zIX`6d<!$|d$s)Lo6vl7LUp_qB!dUyb0=p0 z@SV79)p^lEoB06bY@LkA5`RqXP*P@%(>mc|!y{_C>3?N%#7(R@%f3x~*=D1a2)V-Z zzMsCGg}X(-4|*R_PZafijp)?Y99753kF}pCic1fm*zpL&E|u`_VS;5j=BVpPo}u3k zl$cpy{m@)l>bniIIVZ$F36it2c47GaLx0tINbeO&|4~smz`aTEkDJP^PT|b6Cgwc6 zTakx-Ji7Al-f7yiXrU?|E%@e4v#U|m%O?=8`|+J}xJ)sf5b!^qzeTqc<>Sv|DChjV zJJU;P+UyuTR{0sNGF2XV)ANb_p-;pz<;K5$ob!1<4uaC`0PjJ*Wde`tDYn_3_`rU0 z-j|J;VKu@YiR}DGk3(zh0Yl6$UL1RCBlA(BQCz7 z?)yNN*i8Os*OAP5DT)vg%y%lvrPs=0cd^HWyOQn9Ipw)+GmoC%_vrDvWSdyH+!n@0 zHW<8PxiAeSmwr;f4Su|ltc($k#!Pw?9VO5F{(Vun*ByJZiH&zWFFF>xqAl^~SGgxe^O`Q`V8wawNSw%~uiEZP zX1;v&7qLI+#jDF5YE1_b=Wfr8OKWts-Yx2MqE=!v=RK`uV%2SX?4(A^!hf1LU15v; z%r`$`qc64*|NGR<8eYc-3BA$e>)j_OvPMtwv%(Y)1COFlp|%*NOU{uS`S*KX%Tvi= zoLrl4uBKk{o{hWl;{-o<-3a+i*#Yc-{4WRh-(Ua7--wv8MH#D;g7xjlo7H*BeQN?* z4kiyRs$NlHMl8J!iO)AYt(bg@hUaSDQ|AMf`wgOy$#>kyZ-*7DhI}JCbI)~YuF~8o z9CvtkoO?Ay`R8aTe&um)dD>p7+8>NrMV!4g^_1GX0x|PE=fKoAVhyvTXPjZLu)Qv( z6w~jJeYj?x5G9;RRw~RHiAxie4LqUufH})9VPeT2`mk|_lH0^n_i9Q!J%s?VsMvr9HY>m{Q|5Ka2VYi*aJ%HNIuY&$k*fNW5R+fPT3)$b8gY z+@E2GR@D5|`_@h*lUKfo{inEQ3o(f^>4qxKx0CCOT=Hpi>JVex_eIv}a2Tz~-8?mb zo*QfTV&Zw7S!bH~{ z%pTFQLO>5s(e!{X+SlVAYOjqLLLbiH_T-m0*)7KKt!=S_xWo7rVqIM~bWG=)#b%ng z?ah7P2l6qDM~N6OM>ONPEd9=WaOMSh7F(mbMjH`F?xGR<@LcR_#)}1`_vA5*(7Z&JdOibYTIoVy9qBB2(u-P&4 z_f`inn)k9;w?N)HklFO(x!ZL#mrwGIqqp>LKGKKB2bJP;ClSg1FwEk#@;xsT6}*F< zj?+(%X%vuHQFH7Ob*2J zIrN(TGgqvA%M3Jq`f5Ibm|EqHz-iQ&EEz2N&_isB4KwSTb{F+IV_zsI{;%6wp(d7m0`RYWj60rZT_E@3K5?s3UHZYZ2J4Siac7 z9=A*DlB#)YM6d(Eax4#-D&mU$Eqh-|bF0_`* zb{&GV1^=(^{bbwe`_Y#Atc_YDWmkRj(9izOM=EM$t|Xtz#}aZBBkGweroB#L(pv7O zvwJI5eX`Kci|@Np-^Ilq8Mq|)8I_+AgL|bR^DWQ(ju@doDjCgr-cA;}h)yYq7(A0% zLTgM!xg3Yl{8?WaFA{^_FhjwfUK#t~( z*=LQ7H%nxFU+U;@(3j~7PTd`+EBvc@D`J7;g(D%SLt~7ins~4JK@{kaw-(o0WHH$%;*Kr+pS!$+!B690NJq zlyCD8&WAI8OZ)!p$NM6C;w_S7PEM%_=a~QYjdzh2%1x;N8%OXSG}2OyWqR8(CKvoVP)(Ihj$6NQ964VwS4oZiJc8oU^2)Gg{}IF7n_stox9;R z@7jpKo$=V{Lyzt)^@O`;43cw+)#rbZ{k3Ir zHkdKkUH*w;bSvg?E^7=DtlnwAKlex%c0Jd2+{oPKa;r0OvUqv`qc+rnJ_Tr~jDtx>0 z+%6v>LiVPj*)sYF=rDfo73RaP zC1n(yNv54{!zbMBjN)ITJzm>PkrOvM*k*Z|6WQt!`vrr=9r!? zldcd)jYy#%_roG-{5yMQV$=8VnnrRWwFv<{7B_v8#ny39${|17O~ordow)I0ZjC>`#ff^-e3Qlz8;v{o5uAmx%vSCs9$a8q*Nw(B(OgN_M&<}G( zmX!4)7}F*&*SjoRn&KXSx@&DX7v@Rx^!zZxg*gl6g;HyMZ?s@vtv^AQBC|cvgE*)D z@Kcg5Ymh=6vCHT)lKm_f+^?p8*Bn`z+=4km^h|p)Jwp12`RNh;U65Y3UTVn9g!Vn$ zF?>{eX*F}|ll=ev{QhWqs~yqdl^4ANo@lgh(U+LohDC=hG(&e0E4}TFCa-=O+@W^k zc5fflG}BYfIADRT-pm*Ga@K^OJcRW&$8gM{E>_cDt@#|Ezv}#Le~4t@T!xN zBVD!2!_flnMBF<{dPj3$&)#ci)>>L=n~C@2_iB~2m6rJ*M_-=L+mky^U3wq5b@Gs@+d)FxkWp3w}eL zL?3`1Y2@gXbW%4bw)BFt>Cw)sH8vj);r8|*?E9pL6ZH;ayNmx{b@oaRl`iBKV#PLk z4m@B+ADY<(F^4eLWUi1*jWG3ej zOM3lPjF3J|OF`UM>Y#np(zG>+z;YY(ikU3+a*4zKlgvz?YAA)Bj)q@z=1sqxDJ}UC zL60eBqcelx?DJ6i{WDj{Z<(YU8H8pTw&-NDS#lZ39A04yJ!a|+zUu?s`}{up+DKo2 zd7{oZJE(s;t#;uHsG&1C!7hBa-J8W z;UT^;$4`+eTIa*y1K%bs2TL}yPU6>g-u2f9OAjowu$;QZb%A3fr<@Gxt*qfUY_hcS zO&SjUV~tDRGo^*)DgS%JcI~)S(s|E(vGeQ+@>;1+r+8c&LI2grEz*z0F{ly5eKfX9 za!@2HKQUu?#cpYFOc?U%iNC||pd@w&tf3}bDilD zsm8H%sD{|UyXQJ-{?=5~FXn#VX}5I9H3=gp*rN1?xpb}|p5B)9L2G3rnSY7F-Tro1 zP-Z6$F^Iwp)@pbwd+Dx6IHrAO_V5B5sp2~|SHvJ%jWm_K9fNQv&mPkUZe}x#MSa6k1p{#n#U*F#j5d#tS<_ z>wqH)z2lJ9zCDI>Cu6=W8im&j)j!YiPV|hznjPJxWbRnDosJ>r+z_8RdkkL}@>iXY zu8xqj7HFXO5L>Q0Px8KykDmQFqmLRdRS(U@)l;0i>P?eQ1Y~2|O1@!Z7E41uoPhIZ z`sTdfEM-kSj!O31BhU6rpBtuO)*#|CZZ^{T5y>#p*utQJi0-D>8KK8xt*_;iOQM&Yo5mlP^9n{3gUe?W1X}uA`_L9 zY=}J_kk&NFfX*A@js7;$uKY9{R_A5iBBis42 z(9fu3S(KEM7L8h*4Gdgkq>o=CV7kiz_Yf^@n-hk;tB%BK$E=#|dZ7+e(3XKG3XmLb#c$^pBk<3=cZt;My3elOD749H{x}7b^K~ zcfmmRj%(iUG+N9Qo65YlTUJ{Q8uQ%t=Dhw4V-0-Vov>6p2*ce6s&u;1uOlo3#S@;Y zUQv&1X&OrH@m%$&*TnRWh2r~)x~fH1NANi~98p1aWe;X~T%8kxgV%bYO~ro9m>&Aq zd3JsgAz5D3;7vOHC+jbj8aNeTEZ@bQf6kON!}8Fkvo%&NSSqP6=AbV;@ zNCwnUl-zctjyYGCpP1O{4NQ7 zSX$H&ba=mbAhy%8bY$jtZeW#f*f5)J{++~{^yqp{meCLVO zWC4AT=?(2=lP0b9;*Ow|3+_ChDtSyL=e&^zHf~AKY&_zOvzL8fQY*Hw><_V~WdYP1 z=Nq{5=QTDCL7x^essWsFvQ~#eF3rDt*b$@waWu1TZJk8|sAKfsPeJ1|& zJE`)jE7HkPbhw-?&3ePPIr9--1kI5;?R3HLX&z`5dR#Nx%o#uPeeh^OLE#^MZw56D zz(<3_24fpBpSM{E>TkDEeRyJv!kOV{ajU-ioC$plq9S1Xd8uaNrlaH$M`6yFKC;UQ zQ?&I;z>33-aoA)(jPCti=V7D6C5IphxJ{kHlciEOxe(qmeV~rcmA>80$B-0jL@!t+ zy}XkP?{FIwcH1Yp=jC8+0A~psduig~EZFWr;twdGJJf2?Eg-E5>I=a1)mi}ergq$6i#GLMva+{O;Ai7e%p(f*)T6x(}Fo~zv6vyufdfq2Yo3Kl&F)CZsv`c@d9f5WKm%)XQPR51k|ymgfOe%d zf>$q>I{4CU9?YxO14aGUGVh zh(G%3CrP)5r@@ANOXC+=(zk?UI4pL?{138ZSek%((_C;{?}}vGK9;`vE_ik9rF4qt zWjeWB9lAG=-^T=FQ9l>>Pi!k+-oUqly)(Upy2uqBe39IjZ|417)@0dt+wT~K@eImwWk3g6no~XR3Pn0xn`&`iTq(ADG zR~DL3*BR&=gfDjO^>>@l!&q=vI--SYD|raIpTn^r>4Zwxi8&9Z5oqt&O_RYL%Yhoy zKpNGSwU?M8e^(;DX4OH`OA~~;{C{;G7$OboEMqz`wZ2W13f>ssqYz2S^u7 zGLU=E5k==?q#tY3(NfzPHYVwk*~=6hV}JB4DUeotOhn^3uGrMPO#0R~4s9ROSAFX% zDPdhCE|f8Uv{gencwPvsb;+rXYb)0$kJ0)VGw*J6mM4DqMS~SCIC`^-Tz{!IikG_p z%XH+SKRmF;!39bB4dqy7>$Lpnis6>mrPPaV$Y6dz=PP@qtp}Nh9Qbb@s-pRa|NlVK zKv>PZUzj|>83~<2(K+mP{(bHOmT*6D$E?8MIQe(c72(*{%~>_qk?&pdU4j-LGI$(! zl<$iuH0|sqS&lb_w{aqjhc-fu*Sm1__}_Kzq#Y!Uoh{=G_ZLe{W=M^yH0Vey=-ySe zq`R#UZD506+0&%b(tNbqMQ(}y3TesDT%;z_f9%vAN$YnG4zdq_9$+WUx}1fp!+3_{ zyqK+Xf?h{X=o%L)H5zstd6$_X@ialIEKEg2XIJi7PD*{&S@?o|qrxiueZ2%r5r(u}=VynUW+Qg{dQq#C(f~pzuo5R-O%mw(Y zN?Lvt{jWs8+G3MBJK!L?T#tj{l4f{ewG*e>NB-3}#8Vf^ZL5S%wXLv7f1p$`SA*W# z)(EZcAl0~CfbGmWaZ+@ouA}p@k61)xtgbYDLoRyw*x}*i;Znf*9L%|5j|eeQav7Y3 zF63GdOJod-_V#nRM%e2K#<-_jgrG8gs7@ zwhhSNj;+=t>?*+FuJp_M`CN0UJP#ix*`ng;YfW11T-@GEE^*6m8kc4{D5RIko>q0F z@6R%E>N&Y?qnk*F<1=8+dDNn#wq&p*9fc;&=-acSG~rVUb{D#!=utOm^O7Vue{w}c zZhy(}1F@zX8ZZPe~_h($B{)6MrIH}8BW*=LFZLIS{*7@$G41*c(Y+*Do4DK0O242J) zOdo|p%Y2?e9qxxSCWT?X`i83WeflRkMqu&Yt7F=P9l7^8W7HHW!OHmL3pqG{D88-ui&LH{^N<1``@2E*;? zDHf_Z#eHJYQV0Ba6sZ~dD-CJfeg66yr%4nka8GoC!NX)t^ZiM9chwm;_8r#*)kwgp z4=#AQD_4_R8N(a_SM<7kTCcMpXoKW`~cmyr-B5-Z@!u+{?kD$NX-~IVZ>0GJT ziX03gp8sr2sb=tiY*gjbJN1>7=2USeR>WGPvV5$j4)tjLkJ;eMu4bBogU7MLgE?F2 z_X~|8(r}F4r>fknLUmRO_Pf}lMVWWuF81C-_6}G)Y-eG|VNU226l)GLT;YWpWD}+9(T8Cl}JrkudR?H`;t4TkefpRNrv`?s8*tz3z4BW^a$LlTz zU)QB!*ev32OG*sl-BR#!lpPMGwNV*lB*8?Ny4@d>RE<3n@VdD!_2m3HPtC_ z!x8QPI@ion%?NNuc&ZN$=8snOoJfwDQ4nS=jWHPXzzq}sgkiH7VPH|i1&cdH;N`F$ z1_tz}S~WEsy>dqzq<*o*oV%f@*nCQVqdUEM_l3Yr=d-~}?oQ{P2u4}>AT*jno@43% zo#7wTEHK*YZ+v4zSz9T6S{5|t$;+~tpy~YO1Wtz1Khb(&!Ee(H%s60;SJQ79^s7uq z?m`>fnLbB#RwoVJM%f}y?X6mm6zVm|(HxSiGFqL4H{{LRbiSjyJURgxkLXo2F*U!8R-%@JAuZ@li1=99*T{7-R~d(~T_(3hMU)iLU9cPR#bOEPfE*ct~L?^JC} zPKW+v=0__hRC?4|^yp4M@U72PZN4YtpBi>(gXSSh~@0@y3|HpyQeQQnG4qWm9_fMOmB2u z;fWfWRJ)%rsy=Q2PM2$+$3lb#%h`ym0l@ z&%rpRa)$26SoL8g5Ld~ivz(Nm{*!tPZ(h3KQb21s_)bn8uoqJ%;J+tW@t0cp->A!O(TRlr+f)X@;p7 zSnx_ZxZWED_5AH*EskOb}sx*MeIV2(g# zB;KtYj_JV`*m*Dpmx9OU|7mWH_4$E+&CfMDJ7`8$Wgw=2Jv}(Xpu*!gKAKtK^pRt# z^-a=odz>}8ZGWqpwKf&Q89G$;Ot$H1g+B@xV z;gOB{b6G6z47JDPcpvqVsA!zz&c1A9lv;0FB#h%6FmrCYdVb$<^j_eI1Cjaa-)}>3 z={Iq?@>A;m#55vKP$TKeob=299H9S>hr=cH{!)Jov2=l-dzreUjvw&A6`xfX)gPJ5 zeVtjAnhj^vFO0mgUDpfmzT~On$z$JM&V2KnaCN=M9?Wk#hKiU6DuY{|STj8g<=a+C zaYwze@j?=IoT?=!8vkFN7d+@DHx2&3I-fn&K|c7%`F}OfJ9J0-^OCxZ9VuwvH&U~d z9MvPOWAWp6XAG{eK;gMqT+7hQPd;IWE8qX#4>n!cQSul+(%}eAGxmndLjhxyofb5d7}Qh zi?!|Mh?vOF>fe>eFeJc{UKVu`(%cWdxQEtis)ZlJy|G~peWpj~;9PA_4C9$Uy{J1P zxQD&PEH-sXclx=zVNSRkR{3aS$qqNfXD|=j=(>6fcO`AA{m}KOo_bm@PyFWl`kD6z z%~Q^Jv#wJIwX3J}e6t&#|BAyO>v7UUVps0Z<8XanUukxRJ!+Z7V2Jq(O@Tf0u?r$_ zf7m5e4)3%c<>6Rv-4!c;nqyczv5qdt?`mX*cFup-`TmvCg1A-*cpgB0X2&2^PP2HN z9nQ~bMPv2i8?mTO{y;|FMD?trF?dQ$uxsXvPyajzBgN}4i|SDS`*Fs1;RGOo_)A6 zE;c!ay=}NdIoSrk5`0m^k{EJ!4`$_g!}_5E`X&#C`6&-1nmWR6?pXK?az|z)Go(MN zk;b?C)k!YU_^6T3Z1iJ>ZaB7NARfCApPTOq+kHRPOa9Z`Q70DvPitQ;oa$bTV?DN zf!K!h^(Y^#zV1dng_ji`&)luPxu5Tz_T;Ty@mKeq5{l`OoU3iJ)ai{vz(IvNkt^!e zQV{N@*xkn=ye#X+@jdUODCGO1~L-wYSi{Ndck4#P4!Aev{jQ7|8vMdiCA>dpEdm>>sZQ?tgJ z8f!f8^LP}q(E3Od`@6wKHx3PNOqJHuW)|?CIQaPWk!I7+(|K16T%T5GQn(B4G%FHM z`X5!bApfGcQzX1=o^ZON;`u;9}IS6&Q!ucRQ>eg|78om69x#I z6EE2Jc2? zDt*$joYCg|F7m3JF(JbhBfhP``%L0OwjL-n?1rIn#O3Ic9hmQ_esJ3zZ`Hy0B;^)X z4e;POh{DkPUQ&V}&oo zh<-$!+4D$*Ep%63A8dhl^a9ATkIWx>l)n9+|E}}r=9MZHalxhJ;g8wfTixng0C56( zd4(9OwZ;T6Ux7T&ssQ!cHOH_%*9wnn7OM9i_D44NWGUWv)tis{A)7O0;~q7z*wh!j zzLC@QtQkG#i4d(u9{5~Ayd);gg^HBm!(aXXa(T&JQ+)7W%!Ooai z>5NC+%wbkW&iQ3(;bv~eN&08ln{sb5wl5U&XXZEOTRl5i{U?YS*&l+KJ+rwmzn%xY zZ$~08q??rSlY1`vSfnl)CoO%)p2Yoiq%%9RS^1^xx}c zu3pIdsA9Sm1|5h{FCTggH~1dUnQ%&7dcYqU{h41J_e32U=Z7}bo16RBrf$p^ro^i~ z7i!`55?@>&W+rDQc3>e`bj@wyZM8&JY*uXCF~d zrM{t)3(ih-hwH2jFk0e*!KIun9_VtGam4{GYLk3?)hC!se!Cm@=-!!yVG=WlizD#d zuDi5?-VtkGM`Qezu~Iboz5eTYC$(xJ#VxkSmFg&HMy6}z9n`q+-8W^ff#ww79O3gK zabmG=;kTw1NOq6KA?DGKdwv*aNB(`DlPtQZPhSmyOx~A!b$|8VLjmx(Nj*rya`h%+ zhyBR$-gn(WJ$TwNtjMF!^2TVjyPrQ4@;s0HkkrdL$M)syKBmbn^^#A%)HK-O<-Pan zIARfLPRtKBt&9K1)mw&D)o)+Jh>c*Qh=GA(w^-~wmWkacwiuv-3Ift>x3yroP>PuBf&&7X3z0C)#=-l8U)Yy-u9HW;h-a%h~Nz2*%itV^0%>Bb~x9 z+

is731Ro>R?RvQgu8=cB`RtXge1%TOQ8ypBMJSF#oqZ}y2;75u z{({}YoG8>f&-V%+VckUe+2XKx;cGQ=jt@x|N{XPq6}12TlLFU7-;%pELx}o;zG6yQ zj_?W29SeJv--q%aesBmKqkq#p z+6!u$EB(fo`a)U&K3QqcC#F}@?BHNx2^{vy{?cKyq23wjaa>av&@Gq@1l=*MgsLvuR|MQ4K~&hP9kg+v%*Dmg#W8YGnYBWL+fYhnFzZv(fh5AxtXp$N(?0SNF*rDBm z%1zYOi}ngWS*TMd9~9nyLsn^diNeJK zDZhjNk@Jr4Ed}+v$azb7J7HTQa*o~IMQ{ra zlHT=E4|)lfn_%AyaE|>sSZL~ooXrf0P!8`z<$Fq{yMu7Dk@GGxRX8{b8OCmyCkz~h zy0Fs)7# z2kNipaY9)&a{l@>UbxjCIje6-62_?^XRWu#g)=$p$&IN0tv|R&-JB-sAZOv`Ogeih za&FNOLa%5d=kxL;`m_K!$8OD~D|RAhy=R5=KGZQ+a*lrap6b~m=cYvs^fQd-l=eJp zrKaEpK2~YZzkLma`b^|Je`Z_ZBdohA{l=-xj>51t$k}|2h49-EIXnI7FPO|n&c9X< z7c{0IXA@>8Y#)P6+8c})5*q!pljn3{=pbz0sJB2k+8cF0r`1C9@u(+_+ayq5)L8+6 zf>#piS*2SALxwtNZ>Zq44z=xx2w|u*a&CTNr*IJJv@7|CJ&qD|7obl*{4Q1)(*)mr z!l(qHIN6=tdhx%USH9^=&%Z$bTo5ysuIY}PKeY;=6}P}=0>cBEadZv%US+(|y6b6b z2(g*cp6jBo(J#G_^ZkOCw3RM$F7>OWv)@8pabOrFs0e#ty-CTr_fJhB4%Xz9e&fSN z17U(Qa-Q3}tw3iW=j)R@3R9H(xS&tqD0AV*xF9ka^!1kggfpX&bFAqw;q4scu&+B6 zto=~u*f|K@Gf;20m?9`3*QS!m4~@CPS@8c#ZJx72=-2qWJ2ZW*khTlkH$K@Y1<5n_8{l|hlbM*CBc&4sM)%jz5}*O&ZjO#(9RQ)v&PY6n$`h1uN`!r zHhhDc>CmU$pX+qolOUL1l@ZIT=QQ{Xa#lH1Nv(DvXQPy#G}8q+yY*2M_N+(Fk5}pn z+UdwyZGxeo{s}p!RGJ9Qhr{;>*EBKfBJ|!IOlE@){%avTy@*UoV*3dLYEZ|&93t#8 zQO=VE5cbYmxJ*&Mx@aeyn}@pViV4Eq7}QBOrU|8?sK+m!Ep*mG-Fd)#;ixuV^WgDC z!lenwIWEsp2(m)XAKE$zd@uTnaWO8!karu2buO%*b@CEsdAX7Kuz&Pl&i6Oz(L<1v zMmZk5o& zgO$3_{L5A{9<=2hZDC}q5Hbxkt=1QW&LI-RqwfrbH9b)Oh%*-Ubwd5!w1beLkGj*k z&VpmjR;mA=-Q9&zBI@8ay@lFCs0WYiFYL8JZ9i*}@N_P6*7!c;|F{3d2rD7e06BlT zXDzgd!5G71HWeJx&{ya$uorgn4J680M%+s#2y5rBB?)`}m-CqWu!rsw&TsrG)~5;9 zFt-QXW)2xeLk?}1?(_J8jnuPCIOzh3LcwK69{!QMZjKJUV$7{hYHOFF6w zkP7EpmAa;#n!wAE|N6n2f~F^G60a>hJ%gMdMCc0j0m#|Gy15YW9sS0JmIlK6>lkm$ zOKmCKf&EU(Yqs?=5*%Sqf>Pgq&{o(6XS#dO2m5JhCM+Gkh6KUhoqz55fnP20un8mA zfo;zeV|r%)E@B28NX-apR~mO}6KFOugtqFHM0!J? zLmFXpL$i2^`Pm~o=;i(U$zW(t_t{O$uI?ejL0e9WrQ24-5CXcQ?S5J{KT5J;k1q%5 zMW`#Pv|-!RiF5+g(wz!=)7T@_>HH4qS?*M&QiDMJ?glw$(08lDrS@(wPSQ~>VUq4` zcAAa|!0$q3>RD=*iv0U7y+GrhA@hxyd9=1YYFQVNPOL}HCx&qPCJ;Frnq8tt6v){; zsDOreBj+>guhWvA$hq>>ZF=|$`ea$}LVDWEolJFwd8(c-XeUEglH>osoO|p#Nep1m zxAJ?jyPHF%ghxr7x6XV(v}5;40 zHKSwyoRru;+R%}z`lL$!Vb-rswDZ0s$v>pSKG>Y{gJdN1zdgP?9o~Mw^uB9<+?>Ar z5i8kn_wAPS!2D>*hT~@Up?O_)OZWEFs6REf+9~N)bpvVgZsb4q!VsEmiuZqSjTLS4 z0Ga!K96>eGkooUuTWSn@ZX^FP&(%PPyEJMzlJx9?uUdTDU zi31(j2|1rWI+3cnVT>`_V+Qpo+9+LTDqTSHC#@spJ78|bcr`s$?@UB#JfpN|{A^-s zoNf2vky3x#qjff(sxgwTe(Gyele}Nj8l}Ije+dbazT9Q3^}4(xlI~@elUHPtF8SfA zbK~UJ)|nFL#MS%d>gw6V26#R@eL${pBSVUf4|h8#-*XerUO{`G)Oh*WkqKl1=tn}L z{L0NZ$%b`Qj>vn!UYa@39#wlx{@obwXV9!ua;p$z-m`^VZZsR2H@SC1p5}qf7yK%c zpMHRL?%&~~JjD^2ukun=)VD+C9vk%)lg}gPX+7I3`f4KQ@Mo5afihcSh|s67h&(U?t1I91*^%cvHv?B z+<3PSaXg9l)@9m0MK^-a((b8?xHe{wbj{ea7sUOa4@i3Hm@nd>;YpINKMwgloKjHl z?#nV4W=ML=c?Z@}ElbkA@k^NF!ZT#_FPO*9c4Uc5Gsthy7vdaQTgc~J@f-Fq)H$+C zRq$`+|&=9`|9!Mcc^X zLo)Ir-Jf-WcWbS$jMOg+WZDpuT!FI?cGW>Fd`S=)T?f~E6U17S!Ti}582dX1u)hzy zNg?b3(2@HvodFw3>nQNC243uCvK!%7Wu*P`4a|9+Gg%GK_^*Gqh(Aa4cSe)y&oZ+4 zYJ`HX+C$h28F{CYA{s)y<|nXceaCApcHba@+yy;o*>L7?`!Fdlg89!1C+4y57&!>f zXfB4bd81B{RJi`$F$ruKyRk&Ud!@8w>yoYjrQ z-$<>coW0RLB=s4YCudnd_DQ;AsmQ#qqit`v!I{%kw1>I(FSGBi_pgg)-7(QV9!%ylPoFFxO{Q z&KAHpH2R2)sJ(d45+JwVWYE?{<;>UFhbZ!4ox-k^-Fdo^$l%%M?tR17PG2Y8r|Pb! z?0Fj(N&n0F?eV$f{Mi(8Iv3WZjxG|XS*Ma8>%o7@>&3}+$H<-GFh>z(#eR5Z5F=R2 zwiVr3w`nIyR~2|q-Hm2WuBV6=Xw?TN*rV8NqG$>8^Bu0TCu!%&kU=uys`i{M%)S6? zaWZn)_Z@SZbB<{213yNpm}?pA>3t5*-tYlxs-{c#*1G+BX0raUq*F(~XIb;&B|V2! zvIirP`A3}^)>{Rc@2UO5c5U1x^*NvMlRfrFAM!rE2{&$nzf+$WHLlwjpR5_C$;UKD zzp=eUhrfn;yGna-ex=WS3o&L+FgE0V(_uXwY&h;n8*bnT>u$v`HyhrT2lenJD&_Dy z3U13gW_yrBVDlBBZMi?J#VD`S>7yZk^!mS?chwxrElj>lZXSlUhOlyRg!d)V7ucTH z8N()~Un1Hs{7Ltp+t{1!mx;{|e==rd8e4p&fY?v=Cp&svV@=v$CABa=uBlPRp1WQn zTVel1O!9A*J^32sS@$C^%bN1f&X6Mr&vhB^GZ>+#bD*5YxL zq)Q;bW#T0C+ve{y`GHwz+nGAe`Ks6GpPNr<#k(nxvoUbf3`fqd^4jx-F!!ZoRT9>P zH@}53v(9b{K7J{_%lcpL&3zg$-iWO4$KRD=Tvv5`Aa|XG>nX!#59E6vxJuXg*PaVE zuMmf?FDGrYU`##Enw4d~B_{BUF_pX7%xNWL%pZT^5hSuV<4VX!$e(g{dj)&@qJ%7l zHQMkZ4W6~*Et%fKpA7kC#6!=OkiB31h<2U{kIs2Pw%_$5D=bX7+v`G-dESqld~3wN zWkYSp(|)A&R$YFig-9;L{;G^-O}S3NS@InAG0%GUja}(@k_;__J)qw!nA5dX>7I}F zEoa*H$h_*@dsZHf%#RHF$g<+_J+i0jD_b!gng4$Hn@v4|{zNMQa^xOF+xGs^j9dT2 z*u%oDIX7R1@4=`YaBuIB^Zu)*JQDVqE1A2wcI6ry@jZA!r57Lk966KU1G)SQj#ECz zkKpFX_)ZLdZ^tjaTk{{zuZo|FE^kz6w*nan_Y7jE4gZqxK=40r8Ed-d7ugTz>mF^Y zW7iXYlJPLdefCo;&X)WjWzYS|?@$ZAV?iC6cgCM+KOW4xPx(w1NBNV3Awzk6ZUs36 zb1s8g4&YHeUy_w8!G;%i=k9s;NWyY|vcG#6*<|%<)F7r0IfcR-24I zJpX1jn`?s1JH~%vnOewv>Z0$gUmIj@bEbiH9fGz!J6(;pU4U_2jJ^)H)kDs=x3}bZ z?ikmNU1Z8j|JrlVH)EE3U5|?3CvV?6!bVTgqU$nc z^o`<&P!7A!BdKJt`P8`6CGn>+Lli+=KeJt0vRi&eBU=4KSbZ%1n z3-+kX$e*uMc|%bRncr7NJ{LRiIZI2(-Tp8pwY1`=Pdp?UlVzmD!Gb4uxK3(L$Vj1z zDPJ-{l0aG+(XXuZ>sQvamZQkwk~&DfMb?WQ%kPj@L$fCW(mwUy%jb6 zAcOtAmsm+~b2{jzjJ$!JP<(?9Ek6UXN2|X4%|tD#o(yvu6DDzCPczzm53Gqpo#Im) z)M3m3b9cdReB~6VzZoMVmxsFYi4(t&aq+NsbLJ90`F$xl0^gnN>O?;G`eQP^T1JY9 z4Udn%Aw5fUR9~(?ib>k`N>{#S?s-XDwQbM6*Jesu^;R4HVAe57zh2*pUs6k!^dv`p z{&5p>{&QcOcjCyoq=PzNaRWIQe`#QU=Hk23EAA`vr1-9E`lONtb;OutP*y2BRfC+x zUd1f>JaTsV{DR$qz5Pn&BLj-rwFl@oaxay#HEkQ`oJ&8k4$qMDZ+ScZ`~=1x|JrlS zqopi2(UA6jFCz_cFIhg-r>1a@wCt%V&uOJg@1BO=@(FwH_*#oTO@uR9bDjA1wwhEw z7Uq*31NpX>>QvkX>m%7)`NV@wXil_@gd7g$D)KL6B5?NI@6Ct zq73pcuO{baP~%=U(P$j z0@%*0hSUpU@frL(E1axP-(G^a{c~^Lx|1&5oGv3CSLgEXHCogZYE6#s-s!744cG$f)Unb0TV@mbJp}g8bluIzzxqO60sqNsLwWa&Wn>1Eksp0F^Nl@` zbE}Q3c&jVOd9A}7etIZ!{-Qa7H?Kjzaqfa0A95P~M(x$%e6$;Ko^Cmi^P$K&u(c&W z{u|$kP8~aQlX&EOgB$bK`N+8y)RsCt0XYvX)#gpwA?FeoHNN%-`VBq%2Da=9a$cAE zolO&wbAQ**OtT(24^#QfCOkpTBQmSlET{#kWUgiMiS-!mC214a4t%`Je>r=!-^G$D z3~AXLh@Z=w@nsA2=?gi`JJs8ApB}o@FG)r^-B`=7)@jkv;V>68AcAinp-El+WKbLB zARnQoL1%lxTK|e9en;Mf8hOK5d-oyk`0EP^-zFpCk61oEt&EWSGV=6XDBsr?Ih*PF z^Q_azxoM3nAM+9Y^M&%oyxCgh+^*G39@-i?U+X@ex35T%p5;>qfuAZ)l(ez!5FS#D zoOhkI{yDm7ZnZ`IX$j{rC?}>cDapY{(obvH-Zch2^ zI-LjcWDn%*H`Ibp+Jl_W8Jcmbj-0>kGU9Wg#)q>1{%l>|Vl#3+r=iX_?MBWAPW@r0 zel+@x4&PX01f-#=T@-MY3M@?I`-qfcmB({d*@7+-PMTx zDgqx{*pWAL*QZIRWMo;<5>9&Q(xgb(8|o0j7d6qQk06d*9&&^q9Rugsm&!=nDq<=E`jAgOhwyoy|I1lBMFIKJjcCLZ8EHDcH@DcX zPe;OBO3XEPNS&%n?YDw$pWnkr>1xw6POvvABa1Jap-HDt1slG7neT0i#IpnJ6+M9->H3Mr(KbAW}Td= zRU+pdbK{v8#9zwaMM}48O#d`;wp=%y-_pjh;lJ;}3r2U?YZoJ$R|tDMk6UqraD6%f z#^5Oqf!u7cE?oltwop5X*L>5WE5KHZ)AP9FFiolpWAni+AMot&>a?nxjC5Cf$~{ju zp}))_4ooWKz7AhW4|rF$=y;9i79i)_@fWzx805SqB!hpwaZS2UK|7J}S}K?HxQZCQ z?AIAdKg$Z`rn8W9!x=yRvi7Ld{^8wfet7|M&dQ(7)7+8stPx{)CFBiLKKtg7VZ8D> zjtzxuOCE6z$0<%(9r>ugVN##1{o3#sN47~iyNf=rg8gsG&t7oQ{D{|V(yz9r#j%Qy2CZWznGkU8Z!)alOC?2+y9JMDM`?88*Dojs}r_m4wc^<1UJNf0uuJKmJP?&2x+ zDbH=fFMeGo=@;%QJg>?{(sR;P`IuHtl79P8i;L@*N%~)Vj@Nz1bYC>1AAs{K)w!H4 zYf3)>XYZT)ct#6VS_zzo#w)nLph9;8=TGln@mPqHrvc~6=|A|Bs}1B~SEx1Cwn={S zhi^o!y^QSC`^_zWz9-s?Al{o>!>!)FkpAw>pD%dW&)brwZEr#R%p~1rt(-4hjXv4N zA(I<@$&lK$O_O*Z3!E>_eig;L+`+lKk4{^;>1>?4yO!q8TWmwN(I@8df}Y6M`Qs@5 z#t_+Ncn;)8`y*T5QC;{jFJxOe(un^pL0gU0*5bu}Xp?=~{9&dyH%RwTp;yJ`cXg9= z-@&h0*JaL<&RJB%Ms8doX&sA4toi6Al0H^&m(kq|B>gXE&(-Cu^mQ{D{YXXPd{Rj2N}N#V0qfC(nTMrV};Xqjfzgvyzb^1?u^;Fa974yTBTv zsdm0B;uGoIMn(o!H_NwZC?x^oVek5{CizzvJ(d2hrcX6*AB{d)b3qaJ4#<<*^Ruq= znf*>l`cv#hekMCr(r=v8_`nwlk~VC!pT~Rcm-K7LP_CyNBk9i5J@_U&Wcy>pJU*)m zeS%elz*9=_z4koEl5d8+f=avHZ)(i7LeSr4E!E=FBQZ|PO|D~qCS%NSzyE6%JO??C zXmgAC99k=VcDWqtiBzqY^vb!J>|1x_oHj0zoh8V5%L8}jabc0v=U>k2o>#Ee<<02m z$FPS#Y$-1({X+Jnz`o_p$N0*G8q#w!)F$5kgsUyBC7*zEtA++1b>%bZ0Gua2YM#F! z=rft#3H)$MtNcGYm1J@Y8L^+!B7abMF?kF&Kfp^XzhY(~A>}aVyt1BKxuCE3`mmJO zN1m7N$1M9kSBF|lN)AhUi#)gp$JD<9j`OdO_f^?`J8?h%yA#>wP1(k)2P501=Uw@^ z3uw2kx=rSN?J$10x@|Du#*lOLYBN67967rz)a8Brkn>-wAM6mE6I5QmZSiwfJpegp zrRKA(gOIc0Zw9jrK+XdrA-8`6a-OZRmD%h-&Sb(&rnz#dbe-RZ&SK}G|MeU4T*hmj?pHxx0%zB08u=UTD~aYXi2WSe z1}}r8m##J8qFLFvjevu9CmW7UPO3 z7vJ;ES!ly{0fpRi55^K7pUQcDPxKGTZ&Ue2$PumNklQATyS~8~*mkxbZy1U1wUmqV zd0`H6ZtHK$Q-&kwAFADW?s?>#^`bd%)&)7YvZ-U;1CaBkW{;WoLFAlMaDnxki=1bD zjc2*;$T^#DVcW}*^Mu$rEb1)!4GY&E%#N*;?rqGHRB?vca!IEesL|pW{4V~r=a=WJ zn2(<(Jp=P~!&Dsk&V;Wdoc}oNU{jzr zxAOW!O&!_h_8TSbB=5<5-=Kef^!=@9*~wLEKYnwH*t&R?r1yT9arooZ**`eUNmgkzaXa(i?2wVw8W(=bfatuQt!m z*;Fp+RkgkHFI+2@bdalQe$Dw?l0I9dm0zNbet4;(mg_G+DYX~;z0dv4Fitzu=^WP> zftFE4g6+PJ55DO<|i;CHFK{=LOLnC5Vt^DG|pLaeytA+>w1 zn<#cK$8m>Qc|TiOA~GClolmIV8mUi4h!6E%gWtuf1y|_EhX2NOcZR%TRSKw83V$ou z(2etTFpdVT|1OvR4f-Zs=VGi%{$SfONn06p%5Sx^Qqrjb{qyI)d@pI4y;*+SONElY ze@-*My*kDcZPUy7Lcg<8`?A{wJhD%wq;sFAaaxTrTfmat+%6S;a>ob{ZVvlxl=q;~ zc|70bh_;<_wJUFyhPIt+q5(CO(Y9}Xe#%HR+IHKC8LU?U+V-`lL2SD^GJkGi%U+K~ z+rHYqLDYntuFC6Mci$=ADh-gdSF@A@T@);*B| zGtkHn8&)gbL*LdG`SYHj*7DWK*PQ-XYJXl^$_MO28}2$!=C35+3wCCGX zw)2umWFE{`@`Al++xMDKe)$Z>82$$BxY3Rz>9a-iE19qNK}j!{r?J@i$b9DXbu9B9 zGPe%s#L^;>`DB-K;$t{Vu4GudrCOl}`^uDB{flVpw`{wlSB;K;M-cD1}rg~cW z1B&aVdw8|wF)y8j_N+HDjkiAVN@_Qm9m*$sM0*a{=EyzeH>CD~*~58NOunSsKR4!I zp5{o}tWP~Fn|Majeit}Xf0-faD5$f!%o_d4oDs(Cx&r-)OT|cWmmQA#Mt6N;8@U?C zCcl~=BiSFKrO)0Rq(OIv@522S!1&3y=4$j{e*ci>#Nl7t1lS@4CN<3(6fm?Bor7vF)|S9;7n`n7l;`I z6Cv2vm+buvdqQ9@_rPdx5>)%YoST@qv7u%CB%U3v%;v408%z40wSsTGt}W@AJyLkV zuqKkWJh72mT6~i3xuMkvo>^KV>BmP~@}Jk9NVB$lHtlvYl?dWeMqO%d&w(YklMT`Du+kX4@6Ms*%Z7+*1^zUJ@R zI5)t1pI6awkVEEN9nA9-H4)Og_!9-N?bgRgxD5NB=YE6z0KF}RG5cZO7dVgVI6zQO z+f1GU=V;h>YBkS?l>a}R>ntWPdCUG1!_qC2`2lS>+XlAX^Vc>$eVC4<{eKPMd(I-~ z6Zv(_u^u^>p2}oViEpK6H2vel%zU0oy56WSn_GdLyFY#^E?IO%Y9Bsmf|zEFaowrC zyKVYT!q_9Ve>mCfhnx$0x1qzskh6EVGo8ti^RI~q=-DRdw=KiZ(u;M-d6n-Kx^^yd zc29Xolb<8!xw*x3!Y1TAdSN+LH%A|m^zI||ZHGRDKl(|hY(&m|KdTANt%J#U@BR^$W;Z*+syAI1nl%9JHJ9~ ztkPLneZhyE1pZB=f9N+7nFV{^133?K9K-h+BWFWJG3&A)Ia}X!XMH{+=gQ*G;^1-U zpF7U)FRDF3&bFI=+k_+`=gS9eNS69tiEZEY>BN04a-P?=hFogooUGQKdJyD1{Noh* z)EPP7eh@*M1|sJTPfyeRjhuVmxlLC!z8|BiAJ8o-7?ap7e@uN=AZJ6BCzMtq=M>=~ z^@>2wu?KHcyOGFwuGLj);DDT$zPUto&LL;D%FFa)6y)sw1^d%RT&1CquVOwhKkI&- zet`V04#0e2(k)6pKz>5tJnGvWI<7W=oCeO>%kRl)o6=IfC2ljT3i=ssxAt$XUxKAn)WFtr^$J{~#OJnu$b8`q~g$oo-y z1=_Qr=?J<@7wtLjhCLmpgPd&*$J4JHkh59bctMyqZG6B%$G+p;IsPzfSYz&XOJ4>b=BAb!BPjrL&Lb4VcB z2b{G|Skc#NfkX}b$uwtcdb!4r^abV)Z*6IJID5YK|KYr;g*w!tMb15=X7XY4kaOp? zT3kCHId^cm#KLuu^96Yn3vxlut1c~Lm#UHTcF#eKpF+;x-WjkQedMg_QYju@f}GV` z<%?y_k+YG1vZ(U;tn|Fr4?{)IPRM!7ZznNsHrlh*SzGbw1?21)(MEi$hn$@p-zjDo zAZPDu7Zg@L$l3bRMTMRQ#@JU(J}Vp>_sOV*4-$VnBWL$T&f;ZXJJjNN`H>E1)K**1Pt(!&=YWA#~=B&|9jfxZ2c zE9t_u`&g| zYlF#KC-A42Js6ikuC_vN^0lcu^Hhg3wQ_HAIl`G0p7SFQAZO^5nuRQ{4CX9Dy~*$$ z(^)fEi}PRaP1Yq%WX4@Klk%0`WYP+#N55qg>FMYV_pSVg{&}6SoW~#SNX@UpI-to~ z?)q7m_VY7+Y?riy;ExMWmCxhC~%y(#rzgq@)*Y~k-^tlFCm0XsqiD^9j>wMa0aJq zy)UVAyTX>j8RQvIhkH=#%k0uDSPOa%`5A2(s~iV8cCPwBea7=_Lmtf2K)!P3a*Cm!3Tv>X@&F{O8K=c+cHGEVL|3(k}yku|?78l0IS9 zgm0UAMAH5CY4I`sha~MBt;dbs(O2}j2sN??p|7xes>d(JpieH?q{r`vqfdURrpw#h zKwsfESc})RLe7Ws)p*?M5b2s9-I~JsMKCc}hdpf1RQYP~w{JFXCT&ita06Ix{n>Xj zIk~HWiRON!U5CxY{Kyy90rs=Z*MYne2P@f#AFv1WmoIs1Ucqj|_hVn}OS*0^Vc)uV zkyDkv@HhUCv(-0yo_@6jRn8r$)b!{1VQTcv1sQR6@6NmY{!W&IZy!?Dfyd7(m+npb zVq4x)Q6%YS<67~pLH8uxXIgWf{qd@#^$ux)%`-{cw^8Ry2IojRd%6mbUxB`Yp83tb zoJF7PIpGJp2syfy{O!u>*kJ3!k{;Jag-^VQKDpN{U0AQjSgvBJG0&cXzQSN*H)uy+ zVR^%xkMToav0uZSdlq5L-0-s-Po0fE`LRuBn0G~=y!K&xzGG{!^tTd{Ou3G3AaQW; zC-b~bc&kuYrP{7@&jGb4^JJW$&*}gti8LP8aLdHafP#86W)K;DXD+w z3H5BP!*NM3U;348Y8;!$E_`CV3C?w#iTT2&mg3mtL~9l9rHY&#m+A8Thj9#8t=X3M zE=FJBF|sqSNJd}rG~ApAeL@=^7G=TbK;0|l_qe351;4!jIa{3T!5hqwbN-kfd`-7N zsn2TKhg-IUTus0I$<+b9cnfhearp@OwJvnw+Ee_=csP4(xS#`HUEoj7KlUd_-kWf{ zXdg24I{3-DHk`HgBpIOpwdct5eYo=u9AE31cIIb(ewY5%Hy0CrVoaH&D<-t&^NcW- zD16?6i`loO_D)QXN0I_bH+!MQox5W!al}xA57oaQwZEFH%3t%-lD;wf4^uZl8(#gj zjt$I18!nmnm09mQD)qV8@+;GBoZpxf`-A0fX|(58D*VMN^c%VnIy`I``i%~>HLqEK zek0noBY*fE?YVG{IiIV8exrJ!B{$rQ_G~!0Cx1N${l=LmJ@{)Q9Cy!4>Bjf{M$Y}m zcjY^Qv+{eXY15Ubyu!H->y>?Y?HCvv!dln#Yzv;b0&)x&%E;-G?tFe*A2R(W#2&gG zxXKm};Qznzb5dnD{>B___**k$K73B4bbW)+mi!I)VddXiDc9ozRM9^y(b49Pw=hn- zKUISd94ShDGK*CCm1<<0uK$;L`s3V%@s1zN>=LpqHU7-9qtFlAMpUywH!!aF((XNT z>W;p`Pq&vKJT;P4a`A~Hhgxb8c(Z3 zwynIH@qRRX>-l{*nU0+ z_8S~VI~O1PV6pbdxt~zXJSP2@^JIS=zG``?be#o}KUwCOLP?J?s%G$llypg#GB))K z`h+2t#Vn~gvaKIn#AdERpI}@5h*@Nvkouqfai29gj6T7G-eE7>A=`T?H(3AQ=zIT` zUSngekZoj_0#*`)Z13oCW}Av^mw(P<{`-+_Z1hF8c_!NMgrPZXct`XV`=2p(_#4`A zr>?izjT*G!`*uYvei(ArJok>}K1R-ZEk3amPmpuLqR(u@2;}U1tA-^t=8Z`?Qp;vG z&XGQKg6}Q{IX_%j!Rj6%=b{gfnae8VJa*U(=A?m~ecNTRvic1YhkxyPA^FVmem|7j z>rNK3izm=0l+|5j`&!GT_I;x{)V0U4TRP8UPkU!c?HLO$vMa$El6E_Jjy;P{m9%_K zHrp@;V>7XW8*{$oa`mk>y(<=Mj)ddH5gXoVok~ zn*jM>mG-&trITw0KeYCy>v)&2+<-9-Y1~W7-koufEn9f$^UX*m&@dP%vHQH*I$#HDo z3XBb^X6$9H%aCWp-dJ{Y1oBKvieW$D46^cmRJzBo57Ed|>w7foHWPXFJ{8SgPDER6 zc{G~&jN2#mU*Z|Xo?9Z@jBdNw#J}hh%+Bv*lUgF%YaYAVt|{n;hn2)I=b%XGvm5L7 zv;F?)D~Ll9OB9fEkYgHaFhvjaQR=tt4`;9ehzy;*2u4T=}*!-9CASp61DlRM98wo#ewN zA4I#|Gd6(jn1XEYuHM4td_uNk;zC)#9E>ZPnC@Z&A~2TgTfc`{-rFYK=Yl)&>{5T^ zJmSY;RwPHxeNB$BqY3CkhM1-@hu_Hg^}Ivu8{`I2^8EfJoE?ir&Q|$rS!+$S?bNcd z?D7cY-0EjP=6wt~pB&zlZMd*r`s}}c<6cYvvy`Jvy6+jv2700$UY^l~Ej*3fI{Y?e zZYs#F>V(PO+Ai&plaGICO$)+Db9=8&gQ6XVpp>vAa;iRB4BsnrvXUjqBaR`}wiow~@1AND#YZi+anEV74a_ z{dUsMKz8^xGGAWj&PFz#Px+KIi@l?0+mGf9WA3iVdD4` z%N1+?!+EEkEqhmv-&g&_0&)6HyiU%XC~+|4xmDit+OC0O-aXV~*ZYcP8ra`xb)fik zI_ggALdBj?D@WOXpHGY!se|{HUz;R)dZS*w@w8}LiaPW76|ry<+RXb!Rbqt$KI2{| z74~g3KKr(@daNJhNL60b?yNCW&qE#Xs5|=#xp0;32PX|;;~h~u?H8D-JL-WOCb5(S zs9)@!#}+j1uY0Awf^BI$hvKrzl}(w3*UU3>V|_N^-)-7wHA@(c_hb8F9(#Kp@A>$< zF>GZaaxnDm%N#~w{Or+S%tm`|lhX*bduZ%){^t7WmVg_nD%~dR&kNV?TU$Fq@XO#VSUD_rx z$j7MEzZ|2*_zkEZcTE&MVEsbbo_zI$7|?j`CUNq0ak>KA&t88b_PCC^Z~JnwS7ZC- zx8KAEjeb?Drz%VKz&<@&X|Y9ijs5-gnLgwhQ(oV3su6RzhtG00(U>)fMt$AHgn3z^ z&Pg(6ws~kLaS=wWz6I(BA<_OmV#2R5DwO3gkho}c0)wQpGz zDdySz*FP`bZp#WAd?2NMAycgem%3Mi6Ka7!h0W8Wx74My!3^*|8-xn7kFQ>NWg9B4e>;d$+*;`KM=GspL?qU0y) z_4J9N!z5RI}%|g0ej=JW@BB|AW)Nh;TNnig$9oglkw9|ZKyJgQW>ESJ?i{sl7 zr$E%pG<8T)5&GBVwIzC1$T>{@RC+%Ic^ZXEq)i_n=Yuv6if+9{{dYV++j&_`aK$-8 z{bLjH+aT0s&MKjw8IJqW^^*m!aX7xOZ4h{e1iTlTzN1xUkC1;z8xN^sChGXYYU#U= z$Ui&VkYwyYJt}w_8Q_ZgMra~geh!)EXl)?V-yrAl>kG-!O5|)k?kFjvdy1;#XF=3e zGN0~4uGUktYKikI?7PRUCSd4;efN#f0^14ryPjFs3F7HqkgA~ZBfrTRY6W?;=RbxtRqvkP?sLogu645 z|DXrDFk~w7?_FRBo2rm`yEmqgPyYw4=A-?@0S?c?zL&q40TUX(d-~Gg2RVnZk9Rd= zprsq?m`!w_g~oU1+Epr{M?2)N;Wih1==Y=QHl5>!!7Ew^L#@vjXu={}b?nu9Y29Kxw$%24wEbE%}ix4`ww&EbjUdIGLr!t?UT zC<*fa99uzxha&$i;a^Dl1myqiXFJ%Li2U_-^@b&l`vcr`Fo&W0FwWn+8V${&k@Kky zGhlrajO_?le;8qfoZoj&fWB!M&*z_~!tc(=p^y10wtu|3U+Mifz#+Ovh+0oh*#^_D zAqRoh-TLziIe174VGY~+lkS1O>m&?VkNkU87Qi3+e^m9c(~~S=+hpWvd^AY9K^M=Z zon^~=w?*dtwsNYK^#9;$|DkhcN?WI5`*_Ja&EfvCYi7sIos%Iz=RCs{Gmrz;I|>?dEbp;%4y`x zU$TRlr!lrCZ=3;v>yWcgL=X&aTzAYdNrH!77|&Hk=}@G=ym6>|Hr&j|{tkG*9gIg~ ze`T}tp)3{Ij?Fy=-6OH@uZ&Ma&?@ZvL$MSp^0DuFRac?kMdbN3|0XQE9K-tlJLfJ0 z7DY3?w&hWn)*F4A<(3oEXUP1Z#YQ2!@mufuX|n`JQ?xJtJYQniINvyua-?W<9Ul94 zJa2vq!ij^(Hg?n`>8ns=+xa_3HpU=ZH~k#qeht}98(c|Lp~&`Rc2h8MZOkD?Jz(z~ zWZN;`5=JgVwgLQPaL-4!U;oJ9EUj;%j)9NTMCfUXF+B0fTl@xp762%x-k96<4+ywV%8OP8`Q}j!%h$Q*yj_yJ98e+zY&?&E6g3t*4+q73R!m z7@$v&t6ox@MR-r&S#K%Ymh~^^6*gD-ic;j3U+_k1xEr|*tx6`@zQ}ET!dbF@E^?Dy z`$LYVAU6w70}v~a+v*H!SZs+pVY?g63CM75VFcuU!aUH9?w4c#8Dq8kl5BY4jX8lo zkOx%UTY6};{t&t_58khd6FX+(a2>blh!t#GiuzKPJD4=Cf43&bLCi$7-?hyEx4X#jTI(&q zf56}V`qu@}dm3J|T^QZtssdv*$l)%O1tHHJQ|n-|FLKy^>kmwR6U?r2)A3f^om=>< zrrFqzT-%eVjgq=^zw%MXS@z+~8uf!-1G#ob(EfFo31?o6`bFt5&aeu#=-7|Datoic zJ=uL33cuq0on=@;CdT4*x@E25Tc`>J~4PbGiWTkUB~?Pp;;Den2+Z=BJ73xwP^2Tp@IRI@t$hlt$^CA z7^@f0*1&~Df$W-pIsJspImpm;Rx7UOV_#+u>a4@<|K!7T-%Nc@&k^lYOANUVMW|=Q znQ#sxWz1(nq9r$7MBRItgtMC}XZE{8?6|jIP@fY=bKV7bu0fU@r&o;3%jh@O*0ZpW zZ}`qI?IDg4H{YA^8uXn;HQTwzjrl>1<8R8ra-SVj_Ty zk3F&Lbuw(dg6a0f&A>1?kZIlEejttsVS0@7XdoNHz>@kGkC8)EW(3p2>r!BK-zcW@ zs@B7iJk)`$_QC0=kzhgn4L_=2*@$qawck}h6M9e8_Tq%+Fu+N{^cvCtYmfOb{j$0_ z*Z;+QFsDBMUDxJfcB2kn(3NXz?#=9FrM)=&64ZgK25^%+e3*U3)}dT-Q(qWPk4-&l z!Py@{eKE+2ON)~+yOo86EA^1WFzRDpZpGEqE5MBE4~JTDS5w1b2-RAf27>Mk`b{L& z#=&=0ud|SI&V@dF1APxp&3tB7OI0j=pI@y9)?YpKRqtQUZ?AnMwJL8IN!yV*SCAc= zeoVJoSx3yT1v0%YydC{+Glc0OvH_6xEsW^{&Fta!`v|7TWzVJW!ACLO@mxGCu~ahM zZB#mZ--mWDVH1p=g#PY!2SE2pF!RyN5MW`lAB>{cFm%dQ7?R`5w0GObP#EdWbi3hi zVbP=cY(MZpZ-0Vno;TC!E1Gi?KYD{TJ@%`O7FV{^hiNl+9q#i`U$CL}8~eI)235YS zZdYKnKCN3MV|%tAkMGHaB+G$NpXm>Ka6aw*0I1%ur4~L#hBKeFM!H~ZLcejR_I0*% zR14DRK1o!E*Bn(jFHKsF--rRpYOP8gGH_nYiCsL6>>&} zobSE8P7ce0nB8RIJ2GuhDANHyTf;}6aMpL5MLoe_LL}2;WEODcQ55U@t05DhELX|& z+;v`1Wv^s??`#+rgJtPhF@KMSbxvx zpN6x>-i%3-+hw@2!kg958EJ9{&UN!)``af4KZX5yK43@tJN;=L=#BAZwa@YlzJmWd zUvQ-MLwkS2-F-3`OLg8I4Ne&^hY3`B>1%K;XwILc_Ngw0XTQSOe)tJNn!sn#I*Qbu zqgW&nUFjN~>ciYOn|nqH;6imt#dw?G_VKKSnuY%$>1WFraHIDB$GL|gB-Q&eh8n{z zllc4oOvl!oB9o`my>`|9RVAe5+fb%E+1w*W?IRdNos`cc_daqf8QKP#dMX*W78ms3 z+2Cl#YKf^atoW#8teO-MNHC9LtTGQxg;A@+Sp2kdmxHDxka4?1>lDh$PsoZQwz#3^saEx*@hxLNJZxRvbP4IVx|j9bc$gW&kahjIH8e*!MV`Z8{lC(%0C zIx@yB|J8ZudQ!&rY(IAR65YE(&Y0w!y9Ccw3RYt-c-3ZTPM_6#(epZPdP7p^9`FjP zI~tCVX3_6df~Y?8{i8(v4r4gg58j$u7dytW8dA~ImP!1^$3QH#|IK+sUmM^r${E}1 zH!hKMuRzAL%wPxUn;F9NzOo$R^Cyh4z3j1_ock8RVp7AtfOOv*#n^6KRZMK?es1d8 zE1RF+CZ5lu8P78l-jTt@(TwK}H%)juNy!-A_Rs-aod~d}{;7BRz|QYMjNz@CVQ_M+ zA7fabXbZ0T7<&e?DYRaw5339CMKTxcLw#T(J=X9>AZXP1u-bf{o#SD|TwfMrIjzMpJzyGQd7ORdpRHL6T|BF z{mnV^r3)+_gfV>M@)hDV9%ER!E1h^*AloO=ek4_aY&|ZzlPmp^?ZTrT#QZSE>ZO?q z(t|!DQ|Gs8n*~JoQVfevd7tIv;*l5@lec$nAm&NYjAu&tKGL}`62?&f7YBJF)eL3d zKaP8FjU*TZu$a8lyq1U?g=(Y|N=limltnXt0tvkqI z7Hv~+-TFPQ$P{g48~*gC-Xk4$kjDXX2%+aSHY_00m2{p&bxKkZxqnE`>Ps%sKSONg z3RYjTc)>>Ek{-_iS@(<<*m%a}PXN0+Tj=>z#e|8kh51S9%mL8xvRzi>ce!81f zJ}HK=buMTqIv*Cx;&xuEp1fxWt=~(1>;fYB8v0C9&DQczHeb>%p0V{d&F4J~Yr4t}gQ*}9+W z`RkSnm`Ck}Ny+?kM+L~#KE#zziBPaQlH;=s_^&YvmOnpam8iPXSdF7Tc2-?gE<^#z zR4=VvWz*0>!SaCC6bnf=y5D;iwRf#bQkk>~hCNiz{JEd+KPrl`t(eze2r-VK`&HAL z5#_OhLaBsjRA>IDA%>5PfI6yOGFFLEj#2QP>c2TZdY%o>{K8lsUV7vM$+wSWdHBu2 z8DuG)o2lnT`uj4Zb2nq|eS7MZ%JU}Xhc(8>c+Y3CEGNh}X$z9dIL0=k*+{`uiEKxz z+ytGZcow&k;xM6(k7I1-TwE+{??m4jrtNP!o*@u(C63YK)(e*)oc;E=7Dn)4kd0u@`;wgbdLSf~hWFlqV2sSI6qk%)LUBLw+n)Enn;w zuFdv?RBGRHa;IQjr+}4Ik6yoB7@<(GI+FczwhBgD{a8*AH{}ZB+Xcf(>QkoJA{4qu zz%{DnU-E@jv!ZAnZ(5V?%5C8reRk78b?s-V*wQW(H2=`Nkx?ps92N#TRR7KSt9CJz zu2eA2b2aqg=*s{W!zB|}kd|YD8Rt69lhUy6p)7`@259m{xnV4Zt@r)lBU|8D*8hm3 zP&g@)jbAS<5`}V?C^lx5rEL`MmPfIi;PGF9@G2vU#cf4MiLfgwlI4LHXKx9bp2+s* zlNW+xKnP>oboN&vJ2jAvQ{vX9;-7kC`zxT87~!vAY>gh#y6_GP#I+v-+p^3iQRRC85xc@*Hz2Tr{>1g6>o|KlM(O(mXui ze>fXhHh}r0d5rVO2a~~T7tZ-Zc3vXCd*D2F?PgQbprv4(Ydm*KDl7e19`>jf_!&_F zY+TbI65-;fKsK)VHA@kS9D`X5_qw)Q$n6%wV)(Y+IpHN2!sb*-AF70P2ZC8n=y$@CS-FhGZHwD>V%P;4W1G^#L39|SU^(IU2wSndM*yqKSv131 zB!0+NbFP^<&LxcHgjTkL#256r-w)b;5oau}yA%rTDZ>xXIq~)DAXWn**k>I84A)|1XH?a>|}av?O}zml z!VGGEl6X<53J+!Z)-bn5h_nx3Y^RoLi2Y)MSWfWc+l$Mq0$AL-wJ{L6ef}(NVfG-= zq=`R^+l%HF;>))FZ2YQgE)hq+2!wUC{T6h%DwT%84yrAAPMne+0f(v1H3U&IAqvh> z9a>;5DiW1&m+E%$mf{l^CA^`!Y0xmSuB<>V_H?I6Mv*J!r}-z1W| zVT`l8Qy>{~Ih^GR+5BqhjvWy=H}l;k`5F+(#<-e?;n| zoZ3k=xJKteR15OX;^Kn~po;3;`cCwF*jRW^b!Vb0*4|fw2Ib>=r-Nt}5W(0UEzlO< zp9o=fkxp&Y7B^f)w)1^EiRDFd;HZC(kO|^cFK?Jc^}V|}qV0@%G&ifCgQ)-Td5B{B z5?Dg_7PF$~iWu~rj7&;kIk~!eHHphfV7Ve>yd^mjlfYuQx%`eaHZg(4u(pSXbjpeZ zmWSuBo+6PJCb0Yv_^UwW`YeIX88RQb@%r@nfO<|Fw{tK5Yy(~6Qr%|pbKb>>)_I_M zZ-b6-FKGBDz(cByzU&tAHpH?z$eyh?3r?qT zZZI+^L(r9lLmSE}?MsAUZyN$V)Z8Y4F!Ol;t9i8Y=x4riih|XRT5Qyl-xTk|YU>Pq zwu|pGr0JSqyin>?EyvmdwUDE35w`Yf6*Z{9)|ej*{5?WR`ogQ_PB5(QowB>xJ5r zzAEMTWR`EslCP;w(D(P$YXoCIJzi;-#MY|A#qoS9eUCyt?;38VF{|5vF_j9blj zDWd!OQ{89fUVb`V^X{VBx#Jl=x+b3GgkGEO^S_tH!&zz{Vph#B-x>!usP@!6#}`+{ zu(2%1DUMe;Dd97 Date: Sat, 2 Jun 2018 19:30:46 +0200 Subject: [PATCH 43/85] Added Panasonic DC-G9 to camconst.json --- rtengine/camconst.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index 405c5680a..d2c8f8ae5 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1642,6 +1642,19 @@ Camera constants: and we define here the needed offset of around 15. The total BL is base+offset */ + { // Quality C, proper ISO 100-125-160 samples missing, pixelshift files have no black offset etc. #4574 + "make_model": [ "Panasonic DC-G9" ], + "dcraw_matrix": [ 7685, -2375, -634, -3687, 11700, 2249, -748, 1546, 5111 ], // Adobe DNG Converter 10.3 ColorMatrix2 + "ranges": { + "black": 15, // 15 is BL offset. dcraw/RT reads the base black from Exif and calculates total BL = BLbase+BLoffset + "white": [ + { "iso": 100, "levels": 3000 }, // gaussian 3100-3600 Exif_linearitylimit 2111 + { "iso": 125, "levels": 3500 }, // guessed + { "iso": [ 160, 200, 250, 320, 400,500, 640, 800, 1000, 1250, 1600, 2000, 2500, 3200, 4000, 5000, 6400, 12800, 25600 ], "levels": 4080 } // nominal 4095 + ] + } + }, + { // Quality B, CameraPhone, some samples are missing but has the same sensor as FZ1000 .. "make_model": [ "Panasonic DMC-CM1", "Panasonic DMC-CM10" ], "dcraw_matrix": [ 8770,-3194,-820,-2871,11281,1803,-513,1552,4434 ], // dcp_v8.7 d65 From 8b2354646d481e30f90689d22fefcf287be195fb Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Sat, 2 Jun 2018 20:36:18 +0200 Subject: [PATCH 44/85] Added Panasonic DC-GX9 dual-illuminant DCP --- rtdata/dcpprofiles/Panasonic DC-GX9.dcp | Bin 0 -> 1102966 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 rtdata/dcpprofiles/Panasonic DC-GX9.dcp diff --git a/rtdata/dcpprofiles/Panasonic DC-GX9.dcp b/rtdata/dcpprofiles/Panasonic DC-GX9.dcp new file mode 100644 index 0000000000000000000000000000000000000000..7b8414e970bfbe03936ec428e7fcc5bfb46cec36 GIT binary patch literal 1102966 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 z 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%0D7Y3!K3OegXJ;F<>P4@RT8)*f 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�MDa!GtHrO!@FHD;vV5E)5P80DeH{U&#X z*>ZBnUQkP@>b~fAAQ&{%L7jQ`gh!k|BB(cYLidVj(%J`GmQs_ge2X|izM$R_YLITf zCAVgM8&8gI?emR|zQ6QCbFRt%jdQJkj*FtQ0zCMhj8~)DD)Y0q!}SL-=TCkJH_O$C z;JzL?;<{MWV=<=wrhj^gR+Mfizyvuuh9RF5&aDt`t1}=m z=lFeJDl)dG;WdALPW{EAH95r-m~-YWSttg+qW94kYA(4h6f>Tai}^7b$paRN6}(3_ zdPhFv{l#KXEn*&-)6Tdr69K>Caf11$-J0cMcAt1e+#^

1tsX7Y7U0=Ppw=h?&IF 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%0AQ9-P4G4-7E?VA@d(gbv|kfrv0 zs2S*xfatRQ(j$F$ETLXmSVfMs`jQJ8=O)6)jrtpXow4CPJ<#XPl8#((!YwoMDBjpg zvEN-_kU`Gd<2F*~LLanY-<1C=NYVwxpHP7Y2Htbo{Y2A zz~}PATS4$+oV#4xD<9(>=fgNp8=Nlhj!lIf<2<{|EO|vV{f8N6tLLNSroVa5^9)zN z)I**_Ea&A&)(m}3W$TCpWV2?gIjfHB`YaxSyzeT?e@F+28ICnVDp4PGsXq*TN=%sou9qv zS@UF@)X*W|Kfg1j`6lT)_iL_fCsz4sjigfhz~oB;-nCdRZEwZh_oWFyLAoSUSK&cc z0=>`XNZq~MaiLx!erqD6@l#zfnEOZdp1Mj`FF8Z6rA`ZH zVXqVS=4RPT76sHY<$3P?bF_4*gAefo)?)_4CCyhaH069G$q3S4@&Oi7JL~)vYpIo+ zJLKU!AN2-Hp95U6&Mpa>@PSe<<`8}ER$Q##Pg-=;8LrFtPHpWh-70rQTXOivjH@Np zuHg&I(0{SA`C?pnEEdow>woj}FUK8n&xLM?U=O=vZ7+F+r5Dab5xYx$Cz-J>y6=_@ z#~lZx%FEQNE+)rs_+lw9hPb63`OHuKr8a#M(S_LilrO`j<)`A2$!F_#ouzB6(-zd? z%%xic$@`rKwsnY&bp9oVZTQzGjXj-kTTED?fukvB1Vcoz=LrqancR%^+r(gU0LF6u zvhd>y(Q;KRyqN>dDi(|REu-;VpL53a4Dk-N=vZFey@1m+Yfhd@cu46Bz_*_gL%LBy$;rj?@PSs%NCDOlTV9&ji|9aIUci5-4+w8 zQR`rTJm$6eCg#6)fmsG|=F@eg>fy}Q7pNP2yM^S?+Zk$Wa`F?~NafbVrJM6Tb@?kA zt9($aCF`Fxq@-~ z_dESiGajb=^WKMl+r;{F555Oyi^;LJ8K!Z_;GAWXU6E}~lQ@|34h{GIU^}>19DYtD z?iXq#Okm!a#pf#}^@LOFVsMBU%d49DLdL2{)O*8Syz-N_*$e1N+CCY{qnvD`+N<%s zX%a@HHnIr}nZ)DiRC=CBR{8c zkOkzMo`}NSZo*nC`m!C3hxNP*wvDJi(^-r|bnA6C_eXnSj71#u#>%>!H|}`E z9`)AySn=0&aZVnmL3VcI%7UAl%^{I=*?2q+_l{ytIQw?C zuqiDLeVejoHeDfHJETEu6Xs`en=sW{KL>T{RGyB+cTCG?2oo>4mg{zlGs z1*xHi_#`>cUtS7Pp0TLMdoU^ZjZlAcH0IW2ZCU-XAU}?P3G3L6jn4`bt?6gtl|-Cs zw=idj8aIA%ck=K&VSm{y99R^Owv7e~*Nc1+J3S8Dw`AI0VC@mNP=kvrvvfyXJTTCT zILq=mqS;MX)Q{01ZT4p|nD^kK4smGlxvw;_x-&wIS$BH4N*(sNAdB_(yQC4)+i|Sx zE)bhqe^=1=kAVM(s`c~7B|CN7YX@U-1^4FG-`0jFs?mHi{ku(HSTEv^SRiv?Lizz) z!)Mg6tVTZJmZrjoPs~X?lbugl2?ytpH_bX{*K&8EZ~%SE7`Gmq=+!lr^*+y=>-Uv{ z+aC=%uB@|f?i8Gf#knxY-kvE6U+KBgo!{O0q|3s`VcZQdOu>f9FNG)F8Rtgq?VtY@ z{*H{L$1mf2%Mg*xV)23hZq{lO9Df^)gALisJTyiyYt;hI4QH&;$LAAasI@Z*ZD%|Y z#{CU~jV*KamLtM&dRR=_OAnWivxWAx{Ncg5NkR2*wnraRLw*!@gk1b|sUJL0awrzc zgC*kXQEqsrn`$4Lg>W*@+dCEEZDZjp?y%5Y@VDhfrZg;j>lNy8|o|7+$CvBJP zOF;5Z^7o!~7V<8WFUdSG*Ljlgw?Aj&JcrZrHNui>+=u4xZfl$+G`~e1T*h&dZsZKoSka3!iROKAN30KZ`x+YB;Y9fuVSY` z!tg@!8O>QkmU;`}&#CLfdaq~h0-+l}(}_9!YrRcE1igKJan9IFC>DPHjKxmor8C1X z3SH@g8KUD}gXL=>aa_!QJd;n&^>O-6G%oS}oj$$+a`r`I9p|mB$G3w4d6(_Tf!Xu7 z7yKSY;{juSN&?pNK5xadJ^a#mgw%_nt^&D{#3YQ*L}M~>zpydn%-ZnpWUpG7Oueze z^lW6zV}8xV-R%*$!kVzNB;ClxfgCUipDVhzpLsG#eRAV z=I~umBB#J+Rx}Rr-}Nf-!T#829A^%%V;G4yQ=&0(CVBovg8=qpja&Lk!PJaBSdf6m4c15Ni?2bI3%>8m)6by4}YGZ6zC39 z56`NU?~z}rHg>ogp0kNRKU!!rs9O-??WxQ;Iupmt)V;I8kFc`L}@IAbliRCvMBi+z6TAaRU=J0|F2@pe=TskpWao{f%$UGY4r zG}sAJRt%OsJ|=bZafU}gG*UbyDUy8A-_$^M+qPBkdJ={$B~|AsdQFOShRjP1N~puI z@TAs>nj}v&$*8njW)p1^glK`g{0YBo{duqE-%bYXrwcahgNL^!NA&PqVJ$hvq5*5* z4x0t73o%`u;nwSPg2el-XgO=k5x0fH#2DP0NlvxP524S5Xylrc$6i?%ahXvlszp7A zY3*R%GYZXkPF!d7N5dvj$mV>cxS<`!*QOUPd+MLbGjNO)Wb`W=k|o8`9EuDVnEA_f!k!o-V%T+y^s4Bl0?l^i}fA;B&NbAHU1`n+<) z@tV|+eQ-=V8SRX1-I>>lOQfa2UT7&rAm-*OL3cY07rIo9^SsMPbxWR-KPhrXZ(Xi6 zH)p*O#(vN!%f|JS`aj&D#gV_ZmD}U-m^tmwYe!)zf2(e+E9wnhAWS}zh}+B+QsP#j zO*QgyjwK`Oks|!ek42N`KK&VChX9r_zf211nFGS(-EBd!e4H4OzXYvHG)Pv^e zNi8nJBT0~V*x(;2@;@!78YWZmsyq^(z7b~_?T3wwb6w`iA6v*dsuzy4uH=8N_D93^ zAuu4GpO7*UJNr|+gBUW5dm=U3AMryqxbe6?)YW}qyfy|OGu{fF=*uvWcfh>5MS|4c z3msQS1LeJhdc8g1tVAQ~-d~;B8dtRc9F1>d^`tjrozby(3OQ>`8J|BNFKeGRCI4hr zGS-eyw=ub!U6^~Yi;ds!4T4Y~h(9JRg zp7n{ta=!g2O@)pF;>n>Ih8<=8XwI3PTY(w;NBd%Z*BC_S*Fhe=if)=kBWcNF;rwtf z+^Wf+Z|pMRxUUCN$k7=`jpZ2D&$X$^cJOq*cqh#nZ{%ps<3~zCzD`)QF&amQt&@sw zIb$3>Iu|@VBnjN?{ex$IJ9&C!Y0(eg#&W6A-|8 z>_6jGNH`D&_puW(`H(+ulDl%Vpda@pebJluWxbeI7)fu$j$TpdwZecp6wJxiQ5ad{ zqOdHLeM&5SV>=8HKKyir|F$SJpY%#MXQMNg&|}Db!cQ?W+zI>mnd5VVB>4(;E(b>9 zQde?jZg|1BLm1>G8o_rpwe;^1zxeOJf3XMVSlctYu}6b2;7~GrqCaZ~yiq|njkxHj z(KgknagoUT#D3ay+Z>~KDErwP-nA1h@$PNG`t8Q9B;h78-SKBw_nuoT3?etCjXQS= z4iyOk>xy14lCVAEx?rS@Lf=GUPZmFg*@qe1&Pm97-hkYtNR0iEh;mB{EH{gU@E{Rk z5yNqOTqM$dB+~!D9q(pFqG31s$1R9Ld-n)@U~j*dy`opwFf_s-TWTjzwDZ6mO)*;jE&A$8`d zKmSkQOi3~EM#Au5&i=E6L8GYIsI96)_0hRPC(Q}MGsbYl?3%jN5*3cH#?YkKu-O(# zeWA}u_^|7e?K3B8!sQXG89!J!NPK7(`?xkc0)_oCiTK01_x0~3LW?c*oUvg}w%a8% zbB^WCQ4$`Dr-d`TXPym7qPF#G;nz&&!bjBgT44y418WcB!`qg%gPla*Bw_^(Mq447 zeM(AxBC?lEg_#@!RT;Up$^IzKkA{{U<`~X6-%N; zgeg5^VN@{&3A+Mt|6~;I^tZ&+Mby=N9)VredZ8Qri;D`wam=(g8h!A?2%B(ZZ|RD? zQ~i(@6^5>p+9Un24?YHj!YaBxjO@K&Iz0qww=N6K@`>pw+%4>Q#&)o)8+vpnPyJM} z&FQ`_nDAMR{#OnO$(yOs-KT1tL%WyjY)-1thOs(S(L@(beW%Zpi2H?E9O+c`*V;mjDJOHLe2SeucPB}|$Yi@Utn zTqa})!{|}4kG1`}CEJ99pg$7hTyL}@jIxM^$rjF|Z5|3X>CsrTFcC|S>*31K7`)oZ zbDq=`1t!#4W0#S*3&o3Oi=c17A8^C zGvSgkB9;a~{2Yqk$MkT+DiBf-y=jfV3ZI4t!uKMz;Y5Ah-yDF?Jp$3Sep>|BrebGN z0BW}DZu5kCGEKNc`@eak?YmRDj|eYcw$q14OzG^4)l zA!>;&+rW6fTxolp_hI`=^68hHuLuySbxq&pEnc?o5W&x0q?ax zJ%p77(a5vqv!lImM?V^GZzrP9m0)4Ot0=7Je$An7=|ZhhtdC+7QT^CvVY+?{9?mBw zweqOY_hJkhAEURj?`7f65c-+Fr3TmPr@}qvrKdZoUuXYbSe6*|pMTlO)DOZu@@I+` z(z7h^x!_bvEvcRKcYAPMcz9L~!-cFFrj!f1$AOq9MZuuj3E@Hw?p4`GqSNyd!M0H# zto{k-jP;Z-{{ekbs4d?yLlOKcR2cRkn40RxggeC9eiy3Ht7&W0ZmgnDV<37@$Ux3E zY9UtpSDR0;Iesb;4i#1P7~gLz*FD(dkL+!%liLfr!C(C_Zy?Y1{R-`MdZ?``qekwN zTGq?Xut%_?PTjyGHc$VM$H%(jn0_7GFSDqDZJmsdhX>l0S486&YXkR6Z(G&=NbX@J z;cCZ4wl7)l*l$XN-Gi;Rm(PU5t!pBrYR7Ho9}h=Ya!$H>Jhe6LL!BjZ5%x{5CH$@# ziTmVBxOHwN82^Yw#`*+oFYGJi%2804Bv3nggfN<#VV659|BFVh5q} zK^U^h|LAkxUdWghf(P|9&h(kuqP-z^1?9`vo|9<1@2LBhzAK$vul#P3;_ z!pN_Iu-Fj}6IV;25qE+zSJGd$&T!#6^JhzH(rp}gRJg5DVZ&2uL>G~-R5=UIEmcsT z*@LW;#9)1>5ozFIJsyJsG;k##uJ8f zlVJXEul7(Vwa6Ir5j*B+2Yio0bVFh?YrM1*mq#FRWfIzl*=aS#VdSVMqSvEA+UeAV zYd$IwL-uvkb~_wIeewiE26xnsZV?3EzvSG!XrukaKBzQ?y-itbZCp$ca_dk#_d;83 z{-|JRlsJq(-BG)aHQONeYh^bqw4Lc+92rJ#)6kyU4d+5|o4vjLukPCGvB9v>*P!rB zC++fBHST7|U}>-B+LT(<=`Dmu**X5yxs8Cq$5+QJjmV$zq-Iv@hsPe%AIEet z^$j=F&{lH((ykx~4ufrunVj;+!jmd=H9TWGi2JZ9)dFD`yZ~jnE~yyJP9!By7B2 zQ`gbl9le5*@H)*<=j}!vzcuU&Qo8H*2SgzFCbbYp+Unl*2!rLcBw|Dky5!-0`U&+DVovQmn4Z51dM>gj!(-~Y1#I@DjpWMDxH}p&(_Ee`Qg7q<7d`}g2 z&E_oQ@>SiH?<(9U-utZhvu^NXHNKLQ*W`kM_;eNhLNhfuG^L?3R`r;jZB^GZr;I6edR;T)- zk?m5%w56tTls`U{o5egx#LQpy(|z|}hJ95L<-bOEJ#(!4xT2STr@V*K} z{QgYND!iz{8-Ub(B{2W(hd{M2PWKG5F^Pyr#xmC`abA+SUAHgS13fdiUo*a&?(KYc z>^7iY?#;j2p<~@~I)OX6q4c9?tirc)Z!UMA?lUx=P7&lw{MR{~*g5s&$1zTy$? z@nz@5;lYL3;*;Y%Q#Nr3PF*3M=iI^Zz6Lkd+r^D-gHVgw+8x#viO&|(o35P(U2B(# z6R4}1c81>EyY7pTZ>eLsJQjl+{S=>Dg1r@cjdtRAFf|w_lY4#N%Vxm?`Y5Vgs>J!>z16zbCp;iz60b{WqjSu0 z$2I2X?oYmJ_j|g-i~0HN3ym&olZrb5NvQwolJ4ZD2<#)TyPMk&U9X@ptn_9NQq(|n zuN8u>ylc1Y>nyIQPrvKdiHPh2@r6RI{z&HMC61z@u?iP1aUW-2jA+5LZG(7NnrDc; z+Nj{D{*4cp-nb&fha04--c-f1c@<2vcu2@zw(s-m`vizmy=}WPUjQoU{AAnW8Oq+4HB7vpptP ze9S%HvWs!>ds!?l%u?Z*3pu-y72;B3&aYq5gGu{T6e84!iPGR#+;7qQyPBGx8khzf zOLvY3;mdB$x>~fBKJh%CRmEar^WM_yG1OY`5sM?GBc(wX!r*l~2Km`8(nY%nOtz1K zeqx{$z}ou(vG1HpAL(wJ2&^M+HU0$4p>v^lKQRJRT0a#ndI!P0O*le~3avg&3&2Ia zFx-!C2#X{?)MFj;vfX@~tR8?NtNifY+Qz1lR)di1PF3Pu`*Nht{-Xz0E+-b+s)p{e zuv))({D^9MiM&mWqyEe@bQ*3#j$)hkd-XwPVLrrXQ>{^d4 z6l=9sVdL{Sl+HLS2F0ro7959T*B^_uudC4Niv~ZA{uE8ghY!3!7A@IHs>wq8{k(p&MijF(B1g!fy*nY=iL6S zcF9?H9BIw@Me%j*{#DEy8;R}o-KYzBq{0bZ66`O`AMUL<@~toTCcDXV!IttIrqfc2vV`cLEFy)`)J7{COKBz_9yXQIG!ez2=ZV zns{7X*p@!4zv+!W@wT|#pE)Fze2z7r#q2{Wywi)rSBIL?gy$+OV%~_GUsu}B`nIMv z7AM9ukPL1G;?^DJyX0$*jl)=(PHx z*8RFWtU3}$@-EX>Zgq#{jwCcU-mYu%m0I+~iU+D&h>`Ci$p5A9mGNM481vpe4YAEJ zj$&bG2(^XC{j-c0=PnFF>Qwe4L78G#=2%-@0<4_2h&N+YSlu}RDI<%-A!aIgujL-o zfb(L1bKbK}xO3|8O!RS5L9>c{=+A$|%j;Aa*@V8abq%FiY85JjHE283L~QHUbHZf+Rr_?;EU(!cD| z{1EJ$St`!3^TCCCK{$MFzj&7W!W*}#5&0-obfmYA55L!?(KB^(&M=;bRk*emLfam0 zIJkp#wf`Hz=QcftECbQ^PAAwk@k8C2zNj^8yY&summSTk###E@Qs+bNQ`>dP7_y~M z+y9|EhFWkAa_gA3_CfL|nUgD(T{`R9)buV-f)jmV9IHj51NoDUJ`NGvaCY!3nLT5X zm-uH<2zjiD*xPiDct4LCw#0ny>{=-v_E+O7`@VStc8XTn+-J9?*Vr;qoMfZIql5Iz z(_IyB_F>-U4s|2FccRLfcP@Lnqyc);O4jYg?c(sr$WY3Z0`b|E`%q5|rOTQC=uM7= z3D51-NPpbE9}Q*O6H)zvUbys6adascH?TJLGbHc7zbtx~(F=vMzzuqeI5WW;V<&~+ z%J7q7pDW&IMc!EEz+y46r8iPb)mT!rL~LvCNzHvVCMGu)Q(C)YD>?eXUrlVA?R152 zEzUwtrU-Tm+@M;{I(7AR;rbU}G#7obPCdvvV|Wav*jJ77i{M|{pUpi{z&^Uu#5LM2 zFWvE(bD|S{_Go7^SFbt7T0*r~m(72t@Dlr!*B!+(to^4E$Ez`96g^luqoH2Y_j&>1 z>uvPzt43X|P2wAm;@4?CnX6BiCIM~t=@#?5^<{6epq;sxL_A>o_awY&W+%qiqDN&0xxuk& zvAYt2nMT~>JF-B0^(+Y8QrM^HuNSp@*$cBbY}#SJC@{}YqECe1oKkV7MukDFJuZ0O z5&JW?AN=Ttb?~DYX{o}wyX+0S{ua+npdLQY^X}?D#pva;kl$K^x$~ci*_FQddo%_u zDoVuVf4q?YCkp+q<%yeyc_MRIBwP=y7iYisz~=>=ZzXRNm*4Y*$LmmppDz~YzW0Kq zCInMkof6yE_r?|C*CR{MiKTVDuxwNi#>JJ3O*?pCA$x!U^(ApleK)+S7X-H-Tf~%0 zE--pdt?FLBqFyaG+)Ys7_R8(L^%8xAxj)c=e)N8CIA^b{8s{cER9ZJfPgv!0K5W)W zD?N3`oI&KEn)qo&<_(c?ezPk>_iitHjmz{PFf$YlBIz~vlDlJ0=AvdeeGp=k(Eajo z@!1pV@RQ5;=dhPp@llPlj`T*En<{?aOdawQ33w5dC2o)dv8yL}-BDY`*~A!w))Cjf zTqLe&8VDcG5*Cz{i64FjU}ZFW!*5r`!2@`P$raOlxGF~M_ebtw))fm*iso*<$oGwb zZO0wr<3-fW(M93F!A$YMB@gOPL=xXi6Bk5!z}+Jpk>3`H4pTi5r45DIh#b+y&kOH{ zgka>PgJM&1`(L~Xg8%qa;=T=@)ZS6U#pSNp@whvTvemf#=%d*6xGN6k6HChZDNbGI zg3fEzxHj>Pc;X5@m&T|tyunVf&jNag6W1=cUt)9iH~l=HRgJTWX3w!Q#`y>1e9>v^ zG1q7A7;8yxfM*Ns(gW^DI7tn+ZXUWF8&!D4IM=ejtsCzafg`Lp*43{mp80pK!8m6Z zwi36I8`6ciWzvEHV&{u$oSKn{wwV(}+e8(8n^|LA3lu-B4n$>FYP0;FBbqh~MER^9367oYXV`4Y|#`fe4gt@Xul z&e0!<>EilQFQnXw!UVe@QGQ2VM0z`xZJ8nFg?L~Dwf~0I^$<_@_k=I=hO60ZaVqHP z78rt;UDt}{^!jW~9%pIWW1@zfbBESJoJ~9vZ>^x8+CFlI4j4;5OF1hnP~+Y3j`ZYp zf%|$j`mXFI#mBjVoeLg+HkMA(W5{g2AL9BohNUqT?}!jn;&#v zS%>DnCT_pNNK8AR=3Yo5CLC%j%Bgez#rJN&QVVu1`MCkesh`{FOjw3JcCj_a57) z+e%EP%`5gPd1X3*vqhgNzIJxhKCvry#f_71iZhqPdCXt5G9;3EpJ<@+qO0UHx{r5 zpMF>8;2nTrM0i1p@k z$A05eT{C*`mYGMRjjyE3>dU>J)JP0^xJ`!%9{6>ip0G=|>WmpfAJBW(>!wbg;E4uD z={s_-tC(rwNxx`%S9*q_b|ia*QpQ>NU7)q6C&J!m>;Ze-(H36}MJ)S4 z_kMc1{hq-HdrqHvw`RKIPTWbHn1~}sdg#u7r!Ugs1oU?ssavZbi11bkh$(l|MX`6= zPhEu*bK`UoRspd45QmG#i*=^f0f=(vesVyz?!c#6cvz&t*&Q2nH$M2I@7-9m&&k$l z&HWI{9teo?c1JbfWSEznbe`@-2@$f}@G_;ylCC-Lv?QNGb z&Ys)3=P0kW$zYsi#`#h20XFfwS#L1THQS~gaUdReo^k$M`2CphHyo1~=i>P-wFY7+ zPDdoMkG0Z%A4}}&St2GKanx=l$NS9qL}Him+FtC7M<1e}rhTSX^C$qbT5vu!b&Ixm zA~CL%cy!k<(&{w|z@FFC6&ZL=yN9|Z&79)!HsgVI;mujNQ>ekgp)a+YUi#y~{aBpZ z_DH+8FF9Sr_H}JfYKKuT?!{Qn&Nt_18~#74zB(+*?fYI7P*eoOR#ZgnZe?aRDt3V) zf^@fZNzTxv2r43AAu3=2Hq3j@i(&^RSlD${useS1-tY5!o)7o0b9u&z{hqVWjiB*a?G0?d#`61ZC6k^d~$nd#-24(C|MB_yxHRSZqVCR=^UPja$NF88j)nU;_hs*qF66|bwHp6J!MDUnBLtXS~q0z6w zKC}Qcg!9%NH0mUve^e2LocEN`NBHCen02u!xMOq$-_avFl6-%DH1c`tLD8rqWtg^= zjDP7tW0oV=ey=O3g1%@-CF;+?y(M|zk6QXDoUA>2NpdE-k?Vyp@Rw;y7MD1aDewyW zU49w8UVzvP7?HF^Dw0}V2b$j#xcaH3M)DK(^aeHDS>@ZRw^zb9qDMPpy;9i)^$Ocz z_}()j1P#nVyuOZkhNnM;%mFJ&^$p^9t>r9g@(PkJ@us|0g-oWtoSsB^(I%5CY+|fA zm3w+nPwnSy`j{2qWOD=t)sE#fJCa8~vlezvIO!qvf}QnXXOk_DCH2_P1=!DfLf1+L zme^AX_Or>t36ivhsEfkR^IlJqB*N#lL%puta;fA_onD!PF>lH^mW z#84Z4V}3MU&MlB=7kSaw1IPgr4@#b+-~L<|+SBf*CB+>)F{=m8klT$CuXE6$d$O7g ze}0q97hzjd%-cU}C%v>4nnakT-+V_)I`OScA5=O^|w~}_q#diz5XCB9R%Ij-g%OqsPQ%foAIufO7*NE*gwdrjt|+Z{Geh- zdb+DfwK!C;zlizP-Ow32_E*rqWJ$58WBeFz&4vSyu?0MsBN~g?V1s3J;;SbWG~Z!< zLzmLIBkr^;(v$nBKi^H4>{j@bkyi|r-r6d;2+pGA zzzpOKIwGlq-i;OT6*+;IB{LJe=udGJaCa{y#_^u?68sD`ytTCYg$L=aiiFm9XQ@e% z2kp7FnzUyPlkeFdB7y zm^65&Glf_K7jjHXI(EDx^{Ni01(H9KJ;()UU=a1YdRkIB#h#W1phjSCQFY;f9sN1v z2d;!7C7*9gXTJH;_9p?t=Z2NE1pOP`<-Y~1Z7XOm?xgVBE183lIr$fQ(JX^v_A11T z)+Kq;1@8y!w5}<6^l_)LyH&VikQwx=9cawpb*%H;<#eWMaSJN77F_Au&W<^eu3MuE_zC)kC}~l>^&Zze?hannBmAm@lYGkc@Eir>-{0 z2cNE&JVUO%`a(2qT)$hg>6$mGj)6|e%4$im133CHbE?zfy5zo%Cux1eoXD~_5>Mtq zM^Wcb_Ewc{4)>tgD&UZ>>PiQAdr&Wf)xwzUXVO^Xw&EmkPX`VJJDQQIWpr482@n^4|MBm3%#oTJeoQa$2)na^#yGMQH}m z?-$KgYLkE?LLdFu{9@(v4K~o;^d-e$FJagRE3!pT!qDi0uy>6GWnc3mV|6pO=&>EpJ6zPg-=Xfpwp~n36ZR(b(00SaIQE>VF*iys5G5V5BK&^=)Zq+YNi9 zWu=cT9=wm4d{X}$+p06(x}MY=?o>OqyL?LX+dNiw3J2PMpnpf_i>O72>^ z(@CFj@^jiE`Fz=x<^hwu==&N;xwSLRtO=nEnV)3RV+X2*2EC|lA*m~{2ZvQ4-E4o` zD4-m=xHJ4|NN7RzQN#vjwP=wv0slBtX)Vx zyBD?C&nF9yOY1*6z#jt#ZaGdmt=gU*X#k76{f^n;J4 z#)P6r32beEb&slf&~;xw4!wY^O;wNceQ99<@IomMtLl@W=lBz`+$P;>C+vkmmgrk8 zoLn8Mjyd-OkrXA`RBv|mfJR9qJ&RFPtM~H29S+RKlicbQHE0|oH@SU%Z}r{h?(|Xx z@rLS&>h*f=gi0=CWlai&)Vvj+Z-qw`ReUE!POsJ z?dj{10P3cfQyuDPM|*o92W;x5Y(3hRb|R;ywg;3a;7fZOdC`{(M#5`-OG+N#L5U&d zf;`@w@_@(q*1ii{RcA`N`&?=1Z(G)McoC%oqi{ntm+h`xK-riDD*RKzWZf5#QI-u& z)4w5&1m9YX+rk!ht`9sf6<#?|CwFjeK##r{xygm^=n0N^E^%WD7gid;145?f%sm^JQJf%+zoqu<~S|=2KLlI5ME*i?$4&Io@kD|sy1C_on zJ*jXqa_wc)l``l<4NQ%seM=maJ10Y%7;{-CrplE?h}mWXOK>|cN2z<&ooZG`kiqF< z<&9Ez>Qfm`{ri( zZ6EJS(=IO*uH`JFDMsLNR@)}1zFI;%A2`yQ-cN;2Zx_;@9S*cDS&JEUUO-mfcBH-M zrEuSSJ}G8cQdXNoH2%#TTC;a<3p)=;QqqLbn1|{RBsFdVkGfeb*-q{t_3ID_ z-Y58z7s?ZVfj7UZz?^)4HD#~&@$~*BW>0LUDJK^xkb}U_{Nt_ctuCiMR+!b&T&w)b zV(9dP7}~M0L|GORNjHp;Gj^_39vlO0Ro`f;*!NhOf>{Yde|E|Q72(p=K;CjBe2;SbJO}ihe5r2TT4n8A#2<tClxNS)Xl7{hQIdO5JU=t&24^ zf?wu@LxOZrPfK8<@C<%x%9MrXq%XCizPmzXjFFQveJ$Ef-J5>jtoNEbhq8XxM2JZpwg3p)$X)Mah1`O$Uw=X{4S>7%dco7rN9 zcWFmyWcNUtfY`$>y}8Ol7E5O{F@szyRSI9@srEhi+5P0o+7bnAtc?X$aJ%xAwwy-8 z|G3?&QNF&5*^v&==XH3dJiHA#A9^lkZ&iiKUg6aGN;Ii1?;#lYhR}SqXwv98Qi$#v z1b)ycn&>c7*fa$?fbQVm3t1^7Aubr0xtdP-c?uQhe915+g5(E1g*DS*^ReO7U1=_~ zhOT;e80H|(4HM3+aiPGa!K4_ZArx6SQGr?@dKO=mZ8tcQ_If`W8}UM!<%^l_4bXwU zwN=^cssmy=4{|enS5(`rQR@pYxkZp~aq&rP`y^d_H(NcW&d{I75@V*hnqWRbqv(g?l5*Oq<^1E7s9rBXXr=g!dYLGDU8|o8dP&0Wb6%w^Vfme*C zf&nXpuC>s8xCh?OQGvqrp8@oFJmzonl7&EM3$})z8REZDXcgc`Ls0+s__b9y{mPeC zbp)rP(>7ttC2z|36;2;F=LiLQz^h;m<)FI1(5UW4QsD4iDr7=LD;Fwz8bl5<1EJ>} zXR2!mAmg<|gr1k3Nv80l_yiqcB3|P3) z>^XEZV}RL;{-8zez)|d2V?#UZGO2!_2VD(DT+a4V959CV16$%Zbj&))J^# zO}Dw^wd3Hs7CQ@pz}+160!LN;aA8Sw6n#?1%*Cl$LMd_)8xGFweSquGZ(J#(XwobR%w<5$sMV8zNKx*ESjth(@dOMKn+Y)#pL zU8^Xq9Dac(NJj*qw}ZWXG@*<1+GS{#1%p>jQeEvYi3Nuzw9%jJQ})wOAQ5w^kMBNL zYJO7C02T1SICK*Jtd`Tw8<;8HI#h^;|2_yzNXU~}!W-DEJK_IxorOB^ciGk>--(e6 z9VbDz(Fqu*-q}K1)et&@UW^L#=)alQuIxCE?zZmsh1dLl4J{+sqZQ!oRrME8VdF z)z%4e%tZ7*jCl&XB4K!b2>rBx2E@4|!jAVrWb_mBfRPsjAIw_5*cDCY1&;*dqXE!7 z#q7_@??N7O4$W@pi$!X%w}t-nvN4MKJ?qBIVgJa3=%>Hv&&q(^P4+`QcHKZGJXl5H z$U_av`!d4Z`W1&r^10rg#g}-~vZbpjU8hm7(M0_DIGhrxLKuyDcsKnpy0B`Sunro~ z54A(+nEH0%0qpEPB8W8F9FUsa@TPoVI*0C0pd-+d_PrTGpY&6V+ucOHs@$!GofUQ3 zn15eID=$LJ&n{IuVGZgPl{owFx=UYuK)n`tgKP^`<<5BAlkme!RPQRME>0j5U2rmv z)E3^4jHmA4XGrKVR(Mw{r)$43Gdp&vAjgb#+dANy%z_22qnI&7zPaW{x{&l3XL=E0 z$m3gtr;>2G`4ctmxC&vTekk~aQ4jPyBNU*1+|3;`hI#jeuhWAl$`E?ZGd~N5mj=>W z^lJ{xY|Ac{1<*>&E-t>=g@s50X#cusN?L8e9Mmzphq-{>_2by4_x|MJ5sfYOfpT;NZ|B6uO>J*8i9W>xk9oAgIlc@_R!=Q(uAgWf8W9TO-492##M zdkZUP$5S)*_8>zNzCM-HVDR=h%=Qr6gR!6S`ipjJ1yxVbLL(^&B1Ao>M-PVQ4{mis-B2+v}r zGL9+C1L?vp%;Nsoz(!-vcm4ht>hyjmb1n{`pyTMd56xl|*9QEA^tOg>jz)cEIOfGFii{1XdQ;`)mh-R`n{{Oc z9sHo38cX9%`fxqHaH@sxjSd*dCyfoGd*FF^xw|*t{9aBQF{^I#u?IgTCX$XTxO0P{ z8)%t8X1?GI%ilTX*;FY*J zg7aSybjJ~|e>ax*V_`H4^UQiK_7Tr3bQMb(6F~OJbNOXccJT$c2fM_OSC8)OB5XdpYcy&4 zj~3#9v9x~yPU-2ols(debbztHGryirWVzAHWw8`{WskAJI}g%wZ>j5Hd#8&mwvQi` zzQ)~G)1TLE3a4Nl@Me6TDCRGY_)iyDH*AP#jab6y3pgL%g74ig5pyTdP_}=^yBb2j zbqMr$YOnLueG2+GSWfMJDS6}sIsKy#eNV3vJ^()BxQ?8D$8Y30_i~ZDa z%gV+Fz+R?e9>3cNy7SzPwqd^S6g{9$5?8wIj6JiV#JC=_`B$r3@|;wC>nbxC=0{UM z;EZ=4%-{bBryiL1zkG7Cn301Sg-UQhWy!=3bHQ_lJmloWo?^Bp?2K4Be@-j0cbf#V zn=B_C&HJ48D(L7qIZZ1N`MtT&2ZsIc`<8LxN-PcNg@1cz6CXGLJi*8t>u;v;(OKYE zZUXn<{1E;Zxck&w;PhB)&Cg;!%U21%b7Cf6;~qk(MRBxs+(`b9e=s?wV1_@WJ9n)L zqDF6Us%W<6mNSFM9(#V`y!&hldOgp_fa@k$V69&V((XRc<{q}2T~H08<=8(NeRA0l zSrEPIgtKFn&NiTK+My%P?}Rv}2TYCbZ`|YA)-1FQ=54pbk5zPJRlpsLLcaEStG9CT zLNAgdW>|d0fGmN_^%QYt8?R9`_$iKcl@rS-Hl7#kN($mPm%<<)k>!O3c$r zAam^9sekVC0;Ph&#>%Pga1B?rm($8&a=Ko&mxp22uzx=}wV$+^TRWi6q$Q^Vv(k9y zdeobLOYi)#2HVGl`>EMFQLM0dqIg5l7ANV08-uX*y!2=Kgx@De6zEJ@727CJVL` zf&IhhD%-W8YVbYY@qsSUpIW*GEsxs;&_vEIFb)_8n`37Df9?EL>@G{6?niQ*HHG># zZjua~Aof7}G>Q24Mg-l!SzcVMBW~KRAl2L8CH~pShXg0l{-<%If9(J->zYVk>Y?f5 zpUHK%#iM>1N9?I9?=wOHUL5e|O*Z1sYvX9w7I66g=)w2metVw;jxWV8RuT|JNIC@q{XXnOKp0ui#O$s|3=4RU7#Z&$J2!((vuA#?XG)P14;4=%E_O!gDlRV_Tq&qsMp|Vva$sCV1k0o(qoJ-s$+H#TWV*||oUaBdrwA>J4~ zeW^@uVm@_2yb(D}F)b>)kmh6F_>Id~z^b|5T+US-1< z(H3U9K8=!K!`Z)!nbWrv8VBAhivjytL~b%Q!!Pwcc!YVoBvA$SWcFUhep)3`_B-&a z4?4#p0upE)?%5$l*O=DEcskk#=UU#tZuu$b(n#FPU+UT4Mw~g^DTA+EWK+DsgNl1Z z=UXK+_z*@C4cKt}dgih`ke1^;Z;8Km zu{G(1^d0LlBkr&t3pUX@to0w=U~hHTQvv>M+48Gw&YmnX(E#u3Y4d?a1++Y(kADNY*GIx3OR>Z z`ky20Xk936KNbs4*e&dg0z6<>!AbHyh2@}z=Y+jvd^?b-Pj{zX;2E!ey_9Y3;7lLK zD!^O!Uidf#`}u`}w%)u-v%MVY8Gi5o`i=68eq6tEDg8h^6E-P)xEt`6*#ZR~K%vp}iE;7td(ko+~WO4DsN*SXwpw6bk}J*_mtLj{97} z=4}O67-DH3@9k_c<~4U9t~+nHk@Yb5AwAqp1Fx=Ui8k)E^*;2WR&Qjc5@$N~SxzAn zV_0*TBY74mXy2VF)HUCc`af)`NB`=wBR_6Yiryu-p|p?kuu=7-0Xu7VKFdd$HjxH? zmuOPXXGGm14cO#&$2{&T)KCZH1q-5*cu?QNbWaa={eC~L^0$}_!T*b<+Wc%nCOyS_ z4he3{KMqT$82GW8fy-TClx%qj8kV>?qfOGB2IQQWX!z@ywUi*DlUgus}Yg33;TJz{vI~%XbAnw z!E5oUkUdcPgWm;wVyOk}DQX&rYVewNdsv9noqntb-|U(b%uVV{V|F608-1M3-U!}Z znS#1#4il^{KtDYhJT3qI_kZ#89D{5=?NBM{qW+Wf`xV#Btf#Ixr;hQzc$?rR^27JM zo_n8%CEcQq_`Ne-mE54Fh9Y3MV|hDy2J9S#J8{VSEMD-dlv)i(to1F9chfDRfrz!D z{M|XLE}$P+7j!n`O_jNnjP=p?Ql7jmhxA9l2fB^q+f1_P?lAC#f9}h9SSA$?g?5{) zGe6ZQopug^-q2Tdezi|3?Zszxsr$~X-IHlA?v9K61$+4}k({x<98k}8LKFGlJ7rSS zS+>V0o}~DmN1UqJ*El(u!~UUV<;)9n32j>AoYwDQhKOAas?eL8w4I$le0 zZajPV%aLwrMYXW=5syl4tyV^-;WyTYcM>Iy_4H5`J~^s~_&TSFa$07z8RLYP1D5XV+H~wgCGloM+<1l zG}J(rtm03~a;ZJm+0D!OAAcX5uENb%B-3cD3qStD%pN9E0RHVCgPUxPJb|X;J-v?Cu=J-2sv3uU zt=l1H`~~+mzJEh<3F~ejO`mWV>|9*L))_!63H93}4O^H5b?-Zz!o;gx&pqySleZ$H|IMJ1~ z)h+D&YtId?HLVPPgTC;)!D4CW2HFXqw)n(2@kdD$2{_k!!+MKjHr}Fbux)4kHlog% z8oE0H{gkec_)WdTG#`0HbJ$6~{97rVm=0azxn;bvLlF(fbKlf6mm8HA(5>01|9nj3 zc}2N&2J6h_tN4nH99oCh_@$Zie@0{xGr@g#QOcLtX3}J=Q`3fW)4yr70PDUhy7QXf zDf9^IpLf*x(b>tAhWDx4+ssa!gNE!pe1E^2EI^V#L0H#Ea(2y8LEDY7w`Z5Le|0|R z;OtyX*u(T)!0QY<7f##BZqEoM*V0((e`6c_+%}NDk43HN>NfUa$0|xW9Yf>G_cI++ zZ<_Wb2Kr1lnU<|PS;6m&TH203+3QTp?%{Ji40&WPC%TTB!-^S0d7=$)@A@s{=goIN z^T?(DXXj(i)5Tvy8%TnlI%X@$AK!v=VDq)k$2VIgP$z{mQRDuX>XLzD(%EUGK;n zCnQsi1$>Lw7dE^gk+fDKrwF^v6ldb;-g3k_MJHJqeCHZ`w~)PunF+K$e!>52uRg%e zeGDfZ)EO>4DrFs329wdcSbB;2Uc)1Q($R-TPf!tiw0sqPPy#pTQ^B5LMzgRXhJx$v zvy+wX)axN?9rtv2zqa5Wyn?%?eloZ4aUylZA!a|V_>NR3QfY3P59UO75Tne>s2=-y zcil?y`rrmC*MJ>N+{IT%o9F=cz_6k@qJHizdV}*mw0yAm`BV)JorAjQ$4=sv9*3zD z>`?9bg^zt-O751ZhxEL~U#Jw(5L?6{x>dYqQ2}Mx!*6Tue}At!lb^YtMl1080KH*6<4y{FbHp8yqRWT$NQN#V zK5Ka^-gjCeZFPl~*73*8OgEnXTH(CBy2S1mqMnNVTxxWZjVO<#xwyxfT*(5wLrLWn z=APt-*G}=S4KdQsGjZZi*f|aUt^X@qXxQDNlo{YYRhuS;;~t!63Qo33eZ>)750j@gYAmYl z#OZHJX`eIvdHHMJ;pYx&;~7VzW?$kpn+vGUJC4R$RdS!iTr%)M-1WME*SY0TgBLh# zO;Y&`l`QZG|I01!$Gt~p(s``yQcbz~g*40!BZje`z};$7XtO_JhNHdtuuDl~9tb|H zpKZB+P6A2sSvJid*eGoU&BPhen*50M0hZzRP~?M^4eUT^IC$f62f18f_c{ktY7+3? z%S1M5XaIGP#?p;>2iTiRKdSj0Lyg)ySu$o58n(tzw19y84n4_Z5=M$2v=7r6?4|n;yNDB? zm(s^oI181nM3;{{=tVI6ZQ%p{Fsp#n!@*mNdvj_;E`?(qc&~)_vCN@9VYo+Ht>^ad z*3#Zk#1h-%_?}*wMELujbUWVWXc~Qwz@4>=_^#{}GKoeEZ$5~}O-&*ny#DF$&V1?S zc$$cPp7u$N8j!=>v4CbJfFIlK8ZYq9#a)D0<@*u-cuo%R3+SyhZQ-Zyucc=S zS>oyR^#pB(vAbDS18ydOs54)i5ksq;ZTLFA3tY|DZVtoWusIdulN^OkFD+;u-1 z^a-3Tqbu3OY~Toh_r5Z+kY#lNXOa(Q*qgVruM2#EWs4!rqgPn5niqxRecA+d;eWuV z^zZLoam0c<1-j7NRQ&eGC%F}7KWCw?{lD?^y%kTzcPaBDQrotj47@pq{1@iQ}%DH!{C)aO}Tt1WcBE#ZGWCh;G5CR_C4s5o~x zpFDdtJtzkb?O{J&haPn%Z1Q`$4xfNt`Mb8@qaOE%X%F_NP5<%$WH+$ld_Nj`9eP!N z4l&0lKPuS{9*mKBOmCha4L8QTq`^iu33%hz!+~S#T+QrXq9+a?o+WL^I|9F|iE};D zZ87%;-mlIESc{JJd}}Xf^dwvMQ!Y=i6K9Sq!wgv*?R~#j4E$A(ybwM)@UXc5P!s*Y zJ~7P87lqVYq=vKk{gPb#R8d3E;1f3Nv=*KJ9-_b4pBqmYiL0+5e}_E}Z_pRd-r7ND zHpP+WfezwP-vWA3fcvh^2d=p&m(mMyN0(jYR|e$J>3rm{W`}uX#^SFpTZX>rb53M&srsrS9MOJCQtC0yV~$QD-@J78h7;FMLcsPYHnwt(QHoKUN4L~ zpr3BPWE6k;BaqVmqTU_TlaH_Sr;Uv&uoH(&H48SXW$4vma^fHPzd{;qqB4aAJB zHTvw=f^u01)*h;um)w@h>VsC%+FRg>E!x4%9(dDyynaCAKWs**2l)<0Y-T0lvhi+Y zi+Ev-$E{W3kp*S+4t5^6@3^=}vw@Oz5RYxC5le(7I5O&4#K*U(GsE8fvt9Qf-HO~-x{Ps|mcoGYavuxDMt2vPgW4ocgJTAX%Q z@r_dfecpq6_D3u6lPs6=N>GO%`GCuGa;R`OG$uIbM>nmd+gSgN+|5r7&7ezoAKfE4 zJUcXn-bJB5GBuGm#w5@boUiSVLiraP?1h)HwD7SD55+uIuqAx&JyU+{XfUZGr+BC~ zm4Ch!Knv=CPmuTL8sL`sa|E1+e>C`=8Gd97-+Mj!E$e5qiu5M{hc@vN%LB*4@?+4l zcduk;!G~jR7)?W6cQI=zINnu}M}L4`TcQ{G6~K5u=d67%PdfDv>O#+Yb0=SSYW)Dc zdzT-)S6gSy_q61V-&hhW4q8-3cVOq|Ij6;J_~(h8ah88v5#yCjbl4nzyG@1oJ@gh0 z_QM^sXuW8*y@vFX5J#<9Ev|1qME9_7!_O`kHN{e3S`gEgO%~(M>>#a!xLd>fiUw8% zbmkCp#-HuPHDhzh`Y`tVsW-ffN)E-~?#R`?#QPerrMP{_H=kAV&2!V~A^b-2qisA> zBbn@B(;k&MTs1>Me>4!!d`a|*qej75&RnX8<+ozp)GPdeqj#u#YE@>TFvC` z-ucsjjaWwy=jZ$TQU4_|YPzkVa|t~gD3nST6Rmuq+?7BoDkV%XUhny^D^FVi5{ zd2?W~n5|nyGht^(s|?XFaUV_1Lk-8@UkqMdM5)-5+;)lhw}%dfnnF9v5yRZM%qIn+hrT(EPNp5>B>{1C z2X{f!0WP?8&Rk^( zw2=H_$fI;V*Io!cO|2M;vY5oJY{APa2R1lpFgH2xK%45L=+1IIZY#B;!$DCb{o9q> z)~=+C!YI1hMT`5Kupo6{i9gu150`o$uy*5H4=7SX}?;EHB{GXk-IW>zp6}2=4ab4)=AL10=Nb0b&y>WvmZFhzYU}sTs zSX6{mk}K?NTazcAZNH0hVCV9Jcri`C0KAdN3l2GnwLa_VE$sHBm5F$M;upk5l8(5md8zOiycz9kejv<{$ zM=poYoYxRdGob}pa1nFXlfkpMLCWRt?dd}z?9+BE?=!@f6y2k!ewrcAh_|9`*v~VP zy7TLn%c<&R6lsU6bK41K)B`v`b@qbIsa`~hc9>V)dz;xrFQ7`*C{jsV&OP?dr!@VR z{y8|QNPJS9O*gTh?;5Do6hEw{4>+4mg>7pdj=V)z%y4H_yb||F81;aiC1EGU#plZ? z7Iu!47KWa1cfq%H&RQMRY&+ovie3u1qi-;$JdkehgFZ7P# zpEm{^;Qh|~)1te;xIW&_LxQ}?Z3S^GtP&eT-m)OwSQ<$AenZVgvOB&sP-czMMA7f!o zhZA7K0qwc-2vf}BLCfiUBRh9^A@#$2+0zXtSodx7DJme6H2aLZxKXlrO*)G)I z!uN}xA8n)|IOFLPb3}{DnKT!7+{0cG;+f(k+6CWhRADYYMqeo(w!M}%S)7i3hes9a zIotY)B~KJ&a{}=gViK=!a;m{PvENs2jrXwL51X&O&m(~wO+dV{Hs>6V2nnYuJoimg zPjDOGK;ZRaNhaURbDsLplf|*rC2A|b9p*uXxbMt=X7ks;uB;r0xI!nHcSMhALRvJ< z_l@9FF<(}DCW;;fy7Og%9gS-Ztxz8eZYV;FEd%;|*Jtvu-z%ta2Wr#ZNAh7;mQl$f z@Zr4G=EmX@sxkuCR+~rc&FY1u+3`uQrOrh@0-f}Jr}u#a3NdibEzw6apSHoy-9DC! zI_7K019tYEv0n5Xm;#OXIGQ>&QVe^XMB(tg)B9P912-koS=cZ`TOt~pCD6xe)I56_ ziXMaF$sFt9|LBNS$TgNK5zkyu5o0>YsS}>jp=+=Bm#`RmmV%wQE=bwa$6RLX7aq4QW3gE_P)`6(yEm_9@G_9Zu>!52ZPUU(pmQfM- zQM<eCekhc>nm620ri5YWm`Wv+(g8 z-|`*0cwOV@i(JWvjq)R{AaEvME9YsWz34aMjqdw*@#l-dDc1{F>mT`iS*$bqjlk#} zUdN{{aU}B{@B^O7Jo+uP7aKA2HDxu=`)f^~F`run&2%+|C1vl4BsGTe?Gw>%oT8)3! z@-si-H-J}v^eu_cJ!uclk4ReKxSD@av!w{&Klvpm-v6Q%O?w?lo8xEk9Tpa30$vN7 z)&qE3=`uRQqiOKz56mFcjONUXp^ZO^8T+-A0!(m+3g_9{U$)d^K+Aj3Xz&4Xw;Xy& zu=BOuhBbqytf&33^R{`tYpg$Jkxeh$cXMBe`qs&aKcPuShr|n=(@8BEe&$TJ7}6z; zY>>M(3=I{PFVQD0L!I#MQZb@9ne?$Ia}y_vPAijW4fd_kA$@U1mqb#5JtH4zi9ed+ z=^554?N!9nUE;~V78tpkuXyM$Ifdc%6KCJz-|(3ei%?@xoaSZ&qG+{0Vnvk`JRNgC zUi#2eo_m1b-0DxEso)IJE9TEqz3Dgd=pwUx-Y(Cb3`PQ%du1K(3~r2jn1vZ|I)#tK zo%r}h6eV|y;{n=^sH;bjwcUO7KiuQb(!W(v4Qk^mQh3c6~JJ8?xFTM4bJw{b1wIvs}t;+8#8bOUy7 z-D+5kws!_qz|NZwYSaWH*L;GSQn~b;_(M#l2K;7U_d;=sO*%Qi&I>lii5bh&=mG3} z*wRw07??`57kljWRI#)%nWiCrIBYXO{AXPf>0;m3uGJE+&rc+cQ>Z(QZzawelt4+a z?b5r?dEbTcnAu0K@Xu8~eT;%CMQG9LiTrjPa;9C#-vcXoVHE5Ugq$d855I9Xlxhrc zj?}htB{*$f1N$5OaRWd013YJ#Jzp^_lgAD7pl8w;%E(XPs>PT+DUK#(Q#iNNa-nIM z^ZKLh$*1~3k0UY)7{L|1(i9jBM_|rzEc^gY$~Ne6dyc3% z0zC75*jaz+Bhln=4E00K^3bVR)E<>WmrT){zAG2I7N^r|*g34xTvX3V1Ft*snqA08 ztW#+Oa=Psgdx@QNQYaEJhT>pb@x7QtXJEGv>>Xbgkx27SBlbI9&o7#z#{}CRXsY3r z;qf%&B6>^T%lVI`3fhln;XQdLpO%Msa1VSt`s|N3M3Hqc&QZrK-t!u?+hFIlT~fHL zR{+hdIag}A(h3Q5Z70p; z4pq(+aUqIQwoc(wUOn?hd@QdI2A6s&|tIy-cFAlX(46C7-?}kxu<<+q_bKJ3N7QT|nQkYBP7si>JF+ zPy@M|$(x)MwBQV|k>>F{d{Z2qMhtUwTL`~{S(BaE&z{%Z`IJqVwHbh(i-R=}{NYbU zurt{%;oZQma_lYmD|XN1W1uUsAN9;?=@jn$9o)9>Fx#?jByV^RPSLPvYX5EkKl;pt zuJ=P664s5+U*=4MD4P1bSLf5mJ5n`p{<7UK*y&HuPe*?J^YjU}%N=^AbN}t5rLiV% zOK}fjlfHA=phhQJ51Tvus9^Vcf`^2!M?J*F zitj}Kbon`a{~q(X1N_Fxe`CceDc8`&tXlwl`| z^QnD&$owO?$iDXAO_(Lm1?St%2yGq#t*cGl@%N&3eC2-Nmdi2Qb-oqfgBifMKxhg) zX=2@yTxir@)ICD#Sx&kW4M5JWpMQcajB%i>3e>EcH?h$}>`Ac=y`kk^Y<`VBrOuPn z<>0aGSYKCq^AUB?dAV#JxTvjKwbYeP{BlsNpNjb#*g5!Fk~kA{+qJOsz4~$DBn9jZ zJHI3~(QQI1X(0#C|9PFao|{1iX~-#R4)C2i>C^}Dz-jo#PPM7zfttq6?Ft^?mqHg1 zV>C$IdFx)ul!g6iI$;SnyaYVzCB%(#Bkr{u81-wwx{MvpGmpm8@mtv2x_x;y^a5?q z<5}eB@)zhq^@iV2lXTz)36YfG1DkJE<^AJneIP`A^%S~OtT1_Y={Sjm91tI0v$;H56))zd=>}JD^tvv6@z!$Na03K zzDxz4GS z3_H)RNava^8MGR9{*vy&zYI#J^|15$4s*EGtyJn(j@-O)BtIFGLRS$p1WxV69}Z5Y zw%DH)zU_IzokZ}!prYY-df%I>}R%Xvw_~Ce9C~(KExWPJ%QqU&6UNQL$v(tet zdJ+0oUP_jDdNu7t{9HKx2y+ED&m?@ehd~F}wNO7=5E)Cc%00{)^ZUwX)aQX6Z36#~ zD{4M|d7D|!*T~0F>*!*zo;^!;r#0%x$Llg#r(W)~9QBH&JCfM$&zNt;YYg?G*m*-2 zY7dOT28BEOZ0bZG;VV8Um#`0$9H~=(VCW;pGB5b^w)f?fGqXM0|HqBil**~XOOsuG z7EZp_E%6&~+nb1U++)cXc0M@r0&i0Yd=u>ab7U%C^sf!@TY8RP%wI&LQa{*Pt(76~ z9*{w5u(PyCgAW>;PE%m#Z5Lm&)elm^tq9+H=MoD}PNC1R^I78~Y}A-!@aLmf1#Hj7 z$BFc)4)s-y95z;&Ks&LAFWygNvv$W*7VP|1J)Eih#$4@b^jn?0Snt({i*e6dxH+-I zcOs~tB`_p%JC=Pih+I_SDCqG@7PD;?IJqzzlFa0+$i*_oU&z>f)sU_0njM< zU;nJ~W-ot-p29^XdW-kQ@hWf`hGI@LAn85ZH9CSa_hNo?QY8y5PlU!ee&de}rmLDp z2UnoClIFpT$EDILU-a=Ony?omQ)p2ve6s2g7St)3x@MxLJxPbPf^ENT#9H!8NIaZC zlW}kMUwT(iz_w?$<4&m%gvYlOGz|Ws@^*=ko-e0+uk#tA_q;KBpK!m-kM<#EK3I7~&<6LTVHeEoY^@eFGCas37IAN!Qn0oL zzeI1$6~3+()Nm($t_Du@E)z5o-6$DcHzO*}3wZ&qWQ4jLt9&5X9&x78r%-qD`6X!l z<4A6(e;PP+U{=h5lHKAc$5fkrf(GpdV0wEV22LJ)dV_(fKIVB)`X?_0njJ0ov&wEe z)(!b!0q~PTJ2iH-B%01)U7J%SsQrq?GePg$B|^~Nl>*+=II5a&C2xn4YJ-32b!^SLxkUqK<*+tanbNvk)(uOn_TF?k`aMQwk06f~w^ z9FS&1>*^Vvd+Tl!r18=~T7i0tihhFiI#=|0pz{(HBAl&vCeL3{G~2vVxbhL) zq=*muooo{N?{lC^;DHqfG?{TvM>>8IeW==R!ovfu&{4!47nCm>J3APf^)3DL^+BhV z#<;h&Vbj@{dnng5W9Id5EDf4}x@zH5#L*hS3cCeLRRdCKi4$@$t9#N&%Z&f}O{&w{ z%f|jrqj-jUfBYcXp|z>>`6_(Qj2SZ9-YImY5uclDCtFv78H(qyp;M$xcX}etcnQC4 z43?cA@s$4p^*WV&*@`ytbOZOxhe;(e%Lxkl-V{f-{y8X1{Q*qG9rzjV1F}^C&?MZ6 zJZM~z?9TfL=x)PbO-YxXPDiX74Ge9eo$USwKe}pxnTm?RvYt8Mf|~+vH;1p%K7T!^ z6t>khQA!Uz29FBvRG*_OrO#WtLti73PH)&(9asSU^j?wF=A)*N2)Ojq(kA4;|TBiZLafuwr1B_8S6 z{IkmQ{ScFW2WDHnt1<}Ku|q$hGuUNXRpJBO?QQWsL0M8e$5fKzysXbrk@?QbAXoTd z^{4@|8IRMb@GP+6t}|tOy;I2^HqlRVk>$Pxp7R;@TZed=XJ8U-h7D&;S}&_@l}P@t zaL+ar%i11@CjrlL#rLB!P0Sun#QIkLdD)K_sQKerfG17X>NjFWe2+cqjj}n2VFOXq zKKJ>SZ1@~-(%8fi$h&363855>x!o;8cF3yG$GE)=^=B)&taW!^Nz+25ExrWqhzMwXhW(ORT?ioeK`rCw z=*;uVG5VMhgq??$=qS%%KUcxd|DJcTk!& zrpmSgFZAUGayA!xS?ME1Nkfu=Si z4v!RM&phL4Cie4&&DUk2HVTqFK@G(Bm271u>Km}Rp4A^&T0QnGo>$*rsx;IC_y1}1 z$K6%w(P;38!G~N6`z8z145uud<)C5pvW^Bp^k!WQ(fEV1zmdh?)_n_UapqUk^BMSj;d{TSVTcdtUepR^A_|4%|Dc2Sv@_;Y83LV3|YN55l zky`NxdKEZ;nW{K|(!cj<0orTuAxQg;#@cTb5ltXj9IhMhO$0GGAJ8+I9<9# zmVYD-`sJ8USp&V!F~EU;0{(4mwru6LWSWk>II-g%*?HY0n*Im5QkEdQy#{vvig@wv zO9aK)I04L59vuw zoaq~kz`5}pn1`$OuZB+L8tP?oHf7QX73^gn@PBJBwnvu% zJlBl>6S*%k#!;h&|E)1KRk+)MdT)G3Zf_ceYDeR-o_Xor=JB{TG!9$NaxeVG2J=H= zV7{1nri%^Av{C3kl6*PaiS&YsM1R(VnbxB*&p!eubCR&3Z*L4Vqkj$W)3deTNNzrKT6o({r@r{_m3M zxL~wzQh8oyTkoRm+Lbs*#x}&Pj@;x6v1WV+jW)e8y~(;jVVs*ExTQ{G{q~6cVR-Qf zX=VMn+^sQhdxc4M^RqGU7tj2yMN*3&nYdR^1Mm24lD>TgHaFE^_4%XH=|gGsY-iup z;em9oQ!4DLX)t%;AF1Jn+Rc@9NcMgS z`>8!Pn0YDX`~-C7Ze-+p)+%AMU~LkQ1|PUDK0q$}g;=cQyWs8N4`+1@`fJ(Ge)2LHsXz|+uGnbpS~`P7S>eqg0ydCwh9k3~cG{-RXAISA=-mFN7i z_b#JHhb!Xr)uvWSvZ%)_qyviscyBo2!2gG zOweqpb3!(H^4t#ZyF$8pHxo}-L-y3{BbPY?ui9y_wdA7Ic77T*wqR^)y_39Nr{F*G z&IZws-p(T#sr++_91PLBH~IIxL*E(ofB|dd`)62VUm1pz_c^EMJj6U;9Iou7uPN_> z!|smglp7B>-jB^|c;nKdSgblQ8;8hGy||Y7VGMU<&!*t+=`gg?qYt~gF@CoR!i)Lz zHtq9E`Ws9yb@C`TJIy(W+D z!5*4%-oLeu?84pVznb~Y#x|-_zJE&?=N>cOszcjlVeSIT8j}Lm_IsKTH@iwP71K9N0l`%>e_%jb<)zr9a54J5|Ylam3v{s(T@VHe3nkQ~krnGd#yiL@Zp-=i|eK%z3MIbL{xAd52x%%mVO8NN#ZprI<{%@`h zxKvM`%sl-s&fm|rQ(18ye2H=Hr2U|ln0veA^KR;ED;2$&1H&2`47idZ<<8(-l==^I zR~1Rawr9ezp9U({T6I69<1;^xdwWlcBbPb5vj(m5s^D323RaU_Ix3?PEFWo*&;0Y= zqcfW1aZXdldT-1SOs|`S(VIBC+cgSB+)JCzW*%u{18HXr5_xCml#hiQeKL=IB3>oW z1P+^nG2&`Gy0>YL1%C9yGLFT|5AUVT=e_XjOB8&vk4uG|%Uz!lNsQ}WsWi$1ZgKSH zKC@67f5RQs|0BnETrFv+qZ>XLu})}xS^n(e!ZQ{Q&A_{&rP>M32uFA88A?c*10-q^ zb~{p}ys>e_*q`BW9VnDlL)`G(I2t-RJ{c`&g)1~*s5p8VvkN21%wYScOK_3ma{V0;^EM{*) zp7xC|hb4;(>DbLVzz95$tm>yhzqBqfLW!FDW^Vex41$-B^UI&8<%6VHHL>;uysCRVPR-2pWg1GTv$nUUTjEZTJeQcsaeryei|qXb>W+{@;0auVE;U|9|H>Xvini0Y{l9 z>Tu3e@?8C~Y8KwCWAA))lC5Kl^7W$m)&M)O2@Vp&HzYNDU&er0^7z7Wa&rexPHarkQ`|oH}xs3wi6*?-<)zh&(4a^bbXMKRsnbBS+kH3dP@%-pac?M|i9XrN+oo zWmB>nsvi%*m%=*cr2M4!iJ{QLep&uN8)rezA}MvQYt zt=sC1ubIU3a?i5HN@{&!4q|yei@GODVLh|4(L#gX)mKQt9+_~TK)(97{nEq*>9{pg zgV%0XrCSG6(T($#F3Z12orsND%-n7jSQjqsHMqe0YvkK@Xzk3oW&&%x9|N(OJI|$4 zh!?fCLiG1oWVav>?#E=9U5~=aAxYR?I0fa;=oz;l0fQAwm=dFyXh8j<%${(W~x|GGus{`V@l?BD@sYI8(>{35;5^FVn@DBK1;l?*SqBXxTS$_<2c^O74* zT?odvgBr=QyDQu*x!=9LLanLk471-saD8ba8c%b?eclJ_a;qzkct3iP)1m}UP`>SQ zL+pP+*yX=NI$=WJgjc?m;+&oOO17`bT?%8{sZUQiT}KZD)*EZK1PpiINd67;#-Jg` z)Q5NvM(*T{;{FiHzU^G>>aRh_J0I!eyli|N&pg|8zT|R06Ekczh_u`yEpDHIgs~dj z*B+HN*r(wq&+~_ukEB+MQt@?BO5rq)_! z{uH+YVeE2Ra;jzv55LNB)-!q}4<1SVBF4F-+5q{t|Noxn_%AiJJ^3EjWSmVeC#yr4 zpX+bsY^vy&dU3tE@MSG=c}iz#!R%~u%$XCaj*)yWXW~0!yXJb3bf{?t?lW(k88%ni zGARvbS#MYtuaWBIa1Z!|7@Nog()kJvoL4d@FSsBrU&`61J!2mIMk->QcQcobJ5z%g zS>iM~b5Tubhz|a7+&yszdZj7uw}{48&K8~A8o`M=Fts=r`Z}RH`tc5$xgr`#Wv`@$ zK7Py@5m-O=n$(=TmC1X;uueKHg;N7|eeY0AHaRC5QcKEv6!*9$XQZSEZ-l&M?Yl@P z>EHB5t(O6CirgZt+2n(7OZ~9vNt#rR^KGx8KCm*(mYz2zuW+w72AO=67FbcQu|GXc zn+nxS&awB?Pxt@!gM}||%dYGlNAe7xjWd9{h6pTy3(7_)VVmg;%Sqy|=NJ z;F)s_$W_-lHV5XdH25a}r`B3zV;MDkn)!cHXRgkK%9MIl?V3o}o~J|4Sc8|<`bfR| zQMaMK2K^_FmWGC>p!ap|{04eRMbuX~KcDvaRmDfS0--|IzSYRY`62mM4o_X}g)og-asYKR z{=;D!1MaN-iR0|PTlJ+l3v=$VS3j?>4v;c2=?(W~%ZI4*i_=m1g7b>$?&@ZB(x78M z`7k9*9paIK?wc96+iTQ$LIVpQ=Bb!c^_f20pBVBTIeS$-iM!}G+*wb3{#iZLCZ4(n zNl3J-D`jvlw@ORTvh>!{=qoX>?wg1wc3q`^Ug$af6Y!;552+44izidNdsC}U($Kac z#N1K;{Cg8=v@7RzRie;-mA*8W`qjZl!_m2-nq+j?2OSN=;MJs-)bElH7Tlz-N?~nj z9`&~UM^VFcTwTdTj~aA#fe=gdq}&sJuq!5)ewnpYbe+FG!3XOPx5lfR^vmGqY$Y^90m5>s~3&T?1~(h3&)f^BQZ`(5dpp68eg7Ar2u_Usk0>;D(0z z`ui^J2JVvT^1d9iB~2See9`#1oZ-B7*PhT%gGUy7#`D(Nw3HNF2xUF&JyhG|r3Nme zIlDGB(*DDJd^F(f)UTtqoOAb2e&j{2ZKa(|y}iiQiP&7Hxps_xG~QjIc5c%q+Fjm} zFz-O`LaDKKl}iLVq!X|5qmlN?uQ0?Nh(n%reeGz*rcE;aOuyC8ex#=8wv*BDp8TeC z3_WCKCPiXkyThes+zHk_5Qgjpi%WCqd;W4TJ?PiElq$aNaB3TbS4YfCSM7C2FaH2| z*N810-j_YOK0UlWpO)$wdn1o}i*vuqs!ywZP>cHDQ+Yq`B~~G$#0%SNjYB{7k|UUd zbe6lZ2=oaegcXXR;pZ?>PM?(lvq`Mwm2Z~4^!tX4x# zy%>u6#9{XDS4$qlm_=|V(8AwHe)lpJ%{+O5P=^p^5vdYJg7+?iW8ykvg;XFoZ3$B%?pnjd%<#|EDiifz4`^7m_IfGJAK@t z_ z9o8zXc!no8yDz5?=4@?l6707Ak}X=tVGQ@Ai#ya4efmb@B=@0~zuO3_XA$rxM(FXJ zz9PUZ9KI36#5^z;DXK6`Jst<^czY4BIuwhI<8a_yh}cNov+7%7(f)9nIN2qX9QIgX z$pZ1^0R5L2#?YfDU-TwFC3Sr?wsPIEq?GyUgH z-$hwDivGO=BH=Q(fpUwy&QUScd|bIsY#U5HSYr50KGu-_7!x~JM9!P5C6@5rnMlu= zE>Ed173qVPE4{J#q^YX;x>!`NMSqL`lQ-UnES0ylqUYp!?(dVE$cr6Aad9Ovkmqk} zi(iG}ybpJU?*4M}RC3l?heQ>hlOx`yq7KjShtc2VF~ql2VV%(DbR*HsEE#6T?C-vJ z7e)IyE>MBW=yCk2#BVaaUvEq$Pn!YM&bv3$96wi zETm-iZN#4qN!}n1xrO2Toj4fMZ`6KgD79?k(B{Z#@o-8gl6O(tTzV+>P6)-);jwsM z>$iyKnO{l#!9L@9%K1Um2~3ZHVXbybms;T%W)uVaY5kRG`l)qW6AddT3&s9&1RgJn z!h#jnN_08n|2hJJ7DJSuL&EX)6SW$%UW%&Joz55#ikCeHA4;J<>%pcW`1-X2zW`xt9+XBwF#VKv` z=b;E>J#A^8EFYQ1m~m$Mx%wM<%ez!G;u)^-x`7yfC#k%A5|s-XNO_+D{9ix!_=H!f>z_{)w}DJnBWtNA`y$-{i-SXo}n-^r-uB2 zMoP8ap(wZ*!?{Q&rJ;Ek)NV2KW*V#rdYMkEh{l&`*2*Yqmew|m#)`?al;%a`yPu}7 zx{H(Ya8Lv~lS5lEZKUE)Z;-dfVL07ZPg!<12!EK5-lq7<-M7;Z_BcK2S{T5ygEtDY z0#Rpe28Jg4;DE*(!``)4eVQ4AsOVXh;+){+BWuWKG`PUoeusP72tGHTLiV=T4rq5= zVXq&^dGy&i@>SLhs?Xff7FQEPd7kxnhF`SpAR22^kU4_5X!_Bg9!>2y?hLNAn<4g> zv!8ySgqFXe#U>4XAlZ9(md+JciE&tYo!FI|tHhTr(OA`%8W)dt2vuAp4!V+S_U^Fg zMXY7imUtBUToXC#!m#Xj9Ly4*i^*Z3=&FuG@QaUP_>Exbb5Gjk(MQptJP^I!L?eFr zV^N=VZrz?yxZml7m@(1^evcX7xDqim$P4$EhhpLEjbhO`PYj+;zo@Gl#N`gegAENt z%hiRVb0&TF(s*7U%oIk~i7y?_*$H7K zLSY%4gv{%U|jZi)J!1tQ;KDH|mb02cA_dN(+#+$^1GEblfy@8Ib z7C*UrDxB|+5jUJgm)4#bMt`dse>Q0~9o#Xal^^e^94WSjD<+Pl?sh#ZvC}hh3!)^{>66^OI=kQL9`mIVqkTj>IzVqUH_1C#rXi zz?S3OBbUDy72#pnSv?-A5#PljbqMz9#bLF{M`02fh#^~IP;Polbgk;gJwX(1dhHj_ z7J1=dSp;+ODp8o^fkgJ&C8>)Ly1=)(A5wyP zpv_6o|EW0=Ca0Nx86AcE|6iP&cl@M%t__CW1!}kzIcU|y`#Z0thF*^V?NjExJ>k@T zk6SMP)3!WGF7wizt;M$c#M7$DZ{;25$n)HnGoLfru44SuWQ=Ejmoq*^oMmr4n|P@iNKPJ z@vtcTBwA8u_yqAndzya|ncO4)I3J5a2Oo%i^vG?+d321k5Q5qxNzD=YQ)0f%;V9=cYb1@0o-R>1tZ}0S}~=SCkl53q9S9BXvm$5 z>*N5WZ_5#n=eT3o8hN7(V&F-GMX@Tw;RrIsp$`!P9vqh z{0^u5y^$4AXLv+K1gcG{9Oq;6EVKpmm>6({x*vXprM|WySh|T`v8xTWkrPAFB7u2z z)e6~}ac=)C32T!(iaU(+Mb^nD2UrPPT?+o~y_^R5i{_5WnBRcA+7Fqc!886pd!Hi{ zR*GWwf4^MFC63rBVt>Tp6Z3O)+!3*tx~UU}5c{2XQ+Twew?JM3)^&O+3bMly%zfX! zrH_ThaQdeRVvojL5Sa}FFl8Dw&<(bTBnNLqv0f>vnklk>yVENs65Azj(bwD!n!yp! z?DY}rhf-gT{x_=f6w$FCf5tu(Uk5A_6V16R+#L*Kr&XfoJL2LDg0S<#8qt<`q)GIg z`xdiGbROUiBWf13QRa)-p03#5HvlP(0>r5xXJlIj;6nTE;@fU#{3`IrkQK@D(LBBv z^?Y#dfa*}20rUfsE64f4@)@N)ii44TH3>DA?K|{3Cj^T*-x!sAp)@is6i7-!^E*kh zCFi599+5lnv4&Vf4&XPQVXBpifv&{GwIfFEhJ~=^OyghAxV(#-kU2|!Mod7(QH{te zqjrT6_q+!diMQpk2;#k{3oR0Jcwcm;{)@bKpXhcz0(<%;kiUOee0B~)kyAYG`TQpq z(wk=RbaE$M_K2;K{vhcWv3GMtd^LLKSracb-A@eI?v8FNB4KDTO1ypHist&nWaL|j z$<&6Ll^2HT+h>W>huq-7zVSzLgm`ks9S>vZ_fVcLQj-~TYV;&)a)rTg5BNt1puYZE zapWF7lsSL?-m^sfcVpZ zLY1in`~D4;<9xj1LDNYk!5GLn(x8&=re^eLu-{5gnyisrcT-1wb`rXO8zcYIa}8sh zZw$REx0suXON{feLDfZ%=_&AMoOMbY5qw(%1MbbO9}X7Fxev)%!}sEkjhMHBnikzT ztGD+P5i4ThI-gn%RZ@lhxhT}WLwxG@MdIJ??o}^(f4^TPjAn%44fPrJT`LrJ{=t|% zD-H|n7mGhyzQ^@q5mp{0PTF~+!Z{k((=5eGVkiD?kHq-RoyB%)6Xmsxz>Avggfn%w z3W~yTt66{XeWe?&lAklj+EQHJ=#Ei~f)O4(Q=FaRL0_;yB;A-T!m4|qZ5A~+ju#5& z^=@#e@W-86r$pLj>V=Zqe7DL^@%TM`18W2z qO(cBp?T>NqKNKNGwF=KcBBW};n zMm@?l0vSCk$63!fST$o`Fm^G{nvqvcdoB;bE5^C*gLT95(n3+fIA`e$Whc&%3K{3= z!9{Y_lvFHZoYUH$lC!N-@VYIrEAQUP-8oO5%KhTsJ9We#bLzXZ4p$m=5IZ9ikko}- zY^%XyL>Rr$=Okid##j-(E(-r$OF;e$SJ6M3o?=}R;I%G7)aCy3%B*;d+#M^-lY^n9 zr;Igg#fxA4@wsIze5zTAXx@Fp$oKvn)mC^l^1urbiHy^FVnsbSobAE>xyEPt%WC=$ zmk^I`S4*@Fbwf2P`XWR(6=ONCJFq$!_KSK7d+xBjUj$-(`x)X#fjiWh0od=gTxk2c zq4z0&JQ-Ob?sjoOM!7$J?KM=g9h~s{jz41aO_i^co!IyJqt?^mO2k5Ua+Wx#`qPT1(D01mkSp zB~VtyreYT3>@hl5o{AI%FwS?*7t78%4c7f&erRz@ZaR>4Ap7@c>z>J`^aC2!kvzNG z)kNmFSYm)Uzw6gj)Qe%idy%+V*RG;`OayYp(P=?2g5Bte z{Jx(!&^-V#U1AZqy}6k2$r}cl(fC#SjeJ7#z?8GB3u6w;C2h$s9ufh^5xeD0*{*mi zhrx1HncURW4PAKOT#h?0Z*S&~U~-3c1$~j7?N}2g z?2rSy$D(-(aRWg|YjPf zFU;Y+Y%x9nhJ9i&!|uFn&fSsEGI}Hh6v>;sJTQ;mnq_0szB51mIUOYHhcRy) z55unAv9j))E2dF9`&9cBdBhezi=tq3P2V8bddKsBJrL^#Hxr}bhQet9*c!V)+|71@ z*avqi6Es*cpD3M7_T8rw-VEH@PP$;{6u@032~zNPkK`nByT z);9D_#h2dH`^vnjUD+!I^BCtWtE%#g4aCrWO~UoFhVrat+@CCEFCWoYZqO(JlUgTX zn&&9Fe)U+yCM9CRA}3kH{SG>6p z2G38mx{{5 z{c&xozG8I80Y4N!d|WY8iQ706-B$S_LVuaE>(&h1jrPTUhhpV(XGgRprr&YUF7ZhT z!iW*mE5%u5JW1W}2(^xH(5t0Usj9;c?t~fVo?WJ@Jcunl%{XuGF>ZJnYv*o^vt#

$Z_vJ)a_BmgK9g&${lheFQ#4T4^tvx#IJU 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%0Ab5pe!eS+I8YRT=Wq`r9)13hQrO(s4U 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%0Afn6@cR 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