From 380cbdb5ff997850f5e85a74276a9cfb3745bb2e Mon Sep 17 00:00:00 2001 From: Martin Kampas Date: Thu, 28 Mar 2013 15:15:45 +0100 Subject: [PATCH] ut_settings: add upgrade() test --- buildpath.pri | 1 + libssu/ssusettings.cpp | 6 + tests/ut_settings/main.cpp | 9 + tests/ut_settings/settingstest.cpp | 74 + tests/ut_settings/settingstest.h | 2 + tests/ut_settings/testdata.qrc | 1 + tests/ut_settings/testdata/upgrade/recipe | 1950 +++++++++++++++++++++ tests/ut_settings/upgradetesthelper.cpp | 256 +++ tests/ut_settings/upgradetesthelper.h | 50 + tests/ut_settings/ut_settings.pro | 11 + 10 files changed, 2360 insertions(+) create mode 100644 tests/ut_settings/testdata/upgrade/recipe create mode 100644 tests/ut_settings/upgradetesthelper.cpp create mode 100644 tests/ut_settings/upgradetesthelper.h diff --git a/buildpath.pri b/buildpath.pri index ee55205..b24d94a 100644 --- a/buildpath.pri +++ b/buildpath.pri @@ -17,4 +17,5 @@ UI_SOURCES_DIR = $$BUILD RCC_DIR = $$BUILD LIBS += -L$$PWD/build/libssu +LD_LIBRARY_PATH = $$PWD/build/libssu INCLUDEPATH += $$PWD/libssu diff --git a/libssu/ssusettings.cpp b/libssu/ssusettings.cpp index 5bd1acd..9b1f60b 100644 --- a/libssu/ssusettings.cpp +++ b/libssu/ssusettings.cpp @@ -97,6 +97,12 @@ void SsuSettings::merge(QSettings *masterSettings, const QStringList &settingsFi } } +/* + * If you change anything here, run `make update-upgrade-test-recipe` inside + * tests/ut_settings/ and check the impact of your changes with + * `git diff testdata/upgrade/recipe`. See ut_settings/upgradetesthelper.cpp for + * more details. + */ void SsuSettings::upgrade(){ int configVersion=0; int defaultConfigVersion=0; diff --git a/tests/ut_settings/main.cpp b/tests/ut_settings/main.cpp index d462a48..2e1e7a9 100644 --- a/tests/ut_settings/main.cpp +++ b/tests/ut_settings/main.cpp @@ -5,11 +5,20 @@ * @date 2012 */ +#include #include #include "settingstest.h" +#include "upgradetesthelper.h" int main(int argc, char **argv){ + QCoreApplication app(argc, argv); + + if (app.arguments().contains("-generate-upgrade-test-recipe")){ + QTextStream out(stdout); + return UpgradeTestHelper::generateSnapshotRecipe(&out) ? 0 : 1; + } + SettingsTest settingsTest; if (QTest::qExec(&settingsTest, argc, argv)) diff --git a/tests/ut_settings/settingstest.cpp b/tests/ut_settings/settingstest.cpp index b54d097..2c5fbc0 100644 --- a/tests/ut_settings/settingstest.cpp +++ b/tests/ut_settings/settingstest.cpp @@ -11,6 +11,8 @@ #include +#include "upgradetesthelper.h" + void SettingsTest::initTestCase(){ } @@ -61,3 +63,75 @@ void SettingsTest::testMerge(){ QCOMPARE(keyIsMerged, keyShouldBeMerged); QCOMPARE(actualValue, expectedValue); } + +void SettingsTest::testUpgrade_data(){ + // Read recipe + QFile recipe(":/testdata/upgrade/recipe"); + QVERIFY(recipe.open(QIODevice::ReadOnly)); + QList testCases = UpgradeTestHelper::readRecipe(&recipe); + + // Generate settings file according to recipe + QTemporaryFile settingsFile; + QVERIFY(settingsFile.open() == true); + + QSettings settings(settingsFile.fileName(), QSettings::IniFormat); + + UpgradeTestHelper::fillSettings(&settings, testCases); + + // Generate defaults file according to recipe + QTemporaryFile defaultSettingsFile; + QVERIFY(defaultSettingsFile.open() == true); + + QSettings defaultSettings(defaultSettingsFile.fileName(), QSettings::IniFormat); + + UpgradeTestHelper::fillDefaultSettings(&defaultSettings, testCases); + + // Parse settings -- do upgrade +#if 0 + settingsFile.seek(0); + defaultSettingsFile.seek(0); + qDebug() << "SETTINGS {{{\n" << settingsFile.readAll() << "\n}}}"; + qDebug() << "DEFAULT SETTINGS {{{\n" << defaultSettingsFile.readAll() << "\n}}}"; +#endif + + SsuSettings ssuSettings(settingsFile.fileName(), QSettings::IniFormat, + defaultSettingsFile.fileName()); + +#if 0 + settingsFile.seek(0); + qDebug() << "SETTINGS UPGRADED {{{\n" << settingsFile.readAll() << "\n}}}"; +#endif + + // Record data for verification phase + QTest::addColumn("keyIsSet"); + QTest::addColumn("keyShouldBeSet"); + QTest::addColumn("actualValue"); + QTest::addColumn("expectedValue"); + + foreach (const UpgradeTestHelper::TestCase &testCase, testCases){ + foreach (const QString &group, UpgradeTestHelper::groups()){ + const QString key = group.isEmpty() ? testCase.key() : group + '/' + testCase.key(); + QTest::newRow(qPrintable(QString("%1%2:%3:%4") + .arg(group.isEmpty() ? "" : group + "/") + .arg(testCase.history) + .arg(testCase.current) + .arg(testCase.expected))) + << ssuSettings.contains(key) + << testCase.keyShouldBeSet() + << ssuSettings.value(key).toString() + << testCase.expected; + } + } +} + +void SettingsTest::testUpgrade(){ + QFETCH(bool, keyIsSet); + QFETCH(bool, keyShouldBeSet); + QFETCH(QString, actualValue); + QFETCH(QString, expectedValue); + + QCOMPARE(keyIsSet, keyShouldBeSet); + if (keyIsSet){ + QCOMPARE(actualValue, expectedValue); + } +} diff --git a/tests/ut_settings/settingstest.h b/tests/ut_settings/settingstest.h index dca974d..42c7b49 100644 --- a/tests/ut_settings/settingstest.h +++ b/tests/ut_settings/settingstest.h @@ -18,6 +18,8 @@ class SettingsTest: public QObject { void cleanupTestCase(); void testMerge_data(); void testMerge(); + void testUpgrade_data(); + void testUpgrade(); private: }; diff --git a/tests/ut_settings/testdata.qrc b/tests/ut_settings/testdata.qrc index d32916e..4d816d3 100644 --- a/tests/ut_settings/testdata.qrc +++ b/tests/ut_settings/testdata.qrc @@ -5,5 +5,6 @@ testdata/merge/settings.d/foo.ini testdata/merge/merged.ini testdata/merge/settings.ini + testdata/upgrade/recipe diff --git a/tests/ut_settings/testdata/upgrade/recipe b/tests/ut_settings/testdata/upgrade/recipe new file mode 100644 index 0000000..7d3fc1d --- /dev/null +++ b/tests/ut_settings/testdata/upgrade/recipe @@ -0,0 +1,1950 @@ +SSSSS:v0-default:v0-default +SSSSS:v1-default:v1-default +SSSSS:v2-default:v2-default +SSSSS:v3-default:v5-default +SSSSS:v4-default:v5-default +SSSSS:custom:custom +SSSSK:v0-default:v0-default +SSSSK:v1-default:v1-default +SSSSK:v2-default:v2-default +SSSSK:v3-default:v4-default +SSSSK:v4-default:v4-default +SSSSK:custom:custom +SSSSR:v0-default:@NOTSET@ +SSSSR:v1-default:@NOTSET@ +SSSSR:v2-default:@NOTSET@ +SSSSR:v3-default:@NOTSET@ +SSSSR:v4-default:@NOTSET@ +SSSSR:custom:@NOTSET@ +SSSSN:v0-default:v0-default +SSSSN:v1-default:v1-default +SSSSN:v2-default:v2-default +SSSSN:v3-default:v4-default +SSSSN:v4-default:v4-default +SSSSN:custom:custom +SSSKS:v0-default:v0-default +SSSKS:v1-default:v1-default +SSSKS:v2-default:v2-default +SSSKS:v3-default:v5-default +SSSKS:v4-default:v4-default +SSSKS:custom:custom +SSSKK:v0-default:v0-default +SSSKK:v1-default:v1-default +SSSKK:v2-default:v2-default +SSSKK:v3-default:v3-default +SSSKK:v4-default:v4-default +SSSKK:custom:custom +SSSKR:v0-default:@NOTSET@ +SSSKR:v1-default:@NOTSET@ +SSSKR:v2-default:@NOTSET@ +SSSKR:v3-default:@NOTSET@ +SSSKR:v4-default:@NOTSET@ +SSSKR:custom:@NOTSET@ +SSSKN:v0-default:v0-default +SSSKN:v1-default:v1-default +SSSKN:v2-default:v2-default +SSSKN:v3-default:v3-default +SSSKN:v4-default:v4-default +SSSKN:custom:custom +SSSRS:v0-default:v5-default +SSSRS:v1-default:v5-default +SSSRS:v2-default:v5-default +SSSRS:v3-default:v5-default +SSSRS:v4-default:v5-default +SSSRS:custom:v5-default +SSSRR:v0-default:@NOTSET@ +SSSRR:v1-default:@NOTSET@ +SSSRR:v2-default:@NOTSET@ +SSSRR:v3-default:@NOTSET@ +SSSRR:v4-default:@NOTSET@ +SSSRR:custom:@NOTSET@ +SSSRN:v0-default:@NOTSET@ +SSSRN:v1-default:@NOTSET@ +SSSRN:v2-default:@NOTSET@ +SSSRN:v3-default:@NOTSET@ +SSSRN:v4-default:@NOTSET@ +SSSRN:custom:@NOTSET@ +SSSNS:v0-default:v0-default +SSSNS:v1-default:v1-default +SSSNS:v2-default:v2-default +SSSNS:v3-default:v5-default +SSSNS:v4-default:v4-default +SSSNS:custom:custom +SSSNK:v0-default:v0-default +SSSNK:v1-default:v1-default +SSSNK:v2-default:v2-default +SSSNK:v3-default:v3-default +SSSNK:v4-default:v4-default +SSSNK:custom:custom +SSSNR:v0-default:@NOTSET@ +SSSNR:v1-default:@NOTSET@ +SSSNR:v2-default:@NOTSET@ +SSSNR:v3-default:@NOTSET@ +SSSNR:v4-default:@NOTSET@ +SSSNR:custom:@NOTSET@ +SSSNN:v0-default:v0-default +SSSNN:v1-default:v1-default +SSSNN:v2-default:v2-default +SSSNN:v3-default:v3-default +SSSNN:v4-default:v4-default +SSSNN:custom:custom +SSKSS:v0-default:v0-default +SSKSS:v1-default:v1-default +SSKSS:v2-default:v5-default +SSKSS:v3-default:v3-default +SSKSS:v4-default:v5-default +SSKSS:custom:custom +SSKSK:v0-default:v0-default +SSKSK:v1-default:v1-default +SSKSK:v2-default:v4-default +SSKSK:v3-default:v3-default +SSKSK:v4-default:v4-default +SSKSK:custom:custom +SSKSR:v0-default:@NOTSET@ +SSKSR:v1-default:@NOTSET@ +SSKSR:v2-default:@NOTSET@ +SSKSR:v3-default:@NOTSET@ +SSKSR:v4-default:@NOTSET@ +SSKSR:custom:@NOTSET@ +SSKSN:v0-default:v0-default +SSKSN:v1-default:v1-default +SSKSN:v2-default:v4-default +SSKSN:v3-default:v3-default +SSKSN:v4-default:v4-default +SSKSN:custom:custom +SSKKS:v0-default:v0-default +SSKKS:v1-default:v1-default +SSKKS:v2-default:v5-default +SSKKS:v3-default:v3-default +SSKKS:v4-default:v4-default +SSKKS:custom:custom +SSKKK:v0-default:v0-default +SSKKK:v1-default:v1-default +SSKKK:v2-default:v2-default +SSKKK:v3-default:v3-default +SSKKK:v4-default:v4-default +SSKKK:custom:custom +SSKKR:v0-default:@NOTSET@ +SSKKR:v1-default:@NOTSET@ +SSKKR:v2-default:@NOTSET@ +SSKKR:v3-default:@NOTSET@ +SSKKR:v4-default:@NOTSET@ +SSKKR:custom:@NOTSET@ +SSKKN:v0-default:v0-default +SSKKN:v1-default:v1-default +SSKKN:v2-default:v2-default +SSKKN:v3-default:v3-default +SSKKN:v4-default:v4-default +SSKKN:custom:custom +SSKRS:v0-default:v5-default +SSKRS:v1-default:v5-default +SSKRS:v2-default:v5-default +SSKRS:v3-default:v5-default +SSKRS:v4-default:v5-default +SSKRS:custom:v5-default +SSKRR:v0-default:@NOTSET@ +SSKRR:v1-default:@NOTSET@ +SSKRR:v2-default:@NOTSET@ +SSKRR:v3-default:@NOTSET@ +SSKRR:v4-default:@NOTSET@ +SSKRR:custom:@NOTSET@ +SSKRN:v0-default:@NOTSET@ +SSKRN:v1-default:@NOTSET@ +SSKRN:v2-default:@NOTSET@ +SSKRN:v3-default:@NOTSET@ +SSKRN:v4-default:@NOTSET@ +SSKRN:custom:@NOTSET@ +SSKNS:v0-default:v0-default +SSKNS:v1-default:v1-default +SSKNS:v2-default:v5-default +SSKNS:v3-default:v3-default +SSKNS:v4-default:v4-default +SSKNS:custom:custom +SSKNK:v0-default:v0-default +SSKNK:v1-default:v1-default +SSKNK:v2-default:v2-default +SSKNK:v3-default:v3-default +SSKNK:v4-default:v4-default +SSKNK:custom:custom +SSKNR:v0-default:@NOTSET@ +SSKNR:v1-default:@NOTSET@ +SSKNR:v2-default:@NOTSET@ +SSKNR:v3-default:@NOTSET@ +SSKNR:v4-default:@NOTSET@ +SSKNR:custom:@NOTSET@ +SSKNN:v0-default:v0-default +SSKNN:v1-default:v1-default +SSKNN:v2-default:v2-default +SSKNN:v3-default:v3-default +SSKNN:v4-default:v4-default +SSKNN:custom:custom +SSRSS:v0-default:v0-default +SSRSS:v1-default:v1-default +SSRSS:v2-default:v5-default +SSRSS:v3-default:v3-default +SSRSS:v4-default:v5-default +SSRSS:custom:custom +SSRSK:v0-default:v0-default +SSRSK:v1-default:v1-default +SSRSK:v2-default:v4-default +SSRSK:v3-default:v3-default +SSRSK:v4-default:v4-default +SSRSK:custom:custom +SSRSR:v0-default:@NOTSET@ +SSRSR:v1-default:@NOTSET@ +SSRSR:v2-default:@NOTSET@ +SSRSR:v3-default:@NOTSET@ +SSRSR:v4-default:@NOTSET@ +SSRSR:custom:@NOTSET@ +SSRSN:v0-default:v0-default +SSRSN:v1-default:v1-default +SSRSN:v2-default:v4-default +SSRSN:v3-default:v3-default +SSRSN:v4-default:v4-default +SSRSN:custom:custom +SSRRS:v0-default:v5-default +SSRRS:v1-default:v5-default +SSRRS:v2-default:v5-default +SSRRS:v3-default:v5-default +SSRRS:v4-default:v5-default +SSRRS:custom:v5-default +SSRRR:v0-default:@NOTSET@ +SSRRR:v1-default:@NOTSET@ +SSRRR:v2-default:@NOTSET@ +SSRRR:v3-default:@NOTSET@ +SSRRR:v4-default:@NOTSET@ +SSRRR:custom:@NOTSET@ +SSRRN:v0-default:@NOTSET@ +SSRRN:v1-default:@NOTSET@ +SSRRN:v2-default:@NOTSET@ +SSRRN:v3-default:@NOTSET@ +SSRRN:v4-default:@NOTSET@ +SSRRN:custom:@NOTSET@ +SSRNS:v0-default:v0-default +SSRNS:v1-default:v1-default +SSRNS:v2-default:v5-default +SSRNS:v3-default:v3-default +SSRNS:v4-default:v4-default +SSRNS:custom:custom +SSRNR:v0-default:@NOTSET@ +SSRNR:v1-default:@NOTSET@ +SSRNR:v2-default:@NOTSET@ +SSRNR:v3-default:@NOTSET@ +SSRNR:v4-default:@NOTSET@ +SSRNR:custom:@NOTSET@ +SSRNN:v0-default:v0-default +SSRNN:v1-default:v1-default +SSRNN:v2-default:v2-default +SSRNN:v3-default:v3-default +SSRNN:v4-default:v4-default +SSRNN:custom:custom +SSNSS:v0-default:v0-default +SSNSS:v1-default:v1-default +SSNSS:v2-default:v5-default +SSNSS:v3-default:v3-default +SSNSS:v4-default:v5-default +SSNSS:custom:custom +SSNSK:v0-default:v0-default +SSNSK:v1-default:v1-default +SSNSK:v2-default:v4-default +SSNSK:v3-default:v3-default +SSNSK:v4-default:v4-default +SSNSK:custom:custom +SSNSR:v0-default:@NOTSET@ +SSNSR:v1-default:@NOTSET@ +SSNSR:v2-default:@NOTSET@ +SSNSR:v3-default:@NOTSET@ +SSNSR:v4-default:@NOTSET@ +SSNSR:custom:@NOTSET@ +SSNSN:v0-default:v0-default +SSNSN:v1-default:v1-default +SSNSN:v2-default:v4-default +SSNSN:v3-default:v3-default +SSNSN:v4-default:v4-default +SSNSN:custom:custom +SSNKS:v0-default:v0-default +SSNKS:v1-default:v1-default +SSNKS:v2-default:v5-default +SSNKS:v3-default:v3-default +SSNKS:v4-default:v4-default +SSNKS:custom:custom +SSNKK:v0-default:v0-default +SSNKK:v1-default:v1-default +SSNKK:v2-default:v2-default +SSNKK:v3-default:v3-default +SSNKK:v4-default:v4-default +SSNKK:custom:custom +SSNKR:v0-default:@NOTSET@ +SSNKR:v1-default:@NOTSET@ +SSNKR:v2-default:@NOTSET@ +SSNKR:v3-default:@NOTSET@ +SSNKR:v4-default:@NOTSET@ +SSNKR:custom:@NOTSET@ +SSNKN:v0-default:v0-default +SSNKN:v1-default:v1-default +SSNKN:v2-default:v2-default +SSNKN:v3-default:v3-default +SSNKN:v4-default:v4-default +SSNKN:custom:custom +SSNRS:v0-default:v5-default +SSNRS:v1-default:v5-default +SSNRS:v2-default:v5-default +SSNRS:v3-default:v5-default +SSNRS:v4-default:v5-default +SSNRS:custom:v5-default +SSNRR:v0-default:@NOTSET@ +SSNRR:v1-default:@NOTSET@ +SSNRR:v2-default:@NOTSET@ +SSNRR:v3-default:@NOTSET@ +SSNRR:v4-default:@NOTSET@ +SSNRR:custom:@NOTSET@ +SSNRN:v0-default:@NOTSET@ +SSNRN:v1-default:@NOTSET@ +SSNRN:v2-default:@NOTSET@ +SSNRN:v3-default:@NOTSET@ +SSNRN:v4-default:@NOTSET@ +SSNRN:custom:@NOTSET@ +SSNNS:v0-default:v0-default +SSNNS:v1-default:v1-default +SSNNS:v2-default:v5-default +SSNNS:v3-default:v3-default +SSNNS:v4-default:v4-default +SSNNS:custom:custom +SSNNK:v0-default:v0-default +SSNNK:v1-default:v1-default +SSNNK:v2-default:v2-default +SSNNK:v3-default:v3-default +SSNNK:v4-default:v4-default +SSNNK:custom:custom +SSNNR:v0-default:@NOTSET@ +SSNNR:v1-default:@NOTSET@ +SSNNR:v2-default:@NOTSET@ +SSNNR:v3-default:@NOTSET@ +SSNNR:v4-default:@NOTSET@ +SSNNR:custom:@NOTSET@ +SSNNN:v0-default:v0-default +SSNNN:v1-default:v1-default +SSNNN:v2-default:v2-default +SSNNN:v3-default:v3-default +SSNNN:v4-default:v4-default +SSNNN:custom:custom +SKSSS:v0-default:v0-default +SKSSS:v1-default:v1-default +SKSSS:v2-default:v2-default +SKSSS:v3-default:v5-default +SKSSS:v4-default:v5-default +SKSSS:custom:custom +SKSSK:v0-default:v0-default +SKSSK:v1-default:v1-default +SKSSK:v2-default:v2-default +SKSSK:v3-default:v4-default +SKSSK:v4-default:v4-default +SKSSK:custom:custom +SKSSR:v0-default:@NOTSET@ +SKSSR:v1-default:@NOTSET@ +SKSSR:v2-default:@NOTSET@ +SKSSR:v3-default:@NOTSET@ +SKSSR:v4-default:@NOTSET@ +SKSSR:custom:@NOTSET@ +SKSSN:v0-default:v0-default +SKSSN:v1-default:v1-default +SKSSN:v2-default:v2-default +SKSSN:v3-default:v4-default +SKSSN:v4-default:v4-default +SKSSN:custom:custom +SKSKS:v0-default:v0-default +SKSKS:v1-default:v1-default +SKSKS:v2-default:v2-default +SKSKS:v3-default:v5-default +SKSKS:v4-default:v4-default +SKSKS:custom:custom +SKSKK:v0-default:v0-default +SKSKK:v1-default:v1-default +SKSKK:v2-default:v2-default +SKSKK:v3-default:v3-default +SKSKK:v4-default:v4-default +SKSKK:custom:custom +SKSKR:v0-default:@NOTSET@ +SKSKR:v1-default:@NOTSET@ +SKSKR:v2-default:@NOTSET@ +SKSKR:v3-default:@NOTSET@ +SKSKR:v4-default:@NOTSET@ +SKSKR:custom:@NOTSET@ +SKSKN:v0-default:v0-default +SKSKN:v1-default:v1-default +SKSKN:v2-default:v2-default +SKSKN:v3-default:v3-default +SKSKN:v4-default:v4-default +SKSKN:custom:custom +SKSRS:v0-default:v5-default +SKSRS:v1-default:v5-default +SKSRS:v2-default:v5-default +SKSRS:v3-default:v5-default +SKSRS:v4-default:v5-default +SKSRS:custom:v5-default +SKSRR:v0-default:@NOTSET@ +SKSRR:v1-default:@NOTSET@ +SKSRR:v2-default:@NOTSET@ +SKSRR:v3-default:@NOTSET@ +SKSRR:v4-default:@NOTSET@ +SKSRR:custom:@NOTSET@ +SKSRN:v0-default:@NOTSET@ +SKSRN:v1-default:@NOTSET@ +SKSRN:v2-default:@NOTSET@ +SKSRN:v3-default:@NOTSET@ +SKSRN:v4-default:@NOTSET@ +SKSRN:custom:@NOTSET@ +SKSNS:v0-default:v0-default +SKSNS:v1-default:v1-default +SKSNS:v2-default:v2-default +SKSNS:v3-default:v5-default +SKSNS:v4-default:v4-default +SKSNS:custom:custom +SKSNK:v0-default:v0-default +SKSNK:v1-default:v1-default +SKSNK:v2-default:v2-default +SKSNK:v3-default:v3-default +SKSNK:v4-default:v4-default +SKSNK:custom:custom +SKSNR:v0-default:@NOTSET@ +SKSNR:v1-default:@NOTSET@ +SKSNR:v2-default:@NOTSET@ +SKSNR:v3-default:@NOTSET@ +SKSNR:v4-default:@NOTSET@ +SKSNR:custom:@NOTSET@ +SKSNN:v0-default:v0-default +SKSNN:v1-default:v1-default +SKSNN:v2-default:v2-default +SKSNN:v3-default:v3-default +SKSNN:v4-default:v4-default +SKSNN:custom:custom +SKKSS:v0-default:v0-default +SKKSS:v1-default:v5-default +SKKSS:v2-default:v2-default +SKKSS:v3-default:v3-default +SKKSS:v4-default:v5-default +SKKSS:custom:custom +SKKSK:v0-default:v0-default +SKKSK:v1-default:v4-default +SKKSK:v2-default:v2-default +SKKSK:v3-default:v3-default +SKKSK:v4-default:v4-default +SKKSK:custom:custom +SKKSR:v0-default:@NOTSET@ +SKKSR:v1-default:@NOTSET@ +SKKSR:v2-default:@NOTSET@ +SKKSR:v3-default:@NOTSET@ +SKKSR:v4-default:@NOTSET@ +SKKSR:custom:@NOTSET@ +SKKSN:v0-default:v0-default +SKKSN:v1-default:v4-default +SKKSN:v2-default:v2-default +SKKSN:v3-default:v3-default +SKKSN:v4-default:v4-default +SKKSN:custom:custom +SKKKS:v0-default:v0-default +SKKKS:v1-default:v5-default +SKKKS:v2-default:v2-default +SKKKS:v3-default:v3-default +SKKKS:v4-default:v4-default +SKKKS:custom:custom +SKKKK:v0-default:v0-default +SKKKK:v1-default:v1-default +SKKKK:v2-default:v2-default +SKKKK:v3-default:v3-default +SKKKK:v4-default:v4-default +SKKKK:custom:custom +SKKKR:v0-default:@NOTSET@ +SKKKR:v1-default:@NOTSET@ +SKKKR:v2-default:@NOTSET@ +SKKKR:v3-default:@NOTSET@ +SKKKR:v4-default:@NOTSET@ +SKKKR:custom:@NOTSET@ +SKKKN:v0-default:v0-default +SKKKN:v1-default:v1-default +SKKKN:v2-default:v2-default +SKKKN:v3-default:v3-default +SKKKN:v4-default:v4-default +SKKKN:custom:custom +SKKRS:v0-default:v5-default +SKKRS:v1-default:v5-default +SKKRS:v2-default:v5-default +SKKRS:v3-default:v5-default +SKKRS:v4-default:v5-default +SKKRS:custom:v5-default +SKKRR:v0-default:@NOTSET@ +SKKRR:v1-default:@NOTSET@ +SKKRR:v2-default:@NOTSET@ +SKKRR:v3-default:@NOTSET@ +SKKRR:v4-default:@NOTSET@ +SKKRR:custom:@NOTSET@ +SKKRN:v0-default:@NOTSET@ +SKKRN:v1-default:@NOTSET@ +SKKRN:v2-default:@NOTSET@ +SKKRN:v3-default:@NOTSET@ +SKKRN:v4-default:@NOTSET@ +SKKRN:custom:@NOTSET@ +SKKNS:v0-default:v0-default +SKKNS:v1-default:v5-default +SKKNS:v2-default:v2-default +SKKNS:v3-default:v3-default +SKKNS:v4-default:v4-default +SKKNS:custom:custom +SKKNK:v0-default:v0-default +SKKNK:v1-default:v1-default +SKKNK:v2-default:v2-default +SKKNK:v3-default:v3-default +SKKNK:v4-default:v4-default +SKKNK:custom:custom +SKKNR:v0-default:@NOTSET@ +SKKNR:v1-default:@NOTSET@ +SKKNR:v2-default:@NOTSET@ +SKKNR:v3-default:@NOTSET@ +SKKNR:v4-default:@NOTSET@ +SKKNR:custom:@NOTSET@ +SKKNN:v0-default:v0-default +SKKNN:v1-default:v1-default +SKKNN:v2-default:v2-default +SKKNN:v3-default:v3-default +SKKNN:v4-default:v4-default +SKKNN:custom:custom +SKRSS:v0-default:v0-default +SKRSS:v1-default:v5-default +SKRSS:v2-default:v2-default +SKRSS:v3-default:v3-default +SKRSS:v4-default:v5-default +SKRSS:custom:custom +SKRSK:v0-default:v0-default +SKRSK:v1-default:v4-default +SKRSK:v2-default:v2-default +SKRSK:v3-default:v3-default +SKRSK:v4-default:v4-default +SKRSK:custom:custom +SKRSR:v0-default:@NOTSET@ +SKRSR:v1-default:@NOTSET@ +SKRSR:v2-default:@NOTSET@ +SKRSR:v3-default:@NOTSET@ +SKRSR:v4-default:@NOTSET@ +SKRSR:custom:@NOTSET@ +SKRSN:v0-default:v0-default +SKRSN:v1-default:v4-default +SKRSN:v2-default:v2-default +SKRSN:v3-default:v3-default +SKRSN:v4-default:v4-default +SKRSN:custom:custom +SKRRS:v0-default:v5-default +SKRRS:v1-default:v5-default +SKRRS:v2-default:v5-default +SKRRS:v3-default:v5-default +SKRRS:v4-default:v5-default +SKRRS:custom:v5-default +SKRRR:v0-default:@NOTSET@ +SKRRR:v1-default:@NOTSET@ +SKRRR:v2-default:@NOTSET@ +SKRRR:v3-default:@NOTSET@ +SKRRR:v4-default:@NOTSET@ +SKRRR:custom:@NOTSET@ +SKRRN:v0-default:@NOTSET@ +SKRRN:v1-default:@NOTSET@ +SKRRN:v2-default:@NOTSET@ +SKRRN:v3-default:@NOTSET@ +SKRRN:v4-default:@NOTSET@ +SKRRN:custom:@NOTSET@ +SKRNS:v0-default:v0-default +SKRNS:v1-default:v5-default +SKRNS:v2-default:v2-default +SKRNS:v3-default:v3-default +SKRNS:v4-default:v4-default +SKRNS:custom:custom +SKRNR:v0-default:@NOTSET@ +SKRNR:v1-default:@NOTSET@ +SKRNR:v2-default:@NOTSET@ +SKRNR:v3-default:@NOTSET@ +SKRNR:v4-default:@NOTSET@ +SKRNR:custom:@NOTSET@ +SKRNN:v0-default:v0-default +SKRNN:v1-default:v1-default +SKRNN:v2-default:v2-default +SKRNN:v3-default:v3-default +SKRNN:v4-default:v4-default +SKRNN:custom:custom +SKNSS:v0-default:v0-default +SKNSS:v1-default:v5-default +SKNSS:v2-default:v2-default +SKNSS:v3-default:v3-default +SKNSS:v4-default:v5-default +SKNSS:custom:custom +SKNSK:v0-default:v0-default +SKNSK:v1-default:v4-default +SKNSK:v2-default:v2-default +SKNSK:v3-default:v3-default +SKNSK:v4-default:v4-default +SKNSK:custom:custom +SKNSR:v0-default:@NOTSET@ +SKNSR:v1-default:@NOTSET@ +SKNSR:v2-default:@NOTSET@ +SKNSR:v3-default:@NOTSET@ +SKNSR:v4-default:@NOTSET@ +SKNSR:custom:@NOTSET@ +SKNSN:v0-default:v0-default +SKNSN:v1-default:v4-default +SKNSN:v2-default:v2-default +SKNSN:v3-default:v3-default +SKNSN:v4-default:v4-default +SKNSN:custom:custom +SKNKS:v0-default:v0-default +SKNKS:v1-default:v5-default +SKNKS:v2-default:v2-default +SKNKS:v3-default:v3-default +SKNKS:v4-default:v4-default +SKNKS:custom:custom +SKNKK:v0-default:v0-default +SKNKK:v1-default:v1-default +SKNKK:v2-default:v2-default +SKNKK:v3-default:v3-default +SKNKK:v4-default:v4-default +SKNKK:custom:custom +SKNKR:v0-default:@NOTSET@ +SKNKR:v1-default:@NOTSET@ +SKNKR:v2-default:@NOTSET@ +SKNKR:v3-default:@NOTSET@ +SKNKR:v4-default:@NOTSET@ +SKNKR:custom:@NOTSET@ +SKNKN:v0-default:v0-default +SKNKN:v1-default:v1-default +SKNKN:v2-default:v2-default +SKNKN:v3-default:v3-default +SKNKN:v4-default:v4-default +SKNKN:custom:custom +SKNRS:v0-default:v5-default +SKNRS:v1-default:v5-default +SKNRS:v2-default:v5-default +SKNRS:v3-default:v5-default +SKNRS:v4-default:v5-default +SKNRS:custom:v5-default +SKNRR:v0-default:@NOTSET@ +SKNRR:v1-default:@NOTSET@ +SKNRR:v2-default:@NOTSET@ +SKNRR:v3-default:@NOTSET@ +SKNRR:v4-default:@NOTSET@ +SKNRR:custom:@NOTSET@ +SKNRN:v0-default:@NOTSET@ +SKNRN:v1-default:@NOTSET@ +SKNRN:v2-default:@NOTSET@ +SKNRN:v3-default:@NOTSET@ +SKNRN:v4-default:@NOTSET@ +SKNRN:custom:@NOTSET@ +SKNNS:v0-default:v0-default +SKNNS:v1-default:v5-default +SKNNS:v2-default:v2-default +SKNNS:v3-default:v3-default +SKNNS:v4-default:v4-default +SKNNS:custom:custom +SKNNK:v0-default:v0-default +SKNNK:v1-default:v1-default +SKNNK:v2-default:v2-default +SKNNK:v3-default:v3-default +SKNNK:v4-default:v4-default +SKNNK:custom:custom +SKNNR:v0-default:@NOTSET@ +SKNNR:v1-default:@NOTSET@ +SKNNR:v2-default:@NOTSET@ +SKNNR:v3-default:@NOTSET@ +SKNNR:v4-default:@NOTSET@ +SKNNR:custom:@NOTSET@ +SKNNN:v0-default:v0-default +SKNNN:v1-default:v1-default +SKNNN:v2-default:v2-default +SKNNN:v3-default:v3-default +SKNNN:v4-default:v4-default +SKNNN:custom:custom +SRSSS:v0-default:v0-default +SRSSS:v1-default:v1-default +SRSSS:v2-default:v2-default +SRSSS:v3-default:v5-default +SRSSS:v4-default:v5-default +SRSSS:custom:custom +SRSSK:v0-default:v0-default +SRSSK:v1-default:v1-default +SRSSK:v2-default:v2-default +SRSSK:v3-default:v4-default +SRSSK:v4-default:v4-default +SRSSK:custom:custom +SRSSR:v0-default:@NOTSET@ +SRSSR:v1-default:@NOTSET@ +SRSSR:v2-default:@NOTSET@ +SRSSR:v3-default:@NOTSET@ +SRSSR:v4-default:@NOTSET@ +SRSSR:custom:@NOTSET@ +SRSSN:v0-default:v0-default +SRSSN:v1-default:v1-default +SRSSN:v2-default:v2-default +SRSSN:v3-default:v4-default +SRSSN:v4-default:v4-default +SRSSN:custom:custom +SRSKS:v0-default:v0-default +SRSKS:v1-default:v1-default +SRSKS:v2-default:v2-default +SRSKS:v3-default:v5-default +SRSKS:v4-default:v4-default +SRSKS:custom:custom +SRSKK:v0-default:v0-default +SRSKK:v1-default:v1-default +SRSKK:v2-default:v2-default +SRSKK:v3-default:v3-default +SRSKK:v4-default:v4-default +SRSKK:custom:custom +SRSKR:v0-default:@NOTSET@ +SRSKR:v1-default:@NOTSET@ +SRSKR:v2-default:@NOTSET@ +SRSKR:v3-default:@NOTSET@ +SRSKR:v4-default:@NOTSET@ +SRSKR:custom:@NOTSET@ +SRSKN:v0-default:v0-default +SRSKN:v1-default:v1-default +SRSKN:v2-default:v2-default +SRSKN:v3-default:v3-default +SRSKN:v4-default:v4-default +SRSKN:custom:custom +SRSRS:v0-default:v5-default +SRSRS:v1-default:v5-default +SRSRS:v2-default:v5-default +SRSRS:v3-default:v5-default +SRSRS:v4-default:v5-default +SRSRS:custom:v5-default +SRSRR:v0-default:@NOTSET@ +SRSRR:v1-default:@NOTSET@ +SRSRR:v2-default:@NOTSET@ +SRSRR:v3-default:@NOTSET@ +SRSRR:v4-default:@NOTSET@ +SRSRR:custom:@NOTSET@ +SRSRN:v0-default:@NOTSET@ +SRSRN:v1-default:@NOTSET@ +SRSRN:v2-default:@NOTSET@ +SRSRN:v3-default:@NOTSET@ +SRSRN:v4-default:@NOTSET@ +SRSRN:custom:@NOTSET@ +SRSNS:v0-default:v0-default +SRSNS:v1-default:v1-default +SRSNS:v2-default:v2-default +SRSNS:v3-default:v5-default +SRSNS:v4-default:v4-default +SRSNS:custom:custom +SRSNK:v0-default:v0-default +SRSNK:v1-default:v1-default +SRSNK:v2-default:v2-default +SRSNK:v3-default:v3-default +SRSNK:v4-default:v4-default +SRSNK:custom:custom +SRSNR:v0-default:@NOTSET@ +SRSNR:v1-default:@NOTSET@ +SRSNR:v2-default:@NOTSET@ +SRSNR:v3-default:@NOTSET@ +SRSNR:v4-default:@NOTSET@ +SRSNR:custom:@NOTSET@ +SRSNN:v0-default:v0-default +SRSNN:v1-default:v1-default +SRSNN:v2-default:v2-default +SRSNN:v3-default:v3-default +SRSNN:v4-default:v4-default +SRSNN:custom:custom +SRRSS:v0-default:v0-default +SRRSS:v1-default:v5-default +SRRSS:v2-default:v2-default +SRRSS:v3-default:v3-default +SRRSS:v4-default:v5-default +SRRSS:custom:custom +SRRSK:v0-default:v0-default +SRRSK:v1-default:v4-default +SRRSK:v2-default:v2-default +SRRSK:v3-default:v3-default +SRRSK:v4-default:v4-default +SRRSK:custom:custom +SRRSR:v0-default:@NOTSET@ +SRRSR:v1-default:@NOTSET@ +SRRSR:v2-default:@NOTSET@ +SRRSR:v3-default:@NOTSET@ +SRRSR:v4-default:@NOTSET@ +SRRSR:custom:@NOTSET@ +SRRSN:v0-default:v0-default +SRRSN:v1-default:v4-default +SRRSN:v2-default:v2-default +SRRSN:v3-default:v3-default +SRRSN:v4-default:v4-default +SRRSN:custom:custom +SRRRS:v0-default:v5-default +SRRRS:v1-default:v5-default +SRRRS:v2-default:v5-default +SRRRS:v3-default:v5-default +SRRRS:v4-default:v5-default +SRRRS:custom:v5-default +SRRRR:v0-default:@NOTSET@ +SRRRR:v1-default:@NOTSET@ +SRRRR:v2-default:@NOTSET@ +SRRRR:v3-default:@NOTSET@ +SRRRR:v4-default:@NOTSET@ +SRRRR:custom:@NOTSET@ +SRRRN:v0-default:@NOTSET@ +SRRRN:v1-default:@NOTSET@ +SRRRN:v2-default:@NOTSET@ +SRRRN:v3-default:@NOTSET@ +SRRRN:v4-default:@NOTSET@ +SRRRN:custom:@NOTSET@ +SRRNS:v0-default:v0-default +SRRNS:v1-default:v5-default +SRRNS:v2-default:v2-default +SRRNS:v3-default:v3-default +SRRNS:v4-default:v4-default +SRRNS:custom:custom +SRRNR:v0-default:@NOTSET@ +SRRNR:v1-default:@NOTSET@ +SRRNR:v2-default:@NOTSET@ +SRRNR:v3-default:@NOTSET@ +SRRNR:v4-default:@NOTSET@ +SRRNR:custom:@NOTSET@ +SRRNN:v0-default:v0-default +SRRNN:v1-default:v1-default +SRRNN:v2-default:v2-default +SRRNN:v3-default:v3-default +SRRNN:v4-default:v4-default +SRRNN:custom:custom +SRNSS:v0-default:v0-default +SRNSS:v1-default:v5-default +SRNSS:v2-default:v2-default +SRNSS:v3-default:v3-default +SRNSS:v4-default:v5-default +SRNSS:custom:custom +SRNSK:v0-default:v0-default +SRNSK:v1-default:v4-default +SRNSK:v2-default:v2-default +SRNSK:v3-default:v3-default +SRNSK:v4-default:v4-default +SRNSK:custom:custom +SRNSR:v0-default:@NOTSET@ +SRNSR:v1-default:@NOTSET@ +SRNSR:v2-default:@NOTSET@ +SRNSR:v3-default:@NOTSET@ +SRNSR:v4-default:@NOTSET@ +SRNSR:custom:@NOTSET@ +SRNSN:v0-default:v0-default +SRNSN:v1-default:v4-default +SRNSN:v2-default:v2-default +SRNSN:v3-default:v3-default +SRNSN:v4-default:v4-default +SRNSN:custom:custom +SRNRS:v0-default:v5-default +SRNRS:v1-default:v5-default +SRNRS:v2-default:v5-default +SRNRS:v3-default:v5-default +SRNRS:v4-default:v5-default +SRNRS:custom:v5-default +SRNRR:v0-default:@NOTSET@ +SRNRR:v1-default:@NOTSET@ +SRNRR:v2-default:@NOTSET@ +SRNRR:v3-default:@NOTSET@ +SRNRR:v4-default:@NOTSET@ +SRNRR:custom:@NOTSET@ +SRNRN:v0-default:@NOTSET@ +SRNRN:v1-default:@NOTSET@ +SRNRN:v2-default:@NOTSET@ +SRNRN:v3-default:@NOTSET@ +SRNRN:v4-default:@NOTSET@ +SRNRN:custom:@NOTSET@ +SRNNS:v0-default:v0-default +SRNNS:v1-default:v5-default +SRNNS:v2-default:v2-default +SRNNS:v3-default:v3-default +SRNNS:v4-default:v4-default +SRNNS:custom:custom +SRNNR:v0-default:@NOTSET@ +SRNNR:v1-default:@NOTSET@ +SRNNR:v2-default:@NOTSET@ +SRNNR:v3-default:@NOTSET@ +SRNNR:v4-default:@NOTSET@ +SRNNR:custom:@NOTSET@ +SRNNN:v0-default:v0-default +SRNNN:v1-default:v1-default +SRNNN:v2-default:v2-default +SRNNN:v3-default:v3-default +SRNNN:v4-default:v4-default +SRNNN:custom:custom +SNSSS:v0-default:v0-default +SNSSS:v1-default:v1-default +SNSSS:v2-default:v2-default +SNSSS:v3-default:v5-default +SNSSS:v4-default:v5-default +SNSSS:custom:custom +SNSSK:v0-default:v0-default +SNSSK:v1-default:v1-default +SNSSK:v2-default:v2-default +SNSSK:v3-default:v4-default +SNSSK:v4-default:v4-default +SNSSK:custom:custom +SNSSR:v0-default:@NOTSET@ +SNSSR:v1-default:@NOTSET@ +SNSSR:v2-default:@NOTSET@ +SNSSR:v3-default:@NOTSET@ +SNSSR:v4-default:@NOTSET@ +SNSSR:custom:@NOTSET@ +SNSSN:v0-default:v0-default +SNSSN:v1-default:v1-default +SNSSN:v2-default:v2-default +SNSSN:v3-default:v4-default +SNSSN:v4-default:v4-default +SNSSN:custom:custom +SNSKS:v0-default:v0-default +SNSKS:v1-default:v1-default +SNSKS:v2-default:v2-default +SNSKS:v3-default:v5-default +SNSKS:v4-default:v4-default +SNSKS:custom:custom +SNSKK:v0-default:v0-default +SNSKK:v1-default:v1-default +SNSKK:v2-default:v2-default +SNSKK:v3-default:v3-default +SNSKK:v4-default:v4-default +SNSKK:custom:custom +SNSKR:v0-default:@NOTSET@ +SNSKR:v1-default:@NOTSET@ +SNSKR:v2-default:@NOTSET@ +SNSKR:v3-default:@NOTSET@ +SNSKR:v4-default:@NOTSET@ +SNSKR:custom:@NOTSET@ +SNSKN:v0-default:v0-default +SNSKN:v1-default:v1-default +SNSKN:v2-default:v2-default +SNSKN:v3-default:v3-default +SNSKN:v4-default:v4-default +SNSKN:custom:custom +SNSRS:v0-default:v5-default +SNSRS:v1-default:v5-default +SNSRS:v2-default:v5-default +SNSRS:v3-default:v5-default +SNSRS:v4-default:v5-default +SNSRS:custom:v5-default +SNSRR:v0-default:@NOTSET@ +SNSRR:v1-default:@NOTSET@ +SNSRR:v2-default:@NOTSET@ +SNSRR:v3-default:@NOTSET@ +SNSRR:v4-default:@NOTSET@ +SNSRR:custom:@NOTSET@ +SNSRN:v0-default:@NOTSET@ +SNSRN:v1-default:@NOTSET@ +SNSRN:v2-default:@NOTSET@ +SNSRN:v3-default:@NOTSET@ +SNSRN:v4-default:@NOTSET@ +SNSRN:custom:@NOTSET@ +SNSNS:v0-default:v0-default +SNSNS:v1-default:v1-default +SNSNS:v2-default:v2-default +SNSNS:v3-default:v5-default +SNSNS:v4-default:v4-default +SNSNS:custom:custom +SNSNK:v0-default:v0-default +SNSNK:v1-default:v1-default +SNSNK:v2-default:v2-default +SNSNK:v3-default:v3-default +SNSNK:v4-default:v4-default +SNSNK:custom:custom +SNSNR:v0-default:@NOTSET@ +SNSNR:v1-default:@NOTSET@ +SNSNR:v2-default:@NOTSET@ +SNSNR:v3-default:@NOTSET@ +SNSNR:v4-default:@NOTSET@ +SNSNR:custom:@NOTSET@ +SNSNN:v0-default:v0-default +SNSNN:v1-default:v1-default +SNSNN:v2-default:v2-default +SNSNN:v3-default:v3-default +SNSNN:v4-default:v4-default +SNSNN:custom:custom +SNKSS:v0-default:v0-default +SNKSS:v1-default:v5-default +SNKSS:v2-default:v2-default +SNKSS:v3-default:v3-default +SNKSS:v4-default:v5-default +SNKSS:custom:custom +SNKSK:v0-default:v0-default +SNKSK:v1-default:v4-default +SNKSK:v2-default:v2-default +SNKSK:v3-default:v3-default +SNKSK:v4-default:v4-default +SNKSK:custom:custom +SNKSR:v0-default:@NOTSET@ +SNKSR:v1-default:@NOTSET@ +SNKSR:v2-default:@NOTSET@ +SNKSR:v3-default:@NOTSET@ +SNKSR:v4-default:@NOTSET@ +SNKSR:custom:@NOTSET@ +SNKSN:v0-default:v0-default +SNKSN:v1-default:v4-default +SNKSN:v2-default:v2-default +SNKSN:v3-default:v3-default +SNKSN:v4-default:v4-default +SNKSN:custom:custom +SNKKS:v0-default:v0-default +SNKKS:v1-default:v5-default +SNKKS:v2-default:v2-default +SNKKS:v3-default:v3-default +SNKKS:v4-default:v4-default +SNKKS:custom:custom +SNKKK:v0-default:v0-default +SNKKK:v1-default:v1-default +SNKKK:v2-default:v2-default +SNKKK:v3-default:v3-default +SNKKK:v4-default:v4-default +SNKKK:custom:custom +SNKKR:v0-default:@NOTSET@ +SNKKR:v1-default:@NOTSET@ +SNKKR:v2-default:@NOTSET@ +SNKKR:v3-default:@NOTSET@ +SNKKR:v4-default:@NOTSET@ +SNKKR:custom:@NOTSET@ +SNKKN:v0-default:v0-default +SNKKN:v1-default:v1-default +SNKKN:v2-default:v2-default +SNKKN:v3-default:v3-default +SNKKN:v4-default:v4-default +SNKKN:custom:custom +SNKRS:v0-default:v5-default +SNKRS:v1-default:v5-default +SNKRS:v2-default:v5-default +SNKRS:v3-default:v5-default +SNKRS:v4-default:v5-default +SNKRS:custom:v5-default +SNKRR:v0-default:@NOTSET@ +SNKRR:v1-default:@NOTSET@ +SNKRR:v2-default:@NOTSET@ +SNKRR:v3-default:@NOTSET@ +SNKRR:v4-default:@NOTSET@ +SNKRR:custom:@NOTSET@ +SNKRN:v0-default:@NOTSET@ +SNKRN:v1-default:@NOTSET@ +SNKRN:v2-default:@NOTSET@ +SNKRN:v3-default:@NOTSET@ +SNKRN:v4-default:@NOTSET@ +SNKRN:custom:@NOTSET@ +SNKNS:v0-default:v0-default +SNKNS:v1-default:v5-default +SNKNS:v2-default:v2-default +SNKNS:v3-default:v3-default +SNKNS:v4-default:v4-default +SNKNS:custom:custom +SNKNK:v0-default:v0-default +SNKNK:v1-default:v1-default +SNKNK:v2-default:v2-default +SNKNK:v3-default:v3-default +SNKNK:v4-default:v4-default +SNKNK:custom:custom +SNKNR:v0-default:@NOTSET@ +SNKNR:v1-default:@NOTSET@ +SNKNR:v2-default:@NOTSET@ +SNKNR:v3-default:@NOTSET@ +SNKNR:v4-default:@NOTSET@ +SNKNR:custom:@NOTSET@ +SNKNN:v0-default:v0-default +SNKNN:v1-default:v1-default +SNKNN:v2-default:v2-default +SNKNN:v3-default:v3-default +SNKNN:v4-default:v4-default +SNKNN:custom:custom +SNRSS:v0-default:v0-default +SNRSS:v1-default:v5-default +SNRSS:v2-default:v2-default +SNRSS:v3-default:v3-default +SNRSS:v4-default:v5-default +SNRSS:custom:custom +SNRSK:v0-default:v0-default +SNRSK:v1-default:v4-default +SNRSK:v2-default:v2-default +SNRSK:v3-default:v3-default +SNRSK:v4-default:v4-default +SNRSK:custom:custom +SNRSR:v0-default:@NOTSET@ +SNRSR:v1-default:@NOTSET@ +SNRSR:v2-default:@NOTSET@ +SNRSR:v3-default:@NOTSET@ +SNRSR:v4-default:@NOTSET@ +SNRSR:custom:@NOTSET@ +SNRSN:v0-default:v0-default +SNRSN:v1-default:v4-default +SNRSN:v2-default:v2-default +SNRSN:v3-default:v3-default +SNRSN:v4-default:v4-default +SNRSN:custom:custom +SNRRS:v0-default:v5-default +SNRRS:v1-default:v5-default +SNRRS:v2-default:v5-default +SNRRS:v3-default:v5-default +SNRRS:v4-default:v5-default +SNRRS:custom:v5-default +SNRRR:v0-default:@NOTSET@ +SNRRR:v1-default:@NOTSET@ +SNRRR:v2-default:@NOTSET@ +SNRRR:v3-default:@NOTSET@ +SNRRR:v4-default:@NOTSET@ +SNRRR:custom:@NOTSET@ +SNRRN:v0-default:@NOTSET@ +SNRRN:v1-default:@NOTSET@ +SNRRN:v2-default:@NOTSET@ +SNRRN:v3-default:@NOTSET@ +SNRRN:v4-default:@NOTSET@ +SNRRN:custom:@NOTSET@ +SNRNS:v0-default:v0-default +SNRNS:v1-default:v5-default +SNRNS:v2-default:v2-default +SNRNS:v3-default:v3-default +SNRNS:v4-default:v4-default +SNRNS:custom:custom +SNRNR:v0-default:@NOTSET@ +SNRNR:v1-default:@NOTSET@ +SNRNR:v2-default:@NOTSET@ +SNRNR:v3-default:@NOTSET@ +SNRNR:v4-default:@NOTSET@ +SNRNR:custom:@NOTSET@ +SNRNN:v0-default:v0-default +SNRNN:v1-default:v1-default +SNRNN:v2-default:v2-default +SNRNN:v3-default:v3-default +SNRNN:v4-default:v4-default +SNRNN:custom:custom +SNNSS:v0-default:v0-default +SNNSS:v1-default:v5-default +SNNSS:v2-default:v2-default +SNNSS:v3-default:v3-default +SNNSS:v4-default:v5-default +SNNSS:custom:custom +SNNSK:v0-default:v0-default +SNNSK:v1-default:v4-default +SNNSK:v2-default:v2-default +SNNSK:v3-default:v3-default +SNNSK:v4-default:v4-default +SNNSK:custom:custom +SNNSR:v0-default:@NOTSET@ +SNNSR:v1-default:@NOTSET@ +SNNSR:v2-default:@NOTSET@ +SNNSR:v3-default:@NOTSET@ +SNNSR:v4-default:@NOTSET@ +SNNSR:custom:@NOTSET@ +SNNSN:v0-default:v0-default +SNNSN:v1-default:v4-default +SNNSN:v2-default:v2-default +SNNSN:v3-default:v3-default +SNNSN:v4-default:v4-default +SNNSN:custom:custom +SNNKS:v0-default:v0-default +SNNKS:v1-default:v5-default +SNNKS:v2-default:v2-default +SNNKS:v3-default:v3-default +SNNKS:v4-default:v4-default +SNNKS:custom:custom +SNNKK:v0-default:v0-default +SNNKK:v1-default:v1-default +SNNKK:v2-default:v2-default +SNNKK:v3-default:v3-default +SNNKK:v4-default:v4-default +SNNKK:custom:custom +SNNKR:v0-default:@NOTSET@ +SNNKR:v1-default:@NOTSET@ +SNNKR:v2-default:@NOTSET@ +SNNKR:v3-default:@NOTSET@ +SNNKR:v4-default:@NOTSET@ +SNNKR:custom:@NOTSET@ +SNNKN:v0-default:v0-default +SNNKN:v1-default:v1-default +SNNKN:v2-default:v2-default +SNNKN:v3-default:v3-default +SNNKN:v4-default:v4-default +SNNKN:custom:custom +SNNRS:v0-default:v5-default +SNNRS:v1-default:v5-default +SNNRS:v2-default:v5-default +SNNRS:v3-default:v5-default +SNNRS:v4-default:v5-default +SNNRS:custom:v5-default +SNNRR:v0-default:@NOTSET@ +SNNRR:v1-default:@NOTSET@ +SNNRR:v2-default:@NOTSET@ +SNNRR:v3-default:@NOTSET@ +SNNRR:v4-default:@NOTSET@ +SNNRR:custom:@NOTSET@ +SNNRN:v0-default:@NOTSET@ +SNNRN:v1-default:@NOTSET@ +SNNRN:v2-default:@NOTSET@ +SNNRN:v3-default:@NOTSET@ +SNNRN:v4-default:@NOTSET@ +SNNRN:custom:@NOTSET@ +SNNNS:v0-default:v0-default +SNNNS:v1-default:v5-default +SNNNS:v2-default:v2-default +SNNNS:v3-default:v3-default +SNNNS:v4-default:v4-default +SNNNS:custom:custom +SNNNK:v0-default:v0-default +SNNNK:v1-default:v1-default +SNNNK:v2-default:v2-default +SNNNK:v3-default:v3-default +SNNNK:v4-default:v4-default +SNNNK:custom:custom +SNNNR:v0-default:@NOTSET@ +SNNNR:v1-default:@NOTSET@ +SNNNR:v2-default:@NOTSET@ +SNNNR:v3-default:@NOTSET@ +SNNNR:v4-default:@NOTSET@ +SNNNR:custom:@NOTSET@ +SNNNN:v0-default:v0-default +SNNNN:v1-default:v1-default +SNNNN:v2-default:v2-default +SNNNN:v3-default:v3-default +SNNNN:v4-default:v4-default +SNNNN:custom:custom +NSSSS:v0-default:v0-default +NSSSS:v1-default:v1-default +NSSSS:v2-default:v2-default +NSSSS:v3-default:v5-default +NSSSS:v4-default:v5-default +NSSSS:custom:custom +NSSSK:v0-default:v0-default +NSSSK:v1-default:v1-default +NSSSK:v2-default:v2-default +NSSSK:v3-default:v4-default +NSSSK:v4-default:v4-default +NSSSK:custom:custom +NSSSR:v0-default:@NOTSET@ +NSSSR:v1-default:@NOTSET@ +NSSSR:v2-default:@NOTSET@ +NSSSR:v3-default:@NOTSET@ +NSSSR:v4-default:@NOTSET@ +NSSSR:custom:@NOTSET@ +NSSSN:v0-default:v0-default +NSSSN:v1-default:v1-default +NSSSN:v2-default:v2-default +NSSSN:v3-default:v4-default +NSSSN:v4-default:v4-default +NSSSN:custom:custom +NSSKS:v0-default:v0-default +NSSKS:v1-default:v1-default +NSSKS:v2-default:v2-default +NSSKS:v3-default:v5-default +NSSKS:v4-default:v4-default +NSSKS:custom:custom +NSSKK:v0-default:v0-default +NSSKK:v1-default:v1-default +NSSKK:v2-default:v2-default +NSSKK:v3-default:v3-default +NSSKK:v4-default:v4-default +NSSKK:custom:custom +NSSKR:v0-default:@NOTSET@ +NSSKR:v1-default:@NOTSET@ +NSSKR:v2-default:@NOTSET@ +NSSKR:v3-default:@NOTSET@ +NSSKR:v4-default:@NOTSET@ +NSSKR:custom:@NOTSET@ +NSSKN:v0-default:v0-default +NSSKN:v1-default:v1-default +NSSKN:v2-default:v2-default +NSSKN:v3-default:v3-default +NSSKN:v4-default:v4-default +NSSKN:custom:custom +NSSRS:v0-default:v5-default +NSSRS:v1-default:v5-default +NSSRS:v2-default:v5-default +NSSRS:v3-default:v5-default +NSSRS:v4-default:v5-default +NSSRS:custom:v5-default +NSSRR:v0-default:@NOTSET@ +NSSRR:v1-default:@NOTSET@ +NSSRR:v2-default:@NOTSET@ +NSSRR:v3-default:@NOTSET@ +NSSRR:v4-default:@NOTSET@ +NSSRR:custom:@NOTSET@ +NSSRN:v0-default:@NOTSET@ +NSSRN:v1-default:@NOTSET@ +NSSRN:v2-default:@NOTSET@ +NSSRN:v3-default:@NOTSET@ +NSSRN:v4-default:@NOTSET@ +NSSRN:custom:@NOTSET@ +NSSNS:v0-default:v0-default +NSSNS:v1-default:v1-default +NSSNS:v2-default:v2-default +NSSNS:v3-default:v5-default +NSSNS:v4-default:v4-default +NSSNS:custom:custom +NSSNK:v0-default:v0-default +NSSNK:v1-default:v1-default +NSSNK:v2-default:v2-default +NSSNK:v3-default:v3-default +NSSNK:v4-default:v4-default +NSSNK:custom:custom +NSSNR:v0-default:@NOTSET@ +NSSNR:v1-default:@NOTSET@ +NSSNR:v2-default:@NOTSET@ +NSSNR:v3-default:@NOTSET@ +NSSNR:v4-default:@NOTSET@ +NSSNR:custom:@NOTSET@ +NSSNN:v0-default:v0-default +NSSNN:v1-default:v1-default +NSSNN:v2-default:v2-default +NSSNN:v3-default:v3-default +NSSNN:v4-default:v4-default +NSSNN:custom:custom +NSKSS:v0-default:v0-default +NSKSS:v1-default:v1-default +NSKSS:v2-default:v5-default +NSKSS:v3-default:v3-default +NSKSS:v4-default:v5-default +NSKSS:custom:custom +NSKSK:v0-default:v0-default +NSKSK:v1-default:v1-default +NSKSK:v2-default:v4-default +NSKSK:v3-default:v3-default +NSKSK:v4-default:v4-default +NSKSK:custom:custom +NSKSR:v0-default:@NOTSET@ +NSKSR:v1-default:@NOTSET@ +NSKSR:v2-default:@NOTSET@ +NSKSR:v3-default:@NOTSET@ +NSKSR:v4-default:@NOTSET@ +NSKSR:custom:@NOTSET@ +NSKSN:v0-default:v0-default +NSKSN:v1-default:v1-default +NSKSN:v2-default:v4-default +NSKSN:v3-default:v3-default +NSKSN:v4-default:v4-default +NSKSN:custom:custom +NSKKS:v0-default:v0-default +NSKKS:v1-default:v1-default +NSKKS:v2-default:v5-default +NSKKS:v3-default:v3-default +NSKKS:v4-default:v4-default +NSKKS:custom:custom +NSKKK:v0-default:v0-default +NSKKK:v1-default:v1-default +NSKKK:v2-default:v2-default +NSKKK:v3-default:v3-default +NSKKK:v4-default:v4-default +NSKKK:custom:custom +NSKKR:v0-default:@NOTSET@ +NSKKR:v1-default:@NOTSET@ +NSKKR:v2-default:@NOTSET@ +NSKKR:v3-default:@NOTSET@ +NSKKR:v4-default:@NOTSET@ +NSKKR:custom:@NOTSET@ +NSKKN:v0-default:v0-default +NSKKN:v1-default:v1-default +NSKKN:v2-default:v2-default +NSKKN:v3-default:v3-default +NSKKN:v4-default:v4-default +NSKKN:custom:custom +NSKRS:v0-default:v5-default +NSKRS:v1-default:v5-default +NSKRS:v2-default:v5-default +NSKRS:v3-default:v5-default +NSKRS:v4-default:v5-default +NSKRS:custom:v5-default +NSKRR:v0-default:@NOTSET@ +NSKRR:v1-default:@NOTSET@ +NSKRR:v2-default:@NOTSET@ +NSKRR:v3-default:@NOTSET@ +NSKRR:v4-default:@NOTSET@ +NSKRR:custom:@NOTSET@ +NSKRN:v0-default:@NOTSET@ +NSKRN:v1-default:@NOTSET@ +NSKRN:v2-default:@NOTSET@ +NSKRN:v3-default:@NOTSET@ +NSKRN:v4-default:@NOTSET@ +NSKRN:custom:@NOTSET@ +NSKNS:v0-default:v0-default +NSKNS:v1-default:v1-default +NSKNS:v2-default:v5-default +NSKNS:v3-default:v3-default +NSKNS:v4-default:v4-default +NSKNS:custom:custom +NSKNK:v0-default:v0-default +NSKNK:v1-default:v1-default +NSKNK:v2-default:v2-default +NSKNK:v3-default:v3-default +NSKNK:v4-default:v4-default +NSKNK:custom:custom +NSKNR:v0-default:@NOTSET@ +NSKNR:v1-default:@NOTSET@ +NSKNR:v2-default:@NOTSET@ +NSKNR:v3-default:@NOTSET@ +NSKNR:v4-default:@NOTSET@ +NSKNR:custom:@NOTSET@ +NSKNN:v0-default:v0-default +NSKNN:v1-default:v1-default +NSKNN:v2-default:v2-default +NSKNN:v3-default:v3-default +NSKNN:v4-default:v4-default +NSKNN:custom:custom +NSRSS:v0-default:v0-default +NSRSS:v1-default:v1-default +NSRSS:v2-default:v5-default +NSRSS:v3-default:v3-default +NSRSS:v4-default:v5-default +NSRSS:custom:custom +NSRSK:v0-default:v0-default +NSRSK:v1-default:v1-default +NSRSK:v2-default:v4-default +NSRSK:v3-default:v3-default +NSRSK:v4-default:v4-default +NSRSK:custom:custom +NSRSR:v0-default:@NOTSET@ +NSRSR:v1-default:@NOTSET@ +NSRSR:v2-default:@NOTSET@ +NSRSR:v3-default:@NOTSET@ +NSRSR:v4-default:@NOTSET@ +NSRSR:custom:@NOTSET@ +NSRSN:v0-default:v0-default +NSRSN:v1-default:v1-default +NSRSN:v2-default:v4-default +NSRSN:v3-default:v3-default +NSRSN:v4-default:v4-default +NSRSN:custom:custom +NSRRS:v0-default:v5-default +NSRRS:v1-default:v5-default +NSRRS:v2-default:v5-default +NSRRS:v3-default:v5-default +NSRRS:v4-default:v5-default +NSRRS:custom:v5-default +NSRRR:v0-default:@NOTSET@ +NSRRR:v1-default:@NOTSET@ +NSRRR:v2-default:@NOTSET@ +NSRRR:v3-default:@NOTSET@ +NSRRR:v4-default:@NOTSET@ +NSRRR:custom:@NOTSET@ +NSRRN:v0-default:@NOTSET@ +NSRRN:v1-default:@NOTSET@ +NSRRN:v2-default:@NOTSET@ +NSRRN:v3-default:@NOTSET@ +NSRRN:v4-default:@NOTSET@ +NSRRN:custom:@NOTSET@ +NSRNS:v0-default:v0-default +NSRNS:v1-default:v1-default +NSRNS:v2-default:v5-default +NSRNS:v3-default:v3-default +NSRNS:v4-default:v4-default +NSRNS:custom:custom +NSRNR:v0-default:@NOTSET@ +NSRNR:v1-default:@NOTSET@ +NSRNR:v2-default:@NOTSET@ +NSRNR:v3-default:@NOTSET@ +NSRNR:v4-default:@NOTSET@ +NSRNR:custom:@NOTSET@ +NSRNN:v0-default:v0-default +NSRNN:v1-default:v1-default +NSRNN:v2-default:v2-default +NSRNN:v3-default:v3-default +NSRNN:v4-default:v4-default +NSRNN:custom:custom +NSNSS:v0-default:v0-default +NSNSS:v1-default:v1-default +NSNSS:v2-default:v5-default +NSNSS:v3-default:v3-default +NSNSS:v4-default:v5-default +NSNSS:custom:custom +NSNSK:v0-default:v0-default +NSNSK:v1-default:v1-default +NSNSK:v2-default:v4-default +NSNSK:v3-default:v3-default +NSNSK:v4-default:v4-default +NSNSK:custom:custom +NSNSR:v0-default:@NOTSET@ +NSNSR:v1-default:@NOTSET@ +NSNSR:v2-default:@NOTSET@ +NSNSR:v3-default:@NOTSET@ +NSNSR:v4-default:@NOTSET@ +NSNSR:custom:@NOTSET@ +NSNSN:v0-default:v0-default +NSNSN:v1-default:v1-default +NSNSN:v2-default:v4-default +NSNSN:v3-default:v3-default +NSNSN:v4-default:v4-default +NSNSN:custom:custom +NSNKS:v0-default:v0-default +NSNKS:v1-default:v1-default +NSNKS:v2-default:v5-default +NSNKS:v3-default:v3-default +NSNKS:v4-default:v4-default +NSNKS:custom:custom +NSNKK:v0-default:v0-default +NSNKK:v1-default:v1-default +NSNKK:v2-default:v2-default +NSNKK:v3-default:v3-default +NSNKK:v4-default:v4-default +NSNKK:custom:custom +NSNKR:v0-default:@NOTSET@ +NSNKR:v1-default:@NOTSET@ +NSNKR:v2-default:@NOTSET@ +NSNKR:v3-default:@NOTSET@ +NSNKR:v4-default:@NOTSET@ +NSNKR:custom:@NOTSET@ +NSNKN:v0-default:v0-default +NSNKN:v1-default:v1-default +NSNKN:v2-default:v2-default +NSNKN:v3-default:v3-default +NSNKN:v4-default:v4-default +NSNKN:custom:custom +NSNRS:v0-default:v5-default +NSNRS:v1-default:v5-default +NSNRS:v2-default:v5-default +NSNRS:v3-default:v5-default +NSNRS:v4-default:v5-default +NSNRS:custom:v5-default +NSNRR:v0-default:@NOTSET@ +NSNRR:v1-default:@NOTSET@ +NSNRR:v2-default:@NOTSET@ +NSNRR:v3-default:@NOTSET@ +NSNRR:v4-default:@NOTSET@ +NSNRR:custom:@NOTSET@ +NSNRN:v0-default:@NOTSET@ +NSNRN:v1-default:@NOTSET@ +NSNRN:v2-default:@NOTSET@ +NSNRN:v3-default:@NOTSET@ +NSNRN:v4-default:@NOTSET@ +NSNRN:custom:@NOTSET@ +NSNNS:v0-default:v0-default +NSNNS:v1-default:v1-default +NSNNS:v2-default:v5-default +NSNNS:v3-default:v3-default +NSNNS:v4-default:v4-default +NSNNS:custom:custom +NSNNK:v0-default:v0-default +NSNNK:v1-default:v1-default +NSNNK:v2-default:v2-default +NSNNK:v3-default:v3-default +NSNNK:v4-default:v4-default +NSNNK:custom:custom +NSNNR:v0-default:@NOTSET@ +NSNNR:v1-default:@NOTSET@ +NSNNR:v2-default:@NOTSET@ +NSNNR:v3-default:@NOTSET@ +NSNNR:v4-default:@NOTSET@ +NSNNR:custom:@NOTSET@ +NSNNN:v0-default:v0-default +NSNNN:v1-default:v1-default +NSNNN:v2-default:v2-default +NSNNN:v3-default:v3-default +NSNNN:v4-default:v4-default +NSNNN:custom:custom +NRSSS:v0-default:v0-default +NRSSS:v1-default:v1-default +NRSSS:v2-default:v2-default +NRSSS:v3-default:v5-default +NRSSS:v4-default:v5-default +NRSSS:custom:custom +NRSSK:v0-default:v0-default +NRSSK:v1-default:v1-default +NRSSK:v2-default:v2-default +NRSSK:v3-default:v4-default +NRSSK:v4-default:v4-default +NRSSK:custom:custom +NRSSR:v0-default:@NOTSET@ +NRSSR:v1-default:@NOTSET@ +NRSSR:v2-default:@NOTSET@ +NRSSR:v3-default:@NOTSET@ +NRSSR:v4-default:@NOTSET@ +NRSSR:custom:@NOTSET@ +NRSSN:v0-default:v0-default +NRSSN:v1-default:v1-default +NRSSN:v2-default:v2-default +NRSSN:v3-default:v4-default +NRSSN:v4-default:v4-default +NRSSN:custom:custom +NRSKS:v0-default:v0-default +NRSKS:v1-default:v1-default +NRSKS:v2-default:v2-default +NRSKS:v3-default:v5-default +NRSKS:v4-default:v4-default +NRSKS:custom:custom +NRSKK:v0-default:v0-default +NRSKK:v1-default:v1-default +NRSKK:v2-default:v2-default +NRSKK:v3-default:v3-default +NRSKK:v4-default:v4-default +NRSKK:custom:custom +NRSKR:v0-default:@NOTSET@ +NRSKR:v1-default:@NOTSET@ +NRSKR:v2-default:@NOTSET@ +NRSKR:v3-default:@NOTSET@ +NRSKR:v4-default:@NOTSET@ +NRSKR:custom:@NOTSET@ +NRSKN:v0-default:v0-default +NRSKN:v1-default:v1-default +NRSKN:v2-default:v2-default +NRSKN:v3-default:v3-default +NRSKN:v4-default:v4-default +NRSKN:custom:custom +NRSRS:v0-default:v5-default +NRSRS:v1-default:v5-default +NRSRS:v2-default:v5-default +NRSRS:v3-default:v5-default +NRSRS:v4-default:v5-default +NRSRS:custom:v5-default +NRSRR:v0-default:@NOTSET@ +NRSRR:v1-default:@NOTSET@ +NRSRR:v2-default:@NOTSET@ +NRSRR:v3-default:@NOTSET@ +NRSRR:v4-default:@NOTSET@ +NRSRR:custom:@NOTSET@ +NRSRN:v0-default:@NOTSET@ +NRSRN:v1-default:@NOTSET@ +NRSRN:v2-default:@NOTSET@ +NRSRN:v3-default:@NOTSET@ +NRSRN:v4-default:@NOTSET@ +NRSRN:custom:@NOTSET@ +NRSNS:v0-default:v0-default +NRSNS:v1-default:v1-default +NRSNS:v2-default:v2-default +NRSNS:v3-default:v5-default +NRSNS:v4-default:v4-default +NRSNS:custom:custom +NRSNK:v0-default:v0-default +NRSNK:v1-default:v1-default +NRSNK:v2-default:v2-default +NRSNK:v3-default:v3-default +NRSNK:v4-default:v4-default +NRSNK:custom:custom +NRSNR:v0-default:@NOTSET@ +NRSNR:v1-default:@NOTSET@ +NRSNR:v2-default:@NOTSET@ +NRSNR:v3-default:@NOTSET@ +NRSNR:v4-default:@NOTSET@ +NRSNR:custom:@NOTSET@ +NRSNN:v0-default:v0-default +NRSNN:v1-default:v1-default +NRSNN:v2-default:v2-default +NRSNN:v3-default:v3-default +NRSNN:v4-default:v4-default +NRSNN:custom:custom +NRRSS:v0-default:v0-default +NRRSS:v1-default:v1-default +NRRSS:v2-default:v2-default +NRRSS:v3-default:v3-default +NRRSS:v4-default:v5-default +NRRSS:custom:custom +NRRSK:v0-default:v0-default +NRRSK:v1-default:v1-default +NRRSK:v2-default:v2-default +NRRSK:v3-default:v3-default +NRRSK:v4-default:v4-default +NRRSK:custom:custom +NRRSR:v0-default:@NOTSET@ +NRRSR:v1-default:@NOTSET@ +NRRSR:v2-default:@NOTSET@ +NRRSR:v3-default:@NOTSET@ +NRRSR:v4-default:@NOTSET@ +NRRSR:custom:@NOTSET@ +NRRSN:v0-default:v0-default +NRRSN:v1-default:v1-default +NRRSN:v2-default:v2-default +NRRSN:v3-default:v3-default +NRRSN:v4-default:v4-default +NRRSN:custom:custom +NRRRS:v0-default:v5-default +NRRRS:v1-default:v5-default +NRRRS:v2-default:v5-default +NRRRS:v3-default:v5-default +NRRRS:v4-default:v5-default +NRRRS:custom:v5-default +NRRRR:v0-default:@NOTSET@ +NRRRR:v1-default:@NOTSET@ +NRRRR:v2-default:@NOTSET@ +NRRRR:v3-default:@NOTSET@ +NRRRR:v4-default:@NOTSET@ +NRRRR:custom:@NOTSET@ +NRRRN:v0-default:@NOTSET@ +NRRRN:v1-default:@NOTSET@ +NRRRN:v2-default:@NOTSET@ +NRRRN:v3-default:@NOTSET@ +NRRRN:v4-default:@NOTSET@ +NRRRN:custom:@NOTSET@ +NRRNS:v0-default:v0-default +NRRNS:v1-default:v1-default +NRRNS:v2-default:v2-default +NRRNS:v3-default:v3-default +NRRNS:v4-default:v4-default +NRRNS:custom:custom +NRRNR:v0-default:@NOTSET@ +NRRNR:v1-default:@NOTSET@ +NRRNR:v2-default:@NOTSET@ +NRRNR:v3-default:@NOTSET@ +NRRNR:v4-default:@NOTSET@ +NRRNR:custom:@NOTSET@ +NRRNN:v0-default:v0-default +NRRNN:v1-default:v1-default +NRRNN:v2-default:v2-default +NRRNN:v3-default:v3-default +NRRNN:v4-default:v4-default +NRRNN:custom:custom +NRNSS:v0-default:v0-default +NRNSS:v1-default:v1-default +NRNSS:v2-default:v2-default +NRNSS:v3-default:v3-default +NRNSS:v4-default:v5-default +NRNSS:custom:custom +NRNSK:v0-default:v0-default +NRNSK:v1-default:v1-default +NRNSK:v2-default:v2-default +NRNSK:v3-default:v3-default +NRNSK:v4-default:v4-default +NRNSK:custom:custom +NRNSR:v0-default:@NOTSET@ +NRNSR:v1-default:@NOTSET@ +NRNSR:v2-default:@NOTSET@ +NRNSR:v3-default:@NOTSET@ +NRNSR:v4-default:@NOTSET@ +NRNSR:custom:@NOTSET@ +NRNSN:v0-default:v0-default +NRNSN:v1-default:v1-default +NRNSN:v2-default:v2-default +NRNSN:v3-default:v3-default +NRNSN:v4-default:v4-default +NRNSN:custom:custom +NRNRS:v0-default:v5-default +NRNRS:v1-default:v5-default +NRNRS:v2-default:v5-default +NRNRS:v3-default:v5-default +NRNRS:v4-default:v5-default +NRNRS:custom:v5-default +NRNRR:v0-default:@NOTSET@ +NRNRR:v1-default:@NOTSET@ +NRNRR:v2-default:@NOTSET@ +NRNRR:v3-default:@NOTSET@ +NRNRR:v4-default:@NOTSET@ +NRNRR:custom:@NOTSET@ +NRNRN:v0-default:@NOTSET@ +NRNRN:v1-default:@NOTSET@ +NRNRN:v2-default:@NOTSET@ +NRNRN:v3-default:@NOTSET@ +NRNRN:v4-default:@NOTSET@ +NRNRN:custom:@NOTSET@ +NRNNS:v0-default:v0-default +NRNNS:v1-default:v1-default +NRNNS:v2-default:v2-default +NRNNS:v3-default:v3-default +NRNNS:v4-default:v4-default +NRNNS:custom:custom +NRNNR:v0-default:@NOTSET@ +NRNNR:v1-default:@NOTSET@ +NRNNR:v2-default:@NOTSET@ +NRNNR:v3-default:@NOTSET@ +NRNNR:v4-default:@NOTSET@ +NRNNR:custom:@NOTSET@ +NRNNN:v0-default:v0-default +NRNNN:v1-default:v1-default +NRNNN:v2-default:v2-default +NRNNN:v3-default:v3-default +NRNNN:v4-default:v4-default +NRNNN:custom:custom +NNSSS:v0-default:v0-default +NNSSS:v1-default:v1-default +NNSSS:v2-default:v2-default +NNSSS:v3-default:v5-default +NNSSS:v4-default:v5-default +NNSSS:custom:custom +NNSSK:v0-default:v0-default +NNSSK:v1-default:v1-default +NNSSK:v2-default:v2-default +NNSSK:v3-default:v4-default +NNSSK:v4-default:v4-default +NNSSK:custom:custom +NNSSR:v0-default:@NOTSET@ +NNSSR:v1-default:@NOTSET@ +NNSSR:v2-default:@NOTSET@ +NNSSR:v3-default:@NOTSET@ +NNSSR:v4-default:@NOTSET@ +NNSSR:custom:@NOTSET@ +NNSSN:v0-default:v0-default +NNSSN:v1-default:v1-default +NNSSN:v2-default:v2-default +NNSSN:v3-default:v4-default +NNSSN:v4-default:v4-default +NNSSN:custom:custom +NNSKS:v0-default:v0-default +NNSKS:v1-default:v1-default +NNSKS:v2-default:v2-default +NNSKS:v3-default:v5-default +NNSKS:v4-default:v4-default +NNSKS:custom:custom +NNSKK:v0-default:v0-default +NNSKK:v1-default:v1-default +NNSKK:v2-default:v2-default +NNSKK:v3-default:v3-default +NNSKK:v4-default:v4-default +NNSKK:custom:custom +NNSKR:v0-default:@NOTSET@ +NNSKR:v1-default:@NOTSET@ +NNSKR:v2-default:@NOTSET@ +NNSKR:v3-default:@NOTSET@ +NNSKR:v4-default:@NOTSET@ +NNSKR:custom:@NOTSET@ +NNSKN:v0-default:v0-default +NNSKN:v1-default:v1-default +NNSKN:v2-default:v2-default +NNSKN:v3-default:v3-default +NNSKN:v4-default:v4-default +NNSKN:custom:custom +NNSRS:v0-default:v5-default +NNSRS:v1-default:v5-default +NNSRS:v2-default:v5-default +NNSRS:v3-default:v5-default +NNSRS:v4-default:v5-default +NNSRS:custom:v5-default +NNSRR:v0-default:@NOTSET@ +NNSRR:v1-default:@NOTSET@ +NNSRR:v2-default:@NOTSET@ +NNSRR:v3-default:@NOTSET@ +NNSRR:v4-default:@NOTSET@ +NNSRR:custom:@NOTSET@ +NNSRN:v0-default:@NOTSET@ +NNSRN:v1-default:@NOTSET@ +NNSRN:v2-default:@NOTSET@ +NNSRN:v3-default:@NOTSET@ +NNSRN:v4-default:@NOTSET@ +NNSRN:custom:@NOTSET@ +NNSNS:v0-default:v0-default +NNSNS:v1-default:v1-default +NNSNS:v2-default:v2-default +NNSNS:v3-default:v5-default +NNSNS:v4-default:v4-default +NNSNS:custom:custom +NNSNK:v0-default:v0-default +NNSNK:v1-default:v1-default +NNSNK:v2-default:v2-default +NNSNK:v3-default:v3-default +NNSNK:v4-default:v4-default +NNSNK:custom:custom +NNSNR:v0-default:@NOTSET@ +NNSNR:v1-default:@NOTSET@ +NNSNR:v2-default:@NOTSET@ +NNSNR:v3-default:@NOTSET@ +NNSNR:v4-default:@NOTSET@ +NNSNR:custom:@NOTSET@ +NNSNN:v0-default:v0-default +NNSNN:v1-default:v1-default +NNSNN:v2-default:v2-default +NNSNN:v3-default:v3-default +NNSNN:v4-default:v4-default +NNSNN:custom:custom +NNRSS:v0-default:v0-default +NNRSS:v1-default:v1-default +NNRSS:v2-default:v2-default +NNRSS:v3-default:v3-default +NNRSS:v4-default:v5-default +NNRSS:custom:custom +NNRSK:v0-default:v0-default +NNRSK:v1-default:v1-default +NNRSK:v2-default:v2-default +NNRSK:v3-default:v3-default +NNRSK:v4-default:v4-default +NNRSK:custom:custom +NNRSR:v0-default:@NOTSET@ +NNRSR:v1-default:@NOTSET@ +NNRSR:v2-default:@NOTSET@ +NNRSR:v3-default:@NOTSET@ +NNRSR:v4-default:@NOTSET@ +NNRSR:custom:@NOTSET@ +NNRSN:v0-default:v0-default +NNRSN:v1-default:v1-default +NNRSN:v2-default:v2-default +NNRSN:v3-default:v3-default +NNRSN:v4-default:v4-default +NNRSN:custom:custom +NNRRS:v0-default:v5-default +NNRRS:v1-default:v5-default +NNRRS:v2-default:v5-default +NNRRS:v3-default:v5-default +NNRRS:v4-default:v5-default +NNRRS:custom:v5-default +NNRRR:v0-default:@NOTSET@ +NNRRR:v1-default:@NOTSET@ +NNRRR:v2-default:@NOTSET@ +NNRRR:v3-default:@NOTSET@ +NNRRR:v4-default:@NOTSET@ +NNRRR:custom:@NOTSET@ +NNRRN:v0-default:@NOTSET@ +NNRRN:v1-default:@NOTSET@ +NNRRN:v2-default:@NOTSET@ +NNRRN:v3-default:@NOTSET@ +NNRRN:v4-default:@NOTSET@ +NNRRN:custom:@NOTSET@ +NNRNS:v0-default:v0-default +NNRNS:v1-default:v1-default +NNRNS:v2-default:v2-default +NNRNS:v3-default:v3-default +NNRNS:v4-default:v4-default +NNRNS:custom:custom +NNRNR:v0-default:@NOTSET@ +NNRNR:v1-default:@NOTSET@ +NNRNR:v2-default:@NOTSET@ +NNRNR:v3-default:@NOTSET@ +NNRNR:v4-default:@NOTSET@ +NNRNR:custom:@NOTSET@ +NNRNN:v0-default:v0-default +NNRNN:v1-default:v1-default +NNRNN:v2-default:v2-default +NNRNN:v3-default:v3-default +NNRNN:v4-default:v4-default +NNRNN:custom:custom +NNNSS:v0-default:v0-default +NNNSS:v1-default:v1-default +NNNSS:v2-default:v2-default +NNNSS:v3-default:v3-default +NNNSS:v4-default:v5-default +NNNSS:custom:custom +NNNSK:v0-default:v0-default +NNNSK:v1-default:v1-default +NNNSK:v2-default:v2-default +NNNSK:v3-default:v3-default +NNNSK:v4-default:v4-default +NNNSK:custom:custom +NNNSR:v0-default:@NOTSET@ +NNNSR:v1-default:@NOTSET@ +NNNSR:v2-default:@NOTSET@ +NNNSR:v3-default:@NOTSET@ +NNNSR:v4-default:@NOTSET@ +NNNSR:custom:@NOTSET@ +NNNSN:v0-default:v0-default +NNNSN:v1-default:v1-default +NNNSN:v2-default:v2-default +NNNSN:v3-default:v3-default +NNNSN:v4-default:v4-default +NNNSN:custom:custom +NNNRS:v0-default:v5-default +NNNRS:v1-default:v5-default +NNNRS:v2-default:v5-default +NNNRS:v3-default:v5-default +NNNRS:v4-default:v5-default +NNNRS:custom:v5-default +NNNRR:v0-default:@NOTSET@ +NNNRR:v1-default:@NOTSET@ +NNNRR:v2-default:@NOTSET@ +NNNRR:v3-default:@NOTSET@ +NNNRR:v4-default:@NOTSET@ +NNNRR:custom:@NOTSET@ +NNNRN:v0-default:@NOTSET@ +NNNRN:v1-default:@NOTSET@ +NNNRN:v2-default:@NOTSET@ +NNNRN:v3-default:@NOTSET@ +NNNRN:v4-default:@NOTSET@ +NNNRN:custom:@NOTSET@ +NNNNS:v0-default:v0-default +NNNNS:v1-default:v1-default +NNNNS:v2-default:v2-default +NNNNS:v3-default:v3-default +NNNNS:v4-default:v4-default +NNNNS:custom:custom +NNNNR:v0-default:@NOTSET@ +NNNNR:v1-default:@NOTSET@ +NNNNR:v2-default:@NOTSET@ +NNNNR:v3-default:@NOTSET@ +NNNNR:v4-default:@NOTSET@ +NNNNR:custom:@NOTSET@ +NNNNN:v0-default:v0-default +NNNNN:v1-default:v1-default +NNNNN:v2-default:v2-default +NNNNN:v3-default:v3-default +NNNNN:v4-default:v4-default +NNNNN:custom:custom diff --git a/tests/ut_settings/upgradetesthelper.cpp b/tests/ut_settings/upgradetesthelper.cpp new file mode 100644 index 0000000..4b1eb58 --- /dev/null +++ b/tests/ut_settings/upgradetesthelper.cpp @@ -0,0 +1,256 @@ +/** + * @file upgradetesthelper.cpp + * @copyright 2013 Jolla Ltd. + * @author Martin Kampas + * @date 2013 + */ + +#include "upgradetesthelper.h" + +#include +#include +#include +#include +#include + +#include + +/** + * @class UpgradeTestHelper + * @brief Utilities to generate upgrade-test data + * + * It is driven by recipe in following format. + * + * Every line consists of three values delimited by colon: + * + * @verbatim + * :: + * @endverbatim + * + * - history of changes of the key. A word of length HistoryLength made up + * of letters [SKRN] -- (S)et value, (K)eep value, (R)emove key, (N)oop + * - current value (settings at revision CurrentVersion) + * - value expected after upgrade. The special value "@NOTSET@" means the key + * is expected to not be set after upgrade. + * + * Action (S)et results in assigning "v-default" to the key, e.g., + * "v5-default" when 'S' appears as 5th letter in the history word. + * + * The key is built as "__". + * + * Example: + * + * @verbatim + * SKNRN:v1-default:@NOTSET@ + * SSNSN:v2-default:v4-default + * @endverbatim + * + * Generated settings: + * + * @verbatim + * [Global] + * configVersion = 2 + * SKNRN__v1-default = v1-default + * SSNSN__v2-default = v2-default + * + * [groupA] + * SKNRN__v1-default = v1-default + * SSNSN__v2-default = v2-default + * @endverbatim + * + * Generated default settings: + * + * @verbatim + * [Global] + * configVersion = 5 + * + * [1] + * SKNRN__v1-default = v1-default + * groupA\SKNRN__v1-default = v1-default + * SSNSN__v2-default = v1-default + * groupA\SSNSN__v2-default = v1-default + * + * [2] + * SKNRN__v1-default = v1-default + * groupA\SKNRN__v1-default = v1-default + * SSNSN__v2-default = v2-default + * groupA\SSNSN__v2-default = v2-default + * + * [3] + * + * [4] + * cmd-remove = SKNRN__v1-default, groupA/SKNRN__v1-default + * SSNSN__v2-default = v4-default + * groupA\SSNSN__v2-default = v4-default + * + * [5] + * @endverbatim + */ + +QList UpgradeTestHelper::readRecipe(QIODevice *recipe){ + QList testCases; + + while (!recipe->atEnd()){ + const QString line = recipe->readLine().trimmed(); + if (line.startsWith('#') || line.isEmpty()) + continue; + const QStringList splitted = line.split(':'); + Q_ASSERT_X(splitted.count() == 3, Q_FUNC_INFO, + qPrintable(QString("Inalid recipe line '%1'").arg(line))); + testCases.append(TestCase(splitted.at(0), splitted.at(1), splitted.at(2))); + } + + return testCases; +} + +void UpgradeTestHelper::fillSettings(QSettings *settings, const QList &testCases){ + settings->setValue("configVersion", CurrentVersion); + + foreach (const QString &group, groups()){ + settings->beginGroup(group); + + foreach (const TestCase &testCase, testCases){ + if (!testCase.current.isEmpty()){ + settings->setValue(testCase.key(), testCase.current); + } + } + + settings->endGroup(); + } + + settings->sync(); +} + +void UpgradeTestHelper::fillDefaultSettings(QSettings *defaultSettings, const QList + &testCases){ + defaultSettings->setValue("configVersion", HistoryLength); + + QHash lastSetValue; // for the (K)eep action; no need to qualify with group + + for (int revision = 1; revision <= HistoryLength; ++revision){ + defaultSettings->beginGroup(QString::number(revision)); + + QStringList keysToRemove; + + foreach (const QString &group, groups()){ + defaultSettings->beginGroup(group); + + foreach (const TestCase &testCase, testCases){ + switch (testCase.history.at(revision - 1).toAscii()){ + case 'S': // (S)et value + lastSetValue[testCase.key()] = QString("v%1-default").arg(revision); + defaultSettings->setValue(testCase.key(), lastSetValue[testCase.key()]); + break; + + case 'K': // (K)eep value + Q_ASSERT_X(!lastSetValue[testCase.key()].isEmpty(), Q_FUNC_INFO, + qPrintable(QString("Inalid TestCase::history: '%1'").arg(testCase.history))); + defaultSettings->setValue(testCase.key(), lastSetValue[testCase.key()]); + break; + + case 'R': // (R)emove key + keysToRemove.append((group.isEmpty() ? group : group + "/") + testCase.key()); + lastSetValue.remove(testCase.key()); + break; + + case 'N': // (N)oop + break; + + default: + Q_ASSERT_X(false, Q_FUNC_INFO, qPrintable(QString( + "Inalid TestCase::history: '%1': invalid command-code '%2'") + .arg(testCase.history) + .arg(testCase.history.at(revision - 1)))); + } + + } + + defaultSettings->endGroup(); + } + + if (!keysToRemove.isEmpty()){ + defaultSettings->setValue("cmd-remove", keysToRemove); + } + + defaultSettings->endGroup(); + } + + defaultSettings->sync(); +} + +bool UpgradeTestHelper::generateSnapshotRecipe(QTextStream *out){ + const QString actions = "SKRN"; + + QBuffer buf; + buf.open(QIODevice::ReadWrite); + QTextStream stream(&buf); + + // for all "valid" variations of the letters "SKRN" of length HistoryLength + for (int i = 0; i < qPow(actions.count(), HistoryLength); ++i){ + QString history = QString::number(i, actions.count()); + // Left pad to HistoryLength + history.prepend(QString(HistoryLength - history.length(), '0')); + for (int revision = 0; revision < history.length(); ++revision){ + history.replace(revision, 1, actions.at(history.at(revision).digitValue())); + } + + static const QRegExp invalidSequence("(^[^S]*K|R[^S]*K|^R)"); + if (history.contains(invalidSequence)){ + continue; + } + + for (int revision = 0; revision < HistoryLength; ++revision){ + stream << history << QString(":v%1-default:\n").arg(revision); + } + + stream << history << ":custom:\n"; + } + + stream.flush(); + + // Read recipe + buf.seek(0); + QList testCases = readRecipe(&buf); + + // Generate settings file according to recipe + QTemporaryFile settingsFile; + if (!settingsFile.open()){ + return false; + } + + QSettings settings(settingsFile.fileName(), QSettings::IniFormat); + + fillSettings(&settings, testCases); + + // Generate defaults file according to recipe + QTemporaryFile defaultSettingsFile; + if (!defaultSettingsFile.open()){ + return false; + } + + QSettings defaultSettings(defaultSettingsFile.fileName(), QSettings::IniFormat); + + fillDefaultSettings(&defaultSettings, testCases); + + // Parse settings -- do upgrade + SsuSettings ssuSettings(settingsFile.fileName(), QSettings::IniFormat, + defaultSettingsFile.fileName()); + + // Output recipe + foreach (const UpgradeTestHelper::TestCase &testCase, testCases){ + const QString expected = ssuSettings.contains(testCase.key()) + ? ssuSettings.value(testCase.key()).toString() + : "@NOTSET@"; + *out << QString("%1:%2:%3\n") + .arg(testCase.history) + .arg(testCase.current) + .arg(expected); + } + + return true; +} + +QStringList UpgradeTestHelper::groups(){ + static const QStringList groups = QStringList() << "" /* General */ << "groupA"; + return groups; +} diff --git a/tests/ut_settings/upgradetesthelper.h b/tests/ut_settings/upgradetesthelper.h new file mode 100644 index 0000000..13d3d7a --- /dev/null +++ b/tests/ut_settings/upgradetesthelper.h @@ -0,0 +1,50 @@ +/** + * @file upgradetesthelper.h + * @copyright 2013 Jolla Ltd. + * @author Martin Kampas + * @date 2013 + */ + +#ifndef _UPGRADETESTHELPER_H +#define _UPGRADETESTHELPER_H + +#include +#include + +class QIODevice; +class QSettings; +class QTextStream; + +class UpgradeTestHelper { + public: + enum { HistoryLength = 5, CurrentVersion = 3 }; + + struct TestCase; + + static QList readRecipe(QIODevice *recipe); + static void fillSettings(QSettings *settings, const QList &testCases); + static void fillDefaultSettings(QSettings *defaultSettings, const QList &testCases); + static bool generateSnapshotRecipe(QTextStream *out); + + static QStringList groups(); +}; + +struct UpgradeTestHelper::TestCase { + TestCase(const QString &history, const QString ¤t, const QString &expected) : + history(history), current(current), expected(expected){ + } + + QString key() const{ + return QString("%1__%2").arg(history).arg(current); + } + + bool keyShouldBeSet() const{ + return expected != "@NOTSET@"; + } + + const QString history; // Sequence of (S)et, (K)eep, (R)emove, (N)oop + const QString current; + const QString expected; +}; + +#endif diff --git a/tests/ut_settings/ut_settings.pro b/tests/ut_settings/ut_settings.pro index 20e4f2f..a94f7fa 100644 --- a/tests/ut_settings/ut_settings.pro +++ b/tests/ut_settings/ut_settings.pro @@ -1,9 +1,11 @@ HEADERS = \ settingstest.h \ + upgradetesthelper.h \ SOURCES = \ main.cpp \ settingstest.cpp \ + upgradetesthelper.cpp \ RESOURCES = testdata.qrc TEMPLATE = app @@ -20,3 +22,12 @@ unix:target.path = $${PREFIX}/$$TESTS_PATH INSTALLS += target !include( ../../buildpath.pri ) { error("Unable to find build path specification") } + +update_upgrade_test_recipe.target = update-upgrade-test-recipe +update_upgrade_test_recipe.depends = first +update_upgrade_test_recipe.commands = \ + LD_LIBRARY_PATH="$${LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}" \ + $${DESTDIR}/$${TARGET} -generate-upgrade-test-recipe \ + 2>/dev/null > $${PWD}/testdata/upgrade/recipe +update_upgrade_test_recipe.CONFIG += phony +QMAKE_EXTRA_TARGETS += update_upgrade_test_recipe